Files
spark/dist/spark.cjs.min.js
T
sparkjsdev[bot] cc8a0c2cf5 Bump dist build
2025-07-04 12:18:37 +00:00

1137 lines
683 KiB
JavaScript

"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const nA=require("three");var xe=typeof document<"u"?document.currentScript:null;function cg(t){const A=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const e in t)if(e!=="default"){const s=Object.getOwnPropertyDescriptor(t,e);Object.defineProperty(A,e,s.get?s:{enumerable:!0,get:()=>t[e]})}}return A.default=t,Object.freeze(A)}const Q=cg(nA);let ZA;const Is=typeof TextDecoder<"u"?new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}):{decode:()=>{throw Error("TextDecoder not available")}};typeof TextDecoder<"u"&&Is.decode();let Rt=null;function hg(){return(Rt===null||Rt.byteLength===0)&&(Rt=new Uint8Array(ZA.memory.buffer)),Rt}function lg(t,A){return t=t>>>0,Is.decode(hg().subarray(t,t+A))}function ug(t,A,e,s,i,n,a,r,g,I,B){return ZA.raycast_splats(t,A,e,s,i,n,a,r,g,I,B)}async function dg(t,A){if(typeof Response=="function"&&t instanceof Response){if(typeof WebAssembly.instantiateStreaming=="function")try{return await WebAssembly.instantiateStreaming(t,A)}catch(s){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",s);else throw s}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 wg(){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,s){return new Float32Array(A,e>>>0,s>>>0)},t.wbg.__wbg_newwithbyteoffsetandlength_f1dead44d1fc7212=function(A,e,s){return new Uint32Array(A,e>>>0,s>>>0)},t.wbg.__wbg_newwithlength_5a5efe313cfd59f1=function(A){return new Float32Array(A>>>0)},t.wbg.__wbg_set_10bad9bee0e9c58b=function(A,e,s){A.set(e,s>>>0)},t.wbg.__wbg_set_d23661d19148b229=function(A,e,s){A.set(e,s>>>0)},t.wbg.__wbg_set_f4f1f0daa30696fc=function(A,e,s){A.set(e,s>>>0)},t.wbg.__wbg_subarray_3aaeec89bb2544f0=function(A,e,s){return A.subarray(e>>>0,s>>>0)},t.wbg.__wbg_subarray_769e1e0f81bb259b=function(A,e,s){return A.subarray(e>>>0,s>>>0)},t.wbg.__wbindgen_init_externref_table=function(){const A=ZA.__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 ZA.memory},t.wbg.__wbindgen_throw=function(A,e){throw new Error(lg(A,e))},t}function pg(t,A){return ZA=t.exports,Bs.__wbindgen_wasm_module=A,Rt=null,ZA.__wbindgen_start(),ZA}async function Bs(t){if(ZA!==void 0)return ZA;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,AGFzbQEAAAAB9wEkYAJ/fwF/YAN/f38Bf2ACf38AYAN/f38AYAF/AX9gAX8AYAV/f39/fwBgA29/fwFvYAV/f39/fwF/YAR/f39/AGABbwFvYANvb38AYAFvAX9gAAF/YAAAYAd/f39/f39/AX9gAX0BfWAGf39/f39/AGAEf39/fwF/YAF/AW9gAAFvYAd/f39/f39/AGACf34Bf2ADf35+AGACf34AYAt9fX19fX19fX9vfwFvYAZ/f39/f38Bf2AFf399f38AYAR/fX9/AGAFf39+f38AYAR/fn9/AGAFf398f38AYAR/fH9/AGADf35+AX9gA39vbwF/YAJ9fQF9AvIEEQN3YmcdX193YmdfYnVmZmVyXzYwOWNjM2VlZTUxZWQxNTgACgN3YmcaX193YmdfbmV3XzlmZWU5N2E0MDliMzJiNjgACgN3YmcaX193Ymdfc2V0X2Y0ZjFmMGRhYTMwNjk2ZmMACwN3YmcdX193YmdfbGVuZ3RoXzhjZmQyYzY0MDlhZjg4YWQADAN3YmcxX193YmdfbmV3d2l0aGJ5dGVvZmZzZXRhbmRsZW5ndGhfZjFkZWFkNDRkMWZjNzIxMgAHA3diZxpfX3diZ19uZXdfZTNiMzIxZGNmZWY4OWZjNwAKA3diZxpfX3diZ19zZXRfZDIzNjYxZDE5MTQ4YjIyOQALA3diZx1fX3diZ19sZW5ndGhfNmNhNTI3NjY1ZDg5Njk0ZAAMA3diZzFfX3diZ19uZXd3aXRoYnl0ZW9mZnNldGFuZGxlbmd0aF9lNmI3ZTY5YWNkNGM3MzU0AAcDd2JnGl9fd2JnX3NldF8xMGJhZDliZWUwZTljNThiAAsDd2JnHV9fd2JnX2xlbmd0aF8zYjRmMDIyMTg4YWU4ZGI2AAwDd2JnH19fd2JnX3N1YmFycmF5Xzc2OWUxZTBmODFiYjI1OWIABwN3YmcfX193Ymdfc3ViYXJyYXlfM2FhZWVjODliYjI1NDRmMAAHA3diZyRfX3diZ19uZXd3aXRobGVuZ3RoXzVhNWVmZTMxM2NmZDU5ZjEAEwN3YmcQX193YmluZGdlbl90aHJvdwACA3diZxFfX3diaW5kZ2VuX21lbW9yeQAUA3diZx9fX3diaW5kZ2VuX2luaXRfZXh0ZXJucmVmX3RhYmxlAA4DvAG6AQQAAAYABAQE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QCADQQFxDQAgA0ECcUUNASABKAIAIgMgAGohACABIANrIgFB2NrAACgCAEYEQCACKAIEQQNxQQNHDQFB0NrAACAANgIAIAIgAigCBEF+cTYCBCABIABBAXI2AgQgAiAANgIADwsgASADEDkLAkACQAJAAkACQCACKAIEIgNBAnFFBEAgAkHc2sAAKAIARg0CIAJB2NrAACgCAEYNAyACIANBeHEiAhA5IAEgACACaiIAQQFyNgIEIAAgAWogADYCACABQdjawAAoAgBHDQFB0NrAACAANgIADwsgAiADQX5xNgIEIAEgAEEBcjYCBCAAIAFqIAA2AgALIABBgAJJDQIgASAAEEFBACEBQfDawABB8NrAACgCAEEBayIANgIAIAANBEG42MAAKAIAIgAEQANAIAFBAWohASAAKAIIIgANAAsLQfDawABB/x8gASABQf8fTRs2AgAPC0Hc2sAAIAE2AgBB1NrAAEHU2sAAKAIAIABqIgA2AgAgASAAQQFyNgIEQdjawAAoAgAgAUYEQEHQ2sAAQQA2AgBB2NrAAEEANgIACyAAQejawAAoAgAiA00NA0Hc2sAAKAIAIgJFDQNBACEAQdTawAAoAgAiBEEpSQ0CQbDYwAAhAQNAIAIgASgCACIFTwRAIAIgBSABKAIEakkNBAsgASgCCCEBDAALAAtB2NrAACABNgIAQdDawABB0NrAACgCACAAaiIANgIAIAEgAEEBcjYCBCAAIAFqIAA2AgAPCyAAQfgBcUHA2MAAaiECAn9ByNrAACgCACIDQQEgAEEDdnQiAHFFBEBByNrAACAAIANyNgIAIAIMAQsgAigCCAshACACIAE2AgggACABNgIMIAEgAjYCDCABIAA2AggPC0G42MAAKAIAIgEEQANAIABBAWohACABKAIIIgENAAsLQfDawABB/x8gACAAQf8fTRs2AgAgAyAETw0AQejawABBfzYCAAsL6QQBBX8CfwJAIAJBAk8EQCABKAIEIgRB//8BcUUEQCAEQRB0DAMLIARB/wdxIQUgBEGAgAJxIQMgBEGA+AFxIgZBgPgBRgRAIANBEHQhAyADQYCAgPwHciAFRQ0DGiADIAVBDXRyQYCAgP4HcgwDCyADQRB0IQMgBkUNASAGQQ10QYCAgPwAcSAFQQ10ckGAgIDAA2ogA3IMAgtBAUEBQfSEwAAQ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CCACQQxqIAEQkwEhAwsgAkEQaiQAIAMLhgIBA38jAEGAAWsiBCQAIAAoAgAhAAJ/AkAgASgCCCICQYCAgBBxRQRAIAJBgICAIHENASAAKAIAIAEQOAwCCyAAKAIAIQBBACECA0AgAiAEakH/AGogAEEPcSIDQTByIANB1wBqIANBCkkbOgAAIAJBAWshAiAAQQ9LIABBBHYhAA0ACyABQYO/wABBAiACIARqQYABakEAIAJrECEMAQsgACgCACEAQQAhAgNAIAIgBGpB/wBqIABBD3EiA0EwciADQTdqIANBCkkbOgAAIAJBAWshAiAAQQ9LIABBBHYhAA0ACyABQYO/wABBAiACIARqQYABakEAIAJrECELIARBgAFqJAALygECBH8BfiMAQSBrIgMkAAJAAkAgASABIAJqIgJLDQBBCCACIAAoAgAiAUEBdCIEIAIgBEsbIgIgAkEITRsiBK0iB0IgiFBFDQAgB6ciBUH/////B0sNACADIAEEfyADIAE2AhwgAyAAKAIENgIUQQEFQQALNgIYIANBCGpBASAFIANBFGoQXCADKAIIQQFHDQEgAygCECECIAMoAgwhBgsgBiACQaCOwAAQjAEACyADKAIMIQEgACAENgIAIAAgATYCBCADQSBqJAALiQIBAX8jAEEQayICJAAgACgCACEAAn8gAS0AC0EYcUUEQCABKAIAIAAgASgCBCgCEBEAAAwBCyACQQA2AgwgASACQQxqAn8gAEGAAU8EQCAAQYAQTwRAIABBgIAETwRAIAIgAEE/cUGAAXI6AA8gAiAAQRJ2QfABcjoADCACIABBBnZBP3FBgAFyOgAOIAIgAEEMdkE/cUGAAXI6AA1BBAwDCyACIABBP3FBgAFyOgAOIAIgAEEMdkHgAXI6AAwgAiAAQQZ2QT9xQYABcjoADUEDDAILIAIgAEE/cUGAAXI6AA0gAiAAQQZ2QcABcjoADEECDAELIAIgADoADEEBCxAmCyACQRBqJAALqgICA38BfiMAQUBqIgIkACABKAIAQYCAgIB4RgRAIAEoAgwhAyACQSRqIgRBADYCACACQoCAgIAQNwIcIAJBMGogAygCACIDQQhqKQIANwMAIAJBOGogA0EQaikCADcDACACIAMpAgA3AyggAkEcakH0mMAAIAJBKGoQKhogAkEYaiAEKAIAIgM2AgAg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AEEQayICJAAgAkEIaiABEHYgAiACKAIIIAIoAgwoAhgRAgAgAigCBCEBIAAgAigCADYCACAAIAE2AgQgAkEQaiQAC08BAn9BjdfAAC0AABogASgCBCECIAEoAgAhA0EIQQQQnwEiAUUEQEEEQQgQwQEACyABIAI2AgQgASADNgIAIABBrJ7AADYCBCAAIAE2AgALQQEBfyMAQSBrIgMkACADQQA2AhAgA0EBNgIEIANCBDcCCCADIAE2AhwgAyAANgIYIAMgA0EYajYCACADIAIQfgALPQECfyAAIAAoAgQiAyACazYCBCAAIAAoAgAgAiADS3IiBDYCAEEBIQMgBAR/IAMFIAAoAgggASACEJMBCws+AQF/IwBBEGsiAiQAIAJBCGogASABKAIAKAIEEQIAIAIoAgwhASAAIAIoAgg2AgAgACABNgIEIAJBEGokAAuuAwEDfyAAKAIAIQIgASgCCCIAQYCAgBBxRQRAIABBgICAIHFFBEAjAEEQayIAJABBAyEDIAItAAAiAiEEIAJBCk8EQCAAIAIgAkHkAG4iBEHkAGxrQf8BcUEBdCIDQYa/wABqLQAAOgAPIAAgA0GFv8AAai0AADoADkEBIQMLQQAgAiAEG0UEQCADQQFrIgMgAEENamogBEEBdEH+AXFBhr/AAGotAAA6AAALIAFBAUEAIABBDWogA2pBAyADaxAhIABBEGokAA8LIwBBgAFrIgQkACACLQAAIQBBACECA0AgAiAEakH/AGogAEEPcSIDQTByIANBN2ogA0EKSRs6AAAgAkEBayECIAAiA0EEdiEAIANBD0sNAAsgAUGDv8AAQQIgAiAEakGAAWpBACACaxAhIARBgAFqJAAPCyMAQYABayIEJAAgAi0AACEAQQAhAgNAIAIgBGpB/wBqIABBD3EiA0EwciADQdcAaiADQQpJGzoAACACQQFrIQIgACIDQQR2IQAgA0EPSw0ACyABQYO/wABBAiACIARqQYABakEAIAJrECEgBEGAAWokAAs4AAJAIAJBgIDEAEYNACAAIAIgASgCEBEAAEUNAEEBDwsgA0UEQEEADwsgACADIAQgASgCDBEBAAs8AQF/IwBBEGsiAiQAIAJB8KDAADYCDCACIAA2AgggAkEIakGkl8AAIAJBDGpBpJfAACABQbicwAAQPQALpQQBBn8jAEEQayIGJAAgBiAANgIMIAZBDGohByMAQRBrIgIkACABKAIAQfCjwABBDSABKAIEKAIMEQEAIQAgAkEAOgANIAIgADoADCACIAE2AggjAEEgayIAJABBASEDAkAgAkEIaiIELQAEDQAgBC0ABSEFIAQoAgAiAS0ACkGAAXFFBEAgASgCAEH3vsAAQfS+wAAgBUEBcSIFG0ECQQMgBRsgASgCBCgCDBEBAA0BIAEoAgBB/aPAAEEEIAEoAgQoAgwRAQANASABKAIAQcS+wABBAiABKAIEKAIMEQEADQEgByABQeyjwAAoAgARAAAhAwwBCyAFQQFxRQRAIAEoAgBB+b7AAEEDIAEoAgQoAgwRAQANAQsgAEEBOgAPIABB2L7AADYCFCAAIAEpAgA3AgAgACABKQIINwIYIAAgAEEPajYCCCAAIAA2AhAgAEH9o8AAQQQQKw0AIABBxL7AAEECECsNACAHIABBEGpB7KPAACgCABEAAA0AIAAoAhBB/L7AAEECIAAoAhQoAgwRAQAhAwsgBEEBOgAFIAQgAzoABCAAQSBqJAAgAi0ADSIBIAItAAwiA3IhAAJAIANBAXEgAUEBR3INACAEKAIAIgAtAApBgAFxRQRAIAAoAgBB/77AAEECIAAoAgQoAgwRAQAhAAwBCyAAKAIAQf6+wABBASAAKAIEKAIMEQEAIQALIAJBEGokACAAQQFxIAZBEGokAAs5AQF/IwBBEGsiAyQAIAMgATYCDCADIAA2AgggA0EIakGkvcAAIANBDGpBpL3AACACQZiUwAAQPQALLwEBfyMAQRBrIgIkACACQQhqIAAQdiACKAIIIAEgAigCDCgCEBEAACACQRBqJAAL5hMCF30LfxBYIiQgCSYBAn8gCCEqIwBBMGsiIiQAICIgJDYCBCAiQoCAgIDAADcCCCAiQQA2AhBB/NbAACErQfjWwAAoAgBFBEACf0GN18AALQAAGgJAQYCAwAAQESIIRQ0AIAhBBGstAABBA3FFDQAgCEEAQYCAwAD8CwALIAgEQEGI18AAQYCAEDYCAEH81sAAQQA2AgBBhNfAACgCACEkQYTXwAAgCDYCAEGA18AAKAIAISZBgNfAAEGAgBA2AgBB+NbAACgCAEH41sAAQQE2AgBFICZFckUEQCAkICZBAnRBBBCpAQtB/NbAAAwBC0EEQYCAwABBuILAABCMAQALISsLAkAgKygCAEUEQCArQX82AgAgKwJ/ICpFBEBBACEkQQAMAQsgK0EMaigCACEsICtBCGooAgAhCAJAIAoEQEEAISQDQCAiICJBBGogJEECdCAkQYCABCAqICRrIgogCkGAgARPGyIKaiImQQJ0EKoBNgIUIApBAnQiJCAsSw0FICJBFGogCCAkEGsgIiACOAIgICIgATgCHCAiIAA4AhggIiAFOAIsICIgBDgCKCAiIAM4AiQgCCEKIwBBEGsiJyQAICQEQCAiQQhqISggIkEkaiIjKgIAIRUgIyoCBCEYICMqAgghGSAiQRhqIiMqAgghHyAjKgIEISAgIyoCACEhA0AgJEEEICRBBEkiIxshKQJAIAotAAOzQwAAf0OVQ83MzD1dDQAgJ0EEaiAKICkQJQJ9AkAgI0UEQCAnKgIMIQ4gJyoCCCEMICcqAgQhC0MAAAAAIRZDAAAAACEXIAooAgwiJUH/AXEEQCAlQQFrQf8BcbNDRSKRPZRDAAAQwZIQLyEXCyAlQQh2IiNB/wFxBEAgI0EBa0H/AXGzQ0UikT2UQwAAEMGSEC8hFgsgHyAOkyEPICAgDJMhEiAhIAuTIREgJUEQdiIjQf8BcQ0BQwAAAAAMAgtBAyApQZSFwAAQaAALICNBAWtB/wFxs0NFIpE9lEMAABDBkhAvCyEaIBkgCigCCCIjQRh1skMAAP5ClSITIBggJUEYdbJDAAD+QpUiFJQgGSATlJMiEJQgI0EQdsCyQwAA/kKVIg0gGSANlCAVIBSUkyIOlJMgFSATlCAYIA2UkyIMQwAAgD8gDSANlJMgEyATlJMgFCAUlJNDAAAAABCNAZEiG5SSIgsgC5KSIRwgGCANIAyUIBQgEJSTIA4gG5SSIgsgC5KSIR0gFSAUIA6UIBMgDJSTIBAgG5SSIgsgC5KSIR4gDyATIBIgFJQgDyATlJMiEJQgDSAPIA2UIBEgFJSTIg6UkyARIBOUIBIgDZSTIgwgG5SSIgsgC5KSIQ8gEiANIAyUIBQgEJSTIA4gG5SSIgsgC5KSIQ0gESAUIA6UIBMgDJSTIBAgG5SSIgsgC5KSIQwCQCAaIBcgFhCNASAaEI0BQwrXIzyUIgtdRQRAIAsgFl5FBEAgCyAXXkUEQEMAAIA/IBqVIgsgD5QiDyALIByUIhKUQwAAgD8gF5UiCyAMlCIRIAsgHpQiDJRDAACAPyAWlSILIA2UIhAgCyAdlCILlJKSIg4gDpQgEiASlCAMIAyUIAsgC5SSkiIMIA8gD5QgESARlCAQIBCUkpJDAACAv5KUkyILQwAAAABdDQQgDowgC5GTIAyVIQwMAwsgHotDvTeGNV0NAyANIB0gDIwgHpUiDJSSIBaVIgsgC5QgDyAcIAyUkiAalSILIAuUkkMAAIA/XkUNAgwDCyAdi0O9N4Y1XQ0CIAwgHiANjCAdlSIMlJIgF5UiCyALlCAPIBwgDJSSIBqVIgsgC5SSQwAAgD9eDQIMAQsgHItDvTeGNV0NASAMIB4gD4wgHJUiDJSSIBeVIgsgC5QgDSAdIAyUkiAWlSILIAuUkkMAAIA/Xg0BCyAGIAxfRSAHIAxgRXINACAoKAIIIiMgKCgCAEYEQCAoQeSEwAAQVAsgKCgCBCAjQQJ0aiAMOAIAICggI0EBajYCCAsgCiApQQJ0aiEKICQgKWsiJA0ACwsgJ0EQaiQAICIoAhQiCkGEAU8EQCAKEFcLICYiJCAqSQ0ACwwBC0EAISQDQCAiICJBBGogJEECdCAkQYCABCAqICRrIgogCkGAgARPGyIKaiImQQJ0EKoBNgIUIApBAnQiJCAsSw0EICJBFGogCCAkEGsgIiACOAIgICIgATgCHCAiIAA4AhggIiAFOAIsICIgBDgCKCAiIAM4AiQgCCEKIwBBEGsiJyQAICQEQCAiQQhqISggIkEkaiIjKgIAIhggGJQgIyoCBCIZIBmUkiAjKgIIIg8gD5SSIRIgIkEYaiIjKgIIIR8gIyoCBCEgICMqAgAhIQNAICRBBCAkQQRJIiMbISkCQCAKLQADs0MAAH9DlUPNzMw9XQ0AICdBBGogCiApECUCfQJAICNFBEAgJyoCDCEOICcqAgghDCAnKgIEIQtDAAAAACERQwAAAAAhECAKKAIMIiVB/wFxBEAgJUEBa0H/AXGzQ0UikT2UQwAAEMGSEMgBIRALICVBCHYiI0H/AXEEQCAjQQFrQf8BcbNDRSKRPZRDAAAQwZIQyAEhEQsgHyAOkyENICAgDJMhFSAhIAuTIQ4gJUEQdiIjQf8BcQ0BQwAAAAAMAgtBAyApQZSFwAAQaAALICNBAWtB/wFxs0NFIpE9lEMAABDBkhDIAQshCyAYIA6UIBkgFZSSIA8gDZSSIgwgDJQgEiAOIA6UIBUgFZSSIA0gDZSSIBAgEZIgC5JDAABAQJUiCyALlJOUkyILQwAAAABdDQAgDIwgC5GTIBKVIgsgBmBFIAcgC2BFcg0AICgoAggiIyAoKAIARgRAIChB1ITAABBUCyAoKAIEICNBAnRqIAs4AgAgKCAjQQFqNgIICyAKIClBAnRqIQogJCApayIkDQALCyAnQRBqJAAgIigCFCIKQYQBTwRAIAoQVwsgJiIkICpJDQALCyAiKAIQISQgKygCAEEBags2AgAgJBANIQkQWCIIIAkmASAiIAg2AiQgIigCDCEmICIoAhAhIyMAQSBrIiUkACAlICJBJGooAgAiJCUBEAoiCjYCACAlICM2AgQCQCAKICNGBEAQlwEiKhCPASIKJQEgJiAjEAghCRBYIiYgCSYBICpBhAFPBEAgKhBXCyAKQYQBTwRAIAoQVwsgJCUBICYlAUEAEAkgJkGEAU8EQCAmEFcLICVBIGokAAwBCyAlQQA2AgggJSAlQQRqICVBCGoQewALICIoAggiCgRAICIoAgwgCkECdEEEEKkBCyAiKAIEIgpBhAFPBEAgChBXCyAiQTBqJAAgCAwCCxBuAAsgJCAsQbiJwAAQrAEACyIIJQEgCBBXC/oBAgJ/AX4jAEEQayICJAAgAkEBOwEMIAIgATYCCCACIAA2AgQjAEEQayIBJAAgAkEEaiIAKQIAIQQgASAANgIMIAEgBDcCBCMAQRBrIgAkACABQQRqIgEoAgAiAigCDCEDAkACQAJAAkAgAigCBA4CAAECCyADDQFBASECQQAhAwwCCyADDQAgAigCACICKAIEIQMgAigCACECDAELIABBgICAgHg2AgAgACABNgIMIABB2J7AACABKAIEIAEoAggiAC0ACCAALQAJEFEACyAAIAM2AgQgACACNgIAIABBvJ7AACABKAIEIAEoAggiAC0ACCAALQAJEFEACyUAIABFBEBBpJXAAEEyELYBAAsgACACIAMgBCAFIAEoAhARCAALKAAgASAAKAIALQAAQQJ0IgBB5K/AAGooAgAgAEHQr8AAaigCABCTAQsjACAARQRAQaSVwABBMhC2AQALIAAgAiADIAQgASgCEBEJAAsjACAARQRAQaSVwABBMhC2AQALIAAgAiADIAQgASgCEBEcAAsjACAARQRAQaSVwABBMhC2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OCAFQTBqIAQQfgALFAIBbwF/EA8hABBYIgEgACYBIAELEwAgAEEoNgIEIABBgIDAADYCAAsTACAAQdSBwAA2AgQgACABNgIACxMAIABBKDYCBCAAQYSGwAA2AgALIQAgAELUnP3HsryhmMUANwMIIABClLiFgpHLl7R0NwMACyAAIABC7Lz5lKyqlJNxNwMIIABC+enA7KyX2tdONwMACxAAIAAoAgQgACgCCCABEBwLEQAgACgCBCAAKAIIIAEQwwELGQACfyABQQlPBEAgASAAEDUMAQsgABARCwsiACAAQu26rbbNhdT14wA3AwggAEL4gpm9le7Gxbl/NwMACyEAIABCgLzfhaul+JsnNwMIIABCn/WWlNbu7cOhfzcDAAsRACAAKAIAIAAoAgQgARDDAQsTACAAQayewAA2AgQgACABNgIACxEAIAEgACgCACAAKAIEEJMBCxAAIAAoAgAgACgCBCABEBwLEAAgASAAKAIAIAAoAgQQJgsQACABKAIAIAEoAgQgABAqCw4AIAAlASABJQEgAhAGC18BAX8CQAJAIABBBGsoAgAiAkF4cSIDQQRBCCACQQNxIgIbIAFqTwRAIAJBACADIAFBJ2pLGw0BIAAQJAwCC0G1mcAAQS5B5JnAABB0AAtB9JnAAEEuQaSawAAQdAALCx0BAW8gACgCACUBIAEgAhAMIQMQWCIAIAMmASAAC2oBAX8jAEEwayIDJAAgAyABNgIEIAMgADYCACADQQI2AgwgA0Gk1MAANgIIIANCAjcCFCADIANBBGqtQoCAgICAA4Q3AyggAyADrUKAgICAgAOENwMgIAMgA0EgajYCECADQQhqIAIQfgALagEBfyMAQTBrIgMkACADIAE2AgQgAyAANgIAIANBAjYCDCADQcTUwAA2AgggA0ICNwIUIAMgA0EEaq1CgICAgIADhDcDKCADIAOtQoCAgICAA4Q3AyAgAyADQSBqNgIQIANBCGogAhB+AAtqAQF/IwBBMGsiAyQAIAMgATYCBCADIAA2AgAgA0ECNgIMIANB+NTAADYCCCADQgI3AhQgAyADQQRqrUKAgICAgAOENwMoIAMgA61CgICAgIADhDcDICADIANBIGo2AhAgA0EIaiACEH4ACwsAIAAoAgAgARA4Cw4AQbW8wABBKyAAEHQAC+8CAgV/A34gACkDACEJIwBBIGsiAyQAQRQhACAJIgdC6AdaBEAgByEIA0AgA0EMaiAAaiICQQNrIAggCEKQzgCAIgdCkM4Afn2nIgRB//8DcUHkAG4iBUEBdCIGQYa/wABqLQAAOgAAIAJBBGsgBkGFv8AAai0AADoAACACQQFrIAQgBUHkAGxrQf//A3FBAXQiBEGGv8AAai0AADoAACACQQJrIARBhb/AAGotAAA6AAAgAEEEayEAIAhC/6ziBFYgByEIDQALCyAHQglWBEAgACADakELaiAHpyICIAJB//8DcUHkAG4iAkHkAGxrQf//A3FBAXQiBEGGv8AAai0AADoAACAAQQJrIgAgA0EMamogBEGFv8AAai0AADoAACACrSEHCyAJUEUgB1BxRQRAIABBAWsiACADQQxqaiAHp0EBdEEecUGGv8AAai0AADoAAAsgAUEBQQAgA0EMaiAAakEUIABrECEgA0EgaiQACw0AIABBpIrAACABECoLDQAgAEGwjsAAIAEQKgsKACAAIAEgAhAqCw4AIAFBhJDAAEEFEJMBC8IDAgZ/AX4gACgCACEAIwBB0ABrIgIkACACQSBqIAAgACgCACgCBBECACACIAJByABqrUKAgICAwASENwMoQQEhAyACQQE2AjQgAkH4kcAANgIwIAJCATcCPCACIAIpAyA3AkggAiACQShqNgI4AkAgASgCACIGIAEoAgQiByACQTBqECoNACABLQAKQYABcUUEQEEAIQMMAQsgAkEYaiAAIAAoAgAoAgQRAgAgAkEQaiACKAIYIAIoAhwoAhgRAgAgAigCECIERQRAQQAhAwwBCyACQQhqIAQgAigCFCIFKAIYEQIAIAIoAgwhASACKAIIIQAgAiAFNgIsIAIgBDYCKCACQQE2AjQgAkGEksAANgIwIAJCATcCPCACIAJBKGqtQoCAgIDABIQiCDcDSCACIAJByABqNgI4IAYgByACQTBqELMBDQADQCAARQRAQQAhAwwCCyACIAAgASgCGBECACACKAIEIAIoAgAgAiABNgIsIAIgADYCKCACQQE2AjQgAkGEksAANgIwIAJCATcCPCACIAg3A0ggAiACQcgAajYCOCEAIQEgBiAHIAJBMGoQswFFDQALCyACQdAAaiQAIAMLCQAgACABEA4ACykAAn8gACgCAC0AAEUEQCABQejAwABBBRAmDAELIAFB7cDAAEEEECYLCw0AIABB9JjAACABECoLygECA38BfiAAKAIAIQIjAEGAAWsiBCQAAkAgASkCCCIFpyIAQYCAgARxRQ0AIABBgICAwABxBEAgAEGAgIAIciEADAELIAFBCjsBDCAAQYCAgMgAciEACyABIABBgICABHI2AghBACEAA0AgACAEakH/AGogAkEPcSIDQTByIANB1wBqIANBCkkbOgAAIABBAWshACACQQ9LIAJBBHYhAg0ACyABQYO/wABBAiAAIARqQYABakEAIABrECEgASAFNwIIIARBgAFqJAALDAAgACABKQIANwMACw0AIAFB8aDAAEECECYLDQAgAEGEpMAAIAEQKgsOACABQa+jwABBBRCTAQsOACABQbyvwABBEhCTAQsNACAAQdCxwAAgARAqCw4AIAFByLHAAEEFEJMBCxkAIAAgAUGc18AAKAIAIgBBOiAAGxECAAALDQAgAEHYvsAAIAEQKgsKACACIAAgARAmCwkAIABBADYCAAvTNwIdfwF+IwBB8ABrIgUkACAFQSBqIAAgACgCACgCBBECACAFIAUoAiQiAjYCLCAFIAUoAiAiBDYCKAJAAkACQAJAIAEiDi0ACkGAAXFFBEBBASERIAVBATYCXCAFQfiRwAA2AlggBUIBNwJkIAUgBUEoaq1CgICAgMAEhDcDOCAFIAVBOGo2AmAgASgCACABKAIEIAVB2ABqECoNBCAFQRhqIAUoAiggBSgCLCgCGBECACAFKAIYIgIEQCAFKAIcIQEgDigCAEGMksAAQQwgDigCBCgCDBEBAA0FIAVBEGogAiABKAIYEQIAIAVBMGqtQoCAgIDABIQhHyAFKAIQQQBHIQNBACERA0AgBUEIaiACIAEoAhgRAgAgBSgCDCAFKAIIIQggBSABNgI0IAUgAjYCMCAFQQA2AmggBUEBNgJcIAVBnJLAADYCWCAFQgQ3AmAgDigCACAOKAIEIAVB2ABqIgEQswENBCAFQQA6AEQgBSARNgI8IAUgAzYCOCAFIA42AkAgBUEBNgJcIAVB+JHAADYCWCAFQgE3AmQgBSAfNwNIIAUgBUHIAGo2AmAgBUE4akHckMAAIAEQKg0EIBFBAWohESEBIAgiAg0ACwsCQCAAKAIEIgJBA0cEQCAAQQRqIQAMAQsgACAAKAIAKAIYEQQAIgBFDQIgACgCACECC0EAIREgAkECRw0EIAVBADYCQCAFQoCAgIAQNwI4IAVByI7AADYCXCAFQqCAgIAONwJgIAUgBUE4ajYCWCAFQdgAaiECIwBBoAFrIgMkAAJ/AkACQAJAAkACQAJ/AkACQAJAAkAgACgCAEEBaw4CAAECCyACQaWbwABBEhCTAQwJCyAALQAUQQNHBEAgAyAAQQRqNgI4IANBOGohBCMAQSBrIgEkAAJAAkACQAJAAkACQAJAIABBFGoiCC0AAEEBaw4DBAEDAAsgCEECOgAAIAQoAgAgBEEANgIABEBBmdfAAC0AACEEQZnXwABBAToAACABIAQ6AAcgBEEBRw0CIAFCADcCFCABQoGAgIDAADcCDCABQYScwAA2AgggAUEHaiABQQhqEHkAC0HsnMAAEK8BAAsgAUEANgIYIAFBATYCDCABQeigwAA2AggMAwtBmdfAAEEAOgAAIAhBAzoAAAsgAUEgaiQADAILIAFBADYCGCABQQE2AgwgAUGooMAANgIICyABQgQ3AhAgAUEIakGgncAAEH4ACwsgACgCDCEBIAIoAghBgICABHEiCEUNASAAKAIIDAILIAJBkJvAAEEVEJMBDAcLIAEgACgCECIESQ0BIAEgBGshASAAKAIIIARBDGxqCyESIANBgICAgHg2AgwgA0GIm8AAKQMANwIQIAMgCEEXdiIAOgAYIAMgADoALCADQQA2AiggAyACNgIcIANByJvAADYCJCADIANBDGo2AiAgAUUNAiASIAFBDGxqIRggA0E8aiEUIANBhAFqIRUDQAJAIBIoAggiAEUEQCADQQA2AmQgAyADQRxqNgJgIANBAzYCOCADQQI2AoABIANB4ABqIANBOGogA0GAAWpBACADQQAgAxAaIAMoAmAiASABKAIMQQFqNgIMRQ0BDAcLIABBLGwhGSASKAIEIRpBACEWA0AgA0EANgI0IAMgA0EcajYCMAJAIBYgGmoiD0EgaigCAEGAgICAeEcEQCADQYABaiITIA9BJGooAgAiGyAPQShqKAIAIhwQI0ECIQACQCADKAKAAQ0AIAMoAoQBIQkgAygCiAEhASMAQSBrIgskAEEAIQojAEHgAGsiBiQAIAZBEGogCSABQfStwABBBhAUAkAgBigCEEUEQANAIAZB1ABqIAZBEGoQGSAGKAJUIgBBAUYNAAsC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AAAANQAAABUAAACkARAAHQAAACYAAAAUAAAAc3BhcmstaW50ZXJuYWwtcnMvc3JjL3JheWNhc3QucnM0AhAAIAAAADUAAAAXAAAANAIQACAAAACCAAAAFwAAADQCEAAgAAAAiAAAABwAAAA0AhAAIAAAAIoAAAAcAAAANAIQACAAAACPAAAAIAAAAC9ydXN0Yy8xNzA2N2U5YWM2ZDdlY2I3MGU1MGY5MmMxOTQ0ZTU0NTE4OGQyMzU5L2xpYnJhcnkvc3RkL3NyYy90aHJlYWQvbG9jYWwucnMApAIQAE8AAAAUAgAAJgAAAGRlc2NyaXB0aW9uKCkgaXMgZGVwcmVjYXRlZDsgdXNlIERpc3BsYXkaAAAADAAAAAQAAAACAAAAGgAAAAwAAAAEAAAAAwAAAAIAAAAsAxAABwAAAAUAAAAbAAAABwAAABwAAABpbnRlcm5hbCBlcnJvcjogZW50ZXJlZCB1bnJlYWNoYWJsZSBjb2RlOiBpbnZhbGlkIE9uY2Ugc3RhdGVoAxAAPAAAAC9ydXN0Yy8xNzA2N2U5YWM2ZDdlY2I3MGU1MGY5MmMxOTQ0ZTU0NTE4OGQyMzU5L2xpYnJhcnkvc3RkL3NyYy9zeXMvc3luYy9vbmNlL25vX3RocmVhZHMucnMArAMQAFsAAAA1AAAAEgAAAC9ydXN0Yy8xNzA2N2U5YWM2ZDdlY2I3MGU1MGY5MmMxOTQ0ZTU0NTE4OGQyMzU5L2xpYnJhcnkvYWxsb2Mvc3JjL3NsaWNlLnJzAAAYBBAASgAAAL4BAAAdAAAAc3BhcmstaW50ZXJuYWwtcnMvc3JjL2xpYi5yc3QEEAAcAAAAHAAAADMAAAB0BBAAHAAAACcAAAAtAAAAAQAAAAAAAAB0BBAAHAAAAD8AAAAoAAAAL3J1c3RjLzE3MDY3ZTlhYzZkN2VjYjcwZTUwZjkyYzE5NDRlNTQ1MTg4ZDIzNTkvbGlicmFyeS9hbGxvYy9zcmMvdmVjL21vZC5yc8gEEABMAAAAVgoAACQAAAAAAAAAEAAAAAQAAAAdAAAAHgAAAB8AAAAgICAgOiAAAAEAAAAAAAAAQAUQAAIAAAAgICAgICAgL3J1c3RjLzE3MDY3ZTlhYzZkN2VjYjcwZTUwZjkyYzE5NDRlNTQ1MTg4ZDIzNTkvbGlicmFyeS9jb3JlL3NyYy9wdHIvbW9kLnJzAABbBRAASwAAAAsCAAABAAAAL3J1c3RjLzE3MDY3ZTlhYzZkN2VjYjcwZTUwZjkyYzE5NDRlNTQ1MTg4ZDIzNTkvbGlicmFyeS9jb3JlL3NyYy9zbGljZS9pbmRleC5ycwC4BRAATwAAAEwDAAA0AAAAuAUQAE8AAABTAwAAMgAAAGFzc2VydGlvbiBmYWlsZWQ6IHNlbGYuaXNfY2hhcl9ib3VuZGFyeShuKS9ydXN0Yy8xNzA2N2U5YWM2ZDdlY2I3MGU1MGY5MmMxOTQ0ZTU0NTE4OGQyMzU5L2xpYnJhcnkvYWxsb2Mvc3JjL3N0cmluZy5ycwAAAFIGEABLAAAA7QcAAB0AAABSBhAASwAAAPUHAAAdAAAAUgYQAEsAAAB9BQAAGwAAAC9ydXN0Yy8xNzA2N2U5YWM2ZDdlY2I3MGU1MGY5MmMxOTQ0ZTU0NTE4OGQyMzU5L2xpYnJhcnkvYWxsb2Mvc3JjL3Jhd192ZWMvbW9kLnJz0AYQAFAAAAAuAgAAEQAAACAAAAAMAAAABAAAACEAAAAiAAAAIwAAACYAAAAMAAAABAAAACcAAAAoAAAAIwBB6I7AAAvJGQEAAAApAAAAYSBEaXNwbGF5IGltcGxlbWVudGF0aW9uIHJldHVybmVkIGFuIGVycm9yIHVuZXhwZWN0ZWRseS9ydXN0Yy8xNzA2N2U5YWM2ZDdlY2I3MGU1MGY5MmMxOTQ0ZTU0NTE4OGQyMzU5L2xpYnJhcnkvYWxsb2Mvc3JjL3N0cmluZy5ycwAApwcQAEsAAADRCgAADgAAAEVycm9yAAAApwcQAEsAAAB9BQAAGwAAAGFzc2VydGlvbiBmYWlsZWQ6IHNlbGYuaXNfY2hhcl9ib3VuZGFyeShuZXdfbGVuKacHEABLAAAAsgUAAA0AAAAAAAAAEAAAAAQAAAAdAAAAHgAAAB8AAABiYWNrdHJhY2UgY2FwdHVyZSBmYWlsZWQvaG9tZS9ydW5uZXIvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9hbnlob3ctMS4wLjk4L3NyYy9lcnJvci5yc4wIEABcAAAAZwQAAA4AAAABAAAAAAAAADogAAAACRAAAgAAAAoKQ2F1c2VkIGJ5OgoAAAAYCRAAAQAAAAoKc3RhY2sgYmFja3RyYWNlOlN0YWNrIGJhY2t0cmFjZToKADYJEAARAAAAUy9ydXN0Yy8xNzA2N2U5YWM2ZDdlY2I3MGU1MGY5MmMxOTQ0ZTU0NTE4OGQyMzU5L2xpYnJhcnkvY29yZS9zcmMvaXRlci90cmFpdHMvaXRlcmF0b3IucnMAAABRCRAAWAAAAMEHAAAJAAAAL2hvbWUvcnVubmVyLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvanMtc3lzLTAuMy43Ny9zcmMvbGliLnJzAAC8CRAAWgAAAPsYAAABAAAAL2hvbWUvcnVubmVyLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2Yvd2FzbS1iaW5kZ2VuLTAuMi4xMDAvc3JjL2NvbnZlcnQvc2xpY2VzLnJzKAoQAGwAAAAkAQAADgAAAGNsb3N1cmUgaW52b2tlZCByZWN1cnNpdmVseSBvciBhZnRlciBiZWluZyBkcm9wcGVkTGF6eSBpbnN0YW5jZSBoYXMgcHJldmlvdXNseSBiZWVuIHBvaXNvbmVk1goQACoAAAAvaG9tZS9ydW5uZXIvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9vbmNlX2NlbGwtMS4yMS4zL3NyYy9saWIucnMAAAAICxAAXQAAAAgDAAAZAAAAcmVlbnRyYW50IGluaXQAAHgLEAAOAAAACAsQAF0AAAB6AgAADQAAADogAAAAAAAABAAAAAQAAAA7AAAAL3J1c3RjLzE3MDY3ZTlhYzZkN2VjYjcwZTUwZjkyYzE5NDRlNTQ1MTg4ZDIzNTkvbGlicmFyeS9hbGxvYy9zcmMvc3RyaW5nLnJzALQLEABLAAAAfQUAABsAAAAvcnVzdGMvMTcwNjdlOWFjNmQ3ZWNiNzBlNTBmOTJjMTk0NGU1NDUxODhkMjM1OS9saWJyYXJ5L2FsbG9jL3NyYy9yYXdfdmVjL21vZC5ycxAMEABQAAAALgIAABEAAAA6AAAAPAAAAAwAAAAEAAAAPQAAAD4AAAA/AAAAL3J1c3QvZGVwcy9kbG1hbGxvYy0wLjIuNy9zcmMvZGxtYWxsb2MucnNhc3NlcnRpb24gZmFpbGVkOiBwc2l6ZSA+PSBzaXplICsgbWluX292ZXJoZWFkAIwMEAApAAAAqAQAAAkAAABhc3NlcnRpb24gZmFpbGVkOiBwc2l6ZSA8PSBzaXplICsgbWF4X292ZXJoZWFkAACMDBAAKQAAAK4EAAANAAAAbGlicmFyeS9zdGQvc3JjL2JhY2t0cmFjZS5yc29wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm1QDRAAKAAAACQAAAAAAAAAAgAAAHgNEAB1bnN1cHBvcnRlZCBiYWNrdHJhY2VkaXNhYmxlZCBiYWNrdHJhY2UANA0QABwAAACKAQAAHQAAAEAAAAAQAAAABAAAAEEAAABCAAAAAQAAAAAAAABjYW5ub3QgcmVjdXJzaXZlbHkgYWNxdWlyZSBtdXRleOQNEAAgAAAAbGlicmFyeS9zdGQvc3JjL3N5cy9zeW5jL211dGV4L25vX3RocmVhZHMucnMMDhAALAAAABMAAAAJAAAAbGlicmFyeS9zdGQvc3JjL3N5bmMvcG9pc29uL29uY2UucnMASA4QACMAAACbAAAAMgAAAGxpYnJhcnkvc3RkL3NyYy9zeW5jL2xhenlfbG9jay5ycwAAAHwOEAAhAAAA0QAAABMAAAA8dW5rbm93bj7vv71tZW1vcnkgYWxsb2NhdGlvbiBvZiAgYnl0ZXMgZmFpbGVkAAC8DhAAFQAAANEOEAANAAAAbGlicmFyeS9zdGQvc3JjL2FsbG9jLnJz8A4QABgAAABkAQAACQAAAAoAAAA8AAAADAAAAAQAAABDAAAAAAAAAAgAAAAEAAAARAAAAAAAAAAIAAAABAAAAEUAAABGAAAARwAAAEgAAABJAAAAEAAAAAQAAABKAAAASwAAAEwAAABNAAAAbGlicmFyeS9zdGQvc3JjLy4uLy4uL2JhY2t0cmFjZS9zcmMvc3ltYm9saXplL21vZC5yc3QPEAA0AAAAZwEAADAAAAABAAAAAAAAAKALEAACAAAAIC0gAAEAAAAAAAAAyA8QAAMAAAAgICAgICAgICAgICAgICAgICAgYXQgAABwDBAAAQAAAE9uY2UgaW5zdGFuY2UgaGFzIHByZXZpb3VzbHkgYmVlbiBwb2lzb25lZAAA/A8Q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",typeof document>"u"?require("url").pathToFileURL(__filename).href:xe&&xe.tagName.toUpperCase()==="SCRIPT"&&xe.src||new URL("spark.cjs.min.js",document.baseURI).href));const A=wg();(typeof t=="string"||typeof Request=="function"&&t instanceof Request||typeof URL=="function"&&t instanceof URL)&&(t=fetch(t));const{instance:e,module:s}=await dg(await t,A);return pg(e,s)}const JA=-9,yg=9,OA=(yg-JA)/254,Dg=11,fg=11,j=1<<Dg,et=1<<fg,Qs=1;function Et(t){return t==="bool"||t==="bvec2"||t==="bvec3"||t==="bvec4"}function ct(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 Vt(t){return t==="float"||t==="vec2"||t==="vec3"||t==="vec4"}function Cs(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 at(t){return Vt(t)||Cs(t)}function xt(t){return t==="vec2"||t==="ivec2"||t==="uvec2"}function St(t){return t==="vec3"||t==="ivec3"||t==="uvec3"}function Zt(t){return t==="vec4"||t==="ivec4"||t==="uvec4"}function mg(t){return xt(t)||St(t)||Zt(t)}function rt(t){return t==="mat2"||t==="mat2x2"}function gt(t){return t==="mat3"||t==="mat3x3"}function ot(t){return t==="mat4"||t==="mat4x4"}function Es(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 cs(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 Mg(t){if(ct(t))return"float";if(xt(t))return"vec2";if(St(t))return"vec3";if(Zt(t))return"vec4";throw new Error(`Invalid vector type: ${t}`)}function hs(t){if(ct(t))return"uint";if(xt(t))return"uvec2";if(St(t))return"uvec3";if(Zt(t))return"uvec4";throw new Error(`Invalid vector type: ${t}`)}function xg(t){if(ct(t))return"int";if(xt(t))return"ivec2";if(St(t))return"ivec3";if(Zt(t))return"ivec4";throw new Error(`Invalid vector type: ${t}`)}function ls(t){if(typeof t=="string")return t;if(typeof t=="object"&&t.type)return t.type;throw new Error(`Invalid DynoType: ${String(t)}`)}function aA(t){return Math.trunc(t).toString()}function rA(t){return`${Math.max(0,Math.trunc(t)).toString()}u`}function H(t){return t===Number.POSITIVE_INFINITY?"INFINITY":t===Number.NEGATIVE_INFINITY?"-INFINITY":Number.isInteger(t)?t.toFixed(1):t.toString()}function _(t){return t instanceof st?t.type:t.dynoOut().type}class st{constructor(A){this.__isDynoValue=!0,this.type=A}}class q extends st{constructor(A,e){super(A.outTypes[e]),this.dyno=A,this.key=e}}class Dt extends st{constructor(A,e){super(A),this.literal=e}getLiteral(){return this.literal}}function oe(t,A){return new Dt(t,A)}class us extends Dt{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 rA(e);case"int":return aA(e);case"float":return H(e);case"bvec2":{const s=e;return`bvec2(${s[0]}, ${s[1]})`}case"uvec2":{if(e instanceof Q.Vector2)return`uvec2(${rA(e.x)}, ${rA(e.y)})`;const s=e;return`uvec2(${rA(s[0])}, ${rA(s[1])})`}case"ivec2":{if(e instanceof Q.Vector2)return`ivec2(${aA(e.x)}, ${aA(e.y)})`;const s=e;return`ivec2(${aA(s[0])}, ${aA(s[1])})`}case"vec2":{if(e instanceof Q.Vector2)return`vec2(${H(e.x)}, ${H(e.y)})`;const s=e;return`vec2(${H(s[0])}, ${H(s[1])})`}case"bvec3":{const s=e;return`bvec3(${s[0]}, ${s[1]}, ${s[2]})`}case"uvec3":{if(e instanceof Q.Vector3)return`uvec3(${rA(e.x)}, ${rA(e.y)}, ${rA(e.z)})`;const s=e;return`uvec3(${rA(s[0])}, ${rA(s[1])}, ${rA(s[2])})`}case"ivec3":{if(e instanceof Q.Vector3)return`ivec3(${aA(e.x)}, ${aA(e.y)}, ${aA(e.z)})`;const s=e;return`ivec3(${aA(s[0])}, ${aA(s[1])}, ${aA(s[2])})`}case"vec3":{if(e instanceof Q.Vector3)return`vec3(${H(e.x)}, ${H(e.y)}, ${H(e.z)})`;const s=e;return`vec3(${H(s[0])}, ${H(s[1])}, ${H(s[2])})`}case"bvec4":{const s=e;return`bvec4(${s[0]}, ${s[1]}, ${s[2]}, ${s[3]})`}case"uvec4":{if(e instanceof Q.Vector4)return`uvec4(${rA(e.x)}, ${rA(e.y)}, ${rA(e.z)}, ${rA(e.w)})`;const s=e;return`uvec4(${rA(s[0])}, ${rA(s[1])}, ${rA(s[2])}, ${rA(s[3])})`}case"ivec4":{if(e instanceof Q.Vector4)return`ivec4(${aA(e.x)}, ${aA(e.y)}, ${aA(e.z)}, ${aA(e.w)})`;const s=e;return`ivec4(${aA(s[0])}, ${aA(s[1])}, ${aA(s[2])}, ${aA(s[3])})`}case"vec4":{if(e instanceof Q.Vector4)return`vec4(${H(e.x)}, ${H(e.y)}, ${H(e.z)}, ${H(e.w)})`;if(e instanceof Q.Quaternion)return`vec4(${H(e.x)}, ${H(e.y)}, ${H(e.z)}, ${H(e.w)})`;const s=e;return`vec4(${H(s[0])}, ${H(s[1])}, ${H(s[2])}, ${H(s[3])})`}case"mat2":case"mat2x2":{const s=e,i=s instanceof Q.Matrix2?s.elements:e,n=new Array(4).fill(0).map((a,r)=>H(i[r]));return`${A}(${n.join(", ")})`}case"mat2x3":{const s=e,i=new Array(6).fill(0).map((n,a)=>H(s[a]));return`${A}(${i.join(", ")})`}case"mat2x4":{const s=e,i=new Array(8).fill(0).map((n,a)=>H(s[a]));return`${A}(${i.join(", ")})`}case"mat3":case"mat3x3":{const s=e,i=s instanceof Q.Matrix3?s.elements:e,n=new Array(9).fill(0).map((a,r)=>H(i[r]));return`${A}(${n.join(", ")})`}case"mat3x2":{const s=e,i=new Array(6).fill(0).map((n,a)=>H(s[a]));return`${A}(${i.join(", ")})`}case"mat3x4":{const s=e,i=new Array(12).fill(0).map((n,a)=>H(s[a]));return`${A}(${i.join(", ")})`}case"mat4":case"mat4x4":{const s=e,i=s instanceof Q.Matrix4?s.elements:e,n=new Array(16).fill(0).map((a,r)=>H(i[r]));return`${A}(${n.join(", ")})`}case"mat4x2":{const s=e,i=new Array(8).fill(0).map((n,a)=>H(s[a]));return`${A}(${i.join(", ")})`}case"mat4x3":{const s=e,i=new Array(12).fill(0).map((n,a)=>H(s[a]));return`${A}(${i.join(", ")})`}default:throw new Error(`Type not implemented: ${String(A)}`)}}}function K(t,A){return new us(t,A)}function Gt(t){const A=String(t);if(Et(t))return`${A}(false)`;if(at(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 Sg(t){const A=String(t);if(Et(t))return`${A}(true)`;if(at(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 Ng(t){const A=String(t);if(Et(t))return`${A}(true)`;if(at(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 ts=" ";class ds{constructor({indent:A}={}){this.globals=new Set,this.statements=[],this.uniforms={},this.declares=new Set,this.updaters=[],this.sequence=0,this.indent=ts,this.indent=A??ts}nextSequence(){return this.sequence++}}class V{constructor({inTypes:A,outTypes:e,inputs:s,update:i,globals:n,statements:a,generate:r}){this.inTypes=A??{},this.outTypes=e??{},this.inputs=s??{},this.update=i,this.globals=n,this.statements=a,this.generate=r??(({inputs:g,outputs:I,compile:B})=>{var o,C;return{globals:(o=this.globals)==null?void 0:o.call(this,{inputs:g,outputs:I,compile:B}),statements:(C=this.statements)==null?void 0:C.call(this,{inputs:g,outputs:I,compile:B})}})}get outputs(){const A={};for(const e in this.outTypes)A[e]=new q(this,e);return A}apply(A){return Object.assign(this.inputs,A),this.outputs}compile({inputs:A,outputs:e,compile:s}){const i=[`// ${this.constructor.name}(${Object.values(A).join(", ")}) => (${Object.values(e).join(", ")})`],n=[];for(const I in e){const B=e[I];B&&!s.declares.has(B)&&(s.declares.add(B),n.push(I))}const{globals:a,statements:r,uniforms:g}=this.generate({inputs:A,outputs:e,compile:s});for(const I of a??[])s.globals.add(I);for(const I in g)s.uniforms[I]=g[I];this.update&&s.updaters.push(this.update);for(const I of n){const B=e[I];B&&(s.uniforms[B]||i.push(`${He(B,this.outTypes[I])};`))}return r!=null&&r.length&&(i.push("{"),i.push(...r.map(I=>s.indent+I)),i.push("}")),i}}class qA extends V{constructor({inTypes:A,outTypes:e,inputs:s,update:i,globals:n,construct:a}){super({inTypes:A,outTypes:e,inputs:s,update:i,globals:n,generate:r=>this.generateBlock(r)}),this.construct=a}generateBlock({inputs:A,outputs:e,compile:s}){var h,c;const i={},n={};for(const l in A)A[l]!=null&&(i[l]=new Dt(this.inTypes[l],A[l]));for(const l in e)e[l]!=null&&(n[l]=new st(this.outTypes[l]));const a={roots:[]},r=this.construct(i,n,a);for(const l of((h=this.globals)==null?void 0:h.call(this,{inputs:A,outputs:e,compile:s}))??[])s.globals.add(l);const g=[],I=new Map;function B(l,u,d){let w=I.get(l);if(!w){w={sequence:s.nextSequence(),outNames:new Map,newOuts:new Set},I.set(l,w);for(const y in l.inputs){let p=l.inputs[y];for(;p;){if(p instanceof st){p instanceof q&&B(p.dyno,p.key);break}p=p.dynoOut()}}g.push(l)}u&&(d||w.newOuts.add(u),w.outNames.set(u,d??`${u}_${w.sequence}`))}for(const l of a.roots)B(l);for(const l in n){let u=(r==null?void 0:r[l])??n[l];for(;u;){if(u instanceof st){u instanceof q&&B(u.dyno,u.key,e[l]);break}u=u.dynoOut()}n[l]=u}const o=[];for(const l of g){const u={},d={};for(const p in l.inputs){let m=l.inputs[p];for(;m;){if(m instanceof st){if(m instanceof Dt)u[p]=m.getLiteral();else if(m instanceof q){const N=(c=I.get(m.dyno))==null?void 0:c.outNames.get(m.key);if(!N)throw new Error(`Source not found for ${m.dyno.constructor.name}.${m.key}`);u[p]=N}break}m=m.dynoOut()}}const w=I.get(l)??{outNames:new Map};for(const[p,m]of w.outNames.entries())d[p]=m;const y=l.compile({inputs:u,outputs:d,compile:s});o.push(y)}const C=[];for(const l in e)n[l]instanceof Dt&&C.push(`${e[l]} = ${n[l].getLiteral()};`);return C.length>0&&o.push(C),{statements:o.flatMap((l,u)=>u===0?l:["",...l])}}}function kA(t,A,e,{update:s,globals:i}={}){return new qA({inTypes:t,outTypes:A,construct:e,update:s,globals:i})}function Ot({inTypes:t,outTypes:A,inputs:e,update:s,globals:i,statements:n,generate:a}){return new V({inTypes:t,outTypes:A,inputs:e,update:s,globals:i,statements:n,generate:a})}function He(t,A,e){const s=typeof A=="string"?A:A.type;if(!s)throw new Error(`Invalid DynoType: ${String(A)}`);return`${s} ${t}${e!=null?`[${e}]`:""}`}function bA(t){var n;let A=!1;const e=t.split(`
`).map(a=>{const r=a.trimEnd();return A?r:r.length>0?(A=!0,r):null}).filter(a=>a!=null);for(;e.length>0&&e[e.length-1].length===0;)e.pop();if(e.length===0)return[];const s=(n=e[0].match(/^\s*/))==null?void 0:n[0];if(!s)return e;const i=new RegExp(`^${s}`);return e.map(a=>a.replace(i,""))}function EA(t){return bA(t).join(`
`)}class S extends V{constructor({a:A,outKey:e,outTypeFunc:s}){const i={a:_(A)},n=s(_(A)),a={[e]:n};super({inTypes:i,outTypes:a,inputs:{a:A}}),this.outKey=e}dynoOut(){return new q(this,this.outKey)}}class $ extends V{constructor({a:A,b:e,outKey:s,outTypeFunc:i}){const n={a:_(A),b:_(e)},a=i(_(A),_(e)),r={[s]:a};super({inTypes:n,outTypes:r,inputs:{a:A,b:e}}),this.outKey=s}dynoOut(){return new q(this,this.outKey)}}class ht extends V{constructor({a:A,b:e,c:s,outKey:i,outTypeFunc:n}){const a={a:_(A),b:_(e),c:_(s)},r=n(_(A),_(e),_(s)),g={[i]:r};super({inTypes:a,outTypes:g,inputs:{a:A,b:e,c:s}}),this.outKey=i}dynoOut(){return new q(this,this.outKey)}}const X={type:"Gsplat"},Wt={type:"PackedSplats"},Fg=t=>new ps({packedSplats:t}),Tt=(t,A)=>new Ds({packedSplats:t,index:A}),ws=(t,A,e,s)=>new fs({packedSplats:t,index:A,base:e,count:s}),Bt=t=>new ms({gsplat:t}),it=({gsplat:t,flags:A,index:e,center:s,scales:i,quaternion:n,rgba:a,rgb:r,opacity:g,x:I,y:B,z:o,r:C,g:E,b:h})=>new Ms({gsplat:t,flags:A,index:e,center:s,scales:i,quaternion:n,rgba:a,rgb:r,opacity:g,x:I,y:B,z:o,r:C,g:E,b:h}),Re=t=>new Ss({gsplat:t}),Ke=(t,{scale:A,rotate:e,translate:s,recolor:i})=>new Ns({gsplat:t,scale:A,rotate:e,translate:s,recolor:i}),FA=EA(`
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;
}
`),ue=EA(`
struct PackedSplats {
usampler2DArray texture;
int numSplats;
};
`);class ps extends S{constructor({packedSplats:A}){super({a:A,outKey:"numSplats",outTypeFunc:()=>"int"}),this.statements=({inputs:e,outputs:s})=>[`${s.numSplats} = ${e.a}.numSplats;`]}}const ys=EA(`
bool readPackedSplat(usampler2DArray texture, int numSplats, int index, out Gsplat gsplat) {
if ((index >= 0) && (index < numSplats)) {
uvec4 packed = texelFetch(texture, splatTexCoord(index), 0);
unpackSplat(packed, gsplat.center, gsplat.scales, gsplat.quaternion, gsplat.rgba);
return true;
} else {
return false;
}
}
`);class Ds extends V{constructor({packedSplats:A,index:e}){super({inTypes:{packedSplats:Wt,index:"int"},outTypes:{gsplat:X},inputs:{packedSplats:A,index:e},globals:()=>[FA,ue,ys],statements:({inputs:s,outputs:i})=>{const{gsplat:n}=i;if(!n)return[];const{packedSplats:a,index:r}=s;let g;return a&&r?g=bA(`
if (readPackedSplat(${a}.texture, ${a}.numSplats, ${r}, ${n})) {
bool zeroSize = all(equal(${n}.scales, vec3(0.0, 0.0, 0.0)));
${n}.flags = zeroSize ? 0u : GSPLAT_FLAG_ACTIVE;
} else {
${n}.flags = 0u;
}
`):g=[`${n}.flags = 0u;`],g.push(`${n}.index = ${r??"0"};`),g}})}dynoOut(){return new q(this,"gsplat")}}class fs extends V{constructor({packedSplats:A,index:e,base:s,count:i}){super({inTypes:{packedSplats:Wt,index:"int",base:"int",count:"int"},outTypes:{gsplat:X},inputs:{packedSplats:A,index:e,base:s,count:i},globals:()=>[FA,ue,ys],statements:({inputs:n,outputs:a})=>{const{gsplat:r}=a;if(!r)return[];const{packedSplats:g,index:I,base:B,count:o}=n;let C;return g&&I&&B&&o?C=bA(`
${r}.flags = 0u;
if ((${I} >= ${B}) && (${I} < (${B} + ${o}))) {
if (readPackedSplat(${g}.texture, ${g}.numSplats, ${I}, ${r})) {
bool zeroSize = all(equal(${r}.scales, vec3(0.0, 0.0, 0.0)));
${r}.flags = zeroSize ? 0u : GSPLAT_FLAG_ACTIVE;
}
}
`):C=[`${r}.flags = 0u;`],C.push(`${r}.index = ${I??"0"};`),C}})}dynoOut(){return new q(this,"gsplat")}}class ms extends V{constructor({gsplat:A}){super({inTypes:{gsplat:X},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:()=>[FA],statements:({inputs:e,outputs:s})=>{const{gsplat:i}=e,{flags:n,active:a,index:r,center:g,scales:I,quaternion:B,rgba:o,rgb:C,opacity:E,x:h,y:c,z:l,r:u,g:d,b:w}=s;return[n?`${n} = ${i?`${i}.flags`:"0u"};`:null,a?`${a} = isGsplatActive(${i?`${i}.flags`:"0u"});`:null,r?`${r} = ${i?`${i}.index`:"0"};`:null,g?`${g} = ${i?`${i}.center`:"vec3(0.0, 0.0, 0.0)"};`:null,I?`${I} = ${i?`${i}.scales`:"vec3(0.0, 0.0, 0.0)"};`:null,B?`${B} = ${i?`${i}.quaternion`:"vec4(0.0, 0.0, 0.0, 1.0)"};`:null,o?`${o} = ${i?`${i}.rgba`:"vec4(0.0, 0.0, 0.0, 0.0)"};`:null,C?`${C} = ${i?`${i}.rgba.rgb`:"vec3(0.0, 0.0, 0.0)"};`:null,E?`${E} = ${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,d?`${d} = ${i?`${i}.rgba.g`:"0.0"};`:null,w?`${w} = ${i?`${i}.rgba.b`:"0.0"};`:null].filter(Boolean)}})}}class Ms extends V{constructor({gsplat:A,flags:e,index:s,center:i,scales:n,quaternion:a,rgba:r,rgb:g,opacity:I,x:B,y:o,z:C,r:E,g:h,b:c}){super({inTypes:{gsplat:X,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:X},inputs:{gsplat:A,flags:e,index:s,center:i,scales:n,quaternion:a,rgba:r,rgb:g,opacity:I,x:B,y:o,z:C,r:E,g:h,b:c},globals:()=>[FA],statements:({inputs:l,outputs:u})=>{const{gsplat:d}=u;if(!d)return[];const{gsplat:w,flags:y,index:p,center:m,scales:N,quaternion:f,rgba:D,rgb:G,opacity:x,x:M,y:b,z:F,r:k,g:U,b:L}=l;return[`${d}.flags = ${y??(w?`${w}.flags`:"0u")};`,`${d}.index = ${p??(w?`${w}.index`:"0")};`,`${d}.center = ${m??(w?`${w}.center`:"vec3(0.0, 0.0, 0.0)")};`,`${d}.scales = ${N??(w?`${w}.scales`:"vec3(0.0, 0.0, 0.0)")};`,`${d}.quaternion = ${f??(w?`${w}.quaternion`:"vec4(0.0, 0.0, 0.0, 1.0)")};`,`${d}.rgba = ${D??(w?`${w}.rgba`:"vec4(0.0, 0.0, 0.0, 0.0)")};`,G?`${d}.rgba.rgb = ${G};`:null,x?`${d}.rgba.a = ${x};`:null,M?`${d}.center.x = ${M};`:null,b?`${d}.center.y = ${b};`:null,F?`${d}.center.z = ${F};`:null,k?`${d}.rgba.r = ${k};`:null,U?`${d}.rgba.g = ${U};`:null,L?`${d}.rgba.b = ${L};`:null].filter(Boolean)}})}dynoOut(){return new q(this,"gsplat")}}const xs=EA(`
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 Ss extends S{constructor({gsplat:A}){super({a:A,outKey:"normal",outTypeFunc:()=>"vec3"}),this.globals=()=>[FA,xs],this.statements=({inputs:e,outputs:s})=>[`${s.normal} = gsplatNormal(${e.a}.scales, ${e.a}.quaternion);`]}}class Ns extends V{constructor({gsplat:A,scale:e,rotate:s,translate:i,recolor:n}){super({inTypes:{gsplat:X,scale:"float",rotate:"vec4",translate:"vec3",recolor:"vec4"},outTypes:{gsplat:X},inputs:{gsplat:A,scale:e,rotate:s,translate:i,recolor:n},globals:()=>[FA],statements:({inputs:a,outputs:r,compile:g})=>{const{gsplat:I}=r;if(!I||!a.gsplat)return[];const{scale:B,rotate:o,translate:C,recolor:E}=a,h=g.indent;return[`${I} = ${a.gsplat};`,`if (isGsplatActive(${I}.flags)) {`,B?`${h}${I}.center *= ${B};`:null,o?`${h}${I}.center = quatVec(${o}, ${I}.center);`:null,C?`${h}${I}.center += ${C};`:null,B?`${h}${I}.scales *= ${B};`:null,o?`${h}${I}.quaternion = quatQuat(${o}, ${I}.quaternion);`:null,E?`${h}${I}.rgba *= ${E};`:null,"}"].filter(Boolean)}})}dynoOut(){return new q(this,"gsplat")}}const Fs=t=>new ks({gsplat:t}),kg=t=>new qe({rgba8:t});class ks extends V{constructor({gsplat:A}){super({inTypes:{gsplat:X},inputs:{gsplat:A},globals:()=>[FA],statements:({inputs:e,outputs:s})=>{const{output:i}=s;if(!i)return[];const{gsplat:n}=e;return n?bA(`
if (isGsplatActive(${n}.flags)) {
${i} = packSplat(${n}.center, ${n}.scales, ${n}.quaternion, ${n}.rgba);
} else {
${i} = uvec4(0u, 0u, 0u, 0u);
}
`):[`${i} = uvec4(0u, 0u, 0u, 0u);`]}})}dynoOut(){return new q(this,"output")}}class qe extends V{constructor({rgba8:A}){super({inTypes:{rgba8:"vec4"},inputs:{rgba8:A},statements:({inputs:e,outputs:s})=>[`target = ${e.rgba8??"vec4(0.0, 0.0, 0.0, 0.0)"};`]})}dynoOut(){return new q(this,"rgba8")}}const Rg=(t,A,e)=>new R({key:t,type:A,value:e}),Gg=(t=!1,A)=>new Ie({key:A,value:t}),Ug=(t=0,A)=>new Rs({key:A,value:t}),bg=(t=0,A)=>new Jt({key:A,value:t}),TA=(t=0,A)=>new Qt({key:A,value:t}),vg=(t,A)=>new Gs({key:A,value:t}),Lg=(t,A)=>new Us({key:A,value:t}),Yg=(t,A)=>new bs({key:A,value:t}),Tg=(t,A)=>new vs({key:A,value:t}),Jg=(t,A)=>new Ls({key:A,value:t}),Hg=(t,A)=>new Ys({key:A,value:t}),Kg=(t,A)=>new Ts({key:A,value:t}),$A=(t,A)=>new mt({key:A,value:t}),qg=(t,A)=>new Js({key:A,value:t}),zg=(t,A)=>new Hs({key:A,value:t}),_g=(t,A)=>new Ks({key:A,value:t}),Vg=(t,A)=>new Pt({key:A,value:t}),Zg=(t,A)=>new qs({key:A,value:t}),Og=(t,A)=>new zs({key:A,value:t}),Wg=(t,A)=>new _s({key:A,value:t}),Pg=(t,A)=>new Vs({key:A,value:t}),jg=(t,A)=>new Zs({key:A,value:t}),Xg=(t,A)=>new Os({key:A,value:t}),$g=(t,A)=>new Ws({key:A,value:t}),Ao=(t,A)=>new Ps({key:A,value:t}),to=(t,A)=>new js({key:A,value:t}),eo=(t,A)=>new Xs({key:A,value:t}),so=(t,A)=>new $s({key:A,value:t}),io=(t,A)=>new Ai({key:A,value:t}),no=(t,A)=>new ti({key:A,value:t}),ao=(t,A)=>new ei({key:A,value:t}),ro=(t,A)=>new si({key:A,value:t}),go=(t,A)=>new bt({key:A,value:t}),oo=(t,A)=>new ii({key:t,value:A}),Io=(t,A)=>new ni({key:A,value:t}),Bo=(t,A)=>new ai({key:A,value:t}),Qo=(t,A)=>new ri({key:A,value:t}),Co=(t,A)=>new gi({key:A,value:t}),Eo=(t,A)=>new oi({key:A,value:t}),co=(t,A)=>new Ii({key:A,value:t}),ho=(t,A)=>new Bi({key:A,value:t}),lo=(t,A)=>new Qi({key:A,value:t}),uo=(t,A)=>new Ci({key:A,value:t}),wo=(t,A)=>new Ei({key:A,value:t});class R extends V{constructor({key:A,type:e,count:s,value:i,update:n,globals:a}){A=A??"value",super({outTypes:{[A]:e},update:()=>{if(n){const r=n(this.value);r!==void 0&&(this.value=r)}this.uniform.value=this.value},generate:({inputs:r,outputs:g})=>{const I=(a==null?void 0:a({inputs:r,outputs:g}))??[],B={},o=g[A];return o&&(I.push(`uniform ${He(o,e,s)};`),B[o]=this.uniform),{globals:I,uniforms:B}}}),this.type=e,this.count=s,this.value=i,this.uniform={value:i},this.outKey=A}dynoOut(){return new q(this,this.outKey)}}class Ie extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"bool",value:e,update:s})}}class Rs extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"uint",value:e,update:s})}}class Jt extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"int",value:e,update:s})}}class Qt extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"float",value:e,update:s})}}class Gs extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"bvec2",value:e,update:s})}}class Us extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"uvec2",value:e,update:s})}}class bs extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"ivec2",value:e,update:s})}}class vs extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"vec2",value:e,update:s})}}class Ls extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"bvec3",value:e,update:s})}}class Ys extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"uvec3",value:e,update:s})}}class Ts extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"ivec3",value:e,update:s})}}class mt extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"vec3",value:e,update:s})}}class Js extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"bvec4",value:e,update:s})}}class Hs extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"uvec4",value:e,update:s})}}class Ks extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"ivec4",value:e,update:s})}}class Pt extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"vec4",value:e,update:s})}}class qs extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"mat2",value:e,update:s})}}class zs extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"mat2x2",value:e,update:s})}}class _s extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"mat2x3",value:e,update:s})}}class Vs extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"mat2x4",value:e,update:s})}}class Zs extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"mat3",value:e,update:s})}}class Os extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"mat3x2",value:e,update:s})}}class Ws extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"mat3x3",value:e,update:s})}}class Ps extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"mat3x4",value:e,update:s})}}class js extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"mat4",value:e,update:s})}}class Xs extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"mat4x2",value:e,update:s})}}class $s extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"mat4x3",value:e,update:s})}}class Ai extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"mat4x4",value:e,update:s})}}class ti extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"usampler2D",value:e,update:s})}}class ei extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"isampler2D",value:e,update:s})}}class si extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"sampler2D",value:e,update:s})}}class bt extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"usampler2DArray",value:e,update:s})}}class ii extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"isampler2DArray",value:e,update:s})}}class ni extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"sampler2DArray",value:e,update:s})}}class ai extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"usampler3D",value:e,update:s})}}class ri extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"isampler3D",value:e,update:s})}}class gi extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"sampler3D",value:e,update:s})}}class oi extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"usamplerCube",value:e,update:s})}}class Ii extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"isamplerCube",value:e,update:s})}}class Bi extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"samplerCube",value:e,update:s})}}class Qi extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"sampler2DShadow",value:e,update:s})}}class Ci extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"sampler2DArrayShadow",value:e,update:s})}}class Ei extends R{constructor({key:A,value:e,update:s}){super({key:A,type:"samplerCubeShadow",value:e,update:s})}}var hA=Uint8Array,wt=Uint16Array,po=Int32Array,ci=new hA([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]),hi=new hA([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]),yo=new hA([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),li=function(t,A){for(var e=new wt(31),s=0;s<31;++s)e[s]=A+=1<<t[s-1];for(var i=new po(e[30]),s=1;s<30;++s)for(var n=e[s];n<e[s+1];++n)i[n]=n-e[s]<<5|s;return{b:e,r:i}},ui=li(ci,2),di=ui.b,Do=ui.r;di[28]=258,Do[258]=28;var fo=li(hi,0),mo=fo.b,Ge=new wt(32768);for(var iA=0;iA<32768;++iA){var XA=(iA&43690)>>1|(iA&21845)<<1;XA=(XA&52428)>>2|(XA&13107)<<2,XA=(XA&61680)>>4|(XA&3855)<<4,Ge[iA]=((XA&65280)>>8|(XA&255)<<8)>>1}var vt=function(t,A,e){for(var s=t.length,i=0,n=new wt(A);i<s;++i)t[i]&&++n[t[i]-1];var a=new wt(A);for(i=1;i<A;++i)a[i]=a[i-1]+n[i-1]<<1;var r;if(e){r=new wt(1<<A);var g=15-A;for(i=0;i<s;++i)if(t[i])for(var I=i<<4|t[i],B=A-t[i],o=a[t[i]-1]++<<B,C=o|(1<<B)-1;o<=C;++o)r[Ge[o]>>g]=I}else for(r=new wt(s),i=0;i<s;++i)t[i]&&(r[i]=Ge[a[t[i]-1]++]>>15-t[i]);return r},jt=new hA(288);for(var iA=0;iA<144;++iA)jt[iA]=8;for(var iA=144;iA<256;++iA)jt[iA]=9;for(var iA=256;iA<280;++iA)jt[iA]=7;for(var iA=280;iA<288;++iA)jt[iA]=8;var wi=new hA(32);for(var iA=0;iA<32;++iA)wi[iA]=5;var Mo=vt(jt,9,1),xo=vt(wi,5,1),Se=function(t){for(var A=t[0],e=1;e<t.length;++e)t[e]>A&&(A=t[e]);return A},LA=function(t,A,e){var s=A/8|0;return(t[s]|t[s+1]<<8)>>(A&7)&e},Ne=function(t,A){var e=A/8|0;return(t[e]|t[e+1]<<8|t[e+2]<<16)>>(A&7)},pi=function(t){return(t+7)/8|0},ne=function(t,A,e){return(A==null||A<0)&&(A=0),(e==null||e>t.length)&&(e=t.length),new hA(t.subarray(A,e))},So=["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"],RA=function(t,A,e){var s=new Error(A||So[t]);if(s.code=t,Error.captureStackTrace&&Error.captureStackTrace(s,RA),!e)throw s;return s},No=function(t,A,e,s){var i=t.length,n=0;if(!i||A.f&&!A.l)return e||new hA(0);var a=!e,r=a||A.i!=2,g=A.i;a&&(e=new hA(i*3));var I=function(DA){var MA=e.length;if(DA>MA){var cA=new hA(Math.max(MA*2,DA));cA.set(e),e=cA}},B=A.f||0,o=A.p||0,C=A.b||0,E=A.l,h=A.d,c=A.m,l=A.n,u=i*8;do{if(!E){B=LA(t,o,1);var d=LA(t,o+1,3);if(o+=3,d)if(d==1)E=Mo,h=xo,c=9,l=5;else if(d==2){var m=LA(t,o,31)+257,N=LA(t,o+10,15)+4,f=m+LA(t,o+5,31)+1;o+=14;for(var D=new hA(f),G=new hA(19),x=0;x<N;++x)G[yo[x]]=LA(t,o+x*3,7);o+=N*3;for(var M=Se(G),b=(1<<M)-1,F=vt(G,M,1),x=0;x<f;){var k=F[LA(t,o,b)];o+=k&15;var w=k>>4;if(w<16)D[x++]=w;else{var U=0,L=0;for(w==16?(L=3+LA(t,o,3),o+=2,U=D[x-1]):w==17?(L=3+LA(t,o,7),o+=3):w==18&&(L=11+LA(t,o,127),o+=7);L--;)D[x++]=U}}var AA=D.subarray(0,m),z=D.subarray(m);c=Se(AA),l=Se(z),E=vt(AA,c,1),h=vt(z,l,1)}else RA(1);else{var w=pi(o)+4,y=t[w-4]|t[w-3]<<8,p=w+y;if(p>i){g&&RA(0);break}r&&I(C+y),e.set(t.subarray(w,p),C),A.b=C+=y,A.p=o=p*8,A.f=B;continue}if(o>u){g&&RA(0);break}}r&&I(C+131072);for(var sA=(1<<c)-1,tA=(1<<l)-1,O=o;;O=o){var U=E[Ne(t,o)&sA],T=U>>4;if(o+=U&15,o>u){g&&RA(0);break}if(U||RA(2),T<256)e[C++]=T;else if(T==256){O=o,E=null;break}else{var W=T-254;if(T>264){var x=T-257,Z=ci[x];W=LA(t,o,(1<<Z)-1)+di[x],o+=Z}var P=h[Ne(t,o)&tA],v=P>>4;P||RA(3),o+=P&15;var z=mo[v];if(v>3){var Z=hi[v];z+=Ne(t,o)&(1<<Z)-1,o+=Z}if(o>u){g&&RA(0);break}r&&I(C+131072);var pA=C+W;if(C<z){var IA=n-z,yA=Math.min(z,pA);for(IA+C<0&&RA(3);C<yA;++C)e[C]=s[IA+C]}for(;C<pA;++C)e[C]=e[C-z]}}A.l=E,A.p=O,A.b=C,A.f=B,E&&(B=1,A.m=c,A.d=h,A.n=l)}while(!B);return C!=e.length&&a?ne(e,0,C):e.subarray(0,C)},Fo=new hA(0),ko=function(t){(t[0]!=31||t[1]!=139||t[2]!=8)&&RA(6,"invalid gzip data");var A=t[3],e=10;A&4&&(e+=(t[10]|t[11]<<8)+2);for(var s=(A>>3&1)+(A>>4&1);s>0;s-=!t[e++]);return e+(A&2)},Fe=function(){function t(A,e){typeof A=="function"&&(e=A,A={}),this.ondata=e;var s=A&&A.dictionary&&A.dictionary.subarray(-32768);this.s={i:0,b:s?s.length:0},this.o=new hA(32768),this.p=new hA(0),s&&this.o.set(s)}return t.prototype.e=function(A){if(this.ondata||RA(5),this.d&&RA(4),!this.p.length)this.p=A;else if(A.length){var e=new hA(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,s=No(this.p,this.s,this.o);this.ondata(ne(s,e,this.s.b),this.d),this.o=ne(s,this.s.b-32768),this.s.b=this.o.length,this.p=ne(this.p,this.s.p/8|0),this.s.p&=7},t.prototype.push=function(A,e){this.e(A),this.c(e)},t}(),yi=function(){function t(A,e){this.v=1,this.r=0,Fe.call(this,A,e)}return t.prototype.push=function(A,e){if(Fe.prototype.e.call(this,A),this.r+=A.length,this.v){var s=this.p.subarray(this.v-1),i=s.length>3?ko(s):4;if(i>s.length){if(!e)return}else this.v>1&&this.onmember&&this.onmember(this.r-s.length);this.p=s.subarray(i),this.v=0}Fe.prototype.c.call(this,e),this.s.f&&!this.s.l&&!e&&(this.v=pi(this.s.p)+9,this.s={i:0},this.o=new hA(0),this.push(new hA(0),e))},t}(),Ro=typeof TextDecoder<"u"&&new TextDecoder,Go=0;try{Ro.decode(Fo,{stream:!0}),Go=1}catch{}const Xt=new Float32Array(1),de=new Uint32Array(Xt.buffer);function Uo(t){return Xt[0]=t,de[0]}function bo(t){return de[0]=t,Xt[0]}function nt(t){Xt[0]=t;const A=de[0],e=A>>31&1,s=A>>23&255,i=A&8388607,n=e<<15;if(s===255)return i!==0?n|32767:n|31744;const a=s-127+15;if(a>=31)return n|31744;if(a<=0){if(a<-10)return n;const g=(i|8388608)>>1-a+13;return n|g}const r=i>>13;return n|a<<10|r}function wA(t){const A=t>>15&1,e=t>>10&31,s=t&1023;let i;if(e===0)if(s===0)i=A<<31;else{let n=s,a=-14;for(;(n&1024)===0;)n<<=1,a--;n&=1023;const r=a+127,g=n<<13;i=A<<31|r<<23|g}else if(e===31)s===0?i=A<<31|2139095040:i=A<<31|2143289344;else{const n=e-15+127,a=s<<13;i=A<<31|n<<23|a}return de[0]=i,Xt[0]}function NA(t){return Math.max(0,Math.min(255,Math.round(t*255)))}function Lt(t){return Math.max(-127,Math.min(127,Math.round(t*127)))}function Di(t){return t/255}function fi(t){return t/127}class vo{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 s=await this.asyncFetch(A);for(this.items.push({key:A,data:s});this.items.length>this.maxItems;)this.items.shift();return s}}function Lo(t,A){const e=Object.entries(t).map(([s,i])=>[s,A(i,s)]);return Object.fromEntries(e)}function Yo(t,A){const e=Object.entries(t).map(([s,i])=>[s,A(i,s)]).filter(([s,i])=>i!==void 0);return Object.fromEntries(e)}function mi(t){const A=[],e=new Set;function s(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(s):Object.values(i).forEach(s))}return s(t),A}function To(t,A){return new Array(t).fill(null).map((e,s)=>A(s))}class Mi{constructor({allocate:A,dispose:e,valid:s}){this.items=[],this.allocate=A,this.dispose=e,this.valid=s}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 Be(t,A,e,s,i,n,a,r,g,I,B,o,C,E,h,c){const l=NA(E),u=NA(h),d=NA(c),w=NA(C),y=ze(new Q.Quaternion(g,I,B,o)),p=y&255,m=y>>>8&255,N=y>>>16&255,f=n===0?0:Math.min(255,Math.max(0,Math.round((Math.log(n)-JA)/OA)+1)),D=a===0?0:Math.min(255,Math.max(0,Math.round((Math.log(a)-JA)/OA)+1)),G=r===0?0:Math.min(255,Math.max(0,Math.round((Math.log(r)-JA)/OA)+1)),x=nt(e),M=nt(s),b=nt(i),F=A*4;t[F]=l|u<<8|d<<16|w<<24,t[F+1]=x|M<<16,t[F+2]=b|p<<16|m<<24,t[F+3]=f|D<<8|G<<16|N<<24}function Jo(t,A,e,s,i){const n=nt(e),a=nt(s),r=nt(i),g=A*4;t[g+1]=n|a<<16,t[g+2]=r|t[g+2]&4294901760}function Ho(t,A,e,s,i){const n=e===0?0:Math.min(255,Math.max(0,Math.round((Math.log(e)-JA)/OA)+1)),a=s===0?0:Math.min(255,Math.max(0,Math.round((Math.log(s)-JA)/OA)+1)),r=i===0?0:Math.min(255,Math.max(0,Math.round((Math.log(i)-JA)/OA)+1)),g=A*4;t[g+3]=n|a<<8|r<<16|t[g+3]&4278190080}function Ko(t,A,e,s,i,n){const a=ze(new Q.Quaternion(e,s,i,n)),r=a&255,g=a>>>8&255,I=a>>>16&255,B=A*4;t[B+2]=t[B+2]&65535|r<<16|g<<24,t[B+3]=t[B+3]&16777215|I<<24}function qo(t,A,e,s,i,n){const a=NA(e),r=NA(s),g=NA(i),I=NA(n),B=A*4;t[B]=a|r<<8|g<<16|I<<24}function zo(t,A,e,s,i){const n=NA(e),a=NA(s),r=NA(i),g=A*4;t[g]=n|a<<8|r<<16|t[g]&4278190080}function _o(t,A,e){const s=NA(e),i=A*4;t[i]=t[i]&16777215|s<<24}const Vo=new Q.Vector3,Zo=new Q.Vector3,Oo=new Q.Quaternion,Wo=new Q.Color,Po={center:Vo,scales:Zo,quaternion:Oo,color:Wo,opacity:0};function Qe(t,A){const e=Po,s=A*4,i=t[s],n=t[s+1],a=t[s+2],r=t[s+3];e.color.set((i&255)/255,(i>>>8&255)/255,(i>>>16&255)/255),e.opacity=(i>>>24&255)/255,e.center.set(wA(n&65535),wA(n>>>16&65535),wA(a&65535));const g=r&255;e.scales.x=g===0?0:Math.exp(JA+(g-1)*OA);const I=r>>>8&255;e.scales.y=I===0?0:Math.exp(JA+(I-1)*OA);const B=r>>>16&255;e.scales.z=B===0?0:Math.exp(JA+(B-1)*OA);const o=a>>>16&65535|r>>>8&16711680;return Yi(o,e.quaternion),e}function mA(t){const A=j,e=Math.max(Qs,Math.min(et,Math.ceil(t/A))),s=Math.ceil(t/(A*e)),i=A*e*s;return{width:A,height:e,depth:s,maxSplats:i}}function jo(t){const A=j,e=Math.max(Qs,Math.min(et,Math.ceil(t/A))),s=Math.ceil(t/(A*e));return A*e*s}function xi(){return navigator.maxTouchPoints>0?!0:/Mobi|Android|iPhone|iPad|iPod|Opera Mini|IEMobile/.test(navigator.userAgent)}function Si(){return/Android/.test(navigator.userAgent)}function Ni(){return/Oculus/.test(navigator.userAgent)}function Fi(t,A,e){const s=new Uint8Array(A*4);for(let i=0;i<e/2;i++){const n=i*A*4,a=(e-1-i)*A*4;s.set(t.subarray(n,n+A*4)),t.set(t.subarray(a,a+A*4),n),t.set(s,a)}return t}function ki(t,A,e){const s=document.createElement("canvas");s.width=A,s.height=e;const i=s.getContext("2d");if(!i)throw new Error("Can't get 2d context");const n=i.createImageData(A,e);return n.data.set(t),i.putImageData(n,0,0),s.toDataURL("image/png")}function Ri(t){const A=new Q.Clock(t.autoStart);return A.startTime=t.startTime,A.oldTime=t.oldTime,A.elapsedTime=t.elapsedTime,A.running=t.running,A}function Xo(t){return Object.fromEntries(Object.entries(t).filter(([A,e])=>e!==void 0))}const Gi=EA(`
precision highp float;
in vec3 position;
void main() {
gl_Position = vec4(position.xy, 0.0, 1.0);
}
`);function Ui(t){const A=new Q.Vector3;for(const e of t)A.add(e);return A.divideScalar(t.length)}function bi(t){if(t.length===0)return new Q.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 vi(t,A){const e=new Q.Vector3(0,0,0).applyMatrix4(t),s=new Q.Vector3(0,0,0).applyMatrix4(A),i=new Q.Vector3(0,0,-1).applyMatrix4(t).sub(e).normalize(),n=new Q.Vector3(0,0,-1).applyMatrix4(A).sub(s).normalize(),a=e.distanceTo(s),r=i.dot(n);return{distance:a,coincidence:r}}function $o({matrix1:t,matrix2:A,maxDistance:e}){const s=new Q.Vector3(0,0,0).applyMatrix4(t),i=new Q.Vector3(0,0,0).applyMatrix4(A);return s.distanceTo(i)<=e}function AI({matrix1:t,matrix2:A,maxDistance:e,minCoincidence:s}){const{distance:i,coincidence:n}=vi(t,A);return i<=e&&(s==null||n>=s)}function Li(t,A){const[e,s]=[new Q.Vector3,new Q.Quaternion],[i,n]=[new Q.Vector3,new Q.Quaternion];t.decompose(e,s,new Q.Vector3),A.decompose(i,n,new Q.Vector3);const a=e.distanceTo(i),r=Math.abs(s.dot(n));return{distance:a,coorient:r}}function Ce({matrix1:t,matrix2:A,maxDistance:e,minCoorient:s}){const{distance:i,coorient:n}=Li(t,A);return i<=e&&(s==null||n>=s)}function tI(t,A=.001){return Math.abs(t)<A?0:Math.sign(t)}function eI(t){const A=t.w<0,e=Lt(A?-t.x:t.x),s=Lt(A?-t.y:t.y),i=Lt(A?-t.z:t.z),n=e&255,a=s&255,r=i&255;return n|a<<8|r<<16}function sI(t,A){const e=t<<24>>24,s=t<<16>>24,i=t<<8>>24;A.set(e/127,s/127,i/127,0);const n=A.x*A.x+A.y*A.y+A.z*A.z;return A.w=Math.sqrt(Math.max(0,1-n)),A}function ze(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),s=Math.sqrt(A.x*A.x+A.y*A.y+A.z*A.z),i=s<1e-6?new Q.Vector3(1,0,0):new Q.Vector3(A.x,A.y,A.z).divideScalar(s),n=Math.abs(i.x)+Math.abs(i.y)+Math.abs(i.z);let a=i.x/n,r=i.y/n;if(i.z<0){const E=a;a=(1-Math.abs(r))*(a>=0?1:-1),r=(1-Math.abs(E))*(r>=0?1:-1)}const g=a*.5+.5,I=r*.5+.5,B=Math.round(g*255),o=Math.round(I*255);return Math.round(e*(255/Math.PI))<<16|o<<8|B}function Yi(t,A){const e=t&255,s=t>>>8&255,i=t>>>16&255,n=e/255,a=s/255;let r=(n-.5)*2,g=(a-.5)*2;const I=1-(Math.abs(r)+Math.abs(g)),B=Math.max(-I,0);r+=r>=0?-B:B,g+=g>=0?-B:B;const o=new Q.Vector3(r,g,I).normalize(),E=i/255*Math.PI*.5,h=Math.sin(E),c=Math.cos(E);return A.set(o.x*h,o.y*h,o.z*h,c),A}function iI(t){const A=t.clone().normalize(),e=2*(A.w*A.x+A.y*A.z),s=1-2*(A.x*A.x+A.y*A.y),i=Math.atan2(e,s),n=2*(A.w*A.y-A.z*A.x),a=Math.abs(n)>=1?Math.sign(n)*(Math.PI/2):Math.asin(n),r=2*(A.w*A.z+A.x*A.y),g=1-2*(A.y*A.y+A.z*A.z),I=Math.atan2(r,g),B=(i+Math.PI)/(2*Math.PI),o=(a+Math.PI)/(2*Math.PI),C=(I+Math.PI)/(2*Math.PI),E=Math.round(B*255),h=Math.round(o*255);return Math.round(C*255)<<16|h<<8|E}function nI(t,A){const e=t&255,s=t>>>8&255,i=t>>>16&255,n=e/255,a=s/255,r=i/255,g=n*(2*Math.PI)-Math.PI,I=a*(2*Math.PI)-Math.PI,B=r*(2*Math.PI)-Math.PI,o=Math.cos(g*.5),C=Math.sin(g*.5),E=Math.cos(I*.5),h=Math.sin(I*.5),c=Math.cos(B*.5),l=Math.sin(B*.5);return A.w=o*E*c+C*h*l,A.x=C*E*c-o*h*l,A.y=o*h*c+C*E*l,A.z=o*E*l-C*h*c,A.normalize(),A}function te(t,A,e,s){const i=Math.max(-127,Math.min(127,t*127)),n=Math.max(-127,Math.min(127,A*127)),a=Math.max(-127,Math.min(127,e*127)),r=Math.max(-127,Math.min(127,s*127));return i&255|(n&255)<<8|(a&255)<<16|(r&255)<<24}function aI(t,A,e){const s=A*2;for(let i=0;i<9;++i){const n=Math.max(-63,Math.min(63,e[i]*63))&127,a=i*7,r=a+7,g=Math.floor(a/32),I=a-g*32,B=n<<I&4294967295;if(t[s+g]|=B,r>g*32+32){const o=n>>>32-I&4294967295;t[s+g+1]|=o}}}function rI(t,A,e){t[A*4+0]=te(e[0],e[1],e[2],e[3]),t[A*4+1]=te(e[4],e[5],e[6],e[7]),t[A*4+2]=te(e[8],e[9],e[10],e[11]),t[A*4+3]=te(e[12],e[13],e[14],0)}function gI(t,A,e){const s=A*4;for(let i=0;i<21;++i){const n=Math.max(-31,Math.min(31,e[i]*31))&63,a=i*6,r=a+6,g=Math.floor(a/32),I=a-g*32,B=n<<I&4294967295;if(t[s+g]|=B,r>g*32+32){const o=n>>>32-I&4294967295;t[s+g+1]|=o}}}function Ti(t,A){const e=[];let s=0,i=null;const n=new yi((g,I)=>{if(e.push(g),s+=g.length,I||s>=A){const B=new Uint8Array(s);let o=0;for(const C of e)B.set(C,o),o+=C.length;i=B.slice(0,A)}}),a=1024;let r=0;for(;i==null&&r<t.length;){const g=t.slice(r,r+a);n.push(g,!1),r+=a}if(i==null&&(n.push(new Uint8Array,!0),i==null))throw new Error("Failed to decompress partial gzip");return i}class Ji{constructor({fileBytes:A,chunkBytes:e=64*1024}){this.fileBytes=A,this.chunkBytes=e,this.offset=0,this.chunks=[],this.totalBytes=0,this.gunzip=new yi((s,i)=>{this.chunks.push(s),this.totalBytes+=s.length})}read(A){for(;this.totalBytes<A&&this.offset<this.fileBytes.length;){const n=Math.min(this.offset+this.chunkBytes,this.fileBytes.length);this.gunzip.push(this.fileBytes.subarray(this.offset,n),!1),this.offset=n}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 s=0;for(const n of this.chunks)e.set(n,s),s+=n.length;const i=e.subarray(0,A);return this.chunks=[e.subarray(A)],this.totalBytes-=A,i}}const oI=Object.freeze(Object.defineProperty({__proto__:null,DataCache:vo,FreeList:Mi,GunzipReader:Ji,IDENT_VERTEX_SHADER:Gi,Sint8ToFloat:fi,Uint8ToFloat:Di,averagePositions:Ui,averageQuaternions:bi,cloneClock:Ri,coinciDist:vi,computeMaxSplats:jo,coorientDist:Li,decodeQuatEulerXyz888:nI,decodeQuatOctXy88R8:Yi,decodeQuatXyz888:sI,decompressPartialGzip:Ti,encodeQuatEulerXyz888:iI,encodeQuatOctXy88R8:ze,encodeQuatXyz888:eI,encodeSh1Rgb:aI,encodeSh2Rgb:rI,encodeSh3Rgb:gI,epsilonSign:tI,flipPixels:Fi,floatBitsToUint:Uo,floatToSint8:Lt,floatToUint8:NA,fromHalf:wA,getArrayBuffers:mi,getTextureSize:mA,isAndroid:Si,isMobile:xi,isOculus:Ni,mapFilterObject:Yo,mapObject:Lo,newArray:To,omitUndefined:Xo,pixelsToPngUrl:ki,setPackedSplat:Be,setPackedSplatCenter:Jo,setPackedSplatOpacity:_o,setPackedSplatQuat:Ko,setPackedSplatRgb:zo,setPackedSplatRgba:qo,setPackedSplatScales:Ho,toHalf:nt,uintBitsToFloat:bo,unpackSplat:Qe,withinCoinciDist:AI,withinCoorientDist:Ce,withinDist:$o},Symbol.toStringTag,{value:"Module"}));class _e{constructor({graph:A,inputs:e,outputs:s,template:i}){this.graph=A,this.template=i,this.inputs=e??{},this.outputs=s??{};const n=new ds({indent:this.template.indent});for(const r in this.outputs)this.outputs[r]&&n.declares.add(this.outputs[r]);const a=A.compile({inputs:this.inputs,outputs:this.outputs,compile:n});this.shader=i.generate({globals:n.globals,statements:a}),this.uniforms=n.uniforms,this.updaters=n.updaters}prepareMaterial(){return II(this)}update(){for(const A of this.updaters)A()}}class Ve{constructor(A){const e=A.match(/^([ \t]*)\{\{\s*GLOBALS\s*\}\}/m),s=A.match(/^([ \t]*)\{\{\s*STATEMENTS\s*\}\}/m);if(!e||!s)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,s.index),this.after=A.substring(s.index+s[0].length),this.indent=s[1]}generate({globals:A,statements:e}){return this.before+Array.from(A).join(`
`)+this.between+e.map(s=>this.indent+s).join(`
`)+this.after}}const es=new Map;function II(t){let A=es.get(t);return A||(A=new Q.RawShaderMaterial({glslVersion:Q.GLSL3,vertexShader:Gi,fragmentShader:t.shader,uniforms:t.uniforms}),es.set(t,A),A)}function Ze(t,A,e="add"){const s=()=>{throw new Error(`Invalid ${e} types: ${t}, ${A}`)};if(t===A)return t;if(t==="int"){if(lA(A))return A;s()}if(A==="int"){if(lA(t))return t;s()}if(t==="uint"){if(uA(A))return A;s()}if(A==="uint"){if(uA(t))return t;s()}if(t==="float"){if(at(A))return A;s()}if(A==="float"){if(at(t))return t;s()}throw new Error(`Invalid ${e} types: ${t}, ${A}`)}function BI(t,A){return Ze(t,A,"sub")}function QI(t,A){const e=()=>{throw new Error(`Invalid mul types: ${t}, ${A}`)},s=i=>i;if(t==="int"){if(lA(A))return s(A);e()}if(A==="int"){if(lA(t))return s(t);e()}if(t==="uint"){if(uA(A))return s(A);e()}if(A==="uint"){if(uA(t))return s(t);e()}if(t==="float"){if(at(A))return s(A);e()}if(A==="float"){if(at(t))return s(t);e()}if(lA(t)||uA(t)||lA(A)||uA(A)){if(t===A)return s(t);e()}if(t==="vec2"){if(A==="vec2"||rt(A))return s("vec2");if(A==="mat3x2")return s("vec3");if(A==="mat4x2")return s("vec4");e()}if(t==="vec3"){if(A==="mat2x3")return s("vec2");if(A==="vec3"||gt(A))return s("vec3");if(A==="mat4x3")return s("vec4");e()}if(t==="vec4"){if(A==="mat2x4")return s("vec2");if(A==="mat3x4")return s("vec3");if(A==="vec4"||ot(A))return s("vec4");e()}if(A==="vec2"){if(rt(t))return s("vec2");if(t==="mat2x3")return s("vec3");if(t==="mat2x4")return s("vec4");e()}if(A==="vec3"){if(t==="mat3x2")return s("vec2");if(gt(t))return s("vec3");if(t==="mat3x4")return s("vec4");e()}if(A==="vec4"){if(t==="mat4x2")return s("vec2");if(t==="mat4x3")return s("vec3");if(ot(t))return s("vec4");e()}if(rt(t)){if(rt(A))return s("mat2");if(A==="mat3x2")return s("mat3x2");if(A==="mat4x2")return s("mat4x2");e()}if(t==="mat2x3"){if(rt(A))return s("mat2x3");if(A==="mat3x2")return s("mat3");if(A==="mat4x2")return s("mat4x3");e()}if(t==="mat2x4"){if(rt(A))return s("mat2x4");if(A==="mat3x2")return s("mat3x4");if(A==="mat4x2")return s("mat4");e()}if(t==="mat3x2"){if(A==="mat2x3")return s("mat2");if(gt(A))return s("mat3x2");if(A==="mat4x3")return s("mat4x2");e()}if(gt(t)){if(A==="mat2x3")return s("mat2x3");if(gt(A))return s("mat3");if(A==="mat4x3")return s("mat4x3");e()}if(t==="mat3x4"){if(A==="mat2x3")return s("mat2x4");if(gt(A))return s("mat3x4");if(A==="mat4x3")return s("mat4");e()}if(t==="mat4x2"){if(A==="mat2x4")return s("mat2");if(A==="mat3x4")return s("mat3x2");if(ot(A))return s("mat4x2");e()}if(t==="mat4x3"){if(A==="mat2x4")return s("mat2x3");if(A==="mat3x4")return s("mat3");if(ot(A))return s("mat4x3");e()}if(ot(t)){if(A==="mat2x4")return s("mat2x4");if(A==="mat3x4")return s("mat3x4");if(ot(A))return s("mat4");e()}throw new Error(`Invalid mul types: ${t}, ${A}`)}function CI(t,A){return Ze(t,A,"div")}function EI(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 cI(t,A){if(t===A||A==="float")return t;throw new Error(`Invalid mod types: ${t}, ${A}`)}function hI(t){return t}function lI(t){return t}function uI(t){return t}function dI(t){return t}function wI(t){return t}function pI(t){return t}function yI(t){return t}function DI(t){return t}function fI(t){return t}function mI(t){return t}function MI(t){return t}function xI(t){return t}function SI(t){return t}function NI(t){return t}function FI(t){return t}function kI(t){return t}function Hi(t,A,e="min"){if(t===A)return t;if(A==="float"){if(Vt(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 RI(t,A){return Hi(t,A,"max")}function GI(t,A,e){if(A==="float"){if(Vt(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 UI(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 bI(t,A){if(t===A||A==="float")return A;throw new Error(`Invalid step types: ${t}, ${A}`)}function vI(t,A,e){if(t===A&&(t===e||t==="float"))return e;throw new Error(`Invalid smoothstep types: ${t}, ${A}, ${e}`)}function Ki(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 LI(t){return Ki(t,"isInf")}const fA=(t,A)=>new Vi({a:t,b:A}),Mt=(t,A)=>new Zi({a:t,b:A}),CA=(t,A)=>new Oi({a:t,b:A}),ae=(t,A)=>new Wi({a:t,b:A}),Ue=(t,A)=>new Pi({a:t,b:A}),qi=(t,A)=>new ji({a:t,b:A}),YI=t=>new Xi({a:t}).outputs,Oe=t=>new $i({a:t}),TI=t=>new An({a:t}),JI=t=>new tn({a:t}),HI=t=>new en({a:t}),KI=t=>new sn({a:t}),qI=t=>new nn({a:t}),zI=t=>new an({a:t}),re=t=>new rn({a:t}),_I=(t,A)=>new gn({a:t,b:A}),VI=t=>new on({a:t}),ZI=t=>new In({a:t}),OI=t=>new Bn({a:t}),WI=t=>new Qn({a:t}),PI=t=>new Cn({a:t}),jI=t=>new En({a:t}),XI=t=>new cn({a:t}),$I=(t,A)=>new hn({a:t,b:A}),zi=(t,A)=>new ln({a:t,b:A}),AB=(t,A,e)=>new un({a:t,min:A,max:e}),_i=(t,A,e)=>new dn({a:t,b:A,t:e}),tB=(t,A)=>new wn({edge:t,x:A}),eB=(t,A,e)=>new pn({edge0:t,edge1:A,x:e}),sB=t=>new yn({a:t}),iB=t=>new Dn({a:t});class Vi extends ${constructor({a:A,b:e}){super({a:A,b:e,outKey:"sum",outTypeFunc:Ze}),this.statements=({inputs:s,outputs:i})=>[`${i.sum} = ${s.a} + ${s.b};`]}}class Zi extends ${constructor({a:A,b:e}){super({a:A,b:e,outKey:"difference",outTypeFunc:BI}),this.statements=({inputs:s,outputs:i})=>[`${i.difference} = ${s.a} - ${s.b};`]}}class Oi extends ${constructor({a:A,b:e}){super({a:A,b:e,outKey:"product",outTypeFunc:QI}),this.statements=({inputs:s,outputs:i})=>[`${i.product} = ${s.a} * ${s.b};`]}}class Wi extends ${constructor({a:A,b:e}){super({a:A,b:e,outKey:"quotient",outTypeFunc:CI}),this.statements=({inputs:s,outputs:i})=>[`${i.quotient} = ${s.a} / ${s.b};`]}}class Pi extends ${constructor({a:A,b:e}){super({a:A,b:e,outKey:"remainder",outTypeFunc:EI}),this.statements=({inputs:s,outputs:i})=>[`${i.remainder} = ${s.a} % ${s.b};`]}}class ji extends ${constructor({a:A,b:e}){super({a:A,b:e,outKey:"remainder",outTypeFunc:cI}),this.statements=({inputs:s,outputs:i})=>[`${i.remainder} = mod(${s.a}, ${s.b});`]}}class Xi extends V{constructor({a:A}){const e={a:_(A)},s=e.a,i={fract:s,integer:s};super({inTypes:e,outTypes:i,inputs:{a:A}}),this.statements=({inputs:n,outputs:a})=>[`${a.fract} = modf(${n.a}, ${a.integer});`]}}class $i extends S{constructor({a:A}){super({a:A,outKey:"neg",outTypeFunc:hI}),this.statements=({inputs:e,outputs:s})=>[`${s.neg} = -${e.a};`]}}class An extends S{constructor({a:A}){super({a:A,outKey:"abs",outTypeFunc:lI}),this.statements=({inputs:e,outputs:s})=>[`${s.abs} = abs(${e.a});`]}}class tn extends S{constructor({a:A}){super({a:A,outKey:"sign",outTypeFunc:uI}),this.statements=({inputs:e,outputs:s})=>[`${s.sign} = sign(${e.a});`]}}class en extends S{constructor({a:A}){super({a:A,outKey:"floor",outTypeFunc:dI}),this.statements=({inputs:e,outputs:s})=>[`${s.floor} = floor(${e.a});`]}}class sn extends S{constructor({a:A}){super({a:A,outKey:"ceil",outTypeFunc:wI}),this.statements=({inputs:e,outputs:s})=>[`${s.ceil} = ceil(${e.a});`]}}class nn extends S{constructor({a:A}){super({a:A,outKey:"trunc",outTypeFunc:pI}),this.statements=({inputs:e,outputs:s})=>[`${s.trunc} = trunc(${e.a});`]}}class an extends S{constructor({a:A}){super({a:A,outKey:"round",outTypeFunc:yI}),this.statements=({inputs:e,outputs:s})=>[`${s.round} = round(${e.a});`]}}class rn extends S{constructor({a:A}){super({a:A,outKey:"fract",outTypeFunc:DI}),this.statements=({inputs:e,outputs:s})=>[`${s.fract} = fract(${e.a});`]}}class gn extends ${constructor({a:A,b:e}){super({a:A,b:e,outKey:"power",outTypeFunc:fI}),this.statements=({inputs:s,outputs:i})=>[`${i.power} = pow(${s.a}, ${s.b});`]}}class on extends S{constructor({a:A}){super({a:A,outKey:"exp",outTypeFunc:mI}),this.statements=({inputs:e,outputs:s})=>[`${s.exp} = exp(${e.a});`]}}class In extends S{constructor({a:A}){super({a:A,outKey:"exp2",outTypeFunc:MI}),this.statements=({inputs:e,outputs:s})=>[`${s.exp2} = exp2(${e.a});`]}}class Bn extends S{constructor({a:A}){super({a:A,outKey:"log",outTypeFunc:xI}),this.statements=({inputs:e,outputs:s})=>[`${s.log} = log(${e.a});`]}}class Qn extends S{constructor({a:A}){super({a:A,outKey:"log2",outTypeFunc:SI}),this.statements=({inputs:e,outputs:s})=>[`${s.log2} = log2(${e.a});`]}}class Cn extends S{constructor({a:A}){super({a:A,outKey:"sqr",outTypeFunc:NI}),this.statements=({inputs:e,outputs:s})=>[`${s.sqr} = ${e.a} * ${e.a};`]}}class En extends S{constructor({a:A}){super({a:A,outKey:"sqrt",outTypeFunc:FI}),this.statements=({inputs:e,outputs:s})=>[`${s.sqrt} = sqrt(${e.a});`]}}class cn extends S{constructor({a:A}){super({a:A,outKey:"inversesqrt",outTypeFunc:kI}),this.statements=({inputs:e,outputs:s})=>[`${s.inversesqrt} = inversesqrt(${e.a});`]}}class hn extends ${constructor({a:A,b:e}){super({a:A,b:e,outKey:"min",outTypeFunc:Hi}),this.statements=({inputs:s,outputs:i})=>[`${i.min} = min(${s.a}, ${s.b});`]}}class ln extends ${constructor({a:A,b:e}){super({a:A,b:e,outKey:"max",outTypeFunc:RI}),this.statements=({inputs:s,outputs:i})=>[`${i.max} = max(${s.a}, ${s.b});`]}}class un extends ht{constructor({a:A,min:e,max:s}){super({a:A,b:e,c:s,outKey:"clamp",outTypeFunc:GI}),this.statements=({inputs:i,outputs:n})=>{const{a,b:r,c:g}=i;return[`${n.clamp} = clamp(${a}, ${r}, ${g});`]}}}class dn extends ht{constructor({a:A,b:e,t:s}){super({a:A,b:e,c:s,outKey:"mix",outTypeFunc:UI}),this.statements=({inputs:i,outputs:n})=>{const{a,b:r,c:g}=i;return[`${n.mix} = mix(${a}, ${r}, ${g});`]}}}class wn extends ${constructor({edge:A,x:e}){super({a:A,b:e,outKey:"step",outTypeFunc:bI}),this.statements=({inputs:s,outputs:i})=>{const{a:n,b:a}=s;return[`${i.step} = step(${n}, ${a});`]}}}class pn extends ht{constructor({edge0:A,edge1:e,x:s}){super({a:A,b:e,c:s,outKey:"smoothstep",outTypeFunc:vI}),this.statements=({inputs:i,outputs:n})=>{const{a,b:r,c:g}=i;return[`${n.smoothstep} = smoothstep(${a}, ${r}, ${g});`]}}}class yn extends S{constructor({a:A}){super({a:A,outKey:"isNan",outTypeFunc:Ki}),this.statements=({inputs:e,outputs:s})=>[`${s.isNan} = isNan(${e.a});`]}}class Dn extends S{constructor({a:A}){super({a:A,outKey:"isInf",outTypeFunc:LI}),this.statements=({inputs:e,outputs:s})=>[`${s.isInf} = isInf(${e.a});`]}}const nB=(t,A)=>new mn({a:t,b:A}),aB=(t,A)=>new Mn({a:t,b:A}),rB=(t,A)=>new xn({a:t,b:A}),gB=t=>new Sn({a:t}),oB=(t,A)=>new Nn({a:t,b:A}),IB=(t,A)=>new Fn({a:t,b:A}),BB=(t,A)=>new kn({a:t,b:A}),fn=(t,A)=>new Rn({a:t,b:A}),QB=(t,A)=>new Gn({a:t,b:A}),CB=(t,A)=>new Un({a:t,b:A}),EB=t=>new bn({a:t}),cB=t=>new vn({a:t}),We=(t,A,e)=>new Ln({cond:t,t:A,f:e}),hB=t=>new Tn({a:t});class mn extends ${constructor({a:A,b:e}){super({a:A,b:e,outTypeFunc:(s,i)=>s,outKey:"and"}),this.statements=({inputs:s,outputs:i})=>this.outTypes.and==="bool"?[`${i.and} = ${s.a} && ${s.b};`]:[`${i.and} = ${s.a} & ${s.b};`]}}class Mn extends ${constructor({a:A,b:e}){super({a:A,b:e,outTypeFunc:(s,i)=>s,outKey:"or"}),this.statements=({inputs:s,outputs:i})=>this.outTypes.or==="bool"?[`${i.or} = ${s.a} || ${s.b};`]:[`${i.or} = ${s.a} | ${s.b};`]}}class xn extends ${constructor({a:A,b:e}){super({a:A,b:e,outTypeFunc:(s,i)=>s,outKey:"xor"}),this.statements=({inputs:s,outputs:i})=>this.outTypes.xor==="bool"?[`${i.xor} = ${s.a} ^^ ${s.b};`]:[`${i.xor} = ${s.a} ^ ${s.b};`]}}class Sn extends S{constructor({a:A}){super({a:A,outTypeFunc:e=>e,outKey:"not"}),this.statements=({inputs:e,outputs:s})=>this.outTypes.not==="bool"?[`${s.not} = !${e.a};`]:[`${s.not} = not(${e.a});`]}}class Nn extends ${constructor({a:A,b:e}){super({a:A,b:e,outTypeFunc:(s,i)=>we(s,"lessThan"),outKey:"lessThan"}),this.statements=({inputs:s,outputs:i})=>this.outTypes.lessThan==="bool"?[`${i.lessThan} = ${s.a} < ${s.b};`]:[`${i.lessThan} = lessThan(${s.a}, ${s.b});`]}}class Fn extends ${constructor({a:A,b:e}){super({a:A,b:e,outTypeFunc:(s,i)=>we(s,"lessThanEqual"),outKey:"lessThanEqual"}),this.statements=({inputs:s,outputs:i})=>this.outTypes.lessThanEqual==="bool"?[`${i.lessThanEqual} = ${s.a} <= ${s.b};`]:[`${i.lessThanEqual} = lessThanEqual(${s.a}, ${s.b});`]}}class kn extends ${constructor({a:A,b:e}){super({a:A,b:e,outTypeFunc:(s,i)=>we(s,"greaterThan"),outKey:"greaterThan"}),this.statements=({inputs:s,outputs:i})=>this.outTypes.greaterThan==="bool"?[`${i.greaterThan} = ${s.a} > ${s.b};`]:[`${i.greaterThan} = greaterThan(${s.a}, ${s.b});`]}}class Rn extends ${constructor({a:A,b:e}){super({a:A,b:e,outTypeFunc:(s,i)=>we(s,"greaterThanEqual"),outKey:"greaterThanEqual"}),this.statements=({inputs:s,outputs:i})=>this.outTypes.greaterThanEqual==="bool"?[`${i.greaterThanEqual} = ${s.a} >= ${s.b};`]:[`${i.greaterThanEqual} = greaterThanEqual(${s.a}, ${s.b});`]}}class Gn extends ${constructor({a:A,b:e}){super({a:A,b:e,outTypeFunc:Yn,outKey:"equal"}),this.statements=({inputs:s,outputs:i})=>this.outTypes.equal==="bool"?[`${i.equal} = ${s.a} == ${s.b};`]:[`${i.equal} = equal(${s.a}, ${s.b});`]}}class Un extends ${constructor({a:A,b:e}){super({a:A,b:e,outTypeFunc:lB,outKey:"notEqual"}),this.statements=({inputs:s,outputs:i})=>this.outTypes.notEqual==="bool"?[`${i.notEqual} = ${s.a} != ${s.b};`]:[`${i.notEqual} = notEqual(${s.a}, ${s.b});`]}}class bn extends S{constructor({a:A}){super({a:A,outTypeFunc:e=>"bool",outKey:"any"}),this.statements=({inputs:e,outputs:s})=>[`${s.any} = any(${e.a});`]}}class vn extends S{constructor({a:A}){super({a:A,outTypeFunc:e=>"bool",outKey:"all"}),this.statements=({inputs:e,outputs:s})=>[`${s.all} = all(${e.a});`]}}class Ln extends ht{constructor({cond:A,t:e,f:s}){super({a:A,b:e,c:s,outKey:"select",outTypeFunc:(i,n,a)=>n}),this.statements=({inputs:i,outputs:n})=>{const{a,b:r,c:g}=i;return[`${n.select} = (${a}) ? (${r}) : (${g});`]}}}function we(t,A){if(ct(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 Yn(t,A="equal"){if(ct(t))return"bool";if(Et(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 lB(t){return Yn(t,"notEqual")}function uB(t){if(Et(t))return"bool";if(lA(t))return"int";if(uA(t))return"uint";throw new Error(`Invalid compXor type: ${t}`)}class Tn extends S{constructor({a:A}){const e=uB(_(A));super({a:A,outTypeFunc:s=>e,outKey:"compXor"}),this.statements=({inputs:s,outputs:i})=>{if(ct(this.outTypes.compXor))return[`${i.compXor} = ${s.a};`];const a=(xt(e)?["x","y"]:St(e)?["x","y","z"]:["x","y","z","w"]).map(g=>`${s.a}.${g}`),r=Et(e)?"^^":"^";return[`${i.compXor} = ${a.join(` ${r} `)};`]}}}const dB=t=>new Vn({value:t}),wB=t=>new Zn({value:t}),pB=t=>new On({value:t}),Jn=t=>new Wn({value:t}),yB=t=>new Pn({value:t}),DB=t=>new jn({value:t}),fB=t=>new Xn({value:t}),mB=t=>new $n({value:t}),MB=t=>new Aa({value:t}),xB=t=>new ta({value:t}),SB=t=>new ea({value:t}),NB=t=>new sa({value:t}),FB=t=>new ia({value:t}),Hn=t=>new na({value:t}),Ct=t=>new aa({value:t}),Kn=t=>new ra({value:t}),kB=t=>new ga({value:t}),RB=t=>new oa({value:t}),GB=t=>new Ia({value:t}),qn=t=>new Ba({value:t}),UB=t=>new Qa({value:t}),bB=t=>new Ca({value:t}),vB=t=>new Ea({value:t}),LB=t=>new ca({value:t}),YB=t=>new ha({value:t}),TB=t=>new la({value:t}),JB=t=>new ua({value:t}),zn=t=>new da({value:t}),HB=t=>new wa({value:t}),_n=t=>new pa({value:t});class oA extends S{constructor({value:A,outType:e,outKey:s}){super({a:A,outTypeFunc:()=>e,outKey:s}),this.statements=({inputs:i,outputs:n})=>[`${n[s]} = ${ls(e)}(${i.a});`]}}class Vn extends oA{constructor({value:A}){super({value:A,outType:"bool",outKey:"bool"})}}class Zn extends oA{constructor({value:A}){super({value:A,outType:"int",outKey:"int"})}}class On extends oA{constructor({value:A}){super({value:A,outType:"uint",outKey:"uint"})}}class Wn extends oA{constructor({value:A}){super({value:A,outType:"float",outKey:"float"})}}class Pn extends oA{constructor({value:A}){super({value:A,outType:"bvec2",outKey:"bvec2"})}}class jn extends oA{constructor({value:A}){super({value:A,outType:"bvec3",outKey:"bvec3"})}}class Xn extends oA{constructor({value:A}){super({value:A,outType:"bvec4",outKey:"bvec4"})}}class $n extends oA{constructor({value:A}){super({value:A,outType:"ivec2",outKey:"ivec2"})}}class Aa extends oA{constructor({value:A}){super({value:A,outType:"ivec3",outKey:"ivec3"})}}class ta extends oA{constructor({value:A}){super({value:A,outType:"ivec4",outKey:"ivec4"})}}class ea extends oA{constructor({value:A}){super({value:A,outType:"uvec2",outKey:"uvec2"})}}class sa extends oA{constructor({value:A}){super({value:A,outType:"uvec3",outKey:"uvec3"})}}class ia extends oA{constructor({value:A}){super({value:A,outType:"uvec4",outKey:"uvec4"})}}class na extends oA{constructor({value:A}){super({value:A,outType:"vec2",outKey:"vec2"})}}class aa extends oA{constructor({value:A}){super({value:A,outType:"vec3",outKey:"vec3"})}}class ra extends oA{constructor({value:A}){super({value:A,outType:"vec4",outKey:"vec4"})}}class ga extends oA{constructor({value:A}){super({value:A,outType:"mat2",outKey:"mat2"})}}class oa extends oA{constructor({value:A}){super({value:A,outType:"mat3",outKey:"mat3"})}}class Ia extends oA{constructor({value:A}){super({value:A,outType:"mat4",outKey:"mat4"})}}class Ba extends S{constructor({value:A}){super({a:A,outKey:"int",outTypeFunc:()=>"int"}),this.statements=({inputs:e,outputs:s})=>[`${s.int} = floatBitsToInt(${e.a});`]}}class Qa extends S{constructor({value:A}){super({a:A,outKey:"uint",outTypeFunc:()=>"uint"}),this.statements=({inputs:e,outputs:s})=>[`${s.uint} = floatBitsToUint(${e.a});`]}}class Ca extends S{constructor({value:A}){super({a:A,outKey:"float",outTypeFunc:()=>"float"}),this.statements=({inputs:e,outputs:s})=>[`${s.float} = intBitsToFloat(${e.a});`]}}class Ea extends S{constructor({value:A}){super({a:A,outKey:"float",outTypeFunc:()=>"float"}),this.statements=({inputs:e,outputs:s})=>[`${s.float} = uintBitsToFloat(${e.a});`]}}class ca extends S{constructor({value:A}){super({a:A,outKey:"uint",outTypeFunc:()=>"uint"}),this.statements=({inputs:e,outputs:s})=>[`${s.uint} = packSnorm2x16(${e.a});`]}}class ha extends S{constructor({value:A}){super({a:A,outKey:"vec2",outTypeFunc:()=>"vec2"}),this.statements=({inputs:e,outputs:s})=>[`${s.vec2} = unpackSnorm2x16(${e.a});`]}}class la extends S{constructor({value:A}){super({a:A,outKey:"uint",outTypeFunc:()=>"uint"}),this.statements=({inputs:e,outputs:s})=>[`${s.uint} = packUnorm2x16(${e.a});`]}}class ua extends S{constructor({value:A}){super({a:A,outKey:"vec2",outTypeFunc:()=>"vec2"}),this.statements=({inputs:e,outputs:s})=>[`${s.vec2} = unpackUnorm2x16(${e.a});`]}}class da extends S{constructor({value:A}){super({a:A,outKey:"uint",outTypeFunc:()=>"uint"}),this.statements=({inputs:e,outputs:s})=>[`${s.uint} = packHalf2x16(${e.a});`]}}class wa extends S{constructor({value:A}){super({a:A,outKey:"vec2",outTypeFunc:()=>"vec2"}),this.statements=({inputs:e,outputs:s})=>[`${s.vec2} = unpackHalf2x16(${e.a});`]}}class pa extends S{constructor({value:A}){super({a:A,outKey:"rgba8",outTypeFunc:()=>"vec4"}),this.statements=({inputs:e,outputs:s})=>[`uvec4 uRgba = uvec4(${e.a} & 0xffu, (${e.a} >> 8u) & 0xffu, (${e.a} >> 16u) & 0xffu, (${e.a} >> 24u) & 0xffu);`,`${s.rgba8} = vec4(uRgba) / 255.0;`]}}const KB=t=>new ma({a:t}),qB=(t,A)=>new Ma({a:t,b:A}),ya=(t,A)=>new xa({a:t,b:A}),zB=(t,A)=>new Sa({a:t,b:A}),Da=t=>new Na({a:t}),_B=(t,A,e)=>new Ra({a:t,b:A,c:e}),VB=(t,A)=>new Ga({incident:t,normal:A}),ZB=(t,A,e)=>new Ua({incident:t,normal:A,eta:e}),ft=t=>new Ja({vector:t}),HA=({vector:t,vectorType:A,x:e,y:s,z:i,w:n,r:a,g:r,b:g,a:I})=>new Ha({vector:t,vectorType:A,x:e,y:s,z:i,w:n,r:a,g:r,b:g,a:I}),OB=t=>new Fa({a:t}),fa=(t,A)=>new ka({a:t,b:A}),WB=(t,A)=>new Ka({vector:t,select:A}),PB=(t,A)=>new ba({a:t,b:A}),jB=(t,A)=>new va({a:t,b:A}),XB=t=>new La({a:t}),$B=t=>new Ya({a:t}),AQ=t=>new Ta({a:t});class ma extends S{constructor({a:A}){super({a:A,outTypeFunc:e=>"float",outKey:"length"}),this.statements=({inputs:e,outputs:s})=>[`${s.length} = length(${e.a});`]}}class Ma extends ${constructor({a:A,b:e}){super({a:A,b:e,outKey:"distance",outTypeFunc:(s,i)=>"float"}),this.statements=({inputs:s,outputs:i})=>[`${i.distance} = distance(${s.a}, ${s.b});`]}}class xa extends ${constructor({a:A,b:e}){super({a:A,b:e,outKey:"dot",outTypeFunc:(s,i)=>"float"}),this.statements=({inputs:s,outputs:i})=>[`${i.dot} = dot(${s.a}, ${s.b});`]}}class Sa extends ${constructor({a:A,b:e}){super({a:A,b:e,outKey:"cross",outTypeFunc:(s,i)=>"vec3"}),this.statements=({inputs:s,outputs:i})=>[`${i.cross} = cross(${s.a}, ${s.b});`]}}class Na extends S{constructor({a:A}){super({a:A,outTypeFunc:e=>e,outKey:"normalize"}),this.statements=({inputs:e,outputs:s})=>[`${s.normalize} = normalize(${e.a});`]}}function tQ(t){if(t==="vec3")return"vec2";if(t==="vec4")return"vec3";throw new Error("Invalid type")}class Fa extends S{constructor({a:A}){super({a:A,outTypeFunc:e=>tQ(e),outKey:"projected"}),this.statements=({inputs:e,outputs:s})=>{if(this.inTypes.a==="vec3")return[`${s.projected} = ${e.a}.xy / ${e.a}.z;`];if(this.inTypes.a==="vec4")return[`${s.projected} = ${e.a}.xyz / ${e.a}.w;`];throw new Error("Invalid type")}}}function eQ(t){if(t==="float")return"vec2";if(t==="vec2")return"vec3";if(t==="vec3")return"vec4";throw new Error("Invalid type")}class ka extends ${constructor({a:A,b:e}){const s=_(A),i=eQ(s);super({a:A,b:e,outKey:"extend",outTypeFunc:()=>i}),this.statements=({inputs:n,outputs:a})=>[`${a.extend} = ${i}(${n.a}, ${n.b});`]}}class Ra extends ht{constructor({a:A,b:e,c:s}){super({a:A,b:e,c:s,outKey:"forward",outTypeFunc:(i,n,a)=>i}),this.statements=({inputs:i,outputs:n})=>[`${n.forward} = faceforward(${i.a}, ${i.b}, ${i.c});`]}}class Ga extends ${constructor({incident:A,normal:e}){super({a:A,b:e,outKey:"reflection",outTypeFunc:(s,i)=>s}),this.statements=({inputs:s,outputs:i})=>[`${i.reflection} = reflect(${s.a}, ${s.b});`]}}class Ua extends ht{constructor({incident:A,normal:e,eta:s}){super({a:A,b:e,c:s,outKey:"refraction",outTypeFunc:(i,n,a)=>i}),this.statements=({inputs:i,outputs:n})=>[`${n.refraction} = refract(${i.a}, ${i.b}, ${i.c});`]}}class ba extends ${constructor({a:A,b:e}){super({a:A,b:e,outKey:"product",outTypeFunc:(s,i)=>s}),this.statements=({inputs:s,outputs:i})=>[`${i.product} = matrixCompMult(${A}, ${e});`]}}function sQ(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 va extends ${constructor({a:A,b:e}){super({a:A,b:e,outKey:"outer",outTypeFunc:sQ}),this.statements=({inputs:s,outputs:i})=>[`${i.outer} = outerProduct(${s.a}, ${s.b});`]}}function iQ(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 La extends S{constructor({a:A}){super({a:A,outKey:"transpose",outTypeFunc:iQ}),this.statements=({inputs:e,outputs:s})=>[`${s.transpose} = transpose(${e.a});`]}}class Ya extends S{constructor({a:A}){super({a:A,outKey:"det",outTypeFunc:e=>"float"}),this.statements=({inputs:e,outputs:s})=>[`${s.det} = determinant(${e.a});`]}}class Ta extends S{constructor({a:A}){super({a:A,outKey:"inverse",outTypeFunc:e=>e}),this.statements=({inputs:e,outputs:s})=>[`${s.inverse} = inverse(${A});`]}}function nQ(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 Ja extends V{constructor({vector:A}){const s={vector:_(A)},i=nQ(s.vector);super({inTypes:s,outTypes:i,inputs:{vector:A}}),this.statements=({inputs:n,outputs:a})=>{const{x:r,y:g,z:I,w:B,r:o,g:C,b:E,a:h}=a,{vector:c}=n;return[r?`${r} = ${c}.x;`:null,g?`${g} = ${c}.y;`:null,I?`${I} = ${c}.z;`:null,B?`${B} = ${c}.w;`:null,o?`${o} = ${c}.r;`:null,C?`${C} = ${c}.g;`:null,E?`${E} = ${c}.b;`:null,h?`${h} = ${c}.a;`:null].filter(Boolean)}}}class Ha extends V{constructor({vector:A,vectorType:e,x:s,y:i,z:n,w:a,r,g,b:I,a:B}){if(!A&&!e)throw new Error("Either vector or vectorType must be provided");const o=e??_(A),C=Es(o),E=cs(o),h={vector:o,x:C,y:C,r:C,g:C},c={vector:A,x:s,y:i,r,g};E>=3&&(Object.assign(h,{z:C,b:C}),Object.assign(c,{z:n,b:I})),E>=4&&(Object.assign(h,{w:C,a:C}),Object.assign(c,{w:a,a:B})),super({inTypes:h,outTypes:{vector:o},inputs:c}),this.statements=({inputs:l,outputs:u})=>{const{vector:d}=u,{vector:w,x:y,y:p,z:m,w:N,r:f,g:D,b:G,a:x}=l,M=[`${d}.x = ${y??f??(w?`${w}.x`:Gt(C))};`,`${d}.y = ${p??D??(w?`${w}.y`:Gt(C))};`];return E>=3&&M.push(`${d}.z = ${m??G??(w?`${w}.z`:Gt(C))};`),E>=4&&M.push(`${d}.w = ${N??x??(w?`${w}.w`:Gt(C))};`),M}}dynoOut(){return new q(this,"vector")}}function aQ(t,A){let e=null;if(Vt(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 Ka extends S{constructor({vector:A,select:e}){super({a:A,outKey:"swizzle",outTypeFunc:s=>aQ(s,e)}),this.statements=({inputs:s,outputs:i})=>[`${i.swizzle} = ${s.a}.${e};`]}}const rQ=(t,A,e)=>new Wa({index:t,from:A,to:e}),gQ=t=>new Nt({value:t}),oQ=t=>new GA({state:t}),IQ=t=>new UA({state:t}),qa=t=>new Pa({value:t}),za=t=>new ja({value:t}),_a=t=>new Xa({value:t}),Va=t=>new $a({value:t}),BQ=t=>new Ar({value:t}),QQ=t=>new tr({value:t}),Za=t=>new er({value:t}),be=t=>new sr({value:t}),Oa=(t,A,e)=>new ir({z:t,zNear:A,zFar:e}).outputs.depth;class Wa extends V{constructor({from:A,to:e,index:s}){super({inTypes:{from:"int",to:"int",index:"int"},outTypes:{index:"int"},inputs:{from:A,to:e,index:s},statements:({inputs:i,outputs:n})=>[`${n.index} = ${i.index} - ${i.from} + ${i.to};`]})}dynoOut(){return new q(this,"index")}}class GA extends V{constructor({state:A}){const e=_(A);super({inTypes:{state:e},outTypes:{state:"uint"},inputs:{state:A},globals:()=>[EA(`
uint pcg_next(uint state) {
return state * 747796405u + 2891336453u;
}
`)],statements:({inputs:s,outputs:i})=>{const n=e==="uint"?`${s.state}`:e==="int"?`uint(${s.state})`:`floatBitsToUint(${s.state})`;return[`${i.state} = pcg_next(${n});`]}})}dynoOut(){return new q(this,"state")}}class UA extends V{constructor({state:A}){super({inTypes:{state:"uint"},outTypes:{hash:"uint"},inputs:{state:A},globals:()=>[EA(`
uint pcg_hash(uint state) {
uint hash = ((state >> ((state >> 28u) + 4u)) ^ state) * 277803737u;
return (hash >> 22u) ^ hash;
}
`)],statements:({inputs:e,outputs:s})=>[`${s.hash} = pcg_hash(${e.state});`]})}dynoOut(){return new q(this,"hash")}}class Nt extends V{constructor({value:A}){const e=_(A),s=hs(e);super({inTypes:{value:e},outTypes:{state:"uint"},inputs:{value:A},globals:()=>[EA(`
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:n})=>{const a=uA(e)?`${i.value}`:lA(e)?`${s}(${i.value})`:`floatBitsToUint(${i.value})`;return[`${s} bits = ${a};`,`${n.state} = pcg_mix(bits);`]}})}dynoOut(){return new q(this,"state")}}class Pa extends qA{constructor({value:A}){super({inTypes:{value:_(A)},outTypes:{hash:"uint"},inputs:{value:A},construct:({value:e})=>{if(!e)throw new Error("value is required");let s=new Nt({value:e}).outputs.state;return s=new GA({state:s}).outputs.state,new UA({state:s}).outputs}})}dynoOut(){return new q(this,"hash")}}class ja extends qA{constructor({value:A}){super({inTypes:{value:_(A)},outTypes:{hash:"uvec2"},inputs:{value:A},construct:({value:e})=>{if(!e)throw new Error("value is required");let s=new Nt({value:e}).outputs.state;s=new GA({state:s}).outputs.state;const i=new UA({state:s}).outputs.hash;s=new GA({state:s}).outputs.state;const n=new UA({state:s}).outputs.hash;return{hash:HA({vectorType:"uvec2",x:i,y:n})}}})}dynoOut(){return new q(this,"hash")}}class Xa extends qA{constructor({value:A}){super({inTypes:{value:_(A)},outTypes:{hash:"uvec3"},inputs:{value:A},construct:({value:e})=>{if(!e)throw new Error("value is required");let s=new Nt({value:e}).outputs.state;s=new GA({state:s}).outputs.state;const i=new UA({state:s}).outputs.hash;s=new GA({state:s}).outputs.state;const n=new UA({state:s}).outputs.hash;s=new GA({state:s}).outputs.state;const a=new UA({state:s}).outputs.hash;return{hash:HA({vectorType:"uvec3",x:i,y:n,z:a})}}})}dynoOut(){return new q(this,"hash")}}class $a extends qA{constructor({value:A}){super({inTypes:{value:_(A)},outTypes:{hash:"uvec4"},inputs:{value:A},construct:({value:e})=>{if(!e)throw new Error("value is required");let s=new Nt({value:e}).outputs.state;s=new GA({state:s}).outputs.state;const i=new UA({state:s}).outputs.hash;s=new GA({state:s}).outputs.state;const n=new UA({state:s}).outputs.hash;s=new GA({state:s}).outputs.state;const a=new UA({state:s}).outputs.hash;s=new GA({state:s}).outputs.state;const r=new UA({state:s}).outputs.hash;return{hash:HA({vectorType:"uvec4",x:i,y:n,z:a,w:r})}}})}dynoOut(){return new q(this,"hash")}}class Ar extends qA{constructor({value:A}){super({inTypes:{value:_(A)},outTypes:{hash:"float"},inputs:{value:A},construct:({value:e})=>{if(!e)throw new Error("value is required");const s=qa(e);return{hash:CA(Jn(s),K("float",1/2**32))}}})}dynoOut(){return new q(this,"hash")}}class tr extends qA{constructor({value:A}){super({inTypes:{value:_(A)},outTypes:{hash:"vec2"},inputs:{value:A},construct:({value:e})=>{if(!e)throw new Error("value is required");const s=za(e);return{hash:CA(Hn(s),K("float",1/2**32))}}})}dynoOut(){return new q(this,"hash")}}class er extends qA{constructor({value:A}){super({inTypes:{value:_(A)},outTypes:{hash:"vec3"},inputs:{value:A},construct:({value:e})=>{if(!e)throw new Error("value is required");const s=_a(e);return{hash:CA(Ct(s),K("float",1/2**32))}}})}dynoOut(){return new q(this,"hash")}}class sr extends qA{constructor({value:A}){super({inTypes:{value:_(A)},outTypes:{hash:"vec4"},inputs:{value:A},construct:({value:e})=>{if(!e)throw new Error("value is required");const s=Va(e);return{hash:CA(Kn(s),K("float",1/2**32))}}})}dynoOut(){return new q(this,"hash")}}class ir extends V{constructor({z:A,zNear:e,zFar:s}){super({inTypes:{z:"float",zNear:"float",zFar:"float"},outTypes:{depth:"float"},inputs:{z:A,zNear:e,zFar:s},statements:({inputs:i,outputs:n})=>[`float clamped = clamp(${i.z}, ${i.zNear}, ${i.zFar});`,`${n.depth} = (log2(clamped + 1.0) - log2(${i.zNear} + 1.0)) / (log2(${i.zFar} + 1.0) - log2(${i.zNear} + 1.0));`]})}dynoOut(){return new q(this,"depth")}}const nr=(t,{scale:A,scales:e,rotate:s,translate:i})=>new rr({position:t,scale:A,scales:e,rotate:s,translate:i}).outputs.position,ar=(t,{scale:A,scales:e,rotate:s})=>new gr({dir:t,scale:A,scales:e,rotate:s}).outputs.dir,CQ=(t,{rotate:A})=>new or({quaternion:t,rotate:A}).outputs.quaternion;class rr extends V{constructor({position:A,scale:e,scales:s,rotate:i,translate:n}){super({inTypes:{position:"vec3",scale:"float",scales:"vec3",rotate:"vec4",translate:"vec3"},outTypes:{position:"vec3"},inputs:{position:A,scale:e,scales:s,rotate:i,translate:n},statements:({inputs:a,outputs:r})=>{const{position:g}=r;if(!g)return[];const{scale:I,scales:B,rotate:o,translate:C}=a;return[`${g} = ${a.position??"vec3(0.0, 0.0, 0.0)"};`,I?`${g} *= ${I};`:null,B?`${g} *= ${B};`:null,o?`${g} = quatVec(${o}, ${g});`:null,C?`${g} += ${C};`:null].filter(Boolean)}})}}class gr extends V{constructor({dir:A,scale:e,scales:s,rotate:i}){super({inTypes:{dir:"vec3",scale:"float",scales:"vec3",rotate:"vec4"},outTypes:{dir:"vec3"},inputs:{dir:A,scale:e,scales:s,rotate:i},statements:({inputs:n,outputs:a})=>{const{dir:r}=a;if(!r)return[];const{scale:g,scales:I,rotate:B}=n;return[`${r} = ${n.dir??"vec3(0.0, 0.0, 0.0)"};`,g?`${r} *= ${g};`:null,I?`${r} *= ${I};`:null,B?`${r} = quatVec(${B}, ${r});`:null].filter(Boolean)}})}}class or extends V{constructor({quaternion:A,rotate:e}){super({inTypes:{quaternion:"vec4",rotate:"vec4"},outTypes:{quaternion:"vec4"},inputs:{quaternion:A,rotate:e},statements:({inputs:s,outputs:i})=>{const{quaternion:n}=i;return n?[`${n} = ${s.quaternion??"vec4(0.0, 0.0, 0.0, 1.0)"};`,e?`${n} = quatQuat(${s.rotate}, ${n});`:null].filter(Boolean):[]}})}}const EQ=()=>{throw new Error("Not implemented")},cQ=()=>{throw new Error("Not implemented")},hQ=()=>{throw new Error("Not implemented")},lQ=()=>{throw new Error("Not implemented")},uQ=()=>{throw new Error("Not implemented")},dQ=()=>{throw new Error("Not implemented")},wQ=(t,A)=>new Ir({texture:t,lod:A}),pQ=(t,A,e)=>new Br({texture:t,coord:A,bias:e}),yQ=(t,A,e)=>new Qr({texture:t,coord:A,lod:e});class Ir extends V{constructor({texture:A,lod:e}){const s=_(A);super({inTypes:{texture:s,lod:"int"},outTypes:{size:Cr(s)},inputs:{texture:A,lod:e},statements:({inputs:i,outputs:n})=>[`${n.size} = textureSize(${i.texture}, ${i.lod??"0"});`]})}dynoOut(){return new q(this,"size")}}class Br extends V{constructor({texture:A,coord:e,bias:s}){const i=_(A);super({inTypes:{texture:i,coord:DQ(i),bias:"float"},outTypes:{sample:Er(i)},inputs:{texture:A,coord:e,bias:s},statements:({inputs:n,outputs:a})=>[`${a.sample} = texture(${n.texture}, ${n.coord}${n.bias?`, ${n.bias}`:""});`]})}dynoOut(){return new q(this,"sample")}}class Qr extends V{constructor({texture:A,coord:e,lod:s}){const i=_(A);super({inTypes:{texture:i,coord:Cr(i),lod:"int"},outTypes:{texel:Er(i)},inputs:{texture:A,coord:e,lod:s},statements:({inputs:n,outputs:a})=>[`${a.texel} = texelFetch(${n.texture}, ${n.coord}, ${n.lod??"0"});`]})}dynoOut(){return new q(this,"texel")}}function Cr(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 DQ(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 Er(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 fQ=t=>new cr({degrees:t}),mQ=t=>new hr({radians:t}),ve=t=>new lr({radians:t}),MQ=t=>new ur({radians:t}),xQ=t=>new dr({radians:t}),SQ=t=>new wr({sin:t}),NQ=t=>new pr({cos:t}),FQ=t=>new yr({tan:t}),kQ=(t,A)=>new Dr({y:t,x:A}),RQ=t=>new fr({x:t}),GQ=t=>new mr({x:t}),UQ=t=>new Mr({x:t}),bQ=t=>new xr({x:t}),vQ=t=>new Sr({x:t}),LQ=t=>new Nr({x:t});class cr extends S{constructor({degrees:A}){super({a:A,outTypeFunc:e=>e,outKey:"radians"}),this.statements=({inputs:e,outputs:s})=>[`${s.radians} = radians(${e.a});`]}}class hr extends S{constructor({radians:A}){super({a:A,outTypeFunc:e=>e,outKey:"degrees"}),this.statements=({inputs:e,outputs:s})=>[`${s.degrees} = degrees(${e.a});`]}}class lr extends S{constructor({radians:A}){super({a:A,outTypeFunc:e=>e,outKey:"sin"}),this.statements=({inputs:e,outputs:s})=>[`${s.sin} = sin(${e.a});`]}}class ur extends S{constructor({radians:A}){super({a:A,outTypeFunc:e=>e,outKey:"cos"}),this.statements=({inputs:e,outputs:s})=>[`${s.cos} = cos(${e.a});`]}}class dr extends S{constructor({radians:A}){super({a:A,outTypeFunc:e=>e,outKey:"tan"}),this.statements=({inputs:e,outputs:s})=>[`${s.tan} = tan(${e.a});`]}}class wr extends S{constructor({sin:A}){super({a:A,outTypeFunc:e=>e,outKey:"asin"}),this.statements=({inputs:e,outputs:s})=>[`${s.asin} = asin(${e.a});`]}}class pr extends S{constructor({cos:A}){super({a:A,outTypeFunc:e=>e,outKey:"acos"}),this.statements=({inputs:e,outputs:s})=>[`${s.acos} = acos(${e.a});`]}}class yr extends S{constructor({tan:A}){super({a:A,outTypeFunc:e=>e,outKey:"atan"}),this.statements=({inputs:e,outputs:s})=>[`${s.atan} = atan(${e.a});`]}}class Dr extends ${constructor({y:A,x:e}){super({a:A,b:e,outTypeFunc:(s,i)=>s,outKey:"atan2"}),this.statements=({inputs:s,outputs:i})=>[`${i.atan2} = atan2(${s.a}, ${s.b});`]}}class fr extends S{constructor({x:A}){super({a:A,outTypeFunc:e=>e,outKey:"sinh"}),this.statements=({inputs:e,outputs:s})=>[`${s.sinh} = sinh(${e.a});`]}}class mr extends S{constructor({x:A}){super({a:A,outTypeFunc:e=>e,outKey:"cosh"}),this.statements=({inputs:e,outputs:s})=>[`${s.cosh} = cosh(${e.a});`]}}class Mr extends S{constructor({x:A}){super({a:A,outTypeFunc:e=>e,outKey:"tanh"}),this.statements=({inputs:e,outputs:s})=>[`${s.tanh} = tanh(${e.a});`]}}class xr extends S{constructor({x:A}){super({a:A,outTypeFunc:e=>e,outKey:"asinh"}),this.statements=({inputs:e,outputs:s})=>[`${s.asinh} = asinh(${e.a});`]}}class Sr extends S{constructor({x:A}){super({a:A,outTypeFunc:e=>e,outKey:"acosh"}),this.statements=({inputs:e,outputs:s})=>[`${s.acosh} = acosh(${e.a});`]}}class Nr extends S{constructor({x:A}){super({a:A,outTypeFunc:e=>e,outKey:"atanh"}),this.statements=({inputs:e,outputs:s})=>[`${s.atanh} = atanh(${e.a});`]}}const YQ=Object.freeze(Object.defineProperty({__proto__:null,Abs:An,Acos:pr,Acosh:Sr,Add:Vi,All:vn,And:mn,Any:bn,Asin:wr,Asinh:xr,Atan:yr,Atan2:Dr,Atanh:Nr,BVec2:Pn,BVec3:jn,BVec4:Xn,BinaryOp:$,Bool:Vn,Ceil:sn,Clamp:un,Combine:Ha,CombineGsplat:Ms,CompMult:ba,CompXor:Tn,Compilation:ds,Cos:ur,Cosh:mr,Cross:Sa,Degrees:hr,Determinant:Ya,Distance:Ma,Div:Wi,Dot:xa,Dyno:V,DynoBlock:qA,DynoBool:Ie,DynoBvec2:Gs,DynoBvec3:Ls,DynoBvec4:Js,DynoConst:us,DynoFloat:Qt,DynoInt:Jt,DynoIsampler2D:ei,DynoIsampler2DArray:ii,DynoIsampler3D:ri,DynoIsamplerCube:Ii,DynoIvec2:bs,DynoIvec3:Ts,DynoIvec4:Ks,DynoLiteral:Dt,DynoMat2:qs,DynoMat2x2:zs,DynoMat2x3:_s,DynoMat2x4:Vs,DynoMat3:Zs,DynoMat3x2:Os,DynoMat3x3:Ws,DynoMat3x4:Ps,DynoMat4:js,DynoMat4x2:Xs,DynoMat4x3:$s,DynoMat4x4:Ai,DynoOutput:q,DynoProgram:_e,DynoProgramTemplate:Ve,DynoRemapIndex:Wa,DynoSampler2D:si,DynoSampler2DArray:ni,DynoSampler2DArrayShadow:Ci,DynoSampler2DShadow:Qi,DynoSampler3D:gi,DynoSamplerCube:Bi,DynoSamplerCubeShadow:Ei,DynoUint:Rs,DynoUniform:R,DynoUsampler2D:ti,DynoUsampler2DArray:bt,DynoUsampler3D:ai,DynoUsamplerCube:oi,DynoUvec2:Us,DynoUvec3:Ys,DynoUvec4:Hs,DynoValue:st,DynoVec2:vs,DynoVec3:mt,DynoVec4:Pt,Equal:Gn,Exp:on,Exp2:In,ExtendVec:ka,FaceForward:Ra,Float:Wn,FloatBitsToInt:Ba,FloatBitsToUint:Qa,Floor:en,Fract:rn,GreaterThan:kn,GreaterThanEqual:Rn,Gsplat:X,GsplatNormal:Ss,Hash:Pa,Hash2:ja,Hash3:Xa,Hash4:$a,HashFloat:Ar,HashVec2:tr,HashVec3:er,HashVec4:sr,IMod:Pi,IVec2:$n,IVec3:Aa,IVec4:ta,Int:Zn,IntBitsToFloat:Ca,Inverse:Ta,InverseSqrt:cn,IsInf:Dn,IsNan:yn,Length:ma,LessThan:Nn,LessThanEqual:Fn,Log:Bn,Log2:Qn,Mat2:ga,Mat3:oa,Mat4:Ia,Max:ln,Min:hn,Mix:dn,Mod:ji,Modf:Xi,Mul:Oi,Neg:$i,Normalize:Na,NormalizedDepth:ir,Not:Sn,NotEqual:Un,NumPackedSplats:ps,Or:Mn,Outer:va,OutputPackedSplat:ks,OutputRgba8:qe,PackHalf2x16:da,PackSnorm2x16:ca,PackUnorm2x16:la,PcgHash:UA,PcgMix:Nt,PcgNext:GA,Pow:gn,ProjectH:Fa,Radians:cr,ReadPackedSplat:Ds,ReadPackedSplatRange:fs,ReflectVec:Ga,RefractVec:Ua,Round:an,Select:Ln,Sign:tn,SimpleCast:oA,Sin:lr,Sinh:fr,Smoothstep:pn,Split:Ja,SplitGsplat:ms,Sqr:Cn,Sqrt:En,Step:wn,Sub:Zi,Swizzle:Ka,TPackedSplats:Wt,Tan:dr,Tanh:Mr,TexelFetch:Qr,Texture:Br,TextureSize:Ir,TransformDir:gr,TransformGsplat:Ns,TransformPosition:rr,TransformQuaternion:or,Transpose:La,TrinaryOp:ht,Trunc:nn,UVec2:ea,UVec3:sa,UVec4:ia,Uint:On,UintBitsToFloat:Ea,UintToRgba8:pa,UnaryOp:S,UnpackHalf2x16:wa,UnpackSnorm2x16:ha,UnpackUnorm2x16:ua,Vec2:na,Vec3:aa,Vec4:ra,Xor:xn,abs:TI,acos:NQ,acosh:vQ,add:fA,all:cB,and:nB,any:EB,arrayIndex:uQ,arrayLength:dQ,asin:SQ,asinh:bQ,atan:FQ,atan2:kQ,atanh:LQ,bool:dB,bvec2:yB,bvec3:DB,bvec4:fB,ceil:KI,clamp:AB,combine:HA,combineGsplat:it,comment:lQ,compMult:PB,compXor:hB,cos:MQ,cosh:GQ,cross:zB,defineGsplat:FA,defineGsplatNormal:xs,definePackedSplats:ue,degrees:mQ,determinant:$B,distance:qB,div:ae,dot:ya,dyno:Ot,dynoBlock:kA,dynoBool:Gg,dynoBvec2:vg,dynoBvec3:Jg,dynoBvec4:qg,dynoConst:K,dynoDeclare:He,dynoFloat:TA,dynoFor:hQ,dynoIf:EQ,dynoInt:bg,dynoIsampler2D:ao,dynoIsampler2DArray:oo,dynoIsampler3D:Qo,dynoIsamplerCube:co,dynoIvec2:Yg,dynoIvec3:Kg,dynoIvec4:_g,dynoLiteral:oe,dynoMat2:Zg,dynoMat2x2:Og,dynoMat2x3:Wg,dynoMat2x4:Pg,dynoMat3:jg,dynoMat3x2:Xg,dynoMat3x3:$g,dynoMat3x4:Ao,dynoMat4:to,dynoMat4x2:eo,dynoMat4x3:so,dynoMat4x4:io,dynoSampler2D:ro,dynoSampler2DArray:Io,dynoSampler2DArrayShadow:uo,dynoSampler2DShadow:lo,dynoSampler3D:Co,dynoSamplerCube:ho,dynoSamplerCubeShadow:wo,dynoSwitch:cQ,dynoUint:Ug,dynoUsampler2D:no,dynoUsampler2DArray:go,dynoUsampler3D:Bo,dynoUsamplerCube:Eo,dynoUvec2:Lg,dynoUvec3:Hg,dynoUvec4:zg,dynoVec2:Tg,dynoVec3:$A,dynoVec4:Vg,equal:QB,exp:VI,exp2:ZI,extendVec:fa,faceforward:_B,float:Jn,floatBitsToInt:qn,floatBitsToUint:UB,floor:HI,fract:re,greaterThan:BB,greaterThanEqual:fn,gsplatNormal:Re,hash:qa,hash2:za,hash3:_a,hash4:Va,hashFloat:BQ,hashVec2:QQ,hashVec3:Za,hashVec4:be,imod:Ue,int:wB,intBitsToFloat:bB,inverse:AQ,inversesqrt:XI,isAllFloatType:at,isBoolType:Et,isFloatType:Vt,isInf:iB,isIntType:lA,isMat2:rt,isMat3:gt,isMat4:ot,isMatFloatType:Cs,isNan:sB,isScalarType:ct,isUintType:uA,isVector2Type:xt,isVector3Type:St,isVector4Type:Zt,isVectorType:mg,ivec2:mB,ivec3:MB,ivec4:xB,length:KB,lessThan:oB,lessThanEqual:IB,literalNegOne:Ng,literalOne:Sg,literalZero:Gt,log:OI,log2:WI,mat2:kB,mat3:RB,mat4:GB,max:zi,min:$I,mix:_i,mod:qi,modf:YI,mul:CA,neg:Oe,normalize:Da,normalizedDepth:Oa,not:gB,notEqual:CB,numPackedSplats:Fg,numberAsFloat:H,numberAsInt:aA,numberAsUint:rA,or:aB,outer:jB,outputPackedSplat:Fs,outputRgba8:kg,packHalf2x16:zn,packSnorm2x16:LB,packUnorm2x16:TB,pcgHash:IQ,pcgMix:gQ,pcgNext:oQ,pow:_I,projectH:OB,radians:fQ,readPackedSplat:Tt,readPackedSplatRange:ws,reflectVec:VB,refractVec:ZB,remapIndex:rQ,round:zI,sameSizeIvec:xg,sameSizeUvec:hs,sameSizeVec:Mg,select:We,sign:JI,sin:ve,sinh:RQ,smoothstep:eB,split:ft,splitGsplat:Bt,sqr:PI,sqrt:jI,step:tB,sub:Mt,swizzle:WB,tan:xQ,tanh:UQ,texelFetch:yQ,texture:pQ,textureSize:wQ,transformDir:ar,transformGsplat:Ke,transformPos:nr,transformQuat:CQ,transpose:XB,trunc:qI,typeLiteral:ls,uint:pB,uintBitsToFloat:vB,uintToRgba8:_n,uniform:Rg,unindent:EA,unindentLines:bA,unpackHalf2x16:HB,unpackSnorm2x16:YB,unpackUnorm2x16:JB,uvec2:SB,uvec3:NB,uvec4:FB,valType:_,vec2:Hn,vec3:Ct,vec4:Kn,vectorDim:cs,vectorElementType:Es,xor:rB},Symbol.toStringTag,{value:"Module"}));var TQ=`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 BA=class BA{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 n=new ArrayBuffer(i);if(e instanceof ArrayBuffer)return n;const a=e.constructor;return new a(n)}ensureCapacity(A){const{width:e,height:s,depth:i,maxSplats:n}=mA(A);(!this.target||n>this.capacity)&&(this.dispose(),this.capacity=n,this.target=new Q.WebGLArrayRenderTarget(e,s,i,{depthBuffer:!1,stencilBuffer:!1,generateMipmaps:!1,magFilter:Q.NearestFilter,minFilter:Q.NearestFilter}),this.target.texture.format=Q.RGBAFormat,this.target.texture.type=Q.UnsignedByteType,this.target.texture.internalFormat="RGBA8",this.target.scissorTest=!0)}prepareProgramMaterial(A){let e=BA.readbackProgram.get(A);if(!e){const i=kA({index:"int"},{rgba8:"vec4"},({index:n})=>(A.inputs.index=n,{rgba8:new qe({rgba8:A.outputs.rgba8})}));BA.programTemplate||(BA.programTemplate=new Ve(TQ)),e=new _e({graph:i,inputs:{index:"index"},outputs:{rgba8:"target"},template:BA.programTemplate}),Object.assign(e.uniforms,{targetLayer:{value:0},targetBase:{value:0},targetCount:{value:0}}),BA.readbackProgram.set(A,e)}const s=e.prepareMaterial();return BA.mesh.material=s,{program:e,material:s}}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 s=this.renderer;if(!s)throw new Error("No renderer");if(!this.target)throw new Error("No target");const i=j*et;e.uniforms.targetBase.value=0,e.uniforms.targetCount.value=A;let n=0;for(;n<A;){const a=Math.floor(n/i),r=a*i,g=Math.min(et,Math.ceil((A-r)/j));e.uniforms.targetLayer.value=a,this.target.scissor.set(0,0,j,g),s.setRenderTarget(this.target,a),s.xr.enabled=!1,s.autoClear=!1,s.render(BA.scene,BA.camera),n+=j*g}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 s=Math.ceil(this.count/j)*j;if(A.byteLength<s*4)throw new Error(`Readback buffer too small: ${A.byteLength} < ${s*4}`);const i=new Uint8Array(A instanceof ArrayBuffer?A:A.buffer),n=j*et;let a=0;const r=[];for(;a<this.count;){const g=Math.floor(a/n),I=g*n,B=Math.min(et,Math.ceil((this.count-I)/j));e.setRenderTarget(this.target,g);const o=j*B*4,C=i.subarray(I*4,I*4+o),E=e==null?void 0:e.readRenderTargetPixelsAsync(this.target,0,0,j,B,C);r.push(E),a+=j*B}return Promise.all(r).then(()=>A)}render({reader:A,count:e,renderer:s}){if(this.renderer=s||this.renderer,!this.renderer)throw new Error("No renderer");this.ensureCapacity(e);const{program:i,material:n}=this.prepareProgramMaterial(A);i.update();const a=this.saveRenderState(this.renderer);this.process({count:e,material:n}),this.resetRenderState(this.renderer,a)}async readback({readback:A}){if(!this.renderer)throw new Error("No renderer");const e=this.saveRenderState(this.renderer),s=this.read({readback:A});return this.resetRenderState(this.renderer,e),s}async renderReadback({reader:A,count:e,renderer:s,readback:i}){if(this.renderer=s||this.renderer,!this.renderer)throw new Error("No renderer");this.ensureCapacity(e);const{program:n,material:a}=this.prepareProgramMaterial(A);n.update();const r=this.saveRenderState(this.renderer);this.process({count:e,material:a});const g=this.read({readback:i});return this.resetRenderState(this.renderer,r),g}getTexture(){var A;return(A=this.target)==null?void 0:A.texture}};BA.programTemplate=null,BA.readbackProgram=new Map,BA.geometry=new Q.PlaneGeometry(2,2),BA.mesh=new Q.Mesh(BA.geometry,new Q.RawShaderMaterial({visible:!1})),BA.scene=new Q.Scene().add(BA.mesh),BA.camera=new Q.Camera;let Ht=BA;const QA=class QA{constructor(A={}){this.capacity=0,this.count=0,this.array=null,this.readback=null,this.source=null,this.needsUpdate=!0,this.dyno=new R({key:"rgbaArray",type:Fr,globals:()=>[kr],value:{texture:QA.getEmpty(),count:0},update:e=>{var s;return e.texture=((s=this.readback)==null?void 0:s.getTexture())??this.source??QA.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 s=new Uint8Array(this.capacity*4);this.array&&s.set(this.array),this.array=s}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??QA.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:s}=this.source.image;this.capacity!==A*e*s&&(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:s}=mA(this.capacity);this.source=new Q.DataArrayTexture(this.array,A,e,s),this.source.format=Q.RGBAFormat,this.source.type=Q.UnsignedByteType,this.source.internalFormat="RGBA8",this.source.needsUpdate=!0}this.source.needsUpdate=!0}return this.source}render({reader:A,count:e,renderer:s}){this.readback||(this.readback=new Ht({renderer:s})),this.readback.render({reader:A,count:e,renderer:s}),this.capacity=this.readback.capacity,this.count=this.readback.count}fromPackedSplats({packedSplats:A,base:e,count:s,renderer:i}){const{dynoSplats:n,dynoBase:a,dynoCount:r,reader:g}=QA.makeDynos();return n.packedSplats=A,a.value=e,r.value=s,this.render({reader:g,count:s,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(!QA.emptySource){const A=new Uint8Array(4);QA.emptySource=new Q.DataArrayTexture(A,1,1,1),QA.emptySource.format=Q.RGBAFormat,QA.emptySource.type=Q.UnsignedByteType,QA.emptySource.internalFormat="RGBA8",QA.emptySource.needsUpdate=!0}return QA.emptySource}static makeDynos(){if(!QA.dynos){const A=new Xe,e=new Jt({value:0}),s=new Jt({value:0}),i=kA({index:"int"},{rgba8:"vec4"},({index:n})=>{if(!n)throw new Error("index is undefined");n=fA(n,e);const a=ws(A,n,e,s);return{rgba8:Bt(a).outputs.rgba}});QA.dynos={dynoSplats:A,dynoBase:e,dynoCount:s,reader:i}}return QA.dynos}};QA.emptySource=null,QA.dynos=null;let Le=QA;const Fr={type:"RgbaArray"},kr=EA(`
struct RgbaArray {
sampler2DArray texture;
int count;
};
`);function JQ(t,A){return new V({inTypes:{rgba:Fr,index:"int"},outTypes:{rgba:"vec4"},inputs:{rgba:t,index:A},globals:()=>[kr],statements:({inputs:s,outputs:i})=>bA(`
if ((index >= 0) && (index < ${s.rgba}.count)) {
${i.rgba} = texelFetch(${s.rgba}.texture, splatTexCoord(index), 0);
} else {
${i.rgba} = vec4(0.0, 0.0, 0.0, 0.0);
}
`)}).outputs.rgba}var Rr=(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))(Rr||{});function HQ(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 Gr=(t=>(t.MULTIPLY="multiply",t.SET_RGB="set_rgb",t.ADD_RGBA="add_rgba",t))(Gr||{});function KQ(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 Ur extends Q.Object3D{constructor(A={}){super();const{type:e,invert:s,opacity:i,color:n,displace:a,radius:r}=A;this.type=e??"sphere",this.invert=s??!1,this.opacity=i??1,this.color=n??new Q.Color(1,1,1),this.displace=a??new Q.Vector3(0,0,0),this.radius=r??0}}const le=class le extends Q.Object3D{constructor(A={}){const{name:e,rgbaBlendMode:s="multiply",sdfSmooth:i=0,softEdge:n=0,invert:a=!1,sdfs:r=null}=A;super(),this.rgbaBlendMode=s,this.sdfSmooth=i,this.softEdge=n,this.invert=a,this.sdfs=r,this.ordering=le.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))}};le.nextOrdering=1;let Kt=le;class br{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 R({key:"sdfArray",type:vr,globals:()=>[Lr],value:{numSdfs:0,sdfTexture:this.sdfTexture},update:s=>(s.numSdfs=this.numSdfs,s.sdfTexture=this.sdfTexture,s)}),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 Jt({value:0}),this.dynoEdits=this.newEdits(this.editData,this.maxEdits)}newSdfTexture(A,e){const s=new Q.DataTexture(A,8,e,Q.RGBAIntegerFormat,Q.UnsignedIntType);return s.internalFormat="RGBA32UI",s.needsUpdate=!0,s}newEdits(A,e){return new R({key:"edits",type:"uvec4",count:e,globals:()=>[Yr],value:A})}ensureCapacity({maxSdfs:A,maxEdits:e}){let s=!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),s=!0),s}updateEditData(A,e){const s=this.editData[A]!==e;return this.editData[A]=e,s}updateEditFloatData(A,e){lt[0]=e;const s=this.editFloatData[A]!==lt[0];return s&&(this.editFloatData[A]=lt[0]),s}encodeEdit(A,{sdfFirst:e,sdfCount:s,invert:i,rgbaBlendMode:n,softEdge:a,sdfSmooth:r}){const g=A*4;let I=!1;return I=this.updateEditData(g+0,n|(i?256:0))||I,I=this.updateEditData(g+1,e|s<<16)||I,I=this.updateEditFloatData(g+2,a)||I,I=this.updateEditFloatData(g+3,r)||I,I}updateSdfData(A,e){const s=this.sdfData[A]!==e;return this.sdfData[A]=e,s}updateSdfFloatData(A,e){lt[0]=e;const s=this.sdfFloatData[A]!==lt[0];return s&&(this.sdfFloatData[A]=lt[0]),s}encodeSdf(A,{sdfType:e,invert:s,center:i,quaternion:n,scale:a,sizes:r},g){const I=A*32,B=e|(s?256:0);let o=!1;o=this.updateSdfFloatData(I+0,(i==null?void 0:i.x)??0)||o,o=this.updateSdfFloatData(I+1,(i==null?void 0:i.y)??0)||o,o=this.updateSdfFloatData(I+2,(i==null?void 0:i.z)??0)||o,o=this.updateSdfData(I+3,B)||o,o=this.updateSdfFloatData(I+4,(n==null?void 0:n.x)??0)||o,o=this.updateSdfFloatData(I+5,(n==null?void 0:n.y)??0)||o,o=this.updateSdfFloatData(I+6,(n==null?void 0:n.z)??0)||o,o=this.updateSdfFloatData(I+7,(n==null?void 0:n.w)??0)||o,o=this.updateSdfFloatData(I+8,(a==null?void 0:a.x)??0)||o,o=this.updateSdfFloatData(I+9,(a==null?void 0:a.y)??0)||o,o=this.updateSdfFloatData(I+10,(a==null?void 0:a.z)??0)||o,o=this.updateSdfData(I+11,0)||o,o=this.updateSdfFloatData(I+12,(r==null?void 0:r.x)??0)||o,o=this.updateSdfFloatData(I+13,(r==null?void 0:r.y)??0)||o,o=this.updateSdfFloatData(I+14,(r==null?void 0:r.z)??0)||o,o=this.updateSdfFloatData(I+15,(r==null?void 0:r.w)??0)||o;const C=Math.min(4,g.length);for(let E=0;E<C;++E){const h=I+16+E*4;o=this.updateSdfFloatData(h+0,g[E].x)||o,o=this.updateSdfFloatData(h+1,g[E].y)||o,o=this.updateSdfFloatData(h+2,g[E].z)||o,o=this.updateSdfFloatData(h+3,g[E].w)||o}return o}update(A){const e=A.reduce((o,{sdfs:C})=>o+C.length,0),s=this.ensureCapacity({maxEdits:A.length,maxSdfs:e}),i=[new Q.Vector4,new Q.Vector4],n=new Q.Vector3,a=new Q.Quaternion,r=new Q.Vector3,g=new Q.Vector4;let I=0,B=s;A.length!==this.dynoNumEdits.value&&(this.dynoNumEdits.value=A.length,this.numEdits=A.length,B=!0);for(const[o,{edit:C,sdfs:E}]of A.entries()){B=this.encodeEdit(o,{sdfFirst:I,sdfCount:E.length,invert:C.invert,rgbaBlendMode:KQ(C.rgbaBlendMode),softEdge:C.softEdge,sdfSmooth:C.sdfSmooth})||B;let h=!1;for(const c of E)g.set(c.scale.x,c.scale.y,c.scale.z,c.radius),c.scale.setScalar(1),c.updateMatrixWorld(),c.matrixWorld.clone().invert().decompose(n,a,r),c.scale.set(g.x,g.y,g.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(I,{sdfType:HQ(c.type),invert:c.invert,center:n,quaternion:a,scale:r,sizes:g},i)||h,I+=1;this.numSdfs=I,h&&(this.sdfTexture.needsUpdate=!0),B||(B=h)}return{updated:B,dynoUpdated:s}}modify(A){return qQ(A,this.dynoSdfArray,this.dynoNumEdits,this.dynoEdits)}}const vr={type:"SdfArray"},Lr=EA(`
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);
}
`),Yr=EA(`
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 qQ(t,A,e,s){return new V({inTypes:{gsplat:X,sdfArray:vr,numEdits:"int",rgbaDisplaceEdits:"uvec4"},outTypes:{gsplat:X},globals:()=>[Lr,Yr],inputs:{gsplat:t,sdfArray:A,numEdits:e,rgbaDisplaceEdits:s},statements:({inputs:n,outputs:a})=>{const{sdfArray:r,numEdits:g,rgbaDisplaceEdits:I}=n,{gsplat:B}=a;return bA(`
${B} = ${n.gsplat};
if (isGsplatActive(${B}.flags)) {
for (int editIndex = 0; editIndex < ${g}; ++editIndex) {
applyPackedRgbaDisplaceEdit(
${I}[editIndex], ${r}.sdfTexture, ${r}.numSdfs,
${B}.center, ${B}.rgba
);
}
}
`)}}).outputs.gsplat}const lt=new Float32Array(1);class Tr{constructor(A){this.modifier=A,this.cache=new Map}apply(A){let e=this.cache.get(A);return e||(e=kA({index:"int"},{gsplat:X},({index:s})=>{const{gsplat:i}=A.apply({index:s});return this.modifier.apply({gsplat:i})}),this.cache.set(A,e)),e}}class It{constructor(){this.scale=new Qt({value:Number.NEGATIVE_INFINITY}),this.rotate=new Pt({value:new Q.Quaternion(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY)}),this.translate=new mt({value:new Q.Vector3(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY)})}apply(A){return nr(A,{scale:this.scale,rotate:this.rotate,translate:this.translate})}applyDir(A){return ar(A,{rotate:this.rotate})}applyGsplat(A){return Ke(A,{scale:this.scale,rotate:this.rotate,translate:this.translate})}updateFromMatrix(A){const e=new Q.Vector3,s=new Q.Quaternion,i=new Q.Vector3;A.decompose(i,s,e);const n=(e.x+e.y+e.z)/3;let a=!1;return n!==this.scale.value&&(this.scale.value=n,a=!0),i.equals(this.translate.value)||(this.translate.value.copy(i),a=!0),s.equals(this.rotate.value)||(this.rotate.value.copy(s),a=!0),a}update(A){return A.updateMatrixWorld(),this.updateFromMatrix(A.matrixWorld)}}class $t extends Q.Object3D{constructor({numSplats:A,generator:e,construct:s,update:i}){if(super(),this.numSplats=A??0,this.generator=e,this.frameUpdate=i,this.version=0,s){const n=s(this);Object.assign(this,n)}}updateVersion(){this.version+=1}set needsUpdate(A){A&&this.updateVersion()}}const At=class At extends $t{constructor(A={}){const e=new It,s=new It,i=new It,n=new It,a=new Pt({value:new Q.Vector4(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY)}),r=new Qt({value:0}),g=new Qt({value:0}),I={transform:e,viewToWorld:s,worldToView:i,viewToObject:n,recolor:a,time:r,deltaTime:g};if(super({update:({time:B,deltaTime:o,viewToWorld:C,globalEdits:E})=>this.update({time:B,deltaTime:o,viewToWorld:C,globalEdits:E})}),this.isInitialized=!1,this.recolor=new Q.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 YA,this.numSplats=this.packedSplats.numSplats,this.editable=A.editable??!0,this.onFrame=A.onFrame,this.context=I,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 B=A.onLoad(this);B instanceof Promise&&await B}return this});else if(this.isInitialized=!0,this.initialized=Promise.resolve(this),A.onLoad){const B=A.onLoad(this);B instanceof Promise&&(this.initialized=B.then(()=>this))}}async asyncInitialize(A){const{url:e,fileBytes:s,fileType:i,fileName:n,maxSplats:a,constructSplats:r}=A;if(e||s||r){const g={url:e,fileBytes:s,fileType:i,fileName:n,maxSplats:a,construct:r};this.packedSplats.reinitialize(g)}this.packedSplats&&(await this.packedSplats.initialized,this.numSplats=this.packedSplats.numSplats,this.updateGenerator())}static async staticInitialize(){await Bs(),At.isStaticInitialized=!0}pushSplat(A,e,s,i,n){this.packedSplats.pushSplat(A,e,s,i,n)}forEachSplat(A){this.packedSplats.forEachSplat(A)}dispose(){this.packedSplats.dispose()}constructGenerator(A){const{transform:e,viewToObject:s,recolor:i}=A,n=kA({index:"int"},{gsplat:X},({index:a})=>{if(!a)throw new Error("index is undefined");let r=Tt(this.packedSplats.dyno,a);if(this.maxSh>=1){const{sh1Texture:I,sh2Texture:B,sh3Texture:o}=this.ensureShTextures();if(I){const C=s.translate,{center:E}=Bt(r).outputs,h=Da(Mt(E,C));let c=ZQ(r,I,h);this.maxSh>=2&&B&&(c=fA(c,OQ(r,B,h))),this.maxSh>=3&&o&&(c=fA(c,WQ(r,o,h)));let{rgba:l}=Bt(r).outputs;l=fA(l,fa(c,K("float",0))),r=it({gsplat:r,rgba:l})}}if(this.splatRgba){const I=JQ(this.splatRgba.dyno,a);r=it({gsplat:r,rgba:I})}this.skinning&&(r=this.skinning.modify(r)),this.objectModifier&&(r=this.objectModifier.apply({gsplat:r}).gsplat),r=e.applyGsplat(r);const g=CA(i,Bt(r).outputs.rgba);return r=it({gsplat:r,rgba:g}),this.rgbaDisplaceEdits&&(r=this.rgbaDisplaceEdits.modify(r)),this.worldModifier&&(r=this.worldModifier.apply({gsplat:r}).gsplat),{gsplat:r}});this.generator=n}updateGenerator(){this.constructGenerator(this.context)}update({time:A,viewToWorld:e,deltaTime:s,globalEdits:i}){var l;this.numSplats=this.packedSplats.numSplats,this.context.time.value=A,this.context.deltaTime.value=s,At.dynoTime.value=A;const{transform:n,viewToObject:a,recolor:r}=this.context;let g=n.update(this);this.context.viewToWorld.updateFromMatrix(e)&&this.enableViewToWorld&&(g=!0);const I=e.clone().invert();this.context.worldToView.updateFromMatrix(I)&&this.enableWorldToView&&(g=!0);const C=new Q.Matrix4().compose(n.translate.value,n.rotate.value,new Q.Vector3().setScalar(n.scale.value)).invert().multiply(e);a.updateFromMatrix(C)&&(this.enableViewToObject||this.packedSplats.extra.sh1)&&(g=!0);const E=new Q.Vector4(this.recolor.r,this.recolor.g,this.recolor.b,this.opacity);E.equals(r.value)||(r.value.copy(E),g=!0);const h=this.editable?(this.edits??[]).concat(i):[];this.editable&&!this.edits&&this.traverseVisible(u=>{u instanceof Kt&&h.push(u)}),h.sort((u,d)=>u.ordering-d.ordering);const c=h.map(u=>{if(u.sdfs!=null)return{edit:u,sdfs:u.sdfs};const d=[];return u.traverseVisible(w=>{w instanceof Ur&&d.push(w)}),{edit:u,sdfs:d}});if(c.length>0&&!this.rgbaDisplaceEdits){const u=c.length,d=c.reduce((w,y)=>w+y.sdfs.length,0);this.rgbaDisplaceEdits=new br({maxEdits:u,maxSdfs:d}),this.updateGenerator()}if(this.rgbaDisplaceEdits){const u=this.rgbaDisplaceEdits.update(c);g||(g=u.updated),u.dynoUpdated&&this.updateGenerator()}g&&this.updateVersion(),(l=this.onFrame)==null||l.call(this,{mesh:this,time:A,deltaTime:s})}raycast(A,e){if(!this.packedSplats.packedArray||!this.packedSplats.numSplats)return;const{near:s,far:i,ray:n}=A,a=this.matrixWorld.clone().invert(),r=new Q.Matrix3().setFromMatrix4(a),g=n.origin.clone().applyMatrix4(a),I=n.direction.clone().applyMatrix3(r),B=new Q.Vector3;a.decompose(new Q.Vector3,new Q.Quaternion,B),(B.x*B.y*B.z)**(1/3);const C=ug(g.x,g.y,g.z,I.x,I.y,I.z,s,i,this.packedSplats.numSplats,this.packedSplats.packedArray,!0);for(const E of C){const h=n.direction.clone().multiplyScalar(E).add(n.origin);e.push({distance:E,point:h,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:n,height:a,depth:r,maxSplats:g}=mA(i.length/2);if(i.length<g*2){const B=new Uint32Array(g*2);B.set(i),this.packedSplats.extra.sh1=B,i=B}const I=new Q.DataArrayTexture(i,n,a,r);I.format=Q.RGIntegerFormat,I.type=Q.UnsignedIntType,I.internalFormat="RG32UI",I.needsUpdate=!0,A=new bt({value:I,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:n,height:a,depth:r,maxSplats:g}=mA(i.length/4);if(i.length<g*4){const B=new Uint32Array(g*4);B.set(i),this.packedSplats.extra.sh2=B,i=B}const I=new Q.DataArrayTexture(i,n,a,r);I.format=Q.RGBAIntegerFormat,I.type=Q.UnsignedIntType,I.internalFormat="RGBA32UI",I.needsUpdate=!0,e=new bt({value:I,key:"sh2"}),this.packedSplats.extra.sh2Texture=e}if(!this.packedSplats.extra.sh3)return{sh1Texture:A,sh2Texture:e};let s=this.packedSplats.extra.sh3Texture;if(!s){let i=this.packedSplats.extra.sh3;const{width:n,height:a,depth:r,maxSplats:g}=mA(i.length/4);if(i.length<g*4){const B=new Uint32Array(g*4);B.set(i),this.packedSplats.extra.sh3=B,i=B}const I=new Q.DataArrayTexture(i,n,a,r);I.format=Q.RGBAIntegerFormat,I.type=Q.UnsignedIntType,I.internalFormat="RGBA32UI",I.needsUpdate=!0,s=new bt({value:I,key:"sh3"}),this.packedSplats.extra.sh3Texture=s}return{sh1Texture:A,sh2Texture:e,sh3Texture:s}}};At.staticInitialized=At.staticInitialize(),At.isStaticInitialized=!1,At.dynoTime=new Qt({value:0});let KA=At;const zQ=EA(`
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);
}
`),_Q=EA(`
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));
}
`),VQ=EA(`
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 ZQ(t,A,e){return Ot({inTypes:{gsplat:X,sh1:"usampler2DArray",viewDir:"vec3"},outTypes:{rgb:"vec3"},inputs:{gsplat:t,sh1:A,viewDir:e},globals:()=>[FA,zQ],statements:({inputs:s,outputs:i})=>bA(`
if (isGsplatActive(${s.gsplat}.flags)) {
${i.rgb} = evaluateSH1(${s.gsplat}, ${s.sh1}, ${s.viewDir});
} else {
${i.rgb} = vec3(0.0);
}
`)}).outputs.rgb}function OQ(t,A,e){return Ot({inTypes:{gsplat:X,sh2:"usampler2DArray",viewDir:"vec3"},outTypes:{rgb:"vec3"},inputs:{gsplat:t,sh2:A,viewDir:e},globals:()=>[FA,_Q],statements:({inputs:s,outputs:i})=>bA(`
if (isGsplatActive(${s.gsplat}.flags)) {
${i.rgb} = evaluateSH2(${s.gsplat}, ${s.sh2}, ${s.viewDir});
} else {
${i.rgb} = vec3(0.0);
}
`)}).outputs.rgb}function WQ(t,A,e){return Ot({inTypes:{gsplat:X,sh3:"usampler2DArray",viewDir:"vec3"},outTypes:{rgb:"vec3"},inputs:{gsplat:t,sh3:A,viewDir:e},globals:()=>[FA,VQ],statements:({inputs:s,outputs:i})=>bA(`
if (isGsplatActive(${s.gsplat}.flags)) {
${i.rgb} = evaluateSH3(${s.gsplat}, ${s.sh3}, ${s.viewDir});
} else {
${i.rgb} = vec3(0.0);
}
`)}).outputs.rgb}const yt=class yt{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:a=>{a.enqueue(this.fileBytes.slice(0,65536)),a.close()}}).pipeThrough(new TextDecoderStream).getReader();this.header="";const s=`end_header
`;for(;;){const{value:a,done:r}=await e.read();if(r)throw new Error("Failed to read header");this.header+=a;const g=this.header.indexOf(s);if(g>=0){this.header=this.header.slice(0,g+s.length);break}}const i=new TextEncoder().encode(this.header).length;this.data=new DataView(this.fileBytes.buffer,i),this.elements={};let n=null;this.comments=[],this.header.trim().split(`
`).forEach((a,r)=>{const g=a.trim();if(r===0){if(g!=="ply")throw new Error("Invalid PLY header");return}if(g.length===0)return;const I=g.split(" ");switch(I[0]){case"format":if(I[1]==="binary_little_endian")this.littleEndian=!0;else if(I[1]==="binary_big_endian")this.littleEndian=!1;else throw new Error(`Unsupported PLY format: ${I[1]}`);if(I[2]!=="1.0")throw new Error(`Unsupported PLY version: ${I[2]}`);break;case"end_header":break;case"comment":this.comments.push(g.slice(8));break;case"element":{const B=I[1];n={name:B,count:Number.parseInt(I[2]),properties:{}},this.elements[B]=n;break}case"property":if(n==null)throw new Error("Property must be inside an element");I[1]==="list"?n.properties[I[4]]={isList:!0,type:I[3],countType:I[2]}:n.properties[I[2]]={isList:!1,type:I[1]};break}}),this.elements.vertex&&(this.numSplats=this.elements.vertex.count)}parseData(A){let e=0;const s=this.data;if(s==null)throw new Error("No data to parse");for(const i in this.elements){const n=this.elements[i],{count:a,properties:r}=n,g={},I=[];for(const[o,C]of Object.entries(r))C.isList?(g[o]=[],I.push(()=>{const E=g[o];E.length=se[C.countType](s,e,this.littleEndian),e+=ut[C.countType];for(let h=0;h<E.length;h++)E[h]=se[C.type](s,e,this.littleEndian),e+=ut[C.type]})):(g[o]=0,I.push(()=>{g[o]=se[C.type](s,e,this.littleEndian),e+=ut[C.type]}));const B=A(n)??(()=>{});for(let o=0;o<a;o++){for(const C of I)C();B(o,g)}}}parseSplats(A,e){if(this.elements.vertex==null)throw new Error("No vertex element found");let s=!1;const i=[];let n=0,a=[],r=[],g=[],I,B,o;function C(){const u=jQ[n];a=new Array(3).fill(null).flatMap((d,w)=>[0,1,2].map((y,p)=>`f_rest_${w+p*u/3}`)),r=new Array(5).fill(null).flatMap((d,w)=>[0,1,2].map((y,p)=>`f_rest_${3+w+p*u/3}`)),g=new Array(7).fill(null).flatMap((d,w)=>[0,1,2].map((y,p)=>`f_rest_${8+w+p*u/3}`)),I=n>=1?new Float32Array(3*3):void 0,B=n>=2?new Float32Array(5*3):void 0,o=n>=3?new Float32Array(7*3):void 0}function E(u,d){if(!I)throw new Error("Missing sh1");for(const[w,y]of a.entries())I[w]=d[y]*8/255-4;if(B)for(const[w,y]of r.entries())B[w]=d[y]*8/255-4;if(o)for(const[w,y]of g.entries())o[w]=d[y]*8/255-4;e==null||e(u,I,B,o)}function h(u){const{min_x:d,min_y:w,min_z:y,max_x:p,max_y:m,max_z:N,min_scale_x:f,min_scale_y:D,min_scale_z:G,max_scale_x:x,max_scale_y:M,max_scale_z:b}=u.properties;if(!d||!w||!y||!p||!m||!N||!f||!D||!G||!x||!M||!b)throw new Error("Missing PLY chunk properties");return s=!0,(F,k)=>{const{min_x:U,min_y:L,min_z:AA,max_x:z,max_y:sA,max_z:tA,min_scale_x:O,min_scale_y:T,min_scale_z:W,max_scale_x:Z,max_scale_y:P,max_scale_z:v,min_r:pA,min_g:IA,min_b:yA,max_r:DA,max_g:MA,max_b:cA}=k;i.push({min_x:U,min_y:L,min_z:AA,max_x:z,max_y:sA,max_z:tA,min_scale_x:O,min_scale_y:T,min_scale_z:W,max_scale_x:Z,max_scale_y:P,max_scale_z:v,min_r:pA,min_g:IA,min_b:yA,max_r:DA,max_g:MA,max_b:cA})}}function c(u){if(e&&u.name==="sh")return n=is(u.properties),C(),E;if(u.name!=="vertex")return null;const{packed_position:d,packed_rotation:w,packed_scale:y,packed_color:p}=u.properties;if(!d||!w||!y||!p)throw new Error("Missing PLY properties: packed_position, packed_rotation, packed_scale, packed_color");const m=Math.sqrt(2);return(N,f)=>{const D=i[N>>>8];if(D==null)throw new Error("Missing PLY chunk");const{min_x:G,min_y:x,min_z:M,max_x:b,max_y:F,max_z:k,min_scale_x:U,min_scale_y:L,min_scale_z:AA,max_scale_x:z,max_scale_y:sA,max_scale_z:tA,min_r:O,min_g:T,min_b:W,max_r:Z,max_g:P,max_b:v}=D,{packed_position:pA,packed_rotation:IA,packed_scale:yA,packed_color:DA}=f,MA=(pA>>>21&2047)/2047*(b-G)+G,cA=(pA>>>11&1023)/1023*(F-x)+x,vA=(pA&2047)/2047*(k-M)+M,xA=((IA>>>20&1023)/1023-.5)*m,WA=((IA>>>10&1023)/1023-.5)*m,PA=((IA&1023)/1023-.5)*m,Y=Math.sqrt(Math.max(0,1-xA*xA-WA*WA-PA*PA)),dA=IA>>>30,zA=dA===0?xA:dA===1?Y:WA,Ft=dA<=1?WA:dA===2?Y:PA,Ae=dA<=2?PA:Y,SA=dA===0?Y:xA,J=Math.exp((yA>>>21&2047)/2047*(z-U)+U),_A=Math.exp((yA>>>11&1023)/1023*(sA-L)+L),ye=Math.exp((yA&2047)/2047*(tA-AA)+AA),De=(DA>>>24&255)/255*((Z??1)-(O??0))+(O??0),fe=(DA>>>16&255)/255*((P??1)-(T??0))+(T??0),me=(DA>>>8&255)/255*((v??1)-(W??0))+(W??0),Me=(DA&255)/255;A(N,MA,cA,vA,J,_A,ye,zA,Ft,Ae,SA,Me,De,fe,me)}}const l=u=>{if(u.name==="chunk")return h(u);if(s)return c(u);if(u.name!=="vertex")return null;const{x:d,y:w,z:y,scale_0:p,scale_1:m,scale_2:N,rot_0:f,rot_1:D,rot_2:G,rot_3:x,opacity:M,f_dc_0:b,f_dc_1:F,f_dc_2:k,red:U,green:L,blue:AA,alpha:z}=u.properties;if(!d||!w||!y)throw new Error("Missing PLY properties: x, y, z");const sA=p&&m&&N,tA=f&&D&&G&&x,O=z!=null?ie[z.type]:1,T=U!=null?ie[U.type]:1,W=L!=null?ie[L.type]:1,Z=AA!=null?ie[AA.type]:1;return n=is(u.properties),C(),(P,v)=>{const pA=sA?Math.exp(v.scale_0):yt.defaultPointScale,IA=sA?Math.exp(v.scale_1):yt.defaultPointScale,yA=sA?Math.exp(v.scale_2):yt.defaultPointScale,DA=tA?v.rot_1:0,MA=tA?v.rot_2:0,cA=tA?v.rot_3:0,vA=tA?v.rot_0:1,xA=M!=null?1/(1+Math.exp(-v.opacity)):z!=null?v.alpha/O:1,WA=b!=null?v.f_dc_0*ee+.5:U!=null?v.red/T:1,PA=F!=null?v.f_dc_1*ee+.5:L!=null?v.green/W:1,Y=k!=null?v.f_dc_2*ee+.5:AA!=null?v.blue/Z:1;if(A(P,v.x,v.y,v.z,pA,IA,yA,DA,MA,cA,vA,xA,WA,PA,Y),e&&I){if(I)for(const[dA,zA]of a.entries())I[dA]=v[zA];if(B)for(const[dA,zA]of r.entries())B[dA]=v[zA];if(o)for(const[dA,zA]of g.entries())o[dA]=v[zA];e(P,I,B,o)}}};this.parseData(l)}injectRgba(A){let e=0;const s=this.data;if(s==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 n=this.elements[i],{count:a,properties:r}=n,g=[];let I=0;const B=i==="vertex";if(B){for(const o of["opacity","f_dc_0","f_dc_1","f_dc_2"])if(!r[o]||r[o].type!=="float")throw new Error(`Can't injectRgba due to property: ${o}`)}for(const[o,C]of Object.entries(r))if(C.isList)g.push(()=>{const E=se[C.countType](s,e,this.littleEndian);e+=ut[C.countType],e+=E*ut[C.type]});else{if(B)if(o==="f_dc_0"||o==="f_dc_1"||o==="f_dc_2"){const E=Number.parseInt(o.slice(5));g.push(()=>{const h=(A[I+E]/255-.5)/ee;ss[C.type](s,e,this.littleEndian,h)})}else o==="opacity"&&g.push(()=>{const E=Math.max(-100,Math.min(100,-Math.log(1/(A[I+3]/255)-1)));ss[C.type](s,e,this.littleEndian,E)});g.push(()=>{e+=ut[C.type]})}for(let o=0;o<a;o++){for(const C of g)C();B&&(I+=4)}}}};yt.defaultPointScale=.001;let qt=yt;const ee=.28209479177387814,se={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)},ss={char:(t,A,e,s)=>{t.setInt8(A,s)},uchar:(t,A,e,s)=>{t.setUint8(A,s)},short:(t,A,e,s)=>{t.setInt16(A,s,e)},ushort:(t,A,e,s)=>{t.setUint16(A,s,e)},int:(t,A,e,s)=>{t.setInt32(A,s,e)},uint:(t,A,e,s)=>{t.setUint32(A,s,e)},float:(t,A,e,s)=>{t.setFloat32(A,s,e)},double:(t,A,e,s)=>{t.setFloat64(A,s,e)}},ut={char:1,uchar:1,short:2,ushort:2,int:4,uint:4,float:4,double:8},ie={char:127,uchar:255,short:32767,ushort:65535,int:2147483647,uint:4294967295,float:1,double:1},PQ={0:0,9:1,24:2,45:3},jQ={0:0,1:9,2:24,3:45};function is(t){let A=0;for(;t[`f_rest_${A}`];)A+=1;const e=PQ[A];if(e==null)throw new Error(`Unsupported number of SH coefficients: ${A}`);return e}const Jr='(function(){"use strict";let jA;const Ci=typeof TextDecoder<"u"?new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}):{decode:()=>{throw Error("TextDecoder not available")}};typeof TextDecoder<"u"&&Ci.decode();let re=null;function On(){return(re===null||re.byteLength===0)&&(re=new Uint8Array(jA.memory.buffer)),re}function jn(g,A){return g=g>>>0,Ci.decode(On().subarray(g,g+A))}function Pn(g,A,t){return jA.sort_splats(g,A,t)>>>0}function Vn(g,A,t,e,s,i,n,r,a,o,I){return jA.raycast_splats(g,A,t,e,s,i,n,r,a,o,I)}async function Xn(g,A){if(typeof Response=="function"&&g instanceof Response){if(typeof WebAssembly.instantiateStreaming=="function")try{return await WebAssembly.instantiateStreaming(g,A)}catch(e){if(g.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",e);else throw e}const t=await g.arrayBuffer();return await WebAssembly.instantiate(t,A)}else{const t=await WebAssembly.instantiate(g,A);return t instanceof WebAssembly.Instance?{instance:t,module:g}:t}}function $n(){const g={};return g.wbg={},g.wbg.__wbg_buffer_609cc3eee51ed158=function(A){return A.buffer},g.wbg.__wbg_length_3b4f022188ae8db6=function(A){return A.length},g.wbg.__wbg_length_6ca527665d89694d=function(A){return A.length},g.wbg.__wbg_length_8cfd2c6409af88ad=function(A){return A.length},g.wbg.__wbg_new_9fee97a409b32b68=function(A){return new Uint16Array(A)},g.wbg.__wbg_new_e3b321dcfef89fc7=function(A){return new Uint32Array(A)},g.wbg.__wbg_newwithbyteoffsetandlength_e6b7e69acd4c7354=function(A,t,e){return new Float32Array(A,t>>>0,e>>>0)},g.wbg.__wbg_newwithbyteoffsetandlength_f1dead44d1fc7212=function(A,t,e){return new Uint32Array(A,t>>>0,e>>>0)},g.wbg.__wbg_newwithlength_5a5efe313cfd59f1=function(A){return new Float32Array(A>>>0)},g.wbg.__wbg_set_10bad9bee0e9c58b=function(A,t,e){A.set(t,e>>>0)},g.wbg.__wbg_set_d23661d19148b229=function(A,t,e){A.set(t,e>>>0)},g.wbg.__wbg_set_f4f1f0daa30696fc=function(A,t,e){A.set(t,e>>>0)},g.wbg.__wbg_subarray_3aaeec89bb2544f0=function(A,t,e){return A.subarray(t>>>0,e>>>0)},g.wbg.__wbg_subarray_769e1e0f81bb259b=function(A,t,e){return A.subarray(t>>>0,e>>>0)},g.wbg.__wbindgen_init_externref_table=function(){const A=jA.__wbindgen_export_0,t=A.grow(4);A.set(0,void 0),A.set(t+0,void 0),A.set(t+1,null),A.set(t+2,!0),A.set(t+3,!1)},g.wbg.__wbindgen_memory=function(){return jA.memory},g.wbg.__wbindgen_throw=function(A,t){throw new Error(jn(A,t))},g}function Ar(g,A){return jA=g.exports,cs.__wbindgen_wasm_module=A,re=null,jA.__wbindgen_start(),jA}async function cs(g){if(jA!==void 0)return jA;typeof g<"u"&&(Object.getPrototypeOf(g)===Object.prototype?{module_or_path:g}=g:console.warn("using deprecated parameters for the initialization function; pass a single object instead")),typeof g>"u"&&(g=new URL("data:application/wasm;base64,AGFzbQEAAAAB9wEkYAJ/fwF/YAN/f38Bf2ACf38AYAN/f38AYAF/AX9gAX8AYAV/f39/fwBgA29/fwFvYAV/f39/fwF/YAR/f39/AGABbwFvYANvb38AYAFvAX9gAAF/YAAAYAd/f39/f39/AX9gAX0BfWAGf39/f39/AGAEf39/fwF/YAF/AW9gAAFvYAd/f39/f39/AGACf34Bf2ADf35+AGACf34AYAt9fX19fX19fX9vfwFvYAZ/f39/f38Bf2AFf399f38AYAR/fX9/AGAFf39+f38AYAR/fn9/AGAFf398f38AYAR/fH9/AGADf35+AX9gA39vbwF/YAJ9fQF9AvIEEQN3YmcdX193YmdfYnVmZmVyXzYwOWNjM2VlZTUxZWQxNTgACgN3YmcaX193YmdfbmV3XzlmZWU5N2E0MDliMzJiNjgACgN3YmcaX193Ymdfc2V0X2Y0ZjFmMGRhYTMwNjk2ZmMACwN3YmcdX193YmdfbGVuZ3RoXzhjZmQyYzY0MDlhZjg4YWQADAN3YmcxX193YmdfbmV3d2l0aGJ5dGVvZmZzZXRhbmRsZW5ndGhfZjFkZWFkNDRkMWZjNzIxMgAHA3diZxpfX3diZ19uZXdfZTNiMzIxZGNmZWY4OWZjNwAKA3diZxpfX3diZ19zZXRfZDIzNjYxZDE5MTQ4YjIyOQALA3diZx1fX3diZ19sZW5ndGhfNmNhNTI3NjY1ZDg5Njk0ZAAMA3diZzFfX3diZ19uZXd3aXRoYnl0ZW9mZnNldGFuZGxlbmd0aF9lNmI3ZTY5YWNkNGM3MzU0AAcDd2JnGl9fd2JnX3NldF8xMGJhZDliZWUwZTljNThiAAsDd2JnHV9fd2JnX2xlbmd0aF8zYjRmMDIyMTg4YWU4ZGI2AAwDd2JnH19fd2JnX3N1YmFycmF5Xzc2OWUxZTBmODFiYjI1OWIABwN3YmcfX193Ymdfc3ViYXJyYXlfM2FhZWVjODliYjI1NDRmMAAHA3diZyRfX3diZ19uZXd3aXRobGVuZ3RoXzVhNWVmZTMxM2NmZDU5ZjEAEwN3YmcQX193YmluZGdlbl90aHJvdwACA3diZxFfX3diaW5kZ2VuX21lbW9yeQAUA3diZx9fX3diaW5kZ2VuX2luaXRfZXh0ZXJucmVmX3RhYmxlAA4DvAG6AQQAAAYABAQE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QCADQQFxDQAgA0ECcUUNASABKAIAIgMgAGohACABIANrIgFB2NrAACgCAEYEQCACKAIEQQNxQQNHDQFB0NrAACAANgIAIAIgAigCBEF+cTYCBCABIABBAXI2AgQgAiAANgIADwsgASADEDkLAkACQAJAAkACQCACKAIEIgNBAnFFBEAgAkHc2sAAKAIARg0CIAJB2NrAACgCAEYNAyACIANBeHEiAhA5IAEgACACaiIAQQFyNgIEIAAgAWogADYCACABQdjawAAoAgBHDQFB0NrAACAANgIADwsgAiADQX5xNgIEIAEgAEEBcjYCBCAAIAFqIAA2AgALIABBgAJJDQIgASAAEEFBACEBQfDawABB8NrAACgCAEEBayIANgIAIAANBEG42MAAKAIAIgAEQANAIAFBAWohASAAKAIIIgANAAsLQfDawABB/x8gASABQf8fTRs2AgAPC0Hc2sAAIAE2AgBB1NrAAEHU2sAAKAIAIABqIgA2AgAgASAAQQFyNgIEQdjawAAoAgAgAUYEQEHQ2sAAQQA2AgBB2NrAAEEANgIACyAAQejawAAoAgAiA00NA0Hc2sAAKAIAIgJFDQNBACEAQdTawAAoAgAiBEEpSQ0CQbDYwAAhAQNAIAIgASgCACIFTwRAIAIgBSABKAIEakkNBAsgASgCCCEBDAALAAtB2NrAACABNgIAQdDawABB0NrAACgCACAAaiIANgIAIAEgAEEBcjYCBCAAIAFqIAA2AgAPCyAAQfgBcUHA2MAAaiECAn9ByNrAACgCACIDQQEgAEEDdnQiAHFFBEBByNrAACAAIANyNgIAIAIMAQsgAigCCAshACACIAE2AgggACABNgIMIAEgAjYCDCABIAA2AggPC0G42MAAKAIAIgEEQANAIABBAWohACABKAIIIgENAAsLQfDawABB/x8gACAAQf8fTRs2AgAgAyAETw0AQejawABBfzYCAAsL6QQBBX8CfwJAIAJBAk8EQCABKAIEIgRB//8BcUUEQCAEQRB0DAMLIARB/wdxIQUgBEGAgAJxIQMgBEGA+AFxIgZBgPgBRgRAIANBEHQhAyADQYCAgPwHciAFRQ0DGiADIAVBDXRyQYCAgP4HcgwDCyADQRB0IQMgBkUNASAGQQ10QYCAgPwAcSAFQQ10ckGAgIDAA2ogA3IMAgtBAUEBQfSEwAAQ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CCACQQxqIAEQkwEhAwsgAkEQaiQAIAMLhgIBA38jAEGAAWsiBCQAIAAoAgAhAAJ/AkAgASgCCCICQYCAgBBxRQRAIAJBgICAIHENASAAKAIAIAEQOAwCCyAAKAIAIQBBACECA0AgAiAEakH/AGogAEEPcSIDQTByIANB1wBqIANBCkkbOgAAIAJBAWshAiAAQQ9LIABBBHYhAA0ACyABQYO/wABBAiACIARqQYABakEAIAJrECEMAQsgACgCACEAQQAhAgNAIAIgBGpB/wBqIABBD3EiA0EwciADQTdqIANBCkkbOgAAIAJBAWshAiAAQQ9LIABBBHYhAA0ACyABQYO/wABBAiACIARqQYABakEAIAJrECELIARBgAFqJAALygECBH8BfiMAQSBrIgMkAAJAAkAgASABIAJqIgJLDQBBCCACIAAoAgAiAUEBdCIEIAIgBEsbIgIgAkEITRsiBK0iB0IgiFBFDQAgB6ciBUH/////B0sNACADIAEEfyADIAE2AhwgAyAAKAIENgIUQQEFQQALNgIYIANBCGpBASAFIANBFGoQXCADKAIIQQFHDQEgAygCECECIAMoAgwhBgsgBiACQaCOwAAQjAEACyADKAIMIQEgACAENgIAIAAgATYCBCADQSBqJAALiQIBAX8jAEEQayICJAAgACgCACEAAn8gAS0AC0EYcUUEQCABKAIAIAAgASgCBCgCEBEAAAwBCyACQQA2AgwgASACQQxqAn8gAEGAAU8EQCAAQYAQTwRAIABBgIAETwRAIAIgAEE/cUGAAXI6AA8gAiAAQRJ2QfABcjoADCACIABBBnZBP3FBgAFyOgAOIAIgAEEMdkE/cUGAAXI6AA1BBAwDCyACIABBP3FBgAFyOgAOIAIgAEEMdkHgAXI6AAwgAiAAQQZ2QT9xQYABcjoADUEDDAILIAIgAEE/cUGAAXI6AA0gAiAAQQZ2QcABcjoADEECDAELIAIgADoADEEBCxAmCyACQRBqJAALqgICA38BfiMAQUBqIgIkACABKAIAQYCAgIB4RgRAIAEoAgwhAyACQSRqIgRBADYCACACQoCAgIAQNwIcIAJBMGogAygCACIDQQhqKQIANwMAIAJBOGogA0EQaikCADcDACACIAMpAgA3AyggAkEcakH0mMAAIAJBKGoQKhogAkEYaiAEKAIAIgM2AgAg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AEEQayICJAAgAkEIaiABEHYgAiACKAIIIAIoAgwoAhgRAgAgAigCBCEBIAAgAigCADYCACAAIAE2AgQgAkEQaiQAC08BAn9BjdfAAC0AABogASgCBCECIAEoAgAhA0EIQQQQnwEiAUUEQEEEQQgQwQEACyABIAI2AgQgASADNgIAIABBrJ7AADYCBCAAIAE2AgALQQEBfyMAQSBrIgMkACADQQA2AhAgA0EBNgIEIANCBDcCCCADIAE2AhwgAyAANgIYIAMgA0EYajYCACADIAIQfgALPQECfyAAIAAoAgQiAyACazYCBCAAIAAoAgAgAiADS3IiBDYCAEEBIQMgBAR/IAMFIAAoAgggASACEJMBCws+AQF/IwBBEGsiAiQAIAJBCGogASABKAIAKAIEEQIAIAIoAgwhASAAIAIoAgg2AgAgACABNgIEIAJBEGokAAuuAwEDfyAAKAIAIQIgASgCCCIAQYCAgBBxRQRAIABBgICAIHFFBEAjAEEQayIAJABBAyEDIAItAAAiAiEEIAJBCk8EQCAAIAIgAkHkAG4iBEHkAGxrQf8BcUEBdCIDQYa/wABqLQAAOgAPIAAgA0GFv8AAai0AADoADkEBIQMLQQAgAiAEG0UEQCADQQFrIgMgAEENamogBEEBdEH+AXFBhr/AAGotAAA6AAALIAFBAUEAIABBDWogA2pBAyADaxAhIABBEGokAA8LIwBBgAFrIgQkACACLQAAIQBBACECA0AgAiAEakH/AGogAEEPcSIDQTByIANBN2ogA0EKSRs6AAAgAkEBayECIAAiA0EEdiEAIANBD0sNAAsgAUGDv8AAQQIgAiAEakGAAWpBACACaxAhIARBgAFqJAAPCyMAQYABayIEJAAgAi0AACEAQQAhAgNAIAIgBGpB/wBqIABBD3EiA0EwciADQdcAaiADQQpJGzoAACACQQFrIQIgACIDQQR2IQAgA0EPSw0ACyABQYO/wABBAiACIARqQYABakEAIAJrECEgBEGAAWokAAs4AAJAIAJBgIDEAEYNACAAIAIgASgCEBEAAEUNAEEBDwsgA0UEQEEADwsgACADIAQgASgCDBEBAAs8AQF/IwBBEGsiAiQAIAJB8KDAADYCDCACIAA2AgggAkEIakGkl8AAIAJBDGpBpJfAACABQbicwAAQPQALpQQBBn8jAEEQayIGJAAgBiAANgIMIAZBDGohByMAQRBrIgIkACABKAIAQfCjwABBDSABKAIEKAIMEQEAIQAgAkEAOgANIAIgADoADCACIAE2AggjAEEgayIAJABBASEDAkAgAkEIaiIELQAEDQAgBC0ABSEFIAQoAgAiAS0ACkGAAXFFBEAgASgCAEH3vsAAQfS+wAAgBUEBcSIFG0ECQQMgBRsgASgCBCgCDBEBAA0BIAEoAgBB/aPAAEEEIAEoAgQoAgwRAQANASABKAIAQcS+wABBAiABKAIEKAIMEQEADQEgByABQeyjwAAoAgARAAAhAwwBCyAFQQFxRQRAIAEoAgBB+b7AAEEDIAEoAgQoAgwRAQANAQsgAEEBOgAPIABB2L7AADYCFCAAIAEpAgA3AgAgACABKQIINwIYIAAgAEEPajYCCCAAIAA2AhAgAEH9o8AAQQQQKw0AIABBxL7AAEECECsNACAHIABBEGpB7KPAACgCABEAAA0AIAAoAhBB/L7AAEECIAAoAhQoAgwRAQAhAwsgBEEBOgAFIAQgAzoABCAAQSBqJAAgAi0ADSIBIAItAAwiA3IhAAJAIANBAXEgAUEBR3INACAEKAIAIgAtAApBgAFxRQRAIAAoAgBB/77AAEECIAAoAgQoAgwRAQAhAAwBCyAAKAIAQf6+wABBASAAKAIEKAIMEQEAIQALIAJBEGokACAAQQFxIAZBEGokAAs5AQF/IwBBEGsiAyQAIAMgATYCDCADIAA2AgggA0EIakGkvcAAIANBDGpBpL3AACACQZiUwAAQPQALLwEBfyMAQRBrIgIkACACQQhqIAAQdiACKAIIIAEgAigCDCgCEBEAACACQRBqJAAL5hMCF30LfxBYIiQgCSYBAn8gCCEqIwBBMGsiIiQAICIgJDYCBCAiQoCAgIDAADcCCCAiQQA2AhBB/NbAACErQfjWwAAoAgBFBEACf0GN18AALQAAGgJAQYCAwAAQESIIRQ0AIAhBBGstAABBA3FFDQAgCEEAQYCAwAD8CwALIAgEQEGI18AAQYCAEDYCAEH81sAAQQA2AgBBhNfAACgCACEkQYTXwAAgCDYCAEGA18AAKAIAISZBgNfAAEGAgBA2AgBB+NbAACgCAEH41sAAQQE2AgBFICZFckUEQCAkICZBAnRBBBCpAQtB/NbAAAwBC0EEQYCAwABBuILAABCMAQALISsLAkAgKygCAEUEQCArQX82AgAgKwJ/ICpFBEBBACEkQQAMAQsgK0EMaigCACEsICtBCGooAgAhCAJAIAoEQEEAISQDQCAiICJBBGogJEECdCAkQYCABCAqICRrIgogCkGAgARPGyIKaiImQQJ0EKoBNgIUIApBAnQiJCAsSw0FICJBFGogCCAkEGsgIiACOAIgICIgATgCHCAiIAA4AhggIiAFOAIsICIgBDgCKCAiIAM4AiQgCCEKIwBBEGsiJyQAICQEQCAiQQhqISggIkEkaiIjKgIAIRUgIyoCBCEYICMqAgghGSAiQRhqIiMqAgghHyAjKgIEISAgIyoCACEhA0AgJEEEICRBBEkiIxshKQJAIAotAAOzQwAAf0OVQ83MzD1dDQAgJ0EEaiAKICkQJQJ9AkAgI0UEQCAnKgIMIQ4gJyoCCCEMICcqAgQhC0MAAAAAIRZDAAAAACEXIAooAgwiJUH/AXEEQCAlQQFrQf8BcbNDRSKRPZRDAAAQwZIQLyEXCyAlQQh2IiNB/wFxBEAgI0EBa0H/AXGzQ0UikT2UQwAAEMGSEC8hFgsgHyAOkyEPICAgDJMhEiAhIAuTIREgJUEQdiIjQf8BcQ0BQwAAAAAMAgtBAyApQZSFwAAQaAALICNBAWtB/wFxs0NFIpE9lEMAABDBkhAvCyEaIBkgCigCCCIjQRh1skMAAP5ClSITIBggJUEYdbJDAAD+QpUiFJQgGSATlJMiEJQgI0EQdsCyQwAA/kKVIg0gGSANlCAVIBSUkyIOlJMgFSATlCAYIA2UkyIMQwAAgD8gDSANlJMgEyATlJMgFCAUlJNDAAAAABCNAZEiG5SSIgsgC5KSIRwgGCANIAyUIBQgEJSTIA4gG5SSIgsgC5KSIR0gFSAUIA6UIBMgDJSTIBAgG5SSIgsgC5KSIR4gDyATIBIgFJQgDyATlJMiEJQgDSAPIA2UIBEgFJSTIg6UkyARIBOUIBIgDZSTIgwgG5SSIgsgC5KSIQ8gEiANIAyUIBQgEJSTIA4gG5SSIgsgC5KSIQ0gESAUIA6UIBMgDJSTIBAgG5SSIgsgC5KSIQwCQCAaIBcgFhCNASAaEI0BQwrXIzyUIgtdRQRAIAsgFl5FBEAgCyAXXkUEQEMAAIA/IBqVIgsgD5QiDyALIByUIhKUQwAAgD8gF5UiCyAMlCIRIAsgHpQiDJRDAACAPyAWlSILIA2UIhAgCyAdlCILlJKSIg4gDpQgEiASlCAMIAyUIAsgC5SSkiIMIA8gD5QgESARlCAQIBCUkpJDAACAv5KUkyILQwAAAABdDQQgDowgC5GTIAyVIQwMAwsgHotDvTeGNV0NAyANIB0gDIwgHpUiDJSSIBaVIgsgC5QgDyAcIAyUkiAalSILIAuUkkMAAIA/XkUNAgwDCyAdi0O9N4Y1XQ0CIAwgHiANjCAdlSIMlJIgF5UiCyALlCAPIBwgDJSSIBqVIgsgC5SSQwAAgD9eDQIMAQsgHItDvTeGNV0NASAMIB4gD4wgHJUiDJSSIBeVIgsgC5QgDSAdIAyUkiAWlSILIAuUkkMAAIA/Xg0BCyAGIAxfRSAHIAxgRXINACAoKAIIIiMgKCgCAEYEQCAoQeSEwAAQVAsgKCgCBCAjQQJ0aiAMOAIAICggI0EBajYCCAsgCiApQQJ0aiEKICQgKWsiJA0ACwsgJ0EQaiQAICIoAhQiCkGEAU8EQCAKEFcLICYiJCAqSQ0ACwwBC0EAISQDQCAiICJBBGogJEECdCAkQYCABCAqICRrIgogCkGAgARPGyIKaiImQQJ0EKoBNgIUIApBAnQiJCAsSw0EICJBFGogCCAkEGsgIiACOAIgICIgATgCHCAiIAA4AhggIiAFOAIsICIgBDgCKCAiIAM4AiQgCCEKIwBBEGsiJyQAICQEQCAiQQhqISggIkEkaiIjKgIAIhggGJQgIyoCBCIZIBmUkiAjKgIIIg8gD5SSIRIgIkEYaiIjKgIIIR8gIyoCBCEgICMqAgAhIQNAICRBBCAkQQRJIiMbISkCQCAKLQADs0MAAH9DlUPNzMw9XQ0AICdBBGogCiApECUCfQJAICNFBEAgJyoCDCEOICcqAgghDCAnKgIEIQtDAAAAACERQwAAAAAhECAKKAIMIiVB/wFxBEAgJUEBa0H/AXGzQ0UikT2UQwAAEMGSEMgBIRALICVBCHYiI0H/AXEEQCAjQQFrQf8BcbNDRSKRPZRDAAAQwZIQyAEhEQsgHyAOkyENICAgDJMhFSAhIAuTIQ4gJUEQdiIjQf8BcQ0BQwAAAAAMAgtBAyApQZSFwAAQaAALICNBAWtB/wFxs0NFIpE9lEMAABDBkhDIAQshCyAYIA6UIBkgFZSSIA8gDZSSIgwgDJQgEiAOIA6UIBUgFZSSIA0gDZSSIBAgEZIgC5JDAABAQJUiCyALlJOUkyILQwAAAABdDQAgDIwgC5GTIBKVIgsgBmBFIAcgC2BFcg0AICgoAggiIyAoKAIARgRAIChB1ITAABBUCyAoKAIEICNBAnRqIAs4AgAgKCAjQQFqNgIICyAKIClBAnRqIQogJCApayIkDQALCyAnQRBqJAAgIigCFCIKQYQBTwRAIAoQVwsgJiIkICpJDQALCyAiKAIQISQgKygCAEEBags2AgAgJBANIQkQWCIIIAkmASAiIAg2AiQgIigCDCEmICIoAhAhIyMAQSBrIiUkACAlICJBJGooAgAiJCUBEAoiCjYCACAlICM2AgQCQCAKICNGBEAQlwEiKhCPASIKJQEgJiAjEAghCRBYIiYgCSYBICpBhAFPBEAgKhBXCyAKQYQBTwRAIAoQVwsgJCUBICYlAUEAEAkgJkGEAU8EQCAmEFcLICVBIGokAAwBCyAlQQA2AgggJSAlQQRqICVBCGoQewALICIoAggiCgRAICIoAgwgCkECdEEEEKkBCyAiKAIEIgpBhAFPBEAgChBXCyAiQTBqJAAgCAwCCxBuAAsgJCAsQbiJwAAQrAEACyIIJQEgCBBXC/oBAgJ/AX4jAEEQayICJAAgAkEBOwEMIAIgATYCCCACIAA2AgQjAEEQayIBJAAgAkEEaiIAKQIAIQQgASAANgIMIAEgBDcCBCMAQRBrIgAkACABQQRqIgEoAgAiAigCDCEDAkACQAJAAkAgAigCBA4CAAECCyADDQFBASECQQAhAwwCCyADDQAgAigCACICKAIEIQMgAigCACECDAELIABBgICAgHg2AgAgACABNgIMIABB2J7AACABKAIEIAEoAggiAC0ACCAALQAJEFEACyAAIAM2AgQgACACNgIAIABBvJ7AACABKAIEIAEoAggiAC0ACCAALQAJEFEACyUAIABFBEBBpJXAAEEyELYBAAsgACACIAMgBCAFIAEoAhARCAALKAAgASAAKAIALQAAQQJ0IgBB5K/AAGooAgAgAEHQr8AAaigCABCTAQsjACAARQRAQaSVwABBMhC2AQALIAAgAiADIAQgASgCEBEJAAsjACAARQRAQaSVwABBMhC2AQALIAAgAiADIAQgASgCEBEcAAsjACAARQRAQaSVwABBMhC2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OCAFQTBqIAQQfgALFAIBbwF/EA8hABBYIgEgACYBIAELEwAgAEEoNgIEIABBgIDAADYCAAsTACAAQdSBwAA2AgQgACABNgIACxMAIABBKDYCBCAAQYSGwAA2AgALIQAgAELUnP3HsryhmMUANwMIIABClLiFgpHLl7R0NwMACyAAIABC7Lz5lKyqlJNxNwMIIABC+enA7KyX2tdONwMACxAAIAAoAgQgACgCCCABEBwLEQAgACgCBCAAKAIIIAEQwwELGQACfyABQQlPBEAgASAAEDUMAQsgABARCwsiACAAQu26rbbNhdT14wA3AwggAEL4gpm9le7Gxbl/NwMACyEAIABCgLzfhaul+JsnNwMIIABCn/WWlNbu7cOhfzcDAAsRACAAKAIAIAAoAgQgARDDAQsTACAAQayewAA2AgQgACABNgIACxEAIAEgACgCACAAKAIEEJMBCxAAIAAoAgAgACgCBCABEBwLEAAgASAAKAIAIAAoAgQQJgsQACABKAIAIAEoAgQgABAqCw4AIAAlASABJQEgAhAGC18BAX8CQAJAIABBBGsoAgAiAkF4cSIDQQRBCCACQQNxIgIbIAFqTwRAIAJBACADIAFBJ2pLGw0BIAAQJAwCC0G1mcAAQS5B5JnAABB0AAtB9JnAAEEuQaSawAAQdAALCx0BAW8gACgCACUBIAEgAhAMIQMQWCIAIAMmASAAC2oBAX8jAEEwayIDJAAgAyABNgIEIAMgADYCACADQQI2AgwgA0Gk1MAANgIIIANCAjcCFCADIANBBGqtQoCAgICAA4Q3AyggAyADrUKAgICAgAOENwMgIAMgA0EgajYCECADQQhqIAIQfgALagEBfyMAQTBrIgMkACADIAE2AgQgAyAANgIAIANBAjYCDCADQcTUwAA2AgggA0ICNwIUIAMgA0EEaq1CgICAgIADhDcDKCADIAOtQoCAgICAA4Q3AyAgAyADQSBqNgIQIANBCGogAhB+AAtqAQF/IwBBMGsiAyQAIAMgATYCBCADIAA2AgAgA0ECNgIMIANB+NTAADYCCCADQgI3AhQgAyADQQRqrUKAgICAgAOENwMoIAMgA61CgICAgIADhDcDICADIANBIGo2AhAgA0EIaiACEH4ACwsAIAAoAgAgARA4Cw4AQbW8wABBKyAAEHQAC+8CAgV/A34gACkDACEJIwBBIGsiAyQAQRQhACAJIgdC6AdaBEAgByEIA0AgA0EMaiAAaiICQQNrIAggCEKQzgCAIgdCkM4Afn2nIgRB//8DcUHkAG4iBUEBdCIGQYa/wABqLQAAOgAAIAJBBGsgBkGFv8AAai0AADoAACACQQFrIAQgBUHkAGxrQf//A3FBAXQiBEGGv8AAai0AADoAACACQQJrIARBhb/AAGotAAA6AAAgAEEEayEAIAhC/6ziBFYgByEIDQALCyAHQglWBEAgACADakELaiAHpyICIAJB//8DcUHkAG4iAkHkAGxrQf//A3FBAXQiBEGGv8AAai0AADoAACAAQQJrIgAgA0EMamogBEGFv8AAai0AADoAACACrSEHCyAJUEUgB1BxRQRAIABBAWsiACADQQxqaiAHp0EBdEEecUGGv8AAai0AADoAAAsgAUEBQQAgA0EMaiAAakEUIABrECEgA0EgaiQACw0AIABBpIrAACABECoLDQAgAEGwjsAAIAEQKgsKACAAIAEgAhAqCw4AIAFBhJDAAEEFEJMBC8IDAgZ/AX4gACgCACEAIwBB0ABrIgIkACACQSBqIAAgACgCACgCBBECACACIAJByABqrUKAgICAwASENwMoQQEhAyACQQE2AjQgAkH4kcAANgIwIAJCATcCPCACIAIpAyA3AkggAiACQShqNgI4AkAgASgCACIGIAEoAgQiByACQTBqECoNACABLQAKQYABcUUEQEEAIQMMAQsgAkEYaiAAIAAoAgAoAgQRAgAgAkEQaiACKAIYIAIoAhwoAhgRAgAgAigCECIERQRAQQAhAwwBCyACQQhqIAQgAigCFCIFKAIYEQIAIAIoAgwhASACKAIIIQAgAiAFNgIsIAIgBDYCKCACQQE2AjQgAkGEksAANgIwIAJCATcCPCACIAJBKGqtQoCAgIDABIQiCDcDSCACIAJByABqNgI4IAYgByACQTBqELMBDQADQCAARQRAQQAhAwwCCyACIAAgASgCGBECACACKAIEIAIoAgAgAiABNgIsIAIgADYCKCACQQE2AjQgAkGEksAANgIwIAJCATcCPCACIAg3A0ggAiACQcgAajYCOCEAIQEgBiAHIAJBMGoQswFFDQALCyACQdAAaiQAIAMLCQAgACABEA4ACykAAn8gACgCAC0AAEUEQCABQejAwABBBRAmDAELIAFB7cDAAEEEECYLCw0AIABB9JjAACABECoLygECA38BfiAAKAIAIQIjAEGAAWsiBCQAAkAgASkCCCIFpyIAQYCAgARxRQ0AIABBgICAwABxBEAgAEGAgIAIciEADAELIAFBCjsBDCAAQYCAgMgAciEACyABIABBgICABHI2AghBACEAA0AgACAEakH/AGogAkEPcSIDQTByIANB1wBqIANBCkkbOgAAIABBAWshACACQQ9LIAJBBHYhAg0ACyABQYO/wABBAiAAIARqQYABakEAIABrECEgASAFNwIIIARBgAFqJAALDAAgACABKQIANwMACw0AIAFB8aDAAEECECYLDQAgAEGEpMAAIAEQKgsOACABQa+jwABBBRCTAQsOACABQbyvwABBEhCTAQsNACAAQdCxwAAgARAqCw4AIAFByLHAAEEFEJMBCxkAIAAgAUGc18AAKAIAIgBBOiAAGxECAAALDQAgAEHYvsAAIAEQKgsKACACIAAgARAmCwkAIABBADYCAAvTNwIdfwF+IwBB8ABrIgUkACAFQSBqIAAgACgCACgCBBECACAFIAUoAiQiAjYCLCAFIAUoAiAiBDYCKAJAAkACQAJAIAEiDi0ACkGAAXFFBEBBASERIAVBATYCXCAFQfiRwAA2AlggBUIBNwJkIAUgBUEoaq1CgICAgMAEhDcDOCAFIAVBOGo2AmAgASgCACABKAIEIAVB2ABqECoNBCAFQRhqIAUoAiggBSgCLCgCGBECACAFKAIYIgIEQCAFKAIcIQEgDigCAEGMksAAQQwgDigCBCgCDBEBAA0FIAVBEGogAiABKAIYEQIAIAVBMGqtQoCAgIDABIQhHyAFKAIQQQBHIQNBACERA0AgBUEIaiACIAEoAhgRAgAgBSgCDCAFKAIIIQggBSABNgI0IAUgAjYCMCAFQQA2AmggBUEBNgJcIAVBnJLAADYCWCAFQgQ3AmAgDigCACAOKAIEIAVB2ABqIgEQswENBCAFQQA6AEQgBSARNgI8IAUgAzYCOCAFIA42AkAgBUEBNgJcIAVB+JHAADYCWCAFQgE3AmQgBSAfNwNIIAUgBUHIAGo2AmAgBUE4akHckMAAIAEQKg0EIBFBAWohESEBIAgiAg0ACwsCQCAAKAIEIgJBA0cEQCAAQQRqIQAMAQsgACAAKAIAKAIYEQQAIgBFDQIgACgCACECC0EAIREgAkECRw0EIAVBADYCQCAFQoCAgIAQNwI4IAVByI7AADYCXCAFQqCAgIAONwJgIAUgBUE4ajYCWCAFQdgAaiECIwBBoAFrIgMkAAJ/AkACQAJAAkACQAJ/AkACQAJAAkAgACgCAEEBaw4CAAECCyACQaWbwABBEhCTAQwJCyAALQAUQQNHBEAgAyAAQQRqNgI4IANBOGohBCMAQSBrIgEkAAJAAkACQAJAAkACQAJAIABBFGoiCC0AAEEBaw4DBAEDAAsgCEECOgAAIAQoAgAgBEEANgIABEBBmdfAAC0AACEEQZnXwABBAToAACABIAQ6AAcgBEEBRw0CIAFCADcCFCABQoGAgIDAADcCDCABQYScwAA2AgggAUEHaiABQQhqEHkAC0HsnMAAEK8BAAsgAUEANgIYIAFBATYCDCABQeigwAA2AggMAwtBmdfAAEEAOgAAIAhBAzoAAAsgAUEgaiQADAILIAFBADYCGCABQQE2AgwgAUGooMAANgIICyABQgQ3AhAgAUEIakGgncAAEH4ACwsgACgCDCEBIAIoAghBgICABHEiCEUNASAAKAIIDAILIAJBkJvAAEEVEJMBDAcLIAEgACgCECIESQ0BIAEgBGshASAAKAIIIARBDGxqCyESIANBgICAgHg2AgwgA0GIm8AAKQMANwIQIAMgCEEXdiIAOgAYIAMgADoALCADQQA2AiggAyACNgIcIANByJvAADYCJCADIANBDGo2AiAgAUUNAiASIAFBDGxqIRggA0E8aiEUIANBhAFqIRUDQAJAIBIoAggiAEUEQCADQQA2AmQgAyADQRxqNgJgIANBAzYCOCADQQI2AoABIANB4ABqIANBOGogA0GAAWpBACADQQAgAxAaIAMoAmAiASABKAIMQQFqNgIMRQ0BDAcLIABBLGwhGSASKAIEIRpBACEWA0AgA0EANgI0IAMgA0EcajYCMAJAIBYgGmoiD0EgaigCAEGAgICAeEcEQCADQYABaiITIA9BJGooAgAiGyAPQShqKAIAIhwQI0ECIQACQCADKAKAAQ0AIAMoAoQBIQkgAygCiAEhASMAQSBrIgskAEEAIQojAEHgAGsiBiQAIAZBEGogCSABQfStwABBBhAUAkAgBigCEEUEQANAIAZB1ABqIAZBEGoQGSAGKAJUIgBBAUYNAAsC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AAAANQAAABUAAACkARAAHQAAACYAAAAUAAAAc3BhcmstaW50ZXJuYWwtcnMvc3JjL3JheWNhc3QucnM0AhAAIAAAADUAAAAXAAAANAIQACAAAACCAAAAFwAAADQCEAAgAAAAiAAAABwAAAA0AhAAIAAAAIoAAAAcAAAANAIQACAAAACPAAAAIAAAAC9ydXN0Yy8xNzA2N2U5YWM2ZDdlY2I3MGU1MGY5MmMxOTQ0ZTU0NTE4OGQyMzU5L2xpYnJhcnkvc3RkL3NyYy90aHJlYWQvbG9jYWwucnMApAIQAE8AAAAUAgAAJgAAAGRlc2NyaXB0aW9uKCkgaXMgZGVwcmVjYXRlZDsgdXNlIERpc3BsYXkaAAAADAAAAAQAAAACAAAAGgAAAAwAAAAEAAAAAwAAAAIAAAAsAxAABwAAAAUAAAAbAAAABwAAABwAAABpbnRlcm5hbCBlcnJvcjogZW50ZXJlZCB1bnJlYWNoYWJsZSBjb2RlOiBpbnZhbGlkIE9uY2Ugc3RhdGVoAxAAPAAAAC9ydXN0Yy8xNzA2N2U5YWM2ZDdlY2I3MGU1MGY5MmMxOTQ0ZTU0NTE4OGQyMzU5L2xpYnJhcnkvc3RkL3NyYy9zeXMvc3luYy9vbmNlL25vX3RocmVhZHMucnMArAMQAFsAAAA1AAAAEgAAAC9ydXN0Yy8xNzA2N2U5YWM2ZDdlY2I3MGU1MGY5MmMxOTQ0ZTU0NTE4OGQyMzU5L2xpYnJhcnkvYWxsb2Mvc3JjL3NsaWNlLnJzAAAYBBAASgAAAL4BAAAdAAAAc3BhcmstaW50ZXJuYWwtcnMvc3JjL2xpYi5yc3QEEAAcAAAAHAAAADMAAAB0BBAAHAAAACcAAAAtAAAAAQAAAAAAAAB0BBAAHAAAAD8AAAAoAAAAL3J1c3RjLzE3MDY3ZTlhYzZkN2VjYjcwZTUwZjkyYzE5NDRlNTQ1MTg4ZDIzNTkvbGlicmFyeS9hbGxvYy9zcmMvdmVjL21vZC5yc8gEEABMAAAAVgoAACQAAAAAAAAAEAAAAAQAAAAdAAAAHgAAAB8AAAAgICAgOiAAAAEAAAAAAAAAQAUQAAIAAAAgICAgICAgL3J1c3RjLzE3MDY3ZTlhYzZkN2VjYjcwZTUwZjkyYzE5NDRlNTQ1MTg4ZDIzNTkvbGlicmFyeS9jb3JlL3NyYy9wdHIvbW9kLnJzAABbBRAASwAAAAsCAAABAAAAL3J1c3RjLzE3MDY3ZTlhYzZkN2VjYjcwZTUwZjkyYzE5NDRlNTQ1MTg4ZDIzNTkvbGlicmFyeS9jb3JlL3NyYy9zbGljZS9pbmRleC5ycwC4BRAATwAAAEwDAAA0AAAAuAUQAE8AAABTAwAAMgAAAGFzc2VydGlvbiBmYWlsZWQ6IHNlbGYuaXNfY2hhcl9ib3VuZGFyeShuKS9ydXN0Yy8xNzA2N2U5YWM2ZDdlY2I3MGU1MGY5MmMxOTQ0ZTU0NTE4OGQyMzU5L2xpYnJhcnkvYWxsb2Mvc3JjL3N0cmluZy5ycwAAAFIGEABLAAAA7QcAAB0AAABSBhAASwAAAPUHAAAdAAAAUgYQAEsAAAB9BQAAGwAAAC9ydXN0Yy8xNzA2N2U5YWM2ZDdlY2I3MGU1MGY5MmMxOTQ0ZTU0NTE4OGQyMzU5L2xpYnJhcnkvYWxsb2Mvc3JjL3Jhd192ZWMvbW9kLnJz0AYQAFAAAAAuAgAAEQAAACAAAAAMAAAABAAAACEAAAAiAAAAIwAAACYAAAAMAAAABAAAACcAAAAoAAAAIwBB6I7AAAvJGQEAAAApAAAAYSBEaXNwbGF5IGltcGxlbWVudGF0aW9uIHJldHVybmVkIGFuIGVycm9yIHVuZXhwZWN0ZWRseS9ydXN0Yy8xNzA2N2U5YWM2ZDdlY2I3MGU1MGY5MmMxOTQ0ZTU0NTE4OGQyMzU5L2xpYnJhcnkvYWxsb2Mvc3JjL3N0cmluZy5ycwAApwcQAEsAAADRCgAADgAAAEVycm9yAAAApwcQAEsAAAB9BQAAGwAAAGFzc2VydGlvbiBmYWlsZWQ6IHNlbGYuaXNfY2hhcl9ib3VuZGFyeShuZXdfbGVuKacHEABLAAAAsgUAAA0AAAAAAAAAEAAAAAQAAAAdAAAAHgAAAB8AAABiYWNrdHJhY2UgY2FwdHVyZSBmYWlsZWQvaG9tZS9ydW5uZXIvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9hbnlob3ctMS4wLjk4L3NyYy9lcnJvci5yc4wIEABcAAAAZwQAAA4AAAABAAAAAAAAADogAAAACRAAAgAAAAoKQ2F1c2VkIGJ5OgoAAAAYCRAAAQAAAAoKc3RhY2sgYmFja3RyYWNlOlN0YWNrIGJhY2t0cmFjZToKADYJEAARAAAAUy9ydXN0Yy8xNzA2N2U5YWM2ZDdlY2I3MGU1MGY5MmMxOTQ0ZTU0NTE4OGQyMzU5L2xpYnJhcnkvY29yZS9zcmMvaXRlci90cmFpdHMvaXRlcmF0b3IucnMAAABRCRAAWAAAAMEHAAAJAAAAL2hvbWUvcnVubmVyLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvanMtc3lzLTAuMy43Ny9zcmMvbGliLnJzAAC8CRAAWgAAAPsYAAABAAAAL2hvbWUvcnVubmVyLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2Yvd2FzbS1iaW5kZ2VuLTAuMi4xMDAvc3JjL2NvbnZlcnQvc2xpY2VzLnJzKAoQAGwAAAAkAQAADgAAAGNsb3N1cmUgaW52b2tlZCByZWN1cnNpdmVseSBvciBhZnRlciBiZWluZyBkcm9wcGVkTGF6eSBpbnN0YW5jZSBoYXMgcHJldmlvdXNseSBiZWVuIHBvaXNvbmVk1goQACoAAAAvaG9tZS9ydW5uZXIvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9vbmNlX2NlbGwtMS4yMS4zL3NyYy9saWIucnMAAAAICxAAXQAAAAgDAAAZAAAAcmVlbnRyYW50IGluaXQAAHgLEAAOAAAACAsQAF0AAAB6AgAADQAAADogAAAAAAAABAAAAAQAAAA7AAAAL3J1c3RjLzE3MDY3ZTlhYzZkN2VjYjcwZTUwZjkyYzE5NDRlNTQ1MTg4ZDIzNTkvbGlicmFyeS9hbGxvYy9zcmMvc3RyaW5nLnJzALQLEABLAAAAfQUAABsAAAAvcnVzdGMvMTcwNjdlOWFjNmQ3ZWNiNzBlNTBmOTJjMTk0NGU1NDUxODhkMjM1OS9saWJyYXJ5L2FsbG9jL3NyYy9yYXdfdmVjL21vZC5ycxAMEABQAAAALgIAABEAAAA6AAAAPAAAAAwAAAAEAAAAPQAAAD4AAAA/AAAAL3J1c3QvZGVwcy9kbG1hbGxvYy0wLjIuNy9zcmMvZGxtYWxsb2MucnNhc3NlcnRpb24gZmFpbGVkOiBwc2l6ZSA+PSBzaXplICsgbWluX292ZXJoZWFkAIwMEAApAAAAqAQAAAkAAABhc3NlcnRpb24gZmFpbGVkOiBwc2l6ZSA8PSBzaXplICsgbWF4X292ZXJoZWFkAACMDBAAKQAAAK4EAAANAAAAbGlicmFyeS9zdGQvc3JjL2JhY2t0cmFjZS5yc29wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm1QDRAAKAAAACQAAAAAAAAAAgAAAHgNEAB1bnN1cHBvcnRlZCBiYWNrdHJhY2VkaXNhYmxlZCBiYWNrdHJhY2UANA0QABwAAACKAQAAHQAAAEAAAAAQAAAABAAAAEEAAABCAAAAAQAAAAAAAABjYW5ub3QgcmVjdXJzaXZlbHkgYWNxdWlyZSBtdXRleOQNEAAgAAAAbGlicmFyeS9zdGQvc3JjL3N5cy9zeW5jL211dGV4L25vX3RocmVhZHMucnMMDhAALAAAABMAAAAJAAAAbGlicmFyeS9zdGQvc3JjL3N5bmMvcG9pc29uL29uY2UucnMASA4QACMAAACbAAAAMgAAAGxpYnJhcnkvc3RkL3NyYy9zeW5jL2xhenlfbG9jay5ycwAAAHwOEAAhAAAA0QAAABMAAAA8dW5rbm93bj7vv71tZW1vcnkgYWxsb2NhdGlvbiBvZiAgYnl0ZXMgZmFpbGVkAAC8DhAAFQAAANEOEAANAAAAbGlicmFyeS9zdGQvc3JjL2FsbG9jLnJz8A4QABgAAABkAQAACQAAAAoAAAA8AAAADAAAAAQAAABDAAAAAAAAAAgAAAAEAAAARAAAAAAAAAAIAAAABAAAAEUAAABGAAAARwAAAEgAAABJAAAAEAAAAAQAAABKAAAASwAAAEwAAABNAAAAbGlicmFyeS9zdGQvc3JjLy4uLy4uL2JhY2t0cmFjZS9zcmMvc3ltYm9saXplL21vZC5yc3QPEAA0AAAAZwEAADAAAAABAAAAAAAAAKALEAACAAAAIC0gAAEAAAAAAAAAyA8QAAMAAAAgICAgICAgICAgICAgICAgICAgYXQgAABwDBAAAQAAAE9uY2UgaW5zdGFuY2UgaGFzIHByZXZpb3VzbHkgYmVlbiBwb2lzb25lZAAA/A8Q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",self.location.href));const A=$n();(typeof g=="string"||typeof Request=="function"&&g instanceof Request||typeof URL=="function"&&g instanceof URL)&&(g=fetch(g));const{instance:t,module:e}=await Xn(await g,A);return Ar(t,e)}var QA=Uint8Array,Rt=Uint16Array,tr=Int32Array,Ei=new QA([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]),ci=new QA([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]),er=new QA([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),li=function(g,A){for(var t=new Rt(31),e=0;e<31;++e)t[e]=A+=1<<g[e-1];for(var s=new tr(t[30]),e=1;e<30;++e)for(var i=t[e];i<t[e+1];++i)s[i]=i-t[e]<<5|e;return{b:t,r:s}},ui=li(Ei,2),di=ui.b,sr=ui.r;di[28]=258,sr[258]=28;for(var ir=li(ci,0),nr=ir.b,ls=new Rt(32768),V=0;V<32768;++V){var Bt=(V&43690)>>1|(V&21845)<<1;Bt=(Bt&52428)>>2|(Bt&13107)<<2,Bt=(Bt&61680)>>4|(Bt&3855)<<4,ls[V]=((Bt&65280)>>8|(Bt&255)<<8)>>1}for(var ae=function(g,A,t){for(var e=g.length,s=0,i=new Rt(A);s<e;++s)g[s]&&++i[g[s]-1];var n=new Rt(A);for(s=1;s<A;++s)n[s]=n[s-1]+i[s-1]<<1;var r;if(t){r=new Rt(1<<A);var a=15-A;for(s=0;s<e;++s)if(g[s])for(var o=s<<4|g[s],I=A-g[s],B=n[g[s]-1]++<<I,Q=B|(1<<I)-1;B<=Q;++B)r[ls[B]>>a]=o}else for(r=new Rt(e),s=0;s<e;++s)g[s]&&(r[s]=ls[n[g[s]-1]++]>>15-g[s]);return r},ge=new QA(288),V=0;V<144;++V)ge[V]=8;for(var V=144;V<256;++V)ge[V]=9;for(var V=256;V<280;++V)ge[V]=7;for(var V=280;V<288;++V)ge[V]=8;for(var fi=new QA(32),V=0;V<32;++V)fi[V]=5;var rr=ae(ge,9,1),ar=ae(fi,5,1),us=function(g){for(var A=g[0],t=1;t<g.length;++t)g[t]>A&&(A=g[t]);return A},JA=function(g,A,t){var e=A/8|0;return(g[e]|g[e+1]<<8)>>(A&7)&t},ds=function(g,A){var t=A/8|0;return(g[t]|g[t+1]<<8|g[t+2]<<16)>>(A&7)},yi=function(g){return(g+7)/8|0},Se=function(g,A,t){return(A==null||A<0)&&(A=0),(t==null||t>g.length)&&(t=g.length),new QA(g.subarray(A,t))},gr=["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"],GA=function(g,A,t){var e=new Error(A||gr[g]);if(e.code=g,Error.captureStackTrace&&Error.captureStackTrace(e,GA),!t)throw e;return e},or=function(g,A,t,e){var s=g.length,i=0;if(!s||A.f&&!A.l)return t||new QA(0);var n=!t,r=n||A.i!=2,a=A.i;n&&(t=new QA(s*3));var o=function(fA){var mA=t.length;if(fA>mA){var xA=new QA(Math.max(mA*2,fA));xA.set(t),t=xA}},I=A.f||0,B=A.p||0,Q=A.b||0,h=A.l,C=A.d,E=A.m,c=A.n,l=s*8;do{if(!h){I=JA(g,B,1);var u=JA(g,B+1,3);if(B+=3,u)if(u==1)h=rr,C=ar,E=9,c=5;else if(u==2){var m=JA(g,B,31)+257,x=JA(g,B+10,15)+4,w=m+JA(g,B+5,31)+1;B+=14;for(var p=new QA(w),N=new QA(19),M=0;M<x;++M)N[er[M]]=JA(g,B+M*3,7);B+=x*3;for(var S=us(N),F=(1<<S)-1,k=ae(N,S,1),M=0;M<w;){var G=k[JA(g,B,F)];B+=G&15;var d=G>>4;if(d<16)p[M++]=d;else{var R=0,b=0;for(d==16?(b=3+JA(g,B,3),B+=2,R=p[M-1]):d==17?(b=3+JA(g,B,7),B+=3):d==18&&(b=11+JA(g,B,127),B+=7);b--;)p[M++]=R}}var j=p.subarray(0,m),_=p.subarray(m);E=us(j),c=us(_),h=ae(j,E,1),C=ae(_,c,1)}else GA(1);else{var d=yi(B)+4,y=g[d-4]|g[d-3]<<8,D=d+y;if(D>s){a&&GA(0);break}r&&o(Q+y),t.set(g.subarray(d,D),Q),A.b=Q+=y,A.p=B=D*8,A.f=I;continue}if(B>l){a&&GA(0);break}}r&&o(Q+131072);for(var X=(1<<E)-1,P=(1<<c)-1,$=B;;$=B){var R=h[ds(g,B)&X],K=R>>4;if(B+=R&15,B>l){a&&GA(0);break}if(R||GA(2),K<256)t[Q++]=K;else if(K==256){$=B,h=null;break}else{var z=K-254;if(K>264){var M=K-257,L=Ei[M];z=JA(g,B,(1<<L)-1)+di[M],B+=L}var Z=C[ds(g,B)&P],U=Z>>4;Z||GA(3),B+=Z&15;var _=nr[U];if(U>3){var L=ci[U];_+=ds(g,B)&(1<<L)-1,B+=L}if(B>l){a&&GA(0);break}r&&o(Q+131072);var dA=Q+z;if(Q<_){var lA=i-_,RA=Math.min(_,dA);for(lA+Q<0&&GA(3);Q<RA;++Q)t[Q]=e[lA+Q]}for(;Q<dA;++Q)t[Q]=t[Q-_]}}A.l=h,A.p=$,A.b=Q,A.f=I,h&&(I=1,A.m=E,A.d=C,A.n=c)}while(!I);return Q!=t.length&&n?Se(t,0,Q):t.subarray(0,Q)},Ir=new QA(0),Br=function(g){(g[0]!=31||g[1]!=139||g[2]!=8)&&GA(6,"invalid gzip data");var A=g[3],t=10;A&4&&(t+=(g[10]|g[11]<<8)+2);for(var e=(A>>3&1)+(A>>4&1);e>0;e-=!g[t++]);return t+(A&2)},fs=function(){function g(A,t){typeof A=="function"&&(t=A,A={}),this.ondata=t;var e=A&&A.dictionary&&A.dictionary.subarray(-32768);this.s={i:0,b:e?e.length:0},this.o=new QA(32768),this.p=new QA(0),e&&this.o.set(e)}return g.prototype.e=function(A){if(this.ondata||GA(5),this.d&&GA(4),!this.p.length)this.p=A;else if(A.length){var t=new QA(this.p.length+A.length);t.set(this.p),t.set(A,this.p.length),this.p=t}},g.prototype.c=function(A){this.s.i=+(this.d=A||!1);var t=this.s.b,e=or(this.p,this.s,this.o);this.ondata(Se(e,t,this.s.b),this.d),this.o=Se(e,this.s.b-32768),this.s.b=this.o.length,this.p=Se(this.p,this.s.p/8|0),this.s.p&=7},g.prototype.push=function(A,t){this.e(A),this.c(t)},g}(),wi=function(){function g(A,t){this.v=1,this.r=0,fs.call(this,A,t)}return g.prototype.push=function(A,t){if(fs.prototype.e.call(this,A),this.r+=A.length,this.v){var e=this.p.subarray(this.v-1),s=e.length>3?Br(e):4;if(s>e.length){if(!t)return}else this.v>1&&this.onmember&&this.onmember(this.r-e.length);this.p=e.subarray(s),this.v=0}fs.prototype.c.call(this,t),this.s.f&&!this.s.l&&!t&&(this.v=yi(this.s.p)+9,this.s={i:0},this.o=new QA(0),this.push(new QA(0),t))},g}(),Qr=typeof TextDecoder<"u"&&new TextDecoder,hr=0;try{Qr.decode(Ir,{stream:!0}),hr=1}catch{}/**\n * @license\n * Copyright 2010-2024 Three.js Authors\n * SPDX-License-Identifier: MIT\n */const pi="172",ys=0,Cr=1,Di=1,mi=100,xi=204,Mi=205,Si=3,Er=0,Fi=300,Ni=1e3,oe=1001,ki=1002,Qt=1003,Ri=1006,cr=1008,Fe=1009,pt=1014,lr=1015,Ne=1023,ur=1031,Gt=1033,Gi="",TA="srgb",Ui="srgb-linear",bi="linear",ws="srgb",Ut=7680,Li=519,Yi=35044,dr="300 es",Ie=2e3,Ji=2001;class Be{addEventListener(A,t){this._listeners===void 0&&(this._listeners={});const e=this._listeners;e[A]===void 0&&(e[A]=[]),e[A].indexOf(t)===-1&&e[A].push(t)}hasEventListener(A,t){if(this._listeners===void 0)return!1;const e=this._listeners;return e[A]!==void 0&&e[A].indexOf(t)!==-1}removeEventListener(A,t){if(this._listeners===void 0)return;const s=this._listeners[A];if(s!==void 0){const i=s.indexOf(t);i!==-1&&s.splice(i,1)}}dispatchEvent(A){if(this._listeners===void 0)return;const e=this._listeners[A.type];if(e!==void 0){A.target=this;const s=e.slice(0);for(let i=0,n=s.length;i<n;i++)s[i].call(this,A);A.target=null}}}const hA=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"];function Qe(){const g=Math.random()*4294967295|0,A=Math.random()*4294967295|0,t=Math.random()*4294967295|0,e=Math.random()*4294967295|0;return(hA[g&255]+hA[g>>8&255]+hA[g>>16&255]+hA[g>>24&255]+"-"+hA[A&255]+hA[A>>8&255]+"-"+hA[A>>16&15|64]+hA[A>>24&255]+"-"+hA[t&63|128]+hA[t>>8&255]+"-"+hA[t>>16&255]+hA[t>>24&255]+hA[e&255]+hA[e>>8&255]+hA[e>>16&255]+hA[e>>24&255]).toLowerCase()}function H(g,A,t){return Math.max(A,Math.min(t,g))}function fr(g,A){return(g%A+A)%A}function ps(g,A,t){return(1-t)*g+t*A}function he(g,A){switch(A.constructor){case Float32Array:return g;case Uint32Array:return g/4294967295;case Uint16Array:return g/65535;case Uint8Array:return g/255;case Int32Array:return Math.max(g/2147483647,-1);case Int16Array:return Math.max(g/32767,-1);case Int8Array:return Math.max(g/127,-1);default:throw new Error("Invalid component type.")}}function yA(g,A){switch(A.constructor){case Float32Array:return g;case Uint32Array:return Math.round(g*4294967295);case Uint16Array:return Math.round(g*65535);case Uint8Array:return Math.round(g*255);case Int32Array:return Math.round(g*2147483647);case Int16Array:return Math.round(g*32767);case Int8Array:return Math.round(g*127);default:throw new Error("Invalid component type.")}}class wA{constructor(A=0,t=0){wA.prototype.isVector2=!0,this.x=A,this.y=t}get width(){return this.x}set width(A){this.x=A}get height(){return this.y}set height(A){this.y=A}set(A,t){return this.x=A,this.y=t,this}setScalar(A){return this.x=A,this.y=A,this}setX(A){return this.x=A,this}setY(A){return this.y=A,this}setComponent(A,t){switch(A){case 0:this.x=t;break;case 1:this.y=t;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;default:throw new Error("index is out of range: "+A)}}clone(){return new this.constructor(this.x,this.y)}copy(A){return this.x=A.x,this.y=A.y,this}add(A){return this.x+=A.x,this.y+=A.y,this}addScalar(A){return this.x+=A,this.y+=A,this}addVectors(A,t){return this.x=A.x+t.x,this.y=A.y+t.y,this}addScaledVector(A,t){return this.x+=A.x*t,this.y+=A.y*t,this}sub(A){return this.x-=A.x,this.y-=A.y,this}subScalar(A){return this.x-=A,this.y-=A,this}subVectors(A,t){return this.x=A.x-t.x,this.y=A.y-t.y,this}multiply(A){return this.x*=A.x,this.y*=A.y,this}multiplyScalar(A){return this.x*=A,this.y*=A,this}divide(A){return this.x/=A.x,this.y/=A.y,this}divideScalar(A){return this.multiplyScalar(1/A)}applyMatrix3(A){const t=this.x,e=this.y,s=A.elements;return this.x=s[0]*t+s[3]*e+s[6],this.y=s[1]*t+s[4]*e+s[7],this}min(A){return this.x=Math.min(this.x,A.x),this.y=Math.min(this.y,A.y),this}max(A){return this.x=Math.max(this.x,A.x),this.y=Math.max(this.y,A.y),this}clamp(A,t){return this.x=H(this.x,A.x,t.x),this.y=H(this.y,A.y,t.y),this}clampScalar(A,t){return this.x=H(this.x,A,t),this.y=H(this.y,A,t),this}clampLength(A,t){const e=this.length();return this.divideScalar(e||1).multiplyScalar(H(e,A,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(A){return this.x*A.x+this.y*A.y}cross(A){return this.x*A.y-this.y*A.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(A){const t=Math.sqrt(this.lengthSq()*A.lengthSq());if(t===0)return Math.PI/2;const e=this.dot(A)/t;return Math.acos(H(e,-1,1))}distanceTo(A){return Math.sqrt(this.distanceToSquared(A))}distanceToSquared(A){const t=this.x-A.x,e=this.y-A.y;return t*t+e*e}manhattanDistanceTo(A){return Math.abs(this.x-A.x)+Math.abs(this.y-A.y)}setLength(A){return this.normalize().multiplyScalar(A)}lerp(A,t){return this.x+=(A.x-this.x)*t,this.y+=(A.y-this.y)*t,this}lerpVectors(A,t,e){return this.x=A.x+(t.x-A.x)*e,this.y=A.y+(t.y-A.y)*e,this}equals(A){return A.x===this.x&&A.y===this.y}fromArray(A,t=0){return this.x=A[t],this.y=A[t+1],this}toArray(A=[],t=0){return A[t]=this.x,A[t+1]=this.y,A}fromBufferAttribute(A,t){return this.x=A.getX(t),this.y=A.getY(t),this}rotateAround(A,t){const e=Math.cos(t),s=Math.sin(t),i=this.x-A.x,n=this.y-A.y;return this.x=i*e-n*s+A.x,this.y=i*s+n*e+A.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}class PA{constructor(A,t,e,s,i,n,r,a,o){PA.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],A!==void 0&&this.set(A,t,e,s,i,n,r,a,o)}set(A,t,e,s,i,n,r,a,o){const I=this.elements;return I[0]=A,I[1]=s,I[2]=r,I[3]=t,I[4]=i,I[5]=a,I[6]=e,I[7]=n,I[8]=o,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(A){const t=this.elements,e=A.elements;return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],this}extractBasis(A,t,e){return A.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),e.setFromMatrix3Column(this,2),this}setFromMatrix4(A){const t=A.elements;return this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this}multiply(A){return this.multiplyMatrices(this,A)}premultiply(A){return this.multiplyMatrices(A,this)}multiplyMatrices(A,t){const e=A.elements,s=t.elements,i=this.elements,n=e[0],r=e[3],a=e[6],o=e[1],I=e[4],B=e[7],Q=e[2],h=e[5],C=e[8],E=s[0],c=s[3],l=s[6],u=s[1],d=s[4],y=s[7],D=s[2],m=s[5],x=s[8];return i[0]=n*E+r*u+a*D,i[3]=n*c+r*d+a*m,i[6]=n*l+r*y+a*x,i[1]=o*E+I*u+B*D,i[4]=o*c+I*d+B*m,i[7]=o*l+I*y+B*x,i[2]=Q*E+h*u+C*D,i[5]=Q*c+h*d+C*m,i[8]=Q*l+h*y+C*x,this}multiplyScalar(A){const t=this.elements;return t[0]*=A,t[3]*=A,t[6]*=A,t[1]*=A,t[4]*=A,t[7]*=A,t[2]*=A,t[5]*=A,t[8]*=A,this}determinant(){const A=this.elements,t=A[0],e=A[1],s=A[2],i=A[3],n=A[4],r=A[5],a=A[6],o=A[7],I=A[8];return t*n*I-t*r*o-e*i*I+e*r*a+s*i*o-s*n*a}invert(){const A=this.elements,t=A[0],e=A[1],s=A[2],i=A[3],n=A[4],r=A[5],a=A[6],o=A[7],I=A[8],B=I*n-r*o,Q=r*a-I*i,h=o*i-n*a,C=t*B+e*Q+s*h;if(C===0)return this.set(0,0,0,0,0,0,0,0,0);const E=1/C;return A[0]=B*E,A[1]=(s*o-I*e)*E,A[2]=(r*e-s*n)*E,A[3]=Q*E,A[4]=(I*t-s*a)*E,A[5]=(s*i-r*t)*E,A[6]=h*E,A[7]=(e*a-o*t)*E,A[8]=(n*t-e*i)*E,this}transpose(){let A;const t=this.elements;return A=t[1],t[1]=t[3],t[3]=A,A=t[2],t[2]=t[6],t[6]=A,A=t[5],t[5]=t[7],t[7]=A,this}getNormalMatrix(A){return this.setFromMatrix4(A).invert().transpose()}transposeIntoArray(A){const t=this.elements;return A[0]=t[0],A[1]=t[3],A[2]=t[6],A[3]=t[1],A[4]=t[4],A[5]=t[7],A[6]=t[2],A[7]=t[5],A[8]=t[8],this}setUvTransform(A,t,e,s,i,n,r){const a=Math.cos(i),o=Math.sin(i);return this.set(e*a,e*o,-e*(a*n+o*r)+n+A,-s*o,s*a,-s*(-o*n+a*r)+r+t,0,0,1),this}scale(A,t){return this.premultiply(Ds.makeScale(A,t)),this}rotate(A){return this.premultiply(Ds.makeRotation(-A)),this}translate(A,t){return this.premultiply(Ds.makeTranslation(A,t)),this}makeTranslation(A,t){return A.isVector2?this.set(1,0,A.x,0,1,A.y,0,0,1):this.set(1,0,A,0,1,t,0,0,1),this}makeRotation(A){const t=Math.cos(A),e=Math.sin(A);return this.set(t,-e,0,e,t,0,0,0,1),this}makeScale(A,t){return this.set(A,0,0,0,t,0,0,0,1),this}equals(A){const t=this.elements,e=A.elements;for(let s=0;s<9;s++)if(t[s]!==e[s])return!1;return!0}fromArray(A,t=0){for(let e=0;e<9;e++)this.elements[e]=A[e+t];return this}toArray(A=[],t=0){const e=this.elements;return A[t]=e[0],A[t+1]=e[1],A[t+2]=e[2],A[t+3]=e[3],A[t+4]=e[4],A[t+5]=e[5],A[t+6]=e[6],A[t+7]=e[7],A[t+8]=e[8],A}clone(){return new this.constructor().fromArray(this.elements)}}const Ds=new PA;function yr(g){for(let A=g.length-1;A>=0;--A)if(g[A]>=65535)return!0;return!1}function Ti(g){return document.createElementNS("http://www.w3.org/1999/xhtml",g)}const Hi=new PA().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),vi=new PA().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function wr(){const g={enabled:!0,workingColorSpace:Ui,spaces:{},convert:function(s,i,n){return this.enabled===!1||i===n||!i||!n||(this.spaces[i].transfer===ws&&(s.r=$A(s.r),s.g=$A(s.g),s.b=$A(s.b)),this.spaces[i].primaries!==this.spaces[n].primaries&&(s.applyMatrix3(this.spaces[i].toXYZ),s.applyMatrix3(this.spaces[n].fromXYZ)),this.spaces[n].transfer===ws&&(s.r=bt(s.r),s.g=bt(s.g),s.b=bt(s.b))),s},fromWorkingColorSpace:function(s,i){return this.convert(s,this.workingColorSpace,i)},toWorkingColorSpace:function(s,i){return this.convert(s,i,this.workingColorSpace)},getPrimaries:function(s){return this.spaces[s].primaries},getTransfer:function(s){return s===Gi?bi:this.spaces[s].transfer},getLuminanceCoefficients:function(s,i=this.workingColorSpace){return s.fromArray(this.spaces[i].luminanceCoefficients)},define:function(s){Object.assign(this.spaces,s)},_getMatrix:function(s,i,n){return s.copy(this.spaces[i].toXYZ).multiply(this.spaces[n].fromXYZ)},_getDrawingBufferColorSpace:function(s){return this.spaces[s].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(s=this.workingColorSpace){return this.spaces[s].workingColorSpaceConfig.unpackColorSpace}},A=[.64,.33,.3,.6,.15,.06],t=[.2126,.7152,.0722],e=[.3127,.329];return g.define({[Ui]:{primaries:A,whitePoint:e,transfer:bi,toXYZ:Hi,fromXYZ:vi,luminanceCoefficients:t,workingColorSpaceConfig:{unpackColorSpace:TA},outputColorSpaceConfig:{drawingBufferColorSpace:TA}},[TA]:{primaries:A,whitePoint:e,transfer:ws,toXYZ:Hi,fromXYZ:vi,luminanceCoefficients:t,outputColorSpaceConfig:{drawingBufferColorSpace:TA}}}),g}const HA=wr();function $A(g){return g<.04045?g*.0773993808:Math.pow(g*.9478672986+.0521327014,2.4)}function bt(g){return g<.0031308?g*12.92:1.055*Math.pow(g,.41666)-.055}let Lt;class pr{static getDataURL(A){if(/^data:/i.test(A.src)||typeof HTMLCanvasElement>"u")return A.src;let t;if(A instanceof HTMLCanvasElement)t=A;else{Lt===void 0&&(Lt=Ti("canvas")),Lt.width=A.width,Lt.height=A.height;const e=Lt.getContext("2d");A instanceof ImageData?e.putImageData(A,0,0):e.drawImage(A,0,0,A.width,A.height),t=Lt}return t.width>2048||t.height>2048?(console.warn("THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons",A),t.toDataURL("image/jpeg",.6)):t.toDataURL("image/png")}static sRGBToLinear(A){if(typeof HTMLImageElement<"u"&&A instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&A instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&A instanceof ImageBitmap){const t=Ti("canvas");t.width=A.width,t.height=A.height;const e=t.getContext("2d");e.drawImage(A,0,0,A.width,A.height);const s=e.getImageData(0,0,A.width,A.height),i=s.data;for(let n=0;n<i.length;n++)i[n]=$A(i[n]/255)*255;return e.putImageData(s,0,0),t}else if(A.data){const t=A.data.slice(0);for(let e=0;e<t.length;e++)t instanceof Uint8Array||t instanceof Uint8ClampedArray?t[e]=Math.floor($A(t[e]/255)*255):t[e]=$A(t[e]);return{data:t,width:A.width,height:A.height}}else return console.warn("THREE.ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied."),A}}let Dr=0;class zi{constructor(A=null){this.isSource=!0,Object.defineProperty(this,"id",{value:Dr++}),this.uuid=Qe(),this.data=A,this.dataReady=!0,this.version=0}set needsUpdate(A){A===!0&&this.version++}toJSON(A){const t=A===void 0||typeof A=="string";if(!t&&A.images[this.uuid]!==void 0)return A.images[this.uuid];const e={uuid:this.uuid,url:""},s=this.data;if(s!==null){let i;if(Array.isArray(s)){i=[];for(let n=0,r=s.length;n<r;n++)s[n].isDataTexture?i.push(ms(s[n].image)):i.push(ms(s[n]))}else i=ms(s);e.url=i}return t||(A.images[this.uuid]=e),e}}function ms(g){return typeof HTMLImageElement<"u"&&g instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&g instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&g instanceof ImageBitmap?pr.getDataURL(g):g.data?{data:Array.from(g.data),width:g.width,height:g.height,type:g.data.constructor.name}:(console.warn("THREE.Texture: Unable to serialize Texture."),{})}let mr=0;class VA extends Be{constructor(A=VA.DEFAULT_IMAGE,t=VA.DEFAULT_MAPPING,e=oe,s=oe,i=Ri,n=cr,r=Ne,a=Fe,o=VA.DEFAULT_ANISOTROPY,I=Gi){super(),this.isTexture=!0,Object.defineProperty(this,"id",{value:mr++}),this.uuid=Qe(),this.name="",this.source=new zi(A),this.mipmaps=[],this.mapping=t,this.channel=0,this.wrapS=e,this.wrapT=s,this.magFilter=i,this.minFilter=n,this.anisotropy=o,this.format=r,this.internalFormat=null,this.type=a,this.offset=new wA(0,0),this.repeat=new wA(1,1),this.center=new wA(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new PA,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.colorSpace=I,this.userData={},this.version=0,this.onUpdate=null,this.renderTarget=null,this.isRenderTargetTexture=!1,this.pmremVersion=0}get image(){return this.source.data}set image(A=null){this.source.data=A}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}clone(){return new this.constructor().copy(this)}copy(A){return this.name=A.name,this.source=A.source,this.mipmaps=A.mipmaps.slice(0),this.mapping=A.mapping,this.channel=A.channel,this.wrapS=A.wrapS,this.wrapT=A.wrapT,this.magFilter=A.magFilter,this.minFilter=A.minFilter,this.anisotropy=A.anisotropy,this.format=A.format,this.internalFormat=A.internalFormat,this.type=A.type,this.offset.copy(A.offset),this.repeat.copy(A.repeat),this.center.copy(A.center),this.rotation=A.rotation,this.matrixAutoUpdate=A.matrixAutoUpdate,this.matrix.copy(A.matrix),this.generateMipmaps=A.generateMipmaps,this.premultiplyAlpha=A.premultiplyAlpha,this.flipY=A.flipY,this.unpackAlignment=A.unpackAlignment,this.colorSpace=A.colorSpace,this.renderTarget=A.renderTarget,this.isRenderTargetTexture=A.isRenderTargetTexture,this.userData=JSON.parse(JSON.stringify(A.userData)),this.needsUpdate=!0,this}toJSON(A){const t=A===void 0||typeof A=="string";if(!t&&A.textures[this.uuid]!==void 0)return A.textures[this.uuid];const e={metadata:{version:4.6,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,image:this.source.toJSON(A).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(e.userData=this.userData),t||(A.textures[this.uuid]=e),e}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(A){if(this.mapping!==Fi)return A;if(A.applyMatrix3(this.matrix),A.x<0||A.x>1)switch(this.wrapS){case Ni:A.x=A.x-Math.floor(A.x);break;case oe:A.x=A.x<0?0:1;break;case ki:Math.abs(Math.floor(A.x)%2)===1?A.x=Math.ceil(A.x)-A.x:A.x=A.x-Math.floor(A.x);break}if(A.y<0||A.y>1)switch(this.wrapT){case Ni:A.y=A.y-Math.floor(A.y);break;case oe:A.y=A.y<0?0:1;break;case ki:Math.abs(Math.floor(A.y)%2)===1?A.y=Math.ceil(A.y)-A.y:A.y=A.y-Math.floor(A.y);break}return this.flipY&&(A.y=1-A.y),A}set needsUpdate(A){A===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(A){A===!0&&this.pmremVersion++}}VA.DEFAULT_IMAGE=null,VA.DEFAULT_MAPPING=Fi,VA.DEFAULT_ANISOTROPY=1;class uA{constructor(A=0,t=0,e=0,s=1){uA.prototype.isVector4=!0,this.x=A,this.y=t,this.z=e,this.w=s}get width(){return this.z}set width(A){this.z=A}get height(){return this.w}set height(A){this.w=A}set(A,t,e,s){return this.x=A,this.y=t,this.z=e,this.w=s,this}setScalar(A){return this.x=A,this.y=A,this.z=A,this.w=A,this}setX(A){return this.x=A,this}setY(A){return this.y=A,this}setZ(A){return this.z=A,this}setW(A){return this.w=A,this}setComponent(A,t){switch(A){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;case 3:this.w=t;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;case 3:return this.w;default:throw new Error("index is out of range: "+A)}}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!==void 0?A.w:1,this}add(A){return this.x+=A.x,this.y+=A.y,this.z+=A.z,this.w+=A.w,this}addScalar(A){return this.x+=A,this.y+=A,this.z+=A,this.w+=A,this}addVectors(A,t){return this.x=A.x+t.x,this.y=A.y+t.y,this.z=A.z+t.z,this.w=A.w+t.w,this}addScaledVector(A,t){return this.x+=A.x*t,this.y+=A.y*t,this.z+=A.z*t,this.w+=A.w*t,this}sub(A){return this.x-=A.x,this.y-=A.y,this.z-=A.z,this.w-=A.w,this}subScalar(A){return this.x-=A,this.y-=A,this.z-=A,this.w-=A,this}subVectors(A,t){return this.x=A.x-t.x,this.y=A.y-t.y,this.z=A.z-t.z,this.w=A.w-t.w,this}multiply(A){return this.x*=A.x,this.y*=A.y,this.z*=A.z,this.w*=A.w,this}multiplyScalar(A){return this.x*=A,this.y*=A,this.z*=A,this.w*=A,this}applyMatrix4(A){const t=this.x,e=this.y,s=this.z,i=this.w,n=A.elements;return this.x=n[0]*t+n[4]*e+n[8]*s+n[12]*i,this.y=n[1]*t+n[5]*e+n[9]*s+n[13]*i,this.z=n[2]*t+n[6]*e+n[10]*s+n[14]*i,this.w=n[3]*t+n[7]*e+n[11]*s+n[15]*i,this}divide(A){return this.x/=A.x,this.y/=A.y,this.z/=A.z,this.w/=A.w,this}divideScalar(A){return this.multiplyScalar(1/A)}setAxisAngleFromQuaternion(A){this.w=2*Math.acos(A.w);const t=Math.sqrt(1-A.w*A.w);return t<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=A.x/t,this.y=A.y/t,this.z=A.z/t),this}setAxisAngleFromRotationMatrix(A){let t,e,s,i;const a=A.elements,o=a[0],I=a[4],B=a[8],Q=a[1],h=a[5],C=a[9],E=a[2],c=a[6],l=a[10];if(Math.abs(I-Q)<.01&&Math.abs(B-E)<.01&&Math.abs(C-c)<.01){if(Math.abs(I+Q)<.1&&Math.abs(B+E)<.1&&Math.abs(C+c)<.1&&Math.abs(o+h+l-3)<.1)return this.set(1,0,0,0),this;t=Math.PI;const d=(o+1)/2,y=(h+1)/2,D=(l+1)/2,m=(I+Q)/4,x=(B+E)/4,w=(C+c)/4;return d>y&&d>D?d<.01?(e=0,s=.707106781,i=.707106781):(e=Math.sqrt(d),s=m/e,i=x/e):y>D?y<.01?(e=.707106781,s=0,i=.707106781):(s=Math.sqrt(y),e=m/s,i=w/s):D<.01?(e=.707106781,s=.707106781,i=0):(i=Math.sqrt(D),e=x/i,s=w/i),this.set(e,s,i,t),this}let u=Math.sqrt((c-C)*(c-C)+(B-E)*(B-E)+(Q-I)*(Q-I));return Math.abs(u)<.001&&(u=1),this.x=(c-C)/u,this.y=(B-E)/u,this.z=(Q-I)/u,this.w=Math.acos((o+h+l-1)/2),this}setFromMatrixPosition(A){const t=A.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this.w=t[15],this}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.w=Math.min(this.w,A.w),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.w=Math.max(this.w,A.w),this}clamp(A,t){return this.x=H(this.x,A.x,t.x),this.y=H(this.y,A.y,t.y),this.z=H(this.z,A.z,t.z),this.w=H(this.w,A.w,t.w),this}clampScalar(A,t){return this.x=H(this.x,A,t),this.y=H(this.y,A,t),this.z=H(this.z,A,t),this.w=H(this.w,A,t),this}clampLength(A,t){const e=this.length();return this.divideScalar(e||1).multiplyScalar(H(e,A,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this.w=Math.trunc(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,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)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(A){return this.normalize().multiplyScalar(A)}lerp(A,t){return this.x+=(A.x-this.x)*t,this.y+=(A.y-this.y)*t,this.z+=(A.z-this.z)*t,this.w+=(A.w-this.w)*t,this}lerpVectors(A,t,e){return this.x=A.x+(t.x-A.x)*e,this.y=A.y+(t.y-A.y)*e,this.z=A.z+(t.z-A.z)*e,this.w=A.w+(t.w-A.w)*e,this}equals(A){return A.x===this.x&&A.y===this.y&&A.z===this.z&&A.w===this.w}fromArray(A,t=0){return this.x=A[t],this.y=A[t+1],this.z=A[t+2],this.w=A[t+3],this}toArray(A=[],t=0){return A[t]=this.x,A[t+1]=this.y,A[t+2]=this.z,A[t+3]=this.w,A}fromBufferAttribute(A,t){return this.x=A.getX(t),this.y=A.getY(t),this.z=A.getZ(t),this.w=A.getW(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}}class xr extends Be{constructor(A=1,t=1,e={}){super(),this.isRenderTarget=!0,this.width=A,this.height=t,this.depth=1,this.scissor=new uA(0,0,A,t),this.scissorTest=!1,this.viewport=new uA(0,0,A,t);const s={width:A,height:t,depth:1};e=Object.assign({generateMipmaps:!1,internalFormat:null,minFilter:Ri,depthBuffer:!0,stencilBuffer:!1,resolveDepthBuffer:!0,resolveStencilBuffer:!0,depthTexture:null,samples:0,count:1},e);const i=new VA(s,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.format,e.type,e.anisotropy,e.colorSpace);i.flipY=!1,i.generateMipmaps=e.generateMipmaps,i.internalFormat=e.internalFormat,this.textures=[];const n=e.count;for(let r=0;r<n;r++)this.textures[r]=i.clone(),this.textures[r].isRenderTargetTexture=!0,this.textures[r].renderTarget=this;this.depthBuffer=e.depthBuffer,this.stencilBuffer=e.stencilBuffer,this.resolveDepthBuffer=e.resolveDepthBuffer,this.resolveStencilBuffer=e.resolveStencilBuffer,this._depthTexture=null,this.depthTexture=e.depthTexture,this.samples=e.samples}get texture(){return this.textures[0]}set texture(A){this.textures[0]=A}set depthTexture(A){this._depthTexture!==null&&(this._depthTexture.renderTarget=null),A!==null&&(A.renderTarget=this),this._depthTexture=A}get depthTexture(){return this._depthTexture}setSize(A,t,e=1){if(this.width!==A||this.height!==t||this.depth!==e){this.width=A,this.height=t,this.depth=e;for(let s=0,i=this.textures.length;s<i;s++)this.textures[s].image.width=A,this.textures[s].image.height=t,this.textures[s].image.depth=e;this.dispose()}this.viewport.set(0,0,A,t),this.scissor.set(0,0,A,t)}clone(){return new this.constructor().copy(this)}copy(A){this.width=A.width,this.height=A.height,this.depth=A.depth,this.scissor.copy(A.scissor),this.scissorTest=A.scissorTest,this.viewport.copy(A.viewport),this.textures.length=0;for(let e=0,s=A.textures.length;e<s;e++)this.textures[e]=A.textures[e].clone(),this.textures[e].isRenderTargetTexture=!0,this.textures[e].renderTarget=this;const t=Object.assign({},A.texture.image);return this.texture.source=new zi(t),this.depthBuffer=A.depthBuffer,this.stencilBuffer=A.stencilBuffer,this.resolveDepthBuffer=A.resolveDepthBuffer,this.resolveStencilBuffer=A.resolveStencilBuffer,A.depthTexture!==null&&(this.depthTexture=A.depthTexture.clone()),this.samples=A.samples,this}dispose(){this.dispatchEvent({type:"dispose"})}}class Mr extends xr{constructor(A=1,t=1,e={}){super(A,t,e),this.isWebGLRenderTarget=!0}}class ht extends VA{constructor(A=null,t=1,e=1,s=1){super(null),this.isDataArrayTexture=!0,this.image={data:A,width:t,height:e,depth:s},this.magFilter=Qt,this.minFilter=Qt,this.wrapR=oe,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.layerUpdates=new Set}addLayerUpdate(A){this.layerUpdates.add(A)}clearLayerUpdates(){this.layerUpdates.clear()}}class Ki extends Mr{constructor(A=1,t=1,e=1,s={}){super(A,t,s),this.isWebGLArrayRenderTarget=!0,this.depth=e,this.texture=new ht(null,A,t,e),this.texture.isRenderTargetTexture=!0}}class rA{constructor(A=0,t=0,e=0,s=1){this.isQuaternion=!0,this._x=A,this._y=t,this._z=e,this._w=s}static slerpFlat(A,t,e,s,i,n,r){let a=e[s+0],o=e[s+1],I=e[s+2],B=e[s+3];const Q=i[n+0],h=i[n+1],C=i[n+2],E=i[n+3];if(r===0){A[t+0]=a,A[t+1]=o,A[t+2]=I,A[t+3]=B;return}if(r===1){A[t+0]=Q,A[t+1]=h,A[t+2]=C,A[t+3]=E;return}if(B!==E||a!==Q||o!==h||I!==C){let c=1-r;const l=a*Q+o*h+I*C+B*E,u=l>=0?1:-1,d=1-l*l;if(d>Number.EPSILON){const D=Math.sqrt(d),m=Math.atan2(D,l*u);c=Math.sin(c*m)/D,r=Math.sin(r*m)/D}const y=r*u;if(a=a*c+Q*y,o=o*c+h*y,I=I*c+C*y,B=B*c+E*y,c===1-r){const D=1/Math.sqrt(a*a+o*o+I*I+B*B);a*=D,o*=D,I*=D,B*=D}}A[t]=a,A[t+1]=o,A[t+2]=I,A[t+3]=B}static multiplyQuaternionsFlat(A,t,e,s,i,n){const r=e[s],a=e[s+1],o=e[s+2],I=e[s+3],B=i[n],Q=i[n+1],h=i[n+2],C=i[n+3];return A[t]=r*C+I*B+a*h-o*Q,A[t+1]=a*C+I*Q+o*B-r*h,A[t+2]=o*C+I*h+r*Q-a*B,A[t+3]=I*C-r*B-a*Q-o*h,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,t,e,s){return this._x=A,this._y=t,this._z=e,this._w=s,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,t=!0){const e=A._x,s=A._y,i=A._z,n=A._order,r=Math.cos,a=Math.sin,o=r(e/2),I=r(s/2),B=r(i/2),Q=a(e/2),h=a(s/2),C=a(i/2);switch(n){case"XYZ":this._x=Q*I*B+o*h*C,this._y=o*h*B-Q*I*C,this._z=o*I*C+Q*h*B,this._w=o*I*B-Q*h*C;break;case"YXZ":this._x=Q*I*B+o*h*C,this._y=o*h*B-Q*I*C,this._z=o*I*C-Q*h*B,this._w=o*I*B+Q*h*C;break;case"ZXY":this._x=Q*I*B-o*h*C,this._y=o*h*B+Q*I*C,this._z=o*I*C+Q*h*B,this._w=o*I*B-Q*h*C;break;case"ZYX":this._x=Q*I*B-o*h*C,this._y=o*h*B+Q*I*C,this._z=o*I*C-Q*h*B,this._w=o*I*B+Q*h*C;break;case"YZX":this._x=Q*I*B+o*h*C,this._y=o*h*B+Q*I*C,this._z=o*I*C-Q*h*B,this._w=o*I*B-Q*h*C;break;case"XZY":this._x=Q*I*B-o*h*C,this._y=o*h*B-Q*I*C,this._z=o*I*C+Q*h*B,this._w=o*I*B+Q*h*C;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+n)}return t===!0&&this._onChangeCallback(),this}setFromAxisAngle(A,t){const e=t/2,s=Math.sin(e);return this._x=A.x*s,this._y=A.y*s,this._z=A.z*s,this._w=Math.cos(e),this._onChangeCallback(),this}setFromRotationMatrix(A){const t=A.elements,e=t[0],s=t[4],i=t[8],n=t[1],r=t[5],a=t[9],o=t[2],I=t[6],B=t[10],Q=e+r+B;if(Q>0){const h=.5/Math.sqrt(Q+1);this._w=.25/h,this._x=(I-a)*h,this._y=(i-o)*h,this._z=(n-s)*h}else if(e>r&&e>B){const h=2*Math.sqrt(1+e-r-B);this._w=(I-a)/h,this._x=.25*h,this._y=(s+n)/h,this._z=(i+o)/h}else if(r>B){const h=2*Math.sqrt(1+r-e-B);this._w=(i-o)/h,this._x=(s+n)/h,this._y=.25*h,this._z=(a+I)/h}else{const h=2*Math.sqrt(1+B-e-r);this._w=(n-s)/h,this._x=(i+o)/h,this._y=(a+I)/h,this._z=.25*h}return this._onChangeCallback(),this}setFromUnitVectors(A,t){let e=A.dot(t)+1;return e<Number.EPSILON?(e=0,Math.abs(A.x)>Math.abs(A.z)?(this._x=-A.y,this._y=A.x,this._z=0,this._w=e):(this._x=0,this._y=-A.z,this._z=A.y,this._w=e)):(this._x=A.y*t.z-A.z*t.y,this._y=A.z*t.x-A.x*t.z,this._z=A.x*t.y-A.y*t.x,this._w=e),this.normalize()}angleTo(A){return 2*Math.acos(Math.abs(H(this.dot(A),-1,1)))}rotateTowards(A,t){const e=this.angleTo(A);if(e===0)return this;const s=Math.min(1,t/e);return this.slerp(A,s),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,t){const e=A._x,s=A._y,i=A._z,n=A._w,r=t._x,a=t._y,o=t._z,I=t._w;return this._x=e*I+n*r+s*o-i*a,this._y=s*I+n*a+i*r-e*o,this._z=i*I+n*o+e*a-s*r,this._w=n*I-e*r-s*a-i*o,this._onChangeCallback(),this}slerp(A,t){if(t===0)return this;if(t===1)return this.copy(A);const e=this._x,s=this._y,i=this._z,n=this._w;let r=n*A._w+e*A._x+s*A._y+i*A._z;if(r<0?(this._w=-A._w,this._x=-A._x,this._y=-A._y,this._z=-A._z,r=-r):this.copy(A),r>=1)return this._w=n,this._x=e,this._y=s,this._z=i,this;const a=1-r*r;if(a<=Number.EPSILON){const h=1-t;return this._w=h*n+t*this._w,this._x=h*e+t*this._x,this._y=h*s+t*this._y,this._z=h*i+t*this._z,this.normalize(),this}const o=Math.sqrt(a),I=Math.atan2(o,r),B=Math.sin((1-t)*I)/o,Q=Math.sin(t*I)/o;return this._w=n*B+this._w*Q,this._x=e*B+this._x*Q,this._y=s*B+this._y*Q,this._z=i*B+this._z*Q,this._onChangeCallback(),this}slerpQuaternions(A,t,e){return this.copy(A).slerp(t,e)}random(){const A=2*Math.PI*Math.random(),t=2*Math.PI*Math.random(),e=Math.random(),s=Math.sqrt(1-e),i=Math.sqrt(e);return this.set(s*Math.sin(A),s*Math.cos(A),i*Math.sin(t),i*Math.cos(t))}equals(A){return A._x===this._x&&A._y===this._y&&A._z===this._z&&A._w===this._w}fromArray(A,t=0){return this._x=A[t],this._y=A[t+1],this._z=A[t+2],this._w=A[t+3],this._onChangeCallback(),this}toArray(A=[],t=0){return A[t]=this._x,A[t+1]=this._y,A[t+2]=this._z,A[t+3]=this._w,A}fromBufferAttribute(A,t){return this._x=A.getX(t),this._y=A.getY(t),this._z=A.getZ(t),this._w=A.getW(t),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 f{constructor(A=0,t=0,e=0){f.prototype.isVector3=!0,this.x=A,this.y=t,this.z=e}set(A,t,e){return e===void 0&&(e=this.z),this.x=A,this.y=t,this.z=e,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,t){switch(A){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;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,t){return this.x=A.x+t.x,this.y=A.y+t.y,this.z=A.z+t.z,this}addScaledVector(A,t){return this.x+=A.x*t,this.y+=A.y*t,this.z+=A.z*t,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,t){return this.x=A.x-t.x,this.y=A.y-t.y,this.z=A.z-t.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,t){return this.x=A.x*t.x,this.y=A.y*t.y,this.z=A.z*t.z,this}applyEuler(A){return this.applyQuaternion(qi.setFromEuler(A))}applyAxisAngle(A,t){return this.applyQuaternion(qi.setFromAxisAngle(A,t))}applyMatrix3(A){const t=this.x,e=this.y,s=this.z,i=A.elements;return this.x=i[0]*t+i[3]*e+i[6]*s,this.y=i[1]*t+i[4]*e+i[7]*s,this.z=i[2]*t+i[5]*e+i[8]*s,this}applyNormalMatrix(A){return this.applyMatrix3(A).normalize()}applyMatrix4(A){const t=this.x,e=this.y,s=this.z,i=A.elements,n=1/(i[3]*t+i[7]*e+i[11]*s+i[15]);return this.x=(i[0]*t+i[4]*e+i[8]*s+i[12])*n,this.y=(i[1]*t+i[5]*e+i[9]*s+i[13])*n,this.z=(i[2]*t+i[6]*e+i[10]*s+i[14])*n,this}applyQuaternion(A){const t=this.x,e=this.y,s=this.z,i=A.x,n=A.y,r=A.z,a=A.w,o=2*(n*s-r*e),I=2*(r*t-i*s),B=2*(i*e-n*t);return this.x=t+a*o+n*B-r*I,this.y=e+a*I+r*o-i*B,this.z=s+a*B+i*I-n*o,this}project(A){return this.applyMatrix4(A.matrixWorldInverse).applyMatrix4(A.projectionMatrix)}unproject(A){return this.applyMatrix4(A.projectionMatrixInverse).applyMatrix4(A.matrixWorld)}transformDirection(A){const t=this.x,e=this.y,s=this.z,i=A.elements;return this.x=i[0]*t+i[4]*e+i[8]*s,this.y=i[1]*t+i[5]*e+i[9]*s,this.z=i[2]*t+i[6]*e+i[10]*s,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,t){return this.x=H(this.x,A.x,t.x),this.y=H(this.y,A.y,t.y),this.z=H(this.z,A.z,t.z),this}clampScalar(A,t){return this.x=H(this.x,A,t),this.y=H(this.y,A,t),this.z=H(this.z,A,t),this}clampLength(A,t){const e=this.length();return this.divideScalar(e||1).multiplyScalar(H(e,A,t))}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,t){return this.x+=(A.x-this.x)*t,this.y+=(A.y-this.y)*t,this.z+=(A.z-this.z)*t,this}lerpVectors(A,t,e){return this.x=A.x+(t.x-A.x)*e,this.y=A.y+(t.y-A.y)*e,this.z=A.z+(t.z-A.z)*e,this}cross(A){return this.crossVectors(this,A)}crossVectors(A,t){const e=A.x,s=A.y,i=A.z,n=t.x,r=t.y,a=t.z;return this.x=s*a-i*r,this.y=i*n-e*a,this.z=e*r-s*n,this}projectOnVector(A){const t=A.lengthSq();if(t===0)return this.set(0,0,0);const e=A.dot(this)/t;return this.copy(A).multiplyScalar(e)}projectOnPlane(A){return xs.copy(this).projectOnVector(A),this.sub(xs)}reflect(A){return this.sub(xs.copy(A).multiplyScalar(2*this.dot(A)))}angleTo(A){const t=Math.sqrt(this.lengthSq()*A.lengthSq());if(t===0)return Math.PI/2;const e=this.dot(A)/t;return Math.acos(H(e,-1,1))}distanceTo(A){return Math.sqrt(this.distanceToSquared(A))}distanceToSquared(A){const t=this.x-A.x,e=this.y-A.y,s=this.z-A.z;return t*t+e*e+s*s}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,t,e){const s=Math.sin(t)*A;return this.x=s*Math.sin(e),this.y=Math.cos(t)*A,this.z=s*Math.cos(e),this}setFromCylindrical(A){return this.setFromCylindricalCoords(A.radius,A.theta,A.y)}setFromCylindricalCoords(A,t,e){return this.x=A*Math.sin(t),this.y=e,this.z=A*Math.cos(t),this}setFromMatrixPosition(A){const t=A.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this}setFromMatrixScale(A){const t=this.setFromMatrixColumn(A,0).length(),e=this.setFromMatrixColumn(A,1).length(),s=this.setFromMatrixColumn(A,2).length();return this.x=t,this.y=e,this.z=s,this}setFromMatrixColumn(A,t){return this.fromArray(A.elements,t*4)}setFromMatrix3Column(A,t){return this.fromArray(A.elements,t*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,t=0){return this.x=A[t],this.y=A[t+1],this.z=A[t+2],this}toArray(A=[],t=0){return A[t]=this.x,A[t+1]=this.y,A[t+2]=this.z,A}fromBufferAttribute(A,t){return this.x=A.getX(t),this.y=A.getY(t),this.z=A.getZ(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const A=Math.random()*Math.PI*2,t=Math.random()*2-1,e=Math.sqrt(1-t*t);return this.x=e*Math.cos(A),this.y=t,this.z=e*Math.sin(A),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}const xs=new f,qi=new rA;class Yt{constructor(A=new f(1/0,1/0,1/0),t=new f(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=A,this.max=t}set(A,t){return this.min.copy(A),this.max.copy(t),this}setFromArray(A){this.makeEmpty();for(let t=0,e=A.length;t<e;t+=3)this.expandByPoint(vA.fromArray(A,t));return this}setFromBufferAttribute(A){this.makeEmpty();for(let t=0,e=A.count;t<e;t++)this.expandByPoint(vA.fromBufferAttribute(A,t));return this}setFromPoints(A){this.makeEmpty();for(let t=0,e=A.length;t<e;t++)this.expandByPoint(A[t]);return this}setFromCenterAndSize(A,t){const e=vA.copy(t).multiplyScalar(.5);return this.min.copy(A).sub(e),this.max.copy(A).add(e),this}setFromObject(A,t=!1){return this.makeEmpty(),this.expandByObject(A,t)}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,t=!1){A.updateWorldMatrix(!1,!1);const e=A.geometry;if(e!==void 0){const i=e.getAttribute("position");if(t===!0&&i!==void 0&&A.isInstancedMesh!==!0)for(let n=0,r=i.count;n<r;n++)A.isMesh===!0?A.getVertexPosition(n,vA):vA.fromBufferAttribute(i,n),vA.applyMatrix4(A.matrixWorld),this.expandByPoint(vA);else A.boundingBox!==void 0?(A.boundingBox===null&&A.computeBoundingBox(),ke.copy(A.boundingBox)):(e.boundingBox===null&&e.computeBoundingBox(),ke.copy(e.boundingBox)),ke.applyMatrix4(A.matrixWorld),this.union(ke)}const s=A.children;for(let i=0,n=s.length;i<n;i++)this.expandByObject(s[i],t);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,t){return t.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,vA),vA.distanceToSquared(A.center)<=A.radius*A.radius}intersectsPlane(A){let t,e;return A.normal.x>0?(t=A.normal.x*this.min.x,e=A.normal.x*this.max.x):(t=A.normal.x*this.max.x,e=A.normal.x*this.min.x),A.normal.y>0?(t+=A.normal.y*this.min.y,e+=A.normal.y*this.max.y):(t+=A.normal.y*this.max.y,e+=A.normal.y*this.min.y),A.normal.z>0?(t+=A.normal.z*this.min.z,e+=A.normal.z*this.max.z):(t+=A.normal.z*this.max.z,e+=A.normal.z*this.min.z),t<=-A.constant&&e>=-A.constant}intersectsTriangle(A){if(this.isEmpty())return!1;this.getCenter(Ce),Re.subVectors(this.max,Ce),Jt.subVectors(A.a,Ce),Tt.subVectors(A.b,Ce),Ht.subVectors(A.c,Ce),Ct.subVectors(Tt,Jt),Et.subVectors(Ht,Tt),Dt.subVectors(Jt,Ht);let t=[0,-Ct.z,Ct.y,0,-Et.z,Et.y,0,-Dt.z,Dt.y,Ct.z,0,-Ct.x,Et.z,0,-Et.x,Dt.z,0,-Dt.x,-Ct.y,Ct.x,0,-Et.y,Et.x,0,-Dt.y,Dt.x,0];return!Ms(t,Jt,Tt,Ht,Re)||(t=[1,0,0,0,1,0,0,0,1],!Ms(t,Jt,Tt,Ht,Re))?!1:(Ge.crossVectors(Ct,Et),t=[Ge.x,Ge.y,Ge.z],Ms(t,Jt,Tt,Ht,Re))}clampPoint(A,t){return t.copy(A).clamp(this.min,this.max)}distanceToPoint(A){return this.clampPoint(A,vA).distanceTo(A)}getBoundingSphere(A){return this.isEmpty()?A.makeEmpty():(this.getCenter(A.center),A.radius=this.getSize(vA).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:(At[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(A),At[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(A),At[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(A),At[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(A),At[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(A),At[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(A),At[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(A),At[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(A),this.setFromPoints(At),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 At=[new f,new f,new f,new f,new f,new f,new f,new f],vA=new f,ke=new Yt,Jt=new f,Tt=new f,Ht=new f,Ct=new f,Et=new f,Dt=new f,Ce=new f,Re=new f,Ge=new f,mt=new f;function Ms(g,A,t,e,s){for(let i=0,n=g.length-3;i<=n;i+=3){mt.fromArray(g,i);const r=s.x*Math.abs(mt.x)+s.y*Math.abs(mt.y)+s.z*Math.abs(mt.z),a=A.dot(mt),o=t.dot(mt),I=e.dot(mt);if(Math.max(-Math.max(a,o,I),Math.min(a,o,I))>r)return!1}return!0}const Sr=new Yt,Ee=new f,Ss=new f;class _i{constructor(A=new f,t=-1){this.isSphere=!0,this.center=A,this.radius=t}set(A,t){return this.center.copy(A),this.radius=t,this}setFromPoints(A,t){const e=this.center;t!==void 0?e.copy(t):Sr.setFromPoints(A).getCenter(e);let s=0;for(let i=0,n=A.length;i<n;i++)s=Math.max(s,e.distanceToSquared(A[i]));return this.radius=Math.sqrt(s),this}copy(A){return this.center.copy(A.center),this.radius=A.radius,this}isEmpty(){return this.radius<0}makeEmpty(){return this.center.set(0,0,0),this.radius=-1,this}containsPoint(A){return A.distanceToSquared(this.center)<=this.radius*this.radius}distanceToPoint(A){return A.distanceTo(this.center)-this.radius}intersectsSphere(A){const t=this.radius+A.radius;return A.center.distanceToSquared(this.center)<=t*t}intersectsBox(A){return A.intersectsSphere(this)}intersectsPlane(A){return Math.abs(A.distanceToPoint(this.center))<=this.radius}clampPoint(A,t){const e=this.center.distanceToSquared(A);return t.copy(A),e>this.radius*this.radius&&(t.sub(this.center).normalize(),t.multiplyScalar(this.radius).add(this.center)),t}getBoundingBox(A){return this.isEmpty()?(A.makeEmpty(),A):(A.set(this.center,this.center),A.expandByScalar(this.radius),A)}applyMatrix4(A){return this.center.applyMatrix4(A),this.radius=this.radius*A.getMaxScaleOnAxis(),this}translate(A){return this.center.add(A),this}expandByPoint(A){if(this.isEmpty())return this.center.copy(A),this.radius=0,this;Ee.subVectors(A,this.center);const t=Ee.lengthSq();if(t>this.radius*this.radius){const e=Math.sqrt(t),s=(e-this.radius)*.5;this.center.addScaledVector(Ee,s/e),this.radius+=s}return this}union(A){return A.isEmpty()?this:this.isEmpty()?(this.copy(A),this):(this.center.equals(A.center)===!0?this.radius=Math.max(this.radius,A.radius):(Ss.subVectors(A.center,this.center).setLength(A.radius),this.expandByPoint(Ee.copy(A.center).add(Ss)),this.expandByPoint(Ee.copy(A.center).sub(Ss))),this)}equals(A){return A.center.equals(this.center)&&A.radius===this.radius}clone(){return new this.constructor().copy(this)}}const tt=new f,Fs=new f,Ue=new f,ct=new f,Ns=new f,be=new f,ks=new f;class Fr{constructor(A=new f,t=new f(0,0,-1)){this.origin=A,this.direction=t}set(A,t){return this.origin.copy(A),this.direction.copy(t),this}copy(A){return this.origin.copy(A.origin),this.direction.copy(A.direction),this}at(A,t){return t.copy(this.origin).addScaledVector(this.direction,A)}lookAt(A){return this.direction.copy(A).sub(this.origin).normalize(),this}recast(A){return this.origin.copy(this.at(A,tt)),this}closestPointToPoint(A,t){t.subVectors(A,this.origin);const e=t.dot(this.direction);return e<0?t.copy(this.origin):t.copy(this.origin).addScaledVector(this.direction,e)}distanceToPoint(A){return Math.sqrt(this.distanceSqToPoint(A))}distanceSqToPoint(A){const t=tt.subVectors(A,this.origin).dot(this.direction);return t<0?this.origin.distanceToSquared(A):(tt.copy(this.origin).addScaledVector(this.direction,t),tt.distanceToSquared(A))}distanceSqToSegment(A,t,e,s){Fs.copy(A).add(t).multiplyScalar(.5),Ue.copy(t).sub(A).normalize(),ct.copy(this.origin).sub(Fs);const i=A.distanceTo(t)*.5,n=-this.direction.dot(Ue),r=ct.dot(this.direction),a=-ct.dot(Ue),o=ct.lengthSq(),I=Math.abs(1-n*n);let B,Q,h,C;if(I>0)if(B=n*a-r,Q=n*r-a,C=i*I,B>=0)if(Q>=-C)if(Q<=C){const E=1/I;B*=E,Q*=E,h=B*(B+n*Q+2*r)+Q*(n*B+Q+2*a)+o}else Q=i,B=Math.max(0,-(n*Q+r)),h=-B*B+Q*(Q+2*a)+o;else Q=-i,B=Math.max(0,-(n*Q+r)),h=-B*B+Q*(Q+2*a)+o;else Q<=-C?(B=Math.max(0,-(-n*i+r)),Q=B>0?-i:Math.min(Math.max(-i,-a),i),h=-B*B+Q*(Q+2*a)+o):Q<=C?(B=0,Q=Math.min(Math.max(-i,-a),i),h=Q*(Q+2*a)+o):(B=Math.max(0,-(n*i+r)),Q=B>0?i:Math.min(Math.max(-i,-a),i),h=-B*B+Q*(Q+2*a)+o);else Q=n>0?-i:i,B=Math.max(0,-(n*Q+r)),h=-B*B+Q*(Q+2*a)+o;return e&&e.copy(this.origin).addScaledVector(this.direction,B),s&&s.copy(Fs).addScaledVector(Ue,Q),h}intersectSphere(A,t){tt.subVectors(A.center,this.origin);const e=tt.dot(this.direction),s=tt.dot(tt)-e*e,i=A.radius*A.radius;if(s>i)return null;const n=Math.sqrt(i-s),r=e-n,a=e+n;return a<0?null:r<0?this.at(a,t):this.at(r,t)}intersectsSphere(A){return this.distanceSqToPoint(A.center)<=A.radius*A.radius}distanceToPlane(A){const t=A.normal.dot(this.direction);if(t===0)return A.distanceToPoint(this.origin)===0?0:null;const e=-(this.origin.dot(A.normal)+A.constant)/t;return e>=0?e:null}intersectPlane(A,t){const e=this.distanceToPlane(A);return e===null?null:this.at(e,t)}intersectsPlane(A){const t=A.distanceToPoint(this.origin);return t===0||A.normal.dot(this.direction)*t<0}intersectBox(A,t){let e,s,i,n,r,a;const o=1/this.direction.x,I=1/this.direction.y,B=1/this.direction.z,Q=this.origin;return o>=0?(e=(A.min.x-Q.x)*o,s=(A.max.x-Q.x)*o):(e=(A.max.x-Q.x)*o,s=(A.min.x-Q.x)*o),I>=0?(i=(A.min.y-Q.y)*I,n=(A.max.y-Q.y)*I):(i=(A.max.y-Q.y)*I,n=(A.min.y-Q.y)*I),e>n||i>s||((i>e||isNaN(e))&&(e=i),(n<s||isNaN(s))&&(s=n),B>=0?(r=(A.min.z-Q.z)*B,a=(A.max.z-Q.z)*B):(r=(A.max.z-Q.z)*B,a=(A.min.z-Q.z)*B),e>a||r>s)||((r>e||e!==e)&&(e=r),(a<s||s!==s)&&(s=a),s<0)?null:this.at(e>=0?e:s,t)}intersectsBox(A){return this.intersectBox(A,tt)!==null}intersectTriangle(A,t,e,s,i){Ns.subVectors(t,A),be.subVectors(e,A),ks.crossVectors(Ns,be);let n=this.direction.dot(ks),r;if(n>0){if(s)return null;r=1}else if(n<0)r=-1,n=-n;else return null;ct.subVectors(this.origin,A);const a=r*this.direction.dot(be.crossVectors(ct,be));if(a<0)return null;const o=r*this.direction.dot(Ns.cross(ct));if(o<0||a+o>n)return null;const I=-r*ct.dot(ks);return I<0?null:this.at(I/n,i)}applyMatrix4(A){return this.origin.applyMatrix4(A),this.direction.transformDirection(A),this}equals(A){return A.origin.equals(this.origin)&&A.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}}class CA{constructor(A,t,e,s,i,n,r,a,o,I,B,Q,h,C,E,c){CA.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],A!==void 0&&this.set(A,t,e,s,i,n,r,a,o,I,B,Q,h,C,E,c)}set(A,t,e,s,i,n,r,a,o,I,B,Q,h,C,E,c){const l=this.elements;return l[0]=A,l[4]=t,l[8]=e,l[12]=s,l[1]=i,l[5]=n,l[9]=r,l[13]=a,l[2]=o,l[6]=I,l[10]=B,l[14]=Q,l[3]=h,l[7]=C,l[11]=E,l[15]=c,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new CA().fromArray(this.elements)}copy(A){const t=this.elements,e=A.elements;return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],this}copyPosition(A){const t=this.elements,e=A.elements;return t[12]=e[12],t[13]=e[13],t[14]=e[14],this}setFromMatrix3(A){const t=A.elements;return this.set(t[0],t[3],t[6],0,t[1],t[4],t[7],0,t[2],t[5],t[8],0,0,0,0,1),this}extractBasis(A,t,e){return A.setFromMatrixColumn(this,0),t.setFromMatrixColumn(this,1),e.setFromMatrixColumn(this,2),this}makeBasis(A,t,e){return this.set(A.x,t.x,e.x,0,A.y,t.y,e.y,0,A.z,t.z,e.z,0,0,0,0,1),this}extractRotation(A){const t=this.elements,e=A.elements,s=1/vt.setFromMatrixColumn(A,0).length(),i=1/vt.setFromMatrixColumn(A,1).length(),n=1/vt.setFromMatrixColumn(A,2).length();return t[0]=e[0]*s,t[1]=e[1]*s,t[2]=e[2]*s,t[3]=0,t[4]=e[4]*i,t[5]=e[5]*i,t[6]=e[6]*i,t[7]=0,t[8]=e[8]*n,t[9]=e[9]*n,t[10]=e[10]*n,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromEuler(A){const t=this.elements,e=A.x,s=A.y,i=A.z,n=Math.cos(e),r=Math.sin(e),a=Math.cos(s),o=Math.sin(s),I=Math.cos(i),B=Math.sin(i);if(A.order==="XYZ"){const Q=n*I,h=n*B,C=r*I,E=r*B;t[0]=a*I,t[4]=-a*B,t[8]=o,t[1]=h+C*o,t[5]=Q-E*o,t[9]=-r*a,t[2]=E-Q*o,t[6]=C+h*o,t[10]=n*a}else if(A.order==="YXZ"){const Q=a*I,h=a*B,C=o*I,E=o*B;t[0]=Q+E*r,t[4]=C*r-h,t[8]=n*o,t[1]=n*B,t[5]=n*I,t[9]=-r,t[2]=h*r-C,t[6]=E+Q*r,t[10]=n*a}else if(A.order==="ZXY"){const Q=a*I,h=a*B,C=o*I,E=o*B;t[0]=Q-E*r,t[4]=-n*B,t[8]=C+h*r,t[1]=h+C*r,t[5]=n*I,t[9]=E-Q*r,t[2]=-n*o,t[6]=r,t[10]=n*a}else if(A.order==="ZYX"){const Q=n*I,h=n*B,C=r*I,E=r*B;t[0]=a*I,t[4]=C*o-h,t[8]=Q*o+E,t[1]=a*B,t[5]=E*o+Q,t[9]=h*o-C,t[2]=-o,t[6]=r*a,t[10]=n*a}else if(A.order==="YZX"){const Q=n*a,h=n*o,C=r*a,E=r*o;t[0]=a*I,t[4]=E-Q*B,t[8]=C*B+h,t[1]=B,t[5]=n*I,t[9]=-r*I,t[2]=-o*I,t[6]=h*B+C,t[10]=Q-E*B}else if(A.order==="XZY"){const Q=n*a,h=n*o,C=r*a,E=r*o;t[0]=a*I,t[4]=-B,t[8]=o*I,t[1]=Q*B+E,t[5]=n*I,t[9]=h*B-C,t[2]=C*B-h,t[6]=r*I,t[10]=E*B+Q}return t[3]=0,t[7]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromQuaternion(A){return this.compose(Nr,A,kr)}lookAt(A,t,e){const s=this.elements;return SA.subVectors(A,t),SA.lengthSq()===0&&(SA.z=1),SA.normalize(),lt.crossVectors(e,SA),lt.lengthSq()===0&&(Math.abs(e.z)===1?SA.x+=1e-4:SA.z+=1e-4,SA.normalize(),lt.crossVectors(e,SA)),lt.normalize(),Le.crossVectors(SA,lt),s[0]=lt.x,s[4]=Le.x,s[8]=SA.x,s[1]=lt.y,s[5]=Le.y,s[9]=SA.y,s[2]=lt.z,s[6]=Le.z,s[10]=SA.z,this}multiply(A){return this.multiplyMatrices(this,A)}premultiply(A){return this.multiplyMatrices(A,this)}multiplyMatrices(A,t){const e=A.elements,s=t.elements,i=this.elements,n=e[0],r=e[4],a=e[8],o=e[12],I=e[1],B=e[5],Q=e[9],h=e[13],C=e[2],E=e[6],c=e[10],l=e[14],u=e[3],d=e[7],y=e[11],D=e[15],m=s[0],x=s[4],w=s[8],p=s[12],N=s[1],M=s[5],S=s[9],F=s[13],k=s[2],G=s[6],R=s[10],b=s[14],j=s[3],_=s[7],X=s[11],P=s[15];return i[0]=n*m+r*N+a*k+o*j,i[4]=n*x+r*M+a*G+o*_,i[8]=n*w+r*S+a*R+o*X,i[12]=n*p+r*F+a*b+o*P,i[1]=I*m+B*N+Q*k+h*j,i[5]=I*x+B*M+Q*G+h*_,i[9]=I*w+B*S+Q*R+h*X,i[13]=I*p+B*F+Q*b+h*P,i[2]=C*m+E*N+c*k+l*j,i[6]=C*x+E*M+c*G+l*_,i[10]=C*w+E*S+c*R+l*X,i[14]=C*p+E*F+c*b+l*P,i[3]=u*m+d*N+y*k+D*j,i[7]=u*x+d*M+y*G+D*_,i[11]=u*w+d*S+y*R+D*X,i[15]=u*p+d*F+y*b+D*P,this}multiplyScalar(A){const t=this.elements;return t[0]*=A,t[4]*=A,t[8]*=A,t[12]*=A,t[1]*=A,t[5]*=A,t[9]*=A,t[13]*=A,t[2]*=A,t[6]*=A,t[10]*=A,t[14]*=A,t[3]*=A,t[7]*=A,t[11]*=A,t[15]*=A,this}determinant(){const A=this.elements,t=A[0],e=A[4],s=A[8],i=A[12],n=A[1],r=A[5],a=A[9],o=A[13],I=A[2],B=A[6],Q=A[10],h=A[14],C=A[3],E=A[7],c=A[11],l=A[15];return C*(+i*a*B-s*o*B-i*r*Q+e*o*Q+s*r*h-e*a*h)+E*(+t*a*h-t*o*Q+i*n*Q-s*n*h+s*o*I-i*a*I)+c*(+t*o*B-t*r*h-i*n*B+e*n*h+i*r*I-e*o*I)+l*(-s*r*I-t*a*B+t*r*Q+s*n*B-e*n*Q+e*a*I)}transpose(){const A=this.elements;let t;return t=A[1],A[1]=A[4],A[4]=t,t=A[2],A[2]=A[8],A[8]=t,t=A[6],A[6]=A[9],A[9]=t,t=A[3],A[3]=A[12],A[12]=t,t=A[7],A[7]=A[13],A[13]=t,t=A[11],A[11]=A[14],A[14]=t,this}setPosition(A,t,e){const s=this.elements;return A.isVector3?(s[12]=A.x,s[13]=A.y,s[14]=A.z):(s[12]=A,s[13]=t,s[14]=e),this}invert(){const A=this.elements,t=A[0],e=A[1],s=A[2],i=A[3],n=A[4],r=A[5],a=A[6],o=A[7],I=A[8],B=A[9],Q=A[10],h=A[11],C=A[12],E=A[13],c=A[14],l=A[15],u=B*c*o-E*Q*o+E*a*h-r*c*h-B*a*l+r*Q*l,d=C*Q*o-I*c*o-C*a*h+n*c*h+I*a*l-n*Q*l,y=I*E*o-C*B*o+C*r*h-n*E*h-I*r*l+n*B*l,D=C*B*a-I*E*a-C*r*Q+n*E*Q+I*r*c-n*B*c,m=t*u+e*d+s*y+i*D;if(m===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const x=1/m;return A[0]=u*x,A[1]=(E*Q*i-B*c*i-E*s*h+e*c*h+B*s*l-e*Q*l)*x,A[2]=(r*c*i-E*a*i+E*s*o-e*c*o-r*s*l+e*a*l)*x,A[3]=(B*a*i-r*Q*i-B*s*o+e*Q*o+r*s*h-e*a*h)*x,A[4]=d*x,A[5]=(I*c*i-C*Q*i+C*s*h-t*c*h-I*s*l+t*Q*l)*x,A[6]=(C*a*i-n*c*i-C*s*o+t*c*o+n*s*l-t*a*l)*x,A[7]=(n*Q*i-I*a*i+I*s*o-t*Q*o-n*s*h+t*a*h)*x,A[8]=y*x,A[9]=(C*B*i-I*E*i-C*e*h+t*E*h+I*e*l-t*B*l)*x,A[10]=(n*E*i-C*r*i+C*e*o-t*E*o-n*e*l+t*r*l)*x,A[11]=(I*r*i-n*B*i-I*e*o+t*B*o+n*e*h-t*r*h)*x,A[12]=D*x,A[13]=(I*E*s-C*B*s+C*e*Q-t*E*Q-I*e*c+t*B*c)*x,A[14]=(C*r*s-n*E*s-C*e*a+t*E*a+n*e*c-t*r*c)*x,A[15]=(n*B*s-I*r*s+I*e*a-t*B*a-n*e*Q+t*r*Q)*x,this}scale(A){const t=this.elements,e=A.x,s=A.y,i=A.z;return t[0]*=e,t[4]*=s,t[8]*=i,t[1]*=e,t[5]*=s,t[9]*=i,t[2]*=e,t[6]*=s,t[10]*=i,t[3]*=e,t[7]*=s,t[11]*=i,this}getMaxScaleOnAxis(){const A=this.elements,t=A[0]*A[0]+A[1]*A[1]+A[2]*A[2],e=A[4]*A[4]+A[5]*A[5]+A[6]*A[6],s=A[8]*A[8]+A[9]*A[9]+A[10]*A[10];return Math.sqrt(Math.max(t,e,s))}makeTranslation(A,t,e){return A.isVector3?this.set(1,0,0,A.x,0,1,0,A.y,0,0,1,A.z,0,0,0,1):this.set(1,0,0,A,0,1,0,t,0,0,1,e,0,0,0,1),this}makeRotationX(A){const t=Math.cos(A),e=Math.sin(A);return this.set(1,0,0,0,0,t,-e,0,0,e,t,0,0,0,0,1),this}makeRotationY(A){const t=Math.cos(A),e=Math.sin(A);return this.set(t,0,e,0,0,1,0,0,-e,0,t,0,0,0,0,1),this}makeRotationZ(A){const t=Math.cos(A),e=Math.sin(A);return this.set(t,-e,0,0,e,t,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(A,t){const e=Math.cos(t),s=Math.sin(t),i=1-e,n=A.x,r=A.y,a=A.z,o=i*n,I=i*r;return this.set(o*n+e,o*r-s*a,o*a+s*r,0,o*r+s*a,I*r+e,I*a-s*n,0,o*a-s*r,I*a+s*n,i*a*a+e,0,0,0,0,1),this}makeScale(A,t,e){return this.set(A,0,0,0,0,t,0,0,0,0,e,0,0,0,0,1),this}makeShear(A,t,e,s,i,n){return this.set(1,e,i,0,A,1,n,0,t,s,1,0,0,0,0,1),this}compose(A,t,e){const s=this.elements,i=t._x,n=t._y,r=t._z,a=t._w,o=i+i,I=n+n,B=r+r,Q=i*o,h=i*I,C=i*B,E=n*I,c=n*B,l=r*B,u=a*o,d=a*I,y=a*B,D=e.x,m=e.y,x=e.z;return s[0]=(1-(E+l))*D,s[1]=(h+y)*D,s[2]=(C-d)*D,s[3]=0,s[4]=(h-y)*m,s[5]=(1-(Q+l))*m,s[6]=(c+u)*m,s[7]=0,s[8]=(C+d)*x,s[9]=(c-u)*x,s[10]=(1-(Q+E))*x,s[11]=0,s[12]=A.x,s[13]=A.y,s[14]=A.z,s[15]=1,this}decompose(A,t,e){const s=this.elements;let i=vt.set(s[0],s[1],s[2]).length();const n=vt.set(s[4],s[5],s[6]).length(),r=vt.set(s[8],s[9],s[10]).length();this.determinant()<0&&(i=-i),A.x=s[12],A.y=s[13],A.z=s[14],zA.copy(this);const o=1/i,I=1/n,B=1/r;return zA.elements[0]*=o,zA.elements[1]*=o,zA.elements[2]*=o,zA.elements[4]*=I,zA.elements[5]*=I,zA.elements[6]*=I,zA.elements[8]*=B,zA.elements[9]*=B,zA.elements[10]*=B,t.setFromRotationMatrix(zA),e.x=i,e.y=n,e.z=r,this}makePerspective(A,t,e,s,i,n,r=Ie){const a=this.elements,o=2*i/(t-A),I=2*i/(e-s),B=(t+A)/(t-A),Q=(e+s)/(e-s);let h,C;if(r===Ie)h=-(n+i)/(n-i),C=-2*n*i/(n-i);else if(r===Ji)h=-n/(n-i),C=-n*i/(n-i);else throw new Error("THREE.Matrix4.makePerspective(): Invalid coordinate system: "+r);return a[0]=o,a[4]=0,a[8]=B,a[12]=0,a[1]=0,a[5]=I,a[9]=Q,a[13]=0,a[2]=0,a[6]=0,a[10]=h,a[14]=C,a[3]=0,a[7]=0,a[11]=-1,a[15]=0,this}makeOrthographic(A,t,e,s,i,n,r=Ie){const a=this.elements,o=1/(t-A),I=1/(e-s),B=1/(n-i),Q=(t+A)*o,h=(e+s)*I;let C,E;if(r===Ie)C=(n+i)*B,E=-2*B;else if(r===Ji)C=i*B,E=-1*B;else throw new Error("THREE.Matrix4.makeOrthographic(): Invalid coordinate system: "+r);return a[0]=2*o,a[4]=0,a[8]=0,a[12]=-Q,a[1]=0,a[5]=2*I,a[9]=0,a[13]=-h,a[2]=0,a[6]=0,a[10]=E,a[14]=-C,a[3]=0,a[7]=0,a[11]=0,a[15]=1,this}equals(A){const t=this.elements,e=A.elements;for(let s=0;s<16;s++)if(t[s]!==e[s])return!1;return!0}fromArray(A,t=0){for(let e=0;e<16;e++)this.elements[e]=A[e+t];return this}toArray(A=[],t=0){const e=this.elements;return A[t]=e[0],A[t+1]=e[1],A[t+2]=e[2],A[t+3]=e[3],A[t+4]=e[4],A[t+5]=e[5],A[t+6]=e[6],A[t+7]=e[7],A[t+8]=e[8],A[t+9]=e[9],A[t+10]=e[10],A[t+11]=e[11],A[t+12]=e[12],A[t+13]=e[13],A[t+14]=e[14],A[t+15]=e[15],A}}const vt=new f,zA=new CA,Nr=new f(0,0,0),kr=new f(1,1,1),lt=new f,Le=new f,SA=new f,Zi=new CA,Wi=new rA;class xt{constructor(A=0,t=0,e=0,s=xt.DEFAULT_ORDER){this.isEuler=!0,this._x=A,this._y=t,this._z=e,this._order=s}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 order(){return this._order}set order(A){this._order=A,this._onChangeCallback()}set(A,t,e,s=this._order){return this._x=A,this._y=t,this._z=e,this._order=s,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(A){return this._x=A._x,this._y=A._y,this._z=A._z,this._order=A._order,this._onChangeCallback(),this}setFromRotationMatrix(A,t=this._order,e=!0){const s=A.elements,i=s[0],n=s[4],r=s[8],a=s[1],o=s[5],I=s[9],B=s[2],Q=s[6],h=s[10];switch(t){case"XYZ":this._y=Math.asin(H(r,-1,1)),Math.abs(r)<.9999999?(this._x=Math.atan2(-I,h),this._z=Math.atan2(-n,i)):(this._x=Math.atan2(Q,o),this._z=0);break;case"YXZ":this._x=Math.asin(-H(I,-1,1)),Math.abs(I)<.9999999?(this._y=Math.atan2(r,h),this._z=Math.atan2(a,o)):(this._y=Math.atan2(-B,i),this._z=0);break;case"ZXY":this._x=Math.asin(H(Q,-1,1)),Math.abs(Q)<.9999999?(this._y=Math.atan2(-B,h),this._z=Math.atan2(-n,o)):(this._y=0,this._z=Math.atan2(a,i));break;case"ZYX":this._y=Math.asin(-H(B,-1,1)),Math.abs(B)<.9999999?(this._x=Math.atan2(Q,h),this._z=Math.atan2(a,i)):(this._x=0,this._z=Math.atan2(-n,o));break;case"YZX":this._z=Math.asin(H(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(-I,o),this._y=Math.atan2(-B,i)):(this._x=0,this._y=Math.atan2(r,h));break;case"XZY":this._z=Math.asin(-H(n,-1,1)),Math.abs(n)<.9999999?(this._x=Math.atan2(Q,o),this._y=Math.atan2(r,i)):(this._x=Math.atan2(-I,h),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+t)}return this._order=t,e===!0&&this._onChangeCallback(),this}setFromQuaternion(A,t,e){return Zi.makeRotationFromQuaternion(A),this.setFromRotationMatrix(Zi,t,e)}setFromVector3(A,t=this._order){return this.set(A.x,A.y,A.z,t)}reorder(A){return Wi.setFromEuler(this),this.setFromQuaternion(Wi,A)}equals(A){return A._x===this._x&&A._y===this._y&&A._z===this._z&&A._order===this._order}fromArray(A){return this._x=A[0],this._y=A[1],this._z=A[2],A[3]!==void 0&&(this._order=A[3]),this._onChangeCallback(),this}toArray(A=[],t=0){return A[t]=this._x,A[t+1]=this._y,A[t+2]=this._z,A[t+3]=this._order,A}_onChange(A){return this._onChangeCallback=A,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}}xt.DEFAULT_ORDER="XYZ";class Rr{constructor(){this.mask=1}set(A){this.mask=(1<<A|0)>>>0}enable(A){this.mask|=1<<A|0}enableAll(){this.mask=-1}toggle(A){this.mask^=1<<A|0}disable(A){this.mask&=~(1<<A|0)}disableAll(){this.mask=0}test(A){return(this.mask&A.mask)!==0}isEnabled(A){return(this.mask&(1<<A|0))!==0}}let Gr=0;const Oi=new f,zt=new rA,et=new CA,Ye=new f,ce=new f,Ur=new f,br=new rA,ji=new f(1,0,0),Pi=new f(0,1,0),Vi=new f(0,0,1),Xi={type:"added"},Lr={type:"removed"},Kt={type:"childadded",child:null},Rs={type:"childremoved",child:null};class pA extends Be{constructor(){super(),this.isObject3D=!0,Object.defineProperty(this,"id",{value:Gr++}),this.uuid=Qe(),this.name="",this.type="Object3D",this.parent=null,this.children=[],this.up=pA.DEFAULT_UP.clone();const A=new f,t=new xt,e=new rA,s=new f(1,1,1);function i(){e.setFromEuler(t,!1)}function n(){t.setFromQuaternion(e,void 0,!1)}t._onChange(i),e._onChange(n),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:A},rotation:{configurable:!0,enumerable:!0,value:t},quaternion:{configurable:!0,enumerable:!0,value:e},scale:{configurable:!0,enumerable:!0,value:s},modelViewMatrix:{value:new CA},normalMatrix:{value:new PA}}),this.matrix=new CA,this.matrixWorld=new CA,this.matrixAutoUpdate=pA.DEFAULT_MATRIX_AUTO_UPDATE,this.matrixWorldAutoUpdate=pA.DEFAULT_MATRIX_WORLD_AUTO_UPDATE,this.matrixWorldNeedsUpdate=!1,this.layers=new Rr,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.animations=[],this.userData={}}onBeforeShadow(){}onAfterShadow(){}onBeforeRender(){}onAfterRender(){}applyMatrix4(A){this.matrixAutoUpdate&&this.updateMatrix(),this.matrix.premultiply(A),this.matrix.decompose(this.position,this.quaternion,this.scale)}applyQuaternion(A){return this.quaternion.premultiply(A),this}setRotationFromAxisAngle(A,t){this.quaternion.setFromAxisAngle(A,t)}setRotationFromEuler(A){this.quaternion.setFromEuler(A,!0)}setRotationFromMatrix(A){this.quaternion.setFromRotationMatrix(A)}setRotationFromQuaternion(A){this.quaternion.copy(A)}rotateOnAxis(A,t){return zt.setFromAxisAngle(A,t),this.quaternion.multiply(zt),this}rotateOnWorldAxis(A,t){return zt.setFromAxisAngle(A,t),this.quaternion.premultiply(zt),this}rotateX(A){return this.rotateOnAxis(ji,A)}rotateY(A){return this.rotateOnAxis(Pi,A)}rotateZ(A){return this.rotateOnAxis(Vi,A)}translateOnAxis(A,t){return Oi.copy(A).applyQuaternion(this.quaternion),this.position.add(Oi.multiplyScalar(t)),this}translateX(A){return this.translateOnAxis(ji,A)}translateY(A){return this.translateOnAxis(Pi,A)}translateZ(A){return this.translateOnAxis(Vi,A)}localToWorld(A){return this.updateWorldMatrix(!0,!1),A.applyMatrix4(this.matrixWorld)}worldToLocal(A){return this.updateWorldMatrix(!0,!1),A.applyMatrix4(et.copy(this.matrixWorld).invert())}lookAt(A,t,e){A.isVector3?Ye.copy(A):Ye.set(A,t,e);const s=this.parent;this.updateWorldMatrix(!0,!1),ce.setFromMatrixPosition(this.matrixWorld),this.isCamera||this.isLight?et.lookAt(ce,Ye,this.up):et.lookAt(Ye,ce,this.up),this.quaternion.setFromRotationMatrix(et),s&&(et.extractRotation(s.matrixWorld),zt.setFromRotationMatrix(et),this.quaternion.premultiply(zt.invert()))}add(A){if(arguments.length>1){for(let t=0;t<arguments.length;t++)this.add(arguments[t]);return this}return A===this?(console.error("THREE.Object3D.add: object can\'t be added as a child of itself.",A),this):(A&&A.isObject3D?(A.removeFromParent(),A.parent=this,this.children.push(A),A.dispatchEvent(Xi),Kt.child=A,this.dispatchEvent(Kt),Kt.child=null):console.error("THREE.Object3D.add: object not an instance of THREE.Object3D.",A),this)}remove(A){if(arguments.length>1){for(let e=0;e<arguments.length;e++)this.remove(arguments[e]);return this}const t=this.children.indexOf(A);return t!==-1&&(A.parent=null,this.children.splice(t,1),A.dispatchEvent(Lr),Rs.child=A,this.dispatchEvent(Rs),Rs.child=null),this}removeFromParent(){const A=this.parent;return A!==null&&A.remove(this),this}clear(){return this.remove(...this.children)}attach(A){return this.updateWorldMatrix(!0,!1),et.copy(this.matrixWorld).invert(),A.parent!==null&&(A.parent.updateWorldMatrix(!0,!1),et.multiply(A.parent.matrixWorld)),A.applyMatrix4(et),A.removeFromParent(),A.parent=this,this.children.push(A),A.updateWorldMatrix(!1,!0),A.dispatchEvent(Xi),Kt.child=A,this.dispatchEvent(Kt),Kt.child=null,this}getObjectById(A){return this.getObjectByProperty("id",A)}getObjectByName(A){return this.getObjectByProperty("name",A)}getObjectByProperty(A,t){if(this[A]===t)return this;for(let e=0,s=this.children.length;e<s;e++){const n=this.children[e].getObjectByProperty(A,t);if(n!==void 0)return n}}getObjectsByProperty(A,t,e=[]){this[A]===t&&e.push(this);const s=this.children;for(let i=0,n=s.length;i<n;i++)s[i].getObjectsByProperty(A,t,e);return e}getWorldPosition(A){return this.updateWorldMatrix(!0,!1),A.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(A){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(ce,A,Ur),A}getWorldScale(A){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(ce,br,A),A}getWorldDirection(A){this.updateWorldMatrix(!0,!1);const t=this.matrixWorld.elements;return A.set(t[8],t[9],t[10]).normalize()}raycast(){}traverse(A){A(this);const t=this.children;for(let e=0,s=t.length;e<s;e++)t[e].traverse(A)}traverseVisible(A){if(this.visible===!1)return;A(this);const t=this.children;for(let e=0,s=t.length;e<s;e++)t[e].traverseVisible(A)}traverseAncestors(A){const t=this.parent;t!==null&&(A(t),t.traverseAncestors(A))}updateMatrix(){this.matrix.compose(this.position,this.quaternion,this.scale),this.matrixWorldNeedsUpdate=!0}updateMatrixWorld(A){this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||A)&&(this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),this.matrixWorldNeedsUpdate=!1,A=!0);const t=this.children;for(let e=0,s=t.length;e<s;e++)t[e].updateMatrixWorld(A)}updateWorldMatrix(A,t){const e=this.parent;if(A===!0&&e!==null&&e.updateWorldMatrix(!0,!1),this.matrixAutoUpdate&&this.updateMatrix(),this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),t===!0){const s=this.children;for(let i=0,n=s.length;i<n;i++)s[i].updateWorldMatrix(!1,!0)}}toJSON(A){const t=A===void 0||typeof A=="string",e={};t&&(A={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{},nodes:{}},e.metadata={version:4.6,type:"Object",generator:"Object3D.toJSON"});const s={};s.uuid=this.uuid,s.type=this.type,this.name!==""&&(s.name=this.name),this.castShadow===!0&&(s.castShadow=!0),this.receiveShadow===!0&&(s.receiveShadow=!0),this.visible===!1&&(s.visible=!1),this.frustumCulled===!1&&(s.frustumCulled=!1),this.renderOrder!==0&&(s.renderOrder=this.renderOrder),Object.keys(this.userData).length>0&&(s.userData=this.userData),s.layers=this.layers.mask,s.matrix=this.matrix.toArray(),s.up=this.up.toArray(),this.matrixAutoUpdate===!1&&(s.matrixAutoUpdate=!1),this.isInstancedMesh&&(s.type="InstancedMesh",s.count=this.count,s.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(s.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(s.type="BatchedMesh",s.perObjectFrustumCulled=this.perObjectFrustumCulled,s.sortObjects=this.sortObjects,s.drawRanges=this._drawRanges,s.reservedRanges=this._reservedRanges,s.visibility=this._visibility,s.active=this._active,s.bounds=this._bounds.map(r=>({boxInitialized:r.boxInitialized,boxMin:r.box.min.toArray(),boxMax:r.box.max.toArray(),sphereInitialized:r.sphereInitialized,sphereRadius:r.sphere.radius,sphereCenter:r.sphere.center.toArray()})),s.maxInstanceCount=this._maxInstanceCount,s.maxVertexCount=this._maxVertexCount,s.maxIndexCount=this._maxIndexCount,s.geometryInitialized=this._geometryInitialized,s.geometryCount=this._geometryCount,s.matricesTexture=this._matricesTexture.toJSON(A),this._colorsTexture!==null&&(s.colorsTexture=this._colorsTexture.toJSON(A)),this.boundingSphere!==null&&(s.boundingSphere={center:s.boundingSphere.center.toArray(),radius:s.boundingSphere.radius}),this.boundingBox!==null&&(s.boundingBox={min:s.boundingBox.min.toArray(),max:s.boundingBox.max.toArray()}));function i(r,a){return r[a.uuid]===void 0&&(r[a.uuid]=a.toJSON(A)),a.uuid}if(this.isScene)this.background&&(this.background.isColor?s.background=this.background.toJSON():this.background.isTexture&&(s.background=this.background.toJSON(A).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(s.environment=this.environment.toJSON(A).uuid);else if(this.isMesh||this.isLine||this.isPoints){s.geometry=i(A.geometries,this.geometry);const r=this.geometry.parameters;if(r!==void 0&&r.shapes!==void 0){const a=r.shapes;if(Array.isArray(a))for(let o=0,I=a.length;o<I;o++){const B=a[o];i(A.shapes,B)}else i(A.shapes,a)}}if(this.isSkinnedMesh&&(s.bindMode=this.bindMode,s.bindMatrix=this.bindMatrix.toArray(),this.skeleton!==void 0&&(i(A.skeletons,this.skeleton),s.skeleton=this.skeleton.uuid)),this.material!==void 0)if(Array.isArray(this.material)){const r=[];for(let a=0,o=this.material.length;a<o;a++)r.push(i(A.materials,this.material[a]));s.material=r}else s.material=i(A.materials,this.material);if(this.children.length>0){s.children=[];for(let r=0;r<this.children.length;r++)s.children.push(this.children[r].toJSON(A).object)}if(this.animations.length>0){s.animations=[];for(let r=0;r<this.animations.length;r++){const a=this.animations[r];s.animations.push(i(A.animations,a))}}if(t){const r=n(A.geometries),a=n(A.materials),o=n(A.textures),I=n(A.images),B=n(A.shapes),Q=n(A.skeletons),h=n(A.animations),C=n(A.nodes);r.length>0&&(e.geometries=r),a.length>0&&(e.materials=a),o.length>0&&(e.textures=o),I.length>0&&(e.images=I),B.length>0&&(e.shapes=B),Q.length>0&&(e.skeletons=Q),h.length>0&&(e.animations=h),C.length>0&&(e.nodes=C)}return e.object=s,e;function n(r){const a=[];for(const o in r){const I=r[o];delete I.metadata,a.push(I)}return a}}clone(A){return new this.constructor().copy(this,A)}copy(A,t=!0){if(this.name=A.name,this.up.copy(A.up),this.position.copy(A.position),this.rotation.order=A.rotation.order,this.quaternion.copy(A.quaternion),this.scale.copy(A.scale),this.matrix.copy(A.matrix),this.matrixWorld.copy(A.matrixWorld),this.matrixAutoUpdate=A.matrixAutoUpdate,this.matrixWorldAutoUpdate=A.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=A.matrixWorldNeedsUpdate,this.layers.mask=A.layers.mask,this.visible=A.visible,this.castShadow=A.castShadow,this.receiveShadow=A.receiveShadow,this.frustumCulled=A.frustumCulled,this.renderOrder=A.renderOrder,this.animations=A.animations.slice(),this.userData=JSON.parse(JSON.stringify(A.userData)),t===!0)for(let e=0;e<A.children.length;e++){const s=A.children[e];this.add(s.clone())}return this}}pA.DEFAULT_UP=new f(0,1,0),pA.DEFAULT_MATRIX_AUTO_UPDATE=!0,pA.DEFAULT_MATRIX_WORLD_AUTO_UPDATE=!0;const KA=new f,st=new f,Gs=new f,it=new f,qt=new f,_t=new f,$i=new f,Us=new f,bs=new f,Ls=new f,Ys=new uA,Js=new uA,Ts=new uA;class qA{constructor(A=new f,t=new f,e=new f){this.a=A,this.b=t,this.c=e}static getNormal(A,t,e,s){s.subVectors(e,t),KA.subVectors(A,t),s.cross(KA);const i=s.lengthSq();return i>0?s.multiplyScalar(1/Math.sqrt(i)):s.set(0,0,0)}static getBarycoord(A,t,e,s,i){KA.subVectors(s,t),st.subVectors(e,t),Gs.subVectors(A,t);const n=KA.dot(KA),r=KA.dot(st),a=KA.dot(Gs),o=st.dot(st),I=st.dot(Gs),B=n*o-r*r;if(B===0)return i.set(0,0,0),null;const Q=1/B,h=(o*a-r*I)*Q,C=(n*I-r*a)*Q;return i.set(1-h-C,C,h)}static containsPoint(A,t,e,s){return this.getBarycoord(A,t,e,s,it)===null?!1:it.x>=0&&it.y>=0&&it.x+it.y<=1}static getInterpolation(A,t,e,s,i,n,r,a){return this.getBarycoord(A,t,e,s,it)===null?(a.x=0,a.y=0,"z"in a&&(a.z=0),"w"in a&&(a.w=0),null):(a.setScalar(0),a.addScaledVector(i,it.x),a.addScaledVector(n,it.y),a.addScaledVector(r,it.z),a)}static getInterpolatedAttribute(A,t,e,s,i,n){return Ys.setScalar(0),Js.setScalar(0),Ts.setScalar(0),Ys.fromBufferAttribute(A,t),Js.fromBufferAttribute(A,e),Ts.fromBufferAttribute(A,s),n.setScalar(0),n.addScaledVector(Ys,i.x),n.addScaledVector(Js,i.y),n.addScaledVector(Ts,i.z),n}static isFrontFacing(A,t,e,s){return KA.subVectors(e,t),st.subVectors(A,t),KA.cross(st).dot(s)<0}set(A,t,e){return this.a.copy(A),this.b.copy(t),this.c.copy(e),this}setFromPointsAndIndices(A,t,e,s){return this.a.copy(A[t]),this.b.copy(A[e]),this.c.copy(A[s]),this}setFromAttributeAndIndices(A,t,e,s){return this.a.fromBufferAttribute(A,t),this.b.fromBufferAttribute(A,e),this.c.fromBufferAttribute(A,s),this}clone(){return new this.constructor().copy(this)}copy(A){return this.a.copy(A.a),this.b.copy(A.b),this.c.copy(A.c),this}getArea(){return KA.subVectors(this.c,this.b),st.subVectors(this.a,this.b),KA.cross(st).length()*.5}getMidpoint(A){return A.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(A){return qA.getNormal(this.a,this.b,this.c,A)}getPlane(A){return A.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(A,t){return qA.getBarycoord(A,this.a,this.b,this.c,t)}getInterpolation(A,t,e,s,i){return qA.getInterpolation(A,this.a,this.b,this.c,t,e,s,i)}containsPoint(A){return qA.containsPoint(A,this.a,this.b,this.c)}isFrontFacing(A){return qA.isFrontFacing(this.a,this.b,this.c,A)}intersectsBox(A){return A.intersectsTriangle(this)}closestPointToPoint(A,t){const e=this.a,s=this.b,i=this.c;let n,r;qt.subVectors(s,e),_t.subVectors(i,e),Us.subVectors(A,e);const a=qt.dot(Us),o=_t.dot(Us);if(a<=0&&o<=0)return t.copy(e);bs.subVectors(A,s);const I=qt.dot(bs),B=_t.dot(bs);if(I>=0&&B<=I)return t.copy(s);const Q=a*B-I*o;if(Q<=0&&a>=0&&I<=0)return n=a/(a-I),t.copy(e).addScaledVector(qt,n);Ls.subVectors(A,i);const h=qt.dot(Ls),C=_t.dot(Ls);if(C>=0&&h<=C)return t.copy(i);const E=h*o-a*C;if(E<=0&&o>=0&&C<=0)return r=o/(o-C),t.copy(e).addScaledVector(_t,r);const c=I*C-h*B;if(c<=0&&B-I>=0&&h-C>=0)return $i.subVectors(i,s),r=(B-I)/(B-I+(h-C)),t.copy(s).addScaledVector($i,r);const l=1/(c+E+Q);return n=E*l,r=Q*l,t.copy(e).addScaledVector(qt,n).addScaledVector(_t,r)}equals(A){return A.a.equals(this.a)&&A.b.equals(this.b)&&A.c.equals(this.c)}}const An={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},ut={h:0,s:0,l:0},Je={h:0,s:0,l:0};function Hs(g,A,t){return t<0&&(t+=1),t>1&&(t-=1),t<1/6?g+(A-g)*6*t:t<1/2?A:t<2/3?g+(A-g)*6*(2/3-t):g}class Mt{constructor(A,t,e){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(A,t,e)}set(A,t,e){if(t===void 0&&e===void 0){const s=A;s&&s.isColor?this.copy(s):typeof s=="number"?this.setHex(s):typeof s=="string"&&this.setStyle(s)}else this.setRGB(A,t,e);return this}setScalar(A){return this.r=A,this.g=A,this.b=A,this}setHex(A,t=TA){return A=Math.floor(A),this.r=(A>>16&255)/255,this.g=(A>>8&255)/255,this.b=(A&255)/255,HA.toWorkingColorSpace(this,t),this}setRGB(A,t,e,s=HA.workingColorSpace){return this.r=A,this.g=t,this.b=e,HA.toWorkingColorSpace(this,s),this}setHSL(A,t,e,s=HA.workingColorSpace){if(A=fr(A,1),t=H(t,0,1),e=H(e,0,1),t===0)this.r=this.g=this.b=e;else{const i=e<=.5?e*(1+t):e+t-e*t,n=2*e-i;this.r=Hs(n,i,A+1/3),this.g=Hs(n,i,A),this.b=Hs(n,i,A-1/3)}return HA.toWorkingColorSpace(this,s),this}setStyle(A,t=TA){function e(i){i!==void 0&&parseFloat(i)<1&&console.warn("THREE.Color: Alpha component of "+A+" will be ignored.")}let s;if(s=/^(\\w+)\\(([^\\)]*)\\)/.exec(A)){let i;const n=s[1],r=s[2];switch(n){case"rgb":case"rgba":if(i=/^\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(r))return e(i[4]),this.setRGB(Math.min(255,parseInt(i[1],10))/255,Math.min(255,parseInt(i[2],10))/255,Math.min(255,parseInt(i[3],10))/255,t);if(i=/^\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(r))return e(i[4]),this.setRGB(Math.min(100,parseInt(i[1],10))/100,Math.min(100,parseInt(i[2],10))/100,Math.min(100,parseInt(i[3],10))/100,t);break;case"hsl":case"hsla":if(i=/^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(r))return e(i[4]),this.setHSL(parseFloat(i[1])/360,parseFloat(i[2])/100,parseFloat(i[3])/100,t);break;default:console.warn("THREE.Color: Unknown color model "+A)}}else if(s=/^\\#([A-Fa-f\\d]+)$/.exec(A)){const i=s[1],n=i.length;if(n===3)return this.setRGB(parseInt(i.charAt(0),16)/15,parseInt(i.charAt(1),16)/15,parseInt(i.charAt(2),16)/15,t);if(n===6)return this.setHex(parseInt(i,16),t);console.warn("THREE.Color: Invalid hex color "+A)}else if(A&&A.length>0)return this.setColorName(A,t);return this}setColorName(A,t=TA){const e=An[A.toLowerCase()];return e!==void 0?this.setHex(e,t):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=$A(A.r),this.g=$A(A.g),this.b=$A(A.b),this}copyLinearToSRGB(A){return this.r=bt(A.r),this.g=bt(A.g),this.b=bt(A.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(A=TA){return HA.fromWorkingColorSpace(EA.copy(this),A),Math.round(H(EA.r*255,0,255))*65536+Math.round(H(EA.g*255,0,255))*256+Math.round(H(EA.b*255,0,255))}getHexString(A=TA){return("000000"+this.getHex(A).toString(16)).slice(-6)}getHSL(A,t=HA.workingColorSpace){HA.fromWorkingColorSpace(EA.copy(this),t);const e=EA.r,s=EA.g,i=EA.b,n=Math.max(e,s,i),r=Math.min(e,s,i);let a,o;const I=(r+n)/2;if(r===n)a=0,o=0;else{const B=n-r;switch(o=I<=.5?B/(n+r):B/(2-n-r),n){case e:a=(s-i)/B+(s<i?6:0);break;case s:a=(i-e)/B+2;break;case i:a=(e-s)/B+4;break}a/=6}return A.h=a,A.s=o,A.l=I,A}getRGB(A,t=HA.workingColorSpace){return HA.fromWorkingColorSpace(EA.copy(this),t),A.r=EA.r,A.g=EA.g,A.b=EA.b,A}getStyle(A=TA){HA.fromWorkingColorSpace(EA.copy(this),A);const t=EA.r,e=EA.g,s=EA.b;return A!==TA?`color(${A} ${t.toFixed(3)} ${e.toFixed(3)} ${s.toFixed(3)})`:`rgb(${Math.round(t*255)},${Math.round(e*255)},${Math.round(s*255)})`}offsetHSL(A,t,e){return this.getHSL(ut),this.setHSL(ut.h+A,ut.s+t,ut.l+e)}add(A){return this.r+=A.r,this.g+=A.g,this.b+=A.b,this}addColors(A,t){return this.r=A.r+t.r,this.g=A.g+t.g,this.b=A.b+t.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,t){return this.r+=(A.r-this.r)*t,this.g+=(A.g-this.g)*t,this.b+=(A.b-this.b)*t,this}lerpColors(A,t,e){return this.r=A.r+(t.r-A.r)*e,this.g=A.g+(t.g-A.g)*e,this.b=A.b+(t.b-A.b)*e,this}lerpHSL(A,t){this.getHSL(ut),A.getHSL(Je);const e=ps(ut.h,Je.h,t),s=ps(ut.s,Je.s,t),i=ps(ut.l,Je.l,t);return this.setHSL(e,s,i),this}setFromVector3(A){return this.r=A.x,this.g=A.y,this.b=A.z,this}applyMatrix3(A){const t=this.r,e=this.g,s=this.b,i=A.elements;return this.r=i[0]*t+i[3]*e+i[6]*s,this.g=i[1]*t+i[4]*e+i[7]*s,this.b=i[2]*t+i[5]*e+i[8]*s,this}equals(A){return A.r===this.r&&A.g===this.g&&A.b===this.b}fromArray(A,t=0){return this.r=A[t],this.g=A[t+1],this.b=A[t+2],this}toArray(A=[],t=0){return A[t]=this.r,A[t+1]=this.g,A[t+2]=this.b,A}fromBufferAttribute(A,t){return this.r=A.getX(t),this.g=A.getY(t),this.b=A.getZ(t),this}toJSON(){return this.getHex()}*[Symbol.iterator](){yield this.r,yield this.g,yield this.b}}const EA=new Mt;Mt.NAMES=An;let Yr=0;class tn extends Be{constructor(){super(),this.isMaterial=!0,Object.defineProperty(this,"id",{value:Yr++}),this.uuid=Qe(),this.name="",this.type="Material",this.blending=Di,this.side=ys,this.vertexColors=!1,this.opacity=1,this.transparent=!1,this.alphaHash=!1,this.blendSrc=xi,this.blendDst=Mi,this.blendEquation=mi,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.blendColor=new Mt(0,0,0),this.blendAlpha=0,this.depthFunc=Si,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=Li,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=Ut,this.stencilZFail=Ut,this.stencilZPass=Ut,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.forceSinglePass=!1,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0,this._alphaTest=0}get alphaTest(){return this._alphaTest}set alphaTest(A){this._alphaTest>0!=A>0&&this.version++,this._alphaTest=A}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(A){if(A!==void 0)for(const t in A){const e=A[t];if(e===void 0){console.warn(`THREE.Material: parameter \'${t}\' has value of undefined.`);continue}const s=this[t];if(s===void 0){console.warn(`THREE.Material: \'${t}\' is not a property of THREE.${this.type}.`);continue}s&&s.isColor?s.set(e):s&&s.isVector3&&e&&e.isVector3?s.copy(e):this[t]=e}}toJSON(A){const t=A===void 0||typeof A=="string";t&&(A={textures:{},images:{}});const e={metadata:{version:4.6,type:"Material",generator:"Material.toJSON"}};e.uuid=this.uuid,e.type=this.type,this.name!==""&&(e.name=this.name),this.color&&this.color.isColor&&(e.color=this.color.getHex()),this.roughness!==void 0&&(e.roughness=this.roughness),this.metalness!==void 0&&(e.metalness=this.metalness),this.sheen!==void 0&&(e.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(e.sheenColor=this.sheenColor.getHex()),this.sheenRoughness!==void 0&&(e.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(e.emissive=this.emissive.getHex()),this.emissiveIntensity!==void 0&&this.emissiveIntensity!==1&&(e.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(e.specular=this.specular.getHex()),this.specularIntensity!==void 0&&(e.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(e.specularColor=this.specularColor.getHex()),this.shininess!==void 0&&(e.shininess=this.shininess),this.clearcoat!==void 0&&(e.clearcoat=this.clearcoat),this.clearcoatRoughness!==void 0&&(e.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(e.clearcoatMap=this.clearcoatMap.toJSON(A).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(e.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(A).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(e.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(A).uuid,e.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.dispersion!==void 0&&(e.dispersion=this.dispersion),this.iridescence!==void 0&&(e.iridescence=this.iridescence),this.iridescenceIOR!==void 0&&(e.iridescenceIOR=this.iridescenceIOR),this.iridescenceThicknessRange!==void 0&&(e.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(e.iridescenceMap=this.iridescenceMap.toJSON(A).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(e.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(A).uuid),this.anisotropy!==void 0&&(e.anisotropy=this.anisotropy),this.anisotropyRotation!==void 0&&(e.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(e.anisotropyMap=this.anisotropyMap.toJSON(A).uuid),this.map&&this.map.isTexture&&(e.map=this.map.toJSON(A).uuid),this.matcap&&this.matcap.isTexture&&(e.matcap=this.matcap.toJSON(A).uuid),this.alphaMap&&this.alphaMap.isTexture&&(e.alphaMap=this.alphaMap.toJSON(A).uuid),this.lightMap&&this.lightMap.isTexture&&(e.lightMap=this.lightMap.toJSON(A).uuid,e.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(e.aoMap=this.aoMap.toJSON(A).uuid,e.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(e.bumpMap=this.bumpMap.toJSON(A).uuid,e.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(e.normalMap=this.normalMap.toJSON(A).uuid,e.normalMapType=this.normalMapType,e.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(e.displacementMap=this.displacementMap.toJSON(A).uuid,e.displacementScale=this.displacementScale,e.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(e.roughnessMap=this.roughnessMap.toJSON(A).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(e.metalnessMap=this.metalnessMap.toJSON(A).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(e.emissiveMap=this.emissiveMap.toJSON(A).uuid),this.specularMap&&this.specularMap.isTexture&&(e.specularMap=this.specularMap.toJSON(A).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(e.specularIntensityMap=this.specularIntensityMap.toJSON(A).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(e.specularColorMap=this.specularColorMap.toJSON(A).uuid),this.envMap&&this.envMap.isTexture&&(e.envMap=this.envMap.toJSON(A).uuid,this.combine!==void 0&&(e.combine=this.combine)),this.envMapRotation!==void 0&&(e.envMapRotation=this.envMapRotation.toArray()),this.envMapIntensity!==void 0&&(e.envMapIntensity=this.envMapIntensity),this.reflectivity!==void 0&&(e.reflectivity=this.reflectivity),this.refractionRatio!==void 0&&(e.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(e.gradientMap=this.gradientMap.toJSON(A).uuid),this.transmission!==void 0&&(e.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(e.transmissionMap=this.transmissionMap.toJSON(A).uuid),this.thickness!==void 0&&(e.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(e.thicknessMap=this.thicknessMap.toJSON(A).uuid),this.attenuationDistance!==void 0&&this.attenuationDistance!==1/0&&(e.attenuationDistance=this.attenuationDistance),this.attenuationColor!==void 0&&(e.attenuationColor=this.attenuationColor.getHex()),this.size!==void 0&&(e.size=this.size),this.shadowSide!==null&&(e.shadowSide=this.shadowSide),this.sizeAttenuation!==void 0&&(e.sizeAttenuation=this.sizeAttenuation),this.blending!==Di&&(e.blending=this.blending),this.side!==ys&&(e.side=this.side),this.vertexColors===!0&&(e.vertexColors=!0),this.opacity<1&&(e.opacity=this.opacity),this.transparent===!0&&(e.transparent=!0),this.blendSrc!==xi&&(e.blendSrc=this.blendSrc),this.blendDst!==Mi&&(e.blendDst=this.blendDst),this.blendEquation!==mi&&(e.blendEquation=this.blendEquation),this.blendSrcAlpha!==null&&(e.blendSrcAlpha=this.blendSrcAlpha),this.blendDstAlpha!==null&&(e.blendDstAlpha=this.blendDstAlpha),this.blendEquationAlpha!==null&&(e.blendEquationAlpha=this.blendEquationAlpha),this.blendColor&&this.blendColor.isColor&&(e.blendColor=this.blendColor.getHex()),this.blendAlpha!==0&&(e.blendAlpha=this.blendAlpha),this.depthFunc!==Si&&(e.depthFunc=this.depthFunc),this.depthTest===!1&&(e.depthTest=this.depthTest),this.depthWrite===!1&&(e.depthWrite=this.depthWrite),this.colorWrite===!1&&(e.colorWrite=this.colorWrite),this.stencilWriteMask!==255&&(e.stencilWriteMask=this.stencilWriteMask),this.stencilFunc!==Li&&(e.stencilFunc=this.stencilFunc),this.stencilRef!==0&&(e.stencilRef=this.stencilRef),this.stencilFuncMask!==255&&(e.stencilFuncMask=this.stencilFuncMask),this.stencilFail!==Ut&&(e.stencilFail=this.stencilFail),this.stencilZFail!==Ut&&(e.stencilZFail=this.stencilZFail),this.stencilZPass!==Ut&&(e.stencilZPass=this.stencilZPass),this.stencilWrite===!0&&(e.stencilWrite=this.stencilWrite),this.rotation!==void 0&&this.rotation!==0&&(e.rotation=this.rotation),this.polygonOffset===!0&&(e.polygonOffset=!0),this.polygonOffsetFactor!==0&&(e.polygonOffsetFactor=this.polygonOffsetFactor),this.polygonOffsetUnits!==0&&(e.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth!==void 0&&this.linewidth!==1&&(e.linewidth=this.linewidth),this.dashSize!==void 0&&(e.dashSize=this.dashSize),this.gapSize!==void 0&&(e.gapSize=this.gapSize),this.scale!==void 0&&(e.scale=this.scale),this.dithering===!0&&(e.dithering=!0),this.alphaTest>0&&(e.alphaTest=this.alphaTest),this.alphaHash===!0&&(e.alphaHash=!0),this.alphaToCoverage===!0&&(e.alphaToCoverage=!0),this.premultipliedAlpha===!0&&(e.premultipliedAlpha=!0),this.forceSinglePass===!0&&(e.forceSinglePass=!0),this.wireframe===!0&&(e.wireframe=!0),this.wireframeLinewidth>1&&(e.wireframeLinewidth=this.wireframeLinewidth),this.wireframeLinecap!=="round"&&(e.wireframeLinecap=this.wireframeLinecap),this.wireframeLinejoin!=="round"&&(e.wireframeLinejoin=this.wireframeLinejoin),this.flatShading===!0&&(e.flatShading=!0),this.visible===!1&&(e.visible=!1),this.toneMapped===!1&&(e.toneMapped=!1),this.fog===!1&&(e.fog=!1),Object.keys(this.userData).length>0&&(e.userData=this.userData);function s(i){const n=[];for(const r in i){const a=i[r];delete a.metadata,n.push(a)}return n}if(t){const i=s(A.textures),n=s(A.images);i.length>0&&(e.textures=i),n.length>0&&(e.images=n)}return e}clone(){return new this.constructor().copy(this)}copy(A){this.name=A.name,this.blending=A.blending,this.side=A.side,this.vertexColors=A.vertexColors,this.opacity=A.opacity,this.transparent=A.transparent,this.blendSrc=A.blendSrc,this.blendDst=A.blendDst,this.blendEquation=A.blendEquation,this.blendSrcAlpha=A.blendSrcAlpha,this.blendDstAlpha=A.blendDstAlpha,this.blendEquationAlpha=A.blendEquationAlpha,this.blendColor.copy(A.blendColor),this.blendAlpha=A.blendAlpha,this.depthFunc=A.depthFunc,this.depthTest=A.depthTest,this.depthWrite=A.depthWrite,this.stencilWriteMask=A.stencilWriteMask,this.stencilFunc=A.stencilFunc,this.stencilRef=A.stencilRef,this.stencilFuncMask=A.stencilFuncMask,this.stencilFail=A.stencilFail,this.stencilZFail=A.stencilZFail,this.stencilZPass=A.stencilZPass,this.stencilWrite=A.stencilWrite;const t=A.clippingPlanes;let e=null;if(t!==null){const s=t.length;e=new Array(s);for(let i=0;i!==s;++i)e[i]=t[i].clone()}return this.clippingPlanes=e,this.clipIntersection=A.clipIntersection,this.clipShadows=A.clipShadows,this.shadowSide=A.shadowSide,this.colorWrite=A.colorWrite,this.precision=A.precision,this.polygonOffset=A.polygonOffset,this.polygonOffsetFactor=A.polygonOffsetFactor,this.polygonOffsetUnits=A.polygonOffsetUnits,this.dithering=A.dithering,this.alphaTest=A.alphaTest,this.alphaHash=A.alphaHash,this.alphaToCoverage=A.alphaToCoverage,this.premultipliedAlpha=A.premultipliedAlpha,this.forceSinglePass=A.forceSinglePass,this.visible=A.visible,this.toneMapped=A.toneMapped,this.userData=JSON.parse(JSON.stringify(A.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(A){A===!0&&this.version++}onBuild(){console.warn("Material: onBuild() has been removed.")}}class Jr extends tn{constructor(A){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new Mt(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new xt,this.combine=Er,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(A)}copy(A){return super.copy(A),this.color.copy(A.color),this.map=A.map,this.lightMap=A.lightMap,this.lightMapIntensity=A.lightMapIntensity,this.aoMap=A.aoMap,this.aoMapIntensity=A.aoMapIntensity,this.specularMap=A.specularMap,this.alphaMap=A.alphaMap,this.envMap=A.envMap,this.envMapRotation.copy(A.envMapRotation),this.combine=A.combine,this.reflectivity=A.reflectivity,this.refractionRatio=A.refractionRatio,this.wireframe=A.wireframe,this.wireframeLinewidth=A.wireframeLinewidth,this.wireframeLinecap=A.wireframeLinecap,this.wireframeLinejoin=A.wireframeLinejoin,this.fog=A.fog,this}}const eA=new f,Te=new wA;class Zt{constructor(A,t,e=!1){if(Array.isArray(A))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,this.name="",this.array=A,this.itemSize=t,this.count=A!==void 0?A.length/t:0,this.normalized=e,this.usage=Yi,this.updateRanges=[],this.gpuType=lr,this.version=0}onUploadCallback(){}set needsUpdate(A){A===!0&&this.version++}setUsage(A){return this.usage=A,this}addUpdateRange(A,t){this.updateRanges.push({start:A,count:t})}clearUpdateRanges(){this.updateRanges.length=0}copy(A){return this.name=A.name,this.array=new A.array.constructor(A.array),this.itemSize=A.itemSize,this.count=A.count,this.normalized=A.normalized,this.usage=A.usage,this.gpuType=A.gpuType,this}copyAt(A,t,e){A*=this.itemSize,e*=t.itemSize;for(let s=0,i=this.itemSize;s<i;s++)this.array[A+s]=t.array[e+s];return this}copyArray(A){return this.array.set(A),this}applyMatrix3(A){if(this.itemSize===2)for(let t=0,e=this.count;t<e;t++)Te.fromBufferAttribute(this,t),Te.applyMatrix3(A),this.setXY(t,Te.x,Te.y);else if(this.itemSize===3)for(let t=0,e=this.count;t<e;t++)eA.fromBufferAttribute(this,t),eA.applyMatrix3(A),this.setXYZ(t,eA.x,eA.y,eA.z);return this}applyMatrix4(A){for(let t=0,e=this.count;t<e;t++)eA.fromBufferAttribute(this,t),eA.applyMatrix4(A),this.setXYZ(t,eA.x,eA.y,eA.z);return this}applyNormalMatrix(A){for(let t=0,e=this.count;t<e;t++)eA.fromBufferAttribute(this,t),eA.applyNormalMatrix(A),this.setXYZ(t,eA.x,eA.y,eA.z);return this}transformDirection(A){for(let t=0,e=this.count;t<e;t++)eA.fromBufferAttribute(this,t),eA.transformDirection(A),this.setXYZ(t,eA.x,eA.y,eA.z);return this}set(A,t=0){return this.array.set(A,t),this}getComponent(A,t){let e=this.array[A*this.itemSize+t];return this.normalized&&(e=he(e,this.array)),e}setComponent(A,t,e){return this.normalized&&(e=yA(e,this.array)),this.array[A*this.itemSize+t]=e,this}getX(A){let t=this.array[A*this.itemSize];return this.normalized&&(t=he(t,this.array)),t}setX(A,t){return this.normalized&&(t=yA(t,this.array)),this.array[A*this.itemSize]=t,this}getY(A){let t=this.array[A*this.itemSize+1];return this.normalized&&(t=he(t,this.array)),t}setY(A,t){return this.normalized&&(t=yA(t,this.array)),this.array[A*this.itemSize+1]=t,this}getZ(A){let t=this.array[A*this.itemSize+2];return this.normalized&&(t=he(t,this.array)),t}setZ(A,t){return this.normalized&&(t=yA(t,this.array)),this.array[A*this.itemSize+2]=t,this}getW(A){let t=this.array[A*this.itemSize+3];return this.normalized&&(t=he(t,this.array)),t}setW(A,t){return this.normalized&&(t=yA(t,this.array)),this.array[A*this.itemSize+3]=t,this}setXY(A,t,e){return A*=this.itemSize,this.normalized&&(t=yA(t,this.array),e=yA(e,this.array)),this.array[A+0]=t,this.array[A+1]=e,this}setXYZ(A,t,e,s){return A*=this.itemSize,this.normalized&&(t=yA(t,this.array),e=yA(e,this.array),s=yA(s,this.array)),this.array[A+0]=t,this.array[A+1]=e,this.array[A+2]=s,this}setXYZW(A,t,e,s,i){return A*=this.itemSize,this.normalized&&(t=yA(t,this.array),e=yA(e,this.array),s=yA(s,this.array),i=yA(i,this.array)),this.array[A+0]=t,this.array[A+1]=e,this.array[A+2]=s,this.array[A+3]=i,this}onUpload(A){return this.onUploadCallback=A,this}clone(){return new this.constructor(this.array,this.itemSize).copy(this)}toJSON(){const A={itemSize:this.itemSize,type:this.array.constructor.name,array:Array.from(this.array),normalized:this.normalized};return this.name!==""&&(A.name=this.name),this.usage!==Yi&&(A.usage=this.usage),A}}class Tr extends Zt{constructor(A,t,e){super(new Uint16Array(A),t,e)}}class Hr extends Zt{constructor(A,t,e){super(new Uint32Array(A),t,e)}}class He extends Zt{constructor(A,t,e){super(new Float32Array(A),t,e)}}let vr=0;const UA=new CA,vs=new pA,Wt=new f,FA=new Yt,le=new Yt,aA=new f;class ve extends Be{constructor(){super(),this.isBufferGeometry=!0,Object.defineProperty(this,"id",{value:vr++}),this.uuid=Qe(),this.name="",this.type="BufferGeometry",this.index=null,this.indirect=null,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}getIndex(){return this.index}setIndex(A){return Array.isArray(A)?this.index=new(yr(A)?Hr:Tr)(A,1):this.index=A,this}setIndirect(A){return this.indirect=A,this}getIndirect(){return this.indirect}getAttribute(A){return this.attributes[A]}setAttribute(A,t){return this.attributes[A]=t,this}deleteAttribute(A){return delete this.attributes[A],this}hasAttribute(A){return this.attributes[A]!==void 0}addGroup(A,t,e=0){this.groups.push({start:A,count:t,materialIndex:e})}clearGroups(){this.groups=[]}setDrawRange(A,t){this.drawRange.start=A,this.drawRange.count=t}applyMatrix4(A){const t=this.attributes.position;t!==void 0&&(t.applyMatrix4(A),t.needsUpdate=!0);const e=this.attributes.normal;if(e!==void 0){const i=new PA().getNormalMatrix(A);e.applyNormalMatrix(i),e.needsUpdate=!0}const s=this.attributes.tangent;return s!==void 0&&(s.transformDirection(A),s.needsUpdate=!0),this.boundingBox!==null&&this.computeBoundingBox(),this.boundingSphere!==null&&this.computeBoundingSphere(),this}applyQuaternion(A){return UA.makeRotationFromQuaternion(A),this.applyMatrix4(UA),this}rotateX(A){return UA.makeRotationX(A),this.applyMatrix4(UA),this}rotateY(A){return UA.makeRotationY(A),this.applyMatrix4(UA),this}rotateZ(A){return UA.makeRotationZ(A),this.applyMatrix4(UA),this}translate(A,t,e){return UA.makeTranslation(A,t,e),this.applyMatrix4(UA),this}scale(A,t,e){return UA.makeScale(A,t,e),this.applyMatrix4(UA),this}lookAt(A){return vs.lookAt(A),vs.updateMatrix(),this.applyMatrix4(vs.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(Wt).negate(),this.translate(Wt.x,Wt.y,Wt.z),this}setFromPoints(A){const t=this.getAttribute("position");if(t===void 0){const e=[];for(let s=0,i=A.length;s<i;s++){const n=A[s];e.push(n.x,n.y,n.z||0)}this.setAttribute("position",new He(e,3))}else{const e=Math.min(A.length,t.count);for(let s=0;s<e;s++){const i=A[s];t.setXYZ(s,i.x,i.y,i.z||0)}A.length>t.count&&console.warn("THREE.BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry."),t.needsUpdate=!0}return this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new Yt);const A=this.attributes.position,t=this.morphAttributes.position;if(A&&A.isGLBufferAttribute){console.error("THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.",this),this.boundingBox.set(new f(-1/0,-1/0,-1/0),new f(1/0,1/0,1/0));return}if(A!==void 0){if(this.boundingBox.setFromBufferAttribute(A),t)for(let e=0,s=t.length;e<s;e++){const i=t[e];FA.setFromBufferAttribute(i),this.morphTargetsRelative?(aA.addVectors(this.boundingBox.min,FA.min),this.boundingBox.expandByPoint(aA),aA.addVectors(this.boundingBox.max,FA.max),this.boundingBox.expandByPoint(aA)):(this.boundingBox.expandByPoint(FA.min),this.boundingBox.expandByPoint(FA.max))}}else this.boundingBox.makeEmpty();(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))&&console.error(\'THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values.\',this)}computeBoundingSphere(){this.boundingSphere===null&&(this.boundingSphere=new _i);const A=this.attributes.position,t=this.morphAttributes.position;if(A&&A.isGLBufferAttribute){console.error("THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere.",this),this.boundingSphere.set(new f,1/0);return}if(A){const e=this.boundingSphere.center;if(FA.setFromBufferAttribute(A),t)for(let i=0,n=t.length;i<n;i++){const r=t[i];le.setFromBufferAttribute(r),this.morphTargetsRelative?(aA.addVectors(FA.min,le.min),FA.expandByPoint(aA),aA.addVectors(FA.max,le.max),FA.expandByPoint(aA)):(FA.expandByPoint(le.min),FA.expandByPoint(le.max))}FA.getCenter(e);let s=0;for(let i=0,n=A.count;i<n;i++)aA.fromBufferAttribute(A,i),s=Math.max(s,e.distanceToSquared(aA));if(t)for(let i=0,n=t.length;i<n;i++){const r=t[i],a=this.morphTargetsRelative;for(let o=0,I=r.count;o<I;o++)aA.fromBufferAttribute(r,o),a&&(Wt.fromBufferAttribute(A,o),aA.add(Wt)),s=Math.max(s,e.distanceToSquared(aA))}this.boundingSphere.radius=Math.sqrt(s),isNaN(this.boundingSphere.radius)&&console.error(\'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.\',this)}}computeTangents(){const A=this.index,t=this.attributes;if(A===null||t.position===void 0||t.normal===void 0||t.uv===void 0){console.error("THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)");return}const e=t.position,s=t.normal,i=t.uv;this.hasAttribute("tangent")===!1&&this.setAttribute("tangent",new Zt(new Float32Array(4*e.count),4));const n=this.getAttribute("tangent"),r=[],a=[];for(let w=0;w<e.count;w++)r[w]=new f,a[w]=new f;const o=new f,I=new f,B=new f,Q=new wA,h=new wA,C=new wA,E=new f,c=new f;function l(w,p,N){o.fromBufferAttribute(e,w),I.fromBufferAttribute(e,p),B.fromBufferAttribute(e,N),Q.fromBufferAttribute(i,w),h.fromBufferAttribute(i,p),C.fromBufferAttribute(i,N),I.sub(o),B.sub(o),h.sub(Q),C.sub(Q);const M=1/(h.x*C.y-C.x*h.y);isFinite(M)&&(E.copy(I).multiplyScalar(C.y).addScaledVector(B,-h.y).multiplyScalar(M),c.copy(B).multiplyScalar(h.x).addScaledVector(I,-C.x).multiplyScalar(M),r[w].add(E),r[p].add(E),r[N].add(E),a[w].add(c),a[p].add(c),a[N].add(c))}let u=this.groups;u.length===0&&(u=[{start:0,count:A.count}]);for(let w=0,p=u.length;w<p;++w){const N=u[w],M=N.start,S=N.count;for(let F=M,k=M+S;F<k;F+=3)l(A.getX(F+0),A.getX(F+1),A.getX(F+2))}const d=new f,y=new f,D=new f,m=new f;function x(w){D.fromBufferAttribute(s,w),m.copy(D);const p=r[w];d.copy(p),d.sub(D.multiplyScalar(D.dot(p))).normalize(),y.crossVectors(m,p);const M=y.dot(a[w])<0?-1:1;n.setXYZW(w,d.x,d.y,d.z,M)}for(let w=0,p=u.length;w<p;++w){const N=u[w],M=N.start,S=N.count;for(let F=M,k=M+S;F<k;F+=3)x(A.getX(F+0)),x(A.getX(F+1)),x(A.getX(F+2))}}computeVertexNormals(){const A=this.index,t=this.getAttribute("position");if(t!==void 0){let e=this.getAttribute("normal");if(e===void 0)e=new Zt(new Float32Array(t.count*3),3),this.setAttribute("normal",e);else for(let Q=0,h=e.count;Q<h;Q++)e.setXYZ(Q,0,0,0);const s=new f,i=new f,n=new f,r=new f,a=new f,o=new f,I=new f,B=new f;if(A)for(let Q=0,h=A.count;Q<h;Q+=3){const C=A.getX(Q+0),E=A.getX(Q+1),c=A.getX(Q+2);s.fromBufferAttribute(t,C),i.fromBufferAttribute(t,E),n.fromBufferAttribute(t,c),I.subVectors(n,i),B.subVectors(s,i),I.cross(B),r.fromBufferAttribute(e,C),a.fromBufferAttribute(e,E),o.fromBufferAttribute(e,c),r.add(I),a.add(I),o.add(I),e.setXYZ(C,r.x,r.y,r.z),e.setXYZ(E,a.x,a.y,a.z),e.setXYZ(c,o.x,o.y,o.z)}else for(let Q=0,h=t.count;Q<h;Q+=3)s.fromBufferAttribute(t,Q+0),i.fromBufferAttribute(t,Q+1),n.fromBufferAttribute(t,Q+2),I.subVectors(n,i),B.subVectors(s,i),I.cross(B),e.setXYZ(Q+0,I.x,I.y,I.z),e.setXYZ(Q+1,I.x,I.y,I.z),e.setXYZ(Q+2,I.x,I.y,I.z);this.normalizeNormals(),e.needsUpdate=!0}}normalizeNormals(){const A=this.attributes.normal;for(let t=0,e=A.count;t<e;t++)aA.fromBufferAttribute(A,t),aA.normalize(),A.setXYZ(t,aA.x,aA.y,aA.z)}toNonIndexed(){function A(r,a){const o=r.array,I=r.itemSize,B=r.normalized,Q=new o.constructor(a.length*I);let h=0,C=0;for(let E=0,c=a.length;E<c;E++){r.isInterleavedBufferAttribute?h=a[E]*r.data.stride+r.offset:h=a[E]*I;for(let l=0;l<I;l++)Q[C++]=o[h++]}return new Zt(Q,I,B)}if(this.index===null)return console.warn("THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed."),this;const t=new ve,e=this.index.array,s=this.attributes;for(const r in s){const a=s[r],o=A(a,e);t.setAttribute(r,o)}const i=this.morphAttributes;for(const r in i){const a=[],o=i[r];for(let I=0,B=o.length;I<B;I++){const Q=o[I],h=A(Q,e);a.push(h)}t.morphAttributes[r]=a}t.morphTargetsRelative=this.morphTargetsRelative;const n=this.groups;for(let r=0,a=n.length;r<a;r++){const o=n[r];t.addGroup(o.start,o.count,o.materialIndex)}return t}toJSON(){const A={metadata:{version:4.6,type:"BufferGeometry",generator:"BufferGeometry.toJSON"}};if(A.uuid=this.uuid,A.type=this.type,this.name!==""&&(A.name=this.name),Object.keys(this.userData).length>0&&(A.userData=this.userData),this.parameters!==void 0){const a=this.parameters;for(const o in a)a[o]!==void 0&&(A[o]=a[o]);return A}A.data={attributes:{}};const t=this.index;t!==null&&(A.data.index={type:t.array.constructor.name,array:Array.prototype.slice.call(t.array)});const e=this.attributes;for(const a in e){const o=e[a];A.data.attributes[a]=o.toJSON(A.data)}const s={};let i=!1;for(const a in this.morphAttributes){const o=this.morphAttributes[a],I=[];for(let B=0,Q=o.length;B<Q;B++){const h=o[B];I.push(h.toJSON(A.data))}I.length>0&&(s[a]=I,i=!0)}i&&(A.data.morphAttributes=s,A.data.morphTargetsRelative=this.morphTargetsRelative);const n=this.groups;n.length>0&&(A.data.groups=JSON.parse(JSON.stringify(n)));const r=this.boundingSphere;return r!==null&&(A.data.boundingSphere={center:r.center.toArray(),radius:r.radius}),A}clone(){return new this.constructor().copy(this)}copy(A){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const t={};this.name=A.name;const e=A.index;e!==null&&this.setIndex(e.clone(t));const s=A.attributes;for(const o in s){const I=s[o];this.setAttribute(o,I.clone(t))}const i=A.morphAttributes;for(const o in i){const I=[],B=i[o];for(let Q=0,h=B.length;Q<h;Q++)I.push(B[Q].clone(t));this.morphAttributes[o]=I}this.morphTargetsRelative=A.morphTargetsRelative;const n=A.groups;for(let o=0,I=n.length;o<I;o++){const B=n[o];this.addGroup(B.start,B.count,B.materialIndex)}const r=A.boundingBox;r!==null&&(this.boundingBox=r.clone());const a=A.boundingSphere;return a!==null&&(this.boundingSphere=a.clone()),this.drawRange.start=A.drawRange.start,this.drawRange.count=A.drawRange.count,this.userData=A.userData,this}dispose(){this.dispatchEvent({type:"dispose"})}}const en=new CA,St=new Fr,ze=new _i,sn=new f,Ke=new f,qe=new f,_e=new f,zs=new f,Ze=new f,nn=new f,We=new f;class rn extends pA{constructor(A=new ve,t=new Jr){super(),this.isMesh=!0,this.type="Mesh",this.geometry=A,this.material=t,this.updateMorphTargets()}copy(A,t){return super.copy(A,t),A.morphTargetInfluences!==void 0&&(this.morphTargetInfluences=A.morphTargetInfluences.slice()),A.morphTargetDictionary!==void 0&&(this.morphTargetDictionary=Object.assign({},A.morphTargetDictionary)),this.material=Array.isArray(A.material)?A.material.slice():A.material,this.geometry=A.geometry,this}updateMorphTargets(){const t=this.geometry.morphAttributes,e=Object.keys(t);if(e.length>0){const s=t[e[0]];if(s!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let i=0,n=s.length;i<n;i++){const r=s[i].name||String(i);this.morphTargetInfluences.push(0),this.morphTargetDictionary[r]=i}}}}getVertexPosition(A,t){const e=this.geometry,s=e.attributes.position,i=e.morphAttributes.position,n=e.morphTargetsRelative;t.fromBufferAttribute(s,A);const r=this.morphTargetInfluences;if(i&&r){Ze.set(0,0,0);for(let a=0,o=i.length;a<o;a++){const I=r[a],B=i[a];I!==0&&(zs.fromBufferAttribute(B,A),n?Ze.addScaledVector(zs,I):Ze.addScaledVector(zs.sub(t),I))}t.add(Ze)}return t}raycast(A,t){const e=this.geometry,s=this.material,i=this.matrixWorld;s!==void 0&&(e.boundingSphere===null&&e.computeBoundingSphere(),ze.copy(e.boundingSphere),ze.applyMatrix4(i),St.copy(A.ray).recast(A.near),!(ze.containsPoint(St.origin)===!1&&(St.intersectSphere(ze,sn)===null||St.origin.distanceToSquared(sn)>(A.far-A.near)**2))&&(en.copy(i).invert(),St.copy(A.ray).applyMatrix4(en),!(e.boundingBox!==null&&St.intersectsBox(e.boundingBox)===!1)&&this._computeIntersections(A,t,St)))}_computeIntersections(A,t,e){let s;const i=this.geometry,n=this.material,r=i.index,a=i.attributes.position,o=i.attributes.uv,I=i.attributes.uv1,B=i.attributes.normal,Q=i.groups,h=i.drawRange;if(r!==null)if(Array.isArray(n))for(let C=0,E=Q.length;C<E;C++){const c=Q[C],l=n[c.materialIndex],u=Math.max(c.start,h.start),d=Math.min(r.count,Math.min(c.start+c.count,h.start+h.count));for(let y=u,D=d;y<D;y+=3){const m=r.getX(y),x=r.getX(y+1),w=r.getX(y+2);s=Oe(this,l,A,e,o,I,B,m,x,w),s&&(s.faceIndex=Math.floor(y/3),s.face.materialIndex=c.materialIndex,t.push(s))}}else{const C=Math.max(0,h.start),E=Math.min(r.count,h.start+h.count);for(let c=C,l=E;c<l;c+=3){const u=r.getX(c),d=r.getX(c+1),y=r.getX(c+2);s=Oe(this,n,A,e,o,I,B,u,d,y),s&&(s.faceIndex=Math.floor(c/3),t.push(s))}}else if(a!==void 0)if(Array.isArray(n))for(let C=0,E=Q.length;C<E;C++){const c=Q[C],l=n[c.materialIndex],u=Math.max(c.start,h.start),d=Math.min(a.count,Math.min(c.start+c.count,h.start+h.count));for(let y=u,D=d;y<D;y+=3){const m=y,x=y+1,w=y+2;s=Oe(this,l,A,e,o,I,B,m,x,w),s&&(s.faceIndex=Math.floor(y/3),s.face.materialIndex=c.materialIndex,t.push(s))}}else{const C=Math.max(0,h.start),E=Math.min(a.count,h.start+h.count);for(let c=C,l=E;c<l;c+=3){const u=c,d=c+1,y=c+2;s=Oe(this,n,A,e,o,I,B,u,d,y),s&&(s.faceIndex=Math.floor(c/3),t.push(s))}}}}function zr(g,A,t,e,s,i,n,r){let a;if(A.side===Cr?a=e.intersectTriangle(n,i,s,!0,r):a=e.intersectTriangle(s,i,n,A.side===ys,r),a===null)return null;We.copy(r),We.applyMatrix4(g.matrixWorld);const o=t.ray.origin.distanceTo(We);return o<t.near||o>t.far?null:{distance:o,point:We.clone(),object:g}}function Oe(g,A,t,e,s,i,n,r,a,o){g.getVertexPosition(r,Ke),g.getVertexPosition(a,qe),g.getVertexPosition(o,_e);const I=zr(g,A,t,e,Ke,qe,_e,nn);if(I){const B=new f;qA.getBarycoord(nn,Ke,qe,_e,B),s&&(I.uv=qA.getInterpolatedAttribute(s,r,a,o,B,new wA)),i&&(I.uv1=qA.getInterpolatedAttribute(i,r,a,o,B,new wA)),n&&(I.normal=qA.getInterpolatedAttribute(n,r,a,o,B,new f),I.normal.dot(e.direction)>0&&I.normal.multiplyScalar(-1));const Q={a:r,b:a,c:o,normal:new f,materialIndex:0};qA.getNormal(Ke,qe,_e,Q.normal),I.face=Q,I.barycoord=B}return I}function Kr(g){const A={};for(const t in g){A[t]={};for(const e in g[t]){const s=g[t][e];s&&(s.isColor||s.isMatrix3||s.isMatrix4||s.isVector2||s.isVector3||s.isVector4||s.isTexture||s.isQuaternion)?s.isRenderTargetTexture?(console.warn("UniformsUtils: Textures of render targets cannot be cloned via cloneUniforms() or mergeUniforms()."),A[t][e]=null):A[t][e]=s.clone():Array.isArray(s)?A[t][e]=s.slice():A[t][e]=s}}return A}function qr(g){const A=[];for(let t=0;t<g.length;t++)A.push(g[t].clone());return A}var _r=`void main() {\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}`,Zr=`void main() {\n gl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}`;class Wr extends tn{constructor(A){super(),this.isShaderMaterial=!0,this.type="ShaderMaterial",this.defines={},this.uniforms={},this.uniformsGroups=[],this.vertexShader=_r,this.fragmentShader=Zr,this.linewidth=1,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.clipping=!1,this.forceSinglePass=!0,this.extensions={clipCullDistance:!1,multiDraw:!1},this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv1:[0,0]},this.index0AttributeName=void 0,this.uniformsNeedUpdate=!1,this.glslVersion=null,A!==void 0&&this.setValues(A)}copy(A){return super.copy(A),this.fragmentShader=A.fragmentShader,this.vertexShader=A.vertexShader,this.uniforms=Kr(A.uniforms),this.uniformsGroups=qr(A.uniformsGroups),this.defines=Object.assign({},A.defines),this.wireframe=A.wireframe,this.wireframeLinewidth=A.wireframeLinewidth,this.fog=A.fog,this.lights=A.lights,this.clipping=A.clipping,this.extensions=Object.assign({},A.extensions),this.glslVersion=A.glslVersion,this}toJSON(A){const t=super.toJSON(A);t.glslVersion=this.glslVersion,t.uniforms={};for(const s in this.uniforms){const n=this.uniforms[s].value;n&&n.isTexture?t.uniforms[s]={type:"t",value:n.toJSON(A).uuid}:n&&n.isColor?t.uniforms[s]={type:"c",value:n.getHex()}:n&&n.isVector2?t.uniforms[s]={type:"v2",value:n.toArray()}:n&&n.isVector3?t.uniforms[s]={type:"v3",value:n.toArray()}:n&&n.isVector4?t.uniforms[s]={type:"v4",value:n.toArray()}:n&&n.isMatrix3?t.uniforms[s]={type:"m3",value:n.toArray()}:n&&n.isMatrix4?t.uniforms[s]={type:"m4",value:n.toArray()}:t.uniforms[s]={value:n}}Object.keys(this.defines).length>0&&(t.defines=this.defines),t.vertexShader=this.vertexShader,t.fragmentShader=this.fragmentShader,t.lights=this.lights,t.clipping=this.clipping;const e={};for(const s in this.extensions)this.extensions[s]===!0&&(e[s]=!0);return Object.keys(e).length>0&&(t.extensions=e),t}}class an extends pA{constructor(){super(),this.isCamera=!0,this.type="Camera",this.matrixWorldInverse=new CA,this.projectionMatrix=new CA,this.projectionMatrixInverse=new CA,this.coordinateSystem=Ie}copy(A,t){return super.copy(A,t),this.matrixWorldInverse.copy(A.matrixWorldInverse),this.projectionMatrix.copy(A.projectionMatrix),this.projectionMatrixInverse.copy(A.projectionMatrixInverse),this.coordinateSystem=A.coordinateSystem,this}getWorldDirection(A){return super.getWorldDirection(A).negate()}updateMatrixWorld(A){super.updateMatrixWorld(A),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(A,t){super.updateWorldMatrix(A,t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return new this.constructor().copy(this)}}class gn extends pA{constructor(){super(),this.isScene=!0,this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.backgroundBlurriness=0,this.backgroundIntensity=1,this.backgroundRotation=new xt,this.environmentIntensity=1,this.environmentRotation=new xt,this.overrideMaterial=null,typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(A,t){return super.copy(A,t),A.background!==null&&(this.background=A.background.clone()),A.environment!==null&&(this.environment=A.environment.clone()),A.fog!==null&&(this.fog=A.fog.clone()),this.backgroundBlurriness=A.backgroundBlurriness,this.backgroundIntensity=A.backgroundIntensity,this.backgroundRotation.copy(A.backgroundRotation),this.environmentIntensity=A.environmentIntensity,this.environmentRotation.copy(A.environmentRotation),A.overrideMaterial!==null&&(this.overrideMaterial=A.overrideMaterial.clone()),this.matrixAutoUpdate=A.matrixAutoUpdate,this}toJSON(A){const t=super.toJSON(A);return this.fog!==null&&(t.object.fog=this.fog.toJSON()),this.backgroundBlurriness>0&&(t.object.backgroundBlurriness=this.backgroundBlurriness),this.backgroundIntensity!==1&&(t.object.backgroundIntensity=this.backgroundIntensity),t.object.backgroundRotation=this.backgroundRotation.toArray(),this.environmentIntensity!==1&&(t.object.environmentIntensity=this.environmentIntensity),t.object.environmentRotation=this.environmentRotation.toArray(),t}}class Or extends VA{constructor(A=null,t=1,e=1,s,i,n,r,a,o=Qt,I=Qt,B,Q){super(null,n,r,a,o,I,s,i,B,Q),this.isDataTexture=!0,this.image={data:A,width:t,height:e},this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}}class je extends ve{constructor(A=1,t=1,e=1,s=1){super(),this.type="PlaneGeometry",this.parameters={width:A,height:t,widthSegments:e,heightSegments:s};const i=A/2,n=t/2,r=Math.floor(e),a=Math.floor(s),o=r+1,I=a+1,B=A/r,Q=t/a,h=[],C=[],E=[],c=[];for(let l=0;l<I;l++){const u=l*Q-n;for(let d=0;d<o;d++){const y=d*B-i;C.push(y,-u,0),E.push(0,0,1),c.push(d/r),c.push(1-l/a)}}for(let l=0;l<a;l++)for(let u=0;u<r;u++){const d=u+o*l,y=u+o*(l+1),D=u+1+o*(l+1),m=u+1+o*l;h.push(d,y,m),h.push(y,D,m)}this.setIndex(h),this.setAttribute("position",new He(C,3)),this.setAttribute("normal",new He(E,3)),this.setAttribute("uv",new He(c,2))}copy(A){return super.copy(A),this.parameters=Object.assign({},A.parameters),this}static fromJSON(A){return new je(A.width,A.height,A.widthSegments,A.heightSegments)}}class Ks extends Wr{constructor(A){super(A),this.isRawShaderMaterial=!0,this.type="RawShaderMaterial"}}const on={enabled:!1,files:{},add:function(g,A){this.enabled!==!1&&(this.files[g]=A)},get:function(g){if(this.enabled!==!1)return this.files[g]},remove:function(g){delete this.files[g]},clear:function(){this.files={}}};class jr{constructor(A,t,e){const s=this;let i=!1,n=0,r=0,a;const o=[];this.onStart=void 0,this.onLoad=A,this.onProgress=t,this.onError=e,this.itemStart=function(I){r++,i===!1&&s.onStart!==void 0&&s.onStart(I,n,r),i=!0},this.itemEnd=function(I){n++,s.onProgress!==void 0&&s.onProgress(I,n,r),n===r&&(i=!1,s.onLoad!==void 0&&s.onLoad())},this.itemError=function(I){s.onError!==void 0&&s.onError(I)},this.resolveURL=function(I){return a?a(I):I},this.setURLModifier=function(I){return a=I,this},this.addHandler=function(I,B){return o.push(I,B),this},this.removeHandler=function(I){const B=o.indexOf(I);return B!==-1&&o.splice(B,2),this},this.getHandler=function(I){for(let B=0,Q=o.length;B<Q;B+=2){const h=o[B],C=o[B+1];if(h.global&&(h.lastIndex=0),h.test(I))return C}return null}}}const Pr=new jr;class qs{constructor(A){this.manager=A!==void 0?A:Pr,this.crossOrigin="anonymous",this.withCredentials=!1,this.path="",this.resourcePath="",this.requestHeader={}}load(){}loadAsync(A,t){const e=this;return new Promise(function(s,i){e.load(A,s,t,i)})}parse(){}setCrossOrigin(A){return this.crossOrigin=A,this}setWithCredentials(A){return this.withCredentials=A,this}setPath(A){return this.path=A,this}setResourcePath(A){return this.resourcePath=A,this}setRequestHeader(A){return this.requestHeader=A,this}}qs.DEFAULT_MATERIAL_NAME="__DEFAULT";const nt={};class Vr extends Error{constructor(A,t){super(A),this.response=t}}class Xr extends qs{constructor(A){super(A)}load(A,t,e,s){A===void 0&&(A=""),this.path!==void 0&&(A=this.path+A),A=this.manager.resolveURL(A);const i=on.get(A);if(i!==void 0)return this.manager.itemStart(A),setTimeout(()=>{t&&t(i),this.manager.itemEnd(A)},0),i;if(nt[A]!==void 0){nt[A].push({onLoad:t,onProgress:e,onError:s});return}nt[A]=[],nt[A].push({onLoad:t,onProgress:e,onError:s});const n=new Request(A,{headers:new Headers(this.requestHeader),credentials:this.withCredentials?"include":"same-origin"}),r=this.mimeType,a=this.responseType;fetch(n).then(o=>{if(o.status===200||o.status===0){if(o.status===0&&console.warn("THREE.FileLoader: HTTP Status 0 received."),typeof ReadableStream>"u"||o.body===void 0||o.body.getReader===void 0)return o;const I=nt[A],B=o.body.getReader(),Q=o.headers.get("X-File-Size")||o.headers.get("Content-Length"),h=Q?parseInt(Q):0,C=h!==0;let E=0;const c=new ReadableStream({start(l){u();function u(){B.read().then(({done:d,value:y})=>{if(d)l.close();else{E+=y.byteLength;const D=new ProgressEvent("progress",{lengthComputable:C,loaded:E,total:h});for(let m=0,x=I.length;m<x;m++){const w=I[m];w.onProgress&&w.onProgress(D)}l.enqueue(y),u()}},d=>{l.error(d)})}}});return new Response(c)}else throw new Vr(`fetch for "${o.url}" responded with ${o.status}: ${o.statusText}`,o)}).then(o=>{switch(a){case"arraybuffer":return o.arrayBuffer();case"blob":return o.blob();case"document":return o.text().then(I=>new DOMParser().parseFromString(I,r));case"json":return o.json();default:if(r===void 0)return o.text();{const B=/charset="?([^;"\\s]*)"?/i.exec(r),Q=B&&B[1]?B[1].toLowerCase():void 0,h=new TextDecoder(Q);return o.arrayBuffer().then(C=>h.decode(C))}}}).then(o=>{on.add(A,o);const I=nt[A];delete nt[A];for(let B=0,Q=I.length;B<Q;B++){const h=I[B];h.onLoad&&h.onLoad(o)}}).catch(o=>{const I=nt[A];if(I===void 0)throw this.manager.itemError(A),o;delete nt[A];for(let B=0,Q=I.length;B<Q;B++){const h=I[B];h.onError&&h.onError(o)}this.manager.itemError(A)}).finally(()=>{this.manager.itemEnd(A)}),this.manager.itemStart(A)}setResponseType(A){return this.responseType=A,this}setMimeType(A){return this.mimeType=A,this}}class _s{constructor(A,t,e,s){_s.prototype.isMatrix2=!0,this.elements=[1,0,0,1],A!==void 0&&this.set(A,t,e,s)}identity(){return this.set(1,0,0,1),this}fromArray(A,t=0){for(let e=0;e<4;e++)this.elements[e]=A[e+t];return this}set(A,t,e,s){const i=this.elements;return i[0]=A,i[2]=t,i[1]=e,i[3]=s,this}}typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:pi}})),typeof window<"u"&&(window.__THREE__?console.warn("WARNING: Multiple instances of Three.js being imported."):window.__THREE__=pi);const _A=-9,rt=(9-_A)/254,Zs=Math.exp(_A),$r=11,Aa=11,W=1<<$r,dt=1<<Aa,In=1,ta=!0;function Ot(g){return g==="int"||g==="ivec2"||g==="ivec3"||g==="ivec4"}function jt(g){return g==="uint"||g==="uvec2"||g==="uvec3"||g==="uvec4"}function ea(g){return g==="float"||g==="vec2"||g==="vec3"||g==="vec4"}function sa(g){return g==="mat2"||g==="mat2x2"||g==="mat2x3"||g==="mat2x4"||g==="mat3"||g==="mat3x2"||g==="mat3x3"||g==="mat3x4"||g==="mat4"||g==="mat4x2"||g==="mat4x3"||g==="mat4x4"}function Pe(g){return ea(g)||sa(g)}function Pt(g){return g==="mat2"||g==="mat2x2"}function Vt(g){return g==="mat3"||g==="mat3x3"}function Xt(g){return g==="mat4"||g==="mat4x4"}function iA(g){return Math.trunc(g).toString()}function nA(g){return`${Math.max(0,Math.trunc(g)).toString()}u`}function q(g){return g===Number.POSITIVE_INFINITY?"INFINITY":g===Number.NEGATIVE_INFINITY?"-INFINITY":Number.isInteger(g)?g.toFixed(1):g.toString()}function Ft(g){return g instanceof Nt?g.type:g.dynoOut().type}class Nt{constructor(A){this.__isDynoValue=!0,this.type=A}}class NA extends Nt{constructor(A,t){super(A.outTypes[t]),this.dyno=A,this.key=t}}class Ve extends Nt{constructor(A,t){super(A),this.literal=t}getLiteral(){return this.literal}}class ia extends Ve{constructor(A,t){super(A,""),this.value=t}getLiteral(){const{type:A,value:t}=this;switch(A){case"bool":return t?"true":"false";case"uint":return nA(t);case"int":return iA(t);case"float":return q(t);case"bvec2":{const e=t;return`bvec2(${e[0]}, ${e[1]})`}case"uvec2":{if(t instanceof wA)return`uvec2(${nA(t.x)}, ${nA(t.y)})`;const e=t;return`uvec2(${nA(e[0])}, ${nA(e[1])})`}case"ivec2":{if(t instanceof wA)return`ivec2(${iA(t.x)}, ${iA(t.y)})`;const e=t;return`ivec2(${iA(e[0])}, ${iA(e[1])})`}case"vec2":{if(t instanceof wA)return`vec2(${q(t.x)}, ${q(t.y)})`;const e=t;return`vec2(${q(e[0])}, ${q(e[1])})`}case"bvec3":{const e=t;return`bvec3(${e[0]}, ${e[1]}, ${e[2]})`}case"uvec3":{if(t instanceof f)return`uvec3(${nA(t.x)}, ${nA(t.y)}, ${nA(t.z)})`;const e=t;return`uvec3(${nA(e[0])}, ${nA(e[1])}, ${nA(e[2])})`}case"ivec3":{if(t instanceof f)return`ivec3(${iA(t.x)}, ${iA(t.y)}, ${iA(t.z)})`;const e=t;return`ivec3(${iA(e[0])}, ${iA(e[1])}, ${iA(e[2])})`}case"vec3":{if(t instanceof f)return`vec3(${q(t.x)}, ${q(t.y)}, ${q(t.z)})`;const e=t;return`vec3(${q(e[0])}, ${q(e[1])}, ${q(e[2])})`}case"bvec4":{const e=t;return`bvec4(${e[0]}, ${e[1]}, ${e[2]}, ${e[3]})`}case"uvec4":{if(t instanceof uA)return`uvec4(${nA(t.x)}, ${nA(t.y)}, ${nA(t.z)}, ${nA(t.w)})`;const e=t;return`uvec4(${nA(e[0])}, ${nA(e[1])}, ${nA(e[2])}, ${nA(e[3])})`}case"ivec4":{if(t instanceof uA)return`ivec4(${iA(t.x)}, ${iA(t.y)}, ${iA(t.z)}, ${iA(t.w)})`;const e=t;return`ivec4(${iA(e[0])}, ${iA(e[1])}, ${iA(e[2])}, ${iA(e[3])})`}case"vec4":{if(t instanceof uA)return`vec4(${q(t.x)}, ${q(t.y)}, ${q(t.z)}, ${q(t.w)})`;if(t instanceof rA)return`vec4(${q(t.x)}, ${q(t.y)}, ${q(t.z)}, ${q(t.w)})`;const e=t;return`vec4(${q(e[0])}, ${q(e[1])}, ${q(e[2])}, ${q(e[3])})`}case"mat2":case"mat2x2":{const e=t,s=e instanceof _s?e.elements:t,i=new Array(4).fill(0).map((n,r)=>q(s[r]));return`${A}(${i.join(", ")})`}case"mat2x3":{const e=t,s=new Array(6).fill(0).map((i,n)=>q(e[n]));return`${A}(${s.join(", ")})`}case"mat2x4":{const e=t,s=new Array(8).fill(0).map((i,n)=>q(e[n]));return`${A}(${s.join(", ")})`}case"mat3":case"mat3x3":{const e=t,s=e instanceof PA?e.elements:t,i=new Array(9).fill(0).map((n,r)=>q(s[r]));return`${A}(${i.join(", ")})`}case"mat3x2":{const e=t,s=new Array(6).fill(0).map((i,n)=>q(e[n]));return`${A}(${s.join(", ")})`}case"mat3x4":{const e=t,s=new Array(12).fill(0).map((i,n)=>q(e[n]));return`${A}(${s.join(", ")})`}case"mat4":case"mat4x4":{const e=t,s=e instanceof CA?e.elements:t,i=new Array(16).fill(0).map((n,r)=>q(s[r]));return`${A}(${i.join(", ")})`}case"mat4x2":{const e=t,s=new Array(8).fill(0).map((i,n)=>q(e[n]));return`${A}(${s.join(", ")})`}case"mat4x3":{const e=t,s=new Array(12).fill(0).map((i,n)=>q(e[n]));return`${A}(${s.join(", ")})`}default:throw new Error(`Type not implemented: ${String(A)}`)}}}function na(g,A){return new ia(g,A)}const Bn=" ";class ra{constructor({indent:A}={}){this.globals=new Set,this.statements=[],this.uniforms={},this.declares=new Set,this.updaters=[],this.sequence=0,this.indent=Bn,this.indent=A??Bn}nextSequence(){return this.sequence++}}class cA{constructor({inTypes:A,outTypes:t,inputs:e,update:s,globals:i,statements:n,generate:r}){this.inTypes=A??{},this.outTypes=t??{},this.inputs=e??{},this.update=s,this.globals=i,this.statements=n,this.generate=r??(({inputs:a,outputs:o,compile:I})=>{var B,Q;return{globals:(B=this.globals)==null?void 0:B.call(this,{inputs:a,outputs:o,compile:I}),statements:(Q=this.statements)==null?void 0:Q.call(this,{inputs:a,outputs:o,compile:I})}})}get outputs(){const A={};for(const t in this.outTypes)A[t]=new NA(this,t);return A}apply(A){return Object.assign(this.inputs,A),this.outputs}compile({inputs:A,outputs:t,compile:e}){const s=[`// ${this.constructor.name}(${Object.values(A).join(", ")}) => (${Object.values(t).join(", ")})`],i=[];for(const o in t){const I=t[o];I&&!e.declares.has(I)&&(e.declares.add(I),i.push(o))}const{globals:n,statements:r,uniforms:a}=this.generate({inputs:A,outputs:t,compile:e});for(const o of n??[])e.globals.add(o);for(const o in a)e.uniforms[o]=a[o];this.update&&e.updaters.push(this.update);for(const o of i){const I=t[o];I&&(e.uniforms[I]||s.push(`${Qn(I,this.outTypes[o])};`))}return r!=null&&r.length&&(s.push("{"),s.push(...r.map(o=>e.indent+o)),s.push("}")),s}}class aa extends cA{constructor({inTypes:A,outTypes:t,inputs:e,update:s,globals:i,construct:n}){super({inTypes:A,outTypes:t,inputs:e,update:s,globals:i,generate:r=>this.generateBlock(r)}),this.construct=n}generateBlock({inputs:A,outputs:t,compile:e}){var C,E;const s={},i={};for(const c in A)A[c]!=null&&(s[c]=new Ve(this.inTypes[c],A[c]));for(const c in t)t[c]!=null&&(i[c]=new Nt(this.outTypes[c]));const n={roots:[]},r=this.construct(s,i,n);for(const c of((C=this.globals)==null?void 0:C.call(this,{inputs:A,outputs:t,compile:e}))??[])e.globals.add(c);const a=[],o=new Map;function I(c,l,u){let d=o.get(c);if(!d){d={sequence:e.nextSequence(),outNames:new Map,newOuts:new Set},o.set(c,d);for(const y in c.inputs){let D=c.inputs[y];for(;D;){if(D instanceof Nt){D instanceof NA&&I(D.dyno,D.key);break}D=D.dynoOut()}}a.push(c)}l&&(u||d.newOuts.add(l),d.outNames.set(l,u??`${l}_${d.sequence}`))}for(const c of n.roots)I(c);for(const c in i){let l=(r==null?void 0:r[c])??i[c];for(;l;){if(l instanceof Nt){l instanceof NA&&I(l.dyno,l.key,t[c]);break}l=l.dynoOut()}i[c]=l}const B=[];for(const c of a){const l={},u={};for(const D in c.inputs){let m=c.inputs[D];for(;m;){if(m instanceof Nt){if(m instanceof Ve)l[D]=m.getLiteral();else if(m instanceof NA){const x=(E=o.get(m.dyno))==null?void 0:E.outNames.get(m.key);if(!x)throw new Error(`Source not found for ${m.dyno.constructor.name}.${m.key}`);l[D]=x}break}m=m.dynoOut()}}const d=o.get(c)??{outNames:new Map};for(const[D,m]of d.outNames.entries())u[D]=m;const y=c.compile({inputs:l,outputs:u,compile:e});B.push(y)}const Q=[];for(const c in t)i[c]instanceof Ve&&Q.push(`${t[c]} = ${i[c].getLiteral()};`);return Q.length>0&&B.push(Q),{statements:B.flatMap((c,l)=>l===0?c:["",...c])}}}function Xe(g,A,t,{update:e,globals:s}={}){return new aa({inTypes:g,outTypes:A,construct:t,update:e,globals:s})}function Ws({inTypes:g,outTypes:A,inputs:t,update:e,globals:s,statements:i,generate:n}){return new cA({inTypes:g,outTypes:A,inputs:t,update:e,globals:s,statements:i,generate:n})}function Qn(g,A,t){const e=typeof A=="string"?A:A.type;if(!e)throw new Error(`Invalid DynoType: ${String(A)}`);return`${e} ${g}${t!=null?`[${t}]`:""}`}function at(g){var i;let A=!1;const t=g.split(`\n`).map(n=>{const r=n.trimEnd();return A?r:r.length>0?(A=!0,r):null}).filter(n=>n!=null);for(;t.length>0&&t[t.length-1].length===0;)t.pop();if(t.length===0)return[];const e=(i=t[0].match(/^\\s*/))==null?void 0:i[0];if(!e)return t;const s=new RegExp(`^${e}`);return t.map(n=>n.replace(s,""))}function ZA(g){return at(g).join(`\n`)}class ga extends cA{constructor({a:A,outKey:t,outTypeFunc:e}){const s={a:Ft(A)},i=e(Ft(A)),n={[t]:i};super({inTypes:s,outTypes:n,inputs:{a:A}}),this.outKey=t}dynoOut(){return new NA(this,this.outKey)}}class $e extends cA{constructor({a:A,b:t,outKey:e,outTypeFunc:s}){const i={a:Ft(A),b:Ft(t)},n=s(Ft(A),Ft(t)),r={[e]:n};super({inTypes:i,outTypes:r,inputs:{a:A,b:t}}),this.outKey=e}dynoOut(){return new NA(this,this.outKey)}}const Os=new Float32Array(1),hn=new Uint32Array(Os.buffer);function $t(g){Os[0]=g;const A=hn[0],t=A>>31&1,e=A>>23&255,s=A&8388607,i=t<<15;if(e===255)return s!==0?i|32767:i|31744;const n=e-127+15;if(n>=31)return i|31744;if(n<=0){if(n<-10)return i;const a=(s|8388608)>>1-n+13;return i|a}const r=s>>13;return i|n<<10|r}function tA(g){const A=g>>15&1,t=g>>10&31,e=g&1023;let s;if(t===0)if(e===0)s=A<<31;else{let i=e,n=-14;for(;(i&1024)===0;)i<<=1,n--;i&=1023;const r=n+127,a=i<<13;s=A<<31|r<<23|a}else if(t===31)e===0?s=A<<31|2139095040:s=A<<31|2143289344;else{const i=t-15+127,n=e<<13;s=A<<31|i<<23|n}return hn[0]=s,Os[0]}function bA(g){return Math.max(0,Math.min(255,Math.round(g*255)))}function Cn(g){const A=[],t=new Set;function e(s){s&&typeof s=="object"&&!t.has(s)&&(t.add(s),s instanceof ArrayBuffer?A.push(s):ArrayBuffer.isView(s)?A.push(s.buffer):Array.isArray(s)?s.forEach(e):Object.values(s).forEach(e))}return e(g),A}function ue(g,A,t,e,s,i,n,r,a,o,I,B,Q,h,C,E){const c=bA(h),l=bA(C),u=bA(E),d=bA(Q),y=dn(new rA(a,o,I,B)),D=y&255,m=y>>>8&255,x=y>>>16&255,w=i===0?0:Math.min(255,Math.max(0,Math.round((Math.log(i)-_A)/rt)+1)),p=n===0?0:Math.min(255,Math.max(0,Math.round((Math.log(n)-_A)/rt)+1)),N=r===0?0:Math.min(255,Math.max(0,Math.round((Math.log(r)-_A)/rt)+1)),M=$t(t),S=$t(e),F=$t(s),k=A*4;g[k]=c|l<<8|u<<16|d<<24,g[k+1]=M|S<<16,g[k+2]=F|D<<16|m<<24,g[k+3]=w|p<<8|N<<16|x<<24}function En(g,A,t,e,s){const i=$t(t),n=$t(e),r=$t(s),a=A*4;g[a+1]=i|n<<16,g[a+2]=r|g[a+2]&4294901760}function cn(g,A,t,e,s){const i=t===0?0:Math.min(255,Math.max(0,Math.round((Math.log(t)-_A)/rt)+1)),n=e===0?0:Math.min(255,Math.max(0,Math.round((Math.log(e)-_A)/rt)+1)),r=s===0?0:Math.min(255,Math.max(0,Math.round((Math.log(s)-_A)/rt)+1)),a=A*4;g[a+3]=i|n<<8|r<<16|g[a+3]&4278190080}function ln(g,A,t,e,s,i){const n=dn(new rA(t,e,s,i)),r=n&255,a=n>>>8&255,o=n>>>16&255,I=A*4;g[I+2]=g[I+2]&65535|r<<16|a<<24,g[I+3]=g[I+3]&16777215|o<<24}function oa(g,A,t,e,s,i){const n=bA(t),r=bA(e),a=bA(s),o=bA(i),I=A*4;g[I]=n|r<<8|a<<16|o<<24}function Ia(g,A,t,e,s){const i=bA(t),n=bA(e),r=bA(s),a=A*4;g[a]=i|n<<8|r<<16|g[a]&4278190080}function Ba(g,A,t){const e=bA(t),s=A*4;g[s]=g[s]&16777215|e<<24}const Qa=new f,ha=new f,Ca=new rA,Ea=new Mt,ca={center:Qa,scales:ha,quaternion:Ca,color:Ea,opacity:0};function un(g,A){const t=ca,e=A*4,s=g[e],i=g[e+1],n=g[e+2],r=g[e+3];t.color.set((s&255)/255,(s>>>8&255)/255,(s>>>16&255)/255),t.opacity=(s>>>24&255)/255,t.center.set(tA(i&65535),tA(i>>>16&65535),tA(n&65535));const a=r&255;t.scales.x=a===0?0:Math.exp(_A+(a-1)*rt);const o=r>>>8&255;t.scales.y=o===0?0:Math.exp(_A+(o-1)*rt);const I=r>>>16&255;t.scales.z=I===0?0:Math.exp(_A+(I-1)*rt);const B=n>>>16&65535|r>>>8&16711680;return ua(B,t.quaternion),t}function kA(g){const A=W,t=Math.max(In,Math.min(dt,Math.ceil(g/A))),e=Math.ceil(g/(A*t)),s=A*t*e;return{width:A,height:t,depth:e,maxSplats:s}}function As(g){const A=W,t=Math.max(In,Math.min(dt,Math.ceil(g/A))),e=Math.ceil(g/(A*t));return A*t*e}const la=ZA(`\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 dn(g){const A=g.clone().normalize();A.w<0&&A.set(-A.x,-A.y,-A.z,-A.w);const t=2*Math.acos(A.w),e=Math.sqrt(A.x*A.x+A.y*A.y+A.z*A.z),s=e<1e-6?new f(1,0,0):new f(A.x,A.y,A.z).divideScalar(e),i=Math.abs(s.x)+Math.abs(s.y)+Math.abs(s.z);let n=s.x/i,r=s.y/i;if(s.z<0){const h=n;n=(1-Math.abs(r))*(n>=0?1:-1),r=(1-Math.abs(h))*(r>=0?1:-1)}const a=n*.5+.5,o=r*.5+.5,I=Math.round(a*255),B=Math.round(o*255);return Math.round(t*(255/Math.PI))<<16|B<<8|I}function ua(g,A){const t=g&255,e=g>>>8&255,s=g>>>16&255,i=t/255,n=e/255;let r=(i-.5)*2,a=(n-.5)*2;const o=1-(Math.abs(r)+Math.abs(a)),I=Math.max(-o,0);r+=r>=0?-I:I,a+=a>=0?-I:I;const B=new f(r,a,o).normalize(),h=s/255*Math.PI*.5,C=Math.sin(h),E=Math.cos(h);return A.set(B.x*C,B.y*C,B.z*C,E),A}function ts(g,A,t,e){const s=Math.max(-127,Math.min(127,g*127)),i=Math.max(-127,Math.min(127,A*127)),n=Math.max(-127,Math.min(127,t*127)),r=Math.max(-127,Math.min(127,e*127));return s&255|(i&255)<<8|(n&255)<<16|(r&255)<<24}function es(g,A,t){const e=A*2;for(let s=0;s<9;++s){const i=Math.max(-63,Math.min(63,t[s]*63))&127,n=s*7,r=n+7,a=Math.floor(n/32),o=n-a*32,I=i<<o&4294967295;if(g[e+a]|=I,r>a*32+32){const B=i>>>32-o&4294967295;g[e+a+1]|=B}}}function ss(g,A,t){g[A*4+0]=ts(t[0],t[1],t[2],t[3]),g[A*4+1]=ts(t[4],t[5],t[6],t[7]),g[A*4+2]=ts(t[8],t[9],t[10],t[11]),g[A*4+3]=ts(t[12],t[13],t[14],0)}function is(g,A,t){const e=A*4;for(let s=0;s<21;++s){const i=Math.max(-31,Math.min(31,t[s]*31))&63,n=s*6,r=n+6,a=Math.floor(n/32),o=n-a*32,I=i<<o&4294967295;if(g[e+a]|=I,r>a*32+32){const B=i>>>32-o&4294967295;g[e+a+1]|=B}}}function da(g,A){const t=[];let e=0,s=null;const i=new wi((a,o)=>{if(t.push(a),e+=a.length,o||e>=A){const I=new Uint8Array(e);let B=0;for(const Q of t)I.set(Q,B),B+=Q.length;s=I.slice(0,A)}}),n=1024;let r=0;for(;s==null&&r<g.length;){const a=g.slice(r,r+n);i.push(a,!1),r+=n}if(s==null&&(i.push(new Uint8Array,!0),s==null))throw new Error("Failed to decompress partial gzip");return s}class fa{constructor({fileBytes:A,chunkBytes:t=64*1024}){this.fileBytes=A,this.chunkBytes=t,this.offset=0,this.chunks=[],this.totalBytes=0,this.gunzip=new wi((e,s)=>{this.chunks.push(e),this.totalBytes+=e.length})}read(A){for(;this.totalBytes<A&&this.offset<this.fileBytes.length;){const i=Math.min(this.offset+this.chunkBytes,this.fileBytes.length);this.gunzip.push(this.fileBytes.subarray(this.offset,i),!1),this.offset=i}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 t=new Uint8Array(this.totalBytes);let e=0;for(const i of this.chunks)t.set(i,e),e+=i.length;const s=t.subarray(0,A);return this.chunks=[t.subarray(A)],this.totalBytes-=A,s}}function fn(g,A,t){const e=Math.floor(g.length/32);if(e*32!==g.length)throw new Error("Invalid .splat file size");A(e);const s=new Float32Array(g.buffer);for(let i=0;i<e;++i){const n=i*32,r=i*8,a=s[r+0],o=s[r+1],I=s[r+2],B=s[r+3],Q=s[r+4],h=s[r+5],C=g[n+24]/255,E=g[n+25]/255,c=g[n+26]/255,l=g[n+27]/255,u=(g[n+28]-128)/128,d=(g[n+29]-128)/128,y=(g[n+30]-128)/128,D=(g[n+31]-128)/128;t(i,a,o,I,B,Q,h,d,y,D,u,l,C,E,c)}}function ya(g){let A=0,t=0,e=new Uint32Array(0);return fn(g,s=>{A=s,t=As(A),e=new Uint32Array(t*4)},(s,i,n,r,a,o,I,B,Q,h,C,E,c,l,u)=>{ue(e,s,i,n,r,a,o,I,B,Q,h,C,E,c,l,u)}),{packedArray:e,numSplats:A}}const ns={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}},yn={0:0,1:9,2:24,3:45};function wa(g,A,t,e){var E;let n=0;const r=new DataView(g.buffer,n,4096);n+=4096;const a=r.getUint8(0),o=r.getUint8(1);if(a!==0||o<1)throw new Error(`Unsupported .ksplat version: ${a}.${o}`);const I=r.getUint32(4,!0);r.getUint32(16,!0);const B=r.getUint16(20,!0);if(B<0||B>2)throw new Error(`Invalid .ksplat compression level: ${B}`);const Q=r.getFloat32(36,!0)||-1.5,h=r.getFloat32(40,!0)||1.5;let C=4096+I*1024;for(let c=0;c<I;++c){let l=function(BA,T){if(B===0)return J.getFloat32(BA+L+T*4,!0);if(B===1)return tA(J.getUint16(BA+L+T*2,!0));const AA=J.getUint8(BA+L+T)/255;return Q+AA*(h-Q)};const u=new DataView(g.buffer,n,1024);n+=1024;const d=u.getUint32(0,!0),y=u.getUint32(4,!0),D=u.getUint32(8,!0),m=u.getUint32(12,!0),x=u.getFloat32(16,!0),w=u.getUint16(20,!0),p=(u.getUint32(24,!0)||((E=ns[B])==null?void 0:E.scaleRange))??1,N=u.getUint32(32,!0),M=N*D,S=u.getUint32(36,!0),F=S*4,k=w*m+F,G=u.getUint16(40,!0),R=yn[G],{bytesPerCenter:b,bytesPerScale:j,bytesPerRotation:_,bytesPerColor:X,bytesPerSphericalHarmonicsComponent:P,scaleOffsetBytes:$,rotationOffsetBytes:K,colorOffsetBytes:z,sphericalHarmonicsOffsetBytes:L}=ns[B],Z=b+j+_+X+R*P,U=Z*y,dA=U+k,lA=[0,3,6,1,4,7,2,5,8],RA=[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],mA=G>=1?new Float32Array(3*3):void 0,xA=G>=2?new Float32Array(5*3):void 0,WA=G>=3?new Float32Array(7*3):void 0,MA=x/2/p,LA=C+F,YA=C+k,J=new DataView(g.buffer,YA,U),IA=new Float32Array(g.buffer,LA,m*3),Y=new Uint32Array(g.buffer,C,S);let It=N,ne=M;for(let BA=0;BA<d;++BA){const T=BA*Z;let AA;if(BA<M)AA=Math.floor(BA/D);else{const XA=Y[It-N];BA>=ne+XA&&(It+=1,ne+=XA),AA=It}const v=B===0?J.getFloat32(T+0,!0):(J.getUint16(T+0,!0)-p)*MA+IA[3*AA+0],OA=B===0?J.getFloat32(T+4,!0):(J.getUint16(T+2,!0)-p)*MA+IA[3*AA+1],De=B===0?J.getFloat32(T+8,!0):(J.getUint16(T+4,!0)-p)*MA+IA[3*AA+2],me=B===0?J.getFloat32(T+$+0,!0):tA(J.getUint16(T+$+0,!0)),xe=B===0?J.getFloat32(T+$+4,!0):tA(J.getUint16(T+$+2,!0)),ni=B===0?J.getFloat32(T+$+8,!0):tA(J.getUint16(T+$+4,!0)),ri=B===0?J.getFloat32(T+K+0,!0):tA(J.getUint16(T+K+0,!0)),ai=B===0?J.getFloat32(T+K+4,!0):tA(J.getUint16(T+K+2,!0)),gi=B===0?J.getFloat32(T+K+8,!0):tA(J.getUint16(T+K+4,!0)),oi=B===0?J.getFloat32(T+K+12,!0):tA(J.getUint16(T+K+6,!0)),Ii=J.getUint8(T+z+0)/255,Bi=J.getUint8(T+z+1)/255,Qi=J.getUint8(T+z+2)/255,hi=J.getUint8(T+z+3)/255;if(t(BA,v,OA,De,me,xe,ni,ai,gi,oi,ri,hi,Ii,Bi,Qi),G>=1&&mA){for(const[XA,kt]of lA.entries())mA[XA]=l(T,kt);if(xA)for(const[XA,kt]of RA.entries())xA[XA]=l(T,kt);if(WA)for(const[XA,kt]of fA.entries())WA[XA]=l(T,kt);e==null||e(BA,mA,xA,WA)}}C+=dA}}function pa(g){var l;let e=0;const s=new DataView(g.buffer,e,4096);e+=4096;const i=s.getUint8(0),n=s.getUint8(1);if(i!==0||n<1)throw new Error(`Unsupported .ksplat version: ${i}.${n}`);const r=s.getUint32(4,!0),a=s.getUint32(16,!0),o=s.getUint16(20,!0);if(o<0||o>2)throw new Error(`Invalid .ksplat compression level: ${o}`);const I=s.getFloat32(36,!0)||-1.5,B=s.getFloat32(40,!0)||1.5,Q=a,h=As(Q),C=new Uint32Array(h*4),E={};let c=4096+r*1024;for(let u=0;u<r;++u){let d=function(AA,v){if(o===0)return Y.getFloat32(AA+U+v*4,!0);if(o===1)return tA(Y.getUint16(AA+U+v*2,!0));const OA=Y.getUint8(AA+U+v)/255;return I+OA*(B-I)};const y=new DataView(g.buffer,e,1024);e+=1024;const D=y.getUint32(0,!0),m=y.getUint32(4,!0),x=y.getUint32(8,!0),w=y.getUint32(12,!0),p=y.getFloat32(16,!0),N=y.getUint16(20,!0),M=(y.getUint32(24,!0)||((l=ns[o])==null?void 0:l.scaleRange))??1,S=y.getUint32(32,!0),F=S*x,k=y.getUint32(36,!0),G=k*4,R=N*w+G,b=y.getUint16(40,!0),j=yn[b],{bytesPerCenter:_,bytesPerScale:X,bytesPerRotation:P,bytesPerColor:$,bytesPerSphericalHarmonicsComponent:K,scaleOffsetBytes:z,rotationOffsetBytes:L,colorOffsetBytes:Z,sphericalHarmonicsOffsetBytes:U}=ns[o],dA=_+X+P+$+j*K,lA=dA*m,RA=lA+R,fA=[0,3,6,1,4,7,2,5,8],mA=[9,14,19,10,15,20,11,16,21,12,17,22,13,18,23],xA=[24,31,38,25,32,39,26,33,40,27,34,41,28,35,42,29,36,43,30,37,44],WA=b>=1?new Float32Array(3*3):void 0,MA=b>=2?new Float32Array(5*3):void 0,LA=b>=3?new Float32Array(7*3):void 0,YA=p/2/M,J=c+G,IA=c+R,Y=new DataView(g.buffer,IA,lA),It=new Float32Array(g.buffer,J,w*3),ne=new Uint32Array(g.buffer,c,k);let BA=S,T=F;for(let AA=0;AA<D;++AA){const v=AA*dA;let OA;if(AA<F)OA=Math.floor(AA/x);else{const wt=ne[BA-S];AA>=T+wt&&(BA+=1,T+=wt),OA=BA}const De=o===0?Y.getFloat32(v+0,!0):(Y.getUint16(v+0,!0)-M)*YA+It[3*OA+0],me=o===0?Y.getFloat32(v+4,!0):(Y.getUint16(v+2,!0)-M)*YA+It[3*OA+1],xe=o===0?Y.getFloat32(v+8,!0):(Y.getUint16(v+4,!0)-M)*YA+It[3*OA+2],ni=o===0?Y.getFloat32(v+z+0,!0):tA(Y.getUint16(v+z+0,!0)),ri=o===0?Y.getFloat32(v+z+4,!0):tA(Y.getUint16(v+z+2,!0)),ai=o===0?Y.getFloat32(v+z+8,!0):tA(Y.getUint16(v+z+4,!0)),gi=o===0?Y.getFloat32(v+L+0,!0):tA(Y.getUint16(v+L+0,!0)),oi=o===0?Y.getFloat32(v+L+4,!0):tA(Y.getUint16(v+L+2,!0)),Ii=o===0?Y.getFloat32(v+L+8,!0):tA(Y.getUint16(v+L+4,!0)),Bi=o===0?Y.getFloat32(v+L+12,!0):tA(Y.getUint16(v+L+6,!0)),Qi=Y.getUint8(v+Z+0)/255,hi=Y.getUint8(v+Z+1)/255,XA=Y.getUint8(v+Z+2)/255,kt=Y.getUint8(v+Z+3)/255;if(ue(C,AA,De,me,xe,ni,ri,ai,oi,Ii,Bi,gi,kt,Qi,hi,XA),b>=1){if(WA){E.sh1||(E.sh1=new Uint32Array(Q*2));for(const[wt,Me]of fA.entries())WA[wt]=d(v,Me);es(E.sh1,AA,WA)}if(MA){E.sh2||(E.sh2=new Uint32Array(Q*4));for(const[wt,Me]of mA.entries())MA[wt]=d(v,Me);ss(E.sh2,AA,MA)}if(LA){E.sh3||(E.sh3=new Uint32Array(Q*4));for(const[wt,Me]of xA.entries())LA[wt]=d(v,Me);is(E.sh3,AA,LA)}}}c+=RA}return{packedArray:C,numSplats:Q,extra:E}}async function Da(g,A){const t=JSON.parse(new TextDecoder().decode(g));if(t.quats.encoding!=="quaternion_packed")throw new Error("Unsupported quaternion encoding");const e=t.means.shape[0],s=As(e),i=new Uint32Array(s*4),n={},r=await Promise.all([de(A[t.means.files[0]]),de(A[t.means.files[1]])]);for(let h=0;h<e;++h){const C=h*4,E=(r[0][C+0]+(r[1][C+0]<<8))/65535,c=(r[0][C+1]+(r[1][C+1]<<8))/65535,l=(r[0][C+2]+(r[1][C+2]<<8))/65535;let u=t.means.mins[0]+(t.means.maxs[0]-t.means.mins[0])*E,d=t.means.mins[1]+(t.means.maxs[1]-t.means.mins[1])*c,y=t.means.mins[2]+(t.means.maxs[2]-t.means.mins[2])*l;u=Math.sign(u)*(Math.exp(Math.abs(u))-1),d=Math.sign(d)*(Math.exp(Math.abs(d))-1),y=Math.sign(y)*(Math.exp(Math.abs(y))-1),En(i,h,u,d,y)}const a=await de(A[t.scales.files[0]]);for(let h=0;h<e;++h){const C=h*4,E=a[C+0]/255,c=a[C+1]/255,l=a[C+2]/255,u=t.scales.mins[0]+(t.scales.maxs[0]-t.scales.mins[0])*E,d=t.scales.mins[1]+(t.scales.maxs[1]-t.scales.mins[1])*c,y=t.scales.mins[2]+(t.scales.maxs[2]-t.scales.mins[2])*l;cn(i,h,Math.exp(u),Math.exp(d),Math.exp(y))}const o=await de(A[t.quats.files[0]]),I=Math.sqrt(2);for(let h=0;h<e;++h){const C=h*4,E=(o[C+0]/255-.5)*I,c=(o[C+1]/255-.5)*I,l=(o[C+2]/255-.5)*I,u=Math.sqrt(Math.max(0,1-E*E-c*c-l*l)),d=o[C+3]-252,y=d===0?E:d===1?u:c,D=d<=1?c:d===2?u:l,m=d<=2?l:u;ln(i,h,y,D,m,d===0?u:E)}const B=await de(A[t.sh0.files[0]]),Q=.28209479177387814;for(let h=0;h<e;++h){const C=h*4,E=B[C+0]/255,c=B[C+1]/255,l=B[C+2]/255,u=B[C+3]/255,d=t.sh0.mins[0]+(t.sh0.maxs[0]-t.sh0.mins[0])*E,y=t.sh0.mins[1]+(t.sh0.maxs[1]-t.sh0.mins[1])*c,D=t.sh0.mins[2]+(t.sh0.maxs[2]-t.sh0.mins[2])*l,m=t.sh0.mins[3]+(t.sh0.maxs[3]-t.sh0.mins[3])*u,x=Q*d+.5,w=Q*y+.5,p=Q*D+.5,N=1/(1+Math.exp(-m));oa(i,h,x,w,p,N)}if(t.shN){n.sh1=new Uint32Array(e*2),n.sh2=new Uint32Array(e*4),n.sh3=new Uint32Array(e*4);const h=new Float32Array(9),C=new Float32Array(15),E=new Float32Array(21),[c,l]=await Promise.all([js(A[t.shN.files[0]]),js(A[t.shN.files[1]])]);for(let u=0;u<e;++u){const d=u*4,y=l.rgba[d+0]+(l.rgba[d+1]<<8),D=(y&63)*15,x=(y>>>6)*c.width+D;for(let w=0;w<3;++w){for(let p=0;p<3;++p)h[p*3+w]=t.shN.mins+(t.shN.maxs-t.shN.mins)*c.rgba[(x+p)*4+w]/255;for(let p=0;p<5;++p)C[p*3+w]=t.shN.mins+(t.shN.maxs-t.shN.mins)*c.rgba[(x+3+p)*4+w]/255;for(let p=0;p<7;++p)E[p*3+w]=t.shN.mins+(t.shN.maxs-t.shN.mins)*c.rgba[(x+8+p)*4+w]/255}es(n.sh1,u,h),ss(n.sh2,u,C),is(n.sh3,u,E)}}return{packedArray:i,numSplats:e,extra:n}}let rs=null;async function js(g){if(!rs&&(rs=new OffscreenCanvas(1,1).getContext("webgl2"),!rs))throw new Error("Failed to create WebGL2 context");const A=new Blob([g]),t=await createImageBitmap(A,{premultiplyAlpha:"none"}),e=rs,s=e.createTexture();e.bindTexture(e.TEXTURE_2D,s),e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,!0),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.NEAREST);const i=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,i),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,s,0);const n=new Uint8Array(t.width*t.height*4);return e.readPixels(0,0,t.width,t.height,e.RGBA,e.UNSIGNED_BYTE,n),e.deleteTexture(s),e.deleteFramebuffer(i),{rgba:n,width:t.width,height:t.height}}async function de(g){const{rgba:A}=await js(g);return A}const ie=class ie{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 t=new ReadableStream({start:n=>{n.enqueue(this.fileBytes.slice(0,65536)),n.close()}}).pipeThrough(new TextDecoderStream).getReader();this.header="";const e=`end_header\n`;for(;;){const{value:n,done:r}=await t.read();if(r)throw new Error("Failed to read header");this.header+=n;const a=this.header.indexOf(e);if(a>=0){this.header=this.header.slice(0,a+e.length);break}}const s=new TextEncoder().encode(this.header).length;this.data=new DataView(this.fileBytes.buffer,s),this.elements={};let i=null;this.comments=[],this.header.trim().split(`\n`).forEach((n,r)=>{const a=n.trim();if(r===0){if(a!=="ply")throw new Error("Invalid PLY header");return}if(a.length===0)return;const o=a.split(" ");switch(o[0]){case"format":if(o[1]==="binary_little_endian")this.littleEndian=!0;else if(o[1]==="binary_big_endian")this.littleEndian=!1;else throw new Error(`Unsupported PLY format: ${o[1]}`);if(o[2]!=="1.0")throw new Error(`Unsupported PLY version: ${o[2]}`);break;case"end_header":break;case"comment":this.comments.push(a.slice(8));break;case"element":{const I=o[1];i={name:I,count:Number.parseInt(o[2]),properties:{}},this.elements[I]=i;break}case"property":if(i==null)throw new Error("Property must be inside an element");o[1]==="list"?i.properties[o[4]]={isList:!0,type:o[3],countType:o[2]}:i.properties[o[2]]={isList:!1,type:o[1]};break}}),this.elements.vertex&&(this.numSplats=this.elements.vertex.count)}parseData(A){let t=0;const e=this.data;if(e==null)throw new Error("No data to parse");for(const s in this.elements){const i=this.elements[s],{count:n,properties:r}=i,a={},o=[];for(const[B,Q]of Object.entries(r))Q.isList?(a[B]=[],o.push(()=>{const h=a[B];h.length=gs[Q.countType](e,t,this.littleEndian),t+=Ae[Q.countType];for(let C=0;C<h.length;C++)h[C]=gs[Q.type](e,t,this.littleEndian),t+=Ae[Q.type]})):(a[B]=0,o.push(()=>{a[B]=gs[Q.type](e,t,this.littleEndian),t+=Ae[Q.type]}));const I=A(i)??(()=>{});for(let B=0;B<n;B++){for(const Q of o)Q();I(B,a)}}}parseSplats(A,t){if(this.elements.vertex==null)throw new Error("No vertex element found");let e=!1;const s=[];let i=0,n=[],r=[],a=[],o,I,B;function Q(){const l=xa[i];n=new Array(3).fill(null).flatMap((u,d)=>[0,1,2].map((y,D)=>`f_rest_${d+D*l/3}`)),r=new Array(5).fill(null).flatMap((u,d)=>[0,1,2].map((y,D)=>`f_rest_${3+d+D*l/3}`)),a=new Array(7).fill(null).flatMap((u,d)=>[0,1,2].map((y,D)=>`f_rest_${8+d+D*l/3}`)),o=i>=1?new Float32Array(3*3):void 0,I=i>=2?new Float32Array(5*3):void 0,B=i>=3?new Float32Array(7*3):void 0}function h(l,u){if(!o)throw new Error("Missing sh1");for(const[d,y]of n.entries())o[d]=u[y]*8/255-4;if(I)for(const[d,y]of r.entries())I[d]=u[y]*8/255-4;if(B)for(const[d,y]of a.entries())B[d]=u[y]*8/255-4;t==null||t(l,o,I,B)}function C(l){const{min_x:u,min_y:d,min_z:y,max_x:D,max_y:m,max_z:x,min_scale_x:w,min_scale_y:p,min_scale_z:N,max_scale_x:M,max_scale_y:S,max_scale_z:F}=l.properties;if(!u||!d||!y||!D||!m||!x||!w||!p||!N||!M||!S||!F)throw new Error("Missing PLY chunk properties");return e=!0,(k,G)=>{const{min_x:R,min_y:b,min_z:j,max_x:_,max_y:X,max_z:P,min_scale_x:$,min_scale_y:K,min_scale_z:z,max_scale_x:L,max_scale_y:Z,max_scale_z:U,min_r:dA,min_g:lA,min_b:RA,max_r:fA,max_g:mA,max_b:xA}=G;s.push({min_x:R,min_y:b,min_z:j,max_x:_,max_y:X,max_z:P,min_scale_x:$,min_scale_y:K,min_scale_z:z,max_scale_x:L,max_scale_y:Z,max_scale_z:U,min_r:dA,min_g:lA,min_b:RA,max_r:fA,max_g:mA,max_b:xA})}}function E(l){if(t&&l.name==="sh")return i=pn(l.properties),Q(),h;if(l.name!=="vertex")return null;const{packed_position:u,packed_rotation:d,packed_scale:y,packed_color:D}=l.properties;if(!u||!d||!y||!D)throw new Error("Missing PLY properties: packed_position, packed_rotation, packed_scale, packed_color");const m=Math.sqrt(2);return(x,w)=>{const p=s[x>>>8];if(p==null)throw new Error("Missing PLY chunk");const{min_x:N,min_y:M,min_z:S,max_x:F,max_y:k,max_z:G,min_scale_x:R,min_scale_y:b,min_scale_z:j,max_scale_x:_,max_scale_y:X,max_scale_z:P,min_r:$,min_g:K,min_b:z,max_r:L,max_g:Z,max_b:U}=p,{packed_position:dA,packed_rotation:lA,packed_scale:RA,packed_color:fA}=w,mA=(dA>>>21&2047)/2047*(F-N)+N,xA=(dA>>>11&1023)/1023*(k-M)+M,WA=(dA&2047)/2047*(G-S)+S,MA=((lA>>>20&1023)/1023-.5)*m,LA=((lA>>>10&1023)/1023-.5)*m,YA=((lA&1023)/1023-.5)*m,J=Math.sqrt(Math.max(0,1-MA*MA-LA*LA-YA*YA)),IA=lA>>>30,Y=IA===0?MA:IA===1?J:LA,It=IA<=1?LA:IA===2?J:YA,ne=IA<=2?YA:J,BA=IA===0?J:MA,T=Math.exp((RA>>>21&2047)/2047*(_-R)+R),AA=Math.exp((RA>>>11&1023)/1023*(X-b)+b),v=Math.exp((RA&2047)/2047*(P-j)+j),OA=(fA>>>24&255)/255*((L??1)-($??0))+($??0),De=(fA>>>16&255)/255*((Z??1)-(K??0))+(K??0),me=(fA>>>8&255)/255*((U??1)-(z??0))+(z??0),xe=(fA&255)/255;A(x,mA,xA,WA,T,AA,v,Y,It,ne,BA,xe,OA,De,me)}}const c=l=>{if(l.name==="chunk")return C(l);if(e)return E(l);if(l.name!=="vertex")return null;const{x:u,y:d,z:y,scale_0:D,scale_1:m,scale_2:x,rot_0:w,rot_1:p,rot_2:N,rot_3:M,opacity:S,f_dc_0:F,f_dc_1:k,f_dc_2:G,red:R,green:b,blue:j,alpha:_}=l.properties;if(!u||!d||!y)throw new Error("Missing PLY properties: x, y, z");const X=D&&m&&x,P=w&&p&&N&&M,$=_!=null?os[_.type]:1,K=R!=null?os[R.type]:1,z=b!=null?os[b.type]:1,L=j!=null?os[j.type]:1;return i=pn(l.properties),Q(),(Z,U)=>{const dA=X?Math.exp(U.scale_0):ie.defaultPointScale,lA=X?Math.exp(U.scale_1):ie.defaultPointScale,RA=X?Math.exp(U.scale_2):ie.defaultPointScale,fA=P?U.rot_1:0,mA=P?U.rot_2:0,xA=P?U.rot_3:0,WA=P?U.rot_0:1,MA=S!=null?1/(1+Math.exp(-U.opacity)):_!=null?U.alpha/$:1,LA=F!=null?U.f_dc_0*as+.5:R!=null?U.red/K:1,YA=k!=null?U.f_dc_1*as+.5:b!=null?U.green/z:1,J=G!=null?U.f_dc_2*as+.5:j!=null?U.blue/L:1;if(A(Z,U.x,U.y,U.z,dA,lA,RA,fA,mA,xA,WA,MA,LA,YA,J),t&&o){if(o)for(const[IA,Y]of n.entries())o[IA]=U[Y];if(I)for(const[IA,Y]of r.entries())I[IA]=U[Y];if(B)for(const[IA,Y]of a.entries())B[IA]=U[Y];t(Z,o,I,B)}}};this.parseData(c)}injectRgba(A){let t=0;const e=this.data;if(e==null)throw new Error("No parsed data");if(A.length!==this.numSplats*4)throw new Error("Invalid RGBA array length");for(const s in this.elements){const i=this.elements[s],{count:n,properties:r}=i,a=[];let o=0;const I=s==="vertex";if(I){for(const B of["opacity","f_dc_0","f_dc_1","f_dc_2"])if(!r[B]||r[B].type!=="float")throw new Error(`Can\'t injectRgba due to property: ${B}`)}for(const[B,Q]of Object.entries(r))if(Q.isList)a.push(()=>{const h=gs[Q.countType](e,t,this.littleEndian);t+=Ae[Q.countType],t+=h*Ae[Q.type]});else{if(I)if(B==="f_dc_0"||B==="f_dc_1"||B==="f_dc_2"){const h=Number.parseInt(B.slice(5));a.push(()=>{const C=(A[o+h]/255-.5)/as;wn[Q.type](e,t,this.littleEndian,C)})}else B==="opacity"&&a.push(()=>{const h=Math.max(-100,Math.min(100,-Math.log(1/(A[o+3]/255)-1)));wn[Q.type](e,t,this.littleEndian,h)});a.push(()=>{t+=Ae[Q.type]})}for(let B=0;B<n;B++){for(const Q of a)Q();I&&(o+=4)}}}};ie.defaultPointScale=.001;let fe=ie;const as=.28209479177387814,gs={char:(g,A,t)=>g.getInt8(A),uchar:(g,A,t)=>g.getUint8(A),short:(g,A,t)=>g.getInt16(A,t),ushort:(g,A,t)=>g.getUint16(A,t),int:(g,A,t)=>g.getInt32(A,t),uint:(g,A,t)=>g.getUint32(A,t),float:(g,A,t)=>g.getFloat32(A,t),double:(g,A,t)=>g.getFloat64(A,t)},wn={char:(g,A,t,e)=>{g.setInt8(A,e)},uchar:(g,A,t,e)=>{g.setUint8(A,e)},short:(g,A,t,e)=>{g.setInt16(A,e,t)},ushort:(g,A,t,e)=>{g.setUint16(A,e,t)},int:(g,A,t,e)=>{g.setInt32(A,e,t)},uint:(g,A,t,e)=>{g.setUint32(A,e,t)},float:(g,A,t,e)=>{g.setFloat32(A,e,t)},double:(g,A,t,e)=>{g.setFloat64(A,e,t)}},Ae={char:1,uchar:1,short:2,ushort:2,int:4,uint:4,float:4,double:8},os={char:127,uchar:255,short:32767,ushort:65535,int:2147483647,uint:4294967295,float:1,double:1},ma={0:0,9:1,24:2,45:3},xa={0:0,1:9,2:24,3:45};function pn(g){let A=0;for(;g[`f_rest_${A}`];)A+=1;const t=ma[A];if(t==null)throw new Error(`Unsupported number of SH coefficients: ${A}`);return t}const DA={type:"Gsplat"},Ps={type:"PackedSplats"},Ma=(g,A)=>new Na({packedSplats:g,index:A}),Sa=(g,A,t,e)=>new ka({packedSplats:g,index:A,base:t,count:e}),Is=g=>new Ra({gsplat:g}),Vs=({gsplat:g,flags:A,index:t,center:e,scales:s,quaternion:i,rgba:n,rgb:r,opacity:a,x:o,y:I,z:B,r:Q,g:h,b:C})=>new Ga({gsplat:g,flags:A,index:t,center:e,scales:s,quaternion:i,rgba:n,rgb:r,opacity:a,x:o,y:I,z:B,r:Q,g:h,b:C}),Fa=(g,{scale:A,rotate:t,translate:e,recolor:s})=>new Ua({gsplat:g,scale:A,rotate:t,translate:e,recolor:s}),gt=ZA(`\n struct Gsplat {\n vec3 center;\n uint flags;\n vec3 scales;\n int index;\n vec4 quaternion;\n vec4 rgba;\n };\n const uint GSPLAT_FLAG_ACTIVE = 1u << 0u;\n\n bool isGsplatActive(uint flags) {\n return (flags & GSPLAT_FLAG_ACTIVE) != 0u;\n }\n`),Xs=ZA(`\n struct PackedSplats {\n usampler2DArray texture;\n int numSplats;\n };\n`),Dn=ZA(`\n bool readPackedSplat(usampler2DArray texture, int numSplats, int index, out Gsplat gsplat) {\n if ((index >= 0) && (index < numSplats)) {\n uvec4 packed = texelFetch(texture, splatTexCoord(index), 0);\n unpackSplat(packed, gsplat.center, gsplat.scales, gsplat.quaternion, gsplat.rgba);\n return true;\n } else {\n return false;\n }\n }\n`);class Na extends cA{constructor({packedSplats:A,index:t}){super({inTypes:{packedSplats:Ps,index:"int"},outTypes:{gsplat:DA},inputs:{packedSplats:A,index:t},globals:()=>[gt,Xs,Dn],statements:({inputs:e,outputs:s})=>{const{gsplat:i}=s;if(!i)return[];const{packedSplats:n,index:r}=e;let a;return n&&r?a=at(`\n if (readPackedSplat(${n}.texture, ${n}.numSplats, ${r}, ${i})) {\n bool zeroSize = all(equal(${i}.scales, vec3(0.0, 0.0, 0.0)));\n ${i}.flags = zeroSize ? 0u : GSPLAT_FLAG_ACTIVE;\n } else {\n ${i}.flags = 0u;\n }\n `):a=[`${i}.flags = 0u;`],a.push(`${i}.index = ${r??"0"};`),a}})}dynoOut(){return new NA(this,"gsplat")}}class ka extends cA{constructor({packedSplats:A,index:t,base:e,count:s}){super({inTypes:{packedSplats:Ps,index:"int",base:"int",count:"int"},outTypes:{gsplat:DA},inputs:{packedSplats:A,index:t,base:e,count:s},globals:()=>[gt,Xs,Dn],statements:({inputs:i,outputs:n})=>{const{gsplat:r}=n;if(!r)return[];const{packedSplats:a,index:o,base:I,count:B}=i;let Q;return a&&o&&I&&B?Q=at(`\n ${r}.flags = 0u;\n if ((${o} >= ${I}) && (${o} < (${I} + ${B}))) {\n if (readPackedSplat(${a}.texture, ${a}.numSplats, ${o}, ${r})) {\n bool zeroSize = all(equal(${r}.scales, vec3(0.0, 0.0, 0.0)));\n ${r}.flags = zeroSize ? 0u : GSPLAT_FLAG_ACTIVE;\n }\n }\n `):Q=[`${r}.flags = 0u;`],Q.push(`${r}.index = ${o??"0"};`),Q}})}dynoOut(){return new NA(this,"gsplat")}}class Ra extends cA{constructor({gsplat:A}){super({inTypes:{gsplat:DA},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:()=>[gt],statements:({inputs:t,outputs:e})=>{const{gsplat:s}=t,{flags:i,active:n,index:r,center:a,scales:o,quaternion:I,rgba:B,rgb:Q,opacity:h,x:C,y:E,z:c,r:l,g:u,b:d}=e;return[i?`${i} = ${s?`${s}.flags`:"0u"};`:null,n?`${n} = isGsplatActive(${s?`${s}.flags`:"0u"});`:null,r?`${r} = ${s?`${s}.index`:"0"};`:null,a?`${a} = ${s?`${s}.center`:"vec3(0.0, 0.0, 0.0)"};`:null,o?`${o} = ${s?`${s}.scales`:"vec3(0.0, 0.0, 0.0)"};`:null,I?`${I} = ${s?`${s}.quaternion`:"vec4(0.0, 0.0, 0.0, 1.0)"};`:null,B?`${B} = ${s?`${s}.rgba`:"vec4(0.0, 0.0, 0.0, 0.0)"};`:null,Q?`${Q} = ${s?`${s}.rgba.rgb`:"vec3(0.0, 0.0, 0.0)"};`:null,h?`${h} = ${s?`${s}.rgba.a`:"0.0"};`:null,C?`${C} = ${s?`${s}.center.x`:"0.0"};`:null,E?`${E} = ${s?`${s}.center.y`:"0.0"};`:null,c?`${c} = ${s?`${s}.center.z`:"0.0"};`:null,l?`${l} = ${s?`${s}.rgba.r`:"0.0"};`:null,u?`${u} = ${s?`${s}.rgba.g`:"0.0"};`:null,d?`${d} = ${s?`${s}.rgba.b`:"0.0"};`:null].filter(Boolean)}})}}class Ga extends cA{constructor({gsplat:A,flags:t,index:e,center:s,scales:i,quaternion:n,rgba:r,rgb:a,opacity:o,x:I,y:B,z:Q,r:h,g:C,b:E}){super({inTypes:{gsplat:DA,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:DA},inputs:{gsplat:A,flags:t,index:e,center:s,scales:i,quaternion:n,rgba:r,rgb:a,opacity:o,x:I,y:B,z:Q,r:h,g:C,b:E},globals:()=>[gt],statements:({inputs:c,outputs:l})=>{const{gsplat:u}=l;if(!u)return[];const{gsplat:d,flags:y,index:D,center:m,scales:x,quaternion:w,rgba:p,rgb:N,opacity:M,x:S,y:F,z:k,r:G,g:R,b}=c;return[`${u}.flags = ${y??(d?`${d}.flags`:"0u")};`,`${u}.index = ${D??(d?`${d}.index`:"0")};`,`${u}.center = ${m??(d?`${d}.center`:"vec3(0.0, 0.0, 0.0)")};`,`${u}.scales = ${x??(d?`${d}.scales`:"vec3(0.0, 0.0, 0.0)")};`,`${u}.quaternion = ${w??(d?`${d}.quaternion`:"vec4(0.0, 0.0, 0.0, 1.0)")};`,`${u}.rgba = ${p??(d?`${d}.rgba`:"vec4(0.0, 0.0, 0.0, 0.0)")};`,N?`${u}.rgba.rgb = ${N};`:null,M?`${u}.rgba.a = ${M};`:null,S?`${u}.center.x = ${S};`:null,F?`${u}.center.y = ${F};`:null,k?`${u}.center.z = ${k};`:null,G?`${u}.rgba.r = ${G};`:null,R?`${u}.rgba.g = ${R};`:null,b?`${u}.rgba.b = ${b};`:null].filter(Boolean)}})}dynoOut(){return new NA(this,"gsplat")}}ZA(`\n vec3 gsplatNormal(vec3 scales, vec4 quaternion) {\n float minScale = min(scales.x, min(scales.y, scales.z));\n vec3 normal;\n if (scales.z == minScale) {\n normal = vec3(0.0, 0.0, 1.0);\n } else if (scales.y == minScale) {\n normal = vec3(0.0, 1.0, 0.0);\n } else {\n normal = vec3(1.0, 0.0, 0.0);\n }\n return quatVec(quaternion, normal);\n }\n`);class Ua extends cA{constructor({gsplat:A,scale:t,rotate:e,translate:s,recolor:i}){super({inTypes:{gsplat:DA,scale:"float",rotate:"vec4",translate:"vec3",recolor:"vec4"},outTypes:{gsplat:DA},inputs:{gsplat:A,scale:t,rotate:e,translate:s,recolor:i},globals:()=>[gt],statements:({inputs:n,outputs:r,compile:a})=>{const{gsplat:o}=r;if(!o||!n.gsplat)return[];const{scale:I,rotate:B,translate:Q,recolor:h}=n,C=a.indent;return[`${o} = ${n.gsplat};`,`if (isGsplatActive(${o}.flags)) {`,I?`${C}${o}.center *= ${I};`:null,B?`${C}${o}.center = quatVec(${B}, ${o}.center);`:null,Q?`${C}${o}.center += ${Q};`:null,I?`${C}${o}.scales *= ${I};`:null,B?`${C}${o}.quaternion = quatQuat(${B}, ${o}.quaternion);`:null,h?`${C}${o}.rgba *= ${h};`:null,"}"].filter(Boolean)}})}dynoOut(){return new NA(this,"gsplat")}}const ba=g=>new La({gsplat:g});class La extends cA{constructor({gsplat:A}){super({inTypes:{gsplat:DA},inputs:{gsplat:A},globals:()=>[gt],statements:({inputs:t,outputs:e})=>{const{output:s}=e;if(!s)return[];const{gsplat:i}=t;return i?at(`\n if (isGsplatActive(${i}.flags)) {\n ${s} = packSplat(${i}.center, ${i}.scales, ${i}.quaternion, ${i}.rgba);\n } else {\n ${s} = uvec4(0u, 0u, 0u, 0u);\n }\n `):[`${s} = uvec4(0u, 0u, 0u, 0u);`]}})}dynoOut(){return new NA(this,"output")}}class Ya extends cA{constructor({rgba8:A}){super({inTypes:{rgba8:"vec4"},inputs:{rgba8:A},statements:({inputs:t,outputs:e})=>[`target = ${t.rgba8??"vec4(0.0, 0.0, 0.0, 0.0)"};`]})}dynoOut(){return new NA(this,"rgba8")}}class ot extends cA{constructor({key:A,type:t,count:e,value:s,update:i,globals:n}){A=A??"value",super({outTypes:{[A]:t},update:()=>{if(i){const r=i(this.value);r!==void 0&&(this.value=r)}this.uniform.value=this.value},generate:({inputs:r,outputs:a})=>{const o=(n==null?void 0:n({inputs:r,outputs:a}))??[],I={},B=a[A];return B&&(o.push(`uniform ${Qn(B,t,e)};`),I[B]=this.uniform),{globals:o,uniforms:I}}}),this.type=t,this.count=e,this.value=s,this.uniform={value:s},this.outKey=A}dynoOut(){return new NA(this,this.outKey)}}class $s extends ot{constructor({key:A,value:t,update:e}){super({key:A,type:"int",value:t,update:e})}}class Bs extends ot{constructor({key:A,value:t,update:e}){super({key:A,type:"float",value:t,update:e})}}class Ja extends ot{constructor({key:A,value:t,update:e}){super({key:A,type:"vec3",value:t,update:e})}}class mn extends ot{constructor({key:A,value:t,update:e}){super({key:A,type:"vec4",value:t,update:e})}}class Ai extends ot{constructor({key:A,value:t,update:e}){super({key:A,type:"usampler2DArray",value:t,update:e})}}class xn{constructor({graph:A,inputs:t,outputs:e,template:s}){this.graph=A,this.template=s,this.inputs=t??{},this.outputs=e??{};const i=new ra({indent:this.template.indent});for(const r in this.outputs)this.outputs[r]&&i.declares.add(this.outputs[r]);const n=A.compile({inputs:this.inputs,outputs:this.outputs,compile:i});this.shader=s.generate({globals:i.globals,statements:n}),this.uniforms=i.uniforms,this.updaters=i.updaters}prepareMaterial(){return Ta(this)}update(){for(const A of this.updaters)A()}}class Mn{constructor(A){const t=A.match(/^([ \\t]*)\\{\\{\\s*GLOBALS\\s*\\}\\}/m),e=A.match(/^([ \\t]*)\\{\\{\\s*STATEMENTS\\s*\\}\\}/m);if(!t||!e)throw new Error("Template must contain {{ GLOBALS }} and {{ STATEMENTS }}");this.before=A.substring(0,t.index),this.between=A.substring(t.index+t[0].length,e.index),this.after=A.substring(e.index+e[0].length),this.indent=e[1]}generate({globals:A,statements:t}){return this.before+Array.from(A).join(`\n\n`)+this.between+t.map(e=>this.indent+e).join(`\n`)+this.after}}const Sn=new Map;function Ta(g){let A=Sn.get(g);return A||(A=new Ks({glslVersion:dr,vertexShader:la,fragmentShader:g.shader,uniforms:g.uniforms}),Sn.set(g,A),A)}function Fn(g,A,t="add"){const e=()=>{throw new Error(`Invalid ${t} types: ${g}, ${A}`)};if(g===A)return g;if(g==="int"){if(Ot(A))return A;e()}if(A==="int"){if(Ot(g))return g;e()}if(g==="uint"){if(jt(A))return A;e()}if(A==="uint"){if(jt(g))return g;e()}if(g==="float"){if(Pe(A))return A;e()}if(A==="float"){if(Pe(g))return g;e()}throw new Error(`Invalid ${t} types: ${g}, ${A}`)}function Ha(g,A){return Fn(g,A,"sub")}function va(g,A){const t=()=>{throw new Error(`Invalid mul types: ${g}, ${A}`)},e=s=>s;if(g==="int"){if(Ot(A))return e(A);t()}if(A==="int"){if(Ot(g))return e(g);t()}if(g==="uint"){if(jt(A))return e(A);t()}if(A==="uint"){if(jt(g))return e(g);t()}if(g==="float"){if(Pe(A))return e(A);t()}if(A==="float"){if(Pe(g))return e(g);t()}if(Ot(g)||jt(g)||Ot(A)||jt(A)){if(g===A)return e(g);t()}if(g==="vec2"){if(A==="vec2"||Pt(A))return e("vec2");if(A==="mat3x2")return e("vec3");if(A==="mat4x2")return e("vec4");t()}if(g==="vec3"){if(A==="mat2x3")return e("vec2");if(A==="vec3"||Vt(A))return e("vec3");if(A==="mat4x3")return e("vec4");t()}if(g==="vec4"){if(A==="mat2x4")return e("vec2");if(A==="mat3x4")return e("vec3");if(A==="vec4"||Xt(A))return e("vec4");t()}if(A==="vec2"){if(Pt(g))return e("vec2");if(g==="mat2x3")return e("vec3");if(g==="mat2x4")return e("vec4");t()}if(A==="vec3"){if(g==="mat3x2")return e("vec2");if(Vt(g))return e("vec3");if(g==="mat3x4")return e("vec4");t()}if(A==="vec4"){if(g==="mat4x2")return e("vec2");if(g==="mat4x3")return e("vec3");if(Xt(g))return e("vec4");t()}if(Pt(g)){if(Pt(A))return e("mat2");if(A==="mat3x2")return e("mat3x2");if(A==="mat4x2")return e("mat4x2");t()}if(g==="mat2x3"){if(Pt(A))return e("mat2x3");if(A==="mat3x2")return e("mat3");if(A==="mat4x2")return e("mat4x3");t()}if(g==="mat2x4"){if(Pt(A))return e("mat2x4");if(A==="mat3x2")return e("mat3x4");if(A==="mat4x2")return e("mat4");t()}if(g==="mat3x2"){if(A==="mat2x3")return e("mat2");if(Vt(A))return e("mat3x2");if(A==="mat4x3")return e("mat4x2");t()}if(Vt(g)){if(A==="mat2x3")return e("mat2x3");if(Vt(A))return e("mat3");if(A==="mat4x3")return e("mat4x3");t()}if(g==="mat3x4"){if(A==="mat2x3")return e("mat2x4");if(Vt(A))return e("mat3x4");if(A==="mat4x3")return e("mat4");t()}if(g==="mat4x2"){if(A==="mat2x4")return e("mat2");if(A==="mat3x4")return e("mat3x2");if(Xt(A))return e("mat4x2");t()}if(g==="mat4x3"){if(A==="mat2x4")return e("mat2x3");if(A==="mat3x4")return e("mat3");if(Xt(A))return e("mat4x3");t()}if(Xt(g)){if(A==="mat2x4")return e("mat2x4");if(A==="mat3x4")return e("mat3x4");if(Xt(A))return e("mat4");t()}throw new Error(`Invalid mul types: ${g}, ${A}`)}const Qs=(g,A)=>new qa({a:g,b:A}),za=(g,A)=>new _a({a:g,b:A}),Ka=(g,A)=>new Za({a:g,b:A});class qa extends $e{constructor({a:A,b:t}){super({a:A,b:t,outKey:"sum",outTypeFunc:Fn}),this.statements=({inputs:e,outputs:s})=>[`${s.sum} = ${e.a} + ${e.b};`]}}class _a extends $e{constructor({a:A,b:t}){super({a:A,b:t,outKey:"difference",outTypeFunc:Ha}),this.statements=({inputs:e,outputs:s})=>[`${s.difference} = ${e.a} - ${e.b};`]}}class Za extends $e{constructor({a:A,b:t}){super({a:A,b:t,outKey:"product",outTypeFunc:va}),this.statements=({inputs:e,outputs:s})=>[`${s.product} = ${e.a} * ${e.b};`]}}const Wa=g=>new ja({a:g}),Oa=(g,A)=>new Va({a:g,b:A});class ja extends ga{constructor({a:A}){super({a:A,outTypeFunc:t=>t,outKey:"normalize"}),this.statements=({inputs:t,outputs:e})=>[`${e.normalize} = normalize(${t.a});`]}}function Pa(g){if(g==="float")return"vec2";if(g==="vec2")return"vec3";if(g==="vec3")return"vec4";throw new Error("Invalid type")}class Va extends $e{constructor({a:A,b:t}){const e=Ft(A),s=Pa(e);super({a:A,b:t,outKey:"extend",outTypeFunc:()=>s}),this.statements=({inputs:i,outputs:n})=>[`${n.extend} = ${s}(${i.a}, ${i.b});`]}}const Xa=(g,{scale:A,scales:t,rotate:e,translate:s})=>new Ag({position:g,scale:A,scales:t,rotate:e,translate:s}).outputs.position,$a=(g,{scale:A,scales:t,rotate:e})=>new tg({dir:g,scale:A,scales:t,rotate:e}).outputs.dir;class Ag extends cA{constructor({position:A,scale:t,scales:e,rotate:s,translate:i}){super({inTypes:{position:"vec3",scale:"float",scales:"vec3",rotate:"vec4",translate:"vec3"},outTypes:{position:"vec3"},inputs:{position:A,scale:t,scales:e,rotate:s,translate:i},statements:({inputs:n,outputs:r})=>{const{position:a}=r;if(!a)return[];const{scale:o,scales:I,rotate:B,translate:Q}=n;return[`${a} = ${n.position??"vec3(0.0, 0.0, 0.0)"};`,o?`${a} *= ${o};`:null,I?`${a} *= ${I};`:null,B?`${a} = quatVec(${B}, ${a});`:null,Q?`${a} += ${Q};`:null].filter(Boolean)}})}}class tg extends cA{constructor({dir:A,scale:t,scales:e,rotate:s}){super({inTypes:{dir:"vec3",scale:"float",scales:"vec3",rotate:"vec4"},outTypes:{dir:"vec3"},inputs:{dir:A,scale:t,scales:e,rotate:s},statements:({inputs:i,outputs:n})=>{const{dir:r}=n;if(!r)return[];const{scale:a,scales:o,rotate:I}=i;return[`${r} = ${i.dir??"vec3(0.0, 0.0, 0.0)"};`,a?`${r} *= ${a};`:null,o?`${r} *= ${o};`:null,I?`${r} = quatVec(${I}, ${r});`:null].filter(Boolean)}})}}var eg=`precision highp float;\nprecision highp int;\nprecision highp sampler2D;\nprecision highp usampler2D;\nprecision highp isampler2D;\nprecision highp sampler2DArray;\nprecision highp usampler2DArray;\nprecision highp isampler2DArray;\nprecision highp sampler3D;\nprecision highp usampler3D;\nprecision highp isampler3D;\n\n#include <splatDefines>\n\nuniform uint targetLayer;\nuniform int targetBase;\nuniform int targetCount;\n\nout uvec4 target;\n\n{{ GLOBALS }}\n\nvoid produceSplat(int index) {\n {{ STATEMENTS }}\n}\n\nvoid main() {\n int targetIndex = int(targetLayer << SPLAT_TEX_LAYER_BITS) + int(uint(gl_FragCoord.y) << SPLAT_TEX_WIDTH_BITS) + int(gl_FragCoord.x);\n int index = targetIndex - targetBase;\n\n if ((index >= 0) && (index < targetCount)) {\n produceSplat(index);\n } else {\n target = uvec4(0u, 0u, 0u, 0u);\n }\n}`;const O=class O{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 Nn({packedSplats:this}),this.initialized=Promise.resolve(this),this.reinitialize(A)}reinitialize(A){this.isInitialized=!1,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/W)*W,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:t,fileBytes:e,construct:s}=A;if(t){const i=new yg;i.packedSplats=this,await i.loadAsync(t)}else if(e){const i=await zn({input:e,fileType:A.fileType,pathOrUrl:A.fileName??t});this.initialize(i)}if(s){const i=s(this);i instanceof Promise&&await i}}dispose(){this.target&&(this.target.dispose(),this.target=null),this.source&&(this.source.dispose(),this.source=null)}ensureSplats(A){const t=A<=this.maxSplats?this.maxSplats:Math.max(A,2*this.maxSplats),e=this.packedArray?this.packedArray.length/4:0;if(!this.packedArray||t>e){this.maxSplats=kA(t).maxSplats;const s=new Uint32Array(this.maxSplats*4);this.packedArray&&s.set(this.packedArray),this.packedArray=s}return this.packedArray}ensureSplatsSh(A,t){let e,s;if(A===0)return this.ensureSplats(t);if(A===1)e=2,s="sh1";else if(A===2)e=4,s="sh2";else if(A===3)e=4,s="sh3";else throw new Error(`Invalid level: ${A}`);let i=this.extra[s]?this.extra[s].length/e:0;const n=t<=i?i:Math.max(t,2*i);if(!this.extra[s]||n>i){i=kA(n).maxSplats;const r=new Uint32Array(i*e);this.extra[s]&&r.set(this.extra[s]),this.extra[s]=r}return this.extra[s]}getSplat(A){if(!this.packedArray||A>=this.numSplats)throw new Error("Invalid index");return un(this.packedArray,A)}setSplat(A,t,e,s,i,n){const r=this.ensureSplats(A+1);ue(r,A,t.x,t.y,t.z,e.x,e.y,e.z,s.x,s.y,s.z,s.w,i,n.r,n.g,n.b),this.numSplats=Math.max(this.numSplats,A+1)}pushSplat(A,t,e,s,i){const n=this.ensureSplats(this.numSplats+1);ue(n,this.numSplats,A.x,A.y,A.z,t.x,t.y,t.z,e.x,e.y,e.z,e.w,s,i.r,i.g,i.b),++this.numSplats}forEachSplat(A){if(!(!this.packedArray||!this.numSplats))for(let t=0;t<this.numSplats;++t){const e=un(this.packedArray,t);A(t,e.center,e.scales,e.quaternion,e.opacity,e.color)}}ensureGenerate(A){if(this.target&&(A??1)<=this.maxSplats)return!1;this.dispose();const t=kA(A??1),{width:e,height:s,depth:i}=t;return this.maxSplats=t.maxSplats,this.target=new Ki(e,s,i,{depthBuffer:!1,stencilBuffer:!1,generateMipmaps:!1,magFilter:Qt,minFilter:Qt}),this.target.texture.format=Gt,this.target.texture.type=pt,this.target.texture.internalFormat="RGBA32UI",this.target.scissorTest=!0,!0}generateMapping(A){let t=0;const e=A.map(s=>{const i=t,n=Math.ceil(s/W)*W;return t+=n,{base:i,count:s}});return{maxSplats:t,mapping:e}}getTexture(){return this.target?this.target.texture:this.source||this.packedArray?this.maybeUpdateSource():O.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:t,depth:e}=this.source.image;this.maxSplats!==A*t*e&&(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:t,depth:e}=kA(this.maxSplats);this.source=new ht(this.packedArray,A,t,e),this.source.format=Gt,this.source.type=pt,this.source.internalFormat="RGBA32UI",this.source.needsUpdate=!0}this.source.needsUpdate=!0}return this.source}static getEmpty(){if(!O.emptySource){const{width:A,height:t,depth:e,maxSplats:s}=kA(1),i=new Uint32Array(s*4);O.emptySource=new ht(i,A,t,e),O.emptySource.format=Gt,O.emptySource.type=pt,O.emptySource.internalFormat="RGBA32UI",O.emptySource.needsUpdate=!0}return O.emptySource}prepareProgramMaterial(A){let t=O.generatorProgram.get(A);if(!t){const s=Xe({index:"int"},{output:"uvec4"},({index:i})=>{A.inputs.index=i;const n=A.outputs.gsplat;return{output:ba(n)}});O.programTemplate||(O.programTemplate=new Mn(eg)),t=new xn({graph:s,inputs:{index:"index"},outputs:{output:"target"},template:O.programTemplate}),Object.assign(t.uniforms,{targetLayer:{value:0},targetBase:{value:0},targetCount:{value:0}}),O.generatorProgram.set(A,t)}const e=t.prepareMaterial();return O.mesh.material=e,{program:t,material:e}}saveRenderState(A){return{xrEnabled:A.xr.enabled,autoClear:A.autoClear}}resetRenderState(A,t){A.setRenderTarget(null),A.xr.enabled=t.xrEnabled,A.autoClear=t.autoClear}generate({generator:A,base:t,count:e,renderer:s}){if(!this.target)throw new Error("Target must be initialized with ensureSplats");if(t+e>this.maxSplats)throw new Error("Base + count exceeds maxSplats");const{program:i,material:n}=this.prepareProgramMaterial(A);i.update();const r=this.saveRenderState(s),a=Math.ceil((t+e)/W)*W,o=W*dt;for(n.uniforms.targetBase.value=t,n.uniforms.targetCount.value=e;t<a;){const I=Math.floor(t/o);n.uniforms.targetLayer.value=I;const B=I*o,Q=Math.floor((t-B)/W),h=Math.min(dt,Math.ceil((a-B)/W));this.target.scissor.set(0,Q,W,h-Q),s.setRenderTarget(this.target,I),s.xr.enabled=!1,s.autoClear=!1,s.render(O.scene,O.camera),t+=W*(h-Q)}return this.resetRenderState(s,r),{nextBase:a}}};O.emptySource=null,O.programTemplate=null,O.generatorProgram=new Map,O.geometry=new je(2,2),O.mesh=new rn(O.geometry,new Ks({visible:!1})),O.scene=new gn().add(O.mesh),O.camera=new an;let te=O;class Nn extends ot{constructor({packedSplats:A}={}){super({key:"packedSplats",type:Ps,globals:()=>[Xs],value:{texture:te.getEmpty(),numSplats:0},update:t=>{var e,s;return t.texture=((e=this.packedSplats)==null?void 0:e.getTexture())??te.getEmpty(),t.numSplats=((s=this.packedSplats)==null?void 0:s.numSplats)??0,t}}),this.packedSplats=A}}var sg=`precision highp float;\nprecision highp int;\nprecision highp sampler2D;\nprecision highp usampler2D;\nprecision highp isampler2D;\nprecision highp sampler2DArray;\nprecision highp usampler2DArray;\nprecision highp isampler2DArray;\nprecision highp sampler3D;\nprecision highp usampler3D;\nprecision highp isampler3D;\n\n#include <splatDefines>\n\nuniform uint targetLayer;\nuniform int targetBase;\nuniform int targetCount;\n\nout vec4 target;\n\n{{ GLOBALS }}\n\nvoid computeReadback(int index) {\n {{ STATEMENTS }}\n}\n\nvoid main() {\n int targetIndex = int(targetLayer << SPLAT_TEX_LAYER_BITS) + int(uint(gl_FragCoord.y) << SPLAT_TEX_WIDTH_BITS) + int(gl_FragCoord.x);\n int index = targetIndex - targetBase;\n\n if ((index >= 0) && (index < targetCount)) {\n computeReadback(index);\n } else {\n target = vec4(0.0, 0.0, 0.0, 0.0);\n }\n}`;const gA=class gA{constructor({renderer:A}={}){this.renderer=A,this.capacity=0,this.count=0}dispose(){this.target&&(this.target.dispose(),this.target=void 0)}ensureBuffer(A,t){const s=Math.ceil(Math.max(1,A)/W)*W*4;if(t.byteLength>=s)return t;const i=new ArrayBuffer(s);if(t instanceof ArrayBuffer)return i;const n=t.constructor;return new n(i)}ensureCapacity(A){const{width:t,height:e,depth:s,maxSplats:i}=kA(A);(!this.target||i>this.capacity)&&(this.dispose(),this.capacity=i,this.target=new Ki(t,e,s,{depthBuffer:!1,stencilBuffer:!1,generateMipmaps:!1,magFilter:Qt,minFilter:Qt}),this.target.texture.format=Ne,this.target.texture.type=Fe,this.target.texture.internalFormat="RGBA8",this.target.scissorTest=!0)}prepareProgramMaterial(A){let t=gA.readbackProgram.get(A);if(!t){const s=Xe({index:"int"},{rgba8:"vec4"},({index:i})=>(A.inputs.index=i,{rgba8:new Ya({rgba8:A.outputs.rgba8})}));gA.programTemplate||(gA.programTemplate=new Mn(sg)),t=new xn({graph:s,inputs:{index:"index"},outputs:{rgba8:"target"},template:gA.programTemplate}),Object.assign(t.uniforms,{targetLayer:{value:0},targetBase:{value:0},targetCount:{value:0}}),gA.readbackProgram.set(A,t)}const e=t.prepareMaterial();return gA.mesh.material=e,{program:t,material:e}}saveRenderState(A){return{xrEnabled:A.xr.enabled,autoClear:A.autoClear}}resetRenderState(A,t){A.setRenderTarget(null),A.xr.enabled=t.xrEnabled,A.autoClear=t.autoClear}process({count:A,material:t}){const e=this.renderer;if(!e)throw new Error("No renderer");if(!this.target)throw new Error("No target");const s=W*dt;t.uniforms.targetBase.value=0,t.uniforms.targetCount.value=A;let i=0;for(;i<A;){const n=Math.floor(i/s),r=n*s,a=Math.min(dt,Math.ceil((A-r)/W));t.uniforms.targetLayer.value=n,this.target.scissor.set(0,0,W,a),e.setRenderTarget(this.target,n),e.xr.enabled=!1,e.autoClear=!1,e.render(gA.scene,gA.camera),i+=W*a}this.count=A}async read({readback:A}){const t=this.renderer;if(!t)throw new Error("No renderer");if(!this.target)throw new Error("No target");const e=Math.ceil(this.count/W)*W;if(A.byteLength<e*4)throw new Error(`Readback buffer too small: ${A.byteLength} < ${e*4}`);const s=new Uint8Array(A instanceof ArrayBuffer?A:A.buffer),i=W*dt;let n=0;const r=[];for(;n<this.count;){const a=Math.floor(n/i),o=a*i,I=Math.min(dt,Math.ceil((this.count-o)/W));t.setRenderTarget(this.target,a);const B=W*I*4,Q=s.subarray(o*4,o*4+B),h=t==null?void 0:t.readRenderTargetPixelsAsync(this.target,0,0,W,I,Q);r.push(h),n+=W*I}return Promise.all(r).then(()=>A)}render({reader:A,count:t,renderer:e}){if(this.renderer=e||this.renderer,!this.renderer)throw new Error("No renderer");this.ensureCapacity(t);const{program:s,material:i}=this.prepareProgramMaterial(A);s.update();const n=this.saveRenderState(this.renderer);this.process({count:t,material:i}),this.resetRenderState(this.renderer,n)}async readback({readback:A}){if(!this.renderer)throw new Error("No renderer");const t=this.saveRenderState(this.renderer),e=this.read({readback:A});return this.resetRenderState(this.renderer,t),e}async renderReadback({reader:A,count:t,renderer:e,readback:s}){if(this.renderer=e||this.renderer,!this.renderer)throw new Error("No renderer");this.ensureCapacity(t);const{program:i,material:n}=this.prepareProgramMaterial(A);i.update();const r=this.saveRenderState(this.renderer);this.process({count:t,material:n});const a=this.read({readback:s});return this.resetRenderState(this.renderer,r),a}getTexture(){var A;return(A=this.target)==null?void 0:A.texture}};gA.programTemplate=null,gA.readbackProgram=new Map,gA.geometry=new je(2,2),gA.mesh=new rn(gA.geometry,new Ks({visible:!1})),gA.scene=new gn().add(gA.mesh),gA.camera=new an;let ti=gA;const oA=class oA{constructor(A={}){this.capacity=0,this.count=0,this.array=null,this.readback=null,this.source=null,this.needsUpdate=!0,this.dyno=new ot({key:"rgbaArray",type:Rn,globals:()=>[Gn],value:{texture:oA.getEmpty(),count:0},update:t=>{var e;return t.texture=((e=this.readback)==null?void 0:e.getTexture())??this.source??oA.getEmpty(),t.count=this.count,t}}),A.array?(this.array=A.array,this.capacity=Math.floor(this.array.length/4),this.capacity=Math.floor(this.capacity/W)*W,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 t;if(!this.array||A>(((t=this.array)==null?void 0:t.length)??0)/4){this.capacity=kA(A).maxSplats;const e=new Uint8Array(this.capacity*4);this.array&&e.set(this.array),this.array=e}return this.array}getTexture(){var t;let A=(t=this.readback)==null?void 0:t.getTexture();return(this.source||this.array)&&(A=this.maybeUpdateSource()),A??oA.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:t,depth:e}=this.source.image;this.capacity!==A*t*e&&(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:t,depth:e}=kA(this.capacity);this.source=new ht(this.array,A,t,e),this.source.format=Ne,this.source.type=Fe,this.source.internalFormat="RGBA8",this.source.needsUpdate=!0}this.source.needsUpdate=!0}return this.source}render({reader:A,count:t,renderer:e}){this.readback||(this.readback=new ti({renderer:e})),this.readback.render({reader:A,count:t,renderer:e}),this.capacity=this.readback.capacity,this.count=this.readback.count}fromPackedSplats({packedSplats:A,base:t,count:e,renderer:s}){const{dynoSplats:i,dynoBase:n,dynoCount:r,reader:a}=oA.makeDynos();return i.packedSplats=A,n.value=t,r.value=e,this.render({reader:a,count:e,renderer:s}),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(!oA.emptySource){const A=new Uint8Array(4);oA.emptySource=new ht(A,1,1,1),oA.emptySource.format=Ne,oA.emptySource.type=Fe,oA.emptySource.internalFormat="RGBA8",oA.emptySource.needsUpdate=!0}return oA.emptySource}static makeDynos(){if(!oA.dynos){const A=new Nn,t=new $s({value:0}),e=new $s({value:0}),s=Xe({index:"int"},{rgba8:"vec4"},({index:i})=>{if(!i)throw new Error("index is undefined");i=Qs(i,t);const n=Sa(A,i,t,e);return{rgba8:Is(n).outputs.rgba}});oA.dynos={dynoSplats:A,dynoBase:t,dynoCount:e,reader:s}}return oA.dynos}};oA.emptySource=null,oA.dynos=null;let kn=oA;const Rn={type:"RgbaArray"},Gn=ZA(`\n struct RgbaArray {\n sampler2DArray texture;\n int count;\n };\n`);function ig(g,A){return new cA({inTypes:{rgba:Rn,index:"int"},outTypes:{rgba:"vec4"},inputs:{rgba:g,index:A},globals:()=>[Gn],statements:({inputs:e,outputs:s})=>at(`\n if ((index >= 0) && (index < ${e.rgba}.count)) {\n ${s.rgba} = texelFetch(${e.rgba}.texture, splatTexCoord(index), 0);\n } else {\n ${s.rgba} = vec4(0.0, 0.0, 0.0, 0.0);\n }\n `)}).outputs.rgba}function ng(g){switch(g){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: ${g}`)}}function rg(g){switch(g){case"multiply":return 0;case"set_rgb":return 1;case"add_rgba":return 2;default:throw new Error(`Unknown blend mode: ${g}`)}}class ag extends pA{constructor(A={}){super();const{type:t,invert:e,opacity:s,color:i,displace:n,radius:r}=A;this.type=t??"sphere",this.invert=e??!1,this.opacity=s??1,this.color=i??new Mt(1,1,1),this.displace=n??new f(0,0,0),this.radius=r??0}}const Es=class Es extends pA{constructor(A={}){const{name:t,rgbaBlendMode:e="multiply",sdfSmooth:s=0,softEdge:i=0,invert:n=!1,sdfs:r=null}=A;super(),this.rgbaBlendMode=e,this.sdfSmooth=s,this.softEdge=i,this.invert=n,this.sdfs=r,this.ordering=Es.nextOrdering++,this.name=t??`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(t=>t!==A))}};Es.nextOrdering=1;let ei=Es;class gg{constructor({maxSdfs:A,maxEdits:t}){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 ot({key:"sdfArray",type:Un,globals:()=>[bn],value:{numSdfs:0,sdfTexture:this.sdfTexture},update:e=>(e.numSdfs=this.numSdfs,e.sdfTexture=this.sdfTexture,e)}),this.maxEdits=Math.max(16,t??0),this.numEdits=0,this.editData=new Uint32Array(this.maxEdits*4),this.editFloatData=new Float32Array(this.editData.buffer),this.dynoNumEdits=new $s({value:0}),this.dynoEdits=this.newEdits(this.editData,this.maxEdits)}newSdfTexture(A,t){const e=new Or(A,8,t,Gt,pt);return e.internalFormat="RGBA32UI",e.needsUpdate=!0,e}newEdits(A,t){return new ot({key:"edits",type:"uvec4",count:t,globals:()=>[Ln],value:A})}ensureCapacity({maxSdfs:A,maxEdits:t}){let e=!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)),t>(this.dynoEdits.count??0)&&(this.maxEdits=Math.max(this.maxEdits*2,t),this.editData=new Uint32Array(this.maxEdits*4),this.editFloatData=new Float32Array(this.editData.buffer),this.dynoEdits=this.newEdits(this.editData,this.maxEdits),e=!0),e}updateEditData(A,t){const e=this.editData[A]!==t;return this.editData[A]=t,e}updateEditFloatData(A,t){ee[0]=t;const e=this.editFloatData[A]!==ee[0];return e&&(this.editFloatData[A]=ee[0]),e}encodeEdit(A,{sdfFirst:t,sdfCount:e,invert:s,rgbaBlendMode:i,softEdge:n,sdfSmooth:r}){const a=A*4;let o=!1;return o=this.updateEditData(a+0,i|(s?256:0))||o,o=this.updateEditData(a+1,t|e<<16)||o,o=this.updateEditFloatData(a+2,n)||o,o=this.updateEditFloatData(a+3,r)||o,o}updateSdfData(A,t){const e=this.sdfData[A]!==t;return this.sdfData[A]=t,e}updateSdfFloatData(A,t){ee[0]=t;const e=this.sdfFloatData[A]!==ee[0];return e&&(this.sdfFloatData[A]=ee[0]),e}encodeSdf(A,{sdfType:t,invert:e,center:s,quaternion:i,scale:n,sizes:r},a){const o=A*32,I=t|(e?256:0);let B=!1;B=this.updateSdfFloatData(o+0,(s==null?void 0:s.x)??0)||B,B=this.updateSdfFloatData(o+1,(s==null?void 0:s.y)??0)||B,B=this.updateSdfFloatData(o+2,(s==null?void 0:s.z)??0)||B,B=this.updateSdfData(o+3,I)||B,B=this.updateSdfFloatData(o+4,(i==null?void 0:i.x)??0)||B,B=this.updateSdfFloatData(o+5,(i==null?void 0:i.y)??0)||B,B=this.updateSdfFloatData(o+6,(i==null?void 0:i.z)??0)||B,B=this.updateSdfFloatData(o+7,(i==null?void 0:i.w)??0)||B,B=this.updateSdfFloatData(o+8,(n==null?void 0:n.x)??0)||B,B=this.updateSdfFloatData(o+9,(n==null?void 0:n.y)??0)||B,B=this.updateSdfFloatData(o+10,(n==null?void 0:n.z)??0)||B,B=this.updateSdfData(o+11,0)||B,B=this.updateSdfFloatData(o+12,(r==null?void 0:r.x)??0)||B,B=this.updateSdfFloatData(o+13,(r==null?void 0:r.y)??0)||B,B=this.updateSdfFloatData(o+14,(r==null?void 0:r.z)??0)||B,B=this.updateSdfFloatData(o+15,(r==null?void 0:r.w)??0)||B;const Q=Math.min(4,a.length);for(let h=0;h<Q;++h){const C=o+16+h*4;B=this.updateSdfFloatData(C+0,a[h].x)||B,B=this.updateSdfFloatData(C+1,a[h].y)||B,B=this.updateSdfFloatData(C+2,a[h].z)||B,B=this.updateSdfFloatData(C+3,a[h].w)||B}return B}update(A){const t=A.reduce((B,{sdfs:Q})=>B+Q.length,0),e=this.ensureCapacity({maxEdits:A.length,maxSdfs:t}),s=[new uA,new uA],i=new f,n=new rA,r=new f,a=new uA;let o=0,I=e;A.length!==this.dynoNumEdits.value&&(this.dynoNumEdits.value=A.length,this.numEdits=A.length,I=!0);for(const[B,{edit:Q,sdfs:h}]of A.entries()){I=this.encodeEdit(B,{sdfFirst:o,sdfCount:h.length,invert:Q.invert,rgbaBlendMode:rg(Q.rgbaBlendMode),softEdge:Q.softEdge,sdfSmooth:Q.sdfSmooth})||I;let C=!1;for(const E of h)a.set(E.scale.x,E.scale.y,E.scale.z,E.radius),E.scale.setScalar(1),E.updateMatrixWorld(),E.matrixWorld.clone().invert().decompose(i,n,r),E.scale.set(a.x,a.y,a.z),E.updateMatrixWorld(),s[0].set(E.color.r,E.color.g,E.color.b,E.opacity),s[1].set(E.displace.x,E.displace.y,E.displace.z,1),C=this.encodeSdf(o,{sdfType:ng(E.type),invert:E.invert,center:i,quaternion:n,scale:r,sizes:a},s)||C,o+=1;this.numSdfs=o,C&&(this.sdfTexture.needsUpdate=!0),I||(I=C)}return{updated:I,dynoUpdated:e}}modify(A){return og(A,this.dynoSdfArray,this.dynoNumEdits,this.dynoEdits)}}const Un={type:"SdfArray"},bn=ZA(`\n struct SdfArray {\n int numSdfs;\n usampler2D sdfTexture;\n };\n\n void unpackSdfArray(\n usampler2D sdfTexture, int sdfIndex, out uint flags,\n out vec3 center, out vec4 quaternion, out vec3 scale, out vec4 sizes,\n int numValues, out vec4 values[4]\n ) {\n uvec4 temp = texelFetch(sdfTexture, ivec2(0, sdfIndex), 0);\n flags = temp.w;\n center = vec3(uintBitsToFloat(temp.x), uintBitsToFloat(temp.y), uintBitsToFloat(temp.z));\n\n temp = texelFetch(sdfTexture, ivec2(1, sdfIndex), 0);\n quaternion = vec4(uintBitsToFloat(temp.x), uintBitsToFloat(temp.y), uintBitsToFloat(temp.z), uintBitsToFloat(temp.w));\n\n temp = texelFetch(sdfTexture, ivec2(2, sdfIndex), 0);\n scale = vec3(uintBitsToFloat(temp.x), uintBitsToFloat(temp.y), uintBitsToFloat(temp.z));\n\n temp = texelFetch(sdfTexture, ivec2(3, sdfIndex), 0);\n sizes = vec4(uintBitsToFloat(temp.x), uintBitsToFloat(temp.y), uintBitsToFloat(temp.z), uintBitsToFloat(temp.w));\n\n for (int i = 0; i < numValues; ++i) {\n temp = texelFetch(sdfTexture, ivec2(4 + i, sdfIndex), 0);\n values[i] = vec4(uintBitsToFloat(temp.x), uintBitsToFloat(temp.y), uintBitsToFloat(temp.z), uintBitsToFloat(temp.w));\n }\n }\n\n const uint SDF_FLAG_TYPE = 0xFFu;\n const uint SDF_FLAG_INVERT = 1u << 8u;\n\n const uint SDF_TYPE_ALL = 0u;\n const uint SDF_TYPE_PLANE = 1u;\n const uint SDF_TYPE_SPHERE = 2u;\n const uint SDF_TYPE_BOX = 3u;\n const uint SDF_TYPE_ELLIPSOID = 4u;\n const uint SDF_TYPE_CYLINDER = 5u;\n const uint SDF_TYPE_CAPSULE = 6u;\n const uint SDF_TYPE_INFINITE_CONE = 7u;\n\n float evaluateSdfArray(\n usampler2D sdfTexture, int numSdfs, int sdfFirst, int sdfCount, vec3 pos,\n float smoothK, int numValues, out vec4 outValues[4]\n ) {\n float distanceAccum = (smoothK == 0.0) ? 1.0 / 0.0 : 0.0;\n float maxExp = -1.0 / 0.0;\n for (int i = 0; i < numValues; ++i) {\n outValues[i] = vec4(0.0);\n }\n\n uint flags;\n vec3 center, scale;\n vec4 quaternion, sizes;\n vec4 values[4];\n\n int sdfLast = min(sdfFirst + sdfCount, numSdfs);\n for (int index = sdfFirst; index < sdfLast; ++index) {\n unpackSdfArray(sdfTexture, index, flags, center, quaternion, scale, sizes, numValues, values);\n uint sdfType = flags & SDF_FLAG_TYPE;\n vec3 sdfPos = quatVec(quaternion, pos * scale) + center;\n\n float distance;\n switch (sdfType) {\n case SDF_TYPE_ALL:\n distance = -1.0 / 0.0;\n break;\n case SDF_TYPE_PLANE: {\n distance = sdfPos.z;\n break;\n }\n case SDF_TYPE_SPHERE: {\n distance = length(sdfPos) - sizes.w;\n break;\n }\n case SDF_TYPE_BOX: {\n vec3 q = abs(sdfPos) - sizes.xyz + sizes.w;\n distance = length(max(q, 0.0)) + min(max(q.x, max(q.y, q.z)), 0.0) - sizes.w;\n break;\n }\n case SDF_TYPE_ELLIPSOID: {\n vec3 sizes = sizes.xyz;\n float k0 = length(sdfPos / sizes);\n float k1 = length(sdfPos / dot(sizes, sizes));\n distance = k0 * (k0 - 1.0) / k1;\n break;\n }\n case SDF_TYPE_CYLINDER: {\n vec2 d = abs(vec2(length(sdfPos.xz), sdfPos.y)) - sizes.wy;\n distance = min(max(d.x, d.y), 0.0) + length(max(d, 0.0));\n break;\n }\n case SDF_TYPE_CAPSULE: {\n sdfPos.y -= clamp(sdfPos.y, -0.5 * sizes.y, 0.5 * sizes.y);\n distance = length(sdfPos) - sizes.w;\n break;\n }\n case SDF_TYPE_INFINITE_CONE: {\n float angle = 0.25 * PI * sizes.w;\n vec2 c = vec2(sin(angle), cos(angle));\n vec2 q = vec2(length(sdfPos.xy), -sdfPos.z);\n float d = length(q - c * max(dot(q, c), 0.0));\n distance = d * (((q.x * c.y - q.y * c.x) < 0.0) ? -1.0 : 1.0);\n break;\n }\n }\n\n if ((flags & SDF_FLAG_INVERT) != 0u) {\n distance = -distance;\n }\n\n if (smoothK == 0.0) {\n if (distance < distanceAccum) {\n distanceAccum = distance;\n for (int i = 0; i < numValues; ++i) {\n outValues[i] = values[i];\n }\n }\n } else {\n float scaledDistance = -distance / smoothK;\n if (scaledDistance > maxExp) {\n float scale = exp(maxExp - scaledDistance);\n distanceAccum *= scale;\n for (int i = 0; i < numValues; ++i) {\n outValues[i] *= scale;\n }\n maxExp = scaledDistance;\n }\n\n float weight = exp(scaledDistance - maxExp);\n distanceAccum += weight;\n for (int i = 0; i < numValues; ++i) {\n outValues[i] += weight * values[i];\n }\n }\n }\n\n if (smoothK == 0.0) {\n return distanceAccum;\n } else {\n // Very distant SDFs may result in 0 accumulation\n if (distanceAccum == 0.0) {\n return 1.0 / 0.0;\n }\n for (int i = 0; i < numValues; ++i) {\n outValues[i] /= distanceAccum;\n }\n return (-log(distanceAccum) - maxExp) * smoothK;\n }\n }\n\n float modulateSdfArray(\n usampler2D sdfTexture, int numSdfs, int sdfFirst, int sdfCount, vec3 pos,\n float smoothK, int numValues, out vec4 values[4],\n float softEdge, bool invert\n ) {\n float distance = evaluateSdfArray(sdfTexture, numSdfs, sdfFirst, sdfCount, pos, smoothK, numValues, values);\n if (invert) {\n distance = -distance;\n }\n\n return (softEdge == 0.0) ? ((distance < 0.0) ? 1.0 : 0.0)\n : clamp(-distance / softEdge + 0.5, 0.0, 1.0);\n }\n`),Ln=ZA(`\n const uint EDIT_FLAG_BLEND = 0xFFu;\n const uint EDIT_BLEND_MULTIPLY = 0u;\n const uint EDIT_BLEND_SET_RGB = 1u;\n const uint EDIT_BLEND_ADD_RGBA = 2u;\n const uint EDIT_FLAG_INVERT = 0x100u;\n\n void decodeEdit(\n uvec4 packedEdit, out int sdfFirst, out int sdfCount,\n out bool invert, out uint rgbaBlendMode, out float softEdge, out float sdfSmooth\n ) {\n rgbaBlendMode = packedEdit.x & EDIT_FLAG_BLEND;\n invert = (packedEdit.x & EDIT_FLAG_INVERT) != 0u;\n\n sdfFirst = int(packedEdit.y & 0xFFFFu);\n sdfCount = int(packedEdit.y >> 16u);\n\n softEdge = uintBitsToFloat(packedEdit.z);\n sdfSmooth = uintBitsToFloat(packedEdit.w);\n }\n\n void applyRgbaDisplaceEdit(\n usampler2D sdfTexture, int numSdfs, int sdfFirst, int sdfCount, inout vec3 pos,\n float smoothK, float softEdge, bool invert, uint rgbaBlendMode, inout vec4 rgba\n ) {\n vec4 values[4];\n float modulate = modulateSdfArray(sdfTexture, numSdfs, sdfFirst, sdfCount, pos, smoothK, 2, values, softEdge, invert);\n // On Android, moving values[0] is necessary to work around a compiler bug.\n vec4 sdfRgba = values[0];\n vec4 sdfDisplaceScale = values[1];\n\n vec4 target;\n switch (rgbaBlendMode) {\n case EDIT_BLEND_MULTIPLY:\n target = rgba * sdfRgba;\n break;\n case EDIT_BLEND_SET_RGB:\n target = vec4(sdfRgba.rgb, rgba.a * sdfRgba.a);\n break;\n case EDIT_BLEND_ADD_RGBA:\n target = rgba + sdfRgba;\n break;\n default:\n // Debug output if blend mode not set\n target = vec4(fract(pos), 1.0);\n }\n rgba = mix(rgba, target, modulate);\n pos += sdfDisplaceScale.xyz * modulate;\n }\n\n void applyPackedRgbaDisplaceEdit(uvec4 packedEdit, usampler2D sdfTexture, int numSdfs, inout vec3 pos, inout vec4 rgba) {\n int sdfFirst, sdfCount;\n bool invert;\n uint rgbaBlendMode;\n float softEdge, sdfSmooth;\n decodeEdit(packedEdit, sdfFirst, sdfCount, invert, rgbaBlendMode, softEdge, sdfSmooth);\n applyRgbaDisplaceEdit(sdfTexture, numSdfs, sdfFirst, sdfCount, pos, sdfSmooth, softEdge, invert, rgbaBlendMode, rgba);\n }\n`);function og(g,A,t,e){return new cA({inTypes:{gsplat:DA,sdfArray:Un,numEdits:"int",rgbaDisplaceEdits:"uvec4"},outTypes:{gsplat:DA},globals:()=>[bn,Ln],inputs:{gsplat:g,sdfArray:A,numEdits:t,rgbaDisplaceEdits:e},statements:({inputs:i,outputs:n})=>{const{sdfArray:r,numEdits:a,rgbaDisplaceEdits:o}=i,{gsplat:I}=n;return at(`\n ${I} = ${i.gsplat};\n if (isGsplatActive(${I}.flags)) {\n for (int editIndex = 0; editIndex < ${a}; ++editIndex) {\n applyPackedRgbaDisplaceEdit(\n ${o}[editIndex], ${r}.sdfTexture, ${r}.numSdfs,\n ${I}.center, ${I}.rgba\n );\n }\n }\n `)}}).outputs.gsplat}const ee=new Float32Array(1);class hs{constructor(){this.scale=new Bs({value:Number.NEGATIVE_INFINITY}),this.rotate=new mn({value:new rA(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY)}),this.translate=new Ja({value:new f(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY)})}apply(A){return Xa(A,{scale:this.scale,rotate:this.rotate,translate:this.translate})}applyDir(A){return $a(A,{rotate:this.rotate})}applyGsplat(A){return Fa(A,{scale:this.scale,rotate:this.rotate,translate:this.translate})}updateFromMatrix(A){const t=new f,e=new rA,s=new f;A.decompose(s,e,t);const i=(t.x+t.y+t.z)/3;let n=!1;return i!==this.scale.value&&(this.scale.value=i,n=!0),s.equals(this.translate.value)||(this.translate.value.copy(s),n=!0),e.equals(this.rotate.value)||(this.rotate.value.copy(e),n=!0),n}update(A){return A.updateMatrixWorld(),this.updateFromMatrix(A.matrixWorld)}}class Ig extends pA{constructor({numSplats:A,generator:t,construct:e,update:s}){if(super(),this.numSplats=A??0,this.generator=t,this.frameUpdate=s,this.version=0,e){const i=e(this);Object.assign(this,i)}}updateVersion(){this.version+=1}set needsUpdate(A){A&&this.updateVersion()}}const yt=class yt extends Ig{constructor(A={}){const t=new hs,e=new hs,s=new hs,i=new hs,n=new mn({value:new uA(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY)}),r=new Bs({value:0}),a=new Bs({value:0}),o={transform:t,viewToWorld:e,worldToView:s,viewToObject:i,recolor:n,time:r,deltaTime:a};if(super({update:({time:I,deltaTime:B,viewToWorld:Q,globalEdits:h})=>this.update({time:I,deltaTime:B,viewToWorld:Q,globalEdits:h})}),this.isInitialized=!1,this.recolor=new Mt(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 te,this.numSplats=this.packedSplats.numSplats,this.editable=A.editable??!0,this.onFrame=A.onFrame,this.context=o,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 I=A.onLoad(this);I instanceof Promise&&await I}return this});else if(this.isInitialized=!0,this.initialized=Promise.resolve(this),A.onLoad){const I=A.onLoad(this);I instanceof Promise&&(this.initialized=I.then(()=>this))}}async asyncInitialize(A){const{url:t,fileBytes:e,fileType:s,fileName:i,maxSplats:n,constructSplats:r}=A;if(t||e||r){const a={url:t,fileBytes:e,fileType:s,fileName:i,maxSplats:n,construct:r};this.packedSplats.reinitialize(a)}this.packedSplats&&(await this.packedSplats.initialized,this.numSplats=this.packedSplats.numSplats,this.updateGenerator())}static async staticInitialize(){await cs(),yt.isStaticInitialized=!0}pushSplat(A,t,e,s,i){this.packedSplats.pushSplat(A,t,e,s,i)}forEachSplat(A){this.packedSplats.forEachSplat(A)}dispose(){this.packedSplats.dispose()}constructGenerator(A){const{transform:t,viewToObject:e,recolor:s}=A,i=Xe({index:"int"},{gsplat:DA},({index:n})=>{if(!n)throw new Error("index is undefined");let r=Ma(this.packedSplats.dyno,n);if(this.maxSh>=1){const{sh1Texture:o,sh2Texture:I,sh3Texture:B}=this.ensureShTextures();if(o){const Q=e.translate,{center:h}=Is(r).outputs,C=Wa(za(h,Q));let E=Cg(r,o,C);this.maxSh>=2&&I&&(E=Qs(E,Eg(r,I,C))),this.maxSh>=3&&B&&(E=Qs(E,cg(r,B,C)));let{rgba:c}=Is(r).outputs;c=Qs(c,Oa(E,na("float",0))),r=Vs({gsplat:r,rgba:c})}}if(this.splatRgba){const o=ig(this.splatRgba.dyno,n);r=Vs({gsplat:r,rgba:o})}this.skinning&&(r=this.skinning.modify(r)),this.objectModifier&&(r=this.objectModifier.apply({gsplat:r}).gsplat),r=t.applyGsplat(r);const a=Ka(s,Is(r).outputs.rgba);return r=Vs({gsplat:r,rgba:a}),this.rgbaDisplaceEdits&&(r=this.rgbaDisplaceEdits.modify(r)),this.worldModifier&&(r=this.worldModifier.apply({gsplat:r}).gsplat),{gsplat:r}});this.generator=i}updateGenerator(){this.constructGenerator(this.context)}update({time:A,viewToWorld:t,deltaTime:e,globalEdits:s}){var c;this.numSplats=this.packedSplats.numSplats,this.context.time.value=A,this.context.deltaTime.value=e,yt.dynoTime.value=A;const{transform:i,viewToObject:n,recolor:r}=this.context;let a=i.update(this);this.context.viewToWorld.updateFromMatrix(t)&&this.enableViewToWorld&&(a=!0);const o=t.clone().invert();this.context.worldToView.updateFromMatrix(o)&&this.enableWorldToView&&(a=!0);const Q=new CA().compose(i.translate.value,i.rotate.value,new f().setScalar(i.scale.value)).invert().multiply(t);n.updateFromMatrix(Q)&&(this.enableViewToObject||this.packedSplats.extra.sh1)&&(a=!0);const h=new uA(this.recolor.r,this.recolor.g,this.recolor.b,this.opacity);h.equals(r.value)||(r.value.copy(h),a=!0);const C=this.editable?(this.edits??[]).concat(s):[];this.editable&&!this.edits&&this.traverseVisible(l=>{l instanceof ei&&C.push(l)}),C.sort((l,u)=>l.ordering-u.ordering);const E=C.map(l=>{if(l.sdfs!=null)return{edit:l,sdfs:l.sdfs};const u=[];return l.traverseVisible(d=>{d instanceof ag&&u.push(d)}),{edit:l,sdfs:u}});if(E.length>0&&!this.rgbaDisplaceEdits){const l=E.length,u=E.reduce((d,y)=>d+y.sdfs.length,0);this.rgbaDisplaceEdits=new gg({maxEdits:l,maxSdfs:u}),this.updateGenerator()}if(this.rgbaDisplaceEdits){const l=this.rgbaDisplaceEdits.update(E);a||(a=l.updated),l.dynoUpdated&&this.updateGenerator()}a&&this.updateVersion(),(c=this.onFrame)==null||c.call(this,{mesh:this,time:A,deltaTime:e})}raycast(A,t){if(!this.packedSplats.packedArray||!this.packedSplats.numSplats)return;const{near:e,far:s,ray:i}=A,n=this.matrixWorld.clone().invert(),r=new PA().setFromMatrix4(n),a=i.origin.clone().applyMatrix4(n),o=i.direction.clone().applyMatrix3(r),I=new f;n.decompose(new f,new rA,I),(I.x*I.y*I.z)**(1/3);const Q=Vn(a.x,a.y,a.z,o.x,o.y,o.z,e,s,this.packedSplats.numSplats,this.packedSplats.packedArray,!0);for(const h of Q){const C=i.direction.clone().multiplyScalar(h).add(i.origin);t.push({distance:h,point:C,object:this})}}ensureShTextures(){if(!this.packedSplats.extra.sh1)return{};let A=this.packedSplats.extra.sh1Texture;if(!A){let s=this.packedSplats.extra.sh1;const{width:i,height:n,depth:r,maxSplats:a}=kA(s.length/2);if(s.length<a*2){const I=new Uint32Array(a*2);I.set(s),this.packedSplats.extra.sh1=I,s=I}const o=new ht(s,i,n,r);o.format=ur,o.type=pt,o.internalFormat="RG32UI",o.needsUpdate=!0,A=new Ai({value:o,key:"sh1"}),this.packedSplats.extra.sh1Texture=A}if(!this.packedSplats.extra.sh2)return{sh1Texture:A};let t=this.packedSplats.extra.sh2Texture;if(!t){let s=this.packedSplats.extra.sh2;const{width:i,height:n,depth:r,maxSplats:a}=kA(s.length/4);if(s.length<a*4){const I=new Uint32Array(a*4);I.set(s),this.packedSplats.extra.sh2=I,s=I}const o=new ht(s,i,n,r);o.format=Gt,o.type=pt,o.internalFormat="RGBA32UI",o.needsUpdate=!0,t=new Ai({value:o,key:"sh2"}),this.packedSplats.extra.sh2Texture=t}if(!this.packedSplats.extra.sh3)return{sh1Texture:A,sh2Texture:t};let e=this.packedSplats.extra.sh3Texture;if(!e){let s=this.packedSplats.extra.sh3;const{width:i,height:n,depth:r,maxSplats:a}=kA(s.length/4);if(s.length<a*4){const I=new Uint32Array(a*4);I.set(s),this.packedSplats.extra.sh3=I,s=I}const o=new ht(s,i,n,r);o.format=Gt,o.type=pt,o.internalFormat="RGBA32UI",o.needsUpdate=!0,e=new Ai({value:o,key:"sh3"}),this.packedSplats.extra.sh3Texture=e}return{sh1Texture:A,sh2Texture:t,sh3Texture:e}}};yt.staticInitialized=yt.staticInitialize(),yt.isStaticInitialized=!1,yt.dynoTime=new Bs({value:0});let si=yt;const Bg=ZA(`\n vec3 evaluateSH1(Gsplat gsplat, usampler2DArray sh1, vec3 viewDir) {\n // Extract sint7 values packed into 2 x uint32\n uvec2 packed = texelFetch(sh1, splatTexCoord(gsplat.index), 0).rg;\n vec3 sh1_0 = vec3(ivec3(\n int(packed.x << 25u) >> 25,\n int(packed.x << 18u) >> 25,\n int(packed.x << 11u) >> 25\n )) / 63.0;\n vec3 sh1_1 = vec3(ivec3(\n int(packed.x << 4u) >> 25,\n int((packed.x >> 3u) | (packed.y << 29u)) >> 25,\n int(packed.y << 22u) >> 25\n )) / 63.0;\n vec3 sh1_2 = vec3(ivec3(\n int(packed.y << 15u) >> 25,\n int(packed.y << 8u) >> 25,\n int(packed.y << 1u) >> 25\n )) / 63.0;\n\n return sh1_0 * (-0.4886025 * viewDir.y)\n + sh1_1 * (0.4886025 * viewDir.z)\n + sh1_2 * (-0.4886025 * viewDir.x);\n }\n`),Qg=ZA(`\n vec3 evaluateSH2(Gsplat gsplat, usampler2DArray sh2, vec3 viewDir) {\n // Extract sint8 values packed into 4 x uint32\n uvec4 packed = texelFetch(sh2, splatTexCoord(gsplat.index), 0);\n vec3 sh2_0 = vec3(ivec3(\n int(packed.x << 24u) >> 24,\n int(packed.x << 16u) >> 24,\n int(packed.x << 8u) >> 24\n )) / 127.0;\n vec3 sh2_1 = vec3(ivec3(\n int(packed.x) >> 24,\n int(packed.y << 24u) >> 24,\n int(packed.y << 16u) >> 24\n )) / 127.0;\n vec3 sh2_2 = vec3(ivec3(\n int(packed.y << 8u) >> 24,\n int(packed.y) >> 24,\n int(packed.z << 24u) >> 24\n )) / 127.0;\n vec3 sh2_3 = vec3(ivec3(\n int(packed.z << 16u) >> 24,\n int(packed.z << 8u) >> 24,\n int(packed.z) >> 24\n )) / 127.0;\n vec3 sh2_4 = vec3(ivec3(\n int(packed.w << 24u) >> 24,\n int(packed.w << 16u) >> 24,\n int(packed.w << 8u) >> 24\n )) / 127.0;\n\n return sh2_0 * (1.0925484 * viewDir.x * viewDir.y)\n + sh2_1 * (-1.0925484 * viewDir.y * viewDir.z)\n + sh2_2 * (0.3153915 * (2.0 * viewDir.z * viewDir.z - viewDir.x * viewDir.x - viewDir.y * viewDir.y))\n + sh2_3 * (-1.0925484 * viewDir.x * viewDir.z)\n + sh2_4 * (0.5462742 * (viewDir.x * viewDir.x - viewDir.y * viewDir.y));\n }\n`),hg=ZA(`\n vec3 evaluateSH3(Gsplat gsplat, usampler2DArray sh3, vec3 viewDir) {\n // Extract sint6 values packed into 4 x uint32\n uvec4 packed = texelFetch(sh3, splatTexCoord(gsplat.index), 0);\n vec3 sh3_0 = vec3(ivec3(\n int(packed.x << 26u) >> 26,\n int(packed.x << 20u) >> 26,\n int(packed.x << 14u) >> 26\n )) / 31.0;\n vec3 sh3_1 = vec3(ivec3(\n int(packed.x << 8u) >> 26,\n int(packed.x << 2u) >> 26,\n int((packed.x >> 4u) | (packed.y << 28u)) >> 26\n )) / 31.0;\n vec3 sh3_2 = vec3(ivec3(\n int(packed.y << 22u) >> 26,\n int(packed.y << 16u) >> 26,\n int(packed.y << 10u) >> 26\n )) / 31.0;\n vec3 sh3_3 = vec3(ivec3(\n int(packed.y << 4u) >> 26,\n int((packed.y >> 2u) | (packed.z << 30u)) >> 26,\n int(packed.z << 24u) >> 26\n )) / 31.0;\n vec3 sh3_4 = vec3(ivec3(\n int(packed.z << 18u) >> 26,\n int(packed.z << 12u) >> 26,\n int(packed.z << 6u) >> 26\n )) / 31.0;\n vec3 sh3_5 = vec3(ivec3(\n int(packed.z) >> 26,\n int(packed.w << 26u) >> 26,\n int(packed.w << 20u) >> 26\n )) / 31.0;\n vec3 sh3_6 = vec3(ivec3(\n int(packed.w << 14u) >> 26,\n int(packed.w << 8u) >> 26,\n int(packed.w << 2u) >> 26\n )) / 31.0;\n\n float xx = viewDir.x * viewDir.x;\n float yy = viewDir.y * viewDir.y;\n float zz = viewDir.z * viewDir.z;\n float xy = viewDir.x * viewDir.y;\n float yz = viewDir.y * viewDir.z;\n float zx = viewDir.z * viewDir.x;\n\n return sh3_0 * (-0.5900436 * viewDir.y * (3.0 * xx - yy))\n + sh3_1 * (2.8906114 * xy * viewDir.z) +\n + sh3_2 * (-0.4570458 * viewDir.y * (4.0 * zz - xx - yy))\n + sh3_3 * (0.3731763 * viewDir.z * (2.0 * zz - 3.0 * xx - 3.0 * yy))\n + sh3_4 * (-0.4570458 * viewDir.x * (4.0 * zz - xx - yy))\n + sh3_5 * (1.4453057 * viewDir.z * (xx - yy))\n + sh3_6 * (-0.5900436 * viewDir.x * (xx - 3.0 * yy));\n }\n`);function Cg(g,A,t){return Ws({inTypes:{gsplat:DA,sh1:"usampler2DArray",viewDir:"vec3"},outTypes:{rgb:"vec3"},inputs:{gsplat:g,sh1:A,viewDir:t},globals:()=>[gt,Bg],statements:({inputs:e,outputs:s})=>at(`\n if (isGsplatActive(${e.gsplat}.flags)) {\n ${s.rgb} = evaluateSH1(${e.gsplat}, ${e.sh1}, ${e.viewDir});\n } else {\n ${s.rgb} = vec3(0.0);\n }\n `)}).outputs.rgb}function Eg(g,A,t){return Ws({inTypes:{gsplat:DA,sh2:"usampler2DArray",viewDir:"vec3"},outTypes:{rgb:"vec3"},inputs:{gsplat:g,sh2:A,viewDir:t},globals:()=>[gt,Qg],statements:({inputs:e,outputs:s})=>at(`\n if (isGsplatActive(${e.gsplat}.flags)) {\n ${s.rgb} = evaluateSH2(${e.gsplat}, ${e.sh2}, ${e.viewDir});\n } else {\n ${s.rgb} = vec3(0.0);\n }\n `)}).outputs.rgb}function cg(g,A,t){return Ws({inTypes:{gsplat:DA,sh3:"usampler2DArray",viewDir:"vec3"},outTypes:{rgb:"vec3"},inputs:{gsplat:g,sh3:A,viewDir:t},globals:()=>[gt,hg],statements:({inputs:e,outputs:s})=>at(`\n if (isGsplatActive(${e.gsplat}.flags)) {\n ${s.rgb} = evaluateSH3(${e.gsplat}, ${e.sh3}, ${e.viewDir});\n } else {\n ${s.rgb} = vec3(0.0);\n }\n `)}).outputs.rgb}function lg(g){return new Worker(self.location.href,{name:g==null?void 0:g.name})}class ug{constructor(){this.messages={},this.messageIdNext=0,this.worker=new lg,this.worker.onmessage=A=>this.onMessage(A)}makeMessageId(){return++this.messageIdNext}makeMessagePromiseId(){const A=this.makeMessageId(),t=new Promise((e,s)=>{this.messages[A]={resolve:e,reject:s}});return{id:A,promise:t}}onMessage(A){const{id:t,result:e,error:s}=A.data,i=this.messages[t];i&&(delete this.messages[t],s?i.reject(s):i.resolve(e))}async call(A,t){const{id:e,promise:s}=this.makeMessagePromiseId();return this.worker.postMessage({name:A,args:t,id:e},{transfer:Cn(t)}),s}}let Yn=4,Cs=0;const Jn=[],Tn=[];async function dg(){const g=Jn.shift();if(g)return g;if(Cs<Yn){const A=new ug;return Cs+=1,A}return new Promise(A=>{Tn.push(A)})}function fg(g){if(Cs>Yn){Cs-=1;return}const A=Tn.shift();if(A){A(g);return}Jn.push(g)}async function ye(g){const A=await dg();try{return await g(A)}finally{fg(A)}}class yg extends qs{constructor(A){super(A),this.fileLoader=new Xr(A)}load(A,t,e,s){this.fileLoader.setResponseType("arraybuffer"),this.fileLoader.setCrossOrigin(this.crossOrigin),this.fileLoader.setWithCredentials(this.withCredentials),this.fileLoader.setPath(this.path),this.fileLoader.setResourcePath(this.resourcePath),this.fileLoader.setRequestHeader(this.requestHeader),this.fileLoader.load(A,async i=>{if(t){const n=i,r={},a=[];let o=this.fileType;try{const I=pg(n);if(this.fileType==="pcsogs"&&I===void 0)throw new Error("Invalid PC SOGS file");if(I!==void 0){o="pcsogs";for(const Q of["means","scales","quats","sh0","shN"]){const h=I[Q];if(h){const C=h.files;for(const E of C){const c=new URL(E,A).toString();this.manager.itemStart(c);const l=this.loadExtra(c).then(u=>{r[E]=u}).catch(u=>{throw this.manager.itemError(c),u}).finally(()=>{this.manager.itemEnd(c)});a.push(l)}}}}await Promise.all(a);const B=await zn({input:n,extraFiles:r,fileType:o,pathOrUrl:A});this.packedSplats?(this.packedSplats.initialize(B),t(this.packedSplats)):t(new te(B))}catch(I){s==null||s(I)}}},e,s)}async loadAsync(A,t){return new Promise((e,s)=>{this.load(A,i=>{e(i)},t,s)})}async loadExtra(A){return new Promise((t,e)=>{this.fileLoader.load(A,s=>t(s),void 0,s=>e(s))})}parse(A){return new si({packedSplats:A})}}var we=(g=>(g.PLY="ply",g.SPZ="spz",g.SPLAT="splat",g.KSPLAT="ksplat",g.PCSOGS="pcsogs",g))(we||{});function Hn(g){const A=new DataView(g.buffer);if((A.getUint32(0,!0)&16777215)===7957616)return"ply";if((A.getUint32(0,!0)&16777215)===559903){const t=da(g,4);return new DataView(t.buffer).getUint32(0,!0)===1347635022?"spz":void 0}}function wg(g){const A=g.split(/[?#]/,1)[0],t=Math.max(A.lastIndexOf("/"),A.lastIndexOf("\\\\")),e=A.slice(t+1),s=e.lastIndexOf(".");return s<=0||s===e.length-1?"":e.slice(s+1).toLowerCase()}function vn(g){const A=wg(g);if(A==="ply")return"ply";if(A==="spz")return"spz";if(A==="splat")return"splat";if(A==="ksplat")return"ksplat"}function pg(g){try{let A;if(typeof g=="string")A=g;else{const e=g instanceof ArrayBuffer?new Uint8Array(g):g;if(e.length>65536)return;A=new TextDecoder().decode(e)}const t=JSON.parse(A);if(!t||typeof t!="object"||Array.isArray(t))return;for(const e of["means","scales","quats","sh0"])if(!t[e]||typeof t[e]!="object"||Array.isArray(t[e])||!t[e].shape||!t[e].files||e!=="quats"&&(!t[e].mins||!t[e].maxs))return;return t}catch{return}}async function zn({input:g,extraFiles:A,fileType:t,pathOrUrl:e}){const s=g instanceof ArrayBuffer?new Uint8Array(g):g;let i=t;switch(t||(i=Hn(s),!i&&e&&(i=vn(e))),i){case"ply":{const n=new fe({fileBytes:s});await n.parseHeader();const r=n.numSplats,a=kA(r).maxSplats,o={fileBytes:s,packedArray:new Uint32Array(a*4)};return await ye(async I=>{const{packedArray:B,numSplats:Q,extra:h}=await I.call("unpackPly",o);return{packedArray:B,numSplats:Q,extra:h}})}case"spz":return await ye(async n=>{const{packedArray:r,numSplats:a,extra:o}=await n.call("decodeSpz",{fileBytes:s});return{packedArray:r,numSplats:a,extra:o}});case"splat":return await ye(async n=>{const{packedArray:r,numSplats:a}=await n.call("decodeAntiSplat",{fileBytes:s});return{packedArray:r,numSplats:a}});case"ksplat":return await ye(async n=>{const{packedArray:r,numSplats:a,extra:o}=await n.call("decodeKsplat",{fileBytes:s});return{packedArray:r,numSplats:a,extra:o}});case"pcsogs":return await ye(async n=>{const{packedArray:r,numSplats:a,extra:o}=await n.call("decodePcSogs",{fileBytes:s,extraFiles:A});return{packedArray:r,numSplats:a,extra:o}});default:throw new Error(`Unknown splat file type: ${i}`)}}class Dg{constructor({maxSplats:A=1}={}){this.numSplats=0,this.maxSplats=kA(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 t=Math.max(A,this.maxSplats*2),e=new Float32Array(t*3),s=new Float32Array(t*3),i=new Float32Array(t*4),n=new Float32Array(t),r=new Float32Array(t*3);if(e.set(this.centers),s.set(this.scales),i.set(this.quaternions),n.set(this.opacities),r.set(this.colors),this.centers=e,this.scales=s,this.quaternions=i,this.opacities=n,this.colors=r,this.sh1){const a=new Float32Array(t*9);a.set(this.sh1),this.sh1=a}if(this.sh2){const a=new Float32Array(t*15);a.set(this.sh2),this.sh2=a}if(this.sh3){const a=new Float32Array(t*21);a.set(this.sh3),this.sh3=a}this.maxSplats=t}}ensureIndex(A){this.ensureCapacity(A+1)}setCenter(A,t,e,s){this.centers[A*3]=t,this.centers[A*3+1]=e,this.centers[A*3+2]=s}setScale(A,t,e,s){this.scales[A*3]=t,this.scales[A*3+1]=e,this.scales[A*3+2]=s}setQuaternion(A,t,e,s,i){this.quaternions[A*4]=t,this.quaternions[A*4+1]=e,this.quaternions[A*4+2]=s,this.quaternions[A*4+3]=i}setOpacity(A,t){this.opacities[A]=t}setColor(A,t,e,s){this.colors[A*3]=t,this.colors[A*3+1]=e,this.colors[A*3+2]=s}setSh1(A,t){this.sh1||(this.sh1=new Float32Array(this.maxSplats*9));for(let e=0;e<9;++e)this.sh1[A*9+e]=t[e]}setSh2(A,t){this.sh2||(this.sh2=new Float32Array(this.maxSplats*15));for(let e=0;e<15;++e)this.sh2[A*15+e]=t[e]}setSh3(A,t){this.sh3||(this.sh3=new Float32Array(this.maxSplats*21));for(let e=0;e<21;++e)this.sh3[A*21+e]=t[e]}}class Kn{constructor({fileBytes:A}){this.fileBytes=A instanceof ArrayBuffer?new Uint8Array(A):A,this.reader=new fa({fileBytes:this.fileBytes});const t=new DataView(this.reader.read(16).buffer);if(t.getUint32(0,!0)!==1347635022)throw new Error("Invalid SPZ file");if(this.version=t.getUint32(4,!0),this.version<1||this.version>2)throw new Error(`Unsupported SPZ version: ${this.version}`);this.numSplats=t.getUint32(8,!0),this.shDegree=t.getUint8(12),this.fractionalBits=t.getUint8(13),this.flags=t.getUint8(14),this.flagAntiAlias=(this.flags&1)!==0,this.reserved=t.getUint8(15),this.parsed=!1}parseSplats(A,t,e,s,i,n){if(this.parsed)throw new Error("SPZ file already parsed");if(this.parsed=!0,this.version===1){const r=this.reader.read(this.numSplats*3*2),a=new Uint16Array(r.buffer);for(let o=0;o<this.numSplats;o++){const I=o*3,B=tA(a[I]),Q=tA(a[I+1]),h=tA(a[I+2]);A==null||A(o,B,Q,h)}}else if(this.version===2){const r=1<<this.fractionalBits,a=this.reader.read(this.numSplats*3*3);for(let o=0;o<this.numSplats;o++){const I=o*9,B=((a[I+2]<<24|a[I+1]<<16|a[I]<<8)>>8)/r,Q=((a[I+5]<<24|a[I+4]<<16|a[I+3]<<8)>>8)/r,h=((a[I+8]<<24|a[I+7]<<16|a[I+6]<<8)>>8)/r;A==null||A(o,B,Q,h)}}else throw new Error("Unreachable");{const r=this.reader.read(this.numSplats);for(let a=0;a<this.numSplats;a++)t==null||t(a,r[a]/255)}{const r=this.reader.read(this.numSplats*3),a=_n/.15;for(let o=0;o<this.numSplats;o++){const I=o*3,B=(r[I]/255-.5)*a+.5,Q=(r[I+1]/255-.5)*a+.5,h=(r[I+2]/255-.5)*a+.5;e==null||e(o,B,Q,h)}}{const r=this.reader.read(this.numSplats*3);for(let a=0;a<this.numSplats;a++){const o=a*3,I=Math.exp(r[o]/16-10),B=Math.exp(r[o+1]/16-10),Q=Math.exp(r[o+2]/16-10);s==null||s(a,I,B,Q)}}{const r=this.reader.read(this.numSplats*3);for(let a=0;a<this.numSplats;a++){const o=a*3,I=r[o]/127.5-1,B=r[o+1]/127.5-1,Q=r[o+2]/127.5-1,h=Math.sqrt(Math.max(0,1-I*I-B*B-Q*Q));i==null||i(a,I,B,Q,h)}}if(n&&this.shDegree>=1){const r=new Float32Array(9),a=this.shDegree>=2?new Float32Array(5*3):void 0,o=this.shDegree>=3?new Float32Array(7*3):void 0,I=this.reader.read(this.numSplats*qn[this.shDegree]*3);let B=0;for(let Q=0;Q<this.numSplats;Q++){for(let h=0;h<9;++h)r[h]=(I[B+h]-128)/128;if(B+=9,a){for(let h=0;h<15;++h)a[h]=(I[B+h]-128)/128;B+=15}if(o){for(let h=0;h<21;++h)o[h]=(I[B+h]-128)/128;B+=21}n==null||n(Q,r,a,o)}}}}const qn={1:3,2:8,3:15},_n=.28209479177387814,mg=1347635022,xg=2,Mg=1;class ft{constructor({numSplats:A,shDegree:t,fractionalBits:e=12,flagAntiAlias:s=!0}){this.clippedCount=0;const i=19+(t>=1?9:0)+(t>=2?15:0)+(t>=3?21:0),n=16+A*i;this.buffer=new ArrayBuffer(n),this.view=new DataView(this.buffer),this.view.setUint32(0,mg,!0),this.view.setUint32(4,xg,!0),this.view.setUint32(8,A,!0),this.view.setUint8(12,t),this.view.setUint8(13,e),this.view.setUint8(14,s?Mg:0),this.view.setUint8(15,0),this.numSplats=A,this.shDegree=t,this.fractionalBits=e,this.fraction=1<<e,this.flagAntiAlias=s}setCenter(A,t,e,s){const i=Math.round(t*this.fraction),n=Math.max(-8388607,Math.min(8388607,i)),r=Math.round(e*this.fraction),a=Math.max(-8388607,Math.min(8388607,r)),o=Math.round(s*this.fraction),I=Math.max(-8388607,Math.min(8388607,o));(i!==n||r!==a||o!==I)&&(this.clippedCount+=1);const h=16+A*9;this.view.setUint8(h,n&255),this.view.setUint8(h+1,n>>8&255),this.view.setUint8(h+2,n>>16&255),this.view.setUint8(h+3,a&255),this.view.setUint8(h+4,a>>8&255),this.view.setUint8(h+5,a>>16&255),this.view.setUint8(h+6,I&255),this.view.setUint8(h+7,I>>8&255),this.view.setUint8(h+8,I>>16&255)}setAlpha(A,t){const e=16+this.numSplats*9+A;this.view.setUint8(e,Math.max(0,Math.min(255,Math.round(t*255))))}static scaleRgb(A){const t=((A-.5)/(_n/.15)+.5)*255;return Math.max(0,Math.min(255,Math.round(t)))}setRgb(A,t,e,s){const i=16+this.numSplats*10+A*3;this.view.setUint8(i,ft.scaleRgb(t)),this.view.setUint8(i+1,ft.scaleRgb(e)),this.view.setUint8(i+2,ft.scaleRgb(s))}setScale(A,t,e,s){const i=16+this.numSplats*13+A*3;this.view.setUint8(i,Math.max(0,Math.min(255,Math.round((Math.log(t)+10)*16)))),this.view.setUint8(i+1,Math.max(0,Math.min(255,Math.round((Math.log(e)+10)*16)))),this.view.setUint8(i+2,Math.max(0,Math.min(255,Math.round((Math.log(s)+10)*16))))}setQuat(A,t,e,s,i){const n=16+this.numSplats*16+A*3,r=i<0;this.view.setUint8(n,Math.max(0,Math.min(255,Math.round(((r?-t:t)+1)*127.5)))),this.view.setUint8(n+1,Math.max(0,Math.min(255,Math.round(((r?-e:e)+1)*127.5)))),this.view.setUint8(n+2,Math.max(0,Math.min(255,Math.round(((r?-s:s)+1)*127.5))))}static quantizeSh(A,t){const e=Math.round(A*128)+128,s=1<<8-t,i=Math.floor((e+s/2)/s)*s;return Math.max(0,Math.min(255,i))}setSh(A,t,e,s){const i=qn[this.shDegree]||0,n=16+this.numSplats*19+A*i*3;for(let r=0;r<9;++r)this.view.setUint8(n+r,ft.quantizeSh(t[r],5));if(e){const r=n+9;for(let a=0;a<15;++a)this.view.setUint8(r+a,ft.quantizeSh(e[a],4));if(s){const a=r+15;for(let o=0;o<21;++o)this.view.setUint8(a+o,ft.quantizeSh(s[o],4))}}}async finalize(){const A=new Uint8Array(this.buffer),e=new ReadableStream({async start(n){n.enqueue(A),n.close()}}).pipeThrough(new CompressionStream("gzip")),i=await new Response(e).arrayBuffer();return console.log("Compressed",A.length,"bytes to",i.byteLength,"bytes"),new Uint8Array(i)}}async function Sg(g){var I,B,Q;const A=new Dg,{inputs:t,clipXyz:e,maxSh:s,fractionalBits:i=12,opacityThreshold:n}=g;for(const h of t){let C=function(w){return w.multiplyScalar(d),w.applyQuaternion(y),w.add(D),w},E=function(w){return w.multiplyScalar(d),w},c=function(w){return w.premultiply(y),w},l=function(w){return!m||m.containsPoint(w)},u=function(w){return n!==void 0?w>=n:!0};const d=((I=h.transform)==null?void 0:I.scale)??1,y=new rA().fromArray(((B=h.transform)==null?void 0:B.quaternion)??[0,0,0,1]),D=new f().fromArray(((Q=h.transform)==null?void 0:Q.translate)??[0,0,0]),m=e?new Yt(new f().fromArray(e.min),new f().fromArray(e.max)):void 0;let x=h.fileType;switch(x||(x=Hn(h.fileBytes),!x&&h.pathOrUrl&&(x=vn(h.pathOrUrl))),x){case we.PLY:{const w=new fe({fileBytes:h.fileBytes});await w.parseHeader();let p=null;w.parseSplats((N,M,S,F,k,G,R,b,j,_,X,P,$,K,z)=>{const L=C(new f(M,S,F));if(l(L)&&u(P)){p=A.pushSplat(),A.setCenter(p,L.x,L.y,L.z);const Z=E(new f(k,G,R));A.setScale(p,Z.x,Z.y,Z.z);const U=c(new rA(b,j,_,X));A.setQuaternion(p,U.x,U.y,U.z,U.w),A.setOpacity(p,P),A.setColor(p,$,K,z)}else p=null},(N,M,S,F)=>{M&&p!==null&&A.setSh1(p,M),S&&p!==null&&A.setSh2(p,S),F&&p!==null&&A.setSh3(p,F)});break}case we.SPZ:{const w=new Kn({fileBytes:h.fileBytes}),p=new Int32Array(w.numSplats);p.fill(-1);const N=new Float32Array(w.numSplats*3),M=new f;w.parseSplats((S,F,k,G)=>{const R=C(new f(F,k,G));N[S*3]=R.x,N[S*3+1]=R.y,N[S*3+2]=R.z},(S,F)=>{M.fromArray(N,S*3),l(M)&&u(F)&&(p[S]=A.pushSplat(),A.setCenter(p[S],M.x,M.y,M.z),A.setOpacity(p[S],F))},(S,F,k,G)=>{p[S]>=0&&A.setColor(p[S],F,k,G)},(S,F,k,G)=>{if(p[S]>=0){const R=E(new f(F,k,G));A.setScale(p[S],R.x,R.y,R.z)}},(S,F,k,G,R)=>{if(p[S]>=0){const b=c(new rA(F,k,G,R));A.setQuaternion(p[S],b.x,b.y,b.z,b.w)}},(S,F,k,G)=>{p[S]>=0&&(A.setSh1(p[S],F),k&&A.setSh2(p[S],k),G&&A.setSh3(p[S],G))});break}case we.SPLAT:fn(h.fileBytes,w=>{},(w,p,N,M,S,F,k,G,R,b,j,_,X,P,$)=>{const K=C(new f(p,N,M));if(l(K)&&u(_)){const z=A.pushSplat();A.setCenter(z,K.x,K.y,K.z);const L=E(new f(S,F,k));A.setScale(z,L.x,L.y,L.z);const Z=c(new rA(G,R,b,j));A.setQuaternion(z,Z.x,Z.y,Z.z,Z.w),A.setOpacity(z,_),A.setColor(z,X,P,$)}});break;case we.KSPLAT:{let w=null;wa(h.fileBytes,p=>{},(p,N,M,S,F,k,G,R,b,j,_,X,P,$,K)=>{const z=C(new f(N,M,S));if(l(z)&&u(X)){w=A.pushSplat(),A.setCenter(w,z.x,z.y,z.z);const L=E(new f(F,k,G));A.setScale(w,L.x,L.y,L.z);const Z=c(new rA(R,b,j,_));A.setQuaternion(w,Z.x,Z.y,Z.z,Z.w),A.setOpacity(w,X),A.setColor(w,P,$,K)}else w=null},(p,N,M,S)=>{w!==null&&(A.setSh1(w,N),M&&A.setSh2(w,M),S&&A.setSh3(w,S))});break}default:throw new Error(`transcodeSpz not implemented for ${x}`)}}const r=Math.min(s??3,A.sh3?3:A.sh2?2:A.sh1?1:0),a=new ft({numSplats:A.numSplats,shDegree:r,fractionalBits:i,flagAntiAlias:!0});for(let h=0;h<A.numSplats;++h){const C=h*3,E=h*4;a.setCenter(h,A.centers[C],A.centers[C+1],A.centers[C+2]),a.setScale(h,A.scales[C],A.scales[C+1],A.scales[C+2]),a.setQuat(h,A.quaternions[E],A.quaternions[E+1],A.quaternions[E+2],A.quaternions[E+3]),a.setAlpha(h,A.opacities[h]),a.setRgb(h,A.colors[C],A.colors[C+1],A.colors[C+2]),A.sh1&&r>=1&&a.setSh(h,A.sh1.slice(h*9,(h+1)*9),r>=2&&A.sh2?A.sh2.slice(h*15,(h+1)*15):void 0,r>=3&&A.sh3?A.sh3.slice(h*21,(h+1)*21):void 0)}return{fileBytes:await a.finalize(),clippedCount:a.clippedCount}}async function Zn(g){const{name:A,args:t,id:e}=g.data;let s,i;try{switch(A){case"unpackPly":{const{packedArray:n,fileBytes:r}=t,a=await Fg({packedArray:n,fileBytes:r});s={id:e,numSplats:a.numSplats,packedArray:a.packedArray,extra:a.extra};break}case"decodeSpz":{const{fileBytes:n}=t,r=Ng(n);s={id:e,numSplats:r.numSplats,packedArray:r.packedArray,extra:r.extra};break}case"decodeAntiSplat":{const{fileBytes:n}=t,r=ya(n);s={id:e,numSplats:r.numSplats,packedArray:r.packedArray};break}case"decodeKsplat":{const{fileBytes:n}=t,r=pa(n);s={id:e,numSplats:r.numSplats,packedArray:r.packedArray,extra:r.extra};break}case"decodePcSogs":{const{fileBytes:n,extraFiles:r}=t,a=await Da(n,r);s={id:e,numSplats:a.numSplats,packedArray:a.packedArray,extra:a.extra};break}case"sortSplats":{const{maxSplats:n,totalSplats:r,readback:a,ordering:o}=t;s={id:e,readback:a,...kg({totalSplats:r,readback:a,ordering:o})};break}case"sortDoubleSplats":{const{numSplats:n,readback:r,ordering:a}=t;s={id:e,readback:r,ordering:a},ta&&(s={id:e,readback:r,ordering:a,activeSplats:Pn(n,r,a)});break}case"transcodeSpz":{const n=t,r=await Sg(n);s={id:e,fileBytes:r,input:n};break}default:throw new Error(`Unknown name: ${A}`)}}catch(n){i=n}self.postMessage({id:e,result:s,error:i},{transfer:Cn(s)})}async function Fg({packedArray:g,fileBytes:A}){const t=new fe({fileBytes:A});await t.parseHeader();const e=t.numSplats,s={},i=Math.exp(-20);return t.parseSplats((n,r,a,o,I,B,Q,h,C,E,c,l,u,d,y)=>{ue(g,n,r,a,o,I<i?0:Math.max(Zs,I),B<i?0:Math.max(Zs,B),Q<i?0:Math.max(Zs,Q),h,C,E,c,l,u,d,y)},(n,r,a,o)=>{r&&(s.sh1||(s.sh1=new Uint32Array(e*2)),es(s.sh1,n,r)),a&&(s.sh2||(s.sh2=new Uint32Array(e*4)),ss(s.sh2,n,a)),o&&(s.sh3||(s.sh3=new Uint32Array(e*4)),is(s.sh3,n,o))}),{packedArray:g,numSplats:e,extra:s}}function Ng(g){const A=new Kn({fileBytes:g}),t=A.numSplats,e=As(t),s=new Uint32Array(e*4),i={};return A.parseSplats((n,r,a,o)=>{En(s,n,r,a,o)},(n,r)=>{Ba(s,n,r)},(n,r,a,o)=>{Ia(s,n,r,a,o)},(n,r,a,o)=>{cn(s,n,r,a,o)},(n,r,a,o,I)=>{ln(s,n,r,a,o,I)},(n,r,a,o)=>{r&&(i.sh1||(i.sh1=new Uint32Array(t*2)),es(i.sh1,n,r)),a&&(i.sh2||(i.sh2=new Uint32Array(t*4)),ss(i.sh2,n,a)),o&&(i.sh3||(i.sh3=new Uint32Array(t*4)),is(i.sh3,n,o))}),{packedArray:s,numSplats:t,extra:i}}const se=31744,pe=se+1;let sA=null;function kg({totalSplats:g,readback:A,ordering:t}){sA||(sA=new Uint32Array(pe)),sA.fill(0);const e=A.map(a=>new Uint32Array(a.buffer)),s=e[0].length,i=Math.ceil(g/s);let n=0;for(let a=0;a<i;++a){const o=e[a],I=Math.min(o.length,g-n);for(let B=0;B<I;++B){const Q=o[B]&32767;Q<se&&(sA[Q]+=1)}n+=I}let r=0;for(let a=0;a<pe;++a){const o=r+sA[a];sA[a]=r,r=o}n=0;for(let a=0;a<i;++a){const o=e[a],I=Math.min(o.length,g-n);for(let B=0;B<I;++B){const Q=o[B]&32767;Q<se&&(t[sA[Q]]=n+B,sA[Q]+=1)}n+=I}if(sA[pe-1]!==r)throw new Error(`Expected ${r} active splats but got ${sA[pe-1]}`);return{activeSplats:r,ordering:t}}function Ug({numSplats:g,readback:A,ordering:t}){sA||(sA=new Uint32Array(pe)),sA.fill(0);for(let s=0;s<g;++s){const i=A[s];i<se&&(sA[i]+=1)}let e=0;for(let s=se-1;s>=0;--s){const i=e+sA[s];sA[s]=e,e=i}for(let s=0;s<g;++s){const i=A[s];i<se&&(t[sA[i]]=s,sA[i]+=1)}if(sA[0]!==e)throw new Error(`Expected ${e} active splats but got ${sA[0]}`);return{activeSplats:e,ordering:t}}const ii=[];function Wn(g){ii.push(g)}async function Rg(){self.addEventListener("message",Wn),await cs(),self.removeEventListener("message",Wn),self.addEventListener("message",Zn);for(const g of ii)Zn(g);ii.length=0}Rg().catch(console.error)})();\n//# sourceMappingURL=worker-BJPB6I7L.js.map\n',ns=typeof self<"u"&&self.Blob&&new Blob([Jr],{type:"text/javascript;charset=utf-8"});function XQ(t){let A;try{if(A=ns&&(self.URL||self.webkitURL).createObjectURL(ns),!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(Jr),{name:t==null?void 0:t.name})}finally{A&&(self.URL||self.webkitURL).revokeObjectURL(A)}}class $Q{constructor(){this.messages={},this.messageIdNext=0,this.worker=new XQ,this.worker.onmessage=A=>this.onMessage(A)}makeMessageId(){return++this.messageIdNext}makeMessagePromiseId(){const A=this.makeMessageId(),e=new Promise((s,i)=>{this.messages[A]={resolve:s,reject:i}});return{id:A,promise:e}}onMessage(A){const{id:e,result:s,error:i}=A.data,n=this.messages[e];n&&(delete this.messages[e],i?n.reject(i):n.resolve(s))}async call(A,e){const{id:s,promise:i}=this.makeMessagePromiseId();return this.worker.postMessage({name:A,args:e,id:s},{transfer:mi(e)}),i}}let Hr=4,Ee=0;const Kr=[],qr=[];async function AC(){const t=Kr.shift();if(t)return t;if(Ee<Hr){const A=new $Q;return Ee+=1,A}return new Promise(A=>{qr.push(A)})}function tC(t){if(Ee>Hr){Ee-=1;return}const A=qr.shift();if(A){A(t);return}Kr.push(t)}async function dt(t){const A=await AC();try{return await t(A)}finally{tC(A)}}class zr extends nA.Loader{constructor(A){super(A),this.fileLoader=new nA.FileLoader(A)}load(A,e,s,i){this.fileLoader.setResponseType("arraybuffer"),this.fileLoader.setCrossOrigin(this.crossOrigin),this.fileLoader.setWithCredentials(this.withCredentials),this.fileLoader.setPath(this.path),this.fileLoader.setResourcePath(this.resourcePath),this.fileLoader.setRequestHeader(this.requestHeader),this.fileLoader.load(A,async n=>{if(e){const a=n,r={},g=[];let I=this.fileType;try{const B=Vr(a);if(this.fileType==="pcsogs"&&B===void 0)throw new Error("Invalid PC SOGS file");if(B!==void 0){I="pcsogs";for(const C of["means","scales","quats","sh0","shN"]){const E=B[C];if(E){const h=E.files;for(const c of h){const l=new URL(c,A).toString();this.manager.itemStart(l);const u=this.loadExtra(l).then(d=>{r[c]=d}).catch(d=>{throw this.manager.itemError(l),d}).finally(()=>{this.manager.itemEnd(l)});g.push(u)}}}}await Promise.all(g);const o=await je({input:a,extraFiles:r,fileType:I,pathOrUrl:A});this.packedSplats?(this.packedSplats.initialize(o),e(this.packedSplats)):e(new YA(o))}catch(B){i==null||i(B)}}},s,i)}async loadAsync(A,e){return new Promise((s,i)=>{this.load(A,n=>{s(n)},e,i)})}async loadExtra(A){return new Promise((e,s)=>{this.fileLoader.load(A,i=>e(i),void 0,i=>s(i))})}parse(A){return new KA({packedSplats:A})}}var pt=(t=>(t.PLY="ply",t.SPZ="spz",t.SPLAT="splat",t.KSPLAT="ksplat",t.PCSOGS="pcsogs",t))(pt||{});function Pe(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=Ti(t,4);return new DataView(e.buffer).getUint32(0,!0)===1347635022?"spz":void 0}}function eC(t){const A=t.split(/[?#]/,1)[0],e=Math.max(A.lastIndexOf("/"),A.lastIndexOf("\\")),s=A.slice(e+1),i=s.lastIndexOf(".");return i<=0||i===s.length-1?"":s.slice(i+1).toLowerCase()}function _r(t){const A=eC(t);if(A==="ply")return"ply";if(A==="spz")return"spz";if(A==="splat")return"splat";if(A==="ksplat")return"ksplat"}function sC(t){return Vr(t)!==void 0}function Vr(t){try{let A;if(typeof t=="string")A=t;else{const s=t instanceof ArrayBuffer?new Uint8Array(t):t;if(s.length>65536)return;A=new TextDecoder().decode(s)}const e=JSON.parse(A);if(!e||typeof e!="object"||Array.isArray(e))return;for(const s of["means","scales","quats","sh0"])if(!e[s]||typeof e[s]!="object"||Array.isArray(e[s])||!e[s].shape||!e[s].files||s!=="quats"&&(!e[s].mins||!e[s].maxs))return;return e}catch{return}}async function je({input:t,extraFiles:A,fileType:e,pathOrUrl:s}){const i=t instanceof ArrayBuffer?new Uint8Array(t):t;let n=e;switch(e||(n=Pe(i),!n&&s&&(n=_r(s))),n){case"ply":{const a=new qt({fileBytes:i});await a.parseHeader();const r=a.numSplats,g=mA(r).maxSplats,I={fileBytes:i,packedArray:new Uint32Array(g*4)};return await dt(async B=>{const{packedArray:o,numSplats:C,extra:E}=await B.call("unpackPly",I);return{packedArray:o,numSplats:C,extra:E}})}case"spz":return await dt(async a=>{const{packedArray:r,numSplats:g,extra:I}=await a.call("decodeSpz",{fileBytes:i});return{packedArray:r,numSplats:g,extra:I}});case"splat":return await dt(async a=>{const{packedArray:r,numSplats:g}=await a.call("decodeAntiSplat",{fileBytes:i});return{packedArray:r,numSplats:g}});case"ksplat":return await dt(async a=>{const{packedArray:r,numSplats:g,extra:I}=await a.call("decodeKsplat",{fileBytes:i});return{packedArray:r,numSplats:g,extra:I}});case"pcsogs":return await dt(async a=>{const{packedArray:r,numSplats:g,extra:I}=await a.call("decodePcSogs",{fileBytes:i,extraFiles:A});return{packedArray:r,numSplats:g,extra:I}});default:throw new Error(`Unknown splat file type: ${n}`)}}class iC{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),s=new Float32Array(e*3),i=new Float32Array(e*3),n=new Float32Array(e*4),a=new Float32Array(e),r=new Float32Array(e*3);if(s.set(this.centers),i.set(this.scales),n.set(this.quaternions),a.set(this.opacities),r.set(this.colors),this.centers=s,this.scales=i,this.quaternions=n,this.opacities=a,this.colors=r,this.sh1){const g=new Float32Array(e*9);g.set(this.sh1),this.sh1=g}if(this.sh2){const g=new Float32Array(e*15);g.set(this.sh2),this.sh2=g}if(this.sh3){const g=new Float32Array(e*21);g.set(this.sh3),this.sh3=g}this.maxSplats=e}}ensureIndex(A){this.ensureCapacity(A+1)}setCenter(A,e,s,i){this.centers[A*3]=e,this.centers[A*3+1]=s,this.centers[A*3+2]=i}setScale(A,e,s,i){this.scales[A*3]=e,this.scales[A*3+1]=s,this.scales[A*3+2]=i}setQuaternion(A,e,s,i,n){this.quaternions[A*4]=e,this.quaternions[A*4+1]=s,this.quaternions[A*4+2]=i,this.quaternions[A*4+3]=n}setOpacity(A,e){this.opacities[A]=e}setColor(A,e,s,i){this.colors[A*3]=e,this.colors[A*3+1]=s,this.colors[A*3+2]=i}setSh1(A,e){this.sh1||(this.sh1=new Float32Array(this.maxSplats*9));for(let s=0;s<9;++s)this.sh1[A*9+s]=e[s]}setSh2(A,e){this.sh2||(this.sh2=new Float32Array(this.maxSplats*15));for(let s=0;s<15;++s)this.sh2[A*15+s]=e[s]}setSh3(A,e){this.sh3||(this.sh3=new Float32Array(this.maxSplats*21));for(let s=0;s<21;++s)this.sh3[A*21+s]=e[s]}}var nC=`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 eA=class eA{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 Xe({packedSplats:this}),this.initialized=Promise.resolve(this),this.reinitialize(A)}reinitialize(A){this.isInitialized=!1,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:s,construct:i}=A;if(e){const n=new zr;n.packedSplats=this,await n.loadAsync(e)}else if(s){const n=await je({input:s,fileType:A.fileType,pathOrUrl:A.fileName??e});this.initialize(n)}if(i){const n=i(this);n instanceof Promise&&await n}}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),s=this.packedArray?this.packedArray.length/4:0;if(!this.packedArray||e>s){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 s,i;if(A===0)return this.ensureSplats(e);if(A===1)s=2,i="sh1";else if(A===2)s=4,i="sh2";else if(A===3)s=4,i="sh3";else throw new Error(`Invalid level: ${A}`);let n=this.extra[i]?this.extra[i].length/s:0;const a=e<=n?n:Math.max(e,2*n);if(!this.extra[i]||a>n){n=mA(a).maxSplats;const r=new Uint32Array(n*s);this.extra[i]&&r.set(this.extra[i]),this.extra[i]=r}return this.extra[i]}getSplat(A){if(!this.packedArray||A>=this.numSplats)throw new Error("Invalid index");return Qe(this.packedArray,A)}setSplat(A,e,s,i,n,a){const r=this.ensureSplats(A+1);Be(r,A,e.x,e.y,e.z,s.x,s.y,s.z,i.x,i.y,i.z,i.w,n,a.r,a.g,a.b),this.numSplats=Math.max(this.numSplats,A+1)}pushSplat(A,e,s,i,n){const a=this.ensureSplats(this.numSplats+1);Be(a,this.numSplats,A.x,A.y,A.z,e.x,e.y,e.z,s.x,s.y,s.z,s.w,i,n.r,n.g,n.b),++this.numSplats}forEachSplat(A){if(!(!this.packedArray||!this.numSplats))for(let e=0;e<this.numSplats;++e){const s=Qe(this.packedArray,e);A(e,s.center,s.scales,s.quaternion,s.opacity,s.color)}}ensureGenerate(A){if(this.target&&(A??1)<=this.maxSplats)return!1;this.dispose();const e=mA(A??1),{width:s,height:i,depth:n}=e;return this.maxSplats=e.maxSplats,this.target=new Q.WebGLArrayRenderTarget(s,i,n,{depthBuffer:!1,stencilBuffer:!1,generateMipmaps:!1,magFilter:Q.NearestFilter,minFilter:Q.NearestFilter}),this.target.texture.format=Q.RGBAIntegerFormat,this.target.texture.type=Q.UnsignedIntType,this.target.texture.internalFormat="RGBA32UI",this.target.scissorTest=!0,!0}generateMapping(A){let e=0;const s=A.map(i=>{const n=e,a=Math.ceil(i/j)*j;return e+=a,{base:n,count:i}});return{maxSplats:e,mapping:s}}getTexture(){return this.target?this.target.texture:this.source||this.packedArray?this.maybeUpdateSource():eA.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:s}=this.source.image;this.maxSplats!==A*e*s&&(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:s}=mA(this.maxSplats);this.source=new Q.DataArrayTexture(this.packedArray,A,e,s),this.source.format=Q.RGBAIntegerFormat,this.source.type=Q.UnsignedIntType,this.source.internalFormat="RGBA32UI",this.source.needsUpdate=!0}this.source.needsUpdate=!0}return this.source}static getEmpty(){if(!eA.emptySource){const{width:A,height:e,depth:s,maxSplats:i}=mA(1),n=new Uint32Array(i*4);eA.emptySource=new Q.DataArrayTexture(n,A,e,s),eA.emptySource.format=Q.RGBAIntegerFormat,eA.emptySource.type=Q.UnsignedIntType,eA.emptySource.internalFormat="RGBA32UI",eA.emptySource.needsUpdate=!0}return eA.emptySource}prepareProgramMaterial(A){let e=eA.generatorProgram.get(A);if(!e){const i=kA({index:"int"},{output:"uvec4"},({index:n})=>{A.inputs.index=n;const a=A.outputs.gsplat;return{output:Fs(a)}});eA.programTemplate||(eA.programTemplate=new Ve(nC)),e=new _e({graph:i,inputs:{index:"index"},outputs:{output:"target"},template:eA.programTemplate}),Object.assign(e.uniforms,{targetLayer:{value:0},targetBase:{value:0},targetCount:{value:0}}),eA.generatorProgram.set(A,e)}const s=e.prepareMaterial();return eA.mesh.material=s,{program:e,material:s}}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:s,renderer:i}){if(!this.target)throw new Error("Target must be initialized with ensureSplats");if(e+s>this.maxSplats)throw new Error("Base + count exceeds maxSplats");const{program:n,material:a}=this.prepareProgramMaterial(A);n.update();const r=this.saveRenderState(i),g=Math.ceil((e+s)/j)*j,I=j*et;for(a.uniforms.targetBase.value=e,a.uniforms.targetCount.value=s;e<g;){const B=Math.floor(e/I);a.uniforms.targetLayer.value=B;const o=B*I,C=Math.floor((e-o)/j),E=Math.min(et,Math.ceil((g-o)/j));this.target.scissor.set(0,C,j,E-C),i.setRenderTarget(this.target,B),i.xr.enabled=!1,i.autoClear=!1,i.render(eA.scene,eA.camera),e+=j*(E-C)}return this.resetRenderState(i,r),{nextBase:g}}};eA.emptySource=null,eA.programTemplate=null,eA.generatorProgram=new Map,eA.geometry=new Q.PlaneGeometry(2,2),eA.mesh=new Q.Mesh(eA.geometry,new Q.RawShaderMaterial({visible:!1})),eA.scene=new Q.Scene().add(eA.mesh),eA.camera=new Q.Camera;let YA=eA;class Xe extends R{constructor({packedSplats:A}={}){super({key:"packedSplats",type:Wt,globals:()=>[ue],value:{texture:YA.getEmpty(),numSplats:0},update:e=>{var s,i;return e.texture=((s=this.packedSplats)==null?void 0:s.getTexture())??YA.getEmpty(),e.numSplats=((i=this.packedSplats)==null?void 0:i.numSplats)??0,e}}),this.packedSplats=A}}class Ye extends Q.InstancedBufferGeometry{constructor(A,e){super(),this.ordering=A,this.setAttribute("position",new Q.BufferAttribute(aC,3)),this.setIndex(new Q.BufferAttribute(rC,1)),this._maxInstanceCount=A.length,this.instanceCount=e,this.attribute=new Q.InstancedBufferAttribute(A,1,!1,1),this.attribute.setUsage(Q.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 aC=new Float32Array([-1,-1,0,1,-1,0,1,1,0,-1,1,0]),rC=new Uint16Array([0,1,2,0,2,3]),tt=class tt{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.readback=new Uint16Array(0),this.spark=A.spark,this.camera=A.camera,this.viewToWorld=A.viewToWorld??new Q.Matrix4,A.target){const{width:e,height:s,doubleBuffer:i}=A.target,n=Math.max(1,Math.min(4,A.target.superXY??1));if(this.superXY=n,e*n>8192||s*n>8192)throw new Error("Target size too large");this.target=new Q.WebGLRenderTarget(e*n,s*n,{format:Q.RGBAFormat,type:Q.UnsignedByteType,colorSpace:Q.SRGBColorSpace}),i&&(this.back=new Q.WebGLRenderTarget(e*n,s*n,{format:Q.RGBAFormat,type:Q.UnsignedByteType,colorSpace:Q.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.orderingFreelist=new Mi({allocate:e=>new Uint32Array(e),valid:(e,s)=>e.length===s}),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:s,update:i,forceOrigin:n}){var r;for(s?this.viewToWorld=s:(this.camera=e??this.camera,this.camera&&(this.camera.updateMatrixWorld(),this.viewToWorld=this.camera.matrixWorld.clone()));i??!0;){const g=n?this.viewToWorld:void 0;if(this.spark.updateInternal({scene:A,originToWorld:g}))break;await new Promise(B=>setTimeout(B,10))}const a=this.spark.active;a!==((r=this.display)==null?void 0:r.accumulator)&&(this.spark.active.refCount+=1),await this.sortUpdate({accumulator:a,viewToWorld:this.viewToWorld})}renderTarget({scene:A,camera:e}){var i;const s=this.back??this.target;if(!s)throw new Error("Must initialize SparkViewpoint with target");if(e=e??this.camera,!e)throw new Error("Must provide camera");if(e instanceof Q.PerspectiveCamera){const n=new Q.PerspectiveCamera().copy(e,!1);n.aspect=s.width/s.height,n.updateProjectionMatrix(),e=n}this.viewToWorld=e.matrixWorld.clone();try{this.spark.renderer.setRenderTarget(s),this.spark.prepareViewpoint(this),this.spark.renderer.render(A,e)}finally{this.spark.prepareViewpoint(this.spark.defaultView),this.spark.renderer.setRenderTarget(null)}s!==this.target&&([this.target,this.back]=[this.back,this.target]),(i=this.onTextureUpdated)==null||i.call(this,s.texture)}async readTarget(){if(!this.target)throw new Error("Must initialize SparkViewpoint with target");const{width:A,height:e}=this.target,s=A*e*4;(!this.superPixels||this.superPixels.length<s)&&(this.superPixels=new Uint8Array(s)),await this.spark.renderer.readRenderTargetPixelsAsync(this.target,0,0,A,e,this.superPixels);const{superXY:i}=this;if(i===1)return this.superPixels;const n=A/i,a=e/i,r=n*a*4;(!this.pixels||this.pixels.length<r)&&(this.pixels=new Uint8Array(r));const{superPixels:g,pixels:I}=this,B=i*i;for(let o=0;o<a;o++){const C=o*n;for(let E=0;E<n;E++){const h=E*i;let c=0,l=0,u=0,d=0;for(let y=0;y<i;y++){const p=(o*i+y)*this.target.width;for(let m=0;m<i;m++){const N=(p+h+m)*4;c+=g[N],l+=g[N+1],u+=g[N+2],d+=g[N+3]}}const w=(C+E)*4;I[w]=c/B,I[w+1]=l/B,I[w+2]=u/B,I[w+3]=d/B}}return I}async prepareRenderPixels({scene:A,camera:e,viewToWorld:s,update:i,forceOrigin:n}){return await this.prepare({scene:A,camera:e,viewToWorld:s,update:i,forceOrigin:n}),this.renderTarget({scene:A,camera:e}),this.readTarget()}autoPoll({accumulator:A}){var n,a,r,g;this.camera&&(this.camera.updateMatrixWorld(),this.viewToWorld=this.camera.matrixWorld.clone());let e=!1,s=!1;if(!this.display)e=!0;else if(A){e=!0;const{mappingVersion:I}=this.display.accumulator;A.mappingVersion===I&&(this.spark.releaseAccumulator(this.display.accumulator),this.display.accumulator=A,s=!0)}const i=((n=this.sorting)==null?void 0:n.viewToWorld)??((a=this.display)==null?void 0:a.viewToWorld);i&&!Ce({matrix1:this.viewToWorld,matrix2:i,maxDistance:this.sortDistance??.01,minCoorient:this.sortCoorient??this.sortRadial?.99:.999})&&(e=!0),e&&(A&&(A.refCount+=1),A&&((r=this.pending)!=null&&r.accumulator)&&this.pending.accumulator!==((g=this.display)==null?void 0:g.accumulator)&&this.spark.releaseAccumulator(this.pending.accumulator),this.pending={accumulator:A,viewToWorld:this.viewToWorld,displayed:s},this.driveSort())}async driveSort(){var A;for(;;){if(this.sorting||!this.pending)return;const{viewToWorld:e,displayed:s}=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:s}),this.sorting=null}}async sortUpdate({accumulator:A,viewToWorld:e,displayed:s=!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:n}=A.splats;let a=0,r=this.orderingFreelist.alloc(n);if(i>0){const{reader:g,doubleSortReader:I,dynoSortRadial:B,dynoOrigin:o,dynoDirection:C,dynoDepthBias:E,dynoSort360:h,dynoSplats:c}=tt.makeSorter(),l=Math.ceil(n/2);this.readback=g.ensureBuffer(l,this.readback);const u=A.toWorld.clone().invert(),d=e.clone().premultiply(u);B.value=this.sort360?!0:this.sortRadial,o.value.set(0,0,0).applyMatrix4(d),C.value.set(0,0,-1).applyMatrix4(d).sub(o.value).normalize(),E.value=this.depthBias??1,h.value=this.sort360??!1,c.packedSplats=A.splats,await g.renderReadback({renderer:this.spark.renderer,reader:I,count:Math.ceil(i/2),readback:this.readback});const w=await dt(async y=>y.call("sortDoubleSplats",{numSplats:i,readback:this.readback,ordering:r}));this.readback=w.readback,r=w.ordering,a=w.activeSplats}this.updateDisplay({accumulator:A,viewToWorld:e,ordering:r,activeSplats:a,displayed:s}),this.sortingCheck=!1}updateDisplay({accumulator:A,viewToWorld:e,ordering:s,activeSplats:i,displayed:n=!1}){if(!this.display)this.display={accumulator:A,viewToWorld:e,geometry:new Ye(s,i)};else{!n&&A!==this.display.accumulator&&(this.spark.releaseAccumulator(this.display.accumulator),this.display.accumulator=A),this.display.viewToWorld=e;const a=this.display.geometry.ordering;a.length===s.length?this.display.geometry.update(s,i):(this.display.geometry.dispose(),this.display.geometry=new Ye(s,i)),this.orderingFreelist.free(a)}this.spark.viewpoint===this&&this.spark.prepareViewpoint(this)}static makeSorter(){if(!tt.dynos){const A=new Ie({value:!0}),e=new mt({value:new Q.Vector3}),s=new mt({value:new Q.Vector3}),i=new Qt({value:1}),n=new Ie({value:!1}),a=new Xe,r=new Ht,g=kA({index:"int"},{rgba8:"vec4"},({index:I})=>{if(!I)throw new Error("No index");const B={sortRadial:A,sortOrigin:e,sortDirection:s,sortDepthBias:i,sort360:n},o=CA(I,K("int",2)),C=Tt(a,o),E=as({gsplat:C,...B}),h=Tt(a,fA(o,K("int",1))),c=as({gsplat:h,...B}),l=HA({vectorType:"vec2",x:E,y:c});return{rgba8:_n(zn(l))}});tt.dynos={dynoSortRadial:A,dynoOrigin:e,dynoDirection:s,dynoDepthBias:i,dynoSort360:n,dynoSplats:a,reader:r,doubleSortReader:g}}return tt.dynos}};tt.EMPTY_TEXTURE=new Q.Texture,tt.dynos=null;let zt=tt;const gC=EA(`
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 as({gsplat:t,sortRadial:A,sortOrigin:e,sortDirection:s,sortDepthBias:i,sort360:n}){return Ot({inTypes:{gsplat:X,sortRadial:"bool",sortOrigin:"vec3",sortDirection:"vec3",sortDepthBias:"float",sort360:"bool"},outTypes:{metric:"float"},globals:()=>[FA,gC],inputs:{gsplat:t,sortRadial:A,sortOrigin:e,sortDirection:s,sortDepthBias:i,sort360:n},statements:({inputs:a,outputs:r})=>{const{gsplat:g,sortRadial:I,sortOrigin:B,sortDirection:o,sortDepthBias:C,sort360:E}=a;return bA(`
${r.metric} = computeSort(${g}, ${I}, ${B}, ${o}, ${C}, ${E});
`)}}).outputs.metric}class ge{constructor(){this.splats=new YA,this.toWorld=new Q.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:s,forceUpdate:i,originToWorld:n}){const a=this.mapping.reduce((I,B)=>(I.set(B.node,B),I),new Map);let r=0,g=0;for(const{node:I,generator:B,version:o,base:C,count:E}of s){const h=a.get(I);if((i||B!==(h==null?void 0:h.generator)||o!==(h==null?void 0:h.version)||C!==(h==null?void 0:h.base)||E!==(h==null?void 0:h.count))&&B&&E>0){const c=e.apply(B);try{this.splats.generate({generator:c,base:C,count:E,renderer:A})}catch(l){I.generator=void 0,I.generatorError=l}r+=1}g=Math.max(g,C+E)}return this.splats.numSplats=g,this.toWorld=n,this.mapping=s,r!==0}hasCorrespondence(A){return this.mapping.length!==A.mapping.length?!1:this.mapping.every(({node:e,base:s,count:i},n)=>{const{node:a,base:r,count:g}=A.mapping[n];return e===a&&s===r&&i===g})}}var oC=`const float LN_SCALE_MIN = -9.0;
const float LN_SCALE_MAX = 9.0;
const float LN_RESCALE = (LN_SCALE_MAX - LN_SCALE_MIN) / 254.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;
const float MAX_PIXEL_RADIUS = 512.0;
const float MIN_ALPHA = 0.5 * (1.0 / 255.0);
const float MAX_STDDEV = sqrt(8.0);
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 packSplat(vec3 center, vec3 scales, vec4 quaternion, vec4 rgba) {
uvec4 uRgba = uvec4(round(clamp(rgba * 255.0, 0.0, 255.0)));
uint uQuat = encodeQuatOctXy88R8(quaternion);
uvec3 uQuat3 = uvec3(uQuat & 0xffu, (uQuat >> 8u) & 0xffu, (uQuat >> 16u) & 0xffu);
uvec3 uScales = uvec3(
(scales.x == 0.0) ? 0u : uint(round(clamp((log(scales.x) - LN_SCALE_MIN) / LN_RESCALE, 0.0, 254.0))) + 1u,
(scales.y == 0.0) ? 0u : uint(round(clamp((log(scales.y) - LN_SCALE_MIN) / LN_RESCALE, 0.0, 254.0))) + 1u,
(scales.z == 0.0) ? 0u : uint(round(clamp((log(scales.z) - LN_SCALE_MIN) / LN_RESCALE, 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);
}
void unpackSplat(uvec4 packed, out vec3 center, out vec3 scales, out vec4 quaternion, out vec4 rgba) {
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);
rgba = vec4(uRgba) / 255.0;
center = vec4(
unpackHalf2x16(word1),
unpackHalf2x16(word2 & 0xffffu)
).xyz;
uvec3 uScales = uvec3(word3 & 0xffu, (word3 >> 8u) & 0xffu, (word3 >> 16u) & 0xffu);
scales = vec3(
(uScales.x == 0u) ? 0.0 : exp(LN_SCALE_MIN + float(uScales.x - 1u) * LN_RESCALE),
(uScales.y == 0u) ? 0.0 : exp(LN_SCALE_MIN + float(uScales.y - 1u) * LN_RESCALE),
(uScales.z == 0u) ? 0.0 : exp(LN_SCALE_MIN + float(uScales.z - 1u) * LN_RESCALE)
);
uint uQuat = ((word2 >> 16u) & 0xFFFFu) | ((word3 >> 8u) & 0xFF0000u);
quaternion = decodeQuatOctXy88R8(uQuat);
}
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);
}`,IC=`precision highp float;
precision highp int;
#include <splatDefines>
uniform float near;
uniform float far;
uniform bool encodeLinear;
uniform float maxStdDev;
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 < MIN_ALPHA) {
discard;
}
if (encodeLinear) {
rgba.rgb = srgbToLinear(rgba.rgb);
}
fragColor = rgba;
}`,BC=`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 time;
uniform float deltaTime;
uniform bool debugFlag;
uniform bool enable2DGS;
uniform float blurAmount;
uniform float preBlurAmount;
uniform float focalDistance;
uniform float apertureAngle;
uniform float clipXY;
uniform float renderScale;
uniform usampler2DArray packedSplats;
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;
unpackSplat(packed, center, scales, quaternion, rgba);
if (rgba.a < MIN_ALPHA) {
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 * renderScale;
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 = MAX_PIXEL_RADIUS;
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(MAX_PIXEL_RADIUS));
}
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 < MIN_ALPHA) {
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(MAX_PIXEL_RADIUS, maxStdDev * sqrt(eigen1));
float scale2 = position.y * min(MAX_PIXEL_RADIUS, 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 ke=null;function QC(){return ke||(Q.ShaderChunk.splatDefines=oC,ke={splatVertex:BC,splatFragment:IC}),ke}const rs=5;let Te=!1,Je=!1,Zr;function CC(t){let A=!1;return t instanceof KA?!0:(t.traverse(e=>{A=A||e instanceof KA}),A)}const Or=Q.Scene.prototype.add;Q.Scene.prototype.add=function(t){return Te=Te||CC(t),Je=Je||t instanceof _t,Or.call(this,t),this};const EC=Q.Scene.prototype.onBeforeRender;Q.Scene.prototype.onBeforeRender=function(t){if(Te){if(!Je){const A=Zr||new _t({renderer:t});this.add(A)}Q.Scene.prototype.onBeforeRender=EC,Q.Scene.prototype.add=Or}};const gA=class gA extends Q.Mesh{constructor(A){const e=gA.makeUniforms(),s=QC(),i=new Q.ShaderMaterial({glslVersion:Q.GLSL3,vertexShader:s.splatVertex,fragmentShader:s.splatFragment,uniforms:e,transparent:!0,blending:Q.NormalBlending,depthTest:!0,depthWrite:!1,side:Q.DoubleSide});super(gs,i),this.renderScale=1,this.splatTexture=null,this.autoViewpoints=[],this.rotateToAccumulator=new Pt({value:new Q.Quaternion}),this.translateToAccumulator=new mt({value:new Q.Vector3}),this.lastFrame=-1,this.lastUpdateTime=null,this.defaultCameras=[],this.pendingUpdate=null,this.envViewpoint=null,this.frustumCulled=!1,this.renderer=A.renderer,this.material=i,this.uniforms=e;const n=kA({gsplat:X},{gsplat:X},({gsplat:a})=>{if(!a)throw new Error("gsplat not defined");return a=Ke(a,{rotate:this.rotateToAccumulator,translate:this.translateToAccumulator}),{gsplat:a}});this.modifier=new Tr(n),this.autoUpdate=A.autoUpdate??!0,this.preUpdate=A.preUpdate??!1,this.originDistance=A.originDistance??1,this.maxStdDev=A.maxStdDev??Math.sqrt(8),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.active=new ge,this.accumulatorCount=1,this.freeAccumulators=[];for(let a=0;a<1;++a)this.freeAccumulators.push(new ge),this.accumulatorCount+=1;this.defaultView=new zt({...A.view,autoUpdate:!0,spark:this}),this.viewpoint=this.defaultView,this.prepareViewpoint(this.viewpoint),this.clock=A.clock?Ri(A.clock):new Q.Clock,Zr=this}static makeUniforms(){return{renderSize:{value:new Q.Vector2},near:{value:.1},far:{value:1e3},numSplats:{value:0},renderToViewQuat:{value:new Q.Quaternion},renderToViewPos:{value:new Q.Vector3},maxStdDev:{value:1},enable2DGS:{value:!1},preBlurAmount:{value:0},blurAmount:{value:.3},focalDistance:{value:0},apertureAngle:{value:0},falloff:{value:1},clipXY:{value:1.4},renderScale:{value:1},splatTexEnable:{value:!1},splatTexture:{type:"t",value:gA.EMPTY_SPLAT_TEXTURE},splatTexMul:{value:new Q.Matrix2},splatTexAdd:{value:new Q.Vector2},splatTexNear:{value:.1},splatTexFar:{value:1e3},splatTexMid:{value:0},packedSplats:{type:"t",value:YA.getEmpty()},time:{value:0},deltaTime:{value:0},encodeLinear:{value:!1},debugFlag:{value:!1}}}canAllocAccumulator(){return this.freeAccumulators.length>0||this.accumulatorCount<rs}maybeAllocAccumulator(){let A=this.freeAccumulators.pop();if(A===void 0){if(this.accumulatorCount>=rs)return null;A=new ge,this.accumulatorCount+=1}return A.refCount=1,A}releaseAccumulator(A){A.refCount-=1,A.refCount===0&&this.freeAccumulators.push(A)}newViewpoint(A){return new zt({...A,spark:this})}onBeforeRender(A,e,s){var E,h;const i=this.time??this.clock.getElapsedTime(),n=i-(this.viewpoint.lastTime??i);this.viewpoint.lastTime=i;const a=A.info.render.frame,r=a!==this.lastFrame;this.lastFrame=a;const g=this.viewpoint;if(g===this.defaultView){if(r)if(!A.xr.isPresenting)this.defaultView.viewToWorld=s.matrixWorld.clone(),this.defaultCameras=[this.defaultView.viewToWorld];else{const c=A.xr.getCamera().cameras;this.defaultCameras=c.map(l=>l.matrixWorld),this.defaultView.viewToWorld=cC(this.defaultCameras)??new Q.Matrix4}this.autoUpdate&&this.update({scene:e,viewToWorld:this.defaultView.viewToWorld})}if(r&&(this.uniforms.time.value=i,this.uniforms.deltaTime.value=n,this.uniforms.debugFlag.value=performance.now()/1e3%2<1),g.target)this.uniforms.renderSize.value.set(g.target.width,g.target.height);else{const c=A.getDrawingBufferSize(this.uniforms.renderSize.value);if(c.x===1&&c.y===1){const l=(E=A.xr.getSession())==null?void 0:E.renderState.baseLayer;l&&(c.x=l.framebufferWidth,c.y=l.framebufferHeight)}}const I=s;if(this.uniforms.near.value=I.near,this.uniforms.far.value=I.far,this.uniforms.encodeLinear.value=g.encodeLinear,this.uniforms.maxStdDev.value=this.maxStdDev,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.renderScale.value=this.renderScale,this.splatTexture){const{enable:c,texture:l,multiply:u,add:d,near:w,far:y,mid:p}=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((d==null?void 0:d.x)??.5,(d==null?void 0:d.y)??.5),this.uniforms.splatTexNear.value=w??this.uniforms.near.value,this.uniforms.splatTexFar.value=y??this.uniforms.far.value,this.uniforms.splatTexMid.value=p??0):(this.uniforms.splatTexEnable.value=!1,this.uniforms.splatTexture.value=gA.EMPTY_SPLAT_TEXTURE)}else this.uniforms.splatTexEnable.value=!1,this.uniforms.splatTexture.value=gA.EMPTY_SPLAT_TEXTURE;const B=((h=g.display)==null?void 0:h.accumulator.toWorld)??new Q.Matrix4,o=s.matrixWorld.clone().invert();B.clone().premultiply(o).decompose(this.uniforms.renderToViewPos.value,this.uniforms.renderToViewQuat.value,new Q.Vector3)}prepareViewpoint(A){if(this.viewpoint=A??this.viewpoint,this.viewpoint.display){const{accumulator:e,geometry:s}=this.viewpoint.display;this.uniforms.numSplats.value=e.splats.numSplats,this.uniforms.packedSplats.value=e.splats.getTexture(),this.geometry=s}else this.uniforms.numSplats.value=0,this.uniforms.packedSplats.value=YA.getEmpty(),this.geometry=gs}update({scene:A,viewToWorld:e}){const s=this.matrixWorld.clone();this.preUpdate?this.updateInternal({scene:A,originToWorld:s,viewToWorld:e}):(this.pendingUpdate={scene:A,originToWorld:s},setTimeout(()=>{if(this.pendingUpdate){const{scene:i,originToWorld:n}=this.pendingUpdate;this.pendingUpdate=null,this.updateInternal({scene:i,originToWorld:n,viewToWorld:e})}},1))}updateInternal({scene:A,originToWorld:e,viewToWorld:s}){var C;if(!this.canAllocAccumulator())return!1;e||(e=this.active.toWorld),s=s??e.clone();const i=this.time??this.clock.getElapsedTime(),n=i-(this.lastUpdateTime??i);this.lastUpdateTime=i;const a=this.active.mapping.reduce((E,h)=>(E.set(h.node,h),E),new Map),{generators:r,globalEdits:g}=this.compileScene(A);for(const E of r)(C=E.frameUpdate)==null||C.call(E,{object:E,time:i,deltaTime:n,viewToWorld:s,globalEdits:g});for(const E of r){const h=a.get(E),c=E.generator?E.numSplats:0;(E.generator!==(h==null?void 0:h.generator)||c!==(h==null?void 0:h.count))&&E.updateVersion()}const B=!Ce({matrix1:e,matrix2:this.active.toWorld,maxDistance:this.originDistance})||r.length!==a.size||r.some(E=>{var h;return E.version!==((h=a.get(E))==null?void 0:h.version)});let o=null;if(B){if(o=this.maybeAllocAccumulator(),!o)throw new Error("Unreachable");const E=!Ce({matrix1:e,matrix2:this.active.toWorld,maxDistance:1e-5,minCoorient:.99999}),c=r.map((p,m)=>{const N=a.get(p);return N?[p.version-N.version,N.base,p]:[Number.POSITIVE_INFINITY,p.version,p]}).sort((p,m)=>p[0]!==m[0]?p[0]-m[0]:p[1]-m[1]).map(([p,m,N])=>N),l=c.map(p=>p.numSplats),{maxSplats:u,mapping:d}=o.splats.generateMapping(l),w=c.map((p,m)=>{const{base:N,count:f}=d[m];return{node:p,generator:p.generator,version:p.version,base:N,count:f}});e.clone().invert().decompose(this.translateToAccumulator.value,this.rotateToAccumulator.value,new Q.Vector3),o.ensureGenerate(u),o.generateSplats({renderer:this.renderer,modifier:this.modifier,generators:w,forceUpdate:E,originToWorld:e}),o.splatsVersion=this.active.splatsVersion+1;const y=o.hasCorrespondence(this.active);o.mappingVersion=this.active.mappingVersion+(y?0:1),this.releaseAccumulator(this.active),this.active=o,this.prepareViewpoint()}return setTimeout(()=>{for(const E of this.autoViewpoints)E.autoPoll({accumulator:o??void 0})},1),!0}compileScene(A){const e=[];A.traverse(i=>{i instanceof $t&&e.push(i)});const s=new Set;return A.traverseVisible(i=>{if(i instanceof Kt){let n=i.parent;for(;n!=null&&!(n instanceof KA);)n=n.parent;n==null&&s.add(i)}}),{generators:e,globalEdits:Array.from(s)}}async renderEnvMap({renderer:A,scene:e,worldCenter:s,size:i=256,near:n=.1,far:a=1e3,hideObjects:r=[],update:g=!1}){var E,h;if(this.envViewpoint||(this.envViewpoint=this.newViewpoint({sort360:!0})),!gA.cubeRender||gA.cubeRender.target.width!==i||gA.cubeRender.near!==n||gA.cubeRender.far!==a){gA.cubeRender&&gA.cubeRender.target.dispose();const c=new Q.WebGLCubeRenderTarget(i,{format:Q.RGBAFormat,generateMipmaps:!0,minFilter:Q.LinearMipMapLinearFilter}),l=new Q.CubeCamera(n,a,c);gA.cubeRender={target:c,camera:l,near:n,far:a}}gA.pmrem||(gA.pmrem=new Q.PMREMGenerator(A??this.renderer));const I=new Q.Matrix4().setPosition(s);await((E=this.envViewpoint)==null?void 0:E.prepare({scene:e,viewToWorld:I,update:g}));const{target:B,camera:o}=gA.cubeRender;o.position.copy(s);const C=new Map;for(const c of r)C.set(c,c.visible),c.visible=!1;this.prepareViewpoint(this.envViewpoint),o.update(A??this.renderer,e),this.prepareViewpoint(this.defaultView);for(const[c,l]of C.entries())c.visible=l;return(h=gA.pmrem)==null?void 0:h.fromCubemap(B.texture).texture}recurseSetEnvMap(A,e){A.traverse(s=>{if(s instanceof Q.Mesh)if(Array.isArray(s.material))for(const i of s.material)i instanceof Q.MeshStandardMaterial&&(i.envMap=e);else s.material instanceof Q.MeshStandardMaterial&&(s.material.envMap=e)})}getRgba({generator:A,rgba:e}){const s=this.active.mapping.find(({node:i})=>i===A);if(!s)throw new Error("Generator not found");return e=e??new Le,e.fromPackedSplats({packedSplats:this.active.splats,base:s.base,count:s.count,renderer:this.renderer}),e}async readRgba({generator:A,rgba:e}){return e=this.getRgba({generator:A,rgba:e}),e.read()}};gA.cubeRender=null,gA.pmrem=null,gA.EMPTY_SPLAT_TEXTURE=new Q.Data3DTexture;let _t=gA;const gs=new Ye(new Uint32Array(1),0);kA({packedSplats:Wt,index:"int"},{gsplat:X},({packedSplats:t,index:A})=>{if(!t||!A)throw new Error("Invalid input");return{gsplat:Tt(t,A)}});function cC(t){if(t.length===0)return null;const A=new Q.Vector3,e=new Q.Quaternion,s=new Q.Vector3,i=[],n=[];for(const a of t)a.decompose(A,e,s),i.push(A),n.push(e);return new Q.Matrix4().compose(Ui(i),bi(n),new Q.Vector3(1,1,1))}function hC(t,A,e){const s=Math.floor(t.length/32);if(s*32!==t.length)throw new Error("Invalid .splat file size");const i=new Float32Array(t.buffer);for(let n=0;n<s;++n){const a=n*32,r=n*8,g=i[r+0],I=i[r+1],B=i[r+2],o=i[r+3],C=i[r+4],E=i[r+5],h=t[a+24]/255,c=t[a+25]/255,l=t[a+26]/255,u=t[a+27]/255,d=(t[a+28]-128)/128,w=(t[a+29]-128)/128,y=(t[a+30]-128)/128,p=(t[a+31]-128)/128;e(n,g,I,B,o,C,E,w,y,p,d,u,h,c,l)}}const os={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}},lC={0:0,1:9,2:24,3:45};function uC(t,A,e,s){var c;let a=0;const r=new DataView(t.buffer,a,4096);a+=4096;const g=r.getUint8(0),I=r.getUint8(1);if(g!==0||I<1)throw new Error(`Unsupported .ksplat version: ${g}.${I}`);const B=r.getUint32(4,!0);r.getUint32(16,!0);const o=r.getUint16(20,!0);if(o<0||o>2)throw new Error(`Invalid .ksplat compression level: ${o}`);const C=r.getFloat32(36,!0)||-1.5,E=r.getFloat32(40,!0)||1.5;let h=4096+B*1024;for(let l=0;l<B;++l){let u=function(SA,J){if(o===0)return Y.getFloat32(SA+Z+J*4,!0);if(o===1)return wA(Y.getUint16(SA+Z+J*2,!0));const _A=Y.getUint8(SA+Z+J)/255;return C+_A*(E-C)};const d=new DataView(t.buffer,a,1024);a+=1024;const w=d.getUint32(0,!0),y=d.getUint32(4,!0),p=d.getUint32(8,!0),m=d.getUint32(12,!0),N=d.getFloat32(16,!0),f=d.getUint16(20,!0),D=(d.getUint32(24,!0)||((c=os[o])==null?void 0:c.scaleRange))??1,G=d.getUint32(32,!0),x=G*p,M=d.getUint32(36,!0),b=M*4,F=f*m+b,k=d.getUint16(40,!0),U=lC[k],{bytesPerCenter:L,bytesPerScale:AA,bytesPerRotation:z,bytesPerColor:sA,bytesPerSphericalHarmonicsComponent:tA,scaleOffsetBytes:O,rotationOffsetBytes:T,colorOffsetBytes:W,sphericalHarmonicsOffsetBytes:Z}=os[o],P=L+AA+z+sA+U*tA,v=P*y,pA=v+F,IA=[0,3,6,1,4,7,2,5,8],yA=[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],MA=k>=1?new Float32Array(3*3):void 0,cA=k>=2?new Float32Array(5*3):void 0,vA=k>=3?new Float32Array(7*3):void 0,xA=N/2/D,WA=h+b,PA=h+F,Y=new DataView(t.buffer,PA,v),dA=new Float32Array(t.buffer,WA,m*3),zA=new Uint32Array(t.buffer,h,M);let Ft=G,Ae=x;for(let SA=0;SA<w;++SA){const J=SA*P;let _A;if(SA<x)_A=Math.floor(SA/p);else{const jA=zA[Ft-G];SA>=Ae+jA&&(Ft+=1,Ae+=jA),_A=Ft}const ye=o===0?Y.getFloat32(J+0,!0):(Y.getUint16(J+0,!0)-D)*xA+dA[3*_A+0],De=o===0?Y.getFloat32(J+4,!0):(Y.getUint16(J+2,!0)-D)*xA+dA[3*_A+1],fe=o===0?Y.getFloat32(J+8,!0):(Y.getUint16(J+4,!0)-D)*xA+dA[3*_A+2],me=o===0?Y.getFloat32(J+O+0,!0):wA(Y.getUint16(J+O+0,!0)),Me=o===0?Y.getFloat32(J+O+4,!0):wA(Y.getUint16(J+O+2,!0)),ag=o===0?Y.getFloat32(J+O+8,!0):wA(Y.getUint16(J+O+4,!0)),rg=o===0?Y.getFloat32(J+T+0,!0):wA(Y.getUint16(J+T+0,!0)),gg=o===0?Y.getFloat32(J+T+4,!0):wA(Y.getUint16(J+T+2,!0)),og=o===0?Y.getFloat32(J+T+8,!0):wA(Y.getUint16(J+T+4,!0)),Ig=o===0?Y.getFloat32(J+T+12,!0):wA(Y.getUint16(J+T+6,!0)),Bg=Y.getUint8(J+W+0)/255,Qg=Y.getUint8(J+W+1)/255,Cg=Y.getUint8(J+W+2)/255,Eg=Y.getUint8(J+W+3)/255;if(e(SA,ye,De,fe,me,Me,ag,gg,og,Ig,rg,Eg,Bg,Qg,Cg),k>=1&&MA){for(const[jA,kt]of IA.entries())MA[jA]=u(J,kt);if(cA)for(const[jA,kt]of yA.entries())cA[jA]=u(J,kt);if(vA)for(const[jA,kt]of DA.entries())vA[jA]=u(J,kt);s==null||s(SA,MA,cA,vA)}}h+=pA}}class Wr{constructor({fileBytes:A}){this.fileBytes=A instanceof ArrayBuffer?new Uint8Array(A):A,this.reader=new Ji({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,s,i,n,a){if(this.parsed)throw new Error("SPZ file already parsed");if(this.parsed=!0,this.version===1){const r=this.reader.read(this.numSplats*3*2),g=new Uint16Array(r.buffer);for(let I=0;I<this.numSplats;I++){const B=I*3,o=wA(g[B]),C=wA(g[B+1]),E=wA(g[B+2]);A==null||A(I,o,C,E)}}else if(this.version===2){const r=1<<this.fractionalBits,g=this.reader.read(this.numSplats*3*3);for(let I=0;I<this.numSplats;I++){const B=I*9,o=((g[B+2]<<24|g[B+1]<<16|g[B]<<8)>>8)/r,C=((g[B+5]<<24|g[B+4]<<16|g[B+3]<<8)>>8)/r,E=((g[B+8]<<24|g[B+7]<<16|g[B+6]<<8)>>8)/r;A==null||A(I,o,C,E)}}else throw new Error("Unreachable");{const r=this.reader.read(this.numSplats);for(let g=0;g<this.numSplats;g++)e==null||e(g,r[g]/255)}{const r=this.reader.read(this.numSplats*3),g=jr/.15;for(let I=0;I<this.numSplats;I++){const B=I*3,o=(r[B]/255-.5)*g+.5,C=(r[B+1]/255-.5)*g+.5,E=(r[B+2]/255-.5)*g+.5;s==null||s(I,o,C,E)}}{const r=this.reader.read(this.numSplats*3);for(let g=0;g<this.numSplats;g++){const I=g*3,B=Math.exp(r[I]/16-10),o=Math.exp(r[I+1]/16-10),C=Math.exp(r[I+2]/16-10);i==null||i(g,B,o,C)}}{const r=this.reader.read(this.numSplats*3);for(let g=0;g<this.numSplats;g++){const I=g*3,B=r[I]/127.5-1,o=r[I+1]/127.5-1,C=r[I+2]/127.5-1,E=Math.sqrt(Math.max(0,1-B*B-o*o-C*C));n==null||n(g,B,o,C,E)}}if(a&&this.shDegree>=1){const r=new Float32Array(9),g=this.shDegree>=2?new Float32Array(5*3):void 0,I=this.shDegree>=3?new Float32Array(7*3):void 0,B=this.reader.read(this.numSplats*Pr[this.shDegree]*3);let o=0;for(let C=0;C<this.numSplats;C++){for(let E=0;E<9;++E)r[E]=(B[o+E]-128)/128;if(o+=9,g){for(let E=0;E<15;++E)g[E]=(B[o+E]-128)/128;o+=15}if(I){for(let E=0;E<21;++E)I[E]=(B[o+E]-128)/128;o+=21}a==null||a(C,r,g,I)}}}}const Pr={1:3,2:8,3:15},jr=.28209479177387814,dC=1347635022,wC=2,pC=1;class VA{constructor({numSplats:A,shDegree:e,fractionalBits:s=12,flagAntiAlias:i=!0}){this.clippedCount=0;const n=19+(e>=1?9:0)+(e>=2?15:0)+(e>=3?21:0),a=16+A*n;this.buffer=new ArrayBuffer(a),this.view=new DataView(this.buffer),this.view.setUint32(0,dC,!0),this.view.setUint32(4,wC,!0),this.view.setUint32(8,A,!0),this.view.setUint8(12,e),this.view.setUint8(13,s),this.view.setUint8(14,i?pC:0),this.view.setUint8(15,0),this.numSplats=A,this.shDegree=e,this.fractionalBits=s,this.fraction=1<<s,this.flagAntiAlias=i}setCenter(A,e,s,i){const n=Math.round(e*this.fraction),a=Math.max(-8388607,Math.min(8388607,n)),r=Math.round(s*this.fraction),g=Math.max(-8388607,Math.min(8388607,r)),I=Math.round(i*this.fraction),B=Math.max(-8388607,Math.min(8388607,I));(n!==a||r!==g||I!==B)&&(this.clippedCount+=1);const E=16+A*9;this.view.setUint8(E,a&255),this.view.setUint8(E+1,a>>8&255),this.view.setUint8(E+2,a>>16&255),this.view.setUint8(E+3,g&255),this.view.setUint8(E+4,g>>8&255),this.view.setUint8(E+5,g>>16&255),this.view.setUint8(E+6,B&255),this.view.setUint8(E+7,B>>8&255),this.view.setUint8(E+8,B>>16&255)}setAlpha(A,e){const s=16+this.numSplats*9+A;this.view.setUint8(s,Math.max(0,Math.min(255,Math.round(e*255))))}static scaleRgb(A){const e=((A-.5)/(jr/.15)+.5)*255;return Math.max(0,Math.min(255,Math.round(e)))}setRgb(A,e,s,i){const n=16+this.numSplats*10+A*3;this.view.setUint8(n,VA.scaleRgb(e)),this.view.setUint8(n+1,VA.scaleRgb(s)),this.view.setUint8(n+2,VA.scaleRgb(i))}setScale(A,e,s,i){const n=16+this.numSplats*13+A*3;this.view.setUint8(n,Math.max(0,Math.min(255,Math.round((Math.log(e)+10)*16)))),this.view.setUint8(n+1,Math.max(0,Math.min(255,Math.round((Math.log(s)+10)*16)))),this.view.setUint8(n+2,Math.max(0,Math.min(255,Math.round((Math.log(i)+10)*16))))}setQuat(A,e,s,i,n){const a=16+this.numSplats*16+A*3,r=n<0;this.view.setUint8(a,Math.max(0,Math.min(255,Math.round(((r?-e:e)+1)*127.5)))),this.view.setUint8(a+1,Math.max(0,Math.min(255,Math.round(((r?-s:s)+1)*127.5)))),this.view.setUint8(a+2,Math.max(0,Math.min(255,Math.round(((r?-i:i)+1)*127.5))))}static quantizeSh(A,e){const s=Math.round(A*128)+128,i=1<<8-e,n=Math.floor((s+i/2)/i)*i;return Math.max(0,Math.min(255,n))}setSh(A,e,s,i){const n=Pr[this.shDegree]||0,a=16+this.numSplats*19+A*n*3;for(let r=0;r<9;++r)this.view.setUint8(a+r,VA.quantizeSh(e[r],5));if(s){const r=a+9;for(let g=0;g<15;++g)this.view.setUint8(r+g,VA.quantizeSh(s[g],4));if(i){const g=r+15;for(let I=0;I<21;++I)this.view.setUint8(g+I,VA.quantizeSh(i[I],4))}}}async finalize(){const A=new Uint8Array(this.buffer),s=new ReadableStream({async start(a){a.enqueue(A),a.close()}}).pipeThrough(new CompressionStream("gzip")),n=await new Response(s).arrayBuffer();return console.log("Compressed",A.length,"bytes to",n.byteLength,"bytes"),new Uint8Array(n)}}async function yC(t){var B,o,C;const A=new iC,{inputs:e,clipXyz:s,maxSh:i,fractionalBits:n=12,opacityThreshold:a}=t;for(const E of e){let h=function(f){return f.multiplyScalar(w),f.applyQuaternion(y),f.add(p),f},c=function(f){return f.multiplyScalar(w),f},l=function(f){return f.premultiply(y),f},u=function(f){return!m||m.containsPoint(f)},d=function(f){return a!==void 0?f>=a:!0};const w=((B=E.transform)==null?void 0:B.scale)??1,y=new Q.Quaternion().fromArray(((o=E.transform)==null?void 0:o.quaternion)??[0,0,0,1]),p=new Q.Vector3().fromArray(((C=E.transform)==null?void 0:C.translate)??[0,0,0]),m=s?new Q.Box3(new Q.Vector3().fromArray(s.min),new Q.Vector3().fromArray(s.max)):void 0;let N=E.fileType;switch(N||(N=Pe(E.fileBytes),!N&&E.pathOrUrl&&(N=_r(E.pathOrUrl))),N){case pt.PLY:{const f=new qt({fileBytes:E.fileBytes});await f.parseHeader();let D=null;f.parseSplats((G,x,M,b,F,k,U,L,AA,z,sA,tA,O,T,W)=>{const Z=h(new Q.Vector3(x,M,b));if(u(Z)&&d(tA)){D=A.pushSplat(),A.setCenter(D,Z.x,Z.y,Z.z);const P=c(new Q.Vector3(F,k,U));A.setScale(D,P.x,P.y,P.z);const v=l(new Q.Quaternion(L,AA,z,sA));A.setQuaternion(D,v.x,v.y,v.z,v.w),A.setOpacity(D,tA),A.setColor(D,O,T,W)}else D=null},(G,x,M,b)=>{x&&D!==null&&A.setSh1(D,x),M&&D!==null&&A.setSh2(D,M),b&&D!==null&&A.setSh3(D,b)});break}case pt.SPZ:{const f=new Wr({fileBytes:E.fileBytes}),D=new Int32Array(f.numSplats);D.fill(-1);const G=new Float32Array(f.numSplats*3),x=new Q.Vector3;f.parseSplats((M,b,F,k)=>{const U=h(new Q.Vector3(b,F,k));G[M*3]=U.x,G[M*3+1]=U.y,G[M*3+2]=U.z},(M,b)=>{x.fromArray(G,M*3),u(x)&&d(b)&&(D[M]=A.pushSplat(),A.setCenter(D[M],x.x,x.y,x.z),A.setOpacity(D[M],b))},(M,b,F,k)=>{D[M]>=0&&A.setColor(D[M],b,F,k)},(M,b,F,k)=>{if(D[M]>=0){const U=c(new Q.Vector3(b,F,k));A.setScale(D[M],U.x,U.y,U.z)}},(M,b,F,k,U)=>{if(D[M]>=0){const L=l(new Q.Quaternion(b,F,k,U));A.setQuaternion(D[M],L.x,L.y,L.z,L.w)}},(M,b,F,k)=>{D[M]>=0&&(A.setSh1(D[M],b),F&&A.setSh2(D[M],F),k&&A.setSh3(D[M],k))});break}case pt.SPLAT:hC(E.fileBytes,f=>{},(f,D,G,x,M,b,F,k,U,L,AA,z,sA,tA,O)=>{const T=h(new Q.Vector3(D,G,x));if(u(T)&&d(z)){const W=A.pushSplat();A.setCenter(W,T.x,T.y,T.z);const Z=c(new Q.Vector3(M,b,F));A.setScale(W,Z.x,Z.y,Z.z);const P=l(new Q.Quaternion(k,U,L,AA));A.setQuaternion(W,P.x,P.y,P.z,P.w),A.setOpacity(W,z),A.setColor(W,sA,tA,O)}});break;case pt.KSPLAT:{let f=null;uC(E.fileBytes,D=>{},(D,G,x,M,b,F,k,U,L,AA,z,sA,tA,O,T)=>{const W=h(new Q.Vector3(G,x,M));if(u(W)&&d(sA)){f=A.pushSplat(),A.setCenter(f,W.x,W.y,W.z);const Z=c(new Q.Vector3(b,F,k));A.setScale(f,Z.x,Z.y,Z.z);const P=l(new Q.Quaternion(U,L,AA,z));A.setQuaternion(f,P.x,P.y,P.z,P.w),A.setOpacity(f,sA),A.setColor(f,tA,O,T)}else f=null},(D,G,x,M)=>{f!==null&&(A.setSh1(f,G),x&&A.setSh2(f,x),M&&A.setSh3(f,M))});break}default:throw new Error(`transcodeSpz not implemented for ${N}`)}}const r=Math.min(i??3,A.sh3?3:A.sh2?2:A.sh1?1:0),g=new VA({numSplats:A.numSplats,shDegree:r,fractionalBits:n,flagAntiAlias:!0});for(let E=0;E<A.numSplats;++E){const h=E*3,c=E*4;g.setCenter(E,A.centers[h],A.centers[h+1],A.centers[h+2]),g.setScale(E,A.scales[h],A.scales[h+1],A.scales[h+2]),g.setQuat(E,A.quaternions[c],A.quaternions[c+1],A.quaternions[c+2],A.quaternions[c+3]),g.setAlpha(E,A.opacities[E]),g.setRgb(E,A.colors[h],A.colors[h+1],A.colors[h+2]),A.sh1&&r>=1&&g.setSh(E,A.sh1.slice(E*9,(E+1)*9),r>=2&&A.sh2?A.sh2.slice(E*15,(E+1)*15):void 0,r>=3&&A.sh3?A.sh3.slice(E*21,(E+1)*21):void 0)}return{fileBytes:await g.finalize(),clippedCount:g.clippedCount}}class DC{constructor(A){this.mesh=A.mesh,this.numSplats=A.numSplats??this.mesh.numSplats;const{width:e,height:s,depth:i,maxSplats:n}=mA(this.numSplats);this.skinData=new Uint16Array(n*4),this.skinTexture=new Q.DataArrayTexture(this.skinData,e,s,i),this.skinTexture.format=Q.RGBAIntegerFormat,this.skinTexture.type=Q.UnsignedShortType,this.skinTexture.internalFormat="RGBA16UI",this.skinTexture.needsUpdate=!0,this.numBones=A.numBones??256,this.boneData=new Float32Array(this.numBones*16),this.boneTexture=new Q.DataTexture(this.boneData,4,this.numBones,Q.RGBAFormat,Q.FloatType),this.boneTexture.internalFormat="RGBA32F",this.boneTexture.needsUpdate=!0,this.uniform=new R({key:"skinning",type:Xr,globals:()=>[$r],value:{numSplats:this.numSplats,numBones:this.numBones,skinTexture:this.skinTexture,boneTexture:this.boneTexture}})}modify(A){return mC(A,this.uniform)}setRestQuatPos(A,e,s){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]=s.x,this.boneData[i+5]=s.y,this.boneData[i+6]=s.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,s){const i=A*16,n=new Q.Quaternion(this.boneData[i+0],this.boneData[i+1],this.boneData[i+2],this.boneData[i+3]),a=new Q.Vector3(this.boneData[i+4],this.boneData[i+5],this.boneData[i+6]),r=n.clone().invert(),g=s.clone().sub(a);g.applyQuaternion(r),r.multiply(e);const I=new Q.Quaternion(g.x,g.y,g.z,0).multiply(n);this.boneData[i+8]=r.x,this.boneData[i+9]=r.y,this.boneData[i+10]=r.z,this.boneData[i+11]=r.w,this.boneData[i+12]=.5*I.x,this.boneData[i+13]=.5*I.y,this.boneData[i+14]=.5*I.z,this.boneData[i+15]=.5*I.w}setSplatBones(A,e,s){const i=A*4;this.skinData[i+0]=Math.min(255,Math.max(0,Math.round(s.x*255)))+(e.x<<8),this.skinData[i+1]=Math.min(255,Math.max(0,Math.round(s.y*255)))+(e.y<<8),this.skinData[i+2]=Math.min(255,Math.max(0,Math.round(s.z*255)))+(e.z<<8),this.skinData[i+3]=Math.min(255,Math.max(0,Math.round(s.w*255)))+(e.w<<8)}updateBones(){this.boneTexture.needsUpdate=!0,this.mesh.needsUpdate=!0}}const Xr={type:"GsplatSkinning"},$r=EA(`
struct GsplatSkinning {
int numSplats;
int numBones;
usampler2DArray skinTexture;
sampler2D boneTexture;
};
`),fC=EA(`
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 mC(t,A){return new V({inTypes:{gsplat:X,skinning:Xr},outTypes:{gsplat:X},globals:()=>[$r,fC],inputs:{gsplat:t,skinning:A},statements:({inputs:s,outputs:i})=>{const{skinning:n}=s,{gsplat:a}=i;return bA(`
${a} = ${s.gsplat};
if (isGsplatActive(${a}.flags)) {
applyGsplatSkinning(
${n}.numSplats, ${n}.numBones,
${n}.skinTexture, ${n}.boneTexture,
${a}.index, ${a}.center, ${a}.quaternion
);
}
`)}}).outputs.gsplat}function MC({splats:t,extents:A,stepSize:e=1,pointRadius:s=.01,pointShadowScale:i=2,opacity:n=1,color:a}){const g=new Q.Vector3,I=new Q.Vector3,B=new Q.Quaternion(0,0,0,1);a==null&&(a=(C,E)=>C.set(.55+.45*Math.cos(E.x*1),.55+.45*Math.cos(E.y*1),.55+.45*Math.cos(E.z*1)));const o=new Q.Color;for(let C=A.min.z;C<A.max.z+1e-6;C+=e)for(let E=A.min.y;E<A.max.y+1e-6;E+=e)for(let h=A.min.x;h<A.max.x+1e-6;h+=e){g.set(h,E,C);for(let c=0;c<2;++c)I.setScalar(s*(c?1:i)),c?typeof a=="function"?a(o,g):o.copy(a):o.setScalar(0),t.pushSplat(g,I,B,n,o)}}function xC({splats:t,scale:A=.25,axisRadius:e=.0075,axisShadowScale:s=2,origins:i=[new Q.Vector3]}){const n=new Q.Vector3,a=new Q.Vector3,r=new Q.Quaternion(0,0,0,1),g=new Q.Color,I=1;for(const B of i)for(let o=0;o<3;++o){n.set(B.x+(o===0?A:0),B.y+(o===1?A:0),B.z+(o===2?A:0));for(let C=0;C<2;++C)a.set((o===0?A:e)*(C?1:s),(o===1?A:e)*(C?1:s),(o===2?A:e)*(C?1:s)),g.setRGB(C===0?0:o===0?1:0,C===0?0:o===1?1:0,C===0?0:o===2?1:0),t.pushSplat(n,a,r,I,g)}}function SC({splats:t,origin:A=new Q.Vector3,radius:e=1,maxDepth:s=3,filter:i=null,pointRadius:n=.02,pointThickness:a=.001,color:r=new Q.Color(1,1,1)}){const g={};function I(c){if(i&&!i(c))return;const l=`${c.x},${c.y},${c.z}`;g[l]||(g[l]=c)}function B(c,l,u,d){if(I(l),I(u),I(d),c>=s)return;const w=new Q.Vector3().addVectors(l,u).normalize(),y=new Q.Vector3().addVectors(u,d).normalize(),p=new Q.Vector3().addVectors(d,l).normalize();B(c+1,l,w,p),B(c+1,w,u,y),B(c+1,p,y,d),B(c+1,w,y,p)}for(const c of[-1,1])for(const l of[-1,1])for(const u of[-1,1]){const d=new Q.Vector3(c,0,0),w=new Q.Vector3(0,l,0),y=new Q.Vector3(0,0,u);B(0,d,w,y)}const o=Object.values(g),C=new Q.Vector3(n,n,a),E=new Q.Quaternion,h=typeof r=="function"?new Q.Color:r;for(const c of o)E.setFromUnitVectors(new Q.Vector3(0,0,-1),c),typeof r=="function"&&r(h,c),c.multiplyScalar(e),c.add(A),t.pushSplat(c,C,E,1,h)}function NC({text:t,font:A,fontSize:e,color:s,rgb:i,dotRadius:n,textAlign:a,lineHeight:r,objectScale:g}){A=A??"Arial",e=e??32,s=s??new Q.Color(1,1,1),n=n??.8,a=a??"start",r=r??1,g=g??1;const I=t.split(`
`),B=document.createElement("canvas"),o=B.getContext("2d");if(!o)throw new Error("Failed to create canvas context");o.font=`${e}px ${A}`,o.textAlign=a;const C=o.measureText(""),E=C.fontBoundingBoxAscent+C.fontBoundingBoxDescent;let h=Number.POSITIVE_INFINITY,c=Number.NEGATIVE_INFINITY,l=Number.POSITIVE_INFINITY,u=Number.NEGATIVE_INFINITY;for(let F=0;F<I.length;++F){const k=o.measureText(I[F]),U=E*r*F;h=Math.min(h,-k.actualBoundingBoxLeft),c=Math.max(c,k.actualBoundingBoxRight),l=Math.min(l,U-k.actualBoundingBoxAscent),u=Math.max(u,U+k.actualBoundingBoxDescent)}const d=Math.floor(h),w=Math.floor(l),y=Math.ceil(c)-d,p=Math.ceil(u)-w;B.width=y,B.height=p,o.font=`${e}px ${A}`,o.textAlign=a,o.textBaseline="alphabetic",o.fillStyle="#FFFFFF";for(let F=0;F<I.length;++F){const k=E*r*F-w;o.fillText(I[F],-d,k)}const m=o.getImageData(0,0,y,p),N=new Uint8Array(m.data.buffer),f=new YA,D=new Q.Vector3,G=new Q.Vector3().setScalar(n*g),x=new Q.Quaternion(0,0,0,1);i=i??new Q.Color(1,1,1);let M=0;for(let F=0;F<p;++F)for(let k=0;k<y;++k){const U=N[M+3];if(U>0){const L=U/255;D.set(k-.5*(y-1),.5*(p-1)-F,0),D.multiplyScalar(g),f.pushSplat(D,G,x,L,i)}M+=4}const b=new KA({packedSplats:f});return b.recolor=s,b}function FC({url:t,dotRadius:A,subXY:e,forEachSplat:s}){return A=A??.8,e=Math.max(1,Math.floor(e??1)),new KA({constructSplats:async i=>new Promise((n,a)=>{const r=new Image;r.crossOrigin="anonymous",r.onerror=a,r.onload=()=>{const{width:g,height:I}=r,B=document.createElement("canvas");B.width=g,B.height=I;const o=B.getContext("2d");if(!o){a(new Error("Failed to create canvas context"));return}o.imageSmoothingEnabled=!0,o.imageSmoothingQuality="high";const C=Math.round(g/e),E=Math.round(I/e);o.drawImage(r,0,0,C,E);try{const h=o.getImageData(0,0,C,E),c=new Uint8Array(h.data.buffer),l=new Q.Vector3,u=new Q.Vector3().setScalar(A),d=new Q.Quaternion(0,0,0,1),w=new Q.Color;let y=0;for(let p=0;p<E;++p)for(let m=0;m<C;++m){const N=y*4,f=c[N+3];if(f>0){let D=f/255;w.set(c[N+0]/255,c[N+1]/255,c[N+2]/255),l.set(m-.5*(C-1),.5*(E-1)-p,0),u.setScalar(A),d.set(0,0,0,1);let G=!0;if(s){const x=s(C,E,y,l,u,d,D,w);D=x??D,G=x!==null}G&&i.pushSplat(l,u,d,D,w)}y+=1}n()}catch(h){a(h)}},r.src=t})})}function kC({box:t,cells:A,dotScale:e,color:s,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 n=A.x*A.y*A.z,a=K("int",A.x),r=K("int",A.y);K("int",A.z);const g=TA(0),I=new $t({numSplats:n,generator:kA({index:"int"},{gsplat:X},({index:o})=>{if(!o)throw new Error("index is undefined");const C=Ue(o,a),E=ae(o,a),h=Ue(E,r),c=ae(E,r),l=HA({vectorType:"ivec3",x:C,y:h,z:c}),u=qn(g),d=HA({vectorType:"ivec2",x:o,y:u}),w=Za(d),y=K("vec3",t.min),p=K("vec3",t.max),m=Mt(p,y),N=ae(fA(Ct(l),w),K("vec3",A));let f,D,G;s?(f=K("float",s.r),D=K("float",s.g),G=K("float",s.b)):{r:f,g:D,b:G}=ft(N).outputs;const x=HA({vectorType:"vec4",r:f,g:D,b:G,a:K("float",i)}),M=fA(y,CA(m,N)),b=Ct(K("float",e)),F=K("vec4",new Q.Quaternion(0,0,0,1));let k=it({flags:oe("uint","GSPLAT_FLAG_ACTIVE"),index:o,center:M,scales:b,quaternion:F,rgba:x});return k=B.applyGsplat(k),{gsplat:k}},{globals:()=>[FA]}),update:({time:o})=>{g.value=o,B.update(I),I.updateVersion()}}),B=new It;return I}const RC={box:new Q.Box3(new Q.Vector3(-1,-1,-1),new Q.Vector3(1,1,1)),density:100,fallDirection:new Q.Vector3(-1,-3,1).normalize(),fallVelocity:.02,wanderScale:.04,wanderVariance:2,color1:new Q.Color(1,1,1),color2:new Q.Color(.5,.5,1),minScale:.001,maxScale:.005,anisoScale:new Q.Vector3(1,1,1)},GC={box:new Q.Box3(new Q.Vector3(-2,-1,-2),new Q.Vector3(2,5,2)),density:10,fallDirection:new Q.Vector3(0,-1,0),fallVelocity:2,wanderScale:.1,wanderVariance:1,color1:new Q.Color(1,1,1),color2:new Q.Color(.25,.25,.5),minScale:.005,maxScale:.01,anisoScale:new Q.Vector3(.1,1,.1)};function UC({box:t,minY:A,numSplats:e,density:s,anisoScale:i,minScale:n,maxScale:a,fallDirection:r,fallVelocity:g,wanderScale:I,wanderVariance:B,color1:o,color2:C,opacity:E,onFrame:h}){t=t??new Q.Box3(new Q.Vector3(-1,-1,-1),new Q.Vector3(1,1,1));const c=(t.max.x-t.min.x)*(t.max.y-t.min.y)*(t.max.z-t.min.z);s=s??100,e=e??Math.max(1,Math.min(1e6,Math.round(c*s)));const l=TA(n??.001),u=TA(a??.005),d=$A(((i==null?void 0:i.clone())??new Q.Vector3(1,1,1)).normalize()),w=$A((r??new Q.Vector3(0,-1,0)).normalize()),y=TA(g??.02),p=TA(I??.01),m=TA(B??2),N=$A(o??new Q.Color(1,1,1)),f=$A(C??new Q.Color(.5,.5,1)),D=TA(E??1),G=TA(0),x=$A(new Q.Vector3(0,0,0)),M=$A(t.min),b=$A(t.max),F=TA(A??Number.NEGATIVE_INFINITY),k=Mt(b,M),U=new $t({numSplats:e,generator:kA({index:"int"},{gsplat:X},({index:AA})=>{if(!AA)throw new Error("index not defined");const z=be(AA),sA=ft(z).outputs.w;let tA=Ct(z),O=re(CA(sA,K("float",100)));O=ve(CA(oe("float","PI"),O)),O=fA(l,CA(O,Mt(u,l)));const T=CA(O,d),W=re(CA(sA,K("float",10))),Z=re(sA),P=_i(N,f,Z),v=CA(P,W),pA=be(HA({vectorType:"ivec2",x:AA,y:K("int",6837)}));let IA=Ct(pA),yA=CA(ft(pA).outputs.w,m);yA=fA(G,yA),tA=fA(tA,x);const DA=qi(tA,K("vec3",new Q.Vector3(1,1,1)));tA=fA(M,CA(k,DA));const MA=K("vec4",new Q.Quaternion(0,0,0,1));IA=ve(fA(Ct(yA),IA)),IA=CA(IA,p);let cA=fA(tA,IA),vA=ft(cA).outputs.y;vA=zi(F,vA),cA=HA({vector:cA,y:vA});let xA=it({flags:oe("uint","GSPLAT_FLAG_ACTIVE"),index:AA,center:cA,scales:T,quaternion:MA,rgb:v,opacity:D});return xA=L.applyGsplat(xA),{gsplat:xA}},{globals:()=>[FA]}),update:({object:AA,time:z,deltaTime:sA})=>{G.value=z,L.update(U);const tA=w.value.clone().multiplyScalar(y.value*sA);x.value.add(tA),AA.visible=D.value>0,h==null||h({object:AA,time:z,deltaTime:sA}),U.updateVersion()}}),L=new It;return{snow:U,min:M,max:b,minY:F,color1:N,color2:f,opacity:D,fallVelocity:y,wanderVariance:m,wanderScale:p,fallDirection:w,minScale:l,maxScale:u,anisoScale:d}}const bC=Object.freeze(Object.defineProperty({__proto__:null,DEFAULT_RAIN:GC,DEFAULT_SNOW:RC,snowBox:UC,staticBox:kC},Symbol.toStringTag,{value:"Module"}));function Ag(t){return kA({gsplat:X},{gsplat:X},({gsplat:A})=>{if(!A)throw new Error("No gsplat input");let e=Re(A);const s=t.applyGsplat(A),i=Bt(s).outputs.center,n=Re(s),a=ya(i,n),r=fn(a,K("float",0));e=We(r,Oe(e),e);const g=fA(CA(e,K("float",.5)),K("float",.5));return A=it({gsplat:A,rgb:g}),{gsplat:A}})}function vC(t){t.enableWorldToView=!0,t.worldModifier=Ag(t.context.worldToView),t.updateGenerator()}function tg(t,A,e,s){return kA({gsplat:X},{gsplat:X},({gsplat:i})=>{if(!i)throw new Error("No gsplat input");let{center:n}=Bt(i).outputs;n=t.apply(n);const{z:a}=ft(n).outputs;let r=Oa(Oe(a),A,e);return r=We(s,Mt(K("float",1),r),r),i=it({gsplat:i,r,g:r,b:r}),{gsplat:i}})}function LC(t,A,e,s){t.enableWorldToView=!0;const i=K("float",A),n=K("float",e),a=K("bool",s??!1);return t.worldModifier=tg(t.context.worldToView,i,n,a),t.updateGenerator(),{minDepth:i,maxDepth:n,reverse:a}}const YC=Object.freeze(Object.defineProperty({__proto__:null,makeDepthColorModifier:tg,makeNormalColorModifier:Ag,setDepthColor:LC,setWorldNormalColor:vC},Symbol.toStringTag,{value:"Module"})),Yt=class Yt{static createButton(A,e={}){const s=navigator.xr;if(!s)return null;const i=s,n=document.createElement("button");A.xr.enabled=!0,A.xr.setReferenceSpaceType("local");function a(){let o=null;async function C(c){console.log("onSessionStarted"),c.addEventListener("end",E),await A.xr.setSession(c),n.textContent="EXIT VR",o=c}function E(){console.log("onSessionEnded"),o==null||o.removeEventListener("end",E),n.textContent="ENTER VR",o=null}n.style.display="",n.style.cursor="pointer",n.style.left="calc(50% - 100px)",n.style.width="200px",n.style.height="100px",n.textContent="ENTER VR";const h={...e,optionalFeatures:[...e.optionalFeatures||[]]};n.onmouseenter=()=>{n.style.opacity="1.0"},n.onmouseleave=()=>{n.style.opacity="0.5"},n.onclick=()=>{o===null?(console.log("requesting session"),i.requestSession("immersive-vr",h).then(C)):(console.log("ending session"),o.end())}}function r(){n.style.display="none",n.style.cursor="auto",n.style.left="calc(50% - 75px)",n.style.width="150px",n.onmouseenter=null,n.onmouseleave=null,n.onclick=null}function g(){r(),n.textContent="VR NOT SUPPORTED"}function I(o){r(),console.warn("Exception when trying to call xr.isSessionSupported",o),n.textContent="VR NOT ALLOWED"}function B(o){o.style.position="absolute",o.style.bottom="20px",o.style.padding="12px 6px",o.style.border="1px solid #fff",o.style.borderRadius="4px",o.style.background="rgba(0,0,0,0.1)",o.style.color="#fff",o.style.font="normal 13px sans-serif",o.style.textAlign="center",o.style.opacity="0.5",o.style.outline="none",o.style.zIndex="999"}return n.id="VRButton",n.style.display="none",B(n),i.isSessionSupported("immersive-vr").then(o=>{o?a():g(),o&&Yt.xrSessionIsGranted&&n.click()}).catch(I),n}static registerSessionGrantedListener(){const A=navigator.xr;if(!A)return null;const e=A;/WebXRViewer\//i.test(navigator.userAgent)||e.addEventListener("sessiongranted",()=>{Yt.xrSessionIsGranted=!0})}};Yt.xrSessionIsGranted=!1;let ce=Yt;ce.registerSessionGrantedListener();const TC=.5,JC=.5,HC=0;var pe=(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))(pe||{});const $e=Object.keys(pe),KC=$e.length,qC={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},Ut={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},eg=[["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"]],sg=[[8,10,8,6],[8,19,14,8,6],[8,19,14,8,6],[8,19,14,8,6],[8,19,14,8,6]],zC=["t3","i4","m4","r4","p4"],_C=["i4","m4","r4","p4"];var As=(t=>(t.left="left",t.right="right",t))(As||{});const he=Object.keys(As);class VC{constructor(){this.hands={},this.last={},this.values={},this.tests={},this.lastTests={},this.updated=!1}update({xr:A,xrFrame:e}){const s=A.getSession();if(!s)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 n of s.inputSources){if(!n.hand)continue;const a=n.handedness;this.hands[a]={};for(const r of $e){const g=n.hand.get(pe[r]);if(g){const I=e.getJointPose(g,i);if(I){const{position:B,orientation:o}=I.transform;this.hands[a][r]={position:new nA.Vector3(B.x,B.y,B.z),quaternion:new nA.Quaternion(o.x,o.y,o.z,o.w),radius:I.radius||.001}}}}}for(const n of he)for(const{key:a,value:r}of[{key:`${n}AllTips`,value:this.allTipsTouching(n)},{key:`${n}IndexThumb`,value:this.touching(n,"i4",n,"t3")},{key:`${n}MiddleThumb`,value:this.touching(n,"m4",n,"t3")},{key:`${n}RingThumb`,value:this.touching(n,"r4",n,"t3")},{key:`${n}PinkyThumb`,value:this.touching(n,"p4",n,"t3")},{key:`${n}TriTips`,value:this.triTipsTouching(n)}])this.values[a]=r,this.tests[a]=r===1?!0:r===0?!1:this.lastTests[a]??!1}}makeGhostMesh(){const A=new nA.Vector3,e=new nA.Vector3(.01,.01,.01),s=new nA.Quaternion(0,0,0,1),i=new nA.Color(1,1,1),n=Math.PI*3;new nA.Color(1,1,1);let a=1;const r=new KA({onFrame:()=>{let g=0;for(const I of he){const B=this.hands[I];for(const[o,C]of eg.entries())for(let E=1;E<C.length;++E){const h=sg[o][E-1]*2,c=E+1===C.length,l=B==null?void 0:B[C[E-1]],u=B==null?void 0:B[C[E]];for(let d=0;d<h;++d){const w=(d+.5)/h;if(a=0,l&&u){A.copy(l.position).lerp(u.position,w),s.copy(l.quaternion).slerp(u.quaternion,w);const y=Ut[C[E-1]],p=Ut[C[E]];let m=(1-w)*y+w*p;c&&w>.8&&(m*=Math.sqrt(1-((w-.8)/.2)**2)),e.set(.65*m,.5*m,.003),i.set(.55+.45*Math.sin(A.x*n),.55+.45*Math.sin(A.y*n),.55+.45*Math.sin(A.z*n)),I==="right"&&i.set(1-i.r,1-i.g,1-i.b),a=.75}r.packedSplats.setSplat(g,A,e,s,a,i),g+=1}}}r.packedSplats.numSplats=g,r.packedSplats.needsUpdate=!0,r.numSplats=g,r.updateVersion()}});return r}distance(A,e,s,i,n=!1){const a=n?this.last[A]:this.hands[A],r=n?this.last[s]:this.hands[s],g=a==null?void 0:a[e],I=r==null?void 0:r[i];return!g||!I?Number.POSITIVE_INFINITY:g.position.distanceTo(I.position)}separation(A,e,s,i,n=!1){const a=this.distance(A,e,s,i,n);return a===Number.POSITIVE_INFINITY?Number.POSITIVE_INFINITY:a-Ut[e]-Ut[i]}touching(A,e,s,i,n=!1){const a=this.separation(A,e,s,i,n);return a===Number.POSITIVE_INFINITY?Number.POSITIVE_INFINITY:1-Math.max(0,Math.min(1,a/.01-HC))}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 ZC{constructor({xrHands:A,control:e,moveInertia:s,rotateInertia:i}){this.lastGrip={},this.lastPivot=new nA.Vector3,this.rotateVelocity=0,this.velocity=new nA.Vector3,this.xrHands=A,this.control=e,this.moveInertia=s??TC,this.rotateInertia=i??JC}update(A){var n,a,r,g,I;const e={};for(const B of he){const o=this.xrHands.hands[B];o&&this.xrHands.tests[`${B}MiddleThumb`]&&(e[B]=new nA.Vector3().add(((n=o.t3)==null?void 0:n.position)??new nA.Vector3).add(((a=o.i4)==null?void 0:a.position)??new nA.Vector3).add(((r=o.m4)==null?void 0:r.position)??new nA.Vector3).add(((g=o.r4)==null?void 0:g.position)??new nA.Vector3).add(((I=o.p4)==null?void 0:I.position)??new nA.Vector3).multiplyScalar(1/5))}if(e.left&&e.right&&this.lastGrip.left&&this.lastGrip.right){const B=e.left.clone().add(e.right).multiplyScalar(.5),o=this.lastGrip.left.clone().add(this.lastGrip.right).multiplyScalar(.5);this.lastPivot=B;const C=B.clone().applyMatrix4(this.control.matrix);C.sub(o.clone().applyMatrix4(this.control.matrix)),C.multiplyScalar(1/A),this.velocity.lerp(C,1-Math.exp(-20*A));const E=Math.atan2(e.left.z-B.z,e.left.x-B.x),h=Math.atan2(this.lastGrip.left.z-o.z,this.lastGrip.left.x-o.x);let c=E-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 B=e.left.clone().applyMatrix4(this.control.matrix);B.sub(this.lastGrip.left.clone().applyMatrix4(this.control.matrix)),B.multiplyScalar(1/A),this.velocity.lerp(B,1-Math.exp(-20*A))}else if(e.right&&this.lastGrip.right){const B=e.right.clone().applyMatrix4(this.control.matrix);B.sub(this.lastGrip.right.clone().applyMatrix4(this.control.matrix)),B.multiplyScalar(1/A),this.velocity.lerp(B,1-Math.exp(-20*A))}else this.velocity.multiplyScalar(Math.exp(-A/this.moveInertia));const s=this.lastPivot.clone().negate(),i=new nA.Matrix4().makeTranslation(s).premultiply(new nA.Matrix4().makeRotationY(this.rotateVelocity*A)).premultiply(new nA.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 OC=1,WC=2,PC=.002,jC=.006,XC=.0015,$C=.15,AE=.15,tE=.1,eE=2,sE=1,iE=200,nE=400,aE=50,rE={KeyW:new Q.Vector3(0,0,-1),KeyS:new Q.Vector3(0,0,1),KeyA:new Q.Vector3(-1,0,0),KeyD:new Q.Vector3(1,0,0),KeyR:new Q.Vector3(0,1,0),KeyF:new Q.Vector3(0,-1,0)},gE={ArrowUp:new Q.Vector3(0,0,-1),ArrowDown:new Q.Vector3(0,0,1),ArrowLeft:new Q.Vector3(-1,0,0),ArrowRight:new Q.Vector3(1,0,0),PageUp:new Q.Vector3(0,1,0),PageDown:new Q.Vector3(0,-1,0)},oE={KeyQ:new Q.Vector3(0,0,1),KeyE:new Q.Vector3(0,0,-1)},IE={Home:new Q.Vector3(0,-1,0),End:new Q.Vector3(0,1,0),Insert:new Q.Vector3(-1,0,0),Delete:new Q.Vector3(1,0,0)};class BE{constructor({canvas:A}){this.lastTime=0,this.fpsMovement=new ig({}),this.pointerControls=new ng({canvas:A})}update(A){const e=performance.now(),s=(e-(this.lastTime||e))/1e3;this.lastTime=e,this.fpsMovement.update(s,A),this.pointerControls.update(s,A)}}class ig{constructor({moveSpeed:A,rollSpeed:e,stickThreshold:s,rotateSpeed:i,keycodeMoveMapping:n,keycodeRotateMapping:a,gamepadMapping:r,capsMultiplier:g,shiftMultiplier:I,ctrlMultiplier:B,xr:o}={}){this.enable=!0,this.moveSpeed=A??OC,this.rollSpeed=e??WC,this.stickThreshold=s??tE,this.rotateSpeed=i??eE,this.keycodeMoveMapping=n??{...rE,...gE},this.keycodeRotateMapping=a??{...oE,...IE},this.gamepadMapping=r??{4:"rollLeft",5:"rollRight",6:"ctrl",7:"shift"},this.capsMultiplier=g??10,this.shiftMultiplier=I??5,this.ctrlMultiplier=B??1/5,this.xr=o,this.keydown={},this.keycode={},document.addEventListener("keydown",C=>{this.keydown[C.key]=!0,this.keycode[C.code]=!0}),document.addEventListener("keyup",C=>{this.keydown[C.key]=!1,this.keycode[C.code]=!1}),window.addEventListener("blur",()=>{this.keydown={},this.keycode={}})}update(A,e){var B,o;if(!this.enable)return;const s=[new Q.Vector2,new Q.Vector2],i=navigator.getGamepads()[0];i&&(s[0].set(i.axes[0],i.axes[1]),s[1].set(i.axes[2],i.axes[3]));const n=(i==null?void 0:i.buttons.map(C=>C.pressed))||[],a=Array.from(((o=(B=this.xr)==null?void 0:B.getSession())==null?void 0:o.inputSources)??[]);for(const C of a){const E=C.gamepad;if(E)switch(C.handedness){case"none":{s[0].x+=E.axes[0],s[0].y+=E.axes[1],s[1].x+=E.axes[2],s[1].y+=E.axes[3];break}case"left":{s[0].x+=E.axes[2],s[0].y+=E.axes[3];break}case"right":{s[1].x+=E.axes[2],s[1].y+=E.axes[3];break}}}for(const C of s)C.x=Math.abs(C.x)>=this.stickThreshold?C.x:0,C.y=Math.abs(C.y)>=this.stickThreshold?C.y:0;const r=new Q.Vector3(s[1].x,s[1].y,0).multiplyScalar(this.rotateSpeed);for(const[C,E]of Object.entries(this.keycodeRotateMapping))this.keycode[C]&&r.add(E);for(const C in this.gamepadMapping)if(n[Number.parseInt(C)])switch(this.gamepadMapping[C]){case"rollLeft":r.z+=1;break;case"rollRight":r.z-=1;break}if(r.multiply(new Q.Vector3(this.rotateSpeed,this.rotateSpeed,this.rollSpeed)),r.manhattanLength()>0){r.multiplyScalar(A);const C=new Q.Euler().setFromQuaternion(e.quaternion,"YXZ");C.y-=r.x,C.x=Math.max(-Math.PI/2,Math.min(Math.PI/2,C.x-r.y)),C.z=Math.max(-Math.PI,Math.min(Math.PI,C.z+r.z)),e.quaternion.setFromEuler(C)}const g=new Q.Vector3(s[0].x,0,s[0].y);for(const[C,E]of Object.entries(this.keycodeMoveMapping))this.keycode[C]&&g.add(E);let I=1;this.keydown.CapsLock&&(I*=this.capsMultiplier),(this.keycode.ShiftLeft||this.keycode.ShiftRight)&&(I*=this.shiftMultiplier),(this.keycode.ControlLeft||this.keycode.ControlRight)&&(I*=this.ctrlMultiplier);for(const C in this.gamepadMapping)if(n[Number.parseInt(C)])switch(this.gamepadMapping[C]){case"shift":I*=this.shiftMultiplier;break;case"ctrl":I*=this.ctrlMultiplier;break}g.applyQuaternion(e.quaternion),e.position.add(g.multiplyScalar(this.moveSpeed*I*A))}}class ng{constructor({canvas:A,rotateSpeed:e,slideSpeed:s,scrollSpeed:i,swapRotateSlide:n,reverseRotate:a,reverseSlide:r,reverseSwipe:g,reverseScroll:I,moveInertia:B,rotateInertia:o,pointerRollScale:C,doublePress:E}){this.enable=!0,this.canvas=A,this.rotateSpeed=e??PC,this.slideSpeed=s??jC,this.scrollSpeed=i??XC,this.swapRotateSlide=n??!1,this.reverseRotate=a??!1,this.reverseSlide=r??!1,this.reverseSwipe=g??!1,this.reverseScroll=I??!1,this.moveInertia=B??AE,this.rotateInertia=o??$C,this.pointerRollScale=C??sE,this.doublePress=E??(()=>{}),this.doublePressLimitMs=nE,this.doublePressDistance=aE,this.lastUp=null,this.rotating=null,this.sliding=null,this.dualPress=!1,this.scroll=new Q.Vector3,this.rotateVelocity=new Q.Vector3,this.moveVelocity=new Q.Vector3,A.addEventListener("pointerdown",c=>{const l=this.getPointerPosition(c),u=l.clone(),d=l.clone(),w=!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:p}=c;if(w)this.rotating={initial:u,last:d,position:l,pointerId:y,timeStamp:p},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:d,position:l,pointerId:y,button:m,timeStamp:p},A.setPointerCapture(c.pointerId),this.dualPress=this.rotating!=null&&p-this.rotating.timeStamp<iE}});const h=c=>{var d,w;((d=this.rotating)==null?void 0:d.pointerId)===c.pointerId?(this.rotating=null,A.releasePointerCapture(c.pointerId),this.dualPress&&this.sliding&&(A.releasePointerCapture(this.sliding.pointerId),this.sliding=null)):((w=this.sliding)==null?void 0:w.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 p=c.timeStamp-u.time;p<this.doublePressLimitMs&&(this.lastUp=null,this.doublePress({position:l,intervalMs:p}))}};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 Q.Vector3(c.deltaX,c.deltaY,c.deltaZ)),c.preventDefault()})}getPointerPosition(A){const e=this.canvas.getBoundingClientRect();return new Q.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)],n=i[0].dot(i[1]);if(n>=.2){const a=i[0].clone().add(i[1]),r=new Q.Vector3(a.x,-a.y,0);r.multiplyScalar(this.slideSpeed*(this.reverseSwipe?1:-1)),r.applyQuaternion(e.quaternion),e.position.add(r),this.moveVelocity=r.clone().multiplyScalar(1/A)}else if(n<=-.2){const a=this.sliding.last.clone().sub(this.rotating.last),r=a.length();a.multiplyScalar(1/r).normalize();const g=new Q.Vector2(-a.y,a.x),I=[i[0].dot(a),i[1].dot(a)],B=[i[0].dot(g),i[1].dot(g)],o=this.rotating.last.clone().add(this.sliding.last).multiplyScalar(.5);let C=new Q.Vector3;if(e instanceof Q.Camera){const d=new Q.Vector2(o.x/this.canvas.clientWidth*2-1,-(o.y/this.canvas.clientHeight)*2+1),w=new Q.Raycaster;w.setFromCamera(d,e),C=w.ray.direction}const E=I[1]-I[0],h=C.multiplyScalar(E*this.slideSpeed);e.position.add(h),this.moveVelocity=h.clone().multiplyScalar(1/A);const c=[Math.atan(B[0]/(-.5*r)),Math.atan(B[1]/(.5*r))],l=.5*(c[0]+c[1])*this.pointerRollScale,u=new Q.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 Q.Vector3;if(this.rotating&&!this.dualPress){const a=this.rotating.position.clone().sub(this.rotating.last);this.rotating.last.copy(this.rotating.position),i.set(a.x,a.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 n=new Q.Euler().setFromQuaternion(e.quaternion,"YXZ");if(n.y-=i.x,n.x=Math.max(-Math.PI/2,Math.min(Math.PI/2,n.x-i.y)),n.z*=Math.exp(-0*A),e.quaternion.setFromEuler(n),this.sliding&&!this.dualPress){const a=this.sliding.position.clone().sub(this.sliding.last);this.sliding.last.copy(this.sliding.position);const r=this.sliding.button!==2?new Q.Vector3(a.x,0,a.y):new Q.Vector3(a.x,-a.y,0);r.multiplyScalar(this.slideSpeed*(this.reverseSlide?-1:1)),r.applyQuaternion(e.quaternion),e.position.add(r),this.moveVelocity=r.clone().multiplyScalar(1/A)}else this.moveVelocity.multiplyScalar(Math.exp(-A/this.moveInertia)),e.position.addScaledVector(this.moveVelocity,A)}const s=this.scroll.multiplyScalar(this.scrollSpeed);s.set(s.x,s.z,s.y),this.reverseScroll&&s.multiplyScalar(-1),s.applyQuaternion(e.quaternion),e.position.add(s),this.scroll.set(0,0,0)}}exports.FINGER_TIPS=_C;exports.FpsMovement=ig;exports.HANDS=he;exports.Hand=As;exports.HandMovement=ZC;exports.JOINT_IDS=$e;exports.JOINT_INDEX=qC;exports.JOINT_RADIUS=Ut;exports.JOINT_SEGMENTS=eg;exports.JOINT_SEGMENT_STEPS=sg;exports.JOINT_TIPS=zC;exports.JointEnum=pe;exports.NUM_JOINTS=KC;exports.PackedSplats=YA;exports.PlyReader=qt;exports.PointerControls=ng;exports.Readback=Ht;exports.Sint8ToFloat=fi;exports.SparkControls=BE;exports.SparkRenderer=_t;exports.SparkViewpoint=zt;exports.SplatAccumulator=ge;exports.SplatEdit=Kt;exports.SplatEditRgbaBlendMode=Gr;exports.SplatEditSdf=Ur;exports.SplatEditSdfType=Rr;exports.SplatEdits=br;exports.SplatFileType=pt;exports.SplatGenerator=$t;exports.SplatLoader=zr;exports.SplatMesh=KA;exports.SplatModifier=Tr;exports.SplatSkinning=DC;exports.SplatTransformer=It;exports.SpzReader=Wr;exports.SpzWriter=VA;exports.Uint8ToFloat=Di;exports.VRButton=ce;exports.XrHands=VC;exports.constructAxes=xC;exports.constructGrid=MC;exports.constructSpherePoints=SC;exports.dyno=YQ;exports.flipPixels=Fi;exports.floatToSint8=Lt;exports.floatToUint8=NA;exports.fromHalf=wA;exports.generators=bC;exports.getSplatFileType=Pe;exports.imageSplats=FC;exports.isAndroid=Si;exports.isMobile=xi;exports.isOculus=Ni;exports.isPcSogs=sC;exports.modifiers=YC;exports.pixelsToPngUrl=ki;exports.setPackedSplat=Be;exports.textSplats=NC;exports.toHalf=nt;exports.transcodeSpz=yC;exports.unpackSplat=Qe;exports.unpackSplats=je;exports.utils=oI;
//# sourceMappingURL=spark.cjs.min.js.map