Files
spark/dist/spark.cjs.min.js
T
sparkjsdev[bot] b829d125ab Bump dist build
2025-07-23 17:06:34 +00:00

1165 lines
536 KiB
JavaScript

"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const gA=require("three");var ke=typeof document<"u"?document.currentScript:null;function FQ(t){const A=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const e in t)if(e!=="default"){const g=Object.getOwnPropertyDescriptor(t,e);Object.defineProperty(A,e,g.get?g:{enumerable:!0,get:()=>t[e]})}}return A.default=t,Object.freeze(A)}const E=FQ(gA),GQ=new gA.OrthographicCamera(-1,1,1,-1,0,1);class xQ extends gA.BufferGeometry{constructor(){super(),this.setAttribute("position",new gA.Float32BufferAttribute([-1,3,0,-1,-1,0,3,-1,0],3)),this.setAttribute("uv",new gA.Float32BufferAttribute([0,2,0,0,2,0],2))}}const kQ=new xQ;class dg{constructor(A){this._mesh=new gA.Mesh(kQ,A)}dispose(){this._mesh.geometry.dispose()}render(A){A.render(this._mesh,GQ)}get material(){return this._mesh.material}set material(A){this._mesh.material=A}}var oA=Uint8Array,Mt=Uint16Array,RQ=Int32Array,fg=new oA([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),Mg=new oA([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),UQ=new oA([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Sg=function(t,A){for(var e=new Mt(31),g=0;g<31;++g)e[g]=A+=1<<t[g-1];for(var I=new RQ(e[30]),g=1;g<30;++g)for(var s=e[g];s<e[g+1];++s)I[s]=s-e[g]<<5|g;return{b:e,r:I}},mg=Sg(fg,2),Ng=mg.b,LQ=mg.r;Ng[28]=258,LQ[258]=28;var YQ=Sg(Mg,0),JQ=YQ.b,ve=new Mt(32768);for(var IA=0;IA<32768;++IA){var tt=(IA&43690)>>1|(IA&21845)<<1;tt=(tt&52428)>>2|(tt&13107)<<2,tt=(tt&61680)>>4|(tt&3855)<<4,ve[IA]=((tt&65280)>>8|(tt&255)<<8)>>1}var Kt=function(t,A,e){for(var g=t.length,I=0,s=new Mt(A);I<g;++I)t[I]&&++s[t[I]-1];var B=new Mt(A);for(I=1;I<A;++I)B[I]=B[I-1]+s[I-1]<<1;var i;if(e){i=new Mt(1<<A);var Q=15-A;for(I=0;I<g;++I)if(t[I])for(var C=I<<4|t[I],a=A-t[I],n=B[t[I]-1]++<<a,o=n|(1<<a)-1;n<=o;++n)i[ve[n]>>Q]=C}else for(i=new Mt(g),I=0;I<g;++I)t[I]&&(i[I]=ve[B[t[I]-1]++]>>15-t[I]);return i},$t=new oA(288);for(var IA=0;IA<144;++IA)$t[IA]=8;for(var IA=144;IA<256;++IA)$t[IA]=9;for(var IA=256;IA<280;++IA)$t[IA]=7;for(var IA=280;IA<288;++IA)$t[IA]=8;var Fg=new oA(32);for(var IA=0;IA<32;++IA)Fg[IA]=5;var bQ=Kt($t,9,1),vQ=Kt(Fg,5,1),Re=function(t){for(var A=t[0],e=1;e<t.length;++e)t[e]>A&&(A=t[e]);return A},vA=function(t,A,e){var g=A/8|0;return(t[g]|t[g+1]<<8)>>(A&7)&e},Ue=function(t,A){var e=A/8|0;return(t[e]|t[e+1]<<8|t[e+2]<<16)>>(A&7)},Gg=function(t){return(t+7)/8|0},Nt=function(t,A,e){return(A==null||A<0)&&(A=0),(e==null||e>t.length)&&(e=t.length),new oA(t.subarray(A,e))},TQ=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],fA=function(t,A,e){var g=new Error(A||TQ[t]);if(g.code=t,Error.captureStackTrace&&Error.captureStackTrace(g,fA),!e)throw g;return g},xg=function(t,A,e,g){var I=t.length,s=g?g.length:0;if(!I||A.f&&!A.l)return e||new oA(0);var B=!e,i=B||A.i!=2,Q=A.i;B&&(e=new oA(I*3));var C=function(dA){var SA=e.length;if(dA>SA){var cA=new oA(Math.max(SA*2,dA));cA.set(e),e=cA}},a=A.f||0,n=A.p||0,o=A.b||0,r=A.l,h=A.d,c=A.m,l=A.n,u=I*8;do{if(!r){a=vA(t,n,1);var w=vA(t,n+1,3);if(n+=3,w)if(w==1)r=bQ,h=vQ,c=9,l=5;else if(w==2){var m=vA(t,n,31)+257,M=vA(t,n+10,15)+4,p=m+vA(t,n+5,31)+1;n+=14;for(var f=new oA(p),R=new oA(19),N=0;N<M;++N)R[UQ[N]]=vA(t,n+N*3,7);n+=M*3;for(var S=Re(R),L=(1<<S)-1,x=Kt(R,S,1),N=0;N<p;){var G=x[vA(t,n,L)];n+=G&15;var D=G>>4;if(D<16)f[N++]=D;else{var U=0,J=0;for(D==16?(J=3+vA(t,n,3),n+=2,U=f[N-1]):D==17?(J=3+vA(t,n,7),n+=3):D==18&&(J=11+vA(t,n,127),n+=7);J--;)f[N++]=U}}var P=f.subarray(0,m),T=f.subarray(m);c=Re(P),l=Re(T),r=Kt(P,c,1),h=Kt(T,l,1)}else fA(1);else{var D=Gg(n)+4,y=t[D-4]|t[D-3]<<8,d=D+y;if(d>I){Q&&fA(0);break}i&&C(o+y),e.set(t.subarray(D,d),o),A.b=o+=y,A.p=n=d*8,A.f=a;continue}if(n>u){Q&&fA(0);break}}i&&C(o+131072);for(var eA=(1<<c)-1,z=(1<<l)-1,_=n;;_=n){var U=r[Ue(t,n)&eA],H=U>>4;if(n+=U&15,n>u){Q&&fA(0);break}if(U||fA(2),H<256)e[o++]=H;else if(H==256){_=n,r=null;break}else{var O=H-254;if(H>264){var N=H-257,W=fg[N];O=vA(t,n,(1<<W)-1)+Ng[N],n+=W}var $=h[Ue(t,n)&z],Y=$>>4;$||fA(3),n+=$&15;var T=JQ[Y];if(Y>3){var W=Mg[Y];T+=Ue(t,n)&(1<<W)-1,n+=W}if(n>u){Q&&fA(0);break}i&&C(o+131072);var yA=o+O;if(o<T){var aA=s-T,pA=Math.min(T,yA);for(aA+o<0&&fA(3);o<pA;++o)e[o]=g[aA+o]}for(;o<yA;++o)e[o]=e[o-T]}}A.l=r,A.p=_,A.b=o,A.f=a,r&&(a=1,A.m=c,A.d=h,A.n=l)}while(!a);return o!=e.length&&B?Nt(e,0,o):e.subarray(0,o)},HQ=new oA(0),qA=function(t,A){return t[A]|t[A+1]<<8},TA=function(t,A){return(t[A]|t[A+1]<<8|t[A+2]<<16|t[A+3]<<24)>>>0},Le=function(t,A){return TA(t,A)+TA(t,A+4)*4294967296},KQ=function(t){(t[0]!=31||t[1]!=139||t[2]!=8)&&fA(6,"invalid gzip data");var A=t[3],e=10;A&4&&(e+=(t[10]|t[11]<<8)+2);for(var g=(A>>3&1)+(A>>4&1);g>0;g-=!t[e++]);return e+(A&2)},Ye=function(){function t(A,e){typeof A=="function"&&(e=A,A={}),this.ondata=e;var g=A&&A.dictionary&&A.dictionary.subarray(-32768);this.s={i:0,b:g?g.length:0},this.o=new oA(32768),this.p=new oA(0),g&&this.o.set(g)}return t.prototype.e=function(A){if(this.ondata||fA(5),this.d&&fA(4),!this.p.length)this.p=A;else if(A.length){var e=new oA(this.p.length+A.length);e.set(this.p),e.set(A,this.p.length),this.p=e}},t.prototype.c=function(A){this.s.i=+(this.d=A||!1);var e=this.s.b,g=xg(this.p,this.s,this.o);this.ondata(Nt(g,e,this.s.b),this.d),this.o=Nt(g,this.s.b-32768),this.s.b=this.o.length,this.p=Nt(this.p,this.s.p/8|0),this.s.p&=7},t.prototype.push=function(A,e){this.e(A),this.c(e)},t}();function qQ(t,A){return xg(t,{i:2},A&&A.out,A&&A.dictionary)}var kg=function(){function t(A,e){this.v=1,this.r=0,Ye.call(this,A,e)}return t.prototype.push=function(A,e){if(Ye.prototype.e.call(this,A),this.r+=A.length,this.v){var g=this.p.subarray(this.v-1),I=g.length>3?KQ(g):4;if(I>g.length){if(!e)return}else this.v>1&&this.onmember&&this.onmember(this.r-g.length);this.p=g.subarray(I),this.v=0}Ye.prototype.c.call(this,e),this.s.f&&!this.s.l&&!e&&(this.v=Gg(this.s.p)+9,this.s={i:0},this.o=new oA(0),this.push(new oA(0),e))},t}(),Te=typeof TextDecoder<"u"&&new TextDecoder,zQ=0;try{Te.decode(HQ,{stream:!0}),zQ=1}catch{}var VQ=function(t){for(var A="",e=0;;){var g=t[e++],I=(g>127)+(g>223)+(g>239);if(e+I>t.length)return{s:A,r:Nt(t,e-1)};I?I==3?(g=((g&15)<<18|(t[e++]&63)<<12|(t[e++]&63)<<6|t[e++]&63)-65536,A+=String.fromCharCode(55296|g>>10,56320|g&1023)):I&1?A+=String.fromCharCode((g&31)<<6|t[e++]&63):A+=String.fromCharCode((g&15)<<12|(t[e++]&63)<<6|t[e++]&63):A+=String.fromCharCode(g)}};function ZQ(t,A){if(A){for(var e="",g=0;g<t.length;g+=16384)e+=String.fromCharCode.apply(null,t.subarray(g,g+16384));return e}else{if(Te)return Te.decode(t);var I=VQ(t),s=I.s,e=I.r;return e.length&&fA(8),s}}var XQ=function(t,A){return A+30+qA(t,A+26)+qA(t,A+28)},WQ=function(t,A,e){var g=qA(t,A+28),I=ZQ(t.subarray(A+46,A+46+g),!(qA(t,A+8)&2048)),s=A+46+g,B=TA(t,A+20),i=e&&B==4294967295?jQ(t,s):[B,TA(t,A+24),TA(t,A+42)],Q=i[0],C=i[1],a=i[2];return[qA(t,A+10),Q,C,I,s+qA(t,A+30)+qA(t,A+32),a]},jQ=function(t,A){for(;qA(t,A)!=1;A+=4+qA(t,A+2));return[Le(t,A+12),Le(t,A+4),Le(t,A+20)]};function PQ(t,A){for(var e={},g=t.length-22;TA(t,g)!=101010256;--g)(!g||t.length-g>65558)&&fA(13);var I=qA(t,g+8);if(!I)return{};var s=TA(t,g+16),B=s==4294967295||I==65535;if(B){var i=TA(t,g-12);B=TA(t,i)==101075792,B&&(I=TA(t,i+32),s=TA(t,i+48))}for(var Q=A&&A.filter,C=0;C<I;++C){var a=WQ(t,s,B),n=a[0],o=a[1],r=a[2],h=a[3],c=a[4],l=a[5],u=XQ(t,l);s=c,(!Q||Q({name:h,size:o,originalSize:r,compression:n}))&&(n?n==8?e[h]=qQ(t.subarray(u,u+o),{out:new oA(r)}):fA(14,"unknown compression type "+n):e[h]=Nt(t,u,u+o))}return e}let _A;const Rg=typeof TextDecoder<"u"?new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}):{decode:()=>{throw Error("TextDecoder not available")}};typeof TextDecoder<"u"&&Rg.decode();let vt=null;function _Q(){return(vt===null||vt.byteLength===0)&&(vt=new Uint8Array(_A.memory.buffer)),vt}function OQ(t,A){return t=t>>>0,Rg.decode(_Q().subarray(t,t+A))}function $Q(t,A,e,g,I,s,B,i,Q,C,a,n,o){return _A.raycast_splats(t,A,e,g,I,s,B,i,Q,C,a,n,o)}async function An(t,A){if(typeof Response=="function"&&t instanceof Response){if(typeof WebAssembly.instantiateStreaming=="function")try{return await WebAssembly.instantiateStreaming(t,A)}catch(g){if(t.headers.get("Content-Type")!="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",g);else throw g}const e=await t.arrayBuffer();return await WebAssembly.instantiate(e,A)}else{const e=await WebAssembly.instantiate(t,A);return e instanceof WebAssembly.Instance?{instance:e,module:t}:e}}function tn(){const t={};return t.wbg={},t.wbg.__wbg_buffer_609cc3eee51ed158=function(A){return A.buffer},t.wbg.__wbg_length_3b4f022188ae8db6=function(A){return A.length},t.wbg.__wbg_length_6ca527665d89694d=function(A){return A.length},t.wbg.__wbg_length_8cfd2c6409af88ad=function(A){return A.length},t.wbg.__wbg_new_9fee97a409b32b68=function(A){return new Uint16Array(A)},t.wbg.__wbg_new_e3b321dcfef89fc7=function(A){return new Uint32Array(A)},t.wbg.__wbg_newwithbyteoffsetandlength_e6b7e69acd4c7354=function(A,e,g){return new Float32Array(A,e>>>0,g>>>0)},t.wbg.__wbg_newwithbyteoffsetandlength_f1dead44d1fc7212=function(A,e,g){return new Uint32Array(A,e>>>0,g>>>0)},t.wbg.__wbg_newwithlength_5a5efe313cfd59f1=function(A){return new Float32Array(A>>>0)},t.wbg.__wbg_set_10bad9bee0e9c58b=function(A,e,g){A.set(e,g>>>0)},t.wbg.__wbg_set_d23661d19148b229=function(A,e,g){A.set(e,g>>>0)},t.wbg.__wbg_set_f4f1f0daa30696fc=function(A,e,g){A.set(e,g>>>0)},t.wbg.__wbg_subarray_3aaeec89bb2544f0=function(A,e,g){return A.subarray(e>>>0,g>>>0)},t.wbg.__wbg_subarray_769e1e0f81bb259b=function(A,e,g){return A.subarray(e>>>0,g>>>0)},t.wbg.__wbindgen_init_externref_table=function(){const A=_A.__wbindgen_export_0,e=A.grow(4);A.set(0,void 0),A.set(e+0,void 0),A.set(e+1,null),A.set(e+2,!0),A.set(e+3,!1)},t.wbg.__wbindgen_memory=function(){return _A.memory},t.wbg.__wbindgen_throw=function(A,e){throw new Error(OQ(A,e))},t}function en(t,A){return _A=t.exports,Ug.__wbindgen_wasm_module=A,vt=null,_A.__wbindgen_start(),_A}async function Ug(t){if(_A!==void 0)return _A;typeof t<"u"&&(Object.getPrototypeOf(t)===Object.prototype?{module_or_path:t}=t:console.warn("using deprecated parameters for the initialization function; pass a single object instead")),typeof t>"u"&&(t=new URL("data:application/wasm;base64,AGFzbQEAAAAB9AEjYAJ/fwF/YAN/f38Bf2ACf38AYAN/f38AYAF/AX9gAX8AYAV/f39/fwBgA29/fwFvYAV/f39/fwF/YAR/f39/AGABbwFvYANvb38AYAFvAX9gAAF/YAAAYAd/f39/f39/AX9gAX0BfWAGf39/f39/AGAEf39/fwF/YAN/b28Bf2ABfwFvYAABb2AHf39/f39/fwBgAn9+AX9gA39+fgBgDX19fX19fX19f29/fX0Bb2AGf39/f39/AX9gBX9/fX9/AGAEf31/fwBgBX9/fn9/AGAEf35/fwBgBX9/fH9/AGAEf3x/fwBgA39+fgF/YAJ9fQF9AvIEEQN3YmcdX193YmdfYnVmZmVyXzYwOWNjM2VlZTUxZWQxNTgACgN3YmcaX193YmdfbmV3XzlmZWU5N2E0MDliMzJiNjgACgN3YmcaX193Ymdfc2V0X2Y0ZjFmMGRhYTMwNjk2ZmMACwN3YmcdX193YmdfbGVuZ3RoXzhjZmQyYzY0MDlhZjg4YWQADAN3YmcxX193YmdfbmV3d2l0aGJ5dGVvZmZzZXRhbmRsZW5ndGhfZjFkZWFkNDRkMWZjNzIxMgAHA3diZxpfX3diZ19uZXdfZTNiMzIxZGNmZWY4OWZjNwAKA3diZxpfX3diZ19zZXRfZDIzNjYxZDE5MTQ4YjIyOQALA3diZx1fX3diZ19sZW5ndGhfNmNhNTI3NjY1ZDg5Njk0ZAAMA3diZzFfX3diZ19uZXd3aXRoYnl0ZW9mZnNldGFuZGxlbmd0aF9lNmI3ZTY5YWNkNGM3MzU0AAcDd2JnGl9fd2JnX3NldF8xMGJhZDliZWUwZTljNThiAAsDd2JnHV9fd2JnX2xlbmd0aF8zYjRmMDIyMTg4YWU4ZGI2AAwDd2JnH19fd2JnX3N1YmFycmF5Xzc2OWUxZTBmODFiYjI1OWIABwN3YmcfX193Ymdfc3ViYXJyYXlfM2FhZWVjODliYjI1NDRmMAAHA3diZyRfX3diZ19uZXd3aXRobGVuZ3RoXzVhNWVmZTMxM2NmZDU5ZjEAFAN3YmcQX193YmluZGdlbl90aHJvdwACA3diZxFfX3diaW5kZ2VuX21lbW9yeQAVA3diZx9fX3diaW5kZ2VuX2luaXRfZXh0ZXJucmVmX3RhYmxlAA4DwQG/AQQAAAYABAIEAQAP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QTBqECcNAgsgCSgCAEGcncAAQQEQlwENASACKAIAQQJGDQBBASEBIANBAXFFDQAjAEFAaiIDJAAgAyAENgIMAkAgCS0AEEEBRgRAIAkoAgAhCCADQoCAgICgATcDGCADQZSbwAA2AiggA0KUm8CAwAY3AxBBASEEIANBATYCPCADQfiewAA2AjggA0EBNgIsIANBAjYCNCAIQQRqKAIAIQogAyADQRBqNgIwIAgoAgAgCiADQShqECcNAQsgCSgCACIEKAIAQZafwABBECAEQQRqKAIAKAIMEQEABEBBASEEDAELIAkoAgQgCSgCCCEKIANBNGogAkEIaigCADYCACADIAkoAgAiCzYCKCADIAIpAgA3AixBASEEIAsgA0EsaiAKKAIQEQEADQAgCSgCACECIAMgA0EMaq1CgICAgBCENwMQIANBATYCLCADQaifwAA2AiggA0IBNwI0IAJBBGooAgAhCCADIANBEGoiCjYCMCACKAIAIAggA0EoaiIIECcNACAFQQFxBEAgAyAGNgIkIAkoAgAhAiADIANBJGqtQoCAgIAQhDcDECADQQE2AiwgA0Gon8AANgIoIANCATcCNCACQQRqKAIAIQUgAyAKNgIwIAIoAgAgBSAIECcNAQsgCSgCACICKAIAQZydwABBASACQQRqKAIAKAIMEQEAIQQLIANBQGskACAEDQILIAAgDEEBajYCBEEAIQEMAQtBASEBCyAHQdAAaiQAIAELmwcCDH8BfiMAQTBrIgEkAAJAAkAgACgCAEUEQCAAKAIQIgBFDQFBpazAAEEBIAAQyAEhAwwCCyABQQxqIAAQRwJAAn8gASgCDCICRQRAIAEtABAhAiAAKAIQIgYEQEEBIQNBjKzAAEH8q8AAIAJBAXEiBxtBGUEQIAcbIAYQyAENBQsgACACOgAEQQAMAQsCQCABKAIQIgNBAXENACABQoCAgIAgNwIYIAEgAjYCDCABIAM2AhAgASACIANqIgo2AhQDQAJAIAFBDGoQGEGAgMQAaw4CAgABCwsgACgCECILRQ0DIAtBIhCYAQ0CIAFCgICAgCA3AhggASAKNgIUIAEgAzYCECABIAI2AgwgAUEoaiEMA0ACQAJAAkACQAJ/An8CQAJAAkACQAJAAkACQCABQQxqEBgiAkGBgMQARwRAIAJBgIDEAEYNCiACQSdGDQsg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aiADcgwCC0ECQQJB2InAABBqAAsgASABZ0EQayIBQf//A3FBCGp0Qf///wNxIANBgICA2ANyIAFBF3Rrcgs2AgggACAENgIEIAAgBTYCAAuWBAEEfyMAQYABayIEJAACQAJAAkAgASgCCCICQYCAgBBxRQRAIAJBgICAIHENAUEBIQIgACgCACABEDJFDQIMAwsgACgCACECA0AgAyAEakH/AGogAkEPcSIFQTByIAVB1wBqIAVBCkkbOgAAIANBAWshAyACQRBJIAJBBHYhAkUNAAtBASECIAFBv77AAEECIAMgBGpBgAFqQQAgA2sQIUUNAQwCCyAAKAIAIQIDQCADIARqQf8AaiACQQ9xIgVBMHIgBUE3aiAFQQpJGzoAACADQQFrIQMgAkEPSyACQQR2IQINAAtBASECIAFBv77AAEECIAMgBGpBgAFqQQAgA2sQIQ0BCyABKAIAQau7wABBAiABKAIEKAIMEQEADQACQCABKAIIIgJBgICAEHFFBEAgAkGAgIAgcQ0BIAAoAgQgARAyIQIMAgsgACgCBCECQQAhAwNAIAMgBGpB/wBqIAJBD3EiAEEwciAAQdcAaiAAQQpJGzoAACADQQFrIQMgAkEPSyACQQR2IQINAAsgAUG/vsAAQQIgAyAEakGAAWpBACADaxAhIQIMAQsgACgCBCECQQAhAwNAIAMgBGpB/wBqIAJBD3EiAEEwciAAQTdqIABBCkkbOgAAIANBAWshAyACQQ9LIAJBBHYhAg0ACyABQb++wABBAiADIARqQYABakEAIANrECEhAgsgBEGAAWokACACC7oEAQh/IwBBEGsiAyQAIAMgATYCBCADIAA2AgAgA0KggICADjcCCAJ/AkACQAJAIAIoAhAiCQRAIAIoAhQiAA0BDAILIAIoAgwiAEUNASACKAIIIgEgAEEDdGohBCAAQQFrQf////8BcUEBaiEGIAIoAgAhAANAAkAgAEEEaigCACIFRQ0AIAMoAgAgACgCACAFIAMoAgQoAgwRAQBFDQBBAQwFC0EBIAEoAgAgAyABQQRqKAIAEQAADQQaIABBCGohACAEIAFBCGoiAUcNAAsMAgsgAEEYbCEKIABBAWtB/////wFxQQFqIQYgAigCCCEEIAIoAgAhAANAAkAgAEEEaigCACIBRQ0AIAMoAgAgACgCACABIAMoAgQo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1MAAIAE2AgBB9NTAAEEBNgIAQfzUwAAgACkDCDcCAEGE1cAAIABBEGopAwA3AgALIABBMGokAEH41MAADwsgAEEANgIoIABBATYCHCAAQcyVwAA2AhggAEIENwIgIABBGGpBtJbAABCBAQALIABBKGogAikDADcCACAAIAApAwg3AiAgACABNgIcIABBATYCGAJAIABBGGoiASgCAEUNACABKAIEIgJFDQAgASgCCCACQQJ0QQQQrQELIABBADYCKCAAQQE2AhwgAEHUlsAANgIYIABCBDcCICABQdyWwAAQgQEAC50CAQV/AkACQAJAAkAgAkEDakF8cSIEIAJGDQAgAyAEIAJrIgQgAyAESRsiBUUNAEEAIQQgAUH/AXEhBkEBIQcDQCACIARqLQAAIAZGDQQgBSAEQQFqIgRHDQALIAUgA0EIayIISw0CDAELIANBCGshCEEAIQULIAFB/wFxQYGChAhsIQQDQEGAgoQIIAIgBWoiBygCACAEcyIGayAGckGAgoQIIAdBBGooAgAgBHMiBmsgBnJxQYCBgoR4cUGAgYKEeEcNASAFQQhqIgUgCE0NAAsLIAMgBUcEQCABQf8BcSEEQQEhBwNAIAQgAiAFai0AAEYEQCAFIQQMAwsgAyAFQQFqIgVHDQALC0EAIQcLIAAgBDYCBCAAIAc2AgALhgIBA38jAEGAAWsiBCQAIAAoAgAhAAJ/AkAgASgCCCICQYCAgBBxRQRAIAJBgICAIHENASAAKAIAIAEQMgwCCyAAKAIAIQBBACECA0AgAiAEakH/AGogAEEPcSIDQTByIANB1wBqIANBCkkbOgAAIAJBAWshAiAAQQ9LIABBBHYhAA0ACyABQb++wABBAiACIARqQYABakEAIAJrECEMAQsgACgCACEAQQAhAgNAIAIgBGpB/wBqIABBD3EiA0EwciADQTdqIANBCkkbOgAAIAJBAWshAiAAQQ9LIABBBHYhAA0ACyABQb++wABBAiACIARqQYABakEAIAJrECELIARBgAFqJAAL/AECBH8BfiMAQSBrIgUkAAJAAkAgBEUNACABIAEgAmoiAksNACADIARqQQFrQQAgA2txrSACIAAoAgAiAUEBdCIGIAIgBksbIgJBCEEEQQEgBEGBCEkbIARBAUYbIgYgAiAGSxsiBq1+IglCIIhQRQ0AIAmnIghB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ACACQShqIANBEGopAgA3AwAgAiADKQIANwMYIAJBDGpB5JfAACACQRhqECcaIAJBCGogBCgCACIDNgIAIAIgAikCDCIFNwMAIAFBCGogAzYCACABIAU3AgALIABBoJ3AADYCBCAAIAE2AgAgAkEwaiQAC7IBAQZ/AkACQCAAQYQBSQ0AIADQbyYBEEAiASgCDCEFIAEoAhAhAiABQgA3AgwgASgCCCEDIAEoAgQhBCABQgQ3AgQgASgCACEGIAFBADYCACAAIAJJDQEgACACayIAIANPDQEgBCAAQQJ0aiAFNgIAIAEgAjYCECABIAA2AgwgASADNgIIIAEoAgQgASAENgIEIAEoAgAhACABIAY2AgAgAEUNACAAQQJ0QQQQrQELDwsAC9EDAgx/AX4jAEEgayIEJAAgBEEYaiIJEEAiBUEQaiIHKAIANgIAIARBEGoiCiAFQQhqIggpAgA3AwAgB0EANgIAIAhCADcCACAFKQIAIQwgBUKAgICAwAA3AgAgBCAMNwMIAn8jAEEgayIDJAACQAJAIARBCGoiACgCDCIBIAAoAggiAkYEQAJAIAAoAgAiAiABRgRA0G9BgAEgASABQYABTRsiBvwPASICQX9GDQQCQCAAKAIQIgtFBEAgACACNgIQDAELIAEgC2ogAkcNBQsgASAGaiICQf////8BSw0EIAMgAQR/IAMgAUECdDYCHCADIAAoAgQ2AhRBBAVBAAs2AhggA0EIakEEIAJBAnQgA0EUahBcIAMoAghBAUYNBCADKAIMIQYgACACNgIAIAAgBjYCBAwBCyABIAJPDQMLIAAgAUEBaiICNgIIIAAoAgQgAUECdGogAjYCAAwBCyABIAJPDQELIAAgACgCBCABQQJ0aigCADYCDCAAKAIQIANBIGokACABagwBCwALIAggCikDADcCACAHIAkoAgA2AgAgBSgCBCEDIAUoAgAhASAFIAQpAwg3AgAgAQRAIAMgAUECdEEEEK0BCyAEQSBqJAALuAEBA38gASgCDCECAkACQAJAAkACQAJAIAEoAgQOAgABAgsgAg0BQQEhA0EAIQFBASECDAMLIAJFDQELIAAgARAwDwsgASgCACICKAIEIgFBAEgNASACKAIAIQMgAUUEQEEBIQJBACEBDAELQZLWwAAtAAAaQQEhBCABQQEQogEiAkUNAQsgAQRA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AgQgJUECdGogDTgCACArICVBAWo2AggLIAogLEECdGohCiAnICxrIicNAAsLICpBEGokACAmKAIUIgpBhAFPBEAgChBWCyApIicgLUkNAAsLQYTWwAAoAgBBAWohJSAmKAIQIScLQYTWwAAgJTYCACAnEA0hCRBXIgggCSYBICYgCDYCJCAmKAIMIScgJigCECElIwBBIGsiKCQAICZBJGooAgAiCiUBEAohKSAoICU2AgQgKCApNgIAAkAgJSApRgRAEJsBIi0QkwEiKSUBICcgJRAIIQkQVyInIAkmASAtQYQBTwRAIC0QVgsgKUGEAU8EQCApEFYLIAolASAnJQFBABAJICdBhAFPBEAgJxBWCyAoQSBqJAAMAQsgKEEANgIIICggKEEEaiAoQQhqEH0ACyAmKAIIIgoEQCAmKAIMIApBAnRBBBCtAQsgJigCBCIKQYQBTwRAIAoQVgsgJkEwaiQAIAgMAgsQbwALICcgLkGMhsAAELABAAsiCCUBIAgQVguxAgEEfyMAQSBrIgQkACAEQQhqIQMjAEEgayICJAACQAJAAkACQAJAAkBBnNbAAC0AAA4CAAECC0Gc1sAAQQE6AAALIANBATYCAAwBC0Gd1sAALQAAIQFBndbAAEEBOgAAIAIgAToAByABQQFGDQEgA0EAOgAUIANBADYCAEGd1sAAQQA6AAALIAJBIGokAAwBCyACQgA3AhQgAkKBgICAwAA3AgwgAkG8m8AANgIIIAJBB2ogAkEIahB7AAtBktbAAC0AABpBKEEEEKIBIgFFBEBBBEEoEMYBAAsgAUG8h8AANgIAIAEgAykCADcCBCABIAApAgA3AhwgAUEMaiADQQhqKQIANwIAIAFBFGogA0EQaikCADcCACABQSRqIABBCGooAgA2AgAgBEEgaiQAIAEL+gECAn8BfiMAQRBrIgIkACACQQE7AQwgAiABNgIIIAIgADYCBCMAQRBrIgEkACACQQRqIgApAgAhBCABIAA2AgwgASAENwIEIwBBEGsiACQAIAFBBGoiASgCACICKAIMIQMCQAJAAkACQCACKAIEDgIAAQILIAMNAUEBIQJBACEDDAILIAMNACACKAIAIgIoAgQhAyACKAIAIQIMAQsgAEGAgICAeDYCACAAIAE2AgwgAEHcncAAIAEoAgQgASgCCCIALQAIIAAtAAkQ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OTg2MDAxMzBlMWNmNjJiOGY4YTkzNDk0NDg4Y2MvbGlicmFyeS9zdGQvc3JjL3N5cy9zeW5jL29uY2Uvbm9fdGhyZWFkcy5ycwAcBBAAWwAAADUAAAASAAAAc3BhcmstaW50ZXJuYWwtcnMvc3JjL3JheWNhc3QucnOIBBAAIAAAACoAAAAXAAAAiAQQACAAAAB4AAAAFwAAAIgEEAAgAAAAfgAAABwAAACIBBAAIAAAAIAAAAAcAAAAiAQQACAAAACFAAAAIAAAAC9ydXN0Yy82YjAwYmMzODgwMTk4NjAwMTMwZTFjZjYyYjhmOGE5MzQ5NDQ4OGNjL2xpYnJhcnkvYWxsb2Mvc3JjL3ZlYy9tb2QucnP4BBAATAAAAFYKAAAkAAAAAAAAABAAAAAEAAAAGQAAABoAAAAbAAAAICAgIDogAAABAAAAAAAAAHAFEAACAAAAAgBBjovAAAsBBQBBmIvAAAshIAAAqCAgICAgICAAHgAAAAwAAAAEAAAAHwAAACAAAAAhAEHEi8AAC7kOAQAAACIAAABhIERpc3BsYXkgaW1wbGVtZW50YXRpb24gcmV0dXJuZWQgYW4gZXJyb3IgdW5leHBlY3RlZGx5L3J1c3RjLzZiMDBiYzM4ODAxOTg2MDAxMzBlMWNmNjJiOGY4YTkzNDk0NDg4Y2MvbGlicmFyeS9hbGxvYy9zcmMvc3RyaW5nLnJzAAADBhAASwAAAPAKAAAOAAAARXJyb3Jhc3NlcnRpb24gZmFpbGVkOiBzZWxmLmlzX2NoYXJfYm91bmRhcnkobmV3X2xlbikAAAADBhAASwAAALUFAAANAAAAAAAAABAAAAAEAAAAGQAAABoAAAAbAAAAYmFja3RyYWNlIGNhcHR1cmUgZmFpbGVkL2hvbWUvcnVubmVyLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvYW55aG93LTEuMC45OC9zcmMvZXJyb3IucnPYBhAAXAAAAGcEAAAOAAAAAQAAAAAAAAA6IAAATAcQAAIAAAAKCkNhdXNlZCBieToKAAAAZAcQAAEAAAAKCnN0YWNrIGJhY2t0cmFjZTpTdGFjayBiYWNrdHJhY2U6CgCCBxAAEQAAAFMvcnVzdGMvNmIwMGJjMzg4MDE5ODYwMDEzMGUxY2Y2MmI4ZjhhOTM0OTQ0ODhjYy9saWJyYXJ5L2FsbG9jL3NyYy9yYXdfdmVjL21vZC5ycwAAAJ0HEABQAAAALgIAABEAAAAvcnVzdGMvNmIwMGJjMzg4MDE5ODYwMDEzMGUxY2Y2MmI4ZjhhOTM0OTQ0ODhjYy9saWJyYXJ5L2NvcmUvc3JjL3NsaWNlL2luZGV4LnJzAAAIEABPAAAATAMAADQAAAAACBAATwAAAFMDAAAyAAAAYXNzZXJ0aW9uIGZhaWxlZDogc2VsZi5pc19jaGFyX2JvdW5kYXJ5KG4pL3J1c3RjLzZiMDBiYzM4ODAxOTg2MDAxMzBlMWNmNjJiOGY4YTkzNDk0NDg4Y2MvbGlicmFyeS9hbGxvYy9zcmMvc3RyaW5nLnJzAAAAmggQAEsAAAAMCAAAHQAAAJoIEABLAAAAFAgAAB0AAAAjAAAADAAAAAQAAAAkAAAAJQAAACEAAAAvcnVzdGMvNmIwMGJjMzg4MDE5ODYwMDEzMGUxY2Y2MmI4ZjhhOTM0OTQ0ODhjYy9saWJyYXJ5L2NvcmUvc3JjL2l0ZXIvdHJhaXRzL2l0ZXJhdG9yLnJzIAkQAFgAAADRBwAACQAAAC9ob21lL3J1bm5lci8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL2pzLXN5cy0wLjMuNzcvc3JjL2xpYi5ycwAAiAkQAFoAAAD7GAAAAQAAAC9ob21lL3J1bm5lci8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3dhc20tYmluZGdlbi0wLjIuMTAwL3NyYy9jb252ZXJ0L3NsaWNlcy5yc/QJEABsAAAAJAEAAA4AAABjbG9zdXJlIGludm9rZWQgcmVjdXJzaXZlbHkgb3IgYWZ0ZXIgYmVpbmcgZHJvcHBlZExhenkgaW5zdGFuY2UgaGFzIHByZXZpb3VzbHkgYmVlbiBwb2lzb25lZKIKEAAqAAAAL2hvbWUvcnVubmVyLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2Yvb25jZV9jZWxsLTEuMjEuMy9zcmMvbGliLnJzAAAA1AoQAF0AAAAIAwAAGQAAAHJlZW50cmFudCBpbml0AABECxAADgAAANQKEABdAAAAegIAAA0AAAA6IAAAAAAAAAQAAAAEAAAANwAAAC9ydXN0Yy82YjAwYmMzODgwMTk4NjAwMTMwZTFjZjYyYjhmOGE5MzQ5NDQ4OGNjL2xpYnJhcnkvYWxsb2Mvc3JjL3Jhd192ZWMvbW9kLnJzgAsQAFAAAAAuAgAAEQAAADoAAAA4AAAADAAAAAQAAAA5AAAAOgAAADsAAAAvcnVzdC9kZXBzL2RsbWFsbG9jLTAuMi44L3NyYy9kbG1hbGxvYy5yc2Fzc2VydGlvbiBmYWlsZWQ6IHBzaXplID49IHNpemUgKyBtaW5fb3ZlcmhlYWQA/AsQACkAAACsBAAACQAAAGFzc2VydGlvbiBmYWlsZWQ6IHBzaXplIDw9IHNpemUgKyBtYXhfb3ZlcmhlYWQAAPwLEAApAAAAsgQAAA0AAABsaWJyYXJ5L3N0ZC9zcmMvc3luYy9sYXp5X2xvY2sucnMAAACkDBAAIQAAANEAAAATAAAAbGlicmFyeS9zdGQvc3JjL2JhY2t0cmFjZS5ycwIAAAAAAAAAAgBBiJrAAAvFBCAAgOBvcGVyYXRpb24gbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtDA0QACgAAAAkAAAAAgAAADQNEAB1bnN1cHBvcnRlZCBiYWNrdHJhY2VkaXNhYmxlZCBiYWNrdHJhY2UA2AwQABwAAACKAQAAHQAAADwAAAAQAAAABAAAAD0AAAA+AAAAAQAAAAAAAABjYW5ub3QgcmVjdXJzaXZlbHkgYWNxdWlyZSBtdXRleJwNEAAgAAAAbGlicmFyeS9zdGQvc3JjL3N5cy9zeW5jL211dGV4L25vX3RocmVhZHMucnPEDRAALAAAABMAAAAJAAAAbGlicmFyeS9zdGQvc3JjL3N5bmMvcG9pc29uL29uY2UucnMAAA4QACMAAACbAAAAMgAAADx1bmtub3duPu+/vW1lbW9yeSBhbGxvY2F0aW9uIG9mICBieXRlcyBmYWlsZWQAAEAOEAAVAAAAVQ4QAA0AAABsaWJyYXJ5L3N0ZC9zcmMvYWxsb2MucnN0DhAAGAAAAGQBAAAJAAAACgAAADgAAAAMAAAABAAAAD8AAAAAAAAACAAAAAQAAABAAAAA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bnRhdGlvbiByZXR1cm5lZCBhbiBlcnJvciB3aGVuIHRoZSB1bmRlcmx5aW5nIHN0cmVhbSBkaWQgbm90bGlicmFyeS9hbGxvYy9zcmMvZm10LnJzAACSGRAAGAAAAIoCAAAOAAAAAHAABwAtAQEBAgECAQFICzAVEAFlBwIGAgIBBCMBHhtbCzoJCQEYBAEJAQMBBSsDOwkqGAEgNwEBAQQIBAEDBwoCHQE6AQEBAgQIAQkBCgIaAQICOQEEAgQCAgMDAR4CAwELAjkBBAUBAgQBFAIWBgEBOgEBAgEECAEHAwoCHgE7AQEBDAEJASgBAwE3AQEDBQMBBAcCCwIdAToBAgIBAQMDAQQHAgsCHAI5AgEBAgQIAQkBCgIdAUgBBAECAwEBCAFRAQIHDAhiAQIJCwdJAhsBAQEBATcOAQUBAgULASQJAWYEAQYBAgICGQIEAxAEDQECAgYBDwEAAwAEHAMdAh4CQAIBBwgBAgsJAS0DAQF1AiIBdgMEAgkBBgPbAgIBOgEBBwEBAQECCAYKAgEwHzEEMAoEAyYJDAIgBAIGOAEBAgMBAQU4CAICmAMBDQEHBAEGAQMCxkAAAcMhAAONAWAgAAZpAgAEAQogAlACAAEDAQQBGQIFAZcCGhINASYIGQsBASwDMAECBAICAgEkAUMGAgICAgwBCAEvATMBAQMCAgUCAQEqAggB7gECAQQBAAEAEBAQAAIAAeIBlQUAAwECBQQoAwQBpQIABEEFAAJPBEYLMQR7ATYPKQECAgoDMQQCAgcBPQMkBQEIPgEMAjQJAQEIBAIBXwMCBAYBAgGdAQMIFQI5AgEBAQEMAQkBDgcDBUMBAgYBAQIBAQMEAwEBDgJVCAIDAQEXAVEBAgYBAQIBAQIBAusBAgQGAgECGwJVCAIBAQJqAQEBAghlAQEBAgQBBQAJAQL1AQoEBAGQBAICBAEgCigGAgQIAQkGAgMuDQECAAcBBgEBUhYCBwECAQJ6BgMBAQIBBwEBSAIDAQEBAAILAjQFBQMXAQABBg8ADAMDAAU7BwABPwRRAQsCAAIALgIXAAUDBggIAgceBJQDADcEMggBDgEWBQEPAAcBEQIHAQIBBWQBoAcAAT0EAAT+AgAHbQcAYIDwAAICAgICAgICAgMDAQEBAEHLucAACxABAAAAAAAAAAICAAAAAAACAEGKusAACwECAEGwusAACwEBAEHLusAACwEBAEGru8AAC7AHLi4wMTIzNDU2Nzg5YWJjZGVmAAAAAQAAAAAAAABCb3Jyb3dNdXRFcnJvcmFscmVhZHkgYm9ycm93ZWQ6INYdEAASAAAAW2NhbGxlZCBgT3B0aW9uOjp1bndyYXAoKWAgb24gYSBgTm9uZWAgdmFsdWVpbmRleCBvdXQgb2YgYm91bmRzOiB0aGUgbGVuIGlzICBidXQgdGhlIGluZGV4IGlzIAAAHB4QACAAAAA8HhAAEgAAAAAAAAAEAAAABAAAAGEAAAA9PSE9bWF0Y2hlc2Fzc2VydGlvbiBgbGVmdCAgcmlnaHRgIGZhaWxlZAogIGxlZnQ6IAogcmlnaHQ6IAB7HhAAEAAAAIseEAAXAAAAoh4QAAkAAAAgcmlnaHRgIGZhaWxlZDogCiAgbGVmdDogAAAAex4QABAAAADEHhAAEAAAANQeEAAJAAAAoh4QAAkAAAA6IAAAAQAAAAAAAAAAHxAAAgAAAAAAAAAMAAAABAAAAGIAAABjAAAAZAAAACAgICAgeyAsICB7CiwKfSB9Cl0weDAwMDEwMjAzMDQwNTA2MDcwODA5MTAxMTEyMTMxNDE1MTYxNzE4MTkyMDIxMjIyMzI0MjUyNjI3MjgyOTMwMzEzMjMzMzQzNTM2MzczODM5NDA0MTQyNDM0NDQ1NDY0NzQ4NDk1MDUxNTI1MzU0NTU1NjU3NTg1OTYwNjE2MjYzNjQ2NTY2Njc2ODY5NzA3MTcyNzM3NDc1NzY3Nzc4Nzk4MDgxODI4Mzg0ODU4Njg3ODg4OTkwOTE5MjkzOTQ5NTk2OTc5ODk5bGlicmFyeS9jb3JlL3NyYy9mbXQvbW9kLnJzZmFsc2V0cnVlAAAACSAQABsAAACZCgAAJgAAAAkgEAAbAAAAogoAABoAAABhdHRlbXB0ZWQgdG8gaW5kZXggc2xpY2UgZnJvbSBhZnRlciBtYXhpbXVtIHVzaXplAAAAUCAQADEAAABhdHRlbXB0ZWQgdG8gaW5kZXggc2xpY2UgdXAgdG8gbWF4aW11bSB1c2l6ZYwgEAAsAAAAbGlicmFyeS9jb3JlL3NyYy9zdHIvbW9kLnJzAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB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",typeof document>"u"?require("url").pathToFileURL(__filename).href:ke&&ke.tagName.toUpperCase()==="SCRIPT"&&ke.src||new URL("spark.cjs.min.js",document.baseURI).href));const A=tn();(typeof t=="string"||typeof Request=="function"&&t instanceof Request||typeof URL=="function"&&t instanceof URL)&&(t=fetch(t));const{instance:e,module:g}=await An(await t,A);return en(e,g)}const kA=-12,RA=9,gn=Math.exp(kA),In=Math.exp(RA),Lg=-30,rt=Math.exp(Lg),Pe=11,_e=11,Yg=11,sn=Pe+_e,j=1<<Pe,zA=1<<_e,Jg=1<<Yg,Oe=1,Bn=j-1,Qn=zA-1,nn=Jg-1,Cn=!0,an=Object.freeze(Object.defineProperty({__proto__:null,LN_SCALE_MAX:RA,LN_SCALE_MIN:kA,LN_SCALE_ZERO:Lg,SCALE_MAX:In,SCALE_MIN:gn,SCALE_ZERO:rt,SPLAT_TEX_DEPTH:Jg,SPLAT_TEX_DEPTH_BITS:Yg,SPLAT_TEX_DEPTH_MASK:nn,SPLAT_TEX_HEIGHT:zA,SPLAT_TEX_HEIGHT_BITS:_e,SPLAT_TEX_HEIGHT_MASK:Qn,SPLAT_TEX_LAYER_BITS:sn,SPLAT_TEX_MIN_HEIGHT:Oe,SPLAT_TEX_WIDTH:j,SPLAT_TEX_WIDTH_BITS:Pe,SPLAT_TEX_WIDTH_MASK:Bn,WASM_SPLAT_SORT:Cn},Symbol.toStringTag,{value:"Module"}));function Dt(t){return t==="bool"||t==="bvec2"||t==="bvec3"||t==="bvec4"}function yt(t){return t==="int"||t==="uint"||t==="float"}function lA(t){return t==="int"||t==="ivec2"||t==="ivec3"||t==="ivec4"}function uA(t){return t==="uint"||t==="uvec2"||t==="uvec3"||t==="uvec4"}function Ae(t){return t==="float"||t==="vec2"||t==="vec3"||t==="vec4"}function bg(t){return t==="mat2"||t==="mat2x2"||t==="mat2x3"||t==="mat2x4"||t==="mat3"||t==="mat3x2"||t==="mat3x3"||t==="mat3x4"||t==="mat4"||t==="mat4x2"||t==="mat4x3"||t==="mat4x4"}function Qt(t){return Ae(t)||bg(t)}function Rt(t){return t==="vec2"||t==="ivec2"||t==="uvec2"}function Ut(t){return t==="vec3"||t==="ivec3"||t==="uvec3"}function te(t){return t==="vec4"||t==="ivec4"||t==="uvec4"}function En(t){return Rt(t)||Ut(t)||te(t)}function nt(t){return t==="mat2"||t==="mat2x2"}function Ct(t){return t==="mat3"||t==="mat3x3"}function at(t){return t==="mat4"||t==="mat4x4"}function vg(t){switch(t){case"vec2":return"float";case"vec3":return"float";case"vec4":return"float";case"ivec2":return"int";case"ivec3":return"int";case"ivec4":return"int";case"uvec2":return"uint";case"uvec3":return"uint";case"uvec4":return"uint";default:throw new Error(`Invalid vector type: ${t}`)}}function Tg(t){switch(t){case"vec2":case"ivec2":case"uvec2":return 2;case"vec3":case"ivec3":case"uvec3":return 3;case"vec4":case"ivec4":case"uvec4":return 4;default:throw new Error(`Invalid vector type: ${t}`)}}function on(t){if(yt(t))return"float";if(Rt(t))return"vec2";if(Ut(t))return"vec3";if(te(t))return"vec4";throw new Error(`Invalid vector type: ${t}`)}function Hg(t){if(yt(t))return"uint";if(Rt(t))return"uvec2";if(Ut(t))return"uvec3";if(te(t))return"uvec4";throw new Error(`Invalid vector type: ${t}`)}function rn(t){if(yt(t))return"int";if(Rt(t))return"ivec2";if(Ut(t))return"ivec3";if(te(t))return"ivec4";throw new Error(`Invalid vector type: ${t}`)}function Kg(t){if(typeof t=="string")return t;if(typeof t=="object"&&t.type)return t.type;throw new Error(`Invalid DynoType: ${String(t)}`)}function iA(t){return Math.trunc(t).toString()}function QA(t){return`${Math.max(0,Math.trunc(t)).toString()}u`}function q(t){return t===Number.POSITIVE_INFINITY?"INFINITY":t===Number.NEGATIVE_INFINITY?"-INFINITY":Number.isInteger(t)?t.toFixed(1):t.toString()}function Z(t){return t instanceof st?t.type:t.dynoOut().type}class st{constructor(A){this.__isDynoValue=!0,this.type=A}}class V extends st{constructor(A,e){super(A.outTypes[e]),this.dyno=A,this.key=e}}class Ft extends st{constructor(A,e){super(A),this.literal=e}getLiteral(){return this.literal}}function oe(t,A){return new Ft(t,A)}class qg extends Ft{constructor(A,e){super(A,""),this.value=e}getLiteral(){const{type:A,value:e}=this;switch(A){case"bool":return e?"true":"false";case"uint":return QA(e);case"int":return iA(e);case"float":return q(e);case"bvec2":{const g=e;return`bvec2(${g[0]}, ${g[1]})`}case"uvec2":{if(e instanceof E.Vector2)return`uvec2(${QA(e.x)}, ${QA(e.y)})`;const g=e;return`uvec2(${QA(g[0])}, ${QA(g[1])})`}case"ivec2":{if(e instanceof E.Vector2)return`ivec2(${iA(e.x)}, ${iA(e.y)})`;const g=e;return`ivec2(${iA(g[0])}, ${iA(g[1])})`}case"vec2":{if(e instanceof E.Vector2)return`vec2(${q(e.x)}, ${q(e.y)})`;const g=e;return`vec2(${q(g[0])}, ${q(g[1])})`}case"bvec3":{const g=e;return`bvec3(${g[0]}, ${g[1]}, ${g[2]})`}case"uvec3":{if(e instanceof E.Vector3)return`uvec3(${QA(e.x)}, ${QA(e.y)}, ${QA(e.z)})`;const g=e;return`uvec3(${QA(g[0])}, ${QA(g[1])}, ${QA(g[2])})`}case"ivec3":{if(e instanceof E.Vector3)return`ivec3(${iA(e.x)}, ${iA(e.y)}, ${iA(e.z)})`;const g=e;return`ivec3(${iA(g[0])}, ${iA(g[1])}, ${iA(g[2])})`}case"vec3":{if(e instanceof E.Vector3)return`vec3(${q(e.x)}, ${q(e.y)}, ${q(e.z)})`;const g=e;return`vec3(${q(g[0])}, ${q(g[1])}, ${q(g[2])})`}case"bvec4":{const g=e;return`bvec4(${g[0]}, ${g[1]}, ${g[2]}, ${g[3]})`}case"uvec4":{if(e instanceof E.Vector4)return`uvec4(${QA(e.x)}, ${QA(e.y)}, ${QA(e.z)}, ${QA(e.w)})`;const g=e;return`uvec4(${QA(g[0])}, ${QA(g[1])}, ${QA(g[2])}, ${QA(g[3])})`}case"ivec4":{if(e instanceof E.Vector4)return`ivec4(${iA(e.x)}, ${iA(e.y)}, ${iA(e.z)}, ${iA(e.w)})`;const g=e;return`ivec4(${iA(g[0])}, ${iA(g[1])}, ${iA(g[2])}, ${iA(g[3])})`}case"vec4":{if(e instanceof E.Vector4)return`vec4(${q(e.x)}, ${q(e.y)}, ${q(e.z)}, ${q(e.w)})`;if(e instanceof E.Quaternion)return`vec4(${q(e.x)}, ${q(e.y)}, ${q(e.z)}, ${q(e.w)})`;const g=e;return`vec4(${q(g[0])}, ${q(g[1])}, ${q(g[2])}, ${q(g[3])})`}case"mat2":case"mat2x2":{const g=e,I=g instanceof E.Matrix2?g.elements:e,s=new Array(4).fill(0).map((B,i)=>q(I[i]));return`${A}(${s.join(", ")})`}case"mat2x3":{const g=e,I=new Array(6).fill(0).map((s,B)=>q(g[B]));return`${A}(${I.join(", ")})`}case"mat2x4":{const g=e,I=new Array(8).fill(0).map((s,B)=>q(g[B]));return`${A}(${I.join(", ")})`}case"mat3":case"mat3x3":{const g=e,I=g instanceof E.Matrix3?g.elements:e,s=new Array(9).fill(0).map((B,i)=>q(I[i]));return`${A}(${s.join(", ")})`}case"mat3x2":{const g=e,I=new Array(6).fill(0).map((s,B)=>q(g[B]));return`${A}(${I.join(", ")})`}case"mat3x4":{const g=e,I=new Array(12).fill(0).map((s,B)=>q(g[B]));return`${A}(${I.join(", ")})`}case"mat4":case"mat4x4":{const g=e,I=g instanceof E.Matrix4?g.elements:e,s=new Array(16).fill(0).map((B,i)=>q(I[i]));return`${A}(${s.join(", ")})`}case"mat4x2":{const g=e,I=new Array(8).fill(0).map((s,B)=>q(g[B]));return`${A}(${I.join(", ")})`}case"mat4x3":{const g=e,I=new Array(12).fill(0).map((s,B)=>q(g[B]));return`${A}(${I.join(", ")})`}default:throw new Error(`Type not implemented: ${String(A)}`)}}}function v(t,A){return new qg(t,A)}function Tt(t){const A=String(t);if(Dt(t))return`${A}(false)`;if(Qt(t))return`${A}(0.0)`;if(lA(t))return`${A}(0)`;if(uA(t))return`${A}(0u)`;throw new Error(`Type not implemented: ${A}`)}function cn(t){const A=String(t);if(Dt(t))return`${A}(true)`;if(Qt(t))return`${A}(1.0)`;if(lA(t))return`${A}(1)`;if(uA(t))return`${A}(1u)`;throw new Error(`Type not implemented: ${A}`)}function hn(t){const A=String(t);if(Dt(t))return`${A}(true)`;if(Qt(t))return`${A}(-1.0)`;if(lA(t))return`${A}(-1)`;if(uA(t))return`${A}(0xFFFFFFFFu)`;throw new Error(`Type not implemented: ${A}`)}const rg=" ";class zg{constructor({indent:A}={}){this.globals=new Set,this.statements=[],this.uniforms={},this.declares=new Set,this.updaters=[],this.sequence=0,this.indent=rg,this.indent=A??rg}nextSequence(){return this.sequence++}}class X{constructor({inTypes:A,outTypes:e,inputs:g,update:I,globals:s,statements:B,generate:i}){this.inTypes=A??{},this.outTypes=e??{},this.inputs=g??{},this.update=I,this.globals=s,this.statements=B,this.generate=i??(({inputs:Q,outputs:C,compile:a})=>{var n,o;return{globals:(n=this.globals)==null?void 0:n.call(this,{inputs:Q,outputs:C,compile:a}),statements:(o=this.statements)==null?void 0:o.call(this,{inputs:Q,outputs:C,compile:a})}})}get outputs(){const A={};for(const e in this.outTypes)A[e]=new V(this,e);return A}apply(A){return Object.assign(this.inputs,A),this.outputs}compile({inputs:A,outputs:e,compile:g}){const I=[`// ${this.constructor.name}(${Object.values(A).join(", ")}) => (${Object.values(e).join(", ")})`],s=[];for(const C in e){const a=e[C];a&&!g.declares.has(a)&&(g.declares.add(a),s.push(C))}const{globals:B,statements:i,uniforms:Q}=this.generate({inputs:A,outputs:e,compile:g});for(const C of B??[])g.globals.add(C);for(const C in Q)g.uniforms[C]=Q[C];this.update&&g.updaters.push(this.update);for(const C of s){const a=e[C];a&&(g.uniforms[a]||I.push(`${$e(a,this.outTypes[C])};`))}return i!=null&&i.length&&(I.push("{"),I.push(...i.map(C=>g.indent+C)),I.push("}")),I}}class XA extends X{constructor({inTypes:A,outTypes:e,inputs:g,update:I,globals:s,construct:B}){super({inTypes:A,outTypes:e,inputs:g,update:I,globals:s,generate:i=>this.generateBlock(i)}),this.construct=B}generateBlock({inputs:A,outputs:e,compile:g}){var h,c;const I={},s={};for(const l in A)A[l]!=null&&(I[l]=new Ft(this.inTypes[l],A[l]));for(const l in e)e[l]!=null&&(s[l]=new st(this.outTypes[l]));const B={roots:[]},i=this.construct(I,s,B);for(const l of((h=this.globals)==null?void 0:h.call(this,{inputs:A,outputs:e,compile:g}))??[])g.globals.add(l);const Q=[],C=new Map;function a(l,u,w){let D=C.get(l);if(!D){D={sequence:g.nextSequence(),outNames:new Map,newOuts:new Set},C.set(l,D);for(const y in l.inputs){let d=l.inputs[y];for(;d;){if(d instanceof st){d instanceof V&&a(d.dyno,d.key);break}d=d.dynoOut()}}Q.push(l)}u&&(w||D.newOuts.add(u),D.outNames.set(u,w??`${u}_${D.sequence}`))}for(const l of B.roots)a(l);for(const l in s){let u=(i==null?void 0:i[l])??s[l];for(;u;){if(u instanceof st){u instanceof V&&a(u.dyno,u.key,e[l]);break}u=u.dynoOut()}s[l]=u}const n=[];for(const l of Q){const u={},w={};for(const d in l.inputs){let m=l.inputs[d];for(;m;){if(m instanceof st){if(m instanceof Ft)u[d]=m.getLiteral();else if(m instanceof V){const M=(c=C.get(m.dyno))==null?void 0:c.outNames.get(m.key);if(!M)throw new Error(`Source not found for ${m.dyno.constructor.name}.${m.key}`);u[d]=M}break}m=m.dynoOut()}}const D=C.get(l)??{outNames:new Map};for(const[d,m]of D.outNames.entries())w[d]=m;const y=l.compile({inputs:u,outputs:w,compile:g});n.push(y)}const o=[];for(const l in e)s[l]instanceof Ft&&o.push(`${e[l]} = ${s[l].getLiteral()};`);return o.length>0&&n.push(o),{statements:n.flatMap((l,u)=>u===0?l:["",...l])}}}function GA(t,A,e,{update:g,globals:I}={}){return new XA({inTypes:t,outTypes:A,construct:e,update:g,globals:I})}function ee({inTypes:t,outTypes:A,inputs:e,update:g,globals:I,statements:s,generate:B}){return new X({inTypes:t,outTypes:A,inputs:e,update:g,globals:I,statements:s,generate:B})}function $e(t,A,e){const g=typeof A=="string"?A:A.type;if(!g)throw new Error(`Invalid DynoType: ${String(A)}`);return`${g} ${t}${e!=null?`[${e}]`:""}`}function JA(t){var s;let A=!1;const e=t.split(`
`).map(B=>{const i=B.trimEnd();return A?i:i.length>0?(A=!0,i):null}).filter(B=>B!=null);for(;e.length>0&&e[e.length-1].length===0;)e.pop();if(e.length===0)return[];const g=(s=e[0].match(/^\s*/))==null?void 0:s[0];if(!g)return e;const I=new RegExp(`^${g}`);return e.map(B=>B.replace(I,""))}function rA(t){return JA(t).join(`
`)}class F extends X{constructor({a:A,outKey:e,outTypeFunc:g}){const I={a:Z(A)},s=g(Z(A)),B={[e]:s};super({inTypes:I,outTypes:B,inputs:{a:A}}),this.outKey=e}dynoOut(){return new V(this,this.outKey)}}class tA extends X{constructor({a:A,b:e,outKey:g,outTypeFunc:I}){const s={a:Z(A),b:Z(e)},B=I(Z(A),Z(e)),i={[g]:B};super({inTypes:s,outTypes:i,inputs:{a:A,b:e}}),this.outKey=g}dynoOut(){return new V(this,this.outKey)}}class pt extends X{constructor({a:A,b:e,c:g,outKey:I,outTypeFunc:s}){const B={a:Z(A),b:Z(e),c:Z(g)},i=s(Z(A),Z(e),Z(g)),Q={[I]:i};super({inTypes:B,outTypes:Q,inputs:{a:A,b:e,c:g}}),this.outKey=I}dynoOut(){return new V(this,this.outKey)}}const AA={type:"Gsplat"},ge={type:"PackedSplats"},ln=t=>new Zg({packedSplats:t}),Gt=(t,A)=>new Wg({packedSplats:t,index:A}),Vg=(t,A,e,g)=>new jg({packedSplats:t,index:A,base:e,count:g}),ct=t=>new Pg({gsplat:t}),Bt=({gsplat:t,flags:A,index:e,center:g,scales:I,quaternion:s,rgba:B,rgb:i,opacity:Q,x:C,y:a,z:n,r:o,g:r,b:h})=>new _g({gsplat:t,flags:A,index:e,center:g,scales:I,quaternion:s,rgba:B,rgb:i,opacity:Q,x:C,y:a,z:n,r:o,g:r,b:h}),He=t=>new $g({gsplat:t}),Ag=(t,{scale:A,rotate:e,translate:g,recolor:I})=>new AI({gsplat:t,scale:A,rotate:e,translate:g,recolor:I}),xA=rA(`
struct Gsplat {
vec3 center;
uint flags;
vec3 scales;
int index;
vec4 quaternion;
vec4 rgba;
};
const uint GSPLAT_FLAG_ACTIVE = 1u << 0u;
bool isGsplatActive(uint flags) {
return (flags & GSPLAT_FLAG_ACTIVE) != 0u;
}
`),pe=rA(`
struct PackedSplats {
usampler2DArray texture;
int numSplats;
vec4 rgbMinMaxLnScaleMinMax;
};
`);class Zg extends F{constructor({packedSplats:A}){super({a:A,outKey:"numSplats",outTypeFunc:()=>"int"}),this.statements=({inputs:e,outputs:g})=>[`${g.numSplats} = ${e.a}.numSplats;`]}}const Xg=rA(`
bool readPackedSplat(usampler2DArray texture, int numSplats, vec4 rgbMinMaxLnScaleMinMax, int index, out Gsplat gsplat) {
if ((index >= 0) && (index < numSplats)) {
uvec4 packed = texelFetch(texture, splatTexCoord(index), 0);
unpackSplatEncoding(packed, gsplat.center, gsplat.scales, gsplat.quaternion, gsplat.rgba, rgbMinMaxLnScaleMinMax);
return true;
} else {
return false;
}
}
`);class Wg extends X{constructor({packedSplats:A,index:e}){super({inTypes:{packedSplats:ge,index:"int"},outTypes:{gsplat:AA},inputs:{packedSplats:A,index:e},globals:()=>[xA,pe,Xg],statements:({inputs:g,outputs:I})=>{const{gsplat:s}=I;if(!s)return[];const{packedSplats:B,index:i}=g;let Q;return B&&i?Q=JA(`
if (readPackedSplat(${B}.texture, ${B}.numSplats, ${B}.rgbMinMaxLnScaleMinMax, ${i}, ${s})) {
bool zeroSize = all(equal(${s}.scales, vec3(0.0, 0.0, 0.0)));
${s}.flags = zeroSize ? 0u : GSPLAT_FLAG_ACTIVE;
} else {
${s}.flags = 0u;
}
`):Q=[`${s}.flags = 0u;`],Q.push(`${s}.index = ${i??"0"};`),Q}})}dynoOut(){return new V(this,"gsplat")}}class jg extends X{constructor({packedSplats:A,index:e,base:g,count:I}){super({inTypes:{packedSplats:ge,index:"int",base:"int",count:"int"},outTypes:{gsplat:AA},inputs:{packedSplats:A,index:e,base:g,count:I},globals:()=>[xA,pe,Xg],statements:({inputs:s,outputs:B})=>{const{gsplat:i}=B;if(!i)return[];const{packedSplats:Q,index:C,base:a,count:n}=s;let o;return Q&&C&&a&&n?o=JA(`
${i}.flags = 0u;
if ((${C} >= ${a}) && (${C} < (${a} + ${n}))) {
if (readPackedSplat(${Q}.texture, ${Q}.numSplats, ${Q}.rgbMinMaxLnScaleMinMax, ${C}, ${i})) {
bool zeroSize = all(equal(${i}.scales, vec3(0.0, 0.0, 0.0)));
${i}.flags = zeroSize ? 0u : GSPLAT_FLAG_ACTIVE;
}
}
`):o=[`${i}.flags = 0u;`],o.push(`${i}.index = ${C??"0"};`),o}})}dynoOut(){return new V(this,"gsplat")}}class Pg extends X{constructor({gsplat:A}){super({inTypes:{gsplat:AA},outTypes:{flags:"uint",active:"bool",index:"int",center:"vec3",scales:"vec3",quaternion:"vec4",rgba:"vec4",rgb:"vec3",opacity:"float",x:"float",y:"float",z:"float",r:"float",g:"float",b:"float"},inputs:{gsplat:A},globals:()=>[xA],statements:({inputs:e,outputs:g})=>{const{gsplat:I}=e,{flags:s,active:B,index:i,center:Q,scales:C,quaternion:a,rgba:n,rgb:o,opacity:r,x:h,y:c,z:l,r:u,g:w,b:D}=g;return[s?`${s} = ${I?`${I}.flags`:"0u"};`:null,B?`${B} = isGsplatActive(${I?`${I}.flags`:"0u"});`:null,i?`${i} = ${I?`${I}.index`:"0"};`:null,Q?`${Q} = ${I?`${I}.center`:"vec3(0.0, 0.0, 0.0)"};`:null,C?`${C} = ${I?`${I}.scales`:"vec3(0.0, 0.0, 0.0)"};`:null,a?`${a} = ${I?`${I}.quaternion`:"vec4(0.0, 0.0, 0.0, 1.0)"};`:null,n?`${n} = ${I?`${I}.rgba`:"vec4(0.0, 0.0, 0.0, 0.0)"};`:null,o?`${o} = ${I?`${I}.rgba.rgb`:"vec3(0.0, 0.0, 0.0)"};`:null,r?`${r} = ${I?`${I}.rgba.a`:"0.0"};`:null,h?`${h} = ${I?`${I}.center.x`:"0.0"};`:null,c?`${c} = ${I?`${I}.center.y`:"0.0"};`:null,l?`${l} = ${I?`${I}.center.z`:"0.0"};`:null,u?`${u} = ${I?`${I}.rgba.r`:"0.0"};`:null,w?`${w} = ${I?`${I}.rgba.g`:"0.0"};`:null,D?`${D} = ${I?`${I}.rgba.b`:"0.0"};`:null].filter(Boolean)}})}}class _g extends X{constructor({gsplat:A,flags:e,index:g,center:I,scales:s,quaternion:B,rgba:i,rgb:Q,opacity:C,x:a,y:n,z:o,r,g:h,b:c}){super({inTypes:{gsplat:AA,flags:"uint",index:"int",center:"vec3",scales:"vec3",quaternion:"vec4",rgba:"vec4",rgb:"vec3",opacity:"float",x:"float",y:"float",z:"float",r:"float",g:"float",b:"float"},outTypes:{gsplat:AA},inputs:{gsplat:A,flags:e,index:g,center:I,scales:s,quaternion:B,rgba:i,rgb:Q,opacity:C,x:a,y:n,z:o,r,g:h,b:c},globals:()=>[xA],statements:({inputs:l,outputs:u})=>{const{gsplat:w}=u;if(!w)return[];const{gsplat:D,flags:y,index:d,center:m,scales:M,quaternion:p,rgba:f,rgb:R,opacity:N,x:S,y:L,z:x,r:G,g:U,b:J}=l;return[`${w}.flags = ${y??(D?`${D}.flags`:"0u")};`,`${w}.index = ${d??(D?`${D}.index`:"0")};`,`${w}.center = ${m??(D?`${D}.center`:"vec3(0.0, 0.0, 0.0)")};`,`${w}.scales = ${M??(D?`${D}.scales`:"vec3(0.0, 0.0, 0.0)")};`,`${w}.quaternion = ${p??(D?`${D}.quaternion`:"vec4(0.0, 0.0, 0.0, 1.0)")};`,`${w}.rgba = ${f??(D?`${D}.rgba`:"vec4(0.0, 0.0, 0.0, 0.0)")};`,R?`${w}.rgba.rgb = ${R};`:null,N?`${w}.rgba.a = ${N};`:null,S?`${w}.center.x = ${S};`:null,L?`${w}.center.y = ${L};`:null,x?`${w}.center.z = ${x};`:null,G?`${w}.rgba.r = ${G};`:null,U?`${w}.rgba.g = ${U};`:null,J?`${w}.rgba.b = ${J};`:null].filter(Boolean)}})}dynoOut(){return new V(this,"gsplat")}}const Og=rA(`
vec3 gsplatNormal(vec3 scales, vec4 quaternion) {
float minScale = min(scales.x, min(scales.y, scales.z));
vec3 normal;
if (scales.z == minScale) {
normal = vec3(0.0, 0.0, 1.0);
} else if (scales.y == minScale) {
normal = vec3(0.0, 1.0, 0.0);
} else {
normal = vec3(1.0, 0.0, 0.0);
}
return quatVec(quaternion, normal);
}
`);class $g extends F{constructor({gsplat:A}){super({a:A,outKey:"normal",outTypeFunc:()=>"vec3"}),this.globals=()=>[xA,Og],this.statements=({inputs:e,outputs:g})=>[`${g.normal} = gsplatNormal(${e.a}.scales, ${e.a}.quaternion);`]}}class AI extends X{constructor({gsplat:A,scale:e,rotate:g,translate:I,recolor:s}){super({inTypes:{gsplat:AA,scale:"float",rotate:"vec4",translate:"vec3",recolor:"vec4"},outTypes:{gsplat:AA},inputs:{gsplat:A,scale:e,rotate:g,translate:I,recolor:s},globals:()=>[xA],statements:({inputs:B,outputs:i,compile:Q})=>{const{gsplat:C}=i;if(!C||!B.gsplat)return[];const{scale:a,rotate:n,translate:o,recolor:r}=B,h=Q.indent;return[`${C} = ${B.gsplat};`,`if (isGsplatActive(${C}.flags)) {`,a?`${h}${C}.center *= ${a};`:null,n?`${h}${C}.center = quatVec(${n}, ${C}.center);`:null,o?`${h}${C}.center += ${o};`:null,a?`${h}${C}.scales *= ${a};`:null,n?`${h}${C}.quaternion = quatQuat(${n}, ${C}.quaternion);`:null,r?`${h}${C}.rgba *= ${r};`:null,"}"].filter(Boolean)}})}dynoOut(){return new V(this,"gsplat")}}const tI=(t,A)=>new eI({gsplat:t,rgbMinMaxLnScaleMinMax:A}),un=t=>new tg({rgba8:t});class eI extends X{constructor({gsplat:A,rgbMinMaxLnScaleMinMax:e}){super({inTypes:{gsplat:AA,rgbMinMaxLnScaleMinMax:"vec4"},inputs:{gsplat:A,rgbMinMaxLnScaleMinMax:e},globals:()=>[xA],statements:({inputs:g,outputs:I})=>{const{output:s}=I;if(!s)return[];const{gsplat:B,rgbMinMaxLnScaleMinMax:i}=g;return B?JA(`
if (isGsplatActive(${B}.flags)) {
${s} = packSplatEncoding(${B}.center, ${B}.scales, ${B}.quaternion, ${B}.rgba, ${i});
} else {
${s} = uvec4(0u, 0u, 0u, 0u);
}
`):[`${s} = uvec4(0u, 0u, 0u, 0u);`]}})}dynoOut(){return new V(this,"output")}}class tg extends X{constructor({rgba8:A}){super({inTypes:{rgba8:"vec4"},inputs:{rgba8:A},statements:({inputs:e,outputs:g})=>[`target = ${e.rgba8??"vec4(0.0, 0.0, 0.0, 0.0)"};`]})}dynoOut(){return new V(this,"rgba8")}}const wn=(t,A,e)=>new k({key:t,type:A,value:e}),Dn=(t=!1,A)=>new re({key:A,value:t}),yn=(t=0,A)=>new gI({key:A,value:t}),pn=(t=0,A)=>new Xt({key:A,value:t}),KA=(t=0,A)=>new ht({key:A,value:t}),dn=(t,A)=>new II({key:A,value:t}),fn=(t,A)=>new sI({key:A,value:t}),Mn=(t,A)=>new BI({key:A,value:t}),Sn=(t,A)=>new qt({key:A,value:t}),mn=(t,A)=>new iI({key:A,value:t}),Nn=(t,A)=>new QI({key:A,value:t}),Fn=(t,A)=>new nI({key:A,value:t}),et=(t,A)=>new xt({key:A,value:t}),Gn=(t,A)=>new CI({key:A,value:t}),xn=(t,A)=>new aI({key:A,value:t}),kn=(t,A)=>new EI({key:A,value:t}),Rn=(t,A)=>new Lt({key:A,value:t}),Un=(t,A)=>new oI({key:A,value:t}),Ln=(t,A)=>new rI({key:A,value:t}),Yn=(t,A)=>new cI({key:A,value:t}),Jn=(t,A)=>new hI({key:A,value:t}),bn=(t,A)=>new lI({key:A,value:t}),vn=(t,A)=>new uI({key:A,value:t}),Tn=(t,A)=>new wI({key:A,value:t}),Hn=(t,A)=>new DI({key:A,value:t}),Kn=(t,A)=>new yI({key:A,value:t}),qn=(t,A)=>new pI({key:A,value:t}),zn=(t,A)=>new dI({key:A,value:t}),Vn=(t,A)=>new fI({key:A,value:t}),Zn=(t,A)=>new MI({key:A,value:t}),Xn=(t,A)=>new SI({key:A,value:t}),Wn=(t,A)=>new mI({key:A,value:t}),jn=(t,A)=>new zt({key:A,value:t}),Pn=(t,A)=>new NI({key:t,value:A}),_n=(t,A)=>new FI({key:A,value:t}),On=(t,A)=>new GI({key:A,value:t}),$n=(t,A)=>new xI({key:A,value:t}),AC=(t,A)=>new kI({key:A,value:t}),tC=(t,A)=>new RI({key:A,value:t}),eC=(t,A)=>new UI({key:A,value:t}),gC=(t,A)=>new LI({key:A,value:t}),IC=(t,A)=>new YI({key:A,value:t}),sC=(t,A)=>new JI({key:A,value:t}),BC=(t,A)=>new bI({key:A,value:t});class k extends X{constructor({key:A,type:e,count:g,value:I,update:s,globals:B}){A=A??"value",super({outTypes:{[A]:e},update:()=>{if(s){const i=s(this.value);i!==void 0&&(this.value=i)}this.uniform.value=this.value},generate:({inputs:i,outputs:Q})=>{const C=(B==null?void 0:B({inputs:i,outputs:Q}))??[],a={},n=Q[A];return n&&(C.push(`uniform ${$e(n,e,g)};`),a[n]=this.uniform),{globals:C,uniforms:a}}}),this.type=e,this.count=g,this.value=I,this.uniform={value:I},this.outKey=A}dynoOut(){return new V(this,this.outKey)}}class re extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"bool",value:e,update:g})}}class gI extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"uint",value:e,update:g})}}class Xt extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"int",value:e,update:g})}}class ht extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"float",value:e,update:g})}}class II extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"bvec2",value:e,update:g})}}class sI extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"uvec2",value:e,update:g})}}class BI extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"ivec2",value:e,update:g})}}class qt extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"vec2",value:e,update:g})}}class iI extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"bvec3",value:e,update:g})}}class QI extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"uvec3",value:e,update:g})}}class nI extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"ivec3",value:e,update:g})}}class xt extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"vec3",value:e,update:g})}}class CI extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"bvec4",value:e,update:g})}}class aI extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"uvec4",value:e,update:g})}}class EI extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"ivec4",value:e,update:g})}}class Lt extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"vec4",value:e,update:g})}}class oI extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"mat2",value:e,update:g})}}class rI extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"mat2x2",value:e,update:g})}}class cI extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"mat2x3",value:e,update:g})}}class hI extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"mat2x4",value:e,update:g})}}class lI extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"mat3",value:e,update:g})}}class uI extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"mat3x2",value:e,update:g})}}class wI extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"mat3x3",value:e,update:g})}}class DI extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"mat3x4",value:e,update:g})}}class yI extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"mat4",value:e,update:g})}}class pI extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"mat4x2",value:e,update:g})}}class dI extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"mat4x3",value:e,update:g})}}class fI extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"mat4x4",value:e,update:g})}}class MI extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"usampler2D",value:e,update:g})}}class SI extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"isampler2D",value:e,update:g})}}class mI extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"sampler2D",value:e,update:g})}}class zt extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"usampler2DArray",value:e,update:g})}}class NI extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"isampler2DArray",value:e,update:g})}}class FI extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"sampler2DArray",value:e,update:g})}}class GI extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"usampler3D",value:e,update:g})}}class xI extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"isampler3D",value:e,update:g})}}class kI extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"sampler3D",value:e,update:g})}}class RI extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"usamplerCube",value:e,update:g})}}class UI extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"isamplerCube",value:e,update:g})}}class LI extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"samplerCube",value:e,update:g})}}class YI extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"sampler2DShadow",value:e,update:g})}}class JI extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"sampler2DArrayShadow",value:e,update:g})}}class bI extends k{constructor({key:A,value:e,update:g}){super({key:A,type:"samplerCubeShadow",value:e,update:g})}}const Ie=new Float32Array(1),de=new Uint32Array(Ie.buffer);function iC(t){return Ie[0]=t,de[0]}function QC(t){return de[0]=t,Ie[0]}function it(t){Ie[0]=t;const A=de[0],e=A>>31&1,g=A>>23&255,I=A&8388607,s=e<<15;if(g===255)return I!==0?s|32767:s|31744;const B=g-127+15;if(B>=31)return s|31744;if(B<=0){if(B<-10)return s;const Q=(I|8388608)>>1-B+13;return s|Q}const i=I>>13;return s|B<<10|i}function DA(t){const A=t>>15&1,e=t>>10&31,g=t&1023;let I;if(e===0)if(g===0)I=A<<31;else{let s=g,B=-14;for(;(s&1024)===0;)s<<=1,B--;s&=1023;const i=B+127,Q=s<<13;I=A<<31|i<<23|Q}else if(e===31)g===0?I=A<<31|2139095040:I=A<<31|2143289344;else{const s=e-15+127,B=g<<13;I=A<<31|s<<23|B}return de[0]=I,Ie[0]}function FA(t){return Math.max(0,Math.min(255,Math.round(t*255)))}function Vt(t){return Math.max(-127,Math.min(127,Math.round(t*127)))}function vI(t){return t/255}function TI(t){return t/127}class nC{constructor({asyncFetch:A,maxItems:e=5}){this.asyncFetch=A,this.maxItems=e,this.items=[]}async getFetch(A){const e=this.items.findIndex(I=>I.key===A);if(e>=0){const I=this.items.splice(e,1)[0];return this.items.push(I),I.data}const g=await this.asyncFetch(A);for(this.items.push({key:A,data:g});this.items.length>this.maxItems;)this.items.shift();return g}}function CC(t,A){const e=Object.entries(t).map(([g,I])=>[g,A(I,g)]);return Object.fromEntries(e)}function aC(t,A){const e=Object.entries(t).map(([g,I])=>[g,A(I,g)]).filter(([g,I])=>I!==void 0);return Object.fromEntries(e)}function HI(t){const A=[],e=new Set;function g(I){I&&typeof I=="object"&&!e.has(I)&&(e.add(I),I instanceof ArrayBuffer?A.push(I):ArrayBuffer.isView(I)?A.push(I.buffer):Array.isArray(I)?I.forEach(g):Object.values(I).forEach(g))}return g(t),A}function EC(t,A){return new Array(t).fill(null).map((e,g)=>A(g))}class KI{constructor({allocate:A,dispose:e,valid:g}){this.items=[],this.allocate=A,this.dispose=e,this.valid=g}alloc(A){for(;;){const e=this.items.pop();if(!e)break;if(this.valid(e,A))return e;this.dispose&&this.dispose(e)}return this.allocate(A)}free(A){this.items.push(A)}disposeAll(){let A;for(A=this.items.pop();A;)this.dispose&&this.dispose(A),A=this.items.pop()}}function ce(t,A,e,g,I,s,B,i,Q,C,a,n,o,r,h,c,l){const u=(l==null?void 0:l.rgbMin)??0,D=((l==null?void 0:l.rgbMax)??1)-u,y=FA((r-u)/D),d=FA((h-u)/D),m=FA((c-u)/D),M=FA(o),p=eg(new E.Quaternion(Q,C,a,n)),f=p&255,R=p>>>8&255,N=p>>>16&255,S=(l==null?void 0:l.lnScaleMin)??kA,x=254/(((l==null?void 0:l.lnScaleMax)??RA)-S),G=s<rt?0:Math.min(255,Math.max(1,Math.round((Math.log(s)-S)*x)+1)),U=B<rt?0:Math.min(255,Math.max(1,Math.round((Math.log(B)-S)*x)+1)),J=i<rt?0:Math.min(255,Math.max(1,Math.round((Math.log(i)-S)*x)+1)),P=it(e),T=it(g),eA=it(I),z=A*4;t[z]=y|d<<8|m<<16|M<<24,t[z+1]=P|T<<16,t[z+2]=eA|f<<16|R<<24,t[z+3]=G|U<<8|J<<16|N<<24}function oC(t,A,e,g,I){const s=it(e),B=it(g),i=it(I),Q=A*4;t[Q+1]=s|B<<16,t[Q+2]=i|t[Q+2]&4294901760}function rC(t,A,e,g,I,s){const B=(s==null?void 0:s.lnScaleMin)??kA,Q=254/(((s==null?void 0:s.lnScaleMax)??RA)-B),C=e<rt?0:Math.min(255,Math.max(1,Math.round((Math.log(e)-B)*Q)+1)),a=g<rt?0:Math.min(255,Math.max(1,Math.round((Math.log(g)-B)*Q)+1)),n=I<rt?0:Math.min(255,Math.max(1,Math.round((Math.log(I)-B)*Q)+1)),o=A*4;t[o+3]=C|a<<8|n<<16|t[o+3]&4278190080}function cC(t,A,e,g,I,s){const B=eg(new E.Quaternion(e,g,I,s)),i=B&255,Q=B>>>8&255,C=B>>>16&255,a=A*4;t[a+2]=t[a+2]&65535|i<<16|Q<<24,t[a+3]=t[a+3]&16777215|C<<24}function hC(t,A,e,g,I,s,B){const i=(B==null?void 0:B.rgbMin)??0,C=((B==null?void 0:B.rgbMax)??1)-i,a=FA((e-i)/C),n=FA((g-i)/C),o=FA((I-i)/C),r=FA(s),h=A*4;t[h]=a|n<<8|o<<16|r<<24}function lC(t,A,e,g,I,s){const B=(s==null?void 0:s.rgbMin)??0,Q=((s==null?void 0:s.rgbMax)??1)-B,C=FA((e-B)/Q),a=FA((g-B)/Q),n=FA((I-B)/Q),o=A*4;t[o]=C|a<<8|n<<16|t[o]&4278190080}function uC(t,A,e){const g=FA(e),I=A*4;t[I]=t[I]&16777215|g<<24}const wC=new E.Vector3,DC=new E.Vector3,yC=new E.Quaternion,pC=new E.Color,dC={center:wC,scales:DC,quaternion:yC,color:pC,opacity:0};function he(t,A,e){const g=dC,I=A*4,s=t[I],B=t[I+1],i=t[I+2],Q=t[I+3],C=(e==null?void 0:e.rgbMin)??0,n=((e==null?void 0:e.rgbMax)??1)-C;g.color.set(C+(s&255)/255*n,C+(s>>>8&255)/255*n,C+(s>>>16&255)/255*n),g.opacity=(s>>>24&255)/255,g.center.set(DA(B&65535),DA(B>>>16&65535),DA(i&65535));const o=(e==null?void 0:e.lnScaleMin)??kA,h=(((e==null?void 0:e.lnScaleMax)??RA)-o)/254,c=Q&255;g.scales.x=c===0?0:Math.exp(o+(c-1)*h);const l=Q>>>8&255;g.scales.y=l===0?0:Math.exp(o+(l-1)*h);const u=Q>>>16&255;g.scales.z=u===0?0:Math.exp(o+(u-1)*h);const w=i>>>16&65535|Q>>>8&16711680;return As(w,g.quaternion),g}function MA(t){const A=j,e=Math.max(Oe,Math.min(zA,Math.ceil(t/A))),g=Math.ceil(t/(A*e)),I=A*e*g;return{width:A,height:e,depth:g,maxSplats:I}}function fC(t){const A=j,e=Math.max(Oe,Math.min(zA,Math.ceil(t/A))),g=Math.ceil(t/(A*e));return A*e*g}function qI(){return navigator.maxTouchPoints>0?!0:/Mobi|Android|iPhone|iPad|iPod|Opera Mini|IEMobile/.test(navigator.userAgent)}function zI(){return/Android/.test(navigator.userAgent)}function VI(){return/Oculus/.test(navigator.userAgent)}function ZI(t,A,e){const g=new Uint8Array(A*4);for(let I=0;I<e/2;I++){const s=I*A*4,B=(e-1-I)*A*4;g.set(t.subarray(s,s+A*4)),t.set(t.subarray(B,B+A*4),s),t.set(g,B)}return t}function XI(t,A,e){const g=document.createElement("canvas");g.width=A,g.height=e;const I=g.getContext("2d");if(!I)throw new Error("Can't get 2d context");const s=I.createImageData(A,e);return s.data.set(t),I.putImageData(s,0,0),g.toDataURL("image/png")}function WI(t){const A=new E.Clock(t.autoStart);return A.startTime=t.startTime,A.oldTime=t.oldTime,A.elapsedTime=t.elapsedTime,A.running=t.running,A}function MC(t){return Object.fromEntries(Object.entries(t).filter(([A,e])=>e!==void 0))}const jI=rA(`
precision highp float;
in vec3 position;
void main() {
gl_Position = vec4(position.xy, 0.0, 1.0);
}
`);function PI(t){const A=new E.Vector3;for(const e of t)A.add(e);return A.divideScalar(t.length)}function _I(t){if(t.length===0)return new E.Quaternion;const A=t[0].clone();for(let e=1;e<t.length;e++)t[e].dot(t[0])<0?(A.x-=t[e].x,A.y-=t[e].y,A.z-=t[e].z,A.w-=t[e].w):(A.x+=t[e].x,A.y+=t[e].y,A.z+=t[e].z,A.w+=t[e].w);return A.normalize()}function OI(t,A){const e=new E.Vector3(0,0,0).applyMatrix4(t),g=new E.Vector3(0,0,0).applyMatrix4(A),I=new E.Vector3(0,0,-1).applyMatrix4(t).sub(e).normalize(),s=new E.Vector3(0,0,-1).applyMatrix4(A).sub(g).normalize(),B=e.distanceTo(g),i=I.dot(s);return{distance:B,coincidence:i}}function SC({matrix1:t,matrix2:A,maxDistance:e}){const g=new E.Vector3(0,0,0).applyMatrix4(t),I=new E.Vector3(0,0,0).applyMatrix4(A);return g.distanceTo(I)<=e}function mC({matrix1:t,matrix2:A,maxDistance:e,minCoincidence:g}){const{distance:I,coincidence:s}=OI(t,A);return I<=e&&(g==null||s>=g)}function $I(t,A){const[e,g]=[new E.Vector3,new E.Quaternion],[I,s]=[new E.Vector3,new E.Quaternion];t.decompose(e,g,new E.Vector3),A.decompose(I,s,new E.Vector3);const B=e.distanceTo(I),i=Math.abs(g.dot(s));return{distance:B,coorient:i}}function le({matrix1:t,matrix2:A,maxDistance:e,minCoorient:g}){const{distance:I,coorient:s}=$I(t,A);return I<=e&&(g==null||s>=g)}function NC(t,A=.001){return Math.abs(t)<A?0:Math.sign(t)}function FC(t){const A=t.w<0,e=Vt(A?-t.x:t.x),g=Vt(A?-t.y:t.y),I=Vt(A?-t.z:t.z),s=e&255,B=g&255,i=I&255;return s|B<<8|i<<16}function GC(t,A){const e=t<<24>>24,g=t<<16>>24,I=t<<8>>24;A.set(e/127,g/127,I/127,0);const s=A.x*A.x+A.y*A.y+A.z*A.z;return A.w=Math.sqrt(Math.max(0,1-s)),A}function eg(t){const A=t.clone().normalize();A.w<0&&A.set(-A.x,-A.y,-A.z,-A.w);const e=2*Math.acos(A.w),g=Math.sqrt(A.x*A.x+A.y*A.y+A.z*A.z),I=g<1e-6?new E.Vector3(1,0,0):new E.Vector3(A.x,A.y,A.z).divideScalar(g),s=Math.abs(I.x)+Math.abs(I.y)+Math.abs(I.z);let B=I.x/s,i=I.y/s;if(I.z<0){const r=B;B=(1-Math.abs(i))*(B>=0?1:-1),i=(1-Math.abs(r))*(i>=0?1:-1)}const Q=B*.5+.5,C=i*.5+.5,a=Math.round(Q*255),n=Math.round(C*255);return Math.round(e*(255/Math.PI))<<16|n<<8|a}function As(t,A){const e=t&255,g=t>>>8&255,I=t>>>16&255,s=e/255,B=g/255;let i=(s-.5)*2,Q=(B-.5)*2;const C=1-(Math.abs(i)+Math.abs(Q)),a=Math.max(-C,0);i+=i>=0?-a:a,Q+=Q>=0?-a:a;const n=new E.Vector3(i,Q,C).normalize(),r=I/255*Math.PI*.5,h=Math.sin(r),c=Math.cos(r);return A.set(n.x*h,n.y*h,n.z*h,c),A}function xC(t){const A=t.clone().normalize(),e=2*(A.w*A.x+A.y*A.z),g=1-2*(A.x*A.x+A.y*A.y),I=Math.atan2(e,g),s=2*(A.w*A.y-A.z*A.x),B=Math.abs(s)>=1?Math.sign(s)*(Math.PI/2):Math.asin(s),i=2*(A.w*A.z+A.x*A.y),Q=1-2*(A.y*A.y+A.z*A.z),C=Math.atan2(i,Q),a=(I+Math.PI)/(2*Math.PI),n=(B+Math.PI)/(2*Math.PI),o=(C+Math.PI)/(2*Math.PI),r=Math.round(a*255),h=Math.round(n*255);return Math.round(o*255)<<16|h<<8|r}function kC(t,A){const e=t&255,g=t>>>8&255,I=t>>>16&255,s=e/255,B=g/255,i=I/255,Q=s*(2*Math.PI)-Math.PI,C=B*(2*Math.PI)-Math.PI,a=i*(2*Math.PI)-Math.PI,n=Math.cos(Q*.5),o=Math.sin(Q*.5),r=Math.cos(C*.5),h=Math.sin(C*.5),c=Math.cos(a*.5),l=Math.sin(a*.5);return A.w=n*r*c+o*h*l,A.x=o*r*c-n*h*l,A.y=n*h*c+o*r*l,A.z=n*r*l-o*h*c,A.normalize(),A}function Be(t,A,e,g){const I=Math.max(-127,Math.min(127,t*127)),s=Math.max(-127,Math.min(127,A*127)),B=Math.max(-127,Math.min(127,e*127)),i=Math.max(-127,Math.min(127,g*127));return I&255|(s&255)<<8|(B&255)<<16|(i&255)<<24}function RC(t,A,e,g){const I=(g==null?void 0:g.sh1Min)??-1,s=(g==null?void 0:g.sh1Max)??1,B=.5*(I+s),i=63/(s-I),Q=A*2;for(let C=0;C<9;++C){const a=(e[C]-B)*i,n=Math.round(Math.max(-63,Math.min(63,a)))&127,o=C*7,r=o+7,h=Math.floor(o/32),c=o-h*32,l=n<<c&4294967295;if(t[Q+h]|=l,r>h*32+32){const u=n>>>32-c&4294967295;t[Q+h+1]|=u}}}function UC(t,A,e,g){const I=(g==null?void 0:g.sh2Min)??-1,s=(g==null?void 0:g.sh2Max)??1,B=.5*(I+s),i=.5/(s-I);t[A*4+0]=Be((e[0]-B)*i,(e[1]-B)*i,(e[2]-B)*i,(e[3]-B)*i),t[A*4+1]=Be((e[4]-B)*i,(e[5]-B)*i,(e[6]-B)*i,(e[7]-B)*i),t[A*4+2]=Be((e[8]-B)*i,(e[9]-B)*i,(e[10]-B)*i,(e[11]-B)*i),t[A*4+3]=Be((e[12]-B)*i,(e[13]-B)*i,(e[14]-B)*i,0)}function LC(t,A,e,g){const I=(g==null?void 0:g.sh3Min)??-1,s=(g==null?void 0:g.sh3Max)??1,B=.5*(I+s),i=31/(s-I),Q=A*4;for(let C=0;C<21;++C){const a=(e[C]-B)*i,n=Math.round(Math.max(-31,Math.min(31,a)))&63,o=C*6,r=o+6,h=Math.floor(o/32),c=o-h*32,l=n<<c&4294967295;if(t[Q+h]|=l,r>h*32+32){const u=n>>>32-c&4294967295;t[Q+h+1]|=u}}}function ts(t,A){const e=[];let g=0,I=null;const s=new kg((Q,C)=>{if(e.push(Q),g+=Q.length,C||g>=A){const a=new Uint8Array(g);let n=0;for(const o of e)a.set(o,n),n+=o.length;I=a.slice(0,A)}}),B=1024;let i=0;for(;I==null&&i<t.length;){const Q=t.slice(i,i+B);s.push(Q,!1),i+=B}if(I==null&&(s.push(new Uint8Array,!0),I==null))throw new Error("Failed to decompress partial gzip");return I}class es{constructor({fileBytes:A,chunkBytes:e=64*1024}){this.fileBytes=A,this.chunkBytes=e,this.offset=0,this.chunks=[],this.totalBytes=0,this.gunzip=new kg((g,I)=>{this.chunks.push(g),this.totalBytes+=g.length})}read(A){for(;this.totalBytes<A&&this.offset<this.fileBytes.length;){const s=Math.min(this.offset+this.chunkBytes,this.fileBytes.length);this.gunzip.push(this.fileBytes.subarray(this.offset,s),!1),this.offset=s}if(this.totalBytes<A&&this.offset>=this.fileBytes.length&&this.gunzip.push(new Uint8Array(0),!0),this.totalBytes<A)throw new Error(`Unexpected EOF: needed ${A}, got ${this.totalBytes}`);const e=new Uint8Array(this.totalBytes);let g=0;for(const s of this.chunks)e.set(s,g),g+=s.length;const I=e.subarray(0,A);return this.chunks=[e.subarray(A)],this.totalBytes-=A,I}}const YC=Object.freeze(Object.defineProperty({__proto__:null,DataCache:nC,FreeList:KI,GunzipReader:es,IDENT_VERTEX_SHADER:jI,Sint8ToFloat:TI,Uint8ToFloat:vI,averagePositions:PI,averageQuaternions:_I,cloneClock:WI,coinciDist:OI,computeMaxSplats:fC,coorientDist:$I,decodeQuatEulerXyz888:kC,decodeQuatOctXy88R8:As,decodeQuatXyz888:GC,decompressPartialGzip:ts,encodeQuatEulerXyz888:xC,encodeQuatOctXy88R8:eg,encodeQuatXyz888:FC,encodeSh1Rgb:RC,encodeSh2Rgb:UC,encodeSh3Rgb:LC,epsilonSign:NC,flipPixels:ZI,floatBitsToUint:iC,floatToSint8:Vt,floatToUint8:FA,fromHalf:DA,getArrayBuffers:HI,getTextureSize:MA,isAndroid:zI,isMobile:qI,isOculus:VI,mapFilterObject:aC,mapObject:CC,newArray:EC,omitUndefined:MC,pixelsToPngUrl:XI,setPackedSplat:ce,setPackedSplatCenter:oC,setPackedSplatOpacity:uC,setPackedSplatQuat:cC,setPackedSplatRgb:lC,setPackedSplatRgba:hC,setPackedSplatScales:rC,toHalf:it,uintBitsToFloat:QC,unpackSplat:he,withinCoinciDist:mC,withinCoorientDist:le,withinDist:SC},Symbol.toStringTag,{value:"Module"}));class gg{constructor({graph:A,inputs:e,outputs:g,template:I}){this.graph=A,this.template=I,this.inputs=e??{},this.outputs=g??{};const s=new zg({indent:this.template.indent});for(const i in this.outputs)this.outputs[i]&&s.declares.add(this.outputs[i]);const B=A.compile({inputs:this.inputs,outputs:this.outputs,compile:s});this.shader=I.generate({globals:s.globals,statements:B}),this.uniforms=s.uniforms,this.updaters=s.updaters}prepareMaterial(){return JC(this)}update(){for(const A of this.updaters)A()}}class Ig{constructor(A){const e=A.match(/^([ \t]*)\{\{\s*GLOBALS\s*\}\}/m),g=A.match(/^([ \t]*)\{\{\s*STATEMENTS\s*\}\}/m);if(!e||!g)throw new Error("Template must contain {{ GLOBALS }} and {{ STATEMENTS }}");this.before=A.substring(0,e.index),this.between=A.substring(e.index+e[0].length,g.index),this.after=A.substring(g.index+g[0].length),this.indent=g[1]}generate({globals:A,statements:e}){return this.before+Array.from(A).join(`
`)+this.between+e.map(g=>this.indent+g).join(`
`)+this.after}}const cg=new Map;function JC(t){let A=cg.get(t);return A||(A=new E.RawShaderMaterial({glslVersion:E.GLSL3,vertexShader:jI,fragmentShader:t.shader,uniforms:t.uniforms}),cg.set(t,A),A)}function sg(t,A,e="add"){const g=()=>{throw new Error(`Invalid ${e} types: ${t}, ${A}`)};if(t===A)return t;if(t==="int"){if(lA(A))return A;g()}if(A==="int"){if(lA(t))return t;g()}if(t==="uint"){if(uA(A))return A;g()}if(A==="uint"){if(uA(t))return t;g()}if(t==="float"){if(Qt(A))return A;g()}if(A==="float"){if(Qt(t))return t;g()}throw new Error(`Invalid ${e} types: ${t}, ${A}`)}function bC(t,A){return sg(t,A,"sub")}function vC(t,A){const e=()=>{throw new Error(`Invalid mul types: ${t}, ${A}`)},g=I=>I;if(t==="int"){if(lA(A))return g(A);e()}if(A==="int"){if(lA(t))return g(t);e()}if(t==="uint"){if(uA(A))return g(A);e()}if(A==="uint"){if(uA(t))return g(t);e()}if(t==="float"){if(Qt(A))return g(A);e()}if(A==="float"){if(Qt(t))return g(t);e()}if(lA(t)||uA(t)||lA(A)||uA(A)){if(t===A)return g(t);e()}if(t==="vec2"){if(A==="vec2"||nt(A))return g("vec2");if(A==="mat3x2")return g("vec3");if(A==="mat4x2")return g("vec4");e()}if(t==="vec3"){if(A==="mat2x3")return g("vec2");if(A==="vec3"||Ct(A))return g("vec3");if(A==="mat4x3")return g("vec4");e()}if(t==="vec4"){if(A==="mat2x4")return g("vec2");if(A==="mat3x4")return g("vec3");if(A==="vec4"||at(A))return g("vec4");e()}if(A==="vec2"){if(nt(t))return g("vec2");if(t==="mat2x3")return g("vec3");if(t==="mat2x4")return g("vec4");e()}if(A==="vec3"){if(t==="mat3x2")return g("vec2");if(Ct(t))return g("vec3");if(t==="mat3x4")return g("vec4");e()}if(A==="vec4"){if(t==="mat4x2")return g("vec2");if(t==="mat4x3")return g("vec3");if(at(t))return g("vec4");e()}if(nt(t)){if(nt(A))return g("mat2");if(A==="mat3x2")return g("mat3x2");if(A==="mat4x2")return g("mat4x2");e()}if(t==="mat2x3"){if(nt(A))return g("mat2x3");if(A==="mat3x2")return g("mat3");if(A==="mat4x2")return g("mat4x3");e()}if(t==="mat2x4"){if(nt(A))return g("mat2x4");if(A==="mat3x2")return g("mat3x4");if(A==="mat4x2")return g("mat4");e()}if(t==="mat3x2"){if(A==="mat2x3")return g("mat2");if(Ct(A))return g("mat3x2");if(A==="mat4x3")return g("mat4x2");e()}if(Ct(t)){if(A==="mat2x3")return g("mat2x3");if(Ct(A))return g("mat3");if(A==="mat4x3")return g("mat4x3");e()}if(t==="mat3x4"){if(A==="mat2x3")return g("mat2x4");if(Ct(A))return g("mat3x4");if(A==="mat4x3")return g("mat4");e()}if(t==="mat4x2"){if(A==="mat2x4")return g("mat2");if(A==="mat3x4")return g("mat3x2");if(at(A))return g("mat4x2");e()}if(t==="mat4x3"){if(A==="mat2x4")return g("mat2x3");if(A==="mat3x4")return g("mat3");if(at(A))return g("mat4x3");e()}if(at(t)){if(A==="mat2x4")return g("mat2x4");if(A==="mat3x4")return g("mat3x4");if(at(A))return g("mat4");e()}throw new Error(`Invalid mul types: ${t}, ${A}`)}function TC(t,A){return sg(t,A,"div")}function HC(t,A){if(t===A)return t;if(t==="int"){if(lA(A))return A}else if(A==="int"){if(lA(t))return t}else if(t==="uint"){if(uA(A))return A}else if(A==="uint"&&uA(t))return t;throw new Error(`Invalid imod types: ${t}, ${A}`)}function KC(t,A){if(t===A||A==="float")return t;throw new Error(`Invalid mod types: ${t}, ${A}`)}function qC(t){return t}function zC(t){return t}function VC(t){return t}function ZC(t){return t}function XC(t){return t}function WC(t){return t}function jC(t){return t}function PC(t){return t}function _C(t){return t}function OC(t){return t}function $C(t){return t}function Aa(t){return t}function ta(t){return t}function ea(t){return t}function ga(t){return t}function Ia(t){return t}function gs(t,A,e="min"){if(t===A)return t;if(A==="float"){if(Ae(t))return t}else if(A==="int"){if(lA(t))return t}else if(A==="uint"&&uA(t))return t;throw new Error(`Invalid ${e} types: ${t}, ${A}`)}function sa(t,A){return gs(t,A,"max")}function Ba(t,A,e){if(A==="float"){if(Ae(t))return t}else if(A==="int"){if(lA(t))return t}else if(A==="uint"&&uA(t))return t;throw new Error(`Invalid clamp types: ${t}, ${A}`)}function ia(t,A,e){if(e===t||e==="float"||e==="bool"&&t==="float"||e==="bvec2"&&t==="vec2"||e==="bvec3"&&t==="vec3"||e==="bvec4"&&t==="vec4")return t;throw new Error(`Invalid mix types: ${t}, ${A}, ${e}`)}function Qa(t,A){if(t===A||A==="float")return A;throw new Error(`Invalid step types: ${t}, ${A}`)}function na(t,A,e){if(t===A&&(t===e||t==="float"))return e;throw new Error(`Invalid smoothstep types: ${t}, ${A}, ${e}`)}function Is(t,A="isNan"){if(t==="float")return"bool";if(t==="vec2")return"bvec2";if(t==="vec3")return"bvec3";if(t==="vec4")return"bvec4";throw new Error(`Invalid ${A} types: ${t}`)}function Ca(t){return Is(t,"isInf")}const hA=(t,A)=>new Qs({a:t,b:A}),wt=(t,A)=>new ns({a:t,b:A}),BA=(t,A)=>new Cs({a:t,b:A}),Ce=(t,A)=>new as({a:t,b:A}),Ke=(t,A)=>new Es({a:t,b:A}),ss=(t,A)=>new os({a:t,b:A}),aa=t=>new rs({a:t}).outputs,Bg=t=>new cs({a:t}),Ea=t=>new hs({a:t}),oa=t=>new ls({a:t}),ra=t=>new us({a:t}),ca=t=>new ws({a:t}),ha=t=>new Ds({a:t}),la=t=>new ys({a:t}),ae=t=>new ps({a:t}),ua=(t,A)=>new ds({a:t,b:A}),wa=t=>new fs({a:t}),Da=t=>new Ms({a:t}),ya=t=>new Ss({a:t}),pa=t=>new ms({a:t}),da=t=>new Ns({a:t}),fa=t=>new Fs({a:t}),Ma=t=>new Gs({a:t}),Sa=(t,A)=>new xs({a:t,b:A}),Bs=(t,A)=>new ks({a:t,b:A}),ma=(t,A,e)=>new Rs({a:t,min:A,max:e}),is=(t,A,e)=>new Us({a:t,b:A,t:e}),Na=(t,A)=>new Ls({edge:t,x:A}),Fa=(t,A,e)=>new Ys({edge0:t,edge1:A,x:e}),Ga=t=>new Js({a:t}),xa=t=>new bs({a:t});class Qs extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"sum",outTypeFunc:sg}),this.statements=({inputs:g,outputs:I})=>[`${I.sum} = ${g.a} + ${g.b};`]}}class ns extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"difference",outTypeFunc:bC}),this.statements=({inputs:g,outputs:I})=>[`${I.difference} = ${g.a} - ${g.b};`]}}class Cs extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"product",outTypeFunc:vC}),this.statements=({inputs:g,outputs:I})=>[`${I.product} = ${g.a} * ${g.b};`]}}class as extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"quotient",outTypeFunc:TC}),this.statements=({inputs:g,outputs:I})=>[`${I.quotient} = ${g.a} / ${g.b};`]}}class Es extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"remainder",outTypeFunc:HC}),this.statements=({inputs:g,outputs:I})=>[`${I.remainder} = ${g.a} % ${g.b};`]}}class os extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"remainder",outTypeFunc:KC}),this.statements=({inputs:g,outputs:I})=>[`${I.remainder} = mod(${g.a}, ${g.b});`]}}class rs extends X{constructor({a:A}){const e={a:Z(A)},g=e.a,I={fract:g,integer:g};super({inTypes:e,outTypes:I,inputs:{a:A}}),this.statements=({inputs:s,outputs:B})=>[`${B.fract} = modf(${s.a}, ${B.integer});`]}}class cs extends F{constructor({a:A}){super({a:A,outKey:"neg",outTypeFunc:qC}),this.statements=({inputs:e,outputs:g})=>[`${g.neg} = -${e.a};`]}}class hs extends F{constructor({a:A}){super({a:A,outKey:"abs",outTypeFunc:zC}),this.statements=({inputs:e,outputs:g})=>[`${g.abs} = abs(${e.a});`]}}class ls extends F{constructor({a:A}){super({a:A,outKey:"sign",outTypeFunc:VC}),this.statements=({inputs:e,outputs:g})=>[`${g.sign} = sign(${e.a});`]}}class us extends F{constructor({a:A}){super({a:A,outKey:"floor",outTypeFunc:ZC}),this.statements=({inputs:e,outputs:g})=>[`${g.floor} = floor(${e.a});`]}}class ws extends F{constructor({a:A}){super({a:A,outKey:"ceil",outTypeFunc:XC}),this.statements=({inputs:e,outputs:g})=>[`${g.ceil} = ceil(${e.a});`]}}class Ds extends F{constructor({a:A}){super({a:A,outKey:"trunc",outTypeFunc:WC}),this.statements=({inputs:e,outputs:g})=>[`${g.trunc} = trunc(${e.a});`]}}class ys extends F{constructor({a:A}){super({a:A,outKey:"round",outTypeFunc:jC}),this.statements=({inputs:e,outputs:g})=>[`${g.round} = round(${e.a});`]}}class ps extends F{constructor({a:A}){super({a:A,outKey:"fract",outTypeFunc:PC}),this.statements=({inputs:e,outputs:g})=>[`${g.fract} = fract(${e.a});`]}}class ds extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"power",outTypeFunc:_C}),this.statements=({inputs:g,outputs:I})=>[`${I.power} = pow(${g.a}, ${g.b});`]}}class fs extends F{constructor({a:A}){super({a:A,outKey:"exp",outTypeFunc:OC}),this.statements=({inputs:e,outputs:g})=>[`${g.exp} = exp(${e.a});`]}}class Ms extends F{constructor({a:A}){super({a:A,outKey:"exp2",outTypeFunc:$C}),this.statements=({inputs:e,outputs:g})=>[`${g.exp2} = exp2(${e.a});`]}}class Ss extends F{constructor({a:A}){super({a:A,outKey:"log",outTypeFunc:Aa}),this.statements=({inputs:e,outputs:g})=>[`${g.log} = log(${e.a});`]}}class ms extends F{constructor({a:A}){super({a:A,outKey:"log2",outTypeFunc:ta}),this.statements=({inputs:e,outputs:g})=>[`${g.log2} = log2(${e.a});`]}}class Ns extends F{constructor({a:A}){super({a:A,outKey:"sqr",outTypeFunc:ea}),this.statements=({inputs:e,outputs:g})=>[`${g.sqr} = ${e.a} * ${e.a};`]}}class Fs extends F{constructor({a:A}){super({a:A,outKey:"sqrt",outTypeFunc:ga}),this.statements=({inputs:e,outputs:g})=>[`${g.sqrt} = sqrt(${e.a});`]}}class Gs extends F{constructor({a:A}){super({a:A,outKey:"inversesqrt",outTypeFunc:Ia}),this.statements=({inputs:e,outputs:g})=>[`${g.inversesqrt} = inversesqrt(${e.a});`]}}class xs extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"min",outTypeFunc:gs}),this.statements=({inputs:g,outputs:I})=>[`${I.min} = min(${g.a}, ${g.b});`]}}class ks extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"max",outTypeFunc:sa}),this.statements=({inputs:g,outputs:I})=>[`${I.max} = max(${g.a}, ${g.b});`]}}class Rs extends pt{constructor({a:A,min:e,max:g}){super({a:A,b:e,c:g,outKey:"clamp",outTypeFunc:Ba}),this.statements=({inputs:I,outputs:s})=>{const{a:B,b:i,c:Q}=I;return[`${s.clamp} = clamp(${B}, ${i}, ${Q});`]}}}class Us extends pt{constructor({a:A,b:e,t:g}){super({a:A,b:e,c:g,outKey:"mix",outTypeFunc:ia}),this.statements=({inputs:I,outputs:s})=>{const{a:B,b:i,c:Q}=I;return[`${s.mix} = mix(${B}, ${i}, ${Q});`]}}}class Ls extends tA{constructor({edge:A,x:e}){super({a:A,b:e,outKey:"step",outTypeFunc:Qa}),this.statements=({inputs:g,outputs:I})=>{const{a:s,b:B}=g;return[`${I.step} = step(${s}, ${B});`]}}}class Ys extends pt{constructor({edge0:A,edge1:e,x:g}){super({a:A,b:e,c:g,outKey:"smoothstep",outTypeFunc:na}),this.statements=({inputs:I,outputs:s})=>{const{a:B,b:i,c:Q}=I;return[`${s.smoothstep} = smoothstep(${B}, ${i}, ${Q});`]}}}class Js extends F{constructor({a:A}){super({a:A,outKey:"isNan",outTypeFunc:Is}),this.statements=({inputs:e,outputs:g})=>[`${g.isNan} = isNan(${e.a});`]}}class bs extends F{constructor({a:A}){super({a:A,outKey:"isInf",outTypeFunc:Ca}),this.statements=({inputs:e,outputs:g})=>[`${g.isInf} = isInf(${e.a});`]}}const ka=(t,A)=>new Ts({a:t,b:A}),Ra=(t,A)=>new Hs({a:t,b:A}),Ua=(t,A)=>new Ks({a:t,b:A}),La=t=>new qs({a:t}),Ya=(t,A)=>new zs({a:t,b:A}),Ja=(t,A)=>new Vs({a:t,b:A}),ba=(t,A)=>new Zs({a:t,b:A}),vs=(t,A)=>new Xs({a:t,b:A}),va=(t,A)=>new Ws({a:t,b:A}),Ta=(t,A)=>new js({a:t,b:A}),Ha=t=>new Ps({a:t}),Ka=t=>new _s({a:t}),ig=(t,A,e)=>new Os({cond:t,t:A,f:e}),qa=t=>new AB({a:t});class Ts extends tA{constructor({a:A,b:e}){super({a:A,b:e,outTypeFunc:(g,I)=>g,outKey:"and"}),this.statements=({inputs:g,outputs:I})=>this.outTypes.and==="bool"?[`${I.and} = ${g.a} && ${g.b};`]:[`${I.and} = ${g.a} & ${g.b};`]}}class Hs extends tA{constructor({a:A,b:e}){super({a:A,b:e,outTypeFunc:(g,I)=>g,outKey:"or"}),this.statements=({inputs:g,outputs:I})=>this.outTypes.or==="bool"?[`${I.or} = ${g.a} || ${g.b};`]:[`${I.or} = ${g.a} | ${g.b};`]}}class Ks extends tA{constructor({a:A,b:e}){super({a:A,b:e,outTypeFunc:(g,I)=>g,outKey:"xor"}),this.statements=({inputs:g,outputs:I})=>this.outTypes.xor==="bool"?[`${I.xor} = ${g.a} ^^ ${g.b};`]:[`${I.xor} = ${g.a} ^ ${g.b};`]}}class qs extends F{constructor({a:A}){super({a:A,outTypeFunc:e=>e,outKey:"not"}),this.statements=({inputs:e,outputs:g})=>this.outTypes.not==="bool"?[`${g.not} = !${e.a};`]:[`${g.not} = not(${e.a});`]}}class zs extends tA{constructor({a:A,b:e}){super({a:A,b:e,outTypeFunc:(g,I)=>fe(g,"lessThan"),outKey:"lessThan"}),this.statements=({inputs:g,outputs:I})=>this.outTypes.lessThan==="bool"?[`${I.lessThan} = ${g.a} < ${g.b};`]:[`${I.lessThan} = lessThan(${g.a}, ${g.b});`]}}class Vs extends tA{constructor({a:A,b:e}){super({a:A,b:e,outTypeFunc:(g,I)=>fe(g,"lessThanEqual"),outKey:"lessThanEqual"}),this.statements=({inputs:g,outputs:I})=>this.outTypes.lessThanEqual==="bool"?[`${I.lessThanEqual} = ${g.a} <= ${g.b};`]:[`${I.lessThanEqual} = lessThanEqual(${g.a}, ${g.b});`]}}class Zs extends tA{constructor({a:A,b:e}){super({a:A,b:e,outTypeFunc:(g,I)=>fe(g,"greaterThan"),outKey:"greaterThan"}),this.statements=({inputs:g,outputs:I})=>this.outTypes.greaterThan==="bool"?[`${I.greaterThan} = ${g.a} > ${g.b};`]:[`${I.greaterThan} = greaterThan(${g.a}, ${g.b});`]}}class Xs extends tA{constructor({a:A,b:e}){super({a:A,b:e,outTypeFunc:(g,I)=>fe(g,"greaterThanEqual"),outKey:"greaterThanEqual"}),this.statements=({inputs:g,outputs:I})=>this.outTypes.greaterThanEqual==="bool"?[`${I.greaterThanEqual} = ${g.a} >= ${g.b};`]:[`${I.greaterThanEqual} = greaterThanEqual(${g.a}, ${g.b});`]}}class Ws extends tA{constructor({a:A,b:e}){super({a:A,b:e,outTypeFunc:$s,outKey:"equal"}),this.statements=({inputs:g,outputs:I})=>this.outTypes.equal==="bool"?[`${I.equal} = ${g.a} == ${g.b};`]:[`${I.equal} = equal(${g.a}, ${g.b});`]}}class js extends tA{constructor({a:A,b:e}){super({a:A,b:e,outTypeFunc:za,outKey:"notEqual"}),this.statements=({inputs:g,outputs:I})=>this.outTypes.notEqual==="bool"?[`${I.notEqual} = ${g.a} != ${g.b};`]:[`${I.notEqual} = notEqual(${g.a}, ${g.b});`]}}class Ps extends F{constructor({a:A}){super({a:A,outTypeFunc:e=>"bool",outKey:"any"}),this.statements=({inputs:e,outputs:g})=>[`${g.any} = any(${e.a});`]}}class _s extends F{constructor({a:A}){super({a:A,outTypeFunc:e=>"bool",outKey:"all"}),this.statements=({inputs:e,outputs:g})=>[`${g.all} = all(${e.a});`]}}class Os extends pt{constructor({cond:A,t:e,f:g}){super({a:A,b:e,c:g,outKey:"select",outTypeFunc:(I,s,B)=>s}),this.statements=({inputs:I,outputs:s})=>{const{a:B,b:i,c:Q}=I;return[`${s.select} = (${B}) ? (${i}) : (${Q});`]}}}function fe(t,A){if(yt(t))return"bool";if(t==="ivec2"||t==="uvec2"||t==="vec2")return"bvec2";if(t==="ivec3"||t==="uvec3"||t==="vec3")return"bvec3";if(t==="ivec4"||t==="uvec4"||t==="vec4")return"bvec4";throw new Error(`Invalid ${A} type: ${t}`)}function $s(t,A="equal"){if(yt(t))return"bool";if(Dt(t))return t;if(t==="ivec2"||t==="uvec2"||t==="vec2")return"bvec2";if(t==="ivec3"||t==="uvec3"||t==="vec3")return"bvec3";if(t==="ivec4"||t==="uvec4"||t==="vec4")return"bvec4";throw new Error(`Invalid ${A} type: ${t}`)}function za(t){return $s(t,"notEqual")}function Va(t){if(Dt(t))return"bool";if(lA(t))return"int";if(uA(t))return"uint";throw new Error(`Invalid compXor type: ${t}`)}class AB extends F{constructor({a:A}){const e=Va(Z(A));super({a:A,outTypeFunc:g=>e,outKey:"compXor"}),this.statements=({inputs:g,outputs:I})=>{if(yt(this.outTypes.compXor))return[`${I.compXor} = ${g.a};`];const B=(Rt(e)?["x","y"]:Ut(e)?["x","y","z"]:["x","y","z","w"]).map(Q=>`${g.a}.${Q}`),i=Dt(e)?"^^":"^";return[`${I.compXor} = ${B.join(` ${i} `)};`]}}}const Za=t=>new iB({value:t}),Xa=t=>new QB({value:t}),Wa=t=>new nB({value:t}),tB=t=>new CB({value:t}),ja=t=>new aB({value:t}),Pa=t=>new EB({value:t}),_a=t=>new oB({value:t}),Oa=t=>new rB({value:t}),$a=t=>new cB({value:t}),AE=t=>new hB({value:t}),tE=t=>new lB({value:t}),eE=t=>new uB({value:t}),gE=t=>new wB({value:t}),eB=t=>new DB({value:t}),lt=t=>new yB({value:t}),gB=t=>new pB({value:t}),IE=t=>new dB({value:t}),sE=t=>new fB({value:t}),BE=t=>new MB({value:t}),IB=t=>new SB({value:t}),sB=t=>new mB({value:t}),iE=t=>new NB({value:t}),QE=t=>new FB({value:t}),nE=t=>new GB({value:t}),CE=t=>new xB({value:t}),aE=t=>new kB({value:t}),EE=t=>new RB({value:t}),BB=t=>new UB({value:t}),oE=t=>new LB({value:t}),qe=t=>new YB({value:t});class CA extends F{constructor({value:A,outType:e,outKey:g}){super({a:A,outTypeFunc:()=>e,outKey:g}),this.statements=({inputs:I,outputs:s})=>[`${s[g]} = ${Kg(e)}(${I.a});`]}}class iB extends CA{constructor({value:A}){super({value:A,outType:"bool",outKey:"bool"})}}class QB extends CA{constructor({value:A}){super({value:A,outType:"int",outKey:"int"})}}class nB extends CA{constructor({value:A}){super({value:A,outType:"uint",outKey:"uint"})}}class CB extends CA{constructor({value:A}){super({value:A,outType:"float",outKey:"float"})}}class aB extends CA{constructor({value:A}){super({value:A,outType:"bvec2",outKey:"bvec2"})}}class EB extends CA{constructor({value:A}){super({value:A,outType:"bvec3",outKey:"bvec3"})}}class oB extends CA{constructor({value:A}){super({value:A,outType:"bvec4",outKey:"bvec4"})}}class rB extends CA{constructor({value:A}){super({value:A,outType:"ivec2",outKey:"ivec2"})}}class cB extends CA{constructor({value:A}){super({value:A,outType:"ivec3",outKey:"ivec3"})}}class hB extends CA{constructor({value:A}){super({value:A,outType:"ivec4",outKey:"ivec4"})}}class lB extends CA{constructor({value:A}){super({value:A,outType:"uvec2",outKey:"uvec2"})}}class uB extends CA{constructor({value:A}){super({value:A,outType:"uvec3",outKey:"uvec3"})}}class wB extends CA{constructor({value:A}){super({value:A,outType:"uvec4",outKey:"uvec4"})}}class DB extends CA{constructor({value:A}){super({value:A,outType:"vec2",outKey:"vec2"})}}class yB extends CA{constructor({value:A}){super({value:A,outType:"vec3",outKey:"vec3"})}}class pB extends CA{constructor({value:A}){super({value:A,outType:"vec4",outKey:"vec4"})}}class dB extends CA{constructor({value:A}){super({value:A,outType:"mat2",outKey:"mat2"})}}class fB extends CA{constructor({value:A}){super({value:A,outType:"mat3",outKey:"mat3"})}}class MB extends CA{constructor({value:A}){super({value:A,outType:"mat4",outKey:"mat4"})}}class SB extends F{constructor({value:A}){super({a:A,outKey:"int",outTypeFunc:()=>"int"}),this.statements=({inputs:e,outputs:g})=>[`${g.int} = floatBitsToInt(${e.a});`]}}class mB extends F{constructor({value:A}){super({a:A,outKey:"uint",outTypeFunc:()=>"uint"}),this.statements=({inputs:e,outputs:g})=>[`${g.uint} = floatBitsToUint(${e.a});`]}}class NB extends F{constructor({value:A}){super({a:A,outKey:"float",outTypeFunc:()=>"float"}),this.statements=({inputs:e,outputs:g})=>[`${g.float} = intBitsToFloat(${e.a});`]}}class FB extends F{constructor({value:A}){super({a:A,outKey:"float",outTypeFunc:()=>"float"}),this.statements=({inputs:e,outputs:g})=>[`${g.float} = uintBitsToFloat(${e.a});`]}}class GB extends F{constructor({value:A}){super({a:A,outKey:"uint",outTypeFunc:()=>"uint"}),this.statements=({inputs:e,outputs:g})=>[`${g.uint} = packSnorm2x16(${e.a});`]}}class xB extends F{constructor({value:A}){super({a:A,outKey:"vec2",outTypeFunc:()=>"vec2"}),this.statements=({inputs:e,outputs:g})=>[`${g.vec2} = unpackSnorm2x16(${e.a});`]}}class kB extends F{constructor({value:A}){super({a:A,outKey:"uint",outTypeFunc:()=>"uint"}),this.statements=({inputs:e,outputs:g})=>[`${g.uint} = packUnorm2x16(${e.a});`]}}class RB extends F{constructor({value:A}){super({a:A,outKey:"vec2",outTypeFunc:()=>"vec2"}),this.statements=({inputs:e,outputs:g})=>[`${g.vec2} = unpackUnorm2x16(${e.a});`]}}class UB extends F{constructor({value:A}){super({a:A,outKey:"uint",outTypeFunc:()=>"uint"}),this.statements=({inputs:e,outputs:g})=>[`${g.uint} = packHalf2x16(${e.a});`]}}class LB extends F{constructor({value:A}){super({a:A,outKey:"vec2",outTypeFunc:()=>"vec2"}),this.statements=({inputs:e,outputs:g})=>[`${g.vec2} = unpackHalf2x16(${e.a});`]}}class YB extends F{constructor({value:A}){super({a:A,outKey:"rgba8",outTypeFunc:()=>"vec4"}),this.statements=({inputs:e,outputs:g})=>[`uvec4 uRgba = uvec4(${e.a} & 0xffu, (${e.a} >> 8u) & 0xffu, (${e.a} >> 16u) & 0xffu, (${e.a} >> 24u) & 0xffu);`,`${g.rgba8} = vec4(uRgba) / 255.0;`]}}const rE=t=>new TB({a:t}),cE=(t,A)=>new HB({a:t,b:A}),JB=(t,A)=>new KB({a:t,b:A}),hE=(t,A)=>new qB({a:t,b:A}),bB=t=>new zB({a:t}),lE=(t,A,e)=>new XB({a:t,b:A,c:e}),uE=(t,A)=>new WB({incident:t,normal:A}),wE=(t,A,e)=>new jB({incident:t,normal:A,eta:e}),ut=t=>new ti({vector:t}),VA=({vector:t,vectorType:A,x:e,y:g,z:I,w:s,r:B,g:i,b:Q,a:C})=>new ei({vector:t,vectorType:A,x:e,y:g,z:I,w:s,r:B,g:i,b:Q,a:C}),DE=t=>new VB({a:t}),vB=(t,A)=>new ZB({a:t,b:A}),yE=(t,A)=>new gi({vector:t,select:A}),pE=(t,A)=>new PB({a:t,b:A}),dE=(t,A)=>new _B({a:t,b:A}),fE=t=>new OB({a:t}),ME=t=>new $B({a:t}),SE=t=>new Ai({a:t});class TB extends F{constructor({a:A}){super({a:A,outTypeFunc:e=>"float",outKey:"length"}),this.statements=({inputs:e,outputs:g})=>[`${g.length} = length(${e.a});`]}}class HB extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"distance",outTypeFunc:(g,I)=>"float"}),this.statements=({inputs:g,outputs:I})=>[`${I.distance} = distance(${g.a}, ${g.b});`]}}class KB extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"dot",outTypeFunc:(g,I)=>"float"}),this.statements=({inputs:g,outputs:I})=>[`${I.dot} = dot(${g.a}, ${g.b});`]}}class qB extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"cross",outTypeFunc:(g,I)=>"vec3"}),this.statements=({inputs:g,outputs:I})=>[`${I.cross} = cross(${g.a}, ${g.b});`]}}class zB extends F{constructor({a:A}){super({a:A,outTypeFunc:e=>e,outKey:"normalize"}),this.statements=({inputs:e,outputs:g})=>[`${g.normalize} = normalize(${e.a});`]}}function mE(t){if(t==="vec3")return"vec2";if(t==="vec4")return"vec3";throw new Error("Invalid type")}class VB extends F{constructor({a:A}){super({a:A,outTypeFunc:e=>mE(e),outKey:"projected"}),this.statements=({inputs:e,outputs:g})=>{if(this.inTypes.a==="vec3")return[`${g.projected} = ${e.a}.xy / ${e.a}.z;`];if(this.inTypes.a==="vec4")return[`${g.projected} = ${e.a}.xyz / ${e.a}.w;`];throw new Error("Invalid type")}}}function NE(t){if(t==="float")return"vec2";if(t==="vec2")return"vec3";if(t==="vec3")return"vec4";throw new Error("Invalid type")}class ZB extends tA{constructor({a:A,b:e}){const g=Z(A),I=NE(g);super({a:A,b:e,outKey:"extend",outTypeFunc:()=>I}),this.statements=({inputs:s,outputs:B})=>[`${B.extend} = ${I}(${s.a}, ${s.b});`]}}class XB extends pt{constructor({a:A,b:e,c:g}){super({a:A,b:e,c:g,outKey:"forward",outTypeFunc:(I,s,B)=>I}),this.statements=({inputs:I,outputs:s})=>[`${s.forward} = faceforward(${I.a}, ${I.b}, ${I.c});`]}}class WB extends tA{constructor({incident:A,normal:e}){super({a:A,b:e,outKey:"reflection",outTypeFunc:(g,I)=>g}),this.statements=({inputs:g,outputs:I})=>[`${I.reflection} = reflect(${g.a}, ${g.b});`]}}class jB extends pt{constructor({incident:A,normal:e,eta:g}){super({a:A,b:e,c:g,outKey:"refraction",outTypeFunc:(I,s,B)=>I}),this.statements=({inputs:I,outputs:s})=>[`${s.refraction} = refract(${I.a}, ${I.b}, ${I.c});`]}}class PB extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"product",outTypeFunc:(g,I)=>g}),this.statements=({inputs:g,outputs:I})=>[`${I.product} = matrixCompMult(${A}, ${e});`]}}function FE(t,A){if(t==="vec2"){if(A==="vec2")return"mat2";if(A==="vec3")return"mat3x2";if(A==="vec4")return"mat4x2"}if(t==="vec3"){if(A==="vec2")return"mat2x3";if(A==="vec3")return"mat3";if(A==="vec4")return"mat4x3"}if(t==="vec4"){if(A==="vec2")return"mat2x4";if(A==="vec3")return"mat3x4";if(A==="vec4")return"mat4"}throw new Error(`Invalid outer type: ${t}, ${A}`)}class _B extends tA{constructor({a:A,b:e}){super({a:A,b:e,outKey:"outer",outTypeFunc:FE}),this.statements=({inputs:g,outputs:I})=>[`${I.outer} = outerProduct(${g.a}, ${g.b});`]}}function GE(t){if(t==="mat2")return"mat2";if(t==="mat3")return"mat3";if(t==="mat4")return"mat4";if(t==="mat2x2")return"mat2x2";if(t==="mat2x3")return"mat3x2";if(t==="mat2x4")return"mat4x2";if(t==="mat3x2")return"mat2x3";if(t==="mat3x3")return"mat3x3";if(t==="mat3x4")return"mat4x3";if(t==="mat4x2")return"mat2x4";if(t==="mat4x3")return"mat3x4";if(t==="mat4x4")return"mat4x4";throw new Error(`Invalid transpose type: ${t}`)}class OB extends F{constructor({a:A}){super({a:A,outKey:"transpose",outTypeFunc:GE}),this.statements=({inputs:e,outputs:g})=>[`${g.transpose} = transpose(${e.a});`]}}class $B extends F{constructor({a:A}){super({a:A,outKey:"det",outTypeFunc:e=>"float"}),this.statements=({inputs:e,outputs:g})=>[`${g.det} = determinant(${e.a});`]}}class Ai extends F{constructor({a:A}){super({a:A,outKey:"inverse",outTypeFunc:e=>e}),this.statements=({inputs:e,outputs:g})=>[`${g.inverse} = inverse(${A});`]}}function xE(t){const A=e=>e;switch(t){case"vec2":return A({x:"float",y:"float",r:"float",g:"float"});case"vec3":return A({x:"float",y:"float",z:"float",r:"float",g:"float",b:"float"});case"vec4":return A({x:"float",y:"float",z:"float",w:"float",r:"float",g:"float",b:"float",a:"float"});case"ivec2":return A({x:"int",y:"int",r:"int",g:"int"});case"ivec3":return A({x:"int",y:"int",z:"int",r:"int",g:"int",b:"int"});case"ivec4":return A({x:"int",y:"int",z:"int",w:"int",r:"int",g:"int",b:"int",a:"int"});case"uvec2":return A({x:"uint",y:"uint",r:"uint",g:"uint"});case"uvec3":return A({x:"uint",y:"uint",z:"uint",r:"uint",g:"uint",b:"uint"});case"uvec4":return A({x:"uint",y:"uint",z:"uint",w:"uint",r:"uint",g:"uint",b:"uint",a:"uint"});default:throw new Error(`Invalid vector type: ${t}`)}}class ti extends X{constructor({vector:A}){const g={vector:Z(A)},I=xE(g.vector);super({inTypes:g,outTypes:I,inputs:{vector:A}}),this.statements=({inputs:s,outputs:B})=>{const{x:i,y:Q,z:C,w:a,r:n,g:o,b:r,a:h}=B,{vector:c}=s;return[i?`${i} = ${c}.x;`:null,Q?`${Q} = ${c}.y;`:null,C?`${C} = ${c}.z;`:null,a?`${a} = ${c}.w;`:null,n?`${n} = ${c}.r;`:null,o?`${o} = ${c}.g;`:null,r?`${r} = ${c}.b;`:null,h?`${h} = ${c}.a;`:null].filter(Boolean)}}}class ei extends X{constructor({vector:A,vectorType:e,x:g,y:I,z:s,w:B,r:i,g:Q,b:C,a}){if(!A&&!e)throw new Error("Either vector or vectorType must be provided");const n=e??Z(A),o=vg(n),r=Tg(n),h={vector:n,x:o,y:o,r:o,g:o},c={vector:A,x:g,y:I,r:i,g:Q};r>=3&&(Object.assign(h,{z:o,b:o}),Object.assign(c,{z:s,b:C})),r>=4&&(Object.assign(h,{w:o,a:o}),Object.assign(c,{w:B,a})),super({inTypes:h,outTypes:{vector:n},inputs:c}),this.statements=({inputs:l,outputs:u})=>{const{vector:w}=u,{vector:D,x:y,y:d,z:m,w:M,r:p,g:f,b:R,a:N}=l,S=[`${w}.x = ${y??p??(D?`${D}.x`:Tt(o))};`,`${w}.y = ${d??f??(D?`${D}.y`:Tt(o))};`];return r>=3&&S.push(`${w}.z = ${m??R??(D?`${D}.z`:Tt(o))};`),r>=4&&S.push(`${w}.w = ${M??N??(D?`${D}.w`:Tt(o))};`),S}}dynoOut(){return new V(this,"vector")}}function kE(t,A){let e=null;if(Ae(t)?e=A.length===1?"float":A.length===2?"vec2":A.length===3?"vec3":A.length===4?"vec4":null:lA(t)?e=A.length===1?"int":A.length===2?"ivec2":A.length===3?"ivec3":A.length===4?"ivec4":null:uA(t)&&(e=A.length===1?"uint":A.length===2?"uvec2":A.length===3?"uvec3":A.length===4?"uvec4":null),e==null)throw new Error(`Invalid swizzle: ${A}`);return e}class gi extends F{constructor({vector:A,select:e}){super({a:A,outKey:"swizzle",outTypeFunc:g=>kE(g,e)}),this.statements=({inputs:g,outputs:I})=>[`${I.swizzle} = ${g.a}.${e};`]}}const RE=(t,A,e)=>new Ci({index:t,from:A,to:e}),UE=t=>new Yt({value:t}),LE=t=>new LA({state:t}),YE=t=>new YA({state:t}),Ii=t=>new ai({value:t}),si=t=>new Ei({value:t}),Bi=t=>new oi({value:t}),ii=t=>new ri({value:t}),JE=t=>new ci({value:t}),bE=t=>new hi({value:t}),Qi=t=>new li({value:t}),ze=t=>new ui({value:t}),ni=(t,A,e)=>new wi({z:t,zNear:A,zFar:e}).outputs.depth;class Ci extends X{constructor({from:A,to:e,index:g}){super({inTypes:{from:"int",to:"int",index:"int"},outTypes:{index:"int"},inputs:{from:A,to:e,index:g},statements:({inputs:I,outputs:s})=>[`${s.index} = ${I.index} - ${I.from} + ${I.to};`]})}dynoOut(){return new V(this,"index")}}class LA extends X{constructor({state:A}){const e=Z(A);super({inTypes:{state:e},outTypes:{state:"uint"},inputs:{state:A},globals:()=>[rA(`
uint pcg_next(uint state) {
return state * 747796405u + 2891336453u;
}
`)],statements:({inputs:g,outputs:I})=>{const s=e==="uint"?`${g.state}`:e==="int"?`uint(${g.state})`:`floatBitsToUint(${g.state})`;return[`${I.state} = pcg_next(${s});`]}})}dynoOut(){return new V(this,"state")}}class YA extends X{constructor({state:A}){super({inTypes:{state:"uint"},outTypes:{hash:"uint"},inputs:{state:A},globals:()=>[rA(`
uint pcg_hash(uint state) {
uint hash = ((state >> ((state >> 28u) + 4u)) ^ state) * 277803737u;
return (hash >> 22u) ^ hash;
}
`)],statements:({inputs:e,outputs:g})=>[`${g.hash} = pcg_hash(${e.state});`]})}dynoOut(){return new V(this,"hash")}}class Yt extends X{constructor({value:A}){const e=Z(A),g=Hg(e);super({inTypes:{value:e},outTypes:{state:"uint"},inputs:{value:A},globals:()=>[rA(`
uint pcg_mix(uint value) {
return value;
}
uint pcg_mix(uvec2 value) {
return value.x + 0x9e3779b9u * value.y;
}
uint pcg_mix(uvec3 value) {
return value.x + 0x9e3779b9u * value.y + 0x85ebca6bu * value.z;
}
uint pcg_mix(uvec4 value) {
return value.x + 0x9e3779b9u * value.y + 0x85ebca6bu * value.z + 0xc2b2ae35u * value.w;
}
`)],statements:({inputs:I,outputs:s})=>{const B=uA(e)?`${I.value}`:lA(e)?`${g}(${I.value})`:`floatBitsToUint(${I.value})`;return[`${g} bits = ${B};`,`${s.state} = pcg_mix(bits);`]}})}dynoOut(){return new V(this,"state")}}class ai extends XA{constructor({value:A}){super({inTypes:{value:Z(A)},outTypes:{hash:"uint"},inputs:{value:A},construct:({value:e})=>{if(!e)throw new Error("value is required");let g=new Yt({value:e}).outputs.state;return g=new LA({state:g}).outputs.state,new YA({state:g}).outputs}})}dynoOut(){return new V(this,"hash")}}class Ei extends XA{constructor({value:A}){super({inTypes:{value:Z(A)},outTypes:{hash:"uvec2"},inputs:{value:A},construct:({value:e})=>{if(!e)throw new Error("value is required");let g=new Yt({value:e}).outputs.state;g=new LA({state:g}).outputs.state;const I=new YA({state:g}).outputs.hash;g=new LA({state:g}).outputs.state;const s=new YA({state:g}).outputs.hash;return{hash:VA({vectorType:"uvec2",x:I,y:s})}}})}dynoOut(){return new V(this,"hash")}}class oi extends XA{constructor({value:A}){super({inTypes:{value:Z(A)},outTypes:{hash:"uvec3"},inputs:{value:A},construct:({value:e})=>{if(!e)throw new Error("value is required");let g=new Yt({value:e}).outputs.state;g=new LA({state:g}).outputs.state;const I=new YA({state:g}).outputs.hash;g=new LA({state:g}).outputs.state;const s=new YA({state:g}).outputs.hash;g=new LA({state:g}).outputs.state;const B=new YA({state:g}).outputs.hash;return{hash:VA({vectorType:"uvec3",x:I,y:s,z:B})}}})}dynoOut(){return new V(this,"hash")}}class ri extends XA{constructor({value:A}){super({inTypes:{value:Z(A)},outTypes:{hash:"uvec4"},inputs:{value:A},construct:({value:e})=>{if(!e)throw new Error("value is required");let g=new Yt({value:e}).outputs.state;g=new LA({state:g}).outputs.state;const I=new YA({state:g}).outputs.hash;g=new LA({state:g}).outputs.state;const s=new YA({state:g}).outputs.hash;g=new LA({state:g}).outputs.state;const B=new YA({state:g}).outputs.hash;g=new LA({state:g}).outputs.state;const i=new YA({state:g}).outputs.hash;return{hash:VA({vectorType:"uvec4",x:I,y:s,z:B,w:i})}}})}dynoOut(){return new V(this,"hash")}}class ci extends XA{constructor({value:A}){super({inTypes:{value:Z(A)},outTypes:{hash:"float"},inputs:{value:A},construct:({value:e})=>{if(!e)throw new Error("value is required");const g=Ii(e);return{hash:BA(tB(g),v("float",1/2**32))}}})}dynoOut(){return new V(this,"hash")}}class hi extends XA{constructor({value:A}){super({inTypes:{value:Z(A)},outTypes:{hash:"vec2"},inputs:{value:A},construct:({value:e})=>{if(!e)throw new Error("value is required");const g=si(e);return{hash:BA(eB(g),v("float",1/2**32))}}})}dynoOut(){return new V(this,"hash")}}class li extends XA{constructor({value:A}){super({inTypes:{value:Z(A)},outTypes:{hash:"vec3"},inputs:{value:A},construct:({value:e})=>{if(!e)throw new Error("value is required");const g=Bi(e);return{hash:BA(lt(g),v("float",1/2**32))}}})}dynoOut(){return new V(this,"hash")}}class ui extends XA{constructor({value:A}){super({inTypes:{value:Z(A)},outTypes:{hash:"vec4"},inputs:{value:A},construct:({value:e})=>{if(!e)throw new Error("value is required");const g=ii(e);return{hash:BA(gB(g),v("float",1/2**32))}}})}dynoOut(){return new V(this,"hash")}}class wi extends X{constructor({z:A,zNear:e,zFar:g}){super({inTypes:{z:"float",zNear:"float",zFar:"float"},outTypes:{depth:"float"},inputs:{z:A,zNear:e,zFar:g},statements:({inputs:I,outputs:s})=>[`float clamped = clamp(${I.z}, ${I.zNear}, ${I.zFar});`,`${s.depth} = (log2(clamped + 1.0) - log2(${I.zNear} + 1.0)) / (log2(${I.zFar} + 1.0) - log2(${I.zNear} + 1.0));`]})}dynoOut(){return new V(this,"depth")}}const Di=(t,{scale:A,scales:e,rotate:g,translate:I})=>new pi({position:t,scale:A,scales:e,rotate:g,translate:I}).outputs.position,yi=(t,{scale:A,scales:e,rotate:g})=>new di({dir:t,scale:A,scales:e,rotate:g}).outputs.dir,vE=(t,{rotate:A})=>new fi({quaternion:t,rotate:A}).outputs.quaternion;class pi extends X{constructor({position:A,scale:e,scales:g,rotate:I,translate:s}){super({inTypes:{position:"vec3",scale:"float",scales:"vec3",rotate:"vec4",translate:"vec3"},outTypes:{position:"vec3"},inputs:{position:A,scale:e,scales:g,rotate:I,translate:s},statements:({inputs:B,outputs:i})=>{const{position:Q}=i;if(!Q)return[];const{scale:C,scales:a,rotate:n,translate:o}=B;return[`${Q} = ${B.position??"vec3(0.0, 0.0, 0.0)"};`,C?`${Q} *= ${C};`:null,a?`${Q} *= ${a};`:null,n?`${Q} = quatVec(${n}, ${Q});`:null,o?`${Q} += ${o};`:null].filter(Boolean)}})}}class di extends X{constructor({dir:A,scale:e,scales:g,rotate:I}){super({inTypes:{dir:"vec3",scale:"float",scales:"vec3",rotate:"vec4"},outTypes:{dir:"vec3"},inputs:{dir:A,scale:e,scales:g,rotate:I},statements:({inputs:s,outputs:B})=>{const{dir:i}=B;if(!i)return[];const{scale:Q,scales:C,rotate:a}=s;return[`${i} = ${s.dir??"vec3(0.0, 0.0, 0.0)"};`,Q?`${i} *= ${Q};`:null,C?`${i} *= ${C};`:null,a?`${i} = quatVec(${a}, ${i});`:null].filter(Boolean)}})}}class fi extends X{constructor({quaternion:A,rotate:e}){super({inTypes:{quaternion:"vec4",rotate:"vec4"},outTypes:{quaternion:"vec4"},inputs:{quaternion:A,rotate:e},statements:({inputs:g,outputs:I})=>{const{quaternion:s}=I;return s?[`${s} = ${g.quaternion??"vec4(0.0, 0.0, 0.0, 1.0)"};`,e?`${s} = quatQuat(${g.rotate}, ${s});`:null].filter(Boolean):[]}})}}const TE=()=>{throw new Error("Not implemented")},HE=()=>{throw new Error("Not implemented")},KE=()=>{throw new Error("Not implemented")},qE=()=>{throw new Error("Not implemented")},zE=()=>{throw new Error("Not implemented")},VE=()=>{throw new Error("Not implemented")},ZE=(t,A)=>new Mi({texture:t,lod:A}),XE=(t,A,e)=>new Si({texture:t,coord:A,bias:e}),WE=(t,A,e)=>new mi({texture:t,coord:A,lod:e});class Mi extends X{constructor({texture:A,lod:e}){const g=Z(A);super({inTypes:{texture:g,lod:"int"},outTypes:{size:Ni(g)},inputs:{texture:A,lod:e},statements:({inputs:I,outputs:s})=>[`${s.size} = textureSize(${I.texture}, ${I.lod??"0"});`]})}dynoOut(){return new V(this,"size")}}class Si extends X{constructor({texture:A,coord:e,bias:g}){const I=Z(A);super({inTypes:{texture:I,coord:jE(I),bias:"float"},outTypes:{sample:Fi(I)},inputs:{texture:A,coord:e,bias:g},statements:({inputs:s,outputs:B})=>[`${B.sample} = texture(${s.texture}, ${s.coord}${s.bias?`, ${s.bias}`:""});`]})}dynoOut(){return new V(this,"sample")}}class mi extends X{constructor({texture:A,coord:e,lod:g}){const I=Z(A);super({inTypes:{texture:I,coord:Ni(I),lod:"int"},outTypes:{texel:Fi(I)},inputs:{texture:A,coord:e,lod:g},statements:({inputs:s,outputs:B})=>[`${B.texel} = texelFetch(${s.texture}, ${s.coord}, ${s.lod??"0"});`]})}dynoOut(){return new V(this,"texel")}}function Ni(t){switch(t){case"sampler2D":case"usampler2D":case"isampler2D":case"samplerCube":case"usamplerCube":case"isamplerCube":case"sampler2DShadow":case"samplerCubeShadow":return"ivec2";case"sampler3D":case"usampler3D":case"isampler3D":case"sampler2DArray":case"usampler2DArray":case"isampler2DArray":case"sampler2DArrayShadow":return"ivec3";default:throw new Error(`Invalid texture type: ${t}`)}}function jE(t){switch(t){case"sampler2D":case"usampler2D":case"isampler2D":return"vec2";case"sampler3D":case"usampler3D":case"isampler3D":case"samplerCube":case"usamplerCube":case"isamplerCube":case"sampler2DArray":case"usampler2DArray":case"isampler2DArray":case"sampler2DShadow":return"vec3";case"samplerCubeShadow":case"sampler2DArrayShadow":return"vec4";default:throw new Error(`Invalid texture type: ${t}`)}}function Fi(t){switch(t){case"sampler2D":case"sampler2DArray":case"sampler3D":case"samplerCube":case"sampler2DShadow":return"vec4";case"usampler2D":case"usampler2DArray":case"usampler3D":case"usamplerCube":return"uvec4";case"isampler2D":case"isampler2DArray":case"isampler3D":case"isamplerCube":return"ivec4";case"samplerCubeShadow":case"sampler2DArrayShadow":return"float";default:throw new Error(`Invalid texture type: ${t}`)}}const PE=t=>new Gi({degrees:t}),_E=t=>new xi({radians:t}),Ve=t=>new ki({radians:t}),OE=t=>new Ri({radians:t}),$E=t=>new Ui({radians:t}),Ao=t=>new Li({sin:t}),to=t=>new Yi({cos:t}),eo=t=>new Ji({tan:t}),go=(t,A)=>new bi({y:t,x:A}),Io=t=>new vi({x:t}),so=t=>new Ti({x:t}),Bo=t=>new Hi({x:t}),io=t=>new Ki({x:t}),Qo=t=>new qi({x:t}),no=t=>new zi({x:t});class Gi extends F{constructor({degrees:A}){super({a:A,outTypeFunc:e=>e,outKey:"radians"}),this.statements=({inputs:e,outputs:g})=>[`${g.radians} = radians(${e.a});`]}}class xi extends F{constructor({radians:A}){super({a:A,outTypeFunc:e=>e,outKey:"degrees"}),this.statements=({inputs:e,outputs:g})=>[`${g.degrees} = degrees(${e.a});`]}}class ki extends F{constructor({radians:A}){super({a:A,outTypeFunc:e=>e,outKey:"sin"}),this.statements=({inputs:e,outputs:g})=>[`${g.sin} = sin(${e.a});`]}}class Ri extends F{constructor({radians:A}){super({a:A,outTypeFunc:e=>e,outKey:"cos"}),this.statements=({inputs:e,outputs:g})=>[`${g.cos} = cos(${e.a});`]}}class Ui extends F{constructor({radians:A}){super({a:A,outTypeFunc:e=>e,outKey:"tan"}),this.statements=({inputs:e,outputs:g})=>[`${g.tan} = tan(${e.a});`]}}class Li extends F{constructor({sin:A}){super({a:A,outTypeFunc:e=>e,outKey:"asin"}),this.statements=({inputs:e,outputs:g})=>[`${g.asin} = asin(${e.a});`]}}class Yi extends F{constructor({cos:A}){super({a:A,outTypeFunc:e=>e,outKey:"acos"}),this.statements=({inputs:e,outputs:g})=>[`${g.acos} = acos(${e.a});`]}}class Ji extends F{constructor({tan:A}){super({a:A,outTypeFunc:e=>e,outKey:"atan"}),this.statements=({inputs:e,outputs:g})=>[`${g.atan} = atan(${e.a});`]}}class bi extends tA{constructor({y:A,x:e}){super({a:A,b:e,outTypeFunc:(g,I)=>g,outKey:"atan2"}),this.statements=({inputs:g,outputs:I})=>[`${I.atan2} = atan2(${g.a}, ${g.b});`]}}class vi extends F{constructor({x:A}){super({a:A,outTypeFunc:e=>e,outKey:"sinh"}),this.statements=({inputs:e,outputs:g})=>[`${g.sinh} = sinh(${e.a});`]}}class Ti extends F{constructor({x:A}){super({a:A,outTypeFunc:e=>e,outKey:"cosh"}),this.statements=({inputs:e,outputs:g})=>[`${g.cosh} = cosh(${e.a});`]}}class Hi extends F{constructor({x:A}){super({a:A,outTypeFunc:e=>e,outKey:"tanh"}),this.statements=({inputs:e,outputs:g})=>[`${g.tanh} = tanh(${e.a});`]}}class Ki extends F{constructor({x:A}){super({a:A,outTypeFunc:e=>e,outKey:"asinh"}),this.statements=({inputs:e,outputs:g})=>[`${g.asinh} = asinh(${e.a});`]}}class qi extends F{constructor({x:A}){super({a:A,outTypeFunc:e=>e,outKey:"acosh"}),this.statements=({inputs:e,outputs:g})=>[`${g.acosh} = acosh(${e.a});`]}}class zi extends F{constructor({x:A}){super({a:A,outTypeFunc:e=>e,outKey:"atanh"}),this.statements=({inputs:e,outputs:g})=>[`${g.atanh} = atanh(${e.a});`]}}const Co=Object.freeze(Object.defineProperty({__proto__:null,Abs:hs,Acos:Yi,Acosh:qi,Add:Qs,All:_s,And:Ts,Any:Ps,Asin:Li,Asinh:Ki,Atan:Ji,Atan2:bi,Atanh:zi,BVec2:aB,BVec3:EB,BVec4:oB,BinaryOp:tA,Bool:iB,Ceil:ws,Clamp:Rs,Combine:ei,CombineGsplat:_g,CompMult:PB,CompXor:AB,Compilation:zg,Cos:Ri,Cosh:Ti,Cross:qB,Degrees:xi,Determinant:$B,Distance:HB,Div:as,Dot:KB,Dyno:X,DynoBlock:XA,DynoBool:re,DynoBvec2:II,DynoBvec3:iI,DynoBvec4:CI,DynoConst:qg,DynoFloat:ht,DynoInt:Xt,DynoIsampler2D:SI,DynoIsampler2DArray:NI,DynoIsampler3D:xI,DynoIsamplerCube:UI,DynoIvec2:BI,DynoIvec3:nI,DynoIvec4:EI,DynoLiteral:Ft,DynoMat2:oI,DynoMat2x2:rI,DynoMat2x3:cI,DynoMat2x4:hI,DynoMat3:lI,DynoMat3x2:uI,DynoMat3x3:wI,DynoMat3x4:DI,DynoMat4:yI,DynoMat4x2:pI,DynoMat4x3:dI,DynoMat4x4:fI,DynoOutput:V,DynoProgram:gg,DynoProgramTemplate:Ig,DynoRemapIndex:Ci,DynoSampler2D:mI,DynoSampler2DArray:FI,DynoSampler2DArrayShadow:JI,DynoSampler2DShadow:YI,DynoSampler3D:kI,DynoSamplerCube:LI,DynoSamplerCubeShadow:bI,DynoUint:gI,DynoUniform:k,DynoUsampler2D:MI,DynoUsampler2DArray:zt,DynoUsampler3D:GI,DynoUsamplerCube:RI,DynoUvec2:sI,DynoUvec3:QI,DynoUvec4:aI,DynoValue:st,DynoVec2:qt,DynoVec3:xt,DynoVec4:Lt,Equal:Ws,Exp:fs,Exp2:Ms,ExtendVec:ZB,FaceForward:XB,Float:CB,FloatBitsToInt:SB,FloatBitsToUint:mB,Floor:us,Fract:ps,GreaterThan:Zs,GreaterThanEqual:Xs,Gsplat:AA,GsplatNormal:$g,Hash:ai,Hash2:Ei,Hash3:oi,Hash4:ri,HashFloat:ci,HashVec2:hi,HashVec3:li,HashVec4:ui,IMod:Es,IVec2:rB,IVec3:cB,IVec4:hB,Int:QB,IntBitsToFloat:NB,Inverse:Ai,InverseSqrt:Gs,IsInf:bs,IsNan:Js,Length:TB,LessThan:zs,LessThanEqual:Vs,Log:Ss,Log2:ms,Mat2:dB,Mat3:fB,Mat4:MB,Max:ks,Min:xs,Mix:Us,Mod:os,Modf:rs,Mul:Cs,Neg:cs,Normalize:zB,NormalizedDepth:wi,Not:qs,NotEqual:js,NumPackedSplats:Zg,Or:Hs,Outer:_B,OutputPackedSplat:eI,OutputRgba8:tg,PackHalf2x16:UB,PackSnorm2x16:GB,PackUnorm2x16:kB,PcgHash:YA,PcgMix:Yt,PcgNext:LA,Pow:ds,ProjectH:VB,Radians:Gi,ReadPackedSplat:Wg,ReadPackedSplatRange:jg,ReflectVec:WB,RefractVec:jB,Round:ys,Select:Os,Sign:ls,SimpleCast:CA,Sin:ki,Sinh:vi,Smoothstep:Ys,Split:ti,SplitGsplat:Pg,Sqr:Ns,Sqrt:Fs,Step:Ls,Sub:ns,Swizzle:gi,TPackedSplats:ge,Tan:Ui,Tanh:Hi,TexelFetch:mi,Texture:Si,TextureSize:Mi,TransformDir:di,TransformGsplat:AI,TransformPosition:pi,TransformQuaternion:fi,Transpose:OB,TrinaryOp:pt,Trunc:Ds,UVec2:lB,UVec3:uB,UVec4:wB,Uint:nB,UintBitsToFloat:FB,UintToRgba8:YB,UnaryOp:F,UnpackHalf2x16:LB,UnpackSnorm2x16:xB,UnpackUnorm2x16:RB,Vec2:DB,Vec3:yB,Vec4:pB,Xor:Ks,abs:Ea,acos:to,acosh:Qo,add:hA,all:Ka,and:ka,any:Ha,arrayIndex:zE,arrayLength:VE,asin:Ao,asinh:io,atan:eo,atan2:go,atanh:no,bool:Za,bvec2:ja,bvec3:Pa,bvec4:_a,ceil:ca,clamp:ma,combine:VA,combineGsplat:Bt,comment:qE,compMult:pE,compXor:qa,cos:OE,cosh:so,cross:hE,defineGsplat:xA,defineGsplatNormal:Og,definePackedSplats:pe,degrees:_E,determinant:ME,distance:cE,div:Ce,dot:JB,dyno:ee,dynoBlock:GA,dynoBool:Dn,dynoBvec2:dn,dynoBvec3:mn,dynoBvec4:Gn,dynoConst:v,dynoDeclare:$e,dynoFloat:KA,dynoFor:KE,dynoIf:TE,dynoInt:pn,dynoIsampler2D:Xn,dynoIsampler2DArray:Pn,dynoIsampler3D:$n,dynoIsamplerCube:eC,dynoIvec2:Mn,dynoIvec3:Fn,dynoIvec4:kn,dynoLiteral:oe,dynoMat2:Un,dynoMat2x2:Ln,dynoMat2x3:Yn,dynoMat2x4:Jn,dynoMat3:bn,dynoMat3x2:vn,dynoMat3x3:Tn,dynoMat3x4:Hn,dynoMat4:Kn,dynoMat4x2:qn,dynoMat4x3:zn,dynoMat4x4:Vn,dynoSampler2D:Wn,dynoSampler2DArray:_n,dynoSampler2DArrayShadow:sC,dynoSampler2DShadow:IC,dynoSampler3D:AC,dynoSamplerCube:gC,dynoSamplerCubeShadow:BC,dynoSwitch:HE,dynoUint:yn,dynoUsampler2D:Zn,dynoUsampler2DArray:jn,dynoUsampler3D:On,dynoUsamplerCube:tC,dynoUvec2:fn,dynoUvec3:Nn,dynoUvec4:xn,dynoVec2:Sn,dynoVec3:et,dynoVec4:Rn,equal:va,exp:wa,exp2:Da,extendVec:vB,faceforward:lE,float:tB,floatBitsToInt:IB,floatBitsToUint:sB,floor:ra,fract:ae,greaterThan:ba,greaterThanEqual:vs,gsplatNormal:He,hash:Ii,hash2:si,hash3:Bi,hash4:ii,hashFloat:JE,hashVec2:bE,hashVec3:Qi,hashVec4:ze,imod:Ke,int:Xa,intBitsToFloat:iE,inverse:SE,inversesqrt:Ma,isAllFloatType:Qt,isBoolType:Dt,isFloatType:Ae,isInf:xa,isIntType:lA,isMat2:nt,isMat3:Ct,isMat4:at,isMatFloatType:bg,isNan:Ga,isScalarType:yt,isUintType:uA,isVector2Type:Rt,isVector3Type:Ut,isVector4Type:te,isVectorType:En,ivec2:Oa,ivec3:$a,ivec4:AE,length:rE,lessThan:Ya,lessThanEqual:Ja,literalNegOne:hn,literalOne:cn,literalZero:Tt,log:ya,log2:pa,mat2:IE,mat3:sE,mat4:BE,max:Bs,min:Sa,mix:is,mod:ss,modf:aa,mul:BA,neg:Bg,normalize:bB,normalizedDepth:ni,not:La,notEqual:Ta,numPackedSplats:ln,numberAsFloat:q,numberAsInt:iA,numberAsUint:QA,or:Ra,outer:dE,outputPackedSplat:tI,outputRgba8:un,packHalf2x16:BB,packSnorm2x16:nE,packUnorm2x16:aE,pcgHash:YE,pcgMix:UE,pcgNext:LE,pow:ua,projectH:DE,radians:PE,readPackedSplat:Gt,readPackedSplatRange:Vg,reflectVec:uE,refractVec:wE,remapIndex:RE,round:la,sameSizeIvec:rn,sameSizeUvec:Hg,sameSizeVec:on,select:ig,sign:oa,sin:Ve,sinh:Io,smoothstep:Fa,split:ut,splitGsplat:ct,sqr:da,sqrt:fa,step:Na,sub:wt,swizzle:yE,tan:$E,tanh:Bo,texelFetch:WE,texture:XE,textureSize:ZE,transformDir:yi,transformGsplat:Ag,transformPos:Di,transformQuat:vE,transpose:fE,trunc:ha,typeLiteral:Kg,uint:Wa,uintBitsToFloat:QE,uintToRgba8:qe,uniform:wn,unindent:rA,unindentLines:JA,unpackHalf2x16:oE,unpackSnorm2x16:CE,unpackUnorm2x16:EE,uvec2:tE,uvec3:eE,uvec4:gE,valType:Z,vec2:eB,vec3:lt,vec4:gB,vectorDim:Tg,vectorElementType:vg,xor:Ua},Symbol.toStringTag,{value:"Module"}));var ao=`precision highp float;
precision highp int;
precision highp sampler2D;
precision highp usampler2D;
precision highp isampler2D;
precision highp sampler2DArray;
precision highp usampler2DArray;
precision highp isampler2DArray;
precision highp sampler3D;
precision highp usampler3D;
precision highp isampler3D;
#include <splatDefines>
uniform uint targetLayer;
uniform int targetBase;
uniform int targetCount;
out vec4 target;
{{ GLOBALS }}
void computeReadback(int index) {
{{ STATEMENTS }}
}
void main() {
int targetIndex = int(targetLayer << SPLAT_TEX_LAYER_BITS) + int(uint(gl_FragCoord.y) << SPLAT_TEX_WIDTH_BITS) + int(gl_FragCoord.x);
int index = targetIndex - targetBase;
if ((index >= 0) && (index < targetCount)) {
computeReadback(index);
} else {
target = vec4(0.0, 0.0, 0.0, 0.0);
}
}`;const UA=class UA{constructor({renderer:A}={}){this.renderer=A,this.capacity=0,this.count=0}dispose(){this.target&&(this.target.dispose(),this.target=void 0)}ensureBuffer(A,e){const I=Math.ceil(Math.max(1,A)/j)*j*4;if(e.byteLength>=I)return e;const s=new ArrayBuffer(I);if(e instanceof ArrayBuffer)return s;const B=e.constructor;return new B(s)}ensureCapacity(A){const{width:e,height:g,depth:I,maxSplats:s}=MA(A);(!this.target||s>this.capacity)&&(this.dispose(),this.capacity=s,this.target=new E.WebGLArrayRenderTarget(e,g,I,{depthBuffer:!1,stencilBuffer:!1,generateMipmaps:!1,magFilter:E.NearestFilter,minFilter:E.NearestFilter}),this.target.texture.format=E.RGBAFormat,this.target.texture.type=E.UnsignedByteType,this.target.texture.internalFormat="RGBA8",this.target.scissorTest=!0)}prepareProgramMaterial(A){let e=UA.readbackProgram.get(A);if(!e){const I=GA({index:"int"},{rgba8:"vec4"},({index:s})=>(A.inputs.index=s,{rgba8:new tg({rgba8:A.outputs.rgba8})}));UA.programTemplate||(UA.programTemplate=new Ig(ao)),e=new gg({graph:I,inputs:{index:"index"},outputs:{rgba8:"target"},template:UA.programTemplate}),Object.assign(e.uniforms,{targetLayer:{value:0},targetBase:{value:0},targetCount:{value:0}}),UA.readbackProgram.set(A,e)}const g=e.prepareMaterial();return UA.fullScreenQuad.material=g,{program:e,material:g}}saveRenderState(A){return{xrEnabled:A.xr.enabled,autoClear:A.autoClear}}resetRenderState(A,e){A.setRenderTarget(null),A.xr.enabled=e.xrEnabled,A.autoClear=e.autoClear}process({count:A,material:e}){const g=this.renderer;if(!g)throw new Error("No renderer");if(!this.target)throw new Error("No target");const I=j*zA;e.uniforms.targetBase.value=0,e.uniforms.targetCount.value=A;let s=0;for(;s<A;){const B=Math.floor(s/I),i=B*I,Q=Math.min(zA,Math.ceil((A-i)/j));e.uniforms.targetLayer.value=B,this.target.scissor.set(0,0,j,Q),g.setRenderTarget(this.target,B),g.xr.enabled=!1,g.autoClear=!1,UA.fullScreenQuad.render(g),s+=j*Q}this.count=A}async read({readback:A}){const e=this.renderer;if(!e)throw new Error("No renderer");if(!this.target)throw new Error("No target");const g=Math.ceil(this.count/j)*j;if(A.byteLength<g*4)throw new Error(`Readback buffer too small: ${A.byteLength} < ${g*4}`);const I=new Uint8Array(A instanceof ArrayBuffer?A:A.buffer),s=j*zA;let B=0;const i=[];for(;B<this.count;){const Q=Math.floor(B/s),C=Q*s,a=Math.min(zA,Math.ceil((this.count-C)/j));e.setRenderTarget(this.target,Q);const n=j*a*4,o=I.subarray(C*4,C*4+n),r=e==null?void 0:e.readRenderTargetPixelsAsync(this.target,0,0,j,a,o);i.push(r),B+=j*a}return Promise.all(i).then(()=>A)}render({reader:A,count:e,renderer:g}){if(this.renderer=g||this.renderer,!this.renderer)throw new Error("No renderer");this.ensureCapacity(e);const{program:I,material:s}=this.prepareProgramMaterial(A);I.update();const B=this.saveRenderState(this.renderer);this.process({count:e,material:s}),this.resetRenderState(this.renderer,B)}async readback({readback:A}){if(!this.renderer)throw new Error("No renderer");const e=this.saveRenderState(this.renderer),g=this.read({readback:A});return this.resetRenderState(this.renderer,e),g}async renderReadback({reader:A,count:e,renderer:g,readback:I}){if(this.renderer=g||this.renderer,!this.renderer)throw new Error("No renderer");this.ensureCapacity(e);const{program:s,material:B}=this.prepareProgramMaterial(A);s.update();const i=this.saveRenderState(this.renderer);this.process({count:e,material:B});const Q=this.read({readback:I});return this.resetRenderState(this.renderer,i),Q}getTexture(){var A;return(A=this.target)==null?void 0:A.texture}};UA.programTemplate=null,UA.readbackProgram=new Map,UA.fullScreenQuad=new dg(new E.RawShaderMaterial({visible:!1}));let Wt=UA;const EA=class EA{constructor(A={}){this.capacity=0,this.count=0,this.array=null,this.readback=null,this.source=null,this.needsUpdate=!0,this.dyno=new k({key:"rgbaArray",type:Vi,globals:()=>[Zi],value:{texture:EA.getEmpty(),count:0},update:e=>{var g;return e.texture=((g=this.readback)==null?void 0:g.getTexture())??this.source??EA.getEmpty(),e.count=this.count,e}}),A.array?(this.array=A.array,this.capacity=Math.floor(this.array.length/4),this.capacity=Math.floor(this.capacity/j)*j,this.count=Math.min(this.capacity,A.count??Number.POSITIVE_INFINITY)):(this.capacity=A.capacity??0,this.count=0)}dispose(){this.readback&&(this.readback.dispose(),this.readback=null),this.source&&(this.source.dispose(),this.source=null)}ensureCapacity(A){var e;if(!this.array||A>(((e=this.array)==null?void 0:e.length)??0)/4){this.capacity=MA(A).maxSplats;const g=new Uint8Array(this.capacity*4);this.array&&g.set(this.array),this.array=g}return this.array}getTexture(){var e;let A=(e=this.readback)==null?void 0:e.getTexture();return(this.source||this.array)&&(A=this.maybeUpdateSource()),A??EA.getEmpty()}maybeUpdateSource(){if(!this.array)throw new Error("No array");if(this.needsUpdate||!this.source){if(this.needsUpdate=!1,this.source){const{width:A,height:e,depth:g}=this.source.image;this.capacity!==A*e*g&&(this.source.dispose(),this.source=null)}if(this.source)this.array.buffer!==this.source.image.data.buffer&&(this.source.image.data=new Uint8Array(this.array.buffer));else{const{width:A,height:e,depth:g}=MA(this.capacity);this.source=new E.DataArrayTexture(this.array,A,e,g),this.source.format=E.RGBAFormat,this.source.type=E.UnsignedByteType,this.source.internalFormat="RGBA8",this.source.needsUpdate=!0}this.source.needsUpdate=!0}return this.source}render({reader:A,count:e,renderer:g}){this.readback||(this.readback=new Wt({renderer:g})),this.readback.render({reader:A,count:e,renderer:g}),this.capacity=this.readback.capacity,this.count=this.readback.count}fromPackedSplats({packedSplats:A,base:e,count:g,renderer:I}){const{dynoSplats:s,dynoBase:B,dynoCount:i,reader:Q}=EA.makeDynos();return s.packedSplats=A,B.value=e,i.value=g,this.render({reader:Q,count:g,renderer:I}),this}async read(){if(!this.readback)throw new Error("No readback");return(!this.array||this.array.length<this.count*4)&&(this.array=new Uint8Array(this.capacity*4)),(await this.readback.readback({readback:this.array})).subarray(0,this.count*4)}static getEmpty(){if(!EA.emptySource){const A=new Uint8Array(4);EA.emptySource=new E.DataArrayTexture(A,1,1,1),EA.emptySource.format=E.RGBAFormat,EA.emptySource.type=E.UnsignedByteType,EA.emptySource.internalFormat="RGBA8",EA.emptySource.needsUpdate=!0}return EA.emptySource}static makeDynos(){if(!EA.dynos){const A=new ag,e=new Xt({value:0}),g=new Xt({value:0}),I=GA({index:"int"},{rgba8:"vec4"},({index:s})=>{if(!s)throw new Error("index is undefined");s=hA(s,e);const B=Vg(A,s,e,g);return{rgba8:ct(B).outputs.rgba}});EA.dynos={dynoSplats:A,dynoBase:e,dynoCount:g,reader:I}}return EA.dynos}};EA.emptySource=null,EA.dynos=null;let Ze=EA;const Vi={type:"RgbaArray"},Zi=rA(`
struct RgbaArray {
sampler2DArray texture;
int count;
};
`);function Eo(t,A){return new X({inTypes:{rgba:Vi,index:"int"},outTypes:{rgba:"vec4"},inputs:{rgba:t,index:A},globals:()=>[Zi],statements:({inputs:g,outputs:I})=>JA(`
if ((index >= 0) && (index < ${g.rgba}.count)) {
${I.rgba} = texelFetch(${g.rgba}.texture, splatTexCoord(index), 0);
} else {
${I.rgba} = vec4(0.0, 0.0, 0.0, 0.0);
}
`)}).outputs.rgba}var Xi=(t=>(t.ALL="all",t.PLANE="plane",t.SPHERE="sphere",t.BOX="box",t.ELLIPSOID="ellipsoid",t.CYLINDER="cylinder",t.CAPSULE="capsule",t.INFINITE_CONE="infinite_cone",t))(Xi||{});function oo(t){switch(t){case"all":return 0;case"plane":return 1;case"sphere":return 2;case"box":return 3;case"ellipsoid":return 4;case"cylinder":return 5;case"capsule":return 6;case"infinite_cone":return 7;default:throw new Error(`Unknown SDF type: ${t}`)}}var Wi=(t=>(t.MULTIPLY="multiply",t.SET_RGB="set_rgb",t.ADD_RGBA="add_rgba",t))(Wi||{});function ro(t){switch(t){case"multiply":return 0;case"set_rgb":return 1;case"add_rgba":return 2;default:throw new Error(`Unknown blend mode: ${t}`)}}class ji extends E.Object3D{constructor(A={}){super();const{type:e,invert:g,opacity:I,color:s,displace:B,radius:i}=A;this.type=e??"sphere",this.invert=g??!1,this.opacity=I??1,this.color=s??new E.Color(1,1,1),this.displace=B??new E.Vector3(0,0,0),this.radius=i??0}}const ye=class ye extends E.Object3D{constructor(A={}){const{name:e,rgbaBlendMode:g="multiply",sdfSmooth:I=0,softEdge:s=0,invert:B=!1,sdfs:i=null}=A;super(),this.rgbaBlendMode=g,this.sdfSmooth=I,this.softEdge=s,this.invert=B,this.sdfs=i,this.ordering=ye.nextOrdering++,this.name=e??`Edit ${this.ordering}`}addSdf(A){this.sdfs==null&&(this.sdfs=[]),this.sdfs.includes(A)||this.sdfs.push(A)}removeSdf(A){this.sdfs!=null&&(this.sdfs=this.sdfs.filter(e=>e!==A))}};ye.nextOrdering=1;let jt=ye;class Pi{constructor({maxSdfs:A,maxEdits:e}){this.maxSdfs=Math.max(16,A??0),this.numSdfs=0,this.sdfData=new Uint32Array(this.maxSdfs*8*4),this.sdfFloatData=new Float32Array(this.sdfData.buffer),this.sdfTexture=this.newSdfTexture(this.sdfData,this.maxSdfs),this.dynoSdfArray=new k({key:"sdfArray",type:_i,globals:()=>[Oi],value:{numSdfs:0,sdfTexture:this.sdfTexture},update:g=>(g.numSdfs=this.numSdfs,g.sdfTexture=this.sdfTexture,g)}),this.maxEdits=Math.max(16,e??0),this.numEdits=0,this.editData=new Uint32Array(this.maxEdits*4),this.editFloatData=new Float32Array(this.editData.buffer),this.dynoNumEdits=new Xt({value:0}),this.dynoEdits=this.newEdits(this.editData,this.maxEdits)}newSdfTexture(A,e){const g=new E.DataTexture(A,8,e,E.RGBAIntegerFormat,E.UnsignedIntType);return g.internalFormat="RGBA32UI",g.needsUpdate=!0,g}newEdits(A,e){return new k({key:"edits",type:"uvec4",count:e,globals:()=>[$i],value:A})}ensureCapacity({maxSdfs:A,maxEdits:e}){let g=!1;return A>this.sdfTexture.image.height&&(this.sdfTexture.dispose(),this.maxSdfs=Math.max(this.maxSdfs*2,A),this.sdfData=new Uint32Array(this.maxSdfs*8*4),this.sdfFloatData=new Float32Array(this.sdfData.buffer),this.sdfTexture=this.newSdfTexture(this.sdfData,this.maxSdfs)),e>(this.dynoEdits.count??0)&&(this.maxEdits=Math.max(this.maxEdits*2,e),this.editData=new Uint32Array(this.maxEdits*4),this.editFloatData=new Float32Array(this.editData.buffer),this.dynoEdits=this.newEdits(this.editData,this.maxEdits),g=!0),g}updateEditData(A,e){const g=this.editData[A]!==e;return this.editData[A]=e,g}updateEditFloatData(A,e){dt[0]=e;const g=this.editFloatData[A]!==dt[0];return g&&(this.editFloatData[A]=dt[0]),g}encodeEdit(A,{sdfFirst:e,sdfCount:g,invert:I,rgbaBlendMode:s,softEdge:B,sdfSmooth:i}){const Q=A*4;let C=!1;return C=this.updateEditData(Q+0,s|(I?256:0))||C,C=this.updateEditData(Q+1,e|g<<16)||C,C=this.updateEditFloatData(Q+2,B)||C,C=this.updateEditFloatData(Q+3,i)||C,C}updateSdfData(A,e){const g=this.sdfData[A]!==e;return this.sdfData[A]=e,g}updateSdfFloatData(A,e){dt[0]=e;const g=this.sdfFloatData[A]!==dt[0];return g&&(this.sdfFloatData[A]=dt[0]),g}encodeSdf(A,{sdfType:e,invert:g,center:I,quaternion:s,scale:B,sizes:i},Q){const C=A*32,a=e|(g?256:0);let n=!1;n=this.updateSdfFloatData(C+0,(I==null?void 0:I.x)??0)||n,n=this.updateSdfFloatData(C+1,(I==null?void 0:I.y)??0)||n,n=this.updateSdfFloatData(C+2,(I==null?void 0:I.z)??0)||n,n=this.updateSdfData(C+3,a)||n,n=this.updateSdfFloatData(C+4,(s==null?void 0:s.x)??0)||n,n=this.updateSdfFloatData(C+5,(s==null?void 0:s.y)??0)||n,n=this.updateSdfFloatData(C+6,(s==null?void 0:s.z)??0)||n,n=this.updateSdfFloatData(C+7,(s==null?void 0:s.w)??0)||n,n=this.updateSdfFloatData(C+8,(B==null?void 0:B.x)??0)||n,n=this.updateSdfFloatData(C+9,(B==null?void 0:B.y)??0)||n,n=this.updateSdfFloatData(C+10,(B==null?void 0:B.z)??0)||n,n=this.updateSdfData(C+11,0)||n,n=this.updateSdfFloatData(C+12,(i==null?void 0:i.x)??0)||n,n=this.updateSdfFloatData(C+13,(i==null?void 0:i.y)??0)||n,n=this.updateSdfFloatData(C+14,(i==null?void 0:i.z)??0)||n,n=this.updateSdfFloatData(C+15,(i==null?void 0:i.w)??0)||n;const o=Math.min(4,Q.length);for(let r=0;r<o;++r){const h=C+16+r*4;n=this.updateSdfFloatData(h+0,Q[r].x)||n,n=this.updateSdfFloatData(h+1,Q[r].y)||n,n=this.updateSdfFloatData(h+2,Q[r].z)||n,n=this.updateSdfFloatData(h+3,Q[r].w)||n}return n}update(A){const e=A.reduce((n,{sdfs:o})=>n+o.length,0),g=this.ensureCapacity({maxEdits:A.length,maxSdfs:e}),I=[new E.Vector4,new E.Vector4],s=new E.Vector3,B=new E.Quaternion,i=new E.Vector3,Q=new E.Vector4;let C=0,a=g;A.length!==this.dynoNumEdits.value&&(this.dynoNumEdits.value=A.length,this.numEdits=A.length,a=!0);for(const[n,{edit:o,sdfs:r}]of A.entries()){a=this.encodeEdit(n,{sdfFirst:C,sdfCount:r.length,invert:o.invert,rgbaBlendMode:ro(o.rgbaBlendMode),softEdge:o.softEdge,sdfSmooth:o.sdfSmooth})||a;let h=!1;for(const c of r)Q.set(c.scale.x,c.scale.y,c.scale.z,c.radius),c.scale.setScalar(1),c.updateMatrixWorld(),c.matrixWorld.clone().invert().decompose(s,B,i),c.scale.set(Q.x,Q.y,Q.z),c.updateMatrixWorld(),I[0].set(c.color.r,c.color.g,c.color.b,c.opacity),I[1].set(c.displace.x,c.displace.y,c.displace.z,1),h=this.encodeSdf(C,{sdfType:oo(c.type),invert:c.invert,center:s,quaternion:B,scale:i,sizes:Q},I)||h,C+=1;this.numSdfs=C,h&&(this.sdfTexture.needsUpdate=!0),a||(a=h)}return{updated:a,dynoUpdated:g}}modify(A){return co(A,this.dynoSdfArray,this.dynoNumEdits,this.dynoEdits)}}const _i={type:"SdfArray"},Oi=rA(`
struct SdfArray {
int numSdfs;
usampler2D sdfTexture;
};
void unpackSdfArray(
usampler2D sdfTexture, int sdfIndex, out uint flags,
out vec3 center, out vec4 quaternion, out vec3 scale, out vec4 sizes,
int numValues, out vec4 values[4]
) {
uvec4 temp = texelFetch(sdfTexture, ivec2(0, sdfIndex), 0);
flags = temp.w;
center = vec3(uintBitsToFloat(temp.x), uintBitsToFloat(temp.y), uintBitsToFloat(temp.z));
temp = texelFetch(sdfTexture, ivec2(1, sdfIndex), 0);
quaternion = vec4(uintBitsToFloat(temp.x), uintBitsToFloat(temp.y), uintBitsToFloat(temp.z), uintBitsToFloat(temp.w));
temp = texelFetch(sdfTexture, ivec2(2, sdfIndex), 0);
scale = vec3(uintBitsToFloat(temp.x), uintBitsToFloat(temp.y), uintBitsToFloat(temp.z));
temp = texelFetch(sdfTexture, ivec2(3, sdfIndex), 0);
sizes = vec4(uintBitsToFloat(temp.x), uintBitsToFloat(temp.y), uintBitsToFloat(temp.z), uintBitsToFloat(temp.w));
for (int i = 0; i < numValues; ++i) {
temp = texelFetch(sdfTexture, ivec2(4 + i, sdfIndex), 0);
values[i] = vec4(uintBitsToFloat(temp.x), uintBitsToFloat(temp.y), uintBitsToFloat(temp.z), uintBitsToFloat(temp.w));
}
}
const uint SDF_FLAG_TYPE = 0xFFu;
const uint SDF_FLAG_INVERT = 1u << 8u;
const uint SDF_TYPE_ALL = 0u;
const uint SDF_TYPE_PLANE = 1u;
const uint SDF_TYPE_SPHERE = 2u;
const uint SDF_TYPE_BOX = 3u;
const uint SDF_TYPE_ELLIPSOID = 4u;
const uint SDF_TYPE_CYLINDER = 5u;
const uint SDF_TYPE_CAPSULE = 6u;
const uint SDF_TYPE_INFINITE_CONE = 7u;
float evaluateSdfArray(
usampler2D sdfTexture, int numSdfs, int sdfFirst, int sdfCount, vec3 pos,
float smoothK, int numValues, out vec4 outValues[4]
) {
float distanceAccum = (smoothK == 0.0) ? 1.0 / 0.0 : 0.0;
float maxExp = -1.0 / 0.0;
for (int i = 0; i < numValues; ++i) {
outValues[i] = vec4(0.0);
}
uint flags;
vec3 center, scale;
vec4 quaternion, sizes;
vec4 values[4];
int sdfLast = min(sdfFirst + sdfCount, numSdfs);
for (int index = sdfFirst; index < sdfLast; ++index) {
unpackSdfArray(sdfTexture, index, flags, center, quaternion, scale, sizes, numValues, values);
uint sdfType = flags & SDF_FLAG_TYPE;
vec3 sdfPos = quatVec(quaternion, pos * scale) + center;
float distance;
switch (sdfType) {
case SDF_TYPE_ALL:
distance = -1.0 / 0.0;
break;
case SDF_TYPE_PLANE: {
distance = sdfPos.z;
break;
}
case SDF_TYPE_SPHERE: {
distance = length(sdfPos) - sizes.w;
break;
}
case SDF_TYPE_BOX: {
vec3 q = abs(sdfPos) - sizes.xyz + sizes.w;
distance = length(max(q, 0.0)) + min(max(q.x, max(q.y, q.z)), 0.0) - sizes.w;
break;
}
case SDF_TYPE_ELLIPSOID: {
vec3 sizes = sizes.xyz;
float k0 = length(sdfPos / sizes);
float k1 = length(sdfPos / dot(sizes, sizes));
distance = k0 * (k0 - 1.0) / k1;
break;
}
case SDF_TYPE_CYLINDER: {
vec2 d = abs(vec2(length(sdfPos.xz), sdfPos.y)) - sizes.wy;
distance = min(max(d.x, d.y), 0.0) + length(max(d, 0.0));
break;
}
case SDF_TYPE_CAPSULE: {
sdfPos.y -= clamp(sdfPos.y, -0.5 * sizes.y, 0.5 * sizes.y);
distance = length(sdfPos) - sizes.w;
break;
}
case SDF_TYPE_INFINITE_CONE: {
float angle = 0.25 * PI * sizes.w;
vec2 c = vec2(sin(angle), cos(angle));
vec2 q = vec2(length(sdfPos.xy), -sdfPos.z);
float d = length(q - c * max(dot(q, c), 0.0));
distance = d * (((q.x * c.y - q.y * c.x) < 0.0) ? -1.0 : 1.0);
break;
}
}
if ((flags & SDF_FLAG_INVERT) != 0u) {
distance = -distance;
}
if (smoothK == 0.0) {
if (distance < distanceAccum) {
distanceAccum = distance;
for (int i = 0; i < numValues; ++i) {
outValues[i] = values[i];
}
}
} else {
float scaledDistance = -distance / smoothK;
if (scaledDistance > maxExp) {
float scale = exp(maxExp - scaledDistance);
distanceAccum *= scale;
for (int i = 0; i < numValues; ++i) {
outValues[i] *= scale;
}
maxExp = scaledDistance;
}
float weight = exp(scaledDistance - maxExp);
distanceAccum += weight;
for (int i = 0; i < numValues; ++i) {
outValues[i] += weight * values[i];
}
}
}
if (smoothK == 0.0) {
return distanceAccum;
} else {
// Very distant SDFs may result in 0 accumulation
if (distanceAccum == 0.0) {
return 1.0 / 0.0;
}
for (int i = 0; i < numValues; ++i) {
outValues[i] /= distanceAccum;
}
return (-log(distanceAccum) - maxExp) * smoothK;
}
}
float modulateSdfArray(
usampler2D sdfTexture, int numSdfs, int sdfFirst, int sdfCount, vec3 pos,
float smoothK, int numValues, out vec4 values[4],
float softEdge, bool invert
) {
float distance = evaluateSdfArray(sdfTexture, numSdfs, sdfFirst, sdfCount, pos, smoothK, numValues, values);
if (invert) {
distance = -distance;
}
return (softEdge == 0.0) ? ((distance < 0.0) ? 1.0 : 0.0)
: clamp(-distance / softEdge + 0.5, 0.0, 1.0);
}
`),$i=rA(`
const uint EDIT_FLAG_BLEND = 0xFFu;
const uint EDIT_BLEND_MULTIPLY = 0u;
const uint EDIT_BLEND_SET_RGB = 1u;
const uint EDIT_BLEND_ADD_RGBA = 2u;
const uint EDIT_FLAG_INVERT = 0x100u;
void decodeEdit(
uvec4 packedEdit, out int sdfFirst, out int sdfCount,
out bool invert, out uint rgbaBlendMode, out float softEdge, out float sdfSmooth
) {
rgbaBlendMode = packedEdit.x & EDIT_FLAG_BLEND;
invert = (packedEdit.x & EDIT_FLAG_INVERT) != 0u;
sdfFirst = int(packedEdit.y & 0xFFFFu);
sdfCount = int(packedEdit.y >> 16u);
softEdge = uintBitsToFloat(packedEdit.z);
sdfSmooth = uintBitsToFloat(packedEdit.w);
}
void applyRgbaDisplaceEdit(
usampler2D sdfTexture, int numSdfs, int sdfFirst, int sdfCount, inout vec3 pos,
float smoothK, float softEdge, bool invert, uint rgbaBlendMode, inout vec4 rgba
) {
vec4 values[4];
float modulate = modulateSdfArray(sdfTexture, numSdfs, sdfFirst, sdfCount, pos, smoothK, 2, values, softEdge, invert);
// On Android, moving values[0] is necessary to work around a compiler bug.
vec4 sdfRgba = values[0];
vec4 sdfDisplaceScale = values[1];
vec4 target;
switch (rgbaBlendMode) {
case EDIT_BLEND_MULTIPLY:
target = rgba * sdfRgba;
break;
case EDIT_BLEND_SET_RGB:
target = vec4(sdfRgba.rgb, rgba.a * sdfRgba.a);
break;
case EDIT_BLEND_ADD_RGBA:
target = rgba + sdfRgba;
break;
default:
// Debug output if blend mode not set
target = vec4(fract(pos), 1.0);
}
rgba = mix(rgba, target, modulate);
pos += sdfDisplaceScale.xyz * modulate;
}
void applyPackedRgbaDisplaceEdit(uvec4 packedEdit, usampler2D sdfTexture, int numSdfs, inout vec3 pos, inout vec4 rgba) {
int sdfFirst, sdfCount;
bool invert;
uint rgbaBlendMode;
float softEdge, sdfSmooth;
decodeEdit(packedEdit, sdfFirst, sdfCount, invert, rgbaBlendMode, softEdge, sdfSmooth);
applyRgbaDisplaceEdit(sdfTexture, numSdfs, sdfFirst, sdfCount, pos, sdfSmooth, softEdge, invert, rgbaBlendMode, rgba);
}
`);function co(t,A,e,g){return new X({inTypes:{gsplat:AA,sdfArray:_i,numEdits:"int",rgbaDisplaceEdits:"uvec4"},outTypes:{gsplat:AA},globals:()=>[Oi,$i],inputs:{gsplat:t,sdfArray:A,numEdits:e,rgbaDisplaceEdits:g},statements:({inputs:s,outputs:B})=>{const{sdfArray:i,numEdits:Q,rgbaDisplaceEdits:C}=s,{gsplat:a}=B;return JA(`
${a} = ${s.gsplat};
if (isGsplatActive(${a}.flags)) {
for (int editIndex = 0; editIndex < ${Q}; ++editIndex) {
applyPackedRgbaDisplaceEdit(
${C}[editIndex], ${i}.sdfTexture, ${i}.numSdfs,
${a}.center, ${a}.rgba
);
}
}
`)}}).outputs.gsplat}const dt=new Float32Array(1);class AQ{constructor(A){this.modifier=A,this.cache=new Map}apply(A){let e=this.cache.get(A);return e||(e=GA({index:"int"},{gsplat:AA},({index:g})=>{const{gsplat:I}=A.apply({index:g});return this.modifier.apply({gsplat:I})}),this.cache.set(A,e)),e}}class ot{constructor(){this.scale=new ht({value:Number.NEGATIVE_INFINITY}),this.rotate=new Lt({value:new E.Quaternion(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY)}),this.translate=new xt({value:new E.Vector3(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY)})}apply(A){return Di(A,{scale:this.scale,rotate:this.rotate,translate:this.translate})}applyDir(A){return yi(A,{rotate:this.rotate})}applyGsplat(A){return Ag(A,{scale:this.scale,rotate:this.rotate,translate:this.translate})}updateFromMatrix(A){const e=new E.Vector3,g=new E.Quaternion,I=new E.Vector3;A.decompose(I,g,e);const s=(e.x+e.y+e.z)/3;let B=!1;return s!==this.scale.value&&(this.scale.value=s,B=!0),I.equals(this.translate.value)||(this.translate.value.copy(I),B=!0),g.equals(this.rotate.value)||(this.rotate.value.copy(g),B=!0),B}update(A){return A.updateMatrixWorld(),this.updateFromMatrix(A.matrixWorld)}}class kt extends E.Object3D{constructor({numSplats:A,generator:e,construct:g,update:I}){if(super(),this.numSplats=A??0,this.generator=e,this.frameUpdate=I,this.version=0,g){const s=g(this);Object.assign(this,s)}}updateVersion(){this.version+=1}set needsUpdate(A){A&&this.updateVersion()}}const gt=class gt extends kt{constructor(A={}){const e=new ot,g=new ot,I=new ot,s=new ot,B=new Lt({value:new E.Vector4(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY)}),i=new ht({value:0}),Q=new ht({value:0}),C={transform:e,viewToWorld:g,worldToView:I,viewToObject:s,recolor:B,time:i,deltaTime:Q};if(super({update:({time:a,deltaTime:n,viewToWorld:o,globalEdits:r})=>this.update({time:a,deltaTime:n,viewToWorld:o,globalEdits:r})}),this.isInitialized=!1,this.recolor=new E.Color(1,1,1),this.opacity=1,this.enableViewToObject=!1,this.enableViewToWorld=!1,this.enableWorldToView=!1,this.skinning=null,this.edits=null,this.rgbaDisplaceEdits=null,this.splatRgba=null,this.maxSh=3,this.packedSplats=A.packedSplats??new HA,this.packedSplats.splatEncoding=A.splatEncoding??{...Me},this.numSplats=this.packedSplats.numSplats,this.editable=A.editable??!0,this.onFrame=A.onFrame,this.context=C,this.objectModifier=A.objectModifier,this.worldModifier=A.worldModifier,this.updateGenerator(),A.url||A.fileBytes||A.constructSplats||A.packedSplats&&!A.packedSplats.isInitialized)this.initialized=this.asyncInitialize(A).then(async()=>{if(this.updateGenerator(),this.isInitialized=!0,A.onLoad){const a=A.onLoad(this);a instanceof Promise&&await a}return this});else if(this.isInitialized=!0,this.initialized=Promise.resolve(this),A.onLoad){const a=A.onLoad(this);a instanceof Promise&&(this.initialized=a.then(()=>this))}}async asyncInitialize(A){const{url:e,fileBytes:g,fileType:I,fileName:s,maxSplats:B,constructSplats:i,splatEncoding:Q}=A;if(e||g||i){const C={url:e,fileBytes:g,fileType:I,fileName:s,maxSplats:B,construct:i,splatEncoding:Q};this.packedSplats.reinitialize(C)}this.packedSplats&&(await this.packedSplats.initialized,this.numSplats=this.packedSplats.numSplats,this.updateGenerator())}static async staticInitialize(){await Ug(),gt.isStaticInitialized=!0}pushSplat(A,e,g,I,s){this.packedSplats.pushSplat(A,e,g,I,s)}forEachSplat(A){this.packedSplats.forEachSplat(A)}dispose(){this.packedSplats.dispose()}constructGenerator(A){const{transform:e,viewToObject:g,recolor:I}=A,s=GA({index:"int"},{gsplat:AA},({index:B})=>{if(!B)throw new Error("index is undefined");let i=Gt(this.packedSplats.dyno,B);if(this.maxSh>=1){const{sh1Texture:C,sh2Texture:a,sh3Texture:n}=this.ensureShTextures();if(C){let o=function(D,y){const{x:d,y:m}=ut(y).outputs,M=BA(hA(d,m),v("float",.5)),p=BA(wt(m,d),v("float",.5));return hA(M,BA(D,p))};const r=g.translate,{center:h}=ct(i).outputs,c=bB(wt(h,r)),l=wo(i,C,c);let u=o(l,this.packedSplats.dynoSh1MinMax);if(this.maxSh>=2&&a){const D=Do(i,a,c);u=hA(u,o(D,this.packedSplats.dynoSh2MinMax))}if(this.maxSh>=3&&n){const D=yo(i,n,c);u=hA(u,o(D,this.packedSplats.dynoSh3MinMax))}let{rgba:w}=ct(i).outputs;w=hA(w,vB(u,v("float",0))),i=Bt({gsplat:i,rgba:w})}}if(this.splatRgba){const C=Eo(this.splatRgba.dyno,B);i=Bt({gsplat:i,rgba:C})}this.skinning&&(i=this.skinning.modify(i)),this.objectModifier&&(i=this.objectModifier.apply({gsplat:i}).gsplat),i=e.applyGsplat(i);const Q=BA(I,ct(i).outputs.rgba);return i=Bt({gsplat:i,rgba:Q}),this.rgbaDisplaceEdits&&(i=this.rgbaDisplaceEdits.modify(i)),this.worldModifier&&(i=this.worldModifier.apply({gsplat:i}).gsplat),{gsplat:i}});this.generator=s}updateGenerator(){this.constructGenerator(this.context)}update({time:A,viewToWorld:e,deltaTime:g,globalEdits:I}){var l;this.numSplats=this.packedSplats.numSplats,this.context.time.value=A,this.context.deltaTime.value=g,gt.dynoTime.value=A;const{transform:s,viewToObject:B,recolor:i}=this.context;let Q=s.update(this);this.context.viewToWorld.updateFromMatrix(e)&&this.enableViewToWorld&&(Q=!0);const C=e.clone().invert();this.context.worldToView.updateFromMatrix(C)&&this.enableWorldToView&&(Q=!0);const o=new E.Matrix4().compose(s.translate.value,s.rotate.value,new E.Vector3().setScalar(s.scale.value)).invert().multiply(e);B.updateFromMatrix(o)&&(this.enableViewToObject||this.packedSplats.extra.sh1)&&(Q=!0);const r=new E.Vector4(this.recolor.r,this.recolor.g,this.recolor.b,this.opacity);r.equals(i.value)||(i.value.copy(r),Q=!0);const h=this.editable?(this.edits??[]).concat(I):[];this.editable&&!this.edits&&this.traverseVisible(u=>{u instanceof jt&&h.push(u)}),h.sort((u,w)=>u.ordering-w.ordering);const c=h.map(u=>{if(u.sdfs!=null)return{edit:u,sdfs:u.sdfs};const w=[];return u.traverseVisible(D=>{D instanceof ji&&w.push(D)}),{edit:u,sdfs:w}});if(c.length>0&&!this.rgbaDisplaceEdits){const u=c.length,w=c.reduce((D,y)=>D+y.sdfs.length,0);this.rgbaDisplaceEdits=new Pi({maxEdits:u,maxSdfs:w}),this.updateGenerator()}if(this.rgbaDisplaceEdits){const u=this.rgbaDisplaceEdits.update(c);Q||(Q=u.updated),u.dynoUpdated&&this.updateGenerator()}Q&&this.updateVersion(),(l=this.onFrame)==null||l.call(this,{mesh:this,time:A,deltaTime:g})}raycast(A,e){var r,h;if(!this.packedSplats.packedArray||!this.packedSplats.numSplats)return;const{near:g,far:I,ray:s}=A,B=this.matrixWorld.clone().invert(),i=new E.Matrix3().setFromMatrix4(B),Q=s.origin.clone().applyMatrix4(B),C=s.direction.clone().applyMatrix3(i),a=new E.Vector3;B.decompose(new E.Vector3,new E.Quaternion,a),(a.x*a.y*a.z)**(1/3);const o=$Q(Q.x,Q.y,Q.z,C.x,C.y,C.z,g,I,this.packedSplats.numSplats,this.packedSplats.packedArray,!0,((r=this.packedSplats.splatEncoding)==null?void 0:r.lnScaleMin)??kA,((h=this.packedSplats.splatEncoding)==null?void 0:h.lnScaleMax)??RA);for(const c of o){const l=s.direction.clone().multiplyScalar(c).add(s.origin);e.push({distance:c,point:l,object:this})}}ensureShTextures(){if(!this.packedSplats.extra.sh1)return{};let A=this.packedSplats.extra.sh1Texture;if(!A){let I=this.packedSplats.extra.sh1;const{width:s,height:B,depth:i,maxSplats:Q}=MA(I.length/2);if(I.length<Q*2){const a=new Uint32Array(Q*2);a.set(I),this.packedSplats.extra.sh1=a,I=a}const C=new E.DataArrayTexture(I,s,B,i);C.format=E.RGIntegerFormat,C.type=E.UnsignedIntType,C.internalFormat="RG32UI",C.needsUpdate=!0,A=new zt({value:C,key:"sh1"}),this.packedSplats.extra.sh1Texture=A}if(!this.packedSplats.extra.sh2)return{sh1Texture:A};let e=this.packedSplats.extra.sh2Texture;if(!e){let I=this.packedSplats.extra.sh2;const{width:s,height:B,depth:i,maxSplats:Q}=MA(I.length/4);if(I.length<Q*4){const a=new Uint32Array(Q*4);a.set(I),this.packedSplats.extra.sh2=a,I=a}const C=new E.DataArrayTexture(I,s,B,i);C.format=E.RGBAIntegerFormat,C.type=E.UnsignedIntType,C.internalFormat="RGBA32UI",C.needsUpdate=!0,e=new zt({value:C,key:"sh2"}),this.packedSplats.extra.sh2Texture=e}if(!this.packedSplats.extra.sh3)return{sh1Texture:A,sh2Texture:e};let g=this.packedSplats.extra.sh3Texture;if(!g){let I=this.packedSplats.extra.sh3;const{width:s,height:B,depth:i,maxSplats:Q}=MA(I.length/4);if(I.length<Q*4){const a=new Uint32Array(Q*4);a.set(I),this.packedSplats.extra.sh3=a,I=a}const C=new E.DataArrayTexture(I,s,B,i);C.format=E.RGBAIntegerFormat,C.type=E.UnsignedIntType,C.internalFormat="RGBA32UI",C.needsUpdate=!0,g=new zt({value:C,key:"sh3"}),this.packedSplats.extra.sh3Texture=g}return{sh1Texture:A,sh2Texture:e,sh3Texture:g}}};gt.staticInitialized=gt.staticInitialize(),gt.isStaticInitialized=!1,gt.dynoTime=new ht({value:0});let ZA=gt;const ho=rA(`
vec3 evaluateSH1(Gsplat gsplat, usampler2DArray sh1, vec3 viewDir) {
// Extract sint7 values packed into 2 x uint32
uvec2 packed = texelFetch(sh1, splatTexCoord(gsplat.index), 0).rg;
vec3 sh1_0 = vec3(ivec3(
int(packed.x << 25u) >> 25,
int(packed.x << 18u) >> 25,
int(packed.x << 11u) >> 25
)) / 63.0;
vec3 sh1_1 = vec3(ivec3(
int(packed.x << 4u) >> 25,
int((packed.x >> 3u) | (packed.y << 29u)) >> 25,
int(packed.y << 22u) >> 25
)) / 63.0;
vec3 sh1_2 = vec3(ivec3(
int(packed.y << 15u) >> 25,
int(packed.y << 8u) >> 25,
int(packed.y << 1u) >> 25
)) / 63.0;
return sh1_0 * (-0.4886025 * viewDir.y)
+ sh1_1 * (0.4886025 * viewDir.z)
+ sh1_2 * (-0.4886025 * viewDir.x);
}
`),lo=rA(`
vec3 evaluateSH2(Gsplat gsplat, usampler2DArray sh2, vec3 viewDir) {
// Extract sint8 values packed into 4 x uint32
uvec4 packed = texelFetch(sh2, splatTexCoord(gsplat.index), 0);
vec3 sh2_0 = vec3(ivec3(
int(packed.x << 24u) >> 24,
int(packed.x << 16u) >> 24,
int(packed.x << 8u) >> 24
)) / 127.0;
vec3 sh2_1 = vec3(ivec3(
int(packed.x) >> 24,
int(packed.y << 24u) >> 24,
int(packed.y << 16u) >> 24
)) / 127.0;
vec3 sh2_2 = vec3(ivec3(
int(packed.y << 8u) >> 24,
int(packed.y) >> 24,
int(packed.z << 24u) >> 24
)) / 127.0;
vec3 sh2_3 = vec3(ivec3(
int(packed.z << 16u) >> 24,
int(packed.z << 8u) >> 24,
int(packed.z) >> 24
)) / 127.0;
vec3 sh2_4 = vec3(ivec3(
int(packed.w << 24u) >> 24,
int(packed.w << 16u) >> 24,
int(packed.w << 8u) >> 24
)) / 127.0;
return sh2_0 * (1.0925484 * viewDir.x * viewDir.y)
+ sh2_1 * (-1.0925484 * viewDir.y * viewDir.z)
+ sh2_2 * (0.3153915 * (2.0 * viewDir.z * viewDir.z - viewDir.x * viewDir.x - viewDir.y * viewDir.y))
+ sh2_3 * (-1.0925484 * viewDir.x * viewDir.z)
+ sh2_4 * (0.5462742 * (viewDir.x * viewDir.x - viewDir.y * viewDir.y));
}
`),uo=rA(`
vec3 evaluateSH3(Gsplat gsplat, usampler2DArray sh3, vec3 viewDir) {
// Extract sint6 values packed into 4 x uint32
uvec4 packed = texelFetch(sh3, splatTexCoord(gsplat.index), 0);
vec3 sh3_0 = vec3(ivec3(
int(packed.x << 26u) >> 26,
int(packed.x << 20u) >> 26,
int(packed.x << 14u) >> 26
)) / 31.0;
vec3 sh3_1 = vec3(ivec3(
int(packed.x << 8u) >> 26,
int(packed.x << 2u) >> 26,
int((packed.x >> 4u) | (packed.y << 28u)) >> 26
)) / 31.0;
vec3 sh3_2 = vec3(ivec3(
int(packed.y << 22u) >> 26,
int(packed.y << 16u) >> 26,
int(packed.y << 10u) >> 26
)) / 31.0;
vec3 sh3_3 = vec3(ivec3(
int(packed.y << 4u) >> 26,
int((packed.y >> 2u) | (packed.z << 30u)) >> 26,
int(packed.z << 24u) >> 26
)) / 31.0;
vec3 sh3_4 = vec3(ivec3(
int(packed.z << 18u) >> 26,
int(packed.z << 12u) >> 26,
int(packed.z << 6u) >> 26
)) / 31.0;
vec3 sh3_5 = vec3(ivec3(
int(packed.z) >> 26,
int(packed.w << 26u) >> 26,
int(packed.w << 20u) >> 26
)) / 31.0;
vec3 sh3_6 = vec3(ivec3(
int(packed.w << 14u) >> 26,
int(packed.w << 8u) >> 26,
int(packed.w << 2u) >> 26
)) / 31.0;
float xx = viewDir.x * viewDir.x;
float yy = viewDir.y * viewDir.y;
float zz = viewDir.z * viewDir.z;
float xy = viewDir.x * viewDir.y;
float yz = viewDir.y * viewDir.z;
float zx = viewDir.z * viewDir.x;
return sh3_0 * (-0.5900436 * viewDir.y * (3.0 * xx - yy))
+ sh3_1 * (2.8906114 * xy * viewDir.z) +
+ sh3_2 * (-0.4570458 * viewDir.y * (4.0 * zz - xx - yy))
+ sh3_3 * (0.3731763 * viewDir.z * (2.0 * zz - 3.0 * xx - 3.0 * yy))
+ sh3_4 * (-0.4570458 * viewDir.x * (4.0 * zz - xx - yy))
+ sh3_5 * (1.4453057 * viewDir.z * (xx - yy))
+ sh3_6 * (-0.5900436 * viewDir.x * (xx - 3.0 * yy));
}
`);function wo(t,A,e){return ee({inTypes:{gsplat:AA,sh1:"usampler2DArray",viewDir:"vec3"},outTypes:{rgb:"vec3"},inputs:{gsplat:t,sh1:A,viewDir:e},globals:()=>[xA,ho],statements:({inputs:g,outputs:I})=>JA(`
if (isGsplatActive(${g.gsplat}.flags)) {
${I.rgb} = evaluateSH1(${g.gsplat}, ${g.sh1}, ${g.viewDir});
} else {
${I.rgb} = vec3(0.0);
}
`)}).outputs.rgb}function Do(t,A,e){return ee({inTypes:{gsplat:AA,sh2:"usampler2DArray",viewDir:"vec3"},outTypes:{rgb:"vec3"},inputs:{gsplat:t,sh2:A,viewDir:e},globals:()=>[xA,lo],statements:({inputs:g,outputs:I})=>JA(`
if (isGsplatActive(${g.gsplat}.flags)) {
${I.rgb} = evaluateSH2(${g.gsplat}, ${g.sh2}, ${g.viewDir});
} else {
${I.rgb} = vec3(0.0);
}
`)}).outputs.rgb}function yo(t,A,e){return ee({inTypes:{gsplat:AA,sh3:"usampler2DArray",viewDir:"vec3"},outTypes:{rgb:"vec3"},inputs:{gsplat:t,sh3:A,viewDir:e},globals:()=>[xA,uo],statements:({inputs:g,outputs:I})=>JA(`
if (isGsplatActive(${g.gsplat}.flags)) {
${I.rgb} = evaluateSH3(${g.gsplat}, ${g.sh3}, ${g.viewDir});
} else {
${I.rgb} = vec3(0.0);
}
`)}).outputs.rgb}const mt=class mt{constructor({fileBytes:A}){this.header="",this.littleEndian=!0,this.elements={},this.comments=[],this.data=null,this.numSplats=0,this.fileBytes=A instanceof ArrayBuffer?new Uint8Array(A):A}async parseHeader(){const e=new ReadableStream({start:B=>{B.enqueue(this.fileBytes.slice(0,65536)),B.close()}}).pipeThrough(new TextDecoderStream).getReader();this.header="";const g=`end_header
`;for(;;){const{value:B,done:i}=await e.read();if(i)throw new Error("Failed to read header");this.header+=B;const Q=this.header.indexOf(g);if(Q>=0){this.header=this.header.slice(0,Q+g.length);break}}const I=new TextEncoder().encode(this.header).length;this.data=new DataView(this.fileBytes.buffer,I),this.elements={};let s=null;this.comments=[],this.header.trim().split(`
`).forEach((B,i)=>{const Q=B.trim();if(i===0){if(Q!=="ply")throw new Error("Invalid PLY header");return}if(Q.length===0)return;const C=Q.split(" ");switch(C[0]){case"format":if(C[1]==="binary_little_endian")this.littleEndian=!0;else if(C[1]==="binary_big_endian")this.littleEndian=!1;else throw new Error(`Unsupported PLY format: ${C[1]}`);if(C[2]!=="1.0")throw new Error(`Unsupported PLY version: ${C[2]}`);break;case"end_header":break;case"comment":this.comments.push(Q.slice(8));break;case"element":{const a=C[1];s={name:a,count:Number.parseInt(C[2]),properties:{}},this.elements[a]=s;break}case"property":if(s==null)throw new Error("Property must be inside an element");C[1]==="list"?s.properties[C[4]]={isList:!0,type:C[3],countType:C[2]}:s.properties[C[2]]={isList:!1,type:C[1]};break}}),this.elements.vertex&&(this.numSplats=this.elements.vertex.count)}parseData(A){let e=0;const g=this.data;if(g==null)throw new Error("No data to parse");for(const I in this.elements){const s=this.elements[I],{count:B,properties:i}=s,Q={},C=[];for(const[n,o]of Object.entries(i))o.isList?(Q[n]=[],C.push(()=>{const r=Q[n];r.length=Qe[o.countType](g,e,this.littleEndian),e+=ft[o.countType];for(let h=0;h<r.length;h++)r[h]=Qe[o.type](g,e,this.littleEndian),e+=ft[o.type]})):(Q[n]=0,C.push(()=>{Q[n]=Qe[o.type](g,e,this.littleEndian),e+=ft[o.type]}));const a=A(s)??(()=>{});for(let n=0;n<B;n++){for(const o of C)o();a(n,Q)}}}parseSplats(A,e){if(this.elements.vertex==null)throw new Error("No vertex element found");let g=!1;const I=[];let s=0,B=[],i=[],Q=[],C,a,n;function o(){const u=fo[s];B=new Array(3).fill(null).flatMap((w,D)=>[0,1,2].map((y,d)=>`f_rest_${D+d*u/3}`)),i=new Array(5).fill(null).flatMap((w,D)=>[0,1,2].map((y,d)=>`f_rest_${3+D+d*u/3}`)),Q=new Array(7).fill(null).flatMap((w,D)=>[0,1,2].map((y,d)=>`f_rest_${8+D+d*u/3}`)),C=s>=1?new Float32Array(3*3):void 0,a=s>=2?new Float32Array(5*3):void 0,n=s>=3?new Float32Array(7*3):void 0}function r(u,w){if(!C)throw new Error("Missing sh1");for(const[D,y]of B.entries())C[D]=w[y]*8/255-4;if(a)for(const[D,y]of i.entries())a[D]=w[y]*8/255-4;if(n)for(const[D,y]of Q.entries())n[D]=w[y]*8/255-4;e==null||e(u,C,a,n)}function h(u){const{min_x:w,min_y:D,min_z:y,max_x:d,max_y:m,max_z:M,min_scale_x:p,min_scale_y:f,min_scale_z:R,max_scale_x:N,max_scale_y:S,max_scale_z:L}=u.properties;if(!w||!D||!y||!d||!m||!M||!p||!f||!R||!N||!S||!L)throw new Error("Missing PLY chunk properties");return g=!0,(x,G)=>{const{min_x:U,min_y:J,min_z:P,max_x:T,max_y:eA,max_z:z,min_scale_x:_,min_scale_y:H,min_scale_z:O,max_scale_x:W,max_scale_y:$,max_scale_z:Y,min_r:yA,min_g:aA,min_b:pA,max_r:dA,max_g:SA,max_b:cA}=G;I.push({min_x:U,min_y:J,min_z:P,max_x:T,max_y:eA,max_z:z,min_scale_x:_,min_scale_y:H,min_scale_z:O,max_scale_x:W,max_scale_y:$,max_scale_z:Y,min_r:yA,min_g:aA,min_b:pA,max_r:dA,max_g:SA,max_b:cA})}}function c(u){if(e&&u.name==="sh")return s=lg(u.properties),o(),r;if(u.name!=="vertex")return null;const{packed_position:w,packed_rotation:D,packed_scale:y,packed_color:d}=u.properties;if(!w||!D||!y||!d)throw new Error("Missing PLY properties: packed_position, packed_rotation, packed_scale, packed_color");const m=Math.sqrt(2);return(M,p)=>{const f=I[M>>>8];if(f==null)throw new Error("Missing PLY chunk");const{min_x:R,min_y:N,min_z:S,max_x:L,max_y:x,max_z:G,min_scale_x:U,min_scale_y:J,min_scale_z:P,max_scale_x:T,max_scale_y:eA,max_scale_z:z,min_r:_,min_g:H,min_b:O,max_r:W,max_g:$,max_b:Y}=f,{packed_position:yA,packed_rotation:aA,packed_scale:pA,packed_color:dA}=p,SA=(yA>>>21&2047)/2047*(L-R)+R,cA=(yA>>>11&1023)/1023*(x-N)+N,bA=(yA&2047)/2047*(G-S)+S,mA=((aA>>>20&1023)/1023-.5)*m,OA=((aA>>>10&1023)/1023-.5)*m,$A=((aA&1023)/1023-.5)*m,b=Math.sqrt(Math.max(0,1-mA*mA-OA*OA-$A*$A)),wA=aA>>>30,WA=wA===0?mA:wA===1?b:OA,Jt=wA<=1?OA:wA===2?b:$A,se=wA<=2?$A:b,NA=wA===0?b:mA,K=Math.exp((pA>>>21&2047)/2047*(T-U)+U),jA=Math.exp((pA>>>11&1023)/1023*(eA-J)+J),me=Math.exp((pA&2047)/2047*(z-P)+P),Ne=(dA>>>24&255)/255*((W??1)-(_??0))+(_??0),Fe=(dA>>>16&255)/255*(($??1)-(H??0))+(H??0),Ge=(dA>>>8&255)/255*((Y??1)-(O??0))+(O??0),xe=(dA&255)/255;A(M,SA,cA,bA,K,jA,me,WA,Jt,se,NA,xe,Ne,Fe,Ge)}}const l=u=>{if(u.name==="chunk")return h(u);if(g)return c(u);if(u.name!=="vertex")return null;const{x:w,y:D,z:y,scale_0:d,scale_1:m,scale_2:M,rot_0:p,rot_1:f,rot_2:R,rot_3:N,opacity:S,f_dc_0:L,f_dc_1:x,f_dc_2:G,red:U,green:J,blue:P,alpha:T}=u.properties;if(!w||!D||!y)throw new Error("Missing PLY properties: x, y, z");const eA=d&&m&&M,z=p&&f&&R&&N,_=T!=null?ne[T.type]:1,H=U!=null?ne[U.type]:1,O=J!=null?ne[J.type]:1,W=P!=null?ne[P.type]:1;return s=lg(u.properties),o(),($,Y)=>{const yA=eA?Math.exp(Y.scale_0):mt.defaultPointScale,aA=eA?Math.exp(Y.scale_1):mt.defaultPointScale,pA=eA?Math.exp(Y.scale_2):mt.defaultPointScale,dA=z?Y.rot_1:0,SA=z?Y.rot_2:0,cA=z?Y.rot_3:0,bA=z?Y.rot_0:1,mA=S!=null?1/(1+Math.exp(-Y.opacity)):T!=null?Y.alpha/_:1,OA=L!=null?Y.f_dc_0*ie+.5:U!=null?Y.red/H:1,$A=x!=null?Y.f_dc_1*ie+.5:J!=null?Y.green/O:1,b=G!=null?Y.f_dc_2*ie+.5:P!=null?Y.blue/W:1;if(A($,Y.x,Y.y,Y.z,yA,aA,pA,dA,SA,cA,bA,mA,OA,$A,b),e&&C){if(C)for(const[wA,WA]of B.entries())C[wA]=Y[WA];if(a)for(const[wA,WA]of i.entries())a[wA]=Y[WA];if(n)for(const[wA,WA]of Q.entries())n[wA]=Y[WA];e($,C,a,n)}}};this.parseData(l)}injectRgba(A){let e=0;const g=this.data;if(g==null)throw new Error("No parsed data");if(A.length!==this.numSplats*4)throw new Error("Invalid RGBA array length");for(const I in this.elements){const s=this.elements[I],{count:B,properties:i}=s,Q=[];let C=0;const a=I==="vertex";if(a){for(const n of["opacity","f_dc_0","f_dc_1","f_dc_2"])if(!i[n]||i[n].type!=="float")throw new Error(`Can't injectRgba due to property: ${n}`)}for(const[n,o]of Object.entries(i))if(o.isList)Q.push(()=>{const r=Qe[o.countType](g,e,this.littleEndian);e+=ft[o.countType],e+=r*ft[o.type]});else{if(a)if(n==="f_dc_0"||n==="f_dc_1"||n==="f_dc_2"){const r=Number.parseInt(n.slice(5));Q.push(()=>{const h=(A[C+r]/255-.5)/ie;hg[o.type](g,e,this.littleEndian,h)})}else n==="opacity"&&Q.push(()=>{const r=Math.max(-100,Math.min(100,-Math.log(1/(A[C+3]/255)-1)));hg[o.type](g,e,this.littleEndian,r)});Q.push(()=>{e+=ft[o.type]})}for(let n=0;n<B;n++){for(const o of Q)o();a&&(C+=4)}}}};mt.defaultPointScale=.001;let Pt=mt;const ie=.28209479177387814,Qe={char:(t,A,e)=>t.getInt8(A),uchar:(t,A,e)=>t.getUint8(A),short:(t,A,e)=>t.getInt16(A,e),ushort:(t,A,e)=>t.getUint16(A,e),int:(t,A,e)=>t.getInt32(A,e),uint:(t,A,e)=>t.getUint32(A,e),float:(t,A,e)=>t.getFloat32(A,e),double:(t,A,e)=>t.getFloat64(A,e)},hg={char:(t,A,e,g)=>{t.setInt8(A,g)},uchar:(t,A,e,g)=>{t.setUint8(A,g)},short:(t,A,e,g)=>{t.setInt16(A,g,e)},ushort:(t,A,e,g)=>{t.setUint16(A,g,e)},int:(t,A,e,g)=>{t.setInt32(A,g,e)},uint:(t,A,e,g)=>{t.setUint32(A,g,e)},float:(t,A,e,g)=>{t.setFloat32(A,g,e)},double:(t,A,e,g)=>{t.setFloat64(A,g,e)}},ft={char:1,uchar:1,short:2,ushort:2,int:4,uint:4,float:4,double:8},ne={char:127,uchar:255,short:32767,ushort:65535,int:2147483647,uint:4294967295,float:1,double:1},po={0:0,9:1,24:2,45:3},fo={0:0,1:9,2:24,3:45};function lg(t){let A=0;for(;t[`f_rest_${A}`];)A+=1;const e=po[A];if(e==null)throw new Error(`Unsupported number of SH coefficients: ${A}`);return e}const tQ='(function(){"use strict";let FA;const gg=typeof TextDecoder<"u"?new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}):{decode:()=>{throw Error("TextDecoder not available")}};typeof TextDecoder<"u"&&gg.decode();let PA=null;function Vg(){return(PA===null||PA.byteLength===0)&&(PA=new Uint8Array(FA.memory.buffer)),PA}function Pg(B,A){return B=B>>>0,gg.decode(Vg().subarray(B,B+A))}function Og(B,A,I){return FA.sort_splats(B,A,I)>>>0}function $g(B,A,I){return FA.sort32_splats(B,A,I)>>>0}async function AB(B,A){if(typeof Response=="function"&&B instanceof Response){if(typeof WebAssembly.instantiateStreaming=="function")try{return await WebAssembly.instantiateStreaming(B,A)}catch(g){if(B.headers.get("Content-Type")!="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n",g);else throw g}const I=await B.arrayBuffer();return await WebAssembly.instantiate(I,A)}else{const I=await WebAssembly.instantiate(B,A);return I instanceof WebAssembly.Instance?{instance:I,module:B}:I}}function IB(){const B={};return B.wbg={},B.wbg.__wbg_buffer_609cc3eee51ed158=function(A){return A.buffer},B.wbg.__wbg_length_3b4f022188ae8db6=function(A){return A.length},B.wbg.__wbg_length_6ca527665d89694d=function(A){return A.length},B.wbg.__wbg_length_8cfd2c6409af88ad=function(A){return A.length},B.wbg.__wbg_new_9fee97a409b32b68=function(A){return new Uint16Array(A)},B.wbg.__wbg_new_e3b321dcfef89fc7=function(A){return new Uint32Array(A)},B.wbg.__wbg_newwithbyteoffsetandlength_e6b7e69acd4c7354=function(A,I,g){return new Float32Array(A,I>>>0,g>>>0)},B.wbg.__wbg_newwithbyteoffsetandlength_f1dead44d1fc7212=function(A,I,g){return new Uint32Array(A,I>>>0,g>>>0)},B.wbg.__wbg_newwithlength_5a5efe313cfd59f1=function(A){return new Float32Array(A>>>0)},B.wbg.__wbg_set_10bad9bee0e9c58b=function(A,I,g){A.set(I,g>>>0)},B.wbg.__wbg_set_d23661d19148b229=function(A,I,g){A.set(I,g>>>0)},B.wbg.__wbg_set_f4f1f0daa30696fc=function(A,I,g){A.set(I,g>>>0)},B.wbg.__wbg_subarray_3aaeec89bb2544f0=function(A,I,g){return A.subarray(I>>>0,g>>>0)},B.wbg.__wbg_subarray_769e1e0f81bb259b=function(A,I,g){return A.subarray(I>>>0,g>>>0)},B.wbg.__wbindgen_init_externref_table=function(){const A=FA.__wbindgen_export_0,I=A.grow(4);A.set(0,void 0),A.set(I+0,void 0),A.set(I+1,null),A.set(I+2,!0),A.set(I+3,!1)},B.wbg.__wbindgen_memory=function(){return FA.memory},B.wbg.__wbindgen_throw=function(A,I){throw new Error(Pg(A,I))},B}function gB(B,A){return FA=B.exports,Bg.__wbindgen_wasm_module=A,PA=null,FA.__wbindgen_start(),FA}async function Bg(B){if(FA!==void 0)return FA;typeof B<"u"&&(Object.getPrototypeOf(B)===Object.prototype?{module_or_path:B}=B:console.warn("using deprecated parameters for the initialization function; pass a single object instead")),typeof B>"u"&&(B=new URL("data:application/wasm;base64,AGFzbQEAAAAB9AEjYAJ/fwF/YAN/f38Bf2ACf38AYAN/f38AYAF/AX9gAX8AYAV/f39/fwBgA29/fwFvYAV/f39/fwF/YAR/f39/AGABbwFvYANvb38AYAFvAX9gAAF/YAAAYAd/f39/f39/AX9gAX0BfWAGf39/f39/AGAEf39/fwF/YAN/b28Bf2ABfwFvYAABb2AHf39/f39/fwBgAn9+AX9gA39+fgBgDX19fX19fX19f29/fX0Bb2AGf39/f39/AX9gBX9/fX9/AGAEf31/fwBgBX9/fn9/AGAEf35/fwBgBX9/fH9/AGAEf3x/fwBgA39+fgF/YAJ9fQF9AvIEEQN3YmcdX193YmdfYnVmZmVyXzYwOWNjM2VlZTUxZWQxNTgACgN3YmcaX193YmdfbmV3XzlmZWU5N2E0MDliMzJiNjgACgN3YmcaX193Ymdfc2V0X2Y0ZjFmMGRhYTMwNjk2ZmMACwN3YmcdX193YmdfbGVuZ3RoXzhjZmQyYzY0MDlhZjg4YWQADAN3YmcxX193YmdfbmV3d2l0aGJ5dGVvZmZzZXRhbmRsZW5ndGhfZjFkZWFkNDRkMWZjNzIxMgAHA3diZxpfX3diZ19uZXdfZTNiMzIxZGNmZWY4OWZjNwAKA3diZxpfX3diZ19zZXRfZDIzNjYxZDE5MTQ4YjIyOQALA3diZx1fX3diZ19sZW5ndGhfNmNhNTI3NjY1ZDg5Njk0ZAAMA3diZzFfX3diZ19uZXd3aXRoYnl0ZW9mZnNldGFuZGxlbmd0aF9lNmI3ZTY5YWNkNGM3MzU0AAcDd2JnGl9fd2JnX3NldF8xMGJhZDliZWUwZTljNThiAAsDd2JnHV9fd2JnX2xlbmd0aF8zYjRmMDIyMTg4YWU4ZGI2AAwDd2JnH19fd2JnX3N1YmFycmF5Xzc2OWUxZTBmODFiYjI1OWIABwN3YmcfX193Ymdfc3ViYXJyYXlfM2FhZWVjODliYjI1NDRmMAAHA3diZyRfX3diZ19uZXd3aXRobGVuZ3RoXzVhNWVmZTMxM2NmZDU5ZjEAFAN3YmcQX193YmluZGdlbl90aHJvdwACA3diZxFfX3diaW5kZ2VuX21lbW9yeQAVA3diZx9fX3diaW5kZ2VuX2luaXRfZXh0ZXJucmVmX3RhYmxlAA4DwQG/AQQAAAYABAIEAQAP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QTBqECcNAgsgCSgCAEGcncAAQQEQlwENASACKAIAQQJGDQBBASEBIANBAXFFDQAjAEFAaiIDJAAgAyAENgIMAkAgCS0AEEEBRgRAIAkoAgAhCCADQoCAgICgATcDGCADQZSbwAA2AiggA0KUm8CAwAY3AxBBASEEIANBATYCPCADQfiewAA2AjggA0EBNgIsIANBAjYCNCAIQQRqKAIAIQogAyADQRBqNgIwIAgoAgAgCiADQShqECcNAQsgCSgCACIEKAIAQZafwABBECAEQQRqKAIAKAIMEQEABEBBASEEDAELIAkoAgQgCSgCCCEKIANBNGogAkEIaigCADYCACADIAkoAgAiCzYCKCADIAIpAgA3AixBASEEIAsgA0EsaiAKKAIQEQEADQAgCSgCACECIAMgA0EMaq1CgICAgBCENwMQIANBATYCLCADQaifwAA2AiggA0IBNwI0IAJBBGooAgAhCCADIANBEGoiCjYCMCACKAIAIAggA0EoaiIIECcNACAFQQFxBEAgAyAGNgIkIAkoAgAhAiADIANBJGqtQoCAgIAQhDcDECADQQE2AiwgA0Gon8AANgIoIANCATcCNCACQQRqKAIAIQUgAyAKNgIwIAIoAgAgBSAIECcNAQsgCSgCACICKAIAQZydwABBASACQQRqKAIAKAIMEQEAIQQLIANBQGskACAEDQILIAAgDEEBajYCBEEAIQEMAQtBASEBCyAHQdAAaiQAIAELmwcCDH8BfiMAQTBrIgEkAAJAAkAgACgCAEUEQCAAKAIQIgBFDQFBpazAAEEBIAAQyAEhAwwCCyABQQxqIAAQRwJAAn8gASgCDCICRQRAIAEtABAhAiAAKAIQIgYEQEEBIQNBjKzAAEH8q8AAIAJBAXEiBxtBGUEQIAcbIAYQyAENBQsgACACOgAEQQAMAQsCQCABKAIQIgNBAXENACABQoCAgIAgNwIYIAEgAjYCDCABIAM2AhAgASACIANqIgo2AhQDQAJAIAFBDGoQGEGAgMQAaw4CAgABCwsgACgCECILRQ0DIAtBIhCYAQ0CIAFCgICAgCA3AhggASAKNgIUIAEgAzYCECABIAI2AgwgAUEoaiEMA0ACQAJAAkACQAJ/An8CQAJAAkACQAJAAkACQCABQQxqEBgiAkGBgMQARwRAIAJBgIDEAEYNCiACQSdGDQsg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aiADcgwCC0ECQQJB2InAABBqAAsgASABZ0EQayIBQf//A3FBCGp0Qf///wNxIANBgICA2ANyIAFBF3Rrcgs2AgggACAENgIEIAAgBTYCAAuWBAEEfyMAQYABayIEJAACQAJAAkAgASgCCCICQYCAgBBxRQRAIAJBgICAIHENAUEBIQIgACgCACABEDJFDQIMAwsgACgCACECA0AgAyAEakH/AGogAkEPcSIFQTByIAVB1wBqIAVBCkkbOgAAIANBAWshAyACQRBJIAJBBHYhAkUNAAtBASECIAFBv77AAEECIAMgBGpBgAFqQQAgA2sQIUUNAQwCCyAAKAIAIQIDQCADIARqQf8AaiACQQ9xIgVBMHIgBUE3aiAFQQpJGzoAACADQQFrIQMgAkEPSyACQQR2IQINAAtBASECIAFBv77AAEECIAMgBGpBgAFqQQAgA2sQIQ0BCyABKAIAQau7wABBAiABKAIEKAIMEQEADQACQCABKAIIIgJBgICAEHFFBEAgAkGAgIAgcQ0BIAAoAgQgARAyIQIMAgsgACgCBCECQQAhAwNAIAMgBGpB/wBqIAJBD3EiAEEwciAAQdcAaiAAQQpJGzoAACADQQFrIQMgAkEPSyACQQR2IQINAAsgAUG/vsAAQQIgAyAEakGAAWpBACADaxAhIQIMAQsgACgCBCECQQAhAwNAIAMgBGpB/wBqIAJBD3EiAEEwciAAQTdqIABBCkkbOgAAIANBAWshAyACQQ9LIAJBBHYhAg0ACyABQb++wABBAiADIARqQYABakEAIANrECEhAgsgBEGAAWokACACC7oEAQh/IwBBEGsiAyQAIAMgATYCBCADIAA2AgAgA0KggICADjcCCAJ/AkACQAJAIAIoAhAiCQRAIAIoAhQiAA0BDAILIAIoAgwiAEUNASACKAIIIgEgAEEDdGohBCAAQQFrQf////8BcUEBaiEGIAIoAgAhAANAAkAgAEEEaigCACIFRQ0AIAMoAgAgACgCACAFIAMoAgQoAgwRAQBFDQBBAQwFC0EBIAEoAgAgAyABQQRqKAIAEQAADQQaIABBCGohACAEIAFBCGoiAUcNAAsMAgsgAEEYbCEKIABBAWtB/////wFxQQFqIQYgAigCCCEEIAIoAgAhAANAAkAgAEEEaigCACIBRQ0AIAMoAgAgACgCACABIAMoAgQo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1MAAIAE2AgBB9NTAAEEBNgIAQfzUwAAgACkDCDcCAEGE1cAAIABBEGopAwA3AgALIABBMGokAEH41MAADwsgAEEANgIoIABBATYCHCAAQcyVwAA2AhggAEIENwIgIABBGGpBtJbAABCBAQALIABBKGogAikDADcCACAAIAApAwg3AiAgACABNgIcIABBATYCGAJAIABBGGoiASgCAEUNACABKAIEIgJFDQAgASgCCCACQQJ0QQQQrQELIABBADYCKCAAQQE2AhwgAEHUlsAANgIYIABCBDcCICABQdyWwAAQgQEAC50CAQV/AkACQAJAAkAgAkEDakF8cSIEIAJGDQAgAyAEIAJrIgQgAyAESRsiBUUNAEEAIQQgAUH/AXEhBkEBIQcDQCACIARqLQAAIAZGDQQgBSAEQQFqIgRHDQALIAUgA0EIayIISw0CDAELIANBCGshCEEAIQULIAFB/wFxQYGChAhsIQQDQEGAgoQIIAIgBWoiBygCACAEcyIGayAGckGAgoQIIAdBBGooAgAgBHMiBmsgBnJxQYCBgoR4cUGAgYKEeEcNASAFQQhqIgUgCE0NAAsLIAMgBUcEQCABQf8BcSEEQQEhBwNAIAQgAiAFai0AAEYEQCAFIQQMAwsgAyAFQQFqIgVHDQALC0EAIQcLIAAgBDYCBCAAIAc2AgALhgIBA38jAEGAAWsiBCQAIAAoAgAhAAJ/AkAgASgCCCICQYCAgBBxRQRAIAJBgICAIHENASAAKAIAIAEQMgwCCyAAKAIAIQBBACECA0AgAiAEakH/AGogAEEPcSIDQTByIANB1wBqIANBCkkbOgAAIAJBAWshAiAAQQ9LIABBBHYhAA0ACyABQb++wABBAiACIARqQYABakEAIAJrECEMAQsgACgCACEAQQAhAgNAIAIgBGpB/wBqIABBD3EiA0EwciADQTdqIANBCkkbOgAAIAJBAWshAiAAQQ9LIABBBHYhAA0ACyABQb++wABBAiACIARqQYABakEAIAJrECELIARBgAFqJAAL/AECBH8BfiMAQSBrIgUkAAJAAkAgBEUNACABIAEgAmoiAksNACADIARqQQFrQQAgA2txrSACIAAoAgAiAUEBdCIGIAIgBksbIgJBCEEEQQEgBEGBCEkbIARBAUYbIgYgAiAGSxsiBq1+IglCIIhQRQ0AIAmnIghB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ACACQShqIANBEGopAgA3AwAgAiADKQIANwMYIAJBDGpB5JfAACACQRhqECcaIAJBCGogBCgCACIDNgIAIAIgAikCDCIFNwMAIAFBCGogAzYCACABIAU3AgALIABBoJ3AADYCBCAAIAE2AgAgAkEwaiQAC7IBAQZ/AkACQCAAQYQBSQ0AIADQbyYBEEAiASgCDCEFIAEoAhAhAiABQgA3AgwgASgCCCEDIAEoAgQhBCABQgQ3AgQgASgCACEGIAFBADYCACAAIAJJDQEgACACayIAIANPDQEgBCAAQQJ0aiAFNgIAIAEgAjYCECABIAA2AgwgASADNgIIIAEoAgQgASAENgIEIAEoAgAhACABIAY2AgAgAEUNACAAQQJ0QQQQrQELDwsAC9EDAgx/AX4jAEEgayIEJAAgBEEYaiIJEEAiBUEQaiIHKAIANgIAIARBEGoiCiAFQQhqIggpAgA3AwAgB0EANgIAIAhCADcCACAFKQIAIQwgBUKAgICAwAA3AgAgBCAMNwMIAn8jAEEgayIDJAACQAJAIARBCGoiACgCDCIBIAAoAggiAkYEQAJAIAAoAgAiAiABRgRA0G9BgAEgASABQYABTRsiBvwPASICQX9GDQQCQCAAKAIQIgtFBEAgACACNgIQDAELIAEgC2ogAkcNBQsgASAGaiICQf////8BSw0EIAMgAQR/IAMgAUECdDYCHCADIAAoAgQ2AhRBBAVBAAs2AhggA0EIakEEIAJBAnQgA0EUahBcIAMoAghBAUYNBCADKAIMIQYgACACNgIAIAAgBjYCBAwBCyABIAJPDQMLIAAgAUEBaiICNgIIIAAoAgQgAUECdGogAjYCAAwBCyABIAJPDQELIAAgACgCBCABQQJ0aigCADYCDCAAKAIQIANBIGokACABagwBCwALIAggCikDADcCACAHIAkoAgA2AgAgBSgCBCEDIAUoAgAhASAFIAQpAwg3AgAgAQRAIAMgAUECdEEEEK0BCyAEQSBqJAALuAEBA38gASgCDCECAkACQAJAAkACQAJAIAEoAgQOAgABAgsgAg0BQQEhA0EAIQFBASECDAMLIAJFDQELIAAgARAwDwsgASgCACICKAIEIgFBAEgNASACKAIAIQMgAUUEQEEBIQJBACEBDAELQZLWwAAtAAAaQQEhBCABQQEQogEiAkUNAQsgAQRA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AgQgJUECdGogDTgCACArICVBAWo2AggLIAogLEECdGohCiAnICxrIicNAAsLICpBEGokACAmKAIUIgpBhAFPBEAgChBWCyApIicgLUkNAAsLQYTWwAAoAgBBAWohJSAmKAIQIScLQYTWwAAgJTYCACAnEA0hCRBXIgggCSYBICYgCDYCJCAmKAIMIScgJigCECElIwBBIGsiKCQAICZBJGooAgAiCiUBEAohKSAoICU2AgQgKCApNgIAAkAgJSApRgRAEJsBIi0QkwEiKSUBICcgJRAIIQkQVyInIAkmASAtQYQBTwRAIC0QVgsgKUGEAU8EQCApEFYLIAolASAnJQFBABAJICdBhAFPBEAgJxBWCyAoQSBqJAAMAQsgKEEANgIIICggKEEEaiAoQQhqEH0ACyAmKAIIIgoEQCAmKAIMIApBAnRBBBCtAQsgJigCBCIKQYQBTwRAIAoQVgsgJkEwaiQAIAgMAgsQbwALICcgLkGMhsAAELABAAsiCCUBIAgQVguxAgEEfyMAQSBrIgQkACAEQQhqIQMjAEEgayICJAACQAJAAkACQAJAAkBBnNbAAC0AAA4CAAECC0Gc1sAAQQE6AAALIANBATYCAAwBC0Gd1sAALQAAIQFBndbAAEEBOgAAIAIgAToAByABQQFGDQEgA0EAOgAUIANBADYCAEGd1sAAQQA6AAALIAJBIGokAAwBCyACQgA3AhQgAkKBgICAwAA3AgwgAkG8m8AANgIIIAJBB2ogAkEIahB7AAtBktbAAC0AABpBKEEEEKIBIgFFBEBBBEEoEMYBAAsgAUG8h8AANgIAIAEgAykCADcCBCABIAApAgA3AhwgAUEMaiADQQhqKQIANwIAIAFBFGogA0EQaikCADcCACABQSRqIABBCGooAgA2AgAgBEEgaiQAIAEL+gECAn8BfiMAQRBrIgIkACACQQE7AQwgAiABNgIIIAIgADYCBCMAQRBrIgEkACACQQRqIgApAgAhBCABIAA2AgwgASAENwIEIwBBEGsiACQAIAFBBGoiASgCACICKAIMIQMCQAJAAkACQCACKAIEDgIAAQILIAMNAUEBIQJBACEDDAILIAMNACACKAIAIgIoAgQhAyACKAIAIQIMAQsgAEGAgICAeDYCACAAIAE2AgwgAEHcncAAIAEoAgQgASgCCCIALQAIIAAtAAkQ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OTg2MDAxMzBlMWNmNjJiOGY4YTkzNDk0NDg4Y2MvbGlicmFyeS9zdGQvc3JjL3N5cy9zeW5jL29uY2Uvbm9fdGhyZWFkcy5ycwAcBBAAWwAAADUAAAASAAAAc3BhcmstaW50ZXJuYWwtcnMvc3JjL3JheWNhc3QucnOIBBAAIAAAACoAAAAXAAAAiAQQACAAAAB4AAAAFwAAAIgEEAAgAAAAfgAAABwAAACIBBAAIAAAAIAAAAAcAAAAiAQQACAAAACFAAAAIAAAAC9ydXN0Yy82YjAwYmMzODgwMTk4NjAwMTMwZTFjZjYyYjhmOGE5MzQ5NDQ4OGNjL2xpYnJhcnkvYWxsb2Mvc3JjL3ZlYy9tb2QucnP4BBAATAAAAFYKAAAkAAAAAAAAABAAAAAEAAAAGQAAABoAAAAbAAAAICAgIDogAAABAAAAAAAAAHAFEAACAAAAAgBBjovAAAsBBQBBmIvAAAshIAAAqCAgICAgICAAHgAAAAwAAAAEAAAAHwAAACAAAAAhAEHEi8AAC7kOAQAAACIAAABhIERpc3BsYXkgaW1wbGVtZW50YXRpb24gcmV0dXJuZWQgYW4gZXJyb3IgdW5leHBlY3RlZGx5L3J1c3RjLzZiMDBiYzM4ODAxOTg2MDAxMzBlMWNmNjJiOGY4YTkzNDk0NDg4Y2MvbGlicmFyeS9hbGxvYy9zcmMvc3RyaW5nLnJzAAADBhAASwAAAPAKAAAOAAAARXJyb3Jhc3NlcnRpb24gZmFpbGVkOiBzZWxmLmlzX2NoYXJfYm91bmRhcnkobmV3X2xlbikAAAADBhAASwAAALUFAAANAAAAAAAAABAAAAAEAAAAGQAAABoAAAAbAAAAYmFja3RyYWNlIGNhcHR1cmUgZmFpbGVkL2hvbWUvcnVubmVyLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvYW55aG93LTEuMC45OC9zcmMvZXJyb3IucnPYBhAAXAAAAGcEAAAOAAAAAQAAAAAAAAA6IAAATAcQAAIAAAAKCkNhdXNlZCBieToKAAAAZAcQAAEAAAAKCnN0YWNrIGJhY2t0cmFjZTpTdGFjayBiYWNrdHJhY2U6CgCCBxAAEQAAAFMvcnVzdGMvNmIwMGJjMzg4MDE5ODYwMDEzMGUxY2Y2MmI4ZjhhOTM0OTQ0ODhjYy9saWJyYXJ5L2FsbG9jL3NyYy9yYXdfdmVjL21vZC5ycwAAAJ0HEABQAAAALgIAABEAAAAvcnVzdGMvNmIwMGJjMzg4MDE5ODYwMDEzMGUxY2Y2MmI4ZjhhOTM0OTQ0ODhjYy9saWJyYXJ5L2NvcmUvc3JjL3NsaWNlL2luZGV4LnJzAAAIEABPAAAATAMAADQAAAAACBAATwAAAFMDAAAyAAAAYXNzZXJ0aW9uIGZhaWxlZDogc2VsZi5pc19jaGFyX2JvdW5kYXJ5KG4pL3J1c3RjLzZiMDBiYzM4ODAxOTg2MDAxMzBlMWNmNjJiOGY4YTkzNDk0NDg4Y2MvbGlicmFyeS9hbGxvYy9zcmMvc3RyaW5nLnJzAAAAmggQAEsAAAAMCAAAHQAAAJoIEABLAAAAFAgAAB0AAAAjAAAADAAAAAQAAAAkAAAAJQAAACEAAAAvcnVzdGMvNmIwMGJjMzg4MDE5ODYwMDEzMGUxY2Y2MmI4ZjhhOTM0OTQ0ODhjYy9saWJyYXJ5L2NvcmUvc3JjL2l0ZXIvdHJhaXRzL2l0ZXJhdG9yLnJzIAkQAFgAAADRBwAACQAAAC9ob21lL3J1bm5lci8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL2pzLXN5cy0wLjMuNzcvc3JjL2xpYi5ycwAAiAkQAFoAAAD7GAAAAQAAAC9ob21lL3J1bm5lci8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3dhc20tYmluZGdlbi0wLjIuMTAwL3NyYy9jb252ZXJ0L3NsaWNlcy5yc/QJEABsAAAAJAEAAA4AAABjbG9zdXJlIGludm9rZWQgcmVjdXJzaXZlbHkgb3IgYWZ0ZXIgYmVpbmcgZHJvcHBlZExhenkgaW5zdGFuY2UgaGFzIHByZXZpb3VzbHkgYmVlbiBwb2lzb25lZKIKEAAqAAAAL2hvbWUvcnVubmVyLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2Yvb25jZV9jZWxsLTEuMjEuMy9zcmMvbGliLnJzAAAA1AoQAF0AAAAIAwAAGQAAAHJlZW50cmFudCBpbml0AABECxAADgAAANQKEABdAAAAegIAAA0AAAA6IAAAAAAAAAQAAAAEAAAANwAAAC9ydXN0Yy82YjAwYmMzODgwMTk4NjAwMTMwZTFjZjYyYjhmOGE5MzQ5NDQ4OGNjL2xpYnJhcnkvYWxsb2Mvc3JjL3Jhd192ZWMvbW9kLnJzgAsQAFAAAAAuAgAAEQAAADoAAAA4AAAADAAAAAQAAAA5AAAAOgAAADsAAAAvcnVzdC9kZXBzL2RsbWFsbG9jLTAuMi44L3NyYy9kbG1hbGxvYy5yc2Fzc2VydGlvbiBmYWlsZWQ6IHBzaXplID49IHNpemUgKyBtaW5fb3ZlcmhlYWQA/AsQACkAAACsBAAACQAAAGFzc2VydGlvbiBmYWlsZWQ6IHBzaXplIDw9IHNpemUgKyBtYXhfb3ZlcmhlYWQAAPwLEAApAAAAsgQAAA0AAABsaWJyYXJ5L3N0ZC9zcmMvc3luYy9sYXp5X2xvY2sucnMAAACkDBAAIQAAANEAAAATAAAAbGlicmFyeS9zdGQvc3JjL2JhY2t0cmFjZS5ycwIAAAAAAAAAAgBBiJrAAAvFBCAAgOBvcGVyYXRpb24gbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtDA0QACgAAAAkAAAAAgAAADQNEAB1bnN1cHBvcnRlZCBiYWNrdHJhY2VkaXNhYmxlZCBiYWNrdHJhY2UA2AwQABwAAACKAQAAHQAAADwAAAAQAAAABAAAAD0AAAA+AAAAAQAAAAAAAABjYW5ub3QgcmVjdXJzaXZlbHkgYWNxdWlyZSBtdXRleJwNEAAgAAAAbGlicmFyeS9zdGQvc3JjL3N5cy9zeW5jL211dGV4L25vX3RocmVhZHMucnPEDRAALAAAABMAAAAJAAAAbGlicmFyeS9zdGQvc3JjL3N5bmMvcG9pc29uL29uY2UucnMAAA4QACMAAACbAAAAMgAAADx1bmtub3duPu+/vW1lbW9yeSBhbGxvY2F0aW9uIG9mICBieXRlcyBmYWlsZWQAAEAOEAAVAAAAVQ4QAA0AAABsaWJyYXJ5L3N0ZC9zcmMvYWxsb2MucnN0DhAAGAAAAGQBAAAJAAAACgAAADgAAAAMAAAABAAAAD8AAAAAAAAACAAAAAQAAABAAAAA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bnRhdGlvbiByZXR1cm5lZCBhbiBlcnJvciB3aGVuIHRoZSB1bmRlcmx5aW5nIHN0cmVhbSBkaWQgbm90bGlicmFyeS9hbGxvYy9zcmMvZm10LnJzAACSGRAAGAAAAIoCAAAOAAAAAHAABwAtAQEBAgECAQFICzAVEAFlBwIGAgIBBCMBHhtbCzoJCQEYBAEJAQMBBSsDOwkqGAEgNwEBAQQIBAEDBwoCHQE6AQEBAgQIAQkBCgIaAQICOQEEAgQCAgMDAR4CAwELAjkBBAUBAgQBFAIWBgEBOgEBAgEECAEHAwoCHgE7AQEBDAEJASgBAwE3AQEDBQMBBAcCCwIdAToBAgIBAQMDAQQHAgsCHAI5AgEBAgQIAQkBCgIdAUgBBAECAwEBCAFRAQIHDAhiAQIJCwdJAhsBAQEBATcOAQUBAgULASQJAWYEAQYBAgICGQIEAxAEDQECAgYBDwEAAwAEHAMdAh4CQAIBBwgBAgsJAS0DAQF1AiIBdgMEAgkBBgPbAgIBOgEBBwEBAQECCAYKAgEwHzEEMAoEAyYJDAIgBAIGOAEBAgMBAQU4CAICmAMBDQEHBAEGAQMCxkAAAcMhAAONAWAgAAZpAgAEAQogAlACAAEDAQQBGQIFAZcCGhINASYIGQsBASwDMAECBAICAgEkAUMGAgICAgwBCAEvATMBAQMCAgUCAQEqAggB7gECAQQBAAEAEBAQAAIAAeIBlQUAAwECBQQoAwQBpQIABEEFAAJPBEYLMQR7ATYPKQECAgoDMQQCAgcBPQMkBQEIPgEMAjQJAQEIBAIBXwMCBAYBAgGdAQMIFQI5AgEBAQEMAQkBDgcDBUMBAgYBAQIBAQMEAwEBDgJVCAIDAQEXAVEBAgYBAQIBAQIBAusBAgQGAgECGwJVCAIBAQJqAQEBAghlAQEBAgQBBQAJAQL1AQoEBAGQBAICBAEgCigGAgQIAQkGAgMuDQECAAcBBgEBUhYCBwECAQJ6BgMBAQIBBwEBSAIDAQEBAAILAjQFBQMXAQABBg8ADAMDAAU7BwABPwRRAQsCAAIALgIXAAUDBggIAgceBJQDADcEMggBDgEWBQEPAAcBEQIHAQIBBWQBoAcAAT0EAAT+AgAHbQcAYIDwAAICAgICAgICAgMDAQEBAEHLucAACxABAAAAAAAAAAICAAAAAAACAEGKusAACwECAEGwusAACwEBAEHLusAACwEBAEGru8AAC7AHLi4wMTIzNDU2Nzg5YWJjZGVmAAAAAQAAAAAAAABCb3Jyb3dNdXRFcnJvcmFscmVhZHkgYm9ycm93ZWQ6INYdEAASAAAAW2NhbGxlZCBgT3B0aW9uOjp1bndyYXAoKWAgb24gYSBgTm9uZWAgdmFsdWVpbmRleCBvdXQgb2YgYm91bmRzOiB0aGUgbGVuIGlzICBidXQgdGhlIGluZGV4IGlzIAAAHB4QACAAAAA8HhAAEgAAAAAAAAAEAAAABAAAAGEAAAA9PSE9bWF0Y2hlc2Fzc2VydGlvbiBgbGVmdCAgcmlnaHRgIGZhaWxlZAogIGxlZnQ6IAogcmlnaHQ6IAB7HhAAEAAAAIseEAAXAAAAoh4QAAkAAAAgcmlnaHRgIGZhaWxlZDogCiAgbGVmdDogAAAAex4QABAAAADEHhAAEAAAANQeEAAJAAAAoh4QAAkAAAA6IAAAAQAAAAAAAAAAHxAAAgAAAAAAAAAMAAAABAAAAGIAAABjAAAAZAAAACAgICAgeyAsICB7CiwKfSB9Cl0weDAwMDEwMjAzMDQwNTA2MDcwODA5MTAxMTEyMTMxNDE1MTYxNzE4MTkyMDIxMjIyMzI0MjUyNjI3MjgyOTMwMzEzMjMzMzQzNTM2MzczODM5NDA0MTQyNDM0NDQ1NDY0NzQ4NDk1MDUxNTI1MzU0NTU1NjU3NTg1OTYwNjE2MjYzNjQ2NTY2Njc2ODY5NzA3MTcyNzM3NDc1NzY3Nzc4Nzk4MDgxODI4Mzg0ODU4Njg3ODg4OTkwOTE5MjkzOTQ5NTk2OTc5ODk5bGlicmFyeS9jb3JlL3NyYy9mbXQvbW9kLnJzZmFsc2V0cnVlAAAACSAQABsAAACZCgAAJgAAAAkgEAAbAAAAogoAABoAAABhdHRlbXB0ZWQgdG8gaW5kZXggc2xpY2UgZnJvbSBhZnRlciBtYXhpbXVtIHVzaXplAAAAUCAQADEAAABhdHRlbXB0ZWQgdG8gaW5kZXggc2xpY2UgdXAgdG8gbWF4aW11bSB1c2l6ZYwgEAAsAAAAbGlicmFyeS9jb3JlL3NyYy9zdHIvbW9kLnJzAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB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",self.location.href));const A=IB();(typeof B=="string"||typeof Request=="function"&&B instanceof Request||typeof URL=="function"&&B instanceof URL)&&(B=fetch(B));const{instance:I,module:g}=await AB(await B,A);return gB(I,g)}var Qg={},BB=function(B,A,I,g,Q){var C=new Worker(Qg[A]||(Qg[A]=URL.createObjectURL(new Blob([B+\';addEventListener("error",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})\'],{type:"text/javascript"}))));return C.onmessage=function(E){var t=E.data,i=t.$e$;if(i){var s=new Error(i[0]);s.code=i[1],s.stack=i[2],Q(s,null)}else Q(null,t)},C.postMessage(I,g),C},V=Uint8Array,dA=Uint16Array,Cg=Int32Array,fI=new V([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),kI=new V([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Eg=new V([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),tg=function(B,A){for(var I=new dA(31),g=0;g<31;++g)I[g]=A+=1<<B[g-1];for(var Q=new Cg(I[30]),g=1;g<30;++g)for(var C=I[g];C<I[g+1];++C)Q[C]=C-I[g]<<5|g;return{b:I,r:Q}},ig=tg(fI,2),RI=ig.b,QB=ig.r;RI[28]=258,QB[258]=28;for(var CB=tg(kI,0),sg=CB.b,EI=new dA(32768),_=0;_<32768;++_){var kA=(_&43690)>>1|(_&21845)<<1;kA=(kA&52428)>>2|(kA&13107)<<2,kA=(kA&61680)>>4|(kA&3855)<<4,EI[_]=((kA&65280)>>8|(kA&255)<<8)>>1}for(var qA=function(B,A,I){for(var g=B.length,Q=0,C=new dA(A);Q<g;++Q)B[Q]&&++C[B[Q]-1];var E=new dA(A);for(Q=1;Q<A;++Q)E[Q]=E[Q-1]+C[Q-1]<<1;var t;if(I){t=new dA(1<<A);var i=15-A;for(Q=0;Q<g;++Q)if(B[Q])for(var s=Q<<4|B[Q],e=A-B[Q],n=E[B[Q]-1]++<<e,a=n|(1<<e)-1;n<=a;++n)t[EI[n]>>i]=s}else for(t=new dA(g),Q=0;Q<g;++Q)B[Q]&&(t[Q]=EI[E[B[Q]-1]++]>>15-B[Q]);return t},OA=new V(288),_=0;_<144;++_)OA[_]=8;for(var _=144;_<256;++_)OA[_]=9;for(var _=256;_<280;++_)OA[_]=7;for(var _=280;_<288;++_)OA[_]=8;for(var eg=new V(32),_=0;_<32;++_)eg[_]=5;var ng=qA(OA,9,1),og=qA(eg,5,1),tI=function(B){for(var A=B[0],I=1;I<B.length;++I)B[I]>A&&(A=B[I]);return A},oA=function(B,A,I){var g=A/8|0;return(B[g]|B[g+1]<<8)>>(A&7)&I},iI=function(B,A){var I=A/8|0;return(B[I]|B[I+1]<<8|B[I+2]<<16)>>(A&7)},UI=function(B){return(B+7)/8|0},RA=function(B,A,I){return(A==null||A<0)&&(A=0),(I==null||I>B.length)&&(I=B.length),new V(B.subarray(A,I))},ag=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],P=function(B,A,I){var g=new Error(A||ag[B]);if(g.code=B,Error.captureStackTrace&&Error.captureStackTrace(g,P),!I)throw g;return g},mI=function(B,A,I,g){var Q=B.length,C=g?g.length:0;if(!Q||A.f&&!A.l)return I||new V(0);var E=!I,t=E||A.i!=2,i=A.i;E&&(I=new V(Q*3));var s=function(EA){var sA=I.length;if(EA>sA){var eA=new V(Math.max(sA*2,EA));eA.set(I),I=eA}},e=A.f||0,n=A.p||0,a=A.b||0,o=A.l,r=A.d,D=A.m,c=A.n,h=Q*8;do{if(!o){e=oA(B,n,1);var w=oA(B,n+1,3);if(n+=3,w)if(w==1)o=ng,r=og,D=9,c=5;else if(w==2){var k=oA(B,n,31)+257,p=oA(B,n+10,15)+4,F=k+oA(B,n+5,31)+1;n+=14;for(var N=new V(F),x=new V(19),S=0;S<p;++S)x[Eg[S]]=oA(B,n+S*3,7);n+=p*3;for(var M=tI(x),u=(1<<M)-1,K=qA(x,M,1),S=0;S<F;){var J=K[oA(B,n,u)];n+=J&15;var y=J>>4;if(y<16)N[S++]=y;else{var U=0,z=0;for(y==16?(z=3+oA(B,n,3),n+=2,U=N[S-1]):y==17?(z=3+oA(B,n,7),n+=3):y==18&&(z=11+oA(B,n,127),n+=7);z--;)N[S++]=U}}var v=N.subarray(0,k),T=N.subarray(k);D=tI(v),c=tI(T),o=qA(v,D,1),r=qA(T,c,1)}else P(1);else{var y=UI(n)+4,l=B[y-4]|B[y-3]<<8,G=y+l;if(G>Q){i&&P(0);break}t&&s(a+l),I.set(B.subarray(y,G),a),A.b=a+=l,A.p=n=G*8,A.f=e;continue}if(n>h){i&&P(0);break}}t&&s(a+131072);for(var j=(1<<D)-1,X=(1<<c)-1,W=n;;W=n){var U=o[iI(B,n)&j],b=U>>4;if(n+=U&15,n>h){i&&P(0);break}if(U||P(2),b<256)I[a++]=b;else if(b==256){W=n,o=null;break}else{var Z=b-254;if(b>264){var S=b-257,d=fI[S];Z=oA(B,n,(1<<d)-1)+RI[S],n+=d}var L=r[iI(B,n)&X],f=L>>4;L||P(3),n+=L&15;var T=sg[f];if(f>3){var d=kI[f];T+=iI(B,n)&(1<<d)-1,n+=d}if(n>h){i&&P(0);break}t&&s(a+131072);var BA=a+Z;if(a<T){var QA=C-T,iA=Math.min(T,BA);for(QA+a<0&&P(3);a<iA;++a)I[a]=g[QA+a]}for(;a<BA;++a)I[a]=I[a-T]}}A.l=o,A.p=W,A.b=a,A.f=e,o&&(e=1,A.m=D,A.d=r,A.n=c)}while(!e);return a!=I.length&&E?RA(I,0,a):I.subarray(0,a)},EB=new V(0),tB=function(B,A){var I={};for(var g in B)I[g]=B[g];for(var g in A)I[g]=A[g];return I},rg=function(B,A,I){for(var g=B(),Q=B.toString(),C=Q.slice(Q.indexOf("[")+1,Q.lastIndexOf("]")).replace(/\\s+/g,"").split(","),E=0;E<g.length;++E){var t=g[E],i=C[E];if(typeof t=="function"){A+=";"+i+"=";var s=t.toString();if(t.prototype)if(s.indexOf("[native code]")!=-1){var e=s.indexOf(" ",8)+1;A+=s.slice(e,s.indexOf("(",e))}else{A+=s;for(var n in t.prototype)A+=";"+i+".prototype."+n+"="+t.prototype[n].toString()}else A+=s}else I[i]=t}return A},sI=[],iB=function(B){var A=[];for(var I in B)B[I].buffer&&A.push((B[I]=new B[I].constructor(B[I])).buffer);return A},sB=function(B,A,I,g){if(!sI[I]){for(var Q="",C={},E=B.length-1,t=0;t<E;++t)Q=rg(B[t],Q,C);sI[I]={c:rg(B[E],Q,C),e:C}}var i=tB({},sI[I].e);return BB(sI[I].c+";onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage="+A.toString()+"}",I,i,iB(i),g)},eB=function(){return[V,dA,Cg,fI,kI,Eg,RI,sg,ng,og,EI,ag,qA,tI,oA,iI,UI,RA,P,mI,eI,hg,cg]},hg=function(B){return postMessage(B,[B.buffer])},cg=function(B){return B&&{out:B.size&&new V(B.size),dictionary:B.dictionary}},nB=function(B,A,I,g,Q,C){var E=sB(I,g,Q,function(t,i){E.terminate(),C(t,i)});return E.postMessage([B,A],A.consume?[B.buffer]:[]),function(){E.terminate()}},DA=function(B,A){return B[A]|B[A+1]<<8},IA=function(B,A){return(B[A]|B[A+1]<<8|B[A+2]<<16|B[A+3]<<24)>>>0},xI=function(B,A){return IA(B,A)+IA(B,A+4)*4294967296},oB=function(B){(B[0]!=31||B[1]!=139||B[2]!=8)&&P(6,"invalid gzip data");var A=B[3],I=10;A&4&&(I+=(B[10]|B[11]<<8)+2);for(var g=(A>>3&1)+(A>>4&1);g>0;g-=!B[I++]);return I+(A&2)},YI=function(){function B(A,I){typeof A=="function"&&(I=A,A={}),this.ondata=I;var g=A&&A.dictionary&&A.dictionary.subarray(-32768);this.s={i:0,b:g?g.length:0},this.o=new V(32768),this.p=new V(0),g&&this.o.set(g)}return B.prototype.e=function(A){if(this.ondata||P(5),this.d&&P(4),!this.p.length)this.p=A;else if(A.length){var I=new V(this.p.length+A.length);I.set(this.p),I.set(A,this.p.length),this.p=I}},B.prototype.c=function(A){this.s.i=+(this.d=A||!1);var I=this.s.b,g=mI(this.p,this.s,this.o);this.ondata(RA(g,I,this.s.b),this.d),this.o=RA(g,this.s.b-32768),this.s.b=this.o.length,this.p=RA(this.p,this.s.p/8|0),this.s.p&=7},B.prototype.push=function(A,I){this.e(A),this.c(I)},B}();function aB(B,A,I){return I||(I=A,A={}),typeof I!="function"&&P(7),nB(B,A,[eB],function(g){return hg(eI(g.data[0],cg(g.data[1])))},1,I)}function eI(B,A){return mI(B,{i:2},A&&A.out,A&&A.dictionary)}var Dg=function(){function B(A,I){this.v=1,this.r=0,YI.call(this,A,I)}return B.prototype.push=function(A,I){if(YI.prototype.e.call(this,A),this.r+=A.length,this.v){var g=this.p.subarray(this.v-1),Q=g.length>3?oB(g):4;if(Q>g.length){if(!I)return}else this.v>1&&this.onmember&&this.onmember(this.r-g.length);this.p=g.subarray(Q),this.v=0}YI.prototype.c.call(this,I),this.s.f&&!this.s.l&&!I&&(this.v=UI(this.s.p)+9,this.s={i:0},this.o=new V(0),this.push(new V(0),I))},B}(),JI=typeof TextDecoder<"u"&&new TextDecoder;try{JI.decode(EB,{stream:!0})}catch{}var rB=function(B){for(var A="",I=0;;){var g=B[I++],Q=(g>127)+(g>223)+(g>239);if(I+Q>B.length)return{s:A,r:RA(B,I-1)};Q?Q==3?(g=((g&15)<<18|(B[I++]&63)<<12|(B[I++]&63)<<6|B[I++]&63)-65536,A+=String.fromCharCode(55296|g>>10,56320|g&1023)):Q&1?A+=String.fromCharCode((g&31)<<6|B[I++]&63):A+=String.fromCharCode((g&15)<<12|(B[I++]&63)<<6|B[I++]&63):A+=String.fromCharCode(g)}};function hB(B,A){if(A){for(var I="",g=0;g<B.length;g+=16384)I+=String.fromCharCode.apply(null,B.subarray(g,g+16384));return I}else{if(JI)return JI.decode(B);var Q=rB(B),C=Q.s,I=Q.r;return I.length&&P(8),C}}var wg=function(B,A){return A+30+DA(B,A+26)+DA(B,A+28)},yg=function(B,A,I){var g=DA(B,A+28),Q=hB(B.subarray(A+46,A+46+g),!(DA(B,A+8)&2048)),C=A+46+g,E=IA(B,A+20),t=I&&E==4294967295?cB(B,C):[E,IA(B,A+24),IA(B,A+42)],i=t[0],s=t[1],e=t[2];return[DA(B,A+10),i,s,Q,C+DA(B,A+30)+DA(B,A+32),e]},cB=function(B,A){for(;DA(B,A)!=1;A+=4+DA(B,A+2));return[xI(B,A+12),xI(B,A+4),xI(B,A+20)]},lg=typeof queueMicrotask=="function"?queueMicrotask:typeof setTimeout=="function"?setTimeout:function(B){B()};function DB(B,A,I){I||(I=A,A={}),typeof I!="function"&&P(7);var g=[],Q=function(){for(var c=0;c<g.length;++c)g[c]()},C={},E=function(c,h){lg(function(){I(c,h)})};lg(function(){E=I});for(var t=B.length-22;IA(B,t)!=101010256;--t)if(!t||B.length-t>65558)return E(P(13,0,1),null),Q;var i=DA(B,t+8);if(i){var s=i,e=IA(B,t+16),n=e==4294967295||s==65535;if(n){var a=IA(B,t-12);n=IA(B,a)==101075792,n&&(s=i=IA(B,a+32),e=IA(B,a+48))}for(var o=A&&A.filter,r=function(c){var h=yg(B,e,n),w=h[0],y=h[1],l=h[2],G=h[3],k=h[4],p=h[5],F=wg(B,p);e=k;var N=function(S,M){S?(Q(),E(S,null)):(M&&(C[G]=M),--i||E(null,C))};if(!o||o({name:G,size:y,originalSize:l,compression:w}))if(!w)N(null,RA(B,F,F+y));else if(w==8){var x=B.subarray(F,F+y);if(l<524288||y>.8*l)try{N(null,eI(x,{out:new V(l)}))}catch(S){N(S,null)}else g.push(aB(x,{size:l},N))}else N(P(14,"unknown compression type "+w,1),null);else N(null,null)},D=0;D<s;++D)r(D)}else E(null,{});return Q}function wB(B,A){for(var I={},g=B.length-22;IA(B,g)!=101010256;--g)(!g||B.length-g>65558)&&P(13);var Q=DA(B,g+8);if(!Q)return{};var C=IA(B,g+16),E=C==4294967295||Q==65535;if(E){var t=IA(B,g-12);E=IA(B,t)==101075792,E&&(Q=IA(B,t+32),C=IA(B,t+48))}for(var i=A&&A.filter,s=0;s<Q;++s){var e=yg(B,C,E),n=e[0],a=e[1],o=e[2],r=e[3],D=e[4],c=e[5],h=wg(B,c);C=D,(!i||i({name:r,size:a,originalSize:o,compression:n}))&&(n?n==8?I[r]=eI(B.subarray(h,h+a),{out:new V(o)}):P(14,"unknown compression type "+n):I[r]=RA(B,h,h+a))}return I}/**\n * @license\n * Copyright 2010-2024 Three.js Authors\n * SPDX-License-Identifier: MIT\n */const Mg="172",yB="",wA="srgb",Ng="srgb-linear",Fg="linear",LI="srgb";function tA(B,A,I){return Math.max(A,Math.min(I,B))}function lB(B,A){return(B%A+A)%A}function pI(B,A,I){return(1-I)*B+I*A}class $A{constructor(A,I,g,Q,C,E,t,i,s){$A.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],A!==void 0&&this.set(A,I,g,Q,C,E,t,i,s)}set(A,I,g,Q,C,E,t,i,s){const e=this.elements;return e[0]=A,e[1]=Q,e[2]=t,e[3]=I,e[4]=C,e[5]=i,e[6]=g,e[7]=E,e[8]=s,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(A){const I=this.elements,g=A.elements;return I[0]=g[0],I[1]=g[1],I[2]=g[2],I[3]=g[3],I[4]=g[4],I[5]=g[5],I[6]=g[6],I[7]=g[7],I[8]=g[8],this}extractBasis(A,I,g){return A.setFromMatrix3Column(this,0),I.setFromMatrix3Column(this,1),g.setFromMatrix3Column(this,2),this}setFromMatrix4(A){const I=A.elements;return this.set(I[0],I[4],I[8],I[1],I[5],I[9],I[2],I[6],I[10]),this}multiply(A){return this.multiplyMatrices(this,A)}premultiply(A){return this.multiplyMatrices(A,this)}multiplyMatrices(A,I){const g=A.elements,Q=I.elements,C=this.elements,E=g[0],t=g[3],i=g[6],s=g[1],e=g[4],n=g[7],a=g[2],o=g[5],r=g[8],D=Q[0],c=Q[3],h=Q[6],w=Q[1],y=Q[4],l=Q[7],G=Q[2],k=Q[5],p=Q[8];return C[0]=E*D+t*w+i*G,C[3]=E*c+t*y+i*k,C[6]=E*h+t*l+i*p,C[1]=s*D+e*w+n*G,C[4]=s*c+e*y+n*k,C[7]=s*h+e*l+n*p,C[2]=a*D+o*w+r*G,C[5]=a*c+o*y+r*k,C[8]=a*h+o*l+r*p,this}multiplyScalar(A){const I=this.elements;return I[0]*=A,I[3]*=A,I[6]*=A,I[1]*=A,I[4]*=A,I[7]*=A,I[2]*=A,I[5]*=A,I[8]*=A,this}determinant(){const A=this.elements,I=A[0],g=A[1],Q=A[2],C=A[3],E=A[4],t=A[5],i=A[6],s=A[7],e=A[8];return I*E*e-I*t*s-g*C*e+g*t*i+Q*C*s-Q*E*i}invert(){const A=this.elements,I=A[0],g=A[1],Q=A[2],C=A[3],E=A[4],t=A[5],i=A[6],s=A[7],e=A[8],n=e*E-t*s,a=t*i-e*C,o=s*C-E*i,r=I*n+g*a+Q*o;if(r===0)return this.set(0,0,0,0,0,0,0,0,0);const D=1/r;return A[0]=n*D,A[1]=(Q*s-e*g)*D,A[2]=(t*g-Q*E)*D,A[3]=a*D,A[4]=(e*I-Q*i)*D,A[5]=(Q*C-t*I)*D,A[6]=o*D,A[7]=(g*i-s*I)*D,A[8]=(E*I-g*C)*D,this}transpose(){let A;const I=this.elements;return A=I[1],I[1]=I[3],I[3]=A,A=I[2],I[2]=I[6],I[6]=A,A=I[5],I[5]=I[7],I[7]=A,this}getNormalMatrix(A){return this.setFromMatrix4(A).invert().transpose()}transposeIntoArray(A){const I=this.elements;return A[0]=I[0],A[1]=I[3],A[2]=I[6],A[3]=I[1],A[4]=I[4],A[5]=I[7],A[6]=I[2],A[7]=I[5],A[8]=I[8],this}setUvTransform(A,I,g,Q,C,E,t){const i=Math.cos(C),s=Math.sin(C);return this.set(g*i,g*s,-g*(i*E+s*t)+E+A,-Q*s,Q*i,-Q*(-s*E+i*t)+t+I,0,0,1),this}scale(A,I){return this.premultiply(dI.makeScale(A,I)),this}rotate(A){return this.premultiply(dI.makeRotation(-A)),this}translate(A,I){return this.premultiply(dI.makeTranslation(A,I)),this}makeTranslation(A,I){return A.isVector2?this.set(1,0,A.x,0,1,A.y,0,0,1):this.set(1,0,A,0,1,I,0,0,1),this}makeRotation(A){const I=Math.cos(A),g=Math.sin(A);return this.set(I,-g,0,g,I,0,0,0,1),this}makeScale(A,I){return this.set(A,0,0,0,I,0,0,0,1),this}equals(A){const I=this.elements,g=A.elements;for(let Q=0;Q<9;Q++)if(I[Q]!==g[Q])return!1;return!0}fromArray(A,I=0){for(let g=0;g<9;g++)this.elements[g]=A[g+I];return this}toArray(A=[],I=0){const g=this.elements;return A[I]=g[0],A[I+1]=g[1],A[I+2]=g[2],A[I+3]=g[3],A[I+4]=g[4],A[I+5]=g[5],A[I+6]=g[6],A[I+7]=g[7],A[I+8]=g[8],A}clone(){return new this.constructor().fromArray(this.elements)}}const dI=new $A,Gg=new $A().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),Sg=new $A().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function MB(){const B={enabled:!0,workingColorSpace:Ng,spaces:{},convert:function(Q,C,E){return this.enabled===!1||C===E||!C||!E||(this.spaces[C].transfer===LI&&(Q.r=zA(Q.r),Q.g=zA(Q.g),Q.b=zA(Q.b)),this.spaces[C].primaries!==this.spaces[E].primaries&&(Q.applyMatrix3(this.spaces[C].toXYZ),Q.applyMatrix3(this.spaces[E].fromXYZ)),this.spaces[E].transfer===LI&&(Q.r=TA(Q.r),Q.g=TA(Q.g),Q.b=TA(Q.b))),Q},fromWorkingColorSpace:function(Q,C){return this.convert(Q,this.workingColorSpace,C)},toWorkingColorSpace:function(Q,C){return this.convert(Q,C,this.workingColorSpace)},getPrimaries:function(Q){return this.spaces[Q].primaries},getTransfer:function(Q){return Q===yB?Fg:this.spaces[Q].transfer},getLuminanceCoefficients:function(Q,C=this.workingColorSpace){return Q.fromArray(this.spaces[C].luminanceCoefficients)},define:function(Q){Object.assign(this.spaces,Q)},_getMatrix:function(Q,C,E){return Q.copy(this.spaces[C].toXYZ).multiply(this.spaces[E].fromXYZ)},_getDrawingBufferColorSpace:function(Q){return this.spaces[Q].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(Q=this.workingColorSpace){return this.spaces[Q].workingColorSpaceConfig.unpackColorSpace}},A=[.64,.33,.3,.6,.15,.06],I=[.2126,.7152,.0722],g=[.3127,.329];return B.define({[Ng]:{primaries:A,whitePoint:g,transfer:Fg,toXYZ:Gg,fromXYZ:Sg,luminanceCoefficients:I,workingColorSpaceConfig:{unpackColorSpace:wA},outputColorSpaceConfig:{drawingBufferColorSpace:wA}},[wA]:{primaries:A,whitePoint:g,transfer:LI,toXYZ:Gg,fromXYZ:Sg,luminanceCoefficients:I,outputColorSpaceConfig:{drawingBufferColorSpace:wA}}}),B}const yA=MB();function zA(B){return B<.04045?B*.0773993808:Math.pow(B*.9478672986+.0521327014,2.4)}function TA(B){return B<.0031308?B*12.92:1.055*Math.pow(B,.41666)-.055}class UA{constructor(A=0,I=0,g=0,Q=1){this.isQuaternion=!0,this._x=A,this._y=I,this._z=g,this._w=Q}static slerpFlat(A,I,g,Q,C,E,t){let i=g[Q+0],s=g[Q+1],e=g[Q+2],n=g[Q+3];const a=C[E+0],o=C[E+1],r=C[E+2],D=C[E+3];if(t===0){A[I+0]=i,A[I+1]=s,A[I+2]=e,A[I+3]=n;return}if(t===1){A[I+0]=a,A[I+1]=o,A[I+2]=r,A[I+3]=D;return}if(n!==D||i!==a||s!==o||e!==r){let c=1-t;const h=i*a+s*o+e*r+n*D,w=h>=0?1:-1,y=1-h*h;if(y>Number.EPSILON){const G=Math.sqrt(y),k=Math.atan2(G,h*w);c=Math.sin(c*k)/G,t=Math.sin(t*k)/G}const l=t*w;if(i=i*c+a*l,s=s*c+o*l,e=e*c+r*l,n=n*c+D*l,c===1-t){const G=1/Math.sqrt(i*i+s*s+e*e+n*n);i*=G,s*=G,e*=G,n*=G}}A[I]=i,A[I+1]=s,A[I+2]=e,A[I+3]=n}static multiplyQuaternionsFlat(A,I,g,Q,C,E){const t=g[Q],i=g[Q+1],s=g[Q+2],e=g[Q+3],n=C[E],a=C[E+1],o=C[E+2],r=C[E+3];return A[I]=t*r+e*n+i*o-s*a,A[I+1]=i*r+e*a+s*n-t*o,A[I+2]=s*r+e*o+t*a-i*n,A[I+3]=e*r-t*n-i*a-s*o,A}get x(){return this._x}set x(A){this._x=A,this._onChangeCallback()}get y(){return this._y}set y(A){this._y=A,this._onChangeCallback()}get z(){return this._z}set z(A){this._z=A,this._onChangeCallback()}get w(){return this._w}set w(A){this._w=A,this._onChangeCallback()}set(A,I,g,Q){return this._x=A,this._y=I,this._z=g,this._w=Q,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(A){return this._x=A.x,this._y=A.y,this._z=A.z,this._w=A.w,this._onChangeCallback(),this}setFromEuler(A,I=!0){const g=A._x,Q=A._y,C=A._z,E=A._order,t=Math.cos,i=Math.sin,s=t(g/2),e=t(Q/2),n=t(C/2),a=i(g/2),o=i(Q/2),r=i(C/2);switch(E){case"XYZ":this._x=a*e*n+s*o*r,this._y=s*o*n-a*e*r,this._z=s*e*r+a*o*n,this._w=s*e*n-a*o*r;break;case"YXZ":this._x=a*e*n+s*o*r,this._y=s*o*n-a*e*r,this._z=s*e*r-a*o*n,this._w=s*e*n+a*o*r;break;case"ZXY":this._x=a*e*n-s*o*r,this._y=s*o*n+a*e*r,this._z=s*e*r+a*o*n,this._w=s*e*n-a*o*r;break;case"ZYX":this._x=a*e*n-s*o*r,this._y=s*o*n+a*e*r,this._z=s*e*r-a*o*n,this._w=s*e*n+a*o*r;break;case"YZX":this._x=a*e*n+s*o*r,this._y=s*o*n+a*e*r,this._z=s*e*r-a*o*n,this._w=s*e*n-a*o*r;break;case"XZY":this._x=a*e*n-s*o*r,this._y=s*o*n-a*e*r,this._z=s*e*r+a*o*n,this._w=s*e*n+a*o*r;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+E)}return I===!0&&this._onChangeCallback(),this}setFromAxisAngle(A,I){const g=I/2,Q=Math.sin(g);return this._x=A.x*Q,this._y=A.y*Q,this._z=A.z*Q,this._w=Math.cos(g),this._onChangeCallback(),this}setFromRotationMatrix(A){const I=A.elements,g=I[0],Q=I[4],C=I[8],E=I[1],t=I[5],i=I[9],s=I[2],e=I[6],n=I[10],a=g+t+n;if(a>0){const o=.5/Math.sqrt(a+1);this._w=.25/o,this._x=(e-i)*o,this._y=(C-s)*o,this._z=(E-Q)*o}else if(g>t&&g>n){const o=2*Math.sqrt(1+g-t-n);this._w=(e-i)/o,this._x=.25*o,this._y=(Q+E)/o,this._z=(C+s)/o}else if(t>n){const o=2*Math.sqrt(1+t-g-n);this._w=(C-s)/o,this._x=(Q+E)/o,this._y=.25*o,this._z=(i+e)/o}else{const o=2*Math.sqrt(1+n-g-t);this._w=(E-Q)/o,this._x=(C+s)/o,this._y=(i+e)/o,this._z=.25*o}return this._onChangeCallback(),this}setFromUnitVectors(A,I){let g=A.dot(I)+1;return g<Number.EPSILON?(g=0,Math.abs(A.x)>Math.abs(A.z)?(this._x=-A.y,this._y=A.x,this._z=0,this._w=g):(this._x=0,this._y=-A.z,this._z=A.y,this._w=g)):(this._x=A.y*I.z-A.z*I.y,this._y=A.z*I.x-A.x*I.z,this._z=A.x*I.y-A.y*I.x,this._w=g),this.normalize()}angleTo(A){return 2*Math.acos(Math.abs(tA(this.dot(A),-1,1)))}rotateTowards(A,I){const g=this.angleTo(A);if(g===0)return this;const Q=Math.min(1,I/g);return this.slerp(A,Q),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(A){return this._x*A._x+this._y*A._y+this._z*A._z+this._w*A._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let A=this.length();return A===0?(this._x=0,this._y=0,this._z=0,this._w=1):(A=1/A,this._x=this._x*A,this._y=this._y*A,this._z=this._z*A,this._w=this._w*A),this._onChangeCallback(),this}multiply(A){return this.multiplyQuaternions(this,A)}premultiply(A){return this.multiplyQuaternions(A,this)}multiplyQuaternions(A,I){const g=A._x,Q=A._y,C=A._z,E=A._w,t=I._x,i=I._y,s=I._z,e=I._w;return this._x=g*e+E*t+Q*s-C*i,this._y=Q*e+E*i+C*t-g*s,this._z=C*e+E*s+g*i-Q*t,this._w=E*e-g*t-Q*i-C*s,this._onChangeCallback(),this}slerp(A,I){if(I===0)return this;if(I===1)return this.copy(A);const g=this._x,Q=this._y,C=this._z,E=this._w;let t=E*A._w+g*A._x+Q*A._y+C*A._z;if(t<0?(this._w=-A._w,this._x=-A._x,this._y=-A._y,this._z=-A._z,t=-t):this.copy(A),t>=1)return this._w=E,this._x=g,this._y=Q,this._z=C,this;const i=1-t*t;if(i<=Number.EPSILON){const o=1-I;return this._w=o*E+I*this._w,this._x=o*g+I*this._x,this._y=o*Q+I*this._y,this._z=o*C+I*this._z,this.normalize(),this}const s=Math.sqrt(i),e=Math.atan2(s,t),n=Math.sin((1-I)*e)/s,a=Math.sin(I*e)/s;return this._w=E*n+this._w*a,this._x=g*n+this._x*a,this._y=Q*n+this._y*a,this._z=C*n+this._z*a,this._onChangeCallback(),this}slerpQuaternions(A,I,g){return this.copy(A).slerp(I,g)}random(){const A=2*Math.PI*Math.random(),I=2*Math.PI*Math.random(),g=Math.random(),Q=Math.sqrt(1-g),C=Math.sqrt(g);return this.set(Q*Math.sin(A),Q*Math.cos(A),C*Math.sin(I),C*Math.cos(I))}equals(A){return A._x===this._x&&A._y===this._y&&A._z===this._z&&A._w===this._w}fromArray(A,I=0){return this._x=A[I],this._y=A[I+1],this._z=A[I+2],this._w=A[I+3],this._onChangeCallback(),this}toArray(A=[],I=0){return A[I]=this._x,A[I+1]=this._y,A[I+2]=this._z,A[I+3]=this._w,A}fromBufferAttribute(A,I){return this._x=A.getX(I),this._y=A.getY(I),this._z=A.getZ(I),this._w=A.getW(I),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(A){return this._onChangeCallback=A,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}class R{constructor(A=0,I=0,g=0){R.prototype.isVector3=!0,this.x=A,this.y=I,this.z=g}set(A,I,g){return g===void 0&&(g=this.z),this.x=A,this.y=I,this.z=g,this}setScalar(A){return this.x=A,this.y=A,this.z=A,this}setX(A){return this.x=A,this}setY(A){return this.y=A,this}setZ(A){return this.z=A,this}setComponent(A,I){switch(A){case 0:this.x=I;break;case 1:this.y=I;break;case 2:this.z=I;break;default:throw new Error("index is out of range: "+A)}return this}getComponent(A){switch(A){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+A)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(A){return this.x=A.x,this.y=A.y,this.z=A.z,this}add(A){return this.x+=A.x,this.y+=A.y,this.z+=A.z,this}addScalar(A){return this.x+=A,this.y+=A,this.z+=A,this}addVectors(A,I){return this.x=A.x+I.x,this.y=A.y+I.y,this.z=A.z+I.z,this}addScaledVector(A,I){return this.x+=A.x*I,this.y+=A.y*I,this.z+=A.z*I,this}sub(A){return this.x-=A.x,this.y-=A.y,this.z-=A.z,this}subScalar(A){return this.x-=A,this.y-=A,this.z-=A,this}subVectors(A,I){return this.x=A.x-I.x,this.y=A.y-I.y,this.z=A.z-I.z,this}multiply(A){return this.x*=A.x,this.y*=A.y,this.z*=A.z,this}multiplyScalar(A){return this.x*=A,this.y*=A,this.z*=A,this}multiplyVectors(A,I){return this.x=A.x*I.x,this.y=A.y*I.y,this.z=A.z*I.z,this}applyEuler(A){return this.applyQuaternion(ug.setFromEuler(A))}applyAxisAngle(A,I){return this.applyQuaternion(ug.setFromAxisAngle(A,I))}applyMatrix3(A){const I=this.x,g=this.y,Q=this.z,C=A.elements;return this.x=C[0]*I+C[3]*g+C[6]*Q,this.y=C[1]*I+C[4]*g+C[7]*Q,this.z=C[2]*I+C[5]*g+C[8]*Q,this}applyNormalMatrix(A){return this.applyMatrix3(A).normalize()}applyMatrix4(A){const I=this.x,g=this.y,Q=this.z,C=A.elements,E=1/(C[3]*I+C[7]*g+C[11]*Q+C[15]);return this.x=(C[0]*I+C[4]*g+C[8]*Q+C[12])*E,this.y=(C[1]*I+C[5]*g+C[9]*Q+C[13])*E,this.z=(C[2]*I+C[6]*g+C[10]*Q+C[14])*E,this}applyQuaternion(A){const I=this.x,g=this.y,Q=this.z,C=A.x,E=A.y,t=A.z,i=A.w,s=2*(E*Q-t*g),e=2*(t*I-C*Q),n=2*(C*g-E*I);return this.x=I+i*s+E*n-t*e,this.y=g+i*e+t*s-C*n,this.z=Q+i*n+C*e-E*s,this}project(A){return this.applyMatrix4(A.matrixWorldInverse).applyMatrix4(A.projectionMatrix)}unproject(A){return this.applyMatrix4(A.projectionMatrixInverse).applyMatrix4(A.matrixWorld)}transformDirection(A){const I=this.x,g=this.y,Q=this.z,C=A.elements;return this.x=C[0]*I+C[4]*g+C[8]*Q,this.y=C[1]*I+C[5]*g+C[9]*Q,this.z=C[2]*I+C[6]*g+C[10]*Q,this.normalize()}divide(A){return this.x/=A.x,this.y/=A.y,this.z/=A.z,this}divideScalar(A){return this.multiplyScalar(1/A)}min(A){return this.x=Math.min(this.x,A.x),this.y=Math.min(this.y,A.y),this.z=Math.min(this.z,A.z),this}max(A){return this.x=Math.max(this.x,A.x),this.y=Math.max(this.y,A.y),this.z=Math.max(this.z,A.z),this}clamp(A,I){return this.x=tA(this.x,A.x,I.x),this.y=tA(this.y,A.y,I.y),this.z=tA(this.z,A.z,I.z),this}clampScalar(A,I){return this.x=tA(this.x,A,I),this.y=tA(this.y,A,I),this.z=tA(this.z,A,I),this}clampLength(A,I){const g=this.length();return this.divideScalar(g||1).multiplyScalar(tA(g,A,I))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(A){return this.x*A.x+this.y*A.y+this.z*A.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(A){return this.normalize().multiplyScalar(A)}lerp(A,I){return this.x+=(A.x-this.x)*I,this.y+=(A.y-this.y)*I,this.z+=(A.z-this.z)*I,this}lerpVectors(A,I,g){return this.x=A.x+(I.x-A.x)*g,this.y=A.y+(I.y-A.y)*g,this.z=A.z+(I.z-A.z)*g,this}cross(A){return this.crossVectors(this,A)}crossVectors(A,I){const g=A.x,Q=A.y,C=A.z,E=I.x,t=I.y,i=I.z;return this.x=Q*i-C*t,this.y=C*E-g*i,this.z=g*t-Q*E,this}projectOnVector(A){const I=A.lengthSq();if(I===0)return this.set(0,0,0);const g=A.dot(this)/I;return this.copy(A).multiplyScalar(g)}projectOnPlane(A){return HI.copy(this).projectOnVector(A),this.sub(HI)}reflect(A){return this.sub(HI.copy(A).multiplyScalar(2*this.dot(A)))}angleTo(A){const I=Math.sqrt(this.lengthSq()*A.lengthSq());if(I===0)return Math.PI/2;const g=this.dot(A)/I;return Math.acos(tA(g,-1,1))}distanceTo(A){return Math.sqrt(this.distanceToSquared(A))}distanceToSquared(A){const I=this.x-A.x,g=this.y-A.y,Q=this.z-A.z;return I*I+g*g+Q*Q}manhattanDistanceTo(A){return Math.abs(this.x-A.x)+Math.abs(this.y-A.y)+Math.abs(this.z-A.z)}setFromSpherical(A){return this.setFromSphericalCoords(A.radius,A.phi,A.theta)}setFromSphericalCoords(A,I,g){const Q=Math.sin(I)*A;return this.x=Q*Math.sin(g),this.y=Math.cos(I)*A,this.z=Q*Math.cos(g),this}setFromCylindrical(A){return this.setFromCylindricalCoords(A.radius,A.theta,A.y)}setFromCylindricalCoords(A,I,g){return this.x=A*Math.sin(I),this.y=g,this.z=A*Math.cos(I),this}setFromMatrixPosition(A){const I=A.elements;return this.x=I[12],this.y=I[13],this.z=I[14],this}setFromMatrixScale(A){const I=this.setFromMatrixColumn(A,0).length(),g=this.setFromMatrixColumn(A,1).length(),Q=this.setFromMatrixColumn(A,2).length();return this.x=I,this.y=g,this.z=Q,this}setFromMatrixColumn(A,I){return this.fromArray(A.elements,I*4)}setFromMatrix3Column(A,I){return this.fromArray(A.elements,I*3)}setFromEuler(A){return this.x=A._x,this.y=A._y,this.z=A._z,this}setFromColor(A){return this.x=A.r,this.y=A.g,this.z=A.b,this}equals(A){return A.x===this.x&&A.y===this.y&&A.z===this.z}fromArray(A,I=0){return this.x=A[I],this.y=A[I+1],this.z=A[I+2],this}toArray(A=[],I=0){return A[I]=this.x,A[I+1]=this.y,A[I+2]=this.z,A}fromBufferAttribute(A,I){return this.x=A.getX(I),this.y=A.getY(I),this.z=A.getZ(I),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const A=Math.random()*Math.PI*2,I=Math.random()*2-1,g=Math.sqrt(1-I*I);return this.x=g*Math.cos(A),this.y=I,this.z=g*Math.sin(A),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}const HI=new R,ug=new UA;class fg{constructor(A=new R(1/0,1/0,1/0),I=new R(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=A,this.max=I}set(A,I){return this.min.copy(A),this.max.copy(I),this}setFromArray(A){this.makeEmpty();for(let I=0,g=A.length;I<g;I+=3)this.expandByPoint(lA.fromArray(A,I));return this}setFromBufferAttribute(A){this.makeEmpty();for(let I=0,g=A.count;I<g;I++)this.expandByPoint(lA.fromBufferAttribute(A,I));return this}setFromPoints(A){this.makeEmpty();for(let I=0,g=A.length;I<g;I++)this.expandByPoint(A[I]);return this}setFromCenterAndSize(A,I){const g=lA.copy(I).multiplyScalar(.5);return this.min.copy(A).sub(g),this.max.copy(A).add(g),this}setFromObject(A,I=!1){return this.makeEmpty(),this.expandByObject(A,I)}clone(){return new this.constructor().copy(this)}copy(A){return this.min.copy(A.min),this.max.copy(A.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z}getCenter(A){return this.isEmpty()?A.set(0,0,0):A.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(A){return this.isEmpty()?A.set(0,0,0):A.subVectors(this.max,this.min)}expandByPoint(A){return this.min.min(A),this.max.max(A),this}expandByVector(A){return this.min.sub(A),this.max.add(A),this}expandByScalar(A){return this.min.addScalar(-A),this.max.addScalar(A),this}expandByObject(A,I=!1){A.updateWorldMatrix(!1,!1);const g=A.geometry;if(g!==void 0){const C=g.getAttribute("position");if(I===!0&&C!==void 0&&A.isInstancedMesh!==!0)for(let E=0,t=C.count;E<t;E++)A.isMesh===!0?A.getVertexPosition(E,lA):lA.fromBufferAttribute(C,E),lA.applyMatrix4(A.matrixWorld),this.expandByPoint(lA);else A.boundingBox!==void 0?(A.boundingBox===null&&A.computeBoundingBox(),nI.copy(A.boundingBox)):(g.boundingBox===null&&g.computeBoundingBox(),nI.copy(g.boundingBox)),nI.applyMatrix4(A.matrixWorld),this.union(nI)}const Q=A.children;for(let C=0,E=Q.length;C<E;C++)this.expandByObject(Q[C],I);return this}containsPoint(A){return A.x>=this.min.x&&A.x<=this.max.x&&A.y>=this.min.y&&A.y<=this.max.y&&A.z>=this.min.z&&A.z<=this.max.z}containsBox(A){return this.min.x<=A.min.x&&A.max.x<=this.max.x&&this.min.y<=A.min.y&&A.max.y<=this.max.y&&this.min.z<=A.min.z&&A.max.z<=this.max.z}getParameter(A,I){return I.set((A.x-this.min.x)/(this.max.x-this.min.x),(A.y-this.min.y)/(this.max.y-this.min.y),(A.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(A){return A.max.x>=this.min.x&&A.min.x<=this.max.x&&A.max.y>=this.min.y&&A.min.y<=this.max.y&&A.max.z>=this.min.z&&A.min.z<=this.max.z}intersectsSphere(A){return this.clampPoint(A.center,lA),lA.distanceToSquared(A.center)<=A.radius*A.radius}intersectsPlane(A){let I,g;return A.normal.x>0?(I=A.normal.x*this.min.x,g=A.normal.x*this.max.x):(I=A.normal.x*this.max.x,g=A.normal.x*this.min.x),A.normal.y>0?(I+=A.normal.y*this.min.y,g+=A.normal.y*this.max.y):(I+=A.normal.y*this.max.y,g+=A.normal.y*this.min.y),A.normal.z>0?(I+=A.normal.z*this.min.z,g+=A.normal.z*this.max.z):(I+=A.normal.z*this.max.z,g+=A.normal.z*this.min.z),I<=-A.constant&&g>=-A.constant}intersectsTriangle(A){if(this.isEmpty())return!1;this.getCenter(AI),oI.subVectors(this.max,AI),ZA.subVectors(A.a,AI),vA.subVectors(A.b,AI),XA.subVectors(A.c,AI),mA.subVectors(vA,ZA),xA.subVectors(XA,vA),HA.subVectors(ZA,XA);let I=[0,-mA.z,mA.y,0,-xA.z,xA.y,0,-HA.z,HA.y,mA.z,0,-mA.x,xA.z,0,-xA.x,HA.z,0,-HA.x,-mA.y,mA.x,0,-xA.y,xA.x,0,-HA.y,HA.x,0];return!KI(I,ZA,vA,XA,oI)||(I=[1,0,0,0,1,0,0,0,1],!KI(I,ZA,vA,XA,oI))?!1:(aI.crossVectors(mA,xA),I=[aI.x,aI.y,aI.z],KI(I,ZA,vA,XA,oI))}clampPoint(A,I){return I.copy(A).clamp(this.min,this.max)}distanceToPoint(A){return this.clampPoint(A,lA).distanceTo(A)}getBoundingSphere(A){return this.isEmpty()?A.makeEmpty():(this.getCenter(A.center),A.radius=this.getSize(lA).length()*.5),A}intersect(A){return this.min.max(A.min),this.max.min(A.max),this.isEmpty()&&this.makeEmpty(),this}union(A){return this.min.min(A.min),this.max.max(A.max),this}applyMatrix4(A){return this.isEmpty()?this:(uA[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(A),uA[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(A),uA[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(A),uA[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(A),uA[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(A),uA[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(A),uA[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(A),uA[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(A),this.setFromPoints(uA),this)}translate(A){return this.min.add(A),this.max.add(A),this}equals(A){return A.min.equals(this.min)&&A.max.equals(this.max)}}const uA=[new R,new R,new R,new R,new R,new R,new R,new R],lA=new R,nI=new fg,ZA=new R,vA=new R,XA=new R,mA=new R,xA=new R,HA=new R,AI=new R,oI=new R,aI=new R,KA=new R;function KI(B,A,I,g,Q){for(let C=0,E=B.length-3;C<=E;C+=3){KA.fromArray(B,C);const t=Q.x*Math.abs(KA.x)+Q.y*Math.abs(KA.y)+Q.z*Math.abs(KA.z),i=A.dot(KA),s=I.dot(KA),e=g.dot(KA);if(Math.max(-Math.max(i,s,e),Math.min(i,s,e))>t)return!1}return!0}const kg={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},YA={h:0,s:0,l:0},rI={h:0,s:0,l:0};function bI(B,A,I){return I<0&&(I+=1),I>1&&(I-=1),I<1/6?B+(A-B)*6*I:I<1/2?A:I<2/3?B+(A-B)*6*(2/3-I):B}class qI{constructor(A,I,g){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(A,I,g)}set(A,I,g){if(I===void 0&&g===void 0){const Q=A;Q&&Q.isColor?this.copy(Q):typeof Q=="number"?this.setHex(Q):typeof Q=="string"&&this.setStyle(Q)}else this.setRGB(A,I,g);return this}setScalar(A){return this.r=A,this.g=A,this.b=A,this}setHex(A,I=wA){return A=Math.floor(A),this.r=(A>>16&255)/255,this.g=(A>>8&255)/255,this.b=(A&255)/255,yA.toWorkingColorSpace(this,I),this}setRGB(A,I,g,Q=yA.workingColorSpace){return this.r=A,this.g=I,this.b=g,yA.toWorkingColorSpace(this,Q),this}setHSL(A,I,g,Q=yA.workingColorSpace){if(A=lB(A,1),I=tA(I,0,1),g=tA(g,0,1),I===0)this.r=this.g=this.b=g;else{const C=g<=.5?g*(1+I):g+I-g*I,E=2*g-C;this.r=bI(E,C,A+1/3),this.g=bI(E,C,A),this.b=bI(E,C,A-1/3)}return yA.toWorkingColorSpace(this,Q),this}setStyle(A,I=wA){function g(C){C!==void 0&&parseFloat(C)<1&&console.warn("THREE.Color: Alpha component of "+A+" will be ignored.")}let Q;if(Q=/^(\\w+)\\(([^\\)]*)\\)/.exec(A)){let C;const E=Q[1],t=Q[2];switch(E){case"rgb":case"rgba":if(C=/^\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(t))return g(C[4]),this.setRGB(Math.min(255,parseInt(C[1],10))/255,Math.min(255,parseInt(C[2],10))/255,Math.min(255,parseInt(C[3],10))/255,I);if(C=/^\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(t))return g(C[4]),this.setRGB(Math.min(100,parseInt(C[1],10))/100,Math.min(100,parseInt(C[2],10))/100,Math.min(100,parseInt(C[3],10))/100,I);break;case"hsl":case"hsla":if(C=/^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(t))return g(C[4]),this.setHSL(parseFloat(C[1])/360,parseFloat(C[2])/100,parseFloat(C[3])/100,I);break;default:console.warn("THREE.Color: Unknown color model "+A)}}else if(Q=/^\\#([A-Fa-f\\d]+)$/.exec(A)){const C=Q[1],E=C.length;if(E===3)return this.setRGB(parseInt(C.charAt(0),16)/15,parseInt(C.charAt(1),16)/15,parseInt(C.charAt(2),16)/15,I);if(E===6)return this.setHex(parseInt(C,16),I);console.warn("THREE.Color: Invalid hex color "+A)}else if(A&&A.length>0)return this.setColorName(A,I);return this}setColorName(A,I=wA){const g=kg[A.toLowerCase()];return g!==void 0?this.setHex(g,I):console.warn("THREE.Color: Unknown color "+A),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(A){return this.r=A.r,this.g=A.g,this.b=A.b,this}copySRGBToLinear(A){return this.r=zA(A.r),this.g=zA(A.g),this.b=zA(A.b),this}copyLinearToSRGB(A){return this.r=TA(A.r),this.g=TA(A.g),this.b=TA(A.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(A=wA){return yA.fromWorkingColorSpace(gA.copy(this),A),Math.round(tA(gA.r*255,0,255))*65536+Math.round(tA(gA.g*255,0,255))*256+Math.round(tA(gA.b*255,0,255))}getHexString(A=wA){return("000000"+this.getHex(A).toString(16)).slice(-6)}getHSL(A,I=yA.workingColorSpace){yA.fromWorkingColorSpace(gA.copy(this),I);const g=gA.r,Q=gA.g,C=gA.b,E=Math.max(g,Q,C),t=Math.min(g,Q,C);let i,s;const e=(t+E)/2;if(t===E)i=0,s=0;else{const n=E-t;switch(s=e<=.5?n/(E+t):n/(2-E-t),E){case g:i=(Q-C)/n+(Q<C?6:0);break;case Q:i=(C-g)/n+2;break;case C:i=(g-Q)/n+4;break}i/=6}return A.h=i,A.s=s,A.l=e,A}getRGB(A,I=yA.workingColorSpace){return yA.fromWorkingColorSpace(gA.copy(this),I),A.r=gA.r,A.g=gA.g,A.b=gA.b,A}getStyle(A=wA){yA.fromWorkingColorSpace(gA.copy(this),A);const I=gA.r,g=gA.g,Q=gA.b;return A!==wA?`color(${A} ${I.toFixed(3)} ${g.toFixed(3)} ${Q.toFixed(3)})`:`rgb(${Math.round(I*255)},${Math.round(g*255)},${Math.round(Q*255)})`}offsetHSL(A,I,g){return this.getHSL(YA),this.setHSL(YA.h+A,YA.s+I,YA.l+g)}add(A){return this.r+=A.r,this.g+=A.g,this.b+=A.b,this}addColors(A,I){return this.r=A.r+I.r,this.g=A.g+I.g,this.b=A.b+I.b,this}addScalar(A){return this.r+=A,this.g+=A,this.b+=A,this}sub(A){return this.r=Math.max(0,this.r-A.r),this.g=Math.max(0,this.g-A.g),this.b=Math.max(0,this.b-A.b),this}multiply(A){return this.r*=A.r,this.g*=A.g,this.b*=A.b,this}multiplyScalar(A){return this.r*=A,this.g*=A,this.b*=A,this}lerp(A,I){return this.r+=(A.r-this.r)*I,this.g+=(A.g-this.g)*I,this.b+=(A.b-this.b)*I,this}lerpColors(A,I,g){return this.r=A.r+(I.r-A.r)*g,this.g=A.g+(I.g-A.g)*g,this.b=A.b+(I.b-A.b)*g,this}lerpHSL(A,I){this.getHSL(YA),A.getHSL(rI);const g=pI(YA.h,rI.h,I),Q=pI(YA.s,rI.s,I),C=pI(YA.l,rI.l,I);return this.setHSL(g,Q,C),this}setFromVector3(A){return this.r=A.x,this.g=A.y,this.b=A.z,this}applyMatrix3(A){const I=this.r,g=this.g,Q=this.b,C=A.elements;return this.r=C[0]*I+C[3]*g+C[6]*Q,this.g=C[1]*I+C[4]*g+C[7]*Q,this.b=C[2]*I+C[5]*g+C[8]*Q,this}equals(A){return A.r===this.r&&A.g===this.g&&A.b===this.b}fromArray(A,I=0){return this.r=A[I],this.g=A[I+1],this.b=A[I+2],this}toArray(A=[],I=0){return A[I]=this.r,A[I+1]=this.g,A[I+2]=this.b,A}fromBufferAttribute(A,I){return this.r=A.getX(I),this.g=A.getY(I),this.b=A.getZ(I),this}toJSON(){return this.getHex()}*[Symbol.iterator](){yield this.r,yield this.g,yield this.b}}const gA=new qI;qI.NAMES=kg,typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:Mg}})),typeof window<"u"&&(window.__THREE__?console.warn("WARNING: Multiple instances of Three.js being imported."):window.__THREE__=Mg);const Rg=-12,Ug=9,_A=Math.exp(-30),NB=11,FB=11,mg=1<<NB,xg=1<<FB,Yg=1;function GB(B){var C;let A=!1;const I=B.split(`\n`).map(E=>{const t=E.trimEnd();return A?t:t.length>0?(A=!0,t):null}).filter(E=>E!=null);for(;I.length>0&&I[I.length-1].length===0;)I.pop();if(I.length===0)return[];const g=(C=I[0].match(/^\\s*/))==null?void 0:C[0];if(!g)return I;const Q=new RegExp(`^${g}`);return I.map(E=>E.replace(Q,""))}function SB(B){return GB(B).join(`\n`)}const zI=new Float32Array(1),Jg=new Uint32Array(zI.buffer);function WA(B){zI[0]=B;const A=Jg[0],I=A>>31&1,g=A>>23&255,Q=A&8388607,C=I<<15;if(g===255)return Q!==0?C|32767:C|31744;const E=g-127+15;if(E>=31)return C|31744;if(E<=0){if(E<-10)return C;const i=(Q|8388608)>>1-E+13;return C|i}const t=Q>>13;return C|E<<10|t}function O(B){const A=B>>15&1,I=B>>10&31,g=B&1023;let Q;if(I===0)if(g===0)Q=A<<31;else{let C=g,E=-14;for(;(C&1024)===0;)C<<=1,E--;C&=1023;const t=E+127,i=C<<13;Q=A<<31|t<<23|i}else if(I===31)g===0?Q=A<<31|2139095040:Q=A<<31|2143289344;else{const C=I-15+127,E=g<<13;Q=A<<31|C<<23|E}return Jg[0]=Q,zI[0]}function aA(B){return Math.max(0,Math.min(255,Math.round(B*255)))}function uB(B){const A=[],I=new Set;function g(Q){Q&&typeof Q=="object"&&!I.has(Q)&&(I.add(Q),Q instanceof ArrayBuffer?A.push(Q):ArrayBuffer.isView(Q)?A.push(Q.buffer):Array.isArray(Q)?Q.forEach(g):Object.values(Q).forEach(g))}return g(B),A}function TI(B,A,I,g,Q,C,E,t,i,s,e,n,a,o,r,D,c){const h=(c==null?void 0:c.rgbMin)??0,y=((c==null?void 0:c.rgbMax)??1)-h,l=aA((o-h)/y),G=aA((r-h)/y),k=aA((D-h)/y),p=aA(a),F=Hg(new UA(i,s,e,n)),N=F&255,x=F>>>8&255,S=F>>>16&255,M=(c==null?void 0:c.lnScaleMin)??Rg,K=254/(((c==null?void 0:c.lnScaleMax)??Ug)-M),J=C<_A?0:Math.min(255,Math.max(1,Math.round((Math.log(C)-M)*K)+1)),U=E<_A?0:Math.min(255,Math.max(1,Math.round((Math.log(E)-M)*K)+1)),z=t<_A?0:Math.min(255,Math.max(1,Math.round((Math.log(t)-M)*K)+1)),v=WA(I),T=WA(g),j=WA(Q),X=A*4;B[X]=l|G<<8|k<<16|p<<24,B[X+1]=v|T<<16,B[X+2]=j|N<<16|x<<24,B[X+3]=J|U<<8|z<<16|S<<24}function Lg(B,A,I,g,Q){const C=WA(I),E=WA(g),t=WA(Q),i=A*4;B[i+1]=C|E<<16,B[i+2]=t|B[i+2]&4294901760}function pg(B,A,I,g,Q,C){const E=(C==null?void 0:C.lnScaleMin)??Rg,i=254/(((C==null?void 0:C.lnScaleMax)??Ug)-E),s=I<_A?0:Math.min(255,Math.max(1,Math.round((Math.log(I)-E)*i)+1)),e=g<_A?0:Math.min(255,Math.max(1,Math.round((Math.log(g)-E)*i)+1)),n=Q<_A?0:Math.min(255,Math.max(1,Math.round((Math.log(Q)-E)*i)+1)),a=A*4;B[a+3]=s|e<<8|n<<16|B[a+3]&4278190080}function dg(B,A,I,g,Q,C){const E=Hg(new UA(I,g,Q,C)),t=E&255,i=E>>>8&255,s=E>>>16&255,e=A*4;B[e+2]=B[e+2]&65535|t<<16|i<<24,B[e+3]=B[e+3]&16777215|s<<24}function fB(B,A,I,g,Q,C,E){const t=(E==null?void 0:E.rgbMin)??0,s=((E==null?void 0:E.rgbMax)??1)-t,e=aA((I-t)/s),n=aA((g-t)/s),a=aA((Q-t)/s),o=aA(C),r=A*4;B[r]=e|n<<8|a<<16|o<<24}function kB(B,A,I,g,Q,C){const E=(C==null?void 0:C.rgbMin)??0,i=((C==null?void 0:C.rgbMax)??1)-E,s=aA((I-E)/i),e=aA((g-E)/i),n=aA((Q-E)/i),a=A*4;B[a]=s|e<<8|n<<16|B[a]&4278190080}function RB(B,A,I){const g=aA(I),Q=A*4;B[Q]=B[Q]&16777215|g<<24}new R,new R,new qI;function UB(B){const A=mg,I=Math.max(Yg,Math.min(xg,Math.ceil(B/A))),g=Math.ceil(B/(A*I)),Q=A*I*g;return{width:A,height:I,depth:g,maxSplats:Q}}function hI(B){const A=mg,I=Math.max(Yg,Math.min(xg,Math.ceil(B/A))),g=Math.ceil(B/(A*I));return A*I*g}SB(`\n precision highp float;\n\n in vec3 position;\n\n void main() {\n gl_Position = vec4(position.xy, 0.0, 1.0);\n }\n`);function Hg(B){const A=B.clone().normalize();A.w<0&&A.set(-A.x,-A.y,-A.z,-A.w);const I=2*Math.acos(A.w),g=Math.sqrt(A.x*A.x+A.y*A.y+A.z*A.z),Q=g<1e-6?new R(1,0,0):new R(A.x,A.y,A.z).divideScalar(g),C=Math.abs(Q.x)+Math.abs(Q.y)+Math.abs(Q.z);let E=Q.x/C,t=Q.y/C;if(Q.z<0){const o=E;E=(1-Math.abs(t))*(E>=0?1:-1),t=(1-Math.abs(o))*(t>=0?1:-1)}const i=E*.5+.5,s=t*.5+.5,e=Math.round(i*255),n=Math.round(s*255);return Math.round(I*(255/Math.PI))<<16|n<<8|e}function cI(B,A,I,g){const Q=Math.max(-127,Math.min(127,B*127)),C=Math.max(-127,Math.min(127,A*127)),E=Math.max(-127,Math.min(127,I*127)),t=Math.max(-127,Math.min(127,g*127));return Q&255|(C&255)<<8|(E&255)<<16|(t&255)<<24}function DI(B,A,I,g){const Q=(g==null?void 0:g.sh1Min)??-1,C=(g==null?void 0:g.sh1Max)??1,E=.5*(Q+C),t=63/(C-Q),i=A*2;for(let s=0;s<9;++s){const e=(I[s]-E)*t,n=Math.round(Math.max(-63,Math.min(63,e)))&127,a=s*7,o=a+7,r=Math.floor(a/32),D=a-r*32,c=n<<D&4294967295;if(B[i+r]|=c,o>r*32+32){const h=n>>>32-D&4294967295;B[i+r+1]|=h}}}function wI(B,A,I,g){const Q=(g==null?void 0:g.sh2Min)??-1,C=(g==null?void 0:g.sh2Max)??1,E=.5*(Q+C),t=.5/(C-Q);B[A*4+0]=cI((I[0]-E)*t,(I[1]-E)*t,(I[2]-E)*t,(I[3]-E)*t),B[A*4+1]=cI((I[4]-E)*t,(I[5]-E)*t,(I[6]-E)*t,(I[7]-E)*t),B[A*4+2]=cI((I[8]-E)*t,(I[9]-E)*t,(I[10]-E)*t,(I[11]-E)*t),B[A*4+3]=cI((I[12]-E)*t,(I[13]-E)*t,(I[14]-E)*t,0)}function yI(B,A,I,g){const Q=(g==null?void 0:g.sh3Min)??-1,C=(g==null?void 0:g.sh3Max)??1,E=.5*(Q+C),t=31/(C-Q),i=A*4;for(let s=0;s<21;++s){const e=(I[s]-E)*t,n=Math.round(Math.max(-31,Math.min(31,e)))&63,a=s*6,o=a+6,r=Math.floor(a/32),D=a-r*32,c=n<<D&4294967295;if(B[i+r]|=c,o>r*32+32){const h=n>>>32-D&4294967295;B[i+r+1]|=h}}}function mB(B,A){const I=[];let g=0,Q=null;const C=new Dg((i,s)=>{if(I.push(i),g+=i.length,s||g>=A){const e=new Uint8Array(g);let n=0;for(const a of I)e.set(a,n),n+=a.length;Q=e.slice(0,A)}}),E=1024;let t=0;for(;Q==null&&t<B.length;){const i=B.slice(t,t+E);C.push(i,!1),t+=E}if(Q==null&&(C.push(new Uint8Array,!0),Q==null))throw new Error("Failed to decompress partial gzip");return Q}class xB{constructor({fileBytes:A,chunkBytes:I=64*1024}){this.fileBytes=A,this.chunkBytes=I,this.offset=0,this.chunks=[],this.totalBytes=0,this.gunzip=new Dg((g,Q)=>{this.chunks.push(g),this.totalBytes+=g.length})}read(A){for(;this.totalBytes<A&&this.offset<this.fileBytes.length;){const C=Math.min(this.offset+this.chunkBytes,this.fileBytes.length);this.gunzip.push(this.fileBytes.subarray(this.offset,C),!1),this.offset=C}if(this.totalBytes<A&&this.offset>=this.fileBytes.length&&this.gunzip.push(new Uint8Array(0),!0),this.totalBytes<A)throw new Error(`Unexpected EOF: needed ${A}, got ${this.totalBytes}`);const I=new Uint8Array(this.totalBytes);let g=0;for(const C of this.chunks)I.set(C,g),g+=C.length;const Q=I.subarray(0,A);return this.chunks=[I.subarray(A)],this.totalBytes-=A,Q}}function Kg(B,A,I){const g=Math.floor(B.length/32);if(g*32!==B.length)throw new Error("Invalid .splat file size");A(g);const Q=new Float32Array(B.buffer);for(let C=0;C<g;++C){const E=C*32,t=C*8,i=Q[t+0],s=Q[t+1],e=Q[t+2],n=Q[t+3],a=Q[t+4],o=Q[t+5],r=B[E+24]/255,D=B[E+25]/255,c=B[E+26]/255,h=B[E+27]/255,w=(B[E+28]-128)/128,y=(B[E+29]-128)/128,l=(B[E+30]-128)/128,G=(B[E+31]-128)/128;I(C,i,s,e,n,a,o,y,l,G,w,h,r,D,c)}}function YB(B,A){let I=0,g=0,Q=new Uint32Array(0);return Kg(B,C=>{I=C,g=hI(I),Q=new Uint32Array(g*4)},(C,E,t,i,s,e,n,a,o,r,D,c,h,w,y)=>{TI(Q,C,E,t,i,s,e,n,a,o,r,D,c,h,w,y,A)}),{packedArray:Q,numSplats:I}}const lI={0:{bytesPerCenter:12,bytesPerScale:12,bytesPerRotation:16,bytesPerColor:4,bytesPerSphericalHarmonicsComponent:4,scaleOffsetBytes:12,rotationOffsetBytes:24,colorOffsetBytes:40,sphericalHarmonicsOffsetBytes:44,scaleRange:1},1:{bytesPerCenter:6,bytesPerScale:6,bytesPerRotation:8,bytesPerColor:4,bytesPerSphericalHarmonicsComponent:2,scaleOffsetBytes:6,rotationOffsetBytes:12,colorOffsetBytes:20,sphericalHarmonicsOffsetBytes:24,scaleRange:32767},2:{bytesPerCenter:6,bytesPerScale:6,bytesPerRotation:8,bytesPerColor:4,bytesPerSphericalHarmonicsComponent:1,scaleOffsetBytes:6,rotationOffsetBytes:12,colorOffsetBytes:20,sphericalHarmonicsOffsetBytes:24,scaleRange:32767}},bg={0:0,1:9,2:24,3:45};function JB(B,A,I,g){var D;let E=0;const t=new DataView(B.buffer,E,4096);E+=4096;const i=t.getUint8(0),s=t.getUint8(1);if(i!==0||s<1)throw new Error(`Unsupported .ksplat version: ${i}.${s}`);const e=t.getUint32(4,!0);t.getUint32(16,!0);const n=t.getUint16(20,!0);if(n<0||n>2)throw new Error(`Invalid .ksplat compression level: ${n}`);const a=t.getFloat32(36,!0)||-1.5,o=t.getFloat32(40,!0)||1.5;let r=4096+e*1024;for(let c=0;c<e;++c){let h=function(CA,Y){if(n===0)return m.getFloat32(CA+d+Y*4,!0);if(n===1)return O(m.getUint16(CA+d+Y*2,!0));const cA=m.getUint8(CA+d+Y)/255;return a+cA*(o-a)};const w=new DataView(B.buffer,E,1024);E+=1024;const y=w.getUint32(0,!0),l=w.getUint32(4,!0),G=w.getUint32(8,!0),k=w.getUint32(12,!0),p=w.getFloat32(16,!0),F=w.getUint16(20,!0),N=(w.getUint32(24,!0)||((D=lI[n])==null?void 0:D.scaleRange))??1,x=w.getUint32(32,!0),S=x*G,M=w.getUint32(36,!0),u=M*4,K=F*k+u,J=w.getUint16(40,!0),U=bg[J],{bytesPerCenter:z,bytesPerScale:v,bytesPerRotation:T,bytesPerColor:j,bytesPerSphericalHarmonicsComponent:X,scaleOffsetBytes:W,rotationOffsetBytes:b,colorOffsetBytes:Z,sphericalHarmonicsOffsetBytes:d}=lI[n],L=z+v+T+j+U*X,f=L*l,BA=f+K,QA=[0,3,6,1,4,7,2,5,8],iA=[9,14,19,10,15,20,11,16,21,12,17,22,13,18,23],EA=[24,31,38,25,32,39,26,33,40,27,34,41,28,35,42,29,36,43,30,37,44],sA=J>=1?new Float32Array(3*3):void 0,eA=J>=2?new Float32Array(5*3):void 0,fA=J>=3?new Float32Array(7*3):void 0,nA=p/2/N,rA=r+u,hA=r+K,m=new DataView(B.buffer,hA,f),$=new Float32Array(B.buffer,rA,k*3),MA=new Uint32Array(B.buffer,r,M);let q=x,LA=S;for(let CA=0;CA<y;++CA){const Y=CA*L;let cA;if(CA<S)cA=Math.floor(CA/G);else{const SA=MA[q-x];CA>=LA+SA&&(q+=1,LA+=SA),cA=q}const AA=n===0?m.getFloat32(Y+0,!0):(m.getUint16(Y+0,!0)-N)*nA+$[3*cA+0],H=n===0?m.getFloat32(Y+4,!0):(m.getUint16(Y+2,!0)-N)*nA+$[3*cA+1],NA=n===0?m.getFloat32(Y+8,!0):(m.getUint16(Y+4,!0)-N)*nA+$[3*cA+2],BI=n===0?m.getFloat32(Y+W+0,!0):O(m.getUint16(Y+W+0,!0)),QI=n===0?m.getFloat32(Y+W+4,!0):O(m.getUint16(Y+W+2,!0)),_I=n===0?m.getFloat32(Y+W+8,!0):O(m.getUint16(Y+W+4,!0)),WI=n===0?m.getFloat32(Y+b+0,!0):O(m.getUint16(Y+b+0,!0)),jI=n===0?m.getFloat32(Y+b+4,!0):O(m.getUint16(Y+b+2,!0)),VI=n===0?m.getFloat32(Y+b+8,!0):O(m.getUint16(Y+b+4,!0)),PI=n===0?m.getFloat32(Y+b+12,!0):O(m.getUint16(Y+b+6,!0)),OI=m.getUint8(Y+Z+0)/255,$I=m.getUint8(Y+Z+1)/255,Ag=m.getUint8(Y+Z+2)/255,Ig=m.getUint8(Y+Z+3)/255;if(I(CA,AA,H,NA,BI,QI,_I,jI,VI,PI,WI,Ig,OI,$I,Ag),J>=1&&sA){for(const[SA,bA]of QA.entries())sA[SA]=h(Y,bA);if(eA)for(const[SA,bA]of iA.entries())eA[SA]=h(Y,bA);if(fA)for(const[SA,bA]of EA.entries())fA[SA]=h(Y,bA);g==null||g(CA,sA,eA,fA)}}r+=BA}}function LB(B,A){var w;let Q=0;const C=new DataView(B.buffer,Q,4096);Q+=4096;const E=C.getUint8(0),t=C.getUint8(1);if(E!==0||t<1)throw new Error(`Unsupported .ksplat version: ${E}.${t}`);const i=C.getUint32(4,!0),s=C.getUint32(16,!0),e=C.getUint16(20,!0);if(e<0||e>2)throw new Error(`Invalid .ksplat compression level: ${e}`);const n=C.getFloat32(36,!0)||-1.5,a=C.getFloat32(40,!0)||1.5,o=s,r=hI(o),D=new Uint32Array(r*4),c={};let h=4096+i*1024;for(let y=0;y<i;++y){let l=function(AA,H){if(e===0)return q.getFloat32(AA+BA+H*4,!0);if(e===1)return O(q.getUint16(AA+BA+H*2,!0));const NA=q.getUint8(AA+BA+H)/255;return n+NA*(a-n)};const G=new DataView(B.buffer,Q,1024);Q+=1024;const k=G.getUint32(0,!0),p=G.getUint32(4,!0),F=G.getUint32(8,!0),N=G.getUint32(12,!0),x=G.getFloat32(16,!0),S=G.getUint16(20,!0),M=(G.getUint32(24,!0)||((w=lI[e])==null?void 0:w.scaleRange))??1,u=G.getUint32(32,!0),K=u*F,J=G.getUint32(36,!0),U=J*4,z=S*N+U,v=G.getUint16(40,!0),T=bg[v],{bytesPerCenter:j,bytesPerScale:X,bytesPerRotation:W,bytesPerColor:b,bytesPerSphericalHarmonicsComponent:Z,scaleOffsetBytes:d,rotationOffsetBytes:L,colorOffsetBytes:f,sphericalHarmonicsOffsetBytes:BA}=lI[e],QA=j+X+W+b+T*Z,iA=QA*p,EA=iA+z,sA=[0,3,6,1,4,7,2,5,8],eA=[9,14,19,10,15,20,11,16,21,12,17,22,13,18,23],fA=[24,31,38,25,32,39,26,33,40,27,34,41,28,35,42,29,36,43,30,37,44],nA=v>=1?new Float32Array(3*3):void 0,rA=v>=2?new Float32Array(5*3):void 0,hA=v>=3?new Float32Array(7*3):void 0,m=x/2/M,$=h+U,MA=h+z,q=new DataView(B.buffer,MA,iA),LA=new Float32Array(B.buffer,$,N*3),CA=new Uint32Array(B.buffer,h,J);let Y=u,cA=K;for(let AA=0;AA<k;++AA){const H=AA*QA;let NA;if(AA<K)NA=Math.floor(AA/F);else{const pA=CA[Y-u];AA>=cA+pA&&(Y+=1,cA+=pA),NA=Y}const BI=e===0?q.getFloat32(H+0,!0):(q.getUint16(H+0,!0)-M)*m+LA[3*NA+0],QI=e===0?q.getFloat32(H+4,!0):(q.getUint16(H+2,!0)-M)*m+LA[3*NA+1],_I=e===0?q.getFloat32(H+8,!0):(q.getUint16(H+4,!0)-M)*m+LA[3*NA+2],WI=e===0?q.getFloat32(H+d+0,!0):O(q.getUint16(H+d+0,!0)),jI=e===0?q.getFloat32(H+d+4,!0):O(q.getUint16(H+d+2,!0)),VI=e===0?q.getFloat32(H+d+8,!0):O(q.getUint16(H+d+4,!0)),PI=e===0?q.getFloat32(H+L+0,!0):O(q.getUint16(H+L+0,!0)),OI=e===0?q.getFloat32(H+L+4,!0):O(q.getUint16(H+L+2,!0)),$I=e===0?q.getFloat32(H+L+8,!0):O(q.getUint16(H+L+4,!0)),Ag=e===0?q.getFloat32(H+L+12,!0):O(q.getUint16(H+L+6,!0)),Ig=q.getUint8(H+f+0)/255,SA=q.getUint8(H+f+1)/255,bA=q.getUint8(H+f+2)/255,OB=q.getUint8(H+f+3)/255;if(TI(D,AA,BI,QI,_I,WI,jI,VI,OI,$I,Ag,PI,OB,Ig,SA,bA,A),v>=1){if(nA){c.sh1||(c.sh1=new Uint32Array(o*2));for(const[pA,CI]of sA.entries())nA[pA]=l(H,CI);DI(c.sh1,AA,nA,A)}if(rA){c.sh2||(c.sh2=new Uint32Array(o*4));for(const[pA,CI]of eA.entries())rA[pA]=l(H,CI);wI(c.sh2,AA,rA,A)}if(hA){c.sh3||(c.sh3=new Uint32Array(o*4));for(const[pA,CI]of fA.entries())hA[pA]=l(H,CI);yI(c.sh3,AA,hA,A)}}}h+=EA}return{packedArray:D,numSplats:o,extra:c}}const VA=class VA{constructor({fileBytes:A}){this.header="",this.littleEndian=!0,this.elements={},this.comments=[],this.data=null,this.numSplats=0,this.fileBytes=A instanceof ArrayBuffer?new Uint8Array(A):A}async parseHeader(){const I=new ReadableStream({start:E=>{E.enqueue(this.fileBytes.slice(0,65536)),E.close()}}).pipeThrough(new TextDecoderStream).getReader();this.header="";const g=`end_header\n`;for(;;){const{value:E,done:t}=await I.read();if(t)throw new Error("Failed to read header");this.header+=E;const i=this.header.indexOf(g);if(i>=0){this.header=this.header.slice(0,i+g.length);break}}const Q=new TextEncoder().encode(this.header).length;this.data=new DataView(this.fileBytes.buffer,Q),this.elements={};let C=null;this.comments=[],this.header.trim().split(`\n`).forEach((E,t)=>{const i=E.trim();if(t===0){if(i!=="ply")throw new Error("Invalid PLY header");return}if(i.length===0)return;const s=i.split(" ");switch(s[0]){case"format":if(s[1]==="binary_little_endian")this.littleEndian=!0;else if(s[1]==="binary_big_endian")this.littleEndian=!1;else throw new Error(`Unsupported PLY format: ${s[1]}`);if(s[2]!=="1.0")throw new Error(`Unsupported PLY version: ${s[2]}`);break;case"end_header":break;case"comment":this.comments.push(i.slice(8));break;case"element":{const e=s[1];C={name:e,count:Number.parseInt(s[2]),properties:{}},this.elements[e]=C;break}case"property":if(C==null)throw new Error("Property must be inside an element");s[1]==="list"?C.properties[s[4]]={isList:!0,type:s[3],countType:s[2]}:C.properties[s[2]]={isList:!1,type:s[1]};break}}),this.elements.vertex&&(this.numSplats=this.elements.vertex.count)}parseData(A){let I=0;const g=this.data;if(g==null)throw new Error("No data to parse");for(const Q in this.elements){const C=this.elements[Q],{count:E,properties:t}=C,i={},s=[];for(const[n,a]of Object.entries(t))a.isList?(i[n]=[],s.push(()=>{const o=i[n];o.length=FI[a.countType](g,I,this.littleEndian),I+=jA[a.countType];for(let r=0;r<o.length;r++)o[r]=FI[a.type](g,I,this.littleEndian),I+=jA[a.type]})):(i[n]=0,s.push(()=>{i[n]=FI[a.type](g,I,this.littleEndian),I+=jA[a.type]}));const e=A(C)??(()=>{});for(let n=0;n<E;n++){for(const a of s)a();e(n,i)}}}parseSplats(A,I){if(this.elements.vertex==null)throw new Error("No vertex element found");let g=!1;const Q=[];let C=0,E=[],t=[],i=[],s,e,n;function a(){const h=dB[C];E=new Array(3).fill(null).flatMap((w,y)=>[0,1,2].map((l,G)=>`f_rest_${y+G*h/3}`)),t=new Array(5).fill(null).flatMap((w,y)=>[0,1,2].map((l,G)=>`f_rest_${3+y+G*h/3}`)),i=new Array(7).fill(null).flatMap((w,y)=>[0,1,2].map((l,G)=>`f_rest_${8+y+G*h/3}`)),s=C>=1?new Float32Array(3*3):void 0,e=C>=2?new Float32Array(5*3):void 0,n=C>=3?new Float32Array(7*3):void 0}function o(h,w){if(!s)throw new Error("Missing sh1");for(const[y,l]of E.entries())s[y]=w[l]*8/255-4;if(e)for(const[y,l]of t.entries())e[y]=w[l]*8/255-4;if(n)for(const[y,l]of i.entries())n[y]=w[l]*8/255-4;I==null||I(h,s,e,n)}function r(h){const{min_x:w,min_y:y,min_z:l,max_x:G,max_y:k,max_z:p,min_scale_x:F,min_scale_y:N,min_scale_z:x,max_scale_x:S,max_scale_y:M,max_scale_z:u}=h.properties;if(!w||!y||!l||!G||!k||!p||!F||!N||!x||!S||!M||!u)throw new Error("Missing PLY chunk properties");return g=!0,(K,J)=>{const{min_x:U,min_y:z,min_z:v,max_x:T,max_y:j,max_z:X,min_scale_x:W,min_scale_y:b,min_scale_z:Z,max_scale_x:d,max_scale_y:L,max_scale_z:f,min_r:BA,min_g:QA,min_b:iA,max_r:EA,max_g:sA,max_b:eA}=J;Q.push({min_x:U,min_y:z,min_z:v,max_x:T,max_y:j,max_z:X,min_scale_x:W,min_scale_y:b,min_scale_z:Z,max_scale_x:d,max_scale_y:L,max_scale_z:f,min_r:BA,min_g:QA,min_b:iA,max_r:EA,max_g:sA,max_b:eA})}}function D(h){if(I&&h.name==="sh")return C=zg(h.properties),a(),o;if(h.name!=="vertex")return null;const{packed_position:w,packed_rotation:y,packed_scale:l,packed_color:G}=h.properties;if(!w||!y||!l||!G)throw new Error("Missing PLY properties: packed_position, packed_rotation, packed_scale, packed_color");const k=Math.sqrt(2);return(p,F)=>{const N=Q[p>>>8];if(N==null)throw new Error("Missing PLY chunk");const{min_x:x,min_y:S,min_z:M,max_x:u,max_y:K,max_z:J,min_scale_x:U,min_scale_y:z,min_scale_z:v,max_scale_x:T,max_scale_y:j,max_scale_z:X,min_r:W,min_g:b,min_b:Z,max_r:d,max_g:L,max_b:f}=N,{packed_position:BA,packed_rotation:QA,packed_scale:iA,packed_color:EA}=F,sA=(BA>>>21&2047)/2047*(u-x)+x,eA=(BA>>>11&1023)/1023*(K-S)+S,fA=(BA&2047)/2047*(J-M)+M,nA=((QA>>>20&1023)/1023-.5)*k,rA=((QA>>>10&1023)/1023-.5)*k,hA=((QA&1023)/1023-.5)*k,m=Math.sqrt(Math.max(0,1-nA*nA-rA*rA-hA*hA)),$=QA>>>30,MA=$===0?nA:$===1?m:rA,q=$<=1?rA:$===2?m:hA,LA=$<=2?hA:m,CA=$===0?m:nA,Y=Math.exp((iA>>>21&2047)/2047*(T-U)+U),cA=Math.exp((iA>>>11&1023)/1023*(j-z)+z),AA=Math.exp((iA&2047)/2047*(X-v)+v),H=(EA>>>24&255)/255*((d??1)-(W??0))+(W??0),NA=(EA>>>16&255)/255*((L??1)-(b??0))+(b??0),BI=(EA>>>8&255)/255*((f??1)-(Z??0))+(Z??0),QI=(EA&255)/255;A(p,sA,eA,fA,Y,cA,AA,MA,q,LA,CA,QI,H,NA,BI)}}const c=h=>{if(h.name==="chunk")return r(h);if(g)return D(h);if(h.name!=="vertex")return null;const{x:w,y,z:l,scale_0:G,scale_1:k,scale_2:p,rot_0:F,rot_1:N,rot_2:x,rot_3:S,opacity:M,f_dc_0:u,f_dc_1:K,f_dc_2:J,red:U,green:z,blue:v,alpha:T}=h.properties;if(!w||!y||!l)throw new Error("Missing PLY properties: x, y, z");const j=G&&k&&p,X=F&&N&&x&&S,W=T!=null?GI[T.type]:1,b=U!=null?GI[U.type]:1,Z=z!=null?GI[z.type]:1,d=v!=null?GI[v.type]:1;return C=zg(h.properties),a(),(L,f)=>{const BA=j?Math.exp(f.scale_0):VA.defaultPointScale,QA=j?Math.exp(f.scale_1):VA.defaultPointScale,iA=j?Math.exp(f.scale_2):VA.defaultPointScale,EA=X?f.rot_1:0,sA=X?f.rot_2:0,eA=X?f.rot_3:0,fA=X?f.rot_0:1,nA=M!=null?1/(1+Math.exp(-f.opacity)):T!=null?f.alpha/W:1,rA=u!=null?f.f_dc_0*NI+.5:U!=null?f.red/b:1,hA=K!=null?f.f_dc_1*NI+.5:z!=null?f.green/Z:1,m=J!=null?f.f_dc_2*NI+.5:v!=null?f.blue/d:1;if(A(L,f.x,f.y,f.z,BA,QA,iA,EA,sA,eA,fA,nA,rA,hA,m),I&&s){if(s)for(const[$,MA]of E.entries())s[$]=f[MA];if(e)for(const[$,MA]of t.entries())e[$]=f[MA];if(n)for(const[$,MA]of i.entries())n[$]=f[MA];I(L,s,e,n)}}};this.parseData(c)}injectRgba(A){let I=0;const g=this.data;if(g==null)throw new Error("No parsed data");if(A.length!==this.numSplats*4)throw new Error("Invalid RGBA array length");for(const Q in this.elements){const C=this.elements[Q],{count:E,properties:t}=C,i=[];let s=0;const e=Q==="vertex";if(e){for(const n of["opacity","f_dc_0","f_dc_1","f_dc_2"])if(!t[n]||t[n].type!=="float")throw new Error(`Can\'t injectRgba due to property: ${n}`)}for(const[n,a]of Object.entries(t))if(a.isList)i.push(()=>{const o=FI[a.countType](g,I,this.littleEndian);I+=jA[a.countType],I+=o*jA[a.type]});else{if(e)if(n==="f_dc_0"||n==="f_dc_1"||n==="f_dc_2"){const o=Number.parseInt(n.slice(5));i.push(()=>{const r=(A[s+o]/255-.5)/NI;qg[a.type](g,I,this.littleEndian,r)})}else n==="opacity"&&i.push(()=>{const o=Math.max(-100,Math.min(100,-Math.log(1/(A[s+3]/255)-1)));qg[a.type](g,I,this.littleEndian,o)});i.push(()=>{I+=jA[a.type]})}for(let n=0;n<E;n++){for(const a of i)a();e&&(s+=4)}}}};VA.defaultPointScale=.001;let MI=VA;const NI=.28209479177387814,FI={char:(B,A,I)=>B.getInt8(A),uchar:(B,A,I)=>B.getUint8(A),short:(B,A,I)=>B.getInt16(A,I),ushort:(B,A,I)=>B.getUint16(A,I),int:(B,A,I)=>B.getInt32(A,I),uint:(B,A,I)=>B.getUint32(A,I),float:(B,A,I)=>B.getFloat32(A,I),double:(B,A,I)=>B.getFloat64(A,I)},qg={char:(B,A,I,g)=>{B.setInt8(A,g)},uchar:(B,A,I,g)=>{B.setUint8(A,g)},short:(B,A,I,g)=>{B.setInt16(A,g,I)},ushort:(B,A,I,g)=>{B.setUint16(A,g,I)},int:(B,A,I,g)=>{B.setInt32(A,g,I)},uint:(B,A,I,g)=>{B.setUint32(A,g,I)},float:(B,A,I,g)=>{B.setFloat32(A,g,I)},double:(B,A,I,g)=>{B.setFloat64(A,g,I)}},jA={char:1,uchar:1,short:2,ushort:2,int:4,uint:4,float:4,double:8},GI={char:127,uchar:255,short:32767,ushort:65535,int:2147483647,uint:4294967295,float:1,double:1},pB={0:0,9:1,24:2,45:3},dB={0:0,1:9,2:24,3:45};function zg(B){let A=0;for(;B[`f_rest_${A}`];)A+=1;const I=pB[A];if(I==null)throw new Error(`Unsupported number of SH coefficients: ${A}`);return I}var II=(B=>(B.PLY="ply",B.SPZ="spz",B.SPLAT="splat",B.KSPLAT="ksplat",B.PCSOGS="pcsogs",B.PCSOGSZIP="pcsogszip",B))(II||{});function HB(B){const A=new DataView(B.buffer);if((A.getUint32(0,!0)&16777215)===7957616)return"ply";if((A.getUint32(0,!0)&16777215)===559903){const I=mB(B,4);return new DataView(I.buffer).getUint32(0,!0)===1347635022?"spz":void 0}if(A.getUint32(0,!0)===67324752)return Tg(B)?"pcsogszip":void 0}function KB(B){const A=B.split(/[?#]/,1)[0],I=Math.max(A.lastIndexOf("/"),A.lastIndexOf("\\\\")),g=A.slice(I+1),Q=g.lastIndexOf(".");return Q<=0||Q===g.length-1?"":g.slice(Q+1).toLowerCase()}function bB(B){const A=KB(B);if(A==="ply")return"ply";if(A==="spz")return"spz";if(A==="splat")return"splat";if(A==="ksplat")return"ksplat"}function qB(B){try{let A;if(typeof B=="string")A=B;else{const g=B instanceof ArrayBuffer?new Uint8Array(B):B;if(g.length>65536)return;A=new TextDecoder().decode(g)}const I=JSON.parse(A);if(!I||typeof I!="object"||Array.isArray(I))return;for(const g of["means","scales","quats","sh0"])if(!I[g]||typeof I[g]!="object"||Array.isArray(I[g])||!I[g].shape||!I[g].files||g!=="quats"&&(!I[g].mins||!I[g].maxs))return;return I}catch{return}}function Tg(B){try{const A=B instanceof ArrayBuffer?new Uint8Array(B):B;let I=null;const g=wB(A,{filter:({name:C})=>C.split(/[\\\\/]/).pop()==="meta.json"?(I=C,!0):!1});if(!I)return;const Q=qB(g[I]);return Q?{name:I,json:Q}:void 0}catch{return}}class zB{constructor({maxSplats:A=1}={}){this.numSplats=0,this.maxSplats=UB(A).maxSplats,this.centers=new Float32Array(this.maxSplats*3),this.scales=new Float32Array(this.maxSplats*3),this.quaternions=new Float32Array(this.maxSplats*4),this.opacities=new Float32Array(this.maxSplats),this.colors=new Float32Array(this.maxSplats*3)}pushSplat(){const A=this.numSplats;return this.ensureIndex(A),this.numSplats+=1,A}unpushSplat(A){if(A===this.numSplats-1)this.numSplats-=1;else throw new Error("Cannot unpush splat from non-last position")}ensureCapacity(A){if(A>this.maxSplats){const I=Math.max(A,this.maxSplats*2),g=new Float32Array(I*3),Q=new Float32Array(I*3),C=new Float32Array(I*4),E=new Float32Array(I),t=new Float32Array(I*3);if(g.set(this.centers),Q.set(this.scales),C.set(this.quaternions),E.set(this.opacities),t.set(this.colors),this.centers=g,this.scales=Q,this.quaternions=C,this.opacities=E,this.colors=t,this.sh1){const i=new Float32Array(I*9);i.set(this.sh1),this.sh1=i}if(this.sh2){const i=new Float32Array(I*15);i.set(this.sh2),this.sh2=i}if(this.sh3){const i=new Float32Array(I*21);i.set(this.sh3),this.sh3=i}this.maxSplats=I}}ensureIndex(A){this.ensureCapacity(A+1)}setCenter(A,I,g,Q){this.centers[A*3]=I,this.centers[A*3+1]=g,this.centers[A*3+2]=Q}setScale(A,I,g,Q){this.scales[A*3]=I,this.scales[A*3+1]=g,this.scales[A*3+2]=Q}setQuaternion(A,I,g,Q,C){this.quaternions[A*4]=I,this.quaternions[A*4+1]=g,this.quaternions[A*4+2]=Q,this.quaternions[A*4+3]=C}setOpacity(A,I){this.opacities[A]=I}setColor(A,I,g,Q){this.colors[A*3]=I,this.colors[A*3+1]=g,this.colors[A*3+2]=Q}setSh1(A,I){this.sh1||(this.sh1=new Float32Array(this.maxSplats*9));for(let g=0;g<9;++g)this.sh1[A*9+g]=I[g]}setSh2(A,I){this.sh2||(this.sh2=new Float32Array(this.maxSplats*15));for(let g=0;g<15;++g)this.sh2[A*15+g]=I[g]}setSh3(A,I){this.sh3||(this.sh3=new Float32Array(this.maxSplats*21));for(let g=0;g<21;++g)this.sh3[A*21+g]=I[g]}}async function Zg(B,A,I){if(B.quats.encoding!=="quaternion_packed")throw new Error("Unsupported quaternion encoding");const g=B.means.shape[0],Q=hI(g),C=new Uint32Array(Q*4),E={},t=Promise.all([gI(A[B.means.files[0]]),gI(A[B.means.files[1]])]).then(a=>{for(let o=0;o<g;++o){const r=o*4,D=(a[0][r+0]+(a[1][r+0]<<8))/65535,c=(a[0][r+1]+(a[1][r+1]<<8))/65535,h=(a[0][r+2]+(a[1][r+2]<<8))/65535;let w=B.means.mins[0]+(B.means.maxs[0]-B.means.mins[0])*D,y=B.means.mins[1]+(B.means.maxs[1]-B.means.mins[1])*c,l=B.means.mins[2]+(B.means.maxs[2]-B.means.mins[2])*h;w=Math.sign(w)*(Math.exp(Math.abs(w))-1),y=Math.sign(y)*(Math.exp(Math.abs(y))-1),l=Math.sign(l)*(Math.exp(Math.abs(l))-1),Lg(C,o,w,y,l)}}),i=gI(A[B.scales.files[0]]).then(a=>{for(let o=0;o<g;++o){const r=o*4,D=a[r+0]/255,c=a[r+1]/255,h=a[r+2]/255,w=B.scales.mins[0]+(B.scales.maxs[0]-B.scales.mins[0])*D,y=B.scales.mins[1]+(B.scales.maxs[1]-B.scales.mins[1])*c,l=B.scales.mins[2]+(B.scales.maxs[2]-B.scales.mins[2])*h;pg(C,o,Math.exp(w),Math.exp(y),Math.exp(l),I)}}),s=gI(A[B.quats.files[0]]).then(a=>{const o=Math.sqrt(2);for(let r=0;r<g;++r){const D=r*4,c=(a[D+0]/255-.5)*o,h=(a[D+1]/255-.5)*o,w=(a[D+2]/255-.5)*o,y=Math.sqrt(Math.max(0,1-c*c-h*h-w*w)),l=a[D+3]-252,G=l===0?c:l===1?y:h,k=l<=1?h:l===2?y:w,p=l<=2?w:y;dg(C,r,G,k,p,l===0?y:c)}}),e=gI(A[B.sh0.files[0]]).then(a=>{const o=.28209479177387814;for(let r=0;r<g;++r){const D=r*4,c=a[D+0]/255,h=a[D+1]/255,w=a[D+2]/255,y=a[D+3]/255,l=B.sh0.mins[0]+(B.sh0.maxs[0]-B.sh0.mins[0])*c,G=B.sh0.mins[1]+(B.sh0.maxs[1]-B.sh0.mins[1])*h,k=B.sh0.mins[2]+(B.sh0.maxs[2]-B.sh0.mins[2])*w,p=B.sh0.mins[3]+(B.sh0.maxs[3]-B.sh0.mins[3])*y,F=o*l+.5,N=o*G+.5,x=o*k+.5,S=1/(1+Math.exp(-p));fB(C,r,F,N,x,S,I)}}),n=[t,i,s,e];if(B.shN){const a=B.shN.shape[1]>=45,o=B.shN.shape[1]>=24,r=B.shN.shape[1]>=9;r&&(E.sh1=new Uint32Array(g*2)),o&&(E.sh2=new Uint32Array(g*4)),a&&(E.sh3=new Uint32Array(g*4));const D=new Float32Array(9),c=new Float32Array(15),h=new Float32Array(21),w=B.shN,y=Promise.all([ZI(A[B.shN.files[0]]),ZI(A[B.shN.files[1]])]).then(([l,G])=>{for(let k=0;k<g;++k){const p=k*4,F=G.rgba[p+0]+(G.rgba[p+1]<<8),N=(F&63)*15,S=(F>>>6)*l.width+N;for(let M=0;M<3;++M){if(r)for(let u=0;u<3;++u)D[u*3+M]=w.mins+(w.maxs-w.mins)*l.rgba[(S+u)*4+M]/255;if(o)for(let u=0;u<5;++u)c[u*3+M]=w.mins+(w.maxs-w.mins)*l.rgba[(S+3+u)*4+M]/255;if(a)for(let u=0;u<7;++u)h[u*3+M]=w.mins+(w.maxs-w.mins)*l.rgba[(S+8+u)*4+M]/255}r&&DI(E.sh1,k,D,I),o&&wI(E.sh2,k,c,I),a&&yI(E.sh3,k,h,I)}});n.push(y)}return await Promise.all(n),{packedArray:C,numSplats:g,extra:E}}let SI=null;async function ZI(B){if(!SI&&(SI=new OffscreenCanvas(1,1).getContext("webgl2"),!SI))throw new Error("Failed to create WebGL2 context");const A=new Blob([B]),I=await createImageBitmap(A,{premultiplyAlpha:"none"}),g=SI,Q=g.createTexture();g.bindTexture(g.TEXTURE_2D,Q),g.pixelStorei(g.UNPACK_FLIP_Y_WEBGL,!0),g.texImage2D(g.TEXTURE_2D,0,g.RGBA,g.RGBA,g.UNSIGNED_BYTE,I),g.texParameteri(g.TEXTURE_2D,g.TEXTURE_MAG_FILTER,g.NEAREST),g.texParameteri(g.TEXTURE_2D,g.TEXTURE_MIN_FILTER,g.NEAREST);const C=g.createFramebuffer();g.bindFramebuffer(g.FRAMEBUFFER,C),g.framebufferTexture2D(g.FRAMEBUFFER,g.COLOR_ATTACHMENT0,g.TEXTURE_2D,Q,0);const E=new Uint8Array(I.width*I.height*4);return g.readPixels(0,0,I.width,I.height,g.RGBA,g.UNSIGNED_BYTE,E),g.deleteTexture(Q),g.deleteFramebuffer(C),{rgba:E,width:I.width,height:I.height}}async function gI(B){const{rgba:A}=await ZI(B);return A}async function TB(B,A){var a;const I=Tg(B);if(!I)throw new Error("Invalid PC SOGS zip file");const{name:g,json:Q}=I,C=g.lastIndexOf("/"),E=g.lastIndexOf("\\\\"),t=g.slice(0,Math.max(C,E)+1),i=new Map,s=[...Q.means.files,...Q.scales.files,...Q.quats.files,...Q.sh0.files,...((a=Q.shN)==null?void 0:a.files)??[]];for(const o of s)i.set(t+o,o);const e=await new Promise((o,r)=>{DB(B,{filter:({name:D})=>i.has(D)},(D,c)=>{D?r(D):o(c)})}),n={};for(const[o,r]of i.entries())n[r]=e[o];return await Zg(Q,n,A)}class vg{constructor({fileBytes:A}){this.fileBytes=A instanceof ArrayBuffer?new Uint8Array(A):A,this.reader=new xB({fileBytes:this.fileBytes});const I=new DataView(this.reader.read(16).buffer);if(I.getUint32(0,!0)!==1347635022)throw new Error("Invalid SPZ file");if(this.version=I.getUint32(4,!0),this.version<1||this.version>2)throw new Error(`Unsupported SPZ version: ${this.version}`);this.numSplats=I.getUint32(8,!0),this.shDegree=I.getUint8(12),this.fractionalBits=I.getUint8(13),this.flags=I.getUint8(14),this.flagAntiAlias=(this.flags&1)!==0,this.reserved=I.getUint8(15),this.parsed=!1}parseSplats(A,I,g,Q,C,E){if(this.parsed)throw new Error("SPZ file already parsed");if(this.parsed=!0,this.version===1){const t=this.reader.read(this.numSplats*3*2),i=new Uint16Array(t.buffer);for(let s=0;s<this.numSplats;s++){const e=s*3,n=O(i[e]),a=O(i[e+1]),o=O(i[e+2]);A==null||A(s,n,a,o)}}else if(this.version===2){const t=1<<this.fractionalBits,i=this.reader.read(this.numSplats*3*3);for(let s=0;s<this.numSplats;s++){const e=s*9,n=((i[e+2]<<24|i[e+1]<<16|i[e]<<8)>>8)/t,a=((i[e+5]<<24|i[e+4]<<16|i[e+3]<<8)>>8)/t,o=((i[e+8]<<24|i[e+7]<<16|i[e+6]<<8)>>8)/t;A==null||A(s,n,a,o)}}else throw new Error("Unreachable");{const t=this.reader.read(this.numSplats);for(let i=0;i<this.numSplats;i++)I==null||I(i,t[i]/255)}{const t=this.reader.read(this.numSplats*3),i=_g/.15;for(let s=0;s<this.numSplats;s++){const e=s*3,n=(t[e]/255-.5)*i+.5,a=(t[e+1]/255-.5)*i+.5,o=(t[e+2]/255-.5)*i+.5;g==null||g(s,n,a,o)}}{const t=this.reader.read(this.numSplats*3);for(let i=0;i<this.numSplats;i++){const s=i*3,e=Math.exp(t[s]/16-10),n=Math.exp(t[s+1]/16-10),a=Math.exp(t[s+2]/16-10);Q==null||Q(i,e,n,a)}}{const t=this.reader.read(this.numSplats*3);for(let i=0;i<this.numSplats;i++){const s=i*3,e=t[s]/127.5-1,n=t[s+1]/127.5-1,a=t[s+2]/127.5-1,o=Math.sqrt(Math.max(0,1-e*e-n*n-a*a));C==null||C(i,e,n,a,o)}}if(E&&this.shDegree>=1){const t=new Float32Array(9),i=this.shDegree>=2?new Float32Array(5*3):void 0,s=this.shDegree>=3?new Float32Array(7*3):void 0,e=this.reader.read(this.numSplats*Xg[this.shDegree]*3);let n=0;for(let a=0;a<this.numSplats;a++){for(let o=0;o<9;++o)t[o]=(e[n+o]-128)/128;if(n+=9,i){for(let o=0;o<15;++o)i[o]=(e[n+o]-128)/128;n+=15}if(s){for(let o=0;o<21;++o)s[o]=(e[n+o]-128)/128;n+=21}E==null||E(a,t,i,s)}}}}const Xg={1:3,2:8,3:15},_g=.28209479177387814,ZB=1347635022,vB=2,XB=1;class JA{constructor({numSplats:A,shDegree:I,fractionalBits:g=12,flagAntiAlias:Q=!0}){this.clippedCount=0;const C=19+(I>=1?9:0)+(I>=2?15:0)+(I>=3?21:0),E=16+A*C;this.buffer=new ArrayBuffer(E),this.view=new DataView(this.buffer),this.view.setUint32(0,ZB,!0),this.view.setUint32(4,vB,!0),this.view.setUint32(8,A,!0),this.view.setUint8(12,I),this.view.setUint8(13,g),this.view.setUint8(14,Q?XB:0),this.view.setUint8(15,0),this.numSplats=A,this.shDegree=I,this.fractionalBits=g,this.fraction=1<<g,this.flagAntiAlias=Q}setCenter(A,I,g,Q){const C=Math.round(I*this.fraction),E=Math.max(-8388607,Math.min(8388607,C)),t=Math.round(g*this.fraction),i=Math.max(-8388607,Math.min(8388607,t)),s=Math.round(Q*this.fraction),e=Math.max(-8388607,Math.min(8388607,s));(C!==E||t!==i||s!==e)&&(this.clippedCount+=1);const o=16+A*9;this.view.setUint8(o,E&255),this.view.setUint8(o+1,E>>8&255),this.view.setUint8(o+2,E>>16&255),this.view.setUint8(o+3,i&255),this.view.setUint8(o+4,i>>8&255),this.view.setUint8(o+5,i>>16&255),this.view.setUint8(o+6,e&255),this.view.setUint8(o+7,e>>8&255),this.view.setUint8(o+8,e>>16&255)}setAlpha(A,I){const g=16+this.numSplats*9+A;this.view.setUint8(g,Math.max(0,Math.min(255,Math.round(I*255))))}static scaleRgb(A){const I=((A-.5)/(_g/.15)+.5)*255;return Math.max(0,Math.min(255,Math.round(I)))}setRgb(A,I,g,Q){const C=16+this.numSplats*10+A*3;this.view.setUint8(C,JA.scaleRgb(I)),this.view.setUint8(C+1,JA.scaleRgb(g)),this.view.setUint8(C+2,JA.scaleRgb(Q))}setScale(A,I,g,Q){const C=16+this.numSplats*13+A*3;this.view.setUint8(C,Math.max(0,Math.min(255,Math.round((Math.log(I)+10)*16)))),this.view.setUint8(C+1,Math.max(0,Math.min(255,Math.round((Math.log(g)+10)*16)))),this.view.setUint8(C+2,Math.max(0,Math.min(255,Math.round((Math.log(Q)+10)*16))))}setQuat(A,I,g,Q,C){const E=16+this.numSplats*16+A*3,t=C<0;this.view.setUint8(E,Math.max(0,Math.min(255,Math.round(((t?-I:I)+1)*127.5)))),this.view.setUint8(E+1,Math.max(0,Math.min(255,Math.round(((t?-g:g)+1)*127.5)))),this.view.setUint8(E+2,Math.max(0,Math.min(255,Math.round(((t?-Q:Q)+1)*127.5))))}static quantizeSh(A,I){const g=Math.round(A*128)+128,Q=1<<8-I,C=Math.floor((g+Q/2)/Q)*Q;return Math.max(0,Math.min(255,C))}setSh(A,I,g,Q){const C=Xg[this.shDegree]||0,E=16+this.numSplats*19+A*C*3;for(let t=0;t<9;++t)this.view.setUint8(E+t,JA.quantizeSh(I[t],5));if(g){const t=E+9;for(let i=0;i<15;++i)this.view.setUint8(t+i,JA.quantizeSh(g[i],4));if(Q){const i=t+15;for(let s=0;s<21;++s)this.view.setUint8(i+s,JA.quantizeSh(Q[s],4))}}}async finalize(){const A=new Uint8Array(this.buffer),g=new ReadableStream({async start(E){E.enqueue(A),E.close()}}).pipeThrough(new CompressionStream("gzip")),C=await new Response(g).arrayBuffer();return console.log("Compressed",A.length,"bytes to",C.byteLength,"bytes"),new Uint8Array(C)}}async function _B(B){var e,n,a;const A=new zB,{inputs:I,clipXyz:g,maxSh:Q,fractionalBits:C=12,opacityThreshold:E}=B;for(const o of I){let r=function(F){return F.multiplyScalar(y),F.applyQuaternion(l),F.add(G),F},D=function(F){return F.multiplyScalar(y),F},c=function(F){return F.premultiply(l),F},h=function(F){return!k||k.containsPoint(F)},w=function(F){return E!==void 0?F>=E:!0};const y=((e=o.transform)==null?void 0:e.scale)??1,l=new UA().fromArray(((n=o.transform)==null?void 0:n.quaternion)??[0,0,0,1]),G=new R().fromArray(((a=o.transform)==null?void 0:a.translate)??[0,0,0]),k=g?new fg(new R().fromArray(g.min),new R().fromArray(g.max)):void 0;let p=o.fileType;switch(p||(p=HB(o.fileBytes),!p&&o.pathOrUrl&&(p=bB(o.pathOrUrl))),p){case II.PLY:{const F=new MI({fileBytes:o.fileBytes});await F.parseHeader();let N=null;F.parseSplats((x,S,M,u,K,J,U,z,v,T,j,X,W,b,Z)=>{const d=r(new R(S,M,u));if(h(d)&&w(X)){N=A.pushSplat(),A.setCenter(N,d.x,d.y,d.z);const L=D(new R(K,J,U));A.setScale(N,L.x,L.y,L.z);const f=c(new UA(z,v,T,j));A.setQuaternion(N,f.x,f.y,f.z,f.w),A.setOpacity(N,X),A.setColor(N,W,b,Z)}else N=null},(x,S,M,u)=>{S&&N!==null&&A.setSh1(N,S),M&&N!==null&&A.setSh2(N,M),u&&N!==null&&A.setSh3(N,u)});break}case II.SPZ:{const F=new vg({fileBytes:o.fileBytes}),N=new Int32Array(F.numSplats);N.fill(-1);const x=new Float32Array(F.numSplats*3),S=new R;F.parseSplats((M,u,K,J)=>{const U=r(new R(u,K,J));x[M*3]=U.x,x[M*3+1]=U.y,x[M*3+2]=U.z},(M,u)=>{S.fromArray(x,M*3),h(S)&&w(u)&&(N[M]=A.pushSplat(),A.setCenter(N[M],S.x,S.y,S.z),A.setOpacity(N[M],u))},(M,u,K,J)=>{N[M]>=0&&A.setColor(N[M],u,K,J)},(M,u,K,J)=>{if(N[M]>=0){const U=D(new R(u,K,J));A.setScale(N[M],U.x,U.y,U.z)}},(M,u,K,J,U)=>{if(N[M]>=0){const z=c(new UA(u,K,J,U));A.setQuaternion(N[M],z.x,z.y,z.z,z.w)}},(M,u,K,J)=>{N[M]>=0&&(A.setSh1(N[M],u),K&&A.setSh2(N[M],K),J&&A.setSh3(N[M],J))});break}case II.SPLAT:Kg(o.fileBytes,F=>{},(F,N,x,S,M,u,K,J,U,z,v,T,j,X,W)=>{const b=r(new R(N,x,S));if(h(b)&&w(T)){const Z=A.pushSplat();A.setCenter(Z,b.x,b.y,b.z);const d=D(new R(M,u,K));A.setScale(Z,d.x,d.y,d.z);const L=c(new UA(J,U,z,v));A.setQuaternion(Z,L.x,L.y,L.z,L.w),A.setOpacity(Z,T),A.setColor(Z,j,X,W)}});break;case II.KSPLAT:{let F=null;JB(o.fileBytes,N=>{},(N,x,S,M,u,K,J,U,z,v,T,j,X,W,b)=>{const Z=r(new R(x,S,M));if(h(Z)&&w(j)){F=A.pushSplat(),A.setCenter(F,Z.x,Z.y,Z.z);const d=D(new R(u,K,J));A.setScale(F,d.x,d.y,d.z);const L=c(new UA(U,z,v,T));A.setQuaternion(F,L.x,L.y,L.z,L.w),A.setOpacity(F,j),A.setColor(F,X,W,b)}else F=null},(N,x,S,M)=>{F!==null&&(A.setSh1(F,x),S&&A.setSh2(F,S),M&&A.setSh3(F,M))});break}default:throw new Error(`transcodeSpz not implemented for ${p}`)}}const t=Math.min(Q??3,A.sh3?3:A.sh2?2:A.sh1?1:0),i=new JA({numSplats:A.numSplats,shDegree:t,fractionalBits:C,flagAntiAlias:!0});for(let o=0;o<A.numSplats;++o){const r=o*3,D=o*4;i.setCenter(o,A.centers[r],A.centers[r+1],A.centers[r+2]),i.setScale(o,A.scales[r],A.scales[r+1],A.scales[r+2]),i.setQuat(o,A.quaternions[D],A.quaternions[D+1],A.quaternions[D+2],A.quaternions[D+3]),i.setAlpha(o,A.opacities[o]),i.setRgb(o,A.colors[r],A.colors[r+1],A.colors[r+2]),A.sh1&&t>=1&&i.setSh(o,A.sh1.slice(o*9,(o+1)*9),t>=2&&A.sh2?A.sh2.slice(o*15,(o+1)*15):void 0,t>=3&&A.sh3?A.sh3.slice(o*21,(o+1)*21):void 0)}return{fileBytes:await i.finalize(),clippedCount:i.clippedCount}}async function Wg(B){const{name:A,args:I,id:g}=B.data;let Q,C;try{switch(A){case"unpackPly":{const{packedArray:E,fileBytes:t,splatEncoding:i}=I,s=await WB({packedArray:E,fileBytes:t,splatEncoding:i});Q={id:g,numSplats:s.numSplats,packedArray:s.packedArray,extra:s.extra};break}case"decodeSpz":{const{fileBytes:E,splatEncoding:t}=I,i=jB(E,t);Q={id:g,numSplats:i.numSplats,packedArray:i.packedArray,extra:i.extra};break}case"decodeAntiSplat":{const{fileBytes:E,splatEncoding:t}=I,i=YB(E,t);Q={id:g,numSplats:i.numSplats,packedArray:i.packedArray};break}case"decodeKsplat":{const{fileBytes:E,splatEncoding:t}=I,i=LB(E,t);Q={id:g,numSplats:i.numSplats,packedArray:i.packedArray,extra:i.extra};break}case"decodePcSogs":{const{fileBytes:E,extraFiles:t,splatEncoding:i}=I,s=JSON.parse(new TextDecoder().decode(E)),e=await Zg(s,t,i);Q={id:g,numSplats:e.numSplats,packedArray:e.packedArray,extra:e.extra};break}case"decodePcSogsZip":{const{fileBytes:E,splatEncoding:t}=I,i=await TB(E,t);Q={id:g,numSplats:i.numSplats,packedArray:i.packedArray,extra:i.extra};break}case"sortSplats":{const{totalSplats:E,readback:t,ordering:i}=I;Q={id:g,readback:t,...VB({totalSplats:E,readback:t,ordering:i})};break}case"sortDoubleSplats":{const{numSplats:E,readback:t,ordering:i}=I;Q={id:g,readback:t,ordering:i,activeSplats:Og(E,t,i)};break}case"sort32Splats":{const{numSplats:E,readback:t,ordering:i}=I;Q={id:g,readback:t,ordering:i,activeSplats:$g(E,t,i)};break}case"transcodeSpz":{const E=I,t=await _B(E);Q={id:g,fileBytes:t,input:E};break}default:throw new Error(`Unknown name: ${A}`)}}catch(E){C=E,console.error(C)}self.postMessage({id:g,result:Q,error:C},{transfer:uB(Q)})}async function WB({packedArray:B,fileBytes:A,splatEncoding:I}){const g=new MI({fileBytes:A});await g.parseHeader();const Q=g.numSplats,C={};return g.parseSplats((E,t,i,s,e,n,a,o,r,D,c,h,w,y,l)=>{TI(B,E,t,i,s,e,n,a,o,r,D,c,h,w,y,l,I)},(E,t,i,s)=>{t&&(C.sh1||(C.sh1=new Uint32Array(Q*2)),DI(C.sh1,E,t,I)),i&&(C.sh2||(C.sh2=new Uint32Array(Q*4)),wI(C.sh2,E,i,I)),s&&(C.sh3||(C.sh3=new Uint32Array(Q*4)),yI(C.sh3,E,s,I))}),{packedArray:B,numSplats:Q,extra:C}}function jB(B,A){const I=new vg({fileBytes:B}),g=I.numSplats,Q=hI(g),C=new Uint32Array(Q*4),E={};return I.parseSplats((t,i,s,e)=>{Lg(C,t,i,s,e)},(t,i)=>{RB(C,t,i)},(t,i,s,e)=>{kB(C,t,i,s,e,A)},(t,i,s,e)=>{pg(C,t,i,s,e,A)},(t,i,s,e,n)=>{dg(C,t,i,s,e,n)},(t,i,s,e)=>{i&&(E.sh1||(E.sh1=new Uint32Array(g*2)),DI(E.sh1,t,i,A)),s&&(E.sh2||(E.sh2=new Uint32Array(g*4)),wI(E.sh2,t,s,A)),e&&(E.sh3||(E.sh3=new Uint32Array(g*4)),yI(E.sh3,t,e,A))}),{packedArray:C,numSplats:g,extra:E}}const vI=31744,uI=vI+1;let GA=null;function VB({totalSplats:B,readback:A,ordering:I}){GA||(GA=new Uint32Array(uI)),GA.fill(0);const g=A.map(i=>new Uint32Array(i.buffer)),Q=g[0].length,C=Math.ceil(B/Q);let E=0;for(let i=0;i<C;++i){const s=g[i],e=Math.min(s.length,B-E);for(let n=0;n<e;++n){const a=s[n]&32767;a<vI&&(GA[a]+=1)}E+=e}let t=0;for(let i=0;i<uI;++i){const s=t+GA[i];GA[i]=t,t=s}E=0;for(let i=0;i<C;++i){const s=g[i],e=Math.min(s.length,B-E);for(let n=0;n<e;++n){const a=s[n]&32767;a<vI&&(I[GA[a]]=E+n,GA[a]+=1)}E+=e}if(GA[uI-1]!==t)throw new Error(`Expected ${t} active splats but got ${GA[uI-1]}`);return{activeSplats:t,ordering:I}}const XI=[];function jg(B){XI.push(B)}async function PB(){self.addEventListener("message",jg),await Bg(),self.removeEventListener("message",jg),self.addEventListener("message",Wg);for(const B of XI)Wg(B);XI.length=0}PB().catch(console.error)})();\n//# sourceMappingURL=worker-BAWC1SCO.js.map\n',ug=typeof self<"u"&&self.Blob&&new Blob([tQ],{type:"text/javascript;charset=utf-8"});function Mo(t){let A;try{if(A=ug&&(self.URL||self.webkitURL).createObjectURL(ug),!A)throw"";const e=new Worker(A,{name:t==null?void 0:t.name});return e.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(A)}),e}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(tQ),{name:t==null?void 0:t.name})}finally{A&&(self.URL||self.webkitURL).revokeObjectURL(A)}}class So{constructor(){this.messages={},this.messageIdNext=0,this.worker=new Mo,this.worker.onmessage=A=>this.onMessage(A)}makeMessageId(){return++this.messageIdNext}makeMessagePromiseId(){const A=this.makeMessageId(),e=new Promise((g,I)=>{this.messages[A]={resolve:g,reject:I}});return{id:A,promise:e}}onMessage(A){const{id:e,result:g,error:I}=A.data,s=this.messages[e];s&&(delete this.messages[e],I?s.reject(I):s.resolve(g))}async call(A,e){const{id:g,promise:I}=this.makeMessagePromiseId();return this.worker.postMessage({name:A,args:e,id:g},{transfer:HI(e)}),I}}let eQ=4,ue=0;const gQ=[],IQ=[];async function mo(){const t=gQ.shift();if(t)return t;if(ue<eQ){const A=new So;return ue+=1,A}return new Promise(A=>{IQ.push(A)})}function No(t){if(ue>eQ){ue-=1;return}const A=IQ.shift();if(A){A(t);return}gQ.push(t)}async function Et(t){const A=await mo();try{return await t(A)}finally{No(A)}}class sQ extends gA.Loader{constructor(A){super(A),this.fileLoader=new gA.FileLoader(A)}load(A,e,g,I){const s=this.manager.resolveURL((this.path??"")+(A??"")),B=new Headers(this.requestHeader),i=this.withCredentials?"include":"same-origin",Q=new Request(s,{headers:B,credentials:i});let C=this.fileType;this.manager.itemStart(s),wg(Q,g).then(async a=>{var l;const n=[new ProgressEvent("progress",{lengthComputable:!0,loaded:a.byteLength,total:a.byteLength})];function o(){if(g){const u=n.every(y=>y.lengthComputable||y.loaded===0&&y.total===0),w=n.reduce((y,d)=>y+d.loaded,0),D=n.reduce((y,d)=>y+d.total,0);g(new ProgressEvent("progress",{lengthComputable:u,loaded:w,total:D}))}}const r={},h=[],c=ng(a);if(C==="pcsogs"&&c===void 0)throw new Error("Invalid PC SOGS file");if(c!==void 0){C="pcsogs";for(const u of["means","scales","quats","sh0","shN"]){const w=c[u];if(w)for(const D of w.files){const y=new URL(D,s).toString(),d=n.length;n.push(new ProgressEvent("progress")),this.manager.itemStart(y);const m=new Request(y,{headers:B,credentials:i}),M=wg(m,p=>{n[d]=p,o()}).then(p=>{r[D]=p}).catch(p=>{throw this.manager.itemError(y),p}).finally(()=>{this.manager.itemEnd(y)});h.push(M)}}}if(await Promise.all(h),e){const u=((l=this.packedSplats)==null?void 0:l.splatEncoding)??Me,w=await Cg({input:a,extraFiles:r,fileType:C,pathOrUrl:s,splatEncoding:u});this.packedSplats?(this.packedSplats.initialize(w),e(this.packedSplats)):e(new HA(w))}}).catch(a=>{this.manager.itemError(s),I==null||I(a)}).finally(()=>{this.manager.itemEnd(s)})}async loadAsync(A,e){return new Promise((g,I)=>{this.load(A,s=>{g(s)},e,I)})}parse(A){return new ZA({packedSplats:A})}}async function wg(t,A){const e=await fetch(t);if(!e.ok)throw new Error(`${e.status} "${e.statusText}" fetching URL: ${t.url}`);if(!e.body)throw new Error(`Response body is null for URL: ${t.url}`);const g=e.body.getReader(),I=Number.parseInt(e.headers.get("Content-Length")||"0"),s=Number.isNaN(I)?0:I;let B=0;const i=[];for(;;){const{done:a,value:n}=await g.read();if(a)break;i.push(n),B+=n.length,A&&A(new ProgressEvent("progress",{lengthComputable:s!==0,loaded:B,total:s}))}const Q=new Uint8Array(B);let C=0;for(const a of i)Q.set(a,C),C+=a.length;return Q.buffer}var St=(t=>(t.PLY="ply",t.SPZ="spz",t.SPLAT="splat",t.KSPLAT="ksplat",t.PCSOGS="pcsogs",t.PCSOGSZIP="pcsogszip",t))(St||{});function Qg(t){const A=new DataView(t.buffer);if((A.getUint32(0,!0)&16777215)===7957616)return"ply";if((A.getUint32(0,!0)&16777215)===559903){const e=ts(t,4);return new DataView(e.buffer).getUint32(0,!0)===1347635022?"spz":void 0}if(A.getUint32(0,!0)===67324752)return xo(t)?"pcsogszip":void 0}function Fo(t){const A=t.split(/[?#]/,1)[0],e=Math.max(A.lastIndexOf("/"),A.lastIndexOf("\\")),g=A.slice(e+1),I=g.lastIndexOf(".");return I<=0||I===g.length-1?"":g.slice(I+1).toLowerCase()}function BQ(t){const A=Fo(t);if(A==="ply")return"ply";if(A==="spz")return"spz";if(A==="splat")return"splat";if(A==="ksplat")return"ksplat"}function Go(t){return ng(t)!==void 0}function ng(t){try{let A;if(typeof t=="string")A=t;else{const g=t instanceof ArrayBuffer?new Uint8Array(t):t;if(g.length>65536)return;A=new TextDecoder().decode(g)}const e=JSON.parse(A);if(!e||typeof e!="object"||Array.isArray(e))return;for(const g of["means","scales","quats","sh0"])if(!e[g]||typeof e[g]!="object"||Array.isArray(e[g])||!e[g].shape||!e[g].files||g!=="quats"&&(!e[g].mins||!e[g].maxs))return;return e}catch{return}}function xo(t){try{const A=t instanceof ArrayBuffer?new Uint8Array(t):t;let e=null;const g=PQ(A,{filter:({name:s})=>s.split(/[\\/]/).pop()==="meta.json"?(e=s,!0):!1});if(!e)return;const I=ng(g[e]);return I?{name:e,json:I}:void 0}catch{return}}async function Cg({input:t,extraFiles:A,fileType:e,pathOrUrl:g,splatEncoding:I}){const s=t instanceof ArrayBuffer?new Uint8Array(t):t;let B=e;switch(e||(B=Qg(s),!B&&g&&(B=BQ(g))),B){case"ply":{const i=new Pt({fileBytes:s});await i.parseHeader();const Q=i.numSplats,C=MA(Q).maxSplats,a={fileBytes:s,packedArray:new Uint32Array(C*4),splatEncoding:I};return await Et(async n=>{const{packedArray:o,numSplats:r,extra:h}=await n.call("unpackPly",a);return{packedArray:o,numSplats:r,extra:h}})}case"spz":return await Et(async i=>{const{packedArray:Q,numSplats:C,extra:a}=await i.call("decodeSpz",{fileBytes:s,splatEncoding:I});return{packedArray:Q,numSplats:C,extra:a}});case"splat":return await Et(async i=>{const{packedArray:Q,numSplats:C}=await i.call("decodeAntiSplat",{fileBytes:s,splatEncoding:I});return{packedArray:Q,numSplats:C}});case"ksplat":return await Et(async i=>{const{packedArray:Q,numSplats:C,extra:a}=await i.call("decodeKsplat",{fileBytes:s,splatEncoding:I});return{packedArray:Q,numSplats:C,extra:a}});case"pcsogs":return await Et(async i=>{const{packedArray:Q,numSplats:C,extra:a}=await i.call("decodePcSogs",{fileBytes:s,extraFiles:A,splatEncoding:I});return{packedArray:Q,numSplats:C,extra:a}});case"pcsogszip":return await Et(async i=>{const{packedArray:Q,numSplats:C,extra:a}=await i.call("decodePcSogsZip",{fileBytes:s,splatEncoding:I});return{packedArray:Q,numSplats:C,extra:a}});default:throw new Error(`Unknown splat file type: ${B}`)}}class ko{constructor({maxSplats:A=1}={}){this.numSplats=0,this.maxSplats=MA(A).maxSplats,this.centers=new Float32Array(this.maxSplats*3),this.scales=new Float32Array(this.maxSplats*3),this.quaternions=new Float32Array(this.maxSplats*4),this.opacities=new Float32Array(this.maxSplats),this.colors=new Float32Array(this.maxSplats*3)}pushSplat(){const A=this.numSplats;return this.ensureIndex(A),this.numSplats+=1,A}unpushSplat(A){if(A===this.numSplats-1)this.numSplats-=1;else throw new Error("Cannot unpush splat from non-last position")}ensureCapacity(A){if(A>this.maxSplats){const e=Math.max(A,this.maxSplats*2),g=new Float32Array(e*3),I=new Float32Array(e*3),s=new Float32Array(e*4),B=new Float32Array(e),i=new Float32Array(e*3);if(g.set(this.centers),I.set(this.scales),s.set(this.quaternions),B.set(this.opacities),i.set(this.colors),this.centers=g,this.scales=I,this.quaternions=s,this.opacities=B,this.colors=i,this.sh1){const Q=new Float32Array(e*9);Q.set(this.sh1),this.sh1=Q}if(this.sh2){const Q=new Float32Array(e*15);Q.set(this.sh2),this.sh2=Q}if(this.sh3){const Q=new Float32Array(e*21);Q.set(this.sh3),this.sh3=Q}this.maxSplats=e}}ensureIndex(A){this.ensureCapacity(A+1)}setCenter(A,e,g,I){this.centers[A*3]=e,this.centers[A*3+1]=g,this.centers[A*3+2]=I}setScale(A,e,g,I){this.scales[A*3]=e,this.scales[A*3+1]=g,this.scales[A*3+2]=I}setQuaternion(A,e,g,I,s){this.quaternions[A*4]=e,this.quaternions[A*4+1]=g,this.quaternions[A*4+2]=I,this.quaternions[A*4+3]=s}setOpacity(A,e){this.opacities[A]=e}setColor(A,e,g,I){this.colors[A*3]=e,this.colors[A*3+1]=g,this.colors[A*3+2]=I}setSh1(A,e){this.sh1||(this.sh1=new Float32Array(this.maxSplats*9));for(let g=0;g<9;++g)this.sh1[A*9+g]=e[g]}setSh2(A,e){this.sh2||(this.sh2=new Float32Array(this.maxSplats*15));for(let g=0;g<15;++g)this.sh2[A*15+g]=e[g]}setSh3(A,e){this.sh3||(this.sh3=new Float32Array(this.maxSplats*21));for(let g=0;g<21;++g)this.sh3[A*21+g]=e[g]}}var Ro=`precision highp float;
precision highp int;
precision highp sampler2D;
precision highp usampler2D;
precision highp isampler2D;
precision highp sampler2DArray;
precision highp usampler2DArray;
precision highp isampler2DArray;
precision highp sampler3D;
precision highp usampler3D;
precision highp isampler3D;
#include <splatDefines>
uniform uint targetLayer;
uniform int targetBase;
uniform int targetCount;
out uvec4 target;
{{ GLOBALS }}
void produceSplat(int index) {
{{ STATEMENTS }}
}
void main() {
int targetIndex = int(targetLayer << SPLAT_TEX_LAYER_BITS) + int(uint(gl_FragCoord.y) << SPLAT_TEX_WIDTH_BITS) + int(gl_FragCoord.x);
int index = targetIndex - targetBase;
if ((index >= 0) && (index < targetCount)) {
produceSplat(index);
} else {
target = uvec4(0u, 0u, 0u, 0u);
}
}`;const Me={rgbMin:0,rgbMax:1,lnScaleMin:kA,lnScaleMax:RA,sh1Min:-1,sh1Max:1,sh2Min:-1,sh2Max:1,sh3Min:-1,sh3Max:1},sA=class sA{constructor(A={}){this.maxSplats=0,this.numSplats=0,this.packedArray=null,this.isInitialized=!1,this.target=null,this.source=null,this.needsUpdate=!0,this.extra={},this.dyno=new ag({packedSplats:this}),this.dynoRgbMinMaxLnScaleMinMax=new Lt({key:"rgbMinMaxLnScaleMinMax",value:new E.Vector4(0,1,kA,RA),update:e=>{var g,I,s,B;return e.set(((g=this.splatEncoding)==null?void 0:g.rgbMin)??0,((I=this.splatEncoding)==null?void 0:I.rgbMax)??1,((s=this.splatEncoding)==null?void 0:s.lnScaleMin)??kA,((B=this.splatEncoding)==null?void 0:B.lnScaleMax)??RA),e}}),this.dynoSh1MinMax=new qt({key:"sh1MinMax",value:new E.Vector2(-1,1),update:e=>{var g,I;return e.set(((g=this.splatEncoding)==null?void 0:g.sh1Min)??-1,((I=this.splatEncoding)==null?void 0:I.sh1Max)??1),e}}),this.dynoSh2MinMax=new qt({key:"sh2MinMax",value:new E.Vector2(-1,1),update:e=>{var g,I;return e.set(((g=this.splatEncoding)==null?void 0:g.sh2Min)??-1,((I=this.splatEncoding)==null?void 0:I.sh2Max)??1),e}}),this.dynoSh3MinMax=new qt({key:"sh3MinMax",value:new E.Vector2(-1,1),update:e=>{var g,I;return e.set(((g=this.splatEncoding)==null?void 0:g.sh3Min)??-1,((I=this.splatEncoding)==null?void 0:I.sh3Max)??1),e}}),this.initialized=Promise.resolve(this),this.reinitialize(A)}reinitialize(A){this.isInitialized=!1,this.extra={},this.splatEncoding=A.splatEncoding,A.url||A.fileBytes||A.construct?this.initialized=this.asyncInitialize(A).then(()=>(this.isInitialized=!0,this)):(this.initialize(A),this.isInitialized=!0,this.initialized=Promise.resolve(this))}initialize(A){A.packedArray?(this.packedArray=A.packedArray,this.maxSplats=Math.floor(this.packedArray.length/4),this.maxSplats=Math.floor(this.maxSplats/j)*j,this.numSplats=Math.min(this.maxSplats,A.numSplats??Number.POSITIVE_INFINITY)):(this.maxSplats=A.maxSplats??0,this.numSplats=0),this.extra=A.extra??{}}async asyncInitialize(A){const{url:e,fileBytes:g,construct:I}=A;if(e){const s=new sQ;s.packedSplats=this,await s.loadAsync(e)}else if(g){const s=await Cg({input:g,fileType:A.fileType,pathOrUrl:A.fileName??e,splatEncoding:A.splatEncoding??Me});this.initialize(s)}if(I){const s=I(this);s instanceof Promise&&await s}}dispose(){this.target&&(this.target.dispose(),this.target=null),this.source&&(this.source.dispose(),this.source=null)}ensureSplats(A){const e=A<=this.maxSplats?this.maxSplats:Math.max(A,2*this.maxSplats),g=this.packedArray?this.packedArray.length/4:0;if(!this.packedArray||e>g){this.maxSplats=MA(e).maxSplats;const I=new Uint32Array(this.maxSplats*4);this.packedArray&&I.set(this.packedArray),this.packedArray=I}return this.packedArray}ensureSplatsSh(A,e){let g,I;if(A===0)return this.ensureSplats(e);if(A===1)g=2,I="sh1";else if(A===2)g=4,I="sh2";else if(A===3)g=4,I="sh3";else throw new Error(`Invalid level: ${A}`);let s=this.extra[I]?this.extra[I].length/g:0;const B=e<=s?s:Math.max(e,2*s);if(!this.extra[I]||B>s){s=MA(B).maxSplats;const i=new Uint32Array(s*g);this.extra[I]&&i.set(this.extra[I]),this.extra[I]=i}return this.extra[I]}getSplat(A){if(!this.packedArray||A>=this.numSplats)throw new Error("Invalid index");return he(this.packedArray,A,this.splatEncoding)}setSplat(A,e,g,I,s,B){const i=this.ensureSplats(A+1);ce(i,A,e.x,e.y,e.z,g.x,g.y,g.z,I.x,I.y,I.z,I.w,s,B.r,B.g,B.b),this.numSplats=Math.max(this.numSplats,A+1)}pushSplat(A,e,g,I,s){const B=this.ensureSplats(this.numSplats+1);ce(B,this.numSplats,A.x,A.y,A.z,e.x,e.y,e.z,g.x,g.y,g.z,g.w,I,s.r,s.g,s.b),++this.numSplats}forEachSplat(A){if(!(!this.packedArray||!this.numSplats))for(let e=0;e<this.numSplats;++e){const g=he(this.packedArray,e,this.splatEncoding);A(e,g.center,g.scales,g.quaternion,g.opacity,g.color)}}ensureGenerate(A){if(this.target&&(A??1)<=this.maxSplats)return!1;this.dispose();const e=MA(A??1),{width:g,height:I,depth:s}=e;return this.maxSplats=e.maxSplats,this.target=new E.WebGLArrayRenderTarget(g,I,s,{depthBuffer:!1,stencilBuffer:!1,generateMipmaps:!1,magFilter:E.NearestFilter,minFilter:E.NearestFilter}),this.target.texture.format=E.RGBAIntegerFormat,this.target.texture.type=E.UnsignedIntType,this.target.texture.internalFormat="RGBA32UI",this.target.scissorTest=!0,!0}generateMapping(A){let e=0;const g=A.map(I=>{const s=e,B=Math.ceil(I/j)*j;return e+=B,{base:s,count:I}});return{maxSplats:e,mapping:g}}getTexture(){return this.target?this.target.texture:this.source||this.packedArray?this.maybeUpdateSource():sA.getEmpty()}maybeUpdateSource(){if(!this.packedArray)throw new Error("No packed splats");if(this.needsUpdate||!this.source){if(this.needsUpdate=!1,this.source){const{width:A,height:e,depth:g}=this.source.image;this.maxSplats!==A*e*g&&(this.source.dispose(),this.source=null)}if(this.source)this.packedArray.buffer!==this.source.image.data.buffer&&(this.source.image.data=new Uint8Array(this.packedArray.buffer));else{const{width:A,height:e,depth:g}=MA(this.maxSplats);this.source=new E.DataArrayTexture(this.packedArray,A,e,g),this.source.format=E.RGBAIntegerFormat,this.source.type=E.UnsignedIntType,this.source.internalFormat="RGBA32UI",this.source.needsUpdate=!0}this.source.needsUpdate=!0}return this.source}static getEmpty(){if(!sA.emptySource){const{width:A,height:e,depth:g,maxSplats:I}=MA(1),s=new Uint32Array(I*4);sA.emptySource=new E.DataArrayTexture(s,A,e,g),sA.emptySource.format=E.RGBAIntegerFormat,sA.emptySource.type=E.UnsignedIntType,sA.emptySource.internalFormat="RGBA32UI",sA.emptySource.needsUpdate=!0}return sA.emptySource}prepareProgramMaterial(A){let e=sA.generatorProgram.get(A);if(!e){const I=GA({index:"int"},{output:"uvec4"},({index:s})=>{A.inputs.index=s;const B=A.outputs.gsplat;return{output:tI(B,this.dynoRgbMinMaxLnScaleMinMax)}});sA.programTemplate||(sA.programTemplate=new Ig(Ro)),e=new gg({graph:I,inputs:{index:"index"},outputs:{output:"target"},template:sA.programTemplate}),Object.assign(e.uniforms,{targetLayer:{value:0},targetBase:{value:0},targetCount:{value:0}}),sA.generatorProgram.set(A,e)}const g=e.prepareMaterial();return sA.fullScreenQuad.material=g,{program:e,material:g}}saveRenderState(A){return{xrEnabled:A.xr.enabled,autoClear:A.autoClear}}resetRenderState(A,e){A.setRenderTarget(null),A.xr.enabled=e.xrEnabled,A.autoClear=e.autoClear}generate({generator:A,base:e,count:g,renderer:I}){if(!this.target)throw new Error("Target must be initialized with ensureSplats");if(e+g>this.maxSplats)throw new Error("Base + count exceeds maxSplats");const{program:s,material:B}=this.prepareProgramMaterial(A);s.update();const i=this.saveRenderState(I),Q=Math.ceil((e+g)/j)*j,C=j*zA;for(B.uniforms.targetBase.value=e,B.uniforms.targetCount.value=g;e<Q;){const a=Math.floor(e/C);B.uniforms.targetLayer.value=a;const n=a*C,o=Math.floor((e-n)/j),r=Math.min(zA,Math.ceil((Q-n)/j));this.target.scissor.set(0,o,j,r-o),I.setRenderTarget(this.target,a),I.xr.enabled=!1,I.autoClear=!1,sA.fullScreenQuad.render(I),e+=j*(r-o)}return this.resetRenderState(I,i),{nextBase:Q}}};sA.emptySource=null,sA.programTemplate=null,sA.generatorProgram=new Map,sA.fullScreenQuad=new dg(new E.RawShaderMaterial({visible:!1}));let HA=sA;class ag extends k{constructor({packedSplats:A}={}){super({key:"packedSplats",type:ge,globals:()=>[pe],value:{texture:HA.getEmpty(),numSplats:0,rgbMinMaxLnScaleMinMax:new E.Vector4(0,1,kA,RA)},update:e=>{var g,I,s,B,i,Q,C,a,n,o;return e.texture=((g=this.packedSplats)==null?void 0:g.getTexture())??HA.getEmpty(),e.numSplats=((I=this.packedSplats)==null?void 0:I.numSplats)??0,e.rgbMinMaxLnScaleMinMax.set(((B=(s=this.packedSplats)==null?void 0:s.splatEncoding)==null?void 0:B.rgbMin)??0,((Q=(i=this.packedSplats)==null?void 0:i.splatEncoding)==null?void 0:Q.rgbMax)??1,((a=(C=this.packedSplats)==null?void 0:C.splatEncoding)==null?void 0:a.lnScaleMin)??kA,((o=(n=this.packedSplats)==null?void 0:n.splatEncoding)==null?void 0:o.lnScaleMax)??RA),e}}),this.packedSplats=A}}class Xe extends E.InstancedBufferGeometry{constructor(A,e){super(),this.ordering=A,this.setAttribute("position",new E.BufferAttribute(Uo,3)),this.setIndex(new E.BufferAttribute(Lo,1)),this._maxInstanceCount=A.length,this.instanceCount=e,this.attribute=new E.InstancedBufferAttribute(A,1,!1,1),this.attribute.setUsage(E.DynamicDrawUsage),this.setAttribute("splatIndex",this.attribute)}update(A,e){this.ordering=A,this.attribute.array=A,this.instanceCount=e,this.attribute.addUpdateRange(0,e),this.attribute.needsUpdate=!0}}const Uo=new Float32Array([-1,-1,0,1,-1,0,1,1,0,-1,1,0]),Lo=new Uint16Array([0,1,2,0,2,3]),It=class It{constructor(A){if(this.lastTime=null,this.encodeLinear=!1,this.superXY=1,this.display=null,this.sorting=null,this.pending=null,this.sortingCheck=!1,this.readback16=new Uint16Array(0),this.readback32=new Uint32Array(0),this.spark=A.spark,this.camera=A.camera,this.viewToWorld=A.viewToWorld??new E.Matrix4,A.target){const{width:e,height:g,doubleBuffer:I}=A.target,s=Math.max(1,Math.min(4,A.target.superXY??1));if(this.superXY=s,e*s>8192||g*s>8192)throw new Error("Target size too large");this.target=new E.WebGLRenderTarget(e*s,g*s,{format:E.RGBAFormat,type:E.UnsignedByteType,colorSpace:E.SRGBColorSpace}),I&&(this.back=new E.WebGLRenderTarget(e*s,g*s,{format:E.RGBAFormat,type:E.UnsignedByteType,colorSpace:E.SRGBColorSpace})),this.encodeLinear=!0}this.onTextureUpdated=A.onTextureUpdated,this.sortRadial=A.sortRadial??!0,this.sortDistance=A.sortDistance,this.sortCoorient=A.sortCoorient,this.depthBias=A.depthBias,this.sort360=A.sort360,this.sort32=A.sort32,this.orderingFreelist=new KI({allocate:e=>new Uint32Array(e),valid:(e,g)=>e.length===g}),this.autoUpdate=!1,this.setAutoUpdate(A.autoUpdate??!1)}dispose(){var A;this.setAutoUpdate(!1),this.target&&(this.target.dispose(),this.target=void 0),this.back&&(this.back.dispose(),this.back=void 0),this.display&&(this.spark.releaseAccumulator(this.display.accumulator),this.display.geometry.dispose(),this.display=null),(A=this.pending)!=null&&A.accumulator&&(this.spark.releaseAccumulator(this.pending.accumulator),this.pending=null)}setAutoUpdate(A){!this.autoUpdate&&A?this.spark.autoViewpoints.push(this):this.autoUpdate&&!A&&(this.spark.autoViewpoints=this.spark.autoViewpoints.filter(e=>e!==this)),this.autoUpdate=A}async prepare({scene:A,camera:e,viewToWorld:g,update:I,forceOrigin:s}){var i;for(g?this.viewToWorld=g:(this.camera=e??this.camera,this.camera&&(this.camera.updateMatrixWorld(),this.viewToWorld=this.camera.matrixWorld.clone()));I??!0;){const Q=s?this.viewToWorld:void 0;if(this.spark.updateInternal({scene:A,originToWorld:Q}))break;await new Promise(a=>setTimeout(a,10))}const B=this.spark.active;B!==((i=this.display)==null?void 0:i.accumulator)&&(this.spark.active.refCount+=1),await this.sortUpdate({accumulator:B,viewToWorld:this.viewToWorld})}renderTarget({scene:A,camera:e}){var I;const g=this.back??this.target;if(!g)throw new Error("Must initialize SparkViewpoint with target");if(e=e??this.camera,!e)throw new Error("Must provide camera");if(e instanceof E.PerspectiveCamera){const s=new E.PerspectiveCamera().copy(e,!1);s.aspect=g.width/g.height,s.updateProjectionMatrix(),e=s}this.viewToWorld=e.matrixWorld.clone();try{this.spark.renderer.setRenderTarget(g),this.spark.prepareViewpoint(this),this.spark.renderer.render(A,e)}finally{this.spark.prepareViewpoint(this.spark.defaultView),this.spark.renderer.setRenderTarget(null)}g!==this.target&&([this.target,this.back]=[this.back,this.target]),(I=this.onTextureUpdated)==null||I.call(this,g.texture)}async readTarget(){if(!this.target)throw new Error("Must initialize SparkViewpoint with target");const{width:A,height:e}=this.target,g=A*e*4;(!this.superPixels||this.superPixels.length<g)&&(this.superPixels=new Uint8Array(g)),await this.spark.renderer.readRenderTargetPixelsAsync(this.target,0,0,A,e,this.superPixels);const{superXY:I}=this;if(I===1)return this.superPixels;const s=A/I,B=e/I,i=s*B*4;(!this.pixels||this.pixels.length<i)&&(this.pixels=new Uint8Array(i));const{superPixels:Q,pixels:C}=this,a=I*I;for(let n=0;n<B;n++){const o=n*s;for(let r=0;r<s;r++){const h=r*I;let c=0,l=0,u=0,w=0;for(let y=0;y<I;y++){const d=(n*I+y)*this.target.width;for(let m=0;m<I;m++){const M=(d+h+m)*4;c+=Q[M],l+=Q[M+1],u+=Q[M+2],w+=Q[M+3]}}const D=(o+r)*4;C[D]=c/a,C[D+1]=l/a,C[D+2]=u/a,C[D+3]=w/a}}return C}async prepareRenderPixels({scene:A,camera:e,viewToWorld:g,update:I,forceOrigin:s}){return await this.prepare({scene:A,camera:e,viewToWorld:g,update:I,forceOrigin:s}),this.renderTarget({scene:A,camera:e}),this.readTarget()}autoPoll({accumulator:A}){var s,B,i,Q;this.camera&&(this.camera.updateMatrixWorld(),this.viewToWorld=this.camera.matrixWorld.clone());let e=!1,g=!1;if(!this.display)e=!0;else if(A){e=!0;const{mappingVersion:C}=this.display.accumulator;A.mappingVersion===C&&(this.spark.releaseAccumulator(this.display.accumulator),this.display.accumulator=A,g=!0)}const I=((s=this.sorting)==null?void 0:s.viewToWorld)??((B=this.display)==null?void 0:B.viewToWorld);I&&!le({matrix1:this.viewToWorld,matrix2:I,maxDistance:this.sortDistance??.01,minCoorient:this.sortCoorient??this.sortRadial?.99:.999})&&(e=!0),e&&(A&&(A.refCount+=1),A&&((i=this.pending)!=null&&i.accumulator)&&this.pending.accumulator!==((Q=this.display)==null?void 0:Q.accumulator)&&this.spark.releaseAccumulator(this.pending.accumulator),this.pending={accumulator:A,viewToWorld:this.viewToWorld,displayed:g},this.driveSort())}async driveSort(){var A;for(;;){if(this.sorting||!this.pending)return;const{viewToWorld:e,displayed:g}=this.pending;let I=this.pending.accumulator??((A=this.display)==null?void 0:A.accumulator);if(I||(I=this.spark.active,I.refCount+=1),this.pending=null,!I)throw new Error("No accumulator to sort");this.sorting={viewToWorld:e},await this.sortUpdate({accumulator:I,viewToWorld:e,displayed:g}),this.sorting=null}}async sortUpdate({accumulator:A,viewToWorld:e,displayed:g=!1}){if(this.sortingCheck)throw new Error("Only one sort at a time");this.sortingCheck=!0,A=A??this.spark.active;const{numSplats:I,maxSplats:s}=A.splats;let B=0,i=this.orderingFreelist.alloc(s);if(I>0){const{reader:Q,doubleSortReader:C,sort32Reader:a,dynoSortRadial:n,dynoOrigin:o,dynoDirection:r,dynoDepthBias:h,dynoSort360:c,dynoSplats:l}=It.makeSorter(),u=this.sort32??!1;let w;if(u)this.readback32=Q.ensureBuffer(s,this.readback32),w=this.readback32;else{const p=Math.ceil(s/2);this.readback16=Q.ensureBuffer(p,this.readback16),w=this.readback16}const D=A.toWorld.clone().invert(),y=e.clone().premultiply(D);n.value=this.sort360?!0:this.sortRadial,o.value.set(0,0,0).applyMatrix4(y),r.value.set(0,0,-1).applyMatrix4(y).sub(o.value).normalize(),h.value=this.depthBias??1,c.value=this.sort360??!1,l.packedSplats=A.splats;const d=u?a:C,m=u?I:Math.ceil(I/2);await Q.renderReadback({renderer:this.spark.renderer,reader:d,count:m,readback:w});const M=await Et(async p=>{const f=u?"sort32Splats":"sortDoubleSplats";return p.call(f,{maxSplats:s,numSplats:I,readback:w,ordering:i})});u?this.readback32=M.readback:this.readback16=M.readback,i=M.ordering,B=M.activeSplats}this.updateDisplay({accumulator:A,viewToWorld:e,ordering:i,activeSplats:B,displayed:g}),this.sortingCheck=!1}updateDisplay({accumulator:A,viewToWorld:e,ordering:g,activeSplats:I,displayed:s=!1}){if(!this.display)this.display={accumulator:A,viewToWorld:e,geometry:new Xe(g,I)};else{!s&&A!==this.display.accumulator&&(this.spark.releaseAccumulator(this.display.accumulator),this.display.accumulator=A),this.display.viewToWorld=e;const B=this.display.geometry.ordering;B.length===g.length?this.display.geometry.update(g,I):(this.display.geometry.dispose(),this.display.geometry=new Xe(g,I)),this.orderingFreelist.free(B)}this.spark.viewpoint===this&&this.spark.prepareViewpoint(this)}static makeSorter(){if(!It.dynos){const A=new re({value:!0}),e=new xt({value:new E.Vector3}),g=new xt({value:new E.Vector3}),I=new ht({value:1}),s=new re({value:!1}),B=new ag,i=new Wt,Q=GA({index:"int"},{rgba8:"vec4"},({index:a})=>{if(!a)throw new Error("No index");const n={sortRadial:A,sortOrigin:e,sortDirection:g,sortDepthBias:I,sort360:s},o=BA(a,v("int",2)),r=Gt(B,o),h=Je({gsplat:r,...n}),c=Gt(B,hA(o,v("int",1))),l=Je({gsplat:c,...n}),u=VA({vectorType:"vec2",x:h,y:l});return{rgba8:qe(BB(u))}}),C=GA({index:"int"},{rgba8:"vec4"},({index:a})=>{if(!a)throw new Error("No index");const n={sortRadial:A,sortOrigin:e,sortDirection:g,sortDepthBias:I,sort360:s},o=Gt(B,a),r=Je({gsplat:o,...n});return{rgba8:qe(sB(r))}});It.dynos={dynoSortRadial:A,dynoOrigin:e,dynoDirection:g,dynoDepthBias:I,dynoSort360:s,dynoSplats:B,reader:i,doubleSortReader:Q,sort32Reader:C}}return It.dynos}};It.EMPTY_TEXTURE=new E.Texture,It.dynos=null;let _t=It;const Yo=rA(`
float computeSort(Gsplat gsplat, bool sortRadial, vec3 sortOrigin, vec3 sortDirection, float sortDepthBias, bool sort360) {
if (!isGsplatActive(gsplat.flags)) {
return INFINITY;
}
vec3 center = gsplat.center - sortOrigin;
float biasedDepth = dot(center, sortDirection) + sortDepthBias;
if (!sort360 && (biasedDepth <= 0.0)) {
return INFINITY;
}
return sortRadial ? length(center) : biasedDepth;
}
`);function Je({gsplat:t,sortRadial:A,sortOrigin:e,sortDirection:g,sortDepthBias:I,sort360:s}){return ee({inTypes:{gsplat:AA,sortRadial:"bool",sortOrigin:"vec3",sortDirection:"vec3",sortDepthBias:"float",sort360:"bool"},outTypes:{metric:"float"},globals:()=>[xA,Yo],inputs:{gsplat:t,sortRadial:A,sortOrigin:e,sortDirection:g,sortDepthBias:I,sort360:s},statements:({inputs:B,outputs:i})=>{const{gsplat:Q,sortRadial:C,sortOrigin:a,sortDirection:n,sortDepthBias:o,sort360:r}=B;return JA(`
${i.metric} = computeSort(${Q}, ${C}, ${a}, ${n}, ${o}, ${r});
`)}}).outputs.metric}class Ee{constructor(){this.splats=new HA,this.toWorld=new E.Matrix4,this.mapping=[],this.refCount=0,this.splatsVersion=-1,this.mappingVersion=-1}ensureGenerate(A){this.splats.ensureGenerate(A)&&(this.mapping=[])}generateSplats({renderer:A,modifier:e,generators:g,forceUpdate:I,originToWorld:s}){const B=this.mapping.reduce((C,a)=>(C.set(a.node,a),C),new Map);let i=0,Q=0;for(const{node:C,generator:a,version:n,base:o,count:r}of g){const h=B.get(C);if((I||a!==(h==null?void 0:h.generator)||n!==(h==null?void 0:h.version)||o!==(h==null?void 0:h.base)||r!==(h==null?void 0:h.count))&&a&&r>0){const c=e.apply(a);try{this.splats.generate({generator:c,base:o,count:r,renderer:A})}catch(l){C.generator=void 0,C.generatorError=l}i+=1}Q=Math.max(Q,o+r)}return this.splats.numSplats=Q,this.toWorld=s,this.mapping=g,i!==0}hasCorrespondence(A){return this.mapping.length!==A.mapping.length?!1:this.mapping.every(({node:e,base:g,count:I},s)=>{const{node:B,base:i,count:Q}=A.mapping[s];return e===B&&g===i&&I===Q})}}var Jo=`const float LN_SCALE_MIN = -12.0;
const float LN_SCALE_MAX = 9.0;
const uint SPLAT_TEX_WIDTH_BITS = 11u;
const uint SPLAT_TEX_HEIGHT_BITS = 11u;
const uint SPLAT_TEX_DEPTH_BITS = 11u;
const uint SPLAT_TEX_LAYER_BITS = SPLAT_TEX_WIDTH_BITS + SPLAT_TEX_HEIGHT_BITS;
const uint SPLAT_TEX_WIDTH = 1u << SPLAT_TEX_WIDTH_BITS;
const uint SPLAT_TEX_HEIGHT = 1u << SPLAT_TEX_HEIGHT_BITS;
const uint SPLAT_TEX_DEPTH = 1u << SPLAT_TEX_DEPTH_BITS;
const uint SPLAT_TEX_WIDTH_MASK = SPLAT_TEX_WIDTH - 1u;
const uint SPLAT_TEX_HEIGHT_MASK = SPLAT_TEX_HEIGHT - 1u;
const uint SPLAT_TEX_DEPTH_MASK = SPLAT_TEX_DEPTH - 1u;
const uint F16_INF = 0x7c00u;
const float PI = 3.1415926535897932384626433832795;
const float INFINITY = 1.0 / 0.0;
const float NEG_INFINITY = -INFINITY;
float sqr(float x) {
return x * x;
}
float pow4(float x) {
float x2 = x * x;
return x2 * x2;
}
float pow8(float x) {
float x4 = pow4(x);
return x4 * x4;
}
vec3 srgbToLinear(vec3 rgb) {
return pow(rgb, vec3(2.2));
}
vec3 linearToSrgb(vec3 rgb) {
return pow(rgb, vec3(1.0 / 2.2));
}
uint encodeQuatOctXy88R8(vec4 q) {
if (q.w < 0.0) {
q = -q;
}
float theta = 2.0 * acos(q.w);
float halfTheta = theta * 0.5;
float s = sin(halfTheta);
vec3 axis = (abs(s) < 1e-6) ? vec3(1.0, 0.0, 0.0) : q.xyz / s;
float sum = abs(axis.x) + abs(axis.y) + abs(axis.z);
vec2 p = vec2(axis.x, axis.y) / sum;
if (axis.z < 0.0) {
float oldPx = p.x;
p.x = (1.0 - abs(p.y)) * (p.x >= 0.0 ? 1.0 : -1.0);
p.y = (1.0 - abs(oldPx)) * (p.y >= 0.0 ? 1.0 : -1.0);
}
float u_f = p.x * 0.5 + 0.5;
float v_f = p.y * 0.5 + 0.5;
uint quantU = uint(clamp(round(u_f * 255.0), 0.0, 255.0));
uint quantV = uint(clamp(round(v_f * 255.0), 0.0, 255.0));
uint angleInt = uint(clamp(round((theta / 3.14159265359) * 255.0), 0.0, 255.0));
return (angleInt << 16u) | (quantV << 8u) | quantU;
}
vec4 decodeQuatOctXy88R8(uint encoded) {
uint quantU = encoded & uint(0xFFu);
uint quantV = (encoded >> 8u) & uint(0xFFu);
uint angleInt = encoded >> 16u;
float u_f = float(quantU) / 255.0;
float v_f = float(quantV) / 255.0;
vec2 f = vec2(u_f * 2.0 - 1.0, v_f * 2.0 - 1.0);
vec3 axis = vec3(f.xy, 1.0 - abs(f.x) - abs(f.y));
float t = max(-axis.z, 0.0);
axis.x += (axis.x >= 0.0) ? -t : t;
axis.y += (axis.y >= 0.0) ? -t : t;
axis = normalize(axis);
float theta = (float(angleInt) / 255.0) * 3.14159265359;
float halfTheta = theta * 0.5;
float s = sin(halfTheta);
float w = cos(halfTheta);
return vec4(axis * s, w);
}
uvec4 packSplatEncoding(
vec3 center, vec3 scales, vec4 quaternion, vec4 rgba, vec4 rgbMinMaxLnScaleMinMax
) {
float rgbMin = rgbMinMaxLnScaleMinMax.x;
float rgbMax = rgbMinMaxLnScaleMinMax.y;
vec3 encRgb = (rgba.rgb - vec3(rgbMin)) / (rgbMax - rgbMin);
uvec4 uRgba = uvec4(round(clamp(vec4(encRgb, rgba.a) * 255.0, 0.0, 255.0)));
uint uQuat = encodeQuatOctXy88R8(quaternion);
uvec3 uQuat3 = uvec3(uQuat & 0xffu, (uQuat >> 8u) & 0xffu, (uQuat >> 16u) & 0xffu);
float lnScaleMin = rgbMinMaxLnScaleMinMax.z;
float lnScaleMax = rgbMinMaxLnScaleMinMax.w;
float lnScaleScale = 254.0 / (lnScaleMax - lnScaleMin);
uvec3 uScales = uvec3(
(scales.x == 0.0) ? 0u : uint(round(clamp((log(scales.x) - lnScaleMin) * lnScaleScale, 0.0, 254.0))) + 1u,
(scales.y == 0.0) ? 0u : uint(round(clamp((log(scales.y) - lnScaleMin) * lnScaleScale, 0.0, 254.0))) + 1u,
(scales.z == 0.0) ? 0u : uint(round(clamp((log(scales.z) - lnScaleMin) * lnScaleScale, 0.0, 254.0))) + 1u
);
uint word0 = uRgba.r | (uRgba.g << 8u) | (uRgba.b << 16u) | (uRgba.a << 24u);
uint word1 = packHalf2x16(center.xy);
uint word2 = packHalf2x16(vec2(center.z, 0.0)) | (uQuat3.x << 16u) | (uQuat3.y << 24u);
uint word3 = uScales.x | (uScales.y << 8u) | (uScales.z << 16u) | (uQuat3.z << 24u);
return uvec4(word0, word1, word2, word3);
}
uvec4 packSplat(vec3 center, vec3 scales, vec4 quaternion, vec4 rgba) {
return packSplatEncoding(center, scales, quaternion, rgba, vec4(0.0, 1.0, LN_SCALE_MIN, LN_SCALE_MAX));
}
void unpackSplatEncoding(uvec4 packed, out vec3 center, out vec3 scales, out vec4 quaternion, out vec4 rgba, vec4 rgbMinMaxLnScaleMinMax) {
uint word0 = packed.x, word1 = packed.y, word2 = packed.z, word3 = packed.w;
uvec4 uRgba = uvec4(word0 & 0xffu, (word0 >> 8u) & 0xffu, (word0 >> 16u) & 0xffu, (word0 >> 24u) & 0xffu);
float rgbMin = rgbMinMaxLnScaleMinMax.x;
float rgbMax = rgbMinMaxLnScaleMinMax.y;
rgba = (vec4(uRgba) / 255.0);
rgba.rgb = rgba.rgb * (rgbMax - rgbMin) + rgbMin;
center = vec4(
unpackHalf2x16(word1),
unpackHalf2x16(word2 & 0xffffu)
).xyz;
uvec3 uScales = uvec3(word3 & 0xffu, (word3 >> 8u) & 0xffu, (word3 >> 16u) & 0xffu);
float lnScaleMin = rgbMinMaxLnScaleMinMax.z;
float lnScaleMax = rgbMinMaxLnScaleMinMax.w;
float lnScaleScale = (lnScaleMax - lnScaleMin) / 254.0;
scales = vec3(
(uScales.x == 0u) ? 0.0 : exp(lnScaleMin + float(uScales.x - 1u) * lnScaleScale),
(uScales.y == 0u) ? 0.0 : exp(lnScaleMin + float(uScales.y - 1u) * lnScaleScale),
(uScales.z == 0u) ? 0.0 : exp(lnScaleMin + float(uScales.z - 1u) * lnScaleScale)
);
uint uQuat = ((word2 >> 16u) & 0xFFFFu) | ((word3 >> 8u) & 0xFF0000u);
quaternion = decodeQuatOctXy88R8(uQuat);
}
void unpackSplat(uvec4 packed, out vec3 center, out vec3 scales, out vec4 quaternion, out vec4 rgba) {
unpackSplatEncoding(packed, center, scales, quaternion, rgba, vec4(0.0, 1.0, LN_SCALE_MIN, LN_SCALE_MAX));
}
vec3 quatVec(vec4 q, vec3 v) {
vec3 t = 2.0 * cross(q.xyz, v);
return v + q.w * t + cross(q.xyz, t);
}
vec4 quatQuat(vec4 q1, vec4 q2) {
return vec4(
q1.w * q2.x + q1.x * q2.w + q1.y * q2.z - q1.z * q2.y,
q1.w * q2.y - q1.x * q2.z + q1.y * q2.w + q1.z * q2.x,
q1.w * q2.z + q1.x * q2.y - q1.y * q2.x + q1.z * q2.w,
q1.w * q2.w - q1.x * q2.x - q1.y * q2.y - q1.z * q2.z
);
}
mat3 scaleQuaternionToMatrix(vec3 s, vec4 q) {
return mat3(
s.x * (1.0 - 2.0 * (q.y * q.y + q.z * q.z)),
s.x * (2.0 * (q.x * q.y + q.w * q.z)),
s.x * (2.0 * (q.x * q.z - q.w * q.y)),
s.y * (2.0 * (q.x * q.y - q.w * q.z)),
s.y * (1.0 - 2.0 * (q.x * q.x + q.z * q.z)),
s.y * (2.0 * (q.y * q.z + q.w * q.x)),
s.z * (2.0 * (q.x * q.z + q.w * q.y)),
s.z * (2.0 * (q.y * q.z - q.w * q.x)),
s.z * (1.0 - 2.0 * (q.x * q.x + q.y * q.y))
);
}
vec4 slerp(vec4 q1, vec4 q2, float t) {
float cosHalfTheta = dot(q1, q2);
if (abs(cosHalfTheta) >= 0.999) {
return q1;
}
if (cosHalfTheta < 0.0) {
q2 = -q2;
cosHalfTheta = -cosHalfTheta;
}
float halfTheta = acos(cosHalfTheta);
float sinHalfTheta = sqrt(1.0 - cosHalfTheta * cosHalfTheta);
float ratioA = sin((1.0 - t) * halfTheta) / sinHalfTheta;
float ratioB = sin(t * halfTheta) / sinHalfTheta;
return q1 * ratioA + q2 * ratioB;
}
ivec3 splatTexCoord(int index) {
uint x = uint(index) & SPLAT_TEX_WIDTH_MASK;
uint y = (uint(index) >> SPLAT_TEX_WIDTH_BITS) & SPLAT_TEX_HEIGHT_MASK;
uint z = uint(index) >> SPLAT_TEX_LAYER_BITS;
return ivec3(x, y, z);
}`,bo=`precision highp float;
precision highp int;
#include <splatDefines>
uniform float near;
uniform float far;
uniform bool premultipliedAlpha;
uniform bool encodeLinear;
uniform float maxStdDev;
uniform float minAlpha;
uniform bool disableFalloff;
uniform float falloff;
uniform bool splatTexEnable;
uniform sampler3D splatTexture;
uniform mat2 splatTexMul;
uniform vec2 splatTexAdd;
uniform float splatTexNear;
uniform float splatTexFar;
uniform float splatTexMid;
out vec4 fragColor;
in vec4 vRgba;
in vec2 vSplatUv;
in vec3 vNdc;
void main() {
vec4 rgba = vRgba;
float z = dot(vSplatUv, vSplatUv);
if (!splatTexEnable) {
if (z > (maxStdDev * maxStdDev)) {
discard;
}
} else {
vec2 uv = splatTexMul * vSplatUv + splatTexAdd;
float ndcZ = vNdc.z;
float depth = (2.0 * near * far) / (far + near - ndcZ * (far - near));
float clampedFar = max(splatTexFar, splatTexNear);
float clampedDepth = clamp(depth, splatTexNear, clampedFar);
float logDepth = log2(clampedDepth + 1.0);
float logNear = log2(splatTexNear + 1.0);
float logFar = log2(clampedFar + 1.0);
float texZ;
if (splatTexMid > 0.0) {
float clampedMid = clamp(splatTexMid, splatTexNear, clampedFar);
float logMid = log2(clampedMid + 1.0);
texZ = (clampedDepth <= clampedMid) ?
(0.5 * ((logDepth - logNear) / (logMid - logNear))) :
(0.5 * ((logDepth - logMid) / (logFar - logMid)) + 0.5);
} else {
texZ = (logDepth - logNear) / (logFar - logNear);
}
vec4 modulate = texture(splatTexture, vec3(uv, 1.0 - texZ));
rgba *= modulate;
}
rgba.a *= mix(1.0, exp(-0.5 * z), falloff);
if (rgba.a < minAlpha) {
discard;
}
if (encodeLinear) {
rgba.rgb = srgbToLinear(rgba.rgb);
}
if (premultipliedAlpha) {
fragColor = vec4(rgba.rgb * rgba.a, rgba.a);
} else {
fragColor = rgba;
}
}`,vo=`precision highp float;
precision highp int;
precision highp usampler2DArray;
#include <splatDefines>
attribute uint splatIndex;
out vec4 vRgba;
out vec2 vSplatUv;
out vec3 vNdc;
uniform vec2 renderSize;
uniform uint numSplats;
uniform vec4 renderToViewQuat;
uniform vec3 renderToViewPos;
uniform float maxStdDev;
uniform float maxPixelRadius;
uniform float time;
uniform float deltaTime;
uniform bool debugFlag;
uniform float minAlpha;
uniform bool enable2DGS;
uniform float blurAmount;
uniform float preBlurAmount;
uniform float focalDistance;
uniform float apertureAngle;
uniform float clipXY;
uniform float focalAdjustment;
uniform usampler2DArray packedSplats;
uniform vec4 rgbMinMaxLnScaleMinMax;
void main() {
gl_Position = vec4(0.0, 0.0, 2.0, 1.0);
if (uint(gl_InstanceID) >= numSplats) {
return;
}
if (splatIndex == 0xffffffffu) {
return;
}
ivec3 texCoord = ivec3(
splatIndex & SPLAT_TEX_WIDTH_MASK,
(splatIndex >> SPLAT_TEX_WIDTH_BITS) & SPLAT_TEX_HEIGHT_MASK,
splatIndex >> SPLAT_TEX_LAYER_BITS
);
uvec4 packed = texelFetch(packedSplats, texCoord, 0);
vec3 center, scales;
vec4 quaternion, rgba;
unpackSplatEncoding(packed, center, scales, quaternion, rgba, rgbMinMaxLnScaleMinMax);
if (rgba.a < minAlpha) {
return;
}
bvec3 zeroScales = equal(scales, vec3(0.0));
if (all(zeroScales)) {
return;
}
vec3 viewCenter = quatVec(renderToViewQuat, center) + renderToViewPos;
if (viewCenter.z >= 0.0) {
return;
}
vec4 clipCenter = projectionMatrix * vec4(viewCenter, 1.0);
if (abs(clipCenter.z) >= clipCenter.w) {
return;
}
float clip = clipXY * clipCenter.w;
if (abs(clipCenter.x) > clip || abs(clipCenter.y) > clip) {
return;
}
vec4 viewQuaternion = quatQuat(renderToViewQuat, quaternion);
if (enable2DGS && any(zeroScales)) {
vRgba = rgba;
vSplatUv = position.xy * maxStdDev;
vec3 offset;
if (zeroScales.z) {
offset = vec3(vSplatUv.xy * scales.xy, 0.0);
} else if (zeroScales.y) {
offset = vec3(vSplatUv.x * scales.x, 0.0, vSplatUv.y * scales.z);
} else {
offset = vec3(0.0, vSplatUv.xy * scales.yz);
}
vec3 viewPos = viewCenter + quatVec(viewQuaternion, offset);
gl_Position = projectionMatrix * vec4(viewPos, 1.0);
vNdc = gl_Position.xyz / gl_Position.w;
return;
}
vec3 ndcCenter = clipCenter.xyz / clipCenter.w;
mat3 RS = scaleQuaternionToMatrix(scales, viewQuaternion);
mat3 cov3D = RS * transpose(RS);
vec2 scaledRenderSize = renderSize * focalAdjustment;
vec2 focal = 0.5 * scaledRenderSize * vec2(projectionMatrix[0][0], projectionMatrix[1][1]);
float invZ = 1.0 / viewCenter.z;
vec2 J1 = focal * invZ;
vec2 J2 = -(J1 * viewCenter.xy) * invZ;
mat3 J = mat3(
J1.x, 0.0, J2.x,
0.0, J1.y, J2.y,
0.0, 0.0, 0.0
);
mat3 cov2D = transpose(J) * cov3D * J;
float a = cov2D[0][0];
float d = cov2D[1][1];
float b = cov2D[0][1];
a += preBlurAmount;
d += preBlurAmount;
float fullBlurAmount = blurAmount;
if ((focalDistance > 0.0) && (apertureAngle > 0.0)) {
float focusRadius = maxPixelRadius;
if (viewCenter.z < 0.0) {
float focusBlur = abs((-viewCenter.z - focalDistance) / viewCenter.z);
float apertureRadius = focal.x * tan(0.5 * apertureAngle);
focusRadius = focusBlur * apertureRadius;
}
fullBlurAmount = clamp(sqr(focusRadius), blurAmount, sqr(maxPixelRadius));
}
float detOrig = a * d - b * b;
a += fullBlurAmount;
d += fullBlurAmount;
float det = a * d - b * b;
float blurAdjust = sqrt(max(0.0, detOrig / det));
rgba.a *= blurAdjust;
if (rgba.a < minAlpha) {
return;
}
float eigenAvg = 0.5 * (a + d);
float eigenDelta = sqrt(max(0.0, eigenAvg * eigenAvg - det));
float eigen1 = eigenAvg + eigenDelta;
float eigen2 = eigenAvg - eigenDelta;
vec2 eigenVec1 = normalize(vec2((abs(b) < 0.001) ? 1.0 : b, eigen1 - a));
vec2 eigenVec2 = vec2(eigenVec1.y, -eigenVec1.x);
float scale1 = position.x * min(maxPixelRadius, maxStdDev * sqrt(eigen1));
float scale2 = position.y * min(maxPixelRadius, maxStdDev * sqrt(eigen2));
vec2 pixelOffset = eigenVec1 * scale1 + eigenVec2 * scale2;
vec2 ndcOffset = (2.0 / scaledRenderSize) * pixelOffset;
vec3 ndc = vec3(ndcCenter.xy + ndcOffset, ndcCenter.z);
vRgba = rgba;
vSplatUv = position.xy * maxStdDev;
vNdc = ndc;
gl_Position = vec4(ndc.xy * clipCenter.w, clipCenter.zw);
}`;let be=null;function To(){return be||(E.ShaderChunk.splatDefines=Jo,be={splatVertex:vo,splatFragment:bo}),be}const Dg=5;let We=!1,je=!1,iQ;function Ho(t){let A=!1;return t instanceof ZA?!0:(t.traverse(e=>{A=A||e instanceof ZA}),A)}const QQ=E.Scene.prototype.add;E.Scene.prototype.add=function(t){return We=We||Ho(t),je=je||t instanceof Ot,QQ.call(this,t),this};const Ko=E.Scene.prototype.onBeforeRender;E.Scene.prototype.onBeforeRender=function(t){if(We){if(!je){const A=iQ||new Ot({renderer:t});this.add(A)}E.Scene.prototype.onBeforeRender=Ko,E.Scene.prototype.add=QQ}};const nA=class nA extends E.Mesh{constructor(A){const e=nA.makeUniforms(),g=To(),I=A.premultipliedAlpha??!0,s=new E.ShaderMaterial({glslVersion:E.GLSL3,vertexShader:g.splatVertex,fragmentShader:g.splatFragment,uniforms:e,transparent:!0,blending:I?E.CustomBlending:E.NormalBlending,blendSrc:I?E.OneFactor:E.SrcAlphaFactor,blendDst:I?E.OneMinusSrcAlphaFactor:E.OneFactor,depthTest:!0,depthWrite:!1,side:E.DoubleSide});super(yg,s),this.splatTexture=null,this.autoViewpoints=[],this.rotateToAccumulator=new Lt({value:new E.Quaternion}),this.translateToAccumulator=new xt({value:new E.Vector3}),this.lastFrame=-1,this.lastUpdateTime=null,this.defaultCameras=[],this.pendingUpdate=null,this.envViewpoint=null,this.frustumCulled=!1,this.renderer=A.renderer,this.material=s,this.uniforms=e;const B=GA({gsplat:AA},{gsplat:AA},({gsplat:i})=>{if(!i)throw new Error("gsplat not defined");return i=Ag(i,{rotate:this.rotateToAccumulator,translate:this.translateToAccumulator}),{gsplat:i}});this.modifier=new AQ(B),this.premultipliedAlpha=I,this.autoUpdate=A.autoUpdate??!0,this.preUpdate=A.preUpdate??!1,this.needsUpdate=!1,this.originDistance=A.originDistance??1,this.maxStdDev=A.maxStdDev??Math.sqrt(8),this.maxPixelRadius=A.maxPixelRadius??512,this.minAlpha=A.minAlpha??.5*(1/255),this.enable2DGS=A.enable2DGS??!1,this.preBlurAmount=A.preBlurAmount??0,this.blurAmount=A.blurAmount??.3,this.focalDistance=A.focalDistance??0,this.apertureAngle=A.apertureAngle??0,this.falloff=A.falloff??1,this.clipXY=A.clipXY??1.4,this.focalAdjustment=A.focalAdjustment??1,this.splatEncoding=A.splatEncoding??{...Me},this.active=new Ee,this.accumulatorCount=1,this.freeAccumulators=[];for(let i=0;i<1;++i)this.freeAccumulators.push(new Ee),this.accumulatorCount+=1;this.defaultView=new _t({...A.view,autoUpdate:!0,spark:this}),this.viewpoint=this.defaultView,this.prepareViewpoint(this.viewpoint),this.clock=A.clock?WI(A.clock):new E.Clock,iQ=this}static makeUniforms(){return{renderSize:{value:new E.Vector2},near:{value:.1},far:{value:1e3},numSplats:{value:0},renderToViewQuat:{value:new E.Quaternion},renderToViewPos:{value:new E.Vector3},maxStdDev:{value:1},maxPixelRadius:{value:512},minAlpha:{value:.00196078431372549},enable2DGS:{value:!1},preBlurAmount:{value:0},blurAmount:{value:.3},focalDistance:{value:0},apertureAngle:{value:0},falloff:{value:1},clipXY:{value:1.4},focalAdjustment:{value:1},splatTexEnable:{value:!1},splatTexture:{type:"t",value:nA.EMPTY_SPLAT_TEXTURE},splatTexMul:{value:new E.Matrix2},splatTexAdd:{value:new E.Vector2},splatTexNear:{value:.1},splatTexFar:{value:1e3},splatTexMid:{value:0},packedSplats:{type:"t",value:HA.getEmpty()},rgbMinMaxLnScaleMinMax:{value:new E.Vector4},time:{value:0},deltaTime:{value:0},premultipliedAlpha:{value:!0},encodeLinear:{value:!1},debugFlag:{value:!1}}}canAllocAccumulator(){return this.freeAccumulators.length>0||this.accumulatorCount<Dg}maybeAllocAccumulator(){let A=this.freeAccumulators.pop();if(A===void 0){if(this.accumulatorCount>=Dg)return null;A=new Ee,this.accumulatorCount+=1}return A.refCount=1,A}releaseAccumulator(A){A.refCount-=1,A.refCount===0&&this.freeAccumulators.push(A)}newViewpoint(A){return new _t({...A,spark:this})}onBeforeRender(A,e,g){var r,h;const I=this.time??this.clock.getElapsedTime(),s=I-(this.viewpoint.lastTime??I);this.viewpoint.lastTime=I;const B=A.info.render.frame,i=B!==this.lastFrame;this.lastFrame=B;const Q=this.viewpoint;if(Q===this.defaultView){if(i)if(!A.xr.isPresenting)this.defaultView.viewToWorld=g.matrixWorld.clone(),this.defaultCameras=[this.defaultView.viewToWorld];else{const c=A.xr.getCamera().cameras;this.defaultCameras=c.map(l=>l.matrixWorld),this.defaultView.viewToWorld=qo(this.defaultCameras)??new E.Matrix4}this.autoUpdate&&this.update({scene:e,viewToWorld:this.defaultView.viewToWorld})}if(i){const c=this.premultipliedAlpha?E.CustomBlending:E.NormalBlending;c!==this.material.blending&&(this.material.blending=c,this.material.blendSrc=this.premultipliedAlpha?E.OneFactor:E.SrcAlphaFactor,this.material.blendDst=this.premultipliedAlpha?E.OneMinusSrcAlphaFactor:E.OneFactor,this.material.needsUpdate=!0),this.uniforms.premultipliedAlpha.value=this.premultipliedAlpha,this.uniforms.time.value=I,this.uniforms.deltaTime.value=s,this.uniforms.debugFlag.value=performance.now()/1e3%2<1}if(Q.target)this.uniforms.renderSize.value.set(Q.target.width,Q.target.height);else{const c=A.getDrawingBufferSize(this.uniforms.renderSize.value);if(c.x===1&&c.y===1){const l=(r=A.xr.getSession())==null?void 0:r.renderState.baseLayer;l&&(c.x=l.framebufferWidth,c.y=l.framebufferHeight)}}const C=g;if(this.uniforms.near.value=C.near,this.uniforms.far.value=C.far,this.uniforms.encodeLinear.value=Q.encodeLinear,this.uniforms.maxStdDev.value=this.maxStdDev,this.uniforms.maxPixelRadius.value=this.maxPixelRadius,this.uniforms.minAlpha.value=this.minAlpha,this.uniforms.enable2DGS.value=this.enable2DGS,this.uniforms.preBlurAmount.value=this.preBlurAmount,this.uniforms.blurAmount.value=this.blurAmount,this.uniforms.focalDistance.value=this.focalDistance,this.uniforms.apertureAngle.value=this.apertureAngle,this.uniforms.falloff.value=this.falloff,this.uniforms.clipXY.value=this.clipXY,this.uniforms.focalAdjustment.value=this.focalAdjustment,this.splatTexture){const{enable:c,texture:l,multiply:u,add:w,near:D,far:y,mid:d}=this.splatTexture;c&&l?(this.uniforms.splatTexEnable.value=!0,this.uniforms.splatTexture.value=l,u?this.uniforms.splatTexMul.value.fromArray(u.elements):this.uniforms.splatTexMul.value.set(.5/this.maxStdDev,0,0,.5/this.maxStdDev),this.uniforms.splatTexAdd.value.set((w==null?void 0:w.x)??.5,(w==null?void 0:w.y)??.5),this.uniforms.splatTexNear.value=D??this.uniforms.near.value,this.uniforms.splatTexFar.value=y??this.uniforms.far.value,this.uniforms.splatTexMid.value=d??0):(this.uniforms.splatTexEnable.value=!1,this.uniforms.splatTexture.value=nA.EMPTY_SPLAT_TEXTURE)}else this.uniforms.splatTexEnable.value=!1,this.uniforms.splatTexture.value=nA.EMPTY_SPLAT_TEXTURE;const a=((h=Q.display)==null?void 0:h.accumulator.toWorld)??new E.Matrix4,n=g.matrixWorld.clone().invert();a.clone().premultiply(n).decompose(this.uniforms.renderToViewPos.value,this.uniforms.renderToViewQuat.value,new E.Vector3)}prepareViewpoint(A){var e,g,I,s;if(this.viewpoint=A??this.viewpoint,this.viewpoint.display){const{accumulator:B,geometry:i}=this.viewpoint.display;this.uniforms.numSplats.value=B.splats.numSplats,this.uniforms.packedSplats.value=B.splats.getTexture(),this.uniforms.rgbMinMaxLnScaleMinMax.value.set(((e=B.splats.splatEncoding)==null?void 0:e.rgbMin)??0,((g=B.splats.splatEncoding)==null?void 0:g.rgbMax)??1,((I=B.splats.splatEncoding)==null?void 0:I.lnScaleMin)??kA,((s=B.splats.splatEncoding)==null?void 0:s.lnScaleMax)??RA),this.geometry=i}else this.uniforms.numSplats.value=0,this.uniforms.packedSplats.value=HA.getEmpty(),this.geometry=yg}update({scene:A,viewToWorld:e}){const g=this.matrixWorld.clone();this.preUpdate?this.updateInternal({scene:A,originToWorld:g,viewToWorld:e}):(this.pendingUpdate={scene:A,originToWorld:g},setTimeout(()=>{if(this.pendingUpdate){const{scene:I,originToWorld:s}=this.pendingUpdate;this.pendingUpdate=null,this.updateInternal({scene:I,originToWorld:s,viewToWorld:e})}},1))}updateInternal({scene:A,originToWorld:e,viewToWorld:g}){var h;if(!this.canAllocAccumulator())return!1;e||(e=this.active.toWorld),g=g??e.clone();const I=this.time??this.clock.getElapsedTime(),s=I-(this.lastUpdateTime??I);this.lastUpdateTime=I;const B=this.active.mapping.reduce((c,l)=>(c.set(l.node,l),c),new Map),{generators:i,visibleGenerators:Q,globalEdits:C}=this.compileScene(A);for(const c of i)(h=c.frameUpdate)==null||h.call(c,{object:c,time:I,deltaTime:s,viewToWorld:g,globalEdits:C});const a=new Set(Q.map(c=>c.uuid));for(const c of i){const l=B.get(c),w=c.generator&&a.has(c.uuid)?c.numSplats:0;(this.needsUpdate||c.generator!==(l==null?void 0:l.generator)||w!==(l==null?void 0:l.count))&&c.updateVersion()}const n=!le({matrix1:e,matrix2:this.active.toWorld,maxDistance:this.originDistance}),o=this.needsUpdate||n||i.length!==B.size||i.some(c=>{var l;return c.version!==((l=B.get(c))==null?void 0:l.version)});this.needsUpdate=!1;let r=null;if(o){if(r=this.maybeAllocAccumulator(),!r)throw new Error("Unreachable");const c=!le({matrix1:e,matrix2:this.active.toWorld,maxDistance:1e-5,minCoorient:.99999}),u=Q.map((M,p)=>{const f=B.get(M);return f?[M.version-f.version,f.base,M]:[Number.POSITIVE_INFINITY,M.version,M]}).sort((M,p)=>M[0]!==p[0]?M[0]-p[0]:M[1]-p[1]).map(([M,p,f])=>f),w=u.map(M=>M.numSplats),{maxSplats:D,mapping:y}=r.splats.generateMapping(w),d=u.map((M,p)=>{const{base:f,count:R}=y[p];return{node:M,generator:M.generator,version:M.version,base:f,count:R}});e.clone().invert().decompose(this.translateToAccumulator.value,this.rotateToAccumulator.value,new E.Vector3),r.ensureGenerate(D),r.splats.splatEncoding={...this.splatEncoding},r.generateSplats({renderer:this.renderer,modifier:this.modifier,generators:d,forceUpdate:c,originToWorld:e}),r.splatsVersion=this.active.splatsVersion+1;const m=r.hasCorrespondence(this.active);r.mappingVersion=this.active.mappingVersion+(m?0:1),this.releaseAccumulator(this.active),this.active=r,this.prepareViewpoint()}return setTimeout(()=>{for(const c of this.autoViewpoints)c.autoPoll({accumulator:r??void 0})},1),!0}compileScene(A){const e=[];A.traverse(s=>{s instanceof kt&&e.push(s)});const g=[];A.traverseVisible(s=>{s instanceof kt&&g.push(s)});const I=new Set;return A.traverseVisible(s=>{if(s instanceof jt){let B=s.parent;for(;B!=null&&!(B instanceof ZA);)B=B.parent;B==null&&I.add(s)}}),{generators:e,visibleGenerators:g,globalEdits:Array.from(I)}}async renderEnvMap({renderer:A,scene:e,worldCenter:g,size:I=256,near:s=.1,far:B=1e3,hideObjects:i=[],update:Q=!1}){var r,h;if(this.envViewpoint||(this.envViewpoint=this.newViewpoint({sort360:!0})),!nA.cubeRender||nA.cubeRender.target.width!==I||nA.cubeRender.near!==s||nA.cubeRender.far!==B){nA.cubeRender&&nA.cubeRender.target.dispose();const c=new E.WebGLCubeRenderTarget(I,{format:E.RGBAFormat,generateMipmaps:!0,minFilter:E.LinearMipMapLinearFilter}),l=new E.CubeCamera(s,B,c);nA.cubeRender={target:c,camera:l,near:s,far:B}}nA.pmrem||(nA.pmrem=new E.PMREMGenerator(A??this.renderer));const C=new E.Matrix4().setPosition(g);await((r=this.envViewpoint)==null?void 0:r.prepare({scene:e,viewToWorld:C,update:Q}));const{target:a,camera:n}=nA.cubeRender;n.position.copy(g);const o=new Map;for(const c of i)o.set(c,c.visible),c.visible=!1;this.prepareViewpoint(this.envViewpoint),n.update(A??this.renderer,e),this.prepareViewpoint(this.defaultView);for(const[c,l]of o.entries())c.visible=l;return(h=nA.pmrem)==null?void 0:h.fromCubemap(a.texture).texture}recurseSetEnvMap(A,e){A.traverse(g=>{if(g instanceof E.Mesh)if(Array.isArray(g.material))for(const I of g.material)I instanceof E.MeshStandardMaterial&&(I.envMap=e);else g.material instanceof E.MeshStandardMaterial&&(g.material.envMap=e)})}getRgba({generator:A,rgba:e}){const g=this.active.mapping.find(({node:I})=>I===A);if(!g)throw new Error("Generator not found");return e=e??new Ze,e.fromPackedSplats({packedSplats:this.active.splats,base:g.base,count:g.count,renderer:this.renderer}),e}async readRgba({generator:A,rgba:e}){return e=this.getRgba({generator:A,rgba:e}),e.read()}};nA.cubeRender=null,nA.pmrem=null,nA.EMPTY_SPLAT_TEXTURE=new E.Data3DTexture;let Ot=nA;const yg=new Xe(new Uint32Array(1),0);GA({packedSplats:ge,index:"int"},{gsplat:AA},({packedSplats:t,index:A})=>{if(!t||!A)throw new Error("Invalid input");return{gsplat:Gt(t,A)}});function qo(t){if(t.length===0)return null;const A=new E.Vector3,e=new E.Quaternion,g=new E.Vector3,I=[],s=[];for(const B of t)B.decompose(A,e,g),I.push(A),s.push(e);return new E.Matrix4().compose(PI(I),_I(s),new E.Vector3(1,1,1))}function zo(t,A,e){const g=Math.floor(t.length/32);if(g*32!==t.length)throw new Error("Invalid .splat file size");const I=new Float32Array(t.buffer);for(let s=0;s<g;++s){const B=s*32,i=s*8,Q=I[i+0],C=I[i+1],a=I[i+2],n=I[i+3],o=I[i+4],r=I[i+5],h=t[B+24]/255,c=t[B+25]/255,l=t[B+26]/255,u=t[B+27]/255,w=(t[B+28]-128)/128,D=(t[B+29]-128)/128,y=(t[B+30]-128)/128,d=(t[B+31]-128)/128;e(s,Q,C,a,n,o,r,D,y,d,w,u,h,c,l)}}const pg={0:{bytesPerCenter:12,bytesPerScale:12,bytesPerRotation:16,bytesPerColor:4,bytesPerSphericalHarmonicsComponent:4,scaleOffsetBytes:12,rotationOffsetBytes:24,colorOffsetBytes:40,sphericalHarmonicsOffsetBytes:44,scaleRange:1},1:{bytesPerCenter:6,bytesPerScale:6,bytesPerRotation:8,bytesPerColor:4,bytesPerSphericalHarmonicsComponent:2,scaleOffsetBytes:6,rotationOffsetBytes:12,colorOffsetBytes:20,sphericalHarmonicsOffsetBytes:24,scaleRange:32767},2:{bytesPerCenter:6,bytesPerScale:6,bytesPerRotation:8,bytesPerColor:4,bytesPerSphericalHarmonicsComponent:1,scaleOffsetBytes:6,rotationOffsetBytes:12,colorOffsetBytes:20,sphericalHarmonicsOffsetBytes:24,scaleRange:32767}},Vo={0:0,1:9,2:24,3:45};function Zo(t,A,e,g){var c;let B=0;const i=new DataView(t.buffer,B,4096);B+=4096;const Q=i.getUint8(0),C=i.getUint8(1);if(Q!==0||C<1)throw new Error(`Unsupported .ksplat version: ${Q}.${C}`);const a=i.getUint32(4,!0);i.getUint32(16,!0);const n=i.getUint16(20,!0);if(n<0||n>2)throw new Error(`Invalid .ksplat compression level: ${n}`);const o=i.getFloat32(36,!0)||-1.5,r=i.getFloat32(40,!0)||1.5;let h=4096+a*1024;for(let l=0;l<a;++l){let u=function(NA,K){if(n===0)return b.getFloat32(NA+W+K*4,!0);if(n===1)return DA(b.getUint16(NA+W+K*2,!0));const jA=b.getUint8(NA+W+K)/255;return o+jA*(r-o)};const w=new DataView(t.buffer,B,1024);B+=1024;const D=w.getUint32(0,!0),y=w.getUint32(4,!0),d=w.getUint32(8,!0),m=w.getUint32(12,!0),M=w.getFloat32(16,!0),p=w.getUint16(20,!0),f=(w.getUint32(24,!0)||((c=pg[n])==null?void 0:c.scaleRange))??1,R=w.getUint32(32,!0),N=R*d,S=w.getUint32(36,!0),L=S*4,x=p*m+L,G=w.getUint16(40,!0),U=Vo[G],{bytesPerCenter:J,bytesPerScale:P,bytesPerRotation:T,bytesPerColor:eA,bytesPerSphericalHarmonicsComponent:z,scaleOffsetBytes:_,rotationOffsetBytes:H,colorOffsetBytes:O,sphericalHarmonicsOffsetBytes:W}=pg[n],$=J+P+T+eA+U*z,Y=$*y,yA=Y+x,aA=[0,3,6,1,4,7,2,5,8],pA=[9,14,19,10,15,20,11,16,21,12,17,22,13,18,23],dA=[24,31,38,25,32,39,26,33,40,27,34,41,28,35,42,29,36,43,30,37,44],SA=G>=1?new Float32Array(3*3):void 0,cA=G>=2?new Float32Array(5*3):void 0,bA=G>=3?new Float32Array(7*3):void 0,mA=M/2/f,OA=h+L,$A=h+x,b=new DataView(t.buffer,$A,Y),wA=new Float32Array(t.buffer,OA,m*3),WA=new Uint32Array(t.buffer,h,S);let Jt=R,se=N;for(let NA=0;NA<D;++NA){const K=NA*$;let jA;if(NA<N)jA=Math.floor(NA/d);else{const At=WA[Jt-R];NA>=se+At&&(Jt+=1,se+=At),jA=Jt}const me=n===0?b.getFloat32(K+0,!0):(b.getUint16(K+0,!0)-f)*mA+wA[3*jA+0],Ne=n===0?b.getFloat32(K+4,!0):(b.getUint16(K+2,!0)-f)*mA+wA[3*jA+1],Fe=n===0?b.getFloat32(K+8,!0):(b.getUint16(K+4,!0)-f)*mA+wA[3*jA+2],Ge=n===0?b.getFloat32(K+_+0,!0):DA(b.getUint16(K+_+0,!0)),xe=n===0?b.getFloat32(K+_+4,!0):DA(b.getUint16(K+_+2,!0)),DQ=n===0?b.getFloat32(K+_+8,!0):DA(b.getUint16(K+_+4,!0)),yQ=n===0?b.getFloat32(K+H+0,!0):DA(b.getUint16(K+H+0,!0)),pQ=n===0?b.getFloat32(K+H+4,!0):DA(b.getUint16(K+H+2,!0)),dQ=n===0?b.getFloat32(K+H+8,!0):DA(b.getUint16(K+H+4,!0)),fQ=n===0?b.getFloat32(K+H+12,!0):DA(b.getUint16(K+H+6,!0)),MQ=b.getUint8(K+O+0)/255,SQ=b.getUint8(K+O+1)/255,mQ=b.getUint8(K+O+2)/255,NQ=b.getUint8(K+O+3)/255;if(e(NA,me,Ne,Fe,Ge,xe,DQ,pQ,dQ,fQ,yQ,NQ,MQ,SQ,mQ),G>=1&&SA){for(const[At,bt]of aA.entries())SA[At]=u(K,bt);if(cA)for(const[At,bt]of pA.entries())cA[At]=u(K,bt);if(bA)for(const[At,bt]of dA.entries())bA[At]=u(K,bt);g==null||g(NA,SA,cA,bA)}}h+=yA}}class nQ{constructor({fileBytes:A}){this.fileBytes=A instanceof ArrayBuffer?new Uint8Array(A):A,this.reader=new es({fileBytes:this.fileBytes});const e=new DataView(this.reader.read(16).buffer);if(e.getUint32(0,!0)!==1347635022)throw new Error("Invalid SPZ file");if(this.version=e.getUint32(4,!0),this.version<1||this.version>2)throw new Error(`Unsupported SPZ version: ${this.version}`);this.numSplats=e.getUint32(8,!0),this.shDegree=e.getUint8(12),this.fractionalBits=e.getUint8(13),this.flags=e.getUint8(14),this.flagAntiAlias=(this.flags&1)!==0,this.reserved=e.getUint8(15),this.parsed=!1}parseSplats(A,e,g,I,s,B){if(this.parsed)throw new Error("SPZ file already parsed");if(this.parsed=!0,this.version===1){const i=this.reader.read(this.numSplats*3*2),Q=new Uint16Array(i.buffer);for(let C=0;C<this.numSplats;C++){const a=C*3,n=DA(Q[a]),o=DA(Q[a+1]),r=DA(Q[a+2]);A==null||A(C,n,o,r)}}else if(this.version===2){const i=1<<this.fractionalBits,Q=this.reader.read(this.numSplats*3*3);for(let C=0;C<this.numSplats;C++){const a=C*9,n=((Q[a+2]<<24|Q[a+1]<<16|Q[a]<<8)>>8)/i,o=((Q[a+5]<<24|Q[a+4]<<16|Q[a+3]<<8)>>8)/i,r=((Q[a+8]<<24|Q[a+7]<<16|Q[a+6]<<8)>>8)/i;A==null||A(C,n,o,r)}}else throw new Error("Unreachable");{const i=this.reader.read(this.numSplats);for(let Q=0;Q<this.numSplats;Q++)e==null||e(Q,i[Q]/255)}{const i=this.reader.read(this.numSplats*3),Q=aQ/.15;for(let C=0;C<this.numSplats;C++){const a=C*3,n=(i[a]/255-.5)*Q+.5,o=(i[a+1]/255-.5)*Q+.5,r=(i[a+2]/255-.5)*Q+.5;g==null||g(C,n,o,r)}}{const i=this.reader.read(this.numSplats*3);for(let Q=0;Q<this.numSplats;Q++){const C=Q*3,a=Math.exp(i[C]/16-10),n=Math.exp(i[C+1]/16-10),o=Math.exp(i[C+2]/16-10);I==null||I(Q,a,n,o)}}{const i=this.reader.read(this.numSplats*3);for(let Q=0;Q<this.numSplats;Q++){const C=Q*3,a=i[C]/127.5-1,n=i[C+1]/127.5-1,o=i[C+2]/127.5-1,r=Math.sqrt(Math.max(0,1-a*a-n*n-o*o));s==null||s(Q,a,n,o,r)}}if(B&&this.shDegree>=1){const i=new Float32Array(9),Q=this.shDegree>=2?new Float32Array(5*3):void 0,C=this.shDegree>=3?new Float32Array(7*3):void 0,a=this.reader.read(this.numSplats*CQ[this.shDegree]*3);let n=0;for(let o=0;o<this.numSplats;o++){for(let r=0;r<9;++r)i[r]=(a[n+r]-128)/128;if(n+=9,Q){for(let r=0;r<15;++r)Q[r]=(a[n+r]-128)/128;n+=15}if(C){for(let r=0;r<21;++r)C[r]=(a[n+r]-128)/128;n+=21}B==null||B(o,i,Q,C)}}}}const CQ={1:3,2:8,3:15},aQ=.28209479177387814,Xo=1347635022,Wo=2,jo=1;class PA{constructor({numSplats:A,shDegree:e,fractionalBits:g=12,flagAntiAlias:I=!0}){this.clippedCount=0;const s=19+(e>=1?9:0)+(e>=2?15:0)+(e>=3?21:0),B=16+A*s;this.buffer=new ArrayBuffer(B),this.view=new DataView(this.buffer),this.view.setUint32(0,Xo,!0),this.view.setUint32(4,Wo,!0),this.view.setUint32(8,A,!0),this.view.setUint8(12,e),this.view.setUint8(13,g),this.view.setUint8(14,I?jo:0),this.view.setUint8(15,0),this.numSplats=A,this.shDegree=e,this.fractionalBits=g,this.fraction=1<<g,this.flagAntiAlias=I}setCenter(A,e,g,I){const s=Math.round(e*this.fraction),B=Math.max(-8388607,Math.min(8388607,s)),i=Math.round(g*this.fraction),Q=Math.max(-8388607,Math.min(8388607,i)),C=Math.round(I*this.fraction),a=Math.max(-8388607,Math.min(8388607,C));(s!==B||i!==Q||C!==a)&&(this.clippedCount+=1);const r=16+A*9;this.view.setUint8(r,B&255),this.view.setUint8(r+1,B>>8&255),this.view.setUint8(r+2,B>>16&255),this.view.setUint8(r+3,Q&255),this.view.setUint8(r+4,Q>>8&255),this.view.setUint8(r+5,Q>>16&255),this.view.setUint8(r+6,a&255),this.view.setUint8(r+7,a>>8&255),this.view.setUint8(r+8,a>>16&255)}setAlpha(A,e){const g=16+this.numSplats*9+A;this.view.setUint8(g,Math.max(0,Math.min(255,Math.round(e*255))))}static scaleRgb(A){const e=((A-.5)/(aQ/.15)+.5)*255;return Math.max(0,Math.min(255,Math.round(e)))}setRgb(A,e,g,I){const s=16+this.numSplats*10+A*3;this.view.setUint8(s,PA.scaleRgb(e)),this.view.setUint8(s+1,PA.scaleRgb(g)),this.view.setUint8(s+2,PA.scaleRgb(I))}setScale(A,e,g,I){const s=16+this.numSplats*13+A*3;this.view.setUint8(s,Math.max(0,Math.min(255,Math.round((Math.log(e)+10)*16)))),this.view.setUint8(s+1,Math.max(0,Math.min(255,Math.round((Math.log(g)+10)*16)))),this.view.setUint8(s+2,Math.max(0,Math.min(255,Math.round((Math.log(I)+10)*16))))}setQuat(A,e,g,I,s){const B=16+this.numSplats*16+A*3,i=s<0;this.view.setUint8(B,Math.max(0,Math.min(255,Math.round(((i?-e:e)+1)*127.5)))),this.view.setUint8(B+1,Math.max(0,Math.min(255,Math.round(((i?-g:g)+1)*127.5)))),this.view.setUint8(B+2,Math.max(0,Math.min(255,Math.round(((i?-I:I)+1)*127.5))))}static quantizeSh(A,e){const g=Math.round(A*128)+128,I=1<<8-e,s=Math.floor((g+I/2)/I)*I;return Math.max(0,Math.min(255,s))}setSh(A,e,g,I){const s=CQ[this.shDegree]||0,B=16+this.numSplats*19+A*s*3;for(let i=0;i<9;++i)this.view.setUint8(B+i,PA.quantizeSh(e[i],5));if(g){const i=B+9;for(let Q=0;Q<15;++Q)this.view.setUint8(i+Q,PA.quantizeSh(g[Q],4));if(I){const Q=i+15;for(let C=0;C<21;++C)this.view.setUint8(Q+C,PA.quantizeSh(I[C],4))}}}async finalize(){const A=new Uint8Array(this.buffer),g=new ReadableStream({async start(B){B.enqueue(A),B.close()}}).pipeThrough(new CompressionStream("gzip")),s=await new Response(g).arrayBuffer();return console.log("Compressed",A.length,"bytes to",s.byteLength,"bytes"),new Uint8Array(s)}}async function Po(t){var a,n,o;const A=new ko,{inputs:e,clipXyz:g,maxSh:I,fractionalBits:s=12,opacityThreshold:B}=t;for(const r of e){let h=function(p){return p.multiplyScalar(D),p.applyQuaternion(y),p.add(d),p},c=function(p){return p.multiplyScalar(D),p},l=function(p){return p.premultiply(y),p},u=function(p){return!m||m.containsPoint(p)},w=function(p){return B!==void 0?p>=B:!0};const D=((a=r.transform)==null?void 0:a.scale)??1,y=new E.Quaternion().fromArray(((n=r.transform)==null?void 0:n.quaternion)??[0,0,0,1]),d=new E.Vector3().fromArray(((o=r.transform)==null?void 0:o.translate)??[0,0,0]),m=g?new E.Box3(new E.Vector3().fromArray(g.min),new E.Vector3().fromArray(g.max)):void 0;let M=r.fileType;switch(M||(M=Qg(r.fileBytes),!M&&r.pathOrUrl&&(M=BQ(r.pathOrUrl))),M){case St.PLY:{const p=new Pt({fileBytes:r.fileBytes});await p.parseHeader();let f=null;p.parseSplats((R,N,S,L,x,G,U,J,P,T,eA,z,_,H,O)=>{const W=h(new E.Vector3(N,S,L));if(u(W)&&w(z)){f=A.pushSplat(),A.setCenter(f,W.x,W.y,W.z);const $=c(new E.Vector3(x,G,U));A.setScale(f,$.x,$.y,$.z);const Y=l(new E.Quaternion(J,P,T,eA));A.setQuaternion(f,Y.x,Y.y,Y.z,Y.w),A.setOpacity(f,z),A.setColor(f,_,H,O)}else f=null},(R,N,S,L)=>{N&&f!==null&&A.setSh1(f,N),S&&f!==null&&A.setSh2(f,S),L&&f!==null&&A.setSh3(f,L)});break}case St.SPZ:{const p=new nQ({fileBytes:r.fileBytes}),f=new Int32Array(p.numSplats);f.fill(-1);const R=new Float32Array(p.numSplats*3),N=new E.Vector3;p.parseSplats((S,L,x,G)=>{const U=h(new E.Vector3(L,x,G));R[S*3]=U.x,R[S*3+1]=U.y,R[S*3+2]=U.z},(S,L)=>{N.fromArray(R,S*3),u(N)&&w(L)&&(f[S]=A.pushSplat(),A.setCenter(f[S],N.x,N.y,N.z),A.setOpacity(f[S],L))},(S,L,x,G)=>{f[S]>=0&&A.setColor(f[S],L,x,G)},(S,L,x,G)=>{if(f[S]>=0){const U=c(new E.Vector3(L,x,G));A.setScale(f[S],U.x,U.y,U.z)}},(S,L,x,G,U)=>{if(f[S]>=0){const J=l(new E.Quaternion(L,x,G,U));A.setQuaternion(f[S],J.x,J.y,J.z,J.w)}},(S,L,x,G)=>{f[S]>=0&&(A.setSh1(f[S],L),x&&A.setSh2(f[S],x),G&&A.setSh3(f[S],G))});break}case St.SPLAT:zo(r.fileBytes,p=>{},(p,f,R,N,S,L,x,G,U,J,P,T,eA,z,_)=>{const H=h(new E.Vector3(f,R,N));if(u(H)&&w(T)){const O=A.pushSplat();A.setCenter(O,H.x,H.y,H.z);const W=c(new E.Vector3(S,L,x));A.setScale(O,W.x,W.y,W.z);const $=l(new E.Quaternion(G,U,J,P));A.setQuaternion(O,$.x,$.y,$.z,$.w),A.setOpacity(O,T),A.setColor(O,eA,z,_)}});break;case St.KSPLAT:{let p=null;Zo(r.fileBytes,f=>{},(f,R,N,S,L,x,G,U,J,P,T,eA,z,_,H)=>{const O=h(new E.Vector3(R,N,S));if(u(O)&&w(eA)){p=A.pushSplat(),A.setCenter(p,O.x,O.y,O.z);const W=c(new E.Vector3(L,x,G));A.setScale(p,W.x,W.y,W.z);const $=l(new E.Quaternion(U,J,P,T));A.setQuaternion(p,$.x,$.y,$.z,$.w),A.setOpacity(p,eA),A.setColor(p,z,_,H)}else p=null},(f,R,N,S)=>{p!==null&&(A.setSh1(p,R),N&&A.setSh2(p,N),S&&A.setSh3(p,S))});break}default:throw new Error(`transcodeSpz not implemented for ${M}`)}}const i=Math.min(I??3,A.sh3?3:A.sh2?2:A.sh1?1:0),Q=new PA({numSplats:A.numSplats,shDegree:i,fractionalBits:s,flagAntiAlias:!0});for(let r=0;r<A.numSplats;++r){const h=r*3,c=r*4;Q.setCenter(r,A.centers[h],A.centers[h+1],A.centers[h+2]),Q.setScale(r,A.scales[h],A.scales[h+1],A.scales[h+2]),Q.setQuat(r,A.quaternions[c],A.quaternions[c+1],A.quaternions[c+2],A.quaternions[c+3]),Q.setAlpha(r,A.opacities[r]),Q.setRgb(r,A.colors[h],A.colors[h+1],A.colors[h+2]),A.sh1&&i>=1&&Q.setSh(r,A.sh1.slice(r*9,(r+1)*9),i>=2&&A.sh2?A.sh2.slice(r*15,(r+1)*15):void 0,i>=3&&A.sh3?A.sh3.slice(r*21,(r+1)*21):void 0)}return{fileBytes:await Q.finalize(),clippedCount:Q.clippedCount}}class _o{constructor(A){this.mesh=A.mesh,this.numSplats=A.numSplats??this.mesh.numSplats;const{width:e,height:g,depth:I,maxSplats:s}=MA(this.numSplats);this.skinData=new Uint16Array(s*4),this.skinTexture=new E.DataArrayTexture(this.skinData,e,g,I),this.skinTexture.format=E.RGBAIntegerFormat,this.skinTexture.type=E.UnsignedShortType,this.skinTexture.internalFormat="RGBA16UI",this.skinTexture.needsUpdate=!0,this.numBones=A.numBones??256,this.boneData=new Float32Array(this.numBones*16),this.boneTexture=new E.DataTexture(this.boneData,4,this.numBones,E.RGBAFormat,E.FloatType),this.boneTexture.internalFormat="RGBA32F",this.boneTexture.needsUpdate=!0,this.uniform=new k({key:"skinning",type:EQ,globals:()=>[oQ],value:{numSplats:this.numSplats,numBones:this.numBones,skinTexture:this.skinTexture,boneTexture:this.boneTexture}})}modify(A){return $o(A,this.uniform)}setRestQuatPos(A,e,g){const I=A*16;this.boneData[I+0]=e.x,this.boneData[I+1]=e.y,this.boneData[I+2]=e.z,this.boneData[I+3]=e.w,this.boneData[I+4]=g.x,this.boneData[I+5]=g.y,this.boneData[I+6]=g.z,this.boneData[I+7]=0,this.boneData[I+8]=0,this.boneData[I+9]=0,this.boneData[I+10]=0,this.boneData[I+11]=1,this.boneData[I+12]=0,this.boneData[I+13]=0,this.boneData[I+14]=0,this.boneData[I+15]=0}setBoneQuatPos(A,e,g){const I=A*16,s=new E.Quaternion(this.boneData[I+0],this.boneData[I+1],this.boneData[I+2],this.boneData[I+3]),B=new E.Vector3(this.boneData[I+4],this.boneData[I+5],this.boneData[I+6]),i=s.clone().invert(),Q=g.clone().sub(B);Q.applyQuaternion(i),i.multiply(e);const C=new E.Quaternion(Q.x,Q.y,Q.z,0).multiply(s);this.boneData[I+8]=i.x,this.boneData[I+9]=i.y,this.boneData[I+10]=i.z,this.boneData[I+11]=i.w,this.boneData[I+12]=.5*C.x,this.boneData[I+13]=.5*C.y,this.boneData[I+14]=.5*C.z,this.boneData[I+15]=.5*C.w}setSplatBones(A,e,g){const I=A*4;this.skinData[I+0]=Math.min(255,Math.max(0,Math.round(g.x*255)))+(e.x<<8),this.skinData[I+1]=Math.min(255,Math.max(0,Math.round(g.y*255)))+(e.y<<8),this.skinData[I+2]=Math.min(255,Math.max(0,Math.round(g.z*255)))+(e.z<<8),this.skinData[I+3]=Math.min(255,Math.max(0,Math.round(g.w*255)))+(e.w<<8)}updateBones(){this.boneTexture.needsUpdate=!0,this.mesh.needsUpdate=!0}}const EQ={type:"GsplatSkinning"},oQ=rA(`
struct GsplatSkinning {
int numSplats;
int numBones;
usampler2DArray skinTexture;
sampler2D boneTexture;
};
`),Oo=rA(`
void applyGsplatSkinning(
int numSplats, int numBones,
usampler2DArray skinTexture, sampler2D boneTexture,
int splatIndex, inout vec3 center, inout vec4 quaternion
) {
if ((splatIndex < 0) || (splatIndex >= numSplats)) {
return;
}
uvec4 skinData = texelFetch(skinTexture, splatTexCoord(splatIndex), 0);
float weights[4];
weights[0] = float(skinData.x & 0xffu) / 255.0;
weights[1] = float(skinData.y & 0xffu) / 255.0;
weights[2] = float(skinData.z & 0xffu) / 255.0;
weights[3] = float(skinData.w & 0xffu) / 255.0;
uint boneIndices[4];
boneIndices[0] = (skinData.x >> 8u) & 0xffu;
boneIndices[1] = (skinData.y >> 8u) & 0xffu;
boneIndices[2] = (skinData.z >> 8u) & 0xffu;
boneIndices[3] = (skinData.w >> 8u) & 0xffu;
vec4 quat = vec4(0.0);
vec4 dual = vec4(0.0);
for (int i = 0; i < 4; i++) {
if (weights[i] > 0.0) {
int boneIndex = int(boneIndices[i]);
vec4 boneQuat = vec4(0.0, 0.0, 0.0, 1.0);
vec4 boneDual = vec4(0.0);
if (boneIndex < numBones) {
boneQuat = texelFetch(boneTexture, ivec2(2, boneIndex), 0);
boneDual = texelFetch(boneTexture, ivec2(3, boneIndex), 0);
}
if ((i > 0) && (dot(quat, boneQuat) < 0.0)) {
// Flip sign if next blend is pointing in the opposite direction
boneQuat = -boneQuat;
boneDual = -boneDual;
}
quat += weights[i] * boneQuat;
dual += weights[i] * boneDual;
}
}
// Normalize dual quaternion
float norm = length(quat);
quat /= norm;
dual /= norm;
vec3 translate = vec3(
2.0 * (-dual.w * quat.x + dual.x * quat.w - dual.y * quat.z + dual.z * quat.y),
2.0 * (-dual.w * quat.y + dual.x * quat.z + dual.y * quat.w - dual.z * quat.x),
2.0 * (-dual.w * quat.z - dual.x * quat.y + dual.y * quat.x + dual.z * quat.w)
);
center = quatVec(quat, center) + translate;
quaternion = quatQuat(quat, quaternion);
}
`);function $o(t,A){return new X({inTypes:{gsplat:AA,skinning:EQ},outTypes:{gsplat:AA},globals:()=>[oQ,Oo],inputs:{gsplat:t,skinning:A},statements:({inputs:g,outputs:I})=>{const{skinning:s}=g,{gsplat:B}=I;return JA(`
${B} = ${g.gsplat};
if (isGsplatActive(${B}.flags)) {
applyGsplatSkinning(
${s}.numSplats, ${s}.numBones,
${s}.skinTexture, ${s}.boneTexture,
${B}.index, ${B}.center, ${B}.quaternion
);
}
`)}}).outputs.gsplat}function Ar({splats:t,extents:A,stepSize:e=1,pointRadius:g=.01,pointShadowScale:I=2,opacity:s=1,color:B}){const Q=new E.Vector3,C=new E.Vector3,a=new E.Quaternion(0,0,0,1);B==null&&(B=(o,r)=>o.set(.55+.45*Math.cos(r.x*1),.55+.45*Math.cos(r.y*1),.55+.45*Math.cos(r.z*1)));const n=new E.Color;for(let o=A.min.z;o<A.max.z+1e-6;o+=e)for(let r=A.min.y;r<A.max.y+1e-6;r+=e)for(let h=A.min.x;h<A.max.x+1e-6;h+=e){Q.set(h,r,o);for(let c=0;c<2;++c)C.setScalar(g*(c?1:I)),c?typeof B=="function"?B(n,Q):n.copy(B):n.setScalar(0),t.pushSplat(Q,C,a,s,n)}}function tr({splats:t,scale:A=.25,axisRadius:e=.0075,axisShadowScale:g=2,origins:I=[new E.Vector3]}){const s=new E.Vector3,B=new E.Vector3,i=new E.Quaternion(0,0,0,1),Q=new E.Color,C=1;for(const a of I)for(let n=0;n<3;++n){s.set(a.x+(n===0?A:0),a.y+(n===1?A:0),a.z+(n===2?A:0));for(let o=0;o<2;++o)B.set((n===0?A:e)*(o?1:g),(n===1?A:e)*(o?1:g),(n===2?A:e)*(o?1:g)),Q.setRGB(o===0?0:n===0?1:0,o===0?0:n===1?1:0,o===0?0:n===2?1:0),t.pushSplat(s,B,i,C,Q)}}function er({splats:t,origin:A=new E.Vector3,radius:e=1,maxDepth:g=3,filter:I=null,pointRadius:s=.02,pointThickness:B=.001,color:i=new E.Color(1,1,1)}){const Q={};function C(c){if(I&&!I(c))return;const l=`${c.x},${c.y},${c.z}`;Q[l]||(Q[l]=c)}function a(c,l,u,w){if(C(l),C(u),C(w),c>=g)return;const D=new E.Vector3().addVectors(l,u).normalize(),y=new E.Vector3().addVectors(u,w).normalize(),d=new E.Vector3().addVectors(w,l).normalize();a(c+1,l,D,d),a(c+1,D,u,y),a(c+1,d,y,w),a(c+1,D,y,d)}for(const c of[-1,1])for(const l of[-1,1])for(const u of[-1,1]){const w=new E.Vector3(c,0,0),D=new E.Vector3(0,l,0),y=new E.Vector3(0,0,u);a(0,w,D,y)}const n=Object.values(Q),o=new E.Vector3(s,s,B),r=new E.Quaternion,h=typeof i=="function"?new E.Color:i;for(const c of n)r.setFromUnitVectors(new E.Vector3(0,0,-1),c),typeof i=="function"&&i(h,c),c.multiplyScalar(e),c.add(A),t.pushSplat(c,o,r,1,h)}function gr({text:t,font:A,fontSize:e,color:g,rgb:I,dotRadius:s,textAlign:B,lineHeight:i,objectScale:Q}){A=A??"Arial",e=e??32,g=g??new E.Color(1,1,1),s=s??.8,B=B??"start",i=i??1,Q=Q??1;const C=t.split(`
`),a=document.createElement("canvas"),n=a.getContext("2d");if(!n)throw new Error("Failed to create canvas context");n.font=`${e}px ${A}`,n.textAlign=B;const o=n.measureText(""),r=o.fontBoundingBoxAscent+o.fontBoundingBoxDescent;let h=Number.POSITIVE_INFINITY,c=Number.NEGATIVE_INFINITY,l=Number.POSITIVE_INFINITY,u=Number.NEGATIVE_INFINITY;for(let x=0;x<C.length;++x){const G=n.measureText(C[x]),U=r*i*x;h=Math.min(h,-G.actualBoundingBoxLeft),c=Math.max(c,G.actualBoundingBoxRight),l=Math.min(l,U-G.actualBoundingBoxAscent),u=Math.max(u,U+G.actualBoundingBoxDescent)}const w=Math.floor(h),D=Math.floor(l),y=Math.ceil(c)-w,d=Math.ceil(u)-D;a.width=y,a.height=d,n.font=`${e}px ${A}`,n.textAlign=B,n.textBaseline="alphabetic",n.fillStyle="#FFFFFF";for(let x=0;x<C.length;++x){const G=r*i*x-D;n.fillText(C[x],-w,G)}const m=n.getImageData(0,0,y,d),M=new Uint8Array(m.data.buffer),p=new HA,f=new E.Vector3,R=new E.Vector3().setScalar(s*Q),N=new E.Quaternion(0,0,0,1);I=I??new E.Color(1,1,1);let S=0;for(let x=0;x<d;++x)for(let G=0;G<y;++G){const U=M[S+3];if(U>0){const J=U/255;f.set(G-.5*(y-1),.5*(d-1)-x,0),f.multiplyScalar(Q),p.pushSplat(f,R,N,J,I)}S+=4}const L=new ZA({packedSplats:p});return L.recolor=g,L}function Ir({url:t,dotRadius:A,subXY:e,forEachSplat:g}){return A=A??.8,e=Math.max(1,Math.floor(e??1)),new ZA({constructSplats:async I=>new Promise((s,B)=>{const i=new Image;i.crossOrigin="anonymous",i.onerror=B,i.onload=()=>{const{width:Q,height:C}=i,a=document.createElement("canvas");a.width=Q,a.height=C;const n=a.getContext("2d");if(!n){B(new Error("Failed to create canvas context"));return}n.imageSmoothingEnabled=!0,n.imageSmoothingQuality="high";const o=Math.round(Q/e),r=Math.round(C/e);n.drawImage(i,0,0,o,r);try{const h=n.getImageData(0,0,o,r),c=new Uint8Array(h.data.buffer),l=new E.Vector3,u=new E.Vector3().setScalar(A),w=new E.Quaternion(0,0,0,1),D=new E.Color;let y=0;for(let d=0;d<r;++d)for(let m=0;m<o;++m){const M=y*4,p=c[M+3];if(p>0){let f=p/255;D.set(c[M+0]/255,c[M+1]/255,c[M+2]/255),l.set(m-.5*(o-1),.5*(r-1)-d,0),u.setScalar(A),w.set(0,0,0,1);let R=!0;if(g){const N=g(o,r,y,l,u,w,f,D);f=N??f,R=N!==null}R&&I.pushSplat(l,u,w,f,D)}y+=1}s()}catch(h){B(h)}},i.src=t})})}function sr({box:t,cells:A,dotScale:e,color:g,opacity:I}){A.x=Math.max(1,Math.round(A.x)),A.y=Math.max(1,Math.round(A.y)),A.z=Math.max(1,Math.round(A.z)),I=I??1;const s=A.x*A.y*A.z,B=v("int",A.x),i=v("int",A.y);v("int",A.z);const Q=KA(0),C=new kt({numSplats:s,generator:GA({index:"int"},{gsplat:AA},({index:n})=>{if(!n)throw new Error("index is undefined");const o=Ke(n,B),r=Ce(n,B),h=Ke(r,i),c=Ce(r,i),l=VA({vectorType:"ivec3",x:o,y:h,z:c}),u=IB(Q),w=VA({vectorType:"ivec2",x:n,y:u}),D=Qi(w),y=v("vec3",t.min),d=v("vec3",t.max),m=wt(d,y),M=Ce(hA(lt(l),D),v("vec3",A));let p,f,R;g?(p=v("float",g.r),f=v("float",g.g),R=v("float",g.b)):{r:p,g:f,b:R}=ut(M).outputs;const N=VA({vectorType:"vec4",r:p,g:f,b:R,a:v("float",I)}),S=hA(y,BA(m,M)),L=lt(v("float",e)),x=v("vec4",new E.Quaternion(0,0,0,1));let G=Bt({flags:oe("uint","GSPLAT_FLAG_ACTIVE"),index:n,center:S,scales:L,quaternion:x,rgba:N});return G=a.applyGsplat(G),{gsplat:G}},{globals:()=>[xA]}),update:({time:n})=>{Q.value=n,a.update(C),C.updateVersion()}}),a=new ot;return C}const Br={box:new E.Box3(new E.Vector3(-1,-1,-1),new E.Vector3(1,1,1)),density:100,fallDirection:new E.Vector3(-1,-3,1).normalize(),fallVelocity:.02,wanderScale:.04,wanderVariance:2,color1:new E.Color(1,1,1),color2:new E.Color(.5,.5,1),minScale:.001,maxScale:.005,anisoScale:new E.Vector3(1,1,1)},ir={box:new E.Box3(new E.Vector3(-2,-1,-2),new E.Vector3(2,5,2)),density:10,fallDirection:new E.Vector3(0,-1,0),fallVelocity:2,wanderScale:.1,wanderVariance:1,color1:new E.Color(1,1,1),color2:new E.Color(.25,.25,.5),minScale:.005,maxScale:.01,anisoScale:new E.Vector3(.1,1,.1)};function Qr({box:t,minY:A,numSplats:e,density:g,anisoScale:I,minScale:s,maxScale:B,fallDirection:i,fallVelocity:Q,wanderScale:C,wanderVariance:a,color1:n,color2:o,opacity:r,onFrame:h}){t=t??new E.Box3(new E.Vector3(-1,-1,-1),new E.Vector3(1,1,1));const c=(t.max.x-t.min.x)*(t.max.y-t.min.y)*(t.max.z-t.min.z);g=g??100,e=e??Math.max(1,Math.min(1e6,Math.round(c*g)));const l=KA(s??.001),u=KA(B??.005),w=et(((I==null?void 0:I.clone())??new E.Vector3(1,1,1)).normalize()),D=et((i??new E.Vector3(0,-1,0)).normalize()),y=KA(Q??.02),d=KA(C??.01),m=KA(a??2),M=et(n??new E.Color(1,1,1)),p=et(o??new E.Color(.5,.5,1)),f=KA(r??1),R=KA(0),N=et(new E.Vector3(0,0,0)),S=et(t.min),L=et(t.max),x=KA(A??Number.NEGATIVE_INFINITY),G=wt(L,S),U=new kt({numSplats:e,generator:GA({index:"int"},{gsplat:AA},({index:P})=>{if(!P)throw new Error("index not defined");const T=ze(P),eA=ut(T).outputs.w;let z=lt(T),_=ae(BA(eA,v("float",100)));_=Ve(BA(oe("float","PI"),_)),_=hA(l,BA(_,wt(u,l)));const H=BA(_,w),O=ae(BA(eA,v("float",10))),W=ae(eA),$=is(M,p,W),Y=BA($,O),yA=ze(VA({vectorType:"ivec2",x:P,y:v("int",6837)}));let aA=lt(yA),pA=BA(ut(yA).outputs.w,m);pA=hA(R,pA),z=hA(z,N);const dA=ss(z,v("vec3",new E.Vector3(1,1,1)));z=hA(S,BA(G,dA));const SA=v("vec4",new E.Quaternion(0,0,0,1));aA=Ve(hA(lt(pA),aA)),aA=BA(aA,d);let cA=hA(z,aA),bA=ut(cA).outputs.y;bA=Bs(x,bA),cA=VA({vector:cA,y:bA});let mA=Bt({flags:oe("uint","GSPLAT_FLAG_ACTIVE"),index:P,center:cA,scales:H,quaternion:SA,rgb:Y,opacity:f});return mA=J.applyGsplat(mA),{gsplat:mA}},{globals:()=>[xA]}),update:({object:P,time:T,deltaTime:eA})=>{R.value=T,J.update(U);const z=D.value.clone().multiplyScalar(y.value*eA);N.value.add(z),P.visible=f.value>0,h==null||h({object:P,time:T,deltaTime:eA}),U.updateVersion()}}),J=new ot;return{snow:U,min:S,max:L,minY:x,color1:M,color2:p,opacity:f,fallVelocity:y,wanderVariance:m,wanderScale:d,fallDirection:D,minScale:l,maxScale:u,anisoScale:w}}const nr=Object.freeze(Object.defineProperty({__proto__:null,DEFAULT_RAIN:ir,DEFAULT_SNOW:Br,snowBox:Qr,staticBox:sr},Symbol.toStringTag,{value:"Module"}));function rQ(t){return GA({gsplat:AA},{gsplat:AA},({gsplat:A})=>{if(!A)throw new Error("No gsplat input");let e=He(A);const g=t.applyGsplat(A),I=ct(g).outputs.center,s=He(g),B=JB(I,s),i=vs(B,v("float",0));e=ig(i,Bg(e),e);const Q=hA(BA(e,v("float",.5)),v("float",.5));return A=Bt({gsplat:A,rgb:Q}),{gsplat:A}})}function Cr(t){t.enableWorldToView=!0,t.worldModifier=rQ(t.context.worldToView),t.updateGenerator()}function cQ(t,A,e,g){return GA({gsplat:AA},{gsplat:AA},({gsplat:I})=>{if(!I)throw new Error("No gsplat input");let{center:s}=ct(I).outputs;s=t.apply(s);const{z:B}=ut(s).outputs;let i=ni(Bg(B),A,e);return i=ig(g,wt(v("float",1),i),i),I=Bt({gsplat:I,r:i,g:i,b:i}),{gsplat:I}})}function ar(t,A,e,g){t.enableWorldToView=!0;const I=v("float",A),s=v("float",e),B=v("bool",g??!1);return t.worldModifier=cQ(t.context.worldToView,I,s,B),t.updateGenerator(),{minDepth:I,maxDepth:s,reverse:B}}const Er=Object.freeze(Object.defineProperty({__proto__:null,makeDepthColorModifier:cQ,makeNormalColorModifier:rQ,setDepthColor:ar,setWorldNormalColor:Cr},Symbol.toStringTag,{value:"Module"})),Zt=class Zt{static createButton(A,e={}){const g=navigator.xr;if(!g)return null;const I=g,s=document.createElement("button");A.xr.enabled=!0,A.xr.setReferenceSpaceType("local");function B(){let n=null;async function o(c){console.log("onSessionStarted"),c.addEventListener("end",r),await A.xr.setSession(c),s.textContent="EXIT VR",n=c}function r(){console.log("onSessionEnded"),n==null||n.removeEventListener("end",r),s.textContent="ENTER VR",n=null}s.style.display="",s.style.cursor="pointer",s.style.left="calc(50% - 100px)",s.style.width="200px",s.style.height="100px",s.textContent="ENTER VR";const h={...e,optionalFeatures:[...e.optionalFeatures||[]]};s.onmouseenter=()=>{s.style.opacity="1.0"},s.onmouseleave=()=>{s.style.opacity="0.5"},s.onclick=()=>{n===null?(console.log("requesting session"),I.requestSession("immersive-vr",h).then(o)):(console.log("ending session"),n.end())}}function i(){s.style.display="none",s.style.cursor="auto",s.style.left="calc(50% - 75px)",s.style.width="150px",s.onmouseenter=null,s.onmouseleave=null,s.onclick=null}function Q(){i(),s.textContent="VR NOT SUPPORTED"}function C(n){i(),console.warn("Exception when trying to call xr.isSessionSupported",n),s.textContent="VR NOT ALLOWED"}function a(n){n.style.position="absolute",n.style.bottom="20px",n.style.padding="12px 6px",n.style.border="1px solid #fff",n.style.borderRadius="4px",n.style.background="rgba(0,0,0,0.1)",n.style.color="#fff",n.style.font="normal 13px sans-serif",n.style.textAlign="center",n.style.opacity="0.5",n.style.outline="none",n.style.zIndex="999"}return s.id="VRButton",s.style.display="none",a(s),I.isSessionSupported("immersive-vr").then(n=>{n?B():Q(),n&&Zt.xrSessionIsGranted&&s.click()}).catch(C),s}static registerSessionGrantedListener(){const A=navigator.xr;if(!A)return null;const e=A;/WebXRViewer\//i.test(navigator.userAgent)||e.addEventListener("sessiongranted",()=>{Zt.xrSessionIsGranted=!0})}};Zt.xrSessionIsGranted=!1;let we=Zt;we.registerSessionGrantedListener();const or=.5,rr=.5,cr=0;var Se=(t=>(t.w="wrist",t.t0="thumb-metacarpal",t.t1="thumb-phalanx-proximal",t.t2="thumb-phalanx-distal",t.t3="thumb-tip",t.i0="index-finger-metacarpal",t.i1="index-finger-phalanx-proximal",t.i2="index-finger-phalanx-intermediate",t.i3="index-finger-phalanx-distal",t.i4="index-finger-tip",t.m0="middle-finger-metacarpal",t.m1="middle-finger-phalanx-proximal",t.m2="middle-finger-phalanx-intermediate",t.m3="middle-finger-phalanx-distal",t.m4="middle-finger-tip",t.r0="ring-finger-metacarpal",t.r1="ring-finger-phalanx-proximal",t.r2="ring-finger-phalanx-intermediate",t.r3="ring-finger-phalanx-distal",t.r4="ring-finger-tip",t.p0="pinky-finger-metacarpal",t.p1="pinky-finger-phalanx-proximal",t.p2="pinky-finger-phalanx-intermediate",t.p3="pinky-finger-phalanx-distal",t.p4="pinky-finger-tip",t))(Se||{});const Eg=Object.keys(Se),hr=Eg.length,lr={w:0,t0:1,t1:2,t2:3,t3:4,i0:5,i1:6,i2:7,i3:8,i4:9,m0:10,m1:11,m2:12,m3:13,m4:14,r0:15,r1:16,r2:17,r3:18,r4:19,p0:20,p1:21,p2:22,p3:23,p4:24},Ht={w:.02,t0:.02,t1:.014,t2:.0115,t3:.0085,i0:.022,i1:.012,i2:.0085,i3:.0075,i4:.0065,m0:.021,m1:.012,m2:.008,m3:.0075,m4:.0065,r0:.019,r1:.011,r2:.0075,r3:.007,r4:.006,p0:.012,p1:.01,p2:.007,p3:.0065,p4:.0055},hQ=[["w","t0","t1","t2","t3"],["w","i0","i1","i2","i3","i4"],["w","m0","m1","m2","m3","m4"],["w","r0","r1","r2","r3","r4"],["w","p0","p1","p2","p3","p4"]],lQ=[[8,10,8,6],[8,19,14,8,6],[8,19,14,8,6],[8,19,14,8,6],[8,19,14,8,6]],ur=["t3","i4","m4","r4","p4"],wr=["i4","m4","r4","p4"];var og=(t=>(t.left="left",t.right="right",t))(og||{});const De=Object.keys(og);class Dr{constructor(){this.hands={},this.last={},this.values={},this.tests={},this.lastTests={},this.updated=!1}update({xr:A,xrFrame:e}){const g=A.getSession();if(!g)return;const I=A.getReferenceSpace();if(I&&e.getJointPose){this.last=this.hands,this.lastTests=this.tests,this.hands={},this.values={},this.tests={};for(const s of g.inputSources){if(!s.hand)continue;const B=s.handedness;this.hands[B]={};for(const i of Eg){const Q=s.hand.get(Se[i]);if(Q){const C=e.getJointPose(Q,I);if(C){const{position:a,orientation:n}=C.transform;this.hands[B][i]={position:new gA.Vector3(a.x,a.y,a.z),quaternion:new gA.Quaternion(n.x,n.y,n.z,n.w),radius:C.radius||.001}}}}}for(const s of De)for(const{key:B,value:i}of[{key:`${s}AllTips`,value:this.allTipsTouching(s)},{key:`${s}IndexThumb`,value:this.touching(s,"i4",s,"t3")},{key:`${s}MiddleThumb`,value:this.touching(s,"m4",s,"t3")},{key:`${s}RingThumb`,value:this.touching(s,"r4",s,"t3")},{key:`${s}PinkyThumb`,value:this.touching(s,"p4",s,"t3")},{key:`${s}TriTips`,value:this.triTipsTouching(s)}])this.values[B]=i,this.tests[B]=i===1?!0:i===0?!1:this.lastTests[B]??!1}}makeGhostMesh(){const A=new gA.Vector3,e=new gA.Vector3(.01,.01,.01),g=new gA.Quaternion(0,0,0,1),I=new gA.Color(1,1,1),s=Math.PI*3;new gA.Color(1,1,1);let B=1;const i=new ZA({onFrame:()=>{let Q=0;for(const C of De){const a=this.hands[C];for(const[n,o]of hQ.entries())for(let r=1;r<o.length;++r){const h=lQ[n][r-1]*2,c=r+1===o.length,l=a==null?void 0:a[o[r-1]],u=a==null?void 0:a[o[r]];for(let w=0;w<h;++w){const D=(w+.5)/h;if(B=0,l&&u){A.copy(l.position).lerp(u.position,D),g.copy(l.quaternion).slerp(u.quaternion,D);const y=Ht[o[r-1]],d=Ht[o[r]];let m=(1-D)*y+D*d;c&&D>.8&&(m*=Math.sqrt(1-((D-.8)/.2)**2)),e.set(.65*m,.5*m,.003),I.set(.55+.45*Math.sin(A.x*s),.55+.45*Math.sin(A.y*s),.55+.45*Math.sin(A.z*s)),C==="right"&&I.set(1-I.r,1-I.g,1-I.b),B=.75}i.packedSplats.setSplat(Q,A,e,g,B,I),Q+=1}}}i.packedSplats.numSplats=Q,i.packedSplats.needsUpdate=!0,i.numSplats=Q,i.updateVersion()}});return i}distance(A,e,g,I,s=!1){const B=s?this.last[A]:this.hands[A],i=s?this.last[g]:this.hands[g],Q=B==null?void 0:B[e],C=i==null?void 0:i[I];return!Q||!C?Number.POSITIVE_INFINITY:Q.position.distanceTo(C.position)}separation(A,e,g,I,s=!1){const B=this.distance(A,e,g,I,s);return B===Number.POSITIVE_INFINITY?Number.POSITIVE_INFINITY:B-Ht[e]-Ht[I]}touching(A,e,g,I,s=!1){const B=this.separation(A,e,g,I,s);return B===Number.POSITIVE_INFINITY?Number.POSITIVE_INFINITY:1-Math.max(0,Math.min(1,B/.01-cr))}allTipsTouching(A,e=!1){return Math.min(this.touching(A,"t3",A,"i4",e),this.touching(A,"i4",A,"m4",e),this.touching(A,"m4",A,"r4",e),this.touching(A,"r4",A,"p4",e))}triTipsTouching(A,e=!1){return Math.min(this.touching(A,"t3",A,"i4",e),this.touching(A,"i4",A,"m4",e),this.touching(A,"m4",A,"t3",e))}}class yr{constructor({xrHands:A,control:e,moveInertia:g,rotateInertia:I}){this.lastGrip={},this.lastPivot=new gA.Vector3,this.rotateVelocity=0,this.velocity=new gA.Vector3,this.xrHands=A,this.control=e,this.moveInertia=g??or,this.rotateInertia=I??rr}update(A){var s,B,i,Q,C;const e={};for(const a of De){const n=this.xrHands.hands[a];n&&this.xrHands.tests[`${a}MiddleThumb`]&&(e[a]=new gA.Vector3().add(((s=n.t3)==null?void 0:s.position)??new gA.Vector3).add(((B=n.i4)==null?void 0:B.position)??new gA.Vector3).add(((i=n.m4)==null?void 0:i.position)??new gA.Vector3).add(((Q=n.r4)==null?void 0:Q.position)??new gA.Vector3).add(((C=n.p4)==null?void 0:C.position)??new gA.Vector3).multiplyScalar(1/5))}if(e.left&&e.right&&this.lastGrip.left&&this.lastGrip.right){const a=e.left.clone().add(e.right).multiplyScalar(.5),n=this.lastGrip.left.clone().add(this.lastGrip.right).multiplyScalar(.5);this.lastPivot=a;const o=a.clone().applyMatrix4(this.control.matrix);o.sub(n.clone().applyMatrix4(this.control.matrix)),o.multiplyScalar(1/A),this.velocity.lerp(o,1-Math.exp(-20*A));const r=Math.atan2(e.left.z-a.z,e.left.x-a.x),h=Math.atan2(this.lastGrip.left.z-n.z,this.lastGrip.left.x-n.x);let c=r-h;c>Math.PI?c-=Math.PI*2:c<-Math.PI&&(c+=Math.PI*2);const l=c/A,u=Math.exp(-20*A);this.rotateVelocity=this.rotateVelocity*u+l*(1-u)}else if(this.rotateVelocity*=Math.exp(-A/this.rotateInertia),e.left&&this.lastGrip.left){const a=e.left.clone().applyMatrix4(this.control.matrix);a.sub(this.lastGrip.left.clone().applyMatrix4(this.control.matrix)),a.multiplyScalar(1/A),this.velocity.lerp(a,1-Math.exp(-20*A))}else if(e.right&&this.lastGrip.right){const a=e.right.clone().applyMatrix4(this.control.matrix);a.sub(this.lastGrip.right.clone().applyMatrix4(this.control.matrix)),a.multiplyScalar(1/A),this.velocity.lerp(a,1-Math.exp(-20*A))}else this.velocity.multiplyScalar(Math.exp(-A/this.moveInertia));const g=this.lastPivot.clone().negate(),I=new gA.Matrix4().makeTranslation(g).premultiply(new gA.Matrix4().makeRotationY(this.rotateVelocity*A)).premultiply(new gA.Matrix4().makeTranslation(this.lastPivot));this.control.matrix.multiply(I),this.control.matrix.decompose(this.control.position,this.control.quaternion,this.control.scale),this.control.updateMatrixWorld(!0),this.control.position.sub(this.velocity.clone().multiplyScalar(A)),this.lastGrip=e}}const pr=1,dr=2,fr=.002,Mr=.006,Sr=.0015,mr=.15,Nr=.15,Fr=.1,Gr=2,xr=1,kr=200,Rr=400,Ur=50,Lr={KeyW:new E.Vector3(0,0,-1),KeyS:new E.Vector3(0,0,1),KeyA:new E.Vector3(-1,0,0),KeyD:new E.Vector3(1,0,0),KeyR:new E.Vector3(0,1,0),KeyF:new E.Vector3(0,-1,0)},Yr={ArrowUp:new E.Vector3(0,0,-1),ArrowDown:new E.Vector3(0,0,1),ArrowLeft:new E.Vector3(-1,0,0),ArrowRight:new E.Vector3(1,0,0),PageUp:new E.Vector3(0,1,0),PageDown:new E.Vector3(0,-1,0)},Jr={KeyQ:new E.Vector3(0,0,1),KeyE:new E.Vector3(0,0,-1)},br={Home:new E.Vector3(0,-1,0),End:new E.Vector3(0,1,0),Insert:new E.Vector3(-1,0,0),Delete:new E.Vector3(1,0,0)};class vr{constructor({canvas:A}){this.lastTime=0,this.fpsMovement=new uQ({}),this.pointerControls=new wQ({canvas:A})}update(A){const e=performance.now(),g=(e-(this.lastTime||e))/1e3;this.lastTime=e,this.fpsMovement.update(g,A),this.pointerControls.update(g,A)}}class uQ{constructor({moveSpeed:A,rollSpeed:e,stickThreshold:g,rotateSpeed:I,keycodeMoveMapping:s,keycodeRotateMapping:B,gamepadMapping:i,capsMultiplier:Q,shiftMultiplier:C,ctrlMultiplier:a,xr:n}={}){this.enable=!0,this.moveSpeed=A??pr,this.rollSpeed=e??dr,this.stickThreshold=g??Fr,this.rotateSpeed=I??Gr,this.keycodeMoveMapping=s??{...Lr,...Yr},this.keycodeRotateMapping=B??{...Jr,...br},this.gamepadMapping=i??{4:"rollLeft",5:"rollRight",6:"ctrl",7:"shift"},this.capsMultiplier=Q??10,this.shiftMultiplier=C??5,this.ctrlMultiplier=a??1/5,this.xr=n,this.keydown={},this.keycode={},document.addEventListener("keydown",o=>{this.keydown[o.key]=!0,this.keycode[o.code]=!0}),document.addEventListener("keyup",o=>{this.keydown[o.key]=!1,this.keycode[o.code]=!1}),window.addEventListener("blur",()=>{this.keydown={},this.keycode={}})}update(A,e){var a,n;if(!this.enable)return;const g=[new E.Vector2,new E.Vector2],I=navigator.getGamepads()[0];I&&(g[0].set(I.axes[0],I.axes[1]),g[1].set(I.axes[2],I.axes[3]));const s=(I==null?void 0:I.buttons.map(o=>o.pressed))||[],B=Array.from(((n=(a=this.xr)==null?void 0:a.getSession())==null?void 0:n.inputSources)??[]);for(const o of B){const r=o.gamepad;if(r)switch(o.handedness){case"none":{g[0].x+=r.axes[0],g[0].y+=r.axes[1],g[1].x+=r.axes[2],g[1].y+=r.axes[3];break}case"left":{g[0].x+=r.axes[2],g[0].y+=r.axes[3];break}case"right":{g[1].x+=r.axes[2],g[1].y+=r.axes[3];break}}}for(const o of g)o.x=Math.abs(o.x)>=this.stickThreshold?o.x:0,o.y=Math.abs(o.y)>=this.stickThreshold?o.y:0;const i=new E.Vector3(g[1].x,g[1].y,0).multiplyScalar(this.rotateSpeed);for(const[o,r]of Object.entries(this.keycodeRotateMapping))this.keycode[o]&&i.add(r);for(const o in this.gamepadMapping)if(s[Number.parseInt(o)])switch(this.gamepadMapping[o]){case"rollLeft":i.z+=1;break;case"rollRight":i.z-=1;break}if(i.multiply(new E.Vector3(this.rotateSpeed,this.rotateSpeed,this.rollSpeed)),i.manhattanLength()>0){i.multiplyScalar(A);const o=new E.Euler().setFromQuaternion(e.quaternion,"YXZ");o.y-=i.x,o.x=Math.max(-Math.PI/2,Math.min(Math.PI/2,o.x-i.y)),o.z=Math.max(-Math.PI,Math.min(Math.PI,o.z+i.z)),e.quaternion.setFromEuler(o)}const Q=new E.Vector3(g[0].x,0,g[0].y);for(const[o,r]of Object.entries(this.keycodeMoveMapping))this.keycode[o]&&Q.add(r);let C=1;this.keydown.CapsLock&&(C*=this.capsMultiplier),(this.keycode.ShiftLeft||this.keycode.ShiftRight)&&(C*=this.shiftMultiplier),(this.keycode.ControlLeft||this.keycode.ControlRight)&&(C*=this.ctrlMultiplier);for(const o in this.gamepadMapping)if(s[Number.parseInt(o)])switch(this.gamepadMapping[o]){case"shift":C*=this.shiftMultiplier;break;case"ctrl":C*=this.ctrlMultiplier;break}Q.applyQuaternion(e.quaternion),e.position.add(Q.multiplyScalar(this.moveSpeed*C*A))}}class wQ{constructor({canvas:A,rotateSpeed:e,slideSpeed:g,scrollSpeed:I,swapRotateSlide:s,reverseRotate:B,reverseSlide:i,reverseSwipe:Q,reverseScroll:C,moveInertia:a,rotateInertia:n,pointerRollScale:o,doublePress:r}){this.enable=!0,this.canvas=A,this.rotateSpeed=e??fr,this.slideSpeed=g??Mr,this.scrollSpeed=I??Sr,this.swapRotateSlide=s??!1,this.reverseRotate=B??!1,this.reverseSlide=i??!1,this.reverseSwipe=Q??!1,this.reverseScroll=C??!1,this.moveInertia=a??Nr,this.rotateInertia=n??mr,this.pointerRollScale=o??xr,this.doublePress=r??(()=>{}),this.doublePressLimitMs=Rr,this.doublePressDistance=Ur,this.lastUp=null,this.rotating=null,this.sliding=null,this.dualPress=!1,this.scroll=new E.Vector3,this.rotateVelocity=new E.Vector3,this.moveVelocity=new E.Vector3,A.addEventListener("pointerdown",c=>{const l=this.getPointerPosition(c),u=l.clone(),w=l.clone(),D=!this.swapRotateSlide&&!this.rotating&&(c.pointerType!=="mouse"||c.button===0)||this.swapRotateSlide&&this.sliding&&!this.rotating&&(c.pointerType!=="mouse"||c.button===1),{pointerId:y,timeStamp:d}=c;if(D)this.rotating={initial:u,last:w,position:l,pointerId:y,timeStamp:d},A.setPointerCapture(c.pointerId),this.dualPress=!1;else if(!this.sliding){const m=c.pointerType==="mouse"?c.button:void 0;this.sliding={initial:u,last:w,position:l,pointerId:y,button:m,timeStamp:d},A.setPointerCapture(c.pointerId),this.dualPress=this.rotating!=null&&d-this.rotating.timeStamp<kr}});const h=c=>{var w,D;((w=this.rotating)==null?void 0:w.pointerId)===c.pointerId?(this.rotating=null,A.releasePointerCapture(c.pointerId),this.dualPress&&this.sliding&&(A.releasePointerCapture(this.sliding.pointerId),this.sliding=null)):((D=this.sliding)==null?void 0:D.pointerId)===c.pointerId&&(this.sliding=null,A.releasePointerCapture(c.pointerId),this.dualPress&&this.rotating&&(A.releasePointerCapture(this.rotating.pointerId),this.rotating=null));const l=this.getPointerPosition(c),u=this.lastUp;if(this.lastUp={position:l,time:c.timeStamp},u&&u.position.distanceTo(l)<this.doublePressDistance){const d=c.timeStamp-u.time;d<this.doublePressLimitMs&&(this.lastUp=null,this.doublePress({position:l,intervalMs:d}))}};document.addEventListener("pointerup",h),document.addEventListener("pointercancel",h),document.addEventListener("pointermove",c=>{var l,u;((l=this.rotating)==null?void 0:l.pointerId)===c.pointerId?this.rotating.position=this.getPointerPosition(c):((u=this.sliding)==null?void 0:u.pointerId)===c.pointerId&&(this.sliding.position=this.getPointerPosition(c))}),A.addEventListener("contextmenu",c=>{c.preventDefault()}),A.addEventListener("wheel",c=>{this.scroll.add(new E.Vector3(c.deltaX,c.deltaY,c.deltaZ)),c.preventDefault()})}getPointerPosition(A){const e=this.canvas.getBoundingClientRect();return new E.Vector2(A.clientX-e.left,A.clientY-e.top)}update(A,e){if(!this.enable)return;if(this.dualPress&&this.rotating&&this.sliding){const I=[this.rotating.position.clone().sub(this.rotating.last),this.sliding.position.clone().sub(this.sliding.last)],s=I[0].dot(I[1]);if(s>=.2){const B=I[0].clone().add(I[1]),i=new E.Vector3(B.x,-B.y,0);i.multiplyScalar(this.slideSpeed*(this.reverseSwipe?1:-1)),i.applyQuaternion(e.quaternion),e.position.add(i),this.moveVelocity=i.clone().multiplyScalar(1/A)}else if(s<=-.2){const B=this.sliding.last.clone().sub(this.rotating.last),i=B.length();B.multiplyScalar(1/i).normalize();const Q=new E.Vector2(-B.y,B.x),C=[I[0].dot(B),I[1].dot(B)],a=[I[0].dot(Q),I[1].dot(Q)],n=this.rotating.last.clone().add(this.sliding.last).multiplyScalar(.5);let o=new E.Vector3;if(e instanceof E.Camera){const w=new E.Vector2(n.x/this.canvas.clientWidth*2-1,-(n.y/this.canvas.clientHeight)*2+1),D=new E.Raycaster;D.setFromCamera(w,e),o=D.ray.direction}const r=C[1]-C[0],h=o.multiplyScalar(r*this.slideSpeed);e.position.add(h),this.moveVelocity=h.clone().multiplyScalar(1/A);const c=[Math.atan(a[0]/(-.5*i)),Math.atan(a[1]/(.5*i))],l=.5*(c[0]+c[1])*this.pointerRollScale,u=new E.Euler().setFromQuaternion(e.quaternion,"YXZ");u.z=Math.max(-Math.PI,Math.min(Math.PI,u.z+.5*l)),e.quaternion.setFromEuler(u)}this.rotating.last.copy(this.rotating.position),this.sliding.last.copy(this.sliding.position)}else{const I=new E.Vector3;if(this.rotating&&!this.dualPress){const B=this.rotating.position.clone().sub(this.rotating.last);this.rotating.last.copy(this.rotating.position),I.set(B.x,B.y,0),I.multiplyScalar(this.rotateSpeed*(this.reverseRotate?-1:1)),this.rotateVelocity=I.clone().multiplyScalar(1/A)}else this.rotateVelocity.multiplyScalar(Math.exp(-A/this.rotateInertia)),I.addScaledVector(this.rotateVelocity,A);const s=new E.Euler().setFromQuaternion(e.quaternion,"YXZ");if(s.y-=I.x,s.x=Math.max(-Math.PI/2,Math.min(Math.PI/2,s.x-I.y)),s.z*=Math.exp(-0*A),e.quaternion.setFromEuler(s),this.sliding&&!this.dualPress){const B=this.sliding.position.clone().sub(this.sliding.last);this.sliding.last.copy(this.sliding.position);const i=this.sliding.button!==2?new E.Vector3(B.x,0,B.y):new E.Vector3(B.x,-B.y,0);i.multiplyScalar(this.slideSpeed*(this.reverseSlide?-1:1)),i.applyQuaternion(e.quaternion),e.position.add(i),this.moveVelocity=i.clone().multiplyScalar(1/A)}else this.moveVelocity.multiplyScalar(Math.exp(-A/this.moveInertia)),e.position.addScaledVector(this.moveVelocity,A)}const g=this.scroll.multiplyScalar(this.scrollSpeed);g.set(g.x,g.z,g.y),this.reverseScroll&&g.multiplyScalar(-1),g.applyQuaternion(e.quaternion),e.position.add(g),this.scroll.set(0,0,0)}}exports.FINGER_TIPS=wr;exports.FpsMovement=uQ;exports.HANDS=De;exports.Hand=og;exports.HandMovement=yr;exports.JOINT_IDS=Eg;exports.JOINT_INDEX=lr;exports.JOINT_RADIUS=Ht;exports.JOINT_SEGMENTS=hQ;exports.JOINT_SEGMENT_STEPS=lQ;exports.JOINT_TIPS=ur;exports.JointEnum=Se;exports.LN_SCALE_MAX=RA;exports.LN_SCALE_MIN=kA;exports.NUM_JOINTS=hr;exports.PackedSplats=HA;exports.PlyReader=Pt;exports.PointerControls=wQ;exports.Readback=Wt;exports.Sint8ToFloat=TI;exports.SparkControls=vr;exports.SparkRenderer=Ot;exports.SparkViewpoint=_t;exports.SplatAccumulator=Ee;exports.SplatEdit=jt;exports.SplatEditRgbaBlendMode=Wi;exports.SplatEditSdf=ji;exports.SplatEditSdfType=Xi;exports.SplatEdits=Pi;exports.SplatFileType=St;exports.SplatGenerator=kt;exports.SplatLoader=sQ;exports.SplatMesh=ZA;exports.SplatModifier=AQ;exports.SplatSkinning=_o;exports.SplatTransformer=ot;exports.SpzReader=nQ;exports.SpzWriter=PA;exports.Uint8ToFloat=vI;exports.VRButton=we;exports.XrHands=Dr;exports.constructAxes=tr;exports.constructGrid=Ar;exports.constructSpherePoints=er;exports.defines=an;exports.dyno=Co;exports.flipPixels=ZI;exports.floatToSint8=Vt;exports.floatToUint8=FA;exports.fromHalf=DA;exports.generators=nr;exports.getSplatFileType=Qg;exports.imageSplats=Ir;exports.isAndroid=zI;exports.isMobile=qI;exports.isOculus=VI;exports.isPcSogs=Go;exports.modifiers=Er;exports.pixelsToPngUrl=XI;exports.setPackedSplat=ce;exports.textSplats=gr;exports.toHalf=it;exports.transcodeSpz=Po;exports.unpackSplat=he;exports.unpackSplats=Cg;exports.utils=YC;
//# sourceMappingURL=spark.cjs.min.js.map