@miris-inc/core 0.0.8-b91bbe8 → 0.0.8-bb28b6f
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AquaApi.wasm +0 -0
- package/dist/aqua-parser.wasm +0 -0
- package/dist/core.d.ts +163 -36
- package/dist/core.js +1145 -804
- package/dist/core.prod.js +1 -1
- package/dist/core.standalone.js +1928 -1559
- package/dist/core.standalone.prod.js +1 -1
- package/package.json +23 -16
- package/webshark.d.ts +321 -0
- package/dist/AquaApi.js +0 -15
- package/dist/aqua-parser.js +0 -14
package/dist/core.js
CHANGED
|
@@ -1,208 +1,3 @@
|
|
|
1
|
-
//#region packages/core/lod.ts
|
|
2
|
-
var LodStore = class {
|
|
3
|
-
#keyMap = /* @__PURE__ */ new Map();
|
|
4
|
-
#idMap = /* @__PURE__ */ new Map();
|
|
5
|
-
forKey(key) {
|
|
6
|
-
return this.#keyMap.get(key);
|
|
7
|
-
}
|
|
8
|
-
forId(id) {
|
|
9
|
-
return this.#idMap.get(id);
|
|
10
|
-
}
|
|
11
|
-
setKey(key, lod) {
|
|
12
|
-
this.#keyMap.set(key, lod);
|
|
13
|
-
}
|
|
14
|
-
setId(id, lod) {
|
|
15
|
-
return this.#idMap.set(id, lod);
|
|
16
|
-
}
|
|
17
|
-
delete(lod) {
|
|
18
|
-
this.#keyMap.delete(lod.key);
|
|
19
|
-
this.#idMap.delete(lod.id);
|
|
20
|
-
}
|
|
21
|
-
deleteKey(key) {
|
|
22
|
-
this.#keyMap.delete(key);
|
|
23
|
-
}
|
|
24
|
-
deleteId(id) {
|
|
25
|
-
this.#idMap.delete(id);
|
|
26
|
-
}
|
|
27
|
-
};
|
|
28
|
-
var Lod = class {
|
|
29
|
-
#key;
|
|
30
|
-
useExtSplats = false;
|
|
31
|
-
#splats = null;
|
|
32
|
-
splatsExtendedData = null;
|
|
33
|
-
#cachedWorldBounds = null;
|
|
34
|
-
#localBounds = null;
|
|
35
|
-
#transform = null;
|
|
36
|
-
#lodIndex = null;
|
|
37
|
-
#paddingCount = 0;
|
|
38
|
-
sh1Data = null;
|
|
39
|
-
sh1Max = 1;
|
|
40
|
-
sh2Data = null;
|
|
41
|
-
sh2Max = 1;
|
|
42
|
-
sh3Data = null;
|
|
43
|
-
sh3Max = 1;
|
|
44
|
-
sh3ExtendedData = null;
|
|
45
|
-
get key() {
|
|
46
|
-
return this.#key ?? null;
|
|
47
|
-
}
|
|
48
|
-
set key(key) {
|
|
49
|
-
this.store.deleteKey(this.key);
|
|
50
|
-
if (key || 0 === key) this.store.setKey(key, this);
|
|
51
|
-
this.#key = key;
|
|
52
|
-
}
|
|
53
|
-
set splats(splats) {
|
|
54
|
-
this.#splats = splats;
|
|
55
|
-
}
|
|
56
|
-
get splats() {
|
|
57
|
-
return this.#splats;
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Sets the cached world bounds of this object
|
|
61
|
-
*
|
|
62
|
-
* @deprecated set the local bounds and transform as needed
|
|
63
|
-
*/
|
|
64
|
-
set bounds(bounds) {
|
|
65
|
-
this.#cachedWorldBounds = bounds;
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Retrieves the cached world bounds of this object
|
|
69
|
-
*
|
|
70
|
-
* @deprecated Retrieve the local bounds and transform as needed
|
|
71
|
-
*/
|
|
72
|
-
get bounds() {
|
|
73
|
-
console.warn("`bounds` is deprecated, use `localBounds` instead");
|
|
74
|
-
return this.#cachedWorldBounds;
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Sets the local bounds of this lod
|
|
78
|
-
*/
|
|
79
|
-
set localBounds(bounds) {
|
|
80
|
-
this.#localBounds = bounds;
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Retrieves the local bounds of this lod
|
|
84
|
-
*/
|
|
85
|
-
get localBounds() {
|
|
86
|
-
return this.#localBounds;
|
|
87
|
-
}
|
|
88
|
-
set lodIndex(index) {
|
|
89
|
-
this.#lodIndex = index;
|
|
90
|
-
}
|
|
91
|
-
get lodIndex() {
|
|
92
|
-
return this.#lodIndex;
|
|
93
|
-
}
|
|
94
|
-
set paddingCount(count) {
|
|
95
|
-
this.#paddingCount = count;
|
|
96
|
-
}
|
|
97
|
-
get paddingCount() {
|
|
98
|
-
return this.#paddingCount;
|
|
99
|
-
}
|
|
100
|
-
set transform(transform) {
|
|
101
|
-
this.#transform = transform;
|
|
102
|
-
}
|
|
103
|
-
get transform() {
|
|
104
|
-
return this.#transform;
|
|
105
|
-
}
|
|
106
|
-
setSh1(sh1Data, sh1Max) {
|
|
107
|
-
this.sh1Data = sh1Data;
|
|
108
|
-
this.sh1Max = sh1Max;
|
|
109
|
-
}
|
|
110
|
-
setSh2(sh2Data, sh2Max) {
|
|
111
|
-
this.sh2Data = sh2Data;
|
|
112
|
-
this.sh2Max = sh2Max;
|
|
113
|
-
}
|
|
114
|
-
setSh3(sh3Data, sh3Max) {
|
|
115
|
-
this.sh3Data = sh3Data;
|
|
116
|
-
this.sh3Max = sh3Max;
|
|
117
|
-
}
|
|
118
|
-
dispose() {
|
|
119
|
-
const key = this.#key;
|
|
120
|
-
key?.dispose?.();
|
|
121
|
-
this.store.delete(this);
|
|
122
|
-
this.#key = null;
|
|
123
|
-
key?.dispose?.();
|
|
124
|
-
this.#splats = null;
|
|
125
|
-
this.splatsExtendedData = null;
|
|
126
|
-
this.#cachedWorldBounds = null;
|
|
127
|
-
this.#transform = null;
|
|
128
|
-
this.sh1Data = null;
|
|
129
|
-
this.sh2Data = null;
|
|
130
|
-
this.sh3Data = null;
|
|
131
|
-
this.sh3ExtendedData = null;
|
|
132
|
-
this.modelRoot?.lods?.delete(this);
|
|
133
|
-
}
|
|
134
|
-
constructor({ id, modelRoot, lodStore }) {
|
|
135
|
-
Object.defineProperties(this, {
|
|
136
|
-
id: { value: id },
|
|
137
|
-
modelRoot: { value: modelRoot },
|
|
138
|
-
store: { value: lodStore }
|
|
139
|
-
});
|
|
140
|
-
lodStore.setId(id, this);
|
|
141
|
-
modelRoot.add(this);
|
|
142
|
-
}
|
|
143
|
-
};
|
|
144
|
-
//#endregion
|
|
145
|
-
//#region packages/core/change.ts
|
|
146
|
-
var Change = class {
|
|
147
|
-
constructor({ type, lod }) {
|
|
148
|
-
Object.defineProperties(this, {
|
|
149
|
-
type: { value: type },
|
|
150
|
-
lod: { value: lod }
|
|
151
|
-
});
|
|
152
|
-
}
|
|
153
|
-
};
|
|
154
|
-
//#endregion
|
|
155
|
-
//#region packages/core/modelRoot.ts
|
|
156
|
-
var ModelRoot = class ModelRoot {
|
|
157
|
-
static #keyMap = /* @__PURE__ */ new Map();
|
|
158
|
-
static #idMap = /* @__PURE__ */ new Map();
|
|
159
|
-
static forKey(key) {
|
|
160
|
-
return this.#keyMap.get(key);
|
|
161
|
-
}
|
|
162
|
-
static forId(id) {
|
|
163
|
-
return this.#idMap.get(id);
|
|
164
|
-
}
|
|
165
|
-
#key;
|
|
166
|
-
get key() {
|
|
167
|
-
return this.#key ?? null;
|
|
168
|
-
}
|
|
169
|
-
set key(key) {
|
|
170
|
-
ModelRoot.#keyMap.delete(this.key);
|
|
171
|
-
if (key || 0 === key) ModelRoot.#keyMap.set(key, this);
|
|
172
|
-
this.#key = key;
|
|
173
|
-
}
|
|
174
|
-
#lods = /* @__PURE__ */ new Set();
|
|
175
|
-
get lods() {
|
|
176
|
-
return this.#lods;
|
|
177
|
-
}
|
|
178
|
-
#transform;
|
|
179
|
-
set transform(transform) {
|
|
180
|
-
this.#transform = transform;
|
|
181
|
-
}
|
|
182
|
-
get transform() {
|
|
183
|
-
return this.#transform;
|
|
184
|
-
}
|
|
185
|
-
constructor({ id, stream }) {
|
|
186
|
-
Object.defineProperties(this, {
|
|
187
|
-
id: { value: id },
|
|
188
|
-
stream: { value: stream }
|
|
189
|
-
});
|
|
190
|
-
ModelRoot.#idMap.set(id, this);
|
|
191
|
-
stream.add(this);
|
|
192
|
-
}
|
|
193
|
-
add(lod) {
|
|
194
|
-
this.#lods.add(lod);
|
|
195
|
-
}
|
|
196
|
-
dispose() {
|
|
197
|
-
const lods = [...this.#lods];
|
|
198
|
-
this.#lods.clear();
|
|
199
|
-
for (const lod of lods) lod.dispose();
|
|
200
|
-
ModelRoot.#keyMap.delete(this.key);
|
|
201
|
-
ModelRoot.#idMap.delete(this.id);
|
|
202
|
-
this.#key = null;
|
|
203
|
-
}
|
|
204
|
-
};
|
|
205
|
-
//#endregion
|
|
206
1
|
//#region packages/core/attributeCache.ts
|
|
207
2
|
var AttributeCache = class {
|
|
208
3
|
static #cache = /* @__PURE__ */ new Map();
|
|
@@ -261,292 +56,70 @@ var AttributeCache = class {
|
|
|
261
56
|
}
|
|
262
57
|
};
|
|
263
58
|
//#endregion
|
|
264
|
-
//#region
|
|
265
|
-
var
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
static forId(id) {
|
|
269
|
-
|
|
270
|
-
|
|
59
|
+
//#region \0emscripten-lazy:AquaApi
|
|
60
|
+
var _factoryPromise;
|
|
61
|
+
var _wasmPromise;
|
|
62
|
+
var _wasmUrl = ((u) => u.includes("/.vite/") ? u.replace(/\.vite\/[^?#]*/, () => "@miris-inc/core/dist/AquaApi.wasm") : u)(new URL("AquaApi.wasm", import.meta.url).href);
|
|
63
|
+
var _glueSource = "async function dc($t={}){var Ye,l=$t,Sr=typeof window==\"object\",ge=typeof WorkerGlobalScope<\"u\",Dt=typeof process==\"object\"&&process.versions?.node&&process.type!=\"renderer\",vc=!Sr&&!Dt&&!ge,Rt=[],kr=\"./this.program\",Er=(e,r)=>{throw r},Mt=import.meta.url,Je=\"\";function It(e){return l.locateFile?l.locateFile(e,Je):Je+e}var Qe,Fe;if(Sr||ge){try{Je=new URL(\".\",Mt).href}catch{}ge&&(Fe=e=>{var r=new XMLHttpRequest;return r.open(\"GET\",e,!1),r.responseType=\"arraybuffer\",r.send(null),new Uint8Array(r.response)}),Qe=async e=>{var r=await fetch(e,{credentials:\"same-origin\"});if(r.ok)return r.arrayBuffer();throw new Error(r.status+\" : \"+r.url)}}var we=console.log.bind(console),ee=console.error.bind(console),be,Pe=!1,Ae;function _c(e,r){e||ce(r)}var hc=e=>e.startsWith(\"file://\"),Cr,Tr,$e,G,N,A,ve,C,m,De,Re,W,Fr,Pr=!1;function Ar(){var e=$e.buffer;l.HEAP8=G=new Int8Array(e),A=new Int16Array(e),l.HEAPU8=N=new Uint8Array(e),ve=new Uint16Array(e),l.HEAP32=C=new Int32Array(e),l.HEAPU32=m=new Uint32Array(e),l.HEAPF32=De=new Float32Array(e),l.HEAPF64=Re=new Float64Array(e),W=new BigInt64Array(e),Fr=new BigUint64Array(e)}function jt(){if(l.preRun)for(typeof l.preRun==\"function\"&&(l.preRun=[l.preRun]);l.preRun.length;)Ht(l.preRun.shift());Dr(Mr)}function Ot(){Pr=!0,!l.noFSInit&&!o.initialized&&o.init(),ae.init(),de.__wasm_call_ctors(),o.ignorePermissions=!1}function xt(){if(l.postRun)for(typeof l.postRun==\"function\"&&(l.postRun=[l.postRun]);l.postRun.length;)zt(l.postRun.shift());Dr(Rr)}function ce(e){l.onAbort?.(e),e=\"Aborted(\"+e+\")\",ee(e),Pe=!0,e+=\". Build with -sASSERTIONS for more info.\";var r=new WebAssembly.RuntimeError(e);throw Tr?.(r),r}var er;function Gt(){return l.locateFile?It(\"AquaApi.wasm\"):new URL(\"AquaApi.wasm\",import.meta.url).href}function Lt(e){if(e==er&&be)return new Uint8Array(be);if(Fe)return Fe(e);throw\"both async and sync fetching of the wasm failed\"}async function Nt(e){if(!be)try{var r=await Qe(e);return new Uint8Array(r)}catch{}return Lt(e)}async function Bt(e,r){try{var t=await Nt(e),n=await WebAssembly.instantiate(t,r);return n}catch(i){ee(`failed to asynchronously prepare wasm: ${i}`),ce(i)}}async function Wt(e,r,t){if(!e)try{var n=fetch(r,{credentials:\"same-origin\"}),i=await WebAssembly.instantiateStreaming(n,t);return i}catch(a){ee(`wasm streaming compile failed: ${a}`),ee(\"falling back to ArrayBuffer instantiation\")}return Bt(r,t)}function Ut(){return{env:At,wasi_snapshot_preview1:At}}async function Vt(){function e(a,s){return de=a.exports,$e=de.memory,Ar(),Yr=de.__indirect_function_table,ss(de),de}function r(a){return e(a.instance)}var t=Ut();if(l.instantiateWasm)return new Promise((a,s)=>{l.instantiateWasm(t,(c,u)=>{a(e(c,u))})});er??=Gt();var n=await Wt(be,er,t),i=r(n);return i}class $r{name=\"ExitStatus\";constructor(r){this.message=`Program terminated with exit(${r})`,this.status=r}}var Dr=e=>{for(;e.length>0;)e.shift()(l)},Rr=[],zt=e=>Rr.push(e),Mr=[],Ht=e=>Mr.push(e);function mc(e,r=\"i8\"){switch(r.endsWith(\"*\")&&(r=\"*\"),r){case\"i1\":return G[e];case\"i8\":return G[e];case\"i16\":return A[e>>1];case\"i32\":return C[e>>2];case\"i64\":return W[e>>3];case\"float\":return De[e>>2];case\"double\":return Re[e>>3];case\"*\":return m[e>>2];default:ce(`invalid type for getValue: ${r}`)}}var rr=!0;function pc(e,r,t=\"i8\"){switch(t.endsWith(\"*\")&&(t=\"*\"),t){case\"i1\":G[e]=r;break;case\"i8\":G[e]=r;break;case\"i16\":A[e>>1]=r;break;case\"i32\":C[e>>2]=r;break;case\"i64\":W[e>>3]=BigInt(r);break;case\"float\":De[e>>2]=r;break;case\"double\":Re[e>>3]=r;break;case\"*\":m[e>>2]=r;break;default:ce(`invalid type for setValue: ${t}`)}}var w=e=>St(e),b=()=>Et(),Me=[],Ie=0,qt=e=>{var r=new tr(e);return r.get_caught()||(r.set_caught(!0),Ie--),r.set_rethrown(!1),Me.push(r),Tt(e),Pt(e)},re=0,Xt=()=>{g(0,0);var e=Me.pop();Ct(e.excPtr),re=0};class tr{constructor(r){this.excPtr=r,this.ptr=r-24}set_type(r){m[this.ptr+4>>2]=r}get_type(){return m[this.ptr+4>>2]}set_destructor(r){m[this.ptr+8>>2]=r}get_destructor(){return m[this.ptr+8>>2]}set_caught(r){r=r?1:0,G[this.ptr+12]=r}get_caught(){return G[this.ptr+12]!=0}set_rethrown(r){r=r?1:0,G[this.ptr+13]=r}get_rethrown(){return G[this.ptr+13]!=0}init(r,t){this.set_adjusted_ptr(0),this.set_type(r),this.set_destructor(t)}set_adjusted_ptr(r){m[this.ptr+16>>2]=r}get_adjusted_ptr(){return m[this.ptr+16>>2]}}var je=e=>bt(e),nr=e=>{var r=re;if(!r)return je(0),0;var t=new tr(r);t.set_adjusted_ptr(r);var n=t.get_type();if(!n)return je(0),r;for(var i of e){if(i===0||i===n)break;var a=t.ptr+16;if(Ft(i,n,a))return je(i),r}return je(n),r},Zt=()=>nr([]),Kt=e=>nr([e]),Yt=(e,r)=>nr([e,r]),Jt=()=>{var e=Me.pop();e||ce(\"no exception to throw\");var r=e.excPtr;throw e.get_rethrown()||(Me.push(e),e.set_rethrown(!0),e.set_caught(!1),Ie++),re=r,re},Qt=(e,r,t)=>{var n=new tr(e);throw n.init(r,t),re=e,Ie++,re},en=()=>Ie,rn=e=>{throw re||(re=e),re},Oe=()=>{var e=C[+R.varargs>>2];return R.varargs+=4,e},_e=Oe,D={isAbs:e=>e.charAt(0)===\"/\",splitPath:e=>{var r=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;return r.exec(e).slice(1)},normalizeArray:(e,r)=>{for(var t=0,n=e.length-1;n>=0;n--){var i=e[n];i===\".\"?e.splice(n,1):i===\"..\"?(e.splice(n,1),t++):t&&(e.splice(n,1),t--)}if(r)for(;t;t--)e.unshift(\"..\");return e},normalize:e=>{var r=D.isAbs(e),t=e.slice(-1)===\"/\";return e=D.normalizeArray(e.split(\"/\").filter(n=>!!n),!r).join(\"/\"),!e&&!r&&(e=\".\"),e&&t&&(e+=\"/\"),(r?\"/\":\"\")+e},dirname:e=>{var r=D.splitPath(e),t=r[0],n=r[1];return!t&&!n?\".\":(n&&(n=n.slice(0,-1)),t+n)},basename:e=>e&&e.match(/([^\\/]+|\\/)\\/*$/)[1],join:(...e)=>D.normalize(e.join(\"/\")),join2:(e,r)=>D.normalize(e+\"/\"+r)},tn=()=>e=>crypto.getRandomValues(e),ir=e=>{(ir=tn())(e)},he={resolve:(...e)=>{for(var r=\"\",t=!1,n=e.length-1;n>=-1&&!t;n--){var i=n>=0?e[n]:o.cwd();if(typeof i!=\"string\")throw new TypeError(\"Arguments to path.resolve must be strings\");if(!i)return\"\";r=i+\"/\"+r,t=D.isAbs(i)}return r=D.normalizeArray(r.split(\"/\").filter(a=>!!a),!t).join(\"/\"),(t?\"/\":\"\")+r||\".\"},relative:(e,r)=>{e=he.resolve(e).slice(1),r=he.resolve(r).slice(1);function t(f){for(var d=0;d<f.length&&f[d]===\"\";d++);for(var _=f.length-1;_>=0&&f[_]===\"\";_--);return d>_?[]:f.slice(d,_-d+1)}for(var n=t(e.split(\"/\")),i=t(r.split(\"/\")),a=Math.min(n.length,i.length),s=a,c=0;c<a;c++)if(n[c]!==i[c]){s=c;break}for(var u=[],c=s;c<n.length;c++)u.push(\"..\");return u=u.concat(i.slice(s)),u.join(\"/\")}},Ir=typeof TextDecoder<\"u\"?new TextDecoder:void 0,jr=(e,r,t,n)=>{var i=r+t;if(n)return i;for(;e[r]&&!(r>=i);)++r;return r},me=(e,r=0,t,n)=>{var i=jr(e,r,t,n);if(i-r>16&&e.buffer&&Ir)return Ir.decode(e.subarray(r,i));for(var a=\"\";r<i;){var s=e[r++];if(!(s&128)){a+=String.fromCharCode(s);continue}var c=e[r++]&63;if((s&224)==192){a+=String.fromCharCode((s&31)<<6|c);continue}var u=e[r++]&63;if((s&240)==224?s=(s&15)<<12|c<<6|u:s=(s&7)<<18|c<<12|u<<6|e[r++]&63,s<65536)a+=String.fromCharCode(s);else{var f=s-65536;a+=String.fromCharCode(55296|f>>10,56320|f&1023)}}return a},ar=[],Y=e=>{for(var r=0,t=0;t<e.length;++t){var n=e.charCodeAt(t);n<=127?r++:n<=2047?r+=2:n>=55296&&n<=57343?(r+=4,++t):r+=3}return r},Or=(e,r,t,n)=>{if(!(n>0))return 0;for(var i=t,a=t+n-1,s=0;s<e.length;++s){var c=e.codePointAt(s);if(c<=127){if(t>=a)break;r[t++]=c}else if(c<=2047){if(t+1>=a)break;r[t++]=192|c>>6,r[t++]=128|c&63}else if(c<=65535){if(t+2>=a)break;r[t++]=224|c>>12,r[t++]=128|c>>6&63,r[t++]=128|c&63}else{if(t+3>=a)break;r[t++]=240|c>>18,r[t++]=128|c>>12&63,r[t++]=128|c>>6&63,r[t++]=128|c&63,s++}}return r[t]=0,t-i},or=(e,r,t)=>{var n=t>0?t:Y(e)+1,i=new Array(n),a=Or(e,i,0,i.length);return r&&(i.length=a),i},nn=()=>{if(!ar.length){var e=null;if(typeof window<\"u\"&&typeof window.prompt==\"function\"&&(e=window.prompt(\"Input: \"),e!==null&&(e+=`\n`)),!e)return null;ar=or(e,!0)}return ar.shift()},ae={ttys:[],init(){},shutdown(){},register(e,r){ae.ttys[e]={input:[],output:[],ops:r},o.registerDevice(e,ae.stream_ops)},stream_ops:{open(e){var r=ae.ttys[e.node.rdev];if(!r)throw new o.ErrnoError(43);e.tty=r,e.seekable=!1},close(e){e.tty.ops.fsync(e.tty)},fsync(e){e.tty.ops.fsync(e.tty)},read(e,r,t,n,i){if(!e.tty||!e.tty.ops.get_char)throw new o.ErrnoError(60);for(var a=0,s=0;s<n;s++){var c;try{c=e.tty.ops.get_char(e.tty)}catch{throw new o.ErrnoError(29)}if(c===void 0&&a===0)throw new o.ErrnoError(6);if(c==null)break;a++,r[t+s]=c}return a&&(e.node.atime=Date.now()),a},write(e,r,t,n,i){if(!e.tty||!e.tty.ops.put_char)throw new o.ErrnoError(60);try{for(var a=0;a<n;a++)e.tty.ops.put_char(e.tty,r[t+a])}catch{throw new o.ErrnoError(29)}return n&&(e.node.mtime=e.node.ctime=Date.now()),a}},default_tty_ops:{get_char(e){return nn()},put_char(e,r){r===null||r===10?(we(me(e.output)),e.output=[]):r!=0&&e.output.push(r)},fsync(e){e.output?.length>0&&(we(me(e.output)),e.output=[])},ioctl_tcgets(e){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(e,r,t){return 0},ioctl_tiocgwinsz(e){return[24,80]}},default_tty1_ops:{put_char(e,r){r===null||r===10?(ee(me(e.output)),e.output=[]):r!=0&&e.output.push(r)},fsync(e){e.output?.length>0&&(ee(me(e.output)),e.output=[])}}},xr=e=>{ce()},E={ops_table:null,mount(e){return E.createNode(null,\"/\",16895,0)},createNode(e,r,t,n){if(o.isBlkdev(t)||o.isFIFO(t))throw new o.ErrnoError(63);E.ops_table||={dir:{node:{getattr:E.node_ops.getattr,setattr:E.node_ops.setattr,lookup:E.node_ops.lookup,mknod:E.node_ops.mknod,rename:E.node_ops.rename,unlink:E.node_ops.unlink,rmdir:E.node_ops.rmdir,readdir:E.node_ops.readdir,symlink:E.node_ops.symlink},stream:{llseek:E.stream_ops.llseek}},file:{node:{getattr:E.node_ops.getattr,setattr:E.node_ops.setattr},stream:{llseek:E.stream_ops.llseek,read:E.stream_ops.read,write:E.stream_ops.write,mmap:E.stream_ops.mmap,msync:E.stream_ops.msync}},link:{node:{getattr:E.node_ops.getattr,setattr:E.node_ops.setattr,readlink:E.node_ops.readlink},stream:{}},chrdev:{node:{getattr:E.node_ops.getattr,setattr:E.node_ops.setattr},stream:o.chrdev_stream_ops}};var i=o.createNode(e,r,t,n);return o.isDir(i.mode)?(i.node_ops=E.ops_table.dir.node,i.stream_ops=E.ops_table.dir.stream,i.contents={}):o.isFile(i.mode)?(i.node_ops=E.ops_table.file.node,i.stream_ops=E.ops_table.file.stream,i.usedBytes=0,i.contents=null):o.isLink(i.mode)?(i.node_ops=E.ops_table.link.node,i.stream_ops=E.ops_table.link.stream):o.isChrdev(i.mode)&&(i.node_ops=E.ops_table.chrdev.node,i.stream_ops=E.ops_table.chrdev.stream),i.atime=i.mtime=i.ctime=Date.now(),e&&(e.contents[r]=i,e.atime=e.mtime=e.ctime=i.atime),i},getFileDataAsTypedArray(e){return e.contents?e.contents.subarray?e.contents.subarray(0,e.usedBytes):new Uint8Array(e.contents):new Uint8Array(0)},expandFileStorage(e,r){var t=e.contents?e.contents.length:0;if(!(t>=r)){var n=1024*1024;r=Math.max(r,t*(t<n?2:1.125)>>>0),t!=0&&(r=Math.max(r,256));var i=e.contents;e.contents=new Uint8Array(r),e.usedBytes>0&&e.contents.set(i.subarray(0,e.usedBytes),0)}},resizeFileStorage(e,r){if(e.usedBytes!=r)if(r==0)e.contents=null,e.usedBytes=0;else{var t=e.contents;e.contents=new Uint8Array(r),t&&e.contents.set(t.subarray(0,Math.min(r,e.usedBytes))),e.usedBytes=r}},node_ops:{getattr(e){var r={};return r.dev=o.isChrdev(e.mode)?e.id:1,r.ino=e.id,r.mode=e.mode,r.nlink=1,r.uid=0,r.gid=0,r.rdev=e.rdev,o.isDir(e.mode)?r.size=4096:o.isFile(e.mode)?r.size=e.usedBytes:o.isLink(e.mode)?r.size=e.link.length:r.size=0,r.atime=new Date(e.atime),r.mtime=new Date(e.mtime),r.ctime=new Date(e.ctime),r.blksize=4096,r.blocks=Math.ceil(r.size/r.blksize),r},setattr(e,r){for(const t of[\"mode\",\"atime\",\"mtime\",\"ctime\"])r[t]!=null&&(e[t]=r[t]);r.size!==void 0&&E.resizeFileStorage(e,r.size)},lookup(e,r){throw E.doesNotExistError||(E.doesNotExistError=new o.ErrnoError(44),E.doesNotExistError.stack=\"<generic error, no stack>\"),E.doesNotExistError},mknod(e,r,t,n){return E.createNode(e,r,t,n)},rename(e,r,t){var n;try{n=o.lookupNode(r,t)}catch{}if(n){if(o.isDir(e.mode))for(var i in n.contents)throw new o.ErrnoError(55);o.hashRemoveNode(n)}delete e.parent.contents[e.name],r.contents[t]=e,e.name=t,r.ctime=r.mtime=e.parent.ctime=e.parent.mtime=Date.now()},unlink(e,r){delete e.contents[r],e.ctime=e.mtime=Date.now()},rmdir(e,r){var t=o.lookupNode(e,r);for(var n in t.contents)throw new o.ErrnoError(55);delete e.contents[r],e.ctime=e.mtime=Date.now()},readdir(e){return[\".\",\"..\",...Object.keys(e.contents)]},symlink(e,r,t){var n=E.createNode(e,r,41471,0);return n.link=t,n},readlink(e){if(!o.isLink(e.mode))throw new o.ErrnoError(28);return e.link}},stream_ops:{read(e,r,t,n,i){var a=e.node.contents;if(i>=e.node.usedBytes)return 0;var s=Math.min(e.node.usedBytes-i,n);if(s>8&&a.subarray)r.set(a.subarray(i,i+s),t);else for(var c=0;c<s;c++)r[t+c]=a[i+c];return s},write(e,r,t,n,i,a){if(r.buffer===G.buffer&&(a=!1),!n)return 0;var s=e.node;if(s.mtime=s.ctime=Date.now(),r.subarray&&(!s.contents||s.contents.subarray)){if(a)return s.contents=r.subarray(t,t+n),s.usedBytes=n,n;if(s.usedBytes===0&&i===0)return s.contents=r.slice(t,t+n),s.usedBytes=n,n;if(i+n<=s.usedBytes)return s.contents.set(r.subarray(t,t+n),i),n}if(E.expandFileStorage(s,i+n),s.contents.subarray&&r.subarray)s.contents.set(r.subarray(t,t+n),i);else for(var c=0;c<n;c++)s.contents[i+c]=r[t+c];return s.usedBytes=Math.max(s.usedBytes,i+n),n},llseek(e,r,t){var n=r;if(t===1?n+=e.position:t===2&&o.isFile(e.node.mode)&&(n+=e.node.usedBytes),n<0)throw new o.ErrnoError(28);return n},mmap(e,r,t,n,i){if(!o.isFile(e.node.mode))throw new o.ErrnoError(43);var a,s,c=e.node.contents;if(!(i&2)&&c&&c.buffer===G.buffer)s=!1,a=c.byteOffset;else{if(s=!0,a=xr(r),!a)throw new o.ErrnoError(48);c&&((t>0||t+r<c.length)&&(c.subarray?c=c.subarray(t,t+r):c=Array.prototype.slice.call(c,t,t+r)),G.set(c,a))}return{ptr:a,allocated:s}},msync(e,r,t,n,i){return E.stream_ops.write(e,r,0,n,t,!1),0}}},an=e=>{var r={r:0,\"r+\":2,w:577,\"w+\":578,a:1089,\"a+\":1090},t=r[e];if(typeof t>\"u\")throw new Error(`Unknown file open mode: ${e}`);return t},sr=(e,r)=>{var t=0;return e&&(t|=365),r&&(t|=146),t},on=async e=>{var r=await Qe(e);return new Uint8Array(r)},sn=(...e)=>o.createDataFile(...e),cn=e=>e,ue=0,Se=null,Gr=e=>{if(ue--,l.monitorRunDependencies?.(ue),ue==0&&Se){var r=Se;Se=null,r()}},Lr=e=>{ue++,l.monitorRunDependencies?.(ue)},Nr=[],un=async(e,r)=>{typeof Browser<\"u\"&&Browser.init();for(var t of Nr)if(t.canHandle(r))return t.handle(e,r);return e},Br=async(e,r,t,n,i,a,s,c)=>{var u=r?he.resolve(D.join2(e,r)):e,f=cn(`cp ${u}`);Lr(f);try{var d=t;typeof t==\"string\"&&(d=await on(t)),d=await un(d,u),c?.(),a||sn(e,r,d,n,i,s)}finally{Gr(f)}},ln=(e,r,t,n,i,a,s,c,u,f)=>{Br(e,r,t,n,i,c,u,f).then(a).catch(s)},o={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:\"/\",initialized:!1,ignorePermissions:!0,filesystems:null,syncFSRequests:0,readFiles:{},ErrnoError:class{name=\"ErrnoError\";constructor(e){this.errno=e}},FSStream:class{shared={};get object(){return this.node}set object(e){this.node=e}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(e){this.shared.flags=e}get position(){return this.shared.position}set position(e){this.shared.position=e}},FSNode:class{node_ops={};stream_ops={};readMode=365;writeMode=146;mounted=null;constructor(e,r,t,n){e||(e=this),this.parent=e,this.mount=e.mount,this.id=o.nextInode++,this.name=r,this.mode=t,this.rdev=n,this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(e){e?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(e){e?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return o.isDir(this.mode)}get isDevice(){return o.isChrdev(this.mode)}},lookupPath(e,r={}){if(!e)throw new o.ErrnoError(44);r.follow_mount??=!0,D.isAbs(e)||(e=o.cwd()+\"/\"+e);e:for(var t=0;t<40;t++){for(var n=e.split(\"/\").filter(f=>!!f),i=o.root,a=\"/\",s=0;s<n.length;s++){var c=s===n.length-1;if(c&&r.parent)break;if(n[s]!==\".\"){if(n[s]===\"..\"){if(a=D.dirname(a),o.isRoot(i)){e=a+\"/\"+n.slice(s+1).join(\"/\"),t--;continue e}else i=i.parent;continue}a=D.join2(a,n[s]);try{i=o.lookupNode(i,n[s])}catch(f){if(f?.errno===44&&c&&r.noent_okay)return{path:a};throw f}if(o.isMountpoint(i)&&(!c||r.follow_mount)&&(i=i.mounted.root),o.isLink(i.mode)&&(!c||r.follow)){if(!i.node_ops.readlink)throw new o.ErrnoError(52);var u=i.node_ops.readlink(i);D.isAbs(u)||(u=D.dirname(a)+\"/\"+u),e=u+\"/\"+n.slice(s+1).join(\"/\");continue e}}}return{path:a,node:i}}throw new o.ErrnoError(32)},getPath(e){for(var r;;){if(o.isRoot(e)){var t=e.mount.mountpoint;return r?t[t.length-1]!==\"/\"?`${t}/${r}`:t+r:t}r=r?`${e.name}/${r}`:e.name,e=e.parent}},hashName(e,r){for(var t=0,n=0;n<r.length;n++)t=(t<<5)-t+r.charCodeAt(n)|0;return(e+t>>>0)%o.nameTable.length},hashAddNode(e){var r=o.hashName(e.parent.id,e.name);e.name_next=o.nameTable[r],o.nameTable[r]=e},hashRemoveNode(e){var r=o.hashName(e.parent.id,e.name);if(o.nameTable[r]===e)o.nameTable[r]=e.name_next;else for(var t=o.nameTable[r];t;){if(t.name_next===e){t.name_next=e.name_next;break}t=t.name_next}},lookupNode(e,r){var t=o.mayLookup(e);if(t)throw new o.ErrnoError(t);for(var n=o.hashName(e.id,r),i=o.nameTable[n];i;i=i.name_next){var a=i.name;if(i.parent.id===e.id&&a===r)return i}return o.lookup(e,r)},createNode(e,r,t,n){var i=new o.FSNode(e,r,t,n);return o.hashAddNode(i),i},destroyNode(e){o.hashRemoveNode(e)},isRoot(e){return e===e.parent},isMountpoint(e){return!!e.mounted},isFile(e){return(e&61440)===32768},isDir(e){return(e&61440)===16384},isLink(e){return(e&61440)===40960},isChrdev(e){return(e&61440)===8192},isBlkdev(e){return(e&61440)===24576},isFIFO(e){return(e&61440)===4096},isSocket(e){return(e&49152)===49152},flagsToPermissionString(e){var r=[\"r\",\"w\",\"rw\"][e&3];return e&512&&(r+=\"w\"),r},nodePermissions(e,r){return o.ignorePermissions?0:r.includes(\"r\")&&!(e.mode&292)||r.includes(\"w\")&&!(e.mode&146)||r.includes(\"x\")&&!(e.mode&73)?2:0},mayLookup(e){if(!o.isDir(e.mode))return 54;var r=o.nodePermissions(e,\"x\");return r||(e.node_ops.lookup?0:2)},mayCreate(e,r){if(!o.isDir(e.mode))return 54;try{var t=o.lookupNode(e,r);return 20}catch{}return o.nodePermissions(e,\"wx\")},mayDelete(e,r,t){var n;try{n=o.lookupNode(e,r)}catch(a){return a.errno}var i=o.nodePermissions(e,\"wx\");if(i)return i;if(t){if(!o.isDir(n.mode))return 54;if(o.isRoot(n)||o.getPath(n)===o.cwd())return 10}else if(o.isDir(n.mode))return 31;return 0},mayOpen(e,r){return e?o.isLink(e.mode)?32:o.isDir(e.mode)&&(o.flagsToPermissionString(r)!==\"r\"||r&576)?31:o.nodePermissions(e,o.flagsToPermissionString(r)):44},checkOpExists(e,r){if(!e)throw new o.ErrnoError(r);return e},MAX_OPEN_FDS:4096,nextfd(){for(var e=0;e<=o.MAX_OPEN_FDS;e++)if(!o.streams[e])return e;throw new o.ErrnoError(33)},getStreamChecked(e){var r=o.getStream(e);if(!r)throw new o.ErrnoError(8);return r},getStream:e=>o.streams[e],createStream(e,r=-1){return e=Object.assign(new o.FSStream,e),r==-1&&(r=o.nextfd()),e.fd=r,o.streams[r]=e,e},closeStream(e){o.streams[e]=null},dupStream(e,r=-1){var t=o.createStream(e,r);return t.stream_ops?.dup?.(t),t},doSetAttr(e,r,t){var n=e?.stream_ops.setattr,i=n?e:r;n??=r.node_ops.setattr,o.checkOpExists(n,63),n(i,t)},chrdev_stream_ops:{open(e){var r=o.getDevice(e.node.rdev);e.stream_ops=r.stream_ops,e.stream_ops.open?.(e)},llseek(){throw new o.ErrnoError(70)}},major:e=>e>>8,minor:e=>e&255,makedev:(e,r)=>e<<8|r,registerDevice(e,r){o.devices[e]={stream_ops:r}},getDevice:e=>o.devices[e],getMounts(e){for(var r=[],t=[e];t.length;){var n=t.pop();r.push(n),t.push(...n.mounts)}return r},syncfs(e,r){typeof e==\"function\"&&(r=e,e=!1),o.syncFSRequests++,o.syncFSRequests>1&&ee(`warning: ${o.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var t=o.getMounts(o.root.mount),n=0;function i(s){return o.syncFSRequests--,r(s)}function a(s){if(s)return a.errored?void 0:(a.errored=!0,i(s));++n>=t.length&&i(null)}t.forEach(s=>{if(!s.type.syncfs)return a(null);s.type.syncfs(s,e,a)})},mount(e,r,t){var n=t===\"/\",i=!t,a;if(n&&o.root)throw new o.ErrnoError(10);if(!n&&!i){var s=o.lookupPath(t,{follow_mount:!1});if(t=s.path,a=s.node,o.isMountpoint(a))throw new o.ErrnoError(10);if(!o.isDir(a.mode))throw new o.ErrnoError(54)}var c={type:e,opts:r,mountpoint:t,mounts:[]},u=e.mount(c);return u.mount=c,c.root=u,n?o.root=u:a&&(a.mounted=c,a.mount&&a.mount.mounts.push(c)),u},unmount(e){var r=o.lookupPath(e,{follow_mount:!1});if(!o.isMountpoint(r.node))throw new o.ErrnoError(28);var t=r.node,n=t.mounted,i=o.getMounts(n);Object.keys(o.nameTable).forEach(s=>{for(var c=o.nameTable[s];c;){var u=c.name_next;i.includes(c.mount)&&o.destroyNode(c),c=u}}),t.mounted=null;var a=t.mount.mounts.indexOf(n);t.mount.mounts.splice(a,1)},lookup(e,r){return e.node_ops.lookup(e,r)},mknod(e,r,t){var n=o.lookupPath(e,{parent:!0}),i=n.node,a=D.basename(e);if(!a)throw new o.ErrnoError(28);if(a===\".\"||a===\"..\")throw new o.ErrnoError(20);var s=o.mayCreate(i,a);if(s)throw new o.ErrnoError(s);if(!i.node_ops.mknod)throw new o.ErrnoError(63);return i.node_ops.mknod(i,a,r,t)},statfs(e){return o.statfsNode(o.lookupPath(e,{follow:!0}).node)},statfsStream(e){return o.statfsNode(e.node)},statfsNode(e){var r={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:o.nextInode,ffree:o.nextInode-1,fsid:42,flags:2,namelen:255};return e.node_ops.statfs&&Object.assign(r,e.node_ops.statfs(e.mount.opts.root)),r},create(e,r=438){return r&=4095,r|=32768,o.mknod(e,r,0)},mkdir(e,r=511){return r&=1023,r|=16384,o.mknod(e,r,0)},mkdirTree(e,r){var t=e.split(\"/\"),n=\"\";for(var i of t)if(i){(n||D.isAbs(e))&&(n+=\"/\"),n+=i;try{o.mkdir(n,r)}catch(a){if(a.errno!=20)throw a}}},mkdev(e,r,t){return typeof t>\"u\"&&(t=r,r=438),r|=8192,o.mknod(e,r,t)},symlink(e,r){if(!he.resolve(e))throw new o.ErrnoError(44);var t=o.lookupPath(r,{parent:!0}),n=t.node;if(!n)throw new o.ErrnoError(44);var i=D.basename(r),a=o.mayCreate(n,i);if(a)throw new o.ErrnoError(a);if(!n.node_ops.symlink)throw new o.ErrnoError(63);return n.node_ops.symlink(n,i,e)},rename(e,r){var t=D.dirname(e),n=D.dirname(r),i=D.basename(e),a=D.basename(r),s,c,u;if(s=o.lookupPath(e,{parent:!0}),c=s.node,s=o.lookupPath(r,{parent:!0}),u=s.node,!c||!u)throw new o.ErrnoError(44);if(c.mount!==u.mount)throw new o.ErrnoError(75);var f=o.lookupNode(c,i),d=he.relative(e,n);if(d.charAt(0)!==\".\")throw new o.ErrnoError(28);if(d=he.relative(r,t),d.charAt(0)!==\".\")throw new o.ErrnoError(55);var _;try{_=o.lookupNode(u,a)}catch{}if(f!==_){var p=o.isDir(f.mode),v=o.mayDelete(c,i,p);if(v)throw new o.ErrnoError(v);if(v=_?o.mayDelete(u,a,p):o.mayCreate(u,a),v)throw new o.ErrnoError(v);if(!c.node_ops.rename)throw new o.ErrnoError(63);if(o.isMountpoint(f)||_&&o.isMountpoint(_))throw new o.ErrnoError(10);if(u!==c&&(v=o.nodePermissions(c,\"w\"),v))throw new o.ErrnoError(v);o.hashRemoveNode(f);try{c.node_ops.rename(f,u,a),f.parent=u}catch(h){throw h}finally{o.hashAddNode(f)}}},rmdir(e){var r=o.lookupPath(e,{parent:!0}),t=r.node,n=D.basename(e),i=o.lookupNode(t,n),a=o.mayDelete(t,n,!0);if(a)throw new o.ErrnoError(a);if(!t.node_ops.rmdir)throw new o.ErrnoError(63);if(o.isMountpoint(i))throw new o.ErrnoError(10);t.node_ops.rmdir(t,n),o.destroyNode(i)},readdir(e){var r=o.lookupPath(e,{follow:!0}),t=r.node,n=o.checkOpExists(t.node_ops.readdir,54);return n(t)},unlink(e){var r=o.lookupPath(e,{parent:!0}),t=r.node;if(!t)throw new o.ErrnoError(44);var n=D.basename(e),i=o.lookupNode(t,n),a=o.mayDelete(t,n,!1);if(a)throw new o.ErrnoError(a);if(!t.node_ops.unlink)throw new o.ErrnoError(63);if(o.isMountpoint(i))throw new o.ErrnoError(10);t.node_ops.unlink(t,n),o.destroyNode(i)},readlink(e){var r=o.lookupPath(e),t=r.node;if(!t)throw new o.ErrnoError(44);if(!t.node_ops.readlink)throw new o.ErrnoError(28);return t.node_ops.readlink(t)},stat(e,r){var t=o.lookupPath(e,{follow:!r}),n=t.node,i=o.checkOpExists(n.node_ops.getattr,63);return i(n)},fstat(e){var r=o.getStreamChecked(e),t=r.node,n=r.stream_ops.getattr,i=n?r:t;return n??=t.node_ops.getattr,o.checkOpExists(n,63),n(i)},lstat(e){return o.stat(e,!0)},doChmod(e,r,t,n){o.doSetAttr(e,r,{mode:t&4095|r.mode&-4096,ctime:Date.now(),dontFollow:n})},chmod(e,r,t){var n;if(typeof e==\"string\"){var i=o.lookupPath(e,{follow:!t});n=i.node}else n=e;o.doChmod(null,n,r,t)},lchmod(e,r){o.chmod(e,r,!0)},fchmod(e,r){var t=o.getStreamChecked(e);o.doChmod(t,t.node,r,!1)},doChown(e,r,t){o.doSetAttr(e,r,{timestamp:Date.now(),dontFollow:t})},chown(e,r,t,n){var i;if(typeof e==\"string\"){var a=o.lookupPath(e,{follow:!n});i=a.node}else i=e;o.doChown(null,i,n)},lchown(e,r,t){o.chown(e,r,t,!0)},fchown(e,r,t){var n=o.getStreamChecked(e);o.doChown(n,n.node,!1)},doTruncate(e,r,t){if(o.isDir(r.mode))throw new o.ErrnoError(31);if(!o.isFile(r.mode))throw new o.ErrnoError(28);var n=o.nodePermissions(r,\"w\");if(n)throw new o.ErrnoError(n);o.doSetAttr(e,r,{size:t,timestamp:Date.now()})},truncate(e,r){if(r<0)throw new o.ErrnoError(28);var t;if(typeof e==\"string\"){var n=o.lookupPath(e,{follow:!0});t=n.node}else t=e;o.doTruncate(null,t,r)},ftruncate(e,r){var t=o.getStreamChecked(e);if(r<0||(t.flags&2097155)===0)throw new o.ErrnoError(28);o.doTruncate(t,t.node,r)},utime(e,r,t){var n=o.lookupPath(e,{follow:!0}),i=n.node,a=o.checkOpExists(i.node_ops.setattr,63);a(i,{atime:r,mtime:t})},open(e,r,t=438){if(e===\"\")throw new o.ErrnoError(44);r=typeof r==\"string\"?an(r):r,r&64?t=t&4095|32768:t=0;var n,i;if(typeof e==\"object\")n=e;else{i=e.endsWith(\"/\");var a=o.lookupPath(e,{follow:!(r&131072),noent_okay:!0});n=a.node,e=a.path}var s=!1;if(r&64)if(n){if(r&128)throw new o.ErrnoError(20)}else{if(i)throw new o.ErrnoError(31);n=o.mknod(e,t|511,0),s=!0}if(!n)throw new o.ErrnoError(44);if(o.isChrdev(n.mode)&&(r&=-513),r&65536&&!o.isDir(n.mode))throw new o.ErrnoError(54);if(!s){var c=o.mayOpen(n,r);if(c)throw new o.ErrnoError(c)}r&512&&!s&&o.truncate(n,0),r&=-131713;var u=o.createStream({node:n,path:o.getPath(n),flags:r,seekable:!0,position:0,stream_ops:n.stream_ops,ungotten:[],error:!1});return u.stream_ops.open&&u.stream_ops.open(u),s&&o.chmod(n,t&511),l.logReadFiles&&!(r&1)&&(e in o.readFiles||(o.readFiles[e]=1)),u},close(e){if(o.isClosed(e))throw new o.ErrnoError(8);e.getdents&&(e.getdents=null);try{e.stream_ops.close&&e.stream_ops.close(e)}catch(r){throw r}finally{o.closeStream(e.fd)}e.fd=null},isClosed(e){return e.fd===null},llseek(e,r,t){if(o.isClosed(e))throw new o.ErrnoError(8);if(!e.seekable||!e.stream_ops.llseek)throw new o.ErrnoError(70);if(t!=0&&t!=1&&t!=2)throw new o.ErrnoError(28);return e.position=e.stream_ops.llseek(e,r,t),e.ungotten=[],e.position},read(e,r,t,n,i){if(n<0||i<0)throw new o.ErrnoError(28);if(o.isClosed(e))throw new o.ErrnoError(8);if((e.flags&2097155)===1)throw new o.ErrnoError(8);if(o.isDir(e.node.mode))throw new o.ErrnoError(31);if(!e.stream_ops.read)throw new o.ErrnoError(28);var a=typeof i<\"u\";if(!a)i=e.position;else if(!e.seekable)throw new o.ErrnoError(70);var s=e.stream_ops.read(e,r,t,n,i);return a||(e.position+=s),s},write(e,r,t,n,i,a){if(n<0||i<0)throw new o.ErrnoError(28);if(o.isClosed(e))throw new o.ErrnoError(8);if((e.flags&2097155)===0)throw new o.ErrnoError(8);if(o.isDir(e.node.mode))throw new o.ErrnoError(31);if(!e.stream_ops.write)throw new o.ErrnoError(28);e.seekable&&e.flags&1024&&o.llseek(e,0,2);var s=typeof i<\"u\";if(!s)i=e.position;else if(!e.seekable)throw new o.ErrnoError(70);var c=e.stream_ops.write(e,r,t,n,i,a);return s||(e.position+=c),c},mmap(e,r,t,n,i){if((n&2)!==0&&(i&2)===0&&(e.flags&2097155)!==2)throw new o.ErrnoError(2);if((e.flags&2097155)===1)throw new o.ErrnoError(2);if(!e.stream_ops.mmap)throw new o.ErrnoError(43);if(!r)throw new o.ErrnoError(28);return e.stream_ops.mmap(e,r,t,n,i)},msync(e,r,t,n,i){return e.stream_ops.msync?e.stream_ops.msync(e,r,t,n,i):0},ioctl(e,r,t){if(!e.stream_ops.ioctl)throw new o.ErrnoError(59);return e.stream_ops.ioctl(e,r,t)},readFile(e,r={}){if(r.flags=r.flags||0,r.encoding=r.encoding||\"binary\",r.encoding!==\"utf8\"&&r.encoding!==\"binary\")throw new Error(`Invalid encoding type \"${r.encoding}\"`);var t=o.open(e,r.flags),n=o.stat(e),i=n.size,a=new Uint8Array(i);return o.read(t,a,0,i,0),r.encoding===\"utf8\"&&(a=me(a)),o.close(t),a},writeFile(e,r,t={}){t.flags=t.flags||577;var n=o.open(e,t.flags,t.mode);if(typeof r==\"string\"&&(r=new Uint8Array(or(r,!0))),ArrayBuffer.isView(r))o.write(n,r,0,r.byteLength,void 0,t.canOwn);else throw new Error(\"Unsupported data type\");o.close(n)},cwd:()=>o.currentPath,chdir(e){var r=o.lookupPath(e,{follow:!0});if(r.node===null)throw new o.ErrnoError(44);if(!o.isDir(r.node.mode))throw new o.ErrnoError(54);var t=o.nodePermissions(r.node,\"x\");if(t)throw new o.ErrnoError(t);o.currentPath=r.path},createDefaultDirectories(){o.mkdir(\"/tmp\"),o.mkdir(\"/home\"),o.mkdir(\"/home/web_user\")},createDefaultDevices(){o.mkdir(\"/dev\"),o.registerDevice(o.makedev(1,3),{read:()=>0,write:(n,i,a,s,c)=>s,llseek:()=>0}),o.mkdev(\"/dev/null\",o.makedev(1,3)),ae.register(o.makedev(5,0),ae.default_tty_ops),ae.register(o.makedev(6,0),ae.default_tty1_ops),o.mkdev(\"/dev/tty\",o.makedev(5,0)),o.mkdev(\"/dev/tty1\",o.makedev(6,0));var e=new Uint8Array(1024),r=0,t=()=>(r===0&&(ir(e),r=e.byteLength),e[--r]);o.createDevice(\"/dev\",\"random\",t),o.createDevice(\"/dev\",\"urandom\",t),o.mkdir(\"/dev/shm\"),o.mkdir(\"/dev/shm/tmp\")},createSpecialDirectories(){o.mkdir(\"/proc\");var e=o.mkdir(\"/proc/self\");o.mkdir(\"/proc/self/fd\"),o.mount({mount(){var r=o.createNode(e,\"fd\",16895,73);return r.stream_ops={llseek:E.stream_ops.llseek},r.node_ops={lookup(t,n){var i=+n,a=o.getStreamChecked(i),s={parent:null,mount:{mountpoint:\"fake\"},node_ops:{readlink:()=>a.path},id:i+1};return s.parent=s,s},readdir(){return Array.from(o.streams.entries()).filter(([t,n])=>n).map(([t,n])=>t.toString())}},r}},{},\"/proc/self/fd\")},createStandardStreams(e,r,t){e?o.createDevice(\"/dev\",\"stdin\",e):o.symlink(\"/dev/tty\",\"/dev/stdin\"),r?o.createDevice(\"/dev\",\"stdout\",null,r):o.symlink(\"/dev/tty\",\"/dev/stdout\"),t?o.createDevice(\"/dev\",\"stderr\",null,t):o.symlink(\"/dev/tty1\",\"/dev/stderr\");var n=o.open(\"/dev/stdin\",0),i=o.open(\"/dev/stdout\",1),a=o.open(\"/dev/stderr\",1)},staticInit(){o.nameTable=new Array(4096),o.mount(E,{},\"/\"),o.createDefaultDirectories(),o.createDefaultDevices(),o.createSpecialDirectories(),o.filesystems={MEMFS:E}},init(e,r,t){o.initialized=!0,e??=l.stdin,r??=l.stdout,t??=l.stderr,o.createStandardStreams(e,r,t)},quit(){o.initialized=!1;for(var e of o.streams)e&&o.close(e)},findObject(e,r){var t=o.analyzePath(e,r);return t.exists?t.object:null},analyzePath(e,r){try{var t=o.lookupPath(e,{follow:!r});e=t.path}catch{}var n={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var t=o.lookupPath(e,{parent:!0});n.parentExists=!0,n.parentPath=t.path,n.parentObject=t.node,n.name=D.basename(e),t=o.lookupPath(e,{follow:!r}),n.exists=!0,n.path=t.path,n.object=t.node,n.name=t.node.name,n.isRoot=t.path===\"/\"}catch(i){n.error=i.errno}return n},createPath(e,r,t,n){e=typeof e==\"string\"?e:o.getPath(e);for(var i=r.split(\"/\").reverse();i.length;){var a=i.pop();if(a){var s=D.join2(e,a);try{o.mkdir(s)}catch(c){if(c.errno!=20)throw c}e=s}}return s},createFile(e,r,t,n,i){var a=D.join2(typeof e==\"string\"?e:o.getPath(e),r),s=sr(n,i);return o.create(a,s)},createDataFile(e,r,t,n,i,a){var s=r;e&&(e=typeof e==\"string\"?e:o.getPath(e),s=r?D.join2(e,r):e);var c=sr(n,i),u=o.create(s,c);if(t){if(typeof t==\"string\"){for(var f=new Array(t.length),d=0,_=t.length;d<_;++d)f[d]=t.charCodeAt(d);t=f}o.chmod(u,c|146);var p=o.open(u,577);o.write(p,t,0,t.length,0,a),o.close(p),o.chmod(u,c)}},createDevice(e,r,t,n){var i=D.join2(typeof e==\"string\"?e:o.getPath(e),r),a=sr(!!t,!!n);o.createDevice.major??=64;var s=o.makedev(o.createDevice.major++,0);return o.registerDevice(s,{open(c){c.seekable=!1},close(c){n?.buffer?.length&&n(10)},read(c,u,f,d,_){for(var p=0,v=0;v<d;v++){var h;try{h=t()}catch{throw new o.ErrnoError(29)}if(h===void 0&&p===0)throw new o.ErrnoError(6);if(h==null)break;p++,u[f+v]=h}return p&&(c.node.atime=Date.now()),p},write(c,u,f,d,_){for(var p=0;p<d;p++)try{n(u[f+p])}catch{throw new o.ErrnoError(29)}return d&&(c.node.mtime=c.node.ctime=Date.now()),p}}),o.mkdev(i,a,s)},forceLoadFile(e){if(e.isDevice||e.isFolder||e.link||e.contents)return!0;if(typeof XMLHttpRequest<\"u\")throw new Error(\"Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.\");try{e.contents=Fe(e.url)}catch{throw new o.ErrnoError(29)}},createLazyFile(e,r,t,n,i){class a{lengthKnown=!1;chunks=[];get(v){if(!(v>this.length-1||v<0)){var h=v%this.chunkSize,k=v/this.chunkSize|0;return this.getter(k)[h]}}setDataGetter(v){this.getter=v}cacheLength(){var v=new XMLHttpRequest;if(v.open(\"HEAD\",t,!1),v.send(null),!(v.status>=200&&v.status<300||v.status===304))throw new Error(\"Couldn't load \"+t+\". Status: \"+v.status);var h=Number(v.getResponseHeader(\"Content-length\")),k,$=(k=v.getResponseHeader(\"Accept-Ranges\"))&&k===\"bytes\",T=(k=v.getResponseHeader(\"Content-Encoding\"))&&k===\"gzip\",x=1024*1024;$||(x=h);var P=(z,S)=>{if(z>S)throw new Error(\"invalid range (\"+z+\", \"+S+\") or no bytes requested!\");if(S>h-1)throw new Error(\"only \"+h+\" bytes available! programmer error!\");var M=new XMLHttpRequest;if(M.open(\"GET\",t,!1),h!==x&&M.setRequestHeader(\"Range\",\"bytes=\"+z+\"-\"+S),M.responseType=\"arraybuffer\",M.overrideMimeType&&M.overrideMimeType(\"text/plain; charset=x-user-defined\"),M.send(null),!(M.status>=200&&M.status<300||M.status===304))throw new Error(\"Couldn't load \"+t+\". Status: \"+M.status);return M.response!==void 0?new Uint8Array(M.response||[]):or(M.responseText||\"\",!0)},K=this;K.setDataGetter(z=>{var S=z*x,M=(z+1)*x-1;if(M=Math.min(M,h-1),typeof K.chunks[z]>\"u\"&&(K.chunks[z]=P(S,M)),typeof K.chunks[z]>\"u\")throw new Error(\"doXHR failed!\");return K.chunks[z]}),(T||!h)&&(x=h=1,h=this.getter(0).length,x=h,we(\"LazyFiles on gzip forces download of the whole file when length is accessed\")),this._length=h,this._chunkSize=x,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(typeof XMLHttpRequest<\"u\"){if(!ge)throw\"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc\";var s=new a,c={isDevice:!1,contents:s}}else var c={isDevice:!1,url:t};var u=o.createFile(e,r,c,n,i);c.contents?u.contents=c.contents:c.url&&(u.contents=null,u.url=c.url),Object.defineProperties(u,{usedBytes:{get:function(){return this.contents.length}}});var f={},d=Object.keys(u.stream_ops);d.forEach(p=>{var v=u.stream_ops[p];f[p]=(...h)=>(o.forceLoadFile(u),v(...h))});function _(p,v,h,k,$){var T=p.node.contents;if($>=T.length)return 0;var x=Math.min(T.length-$,k);if(T.slice)for(var P=0;P<x;P++)v[h+P]=T[$+P];else for(var P=0;P<x;P++)v[h+P]=T.get($+P);return x}return f.read=(p,v,h,k,$)=>(o.forceLoadFile(u),_(p,v,h,k,$)),f.mmap=(p,v,h,k,$)=>{o.forceLoadFile(u);var T=xr(v);if(!T)throw new o.ErrnoError(48);return _(p,G,T,v,h),{ptr:T,allocated:!0}},u.stream_ops=f,u}},I=(e,r,t)=>e?me(N,e,r,t):\"\",R={DEFAULT_POLLMASK:5,calculateAt(e,r,t){if(D.isAbs(r))return r;var n;if(e===-100)n=o.cwd();else{var i=R.getStreamFromFD(e);n=i.path}if(r.length==0){if(!t)throw new o.ErrnoError(44);return n}return n+\"/\"+r},writeStat(e,r){m[e>>2]=r.dev,m[e+4>>2]=r.mode,m[e+8>>2]=r.nlink,m[e+12>>2]=r.uid,m[e+16>>2]=r.gid,m[e+20>>2]=r.rdev,W[e+24>>3]=BigInt(r.size),C[e+32>>2]=4096,C[e+36>>2]=r.blocks;var t=r.atime.getTime(),n=r.mtime.getTime(),i=r.ctime.getTime();return W[e+40>>3]=BigInt(Math.floor(t/1e3)),m[e+48>>2]=t%1e3*1e3*1e3,W[e+56>>3]=BigInt(Math.floor(n/1e3)),m[e+64>>2]=n%1e3*1e3*1e3,W[e+72>>3]=BigInt(Math.floor(i/1e3)),m[e+80>>2]=i%1e3*1e3*1e3,W[e+88>>3]=BigInt(r.ino),0},writeStatFs(e,r){m[e+4>>2]=r.bsize,m[e+60>>2]=r.bsize,W[e+8>>3]=BigInt(r.blocks),W[e+16>>3]=BigInt(r.bfree),W[e+24>>3]=BigInt(r.bavail),W[e+32>>3]=BigInt(r.files),W[e+40>>3]=BigInt(r.ffree),m[e+48>>2]=r.fsid,m[e+64>>2]=r.flags,m[e+56>>2]=r.namelen},doMsync(e,r,t,n,i){if(!o.isFile(r.node.mode))throw new o.ErrnoError(43);if(n&2)return 0;var a=N.slice(e,e+t);o.msync(r,a,i,t,n)},getStreamFromFD(e){var r=o.getStreamChecked(e);return r},varargs:void 0,getStr(e){var r=I(e);return r}};function fn(e,r,t){R.varargs=t;try{var n=R.getStreamFromFD(e);switch(r){case 0:{var i=Oe();if(i<0)return-28;for(;o.streams[i];)i++;var a;return a=o.dupStream(n,i),a.fd}case 1:case 2:return 0;case 3:return n.flags;case 4:{var i=Oe();return n.flags|=i,0}case 12:{var i=_e(),s=0;return A[i+s>>1]=2,0}case 13:case 14:return 0}return-28}catch(c){if(typeof o>\"u\"||c.name!==\"ErrnoError\")throw c;return-c.errno}}function dn(e,r){try{return R.writeStat(r,o.fstat(e))}catch(t){if(typeof o>\"u\"||t.name!==\"ErrnoError\")throw t;return-t.errno}}function vn(e,r,t){R.varargs=t;try{var n=R.getStreamFromFD(e);switch(r){case 21509:return n.tty?0:-59;case 21505:{if(!n.tty)return-59;if(n.tty.ops.ioctl_tcgets){var i=n.tty.ops.ioctl_tcgets(n),a=_e();C[a>>2]=i.c_iflag||0,C[a+4>>2]=i.c_oflag||0,C[a+8>>2]=i.c_cflag||0,C[a+12>>2]=i.c_lflag||0;for(var s=0;s<32;s++)G[a+s+17]=i.c_cc[s]||0;return 0}return 0}case 21510:case 21511:case 21512:return n.tty?0:-59;case 21506:case 21507:case 21508:{if(!n.tty)return-59;if(n.tty.ops.ioctl_tcsets){for(var a=_e(),c=C[a>>2],u=C[a+4>>2],f=C[a+8>>2],d=C[a+12>>2],_=[],s=0;s<32;s++)_.push(G[a+s+17]);return n.tty.ops.ioctl_tcsets(n.tty,r,{c_iflag:c,c_oflag:u,c_cflag:f,c_lflag:d,c_cc:_})}return 0}case 21519:{if(!n.tty)return-59;var a=_e();return C[a>>2]=0,0}case 21520:return n.tty?-28:-59;case 21537:case 21531:{var a=_e();return o.ioctl(n,r,a)}case 21523:{if(!n.tty)return-59;if(n.tty.ops.ioctl_tiocgwinsz){var p=n.tty.ops.ioctl_tiocgwinsz(n.tty),a=_e();A[a>>1]=p[0],A[a+2>>1]=p[1]}return 0}case 21524:return n.tty?0:-59;case 21515:return n.tty?0:-59;default:return-28}}catch(v){if(typeof o>\"u\"||v.name!==\"ErrnoError\")throw v;return-v.errno}}function _n(e,r){try{return e=R.getStr(e),R.writeStat(r,o.lstat(e))}catch(t){if(typeof o>\"u\"||t.name!==\"ErrnoError\")throw t;return-t.errno}}function hn(e,r,t,n){try{r=R.getStr(r);var i=n&256,a=n&4096;return n=n&-6401,r=R.calculateAt(e,r,a),R.writeStat(t,i?o.lstat(r):o.stat(r))}catch(s){if(typeof o>\"u\"||s.name!==\"ErrnoError\")throw s;return-s.errno}}function mn(e,r,t,n){R.varargs=n;try{r=R.getStr(r),r=R.calculateAt(e,r);var i=n?Oe():0;return o.open(r,t,i).fd}catch(a){if(typeof o>\"u\"||a.name!==\"ErrnoError\")throw a;return-a.errno}}function pn(e){try{return e=R.getStr(e),o.rmdir(e),0}catch(r){if(typeof o>\"u\"||r.name!==\"ErrnoError\")throw r;return-r.errno}}function yn(e,r){try{return e=R.getStr(e),R.writeStat(r,o.stat(e))}catch(t){if(typeof o>\"u\"||t.name!==\"ErrnoError\")throw t;return-t.errno}}function gn(e,r,t){try{if(r=R.getStr(r),r=R.calculateAt(e,r),!t)o.unlink(r);else if(t===512)o.rmdir(r);else return-28;return 0}catch(n){if(typeof o>\"u\"||n.name!==\"ErrnoError\")throw n;return-n.errno}}var wn=()=>ce(\"\"),V=e=>{for(var r=\"\";;){var t=N[e++];if(!t)return r;r+=String.fromCharCode(t)}},pe={},le={},xe={},ke=class extends Error{constructor(r){super(r),this.name=\"BindingError\"}},F=e=>{throw new ke(e)};function bn(e,r,t={}){var n=r.name;if(e||F(`type \"${n}\" must have a positive integer typeid pointer`),le.hasOwnProperty(e)){if(t.ignoreDuplicateRegistrations)return;F(`Cannot register type '${n}' twice`)}if(le[e]=r,delete xe[e],pe.hasOwnProperty(e)){var i=pe[e];delete pe[e],i.forEach(a=>a())}}function q(e,r,t={}){return bn(e,r,t)}var Wr=(e,r,t)=>{switch(r){case 1:return t?n=>G[n]:n=>N[n];case 2:return t?n=>A[n>>1]:n=>ve[n>>1];case 4:return t?n=>C[n>>2]:n=>m[n>>2];case 8:return t?n=>W[n>>3]:n=>Fr[n>>3];default:throw new TypeError(`invalid integer width (${r}): ${e}`)}},Sn=(e,r,t,n,i)=>{r=V(r);const a=n===0n;let s=c=>c;if(a){const c=t*8;s=u=>BigInt.asUintN(c,u),i=s(i)}q(e,{name:r,fromWireType:s,toWireType:(c,u)=>(typeof u==\"number\"&&(u=BigInt(u)),u),readValueFromPointer:Wr(r,t,!a),destructorFunction:null})},kn=(e,r,t,n)=>{r=V(r),q(e,{name:r,fromWireType:function(i){return!!i},toWireType:function(i,a){return a?t:n},readValueFromPointer:function(i){return this.fromWireType(N[i])},destructorFunction:null})},En=e=>({count:e.count,deleteScheduled:e.deleteScheduled,preservePointerOnDelete:e.preservePointerOnDelete,ptr:e.ptr,ptrType:e.ptrType,smartPtr:e.smartPtr,smartPtrType:e.smartPtrType}),cr=e=>{function r(t){return t.$$.ptrType.registeredClass.name}F(r(e)+\" instance already deleted\")},ur=!1,Ur=e=>{},Cn=e=>{e.smartPtr?e.smartPtrType.rawDestructor(e.smartPtr):e.ptrType.registeredClass.rawDestructor(e.ptr)},Vr=e=>{e.count.value-=1;var r=e.count.value===0;r&&Cn(e)},Ee=e=>typeof FinalizationRegistry>\"u\"?(Ee=r=>r,e):(ur=new FinalizationRegistry(r=>{Vr(r.$$)}),Ee=r=>{var t=r.$$,n=!!t.smartPtr;if(n){var i={$$:t};ur.register(r,i,r)}return r},Ur=r=>ur.unregister(r),Ee(e)),Ge=[],Tn=()=>{for(;Ge.length;){var e=Ge.pop();e.$$.deleteScheduled=!1,e.delete()}},zr,Fn=()=>{let e=Le.prototype;Object.assign(e,{isAliasOf(t){if(!(this instanceof Le)||!(t instanceof Le))return!1;var n=this.$$.ptrType.registeredClass,i=this.$$.ptr;t.$$=t.$$;for(var a=t.$$.ptrType.registeredClass,s=t.$$.ptr;n.baseClass;)i=n.upcast(i),n=n.baseClass;for(;a.baseClass;)s=a.upcast(s),a=a.baseClass;return n===a&&i===s},clone(){if(this.$$.ptr||cr(this),this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;var t=Ee(Object.create(Object.getPrototypeOf(this),{$$:{value:En(this.$$)}}));return t.$$.count.value+=1,t.$$.deleteScheduled=!1,t},delete(){this.$$.ptr||cr(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&F(\"Object already scheduled for deletion\"),Ur(this),Vr(this.$$),this.$$.preservePointerOnDelete||(this.$$.smartPtr=void 0,this.$$.ptr=void 0)},isDeleted(){return!this.$$.ptr},deleteLater(){return this.$$.ptr||cr(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&F(\"Object already scheduled for deletion\"),Ge.push(this),Ge.length===1&&zr&&zr(Tn),this.$$.deleteScheduled=!0,this}});const r=Symbol.dispose;r&&(e[r]=e.delete)};function Le(){}var Ne=(e,r)=>Object.defineProperty(r,\"name\",{value:e}),Hr={},qr=(e,r,t)=>{if(e[r].overloadTable===void 0){var n=e[r];e[r]=function(...i){return e[r].overloadTable.hasOwnProperty(i.length)||F(`Function '${t}' called with an invalid number of arguments (${i.length}) - expects one of (${e[r].overloadTable})!`),e[r].overloadTable[i.length].apply(this,i)},e[r].overloadTable=[],e[r].overloadTable[n.argCount]=n}},lr=(e,r,t)=>{l.hasOwnProperty(e)?((t===void 0||l[e].overloadTable!==void 0&&l[e].overloadTable[t]!==void 0)&&F(`Cannot register public name '${e}' twice`),qr(l,e,e),l[e].overloadTable.hasOwnProperty(t)&&F(`Cannot register multiple overloads of a function with the same number of arguments (${t})!`),l[e].overloadTable[t]=r):(l[e]=r,l[e].argCount=t)},Pn=48,An=57,$n=e=>{e=e.replace(/[^a-zA-Z0-9_]/g,\"$\");var r=e.charCodeAt(0);return r>=Pn&&r<=An?`_${e}`:e};function Dn(e,r,t,n,i,a,s,c){this.name=e,this.constructor=r,this.instancePrototype=t,this.rawDestructor=n,this.baseClass=i,this.getActualType=a,this.upcast=s,this.downcast=c,this.pureVirtualFunctions=[]}var Be=(e,r,t)=>{for(;r!==t;)r.upcast||F(`Expected null or instance of ${t.name}, got an instance of ${r.name}`),e=r.upcast(e),r=r.baseClass;return e},fr=e=>{if(e===null)return\"null\";var r=typeof e;return r===\"object\"||r===\"array\"||r===\"function\"?e.toString():\"\"+e};function Rn(e,r){if(r===null)return this.isReference&&F(`null is not a valid ${this.name}`),0;r.$$||F(`Cannot pass \"${fr(r)}\" as a ${this.name}`),r.$$.ptr||F(`Cannot pass deleted object as a pointer of type ${this.name}`);var t=r.$$.ptrType.registeredClass,n=Be(r.$$.ptr,t,this.registeredClass);return n}function Mn(e,r){var t;if(r===null)return this.isReference&&F(`null is not a valid ${this.name}`),this.isSmartPointer?(t=this.rawConstructor(),e!==null&&e.push(this.rawDestructor,t),t):0;(!r||!r.$$)&&F(`Cannot pass \"${fr(r)}\" as a ${this.name}`),r.$$.ptr||F(`Cannot pass deleted object as a pointer of type ${this.name}`),!this.isConst&&r.$$.ptrType.isConst&&F(`Cannot convert argument of type ${r.$$.smartPtrType?r.$$.smartPtrType.name:r.$$.ptrType.name} to parameter type ${this.name}`);var n=r.$$.ptrType.registeredClass;if(t=Be(r.$$.ptr,n,this.registeredClass),this.isSmartPointer)switch(r.$$.smartPtr===void 0&&F(\"Passing raw pointer to smart pointer is illegal\"),this.sharingPolicy){case 0:r.$$.smartPtrType===this?t=r.$$.smartPtr:F(`Cannot convert argument of type ${r.$$.smartPtrType?r.$$.smartPtrType.name:r.$$.ptrType.name} to parameter type ${this.name}`);break;case 1:t=r.$$.smartPtr;break;case 2:if(r.$$.smartPtrType===this)t=r.$$.smartPtr;else{var i=r.clone();t=this.rawShare(t,B.toHandle(()=>i.delete())),e!==null&&e.push(this.rawDestructor,t)}break;default:F(\"Unsupporting sharing policy\")}return t}function In(e,r){if(r===null)return this.isReference&&F(`null is not a valid ${this.name}`),0;r.$$||F(`Cannot pass \"${fr(r)}\" as a ${this.name}`),r.$$.ptr||F(`Cannot pass deleted object as a pointer of type ${this.name}`),r.$$.ptrType.isConst&&F(`Cannot convert argument of type ${r.$$.ptrType.name} to parameter type ${this.name}`);var t=r.$$.ptrType.registeredClass,n=Be(r.$$.ptr,t,this.registeredClass);return n}function We(e){return this.fromWireType(m[e>>2])}var Xr=(e,r,t)=>{if(r===t)return e;if(t.baseClass===void 0)return null;var n=Xr(e,r,t.baseClass);return n===null?null:t.downcast(n)},jn={},On=(e,r)=>{for(r===void 0&&F(\"ptr should not be undefined\");e.baseClass;)r=e.upcast(r),e=e.baseClass;return r},xn=(e,r)=>(r=On(e,r),jn[r]),Gn=class extends Error{constructor(r){super(r),this.name=\"InternalError\"}},Ue=e=>{throw new Gn(e)},Ve=(e,r)=>{(!r.ptrType||!r.ptr)&&Ue(\"makeClassHandle requires ptr and ptrType\");var t=!!r.smartPtrType,n=!!r.smartPtr;return t!==n&&Ue(\"Both smartPtrType and smartPtr must be specified\"),r.count={value:1},Ee(Object.create(e,{$$:{value:r,writable:!0}}))};function Ln(e){var r=this.getPointee(e);if(!r)return this.destructor(e),null;var t=xn(this.registeredClass,r);if(t!==void 0){if(t.$$.count.value===0)return t.$$.ptr=r,t.$$.smartPtr=e,t.clone();var n=t.clone();return this.destructor(e),n}function i(){return this.isSmartPointer?Ve(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:r,smartPtrType:this,smartPtr:e}):Ve(this.registeredClass.instancePrototype,{ptrType:this,ptr:e})}var a=this.registeredClass.getActualType(r),s=Hr[a];if(!s)return i.call(this);var c;this.isConst?c=s.constPointerType:c=s.pointerType;var u=Xr(r,this.registeredClass,c.registeredClass);return u===null?i.call(this):this.isSmartPointer?Ve(c.registeredClass.instancePrototype,{ptrType:c,ptr:u,smartPtrType:this,smartPtr:e}):Ve(c.registeredClass.instancePrototype,{ptrType:c,ptr:u})}var Nn=()=>{Object.assign(ze.prototype,{getPointee(e){return this.rawGetPointee&&(e=this.rawGetPointee(e)),e},destructor(e){this.rawDestructor?.(e)},readValueFromPointer:We,fromWireType:Ln})};function ze(e,r,t,n,i,a,s,c,u,f,d){this.name=e,this.registeredClass=r,this.isReference=t,this.isConst=n,this.isSmartPointer=i,this.pointeeType=a,this.sharingPolicy=s,this.rawGetPointee=c,this.rawConstructor=u,this.rawShare=f,this.rawDestructor=d,!i&&r.baseClass===void 0?n?(this.toWireType=Rn,this.destructorFunction=null):(this.toWireType=In,this.destructorFunction=null):this.toWireType=Mn}var Zr=(e,r,t)=>{l.hasOwnProperty(e)||Ue(\"Replacing nonexistent public symbol\"),l[e].overloadTable!==void 0&&t!==void 0?l[e].overloadTable[t]=r:(l[e]=r,l[e].argCount=t)},Kr=[],Yr,y=e=>{var r=Kr[e];return r||(Kr[e]=r=Yr.get(e)),r},te=(e,r,t=!1)=>{e=V(e);function n(){var a=y(r);return a}var i=n();return typeof i!=\"function\"&&F(`unknown function pointer with signature ${e}: ${r}`),i};class Bn extends Error{}var Jr=e=>{var r=gt(e),t=V(r);return J(r),t},ye=(e,r)=>{var t=[],n={};function i(a){if(!n[a]&&!le[a]){if(xe[a]){xe[a].forEach(i);return}t.push(a),n[a]=!0}}throw r.forEach(i),new Bn(`${e}: `+t.map(Jr).join([\", \"]))},oe=(e,r,t)=>{e.forEach(c=>xe[c]=r);function n(c){var u=t(c);u.length!==e.length&&Ue(\"Mismatched type converter count\");for(var f=0;f<e.length;++f)q(e[f],u[f])}var i=new Array(r.length),a=[],s=0;r.forEach((c,u)=>{le.hasOwnProperty(c)?i[u]=le[c]:(a.push(c),pe.hasOwnProperty(c)||(pe[c]=[]),pe[c].push(()=>{i[u]=le[c],++s,s===a.length&&n(i)}))}),a.length===0&&n(i)},Wn=(e,r,t,n,i,a,s,c,u,f,d,_,p)=>{d=V(d),a=te(i,a),c&&=te(s,c),f&&=te(u,f),p=te(_,p);var v=$n(d);lr(v,function(){ye(`Cannot construct ${d} due to unbound types`,[n])}),oe([e,r,t],n?[n]:[],h=>{h=h[0];var k,$;n?(k=h.registeredClass,$=k.instancePrototype):$=Le.prototype;var T=Ne(d,function(...M){if(Object.getPrototypeOf(this)!==x)throw new ke(`Use 'new' to construct ${d}`);if(P.constructor_body===void 0)throw new ke(`${d} has no accessible constructor`);var se=P.constructor_body[M.length];if(se===void 0)throw new ke(`Tried to invoke ctor of ${d} with invalid number of parameters (${M.length}) - expected (${Object.keys(P.constructor_body).toString()}) parameters instead!`);return se.apply(this,M)}),x=Object.create($,{constructor:{value:T}});T.prototype=x;var P=new Dn(d,T,x,p,k,a,c,f);P.baseClass&&(P.baseClass.__derivedClasses??=[],P.baseClass.__derivedClasses.push(P));var K=new ze(d,P,!0,!1,!1),z=new ze(d+\"*\",P,!1,!1,!1),S=new ze(d+\" const*\",P,!1,!0,!1);return Hr[e]={pointerType:z,constPointerType:S},Zr(v,T),[K,z,S]})},dr=(e,r)=>{for(var t=[],n=0;n<e;n++)t.push(m[r+n*4>>2]);return t},vr=e=>{for(;e.length;){var r=e.pop(),t=e.pop();t(r)}};function Qr(e){for(var r=1;r<e.length;++r)if(e[r]!==null&&e[r].destructorFunction===void 0)return!0;return!1}function Un(e,r,t,n){var i=Qr(e),a=e.length-2,s=[],c=[\"fn\"];r&&c.push(\"thisWired\");for(var u=0;u<a;++u)s.push(`arg${u}`),c.push(`arg${u}Wired`);s=s.join(\",\"),c=c.join(\",\");var f=`return function (${s}) {\n`;i&&(f+=`var destructors = [];\n`);var d=i?\"destructors\":\"null\",_=[\"humanName\",\"throwBindingError\",\"invoker\",\"fn\",\"runDestructors\",\"fromRetWire\",\"toClassParamWire\"];r&&(f+=`var thisWired = toClassParamWire(${d}, this);\n`);for(var u=0;u<a;++u){var p=`toArg${u}Wire`;f+=`var arg${u}Wired = ${p}(${d}, arg${u});\n`,_.push(p)}f+=(t||n?\"var rv = \":\"\")+`invoker(${c});\n`;var v=t?\"rv\":\"\";if(i)f+=`runDestructors(destructors);\n`;else for(var u=r?1:2;u<e.length;++u){var h=u===1?\"thisWired\":\"arg\"+(u-2)+\"Wired\";e[u].destructorFunction!==null&&(f+=`${h}_dtor(${h});\n`,_.push(`${h}_dtor`))}return t&&(f+=`var ret = fromRetWire(rv);\nreturn ret;\n`),f+=`}\n`,new Function(_,f)}function _r(e,r,t,n,i,a){var s=r.length;s<2&&F(\"argTypes array size mismatch! Must at least get return value and 'this' types!\");for(var c=r[1]!==null&&t!==null,u=Qr(r),f=!r[0].isVoid,d=s-2,_=r[0],p=r[1],v=[e,F,n,i,vr,_.fromWireType.bind(_),p?.toWireType.bind(p)],h=2;h<s;++h){var k=r[h];v.push(k.toWireType.bind(k))}if(!u)for(var h=c?1:2;h<r.length;++h)r[h].destructorFunction!==null&&v.push(r[h].destructorFunction);var T=Un(r,c,f,a)(...v);return Ne(e,T)}var Vn=(e,r,t,n,i,a)=>{var s=dr(r,t);i=te(n,i);var c=[a],u=[];oe([],[e],f=>{f=f[0];var d=`constructor ${f.name}`;if(f.registeredClass.constructor_body===void 0&&(f.registeredClass.constructor_body=[]),f.registeredClass.constructor_body[r-1]!==void 0)throw new ke(`Cannot register multiple constructors with identical number of parameters (${r-1}) for class '${f.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);return f.registeredClass.constructor_body[r-1]=()=>{ye(`Cannot construct ${f.name} due to unbound types`,s)},oe([],s,_=>(_.splice(1,0,null),f.registeredClass.constructor_body[r-1]=_r(d,_,null,i,a),[])),[]})},et=e=>{e=e.trim();const r=e.indexOf(\"(\");return r===-1?e:e.slice(0,r)},zn=(e,r,t,n,i,a,s,c,u,f)=>{var d=dr(t,n);r=V(r),r=et(r),a=te(i,a,u),oe([],[e],_=>{_=_[0];var p=`${_.name}.${r}`;r.startsWith(\"@@\")&&(r=Symbol[r.substring(2)]),c&&_.registeredClass.pureVirtualFunctions.push(r);function v(){ye(`Cannot call ${p} due to unbound types`,d)}var h=_.registeredClass.instancePrototype,k=h[r];return k===void 0||k.overloadTable===void 0&&k.className!==_.name&&k.argCount===t-2?(v.argCount=t-2,v.className=_.name,h[r]=v):(qr(h,r,p),h[r].overloadTable[t-2]=v),oe([],d,$=>{var T=_r(p,$,_,a,s,u);return h[r].overloadTable===void 0?(T.argCount=t-2,h[r]=T):h[r].overloadTable[t-2]=T,[]}),[]})},rt=(e,r,t)=>(e instanceof Object||F(`${t} with invalid \"this\": ${e}`),e instanceof r.registeredClass.constructor||F(`${t} incompatible with \"this\" of type ${e.constructor.name}`),e.$$.ptr||F(`cannot call emscripten binding method ${t} on deleted object`),Be(e.$$.ptr,e.$$.ptrType.registeredClass,r.registeredClass)),Hn=(e,r,t,n,i,a,s,c,u,f)=>{r=V(r),i=te(n,i),oe([],[e],d=>{d=d[0];var _=`${d.name}.${r}`,p={get(){ye(`Cannot access ${_} due to unbound types`,[t,s])},enumerable:!0,configurable:!0};return u?p.set=()=>ye(`Cannot access ${_} due to unbound types`,[t,s]):p.set=v=>F(_+\" is a read-only property\"),Object.defineProperty(d.registeredClass.instancePrototype,r,p),oe([],u?[t,s]:[t],v=>{var h=v[0],k={get(){var T=rt(this,d,_+\" getter\");return h.fromWireType(i(a,T))},enumerable:!0};if(u){u=te(c,u);var $=v[1];k.set=function(T){var x=rt(this,d,_+\" setter\"),P=[];u(f,x,$.toWireType(P,T)),vr(P)}}return Object.defineProperty(d.registeredClass.instancePrototype,r,k),[]}),[]})},tt=[],fe=[0,1,,1,null,1,!0,1,!1,1],hr=e=>{e>9&&--fe[e+1]===0&&(fe[e]=void 0,tt.push(e))},B={toValue:e=>(e||F(`Cannot use deleted val. handle = ${e}`),fe[e]),toHandle:e=>{switch(e){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:{const r=tt.pop()||fe.length;return fe[r]=e,fe[r+1]=1,r}}}},nt={name:\"emscripten::val\",fromWireType:e=>{var r=B.toValue(e);return hr(e),r},toWireType:(e,r)=>B.toHandle(r),readValueFromPointer:We,destructorFunction:null},qn=e=>q(e,nt),Xn=(e,r,t)=>{switch(r){case 1:return t?function(n){return this.fromWireType(G[n])}:function(n){return this.fromWireType(N[n])};case 2:return t?function(n){return this.fromWireType(A[n>>1])}:function(n){return this.fromWireType(ve[n>>1])};case 4:return t?function(n){return this.fromWireType(C[n>>2])}:function(n){return this.fromWireType(m[n>>2])};default:throw new TypeError(`invalid integer width (${r}): ${e}`)}},Zn=(e,r,t,n)=>{r=V(r);function i(){}i.values={},q(e,{name:r,constructor:i,fromWireType:function(a){return this.constructor.values[a]},toWireType:(a,s)=>s.value,readValueFromPointer:Xn(r,t,n),destructorFunction:null}),lr(r,i)},it=(e,r)=>{var t=le[e];return t===void 0&&F(`${r} has unknown type ${Jr(e)}`),t},Kn=(e,r,t)=>{var n=it(e,\"enum\");r=V(r);var i=n.constructor,a=Object.create(n.constructor.prototype,{value:{value:t},constructor:{value:Ne(`${n.name}_${r}`,function(){})}});i.values[t]=a,i[r]=a},Yn=(e,r)=>{switch(r){case 4:return function(t){return this.fromWireType(De[t>>2])};case 8:return function(t){return this.fromWireType(Re[t>>3])};default:throw new TypeError(`invalid float width (${r}): ${e}`)}},Jn=(e,r,t)=>{r=V(r),q(e,{name:r,fromWireType:n=>n,toWireType:(n,i)=>i,readValueFromPointer:Yn(r,t),destructorFunction:null})},Qn=(e,r,t,n,i,a,s,c)=>{var u=dr(r,t);e=V(e),e=et(e),i=te(n,i,s),lr(e,function(){ye(`Cannot call ${e} due to unbound types`,u)},r-1),oe([],u,f=>{var d=[f[0],null].concat(f.slice(1));return Zr(e,_r(e,d,null,i,a,s),r-1),[]})},ei=(e,r,t,n,i)=>{r=V(r);const a=n===0;let s=u=>u;if(a){var c=32-8*t;s=u=>u<<c>>>c,i=s(i)}q(e,{name:r,fromWireType:s,toWireType:(u,f)=>f,readValueFromPointer:Wr(r,t,n!==0),destructorFunction:null})},ri=(e,r,t)=>{var n=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array],i=n[r];function a(s){var c=m[s>>2],u=m[s+4>>2];return new i(G.buffer,u,c)}t=V(t),q(e,{name:t,fromWireType:a,readValueFromPointer:a},{ignoreDuplicateRegistrations:!0})},ti=Object.assign({optional:!0},nt),ni=(e,r)=>{q(e,ti)},O=(e,r,t)=>Or(e,N,r,t),ii=(e,r)=>{r=V(r);var t=!0;q(e,{name:r,fromWireType(n){var i=m[n>>2],a=n+4,s;if(t)s=I(a,i,!0);else{s=\"\";for(var c=0;c<i;++c)s+=String.fromCharCode(N[a+c])}return J(n),s},toWireType(n,i){i instanceof ArrayBuffer&&(i=new Uint8Array(i));var a,s=typeof i==\"string\";s||ArrayBuffer.isView(i)&&i.BYTES_PER_ELEMENT==1||F(\"Cannot pass non-string to std::string\"),t&&s?a=Y(i):a=i.length;var c=Z(4+a+1),u=c+4;if(m[c>>2]=a,s)if(t)O(i,u,a+1);else for(var f=0;f<a;++f){var d=i.charCodeAt(f);d>255&&(J(c),F(\"String has UTF-16 code units that do not fit in 8 bits\")),N[u+f]=d}else N.set(i,u);return n!==null&&n.push(J,c),c},readValueFromPointer:We,destructorFunction(n){J(n)}})},at=typeof TextDecoder<\"u\"?new TextDecoder(\"utf-16le\"):void 0,ai=(e,r,t)=>{var n=e>>1,i=jr(ve,n,r/2,t);if(i-n>16&&at)return at.decode(ve.subarray(n,i));for(var a=\"\",s=n;s<i;++s){var c=ve[s];a+=String.fromCharCode(c)}return a},oi=(e,r,t)=>{if(t??=2147483647,t<2)return 0;t-=2;for(var n=r,i=t<e.length*2?t/2:e.length,a=0;a<i;++a){var s=e.charCodeAt(a);A[r>>1]=s,r+=2}return A[r>>1]=0,r-n},si=e=>e.length*2,ci=(e,r,t)=>{for(var n=\"\",i=e>>2,a=0;!(a>=r/4);a++){var s=m[i+a];if(!s&&!t)break;n+=String.fromCodePoint(s)}return n},ui=(e,r,t)=>{if(t??=2147483647,t<4)return 0;for(var n=r,i=n+t-4,a=0;a<e.length;++a){var s=e.codePointAt(a);if(s>65535&&a++,C[r>>2]=s,r+=4,r+4>i)break}return C[r>>2]=0,r-n},li=e=>{for(var r=0,t=0;t<e.length;++t){var n=e.codePointAt(t);n>65535&&t++,r+=4}return r},fi=(e,r,t)=>{t=V(t);var n,i,a;r===2?(n=ai,i=oi,a=si):(n=ci,i=ui,a=li),q(e,{name:t,fromWireType:s=>{var c=m[s>>2],u=n(s+4,c*r,!0);return J(s),u},toWireType:(s,c)=>{typeof c!=\"string\"&&F(`Cannot pass non-string to C++ string type ${t}`);var u=a(c),f=Z(4+u+r);return m[f>>2]=u/r,i(c,f+4,u+r),s!==null&&s.push(J,f),f},readValueFromPointer:We,destructorFunction(s){J(s)}})},di=(e,r)=>{r=V(r),q(e,{isVoid:!0,name:r,fromWireType:()=>{},toWireType:(t,n)=>{}})},ot=0,vi=()=>{rr=!1,ot=0},mr=[],_i=e=>{var r=mr.length;return mr.push(e),r},hi=(e,r)=>{for(var t=new Array(e),n=0;n<e;++n)t[n]=it(m[r+n*4>>2],`parameter ${n}`);return t},mi=(e,r,t)=>{var n=[],i=e(n,t);return n.length&&(m[r>>2]=B.toHandle(n)),i},pi={},pr=e=>{var r=pi[e];return r===void 0?V(e):r},yi=(e,r,t)=>{var n=8,[i,...a]=hi(e,r),s=i.toWireType.bind(i),c=a.map(v=>v.readValueFromPointer.bind(v));e--;var u={toValue:B.toValue},f=c.map((v,h)=>{var k=`argFromPtr${h}`;return u[k]=v,`${k}(args${h?\"+\"+h*n:\"\"})`}),d;switch(t){case 0:d=\"toValue(handle)\";break;case 2:d=\"new (toValue(handle))\";break;case 3:d=\"\";break;case 1:u.getStringOrSymbol=pr,d=\"toValue(handle)[getStringOrSymbol(methodName)]\";break}d+=`(${f})`,i.isVoid||(u.toReturnWire=s,u.emval_returnValue=mi,d=`return emval_returnValue(toReturnWire, destructorsRef, ${d})`),d=`return function (handle, methodName, destructorsRef, args) {\n ${d}\n }`;var _=new Function(Object.keys(u),d)(...Object.values(u)),p=`methodCaller<(${a.map(v=>v.name)}) => ${i.name}>`;return _i(Ne(p,_))},st=()=>globalThis,gi=e=>e===0?B.toHandle(st()):(e=pr(e),B.toHandle(st()[e])),wi=(e,r)=>(e=B.toValue(e),r=B.toValue(r),B.toHandle(e[r])),bi=e=>{e>9&&(fe[e+1]+=1)},Si=(e,r,t,n,i)=>mr[e](r,t,n,i),ki=()=>B.toHandle([]),Ei=e=>B.toHandle(pr(e)),Ci=e=>{var r=B.toValue(e);vr(r),hr(e)},Ti=(e,r,t)=>{e=B.toValue(e),r=B.toValue(r),t=B.toValue(t),e[r]=t},Fi=9007199254740992,Pi=-9007199254740992,He=e=>e<Pi||e>Fi?NaN:Number(e);function Ai(e,r){e=He(e);var t=new Date(e*1e3);C[r>>2]=t.getUTCSeconds(),C[r+4>>2]=t.getUTCMinutes(),C[r+8>>2]=t.getUTCHours(),C[r+12>>2]=t.getUTCDate(),C[r+16>>2]=t.getUTCMonth(),C[r+20>>2]=t.getUTCFullYear()-1900,C[r+24>>2]=t.getUTCDay();var n=Date.UTC(t.getUTCFullYear(),0,1,0,0,0,0),i=(t.getTime()-n)/(1e3*60*60*24)|0;C[r+28>>2]=i}var $i=e=>e%4===0&&(e%100!==0||e%400===0),Di=[0,31,60,91,121,152,182,213,244,274,305,335],Ri=[0,31,59,90,120,151,181,212,243,273,304,334],Mi=e=>{var r=$i(e.getFullYear()),t=r?Di:Ri,n=t[e.getMonth()]+e.getDate()-1;return n};function Ii(e,r){e=He(e);var t=new Date(e*1e3);C[r>>2]=t.getSeconds(),C[r+4>>2]=t.getMinutes(),C[r+8>>2]=t.getHours(),C[r+12>>2]=t.getDate(),C[r+16>>2]=t.getMonth(),C[r+20>>2]=t.getFullYear()-1900,C[r+24>>2]=t.getDay();var n=Mi(t)|0;C[r+28>>2]=n,C[r+36>>2]=-(t.getTimezoneOffset()*60);var i=new Date(t.getFullYear(),0,1),a=new Date(t.getFullYear(),6,1).getTimezoneOffset(),s=i.getTimezoneOffset(),c=(a!=s&&t.getTimezoneOffset()==Math.min(s,a))|0;C[r+32>>2]=c}var Ce={},ct=e=>{if(e instanceof $r||e==\"unwind\")return Ae;Er(1,e)},ut=()=>rr||ot>0,lt=e=>{Ae=e,ut()||(l.onExit?.(e),Pe=!0),Er(e,new $r(e))},ji=(e,r)=>{Ae=e,lt(e)},Oi=ji,xi=()=>{if(!ut())try{Oi(Ae)}catch(e){ct(e)}},ft=e=>{if(!Pe)try{e(),xi()}catch(r){ct(r)}},yr=()=>performance.now(),Gi=(e,r)=>{if(Ce[e]&&(clearTimeout(Ce[e].id),delete Ce[e]),!r)return 0;var t=setTimeout(()=>{delete Ce[e],ft(()=>wt(e,yr()))},r);return Ce[e]={id:t,timeout_ms:r},0},Li=(e,r,t,n)=>{var i=new Date().getFullYear(),a=new Date(i,0,1),s=new Date(i,6,1),c=a.getTimezoneOffset(),u=s.getTimezoneOffset(),f=Math.max(c,u);m[e>>2]=f*60,C[r>>2]=+(c!=u);var d=v=>{var h=v>=0?\"-\":\"+\",k=Math.abs(v),$=String(Math.floor(k/60)).padStart(2,\"0\"),T=String(k%60).padStart(2,\"0\");return`UTC${h}${$}${T}`},_=d(c),p=d(u);u<c?(O(_,t,17),O(p,n,17)):(O(_,n,17),O(p,t,17))},dt=()=>Date.now(),Ni=1,Bi=e=>e>=0&&e<=3;function Wi(e,r,t){if(r=He(r),!Bi(e))return 28;var n;if(e===0)n=dt();else if(Ni)n=yr();else return 52;var i=Math.round(n*1e3*1e3);return W[t>>3]=BigInt(i),0}var Ui=e=>{console.warn(I(e))},Vi=(e,r)=>ee(I(e,r));function zi(e){if(U.xhrs.has(e)){var r=U.xhrs.get(e);U.xhrs.free(e),r.readyState>0&&r.readyState<4&&r.abort()}}var vt=()=>2147483648,Hi=()=>vt(),qi=()=>!ge,Xi=(e,r)=>we(I(e,r)),Zi=(e,r)=>Math.ceil(e/r)*r,Ki=e=>{var r=$e.buffer.byteLength,t=(e-r+65535)/65536|0;try{return $e.grow(t),Ar(),1}catch{}},Yi=e=>{var r=N.length;e>>>=0;var t=vt();if(e>t)return!1;for(var n=1;n<=4;n*=2){var i=r*(1+.2/n);i=Math.min(i,e+100663296);var a=Math.min(t,Zi(Math.max(e,i),65536)),s=Ki(a);if(s)return!0}return!1};class Ji{allocated=[void 0];freelist=[];get(r){return this.allocated[r]}has(r){return this.allocated[r]!==void 0}allocate(r){var t=this.freelist.pop()||this.allocated.length;return this.allocated[t]=r,t}free(r){this.allocated[r]=void 0,this.freelist.push(r)}}var U={async openDatabase(e,r){return new Promise((t,n)=>{try{var i=indexedDB.open(e,r)}catch(a){return n(a)}i.onupgradeneeded=a=>{var s=a.target.result;s.objectStoreNames.contains(\"FILES\")&&s.deleteObjectStore(\"FILES\"),s.createObjectStore(\"FILES\")},i.onsuccess=a=>t(a.target.result),i.onerror=n})},async init(){U.xhrs=new Ji,Lr(\"library_fetch_init\");try{var e=await U.openDatabase(\"emscripten_filesystem\",1);U.dbInstance=e}catch{U.dbInstance=!1}finally{Gr(\"library_fetch_init\")}}};function gr(e,r,t,n,i){var a=m[e+8>>2];if(!a){t(e,\"no url specified!\");return}var s=I(a),c=e+108,u=I(c+0);u||=\"GET\";var f=m[c+56>>2],d=m[c+68>>2],_=m[c+72>>2],p=m[c+76>>2],v=m[c+80>>2],h=m[c+84>>2],k=m[c+88>>2],$=m[c+52>>2],T=!!($&1),x=!!($&2),P=!!($&64),K=d?I(d):void 0,z=_?I(_):void 0,S=new XMLHttpRequest;if(S.withCredentials=!!N[c+60],S.open(u,s,!P,K,z),P||(S.timeout=f),S.url_=s,S.responseType=\"arraybuffer\",v){var M=I(v);S.overrideMimeType(M)}if(p)for(;;){var se=m[p>>2];if(!se)break;var Xe=m[p+4>>2];if(!Xe)break;p+=8;var L=I(se),ne=I(Xe);S.setRequestHeader(L,ne)}var Q=U.xhrs.allocate(S);m[e>>2]=Q;var br=h&&k?N.slice(h,h+k):null;function Ze(){var j=0,H=0;S.response&&T&&m[e+12>>2]===0&&(H=S.response.byteLength),H>0&&(j=Z(H),N.set(new Uint8Array(S.response),j)),m[e+12>>2]=j,X(e+16,H),X(e+24,0);var ie=S.response?S.response.byteLength:0;if(ie&&X(e+32,ie),A[e+40>>1]=S.readyState,A[e+42>>1]=S.status,S.statusText&&O(S.statusText,e+44,64),P){var Ke=_t(S.responseURL);m[e+200>>2]=Ke}}S.onload=j=>{U.xhrs.has(Q)&&(Ze(),S.status>=200&&S.status<300?r(e,S,j):t(e,j))},S.onerror=j=>{U.xhrs.has(Q)&&(Ze(),t(e,j))},S.ontimeout=j=>{U.xhrs.has(Q)&&t(e,j)},S.onprogress=j=>{if(U.xhrs.has(Q)){var H=T&&x&&S.response?S.response.byteLength:0,ie=0;H>0&&T&&x&&(ie=Z(H),N.set(new Uint8Array(S.response),ie)),m[e+12>>2]=ie,X(e+16,H),X(e+24,j.loaded-H),X(e+32,j.total),A[e+40>>1]=S.readyState;var Ke=S.status;S.readyState>=3&&S.status===0&&j.loaded>0&&(Ke=200),A[e+42>>1]=Ke,S.statusText&&O(S.statusText,e+44,64),n(e,j),J(ie)}},S.onreadystatechange=j=>{if(U.xhrs.has(Q)){if(A[e+40>>1]=S.readyState,S.readyState>=2&&(A[e+42>>1]=S.status),!P&&S.readyState===2&&S.responseURL.length>0){var H=_t(S.responseURL);m[e+200>>2]=H}i(e,j)}};try{S.send(br)}catch(j){t(e,j)}}var X=(e,r)=>{m[e>>2]=r;var t=m[e>>2];m[e+4>>2]=(r-t)/4294967296},_t=e=>{var r=Y(e)+1,t=Z(r);return t&&O(e,t,r),t};function ht(e,r,t,n,i){if(!e){i(r,0,\"IndexedDB not available!\");return}var a=r+108,s=m[a+64>>2];s||=m[r+8>>2];var c=I(s);try{var u=e.transaction([\"FILES\"],\"readwrite\"),f=u.objectStore(\"FILES\"),d=f.put(t,c);d.onsuccess=_=>{A[r+40>>1]=4,A[r+42>>1]=200,O(\"OK\",r+44,64),n(r,0,c)},d.onerror=_=>{A[r+40>>1]=4,A[r+42>>1]=413,O(\"Payload Too Large\",r+44,64),i(r,0,_)}}catch(_){i(r,0,_)}}function Qi(e,r,t,n){if(!e){n(r,0,\"IndexedDB not available!\");return}var i=r+108,a=m[i+64>>2];a||=m[r+8>>2];var s=I(a);try{var c=e.transaction([\"FILES\"],\"readonly\"),u=c.objectStore(\"FILES\"),f=u.get(s);f.onsuccess=d=>{if(d.target.result){var _=d.target.result,p=_.byteLength||_.length,v=Z(p);N.set(new Uint8Array(_),v),m[r+12>>2]=v,X(r+16,p),X(r+24,0),X(r+32,p),A[r+40>>1]=4,A[r+42>>1]=200,O(\"OK\",r+44,64),t(r,0,_)}else A[r+40>>1]=4,A[r+42>>1]=404,O(\"Not Found\",r+44,64),n(r,0,\"no data\")},f.onerror=d=>{A[r+40>>1]=4,A[r+42>>1]=404,O(\"Not Found\",r+44,64),n(r,0,d)}}catch(d){n(r,0,d)}}function ea(e,r,t,n){if(!e){n(r,0,\"IndexedDB not available!\");return}var i=r+108,a=m[i+64>>2];a||=m[r+8>>2];var s=I(a);try{var c=e.transaction([\"FILES\"],\"readwrite\"),u=c.objectStore(\"FILES\"),f=u.delete(s);f.onsuccess=d=>{var _=d.target.result;m[r+12>>2]=0,X(r+16,0),X(r+24,0),X(r+32,0),A[r+40>>1]=4,A[r+42>>1]=200,O(\"OK\",r+44,64),t(r,0,_)},f.onerror=d=>{A[r+40>>1]=4,A[r+42>>1]=404,O(\"Not Found\",r+44,64),n(r,0,d)}}catch(d){n(r,0,d)}}function ra(e,r,t,n,i){var a=e+108,s=m[a+36>>2],c=m[a+40>>2],u=m[a+44>>2],f=m[a+48>>2],d=m[a+52>>2],_=!!(d&64);function p(L){_?L():ft(L)}var v=(L,ne,Q)=>{p(()=>{s?y(s)(L):r?.(L)})},h=(L,ne)=>{p(()=>{u?y(u)(L):n?.(L)})},k=(L,ne)=>{p(()=>{c?y(c)(L):t?.(L)})},$=(L,ne)=>{p(()=>{f?y(f)(L):i?.(L)})},T=(L,ne,Q)=>{gr(L,v,k,h,$)},x=(L,ne,Q)=>{var br=(j,H,ie)=>{p(()=>{s?y(s)(j):r?.(j)})},Ze=(j,H,ie)=>{p(()=>{s?y(s)(j):r?.(j)})};ht(U.dbInstance,L,ne.response,br,Ze)},P=(L,ne,Q)=>{gr(L,x,k,h,$)},K=I(a+0),z=!!(d&16),S=!!(d&4),M=!!(d&32);if(K===\"EM_IDB_STORE\"){var se=m[a+84>>2],Xe=m[a+88>>2];ht(U.dbInstance,e,N.slice(se,se+Xe),v,k)}else if(K===\"EM_IDB_DELETE\")ea(U.dbInstance,e,v,k);else if(!z)Qi(U.dbInstance,e,v,M?k:S?P:T);else if(!M)gr(e,S?x:v,k,h,$);else return 0;return e}var qe={},ta=()=>kr||\"./this.program\",Te=()=>{if(!Te.strings){var e=(typeof navigator==\"object\"&&navigator.language||\"C\").replace(\"-\",\"_\")+\".UTF-8\",r={USER:\"web_user\",LOGNAME:\"web_user\",PATH:\"/\",PWD:\"/\",HOME:\"/home/web_user\",LANG:e,_:ta()};for(var t in qe)qe[t]===void 0?delete r[t]:r[t]=qe[t];var n=[];for(var t in r)n.push(`${t}=${r[t]}`);Te.strings=n}return Te.strings},na=(e,r)=>{var t=0,n=0;for(var i of Te()){var a=r+t;m[e+n>>2]=a,t+=O(i,a,1/0)+1,n+=4}return 0},ia=(e,r)=>{var t=Te();m[e>>2]=t.length;var n=0;for(var i of t)n+=Y(i)+1;return m[r>>2]=n,0};function aa(e){try{var r=R.getStreamFromFD(e);return o.close(r),0}catch(t){if(typeof o>\"u\"||t.name!==\"ErrnoError\")throw t;return t.errno}}function oa(e,r){try{var t=0,n=0,i=0,a=R.getStreamFromFD(e),s=a.tty?2:o.isDir(a.mode)?3:o.isLink(a.mode)?7:4;return G[r]=s,A[r+2>>1]=i,W[r+8>>3]=BigInt(t),W[r+16>>3]=BigInt(n),0}catch(c){if(typeof o>\"u\"||c.name!==\"ErrnoError\")throw c;return c.errno}}var sa=(e,r,t,n)=>{for(var i=0,a=0;a<t;a++){var s=m[r>>2],c=m[r+4>>2];r+=8;var u=o.read(e,G,s,c,n);if(u<0)return-1;if(i+=u,u<c)break;typeof n<\"u\"&&(n+=u)}return i};function ca(e,r,t,n){try{var i=R.getStreamFromFD(e),a=sa(i,r,t);return m[n>>2]=a,0}catch(s){if(typeof o>\"u\"||s.name!==\"ErrnoError\")throw s;return s.errno}}function ua(e,r,t,n){r=He(r);try{if(isNaN(r))return 61;var i=R.getStreamFromFD(e);return o.llseek(i,r,t),W[n>>3]=BigInt(i.position),i.getdents&&r===0&&t===0&&(i.getdents=null),0}catch(a){if(typeof o>\"u\"||a.name!==\"ErrnoError\")throw a;return a.errno}}var la=(e,r,t,n)=>{for(var i=0,a=0;a<t;a++){var s=m[r>>2],c=m[r+4>>2];r+=8;var u=o.write(e,G,s,c,n);if(u<0)return-1;if(i+=u,u<c)break;typeof n<\"u\"&&(n+=u)}return i};function fa(e,r,t,n){try{var i=R.getStreamFromFD(e),a=la(i,r,t);return m[n>>2]=a,0}catch(s){if(typeof o>\"u\"||s.name!==\"ErrnoError\")throw s;return s.errno}}var da=e=>e;function va(e,r){try{return ir(N.subarray(e,e+r)),0}catch(t){if(typeof o>\"u\"||t.name!==\"ErrnoError\")throw t;return t.errno}}var yc=e=>(e>>>=0,\"0x\"+e.toString(16).padStart(8,\"0\")),mt=e=>{var r=l[\"_\"+e];return r},_a=(e,r)=>{G.set(e,r)},pt=e=>kt(e),ha=e=>{var r=Y(e)+1,t=pt(r);return O(e,t,r),t},yt=(e,r,t,n,i)=>{var a={string:h=>{var k=0;return h!=null&&h!==0&&(k=ha(h)),k},array:h=>{var k=pt(h.length);return _a(h,k),k}};function s(h){return r===\"string\"?I(h):r===\"boolean\"?!!h:h}var c=mt(e),u=[],f=0;if(n)for(var d=0;d<n.length;d++){var _=a[t[d]];_?(f===0&&(f=b()),u[d]=_(n[d])):u[d]=n[d]}var p=c(...u);function v(h){return f!==0&&w(f),s(h)}return p=v(p),p},ma=(e,r,t,n)=>{var i=!t||t.every(s=>s===\"number\"||s===\"boolean\"),a=r!==\"string\";return a&&i&&!n?mt(e):(...s)=>yt(e,r,t,s,n)};if(o.createPreloadedFile=ln,o.preloadFile=Br,o.staticInit(),Fn(),Nn(),U.init(),l.noExitRuntime&&(rr=l.noExitRuntime),l.preloadPlugins&&(Nr=l.preloadPlugins),l.print&&(we=l.print),l.printErr&&(ee=l.printErr),l.wasmBinary&&(be=l.wasmBinary),l.arguments&&(Rt=l.arguments),l.thisProgram&&(kr=l.thisProgram),l.preInit)for(typeof l.preInit==\"function\"&&(l.preInit=[l.preInit]);l.preInit.length>0;)l.preInit.shift()();l.ENV=qe,l.ccall=yt,l.cwrap=ma,l.lengthBytesUTF8=Y,l.stringToUTF8=O;function pa(e){if(typeof l.locateFile==\"function\")try{const r=l.locateFile(I(e));if(r){const t=Y(r)+1,n=Z(t);if(n)return O(r,n,t),n}}catch(r){console.warn(\"Module.locateFile failed:\",r)}return 0}function ya(e){try{if(typeof l<\"u\"&&l.workerUrl){var r=l.workerUrl,t=Y(r)+1,n=Z(t);return O(r,n,t),n}}catch(i){console.warn(\"Failed to read Module.workerUrl:\",i)}if(e){var t=Y(I(e))+1,n=Z(t);return O(I(e),n,t),n}return 0}function ga(){return navigator.hardwareConcurrency||1}function wa(e){l._aquaLiveTransports||(l._aquaLiveTransports=new Set),l._aquaLiveTransports.add(e),queueMicrotask(function(){l._aquaLiveTransports&&l._aquaLiveTransports.has(e)&&l._aquaDrainDeferredCompletions(e)})}function ba(e){l._aquaLiveTransports&&l._aquaLiveTransports.delete(e)}function Sa(e,r){if(!l.createDeserializeWorker)return console.error(\"createDeserializeWorker not available - worker-bridge.ts not loaded\"),0;const t=I(e);return l.createDeserializeWorker(t,l,r)?1:0}function ka(e,r,t,n,i){if(!l.submitToWorker)return console.error(\"submitToWorker not available - worker-bridge.ts not loaded\"),0;try{const a=t,s=n,c=new ArrayBuffer(s);return new Uint8Array(c).set(l.HEAPU8.subarray(a,a+s)),l.submitToWorker(e,r,c,i)?1:0}catch(a){return console.error(\"submitToWorker failed:\",a),0}}function Ea(e,r){l.cancelRequest&&l.cancelRequest(e,r)}function gc(){return l.isWorkerReady&&l.isWorkerReady()?1:0}function Ca(){l.terminateWorker&&l.terminateWorker()}function Ta(e,r){typeof globalThis.Sentry<\"u\"&&typeof globalThis.Sentry.captureException==\"function\"&&globalThis.Sentry.captureException(new Error(I(e,r)))}function Fa(e){const r=I(e);try{const t=new URL(r)}catch{return 0}return 1}function Pa(e,r){const t=I(e);let n;try{n=new URL(t)}catch(c){return console.error(`Failed to parse URL ${t} due to error : ${c}`),0}function i(c){return c>>>0}function a(c){const u=Y(c)+1,f=Z(u);return O(c,f,u),i(f)}let s=i(r)>>2;return m[s]=a(n.origin),m[s+1]=a(n.pathname.substring(1)),m[s+2]=a(n.search.substring(1)),m[s+3]=a(n.hash.substring(1)),1}function Aa(e){const r=I(e),t=encodeURIComponent(r),n=Y(t)+1,i=Z(n);return O(t,i,n),i>>>0}function $a(e){l.__mirisPrivatePromiseTracker||(l.__mirisPrivatePromiseTracker=new Map);let r,t;const n=new Promise(function(i,a){r=i,t=a});return l.__mirisPrivatePromiseTracker.set(e,{resolve:r,reject:t}),B.toHandle(n)}function Da(e,r){const t=l.__mirisPrivatePromiseTracker;if(!t||!t.has(e)){console.error(\"[miris] No resolver for tracked promise ID:\",e);return}const{resolve:n}=t.get(e);if(!n){console.error(\"[miris] No resolver for tracked promise ID:\",e);return}t.delete(e),n(B.toValue(r))}function wc(e,r){const t=l.__mirisPrivatePromiseTracker;if(!t||!t.has(e)){console.error(\"[miris] No rejector for tracked promise ID:\",e);return}const{reject:n}=t.get(e);if(!n){console.error(\"[miris] No rejector for tracked promise ID:\",e);return}t.delete(e),n(B.toValue(r))}var gt,Ra,Ma,Ia,ja,Oa,xa,Ga,La,Na,Ba,Wa,Ua,Va,za,Ha,qa,Xa,Za,Ka,Ya,Ja,Qa,eo,ro,to,no,io,ao,oo,so,co,uo,lo,fo,vo,_o,ho,mo,po,yo,go,wo,bo,So,ko,Eo,Co,To,Fo,Po,Ao,$o,Do,Ro,Mo,Io,jo,Oo,xo,Go,Lo,No,Bo,Wo,Uo,Vo,zo,Ho,qo,Xo,Zo,Ko,Yo,Jo,Qo,es,rs,ts,ns,is,Z,J,as,os,wt,g,bt,St,kt,Et,Ct,Tt,Ft,Pt;function ss(e){gt=e.__getTypeName,l._CreateAquaContext=Ra=e.CreateAquaContext,l._BeginFrame=Ma=e.BeginFrame,l._DestroyAquaContext=Ia=e.DestroyAquaContext,l._SetMaxRequestCacheSize=ja=e.SetMaxRequestCacheSize,l._TriggerTestError=Oa=e.TriggerTestError,l._CreateClientForContext=xa=e.CreateClientForContext,l._CreateClient=Ga=e.CreateClient,l._DestroyClient=La=e.DestroyClient,l._ClearScene=Na=e.ClearScene,l._WaitForSceneExecution=Ba=e.WaitForSceneExecution,l._SetPersistentDataDirectory=Wa=e.SetPersistentDataDirectory,l._SetClientSpatialFormat=Ua=e.SetClientSpatialFormat,l._SetAssetViewerKey=Va=e.SetAssetViewerKey,l._PrefetchContent=za=e.PrefetchContent,l._PrintSceneObjectHierarchy=Ha=e.PrintSceneObjectHierarchy,l._CancelAllSceneExecution=qa=e.CancelAllSceneExecution,l._AddStream=Xa=e.AddStream,l._AddStreamById=Za=e.AddStreamById,l._RemoveStream=Ka=e.RemoveStream,l._SetStreamFetchMode=Ya=e.SetStreamFetchMode,l._GetStreamFetchMode=Ja=e.GetStreamFetchMode,l._UpdateSceneExecution=Qa=e.UpdateSceneExecution,l._RecordFrameTime=eo=e.RecordFrameTime,l._TakeRenderRequired=ro=e.TakeRenderRequired,l._LockScene=to=e.LockScene,l._UnlockScene=no=e.UnlockScene,l._SetMainCameraTransform=io=e.SetMainCameraTransform,l._SetMainCameraViewFrustum=ao=e.SetMainCameraViewFrustum,l._SetSceneObjectTransform=oo=e.SetSceneObjectTransform,l._SetRuntimeSettings=so=e.SetRuntimeSettings,l._SetOctreeSolverMode=co=e.SetOctreeSolverMode,l._SetBudgetControllerType=uo=e.SetBudgetControllerType,l._SetMaxCacheSize=lo=e.SetMaxCacheSize,l._SetPreferSharkEncodingProfiles=fo=e.SetPreferSharkEncodingProfiles,l._HasFeature=vo=e.HasFeature,l._GetFeatureVersion=_o=e.GetFeatureVersion,l._GetFeatureState=ho=e.GetFeatureState,l._GetAssetFormatVersion=mo=e.GetAssetFormatVersion,l._GetSceneChangesCounts=po=e.GetSceneChangesCounts,l._GetSceneChanges=yo=e.GetSceneChanges,l._GetSceneRootObjectId=go=e.GetSceneRootObjectId,l._GetSceneObjectChildrenCount=wo=e.GetSceneObjectChildrenCount,l._GetSceneObjectChildren=bo=e.GetSceneObjectChildren,l._GetSceneObjectType=So=e.GetSceneObjectType,l._GetDrawnOctantMask=ko=e.GetDrawnOctantMask,l._GetDrMapLadderRoughnessLevels=Eo=e.GetDrMapLadderRoughnessLevels,l._LogOctreeStats=Co=e.LogOctreeStats,l._GetSceneObjectParent=To=e.GetSceneObjectParent,l._IsSceneObjectAncestorOf=Fo=e.IsSceneObjectAncestorOf,l._GetSceneObjectName=Po=e.GetSceneObjectName,l._GetAttributeCount=Ao=e.GetAttributeCount,l._HasAttribute=$o=e.HasAttribute,l._GetMosaicDescriptors=Do=e.GetMosaicDescriptors,l._GetEccLutData=Ro=e.GetEccLutData,l._GetAttribute=Mo=e.GetAttribute,l._TakeAttribute=Io=e.TakeAttribute,l._GetBufferHash=jo=e.GetBufferHash,l._GetWorldBoundingBox=Oo=e.GetWorldBoundingBox,l._GetLocalBoundingBox=xo=e.GetLocalBoundingBox,l._MirisGetLocalTransform=Go=e.MirisGetLocalTransform,l._MirisGetWorldTransform=Lo=e.MirisGetWorldTransform,l._MirisGetTransformRelativeToAncestor=No=e.MirisGetTransformRelativeToAncestor,l._GetBoundingBoxRelativeToAncestor=Bo=e.GetBoundingBoxRelativeToAncestor,l._GetMetadata=Wo=e.GetMetadata,l._GetLodIndex=Uo=e.GetLodIndex,l._GetLibAquaVersion=Vo=e.GetLibAquaVersion,l._GetLodMinMaxIndices=zo=e.GetLodMinMaxIndices,l._GetCameraCount=Ho=e.GetCameraCount,l._GetCameraIds=qo=e.GetCameraIds,l._GetDefaultCameraId=Xo=e.GetDefaultCameraId,l._GetViewingVolumeId=Zo=e.GetViewingVolumeId,l._GetSceneMetadata=Ko=e.GetSceneMetadata,l._GetSceneOperatorCount=Yo=e.GetSceneOperatorCount,l._SetVariantSelection=Jo=e.SetVariantSelection,l.__Z26GetSceneObjectNameAsStringP10AquaClienti=Qo=e._Z26GetSceneObjectNameAsStringP10AquaClienti,l.__Z14GetAssetsAsyncP10AquaClientRKNSt3__26vectorINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS6_IS8_EEEEiPN4aqua6v0_0_013ArrayCallbackINSE_9AssetInfoEEE=es=e._Z14GetAssetsAsyncP10AquaClientRKNSt3__26vectorINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS6_IS8_EEEEiPN4aqua6v0_0_013ArrayCallbackINSE_9AssetInfoEEE,l.__Z21GetAvailableTagsAsyncP10AquaClientPN4aqua6v0_0_013ArrayCallbackINSt3__212basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEE=rs=e._Z21GetAvailableTagsAsyncP10AquaClientPN4aqua6v0_0_013ArrayCallbackINSt3__212basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEE,l.__Z33TakeEvictedClientSideAttributeIdsP10AquaClient=ts=e._Z33TakeEvictedClientSideAttributeIdsP10AquaClient,l.__Z30GetActiveClientSideIdsCheckSumv=ns=e._Z30GetActiveClientSideIdsCheckSumv,is=e.__cxa_free_exception,l._malloc=Z=e.malloc,l._free=J=e.free,l._aquaDrainDeferredCompletions=as=e.aquaDrainDeferredCompletions,l._onWorkerResult=os=e.onWorkerResult,wt=e._emscripten_timeout,g=e.setThrew,bt=e._emscripten_tempret_set,St=e._emscripten_stack_restore,kt=e._emscripten_stack_alloc,Et=e.emscripten_stack_get_current,Ct=e.__cxa_decrement_exception_refcount,Tt=e.__cxa_increment_exception_refcount,Ft=e.__cxa_can_catch,Pt=e.__cxa_get_exception_ptr}var At={__cxa_begin_catch:qt,__cxa_end_catch:Xt,__cxa_find_matching_catch_2:Zt,__cxa_find_matching_catch_3:Kt,__cxa_find_matching_catch_4:Yt,__cxa_rethrow:Jt,__cxa_throw:Qt,__cxa_uncaught_exceptions:en,__resumeException:rn,__syscall_fcntl64:fn,__syscall_fstat64:dn,__syscall_ioctl:vn,__syscall_lstat64:_n,__syscall_newfstatat:hn,__syscall_openat:mn,__syscall_rmdir:pn,__syscall_stat64:yn,__syscall_unlinkat:gn,_abort_js:wn,_embind_register_bigint:Sn,_embind_register_bool:kn,_embind_register_class:Wn,_embind_register_class_constructor:Vn,_embind_register_class_function:zn,_embind_register_class_property:Hn,_embind_register_emval:qn,_embind_register_enum:Zn,_embind_register_enum_value:Kn,_embind_register_float:Jn,_embind_register_function:Qn,_embind_register_integer:ei,_embind_register_memory_view:ri,_embind_register_optional:ni,_embind_register_std_string:ii,_embind_register_std_wstring:fi,_embind_register_void:di,_emscripten_runtime_keepalive_clear:vi,_emval_create_invoker:yi,_emval_decref:hr,_emval_get_global:gi,_emval_get_property:wi,_emval_incref:bi,_emval_invoke:Si,_emval_new_array:ki,_emval_new_cstring:Ei,_emval_run_destructors:Ci,_emval_set_property:Ti,_gmtime_js:Ai,_localtime_js:Ii,_setitimer_js:Gi,_tzset_js:Li,clock_time_get:Wi,emjsCreateTrackedPromise:$a,emjsEncodeUriComponent:Aa,emjsGetPartsFromUrl:Pa,emjsIsValidUrl:Fa,emjsResolveTrackedPromise:Da,emjsSentryCaptureException:Ta,emscripten_console_warn:Ui,emscripten_date_now:dt,emscripten_errn:Vi,emscripten_fetch_free:zi,emscripten_get_heap_max:Hi,emscripten_get_now:yr,emscripten_is_main_browser_thread:qi,emscripten_outn:Xi,emscripten_resize_heap:Yi,emscripten_start_fetch:ra,environ_get:na,environ_sizes_get:ia,fd_close:aa,fd_fdstat_get:oa,fd_read:ca,fd_seek:ua,fd_write:fa,getHardwareConcurrency:ga,getWorkerUrlFromModule:ya,impl_cancelRequest:Ea,impl_createDeserializeWorker:Sa,impl_submitToWorker:ka,impl_terminateWorker:Ca,invoke_diii:tc,invoke_diiiii:ks,invoke_djj:Vs,invoke_fi:Ms,invoke_fiii:Xs,invoke_i:ys,invoke_ii:us,invoke_iii:hs,invoke_iiii:Ss,invoke_iiiid:nc,invoke_iiiii:ps,invoke_iiiiid:Qs,invoke_iiiiii:ws,invoke_iiiiiii:Is,invoke_iiiiiiii:ec,invoke_iiiiiiiii:Gs,invoke_iiiiiiiiii:Ds,invoke_iiiiiiiiiii:As,invoke_iiiiiiiiiiii:$s,invoke_iiiiij:lc,invoke_iiiiijj:ic,invoke_iiiij:uc,invoke_iiiiji:Ns,invoke_iiiijj:ac,invoke_iiij:cc,invoke_iij:gs,invoke_iiji:Ks,invoke_iijiiii:bs,invoke_j:Os,invoke_ji:Ls,invoke_jii:Es,invoke_jiiii:rc,invoke_v:ms,invoke_vi:ls,invoke_viddi:Ws,invoke_vif:qs,invoke_vii:ds,invoke_viif:fc,invoke_viii:fs,invoke_viiifi:Hs,invoke_viiii:cs,invoke_viiiiddiii:zs,invoke_viiiii:_s,invoke_viiiiii:vs,invoke_viiiiiii:Fs,invoke_viiiiiiii:js,invoke_viiiiiiiiii:oc,invoke_viiiiiiiiiii:Ps,invoke_viiiiiiiiiiiiiii:sc,invoke_viiij:Bs,invoke_viij:Us,invoke_viiji:Ts,invoke_viijii:Rs,invoke_viijiiii:Zs,invoke_vij:Js,invoke_viji:Ys,invoke_vijii:xs,invoke_vijiiii:Cs,llvm_eh_typeid_for:da,proc_exit:lt,random_get:va,scheduleMicrotaskDrain:wa,tryLocateWorkerFile:pa,unregisterTransportInstance:ba};function cs(e,r,t,n,i){var a=b();try{y(e)(r,t,n,i)}catch(s){if(w(a),s!==s+0)throw s;g(1,0)}}function us(e,r){var t=b();try{return y(e)(r)}catch(n){if(w(t),n!==n+0)throw n;g(1,0)}}function ls(e,r){var t=b();try{y(e)(r)}catch(n){if(w(t),n!==n+0)throw n;g(1,0)}}function fs(e,r,t,n){var i=b();try{y(e)(r,t,n)}catch(a){if(w(i),a!==a+0)throw a;g(1,0)}}function ds(e,r,t){var n=b();try{y(e)(r,t)}catch(i){if(w(n),i!==i+0)throw i;g(1,0)}}function vs(e,r,t,n,i,a,s){var c=b();try{y(e)(r,t,n,i,a,s)}catch(u){if(w(c),u!==u+0)throw u;g(1,0)}}function _s(e,r,t,n,i,a){var s=b();try{y(e)(r,t,n,i,a)}catch(c){if(w(s),c!==c+0)throw c;g(1,0)}}function hs(e,r,t){var n=b();try{return y(e)(r,t)}catch(i){if(w(n),i!==i+0)throw i;g(1,0)}}function ms(e){var r=b();try{y(e)()}catch(t){if(w(r),t!==t+0)throw t;g(1,0)}}function ps(e,r,t,n,i){var a=b();try{return y(e)(r,t,n,i)}catch(s){if(w(a),s!==s+0)throw s;g(1,0)}}function ys(e){var r=b();try{return y(e)()}catch(t){if(w(r),t!==t+0)throw t;g(1,0)}}function gs(e,r,t){var n=b();try{return y(e)(r,t)}catch(i){if(w(n),i!==i+0)throw i;g(1,0)}}function ws(e,r,t,n,i,a){var s=b();try{return y(e)(r,t,n,i,a)}catch(c){if(w(s),c!==c+0)throw c;g(1,0)}}function bs(e,r,t,n,i,a,s){var c=b();try{return y(e)(r,t,n,i,a,s)}catch(u){if(w(c),u!==u+0)throw u;g(1,0)}}function Ss(e,r,t,n){var i=b();try{return y(e)(r,t,n)}catch(a){if(w(i),a!==a+0)throw a;g(1,0)}}function ks(e,r,t,n,i,a){var s=b();try{return y(e)(r,t,n,i,a)}catch(c){if(w(s),c!==c+0)throw c;g(1,0)}}function Es(e,r,t){var n=b();try{return y(e)(r,t)}catch(i){if(w(n),i!==i+0)throw i;return g(1,0),0n}}function Cs(e,r,t,n,i,a,s){var c=b();try{y(e)(r,t,n,i,a,s)}catch(u){if(w(c),u!==u+0)throw u;g(1,0)}}function Ts(e,r,t,n,i){var a=b();try{y(e)(r,t,n,i)}catch(s){if(w(a),s!==s+0)throw s;g(1,0)}}function Fs(e,r,t,n,i,a,s,c){var u=b();try{y(e)(r,t,n,i,a,s,c)}catch(f){if(w(u),f!==f+0)throw f;g(1,0)}}function Ps(e,r,t,n,i,a,s,c,u,f,d,_){var p=b();try{y(e)(r,t,n,i,a,s,c,u,f,d,_)}catch(v){if(w(p),v!==v+0)throw v;g(1,0)}}function As(e,r,t,n,i,a,s,c,u,f,d){var _=b();try{return y(e)(r,t,n,i,a,s,c,u,f,d)}catch(p){if(w(_),p!==p+0)throw p;g(1,0)}}function $s(e,r,t,n,i,a,s,c,u,f,d,_){var p=b();try{return y(e)(r,t,n,i,a,s,c,u,f,d,_)}catch(v){if(w(p),v!==v+0)throw v;g(1,0)}}function Ds(e,r,t,n,i,a,s,c,u,f){var d=b();try{return y(e)(r,t,n,i,a,s,c,u,f)}catch(_){if(w(d),_!==_+0)throw _;g(1,0)}}function Rs(e,r,t,n,i,a){var s=b();try{y(e)(r,t,n,i,a)}catch(c){if(w(s),c!==c+0)throw c;g(1,0)}}function Ms(e,r){var t=b();try{return y(e)(r)}catch(n){if(w(t),n!==n+0)throw n;g(1,0)}}function Is(e,r,t,n,i,a,s){var c=b();try{return y(e)(r,t,n,i,a,s)}catch(u){if(w(c),u!==u+0)throw u;g(1,0)}}function js(e,r,t,n,i,a,s,c,u){var f=b();try{y(e)(r,t,n,i,a,s,c,u)}catch(d){if(w(f),d!==d+0)throw d;g(1,0)}}function Os(e){var r=b();try{return y(e)()}catch(t){if(w(r),t!==t+0)throw t;return g(1,0),0n}}function xs(e,r,t,n,i){var a=b();try{y(e)(r,t,n,i)}catch(s){if(w(a),s!==s+0)throw s;g(1,0)}}function Gs(e,r,t,n,i,a,s,c,u){var f=b();try{return y(e)(r,t,n,i,a,s,c,u)}catch(d){if(w(f),d!==d+0)throw d;g(1,0)}}function Ls(e,r){var t=b();try{return y(e)(r)}catch(n){if(w(t),n!==n+0)throw n;return g(1,0),0n}}function Ns(e,r,t,n,i,a){var s=b();try{return y(e)(r,t,n,i,a)}catch(c){if(w(s),c!==c+0)throw c;g(1,0)}}function Bs(e,r,t,n,i){var a=b();try{y(e)(r,t,n,i)}catch(s){if(w(a),s!==s+0)throw s;g(1,0)}}function Ws(e,r,t,n,i){var a=b();try{y(e)(r,t,n,i)}catch(s){if(w(a),s!==s+0)throw s;g(1,0)}}function Us(e,r,t,n){var i=b();try{y(e)(r,t,n)}catch(a){if(w(i),a!==a+0)throw a;g(1,0)}}function Vs(e,r,t){var n=b();try{return y(e)(r,t)}catch(i){if(w(n),i!==i+0)throw i;g(1,0)}}function zs(e,r,t,n,i,a,s,c,u,f){var d=b();try{y(e)(r,t,n,i,a,s,c,u,f)}catch(_){if(w(d),_!==_+0)throw _;g(1,0)}}function Hs(e,r,t,n,i,a){var s=b();try{y(e)(r,t,n,i,a)}catch(c){if(w(s),c!==c+0)throw c;g(1,0)}}function qs(e,r,t){var n=b();try{y(e)(r,t)}catch(i){if(w(n),i!==i+0)throw i;g(1,0)}}function Xs(e,r,t,n){var i=b();try{return y(e)(r,t,n)}catch(a){if(w(i),a!==a+0)throw a;g(1,0)}}function Zs(e,r,t,n,i,a,s,c){var u=b();try{y(e)(r,t,n,i,a,s,c)}catch(f){if(w(u),f!==f+0)throw f;g(1,0)}}function Ks(e,r,t,n){var i=b();try{return y(e)(r,t,n)}catch(a){if(w(i),a!==a+0)throw a;g(1,0)}}function Ys(e,r,t,n){var i=b();try{y(e)(r,t,n)}catch(a){if(w(i),a!==a+0)throw a;g(1,0)}}function Js(e,r,t){var n=b();try{y(e)(r,t)}catch(i){if(w(n),i!==i+0)throw i;g(1,0)}}function Qs(e,r,t,n,i,a){var s=b();try{return y(e)(r,t,n,i,a)}catch(c){if(w(s),c!==c+0)throw c;g(1,0)}}function ec(e,r,t,n,i,a,s,c){var u=b();try{return y(e)(r,t,n,i,a,s,c)}catch(f){if(w(u),f!==f+0)throw f;g(1,0)}}function rc(e,r,t,n,i){var a=b();try{return y(e)(r,t,n,i)}catch(s){if(w(a),s!==s+0)throw s;return g(1,0),0n}}function tc(e,r,t,n){var i=b();try{return y(e)(r,t,n)}catch(a){if(w(i),a!==a+0)throw a;g(1,0)}}function nc(e,r,t,n,i){var a=b();try{return y(e)(r,t,n,i)}catch(s){if(w(a),s!==s+0)throw s;g(1,0)}}function ic(e,r,t,n,i,a,s){var c=b();try{return y(e)(r,t,n,i,a,s)}catch(u){if(w(c),u!==u+0)throw u;g(1,0)}}function ac(e,r,t,n,i,a){var s=b();try{return y(e)(r,t,n,i,a)}catch(c){if(w(s),c!==c+0)throw c;g(1,0)}}function oc(e,r,t,n,i,a,s,c,u,f,d){var _=b();try{y(e)(r,t,n,i,a,s,c,u,f,d)}catch(p){if(w(_),p!==p+0)throw p;g(1,0)}}function sc(e,r,t,n,i,a,s,c,u,f,d,_,p,v,h,k){var $=b();try{y(e)(r,t,n,i,a,s,c,u,f,d,_,p,v,h,k)}catch(T){if(w($),T!==T+0)throw T;g(1,0)}}function cc(e,r,t,n){var i=b();try{return y(e)(r,t,n)}catch(a){if(w(i),a!==a+0)throw a;g(1,0)}}function uc(e,r,t,n,i){var a=b();try{return y(e)(r,t,n,i)}catch(s){if(w(a),s!==s+0)throw s;g(1,0)}}function lc(e,r,t,n,i,a){var s=b();try{return y(e)(r,t,n,i,a)}catch(c){if(w(s),c!==c+0)throw c;g(1,0)}}function fc(e,r,t,n){var i=b();try{y(e)(r,t,n)}catch(a){if(w(i),a!==a+0)throw a;g(1,0)}}function wr(){if(ue>0){Se=wr;return}if(jt(),ue>0){Se=wr;return}function e(){l.calledRun=!0,!Pe&&(Ot(),Cr?.(l),l.onRuntimeInitialized?.(),xt())}l.setStatus?(l.setStatus(\"Running...\"),setTimeout(()=>{setTimeout(()=>l.setStatus(\"\"),1),e()},1)):e()}var de;return de=await Vt(),wr(),Pr?Ye=l:Ye=new Promise((e,r)=>{Cr=e,Tr=r}),Ye}export default dc;\n\n";
|
|
64
|
+
function _getExport(m) {
|
|
65
|
+
return m.default || m;
|
|
66
|
+
}
|
|
67
|
+
function _loadFactory() {
|
|
68
|
+
const blobUrl = URL.createObjectURL(new Blob([_glueSource], { type: "text/javascript" }));
|
|
69
|
+
return import(/* @vite-ignore */ /* webpackIgnore: true */ /* turbopackIgnore: true */ blobUrl).finally(() => URL.revokeObjectURL(blobUrl)).then((m) => {
|
|
70
|
+
const f = _getExport(m);
|
|
71
|
+
if (typeof f === "function") return f;
|
|
72
|
+
throw new Error("bad module");
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
function _emscripten_lazy_AquaApi_default(...args) {
|
|
76
|
+
if (!_factoryPromise) {
|
|
77
|
+
_wasmPromise = fetch(_wasmUrl).then((r) => {
|
|
78
|
+
if (!r.ok || (r.headers.get("content-type") || "").includes("text/html")) return null;
|
|
79
|
+
return r.arrayBuffer();
|
|
80
|
+
}).catch(() => null);
|
|
81
|
+
_factoryPromise = _loadFactory().catch((e) => {
|
|
82
|
+
_factoryPromise = _wasmPromise = void 0;
|
|
83
|
+
throw e;
|
|
84
|
+
});
|
|
271
85
|
}
|
|
272
|
-
|
|
273
|
-
|
|
86
|
+
return Promise.all([_factoryPromise, _wasmPromise]).then(([factory, wasmBinary]) => {
|
|
87
|
+
const [opts = {}, ...rest] = args;
|
|
88
|
+
const merged = _wasmUrl ? {
|
|
89
|
+
locateFile: (f, d) => f.endsWith(".wasm") ? _wasmUrl : d + f,
|
|
90
|
+
...opts
|
|
91
|
+
} : { ...opts };
|
|
92
|
+
if (wasmBinary) merged.wasmBinary = wasmBinary;
|
|
93
|
+
return factory(merged, ...rest);
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
//#endregion
|
|
97
|
+
//#region packages/core/engine/factory.ts
|
|
98
|
+
var factory_default = _emscripten_lazy_AquaApi_default;
|
|
99
|
+
//#endregion
|
|
100
|
+
//#region packages/core/engine/threads/thread.ts
|
|
101
|
+
var Thread = class Thread {
|
|
102
|
+
static name = "thread";
|
|
103
|
+
static get Worker() {
|
|
104
|
+
throw new Error("Thread could not be initialized because no Worker was supplied. Do you forget to set `static Worker = Worker` on the child class?");
|
|
274
105
|
}
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
if (!node) return false;
|
|
293
|
-
if (node.id === parentId) {
|
|
294
|
-
if (node.children) node.children.push(variant);
|
|
295
|
-
else if (variant.type === "option") {
|
|
296
|
-
if (!node.options) node.options = [];
|
|
297
|
-
node.options.push(variant);
|
|
298
|
-
} else {
|
|
299
|
-
if (!node.nestedSets) node.nestedSets = [];
|
|
300
|
-
node.nestedSets.push(variant);
|
|
301
|
-
}
|
|
302
|
-
return true;
|
|
303
|
-
}
|
|
304
|
-
if (Array.isArray(node.children)) {
|
|
305
|
-
for (const child of node.children) if (addToNode(child)) return true;
|
|
306
|
-
}
|
|
307
|
-
if (Array.isArray(node.nestedSets)) {
|
|
308
|
-
for (const nested of node.nestedSets) if (addToNode(nested)) return true;
|
|
309
|
-
}
|
|
310
|
-
if (Array.isArray(node.options)) {
|
|
311
|
-
for (const option of node.options) if (addToNode(option)) return true;
|
|
312
|
-
}
|
|
313
|
-
return false;
|
|
314
|
-
};
|
|
315
|
-
for (const hierarchy of Object.values(this.#variantHierarchies)) if (addToNode(hierarchy)) return;
|
|
316
|
-
}
|
|
317
|
-
/**
|
|
318
|
-
* @internal
|
|
319
|
-
*/
|
|
320
|
-
_addVariant(parentId, variant) {
|
|
321
|
-
this._findAndAddToVariantSet(parentId, variant);
|
|
322
|
-
}
|
|
323
|
-
/**
|
|
324
|
-
* @internal
|
|
325
|
-
*/
|
|
326
|
-
_exportVariantHierarchies() {
|
|
327
|
-
return Object.entries(this.#variantHierarchies).map(([hierarchyId, hierarchy]) => ({
|
|
328
|
-
hierarchyId: Number(hierarchyId),
|
|
329
|
-
hierarchy
|
|
330
|
-
}));
|
|
331
|
-
}
|
|
332
|
-
/**
|
|
333
|
-
* @internal
|
|
334
|
-
*/
|
|
335
|
-
_setVariantSelection(variantId) {
|
|
336
|
-
this.client.setVariantSelection(variantId);
|
|
337
|
-
}
|
|
338
|
-
get key() {
|
|
339
|
-
return this.#key ?? null;
|
|
340
|
-
}
|
|
341
|
-
set key(key) {
|
|
342
|
-
Stream._keyMap.delete(this.key);
|
|
343
|
-
if (key || 0 === key) Stream._keyMap.set(key, this);
|
|
344
|
-
this.#key = key;
|
|
345
|
-
}
|
|
346
|
-
#matrix = [
|
|
347
|
-
1,
|
|
348
|
-
0,
|
|
349
|
-
0,
|
|
350
|
-
0,
|
|
351
|
-
0,
|
|
352
|
-
1,
|
|
353
|
-
0,
|
|
354
|
-
0,
|
|
355
|
-
0,
|
|
356
|
-
0,
|
|
357
|
-
1,
|
|
358
|
-
0,
|
|
359
|
-
0,
|
|
360
|
-
0,
|
|
361
|
-
0,
|
|
362
|
-
1
|
|
363
|
-
];
|
|
364
|
-
get matrix() {
|
|
365
|
-
return this.#matrix;
|
|
366
|
-
}
|
|
367
|
-
set matrix(matrix) {
|
|
368
|
-
this.#matrix = matrix;
|
|
369
|
-
const { engine, client } = this;
|
|
370
|
-
const matrixBuffer = engine.malloc(this.#matrix.length * 4);
|
|
371
|
-
engine.heapF32.set(Float32Array.from(this.#matrix), matrixBuffer / 4);
|
|
372
|
-
client.setSceneObjectTransform(this.id, matrixBuffer);
|
|
373
|
-
engine.free(matrixBuffer);
|
|
374
|
-
}
|
|
375
|
-
get boundingBox() {
|
|
376
|
-
const { engine, client } = this;
|
|
377
|
-
const boxBuffer = engine.malloc(24);
|
|
378
|
-
client.getWorldBoundingBox(this.id, boxBuffer);
|
|
379
|
-
const [cX, cY, cZ, dX, dY, dZ] = Float32Array.from(engine.heapF32.subarray(boxBuffer / 4, boxBuffer / 4 + 6));
|
|
380
|
-
if (cX === void 0 || cY === void 0 || cZ === void 0 || dX === void 0 || dY === void 0 || dZ === void 0) return;
|
|
381
|
-
const box = {
|
|
382
|
-
min: {
|
|
383
|
-
x: cX - dX / 2,
|
|
384
|
-
y: cY - dY / 2,
|
|
385
|
-
z: cZ - dZ / 2
|
|
386
|
-
},
|
|
387
|
-
max: {
|
|
388
|
-
x: cX + dX / 2,
|
|
389
|
-
y: cY + dY / 2,
|
|
390
|
-
z: cZ + dZ / 2
|
|
391
|
-
},
|
|
392
|
-
size: {
|
|
393
|
-
x: dX,
|
|
394
|
-
y: dY,
|
|
395
|
-
z: dZ
|
|
396
|
-
},
|
|
397
|
-
center: {
|
|
398
|
-
x: cX,
|
|
399
|
-
y: cY,
|
|
400
|
-
z: cZ
|
|
401
|
-
}
|
|
402
|
-
};
|
|
403
|
-
Object.freeze(box);
|
|
404
|
-
return box;
|
|
405
|
-
}
|
|
406
|
-
#modelRoots = /* @__PURE__ */ new Set();
|
|
407
|
-
get modelRoots() {
|
|
408
|
-
return new Set(this.#modelRoots);
|
|
409
|
-
}
|
|
410
|
-
/**
|
|
411
|
-
* @deprecated Use `modelRoots` instead.
|
|
412
|
-
*/
|
|
413
|
-
get chunks() {
|
|
414
|
-
return this.modelRoots;
|
|
415
|
-
}
|
|
416
|
-
constructor(options) {
|
|
417
|
-
super();
|
|
418
|
-
const { scene, uuid } = options;
|
|
419
|
-
Object.defineProperties(this, {
|
|
420
|
-
uuid: {
|
|
421
|
-
value: uuid,
|
|
422
|
-
enumerable: true
|
|
423
|
-
},
|
|
424
|
-
scene: {
|
|
425
|
-
value: scene,
|
|
426
|
-
enumerable: true
|
|
427
|
-
},
|
|
428
|
-
client: {
|
|
429
|
-
value: scene.client,
|
|
430
|
-
enumerable: true
|
|
431
|
-
},
|
|
432
|
-
miris: {
|
|
433
|
-
value: scene.miris,
|
|
434
|
-
enumerable: true
|
|
435
|
-
},
|
|
436
|
-
engine: {
|
|
437
|
-
value: scene.miris.engine,
|
|
438
|
-
enumerable: true
|
|
439
|
-
}
|
|
440
|
-
});
|
|
441
|
-
this._initStream(options);
|
|
442
|
-
Stream._idMap.set(this.id, this);
|
|
443
|
-
scene.add(this);
|
|
444
|
-
}
|
|
445
|
-
_initStream({ uuid }) {
|
|
446
|
-
const id = this.client.addStreamById(uuid, uuid, false);
|
|
447
|
-
Object.defineProperty(this, "id", { value: id });
|
|
448
|
-
}
|
|
449
|
-
/**
|
|
450
|
-
* @internal
|
|
451
|
-
*/
|
|
452
|
-
async _onStreamLoaded() {
|
|
453
|
-
if (this.#loadedRenderableData) return;
|
|
454
|
-
this.dispatchEvent(new Event("streamloaded"));
|
|
455
|
-
this.scene._onSceneLoaded();
|
|
456
|
-
this.#loadedRenderableData = true;
|
|
457
|
-
}
|
|
458
|
-
/**
|
|
459
|
-
* @internal
|
|
460
|
-
*/
|
|
461
|
-
_onRootLoaded() {
|
|
462
|
-
this.dispatchEvent(new Event("rootloaded"));
|
|
463
|
-
}
|
|
464
|
-
add(modelRoot) {
|
|
465
|
-
this.#modelRoots.add(modelRoot);
|
|
466
|
-
}
|
|
467
|
-
end() {
|
|
468
|
-
console.log("ending the stream");
|
|
469
|
-
this.client.removeStream(this.id);
|
|
470
|
-
for (const modelRoot of this.#modelRoots) modelRoot.dispose();
|
|
471
|
-
this.#modelRoots.clear();
|
|
472
|
-
Stream._idMap.delete(this.id);
|
|
473
|
-
Stream._keyMap.delete(this.key);
|
|
474
|
-
if (this.scene.streams.has(this)) this.scene.delete(this);
|
|
475
|
-
}
|
|
476
|
-
};
|
|
477
|
-
//#endregion
|
|
478
|
-
//#region \0emscripten-lazy:AquaApi
|
|
479
|
-
var _jsPromise;
|
|
480
|
-
var _wasmPromise;
|
|
481
|
-
var _wasmUrl = ((u) => u.includes("/.vite/") ? u.replace(/\.vite\/[^?#]*/, () => "node_modules/@miris-inc/core/dist/AquaApi.wasm") : u)(new URL("AquaApi.wasm", import.meta.url).href);
|
|
482
|
-
function _getExport(m) {
|
|
483
|
-
return m.default || m;
|
|
484
|
-
}
|
|
485
|
-
function _loadModule(url) {
|
|
486
|
-
return import(/* @vite-ignore */ /* webpackIgnore: true */ /* turbopackIgnore: true */ url).then((m) => {
|
|
487
|
-
const f = _getExport(m);
|
|
488
|
-
if (typeof f === "function") return f;
|
|
489
|
-
throw new Error("bad module");
|
|
490
|
-
}).catch(() => fetch(url).then((r) => {
|
|
491
|
-
if (!r.ok) throw new Error(r.status + " " + url);
|
|
492
|
-
return r.text();
|
|
493
|
-
}).then((text) => {
|
|
494
|
-
const blobUrl = URL.createObjectURL(new Blob([text], { type: "text/javascript" }));
|
|
495
|
-
return import(/* @vite-ignore */ /* webpackIgnore: true */ /* turbopackIgnore: true */ blobUrl).then((m) => {
|
|
496
|
-
URL.revokeObjectURL(blobUrl);
|
|
497
|
-
return _getExport(m);
|
|
498
|
-
});
|
|
499
|
-
}));
|
|
500
|
-
}
|
|
501
|
-
function _emscripten_lazy_AquaApi_default(...args) {
|
|
502
|
-
if (!_jsPromise) {
|
|
503
|
-
_wasmPromise = fetch(_wasmUrl).then((r) => {
|
|
504
|
-
if (!r.ok || (r.headers.get("content-type") || "").includes("text/html")) return null;
|
|
505
|
-
return r.arrayBuffer();
|
|
506
|
-
}).catch(() => null);
|
|
507
|
-
_jsPromise = _loadModule(((u) => u.includes("/.vite/") ? new URL("/node_modules/@miris-inc/core/dist/AquaApi.js", u).href : u)(new URL("./AquaApi.js", "" + import.meta.url).href)).catch((e) => {
|
|
508
|
-
_jsPromise = _wasmPromise = void 0;
|
|
509
|
-
throw e;
|
|
510
|
-
});
|
|
511
|
-
}
|
|
512
|
-
return Promise.all([_jsPromise, _wasmPromise]).then(([factory, wasmBinary]) => {
|
|
513
|
-
if (wasmBinary) {
|
|
514
|
-
const [opts = {}, ...rest] = args;
|
|
515
|
-
return factory({
|
|
516
|
-
...opts,
|
|
517
|
-
wasmBinary
|
|
518
|
-
}, ...rest);
|
|
519
|
-
}
|
|
520
|
-
return factory(...args);
|
|
521
|
-
});
|
|
522
|
-
}
|
|
523
|
-
//#endregion
|
|
524
|
-
//#region packages/core/engine/factory.ts
|
|
525
|
-
var factory_default = _emscripten_lazy_AquaApi_default;
|
|
526
|
-
//#endregion
|
|
527
|
-
//#region packages/core/engine/threads/thread.ts
|
|
528
|
-
var Thread = class Thread {
|
|
529
|
-
static name = "thread";
|
|
530
|
-
static get Worker() {
|
|
531
|
-
throw new Error("Thread could not be initialized because no Worker was supplied. Do you forget to set `static Worker = Worker` on the child class?");
|
|
532
|
-
}
|
|
533
|
-
constructor({ engine }) {
|
|
534
|
-
Object.defineProperty(this, "engine", {
|
|
535
|
-
value: engine,
|
|
536
|
-
enumerable: true
|
|
537
|
-
});
|
|
538
|
-
Object.defineProperty(this, "ready", {
|
|
539
|
-
enumerable: true,
|
|
540
|
-
value: new Promise((resolve) => {
|
|
541
|
-
this.#resolvers.set(0, async () => {
|
|
542
|
-
this.#pending = false;
|
|
543
|
-
this.#resolvers.delete(0);
|
|
544
|
-
resolve(this);
|
|
545
|
-
});
|
|
546
|
-
})
|
|
547
|
-
});
|
|
548
|
-
this.#worker = new this.constructor.Worker({ name: `decoder-${Thread.#nextWorkerId()}` });
|
|
549
|
-
this.#worker.addEventListener("message", this.#message.bind(this));
|
|
106
|
+
constructor({ engine }) {
|
|
107
|
+
Object.defineProperty(this, "engine", {
|
|
108
|
+
value: engine,
|
|
109
|
+
enumerable: true
|
|
110
|
+
});
|
|
111
|
+
Object.defineProperty(this, "ready", {
|
|
112
|
+
enumerable: true,
|
|
113
|
+
value: new Promise((resolve) => {
|
|
114
|
+
this.#resolvers.set(0, async () => {
|
|
115
|
+
this.#pending = false;
|
|
116
|
+
this.#resolvers.delete(0);
|
|
117
|
+
resolve(this);
|
|
118
|
+
});
|
|
119
|
+
})
|
|
120
|
+
});
|
|
121
|
+
this.#worker = new this.constructor.Worker({ name: `decoder-${Thread.#nextWorkerId()}` });
|
|
122
|
+
this.#worker.addEventListener("message", this.#message.bind(this));
|
|
550
123
|
}
|
|
551
124
|
static #latestWorkerId = 0;
|
|
552
125
|
static #nextWorkerId() {
|
|
@@ -606,7 +179,7 @@ var Thread = class Thread {
|
|
|
606
179
|
};
|
|
607
180
|
//#endregion
|
|
608
181
|
//#region packages/core/engine/threads/decoder/worker.ts?worker&inline
|
|
609
|
-
var jsContent = "//#region packages/core/engine/threads/utils.ts\nconst defineActions = (actions) => {\n self.postMessage(\"ready\");\n self.addEventListener(\"message\", async ({ data }) => {\n if (\"ready\" === data) return;\n const { id, action, args } = data;\n const [result, ...postMessageArgs] = await Reflect.apply(actions[action], void 0, [...args, id]);\n self.postMessage({\n id,\n result\n }, ...postMessageArgs);\n });\n return actions;\n};\n//#endregion\n//#region packages/core/attribute.ts\nconst sparkMinSplats = 2048;\nconst sparkAttributeList = {\n sparkPackedSplat: {\n elementsPerSplat: 4,\n discard: false\n },\n extendedPackedSplatLow: {\n elementsPerSplat: 4,\n discard: false\n },\n extendedPackedSplatHigh: {\n elementsPerSplat: 4,\n discard: false\n },\n packedSh1: {\n elementsPerSplat: 2,\n discard: false\n },\n packedSh2: {\n elementsPerSplat: 4,\n discard: false\n },\n packedSh3: {\n elementsPerSplat: 4,\n discard: false\n },\n sh1Extended: {\n elementsPerSplat: 4,\n discard: false\n },\n sh2Extended: {\n elementsPerSplat: 4,\n discard: false\n },\n sh3Extended_0: {\n elementsPerSplat: 4,\n discard: false\n },\n sh3Extended_1: {\n elementsPerSplat: 4,\n discard: false\n },\n splatterEllipsoids: {\n elementsPerSplat: 12,\n discard: false\n },\n splatterSphericalHarmonics: {\n elementsPerSplat: 16,\n discard: false\n }\n};\nfunction roundUpToMultipleOf(a, multiple) {\n return Math.ceil(a / multiple) * multiple;\n}\nfunction sparkAttributeFromRaw(name, id, wasmView) {\n const attrib = sparkAttributeList[name];\n if (attrib === void 0) throw new Error(\"attribute name\" + name + \" is unknown\");\n const originalSize = wasmView.length;\n const paddedSize = roundUpToMultipleOf(originalSize, attrib.elementsPerSplat * sparkMinSplats);\n const paddedData = new Uint32Array(paddedSize);\n paddedData.set(wasmView);\n return {\n paddedData,\n originalSize,\n id\n };\n}\n//#endregion\n//#region packages/core/aqua-parser.js\nasync function Li(Le = {}) {\n var $r, l = Le, ze = !1, Br = !0, Lr = \"./this.program\", zr = (e, r) => {\n throw r;\n }, Ne = import.meta.url, wr = \"\";\n function Ge(e) {\n return l.locateFile ? l.locateFile(e, wr) : wr + e;\n }\n var Yr, Tr;\n if (ze || Br) {\n try {\n wr = new URL(\".\", Ne).href;\n } catch {}\n Br && (Tr = (e) => {\n var r = new XMLHttpRequest();\n return r.open(\"GET\", e, !1), r.responseType = \"arraybuffer\", r.send(null), new Uint8Array(r.response);\n }), Yr = async (e) => {\n var r = await fetch(e, { credentials: \"same-origin\" });\n if (r.ok) return r.arrayBuffer();\n throw new Error(r.status + \" : \" + r.url);\n };\n }\n var Nr = console.log.bind(console), B = console.error.bind(console), G, Q = !1, rr, Gr, qr, er, k, A, U, L, T, w, tr, nr, V, Xr, Jr = !1;\n function Kr() {\n var e = er.buffer;\n l.HEAP8 = k = new Int8Array(e), U = new Int16Array(e), l.HEAPU8 = A = new Uint8Array(e), L = new Uint16Array(e), l.HEAP32 = T = new Int32Array(e), l.HEAPU32 = w = new Uint32Array(e), l.HEAPF32 = tr = new Float32Array(e), l.HEAPF64 = nr = new Float64Array(e), V = new BigInt64Array(e), Xr = new BigUint64Array(e);\n }\n function qe() {\n if (l.preRun) for (typeof l.preRun == \"function\" && (l.preRun = [l.preRun]); l.preRun.length;) at(l.preRun.shift());\n Qr(ee);\n }\n function Xe() {\n Jr = !0, H.__wasm_call_ctors();\n }\n function Je() {\n if (l.postRun) for (typeof l.postRun == \"function\" && (l.postRun = [l.postRun]); l.postRun.length;) it(l.postRun.shift());\n Qr(re);\n }\n function z(e) {\n l.onAbort?.(e), e = \"Aborted(\" + e + \")\", B(e), Q = !0, e += \". Build with -sASSERTIONS for more info.\";\n var r = new WebAssembly.RuntimeError(e);\n throw qr?.(r), r;\n }\n var Fr;\n function Ke() {\n return l.locateFile ? Ge(\"aqua-parser.wasm\") : \"\";\n }\n function Ze(e) {\n if (e == Fr && G) return new Uint8Array(G);\n if (Tr) return Tr(e);\n throw \"both async and sync fetching of the wasm failed\";\n }\n async function Qe(e) {\n if (!G) try {\n var r = await Yr(e);\n return new Uint8Array(r);\n } catch {}\n return Ze(e);\n }\n async function rt(e, r) {\n try {\n var t = await Qe(e);\n return await WebAssembly.instantiate(t, r);\n } catch (i) {\n B(`failed to asynchronously prepare wasm: ${i}`), z(i);\n }\n }\n async function et(e, r, t) {\n if (!e) try {\n var n = fetch(r, { credentials: \"same-origin\" });\n return await WebAssembly.instantiateStreaming(n, t);\n } catch (a) {\n B(`wasm streaming compile failed: ${a}`), B(\"falling back to ArrayBuffer instantiation\");\n }\n return rt(r, t);\n }\n function tt() {\n return {\n env: Ie,\n wasi_snapshot_preview1: Ie\n };\n }\n async function nt() {\n function e(a, s) {\n return H = a.exports, er = H.memory, Kr(), fe = H.__indirect_function_table, si(H), H;\n }\n function r(a) {\n return e(a.instance);\n }\n var t = tt();\n if (l.instantiateWasm) return new Promise((a, s) => {\n l.instantiateWasm(t, (o, u) => {\n a(e(o, u));\n });\n });\n Fr ??= Ke();\n return r(await et(G, Fr, t));\n }\n class Zr {\n name = \"ExitStatus\";\n constructor(r) {\n this.message = `Program terminated with exit(${r})`, this.status = r;\n }\n }\n var Qr = (e) => {\n for (; e.length > 0;) e.shift()(l);\n }, re = [], it = (e) => re.push(e), ee = [], at = (e) => ee.push(e);\n var Cr = !0;\n var y = (e) => De(e), m = () => xe(), ir = [], ar = 0, st = (e) => {\n var r = new Pr(e);\n return r.get_caught() || (r.set_caught(!0), ar--), r.set_rethrown(!1), ir.push(r), Ue(e), je(e);\n }, x = 0, ot = () => {\n g(0, 0);\n var e = ir.pop();\n Oe(e.excPtr), x = 0;\n };\n class Pr {\n constructor(r) {\n this.excPtr = r, this.ptr = r - 24;\n }\n set_type(r) {\n w[this.ptr + 4 >> 2] = r;\n }\n get_type() {\n return w[this.ptr + 4 >> 2];\n }\n set_destructor(r) {\n w[this.ptr + 8 >> 2] = r;\n }\n get_destructor() {\n return w[this.ptr + 8 >> 2];\n }\n set_caught(r) {\n r = r ? 1 : 0, k[this.ptr + 12] = r;\n }\n get_caught() {\n return k[this.ptr + 12] != 0;\n }\n set_rethrown(r) {\n r = r ? 1 : 0, k[this.ptr + 13] = r;\n }\n get_rethrown() {\n return k[this.ptr + 13] != 0;\n }\n init(r, t) {\n this.set_adjusted_ptr(0), this.set_type(r), this.set_destructor(t);\n }\n set_adjusted_ptr(r) {\n w[this.ptr + 16 >> 2] = r;\n }\n get_adjusted_ptr() {\n return w[this.ptr + 16 >> 2];\n }\n }\n var sr = (e) => Re(e), kr = (e) => {\n var r = x;\n if (!r) return sr(0), 0;\n var t = new Pr(r);\n t.set_adjusted_ptr(r);\n var n = t.get_type();\n if (!n) return sr(0), r;\n for (var i of e) {\n if (i === 0 || i === n) break;\n var a = t.ptr + 16;\n if (Ve(i, n, a)) return sr(i), r;\n }\n return sr(n), r;\n }, ut = () => kr([]), ct = (e) => kr([e]), ft = (e, r) => kr([e, r]), lt = () => {\n var e = ir.pop();\n e || z(\"no exception to throw\");\n var r = e.excPtr;\n throw e.get_rethrown() || (ir.push(e), e.set_rethrown(!0), e.set_caught(!1), ar++), x = r, x;\n }, vt = (e, r, t) => {\n throw new Pr(e).init(r, t), x = e, ar++, x;\n }, _t = () => ar, dt = (e) => {\n throw x || (x = e), x;\n }, pt = () => z(\"\"), C = (e) => {\n for (var r = \"\";;) {\n var t = A[e++];\n if (!t) return r;\n r += String.fromCharCode(t);\n }\n }, Y = {}, j = {}, or = {}, q = class extends Error {\n constructor(r) {\n super(r), this.name = \"BindingError\";\n }\n }, h = (e) => {\n throw new q(e);\n };\n function ht(e, r, t = {}) {\n var n = r.name;\n if (e || h(`type \"${n}\" must have a positive integer typeid pointer`), j.hasOwnProperty(e)) {\n if (t.ignoreDuplicateRegistrations) return;\n h(`Cannot register type '${n}' twice`);\n }\n if (j[e] = r, delete or[e], Y.hasOwnProperty(e)) {\n var i = Y[e];\n delete Y[e], i.forEach((a) => a());\n }\n }\n function E(e, r, t = {}) {\n return ht(e, r, t);\n }\n var te = (e, r, t) => {\n switch (r) {\n case 1: return t ? (n) => k[n] : (n) => A[n];\n case 2: return t ? (n) => U[n >> 1] : (n) => L[n >> 1];\n case 4: return t ? (n) => T[n >> 2] : (n) => w[n >> 2];\n case 8: return t ? (n) => V[n >> 3] : (n) => Xr[n >> 3];\n default: throw new TypeError(`invalid integer width (${r}): ${e}`);\n }\n }, gt = (e, r, t, n, i) => {\n r = C(r);\n const a = n === 0n;\n let s = (o) => o;\n if (a) {\n const o = t * 8;\n s = (u) => BigInt.asUintN(o, u), i = s(i);\n }\n E(e, {\n name: r,\n fromWireType: s,\n toWireType: (o, u) => (typeof u == \"number\" && (u = BigInt(u)), u),\n readValueFromPointer: te(r, t, !a),\n destructorFunction: null\n });\n }, yt = (e, r, t, n) => {\n r = C(r), E(e, {\n name: r,\n fromWireType: function(i) {\n return !!i;\n },\n toWireType: function(i, a) {\n return a ? t : n;\n },\n readValueFromPointer: function(i) {\n return this.fromWireType(A[i]);\n },\n destructorFunction: null\n });\n }, mt = (e) => ({\n count: e.count,\n deleteScheduled: e.deleteScheduled,\n preservePointerOnDelete: e.preservePointerOnDelete,\n ptr: e.ptr,\n ptrType: e.ptrType,\n smartPtr: e.smartPtr,\n smartPtrType: e.smartPtrType\n }), Sr = (e) => {\n function r(t) {\n return t.$$.ptrType.registeredClass.name;\n }\n h(r(e) + \" instance already deleted\");\n }, Ar = !1, ne = (e) => {}, bt = (e) => {\n e.smartPtr ? e.smartPtrType.rawDestructor(e.smartPtr) : e.ptrType.registeredClass.rawDestructor(e.ptr);\n }, ie = (e) => {\n e.count.value -= 1;\n e.count.value === 0 && bt(e);\n }, X = (e) => typeof FinalizationRegistry > \"u\" ? (X = (r) => r, e) : (Ar = new FinalizationRegistry((r) => {\n ie(r.$$);\n }), X = (r) => {\n var t = r.$$;\n if (!!t.smartPtr) {\n var i = { $$: t };\n Ar.register(r, i, r);\n }\n return r;\n }, ne = (r) => Ar.unregister(r), X(e)), ur = [], $t = () => {\n for (; ur.length;) {\n var e = ur.pop();\n e.$$.deleteScheduled = !1, e.delete();\n }\n }, ae, wt = () => {\n let e = cr.prototype;\n Object.assign(e, {\n isAliasOf(t) {\n if (!(this instanceof cr) || !(t instanceof cr)) return !1;\n var n = this.$$.ptrType.registeredClass, i = this.$$.ptr;\n t.$$ = t.$$;\n for (var a = t.$$.ptrType.registeredClass, s = t.$$.ptr; n.baseClass;) i = n.upcast(i), n = n.baseClass;\n for (; a.baseClass;) s = a.upcast(s), a = a.baseClass;\n return n === a && i === s;\n },\n clone() {\n if (this.$$.ptr || Sr(this), this.$$.preservePointerOnDelete) return this.$$.count.value += 1, this;\n var t = X(Object.create(Object.getPrototypeOf(this), { $$: { value: mt(this.$$) } }));\n return t.$$.count.value += 1, t.$$.deleteScheduled = !1, t;\n },\n delete() {\n this.$$.ptr || Sr(this), this.$$.deleteScheduled && !this.$$.preservePointerOnDelete && h(\"Object already scheduled for deletion\"), ne(this), ie(this.$$), this.$$.preservePointerOnDelete || (this.$$.smartPtr = void 0, this.$$.ptr = void 0);\n },\n isDeleted() {\n return !this.$$.ptr;\n },\n deleteLater() {\n return this.$$.ptr || Sr(this), this.$$.deleteScheduled && !this.$$.preservePointerOnDelete && h(\"Object already scheduled for deletion\"), ur.push(this), ur.length === 1 && ae && ae($t), this.$$.deleteScheduled = !0, this;\n }\n });\n const r = Symbol.dispose;\n r && (e[r] = e.delete);\n };\n function cr() {}\n var fr = (e, r) => Object.defineProperty(r, \"name\", { value: e }), se = {}, Er = (e, r, t) => {\n if (e[r].overloadTable === void 0) {\n var n = e[r];\n e[r] = function(...i) {\n return e[r].overloadTable.hasOwnProperty(i.length) || h(`Function '${t}' called with an invalid number of arguments (${i.length}) - expects one of (${e[r].overloadTable})!`), e[r].overloadTable[i.length].apply(this, i);\n }, e[r].overloadTable = [], e[r].overloadTable[n.argCount] = n;\n }\n }, Rr = (e, r, t) => {\n l.hasOwnProperty(e) ? ((t === void 0 || l[e].overloadTable !== void 0 && l[e].overloadTable[t] !== void 0) && h(`Cannot register public name '${e}' twice`), Er(l, e, e), l[e].overloadTable.hasOwnProperty(t) && h(`Cannot register multiple overloads of a function with the same number of arguments (${t})!`), l[e].overloadTable[t] = r) : (l[e] = r, l[e].argCount = t);\n }, Tt = 48, Ft = 57, Ct = (e) => {\n e = e.replace(/[^a-zA-Z0-9_]/g, \"$\");\n var r = e.charCodeAt(0);\n return r >= Tt && r <= Ft ? `_${e}` : e;\n };\n function Pt(e, r, t, n, i, a, s, o) {\n this.name = e, this.constructor = r, this.instancePrototype = t, this.rawDestructor = n, this.baseClass = i, this.getActualType = a, this.upcast = s, this.downcast = o, this.pureVirtualFunctions = [];\n }\n var lr = (e, r, t) => {\n for (; r !== t;) r.upcast || h(`Expected null or instance of ${t.name}, got an instance of ${r.name}`), e = r.upcast(e), r = r.baseClass;\n return e;\n }, Dr = (e) => {\n if (e === null) return \"null\";\n var r = typeof e;\n return r === \"object\" || r === \"array\" || r === \"function\" ? e.toString() : \"\" + e;\n };\n function kt(e, r) {\n if (r === null) return this.isReference && h(`null is not a valid ${this.name}`), 0;\n r.$$ || h(`Cannot pass \"${Dr(r)}\" as a ${this.name}`), r.$$.ptr || h(`Cannot pass deleted object as a pointer of type ${this.name}`);\n var t = r.$$.ptrType.registeredClass;\n return lr(r.$$.ptr, t, this.registeredClass);\n }\n function St(e, r) {\n var t;\n if (r === null) return this.isReference && h(`null is not a valid ${this.name}`), this.isSmartPointer ? (t = this.rawConstructor(), e !== null && e.push(this.rawDestructor, t), t) : 0;\n (!r || !r.$$) && h(`Cannot pass \"${Dr(r)}\" as a ${this.name}`), r.$$.ptr || h(`Cannot pass deleted object as a pointer of type ${this.name}`), !this.isConst && r.$$.ptrType.isConst && h(`Cannot convert argument of type ${r.$$.smartPtrType ? r.$$.smartPtrType.name : r.$$.ptrType.name} to parameter type ${this.name}`);\n var n = r.$$.ptrType.registeredClass;\n if (t = lr(r.$$.ptr, n, this.registeredClass), this.isSmartPointer) switch (r.$$.smartPtr === void 0 && h(\"Passing raw pointer to smart pointer is illegal\"), this.sharingPolicy) {\n case 0:\n r.$$.smartPtrType === this ? t = r.$$.smartPtr : h(`Cannot convert argument of type ${r.$$.smartPtrType ? r.$$.smartPtrType.name : r.$$.ptrType.name} to parameter type ${this.name}`);\n break;\n case 1:\n t = r.$$.smartPtr;\n break;\n case 2:\n if (r.$$.smartPtrType === this) t = r.$$.smartPtr;\n else {\n var i = r.clone();\n t = this.rawShare(t, W.toHandle(() => i.delete())), e !== null && e.push(this.rawDestructor, t);\n }\n break;\n default: h(\"Unsupporting sharing policy\");\n }\n return t;\n }\n function At(e, r) {\n if (r === null) return this.isReference && h(`null is not a valid ${this.name}`), 0;\n r.$$ || h(`Cannot pass \"${Dr(r)}\" as a ${this.name}`), r.$$.ptr || h(`Cannot pass deleted object as a pointer of type ${this.name}`), r.$$.ptrType.isConst && h(`Cannot convert argument of type ${r.$$.ptrType.name} to parameter type ${this.name}`);\n var t = r.$$.ptrType.registeredClass;\n return lr(r.$$.ptr, t, this.registeredClass);\n }\n function vr(e) {\n return this.fromWireType(w[e >> 2]);\n }\n var oe = (e, r, t) => {\n if (r === t) return e;\n if (t.baseClass === void 0) return null;\n var n = oe(e, r, t.baseClass);\n return n === null ? null : t.downcast(n);\n }, Et = {}, Rt = (e, r) => {\n for (r === void 0 && h(\"ptr should not be undefined\"); e.baseClass;) r = e.upcast(r), e = e.baseClass;\n return r;\n }, Dt = (e, r) => (r = Rt(e, r), Et[r]), Wt = class extends Error {\n constructor(r) {\n super(r), this.name = \"InternalError\";\n }\n }, _r = (e) => {\n throw new Wt(e);\n }, dr = (e, r) => {\n (!r.ptrType || !r.ptr) && _r(\"makeClassHandle requires ptr and ptrType\");\n return !!r.smartPtrType !== !!r.smartPtr && _r(\"Both smartPtrType and smartPtr must be specified\"), r.count = { value: 1 }, X(Object.create(e, { $$: {\n value: r,\n writable: !0\n } }));\n };\n function xt(e) {\n var r = this.getPointee(e);\n if (!r) return this.destructor(e), null;\n var t = Dt(this.registeredClass, r);\n if (t !== void 0) {\n if (t.$$.count.value === 0) return t.$$.ptr = r, t.$$.smartPtr = e, t.clone();\n var n = t.clone();\n return this.destructor(e), n;\n }\n function i() {\n return this.isSmartPointer ? dr(this.registeredClass.instancePrototype, {\n ptrType: this.pointeeType,\n ptr: r,\n smartPtrType: this,\n smartPtr: e\n }) : dr(this.registeredClass.instancePrototype, {\n ptrType: this,\n ptr: e\n });\n }\n var s = se[this.registeredClass.getActualType(r)];\n if (!s) return i.call(this);\n var o;\n this.isConst ? o = s.constPointerType : o = s.pointerType;\n var u = oe(r, this.registeredClass, o.registeredClass);\n return u === null ? i.call(this) : this.isSmartPointer ? dr(o.registeredClass.instancePrototype, {\n ptrType: o,\n ptr: u,\n smartPtrType: this,\n smartPtr: e\n }) : dr(o.registeredClass.instancePrototype, {\n ptrType: o,\n ptr: u\n });\n }\n var Ot = () => {\n Object.assign(pr.prototype, {\n getPointee(e) {\n return this.rawGetPointee && (e = this.rawGetPointee(e)), e;\n },\n destructor(e) {\n this.rawDestructor?.(e);\n },\n readValueFromPointer: vr,\n fromWireType: xt\n });\n };\n function pr(e, r, t, n, i, a, s, o, u, c, f) {\n this.name = e, this.registeredClass = r, this.isReference = t, this.isConst = n, this.isSmartPointer = i, this.pointeeType = a, this.sharingPolicy = s, this.rawGetPointee = o, this.rawConstructor = u, this.rawShare = c, this.rawDestructor = f, !i && r.baseClass === void 0 ? n ? (this.toWireType = kt, this.destructorFunction = null) : (this.toWireType = At, this.destructorFunction = null) : this.toWireType = St;\n }\n var ue = (e, r, t) => {\n l.hasOwnProperty(e) || _r(\"Replacing nonexistent public symbol\"), l[e].overloadTable !== void 0 && t !== void 0 ? l[e].overloadTable[t] = r : (l[e] = r, l[e].argCount = t);\n }, ce = [], fe, b = (e) => {\n var r = ce[e];\n return r || (ce[e] = r = fe.get(e)), r;\n }, R = (e, r, t = !1) => {\n e = C(e);\n function n() {\n return b(r);\n }\n var i = n();\n return typeof i != \"function\" && h(`unknown function pointer with signature ${e}: ${r}`), i;\n };\n class Ut extends Error {}\n var le = (e) => {\n var r = Ae(e), t = C(r);\n return O(r), t;\n }, I = (e, r) => {\n var t = [], n = {};\n function i(a) {\n if (!n[a] && !j[a]) {\n if (or[a]) {\n or[a].forEach(i);\n return;\n }\n t.push(a), n[a] = !0;\n }\n }\n throw r.forEach(i), new Ut(`${e}: ` + t.map(le).join([\", \"]));\n }, D = (e, r, t) => {\n e.forEach((o) => or[o] = r);\n function n(o) {\n var u = t(o);\n u.length !== e.length && _r(\"Mismatched type converter count\");\n for (var c = 0; c < e.length; ++c) E(e[c], u[c]);\n }\n var i = new Array(r.length), a = [], s = 0;\n r.forEach((o, u) => {\n j.hasOwnProperty(o) ? i[u] = j[o] : (a.push(o), Y.hasOwnProperty(o) || (Y[o] = []), Y[o].push(() => {\n i[u] = j[o], ++s, s === a.length && n(i);\n }));\n }), a.length === 0 && n(i);\n }, Vt = (e, r, t, n, i, a, s, o, u, c, f, _, d) => {\n f = C(f), a = R(i, a), o &&= R(s, o), c &&= R(u, c), d = R(_, d);\n var p = Ct(f);\n Rr(p, function() {\n I(`Cannot construct ${f} due to unbound types`, [n]);\n }), D([\n e,\n r,\n t\n ], n ? [n] : [], (v) => {\n v = v[0];\n var $, P;\n n ? ($ = v.registeredClass, P = $.instancePrototype) : P = cr.prototype;\n var F = fr(f, function(...Hr) {\n if (Object.getPrototypeOf(this) !== Z) throw new q(`Use 'new' to construct ${f}`);\n if (S.constructor_body === void 0) throw new q(`${f} has no accessible constructor`);\n var Be = S.constructor_body[Hr.length];\n if (Be === void 0) throw new q(`Tried to invoke ctor of ${f} with invalid number of parameters (${Hr.length}) - expected (${Object.keys(S.constructor_body).toString()}) parameters instead!`);\n return Be.apply(this, Hr);\n }), Z = Object.create(P, { constructor: { value: F } });\n F.prototype = Z;\n var S = new Pt(f, F, Z, d, $, a, o, c);\n S.baseClass && (S.baseClass.__derivedClasses ??= [], S.baseClass.__derivedClasses.push(S));\n var Bi = new pr(f, S, !0, !1, !1), Me = new pr(f + \"*\", S, !1, !1, !1), He = new pr(f + \" const*\", S, !1, !0, !1);\n return se[e] = {\n pointerType: Me,\n constPointerType: He\n }, ue(p, F), [\n Bi,\n Me,\n He\n ];\n });\n }, Wr = (e) => {\n for (; e.length;) {\n var r = e.pop();\n e.pop()(r);\n }\n };\n function ve(e) {\n for (var r = 1; r < e.length; ++r) if (e[r] !== null && e[r].destructorFunction === void 0) return !0;\n return !1;\n }\n function jt(e, r, t, n) {\n var i = ve(e), a = e.length - 2, s = [], o = [\"fn\"];\n r && o.push(\"thisWired\");\n for (var u = 0; u < a; ++u) s.push(`arg${u}`), o.push(`arg${u}Wired`);\n s = s.join(\",\"), o = o.join(\",\");\n var c = `return function (${s}) {\n`;\n i && (c += `var destructors = [];\n`);\n var f = i ? \"destructors\" : \"null\", _ = [\n \"humanName\",\n \"throwBindingError\",\n \"invoker\",\n \"fn\",\n \"runDestructors\",\n \"fromRetWire\",\n \"toClassParamWire\"\n ];\n r && (c += `var thisWired = toClassParamWire(${f}, this);\n`);\n for (var u = 0; u < a; ++u) {\n var d = `toArg${u}Wire`;\n c += `var arg${u}Wired = ${d}(${f}, arg${u});\n`, _.push(d);\n }\n c += (t || n ? \"var rv = \" : \"\") + `invoker(${o});\n`;\n if (i) c += `runDestructors(destructors);\n`;\n else for (var u = r ? 1 : 2; u < e.length; ++u) {\n var v = u === 1 ? \"thisWired\" : \"arg\" + (u - 2) + \"Wired\";\n e[u].destructorFunction !== null && (c += `${v}_dtor(${v});\n`, _.push(`${v}_dtor`));\n }\n return t && (c += `var ret = fromRetWire(rv);\nreturn ret;\n`), c += `}\n`, new Function(_, c);\n }\n function hr(e, r, t, n, i, a) {\n var s = r.length;\n s < 2 && h(\"argTypes array size mismatch! Must at least get return value and 'this' types!\");\n for (var o = r[1] !== null && t !== null, u = ve(r), c = !r[0].isVoid, f = s - 2, _ = r[0], d = r[1], p = [\n e,\n h,\n n,\n i,\n Wr,\n _.fromWireType.bind(_),\n d?.toWireType.bind(d)\n ], v = 2; v < s; ++v) {\n var $ = r[v];\n p.push($.toWireType.bind($));\n }\n if (!u) for (var v = o ? 1 : 2; v < r.length; ++v) r[v].destructorFunction !== null && p.push(r[v].destructorFunction);\n return fr(e, jt(r, o, c, a)(...p));\n }\n var gr = (e, r) => {\n for (var t = [], n = 0; n < e; n++) t.push(w[r + n * 4 >> 2]);\n return t;\n }, xr = (e) => {\n e = e.trim();\n const r = e.indexOf(\"(\");\n return r === -1 ? e : e.slice(0, r);\n }, It = (e, r, t, n, i, a, s, o, u) => {\n var c = gr(t, n);\n r = C(r), r = xr(r), a = R(i, a, o), D([], [e], (f) => {\n f = f[0];\n var _ = `${f.name}.${r}`;\n function d() {\n I(`Cannot call ${_} due to unbound types`, c);\n }\n r.startsWith(\"@@\") && (r = Symbol[r.substring(2)]);\n var p = f.registeredClass.constructor;\n return p[r] === void 0 ? (d.argCount = t - 1, p[r] = d) : (Er(p, r, _), p[r].overloadTable[t - 1] = d), D([], c, (v) => {\n var P = hr(_, [v[0], null].concat(v.slice(1)), null, a, s, o);\n if (p[r].overloadTable === void 0 ? (P.argCount = t - 1, p[r] = P) : p[r].overloadTable[t - 1] = P, f.registeredClass.__derivedClasses) for (const F of f.registeredClass.__derivedClasses) F.constructor.hasOwnProperty(r) || (F.constructor[r] = P);\n return [];\n }), [];\n });\n }, Mt = (e, r, t, n, i, a) => {\n var s = gr(r, t);\n i = R(n, i);\n D([], [e], (c) => {\n c = c[0];\n var f = `constructor ${c.name}`;\n if (c.registeredClass.constructor_body === void 0 && (c.registeredClass.constructor_body = []), c.registeredClass.constructor_body[r - 1] !== void 0) throw new q(`Cannot register multiple constructors with identical number of parameters (${r - 1}) for class '${c.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);\n return c.registeredClass.constructor_body[r - 1] = () => {\n I(`Cannot construct ${c.name} due to unbound types`, s);\n }, D([], s, (_) => (_.splice(1, 0, null), c.registeredClass.constructor_body[r - 1] = hr(f, _, null, i, a), [])), [];\n });\n }, Ht = (e, r, t, n, i, a, s, o, u, c) => {\n var f = gr(t, n);\n r = C(r), r = xr(r), a = R(i, a, u), D([], [e], (_) => {\n _ = _[0];\n var d = `${_.name}.${r}`;\n r.startsWith(\"@@\") && (r = Symbol[r.substring(2)]), o && _.registeredClass.pureVirtualFunctions.push(r);\n function p() {\n I(`Cannot call ${d} due to unbound types`, f);\n }\n var v = _.registeredClass.instancePrototype, $ = v[r];\n return $ === void 0 || $.overloadTable === void 0 && $.className !== _.name && $.argCount === t - 2 ? (p.argCount = t - 2, p.className = _.name, v[r] = p) : (Er(v, r, d), v[r].overloadTable[t - 2] = p), D([], f, (P) => {\n var F = hr(d, P, _, a, s, u);\n return v[r].overloadTable === void 0 ? (F.argCount = t - 2, v[r] = F) : v[r].overloadTable[t - 2] = F, [];\n }), [];\n });\n }, _e = (e, r, t) => (e instanceof Object || h(`${t} with invalid \"this\": ${e}`), e instanceof r.registeredClass.constructor || h(`${t} incompatible with \"this\" of type ${e.constructor.name}`), e.$$.ptr || h(`cannot call emscripten binding method ${t} on deleted object`), lr(e.$$.ptr, e.$$.ptrType.registeredClass, r.registeredClass)), Bt = (e, r, t, n, i, a, s, o, u, c) => {\n r = C(r), i = R(n, i), D([], [e], (f) => {\n f = f[0];\n var _ = `${f.name}.${r}`, d = {\n get() {\n I(`Cannot access ${_} due to unbound types`, [t, s]);\n },\n enumerable: !0,\n configurable: !0\n };\n return u ? d.set = () => I(`Cannot access ${_} due to unbound types`, [t, s]) : d.set = (p) => h(_ + \" is a read-only property\"), Object.defineProperty(f.registeredClass.instancePrototype, r, d), D([], u ? [t, s] : [t], (p) => {\n var v = p[0], $ = {\n get() {\n var F = _e(this, f, _ + \" getter\");\n return v.fromWireType(i(a, F));\n },\n enumerable: !0\n };\n if (u) {\n u = R(o, u);\n var P = p[1];\n $.set = function(F) {\n var Z = _e(this, f, _ + \" setter\"), S = [];\n u(c, Z, P.toWireType(S, F)), Wr(S);\n };\n }\n return Object.defineProperty(f.registeredClass.instancePrototype, r, $), [];\n }), [];\n });\n }, de = [], N = [\n 0,\n 1,\n ,\n 1,\n null,\n 1,\n !0,\n 1,\n !1,\n 1\n ], Or = (e) => {\n e > 9 && --N[e + 1] === 0 && (N[e] = void 0, de.push(e));\n }, W = {\n toValue: (e) => (e || h(`Cannot use deleted val. handle = ${e}`), N[e]),\n toHandle: (e) => {\n switch (e) {\n case void 0: return 2;\n case null: return 4;\n case !0: return 6;\n case !1: return 8;\n default: {\n const r = de.pop() || N.length;\n return N[r] = e, N[r + 1] = 1, r;\n }\n }\n }\n }, Lt = {\n name: \"emscripten::val\",\n fromWireType: (e) => {\n var r = W.toValue(e);\n return Or(e), r;\n },\n toWireType: (e, r) => W.toHandle(r),\n readValueFromPointer: vr,\n destructorFunction: null\n }, zt = (e) => E(e, Lt), Yt = (e, r, t) => {\n switch (r) {\n case 1: return t ? function(n) {\n return this.fromWireType(k[n]);\n } : function(n) {\n return this.fromWireType(A[n]);\n };\n case 2: return t ? function(n) {\n return this.fromWireType(U[n >> 1]);\n } : function(n) {\n return this.fromWireType(L[n >> 1]);\n };\n case 4: return t ? function(n) {\n return this.fromWireType(T[n >> 2]);\n } : function(n) {\n return this.fromWireType(w[n >> 2]);\n };\n default: throw new TypeError(`invalid integer width (${r}): ${e}`);\n }\n }, Nt = (e, r, t, n) => {\n r = C(r);\n function i() {}\n i.values = {}, E(e, {\n name: r,\n constructor: i,\n fromWireType: function(a) {\n return this.constructor.values[a];\n },\n toWireType: (a, s) => s.value,\n readValueFromPointer: Yt(r, t, n),\n destructorFunction: null\n }), Rr(r, i);\n }, pe = (e, r) => {\n var t = j[e];\n return t === void 0 && h(`${r} has unknown type ${le(e)}`), t;\n }, Gt = (e, r, t) => {\n var n = pe(e, \"enum\");\n r = C(r);\n var i = n.constructor, a = Object.create(n.constructor.prototype, {\n value: { value: t },\n constructor: { value: fr(`${n.name}_${r}`, function() {}) }\n });\n i.values[t] = a, i[r] = a;\n }, qt = (e, r) => {\n switch (r) {\n case 4: return function(t) {\n return this.fromWireType(tr[t >> 2]);\n };\n case 8: return function(t) {\n return this.fromWireType(nr[t >> 3]);\n };\n default: throw new TypeError(`invalid float width (${r}): ${e}`);\n }\n }, Xt = (e, r, t) => {\n r = C(r), E(e, {\n name: r,\n fromWireType: (n) => n,\n toWireType: (n, i) => i,\n readValueFromPointer: qt(r, t),\n destructorFunction: null\n });\n }, Jt = (e, r, t, n, i, a, s, o) => {\n var u = gr(r, t);\n e = C(e), e = xr(e), i = R(n, i, s), Rr(e, function() {\n I(`Cannot call ${e} due to unbound types`, u);\n }, r - 1), D([], u, (c) => {\n var f = [c[0], null].concat(c.slice(1));\n return ue(e, hr(e, f, null, i, a, s), r - 1), [];\n });\n }, Kt = (e, r, t, n, i) => {\n r = C(r);\n const a = n === 0;\n let s = (u) => u;\n if (a) {\n var o = 32 - 8 * t;\n s = (u) => u << o >>> o, i = s(i);\n }\n E(e, {\n name: r,\n fromWireType: s,\n toWireType: (u, c) => c,\n readValueFromPointer: te(r, t, n !== 0),\n destructorFunction: null\n });\n }, Zt = (e, r, t) => {\n var i = [\n Int8Array,\n Uint8Array,\n Int16Array,\n Uint16Array,\n Int32Array,\n Uint32Array,\n Float32Array,\n Float64Array,\n BigInt64Array,\n BigUint64Array\n ][r];\n function a(s) {\n var o = w[s >> 2], u = w[s + 4 >> 2];\n return new i(k.buffer, u, o);\n }\n t = C(t), E(e, {\n name: t,\n fromWireType: a,\n readValueFromPointer: a\n }, { ignoreDuplicateRegistrations: !0 });\n }, Qt = (e, r, t, n) => {\n if (!(n > 0)) return 0;\n for (var i = t, a = t + n - 1, s = 0; s < e.length; ++s) {\n var o = e.codePointAt(s);\n if (o <= 127) {\n if (t >= a) break;\n r[t++] = o;\n } else if (o <= 2047) {\n if (t + 1 >= a) break;\n r[t++] = 192 | o >> 6, r[t++] = 128 | o & 63;\n } else if (o <= 65535) {\n if (t + 2 >= a) break;\n r[t++] = 224 | o >> 12, r[t++] = 128 | o >> 6 & 63, r[t++] = 128 | o & 63;\n } else {\n if (t + 3 >= a) break;\n r[t++] = 240 | o >> 18, r[t++] = 128 | o >> 12 & 63, r[t++] = 128 | o >> 6 & 63, r[t++] = 128 | o & 63, s++;\n }\n }\n return r[t] = 0, t - i;\n }, M = (e, r, t) => Qt(e, A, r, t), Ur = (e) => {\n for (var r = 0, t = 0; t < e.length; ++t) {\n var n = e.charCodeAt(t);\n n <= 127 ? r++ : n <= 2047 ? r += 2 : n >= 55296 && n <= 57343 ? (r += 4, ++t) : r += 3;\n }\n return r;\n }, he = typeof TextDecoder < \"u\" ? new TextDecoder() : void 0, ge = (e, r, t, n) => {\n var i = r + t;\n if (n) return i;\n for (; e[r] && !(r >= i);) ++r;\n return r;\n }, ye = (e, r = 0, t, n) => {\n var i = ge(e, r, t, n);\n if (i - r > 16 && e.buffer && he) return he.decode(e.subarray(r, i));\n for (var a = \"\"; r < i;) {\n var s = e[r++];\n if (!(s & 128)) {\n a += String.fromCharCode(s);\n continue;\n }\n var o = e[r++] & 63;\n if ((s & 224) == 192) {\n a += String.fromCharCode((s & 31) << 6 | o);\n continue;\n }\n var u = e[r++] & 63;\n if ((s & 240) == 224 ? s = (s & 15) << 12 | o << 6 | u : s = (s & 7) << 18 | o << 12 | u << 6 | e[r++] & 63, s < 65536) a += String.fromCharCode(s);\n else {\n var c = s - 65536;\n a += String.fromCharCode(55296 | c >> 10, 56320 | c & 1023);\n }\n }\n return a;\n }, yr = (e, r, t) => e ? ye(A, e, r, t) : \"\", rn = (e, r) => {\n r = C(r);\n var t = !0;\n E(e, {\n name: r,\n fromWireType(n) {\n var i = w[n >> 2], a = n + 4, s;\n if (t) s = yr(a, i, !0);\n else {\n s = \"\";\n for (var o = 0; o < i; ++o) s += String.fromCharCode(A[a + o]);\n }\n return O(n), s;\n },\n toWireType(n, i) {\n i instanceof ArrayBuffer && (i = new Uint8Array(i));\n var a, s = typeof i == \"string\";\n s || ArrayBuffer.isView(i) && i.BYTES_PER_ELEMENT == 1 || h(\"Cannot pass non-string to std::string\"), t && s ? a = Ur(i) : a = i.length;\n var o = Mr(4 + a + 1), u = o + 4;\n if (w[o >> 2] = a, s) if (t) M(i, u, a + 1);\n else for (var c = 0; c < a; ++c) {\n var f = i.charCodeAt(c);\n f > 255 && (O(o), h(\"String has UTF-16 code units that do not fit in 8 bits\")), A[u + c] = f;\n }\n else A.set(i, u);\n return n !== null && n.push(O, o), o;\n },\n readValueFromPointer: vr,\n destructorFunction(n) {\n O(n);\n }\n });\n }, me = typeof TextDecoder < \"u\" ? new TextDecoder(\"utf-16le\") : void 0, en = (e, r, t) => {\n var n = e >> 1, i = ge(L, n, r / 2, t);\n if (i - n > 16 && me) return me.decode(L.subarray(n, i));\n for (var a = \"\", s = n; s < i; ++s) {\n var o = L[s];\n a += String.fromCharCode(o);\n }\n return a;\n }, tn = (e, r, t) => {\n if (t ??= 2147483647, t < 2) return 0;\n t -= 2;\n for (var n = r, i = t < e.length * 2 ? t / 2 : e.length, a = 0; a < i; ++a) {\n var s = e.charCodeAt(a);\n U[r >> 1] = s, r += 2;\n }\n return U[r >> 1] = 0, r - n;\n }, nn = (e) => e.length * 2, an = (e, r, t) => {\n for (var n = \"\", i = e >> 2, a = 0; !(a >= r / 4); a++) {\n var s = w[i + a];\n if (!s && !t) break;\n n += String.fromCodePoint(s);\n }\n return n;\n }, sn = (e, r, t) => {\n if (t ??= 2147483647, t < 4) return 0;\n for (var n = r, i = n + t - 4, a = 0; a < e.length; ++a) {\n var s = e.codePointAt(a);\n if (s > 65535 && a++, T[r >> 2] = s, r += 4, r + 4 > i) break;\n }\n return T[r >> 2] = 0, r - n;\n }, on = (e) => {\n for (var r = 0, t = 0; t < e.length; ++t) e.codePointAt(t) > 65535 && t++, r += 4;\n return r;\n }, un = (e, r, t) => {\n t = C(t);\n var n, i, a;\n r === 2 ? (n = en, i = tn, a = nn) : (n = an, i = sn, a = on), E(e, {\n name: t,\n fromWireType: (s) => {\n var o = w[s >> 2], u = n(s + 4, o * r, !0);\n return O(s), u;\n },\n toWireType: (s, o) => {\n typeof o != \"string\" && h(`Cannot pass non-string to C++ string type ${t}`);\n var u = a(o), c = Mr(4 + u + r);\n return w[c >> 2] = u / r, i(o, c + 4, u + r), s !== null && s.push(O, c), c;\n },\n readValueFromPointer: vr,\n destructorFunction(s) {\n O(s);\n }\n });\n }, cn = (e, r) => {\n r = C(r), E(e, {\n isVoid: !0,\n name: r,\n fromWireType: () => {},\n toWireType: (t, n) => {}\n });\n }, be = 0, fn = () => {\n Cr = !1, be = 0;\n }, Vr = [], ln = (e) => {\n var r = Vr.length;\n return Vr.push(e), r;\n }, vn = (e, r) => {\n for (var t = new Array(e), n = 0; n < e; ++n) t[n] = pe(w[r + n * 4 >> 2], `parameter ${n}`);\n return t;\n }, _n = (e, r, t) => {\n var n = [], i = e(n, t);\n return n.length && (w[r >> 2] = W.toHandle(n)), i;\n }, dn = {}, pn = (e) => {\n var r = dn[e];\n return r === void 0 ? C(e) : r;\n }, hn = (e, r, t) => {\n var n = 8, [i, ...a] = vn(e, r), s = i.toWireType.bind(i), o = a.map((p) => p.readValueFromPointer.bind(p));\n e--;\n var u = { toValue: W.toValue }, c = o.map((p, v) => {\n var $ = `argFromPtr${v}`;\n return u[$] = p, `${$}(args${v ? \"+\" + v * n : \"\"})`;\n }), f;\n switch (t) {\n case 0:\n f = \"toValue(handle)\";\n break;\n case 2:\n f = \"new (toValue(handle))\";\n break;\n case 3:\n f = \"\";\n break;\n case 1: u.getStringOrSymbol = pn, f = \"toValue(handle)[getStringOrSymbol(methodName)]\";\n }\n f += `(${c})`, i.isVoid || (u.toReturnWire = s, u.emval_returnValue = _n, f = `return emval_returnValue(toReturnWire, destructorsRef, ${f})`), f = `return function (handle, methodName, destructorsRef, args) {\n ${f}\n }`;\n var _ = new Function(Object.keys(u), f)(...Object.values(u));\n return ln(fr(`methodCaller<(${a.map((p) => p.name)}) => ${i.name}>`, _));\n }, gn = (e, r, t, n, i) => Vr[e](r, t, n, i), yn = () => W.toHandle({}), mn = (e) => {\n Wr(W.toValue(e)), Or(e);\n }, bn = (e, r, t) => {\n e = W.toValue(e), r = W.toValue(r), t = W.toValue(t), e[r] = t;\n }, $n = 9007199254740992, wn = -9007199254740992, mr = (e) => e < wn || e > $n ? NaN : Number(e);\n function Tn(e, r) {\n e = mr(e);\n var t = /* @__PURE__ */ new Date(e * 1e3);\n T[r >> 2] = t.getUTCSeconds(), T[r + 4 >> 2] = t.getUTCMinutes(), T[r + 8 >> 2] = t.getUTCHours(), T[r + 12 >> 2] = t.getUTCDate(), T[r + 16 >> 2] = t.getUTCMonth(), T[r + 20 >> 2] = t.getUTCFullYear() - 1900, T[r + 24 >> 2] = t.getUTCDay();\n var n = Date.UTC(t.getUTCFullYear(), 0, 1, 0, 0, 0, 0), i = (t.getTime() - n) / 864e5 | 0;\n T[r + 28 >> 2] = i;\n }\n var Fn = (e) => e % 4 === 0 && (e % 100 !== 0 || e % 400 === 0), Cn = [\n 0,\n 31,\n 60,\n 91,\n 121,\n 152,\n 182,\n 213,\n 244,\n 274,\n 305,\n 335\n ], Pn = [\n 0,\n 31,\n 59,\n 90,\n 120,\n 151,\n 181,\n 212,\n 243,\n 273,\n 304,\n 334\n ], kn = (e) => {\n return (Fn(e.getFullYear()) ? Cn : Pn)[e.getMonth()] + e.getDate() - 1;\n };\n function Sn(e, r) {\n e = mr(e);\n var t = /* @__PURE__ */ new Date(e * 1e3);\n T[r >> 2] = t.getSeconds(), T[r + 4 >> 2] = t.getMinutes(), T[r + 8 >> 2] = t.getHours(), T[r + 12 >> 2] = t.getDate(), T[r + 16 >> 2] = t.getMonth(), T[r + 20 >> 2] = t.getFullYear() - 1900, T[r + 24 >> 2] = t.getDay();\n var n = kn(t) | 0;\n T[r + 28 >> 2] = n, T[r + 36 >> 2] = -(t.getTimezoneOffset() * 60);\n var i = new Date(t.getFullYear(), 0, 1), a = new Date(t.getFullYear(), 6, 1).getTimezoneOffset(), s = i.getTimezoneOffset(), o = (a != s && t.getTimezoneOffset() == Math.min(s, a)) | 0;\n T[r + 32 >> 2] = o;\n }\n var J = {}, $e = (e) => {\n if (e instanceof Zr || e == \"unwind\") return rr;\n zr(1, e);\n }, we = () => Cr || be > 0, Te = (e) => {\n rr = e, we() || (l.onExit?.(e), Q = !0), zr(e, new Zr(e));\n }, An = (e, r) => {\n rr = e, Te(e);\n }, En = An, Rn = () => {\n if (!we()) try {\n En(rr);\n } catch (e) {\n $e(e);\n }\n }, Dn = (e) => {\n if (!Q) try {\n e(), Rn();\n } catch (r) {\n $e(r);\n }\n }, Fe = () => performance.now(), Wn = (e, r) => {\n if (J[e] && (clearTimeout(J[e].id), delete J[e]), !r) return 0;\n return J[e] = {\n id: setTimeout(() => {\n delete J[e], Dn(() => Ee(e, Fe()));\n }, r),\n timeout_ms: r\n }, 0;\n }, xn = (e, r, t, n) => {\n var i = (/* @__PURE__ */ new Date()).getFullYear(), a = new Date(i, 0, 1), s = new Date(i, 6, 1), o = a.getTimezoneOffset(), u = s.getTimezoneOffset(), c = Math.max(o, u);\n w[e >> 2] = c * 60, T[r >> 2] = +(o != u);\n var f = (p) => {\n var v = p >= 0 ? \"-\" : \"+\", $ = Math.abs(p);\n return `UTC${v}${String(Math.floor($ / 60)).padStart(2, \"0\")}${String($ % 60).padStart(2, \"0\")}`;\n }, _ = f(o), d = f(u);\n u < o ? (M(_, t, 17), M(d, n, 17)) : (M(_, n, 17), M(d, t, 17));\n }, On = () => Date.now(), Un = 1, Vn = (e) => e >= 0 && e <= 3;\n function jn(e, r, t) {\n if (r = mr(r), !Vn(e)) return 28;\n var n;\n if (e === 0) n = On();\n else if (Un) n = Fe();\n else return 52;\n var i = Math.round(n * 1e3 * 1e3);\n return V[t >> 3] = BigInt(i), 0;\n }\n var Ce = () => 2147483648, In = () => Ce(), Mn = (e, r) => Math.ceil(e / r) * r, Hn = (e) => {\n var t = (e - er.buffer.byteLength + 65535) / 65536 | 0;\n try {\n return er.grow(t), Kr(), 1;\n } catch {}\n }, Bn = (e) => {\n var r = A.length;\n e >>>= 0;\n var t = Ce();\n if (e > t) return !1;\n for (var n = 1; n <= 4; n *= 2) {\n var i = r * (1 + .2 / n);\n i = Math.min(i, e + 100663296);\n if (Hn(Math.min(t, Mn(Math.max(e, i), 65536)))) return !0;\n }\n return !1;\n }, br = {}, Ln = () => Lr || \"./this.program\", K = () => {\n if (!K.strings) {\n var r = {\n USER: \"web_user\",\n LOGNAME: \"web_user\",\n PATH: \"/\",\n PWD: \"/\",\n HOME: \"/home/web_user\",\n LANG: (typeof navigator == \"object\" && navigator.language || \"C\").replace(\"-\", \"_\") + \".UTF-8\",\n _: Ln()\n };\n for (var t in br) br[t] === void 0 ? delete r[t] : r[t] = br[t];\n var n = [];\n for (var t in r) n.push(`${t}=${r[t]}`);\n K.strings = n;\n }\n return K.strings;\n }, zn = (e, r) => {\n var t = 0, n = 0;\n for (var i of K()) {\n var a = r + t;\n w[e + n >> 2] = a, t += M(i, a, 1 / 0) + 1, n += 4;\n }\n return 0;\n }, Yn = (e, r) => {\n var t = K();\n w[e >> 2] = t.length;\n var n = 0;\n for (var i of t) n += Ur(i) + 1;\n return w[r >> 2] = n, 0;\n }, Nn = (e) => 52, Gn = (e, r) => {\n var t = 0, n = 0, i = 0;\n var a = 2;\n e == 0 ? t = 2 : (e == 1 || e == 2) && (t = 64), i = 1;\n return k[r] = a, U[r + 2 >> 1] = i, V[r + 8 >> 3] = BigInt(t), V[r + 16 >> 3] = BigInt(n), 0;\n };\n function qn(e, r, t, n) {\n return r = mr(r), 70;\n }\n var jr = [\n null,\n [],\n []\n ], Ir = (e, r) => {\n var t = jr[e];\n r === 0 || r === 10 ? ((e === 1 ? Nr : B)(ye(t)), t.length = 0) : t.push(r);\n }, Xn = (e, r, t, n) => {\n for (var i = 0, a = 0; a < t; a++) {\n var s = w[r >> 2], o = w[r + 4 >> 2];\n r += 8;\n for (var u = 0; u < o; u++) Ir(e, A[s + u]);\n i += o;\n }\n return w[n >> 2] = i, 0;\n }, Jn = (e) => e, Pe = (e) => {\n return l[\"_\" + e];\n }, Kn = (e, r) => {\n k.set(e, r);\n }, ke = (e) => We(e), Zn = (e) => {\n var r = Ur(e) + 1, t = ke(r);\n return M(e, t, r), t;\n }, Se = (e, r, t, n, i) => {\n var a = {\n string: (v) => {\n var $ = 0;\n return v != null && v !== 0 && ($ = Zn(v)), $;\n },\n array: (v) => {\n var $ = ke(v.length);\n return Kn(v, $), $;\n }\n };\n function s(v) {\n return r === \"string\" ? yr(v) : r === \"boolean\" ? !!v : v;\n }\n var o = Pe(e), u = [], c = 0;\n if (n) for (var f = 0; f < n.length; f++) {\n var _ = a[t[f]];\n _ ? (c === 0 && (c = m()), u[f] = _(n[f])) : u[f] = n[f];\n }\n var d = o(...u);\n function p(v) {\n return c !== 0 && y(c), s(v);\n }\n return d = p(d), d;\n }, Qn = (e, r, t, n) => {\n var i = !t || t.every((s) => s === \"number\" || s === \"boolean\");\n return r !== \"string\" && i && !n ? Pe(e) : (...s) => Se(e, r, t, s, n);\n };\n if (wt(), Ot(), l.noExitRuntime && (Cr = l.noExitRuntime), l.print && (Nr = l.print), l.printErr && (B = l.printErr), l.wasmBinary && (G = l.wasmBinary), l.arguments && l.arguments, l.thisProgram && (Lr = l.thisProgram), l.preInit) for (typeof l.preInit == \"function\" && (l.preInit = [l.preInit]); l.preInit.length > 0;) l.preInit.shift()();\n l.ENV = br, l.ccall = Se, l.cwrap = Qn;\n var Ae, Mr, O, Ee, g, Re, De, We, xe, Oe, Ue, Ve, je;\n function si(e) {\n Ae = e.__getTypeName, l._malloc = Mr = e.malloc, l._parseDropFile = e.parseDropFile, l._getAttributeFromDropFile = e.getAttributeFromDropFile, l._takeAttributeFromDropFile = e.takeAttributeFromDropFile, l._flattenDropFile = e.flattenDropFile, l._destroyDropFileHandle = e.destroyDropFileHandle, e.__cxa_free_exception, l._free = O = e.free, Ee = e._emscripten_timeout, g = e.setThrew, Re = e._emscripten_tempret_set, De = e._emscripten_stack_restore, We = e._emscripten_stack_alloc, xe = e.emscripten_stack_get_current, Oe = e.__cxa_decrement_exception_refcount, Ue = e.__cxa_increment_exception_refcount, Ve = e.__cxa_can_catch, je = e.__cxa_get_exception_ptr;\n }\n var Ie = {\n __cxa_begin_catch: st,\n __cxa_end_catch: ot,\n __cxa_find_matching_catch_2: ut,\n __cxa_find_matching_catch_3: ct,\n __cxa_find_matching_catch_4: ft,\n __cxa_rethrow: lt,\n __cxa_throw: vt,\n __cxa_uncaught_exceptions: _t,\n __resumeException: dt,\n _abort_js: pt,\n _embind_register_bigint: gt,\n _embind_register_bool: yt,\n _embind_register_class: Vt,\n _embind_register_class_class_function: It,\n _embind_register_class_constructor: Mt,\n _embind_register_class_function: Ht,\n _embind_register_class_property: Bt,\n _embind_register_emval: zt,\n _embind_register_enum: Nt,\n _embind_register_enum_value: Gt,\n _embind_register_float: Xt,\n _embind_register_function: Jt,\n _embind_register_integer: Kt,\n _embind_register_memory_view: Zt,\n _embind_register_std_string: rn,\n _embind_register_std_wstring: un,\n _embind_register_void: cn,\n _emscripten_runtime_keepalive_clear: fn,\n _emval_create_invoker: hn,\n _emval_decref: Or,\n _emval_invoke: gn,\n _emval_new_object: yn,\n _emval_run_destructors: mn,\n _emval_set_property: bn,\n _gmtime_js: Tn,\n _localtime_js: Sn,\n _setitimer_js: Wn,\n _tzset_js: xn,\n clock_time_get: jn,\n emscripten_get_heap_max: In,\n emscripten_resize_heap: Bn,\n environ_get: zn,\n environ_sizes_get: Yn,\n fd_close: Nn,\n fd_fdstat_get: Gn,\n fd_seek: qn,\n fd_write: Xn,\n invoke_diii: Wi,\n invoke_fi: Ti,\n invoke_fiii: Di,\n invoke_i: Ci,\n invoke_ii: ui,\n invoke_iii: ci,\n invoke_iiii: mi,\n invoke_iiiid: Oi,\n invoke_iiiii: wi,\n invoke_iiiiid: Ai,\n invoke_iiiiii: hi,\n invoke_iiiiiii: Ui,\n invoke_iiiiiiii: Ei,\n invoke_iiiiiiiiii: yi,\n invoke_iiiiiiiiiii: _i,\n invoke_iiiiiiiiiiii: di,\n invoke_iiiiijj: Vi,\n invoke_iiiijj: ji,\n invoke_iiij: Pi,\n invoke_j: ki,\n invoke_jiiii: Ri,\n invoke_v: pi,\n invoke_vi: oi,\n invoke_vii: li,\n invoke_viii: fi,\n invoke_viiii: vi,\n invoke_viiiii: bi,\n invoke_viiiiii: gi,\n invoke_viiiiiii: xi,\n invoke_viiiiiiii: Fi,\n invoke_viiiiiiiiii: Ii,\n invoke_viiiiiiiiiiiiiii: Mi,\n invoke_viiji: Si,\n invoke_viijii: $i,\n llvm_eh_typeid_for: Jn,\n proc_exit: Te\n };\n function oi(e, r) {\n var t = m();\n try {\n b(e)(r);\n } catch (n) {\n if (y(t), n !== n + 0) throw n;\n g(1, 0);\n }\n }\n function ui(e, r) {\n var t = m();\n try {\n return b(e)(r);\n } catch (n) {\n if (y(t), n !== n + 0) throw n;\n g(1, 0);\n }\n }\n function ci(e, r, t) {\n var n = m();\n try {\n return b(e)(r, t);\n } catch (i) {\n if (y(n), i !== i + 0) throw i;\n g(1, 0);\n }\n }\n function fi(e, r, t, n) {\n var i = m();\n try {\n b(e)(r, t, n);\n } catch (a) {\n if (y(i), a !== a + 0) throw a;\n g(1, 0);\n }\n }\n function li(e, r, t) {\n var n = m();\n try {\n b(e)(r, t);\n } catch (i) {\n if (y(n), i !== i + 0) throw i;\n g(1, 0);\n }\n }\n function vi(e, r, t, n, i) {\n var a = m();\n try {\n b(e)(r, t, n, i);\n } catch (s) {\n if (y(a), s !== s + 0) throw s;\n g(1, 0);\n }\n }\n function _i(e, r, t, n, i, a, s, o, u, c, f) {\n var _ = m();\n try {\n return b(e)(r, t, n, i, a, s, o, u, c, f);\n } catch (d) {\n if (y(_), d !== d + 0) throw d;\n g(1, 0);\n }\n }\n function di(e, r, t, n, i, a, s, o, u, c, f, _) {\n var d = m();\n try {\n return b(e)(r, t, n, i, a, s, o, u, c, f, _);\n } catch (p) {\n if (y(d), p !== p + 0) throw p;\n g(1, 0);\n }\n }\n function pi(e) {\n var r = m();\n try {\n b(e)();\n } catch (t) {\n if (y(r), t !== t + 0) throw t;\n g(1, 0);\n }\n }\n function hi(e, r, t, n, i, a) {\n var s = m();\n try {\n return b(e)(r, t, n, i, a);\n } catch (o) {\n if (y(s), o !== o + 0) throw o;\n g(1, 0);\n }\n }\n function gi(e, r, t, n, i, a, s) {\n var o = m();\n try {\n b(e)(r, t, n, i, a, s);\n } catch (u) {\n if (y(o), u !== u + 0) throw u;\n g(1, 0);\n }\n }\n function yi(e, r, t, n, i, a, s, o, u, c) {\n var f = m();\n try {\n return b(e)(r, t, n, i, a, s, o, u, c);\n } catch (_) {\n if (y(f), _ !== _ + 0) throw _;\n g(1, 0);\n }\n }\n function mi(e, r, t, n) {\n var i = m();\n try {\n return b(e)(r, t, n);\n } catch (a) {\n if (y(i), a !== a + 0) throw a;\n g(1, 0);\n }\n }\n function bi(e, r, t, n, i, a) {\n var s = m();\n try {\n b(e)(r, t, n, i, a);\n } catch (o) {\n if (y(s), o !== o + 0) throw o;\n g(1, 0);\n }\n }\n function $i(e, r, t, n, i, a) {\n var s = m();\n try {\n b(e)(r, t, n, i, a);\n } catch (o) {\n if (y(s), o !== o + 0) throw o;\n g(1, 0);\n }\n }\n function wi(e, r, t, n, i) {\n var a = m();\n try {\n return b(e)(r, t, n, i);\n } catch (s) {\n if (y(a), s !== s + 0) throw s;\n g(1, 0);\n }\n }\n function Ti(e, r) {\n var t = m();\n try {\n return b(e)(r);\n } catch (n) {\n if (y(t), n !== n + 0) throw n;\n g(1, 0);\n }\n }\n function Fi(e, r, t, n, i, a, s, o, u) {\n var c = m();\n try {\n b(e)(r, t, n, i, a, s, o, u);\n } catch (f) {\n if (y(c), f !== f + 0) throw f;\n g(1, 0);\n }\n }\n function Ci(e) {\n var r = m();\n try {\n return b(e)();\n } catch (t) {\n if (y(r), t !== t + 0) throw t;\n g(1, 0);\n }\n }\n function Pi(e, r, t, n) {\n var i = m();\n try {\n return b(e)(r, t, n);\n } catch (a) {\n if (y(i), a !== a + 0) throw a;\n g(1, 0);\n }\n }\n function ki(e) {\n var r = m();\n try {\n return b(e)();\n } catch (t) {\n if (y(r), t !== t + 0) throw t;\n return g(1, 0), 0n;\n }\n }\n function Si(e, r, t, n, i) {\n var a = m();\n try {\n b(e)(r, t, n, i);\n } catch (s) {\n if (y(a), s !== s + 0) throw s;\n g(1, 0);\n }\n }\n function Ai(e, r, t, n, i, a) {\n var s = m();\n try {\n return b(e)(r, t, n, i, a);\n } catch (o) {\n if (y(s), o !== o + 0) throw o;\n g(1, 0);\n }\n }\n function Ei(e, r, t, n, i, a, s, o) {\n var u = m();\n try {\n return b(e)(r, t, n, i, a, s, o);\n } catch (c) {\n if (y(u), c !== c + 0) throw c;\n g(1, 0);\n }\n }\n function Ri(e, r, t, n, i) {\n var a = m();\n try {\n return b(e)(r, t, n, i);\n } catch (s) {\n if (y(a), s !== s + 0) throw s;\n return g(1, 0), 0n;\n }\n }\n function Di(e, r, t, n) {\n var i = m();\n try {\n return b(e)(r, t, n);\n } catch (a) {\n if (y(i), a !== a + 0) throw a;\n g(1, 0);\n }\n }\n function Wi(e, r, t, n) {\n var i = m();\n try {\n return b(e)(r, t, n);\n } catch (a) {\n if (y(i), a !== a + 0) throw a;\n g(1, 0);\n }\n }\n function xi(e, r, t, n, i, a, s, o) {\n var u = m();\n try {\n b(e)(r, t, n, i, a, s, o);\n } catch (c) {\n if (y(u), c !== c + 0) throw c;\n g(1, 0);\n }\n }\n function Oi(e, r, t, n, i) {\n var a = m();\n try {\n return b(e)(r, t, n, i);\n } catch (s) {\n if (y(a), s !== s + 0) throw s;\n g(1, 0);\n }\n }\n function Ui(e, r, t, n, i, a, s) {\n var o = m();\n try {\n return b(e)(r, t, n, i, a, s);\n } catch (u) {\n if (y(o), u !== u + 0) throw u;\n g(1, 0);\n }\n }\n function Vi(e, r, t, n, i, a, s) {\n var o = m();\n try {\n return b(e)(r, t, n, i, a, s);\n } catch (u) {\n if (y(o), u !== u + 0) throw u;\n g(1, 0);\n }\n }\n function ji(e, r, t, n, i, a) {\n var s = m();\n try {\n return b(e)(r, t, n, i, a);\n } catch (o) {\n if (y(s), o !== o + 0) throw o;\n g(1, 0);\n }\n }\n function Ii(e, r, t, n, i, a, s, o, u, c, f) {\n var _ = m();\n try {\n b(e)(r, t, n, i, a, s, o, u, c, f);\n } catch (d) {\n if (y(_), d !== d + 0) throw d;\n g(1, 0);\n }\n }\n function Mi(e, r, t, n, i, a, s, o, u, c, f, _, d, p, v, $) {\n var P = m();\n try {\n b(e)(r, t, n, i, a, s, o, u, c, f, _, d, p, v, $);\n } catch (F) {\n if (y(P), F !== F + 0) throw F;\n g(1, 0);\n }\n }\n function Hi() {\n qe();\n function e() {\n l.calledRun = !0, !Q && (Xe(), Gr?.(l), l.onRuntimeInitialized?.(), Je());\n }\n l.setStatus ? (l.setStatus(\"Running...\"), setTimeout(() => {\n setTimeout(() => l.setStatus(\"\"), 1), e();\n }, 1)) : e();\n }\n var H;\n return H = await nt(), Hi(), Jr ? $r = l : $r = new Promise((e, r) => {\n Gr = e, qr = r;\n }), $r;\n}\n//#endregion\n//#region packages/core/engine/threads/decoder/worker.ts\nconst { wasmBinary } = await new Promise((resolve) => {\n self.addEventListener(\"message\", function onInit(e) {\n if (e.data?.type === \"wasm-init\") {\n self.removeEventListener(\"message\", onInit);\n resolve(e.data);\n }\n });\n});\nif (!wasmBinary) throw new Error(\"Decoder worker did not receive WASM binary. The main thread failed to fetch aqua-parser.wasm.\");\nconst module = await Li({ wasmBinary });\nconst controllers = /* @__PURE__ */ new Map();\nconst decoder = {\n get AttributeInfo() {\n return module.AttributeInfo;\n },\n get AquaStatus() {\n return module.AquaStatus;\n },\n get heapU8() {\n return module.HEAPU8;\n },\n get heapU32() {\n return module.HEAPU32;\n },\n get SceneRequestDescriptor() {\n return module.SceneRequestDescriptor;\n },\n get WorkerDataType() {\n return module.WorkerDataType;\n },\n dataPtrView: (attributeInfo) => {\n return module.dataPtrView(attributeInfo);\n },\n free: (...args) => {\n return module.ccall(\"free\", \"number\", [\"number\"], args);\n },\n malloc: (...args) => {\n return module.ccall(\"malloc\", \"number\", [\"number\"], args);\n },\n parseDropFile: (bufferPtr, bufferSize) => {\n return module.parseDropFile(bufferPtr, bufferSize);\n },\n getAttributeFromDropFile: (handle, attributeName, attributeInfo) => {\n return module.getAttributeFromDropFile(handle, attributeName, attributeInfo);\n },\n takeAttributeFromDropFile: (handle, attributeName, clientSideId) => {\n return module.takeAttributeFromDropFile(handle, attributeName, clientSideId);\n },\n flattenDropFile: (handle, outPtr, outSize) => {\n return module.flattenDropFile(handle, outPtr, outSize);\n },\n destroyDropFileHandle: (handle) => {\n return module.destroyDropFileHandle(handle);\n }\n};\ndefineActions({\n async cancel(requestIdLow, requestIdHigh) {\n const key = `${requestIdHigh}-${requestIdLow}`;\n const controller = controllers.get(key);\n if (controller) {\n controller.abort();\n controllers.delete(key);\n }\n return [{ cancelled: !!controller }];\n },\n async heapSnapshot(topN) {\n if (typeof module.TakeHeapSnapshot !== \"function\") return [{ snapshotJson: null }];\n return [{ snapshotJson: module.TakeHeapSnapshot(topN) }];\n },\n async heapTrackingControl(enabled) {\n if (typeof module.SetHeapTrackingEnabled !== \"function\") return [{ success: false }];\n module.SetHeapTrackingEnabled(enabled);\n return [{ success: true }];\n },\n async heapTrackingReset() {\n if (typeof module.ResetHeapTracking !== \"function\") return [{ success: false }];\n module.ResetHeapTracking();\n return [{ success: true }];\n },\n async decode(requestIdLow, requestIdHigh, descriptorBuffer, contextPtr, consecutiveIdsStart, noJwt) {\n const key = `${requestIdHigh}-${requestIdLow}`;\n const controller = new AbortController();\n controllers.set(key, controller);\n try {\n const { free, malloc, parseDropFile, getAttributeFromDropFile, takeAttributeFromDropFile, flattenDropFile, destroyDropFileHandle } = decoder;\n const descriptorSize = descriptorBuffer.byteLength;\n const descriptorPointer = malloc(descriptorSize);\n decoder.heapU8.set(new Uint8Array(descriptorBuffer), descriptorPointer);\n const descriptor = module.SceneRequestDescriptor.deserializeFromBinary(descriptorPointer, descriptorSize);\n free(descriptorPointer);\n let url = descriptor.getUrl();\n if (noJwt) {\n const url_class = new URL(url);\n url_class.searchParams.delete(\"jwt\");\n url = url_class.toString();\n }\n const body = descriptor.getBody() || null;\n const method = body ? \"POST\" : \"GET\";\n const headers = descriptor.getHeaders();\n descriptor.delete();\n const startTime = performance.now();\n const response = await fetch(url, {\n method,\n headers,\n body,\n signal: controller.signal\n });\n const responseHeadersJson = JSON.stringify({ \"x-cache\": response.headers.get(\"x-cache\") ?? \"\" });\n if (!response.ok) {\n const duration = performance.now() - startTime;\n return [{\n requestIdLow,\n requestIdHigh,\n resultBuffer: /* @__PURE__ */ new ArrayBuffer(0),\n success: false,\n parsed: false,\n error: `HTTP error! status: ${response.status}`,\n dataType: module.WorkerDataType.Raw.value,\n contextPtr,\n attributes: [],\n duration,\n ttfb: duration,\n httpStatus: response.status,\n responseHeadersJson\n }, { transfer: [] }];\n }\n const rtt = performance.now() - startTime;\n const responseBuffer = await response.arrayBuffer();\n const duration = performance.now() - startTime;\n const attributes = [];\n if (!url.split(/[?#]/, 1)[0].endsWith(\".drop\")) return [{\n requestIdLow,\n requestIdHigh,\n resultBuffer: responseBuffer,\n success: true,\n parsed: false,\n error: void 0,\n dataType: module.WorkerDataType.Raw.value,\n contextPtr,\n attributes,\n duration,\n ttfb: rtt,\n httpStatus: response.status,\n responseHeadersJson\n }, { transfer: [responseBuffer] }];\n const responseSize = responseBuffer.byteLength;\n const responsePointer = malloc(responseSize);\n decoder.heapU8.set(new Uint8Array(responseBuffer), responsePointer);\n const outputPointerPointer = malloc(4);\n const outputSizePointer = malloc(4);\n decoder.heapU32[outputPointerPointer / 4] = 0;\n decoder.heapU32[outputSizePointer / 4] = 0;\n let handle = 0;\n let outputPointer = 0;\n const attributeInfo = new decoder.AttributeInfo();\n try {\n handle = parseDropFile(responsePointer, responseSize);\n if (handle === 0) throw new Error(\"parseDropFile failed\");\n let index = consecutiveIdsStart;\n for (const [name, info] of Object.entries(sparkAttributeList)) {\n if (info.discard) takeAttributeFromDropFile(handle, name, index);\n else if (getAttributeFromDropFile(handle, name, attributeInfo) === decoder.AquaStatus.Success) {\n const wasmView = decoder.dataPtrView(attributeInfo);\n const splatData = sparkAttributeFromRaw(name, index, wasmView);\n if (takeAttributeFromDropFile(handle, name, index) === decoder.AquaStatus.Success) attributes.push(splatData);\n }\n index++;\n }\n if (flattenDropFile(handle, outputPointerPointer, outputSizePointer) !== decoder.AquaStatus.Success) throw new Error(\"flattenDropFile failed\");\n outputPointer = decoder.heapU32[outputPointerPointer / 4];\n const outputSize = decoder.heapU32[outputSizePointer / 4];\n if (outputPointer === 0) throw new Error(\"flattenDropFile gave nullptr\");\n const resultBuffer = decoder.heapU8.buffer.slice(outputPointer, outputPointer + outputSize);\n const transferList = attributes.map((attr) => attr.paddedData.buffer);\n return [{\n requestIdLow,\n requestIdHigh,\n resultBuffer,\n success: true,\n parsed: true,\n error: void 0,\n dataType: module.WorkerDataType.Drop.value,\n contextPtr,\n attributes,\n duration,\n ttfb: rtt,\n httpStatus: response.status,\n responseHeadersJson\n }, { transfer: [resultBuffer, ...transferList] }];\n } catch (error) {\n console.error(\"Exception when parsing dropfile\", error);\n const errorMessage = error instanceof Error ? error.stack ?? error.message : String(error);\n const resultBuffer = (/* @__PURE__ */ new Uint8Array()).buffer;\n return [{\n requestIdLow,\n requestIdHigh,\n resultBuffer,\n success: false,\n parsed: false,\n error: errorMessage,\n dataType: module.WorkerDataType.Drop.value,\n contextPtr,\n attributes: void 0,\n duration,\n ttfb: rtt,\n httpStatus: response.status,\n responseHeadersJson\n }, { transfer: [resultBuffer] }];\n } finally {\n destroyDropFileHandle(handle);\n free(responsePointer);\n free(outputPointerPointer);\n free(outputSizePointer);\n if (outputPointer !== 0) free(outputPointer);\n attributeInfo.delete();\n }\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : String(error);\n const isCancelled = error instanceof Error && error.name === \"AbortError\";\n return [{\n requestIdLow,\n requestIdHigh,\n resultBuffer: /* @__PURE__ */ new ArrayBuffer(0),\n success: false,\n parsed: false,\n error: isCancelled ? \"Cancelled\" : errorMsg,\n dataType: module.WorkerDataType.Raw.value,\n contextPtr,\n attributes: [],\n duration: 0,\n ttfb: 0,\n httpStatus: 0,\n responseHeadersJson: \"{}\"\n }, { transfer: [] }];\n } finally {\n controllers.delete(key);\n }\n }\n});\n//#endregion\n";
|
|
182
|
+
var jsContent = "//#region packages/core/engine/threads/utils.ts\nconst defineActions = (actions) => {\n self.postMessage(\"ready\");\n self.addEventListener(\"message\", async ({ data }) => {\n if (\"ready\" === data) return;\n const { id, action, args } = data;\n const [result, ...postMessageArgs] = await Reflect.apply(actions[action], void 0, [...args, id]);\n self.postMessage({\n id,\n result\n }, ...postMessageArgs);\n });\n return actions;\n};\n//#endregion\n//#region packages/core/attribute.ts\nconst sparkMinSplats = 2048;\nconst sparkAttributeList = {\n sparkPackedSplat: {\n elementsPerSplat: 4,\n discard: false\n },\n extendedPackedSplatLow: {\n elementsPerSplat: 4,\n discard: false\n },\n extendedPackedSplatHigh: {\n elementsPerSplat: 4,\n discard: false\n },\n packedSh1: {\n elementsPerSplat: 2,\n discard: false\n },\n packedSh2: {\n elementsPerSplat: 4,\n discard: false\n },\n packedSh3: {\n elementsPerSplat: 4,\n discard: false\n },\n sh1Extended: {\n elementsPerSplat: 4,\n discard: false\n },\n sh2Extended: {\n elementsPerSplat: 4,\n discard: false\n },\n sh3Extended_0: {\n elementsPerSplat: 4,\n discard: false\n },\n sh3Extended_1: {\n elementsPerSplat: 4,\n discard: false\n },\n sharkEllipsoid: {\n elementsPerSplat: 12,\n discard: false\n },\n sharkEllipsoidCompressed: {\n elementsPerSplat: 4,\n discard: false\n },\n sharkSphericalHarmonics: {\n elementsPerSplat: 16,\n discard: false\n },\n color: {\n elementsPerSplat: 2,\n discard: false\n },\n mod_depth: {\n elementsPerSplat: .5,\n discard: false\n }\n};\nfunction roundUpToMultipleOf(a, multiple) {\n return Math.ceil(a / multiple) * multiple;\n}\nfunction sparkAttributeFromRaw(name, id, wasmView) {\n const attrib = sparkAttributeList[name];\n if (attrib === void 0) throw new Error(\"attribute name\" + name + \" is unknown\");\n const originalSize = wasmView.length;\n const paddedSize = roundUpToMultipleOf(originalSize, attrib.elementsPerSplat * sparkMinSplats);\n const paddedData = new Uint32Array(paddedSize);\n paddedData.set(wasmView);\n return {\n paddedData,\n originalSizeInUints: originalSize,\n id\n };\n}\n//#endregion\n//#region packages/core/aqua-parser.js\nasync function qi(ze = {}) {\n var $r, l = ze, Ye = !1, Br = !0, Lr = \"./this.program\", zr = (e, r) => {\n throw r;\n }, Ge = import.meta.url, wr = \"\";\n function qe(e) {\n return l.locateFile ? l.locateFile(e, wr) : wr + e;\n }\n var Yr, Tr;\n if (Ye || Br) {\n try {\n wr = new URL(\".\", Ge).href;\n } catch {}\n Br && (Tr = (e) => {\n var r = new XMLHttpRequest();\n return r.open(\"GET\", e, !1), r.responseType = \"arraybuffer\", r.send(null), new Uint8Array(r.response);\n }), Yr = async (e) => {\n var r = await fetch(e, { credentials: \"same-origin\" });\n if (r.ok) return r.arrayBuffer();\n throw new Error(r.status + \" : \" + r.url);\n };\n }\n var Nr = console.log.bind(console), L = console.error.bind(console), G, Q = !1, rr, Gr, qr, er, S, E, U, z, T, w, tr, nr, V, Xr, Jr = !1;\n function Kr() {\n var e = er.buffer;\n l.HEAP8 = S = new Int8Array(e), U = new Int16Array(e), l.HEAPU8 = E = new Uint8Array(e), z = new Uint16Array(e), l.HEAP32 = T = new Int32Array(e), l.HEAPU32 = w = new Uint32Array(e), l.HEAPF32 = tr = new Float32Array(e), l.HEAPF64 = nr = new Float64Array(e), V = new BigInt64Array(e), Xr = new BigUint64Array(e);\n }\n function Xe() {\n if (l.preRun) for (typeof l.preRun == \"function\" && (l.preRun = [l.preRun]); l.preRun.length;) st(l.preRun.shift());\n Qr(ee);\n }\n function Je() {\n Jr = !0, B.__wasm_call_ctors();\n }\n function Ke() {\n if (l.postRun) for (typeof l.postRun == \"function\" && (l.postRun = [l.postRun]); l.postRun.length;) at(l.postRun.shift());\n Qr(re);\n }\n function Y(e) {\n l.onAbort?.(e), e = \"Aborted(\" + e + \")\", L(e), Q = !0, e += \". Build with -sASSERTIONS for more info.\";\n var r = new WebAssembly.RuntimeError(e);\n throw qr?.(r), r;\n }\n var Fr;\n function Ze() {\n return l.locateFile ? qe(\"aqua-parser.wasm\") : \"\";\n }\n function Qe(e) {\n if (e == Fr && G) return new Uint8Array(G);\n if (Tr) return Tr(e);\n throw \"both async and sync fetching of the wasm failed\";\n }\n async function rt(e) {\n if (!G) try {\n var r = await Yr(e);\n return new Uint8Array(r);\n } catch {}\n return Qe(e);\n }\n async function et(e, r) {\n try {\n var t = await rt(e);\n return await WebAssembly.instantiate(t, r);\n } catch (i) {\n L(`failed to asynchronously prepare wasm: ${i}`), Y(i);\n }\n }\n async function tt(e, r, t) {\n if (!e) try {\n var n = fetch(r, { credentials: \"same-origin\" });\n return await WebAssembly.instantiateStreaming(n, t);\n } catch (a) {\n L(`wasm streaming compile failed: ${a}`), L(\"falling back to ArrayBuffer instantiation\");\n }\n return et(r, t);\n }\n function nt() {\n return {\n env: He,\n wasi_snapshot_preview1: He\n };\n }\n async function it() {\n function e(a, s) {\n return B = a.exports, er = B.memory, Kr(), fe = B.__indirect_function_table, fi(B), B;\n }\n function r(a) {\n return e(a.instance);\n }\n var t = nt();\n if (l.instantiateWasm) return new Promise((a, s) => {\n l.instantiateWasm(t, (o, u) => {\n a(e(o, u));\n });\n });\n Fr ??= Ze();\n return r(await tt(G, Fr, t));\n }\n class Zr {\n name = \"ExitStatus\";\n constructor(r) {\n this.message = `Program terminated with exit(${r})`, this.status = r;\n }\n }\n var Qr = (e) => {\n for (; e.length > 0;) e.shift()(l);\n }, re = [], at = (e) => re.push(e), ee = [], st = (e) => ee.push(e);\n var Cr = !0;\n var g = (e) => We(e), y = () => Oe(), ir = [], ar = 0, ot = (e) => {\n var r = new Pr(e);\n return r.get_caught() || (r.set_caught(!0), ar--), r.set_rethrown(!1), ir.push(r), Ve(e), Ie(e);\n }, x = 0, ut = () => {\n h(0, 0);\n var e = ir.pop();\n Ue(e.excPtr), x = 0;\n };\n class Pr {\n constructor(r) {\n this.excPtr = r, this.ptr = r - 24;\n }\n set_type(r) {\n w[this.ptr + 4 >> 2] = r;\n }\n get_type() {\n return w[this.ptr + 4 >> 2];\n }\n set_destructor(r) {\n w[this.ptr + 8 >> 2] = r;\n }\n get_destructor() {\n return w[this.ptr + 8 >> 2];\n }\n set_caught(r) {\n r = r ? 1 : 0, S[this.ptr + 12] = r;\n }\n get_caught() {\n return S[this.ptr + 12] != 0;\n }\n set_rethrown(r) {\n r = r ? 1 : 0, S[this.ptr + 13] = r;\n }\n get_rethrown() {\n return S[this.ptr + 13] != 0;\n }\n init(r, t) {\n this.set_adjusted_ptr(0), this.set_type(r), this.set_destructor(t);\n }\n set_adjusted_ptr(r) {\n w[this.ptr + 16 >> 2] = r;\n }\n get_adjusted_ptr() {\n return w[this.ptr + 16 >> 2];\n }\n }\n var sr = (e) => De(e), kr = (e) => {\n var r = x;\n if (!r) return sr(0), 0;\n var t = new Pr(r);\n t.set_adjusted_ptr(r);\n var n = t.get_type();\n if (!n) return sr(0), r;\n for (var i of e) {\n if (i === 0 || i === n) break;\n var a = t.ptr + 16;\n if (je(i, n, a)) return sr(i), r;\n }\n return sr(n), r;\n }, ct = () => kr([]), ft = (e) => kr([e]), lt = (e, r) => kr([e, r]), vt = () => {\n var e = ir.pop();\n e || Y(\"no exception to throw\");\n var r = e.excPtr;\n throw e.get_rethrown() || (ir.push(e), e.set_rethrown(!0), e.set_caught(!1), ar++), x = r, x;\n }, _t = (e, r, t) => {\n throw new Pr(e).init(r, t), x = e, ar++, x;\n }, dt = () => ar, pt = (e) => {\n throw x || (x = e), x;\n }, ht = () => Y(\"\"), C = (e) => {\n for (var r = \"\";;) {\n var t = E[e++];\n if (!t) return r;\n r += String.fromCharCode(t);\n }\n }, N = {}, j = {}, or = {}, q = class extends Error {\n constructor(r) {\n super(r), this.name = \"BindingError\";\n }\n }, m = (e) => {\n throw new q(e);\n };\n function gt(e, r, t = {}) {\n var n = r.name;\n if (e || m(`type \"${n}\" must have a positive integer typeid pointer`), j.hasOwnProperty(e)) {\n if (t.ignoreDuplicateRegistrations) return;\n m(`Cannot register type '${n}' twice`);\n }\n if (j[e] = r, delete or[e], N.hasOwnProperty(e)) {\n var i = N[e];\n delete N[e], i.forEach((a) => a());\n }\n }\n function R(e, r, t = {}) {\n return gt(e, r, t);\n }\n var te = (e, r, t) => {\n switch (r) {\n case 1: return t ? (n) => S[n] : (n) => E[n];\n case 2: return t ? (n) => U[n >> 1] : (n) => z[n >> 1];\n case 4: return t ? (n) => T[n >> 2] : (n) => w[n >> 2];\n case 8: return t ? (n) => V[n >> 3] : (n) => Xr[n >> 3];\n default: throw new TypeError(`invalid integer width (${r}): ${e}`);\n }\n }, yt = (e, r, t, n, i) => {\n r = C(r);\n const a = n === 0n;\n let s = (o) => o;\n if (a) {\n const o = t * 8;\n s = (u) => BigInt.asUintN(o, u), i = s(i);\n }\n R(e, {\n name: r,\n fromWireType: s,\n toWireType: (o, u) => (typeof u == \"number\" && (u = BigInt(u)), u),\n readValueFromPointer: te(r, t, !a),\n destructorFunction: null\n });\n }, mt = (e, r, t, n) => {\n r = C(r), R(e, {\n name: r,\n fromWireType: function(i) {\n return !!i;\n },\n toWireType: function(i, a) {\n return a ? t : n;\n },\n readValueFromPointer: function(i) {\n return this.fromWireType(E[i]);\n },\n destructorFunction: null\n });\n }, bt = (e) => ({\n count: e.count,\n deleteScheduled: e.deleteScheduled,\n preservePointerOnDelete: e.preservePointerOnDelete,\n ptr: e.ptr,\n ptrType: e.ptrType,\n smartPtr: e.smartPtr,\n smartPtrType: e.smartPtrType\n }), Sr = (e) => {\n function r(t) {\n return t.$$.ptrType.registeredClass.name;\n }\n m(r(e) + \" instance already deleted\");\n }, Ar = !1, ne = (e) => {}, $t = (e) => {\n e.smartPtr ? e.smartPtrType.rawDestructor(e.smartPtr) : e.ptrType.registeredClass.rawDestructor(e.ptr);\n }, ie = (e) => {\n e.count.value -= 1;\n e.count.value === 0 && $t(e);\n }, X = (e) => typeof FinalizationRegistry > \"u\" ? (X = (r) => r, e) : (Ar = new FinalizationRegistry((r) => {\n ie(r.$$);\n }), X = (r) => {\n var t = r.$$;\n if (!!t.smartPtr) {\n var i = { $$: t };\n Ar.register(r, i, r);\n }\n return r;\n }, ne = (r) => Ar.unregister(r), X(e)), ur = [], wt = () => {\n for (; ur.length;) {\n var e = ur.pop();\n e.$$.deleteScheduled = !1, e.delete();\n }\n }, ae, Tt = () => {\n let e = cr.prototype;\n Object.assign(e, {\n isAliasOf(t) {\n if (!(this instanceof cr) || !(t instanceof cr)) return !1;\n var n = this.$$.ptrType.registeredClass, i = this.$$.ptr;\n t.$$ = t.$$;\n for (var a = t.$$.ptrType.registeredClass, s = t.$$.ptr; n.baseClass;) i = n.upcast(i), n = n.baseClass;\n for (; a.baseClass;) s = a.upcast(s), a = a.baseClass;\n return n === a && i === s;\n },\n clone() {\n if (this.$$.ptr || Sr(this), this.$$.preservePointerOnDelete) return this.$$.count.value += 1, this;\n var t = X(Object.create(Object.getPrototypeOf(this), { $$: { value: bt(this.$$) } }));\n return t.$$.count.value += 1, t.$$.deleteScheduled = !1, t;\n },\n delete() {\n this.$$.ptr || Sr(this), this.$$.deleteScheduled && !this.$$.preservePointerOnDelete && m(\"Object already scheduled for deletion\"), ne(this), ie(this.$$), this.$$.preservePointerOnDelete || (this.$$.smartPtr = void 0, this.$$.ptr = void 0);\n },\n isDeleted() {\n return !this.$$.ptr;\n },\n deleteLater() {\n return this.$$.ptr || Sr(this), this.$$.deleteScheduled && !this.$$.preservePointerOnDelete && m(\"Object already scheduled for deletion\"), ur.push(this), ur.length === 1 && ae && ae(wt), this.$$.deleteScheduled = !0, this;\n }\n });\n const r = Symbol.dispose;\n r && (e[r] = e.delete);\n };\n function cr() {}\n var fr = (e, r) => Object.defineProperty(r, \"name\", { value: e }), se = {}, Er = (e, r, t) => {\n if (e[r].overloadTable === void 0) {\n var n = e[r];\n e[r] = function(...i) {\n return e[r].overloadTable.hasOwnProperty(i.length) || m(`Function '${t}' called with an invalid number of arguments (${i.length}) - expects one of (${e[r].overloadTable})!`), e[r].overloadTable[i.length].apply(this, i);\n }, e[r].overloadTable = [], e[r].overloadTable[n.argCount] = n;\n }\n }, Rr = (e, r, t) => {\n l.hasOwnProperty(e) ? ((t === void 0 || l[e].overloadTable !== void 0 && l[e].overloadTable[t] !== void 0) && m(`Cannot register public name '${e}' twice`), Er(l, e, e), l[e].overloadTable.hasOwnProperty(t) && m(`Cannot register multiple overloads of a function with the same number of arguments (${t})!`), l[e].overloadTable[t] = r) : (l[e] = r, l[e].argCount = t);\n }, Ft = 48, Ct = 57, Pt = (e) => {\n e = e.replace(/[^a-zA-Z0-9_]/g, \"$\");\n var r = e.charCodeAt(0);\n return r >= Ft && r <= Ct ? `_${e}` : e;\n };\n function kt(e, r, t, n, i, a, s, o) {\n this.name = e, this.constructor = r, this.instancePrototype = t, this.rawDestructor = n, this.baseClass = i, this.getActualType = a, this.upcast = s, this.downcast = o, this.pureVirtualFunctions = [];\n }\n var lr = (e, r, t) => {\n for (; r !== t;) r.upcast || m(`Expected null or instance of ${t.name}, got an instance of ${r.name}`), e = r.upcast(e), r = r.baseClass;\n return e;\n }, Dr = (e) => {\n if (e === null) return \"null\";\n var r = typeof e;\n return r === \"object\" || r === \"array\" || r === \"function\" ? e.toString() : \"\" + e;\n };\n function St(e, r) {\n if (r === null) return this.isReference && m(`null is not a valid ${this.name}`), 0;\n r.$$ || m(`Cannot pass \"${Dr(r)}\" as a ${this.name}`), r.$$.ptr || m(`Cannot pass deleted object as a pointer of type ${this.name}`);\n var t = r.$$.ptrType.registeredClass;\n return lr(r.$$.ptr, t, this.registeredClass);\n }\n function At(e, r) {\n var t;\n if (r === null) return this.isReference && m(`null is not a valid ${this.name}`), this.isSmartPointer ? (t = this.rawConstructor(), e !== null && e.push(this.rawDestructor, t), t) : 0;\n (!r || !r.$$) && m(`Cannot pass \"${Dr(r)}\" as a ${this.name}`), r.$$.ptr || m(`Cannot pass deleted object as a pointer of type ${this.name}`), !this.isConst && r.$$.ptrType.isConst && m(`Cannot convert argument of type ${r.$$.smartPtrType ? r.$$.smartPtrType.name : r.$$.ptrType.name} to parameter type ${this.name}`);\n var n = r.$$.ptrType.registeredClass;\n if (t = lr(r.$$.ptr, n, this.registeredClass), this.isSmartPointer) switch (r.$$.smartPtr === void 0 && m(\"Passing raw pointer to smart pointer is illegal\"), this.sharingPolicy) {\n case 0:\n r.$$.smartPtrType === this ? t = r.$$.smartPtr : m(`Cannot convert argument of type ${r.$$.smartPtrType ? r.$$.smartPtrType.name : r.$$.ptrType.name} to parameter type ${this.name}`);\n break;\n case 1:\n t = r.$$.smartPtr;\n break;\n case 2:\n if (r.$$.smartPtrType === this) t = r.$$.smartPtr;\n else {\n var i = r.clone();\n t = this.rawShare(t, k.toHandle(() => i.delete())), e !== null && e.push(this.rawDestructor, t);\n }\n break;\n default: m(\"Unsupporting sharing policy\");\n }\n return t;\n }\n function Et(e, r) {\n if (r === null) return this.isReference && m(`null is not a valid ${this.name}`), 0;\n r.$$ || m(`Cannot pass \"${Dr(r)}\" as a ${this.name}`), r.$$.ptr || m(`Cannot pass deleted object as a pointer of type ${this.name}`), r.$$.ptrType.isConst && m(`Cannot convert argument of type ${r.$$.ptrType.name} to parameter type ${this.name}`);\n var t = r.$$.ptrType.registeredClass;\n return lr(r.$$.ptr, t, this.registeredClass);\n }\n function vr(e) {\n return this.fromWireType(w[e >> 2]);\n }\n var oe = (e, r, t) => {\n if (r === t) return e;\n if (t.baseClass === void 0) return null;\n var n = oe(e, r, t.baseClass);\n return n === null ? null : t.downcast(n);\n }, Rt = {}, Dt = (e, r) => {\n for (r === void 0 && m(\"ptr should not be undefined\"); e.baseClass;) r = e.upcast(r), e = e.baseClass;\n return r;\n }, Wt = (e, r) => (r = Dt(e, r), Rt[r]), xt = class extends Error {\n constructor(r) {\n super(r), this.name = \"InternalError\";\n }\n }, _r = (e) => {\n throw new xt(e);\n }, dr = (e, r) => {\n (!r.ptrType || !r.ptr) && _r(\"makeClassHandle requires ptr and ptrType\");\n return !!r.smartPtrType !== !!r.smartPtr && _r(\"Both smartPtrType and smartPtr must be specified\"), r.count = { value: 1 }, X(Object.create(e, { $$: {\n value: r,\n writable: !0\n } }));\n };\n function Ot(e) {\n var r = this.getPointee(e);\n if (!r) return this.destructor(e), null;\n var t = Wt(this.registeredClass, r);\n if (t !== void 0) {\n if (t.$$.count.value === 0) return t.$$.ptr = r, t.$$.smartPtr = e, t.clone();\n var n = t.clone();\n return this.destructor(e), n;\n }\n function i() {\n return this.isSmartPointer ? dr(this.registeredClass.instancePrototype, {\n ptrType: this.pointeeType,\n ptr: r,\n smartPtrType: this,\n smartPtr: e\n }) : dr(this.registeredClass.instancePrototype, {\n ptrType: this,\n ptr: e\n });\n }\n var s = se[this.registeredClass.getActualType(r)];\n if (!s) return i.call(this);\n var o;\n this.isConst ? o = s.constPointerType : o = s.pointerType;\n var u = oe(r, this.registeredClass, o.registeredClass);\n return u === null ? i.call(this) : this.isSmartPointer ? dr(o.registeredClass.instancePrototype, {\n ptrType: o,\n ptr: u,\n smartPtrType: this,\n smartPtr: e\n }) : dr(o.registeredClass.instancePrototype, {\n ptrType: o,\n ptr: u\n });\n }\n var Ut = () => {\n Object.assign(pr.prototype, {\n getPointee(e) {\n return this.rawGetPointee && (e = this.rawGetPointee(e)), e;\n },\n destructor(e) {\n this.rawDestructor?.(e);\n },\n readValueFromPointer: vr,\n fromWireType: Ot\n });\n };\n function pr(e, r, t, n, i, a, s, o, u, c, f) {\n this.name = e, this.registeredClass = r, this.isReference = t, this.isConst = n, this.isSmartPointer = i, this.pointeeType = a, this.sharingPolicy = s, this.rawGetPointee = o, this.rawConstructor = u, this.rawShare = c, this.rawDestructor = f, !i && r.baseClass === void 0 ? n ? (this.toWireType = St, this.destructorFunction = null) : (this.toWireType = Et, this.destructorFunction = null) : this.toWireType = At;\n }\n var ue = (e, r, t) => {\n l.hasOwnProperty(e) || _r(\"Replacing nonexistent public symbol\"), l[e].overloadTable !== void 0 && t !== void 0 ? l[e].overloadTable[t] = r : (l[e] = r, l[e].argCount = t);\n }, ce = [], fe, b = (e) => {\n var r = ce[e];\n return r || (ce[e] = r = fe.get(e)), r;\n }, D = (e, r, t = !1) => {\n e = C(e);\n function n() {\n return b(r);\n }\n var i = n();\n return typeof i != \"function\" && m(`unknown function pointer with signature ${e}: ${r}`), i;\n };\n class Vt extends Error {}\n var le = (e) => {\n var r = Ee(e), t = C(r);\n return O(r), t;\n }, I = (e, r) => {\n var t = [], n = {};\n function i(a) {\n if (!n[a] && !j[a]) {\n if (or[a]) {\n or[a].forEach(i);\n return;\n }\n t.push(a), n[a] = !0;\n }\n }\n throw r.forEach(i), new Vt(`${e}: ` + t.map(le).join([\", \"]));\n }, W = (e, r, t) => {\n e.forEach((o) => or[o] = r);\n function n(o) {\n var u = t(o);\n u.length !== e.length && _r(\"Mismatched type converter count\");\n for (var c = 0; c < e.length; ++c) R(e[c], u[c]);\n }\n var i = new Array(r.length), a = [], s = 0;\n r.forEach((o, u) => {\n j.hasOwnProperty(o) ? i[u] = j[o] : (a.push(o), N.hasOwnProperty(o) || (N[o] = []), N[o].push(() => {\n i[u] = j[o], ++s, s === a.length && n(i);\n }));\n }), a.length === 0 && n(i);\n }, jt = (e, r, t, n, i, a, s, o, u, c, f, _, d) => {\n f = C(f), a = D(i, a), o &&= D(s, o), c &&= D(u, c), d = D(_, d);\n var p = Pt(f);\n Rr(p, function() {\n I(`Cannot construct ${f} due to unbound types`, [n]);\n }), W([\n e,\n r,\n t\n ], n ? [n] : [], (v) => {\n v = v[0];\n var $, P;\n n ? ($ = v.registeredClass, P = $.instancePrototype) : P = cr.prototype;\n var F = fr(f, function(...Mr) {\n if (Object.getPrototypeOf(this) !== Z) throw new q(`Use 'new' to construct ${f}`);\n if (A.constructor_body === void 0) throw new q(`${f} has no accessible constructor`);\n var Le = A.constructor_body[Mr.length];\n if (Le === void 0) throw new q(`Tried to invoke ctor of ${f} with invalid number of parameters (${Mr.length}) - expected (${Object.keys(A.constructor_body).toString()}) parameters instead!`);\n return Le.apply(this, Mr);\n }), Z = Object.create(P, { constructor: { value: F } });\n F.prototype = Z;\n var A = new kt(f, F, Z, d, $, a, o, c);\n A.baseClass && (A.baseClass.__derivedClasses ??= [], A.baseClass.__derivedClasses.push(A));\n var Gi = new pr(f, A, !0, !1, !1), Me = new pr(f + \"*\", A, !1, !1, !1), Be = new pr(f + \" const*\", A, !1, !0, !1);\n return se[e] = {\n pointerType: Me,\n constPointerType: Be\n }, ue(p, F), [\n Gi,\n Me,\n Be\n ];\n });\n }, Wr = (e) => {\n for (; e.length;) {\n var r = e.pop();\n e.pop()(r);\n }\n };\n function ve(e) {\n for (var r = 1; r < e.length; ++r) if (e[r] !== null && e[r].destructorFunction === void 0) return !0;\n return !1;\n }\n function It(e, r, t, n) {\n var i = ve(e), a = e.length - 2, s = [], o = [\"fn\"];\n r && o.push(\"thisWired\");\n for (var u = 0; u < a; ++u) s.push(`arg${u}`), o.push(`arg${u}Wired`);\n s = s.join(\",\"), o = o.join(\",\");\n var c = `return function (${s}) {\n`;\n i && (c += `var destructors = [];\n`);\n var f = i ? \"destructors\" : \"null\", _ = [\n \"humanName\",\n \"throwBindingError\",\n \"invoker\",\n \"fn\",\n \"runDestructors\",\n \"fromRetWire\",\n \"toClassParamWire\"\n ];\n r && (c += `var thisWired = toClassParamWire(${f}, this);\n`);\n for (var u = 0; u < a; ++u) {\n var d = `toArg${u}Wire`;\n c += `var arg${u}Wired = ${d}(${f}, arg${u});\n`, _.push(d);\n }\n c += (t || n ? \"var rv = \" : \"\") + `invoker(${o});\n`;\n if (i) c += `runDestructors(destructors);\n`;\n else for (var u = r ? 1 : 2; u < e.length; ++u) {\n var v = u === 1 ? \"thisWired\" : \"arg\" + (u - 2) + \"Wired\";\n e[u].destructorFunction !== null && (c += `${v}_dtor(${v});\n`, _.push(`${v}_dtor`));\n }\n return t && (c += `var ret = fromRetWire(rv);\nreturn ret;\n`), c += `}\n`, new Function(_, c);\n }\n function hr(e, r, t, n, i, a) {\n var s = r.length;\n s < 2 && m(\"argTypes array size mismatch! Must at least get return value and 'this' types!\");\n for (var o = r[1] !== null && t !== null, u = ve(r), c = !r[0].isVoid, f = s - 2, _ = r[0], d = r[1], p = [\n e,\n m,\n n,\n i,\n Wr,\n _.fromWireType.bind(_),\n d?.toWireType.bind(d)\n ], v = 2; v < s; ++v) {\n var $ = r[v];\n p.push($.toWireType.bind($));\n }\n if (!u) for (var v = o ? 1 : 2; v < r.length; ++v) r[v].destructorFunction !== null && p.push(r[v].destructorFunction);\n return fr(e, It(r, o, c, a)(...p));\n }\n var gr = (e, r) => {\n for (var t = [], n = 0; n < e; n++) t.push(w[r + n * 4 >> 2]);\n return t;\n }, xr = (e) => {\n e = e.trim();\n const r = e.indexOf(\"(\");\n return r === -1 ? e : e.slice(0, r);\n }, Ht = (e, r, t, n, i, a, s, o, u) => {\n var c = gr(t, n);\n r = C(r), r = xr(r), a = D(i, a, o), W([], [e], (f) => {\n f = f[0];\n var _ = `${f.name}.${r}`;\n function d() {\n I(`Cannot call ${_} due to unbound types`, c);\n }\n r.startsWith(\"@@\") && (r = Symbol[r.substring(2)]);\n var p = f.registeredClass.constructor;\n return p[r] === void 0 ? (d.argCount = t - 1, p[r] = d) : (Er(p, r, _), p[r].overloadTable[t - 1] = d), W([], c, (v) => {\n var P = hr(_, [v[0], null].concat(v.slice(1)), null, a, s, o);\n if (p[r].overloadTable === void 0 ? (P.argCount = t - 1, p[r] = P) : p[r].overloadTable[t - 1] = P, f.registeredClass.__derivedClasses) for (const F of f.registeredClass.__derivedClasses) F.constructor.hasOwnProperty(r) || (F.constructor[r] = P);\n return [];\n }), [];\n });\n }, Mt = (e, r, t, n, i, a) => {\n var s = gr(r, t);\n i = D(n, i);\n W([], [e], (c) => {\n c = c[0];\n var f = `constructor ${c.name}`;\n if (c.registeredClass.constructor_body === void 0 && (c.registeredClass.constructor_body = []), c.registeredClass.constructor_body[r - 1] !== void 0) throw new q(`Cannot register multiple constructors with identical number of parameters (${r - 1}) for class '${c.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);\n return c.registeredClass.constructor_body[r - 1] = () => {\n I(`Cannot construct ${c.name} due to unbound types`, s);\n }, W([], s, (_) => (_.splice(1, 0, null), c.registeredClass.constructor_body[r - 1] = hr(f, _, null, i, a), [])), [];\n });\n }, Bt = (e, r, t, n, i, a, s, o, u, c) => {\n var f = gr(t, n);\n r = C(r), r = xr(r), a = D(i, a, u), W([], [e], (_) => {\n _ = _[0];\n var d = `${_.name}.${r}`;\n r.startsWith(\"@@\") && (r = Symbol[r.substring(2)]), o && _.registeredClass.pureVirtualFunctions.push(r);\n function p() {\n I(`Cannot call ${d} due to unbound types`, f);\n }\n var v = _.registeredClass.instancePrototype, $ = v[r];\n return $ === void 0 || $.overloadTable === void 0 && $.className !== _.name && $.argCount === t - 2 ? (p.argCount = t - 2, p.className = _.name, v[r] = p) : (Er(v, r, d), v[r].overloadTable[t - 2] = p), W([], f, (P) => {\n var F = hr(d, P, _, a, s, u);\n return v[r].overloadTable === void 0 ? (F.argCount = t - 2, v[r] = F) : v[r].overloadTable[t - 2] = F, [];\n }), [];\n });\n }, _e = (e, r, t) => (e instanceof Object || m(`${t} with invalid \"this\": ${e}`), e instanceof r.registeredClass.constructor || m(`${t} incompatible with \"this\" of type ${e.constructor.name}`), e.$$.ptr || m(`cannot call emscripten binding method ${t} on deleted object`), lr(e.$$.ptr, e.$$.ptrType.registeredClass, r.registeredClass)), Lt = (e, r, t, n, i, a, s, o, u, c) => {\n r = C(r), i = D(n, i), W([], [e], (f) => {\n f = f[0];\n var _ = `${f.name}.${r}`, d = {\n get() {\n I(`Cannot access ${_} due to unbound types`, [t, s]);\n },\n enumerable: !0,\n configurable: !0\n };\n return u ? d.set = () => I(`Cannot access ${_} due to unbound types`, [t, s]) : d.set = (p) => m(_ + \" is a read-only property\"), Object.defineProperty(f.registeredClass.instancePrototype, r, d), W([], u ? [t, s] : [t], (p) => {\n var v = p[0], $ = {\n get() {\n var F = _e(this, f, _ + \" getter\");\n return v.fromWireType(i(a, F));\n },\n enumerable: !0\n };\n if (u) {\n u = D(o, u);\n var P = p[1];\n $.set = function(F) {\n var Z = _e(this, f, _ + \" setter\"), A = [];\n u(c, Z, P.toWireType(A, F)), Wr(A);\n };\n }\n return Object.defineProperty(f.registeredClass.instancePrototype, r, $), [];\n }), [];\n });\n }, de = [], H = [\n 0,\n 1,\n ,\n 1,\n null,\n 1,\n !0,\n 1,\n !1,\n 1\n ], Or = (e) => {\n e > 9 && --H[e + 1] === 0 && (H[e] = void 0, de.push(e));\n }, k = {\n toValue: (e) => (e || m(`Cannot use deleted val. handle = ${e}`), H[e]),\n toHandle: (e) => {\n switch (e) {\n case void 0: return 2;\n case null: return 4;\n case !0: return 6;\n case !1: return 8;\n default: {\n const r = de.pop() || H.length;\n return H[r] = e, H[r + 1] = 1, r;\n }\n }\n }\n }, zt = {\n name: \"emscripten::val\",\n fromWireType: (e) => {\n var r = k.toValue(e);\n return Or(e), r;\n },\n toWireType: (e, r) => k.toHandle(r),\n readValueFromPointer: vr,\n destructorFunction: null\n }, Yt = (e) => R(e, zt), Nt = (e, r, t) => {\n switch (r) {\n case 1: return t ? function(n) {\n return this.fromWireType(S[n]);\n } : function(n) {\n return this.fromWireType(E[n]);\n };\n case 2: return t ? function(n) {\n return this.fromWireType(U[n >> 1]);\n } : function(n) {\n return this.fromWireType(z[n >> 1]);\n };\n case 4: return t ? function(n) {\n return this.fromWireType(T[n >> 2]);\n } : function(n) {\n return this.fromWireType(w[n >> 2]);\n };\n default: throw new TypeError(`invalid integer width (${r}): ${e}`);\n }\n }, Gt = (e, r, t, n) => {\n r = C(r);\n function i() {}\n i.values = {}, R(e, {\n name: r,\n constructor: i,\n fromWireType: function(a) {\n return this.constructor.values[a];\n },\n toWireType: (a, s) => s.value,\n readValueFromPointer: Nt(r, t, n),\n destructorFunction: null\n }), Rr(r, i);\n }, pe = (e, r) => {\n var t = j[e];\n return t === void 0 && m(`${r} has unknown type ${le(e)}`), t;\n }, qt = (e, r, t) => {\n var n = pe(e, \"enum\");\n r = C(r);\n var i = n.constructor, a = Object.create(n.constructor.prototype, {\n value: { value: t },\n constructor: { value: fr(`${n.name}_${r}`, function() {}) }\n });\n i.values[t] = a, i[r] = a;\n }, Xt = (e, r) => {\n switch (r) {\n case 4: return function(t) {\n return this.fromWireType(tr[t >> 2]);\n };\n case 8: return function(t) {\n return this.fromWireType(nr[t >> 3]);\n };\n default: throw new TypeError(`invalid float width (${r}): ${e}`);\n }\n }, Jt = (e, r, t) => {\n r = C(r), R(e, {\n name: r,\n fromWireType: (n) => n,\n toWireType: (n, i) => i,\n readValueFromPointer: Xt(r, t),\n destructorFunction: null\n });\n }, Kt = (e, r, t, n, i, a, s, o) => {\n var u = gr(r, t);\n e = C(e), e = xr(e), i = D(n, i, s), Rr(e, function() {\n I(`Cannot call ${e} due to unbound types`, u);\n }, r - 1), W([], u, (c) => {\n var f = [c[0], null].concat(c.slice(1));\n return ue(e, hr(e, f, null, i, a, s), r - 1), [];\n });\n }, Zt = (e, r, t, n, i) => {\n r = C(r);\n const a = n === 0;\n let s = (u) => u;\n if (a) {\n var o = 32 - 8 * t;\n s = (u) => u << o >>> o, i = s(i);\n }\n R(e, {\n name: r,\n fromWireType: s,\n toWireType: (u, c) => c,\n readValueFromPointer: te(r, t, n !== 0),\n destructorFunction: null\n });\n }, Qt = (e, r, t) => {\n var i = [\n Int8Array,\n Uint8Array,\n Int16Array,\n Uint16Array,\n Int32Array,\n Uint32Array,\n Float32Array,\n Float64Array,\n BigInt64Array,\n BigUint64Array\n ][r];\n function a(s) {\n var o = w[s >> 2], u = w[s + 4 >> 2];\n return new i(S.buffer, u, o);\n }\n t = C(t), R(e, {\n name: t,\n fromWireType: a,\n readValueFromPointer: a\n }, { ignoreDuplicateRegistrations: !0 });\n }, rn = (e, r, t, n) => {\n if (!(n > 0)) return 0;\n for (var i = t, a = t + n - 1, s = 0; s < e.length; ++s) {\n var o = e.codePointAt(s);\n if (o <= 127) {\n if (t >= a) break;\n r[t++] = o;\n } else if (o <= 2047) {\n if (t + 1 >= a) break;\n r[t++] = 192 | o >> 6, r[t++] = 128 | o & 63;\n } else if (o <= 65535) {\n if (t + 2 >= a) break;\n r[t++] = 224 | o >> 12, r[t++] = 128 | o >> 6 & 63, r[t++] = 128 | o & 63;\n } else {\n if (t + 3 >= a) break;\n r[t++] = 240 | o >> 18, r[t++] = 128 | o >> 12 & 63, r[t++] = 128 | o >> 6 & 63, r[t++] = 128 | o & 63, s++;\n }\n }\n return r[t] = 0, t - i;\n }, M = (e, r, t) => rn(e, E, r, t), Ur = (e) => {\n for (var r = 0, t = 0; t < e.length; ++t) {\n var n = e.charCodeAt(t);\n n <= 127 ? r++ : n <= 2047 ? r += 2 : n >= 55296 && n <= 57343 ? (r += 4, ++t) : r += 3;\n }\n return r;\n }, he = typeof TextDecoder < \"u\" ? new TextDecoder() : void 0, ge = (e, r, t, n) => {\n var i = r + t;\n if (n) return i;\n for (; e[r] && !(r >= i);) ++r;\n return r;\n }, ye = (e, r = 0, t, n) => {\n var i = ge(e, r, t, n);\n if (i - r > 16 && e.buffer && he) return he.decode(e.subarray(r, i));\n for (var a = \"\"; r < i;) {\n var s = e[r++];\n if (!(s & 128)) {\n a += String.fromCharCode(s);\n continue;\n }\n var o = e[r++] & 63;\n if ((s & 224) == 192) {\n a += String.fromCharCode((s & 31) << 6 | o);\n continue;\n }\n var u = e[r++] & 63;\n if ((s & 240) == 224 ? s = (s & 15) << 12 | o << 6 | u : s = (s & 7) << 18 | o << 12 | u << 6 | e[r++] & 63, s < 65536) a += String.fromCharCode(s);\n else {\n var c = s - 65536;\n a += String.fromCharCode(55296 | c >> 10, 56320 | c & 1023);\n }\n }\n return a;\n }, yr = (e, r, t) => e ? ye(E, e, r, t) : \"\", en = (e, r) => {\n r = C(r);\n var t = !0;\n R(e, {\n name: r,\n fromWireType(n) {\n var i = w[n >> 2], a = n + 4, s;\n if (t) s = yr(a, i, !0);\n else {\n s = \"\";\n for (var o = 0; o < i; ++o) s += String.fromCharCode(E[a + o]);\n }\n return O(n), s;\n },\n toWireType(n, i) {\n i instanceof ArrayBuffer && (i = new Uint8Array(i));\n var a, s = typeof i == \"string\";\n s || ArrayBuffer.isView(i) && i.BYTES_PER_ELEMENT == 1 || m(\"Cannot pass non-string to std::string\"), t && s ? a = Ur(i) : a = i.length;\n var o = Hr(4 + a + 1), u = o + 4;\n if (w[o >> 2] = a, s) if (t) M(i, u, a + 1);\n else for (var c = 0; c < a; ++c) {\n var f = i.charCodeAt(c);\n f > 255 && (O(o), m(\"String has UTF-16 code units that do not fit in 8 bits\")), E[u + c] = f;\n }\n else E.set(i, u);\n return n !== null && n.push(O, o), o;\n },\n readValueFromPointer: vr,\n destructorFunction(n) {\n O(n);\n }\n });\n }, me = typeof TextDecoder < \"u\" ? new TextDecoder(\"utf-16le\") : void 0, tn = (e, r, t) => {\n var n = e >> 1, i = ge(z, n, r / 2, t);\n if (i - n > 16 && me) return me.decode(z.subarray(n, i));\n for (var a = \"\", s = n; s < i; ++s) {\n var o = z[s];\n a += String.fromCharCode(o);\n }\n return a;\n }, nn = (e, r, t) => {\n if (t ??= 2147483647, t < 2) return 0;\n t -= 2;\n for (var n = r, i = t < e.length * 2 ? t / 2 : e.length, a = 0; a < i; ++a) {\n var s = e.charCodeAt(a);\n U[r >> 1] = s, r += 2;\n }\n return U[r >> 1] = 0, r - n;\n }, an = (e) => e.length * 2, sn = (e, r, t) => {\n for (var n = \"\", i = e >> 2, a = 0; !(a >= r / 4); a++) {\n var s = w[i + a];\n if (!s && !t) break;\n n += String.fromCodePoint(s);\n }\n return n;\n }, on = (e, r, t) => {\n if (t ??= 2147483647, t < 4) return 0;\n for (var n = r, i = n + t - 4, a = 0; a < e.length; ++a) {\n var s = e.codePointAt(a);\n if (s > 65535 && a++, T[r >> 2] = s, r += 4, r + 4 > i) break;\n }\n return T[r >> 2] = 0, r - n;\n }, un = (e) => {\n for (var r = 0, t = 0; t < e.length; ++t) e.codePointAt(t) > 65535 && t++, r += 4;\n return r;\n }, cn = (e, r, t) => {\n t = C(t);\n var n, i, a;\n r === 2 ? (n = tn, i = nn, a = an) : (n = sn, i = on, a = un), R(e, {\n name: t,\n fromWireType: (s) => {\n var o = w[s >> 2], u = n(s + 4, o * r, !0);\n return O(s), u;\n },\n toWireType: (s, o) => {\n typeof o != \"string\" && m(`Cannot pass non-string to C++ string type ${t}`);\n var u = a(o), c = Hr(4 + u + r);\n return w[c >> 2] = u / r, i(o, c + 4, u + r), s !== null && s.push(O, c), c;\n },\n readValueFromPointer: vr,\n destructorFunction(s) {\n O(s);\n }\n });\n }, fn = (e, r) => {\n r = C(r), R(e, {\n isVoid: !0,\n name: r,\n fromWireType: () => {},\n toWireType: (t, n) => {}\n });\n }, be = 0, ln = () => {\n Cr = !1, be = 0;\n }, Vr = [], vn = (e) => {\n var r = Vr.length;\n return Vr.push(e), r;\n }, _n = (e, r) => {\n for (var t = new Array(e), n = 0; n < e; ++n) t[n] = pe(w[r + n * 4 >> 2], `parameter ${n}`);\n return t;\n }, dn = (e, r, t) => {\n var n = [], i = e(n, t);\n return n.length && (w[r >> 2] = k.toHandle(n)), i;\n }, pn = {}, $e = (e) => {\n var r = pn[e];\n return r === void 0 ? C(e) : r;\n }, hn = (e, r, t) => {\n var n = 8, [i, ...a] = _n(e, r), s = i.toWireType.bind(i), o = a.map((p) => p.readValueFromPointer.bind(p));\n e--;\n var u = { toValue: k.toValue }, c = o.map((p, v) => {\n var $ = `argFromPtr${v}`;\n return u[$] = p, `${$}(args${v ? \"+\" + v * n : \"\"})`;\n }), f;\n switch (t) {\n case 0:\n f = \"toValue(handle)\";\n break;\n case 2:\n f = \"new (toValue(handle))\";\n break;\n case 3:\n f = \"\";\n break;\n case 1: u.getStringOrSymbol = $e, f = \"toValue(handle)[getStringOrSymbol(methodName)]\";\n }\n f += `(${c})`, i.isVoid || (u.toReturnWire = s, u.emval_returnValue = dn, f = `return emval_returnValue(toReturnWire, destructorsRef, ${f})`), f = `return function (handle, methodName, destructorsRef, args) {\n ${f}\n }`;\n var _ = new Function(Object.keys(u), f)(...Object.values(u));\n return vn(fr(`methodCaller<(${a.map((p) => p.name)}) => ${i.name}>`, _));\n }, gn = (e, r) => (e = k.toValue(e), r = k.toValue(r), k.toHandle(e[r])), yn = (e) => {\n e > 9 && (H[e + 1] += 1);\n }, mn = (e, r, t, n, i) => Vr[e](r, t, n, i), bn = () => k.toHandle([]), $n = (e) => k.toHandle($e(e)), wn = () => k.toHandle({}), Tn = (e) => {\n Wr(k.toValue(e)), Or(e);\n }, Fn = (e, r, t) => {\n e = k.toValue(e), r = k.toValue(r), t = k.toValue(t), e[r] = t;\n }, Cn = 9007199254740992, Pn = -9007199254740992, mr = (e) => e < Pn || e > Cn ? NaN : Number(e);\n function kn(e, r) {\n e = mr(e);\n var t = /* @__PURE__ */ new Date(e * 1e3);\n T[r >> 2] = t.getUTCSeconds(), T[r + 4 >> 2] = t.getUTCMinutes(), T[r + 8 >> 2] = t.getUTCHours(), T[r + 12 >> 2] = t.getUTCDate(), T[r + 16 >> 2] = t.getUTCMonth(), T[r + 20 >> 2] = t.getUTCFullYear() - 1900, T[r + 24 >> 2] = t.getUTCDay();\n var n = Date.UTC(t.getUTCFullYear(), 0, 1, 0, 0, 0, 0), i = (t.getTime() - n) / 864e5 | 0;\n T[r + 28 >> 2] = i;\n }\n var Sn = (e) => e % 4 === 0 && (e % 100 !== 0 || e % 400 === 0), An = [\n 0,\n 31,\n 60,\n 91,\n 121,\n 152,\n 182,\n 213,\n 244,\n 274,\n 305,\n 335\n ], En = [\n 0,\n 31,\n 59,\n 90,\n 120,\n 151,\n 181,\n 212,\n 243,\n 273,\n 304,\n 334\n ], Rn = (e) => {\n return (Sn(e.getFullYear()) ? An : En)[e.getMonth()] + e.getDate() - 1;\n };\n function Dn(e, r) {\n e = mr(e);\n var t = /* @__PURE__ */ new Date(e * 1e3);\n T[r >> 2] = t.getSeconds(), T[r + 4 >> 2] = t.getMinutes(), T[r + 8 >> 2] = t.getHours(), T[r + 12 >> 2] = t.getDate(), T[r + 16 >> 2] = t.getMonth(), T[r + 20 >> 2] = t.getFullYear() - 1900, T[r + 24 >> 2] = t.getDay();\n var n = Rn(t) | 0;\n T[r + 28 >> 2] = n, T[r + 36 >> 2] = -(t.getTimezoneOffset() * 60);\n var i = new Date(t.getFullYear(), 0, 1), a = new Date(t.getFullYear(), 6, 1).getTimezoneOffset(), s = i.getTimezoneOffset(), o = (a != s && t.getTimezoneOffset() == Math.min(s, a)) | 0;\n T[r + 32 >> 2] = o;\n }\n var J = {}, we = (e) => {\n if (e instanceof Zr || e == \"unwind\") return rr;\n zr(1, e);\n }, Te = () => Cr || be > 0, Fe = (e) => {\n rr = e, Te() || (l.onExit?.(e), Q = !0), zr(e, new Zr(e));\n }, Wn = (e, r) => {\n rr = e, Fe(e);\n }, xn = Wn, On = () => {\n if (!Te()) try {\n xn(rr);\n } catch (e) {\n we(e);\n }\n }, Un = (e) => {\n if (!Q) try {\n e(), On();\n } catch (r) {\n we(r);\n }\n }, Ce = () => performance.now(), Vn = (e, r) => {\n if (J[e] && (clearTimeout(J[e].id), delete J[e]), !r) return 0;\n return J[e] = {\n id: setTimeout(() => {\n delete J[e], Un(() => Re(e, Ce()));\n }, r),\n timeout_ms: r\n }, 0;\n }, jn = (e, r, t, n) => {\n var i = (/* @__PURE__ */ new Date()).getFullYear(), a = new Date(i, 0, 1), s = new Date(i, 6, 1), o = a.getTimezoneOffset(), u = s.getTimezoneOffset(), c = Math.max(o, u);\n w[e >> 2] = c * 60, T[r >> 2] = +(o != u);\n var f = (p) => {\n var v = p >= 0 ? \"-\" : \"+\", $ = Math.abs(p);\n return `UTC${v}${String(Math.floor($ / 60)).padStart(2, \"0\")}${String($ % 60).padStart(2, \"0\")}`;\n }, _ = f(o), d = f(u);\n u < o ? (M(_, t, 17), M(d, n, 17)) : (M(_, n, 17), M(d, t, 17));\n }, In = () => Date.now(), Hn = 1, Mn = (e) => e >= 0 && e <= 3;\n function Bn(e, r, t) {\n if (r = mr(r), !Mn(e)) return 28;\n var n;\n if (e === 0) n = In();\n else if (Hn) n = Ce();\n else return 52;\n var i = Math.round(n * 1e3 * 1e3);\n return V[t >> 3] = BigInt(i), 0;\n }\n var Pe = () => 2147483648, Ln = () => Pe(), zn = (e, r) => Math.ceil(e / r) * r, Yn = (e) => {\n var t = (e - er.buffer.byteLength + 65535) / 65536 | 0;\n try {\n return er.grow(t), Kr(), 1;\n } catch {}\n }, Nn = (e) => {\n var r = E.length;\n e >>>= 0;\n var t = Pe();\n if (e > t) return !1;\n for (var n = 1; n <= 4; n *= 2) {\n var i = r * (1 + .2 / n);\n i = Math.min(i, e + 100663296);\n if (Yn(Math.min(t, zn(Math.max(e, i), 65536)))) return !0;\n }\n return !1;\n }, br = {}, Gn = () => Lr || \"./this.program\", K = () => {\n if (!K.strings) {\n var r = {\n USER: \"web_user\",\n LOGNAME: \"web_user\",\n PATH: \"/\",\n PWD: \"/\",\n HOME: \"/home/web_user\",\n LANG: (typeof navigator == \"object\" && navigator.language || \"C\").replace(\"-\", \"_\") + \".UTF-8\",\n _: Gn()\n };\n for (var t in br) br[t] === void 0 ? delete r[t] : r[t] = br[t];\n var n = [];\n for (var t in r) n.push(`${t}=${r[t]}`);\n K.strings = n;\n }\n return K.strings;\n }, qn = (e, r) => {\n var t = 0, n = 0;\n for (var i of K()) {\n var a = r + t;\n w[e + n >> 2] = a, t += M(i, a, 1 / 0) + 1, n += 4;\n }\n return 0;\n }, Xn = (e, r) => {\n var t = K();\n w[e >> 2] = t.length;\n var n = 0;\n for (var i of t) n += Ur(i) + 1;\n return w[r >> 2] = n, 0;\n }, Jn = (e) => 52, Kn = (e, r) => {\n var t = 0, n = 0, i = 0;\n var a = 2;\n e == 0 ? t = 2 : (e == 1 || e == 2) && (t = 64), i = 1;\n return S[r] = a, U[r + 2 >> 1] = i, V[r + 8 >> 3] = BigInt(t), V[r + 16 >> 3] = BigInt(n), 0;\n };\n function Zn(e, r, t, n) {\n return r = mr(r), 70;\n }\n var jr = [\n null,\n [],\n []\n ], Ir = (e, r) => {\n var t = jr[e];\n r === 0 || r === 10 ? ((e === 1 ? Nr : L)(ye(t)), t.length = 0) : t.push(r);\n }, Qn = (e, r, t, n) => {\n for (var i = 0, a = 0; a < t; a++) {\n var s = w[r >> 2], o = w[r + 4 >> 2];\n r += 8;\n for (var u = 0; u < o; u++) Ir(e, E[s + u]);\n i += o;\n }\n return w[n >> 2] = i, 0;\n }, ri = (e) => e, ke = (e) => {\n return l[\"_\" + e];\n }, ei = (e, r) => {\n S.set(e, r);\n }, Se = (e) => xe(e), ti = (e) => {\n var r = Ur(e) + 1, t = Se(r);\n return M(e, t, r), t;\n }, Ae = (e, r, t, n, i) => {\n var a = {\n string: (v) => {\n var $ = 0;\n return v != null && v !== 0 && ($ = ti(v)), $;\n },\n array: (v) => {\n var $ = Se(v.length);\n return ei(v, $), $;\n }\n };\n function s(v) {\n return r === \"string\" ? yr(v) : r === \"boolean\" ? !!v : v;\n }\n var o = ke(e), u = [], c = 0;\n if (n) for (var f = 0; f < n.length; f++) {\n var _ = a[t[f]];\n _ ? (c === 0 && (c = y()), u[f] = _(n[f])) : u[f] = n[f];\n }\n var d = o(...u);\n function p(v) {\n return c !== 0 && g(c), s(v);\n }\n return d = p(d), d;\n }, ni = (e, r, t, n) => {\n var i = !t || t.every((s) => s === \"number\" || s === \"boolean\");\n return r !== \"string\" && i && !n ? ke(e) : (...s) => Ae(e, r, t, s, n);\n };\n if (Tt(), Ut(), l.noExitRuntime && (Cr = l.noExitRuntime), l.print && (Nr = l.print), l.printErr && (L = l.printErr), l.wasmBinary && (G = l.wasmBinary), l.arguments && l.arguments, l.thisProgram && (Lr = l.thisProgram), l.preInit) for (typeof l.preInit == \"function\" && (l.preInit = [l.preInit]); l.preInit.length > 0;) l.preInit.shift()();\n l.ENV = br, l.ccall = Ae, l.cwrap = ni;\n var Ee, Hr, O, Re, h, De, We, xe, Oe, Ue, Ve, je, Ie;\n function fi(e) {\n Ee = e.__getTypeName, l._malloc = Hr = e.malloc, l._parseDropFile = e.parseDropFile, l._getAttributeFromDropFile = e.getAttributeFromDropFile, l._takeAttributeFromDropFile = e.takeAttributeFromDropFile, l._flattenDropFile = e.flattenDropFile, l._destroyDropFileHandle = e.destroyDropFileHandle, e.__cxa_free_exception, l._free = O = e.free, Re = e._emscripten_timeout, h = e.setThrew, De = e._emscripten_tempret_set, We = e._emscripten_stack_restore, xe = e._emscripten_stack_alloc, Oe = e.emscripten_stack_get_current, Ue = e.__cxa_decrement_exception_refcount, Ve = e.__cxa_increment_exception_refcount, je = e.__cxa_can_catch, Ie = e.__cxa_get_exception_ptr;\n }\n var He = {\n __cxa_begin_catch: ot,\n __cxa_end_catch: ut,\n __cxa_find_matching_catch_2: ct,\n __cxa_find_matching_catch_3: ft,\n __cxa_find_matching_catch_4: lt,\n __cxa_rethrow: vt,\n __cxa_throw: _t,\n __cxa_uncaught_exceptions: dt,\n __resumeException: pt,\n _abort_js: ht,\n _embind_register_bigint: yt,\n _embind_register_bool: mt,\n _embind_register_class: jt,\n _embind_register_class_class_function: Ht,\n _embind_register_class_constructor: Mt,\n _embind_register_class_function: Bt,\n _embind_register_class_property: Lt,\n _embind_register_emval: Yt,\n _embind_register_enum: Gt,\n _embind_register_enum_value: qt,\n _embind_register_float: Jt,\n _embind_register_function: Kt,\n _embind_register_integer: Zt,\n _embind_register_memory_view: Qt,\n _embind_register_std_string: en,\n _embind_register_std_wstring: cn,\n _embind_register_void: fn,\n _emscripten_runtime_keepalive_clear: ln,\n _emval_create_invoker: hn,\n _emval_decref: Or,\n _emval_get_property: gn,\n _emval_incref: yn,\n _emval_invoke: mn,\n _emval_new_array: bn,\n _emval_new_cstring: $n,\n _emval_new_object: wn,\n _emval_run_destructors: Tn,\n _emval_set_property: Fn,\n _gmtime_js: kn,\n _localtime_js: Dn,\n _setitimer_js: Vn,\n _tzset_js: jn,\n clock_time_get: Bn,\n emscripten_get_heap_max: Ln,\n emscripten_resize_heap: Nn,\n environ_get: qn,\n environ_sizes_get: Xn,\n fd_close: Jn,\n fd_fdstat_get: Kn,\n fd_seek: Zn,\n fd_write: Qn,\n invoke_diii: ji,\n invoke_diiiii: yi,\n invoke_fi: Si,\n invoke_fiii: Vi,\n invoke_i: Ii,\n invoke_ii: vi,\n invoke_iii: hi,\n invoke_iiii: gi,\n invoke_iiiid: Mi,\n invoke_iiiii: ki,\n invoke_iiiiid: xi,\n invoke_iiiiii: wi,\n invoke_iiiiiii: Ai,\n invoke_iiiiiiii: Oi,\n invoke_iiiiiiiiii: Fi,\n invoke_iiiiiiiiiii: mi,\n invoke_iiiiiiiiiiii: bi,\n invoke_iiiiijj: Bi,\n invoke_iiiijj: Li,\n invoke_iiij: Ri,\n invoke_j: Di,\n invoke_jiiii: Ui,\n invoke_v: $i,\n invoke_vi: _i,\n invoke_vii: pi,\n invoke_viii: di,\n invoke_viiii: li,\n invoke_viiiii: Ci,\n invoke_viiiiii: Ti,\n invoke_viiiiiii: Hi,\n invoke_viiiiiiii: Ei,\n invoke_viiiiiiiiii: zi,\n invoke_viiiiiiiiiiiiiii: Yi,\n invoke_viiji: Wi,\n invoke_viijii: Pi,\n llvm_eh_typeid_for: ri,\n proc_exit: Fe\n };\n function li(e, r, t, n, i) {\n var a = y();\n try {\n b(e)(r, t, n, i);\n } catch (s) {\n if (g(a), s !== s + 0) throw s;\n h(1, 0);\n }\n }\n function vi(e, r) {\n var t = y();\n try {\n return b(e)(r);\n } catch (n) {\n if (g(t), n !== n + 0) throw n;\n h(1, 0);\n }\n }\n function _i(e, r) {\n var t = y();\n try {\n b(e)(r);\n } catch (n) {\n if (g(t), n !== n + 0) throw n;\n h(1, 0);\n }\n }\n function di(e, r, t, n) {\n var i = y();\n try {\n b(e)(r, t, n);\n } catch (a) {\n if (g(i), a !== a + 0) throw a;\n h(1, 0);\n }\n }\n function pi(e, r, t) {\n var n = y();\n try {\n b(e)(r, t);\n } catch (i) {\n if (g(n), i !== i + 0) throw i;\n h(1, 0);\n }\n }\n function hi(e, r, t) {\n var n = y();\n try {\n return b(e)(r, t);\n } catch (i) {\n if (g(n), i !== i + 0) throw i;\n h(1, 0);\n }\n }\n function gi(e, r, t, n) {\n var i = y();\n try {\n return b(e)(r, t, n);\n } catch (a) {\n if (g(i), a !== a + 0) throw a;\n h(1, 0);\n }\n }\n function yi(e, r, t, n, i, a) {\n var s = y();\n try {\n return b(e)(r, t, n, i, a);\n } catch (o) {\n if (g(s), o !== o + 0) throw o;\n h(1, 0);\n }\n }\n function mi(e, r, t, n, i, a, s, o, u, c, f) {\n var _ = y();\n try {\n return b(e)(r, t, n, i, a, s, o, u, c, f);\n } catch (d) {\n if (g(_), d !== d + 0) throw d;\n h(1, 0);\n }\n }\n function bi(e, r, t, n, i, a, s, o, u, c, f, _) {\n var d = y();\n try {\n return b(e)(r, t, n, i, a, s, o, u, c, f, _);\n } catch (p) {\n if (g(d), p !== p + 0) throw p;\n h(1, 0);\n }\n }\n function $i(e) {\n var r = y();\n try {\n b(e)();\n } catch (t) {\n if (g(r), t !== t + 0) throw t;\n h(1, 0);\n }\n }\n function wi(e, r, t, n, i, a) {\n var s = y();\n try {\n return b(e)(r, t, n, i, a);\n } catch (o) {\n if (g(s), o !== o + 0) throw o;\n h(1, 0);\n }\n }\n function Ti(e, r, t, n, i, a, s) {\n var o = y();\n try {\n b(e)(r, t, n, i, a, s);\n } catch (u) {\n if (g(o), u !== u + 0) throw u;\n h(1, 0);\n }\n }\n function Fi(e, r, t, n, i, a, s, o, u, c) {\n var f = y();\n try {\n return b(e)(r, t, n, i, a, s, o, u, c);\n } catch (_) {\n if (g(f), _ !== _ + 0) throw _;\n h(1, 0);\n }\n }\n function Ci(e, r, t, n, i, a) {\n var s = y();\n try {\n b(e)(r, t, n, i, a);\n } catch (o) {\n if (g(s), o !== o + 0) throw o;\n h(1, 0);\n }\n }\n function Pi(e, r, t, n, i, a) {\n var s = y();\n try {\n b(e)(r, t, n, i, a);\n } catch (o) {\n if (g(s), o !== o + 0) throw o;\n h(1, 0);\n }\n }\n function ki(e, r, t, n, i) {\n var a = y();\n try {\n return b(e)(r, t, n, i);\n } catch (s) {\n if (g(a), s !== s + 0) throw s;\n h(1, 0);\n }\n }\n function Si(e, r) {\n var t = y();\n try {\n return b(e)(r);\n } catch (n) {\n if (g(t), n !== n + 0) throw n;\n h(1, 0);\n }\n }\n function Ai(e, r, t, n, i, a, s) {\n var o = y();\n try {\n return b(e)(r, t, n, i, a, s);\n } catch (u) {\n if (g(o), u !== u + 0) throw u;\n h(1, 0);\n }\n }\n function Ei(e, r, t, n, i, a, s, o, u) {\n var c = y();\n try {\n b(e)(r, t, n, i, a, s, o, u);\n } catch (f) {\n if (g(c), f !== f + 0) throw f;\n h(1, 0);\n }\n }\n function Ri(e, r, t, n) {\n var i = y();\n try {\n return b(e)(r, t, n);\n } catch (a) {\n if (g(i), a !== a + 0) throw a;\n h(1, 0);\n }\n }\n function Di(e) {\n var r = y();\n try {\n return b(e)();\n } catch (t) {\n if (g(r), t !== t + 0) throw t;\n return h(1, 0), 0n;\n }\n }\n function Wi(e, r, t, n, i) {\n var a = y();\n try {\n b(e)(r, t, n, i);\n } catch (s) {\n if (g(a), s !== s + 0) throw s;\n h(1, 0);\n }\n }\n function xi(e, r, t, n, i, a) {\n var s = y();\n try {\n return b(e)(r, t, n, i, a);\n } catch (o) {\n if (g(s), o !== o + 0) throw o;\n h(1, 0);\n }\n }\n function Oi(e, r, t, n, i, a, s, o) {\n var u = y();\n try {\n return b(e)(r, t, n, i, a, s, o);\n } catch (c) {\n if (g(u), c !== c + 0) throw c;\n h(1, 0);\n }\n }\n function Ui(e, r, t, n, i) {\n var a = y();\n try {\n return b(e)(r, t, n, i);\n } catch (s) {\n if (g(a), s !== s + 0) throw s;\n return h(1, 0), 0n;\n }\n }\n function Vi(e, r, t, n) {\n var i = y();\n try {\n return b(e)(r, t, n);\n } catch (a) {\n if (g(i), a !== a + 0) throw a;\n h(1, 0);\n }\n }\n function ji(e, r, t, n) {\n var i = y();\n try {\n return b(e)(r, t, n);\n } catch (a) {\n if (g(i), a !== a + 0) throw a;\n h(1, 0);\n }\n }\n function Ii(e) {\n var r = y();\n try {\n return b(e)();\n } catch (t) {\n if (g(r), t !== t + 0) throw t;\n h(1, 0);\n }\n }\n function Hi(e, r, t, n, i, a, s, o) {\n var u = y();\n try {\n b(e)(r, t, n, i, a, s, o);\n } catch (c) {\n if (g(u), c !== c + 0) throw c;\n h(1, 0);\n }\n }\n function Mi(e, r, t, n, i) {\n var a = y();\n try {\n return b(e)(r, t, n, i);\n } catch (s) {\n if (g(a), s !== s + 0) throw s;\n h(1, 0);\n }\n }\n function Bi(e, r, t, n, i, a, s) {\n var o = y();\n try {\n return b(e)(r, t, n, i, a, s);\n } catch (u) {\n if (g(o), u !== u + 0) throw u;\n h(1, 0);\n }\n }\n function Li(e, r, t, n, i, a) {\n var s = y();\n try {\n return b(e)(r, t, n, i, a);\n } catch (o) {\n if (g(s), o !== o + 0) throw o;\n h(1, 0);\n }\n }\n function zi(e, r, t, n, i, a, s, o, u, c, f) {\n var _ = y();\n try {\n b(e)(r, t, n, i, a, s, o, u, c, f);\n } catch (d) {\n if (g(_), d !== d + 0) throw d;\n h(1, 0);\n }\n }\n function Yi(e, r, t, n, i, a, s, o, u, c, f, _, d, p, v, $) {\n var P = y();\n try {\n b(e)(r, t, n, i, a, s, o, u, c, f, _, d, p, v, $);\n } catch (F) {\n if (g(P), F !== F + 0) throw F;\n h(1, 0);\n }\n }\n function Ni() {\n Xe();\n function e() {\n l.calledRun = !0, !Q && (Je(), Gr?.(l), l.onRuntimeInitialized?.(), Ke());\n }\n l.setStatus ? (l.setStatus(\"Running...\"), setTimeout(() => {\n setTimeout(() => l.setStatus(\"\"), 1), e();\n }, 1)) : e();\n }\n var B;\n return B = await it(), Ni(), Jr ? $r = l : $r = new Promise((e, r) => {\n Gr = e, qr = r;\n }), $r;\n}\n//#endregion\n//#region packages/core/engine/threads/decoder/worker.ts\nconst { wasmBinary } = await new Promise((resolve) => {\n self.addEventListener(\"message\", function onInit(e) {\n if (e.data?.type === \"wasm-init\") {\n self.removeEventListener(\"message\", onInit);\n resolve(e.data);\n }\n });\n});\nif (!wasmBinary) throw new Error(\"Decoder worker did not receive WASM binary. The main thread failed to fetch aqua-parser.wasm.\");\nconst module = await qi({ wasmBinary });\nconst controllers = /* @__PURE__ */ new Map();\nconst decoder = {\n get AttributeInfo() {\n return module.AttributeInfo;\n },\n get AquaStatus() {\n return module.AquaStatus;\n },\n get heapU8() {\n return module.HEAPU8;\n },\n get heapU32() {\n return module.HEAPU32;\n },\n get SceneRequestDescriptor() {\n return module.SceneRequestDescriptor;\n },\n get WorkerDataType() {\n return module.WorkerDataType;\n },\n dataPtrView: (attributeInfo) => {\n return module.dataPtrView(attributeInfo);\n },\n free: (...args) => {\n return module.ccall(\"free\", \"number\", [\"number\"], args);\n },\n malloc: (...args) => {\n return module.ccall(\"malloc\", \"number\", [\"number\"], args);\n },\n parseDropFile: (bufferPtr, bufferSize, octreeBounds) => {\n return module.parseDropFile(bufferPtr, bufferSize, octreeBounds);\n },\n getAttributeFromDropFile: (handle, attributeName, attributeInfo) => {\n return module.getAttributeFromDropFile(handle, attributeName, attributeInfo);\n },\n takeAttributeFromDropFile: (handle, attributeName, clientSideId) => {\n return module.takeAttributeFromDropFile(handle, attributeName, clientSideId);\n },\n flattenDropFile: (handle, outPtr, outSize) => {\n return module.flattenDropFile(handle, outPtr, outSize);\n },\n destroyDropFileHandle: (handle) => {\n return module.destroyDropFileHandle(handle);\n }\n};\ndefineActions({\n async cancel(requestIdLow, requestIdHigh) {\n const key = `${requestIdHigh}-${requestIdLow}`;\n const controller = controllers.get(key);\n if (controller) {\n controller.abort();\n controllers.delete(key);\n }\n return [{ cancelled: !!controller }];\n },\n async heapSnapshot(topN) {\n if (typeof module.TakeHeapSnapshot !== \"function\") return [{ snapshotJson: null }];\n return [{ snapshotJson: module.TakeHeapSnapshot(topN) }];\n },\n async heapTrackingControl(enabled) {\n if (typeof module.SetHeapTrackingEnabled !== \"function\") return [{ success: false }];\n module.SetHeapTrackingEnabled(enabled);\n return [{ success: true }];\n },\n async heapTrackingReset() {\n if (typeof module.ResetHeapTracking !== \"function\") return [{ success: false }];\n module.ResetHeapTracking();\n return [{ success: true }];\n },\n async decode(requestIdLow, requestIdHigh, descriptorBuffer, contextPtr, consecutiveIdsStart, noJwt) {\n const key = `${requestIdHigh}-${requestIdLow}`;\n const controller = new AbortController();\n controllers.set(key, controller);\n try {\n const { free, malloc, parseDropFile, getAttributeFromDropFile, takeAttributeFromDropFile, flattenDropFile, destroyDropFileHandle } = decoder;\n const descriptorSize = descriptorBuffer.byteLength;\n const descriptorPointer = malloc(descriptorSize);\n decoder.heapU8.set(new Uint8Array(descriptorBuffer), descriptorPointer);\n const descriptor = module.SceneRequestDescriptor.deserializeFromBinary(descriptorPointer, descriptorSize);\n free(descriptorPointer);\n let url = descriptor.getUrl();\n if (noJwt) {\n const url_class = new URL(url);\n url_class.searchParams.delete(\"jwt\");\n url = url_class.toString();\n }\n const body = descriptor.getBody() || null;\n const method = body ? \"POST\" : \"GET\";\n const headers = descriptor.getHeaders();\n const octreeBounds = descriptor.getOctreeBounds();\n descriptor.delete();\n const startTime = performance.now();\n const response = await fetch(url, {\n method,\n headers,\n body,\n signal: controller.signal\n });\n const responseHeadersJson = JSON.stringify({ \"x-cache\": response.headers.get(\"x-cache\") ?? \"\" });\n if (!response.ok) {\n const duration = performance.now() - startTime;\n return [{\n requestIdLow,\n requestIdHigh,\n resultBuffer: /* @__PURE__ */ new ArrayBuffer(0),\n success: false,\n parsed: false,\n error: `HTTP error! status: ${response.status}`,\n dataType: module.WorkerDataType.Raw.value,\n contextPtr,\n attributes: [],\n duration,\n ttfb: duration,\n httpStatus: response.status,\n responseHeadersJson\n }, { transfer: [] }];\n }\n const rtt = performance.now() - startTime;\n const responseBuffer = await response.arrayBuffer();\n const duration = performance.now() - startTime;\n const attributes = [];\n if (!url.split(/[?#]/, 1)[0].endsWith(\".drop\")) return [{\n requestIdLow,\n requestIdHigh,\n resultBuffer: responseBuffer,\n success: true,\n parsed: false,\n error: void 0,\n dataType: module.WorkerDataType.Raw.value,\n contextPtr,\n attributes,\n duration,\n ttfb: rtt,\n httpStatus: response.status,\n responseHeadersJson\n }, { transfer: [responseBuffer] }];\n const responseSize = responseBuffer.byteLength;\n const responsePointer = malloc(responseSize);\n decoder.heapU8.set(new Uint8Array(responseBuffer), responsePointer);\n const outputPointerPointer = malloc(4);\n const outputSizePointer = malloc(4);\n decoder.heapU32[outputPointerPointer / 4] = 0;\n decoder.heapU32[outputSizePointer / 4] = 0;\n let handle = 0;\n let outputPointer = 0;\n const attributeInfo = new decoder.AttributeInfo();\n try {\n handle = parseDropFile(responsePointer, responseSize, octreeBounds);\n if (handle === 0) throw new Error(\"parseDropFile failed\");\n let index = consecutiveIdsStart;\n for (const [name, info] of Object.entries(sparkAttributeList)) {\n if (info.discard) takeAttributeFromDropFile(handle, name, index);\n else if (getAttributeFromDropFile(handle, name, attributeInfo) === decoder.AquaStatus.Success) {\n const wasmView = decoder.dataPtrView(attributeInfo);\n const splatData = sparkAttributeFromRaw(name, index, wasmView);\n if (takeAttributeFromDropFile(handle, name, index) === decoder.AquaStatus.Success) attributes.push(splatData);\n }\n index++;\n }\n if (flattenDropFile(handle, outputPointerPointer, outputSizePointer) !== decoder.AquaStatus.Success) throw new Error(\"flattenDropFile failed\");\n outputPointer = decoder.heapU32[outputPointerPointer / 4];\n const outputSize = decoder.heapU32[outputSizePointer / 4];\n if (outputPointer === 0) throw new Error(\"flattenDropFile gave nullptr\");\n const resultBuffer = decoder.heapU8.buffer.slice(outputPointer, outputPointer + outputSize);\n const transferList = attributes.map((attr) => attr.paddedData.buffer);\n return [{\n requestIdLow,\n requestIdHigh,\n resultBuffer,\n success: true,\n parsed: true,\n error: void 0,\n dataType: module.WorkerDataType.Drop.value,\n contextPtr,\n attributes,\n duration,\n ttfb: rtt,\n httpStatus: response.status,\n responseHeadersJson\n }, { transfer: [resultBuffer, ...transferList] }];\n } catch (error) {\n console.error(\"Exception when parsing dropfile\", error);\n const errorMessage = error instanceof Error ? error.stack ?? error.message : String(error);\n const resultBuffer = (/* @__PURE__ */ new Uint8Array()).buffer;\n return [{\n requestIdLow,\n requestIdHigh,\n resultBuffer,\n success: false,\n parsed: false,\n error: errorMessage,\n dataType: module.WorkerDataType.Drop.value,\n contextPtr,\n attributes: void 0,\n duration,\n ttfb: rtt,\n httpStatus: response.status,\n responseHeadersJson\n }, { transfer: [resultBuffer] }];\n } finally {\n destroyDropFileHandle(handle);\n free(responsePointer);\n free(outputPointerPointer);\n free(outputSizePointer);\n if (outputPointer !== 0) free(outputPointer);\n attributeInfo.delete();\n }\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : String(error);\n const isCancelled = error instanceof Error && error.name === \"AbortError\";\n return [{\n requestIdLow,\n requestIdHigh,\n resultBuffer: /* @__PURE__ */ new ArrayBuffer(0),\n success: false,\n parsed: false,\n error: isCancelled ? \"Cancelled\" : errorMsg,\n dataType: module.WorkerDataType.Raw.value,\n contextPtr,\n attributes: [],\n duration: 0,\n ttfb: 0,\n httpStatus: 0,\n responseHeadersJson: \"{}\"\n }, { transfer: [] }];\n } finally {\n controllers.delete(key);\n }\n }\n});\n//#endregion\n";
|
|
610
183
|
var blob = typeof self !== "undefined" && self.Blob && new Blob(["URL.revokeObjectURL(import.meta.url);", jsContent], { type: "text/javascript;charset=utf-8" });
|
|
611
184
|
function WorkerWrapper(options) {
|
|
612
185
|
let objURL;
|
|
@@ -683,9 +256,9 @@ var Decoder = class extends Thread {
|
|
|
683
256
|
}
|
|
684
257
|
async decode(...args) {
|
|
685
258
|
const { requestIdLow, requestIdHigh, resultBuffer, success, dataType, contextPtr, attributes, duration, ttfb, httpStatus, responseHeadersJson } = await this._execute("decode", ...args);
|
|
686
|
-
if (attributes !== void 0) for (const { paddedData,
|
|
259
|
+
if (attributes !== void 0) for (const { paddedData, originalSizeInUints, id } of attributes) AttributeCache.addWithId({
|
|
687
260
|
paddedData,
|
|
688
|
-
|
|
261
|
+
originalSizeInUints
|
|
689
262
|
}, id);
|
|
690
263
|
const { engine } = this;
|
|
691
264
|
const bufferSize = resultBuffer.byteLength;
|
|
@@ -695,90 +268,6 @@ var Decoder = class extends Thread {
|
|
|
695
268
|
}
|
|
696
269
|
};
|
|
697
270
|
//#endregion
|
|
698
|
-
//#region packages/core/attribute.ts
|
|
699
|
-
var sparkMinSplats = 2048;
|
|
700
|
-
var sparkAttributeList = {
|
|
701
|
-
sparkPackedSplat: {
|
|
702
|
-
elementsPerSplat: 4,
|
|
703
|
-
discard: false
|
|
704
|
-
},
|
|
705
|
-
extendedPackedSplatLow: {
|
|
706
|
-
elementsPerSplat: 4,
|
|
707
|
-
discard: false
|
|
708
|
-
},
|
|
709
|
-
extendedPackedSplatHigh: {
|
|
710
|
-
elementsPerSplat: 4,
|
|
711
|
-
discard: false
|
|
712
|
-
},
|
|
713
|
-
packedSh1: {
|
|
714
|
-
elementsPerSplat: 2,
|
|
715
|
-
discard: false
|
|
716
|
-
},
|
|
717
|
-
packedSh2: {
|
|
718
|
-
elementsPerSplat: 4,
|
|
719
|
-
discard: false
|
|
720
|
-
},
|
|
721
|
-
packedSh3: {
|
|
722
|
-
elementsPerSplat: 4,
|
|
723
|
-
discard: false
|
|
724
|
-
},
|
|
725
|
-
sh1Extended: {
|
|
726
|
-
elementsPerSplat: 4,
|
|
727
|
-
discard: false
|
|
728
|
-
},
|
|
729
|
-
sh2Extended: {
|
|
730
|
-
elementsPerSplat: 4,
|
|
731
|
-
discard: false
|
|
732
|
-
},
|
|
733
|
-
sh3Extended_0: {
|
|
734
|
-
elementsPerSplat: 4,
|
|
735
|
-
discard: false
|
|
736
|
-
},
|
|
737
|
-
sh3Extended_1: {
|
|
738
|
-
elementsPerSplat: 4,
|
|
739
|
-
discard: false
|
|
740
|
-
},
|
|
741
|
-
splatterEllipsoids: {
|
|
742
|
-
elementsPerSplat: 12,
|
|
743
|
-
discard: false
|
|
744
|
-
},
|
|
745
|
-
splatterSphericalHarmonics: {
|
|
746
|
-
elementsPerSplat: 16,
|
|
747
|
-
discard: false
|
|
748
|
-
}
|
|
749
|
-
};
|
|
750
|
-
function roundUpToMultipleOf(a, multiple) {
|
|
751
|
-
return Math.ceil(a / multiple) * multiple;
|
|
752
|
-
}
|
|
753
|
-
function sparkAttributeFromRaw(name, id, wasmView) {
|
|
754
|
-
const attrib = sparkAttributeList[name];
|
|
755
|
-
if (attrib === void 0) throw new Error("attribute name" + name + " is unknown");
|
|
756
|
-
const originalSize = wasmView.length;
|
|
757
|
-
const paddedSize = roundUpToMultipleOf(originalSize, attrib.elementsPerSplat * sparkMinSplats);
|
|
758
|
-
const paddedData = new Uint32Array(paddedSize);
|
|
759
|
-
paddedData.set(wasmView);
|
|
760
|
-
return {
|
|
761
|
-
paddedData,
|
|
762
|
-
originalSize,
|
|
763
|
-
id
|
|
764
|
-
};
|
|
765
|
-
}
|
|
766
|
-
var AttributeNames = class {
|
|
767
|
-
static SPARK_PACKED_SPLAT = "sparkPackedSplat";
|
|
768
|
-
static SPARK_EXTENDED_SPLAT_LOW = "extendedPackedSplatLow";
|
|
769
|
-
static SPARK_EXTENDED_SPLAT_HIGH = "extendedPackedSplatHigh";
|
|
770
|
-
static SPARK_PACKED_SH1 = "packedSh1";
|
|
771
|
-
static SPARK_PACKED_SH2 = "packedSh2";
|
|
772
|
-
static SPARK_PACKED_SH3 = "packedSh3";
|
|
773
|
-
static SPARK_EXTENDED_SH1 = "sh1Extended";
|
|
774
|
-
static SPARK_EXTENDED_SH2 = "sh2Extended";
|
|
775
|
-
static SPARK_EXTENDED_SH3_A = "sh3Extended_0";
|
|
776
|
-
static SPARK_EXTENDED_SH3_B = "sh3Extended_1";
|
|
777
|
-
static UNUSED = "unused";
|
|
778
|
-
static SPLATTER_ELLIPSOIDS = "splatterEllipsoids";
|
|
779
|
-
static SPLATTER_SPHERICAL_HARMONICS = "splatterSphericalHarmonics";
|
|
780
|
-
};
|
|
781
|
-
//#endregion
|
|
782
271
|
//#region packages/core/engine/index.ts
|
|
783
272
|
/**
|
|
784
273
|
* The main Aqua wrapper.
|
|
@@ -854,6 +343,9 @@ var Engine = class Engine {
|
|
|
854
343
|
get AttributeInfo() {
|
|
855
344
|
return this.module.AttributeInfo;
|
|
856
345
|
}
|
|
346
|
+
get CompressionType() {
|
|
347
|
+
return this.module.CompressionType;
|
|
348
|
+
}
|
|
857
349
|
get Handedness() {
|
|
858
350
|
return this.module.Handedness;
|
|
859
351
|
}
|
|
@@ -920,6 +412,12 @@ var Engine = class Engine {
|
|
|
920
412
|
deactivatedObjectIdsView(...args) {
|
|
921
413
|
return this.module.deactivatedObjectIdsView(...args);
|
|
922
414
|
}
|
|
415
|
+
remaskedObjectIdsView(...args) {
|
|
416
|
+
return this.module.remaskedObjectIdsView(...args);
|
|
417
|
+
}
|
|
418
|
+
getDrawnOctantMask(...args) {
|
|
419
|
+
return this.module.GetDrawnOctantMask(...args);
|
|
420
|
+
}
|
|
923
421
|
destroyClient(...args) {
|
|
924
422
|
return this.module.ccall("DestroyClient", "number", ["number"], args);
|
|
925
423
|
}
|
|
@@ -938,10 +436,10 @@ var Engine = class Engine {
|
|
|
938
436
|
], args);
|
|
939
437
|
}
|
|
940
438
|
getDefaultCameraId(...args) {
|
|
941
|
-
return this.module.ccall("GetDefaultCameraId", "number", ["number"], args);
|
|
439
|
+
return this.module.ccall("GetDefaultCameraId", "number", ["number", "number"], args);
|
|
942
440
|
}
|
|
943
441
|
getViewingVolumeId(...args) {
|
|
944
|
-
return this.module.ccall("GetViewingVolumeId", "number", ["number"], args);
|
|
442
|
+
return this.module.ccall("GetViewingVolumeId", "number", ["number", "number"], args);
|
|
945
443
|
}
|
|
946
444
|
getLocalBoundingBox(...args) {
|
|
947
445
|
return this.module.ccall("GetLocalBoundingBox", "number", [
|
|
@@ -1051,12 +549,16 @@ var Engine = class Engine {
|
|
|
1051
549
|
"number",
|
|
1052
550
|
"number",
|
|
1053
551
|
"number",
|
|
552
|
+
"number",
|
|
1054
553
|
"number"
|
|
1055
554
|
], args);
|
|
1056
555
|
}
|
|
1057
556
|
setMaxCacheSize(...args) {
|
|
1058
557
|
return this.module.setMaxCacheSize(...args);
|
|
1059
558
|
}
|
|
559
|
+
setPreferSharkEncodingProfiles(...args) {
|
|
560
|
+
return this.module.SetPreferSharkEncodingProfiles(...args);
|
|
561
|
+
}
|
|
1060
562
|
setSceneObjectTransform(...args) {
|
|
1061
563
|
return this.module.ccall("SetSceneObjectTransform", "number", [
|
|
1062
564
|
"number",
|
|
@@ -1073,6 +575,12 @@ var Engine = class Engine {
|
|
|
1073
575
|
getFeatureState(...args) {
|
|
1074
576
|
return this.module.GetFeatureState(...args);
|
|
1075
577
|
}
|
|
578
|
+
getDrMapLadderRoughnessLevels(...args) {
|
|
579
|
+
return this.module.GetDrMapLadderRoughnessLevels(...args);
|
|
580
|
+
}
|
|
581
|
+
getAssetFormatVersion(...args) {
|
|
582
|
+
return this.module.GetAssetFormatVersion(...args);
|
|
583
|
+
}
|
|
1076
584
|
getName(...args) {
|
|
1077
585
|
return this.module.GetName(...args);
|
|
1078
586
|
}
|
|
@@ -1099,61 +607,767 @@ var Engine = class Engine {
|
|
|
1099
607
|
updateSceneExecution(...args) {
|
|
1100
608
|
return this.module.ccall("UpdateSceneExecution", "number", ["number"], args);
|
|
1101
609
|
}
|
|
1102
|
-
|
|
1103
|
-
return this.module.
|
|
610
|
+
takeRenderRequired(...args) {
|
|
611
|
+
return this.module.TakeRenderRequired(...args);
|
|
612
|
+
}
|
|
613
|
+
/**
|
|
614
|
+
* Advances the runtime by one frame and recomputes the streaming budget. Call once per
|
|
615
|
+
* displayed frame per context, before the per-client updateSceneExecution() calls.
|
|
616
|
+
* `previousFrameTimeMs` is how long the previous frame took; pass 0 when there is no plausible
|
|
617
|
+
* measurement (first frame, or a resume from a stall) and the frame advances without recording
|
|
618
|
+
* one.
|
|
619
|
+
*/
|
|
620
|
+
beginFrame(...args) {
|
|
621
|
+
return this.module.BeginFrame(...args);
|
|
622
|
+
}
|
|
623
|
+
createDeserializeWorker(_url, _workerUrl, poolSize) {
|
|
624
|
+
for (let index = 1; index < poolSize; index += 1) this.#decoders.add(new Decoder({ engine: this }));
|
|
625
|
+
return true;
|
|
626
|
+
}
|
|
627
|
+
cancelRequest(requestIdLow, requestIdHigh) {
|
|
628
|
+
const requestKey = `${requestIdHigh}-${requestIdLow}`;
|
|
629
|
+
const decoder = this.#requestMap.get(requestKey);
|
|
630
|
+
if (decoder) {
|
|
631
|
+
decoder.cancel(requestIdLow, requestIdHigh);
|
|
632
|
+
this.#requestMap.delete(requestKey);
|
|
633
|
+
}
|
|
634
|
+
return true;
|
|
635
|
+
}
|
|
636
|
+
submitToWorker(requestIdLow, requestIdHigh, descriptorBuffer, contextPtr) {
|
|
637
|
+
const decoder = [...this.#decoders.values()].reduce((previous, current) => {
|
|
638
|
+
if (!previous) return current;
|
|
639
|
+
return current.pendingRequests < previous.pendingRequests ? current : previous;
|
|
640
|
+
});
|
|
641
|
+
const requestKey = `${requestIdHigh}-${requestIdLow}`;
|
|
642
|
+
this.#requestMap.set(requestKey, decoder);
|
|
643
|
+
const firstId = AttributeCache.getConsecutiveIds(Object.keys(sparkAttributeList).length);
|
|
644
|
+
decoder.ready.then(() => decoder.decode(requestIdLow, requestIdHigh, descriptorBuffer, contextPtr, firstId, this.#noJwt));
|
|
645
|
+
return true;
|
|
646
|
+
}
|
|
647
|
+
terminateWorker() {
|
|
648
|
+
for (const decoder of this.#decoders) decoder.terminate();
|
|
649
|
+
this.#decoders.clear();
|
|
650
|
+
}
|
|
651
|
+
async requestWorkerHeapSnapshots(topN) {
|
|
652
|
+
const decoders = [...this.#decoders];
|
|
653
|
+
return (await Promise.allSettled(decoders.map((d) => d.ready.then(() => {
|
|
654
|
+
let timer;
|
|
655
|
+
const timeout = new Promise((resolve) => {
|
|
656
|
+
timer = setTimeout(() => resolve(null), 5e3);
|
|
657
|
+
});
|
|
658
|
+
return Promise.race([d.heapSnapshot(topN).then((r) => r.snapshotJson), timeout]).finally(() => clearTimeout(timer));
|
|
659
|
+
})))).map((r) => r.status === "fulfilled" ? r.value : null);
|
|
660
|
+
}
|
|
661
|
+
async setWorkerHeapTrackingEnabled(enabled) {
|
|
662
|
+
await Promise.allSettled([...this.#decoders].map((d) => d.ready.then(() => d.heapTrackingControl(enabled))));
|
|
663
|
+
}
|
|
664
|
+
async resetWorkerHeapTracking() {
|
|
665
|
+
await Promise.allSettled([...this.#decoders].map((d) => d.ready.then(() => d.heapTrackingReset())));
|
|
666
|
+
}
|
|
667
|
+
static #env() {
|
|
668
|
+
return {
|
|
669
|
+
AQUA_USE_SINGLETON_NETWORK_TRANSPORT: "true",
|
|
670
|
+
AQUA_SERVER_BASE_URL: "https://app.miris.com/viewer/v1"
|
|
671
|
+
};
|
|
672
|
+
}
|
|
673
|
+
};
|
|
674
|
+
//#endregion
|
|
675
|
+
//#region packages/core/attribute.ts
|
|
676
|
+
var sparkMinSplats = 2048;
|
|
677
|
+
var sparkAttributeList = {
|
|
678
|
+
sparkPackedSplat: {
|
|
679
|
+
elementsPerSplat: 4,
|
|
680
|
+
discard: false
|
|
681
|
+
},
|
|
682
|
+
extendedPackedSplatLow: {
|
|
683
|
+
elementsPerSplat: 4,
|
|
684
|
+
discard: false
|
|
685
|
+
},
|
|
686
|
+
extendedPackedSplatHigh: {
|
|
687
|
+
elementsPerSplat: 4,
|
|
688
|
+
discard: false
|
|
689
|
+
},
|
|
690
|
+
packedSh1: {
|
|
691
|
+
elementsPerSplat: 2,
|
|
692
|
+
discard: false
|
|
693
|
+
},
|
|
694
|
+
packedSh2: {
|
|
695
|
+
elementsPerSplat: 4,
|
|
696
|
+
discard: false
|
|
697
|
+
},
|
|
698
|
+
packedSh3: {
|
|
699
|
+
elementsPerSplat: 4,
|
|
700
|
+
discard: false
|
|
701
|
+
},
|
|
702
|
+
sh1Extended: {
|
|
703
|
+
elementsPerSplat: 4,
|
|
704
|
+
discard: false
|
|
705
|
+
},
|
|
706
|
+
sh2Extended: {
|
|
707
|
+
elementsPerSplat: 4,
|
|
708
|
+
discard: false
|
|
709
|
+
},
|
|
710
|
+
sh3Extended_0: {
|
|
711
|
+
elementsPerSplat: 4,
|
|
712
|
+
discard: false
|
|
713
|
+
},
|
|
714
|
+
sh3Extended_1: {
|
|
715
|
+
elementsPerSplat: 4,
|
|
716
|
+
discard: false
|
|
717
|
+
},
|
|
718
|
+
sharkEllipsoid: {
|
|
719
|
+
elementsPerSplat: 12,
|
|
720
|
+
discard: false
|
|
721
|
+
},
|
|
722
|
+
sharkEllipsoidCompressed: {
|
|
723
|
+
elementsPerSplat: 4,
|
|
724
|
+
discard: false
|
|
725
|
+
},
|
|
726
|
+
sharkSphericalHarmonics: {
|
|
727
|
+
elementsPerSplat: 16,
|
|
728
|
+
discard: false
|
|
729
|
+
},
|
|
730
|
+
color: {
|
|
731
|
+
elementsPerSplat: 2,
|
|
732
|
+
discard: false
|
|
733
|
+
},
|
|
734
|
+
mod_depth: {
|
|
735
|
+
elementsPerSplat: .5,
|
|
736
|
+
discard: false
|
|
737
|
+
}
|
|
738
|
+
};
|
|
739
|
+
function roundUpToMultipleOf(a, multiple) {
|
|
740
|
+
return Math.ceil(a / multiple) * multiple;
|
|
741
|
+
}
|
|
742
|
+
function sparkAttributeFromRaw(name, id, wasmView) {
|
|
743
|
+
const attrib = sparkAttributeList[name];
|
|
744
|
+
if (attrib === void 0) throw new Error("attribute name" + name + " is unknown");
|
|
745
|
+
const originalSize = wasmView.length;
|
|
746
|
+
const paddedSize = roundUpToMultipleOf(originalSize, attrib.elementsPerSplat * sparkMinSplats);
|
|
747
|
+
const paddedData = new Uint32Array(paddedSize);
|
|
748
|
+
paddedData.set(wasmView);
|
|
749
|
+
return {
|
|
750
|
+
paddedData,
|
|
751
|
+
originalSizeInUints: originalSize,
|
|
752
|
+
id
|
|
753
|
+
};
|
|
754
|
+
}
|
|
755
|
+
var AttributeNames = class {
|
|
756
|
+
static SPARK_PACKED_SPLAT = "sparkPackedSplat";
|
|
757
|
+
static SPARK_EXTENDED_SPLAT_LOW = "extendedPackedSplatLow";
|
|
758
|
+
static SPARK_EXTENDED_SPLAT_HIGH = "extendedPackedSplatHigh";
|
|
759
|
+
static SPARK_PACKED_SH1 = "packedSh1";
|
|
760
|
+
static SPARK_PACKED_SH2 = "packedSh2";
|
|
761
|
+
static SPARK_PACKED_SH3 = "packedSh3";
|
|
762
|
+
static SPARK_EXTENDED_SH1 = "sh1Extended";
|
|
763
|
+
static SPARK_EXTENDED_SH2 = "sh2Extended";
|
|
764
|
+
static SPARK_EXTENDED_SH3_A = "sh3Extended_0";
|
|
765
|
+
static SPARK_EXTENDED_SH3_B = "sh3Extended_1";
|
|
766
|
+
static UNUSED = "unused";
|
|
767
|
+
static SHARK_ELLIPSOIDS = "sharkEllipsoid";
|
|
768
|
+
static SHARK_ELLIPSOIDS_COMPRESSED = "sharkEllipsoidCompressed";
|
|
769
|
+
static SHARK_SPHERICAL_HARMONICS = "sharkSphericalHarmonics";
|
|
770
|
+
static COLOR = "color";
|
|
771
|
+
static OCTANT_OFFSETS = "childOctantOffsets";
|
|
772
|
+
static SURFEL_OCTANT_OFFSETS = "surfelChildOctantOffsets";
|
|
773
|
+
static SURFEL_COUNT = "surfelCount";
|
|
774
|
+
static SURFEL_OWNER_GROUPS = "surfelOwnerGroups";
|
|
775
|
+
static OCTANT_CELL = "octantCell";
|
|
776
|
+
static REFLECTANCE_DATA_V1 = "reflectanceDataV1";
|
|
777
|
+
static REFLECTANCE_DATA_V2 = "reflectanceDataV2";
|
|
778
|
+
static GLASS_MESH_GEOMETRY = "glassMeshGeometry";
|
|
779
|
+
static GLASS_MESH_PANELS = "glassMeshPanels";
|
|
780
|
+
static MOD_DEPTH = "mod_depth";
|
|
781
|
+
};
|
|
782
|
+
function retrieveFloatArray(engine, objectId, arraySize, fn) {
|
|
783
|
+
const arrayPtr = engine.malloc(arraySize * 4);
|
|
784
|
+
fn(objectId, arrayPtr);
|
|
785
|
+
const floatArray = engine.heapF32.subarray(arrayPtr >> 2, (arrayPtr >> 2) + arraySize).slice();
|
|
786
|
+
engine.free(arrayPtr);
|
|
787
|
+
return floatArray;
|
|
788
|
+
}
|
|
789
|
+
/**
|
|
790
|
+
* Reads a small raw uint32 attribute (e.g. sparse-octant childOctantOffsets) directly, without the
|
|
791
|
+
* spark per-splat padding applied by getDataFromAttribute. Returns a copy of the values, or null if
|
|
792
|
+
* the attribute is absent or empty. Ownership stays with the C++ client (no takeAttribute).
|
|
793
|
+
*/
|
|
794
|
+
function getRawUint32Attribute(engine, client, sceneObjectId, attributeName) {
|
|
795
|
+
if (!client.hasAttribute(sceneObjectId, attributeName)) return null;
|
|
796
|
+
const attributeInfo = new engine.AttributeInfo();
|
|
797
|
+
try {
|
|
798
|
+
const { ptr } = attributeInfo.$$;
|
|
799
|
+
if (client.getAttribute(sceneObjectId, attributeName, ptr) !== Engine.AquaStatus.Success) return null;
|
|
800
|
+
const view = engine.dataPtrView(attributeInfo);
|
|
801
|
+
if (view.length === 0) return null;
|
|
802
|
+
return view.slice();
|
|
803
|
+
} finally {
|
|
804
|
+
attributeInfo.delete();
|
|
805
|
+
}
|
|
806
|
+
}
|
|
807
|
+
/**
|
|
808
|
+
* Size of an attribute's data in bytes, or 0 if it is absent. Reads the metadata only, so it can
|
|
809
|
+
* be asked on every scene event without copying the payload out of the wasm heap.
|
|
810
|
+
*/
|
|
811
|
+
function getRawAttributeByteLength(engine, client, sceneObjectId, attributeName) {
|
|
812
|
+
const attributeInfo = new engine.AttributeInfo();
|
|
813
|
+
try {
|
|
814
|
+
const { ptr } = attributeInfo.$$;
|
|
815
|
+
if (client.getAttribute(sceneObjectId, attributeName, ptr) !== Engine.AquaStatus.Success) return 0;
|
|
816
|
+
return Math.max(attributeInfo.dataSizeBytes, 0);
|
|
817
|
+
} finally {
|
|
818
|
+
attributeInfo.delete();
|
|
819
|
+
}
|
|
820
|
+
}
|
|
821
|
+
function getRawByteAttribute(engine, client, sceneObjectId, attributeName) {
|
|
822
|
+
return getRawByteAttributeWithBounds(engine, client, sceneObjectId, attributeName)?.bytes ?? null;
|
|
823
|
+
}
|
|
824
|
+
function getRawByteAttributeWithBounds(engine, client, sceneObjectId, attributeName) {
|
|
825
|
+
const attributeInfo = new engine.AttributeInfo();
|
|
826
|
+
try {
|
|
827
|
+
const { ptr } = attributeInfo.$$;
|
|
828
|
+
if (client.getAttribute(sceneObjectId, attributeName, ptr) !== Engine.AquaStatus.Success) return null;
|
|
829
|
+
const words = engine.dataPtrView(attributeInfo);
|
|
830
|
+
const byteCount = attributeInfo.dataSizeBytes;
|
|
831
|
+
if (byteCount <= 0 || words.byteLength === 0) return null;
|
|
832
|
+
return {
|
|
833
|
+
bytes: new Uint8Array(words.buffer, words.byteOffset, byteCount).slice(),
|
|
834
|
+
minValue: {
|
|
835
|
+
x: attributeInfo.minValue.x,
|
|
836
|
+
y: attributeInfo.minValue.y,
|
|
837
|
+
z: attributeInfo.minValue.z
|
|
838
|
+
},
|
|
839
|
+
maxValue: {
|
|
840
|
+
x: attributeInfo.maxValue.x,
|
|
841
|
+
y: attributeInfo.maxValue.y,
|
|
842
|
+
z: attributeInfo.maxValue.z
|
|
843
|
+
}
|
|
844
|
+
};
|
|
845
|
+
} finally {
|
|
846
|
+
attributeInfo.delete();
|
|
847
|
+
}
|
|
848
|
+
}
|
|
849
|
+
function getDataFromAttribute(engine, client, sceneObjectId, attributeName, outAttributeInfo) {
|
|
850
|
+
if (!client.hasAttribute(sceneObjectId, attributeName)) return null;
|
|
851
|
+
const { ptr } = outAttributeInfo.$$;
|
|
852
|
+
const status = client.getAttribute(sceneObjectId, attributeName, ptr);
|
|
853
|
+
if (status !== Engine.AquaStatus.Success) {
|
|
854
|
+
console.warn(`GetAttribute failed for object id ${sceneObjectId} and attribute name ${attributeName}: status ${status}`);
|
|
855
|
+
return null;
|
|
856
|
+
}
|
|
857
|
+
let paddedData;
|
|
858
|
+
let originalSizeInUints;
|
|
859
|
+
if (outAttributeInfo.clientSideId != 0n) ({paddedData: paddedData, originalSizeInUints: originalSizeInUints} = AttributeCache.get(Number(outAttributeInfo.clientSideId)));
|
|
860
|
+
else {
|
|
861
|
+
const result = sparkAttributeFromRaw(attributeName, 0, engine.dataPtrView(outAttributeInfo));
|
|
862
|
+
paddedData = result.paddedData;
|
|
863
|
+
originalSizeInUints = result.originalSizeInUints;
|
|
864
|
+
console.log(`retrieved a attribute ${attributeName} with size ${result.originalSizeInUints} for chunk ${sceneObjectId}`);
|
|
865
|
+
const myCacheEntry = AttributeCache.add({
|
|
866
|
+
paddedData: result.paddedData,
|
|
867
|
+
originalSizeInUints: result.originalSizeInUints
|
|
868
|
+
});
|
|
869
|
+
const takeStatus = client.takeAttribute(sceneObjectId, attributeName, BigInt(myCacheEntry));
|
|
870
|
+
if (takeStatus !== Engine.AquaStatus.Success) {
|
|
871
|
+
AttributeCache.remove(myCacheEntry);
|
|
872
|
+
console.warn(`Failed to take attribute ${attributeName} for scene object ${sceneObjectId}: status ${takeStatus}`);
|
|
873
|
+
return null;
|
|
874
|
+
}
|
|
875
|
+
}
|
|
876
|
+
return {
|
|
877
|
+
paddedData,
|
|
878
|
+
originalSizeInUints
|
|
879
|
+
};
|
|
880
|
+
}
|
|
881
|
+
//#endregion
|
|
882
|
+
//#region packages/core/lod.ts
|
|
883
|
+
var LodStore = class {
|
|
884
|
+
#keyMap = /* @__PURE__ */ new Map();
|
|
885
|
+
#idMap = /* @__PURE__ */ new Map();
|
|
886
|
+
forKey(key) {
|
|
887
|
+
return this.#keyMap.get(key);
|
|
888
|
+
}
|
|
889
|
+
forId(id) {
|
|
890
|
+
return this.#idMap.get(id);
|
|
891
|
+
}
|
|
892
|
+
setKey(key, lod) {
|
|
893
|
+
this.#keyMap.set(key, lod);
|
|
894
|
+
}
|
|
895
|
+
setId(id, lod) {
|
|
896
|
+
return this.#idMap.set(id, lod);
|
|
897
|
+
}
|
|
898
|
+
delete(lod) {
|
|
899
|
+
this.#keyMap.delete(lod.key);
|
|
900
|
+
this.#idMap.delete(lod.id);
|
|
901
|
+
}
|
|
902
|
+
deleteKey(key) {
|
|
903
|
+
this.#keyMap.delete(key);
|
|
904
|
+
}
|
|
905
|
+
deleteId(id) {
|
|
906
|
+
this.#idMap.delete(id);
|
|
907
|
+
}
|
|
908
|
+
};
|
|
909
|
+
var Lod = class {
|
|
910
|
+
#client;
|
|
911
|
+
#key;
|
|
912
|
+
#cachedWorldBounds = null;
|
|
913
|
+
#localBounds = null;
|
|
914
|
+
#transform = null;
|
|
915
|
+
#lodIndex = null;
|
|
916
|
+
#paddingSplatsCount = 0;
|
|
917
|
+
#drawnOctantMask = 255;
|
|
918
|
+
#octantOffsets = null;
|
|
919
|
+
#surfelOctantOffsets = null;
|
|
920
|
+
#surfelCount = 0;
|
|
921
|
+
#surfelOwnerGroups = null;
|
|
922
|
+
#octantCell = null;
|
|
923
|
+
#octantOffsetsRead = false;
|
|
924
|
+
get key() {
|
|
925
|
+
return this.#key ?? null;
|
|
926
|
+
}
|
|
927
|
+
set key(key) {
|
|
928
|
+
this.store.deleteKey(this.key);
|
|
929
|
+
if (key || 0 === key) this.store.setKey(key, this);
|
|
930
|
+
this.#key = key;
|
|
931
|
+
}
|
|
932
|
+
set bounds(bounds) {
|
|
933
|
+
this.#cachedWorldBounds = bounds;
|
|
934
|
+
}
|
|
935
|
+
/**
|
|
936
|
+
* Retrieves the cached world bounds of this object
|
|
937
|
+
*
|
|
938
|
+
* @deprecated Retrieve the local bounds and transform as needed
|
|
939
|
+
*/
|
|
940
|
+
get bounds() {
|
|
941
|
+
console.warn("`bounds` is deprecated, use `localBounds` instead");
|
|
942
|
+
return this.#cachedWorldBounds;
|
|
943
|
+
}
|
|
944
|
+
/**
|
|
945
|
+
* Sets the local bounds of this lod
|
|
946
|
+
*/
|
|
947
|
+
set localBounds(bounds) {
|
|
948
|
+
this.#localBounds = bounds;
|
|
949
|
+
}
|
|
950
|
+
/**
|
|
951
|
+
* Retrieves the local bounds of this lod
|
|
952
|
+
*/
|
|
953
|
+
get localBounds() {
|
|
954
|
+
return this.#localBounds;
|
|
955
|
+
}
|
|
956
|
+
set lodIndex(index) {
|
|
957
|
+
this.#lodIndex = index;
|
|
958
|
+
}
|
|
959
|
+
get lodIndex() {
|
|
960
|
+
return this.#lodIndex;
|
|
961
|
+
}
|
|
962
|
+
set paddingSplatsCount(count) {
|
|
963
|
+
this.#paddingSplatsCount = count;
|
|
964
|
+
}
|
|
965
|
+
get paddingSplatsCount() {
|
|
966
|
+
return this.#paddingSplatsCount;
|
|
967
|
+
}
|
|
968
|
+
set transform(transform) {
|
|
969
|
+
this.#transform = transform;
|
|
970
|
+
}
|
|
971
|
+
get transform() {
|
|
972
|
+
return this.#transform;
|
|
973
|
+
}
|
|
974
|
+
get _drawnOctantMask() {
|
|
975
|
+
return this.#drawnOctantMask;
|
|
976
|
+
}
|
|
977
|
+
set _drawnOctantMask(mask) {
|
|
978
|
+
this.#drawnOctantMask = mask;
|
|
979
|
+
}
|
|
980
|
+
get _octantOffsets() {
|
|
981
|
+
return this.#octantOffsets;
|
|
982
|
+
}
|
|
983
|
+
get _hasOctantOffsets() {
|
|
984
|
+
return this.#octantOffsets !== null;
|
|
985
|
+
}
|
|
986
|
+
get _surfelOctantOffsets() {
|
|
987
|
+
return this.#surfelOctantOffsets;
|
|
988
|
+
}
|
|
989
|
+
get _surfelCount() {
|
|
990
|
+
return this.#surfelCount;
|
|
991
|
+
}
|
|
992
|
+
get _surfelOwnerGroups() {
|
|
993
|
+
return this.#surfelOwnerGroups;
|
|
994
|
+
}
|
|
995
|
+
get _octantCell() {
|
|
996
|
+
return this.#octantCell;
|
|
997
|
+
}
|
|
998
|
+
_readOctantOffsets(engine) {
|
|
999
|
+
if (this.#octantOffsetsRead) return;
|
|
1000
|
+
this.#octantOffsetsRead = true;
|
|
1001
|
+
const offsets = getRawUint32Attribute(engine, this.#client, this.id, AttributeNames.OCTANT_OFFSETS);
|
|
1002
|
+
if (offsets && offsets.length === 7) this.#octantOffsets = offsets;
|
|
1003
|
+
const surfelOffsets = getRawUint32Attribute(engine, this.#client, this.id, AttributeNames.SURFEL_OCTANT_OFFSETS);
|
|
1004
|
+
if (surfelOffsets && surfelOffsets.length === 7) this.#surfelOctantOffsets = surfelOffsets;
|
|
1005
|
+
const surfelCount = getRawUint32Attribute(engine, this.#client, this.id, AttributeNames.SURFEL_COUNT);
|
|
1006
|
+
if (surfelCount && surfelCount.length === 1) this.#surfelCount = surfelCount[0];
|
|
1007
|
+
this.#surfelOwnerGroups = getRawUint32Attribute(engine, this.#client, this.id, AttributeNames.SURFEL_OWNER_GROUPS);
|
|
1008
|
+
const cell = getRawUint32Attribute(engine, this.#client, this.id, AttributeNames.OCTANT_CELL);
|
|
1009
|
+
if (cell && cell.length === 4) this.#octantCell = cell;
|
|
1010
|
+
}
|
|
1011
|
+
hasAttribute(attributeName) {
|
|
1012
|
+
return this.#client.hasAttribute(this.id, attributeName);
|
|
1013
|
+
}
|
|
1014
|
+
getDataFromAttribute(engine, attributeName, attributeInfo) {
|
|
1015
|
+
return getDataFromAttribute(engine, this.#client, this.id, attributeName, attributeInfo);
|
|
1016
|
+
}
|
|
1017
|
+
_getRawByteAttribute(engine, attributeName) {
|
|
1018
|
+
return getRawByteAttribute(engine, this.#client, this.id, attributeName);
|
|
1019
|
+
}
|
|
1020
|
+
_getRawByteAttributeWithBounds(engine, attributeName) {
|
|
1021
|
+
return getRawByteAttributeWithBounds(engine, this.#client, this.id, attributeName);
|
|
1022
|
+
}
|
|
1023
|
+
dispose() {
|
|
1024
|
+
const key = this.#key;
|
|
1025
|
+
key?.dispose?.();
|
|
1026
|
+
this.store.delete(this);
|
|
1027
|
+
this.#key = null;
|
|
1028
|
+
key?.dispose?.();
|
|
1029
|
+
this.#cachedWorldBounds = null;
|
|
1030
|
+
this.#localBounds = null;
|
|
1031
|
+
this.#transform = null;
|
|
1032
|
+
this.modelRoot?.lods?.delete(this);
|
|
1033
|
+
}
|
|
1034
|
+
constructor({ id, modelRoot, lodStore, client }) {
|
|
1035
|
+
Object.defineProperties(this, {
|
|
1036
|
+
id: { value: id },
|
|
1037
|
+
modelRoot: { value: modelRoot },
|
|
1038
|
+
store: { value: lodStore }
|
|
1039
|
+
});
|
|
1040
|
+
this.#client = client;
|
|
1041
|
+
lodStore.setId(id, this);
|
|
1042
|
+
modelRoot.add(this);
|
|
1043
|
+
}
|
|
1044
|
+
};
|
|
1045
|
+
//#endregion
|
|
1046
|
+
//#region packages/core/change.ts
|
|
1047
|
+
var Change = class {
|
|
1048
|
+
constructor({ type, lod }) {
|
|
1049
|
+
Object.defineProperties(this, {
|
|
1050
|
+
type: { value: type },
|
|
1051
|
+
lod: { value: lod }
|
|
1052
|
+
});
|
|
1053
|
+
}
|
|
1054
|
+
};
|
|
1055
|
+
//#endregion
|
|
1056
|
+
//#region packages/core/modelRoot.ts
|
|
1057
|
+
var ModelRoot = class ModelRoot {
|
|
1058
|
+
static #keyMap = /* @__PURE__ */ new Map();
|
|
1059
|
+
static #idMap = /* @__PURE__ */ new Map();
|
|
1060
|
+
static forKey(key) {
|
|
1061
|
+
return this.#keyMap.get(key);
|
|
1062
|
+
}
|
|
1063
|
+
static forId(id) {
|
|
1064
|
+
return this.#idMap.get(id);
|
|
1065
|
+
}
|
|
1066
|
+
#key;
|
|
1067
|
+
get key() {
|
|
1068
|
+
return this.#key ?? null;
|
|
1069
|
+
}
|
|
1070
|
+
set key(key) {
|
|
1071
|
+
ModelRoot.#keyMap.delete(this.key);
|
|
1072
|
+
if (key || 0 === key) ModelRoot.#keyMap.set(key, this);
|
|
1073
|
+
this.#key = key;
|
|
1074
|
+
}
|
|
1075
|
+
#lods = /* @__PURE__ */ new Set();
|
|
1076
|
+
get lods() {
|
|
1077
|
+
return this.#lods;
|
|
1078
|
+
}
|
|
1079
|
+
#transform;
|
|
1080
|
+
set transform(transform) {
|
|
1081
|
+
this.#transform = transform;
|
|
1082
|
+
}
|
|
1083
|
+
get transform() {
|
|
1084
|
+
return this.#transform;
|
|
1085
|
+
}
|
|
1086
|
+
constructor({ id, stream }) {
|
|
1087
|
+
Object.defineProperties(this, {
|
|
1088
|
+
id: { value: id },
|
|
1089
|
+
stream: { value: stream }
|
|
1090
|
+
});
|
|
1091
|
+
ModelRoot.#idMap.set(id, this);
|
|
1092
|
+
stream.add(this);
|
|
1093
|
+
}
|
|
1094
|
+
add(lod) {
|
|
1095
|
+
this.#lods.add(lod);
|
|
1096
|
+
}
|
|
1097
|
+
dispose() {
|
|
1098
|
+
const lods = [...this.#lods];
|
|
1099
|
+
this.#lods.clear();
|
|
1100
|
+
for (const lod of lods) lod.dispose();
|
|
1101
|
+
ModelRoot.#keyMap.delete(this.key);
|
|
1102
|
+
ModelRoot.#idMap.delete(this.id);
|
|
1103
|
+
this.#key = null;
|
|
1104
|
+
}
|
|
1105
|
+
};
|
|
1106
|
+
//#endregion
|
|
1107
|
+
//#region packages/core/stream.ts
|
|
1108
|
+
var Stream = class Stream extends EventTarget {
|
|
1109
|
+
static _idMap = /* @__PURE__ */ new Map();
|
|
1110
|
+
static _keyMap = /* @__PURE__ */ new Map();
|
|
1111
|
+
static forId(id) {
|
|
1112
|
+
if (!id) return;
|
|
1113
|
+
return this._idMap.get(id);
|
|
1114
|
+
}
|
|
1115
|
+
static forKey(key) {
|
|
1116
|
+
return this._keyMap.get(key);
|
|
1117
|
+
}
|
|
1118
|
+
#key;
|
|
1119
|
+
#loadedRenderableData = false;
|
|
1120
|
+
#variantHierarchies = {};
|
|
1121
|
+
#defaultCameraId = null;
|
|
1122
|
+
/**
|
|
1123
|
+
* @internal
|
|
1124
|
+
*/
|
|
1125
|
+
_addVariantCollection(hierarchyId) {
|
|
1126
|
+
if (!this.#variantHierarchies[hierarchyId]) this.#variantHierarchies[hierarchyId] = {
|
|
1127
|
+
id: hierarchyId,
|
|
1128
|
+
children: []
|
|
1129
|
+
};
|
|
1130
|
+
}
|
|
1131
|
+
/**
|
|
1132
|
+
* @internal
|
|
1133
|
+
*/
|
|
1134
|
+
_findAndAddToVariantSet(parentId, variant) {
|
|
1135
|
+
const addToNode = (node) => {
|
|
1136
|
+
if (!node) return false;
|
|
1137
|
+
if (node.id === parentId) {
|
|
1138
|
+
if (node.children) node.children.push(variant);
|
|
1139
|
+
else if (variant.type === "option") {
|
|
1140
|
+
if (!node.options) node.options = [];
|
|
1141
|
+
node.options.push(variant);
|
|
1142
|
+
} else {
|
|
1143
|
+
if (!node.nestedSets) node.nestedSets = [];
|
|
1144
|
+
node.nestedSets.push(variant);
|
|
1145
|
+
}
|
|
1146
|
+
return true;
|
|
1147
|
+
}
|
|
1148
|
+
if (Array.isArray(node.children)) {
|
|
1149
|
+
for (const child of node.children) if (addToNode(child)) return true;
|
|
1150
|
+
}
|
|
1151
|
+
if (Array.isArray(node.nestedSets)) {
|
|
1152
|
+
for (const nested of node.nestedSets) if (addToNode(nested)) return true;
|
|
1153
|
+
}
|
|
1154
|
+
if (Array.isArray(node.options)) {
|
|
1155
|
+
for (const option of node.options) if (addToNode(option)) return true;
|
|
1156
|
+
}
|
|
1157
|
+
return false;
|
|
1158
|
+
};
|
|
1159
|
+
for (const hierarchy of Object.values(this.#variantHierarchies)) if (addToNode(hierarchy)) return;
|
|
1160
|
+
}
|
|
1161
|
+
/**
|
|
1162
|
+
* @internal
|
|
1163
|
+
*/
|
|
1164
|
+
_addVariant(parentId, variant) {
|
|
1165
|
+
this._findAndAddToVariantSet(parentId, variant);
|
|
1166
|
+
}
|
|
1167
|
+
/**
|
|
1168
|
+
* @internal
|
|
1169
|
+
*/
|
|
1170
|
+
_exportVariantHierarchies() {
|
|
1171
|
+
return Object.entries(this.#variantHierarchies).map(([hierarchyId, hierarchy]) => ({
|
|
1172
|
+
hierarchyId: Number(hierarchyId),
|
|
1173
|
+
hierarchy
|
|
1174
|
+
}));
|
|
1175
|
+
}
|
|
1176
|
+
/**
|
|
1177
|
+
* @internal
|
|
1178
|
+
*/
|
|
1179
|
+
_setVariantSelection(variantId) {
|
|
1180
|
+
this.client.setVariantSelection(variantId);
|
|
1181
|
+
}
|
|
1182
|
+
get key() {
|
|
1183
|
+
return this.#key ?? null;
|
|
1184
|
+
}
|
|
1185
|
+
set key(key) {
|
|
1186
|
+
Stream._keyMap.delete(this.key);
|
|
1187
|
+
if (key || 0 === key) Stream._keyMap.set(key, this);
|
|
1188
|
+
this.#key = key;
|
|
1189
|
+
}
|
|
1190
|
+
#matrix = [
|
|
1191
|
+
1,
|
|
1192
|
+
0,
|
|
1193
|
+
0,
|
|
1194
|
+
0,
|
|
1195
|
+
0,
|
|
1196
|
+
1,
|
|
1197
|
+
0,
|
|
1198
|
+
0,
|
|
1199
|
+
0,
|
|
1200
|
+
0,
|
|
1201
|
+
1,
|
|
1202
|
+
0,
|
|
1203
|
+
0,
|
|
1204
|
+
0,
|
|
1205
|
+
0,
|
|
1206
|
+
1
|
|
1207
|
+
];
|
|
1208
|
+
get matrix() {
|
|
1209
|
+
return this.#matrix;
|
|
1210
|
+
}
|
|
1211
|
+
set matrix(matrix) {
|
|
1212
|
+
this.#matrix = matrix;
|
|
1213
|
+
const { engine, client } = this;
|
|
1214
|
+
const matrixBuffer = engine.malloc(this.#matrix.length * 4);
|
|
1215
|
+
engine.heapF32.set(Float32Array.from(this.#matrix), matrixBuffer / 4);
|
|
1216
|
+
client.setSceneObjectTransform(this.id, matrixBuffer);
|
|
1217
|
+
engine.free(matrixBuffer);
|
|
1218
|
+
}
|
|
1219
|
+
#opacity = 1;
|
|
1220
|
+
get opacity() {
|
|
1221
|
+
return this.#opacity;
|
|
1222
|
+
}
|
|
1223
|
+
set opacity(opacity) {
|
|
1224
|
+
this.#opacity = Math.min(1, Math.max(0, opacity));
|
|
1225
|
+
}
|
|
1226
|
+
get boundingBox() {
|
|
1227
|
+
const { engine, client } = this;
|
|
1228
|
+
const boxBuffer = engine.malloc(24);
|
|
1229
|
+
client.getWorldBoundingBox(this.id, boxBuffer);
|
|
1230
|
+
const [cX, cY, cZ, dX, dY, dZ] = Float32Array.from(engine.heapF32.subarray(boxBuffer / 4, boxBuffer / 4 + 6));
|
|
1231
|
+
if (cX === void 0 || cY === void 0 || cZ === void 0 || dX === void 0 || dY === void 0 || dZ === void 0) return;
|
|
1232
|
+
const box = {
|
|
1233
|
+
min: {
|
|
1234
|
+
x: cX - dX / 2,
|
|
1235
|
+
y: cY - dY / 2,
|
|
1236
|
+
z: cZ - dZ / 2
|
|
1237
|
+
},
|
|
1238
|
+
max: {
|
|
1239
|
+
x: cX + dX / 2,
|
|
1240
|
+
y: cY + dY / 2,
|
|
1241
|
+
z: cZ + dZ / 2
|
|
1242
|
+
},
|
|
1243
|
+
size: {
|
|
1244
|
+
x: dX,
|
|
1245
|
+
y: dY,
|
|
1246
|
+
z: dZ
|
|
1247
|
+
},
|
|
1248
|
+
center: {
|
|
1249
|
+
x: cX,
|
|
1250
|
+
y: cY,
|
|
1251
|
+
z: cZ
|
|
1252
|
+
}
|
|
1253
|
+
};
|
|
1254
|
+
Object.freeze(box);
|
|
1255
|
+
return box;
|
|
1256
|
+
}
|
|
1257
|
+
#modelRoots = /* @__PURE__ */ new Set();
|
|
1258
|
+
get modelRoots() {
|
|
1259
|
+
return new Set(this.#modelRoots);
|
|
1260
|
+
}
|
|
1261
|
+
/**
|
|
1262
|
+
* @deprecated Use `modelRoots` instead.
|
|
1263
|
+
*/
|
|
1264
|
+
get chunks() {
|
|
1265
|
+
return this.modelRoots;
|
|
1266
|
+
}
|
|
1267
|
+
constructor(options) {
|
|
1268
|
+
super();
|
|
1269
|
+
const { scene, uuid } = options;
|
|
1270
|
+
Object.defineProperties(this, {
|
|
1271
|
+
uuid: {
|
|
1272
|
+
value: uuid,
|
|
1273
|
+
enumerable: true
|
|
1274
|
+
},
|
|
1275
|
+
scene: {
|
|
1276
|
+
value: scene,
|
|
1277
|
+
enumerable: true
|
|
1278
|
+
},
|
|
1279
|
+
client: {
|
|
1280
|
+
value: scene.client,
|
|
1281
|
+
enumerable: true
|
|
1282
|
+
},
|
|
1283
|
+
miris: {
|
|
1284
|
+
value: scene.miris,
|
|
1285
|
+
enumerable: true
|
|
1286
|
+
},
|
|
1287
|
+
engine: {
|
|
1288
|
+
value: scene.miris.engine,
|
|
1289
|
+
enumerable: true
|
|
1290
|
+
}
|
|
1291
|
+
});
|
|
1292
|
+
this._initStream(options);
|
|
1293
|
+
Stream._idMap.set(this.id, this);
|
|
1294
|
+
scene.add(this);
|
|
1295
|
+
}
|
|
1296
|
+
_initStream({ uuid }) {
|
|
1297
|
+
const id = this.client.addStreamById(uuid, uuid, false);
|
|
1298
|
+
Object.defineProperty(this, "id", { value: id });
|
|
1104
1299
|
}
|
|
1105
|
-
|
|
1106
|
-
|
|
1300
|
+
/**
|
|
1301
|
+
* @internal
|
|
1302
|
+
*/
|
|
1303
|
+
async _onStreamLoaded() {
|
|
1304
|
+
if (this.#loadedRenderableData) return;
|
|
1305
|
+
const defaultCameraId = this.client.getDefaultCameraId(this.id);
|
|
1306
|
+
this.#defaultCameraId = defaultCameraId >= 0 ? defaultCameraId : null;
|
|
1307
|
+
this.dispatchEvent(new Event("streamloaded"));
|
|
1308
|
+
this.scene._onSceneLoaded(this);
|
|
1309
|
+
this.#loadedRenderableData = true;
|
|
1107
1310
|
}
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
return
|
|
1311
|
+
getDefaultCameraTransform() {
|
|
1312
|
+
if (this.#defaultCameraId === null) return null;
|
|
1313
|
+
return this.miris.getWorldTransform(this.client, this.#defaultCameraId);
|
|
1111
1314
|
}
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1315
|
+
/**
|
|
1316
|
+
* Returns the oriented bounding box of this stream's authored /Miris/ViewingVolume
|
|
1317
|
+
* prim, or null if no viewing volume is present in this stream's loaded structure.
|
|
1318
|
+
*
|
|
1319
|
+
* `min`/`max` are in the prim's local space and `matrix` is its
|
|
1320
|
+
* local-to-world transform, so the box stays oriented instead of collapsing
|
|
1321
|
+
* to a world AABB. This matches how the asset pipeline places cameras in the
|
|
1322
|
+
* volume (see ViewingVolumeCameraGenerator).
|
|
1323
|
+
* @internal
|
|
1324
|
+
*/
|
|
1325
|
+
_getViewingVolumeObb() {
|
|
1326
|
+
const viewingVolumeId = this.client.getViewingVolumeId(this.id);
|
|
1327
|
+
if (viewingVolumeId < 0) return null;
|
|
1328
|
+
const matrix = this.miris.getWorldTransform(this.client, viewingVolumeId);
|
|
1329
|
+
if (!matrix) return null;
|
|
1330
|
+
const { engine, client } = this;
|
|
1331
|
+
const boxBuffer = engine.malloc(24);
|
|
1332
|
+
try {
|
|
1333
|
+
client.getLocalBoundingBox(viewingVolumeId, boxBuffer);
|
|
1334
|
+
const box = Float32Array.from(engine.heapF32.subarray(boxBuffer / 4, boxBuffer / 4 + 6));
|
|
1335
|
+
if (box.length < 6 || !box.every((value) => Number.isFinite(value))) return null;
|
|
1336
|
+
const [cX = 0, cY = 0, cZ = 0, dX = 0, dY = 0, dZ = 0] = box;
|
|
1337
|
+
return {
|
|
1338
|
+
min: [
|
|
1339
|
+
cX - dX / 2,
|
|
1340
|
+
cY - dY / 2,
|
|
1341
|
+
cZ - dZ / 2
|
|
1342
|
+
],
|
|
1343
|
+
max: [
|
|
1344
|
+
cX + dX / 2,
|
|
1345
|
+
cY + dY / 2,
|
|
1346
|
+
cZ + dZ / 2
|
|
1347
|
+
],
|
|
1348
|
+
matrix
|
|
1349
|
+
};
|
|
1350
|
+
} finally {
|
|
1351
|
+
engine.free(boxBuffer);
|
|
1118
1352
|
}
|
|
1119
|
-
return true;
|
|
1120
|
-
}
|
|
1121
|
-
submitToWorker(requestIdLow, requestIdHigh, descriptorBuffer, contextPtr) {
|
|
1122
|
-
const decoder = [...this.#decoders.values()].reduce((previous, current) => {
|
|
1123
|
-
if (!previous) return current;
|
|
1124
|
-
return current.pendingRequests < previous.pendingRequests ? current : previous;
|
|
1125
|
-
});
|
|
1126
|
-
const requestKey = `${requestIdHigh}-${requestIdLow}`;
|
|
1127
|
-
this.#requestMap.set(requestKey, decoder);
|
|
1128
|
-
const firstId = AttributeCache.getConsecutiveIds(Object.keys(sparkAttributeList).length);
|
|
1129
|
-
decoder.ready.then(() => decoder.decode(requestIdLow, requestIdHigh, descriptorBuffer, contextPtr, firstId, this.#noJwt));
|
|
1130
|
-
return true;
|
|
1131
|
-
}
|
|
1132
|
-
terminateWorker() {
|
|
1133
|
-
for (const decoder of this.#decoders) decoder.terminate();
|
|
1134
|
-
this.#decoders.clear();
|
|
1135
|
-
}
|
|
1136
|
-
async requestWorkerHeapSnapshots(topN) {
|
|
1137
|
-
const decoders = [...this.#decoders];
|
|
1138
|
-
return (await Promise.allSettled(decoders.map((d) => d.ready.then(() => {
|
|
1139
|
-
let timer;
|
|
1140
|
-
const timeout = new Promise((resolve) => {
|
|
1141
|
-
timer = setTimeout(() => resolve(null), 5e3);
|
|
1142
|
-
});
|
|
1143
|
-
return Promise.race([d.heapSnapshot(topN).then((r) => r.snapshotJson), timeout]).finally(() => clearTimeout(timer));
|
|
1144
|
-
})))).map((r) => r.status === "fulfilled" ? r.value : null);
|
|
1145
1353
|
}
|
|
1146
|
-
|
|
1147
|
-
|
|
1354
|
+
/**
|
|
1355
|
+
* @internal
|
|
1356
|
+
*/
|
|
1357
|
+
_onRootLoaded() {
|
|
1358
|
+
this.dispatchEvent(new Event("rootloaded"));
|
|
1148
1359
|
}
|
|
1149
|
-
|
|
1150
|
-
|
|
1360
|
+
add(modelRoot) {
|
|
1361
|
+
this.#modelRoots.add(modelRoot);
|
|
1151
1362
|
}
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1363
|
+
end() {
|
|
1364
|
+
console.log("ending the stream");
|
|
1365
|
+
this.client.removeStream(this.id);
|
|
1366
|
+
for (const modelRoot of this.#modelRoots) modelRoot.dispose();
|
|
1367
|
+
this.#modelRoots.clear();
|
|
1368
|
+
Stream._idMap.delete(this.id);
|
|
1369
|
+
Stream._keyMap.delete(this.key);
|
|
1370
|
+
if (this.scene.streams.has(this)) this.scene.delete(this);
|
|
1157
1371
|
}
|
|
1158
1372
|
};
|
|
1159
1373
|
//#endregion
|
|
@@ -1203,7 +1417,8 @@ function createRefreshRateDetector() {
|
|
|
1203
1417
|
* fail if Miris is not ready. To ensure Miris is ready, await `miris.ready`
|
|
1204
1418
|
* or get `miris.pending`.
|
|
1205
1419
|
*/
|
|
1206
|
-
var Miris = class {
|
|
1420
|
+
var Miris = class Miris {
|
|
1421
|
+
static tryUseShark = typeof window === "undefined" || new URLSearchParams(window.location.search).get("shark") !== "0";
|
|
1207
1422
|
static _instance;
|
|
1208
1423
|
static async instance() {
|
|
1209
1424
|
const miris = this._instance ??= new this();
|
|
@@ -1295,19 +1510,90 @@ var Miris = class {
|
|
|
1295
1510
|
_xrSession = null;
|
|
1296
1511
|
_requestAnimationFrame = null;
|
|
1297
1512
|
signalResumeFromIdle() {}
|
|
1298
|
-
#
|
|
1513
|
+
#buildRuntimeSettings() {
|
|
1299
1514
|
const settings = new this.engine.RuntimeSettings();
|
|
1300
1515
|
settings.targetFramesPerSecond = this.#targetFramesPerSecond;
|
|
1301
1516
|
settings.xrModeActive = this._xrModeActive;
|
|
1302
1517
|
if (this.#splatCountBudgetOverride !== null) settings.splatCountBudget = this.#splatCountBudgetOverride;
|
|
1303
|
-
else if (this._xrModeActive) settings.splatCountBudget =
|
|
1518
|
+
else if (this._xrModeActive) settings.splatCountBudget = Miris._XR_SPLAT_COUNT_BUDGET;
|
|
1519
|
+
if (Miris.tryUseShark) settings.splatCountBudgetCap = Miris._sharkSplatBudgetCap();
|
|
1520
|
+
return settings;
|
|
1521
|
+
}
|
|
1522
|
+
#applyDisplaySettings() {
|
|
1523
|
+
const settings = this.#buildRuntimeSettings();
|
|
1304
1524
|
for (const scene of this.#scenes) scene.client.setRuntimeSettings(settings);
|
|
1305
1525
|
settings.delete();
|
|
1306
1526
|
}
|
|
1527
|
+
get _splatCountBudget() {
|
|
1528
|
+
const settings = this.#buildRuntimeSettings();
|
|
1529
|
+
const budget = settings.splatCountBudget;
|
|
1530
|
+
settings.delete();
|
|
1531
|
+
return budget;
|
|
1532
|
+
}
|
|
1307
1533
|
/**
|
|
1308
1534
|
* Why 43? Because the AVP throttles down to 45Hz :(
|
|
1309
1535
|
*/
|
|
1310
1536
|
static _XR_TARGET_FRAME_RATE = 43;
|
|
1537
|
+
/**
|
|
1538
|
+
* @internal
|
|
1539
|
+
* The splat budget an XR session runs at unless overridden.
|
|
1540
|
+
*/
|
|
1541
|
+
static _XR_SPLAT_COUNT_BUDGET = 2e5;
|
|
1542
|
+
/**
|
|
1543
|
+
* @internal
|
|
1544
|
+
* Shark's GPU splat capacity. A lower limit on mobile to avoid excessive memory allocations in
|
|
1545
|
+
* case we occasionally budget over a million prims (most phones can't do this).
|
|
1546
|
+
*/
|
|
1547
|
+
static _SHARK_SPLAT_CAPACITY_MOBILE = 1048576;
|
|
1548
|
+
static _SHARK_SPLAT_CAPACITY_DESKTOP = 3e6;
|
|
1549
|
+
/**
|
|
1550
|
+
* @internal
|
|
1551
|
+
* The cap on what the solver may budget, held ~20% under the GPU capacity above (the same
|
|
1552
|
+
* margin Unity's SharkSplatRenderSystem uses). Leaves headroom for un-garbage collected splats.
|
|
1553
|
+
*/
|
|
1554
|
+
static _SHARK_SPLAT_BUDGET_CAP_MOBILE = 85e4;
|
|
1555
|
+
static _SHARK_SPLAT_BUDGET_CAP_DESKTOP = 25e5;
|
|
1556
|
+
/**
|
|
1557
|
+
* @internal
|
|
1558
|
+
* Copied from spork so the dependency is not introduced to core.
|
|
1559
|
+
* iPad OS 13+ Safari defaults to desktop-class browsing and sends a
|
|
1560
|
+
* Macintosh UA carrying no iPad token, so use the touchPoints.
|
|
1561
|
+
*/
|
|
1562
|
+
static _isMobileDevice() {
|
|
1563
|
+
if (navigator.platform.toLowerCase().startsWith("win")) return false;
|
|
1564
|
+
if (navigator.maxTouchPoints > 0) return true;
|
|
1565
|
+
return /Mobi|Android|iPhone|iPad|iPod|Opera Mini|IEMobile/.test(navigator.userAgent);
|
|
1566
|
+
}
|
|
1567
|
+
static #sharkSplatCapacityLimit = null;
|
|
1568
|
+
/**
|
|
1569
|
+
* @internal
|
|
1570
|
+
*/
|
|
1571
|
+
static _sharkSplatCapacity() {
|
|
1572
|
+
const capacity = Miris._isMobileDevice() ? Miris._SHARK_SPLAT_CAPACITY_MOBILE : Miris._SHARK_SPLAT_CAPACITY_DESKTOP;
|
|
1573
|
+
const limit = Miris.#sharkSplatCapacityLimit;
|
|
1574
|
+
return limit === null ? capacity : Math.min(capacity, limit);
|
|
1575
|
+
}
|
|
1576
|
+
/**
|
|
1577
|
+
* @internal
|
|
1578
|
+
* The shark backend calls this once it has the device, when the device's storage-buffer
|
|
1579
|
+
* binding limit holds shark under _sharkSplatCapacity(). The budget cap follows with the same
|
|
1580
|
+
* margin, and every scene is told.
|
|
1581
|
+
*/
|
|
1582
|
+
static _limitSharkSplatCapacity(capacity) {
|
|
1583
|
+
const limit = Miris.#sharkSplatCapacityLimit;
|
|
1584
|
+
Miris.#sharkSplatCapacityLimit = limit === null ? capacity : Math.min(limit, capacity);
|
|
1585
|
+
const instance = Miris._instance;
|
|
1586
|
+
if (instance) instance.#applyDisplaySettings();
|
|
1587
|
+
}
|
|
1588
|
+
/**
|
|
1589
|
+
* @internal
|
|
1590
|
+
*/
|
|
1591
|
+
static _sharkSplatBudgetCap() {
|
|
1592
|
+
const mobile = Miris._isMobileDevice();
|
|
1593
|
+
const budgetCap = mobile ? Miris._SHARK_SPLAT_BUDGET_CAP_MOBILE : Miris._SHARK_SPLAT_BUDGET_CAP_DESKTOP;
|
|
1594
|
+
const capacity = mobile ? Miris._SHARK_SPLAT_CAPACITY_MOBILE : Miris._SHARK_SPLAT_CAPACITY_DESKTOP;
|
|
1595
|
+
return Math.floor(budgetCap * (Miris._sharkSplatCapacity() / capacity));
|
|
1596
|
+
}
|
|
1311
1597
|
#bindRequestAnimationFrame() {
|
|
1312
1598
|
this._requestAnimationFrame = this._xrModeActive ? this._xrSession.requestAnimationFrame.bind(this._xrSession) : window.requestAnimationFrame.bind(window);
|
|
1313
1599
|
}
|
|
@@ -1363,9 +1649,9 @@ var Miris = class {
|
|
|
1363
1649
|
const elapsed = this.#lastFrameTimestamp === null ? null : now - this.#lastFrameTimestamp;
|
|
1364
1650
|
this.#lastFrameTimestamp = now;
|
|
1365
1651
|
const frameTimeMs = elapsed !== null && elapsed <= 1e3 ? elapsed : null;
|
|
1652
|
+
if (this.#sharedContext) this.engine.beginFrame(this.#sharedContext, frameTimeMs ?? 0);
|
|
1366
1653
|
for (const scene of this.#scenes) {
|
|
1367
1654
|
const { client } = scene;
|
|
1368
|
-
if (frameTimeMs !== null) client.recordFrameTime(frameTimeMs);
|
|
1369
1655
|
client.updateSceneExecution();
|
|
1370
1656
|
const evicted = client.takeEvictedClientSideAttributeIds();
|
|
1371
1657
|
try {
|
|
@@ -1392,18 +1678,11 @@ var Miris = class {
|
|
|
1392
1678
|
this.#changes.length = 0;
|
|
1393
1679
|
}
|
|
1394
1680
|
}
|
|
1395
|
-
#retrieveFloatArray(objectId, arraySize, fn) {
|
|
1396
|
-
const arrayPtr = this.engine.malloc(arraySize * 4);
|
|
1397
|
-
fn(objectId, arrayPtr);
|
|
1398
|
-
const floatArray = this.engine.heapF32.subarray(arrayPtr >> 2, (arrayPtr >> 2) + arraySize).slice();
|
|
1399
|
-
this.engine.free(arrayPtr);
|
|
1400
|
-
return floatArray;
|
|
1401
|
-
}
|
|
1402
1681
|
getLocalTransform(client, sceneObjectId) {
|
|
1403
|
-
if (Number.isInteger(sceneObjectId) && sceneObjectId >= 0) return
|
|
1682
|
+
if (Number.isInteger(sceneObjectId) && sceneObjectId >= 0) return retrieveFloatArray(this.engine, sceneObjectId, 16, client.getLocalTransform.bind(client));
|
|
1404
1683
|
}
|
|
1405
1684
|
getWorldTransform(client, sceneObjectId) {
|
|
1406
|
-
if (Number.isInteger(sceneObjectId) && sceneObjectId >= 0) return
|
|
1685
|
+
if (Number.isInteger(sceneObjectId) && sceneObjectId >= 0) return retrieveFloatArray(this.engine, sceneObjectId, 16, client.getWorldTransform.bind(client));
|
|
1407
1686
|
}
|
|
1408
1687
|
#shouldUpdateSceneChanges() {
|
|
1409
1688
|
if (!this.#changeIds) return false;
|
|
@@ -1412,40 +1691,9 @@ var Miris = class {
|
|
|
1412
1691
|
if (this.#changeIds.deactivatedObjectsCount > 0) return true;
|
|
1413
1692
|
if (this.#changeIds.modifiedObjectsCount > 0) return true;
|
|
1414
1693
|
if (this.#changeIds.deletedObjectsCount > 0) return true;
|
|
1694
|
+
if (this.#changeIds.remaskedObjectsCount > 0) return true;
|
|
1415
1695
|
return false;
|
|
1416
1696
|
}
|
|
1417
|
-
#getDataFromAttribute(client, sceneObjectId, attributeName, outAttributeInfo) {
|
|
1418
|
-
const { engine } = this;
|
|
1419
|
-
if (!client.hasAttribute(sceneObjectId, attributeName)) return null;
|
|
1420
|
-
const { ptr } = outAttributeInfo.$$;
|
|
1421
|
-
const status = client.getAttribute(sceneObjectId, attributeName, ptr);
|
|
1422
|
-
if (status !== Engine.AquaStatus.Success) {
|
|
1423
|
-
console.warn(`GetAttribute failed for object id ${sceneObjectId} and attribute name ${attributeName}: status ${status}`);
|
|
1424
|
-
return null;
|
|
1425
|
-
}
|
|
1426
|
-
let paddedData;
|
|
1427
|
-
let originalSize;
|
|
1428
|
-
if (outAttributeInfo.clientSideId != 0n) ({paddedData: paddedData, originalSize} = AttributeCache.get(Number(outAttributeInfo.clientSideId)));
|
|
1429
|
-
else {
|
|
1430
|
-
const result = sparkAttributeFromRaw(attributeName, 0, engine.dataPtrView(outAttributeInfo));
|
|
1431
|
-
paddedData = result.paddedData;
|
|
1432
|
-
originalSize = result.originalSize;
|
|
1433
|
-
const myCacheEntry = AttributeCache.add({
|
|
1434
|
-
paddedData: result.paddedData,
|
|
1435
|
-
originalSize: result.originalSize
|
|
1436
|
-
});
|
|
1437
|
-
const takeStatus = client.takeAttribute(sceneObjectId, attributeName, BigInt(myCacheEntry));
|
|
1438
|
-
if (takeStatus !== Engine.AquaStatus.Success) {
|
|
1439
|
-
AttributeCache.remove(myCacheEntry);
|
|
1440
|
-
console.warn(`Failed to take attribute ${attributeName} for scene object ${sceneObjectId}: status ${takeStatus}`);
|
|
1441
|
-
return null;
|
|
1442
|
-
}
|
|
1443
|
-
}
|
|
1444
|
-
return {
|
|
1445
|
-
paddedData,
|
|
1446
|
-
originalSize
|
|
1447
|
-
};
|
|
1448
|
-
}
|
|
1449
1697
|
#updateScene(scene) {
|
|
1450
1698
|
const { engine } = this;
|
|
1451
1699
|
const { client, camera, lods } = scene;
|
|
@@ -1476,13 +1724,19 @@ var Miris = class {
|
|
|
1476
1724
|
const updatedTransform = this.updateParentedTransform(modelRootTransform, parentTransform);
|
|
1477
1725
|
if (!updatedTransform) continue;
|
|
1478
1726
|
modelRoot.transform = updatedTransform;
|
|
1727
|
+
} else if (sceneObjectType === Engine.SceneObjectType.LodOctree) {
|
|
1728
|
+
const modelRoot = ModelRoot.forId(client.getSceneObjectParent(sceneObjectId));
|
|
1729
|
+
if (!modelRoot) continue;
|
|
1730
|
+
const formatVersion = client.getAssetFormatVersion(sceneObjectId);
|
|
1731
|
+
scene._recordAssetFormat(modelRoot, formatVersion);
|
|
1479
1732
|
} else if (sceneObjectType == Engine.SceneObjectType.GaussianSplats) {
|
|
1480
1733
|
const modelRoot = scene.getModelRootForDescendentId(sceneObjectId);
|
|
1481
1734
|
if (!modelRoot) continue;
|
|
1482
1735
|
const lod = new Lod({
|
|
1483
1736
|
id: sceneObjectId,
|
|
1484
1737
|
modelRoot,
|
|
1485
|
-
lodStore: lods
|
|
1738
|
+
lodStore: lods,
|
|
1739
|
+
client
|
|
1486
1740
|
});
|
|
1487
1741
|
lod.transform = this.getLocalTransform(client, sceneObjectId);
|
|
1488
1742
|
createdLodIds.add(sceneObjectId);
|
|
@@ -1527,54 +1781,31 @@ var Miris = class {
|
|
|
1527
1781
|
if (sceneObjectType === Engine.SceneObjectType.LodOctree) scene._onFeatureData(sceneObjectId);
|
|
1528
1782
|
else if (sceneObjectType === Engine.SceneObjectType.GaussianSplats) {
|
|
1529
1783
|
const lodIndex = client.getLodIndex(sceneObjectId);
|
|
1530
|
-
const
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
}
|
|
1549
|
-
const worldBounds = this.#retrieveFloatArray(lod.id, 6, client.getWorldBoundingBox.bind(client));
|
|
1550
|
-
const localBounds = this.#retrieveFloatArray(lod.id, 6, client.getLocalBoundingBox.bind(client));
|
|
1551
|
-
lod.splats = attribute?.paddedData;
|
|
1552
|
-
lod.splatsExtendedData = attributeHigh?.paddedData ?? null;
|
|
1553
|
-
lod.useExtSplats = useExtSplats;
|
|
1554
|
-
lod.bounds = worldBounds;
|
|
1555
|
-
lod.localBounds = localBounds;
|
|
1556
|
-
lod.lodIndex = lodIndex;
|
|
1557
|
-
lod.paddingCount = (attribute?.paddedData.length - attribute.originalSize) / 4;
|
|
1558
|
-
if (this.useSphericalHarmonics) this.#addSphericalHarmonicsToLod(scene, sceneObjectId, lod);
|
|
1559
|
-
const entry = new Change({
|
|
1560
|
-
type: "modified",
|
|
1784
|
+
const lod = lods.forId(sceneObjectId);
|
|
1785
|
+
if (!lod) {
|
|
1786
|
+
console.warn(`Received modified event for LOD ${sceneObjectId} which does not exist.`);
|
|
1787
|
+
continue;
|
|
1788
|
+
}
|
|
1789
|
+
const worldBounds = retrieveFloatArray(this.engine, lod.id, 6, client.getWorldBoundingBox.bind(client));
|
|
1790
|
+
const localBounds = retrieveFloatArray(this.engine, lod.id, 6, client.getLocalBoundingBox.bind(client));
|
|
1791
|
+
lod.bounds = worldBounds;
|
|
1792
|
+
lod.localBounds = localBounds;
|
|
1793
|
+
lod.lodIndex = lodIndex;
|
|
1794
|
+
const entry = new Change({
|
|
1795
|
+
type: "modified",
|
|
1796
|
+
lod
|
|
1797
|
+
});
|
|
1798
|
+
this.#changes.push(entry);
|
|
1799
|
+
if (this.#pendingActivations.delete(sceneObjectId)) {
|
|
1800
|
+
this.#changes.push(new Change({
|
|
1801
|
+
type: "activated",
|
|
1561
1802
|
lod
|
|
1562
|
-
});
|
|
1563
|
-
this.#changes.push(
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
}));
|
|
1569
|
-
for (const [, deactLod] of this.#pendingDeactivations) this.#changes.push(new Change({
|
|
1570
|
-
type: "deactivated",
|
|
1571
|
-
lod: deactLod
|
|
1572
|
-
}));
|
|
1573
|
-
this.#pendingDeactivations.clear();
|
|
1574
|
-
}
|
|
1575
|
-
} finally {
|
|
1576
|
-
attributeInfo.delete();
|
|
1577
|
-
attributeInfoHigh.delete();
|
|
1803
|
+
}));
|
|
1804
|
+
for (const [, deactLod] of this.#pendingDeactivations) this.#changes.push(new Change({
|
|
1805
|
+
type: "deactivated",
|
|
1806
|
+
lod: deactLod
|
|
1807
|
+
}));
|
|
1808
|
+
this.#pendingDeactivations.clear();
|
|
1578
1809
|
}
|
|
1579
1810
|
}
|
|
1580
1811
|
}
|
|
@@ -1586,63 +1817,91 @@ var Miris = class {
|
|
|
1586
1817
|
} catch (e) {
|
|
1587
1818
|
console.warn("Failed to read scene metadata:", e);
|
|
1588
1819
|
}
|
|
1589
|
-
let deferredActivationsThisFrame = false;
|
|
1590
1820
|
for (const sceneObjectId of engine.activatedObjectIdsView(this.#changeIds)) if (client.getSceneObjectType(sceneObjectId) == Engine.SceneObjectType.GaussianSplats) {
|
|
1591
1821
|
const lod = lods.forId(sceneObjectId);
|
|
1592
|
-
if (lod
|
|
1822
|
+
if (lod) {
|
|
1823
|
+
lod._drawnOctantMask = client.getDrawnOctantMask(sceneObjectId);
|
|
1593
1824
|
const entry = new Change({
|
|
1594
1825
|
type: "activated",
|
|
1595
1826
|
lod
|
|
1596
1827
|
});
|
|
1597
1828
|
this.#changes.push(entry);
|
|
1598
|
-
} else if (lod) {
|
|
1599
|
-
this.#pendingActivations.add(sceneObjectId);
|
|
1600
|
-
deferredActivationsThisFrame = true;
|
|
1601
1829
|
}
|
|
1602
1830
|
}
|
|
1603
1831
|
for (const sceneObjectId of engine.deactivatedObjectIdsView(this.#changeIds)) if (client.getSceneObjectType(sceneObjectId) == Engine.SceneObjectType.GaussianSplats) {
|
|
1604
1832
|
this.#pendingActivations.delete(sceneObjectId);
|
|
1605
1833
|
if (!createdLodIds.has(sceneObjectId)) {
|
|
1606
1834
|
const lod = lods.forId(sceneObjectId);
|
|
1607
|
-
if (lod
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
});
|
|
1614
|
-
this.#changes.push(entry);
|
|
1615
|
-
}
|
|
1835
|
+
if (lod) {
|
|
1836
|
+
const entry = new Change({
|
|
1837
|
+
type: "deactivated",
|
|
1838
|
+
lod
|
|
1839
|
+
});
|
|
1840
|
+
this.#changes.push(entry);
|
|
1616
1841
|
}
|
|
1617
1842
|
}
|
|
1618
1843
|
}
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
try {
|
|
1628
|
-
const attribute = this.#getDataFromAttribute(client, sceneObjectId, attributeName, attributeInfo);
|
|
1629
|
-
if (attribute !== null) setter(attribute.paddedData, attributeInfo.maxValue.x);
|
|
1630
|
-
} finally {
|
|
1631
|
-
attributeInfo.delete();
|
|
1632
|
-
}
|
|
1844
|
+
for (const sceneObjectId of engine.remaskedObjectIdsView(this.#changeIds)) if (client.getSceneObjectType(sceneObjectId) == Engine.SceneObjectType.GaussianSplats) {
|
|
1845
|
+
const lod = lods.forId(sceneObjectId);
|
|
1846
|
+
if (lod) {
|
|
1847
|
+
lod._drawnOctantMask = client.getDrawnOctantMask(sceneObjectId);
|
|
1848
|
+
this.#changes.push(new Change({
|
|
1849
|
+
type: "remasked",
|
|
1850
|
+
lod
|
|
1851
|
+
}));
|
|
1633
1852
|
}
|
|
1634
|
-
}
|
|
1635
|
-
getAndAssignSh(AttributeNames.SPARK_PACKED_SH1, AttributeNames.SPARK_EXTENDED_SH1, (data, max) => outLod.setSh1(data, max));
|
|
1636
|
-
getAndAssignSh(AttributeNames.SPARK_PACKED_SH2, AttributeNames.SPARK_EXTENDED_SH2, (data, max) => outLod.setSh2(data, max));
|
|
1637
|
-
getAndAssignSh(AttributeNames.SPARK_PACKED_SH3, AttributeNames.SPARK_EXTENDED_SH3_A, (data, max) => outLod.setSh3(data, max));
|
|
1638
|
-
getAndAssignSh(AttributeNames.UNUSED, AttributeNames.SPARK_EXTENDED_SH3_B, (data, _max) => outLod.sh3ExtendedData = data);
|
|
1853
|
+
}
|
|
1639
1854
|
}
|
|
1640
|
-
|
|
1855
|
+
/**
|
|
1856
|
+
* @internal
|
|
1857
|
+
*
|
|
1858
|
+
* Drives one host's frame. Returns whether *that host's* canvas needs repainting.
|
|
1859
|
+
*
|
|
1860
|
+
* Both flags consulted here are consuming reads, and every scene on the page calls this once
|
|
1861
|
+
* per displayed frame from its own animation loop.
|
|
1862
|
+
*
|
|
1863
|
+
* @param scene the caller's scene - only its client's render flag is consumed.
|
|
1864
|
+
* @param ts the host's frame timestamp. If omitted, the document timeline supplies one.
|
|
1865
|
+
*/
|
|
1866
|
+
_updateForScene(scene, ts) {
|
|
1641
1867
|
this.#hostDriven = true;
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1868
|
+
const frameToken = ts ?? Miris.#frameToken();
|
|
1869
|
+
this._update(frameToken);
|
|
1870
|
+
return scene.client.takeRenderRequired() || this.#additionalRenderNeededThisFrame(frameToken);
|
|
1871
|
+
}
|
|
1872
|
+
static #warnedWithoutFrameToken = false;
|
|
1873
|
+
/**
|
|
1874
|
+
* The token that tells one displayed frame from the next, for a host that did not supply one.
|
|
1875
|
+
*
|
|
1876
|
+
* document.timeline.currentTime is the clock requestAnimationFrame reports, and it holds still
|
|
1877
|
+
* for the whole frame - so every scene on the page reads the same value without the host
|
|
1878
|
+
* passing anything. An immersive XR session is the exception: XRFrame runs its own clock, and
|
|
1879
|
+
* that host has to pass its own timestamp.
|
|
1880
|
+
*
|
|
1881
|
+
* TODO: none of this should be necessary. Every <miris-scene> runs its own
|
|
1882
|
+
* renderer.setAnimationLoop, so a page of N scenes has N requestAnimationFrame loops, and a
|
|
1883
|
+
* frame token is only needed because those N callers have to agree on which frame they are in.
|
|
1884
|
+
* One loop for the page - Miris driving a single rAF, scenes reading their own render flag from
|
|
1885
|
+
* it - would make the frame boundary a fact rather than something inferred, and this helper,
|
|
1886
|
+
* #lastUpdateTs and #additionalRenderFrameTs would all go away with it.
|
|
1887
|
+
*/
|
|
1888
|
+
static #frameToken() {
|
|
1889
|
+
const currentTime = Number(globalThis.document?.timeline?.currentTime);
|
|
1890
|
+
if (Number.isFinite(currentTime) && currentTime > 0) return currentTime;
|
|
1891
|
+
if (!Miris.#warnedWithoutFrameToken) {
|
|
1892
|
+
Miris.#warnedWithoutFrameToken = true;
|
|
1893
|
+
console.warn("Miris: no frame token available from document.timeline, so every update() counts as a new frame. Pass the host's frame timestamp to scene.update(ts) if this page holds more than one scene.");
|
|
1894
|
+
}
|
|
1895
|
+
return 0;
|
|
1896
|
+
}
|
|
1897
|
+
#additionalRenderFrameTs = -1;
|
|
1898
|
+
#additionalRenderNeeded = false;
|
|
1899
|
+
#additionalRenderNeededThisFrame(ts) {
|
|
1900
|
+
if (ts === 0 || ts !== this.#additionalRenderFrameTs) {
|
|
1901
|
+
this.#additionalRenderFrameTs = ts;
|
|
1902
|
+
this.#additionalRenderNeeded = this._computeAdditionalRenderNeeded();
|
|
1903
|
+
}
|
|
1904
|
+
return this.#additionalRenderNeeded;
|
|
1646
1905
|
}
|
|
1647
1906
|
applyChanges(_entries) {}
|
|
1648
1907
|
_computeAdditionalRenderNeeded() {
|
|
@@ -1651,6 +1910,9 @@ var Miris = class {
|
|
|
1651
1910
|
onColorSpaceDetected(_isLinear) {}
|
|
1652
1911
|
add(scene) {
|
|
1653
1912
|
this.#scenes.add(scene);
|
|
1913
|
+
const settings = this.#buildRuntimeSettings();
|
|
1914
|
+
scene.client.setRuntimeSettings(settings);
|
|
1915
|
+
settings.delete();
|
|
1654
1916
|
}
|
|
1655
1917
|
delete(scene) {
|
|
1656
1918
|
this.#scenes.delete(scene);
|
|
@@ -1671,7 +1933,14 @@ var Camera = class {
|
|
|
1671
1933
|
engine.heapF32.set(Float32Array.from(this.#matrix), matrixBuffer / 4);
|
|
1672
1934
|
client.setMainCameraTransform(matrixBuffer);
|
|
1673
1935
|
engine.free(matrixBuffer);
|
|
1674
|
-
client.setMainCameraViewFrustum(this.#aspect, this.#fov, this.#near, this.#far);
|
|
1936
|
+
client.setMainCameraViewFrustum(this.#aspect, this.#fov, this.#near, this.#far, this.#viewportHeight);
|
|
1937
|
+
}
|
|
1938
|
+
#viewportHeight = 0;
|
|
1939
|
+
get viewportHeight() {
|
|
1940
|
+
return this.#viewportHeight;
|
|
1941
|
+
}
|
|
1942
|
+
set viewportHeight(viewportHeight) {
|
|
1943
|
+
this.#viewportHeight = viewportHeight;
|
|
1675
1944
|
}
|
|
1676
1945
|
#aspect;
|
|
1677
1946
|
get aspect() {
|
|
@@ -1708,7 +1977,8 @@ var Camera = class {
|
|
|
1708
1977
|
set matrix(matrix) {
|
|
1709
1978
|
this.#matrix = matrix;
|
|
1710
1979
|
}
|
|
1711
|
-
constructor({ aspect, fov, near, far, matrix, scene }) {
|
|
1980
|
+
constructor({ aspect, fov, near, far, matrix, scene, viewportHeight }) {
|
|
1981
|
+
this.#viewportHeight = viewportHeight ?? 0;
|
|
1712
1982
|
this.#aspect = aspect;
|
|
1713
1983
|
this.#fov = fov;
|
|
1714
1984
|
this.#near = near;
|
|
@@ -1789,6 +2059,9 @@ var Client = class {
|
|
|
1789
2059
|
getSceneObjectType(...args) {
|
|
1790
2060
|
return this.engine.getSceneObjectType(this.handle, ...args);
|
|
1791
2061
|
}
|
|
2062
|
+
getDrawnOctantMask(...args) {
|
|
2063
|
+
return this.engine.getDrawnOctantMask(this.handle, ...args);
|
|
2064
|
+
}
|
|
1792
2065
|
getLocalTransform(...args) {
|
|
1793
2066
|
return this.engine.getLocalTransform(this.handle, ...args);
|
|
1794
2067
|
}
|
|
@@ -1834,6 +2107,12 @@ var Client = class {
|
|
|
1834
2107
|
getFeatureState(...args) {
|
|
1835
2108
|
return this.engine.getFeatureState(this.handle, ...args);
|
|
1836
2109
|
}
|
|
2110
|
+
getAssetFormatVersion(...args) {
|
|
2111
|
+
return this.engine.getAssetFormatVersion(this.handle, ...args);
|
|
2112
|
+
}
|
|
2113
|
+
getDrMapLadderRoughnessLevels(...args) {
|
|
2114
|
+
return this.engine.getDrMapLadderRoughnessLevels(this.handle, ...args);
|
|
2115
|
+
}
|
|
1837
2116
|
getName(...args) {
|
|
1838
2117
|
return this.engine.getName(this.handle, ...args);
|
|
1839
2118
|
}
|
|
@@ -1855,15 +2134,53 @@ var Client = class {
|
|
|
1855
2134
|
updateSceneExecution(...args) {
|
|
1856
2135
|
return this.engine.updateSceneExecution(this.handle, ...args);
|
|
1857
2136
|
}
|
|
1858
|
-
|
|
1859
|
-
|
|
2137
|
+
};
|
|
2138
|
+
//#endregion
|
|
2139
|
+
//#region packages/core/drMapLadder.ts
|
|
2140
|
+
/**
|
|
2141
|
+
* Which roughness-ladder levels still need uploading, per scene object.
|
|
2142
|
+
*
|
|
2143
|
+
* OctreeSceneManager fetches every level twice under the one attribute name — a low-res
|
|
2144
|
+
* bootstrap, then the full map — so "have I seen this level?" answers yes to the bootstrap and
|
|
2145
|
+
* the full map never reaches the renderer. The size of the bytes is what tells the two apart.
|
|
2146
|
+
*
|
|
2147
|
+
* Keyed by scene object as well as level: one of these serves every octree in a scene, and two
|
|
2148
|
+
* whose ladders share a level's size would otherwise suppress each other.
|
|
2149
|
+
*/
|
|
2150
|
+
var DrMapLadderTracker = class {
|
|
2151
|
+
#levelBytes = /* @__PURE__ */ new Map();
|
|
2152
|
+
needsUpload(sceneObjectId, level, byteCount) {
|
|
2153
|
+
return byteCount > 0 && this.#levelBytes.get(`${sceneObjectId}:${level}`) !== byteCount;
|
|
2154
|
+
}
|
|
2155
|
+
markActedOn(sceneObjectId, level, byteCount) {
|
|
2156
|
+
this.#levelBytes.set(`${sceneObjectId}:${level}`, byteCount);
|
|
1860
2157
|
}
|
|
2158
|
+
reset() {
|
|
2159
|
+
this.#levelBytes.clear();
|
|
2160
|
+
}
|
|
2161
|
+
};
|
|
2162
|
+
function drMapLadderAttributeName(level) {
|
|
2163
|
+
return `drMap_l${level}`;
|
|
2164
|
+
}
|
|
2165
|
+
//#endregion
|
|
2166
|
+
//#region packages/core/assetFormat.ts
|
|
2167
|
+
var AssetFormat = {
|
|
2168
|
+
GaussianSplats: 1,
|
|
2169
|
+
GES: 2
|
|
1861
2170
|
};
|
|
2171
|
+
var ASSET_FORMAT_NAMES = {
|
|
2172
|
+
[AssetFormat.GaussianSplats]: "gaussian splats",
|
|
2173
|
+
[AssetFormat.GES]: "GES"
|
|
2174
|
+
};
|
|
2175
|
+
function assetFormatName(formatVersion) {
|
|
2176
|
+
return ASSET_FORMAT_NAMES[formatVersion] ?? `unknown format ${formatVersion}`;
|
|
2177
|
+
}
|
|
1862
2178
|
//#endregion
|
|
1863
2179
|
//#region packages/core/scene.ts
|
|
1864
2180
|
var Scene = class Scene extends EventTarget {
|
|
1865
2181
|
static #idMap = /* @__PURE__ */ new Map();
|
|
1866
2182
|
static #keyMap = /* @__PURE__ */ new Map();
|
|
2183
|
+
#drMapLadder = new DrMapLadderTracker();
|
|
1867
2184
|
#camera = null;
|
|
1868
2185
|
get camera() {
|
|
1869
2186
|
return this.#camera;
|
|
@@ -1871,7 +2188,6 @@ var Scene = class Scene extends EventTarget {
|
|
|
1871
2188
|
set camera(camera) {
|
|
1872
2189
|
this.#camera = camera;
|
|
1873
2190
|
}
|
|
1874
|
-
#defaultCameraId = null;
|
|
1875
2191
|
static forId(id) {
|
|
1876
2192
|
return Scene.#idMap.get(id);
|
|
1877
2193
|
}
|
|
@@ -1889,6 +2205,13 @@ var Scene = class Scene extends EventTarget {
|
|
|
1889
2205
|
}
|
|
1890
2206
|
#streams = /* @__PURE__ */ new Set();
|
|
1891
2207
|
#streamObjectIdToStream = /* @__PURE__ */ new Map();
|
|
2208
|
+
#assetFormat = void 0;
|
|
2209
|
+
/**
|
|
2210
|
+
* @internal
|
|
2211
|
+
*/
|
|
2212
|
+
get _assetFormat() {
|
|
2213
|
+
return this.#assetFormat;
|
|
2214
|
+
}
|
|
1892
2215
|
get viewerKey() {
|
|
1893
2216
|
return this.client.viewerKey;
|
|
1894
2217
|
}
|
|
@@ -1929,44 +2252,24 @@ var Scene = class Scene extends EventTarget {
|
|
|
1929
2252
|
Scene.#idMap.set(this.id, this);
|
|
1930
2253
|
miris.add(this);
|
|
1931
2254
|
}
|
|
2255
|
+
/**
|
|
2256
|
+
* Drives a frame and answers whether *this* scene's canvas needs repainting. Call it once per
|
|
2257
|
+
* displayed frame from the host's animation loop, and render when it returns true.
|
|
2258
|
+
*
|
|
2259
|
+
* Every scene on the page calls this from its own loop. The first call in a displayed frame
|
|
2260
|
+
* drives one engine tick for all of them; the rest recognise the frame and reuse it.
|
|
2261
|
+
*
|
|
2262
|
+
* @param ts the host's frame timestamp. Optional - the document timeline supplies one, and it
|
|
2263
|
+
* reads the same for every scene in a displayed frame. Pass it when the host runs its own
|
|
2264
|
+
* clock, as an immersive XR session does, because XRFrame time is not the document timeline.
|
|
2265
|
+
*/
|
|
2266
|
+
update(ts) {
|
|
2267
|
+
return this.miris._updateForScene(this, ts);
|
|
2268
|
+
}
|
|
1932
2269
|
dispose() {
|
|
1933
2270
|
this.close();
|
|
1934
2271
|
this.client.dispose();
|
|
1935
2272
|
}
|
|
1936
|
-
#updateSceneCameraData() {
|
|
1937
|
-
const defaultCameraId = this.client.getDefaultCameraId();
|
|
1938
|
-
this.#defaultCameraId = defaultCameraId >= 0 ? defaultCameraId : null;
|
|
1939
|
-
}
|
|
1940
|
-
/**
|
|
1941
|
-
* Returns the world-space AABB of the authored /Miris/ViewingVolume prim,
|
|
1942
|
-
* or null if no viewing volume is present in the loaded structure.
|
|
1943
|
-
* @internal
|
|
1944
|
-
*/
|
|
1945
|
-
_getViewingVolumeBounds() {
|
|
1946
|
-
const viewingVolumeId = this.client.getViewingVolumeId();
|
|
1947
|
-
if (viewingVolumeId < 0) return null;
|
|
1948
|
-
const { engine, client } = this;
|
|
1949
|
-
const boxBuffer = engine.malloc(24);
|
|
1950
|
-
try {
|
|
1951
|
-
client.getWorldBoundingBox(viewingVolumeId, boxBuffer);
|
|
1952
|
-
const [cX, cY, cZ, dX, dY, dZ] = Float32Array.from(engine.heapF32.subarray(boxBuffer / 4, boxBuffer / 4 + 6));
|
|
1953
|
-
if (cX === void 0 || cY === void 0 || cZ === void 0 || dX === void 0 || dY === void 0 || dZ === void 0) return null;
|
|
1954
|
-
return {
|
|
1955
|
-
min: [
|
|
1956
|
-
cX - dX / 2,
|
|
1957
|
-
cY - dY / 2,
|
|
1958
|
-
cZ - dZ / 2
|
|
1959
|
-
],
|
|
1960
|
-
max: [
|
|
1961
|
-
cX + dX / 2,
|
|
1962
|
-
cY + dY / 2,
|
|
1963
|
-
cZ + dZ / 2
|
|
1964
|
-
]
|
|
1965
|
-
};
|
|
1966
|
-
} finally {
|
|
1967
|
-
engine.free(boxBuffer);
|
|
1968
|
-
}
|
|
1969
|
-
}
|
|
1970
2273
|
async fetchAssets(tags) {
|
|
1971
2274
|
if (!this.viewerKey) throw new Error("Could not fetch assets because there is no viewer key");
|
|
1972
2275
|
const vector = new this.engine.StringVector();
|
|
@@ -1997,10 +2300,6 @@ var Scene = class Scene extends EventTarget {
|
|
|
1997
2300
|
vector.delete();
|
|
1998
2301
|
return assets;
|
|
1999
2302
|
}
|
|
2000
|
-
getDefaultCameraTransform() {
|
|
2001
|
-
if (this.#defaultCameraId === null) return null;
|
|
2002
|
-
return this.miris.getWorldTransform(this.client, this.#defaultCameraId);
|
|
2003
|
-
}
|
|
2004
2303
|
add(stream) {
|
|
2005
2304
|
this.#streams.add(stream);
|
|
2006
2305
|
this.#streamObjectIdToStream.set(stream.id, stream);
|
|
@@ -2016,6 +2315,14 @@ var Scene = class Scene extends EventTarget {
|
|
|
2016
2315
|
for (const [, stream] of this.#streamObjectIdToStream) for (const modelRoot of stream.modelRoots) if (this.client.isSceneObjectAncestorOf(modelRoot.id, descendentObjectId)) return modelRoot;
|
|
2017
2316
|
return null;
|
|
2018
2317
|
}
|
|
2318
|
+
_recordAssetFormat(modelRoot, formatVersion) {
|
|
2319
|
+
if (this.#assetFormat === void 0) {
|
|
2320
|
+
this.#assetFormat = formatVersion;
|
|
2321
|
+
return;
|
|
2322
|
+
}
|
|
2323
|
+
if (this.#assetFormat === formatVersion) return;
|
|
2324
|
+
console.error(`We don't yet support two or more assets with different format versions in the same scene: this one is rendering ${assetFormatName(this.#assetFormat)} and "${this.client.getName(modelRoot.id)}" is ${assetFormatName(formatVersion)}, so it will be drawn with the wrong pipeline.`);
|
|
2325
|
+
}
|
|
2019
2326
|
/**
|
|
2020
2327
|
* @internal
|
|
2021
2328
|
*/
|
|
@@ -2094,9 +2401,42 @@ var Scene = class Scene extends EventTarget {
|
|
|
2094
2401
|
return null;
|
|
2095
2402
|
}
|
|
2096
2403
|
/**
|
|
2404
|
+
* Emits one "drmapladderloaded" per roughness-ladder level whose bytes have changed since it
|
|
2405
|
+
* was last emitted. Called for every modified LodOctree, which is what the levels hang off and
|
|
2406
|
+
* also how each one's arrival is announced.
|
|
2407
|
+
*
|
|
2408
|
+
* Does not take the attribute, unlike _getDrMap: the full map replaces the bootstrap under the
|
|
2409
|
+
* same name, so taking it would leave the replacement nothing to overwrite.
|
|
2410
|
+
*
|
|
2411
|
+
* @internal
|
|
2412
|
+
*/
|
|
2413
|
+
_onDrMapLadder(sceneObjectId) {
|
|
2414
|
+
const sigmas = this.client.getDrMapLadderRoughnessLevels(sceneObjectId);
|
|
2415
|
+
if (sigmas.length === 0) return;
|
|
2416
|
+
for (let level = 0; level < sigmas.length; level++) {
|
|
2417
|
+
const name = drMapLadderAttributeName(level);
|
|
2418
|
+
const byteCount = getRawAttributeByteLength(this.engine, this.client, sceneObjectId, name);
|
|
2419
|
+
if (!this.#drMapLadder.needsUpload(sceneObjectId, level, byteCount)) continue;
|
|
2420
|
+
const bytes = getRawByteAttribute(this.engine, this.client, sceneObjectId, name);
|
|
2421
|
+
if (bytes === null) continue;
|
|
2422
|
+
this.#drMapLadder.markActedOn(sceneObjectId, level, bytes.byteLength);
|
|
2423
|
+
this.dispatchEvent(new CustomEvent("drmapladderloaded", { detail: {
|
|
2424
|
+
level,
|
|
2425
|
+
sigmaDeg: sigmas[level] ?? 0,
|
|
2426
|
+
bytes,
|
|
2427
|
+
sceneObjectId
|
|
2428
|
+
} }));
|
|
2429
|
+
}
|
|
2430
|
+
}
|
|
2431
|
+
/**
|
|
2097
2432
|
* @internal
|
|
2098
2433
|
*/
|
|
2099
2434
|
async _onFeatureData(sceneObjectId) {
|
|
2435
|
+
try {
|
|
2436
|
+
this._onDrMapLadder(sceneObjectId);
|
|
2437
|
+
} catch (error) {
|
|
2438
|
+
console.error("[miris] dr map ladder read failed", error);
|
|
2439
|
+
}
|
|
2100
2440
|
const drMapData = await this._getDrMap(sceneObjectId);
|
|
2101
2441
|
if (drMapData !== null) this.dispatchEvent(new CustomEvent("drmaploaded", { detail: {
|
|
2102
2442
|
bytes: drMapData.bytes,
|
|
@@ -2117,21 +2457,22 @@ var Scene = class Scene extends EventTarget {
|
|
|
2117
2457
|
/**
|
|
2118
2458
|
* @internal
|
|
2119
2459
|
*/
|
|
2120
|
-
_onSceneLoaded() {
|
|
2121
|
-
this
|
|
2122
|
-
this.dispatchEvent(new Event("sceneloaded"));
|
|
2460
|
+
_onSceneLoaded(stream) {
|
|
2461
|
+
this.dispatchEvent(new CustomEvent("sceneloaded", { detail: { stream } }));
|
|
2123
2462
|
}
|
|
2124
2463
|
delete(stream) {
|
|
2125
2464
|
this.#streams.delete(stream);
|
|
2126
2465
|
this.#streamObjectIdToStream.delete(stream.id);
|
|
2466
|
+
if (this.#streams.size === 0) this.#assetFormat = void 0;
|
|
2127
2467
|
if (Stream.forId(stream.id)) stream.end();
|
|
2128
2468
|
}
|
|
2129
2469
|
close() {
|
|
2130
2470
|
for (const stream of this.streams) stream.end();
|
|
2471
|
+
this.#drMapLadder.reset();
|
|
2131
2472
|
Scene.#idMap.delete(this.id);
|
|
2132
2473
|
Scene.#keyMap.delete(this.key);
|
|
2133
2474
|
if (this.miris.scenes.has(this)) this.miris.delete(this);
|
|
2134
2475
|
}
|
|
2135
2476
|
};
|
|
2136
2477
|
//#endregion
|
|
2137
|
-
export { Camera, Lod, LodStore, Miris, ModelRoot, Scene, Stream };
|
|
2478
|
+
export { AssetFormat, AttributeNames, Camera, Lod, LodStore, Miris, ModelRoot, Scene, Stream, sparkAttributeList };
|