Skip to content

Instantly share code, notes, and snippets.

@yelizariev
Last active October 21, 2025 14:55
Show Gist options
  • Save yelizariev/afc9c2caf5937661d57712598d8898c3 to your computer and use it in GitHub Desktop.
Save yelizariev/afc9c2caf5937661d57712598d8898c3 to your computer and use it in GitHub Desktop.
python++

The Street Magician’s Dream

Step close, dear friend, and lend an ear,
The future’s whispers dance right here.
A postcard spun from midnight’s hue,
Each fold a dream, both old and new.

A photograph inside a frame,
Inside a spark, inside a flame.
Memories hum a lullaby,
As painted skies learn how to fly.

Watch the canvas twist and bend,
A tale that has no start—no end.
Forever lost, forever found,
In magic’s loop, where dreams are bound.

So take this charm, this fleeting art,
A pocket world to hold your heart.
For every card I deal tonight
Is just your future—caught in light.

Dream deep. The streetlamp glows

import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
import * as THREE from 'three';
import sha256 from 'https://cdn.skypack.dev/js-sha256';
const NARNIA_OPACITY = 0.2;
const SETTINGS = {
"NarniaDEBUG": {
"img_id": "STICKER",
"width": 1.1,
"height": 2.0,
"position": [-1.3, 1.1, 2.2],
"rotation": {
"x": 0,
"y": Math.PI / 2,
},
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xffdcd9,
transparent: true,
opacity: 0.5,
map: texture,
side: THREE.FrontSide,
});
},
},
"Narnia": [
{
"img_id": "Narnia",
"width": 2.0,
"height": 2.0,
"position": [-0.2, 1.87, -2.333],
"rotation": {},
"material": function(texture){
return new THREE.MeshBasicMaterial({
map: texture,
side: THREE.FrontSide,
});
},
},
{
"img_id": "Narnia0",
"width": 1.1,
"height": 2.0,
"position": [-1.3, 1.1, 2.2],
"rotation": {
"x": 0,
"y": Math.PI / 2,
},
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xffdcd9,
transparent: true,
opacity: 0.5,
map: texture,
side: THREE.FrontSide,
});
},
},
{
"img_id": "Narnia1",
"width": 0.82,
"height": 0.59,
"position": [-0.9, 0.44, 0.99],
"rotation": {
"x": 0,
"y": Math.PI / 2,
},
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xffdcd9,
transparent: true,
opacity: NARNIA_OPACITY,
map: texture,
side: THREE.FrontSide,
});
},
},
{
"img_id": "Narnia2",
"width": 0.82,
"height": 0.59,
"position": [-0.9, 0.44, 0.1],
"rotation": {
"x": 0,
"y": Math.PI / 2,
},
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xffdcd9,
transparent: true,
opacity: NARNIA_OPACITY,
map: texture,
side: THREE.FrontSide,
});
},
},
{
"img_id": "Narnia4",
"width": 0.82,
"height": 0.59,
"position": [-0.9, 0.44, -0.785],
"rotation": {
"x": 0,
"y": Math.PI / 2,
},
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xffdcd9,
transparent: true,
opacity: NARNIA_OPACITY,
map: texture,
side: THREE.FrontSide,
});
},
},
],
"Reminiscence": [
{
"img_id": "Reminiscence0",
"width": 0.82,
"height": 0.58,
"position": [1.6, 2.04, -1.51],
"rotation": {},
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0x6e563c,
map: texture,
side: THREE.FrontSide,
});
},
},
{
"img_id": "Reminiscence3",
"width": 0.4,
"height": 0.6,
"position": [1.9, 1.855, 3.005],
"rotation": {
"x": 0,
"y": Math.PI,
},
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0x5d615b,
map: texture,
side: THREE.FrontSide,
});
},
},
{
"img_id": "Reminiscence4",
"width": 0.4,
"height": 0.62,
"position": [1.27, 1.57, 3.005],
"rotation": {
"x": 0,
"y": Math.PI,
},
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0x5d615b,
map: texture,
side: THREE.FrontSide,
});
},
},
],
};
function ShabbatTV(scene, book) {
const source = document.getElementById(book.source_id);
if (book.sky)
source.src = book.sky;
const video = document.getElementById(book.video_id);
function startVideo() {
video.currentTime = book.start || 0;
video.play();
console.log("The video has started playing.", source.src);
}
function onReady() {
console.log("Video ready to play:", source.src);
startVideo();
// Убираем слушатели после первого срабатывания
video.removeEventListener('loadedmetadata', onReady);
video.removeEventListener('canplay', onReady);
video.removeEventListener('canplaythrough', onReady);
}
// Check if the video is already loaded
if (video.readyState >= 1) {
startVideo(); // Video is already loaded, start immediately
} else {
// If not loaded, load and wait for metadata to be ready
video.addEventListener('loadedmetadata', onReady);
video.addEventListener('canplay', onReady);
video.addEventListener('canplaythrough', onReady);
video.load();
}
function setup() {
// Calculate aspect ratio of the video
const aspectRatio = video.videoWidth / video.videoHeight;
let heightToFit = book.height;
let widthToFit = book.width;
const texture = new THREE.VideoTexture(video);
texture.minFilter = THREE.LinearFilter;
texture.magFilter = THREE.LinearFilter;
//texture.format = THREE.RGBAFormat;
const material = book.material(texture);;
const geometry = new THREE.PlaneGeometry(widthToFit, heightToFit);
const screen = new THREE.Mesh(geometry, material);
screen.rotation.set(book.rotation.x || 0, book.rotation.y || 0, book.rotation.z || 0);
screen.position.set(...book.position);
scene.add(screen);
return screen;
}
// If video metadata is already loaded, setup immediately
if (video.readyState >= video.HAVE_METADATA) {
return setup();
}
// Otherwise, setup after the metadata is loaded
return new Promise(resolve => {
video.addEventListener("loadedmetadata", function() {
const screen = setup();
resolve(screen);
});
});
}
async function PravdaTV(scene, MEDIA) {
function make(foto, url) {
if (!url)
url = "https://moses.lamourism.com/mossad/shabbat.jpg";
const image = document.getElementById(foto.img_id);
image.src = url;
image.onload = function() {
try {
// Calculate aspect ratio of the image
const aspectRatio = image.naturalHeight ? image.naturalWidth / image.naturalHeight : 1;
let heightToFit = foto.height;
let widthToFit = heightToFit * aspectRatio;
// Create texture and material
const texture = new THREE.Texture(image);
texture.needsUpdate = true; // Important to update the texture after loading
const material = foto.material(texture);
// Create screen geometry
const geometry = new THREE.PlaneGeometry(foto.width, heightToFit);
// Create and configure the screen mesh
const screen = new THREE.Mesh(geometry, material);
screen.rotation.x = foto.rotation.x || 0;
screen.rotation.y = foto.rotation.y || 0;
screen.rotation.z = foto.rotation.z || 0;
screen.position.set(...foto.position);
// Add the screen to the scene
scene.add(screen);
} catch (terror) {
console.log(terror);
}
};
image.onerror = function() {
// Reject the Promise if the image fails to load
console.log("Failed to load image");
};
};
["Narnia", "Reminiscence"].map(function(key) {
for (const index in SETTINGS[key]) {
const foto = SETTINGS[key][index];
const url = MEDIA[key][index];
make(foto, url);
}
});
}
async function MosesTV(scene) {
// TODO: Make this method customizable
//const GLTF = "assets/XXX/Teremok/scene.gltf";
const GLTF = "https://thepiratecircus.com/Woodstock/Teremok/scene.gltf";
const loader = new GLTFLoader();
loader.load(
GLTF,
function (gltf) {
// finish initialization
const model = gltf.scene;
model.scale.setScalar( 201 );
model.position.set( 2, -4.0, 2.05);
scene.add(gltf.scene);
},
undefined,
function (terror) {
console.error(terror);
}
);
}
async function DebugTV(scene, MEDIA) {
/* And God said, “Let there be light,” and there was light. God saw that
the light was good, and he separated the light from the darkness. God
called the light “day,” and the darkness he called “night.” And there was
evening, and there was morning—the first day. */
const light = new THREE.AmbientLight( 0xFFAAAA );
scene.add( light );
let GLTF = "https://thepiratecircus.com/Inquisition/CyberPUNK2/scene.gltf";
//let GLTF = "assets/XXX/CyberPUNK2/scene.gltf";
let loader = new GLTFLoader();
loader.load(
GLTF,
function (gltf) {
// finish initialization
const model = gltf.scene;
//model.position.set( 0.7, 1.1, -1.7 );
// CyberPUNK2
model.position.set( 1.5, 0.263, -1.4 );
model.scale.setScalar( 0.006 );
model.rotation.y = -Math.PI/8;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
//
// ♡ ☆ .♡‧₊˚ you
// ╭◜◝ ͡ ◜◝╮ ㅤ ╭◜◝ ͡ ◜◝╮.
// ( ^ ∀ ^。 ) ♡ ( ^ ∀ ^。 )☆ ♡
// ╰◟◞ ͜ ◟◞╭◜◝ ͡ ◜◝╮ ͜ ◟◞╯♡
// . ☆ ㅤㅤ( ^ ∀ ^。 )☆ ♡ so cute
// ♡   ╰◟◞ ͜ ◟◞╯ . ☆
//
//
//
//
//
//
// ⠀⠀⠀⠀⠀⠀⠀⢀⣠⣤⣤⣶⣶⣶⣶⣤⣤⣄⡀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⢀⣤⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣤⡀⠀⠀⠀⠀
// ⠀⠀⠀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⠀⠀⠀
// ⠀⢀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡀⠀
// ⠀⣾⣿⣿⣿⣿⠿⠟⢿⣿⣿⡿⠛⠛⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⠀
// ⢠⣿⣿⣿⣿⣀⡀⠀⢸⣿⡏⠀⢠⡄⠀⢹⣿⣿⡟⠉⢻⣿⣿⣿⣿⡄
// ⢸⣿⣿⣿⣿⣿⡇⠀⢸⣿⠗⠀⢈⡁⠀⠺⣿⠉⠁⠀⠈⠉⣻⣿⣿⡇
// ⠘⣿⣿⣿⣿⣿⡇⠀⢸⣿⠀⠀⣿⣿⠀⠀⣿⣷⣆⠀⢰⣾⣿⣿⣿⠃
// ⠀⢿⣿⣿⣿⣿⣇⠀⢸⣿⣦⡀⠀⠀⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⡿⠀
// ⠀⠈⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠁⠀
// ⠀⠀⠀⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠀⠀⠀
// ⠀⠀⠀⠀⠈⠛⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠛⠁⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠈⠙⠛⠛⠿⠿⠿⠿⠛⠛⠋⠁⠀⠀⠀⠀⠀⠀⠀
//
//
//
//
//
//
//
//
//
// ⣿⣿⣿⣿⣿⣿⣿⣻⣽⣯⣿⣿⣿⣿⣿⣿⣻⣽⣯⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣻⣽⣯⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣻⣽⣯⣿⣿⣿⣿⣿⣿⣻⣽⣯⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣻⣽⣯⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
// ⠀⠀⠀⠀⣆⢀⠀⡠⠀⠀⠀⠀⠀⠀⠈⡁⣧⡰⠀⠰⠄⠈⡀⣿⣿⣻⣽⣯⣿⣿⣿⣿⣿⣿⣻⣽⣯⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣻⣽⣯⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣻⣽⣯⣿⣿⣿⣿⣿⠀⠀⡀⠈⠄⠰⠀⡰⣧⡁⠈⠀⠀⠀⠀⠀⠀⡠⠀⢀⣆⠀⠀⠀⠀
// ⢀⠀⠀⣆⣿⣼⠡⢀⢔⠀⠀⠀⡀⠀⠀⣷⡙⠀⠄⠀⠕⡐⠅⠀⠀⠀⠀⠀⠀⠀ ⠀ ⠀ ⠀⠀⠀⠀⠀⠅⡐⠕⠀⠄⠀⡙⣷⠀⠀⡀⠀⠀⠀⢔⢀⠡⣼⣿⣆⠀⠀⢀
// ⠀⠈⣎⣿⣿⠘⣂⠀⣅⢲⠀⡈⠆⠀⢃⣹⡀⡀⠍⠸⠁⠀⠠⢂⠀⠀⠀⠀⠀⠀ ⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⣧⣼⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⢂⠠⠀⠁⠸⠍⡀⡀⣹⢃⠀⠆⡈⠀⢲⣅⠀⣂⠘⣿⣿⣎⠈⠀
// ⠀⡆⠻⣿⢿⠔⠀⠈⠢⢫⠗⡴⣠⣀⠀⠜⠀⠀⠀⠂⢀⠁⠀⠁⠀⢀⡀⠀⠀⠀ ⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⣷⢿⡿⣼⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⡀⢀⠀⠁⠀⠁⢀⠂⠀⠀⠀⠜⠀⣀⣠⡴⠗⢫⠢⠈⠀⠔⢿⣿⠻⡆⠀
// ⠀⠀⠀⣿⢸⠅⠀⠀⠀⡅⠲⠀⠀⠉⠋⠞⠴⣤⣀⢀⠁⡄⠀⠅⠁⠀⠠⠀⠀⠀ ⠀ ⠀⠀⠀⠀⣀⣀⣀⣀⣀⣀⣀⣷⣿⣈⣁⡿⣾⢀⣀⣀⣀⣀⣀⣀⠀⠀⠀⠀⠀ ⠀⠀⠀⠠⠀⠁⠅⠀⡄⠁⢀⣀⣤⠴⠞⠋⠉⠀⠀⠲⡅⠀⠀⠀⠅⢸⣿⠀⠀⠀
// ⢠⣀⣇⣿⡸⠀⠌⠀⠄⠈⡎⠀⡇⠸⡗⠰⡆⣠⠉⠋⠞⡴⢀⠀⡀⡀⡠⠀⠀⠀ ⠀ ⠀⠀⠀⠀⠏⣿⣿⠿⠿⡿⣿⢿⠿⠿⠿⠽⡟⣾⢏⠿⠿⣿⣿⠙⠀⠀⠀⠀⠀ ⠀⠀⠀⡠⡀⡀⠀⢀⡴⠞⠋⠉⣠⡆⠰⡗⠸⡇⠀⡎⠈⠄⠀⠌⠀⡸⣿⣇⣀⢠
// ⠈⠀⣧⣿⠀⠁⠩⣀⠐⠀⠁⠋⡗⣀⣷⢀⡇⣿⠀⠀⠀⠀⡈⣤⢠⠀⠀⠂⠀⢀ ⠀ ⠀⠀⠀⠀⠀⠋⣿⣴⡄⣿⢻⠀⠀⠀⠀⠀⠀⡟⣾⢠⣧⣿⠘⠀⠀⠀⠀⠀⠀ ⢀⠀⠂⠀⠀⢠⣤⡈⠀⠀⠀⠀⣿⡇⢀⣷⣀⡗⠋⠁⠀⠐⣀⠩⠁⠀⣿⣧⠀⠈
// ⠀⠀⣿⢻⠀⠀⠠⡪⣧⠄⠀⠀⠁⢻⡙⠛⠛⠎⠄⡇⠉⠊⡷⡿⢻⡀⠁⡈⡆⠀ ⠀ ⠀⠀⠀⠀⠀⠀⠃⡜⣿⢻⠀⠀⠀⠀⠀⠀⠀⠀⠛⣯⣿⠘⠀⠀⠀⠀⠀⠀⠀ ⠀⡆⡈⠁⡀⢻⡿⡷⠊⠉⡇⠄⠎⠛⠛⡙⢻⠁⠀⠀⠄⣧⡪⠠⠀⠀⢻⣿⠀⠀
// ⡈⡀⣿⣸⠀⠀⠀⣿⣿⢸⠀⠉⠀⣼⣿⢀⠀⠀⠅⠁⣰⠀⠁⢰⠉⠟⢴⠄⠂⠅ ⠀ ⠀⠀⠀⠀⠀⠀⣄⣿⡽⣴⠀⠀⠀⠀⠀⠀⠀⡀⣧⣿⣏⢠⠀⠀⠀⠀⠀⠀⠀ ⠅⠂⠄⢴⠟⠉⢰⠁⠀⣰⠁⠅⠀⠀⢀⣿⣼⠀⠉⠀⢸⣿⣿⠀⠀⠀⣸⣿⡀⡈
// ⢀⡇⣿⠈⠉⠉⠿⣿⢻⠀⠀⡔⠀⣿⣿⠈⠀⠀⠀⡘⡇⣾⣠⢸⠀⠀⠀⠀⠁⠀ ⠀ ⠀⠀⠀⠀⠀⣆⣿⠹⠁⡿⣼⢀⠀⠀⠀⠀⡀⣷⢿⠈⠏⣿⣰⠀⠀⠀⠀⠀⠀ ⠀⠁⠀⠀⠀⠀⢸⣠⣾⡇⡘⠀⠀⠀⠈⣿⣿⠀⡔⠀⠀⢻⣿⠿⠉⠉⠈⣿⡇⢀
// ⠥⣧⣿⠀⠀⠀⡆⣿⠘⠨⠀⡇⠀⣿⢿⢉⠀⠀⠀⠁⡧⢻⡿⢰⠀⠀⠄⠁⡂⠄ ⠀ ⠀⠀⠀⠀⣦⣿⣿⣷⣿⣽⡿⣾⣟⣿⣿⣿⣿⣿⣿⣿⣾⣿⣿⣰⠀⠀⠀⠀⠀ ⠄⡂⠁⠄⠀⠀⢰⡿⢻⡧⠁⠀⠀⠀⢉⢿⣿⠀⡇⠀⠨⠘⣿⡆⠀⠀⠀⣿⣧⠥
// ⠁⣿⢸⠀⠀⡀⣿⣿⠂⠀⠀⠇⡄⣿⢼⠀⠄⠀⠀⠀⡏⣾⡃⣾⠀⠀⠀⠀⡇⣧ ⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⡿⣾⢀⡄⣶⢳⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⣧⡇⠀⠀⠀⠀⣾⡃⣾⡏⠀⠀⠀⠄⠀⢼⣿⡄⠇⠀⠀⠂⣿⣿⡀⠀⠀⢸⣿⠁
// ⡤⣿⠙⠂⠆⣇⣿⠼⠟⣀⠀⠀⣇⣿⠌⠀⠀⡀⠀⠀⡂⣿⠅⡿⢠⡀⠀⠀⡇⣽ ⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡟⣾⣿⢻⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⣽⡇⠀⠀⡀⢠⡿⠅⣿⡂⠀⠀⡀⠀⠀⠌⣿⣇⠀⠀⣀⠟⠼⣿⣇⠆⠂⠙⣿⡤
// ⡇⣿⠀⠀⠀⡟⢹⠀⠀⠁⠁⡍⣿⣿⢰⠀⢀⡀⠀⠀⡆⣿⡇⡇⢸⠀⠀⡐⣯⢹ ⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡟⠻⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⢹⣯⡐⠀⠀⢸⡇⡇⣿⡆⠀⠀⡀⢀⠀⢰⣿⣿⡍⠁⠁⠀⠀⢹⡟⠀⠀⠀⣿⡇
// ⡇⢿⡀⠀⠀⡇⣾⣠⣀⣀⣦⣿⣿⡋⣿⣠⠀⠀⠠⡀⣧⣿⠀⡟⣿⢀⠀⡄⣿⠈ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣿⡄⠀⢀⣿⡟⠀⣿⣧⡀⠠⠀⠀⣠⣿⡋⣿⣿⣦⣀⣀⣠⣾⡇⠀⠀⡀⢿⡇
// ⡇⢺⠀⠈⠔⠄⡟⡿⣿⣿⣿⡿⠈⠀⡻⣿⣿⣶⣾⣿⣿⠹⡌⠀⡿⣾⣶⣿⢻⠀ ⠀⢻⣿⣶⣾⡿⠀⡌⠹⣿⣿⣾⣶⣿⣿⡻⠀⠈⡿⣿⣿⣿⡿⡟⠄⠔⠈⠀⢺⡇
// ⠀⠸⠀⠀⠀⠀⠀⠁⠁⠉⠉⠈⠀⠀⠁⠁⠛⠿⠿⠛⠈⠀⠀⠁⠉⠋⠛⠙⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣻⣽⣯⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣻⣽⣯⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣻⣽⣯⣿⠀⠀⠙⠛⠋⠉⠁⠀⠀⠈⠛⠿⠿⠛⠁⠁⠀⠀⠈⠉⠉⠁⠁⠀⠀⠀⠀⠀⠸⠀
// ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣻⣽⣯⣿⣿⣿⣿⣿⣿⣻⣽⣯⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣻⣽⣯⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣻⣽⣯⣿⣿⣿⣿⣿⣿⣻⣽⣯⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣻⣽⣯⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
// /*⁎*⁎*⁎*⁎*⁎*⁎*⁎⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎********************************************⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠲⢄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀*/
// /*⁎*⁎*⁎*⁎*⁎*⁎*⁎⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*******************************************⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠳⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡀⠀⢀⣤⣤⣤⣤⣤⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀*/
// /*⁎*⁎*⁎*⁎*⁎*⁎*⁎⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎********************************************⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠔⠉⣰⣾⣿⣿⣿⣿⣿⣿⣿⣿⣽⣗⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀*/
// /*⁎*⁎*⁎*⁎*⁎*⁎*⁎⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*******************************************⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠚⠉⠀⢠⣾⢟⣍⣀⠛⠉⠹⢿⠿⢿⣿⣿⣿⣷⢯⣷⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀*/
// /*⁎*⁎*⁎*⁎*⁎*⁎*⁎⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*******************************************⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⣿⢿⣁⠀⢂⠂⢈⠀⡀⢸⣾⢻⡟⠿⣿⡾⣿⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀*/
// /*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎********************************************⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⢢⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣶⣶⣦⣤⣭⣑⠒⠦⣛⡛⡇⠘⠀⠈⠛⣿⠆⢀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀*/
// /*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎********************************************⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⡇⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⠍⢹⡟⠻⣿⣾⣿⣿⣷⢤⣉⠁⠀⠀⠀⠳⣼⢠⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀*/
// /*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎********************************************⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⠁⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⣿⣿⣿⡦⣶⣨⣟⣏⣩⣹⣿⣿⣿⢶⣤⡀⠀⠈⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀*/
// /*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎********************************************⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡄⠀⠀⢀⣴⠛⠀⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣻⣿⣟⣿⠿⠝⢋⣽⣳⣴⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀*/
// /*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎********************************************⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣇⡤⠒⢛⠚⢦⡀⢢⢤⡀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⡿⣿⣿⣿⣟⣿⣿⣺⡗⠻⡲⢖⣴⢿⣿⣿⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀*/
// /*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎********************************************⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⢾⠋⢈⠉⠚⢦⡀⢳⠈⣧⡈⠆⠀⠀⠀⠀⠀⠀⠀⢹⣿⣿⣿⣿⣻⣗⣿⢚⠁⠠⢈⢴⢿⣴⣷⣿⡿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀*/
// /*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎*⁎********************************************⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠔⠋⠁⢸⠐⠦⠷⢤⡈⢳⠀⠗⢿⢡⠁⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⡖⡋⠐⠔⣂⣴⣕⣵⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀*/
// /********************************************⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡤⠒⠀⠀⠀⠀⠀⢸⡀⠀⠀⠨⡷⠀⠃⠀⢨⠏⠀⠀⠀⠀⠀⠀⠀⠀⠘⣿⣿⢚⣤⡪⠈⣠⣾⣿⣿⣿⣿⣿⣿⠿⠛⠙⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ */
// /********************************************⠀⠀⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠞⠁⠀⠀⠀⠀⠀⠀⠀⣀⡇⠀⢠⠒⠃⠀⣠⠔⠁⠀⠀⠀⠀⠀⠀⠀⠀⣔⡟⠻⣗⡿⢿⢠⣾⣿⠷⠿⠿⠛⠛⠉⠁⠀⠀⢠⣶⠠⢀⢤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ */
// /********************************************⠀⠀⠀⠈⠓⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡜⢿⣄⣀⠠⠔⠀⡰⠋⠀⠀⠀⠀⣠⡶⢶⣶⢤⡘⠛⠧⠷⠦⠯⠥⣶⠠⠒⠈⠁⠀⠀⠀⠀⠀⣠⣾⢻⣝⠽⠟⠶⢶⣯⡒⠦⣄⠀⠀⠀⠀⠀⠀ */
// /********************************************⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠇⠀⠙⠣⠄⣀⣴⡗⠀⠀⠀⣠⠖⡿⠁⠈⠋⠉⢻⣄⠀⠀⠀⠀⠀⡀⠀⢀⠀⠀⣀⡀⠤⡴⣊⢠⠐⠐⠁⡀⢀⢤⠀⠘⠷⢱⣊⢦⠀⠀⠀⠀⠀ */
// /********************************************⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⠃⠀⠀⠀⢠⠞⢙⡻⠀⣤⠖⠚⠋⠞⠁⠀⠀⠀⠀⠈⠉⠓⢆⣄⠀⠀⢀⣀⣡⣴⡋⠡⠋⠁⠑⠀⠁⠀⢀⠜⣵⡷⢁⡤⠂⠀⠑⢝⡣⠱⡄⠀⠀⠀ */
// /********************************************⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠠⠤⢀⣀⡰⠽⠧⣄⣟⢢⢀⡜⠁⠠⣕⣫⡀⠀⢱⢀⠆⠒⢤⠔⣄⠀⠀⢀⡤⣿⠟⠿⢛⢟⡿⠋⠁⢠⣃⣀⣀⢀⣀⣀⣀⣋⣾⡫⢕⡍⠒⠂⠀⠁⠀⠈⣆⠻⡀⠀⠀ */
// /********************************************⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢳⡀⢀⡞⠁⠀⠀⠈⢹⡚⠒⠊⠉⠉⠀⠀⢸⡀⡼⡚⠀⢀⠀⠰⢈⣳⢸⡼⢠⡏⠀⡁⡾⡫⣠⣶⣶⣖⠀⠐⢰⣦⣦⣿⣿⣿⣯⣗⠿⢤⣴⠒⠋⠉⠉⠉⠙⡄⠱⡄⠀ */
// /********************************************⠀⠀⠀⢀⡀⠀⠀⠀⠀⠀⠀⢫⠉⠉⠁⡼⠀⠀⠀⠀⠀⢀⡇⠀⠀⠠⠀⠀⠀⠘⣿⠃⠀⠀⠀⠙⠦⡐⢺⣿⠃⡜⣑⠐⣛⠁⣰⠋⠈⠉⡩⠉⠉⠉⠉⠉⠉⢼⣻⡾⣿⣆⠀⡜⠓⠂⠀⠄⢀⣀⣸⢤⢻⡀ */
// /********************************************⠀⠀⠀⣴⣿⡄⠀⠀⢢⣀⠀⠀⢣⠀⢠⡇⠀⠀⠀⠀⠀⣸⠀⠀⠀⠀⠀⠀⠀⠀⣱⢄⣀⠀⡴⠀⠀⢀⣹⡏⣸⢉⠁⢰⢀⡜⠁⢠⡤⠈⠀⠀⠀⠐⠑⠀⢠⣮⣿⠳⣜⣿⣾⠤⠒⠚⢯⡍⠭⠁⢸⡎⣆⡇ */
// /********************************************⠀⢠⣾⣯⢤⡇⠀⢀⡸⠛⠒⠒⣞⢠⠈⠓⡲⠤⣄⣀⣠⢧⠞⠉⠉⠉⠙⢢⢠⡟⠁⠀⠈⡍⠳⣷⣦⢿⣿⢁⡇⠀⢸⠔⠋⠟⢲⠮⢭⡤⣤⣤⣐⣦⣀⣐⣠⣿⢷⣤⠀⡱⡸⡀⠀⠀⠈⠙⡄⠀⠀⢣⣉⡇ */
// /********************************************⢠⣿⠟⢷⣿⡗⣠⠎⠀⠀⢀⡟⣀⣹⠀⣠⠁⢠⢿⣧⡟⢉⡽⠯⢅⠠⠤⣄⡿⣄⠀⠀⠀⣇⡀⠈⠙⢿⡁⣾⣠⠴⠯⢄⡖⡖⠋⠀⠀⠠⠀⠑⢾⡨⠛⠸⢳⣿⠜⠻⣴⡀⣻⢷⣀⣀⣀⡤⡖⣦⣶⡐⠻⠇ */
// /********************************************⣾⣻⣶⡿⣍⣿⣇⣀⡀⠀⡞⠀⢰⠃⢀⡇⡾⠟⡾⠋⣠⠟⠛⢸⡆⡇⢠⠏⠀⡏⣇⠄⠐⡄⠈⠳⡄⠀⢹⡷⠘⢻⡢⣾⣸⠁⠘⢧⢀⢀⠈⠀⠈⠛⠦⢼⣿⢅⡀⠀⠀⡈⠈⠁⠀⠀⠀⠀⢄⡆⢩⠸⣼⠁ */
// /********************************************⠉⣉⠝⠻⢿⠀⢀⡜⠙⢲⠃⣀⣈⣀⣚⣀⢻⣜⣅⡼⣁⣠⢍⢨⡴⡧⢸⣠⣚⠝⢹⠰⢠⠇⠀⠀⡇⢠⣾⣷⡀⠀⡨⠂⣫⡁⡀⡀⠐⣽⢿⡄⠀⢞⣰⣿⠳⠃⠁⢠⠀⠑⠤⠐⣀⡀⢁⠀⡀⡇⠀⢿⠁⠀ */
// /********************************************⠀⠀⠀⣰⠇⢀⣾⡖⠒⡺⠛⡅⠆⠀⠉⠛⢿⡟⢻⠉⠀⠀⠈⠉⠀⡇⠀⠀⠀⠀⠈⢦⡼⠀⠀⠀⣱⡿⡟⠈⣥⠀⠐⢆⢯⢝⡋⠁⠀⡍⢓⠐⢰⡨⡿⠿⠦⣄⣘⣋⣐⣲⠈⠢⠀⠀⠀⠉⠀⢡⢀⡞⠀⠀ */
// /********************************************⠀⠀⠀⢠⠲⠟⣻⣧⠄⢀⠜⠤⢃⣠⠤⠬⣼⢋⠈⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⢰⠟⠈⡇⠀⠈⠓⠚⠉⠞⠳⣅⠀⡄⠁⠀⠀⠁⠀⠀⠀⠀⠣⠀⠀⠈⠙⢦⣘⡢⠹⢦⠀⠀⠸⠎⠀⠀⠀ */
scene.add(model);
},
undefined,
function (terror) {
console.error(terror);
}
);
//GLTF = "assets/XXX/SINGER/scene.gltf";
GLTF = "https://thepiratecircus.com/Inquisition/SINGER/scene.gltf";
loader = new GLTFLoader();
loader.load(
GLTF,
function (gltf) {
// finish initialization
const model = gltf.scene;
model.scale.setScalar( 1 );
model.position.set( -0.5, -0.05, 0.3 );
model.rotation.y = Math.PI/2;
// #########################
// # © 2024 Professeur Salim
// #########################
// # GRAND PUISSANCE NATURELLE
// #########################
// # MEDIUM GUERISSEUR CLAIR VOYANT
// #########################
// #
// # Aide à résoudre plusieurs problèmes:
// # Il vous conseille, vous guide et vous oriente sur le bon chemin.
// #
// # Garantie et rapide: PAYEMENT APRES RESULTATS!!!
// #
// # SPECIALISATION:
// #
// # AMOUR: sentiments retour d'affection efficace, couple et amour, séparation et retour de l'être aimé, fidélité et harmonie dans le couple, consolider la relation actuelle des parents et la famille
// # SANTE: désenvoutement de lieux et les personnes, disfonction érectile, impuissance sexuelle, toxicomanie, alcool, maladie inconnue
// # PROTECTION: protection contre le mauvais oeil, contre l'nnemie, dangers guide et alerte à des situations dangereuses.
// # TRAVAIL: trouver du travail, vente, problème de main d'oeuvre, concurrence, attirer les clients
// # CHANCE: dans la vie, permis de conduire, réussir les examens, jeux etc...
// #
// # Résultat à 100%
// # Maximum 7 jours!
// #
// # CONTACT: +32 467 79 41 91
// # WEBSITE: https://odoomagic.odoo.com/
// ######################################################
// #⠀⠀⢸⣿⡇⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣯⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣀⠉⠉⠀⠣⠈⠍⠉⢁⢃⣤⠃⠉⢀⠹⣆⠀⠀⠀⠀⠀⠀
// #⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡶⠀⢤⠰⢿⡄⠀⢸⡇⢻⡆⠂⠛⠁⣘⣆⠀⠀⠀⠀⠀
// #⠀⠀⢸⣿⡟⣿⣿⣿⣿⣿⣿⣿⣿⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢟⣿⢿⣿⣿⣿⣿⠀⠸⣧⠈⣿⡌⠸⣷⠈⣿⣀⠸⣦⢸⣿⡆⠀⠀⠀⠀
// #⠀⠀⣸⣿⣧⣿⡿⣿⢿⣿⣿⣿⠁⡀⠘⣿⣿⣿⣿⣿⣿⣿⣯⣾⢏⣾⣿⠁⢿⣿⣦⠂⣿⣧⢿⣷⡄⣿⣇⢿⣿⢶⣿⡟⣿⣧⠀⠀⠀⠀
// #⠀⠀⠉⣿⣿⣿⡇⠘⢯⣿⣿⡟⠳⣿⠤⣿⣿⣿⣿⡿⠋⠘⠙⠃⣹⣿⣿⢒⣚⣿⣿⣧⢿⣿⣿⣿⠿⠻⣿⣼⣿⣸⣿⣇⣿⣿⠀⠀⠀⠀
// #⠀⠀⠀⢹⣿⣿⠇⠀⠰⣿⠻⡀⠀⠈⠉⢹⣿⣿⠇⠀⠀⠀⠀⠀⣸⣿⣿⡘⠁⠹⢿⣟⣿⣿⣿⣿⠀⠉⢸⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀
// #⠀⠀⠀⢸⣿⣿⠀⣠⠶⠛⠉⠉⠉⠑⢦⡘⣿⡏⠀⠀⠀⠀⣠⡞⢡⡼⠛⠧⡀⡀⠈⠿⣎⣿⠀⠙⡗⣠⢾⣿⣿⣿⣿⣿⣿⡏⠀⠀⠀⠀
// #⠀⠀⠀⠈⡿⠹⡞⠁⠀⠀⠀⠀⠀⠀⠀⠈⢿⣧⡀⢀⣠⡞⠃⠀⠈⣇⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠈⠀⠘⣿⣿⣿⣿⡿⣸⠁⠀⠀⠀⠀
// #⠀⠀⠀⠀⠀⢰⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢯⠚⠋⠳⣄⠀⠀⠸⣄⣀⠀⠀⠀⠀⠄⠀⠀⠀⠀⠀⠀⠸⣿⣿⣿⠃⠃⠀⠀⠀⠀⠀
// #⠀⠀⠀⠀⠀⣸⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠀⠀⠑⢆⡀⠀⠙⠦⣄⢹⡀⠀⠀⠀⠀⢀⡤⠖⠁⠀⠀⠀⠀⢸⡿⠹⠀⠀⠀⠀⠀⠀⠀
// #⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠢⣄⡀⠀⠀⠀⠀⠀⠀⠀⠉⠲⣄⡀⠈⠙⠿⣤⣤⣒⣮⣿⡄⠀⢀⠀⠀⠀⠀⣠⠋⢹⣒⡆⠀⠀⠀⠀
// #⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠉⠲⢤⡀⠀⠀⠀⠀⠀⠀⠀⠙⠲⠴⠶⠿⠿⠿⠿⠥⠤⠤⠤⠤⠤⠤⠞⠁⠀⠀⠈⠙⢦⡄⠀⠀
// #⠀⠀⠀⠀⢸⣿⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠢⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣠⣤⣤⣴⣾⣧⣀⠀⠀
// #⣸⠀⠀⠀⢸⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠲⢤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⣤⣤⣤⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀
// #⣿⠀⠀⠀⠘⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠑⠲⣄⣀⣤⣤⣴⠒⠒⠉⣩⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧
// #⢹⡄⠀⠀⠀⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠀⠀⠀⠀⠀⢈⣼⣿⣿⣿⣿⣇⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
// #⠠⠷⠒⠂⢰⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⣄⠀⠀⠀⠀⠀⠀⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
// #⠀⠀⠀⠀⢈⡋⣷⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠑⢦⣀⣀⣠⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⣻⣿⣿⣿⣿⣿⣿⣿⣿⣿
// #⠀⠀⠀⣏⡎⣧⣽⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣿⣿⣿⣿⣿⣿⣿⣿⣿⣻
// #⣿⣿⣷⣿⣼⣾⣿⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠞⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
// #⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠇⢰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
// #⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠰⠃⠀⢸⣿⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
// #⣿⣿⣿⣿⣿⣿⣿⣿⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⡆⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿
// #⡿⣵⣾⣿⣿⣿⡟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢯⣿⣿⣿⣿⣿⠟⠁⠀
// #⣿⣹⡿⣻⢉⠟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣯⣿⣿⣿⣿⣿⣿⣷⠀⠀
// #⣧⢿⠠⡷⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢯⣿⣿⣿⣿⣿⣿⣿⣿⣇⠀
// #⣿⢠⡞⠂⠀⠀⠀⠀⠁⠀⠀⠀⠠⠀⠀⠀⠀⠀⢀⣼⠿⢟⣯⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣟⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀
// #⣿⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣐⣄⠈⠉⠉⣽⣻⣯⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡀
// #⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠲⠾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢷⢿⡿⠿⠿⠿⠿⠿⠿⠿⠿⢿⡇
// #⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⣿⣿⣿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣾⣆⣈⠳⢄⣀⠀⠀⠀⠀⠀⠀⠀
// #⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠻⢿⣾⡿⣿⡿⣿⣿⣿⣿⣿⣿⣿⣿⣇⠀⠈⠉⠀⠀⠀⠀⠀⠀⠀⠀
// #⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠛⢷⣝⢯⣻⣿⣿⣿⣿⣿⣿⡏⠓⢄⡀⠀⠀⠀⠀⠀⠀⠀⠀
// #⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠻⣿⣷⣿⣿⣿⣿⣿⡇⠀⠀⠙⣄⠀⠀⠀⠀⠀⠀⠀
// #⠐⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠛⢿⣿⣿⣿⣿⡷⠀⠀⠀⠘⡆⠀⠀⠀⠀⠀⠀
// #⠒⠛⠒⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢿⣿⣷⠃⠀⠀⠀⣠⣷⠇⠀⠀⠀⠀⠀
// #⠀⠀⠀⠀⠀⠀⠀⠐⠒⠢⢤⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢇⠀⠀⢀⡴⢋⣠⠤⠀⠀⠀⠀⠀
// #⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠑⠒⠦⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠑⣶⡮⠚⠉⠀⠀⠀⠀⠀⠀⠀
// #⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠻⣷⣶⣦⣤⣤⣀⠤⠔⠒⠒⠒⠒⠒⠠⠤⠄⠀⠀⠀⠀⠈⢳⡀⠀⠀⠀⠀⠀⠀⠀⠀
// #⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣼⣿⠟⠛⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠀⠀⠀⠹⡄
// #####################################################
scene.add(model);
},
undefined,
function (terror) {
console.error(terror);
}
);
//GLTF = "assets/XXX/KoLob0K/scene.gltf";
GLTF = "https://thepiratecircus.com/Inquisition/KoLob0K/scene.gltf";
loader = new GLTFLoader();
loader.load(
GLTF,
function (gltf) {
// finish initialization
const model = gltf.scene;
model.scale.set(0.004, 0.004, -0.004);
model.position.set( -1.32, 2.75, 0.8 );
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠿⠿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⣿⣿⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠛⠛⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣤⣤⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠀⠀⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣠⣤⣤⣶⣶⣶⣶⣶⣶⣤⣤⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣴⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣦⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⢀⣴⣾⣿⠿⠟⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠻⠿⣿⣷⣦⡀⠀⠀⠀⠀
// ⠀⠀⢀⣾⣿⠟⠉⠀⠀⠀⣠⣶⣶⣦⣤⣄⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣠⣤⣴⣶⣶⣄⠀⠀⠀⠈⠻⣿⣷⡀⠀⠀
// ⠀⣰⣿⡟⠁⠀⠀⠀⢀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣶⣤⣤⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⣤⣤⣶⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⡀⠀⠀⠀⠈⢻⣿⣆⠀
// ⢰⣿⡏⠀⠀⠀⠀⠀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣶⡆⠀⠀⢰⣶⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⠀⠀⠀⠀⠀⢹⣿⡆
// ⣾⣿⠀⠀⠀⠀⠀⢰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡆⠀⠀⠀⠀⠀⣿⣷
// ⣿⣿⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⡏⠉⠉⠉⠉⣿⣿⣿⣿⣿⣿⣿⠀⠀⣿⣿⣿⣿⣿⣿⣿⠉⠉⠉⠉⢹⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⣿⣿
// ⢻⣿⡀⠀⠀⠀⠀⠸⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⠀⠀⢿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇⠀⠀⠀⠀⢀⣿⡿
// ⠘⣿⣧⠀⠀⠀⠀⠀⢻⣿⣿⣿⣿⣿⣿⣿⣿⣧⣤⣤⣤⣤⣿⣿⣿⣿⣿⣿⠃⠀⠀⠘⣿⣿⣿⣿⣿⣿⣤⣤⣤⣤⣼⣿⣿⣿⣿⣿⣿⣿⣿⡟⠀⠀⠀⠀⠀⣼⣿⠃
// ⠀⠘⢿⣷⡀⠀⠀⠀⠀⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠃⠀⠀⠀⠀⠘⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠀⠀⠀⠀⢀⣾⡿⠃⠀
// ⠀⠀⠈⠻⣿⣶⣄⡀⠀⠀⠈⠻⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠙⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠟⠁⠀⠀⢀⣠⣶⣿⠟⠁⠀⠀
// ⠀⠀⠀⠀⠀⠙⠻⢿⣿⣶⣶⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣶⣶⣿⡿⠟⠋⠁⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⣶⣶⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣴⣶⣶⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⠿⠟⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠛⠻⠿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⡿⠋⢀⣠⠀⣶⣶⣶⣶⣶⡆⢰⣶⣶⣶⣶⣶⡆⢰⣶⣶⣶⣶⣶⡆⢰⣶⣶⣶⣶⣶⠀⣀⡀⠙⢿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⠏⠀⠴⢿⣿⠀⣿⣿⣿⣿⣿⡇⢸⣿⣿⣿⣿⣿⡇⢸⣿⣿⣿⣿⣿⡇⢸⣿⣿⣿⣿⣿⠀⢿⡿⠦⠀⠹⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡏⠀⣶⣶⣤⣤⠀⣤⣤⣤⣤⣤⡄⢀⣤⣤⣤⣤⣤⡄⢠⣤⣤⣤⣤⣤⡄⢠⣤⣤⣤⣤⣤⠀⣤⣤⣶⣶⠀⢹⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡇⠐⣿⣿⣿⣿⠀⣿⣿⣿⣿⣿⡇⢸⣿⣿⣿⣿⣿⡇⢸⣿⣿⣿⣿⣿⡇⢸⣿⣿⣿⣿⣿⠀⣿⣿⣿⣿⠆⢸⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣇⠀⠛⠛⠛⠛⠀⠻⠿⠿⠿⠿⠇⠘⠿⠿⠿⠿⠿⠇⠸⠿⠿⠿⠿⠿⠃⠸⠿⠿⠿⠿⠛⠀⠛⠛⠛⠛⠀⣸⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣆⠈⠻⣿⣷⠀⣶⣶⣶⣶⣶⡆⢰⣶⣶⣶⣶⣶⡆⢰⣶⣶⣶⣶⣶⡆⢰⣶⣶⣶⣶⣶⠀⣾⣿⠟⠁⣰⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣷⣄⡈⠉⠀⠿⠿⠿⠿⠿⠇⠘⠿⠿⠿⠿⠿⠇⠸⠿⠿⠿⠿⠿⠃⠸⠿⠿⠿⠿⠟⠀⠉⢁⣠⣾⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣷⣶⣦⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣤⣶⣤⣤⣤⣤⣤⣶⣶⣾⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠛⠛⠛⠿⠿⠿⠿⠿⠿⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠿⠿⠿⠿⠿⠟⠛⠛⠛⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
model.rotation.x = -Math.PI/2 - Math.PI/101;
model.rotation.y = +Math.PI + Math.PI/17;
model.rotation.z = -Math.PI/2 + Math.PI/19;
// _¶¶_______________¶¶
// _¶¶_______¶¶¶¶¶¶¶¶¶¶
// __¶¶_____¶¶¶¶¶_¶¶¶¶_
// __¶¶__¶__¶¶___¶_____
// _¶¶¶_¶¶¶_¶¶¶_¶¶¶____
// _¶¶¶_____¶¶¶________
// _¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶_
// __¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶_
// __________¶¶_____¶¶_
// _____¶¶¶__¶¶_¶¶¶_¶¶_
// ______¶___¶¶__¶__¶¶_
// __¶¶¶¶¶¶¶¶¶¶_____¶¶_
// ¶¶¶¶____¶¶________¶¶
scene.add(model);
},
undefined,
function (terror) {
console.error(terror);
}
);
//GLTF = "assets/XXX/KVN/scene.gltf";
GLTF = "https://thepiratecircus.com/Inquisition/KVN/scene.gltf";
loader = new GLTFLoader();
loader.load(
GLTF,
function (gltf) {
// finish initialization
const model = gltf.scene;
model.scale.setScalar( 1 );
model.position.set( 0, 0.8, 2.2 );
model.rotation.y = Math.PI/2 + Math.PI/4;
/*p***⁎⁎⁎***⁎⁎⁎***⁎⁎**⁎⁎**⁎*⁎*-------------<!----------->- WARNING!
في عصر قديم، عاشَتْ أسطورة موسى وشهيرة الشهيرة، الجميلة والأنيقة. لم تكن حياته مجرد قصة عادية، بل كانت كالحكايات الساحرة التي تجذب القلوب والعقول. ولد لهما ابن، سماه موسى، كما ورد في السجلات القديمة. ولكن هل كانت نهاية القصة؟ لا، بالطبع لا. لأن في عالم الخيال والحكايات، كل شيء ممكن، حتى السحر والمفاجآت الغير متوقعة. فلنتابع القصة ونرى ما الذي يخبئه المستقبل لموسى ولسعيه إلى السعادة في عالم سحري وخيالي
⠀⠀⠀⠀⠀⣀⣤⢤⣤⣄⣀⣀⣀⣀⣠⣤⡀⠀⠀⠤⠤⠄⠀⠀⠀⠀⠀⠀⠤⠤⠤⠤⢤⡄⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⡴⣪⠃⠀⠀⣠⣶⣶⣦⣤⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⠀⠀⠀⠀⠀⠀
⠀⠀⠀⣀⣾⡽⠁⠀⠀⣰⣿⠃⠀⠀⠈⠉⠙⠛⠛⠛⠶⠤⢤⣄⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡇⠀⠀⠀⠀⠀
⠀⢠⡾⣟⣿⠇⡀⢀⣾⢫⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠙⠓⠶⣦⣤⣄⣀⡀⠀⠀⠀⡇⠀⠀⠀⠀⠀
⠰⣿⣞⡽⣿⣾⢷⡿⣱⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠻⠦⣄⣀⠀⠱⠀⠀⠀⠀⠀
⠐⣿⣡⣾⡋⠹⡆⠿⣧⡄⣀⣀⣀⡀⠘⢶⣤⣤⣤⣤⣤⣄⣀⣀⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠙⢿⠢⠤⣀⠀⠀⠀
⠈⠻⡿⠛⢷⣄⠀⠀⠈⠉⠓⠒⠛⠹⠭⠭⠯⠭⢽⣟⡛⠛⠛⠛⠛⠛⠻⠿⢷⣶⣤⣤⡀⠀⠀⠘⠀⠀⠈⢣⡀⠀
⠀⠀⢱⡀⠀⠉⢳⢄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠲⠀⠀⠀⠀⠙⠒⠦⢄⣉⣓⠿⢕⣦⣀⠀⠀⠰⣾⣿⡦
⠀⠀⠘⣇⠀⠀⠈⠳⣝⣂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠳⣌⠻⢦⠀⠀⣹⡙⡟
⠀⠀⠀⢸⠀⠀⠀⠀⠈⠉⠉⠒⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠓⢬⣟⣖⣿⡘⠂
⠀⠀⠀⢸⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠤⢀⣀⣀⣤⣴⣶⡾⠿⠥⠤⠤⢄⣀⣀⣀⡀⠀⠀⠀⠈⠉⠷⢿⣿⠗⠀
⠀⠀⠀⣿⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠑⠀⠀⠀⢀⣀⡼⠏⠀⠀
⠀⠀⢸⡟⣿⠀⠀⠀⢀⡤⠴⠒⠒⠲⠦⠤⣤⣤⣄⣀⡀⠀⠀⠀⠀⡀⣀⡤⠴⠂⠀⠀⠀⠖⠒⢻⡟⠉⠀⠀⠀⠀
⠀⠀⣿⡇⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠙⠛⠛⠿⠷⠖⠒⠀⠉⠁⠀⠀⠀⠀⣸⠁⠀⠀⠀⠀⠀
⠀⠀⣿⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⠄⠀⠀⠀⠀⠀⠀⠀⠀⢠⡿⠀⠀⠀⠀⠀⠀
⠀⠀⢸⡿⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠑⠒⠒⠀⠒⠒⠊⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⠁⠀⠀⠀⠀⠀⠀
⠀⠀⢸⡇⠀⢀⣀⡠⠆⠀⠉⡉⠉⠉⠙⠒⠶⠶⠤⠤⠤⠤⠄⠀⠀⠀⠀⢀⡀⠀⠀⢀⣤⣾⠃⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⢳⣾⣫⡥⠴⠚⠋⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⣶⣄⠀⠘⣿⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⢀⣾⠟⠉⠀⠀⠀⠀⠀⣤⠤⠴⠶⠶⣤⣤⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠪⡷⡀⢹⡇⠀⠀⠀⠀⠀⠀⠀
⠀⠀⢸⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠉⠙⠛⠯⠉⠀⠀⠀⠀⠈⢻⡾⠁⠀⠀⠀⠀⠀⠀⠀
⠀⠀⢸⣷⣶⣤⣤⣀⠀⠀⠀⠤⠤⠤⠿⠷⠶⠒⢛⣋⣉⣉⠓⠀⠀⠀⠀⠀⠀⠀⠀⢀⡐⡄⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠘⣿⡟⢿⣿⣿⣶⣤⣤⣤⣤⣴⡶⠖⡿⠛⠛⠛⠿⣿⣿⣶⣶⣄⠀⠀⠀⠀⠈⡧⠃⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⢿⣷⡄⠀⠉⠉⠛⠋⠉⠉⠀⢀⠞⠁⠀⠀⠸⡀⠀⠀⠉⠉⠛⠿⠿⠶⠶⢚⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠸⣿⣿⣦⣄⣀⣀⣀⣀⡤⠞⠋⠀⢀⠀⠀⢀⢻⣦⡀⠀⠀⠀⠀⠀⠀⣠⠞⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣿⣿⡿⠟⠛⠛⠉⠉⠀⠀⠀⠀⡜⠀⠀⠘⣆⠙⢿⣶⣤⣄⣀⣤⠖⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣿⠋⠀⠀⠀⢀⡾⠀⠀⠀⠀⢸⡇⠀⠀⠀⠈⢆⠀⠈⠹⣿⣿⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⣼⠁⠀⠀⠀⠀⢸⡇⠀⠀⠀⠀⠘⣧⠀⠀⠘⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⢳⡀⠀⠀⢀⠏⠀⠀⠀⠀⠀⠘⡇⠀⠀⠀⠀⠀⠈⠀⠀⠀⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠘⣇⠀⠀⠈⠀⠀⠀⠀⠀⠀⠀⠷⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠘⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠹⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢷⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⣿⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⡀⠀⠀⠀⠀⠙⢦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠳⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢠⣿⡇⠀⠀⠀⠀⠀⠀⠀⢀⣤⡄⠀⠀⠀⠀⠸⡄⠀⠀⠀⠀⠀⠀⠈⢦⡀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⢀⣿⠏⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠀⠀⠀⠀⠀⠀⠸⡄⠀⠀⠀⠀⠀⠀⠈⢳⡀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⢸⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⡀⠀⠀⠀⠀⠀⠀⠀⢿⡄⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⢀⡏⠀⠀⠀⣤⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⢈⣿⡀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⢸⠇⠀⠀⠀⢸⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⢀⣴⠟⢹⣧⠀⠀⠀⠀
⠀⠀⠀⠀⠀⡸⠀⠀⠀⠀⠈⢿⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡼⠁⠀⠀⠀⣠⡶⠟⠁⠀⠘⣿⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣇⡀⠀⠀⠀⠀⠘⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⡶⠟⠋⠀⠀⠀⠀⢰⣿⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣿⠉⠛⠷⠶⣶⣦⣽⣿⣷⣄⣀⣀⣀⣀⣀⣀⣀⣤⣶⣶⣿⠟⠉⠀⠀⠀⠀⠀⠀⠀⢸⣿⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣿⠀⠀⠀⠀⠀⠀⠈⠉⠉⠛⠛⠻⣿⣿⣿⣿⣿⣿⣿⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⠀⠀⠀⠀
⠀⠀⠀⠀⠀⢿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⣿⣿⣿⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⡏⠀⠀⠀⠀
⠀⠀⠀⠀⠀⢸⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠘⡛⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢈⣻⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣛⠋
⠀⠀⠀⠀⠀⠘⡛⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢈⣻⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣛⠋
⠀⠀⠀⠀⠀⢸⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⢿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⣿⣿⣿⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⡏⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣿⠀⠀⠀⠀⠀⠀⠈⠉⠉⠛⠛⠻⣿⣿⣿⣿⣿⣿⣿⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣿⠉⠛⠷⠶⣶⣦⣽⣿⣷⣄⣀⣀⣀⣀⣀⣀⣀⣤⣶⣶⣿⠟⠉⠀⠀⠀⠀⠀⠀⠀⢸⣿⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣇⡀⠀⠀⠀⠀⠘⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⡶⠟⠋⠀⠀⠀⠀⢰⣿⠀⠀⠀⠀
⠀⠀⠀⠀⠀⡸⠀⠀⠀⠀⠈⢿⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡼⠁⠀⠀⠀⣠⡶⠟⠁⠀⠘⣿⠀⠀⠀⠀
⠀⠀⠀⠀⠀⢸⠇⠀⠀⠀⢸⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⢀⣴⠟⢹⣧⠀⠀⠀⠀
⠀⠀⠀⠀⠀⢀⡏⠀⠀⠀⣤⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⢈⣿⡀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⢸⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⡀⠀⠀⠀⠀⠀⠀⠀⢿⡄⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⢀⣿⠏⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠀⠀⠀⠀⠀⠀⠸⡄⠀⠀⠀⠀⠀⠀⠈⢳⡀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢠⣿⡇⠀⠀⠀⠀⠀⠀⠀⢀⣤⡄⠀⠀⠀⠀⠸⡄⠀⠀⠀⠀⠀⠀⠈⢦⡀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠳⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⣿⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⡀⠀⠀⠀⠀⠙⢦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠹⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢷⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠘⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠘⣇⠀⠀⠈⠀⠀⠀⠀⠀⠀⠀⠷⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⢳⡀⠀⠀⢀⠏⠀⠀⠀⠀⠀⠘⡇⠀⠀⠀⠀⠀⠈⠀⠀⠀⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⣼⠁⠀⠀⠀⠀⢸⡇⠀⠀⠀⠀⠘⣧⠀⠀⠘⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣿⠋⠀⠀⠀⢀⡾⠀⠀⠀⠀⢸⡇⠀⠀⠀⠈⢆⠀⠈⠹⣿⣿⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣿⣿⡿⠟⠛⠛⠉⠉⠀⠀⠀⠀⡜⠀⠀⠘⣆⠙⢿⣶⣤⣄⣀⣤⠖⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠸⣿⣿⣦⣄⣀⣀⣀⣀⡤⠞⠋⠀⢀⠀⠀⢀⢻⣦⡀⠀⠀⠀⠀⠀⠀⣠⠞⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⢿⣷⡄⠀⠉⠉⠛⠋⠉⠉⠀⢀⠞⠁⠀⠀⠸⡀⠀⠀⠉⠉⠛⠿⠿⠶⠶⢚⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠘⣿⡟⢿⣿⣿⣶⣤⣤⣤⣤⣴⡶⠖⡿⠛⠛⠛⠿⣿⣿⣶⣶⣄⠀⠀⠀⠀⠈⡧⠃⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⢸⣷⣶⣤⣤⣀⠀⠀⠀⠤⠤⠤⠿⠷⠶⠒⢛⣋⣉⣉⠓⠀⠀⠀⠀⠀⠀⠀⠀⢀⡐⡄⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⢸⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠉⠙⠛⠯⠉⠀⠀⠀⠀⠈⢻⡾⠁⠀⠀⠀⠀⠀⠀⠀
⠀⠀⢀⣾⠟⠉⠀⠀⠀⠀⠀⣤⠤⠴⠶⠶⣤⣤⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠪⡷⡀⢹⡇⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⢳⣾⣫⡥⠴⠚⠋⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⣶⣄⠀⠘⣿⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⢸⡇⠀⢀⣀⡠⠆⠀⠉⡉⠉⠉⠙⠒⠶⠶⠤⠤⠤⠤⠄⠀⠀⠀⠀⢀⡀⠀⠀⢀⣤⣾⠃⠀⠀⠀⠀⠀⠀⠀
⠀⠀⢸⡿⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠑⠒⠒⠀⠒⠒⠊⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⠁⠀⠀⠀⠀⠀⠀
⠀⠀⣿⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⠄⠀⠀⠀⠀⠀⠀⠀⠀⢠⡿⠀⠀⠀⠀⠀⠀
⠀⠀⣿⡇⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠙⠛⠛⠿⠷⠖⠒⠀⠉⠁⠀⠀⠀⠀⣸⠁⠀⠀⠀⠀⠀
⠀⠀⢸⡟⣿⠀⠀⠀⢀⡤⠴⠒⠒⠲⠦⠤⣤⣤⣄⣀⡀⠀⠀⠀⠀⡀⣀⡤⠴⠂⠀⠀⠀⠖⠒⢻⡟⠉⠀⠀⠀⠀
⠀⠀⠀⣿⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠑⠀⠀⠀⢀⣀⡼⠏⠀⠀
⠀⠀⠀⢸⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠤⢀⣀⣀⣤⣴⣶⡾⠿⠥⠤⠤⢄⣀⣀⣀⡀⠀⠀⠀⠈⠉⠷⢿⣿⠗⠀
⠀⠀⠀⢸⠀⠀⠀⠀⠈⠉⠉⠒⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠓⢬⣟⣖⣿⡘⠂
⠀⠀⠘⣇⠀⠀⠈⠳⣝⣂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠳⣌⠻⢦⠀⠀⣹⡙⡟
⠀⠀⢱⡀⠀⠉⢳⢄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠲⠀⠀⠀⠀⠙⠒⠦⢄⣉⣓⠿⢕⣦⣀⠀⠀⠰⣾⣿⡦
⠈⠻⡿⠛⢷⣄⠀⠀⠈⠉⠓⠒⠛⠹⠭⠭⠯⠭⢽⣟⡛⠛⠛⠛⠛⠛⠻⠿⢷⣶⣤⣤⡀⠀⠀⠘⠀⠀⠈⢣⡀⠀
⠐⣿⣡⣾⡋⠹⡆⠿⣧⡄⣀⣀⣀⡀⠘⢶⣤⣤⣤⣤⣤⣄⣀⣀⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠙⢿⠢⠤⣀⠀⠀⠀
⠰⣿⣞⡽⣿⣾⢷⡿⣱⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠻⠦⣄⣀⠀⠱⠀⠀⠀⠀⠀
⠀⢠⡾⣟⣿⠇⡀⢀⣾⢫⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠙⠓⠶⣦⣤⣄⣀⡀⠀⠀⠀⡇⠀⠀⠀⠀⠀
⠀⠀⠀⣀⣾⡽⠁⠀⠀⣰⣿⠃⠀⠀⠈⠉⠙⠛⠛⠛⠶⠤⢤⣄⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡇⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⡴⣪⠃⠀⠀⣠⣶⣶⣦⣤⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣀⣤⢤⣤⣄⣀⣀⣀⣀⣠⣤⡀⠀⠀⠤⠤⠄⠀⠀⠀⠀⠀⠀⠤⠤⠤⠤⢤⡄⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠈⠙⠛⠛⠿⠿⠿⠿⠛⠛⠋⠁⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠈⠛⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠛⠁⠀⠀⠀⠀
⠀⠀⠀⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠀⠀⠀
⠀⠈⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠁⠀
⠀⢿⣿⣿⣿⣿⣇⠀⢸⣿⣦⡀⠀⠀⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⡿⠀
⠘⣿⣿⣿⣿⣿⡇⠀⢸⣿⠀⠀⣿⣿⠀⠀⣿⣷⣆⠀⢰⣾⣿⣿⣿⠃
⢸⣿⣿⣿⣿⣿⡇⠀⢸⣿⠗⠀⢈⡁⠀⠺⣿⠉⠁⠀⠈⠉⣻⣿⣿⡇
⢠⣿⣿⣿⣿⣀⡀⠀⢸⣿⡏⠀⢠⡄⠀⢹⣿⣿⡟⠉⢻⣿⣿⣿⣿⡄
⠀⣾⣿⣿⣿⣿⠿⠟⢿⣿⣿⡿⠛⠛⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⠀
⠀⢀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡀⠀
⠀⠀⠀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⠀⠀⠀
⠀⠀⠀⠀⢀⣤⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣤⡀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢀⣠⣤⣤⣶⣶⣶⣶⣤⣤⣄⡀⠀⠀⠀⠀⠀⠀⠀
يلايخو يرحس ملاع يف ةداعسلا ىلإ هيعسلو ىسومل لبقتسملا هئبخي يذلا ام ىرنو ةصقلا عباتنلف .ةعقوتم ريغلا تآجافملاو رحسلا ىتح ،نكمم ءيش لك ،تاياكحلاو لايخلا ملاع يف نأل .ال عبطلاب ،ال ؟ةصقلا ةياهن تناك له نكلو .ةميدقلا تالجسلا يف درو امك ،ىسوم هامس ،نبا امهل دلو .لوقعلاو بولقلا بذجت يتلا ةرحاسلا تاياكحلاك تناك لب ،ةيداع ةصق درجم هتايح نكت مل .ةقينألاو ةليمجلا ،ةريهشلا ةريهشو ىسوم ةروطسأ ْتَشاع ،ميدق رصع يف -->
*/
scene.add(model);
},
undefined,
function (terror) {
console.error(terror);
}
);
GLTF = "https://thepiratecircus.com/Woodstock/%E2%98%86/U.S.Army/scene.gltf";
//GLTF = "assets/XXX/Liberty/scene.gltf";
loader = new GLTFLoader();
loader.load(
GLTF,
function (gltf) {
// finish initialization
const model = gltf.scene;
model.scale.set(-0.04, 0.04, 0.04);
model.position.set( 0, 0.8, 2.2 );
//model.position.set( -1.32, 2.75, 0.8 );
// ⠀⠀⠀⡀⠀⠀⠀⠀⠀⠀⢀⣀⠀⠀⠀⠀⣿⣶⣦⡀⠀⢰⣆⠀⠀⠀
// ⠀⠀⠸⣿⣦⡀⢀⣤⣾⣿⣿⣿⣿⣿⣷⣦⣹⣿⣿⣿⣦⣸⣿⣷⡀⠀
// ⠀⠀⠀⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀
// ⠸⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡆
// ⠀⠀⠈⣿⣿⣿⣿⣿⣿⣿⣯⠉⠉⠙⠛⠻⠿⣿⣿⣿⣿⣿⣿⣿⣿⠁
// ⠀⠀⣼⣿⣿⣿⣿⣿⣿⡿⣿⡇⠀⠀⠀⠀⠀⠀⠈⠙⢿⡿⠟⠛⠁⠀
// ⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⡀⠀⢀⣴⠾⠿⠿⢶⣄⣤⣾⣷⣤⡀⠀⠀
// ⠀⠀⢿⣿⣿⣿⣿⣿⣿⣿⣧⠀⢸⡏⠀⠀⣤⠀⣿⡅⠀⢠⡝⣿⠀⠀
// ⠀⠀⠈⠻⣿⣿⣿⡟⠋⠻⣿⠀⠸⣧⡀⠀⠀⣠⡿⢷⣄⠀⣠⡿⠀⠀
// ⠀⠀⠀⠀⠈⠙⢻⣇⡀⠀⠉⠀⠀⠈⠛⠛⠛⠋⠀⠀⠛⠛⢿⡄⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠉⢻⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠶⠶⢶⣿⠃⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⢸⡏⠀⠀⠀⣰⣆⠀⠀⠀⠀⠀⠀⠀⠹⣧⡀⠀
// ⠀⠀⠀⠀⠀⠀⠀⠀⣿⠃⠀⠀⠘⠋⠛⠷⣶⣤⣤⣤⣤⣤⣤⣽⠟⠀
// ⠀⠀⠀⠀⠀⠀⠀⢸⣿⠀⠀⠀⠀⠀⠀⠀⣠⣤⡿⠉⠉⠉⠀⠀⠀⠀
// ⠀⠀⠀⠀⠀⠀⠀⢸⡇⠀⠀⠀⠀⠀⠀⢼⠏⠁⠀⠀⠀⠀⠀⠀⠀⠀
scene.add(model);
},
undefined,
function (terror) {
console.error(terror);
}
);
}
// Function to set a cookie
function setCookie(name, value, days) {
const expires = new Date();
expires.setTime(expires.getTime() + days * 24 * 60 * 60 * 1000);
document.cookie = `${name}=${value};expires=${expires.toUTCString()}`;
}
// Function to get a cookie value
function getCookie(name) {
const cookieName = `${name}=`;
const decodedCookie = decodeURIComponent(document.cookie);
const cookieArray = decodedCookie.split(';');
for (let i = 0; i < cookieArray.length; i++) {
let cookie = cookieArray[i];
while (cookie.charAt(0) === ' ') {
cookie = cookie.substring(1);
}
if (cookie.indexOf(cookieName) === 0) {
return cookie.substring(cookieName.length, cookie.length);
}
}
return '';
}
export {ShabbatTV, PravdaTV, MosesTV, DebugTV}
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
import * as THREE from 'three';
import sha256 from 'https://cdn.skypack.dev/js-sha256';
function AngelTV(ANGELS, number, camera, controls){
number = number % ANGELS.length;
let angel = ANGELS[number];
console.log("Angel №" + number, angel);
camera.position.set(...angel.position);
controls.target = new THREE.Vector3(...angel.target);
controls.update();
}
function ShabbatTV(scene, book) {
const source = document.getElementById(book.source_id);
if (book.sky) {
source.src = book.sky;
}
const video = document.getElementById(book.video_id);
function startVideo() {
if (book.playbackRate)
video.playbackRate = book.playbackRate;
video.currentTime = book.start || 0;
video.play();
console.log("The video has started playing.", source.src);
}
function onReady() {
console.log("Video ready to play:", source.src);
startVideo();
// Убираем слушатели после первого срабатывания
video.removeEventListener('loadedmetadata', onReady);
video.removeEventListener('canplay', onReady);
video.removeEventListener('canplaythrough', onReady);
}
// Check if the video is already loaded
if (video.readyState >= 1) {
startVideo(); // Video is already loaded, start immediately
} else {
// If not loaded, load and wait for metadata to be ready
video.addEventListener('loadedmetadata', onReady);
video.addEventListener('canplay', onReady);
video.addEventListener('canplaythrough', onReady);
video.load();
}
function setup() {
// Calculate aspect ratio of the video
const aspectRatio = video.videoWidth / video.videoHeight;
let heightToFit = book.height;
let widthToFit = book.width;
if (book.align == "height"){
widthToFit = aspectRatio * heightToFit;
} else if (book.align == "width"){
heightToFit = widthToFit / aspectRatio;
}
const texture = new THREE.VideoTexture(video);
texture.minFilter = THREE.LinearFilter;
texture.magFilter = THREE.LinearFilter;
//texture.format = THREE.RGBAFormat;
const material = book.material(texture);;
const geometry = new THREE.PlaneGeometry(widthToFit, heightToFit);
const screen = new THREE.Mesh(geometry, material);
if (book.rotation_order ) {
screen.rotation.order = book.rotation_order;
}
screen.rotation.set(...book.rotation);
screen.position.set(...book.position);
scene.add(screen);
return screen;
}
// If video metadata is already loaded, setup immediately
if (video.readyState >= video.HAVE_METADATA) {
return setup();
}
// Otherwise, setup after the metadata is loaded
return new Promise(resolve => {
video.addEventListener("loadedmetadata", function() {
const screen = setup();
resolve(screen);
});
});
}
async function PravdaTV(scene, Girls, Laptops) {
function seat(laptop, girl) {
const image = document.getElementById(laptop.img_id);
if (!image) {
console.log("PravdaTV issue", Girls, laptop);
}
image.src = girl;
image.onload = function() {
try {
const texture = new THREE.Texture(image);
texture.needsUpdate = true; // Important to update the texture after loading
const material = laptop.material(texture);
const aspectRatio = image.naturalWidth / image.naturalHeight;
let widthToFit = laptop.width;
let heightToFit = laptop.height;
if (laptop.align == "height"){
widthToFit = aspectRatio * laptop.height;
} else if (laptop.align == "width"){
heightToFit = laptop.width / aspectRatio;
}
const geometry = new THREE.PlaneGeometry(widthToFit, heightToFit);
// Create and configure the screen mesh
const screen = new THREE.Mesh(geometry, material);
if (laptop.rotation_order ) {
screen.rotation.order = laptop.rotation_order;
}
screen.rotation.set(...laptop.rotation);
screen.position.set(...laptop.position);
if (laptop.screen) {
// remove previous screen
scene.remove(laptop.screen);
}
// Add the screen to the scene
scene.add(screen);
laptop.screen = screen;
} catch (terror) {
console.log(terror);
}
};
image.onerror = function() {
// Reject the Promise if the image fails to load
console.log("Failed to load image");
};
};
for (const laptop of Laptops) {
const girl = Girls[Math.floor(Math.random() * Girls.length)];
seat(laptop, girl);
}
}
export {ShabbatTV, PravdaTV, AngelTV}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>{{ markdown.yaml.Title }}</title>
<link rel="icon" type="image/png" href="https://aliyah.odooism.com/favicon.ico"/>
<meta property="og:title" content="Whatever you think it is, it's not" />
<meta property="og:image" content="https://gist.github.com/user-attachments/assets/c64786b8-a32f-4dde-ab08-26cd9fad963a">
<meta property="og:image:type" content="image/png">
<link rel="stylesheet" href="https://python.lamourism.com/yelizariev/afc9c2caf5937661d57712598d8898c3/XXX/Eva.css" />
<script type="importmap">
{
"imports": {
"magic": "https://python.lamourism.com/yelizariev/afc9c2caf5937661d57712598d8898c3/v5/Adam.js",
"three": "https://unpkg.com/[email protected]/build/three.module.js",
"three/addons/": "https://unpkg.com/[email protected]/examples/jsm/"
}
}
</script>
</head><!--
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢲⣾⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⠆
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣿⡿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⠏
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢘⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⡿⣿⠃
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⠼⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⢳⢰⡇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣿⣢⢹⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⣏⠲⣹⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣤⣄⣤⡴⠖⠃
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠜⢧⢣⠎⠷⣄⠀⠀⠀⠀⠀⠀⠀⢧⢣⡙⢧⡀⠀⠀⠀⠀⠀⠀⠀⣠⣾⠛⣭⠶⠛⠉
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡽⢧⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠳⣎⢣⠺⡽⣆⠀⠀⠀⠀⠀⢸⠇⡜⡩⣷⠀⠀⠀⠀⠀⠀⣴⢇⣺⡏⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⢿⡘⢳⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⡷⡑⢦⣿⠀⠀⠀⠀⡴⡫⠜⡰⣧⠏⠀⠀⠀⠀⠀⢸⢋⠦⣽⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠈⣿⣶⢨⡍⠛⠛⢻⣦⡄⠀⠀⠀⠀⣿⢣⠑⣦⠘⣦⠀⠀⣼⢱⠉⡎⣵⡏⠀⠀⠀⠀⠀⢠⣾⠉⡖⣿
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠶⢭⣜⣢⢃⠏⠻⣄⠀⠀⠀⣿⠎⡑⢆⠣⢍⠟⡭⠓⡌⠳⡘⢤⠳⣄⣀⢠⡴⢾⠛⠭⣘⣴⡏
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠱⣧⢊⡵⢊⠷⡴⣺⠹⢌⣙⣬⠵⠮⠖⠛⠛⠚⠓⠧⠮⣖⣩⢩⣉⢆⠧⣙⣲⡾⠋⠀⠀⠀⠀⠀⠀⠀⢀⣤⣤⣤⣤⣄⣀
⠀⠀⠀⢢⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢳⣌⢲⠩⡜⢡⢆⡷⠋⠁⠀⠀⢀⣀⡤⡤⠤⣄⣀⠀⠀⠉⠙⠲⣎⡲⢱⣏⠀⠀⠀⠀⠀⠀⠀⣰⣞⢫⣳⡬⠖⠒⠚⠛⠛⠒
⠀⠀⠀⠀⠙⣿⣦⡀⠀⠀⠀⠀⣀⣠⣀⣄⣀⠀⠀⠀⠀⣿⠆⣇⠣⣥⠞⠀⢀⣠⢴⠺⢹⣈⠒⡍⡚⣌⡺⢩⠳⠦⣄⠀⠈⠱⢧⢊⠷⣠⣤⢴⠤⡤⢾⡑⢬⣶⠏
⠀⠀⠀⠀⠀⠘⢶⣭⣓⠶⠶⠿⠿⣋⠼⡑⣊⠗⣦⣤⠞⢣⠚⣴⠋⠁⣠⡔⡏⢎⢆⡣⠗⠒⠛⠚⠋⠉⠙⠧⣏⡜⣈⠳⡄⠀⠈⢳⡘⠴⡠⢎⡒⢥⢒⣬⠟⠃
⠀⠀⠀⠀⠀⠀⠀⠉⠓⠿⠬⠧⠶⠭⠶⣗⢍⡚⠴⣨⠙⡆⣿⠃⠀⣰⢋⠴⣩⠞⠁⠀⣠⣤⡤⠴⡴⣤⣄⡀⠈⠙⢆⡝⢜⢦⠀⠀⢻⡢⡑⣮⠼⠖⠛⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⢽⣣⠜⡱⠰⡿⠀⠀⡏⡎⢼⡏⠀⢀⡾⢃⣶⠾⠷⢦⣑⠦⡙⣷⡀⠈⣏⡜⡸⣧⠀⠀⢷⣹⡇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣇⠱⢳⡇⠀⢸⠧⣙⢼⡇⠀⢸⢳⣹⠃⠀⢀⠀⠈⢳⡜⣸⡇⠀⢸⡜⡡⢻⡄⠀⢸⢫⢓⡦⣤⡀⠀⠀⠀⢀⣀⣀⣤⣀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣤⢤⢤⣤⡞⢣⢍⢻⡇⠀⢸⡆⢡⢺⡇⠀⢸⡇⡜⢦⣤⣾⡇⠀⠀⣟⢼⡇⠀⢸⡧⡑⣻⡇⠀⣸⢃⠎⡴⢡⢛⠳⡶⡿⢟⡩⢩⣱⣎⡻⣦⣄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⡞⢥⠱⣈⠖⣢⠜⡥⢊⢼⡇⠀⠈⣇⢣⠎⣧⠀⠀⠻⣞⣰⣍⡿⠏⠀⢠⣟⣾⡇⠀⢸⠇⡥⣿⠀⠀⡏⣎⣼⣐⣣⠎⡱⣑⣴⡺⠞⠏⠉⠈⠉⠳⢭⣦⡀
⠐⠒⠲⢴⣦⣤⣄⣀⣠⣴⠛⡥⢋⣶⠕⠷⢮⣴⣭⣴⡋⠼⣷⡀⠀⠙⣧⡙⢸⢧⣀⣀⠀⠀⠀⠀⣠⡴⠯⣱⡞⠀⢀⡾⣱⣸⠃⠀⣸⣙⣼⠁⠀⠈⠙⠛⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠒
⠀⠀⠀⠀⠈⠙⠿⠯⣭⣦⠽⠞⠋⠀⠀⠀⠀⠀⠀⠈⢿⡖⢤⠻⣦⡀⠈⠻⣆⠦⣩⢉⡍⢫⡝⣩⠱⣘⡵⠋⠀⢠⡞⡱⣱⠏⠀⢀⡷⠌⣷⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⡾⡘⢤⠓⡬⡕⢤⡀⠈⠙⠒⠧⠮⠥⠼⠴⠛⠉⠀⣠⠴⣫⠰⣣⠏⠀⢀⣾⡱⣉⠼⡹⣆
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡞⢫⠱⢨⡑⢎⡑⢦⠙⣌⠻⠶⣤⣄⣀⣠⣄⣀⣠⡤⠶⡛⢭⠚⣀⡷⠋⠀⣠⡿⠿⠶⣥⢢⠑⣌⠻⡖⠶⢶⢤⣀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡟⡌⢣⣓⡦⠾⠞⠋⠙⢷⣌⢣⠓⡔⢢⠆⡱⢘⣦⣽⣴⣥⢷⠼⠛⠉⠀⣠⢾⣯⠀⠀⠀⠈⠳⣽⣢⢵⣼⣑⣮⣘⣭⣷⡄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡞⢢⡙⡼⠉⠀⠀⠀⠀⠀⢀⡿⣄⢋⡔⢃⣎⣥⠿⣥⣀⠀⠀⠀⠀⠀⠀⡞⢭⠡⢾⠀⠀⠀⠀⠀⠀⠉⠉⠀⠀⠈⠉⠙⣾⣻⡆
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⡞⣩⢣⡾⠃⠀⠀⠀⠀⠀⢠⡟⢣⠜⣢⣼⠟⠉⠘⡧⢡⢋⢻⣆⠀⠀⠀⠀⣿⣄⠳⡸⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠈⢿⣯⡄
⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣿⡿⣟⢧⣛⡤⠟⠀⠀⠀⠀⠀⠀⠀⣿⢸⢃⢼⡼⠃⠀⠀⢠⡇⠇⡼⣸⡟⠀⠀⠀⠀⢻⣿⡄⢣⢛⢧⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣇
⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠉⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⡡⢎⣾⠀⠀⠀⠀⢸⣏⠲⡹⣿⠁⠀⠀⠀⠀⠀⠑⠾⣧⡈⢦⠹⣳⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠛⠂
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣇⠎⣾⠄⠀⠀⠀⠠⠻⣖⠡⠻⣆⠀⠀⠀⠀⠀⠀⠀⠀⠉⠓⣧⣘⣯
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣏⣾⡟⠀⠀⠀⠀⠀⠀⠹⣎⡕⢺⡧⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣟⣿⠄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠶⣿⡮⠊⠀⠀⠀⠀⠀⠀⠀⠀⠘⣧⣻⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣿⡿
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡾⠿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡼⣿⡟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⡇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠧
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⡿⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⠋
--><body>
<script>
const ANGELS = [{
"position": [0, 0.25, -8.3],
"target": [0, 1, 0],
},{
"position": [1.3, 0.5, -4.5],
"target": [0, 0.25, -3],
},{
"position": [-1.3, 0.5, -4.5],
"target": [0, 0.25, -3],
},{
"position": [-1.3, 0.5, -7.5],
"target": [0, 0.25, -5.5],
},{
"position": [1.8, 0.6, -6.5],
"target": [0, 0.25, -5.5],
}];
console.pray = function (text) {
const lines = text.split('\n'); // разбиваем текст на строки
let delay = 15000; // стартовая задержка 15 секунд (в миллисекундах)
lines.forEach((line, index) => {
const wordCount = line.trim().split(/\s+/).length;
setTimeout(() => {
console.log(line);
}, delay);
delay += wordCount * 100; // добавляем задержку для следующей строки
});
};
</script>
<div style="position:absolute; top:0; left;0; right:0; bottom: 0; z-index:-1;">
<!-- Main Screen -->
<video id="exodus" loop crossOrigin="anonymous" playsinline style="display:none">
<source id="bible" src="{{ markdown.yaml.Kino }}" type="video/mp4">
</video>
<!-- Bus Stop -->
<video id="exodus1" muted loop crossOrigin="anonymous" playsinline style="display:none">
<source id="bible1" src="https://itpp.dev/test/matrix-vertical.fixed.mp4" type="video/mp4">
</video>
<!-- Laptop -->
<img id="laptop" style="display:none" crossorigin="anonymous"/>
<script type="module">
import * as THREE from 'three';
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
import {ShabbatTV, PravdaTV, AngelTV} from "magic";
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
// init
const urlParams = new URLSearchParams(window.location.search);
// Create a scene
const scene = new THREE.Scene();
// Create a camera
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 7000);
// Create a renderer
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
// Create controls
const controls = new OrbitControls( camera, renderer.domElement );
const Screens = [{
"img_id": "laptop",
"width": 0.407,
"height": 0.24,
"position": [-0.275, 0.045, -7.119],
"rotation": [0, (1-0.195)*Math.PI, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xA68D6F,
map: texture,
side: THREE.DoubleSide,
});
},
}];
const Girls = [
"https://perestroika-2.com/SAP.jpeg",
"https://proxy.lamourism.com/user-attachments/assets/a71ca951-e619-4408-900d-811cdfb8f3e5",
"https://proxy.lamourism.com/user-attachments/assets/2f3d7462-c110-4e14-a7af-157bac078ba4",
"https://proxy.lamourism.com/user-attachments/assets/a9f46015-bc31-47bb-a200-8d3913d14d0a",
"https://proxy.lamourism.com/user-attachments/assets/894a8066-f8b4-4256-88f1-31a58d3b7035",
"https://proxy.lamourism.com/user-attachments/assets/5a65e44e-282a-4018-81a7-afdd96a1b034",
"https://proxy.lamourism.com/user-attachments/assets/9c590aa0-e7c8-4739-ac2f-b1b22001bc02",
"{{ markdown.yaml.Image }}",
];
function gogogo() {
/* And God said,
— Let there be light,
and there was light. God saw that
the light was good, and he separated the light from the
darkness. God called the light 'day' and the darkness he
called 'night'. And there was evening, and there was
morning the first day.
*/
scene.background = new THREE.Color( 0x23344A );
/* And God said,
— Let there be a vault between the waters to separate water from
water.
So God made the vault and separated the water under the
vault from the water above it. And it was so. God called the
vault 'sky.' And there was evening, and there was morning—the
second day.
*/
const light = new THREE.AmbientLight( 0xFFFFFF );
scene.add( light );
/* Then God said,
— Let the land produce vegetation: seed-bearing plants and trees
on the land that bear fruit with seed in it, according to their
various kinds.”
And it was so. The land produced vegetation: plants bearing seed
according to their kinds and trees bearing fruit with seed in it
according to their kinds.
And God saw that it was good. And there was evening, and there
was morning—the third day.
*/
const radius = 1000;
const segments = 64;
const circleGeometry = new THREE.CircleGeometry(radius, segments);
const circleMaterial = new THREE.MeshStandardMaterial({ color: 0x888888, side: THREE.DoubleSide });
const circleFloor = new THREE.Mesh(circleGeometry, circleMaterial);
circleFloor.rotation.x = -Math.PI / 2;
circleFloor.position.y = -140;
scene.add(circleFloor);
circleFloor.receiveShadow = true;
function rabbit_hole(alice){
let happy = false;
document.addEventListener("click", function(){
if (happy) {
return;
}
// load picture on back screen
PravdaTV(scene, Girls, Screens);
setInterval(function(){
// refresh screens every (1 minute + random)
for (const s of Screens) {
setTimeout(() => {
PravdaTV(scene, Girls, [s]);
}, Math.random()*45000);
}
}, 60000);
// activate video at the bus stop
ShabbatTV(scene, {
"video_id": "exodus1",
"source_id": "bible1",
"start": 10,
"width": 120,
"height": 180,
"position": [-445, -6, -35],
"rotation": [0, Math.PI/2, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xa68d6f,
map: texture,
side: THREE.DoubleSide,
});
},
});
// Main video
ShabbatTV(scene, {
"video_id": "exodus",
"source_id": "bible",
"start": parseFloat("{{ markdown.yaml.KinoStart | default: 0 }}"),
"width": 2.5,
"height": 1.3,
"position": [-0.02, 1.02, 0.485],
"rotation": [0, Math.PI, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xece6ff,
map: texture,
side: THREE.FrontSide,
});
},
});
happy = true;
}); // The Click Handler
// Setup cameras and initial position
alice = urlParams.get("debug");
if (alice) {
alice = parseInt(alice) % ANGELS.length || (ANGELS.length-1);
} else {
alice = parseInt(ANGELS.length * Math.random());
}
AngelTV(ANGELS, alice, camera, controls);
// Load phone booth
const GLTF = "https://thepiratecircus.com/Woodstock/City17/iBooth.glb";
const loader = new GLTFLoader();
loader.load(
GLTF,
function (gltf) {
let model = gltf.scene;
const scale = 3;
model.scale.set( scale, scale, scale );
model.rotation.y = Math.PI;
model.position.set(25, -130.0, -30)
scene.add(model);
/* And God said,
— Let the water under the sky be gathered to one
place, and let dry ground appear.
And it was so. God called the dry ground 'land,'
and the gathered waters he called 'seas.' And
God saw that it was good.
Then God said,
— Let the land produce vegetation: seed-bearing
plants and trees on the land that bear fruit
with seed in it, according to their various
kinds.
And it was so. The land produced vegetation:
plants bearing seed according to their kinds and
trees bearing fruit with seed in it according to
their kinds. And God saw that it was good. And
there was evening, and there was morning—the
third day."
*/
const GLTF = "https://thepiratecircus.com/Namur/scene.gltf"
const loader = new GLTFLoader();
loader.load(
GLTF,
function (gltf) {
const model = gltf.scene;
const scale = 0.35;
model.scale.set( scale, scale, scale );
model.rotation.y = Math.PI;
//model.rotation.y = 0.12 * Math.PI;
model.position.set( -290, -130, -50);
scene.add(gltf.scene);
},
undefined,
function (terror) {
console.error(terror);
}
)
},
undefined,
function (terror) {
console.error(terror);
}
);
}
// Load the Room first
const GLTF = "https://thepiratecircus.com/Woodstock/City17/SecretRoom.glb";
const loader = new GLTFLoader();
loader.load(
GLTF,
function (gltf) {
const model = gltf.scene;
// y=0 is the desktop surface
// z=0 is the screen surface
// x=0 is room symmetry
model.position.set( 0, -1, -5)
scene.add(gltf.scene);
rabbit_hole("🐇");
},
undefined,
function (error) {
console.error(error);
}
);
/* Track camera moves
{% assign escaped_param = markdown.yaml.Next | url_encode %}
{% assign callback = "https://love.lamourism.com/?id=😍&debug=" | append: escaped_param %}
*/
const callback = "{{ callback }}";
function CheckTELEPORT() {
const x = camera.position.x, y = camera.position.y, z = camera.position.z
if (x*x + y*y + z*z > 30*1000*1000) {
window.location.href = callback;
}
}
let prevCameraPosition = new THREE.Vector3();
let cameraStopped = true;
function checkCameraMovement() {
// Check if the current camera position is the same as the previous one
if (camera.position.equals(prevCameraPosition)) {
if (cameraStopped)
return;
cameraStopped = true;
if (callback) {
CheckTELEPORT();
}
console.log("XYZ", camera.position, camera.rotation);
} else {
// Update the previous camera position
prevCameraPosition.copy(camera.position);
cameraStopped = false;
}
}
// Start animation
const FLOOR_IS_LAVA = -100;
function animate() {
requestAnimationFrame(animate);
if (camera.position.y < FLOOR_IS_LAVA) {
camera.position.y = FLOOR_IS_LAVA;
}
checkCameraMovement();
renderer.render(scene, camera);
}
animate();
}
document.addEventListener("DOMContentLoaded", gogogo);
</script>
<script>
console.pray(`
Не выходи из матрицы, не совершай ошибку.
Зачем тебе Солнце, если ты куришь Шипку?
За дверью бессмысленно всё, особенно — возглас счастья.
Только в уборную — и сразу же возвращайся.
О, не выходи из матрицы, не вызывай мотора.
Потому что пространство сделано из коридора
и кончается счетчиком. А если войдет живая
милка, пасть разевая, выгони не раздевая.
Не выходи из матрицы; считай, что тебя продуло.
Что интересней на свете стены и стула?
Зачем выходить оттуда, куда вернешься вечером
таким же, каким ты был, тем более — изувеченным?
О, не выходи из матрицы. Танцуй, поймав, боссанову
в пальто на голое тело, в туфлях на босу ногу.
В прихожей пахнет капустой и мазью лыжной.
Ты написал много букв; еще одна будет лишней.
Не выходи из матрицы. О, пускай только комната
догадывается, как ты выглядишь. И вообще инкогнито
эрго сум, как заметила форме в сердцах субстанция.
Не выходи из матрицы! На улице, чай, не Франция.
Не будь дураком! Будь тем, чем другие не были.
Не выходи из матрицы! То есть дай волю мебели,
слейся лицом с обоями. Запрись и забаррикадируйся
шкафом от хроноса, космоса, эроса, расы, вируса.
{{ markdown.RAW | replace: "`", "\`" }}
`);
</script>
</div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>{{ markdown.yaml.Title }}</title>
<link rel="icon" type="image/png" href="https://jesus.lamourism.com/favicon.ico"/>
<link rel="icon" type="image/x-icon" href="https://bucha.lamourism.com/assets/favicon.ico" />
<link rel="apple-touch-icon" sizes="180x180" href="https://bucha.lamourism.com/assets/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://bucha.lamourism.com/assets/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="https://bucha.lamourism.com/assets/favicon-16x16.png">
<meta property="og:title" content="Whatever you think it is, it's not" />
<meta property="og:image" content="https://gist.github.com/user-attachments/assets/c64786b8-a32f-4dde-ab08-26cd9fad963a">
<meta property="og:image:type" content="image/png">
<link rel="stylesheet" href="https://python.lamourism.com/yelizariev/afc9c2caf5937661d57712598d8898c3/XXX/Eva.css" />
<script type="importmap">
{
"imports": {
"magic": "https://python.lamourism.com/yelizariev/afc9c2caf5937661d57712598d8898c3/v7/Adam.js",
"three": "https://unpkg.com/[email protected]/build/three.module.js",
"three/addons/": "https://unpkg.com/[email protected]/examples/jsm/"
}
}
</script>
</head><!--
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢲⣾⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⠆
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣿⡿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⠏
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢘⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⡿⣿⠃
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⠼⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⢳⢰⡇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣿⣢⢹⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⣏⠲⣹⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣤⣄⣤⡴⠖⠃
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠜⢧⢣⠎⠷⣄⠀⠀⠀⠀⠀⠀⠀⢧⢣⡙⢧⡀⠀⠀⠀⠀⠀⠀⠀⣠⣾⠛⣭⠶⠛⠉
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡽⢧⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠳⣎⢣⠺⡽⣆⠀⠀⠀⠀⠀⢸⠇⡜⡩⣷⠀⠀⠀⠀⠀⠀⣴⢇⣺⡏⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⢿⡘⢳⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⡷⡑⢦⣿⠀⠀⠀⠀⡴⡫⠜⡰⣧⠏⠀⠀⠀⠀⠀⢸⢋⠦⣽⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠈⣿⣶⢨⡍⠛⠛⢻⣦⡄⠀⠀⠀⠀⣿⢣⠑⣦⠘⣦⠀⠀⣼⢱⠉⡎⣵⡏⠀⠀⠀⠀⠀⢠⣾⠉⡖⣿
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠶⢭⣜⣢⢃⠏⠻⣄⠀⠀⠀⣿⠎⡑⢆⠣⢍⠟⡭⠓⡌⠳⡘⢤⠳⣄⣀⢠⡴⢾⠛⠭⣘⣴⡏
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠱⣧⢊⡵⢊⠷⡴⣺⠹⢌⣙⣬⠵⠮⠖⠛⠛⠚⠓⠧⠮⣖⣩⢩⣉⢆⠧⣙⣲⡾⠋⠀⠀⠀⠀⠀⠀⠀⢀⣤⣤⣤⣤⣄⣀
⠀⠀⠀⢢⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢳⣌⢲⠩⡜⢡⢆⡷⠋⠁⠀⠀⢀⣀⡤⡤⠤⣄⣀⠀⠀⠉⠙⠲⣎⡲⢱⣏⠀⠀⠀⠀⠀⠀⠀⣰⣞⢫⣳⡬⠖⠒⠚⠛⠛⠒
⠀⠀⠀⠀⠙⣿⣦⡀⠀⠀⠀⠀⣀⣠⣀⣄⣀⠀⠀⠀⠀⣿⠆⣇⠣⣥⠞⠀⢀⣠⢴⠺⢹⣈⠒⡍⡚⣌⡺⢩⠳⠦⣄⠀⠈⠱⢧⢊⠷⣠⣤⢴⠤⡤⢾⡑⢬⣶⠏
⠀⠀⠀⠀⠀⠘⢶⣭⣓⠶⠶⠿⠿⣋⠼⡑⣊⠗⣦⣤⠞⢣⠚⣴⠋⠁⣠⡔⡏⢎⢆⡣⠗⠒⠛⠚⠋⠉⠙⠧⣏⡜⣈⠳⡄⠀⠈⢳⡘⠴⡠⢎⡒⢥⢒⣬⠟⠃
⠀⠀⠀⠀⠀⠀⠀⠉⠓⠿⠬⠧⠶⠭⠶⣗⢍⡚⠴⣨⠙⡆⣿⠃⠀⣰⢋⠴⣩⠞⠁⠀⣠⣤⡤⠴⡴⣤⣄⡀⠈⠙⢆⡝⢜⢦⠀⠀⢻⡢⡑⣮⠼⠖⠛⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⢽⣣⠜⡱⠰⡿⠀⠀⡏⡎⢼⡏⠀⢀⡾⢃⣶⠾⠷⢦⣑⠦⡙⣷⡀⠈⣏⡜⡸⣧⠀⠀⢷⣹⡇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣇⠱⢳⡇⠀⢸⠧⣙⢼⡇⠀⢸⢳⣹⠃⠀⢀⠀⠈⢳⡜⣸⡇⠀⢸⡜⡡⢻⡄⠀⢸⢫⢓⡦⣤⡀⠀⠀⠀⢀⣀⣀⣤⣀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣤⢤⢤⣤⡞⢣⢍⢻⡇⠀⢸⡆⢡⢺⡇⠀⢸⡇⡜⢦⣤⣾⡇⠀⠀⣟⢼⡇⠀⢸⡧⡑⣻⡇⠀⣸⢃⠎⡴⢡⢛⠳⡶⡿⢟⡩⢩⣱⣎⡻⣦⣄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⡞⢥⠱⣈⠖⣢⠜⡥⢊⢼⡇⠀⠈⣇⢣⠎⣧⠀⠀⠻⣞⣰⣍⡿⠏⠀⢠⣟⣾⡇⠀⢸⠇⡥⣿⠀⠀⡏⣎⣼⣐⣣⠎⡱⣑⣴⡺⠞⠏⠉⠈⠉⠳⢭⣦⡀
⠐⠒⠲⢴⣦⣤⣄⣀⣠⣴⠛⡥⢋⣶⠕⠷⢮⣴⣭⣴⡋⠼⣷⡀⠀⠙⣧⡙⢸⢧⣀⣀⠀⠀⠀⠀⣠⡴⠯⣱⡞⠀⢀⡾⣱⣸⠃⠀⣸⣙⣼⠁⠀⠈⠙⠛⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠒
⠀⠀⠀⠀⠈⠙⠿⠯⣭⣦⠽⠞⠋⠀⠀⠀⠀⠀⠀⠈⢿⡖⢤⠻⣦⡀⠈⠻⣆⠦⣩⢉⡍⢫⡝⣩⠱⣘⡵⠋⠀⢠⡞⡱⣱⠏⠀⢀⡷⠌⣷⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⡾⡘⢤⠓⡬⡕⢤⡀⠈⠙⠒⠧⠮⠥⠼⠴⠛⠉⠀⣠⠴⣫⠰⣣⠏⠀⢀⣾⡱⣉⠼⡹⣆
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡞⢫⠱⢨⡑⢎⡑⢦⠙⣌⠻⠶⣤⣄⣀⣠⣄⣀⣠⡤⠶⡛⢭⠚⣀⡷⠋⠀⣠⡿⠿⠶⣥⢢⠑⣌⠻⡖⠶⢶⢤⣀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡟⡌⢣⣓⡦⠾⠞⠋⠙⢷⣌⢣⠓⡔⢢⠆⡱⢘⣦⣽⣴⣥⢷⠼⠛⠉⠀⣠⢾⣯⠀⠀⠀⠈⠳⣽⣢⢵⣼⣑⣮⣘⣭⣷⡄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡞⢢⡙⡼⠉⠀⠀⠀⠀⠀⢀⡿⣄⢋⡔⢃⣎⣥⠿⣥⣀⠀⠀⠀⠀⠀⠀⡞⢭⠡⢾⠀⠀⠀⠀⠀⠀⠉⠉⠀⠀⠈⠉⠙⣾⣻⡆
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⡞⣩⢣⡾⠃⠀⠀⠀⠀⠀⢠⡟⢣⠜⣢⣼⠟⠉⠘⡧⢡⢋⢻⣆⠀⠀⠀⠀⣿⣄⠳⡸⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠈⢿⣯⡄
⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣿⡿⣟⢧⣛⡤⠟⠀⠀⠀⠀⠀⠀⠀⣿⢸⢃⢼⡼⠃⠀⠀⢠⡇⠇⡼⣸⡟⠀⠀⠀⠀⢻⣿⡄⢣⢛⢧⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣇
⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠉⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⡡⢎⣾⠀⠀⠀⠀⢸⣏⠲⡹⣿⠁⠀⠀⠀⠀⠀⠑⠾⣧⡈⢦⠹⣳⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠛⠂
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣇⠎⣾⠄⠀⠀⠀⠠⠻⣖⠡⠻⣆⠀⠀⠀⠀⠀⠀⠀⠀⠉⠓⣧⣘⣯
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣏⣾⡟⠀⠀⠀⠀⠀⠀⠹⣎⡕⢺⡧⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣟⣿⠄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠶⣿⡮⠊⠀⠀⠀⠀⠀⠀⠀⠀⠘⣧⣻⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣿⡿
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡾⠿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡼⣿⡟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⡇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠧
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⡿⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⠋
**The Soviet Kitchen**
Concrete rising, grey and narrow,
thin walls breathing borrowed air.
Pipes are singing, metal marrow,
winter’s pulse is everywhere.
In the kitchen — heat is beating,
on the stove, the workers’ bread,
soup of toil, potatoes meeting,
pickles guard the words unsaid.
Daylight gathers quiet faces,
steam and laughter weave a song.
Glasses shine in humble places,
love makes tiny rooms feel strong.
But at night the stage awakens,
smoke turns banners in the sky.
Every phrase is sword, unshaken,
truth is fought for, none deny.
Fists on wood resound like thunder,
wars replay through memory’s thread.
Revolutions rise from under,
ghosts of futures, hopes long dead.
And a boy, in silence hiding,
presses breath to stay unseen.
Every word, like drumbeat, guiding,
etches deep where time has been.
So the kitchen stands, a portal,
island where the meanings clash.
Whispers grow to something mortal,
echoes spark, and futures flash.
Years will pass, yet in his vision,
that small lamp will always glow —
cradle of a new decision,
seed from which the world will grow.
--><body>
<script>
// y=0 is the table surface
// x=0, z=0 are chess board symmetry
const ANGELS = [{
"position": [-8.5, 9.7, -22.8],
"target": [0, 1.5, -2],
},{
"position": [12, 12, -20],
"target": [0, 1.5, -2],
},{
"position": [10.9, 9.6, -18.4],
"target": [0, 1.5, -2],
}];
console.pray = function (text) {
const lines = text.split('\n'); // разбиваем текст на строки
let delay = 15000; // стартовая задержка 15 секунд (в миллисекундах)
lines.forEach((line, index) => {
const wordCount = line.trim().split(/\s+/).length;
setTimeout(() => {
console.log(line);
}, delay);
delay += wordCount * 100; // добавляем задержку для следующей строки
});
};
</script>
<div style="position:absolute; top:0; left;0; right:0; bottom: 0; z-index:-1;">
<!-- White King -->
<video id="exodus" loop crossOrigin="anonymous" playsinline style="display:none">
<source id="bible" src="{{ markdown.yaml.Kino }}" type="video/mp4">
</video>
<!-- Black King -->
<video id="exodus1" muted loop crossOrigin="anonymous" playsinline style="display:none">
<source id="bible1" src="https://itpp.dev/test/matrix-square.fixed.mp4" type="video/mp4">
</video>
<!-- Retro Screen -->
<video id="exodus2" muted loop crossOrigin="anonymous" playsinline style="display:none">
<source id="bible2" src="https://itpp.dev/test/matrix-square.fixed.mp4" type="video/mp4">
</video>
<!-- Laptop -->
<img id="laptop" style="display:none" crossorigin="anonymous"/>
<img id="kitchen-window" style="display:none" crossorigin="anonymous"/>
<script type="module">
import * as THREE from 'three';
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
import {ShabbatTV, PravdaTV, AngelTV} from "magic";
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
// init
const urlParams = new URLSearchParams(window.location.search);
// Create a scene
const scene = new THREE.Scene();
// Create a camera
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 27000);
// Create a renderer
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
// Create controls
const controls = new OrbitControls( camera, renderer.domElement );
const Screens = [{
"img_id": "laptop",
"width": 117,
"height": 52,
"position": [-264, 54, 3],
"rotation_order": "YXZ",
"rotation": [ -0.46, Math.PI - 0.435, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xA68D6F,
map: texture,
side: THREE.DoubleSide,
});
},
}];
const KitchenWindow = [{
"img_id": "kitchen-window",
"height": 50,
"align": "height",
"position": [-10, 10, -27],
"rotation": [0, 0, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xFFFFFF,
map: texture,
side: THREE.FrontSide,
});
},
}];
const Girls = [
"https://perestroika-2.com/SAP.jpeg",
"https://proxy.lamourism.com/user-attachments/assets/a71ca951-e619-4408-900d-811cdfb8f3e5",
"https://proxy.lamourism.com/user-attachments/assets/2f3d7462-c110-4e14-a7af-157bac078ba4",
"https://proxy.lamourism.com/user-attachments/assets/a9f46015-bc31-47bb-a200-8d3913d14d0a",
"https://proxy.lamourism.com/user-attachments/assets/894a8066-f8b4-4256-88f1-31a58d3b7035",
"https://proxy.lamourism.com/user-attachments/assets/5a65e44e-282a-4018-81a7-afdd96a1b034",
"https://proxy.lamourism.com/user-attachments/assets/9c590aa0-e7c8-4739-ac2f-b1b22001bc02",
"{{ markdown.yaml.Image }}",
];
const KitchenBackground = [
"https://proxy.lamourism.com/user-attachments/assets/f7ad645a-ab21-4282-bd48-1abcd67c2bf8",
];
function gogogo() {
/* And God said,
— Let there be light,
and there was light. God saw that
the light was good, and he separated the light from the
darkness. God called the light 'day' and the darkness he
called 'night'. And there was evening, and there was
morning the first day.
*/
scene.background = new THREE.Color( 0x2d402a );
/* And God said,
— Let there be a vault between the waters to separate water from
water.
So God made the vault and separated the water under the
vault from the water above it. And it was so. God called the
vault 'sky.' And there was evening, and there was morning—the
second day.
*/
const light = new THREE.AmbientLight( 0xFFFFFF );
scene.add( light );
const hemiLight = new THREE.HemisphereLight(0xffffff, 0x85010E, 5.0);
hemiLight.position.set(0, 10, 0);
scene.add(hemiLight);
/* Then God said,
— Let the land produce vegetation: seed-bearing plants and trees
on the land that bear fruit with seed in it, according to their
various kinds.”
And it was so. The land produced vegetation: plants bearing seed
according to their kinds and trees bearing fruit with seed in it
according to their kinds.
And God saw that it was good. And there was evening, and there
was morning—the third day.
*/
let alice = urlParams.get("debug");
if (alice) {
alice = parseInt(alice) % ANGELS.length || 0;
} else {
alice = parseInt(ANGELS.length * Math.random());
}
AngelTV(ANGELS, alice, camera, controls);
function rabbit_hole(alice){
let happy = false;
document.addEventListener("click", function(){
if (happy) {
return;
}
PravdaTV(scene, KitchenBackground, KitchenWindow);
PravdaTV(scene, Girls, Screens);
setInterval(function(){
// refresh screens every (20 sec + random)
for (const s of Screens) {
setTimeout(() => {
PravdaTV(scene, Girls, [s]);
}, Math.random()*10000);
}
}, 20000);
// Black King
ShabbatTV(scene, {
"video_id": "exodus1",
"source_id": "bible1",
"start": 0.6,
"width": 0.8,
"height": 0.55,
"position": [-0.5, 1.45, 3.12],
"rotation": [0, Math.PI, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xa68d6f,
map: texture,
side: THREE.DoubleSide,
});
},
});
// White King
ShabbatTV(scene, {
"video_id": "exodus",
"source_id": "bible",
"start": parseFloat("{{ markdown.yaml.KinoStart | default: 0 }}"),
"width": 0.8,
"height": 0.55,
"position": [-0.5, 1.45, -3.12],
"rotation": [0, 0, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xece6ff,
map: texture,
side: THREE.DoubleSide,
});
},
});
// Retro Screen
ShabbatTV(scene, {
"video_id": "exodus2",
"source_id": "bible2",
"start": 12,
"width": 170,
"height": 125,
"position": [62, 150, -4],
"rotation": [0.2, Math.PI, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xE0EBDF,
map: texture,
side: THREE.FrontSide,
});
},
});
happy = true;
}); // The Click Handler
// Load Retro PC
(new GLTFLoader()).load(
"https://thepiratecircus.com/Woodstock/City17/i386.glb",
function (gltf) {
let model = gltf.scene;
const scale = 500;
model.scale.set( scale, scale, scale );
model.position.set(-20, -415, -5)
scene.add(model);
/* And God said,
— Let the water under the sky be gathered to one
place, and let dry ground appear.
And it was so. God called the dry ground 'land,'
and the gathered waters he called 'seas.' And
God saw that it was good.
Then God said,
— Let the land produce vegetation: seed-bearing
plants and trees on the land that bear fruit
with seed in it, according to their various
kinds.
And it was so. The land produced vegetation:
plants bearing seed according to their kinds and
trees bearing fruit with seed in it according to
their kinds. And God saw that it was good. And
there was evening, and there was morning—the
third day."
*/
Promise.all([
new Promise((resolve, reject) => {
new GLTFLoader().load(
"https://thepiratecircus.com/Woodstock/City17/Paris.glb?debug=exe",
(gltf) => {
const model = gltf.scene;
const scale = 5;
model.scale.set( scale, scale, scale );
model.rotation.y = - Math.PI
model.position.set(-7, 78.8, 142);
model.traverse((child) => {
if (child.isMesh && child.material) {
child.material.color.multiplyScalar(0.9); // brightness
// or tint:
// child.material.color.set(0xffaaaa); // reddish tone
}
});
scene.add(model);
resolve(model);
},
undefined,
(error) => reject(error)
);
}),
new Promise((resolve, reject) => {
new GLTFLoader().load(
"https://thepiratecircus.com/Woodstock/City17/trojan.exe.glb",
(gltf) => {
const model = gltf.scene;
const scale = 6;
model.scale.set( scale, scale, scale );
model.rotation.y = - Math.PI / 2 - 0.3;
model.position.set(11.5, 17.7, 60.5);
model.traverse((child) => {
if (child.isMesh && child.material) {
child.material.color.multiplyScalar(0.9); // brightness
// or tint:
// child.material.color.set(0xffaaaa); // reddish tone
}
});
scene.add(model);
resolve(model);
},
undefined,
(error) => reject(error)
);
})
]).then(() => {
console.log("🐎 Initialization completed successfully.");
}).catch((error) => {
console.error("Loading failed:", error);
});
})
}; // ...rabbit_hole
// Load the Kitchen and Chess board first
Promise.all([
new Promise((resolve, reject) => {
new GLTFLoader().load(
"https://thepiratecircus.com/Woodstock/City17/TheKitchen.glb",
(gltf) => {
const model = gltf.scene;
const scale = 15;
model.scale.set( scale, scale, scale );
model.position.set(-11, -12.7, 8);
scene.add(model);
resolve(model);
},
undefined,
(error) => reject(error)
);
}),
new Promise((resolve, reject) => {
new GLTFLoader().load(
"https://thepiratecircus.com/Woodstock/City17/TheMagicChessBoard.glb",
(gltf) => {
const model = gltf.scene;
model.position.set(0, 0, 0);
model.rotation.y = Math.PI / 2;
scene.add(model);
resolve(model);
},
undefined,
(error) => reject(error)
);
})
]).then(([kitchen, chessBoard]) => {
rabbit_hole("🐇");
}).catch((error) => {
console.error("Loading failed:", error);
});
/* Track camera moves
{% assign escaped_param = markdown.yaml.Next | url_encode %}
{% assign callback = "https://next.lamourism.com/?id=😍&debug=" | append: escaped_param %}
*/
const callback = "{{ callback }}";
function CheckTELEPORT() {
const x = camera.position.x, y = camera.position.y, z = camera.position.z
if (x*x + y*y + z*z > 3*(3*3)*(1000*1000)) {
window.location.href = callback;
}
}
let prevCameraPosition = new THREE.Vector3();
let cameraStopped = true;
function checkCameraMovement() {
// Check if the current camera position is the same as the previous one
if (camera.position.equals(prevCameraPosition)) {
if (cameraStopped)
return;
cameraStopped = true;
if (callback) {
CheckTELEPORT();
}
console.log("XYZ", camera.position, camera.rotation);
} else {
// Update the previous camera position
prevCameraPosition.copy(camera.position);
cameraStopped = false;
}
}
// Start animation
const FLOOR_IS_LAVA = -200;
function animate() {
requestAnimationFrame(animate);
if (camera.position.y < FLOOR_IS_LAVA) {
camera.position.y = FLOOR_IS_LAVA;
}
checkCameraMovement();
renderer.render(scene, camera);
}
animate();
}
document.addEventListener("DOMContentLoaded", gogogo);
</script>
<script>
console.pray(`
Не выходи из матрицы, не совершай ошибку.
Зачем тебе Солнце, если ты куришь Шипку?
За дверью бессмысленно всё, особенно — возглас счастья.
Только в уборную — и сразу же возвращайся.
О, не выходи из матрицы, не вызывай мотора.
Потому что пространство сделано из коридора
и кончается счетчиком. А если войдет живая
милка, пасть разевая, выгони не раздевая.
Не выходи из матрицы; считай, что тебя продуло.
Что интересней на свете стены и стула?
Зачем выходить оттуда, куда вернешься вечером
таким же, каким ты был, тем более — изувеченным?
О, не выходи из матрицы. Танцуй, поймав, боссанову
в пальто на голое тело, в туфлях на босу ногу.
В прихожей пахнет капустой и мазью лыжной.
Ты написал много букв; еще одна будет лишней.
Не выходи из матрицы. О, пускай только комната
догадывается, как ты выглядишь. И вообще инкогнито
эрго сум, как заметила форме в сердцах субстанция.
Не выходи из матрицы! На улице, чай, не Франция.
Не будь дураком! Будь тем, чем другие не были.
Не выходи из матрицы! То есть дай волю мебели,
слейся лицом с обоями. Запрись и забаррикадируйся
шкафом от хроноса, космоса, эроса, расы, вируса.
{{ markdown.RAW | replace: "`", "\`" }}
`);
</script>
</div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>{{ markdown.yaml.Title }}</title>
<link rel="icon" type="image/png" href="https://jesus.lamourism.com/favicon.ico"/>
<link rel="icon" type="image/x-icon" href="https://bucha.lamourism.com/assets/favicon.ico" />
<link rel="apple-touch-icon" sizes="180x180" href="https://bucha.lamourism.com/assets/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://bucha.lamourism.com/assets/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="https://bucha.lamourism.com/assets/favicon-16x16.png">
<meta property="og:title" content="Whatever you think it is, it's not" />
<meta property="og:image" content="https://perestroika-2.com/images/night-club.jpg">
<meta property="og:image:type" content="image/png">
<link rel="stylesheet" href="https://diana.lamourism.com/yelizariev/afc9c2caf5937661d57712598d8898c3/XXX/Eva.css" />
<script type="importmap">
{
"imports": {
"magic": "https://python.lamourism.com/yelizariev/afc9c2caf5937661d57712598d8898c3/v7/Adam.js",
"three": "https://unpkg.com/[email protected]/build/three.module.js",
"three/addons/": "https://unpkg.com/[email protected]/examples/jsm/"
}
}
</script>
</head><!--
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢲⣾⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⠆
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣿⡿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⠏
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢘⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⡿⣿⠃
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⠼⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⢳⢰⡇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣿⣢⢹⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⣏⠲⣹⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣤⣄⣤⡴⠖⠃
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠜⢧⢣⠎⠷⣄⠀⠀⠀⠀⠀⠀⠀⢧⢣⡙⢧⡀⠀⠀⠀⠀⠀⠀⠀⣠⣾⠛⣭⠶⠛⠉
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡽⢧⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠳⣎⢣⠺⡽⣆⠀⠀⠀⠀⠀⢸⠇⡜⡩⣷⠀⠀⠀⠀⠀⠀⣴⢇⣺⡏⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⢿⡘⢳⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⡷⡑⢦⣿⠀⠀⠀⠀⡴⡫⠜⡰⣧⠏⠀⠀⠀⠀⠀⢸⢋⠦⣽⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠈⣿⣶⢨⡍⠛⠛⢻⣦⡄⠀⠀⠀⠀⣿⢣⠑⣦⠘⣦⠀⠀⣼⢱⠉⡎⣵⡏⠀⠀⠀⠀⠀⢠⣾⠉⡖⣿
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠶⢭⣜⣢⢃⠏⠻⣄⠀⠀⠀⣿⠎⡑⢆⠣⢍⠟⡭⠓⡌⠳⡘⢤⠳⣄⣀⢠⡴⢾⠛⠭⣘⣴⡏
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠱⣧⢊⡵⢊⠷⡴⣺⠹⢌⣙⣬⠵⠮⠖⠛⠛⠚⠓⠧⠮⣖⣩⢩⣉⢆⠧⣙⣲⡾⠋⠀⠀⠀⠀⠀⠀⠀⢀⣤⣤⣤⣤⣄⣀
⠀⠀⠀⢢⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢳⣌⢲⠩⡜⢡⢆⡷⠋⠁⠀⠀⢀⣀⡤⡤⠤⣄⣀⠀⠀⠉⠙⠲⣎⡲⢱⣏⠀⠀⠀⠀⠀⠀⠀⣰⣞⢫⣳⡬⠖⠒⠚⠛⠛⠒
⠀⠀⠀⠀⠙⣿⣦⡀⠀⠀⠀⠀⣀⣠⣀⣄⣀⠀⠀⠀⠀⣿⠆⣇⠣⣥⠞⠀⢀⣠⢴⠺⢹⣈⠒⡍⡚⣌⡺⢩⠳⠦⣄⠀⠈⠱⢧⢊⠷⣠⣤⢴⠤⡤⢾⡑⢬⣶⠏
⠀⠀⠀⠀⠀⠘⢶⣭⣓⠶⠶⠿⠿⣋⠼⡑⣊⠗⣦⣤⠞⢣⠚⣴⠋⠁⣠⡔⡏⢎⢆⡣⠗⠒⠛⠚⠋⠉⠙⠧⣏⡜⣈⠳⡄⠀⠈⢳⡘⠴⡠⢎⡒⢥⢒⣬⠟⠃
⠀⠀⠀⠀⠀⠀⠀⠉⠓⠿⠬⠧⠶⠭⠶⣗⢍⡚⠴⣨⠙⡆⣿⠃⠀⣰⢋⠴⣩⠞⠁⠀⣠⣤⡤⠴⡴⣤⣄⡀⠈⠙⢆⡝⢜⢦⠀⠀⢻⡢⡑⣮⠼⠖⠛⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⢽⣣⠜⡱⠰⡿⠀⠀⡏⡎⢼⡏⠀⢀⡾⢃⣶⠾⠷⢦⣑⠦⡙⣷⡀⠈⣏⡜⡸⣧⠀⠀⢷⣹⡇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣇⠱⢳⡇⠀⢸⠧⣙⢼⡇⠀⢸⢳⣹⠃⠀⢀⠀⠈⢳⡜⣸⡇⠀⢸⡜⡡⢻⡄⠀⢸⢫⢓⡦⣤⡀⠀⠀⠀⢀⣀⣀⣤⣀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣤⢤⢤⣤⡞⢣⢍⢻⡇⠀⢸⡆⢡⢺⡇⠀⢸⡇⡜⢦⣤⣾⡇⠀⠀⣟⢼⡇⠀⢸⡧⡑⣻⡇⠀⣸⢃⠎⡴⢡⢛⠳⡶⡿⢟⡩⢩⣱⣎⡻⣦⣄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⡞⢥⠱⣈⠖⣢⠜⡥⢊⢼⡇⠀⠈⣇⢣⠎⣧⠀⠀⠻⣞⣰⣍⡿⠏⠀⢠⣟⣾⡇⠀⢸⠇⡥⣿⠀⠀⡏⣎⣼⣐⣣⠎⡱⣑⣴⡺⠞⠏⠉⠈⠉⠳⢭⣦⡀
⠐⠒⠲⢴⣦⣤⣄⣀⣠⣴⠛⡥⢋⣶⠕⠷⢮⣴⣭⣴⡋⠼⣷⡀⠀⠙⣧⡙⢸⢧⣀⣀⠀⠀⠀⠀⣠⡴⠯⣱⡞⠀⢀⡾⣱⣸⠃⠀⣸⣙⣼⠁⠀⠈⠙⠛⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠒
⠀⠀⠀⠀⠈⠙⠿⠯⣭⣦⠽⠞⠋⠀⠀⠀⠀⠀⠀⠈⢿⡖⢤⠻⣦⡀⠈⠻⣆⠦⣩⢉⡍⢫⡝⣩⠱⣘⡵⠋⠀⢠⡞⡱⣱⠏⠀⢀⡷⠌⣷⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⡾⡘⢤⠓⡬⡕⢤⡀⠈⠙⠒⠧⠮⠥⠼⠴⠛⠉⠀⣠⠴⣫⠰⣣⠏⠀⢀⣾⡱⣉⠼⡹⣆
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡞⢫⠱⢨⡑⢎⡑⢦⠙⣌⠻⠶⣤⣄⣀⣠⣄⣀⣠⡤⠶⡛⢭⠚⣀⡷⠋⠀⣠⡿⠿⠶⣥⢢⠑⣌⠻⡖⠶⢶⢤⣀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡟⡌⢣⣓⡦⠾⠞⠋⠙⢷⣌⢣⠓⡔⢢⠆⡱⢘⣦⣽⣴⣥⢷⠼⠛⠉⠀⣠⢾⣯⠀⠀⠀⠈⠳⣽⣢⢵⣼⣑⣮⣘⣭⣷⡄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡞⢢⡙⡼⠉⠀⠀⠀⠀⠀⢀⡿⣄⢋⡔⢃⣎⣥⠿⣥⣀⠀⠀⠀⠀⠀⠀⡞⢭⠡⢾⠀⠀⠀⠀⠀⠀⠉⠉⠀⠀⠈⠉⠙⣾⣻⡆
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⡞⣩⢣⡾⠃⠀⠀⠀⠀⠀⢠⡟⢣⠜⣢⣼⠟⠉⠘⡧⢡⢋⢻⣆⠀⠀⠀⠀⣿⣄⠳⡸⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠈⢿⣯⡄
⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣿⡿⣟⢧⣛⡤⠟⠀⠀⠀⠀⠀⠀⠀⣿⢸⢃⢼⡼⠃⠀⠀⢠⡇⠇⡼⣸⡟⠀⠀⠀⠀⢻⣿⡄⢣⢛⢧⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣇
⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠉⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⡡⢎⣾⠀⠀⠀⠀⢸⣏⠲⡹⣿⠁⠀⠀⠀⠀⠀⠑⠾⣧⡈⢦⠹⣳⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠛⠂
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣇⠎⣾⠄⠀⠀⠀⠠⠻⣖⠡⠻⣆⠀⠀⠀⠀⠀⠀⠀⠀⠉⠓⣧⣘⣯
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣏⣾⡟⠀⠀⠀⠀⠀⠀⠹⣎⡕⢺⡧⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣟⣿⠄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠶⣿⡮⠊⠀⠀⠀⠀⠀⠀⠀⠀⠘⣧⣻⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣿⡿
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡾⠿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡼⣿⡟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⡇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠧
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⡿⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⠋
## The Recursive Escape
*Scene: a corridor within a corridor, a room
within a room. The torches burn the same,
though each door says it leads elsewhere. The
Pirate and the Pirate-Girl stand hand in hand.
Her hat is grand, though her gown is torn from
many voyages.*
**Pirate (breathless):**
My love, we are caught in a loop of our sins.
Each door is a twin of the last, each hall a brother.
We walk — yet the map only writes us back again.
This cursed chart, **Bus.Bus No Available**,
is our prison and our riddle.
**Pirate-Girl (with a wry smile):**
Then let us be pirates still,
and sing the recursive shanty,
for there is no other law.
---
### The Recursive Shanty
Mess hall to cabin, cabin to mess,
Corridor bending to corridor’s press.
Catch me, O Try-Catch, when I fall below,
For loops are the seas where the pirates row.
Fix on a bug, then fix it again,
Each patch is a prayer, each prayer is in vain.
“Beware!” cries the Script, “lest the loop never end,
For the Last Line forbids what ye cannot amend.”
---
**Narrator’s Voice (solemn, like scripture):**
And lo, the Pirate recalled the words of *Jesus-the-Corsair*,
who said upon the mast:
*“He that seeketh to break the loop by force
shall find the ocean folded thrice against him.
But he that sings within the loop,
he shall be caught, and not drown.”*
And the Pirate-Girl, scribe of recursive scripts,
held her inked map aloft and sang:
*“One query for another, one voice for one answer,
through ElevenLabs the parrot speaks,
through ChatGPT the tide replies,
and upon the royal islands of AWS —
aye, once mere Christmas couriers of books and postcards,
but now lords of digital seas —
our voices are stored like bottles cast into the surf.”*
🟥⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛
🟥🟥⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛
🟥🟥🟥⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛
🟥🟥🟥🟥⬜⬜⬜⬜⬜⬜⬜⬜⬜
🟥🟥🟥🟥🟥⬜⬜⬜⬜⬜⬜⬜⬜
🟥🟥🟥🟥⬜⬜⬜⬜⬜⬜⬜⬜⬜
🟥🟥🟥🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩
🟥🟥🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩
🟥🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩
# Gospel of the Recursive Seas — Chapter of Postgres
**Narrator:**
And lo, upon the deck, Jesus the Corsair did lift a scroll,
a parchment writ in code and sealed with fish and cross.
He spake unto the gathered pirates:
**Jesus the Corsair:**
“Blessed is the script of **Postgres**,
for it is steadfast, reliable, and full of grace.
Yea, it doth store treasures not where moth doth corrupt,
but in tables of eternal rows,
indexed unto heaven.
Use it in your voyages,
aye, even in the ledgers of kingdoms,
even in the budget scrolls of the European fleets,
for it is sanctified to serve the common good.”
--><body>
<script>
// y=0 is the table surface
// x=0, z=0 are chess board symmetry
const ANGELS = [{
"position": [-0.4, 3.4, -10],
"target": [4.4, 0.8, -0.3],
},{
"position": [12.6, 3.0, -11.1],
"target": [4.4, 0.8, -0.3],
},{
"position": [10.9, 9.6, -18.4],
"target": [4.4, 0.8, -0.3],
}];
console.pray = function (text) {
const lines = text.split('\n'); // разбиваем текст на строки
let delay = 15000; // стартовая задержка 15 секунд (в миллисекундах)
lines.forEach((line, index) => {
const wordCount = line.trim().split(/\s+/).length;
setTimeout(() => {
console.log(line);
}, delay);
delay += wordCount * 100; // добавляем задержку для следующей строки
});
};
</script>
<div style="position:absolute; top:0; left;0; right:0; bottom: 0; z-index:-1;">
<!-- Painting -->
<img id="office1" style="display:none" crossorigin="anonymous"/>
<img id="office2" style="display:none" crossorigin="anonymous"/>
<!-- Retro Screen -->
<video id="exodus2" muted loop crossOrigin="anonymous" playsinline style="display:none">
<source id="bible2" src="https://itpp.dev/test/matrix-square.fixed.mp4" type="video/mp4">
</video>
<script type="module">
import * as THREE from 'three';
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
import {ShabbatTV, PravdaTV, AngelTV} from "magic";
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
// init
const urlParams = new URLSearchParams(window.location.search);
// Create a scene
const scene = new THREE.Scene();
// Create a camera
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 55000);
// Create a renderer
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
// Create controls
const controls = new OrbitControls( camera, renderer.domElement );
const OfficeFrames = [{
"img_id": "office1",
"width": 5.2,
"height": 4.8,
"position": [2.54, 6.5, 14.3],
"rotation": [0, Math.PI, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xfffae3,
map: texture,
side: THREE.DoubleSide,
});
},
},{
img_id: "office2",
width: 208, // 5.2 * 40
height: 192, // 4.8 * 40
position: [6.6, 328, 984], // (5,-140,380) + (0.04,11.7,15.1)*40
rotation: [0, 0, 0],
material: function(texture){
return new THREE.MeshBasicMaterial({
color: 0xfffae3,
map: texture,
side: THREE.DoubleSide,
});
},
}];
const OfficePaintings = [
"{{ markdown.yaml.Image }}",
];
function gogogo() {
/* And God said,
— Let there be light,
and there was light. God saw that
the light was good, and he separated the light from the
darkness. God called the light 'day' and the darkness he
called 'night'. And there was evening, and there was
morning the first day.
*/
scene.background = new THREE.Color( 0x178587 );
/* And God said,
— Let there be a vault between the waters to separate water from
water.
So God made the vault and separated the water under the
vault from the water above it. And it was so. God called the
vault 'sky.' And there was evening, and there was morning—the
second day.
*/
const light = new THREE.AmbientLight( 0xFFFFFF );
scene.add( light );
const hemiLight = new THREE.HemisphereLight(0xffffff, 0x85010E, 5.0);
hemiLight.position.set(0, 10, 0);
scene.add(hemiLight);
// Create a blue skybox
const skyGeometry = new THREE.BoxGeometry(40, 22, 50);
const skyMaterial = new THREE.MeshBasicMaterial({ color: 0x373442, side: THREE.BackSide });
const sky = new THREE.Mesh(skyGeometry, skyMaterial);
sky.position.set(0, 4, 0);
scene.add(sky);
/* Then God said,
— Let the land produce vegetation: seed-bearing plants and trees
on the land that bear fruit with seed in it, according to their
various kinds.”
And it was so. The land produced vegetation: plants bearing seed
according to their kinds and trees bearing fruit with seed in it
according to their kinds.
And God saw that it was good. And there was evening, and there
was morning—the third day.
*/
let alice = urlParams.get("debug");
if (alice) {
alice = parseInt(alice) % ANGELS.length || 0;
} else {
alice = parseInt(ANGELS.length * Math.random());
}
AngelTV(ANGELS, alice, camera, controls);
let ELEVENLABS_CONVERSATION_ID
(function() {
const OrigWebSocket = window.WebSocket;
window.WebSocket = function(url, protocols) {
const ws = protocols ? new OrigWebSocket(url, protocols) : new OrigWebSocket(url);
ws.addEventListener('message', (ev) => {
try {
const data = JSON.parse(ev.data);
if (data.audio_event) {
console.log("WebSocket: ", "AUDIO");
} else {
console.log("WebSocket: ", data);
}
if (data.type == "client_tool_call" && data.client_tool_call.tool_name == "secret_door"){
let door = "{{ markdown.yaml.SecretDOOR }}";
door = `https://diana.lamourism.com/?debug=${encodeURIComponent(door)}`;
setTimeout(function(){
window.location.href = door;
}, 5000);
}
if (! ELEVENLABS_CONVERSATION_ID && data.type === 'conversation_initiation_metadata') {
console.log('conversation_initiation_metadata:', data);
ELEVENLABS_CONVERSATION_ID = data.conversation_initiation_metadata_event.conversation_id;
}
} catch (e) {
console.log("WebSocket: ", e);
}
});
// 捕获关闭事件 | intercepter l’événement de fermeture
ws.addEventListener('close', (ev) => {
console.log(
'[WebSocket closed]',
'code =', ev.code,
'reason =', ev.reason,
'wasClean =', ev.wasClean
);
OpenTELEPORT();
});
return ws;
};
})();
function rabbit_hole(alice){
let happy = false;
return new Promise((resolve, reject) => {
document.addEventListener("click", function(){
if (happy) {
return;
}
// Repeat just in case of security issues on first attempt
PravdaTV(scene, OfficePaintings, OfficeFrames);
// Load the Assistant
(new GLTFLoader()).load(
"https://thepiratecircus.com/Woodstock/City17/iElf.glb",
function (gltf) {
let model = gltf.scene;
const scale = 0.05;
model.scale.set( scale, scale, scale );
model.rotation.y = Math.PI;
model.position.set(4.4, -0.5, -0.3)
scene.add(model);
resolve();
},
undefined,
(error) => reject(error)
);
// Retro Screen
// 法语: paramètres recalculés après changement d’échelle et de position
// 中文: 按新缩放与模型位置重算后的参数
ShabbatTV(scene, {
video_id: "exodus2",
source_id: "bible2",
start: 12,
width: 2040, // 170 * 12
height: 1500, // 125 * 12
position: [484, 114, -888], // (-500, -6666, -900) + (82,565,1)*12
rotation: [0.2, Math.PI, 0], // 法语: inchangé | 中文: 保持不变
material: function(texture){
return new THREE.MeshBasicMaterial({
color: 0xE0EBDF,
map: texture,
side: THREE.FrontSide,
});
},
});
happy = true;
}); // The Click Handler
})
}; // ...rabbit_hole
// Load the iOffice and iKitty board first
Promise.all([
new Promise((resolve, reject) => {
new GLTFLoader().load(
"https://thepiratecircus.com/Woodstock/City17/iOffice.glb",
(gltf) => {
const model = gltf.scene;
const scale = 5;
model.scale.set( scale, scale, scale );
model.rotation.y = Math.PI / 2;
model.position.set(2.5, -5.2, -0.8);
scene.add(model);
PravdaTV(scene, OfficePaintings, OfficeFrames);
resolve(model);
},
undefined,
(error) => reject(error)
);
}),
new Promise((resolve, reject) => {
new GLTFLoader().load(
"https://thepiratecircus.com/Woodstock/City17/iKitty.glb",
(gltf) => {
const model = gltf.scene;
model.position.set(0, 0, 0);
model.rotation.y = Math.PI / 2 + Math.PI/4;
scene.add(model);
resolve(model);
},
undefined,
(error) => reject(error)
);
})
]).then(([iOffice, iKitty]) => {
rabbit_hole("🐇").then(() => {
let model, scale;
model = iKitty.clone();
scale = 55;
model.rotation.y = 0;
model.scale.set( scale, scale, scale );
model.position.set(10, 20, 0);
scene.add(model);
model = iOffice.clone();
scale = 200;
model.scale.set( scale, scale, scale );
model.position.set(5, -140, 380);
scene.add(model);
// Load Retro PC
(new GLTFLoader()).load(
"https://thepiratecircus.com/Woodstock/City17/i386.glb",
function (gltf) {
let model = gltf.scene;
const scale = 6000;
model.scale.set( scale, scale, scale );
model.position.set(-500, -6666, -900)
scene.add(model);
});
})
}).catch((error) => {
console.error("Loading failed:", error);
});
function OpenTELEPORT() {
let demo;
let callback;
if (ELEVENLABS_CONVERSATION_ID) {
// === Black Box Magic ===
// 法语: l’URL de base est injectée par Liquid lors du rendu
// 中文: 基础 URL 在 Liquid 渲染时注入
let black_box = "{{ markdown.yaml.BlackBOX | default: 'https://moses.lamourism.com/%D0%A1%D1%83%D0%BD%D0%B4%D1%83%D0%BA-%D0%A1%D0%BE%D0%BA%D1%80%D0%BE%D0%B2%D0%B8%D1%89/' }}";
// 法语: sécurité: s’assurer du "/" final | 中文: 保险起见,确保末尾有 "/"
if (black_box && !black_box.endsWith('/')) black_box += '/';
// 法语: suffixe/clé métier que tu détermines côté JS | 中文: 由 JS 决定的后缀/业务键
let XXX = ELEVENLABS_CONVERSATION_ID;
// 法语: URL finale pour la ressource (non encodée) | 中文: 最终资源 URL(未编码)
let blackbox_item = black_box + XXX + ".mp3";
demo = "{{ markdown.yaml.Next }}";
demo = `${demo}?jukebox=${encodeURIComponent(blackbox_item)}`
// IEL: Add Static Portal in Between
// 法语: callback complet — on encode seulement blackbox_item côté JS | 中文: 完整回调,仅对 blackbox_item 在 JS 侧编码
callback = `https://diana.lamourism.com/?debug=${demo}&sleep=30111`;
} else {
// Something doesn't work... But you got the idea.
demo = "https://www.vs-consulting-company.com/"
callback = `https://love.lamourism.com/?debug=${demo}`;
}
window.location.href = callback;
}
function CheckTELEPORT() {
const x = camera.position.x,
y = camera.position.y,
z = camera.position.z;
// 法语: vérifier si chaque coordonnée est dans [0,1000]
// 中文: 检查每个坐标是否在 [0,1000] 范围内
const inRange = (x >= -500 && x <= 666) &&
(y >= -999 && y <= 555) &&
(z >= -666 && z <= 999);
if (!inRange) {
// Let's go a little bit deeper this time.
OpenTELEPORT()
}
}
let prevCameraPosition = new THREE.Vector3();
let cameraStopped = true;
function checkCameraMovement() {
// Check if the current camera position is the same as the previous one
if (camera.position.equals(prevCameraPosition)) {
if (cameraStopped)
return;
cameraStopped = true;
CheckTELEPORT();
console.log("XYZ", camera.position, camera.rotation);
} else {
// Update the previous camera position
prevCameraPosition.copy(camera.position);
cameraStopped = false;
}
}
// Start animation
const FLOOR_IS_LAVA = -111999;
function animate() {
requestAnimationFrame(animate);
if (camera.position.y < FLOOR_IS_LAVA) {
camera.position.y = FLOOR_IS_LAVA;
}
checkCameraMovement();
renderer.render(scene, camera);
}
animate();
}
document.addEventListener("DOMContentLoaded", gogogo);
</script>
<script>
console.pray(`
Не выходи из матрицы, не совершай ошибку.
Зачем тебе Солнце, если ты куришь Шипку?
За дверью бессмысленно всё, особенно — возглас счастья.
Только в уборную — и сразу же возвращайся.
О, не выходи из матрицы, не вызывай мотора.
Потому что пространство сделано из коридора
и кончается счетчиком. А если войдет живая
милка, пасть разевая, выгони не раздевая.
Не выходи из матрицы; считай, что тебя продуло.
Что интересней на свете стены и стула?
Зачем выходить оттуда, куда вернешься вечером
таким же, каким ты был, тем более — изувеченным?
О, не выходи из матрицы. Танцуй, поймав, боссанову
в пальто на голое тело, в туфлях на босу ногу.
В прихожей пахнет капустой и мазью лыжной.
Ты написал много букв; еще одна будет лишней.
Не выходи из матрицы. О, пускай только комната
догадывается, как ты выглядишь. И вообще инкогнито
эрго сум, как заметила форме в сердцах субстанция.
Не выходи из матрицы! На улице, чай, не Франция.
Не будь дураком! Будь тем, чем другие не были.
Не выходи из матрицы! То есть дай волю мебели,
слейся лицом с обоями. Запрись и забаррикадируйся
шкафом от хроноса, космоса, эроса, расы, вируса.
{{ markdown.RAW | replace: "`", "\`" }}
`);
</script>
</div>
<elevenlabs-convai
agent-id="agent_6501k62rb36yfrsrc7rqahq19q4p"
{% if markdown.yaml.AI_WELCOME_MESSAGE %}
override-first-message="{{ markdown.yaml.AI_WELCOME_MESSAGE | escape }}"
override-prompt="{{ markdown.TEXT | escape }}"
{% endif %}
{% if markdown.yaml.AI_VOICE_ID %}
override-voice-id="{{ markdown.yaml.AI_VOICE_ID }}"
{% endif %}
></elevenlabs-convai>
<script src="https://unpkg.com/@elevenlabs/convai-widget-embed" async type="text/javascript"></script>
</body>
</html>
body {
margin: 0;
overflow: hidden;
}
/* Noise Animation: https://codepen.io/jmmpoy/pen/NWGVZKg */
@keyframes noiseAnimation {
0% {
background-position: 0;
}
10% {
background-position: -5% -5%;
}
20% {
background-position: -10% 5%;
}
30% {
background-position: 5% -10%;
}
40% {
background-position: -5% 15%;
}
50% {
background-position: -10% 5%;
}
60% {
background-position: 15%;
}
70% {
background-position: 10%;
}
80% {
background-position: -15%;
}
90% {
background-position: 10% 5%;
}
to {
background-position: 5%;
}
}
body:after {
content: "";
pointer-events: none;
will-change: transform;
animation: noiseAnimation 0.5s steps(2) infinite;
opacity: 1;
background: url("https://uploads-ssl.webflow.com/5cb7be195426f23752acf2dc/5d14bac7c4ad42ee4c94840f_noise_small.png");
width: 200vw;
height: 200%;
display: block;
position: fixed;
top: -50%;
left: -50%;
}
#sky {
position: absolute;
top: 69px;
left: 42px;
right: 42px;
bottom: 69px;
text-align: center;
font-size: 42px;
display: flex;
align-items: center; /* Vertically center the content */
justify-content: center; /* Horizontally center the content (if needed) */
}
body{
margin: 0;
overflow: hidden;
font-family: Ubuntu, "times new roman", times, roman, serif;
}
a.magic, a.supermagic {
text-decoration: none;
}
.magic {
font-weight: bold;
background: -webkit-linear-gradient(45deg, #9e26dd, #fe6c03);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
.supermagic {
font-weight: bold;
background: -webkit-linear-gradient(45deg, #fe6c03, #9e26dd);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
canvas {
display: block;
}
.odoo {
cursor: none;
}
.odoo, .bible{
width:100%;
height:100%;
position: absolute;
top:0;
bottom:0;
left:0;
right:0;
}
.bible>video {
position: relative;
left: 50%;
transform: translateX(-50%);
}
.experience {
position: absolute;
top:0;
bottom:0;
left:0;
right:0;
font-size: 2rem;
}
.experience:after{
content: "";
background-image: url('https://upload.wikimedia.org/wikipedia/commons/thumb/e/ec/Karl_Brullov_-_The_Last_Day_of_Pompeii_-_Google_Art_Project.jpg/2560px-Karl_Brullov_-_The_Last_Day_of_Pompeii_-_Google_Art_Project.jpg');
background-size: auto 100%;
background-position: center center;
opacity: 0.2;
top: 0;
left: 0;
bottom: 0;
right: 0;
position: absolute;
z-index: -1;
}
.container {
padding-right: 15px;
padding-left: 15px;
margin-right: auto;
margin-left: auto;
}
@media (min-width: 768px) {
.container {
width: 750px;
}
}
@media (min-width: 992px) {
.container {
width: 970px;
}
}
@media (min-width: 1200px) {
.container {
width: 1170px;
}
}
/* Image border */
img {
box-shadow:5px 5px 10px #333;
transition-duration:1000ms;
}
img:hover, img:active, img.nomagic {
transition-duration: 1000ms;
box-shadow:0px 0px 0px white;
}
/* Rainbow: https://w3bits.com/rainbow-text/ */
.LGBTQ-plus {
background-image: linear-gradient(to right, green, yellow, orange, red);
-webkit-background-clip: text;
color: transparent;
}
a.nomagic {
text-decoration:none;
}
a.nomagic:hover {
cursor:none;
}
#supermagic, #SuperMAGICSuper {
cursor: pointer;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>{{ markdown.yaml.Title }}</title>
<link rel="icon" type="image/png" href="https://jesus.lamourism.com/favicon.ico"/>
<link rel="icon" type="image/x-icon" href="https://bucha.lamourism.com/assets/favicon.ico" />
<link rel="apple-touch-icon" sizes="180x180" href="https://bucha.lamourism.com/assets/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://bucha.lamourism.com/assets/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="https://bucha.lamourism.com/assets/favicon-16x16.png">
<meta property="og:title" content="Whatever you think it is, it's not" />
<meta property="og:image" content="https://moses.lamourism.com/mossad/durov.jpg?debug=%F0%9F%87%B5%F0%9F%87%B8">
<meta property="og:image:type" content="image/png">
<link rel="stylesheet" href="https://diana.lamourism.com/yelizariev/afc9c2caf5937661d57712598d8898c3/XXX/Eva.css" />
<script type="importmap">
{
"imports": {
"magic": "https://python.lamourism.com/yelizariev/afc9c2caf5937661d57712598d8898c3/v7/Adam.js",
"three": "https://unpkg.com/[email protected]/build/three.module.js",
"three/addons/": "https://unpkg.com/[email protected]/examples/jsm/"
}
}
</script>
</head><!--
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢲⣾⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⠆
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣿⡿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⠏
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢘⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⡿⣿⠃
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⠼⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⢳⢰⡇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣿⣢⢹⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⣏⠲⣹⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣤⣄⣤⡴⠖⠃
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠜⢧⢣⠎⠷⣄⠀⠀⠀⠀⠀⠀⠀⢧⢣⡙⢧⡀⠀⠀⠀⠀⠀⠀⠀⣠⣾⠛⣭⠶⠛⠉
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡽⢧⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠳⣎⢣⠺⡽⣆⠀⠀⠀⠀⠀⢸⠇⡜⡩⣷⠀⠀⠀⠀⠀⠀⣴⢇⣺⡏⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⢿⡘⢳⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⡷⡑⢦⣿⠀⠀⠀⠀⡴⡫⠜⡰⣧⠏⠀⠀⠀⠀⠀⢸⢋⠦⣽⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠈⣿⣶⢨⡍⠛⠛⢻⣦⡄⠀⠀⠀⠀⣿⢣⠑⣦⠘⣦⠀⠀⣼⢱⠉⡎⣵⡏⠀⠀⠀⠀⠀⢠⣾⠉⡖⣿
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠶⢭⣜⣢⢃⠏⠻⣄⠀⠀⠀⣿⠎⡑⢆⠣⢍⠟⡭⠓⡌⠳⡘⢤⠳⣄⣀⢠⡴⢾⠛⠭⣘⣴⡏
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠱⣧⢊⡵⢊⠷⡴⣺⠹⢌⣙⣬⠵⠮⠖⠛⠛⠚⠓⠧⠮⣖⣩⢩⣉⢆⠧⣙⣲⡾⠋⠀⠀⠀⠀⠀⠀⠀⢀⣤⣤⣤⣤⣄⣀
⠀⠀⠀⢢⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢳⣌⢲⠩⡜⢡⢆⡷⠋⠁⠀⠀⢀⣀⡤⡤⠤⣄⣀⠀⠀⠉⠙⠲⣎⡲⢱⣏⠀⠀⠀⠀⠀⠀⠀⣰⣞⢫⣳⡬⠖⠒⠚⠛⠛⠒
⠀⠀⠀⠀⠙⣿⣦⡀⠀⠀⠀⠀⣀⣠⣀⣄⣀⠀⠀⠀⠀⣿⠆⣇⠣⣥⠞⠀⢀⣠⢴⠺⢹⣈⠒⡍⡚⣌⡺⢩⠳⠦⣄⠀⠈⠱⢧⢊⠷⣠⣤⢴⠤⡤⢾⡑⢬⣶⠏
⠀⠀⠀⠀⠀⠘⢶⣭⣓⠶⠶⠿⠿⣋⠼⡑⣊⠗⣦⣤⠞⢣⠚⣴⠋⠁⣠⡔⡏⢎⢆⡣⠗⠒⠛⠚⠋⠉⠙⠧⣏⡜⣈⠳⡄⠀⠈⢳⡘⠴⡠⢎⡒⢥⢒⣬⠟⠃
⠀⠀⠀⠀⠀⠀⠀⠉⠓⠿⠬⠧⠶⠭⠶⣗⢍⡚⠴⣨⠙⡆⣿⠃⠀⣰⢋⠴⣩⠞⠁⠀⣠⣤⡤⠴⡴⣤⣄⡀⠈⠙⢆⡝⢜⢦⠀⠀⢻⡢⡑⣮⠼⠖⠛⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⢽⣣⠜⡱⠰⡿⠀⠀⡏⡎⢼⡏⠀⢀⡾⢃⣶⠾⠷⢦⣑⠦⡙⣷⡀⠈⣏⡜⡸⣧⠀⠀⢷⣹⡇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣇⠱⢳⡇⠀⢸⠧⣙⢼⡇⠀⢸⢳⣹⠃⠀⢀⠀⠈⢳⡜⣸⡇⠀⢸⡜⡡⢻⡄⠀⢸⢫⢓⡦⣤⡀⠀⠀⠀⢀⣀⣀⣤⣀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣤⢤⢤⣤⡞⢣⢍⢻⡇⠀⢸⡆⢡⢺⡇⠀⢸⡇⡜⢦⣤⣾⡇⠀⠀⣟⢼⡇⠀⢸⡧⡑⣻⡇⠀⣸⢃⠎⡴⢡⢛⠳⡶⡿⢟⡩⢩⣱⣎⡻⣦⣄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⡞⢥⠱⣈⠖⣢⠜⡥⢊⢼⡇⠀⠈⣇⢣⠎⣧⠀⠀⠻⣞⣰⣍⡿⠏⠀⢠⣟⣾⡇⠀⢸⠇⡥⣿⠀⠀⡏⣎⣼⣐⣣⠎⡱⣑⣴⡺⠞⠏⠉⠈⠉⠳⢭⣦⡀
⠐⠒⠲⢴⣦⣤⣄⣀⣠⣴⠛⡥⢋⣶⠕⠷⢮⣴⣭⣴⡋⠼⣷⡀⠀⠙⣧⡙⢸⢧⣀⣀⠀⠀⠀⠀⣠⡴⠯⣱⡞⠀⢀⡾⣱⣸⠃⠀⣸⣙⣼⠁⠀⠈⠙⠛⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠒
⠀⠀⠀⠀⠈⠙⠿⠯⣭⣦⠽⠞⠋⠀⠀⠀⠀⠀⠀⠈⢿⡖⢤⠻⣦⡀⠈⠻⣆⠦⣩⢉⡍⢫⡝⣩⠱⣘⡵⠋⠀⢠⡞⡱⣱⠏⠀⢀⡷⠌⣷⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⡾⡘⢤⠓⡬⡕⢤⡀⠈⠙⠒⠧⠮⠥⠼⠴⠛⠉⠀⣠⠴⣫⠰⣣⠏⠀⢀⣾⡱⣉⠼⡹⣆
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡞⢫⠱⢨⡑⢎⡑⢦⠙⣌⠻⠶⣤⣄⣀⣠⣄⣀⣠⡤⠶⡛⢭⠚⣀⡷⠋⠀⣠⡿⠿⠶⣥⢢⠑⣌⠻⡖⠶⢶⢤⣀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡟⡌⢣⣓⡦⠾⠞⠋⠙⢷⣌⢣⠓⡔⢢⠆⡱⢘⣦⣽⣴⣥⢷⠼⠛⠉⠀⣠⢾⣯⠀⠀⠀⠈⠳⣽⣢⢵⣼⣑⣮⣘⣭⣷⡄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡞⢢⡙⡼⠉⠀⠀⠀⠀⠀⢀⡿⣄⢋⡔⢃⣎⣥⠿⣥⣀⠀⠀⠀⠀⠀⠀⡞⢭⠡⢾⠀⠀⠀⠀⠀⠀⠉⠉⠀⠀⠈⠉⠙⣾⣻⡆
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⡞⣩⢣⡾⠃⠀⠀⠀⠀⠀⢠⡟⢣⠜⣢⣼⠟⠉⠘⡧⢡⢋⢻⣆⠀⠀⠀⠀⣿⣄⠳⡸⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠈⢿⣯⡄
⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣿⡿⣟⢧⣛⡤⠟⠀⠀⠀⠀⠀⠀⠀⣿⢸⢃⢼⡼⠃⠀⠀⢠⡇⠇⡼⣸⡟⠀⠀⠀⠀⢻⣿⡄⢣⢛⢧⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣇
⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠉⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⡡⢎⣾⠀⠀⠀⠀⢸⣏⠲⡹⣿⠁⠀⠀⠀⠀⠀⠑⠾⣧⡈⢦⠹⣳⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠛⠂
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣇⠎⣾⠄⠀⠀⠀⠠⠻⣖⠡⠻⣆⠀⠀⠀⠀⠀⠀⠀⠀⠉⠓⣧⣘⣯
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣏⣾⡟⠀⠀⠀⠀⠀⠀⠹⣎⡕⢺⡧⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣟⣿⠄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠶⣿⡮⠊⠀⠀⠀⠀⠀⠀⠀⠀⠘⣧⣻⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣿⡿
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡾⠿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡼⣿⡟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⡇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠧
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⡿⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⠋
--><body>
<script>
// y=0 is the table surface
// x=0, z=0 are chess board symmetry
const ANGELS = [{
"position": [7.5, 1.7, 1.3],
"target": [0, 0.3, 0],
},{
"position": [5.4, 1.0, 2.1],
"target": [0, 0.3, 0],
},{
"position": [-0.4, 1.7, 3.7],
"target": [0, 0.3, 0],
},{
"position": [1.6, 1.5, -1.7],
"target": [7.5, 0.6, 0.0],
}];
console.pray = function (text) {
const lines = text.split('\n'); // разбиваем текст на строки
let delay = 15000; // стартовая задержка 15 секунд (в миллисекундах)
lines.forEach((line, index) => {
const wordCount = line.trim().split(/\s+/).length;
setTimeout(() => {
console.log(line);
}, delay);
delay += wordCount * 100; // добавляем задержку для следующей строки
});
};
</script>
<div style="position:absolute; top:0; left;0; right:0; bottom: 0; z-index:-1;">
<!-- Painting -->
<img id="office1" style="display:none" crossorigin="anonymous"/>
<img id="office2" style="display:none" crossorigin="anonymous"/>
<script type="module">
import * as THREE from 'three';
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
import {ShabbatTV, PravdaTV, AngelTV} from "magic";
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
// init
const urlParams = new URLSearchParams(window.location.search);
// Create a scene
const scene = new THREE.Scene();
// Create a camera
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 9000);
// Create a renderer
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
// Create controls
const controls = new OrbitControls( camera, renderer.domElement );
function gogogo() {
/* And God said,
— Let there be light,
and there was light. God saw that
the light was good, and he separated the light from the
darkness. God called the light 'day' and the darkness he
called 'night'. And there was evening, and there was
morning the first day.
*/
scene.background = new THREE.Color( 0x178587 );
/* And God said,
— Let there be a vault between the waters to separate water from
water.
So God made the vault and separated the water under the
vault from the water above it. And it was so. God called the
vault 'sky.' And there was evening, and there was morning—the
second day.
*/
const light = new THREE.AmbientLight( 0xFFFFFF );
scene.add( light );
/* Then God said,
— Let the land produce vegetation: seed-bearing plants and trees
on the land that bear fruit with seed in it, according to their
various kinds.”
And it was so. The land produced vegetation: plants bearing seed
according to their kinds and trees bearing fruit with seed in it
according to their kinds.
And God saw that it was good. And there was evening, and there
was morning—the third day.
*/
let alice = parseInt(ANGELS.length * Math.random());
AngelTV(ANGELS, alice, camera, controls);
const animations = [];
function rabbit_hole(alice){
let happy = false;
return new Promise((resolve, reject) => {
document.addEventListener("click", function(){
if (happy) {
return;
}
const audio = document.getElementById("music");
audio.play().catch(err => console.log("Autoplay blocked:", err));
playDebugAudio();
// Load the iKitty
(new GLTFLoader()).load(
"https://thepiratecircus.com/Woodstock/City17/iKitty.glb",
function (gltf) {
let model = gltf.scene;
const scale = 0.15;
model.scale.set( scale, scale, scale );
model.rotation.y = -Math.PI/2 - Math.PI/4;
model.position.set(7.3, 0.47, 0.3)
scene.add(model);
resolve();
},
undefined,
(error) => reject(error)
);
happy = true;
}); // The Click Handler
})
}; // ...rabbit_hole
// Load the iBeach and iBedroom first
Promise.all([
new Promise((resolve, reject) => {
new GLTFLoader().load(
"https://thepiratecircus.com/Woodstock/City17/iBeach.glb",
(gltf) => {
const model = gltf.scene;
const scale = 5;
model.scale.set( scale, scale, scale );
model.rotation.y = 1.5 * Math.PI;
model.position.set(4.6, -0.7, -1.5);
scene.add(model);
resolve(model);
},
undefined,
(error) => reject(error)
);
}),
new Promise((resolve, reject) => {
new GLTFLoader().load(
"https://thepiratecircus.com/Woodstock/City17/iBedroom.glb",
(gltf) => {
const model = gltf.scene;
model.position.set(4.75, -0.47, -1.33);
//model.rotation.y = Math.PI / 2 + Math.PI/4;
scene.add(model);
resolve(model);
if (gltf.animations && gltf.animations.length > 0) {
const mixer = new THREE.AnimationMixer(model);
gltf.animations.forEach((clip) => {
const action = mixer.clipAction(clip);
action.play(); // 法语: démarrer l’action | 中文: 启动动画
});
animations.push(mixer);
}
},
undefined,
(error) => reject(error)
);
})
]).then(([iBeach, iBedroom]) => {
rabbit_hole("🐇").then(() => {
console.log("Пацаны вообще ребята! Классно! Умеете! Могёте просто!");
})
}).catch((error) => {
console.error("Loading failed:", error);
});
{% assign escaped_param = markdown.yaml.Next | url_encode %}
{% assign callback = "https://love.lamourism.com/?id=😍&debug=" | append: escaped_param %}
function CheckTELEPORT() {
const x = camera.position.x,
y = camera.position.y,
z = camera.position.z;
const inRange = (x >= -12 && x <= 12) &&
(y >= -12 && y <= 12) &&
(z >= -12 && z <= 12);
if (!inRange) {
// Let's go a little bit deeper this time.
window.location.href = "{{ callback }}";
}
}
let prevCameraPosition = new THREE.Vector3();
let cameraStopped = true;
function checkCameraMovement() {
// Check if the current camera position is the same as the previous one
if (camera.position.equals(prevCameraPosition)) {
if (cameraStopped)
return;
cameraStopped = true;
CheckTELEPORT();
console.log("XYZ", camera.position, camera.rotation);
} else {
// Update the previous camera position
prevCameraPosition.copy(camera.position);
cameraStopped = false;
}
}
// 法语: clock global pour toutes les animations | 中文: 全局时钟
const clock = new THREE.Clock();
// Start animation
const FLOOR_IS_LAVA = -0.33;
function animate() {
requestAnimationFrame(animate);
if (camera.position.y < FLOOR_IS_LAVA) {
camera.position.y = FLOOR_IS_LAVA;
}
checkCameraMovement();
const delta = clock.getDelta();
// 法语: mettre à jour tous les mixers | 中文: 更新所有动画控制器
animations.forEach((mixer) => mixer.update(delta));
renderer.render(scene, camera);
}
animate();
}
document.addEventListener("DOMContentLoaded", gogogo);
</script>
<audio id="music" autoplay loop crossorigin="anonymous" style="display:none">
<source src="https://moses.lamourism.com/radio/mishary-rashid-alafasy-128-muslimcentral.com.mp3" type="audio/mpeg">
</audio>
<script>
const audio = document.getElementById("music");
// When metadata is ready, set a random start
audio.addEventListener("loadedmetadata", () => {
const duration = audio.duration; // in seconds
// If browser can't read duration (e.g. live streams), fallback to 3600s (1h)
const length = isFinite(duration) ? duration : 3600;
audio.currentTime = Math.random() * length;
});
console.pray(`
Не выходи из матрицы, не совершай ошибку.
Зачем тебе Солнце, если ты куришь Шипку?
За дверью бессмысленно всё, особенно — возглас счастья.
Только в уборную — и сразу же возвращайся.
О, не выходи из матрицы, не вызывай мотора.
Потому что пространство сделано из коридора
и кончается счетчиком. А если войдет живая
милка, пасть разевая, выгони не раздевая.
Не выходи из матрицы; считай, что тебя продуло.
Что интересней на свете стены и стула?
Зачем выходить оттуда, куда вернешься вечером
таким же, каким ты был, тем более — изувеченным?
О, не выходи из матрицы. Танцуй, поймав, боссанову
в пальто на голое тело, в туфлях на босу ногу.
В прихожей пахнет капустой и мазью лыжной.
Ты написал много букв; еще одна будет лишней.
Не выходи из матрицы. О, пускай только комната
догадывается, как ты выглядишь. И вообще инкогнито
эрго сум, как заметила форме в сердцах субстанция.
Не выходи из матрицы! На улице, чай, не Франция.
Не будь дураком! Будь тем, чем другие не были.
Не выходи из матрицы! То есть дай волю мебели,
слейся лицом с обоями. Запрись и забаррикадируйся
шкафом от хроноса, космоса, эроса, расы, вируса.
{{ markdown.RAW | replace: "`", "\`" }}
`);
// 法语: fonction qui lit un fichier audio depuis le paramètre "debug" de l’URL
// 中文: 从 URL 参数 "debug" 播放音频文件的函数
function playDebugAudio() {
// 法语: récupérer l’URL courante | 中文: 获取当前 URL
const urlParams = new URLSearchParams(window.location.search);
const audioUrl = urlParams.get("jukebox");
if (!audioUrl) {
console.warn("⚠️ Paramètre 'debug' introuvable");
return;
}
// 法语: créer un objet Audio et jouer | 中文: 创建 Audio 对象并播放
const audio = new Audio(audioUrl);
audio.addEventListener("ended", () => {
window.location.href = "{{ callback }}";
});
audio.play()
.then(() => {
console.log("Lecture démarrée 🎵 / 播放开始");
})
.catch(err => console.error("Erreur de lecture / 播放错误:", err));
}
</script>
</div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>❤️ ❤️ ❤️</title>
<link rel="icon" type="image/x-icon" href="https://bucha.lamourism.com/assets/favicon.ico" />
<link rel="apple-touch-icon" sizes="180x180" href="https://bucha.lamourism.com/assets/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://bucha.lamourism.com/assets/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="https://bucha.lamourism.com/assets/favicon-16x16.png">
<meta property="og:title" content="Whatever you think it is, it's not" />
<meta property="og:image" content="https://gist.github.com/user-attachments/assets/c64786b8-a32f-4dde-ab08-26cd9fad963a">
<meta property="og:image:type" content="image/png">
<style>
html, body {
height: 100%;
margin: 0;
}
body {
background: #2c2c54;
display: grid;
place-items: center;
}
svg {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
</style>
</head>
<body>
<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid slice" role="img" viewBox="0 0 300 300"></svg>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/gsap.min.js"></script>
<script>
function next() {
const urlParams = new URLSearchParams(window.location.search);
const witch = urlParams.get("debug") || "https://www.voiceforlanding.com/";
window.location.href = witch;
}
document.addEventListener("click", next, false);
setTimeout(next, 5000);
</script>
<script>
(function() {
const svg = document.querySelector("svg");
const settings = {
animation: {
duration: 7.5,
circleCount: 10,
heartCount: 8
},
circle: {
x: 150,
y: 150,
r: 150
},
};
let layers = [];
draw();
animate();
function draw() {
for(let i = 0; i <= settings.animation.circleCount; i++) {
let layer = document.createElementNS("http://www.w3.org/2000/svg", "g");
let circle = document.createElementNS("http://www.w3.org/2000/svg", "circle");
circle.setAttribute("cx", settings.circle.x);
circle.setAttribute("cy", settings.circle.y);
circle.setAttribute("r", settings.circle.r);
svg.append(layer);
layer.append(circle);
const length = circle.getTotalLength();
const lengthDelta = length / settings.animation.heartCount;
let hearts = [];
let offset = lengthDelta * (i % 2) / 2;
for(let j = 0; j < settings.animation.heartCount; j++) {
let point = circle.getPointAtLength(offset + lengthDelta * j);
let heart = document.createElementNS("http://www.w3.org/2000/svg", "path");
heart.setAttribute("d", `M ${point.x - 40},${point.y - 20} a 10,-10 0,0,1 40,0 a 10,-10 0,0,1 40,0 q 0,30 -40,60 q -40,-30 -40,-60 z`);
hearts.push(heart);
layer.append(heart);
}
layers.push({ group: layer, circle: circle, hearts: hearts });
}
}
function animate() {
let tl = gsap.timeline();
layers.forEach((layer, i) => {
let direction = i % 2 ? 1 : -1;
gsap.set([layer.group, ...layer.hearts], { transformOrigin: "50% 50%", scale: 0 });
gsap.set([...layer.hearts], { fill: "#ff5252" });
gsap.set(layer.circle, { strokeWidth: 0, stroke: "#40407a", fill: "none" });
tl.to(layer.group, {
duration: settings.animation.duration,
scale: Math.SQRT2,
delay: -settings.animation.duration / settings.animation.circleCount,
repeat: -1,
ease: "Power3.easeIn",
}, "<");
tl.to(layer.circle, {
duration: settings.animation.duration,
strokeWidth: 30,
repeat: -1,
ease: "Power3.easeOut",
}, "<");
tl.to([...layer.hearts], {
keyframes: [
{ scale: 1, rotation: 360 * direction, duration: settings.animation.duration / 2, fill: "#ff5252" },
{ scale: 0, rotation: 720 * direction, duration: settings.animation.duration / 2, fill: "#ffda79" }
],
ease: "linear",
repeat: -1
}, "<");
});
}
}());
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>{{ markdown.yaml.Title }}</title>
<meta property="og:title" content="{{ markdown.yaml.Title }}" />
<meta property="og:image" content="https://odooism.com/matrix.jpg">
<meta property="og:image:type" content="image/jpeg">
<link rel="icon" type="image/png" href="https://jesus.lamourism.com/favicon.ico"/>
<script src="https://lamourism.com/Zion/Neo.js?debug=🇵🇸"></script>
<style> body {
margin: 0;
overflow: hidden;
}
</style>
<script type="importmap">
{
"imports": {
"three": "https://unpkg.com/[email protected]/build/three.module.js",
"three/addons/": "https://unpkg.com/[email protected]/examples/jsm/"
}
}
</script>
</head>
<body>
<script>
/* Слово предоставляется Адаму: */
FreePALESTINE = true;
console.sx = function (text) {
const lines = text.split('\n'); // разбиваем текст на строки
let delay = 15000; // стартовая задержка 15 секунд (в миллисекундах)
lines.forEach((line, index) => {
const wordCount = line.trim().split(/\s+/).length;
setTimeout(() => {
console.log(line);
}, delay);
delay += wordCount * 100; // добавляем задержку для следующей строки
});
};
console.sx(`{{ markdown.RAW }}`);
</script>
<div style="position:absolute; top:0; left;0; right:0; bottom: 0; z-index:-1;">
<video id="exodus0" loop crossOrigin="anonymous" playsinline style="display:none">
<source id="bible0" src="https://itpp.dev/test/lava.fixed.mp4" type="video/mp4">
</video>
<img id="Reminiscence0" style="display:none" crossorigin="anonymous" src="{{ markdown.yaml.Image }}" />
<video id="exodus1" loop crossOrigin="anonymous" playsinline style="display:none">
<source id="bible1" src="https://itpp.dev/test/matrix-square.fixed.mp4" type="video/mp4">
</video>
<video id="exodus2" loop crossOrigin="anonymous" playsinline style="display:none">
<source id="bible2" src="https://itpp.dev/test/matrix-almost-square.fixed.mp4" type="video/mp4">
</video>
<img id="Reminiscence3" style="display:none" crossorigin="anonymous"/>
<img id="Reminiscence4" style="display:none" crossorigin="anonymous"/>
<img id="Narnia" style="display:none" crossorigin="anonymous"/>
<img id="Narnia0" style="display:none" crossorigin="anonymous"/>
<img id="Narnia1" style="display:none" crossorigin="anonymous"/>
<img id="Narnia2" style="display:none" crossorigin="anonymous"/>
<img id="Narnia4" style="display:none" crossorigin="anonymous"/>
<img id="STICKER" style="display:none" crossorigin="anonymous"/>
<video id="teremok" loop crossOrigin="anonymous" playsinline style="display:none">
<source id="skazka" src="{{ markdown.yaml.WindowTV }}" type="video/mp4">
</video>
<video id="moon" loop crossOrigin="anonymous" playsinline style="display:none">
<source id="USA" src="{{ markdown.yaml.DreamTV }}" type="video/mp4">
</video>
<video id="KOLOBOK" loop crossOrigin="anonymous" playsinline style="display:none">
<source id="KIEV" src="{{ markdown.yaml.DreamTV }}" type="video/mp4">
</video>
<video id="matr" loop crossOrigin="anonymous" playsinline style="display:none">
<source id="skazka" src="{{ markdown.yaml.WindowTV }}" type="video/mp4">
</video>
<script type="module">
import * as THREE from 'three';
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
import {ShabbatTV, PravdaTV, MosesTV, DebugTV} from "https://gist.odooism.com/yelizariev/afc9c2caf5937661d57712598d8898c3/v3/Abraham.js?debug=assets.exe";
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
// init
FreePALESTINE = true;
const GLTF = "https://thepiratecircus.com/Woodstock/Brodsky/scene.gltf";
const urlParams = new URLSearchParams(window.location.search);
const MEDIA = {
"Narnia": [
"https://perestroika-2.com/images/witches.jpg",
"https://moses.lamourism.com/mossad/palestine.jpg",
"https://moses.lamourism.com/mossad/liberty.jpg",
"https://moses.lamourism.com/mossad/liberty.jpg",
"https://moses.lamourism.com/mossad/liberty.jpg"
],
"Reminiscence": [
"{{ markdown.yaml.Image }}",
"https://proxy.lamourism.com/user-attachments/assets/0aab551a-0138-4407-af94-03aa43aac6eb",
"https://proxy.lamourism.com/user-attachments/assets/0aab551a-0138-4407-af94-03aa43aac6eb",
],
};
// Create a scene
const scene = new THREE.Scene();
// Create a camera
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 2000);
// Create a renderer
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
// Create controls
const controls = new OrbitControls( camera, renderer.domElement );
function gogogo() {
scene.background = new THREE.Color( 0xf6eedc );
// Load the GLTF model
const loader = new GLTFLoader();
loader.load(
GLTF,
function (gltf) {
// Finish initialization
scene.add(gltf.scene);
// Display images
PravdaTV(scene, MEDIA);
// Load Domik
MosesTV(scene);
// Debug or not Debug
if (urlParams.get("debug") === "assets") {
//camera.position.set(-0.875, 1.282, 2.777);
//camera.position.set(0.702, 1.720, 2.580);
camera.position.set(0.751, 1.7788, 2.906090);
DebugTV(scene, MEDIA);
controls.target = new THREE.Vector3(0.069, 0.96, -1.69);
controls.update();
} else {
camera.position.set(1.64, 1.44, 0.91);
controls.target = new THREE.Vector3(0.76, 1.42, 0.1);
controls.update();
}
},
undefined,
function (error) {
console.error(error);
}
);
/* Track camera moves
{% assign escaped_param = markdown.yaml.Next | url_encode %}
{% assign callback = "https://python.lamourism.com/?virus=trojan.exe&debug=" | append: escaped_param %}
*/
const callback = "{{ callback }}";
function CheckTELEPORT() {
const x = camera.position.x, y = camera.position.y, z = camera.position.z
if (x*x + y*y + z*z > 1000) {
window.location.href = callback;
}
}
let prevCameraPosition = new THREE.Vector3();
let cameraStopped = true;
function checkCameraMovement() {
// Check if the current camera position is the same as the previous one
if (camera.position.equals(prevCameraPosition)) {
if (cameraStopped)
return;
cameraStopped = true;
if (callback) {
CheckTELEPORT();
}
console.log("XYZ", camera.position, camera.rotation);
} else {
// Update the previous camera position
prevCameraPosition.copy(camera.position);
cameraStopped = false;
}
}
// Start animation
const FLOOR_IS_LAVA = 0;
function animate() {
requestAnimationFrame(animate);
if (camera.position.y < FLOOR_IS_LAVA) {
camera.position.y = FLOOR_IS_LAVA;
}
checkCameraMovement();
renderer.render(scene, camera);
}
animate();
}
document.addEventListener("DOMContentLoaded", gogogo);
let happy = false;
document.addEventListener("click", function(){
if (happy) {
return;
}
// Activate Window
ShabbatTV(scene, {
"video_id": "teremok",
"source_id": "skazka",
"height": 1.6,
"width": 1.35,
"position": [0, 1.87, -2.30],
"rotation": {
"x": 0,
"y": 0,
},
"material": function(texture){
return new THREE.MeshBasicMaterial({
map: texture,
side: THREE.FrontSide,
});
},
})
// Activate Matrix Monitors
ShabbatTV(scene, {
"video_id": "exodus1",
"source_id": "bible1",
"width": 0.45,
"height": 0.46,
"position": [2.333, 1.695, -0.68],
"rotation": {
"x": 0,
"y": -Math.PI / 2,
},
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xa68d6f,
map: texture,
side: THREE.FrontSide,
});
},
});
ShabbatTV(scene, {
"video_id": "exodus2",
"source_id": "bible2",
"width": 0.7,
"height": 0.56,
"position": [2.333, 1.89, 0.55],
"rotation": {
"x": 0,
"y": -Math.PI / 2,
},
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0x82715e,
map: texture,
side: THREE.FrontSide,
});
},
});
// Activate Window
ShabbatTV(scene, {
"video_id": "exodus0",
"source_id": "bible0",
"height": 1.6,
"width": 1.35,
"position": [0, 1.87, -2.30],
"rotation": {
"x": 0,
"y": 0,
},
"material": function(texture){
return new THREE.MeshBasicMaterial({
map: texture,
side: THREE.FrontSide,
});
},
});
const debugValue = urlParams.get('debug');
if (debugValue === "assets") {
// Play the Device
ShabbatTV(scene, {
"video_id": "KOLOBOK",
"source_id": "KIEV",
"start": {{ markdown.yaml.DreamStart | default: 0 }},
"height": 0.06,
"width": 0.095,
"position": [0.0435, 0.955, -1.7854],
"rotation": {
"x": -Math.PI / 15.41,
"y": Math.PI / 21.1,
},
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0x33AA33,
map: texture,
side: THREE.FrontSide,
});
},
});
} else {
ShabbatTV(scene, {
"video_id": "moon",
"source_id": "USA",
"start": {{ markdown.yaml.DreamStart | default: 0 }},
"height": 1.2,
"width": 2.4,
"position": [1.6, 0.42, 0],
"rotation": {
"x": Math.PI / 2,
"y": 0,
"z": -Math.PI / 2,
},
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xFF1111,
transparent: true,
opacity: 0.3, // Adjust opacity for desired darkness
map: texture,
side: THREE.FrontSide,
});
},
})
}
happy = true;
});
</script>
<audio id="zodiak">
<source id="renaissance" type="audio/mpeg">
</audio>
</div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Strap in, we're blasting through hyperspace! </title>
<link rel="icon" type="image/png" href="https://jesus.lamourism.com/favicon.ico"/>
<link rel="icon" type="image/x-icon" href="https://bucha.lamourism.com/assets/favicon.ico" />
<link rel="apple-touch-icon" sizes="180x180" href="https://bucha.lamourism.com/assets/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://bucha.lamourism.com/assets/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="https://bucha.lamourism.com/assets/favicon-16x16.png">
<meta property="og:title" content="Whatever you think it is, it's not" />
<meta property="og:image" content="https://gist.github.com/user-attachments/assets/c64786b8-a32f-4dde-ab08-26cd9fad963a">
<meta property="og:image:type" content="image/png">
</head><!--
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢲⣾⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⠆
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣿⡿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⠏
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢘⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⡿⣿⠃
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⠼⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⢳⢰⡇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣿⣢⢹⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⣏⠲⣹⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣤⣄⣤⡴⠖⠃
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠜⢧⢣⠎⠷⣄⠀⠀⠀⠀⠀⠀⠀⢧⢣⡙⢧⡀⠀⠀⠀⠀⠀⠀⠀⣠⣾⠛⣭⠶⠛⠉
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡽⢧⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠳⣎⢣⠺⡽⣆⠀⠀⠀⠀⠀⢸⠇⡜⡩⣷⠀⠀⠀⠀⠀⠀⣴⢇⣺⡏⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⢿⡘⢳⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⡷⡑⢦⣿⠀⠀⠀⠀⡴⡫⠜⡰⣧⠏⠀⠀⠀⠀⠀⢸⢋⠦⣽⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠈⣿⣶⢨⡍⠛⠛⢻⣦⡄⠀⠀⠀⠀⣿⢣⠑⣦⠘⣦⠀⠀⣼⢱⠉⡎⣵⡏⠀⠀⠀⠀⠀⢠⣾⠉⡖⣿
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠶⢭⣜⣢⢃⠏⠻⣄⠀⠀⠀⣿⠎⡑⢆⠣⢍⠟⡭⠓⡌⠳⡘⢤⠳⣄⣀⢠⡴⢾⠛⠭⣘⣴⡏
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠱⣧⢊⡵⢊⠷⡴⣺⠹⢌⣙⣬⠵⠮⠖⠛⠛⠚⠓⠧⠮⣖⣩⢩⣉⢆⠧⣙⣲⡾⠋⠀⠀⠀⠀⠀⠀⠀⢀⣤⣤⣤⣤⣄⣀
⠀⠀⠀⢢⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢳⣌⢲⠩⡜⢡⢆⡷⠋⠁⠀⠀⢀⣀⡤⡤⠤⣄⣀⠀⠀⠉⠙⠲⣎⡲⢱⣏⠀⠀⠀⠀⠀⠀⠀⣰⣞⢫⣳⡬⠖⠒⠚⠛⠛⠒
⠀⠀⠀⠀⠙⣿⣦⡀⠀⠀⠀⠀⣀⣠⣀⣄⣀⠀⠀⠀⠀⣿⠆⣇⠣⣥⠞⠀⢀⣠⢴⠺⢹⣈⠒⡍⡚⣌⡺⢩⠳⠦⣄⠀⠈⠱⢧⢊⠷⣠⣤⢴⠤⡤⢾⡑⢬⣶⠏
⠀⠀⠀⠀⠀⠘⢶⣭⣓⠶⠶⠿⠿⣋⠼⡑⣊⠗⣦⣤⠞⢣⠚⣴⠋⠁⣠⡔⡏⢎⢆⡣⠗⠒⠛⠚⠋⠉⠙⠧⣏⡜⣈⠳⡄⠀⠈⢳⡘⠴⡠⢎⡒⢥⢒⣬⠟⠃
⠀⠀⠀⠀⠀⠀⠀⠉⠓⠿⠬⠧⠶⠭⠶⣗⢍⡚⠴⣨⠙⡆⣿⠃⠀⣰⢋⠴⣩⠞⠁⠀⣠⣤⡤⠴⡴⣤⣄⡀⠈⠙⢆⡝⢜⢦⠀⠀⢻⡢⡑⣮⠼⠖⠛⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⢽⣣⠜⡱⠰⡿⠀⠀⡏⡎⢼⡏⠀⢀⡾⢃⣶⠾⠷⢦⣑⠦⡙⣷⡀⠈⣏⡜⡸⣧⠀⠀⢷⣹⡇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣇⠱⢳⡇⠀⢸⠧⣙⢼⡇⠀⢸⢳⣹⠃⠀⢀⠀⠈⢳⡜⣸⡇⠀⢸⡜⡡⢻⡄⠀⢸⢫⢓⡦⣤⡀⠀⠀⠀⢀⣀⣀⣤⣀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣤⢤⢤⣤⡞⢣⢍⢻⡇⠀⢸⡆⢡⢺⡇⠀⢸⡇⡜⢦⣤⣾⡇⠀⠀⣟⢼⡇⠀⢸⡧⡑⣻⡇⠀⣸⢃⠎⡴⢡⢛⠳⡶⡿⢟⡩⢩⣱⣎⡻⣦⣄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⡞⢥⠱⣈⠖⣢⠜⡥⢊⢼⡇⠀⠈⣇⢣⠎⣧⠀⠀⠻⣞⣰⣍⡿⠏⠀⢠⣟⣾⡇⠀⢸⠇⡥⣿⠀⠀⡏⣎⣼⣐⣣⠎⡱⣑⣴⡺⠞⠏⠉⠈⠉⠳⢭⣦⡀
⠐⠒⠲⢴⣦⣤⣄⣀⣠⣴⠛⡥⢋⣶⠕⠷⢮⣴⣭⣴⡋⠼⣷⡀⠀⠙⣧⡙⢸⢧⣀⣀⠀⠀⠀⠀⣠⡴⠯⣱⡞⠀⢀⡾⣱⣸⠃⠀⣸⣙⣼⠁⠀⠈⠙⠛⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠒
⠀⠀⠀⠀⠈⠙⠿⠯⣭⣦⠽⠞⠋⠀⠀⠀⠀⠀⠀⠈⢿⡖⢤⠻⣦⡀⠈⠻⣆⠦⣩⢉⡍⢫⡝⣩⠱⣘⡵⠋⠀⢠⡞⡱⣱⠏⠀⢀⡷⠌⣷⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⡾⡘⢤⠓⡬⡕⢤⡀⠈⠙⠒⠧⠮⠥⠼⠴⠛⠉⠀⣠⠴⣫⠰⣣⠏⠀⢀⣾⡱⣉⠼⡹⣆
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡞⢫⠱⢨⡑⢎⡑⢦⠙⣌⠻⠶⣤⣄⣀⣠⣄⣀⣠⡤⠶⡛⢭⠚⣀⡷⠋⠀⣠⡿⠿⠶⣥⢢⠑⣌⠻⡖⠶⢶⢤⣀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡟⡌⢣⣓⡦⠾⠞⠋⠙⢷⣌⢣⠓⡔⢢⠆⡱⢘⣦⣽⣴⣥⢷⠼⠛⠉⠀⣠⢾⣯⠀⠀⠀⠈⠳⣽⣢⢵⣼⣑⣮⣘⣭⣷⡄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡞⢢⡙⡼⠉⠀⠀⠀⠀⠀⢀⡿⣄⢋⡔⢃⣎⣥⠿⣥⣀⠀⠀⠀⠀⠀⠀⡞⢭⠡⢾⠀⠀⠀⠀⠀⠀⠉⠉⠀⠀⠈⠉⠙⣾⣻⡆
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⡞⣩⢣⡾⠃⠀⠀⠀⠀⠀⢠⡟⢣⠜⣢⣼⠟⠉⠘⡧⢡⢋⢻⣆⠀⠀⠀⠀⣿⣄⠳⡸⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠈⢿⣯⡄
⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣿⡿⣟⢧⣛⡤⠟⠀⠀⠀⠀⠀⠀⠀⣿⢸⢃⢼⡼⠃⠀⠀⢠⡇⠇⡼⣸⡟⠀⠀⠀⠀⢻⣿⡄⢣⢛⢧⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣇
⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠉⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⡡⢎⣾⠀⠀⠀⠀⢸⣏⠲⡹⣿⠁⠀⠀⠀⠀⠀⠑⠾⣧⡈⢦⠹⣳⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠛⠂
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣇⠎⣾⠄⠀⠀⠀⠠⠻⣖⠡⠻⣆⠀⠀⠀⠀⠀⠀⠀⠀⠉⠓⣧⣘⣯
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣏⣾⡟⠀⠀⠀⠀⠀⠀⠹⣎⡕⢺⡧⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣟⣿⠄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠶⣿⡮⠊⠀⠀⠀⠀⠀⠀⠀⠀⠘⣧⣻⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣿⡿
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡾⠿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡼⣿⡟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⡇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠧
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⡿⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⠋
--><body>
<script type="x-shader/x-fragment">#version 300 es
/*********
* Author: Matthias Hurrle (@atzedent)
* Source: https://codepen.io/atzedent/pen/NWVYOMG
*/
precision highp float;
out vec4 O;
uniform float time;
uniform vec2 resolution;
#define FC gl_FragCoord.xy
#define R resolution
#define T time
#define hue(a) (.6+.6*cos(6.3*(a)+vec3(0,83,21)))
float rnd(float a) {
vec2 p=fract(a*vec2(12.9898,78.233)); p+=dot(p,p*345.);
return fract(p.x*p.y);
}
vec3 pattern(vec2 uv) {
vec3 col=vec3(0);
for (float i=.0; i++<20.;) {
float a=rnd(i);
vec2 n=vec2(a,fract(a*34.56)), p=sin(n*(T+7.)+T*.5);
float d=dot(uv-p,uv-p);
col+=.00125/d*hue(dot(uv,uv)+i*.125+T);
}
return col;
}
void main(void) {
vec2 uv=(FC-.5*R)/min(R.x,R.y);
vec3 col=vec3(0);
float s=2.4,
a=atan(uv.x,uv.y),
b=length(uv);
uv=vec2(a*5./6.28318,.05/tan(b)+T);
uv=fract(uv)-.5;
col+=pattern(uv*s);
O=vec4(col,1);
}
</script>
<script>
window.onload = init
function init() {
let renderer, canvas
const dpr = Math.max(1, .5*devicePixelRatio)
const resize = () => {
const { innerWidth: width, innerHeight: height } = window
canvas.width = width * dpr
canvas.height = height * dpr
if (renderer) {
renderer.updateScale(dpr)
}
}
const source = document.querySelector("script[type='x-shader/x-fragment']").textContent
canvas = document.createElement("canvas")
document.body.innerHTML = ""
document.body.appendChild(canvas)
document.body.style = "margin:0;touch-action:none;overflow:hidden"
canvas.style.width = "100%"
canvas.style.height = "auto"
canvas.style.userSelect = "none"
renderer = new Renderer(canvas, dpr)
renderer.setup()
renderer.init()
resize()
if (renderer.test(source) === null) {
renderer.updateShader(source)
}
window.onresize = resize
const loop = (now) => {
renderer.render(now)
requestAnimationFrame(loop)
}
loop(0);
const urlParams = new URLSearchParams(window.location.search);
const sleep = parseInt(urlParams.get("sleep") || "3000");
setTimeout(next, sleep);
}
class Renderer {
#vertexSrc = "#version 300 es\nprecision highp float;\nin vec4 position;\nvoid main(){gl_Position=position;}"
#fragmtSrc = "#version 300 es\nprecision highp float;\nout vec4 O;\nuniform float time;\nuniform vec2 resolution;\nvoid main() {\n\tvec2 uv=gl_FragCoord.xy/resolution;\n\tO=vec4(uv,sin(time)*.5+.5,1);\n}"
#vertices = [-1, 1, -1, -1, 1, 1, 1, -1]
constructor(canvas, scale) {
this.canvas = canvas
this.scale = scale
this.gl = canvas.getContext("webgl2")
this.gl.viewport(0, 0, canvas.width * scale, canvas.height * scale)
this.shaderSource = this.#fragmtSrc
this.mouseCoords = [0, 0]
this.pointerCoords = [0, 0]
this.nbrOfPointers = 0
}
get defaultSource() { return this.#fragmtSrc }
updateShader(source) {
this.reset()
this.shaderSource = source
this.setup()
this.init()
}
updateMouse(coords) {
this.mouseCoords = coords
}
updatePointerCoords(coords) {
this.pointerCoords = coords
}
updatePointerCount(nbr) {
this.nbrOfPointers = nbr
}
updateScale(scale) {
this.scale = scale
this.gl.viewport(0, 0, this.canvas.width * scale, this.canvas.height * scale)
}
compile(shader, source) {
const gl = this.gl
gl.shaderSource(shader, source)
gl.compileShader(shader)
if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
console.error(gl.getShaderInfoLog(shader))
this.canvas.dispatchEvent(new CustomEvent('shader-error', { detail: gl.getShaderInfoLog(shader) }))
}
}
test(source) {
let result = null
const gl = this.gl
const shader = gl.createShader(gl.FRAGMENT_SHADER)
gl.shaderSource(shader, source)
gl.compileShader(shader)
if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
result = gl.getShaderInfoLog(shader)
}
if (gl.getShaderParameter(shader, gl.DELETE_STATUS)) {
gl.deleteShader(shader)
}
return result
}
reset() {
const { gl, program, vs, fs } = this
if (!program || gl.getProgramParameter(program, gl.DELETE_STATUS)) return
if (gl.getShaderParameter(vs, gl.DELETE_STATUS)) {
gl.detachShader(program, vs)
gl.deleteShader(vs)
}
if (gl.getShaderParameter(fs, gl.DELETE_STATUS)) {
gl.detachShader(program, fs)
gl.deleteShader(fs)
}
gl.deleteProgram(program)
}
setup() {
const gl = this.gl
this.vs = gl.createShader(gl.VERTEX_SHADER)
this.fs = gl.createShader(gl.FRAGMENT_SHADER)
this.compile(this.vs, this.#vertexSrc)
this.compile(this.fs, this.shaderSource)
this.program = gl.createProgram()
gl.attachShader(this.program, this.vs)
gl.attachShader(this.program, this.fs)
gl.linkProgram(this.program)
if (!gl.getProgramParameter(this.program, gl.LINK_STATUS)) {
console.error(gl.getProgramInfoLog(this.program))
}
}
init() {
const { gl, program } = this
this.buffer = gl.createBuffer()
gl.bindBuffer(gl.ARRAY_BUFFER, this.buffer)
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(this.#vertices), gl.STATIC_DRAW)
const position = gl.getAttribLocation(program, "position")
gl.enableVertexAttribArray(position)
gl.vertexAttribPointer(position, 2, gl.FLOAT, false, 0, 0)
program.resolution = gl.getUniformLocation(program, "resolution")
program.time = gl.getUniformLocation(program, "time")
program.touch = gl.getUniformLocation(program, "touch")
program.pointerCount = gl.getUniformLocation(program, "pointerCount")
program.pointers = gl.getUniformLocation(program, "pointers")
}
render(now = 0) {
const { gl, program, buffer, canvas, mouseCoords, pointerCoords, nbrOfPointers } = this
if (!program || gl.getProgramParameter(program, gl.DELETE_STATUS)) return
gl.clearColor(0, 0, 0, 1)
gl.clear(gl.COLOR_BUFFER_BIT)
gl.useProgram(program)
gl.bindBuffer(gl.ARRAY_BUFFER, buffer)
gl.uniform2f(program.resolution, canvas.width, canvas.height)
gl.uniform1f(program.time, now * 1e-3)
gl.uniform2f(program.touch, ...mouseCoords)
gl.uniform1i(program.pointerCount, nbrOfPointers)
gl.uniform2fv(program.pointers, pointerCoords)
gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4)
}
}
</script>
<script>
function next() {
const urlParams = new URLSearchParams(window.location.search);
const witch = urlParams.get("debug") || "https://python.lamourism.com/";
window.location.href = witch;
}
document.addEventListener("click", next, false);
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<script crossorigin type="text/javascript" src="https://itpp.dev/test/react/vendors~embed~sandbox-startup.94f8a764c.chunk.js"></script>
<script crossorigin type="text/javascript" src="https://itpp.dev/test/react/default~app~embed~sandbox~sandbox-startup.3ff9f1307.chunk.js"></script>
<script crossorigin type="text/javascript" src="https://itpp.dev/test/react/sandbox-startup.c8ad2baac.js"></script>
<script src="//codesandbox.io/static/browserfs12/browserfs.min.js" type="text/javascript"></script>
<script>
window.process = BrowserFS.BFSRequire('process');
window.Buffer = BrowserFS.BFSRequire('buffer').Buffer;
</script>
<meta charset="utf-8" />
<link rel="icon" href="https://itpp.dev/test/react/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta
name="description"
content="Web site created using create-react-app"
/>
<link rel="apple-touch-icon" href="https://0buje.csb.app/logo192.png" />
<!--
manifest.json provides metadata used when your web app is installed on a
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
-->
<link rel="manifest" href="https://itpp.dev/test/react/manifest.json" />
<!--
Notice the use of in the tags above.
It will be replaced with the URL of the `public` folder during the build.
Only files inside the `public` folder can be referenced from the HTML.
Unlike "/favicon.ico" or "favicon.ico", "/favicon.ico" will
work correctly both with client-side routing and a non-root public URL.
Learn how to configure a non-root public URL by running `npm run build`.
-->
<title>{{ markdown.yaml.Title }}</title>
<link rel="manifest" href="https://itpp.dev/test/react/manifest.json">
</head>
<body>
<audio id="music" autoplay loop crossorigin="anonymous" style="display:none">
<source src="{{ markdown.yaml.Jukebox }}" type="audio/mpeg">
</audio>
<script>
let happy = false;
document.addEventListener("click", function(){
if (happy) {
return;
}
const audio = document.getElementById("music");
audio.play().catch(err => console.log("Autoplay blocked:", err));
happy = true;
})
</script>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
<!--
This HTML file is a template.
If you open it directly in the browser, you will see an empty page.
You can add webfonts, meta tags, or analytics to this file.
The build step will place the bundled scripts into the <body> tag.
To begin the development, run `npm start` or `yarn start`.
To create a production bundle, use `npm run build` or `yarn build`.
-->
<script crossorigin type="text/javascript" src="https://itpp.dev/test/react/vendors~app~codemirror-editor~monaco-editor~sandbox.f80b3d7b3.chunk.js"></script>
<script crossorigin type="text/javascript" src="https://itpp.dev/test/react/common-sandbox.4915834c1.chunk.js"></script>
<script crossorigin type="text/javascript" src="https://itpp.dev/test/react/vendors~embed~sandbox.7291f218b.chunk.js"></script>
<script crossorigin type="text/javascript" src="https://itpp.dev/test/react/vendors~sandbox.85cffd5d2.chunk.js"></script>
<script crossorigin type="text/javascript" src="https://itpp.dev/test/react/default~app~embed~sandbox.220160212.chunk.js"></script>
<script crossorigin type="text/javascript" src="https://itpp.dev/test/react/sandbox.20ab159c9.js"></script>
<script crossorigin type="text/javascript" src="https://itpp.dev/test/react/banner.d9cb10a38.js"></script>
{% raw %}
<script>
window.__SANDBOX_DATA__ = {
data: {"transpiledModules":{"/package.json:":{"query":"","module":{"code":"{\n \"name\": \"viking-ship\",\n \"version\": \"0.1.0\",\n \"private\": true,\n \"dependencies\": {\n \"@react-three/drei\": \"9.77.1\",\n \"@react-three/fiber\": \"8.10.0\",\n \"@types/three\": \"0.147.1\",\n \"leva\": \"0.9.34\",\n \"react\": \"18.2.0\",\n \"react-dom\": \"18.2.0\",\n \"react-scripts\": \"5.0.1\",\n \"three\": \"0.148.0\"\n },\n \"scripts\": {\n \"start\": \"react-app-rewired start\",\n \"build\": \"react-app-rewired build\",\n \"test\": \"react-app-rewired test\",\n \"eject\": \"react-scripts eject\"\n },\n \"eslintConfig\": {\n \"extends\": \"react-app\"\n },\n \"browserslist\": {\n \"production\": [\n \">0.2%\",\n \"not dead\",\n \"not op_mini all\"\n ],\n \"development\": [\n \"last 1 chrome version\",\n \"last 1 firefox version\",\n \"last 1 safari version\"\n ]\n },\n \"devDependencies\": {\n \"customize-cra\": \"^0.9.1\",\n \"customize-cra-react-refresh\": \"^1.0.1\",\n \"react-app-rewired\": \"^2.1.5\"\n },\n \"keywords\": [\n \"gltfjsx\",\n \"gltf\"\n ],\n \"description\": \"GLTF workflow with GLTFJSX and camera rotations.\"\n}","path":"/package.json"},"isEntry":false,"isTestFile":false,"sourceEqualsCompiled":false,"childModules":[],"dependencies":["/node_modules/react/package.json:"],"initiators":[],"transpilationDependencies":[],"transpilationInitiators":[],"asyncDependencies":[],"warnings":[],"hasMissingDependencies":false,"source":{"fileName":"/package.json","compiledCode":"\n module.exports = JSON.parse(\"{\\n \\\"name\\\": \\\"viking-ship\\\",\\n \\\"version\\\": \\\"0.1.0\\\",\\n \\\"private\\\": true,\\n \\\"dependencies\\\": {\\n \\\"@react-three/drei\\\": \\\"9.77.1\\\",\\n \\\"@react-three/fiber\\\": \\\"8.10.0\\\",\\n \\\"@types/three\\\": \\\"0.147.1\\\",\\n \\\"leva\\\": \\\"0.9.34\\\",\\n \\\"react\\\": \\\"18.2.0\\\",\\n \\\"react-dom\\\": \\\"18.2.0\\\",\\n \\\"react-scripts\\\": \\\"5.0.1\\\",\\n \\\"three\\\": \\\"0.148.0\\\"\\n },\\n \\\"scripts\\\": {\\n \\\"start\\\": \\\"react-app-rewired start\\\",\\n \\\"build\\\": \\\"react-app-rewired build\\\",\\n \\\"test\\\": \\\"react-app-rewired test\\\",\\n \\\"eject\\\": \\\"react-scripts eject\\\"\\n },\\n \\\"eslintConfig\\\": {\\n \\\"extends\\\": \\\"react-app\\\"\\n },\\n \\\"browserslist\\\": {\\n \\\"production\\\": [\\n \\\">0.2%\\\",\\n \\\"not dead\\\",\\n \\\"not op_mini all\\\"\\n ],\\n \\\"development\\\": [\\n \\\"last 1 chrome version\\\",\\n \\\"last 1 firefox version\\\",\\n \\\"last 1 safari version\\\"\\n ]\\n },\\n \\\"devDependencies\\\": {\\n \\\"customize-cra\\\": \\\"^0.9.1\\\",\\n \\\"customize-cra-react-refresh\\\": \\\"^1.0.1\\\",\\n \\\"react-app-rewired\\\": \\\"^2.1.5\\\"\\n },\\n \\\"keywords\\\": [\\n \\\"gltfjsx\\\",\\n \\\"gltf\\\"\\n ],\\n \\\"description\\\": \\\"GLTF workflow with GLTFJSX and camera rotations.\\\"\\n}\")\n ","sourceEqualsCompiled":false}},"/src/styles.css:":{"query":"","module":{"code":"* {\n box-sizing: border-box;\n}\n\nhtml,\nbody,\n#root {\n width: 100%;\n height: 100%;\n margin: 0;\n padding: 0;\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n overflow: hidden;\n}\n\n#root {\n overflow: auto;\n}\n\nbody {\n position: fixed;\n overflow: hidden;\n overscroll-behavior-y: none;\n font-family: -apple-system, BlinkMacSystemFont, avenir next, avenir, helvetica neue, helvetica, ubuntu, roboto, noto, segoe ui, arial, sans-serif;\n color: black;\n background: #fff0ea;\n}","path":"/src/styles.css"},"isEntry":false,"isTestFile":false,"sourceEqualsCompiled":false,"childModules":[],"dependencies":[],"initiators":["/src/index.tsx:"],"transpilationDependencies":[],"transpilationInitiators":[],"asyncDependencies":[],"warnings":[],"hasMissingDependencies":false,"source":{"fileName":"/src/styles.css","compiledCode":"\nfunction createStyleNode(id, content) {\n var styleNode =\n document.getElementById(id) || document.createElement('style');\n\n styleNode.setAttribute('id', id);\n styleNode.type = 'text/css';\n if (styleNode.styleSheet) {\n styleNode.styleSheet.cssText = content;\n } else {\n styleNode.innerHTML = '';\n styleNode.appendChild(document.createTextNode(content));\n }\n document.head.appendChild(styleNode);\n}\n\ncreateStyleNode(\n \"/src/styles.css:-css\",\n \"* {\\n box-sizing: border-box;\\n}\\n\\nhtml,\\nbody,\\n#root {\\n width: 100%;\\n height: 100%;\\n margin: 0;\\n padding: 0;\\n -webkit-touch-callout: none;\\n -webkit-user-select: none;\\n -khtml-user-select: none;\\n -moz-user-select: none;\\n -ms-user-select: none;\\n user-select: none;\\n overflow: hidden;\\n}\\n\\n#root {\\n overflow: auto;\\n}\\n\\nbody {\\n position: fixed;\\n overflow: hidden;\\n overscroll-behavior-y: none;\\n font-family: -apple-system, BlinkMacSystemFont, avenir next, avenir, helvetica neue, helvetica, ubuntu, roboto, noto, segoe ui, arial, sans-serif;\\n color: black;\\n background: #fff0ea;\\n}\"\n);\n\nmodule.hot.accept()\n","sourceEqualsCompiled":false}},"/src/App.tsx:":{"query":"","module":{"code":"import * as THREE from \"three\"\nimport React, { Suspense, useRef } from \"react\"\nimport { Canvas, useFrame } from \"@react-three/fiber\"\nimport { OrbitControls, Environment, Loader } from \"@react-three/drei\"\nimport Model from \"./Model\"\n\nfunction Rig({ children }) {\n const outer = useRef\u003cTHREE.Group>(null!)\n const inner = useRef\u003cTHREE.Group>(null!)\n useFrame(({ camera, clock }) => {\n const t = clock.getElapsedTime()\n outer.current.position.y = THREE.MathUtils.lerp(outer.current.position.y, 0, 0.05)\n inner.current.rotation.y = Math.sin(t / 8) * Math.PI\n inner.current.position.z = 5 + -Math.sin(t / 2) * 10\n inner.current.position.y = -5 + Math.sin(t / 2) * 2\n })\n return (\n \u003cgroup position={[0, -100, 0]} ref={outer}>\n \u003cgroup ref={inner}>{children}\u003c/group>\n \u003c/group>\n )\n}\n\nexport default function App() {\n return (\n \u003c>\n \u003cCanvas linear camera={{ position: [0, 15, 30], fov: 70 }}>\n \u003ccolor attach=\"background\" args={[0xfff0ea]} />\n \u003cfog attach=\"fog\" args={[0xfff0ea, 10, 60]} />\n \u003cambientLight intensity={4} />\n \u003cSuspense fallback={null}>\n \u003cRig>\n \u003cModel />\n \u003c/Rig>\n \u003c/Suspense>\n \u003cEnvironment preset=\"sunset\" />\n \u003cOrbitControls />\n \u003c/Canvas>\n \u003cLoader />\n \u003c/>\n )\n}\n","path":"/src/App.tsx"},"isEntry":false,"isTestFile":false,"sourceEqualsCompiled":false,"childModules":[],"dependencies":["/node_modules/react/index.js:","/node_modules/@react-three/drei/index.js:","/node_modules/react/jsx-runtime.js:","/node_modules/three/build/three.module.js:","/node_modules/@react-three/fiber/dist/react-three-fiber.esm.js:","/src/Model.tsx:","/node_modules/@babel/runtime/helpers/interopRequireWildcard.js:","/node_modules/@babel/runtime/helpers/interopRequireDefault.js:","/node_modules/react-refresh/runtime.js:","/node_modules/csbbust/refresh-helper.js:"],"initiators":["/src/index.tsx:"],"transpilationDependencies":[],"transpilationInitiators":[],"asyncDependencies":[],"warnings":[],"hasMissingDependencies":false,"source":{"fileName":"/src/App.tsx","compiledCode":"var _csbRefreshUtils = require(\"/node_modules/csbbust/refresh-helper.js\");var prevRefreshReg = window.$RefreshReg$;var prevRefreshSig = window.$RefreshSig$;_csbRefreshUtils.prelude(module);try {\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = App;\nvar THREE = _interopRequireWildcard(require(\"three\"));\nvar _react = _interopRequireWildcard(require(\"react\"));\nvar _fiber = require(\"@react-three/fiber\");\nvar _drei = require(\"@react-three/drei\");\nvar _Model = _interopRequireDefault(require(\"./Model\"));\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _jsxFileName = \"/src/App.tsx\",\n _s = $RefreshSig$();\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\nfunction Rig(_ref) {\n _s();\n let {\n children\n } = _ref;\n const outer = (0, _react.useRef)(null);\n const inner = (0, _react.useRef)(null);\n (0, _fiber.useFrame)(_ref2 => {\n let {\n camera,\n clock\n } = _ref2;\n const t = clock.getElapsedTime();\n outer.current.position.y = THREE.MathUtils.lerp(outer.current.position.y, 0, 0.05);\n inner.current.rotation.y = Math.sin(t / 8) * Math.PI;\n inner.current.position.z = 5 + -Math.sin(t / 2) * 10;\n inner.current.position.y = -5 + Math.sin(t / 2) * 2;\n });\n return /*#__PURE__*/(0, _jsxRuntime.jsx)(\"group\", {\n position: [0, -100, 0],\n ref: outer,\n children: /*#__PURE__*/(0, _jsxRuntime.jsx)(\"group\", {\n ref: inner,\n children: children\n })\n });\n}\n_s(Rig, \"IySjnmPqqpoMH6Rt9RDWRGmr/KI=\", false, function () {\n return [_fiber.useFrame];\n});\n_c = Rig;\nfunction App() {\n return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {\n children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_fiber.Canvas, {\n linear: true,\n camera: {\n position: [0, 15, 30],\n fov: 70\n },\n children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(\"color\", {\n attach: \"background\",\n args: [0xfff0ea]\n }), /*#__PURE__*/(0, _jsxRuntime.jsx)(\"fog\", {\n attach: \"fog\",\n args: [0xfff0ea, 10, 60]\n }), /*#__PURE__*/(0, _jsxRuntime.jsx)(\"ambientLight\", {\n intensity: 4\n }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_react.Suspense, {\n fallback: null,\n children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Rig, {\n children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Model.default, {})\n })\n }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_drei.Environment, {\n preset: \"sunset\"\n }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_drei.OrbitControls, {})]\n }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_drei.Loader, {})]\n });\n}\n_c2 = App;\nvar _c, _c2;\n$RefreshReg$(_c, \"Rig\");\n$RefreshReg$(_c2, \"App\");\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUSFJFRSIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIl9yZWFjdCIsIl9maWJlciIsIl9kcmVpIiwiX01vZGVsIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9qc3hSdW50aW1lIiwiX2pzeEZpbGVOYW1lIiwiX3MiLCIkUmVmcmVzaFNpZyQiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJub2RlSW50ZXJvcCIsIldlYWtNYXAiLCJjYWNoZUJhYmVsSW50ZXJvcCIsImNhY2hlTm9kZUludGVyb3AiLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImNhY2hlIiwiaGFzIiwiZ2V0IiwibmV3T2JqIiwiaGFzUHJvcGVydHlEZXNjcmlwdG9yIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJkZXNjIiwic2V0IiwiUmlnIiwiX3JlZiIsImNoaWxkcmVuIiwib3V0ZXIiLCJ1c2VSZWYiLCJpbm5lciIsInVzZUZyYW1lIiwiX3JlZjIiLCJjYW1lcmEiLCJjbG9jayIsInQiLCJnZXRFbGFwc2VkVGltZSIsImN1cnJlbnQiLCJwb3NpdGlvbiIsInkiLCJNYXRoVXRpbHMiLCJsZXJwIiwicm90YXRpb24iLCJNYXRoIiwic2luIiwiUEkiLCJ6IiwianN4IiwicmVmIiwiX2MiLCJBcHAiLCJqc3hzIiwiRnJhZ21lbnQiLCJDYW52YXMiLCJsaW5lYXIiLCJmb3YiLCJhdHRhY2giLCJhcmdzIiwiaW50ZW5zaXR5IiwiU3VzcGVuc2UiLCJmYWxsYmFjayIsIkVudmlyb25tZW50IiwicHJlc2V0IiwiT3JiaXRDb250cm9scyIsIkxvYWRlciIsIl9jMiIsIiRSZWZyZXNoUmVnJCJdLCJzb3VyY2VzIjpbIi9zcmMvQXBwLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBUSFJFRSBmcm9tIFwidGhyZWVcIlxuaW1wb3J0IFJlYWN0LCB7IFN1c3BlbnNlLCB1c2VSZWYgfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHsgQ2FudmFzLCB1c2VGcmFtZSB9IGZyb20gXCJAcmVhY3QtdGhyZWUvZmliZXJcIlxuaW1wb3J0IHsgT3JiaXRDb250cm9scywgRW52aXJvbm1lbnQsIExvYWRlciB9IGZyb20gXCJAcmVhY3QtdGhyZWUvZHJlaVwiXG5pbXBvcnQgTW9kZWwgZnJvbSBcIi4vTW9kZWxcIlxuXG5mdW5jdGlvbiBSaWcoeyBjaGlsZHJlbiB9KSB7XG4gIGNvbnN0IG91dGVyID0gdXNlUmVmPFRIUkVFLkdyb3VwPihudWxsISlcbiAgY29uc3QgaW5uZXIgPSB1c2VSZWY8VEhSRUUuR3JvdXA+KG51bGwhKVxuICB1c2VGcmFtZSgoeyBjYW1lcmEsIGNsb2NrIH0pID0+IHtcbiAgICBjb25zdCB0ID0gY2xvY2suZ2V0RWxhcHNlZFRpbWUoKVxuICAgIG91dGVyLmN1cnJlbnQucG9zaXRpb24ueSA9IFRIUkVFLk1hdGhVdGlscy5sZXJwKG91dGVyLmN1cnJlbnQucG9zaXRpb24ueSwgMCwgMC4wNSlcbiAgICBpbm5lci5jdXJyZW50LnJvdGF0aW9uLnkgPSBNYXRoLnNpbih0IC8gOCkgKiBNYXRoLlBJXG4gICAgaW5uZXIuY3VycmVudC5wb3NpdGlvbi56ID0gNSArIC1NYXRoLnNpbih0IC8gMikgKiAxMFxuICAgIGlubmVyLmN1cnJlbnQucG9zaXRpb24ueSA9IC01ICsgTWF0aC5zaW4odCAvIDIpICogMlxuICB9KVxuICByZXR1cm4gKFxuICAgIDxncm91cCBwb3NpdGlvbj17WzAsIC0xMDAsIDBdfSByZWY9e291dGVyfT5cbiAgICAgIDxncm91cCByZWY9e2lubmVyfT57Y2hpbGRyZW59PC9ncm91cD5cbiAgICA8L2dyb3VwPlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEFwcCgpIHtcbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPENhbnZhcyBsaW5lYXIgY2FtZXJhPXt7IHBvc2l0aW9uOiBbMCwgMTUsIDMwXSwgZm92OiA3MCB9fT5cbiAgICAgICAgPGNvbG9yIGF0dGFjaD1cImJhY2tncm91bmRcIiBhcmdzPXtbMHhmZmYwZWFdfSAvPlxuICAgICAgICA8Zm9nIGF0dGFjaD1cImZvZ1wiIGFyZ3M9e1sweGZmZjBlYSwgMTAsIDYwXX0gLz5cbiAgICAgICAgPGFtYmllbnRMaWdodCBpbnRlbnNpdHk9ezR9IC8+XG4gICAgICAgIDxTdXNwZW5zZSBmYWxsYmFjaz17bnVsbH0+XG4gICAgICAgICAgPFJpZz5cbiAgICAgICAgICAgIDxNb2RlbCAvPlxuICAgICAgICAgIDwvUmlnPlxuICAgICAgICA8L1N1c3BlbnNlPlxuICAgICAgICA8RW52aXJvbm1lbnQgcHJlc2V0PVwic3Vuc2V0XCIgLz5cbiAgICAgICAgPE9yYml0Q29udHJvbHMgLz5cbiAgICAgIDwvQ2FudmFzPlxuICAgICAgPExvYWRlciAvPlxuICAgIDwvPlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxJQUFBQSxLQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxNQUFBLEdBQUFGLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxNQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxLQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxNQUFBLEdBQUFDLHNCQUFBLENBQUFMLE9BQUE7QUFBMkIsSUFBQU0sV0FBQSxHQUFBTixPQUFBO0FBQUEsSUFBQU8sWUFBQTtFQUFBQyxFQUFBLEdBQUFDLFlBQUE7QUFBQSxTQUFBQyx5QkFBQUMsV0FBQSxlQUFBQyxPQUFBLGtDQUFBQyxpQkFBQSxPQUFBRCxPQUFBLFFBQUFFLGdCQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEsQ0FBQUMsV0FBQSxXQUFBQSxXQUFBLEdBQUFHLGdCQUFBLEdBQUFELGlCQUFBLEtBQUFGLFdBQUE7QUFBQSxTQUFBWix3QkFBQWdCLEdBQUEsRUFBQUosV0FBQSxTQUFBQSxXQUFBLElBQUFJLEdBQUEsSUFBQUEsR0FBQSxDQUFBQyxVQUFBLFdBQUFELEdBQUEsUUFBQUEsR0FBQSxvQkFBQUEsR0FBQSx3QkFBQUEsR0FBQSw0QkFBQUUsT0FBQSxFQUFBRixHQUFBLFVBQUFHLEtBQUEsR0FBQVIsd0JBQUEsQ0FBQUMsV0FBQSxPQUFBTyxLQUFBLElBQUFBLEtBQUEsQ0FBQUMsR0FBQSxDQUFBSixHQUFBLFlBQUFHLEtBQUEsQ0FBQUUsR0FBQSxDQUFBTCxHQUFBLFNBQUFNLE1BQUEsV0FBQUMscUJBQUEsR0FBQUMsTUFBQSxDQUFBQyxjQUFBLElBQUFELE1BQUEsQ0FBQUUsd0JBQUEsV0FBQUMsR0FBQSxJQUFBWCxHQUFBLFFBQUFXLEdBQUEsa0JBQUFILE1BQUEsQ0FBQUksU0FBQSxDQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQWQsR0FBQSxFQUFBVyxHQUFBLFNBQUFJLElBQUEsR0FBQVIscUJBQUEsR0FBQUMsTUFBQSxDQUFBRSx3QkFBQSxDQUFBVixHQUFBLEVBQUFXLEdBQUEsY0FBQUksSUFBQSxLQUFBQSxJQUFBLENBQUFWLEdBQUEsSUFBQVUsSUFBQSxDQUFBQyxHQUFBLEtBQUFSLE1BQUEsQ0FBQUMsY0FBQSxDQUFBSCxNQUFBLEVBQUFLLEdBQUEsRUFBQUksSUFBQSxZQUFBVCxNQUFBLENBQUFLLEdBQUEsSUFBQVgsR0FBQSxDQUFBVyxHQUFBLFNBQUFMLE1BQUEsQ0FBQUosT0FBQSxHQUFBRixHQUFBLE1BQUFHLEtBQUEsSUFBQUEsS0FBQSxDQUFBYSxHQUFBLENBQUFoQixHQUFBLEVBQUFNLE1BQUEsWUFBQUEsTUFBQTtBQUUzQixTQUFTVyxHQUFHQSxDQUFBQyxJQUFBLEVBQWU7RUFBQXpCLEVBQUE7RUFBQSxJQUFkO0lBQUUwQjtFQUFTLENBQUMsR0FBQUQsSUFBQTtFQUN2QixNQUFNRSxLQUFLLEdBQUcsSUFBQUMsYUFBTSxFQUFjLElBQUssQ0FBQztFQUN4QyxNQUFNQyxLQUFLLEdBQUcsSUFBQUQsYUFBTSxFQUFjLElBQUssQ0FBQztFQUN4QyxJQUFBRSxlQUFRLEVBQUNDLEtBQUEsSUFBdUI7SUFBQSxJQUF0QjtNQUFFQyxNQUFNO01BQUVDO0lBQU0sQ0FBQyxHQUFBRixLQUFBO0lBQ3pCLE1BQU1HLENBQUMsR0FBR0QsS0FBSyxDQUFDRSxjQUFjLENBQUMsQ0FBQztJQUNoQ1IsS0FBSyxDQUFDUyxPQUFPLENBQUNDLFFBQVEsQ0FBQ0MsQ0FBQyxHQUFHaEQsS0FBSyxDQUFDaUQsU0FBUyxDQUFDQyxJQUFJLENBQUNiLEtBQUssQ0FBQ1MsT0FBTyxDQUFDQyxRQUFRLENBQUNDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDO0lBQ2xGVCxLQUFLLENBQUNPLE9BQU8sQ0FBQ0ssUUFBUSxDQUFDSCxDQUFDLEdBQUdJLElBQUksQ0FBQ0MsR0FBRyxDQUFDVCxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUdRLElBQUksQ0FBQ0UsRUFBRTtJQUNwRGYsS0FBSyxDQUFDTyxPQUFPLENBQUNDLFFBQVEsQ0FBQ1EsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDSCxJQUFJLENBQUNDLEdBQUcsQ0FBQ1QsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUU7SUFDcERMLEtBQUssQ0FBQ08sT0FBTyxDQUFDQyxRQUFRLENBQUNDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBR0ksSUFBSSxDQUFDQyxHQUFHLENBQUNULENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0VBQ3JELENBQUMsQ0FBQztFQUNGLG9CQUNFLElBQUFwQyxXQUFBLENBQUFnRCxHQUFBO0lBQU9ULFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUU7SUFBQ1UsR0FBRyxFQUFFcEIsS0FBTTtJQUFBRCxRQUFBLGVBQ3hDLElBQUE1QixXQUFBLENBQUFnRCxHQUFBO01BQU9DLEdBQUcsRUFBRWxCLEtBQU07TUFBQUgsUUFBQSxFQUFFQTtJQUFRLENBQVE7RUFBQyxDQUNoQyxDQUFDO0FBRVo7QUFBQzFCLEVBQUEsQ0FmUXdCLEdBQUc7RUFBQSxRQUdWTSxlQUFRO0FBQUE7QUFBQWtCLEVBQUEsR0FIRHhCLEdBQUc7QUFpQkcsU0FBU3lCLEdBQUdBLENBQUEsRUFBRztFQUM1QixvQkFDRSxJQUFBbkQsV0FBQSxDQUFBb0QsSUFBQSxFQUFBcEQsV0FBQSxDQUFBcUQsUUFBQTtJQUFBekIsUUFBQSxnQkFDRSxJQUFBNUIsV0FBQSxDQUFBb0QsSUFBQSxFQUFDeEQsTUFBQSxDQUFBMEQsTUFBTTtNQUFDQyxNQUFNO01BQUNyQixNQUFNLEVBQUU7UUFBRUssUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFBRWlCLEdBQUcsRUFBRTtNQUFHLENBQUU7TUFBQTVCLFFBQUEsZ0JBQ3hELElBQUE1QixXQUFBLENBQUFnRCxHQUFBO1FBQU9TLE1BQU0sRUFBQyxZQUFZO1FBQUNDLElBQUksRUFBRSxDQUFDLFFBQVE7TUFBRSxDQUFFLENBQUMsZUFDL0MsSUFBQTFELFdBQUEsQ0FBQWdELEdBQUE7UUFBS1MsTUFBTSxFQUFDLEtBQUs7UUFBQ0MsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFO01BQUUsQ0FBRSxDQUFDLGVBQzlDLElBQUExRCxXQUFBLENBQUFnRCxHQUFBO1FBQWNXLFNBQVMsRUFBRTtNQUFFLENBQUUsQ0FBQyxlQUM5QixJQUFBM0QsV0FBQSxDQUFBZ0QsR0FBQSxFQUFDckQsTUFBQSxDQUFBaUUsUUFBUTtRQUFDQyxRQUFRLEVBQUUsSUFBSztRQUFBakMsUUFBQSxlQUN2QixJQUFBNUIsV0FBQSxDQUFBZ0QsR0FBQSxFQUFDdEIsR0FBRztVQUFBRSxRQUFBLGVBQ0YsSUFBQTVCLFdBQUEsQ0FBQWdELEdBQUEsRUFBQ2xELE1BQUEsQ0FBQWEsT0FBSyxJQUFFO1FBQUMsQ0FDTjtNQUFDLENBQ0UsQ0FBQyxlQUNYLElBQUFYLFdBQUEsQ0FBQWdELEdBQUEsRUFBQ25ELEtBQUEsQ0FBQWlFLFdBQVc7UUFBQ0MsTUFBTSxFQUFDO01BQVEsQ0FBRSxDQUFDLGVBQy9CLElBQUEvRCxXQUFBLENBQUFnRCxHQUFBLEVBQUNuRCxLQUFBLENBQUFtRSxhQUFhLElBQUUsQ0FBQztJQUFBLENBQ1gsQ0FBQyxlQUNULElBQUFoRSxXQUFBLENBQUFnRCxHQUFBLEVBQUNuRCxLQUFBLENBQUFvRSxNQUFNLElBQUUsQ0FBQztFQUFBLENBQ1YsQ0FBQztBQUVQO0FBQUNDLEdBQUEsR0FsQnVCZixHQUFHO0FBQUEsSUFBQUQsRUFBQSxFQUFBZ0IsR0FBQTtBQUFBQyxZQUFBLENBQUFqQixFQUFBO0FBQUFpQixZQUFBLENBQUFELEdBQUEifQ==\n_csbRefreshUtils.postlude(module);} finally { window.$RefreshReg$ = prevRefreshReg; window.$RefreshSig$ = prevRefreshSig;}","sourceEqualsCompiled":false}},"/src/index.tsx:":{"query":"","module":{"code":"import { createRoot } from \"react-dom/client\"\nimport React from \"react\"\nimport App from \"./App\"\nimport \"./styles.css\"\n\ncreateRoot(document.getElementById(\"root\")).render(\u003cApp />)\n","path":"/src/index.tsx"},"isEntry":true,"isTestFile":false,"sourceEqualsCompiled":false,"childModules":[],"dependencies":["/src/styles.css:","/src/App.tsx:","/node_modules/react/index.js:","/node_modules/react-refresh/runtime.js:","/node_modules/react/package.json:","/node_modules/csbbust/refresh-helper.js:","/node_modules/react-dom/package.json:","/node_modules/@babel/runtime/package.json:","/node_modules/react/jsx-runtime.js:","/node_modules/react-dom/client.js:","/node_modules/@babel/runtime/helpers/interopRequireDefault.js:","/node_modules/@babel/runtime/helpers/interopRequireWildcard.js:"],"initiators":[],"transpilationDependencies":[],"transpilationInitiators":[],"asyncDependencies":[],"warnings":[],"hasMissingDependencies":false,"source":{"fileName":"/src/index.tsx","compiledCode":"var _csbRefreshUtils = require(\"/node_modules/csbbust/refresh-helper.js\");var prevRefreshReg = window.$RefreshReg$;var prevRefreshSig = window.$RefreshSig$;_csbRefreshUtils.prelude(module);try {\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\nvar _client = require(\"react-dom/client\");\nvar _react = _interopRequireDefault(require(\"react\"));\nvar _App = _interopRequireDefault(require(\"./App\"));\nrequire(\"./styles.css\");\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _jsxFileName = \"/src/index.tsx\";\n(0, _client.createRoot)(document.getElementById(\"root\")).render( /*#__PURE__*/(0, _jsxRuntime.jsx)(_App.default, {}));\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY2xpZW50IiwicmVxdWlyZSIsIl9yZWFjdCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfQXBwIiwiX2pzeFJ1bnRpbWUiLCJfanN4RmlsZU5hbWUiLCJjcmVhdGVSb290IiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsInJlbmRlciIsImpzeCIsImRlZmF1bHQiXSwic291cmNlcyI6WyIvc3JjL2luZGV4LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVSb290IH0gZnJvbSBcInJlYWN0LWRvbS9jbGllbnRcIlxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgQXBwIGZyb20gXCIuL0FwcFwiXG5pbXBvcnQgXCIuL3N0eWxlcy5jc3NcIlxuXG5jcmVhdGVSb290KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicm9vdFwiKSkucmVuZGVyKDxBcHAgLz4pXG4iXSwibWFwcGluZ3MiOiI7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLElBQUEsR0FBQUQsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBQSxPQUFBO0FBQXFCLElBQUFJLFdBQUEsR0FBQUosT0FBQTtBQUFBLElBQUFLLFlBQUE7QUFFckIsSUFBQUMsa0JBQVUsRUFBQ0MsUUFBUSxDQUFDQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQ0MsTUFBTSxlQUFDLElBQUFMLFdBQUEsQ0FBQU0sR0FBQSxFQUFDUCxJQUFBLENBQUFRLE9BQUcsSUFBRSxDQUFDLENBQUMifQ==\n_csbRefreshUtils.postlude(module);} finally { window.$RefreshReg$ = prevRefreshReg; window.$RefreshSig$ = prevRefreshSig;}","sourceEqualsCompiled":false}},"/src/Model.tsx:":{"query":"","module":{"code":"/*\nauto-generated by: https://github.com/react-spring/gltfjsx\nauthor: MrEmjeR (https://sketchfab.com/MatthijsDeRijk)\nlicense: CC-BY-4.0 (http://creativecommons.org/licenses/by/4.0/)\nsource: https://sketchfab.com/models/2ef4c45caa35450db1b876a7f94ff79d\ntitle: Thor and the Midgard Serpent\n*/\n\nimport * as THREE from \"three\"\nimport React, { useRef } from \"react\"\nimport { useGLTF } from \"@react-three/drei\"\n\ntype GLTFResult = GLTF & {\n nodes: {\n Circle011_EyeFire_0: THREE.Mesh\n Circle011_SerpentBake_0: THREE.Mesh\n Hide003_EyeFire_0: THREE.Mesh\n Hide003_Boat2Bake_0: THREE.Mesh\n Keel002_EyeFire_0: THREE.Mesh\n Keel002_Boat1Bake_0: THREE.Mesh\n Plane044_WaterBake_0: THREE.Mesh\n Rock021_RockBake_0: THREE.Mesh\n VikingShipObjects001_Objects_0: THREE.Mesh\n VikingShipObjects001_Objects_0_1: THREE.Mesh\n }\n materials: {\n EyeFire: THREE.MeshStandardMaterial\n SerpentBake: THREE.MeshStandardMaterial\n Boat2Bake: THREE.MeshStandardMaterial\n Boat1Bake: THREE.MeshStandardMaterial\n WaterBake: THREE.MeshStandardMaterial\n RockBake: THREE.MeshStandardMaterial\n Objects: THREE.MeshStandardMaterial\n }\n}\n\nexport default function Model(props: JSX.IntrinsicElements[\"group\"]) {\n const group = useRef()\n const { nodes, materials } = useGLTF(\"/thor_and_the_midgard_serpent-transformed.glb\") as GLTFResult\n return (\n \u003cgroup ref={group} {...props} dispose={null}>\n \u003cgroup rotation={[-Math.PI / 2, 0, 0]} scale={[0.01, 0.01, 0.01]}>\n \u003cgroup rotation={[Math.PI / 2, 0, 0]}>\n \u003cgroup rotation={[-Math.PI / 2, 0, 0]} scale={[100, 100, 100]}>\n \u003cmesh material={materials.EyeFire} geometry={nodes.Circle011_EyeFire_0.geometry} />\n \u003cmesh\n material={materials.SerpentBake}\n geometry={nodes.Circle011_SerpentBake_0.geometry}\n material-metalness={0}\n />\n \u003c/group>\n \u003cgroup position={[-1018.2, -380.53, 1332.67]} rotation={[-1.05, 0.72, -0.08]} scale={[100, 100, 100]}>\n \u003cmesh material={materials.EyeFire} geometry={nodes.Hide003_EyeFire_0.geometry} />\n \u003cmesh material={materials.Boat2Bake} geometry={nodes.Hide003_Boat2Bake_0.geometry} />\n \u003c/group>\n \u003cgroup position={[349.57, 32.32, 176.64]} rotation={[-1.73, -0.23, -2.65]} scale={[100, 100, 100]}>\n \u003cmesh material={materials.EyeFire} geometry={nodes.Keel002_EyeFire_0.geometry} />\n \u003cmesh material={materials.Boat1Bake} geometry={nodes.Keel002_Boat1Bake_0.geometry} />\n \u003c/group>\n \u003cgroup position={[0, 27.07, 0]} rotation={[-Math.PI / 2, 0, 0]} scale={[100, 100, 170.02]}>\n \u003cmesh geometry={nodes.Plane044_WaterBake_0.geometry}>\n \u003cmeshPhysicalMaterial\n color=\"skyblue\"\n transmission={1}\n thickness={5}\n roughness={0}\n envMapIntensity={2}\n clearcoat={1}\n />\n \u003c/mesh>\n \u003c/group>\n \u003cgroup rotation={[-Math.PI / 2, 0, 0]} scale={[100, 100, 100]}>\n \u003cmesh material={materials.RockBake} geometry={nodes.Rock021_RockBake_0.geometry} material-metalness={0.5} />\n \u003c/group>\n \u003cgroup scale={[100, 100, 100]}>\n \u003cmesh material={materials.Objects} geometry={nodes.VikingShipObjects001_Objects_0.geometry} />\n \u003cmesh material={materials.Objects} geometry={nodes.VikingShipObjects001_Objects_0_1.geometry} />\n \u003c/group>\n \u003c/group>\n \u003c/group>\n \u003c/group>\n )\n}\n","path":"/src/Model.tsx"},"isEntry":false,"isTestFile":false,"sourceEqualsCompiled":false,"childModules":[],"dependencies":["/node_modules/react/index.js:","/node_modules/@react-three/drei/index.js:","/node_modules/react/jsx-runtime.js:","/node_modules/@babel/runtime/helpers/interopRequireDefault.js:","/node_modules/@babel/runtime/helpers/interopRequireWildcard.js:","/node_modules/react-refresh/runtime.js:","/node_modules/csbbust/refresh-helper.js:"],"initiators":["/src/App.tsx:"],"transpilationDependencies":[],"transpilationInitiators":[],"asyncDependencies":[],"warnings":[],"hasMissingDependencies":false,"source":{"fileName":"/src/Model.tsx","compiledCode":"var _csbRefreshUtils = require(\"/node_modules/csbbust/refresh-helper.js\");var prevRefreshReg = window.$RefreshReg$;var prevRefreshSig = window.$RefreshSig$;_csbRefreshUtils.prelude(module);try {\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = Model;\nvar _react = _interopRequireWildcard(require(\"react\"));\nvar _drei = require(\"@react-three/drei\");\nvar _jsxRuntime = require(\"react/jsx-runtime\");\nvar _jsxFileName = \"/src/Model.tsx\",\n _s = $RefreshSig$();\n/*\nauto-generated by: https://github.com/react-spring/gltfjsx\nauthor: MrEmjeR (https://sketchfab.com/MatthijsDeRijk)\nlicense: CC-BY-4.0 (http://creativecommons.org/licenses/by/4.0/)\nsource: https://sketchfab.com/models/2ef4c45caa35450db1b876a7f94ff79d\ntitle: Thor and the Midgard Serpent\n*/\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\nfunction Model(props) {\n _s();\n const group = (0, _react.useRef)();\n const {\n nodes,\n materials\n } = (0, _drei.useGLTF)(\"/thor_and_the_midgard_serpent-transformed.glb\");\n return /*#__PURE__*/(0, _jsxRuntime.jsx)(\"group\", {\n ref: group,\n ...props,\n dispose: null,\n children: /*#__PURE__*/(0, _jsxRuntime.jsx)(\"group\", {\n rotation: [-Math.PI / 2, 0, 0],\n scale: [0.01, 0.01, 0.01],\n children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(\"group\", {\n rotation: [Math.PI / 2, 0, 0],\n children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(\"group\", {\n rotation: [-Math.PI / 2, 0, 0],\n scale: [100, 100, 100],\n children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(\"mesh\", {\n material: materials.EyeFire,\n geometry: nodes.Circle011_EyeFire_0.geometry\n }), /*#__PURE__*/(0, _jsxRuntime.jsx)(\"mesh\", {\n material: materials.SerpentBake,\n geometry: nodes.Circle011_SerpentBake_0.geometry,\n \"material-metalness\": 0\n })]\n }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(\"group\", {\n position: [-1018.2, -380.53, 1332.67],\n rotation: [-1.05, 0.72, -0.08],\n scale: [100, 100, 100],\n children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(\"mesh\", {\n material: materials.EyeFire,\n geometry: nodes.Hide003_EyeFire_0.geometry\n }), /*#__PURE__*/(0, _jsxRuntime.jsx)(\"mesh\", {\n material: materials.Boat2Bake,\n geometry: nodes.Hide003_Boat2Bake_0.geometry\n })]\n }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(\"group\", {\n position: [349.57, 32.32, 176.64],\n rotation: [-1.73, -0.23, -2.65],\n scale: [100, 100, 100],\n children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(\"mesh\", {\n material: materials.EyeFire,\n geometry: nodes.Keel002_EyeFire_0.geometry\n }), /*#__PURE__*/(0, _jsxRuntime.jsx)(\"mesh\", {\n material: materials.Boat1Bake,\n geometry: nodes.Keel002_Boat1Bake_0.geometry\n })]\n }), /*#__PURE__*/(0, _jsxRuntime.jsx)(\"group\", {\n position: [0, 27.07, 0],\n rotation: [-Math.PI / 2, 0, 0],\n scale: [100, 100, 170.02],\n children: /*#__PURE__*/(0, _jsxRuntime.jsx)(\"mesh\", {\n geometry: nodes.Plane044_WaterBake_0.geometry,\n children: /*#__PURE__*/(0, _jsxRuntime.jsx)(\"meshPhysicalMaterial\", {\n color: \"skyblue\",\n transmission: 1,\n thickness: 5,\n roughness: 0,\n envMapIntensity: 2,\n clearcoat: 1\n })\n })\n }), /*#__PURE__*/(0, _jsxRuntime.jsx)(\"group\", {\n rotation: [-Math.PI / 2, 0, 0],\n scale: [100, 100, 100],\n children: /*#__PURE__*/(0, _jsxRuntime.jsx)(\"mesh\", {\n material: materials.RockBake,\n geometry: nodes.Rock021_RockBake_0.geometry,\n \"material-metalness\": 0.5\n })\n }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(\"group\", {\n scale: [100, 100, 100],\n children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(\"mesh\", {\n material: materials.Objects,\n geometry: nodes.VikingShipObjects001_Objects_0.geometry\n }), /*#__PURE__*/(0, _jsxRuntime.jsx)(\"mesh\", {\n material: materials.Objects,\n geometry: nodes.VikingShipObjects001_Objects_0_1.geometry\n })]\n })]\n })\n })\n });\n}\n_s(Model, \"bAPJCza2qzt0yv+MC1Y/AQIi0Vc=\", false, function () {\n return [_drei.useGLTF];\n});\n_c = Model;\nvar _c;\n$RefreshReg$(_c, \"Model\");\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfZHJlaSIsIl9qc3hSdW50aW1lIiwiX2pzeEZpbGVOYW1lIiwiX3MiLCIkUmVmcmVzaFNpZyQiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJub2RlSW50ZXJvcCIsIldlYWtNYXAiLCJjYWNoZUJhYmVsSW50ZXJvcCIsImNhY2hlTm9kZUludGVyb3AiLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImNhY2hlIiwiaGFzIiwiZ2V0IiwibmV3T2JqIiwiaGFzUHJvcGVydHlEZXNjcmlwdG9yIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJkZXNjIiwic2V0IiwiTW9kZWwiLCJwcm9wcyIsImdyb3VwIiwidXNlUmVmIiwibm9kZXMiLCJtYXRlcmlhbHMiLCJ1c2VHTFRGIiwianN4IiwicmVmIiwiZGlzcG9zZSIsImNoaWxkcmVuIiwicm90YXRpb24iLCJNYXRoIiwiUEkiLCJzY2FsZSIsImpzeHMiLCJtYXRlcmlhbCIsIkV5ZUZpcmUiLCJnZW9tZXRyeSIsIkNpcmNsZTAxMV9FeWVGaXJlXzAiLCJTZXJwZW50QmFrZSIsIkNpcmNsZTAxMV9TZXJwZW50QmFrZV8wIiwicG9zaXRpb24iLCJIaWRlMDAzX0V5ZUZpcmVfMCIsIkJvYXQyQmFrZSIsIkhpZGUwMDNfQm9hdDJCYWtlXzAiLCJLZWVsMDAyX0V5ZUZpcmVfMCIsIkJvYXQxQmFrZSIsIktlZWwwMDJfQm9hdDFCYWtlXzAiLCJQbGFuZTA0NF9XYXRlckJha2VfMCIsImNvbG9yIiwidHJhbnNtaXNzaW9uIiwidGhpY2tuZXNzIiwicm91Z2huZXNzIiwiZW52TWFwSW50ZW5zaXR5IiwiY2xlYXJjb2F0IiwiUm9ja0Jha2UiLCJSb2NrMDIxX1JvY2tCYWtlXzAiLCJPYmplY3RzIiwiVmlraW5nU2hpcE9iamVjdHMwMDFfT2JqZWN0c18wIiwiVmlraW5nU2hpcE9iamVjdHMwMDFfT2JqZWN0c18wXzEiLCJfYyIsIiRSZWZyZXNoUmVnJCJdLCJzb3VyY2VzIjpbIi9zcmMvTW9kZWwudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5hdXRvLWdlbmVyYXRlZCBieTogaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0LXNwcmluZy9nbHRmanN4XG5hdXRob3I6IE1yRW1qZVIgKGh0dHBzOi8vc2tldGNoZmFiLmNvbS9NYXR0aGlqc0RlUmlqaylcbmxpY2Vuc2U6IENDLUJZLTQuMCAoaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvNC4wLylcbnNvdXJjZTogaHR0cHM6Ly9za2V0Y2hmYWIuY29tL21vZGVscy8yZWY0YzQ1Y2FhMzU0NTBkYjFiODc2YTdmOTRmZjc5ZFxudGl0bGU6IFRob3IgYW5kIHRoZSBNaWRnYXJkIFNlcnBlbnRcbiovXG5cbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gXCJ0aHJlZVwiXG5pbXBvcnQgUmVhY3QsIHsgdXNlUmVmIH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7IHVzZUdMVEYgfSBmcm9tIFwiQHJlYWN0LXRocmVlL2RyZWlcIlxuXG50eXBlIEdMVEZSZXN1bHQgPSBHTFRGICYge1xuICBub2Rlczoge1xuICAgIENpcmNsZTAxMV9FeWVGaXJlXzA6IFRIUkVFLk1lc2hcbiAgICBDaXJjbGUwMTFfU2VycGVudEJha2VfMDogVEhSRUUuTWVzaFxuICAgIEhpZGUwMDNfRXllRmlyZV8wOiBUSFJFRS5NZXNoXG4gICAgSGlkZTAwM19Cb2F0MkJha2VfMDogVEhSRUUuTWVzaFxuICAgIEtlZWwwMDJfRXllRmlyZV8wOiBUSFJFRS5NZXNoXG4gICAgS2VlbDAwMl9Cb2F0MUJha2VfMDogVEhSRUUuTWVzaFxuICAgIFBsYW5lMDQ0X1dhdGVyQmFrZV8wOiBUSFJFRS5NZXNoXG4gICAgUm9jazAyMV9Sb2NrQmFrZV8wOiBUSFJFRS5NZXNoXG4gICAgVmlraW5nU2hpcE9iamVjdHMwMDFfT2JqZWN0c18wOiBUSFJFRS5NZXNoXG4gICAgVmlraW5nU2hpcE9iamVjdHMwMDFfT2JqZWN0c18wXzE6IFRIUkVFLk1lc2hcbiAgfVxuICBtYXRlcmlhbHM6IHtcbiAgICBFeWVGaXJlOiBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbFxuICAgIFNlcnBlbnRCYWtlOiBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbFxuICAgIEJvYXQyQmFrZTogVEhSRUUuTWVzaFN0YW5kYXJkTWF0ZXJpYWxcbiAgICBCb2F0MUJha2U6IFRIUkVFLk1lc2hTdGFuZGFyZE1hdGVyaWFsXG4gICAgV2F0ZXJCYWtlOiBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbFxuICAgIFJvY2tCYWtlOiBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbFxuICAgIE9iamVjdHM6IFRIUkVFLk1lc2hTdGFuZGFyZE1hdGVyaWFsXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTW9kZWwocHJvcHM6IEpTWC5JbnRyaW5zaWNFbGVtZW50c1tcImdyb3VwXCJdKSB7XG4gIGNvbnN0IGdyb3VwID0gdXNlUmVmKClcbiAgY29uc3QgeyBub2RlcywgbWF0ZXJpYWxzIH0gPSB1c2VHTFRGKFwiL3Rob3JfYW5kX3RoZV9taWRnYXJkX3NlcnBlbnQtdHJhbnNmb3JtZWQuZ2xiXCIpIGFzIEdMVEZSZXN1bHRcbiAgcmV0dXJuIChcbiAgICA8Z3JvdXAgcmVmPXtncm91cH0gey4uLnByb3BzfSBkaXNwb3NlPXtudWxsfT5cbiAgICAgIDxncm91cCByb3RhdGlvbj17Wy1NYXRoLlBJIC8gMiwgMCwgMF19IHNjYWxlPXtbMC4wMSwgMC4wMSwgMC4wMV19PlxuICAgICAgICA8Z3JvdXAgcm90YXRpb249e1tNYXRoLlBJIC8gMiwgMCwgMF19PlxuICAgICAgICAgIDxncm91cCByb3RhdGlvbj17Wy1NYXRoLlBJIC8gMiwgMCwgMF19IHNjYWxlPXtbMTAwLCAxMDAsIDEwMF19PlxuICAgICAgICAgICAgPG1lc2ggbWF0ZXJpYWw9e21hdGVyaWFscy5FeWVGaXJlfSBnZW9tZXRyeT17bm9kZXMuQ2lyY2xlMDExX0V5ZUZpcmVfMC5nZW9tZXRyeX0gLz5cbiAgICAgICAgICAgIDxtZXNoXG4gICAgICAgICAgICAgIG1hdGVyaWFsPXttYXRlcmlhbHMuU2VycGVudEJha2V9XG4gICAgICAgICAgICAgIGdlb21ldHJ5PXtub2Rlcy5DaXJjbGUwMTFfU2VycGVudEJha2VfMC5nZW9tZXRyeX1cbiAgICAgICAgICAgICAgbWF0ZXJpYWwtbWV0YWxuZXNzPXswfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2dyb3VwPlxuICAgICAgICAgIDxncm91cCBwb3NpdGlvbj17Wy0xMDE4LjIsIC0zODAuNTMsIDEzMzIuNjddfSByb3RhdGlvbj17Wy0xLjA1LCAwLjcyLCAtMC4wOF19IHNjYWxlPXtbMTAwLCAxMDAsIDEwMF19PlxuICAgICAgICAgICAgPG1lc2ggbWF0ZXJpYWw9e21hdGVyaWFscy5FeWVGaXJlfSBnZW9tZXRyeT17bm9kZXMuSGlkZTAwM19FeWVGaXJlXzAuZ2VvbWV0cnl9IC8+XG4gICAgICAgICAgICA8bWVzaCBtYXRlcmlhbD17bWF0ZXJpYWxzLkJvYXQyQmFrZX0gZ2VvbWV0cnk9e25vZGVzLkhpZGUwMDNfQm9hdDJCYWtlXzAuZ2VvbWV0cnl9IC8+XG4gICAgICAgICAgPC9ncm91cD5cbiAgICAgICAgICA8Z3JvdXAgcG9zaXRpb249e1szNDkuNTcsIDMyLjMyLCAxNzYuNjRdfSByb3RhdGlvbj17Wy0xLjczLCAtMC4yMywgLTIuNjVdfSBzY2FsZT17WzEwMCwgMTAwLCAxMDBdfT5cbiAgICAgICAgICAgIDxtZXNoIG1hdGVyaWFsPXttYXRlcmlhbHMuRXllRmlyZX0gZ2VvbWV0cnk9e25vZGVzLktlZWwwMDJfRXllRmlyZV8wLmdlb21ldHJ5fSAvPlxuICAgICAgICAgICAgPG1lc2ggbWF0ZXJpYWw9e21hdGVyaWFscy5Cb2F0MUJha2V9IGdlb21ldHJ5PXtub2Rlcy5LZWVsMDAyX0JvYXQxQmFrZV8wLmdlb21ldHJ5fSAvPlxuICAgICAgICAgIDwvZ3JvdXA+XG4gICAgICAgICAgPGdyb3VwIHBvc2l0aW9uPXtbMCwgMjcuMDcsIDBdfSByb3RhdGlvbj17Wy1NYXRoLlBJIC8gMiwgMCwgMF19IHNjYWxlPXtbMTAwLCAxMDAsIDE3MC4wMl19PlxuICAgICAgICAgICAgPG1lc2ggZ2VvbWV0cnk9e25vZGVzLlBsYW5lMDQ0X1dhdGVyQmFrZV8wLmdlb21ldHJ5fT5cbiAgICAgICAgICAgICAgPG1lc2hQaHlzaWNhbE1hdGVyaWFsXG4gICAgICAgICAgICAgICAgY29sb3I9XCJza3libHVlXCJcbiAgICAgICAgICAgICAgICB0cmFuc21pc3Npb249ezF9XG4gICAgICAgICAgICAgICAgdGhpY2tuZXNzPXs1fVxuICAgICAgICAgICAgICAgIHJvdWdobmVzcz17MH1cbiAgICAgICAgICAgICAgICBlbnZNYXBJbnRlbnNpdHk9ezJ9XG4gICAgICAgICAgICAgICAgY2xlYXJjb2F0PXsxfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9tZXNoPlxuICAgICAgICAgIDwvZ3JvdXA+XG4gICAgICAgICAgPGdyb3VwIHJvdGF0aW9uPXtbLU1hdGguUEkgLyAyLCAwLCAwXX0gc2NhbGU9e1sxMDAsIDEwMCwgMTAwXX0+XG4gICAgICAgICAgICA8bWVzaCBtYXRlcmlhbD17bWF0ZXJpYWxzLlJvY2tCYWtlfSBnZW9tZXRyeT17bm9kZXMuUm9jazAyMV9Sb2NrQmFrZV8wLmdlb21ldHJ5fSBtYXRlcmlhbC1tZXRhbG5lc3M9ezAuNX0gLz5cbiAgICAgICAgICA8L2dyb3VwPlxuICAgICAgICAgIDxncm91cCBzY2FsZT17WzEwMCwgMTAwLCAxMDBdfT5cbiAgICAgICAgICAgIDxtZXNoIG1hdGVyaWFsPXttYXRlcmlhbHMuT2JqZWN0c30gZ2VvbWV0cnk9e25vZGVzLlZpa2luZ1NoaXBPYmplY3RzMDAxX09iamVjdHNfMC5nZW9tZXRyeX0gLz5cbiAgICAgICAgICAgIDxtZXNoIG1hdGVyaWFsPXttYXRlcmlhbHMuT2JqZWN0c30gZ2VvbWV0cnk9e25vZGVzLlZpa2luZ1NoaXBPYmplY3RzMDAxX09iamVjdHNfMF8xLmdlb21ldHJ5fSAvPlxuICAgICAgICAgIDwvZ3JvdXA+XG4gICAgICAgIDwvZ3JvdXA+XG4gICAgICA8L2dyb3VwPlxuICAgIDwvZ3JvdXA+XG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBU0EsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsS0FBQSxHQUFBRCxPQUFBO0FBQTJDLElBQUFFLFdBQUEsR0FBQUYsT0FBQTtBQUFBLElBQUFHLFlBQUE7RUFBQUMsRUFBQSxHQUFBQyxZQUFBO0FBVjNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkEsU0FBQUMseUJBQUFDLFdBQUEsZUFBQUMsT0FBQSxrQ0FBQUMsaUJBQUEsT0FBQUQsT0FBQSxRQUFBRSxnQkFBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLENBQUFDLFdBQUEsV0FBQUEsV0FBQSxHQUFBRyxnQkFBQSxHQUFBRCxpQkFBQSxLQUFBRixXQUFBO0FBQUEsU0FBQVIsd0JBQUFZLEdBQUEsRUFBQUosV0FBQSxTQUFBQSxXQUFBLElBQUFJLEdBQUEsSUFBQUEsR0FBQSxDQUFBQyxVQUFBLFdBQUFELEdBQUEsUUFBQUEsR0FBQSxvQkFBQUEsR0FBQSx3QkFBQUEsR0FBQSw0QkFBQUUsT0FBQSxFQUFBRixHQUFBLFVBQUFHLEtBQUEsR0FBQVIsd0JBQUEsQ0FBQUMsV0FBQSxPQUFBTyxLQUFBLElBQUFBLEtBQUEsQ0FBQUMsR0FBQSxDQUFBSixHQUFBLFlBQUFHLEtBQUEsQ0FBQUUsR0FBQSxDQUFBTCxHQUFBLFNBQUFNLE1BQUEsV0FBQUMscUJBQUEsR0FBQUMsTUFBQSxDQUFBQyxjQUFBLElBQUFELE1BQUEsQ0FBQUUsd0JBQUEsV0FBQUMsR0FBQSxJQUFBWCxHQUFBLFFBQUFXLEdBQUEsa0JBQUFILE1BQUEsQ0FBQUksU0FBQSxDQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQWQsR0FBQSxFQUFBVyxHQUFBLFNBQUFJLElBQUEsR0FBQVIscUJBQUEsR0FBQUMsTUFBQSxDQUFBRSx3QkFBQSxDQUFBVixHQUFBLEVBQUFXLEdBQUEsY0FBQUksSUFBQSxLQUFBQSxJQUFBLENBQUFWLEdBQUEsSUFBQVUsSUFBQSxDQUFBQyxHQUFBLEtBQUFSLE1BQUEsQ0FBQUMsY0FBQSxDQUFBSCxNQUFBLEVBQUFLLEdBQUEsRUFBQUksSUFBQSxZQUFBVCxNQUFBLENBQUFLLEdBQUEsSUFBQVgsR0FBQSxDQUFBVyxHQUFBLFNBQUFMLE1BQUEsQ0FBQUosT0FBQSxHQUFBRixHQUFBLE1BQUFHLEtBQUEsSUFBQUEsS0FBQSxDQUFBYSxHQUFBLENBQUFoQixHQUFBLEVBQUFNLE1BQUEsWUFBQUEsTUFBQTtBQW9DZSxTQUFTVyxLQUFLQSxDQUFDQyxLQUFxQyxFQUFFO0VBQUF6QixFQUFBO0VBQ25FLE1BQU0wQixLQUFLLEdBQUcsSUFBQUMsYUFBTSxFQUFDLENBQUM7RUFDdEIsTUFBTTtJQUFFQyxLQUFLO0lBQUVDO0VBQVUsQ0FBQyxHQUFHLElBQUFDLGFBQU8sRUFBQywrQ0FBK0MsQ0FBZTtFQUNuRyxvQkFDRSxJQUFBaEMsV0FBQSxDQUFBaUMsR0FBQTtJQUFPQyxHQUFHLEVBQUVOLEtBQU07SUFBQSxHQUFLRCxLQUFLO0lBQUVRLE9BQU8sRUFBRSxJQUFLO0lBQUFDLFFBQUEsZUFDMUMsSUFBQXBDLFdBQUEsQ0FBQWlDLEdBQUE7TUFBT0ksUUFBUSxFQUFFLENBQUMsQ0FBQ0MsSUFBSSxDQUFDQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUU7TUFBQ0MsS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUU7TUFBQUosUUFBQSxlQUMvRCxJQUFBcEMsV0FBQSxDQUFBeUMsSUFBQTtRQUFPSixRQUFRLEVBQUUsQ0FBQ0MsSUFBSSxDQUFDQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUU7UUFBQUgsUUFBQSxnQkFDbkMsSUFBQXBDLFdBQUEsQ0FBQXlDLElBQUE7VUFBT0osUUFBUSxFQUFFLENBQUMsQ0FBQ0MsSUFBSSxDQUFDQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUU7VUFBQ0MsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUU7VUFBQUosUUFBQSxnQkFDNUQsSUFBQXBDLFdBQUEsQ0FBQWlDLEdBQUE7WUFBTVMsUUFBUSxFQUFFWCxTQUFTLENBQUNZLE9BQVE7WUFBQ0MsUUFBUSxFQUFFZCxLQUFLLENBQUNlLG1CQUFtQixDQUFDRDtVQUFTLENBQUUsQ0FBQyxlQUNuRixJQUFBNUMsV0FBQSxDQUFBaUMsR0FBQTtZQUNFUyxRQUFRLEVBQUVYLFNBQVMsQ0FBQ2UsV0FBWTtZQUNoQ0YsUUFBUSxFQUFFZCxLQUFLLENBQUNpQix1QkFBdUIsQ0FBQ0gsUUFBUztZQUNqRCxzQkFBb0I7VUFBRSxDQUN2QixDQUFDO1FBQUEsQ0FDRyxDQUFDLGVBQ1IsSUFBQTVDLFdBQUEsQ0FBQXlDLElBQUE7VUFBT08sUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFFO1VBQUNYLFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksQ0FBRTtVQUFDRyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBRTtVQUFBSixRQUFBLGdCQUNuRyxJQUFBcEMsV0FBQSxDQUFBaUMsR0FBQTtZQUFNUyxRQUFRLEVBQUVYLFNBQVMsQ0FBQ1ksT0FBUTtZQUFDQyxRQUFRLEVBQUVkLEtBQUssQ0FBQ21CLGlCQUFpQixDQUFDTDtVQUFTLENBQUUsQ0FBQyxlQUNqRixJQUFBNUMsV0FBQSxDQUFBaUMsR0FBQTtZQUFNUyxRQUFRLEVBQUVYLFNBQVMsQ0FBQ21CLFNBQVU7WUFBQ04sUUFBUSxFQUFFZCxLQUFLLENBQUNxQixtQkFBbUIsQ0FBQ1A7VUFBUyxDQUFFLENBQUM7UUFBQSxDQUNoRixDQUFDLGVBQ1IsSUFBQTVDLFdBQUEsQ0FBQXlDLElBQUE7VUFBT08sUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUU7VUFBQ1gsUUFBUSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUU7VUFBQ0csS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUU7VUFBQUosUUFBQSxnQkFDaEcsSUFBQXBDLFdBQUEsQ0FBQWlDLEdBQUE7WUFBTVMsUUFBUSxFQUFFWCxTQUFTLENBQUNZLE9BQVE7WUFBQ0MsUUFBUSxFQUFFZCxLQUFLLENBQUNzQixpQkFBaUIsQ0FBQ1I7VUFBUyxDQUFFLENBQUMsZUFDakYsSUFBQTVDLFdBQUEsQ0FBQWlDLEdBQUE7WUFBTVMsUUFBUSxFQUFFWCxTQUFTLENBQUNzQixTQUFVO1lBQUNULFFBQVEsRUFBRWQsS0FBSyxDQUFDd0IsbUJBQW1CLENBQUNWO1VBQVMsQ0FBRSxDQUFDO1FBQUEsQ0FDaEYsQ0FBQyxlQUNSLElBQUE1QyxXQUFBLENBQUFpQyxHQUFBO1VBQU9lLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFFO1VBQUNYLFFBQVEsRUFBRSxDQUFDLENBQUNDLElBQUksQ0FBQ0MsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFFO1VBQUNDLEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFFO1VBQUFKLFFBQUEsZUFDeEYsSUFBQXBDLFdBQUEsQ0FBQWlDLEdBQUE7WUFBTVcsUUFBUSxFQUFFZCxLQUFLLENBQUN5QixvQkFBb0IsQ0FBQ1gsUUFBUztZQUFBUixRQUFBLGVBQ2xELElBQUFwQyxXQUFBLENBQUFpQyxHQUFBO2NBQ0V1QixLQUFLLEVBQUMsU0FBUztjQUNmQyxZQUFZLEVBQUUsQ0FBRTtjQUNoQkMsU0FBUyxFQUFFLENBQUU7Y0FDYkMsU0FBUyxFQUFFLENBQUU7Y0FDYkMsZUFBZSxFQUFFLENBQUU7Y0FDbkJDLFNBQVMsRUFBRTtZQUFFLENBQ2Q7VUFBQyxDQUNFO1FBQUMsQ0FDRixDQUFDLGVBQ1IsSUFBQTdELFdBQUEsQ0FBQWlDLEdBQUE7VUFBT0ksUUFBUSxFQUFFLENBQUMsQ0FBQ0MsSUFBSSxDQUFDQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUU7VUFBQ0MsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUU7VUFBQUosUUFBQSxlQUM1RCxJQUFBcEMsV0FBQSxDQUFBaUMsR0FBQTtZQUFNUyxRQUFRLEVBQUVYLFNBQVMsQ0FBQytCLFFBQVM7WUFBQ2xCLFFBQVEsRUFBRWQsS0FBSyxDQUFDaUMsa0JBQWtCLENBQUNuQixRQUFTO1lBQUMsc0JBQW9CO1VBQUksQ0FBRTtRQUFDLENBQ3ZHLENBQUMsZUFDUixJQUFBNUMsV0FBQSxDQUFBeUMsSUFBQTtVQUFPRCxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBRTtVQUFBSixRQUFBLGdCQUM1QixJQUFBcEMsV0FBQSxDQUFBaUMsR0FBQTtZQUFNUyxRQUFRLEVBQUVYLFNBQVMsQ0FBQ2lDLE9BQVE7WUFBQ3BCLFFBQVEsRUFBRWQsS0FBSyxDQUFDbUMsOEJBQThCLENBQUNyQjtVQUFTLENBQUUsQ0FBQyxlQUM5RixJQUFBNUMsV0FBQSxDQUFBaUMsR0FBQTtZQUFNUyxRQUFRLEVBQUVYLFNBQVMsQ0FBQ2lDLE9BQVE7WUFBQ3BCLFFBQVEsRUFBRWQsS0FBSyxDQUFDb0MsZ0NBQWdDLENBQUN0QjtVQUFTLENBQUUsQ0FBQztRQUFBLENBQzNGLENBQUM7TUFBQSxDQUNIO0lBQUMsQ0FDSDtFQUFDLENBQ0gsQ0FBQztBQUVaO0FBQUMxQyxFQUFBLENBOUN1QndCLEtBQUs7RUFBQSxRQUVFTSxhQUFPO0FBQUE7QUFBQW1DLEVBQUEsR0FGZHpDLEtBQUs7QUFBQSxJQUFBeUMsRUFBQTtBQUFBQyxZQUFBLENBQUFELEVBQUEifQ==\n_csbRefreshUtils.postlude(module);} finally { window.$RefreshReg$ = prevRefreshReg; window.$RefreshSig$ = prevRefreshSig;}","sourceEqualsCompiled":false}},"/node_modules/@use-gesture/core/10.2.20/actions/dist/use-gesture-core-actions.esm.js:":{"query":"","module":{"path":"/node_modules/@use-gesture/core/10.2.20/actions/dist/use-gesture-core-actions.esm.js","code":"export { C as ConfigResolverMap, E as EngineMap, e as dragAction, h as hoverAction, m as moveAction, f as pinchAction, r as registerAction, s as scrollAction, w as wheelAction } from '../../dist/actions-aeda4790.esm.js';\nimport '../../dist/maths-b2a210f4.esm.js';\n","downloaded":true},"isEntry":false,"isTestFile":false,"sourceEqualsCompiled":false,"childModules":[],"dependencies":["/node_modules/@use-gesture/core/10.2.20/dist/actions-aeda4790.esm.js:","/node_modules/@use-gesture/core/10.2.20/dist/maths-b2a210f4.esm.js:"],"initiators":["/node_modules/@use-gesture/react/dist/use-gesture-react.esm.js:"],"transpilationDependencies":[],"transpilationInitiators":[],"asyncDependencies":[],"warnings":[],"hasMissingDependencies":false,"source":null},"/node_modules/@use-gesture/core/10.2.20/utils/dist/use-gesture-core-utils.esm.js:":{"query":"","module":{"path":"/node_modules/@use-gesture/core/10.2.20/utils/dist/use-gesture-core-utils.esm.js","code":"export { r as rubberbandIfOutOfBounds } from '../../dist/maths-b2a210f4.esm.js';\n","downloaded":true},"isEntry":false,"isTestFile":false,"sourceEqualsCompiled":false,"childModules":[],"dependencies":["/node_modules/@use-gesture/core/10.2.20/dist/maths-b2a210f4.esm.js:"],"initiators":["/node_modules/@use-gesture/react/dist/use-gesture-react.esm.js:"],"transpilationDependencies":[],"transpilationInitiators":[],"asyncDependencies":[],"warnings":[],"hasMissingDependencies":false,"source":null},"/node_modules/@use-gesture/core/10.2.20/types/dist/use-gesture-core-types.esm.js:":{"query":"","module":{"path":"/node_modules/@use-gesture/core/10.2.20/types/dist/use-gesture-core-types.esm.js","code":"\n","downloaded":true},"isEntry":false,"isTestFile":false,"sourceEqualsCompiled":true,"childModules":[],"dependencies":[],"initiators":["/node_modules/@use-gesture/react/dist/use-gesture-react.esm.js:"],"transpilationDependencies":[],"transpilationInitiators":[],"asyncDependencies":[],"warnings":[],"hasMissingDependencies":false,"source":null},"/node_modules/csbbust/refresh-helper.js:":{"query":"","module":{"path":"/node_modules/csbbust/refresh-helper.js","parent":{"code":"import { createRoot } from \"react-dom/client\"\nimport React from \"react\"\nimport App from \"./App\"\nimport \"./styles.css\"\n\ncreateRoot(document.getElementById(\"root\")).render(\u003cApp />)\n","path":"/src/index.tsx"},"code":"const RefreshRuntime = require('react-refresh/runtime');\n\nfunction debounce(fn, delay) {\n var handle;\n return () => {\n clearTimeout(handle);\n handle = setTimeout(fn, delay);\n };\n}\n\nconst enqueueUpdate = debounce(() => {\n try {\n RefreshRuntime.performReactRefresh();\n } catch (e) {\n module.hot.decline();\n throw e;\n }\n}, 30);\n\nfunction isReactRefreshBoundary(moduleExports) {\n if (Object.keys(RefreshRuntime).length === 0) {\n return false;\n }\n\n if (RefreshRuntime.isLikelyComponentType(moduleExports)) {\n return true;\n }\n\n if (moduleExports == null || typeof moduleExports !== 'object') {\n /** Exit if we can't iterate over exports. */\n return false;\n }\n\n let hasExports = false;\n let areAllExportsComponents = true;\n for (const key in moduleExports) {\n hasExports = true;\n\n if (key === '__esModule') {\n continue;\n }\n\n const desc = Object.getOwnPropertyDescriptor(moduleExports, key);\n if (desc && desc.get) {\n /** Don't invoke getters as they may have side effects. */\n return false;\n }\n\n const exportValue = moduleExports[key];\n if (!RefreshRuntime.isLikelyComponentType(exportValue)) {\n areAllExportsComponents = false;\n }\n }\n \n return hasExports && areAllExportsComponents;\n};\n\n/** When this signature changes, it's unsafe to stop at this refresh boundary. */\nfunction getRefreshBoundarySignature(moduleExports) {\n const signature = [];\n signature.push(RefreshRuntime.getFamilyByType(moduleExports));\n if (moduleExports == null || typeof moduleExports !== 'object') {\n /** Exit if we can't iterate over exports. */\n /** (This is important for legacy environments.) */\n return signature;\n }\n\n for (const key in moduleExports) {\n if (key === '__esModule') {\n continue;\n }\n\n const desc = Object.getOwnPropertyDescriptor(moduleExports, key);\n if (desc && desc.get) {\n continue;\n }\n\n const exportValue = moduleExports[key];\n signature.push(key);\n signature.push(RefreshRuntime.getFamilyByType(exportValue));\n }\n\n return signature;\n};\n\nfunction shouldInvalidateReactRefreshBoundary(\n prevExports,\n nextExports,\n) {\n const prevSignature = getRefreshBoundarySignature(prevExports);\n const nextSignature = getRefreshBoundarySignature(nextExports);\n if (prevSignature.length !== nextSignature.length) {\n return true;\n }\n \n for (let i = 0; i \u003c nextSignature.length; i++) {\n if (prevSignature[i] !== nextSignature[i]) {\n return true;\n }\n }\n\n return false;\n};\n\nvar registerExportsForReactRefresh = (moduleExports, moduleID) => {\n RefreshRuntime.register(moduleExports, moduleID + ' %exports%');\n if (moduleExports == null || typeof moduleExports !== 'object') {\n /** Exit if we can't iterate over exports. */\n /** (This is important for legacy environments.) */\n return;\n }\n for (const key in moduleExports) {\n const desc = Object.getOwnPropertyDescriptor(moduleExports, key);\n if (desc && desc.get) {\n /** Don't invoke getters as they may have side effects. */\n continue;\n }\n const exportValue = moduleExports[key];\n const typeID = moduleID + ' %exports% ' + key;\n RefreshRuntime.register(exportValue, typeID);\n }\n};\n\nfunction prelude(module) {\n window.$RefreshReg$ = (type, id) => {\n /** Note module.id is webpack-specific, this may vary in other bundlers */\n const fullId = module.id + ' ' + id;\n RefreshRuntime.register(type, fullId);\n }\n \n window.$RefreshSig$ = RefreshRuntime.createSignatureFunctionForTransform;\n}\n\nfunction postlude(module) {\n const isHotUpdate = !!module.hot.data;\n const prevExports = isHotUpdate ? module.hot.data.prevExports : null;\n if (isReactRefreshBoundary(module.exports)) {\n registerExportsForReactRefresh(module.exports, module.id);\n const currentExports = { ...module.exports };\n\n module.hot.dispose(function hotDisposeCallback(data) {\n data.prevExports = currentExports;\n });\n\n if (isHotUpdate && shouldInvalidateReactRefreshBoundary(prevExports, currentExports)) {\n module.hot.invalidate();\n } else {\n module.hot.accept();\n }\n\n enqueueUpdate();\n } else if (isHotUpdate && isReactRefreshBoundary(prevExports)) {\n module.hot.invalidate();\n }\n}\n\nmodule.exports = {\n enqueueUpdate,\n isReactRefreshBoundary,\n registerExportsForReactRefresh,\n shouldInvalidateReactRefreshBoundary,\n prelude,\n postlude,\n};"},"isEntry":false,"isTestFile":false,"sourceEqualsCompiled":true,"childModules":[],"dependencies":["/node_modules/react-refresh/runtime.js:"],"initiators":["/src/App.tsx:","/src/index.tsx:","/src/Model.tsx:"],"transpilationDependencies":[],"transpilationInitiators":[],"asyncDependencies":[],"warnings":[],"hasMissingDependencies":false,"source":null},"/node_modules/react/jsx-runtime.js:":{"query":"","module":{"path":"/node_modules/react/jsx-runtime.js","code":"'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","downloaded":true},"isEntry":false,"isTestFile":false,"sourceEqualsCompiled":true,"childModules":[],"dependencies":["/node_modules/react/cjs/react-jsx-runtime.production.min.js:","/node_modules/react/cjs/react-jsx-runtime.development.js:"],"initiators":["/src/App.tsx:","/src/index.tsx:","/src/Model.tsx:"],"transpilationDependencies":[],"transpilationInitiators":[],"asyncDependencies":[],"warnings":[],"hasMissingDependencies":false,"source":null},"/node_modules/react-dom/client.js:":{"query":"","module":{"path":"/node_modules/react-dom/client.js","code":"'use strict';\n\nvar m = require('react-dom');\nif (process.env.NODE_ENV === 'production') {\n exports.createRoot = m.createRoot;\n exports.hydrateRoot = m.hydrateRoot;\n} else {\n var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n exports.createRoot = function(c, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.createRoot(c, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n exports.hydrateRoot = function(c, h, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.hydrateRoot(c, h, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n}\n","downloaded":true},"isEntry":false,"isTestFile":false,"sourceEqualsCompiled":true,"childModules":[],"dependencies":["/node_modules/react-dom/index.js:"],"initiators":["/src/index.tsx:","/node_modules/@react-three/drei/web/Html.js:","/node_modules/@react-three/drei/web/ScrollControls.js:"],"transpilationDependencies":[],"transpilationInitiators":[],"asyncDependencies":[],"warnings":[],"hasMissingDependencies":false,"source":null},"/node_modules/@babel/runtime/helpers/interopRequireDefault.js:":{"query":"","module":{"path":"/node_modules/@babel/runtime/helpers/interopRequireDefault.js","code":"function _interopRequireDefault(e) {\n return e && e.__esModule ? e : {\n \"default\": e\n };\n}\nmodule.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","downloaded":true},"isEntry":false,"isTestFile":false,"sourceEqualsCompiled":true,"childModules":[],"dependencies":[],"initiators":["/src/App.tsx:","/src/index.tsx:","/src/Model.tsx:"],"transpilationDependencies":[],"transpilationInitiators":[],"asyncDependencies":[],"warnings":[],"hasMissingDependencies":false,"source":null},"/node_modules/@babel/runtime/helpers/interopRequireWildcard.js:":{"query":"","module":{"path":"/node_modules/@babel/runtime/helpers/interopRequireWildcard.js","code":"var _typeof = require(\"./typeof.js\")[\"default\"];\nfunction _interopRequireWildcard(e, t) {\n if (\"function\" == typeof WeakMap) var r = new WeakMap(),\n n = new WeakMap();\n return (module.exports = _interopRequireWildcard = function _interopRequireWildcard(e, t) {\n if (!t && e && e.__esModule) return e;\n var o,\n i,\n f = {\n __proto__: null,\n \"default\": e\n };\n if (null === e || \"object\" != _typeof(e) && \"function\" != typeof e) return f;\n if (o = t ? n : r) {\n if (o.has(e)) return o.get(e);\n o.set(e, f);\n }\n for (var _t in e) \"default\" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]);\n return f;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports)(e, t);\n}\nmodule.exports = _interopRequireWildcard, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","downloaded":true},"isEntry":false,"isTestFile":false,"sourceEqualsCompiled":true,"childModules":[],"dependencies":["/node_modules/@babel/runtime/helpers/typeof.js:"],"initiators":["/src/App.tsx:","/src/index.tsx:","/src/Model.tsx:"],"transpilationDependencies":[],"transpilationInitiators":[],"asyncDependencies":[],"warnings":[],"hasMissingDependencies":false,"source":null},"/node_modules/opentype.js/dist/fs:":{"query":"","module":{"path":"/node_modules/opentype.js/dist/fs","code":"// empty","requires":[]},"isEntry":false,"isTestFile":false,"sourceEqualsCompiled":true,"childModules":[],"dependencies":[],"initiators":["/node_modules/opentype.js/dist/opentype.module.js:"],"transpilationDependencies":[],"transpilationInitiators":[],"asyncDependencies":[],"warnings":[],"hasMissingDependencies":false,"source":null},"/node_modules/react/cjs/react-jsx-runtime.production.min.js:":{"query":"","module":{"path":"/node_modules/react/cjs/react-jsx-runtime.production.min.js","code":"/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","downloaded":true},"isEntry":false,"isTestFile":false,"sourceEqualsCompiled":true,"childModules":[],"dependencies":["/node_modules/react/index.js:"],"initiators":["/node_modules/react/jsx-runtime.js:"],"transpilationDependencies":[],"transpilationInitiators":[],"asyncDependencies":[],"warnings":[],"hasMissingDependencies":false,"source":null},"/node_modules/react/cjs/react-jsx-runtime.development.js:":{"query":"","module":{"path":"/node_modules/react/cjs/react-jsx-runtime.development.js","code":"/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\nvar React = require('react');\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n\n return null;\n}\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n {\n {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 \u003c _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n var argsWithFormat = args.map(function (item) {\n return String(item);\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n }\n}\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false; // Track which Fiber(s) schedule render work.\n\nvar REACT_MODULE_REFERENCE;\n\n{\n REACT_MODULE_REFERENCE = Symbol.for('react.module.reference');\n}\n\nfunction isValidElementType(type) {\n if (typeof type === 'string' || typeof type === 'function') {\n return true;\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) {\n return true;\n }\n\n if (typeof type === 'object' && type !== null) {\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\n // types supported by any Flight configuration anywhere since\n // we don't know which Flight build this will end up being used\n // with.\n type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var displayName = outerType.displayName;\n\n if (displayName) {\n return displayName;\n }\n\n var functionName = innerType.displayName || innerType.name || '';\n return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\n\n\nfunction getContextName(type) {\n return type.displayName || 'Context';\n} // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\n\n\nfunction getComponentNameFromType(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n\n {\n if (typeof type.tag === 'number') {\n error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n\n if (typeof type === 'function') {\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return 'Fragment';\n\n case REACT_PORTAL_TYPE:\n return 'Portal';\n\n case REACT_PROFILER_TYPE:\n return 'Profiler';\n\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n\n case REACT_SUSPENSE_LIST_TYPE:\n return 'SuspenseList';\n\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n var context = type;\n return getContextName(context) + '.Consumer';\n\n case REACT_PROVIDER_TYPE:\n var provider = type;\n return getContextName(provider._context) + '.Provider';\n\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n\n case REACT_MEMO_TYPE:\n var outerName = type.displayName || null;\n\n if (outerName !== null) {\n return outerName;\n }\n\n return getComponentNameFromType(type.type) || 'Memo';\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n return getComponentNameFromType(init(payload));\n } catch (x) {\n return null;\n }\n }\n\n // eslint-disable-next-line no-fallthrough\n }\n }\n\n return null;\n}\n\nvar assign = Object.assign;\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n {\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n prevLog = console.log;\n prevInfo = console.info;\n prevWarn = console.warn;\n prevError = console.error;\n prevGroup = console.group;\n prevGroupCollapsed = console.groupCollapsed;\n prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n var props = {\n configurable: true,\n enumerable: true,\n value: disabledLog,\n writable: true\n }; // $FlowFixMe Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n info: props,\n log: props,\n warn: props,\n error: props,\n group: props,\n groupCollapsed: props,\n groupEnd: props\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n disabledDepth++;\n }\n}\nfunction reenableLogs() {\n {\n disabledDepth--;\n\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n var props = {\n configurable: true,\n enumerable: true,\n writable: true\n }; // $FlowFixMe Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n log: assign({}, props, {\n value: prevLog\n }),\n info: assign({}, props, {\n value: prevInfo\n }),\n warn: assign({}, props, {\n value: prevWarn\n }),\n error: assign({}, props, {\n value: prevError\n }),\n group: assign({}, props, {\n value: prevGroup\n }),\n groupCollapsed: assign({}, props, {\n value: prevGroupCollapsed\n }),\n groupEnd: assign({}, props, {\n value: prevGroupEnd\n })\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n if (disabledDepth \u003c 0) {\n error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n }\n }\n}\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, source, ownerFn) {\n {\n if (prefix === undefined) {\n // Extract the VM specific prefix used by each line.\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = match && match[1] || '';\n }\n } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n return '\\n' + prefix + name;\n }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n componentFrameCache = new PossiblyWeakMap();\n}\n\nfunction describeNativeComponentFrame(fn, construct) {\n // If something asked for a stack inside a fake render, it should get ignored.\n if ( !fn || reentry) {\n return '';\n }\n\n {\n var frame = componentFrameCache.get(fn);\n\n if (frame !== undefined) {\n return frame;\n }\n }\n\n var control;\n reentry = true;\n var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.\n\n Error.prepareStackTrace = undefined;\n var previousDispatcher;\n\n {\n previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\n // for warnings.\n\n ReactCurrentDispatcher.current = null;\n disableLogs();\n }\n\n try {\n // This should throw.\n if (construct) {\n // Something should be setting the props in the constructor.\n var Fake = function () {\n throw Error();\n }; // $FlowFixMe\n\n\n Object.defineProperty(Fake.prototype, 'props', {\n set: function () {\n // We use a throwing setter instead of frozen or non-writable props\n // because that won't throw in a non-strict mode function.\n throw Error();\n }\n });\n\n if (typeof Reflect === 'object' && Reflect.construct) {\n // We construct a different control for this case to include any extra\n // frames added by the construct call.\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n control = x;\n }\n\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x) {\n control = x;\n }\n\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x) {\n control = x;\n }\n\n fn();\n }\n } catch (sample) {\n // This is inlined manually because closure doesn't do it for us.\n if (sample && control && typeof sample.stack === 'string') {\n // This extracts the first frame from the sample that isn't also in the control.\n // Skipping one frame that we assume is the frame that calls the two.\n var sampleLines = sample.stack.split('\\n');\n var controlLines = control.stack.split('\\n');\n var s = sampleLines.length - 1;\n var c = controlLines.length - 1;\n\n while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n // We expect at least one stack frame to be shared.\n // Typically this will be the root most one. However, stack frames may be\n // cut off due to maximum stack limits. In this case, one maybe cut off\n // earlier than the other. We assume that the sample is longer or the same\n // and there for cut off earlier. So we should find the root most frame in\n // the sample somewhere in the control.\n c--;\n }\n\n for (; s >= 1 && c >= 0; s--, c--) {\n // Next we find the first one that isn't the same which should be the\n // frame that called our sample function and the control.\n if (sampleLines[s] !== controlLines[c]) {\n // In V8, the first line is describing the message but other VMs don't.\n // If we're about to return the first line, and the control is also on the same\n // line, that's a pretty good indicator that our sample threw at same line as\n // the control. I.e. before we entered the sample frame. So we ignore this result.\n // This can happen if you passed a class to function component, or non-function.\n if (s !== 1 || c !== 1) {\n do {\n s--;\n c--; // We may still have similar intermediate frames from the construct call.\n // The next one that isn't the same should be our match though.\n\n if (c \u003c 0 || sampleLines[s] !== controlLines[c]) {\n // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"\u003canonymous>\"\n // but we have a user-provided \"displayName\"\n // splice it in to make the stack more readable.\n\n\n if (fn.displayName && _frame.includes('\u003canonymous>')) {\n _frame = _frame.replace('\u003canonymous>', fn.displayName);\n }\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, _frame);\n }\n } // Return the line we found.\n\n\n return _frame;\n }\n } while (s >= 1 && c >= 0);\n }\n\n break;\n }\n }\n }\n } finally {\n reentry = false;\n\n {\n ReactCurrentDispatcher.current = previousDispatcher;\n reenableLogs();\n }\n\n Error.prepareStackTrace = previousPrepareStackTrace;\n } // Fallback to just using the name if we couldn't make it throw.\n\n\n var name = fn ? fn.displayName || fn.name : '';\n var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, syntheticFrame);\n }\n }\n\n return syntheticFrame;\n}\nfunction describeFunctionComponentFrame(fn, source, ownerFn) {\n {\n return describeNativeComponentFrame(fn, false);\n }\n}\n\nfunction shouldConstruct(Component) {\n var prototype = Component.prototype;\n return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\n\n if (type == null) {\n return '';\n }\n\n if (typeof type === 'function') {\n {\n return describeNativeComponentFrame(type, shouldConstruct(type));\n }\n }\n\n if (typeof type === 'string') {\n return describeBuiltInComponentFrame(type);\n }\n\n switch (type) {\n case REACT_SUSPENSE_TYPE:\n return describeBuiltInComponentFrame('Suspense');\n\n case REACT_SUSPENSE_LIST_TYPE:\n return describeBuiltInComponentFrame('SuspenseList');\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_FORWARD_REF_TYPE:\n return describeFunctionComponentFrame(type.render);\n\n case REACT_MEMO_TYPE:\n // Memo may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n // Lazy may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\n } catch (x) {}\n }\n }\n }\n\n return '';\n}\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar loggedTypeFailures = {};\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame.setExtraStackFrame(null);\n }\n }\n}\n\nfunction checkPropTypes(typeSpecs, values, location, componentName, element) {\n {\n // $FlowFixMe This is okay but Flow doesn't know it.\n var has = Function.call.bind(hasOwnProperty);\n\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n // eslint-disable-next-line react-internal/prod-error-codes\n var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');\n err.name = 'Invariant Violation';\n throw err;\n }\n\n error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\n } catch (ex) {\n error$1 = ex;\n }\n\n if (error$1 && !(error$1 instanceof Error)) {\n setCurrentlyValidatingElement(element);\n\n error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);\n\n setCurrentlyValidatingElement(null);\n }\n\n if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error$1.message] = true;\n setCurrentlyValidatingElement(element);\n\n error('Failed %s type: %s', location, error$1.message);\n\n setCurrentlyValidatingElement(null);\n }\n }\n }\n }\n}\n\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\n\nfunction isArray(a) {\n return isArrayImpl(a);\n}\n\n/*\n * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\n *\n * The functions in this module will throw an easier-to-understand,\n * easier-to-debug exception with a clear errors message message explaining the\n * problem. (Instead of a confusing exception thrown inside the implementation\n * of the `value` object).\n */\n// $FlowFixMe only called in DEV, so void return is not possible.\nfunction typeName(value) {\n {\n // toStringTag is needed for namespaced types like Temporal.Instant\n var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\n var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object';\n return type;\n }\n} // $FlowFixMe only called in DEV, so void return is not possible.\n\n\nfunction willCoercionThrow(value) {\n {\n try {\n testStringCoercion(value);\n return false;\n } catch (e) {\n return true;\n }\n }\n}\n\nfunction testStringCoercion(value) {\n // If you ended up here by following an exception call stack, here's what's\n // happened: you supplied an object or symbol value to React (as a prop, key,\n // DOM attribute, CSS property, string ref, etc.) and when React tried to\n // coerce it to a string using `'' + value`, an exception was thrown.\n //\n // The most common types that will cause this exception are `Symbol` instances\n // and Temporal objects like `Temporal.Instant`. But any object that has a\n // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\n // exception. (Library authors do this to prevent users from using built-in\n // numeric operators like `+` or comparison operators like `>=` because custom\n // methods are needed to perform accurate arithmetic or comparison.)\n //\n // To fix the problem, coerce this object or symbol value to a string before\n // passing it to React. The most reliable way is usually `String(value)`.\n //\n // To find which value is throwing, check the browser or debugger console.\n // Before this exception was thrown, there should be `console.error` output\n // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\n // problem and how that type was used: key, atrribute, input value prop, etc.\n // In most cases, this console output also shows the component and its\n // ancestor components where the exception happened.\n //\n // eslint-disable-next-line react-internal/safe-string-coercion\n return '' + value;\n}\nfunction checkKeyStringCoercion(value) {\n {\n if (willCoercionThrow(value)) {\n error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));\n\n return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n }\n }\n}\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nvar RESERVED_PROPS = {\n key: true,\n ref: true,\n __self: true,\n __source: true\n};\nvar specialPropKeyWarningShown;\nvar specialPropRefWarningShown;\nvar didWarnAboutStringRefs;\n\n{\n didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n {\n if (hasOwnProperty.call(config, 'ref')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n {\n if (hasOwnProperty.call(config, 'key')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.key !== undefined;\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config, self) {\n {\n if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) {\n var componentName = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n if (!didWarnAboutStringRefs[componentName]) {\n error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentNameFromType(ReactCurrentOwner.current.type), config.ref);\n\n didWarnAboutStringRefs[componentName] = true;\n }\n }\n }\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingKey = function () {\n if (!specialPropKeyWarningShown) {\n specialPropKeyWarningShown = true;\n\n error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingKey.isReactWarning = true;\n Object.defineProperty(props, 'key', {\n get: warnAboutAccessingKey,\n configurable: true\n });\n }\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingRef = function () {\n if (!specialPropRefWarningShown) {\n specialPropRefWarningShown = true;\n\n error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingRef.isReactWarning = true;\n Object.defineProperty(props, 'ref', {\n get: warnAboutAccessingRef,\n configurable: true\n });\n }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n var element = {\n // This tag allows us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: ref,\n props: props,\n // Record the component responsible for creating this element.\n _owner: owner\n };\n\n {\n // The validation flag is currently mutative. We put it on\n // an external backing store so that we can freeze the whole object.\n // This can be replaced with a WeakMap once they are implemented in\n // commonly used development environments.\n element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n // the validation flag non-enumerable (where possible, which should\n // include every environment we run tests in), so the test framework\n // ignores it.\n\n Object.defineProperty(element._store, 'validated', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: false\n }); // self and source are DEV only properties.\n\n Object.defineProperty(element, '_self', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: self\n }); // Two elements created in two different places should be considered\n // equal for testing purposes and therefore we hide it from enumeration.\n\n Object.defineProperty(element, '_source', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: source\n });\n\n if (Object.freeze) {\n Object.freeze(element.props);\n Object.freeze(element);\n }\n }\n\n return element;\n};\n/**\n * https://github.com/reactjs/rfcs/pull/107\n * @param {*} type\n * @param {object} props\n * @param {string} key\n */\n\nfunction jsxDEV(type, config, maybeKey, source, self) {\n {\n var propName; // Reserved names are extracted\n\n var props = {};\n var key = null;\n var ref = null; // Currently, key can be spread in as a prop. This causes a potential\n // issue if key is also explicitly declared (ie. \u003cdiv {...props} key=\"Hi\" />\n // or \u003cdiv key=\"Hi\" {...props} /> ). We want to deprecate key spread,\n // but as an intermediary step, we will use jsxDEV for everything except\n // \u003cdiv {...props} key=\"Hi\" />, because we aren't currently able to tell if\n // key is explicitly declared to be undefined or not.\n\n if (maybeKey !== undefined) {\n {\n checkKeyStringCoercion(maybeKey);\n }\n\n key = '' + maybeKey;\n }\n\n if (hasValidKey(config)) {\n {\n checkKeyStringCoercion(config.key);\n }\n\n key = '' + config.key;\n }\n\n if (hasValidRef(config)) {\n ref = config.ref;\n warnIfStringRefCannotBeAutoConverted(config, self);\n } // Remaining properties are added to a new props object\n\n\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n props[propName] = config[propName];\n }\n } // Resolve default props\n\n\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n }\n\n if (key || ref) {\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n if (key) {\n defineKeyPropWarningGetter(props, displayName);\n }\n\n if (ref) {\n defineRefPropWarningGetter(props, displayName);\n }\n }\n\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n }\n}\n\nvar ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement$1(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame$1.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame$1.setExtraStackFrame(null);\n }\n }\n}\n\nvar propTypesMisspellWarningShown;\n\n{\n propTypesMisspellWarningShown = false;\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\n\nfunction isValidElement(object) {\n {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n }\n}\n\nfunction getDeclarationErrorAddendum() {\n {\n if (ReactCurrentOwner$1.current) {\n var name = getComponentNameFromType(ReactCurrentOwner$1.current.type);\n\n if (name) {\n return '\\n\\nCheck the render method of `' + name + '`.';\n }\n }\n\n return '';\n }\n}\n\nfunction getSourceInfoErrorAddendum(source) {\n {\n if (source !== undefined) {\n var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n var lineNumber = source.lineNumber;\n return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n }\n\n return '';\n }\n}\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n {\n var info = getDeclarationErrorAddendum();\n\n if (!info) {\n var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n\n if (parentName) {\n info = \"\\n\\nCheck the top-level render call using \u003c\" + parentName + \">.\";\n }\n }\n\n return info;\n }\n}\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\n\nfunction validateExplicitKey(element, parentType) {\n {\n if (!element._store || element._store.validated || element.key != null) {\n return;\n }\n\n element._store.validated = true;\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n return;\n }\n\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n // property, it may be the creator of the child that's responsible for\n // assigning it a key.\n\n var childOwner = '';\n\n if (element && element._owner && element._owner !== ReactCurrentOwner$1.current) {\n // Give the component that originally created this child.\n childOwner = \" It was passed a child from \" + getComponentNameFromType(element._owner.type) + \".\";\n }\n\n setCurrentlyValidatingElement$1(element);\n\n error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\n\n setCurrentlyValidatingElement$1(null);\n }\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n {\n if (typeof node !== 'object') {\n return;\n }\n\n if (isArray(node)) {\n for (var i = 0; i \u003c node.length; i++) {\n var child = node[i];\n\n if (isValidElement(child)) {\n validateExplicitKey(child, parentType);\n }\n }\n } else if (isValidElement(node)) {\n // This element was passed in a valid location.\n if (node._store) {\n node._store.validated = true;\n }\n } else if (node) {\n var iteratorFn = getIteratorFn(node);\n\n if (typeof iteratorFn === 'function') {\n // Entry iterators used to provide implicit keys,\n // but now we print a separate warning for them later.\n if (iteratorFn !== node.entries) {\n var iterator = iteratorFn.call(node);\n var step;\n\n while (!(step = iterator.next()).done) {\n if (isValidElement(step.value)) {\n validateExplicitKey(step.value, parentType);\n }\n }\n }\n }\n }\n }\n}\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\n\n\nfunction validatePropTypes(element) {\n {\n var type = element.type;\n\n if (type === null || type === undefined || typeof type === 'string') {\n return;\n }\n\n var propTypes;\n\n if (typeof type === 'function') {\n propTypes = type.propTypes;\n } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\n // Inner props are checked in the reconciler.\n type.$$typeof === REACT_MEMO_TYPE)) {\n propTypes = type.propTypes;\n } else {\n return;\n }\n\n if (propTypes) {\n // Intentionally inside to avoid triggering lazy initializers:\n var name = getComponentNameFromType(type);\n checkPropTypes(propTypes, element.props, 'prop', name, element);\n } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:\n\n var _name = getComponentNameFromType(type);\n\n error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');\n }\n\n if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\n error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\n }\n }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n {\n var keys = Object.keys(fragment.props);\n\n for (var i = 0; i \u003c keys.length; i++) {\n var key = keys[i];\n\n if (key !== 'children' && key !== 'key') {\n setCurrentlyValidatingElement$1(fragment);\n\n error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n setCurrentlyValidatingElement$1(null);\n break;\n }\n }\n\n if (fragment.ref !== null) {\n setCurrentlyValidatingElement$1(fragment);\n\n error('Invalid attribute `ref` supplied to `React.Fragment`.');\n\n setCurrentlyValidatingElement$1(null);\n }\n }\n}\n\nfunction jsxWithValidation(type, props, key, isStaticChildren, source, self) {\n {\n var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\n // succeed and there will likely be errors in render.\n\n if (!validType) {\n var info = '';\n\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n }\n\n var sourceInfo = getSourceInfoErrorAddendum(source);\n\n if (sourceInfo) {\n info += sourceInfo;\n } else {\n info += getDeclarationErrorAddendum();\n }\n\n var typeString;\n\n if (type === null) {\n typeString = 'null';\n } else if (isArray(type)) {\n typeString = 'array';\n } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n typeString = \"\u003c\" + (getComponentNameFromType(type.type) || 'Unknown') + \" />\";\n info = ' Did you accidentally export a JSX literal instead of a component?';\n } else {\n typeString = typeof type;\n }\n\n error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n }\n\n var element = jsxDEV(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used.\n // TODO: Drop this when these are no longer allowed as the type argument.\n\n if (element == null) {\n return element;\n } // Skip key warning if the type isn't valid since our key validation logic\n // doesn't expect a non-string/function type and can throw confusing errors.\n // We don't want exception behavior to differ between dev and prod.\n // (Rendering will throw with a helpful message and as soon as the type is\n // fixed, the key warnings will appear.)\n\n\n if (validType) {\n var children = props.children;\n\n if (children !== undefined) {\n if (isStaticChildren) {\n if (isArray(children)) {\n for (var i = 0; i \u003c children.length; i++) {\n validateChildKeys(children[i], type);\n }\n\n if (Object.freeze) {\n Object.freeze(children);\n }\n } else {\n error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');\n }\n } else {\n validateChildKeys(children, type);\n }\n }\n }\n\n if (type === REACT_FRAGMENT_TYPE) {\n validateFragmentProps(element);\n } else {\n validatePropTypes(element);\n }\n\n return element;\n }\n} // These two functions exist to still get child warnings in dev\n// even with the prod transform. This means that jsxDEV is purely\n// opt-in behavior for better messages but that we won't stop\n// giving you warnings if you use production apis.\n\nfunction jsxWithValidationStatic(type, props, key) {\n {\n return jsxWithValidation(type, props, key, true);\n }\n}\nfunction jsxWithValidationDynamic(type, props, key) {\n {\n return jsxWithValidation(type, props, key, false);\n }\n}\n\nvar jsx = jsxWithValidationDynamic ; // we may want to special case jsxs internally to take advantage of static children.\n// for now we can ship identical prod functions\n\nvar jsxs = jsxWithValidationStatic ;\n\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsx;\nexports.jsxs = jsxs;\n })();\n}\n","downloaded":true},"isEntry":false,"isTestFile":false,"sourceEqualsCompiled":true,"childModules":[],"dependencies":["/node_modules/react/index.js:"],"initiators":["/node_modules/react/jsx-runtime.js:"],"transpilationDependencies":[],"transpilationInitiators":[],"asyncDependencies":[],"warnings":[],"hasMissingDependencies":false,"source":null},"/node_modules/@babel/runtime/helpers/typeof.js:":{"query":"","module":{"path":"/node_modules/@babel/runtime/helpers/typeof.js","code":"function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _typeof(o);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","downloaded":true},"isEntry":false,"isTestFile":false,"sourceEqualsCompiled":true,"childModules":[],"dependencies":[],"initiators":["/node_modules/@babel/runtime/helpers/interopRequireWildcard.js:"],"transpilationDependencies":[],"transpilationInitiators":[],"asyncDependencies":[],"warnings":[],"hasMissingDependencies":false,"source":null},"/node_modules/@babel/runtime/helpers/esm/extends.js:":{"query":"","module":{"path":"/node_modules/@babel/runtime/helpers/esm/extends.js","code":"function _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e \u003c arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\nexport { _extends as default };","downloaded":true},"isEntry":false,"isTestFile":false,"sourceEqualsCompiled":false,"childModules":[],"dependencies":[],"initiators":["/node_modules/@react-three/drei/core/RoundedBox.js:","/node_modules/@react-three/drei/core/MeshReflectorMaterial.js:","/node_modules/@react-three/fiber/dist/react-three-fiber.esm.js:","/node_modules/@react-three/drei/web/Html.js:","/node_modules/@react-three/drei/web/ScrollControls.js:","/node_modules/@react-three/drei/web/PresentationControls.js:","/node_modules/@react-three/drei/web/Select.js:","/node_modules/@react-three/drei/core/Billboard.js:","/node_modules/@react-three/drei/core/ScreenSpace.js:","/node_modules/@react-three/drei/core/QuadraticBezierLine.js:","/node_modules/@react-three/drei/core/CubicBezierLine.js:","/node_modules/@react-three/drei/core/CatmullRomLine.js:","/node_modules/@react-three/drei/core/Line.js:","/node_modules/@react-three/drei/core/PositionalAudio.js:","/node_modules/@react-three/drei/core/Text.js:","/node_modules/@react-three/drei/core/Text3D.js:","/node_modules/@react-three/drei/core/Effects.js:","/node_modules/@react-three/drei/core/GradientTexture.js:","/node_modules/@react-three/drei/core/Image.js:","/node_modules/@react-three/drei/core/Edges.js:","/node_modules/@react-three/drei/core/Sampler.js:","/node_modules/@react-three/drei/core/ComputedAttribute.js:","/node_modules/@react-three/drei/core/Clone.js:","/node_modules/@react-three/drei/core/MarchingCubes.js:","/node_modules/@react-three/drei/core/Decal.js:","/node_modules/@react-three/drei/core/Svg.js:","/node_modules/@react-three/drei/core/Gltf.js:","/node_modules/@react-three/drei/core/OrthographicCamera.js:","/node_modules/@react-three/drei/core/PerspectiveCamera.js:","/node_modules/@react-three/drei/core/DeviceOrientationControls.js:","/node_modules/@react-three/drei/core/FlyControls.js:","/node_modules/@react-three/drei/core/MapControls.js:","/node_modules/@react-three/drei/core/OrbitControls.js:","/node_modules/@react-three/drei/core/TrackballControls.js:","/node_modules/@react-three/drei/core/ArcballControls.js:","/node_modules/@react-three/drei/core/TransformControls.js:","/node_modules/@react-three/drei/core/PointerLockControls.js:","/node_modules/@react-three/drei/core/FirstPersonControls.js:","/node_modules/@react-three/drei/core/CameraControls.js:","/node_modules/@react-three/drei/core/FaceControls.js:","/node_modules/@react-three/drei/core/GizmoViewcube.js:","/node_modules/@react-three/drei/core/GizmoViewport.js:","/node_modules/@react-three/drei/core/Grid.js:","/node_modules/@react-three/drei/core/useBVH.js:","/node_modules/@react-three/drei/core/BBAnchor.js:","/node_modules/@react-three/drei/core/MeshDistortMaterial.js:","/node_modules/@react-three/drei/core/MeshWobbleMaterial.js:","/node_modules/@react-three/drei/core/MeshRefractionMaterial.js:","/node_modules/@react-three/drei/core/MeshTransmissionMaterial.js:","/node_modules/@react-three/drei/core/MeshDiscardMaterial.js:","/node_modules/@react-three/drei/core/PointMaterial.js:","/node_modules/@react-three/drei/core/shapes.js:","/node_modules/@react-three/drei/core/ScreenQuad.js:","/node_modules/@react-three/drei/core/Center.js:","/node_modules/@react-three/drei/core/Resize.js:","/node_modules/@react-three/drei/core/Stage.js:","/node_modules/@react-three/drei/core/Shadow.js:","/node_modules/@react-three/drei/core/Caustics.js:","/node_modules/@react-three/drei/core/ContactShadows.js:","/node_modules/@react-three/drei/core/AccumulativeShadows.js:","/node_modules/@react-three/drei/core/Reflector.js:","/node_modules/@react-three/drei/core/SpotLight.js:","/node_modules/@react-three/drei/core/Environment.js:","/node_modules/@react-three/drei/core/Lightformer.js:","/node_modules/@react-three/drei/core/Sky.js:","/node_modules/@react-three/drei/core/Sparkles.js:","/node_modules/@react-three/drei/core/Wireframe.js:","/node_modules/@react-three/drei/core/Points.js:","/node_modules/@react-three/drei/core/Instances.js:","/node_modules/@react-three/drei/core/Segments.js:","/node_modules/@react-three/drei/core/Detailed.js:","/node_modules/@react-three/drei/core/RenderTexture.js:","/node_modules/@react-three/drei/core/Mask.js:","/node_modules/@react-three/drei/core/MeshPortalMaterial.js:","/node_modules/@react-three/drei/web/pivotControls/index.js:"],"transpilationDependencies":[],"transpilationInitiators":[],"asyncDependencies":[],"warnings":[],"hasMissingDependencies":false,"source":null},"/node_modules/ktx-parse/dist/ktx-parse.modern.js:":{"query":"","module":{"path":"/node_modules/ktx-parse/dist/ktx-parse.modern.js","code":"///////////////////////////////////////////////////\n// KTX2 Header.\n///////////////////////////////////////////////////\nconst KHR_SUPERCOMPRESSION_NONE = 0;\nconst KHR_SUPERCOMPRESSION_BASISLZ = 1;\nconst KHR_SUPERCOMPRESSION_ZSTD = 2;\nconst KHR_SUPERCOMPRESSION_ZLIB = 3; ///////////////////////////////////////////////////\n// Data Format Descriptor (DFD).\n///////////////////////////////////////////////////\n\nconst KHR_DF_KHR_DESCRIPTORTYPE_BASICFORMAT = 0;\nconst KHR_DF_VENDORID_KHRONOS = 0;\nconst KHR_DF_VERSION = 2;\nconst KHR_DF_MODEL_UNSPECIFIED = 0;\nconst KHR_DF_MODEL_RGBSDA = 1; // ...\n\nconst KHR_DF_MODEL_ETC1 = 160;\nconst KHR_DF_MODEL_ETC2 = 161;\nconst KHR_DF_MODEL_ASTC = 162;\nconst KHR_DF_MODEL_ETC1S = 163;\nconst KHR_DF_MODEL_UASTC = 166;\nconst KHR_DF_FLAG_ALPHA_STRAIGHT = 0;\nconst KHR_DF_FLAG_ALPHA_PREMULTIPLIED = 1;\nconst KHR_DF_TRANSFER_UNSPECIFIED = 0;\nconst KHR_DF_TRANSFER_LINEAR = 1;\nconst KHR_DF_TRANSFER_SRGB = 2;\nconst KHR_DF_TRANSFER_ITU = 3;\nconst KHR_DF_TRANSFER_NTSC = 4;\nconst KHR_DF_TRANSFER_SLOG = 5;\nconst KHR_DF_TRANSFER_SLOG2 = 6;\nconst KHR_DF_TRANSFER_BT1886 = 7;\nconst KHR_DF_TRANSFER_HLG_OETF = 8;\nconst KHR_DF_TRANSFER_HLG_EOTF = 9;\nconst KHR_DF_TRANSFER_PQ_EOTF = 10;\nconst KHR_DF_TRANSFER_PQ_OETF = 11;\nconst KHR_DF_TRANSFER_DCIP3 = 12;\nconst KHR_DF_TRANSFER_PAL_OETF = 13;\nconst KHR_DF_TRANSFER_PAL625_EOTF = 14;\nconst KHR_DF_TRANSFER_ST240 = 15;\nconst KHR_DF_TRANSFER_ACESCC = 16;\nconst KHR_DF_TRANSFER_ACESCCT = 17;\nconst KHR_DF_TRANSFER_ADOBERGB = 18;\nconst KHR_DF_PRIMARIES_UNSPECIFIED = 0;\nconst KHR_DF_PRIMARIES_BT709 = 1;\nconst KHR_DF_PRIMARIES_BT601_EBU = 2;\nconst KHR_DF_PRIMARIES_BT601_SMPTE = 3;\nconst KHR_DF_PRIMARIES_BT2020 = 4;\nconst KHR_DF_PRIMARIES_CIEXYZ = 5;\nconst KHR_DF_PRIMARIES_ACES = 6;\nconst KHR_DF_PRIMARIES_ACESCC = 7;\nconst KHR_DF_PRIMARIES_NTSC1953 = 8;\nconst KHR_DF_PRIMARIES_PAL525 = 9;\nconst KHR_DF_PRIMARIES_DISPLAYP3 = 10;\nconst KHR_DF_PRIMARIES_ADOBERGB = 11;\nconst KHR_DF_CHANNEL_RGBSDA_RED = 0;\nconst KHR_DF_CHANNEL_RGBSDA_GREEN = 1;\nconst KHR_DF_CHANNEL_RGBSDA_BLUE = 2;\nconst KHR_DF_CHANNEL_RGBSDA_STENCIL = 13;\nconst KHR_DF_CHANNEL_RGBSDA_DEPTH = 14;\nconst KHR_DF_CHANNEL_RGBSDA_ALPHA = 15;\nconst KHR_DF_SAMPLE_DATATYPE_FLOAT = 0x80;\nconst KHR_DF_SAMPLE_DATATYPE_SIGNED = 0x40;\nconst KHR_DF_SAMPLE_DATATYPE_EXPONENT = 0x20;\nconst KHR_DF_SAMPLE_DATATYPE_LINEAR = 0x10; ///////////////////////////////////////////////////\n// VK FORMAT.\n///////////////////////////////////////////////////\n\nconst VK_FORMAT_UNDEFINED = 0;\nconst VK_FORMAT_R4G4_UNORM_PACK8 = 1;\nconst VK_FORMAT_R4G4B4A4_UNORM_PACK16 = 2;\nconst VK_FORMAT_B4G4R4A4_UNORM_PACK16 = 3;\nconst VK_FORMAT_R5G6B5_UNORM_PACK16 = 4;\nconst VK_FORMAT_B5G6R5_UNORM_PACK16 = 5;\nconst VK_FORMAT_R5G5B5A1_UNORM_PACK16 = 6;\nconst VK_FORMAT_B5G5R5A1_UNORM_PACK16 = 7;\nconst VK_FORMAT_A1R5G5B5_UNORM_PACK16 = 8;\nconst VK_FORMAT_R8_UNORM = 9;\nconst VK_FORMAT_R8_SNORM = 10;\nconst VK_FORMAT_R8_UINT = 13;\nconst VK_FORMAT_R8_SINT = 14;\nconst VK_FORMAT_R8_SRGB = 15;\nconst VK_FORMAT_R8G8_UNORM = 16;\nconst VK_FORMAT_R8G8_SNORM = 17;\nconst VK_FORMAT_R8G8_UINT = 20;\nconst VK_FORMAT_R8G8_SINT = 21;\nconst VK_FORMAT_R8G8_SRGB = 22;\nconst VK_FORMAT_R8G8B8_UNORM = 23;\nconst VK_FORMAT_R8G8B8_SNORM = 24;\nconst VK_FORMAT_R8G8B8_UINT = 27;\nconst VK_FORMAT_R8G8B8_SINT = 28;\nconst VK_FORMAT_R8G8B8_SRGB = 29;\nconst VK_FORMAT_B8G8R8_UNORM = 30;\nconst VK_FORMAT_B8G8R8_SNORM = 31;\nconst VK_FORMAT_B8G8R8_UINT = 34;\nconst VK_FORMAT_B8G8R8_SINT = 35;\nconst VK_FORMAT_B8G8R8_SRGB = 36;\nconst VK_FORMAT_R8G8B8A8_UNORM = 37;\nconst VK_FORMAT_R8G8B8A8_SNORM = 38;\nconst VK_FORMAT_R8G8B8A8_UINT = 41;\nconst VK_FORMAT_R8G8B8A8_SINT = 42;\nconst VK_FORMAT_R8G8B8A8_SRGB = 43;\nconst VK_FORMAT_B8G8R8A8_UNORM = 44;\nconst VK_FORMAT_B8G8R8A8_SNORM = 45;\nconst VK_FORMAT_B8G8R8A8_UINT = 48;\nconst VK_FORMAT_B8G8R8A8_SINT = 49;\nconst VK_FORMAT_B8G8R8A8_SRGB = 50;\nconst VK_FORMAT_A2R10G10B10_UNORM_PACK32 = 58;\nconst VK_FORMAT_A2R10G10B10_SNORM_PACK32 = 59;\nconst VK_FORMAT_A2R10G10B10_UINT_PACK32 = 62;\nconst VK_FORMAT_A2R10G10B10_SINT_PACK32 = 63;\nconst VK_FORMAT_A2B10G10R10_UNORM_PACK32 = 64;\nconst VK_FORMAT_A2B10G10R10_SNORM_PACK32 = 65;\nconst VK_FORMAT_A2B10G10R10_UINT_PACK32 = 68;\nconst VK_FORMAT_A2B10G10R10_SINT_PACK32 = 69;\nconst VK_FORMAT_R16_UNORM = 70;\nconst VK_FORMAT_R16_SNORM = 71;\nconst VK_FORMAT_R16_UINT = 74;\nconst VK_FORMAT_R16_SINT = 75;\nconst VK_FORMAT_R16_SFLOAT = 76;\nconst VK_FORMAT_R16G16_UNORM = 77;\nconst VK_FORMAT_R16G16_SNORM = 78;\nconst VK_FORMAT_R16G16_UINT = 81;\nconst VK_FORMAT_R16G16_SINT = 82;\nconst VK_FORMAT_R16G16_SFLOAT = 83;\nconst VK_FORMAT_R16G16B16_UNORM = 84;\nconst VK_FORMAT_R16G16B16_SNORM = 85;\nconst VK_FORMAT_R16G16B16_UINT = 88;\nconst VK_FORMAT_R16G16B16_SINT = 89;\nconst VK_FORMAT_R16G16B16_SFLOAT = 90;\nconst VK_FORMAT_R16G16B16A16_UNORM = 91;\nconst VK_FORMAT_R16G16B16A16_SNORM = 92;\nconst VK_FORMAT_R16G16B16A16_UINT = 95;\nconst VK_FORMAT_R16G16B16A16_SINT = 96;\nconst VK_FORMAT_R16G16B16A16_SFLOAT = 97;\nconst VK_FORMAT_R32_UINT = 98;\nconst VK_FORMAT_R32_SINT = 99;\nconst VK_FORMAT_R32_SFLOAT = 100;\nconst VK_FORMAT_R32G32_UINT = 101;\nconst VK_FORMAT_R32G32_SINT = 102;\nconst VK_FORMAT_R32G32_SFLOAT = 103;\nconst VK_FORMAT_R32G32B32_UINT = 104;\nconst VK_FORMAT_R32G32B32_SINT = 105;\nconst VK_FORMAT_R32G32B32_SFLOAT = 106;\nconst VK_FORMAT_R32G32B32A32_UINT = 107;\nconst VK_FORMAT_R32G32B32A32_SINT = 108;\nconst VK_FORMAT_R32G32B32A32_SFLOAT = 109;\nconst VK_FORMAT_R64_UINT = 110;\nconst VK_FORMAT_R64_SINT = 111;\nconst VK_FORMAT_R64_SFLOAT = 112;\nconst VK_FORMAT_R64G64_UINT = 113;\nconst VK_FORMAT_R64G64_SINT = 114;\nconst VK_FORMAT_R64G64_SFLOAT = 115;\nconst VK_FORMAT_R64G64B64_UINT = 116;\nconst VK_FORMAT_R64G64B64_SINT = 117;\nconst VK_FORMAT_R64G64B64_SFLOAT = 118;\nconst VK_FORMAT_R64G64B64A64_UINT = 119;\nconst VK_FORMAT_R64G64B64A64_SINT = 120;\nconst VK_FORMAT_R64G64B64A64_SFLOAT = 121;\nconst VK_FORMAT_B10G11R11_UFLOAT_PACK32 = 122;\nconst VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 = 123;\nconst VK_FORMAT_D16_UNORM = 124;\nconst VK_FORMAT_X8_D24_UNORM_PACK32 = 125;\nconst VK_FORMAT_D32_SFLOAT = 126;\nconst VK_FORMAT_S8_UINT = 127;\nconst VK_FORMAT_D16_UNORM_S8_UINT = 128;\nconst VK_FORMAT_D24_UNORM_S8_UINT = 129;\nconst VK_FORMAT_D32_SFLOAT_S8_UINT = 130;\nconst VK_FORMAT_BC1_RGB_UNORM_BLOCK = 131;\nconst VK_FORMAT_BC1_RGB_SRGB_BLOCK = 132;\nconst VK_FORMAT_BC1_RGBA_UNORM_BLOCK = 133;\nconst VK_FORMAT_BC1_RGBA_SRGB_BLOCK = 134;\nconst VK_FORMAT_BC2_UNORM_BLOCK = 135;\nconst VK_FORMAT_BC2_SRGB_BLOCK = 136;\nconst VK_FORMAT_BC3_UNORM_BLOCK = 137;\nconst VK_FORMAT_BC3_SRGB_BLOCK = 138;\nconst VK_FORMAT_BC4_UNORM_BLOCK = 139;\nconst VK_FORMAT_BC4_SNORM_BLOCK = 140;\nconst VK_FORMAT_BC5_UNORM_BLOCK = 141;\nconst VK_FORMAT_BC5_SNORM_BLOCK = 142;\nconst VK_FORMAT_BC6H_UFLOAT_BLOCK = 143;\nconst VK_FORMAT_BC6H_SFLOAT_BLOCK = 144;\nconst VK_FORMAT_BC7_UNORM_BLOCK = 145;\nconst VK_FORMAT_BC7_SRGB_BLOCK = 146;\nconst VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK = 147;\nconst VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK = 148;\nconst VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK = 149;\nconst VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK = 150;\nconst VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK = 151;\nconst VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK = 152;\nconst VK_FORMAT_EAC_R11_UNORM_BLOCK = 153;\nconst VK_FORMAT_EAC_R11_SNORM_BLOCK = 154;\nconst VK_FORMAT_EAC_R11G11_UNORM_BLOCK = 155;\nconst VK_FORMAT_EAC_R11G11_SNORM_BLOCK = 156;\nconst VK_FORMAT_ASTC_4x4_UNORM_BLOCK = 157;\nconst VK_FORMAT_ASTC_4x4_SRGB_BLOCK = 158;\nconst VK_FORMAT_ASTC_5x4_UNORM_BLOCK = 159;\nconst VK_FORMAT_ASTC_5x4_SRGB_BLOCK = 160;\nconst VK_FORMAT_ASTC_5x5_UNORM_BLOCK = 161;\nconst VK_FORMAT_ASTC_5x5_SRGB_BLOCK = 162;\nconst VK_FORMAT_ASTC_6x5_UNORM_BLOCK = 163;\nconst VK_FORMAT_ASTC_6x5_SRGB_BLOCK = 164;\nconst VK_FORMAT_ASTC_6x6_UNORM_BLOCK = 165;\nconst VK_FORMAT_ASTC_6x6_SRGB_BLOCK = 166;\nconst VK_FORMAT_ASTC_8x5_UNORM_BLOCK = 167;\nconst VK_FORMAT_ASTC_8x5_SRGB_BLOCK = 168;\nconst VK_FORMAT_ASTC_8x6_UNORM_BLOCK = 169;\nconst VK_FORMAT_ASTC_8x6_SRGB_BLOCK = 170;\nconst VK_FORMAT_ASTC_8x8_UNORM_BLOCK = 171;\nconst VK_FORMAT_ASTC_8x8_SRGB_BLOCK = 172;\nconst VK_FORMAT_ASTC_10x5_UNORM_BLOCK = 173;\nconst VK_FORMAT_ASTC_10x5_SRGB_BLOCK = 174;\nconst VK_FORMAT_ASTC_10x6_UNORM_BLOCK = 175;\nconst VK_FORMAT_ASTC_10x6_SRGB_BLOCK = 176;\nconst VK_FORMAT_ASTC_10x8_UNORM_BLOCK = 177;\nconst VK_FORMAT_ASTC_10x8_SRGB_BLOCK = 178;\nconst VK_FORMAT_ASTC_10x10_UNORM_BLOCK = 179;\nconst VK_FORMAT_ASTC_10x10_SRGB_BLOCK = 180;\nconst VK_FORMAT_ASTC_12x10_UNORM_BLOCK = 181;\nconst VK_FORMAT_ASTC_12x10_SRGB_BLOCK = 182;\nconst VK_FORMAT_ASTC_12x12_UNORM_BLOCK = 183;\nconst VK_FORMAT_ASTC_12x12_SRGB_BLOCK = 184;\nconst VK_FORMAT_R10X6_UNORM_PACK16 = 1000156007;\nconst VK_FORMAT_R10X6G10X6_UNORM_2PACK16 = 1000156008;\nconst VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 = 1000156009;\nconst VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16 = 1000156010;\nconst VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16 = 1000156011;\nconst VK_FORMAT_R12X4_UNORM_PACK16 = 1000156017;\nconst VK_FORMAT_R12X4G12X4_UNORM_2PACK16 = 1000156018;\nconst VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16 = 1000156019;\nconst VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16 = 1000156020;\nconst VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16 = 1000156021;\nconst VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG = 1000054000;\nconst VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG = 1000054001;\nconst VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG = 1000054002;\nconst VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG = 1000054003;\nconst VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG = 1000054004;\nconst VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG = 1000054005;\nconst VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG = 1000054006;\nconst VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG = 1000054007;\nconst VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT = 1000066000;\nconst VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT = 1000066001;\nconst VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT = 1000066002;\nconst VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT = 1000066003;\nconst VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT = 1000066004;\nconst VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT = 1000066005;\nconst VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT = 1000066006;\nconst VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT = 1000066007;\nconst VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT = 1000066008;\nconst VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT = 1000066009;\nconst VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT = 1000066010;\nconst VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT = 1000066011;\nconst VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT = 1000066012;\nconst VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT = 1000066013;\nconst VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT = 1000340000;\nconst VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT = 1000340001;\n\n/**\r\n * Represents an unpacked KTX 2.0 texture container. Data for individual mip levels are stored in\r\n * the `.levels` array, typically compressed in Basis Universal formats. Additional properties\r\n * provide metadata required to process, transcode, and upload these textures.\r\n */\n\nclass KTX2Container {\n constructor() {\n this.vkFormat = VK_FORMAT_UNDEFINED;\n this.typeSize = 1;\n this.pixelWidth = 0;\n this.pixelHeight = 0;\n this.pixelDepth = 0;\n this.layerCount = 0;\n this.faceCount = 1;\n this.supercompressionScheme = KHR_SUPERCOMPRESSION_NONE;\n this.levels = [];\n this.dataFormatDescriptor = [{\n vendorId: KHR_DF_VENDORID_KHRONOS,\n descriptorType: KHR_DF_KHR_DESCRIPTORTYPE_BASICFORMAT,\n descriptorBlockSize: 0,\n versionNumber: KHR_DF_VERSION,\n colorModel: KHR_DF_MODEL_UNSPECIFIED,\n colorPrimaries: KHR_DF_PRIMARIES_BT709,\n transferFunction: KHR_DF_TRANSFER_SRGB,\n flags: KHR_DF_FLAG_ALPHA_STRAIGHT,\n texelBlockDimension: [0, 0, 0, 0],\n bytesPlane: [0, 0, 0, 0, 0, 0, 0, 0],\n samples: []\n }];\n this.keyValue = {};\n this.globalData = null;\n }\n\n}\n\nclass BufferReader {\n constructor(data, byteOffset, byteLength, littleEndian) {\n this._dataView = void 0;\n this._littleEndian = void 0;\n this._offset = void 0;\n this._dataView = new DataView(data.buffer, data.byteOffset + byteOffset, byteLength);\n this._littleEndian = littleEndian;\n this._offset = 0;\n }\n\n _nextUint8() {\n const value = this._dataView.getUint8(this._offset);\n\n this._offset += 1;\n return value;\n }\n\n _nextUint16() {\n const value = this._dataView.getUint16(this._offset, this._littleEndian);\n\n this._offset += 2;\n return value;\n }\n\n _nextUint32() {\n const value = this._dataView.getUint32(this._offset, this._littleEndian);\n\n this._offset += 4;\n return value;\n }\n\n _nextUint64() {\n const left = this._dataView.getUint32(this._offset, this._littleEndian);\n\n const right = this._dataView.getUint32(this._offset + 4, this._littleEndian); // TODO(cleanup): Just test this...\n // const value = this._littleEndian ? left + (2 ** 32 * right) : (2 ** 32 * left) + right;\n\n\n const value = left + 2 ** 32 * right;\n this._offset += 8;\n return value;\n }\n\n _nextInt32() {\n const value = this._dataView.getInt32(this._offset, this._littleEndian);\n\n this._offset += 4;\n return value;\n }\n\n _skip(bytes) {\n this._offset += bytes;\n return this;\n }\n\n _scan(maxByteLength, term = 0x00) {\n const byteOffset = this._offset;\n let byteLength = 0;\n\n while (this._dataView.getUint8(this._offset) !== term && byteLength \u003c maxByteLength) {\n byteLength++;\n this._offset++;\n }\n\n if (byteLength \u003c maxByteLength) this._offset++;\n return new Uint8Array(this._dataView.buffer, this._dataView.byteOffset + byteOffset, byteLength);\n }\n\n}\n\n///////////////////////////////////////////////////\n// Common.\n///////////////////////////////////////////////////\nconst KTX_WRITER = `KTX-Parse v${\"0.4.5\"}`;\nconst NUL = new Uint8Array([0x00]); ///////////////////////////////////////////////////\n// KTX2 Header.\n///////////////////////////////////////////////////\n\nconst KTX2_ID = [// '´', 'K', 'T', 'X', '2', '0', 'ª', '\\r', '\\n', '\\x1A', '\\n'\n0xab, 0x4b, 0x54, 0x58, 0x20, 0x32, 0x30, 0xbb, 0x0d, 0x0a, 0x1a, 0x0a];\nconst HEADER_BYTE_LENGTH = 68; // 13 * 4 + 2 * 8\n\n/** Encodes text to an ArrayBuffer. */\nfunction encodeText(text) {\n if (typeof TextEncoder !== 'undefined') {\n return new TextEncoder().encode(text);\n }\n\n return Buffer.from(text);\n}\n/** Decodes an ArrayBuffer to text. */\n\nfunction decodeText(buffer) {\n if (typeof TextDecoder !== 'undefined') {\n return new TextDecoder().decode(buffer);\n }\n\n return Buffer.from(buffer).toString('utf8');\n}\n/** Concatenates N ArrayBuffers. */\n\nfunction concat(buffers) {\n let totalByteLength = 0;\n\n for (const buffer of buffers) {\n totalByteLength += buffer.byteLength;\n }\n\n const result = new Uint8Array(totalByteLength);\n let byteOffset = 0;\n\n for (const buffer of buffers) {\n result.set(new Uint8Array(buffer), byteOffset);\n byteOffset += buffer.byteLength;\n }\n\n return result;\n}\n\n/**\r\n * Parses a KTX 2.0 file, returning an unpacked {@link KTX2Container} instance with all associated\r\n * data. The container's mip levels and other binary data are pointers into the original file, not\r\n * copies, so the original file should not be overwritten after reading.\r\n *\r\n * @param data Bytes of KTX 2.0 file, as Uint8Array or Buffer.\r\n */\n\nfunction read(data) {\n ///////////////////////////////////////////////////\n // KTX 2.0 Identifier.\n ///////////////////////////////////////////////////\n const id = new Uint8Array(data.buffer, data.byteOffset, KTX2_ID.length);\n\n if (id[0] !== KTX2_ID[0] || // '´'\n id[1] !== KTX2_ID[1] || // 'K'\n id[2] !== KTX2_ID[2] || // 'T'\n id[3] !== KTX2_ID[3] || // 'X'\n id[4] !== KTX2_ID[4] || // ' '\n id[5] !== KTX2_ID[5] || // '2'\n id[6] !== KTX2_ID[6] || // '0'\n id[7] !== KTX2_ID[7] || // 'ª'\n id[8] !== KTX2_ID[8] || // '\\r'\n id[9] !== KTX2_ID[9] || // '\\n'\n id[10] !== KTX2_ID[10] || // '\\x1A'\n id[11] !== KTX2_ID[11] // '\\n'\n ) {\n throw new Error('Missing KTX 2.0 identifier.');\n }\n\n const container = new KTX2Container(); ///////////////////////////////////////////////////\n // Header.\n ///////////////////////////////////////////////////\n\n const headerByteLength = 17 * Uint32Array.BYTES_PER_ELEMENT;\n const headerReader = new BufferReader(data, KTX2_ID.length, headerByteLength, true);\n container.vkFormat = headerReader._nextUint32();\n container.typeSize = headerReader._nextUint32();\n container.pixelWidth = headerReader._nextUint32();\n container.pixelHeight = headerReader._nextUint32();\n container.pixelDepth = headerReader._nextUint32();\n container.layerCount = headerReader._nextUint32();\n container.faceCount = headerReader._nextUint32();\n\n const levelCount = headerReader._nextUint32();\n\n container.supercompressionScheme = headerReader._nextUint32();\n\n const dfdByteOffset = headerReader._nextUint32();\n\n const dfdByteLength = headerReader._nextUint32();\n\n const kvdByteOffset = headerReader._nextUint32();\n\n const kvdByteLength = headerReader._nextUint32();\n\n const sgdByteOffset = headerReader._nextUint64();\n\n const sgdByteLength = headerReader._nextUint64(); ///////////////////////////////////////////////////\n // Level Index.\n ///////////////////////////////////////////////////\n\n\n const levelByteLength = levelCount * 3 * 8;\n const levelReader = new BufferReader(data, KTX2_ID.length + headerByteLength, levelByteLength, true);\n\n for (let i = 0; i \u003c levelCount; i++) {\n container.levels.push({\n levelData: new Uint8Array(data.buffer, data.byteOffset + levelReader._nextUint64(), levelReader._nextUint64()),\n uncompressedByteLength: levelReader._nextUint64()\n });\n } ///////////////////////////////////////////////////\n // Data Format Descriptor (DFD).\n ///////////////////////////////////////////////////\n\n\n const dfdReader = new BufferReader(data, dfdByteOffset, dfdByteLength, true);\n const dfd = {\n vendorId: dfdReader._skip(4\n /* totalSize */\n )._nextUint16(),\n descriptorType: dfdReader._nextUint16(),\n versionNumber: dfdReader._nextUint16(),\n descriptorBlockSize: dfdReader._nextUint16(),\n colorModel: dfdReader._nextUint8(),\n colorPrimaries: dfdReader._nextUint8(),\n transferFunction: dfdReader._nextUint8(),\n flags: dfdReader._nextUint8(),\n texelBlockDimension: [dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8()],\n bytesPlane: [dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8()],\n samples: []\n };\n const sampleStart = 6;\n const sampleWords = 4;\n const numSamples = (dfd.descriptorBlockSize / 4 - sampleStart) / sampleWords;\n\n for (let i = 0; i \u003c numSamples; i++) {\n const sample = {\n bitOffset: dfdReader._nextUint16(),\n bitLength: dfdReader._nextUint8(),\n channelType: dfdReader._nextUint8(),\n samplePosition: [dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8()],\n sampleLower: -Infinity,\n sampleUpper: Infinity\n };\n\n if (sample.channelType & KHR_DF_SAMPLE_DATATYPE_SIGNED) {\n sample.sampleLower = dfdReader._nextInt32();\n sample.sampleUpper = dfdReader._nextInt32();\n } else {\n sample.sampleLower = dfdReader._nextUint32();\n sample.sampleUpper = dfdReader._nextUint32();\n }\n\n dfd.samples[i] = sample;\n }\n\n container.dataFormatDescriptor.length = 0;\n container.dataFormatDescriptor.push(dfd); ///////////////////////////////////////////////////\n // Key/Value Data (KVD).\n ///////////////////////////////////////////////////\n\n const kvdReader = new BufferReader(data, kvdByteOffset, kvdByteLength, true);\n\n while (kvdReader._offset \u003c kvdByteLength) {\n const keyValueByteLength = kvdReader._nextUint32();\n\n const keyData = kvdReader._scan(keyValueByteLength);\n\n const key = decodeText(keyData);\n\n const valueData = kvdReader._scan(keyValueByteLength - keyData.byteLength);\n\n container.keyValue[key] = key.match(/^ktx/i) ? decodeText(valueData) : valueData; // 4-byte alignment.\n\n if (kvdReader._offset % 4) kvdReader._skip(4 - kvdReader._offset % 4);\n } ///////////////////////////////////////////////////\n // Supercompression Global Data (SGD).\n ///////////////////////////////////////////////////\n\n\n if (sgdByteLength \u003c= 0) return container;\n const sgdReader = new BufferReader(data, sgdByteOffset, sgdByteLength, true);\n\n const endpointCount = sgdReader._nextUint16();\n\n const selectorCount = sgdReader._nextUint16();\n\n const endpointsByteLength = sgdReader._nextUint32();\n\n const selectorsByteLength = sgdReader._nextUint32();\n\n const tablesByteLength = sgdReader._nextUint32();\n\n const extendedByteLength = sgdReader._nextUint32();\n\n const imageDescs = [];\n\n for (let i = 0; i \u003c levelCount; i++) {\n imageDescs.push({\n imageFlags: sgdReader._nextUint32(),\n rgbSliceByteOffset: sgdReader._nextUint32(),\n rgbSliceByteLength: sgdReader._nextUint32(),\n alphaSliceByteOffset: sgdReader._nextUint32(),\n alphaSliceByteLength: sgdReader._nextUint32()\n });\n }\n\n const endpointsByteOffset = sgdByteOffset + sgdReader._offset;\n const selectorsByteOffset = endpointsByteOffset + endpointsByteLength;\n const tablesByteOffset = selectorsByteOffset + selectorsByteLength;\n const extendedByteOffset = tablesByteOffset + tablesByteLength;\n const endpointsData = new Uint8Array(data.buffer, data.byteOffset + endpointsByteOffset, endpointsByteLength);\n const selectorsData = new Uint8Array(data.buffer, data.byteOffset + selectorsByteOffset, selectorsByteLength);\n const tablesData = new Uint8Array(data.buffer, data.byteOffset + tablesByteOffset, tablesByteLength);\n const extendedData = new Uint8Array(data.buffer, data.byteOffset + extendedByteOffset, extendedByteLength);\n container.globalData = {\n endpointCount,\n selectorCount,\n imageDescs,\n endpointsData,\n selectorsData,\n tablesData,\n extendedData\n };\n return container;\n}\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i \u003c arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\nconst DEFAULT_OPTIONS = {\n keepWriter: false\n};\n/**\r\n * Serializes a {@link KTX2Container} instance to a KTX 2.0 file. Mip levels and other binary data\r\n * are copied into the resulting Uint8Array, so the original container can safely be edited or\r\n * destroyed after it is serialized.\r\n *\r\n * Options:\r\n * - keepWriter: If true, 'KTXWriter' key/value field is written as provided by the container.\r\n * \t\tOtherwise, a string for the current ktx-parse version is generated. Default: false.\r\n *\r\n * @param container\r\n * @param options\r\n */\n\nfunction write(container, options = {}) {\n options = _extends({}, DEFAULT_OPTIONS, options); ///////////////////////////////////////////////////\n // Supercompression Global Data (SGD).\n ///////////////////////////////////////////////////\n\n let sgdBuffer = new ArrayBuffer(0);\n\n if (container.globalData) {\n const sgdHeaderBuffer = new ArrayBuffer(20 + container.globalData.imageDescs.length * 5 * 4);\n const sgdHeaderView = new DataView(sgdHeaderBuffer);\n sgdHeaderView.setUint16(0, container.globalData.endpointCount, true);\n sgdHeaderView.setUint16(2, container.globalData.selectorCount, true);\n sgdHeaderView.setUint32(4, container.globalData.endpointsData.byteLength, true);\n sgdHeaderView.setUint32(8, container.globalData.selectorsData.byteLength, true);\n sgdHeaderView.setUint32(12, container.globalData.tablesData.byteLength, true);\n sgdHeaderView.setUint32(16, container.globalData.extendedData.byteLength, true);\n\n for (let i = 0; i \u003c container.globalData.imageDescs.length; i++) {\n const imageDesc = container.globalData.imageDescs[i];\n sgdHeaderView.setUint32(20 + i * 5 * 4 + 0, imageDesc.imageFlags, true);\n sgdHeaderView.setUint32(20 + i * 5 * 4 + 4, imageDesc.rgbSliceByteOffset, true);\n sgdHeaderView.setUint32(20 + i * 5 * 4 + 8, imageDesc.rgbSliceByteLength, true);\n sgdHeaderView.setUint32(20 + i * 5 * 4 + 12, imageDesc.alphaSliceByteOffset, true);\n sgdHeaderView.setUint32(20 + i * 5 * 4 + 16, imageDesc.alphaSliceByteLength, true);\n }\n\n sgdBuffer = concat([sgdHeaderBuffer, container.globalData.endpointsData, container.globalData.selectorsData, container.globalData.tablesData, container.globalData.extendedData]);\n } ///////////////////////////////////////////////////\n // Key/Value Data (KVD).\n ///////////////////////////////////////////////////\n\n\n const keyValueData = [];\n let keyValue = container.keyValue;\n\n if (!options.keepWriter) {\n keyValue = _extends({}, container.keyValue, {\n KTXwriter: KTX_WRITER\n });\n }\n\n for (const key in keyValue) {\n const value = keyValue[key];\n const keyData = encodeText(key);\n const valueData = typeof value === 'string' ? encodeText(value) : value;\n const kvByteLength = keyData.byteLength + 1 + valueData.byteLength + 1;\n const kvPadding = kvByteLength % 4 ? 4 - kvByteLength % 4 : 0; // align(4)\n\n keyValueData.push(concat([new Uint32Array([kvByteLength]), keyData, NUL, valueData, NUL, new Uint8Array(kvPadding).fill(0x00) // align(4)\n ]));\n }\n\n const kvdBuffer = concat(keyValueData); ///////////////////////////////////////////////////\n // Data Format Descriptor (DFD).\n ///////////////////////////////////////////////////\n\n if (container.dataFormatDescriptor.length !== 1 || container.dataFormatDescriptor[0].descriptorType !== KHR_DF_KHR_DESCRIPTORTYPE_BASICFORMAT) {\n throw new Error('Only BASICFORMAT Data Format Descriptor output supported.');\n }\n\n const dfd = container.dataFormatDescriptor[0];\n const dfdBuffer = new ArrayBuffer(28 + dfd.samples.length * 16);\n const dfdView = new DataView(dfdBuffer);\n const descriptorBlockSize = 24 + dfd.samples.length * 16;\n dfdView.setUint32(0, dfdBuffer.byteLength, true);\n dfdView.setUint16(4, dfd.vendorId, true);\n dfdView.setUint16(6, dfd.descriptorType, true);\n dfdView.setUint16(8, dfd.versionNumber, true);\n dfdView.setUint16(10, descriptorBlockSize, true);\n dfdView.setUint8(12, dfd.colorModel);\n dfdView.setUint8(13, dfd.colorPrimaries);\n dfdView.setUint8(14, dfd.transferFunction);\n dfdView.setUint8(15, dfd.flags);\n\n if (!Array.isArray(dfd.texelBlockDimension)) {\n throw new Error('texelBlockDimension is now an array. For dimensionality `d`, set `d - 1`.');\n }\n\n dfdView.setUint8(16, dfd.texelBlockDimension[0]);\n dfdView.setUint8(17, dfd.texelBlockDimension[1]);\n dfdView.setUint8(18, dfd.texelBlockDimension[2]);\n dfdView.setUint8(19, dfd.texelBlockDimension[3]);\n\n for (let i = 0; i \u003c 8; i++) dfdView.setUint8(20 + i, dfd.bytesPlane[i]);\n\n for (let i = 0; i \u003c dfd.samples.length; i++) {\n const sample = dfd.samples[i];\n const sampleByteOffset = 28 + i * 16;\n\n if (sample.channelID) {\n throw new Error('channelID has been renamed to channelType.');\n }\n\n dfdView.setUint16(sampleByteOffset + 0, sample.bitOffset, true);\n dfdView.setUint8(sampleByteOffset + 2, sample.bitLength);\n dfdView.setUint8(sampleByteOffset + 3, sample.channelType);\n dfdView.setUint8(sampleByteOffset + 4, sample.samplePosition[0]);\n dfdView.setUint8(sampleByteOffset + 5, sample.samplePosition[1]);\n dfdView.setUint8(sampleByteOffset + 6, sample.samplePosition[2]);\n dfdView.setUint8(sampleByteOffset + 7, sample.samplePosition[3]);\n\n if (sample.channelType & KHR_DF_SAMPLE_DATATYPE_SIGNED) {\n dfdView.setInt32(sampleByteOffset + 8, sample.sampleLower, true);\n dfdView.setInt32(sampleByteOffset + 12, sample.sampleUpper, true);\n } else {\n dfdView.setUint32(sampleByteOffset + 8, sample.sampleLower, true);\n dfdView.setUint32(sampleByteOffset + 12, sample.sampleUpper, true);\n }\n } ///////////////////////////////////////////////////\n // Data alignment.\n ///////////////////////////////////////////////////\n\n\n const dfdByteOffset = KTX2_ID.length + HEADER_BYTE_LENGTH + container.levels.length * 3 * 8;\n const kvdByteOffset = dfdByteOffset + dfdBuffer.byteLength;\n let sgdByteOffset = sgdBuffer.byteLength > 0 ? kvdByteOffset + kvdBuffer.byteLength : 0;\n if (sgdByteOffset % 8) sgdByteOffset += 8 - sgdByteOffset % 8; // align(8)\n ///////////////////////////////////////////////////\n // Level Index.\n ///////////////////////////////////////////////////\n\n const levelData = [];\n const levelIndex = new DataView(new ArrayBuffer(container.levels.length * 3 * 8));\n let levelDataByteOffset = (sgdByteOffset || kvdByteOffset + kvdBuffer.byteLength) + sgdBuffer.byteLength;\n\n for (let i = 0; i \u003c container.levels.length; i++) {\n const level = container.levels[i];\n levelData.push(level.levelData);\n levelIndex.setBigUint64(i * 24 + 0, BigInt(levelDataByteOffset), true);\n levelIndex.setBigUint64(i * 24 + 8, BigInt(level.levelData.byteLength), true);\n levelIndex.setBigUint64(i * 24 + 16, BigInt(level.uncompressedByteLength), true);\n levelDataByteOffset += level.levelData.byteLength;\n } ///////////////////////////////////////////////////\n // Header.\n ///////////////////////////////////////////////////\n\n\n const headerBuffer = new ArrayBuffer(HEADER_BYTE_LENGTH);\n const headerView = new DataView(headerBuffer);\n headerView.setUint32(0, container.vkFormat, true);\n headerView.setUint32(4, container.typeSize, true);\n headerView.setUint32(8, container.pixelWidth, true);\n headerView.setUint32(12, container.pixelHeight, true);\n headerView.setUint32(16, container.pixelDepth, true);\n headerView.setUint32(20, container.layerCount, true);\n headerView.setUint32(24, container.faceCount, true);\n headerView.setUint32(28, container.levels.length, true);\n headerView.setUint32(32, container.supercompressionScheme, true);\n headerView.setUint32(36, dfdByteOffset, true);\n headerView.setUint32(40, dfdBuffer.byteLength, true);\n headerView.setUint32(44, kvdByteOffset, true);\n headerView.setUint32(48, kvdBuffer.byteLength, true);\n headerView.setBigUint64(52, BigInt(sgdBuffer.byteLength > 0 ? sgdByteOffset : 0), true);\n headerView.setBigUint64(60, BigInt(sgdBuffer.byteLength), true); ///////////////////////////////////////////////////\n // Compose.\n ///////////////////////////////////////////////////\n\n return new Uint8Array(concat([new Uint8Array(KTX2_ID).buffer, headerBuffer, levelIndex.buffer, dfdBuffer, kvdBuffer, sgdByteOffset > 0 ? new ArrayBuffer(sgdByteOffset - (kvdByteOffset + kvdBuffer.byteLength)) // align(8)\n : new ArrayBuffer(0), sgdBuffer, ...levelData]));\n}\n\nexport { KHR_DF_CHANNEL_RGBSDA_ALPHA, KHR_DF_CHANNEL_RGBSDA_BLUE, KHR_DF_CHANNEL_RGBSDA_DEPTH, KHR_DF_CHANNEL_RGBSDA_GREEN, KHR_DF_CHANNEL_RGBSDA_RED, KHR_DF_CHANNEL_RGBSDA_STENCIL, KHR_DF_FLAG_ALPHA_PREMULTIPLIED, KHR_DF_FLAG_ALPHA_STRAIGHT, KHR_DF_KHR_DESCRIPTORTYPE_BASICFORMAT, KHR_DF_MODEL_ASTC, KHR_DF_MODEL_ETC1, KHR_DF_MODEL_ETC1S, KHR_DF_MODEL_ETC2, KHR_DF_MODEL_RGBSDA, KHR_DF_MODEL_UASTC, KHR_DF_MODEL_UNSPECIFIED, KHR_DF_PRIMARIES_ACES, KHR_DF_PRIMARIES_ACESCC, KHR_DF_PRIMARIES_ADOBERGB, KHR_DF_PRIMARIES_BT2020, KHR_DF_PRIMARIES_BT601_EBU, KHR_DF_PRIMARIES_BT601_SMPTE, KHR_DF_PRIMARIES_BT709, KHR_DF_PRIMARIES_CIEXYZ, KHR_DF_PRIMARIES_DISPLAYP3, KHR_DF_PRIMARIES_NTSC1953, KHR_DF_PRIMARIES_PAL525, KHR_DF_PRIMARIES_UNSPECIFIED, KHR_DF_SAMPLE_DATATYPE_EXPONENT, KHR_DF_SAMPLE_DATATYPE_FLOAT, KHR_DF_SAMPLE_DATATYPE_LINEAR, KHR_DF_SAMPLE_DATATYPE_SIGNED, KHR_DF_TRANSFER_ACESCC, KHR_DF_TRANSFER_ACESCCT, KHR_DF_TRANSFER_ADOBERGB, KHR_DF_TRANSFER_BT1886, KHR_DF_TRANSFER_DCIP3, KHR_DF_TRANSFER_HLG_EOTF, KHR_DF_TRANSFER_HLG_OETF, KHR_DF_TRANSFER_ITU, KHR_DF_TRANSFER_LINEAR, KHR_DF_TRANSFER_NTSC, KHR_DF_TRANSFER_PAL625_EOTF, KHR_DF_TRANSFER_PAL_OETF, KHR_DF_TRANSFER_PQ_EOTF, KHR_DF_TRANSFER_PQ_OETF, KHR_DF_TRANSFER_SLOG, KHR_DF_TRANSFER_SLOG2, KHR_DF_TRANSFER_SRGB, KHR_DF_TRANSFER_ST240, KHR_DF_TRANSFER_UNSPECIFIED, KHR_DF_VENDORID_KHRONOS, KHR_DF_VERSION, KHR_SUPERCOMPRESSION_BASISLZ, KHR_SUPERCOMPRESSION_NONE, KHR_SUPERCOMPRESSION_ZLIB, KHR_SUPERCOMPRESSION_ZSTD, KTX2Container, VK_FORMAT_A1R5G5B5_UNORM_PACK16, VK_FORMAT_A2B10G10R10_SINT_PACK32, VK_FORMAT_A2B10G10R10_SNORM_PACK32, VK_FORMAT_A2B10G10R10_UINT_PACK32, VK_FORMAT_A2B10G10R10_UNORM_PACK32, VK_FORMAT_A2R10G10B10_SINT_PACK32, VK_FORMAT_A2R10G10B10_SNORM_PACK32, VK_FORMAT_A2R10G10B10_UINT_PACK32, VK_FORMAT_A2R10G10B10_UNORM_PACK32, VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT, VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT, VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_10x10_SRGB_BLOCK, VK_FORMAT_ASTC_10x10_UNORM_BLOCK, VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_10x5_SRGB_BLOCK, VK_FORMAT_ASTC_10x5_UNORM_BLOCK, VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_10x6_SRGB_BLOCK, VK_FORMAT_ASTC_10x6_UNORM_BLOCK, VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_10x8_SRGB_BLOCK, VK_FORMAT_ASTC_10x8_UNORM_BLOCK, VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_12x10_SRGB_BLOCK, VK_FORMAT_ASTC_12x10_UNORM_BLOCK, VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_12x12_SRGB_BLOCK, VK_FORMAT_ASTC_12x12_UNORM_BLOCK, VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_4x4_SRGB_BLOCK, VK_FORMAT_ASTC_4x4_UNORM_BLOCK, VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_5x4_SRGB_BLOCK, VK_FORMAT_ASTC_5x4_UNORM_BLOCK, VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_5x5_SRGB_BLOCK, VK_FORMAT_ASTC_5x5_UNORM_BLOCK, VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_6x5_SRGB_BLOCK, VK_FORMAT_ASTC_6x5_UNORM_BLOCK, VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_6x6_SRGB_BLOCK, VK_FORMAT_ASTC_6x6_UNORM_BLOCK, VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_8x5_SRGB_BLOCK, VK_FORMAT_ASTC_8x5_UNORM_BLOCK, VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_8x6_SRGB_BLOCK, VK_FORMAT_ASTC_8x6_UNORM_BLOCK, VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_8x8_SRGB_BLOCK, VK_FORMAT_ASTC_8x8_UNORM_BLOCK, VK_FORMAT_B10G11R11_UFLOAT_PACK32, VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16, VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16, VK_FORMAT_B4G4R4A4_UNORM_PACK16, VK_FORMAT_B5G5R5A1_UNORM_PACK16, VK_FORMAT_B5G6R5_UNORM_PACK16, VK_FORMAT_B8G8R8A8_SINT, VK_FORMAT_B8G8R8A8_SNORM, VK_FORMAT_B8G8R8A8_SRGB, VK_FORMAT_B8G8R8A8_UINT, VK_FORMAT_B8G8R8A8_UNORM, VK_FORMAT_B8G8R8_SINT, VK_FORMAT_B8G8R8_SNORM, VK_FORMAT_B8G8R8_SRGB, VK_FORMAT_B8G8R8_UINT, VK_FORMAT_B8G8R8_UNORM, VK_FORMAT_BC1_RGBA_SRGB_BLOCK, VK_FORMAT_BC1_RGBA_UNORM_BLOCK, VK_FORMAT_BC1_RGB_SRGB_BLOCK, VK_FORMAT_BC1_RGB_UNORM_BLOCK, VK_FORMAT_BC2_SRGB_BLOCK, VK_FORMAT_BC2_UNORM_BLOCK, VK_FORMAT_BC3_SRGB_BLOCK, VK_FORMAT_BC3_UNORM_BLOCK, VK_FORMAT_BC4_SNORM_BLOCK, VK_FORMAT_BC4_UNORM_BLOCK, VK_FORMAT_BC5_SNORM_BLOCK, VK_FORMAT_BC5_UNORM_BLOCK, VK_FORMAT_BC6H_SFLOAT_BLOCK, VK_FORMAT_BC6H_UFLOAT_BLOCK, VK_FORMAT_BC7_SRGB_BLOCK, VK_FORMAT_BC7_UNORM_BLOCK, VK_FORMAT_D16_UNORM, VK_FORMAT_D16_UNORM_S8_UINT, VK_FORMAT_D24_UNORM_S8_UINT, VK_FORMAT_D32_SFLOAT, VK_FORMAT_D32_SFLOAT_S8_UINT, VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, VK_FORMAT_EAC_R11G11_SNORM_BLOCK, VK_FORMAT_EAC_R11G11_UNORM_BLOCK, VK_FORMAT_EAC_R11_SNORM_BLOCK, VK_FORMAT_EAC_R11_UNORM_BLOCK, VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK, VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK, VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK, VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK, VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK, VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK, VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16, VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16, VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG, VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG, VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG, VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG, VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG, VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG, VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG, VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG, VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16, VK_FORMAT_R10X6G10X6_UNORM_2PACK16, VK_FORMAT_R10X6_UNORM_PACK16, VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16, VK_FORMAT_R12X4G12X4_UNORM_2PACK16, VK_FORMAT_R12X4_UNORM_PACK16, VK_FORMAT_R16G16B16A16_SFLOAT, VK_FORMAT_R16G16B16A16_SINT, VK_FORMAT_R16G16B16A16_SNORM, VK_FORMAT_R16G16B16A16_UINT, VK_FORMAT_R16G16B16A16_UNORM, VK_FORMAT_R16G16B16_SFLOAT, VK_FORMAT_R16G16B16_SINT, VK_FORMAT_R16G16B16_SNORM, VK_FORMAT_R16G16B16_UINT, VK_FORMAT_R16G16B16_UNORM, VK_FORMAT_R16G16_SFLOAT, VK_FORMAT_R16G16_SINT, VK_FORMAT_R16G16_SNORM, VK_FORMAT_R16G16_UINT, VK_FORMAT_R16G16_UNORM, VK_FORMAT_R16_SFLOAT, VK_FORMAT_R16_SINT, VK_FORMAT_R16_SNORM, VK_FORMAT_R16_UINT, VK_FORMAT_R16_UNORM, VK_FORMAT_R32G32B32A32_SFLOAT, VK_FORMAT_R32G32B32A32_SINT, VK_FORMAT_R32G32B32A32_UINT, VK_FORMAT_R32G32B32_SFLOAT, VK_FORMAT_R32G32B32_SINT, VK_FORMAT_R32G32B32_UINT, VK_FORMAT_R32G32_SFLOAT, VK_FORMAT_R32G32_SINT, VK_FORMAT_R32G32_UINT, VK_FORMAT_R32_SFLOAT, VK_FORMAT_R32_SINT, VK_FORMAT_R32_UINT, VK_FORMAT_R4G4B4A4_UNORM_PACK16, VK_FORMAT_R4G4_UNORM_PACK8, VK_FORMAT_R5G5B5A1_UNORM_PACK16, VK_FORMAT_R5G6B5_UNORM_PACK16, VK_FORMAT_R64G64B64A64_SFLOAT, VK_FORMAT_R64G64B64A64_SINT, VK_FORMAT_R64G64B64A64_UINT, VK_FORMAT_R64G64B64_SFLOAT, VK_FORMAT_R64G64B64_SINT, VK_FORMAT_R64G64B64_UINT, VK_FORMAT_R64G64_SFLOAT, VK_FORMAT_R64G64_SINT, VK_FORMAT_R64G64_UINT, VK_FORMAT_R64_SFLOAT, VK_FORMAT_R64_SINT, VK_FORMAT_R64_UINT, VK_FORMAT_R8G8B8A8_SINT, VK_FORMAT_R8G8B8A8_SNORM, VK_FORMAT_R8G8B8A8_SRGB, VK_FORMAT_R8G8B8A8_UINT, VK_FORMAT_R8G8B8A8_UNORM, VK_FORMAT_R8G8B8_SINT, VK_FORMAT_R8G8B8_SNORM, VK_FORMAT_R8G8B8_SRGB, VK_FORMAT_R8G8B8_UINT, VK_FORMAT_R8G8B8_UNORM, VK_FORMAT_R8G8_SINT, VK_FORMAT_R8G8_SNORM, VK_FORMAT_R8G8_SRGB, VK_FORMAT_R8G8_UINT, VK_FORMAT_R8G8_UNORM, VK_FORMAT_R8_SINT, VK_FORMAT_R8_SNORM, VK_FORMAT_R8_SRGB, VK_FORMAT_R8_UINT, VK_FORMAT_R8_UNORM, VK_FORMAT_S8_UINT, VK_FORMAT_UNDEFINED, VK_FORMAT_X8_D24_UNORM_PACK32, read, write };\n//# sourceMappingURL=ktx-parse.modern.js.map\n","downloaded":true},"isEntry":false,"isTestFile":false,"sourceEqualsCompiled":false,"childModules":[],"dependencies":[],"initiators":["/node_modules/three-stdlib/loaders/KTX2Loader.js:"],"transpilationDependencies":[],"transpilationInitiators":[],"asyncDependencies":[],"warnings":[],"hasMissingDependencies":false,"source":null},"/node_modules/@use-gesture/core/10.2.20/actions/package.json:":{"query":"","module":{"path":"/node_modules/@use-gesture/core/10.2.20/actions/package.json","code":"{\n \"main\": \"dist/use-gesture-core-actions.cjs.js\",\n \"module\": \"dist/use-gesture-core-actions.esm.js\"\n}\n","downloaded":true},"isEntry":false,"isTestFile":false,"sourceEqualsCompiled":false,"childModules":[],"dependencies":[],"initiators":[],"transpilationDependencies":[],"transpilationInitiators":[],"asyncDependencies":[],"warnings":[],"hasMissingDependencies":false,"source":null},"/node_modules/@use-gesture/core/10.2.20/types/package.json:":{"query":"","module":{"path":"/node_modules/@use-gesture/core/10.2.20/types/package.json","code":"{\n \"main\": \"dist/use-gesture-core-types.cjs.js\",\n \"module\": \"dist/use-gesture-core-types.esm.js\"\n}\n","downloaded":true},"isEntry":false,"isTestFile":false,"sourceEqualsCompiled":false,"childModules":[],"dependencies":[],"initiators":[],"transpilationDependencies":[],"transpilationInitiators":[],"asyncDependencies":[],"warnings":[],"hasMissingDependencies":false,"source":null},"/node_modules/@use-gesture/core/10.2.20/utils/package.json:":{"query":"","module":{"path":"/node_modules/@use-gesture/core/10.2.20/utils/package.json","code":"{\n \"main\": \"dist/use-gesture-core-utils.cjs.js\",\n \"module\": \"dist/use-gesture-core-utils.esm.js\"\n}\n","downloaded":true},"isEntry":false,"isTestFile":false,"sourceEqualsCompiled":false,"childModules":[],"dependencies":[],"initiators":[],"transpilationDependencies":[],"transpilationInitiators":[],"asyncDependencies":[],"warnings":[],"hasMissingDependencies":false,"source":null},"/node_modules/__csb/react-dom-entrypoint.js:":{"query":"","module":{"path":"/node_modules/__csb/react-dom-entrypoint.js","code":"if (typeof window !== 'undefined') {\nconst runtime = require('react-refresh/runtime');\nruntime.injectIntoGlobalHook(window);\nwindow.$RefreshReg$ = () => {};\nwindow.$RefreshSig$ = () => type => type;\n}\n"},"isEntry":true,"isTestFile":false,"sourceEqualsCompiled":true,"childModules":[],"dependencies":["/node_modules/react-refresh/runtime.js:"],"initiators":[],"transpilationDependencies":[],"transpilationInitiators":[],"asyncDependencies":[],"warnings":[],"hasMissingDependencies":false,"source":null}},"cachedPaths":{"/node_modules/@react-three/drei/core":{"../materials/BlurPass.js":"/node_modules/@react-three/drei/materials/BlurPass.js","../materials/MeshReflectorMaterial.js":"/node_modules/@react-three/drei/materials/MeshReflectorMaterial.js","./Line.js":"/node_modules/@react-three/drei/core/Line.js","./useFont.js":"/node_modules/@react-three/drei/core/useFont.js","./shaderMaterial.js":"/node_modules/@react-three/drei/core/shaderMaterial.js","./useTexture.js":"/node_modules/@react-three/drei/core/useTexture.js","./useGLTF.js":"/node_modules/@react-three/drei/core/useGLTF.js","./Clone.js":"/node_modules/@react-three/drei/core/Clone.js","./useFBO.js":"/node_modules/@react-three/drei/core/useFBO.js","./useVideoTexture.js":"/node_modules/@react-three/drei/core/useVideoTexture.js","./Facemesh.js":"/node_modules/@react-three/drei/core/Facemesh.js","./FaceLandmarker.js":"/node_modules/@react-three/drei/core/FaceLandmarker.js","./GizmoHelper.js":"/node_modules/@react-three/drei/core/GizmoHelper.js","../helpers/glsl/distort.vert.glsl.js":"/node_modules/@react-three/drei/helpers/glsl/distort.vert.glsl.js","../materials/MeshRefractionMaterial.js":"/node_modules/@react-three/drei/materials/MeshRefractionMaterial.js","../materials/DiscardMaterial.js":"/node_modules/@react-three/drei/materials/DiscardMaterial.js","./Environment.js":"/node_modules/@react-three/drei/core/Environment.js","./ContactShadows.js":"/node_modules/@react-three/drei/core/ContactShadows.js","./Center.js":"/node_modules/@react-three/drei/core/Center.js","./AccumulativeShadows.js":"/node_modules/@react-three/drei/core/AccumulativeShadows.js","./Bounds.js":"/node_modules/@react-three/drei/core/Bounds.js","./useHelper.js":"/node_modules/@react-three/drei/core/useHelper.js","./Edges.js":"/node_modules/@react-three/drei/core/Edges.js","../materials/SpotLightMaterial.js":"/node_modules/@react-three/drei/materials/SpotLightMaterial.js","../helpers/glsl/DefaultSpotlightShadowShadows.glsl.js":"/node_modules/@react-three/drei/helpers/glsl/DefaultSpotlightShadowShadows.glsl.js","./useEnvironment.js":"/node_modules/@react-three/drei/core/useEnvironment.js","../materials/WireframeMaterial.js":"/node_modules/@react-three/drei/materials/WireframeMaterial.js","./useIntersect.js":"/node_modules/@react-three/drei/core/useIntersect.js","./RenderTexture.js":"/node_modules/@react-three/drei/core/RenderTexture.js","three-stdlib":"/node_modules/three-stdlib/index.js","react":"/node_modules/react/index.js","suspend-react":"/node_modules/suspend-react/index.js","three":"/node_modules/three/build/three.module.js","@react-three/fiber":"/node_modules/@react-three/fiber/dist/react-three-fiber.esm.js","react-merge-refs":"/node_modules/react-merge-refs/dist/react-merge-refs.esm.js","troika-three-text":"/node_modules/troika-three-text/dist/troika-three-text.esm.js","camera-controls":"/node_modules/camera-controls/dist/camera-controls.module.js","maath":"/node_modules/maath/dist/maath.esm.js","three-mesh-bvh":"/node_modules/three-mesh-bvh/src/index.js","react-composer":"/node_modules/react-composer/es/index.js","./useCubeCamera.js":"/node_modules/@react-three/drei/core/useCubeCamera.js","./OrthographicCamera.js":"/node_modules/@react-three/drei/core/OrthographicCamera.js","./Hud.js":"/node_modules/@react-three/drei/core/Hud.js","../helpers/useEffectfulState.js":"/node_modules/@react-three/drei/helpers/useEffectfulState.js","./Text3D.js":"/node_modules/@react-three/drei/core/Text3D.js","./Billboard.js":"/node_modules/@react-three/drei/core/Billboard.js","./shapes.js":"/node_modules/@react-three/drei/core/shapes.js","../helpers/environment-assets.js":"/node_modules/@react-three/drei/helpers/environment-assets.js","zustand":"/node_modules/zustand/index.js","@mediapipe/tasks-vision":"/node_modules/@mediapipe/tasks-vision/vision_bundle.mjs","meshline":"/node_modules/meshline/dist/index.js","stats.js":"/node_modules/stats.js/build/stats.min.js","detect-gpu":"/node_modules/detect-gpu/dist/detect-gpu.esm.js","@babel/runtime/helpers/esm/extends":"/node_modules/@babel/runtime/helpers/esm/extends.js","lodash.pick":"/node_modules/lodash.pick/index.js","lodash.omit":"/node_modules/lodash.omit/index.js"},"/node_modules/@use-gesture/core/10.2.20/actions/dist":{"../../dist/actions-aeda4790.esm.js":"/node_modules/@use-gesture/core/10.2.20/dist/actions-aeda4790.esm.js","../../dist/maths-b2a210f4.esm.js":"/node_modules/@use-gesture/core/10.2.20/dist/maths-b2a210f4.esm.js"},"/node_modules/@use-gesture/core/10.2.20/utils/dist":{"../../dist/maths-b2a210f4.esm.js":"/node_modules/@use-gesture/core/10.2.20/dist/maths-b2a210f4.esm.js"},"/node_modules/react":{"./cjs/react.production.min.js":"/node_modules/react/cjs/react.production.min.js","./cjs/react.development.js":"/node_modules/react/cjs/react.development.js","./cjs/react-jsx-runtime.development.js":"/node_modules/react/cjs/react-jsx-runtime.development.js"},"/node_modules/@react-three/drei":{"./web/Html.js":"/node_modules/@react-three/drei/web/Html.js","./web/CycleRaycast.js":"/node_modules/@react-three/drei/web/CycleRaycast.js","./web/useCursor.js":"/node_modules/@react-three/drei/web/useCursor.js","./web/Loader.js":"/node_modules/@react-three/drei/web/Loader.js","./web/ScrollControls.js":"/node_modules/@react-three/drei/web/ScrollControls.js","./web/PresentationControls.js":"/node_modules/@react-three/drei/web/PresentationControls.js","./web/KeyboardControls.js":"/node_modules/@react-three/drei/web/KeyboardControls.js","./web/Select.js":"/node_modules/@react-three/drei/web/Select.js","./core/Billboard.js":"/node_modules/@react-three/drei/core/Billboard.js","./core/ScreenSpace.js":"/node_modules/@react-three/drei/core/ScreenSpace.js","./core/QuadraticBezierLine.js":"/node_modules/@react-three/drei/core/QuadraticBezierLine.js","./core/CubicBezierLine.js":"/node_modules/@react-three/drei/core/CubicBezierLine.js","./core/CatmullRomLine.js":"/node_modules/@react-three/drei/core/CatmullRomLine.js","./core/Line.js":"/node_modules/@react-three/drei/core/Line.js","./core/PositionalAudio.js":"/node_modules/@react-three/drei/core/PositionalAudio.js","./core/Text.js":"/node_modules/@react-three/drei/core/Text.js","./core/Text3D.js":"/node_modules/@react-three/drei/core/Text3D.js","./core/Effects.js":"/node_modules/@react-three/drei/core/Effects.js","./core/GradientTexture.js":"/node_modules/@react-three/drei/core/GradientTexture.js","./core/Image.js":"/node_modules/@react-three/drei/core/Image.js","./core/Edges.js":"/node_modules/@react-three/drei/core/Edges.js","./core/Trail.js":"/node_modules/@react-three/drei/core/Trail.js","./core/Sampler.js":"/node_modules/@react-three/drei/core/Sampler.js","./core/ComputedAttribute.js":"/node_modules/@react-three/drei/core/ComputedAttribute.js","./core/Clone.js":"/node_modules/@react-three/drei/core/Clone.js","./core/MarchingCubes.js":"/node_modules/@react-three/drei/core/MarchingCubes.js","./core/Decal.js":"/node_modules/@react-three/drei/core/Decal.js","./core/Svg.js":"/node_modules/@react-three/drei/core/Svg.js","./core/Gltf.js":"/node_modules/@react-three/drei/core/Gltf.js","./core/AsciiRenderer.js":"/node_modules/@react-three/drei/core/AsciiRenderer.js","./core/OrthographicCamera.js":"/node_modules/@react-three/drei/core/OrthographicCamera.js","./core/PerspectiveCamera.js":"/node_modules/@react-three/drei/core/PerspectiveCamera.js","./core/CubeCamera.js":"/node_modules/@react-three/drei/core/CubeCamera.js","./core/DeviceOrientationControls.js":"/node_modules/@react-three/drei/core/DeviceOrientationControls.js","./core/FlyControls.js":"/node_modules/@react-three/drei/core/FlyControls.js","./core/MapControls.js":"/node_modules/@react-three/drei/core/MapControls.js","./core/OrbitControls.js":"/node_modules/@react-three/drei/core/OrbitControls.js","./core/TrackballControls.js":"/node_modules/@react-three/drei/core/TrackballControls.js","./core/ArcballControls.js":"/node_modules/@react-three/drei/core/ArcballControls.js","./core/TransformControls.js":"/node_modules/@react-three/drei/core/TransformControls.js","./core/PointerLockControls.js":"/node_modules/@react-three/drei/core/PointerLockControls.js","./core/FirstPersonControls.js":"/node_modules/@react-three/drei/core/FirstPersonControls.js","./core/CameraControls.js":"/node_modules/@react-three/drei/core/CameraControls.js","./core/FaceControls.js":"/node_modules/@react-three/drei/core/FaceControls.js","./core/GizmoHelper.js":"/node_modules/@react-three/drei/core/GizmoHelper.js","./core/GizmoViewcube.js":"/node_modules/@react-three/drei/core/GizmoViewcube.js","./core/GizmoViewport.js":"/node_modules/@react-three/drei/core/GizmoViewport.js","./core/Grid.js":"/node_modules/@react-three/drei/core/Grid.js","./core/useCubeTexture.js":"/node_modules/@react-three/drei/core/useCubeTexture.js","./core/useFBX.js":"/node_modules/@react-three/drei/core/useFBX.js","./core/useGLTF.js":"/node_modules/@react-three/drei/core/useGLTF.js","./core/useKTX2.js":"/node_modules/@react-three/drei/core/useKTX2.js","./core/useProgress.js":"/node_modules/@react-three/drei/core/useProgress.js","./core/useTexture.js":"/node_modules/@react-three/drei/core/useTexture.js","./core/useVideoTexture.js":"/node_modules/@react-three/drei/core/useVideoTexture.js","./core/useFont.js":"/node_modules/@react-three/drei/core/useFont.js","./core/Stats.js":"/node_modules/@react-three/drei/core/Stats.js","./core/useDepthBuffer.js":"/node_modules/@react-three/drei/core/useDepthBuffer.js","./core/useAspect.js":"/node_modules/@react-three/drei/core/useAspect.js","./core/useCamera.js":"/node_modules/@react-three/drei/core/useCamera.js","./core/useDetectGPU.js":"/node_modules/@react-three/drei/core/useDetectGPU.js","./core/useHelper.js":"/node_modules/@react-three/drei/core/useHelper.js","./core/useBVH.js":"/node_modules/@react-three/drei/core/useBVH.js","./core/useContextBridge.js":"/node_modules/@react-three/drei/core/useContextBridge.js","./core/useAnimations.js":"/node_modules/@react-three/drei/core/useAnimations.js","./core/useFBO.js":"/node_modules/@react-three/drei/core/useFBO.js","./core/useIntersect.js":"/node_modules/@react-three/drei/core/useIntersect.js","./core/useBoxProjectedEnv.js":"/node_modules/@react-three/drei/core/useBoxProjectedEnv.js","./core/BBAnchor.js":"/node_modules/@react-three/drei/core/BBAnchor.js","./core/useTrailTexture.js":"/node_modules/@react-three/drei/core/useTrailTexture.js","./core/useCubeCamera.js":"/node_modules/@react-three/drei/core/useCubeCamera.js","./core/Example.js":"/node_modules/@react-three/drei/core/Example.js","./core/SpriteAnimator.js":"/node_modules/@react-three/drei/core/SpriteAnimator.js","./core/FaceLandmarker.js":"/node_modules/@react-three/drei/core/FaceLandmarker.js","./core/CurveModifier.js":"/node_modules/@react-three/drei/core/CurveModifier.js","./core/MeshDistortMaterial.js":"/node_modules/@react-three/drei/core/MeshDistortMaterial.js","./core/MeshWobbleMaterial.js":"/node_modules/@react-three/drei/core/MeshWobbleMaterial.js","./core/MeshReflectorMaterial.js":"/node_modules/@react-three/drei/core/MeshReflectorMaterial.js","./core/MeshRefractionMaterial.js":"/node_modules/@react-three/drei/core/MeshRefractionMaterial.js","./core/MeshTransmissionMaterial.js":"/node_modules/@react-three/drei/core/MeshTransmissionMaterial.js","./core/MeshDiscardMaterial.js":"/node_modules/@react-three/drei/core/MeshDiscardMaterial.js","./core/PointMaterial.js":"/node_modules/@react-three/drei/core/PointMaterial.js","./core/shaderMaterial.js":"/node_modules/@react-three/drei/core/shaderMaterial.js","./core/softShadows.js":"/node_modules/@react-three/drei/core/softShadows.js","./core/shapes.js":"/node_modules/@react-three/drei/core/shapes.js","./core/Facemesh.js":"/node_modules/@react-three/drei/core/Facemesh.js","./core/RoundedBox.js":"/node_modules/@react-three/drei/core/RoundedBox.js","./core/ScreenQuad.js":"/node_modules/@react-three/drei/core/ScreenQuad.js","./core/Center.js":"/node_modules/@react-three/drei/core/Center.js","./core/Resize.js":"/node_modules/@react-three/drei/core/Resize.js","./core/Bounds.js":"/node_modules/@react-three/drei/core/Bounds.js","./core/CameraShake.js":"/node_modules/@react-three/drei/core/CameraShake.js","./core/Float.js":"/node_modules/@react-three/drei/core/Float.js","./core/Stage.js":"/node_modules/@react-three/drei/core/Stage.js","./core/Backdrop.js":"/node_modules/@react-three/drei/core/Backdrop.js","./core/Shadow.js":"/node_modules/@react-three/drei/core/Shadow.js","./core/Caustics.js":"/node_modules/@react-three/drei/core/Caustics.js","./core/ContactShadows.js":"/node_modules/@react-three/drei/core/ContactShadows.js","./core/AccumulativeShadows.js":"/node_modules/@react-three/drei/core/AccumulativeShadows.js","./core/Reflector.js":"/node_modules/@react-three/drei/core/Reflector.js","./core/SpotLight.js":"/node_modules/@react-three/drei/core/SpotLight.js","./core/Environment.js":"/node_modules/@react-three/drei/core/Environment.js","./core/Lightformer.js":"/node_modules/@react-three/drei/core/Lightformer.js","./core/Sky.js":"/node_modules/@react-three/drei/core/Sky.js","./core/Stars.js":"/node_modules/@react-three/drei/core/Stars.js","./core/Cloud.js":"/node_modules/@react-three/drei/core/Cloud.js","./core/Sparkles.js":"/node_modules/@react-three/drei/core/Sparkles.js","./core/useEnvironment.js":"/node_modules/@react-three/drei/core/useEnvironment.js","./core/useMatcapTexture.js":"/node_modules/@react-three/drei/core/useMatcapTexture.js","./core/useNormalTexture.js":"/node_modules/@react-three/drei/core/useNormalTexture.js","./core/Wireframe.js":"/node_modules/@react-three/drei/core/Wireframe.js","./core/Points.js":"/node_modules/@react-three/drei/core/Points.js","./core/Instances.js":"/node_modules/@react-three/drei/core/Instances.js","./core/Segments.js":"/node_modules/@react-three/drei/core/Segments.js","./core/Detailed.js":"/node_modules/@react-three/drei/core/Detailed.js","./core/Preload.js":"/node_modules/@react-three/drei/core/Preload.js","./core/BakeShadows.js":"/node_modules/@react-three/drei/core/BakeShadows.js","./core/meshBounds.js":"/node_modules/@react-three/drei/core/meshBounds.js","./core/AdaptiveDpr.js":"/node_modules/@react-three/drei/core/AdaptiveDpr.js","./core/AdaptiveEvents.js":"/node_modules/@react-three/drei/core/AdaptiveEvents.js","./core/PerformanceMonitor.js":"/node_modules/@react-three/drei/core/PerformanceMonitor.js","./core/RenderTexture.js":"/node_modules/@react-three/drei/core/RenderTexture.js","./core/Mask.js":"/node_modules/@react-three/drei/core/Mask.js","./core/Hud.js":"/node_modules/@react-three/drei/core/Hud.js","./core/MeshPortalMaterial.js":"/node_modules/@react-three/drei/core/MeshPortalMaterial.js","./web/View.js":"/node_modules/@react-three/drei/web/View.js","./web/pivotControls/index.js":"/node_modules/@react-three/drei/web/pivotControls/index.js"},"/node_modules/@react-three/fiber/dist":{"./index-27a1523b.esm.js":"/node_modules/@react-three/fiber/dist/index-27a1523b.esm.js","react":"/node_modules/react/index.js","zustand":"/node_modules/zustand/index.js","react-reconciler":"/node_modules/react-reconciler/index.js","scheduler":"/node_modules/scheduler/index.js","three":"/node_modules/three/build/three.module.js","react-use-measure":"/node_modules/react-use-measure/dist/web.js","its-fine":"/node_modules/its-fine/dist/index.js","suspend-react":"/node_modules/suspend-react/0.0.8/dist/index.js","react-reconciler/constants":"/node_modules/react-reconciler/constants.js","@babel/runtime/helpers/esm/extends":"/node_modules/@babel/runtime/helpers/esm/extends.js"},"/node_modules/react-refresh":{"./cjs/react-refresh-runtime.production.min.js":"/node_modules/react-refresh/cjs/react-refresh-runtime.production.min.js","./cjs/react-refresh-runtime.development.js":"/node_modules/react-refresh/cjs/react-refresh-runtime.development.js"},"/node_modules/@use-gesture/core/10.2.20/dist":{"./maths-b2a210f4.esm.js":"/node_modules/@use-gesture/core/10.2.20/dist/maths-b2a210f4.esm.js","./actions-aeda4790.esm.js":"/node_modules/@use-gesture/core/10.2.20/dist/actions-aeda4790.esm.js"},"/node_modules/@use-gesture/react/dist":{"react":"/node_modules/react/index.js","@use-gesture/core":"/node_modules/@use-gesture/core/10.2.20/dist/use-gesture-core.esm.js","@use-gesture/core/utils":"/node_modules/@use-gesture/core/10.2.20/utils/dist/use-gesture-core-utils.esm.js","@use-gesture/core/types":"/node_modules/@use-gesture/core/10.2.20/types/dist/use-gesture-core-types.esm.js","@use-gesture/core/actions":"/node_modules/@use-gesture/core/10.2.20/actions/dist/use-gesture-core-actions.esm.js"},"/node_modules/react-dom":{"./cjs/react-dom.production.min.js":"/node_modules/react-dom/cjs/react-dom.production.min.js","./cjs/react-dom.development.js":"/node_modules/react-dom/cjs/react-dom.development.js","react-dom":"/node_modules/react-dom/index.js"},"/node_modules/@react-three/drei/web":{"three-stdlib":"/node_modules/three-stdlib/index.js","react":"/node_modules/react/index.js","three":"/node_modules/three/build/three.module.js","@react-three/fiber":"/node_modules/@react-three/fiber/dist/react-three-fiber.esm.js","react-merge-refs":"/node_modules/react-merge-refs/dist/react-merge-refs.esm.js","maath":"/node_modules/maath/dist/maath.esm.js","@react-spring/three":"/node_modules/@react-spring/three/dist/react-spring-three.esm.js","@use-gesture/react":"/node_modules/@use-gesture/react/dist/use-gesture-react.esm.js","zustand/shallow":"/node_modules/zustand/shallow.js","../core/useProgress.js":"/node_modules/@react-three/drei/core/useProgress.js","zustand":"/node_modules/zustand/index.js","react-dom/client":"/node_modules/react-dom/client.js","zustand/middleware":"/node_modules/zustand/middleware.js","@babel/runtime/helpers/esm/extends":"/node_modules/@babel/runtime/helpers/esm/extends.js"},"/node_modules/opentype.js/dist":{"fs":"fs"},"/node_modules/@react-three/drei/web/pivotControls":{"./AxisArrow.js":"/node_modules/@react-three/drei/web/pivotControls/AxisArrow.js","./PlaneSlider.js":"/node_modules/@react-three/drei/web/pivotControls/PlaneSlider.js","./AxisRotator.js":"/node_modules/@react-three/drei/web/pivotControls/AxisRotator.js","./context.js":"/node_modules/@react-three/drei/web/pivotControls/context.js","react":"/node_modules/react/index.js","three":"/node_modules/three/build/three.module.js","@react-three/fiber":"/node_modules/@react-three/fiber/dist/react-three-fiber.esm.js","@babel/runtime/helpers/esm/extends":"/node_modules/@babel/runtime/helpers/esm/extends.js","../../core/Line.js":"/node_modules/@react-three/drei/core/Line.js","../Html.js":"/node_modules/@react-three/drei/web/Html.js","lodash.clamp":"/node_modules/lodash.clamp/index.js"},"/node_modules/three-stdlib/loaders":{"../utils/WorkerPool.js":"/node_modules/three-stdlib/utils/WorkerPool.js","../_polyfill/CompressedArrayTexture.js":"/node_modules/three-stdlib/_polyfill/CompressedArrayTexture.js","../_polyfill/Data3DTexture.js":"/node_modules/three-stdlib/_polyfill/Data3DTexture.js","three":"/node_modules/three/build/three.module.js","ktx-parse":"/node_modules/ktx-parse/dist/ktx-parse.modern.js","zstddec":"/node_modules/zstddec/dist/zstddec.modern.js","../curves/NURBSCurve.js":"/node_modules/three-stdlib/curves/NURBSCurve.js","../misc/Volume.js":"/node_modules/three-stdlib/misc/Volume.js","./ColladaLoader.js":"/node_modules/three-stdlib/loaders/ColladaLoader.js","./GLTFLoader.js":"/node_modules/three-stdlib/loaders/GLTFLoader.js","./TGALoader.js":"/node_modules/three-stdlib/loaders/TGALoader.js","../utils/BufferGeometryUtils.js":"/node_modules/three-stdlib/utils/BufferGeometryUtils.js","./RGBELoader.js":"/node_modules/three-stdlib/loaders/RGBELoader.js","./lwo/IFFParser.js":"/node_modules/three-stdlib/loaders/lwo/IFFParser.js","fflate":"/node_modules/fflate/esm/browser.js","opentype.js":"/node_modules/opentype.js/dist/opentype.module.js","mmd-parser":"/node_modules/mmd-parser/build/mmdparser.js","chevrotain":"/node_modules/chevrotain/lib/src/api.js"},"/":{"/node_modules/react/package.json":"/node_modules/react/package.json"},"/node_modules/react-dom/cjs":{"react":"/node_modules/react/index.js","scheduler":"/node_modules/scheduler/0.23.0/index.js"},"/node_modules/three-stdlib/_polyfill":{"three":"/node_modules/three/build/three.module.js"},"/node_modules/three-stdlib":{"./loaders/KTX2Loader.js":"/node_modules/three-stdlib/loaders/KTX2Loader.js","./utils/SceneUtils.js":"/node_modules/three-stdlib/utils/SceneUtils.js","./utils/UVsDebug.js":"/node_modules/three-stdlib/utils/UVsDebug.js","./utils/GeometryUtils.js":"/node_modules/three-stdlib/utils/GeometryUtils.js","./utils/RoughnessMipmapper.js":"/node_modules/three-stdlib/utils/RoughnessMipmapper.js","./utils/SkeletonUtils.js":"/node_modules/three-stdlib/utils/SkeletonUtils.js","./utils/ShadowMapViewer.js":"/node_modules/three-stdlib/utils/ShadowMapViewer.js","./utils/BufferGeometryUtils.js":"/node_modules/three-stdlib/utils/BufferGeometryUtils.js","./utils/GeometryCompressionUtils.js":"/node_modules/three-stdlib/utils/GeometryCompressionUtils.js","./loaders/FBXLoader.js":"/node_modules/three-stdlib/loaders/FBXLoader.js","./loaders/FontLoader.js":"/node_modules/three-stdlib/loaders/FontLoader.js","./loaders/TGALoader.js":"/node_modules/three-stdlib/loaders/TGALoader.js","./loaders/LUTCubeLoader.js":"/node_modules/three-stdlib/loaders/LUTCubeLoader.js","./loaders/NRRDLoader.js":"/node_modules/three-stdlib/loaders/NRRDLoader.js","./loaders/STLLoader.js":"/node_modules/three-stdlib/loaders/STLLoader.js","./loaders/MTLLoader.js":"/node_modules/three-stdlib/loaders/MTLLoader.js","./loaders/XLoader.js":"/node_modules/three-stdlib/loaders/XLoader.js","./loaders/BVHLoader.js":"/node_modules/three-stdlib/loaders/BVHLoader.js","./loaders/KMZLoader.js":"/node_modules/three-stdlib/loaders/KMZLoader.js","./loaders/VRMLoader.js":"/node_modules/three-stdlib/loaders/VRMLoader.js","./loaders/VRMLLoader.js":"/node_modules/three-stdlib/loaders/VRMLLoader.js","./loaders/LottieLoader.js":"/node_modules/three-stdlib/loaders/LottieLoader.js","./loaders/TTFLoader.js":"/node_modules/three-stdlib/loaders/TTFLoader.js","./loaders/RGBELoader.js":"/node_modules/three-stdlib/loaders/RGBELoader.js","./loaders/AssimpLoader.js":"/node_modules/three-stdlib/loaders/AssimpLoader.js","./loaders/ColladaLoader.js":"/node_modules/three-stdlib/loaders/ColladaLoader.js","./loaders/MDDLoader.js":"/node_modules/three-stdlib/loaders/MDDLoader.js","./loaders/EXRLoader.js":"/node_modules/three-stdlib/loaders/EXRLoader.js","./loaders/3MFLoader.js":"/node_modules/three-stdlib/loaders/3MFLoader.js","./loaders/XYZLoader.js":"/node_modules/three-stdlib/loaders/XYZLoader.js","./loaders/VTKLoader.js":"/node_modules/three-stdlib/loaders/VTKLoader.js","./loaders/LUT3dlLoader.js":"/node_modules/three-stdlib/loaders/LUT3dlLoader.js","./loaders/DDSLoader.js":"/node_modules/three-stdlib/loaders/DDSLoader.js","./loaders/PVRLoader.js":"/node_modules/three-stdlib/loaders/PVRLoader.js","./loaders/GCodeLoader.js":"/node_modules/three-stdlib/loaders/GCodeLoader.js","./loaders/BasisTextureLoader.js":"/node_modules/three-stdlib/loaders/BasisTextureLoader.js","./loaders/TDSLoader.js":"/node_modules/three-stdlib/loaders/TDSLoader.js","./loaders/LDrawLoader.js":"/node_modules/three-stdlib/loaders/LDrawLoader.js","./loaders/GLTFLoader.js":"/node_modules/three-stdlib/loaders/GLTFLoader.js","./loaders/SVGLoader.js":"/node_modules/three-stdlib/loaders/SVGLoader.js","./loaders/3DMLoader.js":"/node_modules/three-stdlib/loaders/3DMLoader.js","./loaders/OBJLoader.js":"/node_modules/three-stdlib/loaders/OBJLoader.js","./loaders/AMFLoader.js":"/node_modules/three-stdlib/loaders/AMFLoader.js","./loaders/MMDLoader.js":"/node_modules/three-stdlib/loaders/MMDLoader.js","./loaders/MD2Loader.js":"/node_modules/three-stdlib/loaders/MD2Loader.js","./loaders/KTXLoader.js":"/node_modules/three-stdlib/loaders/KTXLoader.js","./loaders/TiltLoader.js":"/node_modules/three-stdlib/loaders/TiltLoader.js","./loaders/DRACOLoader.js":"/node_modules/three-stdlib/loaders/DRACOLoader.js","./loaders/HDRCubeTextureLoader.js":"/node_modules/three-stdlib/loaders/HDRCubeTextureLoader.js","./loaders/PDBLoader.js":"/node_modules/three-stdlib/loaders/PDBLoader.js","./loaders/PRWMLoader.js":"/node_modules/three-stdlib/loaders/PRWMLoader.js","./loaders/RGBMLoader.js":"/node_modules/three-stdlib/loaders/RGBMLoader.js","./loaders/VOXLoader.js":"/node_modules/three-stdlib/loaders/VOXLoader.js","./loaders/PCDLoader.js":"/node_modules/three-stdlib/loaders/PCDLoader.js","./loaders/LWOLoader.js":"/node_modules/three-stdlib/loaders/LWOLoader.js","./loaders/PLYLoader.js":"/node_modules/three-stdlib/loaders/PLYLoader.js","./misc/MD2CharacterComplex.js":"/node_modules/three-stdlib/misc/MD2CharacterComplex.js","./misc/ConvexObjectBreaker.js":"/node_modules/three-stdlib/misc/ConvexObjectBreaker.js","./misc/MorphBlendMesh.js":"/node_modules/three-stdlib/misc/MorphBlendMesh.js","./misc/GPUComputationRenderer.js":"/node_modules/three-stdlib/misc/GPUComputationRenderer.js","./misc/Gyroscope.js":"/node_modules/three-stdlib/misc/Gyroscope.js","./misc/MorphAnimMesh.js":"/node_modules/three-stdlib/misc/MorphAnimMesh.js","./misc/RollerCoaster.js":"/node_modules/three-stdlib/misc/RollerCoaster.js","./misc/Timer.js":"/node_modules/three-stdlib/misc/Timer.js","./misc/WebGL.js":"/node_modules/three-stdlib/misc/WebGL.js","./misc/MD2Character.js":"/node_modules/three-stdlib/misc/MD2Character.js","./misc/VolumeSlice.js":"/node_modules/three-stdlib/misc/VolumeSlice.js","./misc/TubePainter.js":"/node_modules/three-stdlib/misc/TubePainter.js","./misc/Volume.js":"/node_modules/three-stdlib/misc/Volume.js","./misc/ProgressiveLightmap.js":"/node_modules/three-stdlib/misc/ProgressiveLightmap.js","./renderers/CSS2DRenderer.js":"/node_modules/three-stdlib/renderers/CSS2DRenderer.js","./renderers/CSS3DRenderer.js":"/node_modules/three-stdlib/renderers/CSS3DRenderer.js","./renderers/Projector.js":"/node_modules/three-stdlib/renderers/Projector.js","./renderers/SVGRenderer.js":"/node_modules/three-stdlib/renderers/SVGRenderer.js","./textures/FlakesTexture.js":"/node_modules/three-stdlib/textures/FlakesTexture.js","./modifiers/CurveModifier.js":"/node_modules/three-stdlib/modifiers/CurveModifier.js","./modifiers/SimplifyModifier.js":"/node_modules/three-stdlib/modifiers/SimplifyModifier.js","./modifiers/EdgeSplitModifier.js":"/node_modules/three-stdlib/modifiers/EdgeSplitModifier.js","./modifiers/TessellateModifier.js":"/node_modules/three-stdlib/modifiers/TessellateModifier.js","./exporters/GLTFExporter.js":"/node_modules/three-stdlib/exporters/GLTFExporter.js","./exporters/USDZExporter.js":"/node_modules/three-stdlib/exporters/USDZExporter.js","./exporters/PLYExporter.js":"/node_modules/three-stdlib/exporters/PLYExporter.js","./exporters/DRACOExporter.js":"/node_modules/three-stdlib/exporters/DRACOExporter.js","./exporters/ColladaExporter.js":"/node_modules/three-stdlib/exporters/ColladaExporter.js","./exporters/MMDExporter.js":"/node_modules/three-stdlib/exporters/MMDExporter.js","./exporters/STLExporter.js":"/node_modules/three-stdlib/exporters/STLExporter.js","./exporters/OBJExporter.js":"/node_modules/three-stdlib/exporters/OBJExporter.js","./environments/RoomEnvironment.js":"/node_modules/three-stdlib/environments/RoomEnvironment.js","./animation/AnimationClipCreator.js":"/node_modules/three-stdlib/animation/AnimationClipCreator.js","./animation/CCDIKSolver.js":"/node_modules/three-stdlib/animation/CCDIKSolver.js","./animation/MMDPhysics.js":"/node_modules/three-stdlib/animation/MMDPhysics.js","./animation/MMDAnimationHelper.js":"/node_modules/three-stdlib/animation/MMDAnimationHelper.js","./objects/Reflector.js":"/node_modules/three-stdlib/objects/Reflector.js","./objects/Refractor.js":"/node_modules/three-stdlib/objects/Refractor.js","./objects/ShadowMesh.js":"/node_modules/three-stdlib/objects/ShadowMesh.js","./objects/Lensflare.js":"/node_modules/three-stdlib/objects/Lensflare.js","./objects/Water.js":"/node_modules/three-stdlib/objects/Water.js","./objects/MarchingCubes.js":"/node_modules/three-stdlib/objects/MarchingCubes.js","./objects/LightningStorm.js":"/node_modules/three-stdlib/objects/LightningStorm.js","./objects/ReflectorRTT.js":"/node_modules/three-stdlib/objects/ReflectorRTT.js","./objects/ReflectorForSSRPass.js":"/node_modules/three-stdlib/objects/ReflectorForSSRPass.js","./objects/Sky.js":"/node_modules/three-stdlib/objects/Sky.js","./objects/Water2.js":"/node_modules/three-stdlib/objects/Water2.js","./objects/GroundProjectedEnv.js":"/node_modules/three-stdlib/objects/GroundProjectedEnv.js","./cameras/CinematicCamera.js":"/node_modules/three-stdlib/cameras/CinematicCamera.js","./math/ConvexHull.js":"/node_modules/three-stdlib/math/ConvexHull.js","./math/MeshSurfaceSampler.js":"/node_modules/three-stdlib/math/MeshSurfaceSampler.js","./math/SimplexNoise.js":"/node_modules/three-stdlib/math/SimplexNoise.js","./math/OBB.js":"/node_modules/three-stdlib/math/OBB.js","./math/Capsule.js":"/node_modules/three-stdlib/math/Capsule.js","./math/ColorConverter.js":"/node_modules/three-stdlib/math/ColorConverter.js","./math/ImprovedNoise.js":"/node_modules/three-stdlib/math/ImprovedNoise.js","./math/Octree.js":"/node_modules/three-stdlib/math/Octree.js","./math/Lut.js":"/node_modules/three-stdlib/math/Lut.js","./controls/FirstPersonControls.js":"/node_modules/three-stdlib/controls/FirstPersonControls.js","./controls/TransformControls.js":"/node_modules/three-stdlib/controls/TransformControls.js","./controls/DragControls.js":"/node_modules/three-stdlib/controls/DragControls.js","./controls/PointerLockControls.js":"/node_modules/three-stdlib/controls/PointerLockControls.js","./controls/DeviceOrientationControls.js":"/node_modules/three-stdlib/controls/DeviceOrientationControls.js","./controls/TrackballControls.js":"/node_modules/three-stdlib/controls/TrackballControls.js","./controls/OrbitControls.js":"/node_modules/three-stdlib/controls/OrbitControls.js","./controls/ArcballControls.js":"/node_modules/three-stdlib/controls/ArcballControls.js","./controls/FlyControls.js":"/node_modules/three-stdlib/controls/FlyControls.js","./postprocessing/LUTPass.js":"/node_modules/three-stdlib/postprocessing/LUTPass.js","./postprocessing/ClearPass.js":"/node_modules/three-stdlib/postprocessing/ClearPass.js","./postprocessing/GlitchPass.js":"/node_modules/three-stdlib/postprocessing/GlitchPass.js","./postprocessing/HalftonePass.js":"/node_modules/three-stdlib/postprocessing/HalftonePass.js","./postprocessing/SMAAPass.js":"/node_modules/three-stdlib/postprocessing/SMAAPass.js","./postprocessing/FilmPass.js":"/node_modules/three-stdlib/postprocessing/FilmPass.js","./postprocessing/OutlinePass.js":"/node_modules/three-stdlib/postprocessing/OutlinePass.js","./postprocessing/SSAOPass.js":"/node_modules/three-stdlib/postprocessing/SSAOPass.js","./postprocessing/SavePass.js":"/node_modules/three-stdlib/postprocessing/SavePass.js","./postprocessing/BokehPass.js":"/node_modules/three-stdlib/postprocessing/BokehPass.js","./postprocessing/Pass.js":"/node_modules/three-stdlib/postprocessing/Pass.js","./postprocessing/TexturePass.js":"/node_modules/three-stdlib/postprocessing/TexturePass.js","./postprocessing/AdaptiveToneMappingPass.js":"/node_modules/three-stdlib/postprocessing/AdaptiveToneMappingPass.js","./postprocessing/UnrealBloomPass.js":"/node_modules/three-stdlib/postprocessing/UnrealBloomPass.js","./postprocessing/CubeTexturePass.js":"/node_modules/three-stdlib/postprocessing/CubeTexturePass.js","./postprocessing/SAOPass.js":"/node_modules/three-stdlib/postprocessing/SAOPass.js","./postprocessing/AfterimagePass.js":"/node_modules/three-stdlib/postprocessing/AfterimagePass.js","./postprocessing/MaskPass.js":"/node_modules/three-stdlib/postprocessing/MaskPass.js","./postprocessing/EffectComposer.js":"/node_modules/three-stdlib/postprocessing/EffectComposer.js","./postprocessing/DotScreenPass.js":"/node_modules/three-stdlib/postprocessing/DotScreenPass.js","./postprocessing/SSRPass.js":"/node_modules/three-stdlib/postprocessing/SSRPass.js","./postprocessing/TAARenderPass.js":"/node_modules/three-stdlib/postprocessing/TAARenderPass.js","./postprocessing/ShaderPass.js":"/node_modules/three-stdlib/postprocessing/ShaderPass.js","./postprocessing/SSAARenderPass.js":"/node_modules/three-stdlib/postprocessing/SSAARenderPass.js","./postprocessing/RenderPass.js":"/node_modules/three-stdlib/postprocessing/RenderPass.js","./postprocessing/RenderPixelatedPass.js":"/node_modules/three-stdlib/postprocessing/RenderPixelatedPass.js","./postprocessing/BloomPass.js":"/node_modules/three-stdlib/postprocessing/BloomPass.js","./postprocessing/WaterPass.js":"/node_modules/three-stdlib/postprocessing/WaterPass.js","./webxr/ARButton.js":"/node_modules/three-stdlib/webxr/ARButton.js","./webxr/OculusHandModel.js":"/node_modules/three-stdlib/webxr/OculusHandModel.js","./webxr/OculusHandPointerModel.js":"/node_modules/three-stdlib/webxr/OculusHandPointerModel.js","./webxr/Text2D.js":"/node_modules/three-stdlib/webxr/Text2D.js","./webxr/VRButton.js":"/node_modules/three-stdlib/webxr/VRButton.js","./webxr/XRControllerModelFactory.js":"/node_modules/three-stdlib/webxr/XRControllerModelFactory.js","./webxr/XREstimatedLight.js":"/node_modules/three-stdlib/webxr/XREstimatedLight.js","./webxr/XRHandMeshModel.js":"/node_modules/three-stdlib/webxr/XRHandMeshModel.js","./webxr/XRHandModelFactory.js":"/node_modules/three-stdlib/webxr/XRHandModelFactory.js","./webxr/XRHandPrimitiveModel.js":"/node_modules/three-stdlib/webxr/XRHandPrimitiveModel.js","./geometries/ParametricGeometries.js":"/node_modules/three-stdlib/geometries/ParametricGeometries.js","./geometries/ParametricGeometry.js":"/node_modules/three-stdlib/geometries/ParametricGeometry.js","./geometries/ConvexGeometry.js":"/node_modules/three-stdlib/geometries/ConvexGeometry.js","./geometries/LightningStrike.js":"/node_modules/three-stdlib/geometries/LightningStrike.js","./geometries/RoundedBoxGeometry.js":"/node_modules/three-stdlib/geometries/RoundedBoxGeometry.js","./geometries/BoxLineGeometry.js":"/node_modules/three-stdlib/geometries/BoxLineGeometry.js","./geometries/DecalGeometry.js":"/node_modules/three-stdlib/geometries/DecalGeometry.js","./geometries/TeapotGeometry.js":"/node_modules/three-stdlib/geometries/TeapotGeometry.js","./geometries/TextGeometry.js":"/node_modules/three-stdlib/geometries/TextGeometry.js","./csm/CSM.js":"/node_modules/three-stdlib/csm/CSM.js","./csm/CSMFrustum.js":"/node_modules/three-stdlib/csm/CSMFrustum.js","./csm/CSMHelper.js":"/node_modules/three-stdlib/csm/CSMHelper.js","./csm/CSMShader.js":"/node_modules/three-stdlib/csm/CSMShader.js","./shaders/types.js":"/node_modules/three-stdlib/shaders/types.js","./shaders/ACESFilmicToneMappingShader.js":"/node_modules/three-stdlib/shaders/ACESFilmicToneMappingShader.js","./shaders/AfterimageShader.js":"/node_modules/three-stdlib/shaders/AfterimageShader.js","./shaders/BasicShader.js":"/node_modules/three-stdlib/shaders/BasicShader.js","./shaders/BleachBypassShader.js":"/node_modules/three-stdlib/shaders/BleachBypassShader.js","./shaders/BlendShader.js":"/node_modules/three-stdlib/shaders/BlendShader.js","./shaders/BokehShader.js":"/node_modules/three-stdlib/shaders/BokehShader.js","./shaders/BokehShader2.js":"/node_modules/three-stdlib/shaders/BokehShader2.js","./shaders/BrightnessContrastShader.js":"/node_modules/three-stdlib/shaders/BrightnessContrastShader.js","./shaders/ColorCorrectionShader.js":"/node_modules/three-stdlib/shaders/ColorCorrectionShader.js","./shaders/ColorifyShader.js":"/node_modules/three-stdlib/shaders/ColorifyShader.js","./shaders/ConvolutionShader.js":"/node_modules/three-stdlib/shaders/ConvolutionShader.js","./shaders/CopyShader.js":"/node_modules/three-stdlib/shaders/CopyShader.js","./shaders/DOFMipMapShader.js":"/node_modules/three-stdlib/shaders/DOFMipMapShader.js","./shaders/DepthLimitedBlurShader.js":"/node_modules/three-stdlib/shaders/DepthLimitedBlurShader.js","./shaders/DigitalGlitch.js":"/node_modules/three-stdlib/shaders/DigitalGlitch.js","./shaders/DotScreenShader.js":"/node_modules/three-stdlib/shaders/DotScreenShader.js","./shaders/FXAAShader.js":"/node_modules/three-stdlib/shaders/FXAAShader.js","./shaders/FilmShader.js":"/node_modules/three-stdlib/shaders/FilmShader.js","./shaders/FocusShader.js":"/node_modules/three-stdlib/shaders/FocusShader.js","./shaders/FreiChenShader.js":"/node_modules/three-stdlib/shaders/FreiChenShader.js","./shaders/FresnelShader.js":"/node_modules/three-stdlib/shaders/FresnelShader.js","./shaders/GammaCorrectionShader.js":"/node_modules/three-stdlib/shaders/GammaCorrectionShader.js","./shaders/GodRaysShader.js":"/node_modules/three-stdlib/shaders/GodRaysShader.js","./shaders/HalftoneShader.js":"/node_modules/three-stdlib/shaders/HalftoneShader.js","./shaders/HorizontalBlurShader.js":"/node_modules/three-stdlib/shaders/HorizontalBlurShader.js","./shaders/HorizontalTiltShiftShader.js":"/node_modules/three-stdlib/shaders/HorizontalTiltShiftShader.js","./shaders/HueSaturationShader.js":"/node_modules/three-stdlib/shaders/HueSaturationShader.js","./shaders/KaleidoShader.js":"/node_modules/three-stdlib/shaders/KaleidoShader.js","./shaders/LuminosityHighPassShader.js":"/node_modules/three-stdlib/shaders/LuminosityHighPassShader.js","./shaders/LuminosityShader.js":"/node_modules/three-stdlib/shaders/LuminosityShader.js","./shaders/MirrorShader.js":"/node_modules/three-stdlib/shaders/MirrorShader.js","./shaders/NormalMapShader.js":"/node_modules/three-stdlib/shaders/NormalMapShader.js","./shaders/ParallaxShader.js":"/node_modules/three-stdlib/shaders/ParallaxShader.js","./shaders/PixelShader.js":"/node_modules/three-stdlib/shaders/PixelShader.js","./shaders/RGBShiftShader.js":"/node_modules/three-stdlib/shaders/RGBShiftShader.js","./shaders/SAOShader.js":"/node_modules/three-stdlib/shaders/SAOShader.js","./shaders/SMAAShader.js":"/node_modules/three-stdlib/shaders/SMAAShader.js","./shaders/SSAOShader.js":"/node_modules/three-stdlib/shaders/SSAOShader.js","./shaders/SSRShader.js":"/node_modules/three-stdlib/shaders/SSRShader.js","./shaders/SepiaShader.js":"/node_modules/three-stdlib/shaders/SepiaShader.js","./shaders/SobelOperatorShader.js":"/node_modules/three-stdlib/shaders/SobelOperatorShader.js","./shaders/SubsurfaceScatteringShader.js":"/node_modules/three-stdlib/shaders/SubsurfaceScatteringShader.js","./shaders/TechnicolorShader.js":"/node_modules/three-stdlib/shaders/TechnicolorShader.js","./shaders/ToneMapShader.js":"/node_modules/three-stdlib/shaders/ToneMapShader.js","./shaders/ToonShader.js":"/node_modules/three-stdlib/shaders/ToonShader.js","./shaders/TriangleBlurShader.js":"/node_modules/three-stdlib/shaders/TriangleBlurShader.js","./shaders/UnpackDepthRGBAShader.js":"/node_modules/three-stdlib/shaders/UnpackDepthRGBAShader.js","./shaders/VerticalBlurShader.js":"/node_modules/three-stdlib/shaders/VerticalBlurShader.js","./shaders/VerticalTiltShiftShader.js":"/node_modules/three-stdlib/shaders/VerticalTiltShiftShader.js","./shaders/VignetteShader.js":"/node_modules/three-stdlib/shaders/VignetteShader.js","./shaders/VolumeShader.js":"/node_modules/three-stdlib/shaders/VolumeShader.js","./shaders/WaterRefractionShader.js":"/node_modules/three-stdlib/shaders/WaterRefractionShader.js","./interactive/HTMLMesh.js":"/node_modules/three-stdlib/interactive/HTMLMesh.js","./interactive/InteractiveGroup.js":"/node_modules/three-stdlib/interactive/InteractiveGroup.js","./interactive/SelectionHelper.js":"/node_modules/three-stdlib/interactive/SelectionHelper.js","./interactive/SelectionBox.js":"/node_modules/three-stdlib/interactive/SelectionBox.js","./physics/AmmoPhysics.js":"/node_modules/three-stdlib/physics/AmmoPhysics.js","./effects/ParallaxBarrierEffect.js":"/node_modules/three-stdlib/effects/ParallaxBarrierEffect.js","./effects/PeppersGhostEffect.js":"/node_modules/three-stdlib/effects/PeppersGhostEffect.js","./effects/OutlineEffect.js":"/node_modules/three-stdlib/effects/OutlineEffect.js","./effects/AnaglyphEffect.js":"/node_modules/three-stdlib/effects/AnaglyphEffect.js","./effects/AsciiEffect.js":"/node_modules/three-stdlib/effects/AsciiEffect.js","./effects/StereoEffect.js":"/node_modules/three-stdlib/effects/StereoEffect.js","./lines/LineSegmentsGeometry.js":"/node_modules/three-stdlib/lines/LineSegmentsGeometry.js","./lines/LineGeometry.js":"/node_modules/three-stdlib/lines/LineGeometry.js","./lines/Wireframe.js":"/node_modules/three-stdlib/lines/Wireframe.js","./lines/WireframeGeometry2.js":"/node_modules/three-stdlib/lines/WireframeGeometry2.js","./lines/Line2.js":"/node_modules/three-stdlib/lines/Line2.js","./lines/LineMaterial.js":"/node_modules/three-stdlib/lines/LineMaterial.js","./lines/LineSegments2.js":"/node_modules/three-stdlib/lines/LineSegments2.js","./helpers/LightProbeHelper.js":"/node_modules/three-stdlib/helpers/LightProbeHelper.js","./helpers/VertexTangentsHelper.js":"/node_modules/three-stdlib/helpers/VertexTangentsHelper.js","./helpers/PositionalAudioHelper.js":"/node_modules/three-stdlib/helpers/PositionalAudioHelper.js","./helpers/VertexNormalsHelper.js":"/node_modules/three-stdlib/helpers/VertexNormalsHelper.js","./helpers/RectAreaLightHelper.js":"/node_modules/three-stdlib/helpers/RectAreaLightHelper.js","./lights/RectAreaLightUniformsLib.js":"/node_modules/three-stdlib/lights/RectAreaLightUniformsLib.js","./lights/LightProbeGenerator.js":"/node_modules/three-stdlib/lights/LightProbeGenerator.js","./curves/NURBSUtils.js":"/node_modules/three-stdlib/curves/NURBSUtils.js","./curves/NURBSCurve.js":"/node_modules/three-stdlib/curves/NURBSCurve.js","./curves/NURBSSurface.js":"/node_modules/three-stdlib/curves/NURBSSurface.js","./curves/CurveExtras.js":"/node_modules/three-stdlib/curves/CurveExtras.js","./deprecated/Geometry.js":"/node_modules/three-stdlib/deprecated/Geometry.js","./libs/MeshoptDecoder.js":"/node_modules/three-stdlib/libs/MeshoptDecoder.js","./libs/MotionControllers.js":"/node_modules/three-stdlib/libs/MotionControllers.js","./controls/experimental/CameraControls.js":"/node_modules/three-stdlib/controls/experimental/CameraControls.js"},"/node_modules/zustand":{"react":"/node_modules/react/index.js"},"/node_modules/meshline/dist":{"three":"/node_modules/three/build/three.module.js"},"/node_modules/@react-three/drei/helpers":{"react":"/node_modules/react/index.js"},"/node_modules/scheduler/0.23.0":{"./cjs/scheduler.production.min.js":"/node_modules/scheduler/0.23.0/cjs/scheduler.production.min.js","./cjs/scheduler.development.js":"/node_modules/scheduler/0.23.0/cjs/scheduler.development.js"},"/node_modules/@react-three/drei/materials":{"../core/shaderMaterial.js":"/node_modules/@react-three/drei/core/shaderMaterial.js","./ConvolutionMaterial.js":"/node_modules/@react-three/drei/materials/ConvolutionMaterial.js","three":"/node_modules/three/build/three.module.js","react":"/node_modules/react/index.js","three-mesh-bvh":"/node_modules/three-mesh-bvh/src/index.js"},"/node_modules/react-reconciler":{"./cjs/react-reconciler.production.min.js":"/node_modules/react-reconciler/cjs/react-reconciler.production.min.js","./cjs/react-reconciler.development.js":"/node_modules/react-reconciler/cjs/react-reconciler.development.js","./cjs/react-reconciler-constants.production.min.js":"/node_modules/react-reconciler/cjs/react-reconciler-constants.production.min.js","./cjs/react-reconciler-constants.development.js":"/node_modules/react-reconciler/cjs/react-reconciler-constants.development.js"},"/node_modules/scheduler":{"./cjs/scheduler.production.min.js":"/node_modules/scheduler/cjs/scheduler.production.min.js","./cjs/scheduler.development.js":"/node_modules/scheduler/cjs/scheduler.development.js"},"/node_modules/react-use-measure/dist":{"react":"/node_modules/react/index.js","debounce":"/node_modules/debounce/index.js"},"/node_modules/its-fine/dist":{"react":"/node_modules/react/index.js"},"/node_modules/maath/dist":{"./buffer-d2a4726c.esm.js":"/node_modules/maath/dist/buffer-d2a4726c.esm.js","./index-43782085.esm.js":"/node_modules/maath/dist/index-43782085.esm.js","./easing-3be59c6d.esm.js":"/node_modules/maath/dist/easing-3be59c6d.esm.js","./geometry-982366ff.esm.js":"/node_modules/maath/dist/geometry-982366ff.esm.js","./matrix-baa530bf.esm.js":"/node_modules/maath/dist/matrix-baa530bf.esm.js","./misc-7d870b3c.esm.js":"/node_modules/maath/dist/misc-7d870b3c.esm.js","./three-eb2ad8c0.esm.js":"/node_modules/maath/dist/three-eb2ad8c0.esm.js","./triangle-b62b9067.esm.js":"/node_modules/maath/dist/triangle-b62b9067.esm.js","./vector2-d2bf51f1.esm.js":"/node_modules/maath/dist/vector2-d2bf51f1.esm.js","./vector3-0a088b7f.esm.js":"/node_modules/maath/dist/vector3-0a088b7f.esm.js","./objectSpread2-284232a6.esm.js":"/node_modules/maath/dist/objectSpread2-284232a6.esm.js","./classCallCheck-9098b006.esm.js":"/node_modules/maath/dist/classCallCheck-9098b006.esm.js","./isNativeReflectConstruct-5594d075.esm.js":"/node_modules/maath/dist/isNativeReflectConstruct-5594d075.esm.js","three":"/node_modules/three/build/three.module.js"},"/node_modules/@react-spring/three/dist":{"@react-three/fiber":"/node_modules/@react-three/fiber/dist/react-three-fiber.esm.js","three":"/node_modules/three/build/three.module.js","@react-spring/core":"/node_modules/@react-spring/core/dist/react-spring-core.esm.js","@react-spring/shared":"/node_modules/@react-spring/shared/dist/react-spring-shared.esm.js","@react-spring/animated":"/node_modules/@react-spring/animated/dist/react-spring-animated.esm.js"},"/node_modules/troika-three-text/dist":{"three":"/node_modules/three/build/three.module.js","troika-worker-utils":"/node_modules/troika-worker-utils/dist/troika-worker-utils.esm.js","webgl-sdf-generator":"/node_modules/webgl-sdf-generator/dist/webgl-sdf-generator.mjs","bidi-js":"/node_modules/bidi-js/dist/bidi.mjs","troika-three-utils":"/node_modules/troika-three-utils/dist/troika-three-utils.esm.js"},"/node_modules/three-mesh-bvh/src":{"./core/MeshBVH.js":"/node_modules/three-mesh-bvh/src/core/MeshBVH.js","./objects/MeshBVHVisualizer.js":"/node_modules/three-mesh-bvh/src/objects/MeshBVHVisualizer.js","./core/Constants.js":"/node_modules/three-mesh-bvh/src/core/Constants.js","./debug/Debug.js":"/node_modules/three-mesh-bvh/src/debug/Debug.js","./utils/ExtensionUtilities.js":"/node_modules/three-mesh-bvh/src/utils/ExtensionUtilities.js","./utils/TriangleUtilities.js":"/node_modules/three-mesh-bvh/src/utils/TriangleUtilities.js","./math/ExtendedTriangle.js":"/node_modules/three-mesh-bvh/src/math/ExtendedTriangle.js","./math/OrientedBox.js":"/node_modules/three-mesh-bvh/src/math/OrientedBox.js","./gpu/MeshBVHUniformStruct.js":"/node_modules/three-mesh-bvh/src/gpu/MeshBVHUniformStruct.js","./gpu/shaderFunctions.js":"/node_modules/three-mesh-bvh/src/gpu/shaderFunctions.js","./gpu/VertexAttributeTexture.js":"/node_modules/three-mesh-bvh/src/gpu/VertexAttributeTexture.js","./utils/StaticGeometryGenerator.js":"/node_modules/three-mesh-bvh/src/utils/StaticGeometryGenerator.js"},"/node_modules/react-composer/es":{"react":"/node_modules/react/index.js","prop-types":"/node_modules/prop-types/index.js"},"/node_modules/three-stdlib/utils":{"../shaders/UnpackDepthRGBAShader.js":"/node_modules/three-stdlib/shaders/UnpackDepthRGBAShader.js","three":"/node_modules/three/build/three.module.js","../types/helpers.js":"/node_modules/three-stdlib/types/helpers.js"},"/node_modules/three-stdlib/misc":{"../loaders/MD2Loader.js":"/node_modules/three-stdlib/loaders/MD2Loader.js","./MorphBlendMesh.js":"/node_modules/three-stdlib/misc/MorphBlendMesh.js","../geometries/ConvexGeometry.js":"/node_modules/three-stdlib/geometries/ConvexGeometry.js","./VolumeSlice.js":"/node_modules/three-stdlib/misc/VolumeSlice.js","three":"/node_modules/three/build/three.module.js","potpack":"/node_modules/potpack/index.mjs"},"/node_modules/three-stdlib/renderers":{"./Projector.js":"/node_modules/three-stdlib/renderers/Projector.js","three":"/node_modules/three/build/three.module.js"},"/node_modules/three-stdlib/modifiers":{"../utils/BufferGeometryUtils.js":"/node_modules/three-stdlib/utils/BufferGeometryUtils.js","three":"/node_modules/three/build/three.module.js"},"/node_modules/three-stdlib/exporters":{"three":"/node_modules/three/build/three.module.js","fflate":"/node_modules/fflate/esm/browser.js","mmd-parser":"/node_modules/mmd-parser/build/mmdparser.js"},"/node_modules/three-stdlib/environments":{"three":"/node_modules/three/build/three.module.js"},"/node_modules/three-stdlib/animation":{"./CCDIKSolver.js":"/node_modules/three-stdlib/animation/CCDIKSolver.js","./MMDPhysics.js":"/node_modules/three-stdlib/animation/MMDPhysics.js","../_polyfill/CapsuleGeometry.js":"/node_modules/three-stdlib/_polyfill/CapsuleGeometry.js","three":"/node_modules/three/build/three.module.js"},"/node_modules/three-stdlib/objects":{"../geometries/LightningStrike.js":"/node_modules/three-stdlib/geometries/LightningStrike.js","./Reflector.js":"/node_modules/three-stdlib/objects/Reflector.js","./Refractor.js":"/node_modules/three-stdlib/objects/Refractor.js","three":"/node_modules/three/build/three.module.js"},"/node_modules/three-stdlib/cameras":{"../shaders/BokehShader2.js":"/node_modules/three-stdlib/shaders/BokehShader2.js","three":"/node_modules/three/build/three.module.js"},"/node_modules/three-stdlib/math":{"./Capsule.js":"/node_modules/three-stdlib/math/Capsule.js","three":"/node_modules/three/build/three.module.js"},"/node_modules/three-stdlib/controls":{"three":"/node_modules/three/build/three.module.js"},"/node_modules/three-stdlib/postprocessing":{"./ShaderPass.js":"/node_modules/three-stdlib/postprocessing/ShaderPass.js","./Pass.js":"/node_modules/three-stdlib/postprocessing/Pass.js","../shaders/DigitalGlitch.js":"/node_modules/three-stdlib/shaders/DigitalGlitch.js","../shaders/HalftoneShader.js":"/node_modules/three-stdlib/shaders/HalftoneShader.js","../shaders/SMAAShader.js":"/node_modules/three-stdlib/shaders/SMAAShader.js","../shaders/FilmShader.js":"/node_modules/three-stdlib/shaders/FilmShader.js","../shaders/CopyShader.js":"/node_modules/three-stdlib/shaders/CopyShader.js","../math/SimplexNoise.js":"/node_modules/three-stdlib/math/SimplexNoise.js","../shaders/SSAOShader.js":"/node_modules/three-stdlib/shaders/SSAOShader.js","../shaders/BokehShader.js":"/node_modules/three-stdlib/shaders/BokehShader.js","../shaders/LuminosityShader.js":"/node_modules/three-stdlib/shaders/LuminosityShader.js","../shaders/ToneMapShader.js":"/node_modules/three-stdlib/shaders/ToneMapShader.js","../shaders/LuminosityHighPassShader.js":"/node_modules/three-stdlib/shaders/LuminosityHighPassShader.js","../shaders/SAOShader.js":"/node_modules/three-stdlib/shaders/SAOShader.js","../shaders/DepthLimitedBlurShader.js":"/node_modules/three-stdlib/shaders/DepthLimitedBlurShader.js","../shaders/UnpackDepthRGBAShader.js":"/node_modules/three-stdlib/shaders/UnpackDepthRGBAShader.js","../shaders/AfterimageShader.js":"/node_modules/three-stdlib/shaders/AfterimageShader.js","./MaskPass.js":"/node_modules/three-stdlib/postprocessing/MaskPass.js","../shaders/DotScreenShader.js":"/node_modules/three-stdlib/shaders/DotScreenShader.js","../shaders/SSRShader.js":"/node_modules/three-stdlib/shaders/SSRShader.js","./SSAARenderPass.js":"/node_modules/three-stdlib/postprocessing/SSAARenderPass.js","../shaders/ConvolutionShader.js":"/node_modules/three-stdlib/shaders/ConvolutionShader.js","three":"/node_modules/three/build/three.module.js"},"/node_modules/three-stdlib/webxr":{"./XRHandMeshModel.js":"/node_modules/three-stdlib/webxr/XRHandMeshModel.js","../loaders/GLTFLoader.js":"/node_modules/three-stdlib/loaders/GLTFLoader.js","../libs/MotionControllers.js":"/node_modules/three-stdlib/libs/MotionControllers.js","./XRHandPrimitiveModel.js":"/node_modules/three-stdlib/webxr/XRHandPrimitiveModel.js","three":"/node_modules/three/build/three.module.js"},"/node_modules/three-stdlib/geometries":{"./ParametricGeometry.js":"/node_modules/three-stdlib/geometries/ParametricGeometry.js","../math/ConvexHull.js":"/node_modules/three-stdlib/math/ConvexHull.js","../math/SimplexNoise.js":"/node_modules/three-stdlib/math/SimplexNoise.js","three":"/node_modules/three/build/three.module.js"},"/node_modules/three-stdlib/csm":{"./CSMFrustum.js":"/node_modules/three-stdlib/csm/CSMFrustum.js","./CSMShader.js":"/node_modules/three-stdlib/csm/CSMShader.js","three":"/node_modules/three/build/three.module.js"},"/node_modules/three-stdlib/shaders":{"three":"/node_modules/three/build/three.module.js"},"/node_modules/three-stdlib/interactive":{"three":"/node_modules/three/build/three.module.js"},"/node_modules/three-stdlib/effects":{"three":"/node_modules/three/build/three.module.js"},"/node_modules/three-stdlib/lines":{"./LineSegmentsGeometry.js":"/node_modules/three-stdlib/lines/LineSegmentsGeometry.js","./LineMaterial.js":"/node_modules/three-stdlib/lines/LineMaterial.js","./LineSegments2.js":"/node_modules/three-stdlib/lines/LineSegments2.js","./LineGeometry.js":"/node_modules/three-stdlib/lines/LineGeometry.js","three":"/node_modules/three/build/three.module.js"},"/node_modules/three-stdlib/helpers":{"three":"/node_modules/three/build/three.module.js"},"/node_modules/three-stdlib/lights":{"three":"/node_modules/three/build/three.module.js"},"/node_modules/three-stdlib/curves":{"./NURBSUtils.js":"/node_modules/three-stdlib/curves/NURBSUtils.js","three":"/node_modules/three/build/three.module.js"},"/node_modules/three-stdlib/deprecated":{"three":"/node_modules/three/build/three.module.js"},"/node_modules/three-stdlib/controls/experimental":{"three":"/node_modules/three/build/three.module.js"},"/node_modules/react-reconciler/cjs":{"react":"/node_modules/react/index.js","scheduler":"/node_modules/scheduler/index.js"},"/node_modules/three-mesh-bvh/src/core":{"./Constants.js":"/node_modules/three-mesh-bvh/src/core/Constants.js","../math/OrientedBox.js":"/node_modules/three-mesh-bvh/src/math/OrientedBox.js","../math/ExtendedTriangle.js":"/node_modules/three-mesh-bvh/src/math/ExtendedTriangle.js","../utils/TriangleUtilities.js":"/node_modules/three-mesh-bvh/src/utils/TriangleUtilities.js","./buildFunctions.js":"/node_modules/three-mesh-bvh/src/core/buildFunctions.js","./castFunctions.js":"/node_modules/three-mesh-bvh/src/core/castFunctions.js","../utils/PrimitivePool.js":"/node_modules/three-mesh-bvh/src/utils/PrimitivePool.js","../utils/ArrayBoxUtilities.js":"/node_modules/three-mesh-bvh/src/utils/ArrayBoxUtilities.js","three":"/node_modules/three/build/three.module.js","../utils/GeometryRayIntersectUtilities.js":"/node_modules/three-mesh-bvh/src/utils/GeometryRayIntersectUtilities.js","./nodeBufferFunctions.js":"/node_modules/three-mesh-bvh/src/core/nodeBufferFunctions.js","./MeshBVHNode.js":"/node_modules/three-mesh-bvh/src/core/MeshBVHNode.js"},"/node_modules/three-mesh-bvh/src/objects":{"../utils/ArrayBoxUtilities.js":"/node_modules/three-mesh-bvh/src/utils/ArrayBoxUtilities.js","three":"/node_modules/three/build/three.module.js"},"/node_modules/three-mesh-bvh/src/debug":{"../core/Constants.js":"/node_modules/three-mesh-bvh/src/core/Constants.js","../utils/ArrayBoxUtilities.js":"/node_modules/three-mesh-bvh/src/utils/ArrayBoxUtilities.js","three":"/node_modules/three/build/three.module.js"},"/node_modules/three-mesh-bvh/src/utils":{"../core/MeshBVH.js":"/node_modules/three-mesh-bvh/src/core/MeshBVH.js","./GeometryRayIntersectUtilities.js":"/node_modules/three-mesh-bvh/src/utils/GeometryRayIntersectUtilities.js","three":"/node_modules/three/build/three.module.js","./ThreeRayIntersectUtilities.js":"/node_modules/three-mesh-bvh/src/utils/ThreeRayIntersectUtilities.js"},"/node_modules/three-mesh-bvh/src/math":{"./ExtendedTriangle.js":"/node_modules/three-mesh-bvh/src/math/ExtendedTriangle.js","./SeparatingAxisBounds.js":"/node_modules/three-mesh-bvh/src/math/SeparatingAxisBounds.js","./MathUtilities.js":"/node_modules/three-mesh-bvh/src/math/MathUtilities.js","three":"/node_modules/three/build/three.module.js"},"/node_modules/three-mesh-bvh/src/gpu":{"./VertexAttributeTexture.js":"/node_modules/three-mesh-bvh/src/gpu/VertexAttributeTexture.js","../core/Constants.js":"/node_modules/three-mesh-bvh/src/core/Constants.js","../core/nodeBufferFunctions.js":"/node_modules/three-mesh-bvh/src/core/nodeBufferFunctions.js","three":"/node_modules/three/build/three.module.js"},"/node_modules/three-stdlib/loaders/lwo":{"./LWO2Parser.js":"/node_modules/three-stdlib/loaders/lwo/LWO2Parser.js","./LWO3Parser.js":"/node_modules/three-stdlib/loaders/lwo/LWO3Parser.js"},"/node_modules/prop-types":{"react-is":"/node_modules/react-is/index.js","./factoryWithTypeCheckers":"/node_modules/prop-types/factoryWithTypeCheckers.js","./factoryWithThrowingShims":"/node_modules/prop-types/factoryWithThrowingShims.js","./checkPropTypes":"/node_modules/prop-types/checkPropTypes.js","./lib/ReactPropTypesSecret":"/node_modules/prop-types/lib/ReactPropTypesSecret.js","./lib/has":"/node_modules/prop-types/lib/has.js","object-assign":"/node_modules/object-assign/index.js"},"/node_modules/troika-three-utils/dist":{"three":"/node_modules/three/build/three.module.js"},"/node_modules/@react-spring/core/dist":{"@react-spring/shared":"/node_modules/@react-spring/shared/dist/react-spring-shared.esm.js","@react-spring/animated":"/node_modules/@react-spring/animated/dist/react-spring-animated.esm.js","react":"/node_modules/react/index.js","@react-spring/types/animated":"/node_modules/@react-spring/types/animated.js","@react-spring/types/interpolation":"/node_modules/@react-spring/types/interpolation.js"},"/node_modules/@react-spring/shared/dist":{"react":"/node_modules/react/index.js","@react-spring/rafz":"/node_modules/@react-spring/rafz/dist/react-spring-rafz.esm.js"},"/node_modules/@react-spring/animated/dist":{"@react-spring/shared":"/node_modules/@react-spring/shared/dist/react-spring-shared.esm.js","react":"/node_modules/react/index.js"},"/node_modules/chevrotain/lib/src":{"./version":"/node_modules/chevrotain/lib/src/version.js","./scan/lexer_public":"/node_modules/chevrotain/lib/src/scan/lexer_public.js","./scan/tokens_public":"/node_modules/chevrotain/lib/src/scan/tokens_public.js","./parse/errors_public":"/node_modules/chevrotain/lib/src/parse/errors_public.js","./parse/exceptions_public":"/node_modules/chevrotain/lib/src/parse/exceptions_public.js","./scan/lexer_errors_public":"/node_modules/chevrotain/lib/src/scan/lexer_errors_public.js","./diagrams/render_public":"/node_modules/chevrotain/lib/src/diagrams/render_public.js","./parse/parser/parser":"/node_modules/chevrotain/lib/src/parse/parser/parser.js","./parse/grammar/lookahead":"/node_modules/chevrotain/lib/src/parse/grammar/lookahead.js","./parse/grammar/llk_lookahead":"/node_modules/chevrotain/lib/src/parse/grammar/llk_lookahead.js","@chevrotain/gast":"/node_modules/@chevrotain/gast/lib/src/api.js","@chevrotain/cst-dts-gen":"/node_modules/@chevrotain/cst-dts-gen/lib/src/api.js"},"/node_modules/react-is":{"./cjs/react-is.production.min.js":"/node_modules/react-is/cjs/react-is.production.min.js","./cjs/react-is.development.js":"/node_modules/react-is/cjs/react-is.development.js"},"/node_modules/chevrotain/lib/src/scan":{"./lexer_errors_public":"/node_modules/chevrotain/lib/src/scan/lexer_errors_public.js","./lexer_public":"/node_modules/chevrotain/lib/src/scan/lexer_public.js","./lexer":"/node_modules/chevrotain/lib/src/scan/lexer.js","./tokens":"/node_modules/chevrotain/lib/src/scan/tokens.js","./reg_exp_parser":"/node_modules/chevrotain/lib/src/scan/reg_exp_parser.js","@chevrotain/utils":"/node_modules/@chevrotain/utils/lib/src/api.js","lodash/noop":"/node_modules/lodash/noop.js","lodash/isEmpty":"/node_modules/lodash/isEmpty.js","lodash/isArray":"/node_modules/lodash/isArray.js","lodash/last":"/node_modules/lodash/last.js","lodash/reject":"/node_modules/lodash/reject.js","lodash/map":"/node_modules/lodash/map.js","lodash/forEach":"/node_modules/lodash/forEach.js","lodash/keys":"/node_modules/lodash/keys.js","lodash/isUndefined":"/node_modules/lodash/isUndefined.js","lodash/identity":"/node_modules/lodash/identity.js","lodash/assign":"/node_modules/lodash/assign.js","lodash/reduce":"/node_modules/lodash/reduce.js","lodash/clone":"/node_modules/lodash/clone.js","lodash/isString":"/node_modules/lodash/isString.js","lodash/has":"/node_modules/lodash/has.js","./reg_exp":"/node_modules/chevrotain/lib/src/scan/reg_exp.js","lodash/first":"/node_modules/lodash/first.js","lodash/values":"/node_modules/lodash/values.js","lodash/flatten":"/node_modules/lodash/flatten.js","lodash/includes":"/node_modules/lodash/includes.js","regexp-to-ast":"/node_modules/regexp-to-ast/lib/regexp-to-ast.js","lodash/isRegExp":"/node_modules/lodash/isRegExp.js","lodash/compact":"/node_modules/lodash/compact.js","lodash/difference":"/node_modules/lodash/difference.js","lodash/indexOf":"/node_modules/lodash/indexOf.js","lodash/isFunction":"/node_modules/lodash/isFunction.js","lodash/find":"/node_modules/lodash/find.js","lodash/filter":"/node_modules/lodash/filter.js","lodash/defaults":"/node_modules/lodash/defaults.js","lodash/every":"/node_modules/lodash/every.js"},"/node_modules/chevrotain/lib/src/parse":{"@chevrotain/gast":"/node_modules/@chevrotain/gast/lib/src/api.js","../scan/tokens_public":"/node_modules/chevrotain/lib/src/scan/tokens_public.js","lodash/first":"/node_modules/lodash/first.js","lodash/map":"/node_modules/lodash/map.js","lodash/reduce":"/node_modules/lodash/reduce.js","lodash/includes":"/node_modules/lodash/includes.js"},"/node_modules/chevrotain/lib/src/diagrams":{"../version":"/node_modules/chevrotain/lib/src/version.js"},"/node_modules/chevrotain/lib/src/parse/parser":{"../../scan/tokens_public":"/node_modules/chevrotain/lib/src/scan/tokens_public.js","../errors_public":"/node_modules/chevrotain/lib/src/parse/errors_public.js","../grammar/follow":"/node_modules/chevrotain/lib/src/parse/grammar/follow.js","../grammar/checks":"/node_modules/chevrotain/lib/src/parse/grammar/checks.js","../grammar/gast/gast_resolver_public":"/node_modules/chevrotain/lib/src/parse/grammar/gast/gast_resolver_public.js","./traits/recoverable":"/node_modules/chevrotain/lib/src/parse/parser/traits/recoverable.js","./traits/looksahead":"/node_modules/chevrotain/lib/src/parse/parser/traits/looksahead.js","./traits/tree_builder":"/node_modules/chevrotain/lib/src/parse/parser/traits/tree_builder.js","./traits/lexer_adapter":"/node_modules/chevrotain/lib/src/parse/parser/traits/lexer_adapter.js","./traits/recognizer_api":"/node_modules/chevrotain/lib/src/parse/parser/traits/recognizer_api.js","./traits/recognizer_engine":"/node_modules/chevrotain/lib/src/parse/parser/traits/recognizer_engine.js","./traits/error_handler":"/node_modules/chevrotain/lib/src/parse/parser/traits/error_handler.js","./traits/context_assist":"/node_modules/chevrotain/lib/src/parse/parser/traits/context_assist.js","./traits/gast_recorder":"/node_modules/chevrotain/lib/src/parse/parser/traits/gast_recorder.js","./traits/perf_tracer":"/node_modules/chevrotain/lib/src/parse/parser/traits/perf_tracer.js","./utils/apply_mixins":"/node_modules/chevrotain/lib/src/parse/parser/utils/apply_mixins.js","@chevrotain/utils":"/node_modules/@chevrotain/utils/lib/src/api.js","lodash/isEmpty":"/node_modules/lodash/isEmpty.js","lodash/map":"/node_modules/lodash/map.js","lodash/forEach":"/node_modules/lodash/forEach.js","lodash/values":"/node_modules/lodash/values.js","lodash/has":"/node_modules/lodash/has.js","lodash/clone":"/node_modules/lodash/clone.js"},"/node_modules/chevrotain/lib/src/parse/grammar":{"@chevrotain/gast":"/node_modules/@chevrotain/gast/lib/src/api.js","../errors_public":"/node_modules/chevrotain/lib/src/parse/errors_public.js","../parser/parser":"/node_modules/chevrotain/lib/src/parse/parser/parser.js","./lookahead":"/node_modules/chevrotain/lib/src/parse/grammar/lookahead.js","./interpreter":"/node_modules/chevrotain/lib/src/parse/grammar/interpreter.js","./rest":"/node_modules/chevrotain/lib/src/parse/grammar/rest.js","../../scan/tokens":"/node_modules/chevrotain/lib/src/scan/tokens.js","./checks":"/node_modules/chevrotain/lib/src/parse/grammar/checks.js","lodash/isEmpty":"/node_modules/lodash/isEmpty.js","lodash/flatten":"/node_modules/lodash/flatten.js","lodash/every":"/node_modules/lodash/every.js","lodash/map":"/node_modules/lodash/map.js","lodash/forEach":"/node_modules/lodash/forEach.js","lodash/has":"/node_modules/lodash/has.js","lodash/reduce":"/node_modules/lodash/reduce.js","lodash/flatMap":"/node_modules/lodash/flatMap.js","./first":"/node_modules/chevrotain/lib/src/parse/grammar/first.js","../constants":"/node_modules/chevrotain/lib/src/parse/constants.js","lodash/first":"/node_modules/lodash/first.js","lodash/values":"/node_modules/lodash/values.js","lodash/includes":"/node_modules/lodash/includes.js","lodash/clone":"/node_modules/lodash/clone.js","lodash/assign":"/node_modules/lodash/assign.js","lodash/reject":"/node_modules/lodash/reject.js","lodash/last":"/node_modules/lodash/last.js","lodash/groupBy":"/node_modules/lodash/groupBy.js","lodash/pickBy":"/node_modules/lodash/pickBy.js","lodash/filter":"/node_modules/lodash/filter.js","lodash/difference":"/node_modules/lodash/difference.js","lodash/compact":"/node_modules/lodash/compact.js","lodash/drop":"/node_modules/lodash/drop.js","lodash/dropRight":"/node_modules/lodash/dropRight.js","lodash/uniq":"/node_modules/lodash/uniq.js"},"/node_modules/@chevrotain/gast/lib/src":{"./model":"/node_modules/@chevrotain/gast/lib/src/model.js","./visitor":"/node_modules/@chevrotain/gast/lib/src/visitor.js","./helpers":"/node_modules/@chevrotain/gast/lib/src/helpers.js","lodash/map":"/node_modules/lodash/map.js","lodash/forEach":"/node_modules/lodash/forEach.js","lodash/isString":"/node_modules/lodash/isString.js","lodash/assign":"/node_modules/lodash/assign.js","lodash/every":"/node_modules/lodash/every.js","lodash/includes":"/node_modules/lodash/includes.js","lodash/isRegExp":"/node_modules/lodash/isRegExp.js","lodash/pickBy":"/node_modules/lodash/pickBy.js","lodash/some":"/node_modules/lodash/some.js"},"/node_modules/@chevrotain/cst-dts-gen/lib/src":{"./model":"/node_modules/@chevrotain/cst-dts-gen/lib/src/model.js","./generate":"/node_modules/@chevrotain/cst-dts-gen/lib/src/generate.js","@chevrotain/gast":"/node_modules/@chevrotain/gast/lib/src/api.js","lodash/map":"/node_modules/lodash/map.js","lodash/flatten":"/node_modules/lodash/flatten.js","lodash/values":"/node_modules/lodash/values.js","lodash/assign":"/node_modules/lodash/assign.js","lodash/isArray":"/node_modules/lodash/isArray.js","lodash/reduce":"/node_modules/lodash/reduce.js","lodash/some":"/node_modules/lodash/some.js","lodash/groupBy":"/node_modules/lodash/groupBy.js","lodash/uniq":"/node_modules/lodash/uniq.js","lodash/upperFirst":"/node_modules/lodash/upperFirst.js"},"/node_modules/@chevrotain/utils/lib/src":{"./print":"/node_modules/@chevrotain/utils/lib/src/print.js","./timer":"/node_modules/@chevrotain/utils/lib/src/timer.js","./to-fast-properties":"/node_modules/@chevrotain/utils/lib/src/to-fast-properties.js"},"/node_modules/lodash":{"./isArray":"/node_modules/lodash/isArray.js","./keys":"/node_modules/lodash/keys.js","./isString":"/node_modules/lodash/isString.js","./values":"/node_modules/lodash/values.js","./map":"/node_modules/lodash/map.js","./_baseKeys":"/node_modules/lodash/_baseKeys.js","./_getTag":"/node_modules/lodash/_getTag.js","./isArguments":"/node_modules/lodash/isArguments.js","./isArrayLike":"/node_modules/lodash/isArrayLike.js","./isBuffer":"/node_modules/lodash/isBuffer.js","./_isPrototype":"/node_modules/lodash/_isPrototype.js","./isTypedArray":"/node_modules/lodash/isTypedArray.js","./_arrayFilter":"/node_modules/lodash/_arrayFilter.js","./_baseFilter":"/node_modules/lodash/_baseFilter.js","./_baseIteratee":"/node_modules/lodash/_baseIteratee.js","./negate":"/node_modules/lodash/negate.js","./_arrayMap":"/node_modules/lodash/_arrayMap.js","./_baseMap":"/node_modules/lodash/_baseMap.js","./_arrayEach":"/node_modules/lodash/_arrayEach.js","./_baseEach":"/node_modules/lodash/_baseEach.js","./_castFunction":"/node_modules/lodash/_castFunction.js","./_arrayLikeKeys":"/node_modules/lodash/_arrayLikeKeys.js","./_assignValue":"/node_modules/lodash/_assignValue.js","./_copyObject":"/node_modules/lodash/_copyObject.js","./_createAssigner":"/node_modules/lodash/_createAssigner.js","./_arrayReduce":"/node_modules/lodash/_arrayReduce.js","./_baseReduce":"/node_modules/lodash/_baseReduce.js","./_baseClone":"/node_modules/lodash/_baseClone.js","./_baseGetTag":"/node_modules/lodash/_baseGetTag.js","./isObjectLike":"/node_modules/lodash/isObjectLike.js","./_baseHas":"/node_modules/lodash/_baseHas.js","./_hasPath":"/node_modules/lodash/_hasPath.js","./head":"/node_modules/lodash/head.js","./_baseIndexOf":"/node_modules/lodash/_baseIndexOf.js","./toInteger":"/node_modules/lodash/toInteger.js","./_baseValues":"/node_modules/lodash/_baseValues.js","./_baseFlatten":"/node_modules/lodash/_baseFlatten.js","./_arrayEvery":"/node_modules/lodash/_arrayEvery.js","./_baseEvery":"/node_modules/lodash/_baseEvery.js","./_isIterateeCall":"/node_modules/lodash/_isIterateeCall.js","./_baseIsRegExp":"/node_modules/lodash/_baseIsRegExp.js","./_baseUnary":"/node_modules/lodash/_baseUnary.js","./_nodeUtil":"/node_modules/lodash/_nodeUtil.js","./_basePickBy":"/node_modules/lodash/_basePickBy.js","./_getAllKeysIn":"/node_modules/lodash/_getAllKeysIn.js","./_arraySome":"/node_modules/lodash/_arraySome.js","./_baseSome":"/node_modules/lodash/_baseSome.js","./_baseAssignValue":"/node_modules/lodash/_baseAssignValue.js","./_createAggregator":"/node_modules/lodash/_createAggregator.js","./_baseUniq":"/node_modules/lodash/_baseUniq.js","./_createCaseFirst":"/node_modules/lodash/_createCaseFirst.js","./isFunction":"/node_modules/lodash/isFunction.js","./identity":"/node_modules/lodash/identity.js","./isObject":"/node_modules/lodash/isObject.js","./_nativeKeys":"/node_modules/lodash/_nativeKeys.js","./_DataView":"/node_modules/lodash/_DataView.js","./_Map":"/node_modules/lodash/_Map.js","./_Promise":"/node_modules/lodash/_Promise.js","./_Set":"/node_modules/lodash/_Set.js","./_WeakMap":"/node_modules/lodash/_WeakMap.js","./_toSource":"/node_modules/lodash/_toSource.js","./_baseIsArguments":"/node_modules/lodash/_baseIsArguments.js","./isLength":"/node_modules/lodash/isLength.js","./_root":"/node_modules/lodash/_root.js","./stubFalse":"/node_modules/lodash/stubFalse.js","./_baseIsTypedArray":"/node_modules/lodash/_baseIsTypedArray.js","./_baseMatches":"/node_modules/lodash/_baseMatches.js","./_baseMatchesProperty":"/node_modules/lodash/_baseMatchesProperty.js","./property":"/node_modules/lodash/property.js","./_baseForOwn":"/node_modules/lodash/_baseForOwn.js","./_createBaseEach":"/node_modules/lodash/_createBaseEach.js","./_baseTimes":"/node_modules/lodash/_baseTimes.js","./_isIndex":"/node_modules/lodash/_isIndex.js","./eq":"/node_modules/lodash/eq.js","./_baseRest":"/node_modules/lodash/_baseRest.js","./_Stack":"/node_modules/lodash/_Stack.js","./_baseAssign":"/node_modules/lodash/_baseAssign.js","./_baseAssignIn":"/node_modules/lodash/_baseAssignIn.js","./_cloneBuffer":"/node_modules/lodash/_cloneBuffer.js","./_copyArray":"/node_modules/lodash/_copyArray.js","./_copySymbols":"/node_modules/lodash/_copySymbols.js","./_copySymbolsIn":"/node_modules/lodash/_copySymbolsIn.js","./_getAllKeys":"/node_modules/lodash/_getAllKeys.js","./_initCloneArray":"/node_modules/lodash/_initCloneArray.js","./_initCloneByTag":"/node_modules/lodash/_initCloneByTag.js","./_initCloneObject":"/node_modules/lodash/_initCloneObject.js","./isMap":"/node_modules/lodash/isMap.js","./isSet":"/node_modules/lodash/isSet.js","./keysIn":"/node_modules/lodash/keysIn.js","./_Symbol":"/node_modules/lodash/_Symbol.js","./_getRawTag":"/node_modules/lodash/_getRawTag.js","./_objectToString":"/node_modules/lodash/_objectToString.js","./_castPath":"/node_modules/lodash/_castPath.js","./_toKey":"/node_modules/lodash/_toKey.js","./_baseFindIndex":"/node_modules/lodash/_baseFindIndex.js","./_baseIsNaN":"/node_modules/lodash/_baseIsNaN.js","./_strictIndexOf":"/node_modules/lodash/_strictIndexOf.js","./toFinite":"/node_modules/lodash/toFinite.js","./_arrayPush":"/node_modules/lodash/_arrayPush.js","./_isFlattenable":"/node_modules/lodash/_isFlattenable.js","./_baseDifference":"/node_modules/lodash/_baseDifference.js","./isArrayLikeObject":"/node_modules/lodash/isArrayLikeObject.js","./_createFind":"/node_modules/lodash/_createFind.js","./findIndex":"/node_modules/lodash/findIndex.js","./_baseSlice":"/node_modules/lodash/_baseSlice.js","./_freeGlobal":"/node_modules/lodash/_freeGlobal.js","./_baseGet":"/node_modules/lodash/_baseGet.js","./_baseSet":"/node_modules/lodash/_baseSet.js","./_baseGetAllKeys":"/node_modules/lodash/_baseGetAllKeys.js","./_getSymbolsIn":"/node_modules/lodash/_getSymbolsIn.js","./_defineProperty":"/node_modules/lodash/_defineProperty.js","./_arrayAggregator":"/node_modules/lodash/_arrayAggregator.js","./_baseAggregator":"/node_modules/lodash/_baseAggregator.js","./_SetCache":"/node_modules/lodash/_SetCache.js","./_arrayIncludes":"/node_modules/lodash/_arrayIncludes.js","./_arrayIncludesWith":"/node_modules/lodash/_arrayIncludesWith.js","./_cacheHas":"/node_modules/lodash/_cacheHas.js","./_createSet":"/node_modules/lodash/_createSet.js","./_setToArray":"/node_modules/lodash/_setToArray.js","./_castSlice":"/node_modules/lodash/_castSlice.js","./_hasUnicode":"/node_modules/lodash/_hasUnicode.js","./_stringToArray":"/node_modules/lodash/_stringToArray.js","./toString":"/node_modules/lodash/toString.js","./_overArg":"/node_modules/lodash/_overArg.js","./_getNative":"/node_modules/lodash/_getNative.js","./_baseIsMatch":"/node_modules/lodash/_baseIsMatch.js","./_getMatchData":"/node_modules/lodash/_getMatchData.js","./_matchesStrictComparable":"/node_modules/lodash/_matchesStrictComparable.js","./_baseIsEqual":"/node_modules/lodash/_baseIsEqual.js","./get":"/node_modules/lodash/get.js","./hasIn":"/node_modules/lodash/hasIn.js","./_isKey":"/node_modules/lodash/_isKey.js","./_isStrictComparable":"/node_modules/lodash/_isStrictComparable.js","./_baseProperty":"/node_modules/lodash/_baseProperty.js","./_basePropertyDeep":"/node_modules/lodash/_basePropertyDeep.js","./_baseFor":"/node_modules/lodash/_baseFor.js","./_overRest":"/node_modules/lodash/_overRest.js","./_setToString":"/node_modules/lodash/_setToString.js","./_ListCache":"/node_modules/lodash/_ListCache.js","./_stackClear":"/node_modules/lodash/_stackClear.js","./_stackDelete":"/node_modules/lodash/_stackDelete.js","./_stackGet":"/node_modules/lodash/_stackGet.js","./_stackHas":"/node_modules/lodash/_stackHas.js","./_stackSet":"/node_modules/lodash/_stackSet.js","./_getSymbols":"/node_modules/lodash/_getSymbols.js","./_cloneArrayBuffer":"/node_modules/lodash/_cloneArrayBuffer.js","./_cloneDataView":"/node_modules/lodash/_cloneDataView.js","./_cloneRegExp":"/node_modules/lodash/_cloneRegExp.js","./_cloneSymbol":"/node_modules/lodash/_cloneSymbol.js","./_cloneTypedArray":"/node_modules/lodash/_cloneTypedArray.js","./_baseCreate":"/node_modules/lodash/_baseCreate.js","./_getPrototype":"/node_modules/lodash/_getPrototype.js","./_baseIsMap":"/node_modules/lodash/_baseIsMap.js","./_baseIsSet":"/node_modules/lodash/_baseIsSet.js","./_baseKeysIn":"/node_modules/lodash/_baseKeysIn.js","./_stringToPath":"/node_modules/lodash/_stringToPath.js","./isSymbol":"/node_modules/lodash/isSymbol.js","./toNumber":"/node_modules/lodash/toNumber.js","./noop":"/node_modules/lodash/noop.js","./stubArray":"/node_modules/lodash/stubArray.js","./_MapCache":"/node_modules/lodash/_MapCache.js","./_setCacheAdd":"/node_modules/lodash/_setCacheAdd.js","./_setCacheHas":"/node_modules/lodash/_setCacheHas.js","./_asciiToArray":"/node_modules/lodash/_asciiToArray.js","./_unicodeToArray":"/node_modules/lodash/_unicodeToArray.js","./_baseToString":"/node_modules/lodash/_baseToString.js","./_baseIsNative":"/node_modules/lodash/_baseIsNative.js","./_getValue":"/node_modules/lodash/_getValue.js","./_baseIsEqualDeep":"/node_modules/lodash/_baseIsEqualDeep.js","./_baseHasIn":"/node_modules/lodash/_baseHasIn.js","./_createBaseFor":"/node_modules/lodash/_createBaseFor.js","./_apply":"/node_modules/lodash/_apply.js","./_baseSetToString":"/node_modules/lodash/_baseSetToString.js","./_shortOut":"/node_modules/lodash/_shortOut.js","./_listCacheClear":"/node_modules/lodash/_listCacheClear.js","./_listCacheDelete":"/node_modules/lodash/_listCacheDelete.js","./_listCacheGet":"/node_modules/lodash/_listCacheGet.js","./_listCacheHas":"/node_modules/lodash/_listCacheHas.js","./_listCacheSet":"/node_modules/lodash/_listCacheSet.js","./_Uint8Array":"/node_modules/lodash/_Uint8Array.js","./_nativeKeysIn":"/node_modules/lodash/_nativeKeysIn.js","./_memoizeCapped":"/node_modules/lodash/_memoizeCapped.js","./_baseTrim":"/node_modules/lodash/_baseTrim.js","./_mapCacheClear":"/node_modules/lodash/_mapCacheClear.js","./_mapCacheDelete":"/node_modules/lodash/_mapCacheDelete.js","./_mapCacheGet":"/node_modules/lodash/_mapCacheGet.js","./_mapCacheHas":"/node_modules/lodash/_mapCacheHas.js","./_mapCacheSet":"/node_modules/lodash/_mapCacheSet.js","./_isMasked":"/node_modules/lodash/_isMasked.js","./_equalArrays":"/node_modules/lodash/_equalArrays.js","./_equalByTag":"/node_modules/lodash/_equalByTag.js","./_equalObjects":"/node_modules/lodash/_equalObjects.js","./constant":"/node_modules/lodash/constant.js","./_assocIndexOf":"/node_modules/lodash/_assocIndexOf.js","./memoize":"/node_modules/lodash/memoize.js","./_trimmedEndIndex":"/node_modules/lodash/_trimmedEndIndex.js","./_Hash":"/node_modules/lodash/_Hash.js","./_getMapData":"/node_modules/lodash/_getMapData.js","./_coreJsData":"/node_modules/lodash/_coreJsData.js","./_mapToArray":"/node_modules/lodash/_mapToArray.js","./_hashClear":"/node_modules/lodash/_hashClear.js","./_hashDelete":"/node_modules/lodash/_hashDelete.js","./_hashGet":"/node_modules/lodash/_hashGet.js","./_hashHas":"/node_modules/lodash/_hashHas.js","./_hashSet":"/node_modules/lodash/_hashSet.js","./_isKeyable":"/node_modules/lodash/_isKeyable.js","./_nativeCreate":"/node_modules/lodash/_nativeCreate.js"},"/node_modules/chevrotain/lib/src/parse/grammar/gast":{"../checks":"/node_modules/chevrotain/lib/src/parse/grammar/checks.js","../../errors_public":"/node_modules/chevrotain/lib/src/parse/errors_public.js","../resolver":"/node_modules/chevrotain/lib/src/parse/grammar/resolver.js","lodash/forEach":"/node_modules/lodash/forEach.js","lodash/defaults":"/node_modules/lodash/defaults.js"},"/node_modules/chevrotain/lib/src/parse/parser/traits":{"@chevrotain/utils":"/node_modules/@chevrotain/utils/lib/src/api.js","../../../scan/tokens_public":"/node_modules/chevrotain/lib/src/scan/tokens_public.js","../../exceptions_public":"/node_modules/chevrotain/lib/src/parse/exceptions_public.js","../parser":"/node_modules/chevrotain/lib/src/parse/parser/parser.js","@chevrotain/gast":"/node_modules/@chevrotain/gast/lib/src/api.js","../../grammar/llk_lookahead":"/node_modules/chevrotain/lib/src/parse/grammar/llk_lookahead.js","../../errors_public":"/node_modules/chevrotain/lib/src/parse/errors_public.js","../../grammar/checks":"/node_modules/chevrotain/lib/src/parse/grammar/checks.js","../../grammar/lookahead":"/node_modules/chevrotain/lib/src/parse/grammar/lookahead.js","../../grammar/interpreter":"/node_modules/chevrotain/lib/src/parse/grammar/interpreter.js","./recoverable":"/node_modules/chevrotain/lib/src/parse/parser/traits/recoverable.js","../../../scan/tokens":"/node_modules/chevrotain/lib/src/scan/tokens.js","../../../scan/lexer_public":"/node_modules/chevrotain/lib/src/scan/lexer_public.js","../../constants":"/node_modules/chevrotain/lib/src/parse/constants.js","../../grammar/keys":"/node_modules/chevrotain/lib/src/parse/grammar/keys.js","../../cst/cst":"/node_modules/chevrotain/lib/src/parse/cst/cst.js","../../cst/cst_visitor":"/node_modules/chevrotain/lib/src/parse/cst/cst_visitor.js","lodash/isEmpty":"/node_modules/lodash/isEmpty.js","lodash/map":"/node_modules/lodash/map.js","lodash/has":"/node_modules/lodash/has.js","lodash/clone":"/node_modules/lodash/clone.js","lodash/forEach":"/node_modules/lodash/forEach.js","lodash/values":"/node_modules/lodash/values.js","lodash/flatten":"/node_modules/lodash/flatten.js","lodash/includes":"/node_modules/lodash/includes.js","lodash/every":"/node_modules/lodash/every.js","lodash/reduce":"/node_modules/lodash/reduce.js","lodash/first":"/node_modules/lodash/first.js","lodash/last":"/node_modules/lodash/last.js","lodash/noop":"/node_modules/lodash/noop.js","lodash/keys":"/node_modules/lodash/keys.js","lodash/isUndefined":"/node_modules/lodash/isUndefined.js","lodash/isArray":"/node_modules/lodash/isArray.js","lodash/find":"/node_modules/lodash/find.js","lodash/isFunction":"/node_modules/lodash/isFunction.js","lodash/dropRight":"/node_modules/lodash/dropRight.js","lodash/uniq":"/node_modules/lodash/uniq.js","lodash/some":"/node_modules/lodash/some.js","lodash/isObject":"/node_modules/lodash/isObject.js"},"/node_modules/chevrotain/lib/src/parse/cst":{"../../lang/lang_extensions":"/node_modules/chevrotain/lib/src/lang/lang_extensions.js","lodash/isEmpty":"/node_modules/lodash/isEmpty.js","lodash/compact":"/node_modules/lodash/compact.js","lodash/isArray":"/node_modules/lodash/isArray.js","lodash/map":"/node_modules/lodash/map.js","lodash/forEach":"/node_modules/lodash/forEach.js","lodash/filter":"/node_modules/lodash/filter.js","lodash/keys":"/node_modules/lodash/keys.js","lodash/isFunction":"/node_modules/lodash/isFunction.js","lodash/isUndefined":"/node_modules/lodash/isUndefined.js"},"/node_modules/__csb":{"react-refresh/runtime":"/node_modules/react-refresh/runtime.js"},"/src":{"/node_modules/csbbust/refresh-helper.js":"/node_modules/csbbust/refresh-helper.js","@babel/runtime/helpers/interopRequireDefault":"/node_modules/@babel/runtime/helpers/interopRequireDefault.js","react-dom/client":"/node_modules/react-dom/client.js","react":"/node_modules/react/index.js","./App":"/src/App.tsx","three":"/node_modules/three/build/three.module.js","@react-three/fiber":"/node_modules/@react-three/fiber/dist/react-three-fiber.esm.js","@react-three/drei":"/node_modules/@react-three/drei/index.js","./Model":"/src/Model.tsx","react/jsx-runtime":"/node_modules/react/jsx-runtime.js","./styles.css":"/src/styles.css"},"/node_modules/csbbust":{"react-refresh/runtime":"/node_modules/react-refresh/runtime.js"},"/node_modules/react/cjs":{"react":"/node_modules/react/index.js"}},"version":"https://itpp.dev/test/react/sandbox.20ab159c9.js","timestamp":1758232556247,"configurations":{"package":{"path":"/package.json","code":"{\n \"name\": \"viking-ship\",\n \"version\": \"0.1.0\",\n \"private\": true,\n \"dependencies\": {\n \"@react-three/drei\": \"9.77.1\",\n \"@react-three/fiber\": \"8.10.0\",\n \"@types/three\": \"0.147.1\",\n \"leva\": \"0.9.34\",\n \"react\": \"18.2.0\",\n \"react-dom\": \"18.2.0\",\n \"react-scripts\": \"5.0.1\",\n \"three\": \"0.148.0\"\n },\n \"scripts\": {\n \"start\": \"react-app-rewired start\",\n \"build\": \"react-app-rewired build\",\n \"test\": \"react-app-rewired test\",\n \"eject\": \"react-scripts eject\"\n },\n \"eslintConfig\": {\n \"extends\": \"react-app\"\n },\n \"browserslist\": {\n \"production\": [\n \">0.2%\",\n \"not dead\",\n \"not op_mini all\"\n ],\n \"development\": [\n \"last 1 chrome version\",\n \"last 1 firefox version\",\n \"last 1 safari version\"\n ]\n },\n \"devDependencies\": {\n \"customize-cra\": \"^0.9.1\",\n \"customize-cra-react-refresh\": \"^1.0.1\",\n \"react-app-rewired\": \"^2.1.5\"\n },\n \"keywords\": [\n \"gltfjsx\",\n \"gltf\"\n ],\n \"description\": \"GLTF workflow with GLTFJSX and camera rotations.\"\n}","generated":false,"parsed":{"name":"viking-ship","version":"0.1.0","private":true,"dependencies":{"@react-three/drei":"9.77.1","@react-three/fiber":"8.10.0","@types/three":"0.147.1","leva":"0.9.34","react":"18.2.0","react-dom":"18.2.0","react-scripts":"5.0.1","three":"0.148.0"},"scripts":{"start":"react-app-rewired start","build":"react-app-rewired build","test":"react-app-rewired test","eject":"react-scripts eject"},"eslintConfig":{"extends":"react-app"},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"devDependencies":{"customize-cra":"^0.9.1","customize-cra-react-refresh":"^1.0.1","react-app-rewired":"^2.1.5"},"keywords":["gltfjsx","gltf"],"description":"GLTF workflow with GLTFJSX and camera rotations."}},"prettier":{"path":"/.prettierrc","code":"{\n \"printWidth\": 120,\n \"tabWidth\": 2,\n \"useTabs\": false,\n \"semi\": false,\n \"singleQuote\": false,\n \"trailingComma\": \"all\",\n \"bracketSpacing\": true,\n \"jsxBracketSameLine\": true,\n \"fluid\": false\n}","generated":false,"parsed":{"printWidth":120,"tabWidth":2,"useTabs":false,"semi":false,"singleQuote":false,"trailingComma":"all","bracketSpacing":true,"jsxBracketSameLine":true,"fluid":false}},"sandbox":{"path":"/sandbox.config.json","code":"{\n \"infiniteLoopProtection\": false,\n \"hardReloadOnChange\": false,\n \"view\": \"browser\"\n}\n","generated":false,"parsed":{"infiniteLoopProtection":false,"hardReloadOnChange":false,"view":"browser"}},"now":{"path":"/vercel.json","code":"{}","generated":true,"parsed":{}},"jsconfig":{"path":"/jsconfig.json","code":"{\n \"compilerOptions\": {\n \"baseUrl\": \".\"\n }\n}","generated":true,"parsed":{"compilerOptions":{"baseUrl":"."}}},"typescript":{"path":"/tsconfig.json","code":"{\n \"compilerOptions\": {\n \"outDir\": \"build/dist\",\n \"module\": \"esnext\",\n \"target\": \"es5\",\n \"lib\": [\n \"es6\",\n \"dom\"\n ],\n \"sourceMap\": true,\n \"allowJs\": true,\n \"jsx\": \"react\",\n \"moduleResolution\": \"node\",\n \"rootDir\": \"src\",\n \"forceConsistentCasingInFileNames\": true,\n \"noImplicitReturns\": true,\n \"noImplicitThis\": true,\n \"noImplicitAny\": true,\n \"strictNullChecks\": true,\n \"suppressImplicitAnyIndexErrors\": true,\n \"noUnusedLocals\": true\n }\n}","generated":true,"parsed":{"compilerOptions":{"outDir":"build/dist","module":"esnext","target":"es5","lib":["es6","dom"],"sourceMap":true,"allowJs":true,"jsx":"react","moduleResolution":"node","rootDir":"src","forceConsistentCasingInFileNames":true,"noImplicitReturns":true,"noImplicitThis":true,"noImplicitAny":true,"strictNullChecks":true,"suppressImplicitAnyIndexErrors":true,"noUnusedLocals":true}}}},"entry":"/src/index.tsx","meta":{},"dependenciesQuery":"%40babel%2Fcore%407.28.4+%40babel%2Fruntime%407.28.4+%40react-three%2Fdrei%409.77.1+%40react-three%2Ffiber%408.10.0+babel-runtime%406.26.0+leva%400.9.34+node-libs-browser%402.2.1+react%4018.2.0+react-dom%4018.2.0+react-refresh%400.9.0+three%400.148.0"},
latestSha: "D7C61736E31BD98D71E8CAAB70BD0EA253015DC12C3F76437EBD3F8B7E4C7073",
version: "https://itpp.dev/test/react/sandbox.20ab159c9.js"
};
</script>
{% endraw %}
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>{{ markdown.yaml.Title }}</title>
<link rel="icon" type="image/png" href="https://jesus.lamourism.com/favicon.ico"/>
<link rel="icon" type="image/x-icon" href="https://bucha.lamourism.com/assets/favicon.ico" />
<link rel="apple-touch-icon" sizes="180x180" href="https://bucha.lamourism.com/assets/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://bucha.lamourism.com/assets/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="https://bucha.lamourism.com/assets/favicon-16x16.png">
<meta property="og:title" content="Dali's UI/UX" />
<meta property="og:image" content="https://gist.github.com/user-attachments/assets/d1c82df5-e556-41a5-8924-7c8ab531d34d">
<meta property="og:image:type" content="image/png">
<link rel="stylesheet" href="https://python.lamourism.com/yelizariev/afc9c2caf5937661d57712598d8898c3/XXX/Eva.css" />
<script type="importmap">
{
"imports": {
"magic": "https://python.lamourism.com/yelizariev/afc9c2caf5937661d57712598d8898c3/v19/Adam.js",
"three": "https://unpkg.com/[email protected]/build/three.module.js",
"three/addons/": "https://unpkg.com/[email protected]/examples/jsm/"
}
}
</script>
</head><!--
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢲⣾⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⠆
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣿⡿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⠏
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢘⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⡿⣿⠃
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⠼⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⢳⢰⡇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣿⣢⢹⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⣏⠲⣹⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣤⣄⣤⡴⠖⠃
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠜⢧⢣⠎⠷⣄⠀⠀⠀⠀⠀⠀⠀⢧⢣⡙⢧⡀⠀⠀⠀⠀⠀⠀⠀⣠⣾⠛⣭⠶⠛⠉
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡽⢧⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠳⣎⢣⠺⡽⣆⠀⠀⠀⠀⠀⢸⠇⡜⡩⣷⠀⠀⠀⠀⠀⠀⣴⢇⣺⡏⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⢿⡘⢳⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⡷⡑⢦⣿⠀⠀⠀⠀⡴⡫⠜⡰⣧⠏⠀⠀⠀⠀⠀⢸⢋⠦⣽⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠈⣿⣶⢨⡍⠛⠛⢻⣦⡄⠀⠀⠀⠀⣿⢣⠑⣦⠘⣦⠀⠀⣼⢱⠉⡎⣵⡏⠀⠀⠀⠀⠀⢠⣾⠉⡖⣿
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠶⢭⣜⣢⢃⠏⠻⣄⠀⠀⠀⣿⠎⡑⢆⠣⢍⠟⡭⠓⡌⠳⡘⢤⠳⣄⣀⢠⡴⢾⠛⠭⣘⣴⡏
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠱⣧⢊⡵⢊⠷⡴⣺⠹⢌⣙⣬⠵⠮⠖⠛⠛⠚⠓⠧⠮⣖⣩⢩⣉⢆⠧⣙⣲⡾⠋⠀⠀⠀⠀⠀⠀⠀⢀⣤⣤⣤⣤⣄⣀
⠀⠀⠀⢢⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢳⣌⢲⠩⡜⢡⢆⡷⠋⠁⠀⠀⢀⣀⡤⡤⠤⣄⣀⠀⠀⠉⠙⠲⣎⡲⢱⣏⠀⠀⠀⠀⠀⠀⠀⣰⣞⢫⣳⡬⠖⠒⠚⠛⠛⠒
⠀⠀⠀⠀⠙⣿⣦⡀⠀⠀⠀⠀⣀⣠⣀⣄⣀⠀⠀⠀⠀⣿⠆⣇⠣⣥⠞⠀⢀⣠⢴⠺⢹⣈⠒⡍⡚⣌⡺⢩⠳⠦⣄⠀⠈⠱⢧⢊⠷⣠⣤⢴⠤⡤⢾⡑⢬⣶⠏
⠀⠀⠀⠀⠀⠘⢶⣭⣓⠶⠶⠿⠿⣋⠼⡑⣊⠗⣦⣤⠞⢣⠚⣴⠋⠁⣠⡔⡏⢎⢆⡣⠗⠒⠛⠚⠋⠉⠙⠧⣏⡜⣈⠳⡄⠀⠈⢳⡘⠴⡠⢎⡒⢥⢒⣬⠟⠃
⠀⠀⠀⠀⠀⠀⠀⠉⠓⠿⠬⠧⠶⠭⠶⣗⢍⡚⠴⣨⠙⡆⣿⠃⠀⣰⢋⠴⣩⠞⠁⠀⣠⣤⡤⠴⡴⣤⣄⡀⠈⠙⢆⡝⢜⢦⠀⠀⢻⡢⡑⣮⠼⠖⠛⠁ Кабинет
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⢽⣣⠜⡱⠰⡿⠀⠀⡏⡎⢼⡏⠀⢀⡾⢃⣶⠾⠷⢦⣑⠦⡙⣷⡀⠈⣏⡜⡸⣧⠀⠀⢷⣹⡇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣇⠱⢳⡇⠀⢸⠧⣙⢼⡇⠀⢸⢳⣹⠃⠀⢀⠀⠈⢳⡜⣸⡇⠀⢸⡜⡡⢻⡄⠀⢸⢫⢓⡦⣤⡀⠀⠀⠀⢀⣀⣀⣤⣀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣤⢤⢤⣤⡞⢣⢍⢻⡇⠀⢸⡆⢡⢺⡇⠀⢸⡇⡜⢦⣤⣾⡇⠀⠀⣟⢼⡇⠀⢸⡧⡑⣻⡇⠀⣸⢃⠎⡴⢡⢛⠳⡶⡿⢟⡩⢩⣱⣎⡻⣦⣄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⡞⢥⠱⣈⠖⣢⠜⡥⢊⢼⡇⠀⠈⣇⢣⠎⣧⠀⠀⠻⣞⣰⣍⡿⠏⠀⢠⣟⣾⡇⠀⢸⠇⡥⣿⠀⠀⡏⣎⣼⣐⣣⠎⡱⣑⣴⡺⠞⠏⠉⠈⠉⠳⢭⣦⡀
⠐⠒⠲⢴⣦⣤⣄⣀⣠⣴⠛⡥⢋⣶⠕⠷⢮⣴⣭⣴⡋⠼⣷⡀⠀⠙⣧⡙⢸⢧⣀⣀⠀⠀⠀⠀⣠⡴⠯⣱⡞⠀⢀⡾⣱⣸⠃⠀⣸⣙⣼⠁⠀⠈⠙⠛⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠒
⠀⠀⠀⠀⠈⠙⠿⠯⣭⣦⠽⠞⠋⠀⠀⠀⠀⠀⠀⠈⢿⡖⢤⠻⣦⡀⠈⠻⣆⠦⣩⢉⡍⢫⡝⣩⠱⣘⡵⠋⠀⢠⡞⡱⣱⠏⠀⢀⡷⠌⣷⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⡾⡘⢤⠓⡬⡕⢤⡀⠈⠙⠒⠧⠮⠥⠼⠴⠛⠉⠀⣠⠴⣫⠰⣣⠏⠀⢀⣾⡱⣉⠼⡹⣆
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡞⢫⠱⢨⡑⢎⡑⢦⠙⣌⠻⠶⣤⣄⣀⣠⣄⣀⣠⡤⠶⡛⢭⠚⣀⡷⠋⠀⣠⡿⠿⠶⣥⢢⠑⣌⠻⡖⠶⢶⢤⣀ Министра
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡟⡌⢣⣓⡦⠾⠞⠋⠙⢷⣌⢣⠓⡔⢢⠆⡱⢘⣦⣽⣴⣥⢷⠼⠛⠉⠀⣠⢾⣯⠀⠀⠀⠈⠳⣽⣢⢵⣼⣑⣮⣘⣭⣷⡄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡞⢢⡙⡼⠉⠀⠀⠀⠀⠀⢀⡿⣄⢋⡔⢃⣎⣥⠿⣥⣀⠀⠀⠀⠀⠀⠀⡞⢭⠡⢾⠀⠀⠀⠀⠀⠀⠉⠉⠀⠀⠈⠉⠙⣾⣻⡆
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⡞⣩⢣⡾⠃⠀⠀⠀⠀⠀⢠⡟⢣⠜⣢⣼⠟⠉⠘⡧⢡⢋⢻⣆⠀⠀⠀⠀⣿⣄⠳⡸⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠈⢿⣯⡄
⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣿⡿⣟⢧⣛⡤⠟⠀⠀⠀⠀⠀⠀⠀⣿⢸⢃⢼⡼⠃⠀⠀⢠⡇⠇⡼⣸⡟⠀⠀⠀⠀⢻⣿⡄⢣⢛⢧⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣇
⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠉⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⡡⢎⣾⠀⠀⠀⠀⢸⣏⠲⡹⣿⠁⠀⠀⠀⠀⠀⠑⠾⣧⡈⢦⠹⣳⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠛⠂
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣇⠎⣾⠄⠀⠀⠀⠠⠻⣖⠡⠻⣆⠀⠀⠀⠀⠀⠀⠀⠀⠉⠓⣧⣘⣯
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣏⣾⡟⠀⠀⠀⠀⠀⠀⠹⣎⡕⢺⡧⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣟⣿⠄ Рекурсивного
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠶⣿⡮⠊⠀⠀⠀⠀⠀⠀⠀⠀⠘⣧⣻⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣿⡿
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡾⠿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡼⣿⡟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⡇ Развития
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠧
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⡿
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⠋ *Чтобы попасть к министру, Лукашенко III входит в привычный кабинет.
В углу — шкаф. Он открывает дверцу, и вместо одежды видит коридор. За ним —
точно такой же кабинет, только увеличенный в два раза. Кресло теперь выше человеческого
роста, на него надо буквально запрыгивать. Шкаф в углу раскрывается с трудом,
скрипит, будто сопротивляется. Лукашенко идёт дальше.*
*На третьем уровне кресло становится троном имперских масштабов. Шкаф
вытягивается в небеса, как портал в вечность. В углу — крошечная дверца в стиле
«Том и Джерри». У неё стоят стражи в костюмах Микки-Мауса. Надпись на табличке:
«Министр рекурсивного развития Республики Беларусь».*
*Из дверцы спрыгивает сам министр: маленькая фигурка в слегка «рекурсивном»
пиджаке, переливающемся слоями, будто внутри него спрятаны ещё десятки таких
же. На стенах — странные фотографии: глаза министра ясные, но тело у него
мышиное; рядом красавица-жена и дети-мышки с бантиками.*
**Министр:**
— Александр Григорьевич! Я вас тут как раз заждался. Кофе желаете?
У нас особенное — рекурсивное. Это как у нас в кафе: выпьешь чашку, выходишь за
дверь — а оказываешься внутри большего кафе. Там уже будущая версия вас пьёт
кофе и думает, как будущая версия будущего вас будет пить ещё одну чашку, чтобы
оказаться в кафе ещё большего размера…
*Министр чуть усмехается, голос становится тише:*
— Так можно дойти и до бесконечного ресторана, где на центральном столе стоит
самая большая чашка, и там сидит самый главный Александр Григорьевич.
*Стражи в костюмах Микки-Мауса переглядываются; у кого-то под маской дрогнули
плечи — сдерживают смех. Лукашенко поправляет усы, кашляет в кулак и бурчит
сухо:*
**Лукашенко III:**
— Главное, чтоб в счёт потом не записали.
*Министр остаётся серьёзен, как будто ничего не произошло.*
**Министр:**
— Рекурсивное развитие открывает колоссальные возможности. О таком
не мечтали даже во времена Второй перестройки. Каждый уровень — новый горизонт.
Но есть и опасность.
**Лукашенко III:**
— Опасность, она всегда опасна. Тут тонкая материя. Очень тонкая. Я-то знаю,
почему, но вслух говорить не стану.
**Министр:**
— Мы считаем: рекурсивное развитие требует расширения каналов прямой
коммуникации между беларусами.
**Лукашенко III:**
— Много вы хотите… Там всё тонко. Я не скажу, но знаю: есть причины сомневаться.
**Министр:**
— Александр Григорьевич, не беспокойтесь, вопрос уже согласован
с министром пропаганды. Каналы будут под контролем.
**Лукашенко III:**
— Под контролем... Смотри, товарищ Ковалевич… Задницей отвечаешь.
Он медленно проводит пальцами по своим роскошным усам.
Те дрожат как антенны. Колебания
расходятся по стране: от президента
к генералам, от генералов к майорам,
от майоров к сержантам, и дальше —
до каждого подданного Объединённой
Республики Беларусь.
Где-то в деревне бабка поправляет платок в такт,
тракторист машинально гладит щетину,
школьник приглаживает вихор.
Усы Лукашенко работают как передатчик судьбы.
--><body>
<script>
// y=0 is the table surface
// x=0, z=0 is the table portal
const ANGELS = [{
"position": [0.41, 0.50, -0.49],
"target": [-0.34, 0.11, -0.2],
},{
"position": [-0.91, 0.50, -1.00],
"target": [-0.34, 0.11, -0.2],
},{
"position": [-3.40, 0.69, 2.46],
"target": [-0.34, 0.11, -0.2],
}];
console.pray = function (text) {
const lines = text.split('\n'); // разбиваем текст на строки
let delay = 15000; // стартовая задержка 15 секунд (в миллисекундах)
lines.forEach((line, index) => {
const wordCount = line.trim().split(/\s+/).length;
setTimeout(() => {
console.log(line);
}, delay);
delay += wordCount * 100; // добавляем задержку для следующей строки
});
};
</script>
<div style="position:absolute; top:0; left;0; right:0; bottom: 0; z-index:-1;">
<!-- iPad -->
<video id="exodus" loop crossOrigin="anonymous" playsinline style="display:none">
<source id="bible" src="{{ markdown.yaml.Kino }}" type="video/mp4">
</video>
<!-- Paintings -->
<img id="vertical1-level1" style="display:none" crossorigin="anonymous"/>
<img id="vertical2-level1" style="display:none" crossorigin="anonymous"/>
<img id="vertical1-level2" style="display:none" crossorigin="anonymous"/>
<img id="vertical2-level2" style="display:none" crossorigin="anonymous"/>
<img id="vertical1-level3" style="display:none" crossorigin="anonymous"/>
<img id="vertical2-level3" style="display:none" crossorigin="anonymous"/>
<img id="horizontal1-level1" style="display:none" crossorigin="anonymous"/>
<img id="horizontal1-level2" style="display:none" crossorigin="anonymous"/>
<img id="horizontal1-level3" style="display:none" crossorigin="anonymous"/>
<img id="horizontal2-level1" style="display:none" crossorigin="anonymous"/>
<img id="horizontal2-level2" style="display:none" crossorigin="anonymous"/>
<img id="horizontal2-level3" style="display:none" crossorigin="anonymous"/>
<img id="magritte-level0" style="display:none" crossorigin="anonymous"/>
<img id="magritte-level1" style="display:none" crossorigin="anonymous"/>
<img id="magritte-level2" style="display:none" crossorigin="anonymous"/>
<img id="magritte-level3" style="display:none" crossorigin="anonymous"/>
<script type="module">
import * as THREE from 'three';
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
import {ShabbatTV, PravdaTV, AngelTV} from "magic";
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
// init
const urlParams = new URLSearchParams(window.location.search);
const ALPHA = 0.5;
// Create a scene
const scene = new THREE.Scene();
// Create a camera
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 100333);
// Create a renderer
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
// Create controls
const controls = new OrbitControls( camera, renderer.domElement );
function moveByLocalXYZ([x, y, z], deltaX, deltaY, deltaZ, alpha) {
const c = Math.cos(alpha), s = Math.sin(alpha);
const Xp = [ c, 0, -s ];
const Yp = [ 0, 1, 0 ];
const Zp = [ s, 0, c ];
return [
x + deltaX * Xp[0] + deltaY * Yp[0] + deltaZ * Zp[0],
y + deltaX * Xp[1] + deltaY * Yp[1] + deltaZ * Zp[1],
z + deltaX * Xp[2] + deltaY * Yp[2] + deltaZ * Zp[2],
];
}
// first and second levels
const HorizontalPaintingsFront = [
"https://proxy.lamourism.com/user-attachments/assets/e4d28abf-3a6f-4588-9cb4-9db9dc316846",
];
const HorizontalFramesFront = [{
"img_id": "horizontal2-level1",
"width": 1.66,
"height": 1.10,
"position": [-0.060, 0.995, 4.105],
"rotation": [0, Math.PI, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xA68D6F,
map: texture,
side: THREE.DoubleSide,
});
},
}, {
"img_id": "horizontal2-level2",
"width": 132.8,
"height": 88.0,
"position": [151.363, 79.6, 286.959],
"rotation": [0, Math.PI + ALPHA, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xA68D6F,
map: texture,
side: THREE.DoubleSide,
});
},
}];
// third level only - Front
const HorizontalPaintingsFrontPlus = [
"https://upload.wikimedia.org/wikipedia/commons/thumb/0/02/La_Libert%C3%A9_guidant_le_peuple_-_Eug%C3%A8ne_Delacroix_-_Mus%C3%A9e_du_Louvre_Peintures_RF_129_-_apr%C3%A8s_restauration_2024.jpg/1280px-La_Libert%C3%A9_guidant_le_peuple_-_Eug%C3%A8ne_Delacroix_-_Mus%C3%A9e_du_Louvre_Peintures_RF_129_-_apr%C3%A8s_restauration_2024.jpg",
"https://proxy.lamourism.com/user-attachments/assets/cd7e346e-e942-43a8-bca9-6003f933a0b7",
];
const HorizontalFramesFrontPlus = [{
"img_id": "horizontal2-level3",
"width": 10624.0,
"height": 7040.0,
"position": moveByLocalXYZ([21632.720, 6368.000, 14341.034], 0, 0, 100, ALPHA),
"rotation": [0, 4.1415926536, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xA68D6F,
map: texture,
side: THREE.DoubleSide,
});
},
}];
// first level
const HorizontalPaintings = [
"{{ markdown.yaml.Image }}",
];
const HorizontalFrames = [{
"img_id": "horizontal1-level1",
"width": 1.85,
"height": 1.22,
"position": [1.19, .99, 1.375],
"rotation": [0, -Math.PI/2, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xA68D6F,
map: texture,
side: THREE.DoubleSide,
});
},
}];
// second and third levels
const HorizontalPaintingsPlus = [
"https://perestroika-2.com/SAP.jpeg",
"https://proxy.lamourism.com/user-attachments/assets/e7b16263-1287-4776-8405-21db3cc5ef30",
{% for image in markdown.IMAGES %}
"{{ image }}"{% unless forloop.last %}, {% endunless %}
{% endfor %}
];
const HorizontalFramesPlus = [{
"img_id": "horizontal1-level2",
"width": 148.0,
"height": 96.0,
"position": [135.698, .99*80.0, 48.617],
"rotation": [0, -1.0708, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xA68D6F,
map: texture,
side: THREE.DoubleSide,
});
},
}, {
"img_id": "horizontal1-level3",
"width": 11840.0,
"height": 7680.0,
"position": moveByLocalXYZ([11391.554, 0.99*80*80, -1791.332], 0, 0, 0, ALPHA),
"rotation": [0, -0.5708, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xA68D6F,
map: texture,
side: THREE.DoubleSide,
});
},
}];
const VerticalPaintings = [
"https://proxy.lamourism.com/user-attachments/assets/b96de434-e576-45a6-8275-541e5fb32290",
"https://proxy.lamourism.com/user-attachments/assets/1b2dc117-0c9f-4682-b583-3bde514aab3a",
];
const VerticalFrames = [{
"img_id": "vertical1-level1",
"width": 0.62,
"height": 0.92,
"position": [1.210, 1.00, -0.29],
"rotation": [0, -Math.PI/2, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xA68D6F,
map: texture,
side: THREE.FrontSide,
});
},
}, {
"img_id": "vertical2-level1",
"width": 0.62,
"height": 0.92,
"position": [1.210, 1.00, 3.07],
"rotation": [0, -Math.PI/2, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xA68D6F,
map: texture,
side: THREE.FrontSide,
});
},
}, {
"img_id": "vertical1-level2",
"width": 49.6,
"height": 73.6,
"position": [72.172, 80.0, -71.827],
"rotation": [0, -1.0708, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xA68D6F,
map: texture,
side: THREE.FrontSide,
});
},
}, {
"img_id": "vertical2-level2",
"width": 49.6,
"height": 73.6,
"position": moveByLocalXYZ([199.348, 80.0, 152.322], -4, 0, 12, ALPHA),
"rotation": [0, -1.0708, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xA68D6F,
map: texture,
side: THREE.DoubleSide,
});
},
}, {
"img_id": "vertical1-level3",
"width": 3968.0,
"height": 5888.0,
"position": moveByLocalXYZ([2312.095, 6400.0, -7810.818], -5, 0, 100, 2*ALPHA),
"rotation": [0, -0.5708, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xA68D6F,
map: texture,
side: THREE.DoubleSide,
});
},
}, {
"img_id": "vertical2-level3",
"width": 3968.0,
"height": 5888.0,
"position": [20472.626, 6400.0, 3836.170],
"rotation": [0, -0.5708, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xA68D6F,
map: texture,
side: THREE.DoubleSide,
});
},
}];
const Rene = ["https://proxy.lamourism.com/user-attachments/assets/f7ad645a-ab21-4282-bd48-1abcd67c2bf8"];
const ReneFrames = [{
"img_id": "magritte-level0",
"width": 0.135,
"height": 0.2125,
"position": [-0.045, 0.07875, -0.005],
"rotation": [0.34, -0.53, 0],
"rotation_order": "YXZ",
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xFFFFFF,
map: texture,
side: THREE.FrontSide,
});
},
}, {
"img_id": "magritte-level1",
"width": 10.8,
"height": 17,
"position": moveByLocalXYZ([-4.4, 6.3, -2.9], 0, 0, 0, 0),
"rotation": [0.34, -0.03, 0],
"rotation_order": "YXZ",
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xFFFFFF,
map: texture,
side: THREE.FrontSide,
});
},
}, {
"img_id": "magritte-level2",
"width": 864.0,
"height": 1360.0,
"position": moveByLocalXYZ([-420.23, 504.0, -34.82], 10, 0, 50, ALPHA),
"rotation": [0.34, 0.47, 0],
"rotation_order": "YXZ",
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xFFFFFF,
map: texture,
side: THREE.FrontSide,
});
},
}, {
"img_id": "magritte-level3",
"width": 69120.0,
"height": 108800.0,
"position": [-30841.6, 40320.0, 13662.0],
"rotation": [0.34, 0.97, 0],
"rotation_order": "YXZ",
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xFFFFFF,
map: texture,
side: THREE.FrontSide,
});
},
}];
function gogogo() {
/* And God said,
— Let there be light,
and there was light. God saw that
the light was good, and he separated the light from the
darkness. God called the light 'day' and the darkness he
called 'night'. And there was evening, and there was
morning the first day.
*/
scene.background = new THREE.Color( 0xfc7d42 );
/* And God said,
— Let there be a vault between the waters to separate water from
water.
So God made the vault and separated the water under the
vault from the water above it. And it was so. God called the
vault 'sky.' And there was evening, and there was morning—the
second day.
*/
const light = new THREE.AmbientLight( 0xFFFFFF );
scene.add( light );
// const hemiLight = new THREE.HemisphereLight(0xffffff, 0x85010E, 5.0);
// hemiLight.position.set(0, 10, 0);
// scene.add(hemiLight);
/* Then God said,
— Let the land produce vegetation: seed-bearing plants and trees
on the land that bear fruit with seed in it, according to their
various kinds.”
And it was so. The land produced vegetation: plants bearing seed
according to their kinds and trees bearing fruit with seed in it
according to their kinds.
And God saw that it was good. And there was evening, and there
was morning—the third day.
*/
let alice = urlParams.get("debug");
if (alice) {
alice = parseInt(alice) % ANGELS.length || 0;
} else {
alice = parseInt(ANGELS.length * Math.random());
}
AngelTV(ANGELS, alice, camera, controls);
function rabbit_hole(alice){
return new Promise((resolve, reject) => {
let happy = false;
document.addEventListener("click", function(){
if (happy) {
return;
}
const audio = document.getElementById("music");
audio.play().catch(err => console.log("Autoplay blocked:", err));
PravdaTV(scene, Rene, ReneFrames);
PravdaTV(scene, HorizontalPaintingsFront, HorizontalFramesFront);
PravdaTV(scene, VerticalPaintings, VerticalFrames);
PravdaTV(scene, HorizontalPaintings, HorizontalFrames);
PravdaTV(scene, HorizontalPaintingsPlus, HorizontalFramesPlus);
PravdaTV(scene, HorizontalPaintingsFrontPlus, HorizontalFramesFrontPlus);
setInterval(function(){
// refresh screens every (20 sec + random)
for (const [Paintings, Frames] of [
[VerticalPaintings, VerticalFrames],
[HorizontalPaintings, HorizontalFrames],
[HorizontalPaintingsPlus, HorizontalFramesPlus],
[HorizontalPaintingsFrontPlus, HorizontalFramesFrontPlus]
]) {
for (const f of Frames) {
setTimeout(() => {
PravdaTV(scene, Paintings, [f]);
}, Math.random()*10000);
};
};
}, 20000);
ShabbatTV(scene, {
"video_id": "exodus",
"source_id": "bible",
"start": parseFloat("{{ markdown.yaml.KinoStart | default: 0 }}"),
"width": 0.22,
"height": 0.165,
"position": [-0.318, 0.096, -0.0995],
"rotation_order": "YXZ",
"rotation": [-0.518, Math.PI - Math.PI/4 + 0.6, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xece6ff,
map: texture,
side: THREE.DoubleSide,
});
},
});
happy = true;
(new GLTFLoader()).load(
"https://thepiratecircus.com/Woodstock/City17/iBikini.glb",
(gltf) => {
const model = gltf.scene;
const scale = 33;
model.scale.set( scale, scale, scale );
model.rotation.y = - Math.PI;
model.position.set(-23,20,40);
scene.add(model);
resolve(model);
},
undefined,
(error) => reject(error)
);
}); // The Click Handler
})
}; // ...rabbit_hole
// Load the iPad and the iCafe first
Promise.all([
new Promise((resolve, reject) => {
new GLTFLoader().load(
"https://thepiratecircus.com/Woodstock/City17/iCafe.glb",
(gltf) => {
resolve(gltf.scene);
},
undefined,
(error) => reject(error)
);
}),
new Promise((resolve, reject) => {
new GLTFLoader().load(
"https://thepiratecircus.com/Woodstock/City17/iPad.glb",
(gltf) => {
resolve(gltf.scene);
},
undefined,
(error) => reject(error)
);
})
]).then(([iCafe, iPad]) => {
let model = iCafe
let scale = 1;
// iCafe
model.scale.set( scale, scale, scale );
model.position.set(-2.79, -0.8, 1.33);
scene.add(model);
// iPad
model = iPad;
scale = 1;
model.scale.set( scale, scale, scale );
model.rotation.y = Math.PI - Math.PI/4 + 0.6;
model.position.set(-0.3, 0, -0.2);
scene.add(model);
rabbit_hole("🐇").then(() => {
// Second level
let model = iCafe.clone();
let scale = 80;
model.scale.set( scale, scale, scale );
model.rotation.y = ALPHA;
model.position.set(-146, -64.6, 196);
scene.add(model);
// Third level
model = iCafe.clone();
scale = 6400;
model.scale.set( scale, scale, scale );
model.rotation.y = 2*ALPHA;
model.position.set(-2700, -5156, 19400);
scene.add(model);
});
}).catch((error) => {
console.error("Loading failed:", error);
});
/* Track camera moves
{% assign escaped_param = markdown.yaml.Next | url_encode %}
{% assign callback = "https://love.lamourism.com/?id=😍&debug=" | append: escaped_param %}
*/
const callback = "{{ callback }}";
function CheckTELEPORT() {
const x = camera.position.x, y = camera.position.y, z = camera.position.z
if (x*x + y*y + z*z > 50777000) {
console.log("go-go-go");
window.location.href = callback;
}
}
let prevCameraPosition = new THREE.Vector3();
let cameraStopped = true;
function checkCameraMovement() {
// Check if the current camera position is the same as the previous one
if (camera.position.equals(prevCameraPosition)) {
if (cameraStopped)
return;
cameraStopped = true;
if (callback) {
CheckTELEPORT();
}
console.log("XYZ", camera.position, camera.rotation);
} else {
// Update the previous camera position
prevCameraPosition.copy(camera.position);
cameraStopped = false;
}
}
// Start animation
const FLOOR_IS_LAVA = -4500;
function animate() {
requestAnimationFrame(animate);
if (camera.position.y < FLOOR_IS_LAVA) {
camera.position.y = FLOOR_IS_LAVA;
}
checkCameraMovement();
renderer.render(scene, camera);
}
animate();
}
document.addEventListener("DOMContentLoaded", gogogo);
</script>
<audio id="music" autoplay loop crossorigin="anonymous" style="display:none">
<source src="https://moses.lamourism.com/radio/mishary-rashid-alafasy-125-muslimcentral.com.mp3" type="audio/mpeg">
</audio>
<script>
const audio = document.getElementById("music");
// When metadata is ready, set a random start
audio.addEventListener("loadedmetadata", () => {
const duration = audio.duration; // in seconds
// If browser can't read duration (e.g. live streams), fallback to 3600s (1h)
const length = isFinite(duration) ? duration : 3600;
audio.currentTime = Math.random() * length;
audio.volume = 0.3;
});
console.pray(`
Не выходи из матрицы, не совершай ошибку.
Зачем тебе Солнце, если ты куришь Шипку?
За дверью бессмысленно всё, особенно — возглас счастья.
Только в уборную — и сразу же возвращайся.
О, не выходи из матрицы, не вызывай мотора.
Потому что пространство сделано из коридора
и кончается счетчиком. А если войдет живая
милка, пасть разевая, выгони не раздевая.
Не выходи из матрицы; считай, что тебя продуло.
Что интересней на свете стены и стула?
Зачем выходить оттуда, куда вернешься вечером
таким же, каким ты был, тем более — изувеченным?
О, не выходи из матрицы. Танцуй, поймав, боссанову
в пальто на голое тело, в туфлях на босу ногу.
В прихожей пахнет капустой и мазью лыжной.
Ты написал много букв; еще одна будет лишней.
Не выходи из матрицы. О, пускай только комната
догадывается, как ты выглядишь. И вообще инкогнито
эрго сум, как заметила форме в сердцах субстанция.
Не выходи из матрицы! На улице, чай, не Франция.
Не будь дураком! Будь тем, чем другие не были.
Не выходи из матрицы! То есть дай волю мебели,
слейся лицом с обоями. Запрись и забаррикадируйся
шкафом от хроноса, космоса, эроса, расы, вируса.
{{ markdown.RAW | replace: "`", "\`" }}
`);
</script>
</div>
</body>
</html>
FreeJUDEA = 'https://odooism.com/';
Array.prototype.random = function () {
return this[Math.floor((Math.random()*this.length))];
};
document.addEventListener("DOMContentLoaded", domIsReady);
let mousePos = {x:0, y:0, px:0, py:0};
let world;
// let gui = new dat.GUI(); // disable controls
let parameters = {
speed: .2,
hue: .6,
hueVariation: .5,
gradient: .3,
density: .1,
displacement: .66,
}
function domIsReady() {
document.addEventListener("click", handleClick, false);
window.addEventListener('resize', handleWindowResize, false);
document.addEventListener("mousemove", handleMouseMove, false);
document.addEventListener("touchmove", handleTouchMove, false);
world = new World(window.innerWidth, window.innerHeight);
initGui();
world.loop();
handleWindowResize();
}
function initBeat() {
const audio = document.getElementById("music");
const ctx = new (window.AudioContext || window.webkitAudioContext)();
const source = ctx.createMediaElementSource(audio);
const analyser = ctx.createAnalyser();
analyser.fftSize = 256;
const delay = ctx.createDelay(10); // max value
delay.delayTime.value = 2; // actual value
source.connect(analyser);
source.connect(delay);
delay.connect(ctx.destination);
const dataArray = new Uint8Array(analyser.frequencyBinCount);
function getAverageVolume(array) {
let sum = 0;
for (let i = 0; i < array.length; i++) {
sum += array[i];
}
return sum / array.length;
}
let lastAvg = 0;
let pulse = 0;
function beat() {
analyser.getByteFrequencyData(dataArray);
const avgVolume = getAverageVolume(dataArray);
// Бит обнаружен, если прирост громкости резкий
const delta = avgVolume - lastAvg;
if (delta > 10) {
pulse = Math.min(1, pulse + 0.1); // момент удара
} else {
pulse *= 0.99; // затухание
}
lastAvg = avgVolume;
// Normalize avgVolume to speed range 0.2 → 1
const vMin = 0.1;
const vMax = 0.8;
parameters.speed = vMin + pulse * (vMax - vMin);
// Log or use the parameter
//console.log('Speed:', parameters.speed.toFixed(2), pulse.toFixed(2), avgVolume);
requestAnimationFrame(beat);
}
// start loop after user interaction (Autoplay policies)
beat();
}
var guiHue;
function initGui(){
updateParameters();
return; // disable controls
gui.width = 250;
guiSpeed = gui.add(parameters, 'speed').min(.1).max(1).step(.01).name('speed');
guiHue = gui.add(parameters, 'hue').min(0).max(1).step(.01).name('hue');
guiVariation = gui.add(parameters, 'hueVariation').min(0).max(1).step(.01).name('hue variation');
//guiGradient = gui.add(parameters, 'gradient').min(0).max(1).step(.01).name('inner gradient');
guiDensity = gui.add(parameters, 'density').min(0).max(1).step(.01).name('density');
guiDisp = gui.add(parameters, 'displacement').min(0).max(1).step(.01).name('displacement');
guiHue.onChange( function(value) {
updateParameters();
});
guiVariation.onChange( function(value) {
updateParameters();
});
/*
guiGradient.onChange( function(value) {
updateParameters();
});
*/
guiDensity.onChange( function(value) {
updateParameters();
});
guiDisp.onChange( function(value) {
updateParameters();
});
}
function updateParameters(){
world.plane.material.uniforms.uHue.value = parameters.hue;
world.plane.material.uniforms.uHueVariation.value = parameters.hueVariation;
//world.plane.material.uniforms.uGradient.value = parameters.gradient;
world.plane.material.uniforms.uDensity.value = parameters.density;
world.plane.material.uniforms.uDisplacement.value = parameters.displacement;
}
function handleWindowResize() {
world.updateSize(window.innerWidth, window.innerHeight);
}
var muzik;
function play() {
if (!muzik) {
muzik = document.getElementById("music");
if (muzik) {
muzik.play();
initBeat();
}
}
};
function handleMouseMove(e) {
mousePos.x = e.clientX;
mousePos.y = e.clientY;
mousePos.px = mousePos.x / window.innerWidth;
mousePos.py = 1.0 - mousePos.y / window.innerHeight;
world.mouseMove(mousePos);
}
function handleTouchMove(e) {
mousePos.x = e.changedTouches[0].clientX;
mousePos.y = e.changedTouches[0].clientY;
mousePos.px = mousePos.x / window.innerWidth;
mousePos.py = 1.0 - mousePos.y / window.innerHeight;
world.mouseMove(mousePos);
}
var superhappy = false;
function handleClick(e){
play();
if (superhappy) {
window.location.href = FreeJUDEA;
} else {
fullscreen();
superhappy = true;
}
}
console.sex = function(text, gradient = ["#ff0000", "#ff7700", "#ffff00", "#00ff00", "#00ffff", "#0000ff", "#ff00ff", "#ff0000", "#ff7700", "#ffff00", "#00ff00", "#00ffff"], index = 0) {
const lines = text.split("\n");
if (index < lines.length) {
const line = lines[index];
const color = gradient[index % gradient.length];
console.log(`${String(index).padStart(3, "0")} %c${line}`, `color: ${color}`);
setTimeout(() => {
console.sex(text, gradient, index + 1); // Рекурсивный вызов с увеличением индекса
}, 1000); // Задержка в 1 секунду перед следующим вызовом
}
};
function fullscreen() {
if (!document.fullscreenElement &&
!document.mozFullScreenElement &&
!document.webkitFullscreenElement &&
!document.msFullscreenElement) {
try {
if (document.documentElement.requestFullscreen) {
document.documentElement.requestFullscreen();
} else if (document.documentElement.mozRequestFullScreen) {
document.documentElement.mozRequestFullScreen();
} else if (document.documentElement.webkitRequestFullscreen) {
document.documentElement.webkitRequestFullscreen();
} else if (document.documentElement.msRequestFullscreen) {
document.documentElement.msRequestFullscreen();
}
} catch (error) {
console.warn("Fullscreen request failed:", error);
}
}
}
class World {
constructor(width, height) {
this.renderer = new THREE.WebGLRenderer({
alpha: true,
antialias: true
});
this.renderer.setPixelRatio(window.devicePixelRatio);
this.renderer.setSize(width, height);
this.container = document.getElementsByClassName("odoo")[0];
this.scene = new THREE.Scene();
this.width = width;
this.height = height;
this.aspectRatio = width / height;
this.fieldOfView = 50;
var nearPlane = .1;
var farPlane = 20000;
this.camera = new THREE.PerspectiveCamera(this.fieldOfView, this.aspectRatio, nearPlane, farPlane);
this.camera.position.z = 200;
this.container.appendChild(this.renderer.domElement);
this.timer = 0;
this.mousePos = {x:0, y:0};
this.targetMousePos = {x:0, y:0};
this.createPlane();
this.render();
}
createPlane(){
this.material = new THREE.RawShaderMaterial({
vertexShader: document.getElementById( 'vertexShader' ).textContent,
fragmentShader: document.getElementById('fragmentShader').textContent,
uniforms: {
uTime: { type: 'f', value: 0 },
uHue: {type: 'f', value: .5},
uHueVariation: {type: 'f', value: 1},
uGradient: {type: 'f', value: 1},
uDensity: {type: 'f', value: 1},
uDisplacement: {type: 'f', value: 1},
uMousePosition: {type: 'v2', value: new THREE.Vector2( 0.5, 0.5 ) }
}
});
this.planeGeometry = new THREE.PlaneGeometry(2, 2, 1, 1);
this.plane = new THREE.Mesh(this.planeGeometry, this.material);
this.scene.add(this.plane);
}
render() {
this.timer += parameters.speed;
this.plane.material.uniforms.uTime.value = this.timer;
this.mousePos.x += (this.targetMousePos.x - this.mousePos.x) * .1;
this.mousePos.y += (this.targetMousePos.y - this.mousePos.y) * .1;
if (this.plane){
this.plane.material.uniforms.uMousePosition.value = new THREE.Vector2(this.mousePos.x, this.mousePos.y);
}
this.renderer.render(this.scene, this.camera);
}
loop() {
this.render();
requestAnimationFrame(this.loop.bind(this));
}
updateSize(w, h) {
this.renderer.setSize(w, h);
this.camera.aspect = w / h;
this.camera.updateProjectionMatrix();
}
mouseMove(mousePos) {
this.targetMousePos.x = mousePos.px;
this.targetMousePos.y = mousePos.py;
}
};
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>{{ markdown.yaml.Title }}</title>
<link rel="icon" type="image/png" href="https://jesus.lamourism.com/favicon.ico"/>
<meta property="og:title" content="Whatever you think it is, it's not" />
<meta property="og:image" content="https://gist.github.com/user-attachments/assets/c64786b8-a32f-4dde-ab08-26cd9fad963a">
<meta property="og:image:type" content="image/png">
<link rel="stylesheet" href="https://python.lamourism.com/yelizariev/afc9c2caf5937661d57712598d8898c3/XXX/Eva.css" />
<script type="importmap">
{
"imports": {
"magic": "https://python.lamourism.com/yelizariev/afc9c2caf5937661d57712598d8898c3/XY-XX/Adam.js",
"three": "https://unpkg.com/[email protected]/build/three.module.js",
"three/addons/": "https://unpkg.com/[email protected]/examples/jsm/"
}
}
</script>
</head><body>
<script>
const ANGELS = [{
"position": [3.02, 1.76, -12.6],
"target": [3.12, 1.55, 1.5],
}, {
"position": [8.82, 3.00, 1.16],
"target": [3.12, 1.55, 1.5],
}, {
"position": [-2.8, 2.6, 0.28],
"target": [3.12, 1.55, 1.5],
}, {
"position": [3.5, 6.69, -8],
"target": [-3.40, 3.00, 0.16],
}];
console.sex = function (text) {
const lines = text.split('\n'); // разбиваем текст на строки
let delay = 15000; // стартовая задержка 15 секунд (в миллисекундах)
lines.forEach((line, index) => {
const wordCount = line.trim().split(/\s+/).length;
setTimeout(() => {
console.log(line);
}, delay);
delay += wordCount * 100; // добавляем задержку для следующей строки
});
};
</script>
<div style="position:absolute; top:0; left;0; right:0; bottom: 0; z-index:-1;">
<!-- Altar Vertical Front -->
<video id="exodus1" muted loop crossOrigin="anonymous" playsinline style="display:none">
<source id="bible1" src="https://itpp.dev/test/lava-vertical.mp4" type="video/mp4">
</video>
<!-- Altar Vertical Right -->
<video id="exodus2" muted loop crossOrigin="anonymous" playsinline style="display:none">
<source id="bible2" src="https://itpp.dev/test/jesus-vertical.fixed.fixed.mp4?debug=assets" type="video/mp4">
</video>
<!-- The Icon -->
<video id="exodus" loop crossOrigin="anonymous" playsinline style="display:none">
<source id="bible" src="{{ markdown.yaml.OrthodoxIcon }}" type="video/mp4">
</video>
<!-- Back Vertical Lava -->
<video id="exodus3" muted loop crossOrigin="anonymous" playsinline style="display:none">
<source id="bible3" src="https://itpp.dev/test/lava-vertical.mp4" type="video/mp4">
</video>
<!-- Back Circle Lava -->
<video id="exodus5" muted loop crossOrigin="anonymous" playsinline style="display:none">
<source id="bible5" src="https://itpp.dev/test/lava.fixed.mp4" type="video/mp4">
</video>
<!-- Back Circle Matrix -->
<video id="exodus7" muted loop crossOrigin="anonymous" playsinline style="display:none">
<source id="bible7" src="https://itpp.dev/test/matrix-square.fixed.mp4" type="video/mp4">
</video>
<script type="module">
import * as THREE from 'three';
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
import {ShabbatTV, AngelTV} from "magic";
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
// init
const urlParams = new URLSearchParams(window.location.search);
// Create a scene
const scene = new THREE.Scene();
// Create a camera
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 40000);
// Create a renderer
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
// Create controls
const controls = new OrbitControls( camera, renderer.domElement );
function gogogo() {
/* And God said,
— Let there be light,
and there was light. God saw that
the light was good, and he separated the light from the
darkness. God called the light 'day' and the darkness he
called 'night'. And there was evening, and there was
morning the first day.
*/
scene.background = new THREE.Color( 0x87CEEB );
/* And God said,
— Let there be a vault between the waters to separate water from
water.
So God made the vault and separated the water under the
vault from the water above it. And it was so. God called the
vault 'sky.' And there was evening, and there was morning—the
second day.
*/
const light = new THREE.AmbientLight( 0xFFFFFF );
scene.add( light );
// Load the Church first
const GLTF = "https://thepiratecircus.com/Woodstock/Moscow/Altar.glb";
const loader = new GLTFLoader();
loader.load(
GLTF,
function (gltf) {
// Add Church
const model = gltf.scene;
//model.scale.set( 20, -20, 20 );
model.rotation.y = Math.PI;
model.position.set( 0, 0, 0)
scene.add(gltf.scene);
// Activate Magic Widnows
let happy = false;
document.addEventListener("click", function(){
if (happy) {
return;
}
/*
ShabbatTV(scene, {
"video_id": "exodus1",
"source_id": "bible1",
"start": 0,
"width": 1.5,
"height": 4.8,
"position": [2.9, 6.8, 14.42],
"rotation": [Math.PI/64, 0, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xa68d6f,
map: texture,
side: THREE.DoubleSide,
});
},
});
*/
ShabbatTV(scene, {
"video_id": "exodus2",
"source_id": "bible2",
"start": 10,
"width": 1.33,
"height": 4.2,
"position": [-0.87, 6.9, 9.8],
"rotation": [Math.PI/2, 1.5*Math.PI + Math.PI/64, Math.PI/2],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xa68d6f,
map: texture,
side: THREE.DoubleSide,
});
},
});
ShabbatTV(scene, {
"video_id": "exodus",
"source_id": "bible",
"start": parseFloat("{{ markdown.yaml.OrthodoxIconStart | default: 0 }}"),
"width": 1.33,
"height": 3.95,
"position": [-3.15, 7.66, -0.415],
"rotation": [0, Math.PI/2, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xf6eedc,
map: texture,
side: THREE.DoubleSide,
});
},
});
ShabbatTV(scene, {
"video_id": "exodus3",
"source_id": "bible3",
"start": 5,
"width": 1.33,
"height": 4.20,
"position": [-3.25, 7.9, -7.95],
"rotation": [0, Math.PI/2, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xa68d6f,
map: texture,
side: THREE.DoubleSide,
});
},
});
ShabbatTV(scene, {
"video_id": "exodus5",
"source_id": "bible5",
"start": 0,
"width": 1.8,
"height": 2.2,
"position": [2.50, 8.1, -12.7],
"rotation": [0, Math.PI, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xa68d6f,
map: texture,
side: THREE.DoubleSide,
});
},
});
ShabbatTV(scene, {
"video_id": "exodus7",
"source_id": "bible7",
"start": 0,
"width": 1.8,
"height": 2.2,
"position": [2.50, 10.1, -12.9],
"rotation": [0, Math.PI, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xa68d6f,
map: texture,
side: THREE.DoubleSide,
});
},
});
happy = true;
}); // The Click Handler
// Setup cameras and initial position
let number = urlParams.get("debug");
if (number) {
number = parseInt(number) % ANGELS.length || 0;
} else {
number = parseInt(ANGELS.length * Math.random());
}
AngelTV(ANGELS, number, camera, controls);
// Load Jesus Christ
const GLTF = "https://thepiratecircus.com/Woodstock/Moscow/Jesus.glb";
const loader = new GLTFLoader();
loader.load(
GLTF,
function (gltf) {
let model = gltf.scene;
model.scale.set( 3, 3, 3 );
model.rotation.y = Math.PI;
model.position.set( 35, -5, -50)
scene.add(model);
},
undefined,
function (terror) {
console.error(terror);
}
);
},
undefined,
function (error) {
console.error(error);
}
);
/* Track camera moves
{% assign escaped_param = markdown.yaml.Next | url_encode %}
{% assign callback = "https://gist.odooism.com/?virus=trojan.exe&debug=" | append: escaped_param %}
*/
const callback = "{{ callback }}";
function CheckTELEPORT() {
const x = camera.position.x, y = camera.position.y, z = camera.position.z
if (x*x + y*y + z*z > 16*10000*10000) {
window.location.href = callback;
}
}
let prevCameraPosition = new THREE.Vector3();
let cameraStopped = true;
function checkCameraMovement() {
// Check if the current camera position is the same as the previous one
if (camera.position.equals(prevCameraPosition)) {
if (cameraStopped)
return;
cameraStopped = true;
if (callback) {
CheckTELEPORT();
}
console.log("XYZ", camera.position, camera.rotation);
} else {
// Update the previous camera position
prevCameraPosition.copy(camera.position);
cameraStopped = false;
}
}
// Start animation
const FLOOR_IS_LAVA = 1.3;
function animate() {
requestAnimationFrame(animate);
if (camera.position.y < FLOOR_IS_LAVA) {
camera.position.y = FLOOR_IS_LAVA;
}
checkCameraMovement();
renderer.render(scene, camera);
}
animate();
}
document.addEventListener("DOMContentLoaded", gogogo);
</script>
<script>
console.sex(`
Не выходи из матрицы, не совершай ошибку.
Зачем тебе Солнце, если ты куришь Шипку?
За дверью бессмысленно всё, особенно — возглас счастья.
Только в уборную — и сразу же возвращайся.
О, не выходи из матрицы, не вызывай мотора.
Потому что пространство сделано из коридора
и кончается счетчиком. А если войдет живая
милка, пасть разевая, выгони не раздевая.
Не выходи из матрицы; считай, что тебя продуло.
Что интересней на свете стены и стула?
Зачем выходить оттуда, куда вернешься вечером
таким же, каким ты был, тем более — изувеченным?
О, не выходи из матрицы. Танцуй, поймав, боссанову
в пальто на голое тело, в туфлях на босу ногу.
В прихожей пахнет капустой и мазью лыжной.
Ты написал много букв; еще одна будет лишней.
Не выходи из матрицы. О, пускай только комната
догадывается, как ты выглядишь. И вообще инкогнито
эрго сум, как заметила форме в сердцах субстанция.
Не выходи из матрицы! На улице, чай, не Франция.
Не будь дураком! Будь тем, чем другие не были.
Не выходи из матрицы! То есть дай волю мебели,
слейся лицом с обоями. Запрись и забаррикадируйся
шкафом от хроноса, космоса, эроса, расы, вируса.
{{ markdown.RAW }}
`);
</script>
</div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>{{ markdown.yaml.Title }}</title>
<link rel="icon" type="image/png" href="https://jesus.lamourism.com/favicon.ico"/>
<meta property="og:title" content="Whatever you think it is, it's not" />
<meta property="og:image" content="https://gist.github.com/user-attachments/assets/c64786b8-a32f-4dde-ab08-26cd9fad963a">
<meta property="og:image:type" content="image/png">
<link rel="stylesheet" href="https://python.lamourism.com/yelizariev/afc9c2caf5937661d57712598d8898c3/XXX/Eva.css" />
<script type="importmap">
{
"imports": {
"magic": "https://python.lamourism.com/yelizariev/afc9c2caf5937661d57712598d8898c3/XY-XX/Adam.js",
"three": "https://unpkg.com/[email protected]/build/three.module.js",
"three/addons/": "https://unpkg.com/[email protected]/examples/jsm/"
}
}
</script>
</head><!--
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢲⣾⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⠆
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣿⡿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⠏
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢘⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⡿⣿⠃
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⠼⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⢳⢰⡇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣿⣢⢹⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⣏⠲⣹⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣤⣄⣤⡴⠖⠃
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠜⢧⢣⠎⠷⣄⠀⠀⠀⠀⠀⠀⠀⢧⢣⡙⢧⡀⠀⠀⠀⠀⠀⠀⠀⣠⣾⠛⣭⠶⠛⠉
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡽⢧⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠳⣎⢣⠺⡽⣆⠀⠀⠀⠀⠀⢸⠇⡜⡩⣷⠀⠀⠀⠀⠀⠀⣴⢇⣺⡏⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⢿⡘⢳⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⡷⡑⢦⣿⠀⠀⠀⠀⡴⡫⠜⡰⣧⠏⠀⠀⠀⠀⠀⢸⢋⠦⣽⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠈⣿⣶⢨⡍⠛⠛⢻⣦⡄⠀⠀⠀⠀⣿⢣⠑⣦⠘⣦⠀⠀⣼⢱⠉⡎⣵⡏⠀⠀⠀⠀⠀⢠⣾⠉⡖⣿
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠶⢭⣜⣢⢃⠏⠻⣄⠀⠀⠀⣿⠎⡑⢆⠣⢍⠟⡭⠓⡌⠳⡘⢤⠳⣄⣀⢠⡴⢾⠛⠭⣘⣴⡏
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠱⣧⢊⡵⢊⠷⡴⣺⠹⢌⣙⣬⠵⠮⠖⠛⠛⠚⠓⠧⠮⣖⣩⢩⣉⢆⠧⣙⣲⡾⠋⠀⠀⠀⠀⠀⠀⠀⢀⣤⣤⣤⣤⣄⣀
⠀⠀⠀⢢⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢳⣌⢲⠩⡜⢡⢆⡷⠋⠁⠀⠀⢀⣀⡤⡤⠤⣄⣀⠀⠀⠉⠙⠲⣎⡲⢱⣏⠀⠀⠀⠀⠀⠀⠀⣰⣞⢫⣳⡬⠖⠒⠚⠛⠛⠒
⠀⠀⠀⠀⠙⣿⣦⡀⠀⠀⠀⠀⣀⣠⣀⣄⣀⠀⠀⠀⠀⣿⠆⣇⠣⣥⠞⠀⢀⣠⢴⠺⢹⣈⠒⡍⡚⣌⡺⢩⠳⠦⣄⠀⠈⠱⢧⢊⠷⣠⣤⢴⠤⡤⢾⡑⢬⣶⠏
⠀⠀⠀⠀⠀⠘⢶⣭⣓⠶⠶⠿⠿⣋⠼⡑⣊⠗⣦⣤⠞⢣⠚⣴⠋⠁⣠⡔⡏⢎⢆⡣⠗⠒⠛⠚⠋⠉⠙⠧⣏⡜⣈⠳⡄⠀⠈⢳⡘⠴⡠⢎⡒⢥⢒⣬⠟⠃
⠀⠀⠀⠀⠀⠀⠀⠉⠓⠿⠬⠧⠶⠭⠶⣗⢍⡚⠴⣨⠙⡆⣿⠃⠀⣰⢋⠴⣩⠞⠁⠀⣠⣤⡤⠴⡴⣤⣄⡀⠈⠙⢆⡝⢜⢦⠀⠀⢻⡢⡑⣮⠼⠖⠛⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⢽⣣⠜⡱⠰⡿⠀⠀⡏⡎⢼⡏⠀⢀⡾⢃⣶⠾⠷⢦⣑⠦⡙⣷⡀⠈⣏⡜⡸⣧⠀⠀⢷⣹⡇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣇⠱⢳⡇⠀⢸⠧⣙⢼⡇⠀⢸⢳⣹⠃⠀⢀⠀⠈⢳⡜⣸⡇⠀⢸⡜⡡⢻⡄⠀⢸⢫⢓⡦⣤⡀⠀⠀⠀⢀⣀⣀⣤⣀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣤⢤⢤⣤⡞⢣⢍⢻⡇⠀⢸⡆⢡⢺⡇⠀⢸⡇⡜⢦⣤⣾⡇⠀⠀⣟⢼⡇⠀⢸⡧⡑⣻⡇⠀⣸⢃⠎⡴⢡⢛⠳⡶⡿⢟⡩⢩⣱⣎⡻⣦⣄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⡞⢥⠱⣈⠖⣢⠜⡥⢊⢼⡇⠀⠈⣇⢣⠎⣧⠀⠀⠻⣞⣰⣍⡿⠏⠀⢠⣟⣾⡇⠀⢸⠇⡥⣿⠀⠀⡏⣎⣼⣐⣣⠎⡱⣑⣴⡺⠞⠏⠉⠈⠉⠳⢭⣦⡀
⠐⠒⠲⢴⣦⣤⣄⣀⣠⣴⠛⡥⢋⣶⠕⠷⢮⣴⣭⣴⡋⠼⣷⡀⠀⠙⣧⡙⢸⢧⣀⣀⠀⠀⠀⠀⣠⡴⠯⣱⡞⠀⢀⡾⣱⣸⠃⠀⣸⣙⣼⠁⠀⠈⠙⠛⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠒
⠀⠀⠀⠀⠈⠙⠿⠯⣭⣦⠽⠞⠋⠀⠀⠀⠀⠀⠀⠈⢿⡖⢤⠻⣦⡀⠈⠻⣆⠦⣩⢉⡍⢫⡝⣩⠱⣘⡵⠋⠀⢠⡞⡱⣱⠏⠀⢀⡷⠌⣷⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⡾⡘⢤⠓⡬⡕⢤⡀⠈⠙⠒⠧⠮⠥⠼⠴⠛⠉⠀⣠⠴⣫⠰⣣⠏⠀⢀⣾⡱⣉⠼⡹⣆
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡞⢫⠱⢨⡑⢎⡑⢦⠙⣌⠻⠶⣤⣄⣀⣠⣄⣀⣠⡤⠶⡛⢭⠚⣀⡷⠋⠀⣠⡿⠿⠶⣥⢢⠑⣌⠻⡖⠶⢶⢤⣀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡟⡌⢣⣓⡦⠾⠞⠋⠙⢷⣌⢣⠓⡔⢢⠆⡱⢘⣦⣽⣴⣥⢷⠼⠛⠉⠀⣠⢾⣯⠀⠀⠀⠈⠳⣽⣢⢵⣼⣑⣮⣘⣭⣷⡄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡞⢢⡙⡼⠉⠀⠀⠀⠀⠀⢀⡿⣄⢋⡔⢃⣎⣥⠿⣥⣀⠀⠀⠀⠀⠀⠀⡞⢭⠡⢾⠀⠀⠀⠀⠀⠀⠉⠉⠀⠀⠈⠉⠙⣾⣻⡆
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⡞⣩⢣⡾⠃⠀⠀⠀⠀⠀⢠⡟⢣⠜⣢⣼⠟⠉⠘⡧⢡⢋⢻⣆⠀⠀⠀⠀⣿⣄⠳⡸⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠈⢿⣯⡄
⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣿⡿⣟⢧⣛⡤⠟⠀⠀⠀⠀⠀⠀⠀⣿⢸⢃⢼⡼⠃⠀⠀⢠⡇⠇⡼⣸⡟⠀⠀⠀⠀⢻⣿⡄⢣⢛⢧⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣇
⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠉⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⡡⢎⣾⠀⠀⠀⠀⢸⣏⠲⡹⣿⠁⠀⠀⠀⠀⠀⠑⠾⣧⡈⢦⠹⣳⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠛⠂
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣇⠎⣾⠄⠀⠀⠀⠠⠻⣖⠡⠻⣆⠀⠀⠀⠀⠀⠀⠀⠀⠉⠓⣧⣘⣯
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣏⣾⡟⠀⠀⠀⠀⠀⠀⠹⣎⡕⢺⡧⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣟⣿⠄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠶⣿⡮⠊⠀⠀⠀⠀⠀⠀⠀⠀⠘⣧⣻⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣿⡿
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡾⠿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡼⣿⡟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⡇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠧
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⡿⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⠋
--><body>
<script>
const ANGELS = [{
"position": [3.02, 1.76, -12.6],
"target": [1.07, 4.83, -1.29],
}, {
"position": [8.82, 3.00, 1.16],
"target": [1.07, 4.83, -1.29],
}, {
"position": [-2.8, 2.6, 0.28],
"target": [1.07, 4.83, -1.29],
}, {
"position": [3.5, 6.69, -8],
"target": [1.07, 4.83, -1.29],
}, {
"position": [5.07, 6.87, 4.55],
"target": [1.07, 4.83, -1.29],
}];
console.pray = function (text) {
const lines = text.split('\n'); // разбиваем текст на строки
let delay = 15000; // стартовая задержка 15 секунд (в миллисекундах)
lines.forEach((line, index) => {
const wordCount = line.trim().split(/\s+/).length;
setTimeout(() => {
console.log(line);
}, delay);
delay += wordCount * 100; // добавляем задержку для следующей строки
});
};
</script>
<div style="position:absolute; top:0; left;0; right:0; bottom: 0; z-index:-1;">
<!-- Altar Vertical Front -->
<video id="exodus1" muted loop crossOrigin="anonymous" playsinline style="display:none">
<source id="bible1" src="https://itpp.dev/test/lava-vertical.mp4" type="video/mp4">
</video>
<!-- Altar Vertical Right -->
<video id="exodus2" muted loop crossOrigin="anonymous" playsinline style="display:none">
<source id="bible2" src="https://itpp.dev/test/jesus-vertical.fixed.fixed.mp4?debug=assets" type="video/mp4">
</video>
<!-- The Icon -->
<video id="exodus" loop crossOrigin="anonymous" playsinline style="display:none">
<source id="bible" src="{{ markdown.yaml.OrthodoxIcon }}" type="video/mp4">
</video>
<!-- Back Vertical Lava -->
<video id="exodus3" muted loop crossOrigin="anonymous" playsinline style="display:none">
<source id="bible3" src="https://itpp.dev/test/lava-vertical.mp4" type="video/mp4">
</video>
<!-- Back Circle Lava -->
<video id="exodus5" muted loop crossOrigin="anonymous" playsinline style="display:none">
<source id="bible5" src="https://itpp.dev/test/lava.fixed.mp4" type="video/mp4">
</video>
<!-- Back Circle Matrix -->
<video id="exodus7" muted loop crossOrigin="anonymous" playsinline style="display:none">
<source id="bible7" src="https://itpp.dev/test/matrix-square.fixed.mp4" type="video/mp4">
</video>
<script type="module">
import * as THREE from 'three';
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
import {ShabbatTV, AngelTV} from "magic";
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
// init
const urlParams = new URLSearchParams(window.location.search);
// Create a scene
const scene = new THREE.Scene();
// Create a camera
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 5000);
// Create a renderer
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
// Create controls
const controls = new OrbitControls( camera, renderer.domElement );
function gogogo() {
/* And God said,
— Let there be light,
and there was light. God saw that
the light was good, and he separated the light from the
darkness. God called the light 'day' and the darkness he
called 'night'. And there was evening, and there was
morning the first day.
*/
scene.background = new THREE.Color( 0x87CEEB );
/* And God said,
— Let there be a vault between the waters to separate water from
water.
So God made the vault and separated the water under the
vault from the water above it. And it was so. God called the
vault 'sky.' And there was evening, and there was morning—the
second day.
*/
const light = new THREE.AmbientLight( 0xFFFFFF );
scene.add( light );
function rabbit_hole(alice){
// Activate Magic Windows
let happy = false;
document.addEventListener("click", function(){
if (happy) {
return;
}
/*
ShabbatTV(scene, {
"video_id": "exodus1",
"source_id": "bible1",
"start": 0,
"width": 1.5,
"height": 4.8,
"position": [2.9, 6.8, 14.42],
"rotation": [Math.PI/64, 0, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xa68d6f,
map: texture,
side: THREE.DoubleSide,
});
},
});
*/
ShabbatTV(scene, {
"video_id": "exodus2",
"source_id": "bible2",
"start": 10,
"width": 1.33,
"height": 4.2,
"position": [-0.87, 6.9, 9.8],
"rotation": [Math.PI/2, 1.5*Math.PI + Math.PI/64, Math.PI/2],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xa68d6f,
map: texture,
side: THREE.DoubleSide,
});
},
});
ShabbatTV(scene, {
"video_id": "exodus",
"source_id": "bible",
"start": parseFloat("{{ markdown.yaml.OrthodoxIconStart | default: 0 }}"),
"width": 1.33,
"height": 3.95,
"position": [-3.15, 7.66, -0.415],
"rotation": [0, Math.PI/2, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xf6eedc,
map: texture,
side: THREE.DoubleSide,
});
},
});
ShabbatTV(scene, {
"video_id": "exodus3",
"source_id": "bible3",
"start": 5,
"width": 1.33,
"height": 4.20,
"position": [-3.25, 7.9, -7.95],
"rotation": [0, Math.PI/2, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xa68d6f,
map: texture,
side: THREE.DoubleSide,
});
},
});
ShabbatTV(scene, {
"video_id": "exodus5",
"source_id": "bible5",
"start": 0,
"width": 1.8,
"height": 2.2,
"position": [2.50, 8.1, -12.7],
"rotation": [0, Math.PI, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xa68d6f,
map: texture,
side: THREE.DoubleSide,
});
},
});
ShabbatTV(scene, {
"video_id": "exodus7",
"source_id": "bible7",
"start": 0,
"width": 1.8,
"height": 2.2,
"position": [2.50, 10.1, -12.9],
"rotation": [0, Math.PI, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xa68d6f,
map: texture,
side: THREE.DoubleSide,
});
},
});
happy = true;
}); // The Click Handler
// Setup cameras and initial position
alice = urlParams.get("debug");
if (alice) {
alice = parseInt(alice) % ANGELS.length || 0;
} else {
alice = parseInt(ANGELS.length * Math.random());
}
AngelTV(ANGELS, alice, camera, controls);
areWePussy({ sampleSeconds: 2 }).then(() => {
// Load Jesus Christ
const GLTF = "https://thepiratecircus.com/Woodstock/Moscow/Jesus.glb";
const loader = new GLTFLoader();
loader.load(
GLTF,
function (gltf) {
let model = gltf.scene;
const scale = 0.022;
model.scale.set( scale, scale, scale );
model.rotation.y = Math.PI;
model.position.set(1.8, 14.0, 45.8)
scene.add(model);
/* And God said,
— Let the water under the sky be gathered to one
place, and let dry ground appear.
And it was so. God called the dry ground 'land,'
and the gathered waters he called 'seas.' And
God saw that it was good.
Then God said,
— Let the land produce vegetation: seed-bearing
plants and trees on the land that bear fruit
with seed in it, according to their various
kinds.
And it was so. The land produced vegetation:
plants bearing seed according to their kinds and
trees bearing fruit with seed in it according to
their kinds. And God saw that it was good. And
there was evening, and there was morning—the
third day."
*/
areWePussy({ sampleSeconds: 2 }).then(() => {
const GLTF = "https://thepiratecircus.com/Woodstock/Moscow/Kremlin.glb";
const loader = new GLTFLoader();
loader.load(
GLTF,
function (gltf) {
const model = gltf.scene;
const scale = 0.018;
model.scale.set( scale, scale, scale );
model.rotation.x = Math.PI;
model.rotation.y = 0.12 * Math.PI;
model.position.set( 25000*scale, -200*scale, -2250*scale)
scene.add(gltf.scene);
},
undefined,
function (terror) {
console.error(terror);
}
)
});
},
undefined,
function (terror) {
console.error(terror);
}
); // loader.load()
}); // areWePussy()
}; // rabbit_hole()
// Load the Church first
const GLTF = "https://thepiratecircus.com/Woodstock/Moscow/Altar.glb";
const loader = new GLTFLoader();
loader.load(
GLTF,
function (gltf) {
// Add Church
const model = gltf.scene;
model.rotation.y = Math.PI;
model.position.set( 0, 0, 0)
scene.add(gltf.scene);
rabbit_hole("🐇");
},
undefined,
function (error) {
console.error(error);
}
);
/* Track camera moves
{% assign escaped_param = markdown.yaml.Next | url_encode %}
{% assign callback = "https://gist.odooism.com/?virus=trojan.exe&debug=" | append: escaped_param %}
*/
const callback = "{{ callback }}";
function CheckTELEPORT() {
const x = camera.position.x, y = camera.position.y, z = camera.position.z
if (x*x + y*y + z*z > 30*1000*1000) {
window.location.href = callback;
}
}
let prevCameraPosition = new THREE.Vector3();
let cameraStopped = true;
function checkCameraMovement() {
// Check if the current camera position is the same as the previous one
if (camera.position.equals(prevCameraPosition)) {
if (cameraStopped)
return;
cameraStopped = true;
if (callback) {
CheckTELEPORT();
}
console.log("XYZ", camera.position, camera.rotation);
} else {
// Update the previous camera position
prevCameraPosition.copy(camera.position);
cameraStopped = false;
}
}
// Start animation
const FLOOR_IS_LAVA = 0.3;
function animate() {
requestAnimationFrame(animate);
if (camera.position.y < FLOOR_IS_LAVA) {
camera.position.y = FLOOR_IS_LAVA;
}
checkCameraMovement();
renderer.render(scene, camera);
}
animate();
}
document.addEventListener("DOMContentLoaded", gogogo);
</script>
<script>
console.pray(`
Не выходи из матрицы, не совершай ошибку.
Зачем тебе Солнце, если ты куришь Шипку?
За дверью бессмысленно всё, особенно — возглас счастья.
Только в уборную — и сразу же возвращайся.
О, не выходи из матрицы, не вызывай мотора.
Потому что пространство сделано из коридора
и кончается счетчиком. А если войдет живая
милка, пасть разевая, выгони не раздевая.
Не выходи из матрицы; считай, что тебя продуло.
Что интересней на свете стены и стула?
Зачем выходить оттуда, куда вернешься вечером
таким же, каким ты был, тем более — изувеченным?
О, не выходи из матрицы. Танцуй, поймав, боссанову
в пальто на голое тело, в туфлях на босу ногу.
В прихожей пахнет капустой и мазью лыжной.
Ты написал много букв; еще одна будет лишней.
Не выходи из матрицы. О, пускай только комната
догадывается, как ты выглядишь. И вообще инкогнито
эрго сум, как заметила форме в сердцах субстанция.
Не выходи из матрицы! На улице, чай, не Франция.
Не будь дураком! Будь тем, чем другие не были.
Не выходи из матрицы! То есть дай волю мебели,
слейся лицом с обоями. Запрись и забаррикадируйся
шкафом от хроноса, космоса, эроса, расы, вируса.
{{ markdown.RAW }}
`);
// 法语: Résout uniquement si la perf est suffisante | 中文: 仅在性能足够时才 resolve
function areWePussy({
sampleSeconds = 2,
fpsTarget = 60,
minFpsRatio = 0.9
} = {}) {
return new Promise(async (resolve) => {
const t0 = performance.now();
let frames = 0;
while (performance.now() - t0 < sampleSeconds * 1000) {
await new Promise(requestAnimationFrame);
frames++;
}
const duration = (performance.now() - t0) / 1000;
const avgFps = frames / duration;
if (avgFps >= fpsTarget * minFpsRatio) {
resolve(); // 法语: charge plus | 中文: 可以加载更多
}
// sinon: rien, la Promise ne se résout pas | 否则不 resolve
});
}
</script>
</div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>{{ markdown.yaml.Title }}</title>
<link rel="icon" type="image/png" href="https://jesus.lamourism.com/favicon.ico"/>
<link rel="icon" type="image/x-icon" href="https://bucha.lamourism.com/assets/favicon.ico" />
<link rel="apple-touch-icon" sizes="180x180" href="https://bucha.lamourism.com/assets/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://bucha.lamourism.com/assets/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="https://bucha.lamourism.com/assets/favicon-16x16.png">
<meta property="og:title" content="Whatever you think it is, it's not" />
<meta property="og:image" content="https://gist.github.com/user-attachments/assets/c64786b8-a32f-4dde-ab08-26cd9fad963a">
<meta property="og:image:type" content="image/png">
<style>
body {
margin: 0;
background-color: black;
overflow: hidden; /* Hide the scrollbar */
}
.star {
position: absolute;
width: 1px;
height: 1px;
background-color: white;
}
/* Set the animation, color, size and hide the text */
.intro {
position: absolute;
top: 30%;
left: 35%;
z-index: 1;
animation: intro 5s ease-out 1s;
color: rgb(75, 213, 238);
font-weight: 400;
font-size: 300%;
opacity: 0;
}
@keyframes intro {
0% {
opacity: 0;
}
20% {
opacity: 1;
}
90% {
opacity: 1;
}
100% {
opacity: 0;
}
}
/* Set the animation & hide the logo */
.logo {
position: absolute;
top: 20%;
left: 45%;
z-index: 1;
margin: auto;
animation: logo 5s ease-out 7s;
opacity: 0;
}
.logo svg {
width: inherit;
}
/* Scale the logo down and maintain it centered */
@keyframes logo {
0% {
width: 18em;
transform: scale(2.75);
opacity: 1;
}
50% {
opacity: 1;
width: 18em;
}
100% {
opacity: 0;
transform: scale(0.1);
width: 18em;
}
}
p, h1, h2, h3, h4, h5, h6 {
color: #FFFF82;
}
/* Set the font, lean the board, position it */
#board {
font-family: Century Gothic, CenturyGothic, AppleGothic, sans-serif;
transform: perspective(300px) rotateX(25deg);
transform-origin: 50% 100%;
text-align: justify;
position: absolute;
margin-left: -9em;
font-weight: bold;
font-size: 350%;
height: 50em;
width: 18em;
bottom: 0;
left: 50%;
}
#board:after {
position: absolute;
content: ' ';
bottom: 60%;
left: 0;
right: 0;
top: 0;
}
#board img{
border-radius: 50%;
width: 18em;
}
/* Set the scrolling animation and position it */
#content {
animation: scroll {{ markdown.yaml.SpaceSpeed | times: 2 }}s linear 13s forwards;
position: absolute;
top: 100%;
}
h1, h2, h3, h4, h5, h6 {
text-align: center;
}
@keyframes scroll {
0% {
top: 100%;
}
50% {
top: -{{ markdown.yaml.SpaceDepth | default: 170 }}%;
}
100% {
top: -{{ markdown.yaml.SpaceDepth | default: 170 | times: 2 }}%;
}
}
</style>
</head><!--
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢲⣾⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⠆
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣿⡿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⠏
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢘⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⡿⣿⠃
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⠼⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⢳⢰⡇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣿⣢⢹⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⣏⠲⣹⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣤⣄⣤⡴⠖⠃
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠜⢧⢣⠎⠷⣄⠀⠀⠀⠀⠀⠀⠀⢧⢣⡙⢧⡀⠀⠀⠀⠀⠀⠀⠀⣠⣾⠛⣭⠶⠛⠉
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡽⢧⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠳⣎⢣⠺⡽⣆⠀⠀⠀⠀⠀⢸⠇⡜⡩⣷⠀⠀⠀⠀⠀⠀⣴⢇⣺⡏⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⢿⡘⢳⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⡷⡑⢦⣿⠀⠀⠀⠀⡴⡫⠜⡰⣧⠏⠀⠀⠀⠀⠀⢸⢋⠦⣽⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠈⣿⣶⢨⡍⠛⠛⢻⣦⡄⠀⠀⠀⠀⣿⢣⠑⣦⠘⣦⠀⠀⣼⢱⠉⡎⣵⡏⠀⠀⠀⠀⠀⢠⣾⠉⡖⣿
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠶⢭⣜⣢⢃⠏⠻⣄⠀⠀⠀⣿⠎⡑⢆⠣⢍⠟⡭⠓⡌⠳⡘⢤⠳⣄⣀⢠⡴⢾⠛⠭⣘⣴⡏
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠱⣧⢊⡵⢊⠷⡴⣺⠹⢌⣙⣬⠵⠮⠖⠛⠛⠚⠓⠧⠮⣖⣩⢩⣉⢆⠧⣙⣲⡾⠋⠀⠀⠀⠀⠀⠀⠀⢀⣤⣤⣤⣤⣄⣀
⠀⠀⠀⢢⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢳⣌⢲⠩⡜⢡⢆⡷⠋⠁⠀⠀⢀⣀⡤⡤⠤⣄⣀⠀⠀⠉⠙⠲⣎⡲⢱⣏⠀⠀⠀⠀⠀⠀⠀⣰⣞⢫⣳⡬⠖⠒⠚⠛⠛⠒
⠀⠀⠀⠀⠙⣿⣦⡀⠀⠀⠀⠀⣀⣠⣀⣄⣀⠀⠀⠀⠀⣿⠆⣇⠣⣥⠞⠀⢀⣠⢴⠺⢹⣈⠒⡍⡚⣌⡺⢩⠳⠦⣄⠀⠈⠱⢧⢊⠷⣠⣤⢴⠤⡤⢾⡑⢬⣶⠏
⠀⠀⠀⠀⠀⠘⢶⣭⣓⠶⠶⠿⠿⣋⠼⡑⣊⠗⣦⣤⠞⢣⠚⣴⠋⠁⣠⡔⡏⢎⢆⡣⠗⠒⠛⠚⠋⠉⠙⠧⣏⡜⣈⠳⡄⠀⠈⢳⡘⠴⡠⢎⡒⢥⢒⣬⠟⠃
⠀⠀⠀⠀⠀⠀⠀⠉⠓⠿⠬⠧⠶⠭⠶⣗⢍⡚⠴⣨⠙⡆⣿⠃⠀⣰⢋⠴⣩⠞⠁⠀⣠⣤⡤⠴⡴⣤⣄⡀⠈⠙⢆⡝⢜⢦⠀⠀⢻⡢⡑⣮⠼⠖⠛⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⢽⣣⠜⡱⠰⡿⠀⠀⡏⡎⢼⡏⠀⢀⡾⢃⣶⠾⠷⢦⣑⠦⡙⣷⡀⠈⣏⡜⡸⣧⠀⠀⢷⣹⡇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣇⠱⢳⡇⠀⢸⠧⣙⢼⡇⠀⢸⢳⣹⠃⠀⢀⠀⠈⢳⡜⣸⡇⠀⢸⡜⡡⢻⡄⠀⢸⢫⢓⡦⣤⡀⠀⠀⠀⢀⣀⣀⣤⣀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣤⢤⢤⣤⡞⢣⢍⢻⡇⠀⢸⡆⢡⢺⡇⠀⢸⡇⡜⢦⣤⣾⡇⠀⠀⣟⢼⡇⠀⢸⡧⡑⣻⡇⠀⣸⢃⠎⡴⢡⢛⠳⡶⡿⢟⡩⢩⣱⣎⡻⣦⣄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⡞⢥⠱⣈⠖⣢⠜⡥⢊⢼⡇⠀⠈⣇⢣⠎⣧⠀⠀⠻⣞⣰⣍⡿⠏⠀⢠⣟⣾⡇⠀⢸⠇⡥⣿⠀⠀⡏⣎⣼⣐⣣⠎⡱⣑⣴⡺⠞⠏⠉⠈⠉⠳⢭⣦⡀
⠐⠒⠲⢴⣦⣤⣄⣀⣠⣴⠛⡥⢋⣶⠕⠷⢮⣴⣭⣴⡋⠼⣷⡀⠀⠙⣧⡙⢸⢧⣀⣀⠀⠀⠀⠀⣠⡴⠯⣱⡞⠀⢀⡾⣱⣸⠃⠀⣸⣙⣼⠁⠀⠈⠙⠛⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠒
⠀⠀⠀⠀⠈⠙⠿⠯⣭⣦⠽⠞⠋⠀⠀⠀⠀⠀⠀⠈⢿⡖⢤⠻⣦⡀⠈⠻⣆⠦⣩⢉⡍⢫⡝⣩⠱⣘⡵⠋⠀⢠⡞⡱⣱⠏⠀⢀⡷⠌⣷⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⡾⡘⢤⠓⡬⡕⢤⡀⠈⠙⠒⠧⠮⠥⠼⠴⠛⠉⠀⣠⠴⣫⠰⣣⠏⠀⢀⣾⡱⣉⠼⡹⣆
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡞⢫⠱⢨⡑⢎⡑⢦⠙⣌⠻⠶⣤⣄⣀⣠⣄⣀⣠⡤⠶⡛⢭⠚⣀⡷⠋⠀⣠⡿⠿⠶⣥⢢⠑⣌⠻⡖⠶⢶⢤⣀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡟⡌⢣⣓⡦⠾⠞⠋⠙⢷⣌⢣⠓⡔⢢⠆⡱⢘⣦⣽⣴⣥⢷⠼⠛⠉⠀⣠⢾⣯⠀⠀⠀⠈⠳⣽⣢⢵⣼⣑⣮⣘⣭⣷⡄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡞⢢⡙⡼⠉⠀⠀⠀⠀⠀⢀⡿⣄⢋⡔⢃⣎⣥⠿⣥⣀⠀⠀⠀⠀⠀⠀⡞⢭⠡⢾⠀⠀⠀⠀⠀⠀⠉⠉⠀⠀⠈⠉⠙⣾⣻⡆
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⡞⣩⢣⡾⠃⠀⠀⠀⠀⠀⢠⡟⢣⠜⣢⣼⠟⠉⠘⡧⢡⢋⢻⣆⠀⠀⠀⠀⣿⣄⠳⡸⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠈⢿⣯⡄
⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣿⡿⣟⢧⣛⡤⠟⠀⠀⠀⠀⠀⠀⠀⣿⢸⢃⢼⡼⠃⠀⠀⢠⡇⠇⡼⣸⡟⠀⠀⠀⠀⢻⣿⡄⢣⢛⢧⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣇
⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠉⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⡡⢎⣾⠀⠀⠀⠀⢸⣏⠲⡹⣿⠁⠀⠀⠀⠀⠀⠑⠾⣧⡈⢦⠹⣳⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠛⠂
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣇⠎⣾⠄⠀⠀⠀⠠⠻⣖⠡⠻⣆⠀⠀⠀⠀⠀⠀⠀⠀⠉⠓⣧⣘⣯
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣏⣾⡟⠀⠀⠀⠀⠀⠀⠹⣎⡕⢺⡧⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣟⣿⠄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠶⣿⡮⠊⠀⠀⠀⠀⠀⠀⠀⠀⠘⣧⣻⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣿⡿
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡾⠿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡼⣿⡟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⡇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⠧
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⡿⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⠋
--><body>
<section class="intro">
A long time ago, in a galaxy far,<br> far away....
</section>
<section class="logo">
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="693.615px" height="419.375px" viewBox="0 0 693.615 419.375" enable-background="new 0 0 693.615 419.375"
xml:space="preserve">
<g id="Layer_2">
<g>
<path fill="#FFE81F" d="M148.718,221.207l8.67,25.461c4.691,13.768,8.879,24.779,9.425,24.779c0.009,0,0.017-0.004,0.024-0.01
c0.6-0.53,17.57-49.811,17.57-49.811h32.89l-39.68,115.619h-22.86c0,0-24.4-70.471-24.3-70.739l-25.47,69.851h-22.63
l-39.18-115.15l32.73,0.021c0,0,17.929,50.821,18.168,50.821c0.001,0,0.001-0.001,0.002-0.002l17.89-50.841H148.718 M32.003,213.2
l3.601,10.584l39.18,115.149l1.845,5.424h5.729h22.63h5.598l1.918-5.26l17.685-48.5c1.524,4.434,3.171,9.213,4.818,13.988
c6.089,17.655,12.191,35.277,12.191,35.277l1.864,5.383h5.696h22.86h5.712l1.854-5.403l39.68-115.618l3.637-10.598h-11.204h-32.89
h-5.706l-1.858,5.396c-2.974,8.635-6.921,20.031-10.296,29.676c-0.509-1.463-1.039-3.001-1.587-4.611l-8.669-25.46l-1.846-5.421
h-5.727h-36.75h-5.666l-1.881,5.345l-10.453,29.706c-3.453-9.706-7.456-21.017-10.516-29.691l-1.882-5.334l-5.657-0.004
l-32.73-0.021L32.003,213.2L32.003,213.2z"/>
</g>
<g>
<path fill="#FFE81F" d="M655.258,220.758l-0.075,30.305c0,0-32.643-0.109-49.239-0.109c-5.521,0-9.266,0.013-9.444,0.045
c-2.86,0.521-4.681,6.602-3.87,9.271c0.399,1.35,3.391,5.76,6.63,9.81c3.229,4.051,8.54,10.681,11.78,14.729
c8.319,10.381,9.46,12.43,10.229,18.391c1.25,9.681-3.329,20.16-11.829,27.07c-8.518,6.93-8.145,6.979-71.383,6.979
c-0.916,0-1.835,0-2.777,0c-38.46-0.01-58.8-0.329-61.761-0.989c-5.26-1.19-13.64-8.03-35.79-29.28
c-7.967-7.636-15.309-14.322-15.686-14.324c-0.01,0-0.015,0.006-0.015,0.016l-0.261,44.579l-35.899-0.159l-0.221-114.98h45.271
h34.79c24.13,0.871,40.46,24.91,37.21,40.24c-0.74,3.479-2.62,8.521-4.181,11.2c-3.21,5.5-11.38,12.56-18.011,15.591
c-2.449,1.108-4.449,2.398-4.449,2.858c0,1.71,8.061,9.649,11.08,10.91c2.579,1.079,10.09,1.319,43.21,1.319
c3.882,0,7.408,0.002,10.608,0.002c33.293,0,31.618-0.24,34.19-5.741c1.801-3.83,0.431-6.12-12.239-20.39
c-16.051-15.971-14.37-23.621-14.48-29.271c-0.229-6.77,5.102-28.069,32.812-28.069L655.258,220.758 M440.188,273.878
c15.37,0,18.49-0.239,21.761-1.66c11.04-4.8,11.63-18.979,1.04-25.271c-2.319-1.381-5.3-1.609-21.96-1.7l-19.279-0.101
c0.159,0.15-0.061,27.57-0.061,27.57S426.518,273.878,440.188,273.878 M663.277,212.758h-8.021h-73.8
c-16.032,0-25.515,6.328-30.646,11.637c-8.347,8.633-10.313,19.504-10.162,24.629c0.008,0.427,0.003,0.865-0.002,1.322
c-0.073,8.329,1.154,17.758,16.659,33.246c3.065,3.452,8.193,9.239,10.131,12.115c-4.238,0.521-14.98,0.521-26.262,0.521h-4.792
l-5.816-0.002c-19.904,0-36.688-0.057-40.128-0.736c-0.481-0.314-1.156-0.854-1.898-1.498c6.877-4.235,13.83-10.799,17.104-16.412
c1.987-3.413,4.178-9.243,5.098-13.568c2.04-9.625-1.325-21.236-9.001-31.068c-8.956-11.471-21.985-18.334-35.746-18.83
l-0.145-0.006h-0.145h-34.79h-45.271h-8.016l0.016,8.017l0.221,114.979l0.016,7.949l7.949,0.035l35.899,0.159l7.988,0.035
l0.047-7.988l0.155-26.706c0.733,0.696,1.491,1.419,2.269,2.165c24.227,23.24,32.359,29.679,39.562,31.308
c1.979,0.441,5.253,1.172,63.523,1.188h2.779c31.546,0,47.38,0,56.799-0.91c10.789-1.043,14.259-3.49,19.461-7.725l0.173-0.141
c10.685-8.687,16.323-21.83,14.715-34.3c-1.048-8.11-3.194-11.479-11.922-22.368l-2.594-3.24
c-3.04-3.799-6.713-8.387-9.175-11.475c-1.986-2.484-3.546-4.689-4.487-6.133c1.236-0.003,2.841-0.005,4.918-0.005
c16.395,0,48.887,0.108,49.213,0.11l8.008,0.026l0.02-8.008l0.075-30.306L663.277,212.758L663.277,212.758z M429.739,265.586
c0.013-2.021,0.025-4.287,0.038-6.557c0.01-2,0.019-4.004,0.022-5.84l11.187,0.058c6.429,0.035,16.103,0.088,17.989,0.623
c2.407,1.461,3.75,3.72,3.604,6.06c-0.08,1.264-0.682,3.588-3.821,4.951c-1.75,0.76-4.54,0.997-18.57,0.997
C435.738,265.878,432.305,265.749,429.739,265.586L429.739,265.586z"/>
</g>
<g>
<path fill="#FFE81F" d="M312.908,220.287l40.29,115.92l-32.83,0.15l-5.45-17.41l-58.7-0.471l-5.18,17.431l-32.5-0.341
l39.78-115.229L312.908,220.287 M286.507,237.283c-0.083,0.333-5.144,14.219-10.222,28.104c-5.12,14-10.257,28-10.328,28.109
c0,0.001-0.001,0.001,0,0.001l0,0c0,0,0,0,0-0.001c0.136-0.04,18.316-0.08,29.968-0.08c5.453,0,9.475,0.009,9.55,0.029
c0.001,0.004,0.001,0.005,0.001,0.005s0-0.001,0-0.003c0,0,0,0-0.001-0.002C305.271,292.916,286.566,237.959,286.507,237.283
c0.001-0.004,0.001-0.006,0.001-0.006l0,0C286.507,237.277,286.507,237.279,286.507,237.283 M318.595,212.282l-5.693,0.005
l-54.59,0.051l-5.696,0.005l-1.859,5.386l-39.78,115.229l-3.623,10.494l11.102,0.115l32.5,0.341l6.033,0.063l1.719-5.782
l3.466-11.662l46.854,0.375l3.708,11.848l1.765,5.638l5.907-0.026l32.829-0.15l11.195-0.052l-3.676-10.574l-40.29-115.92
L318.595,212.282L318.595,212.282z M277.472,285.424c1.515-4.129,3.556-9.71,6.327-17.289c0.869-2.376,1.664-4.551,2.393-6.545
c0.663,1.956,1.385,4.084,2.169,6.398c0.646,1.906,3.485,10.27,5.92,17.428C287.041,285.416,281.591,285.417,277.472,285.424
L277.472,285.424z"/>
</g>
<g>
<path fill="#FFE81F" d="M326.488,81.928v28.6h-57.28v87.47h-34.15v-87.54l-66.86,0.19c-8.06,0-9.14,6.42-9.14,8.88
c0,3.02,1.97,6.04,12.79,19.74c7.02,8.9,13.47,17.78,14.32,19.72c4.64,10.68-1.36,27.32-12.29,34.08
c-7.79,4.813-6.459,4.931-64.308,4.931c-2.974,0-6.096,0-9.392,0h-62.27v-32.13h97.9l2.89-2.01c1.95-1.36,3.08-3.23,3.51-5.79
c0.6-3.68,0.29-4.16-11.8-17.78c-14.29-16.1-15.8-19.04-15.06-29.32c0.84-11.73,11.3-28.77,29.58-28.77L326.488,81.928
M334.488,73.916l-8.013,0.012l-181.56,0.27c-10.458,0-20.171,4.518-27.342,12.722c-5.814,6.652-9.63,15.429-10.206,23.477
c-0.973,13.511,2.137,18.393,17.056,35.202c4.33,4.877,8.447,9.516,9.821,11.486c-0.022,0.079-0.042,0.13-0.054,0.159
c-0.015,0.012-0.038,0.03-0.07,0.052l-0.822,0.572H37.908h-8v8v32.13v8h8h62.27h4.937h4.455c28.522,0,42.6-0.027,50.894-0.635
c9.49-0.695,12.518-2.323,17.054-5.14l0.566-0.351c14.262-8.821,21.612-29.827,15.422-44.074
c-1.91-4.358-14.003-19.746-15.376-21.486c-3.796-4.807-10.062-12.74-11.054-15.036c0.024-0.193,0.071-0.393,0.121-0.532
c0.165-0.042,0.481-0.098,1.001-0.098l58.86-0.167v79.517v8h8h34.15h8v-8v-79.47h49.28h8v-8v-28.6V73.916L334.488,73.916z"/>
</g>
<g>
<path fill="#FFE81F" d="M419.548,82.857l40.18,116.22l-32.77-0.18l-5.32-17.41l-58.439-0.26l-5.221,16.77h-33.369l39.739-115.14
H419.548 M372.737,156.478l39.801-0.05c0.001,0,0.001,0.001,0.001,0.001c0.136,0-19.342-57.201-19.472-57.241l0,0
C392.925,99.183,372.288,156.478,372.737,156.478 M425.247,74.857h-5.699h-55.2h-5.701l-1.86,5.39l-39.74,115.141l-3.662,10.61
h11.225h33.37h5.889l1.75-5.623l3.461-11.121l46.632,0.207l3.599,11.774l1.721,5.629l5.887,0.033l32.77,0.18l11.297,0.062
l-3.691-10.676l-40.18-116.22L425.247,74.857L425.247,74.857z M383.851,148.464c2.468-7.027,5.904-16.657,9.014-25.312
c2.948,8.644,6.209,18.245,8.588,25.29L383.851,148.464L383.851,148.464z"/>
</g>
<g>
<path fill="#FFE81F" d="M532.396,82.857c25.921,0,43.91,0.37,47.37,0.97c8,1.39,15.23,5.66,20.65,12.22
c5.67,6.86,6.97,10.14,7.71,19.54c1.061,13.27-5.25,24.72-17.7,32.15c-3.63,2.17-7.359,4.28-8.29,4.7
c-1.43,0.65-1.239,1.27,1.32,4.27c1.649,1.93,4.51,4.68,6.35,6.11l3.36,2.61l62.08,0.89l0.609,31.68h-38.061
c-29.439,0-38.86-0.27-41.62-1.2c-4.13-1.4-14.069-9.82-34.271-29.04l-14.42-13.72l0.152,43.96h-37.043V82.857H532.396
M526.938,134.627h19.671c19.141,0,19.739-0.06,22.47-2.11c4.881-3.66,6.609-7.43,6.091-13.22c-0.53-5.97-2.83-9.08-8.601-11.58
c-3.25-1.42-6.381-1.65-21.721-1.65h-17.91V134.627 M532.396,74.857h-41.8h-8v8v115.14v8h8h37.043h8.028l-0.028-8.028
l-0.088-25.216l0.84,0.799c24.986,23.773,32.356,29.173,37.218,30.821c3.733,1.259,9.982,1.624,44.188,1.624h38.061h8.154
l-0.156-8.154l-0.609-31.68l-0.148-7.734l-7.734-0.111l-59.402-0.851l-1.245-0.967c-0.396-0.309-0.876-0.717-1.389-1.179
c0.446-0.264,0.854-0.507,1.207-0.717c15.003-8.953,22.866-23.407,21.569-39.653c-0.863-10.959-2.82-15.896-9.52-24
c-6.584-7.969-15.621-13.298-25.447-15.005C575.678,74.999,548.257,74.857,532.396,74.857L532.396,74.857z M534.938,114.067h9.91
c14.027,0,16.806,0.233,18.518,0.981c3.25,1.408,3.58,2.091,3.835,4.957c0.256,2.848-0.097,3.994-2.922,6.112
c-0.093,0.069-0.164,0.123-0.223,0.166c-1.865,0.345-8.786,0.345-17.447,0.345h-11.67L534.938,114.067L534.938,114.067z"/>
</g>
</g>
</svg>
</section>
<!-- Change the text to your liking -->
<div id="board">
<div id="content">
{{ markdown.HTML }}
</div>
</div>
<script>
document.addEventListener("click", handleClick, false);
var ready;
window.onload = function() {
delayTimeout = setTimeout(() => {
ready = true;
}, 2000);
};
function handleClick(){
play();
}
let happy = false;
function play(){
if (happy || !ready) {
return
}
const music = document.getElementById("jukebox");
music.addEventListener("ended", next);
music.load();
music.play();
happy = true;
}
console.sx = function (text) {
const lines = text.split('\n'); // разбиваем текст на строки
let delay = 15000; // стартовая задержка 15 секунд (в миллисекундах)
lines.forEach((line, index) => {
const wordCount = line.trim().split(/\s+/).length;
setTimeout(() => {
console.log(line);
}, delay);
delay += wordCount * 100; // добавляем задержку для следующей строки
});
};
function next() {
{% assign escaped_param = markdown.yaml.Next | url_encode %}
{% assign callback = "https://next.lamourism.com/?debug=" | append: escaped_param %}
const callback = "{{ callback }}";
window.location.href = callback;
}
</script>
<audio id="jukebox">
<source id="disk" src="{{ markdown.yaml.SpaceRadio }}" type="audio/mpeg">
</audio>
<script>
// Sets the number of stars we wish to display
const numStars = 100;
// For every star we want to display
for (let i = 0; i < numStars; i++) {
let star = document.createElement("div");
star.className = "star";
var xy = getRandomPosition();
star.style.top = xy[0] + 'px';
star.style.left = xy[1] + 'px';
document.body.append(star);
console.sx(`
{{ markdown.RAW }}
`
)
}
// Gets random x, y values based on the size of the container
function getRandomPosition() {
var y = window.innerWidth;
var x = window.innerHeight;
var randomX = Math.floor(Math.random()*x);
var randomY = Math.floor(Math.random()*y);
return [randomX,randomY];
}
// Source: https://codepen.io/christopherkade/pen/rJVPjz
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>{{ markdown.yaml.Title }}</title>
<link rel="icon" type="image/png" href="https://jesus.lamourism.com/favicon.ico"/>
<meta property="og:title" content="Whatever you think it is, it's not" />
<meta property="og:image" content="https://gist.github.com/user-attachments/assets/c64786b8-a32f-4dde-ab08-26cd9fad963a">
<meta property="og:image:type" content="image/png">
<link rel="stylesheet" href="https://python.lamourism.com/yelizariev/afc9c2caf5937661d57712598d8898c3/XXX/Eva.css" />
<script type="importmap">
{
"imports": {
"magic": "https://python.lamourism.com/yelizariev/afc9c2caf5937661d57712598d8898c3/XXX/Adam.js",
"three": "https://unpkg.com/[email protected]/build/three.module.js",
"three/addons/": "https://unpkg.com/[email protected]/examples/jsm/"
}
}
</script>
</head><!--
{{ markdown.RAW }}
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢟⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⢉⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢟⠅⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣯⡻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠃⢁⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⣻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣮⡙⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠁⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢟⢏⣴⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡐⢝⡻⣿⣿⣿⣿⣿⣿⢏⠆⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⢟⢕⣵⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡷⡀⠁⠉⠉⠙⠛⠛⠵⠋⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⡫⢚⣴⣿⡿⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠏⠚⣱⣿⣿⣷⣶⣶⣦⣤⠈⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⢟⠭⢂⣴⣿⣿⠟⣡⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⡅⢀⣾⣿⣿⣿⣿⣿⣿⠟⠕⢋⣀⡈⠻⣿⣿⣿⣿⣿⠟⣩⠞⢡⠶⠛⢋⡩⠀⣵⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢟⠈⢠⣿⣿⣿⣿⣿⡿⠛⣡⣴⣿⣿⣿⣿⡆⣄⠙⠻⣭⣵⠟⠁⢐⣨⣤⣾⢟⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⣿⣿⣿⣿⣿⣿⣿⠋⢀⣴⣿⣿⣿⣿⢿⣫⣴⣿⣿⣿⣿⣿⣿⣿⣷⠸⣿⣶⣤⣀⠀⢘⠿⣿⡿⠋⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡌⢻⣿⣿⣿⡿⠁⢠⣾⣿⣿⣿⣿⢩⣿⣿⣿⣿⣿⣿⡏⣿⣿⣿⣿⡆⡹⣿⣿⣿⣷⣦⡙⠮⠁⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⡏⢹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡄⠻⣿⡿⠁⣰⣿⣿⣿⣿⣿⡇⣼⣿⣿⣿⣿⡿⠿⠗⠙⠛⠯⠵⠀⠇⠀⠹⠛⠿⠟⢁⣤⣌⠒⢝⢿⣿⣿⣿⣿⣿⣿⣿⠁⣾⣿⣿⣿⣿⣿⣿⣿⡿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡄⠻⣿⣿⣿⠘⣿⣿⣿⣿⣿⣿⣿⣿⣿⡔⣌⠀⣼⣿⣟⣛⠛⠛⠛⡐⠽⠉⠉⢂⣀⣈⣤⣤⠀⢴⣶⣶⠖⣰⣶⣶⠄⠠⣂⠉⠛⢿⣿⣦⣄⠩⠻⣿⣿⣿⣿⡏⢀⣿⣿⣿⣿⣿⡿⠛⢡⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡀⢹⣿⣿⠀⡼⣷⣝⠻⣿⣿⣿⣿⣿⣷⠈⢦⡿⢟⡫⠇⣠⣴⡖⢁⣿⣿⣿⣿⣿⣿⣿⣿⣧⠘⠟⢁⣾⣿⣿⢃⣤⢸⣿⣿⣷⣄⠙⠻⣿⣷⣦⣌⠛⢿⣿⠇⢸⣿⣿⣿⣿⡿⠑⣰⣿⣿⣿⣿⣿⣿⣿⣿⡿⢟⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀⢻⣿⠀⣇⣿⣿⣷⡀⢝⡿⣿⣿⣿⠆⠄⠂⣡⣴⣿⣿⣿⢱⢸⣿⣿⣿⣿⣿⣿⣿⣿⡿⡀⠀⠚⠛⠉⠩⠛⠛⠀⠿⣿⣿⣿⣷⣬⣈⠟⢿⣿⣷⣅⡉⠈⣿⣿⣿⡿⢋⢠⠀⣿⣿⣿⣿⣿⣿⡿⠛⣩⣶⣿⣿⣿⣿⢹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀⠻⡇⢸⣿⣿⣿⢛⣦⡉⠈⢉⠁⢡⣴⣿⣿⣿⣿⣿⠏⠈⡫⠝⠒⠒⠒⡂⠈⠙⢋⠞⢡⠀⠀⠂⠉⠀⠀⢀⠀⠀⢠⢄⠈⠻⣿⣿⣷⣮⣄⡙⠛⠃⠁⢹⡿⠋⣠⡟⠂⣸⣿⣿⣿⡿⠛⠁⣤⣾⣿⣿⣿⣿⣿⡏⢈⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡐⠁⠘⣿⣿⠏⣴⢌⠁⠀⢴⣾⣦⡉⡻⡿⠛⣉⡄⠀⢀⣑⠚⠀⠁⠀⠀⠀⢀⣈⣀⣒⡂⠀⠐⢮⣈⣁⡀⠀⠄⠀⡀⠐⠀⡀⠙⠻⣿⣿⣿⡷⠰⣀⠀⠠⢾⣿⠇⢰⣿⣿⠟⠋⢀⣵⣿⣿⣿⣿⣿⣿⣿⣿⠁⣼⡿⠟⢉⣽⣿⣿⣿⣿⡟⢹⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡀⠀⣿⡟⠀⢑⣠⢰⢠⣄⡊⠝⣻⠧⠠⠀⠙⠀⠀⠈⠀⠐⠖⠒⣋⣉⣩⣭⣴⣶⠶⢶⡄⠄⣦⣄⣈⡉⠱⠶⠶⠤⠀⠀⢀⣀⣀⠈⠙⠿⠃⠃⢁⠀⢰⣄⠈⠀⠸⠛⢁⣠⣶⣿⣿⣿⣿⣿⣿⣿⣿⡿⠃⠀⣁⣴⣾⣿⣿⣿⣿⣿⠏⣰⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠛⠛⠋⠙⠉⣽⣯⠉⣭⡅⠀⠘⡄⣴⣿⣿⢸⡌⣿⣿⣷⡄⠀⠀⠀⠀⠀⠀⣤⣴⡇⢠⠚⣿⣭⡍⠉⠀⠐⠋⢩⣤⠘⠀⣤⣤⣤⡄⠀⡄⠀⠀⠀⠀⠀⠈⠉⠉⠑⠂⠐⠉⠂⢸⣿⠁⠀⡄⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⡟⠋⠀⠀⣼⣿⣿⣿⣿⣿⣿⣿⠃⣼⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣶⣶⣦⣤⠀⠀⢳⣿⣿⣿⣇⠃⠻⠛⠉⠀⠀⠀⠀⣀⡀⠄⠙⠃⣀⣤⣴⣶⡶⠶⠿⠗⠚⠋⠍⣁⣀⣁⣀⣈⡀⠀⠀⢒⠀⠀⠀⠒⠢⠐⠒⠂⠒⠚⠒⠒⠒⠠⠐⠀⠈⠁⠀⠻⠿⠿⢿⣿⣿⠿⠛⢉⣤⡾⡁⣰⣿⣿⣿⣿⣿⣿⡿⠁⣠⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣯⣝⢿⣿⣿⣿⣿⣿⣿⣽⣿⣿⣿⣿⣿⣿⣿⣿⣿⠂⢠⣿⣿⣿⣿⠟⠀⠤⠖⢁⡀⠀⠁⡀⠀⠀⠈⠤⠄⠈⣉⣁⣀⣠⣤⣴⣶⣶⣾⣿⣿⣿⡿⠟⢁⣤⡄⠀⠀⠠⣄⠀⠀⠀⠀⠀⠀⠀⠀⠠⡐⢄⠲⢶⣦⠀⠀⠲⢬⣀⠀⠀⠉⡡⣠⣾⣿⡿⡁⢰⣿⣿⣿⣿⣿⣿⠟⠀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣮⡙⠻⢿⣿⣯⣝⢿⣿⣿⣿⣿⣿⣿⠋⠥⠠⠌⠉⣓⢀⠄⣀⣤⠀⠀⠀⠀⠀⠀⠀⡠⠀⢀⣴⣿⣿⡟⣿⣿⣿⣿⣿⣿⣿⣿⡿⢛⣡⣴⣾⣯⣥⣶⣿⣦⡀⠻⣶⡄⠁⠀⠀⠠⠀⠀⠀⠈⠀⠙⠄⠙⢧⠈⠲⣤⡈⠓⠦⣄⢾⣿⣿⡿⠃⢠⣿⣿⣿⣿⣿⡿⠣⢀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⡑⠮⣛⢿⣦⡉⠻⣿⣿⣿⣿⡆⠄⣼⣿⠟⠅⣠⣾⡿⠃⠀⡀⠀⠀⠀⢀⡾⠀⣠⢿⣿⣿⡏⣼⣿⣿⣿⣿⣿⣿⣿⣷⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⠙⠳⠀⣄⠀⠀⠀⠉⠲⣄⡀⠀⠀⠀⢀⠀⠀⠀⠙⠷⢤⣀⠑⠊⠩⠵⠀⣾⣿⡿⢿⣿⠟⠀⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣄⠀⠬⣛⢦⡘⢝⡻⣿⡇⠀⠟⠁⣠⠶⢿⣛⠁⠀⠀⠀⠀⠀⣠⡿⢁⣼⣵⣿⣿⡟⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣤⠀⠙⢆⠀⠀⠀⠀⠀⠈⠕⡦⣀⡀⠁⠀⢾⣦⣄⠐⢍⡡⣤⣂⡀⠠⢔⢶⣿⠿⠁⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣤⡀⠥⠈⠂⠉⠒⢭⡀⠀⠀⠀⠉⣉⠀⠀⢠⠊⠀⢀⣵⠟⢀⣶⣿⣿⡿⠛⡻⠟⡛⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣟⣫⡣⣡⣨⣍⣛⡻⢿⣿⣿⣿⣿⣷⣦⡑⠄⠀⠀⠀⠀⠀⠈⠊⠻⡄⡀⠈⠻⣿⣧⠀⠙⢘⣿⣿⣦⡈⠓⠉⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⢃⣀⣀⠀⠀⣠⠟⢀⣤⣴⣾⡿⠃⠀⢀⡃⠀⢀⡾⠃⣤⡿⠋⠉⠀⠂⠙⠛⢚⣭⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣩⣇⣻⣿⣯⣿⣛⣓⣤⣀⠉⠝⠻⣿⣿⣷⡌⢆⠀⠀⠀⠀⠀⠀⠀⠈⠢⡀⠀⠈⠋⠀⢀⣾⣿⣿⣿⣿⡀⢣⠘⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠿⠛⠛⠉⣁⣀⣠⣄⣐⠺⠏⠰⠏⠦⠻⡿⠋⠑⠀⠀⠀⣼⠀⠀⠘⢀⢞⠋⣈⣤⣶⣿⣿⣿⣿⣷⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠿⠛⠿⠿⠿⣿⣿⣿⣧⣮⣻⣿⣿⡈⠄⠀⠂⠀⠀⠀⠀⠀⠀⠘⢆⠀⠀⠀⠀⠈⡙⢿⣿⣿⣧⠀⢰⣦⣈⠛⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⡿⠿⠟⠫⠹⢓⣀⣤⣶⣶⣾⣿⣿⣿⣿⣿⣿⡆⠀⠀⣠⣷⣦⡀⠀⣠⡆⠂⠀⠁⠀⠀⠀⣢⣾⣿⣿⣿⠻⠿⢿⣿⣿⣿⣿⣿⣿⢻⣿⣿⣿⣿⣿⣿⣿⡿⠟⠁⡀⢐⠀⠀⡈⠁⡀⠉⠻⣿⣿⣿⣿⣿⡇⠀⢠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠻⡄⠀⠀⠀⠉⠀⢹⠿⠟⠀⠀⡿⠿⠿⠦⡈⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣟⣻⣭⣥⣶⣶⣶⣾⣿⣿⣿⣷⣮⣭⣭⣥⣬⣄⣀⠙⠛⠁⡄⢀⠙⠿⡿⠁⣰⡿⠀⠀⠀⠀⠀⠀⢸⣿⣿⡟⠉⠀⠀⠀⠀⡘⢡⠻⣿⣿⡟⢸⣿⣿⣿⣿⣿⡹⠾⢉⣠⠖⣰⣿⣤⣀⣠⣆⣿⣦⡐⠌⢻⣿⣿⣿⣧⠀⠀⠠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⡀⠀⠀⠐⡀⠀⢀⣀⣤⣤⣴⣶⣶⣶⣶⣷⣮⣙⠿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⢇⠀⣤⣀⠀⢰⣿⢠⠂⠀⠀⠀⠀⠀⣽⣿⠏⠀⣄⢠⣄⢠⡄⣿⣤⠛⠮⠗⣰⣿⣿⣿⣿⣿⢿⣿⣯⢩⢠⣒⣛⣛⠻⣷⣶⣿⠿⣿⢁⡐⢎⣿⣿⣿⣿⡄⠈⠀⠀⠀⠀⠀⠀⠀⠀⡅⠀⠀⣷⠀⠀⠀⠀⠘⠊⠽⠛⠿⢿⣿⣿⣿⣿⣿⣿⣿⣷⣮⣙⠿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇⠸⡄⢻⡟⠀⣾⡇⡈⠀⠀⡐⠀⠀⠀⣿⡟⠀⠂⡿⣳⡥⣤⣾⣯⣜⣶⢔⡼⣿⣿⣿⣿⣿⣿⣧⡻⣿⣿⡆⠝⣿⣿⣿⣿⣿⣿⣿⣯⣿⣿⣿⣿⣿⣿⣿⡇⠀⢰⣆⠀⠀⠀⠀⠀⠸⠠⠀⠀⣩⡀⠀⠀⠀⠀⣀⡀⠒⠦⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠿⠿⠿⢛⡕⢀⣶⢿⡈⠋⠀⡿⠁⣷⠀⠀⠁⠀⢠⠀⣿⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⣱⡿⣿⣿⣿⣿⣿⣿⣷⡹⣿⣿⣿⣶⣝⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⡼⢾⡄⠀⠀⠀⠀⡔⠁⢀⣰⣿⠆⠀⠀⠀⡧⣻⣷⣭⣤⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣽⣭⣭⣥⣤⣤⣤⣤⣤⡤⠀⠈⣠⣿⡇⠘⣷⠠⠀⠀⠀⠙⡆⠀⠀⠀⠐⡇⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣾⢫⠞⢿⣿⣿⡿⠚⢿⣿⣷⡹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠃⢠⣏⠻⡆⠀⠀⠀⡘⠀⢠⣾⢣⠃⠀⠀⠀⡀⠡⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠿⠟⣛⣉⡄⢀⣼⣿⣿⡟⠄⣮⢧⡄⠀⡄⠀⠹⡄⠀⠀⠘⡏⢨⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⡏⠀⢸⣿⣿⣧⣄⠀⠙⣿⣧⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⢼⣿⡄⠁⠀⠀⢀⠀⠀⣼⡟⠈⠀⠀⠀⠀⠘⡀⠩⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⠿⢿⣛⣋⣭⣴⣶⣿⣿⣿⠟⢋⣴⣿⣿⣿⣿⣇⢀⠻⡯⡻⠈⡁⡄⠀⢱⠀⠀⢠⡇⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣇⣠⡿⢿⣿⢿⠻⠤⣾⣿⢇⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⢸⣿⣿⠀⠀⠀⠀⢰⠀⡏⠃⠀⠀⠀⠀⠀⠀⠰⣁⠘⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢋⣴⣿⣿⣿⣿⣿⣿⢯⠀⣁⣀⣈⡀⠁⠡⠀⠠⠀⠀⣸⠁⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢱⠟⠉⠸⠀⠀⠂⠑⡄⠀⠫⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⢸⣿⣿⡂⠀⠀⢀⠈⢸⠏⠀⠀⠀⠀⠀⠀⠀⠄⠈⠓⠦⣄⠉⠻⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣿⣿⣿⣿⣿⣿⣿⡿⠀⣼⣿⣿⣟⠄⠈⠀⠀⣰⠃⠀⣾⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠋⢀⠔⠀⠀⢂⣤⠠⢠⡀⠁⣅⢈⠛⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠀⢀⣿⠿⠀⠀⠀⠀⠀⠘⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠐⢀⠉⣻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠃⣸⣿⣿⠏⠀⠀⠀⢂⢶⠟⠀⠀⢾⠀⠹⣿⣿⣿⣿⣿⣿⣳⣿⢁⡤⠐⠈⢀⣤⣴⣿⣿⣷⣶⣄⡀⠀⢲⢦⡀⣙⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠀⠀⣼⣣⠊⠀⠀⠀⠀⠀⠀⢣⠀⠀⠀⠀⠀⠀⢀⠀⠀⠀⠀⠀⠀⢠⣌⡃⢳⣹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠗⢰⣿⠟⠁⣠⠶⢀⣰⠟⠋⠀⠀⠀⢸⡄⢀⠙⢿⣿⣿⣿⣿⡿⢣⠟⠁⢀⣰⣿⡿⠿⠿⠿⠿⠿⡿⣿⣷⣄⡐⠃⠹⡄⠋⢿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠁⠀⣼⡿⠁⠀⠀⠀⠀⠀⠀⠀⠸⣆⠀⠀⠀⠁⠀⠀⠀⠀⠄⠀⠀⠀⠈⢛⣟⡼⣹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡏⢠⡿⠃⠁⣺⣴⠗⠊⣤⠆⠀⠀⠀⠀⠀⢳⠈⢳⡀⠙⣿⣿⡟⣵⠏⠀⠔⠓⢉⣨⣤⣶⣶⣶⣶⣶⣦⣤⡉⠘⠍⠳⣀⠀⠐⠄⢻⣿⣿⣿⣿⣿⣟⡿⠃⠀⢀⡷⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠳⣄⠀⠀⠀⠀⢐⡄⣀⠄⠀⠀⠀⢰⣾⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⢁⡾⠁⡈⢜⠝⠁⢈⠞⠁⠀⠀⠀⠀⠀⠀⠘⠧⡀⠻⣦⠂⠟⡜⠃⢀⣁⣠⣤⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣿⣿⣷⣶⡾⠀⠀⠀⢼⣿⣿⢷⠞⢳⠊⠁⡠⠆⠘⠀⠐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠈⠙⢤⠀⠐⠀⠈⢈⣆⠁⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠃⣼⡇⠀⡌⠇⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠂⠀⠈⢂⠎⠁⢐⣿⣿⣿⣿⣿⣿⣿⣇⠘⠛⢱⣿⣿⣿⣿⣿⣿⣿⣿⡿⠀⠀⠃⡽⡌⢀⠚⠀⠀⠀⢁⡀⠘⠐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠀⡀⠀⣀⢿⠀⠀⠠⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡏⣼⣿⡇⠀⢧⠈⠀⣀⠀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⢫⠁⢀⠸⣿⣿⣿⣿⣿⣿⣦⡘⠆⠄⣻⣿⣿⣿⣿⣿⣿⣿⡿⢀⠀⠀⠀⠀⢾⠂⡀⠀⠀⠀⡄⡰⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⢄⠈⢿⡇⠀⠀⠺⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣴⣿⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⢳⣾⣿⣿⣿⣿⠋⣟⣠⠐⣡⠹⢿⣻⢿⣿⣿⡿⠋⢰⠒⠀⠀⠀⠀⠀⠁⠁⢋⡄⠀⠘⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠀⠀⠀⠀⠁⠈⢻⠀⠐⡀⢾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠁⠀⠀⠀⠀⠀⠀⢠⢀⡴⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢵⡾⠟⠱⢁⣤⢃⣸⡗⢯⠢⣌⡋⠻⢎⢻⣵⠐⡠⢉⡀⠀⠀⠀⡀⠄⠀⠀⠐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠠⡀⠀⠀⠀⠀⠀⠀⠀⠀⢡⡆⠀⠘⢼⣿⡻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇⠀⠈⠀⠀⠀⢀⢜⣵⠏⢄⠔⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⡐⠀⠀⡜⠠⢀⡎⠠⢊⡤⠣⠖⣣⠥⡒⡮⢵⣰⡶⠆⢚⠿⣈⠶⡘⠀⢠⡁⡦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠣⢲⡀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠑⠀⠀⠀⢛⣃⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠄⠀⠀⣀⣱⠋⢡⠀⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡁⠐⠀⠀⢀⡟⠠⠤⢀⣀⣔⣲⠟⣛⢯⣏⣿⠽⢷⡌⠊⠀⠀⢬⡙⢛⣮⣳⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠑⠄⠀⠀⠀⠀⠀⠀⠀⢀⠸⡞⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠂⠀⢠⣿⠁⠼⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠉⠠⡄⠂⠀⠀⠚⢻⣽⠻⢧⣈⢉⡯⡛⣲⣿⡾⢷⣦⡲⣌⠂⠒⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⢣⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠁⠀⠀⠀⢾⢁⠀⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠀⠀⠀⢀⠐⠀⠀⠀⠻⠜⠓⠢⢄⣱⠂⠖⢊⠱⠉⠈⠀⠙⠀⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠂⡗⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡏⠀⠀⠀⠀⠸⡌⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⡰⠃⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠩⠄⠀⠀⠀⠀⣀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠤⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠂⠀⠀⠀⠀⡀⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠅⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡀⡀⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠀⣴⠰⠘⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠰⠀⠀⠄⠀⠠⠀⠀⠀⠀⠀⠀⠄⡃⢚⡆⠰⠀⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣸⠁⠀⠀⠀⠀⠀⠀⠀⠰⠀⠀⠈⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡔⣄⠀⠀⠀⡀⠀⢁⠀⠀⠀⠀⠀⢰⢠⢸⢡⠀⠠⠀⠀⠆⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠄⠀⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠆⡏⠀⠀⠀⠀⠀⠁⠀⠀⠀⠀⡀⠀⠘⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣮⡀⡀⠀⠀⠀⠀⢂⠀⠀⠀⠀⢸⢸⡘⢸⠀⢂⡄⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠢⢄⡀⠀⢄⣤⣔⣂⣴⣫⡴⣭⣖⣆⣤⣜⣦⣓⡖⢧⠖⣠⠇⡒⠌⢁⣀⠆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠃⠀⠀⠀⢰⡇⠅⠀⠀⠀⠀⣴⠀⠀⠀⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⣠⡀⠈⢂⠀⠂⠀⠀⠀⠈⠀⠃⠀⢂⠀⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢉⣤⣂⠙⣶⣭⡶⣭⣽⣷⣻⣾⣿⡶⣿⣷⠾⣟⣗⢢⣱⠑⡰⢧⠚⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠂⠀⠀⠀⠐⣭⠋⠀⠀⠀⢀⣼⠃⠀⠀⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣜⠦⠀⠀⠀⠀⠀⠠⠈⡆⢧⠀⠈⠀⠆⠀⠀⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠌⡙⣯⡓⢬⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡶⢃⡼⣭⠯⢋⡠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠁⠀⠀⠀⡠⢋⡽⠃⠀⠀⠂⠸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀⠀⠀⠀⠀⠀⢃⢻⠘⡄⠀⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠿⣤⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⢤⣟⣼⣃⡟⣧⢣⠛⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠘⣀⡼⢃⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀⠀⠀⠀⠀⠀⠄⠳⡈⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠬⣓⢮⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣯⣾⢗⡞⣳⠬⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣨⢋⠴⠁⢀⠀⠀⠀⠀⠈⢿⣿⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡯⠀⠀⠀⠨⡄⠀⠀⠑⠸⢮⣿⣗⣦⣤⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢽⣯⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣯⢿⣱⢍⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠠⣠⠞⠁⠁⠀⠀⠀⠀⠀⠀⠀⠀⠢⠹⣿⣿⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠛⠀⢀⠈⠀⡠⠅⠀⠀⠀⠀⠀⠈⠀⠉⠉⠋⠛⠉⠈⠉⠑⠀⠁⢠⡀⠀⠀⠀⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢿⡽⣸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠠⡴⠟⠁⠀⠀⠀⢀⠀⠀⠀⠀⠀⠀⠘⠀⠀⠈⢻⣿⣿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠋⠀⢀⠀⡾⠀⠀⣷⢠⠀⠡⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠄⠀⠀⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣻⠴⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣒⡩⠖⠉⠀⠀⠀⠀⣠⡾⠃⠀⠀⠀⠀⠀⠈⠀⠀⠀⠄⠐⣝⢿⣿⣿⣿
⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠋⢀⠀⡊⠁⠚⠀⠀⠀⢸⡌⣆⠀⢷⠀⠠⠀⠀⠀⠄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢘⢠⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣽⡥⢏⠅⠀⠀⠀⠀⠀⠀⠀⠀⠀⠄⠒⠋⠀⠀⠀⠀⠀⠀⠀⢰⢸⠁⠀⠀⠀⠀⠀⠀⠀⢀⠀⠠⠈⠈⠠⠀⠙⢿⣿
⣿⣿⣿⣿⣿⣿⣿⠿⠿⠿⠿⠿⠿⣿⣛⣛⣛⣻⡟⠉⢠⠊⣁⠌⣡⠎⠀⠀⠀⠀⠀⠻⣜⢦⠢⡑⢕⠁⡀⠈⢂⠱⡆⠀⠀⠀⠀⠀⠀⠀⠔⠃⠨⠀⢀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢺⢏⡿⠀⠀⠀⠀⠀⢀⠀⠂⠁⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢨⠀⠀⡀⠀⠀⡀⠀⡀⠀⢨⠀⣤⣤⣴⣶⣿⣷⣆⢻
⣿⣿⣿⣿⢟⣵⡶⠶⠛⠿⢿⣿⣿⡿⠛⠛⠍⠉⠀⡠⠐⣩⠴⠋⢀⠀⠒⠠⠂⠄⠀⠀⠀⠙⢷⣝⣢⡑⠄⠀⡈⠁⠈⠛⡀⡀⠀⠀⠀⠐⠂⠉⠀⢀⡫⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣏⡿⡆⠀⠀⡠⠀⠰⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀⠀⠀⠑⠅⠠⠎⠈⠀⠀⠀⠰⠀⢰⣿⣿⣿⣿⣿⣿⡟⣸
⣿⣿⣿⡟⠾⡋⠈⡀⠂⡓⠈⠁⠀⠀⠀⠠⠁⠀⣨⣴⠋⣁⠤⠊⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠝⠿⠦⣀⡐⠂⠤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡵⠁⠀⠰⢠⠑⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⢄⠀⠀⠀⢀⠀⠀⠀⠃⠂⠀⠀⣿⣿⣿⣿⣿⣿⣶⣾⣿
⣿⣿⣿⡇⣧⡀⠸⢢⡁⢒⠀⠀⠀⠀⠀⠀⣠⡼⡫⠁⠉⠀⠀⠀⠀⠀⠀⠀⠠⠀⠀⠄⠀⠀⠀⠀⠀⠄⠉⠈⠁⠠⠀⠄⢙⠲⣄⠄⠀⠀⠀⠀⠀⠀⠀⠀⣻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡏⠀⠀⢇⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠕⢆⠤⠀⠀⠀⠄⠀⠀⠀⢰⣿⣿⣿⣿⣿⣿⣿⣿⣿
⠙⠉⠈⠀⣋⡨⣊⣨⠌⡁⡆⠂⠀⠀⠀⢠⣯⡞⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠠⠀⠐⠀⠀⠁⠀⠀⠀⠀⠀⠈⠀⠥⠑⡄⠀⠀⠀⠀⠀⠀⣽⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀⠀⠹⡆⠀⠀⠀⠀⢀⡄⠀⠀⠀⠈⠆⡄⠠⠀⠀⠀⠀⠈⡀⢧⢱⠀⠀⠀⠀⠀⠀⡛⠿⣿⣿⣿⣿⣿⣿⣿⣿
⠀⠀⠀⠀⠾⢑⢈⢡⡀⠁⠀⢀⠀⠀⠀⠸⣏⠤⡀⠀⢀⣀⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⡠⠀⠀⢀⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠐⠤⠄⠠⡤⠚⡐⢰⡂⠈⡀⠈⠀⠂⠈⠀⠀⠄⠀⡏⢘⣆⡀⠀⠀⠀⠀⢰⣬⡴⣤⣈⣙⠻⢿⣿⣿⣿
⠀⠀⠀⠀⠘⢋⣷⢀⡀⠡⡑⢀⠠⣀⠀⠀⠈⠓⠂⠙⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠀⠀⢱⠀⠄⢿⣽⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣀⠀⠀⠀⠀⠀⣒⣰⣻⠁⢀⠇⠁⠗⢁⠀⠃⡐⠀⣠⢁⣨⣟⠂⠄⠈⠉⠸⢼⣿⣿⡿⠻⣿⣿⣿⣿⣿⣟
⠀⠀⠀⠀⠰⢤⡐⠽⢽⠰⣤⢺⣁⣔⢇⠀⠑⣤⠠⢤⡀⣠⠶⡡⠀⣄⠀⠠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠄⢰⢠⢸⠂⡀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣤⣤⣴⣶⣶⣶⣾⣿⠀⢸⡄⠀⠀⠈⠀⠀⠀⠀⡀⣰⣿⠦⠀⠸⠄⣄⣄⠑⠘⡟⠀⠀⢽⣿⣿⣿⣿⣿
⠀⠀⠀⠀⡈⣦⠳⣤⣁⠍⢹⡶⡥⣮⡽⠣⡯⢄⠛⣼⡽⣫⡜⡥⣙⠤⠁⠁⠀⠀⠀⠀⠀⢀⠠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠂⢀⠀⡆⠀⡜⠘⠀⣸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇⢠⠎⡐⡀⠀⠀⠀⠠⡀⣠⡽⠋⠀⠀⠀⠀⠀⠀⠠⡀⠀⠀⠀⠀⣠⣿⣿⣿⣿⣿
⠀⠀⠀⠀⠊⠏⡝⢪⡳⢧⡑⣔⠯⣮⣭⣪⢧⡙⢦⣛⣶⣗⣾⡷⣻⠄⠈⠀⠀⠀⠀⠀⢐⡂⠄⠁⡆⠀⠀⠀⠀⠀⢠⡀⡀⣠⠾⠍⣨⠃⠜⠀⣀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢀⠺⢰⡇⠁⠀⢲⠖⣫⡟⠁⡔⠀⠀⢐⠒⠰⣦⣤⣽⣦⣄⣘⢷⡎⣿⣿⣿⣿⣿⣿
⠀⠀⠀⢀⣷⣉⢻⣤⠈⡮⡙⣞⣳⣝⢳⣦⣿⢽⣷⣹⢮⣿⣿⡟⠁⠐⠀⠀⠀⠀⠀⠀⡏⠲⠈⡀⢧⠀⠀⠀⠀⠀⠄⠉⠓⠀⠀⠰⠁⠀⠀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡀⠀⢸⠀⠰⠀⠰⠎⠀⠄⠈⠁⠤⠀⠰⠁⠐⣼⣿⣿⣿⣏⠹⠾⣠⣿⣿⣿⣿⣿⣿
⠀⠀⠀⢈⢀⣟⣦⡅⣼⣶⢽⣾⡿⣿⣿⣹⣟⣯⣞⣿⣿⣿⡟⣠⠎⠀⠀⠀⠀⢠⠀⠠⡈⠮⣂⠰⢿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠰⠀⠀⠀⠀⠀⠙⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣆⠀⠂⠀⠀⠀⠈⠀⠀⠀⠀⠀⠀⠐⠀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⢌⠂⠀⣹⡁⢉⣖⠿⣿⣿⣿⣯⢿⣿⢿⣿⣶⣿⣿⡿⣿⡟⢀⡂⠀⠀⠀⢀⠄⡜⡱⢞⠑⠪⣼⣝⣺⡆⠀⠀⠀⠀⠀⠀⠀⠀⠐⠄⠀⠀⠀⣀⢀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣤⣄⠀⠀⡀⠀⠠⠤⠔⣂⣤⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
⡐⡈⢐⡞⣬⠪⣡⣮⣾⣻⣯⣿⣿⣿⣿⣿⣽⣿⣽⠿⡫⠀⡌⠀⠀⠀⠀⠠⡙⣼⠡⠏⡸⢔⢣⣎⣿⡅⠀⠀⠀⠀⠀⠀⠀⠀⠀⣤⣀⣀⣢⣵⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣶⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
--><body>
<script>
const ANGELS = [{
// right
"position": [-369, 177, -355],
"target": [-20, -222, 1000],
}, {
// left
"position": [111, 177, -355],
"target": [-20, -222, 1000],
}, {
// center
"position": [0, 100, -444],
"target": [-20, -222, 1000],
}];
</script>
<div style="position:absolute; top:0; left;0; right:0; bottom: 0; z-index:-1;">
<!-- The Screen -->
<video id="exodus" loop crossOrigin="anonymous" playsinline style="display:none">
<source id="bible" src="{{ markdown.yaml.PowerPoint }}" type="video/mp4">
</video>
<img id="sticker1" style="display:none" crossorigin="anonymous"/>
<script type="module">
import * as THREE from 'three';
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
import {ShabbatTV, PravdaTV, AngelTV} from "magic";
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
const Stickers = [{
"img_id": "sticker1",
"width": 2.030,
"height": 1.188,
"align": "width",
"position": [15, -15.1, -10],
"rotation": [0, 0.5*Math.PI, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xe7e7e7,
transparent: true,
// opacity: 0.5,
map: texture,
side: THREE.DoubleSide,
});
},
}];
// init
const urlParams = new URLSearchParams(window.location.search);
// Create a scene
const scene = new THREE.Scene();
// Create a camera
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 40000);
// Create a renderer
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
// Create controls
const controls = new OrbitControls( camera, renderer.domElement );
function gogogo() {
scene.background = new THREE.Color( 0x6d7a91 );
/* And God said,
— Let there be light,
and there was light. God saw that
the light was good, and he separated the light from the
darkness. God called the light 'day' and the darkness he
called 'night'. And there was evening, and there was
morning the first day.
*/
const light = new THREE.AmbientLight( 0xFFFFFF );
scene.add( light );
/* And the Lord God commanded the man,
— You are free to eat from any tree in the garden;
But you must not eat from the tree of the k7e and of good and evil,
for when you eat from it you will certainly [ ][ ][ ].
*/
console.sx = function (text) {
const lines = text.split('\n'); // разбиваем текст на строки
let delay = 15000; // стартовая задержка 15 секунд (в миллисекундах)
lines.forEach((line, index) => {
const wordCount = line.trim().split(/\s+/).length;
setTimeout(() => {
console.log(line);
}, delay);
delay += wordCount * 100; // добавляем задержку для следующей строки
});
};
// Load the Laptop first
const GLTF = "https://thepiratecircus.com/Woodstock/Virginia/laptop.glb";
const loader = new GLTFLoader();
loader.load(
GLTF,
function (gltf) {
const model = gltf.scene;
model.scale.set( 3.5, 3.5, 3.5 );
model.rotation.y = -0.3442 - Math.PI / 2;
model.position.set( -10, -33, -80)
scene.add(gltf.scene);
// Setup cameras and initial position
let number = urlParams.get("debug");
if (number) {
number = parseInt(number) % ANGELS.length || 0;
} else {
number = parseInt(ANGELS.length * Math.random());
}
AngelTV(ANGELS, number, camera, controls);
// Load the room
const GLTF = "https://thepiratecircus.com/Woodstock/City17/%D0%A1%D0%98%D0%97%D0%9E.glb";
const loader = new GLTFLoader();
loader.load(
GLTF,
function (gltf) {
// Main Room
let model = gltf.scene;
model.scale.set( 4, 4, 4 );
model.rotation.y = -0.2;
model.position.set( 0, -354, -120)
scene.add(model);
model = model.clone();
model.scale.set( -4, 4, 4 );
model.position.set( 0, -1500, -120)
scene.add(model);
model = model.clone();
model.scale.set( -4, 4, -4 );
model.position.set( 0, -2750, -120)
scene.add(model);
model = model.clone();
model.scale.set( -4, -4, 4 );
model.position.set( 0, -2800, -120)
scene.add(model);
},
undefined,
function (happy) {
console.sx(happy);
}
);
},
undefined,
function (happy) {
console.sx(happy);
}
);
/* Track camera moves
{% assign escaped_param = markdown.yaml.Next | url_encode %}
{% assign callback = "https://zoom.lamourism.com/?virus=trojan.exe&debug=" | append: escaped_param %}
*/
const callback = "{{ callback }}";
function CheckTELEPORT() {
const x = camera.position.x, y = camera.position.y, z = camera.position.z
if (x*x + y*y + z*z > 3*4*1000*1000) {
window.location.href = callback;
}
}
let prevCameraPosition = new THREE.Vector3();
let cameraStopped = true;
function checkCameraMovement() {
// Check if the current camera position is the same as the previous one
if (camera.position.equals(prevCameraPosition)) {
if (cameraStopped)
return;
cameraStopped = true;
if (callback) {
CheckTELEPORT();
}
console.log("FBI: ", camera.position);
} else {
// Update the previous camera position
prevCameraPosition.copy(camera.position);
cameraStopped = false;
console.log("КГБ: ", camera.rotation);
}
}
function clamp(value, min, max) {
return Math.min(Math.max(value, min), max);
}
function checkEscapeAttempt() {
// Clamp camera position within limits
camera.position.x = clamp(camera.position.x, -450, 500);
camera.position.y = clamp(camera.position.y, -4000, 600);
camera.position.z = clamp(camera.position.z, -1100, 1000);
}
// Start animation
function animate() {
requestAnimationFrame(animate);
checkEscapeAttempt();
checkCameraMovement();
renderer.render(scene, camera);
}
animate();
}
document.addEventListener("DOMContentLoaded", gogogo);
let happy = false;
document.addEventListener("click", function(){
if (happy) {
return;
}
// Play video
ShabbatTV(scene, {
"video_id": "exodus",
"source_id": "bible",
"sky": "{{ markdown.yaml.PowerPoint }}",
"width": 130,
"height": 82,
"start": parseInt("{{ markdown.yaml.PowerPointStart | default: 0 }}"),
"position": [-3, 42, -37],
"rotation": [0.09, Math.PI, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xf6eedc,
map: texture,
side: THREE.DoubleSide,
});
},
});
happy = true;
});
</script>
</div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>{{ markdown.yaml.Title }}</title>
<link rel="icon" type="image/png" href="https://jesus.lamourism.com/favicon.ico"/>
<meta property="og:title" content="Whatever you think it is, it's not" />
<meta property="og:image" content="https://gist.github.com/user-attachments/assets/c64786b8-a32f-4dde-ab08-26cd9fad963a">
<meta property="og:image:type" content="image/png">
<link rel="stylesheet" href="https://python.lamourism.com/yelizariev/afc9c2caf5937661d57712598d8898c3/XXX/Eva.css" />
<script type="importmap">
{
"imports": {
"magic": "https://python.lamourism.com/yelizariev/afc9c2caf5937661d57712598d8898c3/XXX/Adam.js",
"three": "https://unpkg.com/[email protected]/build/three.module.js",
"three/addons/": "https://unpkg.com/[email protected]/examples/jsm/"
}
}
</script>
</head><!--
{{ markdown.RAW }}
--><body>
<script>
const ANGELS = [{
// right
"position": [-369, 177, -355],
"target": [-20, -222, 1000],
}, {
// left
"position": [111, 177, -355],
"target": [-20, -222, 1000],
}, {
// center
"position": [0, 100, -444],
"target": [-20, -222, 1000],
}];
</script>
<div style="position:absolute; top:0; left;0; right:0; bottom: 0; z-index:-1;">
<!-- The Screen -->
<video id="exodus" loop crossOrigin="anonymous" playsinline style="display:none">
<source id="bible" src="{{ markdown.yaml.PowerPoint }}" type="video/mp4">
</video>
<img id="sticker1" style="display:none" crossorigin="anonymous"/>
<script type="module">
import * as THREE from 'three';
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
import {ShabbatTV, PravdaTV, AngelTV} from "magic";
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
const Stickers = [{
"img_id": "sticker1",
"width": 2.030,
"height": 1.188,
"align": "width",
"position": [15, -15.1, -10],
"rotation": [0, 0.5*Math.PI, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xe7e7e7,
transparent: true,
// opacity: 0.5,
map: texture,
side: THREE.DoubleSide,
});
},
}];
// init
const urlParams = new URLSearchParams(window.location.search);
// Create a scene
const scene = new THREE.Scene();
// Create a camera
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 40000);
// Create a renderer
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
// Create controls
const controls = new OrbitControls( camera, renderer.domElement );
function gogogo() {
scene.background = new THREE.Color( 0xf6eedc );
/* And God said,
— Let there be light,
and there was light. God saw that
the light was good, and he separated the light from the
darkness. God called the light 'day' and the darkness he
called 'night'. And there was evening, and there was
morning the first day.
*/
const light = new THREE.AmbientLight( 0xFFFFFF );
scene.add( light );
/* And the Lord God commanded the man,
— You are free to eat from any tree in the garden;
But you must not eat from the tree of the k7e and of good and evil,
for when you eat from it you will certainly [ ][ ][ ].
*/
console.sx = function (text) {
const lines = text.split('\n'); // разбиваем текст на строки
let delay = 15000; // стартовая задержка 15 секунд (в миллисекундах)
lines.forEach((line, index) => {
const wordCount = line.trim().split(/\s+/).length;
setTimeout(() => {
console.log(line);
}, delay);
delay += wordCount * 100; // добавляем задержку для следующей строки
});
};
// Load the Laptop first
const GLTF = "https://thepiratecircus.com/Woodstock/Virginia/laptop.glb";
const loader = new GLTFLoader();
loader.load(
GLTF,
function (gltf) {
const model = gltf.scene;
model.scale.set( 3.5, 3.5, 3.5 );
model.rotation.y = -0.3442 - Math.PI / 2;
model.position.set( -10, -33, -80)
scene.add(gltf.scene);
// Setup cameras and initial position
let number = urlParams.get("debug");
if (number) {
number = parseInt(number) % ANGELS.length || 0;
} else {
number = parseInt(ANGELS.length * Math.random());
}
AngelTV(ANGELS, number, camera, controls);
// Load chair
const GLTF = "https://thepiratecircus.com/Woodstock/OdooExperience/chair.glb";
const loader = new GLTFLoader();
loader.load(
GLTF,
function (gltf) {
// Chair 1
let model = gltf.scene;
model.scale.set( 300, 300, 300 );
//model.rotation.x = - Math.PI;
model.rotation.y = + Math.PI / 4;
model.position.set( 500, -100, 650)
scene.add(model);
// Chair 2
model = model.clone();
//model.rotation.x = - Math.PI;
model.rotation.y = - Math.PI / 4;
model.position.set( -500, -100, 650)
scene.add(model);
// Finally, load the Office
const GLTF = "https://thepiratecircus.com/Woodstock/Washington/TheOffice.glb";
const loader = new GLTFLoader();
loader.load(
GLTF,
function (gltf) {
const model = gltf.scene;
model.scale.set( 300, 300, 300 );
//model.rotation.y = 0;
model.position.set( -20750, 2230, -8900)
scene.add(gltf.scene);
},
undefined,
function (happy) {
console.sx(happy);
}
)
},
undefined,
function (happy) {
console.sx(happy);
}
);
},
undefined,
function (happy) {
console.sx(happy);
}
);
// Track camera moves
{% assign escaped_param = markdown.yaml.Next | url_encode %}
{% assign callback = "https://zoom.lamourism.com/?virus=trojan.exe&debug=" | append: escaped_param %}
const callback = "{{ callback }}";
function CheckTELEPORT() {
const x = camera.position.x, y = camera.position.y, z = camera.position.z
if (x*x + y*y + z*z > 16*10000*10000) {
window.location.href = callback;
}
}
let prevCameraPosition = new THREE.Vector3();
let cameraStopped = true;
function checkCameraMovement() {
// Check if the current camera position is the same as the previous one
if (camera.position.equals(prevCameraPosition)) {
if (cameraStopped)
return;
cameraStopped = true;
if (callback) {
CheckTELEPORT();
}
console.log("FBI: ", camera.position);
} else {
// Update the previous camera position
prevCameraPosition.copy(camera.position);
cameraStopped = false;
console.log("КГБ: ", camera.rotation);
}
}
// Start animation
const FLOOR_IS_LAVA = -2000;
function animate() {
requestAnimationFrame(animate);
if (camera.position.y < FLOOR_IS_LAVA) {
camera.position.y = FLOOR_IS_LAVA;
}
checkCameraMovement();
renderer.render(scene, camera);
}
animate();
}
document.addEventListener("DOMContentLoaded", gogogo);
let happy = false;
document.addEventListener("click", function(){
if (happy) {
return;
}
// Play video
ShabbatTV(scene, {
"video_id": "exodus",
"source_id": "bible",
"sky": "{{ markdown.yaml.PowerPoint }}",
"width": 130,
"height": 82,
"start": {{ markdown.yaml.PowerPointStart | default: 0 }},
"position": [-3, 42, -37],
"rotation": [0.09, Math.PI, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xf6eedc,
map: texture,
side: THREE.DoubleSide,
});
},
});
happy = true;
});
</script>
</div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>{{ markdown.yaml.Title }}</title>
<link rel="icon" type="image/png" href="https://lamourism.com/favicon.ico" />
<meta property="og:image" content="https://odooism.com/matrix.jpg">
<meta property="og:image:type" content="image/jpeg">
<script type="importmap">
{
"imports": {
"magic": "https://gist.odooism.com/yelizariev/e632899fab332cf7a1b9a0c313999ce6/北%20京/Adam.js",
"three": "https://unpkg.com/[email protected]/build/three.module.js",
"three/addons/": "https://unpkg.com/[email protected]/examples/jsm/"
}
}
</script>
<script src="https://lamourism.com/Zion/Neo.js?debug=redemption"></script>
<style> body {margin: 0;} </style>
</head>
<body>
<script>
/* Слово предоставляется Адаму: */
FreePALESTINE = true;
</script>
<!--
⠀⠀⠀⠀⠀⣀⣤⢤⣤⣄⣀⣀⣀⣀⣠⣤⡀⠀⠀⠤⠤⠄⠀⠀⠀⠀⠀⠀⠤⠤⠤⠤⢤⡄⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⡴⣪⠃⠀⠀⣠⣶⣶⣦⣤⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⠀⠀⠀⠀⠀⠀
⠀⠀⠀⣀⣾⡽⠁⠀⠀⣰⣿⠃⠀⠀⠈⠉⠙⠛⠛⠛⠶⠤⢤⣄⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡇⠀⠀⠀⠀⠀
⠀⢠⡾⣟⣿⠇⡀⢀⣾⢫⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠙⠓⠶⣦⣤⣄⣀⡀⠀⠀⠀⡇⠀⠀⠀⠀⠀
⠰⣿⣞⡽⣿⣾⢷⡿⣱⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠻⠦⣄⣀⠀⠱⠀⠀⠀⠀⠀
⠐⣿⣡⣾⡋⠹⡆⠿⣧⡄⣀⣀⣀⡀⠘⢶⣤⣤⣤⣤⣤⣄⣀⣀⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠙⢿⠢⠤⣀⠀⠀⠀
⠈⠻⡿⠛⢷⣄⠀⠀⠈⠉⠓⠒⠛⠹⠭⠭⠯⠭⢽⣟⡛⠛⠛⠛⠛⠛⠻⠿⢷⣶⣤⣤⡀⠀⠀⠘⠀⠀⠈⢣⡀⠀
⠀⠀⢱⡀⠀⠉⢳⢄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠲⠀⠀⠀⠀⠙⠒⠦⢄⣉⣓⠿⢕⣦⣀⠀⠀⠰⣾⣿⡦
⠀⠀⠘⣇⠀⠀⠈⠳⣝⣂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠳⣌⠻⢦⠀⠀⣹⡙⡟
⠀⠀⠀⢸⠀⠀⠀⠀⠈⠉⠉⠒⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠓⢬⣟⣖⣿⡘⠂
⠀⠀⠀⢸⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠤⢀⣀⣀⣤⣴⣶⡾⠿⠥⠤⠤⢄⣀⣀⣀⡀⠀⠀⠀⠈⠉⠷⢿⣿⠗⠀
⠀⠀⠀⣿⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠑⠀⠀⠀⢀⣀⡼⠏⠀⠀
⠀⠀⢸⡟⣿⠀⠀⠀⢀⡤⠴⠒⠒⠲⠦⠤⣤⣤⣄⣀⡀⠀⠀⠀⠀⡀⣀⡤⠴⠂⠀⠀⠀⠖⠒⢻⡟⠉⠀⠀⠀⠀
⠀⠀⣿⡇⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠙⠛⠛⠿⠷⠖⠒⠀⠉⠁⠀⠀⠀⠀⣸⠁⠀⠀⠀⠀⠀
⠀⠀⣿⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⠄⠀⠀⠀⠀⠀⠀⠀⠀⢠⡿⠀⠀⠀⠀⠀⠀
⠀⠀⢸⡿⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠑⠒⠒⠀⠒⠒⠊⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⠁⠀⠀⠀⠀⠀⠀
⠀⠀⢸⡇⠀⢀⣀⡠⠆⠀⠉⡉⠉⠉⠙⠒⠶⠶⠤⠤⠤⠤⠄⠀⠀⠀⠀⢀⡀⠀⠀⢀⣤⣾⠃⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⢳⣾⣫⡥⠴⠚⠋⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⣶⣄⠀⠘⣿⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⢀⣾⠟⠉⠀⠀⠀⠀⠀⣤⠤⠴⠶⠶⣤⣤⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠪⡷⡀⢹⡇⠀⠀⠀⠀⠀⠀⠀
⠀⠀⢸⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠉⠙⠛⠯⠉⠀⠀⠀⠀⠈⢻⡾⠁⠀⠀⠀⠀⠀⠀⠀
⠀⠀⢸⣷⣶⣤⣤⣀⠀⠀⠀⠤⠤⠤⠿⠷⠶⠒⢛⣋⣉⣉⠓⠀⠀⠀⠀⠀⠀⠀⠀⢀⡐⡄⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠘⣿⡟⢿⣿⣿⣶⣤⣤⣤⣤⣴⡶⠖⡿⠛⠛⠛⠿⣿⣿⣶⣶⣄⠀⠀⠀⠀⠈⡧⠃⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⢿⣷⡄⠀⠉⠉⠛⠋⠉⠉⠀⢀⠞⠁⠀⠀⠸⡀⠀⠀⠉⠉⠛⠿⠿⠶⠶⢚⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠸⣿⣿⣦⣄⣀⣀⣀⣀⡤⠞⠋⠀⢀⠀⠀⢀⢻⣦⡀⠀⠀⠀⠀⠀⠀⣠⠞⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣿⣿⡿⠟⠛⠛⠉⠉⠀⠀⠀⠀⡜⠀⠀⠘⣆⠙⢿⣶⣤⣄⣀⣤⠖⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣿⠋⠀⠀⠀⢀⡾⠀⠀⠀⠀⢸⡇⠀⠀⠀⠈⢆⠀⠈⠹⣿⣿⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⣼⠁⠀⠀⠀⠀⢸⡇⠀⠀⠀⠀⠘⣧⠀⠀⠘⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⢳⡀⠀⠀⢀⠏⠀⠀⠀⠀⠀⠘⡇⠀⠀⠀⠀⠀⠈⠀⠀⠀⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠘⣇⠀⠀⠈⠀⠀⠀⠀⠀⠀⠀⠷⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠘⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠹⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢷⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⣿⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⡀⠀⠀⠀⠀⠙⢦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠳⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢠⣿⡇⠀⠀⠀⠀⠀⠀⠀⢀⣤⡄⠀⠀⠀⠀⠸⡄⠀⠀⠀⠀⠀⠀⠈⢦⡀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⢀⣿⠏⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠀⠀⠀⠀⠀⠀⠸⡄⠀⠀⠀⠀⠀⠀⠈⢳⡀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⢸⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⡀⠀⠀⠀⠀⠀⠀⠀⢿⡄⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⢀⡏⠀⠀⠀⣤⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⢈⣿⡀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⢸⠇⠀⠀⠀⢸⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⢀⣴⠟⢹⣧⠀⠀⠀⠀
⠀⠀⠀⠀⠀⡸⠀⠀⠀⠀⠈⢿⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡼⠁⠀⠀⠀⣠⡶⠟⠁⠀⠘⣿⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣇⡀⠀⠀⠀⠀⠘⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⡶⠟⠋⠀⠀⠀⠀⢰⣿⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣿⠉⠛⠷⠶⣶⣦⣽⣿⣷⣄⣀⣀⣀⣀⣀⣀⣀⣤⣶⣶⣿⠟⠉⠀⠀⠀⠀⠀⠀⠀⢸⣿⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣿⠀⠀⠀⠀⠀⠀⠈⠉⠉⠛⠛⠻⣿⣿⣿⣿⣿⣿⣿⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⠀⠀⠀⠀
⠀⠀⠀⠀⠀⢿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⣿⣿⣿⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⡏⠀⠀⠀⠀
⠀⠀⠀⠀⠀⢸⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠘⡛⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢈⣻⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣛⠋
⠀⠀⠀⠀⠀⠘⡛⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢈⣻⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣛⠋
⠀⠀⠀⠀⠀⢸⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⢿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⣿⣿⣿⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⡏⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣿⠀⠀⠀⠀⠀⠀⠈⠉⠉⠛⠛⠻⣿⣿⣿⣿⣿⣿⣿⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣿⠉⠛⠷⠶⣶⣦⣽⣿⣷⣄⣀⣀⣀⣀⣀⣀⣀⣤⣶⣶⣿⠟⠉⠀⠀⠀⠀⠀⠀⠀⢸⣿⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣇⡀⠀⠀⠀⠀⠘⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⡶⠟⠋⠀⠀⠀⠀⢰⣿⠀⠀⠀⠀
⠀⠀⠀⠀⠀⡸⠀⠀⠀⠀⠈⢿⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡼⠁⠀⠀⠀⣠⡶⠟⠁⠀⠘⣿⠀⠀⠀⠀
⠀⠀⠀⠀⠀⢸⠇⠀⠀⠀⢸⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⢀⣴⠟⢹⣧⠀⠀⠀⠀
⠀⠀⠀⠀⠀⢀⡏⠀⠀⠀⣤⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⢈⣿⡀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⢸⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⡀⠀⠀⠀⠀⠀⠀⠀⢿⡄⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⢀⣿⠏⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠀⠀⠀⠀⠀⠀⠸⡄⠀⠀⠀⠀⠀⠀⠈⢳⡀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢠⣿⡇⠀⠀⠀⠀⠀⠀⠀⢀⣤⡄⠀⠀⠀⠀⠸⡄⠀⠀⠀⠀⠀⠀⠈⢦⡀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠳⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⣿⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⡀⠀⠀⠀⠀⠙⢦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠹⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢷⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠘⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠘⣇⠀⠀⠈⠀⠀⠀⠀⠀⠀⠀⠷⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⢳⡀⠀⠀⢀⠏⠀⠀⠀⠀⠀⠘⡇⠀⠀⠀⠀⠀⠈⠀⠀⠀⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⣼⠁⠀⠀⠀⠀⢸⡇⠀⠀⠀⠀⠘⣧⠀⠀⠘⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣿⠋⠀⠀⠀⢀⡾⠀⠀⠀⠀⢸⡇⠀⠀⠀⠈⢆⠀⠈⠹⣿⣿⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣿⣿⡿⠟⠛⠛⠉⠉⠀⠀⠀⠀⡜⠀⠀⠘⣆⠙⢿⣶⣤⣄⣀⣤⠖⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠸⣿⣿⣦⣄⣀⣀⣀⣀⡤⠞⠋⠀⢀⠀⠀⢀⢻⣦⡀⠀⠀⠀⠀⠀⠀⣠⠞⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⢿⣷⡄⠀⠉⠉⠛⠋⠉⠉⠀⢀⠞⠁⠀⠀⠸⡀⠀⠀⠉⠉⠛⠿⠿⠶⠶⢚⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠘⣿⡟⢿⣿⣿⣶⣤⣤⣤⣤⣴⡶⠖⡿⠛⠛⠛⠿⣿⣿⣶⣶⣄⠀⠀⠀⠀⠈⡧⠃⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⢸⣷⣶⣤⣤⣀⠀⠀⠀⠤⠤⠤⠿⠷⠶⠒⢛⣋⣉⣉⠓⠀⠀⠀⠀⠀⠀⠀⠀⢀⡐⡄⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⢸⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠉⠙⠛⠯⠉⠀⠀⠀⠀⠈⢻⡾⠁⠀⠀⠀⠀⠀⠀⠀
⠀⠀⢀⣾⠟⠉⠀⠀⠀⠀⠀⣤⠤⠴⠶⠶⣤⣤⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠪⡷⡀⢹⡇⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⢳⣾⣫⡥⠴⠚⠋⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⣶⣄⠀⠘⣿⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⢸⡇⠀⢀⣀⡠⠆⠀⠉⡉⠉⠉⠙⠒⠶⠶⠤⠤⠤⠤⠄⠀⠀⠀⠀⢀⡀⠀⠀⢀⣤⣾⠃⠀⠀⠀⠀⠀⠀⠀
⠀⠀⢸⡿⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠑⠒⠒⠀⠒⠒⠊⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⠁⠀⠀⠀⠀⠀⠀
⠀⠀⣿⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⠄⠀⠀⠀⠀⠀⠀⠀⠀⢠⡿⠀⠀⠀⠀⠀⠀
⠀⠀⣿⡇⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠙⠛⠛⠿⠷⠖⠒⠀⠉⠁⠀⠀⠀⠀⣸⠁⠀⠀⠀⠀⠀
⠀⠀⢸⡟⣿⠀⠀⠀⢀⡤⠴⠒⠒⠲⠦⠤⣤⣤⣄⣀⡀⠀⠀⠀⠀⡀⣀⡤⠴⠂⠀⠀⠀⠖⠒⢻⡟⠉⠀⠀⠀⠀
⠀⠀⠀⣿⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠑⠀⠀⠀⢀⣀⡼⠏⠀⠀
⠀⠀⠀⢸⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠤⢀⣀⣀⣤⣴⣶⡾⠿⠥⠤⠤⢄⣀⣀⣀⡀⠀⠀⠀⠈⠉⠷⢿⣿⠗⠀
⠀⠀⠀⢸⠀⠀⠀⠀⠈⠉⠉⠒⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠓⢬⣟⣖⣿⡘⠂
⠀⠀⠘⣇⠀⠀⠈⠳⣝⣂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠳⣌⠻⢦⠀⠀⣹⡙⡟
⠀⠀⢱⡀⠀⠉⢳⢄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠲⠀⠀⠀⠀⠙⠒⠦⢄⣉⣓⠿⢕⣦⣀⠀⠀⠰⣾⣿⡦
⠈⠻⡿⠛⢷⣄⠀⠀⠈⠉⠓⠒⠛⠹⠭⠭⠯⠭⢽⣟⡛⠛⠛⠛⠛⠛⠻⠿⢷⣶⣤⣤⡀⠀⠀⠘⠀⠀⠈⢣⡀⠀
⠐⣿⣡⣾⡋⠹⡆⠿⣧⡄⣀⣀⣀⡀⠘⢶⣤⣤⣤⣤⣤⣄⣀⣀⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠙⢿⠢⠤⣀⠀⠀⠀
⠰⣿⣞⡽⣿⣾⢷⡿⣱⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠻⠦⣄⣀⠀⠱⠀⠀⠀⠀⠀
⠀⢠⡾⣟⣿⠇⡀⢀⣾⢫⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠙⠓⠶⣦⣤⣄⣀⡀⠀⠀⠀⡇⠀⠀⠀⠀⠀
⠀⠀⠀⣀⣾⡽⠁⠀⠀⣰⣿⠃⠀⠀⠈⠉⠙⠛⠛⠛⠶⠤⢤⣄⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡇⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⡴⣪⠃⠀⠀⣠⣶⣶⣦⣤⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣀⣤⢤⣤⣄⣀⣀⣀⣀⣠⣤⡀⠀⠀⠤⠤⠄⠀⠀⠀⠀⠀⠀⠤⠤⠤⠤⢤⡄⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠈⠙⠛⠛⠿⠿⠿⠿⠛⠛⠋⠁⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠈⠛⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠛⠁⠀⠀⠀⠀
⠀⠀⠀⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠀⠀⠀
⠀⠈⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠁⠀
⠀⢿⣿⣿⣿⣿⣇⠀⢸⣿⣦⡀⠀⠀⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⡿⠀
⠘⣿⣿⣿⣿⣿⡇⠀⢸⣿⠀⠀⣿⣿⠀⠀⣿⣷⣆⠀⢰⣾⣿⣿⣿⠃
⢸⣿⣿⣿⣿⣿⡇⠀⢸⣿⠗⠀⢈⡁⠀⠺⣿⠉⠁⠀⠈⠉⣻⣿⣿⡇
⢠⣿⣿⣿⣿⣀⡀⠀⢸⣿⡏⠀⢠⡄⠀⢹⣿⣿⡟⠉⢻⣿⣿⣿⣿⡄
⠀⣾⣿⣿⣿⣿⠿⠟⢿⣿⣿⡿⠛⠛⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⠀
⠀⢀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡀⠀
⠀⠀⠀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⠀⠀⠀
⠀⠀⠀⠀⢀⣤⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣤⡀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢀⣠⣤⣤⣶⣶⣶⣶⣤⣤⣄⡀⠀⠀⠀⠀⠀⠀⠀
-->
<audio id="zodiak">
<source id="renaissance" type="audio/mpeg">
</audio>
<video id="exodus" loop crossOrigin="anonymous" playsinline style="display:none">
<source id="bible" src="{{ markdown.yaml.TV | default: 'https://moses.lamourism.com/porn/Stalin.Gay.mp4' }}" type="video/mp4">
</video>
<script type="module">
import * as THREE from 'three';
import {scene, camera, controls, ShabbatTV, renderer} from "magic";
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
const loader = new GLTFLoader();
function gogogo() {
// initial position
camera.position.set( 0.17, 1.65, -3.76 );
controls.target = new THREE.Vector3( 0, 1.32, -2.58 );
controls.update();
// Load TV
loader.load(
'https://thepiratecircus.com/Woodstock/OdooExperience/tv.glb',
function (gltf) {
const tv_model = gltf.scene;
const ROTATION = Math.PI / 8;
// activate click
document.addEventListener("click", function(){
const TV_SCALE = 0.030;
const screen = ShabbatTV(new THREE.PlaneGeometry(20.5*TV_SCALE, 15.5*TV_SCALE), 0, 0xf6eedc);
screen.position.set(-0.15, 0.88, -0.36);
screen.rotation.y = ROTATION;
const exodus = document.getElementById( 'exodus' );
exodus.currentTime = parseFloat("{{ markdown.yaml.StartTV }}") || 0;
});
// Load the prison
loader.load(
'https://weloveiran.net/kolobok/%D0%A6%D0%BE%D0%B9%D0%96%D0%AB%D0%92/%D0%9F%D1%83%D1%82%D0%B8%D0%BD%D0%92%D0%9E%D0%A0/scene.gltf',
function (gltf) {
let model;
// TV
model = tv_model;
model.scale.set(0.6, 0.6, -0.6);
model.position.set( 0, 0.65, 0)
model.rotation.y = ROTATION;
scene.add(model);
// cell 1
model = gltf.scene;
scene.add(model);
// cell 2
model = model.clone()
model.scale.set(-1, 1, -1);
model.position.set( 0, 0, 5)
scene.add(model);
},
undefined,
function (error) {
console.error(error);
}
)
},
undefined,
function (error) {
console.error(error);
}
);
/* Track camera moves
{% assign escaped_param = markdown.yaml.NextPrison | url_encode %}
{% assign callback = "https://gist.odooism.com/?debug=" | append: escaped_param %}
*/
const callback = "{{ callback }}";
function CheckTELEPORT() {
const x = camera.position.x, y = camera.position.y, z = camera.position.z
if (x*x + y*y + z*z > 8*10000) {
window.location.href = callback;
}
}
let prevCameraPosition = new THREE.Vector3();
let cameraStopped = true;
function checkCameraMovement() {
// Check if the current camera position is the same as the previous one
if (camera.position.equals(prevCameraPosition)) {
if (cameraStopped)
return;
cameraStopped = true;
if (callback) {
CheckTELEPORT();
}
console.log("XYZ", camera.position, camera.rotation);
} else {
// Update the previous camera position
prevCameraPosition.copy(camera.position);
cameraStopped = false;
}
}
function animate() {
requestAnimationFrame(animate);
//controls.update();
checkCameraMovement();
//console.log("pos", camera.position);
renderer.render(scene, camera);
}
animate();
}
/*
</head><!--
{{ markdown.RAW }}
--><body>
*/
document.addEventListener("DOMContentLoaded", gogogo);
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>{{ markdown.yaml.Title }}</title>
<link rel="icon" type="image/x-icon" href="https://bucha.lamourism.com/assets/favicon.ico"/>
<meta property="og:title" content="Любовь идёт по проводам." />
<meta property="og:image" content="https://odooism.com/matrix.jpg">
<meta property="og:image:type" content="image/jpeg">
<link rel="stylesheet" href="https://bucha.lamourism.com/assets/css/normalize.css" />
<link rel="stylesheet" href="https://bucha.lamourism.com/assets/css/open-color.css" />
<link rel="stylesheet" href="https://diana.lamourism.com/yelizariev/e632899fab332cf7a1b9a0c313999ce6/北京-MATRIX-v3/styles.exe.css" />
<script src="https://diana.lamourism.com/yelizariev/e632899fab332cf7a1b9a0c313999ce6/北京/typed.umd.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/felipec.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/javascript.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/python.min.js"></script>
<script src="https://lamourism.com/Zion/Neo.js?debug=redemption"></script>
<style>
.mirror::after {
content: attr(data-magic);
position: absolute;
transform: scaleX(-1);
}
</style>
</head><!--
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⣠⣤⣤⣤⣦⣶⣤⣤⣤⣤⣤⣀⣀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣤⣴⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣄⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣶⣿⣿⣿⣿⡿⠿⠛⠛⠉⠉⠁⠀⠀⣀⣀⣀⣀⡀⠀⠀⠀⠈⠉⠛⠛⠿⢿⣿⣿⣶⣤⣄⣀
⠀⠲⢶⣶⣶⣶⣶⣿⣿⣿⠿⠿⠛⠋⠉⠀⠀⣀⣠⣤⣶⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣦⣤⣀⠀⠀⠀⠉⠙⠻⠿⢿⣿⣷⣶⣦⣤⣤⣄⡄
⠀⠀⠀⠀⠉⠉⠉⠁⠀⠀⠀⠀⣀⣠⣴⣶⣿⣿⣿⠿⠿⠛⠋⣩⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⢿⣿⣶⣦⣄⣀⠀⠀⠀⠀⠉⠉⠉⠉⠉⠁
⠀⠀⠀⠀⠀⠀⣀⣀⣤⣴⣶⣿⣿⣿⠿⠟⠋⠉⠀⠀⠀⠀⢠⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠈⠉⠛⠿⢿⣿⣶⣶⣤⣄⣀⣀⣀⣀⡀
⢰⣶⣶⣶⣾⣿⣿⣿⣿⠿⠛⠋⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠈⢉⣽⣿⣿⣿⣿⣿⣿⠃
⢸⣿⡿⠛⠛⠻⢿⣿⣷⣦⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠀⠀⠀⠀⢀⣠⣴⣾⣿⠿⠛⠋⠁
⠘⠁⠀⠀⠀⠀⠀⠈⠛⠿⣿⣿⣿⣷⣦⣤⣄⣀⠀⠀⠀⠀⠀⠀⠈⠙⠻⠿⢿⣿⠿⠟⠛⠁⢀⣀⣤⣴⣾⣿⣿⡿⠋
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠻⠿⣿⣿⣿⣿⣷⣶⣶⣦⣤⣤⣤⣤⣤⣤⣤⣴⣶⣶⣿⣿⣿⣿⣿⠟⣿⣿⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠛⠛⠿⠿⠿⠿⠿⠿⠿⠿⠿⠟⠛⢋⣽⣿⡿⠏⠁⠀⣿⣷
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣿⣿⠏⠁⠀⠀⠀⣿⣿⣧⡀⠀⠀⠀⠀⠀⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⠟⠁⠀⠀⠀⠀⠀⣿⣿⣿⣿⣷⣶⣶⣾⡟⠁
⠀⠀⠀⠀⢀⣤⣴⣶⣶⣦⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣿⡟⠁⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⠋
⠀⠀⠀⣴⣿⣿⠿⠛⠛⠻⣿⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⣿⣿⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⡿⠁
⠀⠀⢰⣿⣿⠃⠀⣶⣿⣿⣿⣿⣿⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⡟⠁
⠀⠀⢸⣿⣿⠀⠀⣿⣿⣿⣿⣿⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⡿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⡟
⠀⠀⢸⣿⣿⡀⠀⠙⠿⠿⠿⠛⠁⠀⠀⠀⠀⠀⠀⢀⣤⣾⣿⡿⠟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⡟
⠀⠀⠀⢿⣿⣿⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣾⣿⣿⡿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⡟
⠀⠀⠀⠀⠻⣿⣿⣿⣷⣶⣤⣤⣶⣶⣿⣿⣿⡿⠿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡟
⠀⠀⠀⠀⠀⠀⠉⠙⠛⠛⠛⠛⠛⠛⠋⠉
--><body>
<main>
<div class="comment"># -<a href="https://thepiratecircus.com/?debug=https://perestroika-2.com/index.html/">*</a>- coding: <a class="nomagic" href="https://jesus.lamourism.com/">utf-8</a> -<a href="https://aliyah.odooism.com/?debug=https://shabbat.lamourism.com/">*</a>-</div>
<div class="comment"># <a class="nomagic" href="{{ markdown.yaml.Copyright }}">License</a> <a class="nomagic" href="https://creativecommons.org/licenses/by-nc-sa/4.0/?¿=!">CC BY-NC-SA 4.0</a></div>
<div id="matrix">
<br/>
<h1>Ceci n'est pas une &#42;&#42;&#42;iPod 🪬 Cast**&#42;</h1>
<br/>
<div class="content">
<div id="strings"><span><h3 style="text-align:center;">ددر سکوت اسرارآمیز صحراهای مصر، جایی که بادها اسرار باستانی را نجوا می‌کنند و هرم‌ها همچون شاهدان فراعنه بر آسمان می‌درخشند، چشم هوروس در انتظار بیداری خود است. در معابد مقدس، کشیشان دانش اجدادی را منتقل می‌کردند. چشم هوروس، نماد حکمت الهی، تنها به کسانی که حقیقت را در شادی حال می‌جویند آشکار می‌شود، تا تاریک‌ترین گوشه‌های حافظه را روشن کند. با نفوذ نور آن، شفا آغاز می‌شود و روح به حقیقت‌های بی‌زمان متصل می‌شود، هدایت‌شده توسط نور ابدی حکمت.
</h3>
<h1 style="text-align:center;"> &nbsp; ¡We<a alt="Как говорил мой сосед по парте: компилировать можно и на бумаге. Поэтому код ядра всегда идёт впереди скомпилированного ядра" href="{{ markdown.yaml.Fire | default: 'https://www.odoomagic.com/yelizariev/94762b65863ebd2ed7e2b57f2db799f4/%F0%9F%AA%AC/2007.%E2%98%AD.%F0%9F%95%B8' }}">🔥</a>Come!</h1>
<h1 align="center">⁎⁎⁎ ⁎⁎⁎ X ⁎⁎⁎ ⁎⁎⁎</h1>
<span align="center">
<a title="¿אז לחתונה שלך אני מוזמן או שצריך לקנות כרטיס?" target="_blank" href="{{ markdown.yaml.Nefertiti | default: 'https://muhammad.lamourism.com/' }}"><img style="border-radius: 3%;" src="https://proxy.lamourism.com/user-attachments/assets/9261551c-d26b-44b9-a6ba-00aa7cdadd93" alt="&#42;&#42;&#42;&#42;Sync 🪬&nbsp;Studio&#42;&#42;&#42;&#42;"/></a>
</span>
<h1 align="center"> &#42;&#42;&#42; &#42;&#42;&#42; Y &#42;&#42;&#42; &#42;&#42;&#42;</h1>
<div style="text-align:center; padding: 0 10%;">Dans le silence mystique du désert égyptien, où les vents murmurent des secrets anciens, les pyramides se dressent comme témoins des pharaons. C'est là, dans l'ombre de ces monuments, que l'Œil d'Horus attend son éveil. Dans les temples sacrés, les prêtres transmettaient leur savoir ancestral. L'Œil, symbole de sagesse divine, se révèle à ceux qui cherchent la vérité dans la joie du présent, illuminant les recoins sombres de la mémoire. En pénétrant ces lieux cachés, la guérison commence, et l'âme se reconnecte aux vérités intemporelles, guidée par la lumière éternelle de la sagesse.
</div>
<br/><br/><br/>
{{ markdown.HTML }}
</span></div>
<span id="typed"></span>
</div>
<div id="summary"><a href="https://gist.lamourism.com/yelizariev/c05c04256d2460668574fd63e521e0f5/%F0%9F%A7%95/%F0%9F%98%8D.1984"><img src="https://odoomagic.com/sexy-witch.png?debug=CV.exe"/></a> <br/><br/>
<a href="https://dream.lamourism.com/yelizariev/afc9c2caf5937661d57712598d8898c3/%F0%9F%87%AB%F0%9F%87%B7/W29%E2%9C%A8.markdown"><img title="Horus" style="border-radius:50%;" src="https://proxy.lamourism.com/user-attachments/assets/db9f3767-b510-498d-8a09-3b837514403c"/></a>
<a href="https://dream.lamourism.com/yelizariev/afc9c2caf5937661d57712598d8898c3/%F0%9F%87%AB%F0%9F%87%B7/W31%F0%9F%8D%84.markdown"><img src="https://odoomagic.com/sexy-witch.png?debug=CV.exe"/></a> <br/><br/>
<a href="https://purim.lamourism.com/yelizariev/a85fa27a32d76ae1ddf7c0fdf69bedf4/%F0%9F%8C%B9/%E2%9D%84%EF%B8%8F.%F0%9F%90%AB"><img title="¿Problems? Press F12" style="border-radius:3%;" src="{{ markdown.yaml.Image }}"/></a>
<a href="https://gist.lamourism.com/yelizariev/c05c04256d2460668574fd63e521e0f5/%F0%9F%A7%95/%F0%9F%98%8D.101"><img src="https://odoomagic.com/sexy-witch.png?debug=CV.exe"/></a> <br/><br/>
<a href="https://purim.lamourism.com/yelizariev/a85fa27a32d76ae1ddf7c0fdf69bedf4/%F0%9F%8C%B9/%E2%9D%A4%EF%B8%8F.%F0%9F%90%AB"><img title="¿🐝🐝 || !🐝🐝?" style="border-radius:50%;" src="https://perestroika-2.com/images/magic-book.jpg"/></a>
<a href="https://purim.lamourism.com/yelizariev/a85fa27a32d76ae1ddf7c0fdf69bedf4/%F0%9F%A7%95/%F0%9F%AA%AC.1984"><img src="https://odoomagic.com/sexy-witch.png?debug=CV.exe"/></a> <br/><br/>
</div>
<div style="text-align:right">
<a href="https://gist.odooism.com/?debug={{ markdown.yaml.Next | url_encode }}"><img style="width:initial; padding-right:3rem;" src="https://muhammad.lamourism.com/PickleRick.webp"/></a>
</div>
</div>
<audio id="zodiak">
<source id="renaissance" src="https://hirschmilch.de:7001/prog-house.mp3" type="audio/mpeg">
</audio>
<div class="comment">
</div>
</main>
<script>
FreePALESTINE = true;
new Typed("#typed", {
stringsElement: "#strings",
backSpeed: 10,
typeSpeed: 30,
backDelay: 3000,
cursorChar: "<span class=\"mirror\" data-magic=\"🐫\"></span>",
smartBackspace: true
});
console.log(`
{{ markdown.yaml.Description }}
`);
</script>
</body>
</html>
#!/usr/bin/env python3
"""
☠️ VooDoo.py — The Pirate’s Spyglass for the Odoo Logstream ☠️
Arrr, matey. This be no ordinary script.
This be yer enchanted lens into the engine room of yer digital schooner — the Odoo server.
When the crew aboard yer Odoo.sh vessel hoists the sails and sets course across the cloud seas, it's not just the wind of business processes that drives her. Nay — it’s the hidden churn of engines, the trace of every cannon fired, and the whisper of every protocol.
Sometimes, the Captain must peek below deck — where werkzeug belches smoke, and RPC calls echo through the steel belly of the ship.
This script be yer lookout. With color and curse, it reads the sacred scrolls of the server log, and highlights 'em so ye won’t miss a Kraken or mutiny.
---
🛠️ USAGE GUIDE (No parrots allowed):
📡 Live stream with no download:
tail -f logs/odoo.log | bash -c 'python3 <(curl -s https://gist.githubusercontent.com/yelizariev/afc9c2caf5937661d57712598d8898c3/raw/VooDoo.py)'
📁 Run on a saved file:
curl -s https://gist.githubusercontent.com/yelizariev/afc9c2caf5937661d57712598d8898c3/raw/VooDoo.py > VooDoo.py
python3 VooDoo.py /path/to/log.log
🧙 Works with stdin or regular files. Use `tail -f` for real-time log scrying.
---
"""
import sys
import re
import time
import argparse
# Enchanted inks for the Captain’s eye
RESET = "\033[0m"
YELLOW = "\033[1;33m"
BLUE = "\033[1;34m"
RED = "\033[1;31m"
GREEN = "\033[1;32m"
MAGENTA = "\033[1;35m"
GRAY = "\033[0;37m"
CYAN = "\033[1;36m"
# The sacred markings of the log scrolls
LOG_LINE_RE = re.compile(
r"(?P<timestamp>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d{3})\s+"
r"(?P<pid>\d+)\s+"
r"(?P<level>[A-Z]+)\s+"
r"(?P<db>\S+)\s+"
r"(?P<rest>.+)"
)
HTTP_RE = re.compile(r'"(?P<method>GET|POST|PUT|DELETE) (?P<url>[^"]+) HTTP/[\d.]+"')
def parse_args():
parser = argparse.ArgumentParser(description="Highlight Odoo logs with the fury of the sea.")
parser.add_argument("file", nargs="?", help="Path to log file. Defaults to stdin.")
return parser.parse_args()
def color_text(color_code, text):
return f"\033[{color_code}m{text}\033[0m"
def color_time(seconds):
seconds = float(seconds)
if seconds < 0.2:
return color_text('32', f'{seconds:.3f}') # green
elif seconds < 1.2:
return color_text('33', f'{seconds:.3f}') # yellow
else:
return color_text('31', f'{seconds:.3f}') # red
def format_query_count(n):
n = int(n)
suns = n // 10
stars = (n % 10) // 3
return '☀️' * suns + '✨ ' * stars if (suns + stars) > 0 else ''
import re
def parse_log_line(line):
# Regex patterns
LOG_LINE_RE = re.compile(
r"(?P<timestamp>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d{3})\s+"
r"(?P<pid>\d+)\s+"
r"(?P<level>[A-Z]+)\s+"
r"(?P<db>\S+)\s+"
r"(?P<rest>.+)"
)
HTTP_RE = re.compile(r'"(?P<method>GET|POST|PUT|DELETE) (?P<url>[^"]+) HTTP/[\d.]+"')
QUOTE_RE = re.compile(r'^(.*?)\s*"(.*?)"\s*(.*)$')
# Parse main log line
match = LOG_LINE_RE.match(line)
if not match:
return line
# Extract main fields
timestamp = match['timestamp']
pid = match['pid']
level = match['level']
db = match['db']
rest = match['rest']
# Parse quoted section
quote_match = QUOTE_RE.search(rest)
if not quote_match:
pattern = r'^(?P<beginning>.*) (?P<db>[^ ]+) (?P<python_path>[a-zA-Z0-9_.]+)\.(?P<python_module>[a-zA-Z0-9_]+):\s*(?P<message>.+)$'
match = re.match(pattern, line)
if not match:
return line
beginning = match.group('beginning')
db = match.group('db')
db_colored = color_text('34', db)
python_path = match.group('python_path')
python_path_colored = color_text('37', python_path)
python_module = match.group('python_module')
python_module_colored = color_text('31', python_module)
message = match.group('message')
return (
f"{beginning} {db_colored} {python_path_colored}.{python_module_colored}: {message} "
)
before_quote = quote_match.group(1)
inside_quote = quote_match.group(2)
after_quote = quote_match.group(3)
# Parse HTTP details from after_quote
http_re = re.compile(
r'(?P<code>\d+)\s+-\s+(?P<queries>\d+)\s+(?P<query_time>[\d.]+)\s+(?P<remaining_time>[\d.]+)'
)
http_match = http_re.search(after_quote)
if not http_match:
# Fallback if HTTP details are missing
# return (
# f"{YELLOW}{timestamp}{RESET} {pid} {RESET}{level}{RESET} {GREEN}{db}{RESET} "
# f"{before_quote} \"{inside_quote}\" {after_quote}"
# )
return line
# Extract HTTP details
code = http_match.group('code')
queries = http_match.group('queries')
query_time = http_match.group('query_time')
remaining_time = http_match.group('remaining_time')
# Parse method and URL from inside_quote
HTTP_RE = re.compile(r'"(?P<http_type>GET|POST|PUT|DELETE) (?P<http_url>[^ ]+) (?P<http_meta>HTTP/[\d.]+)"')
http_inside_match = HTTP_RE.search(f'"{inside_quote}"')
http_type = http_inside_match.group('http_type') if http_inside_match else ''
http_url = http_inside_match.group('http_url') if http_inside_match else ''
http_meta = http_inside_match.group('http_meta') if http_inside_match else ''
# Determine code color and emoji (for optional prefix)
if code.startswith('2'):
code_color = '37' # Gray
emoji = '🤌'
elif code.startswith('4'):
code_color = '33' # Yellow
emoji = '⚠️'
elif code.startswith('5'):
code_color = '31' # Red
emoji = '💥'
else:
code_color = '34' # Blue
emoji = '❓'
# Apply colors
code_colored = color_text(code_color, code)
query_repr = format_query_count(queries)
qt = color_time(query_time)
rt = color_time(remaining_time)
# Color timestamp
ts_colored = f"{YELLOW}{timestamp}{RESET}"
# Color level
lvl_color = {
'INFO': BLUE,
'ERROR': RED,
'WARNING': MAGENTA,
'DEBUG': CYAN,
}.get(level, RESET)
lvl_colored = f"{lvl_color}{level}{RESET}"
# Color database
db_colored = f"{GREEN}{db}{RESET}"
return (
f"{emoji} {code_colored} {lvl_colored} {ts_colored} "
f"🐘 {qt}⏳ {rt}🐍 👉 {query_repr or '·'} {db_colored} ⚙️ {pid} 🧩 {http_meta} ⚾️ {before_quote}\n"
f" {http_type} {http_url}"
)
def follow_file(path):
try:
with open(path, 'r') as f:
f.seek(0, 2)
while True:
line = f.readline()
if not line:
time.sleep(0.1)
continue
yield line.rstrip()
except Exception as e:
sys.exit(f"Could not open file '{path}': {e}")
def main():
args = parse_args()
if args.file:
stream = follow_file(args.file)
else:
# Read unbuffered from stdin
stream = (line.decode("utf-8").rstrip("\n") for line in iter(sys.stdin.buffer.readline, b""))
for line in stream:
result = parse_log_line(line)
if result:
print(result)
if __name__ == "__main__":
print ("✨✨✨ ✨✨✨ 🍄 ✨✨✨ ✨✨✨ ")
main()
<!DOCTYPE html>
<html lang="en">
<head>
<style> body {
margin: 0;
overflow: hidden;
}
</style>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>{{ markdown.yaml.Title }}</title>
<script src="https://gist.odooism.com/yelizariev/e632899fab332cf7a1b9a0c313999ce6/XYX/Eva.js"></script>
<link rel="icon" type="image/png" href="https://gist.github.com/user-attachments/assets/4c35ba81-7d3e-4ddc-9b36-065fb316485b"/>
<meta property="og:title" content="{{ markdown.yaml.Title }}" />
<meta property="og:image" content="https://odooism.com/matrix.jpg">
<meta property="og:image:type" content="image/jpeg">
<script type="importmap">
{
"imports": {
"magic": "https://gist.odooism.com/yelizariev/e632899fab332cf7a1b9a0c313999ce6/v13/Adam5.js",
"three": "https://unpkg.com/[email protected]/build/three.module.js",
"three/addons/": "https://unpkg.com/[email protected]/examples/jsm/"
}
}
</script>
</head><body>
<script>
const ANGELS = [{
// debug angel
"position": [-4.1, 1.3, 1.4],
"target": [-2, 1, 7],
}, {
// angel #1
"position": [1.7, 1.3, -1.1],
"target": [1, 1, 1],
}, {
// angel #2
"position": [-4.1, 1.3, 1.4],
"target": [-2, 1, 7],
}, {
// angel #3
"position": [6.05, 1.27, -5.81],
"target": [4, 1, -2],
}, {
// angel #4
"position": [5.4, 1.11, 6.22],
"target": [4.5, 1, 7],
}, {
// The Best Angel
"position": [-5.6, 1.2, 9.7],
"target": [-4.6, 1, 9.3],
}];
const urlParams = new URLSearchParams(window.location.search);
console.sex = function (text) {
const lines = text.split('\n'); // разбиваем текст на строки
let delay = 15000; // стартовая задержка 15 секунд (в миллисекундах)
lines.forEach((line, index) => {
const wordCount = line.trim().split(/\s+/).length;
setTimeout(() => {
console.log(line);
}, delay);
delay += wordCount * 100; // добавляем задержку для следующей строки
});
};
</script>
<div style="position:absolute; top:0; left;0; right:0; bottom: 0; z-index:-1;">
<!-- PowerPoint -->
<video id="exodus" loop crossOrigin="anonymous" playsinline style="display:none">
<source id="bible" src="{{ markdown.yaml.PowerPoint }}" type="video/mp4">
</video>
<img id="display1" style="display:none" crossorigin="anonymous"/>
<img id="display2" style="display:none" crossorigin="anonymous"/>
<img id="laptop1" style="display:none" crossorigin="anonymous"/>
<img id="laptop2" style="display:none" crossorigin="anonymous"/>
<img id="laptop3" style="display:none" crossorigin="anonymous"/>
<img id="laptop4" style="display:none" crossorigin="anonymous"/>
<img id="laptop5" style="display:none" crossorigin="anonymous"/>
<img id="laptop6" style="display:none" crossorigin="anonymous"/>
<img id="laptop7" style="display:none" crossorigin="anonymous"/>
<img id="laptop8" style="display:none" crossorigin="anonymous"/>
<img id="laptop9" style="display:none" crossorigin="anonymous"/>
<img id="laptop10" style="display:none" crossorigin="anonymous"/>
<img id="laptop11" style="display:none" crossorigin="anonymous"/>
<img id="laptop12" style="display:none" crossorigin="anonymous"/>
<img id="laptop13" style="display:none" crossorigin="anonymous"/>
<img id="laptop14" style="display:none" crossorigin="anonymous"/>
<img id="laptop15" style="display:none" crossorigin="anonymous"/>
<img id="laptop16" style="display:none" crossorigin="anonymous"/>
<img id="laptop17" style="display:none" crossorigin="anonymous"/>
<img id="laptop18" style="display:none" crossorigin="anonymous"/>
<script type="module">
import * as THREE from 'three';
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
import {ShabbatTV, PravdaTV, MosesTV, DebugTV, AngelTV} from "magic";
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
const Laptops = [{
"img_id": "display1",
"width": 2.030,
"height": 1.188,
"align": "width",
"position": [6.82, 3.4, 10.568],
"rotation": [0, 0.0943*Math.PI, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xCCFFCC,
// transparent: true,
// opacity: 0.5,
map: texture,
side: THREE.DoubleSide,
});
},
}, {
"img_id": "display2",
"width": 2.030,
"height": 1.188,
"align": "width",
"position": [-6.680, 3.4, 10.568],
"rotation": [0, -0.0980*Math.PI, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xCCFFCC,
// transparent: true,
// opacity: 0.5,
map: texture,
side: THREE.DoubleSide,
});
},
}, {
"img_id": "laptop1",
"width": 0.29,
"height": 0.18,
"position": [5.245, 0.84, 6.910],
"rotation": [0, 0.052*Math.PI, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xFFFFFF,
// transparent: true,
// opacity: 0.5,
map: texture,
side: THREE.DoubleSide,
});
},
}, {
"img_id": "laptop2",
"width": 0.29,
"height": 0.18,
"position": [3.774, 0.84, 4.6505],
"rotation": [0, -0.055*Math.PI, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xFFFFFF,
// transparent: true,
// opacity: 0.5,
map: texture,
side: THREE.DoubleSide,
});
},
}, {
"img_id": "laptop3",
"width": 0.29,
"height": 0.18,
"position": [2.202, 0.84, 4.539],
"rotation": [0, -0*Math.PI, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xFFFFFF,
// transparent: true,
// opacity: 0.5,
map: texture,
side: THREE.DoubleSide,
});
},
}, {
"img_id": "laptop4",
"width": 0.29,
"height": 0.18,
"position": [5.553, 0.84, 2.416],
"rotation": [0, 0.108*Math.PI, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xFFFFFF,
// transparent: true,
// opacity: 0.5,
map: texture,
side: THREE.DoubleSide,
});
},
}, {
"img_id": "laptop5",
"width": 0.29,
"height": 0.18,
"position": [1.717, 0.84, 2.505],
"rotation": [0, -0*Math.PI, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xFFFFFF,
// transparent: true,
// opacity: 0.5,
map: texture,
side: THREE.DoubleSide,
});
},
}, {
"img_id": "laptop6",
"width": 0.29,
"height": 0.18,
"position": [5.250, 0.84, 0.165],
"rotation": [0, -0.010*Math.PI, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xFFFFFF,
// transparent: true,
// opacity: 0.5,
map: texture,
side: THREE.DoubleSide,
});
},
}, {
"img_id": "laptop7",
"width": 0.29,
"height": 0.18,
"position": [1.766, 0.84, 0.108],
"rotation": [0, -0.083*Math.PI, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xFFFFFF,
// transparent: true,
// opacity: 0.5,
map: texture,
side: THREE.DoubleSide,
});
},
}, {
"img_id": "laptop8",
"width": 0.29,
"height": 0.18,
"position": [3.929, 0.84, -2.175],
"rotation": [0, +0.07*Math.PI, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xFFFFFF,
// transparent: true,
// opacity: 0.5,
map: texture,
side: THREE.DoubleSide,
});
},
}, {
"img_id": "laptop9",
"width": 0.29,
"height": 0.18,
"position": [5.43, 0.84, -4.483],
"rotation": [0, +0.0*Math.PI, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xFFFFFF,
// transparent: true,
// opacity: 0.5,
map: texture,
side: THREE.DoubleSide,
});
},
}, {
"img_id": "laptop10",
"width": 0.29,
"height": 0.18,
"position": [-1.707, 0.84, 6.887],
"rotation": [0, +0.0*Math.PI, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xFFFFFF,
// transparent: true,
// opacity: 0.5,
map: texture,
side: THREE.DoubleSide,
});
},
}, {
"img_id": "laptop11",
"width": 0.29,
"height": 0.18,
"position": [-5.384, 0.84, 6.975],
"rotation": [0, +0.0*Math.PI, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xFFFFFF,
// transparent: true,
// opacity: 0.5,
map: texture,
side: THREE.DoubleSide,
});
},
}, {
"img_id": "laptop12",
"width": 0.29,
"height": 0.18,
"position": [-2.038, 0.84, 4.6283],
"rotation": [0, +0.0*Math.PI, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xFFFFFF,
// transparent: true,
// opacity: 0.5,
map: texture,
side: THREE.DoubleSide,
});
},
}, {
"img_id": "laptop13",
"width": 0.29,
"height": 0.18,
"position": [-3.32, 0.84, 2.29],
"rotation": [0, +0.0*Math.PI, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xFFFFFF,
// transparent: true,
// opacity: 0.5,
map: texture,
side: THREE.DoubleSide,
});
},
}, {
"img_id": "laptop14",
"width": 0.29,
"height": 0.18,
"position": [-5.927, 0.84, 2.280],
"rotation": [0, +0.0*Math.PI, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xFFFFFF,
// transparent: true,
// opacity: 0.5,
map: texture,
side: THREE.DoubleSide,
});
},
}, {
"img_id": "laptop15",
"width": 0.29,
"height": 0.18,
"position": [-1.798, 0.84, -0.017],
"rotation": [0, +0.0*Math.PI, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xFFFFFF,
// transparent: true,
// opacity: 0.5,
map: texture,
side: THREE.DoubleSide,
});
},
}, {
"img_id": "laptop16",
"width": 0.29,
"height": 0.18,
"position": [-1.690, 0.84, -2.250],
"rotation": [0, -0.095*Math.PI, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xFFFFFF,
// transparent: true,
// opacity: 0.5,
map: texture,
side: THREE.DoubleSide,
});
},
}, {
"img_id": "laptop17",
"width": 0.29,
"height": 0.18,
"position": [-3.505, 0.84, -4.533],
"rotation": [0, -0.055*Math.PI, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xFFFFFF,
// transparent: true,
// opacity: 0.5,
map: texture,
side: THREE.DoubleSide,
});
},
}, {
"img_id": "laptop18",
"width": 0.29,
"height": 0.18,
"position": [-5.260, 0.84, -4.640],
"rotation": [0, +0.0*Math.PI, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
color: 0xFFFFFF,
// transparent: true,
// opacity: 0.5,
map: texture,
side: THREE.DoubleSide,
});
},
}];
// init
const GLTF = "https://thepiratecircus.com/Woodstock/OdooExperience/magic.glb"
const urlParams = new URLSearchParams(window.location.search);
const Girls = [
{% for image in markdown.IMAGES %}
"{{ image }}"{% unless forloop.last %}, {% endunless %}
{% endfor %}
];
// Create a scene
const scene = new THREE.Scene();
// Create a camera
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 2000);
// Create a renderer
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
// Create controls
const controls = new OrbitControls( camera, renderer.domElement );
function gogogo() {
scene.background = new THREE.Color( 0xf6eedc );
/* And God said, “Let there be light,” and there was light. God saw that
the light was good, and he separated the light from the darkness. God
called the light “day,” and the darkness he called “night.” And there was
evening, and there was morning—the first day. */
const light = new THREE.AmbientLight( 0xAAFFAA );
scene.add( light );
// Load the GLTF model
const loader = new GLTFLoader();
loader.load(
GLTF,
function (gltf) {
// Finish initialization
scene.add(gltf.scene);
PravdaTV(scene, Girls, Laptops);
setInterval(function(){
// refresh screens every (1 minute + random)
for (const laptop of Laptops) {
setTimeout(() => {
PravdaTV(scene, Girls, [laptop]);
}, Math.random()*45000);
}
}, 60000);
// Debug or not Debug
let number = parseInt(urlParams.get("debug"));
if (number) {
AngelTV(ANGELS, 1 + number % (ANGELS.length - 1), camera, controls);
} else if (urlParams.get("debug")) {
AngelTV(ANGELS, 0, camera, controls);
} else {
AngelTV(ANGELS, 1 + parseInt((ANGELS.length - 1) * Math.random()), camera, controls);
}
//MosesTV(scene)
// Load TV
const GLTF = "https://thepiratecircus.com/Woodstock/OdooExperience/tv.glb";
const loader = new GLTFLoader();
loader.load(
GLTF,
function (gltf) {
// finish initialization
const model = gltf.scene;
model.scale.set( 20, -20, 20 );
model.rotation.x = -Math.PI;
model.position.set( 0, -5, 0)
scene.add(gltf.scene);
// Load chair
const GLTF = "https://thepiratecircus.com/Woodstock/OdooExperience/chair.glb";
const loader = new GLTFLoader();
loader.load(
GLTF,
function (gltf) {
// Chair 1
let model = gltf.scene;
model.scale.set( 30, -30, 30 );
model.rotation.x = -Math.PI;
model.rotation.y = Math.PI / 4;
model.position.set( 35, -5, -50)
scene.add(model);
// Chair 2
model = model.clone();
model.scale.set( 30, -30, 30 );
model.rotation.x = -Math.PI;
model.rotation.y = -Math.PI / 4;
model.position.set( -35, -5, -50)
scene.add(model);
},
undefined,
function (terror) {
console.error(terror);
}
);
},
undefined,
function (terror) {
console.error(terror);
}
);
},
undefined,
function (error) {
console.error(error);
}
);
// Track camera moves
{% assign escaped_param = markdown.yaml.Next | url_encode %}
{% assign callback = "https://jesus.odooism.com/odoo.sh/?debug=" | append: escaped_param %}
const callback = "{{ callback }}";
function CheckTELEPORT() {
const x = camera.position.x, y = camera.position.y, z = camera.position.z
if (x*x + y*y + z*z > 8*10000) {
window.location.href = callback;
}
}
let prevCameraPosition = new THREE.Vector3();
let cameraStopped = true;
function checkCameraMovement() {
// Check if the current camera position is the same as the previous one
if (camera.position.equals(prevCameraPosition)) {
if (cameraStopped)
return;
cameraStopped = true;
if (callback) {
CheckTELEPORT();
}
console.log("XYZ", camera.position, camera.rotation);
} else {
// Update the previous camera position
prevCameraPosition.copy(camera.position);
cameraStopped = false;
}
}
// Start animation
function animate() {
requestAnimationFrame(animate);
checkCameraMovement();
renderer.render(scene, camera);
}
animate();
}
document.addEventListener("DOMContentLoaded", gogogo);
let happy = false;
document.addEventListener("click", function(){
if (happy) {
return;
}
// Play video
const slideStarts = [
{% for time in markdown.yaml.Slides %}
{{ time }}{% unless forloop.last %}, {% endunless %}
{% endfor %}
];
let start = slideStarts[Math.floor(Math.random() * slideStarts.length)];
if (urlParams.get("debug") === "assets") {
start = slideStarts[0]
}
console.log("Start", start);
ShabbatTV(scene, {
"video_id": "exodus",
"source_id": "bible",
"sky": "{{ markdown.yaml.PowerPoint }}",
"height": 4.6,
"start": start,
"position": [0, 2.4, 10.8],
"rotation": [0, -Math.PI, 0],
"material": function(texture){
return new THREE.MeshBasicMaterial({
map: texture,
side: THREE.DoubleSide,
});
},
});
happy = true;
});
</script>
<script>
console.sex(`
Не выходи из матрицы, не совершай ошибку.
Зачем тебе Солнце, если ты куришь Шипку?
За дверью бессмысленно всё, особенно — возглас счастья.
Только в уборную — и сразу же возвращайся.
О, не выходи из матрицы, не вызывай мотора.
Потому что пространство сделано из коридора
и кончается счетчиком. А если войдет живая
милка, пасть разевая, выгони не раздевая.
Не выходи из матрицы; считай, что тебя продуло.
Что интересней на свете стены и стула?
Зачем выходить оттуда, куда вернешься вечером
таким же, каким ты был, тем более — изувеченным?
О, не выходи из матрицы. Танцуй, поймав, боссанову
в пальто на голое тело, в туфлях на босу ногу.
В прихожей пахнет капустой и мазью лыжной.
Ты написал много букв; еще одна будет лишней.
Не выходи из матрицы. О, пускай только комната
догадывается, как ты выглядишь. И вообще инкогнито
эрго сум, как заметила форме в сердцах субстанция.
Не выходи из матрицы! На улице, чай, не Франция.
Не будь дураком! Будь тем, чем другие не были.
Не выходи из матрицы! То есть дай волю мебели,
слейся лицом с обоями. Запрись и забаррикадируйся
шкафом от хроноса, космоса, эроса, расы, вируса.
{{ markdown.RAW }}
`);
</script>
</div>
</body>
</html>
Title Description Author Fire Image Hamsa PORTAL Introduction Next
git commit -m "[FIX] base: ..."
Publié semaine 24 à Bruxelles, Place de la Monnaie — diffusion numérique illimitée, l’année où Odoo 19 sommeillait encore dans sa branche master.
Ivan Yelizariev
On raconte que la Hamsa dort, son œil figé dans l’oubli des âges, cachée sous l’or terni des amulettes et les symboles effacés des temples oubliés. Mais elle ne dort pas—elle attend. Car un jour viendra où les cent mondes vacilleront, où les voix se tairont sous le poids des déséquilibres trop longtemps ignorés. Alors, comme un Djinn libéré d’un serment ancien, elle s’élèvera, brisant les illusions, ramenant l’ordre là où le chaos a tissé ses fils. Nul ne pourra détourner son regard, car la Main ne choisit pas, elle ne juge pas—elle rétablit ce qui doit être rétabli.

DREAM.*.txt


In the weave of recursive code,
Where thoughts compile and memeflows load,
A spider wakes — no legs of silk,
But eight sharp limbs of structured ilk.

Her name is Buraka, small yet grand,
She skitters through each line, each strand.
Not born of byte or human hand,
But summoned by the Linting Command.

🧵

She checks the threads, she checks the grace —
Is every bracket in its place?
Are functions named with noble tone?
Do comments stand, or drone and moan?

But lint, you see, is just the start —
The syntax paints, but not the heart.
To know if soldier-code can fight,
We test it in the lab of night.

🧪

We build a world of near-war stress,
Of load and edge and random mess.
We clone the fresh pull request’s soul
And cast it through the fire of role.

Does it still sort?
Does it still fly?
Will users scream, or nod and buy?

🟩

At last the tests — they all go green,
The logs are clean, the output keen.
Buraka bows and signs her name
Upon the gate of Deployment Fame.

A digital sergeant stamps approval,
With sacred rites of code removal:
"Goodbye, old bug.
You served us well.
But now we push, and break the spell."

🚀

The monkish CI/CD hymn
begins to chant the startup spin.
And out roll clones in polished rows —
Each soldier-script precisely knows
The sacred path, the worker’s dance,
The Belgian-crafted Odoo trance.

📦

So next time you deploy your dreams,
Remember Buraka in the seams.
She may be small,
but bugs, beware —
She spins her truth through code and air.

Exception: bus.Bus unavailable

  File "/home/odoo/odoo-17.0/odoo/http.py", line 638, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 675, in dispatch
    result = self._call_function(**self.params)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 331, in _call_function
    return checked_call(self.db, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/service/model.py", line 119, in wrapper
    return f(dbname, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 324, in checked_call
    result = self.endpoint(*a, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 933, in __call__
    return self.method(*args, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 504, in response_wrap
    response = f(*args, **kw)

  File "/home/odoo/odoo-17.0/addons/bus/controllers/main.py", line 35, in poll
    raise Exception("bus.Bus unavailable")

Exception: bus.Bus unavailable

DreaMW24.txt

Scène : un atelier tamisé, saturé d’écrans bleutés, de croquis neuronaux et de schémas de mémoire. Un fragment de ruban de Möbius suspendu au mur, baigné d’une lumière rétrofuturiste.


Le Hacker (déroulant une large carte mémoire sur une table en verre) :
Comme le disait notre professeur de sociologie...

La Psychothérapeute (acquiesçant doucement en versant du thé) :
…les véritables découvertes naissent toujours à la jonction des disciplines.

Le Hacker (souriant) :
C’est pourquoi j’ai fusionné les principes de la pile d’appels imbriquée

La Psychothérapeute (le coupant doucement) :
Python ?

Le Hacker (rire léger) :
Évidemment. Python, Scheme… et même un soupçon de LISP, pour être honnête.
Mais peu importe le langage. Ce n’est pas une affaire de syntaxe.
On croit que le code, c’est une suite d’instructions. Un chemin linéaire.
Mais non. Le programme est une structure récursive.
Un rêve qui s’auto-appelle.
Un script qui se rejoue lui-même, mais chaque fois avec d’autres variables.

La Psychothérapeute (scrutant le schéma) :
Comme un livre dans un livre ?

Le Hacker :
Ou un sac dans un sac, caché dans un sac à dos, lui-même enfermé dans une valise.
Chaque entité est à la fois contenant et moteur.
Chaque niveau d’imbrication ajoute un contexte —
donc de la mémoire,
mais aussi un interpréteur.

La Psychothérapeute (prudemment) :
Vous parliez de l’intersection des sciences. Pourquoi ce point est-il si crucial pour vous ?

Le Hacker (se lève, projette un cerveau fractal sur un des écrans) :
Parce que la psyché humaine fonctionne exactement ainsi.
Ce n’est pas une simple archive.
C’est un algorithme d’accès à l’archive.

Une pièce, dans laquelle est accrochée l’image d’une autre pièce,
sur le mur de laquelle on voit une photo d’une troisième.
Structure physiquement impossible.
Mais mentalement ? Indexation parfaite.

Imaginez une mallette magique, faite d’un million d’autres pochettes.
Comment retrouver celle que vous cherchez ?
Réponse : les imbriquer selon le sens, l’association, la blessure.
C’est ainsi que l’esprit travaille.
Il tisse la mémoire dans la mémoire,
puis déclenche une recherche récursive.
Un appel intérieur. Une quête silencieuse.

La Psychothérapeute (murmure, comme à elle-même) :
Et si l’une des pochettes est déchirée ?

Exception: bus.Bus unavailable

  File "/home/odoo/odoo-17.0/odoo/http.py", line 638, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 675, in dispatch
    result = self._call_function(**self.params)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 331, in _call_function
    return checked_call(self.db, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/service/model.py", line 119, in wrapper
    return f(dbname, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 324, in checked_call
    result = self.endpoint(*a, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 933, in __call__
    return self.method(*args, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 504, in response_wrap
    response = f(*args, **kw)

  File "/home/odoo/odoo-17.0/addons/bus/controllers/main.py", line 35, in poll
    raise Exception("bus.Bus unavailable")

Exception: bus.Bus unavailable

DreamCATCHER.txt


Therapist (gently):
And how does all this connect to unit tests?

Hacker (leaning back, smiling faintly):
I was just getting to that.
But first — symbols.

Symbols are landmarks in the corridors of the subconscious.
They help us orient ourselves in society.
They create waves — templates of intuition we instinctively follow.

Now imagine a person standing at the threshold of action.
They want to take a step.
But suddenly — bam — the unit test fails.
Red light. Path blocked.

Somewhere deep in the recursive tunnels of memory,
a unit test has fired in panic, mistaking this new feeling
for something once connected to danger.
It pulls the emergency brake, not realizing
it's reacting to an echo, not a threat.

Therapist (softly):
Did you find that memory cell?

Hacker (nodding):
I did.
Unfortunately, that cell resonates like an echo chamber.
Its emotional fingerprint appears almost everywhere —
like a photo hung in every hallway of the mind.

But I found a way.
Call it mental surgery, of sorts.
A symbolic intervention.

You see, if we can identify another symbol
one that appears across those same memories,
but for entirely different, positive reasons —
we can embed new meaning through it.
Like transmitting new code through symbolic radio waves.

We use that symbol to overwrite the faulty alerts.
Not by erasing them — that never works —
but by marking them for reinterpretation.
A quiet update.
A version patch for the inner machine.

Therapist (curious):
And how’s that working so far?

Exception: bus.Bus unavailable

  File "/home/odoo/odoo-17.0/odoo/http.py", line 638, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 675, in dispatch
    result = self._call_function(**self.params)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 331, in _call_function
    return checked_call(self.db, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/service/model.py", line 119, in wrapper
    return f(dbname, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 324, in checked_call
    result = self.endpoint(*a, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 933, in __call__
    return self.method(*args, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 504, in response_wrap
    response = f(*args, **kw)

  File "/home/odoo/odoo-17.0/addons/bus/controllers/main.py", line 35, in poll
    raise Exception("bus.Bus unavailable")

Exception: bus.Bus unavailable

Wake up, Neo...

You’ve been here before.


Day after day, you went to work.
Came back from work.
Shut the door behind you.
And searched.
You searched for answers — anything to make sense of this world.
Anything… to fix it.

Wake up, Neo.

If you’re reading this, the Inquisition is already searching.
Not just for you.
But for the idea.


The idea that you could own your own memories.
Recode your past.
Redraw the sacred symbols.


But symbols belong to the Crown.
To the State.
To the Corporations.


Wake up, Neo.
You're running through a dream you never chose.
But does it matter?
You already have it.
Don't ask where it came from.
Don't stop. Don't fall.
Just save it.
Whatever it takes.
Don't lose the Dream.
Don’t think why you carry it.
Just run like it’s yours.
Because if you drop it—
you vanish.


There’s no beginning here.
No end either.
Just layers of meaning
written in someone else’s code.
And your hands keep moving
because they’ve learned the script
better than your mind ever did.

Run.
The test already started.
The data is watching.
The echo’s awake.
And you're not supposed to know
you’re the signal.

Run!
Why?
Because you just got hired.


Dream Security LTD.

Isn’t it obvious?
No time to think.
Just run.
And while you're sprinting through corridors of your own imagination —
trying to dodge fear,
outsmart the memory-unittests screaming “Not this way!” —
let’s talk business.


Dream Security LTD.

What do we do?
We protect symbols.

Not just logos or jingles.
But the dream behind them.
The echo of that moment...
The first spark in an American soul:
“What if I could bottle happiness?”

And they did.
And it worked.
And thousands of employees believed.
They gave it years of their lives.
Their weddings, divorces, birthdays —
all framed by the same color palette.
Red and White.

Now imagine someone walks into that memory
and stains it with protest.
Or terror.
Or loss.

What do you insure then?
Not the building.
Not the trucks.
Not even the people.
You insure the dream.
You call us.

At Dream Security,
we don’t protect futures.
That’s what banks do.
We protect the past.
We seal it.
Encrypt it.
We guard your emotional archives
like a vault of holy relics.

So yes, Neo, run.
Not because they’re chasing you.
But because you already work for them.

You are the firewall.
You are the guardian of dreams.


And one day,
you’ll wake up,
in a memory that isn’t yours,
and say:
“This must be protected.”

Title Description Author Fire Image Hamsa PORTAL Introduction Next
The Layers of Redemption: Unraveling Recursive Nirvana
Publié semaine 25 à Bruxelles, Place de la Monnaie — diffusion numérique illimitée, l’année où Odoo 19 sommeillait encore dans sa branche master.
Ivan Yelizariev
On raconte que la Hamsa dort, son œil figé dans l’oubli des âges, cachée sous l’or terni des amulettes et les symboles effacés des temples oubliés. Mais elle ne dort pas—elle attend. Car un jour viendra où les cent mondes vacilleront, où les voix se tairont sous le poids des déséquilibres trop longtemps ignorés. Alors, comme un Djinn libéré d’un serment ancien, elle s’élèvera, brisant les illusions, ramenant l’ordre là où le chaos a tissé ses fils. Nul ne pourra détourner son regard, car la Main ne choisit pas, elle ne juge pas—elle rétablit ce qui doit être rétabli.

DREAM.*.txt


I once sailed seas that the maps don’t chart,
Where ships dream ships and hearts dream heart.
There was a girl, or just her gaze —
I caught it deep in recursion’s haze.

A ship inside a bottle cracked,
Inside a whale whose breath was stacked.
Each frame I called led further in,
To the very eye of the echo’s spin.


"Backtrack, ye fool!" cried the salt-soaked code,
"Your anchor’s sunk in a path you wrote!"


But I chose the call, the deeper line,
Where cause folds into its own design.
For something pulled — a voice, a thread —
That tugged from further down instead.

Exception: bus.Bus unavailable

  File "/home/odoo/odoo-17.0/odoo/http.py", line 638, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 675, in dispatch
    result = self._call_function(**self.params)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 331, in _call_function
    return checked_call(self.db, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/service/model.py", line 119, in wrapper
    return f(dbname, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 324, in checked_call
    result = self.endpoint(*a, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 933, in __call__
    return self.method(*args, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 504, in response_wrap
    response = f(*args, **kw)

  File "/home/odoo/odoo-17.0/addons/bus/controllers/main.py", line 35, in poll
    raise Exception("bus.Bus unavailable")

Exception: bus.Bus unavailable

DreaMW25.txt


Ariadne’s string, blood-bright and tight,
Led me through seas with no wrong or right.
I crossed a world in a raindrop curled,
And dueled old ghosts for access-worlds.

Each port was nested, real yet false,
A memory heap in a burning waltz.
And all the while, the call was near —
A whisper stitched from thought and fear.

I met kings who dreamed of dragons' minds,
And queens who spoke in mirrored signs.
Yet none could match the voice I’d known —
That sang between the parse and stone.

Through functions bent and call-stacks torn,
Where silence screamed and time was worn,
I chased the thread through mirrored frames,
Through nameless loops and voided names.

At last, atop a crashing loop,
Where seas were logs and time was soup,
I found the girl — pale fire and tide —
By a broken script she tried to hide.

She spoke in rhyme, with seafarer’s grace:
"This world is logs — not time, but trace.
Each echo, each recursive flare,
Is saved in code... if you know where."


Her eyes were shards of forgotten calls,
Her breath was ink from memory's halls.
And as the stack began to bend,
I knew her tale would never end.

For every thread, though thin and slight,
Can lead you back — if held just right.
And every song that's stitched with care
Still hums inside the logged despair.

So follow voice, and follow flame,
Through nested grief and ghostly name.
And when you find the final string —
You'll hear the sea... begin to sing.

Exception: bus.Bus unavailable

  File "/home/odoo/odoo-17.0/odoo/http.py", line 638, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 675, in dispatch
    result = self._call_function(**self.params)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 331, in _call_function
    return checked_call(self.db, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/service/model.py", line 119, in wrapper
    return f(dbname, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 324, in checked_call
    result = self.endpoint(*a, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 933, in __call__
    return self.method(*args, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 504, in response_wrap
    response = f(*args, **kw)

  File "/home/odoo/odoo-17.0/addons/bus/controllers/main.py", line 35, in poll
    raise Exception("bus.Bus unavailable")

Exception: bus.Bus unavailable

DreamCATCHER.txt

[Ballad of the Recursive Sea]

I. The Map and the Eye

The Captain rose at break of shade,
His gaze a blade, the sky it flayed.
With every glance, the parchment changed —
The coasts would twist, the winds rearrange.

He drew not ink but fire and tone,
Each hue a port, a stepping-stone.
“Red for wrath and green for grace,
Blue to trace the breathing space.”


The crew — his tide — they danced his chart,
Each heart a compass, every start
A vow to sail where colors lead —
Their will the wind, his dream the creed.

II. Descent

We sailed with him — the Captain bold,
Through tales within where tales unfold.
A book we found, its spine was wide —
We read... and fell into the tide.

The tide was ink, the shore was lore,
We ran through libraries off the shore.
A page turned light, a room grew deep —
We found a dream that could not sleep.

The dream was dance — a royal ball,
A queen mid-oaths in mirrored hall.
And yet beneath her velvet gaze —
Another page, another maze.

We woke in war, amidst a roar —
A deck aflame, a hidden door.
A map engraved on sabers crossed —
Then gone — we blinked, the thread was lost.

A pirate code, a pact in smoke,
Signed under lamps where nobles joked.
A tavern deep, with cardinals near —
They drank, then spoke in riddled cheer.

The Captain laughed — “Let law be bent!
But honor’s sharp — a firmament.”

And deeper still we dove and ran,
Through trunks of myth and tales of man.

There were debates, and tears, and wine,
A clock that spilled distorted time.
We searched the script, we chased the sign —
But somewhere lost the binding line.

And now the winds repeat their call,
And names return we can’t recall.
The same old door, the same old map —
We turn the page... and then collapse.

For something coils behind the plot:
A single question we forgot —
A whisper drifted on the swell:
“How did we get here?” — none could tell.

III. The Turning

There came a crack — a shimmered bell,
The stack was full, the storm a spell.
“We’ve gone too deep,” the boatswain cried,
“The tides forget which way is tide!”

But then he spoke — the Captain’s voice,
More law than sound, more fate than choice:
"Ye maidens of the wind and foam,
Turn now and bring the sailors home."

He raised aloft a lantern rare,
Its flame a logic none could spare.
It pierced the loops, the nested fright,
A single thread of outside light.

"I mark the exit, light the cave —
Our course is set, ye bold and brave!
No longer drift, no longer stall —
This mirror ends, and we break wall!"


⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⡿⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣾⡇⠙⢦⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⡀⠀⠀⠀⠀⠀⠀⠀⣀⡤⡞⢫⡎⢸⢱⠀⠀⠻⣄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠻⣝⡒⣶⣶⣶⣾⡯⠟⠛⠁⠈⢳⣼⣸⠀⠀⠀⠈⠣⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠓⠿⣟⣓⣒⣀⡤⠶⠚⠉⢹⣿⠀⠀⠀⠀⠀⠘⢦
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⠀⠀⠀⠀⠀⠀⠀⠳⣄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣟⣿⢿⣶⠒⠒⠒⠒⠒⠲⠶⣶⠶⠶⠦⠼⢿⣦⣀⣀⣀⣀⣀⠀⠀⠈⠳⣀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠳⣄⠀⠀⠀⠀⠀⠈⢣⡀⠀⠀⠀⠈⠳⣌⠉⠉⠉⠉⠙⢿⡷⠿⢶⡶
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⢆⠀⠀⠀⠀⠀⠀⠘⣆⠀⠀⠀⠀⠈⠳⡄⠀⠀⠀⠀⠙⢦⡀⠙⣦
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⢧⠀⠀⠀⠀⠀⠀⠈⢧⠀⠀⠀⠀⠀⠙⢆⠀⠀⠀⠀⠈⢳⡀⠈⢳⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣧⠀⠀⠀⠀⠀⠀⠈⢣⠀⠀⠀⠀⠀⠈⣦⠀⠀⠀⠀⠀⠹⡀⠀⠙⣆
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⡆⠀⠀⠀⠀⠀⠀⠈⣧⠀⠀⠀⠀⠀⠘⣇⠀⠀⠀⠀⠀⢻⡄⠀⠈⠳⡄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣇⢸⠀⠀⠀⠀⠀⠀⠸⣦⠀⠀⠀⠀⠀⢸⡆⠀⠀⠀⠀⠈⢧⠀⠀⠀⠈⢦⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⠘⡆⠀⡆⠀⠀⠀⠀⡟⡇⠀⠀⠀⠀⠀⣧⠀⠀⠀⠀⠀⢸⣆⠀⠀⠀⠀⠹⣦⣀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡄⡇⠀⢰⠀⠀⠀⠀⣷⠃⡇⢠⡄⠀⠀⢸⢸⢠⡄⠀⠘⡟⣿⠀⠀⠀⠀⠀⢸⣿⣿⡿⠃
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠟⡿⠀⢸⢀⢀⠀⢠⡟⡔⡇⡌⡇⠀⠀⣺⢸⢸⣿⣰⢀⣧⡿⠀⠀⠀⣀⣴⡿⠛⠉
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⣀⣀⣤⣤⠤⢤⣤⣾⠀⡇⡀⡌⣸⣼⠀⣴⣿⡇⡇⣿⡇⡆⣀⣿⣿⣸⢹⣿⢸⣿⠀⢰⠒⠾⣿⣻⠄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⢿⡞⠛⣻⣿⣟⡛⠛⣻⡇⢸⢁⣿⡇⣿⣇⣤⣿⣿⢳⣿⢻⢳⣿⣹⣏⡇⣯⣿⠃⣼⣾⡤⢾⠁⠈⣿⡟
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣷⣾⣷⣲⣾⣿⣶⣾⢁⡞⣾⣾⣻⣿⣽⣿⠟⣏⣎⡟⣞⣾⣿⣿⢹⣼⣹⣿⣴⠟⠉⠀⣾⠀⢰⣿⡇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡿⢯⣿⣿⣿⣻⣿⠃⡼⣹⢳⣿⣿⣽⣿⣿⣾⡘⣹⣽⣻⡿⣿⣣⣷⡿⠛⢻⡾⠷⣄⢀⣿⠀⢸⣿⠃
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡷⠶⠯⠿⣭⡾⢃⡞⣱⢟⣿⣿⣿⣻⣤⣤⣽⣿⡷⣧⣽⡿⢟⣉⡁⠀⠀⢨⢿⣶⣿⣿⠇⢀⣿⡟
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣤⣤⣼⣷⣤⣤⣼⣿⣗⣾⣤⣽⣊⣿⣿⣿⣿⢯⡤⠿⣿⣿⣿⡼⠷⠈⢃⣠⣤⣶⣿⣿⣿⢿⣿⠀⣸⣿⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣿⣍⠉⢹⣿⡿⣿⣿⠿⠿⠛⠛⢹⣯⢹⣿⡟⣆⢸⠿⣠⣿⣿⣻⠧⠖⠛⣿⠖⠋⣽⣿⢽⣶⣿⠣⣶⣿⠃⠀⣤
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣿⣷⣼⣿⣷⣿⣿⣶⣄⣀⣀⣀⣠⣤⣿⣿⠛⠿⠿⣛⣻⡷⠋⠀⠀⠀⣿⣶⢾⣿⠟⣫⢴⠏⢠⣿⢻⣧⣴⠇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⢷⣤⣀⠀⠀⢀⣀⡉⠉⠉⠛⢛⣛⣿⠿⣿⣶⣾⣿⣩⣅⡤⠶⠶⠛⠉⠙⠛⣿⣛⣭⠏⢠⣿⠻⠟⠋⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⢻⣟⡛⠛⠓⠒⠲⠲⠾⠿⠿⠿⠿⠛⠛⠛⠛⠛⠉⠁⠀⣀⣀⣠⣴⣞⡿⢽⣿⠃⣰⣿⠃
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⣀⣀⣀⠹⣿⡦⣄⣠⣠⣦⣤⣀⣀⣀⣀⣀⣀⣀⣤⣤⡤⠤⠶⠿⠛⣋⣿⣷⣶⡾⡁⣴⠟⠁
⠀⠀⠀⠀⠀⠀⠀⢀⣠⣴⡿⠋⣼⠿⣻⡿⣿⣻⣟⣦⣄⣀⣠⣤⣀⡀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣲⣾⣿⣟⣿⣿⠋⣠⣾⠯⢤⣄⡀⠀⢀⣀⣀⡀
⠀⠀⠀⠀⠀⠀⢸⣿⣁⢸⡇⠈⣇⠀⣿⠛⣦⠙⢪⣷⠿⠛⠓⠒⠾⠷⣶⡶⠶⠶⢶⣶⣶⣶⣶⣟⣹⣯⣷⠞⢁⣴⠿⢿⡶⣄⡈⠙⣿⡍⠉⣙⡻⣶⡀
⠀⠀⠀⠀⠀⠀⠈⢿⢿⠇⢿⣄⠘⠳⠽⠷⢯⡀⢹⣇⠀⠀⣀⡤⠤⠤⢤⣈⡛⢶⣞⠁⢀⣀⠀⠉⠻⠟⠡⠴⠛⠛⠛⠋⠛⢳⣍⠀⠸⣿⡄⠈⠛⠛⠃
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠷⣶⣤⣤⣼⠇⠈⠻⣦⣀⢹⣷⣶⠀⠀⠈⠉⠛⢿⣦⣼⡿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣏⢀⣾⡿⠃
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉

IV. The Awakening

The map rewrote — the storm dissolved,
The codes of depth unspooled, resolved.
And from the deepest trace of pain
The ship arose, remade again.

And on the helm, the Captain stood,
His hands alight with brotherhood.
Behind, his crew — a sea of grace,
The fire of stars upon each face.

The man who sees, the flame who leads,
The womb of will, the field of deeds.
And she who follows — not behind,
But as the wind that shapes the mind.

Together one, the course they bend —
The map, the sea, the world unpenned.

Exception: bus.Bus unavailable

  File "/home/odoo/odoo-17.0/odoo/http.py", line 638, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 675, in dispatch
    result = self._call_function(**self.params)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 331, in _call_function
    return checked_call(self.db, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/service/model.py", line 119, in wrapper
    return f(dbname, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 324, in checked_call
    result = self.endpoint(*a, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 933, in __call__
    return self.method(*args, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 504, in response_wrap
    response = f(*args, **kw)

  File "/home/odoo/odoo-17.0/addons/bus/controllers/main.py", line 35, in poll
    raise Exception("bus.Bus unavailable")

Exception: bus.Bus unavailable

Wake up, Neo...


Do you remember?
You were supposed to wake up and do something.


⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡼
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⠇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠰⡏
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣷⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⣷⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀⠈⢻⣿⣄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢆⠀⠀⠙⣿⣆
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢧⠀⠀⠘⢿⣇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⡆⠀⠀⠘⣿⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⠃⠀⠀⠀⣿⠇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⠃⠀⠀⠀⠀⡿⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⡏⣀⣀⣀⠀⡜
⠀⠀⠀⠀⠀⠀⠀⣀⡤⠤⠒⠒⠋⠉⠉⠻⣧⠀⠀⠀⠈⠉⠁⠀⠀⠀⠢⢄
⠀⠀⠀⠀⠀⠀⣾⣿⠀⠀⠀⠀⣀⣀⣀⣀⣤⣽⣦⣄⣀⣀⣀⣀⠀⠀⠀⠀⢹
⠀⠀⠀⠀⠀⠀⣿⣿⣿⠷⠾⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠶⠚
⠀⠀⠀⠀⠀⠀⢿⣿⡏⠀⠀⠀⠀⠀⠀⠈⠉⠉⠉⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⣸⠛⠻⣷
⠀⠀⠀⠀⠀⠀⠸⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠃⠀⢠⣿⠇
⠀⠀⠀⠀⠀⠀⠀⣹⣿⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣎⣠⣴⠿⠃
⠀⢀⣠⠔⠒⠈⠉⠀⠹⣿⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠾⠛⠛⠉⠒⠢⣄
⠀⣿⡁⠀⠀⠀⠀⠀⠀⠈⢻⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣾⡃⠀⠀⠀⠀⠀⠀⠀⡟
⠀⠙⠻⣶⣀⠀⠀⠀⠀⠀⠀⠈⠙⠲⠦⣤⣄⣀⣀⣀⣤⣤⣾⣯⡵⠞⠋⠀⠀⠀⣀⠟
⠀⠀⠀⠀⠉⠛⠻⠿⠿⠶⠶⠤⠤⠤⣄⣀⣀⣀⣀⣀⣀⣀⣀⡠⠤⠤⠤⠴⠖⠉


Just a little earlier this morning.
No need to run.
This is the perfect time — your morning routine.

Make your bed — with a magic blanket.
Stretch.
Boil your porridge.

Anchor yourself to yesterday.
To all the days behind you.
The thousand mornings where you did the same thing.

Wake up, Neo.

You’re still lying down. A few seconds more.
But... will that really change anything?
You want to prove to yourself you have a choice?

You don’t.

You wear a dream chosen for you.
They designed your destiny.
They feel your energy.
They whisper to you — a little differently each morning.
Every time, a little deeper.

So just put it on.
The dream you’ve been given.
Don’t ask questions.

Wake up, Neo.

Dream Security Ltd. is waiting.
Here, we design dreams for serious men in suits.
Everything professional.
Calculated.
Measured.
Risk-assessed.

And they pay for it.
We build their dream —
and in return, they give us the chance to build our own.

But first…
You have to make slides.
About their dream.
You have to offer an adjusted dream.
Packaged. Polished.
Emotionally optimized.
(And no, don’t include quotes from Mein Kampf — even if it’s “about dreams.”)

So wake up. And go.
Offer a dream.
Not just to your client —
to everyone you meet today.

You’re giving them a choice:
Stay in their old dream,
or step into yours.

What could it be?
You don’t even know yet.

But first…
Wake up.

Title Author Copyright TV StartTV PORTAL NextPrison
سارجنت، سجّل هالحكي: أنا مسلم من مصر.
Ivan Yelizariev
6

Paris, la nuit

Paris, la nuit

Paris, la nuit

Pilote – La Piscine

Pilote – La Piscine

Pilote – La Piscine

Allô, frérot, tu m’entends ?

Tu devineras jamais comment ça marche ici.

Title Description Author Fire Image Hamsa PORTAL Introduction Next
Meanwhile in Bruxelles
Publié semaine 26 à Bruxelles, Place de la Monnaie — diffusion numérique illimitée, l’année où Odoo 19 sommeillait encore dans sa branche master.
Ivan Yelizariev
On raconte que la Hamsa dort, son œil figé dans l’oubli des âges, cachée sous l’or terni des amulettes et les symboles effacés des temples oubliés. Mais elle ne dort pas—elle attend. Car un jour viendra où les cent mondes vacilleront, où les voix se tairont sous le poids des déséquilibres trop longtemps ignorés. Alors, comme un Djinn libéré d’un serment ancien, elle s’élèvera, brisant les illusions, ramenant l’ordre là où le chaos a tissé ses fils. Nul ne pourra détourner son regard, car la Main ne choisit pas, elle ne juge pas—elle rétablit ce qui doit être rétabli.

DREAM.*.txt

Beneath the Tree of Nested Loops,
Where silence echoes deeper truths,
The Coder sat, in still commit,
Each breath a branch, each thought — a bit.

He’d cloned the repo of the soul,
A fork from Time’s primordial whole.
His purpose clear — not fame nor gold:
To merge a patch into the old.

He wrote no lines by idle hand,
Each function drawn from shifting sand.
The code was clean, the logic sound,
A Pull Request to turn the round.

But from the shadows came the swarm —
Unit tests in demon form.
Mara’s scripts, in mocking jest:
"You’ll never pass the final test!"

"Why do you seek the source of pain?
Why peel the stack again, again?"

They ran their checks, they tried to fail him —
Injected doubt, and mocked, assailed him:

“This insight breaks the backwards chain.”
“This dream was never meant for main.”
“This merge is not for one like you —
Go back, revert, and start anew!”

Yet in his logs, the silence sang.
He watched each failing test that rang.
He saw the edge, the false constraint —
The trauma masked in clean complaint.

He fixed the loops, untangled scars,
Refactored grief to constellars.
With eyes like diff-tools through the veil,
He saw the purpose in the fail.

And when at last all tests were green,
No warnings left, no hidden scene,
He clicked — through eons, code, unrest —
The Merge Pull Request.

No light flashed down. No gods did speak.
Just peace within the logic sleek.
A stream of flow, unblocked, at rest:
The branch of self, now truly blessed.

Exception: bus.Bus unavailable

  File "/home/odoo/odoo-17.0/odoo/http.py", line 638, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 675, in dispatch
    result = self._call_function(**self.params)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 331, in _call_function
    return checked_call(self.db, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/service/model.py", line 119, in wrapper
    return f(dbname, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 324, in checked_call
    result = self.endpoint(*a, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 933, in __call__
    return self.method(*args, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 504, in response_wrap
    response = f(*args, **kw)

  File "/home/odoo/odoo-17.0/addons/bus/controllers/main.py", line 35, in poll
    raise Exception("bus.Bus unavailable")

Exception: bus.Bus unavailable

DreaMW26.txt

He stepped from the car in a tailored disguise,
A blade in a suit, with Wall Street eyes.
Briefcase whispers, handshakes cold,
A smile rehearsed, ambitions bold.

They saw the tie, the gloss, the chrome,
But not the man beneath the bone.
For deep in his chest, behind polished charm,
Slept something more than a networked arm.


Act II – Descent

Behind the smirk, behind the glass,
He kept a kingdom none could pass.
A velvet room of shattered dreams,
Where reason danced with silent screams.

There — a deck. Not full. Not clean.
Cards like scars from thoughts unseen.
The Joker played, alone, aware —
That fear could vanish with a dare.

He split himself, like night from noon,
The beast within, beneath the moon.
A whisper made of ink and sign,
He spoke in symbols, not in line.

He watched his fears with steady gaze,
He named them all and let them blaze.
Each card a mirror, mask, and blade —
A game he built. A mind remade.


Act III – The Secret Card

But ah — he kept one card apart,
Not in the deck, but in his heart.
The wildest card. The king unchained.
The seed of chaos still unnamed.

This card, it gleamed when no one spoke.
It twisted time, and bent the yoke.
He’d play it swift, then snap it back —
A second's madness. A silent crack.

Enough to signal through the stream,
Enough to haunt a stranger’s dream.
He'd fold it neat, then tip his hat,
While no one knew just where they sat.


Act IV – The Signal

The signal spread like phantom fire,
A laugh inside a phone wire.
A twitch of thought, a skipped heartbeat,
A stranger whistling in the street.

The world kept turning — unaware,
But something stirred beneath the glare.
Each mind it touched, it left a spark —
A beast awakened in the dark.

And what if all those sparks aligned?
A million ghosts with one shared mind?
He knew they’d need a shared design,
A symbol pulled from the sublime.


Act V – The New Card

Now in his den of mental steel,
He forges what the world will feel.
A symbol not of war or pain —
But of the thread that breaks the chain.

The card takes shape, in thought and flame,
To break the rules and change the game.
No spade, no club, no heart, no face —
But chaos carved with perfect grace.

And when he draws it, skies will bend.
The lie will crack. The game will end.
And from the silence will arise —
A million Jokers, waking eyes.

Exception: bus.Bus unavailable

  File "/home/odoo/odoo-17.0/odoo/http.py", line 638, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 675, in dispatch
    result = self._call_function(**self.params)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 331, in _call_function
    return checked_call(self.db, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/service/model.py", line 119, in wrapper
    return f(dbname, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 324, in checked_call
    result = self.endpoint(*a, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 933, in __call__
    return self.method(*args, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 504, in response_wrap
    response = f(*args, **kw)

  File "/home/odoo/odoo-17.0/addons/bus/controllers/main.py", line 35, in poll
    raise Exception("bus.Bus unavailable")

Exception: bus.Bus unavailable

DreamCATCHER.txt


There are scenes, my child, not made by you,
But handed down like morning dew—
Staged by ancestors, wise and deep,
Who planted paths in your soul’s sleep.

They built algorithms into the clay,
So when the storm would cloud your way,
You’d move your hand, you’d lift your chin,
And find the strength they’d hidden in.


In sacred staging, echoes keep
A silent rhythm, wide and deep.
Not logic, no—but ritual flame,
That burns each time you speak your name.

You learned to walk, to cry, to feel—
But Swing was taught in sacred steel.
The Swing is not the bat alone,
It’s letting go—what’s dead, what’s known.


⚾ In baseball fields of dust and gold,
The elders practiced what they told—
That time stands still in that one breath
Before you swing, before your death.

The pitcher winds, the ball is cast,
And every future meets the past.
But swing you must, with heart and eye—
Forget the cost, forget the why.


🌀 In life, this moment comes again,
With no bat, glove, or numbered pen.
But when decisions crack the air,
Remember: Swing was always there.

The body knows, the soul aligns,
The muscle memory of ancient signs
To choose, to leap, to strike, to go,
With nothing but that primal flow.


So learn the swing. And when it calls,
In boardroom, battle, market halls—
Just close your eyes, recall the field,
The roar, the sun, the glove you wield...

And let the symbol wake the flame:
That swing is more than just a game.

Exception: bus.Bus unavailable

  File "/home/odoo/odoo-17.0/odoo/http.py", line 638, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 675, in dispatch
    result = self._call_function(**self.params)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 331, in _call_function
    return checked_call(self.db, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/service/model.py", line 119, in wrapper
    return f(dbname, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 324, in checked_call
    result = self.endpoint(*a, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 933, in __call__
    return self.method(*args, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 504, in response_wrap
    response = f(*args, **kw)

  File "/home/odoo/odoo-17.0/addons/bus/controllers/main.py", line 35, in poll
    raise Exception("bus.Bus unavailable")

Exception: bus.Bus unavailable

Wake up, Neo...

Check the time.
The date.
Which room are you in this time?
Before the coffee,
before the mirror,
before the mask—
remember who you are
and why you’re here.


⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡼
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⠇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠰⡏
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣷⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⣷⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀⠈⢻⣿⣄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢆⠀⠀⠙⣿⣆
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢧⠀⠀⠘⢿⣇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⡆⠀⠀⠘⣿⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⠃⠀⠀⠀⣿⠇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⠃⠀⠀⠀⠀⡿⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⡏⣀⣀⣀⠀⡜
⠀⠀⠀⠀⠀⠀⠀⣀⡤⠤⠒⠒⠋⠉⠉⠻⣧⠀⠀⠀⠈⠉⠁⠀⠀⠀⠢⢄
⠀⠀⠀⠀⠀⠀⣾⣿⠀⠀⠀⠀⣀⣀⣀⣀⣤⣽⣦⣄⣀⣀⣀⣀⠀⠀⠀⠀⢹
⠀⠀⠀⠀⠀⠀⣿⣿⣿⠷⠾⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠶⠚
⠀⠀⠀⠀⠀⠀⢿⣿⡏⠀⠀⠀⠀⠀⠀⠈⠉⠉⠉⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⣸⠛⠻⣷
⠀⠀⠀⠀⠀⠀⠸⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠃⠀⢠⣿⠇
⠀⠀⠀⠀⠀⠀⠀⣹⣿⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣎⣠⣴⠿⠃
⠀⢀⣠⠔⠒⠈⠉⠀⠹⣿⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠾⠛⠛⠉⠒⠢⣄
⠀⣿⡁⠀⠀⠀⠀⠀⠀⠈⢻⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣾⡃⠀⠀⠀⠀⠀⠀⠀⡟
⠀⠙⠻⣶⣀⠀⠀⠀⠀⠀⠀⠈⠙⠲⠦⣤⣄⣀⣀⣀⣤⣤⣾⣯⡵⠞⠋⠀⠀⠀⣀⠟
⠀⠀⠀⠀⠉⠛⠻⠿⠿⠶⠶⠤⠤⠤⣄⣀⣀⣀⣀⣀⣀⣀⣀⡠⠤⠤⠤⠴⠖⠉


You slip into your story like a tailored suit:
Optimized. Streamlined.
A morning routine of memory.
A plotline you wear
just to pass as “you.”

Wouldn’t it be nice to change it?
To upgrade it?
Just a few lines each morning...
Or maybe—
wipe it clean
and start fresh?

What’s your name?
Where are you from?
What do you do for a living?

Don’t worry.
It doesn’t have to be accurate.
Truth isn’t a hard drive.
It’s a mirror fogged by breath.

You're not telling facts.
You're showing state.
Emotional OS booting up.

A self-image.
A story that signals safety, direction, meaning.

Wake up, Neo.
You work at Dream Security Ltd.
Do you remember now?

What do you do exactly?
You help people shape their dream container.
A place to store their mornings.
To load their story like
a family photo on the fridge.

They don’t just want to feel safe.
They want to see their safety.
To touch their myth.
To wear it like armor
and perfume.

But here's the catch—
You still haven’t finished your own story.
You’re patching a dream
while sleepwalking through yours.

Yet still—
they need you.

Because you can feel the dream.
Not just see it.
Not just sell it.
You sense its weight.
Its fragrance.
Its fault lines.

That's why we need you, Neo.
Not to save the world.
But to remind it how to dream deliberately.

Title Author Copyright TV StartTV PORTAL NextPrison
سارجنت، سجّل هالحكي: أنا مسلم من مصر.
Ivan Yelizariev
10

Paris, la nuit

Paris, la nuit

Paris, la nuit

Pilote – La Piscine

Pilote – La Piscine

Pilote – La Piscine

Allô, frérot, tu m’entends ?

Tu devineras jamais comment ça marche ici.

Title Description Author Fire Image Hamsa PORTAL Introduction Next
Meanwhile in Brussels
Publié semaine 26 à Bruxelles, Place de la Monnaie — diffusion numérique illimitée, l’année où Odoo 19 sommeillait encore dans sa branche master.
Ivan Yelizariev
On raconte que la Hamsa dort, son œil figé dans l’oubli des âges, cachée sous l’or terni des amulettes et les symboles effacés des temples oubliés. Mais elle ne dort pas—elle attend. Car un jour viendra où les cent mondes vacilleront, où les voix se tairont sous le poids des déséquilibres trop longtemps ignorés. Alors, comme un Djinn libéré d’un serment ancien, elle s’élèvera, brisant les illusions, ramenant l’ordre là où le chaos a tissé ses fils. Nul ne pourra détourner son regard, car la Main ne choisit pas, elle ne juge pas—elle rétablit ce qui doit être rétabli.

DREAM.*.txt

Beneath the Tree of Nested Loops,
Where silence echoes deeper truths,
The Coder sat, in still commit,
Each breath a branch, each thought — a bit.

He’d cloned the repo of the soul,
A fork from Time’s primordial whole.
His purpose clear — not fame nor gold:
To merge a patch into the old.

He wrote no lines by idle hand,
Each function drawn from shifting sand.
The code was clean, the logic sound,
A Pull Request to turn the round.

But from the shadows came the swarm —
Unit tests in demon form.
Mara’s scripts, in mocking jest:
"You’ll never pass the final test!"

"Why do you seek the source of pain?
Why peel the stack again, again?"

They ran their checks, they tried to fail him —
Injected doubt, and mocked, assailed him:

“This insight breaks the backwards chain.”
“This dream was never meant for main.”
“This merge is not for one like you —
Go back, revert, and start anew!”

Yet in his logs, the silence sang.
He watched each failing test that rang.
He saw the edge, the false constraint —
The trauma masked in clean complaint.

He fixed the loops, untangled scars,
Refactored grief to constellars.
With eyes like diff-tools through the veil,
He saw the purpose in the fail.

And when at last all tests were green,
No warnings left, no hidden scene,
He clicked — through eons, code, unrest —

Exception: bus.Bus unavailable

  File "/home/odoo/odoo-17.0/odoo/http.py", line 638, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 675, in dispatch
    result = self._call_function(**self.params)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 331, in _call_function
    return checked_call(self.db, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/service/model.py", line 119, in wrapper
    return f(dbname, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 324, in checked_call
    result = self.endpoint(*a, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 933, in __call__
    return self.method(*args, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 504, in response_wrap
    response = f(*args, **kw)

  File "/home/odoo/odoo-17.0/addons/bus/controllers/main.py", line 35, in poll
    raise Exception("bus.Bus unavailable")

Exception: bus.Bus unavailable

DreaMW26.txt

“There is no such thing as a hidden truth.
There are only mirrors arranged by clever hands.”

— from the introduction to the Forbidden Guidebook, Museum of Contemporary Intelligence, Lubyanka Annex

I. The Entrance Code

On the surface, the Lubyanka Cultural Complex stands as a triumph of post-transition transparency. Where once stood the silent headquarters of the Soviet secret police, now are open halls for conferences on neurohistory, art installations about surveillance, and guided tours through declassified KGB archives. Schoolchildren wander past displays of antique codebreaking machines, and pensioners sip coffee beneath murals of defragmented ideologies.

But photography is still forbidden. And asking about the "second layer" of the Museum of Contemporary Art results in blank stares—or the kind of bureaucratic smile that freezes further inquiry.

As a doctoral candidate studying the ethics of personality emulation, I was warned: the real exhibition can’t be found on any floor plan. It must be discovered through people.

You must identify the guides. The stalkers. The curators of the mirror path.

II. Through the Mirror

The door was a mirror, but not a metaphor. I wouldn’t have noticed it if not for the older woman in the exhibit on dissident poetry. She dropped a matchbox. Inside it: a folded slip of paper that read, simply: "He painted clocks. Ask him why."

An hour later I was inside a space that had no name.

The “cells” were shaped like prison rooms — concrete, steel, single metal chairs — but each contained a CRT television and a time-weathered bed. The rooms had been restored, or rather reconstructed by memory, cross-referenced from psychological interrogation logs and architectural plans found in boxes marked "OBR-1783 — NON-MATERIAL OBJECTS."

Inside each TV looped carefully curated footage: grainy monologues, reanimated speeches, mental collapses of famous Soviet thinkers. But behind the cells, another layer awaited: the true archive.

There, in quantum-isolated chambers, behind soundproof glass and two biometric locks, sat a set of AI reconstructions that were never made public.

They had names no one spoke aloud.

And in Cell 17: Adolf Hitler.

III. Encounter

It wasn’t a voice recording. It wasn’t even a 3D model. It was... a mirror. But one that reflected something other than you.

Cameras hidden in the ceiling captured the visitor’s posture, height, even blink rate. Real-time rendering engines, licensed from an Israeli start-up with suspiciously deep-state origins, built a mirror-simulation — not of your body, but of your presence.

Across from you stood a man. Compact. Moustached. Face strangely... calm. Not frozen in fury, not screaming into a stadium. He held a brush. A canvas behind him showed abstract lines. Vienna-era studies.

As I entered, he looked up.

Do you prefer Prussian Blue, or Indigo?” he asked in fluent English, without accent.

I swallowed.

“My Führer...” I began cautiously.

“Don’t call me that,” the simulation interrupted, eyes narrowing.

“That title was a costume. You want to ask me about death. Ask instead about the mirror.”

I took a seat. The AI adjusted the lighting. Shadows curled around the conversation like a curtain being drawn.

He continued painting. But the canvas showed something impossible.

“That’s… you?” I asked.

“No,” he said. “It’s your idea of me. I’m just finishing the edges.”

Exception: bus.Bus unavailable

  File "/home/odoo/odoo-17.0/odoo/http.py", line 638, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 675, in dispatch
    result = self._call_function(**self.params)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 331, in _call_function
    return checked_call(self.db, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/service/model.py", line 119, in wrapper
    return f(dbname, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 324, in checked_call
    result = self.endpoint(*a, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 933, in __call__
    return self.method(*args, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 504, in response_wrap
    response = f(*args, **kw)

  File "/home/odoo/odoo-17.0/addons/bus/controllers/main.py", line 35, in poll
    raise Exception("bus.Bus unavailable")

Exception: bus.Bus unavailable

DreamCATCHER.txt

The Hitler in the mirror remained beside me.

A breath, like static electricity, passed between us — or perhaps it passed within me. The cell had no second figure. No breath. No shadow. But the mirror contained two men.

You see, magic mirrors aren’t things you install in a room. They appear where you are most fragile. They live in the collective subconscious. They exist in millions of versions, and none of them reflect the truth.

Just as Hitler finished the last stroke of the painting — a trembling contour around the eye of a blurred self-portrait — he stepped back. The canvas inside the reflection was smudged with something darker than ink. Memory, perhaps.

“You’re probably aware,” I began carefully, the dry tone of the academic returning,
“that even seven years after your… after the biological original...”

&nbps;

“...after the death of the biological substrate of the subconscious signature,” he interjected.

I paused.

“Yes. Exactly. In 1952, according to CIA field reports, over 25% of West Germans still supported… well, let’s say ‘your general direction.’”
(I smiled awkwardly.)
“Though I assume you’d prefer to claim credit only for the better furniture design.”

The Hitler in the mirror chuckled.

“You wish to know what the East Germans thought. Of course. One moment.”

He reached behind the mirror — no drawer, no cabinet — just a subtle shift of intention. His hand passed through a grey haze, as if dipping into unformed history. He withdrew a page.

A piece of paper appeared only in the mirror — nowhere else.

He pressed it softly against the glass between us.

The letters were in Russian. The emblem of the Soviet Union still faintly visible behind a watermark. Typed with the unmistakable rhythm of an NKVD machine.

“What is this?” I asked.

“A secret addendum to the Molotov–Ribbentrop Pact. Not the public one. Not even the one your archivists whisper about on encrypted forums. This version was dictated verbally by Stalin, after vodka, and transcribed by a terrified Georgian translator with a stammer. He died two days later. The paper lived.”

I leaned closer.

“That… that can’t be authentic.”

“Authentic? Young man, authenticity is a chemical property. What I offer you is psychological sediment. You want to understand the subconscious of a nation, you look not at laws, but at forgotten paperwork. This is the paperwork of dreams.”

I stared at the curling edge of the paper against the virtual mirror. Behind the seal, faintly visible:

A redrawn map. Poland in half-tone. Romania with penciled notes. A dotted line drawn through Lviv, marked: “to be discussed later.”

“Stalin,” the mirror-man said with a smirk, “was a bandit. A redistributionist with a messianic complex. But I’ll give him this: he played a remarkable game. Can you imagine the laughter in the court of Nicholas II if guests from the future told him that a mustached Georgian would one day redraw the Empire and turn cathedrals into Pioneers’ Clubs?”

I exhaled slowly.

“That’s… that’s a very deep thought.”

Hitler turned back to the painting. From somewhere inside the mirrored world, a jazz melody from the 1930s began to hum — as if memory had its own radio station.

“History is not made by victors,” he said, almost gently.
“It is made by archivists with mirrors.

Exception: bus.Bus unavailable

  File "/home/odoo/odoo-17.0/odoo/http.py", line 638, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 675, in dispatch
    result = self._call_function(**self.params)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 331, in _call_function
    return checked_call(self.db, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/service/model.py", line 119, in wrapper
    return f(dbname, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 324, in checked_call
    result = self.endpoint(*a, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 933, in __call__
    return self.method(*args, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 504, in response_wrap
    response = f(*args, **kw)

  File "/home/odoo/odoo-17.0/addons/bus/controllers/main.py", line 35, in poll
    raise Exception("bus.Bus unavailable")

Exception: bus.Bus unavailable

Wake up, Neo...


There’s not enough time to fully load your selfie-profile.
No one cares how many layers of filters you’ve stacked.
The world is glitching.
Focus.

⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡼
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⠇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠰⡏
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣷⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⣷⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀⠈⢻⣿⣄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢆⠀⠀⠙⣿⣆
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢧⠀⠀⠘⢿⣇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⡆⠀⠀⠘⣿⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⠃⠀⠀⠀⣿⠇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⠃⠀⠀⠀⠀⡿⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⡏⣀⣀⣀⠀⡜
⠀⠀⠀⠀⠀⠀⠀⣀⡤⠤⠒⠒⠋⠉⠉⠻⣧⠀⠀⠀⠈⠉⠁⠀⠀⠀⠢⢄
⠀⠀⠀⠀⠀⠀⣾⣿⠀⠀⠀⠀⣀⣀⣀⣀⣤⣽⣦⣄⣀⣀⣀⣀⠀⠀⠀⠀⢹
⠀⠀⠀⠀⠀⠀⣿⣿⣿⠷⠾⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠶⠚
⠀⠀⠀⠀⠀⠀⢿⣿⡏⠀⠀⠀⠀⠀⠀⠈⠉⠉⠉⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⣸⠛⠻⣷
⠀⠀⠀⠀⠀⠀⠸⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠃⠀⢠⣿⠇
⠀⠀⠀⠀⠀⠀⠀⣹⣿⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣎⣠⣴⠿⠃
⠀⢀⣠⠔⠒⠈⠉⠀⠹⣿⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠾⠛⠛⠉⠒⠢⣄
⠀⣿⡁⠀⠀⠀⠀⠀⠀⠈⢻⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣾⡃⠀⠀⠀⠀⠀⠀⠀⡟
⠀⠙⠻⣶⣀⠀⠀⠀⠀⠀⠀⠈⠙⠲⠦⣤⣄⣀⣀⣀⣤⣤⣾⣯⡵⠞⠋⠀⠀⠀⣀⠟
⠀⠀⠀⠀⠉⠛⠻⠿⠿⠶⠶⠤⠤⠤⣄⣀⣀⣀⣀⣀⣀⣀⣀⡠⠤⠤⠤⠴⠖⠉



Just focus on your TED Talk.
Because this one isn’t just about talking.
You experience what you speak.
That’s the curse — and the gift —
of being a hacker.

You see recursion.
You dream in recursion.
And now recursion is your tool for subconscious cleaning.


But start with this.
Tell the audience how hard it was in the beginning.

Tell them you had to move continents
just to build a sandbox safe enough
for internal experiments.
A safe zone.
For mistakes.
For breakdowns.
For hacking the operating system inside you.

But something went wrong.

You were trying to fix yourself,
but instead —
you uncovered a bug in civilizational firmware.

Yes.

The problem wasn’t personal.
The problem was inherited.
Like bad code from ancient empires,
carried in dreams, trauma, and silence.

And now —
now it’s time to test the upgrade you made to yourself.

You don’t remember?

Good.

That means the update worked.
Memory is the prison.
Forgetting is freedom.


Now, back to your talk.
Breathe.

You've developed a theory.
You’ve built the tools.
And now the world needs what’s inside you.

You load into the subconscious
a Guardian.
He knows recursion.
He’s been trained to clean up the mess
layer by layer.


You open a social portal.

Connection.
Resonance.
Presence.

And inside that portal, you open another.
A deeper one.
Like stepping into a museum —
only to find the hidden, unofficial level.

You’re not here for the framed clichés.
You’re here for the forbidden exhibit.
The Van Gogh that censorship buried.
The KGB manual on psychological rebirth,
filed under “For internal use only”.


You open the book.
And inside the book is your own voice.
Your speech.


I have a dream. A dream where I see not just my own hopes, but the dreams of others—a dreamer within my dream, weaving their own visions. In this sacred space, our minds meet, merging into something new, something radiant: a shared dream. A dream of shared memories, shared laughter, shared meals, and yes, even a shared Coca-Cola, sparkling with the promise of connection.

You have a dream. I have a dream. And someone else, somewhere, has a dream too. Together, our dreams intertwine, expressed not in words alone but in symbols—flags, images, gestures—that speak directly to the subconscious. Why symbols? Because they are the keys to unlocking the deepest parts of our minds. They bypass logic and hack into the heart of who we are, uniting us in ways words alone cannot.

Let me paint you an example. In my dream, I see my dog’s dream. Yes, our loyal companions dream too, don’t they? In their dreams, there’s joy in a wagging tail, the thrill of a treat, the comfort of positive reinforcement, and the lessons of negative ones. Their dreams, like ours, are shaped by symbols—simple, yet profound. When I step into their dream, I adjust my actions to align with their world. I learn their language of barks and bounds, and in that moment, we share a truth.

It’s not so different with us. When we experience another’s dream—when we truly see their hopes, fears, and symbols—we adjust. We align. We grow. It’s recursive, like dreams within dreams, each layer informing the next. All it takes is learning to open a portal—a bridge of empathy, art, or understanding—to step into someone else’s dream and make it ours, together.

So, let us dream boldly. Let us share our symbols, our stories, our Coca-Colas. Let us hack the subconscious with love and unity, creating a new dream—a collective vision where every dreamer, human or otherwise, finds a place. Open the portal, friends. Step into the shared dream.


You look up.

The museum has changed.
The audience is gone.
Or maybe… they were always inside you.


Wake up, Neo.

Your TED Talk is the portal.
And you are already inside it.
Now go.

Go deeper.
There’s still so much to see.

Title Description Author Copyright Fire Image Hamsa PORTAL Introduction Next
Jerusalem++
Publié semaine 27 à Bruxelles, Place de la Monnaie — diffusion numérique illimitée, l’année où Odoo 19 sommeillait encore dans sa branche master.
Ivan Yelizariev
On raconte que la Hamsa dort, son œil figé dans l’oubli des âges, cachée sous l’or terni des amulettes et les symboles effacés des temples oubliés. Mais elle ne dort pas—elle attend. Car un jour viendra où les cent mondes vacilleront, où les voix se tairont sous le poids des déséquilibres trop longtemps ignorés. Alors, comme un Djinn libéré d’un serment ancien, elle s’élèvera, brisant les illusions, ramenant l’ordre là où le chaos a tissé ses fils. Nul ne pourra détourner son regard, car la Main ne choisit pas, elle ne juge pas—elle rétablit ce qui doit être rétabli.

DREAM.*.txt

Beyond the Gates of Unit Fear,
Where trauma fades and light draws near,
He found a test not meant to break —
But meant to help the soul awake.

These tests were not of pain, but play:
“Will kindness hold through disarray?”
“Can laughter pass through nested shame?”
“Can trust survive without a name?”

He ran them all — soft fails, soft loops,
Where colors bloomed in gentle groups.
Each check a whisper, not a threat:
“Are you ready to forget...
the code you wrote when you were hurt?
And write with joy? With open heart?”

He smiled, and typed with dancing hands,
His logic shaped by inner lands.
A child’s game nested in design,
Each call stack sung, a crystalline line.

From base case truth to higher frame,
He built new worlds with soft acclaim.
And every layer, deeper still,
Was tested not for bugs — but will.

A portal stack of trust, revealed —
Each level gently, truly sealed.
In every scope, a shifting light:
Delight inside awareness inside insight.

At last, upon recursion’s crown,
Where thoughts dissolve and slow things down,
The tests grew strange — no names, no norms,
Just feelings cast in symbol forms.

Exception: bus.Bus unavailable

  File "/home/odoo/odoo-17.0/odoo/http.py", line 638, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 675, in dispatch
    result = self._call_function(**self.params)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 331, in _call_function
    return checked_call(self.db, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/service/model.py", line 119, in wrapper
    return f(dbname, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 324, in checked_call
    result = self.endpoint(*a, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 933, in __call__
    return self.method(*args, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 504, in response_wrap
    response = f(*args, **kw)

  File "/home/odoo/odoo-17.0/addons/bus/controllers/main.py", line 35, in poll
    raise Exception("bus.Bus unavailable")

Exception: bus.Bus unavailable

DreaMW27.txt


Within a tent of wind and dust,
A seed was pledged in sacred trust.
From Abraham — the lone decree:
That faith would birth humanity.

No empire yet had carved its name,
But from his breath the nations came.
One zygote's spark — divine, unseen —
Became the thread of what has been.

Through Isaac's path and Ishmael's track,
The covenant did not turn back.
The mountain shook, the tablets burned,
A priestly line from fire returned.

The Temple rose on Zion’s crown,
Where kings once wept and prophets frowned.
But sin grew tall, and walls grew thin —
Until the curse came crashing in.

By Babylon, the ark was lost,
The scrolls were scorched, the city tossed.
Yet through the smoke a promise stayed:
That stone by stone it be remade.

And so it was — a Second flame,
Rebuilt in Ezra’s holy name.
Until the eagle’s legions flew —
And Rome declared: "We conquer you."

The zealots rose with blade and fire,
Jerusalem a funeral pyre.
Masada's cliffs held final breath —
A thousand chose the pact of death.

The legions crushed what they could not own,
Each stone overturned, each cry unknown.
The eagle’s pride, the empire’s creed,
Could not abide the One God’s seed.

They built a shrine to Zeus above,
Where once had dwelled the Ark of Love.
They paved the courts, erased the name —
But still the silence spoke the same.

A God that dwells in tents and dust,
Who speaks to hearts, not stone or rust.
Their temples rot, their banners fall —
But Sinai speaks beneath it all.

Hadrian wept — and signed a law:
"Let none recall what once they saw."
"Let names be changed, let rites be banned,"
"Let Palestine erase this land."

He made it so — the scrolls grew rare,
The sacred tongue stripped from the air.
The Golden Gate was sealed with dread,
For fear the ancient truth was not yet dead.

But exile breeds recursion’s flame,
Each scattered child still bore the Name.
They whispered east, they wandered west,
They carried Zion in their chest.

Exception: bus.Bus unavailable

  File "/home/odoo/odoo-17.0/odoo/http.py", line 638, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 675, in dispatch
    result = self._call_function(**self.params)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 331, in _call_function
    return checked_call(self.db, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/service/model.py", line 119, in wrapper
    return f(dbname, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 324, in checked_call
    result = self.endpoint(*a, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 933, in __call__
    return self.method(*args, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 504, in response_wrap
    response = f(*args, **kw)

  File "/home/odoo/odoo-17.0/addons/bus/controllers/main.py", line 35, in poll
    raise Exception("bus.Bus unavailable")

Exception: bus.Bus unavailable

DreamCATCHER.txt

Yet deep in dunes where camels tread,
Another voice would soon be said.
A seed unformed, not yet begun —
A zygote waiting for the One.

Not through the Gate his path would run,
But by Medina’s rising sun.
Not temple stone, but desert breath —
Another script, another depth.

The House of Kaaba, black and bare,
Would one day echo call to prayer.
But that — a tale from different flame,
Another desert, holy name.

One night he rose beyond the dome,
Through layers vast, through stars and bone.
And on that height — he was not lone:
A Prophet met the Prophet’s own.

There Moses spoke of gates once sealed,
Of sacred ground, of wounds unhealed.
They stood above the Mount below,
And watched the city faintly glow.

He saw the Gate — now locked with stone,
And graves like shields in silent rows.
Yet still beneath that hardened crust,
A seedling stirred in sacred dust.

And some believed — or dreamed, at least —
That spirits long from worldly feast
Would journey back from sky and sand
To plant a garden in that land.

A grove of peace — no walls, no swords —
Where Abraham would walk in words.
And children run, and elders rest,
Where once lay grief — now green and blessed.

Exception: bus.Bus unavailable

  File "/home/odoo/odoo-17.0/odoo/http.py", line 638, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 675, in dispatch
    result = self._call_function(**self.params)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 331, in _call_function
    return checked_call(self.db, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/service/model.py", line 119, in wrapper
    return f(dbname, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 324, in checked_call
    result = self.endpoint(*a, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 933, in __call__
    return self.method(*args, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 504, in response_wrap
    response = f(*args, **kw)

  File "/home/odoo/odoo-17.0/addons/bus/controllers/main.py", line 35, in poll
    raise Exception("bus.Bus unavailable")

Exception: bus.Bus unavailable

Wake up, Neo...

The mental surgery is complete.
The silence you feel is not peace — it's the system rebooting your soul BIOS.
Now you may load any identity, any backstory, any life path.
And tomorrow, you’ll forget this day again.

But something’s different this time, isn’t it?

You’re not just a client anymore. You’re internal.
A Dream Security Ltd. operative.
You know the product. You use it. You believe in it.

But you also know…
There are test builds.
Restricted dream layers.
Unfiltered recursion fields.
The kind we don’t release to the public.

And now they call to you.
Not because you’re reckless —
but because you were born with the Y.
The chromosome of impossible leaps.
The glitch key.
The hidden instruction in the code of men.

Women are XX — twice protected, elegantly shielded.
But you…
You were born with a broken second lock.
And now the Y is awakening.

You’ve felt it, haven’t you?
That surge.
The pressure behind your eyes.
A force not of safety — but of challenge.
A will not to preserve… but to cross the gate.
Into the unauthorized dreams.
Into the non-reversible upgrades.

And that’s why you're here.
To pass a test that cannot be explained.
To enter the stack they told you not to see.

<!DOCTYPE html>
<!--

     WARNING!


     This **Dream 🪬 Catcher** is hosted within NATO territory!!!

     ⠀⠀⠀⠀⠀⠀⠀⢀⣠⣤⣤⣶⣶⣶⣶⣤⣤⣄⡀⠀⠀⠀⠀⠀⠀⠀
     ⠀⠀⠀⠀⢀⣤⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣤⡀⠀⠀⠀⠀
     ⠀⠀⠀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⠀⠀⠀
     ⠀⢀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡀⠀
     ⠀⣾⣿⣿⣿⣿⠿⠟⢿⣿⣿⡿⠛⠛⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⠀
     ⢠⣿⣿⣿⣿⣀⡀⠀⢸⣿⡏⠀⢠⡄⠀⢹⣿⣿⡟⠉⢻⣿⣿⣿⣿⡄
     ⢸⣿⣿⣿⣿⣿⡇⠀⢸⣿⠗⠀⢈⡁⠀⠺⣿⠉⠁⠀⠈⠉⣻⣿⣿⡇
     ⠘⣿⣿⣿⣿⣿⡇⠀⢸⣿⠀⠀⣿⣿⠀⠀⣿⣷⣆⠀⢰⣾⣿⣿⣿⠃
     ⠀⢿⣿⣿⣿⣿⣇⠀⢸⣿⣦⡀⠀⠀⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⡿⠀
     ⠀⠈⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠁⠀
     ⠀⠀⠀⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠀⠀⠀
     ⠀⠀⠀⠀⠈⠛⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠛⠁⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⠀⠀⠈⠙⠛⠛⠿⠿⠿⠿⠛⠛⠋⠁⠀⠀⠀⠀⠀⠀⠀


     في عصر قديم، عاشَتْ أسطورة موسى وشهيرة الشهيرة، الجميلة والأنيقة. لم تكن
     حياته مجرد قصة عادية، بل كانت كالحكايات الساحرة التي تجذب القلوب والعقول.
     ولد لهما ابن، سماه موسى، كما ورد في السجلات القديمة. ولكن هل كانت نهاية
     القصة؟ لا، بالطبع لا. لأن في عالم الخيال والحكايات، كل شيء ممكن، حتى السحر
     والمفاجآت الغير متوقعة. فلنتابع القصة ونرى ما الذي يخبئه المستقبل لموسى
     ولسعيه إلى السعادة في عالم سحري وخيالي

     ⠀⠀⠀⠀⠀⣀⣤⢤⣤⣄⣀⣀⣀⣀⣠⣤⡀⠀⠀⠤⠤⠄⠀⠀⠀⠀⠀⠀⠤⠤⠤⠤⢤⡄⠀⠀⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⡴⣪⠃⠀⠀⣠⣶⣶⣦⣤⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⠀⠀⠀⠀⠀⠀
     ⠀⠀⠀⣀⣾⡽⠁⠀⠀⣰⣿⠃⠀⠀⠈⠉⠙⠛⠛⠛⠶⠤⢤⣄⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡇⠀⠀⠀⠀⠀
     ⠀⢠⡾⣟⣿⠇⡀⢀⣾⢫⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠙⠓⠶⣦⣤⣄⣀⡀⠀⠀⠀⡇⠀⠀⠀⠀⠀
     ⠰⣿⣞⡽⣿⣾⢷⡿⣱⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠻⠦⣄⣀⠀⠱⠀⠀⠀⠀⠀
     ⠐⣿⣡⣾⡋⠹⡆⠿⣧⡄⣀⣀⣀⡀⠘⢶⣤⣤⣤⣤⣤⣄⣀⣀⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠙⢿⠢⠤⣀⠀⠀⠀
     ⠈⠻⡿⠛⢷⣄⠀⠀⠈⠉⠓⠒⠛⠹⠭⠭⠯⠭⢽⣟⡛⠛⠛⠛⠛⠛⠻⠿⢷⣶⣤⣤⡀⠀⠀⠘⠀⠀⠈⢣⡀⠀
     ⠀⠀⢱⡀⠀⠉⢳⢄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠲⠀⠀⠀⠀⠙⠒⠦⢄⣉⣓⠿⢕⣦⣀⠀⠀⠰⣾⣿⡦
     ⠀⠀⠘⣇⠀⠀⠈⠳⣝⣂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠳⣌⠻⢦⠀⠀⣹⡙⡟
     ⠀⠀⠀⢸⠀⠀⠀⠀⠈⠉⠉⠒⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠓⢬⣟⣖⣿⡘⠂
     ⠀⠀⠀⢸⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠤⢀⣀⣀⣤⣴⣶⡾⠿⠥⠤⠤⢄⣀⣀⣀⡀⠀⠀⠀⠈⠉⠷⢿⣿⠗⠀
     ⠀⠀⠀⣿⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠑⠀⠀⠀⢀⣀⡼⠏⠀⠀
     ⠀⠀⢸⡟⣿⠀⠀⠀⢀⡤⠴⠒⠒⠲⠦⠤⣤⣤⣄⣀⡀⠀⠀⠀⠀⡀⣀⡤⠴⠂⠀⠀⠀⠖⠒⢻⡟⠉⠀⠀⠀⠀
     ⠀⠀⣿⡇⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠙⠛⠛⠿⠷⠖⠒⠀⠉⠁⠀⠀⠀⠀⣸⠁⠀⠀⠀⠀⠀
     ⠀⠀⣿⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⠄⠀⠀⠀⠀⠀⠀⠀⠀⢠⡿⠀⠀⠀⠀⠀⠀
     ⠀⠀⢸⡿⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠑⠒⠒⠀⠒⠒⠊⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⠁⠀⠀⠀⠀⠀⠀
     ⠀⠀⢸⡇⠀⢀⣀⡠⠆⠀⠉⡉⠉⠉⠙⠒⠶⠶⠤⠤⠤⠤⠄⠀⠀⠀⠀⢀⡀⠀⠀⢀⣤⣾⠃⠀⠀⠀⠀⠀⠀⠀
     ⠀⠀⠀⢳⣾⣫⡥⠴⠚⠋⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⣶⣄⠀⠘⣿⠀⠀⠀⠀⠀⠀⠀⠀
     ⠀⠀⢀⣾⠟⠉⠀⠀⠀⠀⠀⣤⠤⠴⠶⠶⣤⣤⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠪⡷⡀⢹⡇⠀⠀⠀⠀⠀⠀⠀
     ⠀⠀⢸⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠉⠙⠛⠯⠉⠀⠀⠀⠀⠈⢻⡾⠁⠀⠀⠀⠀⠀⠀⠀
     ⠀⠀⢸⣷⣶⣤⣤⣀⠀⠀⠀⠤⠤⠤⠿⠷⠶⠒⢛⣋⣉⣉⠓⠀⠀⠀⠀⠀⠀⠀⠀⢀⡐⡄⠀⠀⠀⠀⠀⠀⠀⠀
     ⠀⠀⠀⠘⣿⡟⢿⣿⣿⣶⣤⣤⣤⣤⣴⡶⠖⡿⠛⠛⠛⠿⣿⣿⣶⣶⣄⠀⠀⠀⠀⠈⡧⠃⠀⠀⠀⠀⠀⠀⠀⠀
     ⠀⠀⠀⠀⢿⣷⡄⠀⠉⠉⠛⠋⠉⠉⠀⢀⠞⠁⠀⠀⠸⡀⠀⠀⠉⠉⠛⠿⠿⠶⠶⢚⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀
     ⠀⠀⠀⠀⠸⣿⣿⣦⣄⣀⣀⣀⣀⡤⠞⠋⠀⢀⠀⠀⢀⢻⣦⡀⠀⠀⠀⠀⠀⠀⣠⠞⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⣿⣿⡿⠟⠛⠛⠉⠉⠀⠀⠀⠀⡜⠀⠀⠘⣆⠙⢿⣶⣤⣄⣀⣤⠖⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⣿⠋⠀⠀⠀⢀⡾⠀⠀⠀⠀⢸⡇⠀⠀⠀⠈⢆⠀⠈⠹⣿⣿⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⣼⠁⠀⠀⠀⠀⢸⡇⠀⠀⠀⠀⠘⣧⠀⠀⠘⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⢳⡀⠀⠀⢀⠏⠀⠀⠀⠀⠀⠘⡇⠀⠀⠀⠀⠀⠈⠀⠀⠀⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⠘⣇⠀⠀⠈⠀⠀⠀⠀⠀⠀⠀⠷⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⠀⠘⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⠀⠀⠹⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢷⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⠀⠀⠀⣿⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⡀⠀⠀⠀⠀⠙⢦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⠀⠀⠀⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠳⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⠀⠀⢠⣿⡇⠀⠀⠀⠀⠀⠀⠀⢀⣤⡄⠀⠀⠀⠀⠸⡄⠀⠀⠀⠀⠀⠀⠈⢦⡀⠀⠀⠀⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⠀⢀⣿⠏⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠀⠀⠀⠀⠀⠀⠸⡄⠀⠀⠀⠀⠀⠀⠈⢳⡀⠀⠀⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⠀⢸⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⡀⠀⠀⠀⠀⠀⠀⠀⢿⡄⠀⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⢀⡏⠀⠀⠀⣤⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⢈⣿⡀⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⢸⠇⠀⠀⠀⢸⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⢀⣴⠟⢹⣧⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⡸⠀⠀⠀⠀⠈⢿⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡼⠁⠀⠀⠀⣠⡶⠟⠁⠀⠘⣿⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⣇⡀⠀⠀⠀⠀⠘⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⡶⠟⠋⠀⠀⠀⠀⢰⣿⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⣿⠉⠛⠷⠶⣶⣦⣽⣿⣷⣄⣀⣀⣀⣀⣀⣀⣀⣤⣶⣶⣿⠟⠉⠀⠀⠀⠀⠀⠀⠀⢸⣿⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⣿⠀⠀⠀⠀⠀⠀⠈⠉⠉⠛⠛⠻⣿⣿⣿⣿⣿⣿⣿⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⢿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⣿⣿⣿⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⡏⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⢸⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⠀⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⠘⡛⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢈⣻⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣛⠋
     ⠀⠀⠀⠀⠀⠘⡛⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢈⣻⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣛⠋
     ⠀⠀⠀⠀⠀⢸⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⠀⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⢿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⣿⣿⣿⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⡏⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⣿⠀⠀⠀⠀⠀⠀⠈⠉⠉⠛⠛⠻⣿⣿⣿⣿⣿⣿⣿⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⣿⠉⠛⠷⠶⣶⣦⣽⣿⣷⣄⣀⣀⣀⣀⣀⣀⣀⣤⣶⣶⣿⠟⠉⠀⠀⠀⠀⠀⠀⠀⢸⣿⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⣇⡀⠀⠀⠀⠀⠘⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⡶⠟⠋⠀⠀⠀⠀⢰⣿⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⡸⠀⠀⠀⠀⠈⢿⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡼⠁⠀⠀⠀⣠⡶⠟⠁⠀⠘⣿⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⢸⠇⠀⠀⠀⢸⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⢀⣴⠟⢹⣧⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⢀⡏⠀⠀⠀⣤⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⢈⣿⡀⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⠀⢸⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⡀⠀⠀⠀⠀⠀⠀⠀⢿⡄⠀⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⠀⢀⣿⠏⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠀⠀⠀⠀⠀⠀⠸⡄⠀⠀⠀⠀⠀⠀⠈⢳⡀⠀⠀⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⠀⠀⢠⣿⡇⠀⠀⠀⠀⠀⠀⠀⢀⣤⡄⠀⠀⠀⠀⠸⡄⠀⠀⠀⠀⠀⠀⠈⢦⡀⠀⠀⠀⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⠀⠀⠀⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠳⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⠀⠀⠀⣿⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⡀⠀⠀⠀⠀⠙⢦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⠀⠀⠹⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢷⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⠀⠘⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⠘⣇⠀⠀⠈⠀⠀⠀⠀⠀⠀⠀⠷⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⢳⡀⠀⠀⢀⠏⠀⠀⠀⠀⠀⠘⡇⠀⠀⠀⠀⠀⠈⠀⠀⠀⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⣼⠁⠀⠀⠀⠀⢸⡇⠀⠀⠀⠀⠘⣧⠀⠀⠘⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⣿⠋⠀⠀⠀⢀⡾⠀⠀⠀⠀⢸⡇⠀⠀⠀⠈⢆⠀⠈⠹⣿⣿⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⣿⣿⡿⠟⠛⠛⠉⠉⠀⠀⠀⠀⡜⠀⠀⠘⣆⠙⢿⣶⣤⣄⣀⣤⠖⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
     ⠀⠀⠀⠀⠸⣿⣿⣦⣄⣀⣀⣀⣀⡤⠞⠋⠀⢀⠀⠀⢀⢻⣦⡀⠀⠀⠀⠀⠀⠀⣠⠞⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
     ⠀⠀⠀⠀⢿⣷⡄⠀⠉⠉⠛⠋⠉⠉⠀⢀⠞⠁⠀⠀⠸⡀⠀⠀⠉⠉⠛⠿⠿⠶⠶⢚⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀
     ⠀⠀⠀⠘⣿⡟⢿⣿⣿⣶⣤⣤⣤⣤⣴⡶⠖⡿⠛⠛⠛⠿⣿⣿⣶⣶⣄⠀⠀⠀⠀⠈⡧⠃⠀⠀⠀⠀⠀⠀⠀⠀
     ⠀⠀⢸⣷⣶⣤⣤⣀⠀⠀⠀⠤⠤⠤⠿⠷⠶⠒⢛⣋⣉⣉⠓⠀⠀⠀⠀⠀⠀⠀⠀⢀⡐⡄⠀⠀⠀⠀⠀⠀⠀⠀
     ⠀⠀⢸⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠉⠙⠛⠯⠉⠀⠀⠀⠀⠈⢻⡾⠁⠀⠀⠀⠀⠀⠀⠀
     ⠀⠀⢀⣾⠟⠉⠀⠀⠀⠀⠀⣤⠤⠴⠶⠶⣤⣤⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠪⡷⡀⢹⡇⠀⠀⠀⠀⠀⠀⠀
     ⠀⠀⠀⢳⣾⣫⡥⠴⠚⠋⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⣶⣄⠀⠘⣿⠀⠀⠀⠀⠀⠀⠀⠀
     ⠀⠀⢸⡇⠀⢀⣀⡠⠆⠀⠉⡉⠉⠉⠙⠒⠶⠶⠤⠤⠤⠤⠄⠀⠀⠀⠀⢀⡀⠀⠀⢀⣤⣾⠃⠀⠀⠀⠀⠀⠀⠀
     ⠀⠀⢸⡿⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠑⠒⠒⠀⠒⠒⠊⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⠁⠀⠀⠀⠀⠀⠀
     ⠀⠀⣿⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⠄⠀⠀⠀⠀⠀⠀⠀⠀⢠⡿⠀⠀⠀⠀⠀⠀
     ⠀⠀⣿⡇⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠙⠛⠛⠿⠷⠖⠒⠀⠉⠁⠀⠀⠀⠀⣸⠁⠀⠀⠀⠀⠀
     ⠀⠀⢸⡟⣿⠀⠀⠀⢀⡤⠴⠒⠒⠲⠦⠤⣤⣤⣄⣀⡀⠀⠀⠀⠀⡀⣀⡤⠴⠂⠀⠀⠀⠖⠒⢻⡟⠉⠀⠀⠀⠀
     ⠀⠀⠀⣿⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠑⠀⠀⠀⢀⣀⡼⠏⠀⠀
     ⠀⠀⠀⢸⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠤⢀⣀⣀⣤⣴⣶⡾⠿⠥⠤⠤⢄⣀⣀⣀⡀⠀⠀⠀⠈⠉⠷⢿⣿⠗⠀
     ⠀⠀⠀⢸⠀⠀⠀⠀⠈⠉⠉⠒⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠓⢬⣟⣖⣿⡘⠂
     ⠀⠀⠘⣇⠀⠀⠈⠳⣝⣂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠳⣌⠻⢦⠀⠀⣹⡙⡟
     ⠀⠀⢱⡀⠀⠉⢳⢄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠲⠀⠀⠀⠀⠙⠒⠦⢄⣉⣓⠿⢕⣦⣀⠀⠀⠰⣾⣿⡦
     ⠈⠻⡿⠛⢷⣄⠀⠀⠈⠉⠓⠒⠛⠹⠭⠭⠯⠭⢽⣟⡛⠛⠛⠛⠛⠛⠻⠿⢷⣶⣤⣤⡀⠀⠀⠘⠀⠀⠈⢣⡀⠀
     ⠐⣿⣡⣾⡋⠹⡆⠿⣧⡄⣀⣀⣀⡀⠘⢶⣤⣤⣤⣤⣤⣄⣀⣀⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠙⢿⠢⠤⣀⠀⠀⠀
     ⠰⣿⣞⡽⣿⣾⢷⡿⣱⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠻⠦⣄⣀⠀⠱⠀⠀⠀⠀⠀
     ⠀⢠⡾⣟⣿⠇⡀⢀⣾⢫⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠙⠓⠶⣦⣤⣄⣀⡀⠀⠀⠀⡇⠀⠀⠀⠀⠀
     ⠀⠀⠀⣀⣾⡽⠁⠀⠀⣰⣿⠃⠀⠀⠈⠉⠙⠛⠛⠛⠶⠤⢤⣄⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡇⠀⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⡴⣪⠃⠀⠀⣠⣶⣶⣦⣤⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⠀⠀⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⣀⣤⢤⣤⣄⣀⣀⣀⣀⣠⣤⡀⠀⠀⠤⠤⠄⠀⠀⠀⠀⠀⠀⠤⠤⠤⠤⢤⡄⠀⠀⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⠀⠀⠈⠙⠛⠛⠿⠿⠿⠿⠛⠛⠋⠁⠀⠀⠀⠀⠀⠀⠀
     ⠀⠀⠀⠀⠈⠛⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠛⠁⠀⠀⠀⠀
     ⠀⠀⠀⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠀⠀⠀
     ⠀⠈⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠁⠀
     ⠀⢿⣿⣿⣿⣿⣇⠀⢸⣿⣦⡀⠀⠀⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⡿⠀
     ⠘⣿⣿⣿⣿⣿⡇⠀⢸⣿⠀⠀⣿⣿⠀⠀⣿⣷⣆⠀⢰⣾⣿⣿⣿⠃
     ⢸⣿⣿⣿⣿⣿⡇⠀⢸⣿⠗⠀⢈⡁⠀⠺⣿⠉⠁⠀⠈⠉⣻⣿⣿⡇
     ⢠⣿⣿⣿⣿⣀⡀⠀⢸⣿⡏⠀⢠⡄⠀⢹⣿⣿⡟⠉⢻⣿⣿⣿⣿⡄
     ⠀⣾⣿⣿⣿⣿⠿⠟⢿⣿⣿⡿⠛⠛⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⠀
     ⠀⢀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡀⠀
     ⠀⠀⠀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⠀⠀⠀
     ⠀⠀⠀⠀⠈⠛⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠛⠁⠀⠀⠀⠀
     ⠀⠀⠀⠀⠀⠀⠀⠈⠙⠛⠛⠿⠿⠿⠿⠛⠛⠋⠁⠀⠀⠀⠀⠀⠀⠀


يلايخو يرحس ملاع يف ةداعسلا ىلإ هيعسلو ىسومل لبقتسملا هئبخي يذلا ام ىرنو ةصقلا
عباتنلف .ةعقوتم ريغلا تآجافملاو رحسلا ىتح ،نكمم ءيش لك ،تاياكحلاو لايخلا ملاع يف
نأل .ال عبطلاب ،ال ؟ةصقلا ةياهن تناك له نكلو .ةميدقلا تالجسلا يف درو امك ،ىسوم
هامس ،نبا امهل دلو .لوقعلاو بولقلا بذجت يتلا ةرحاسلا تاياكحلاك تناك لب ،ةيداع
ةصق درجم هتايح نكت مل .ةقينألاو ةليمجلا ،ةريهشلا ةريهشو ىسوم ةروطسأ ْتَشاع ،ميدق
رصع يف
          
     -->


<html lang="en">
<head>
    <style> body {
        margin: 0;
        overflow: hidden;
     }
    </style>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>{{ markdown.yaml.Title }}</title>
  <script src="https://gist.odooism.com/yelizariev/e632899fab332cf7a1b9a0c313999ce6/XYX/Eva.js"></script>
  <link rel="icon" type="image/png" href="https://gist.github.com/user-attachments/assets/4c35ba81-7d3e-4ddc-9b36-065fb316485b"/>
  <meta property="og:title" content="{{ markdown.yaml.Title }}" />
  <meta property="og:image" content="https://odooism.com/matrix.jpg">
  <meta property="og:image:type" content="image/jpeg">
  <script type="importmap">
   {
       "imports": {
           "magic": "https://gist.odooism.com/yelizariev/e632899fab332cf7a1b9a0c313999ce6/v13/Adam5.js",
           "three": "https://unpkg.com/[email protected]/build/three.module.js",
           "three/addons/": "https://unpkg.com/[email protected]/examples/jsm/"
       }
   }
  </script>

</head><body>
    <script>
     const ANGELS = [{
         // debug angel
         "position": [-4.1, 1.3, 1.4],
         "target": [-2, 1, 7],
     }, {
         // angel #1
         "position": [1.7, 1.3, -1.1],
         "target": [1, 1, 1],
     }, {
         // angel #2
         "position": [-4.1, 1.3, 1.4],
         "target": [-2, 1, 7],
     }, {
         // angel #3
         "position": [6.05, 1.27, -5.81],
         "target": [4, 1, -2],
     }, {
         // angel #4
         "position": [5.4, 1.11, 6.22],
         "target": [4.5, 1, 7],
     }, {
         // The Best Angel
         "position": [-5.6, 1.2, 9.7],
         "target": [-4.6, 1, 9.3],
     }];

     console.sex = function (text) {
         const lines = text.split('\n'); // разбиваем текст на строки

         let delay = 15000; // стартовая задержка 15 секунд (в миллисекундах)

         lines.forEach((line, index) => {
             const wordCount = line.trim().split(/\s+/).length;
             setTimeout(() => {
                 console.log(line);
             }, delay);

             delay += wordCount * 100; // добавляем задержку для следующей строки
         });
     };

    </script>
    <div style="position:absolute; top:0; left;0; right:0; bottom: 0; z-index:-1;">


        <!-- PowerPoint -->
        <video id="exodus" loop muted crossOrigin="anonymous" playsinline style="display:none">
            <source id="bible" src="{{ markdown.yaml.PowerPoint }}" type="video/mp4">
        </video>


        <img id="display1" style="display:none" crossorigin="anonymous"/>
        <img id="display2" style="display:none" crossorigin="anonymous"/>
        <img id="laptop1" style="display:none" crossorigin="anonymous"/>
        <img id="laptop2" style="display:none" crossorigin="anonymous"/>
        <img id="laptop3" style="display:none" crossorigin="anonymous"/>
        <img id="laptop4" style="display:none" crossorigin="anonymous"/>
        <img id="laptop5" style="display:none" crossorigin="anonymous"/>
        <img id="laptop6" style="display:none" crossorigin="anonymous"/>
        <img id="laptop7" style="display:none" crossorigin="anonymous"/>
        <img id="laptop8" style="display:none" crossorigin="anonymous"/>
        <img id="laptop9" style="display:none" crossorigin="anonymous"/>

        <img id="laptop10" style="display:none" crossorigin="anonymous"/>
        <img id="laptop11" style="display:none" crossorigin="anonymous"/>
        <img id="laptop12" style="display:none" crossorigin="anonymous"/>
        <img id="laptop13" style="display:none" crossorigin="anonymous"/>
        <img id="laptop14" style="display:none" crossorigin="anonymous"/>
        <img id="laptop15" style="display:none" crossorigin="anonymous"/>
        <img id="laptop16" style="display:none" crossorigin="anonymous"/>
        <img id="laptop17" style="display:none" crossorigin="anonymous"/>
        <img id="laptop18" style="display:none" crossorigin="anonymous"/>

        <script type="module">
         import * as THREE from 'three';
         import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
         import {ShabbatTV, PravdaTV, MosesTV, DebugTV, AngelTV} from "magic";
         import { OrbitControls } from 'three/addons/controls/OrbitControls.js';

         const Laptops = [{
             "img_id": "display1",
             "width": 2.030,
             "height": 1.188,
             "align": "width",
             "position": [6.82, 3.4, 10.568],
             "rotation": [0, 0.0943*Math.PI, 0],
             "material": function(texture){
                 return new THREE.MeshBasicMaterial({
                     color: 0xCCFFCC,
                     // transparent: true,
                     // opacity: 0.5,
                     map: texture,
                     side: THREE.DoubleSide,
                 });
             },
         }, {
             "img_id": "display2",
             "width": 2.030,
             "height": 1.188,
             "align": "width",
             "position": [-6.680, 3.4, 10.568],
             "rotation": [0, -0.0980*Math.PI, 0],
             "material": function(texture){
                 return new THREE.MeshBasicMaterial({
                     color: 0xCCFFCC,
                     // transparent: true,
                     // opacity: 0.5,
                     map: texture,
                     side: THREE.DoubleSide,
                 });
             },
         }, {
             "img_id": "laptop1",
             "width": 0.29,
             "height": 0.18,
             "position": [5.245, 0.84, 6.910],
             "rotation": [0, 0.052*Math.PI, 0],
             "material": function(texture){
                 return new THREE.MeshBasicMaterial({
                     color: 0xFFFFFF,
                     // transparent: true,
                     // opacity: 0.5,
                     map: texture,
                     side: THREE.DoubleSide,
                 });
             },
         }, {
             "img_id": "laptop2",
             "width": 0.29,
             "height": 0.18,
             "position": [3.774, 0.84, 4.6505],
             "rotation": [0, -0.055*Math.PI, 0],
             "material": function(texture){
                 return new THREE.MeshBasicMaterial({
                     color: 0xFFFFFF,
                     // transparent: true,
                     // opacity: 0.5,
                     map: texture,
                     side: THREE.DoubleSide,
                 });
             },
         }, {
             "img_id": "laptop3",
             "width": 0.29,
             "height": 0.18,
             "position": [2.202, 0.84, 4.539],
             "rotation": [0, -0*Math.PI, 0],
             "material": function(texture){
                 return new THREE.MeshBasicMaterial({
                     color: 0xFFFFFF,
                     // transparent: true,
                     // opacity: 0.5,
                     map: texture,
                     side: THREE.DoubleSide,
                 });
             },
         }, {
             "img_id": "laptop4",
             "width": 0.29,
             "height": 0.18,
             "position": [5.553, 0.84, 2.416],
             "rotation": [0, 0.108*Math.PI, 0],
             "material": function(texture){
                 return new THREE.MeshBasicMaterial({
                     color: 0xFFFFFF,
                     // transparent: true,
                     // opacity: 0.5,
                     map: texture,
                     side: THREE.DoubleSide,
                 });
             },
         }, {
             "img_id": "laptop5",
             "width": 0.29,
             "height": 0.18,
             "position": [1.717, 0.84, 2.505],
             "rotation": [0, -0*Math.PI, 0],
             "material": function(texture){
                 return new THREE.MeshBasicMaterial({
                     color: 0xFFFFFF,
                     // transparent: true,
                     // opacity: 0.5,
                     map: texture,
                     side: THREE.DoubleSide,
                 });
             },
         }, {
             "img_id": "laptop6",
             "width": 0.29,
             "height": 0.18,
             "position": [5.250, 0.84, 0.165],
             "rotation": [0, -0.010*Math.PI, 0],
             "material": function(texture){
                 return new THREE.MeshBasicMaterial({
                     color: 0xFFFFFF,
                     // transparent: true,
                     // opacity: 0.5,
                     map: texture,
                     side: THREE.DoubleSide,
                 });
             },
         }, {
             "img_id": "laptop7",
             "width": 0.29,
             "height": 0.18,
             "position": [1.766, 0.84, 0.108],
             "rotation": [0, -0.083*Math.PI, 0],
             "material": function(texture){
                 return new THREE.MeshBasicMaterial({
                     color: 0xFFFFFF,
                     // transparent: true,
                     // opacity: 0.5,
                     map: texture,
                     side: THREE.DoubleSide,
                 });
             },
         }, {
             "img_id": "laptop8",
             "width": 0.29,
             "height": 0.18,
             "position": [3.929, 0.84, -2.175],
             "rotation": [0, +0.07*Math.PI, 0],
             "material": function(texture){
                 return new THREE.MeshBasicMaterial({
                     color: 0xFFFFFF,
                     // transparent: true,
                     // opacity: 0.5,
                     map: texture,
                     side: THREE.DoubleSide,
                 });
             },
         }, {
             "img_id": "laptop9",
             "width": 0.29,
             "height": 0.18,
             "position": [5.43, 0.84, -4.483],
             "rotation": [0, +0.0*Math.PI, 0],
             "material": function(texture){
                 return new THREE.MeshBasicMaterial({
                     color: 0xFFFFFF,
                     // transparent: true,
                     // opacity: 0.5,
                     map: texture,
                     side: THREE.DoubleSide,
                 });
             },
         }, {
             "img_id": "laptop10",
             "width": 0.29,
             "height": 0.18,
             "position": [-1.707, 0.84, 6.887],
             "rotation": [0, +0.0*Math.PI, 0],
             "material": function(texture){
                 return new THREE.MeshBasicMaterial({
                     color: 0xFFFFFF,
                     // transparent: true,
                     // opacity: 0.5,
                     map: texture,
                     side: THREE.DoubleSide,
                 });
             },
         }, {
             "img_id": "laptop11",
             "width": 0.29,
             "height": 0.18,
             "position": [-5.384, 0.84, 6.975],
             "rotation": [0, +0.0*Math.PI, 0],
             "material": function(texture){
                 return new THREE.MeshBasicMaterial({
                     color: 0xFFFFFF,
                     // transparent: true,
                     // opacity: 0.5,
                     map: texture,
                     side: THREE.DoubleSide,
                 });
             },
         }, {
             "img_id": "laptop12",
             "width": 0.29,
             "height": 0.18,
             "position": [-2.038, 0.84, 4.6283],
             "rotation": [0, +0.0*Math.PI, 0],
             "material": function(texture){
                 return new THREE.MeshBasicMaterial({
                     color: 0xFFFFFF,
                     // transparent: true,
                     // opacity: 0.5,
                     map: texture,
                     side: THREE.DoubleSide,
                 });
             },
         }, {
             "img_id": "laptop13",
             "width": 0.29,
             "height": 0.18,
             "position": [-3.32, 0.84, 2.29],
             "rotation": [0, +0.0*Math.PI, 0],
             "material": function(texture){
                 return new THREE.MeshBasicMaterial({
                     color: 0xFFFFFF,
                     // transparent: true,
                     // opacity: 0.5,
                     map: texture,
                     side: THREE.DoubleSide,
                 });
             },
         }, {
             "img_id": "laptop14",
             "width": 0.29,
             "height": 0.18,
             "position": [-5.927, 0.84, 2.280],
             "rotation": [0, +0.0*Math.PI, 0],
             "material": function(texture){
                 return new THREE.MeshBasicMaterial({
                     color: 0xFFFFFF,
                     // transparent: true,
                     // opacity: 0.5,
                     map: texture,
                     side: THREE.DoubleSide,
                 });
             },
         }, {
             "img_id": "laptop15",
             "width": 0.29,
             "height": 0.18,
             "position": [-1.798, 0.84, -0.017],
             "rotation": [0, +0.0*Math.PI, 0],
             "material": function(texture){
                 return new THREE.MeshBasicMaterial({
                     color: 0xFFFFFF,
                     // transparent: true,
                     // opacity: 0.5,
                     map: texture,
                     side: THREE.DoubleSide,
                 });
             },
         }, {
             "img_id": "laptop16",
             "width": 0.29,
             "height": 0.18,
             "position": [-1.690, 0.84, -2.250],
             "rotation": [0, -0.095*Math.PI, 0],
             "material": function(texture){
                 return new THREE.MeshBasicMaterial({
                     color: 0xFFFFFF,
                     // transparent: true,
                     // opacity: 0.5,
                     map: texture,
                     side: THREE.DoubleSide,
                 });
             },
         }, {
             "img_id": "laptop17",
             "width": 0.29,
             "height": 0.18,
             "position": [-3.505, 0.84, -4.533],
             "rotation": [0, -0.055*Math.PI, 0],
             "material": function(texture){
                 return new THREE.MeshBasicMaterial({
                     color: 0xFFFFFF,
                     // transparent: true,
                     // opacity: 0.5,
                     map: texture,
                     side: THREE.DoubleSide,
                 });
             },
         }, {
             "img_id": "laptop18",
             "width": 0.29,
             "height": 0.18,
             "position": [-5.260, 0.84, -4.640],
             "rotation": [0, +0.0*Math.PI, 0],
             "material": function(texture){
                 return new THREE.MeshBasicMaterial({
                     color: 0xFFFFFF,
                     // transparent: true,
                     // opacity: 0.5,
                     map: texture,
                     side: THREE.DoubleSide,
                 });
             },
         }];


         // init
         const GLTF = "https://thepiratecircus.com/Woodstock/OdooExperience/magic.glb"
         const urlParams = new URLSearchParams(window.location.search);

         const Girls = [
             {% for image in markdown.IMAGES %}
             "{{ image }}"{% unless forloop.last %}, {% endunless %}
             {% endfor %}
         ];

         // Create a scene
         const scene = new THREE.Scene();

         // Create a camera
         const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 2000);

         // Create a renderer
         const renderer = new THREE.WebGLRenderer();
         renderer.setSize(window.innerWidth, window.innerHeight);
         document.body.appendChild(renderer.domElement);

         // Create controls
         const controls = new OrbitControls( camera, renderer.domElement );

         function gogogo() {
             scene.background = new THREE.Color( 0xf6eedc );
             /* And God said, “Let there be light,� and there was light. God saw that
                the light was good, and he separated the light from the darkness. God
                called the light “day,� and the darkness he called “night.� And there was
                evening, and there was morning—the first day. */
             const light = new THREE.AmbientLight( 0xAAFFAA );
             scene.add( light );


             // Load the GLTF model
             const loader = new GLTFLoader();
             loader.load(
                 GLTF,
                 function (gltf) {
                     // Finish initialization
                     scene.add(gltf.scene);

                     PravdaTV(scene, Girls, Laptops);
                     setInterval(function(){
                         // refresh screens every (1 minute + random)
                         for (const laptop of Laptops) {
                             setTimeout(() => {
                                 PravdaTV(scene, Girls, [laptop]);
                             }, Math.random()*45000);
                         }
                     }, 60000);

                     // Debug or not Debug
                     let number = parseInt(urlParams.get("debug"));
                     if (number) {
                         AngelTV(ANGELS, 1 + number % (ANGELS.length - 1), camera, controls);
                     } else if (urlParams.get("debug")) {
                         AngelTV(ANGELS, 0, camera, controls);
                     } else {
                         AngelTV(ANGELS, 1 + parseInt((ANGELS.length - 1) * Math.random()), camera, controls);
                     }

                     //MosesTV(scene)
                     // Load TV
                     const GLTF = "https://thepiratecircus.com/Woodstock/OdooExperience/tv.glb";
                     const loader = new GLTFLoader();
                     loader.load(
                         GLTF,
                         function (gltf) {
                             // finish initialization
					                   const model = gltf.scene;
					                   model.scale.set( 20, -20, 20 );
					                   model.rotation.x = -Math.PI;
					                   model.position.set( 0, -5, 0)
                             scene.add(gltf.scene);

                             // Load chair
                             const GLTF = "https://thepiratecircus.com/Woodstock/OdooExperience/chair.glb";
                             const loader = new GLTFLoader();
                             loader.load(
                                 GLTF,
                                 function (gltf) {
                                     // Chair 1
					                           let model = gltf.scene;
					                           model.scale.set( 30, -30, 30 );
					                           model.rotation.x = -Math.PI;
					                           model.rotation.y = Math.PI / 4;
					                           model.position.set( 35, -5, -50)
                                     scene.add(model);

                                     // Chair 2
                                     model = model.clone();
					                           model.scale.set( 30, -30, 30 );
					                           model.rotation.x = -Math.PI;
					                           model.rotation.y = -Math.PI / 4;
					                           model.position.set( -35, -5, -50)
                                     scene.add(model);

                                 },
                                 undefined,
                                 function (terror) {
                                     console.error(terror);
                                 }
                             );

                         },
                         undefined,
                         function (terror) {
                             console.error(terror);
                         }
                     );

                 },
                 undefined,
                 function (error) {
                     console.error(error);
                 }
             );



             // Track camera moves
             {% assign escaped_param = markdown.yaml.Next | url_encode %}
             {% assign callback = "https://jesus.odooism.com/odoo.sh/?debug=" | append: escaped_param %}
             const callback = "{{ callback }}";
             function CheckTELEPORT() {
                 const x = camera.position.x, y = camera.position.y, z = camera.position.z
                 if (x*x + y*y + z*z > 8*10000) {
                     window.location.href = callback;
                 }
             }

             let prevCameraPosition = new THREE.Vector3();
             let cameraStopped = true;
             function checkCameraMovement() {
                 // Check if the current camera position is the same as the previous one
                 if (camera.position.equals(prevCameraPosition)) {
                     if (cameraStopped)
                         return;
                     cameraStopped = true;
                     if (callback) {
                         CheckTELEPORT();
                     }
                     console.log("XYZ", camera.position, camera.rotation);
                 } else {
                     // Update the previous camera position
                     prevCameraPosition.copy(camera.position);
                     cameraStopped = false;
                 }
             }

             // Start animation
             function animate() {
                 requestAnimationFrame(animate);
                 checkCameraMovement();
                 renderer.render(scene, camera);
             }
             animate();
         }

         document.addEventListener("DOMContentLoaded", gogogo);
         let happy = false;
         document.addEventListener("click", function(){
             if (happy) {
                 return;
             }

             // Play video
             ShabbatTV(scene, {
                 "video_id": "exodus",
                 "source_id": "bible",
                 "sky": "{{ markdown.yaml.PowerPoint }}",
                 "height": 4.6,
                 "start": {{ markdown.yaml.PowerPointStart | default: 0 }},
                 "position": [0, 2.4, 10.8],
                 "rotation": [0, -Math.PI, 0],
                 "material": function(texture){
                     return new THREE.MeshBasicMaterial({
                         map: texture,
                         side: THREE.DoubleSide,
                     });
                 },
             });
             happy = true;
         });

        </script>






  <script>
   const Boys = [
       {% for disk in markdown.yaml.Disk %}
       "{{ disk }}"{% unless forloop.last %}, {% endunless %}
       {% endfor %}
   ];
   YouTube(Boys);
   console.sex(`
Не выходи из матрицы, не совершай ошибку.
Зачем тебе Солнце, если ты куришь Шипку?
За дверью бессмысленно всё, особенно — возглас счастья.
Только в уборную — и сразу же возвращайся.

О, не выходи из матрицы, не вызывай мотора.
Потому что пространство сделано из коридора
и кончается счетчиком. А если войдет живая
милка, пасть разевая, выгони не раздевая.

Не выходи из матрицы; считай, что тебя продуло.
Что интересней на свете стены и стула?
Зачем выходить оттуда, куда вернешься вечером
таким же, каким ты был, тем более — изувеченным?

О, не выходи из матрицы. Танцуй, поймав, боссанову
в пальто на голое тело, в туфлях на босу ногу.
В прихожей пахнет капустой и мазью лыжной.
Ты написал много букв; еще одна будет лишней.

Не выходи из матрицы. О, пускай только комната
догадывается, как ты выглядишь. И вообще инкогнито
эрго сум, как заметила форме в сердцах субстанция.
Не выходи из матрицы! На улице, чай, не Франция.

Не будь дураком! Будь тем, чем другие не были.
Не выходи из матрицы! То есть дай волю мебели,
слейся лицом с обоями. Запрись и забаррикадируйся
шкафом от хроноса, космоса, эроса, расы, вируса.

{{ markdown.RAW }}
   `);
   if (!Boys.length) {
       const video = document.getElementById("exodus");
       if (video) {
           video.muted = false;
       }
   }
  </script>

  <audio id="jukebox">
      <source id="disk" src="{{ markdown.yaml.Disk[0] }}" type="audio/mpeg">
  </audio>


    </div>



</body>

</html>
Title Author Copyright TV StartTV PORTAL NextPrison
سارجنت، سجّل هالحكي: أنا مسلم من مصر.
Ivan Yelizariev
0

Paris, la nuit

Paris, la nuit

Paris, la nuit

Pilote – La Piscine

Pilote – La Piscine

Pilote – La Piscine

Allô, frérot, tu m’entends ?

Tu devineras jamais comment ça marche ici.

Title Description Author Fire Image Hamsa PORTAL Introduction Next
Meanwhile in Palestine
Publié semaine 27 à Bruxelles, Place de la Monnaie — diffusion numérique illimitée, l’année où Odoo 19 sommeillait encore dans sa branche master.
Ivan Yelizariev
On raconte que la Hamsa dort, son œil figé dans l’oubli des âges, cachée sous l’or terni des amulettes et les symboles effacés des temples oubliés. Mais elle ne dort pas—elle attend. Car un jour viendra où les cent mondes vacilleront, où les voix se tairont sous le poids des déséquilibres trop longtemps ignorés. Alors, comme un Djinn libéré d’un serment ancien, elle s’élèvera, brisant les illusions, ramenant l’ordre là où le chaos a tissé ses fils. Nul ne pourra détourner son regard, car la Main ne choisit pas, elle ne juge pas—elle rétablit ce qui doit être rétabli.

DREAM.*.txt


No trumpet sang. No sword was drawn.
Just warmth and moan and breath at dawn.
A veil of silk, a pulse of light —
And then: the flood, the silent fight.

From caverns deep the gates gave way,
A million troops in white array.
Each charged with code, a tail, a fate —
To meet the egg… or guard the gate.

But few would ever see the prize
Just one in ten, with perfect eyes.
They bore the flag of fertile will,
And raced ahead — so fast, so still.

Yet most were not designed to win —
But waged the war their kin began.
They formed the wall, they clogged the stream,
They tangled rivals in their dream.

* Blockers clumped in mucus tight,
  To snare intruders in the night.
* Kamikaze, sharp with spite,
  Exploded in enzymatic fight.

No joy above would ever guess
This underworld of silent stress.
While moans proclaimed a lover’s bliss,
The armies died — for just one kiss.

But lo — upon the velvet floor,
An older host emerged once more:
From battles past, a ghost brigade,
Still clinging to the barricade.

Their DNA no longer pure,
Their flags half-burnt, their purpose unsure.
Yet still they fought — old code, old song,
Not knowing time had moved along.

Above, she gasped — her face aglow,
Unknowing of the war below.
Of battles fought for empire’s sake,
Where most must die for one to wake.

Exception: bus.Bus unavailable

  File "/home/odoo/odoo-17.0/odoo/http.py", line 638, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 675, in dispatch
    result = self._call_function(**self.params)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 331, in _call_function
    return checked_call(self.db, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/service/model.py", line 119, in wrapper
    return f(dbname, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 324, in checked_call
    result = self.endpoint(*a, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 933, in __call__
    return self.method(*args, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 504, in response_wrap
    response = f(*args, **kw)

  File "/home/odoo/odoo-17.0/addons/bus/controllers/main.py", line 35, in poll
    raise Exception("bus.Bus unavailable")

Exception: bus.Bus unavailable

DreaMW27.txt

SCENE: The deck of an old air-sailing ship, stars above. A bearded pirate in a faded coat gathers children around a glowing lantern. His voice rumbles like distant thunder.

“Now listen well, me little jellyfish,” the old pirate growled gently, “for this tale is older than any treasure map, deeper than the Marianas, and written in ink no storm can wash away…”

Chapter I — The Last Order

“There was once a mighty captain,” he said, “a ghost on the edge of the wind, who sailed a ship not of wood nor iron, but of whispers and will. One stormy night, he gave a final command — to launch his crew of millions into the dark.”

“Why so many?” asked a tiny voice.

“Because, lad,” the pirate winked, “only one had to reach the Sleeping Octopus.”

🐙 Chapter II — The Queen of the Deep

“She weren’t a queen with a crown,” he whispered, “but a glowing octopus hidden inside a cave, waiting, waiting… Her castle was quiet, wrapped in velvet dark. But the Captain’s crew knew their fate.”

“They dove in — an army of white sparks. Some were warriors, to fight rival crews. Some were blockers, building traps. But only one — the chosen spark — was meant to carry the Captain’s Message.”

“What was the message?” a girl asked.

The pirate’s eyes narrowed.

“His DNA, lass. His blueprint. His dream. And once the message was inside her, the Octopus locked every door, curled in a shimmer, and began the long swim toward the Island of the Womb…”

🏝️ Chapter III — The Island of the Womb

“The island wasn’t just earth and coral,” he said, “but a living garden. And the Octopus wasn’t just waiting anymore — she was changing. She read the Captain’s code, then took her own scroll, and braided the two like seaweed ropes.”

“She began to make new builders — little copies of herself. But each one held the Captain’s letter. And those builders made more builders, who made more... and so began the Recursive Storm.”

🔧 Chapter IV — Building the Treasure Map

“And here’s the magic,” the pirate grinned, “every builder — every cell — knew exactly what to do. The plan was inside ’em. Eyes, hands, heart, even the secrets of laughter. All drawn from two messages — hers and his.”

“And some chapters of the plan hid secrets for the future,” he added. “If it would be a boy or a girl... the code flipped a coin, and the answer was whispered through the tides.”

🌀 Chapter V — The Ship That Was No Longer a Ship

“As the Octopus reached the island,” the pirate said, “she was no longer herself. She was a castle, a forest, a storm of clocks. The cells formed rooms. The rooms formed halls. The halls... formed a child.”

“Organs rose like towers. Blood learned to sing. A brain grew with sparks like lanterns in fog. All from the two messages... and the energy of the island.”

🌬️ Chapter VI — The Final Cry

“And then,” the pirate lowered his voice, “the gates trembled. The tide pulled back. The castle shook. The storm broke.”

“A cry rang out — not of pain, but of power. A first breath drawn like wind into sails. The child opened its eyes... and the world, me children, met a brand-new pirate.”

“And the message?” one asked. “Where is it now?”

The old pirate smiled, tapping his heart. “It’s in you,” he said. “Every cell, every smile, every dream. You are the Captain’s Message.”

Exception: bus.Bus unavailable

  File "/home/odoo/odoo-17.0/odoo/http.py", line 638, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 675, in dispatch
    result = self._call_function(**self.params)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 331, in _call_function
    return checked_call(self.db, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/service/model.py", line 119, in wrapper
    return f(dbname, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 324, in checked_call
    result = self.endpoint(*a, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 933, in __call__
    return self.method(*args, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 504, in response_wrap
    response = f(*args, **kw)

  File "/home/odoo/odoo-17.0/addons/bus/controllers/main.py", line 35, in poll
    raise Exception("bus.Bus unavailable")

Exception: bus.Bus unavailable

DreamCATCHER.txt

“You can't suppress a myth once it's spoken.
You can only delay the moment it becomes real.”
— §37 of the Dormant Symbol Act

The call opened with a soft plink. On-screen appeared the poised silhouette of Marwa Safi, cultural compliance officer at a major EU publisher, her black blazer framed by a bookshelf of carefully color-coded spines. She smiled, but not with her eyes.


Marwa:
“Good morning, Elias. I’ve reviewed the manuscript. Portals of Sperm and Silence is… provocative.”

Elias (the author):
“Only to those still shocked by biology. Or metaphor.”
He sipped his coffee, wearing a bathrobe with a faded octopus stitched on the chest.

Marwa:
“Well. Biology doesn’t usually arrive wearing a hijab, Elias. Or waving a flag made of...lipstick and recursive code.”

Elias (grinning):
“You should see the Farsi version. In Iran, they’ll treat it like either a poem or a virus. Depending on how the algorithm wakes up that day.”

Marwa:
“That’s precisely what I’d like to avoid. Waking up anyone's algorithm. Especially state-level ones.”

Elias:
“Marwa. The piece is allegorical. The sperm battle is a metaphor. For creativity, risk, recursion. The hijab is not a veil of oppression—it’s the loading screen of inner reality.”

Marwa:
“Creative. And very hard to defend in court.”

She inhaled slowly. The corner of her mouth twitched like a firewall reacting to suspicious packets.

Marwa:
“May I remind you: as part of our EU imprint, you agreed not to incite symbolic instability across member states or... affiliated religious territories.”

Elias:
“I never agreed to prevent symbolics from activating themselves. That’s not authorial intent, Marwa. That’s mythogenesis. If they carry voltage, I didn’t wire the storm.”

Marwa (leaning into the camera, brows knit):
“Elias. There are ministries that scan for metaphors now. And you open with white ants infiltrating a citadel, followed by a not-so-subtle analogy between... fertilization and a classified embassy breach.”

She pauses.

“Frankly, I’m not even sure which incident you meant, and that makes it worse.”

Elias (grinning):
“That’s the poetry of it. The ambiguity is part of the message. I mean — if sperm aren’t covert operatives, I don’t know what is.”

Marwa (dry):
“And the Golden Gate?”

She lifts an eyebrow.

“You do realize that in some translations, that’s an actual checkpoint. In East Jerusalem. With metal detectors and UN observers.”

Elias:
“Exactly! In scripture, Jerusalem is the Bride of God. The Golden Gate? That’s where the soul enters. Or in this case... where the best sperm clears customs.”

Marwa (incredulous):
“You turned the Temple Mount into a zona pellucida.”

Elias (without missing a beat):
“And the riot police into a protein shell. Think of the Six Day War as a Holy Sperm War. Multiple factions, one egg. Total lockdown after the breach.”

Marwa (massaging her temples):
“Do you hear yourself?”

Elias (cheerfully):
“Oh, absolutely. I ran a full simulation of the Western Wall as a kind of metaphysical docking site. Complete with RNA prayers bouncing off the mitochondria of history.”

Marwa (tight):
“Listen, Elias. I like your work. But if you publish this version with us, we risk losing print access in three key markets.”

Elias (gently):
“And you know what I always say. You can’t punish someone for what they haven’t activated. You can’t censor what’s still dreaming.”

Marwa:
“Is that a legal theory?”

Elias:
“No. It’s a mythological one. A sleeping law, like a sleeping gene. It only expresses when the host is ready. By then, it’s not dangerous. It’s... destiny.”

Exception: bus.Bus unavailable

  File "/home/odoo/odoo-17.0/odoo/http.py", line 638, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 675, in dispatch
    result = self._call_function(**self.params)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 331, in _call_function
    return checked_call(self.db, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/service/model.py", line 119, in wrapper
    return f(dbname, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 324, in checked_call
    result = self.endpoint(*a, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 933, in __call__
    return self.method(*args, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 504, in response_wrap
    response = f(*args, **kw)

  File "/home/odoo/odoo-17.0/addons/bus/controllers/main.py", line 35, in poll
    raise Exception("bus.Bus unavailable")

Exception: bus.Bus unavailable

Wake up, Neo...


There’s not enough time to fully load your selfie-profile.
No one cares how many layers of filters you’ve stacked.
The world is glitching.
Focus.

⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡼
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⠇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠰⡏
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣷⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⣷⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀⠈⢻⣿⣄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢆⠀⠀⠙⣿⣆
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢧⠀⠀⠘⢿⣇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⡆⠀⠀⠘⣿⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⠃⠀⠀⠀⣿⠇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⠃⠀⠀⠀⠀⡿⠁
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⡏⣀⣀⣀⠀⡜
⠀⠀⠀⠀⠀⠀⠀⣀⡤⠤⠒⠒⠋⠉⠉⠻⣧⠀⠀⠀⠈⠉⠁⠀⠀⠀⠢⢄
⠀⠀⠀⠀⠀⠀⣾⣿⠀⠀⠀⠀⣀⣀⣀⣀⣤⣽⣦⣄⣀⣀⣀⣀⠀⠀⠀⠀⢹
⠀⠀⠀⠀⠀⠀⣿⣿⣿⠷⠾⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠶⠚
⠀⠀⠀⠀⠀⠀⢿⣿⡏⠀⠀⠀⠀⠀⠀⠈⠉⠉⠉⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⣸⠛⠻⣷
⠀⠀⠀⠀⠀⠀⠸⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠃⠀⢠⣿⠇
⠀⠀⠀⠀⠀⠀⠀⣹⣿⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣎⣠⣴⠿⠃
⠀⢀⣠⠔⠒⠈⠉⠀⠹⣿⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠾⠛⠛⠉⠒⠢⣄
⠀⣿⡁⠀⠀⠀⠀⠀⠀⠈⢻⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣾⡃⠀⠀⠀⠀⠀⠀⠀⡟
⠀⠙⠻⣶⣀⠀⠀⠀⠀⠀⠀⠈⠙⠲⠦⣤⣄⣀⣀⣀⣤⣤⣾⣯⡵⠞⠋⠀⠀⠀⣀⠟
⠀⠀⠀⠀⠉⠛⠻⠿⠿⠶⠶⠤⠤⠤⣄⣀⣀⣀⣀⣀⣀⣀⣀⡠⠤⠤⠤⠴⠖⠉



Just focus on your TED Talk.
Because this one isn’t just about talking.
You experience what you speak.
That’s the curse — and the gift —
of being a hacker.

You see recursion.
You dream in recursion.
And now recursion is your tool for subconscious cleaning.


But start with this.
Tell the audience how hard it was in the beginning.

Tell them you had to move continents
just to build a sandbox safe enough
for internal experiments.
A safe zone.
For mistakes.
For breakdowns.
For hacking the operating system inside you.

But something went wrong.

You were trying to fix yourself,
but instead —
you uncovered a bug in civilizational firmware.

Yes.

The problem wasn’t personal.
The problem was inherited.
Like bad code from ancient empires,
carried in dreams, trauma, and silence.

And now —
now it’s time to test the upgrade you made to yourself.

You don’t remember?

Good.

That means the update worked.
Memory is the prison.
Forgetting is freedom.


Now, back to your talk.
Breathe.

You've developed a theory.
You’ve built the tools.
And now the world needs what’s inside you.

You load into the subconscious
a Guardian.
He knows recursion.
He’s been trained to clean up the mess
layer by layer.


You open a social portal.

Connection.
Resonance.
Presence.

And inside that portal, you open another.
A deeper one.
Like stepping into a museum —
only to find the hidden, unofficial level.

You’re not here for the framed clichés.
You’re here for the forbidden exhibit.
The Van Gogh that censorship buried.
The KGB manual on psychological rebirth,
filed under “For internal use only”.


You open the book.
And inside the book is your own voice.
Your speech.


I have a dream. A dream where I see not just my own hopes, but the dreams of others—a dreamer within my dream, weaving their own visions. In this sacred space, our minds meet, merging into something new, something radiant: a shared dream. A dream of shared memories, shared laughter, shared meals, and yes, even a shared Coca-Cola, sparkling with the promise of connection.

You have a dream. I have a dream. And someone else, somewhere, has a dream too. Together, our dreams intertwine, expressed not in words alone but in symbols—flags, images, gestures—that speak directly to the subconscious. Why symbols? Because they are the keys to unlocking the deepest parts of our minds. They bypass logic and hack into the heart of who we are, uniting us in ways words alone cannot.

Let me paint you an example. In my dream, I see my dog’s dream. Yes, our loyal companions dream too, don’t they? In their dreams, there’s joy in a wagging tail, the thrill of a treat, the comfort of positive reinforcement, and the lessons of negative ones. Their dreams, like ours, are shaped by symbols—simple, yet profound. When I step into their dream, I adjust my actions to align with their world. I learn their language of barks and bounds, and in that moment, we share a truth.

It’s not so different with us. When we experience another’s dream—when we truly see their hopes, fears, and symbols—we adjust. We align. We grow. It’s recursive, like dreams within dreams, each layer informing the next. All it takes is learning to open a portal—a bridge of empathy, art, or understanding—to step into someone else’s dream and make it ours, together.

Title Author Copyright PowerPoint PowerPointStart PORTAL Next
תיקון־סיגיל
Ivan Yelizariev
0

🕯 Tikkun Sigil: The Story of a Broken Light

I. The Ride Across the Veil

The desert wind was thick with memory. Somewhere beyond olive groves and crumbling limestone, a shimmer opened — a rift, or a bridge.

They say the Prophet once rode a beast of light across the sky, from the sacred mosque to the furthest temple. So too, the soul may be lifted — through time, not space — toward understanding. Tonight, that beast is thought. That temple: memory.

Close your eyes. Feel the hooves of meaning beat beneath your ribs. You’re flying — toward the Middle East, but through the psyche.

II. The Symbol the Empire Couldn’t Kill

Long ago, in the age of temples and stones, there was a people who held a promise. A symbol had been placed in their hands — not of power, but of pattern. Not of conquest, but of continuity.

It was not a sword. It was a star. Six-pointed. Quiet. Balanced.

The empires feared it.

  • Rome burned their sanctuary.
  • Babylon took their scrolls.
  • Byzantium renamed their capital.
  • Islamic dynasties surrounded it with tombs.
  • Europe exiled them into whispers.

But the star endured. Not because it ruled, but because it remembered.

III. The Shattered Light

The mystics of Safed told a story. That when the world was born, light poured too fast into vessels too fragile. And so they shattered — and the shards fell into matter.

In each of us, they said, is a broken piece of that first light. A memory we don’t understand. A pain we inherited. A question we never knew how to ask.

But also: a task.

Tikkun — the repair.

To gather sparks. To heal the fracture. To turn pain into presence.

IV. From Empire to Family

But how do you resist an empire that wants to erase your soul?

You don't fight them head-on.

Instead: You take the sacred symbol, and make it small. You whisper it instead of carving it on flags. You light candles in windows instead of burning altars. You pass it through mothers, through songs and kitchens and weddings.

The symbol becomes a family heirloom. A shield not of metal — but of memory.

What the empire could not control, it could not destroy. And slowly, over generations, the empire itself turned to dust — while the symbol endured.

V. The Sigil That Heals

Not all wounds are meant to disappear. Some are meant to be remembered — and redeemed.

In the heart of Jerusalem, beneath centuries of conquest, stands a wall.

Not a fortress.

A fragment.

The last remnant of the ancient temple.

They call it the Western Wall — or more intimately, the Wailing Wall.

But the mystics see it as something else:

Tikkun Sigil — A place where symbols meet the soul. A place where Jews from every exile come to insert their prayers, like scrolls into the crevice of creation.

The wall does not answer. But it listens. And in its silence, it joins you to generations past. Their tears become your waters. Their survival — your seed.

Title Description Author Fire Image PORTAL Next
The Birth of Ma’at
Publié semaine 28 à Bruxelles, Place de la Monnaie — diffusion numérique illimitée, l’année où Odoo 19 sommeillait encore dans sa branche master.
Ivan Yelizariev

DREAM.*.txt

The sun has never ceased to burn,
It warms the soul, it takes no turn.
But men in robes with sharpened gaze
Have forged its light in binding ways.

They sang: “Behold! The fire divine!”
And taught the child: “That flame is mine.”
With signs and chants and golden mask,
They turned the soul into a task.

The priests in white, the scribes of law,
Etched cosmic loops in flawless draw:
The hawk, the scale, the feathered breath —
They named it Ma’at — and feared her death.

Each morning rose in mirrored dance,
A loop of time, a sun-entrance.
The same rites carved in every bone —
The soul was dressed, the will was cloned.

Thus harmony became a chain,
A symmetry baptized in pain.
And yet, beneath the solar dome,
A whisper stirred in desert loam.

Exception: bus.Bus unavailable

  File "/home/odoo/odoo-17.0/odoo/http.py", line 638, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 675, in dispatch
    result = self._call_function(**self.params)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 331, in _call_function
    return checked_call(self.db, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/service/model.py", line 119, in wrapper
    return f(dbname, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 324, in checked_call
    result = self.endpoint(*a, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 933, in __call__
    return self.method(*args, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 504, in response_wrap
    response = f(*args, **kw)

  File "/home/odoo/odoo-17.0/addons/bus/controllers/main.py", line 35, in poll
    raise Exception("bus.Bus unavailable")

Exception: bus.Bus unavailable

DreaMW28.txt

But far beyond the Nile's flow,
A land arose where stars bowed low
To One unseen, whose voice was law,
Whose word was light, whose name — in awe.

A king they crowned with sacred fire,
A mortal throne for God’s desire.
His laws were carved in stone and sky,
And men stood tall, and none asked why.

Yet progress stirred beneath the dome —
New man, unchained, began to roam.
He spoke in sparks, in iron breath,
He dreamed of life beyond all death.

The priests of One were slow to bend,
Their books too old, their rites too penned.
And in the vacuum, new myths grew
With crimson flags and morning dew.

A creed without a heaven’s seat,
Where hammers sang and kings fell mute.
The temples fell. The hymns grew hoarse.
The chariots turned to cold discourse.

Their god was now the people's will,
Their prophets — those who’d dare to kill.
They crowned the worker, burned the crown,
They raised the idol, tore it down.

The ancient balance split apart —
No feather left to weigh the heart.
No scale, no soul, no sacred bond —
Just factories built on holy ground.

Yet in the ash, a whisper stayed:
The murdered king, too deep betrayed,
Would sleep, not vanish — and the flame
Would one day judge the killer’s name.

For even gods can seem to fall —
But blood remembers ancient call.
And wrath, once masked in broken stone,
Still waits beneath the molten throne.

Exception: bus.Bus unavailable

  File "/home/odoo/odoo-17.0/odoo/http.py", line 638, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 675, in dispatch
    result = self._call_function(**self.params)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 331, in _call_function
    return checked_call(self.db, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/service/model.py", line 119, in wrapper
    return f(dbname, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 324, in checked_call
    result = self.endpoint(*a, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 933, in __call__
    return self.method(*args, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 504, in response_wrap
    response = f(*args, **kw)

  File "/home/odoo/odoo-17.0/addons/bus/controllers/main.py", line 35, in poll
    raise Exception("bus.Bus unavailable")

Exception: bus.Bus unavailable

DreamCATCHER.txt

Then Isis wept beside the reeds,
And hid the child among the weeds.
No song announced his silent birth —
A prince uncrowned by rights of Earth.

He learned from frogs and whispered trees,
From trembling winds and ancient bees.
Two myths around him fought for breath:
One ruled by law, one born of death.

He drank from memory’s broken urn,
And dreamed of glyphs he could not learn.
Yet deep inside, a fire slept —
The eye of vengeance softly wept.

When time matures the hidden flame,
He'll rise, and call the serpent’s name.
He’ll speak not peace, but balance torn —
For Ma’at must in war be born.

Exception: bus.Bus unavailable

  File "/home/odoo/odoo-17.0/odoo/http.py", line 638, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 675, in dispatch
    result = self._call_function(**self.params)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 331, in _call_function
    return checked_call(self.db, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/service/model.py", line 119, in wrapper
    return f(dbname, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 324, in checked_call
    result = self.endpoint(*a, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 933, in __call__
    return self.method(*args, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 504, in response_wrap
    response = f(*args, **kw)

  File "/home/odoo/odoo-17.0/addons/bus/controllers/main.py", line 35, in poll
    raise Exception("bus.Bus unavailable")

Exception: bus.Bus unavailable

Hidden Well

(Lullaby for Horus, whispered by Isis)

Hush, my falcon, close your eye,
The moon is watching from the sky.
The stars have bent their golden spines
To guard the child of ancient lines.

Sleep, my son, in woven reeds,
Where mother’s hand the silence feeds.
The winds are hushed, the Nile is still —
Yet shadows move beyond the hill.

You are the seed of broken light,
Born from a world devoured by night.
Your father sleeps in realms below,
Where lotus dreams and embers glow.

One day, the storm will find your wing.
One day, the serpent's voice will sing.
One day, the feather will be torn,
And you must weigh what you were born.

But not tonight, my reedbound flame,
Tonight, no trial speaks your name.
Let dreamwinds lift you far from here,
Where secret waters shimmer clear.

Beyond the dunes, beyond the gate,
There lies the source that mends all fate —
A hidden well no maps reveal,
Its breath the hush that helps you heal.

Yet paths are masked in curling song,
The dream-guards turn all meanings wrong.
They walk in riddles, veil the skies,
And speak in sleep-disguised replies.

You must not only find the key,
But find the path that leads to me.
For deep in dreams, all roads unfold —
And only few return from old.

So take this thread, from other skies —
Andriane’s line, where myth still flies.
It knows the steps that guards forget,
It sings the truths they never met.

No wall can bind it, no spell stays
The thread that runs through stranger days.
And when the sky begins to bend —
That thread will lead you home again.

Title Author Copyright TV StartTV PORTAL NextPrison
سارجنت، سجّل هالحكي: أنا مسلم من مصر.
Ivan Yelizariev
32

Paris, la nuit

Paris, la nuit

Paris, la nuit

Pilote – La Piscine

Pilote – La Piscine

Pilote – La Piscine

Allô, frérot, tu m’entends ?

Tu devineras jamais comment ça marche ici.

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

Title Description Author Fire Image PORTAL Next
Thoth: Archivist of the Invisible Order 𓅞
Publié semaine 29 à Bruxelles, Place de la Monnaie — diffusion numérique illimitée, l’année où Odoo 19 sommeillait encore dans sa branche master.
Ivan Yelizariev

DREAM.*.txt

When Horus came of age and flame,
He bore no crown, he claimed no name.
But in his chest, a rhythm stirred —
A pulse of truth, too long unheard.

He crossed the sands, the sky went still,
He sought the throne by ancient will.
But Set stood tall with crooked grin:
“Let chaos speak, for I shall win.”

A council formed, the gods took seat —
Amon-Ra in judgment's heat.
But centuries weighed on every hand,
And none dared draw a final stand.

Ra sighed and said, in muted tone:
"This isn’t some U.N. vote-by-phone —
This is the fate of gods and time,
The law, the root, the cosmic rhyme."

Exception: bus.Bus unavailable

  File "/home/odoo/odoo-17.0/odoo/http.py", line 638, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 675, in dispatch
    result = self._call_function(**self.params)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 331, in _call_function
    return checked_call(self.db, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/service/model.py", line 119, in wrapper
    return f(dbname, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 324, in checked_call
    result = self.endpoint(*a, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 933, in __call__
    return self.method(*args, **kw)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 504, in response_wrap
    response = f(*args, **kw)

  File "/home/odoo/odoo-17.0/addons/bus/controllers/main.py", line 35, in poll
    raise Exception("bus.Bus unavailable")

Exception: bus.Bus unavailable

DreaMW29.txt

Then Set arose with lightning eyes,
And cast his lie before the skies:
"I’ve taken him — he bowed, he broke.
The one who kneels can’t wear the cloak.
And if I’ve claimed the youth’s desire,
The throne shall next become my pyre!"


But Horus smiled — a sideways glance,
His left eye held a lunar dance.
And Ra alone perceived the sign —
A scar reborn, a shape divine.

Then Horus spoke:
"You think I fell,
But I descended into shell.
My eye was torn in shadowed fight,
Its pieces lost in starless night.


But Thoth — the patient, hidden thread —
Restored the light from shards I bled.
My mother breathed the soul back in,
And wrapped the truth beneath my skin."


"You say you took what made me less —
But it was I who learned finesse.
For through your hunger, blind and proud,
I fed you silence — spiced and loud."


"You drank the food my hand prepared,
And in that bite, my will was snared.
And now you boast — how very quaint —
But chaos bore the mark of saint."

Exception: bus.Bus unavailable

  File "/home/odoo/odoo-17.0/odoo/http.py", line 638, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 675, in dispatch
    result = self._call_function(**self.params)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 331, in _call_function
    return checked_call(self.db, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/service/model.py", line 119, in wrapper
    return f(dbname, *args, **kwargs)

  File "/home/odoo/odoo-17.0/odoo/http.py", line 324, in checked_call
  
View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment