@epigraph/configurator 1.11.0 → 1.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +7 -7
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -4106,8 +4106,8 @@ canvas {
|
|
|
4106
4106
|
<div class="screen-reader-only" role="region" aria-label="Live announcements">
|
|
4107
4107
|
<span id="status" role="status"></span>
|
|
4108
4108
|
</div>`,Db$1=o=>{Vy(Lb$1,o)},Hh$1=new WeakMap;let Pb$1=class extends Wt{constructor(s){super(s),this.decoderPath="",this.decoderConfig={},this.decoderBinary=null,this.decoderPending=null,this.workerLimit=4,this.workerPool=[],this.workerNextTaskID=1,this.workerSourceURL="",this.defaultAttributeIDs={position:"POSITION",normal:"NORMAL",color:"COLOR",uv:"TEX_COORD"},this.defaultAttributeTypes={position:"Float32Array",normal:"Float32Array",color:"Float32Array",uv:"Float32Array"}}setDecoderPath(s){return this.decoderPath=s,this}setDecoderConfig(s){return this.decoderConfig=s,this}setWorkerLimit(s){return this.workerLimit=s,this}load(s,a,b,_e){const bt=new tn(this.manager);bt.setPath(this.path),bt.setResponseType("arraybuffer"),bt.setRequestHeader(this.requestHeader),bt.setWithCredentials(this.withCredentials),bt.load(s,rn=>{this.parse(rn,a,_e)},b,_e)}parse(s,a,b){this.decodeDracoFile(s,a,null,null,we$2).catch(b)}decodeDracoFile(s,a,b,_e,bt=Vt){const rn={attributeIDs:b||this.defaultAttributeIDs,attributeTypes:_e||this.defaultAttributeTypes,useUniqueIDs:!!b,vertexColorSpace:bt};return this.decodeGeometry(s,rn).then(a)}decodeGeometry(s,a){const b=JSON.stringify(a);if(Hh$1.has(s)){const yn=Hh$1.get(s);if(yn.key===b)return yn.promise;if(s.byteLength===0)throw new Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.")}let _e;const bt=this.workerNextTaskID++,rn=s.byteLength,sn=this._getWorker(bt,rn).then(yn=>(_e=yn,new Promise((Pn,zn)=>{_e._callbacks[bt]={resolve:Pn,reject:zn},_e.postMessage({type:"decode",id:bt,taskConfig:a,buffer:s},[s])}))).then(yn=>this._createGeometry(yn.geometry));return sn.catch(()=>!0).then(()=>{_e&&bt&&this._releaseTask(_e,bt)}),Hh$1.set(s,{key:b,promise:sn}),sn}_createGeometry(s){const a=new Ve$1;s.index&&a.setIndex(new tt$1(s.index.array,1));for(let b=0;b<s.attributes.length;b++){const _e=s.attributes[b],bt=_e.name,rn=_e.array,sn=_e.itemSize,yn=new tt$1(rn,sn);bt==="color"&&(this._assignVertexColorSpace(yn,_e.vertexColorSpace),yn.normalized=!(rn instanceof Float32Array)),a.setAttribute(bt,yn)}return a}_assignVertexColorSpace(s,a){if(a!==we$2)return;const b=new he$1;for(let _e=0,bt=s.count;_e<bt;_e++)b.fromBufferAttribute(s,_e).convertSRGBToLinear(),s.setXYZ(_e,b.r,b.g,b.b)}_loadLibrary(s,a){const b=new tn(this.manager);return b.setPath(this.decoderPath),b.setResponseType(a),b.setWithCredentials(this.withCredentials),new Promise((_e,bt)=>{b.load(s,_e,void 0,bt)})}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;const s=typeof WebAssembly!="object"||this.decoderConfig.type==="js",a=[];return s?a.push(this._loadLibrary("draco_decoder.js","text")):(a.push(this._loadLibrary("draco_wasm_wrapper.js","text")),a.push(this._loadLibrary("draco_decoder.wasm","arraybuffer"))),this.decoderPending=Promise.all(a).then(b=>{const _e=b[0];s||(this.decoderConfig.wasmBinary=b[1]);const bt=Ub$1.toString(),rn=["/* draco decoder */",_e,"","/* worker */",bt.substring(bt.indexOf("{")+1,bt.lastIndexOf("}"))].join(`
|
|
4109
|
-
`);this.workerSourceURL=URL.createObjectURL(new Blob([rn]))}),this.decoderPending}_getWorker(s,a){return this._initDecoder().then(()=>{if(this.workerPool.length<this.workerLimit){const _e=new Worker(this.workerSourceURL);_e._callbacks={},_e._taskCosts={},_e._taskLoad=0,_e.postMessage({type:"init",decoderConfig:this.decoderConfig}),_e.onmessage=function(bt){const rn=bt.data;switch(rn.type){case"decode":_e._callbacks[rn.id].resolve(rn);break;case"error":_e._callbacks[rn.id].reject(rn);break;default:console.error('THREE.DRACOLoader: Unexpected message, "'+rn.type+'"')}},this.workerPool.push(_e)}else this.workerPool.sort(function(_e,bt){return _e._taskLoad>bt._taskLoad?-1:1});const b=this.workerPool[this.workerPool.length-1];return b._taskCosts[s]=a,b._taskLoad+=a,b})}_releaseTask(s,a){s._taskLoad-=s._taskCosts[a],delete s._callbacks[a],delete s._taskCosts[a]}debug(){console.log("Task load: ",this.workerPool.map(s=>s._taskLoad))}dispose(){for(let s=0;s<this.workerPool.length;++s)this.workerPool[s].terminate();return this.workerPool.length=0,this.workerSourceURL!==""&&URL.revokeObjectURL(this.workerSourceURL),this}};function Ub$1(){let o,s;onmessage=function(rn){const sn=rn.data;switch(sn.type){case"init":o=sn.decoderConfig,s=new Promise(function(zn){o.onModuleLoaded=function(lr){zn({draco:lr})},DracoDecoderModule(o)});break;case"decode":const yn=sn.buffer,Pn=sn.taskConfig;s.then(zn=>{const lr=zn.draco,ar=new lr.Decoder;try{const cr=a(lr,ar,new Int8Array(yn),Pn),hr=cr.attributes.map(es=>es.array.buffer);cr.index&&hr.push(cr.index.array.buffer),self.postMessage({type:"decode",id:sn.id,geometry:cr},hr)}catch(cr){console.error(cr),self.postMessage({type:"error",id:sn.id,error:cr.message})}finally{lr.destroy(ar)}});break}};function a(rn,sn,yn,Pn){const zn=Pn.attributeIDs,lr=Pn.attributeTypes;let ar,cr;const hr=sn.GetEncodedGeometryType(yn);if(hr===rn.TRIANGULAR_MESH)ar=new rn.Mesh,cr=sn.DecodeArrayToMesh(yn,yn.byteLength,ar);else if(hr===rn.POINT_CLOUD)ar=new rn.PointCloud,cr=sn.DecodeArrayToPointCloud(yn,yn.byteLength,ar);else throw new Error("THREE.DRACOLoader: Unexpected geometry type.");if(!cr.ok()||ar.ptr===0)throw new Error("THREE.DRACOLoader: Decoding failed: "+cr.error_msg());const es={index:null,attributes:[]};for(const Ur in zn){const Dr=self[lr[Ur]];let zr,rs;if(Pn.useUniqueIDs)rs=zn[Ur],zr=sn.GetAttributeByUniqueId(ar,rs);else{if(rs=sn.GetAttributeId(ar,rn[zn[Ur]]),rs===-1)continue;zr=sn.GetAttribute(ar,rs)}const as=_e(rn,sn,ar,Ur,Dr,zr);Ur==="color"&&(as.vertexColorSpace=Pn.vertexColorSpace),es.attributes.push(as)}return hr===rn.TRIANGULAR_MESH&&(es.index=b(rn,sn,ar)),rn.destroy(ar),es}function b(rn,sn,yn){const Pn=yn.num_faces()*3,zn=Pn*4,lr=rn._malloc(zn);sn.GetTrianglesUInt32Array(yn,zn,lr);const ar=new Uint32Array(rn.HEAPF32.buffer,lr,Pn).slice();return rn._free(lr),{array:ar,itemSize:1}}function _e(rn,sn,yn,Pn,zn,lr){const ar=lr.num_components(),cr=yn.num_points()*ar,hr=cr*zn.BYTES_PER_ELEMENT,es=bt(rn,zn),Ur=rn._malloc(hr);sn.GetAttributeDataArrayForAllPoints(yn,lr,es,hr,Ur);const Dr=new zn(rn.HEAPF32.buffer,Ur,cr).slice();return rn._free(Ur),{name:Pn,array:Dr,itemSize:ar}}function bt(rn,sn){switch(sn){case Float32Array:return rn.DT_FLOAT32;case Int8Array:return rn.DT_INT8;case Int16Array:return rn.DT_INT16;case Int32Array:return rn.DT_INT32;case Uint8Array:return rn.DT_UINT8;case Uint16Array:return rn.DT_UINT16;case Uint32Array:return rn.DT_UINT32}}}function hm(o,s){if(s===zE)return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."),o;if(s===pd$1||s===ty){let a=o.getIndex();if(a===null){const rn=[],sn=o.getAttribute("position");if(sn!==void 0){for(let yn=0;yn<sn.count;yn++)rn.push(yn);o.setIndex(rn),a=o.getIndex()}else return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."),o}const b=a.count-2,_e=[];if(s===pd$1)for(let rn=1;rn<=b;rn++)_e.push(a.getX(0)),_e.push(a.getX(rn)),_e.push(a.getX(rn+1));else for(let rn=0;rn<b;rn++)rn%2===0?(_e.push(a.getX(rn)),_e.push(a.getX(rn+1)),_e.push(a.getX(rn+2))):(_e.push(a.getX(rn+2)),_e.push(a.getX(rn+1)),_e.push(a.getX(rn)));_e.length/3!==b&&console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.");const bt=o.clone();return bt.setIndex(_e),bt.clearGroups(),bt}else return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:",s),o}let Nb$1=class extends Wt{constructor(s){super(s),this.dracoLoader=null,this.ktx2Loader=null,this.meshoptDecoder=null,this.pluginCallbacks=[],this.register(function(a){return new Gb$1(a)}),this.register(function(a){return new Yb$1(a)}),this.register(function(a){return new Jb$1(a)}),this.register(function(a){return new Kb$1(a)}),this.register(function(a){return new zb$1(a)}),this.register(function(a){return new Vb$1(a)}),this.register(function(a){return new Wb$1(a)}),this.register(function(a){return new qb$1(a)}),this.register(function(a){return new kb$1(a)}),this.register(function(a){return new $b$1(a)}),this.register(function(a){return new Hb$1(a)}),this.register(function(a){return new Xb$1(a)}),this.register(function(a){return new Ob$1(a)}),this.register(function(a){return new jb$1(a)}),this.register(function(a){return new Zb$1(a)})}load(s,a,b,_e){const bt=this;let rn;this.resourcePath!==""?rn=this.resourcePath:this.path!==""?rn=this.path:rn=Aa$1.extractUrlBase(s),this.manager.itemStart(s);const sn=function(Pn){_e?_e(Pn):console.error(Pn),bt.manager.itemError(s),bt.manager.itemEnd(s)},yn=new tn(this.manager);yn.setPath(this.path),yn.setResponseType("arraybuffer"),yn.setRequestHeader(this.requestHeader),yn.setWithCredentials(this.withCredentials),yn.load(s,function(Pn){try{bt.parse(Pn,rn,function(zn){a(zn),bt.manager.itemEnd(s)},sn)}catch(zn){sn(zn)}},b,sn)}setDRACOLoader(s){return this.dracoLoader=s,this}setDDSLoader(){throw new Error('THREE.GLTFLoader: "MSFT_texture_dds" no longer supported. Please update to "KHR_texture_basisu".')}setKTX2Loader(s){return this.ktx2Loader=s,this}setMeshoptDecoder(s){return this.meshoptDecoder=s,this}register(s){return this.pluginCallbacks.indexOf(s)===-1&&this.pluginCallbacks.push(s),this}unregister(s){return this.pluginCallbacks.indexOf(s)!==-1&&this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(s),1),this}parse(s,a,b,_e){let bt;const rn={},sn={},yn=new TextDecoder;if(typeof s=="string")bt=JSON.parse(s);else if(s instanceof ArrayBuffer)if(yn.decode(new Uint8Array(s,0,4))===Zy){try{rn[et$2.KHR_BINARY_GLTF]=new e1(s)}catch(zn){_e&&_e(zn);return}bt=JSON.parse(rn[et$2.KHR_BINARY_GLTF].content)}else bt=JSON.parse(yn.decode(s));else bt=s;if(bt.asset===void 0||bt.asset.version[0]<2){_e&&_e(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported."));return}const Pn=new f1(bt,{path:a||this.resourcePath||"",crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});Pn.fileLoader.setRequestHeader(this.requestHeader);for(let zn=0;zn<this.pluginCallbacks.length;zn++){const lr=this.pluginCallbacks[zn](Pn);sn[lr.name]=lr,rn[lr.name]=!0}if(bt.extensionsUsed)for(let zn=0;zn<bt.extensionsUsed.length;++zn){const lr=bt.extensionsUsed[zn],ar=bt.extensionsRequired||[];switch(lr){case et$2.KHR_MATERIALS_UNLIT:rn[lr]=new Qb$1;break;case et$2.KHR_DRACO_MESH_COMPRESSION:rn[lr]=new t1(bt,this.dracoLoader);break;case et$2.KHR_TEXTURE_TRANSFORM:rn[lr]=new n1;break;case et$2.KHR_MESH_QUANTIZATION:rn[lr]=new i1;break;default:ar.indexOf(lr)>=0&&sn[lr]===void 0&&console.warn('THREE.GLTFLoader: Unknown extension "'+lr+'".')}}Pn.setExtensions(rn),Pn.setPlugins(sn),Pn.parse(b,_e)}parseAsync(s,a){const b=this;return new Promise(function(_e,bt){b.parse(s,a,_e,bt)})}};function Fb$1(){let o={};return{get:function(s){return o[s]},add:function(s,a){o[s]=a},remove:function(s){delete o[s]},removeAll:function(){o={}}}}const et$2={KHR_BINARY_GLTF:"KHR_binary_glTF",KHR_DRACO_MESH_COMPRESSION:"KHR_draco_mesh_compression",KHR_LIGHTS_PUNCTUAL:"KHR_lights_punctual",KHR_MATERIALS_CLEARCOAT:"KHR_materials_clearcoat",KHR_MATERIALS_IOR:"KHR_materials_ior",KHR_MATERIALS_SHEEN:"KHR_materials_sheen",KHR_MATERIALS_SPECULAR:"KHR_materials_specular",KHR_MATERIALS_TRANSMISSION:"KHR_materials_transmission",KHR_MATERIALS_IRIDESCENCE:"KHR_materials_iridescence",KHR_MATERIALS_ANISOTROPY:"KHR_materials_anisotropy",KHR_MATERIALS_UNLIT:"KHR_materials_unlit",KHR_MATERIALS_VOLUME:"KHR_materials_volume",KHR_TEXTURE_BASISU:"KHR_texture_basisu",KHR_TEXTURE_TRANSFORM:"KHR_texture_transform",KHR_MESH_QUANTIZATION:"KHR_mesh_quantization",KHR_MATERIALS_EMISSIVE_STRENGTH:"KHR_materials_emissive_strength",EXT_TEXTURE_WEBP:"EXT_texture_webp",EXT_TEXTURE_AVIF:"EXT_texture_avif",EXT_MESHOPT_COMPRESSION:"EXT_meshopt_compression",EXT_MESH_GPU_INSTANCING:"EXT_mesh_gpu_instancing"};let Ob$1=class{constructor(s){this.parser=s,this.name=et$2.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){const s=this.parser,a=this.parser.json.nodes||[];for(let b=0,_e=a.length;b<_e;b++){const bt=a[b];bt.extensions&&bt.extensions[this.name]&&bt.extensions[this.name].light!==void 0&&s._addNodeRef(this.cache,bt.extensions[this.name].light)}}_loadLight(s){const a=this.parser,b="light:"+s;let _e=a.cache.get(b);if(_e)return _e;const bt=a.json,rn=((bt.extensions&&bt.extensions[this.name]||{}).lights||[])[s];let sn;const yn=new he$1(16777215);rn.color!==void 0&&yn.fromArray(rn.color);const Pn=rn.range!==void 0?rn.range:0;switch(rn.type){case"directional":sn=new Tf$1(yn),sn.target.position.set(0,0,-1),sn.add(sn.target);break;case"point":sn=new Gc$1(yn),sn.distance=Pn;break;case"spot":sn=new Ny(yn),sn.distance=Pn,rn.spot=rn.spot||{},rn.spot.innerConeAngle=rn.spot.innerConeAngle!==void 0?rn.spot.innerConeAngle:0,rn.spot.outerConeAngle=rn.spot.outerConeAngle!==void 0?rn.spot.outerConeAngle:Math.PI/4,sn.angle=rn.spot.outerConeAngle,sn.penumbra=1-rn.spot.innerConeAngle/rn.spot.outerConeAngle,sn.target.position.set(0,0,-1),sn.add(sn.target);break;default:throw new Error("THREE.GLTFLoader: Unexpected light type: "+rn.type)}return sn.position.set(0,0,0),sn.decay=2,ki$1(sn,rn),rn.intensity!==void 0&&(sn.intensity=rn.intensity),sn.name=a.createUniqueName(rn.name||"light_"+s),_e=Promise.resolve(sn),a.cache.add(b,_e),_e}getDependency(s,a){if(s==="light")return this._loadLight(a)}createNodeAttachment(s){const a=this,b=this.parser,_e=b.json.nodes[s],bt=(_e.extensions&&_e.extensions[this.name]||{}).light;return bt===void 0?null:this._loadLight(bt).then(function(rn){return b._getNodeRef(a.cache,bt,rn)})}},Qb$1=class{constructor(){this.name=et$2.KHR_MATERIALS_UNLIT}getMaterialType(){return Zt}extendParams(s,a,b){const _e=[];s.color=new he$1(1,1,1),s.opacity=1;const bt=a.pbrMetallicRoughness;if(bt){if(Array.isArray(bt.baseColorFactor)){const rn=bt.baseColorFactor;s.color.fromArray(rn),s.opacity=rn[3]}bt.baseColorTexture!==void 0&&_e.push(b.assignTexture(s,"map",bt.baseColorTexture,we$2))}return Promise.all(_e)}},kb$1=class{constructor(s){this.parser=s,this.name=et$2.KHR_MATERIALS_EMISSIVE_STRENGTH}extendMaterialParams(s,a){const b=this.parser.json.materials[s];if(!b.extensions||!b.extensions[this.name])return Promise.resolve();const _e=b.extensions[this.name].emissiveStrength;return _e!==void 0&&(a.emissiveIntensity=_e),Promise.resolve()}},Gb$1=class{constructor(s){this.parser=s,this.name=et$2.KHR_MATERIALS_CLEARCOAT}getMaterialType(s){const a=this.parser.json.materials[s];return!a.extensions||!a.extensions[this.name]?null:Bi$1}extendMaterialParams(s,a){const b=this.parser,_e=b.json.materials[s];if(!_e.extensions||!_e.extensions[this.name])return Promise.resolve();const bt=[],rn=_e.extensions[this.name];if(rn.clearcoatFactor!==void 0&&(a.clearcoat=rn.clearcoatFactor),rn.clearcoatTexture!==void 0&&bt.push(b.assignTexture(a,"clearcoatMap",rn.clearcoatTexture)),rn.clearcoatRoughnessFactor!==void 0&&(a.clearcoatRoughness=rn.clearcoatRoughnessFactor),rn.clearcoatRoughnessTexture!==void 0&&bt.push(b.assignTexture(a,"clearcoatRoughnessMap",rn.clearcoatRoughnessTexture)),rn.clearcoatNormalTexture!==void 0&&(bt.push(b.assignTexture(a,"clearcoatNormalMap",rn.clearcoatNormalTexture)),rn.clearcoatNormalTexture.scale!==void 0)){const sn=rn.clearcoatNormalTexture.scale;a.clearcoatNormalScale=new j$1(sn,sn)}return Promise.all(bt)}},Hb$1=class{constructor(s){this.parser=s,this.name=et$2.KHR_MATERIALS_IRIDESCENCE}getMaterialType(s){const a=this.parser.json.materials[s];return!a.extensions||!a.extensions[this.name]?null:Bi$1}extendMaterialParams(s,a){const b=this.parser,_e=b.json.materials[s];if(!_e.extensions||!_e.extensions[this.name])return Promise.resolve();const bt=[],rn=_e.extensions[this.name];return rn.iridescenceFactor!==void 0&&(a.iridescence=rn.iridescenceFactor),rn.iridescenceTexture!==void 0&&bt.push(b.assignTexture(a,"iridescenceMap",rn.iridescenceTexture)),rn.iridescenceIor!==void 0&&(a.iridescenceIOR=rn.iridescenceIor),a.iridescenceThicknessRange===void 0&&(a.iridescenceThicknessRange=[100,400]),rn.iridescenceThicknessMinimum!==void 0&&(a.iridescenceThicknessRange[0]=rn.iridescenceThicknessMinimum),rn.iridescenceThicknessMaximum!==void 0&&(a.iridescenceThicknessRange[1]=rn.iridescenceThicknessMaximum),rn.iridescenceThicknessTexture!==void 0&&bt.push(b.assignTexture(a,"iridescenceThicknessMap",rn.iridescenceThicknessTexture)),Promise.all(bt)}},zb$1=class{constructor(s){this.parser=s,this.name=et$2.KHR_MATERIALS_SHEEN}getMaterialType(s){const a=this.parser.json.materials[s];return!a.extensions||!a.extensions[this.name]?null:Bi$1}extendMaterialParams(s,a){const b=this.parser,_e=b.json.materials[s];if(!_e.extensions||!_e.extensions[this.name])return Promise.resolve();const bt=[];a.sheenColor=new he$1(0,0,0),a.sheenRoughness=0,a.sheen=1;const rn=_e.extensions[this.name];return rn.sheenColorFactor!==void 0&&a.sheenColor.fromArray(rn.sheenColorFactor),rn.sheenRoughnessFactor!==void 0&&(a.sheenRoughness=rn.sheenRoughnessFactor),rn.sheenColorTexture!==void 0&&bt.push(b.assignTexture(a,"sheenColorMap",rn.sheenColorTexture,we$2)),rn.sheenRoughnessTexture!==void 0&&bt.push(b.assignTexture(a,"sheenRoughnessMap",rn.sheenRoughnessTexture)),Promise.all(bt)}},Vb$1=class{constructor(s){this.parser=s,this.name=et$2.KHR_MATERIALS_TRANSMISSION}getMaterialType(s){const a=this.parser.json.materials[s];return!a.extensions||!a.extensions[this.name]?null:Bi$1}extendMaterialParams(s,a){const b=this.parser,_e=b.json.materials[s];if(!_e.extensions||!_e.extensions[this.name])return Promise.resolve();const bt=[],rn=_e.extensions[this.name];return rn.transmissionFactor!==void 0&&(a.transmission=rn.transmissionFactor),rn.transmissionTexture!==void 0&&bt.push(b.assignTexture(a,"transmissionMap",rn.transmissionTexture)),Promise.all(bt)}},Wb$1=class{constructor(s){this.parser=s,this.name=et$2.KHR_MATERIALS_VOLUME}getMaterialType(s){const a=this.parser.json.materials[s];return!a.extensions||!a.extensions[this.name]?null:Bi$1}extendMaterialParams(s,a){const b=this.parser,_e=b.json.materials[s];if(!_e.extensions||!_e.extensions[this.name])return Promise.resolve();const bt=[],rn=_e.extensions[this.name];a.thickness=rn.thicknessFactor!==void 0?rn.thicknessFactor:0,rn.thicknessTexture!==void 0&&bt.push(b.assignTexture(a,"thicknessMap",rn.thicknessTexture)),a.attenuationDistance=rn.attenuationDistance||1/0;const sn=rn.attenuationColor||[1,1,1];return a.attenuationColor=new he$1(sn[0],sn[1],sn[2]),Promise.all(bt)}},qb$1=class{constructor(s){this.parser=s,this.name=et$2.KHR_MATERIALS_IOR}getMaterialType(s){const a=this.parser.json.materials[s];return!a.extensions||!a.extensions[this.name]?null:Bi$1}extendMaterialParams(s,a){const b=this.parser.json.materials[s];if(!b.extensions||!b.extensions[this.name])return Promise.resolve();const _e=b.extensions[this.name];return a.ior=_e.ior!==void 0?_e.ior:1.5,Promise.resolve()}},$b$1=class{constructor(s){this.parser=s,this.name=et$2.KHR_MATERIALS_SPECULAR}getMaterialType(s){const a=this.parser.json.materials[s];return!a.extensions||!a.extensions[this.name]?null:Bi$1}extendMaterialParams(s,a){const b=this.parser,_e=b.json.materials[s];if(!_e.extensions||!_e.extensions[this.name])return Promise.resolve();const bt=[],rn=_e.extensions[this.name];a.specularIntensity=rn.specularFactor!==void 0?rn.specularFactor:1,rn.specularTexture!==void 0&&bt.push(b.assignTexture(a,"specularIntensityMap",rn.specularTexture));const sn=rn.specularColorFactor||[1,1,1];return a.specularColor=new he$1(sn[0],sn[1],sn[2]),rn.specularColorTexture!==void 0&&bt.push(b.assignTexture(a,"specularColorMap",rn.specularColorTexture,we$2)),Promise.all(bt)}},Xb$1=class{constructor(s){this.parser=s,this.name=et$2.KHR_MATERIALS_ANISOTROPY}getMaterialType(s){const a=this.parser.json.materials[s];return!a.extensions||!a.extensions[this.name]?null:Bi$1}extendMaterialParams(s,a){const b=this.parser,_e=b.json.materials[s];if(!_e.extensions||!_e.extensions[this.name])return Promise.resolve();const bt=[],rn=_e.extensions[this.name];return rn.anisotropyStrength!==void 0&&(a.anisotropy=rn.anisotropyStrength),rn.anisotropyRotation!==void 0&&(a.anisotropyRotation=rn.anisotropyRotation),rn.anisotropyTexture!==void 0&&bt.push(b.assignTexture(a,"anisotropyMap",rn.anisotropyTexture)),Promise.all(bt)}},Yb$1=class{constructor(s){this.parser=s,this.name=et$2.KHR_TEXTURE_BASISU}loadTexture(s){const a=this.parser,b=a.json,_e=b.textures[s];if(!_e.extensions||!_e.extensions[this.name])return null;const bt=_e.extensions[this.name],rn=a.options.ktx2Loader;if(!rn){if(b.extensionsRequired&&b.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");return null}return a.loadTextureImage(s,bt.source,rn)}},Jb$1=class{constructor(s){this.parser=s,this.name=et$2.EXT_TEXTURE_WEBP,this.isSupported=null}loadTexture(s){const a=this.name,b=this.parser,_e=b.json,bt=_e.textures[s];if(!bt.extensions||!bt.extensions[a])return null;const rn=bt.extensions[a],sn=_e.images[rn.source];let yn=b.textureLoader;if(sn.uri){const Pn=b.options.manager.getHandler(sn.uri);Pn!==null&&(yn=Pn)}return this.detectSupport().then(function(Pn){if(Pn)return b.loadTextureImage(s,rn.source,yn);if(_e.extensionsRequired&&_e.extensionsRequired.indexOf(a)>=0)throw new Error("THREE.GLTFLoader: WebP required by asset but unsupported.");return b.loadTexture(s)})}detectSupport(){return this.isSupported||(this.isSupported=new Promise(function(s){const a=new Image;a.src="data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA",a.onload=a.onerror=function(){s(a.height===1)}})),this.isSupported}},Kb$1=class{constructor(s){this.parser=s,this.name=et$2.EXT_TEXTURE_AVIF,this.isSupported=null}loadTexture(s){const a=this.name,b=this.parser,_e=b.json,bt=_e.textures[s];if(!bt.extensions||!bt.extensions[a])return null;const rn=bt.extensions[a],sn=_e.images[rn.source];let yn=b.textureLoader;if(sn.uri){const Pn=b.options.manager.getHandler(sn.uri);Pn!==null&&(yn=Pn)}return this.detectSupport().then(function(Pn){if(Pn)return b.loadTextureImage(s,rn.source,yn);if(_e.extensionsRequired&&_e.extensionsRequired.indexOf(a)>=0)throw new Error("THREE.GLTFLoader: AVIF required by asset but unsupported.");return b.loadTexture(s)})}detectSupport(){return this.isSupported||(this.isSupported=new Promise(function(s){const a=new Image;a.src="data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=",a.onload=a.onerror=function(){s(a.height===1)}})),this.isSupported}},jb$1=class{constructor(s){this.name=et$2.EXT_MESHOPT_COMPRESSION,this.parser=s}loadBufferView(s){const a=this.parser.json,b=a.bufferViews[s];if(b.extensions&&b.extensions[this.name]){const _e=b.extensions[this.name],bt=this.parser.getDependency("buffer",_e.buffer),rn=this.parser.options.meshoptDecoder;if(!rn||!rn.supported){if(a.extensionsRequired&&a.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files");return null}return bt.then(function(sn){const yn=_e.byteOffset||0,Pn=_e.byteLength||0,zn=_e.count,lr=_e.byteStride,ar=new Uint8Array(sn,yn,Pn);return rn.decodeGltfBufferAsync?rn.decodeGltfBufferAsync(zn,lr,ar,_e.mode,_e.filter).then(function(cr){return cr.buffer}):rn.ready.then(function(){const cr=new ArrayBuffer(zn*lr);return rn.decodeGltfBuffer(new Uint8Array(cr),zn,lr,ar,_e.mode,_e.filter),cr})})}else return null}},Zb$1=class{constructor(s){this.name=et$2.EXT_MESH_GPU_INSTANCING,this.parser=s}createNodeMesh(s){const a=this.parser.json,b=a.nodes[s];if(!b.extensions||!b.extensions[this.name]||b.mesh===void 0)return null;const _e=a.meshes[b.mesh];for(const yn of _e.primitives)if(yn.mode!==Rn.TRIANGLES&&yn.mode!==Rn.TRIANGLE_STRIP&&yn.mode!==Rn.TRIANGLE_FAN&&yn.mode!==void 0)return null;const bt=b.extensions[this.name].attributes,rn=[],sn={};for(const yn in bt)rn.push(this.parser.getDependency("accessor",bt[yn]).then(Pn=>(sn[yn]=Pn,sn[yn])));return rn.length<1?null:(rn.push(this.parser.createNodeMesh(s)),Promise.all(rn).then(yn=>{const Pn=yn.pop(),zn=Pn.isGroup?Pn.children:[Pn],lr=yn[0].count,ar=[];for(const cr of zn){const hr=new Be$1,es=new C$2,Ur=new en,Dr=new C$2(1,1,1),zr=new Ey(cr.geometry,cr.material,lr);for(let rs=0;rs<lr;rs++)sn.TRANSLATION&&es.fromBufferAttribute(sn.TRANSLATION,rs),sn.ROTATION&&Ur.fromBufferAttribute(sn.ROTATION,rs),sn.SCALE&&Dr.fromBufferAttribute(sn.SCALE,rs),zr.setMatrixAt(rs,hr.compose(es,Ur,Dr));for(const rs in sn)rs!=="TRANSLATION"&&rs!=="ROTATION"&&rs!=="SCALE"&&cr.geometry.setAttribute(rs,sn[rs]);je$1.prototype.copy.call(zr,cr),this.parser.assignFinalMaterial(zr),ar.push(zr)}return Pn.isGroup?(Pn.clear(),Pn.add(...ar),Pn):ar[0]}))}};const Zy="glTF",Mo=12,um={JSON:1313821514,BIN:5130562};class e1{constructor(s){this.name=et$2.KHR_BINARY_GLTF,this.content=null,this.body=null;const a=new DataView(s,0,Mo),b=new TextDecoder;if(this.header={magic:b.decode(new Uint8Array(s.slice(0,4))),version:a.getUint32(4,!0),length:a.getUint32(8,!0)},this.header.magic!==Zy)throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header.");if(this.header.version<2)throw new Error("THREE.GLTFLoader: Legacy binary file detected.");const _e=this.header.length-Mo,bt=new DataView(s,Mo);let rn=0;for(;rn<_e;){const sn=bt.getUint32(rn,!0);rn+=4;const yn=bt.getUint32(rn,!0);if(rn+=4,yn===um.JSON){const Pn=new Uint8Array(s,Mo+rn,sn);this.content=b.decode(Pn)}else if(yn===um.BIN){const Pn=Mo+rn;this.body=s.slice(Pn,Pn+sn)}rn+=sn}if(this.content===null)throw new Error("THREE.GLTFLoader: JSON content not found.")}}class t1{constructor(s,a){if(!a)throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided.");this.name=et$2.KHR_DRACO_MESH_COMPRESSION,this.json=s,this.dracoLoader=a,this.dracoLoader.preload()}decodePrimitive(s,a){const b=this.json,_e=this.dracoLoader,bt=s.extensions[this.name].bufferView,rn=s.extensions[this.name].attributes,sn={},yn={},Pn={};for(const zn in rn){const lr=bd$1[zn]||zn.toLowerCase();sn[lr]=rn[zn]}for(const zn in s.attributes){const lr=bd$1[zn]||zn.toLowerCase();if(rn[zn]!==void 0){const ar=b.accessors[s.attributes[zn]],cr=Vr[ar.componentType];Pn[lr]=cr.name,yn[lr]=ar.normalized===!0}}return a.getDependency("bufferView",bt).then(function(zn){return new Promise(function(lr){_e.decodeDracoFile(zn,function(ar){for(const cr in ar.attributes){const hr=ar.attributes[cr],es=yn[cr];es!==void 0&&(hr.normalized=es)}lr(ar)},sn,Pn)})})}}class n1{constructor(){this.name=et$2.KHR_TEXTURE_TRANSFORM}extendTexture(s,a){return(a.texCoord===void 0||a.texCoord===s.channel)&&a.offset===void 0&&a.rotation===void 0&&a.scale===void 0||(s=s.clone(),a.texCoord!==void 0&&(s.channel=a.texCoord),a.offset!==void 0&&s.offset.fromArray(a.offset),a.rotation!==void 0&&(s.rotation=a.rotation),a.scale!==void 0&&s.repeat.fromArray(a.scale),s.needsUpdate=!0),s}}class i1{constructor(){this.name=et$2.KHR_MESH_QUANTIZATION}}class ev extends Ia$1{constructor(s,a,b,_e){super(s,a,b,_e)}copySampleValue_(s){const a=this.resultBuffer,b=this.sampleValues,_e=this.valueSize,bt=s*_e*3+_e;for(let rn=0;rn!==_e;rn++)a[rn]=b[bt+rn];return a}interpolate_(s,a,b,_e){const bt=this.resultBuffer,rn=this.sampleValues,sn=this.valueSize,yn=sn*2,Pn=sn*3,zn=_e-a,lr=(b-a)/zn,ar=lr*lr,cr=ar*lr,hr=s*Pn,es=hr-Pn,Ur=-2*cr+3*ar,Dr=cr-ar,zr=1-Ur,rs=Dr-ar+lr;for(let as=0;as!==sn;as++){const os=rn[es+as+sn],ls=rn[es+as+yn]*zn,zs=rn[hr+as+sn],ho=rn[hr+as]*zn;bt[as]=zr*os+rs*ls+Ur*zs+Dr*ho}return bt}}const s1=new en;class r1 extends ev{interpolate_(s,a,b,_e){const bt=super.interpolate_(s,a,b,_e);return s1.fromArray(bt).normalize().toArray(bt),bt}}const Rn={FLOAT:5126,FLOAT_MAT3:35675,FLOAT_MAT4:35676,FLOAT_VEC2:35664,FLOAT_VEC3:35665,FLOAT_VEC4:35666,LINEAR:9729,REPEAT:10497,SAMPLER_2D:35678,POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6,UNSIGNED_BYTE:5121,UNSIGNED_SHORT:5123},Vr={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},dm={9728:gt$1,9729:ht$1,9984:aa$1,9985:Lc$1,9986:kr,9987:Hn},fm={33071:zt,33648:qr,10497:Zn$1},zh$1={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},bd$1={POSITION:"position",NORMAL:"normal",TANGENT:"tangent",TEXCOORD_0:"uv",TEXCOORD_1:"uv1",TEXCOORD_2:"uv2",TEXCOORD_3:"uv3",COLOR_0:"color",WEIGHTS_0:"skinWeight",JOINTS_0:"skinIndex"},Ni$1={scale:"scale",translation:"position",rotation:"quaternion",weights:"morphTargetInfluences"},o1={CUBICSPLINE:void 0,LINEAR:Ps,STEP:Xr},Vh$1={OPAQUE:"OPAQUE",MASK:"MASK",BLEND:"BLEND"};function a1(o){return o.DefaultMaterial===void 0&&(o.DefaultMaterial=new Yi$1({color:16777215,emissive:0,metalness:1,roughness:1,transparent:!1,depthTest:!0,side:Gn})),o.DefaultMaterial}function us(o,s,a){for(const b in a.extensions)o[b]===void 0&&(s.userData.gltfExtensions=s.userData.gltfExtensions||{},s.userData.gltfExtensions[b]=a.extensions[b])}function ki$1(o,s){s.extras!==void 0&&(typeof s.extras=="object"?Object.assign(o.userData,s.extras):console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, "+s.extras))}function l1(o,s,a){let b=!1,_e=!1,bt=!1;for(let Pn=0,zn=s.length;Pn<zn;Pn++){const lr=s[Pn];if(lr.POSITION!==void 0&&(b=!0),lr.NORMAL!==void 0&&(_e=!0),lr.COLOR_0!==void 0&&(bt=!0),b&&_e&&bt)break}if(!b&&!_e&&!bt)return Promise.resolve(o);const rn=[],sn=[],yn=[];for(let Pn=0,zn=s.length;Pn<zn;Pn++){const lr=s[Pn];if(b){const ar=lr.POSITION!==void 0?a.getDependency("accessor",lr.POSITION):o.attributes.position;rn.push(ar)}if(_e){const ar=lr.NORMAL!==void 0?a.getDependency("accessor",lr.NORMAL):o.attributes.normal;sn.push(ar)}if(bt){const ar=lr.COLOR_0!==void 0?a.getDependency("accessor",lr.COLOR_0):o.attributes.color;yn.push(ar)}}return Promise.all([Promise.all(rn),Promise.all(sn),Promise.all(yn)]).then(function(Pn){const zn=Pn[0],lr=Pn[1],ar=Pn[2];return b&&(o.morphAttributes.position=zn),_e&&(o.morphAttributes.normal=lr),bt&&(o.morphAttributes.color=ar),o.morphTargetsRelative=!0,o})}function c1(o,s){if(o.updateMorphTargets(),s.weights!==void 0)for(let a=0,b=s.weights.length;a<b;a++)o.morphTargetInfluences[a]=s.weights[a];if(s.extras&&Array.isArray(s.extras.targetNames)){const a=s.extras.targetNames;if(o.morphTargetInfluences.length===a.length){o.morphTargetDictionary={};for(let b=0,_e=a.length;b<_e;b++)o.morphTargetDictionary[a[b]]=b}else console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.")}}function h1(o){let s;const a=o.extensions&&o.extensions[et$2.KHR_DRACO_MESH_COMPRESSION];if(a?s="draco:"+a.bufferView+":"+a.indices+":"+Wh$1(a.attributes):s=o.indices+":"+Wh$1(o.attributes)+":"+o.mode,o.targets!==void 0)for(let b=0,_e=o.targets.length;b<_e;b++)s+=":"+Wh$1(o.targets[b]);return s}function Wh$1(o){let s="";const a=Object.keys(o).sort();for(let b=0,_e=a.length;b<_e;b++)s+=a[b]+":"+o[a[b]]+";";return s}function Td$1(o){switch(o){case Int8Array:return 1/127;case Uint8Array:return 1/255;case Int16Array:return 1/32767;case Uint16Array:return 1/65535;default:throw new Error("THREE.GLTFLoader: Unsupported normalized accessor component type.")}}function u1(o){return o.search(/\.jpe?g($|\?)/i)>0||o.search(/^data\:image\/jpeg/)===0?"image/jpeg":o.search(/\.webp($|\?)/i)>0||o.search(/^data\:image\/webp/)===0?"image/webp":"image/png"}const d1=new Be$1;class f1{constructor(s={},a={}){this.json=s,this.extensions={},this.plugins={},this.options=a,this.cache=new Fb$1,this.associations=new Map,this.primitiveCache={},this.nodeCache={},this.meshCache={refs:{},uses:{}},this.cameraCache={refs:{},uses:{}},this.lightCache={refs:{},uses:{}},this.sourceCache={},this.textureCache={},this.nodeNamesUsed={};let b=!1,_e=!1,bt=-1;typeof navigator<"u"&&(b=/^((?!chrome|android).)*safari/i.test(navigator.userAgent)===!0,_e=navigator.userAgent.indexOf("Firefox")>-1,bt=_e?navigator.userAgent.match(/Firefox\/([0-9]+)\./)[1]:-1),typeof createImageBitmap>"u"||b||_e&&bt<98?this.textureLoader=new Uy(this.options.manager):this.textureLoader=new DC(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new tn(this.options.manager),this.fileLoader.setResponseType("arraybuffer"),this.options.crossOrigin==="use-credentials"&&this.fileLoader.setWithCredentials(!0)}setExtensions(s){this.extensions=s}setPlugins(s){this.plugins=s}parse(s,a){const b=this,_e=this.json,bt=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll(function(rn){return rn._markDefs&&rn._markDefs()}),Promise.all(this._invokeAll(function(rn){return rn.beforeRoot&&rn.beforeRoot()})).then(function(){return Promise.all([b.getDependencies("scene"),b.getDependencies("animation"),b.getDependencies("camera")])}).then(function(rn){const sn={scene:rn[0][_e.scene||0],scenes:rn[0],animations:rn[1],cameras:rn[2],asset:_e.asset,parser:b,userData:{}};us(bt,sn,_e),ki$1(sn,_e),Promise.all(b._invokeAll(function(yn){return yn.afterRoot&&yn.afterRoot(sn)})).then(function(){s(sn)})}).catch(a)}_markDefs(){const s=this.json.nodes||[],a=this.json.skins||[],b=this.json.meshes||[];for(let _e=0,bt=a.length;_e<bt;_e++){const rn=a[_e].joints;for(let sn=0,yn=rn.length;sn<yn;sn++)s[rn[sn]].isBone=!0}for(let _e=0,bt=s.length;_e<bt;_e++){const rn=s[_e];rn.mesh!==void 0&&(this._addNodeRef(this.meshCache,rn.mesh),rn.skin!==void 0&&(b[rn.mesh].isSkinnedMesh=!0)),rn.camera!==void 0&&this._addNodeRef(this.cameraCache,rn.camera)}}_addNodeRef(s,a){a!==void 0&&(s.refs[a]===void 0&&(s.refs[a]=s.uses[a]=0),s.refs[a]++)}_getNodeRef(s,a,b){if(s.refs[a]<=1)return b;const _e=b.clone(),bt=(rn,sn)=>{const yn=this.associations.get(rn);yn!=null&&this.associations.set(sn,yn);for(const[Pn,zn]of rn.children.entries())bt(zn,sn.children[Pn])};return bt(b,_e),_e.name+="_instance_"+s.uses[a]++,_e}_invokeOne(s){const a=Object.values(this.plugins);a.push(this);for(let b=0;b<a.length;b++){const _e=s(a[b]);if(_e)return _e}return null}_invokeAll(s){const a=Object.values(this.plugins);a.unshift(this);const b=[];for(let _e=0;_e<a.length;_e++){const bt=s(a[_e]);bt&&b.push(bt)}return b}getDependency(s,a){const b=s+":"+a;let _e=this.cache.get(b);if(!_e){switch(s){case"scene":_e=this.loadScene(a);break;case"node":_e=this._invokeOne(function(bt){return bt.loadNode&&bt.loadNode(a)});break;case"mesh":_e=this._invokeOne(function(bt){return bt.loadMesh&&bt.loadMesh(a)});break;case"accessor":_e=this.loadAccessor(a);break;case"bufferView":_e=this._invokeOne(function(bt){return bt.loadBufferView&&bt.loadBufferView(a)});break;case"buffer":_e=this.loadBuffer(a);break;case"material":_e=this._invokeOne(function(bt){return bt.loadMaterial&&bt.loadMaterial(a)});break;case"texture":_e=this._invokeOne(function(bt){return bt.loadTexture&&bt.loadTexture(a)});break;case"skin":_e=this.loadSkin(a);break;case"animation":_e=this._invokeOne(function(bt){return bt.loadAnimation&&bt.loadAnimation(a)});break;case"camera":_e=this.loadCamera(a);break;default:if(_e=this._invokeOne(function(bt){return bt!=this&&bt.getDependency&&bt.getDependency(s,a)}),!_e)throw new Error("Unknown type: "+s);break}this.cache.add(b,_e)}return _e}getDependencies(s){let a=this.cache.get(s);if(!a){const b=this,_e=this.json[s+(s==="mesh"?"es":"s")]||[];a=Promise.all(_e.map(function(bt,rn){return b.getDependency(s,rn)})),this.cache.add(s,a)}return a}loadBuffer(s){const a=this.json.buffers[s],b=this.fileLoader;if(a.type&&a.type!=="arraybuffer")throw new Error("THREE.GLTFLoader: "+a.type+" buffer type is not supported.");if(a.uri===void 0&&s===0)return Promise.resolve(this.extensions[et$2.KHR_BINARY_GLTF].body);const _e=this.options;return new Promise(function(bt,rn){b.load(Aa$1.resolveURL(a.uri,_e.path),bt,void 0,function(){rn(new Error('THREE.GLTFLoader: Failed to load buffer "'+a.uri+'".'))})})}loadBufferView(s){const a=this.json.bufferViews[s];return this.getDependency("buffer",a.buffer).then(function(b){const _e=a.byteLength||0,bt=a.byteOffset||0;return b.slice(bt,bt+_e)})}loadAccessor(s){const a=this,b=this.json,_e=this.json.accessors[s];if(_e.bufferView===void 0&&_e.sparse===void 0){const rn=zh$1[_e.type],sn=Vr[_e.componentType],yn=_e.normalized===!0,Pn=new sn(_e.count*rn);return Promise.resolve(new tt$1(Pn,rn,yn))}const bt=[];return _e.bufferView!==void 0?bt.push(this.getDependency("bufferView",_e.bufferView)):bt.push(null),_e.sparse!==void 0&&(bt.push(this.getDependency("bufferView",_e.sparse.indices.bufferView)),bt.push(this.getDependency("bufferView",_e.sparse.values.bufferView))),Promise.all(bt).then(function(rn){const sn=rn[0],yn=zh$1[_e.type],Pn=Vr[_e.componentType],zn=Pn.BYTES_PER_ELEMENT,lr=zn*yn,ar=_e.byteOffset||0,cr=_e.bufferView!==void 0?b.bufferViews[_e.bufferView].byteStride:void 0,hr=_e.normalized===!0;let es,Ur;if(cr&&cr!==lr){const Dr=Math.floor(ar/cr),zr="InterleavedBuffer:"+_e.bufferView+":"+_e.componentType+":"+Dr+":"+_e.count;let rs=a.cache.get(zr);rs||(es=new Pn(sn,Dr*cr,_e.count*cr/zn),rs=new Uc$1(es,cr/zn),a.cache.add(zr,rs)),Ur=new Us(rs,yn,ar%cr/zn,hr)}else sn===null?es=new Pn(_e.count*yn):es=new Pn(sn,ar,_e.count*yn),Ur=new tt$1(es,yn,hr);if(_e.sparse!==void 0){const Dr=zh$1.SCALAR,zr=Vr[_e.sparse.indices.componentType],rs=_e.sparse.indices.byteOffset||0,as=_e.sparse.values.byteOffset||0,os=new zr(rn[1],rs,_e.sparse.count*Dr),ls=new Pn(rn[2],as,_e.sparse.count*yn);sn!==null&&(Ur=new tt$1(Ur.array.slice(),Ur.itemSize,Ur.normalized));for(let zs=0,ho=os.length;zs<ho;zs++){const ga=os[zs];if(Ur.setX(ga,ls[zs*yn]),yn>=2&&Ur.setY(ga,ls[zs*yn+1]),yn>=3&&Ur.setZ(ga,ls[zs*yn+2]),yn>=4&&Ur.setW(ga,ls[zs*yn+3]),yn>=5)throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}}return Ur})}loadTexture(s){const a=this.json,b=this.options,_e=a.textures[s].source,bt=a.images[_e];let rn=this.textureLoader;if(bt.uri){const sn=b.manager.getHandler(bt.uri);sn!==null&&(rn=sn)}return this.loadTextureImage(s,_e,rn)}loadTextureImage(s,a,b){const _e=this,bt=this.json,rn=bt.textures[s],sn=bt.images[a],yn=(sn.uri||sn.bufferView)+":"+rn.sampler;if(this.textureCache[yn])return this.textureCache[yn];const Pn=this.loadImageSource(a,b).then(function(zn){zn.flipY=!1,zn.name=rn.name||sn.name||"",zn.name===""&&typeof sn.uri=="string"&&sn.uri.startsWith("data:image/")===!1&&(zn.name=sn.uri);const lr=(bt.samplers||{})[rn.sampler]||{};return zn.magFilter=dm[lr.magFilter]||ht$1,zn.minFilter=dm[lr.minFilter]||Hn,zn.wrapS=fm[lr.wrapS]||Zn$1,zn.wrapT=fm[lr.wrapT]||Zn$1,_e.associations.set(zn,{textures:s}),zn}).catch(function(){return null});return this.textureCache[yn]=Pn,Pn}loadImageSource(s,a){const b=this,_e=this.json,bt=this.options;if(this.sourceCache[s]!==void 0)return this.sourceCache[s].then(lr=>lr.clone());const rn=_e.images[s],sn=self.URL||self.webkitURL;let yn=rn.uri||"",Pn=!1;if(rn.bufferView!==void 0)yn=b.getDependency("bufferView",rn.bufferView).then(function(lr){Pn=!0;const ar=new Blob([lr],{type:rn.mimeType});return yn=sn.createObjectURL(ar),yn});else if(rn.uri===void 0)throw new Error("THREE.GLTFLoader: Image "+s+" is missing URI and bufferView");const zn=Promise.resolve(yn).then(function(lr){return new Promise(function(ar,cr){let hr=ar;a.isImageBitmapLoader===!0&&(hr=function(es){const Ur=new Ct$1(es);Ur.needsUpdate=!0,ar(Ur)}),a.load(Aa$1.resolveURL(lr,bt.path),hr,void 0,cr)})}).then(function(lr){return Pn===!0&&sn.revokeObjectURL(yn),lr.userData.mimeType=rn.mimeType||u1(rn.uri),lr}).catch(function(lr){throw console.error("THREE.GLTFLoader: Couldn't load texture",yn),lr});return this.sourceCache[s]=zn,zn}assignTexture(s,a,b,_e){const bt=this;return this.getDependency("texture",b.index).then(function(rn){if(!rn)return null;if(b.texCoord!==void 0&&b.texCoord>0&&(rn=rn.clone(),rn.channel=b.texCoord),bt.extensions[et$2.KHR_TEXTURE_TRANSFORM]){const sn=b.extensions!==void 0?b.extensions[et$2.KHR_TEXTURE_TRANSFORM]:void 0;if(sn){const yn=bt.associations.get(rn);rn=bt.extensions[et$2.KHR_TEXTURE_TRANSFORM].extendTexture(rn,sn),bt.associations.set(rn,yn)}}return _e!==void 0&&(rn.colorSpace=_e),s[a]=rn,rn})}assignFinalMaterial(s){const a=s.geometry;let b=s.material;const _e=a.attributes.tangent===void 0,bt=a.attributes.color!==void 0,rn=a.attributes.normal===void 0;if(s.isPoints){const sn="PointsMaterial:"+b.uuid;let yn=this.cache.get(sn);yn||(yn=new cf$1,Rt$1.prototype.copy.call(yn,b),yn.color.copy(b.color),yn.map=b.map,yn.sizeAttenuation=!1,this.cache.add(sn,yn)),b=yn}else if(s.isLine){const sn="LineBasicMaterial:"+b.uuid;let yn=this.cache.get(sn);yn||(yn=new pn,Rt$1.prototype.copy.call(yn,b),yn.color.copy(b.color),yn.map=b.map,this.cache.add(sn,yn)),b=yn}if(_e||bt||rn){let sn="ClonedMaterial:"+b.uuid+":";_e&&(sn+="derivative-tangents:"),bt&&(sn+="vertex-colors:"),rn&&(sn+="flat-shading:");let yn=this.cache.get(sn);yn||(yn=b.clone(),bt&&(yn.vertexColors=!0),rn&&(yn.flatShading=!0),_e&&(yn.normalScale&&(yn.normalScale.y*=-1),yn.clearcoatNormalScale&&(yn.clearcoatNormalScale.y*=-1)),this.cache.add(sn,yn),this.associations.set(yn,this.associations.get(b))),b=yn}s.material=b}getMaterialType(){return Yi$1}loadMaterial(s){const a=this,b=this.json,_e=this.extensions,bt=b.materials[s];let rn;const sn={},yn=bt.extensions||{},Pn=[];if(yn[et$2.KHR_MATERIALS_UNLIT]){const lr=_e[et$2.KHR_MATERIALS_UNLIT];rn=lr.getMaterialType(),Pn.push(lr.extendParams(sn,bt,a))}else{const lr=bt.pbrMetallicRoughness||{};if(sn.color=new he$1(1,1,1),sn.opacity=1,Array.isArray(lr.baseColorFactor)){const ar=lr.baseColorFactor;sn.color.fromArray(ar),sn.opacity=ar[3]}lr.baseColorTexture!==void 0&&Pn.push(a.assignTexture(sn,"map",lr.baseColorTexture,we$2)),sn.metalness=lr.metallicFactor!==void 0?lr.metallicFactor:1,sn.roughness=lr.roughnessFactor!==void 0?lr.roughnessFactor:1,lr.metallicRoughnessTexture!==void 0&&(Pn.push(a.assignTexture(sn,"metalnessMap",lr.metallicRoughnessTexture)),Pn.push(a.assignTexture(sn,"roughnessMap",lr.metallicRoughnessTexture))),rn=this._invokeOne(function(ar){return ar.getMaterialType&&ar.getMaterialType(s)}),Pn.push(Promise.all(this._invokeAll(function(ar){return ar.extendMaterialParams&&ar.extendMaterialParams(s,sn)})))}bt.doubleSided===!0&&(sn.side=Jt);const zn=bt.alphaMode||Vh$1.OPAQUE;if(zn===Vh$1.BLEND?(sn.transparent=!0,sn.depthWrite=!1):(sn.transparent=!1,zn===Vh$1.MASK&&(sn.alphaTest=bt.alphaCutoff!==void 0?bt.alphaCutoff:.5)),bt.normalTexture!==void 0&&rn!==Zt&&(Pn.push(a.assignTexture(sn,"normalMap",bt.normalTexture)),sn.normalScale=new j$1(1,1),bt.normalTexture.scale!==void 0)){const lr=bt.normalTexture.scale;sn.normalScale.set(lr,lr)}return bt.occlusionTexture!==void 0&&rn!==Zt&&(Pn.push(a.assignTexture(sn,"aoMap",bt.occlusionTexture)),bt.occlusionTexture.strength!==void 0&&(sn.aoMapIntensity=bt.occlusionTexture.strength)),bt.emissiveFactor!==void 0&&rn!==Zt&&(sn.emissive=new he$1().fromArray(bt.emissiveFactor)),bt.emissiveTexture!==void 0&&rn!==Zt&&Pn.push(a.assignTexture(sn,"emissiveMap",bt.emissiveTexture,we$2)),Promise.all(Pn).then(function(){const lr=new rn(sn);return bt.name&&(lr.name=bt.name),ki$1(lr,bt),a.associations.set(lr,{materials:s}),bt.extensions&&us(_e,lr,bt),lr})}createUniqueName(s){const a=Je$1.sanitizeNodeName(s||"");return a in this.nodeNamesUsed?a+"_"+ ++this.nodeNamesUsed[a]:(this.nodeNamesUsed[a]=0,a)}loadGeometries(s){const a=this,b=this.extensions,_e=this.primitiveCache;function bt(sn){return b[et$2.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(sn,a).then(function(yn){return pm(yn,sn,a)})}const rn=[];for(let sn=0,yn=s.length;sn<yn;sn++){const Pn=s[sn],zn=h1(Pn),lr=_e[zn];if(lr)rn.push(lr.promise);else{let ar;Pn.extensions&&Pn.extensions[et$2.KHR_DRACO_MESH_COMPRESSION]?ar=bt(Pn):ar=pm(new Ve$1,Pn,a),_e[zn]={primitive:Pn,promise:ar},rn.push(ar)}}return Promise.all(rn)}loadMesh(s){const a=this,b=this.json,_e=this.extensions,bt=b.meshes[s],rn=bt.primitives,sn=[];for(let yn=0,Pn=rn.length;yn<Pn;yn++){const zn=rn[yn].material===void 0?a1(this.cache):this.getDependency("material",rn[yn].material);sn.push(zn)}return sn.push(a.loadGeometries(rn)),Promise.all(sn).then(function(yn){const Pn=yn.slice(0,yn.length-1),zn=yn[yn.length-1],lr=[];for(let cr=0,hr=zn.length;cr<hr;cr++){const es=zn[cr],Ur=rn[cr];let Dr;const zr=Pn[cr];if(Ur.mode===Rn.TRIANGLES||Ur.mode===Rn.TRIANGLE_STRIP||Ur.mode===Rn.TRIANGLE_FAN||Ur.mode===void 0)Dr=bt.isSkinnedMesh===!0?new vy(es,zr):new Te$2(es,zr),Dr.isSkinnedMesh===!0&&Dr.normalizeSkinWeights(),Ur.mode===Rn.TRIANGLE_STRIP?Dr.geometry=hm(Dr.geometry,ty):Ur.mode===Rn.TRIANGLE_FAN&&(Dr.geometry=hm(Dr.geometry,pd$1));else if(Ur.mode===Rn.LINES)Dr=new ti$1(es,zr);else if(Ur.mode===Rn.LINE_STRIP)Dr=new Xi$1(es,zr);else if(Ur.mode===Rn.LINE_LOOP)Dr=new _y$1(es,zr);else if(Ur.mode===Rn.POINTS)Dr=new xy(es,zr);else throw new Error("THREE.GLTFLoader: Primitive mode unsupported: "+Ur.mode);Object.keys(Dr.geometry.morphAttributes).length>0&&c1(Dr,bt),Dr.name=a.createUniqueName(bt.name||"mesh_"+s),ki$1(Dr,bt),Ur.extensions&&us(_e,Dr,Ur),a.assignFinalMaterial(Dr),lr.push(Dr)}for(let cr=0,hr=lr.length;cr<hr;cr++)a.associations.set(lr[cr],{meshes:s,primitives:cr});if(lr.length===1)return bt.extensions&&us(_e,lr[0],bt),lr[0];const ar=new Si$1;bt.extensions&&us(_e,ar,bt),a.associations.set(ar,{meshes:s});for(let cr=0,hr=lr.length;cr<hr;cr++)ar.add(lr[cr]);return ar})}loadCamera(s){let a;const b=this.json.cameras[s],_e=b[b.type];if(!_e){console.warn("THREE.GLTFLoader: Missing camera parameters.");return}return b.type==="perspective"?a=new It$1(Ec$1.radToDeg(_e.yfov),_e.aspectRatio||1,_e.znear||1,_e.zfar||2e6):b.type==="orthographic"&&(a=new ro(-_e.xmag,_e.xmag,_e.ymag,-_e.ymag,_e.znear,_e.zfar)),b.name&&(a.name=this.createUniqueName(b.name)),ki$1(a,b),Promise.resolve(a)}loadSkin(s){const a=this.json.skins[s],b=[];for(let _e=0,bt=a.joints.length;_e<bt;_e++)b.push(this._loadNodeShallow(a.joints[_e]));return a.inverseBindMatrices!==void 0?b.push(this.getDependency("accessor",a.inverseBindMatrices)):b.push(null),Promise.all(b).then(function(_e){const bt=_e.pop(),rn=_e,sn=[],yn=[];for(let Pn=0,zn=rn.length;Pn<zn;Pn++){const lr=rn[Pn];if(lr){sn.push(lr);const ar=new Be$1;bt!==null&&ar.fromArray(bt.array,Pn*16),yn.push(ar)}else console.warn('THREE.GLTFLoader: Joint "%s" could not be found.',a.joints[Pn])}return new Nc$1(sn,yn)})}loadAnimation(s){const a=this.json,b=this,_e=a.animations[s],bt=_e.name?_e.name:"animation_"+s,rn=[],sn=[],yn=[],Pn=[],zn=[];for(let lr=0,ar=_e.channels.length;lr<ar;lr++){const cr=_e.channels[lr],hr=_e.samplers[cr.sampler],es=cr.target,Ur=es.node,Dr=_e.parameters!==void 0?_e.parameters[hr.input]:hr.input,zr=_e.parameters!==void 0?_e.parameters[hr.output]:hr.output;es.node!==void 0&&(rn.push(this.getDependency("node",Ur)),sn.push(this.getDependency("accessor",Dr)),yn.push(this.getDependency("accessor",zr)),Pn.push(hr),zn.push(es))}return Promise.all([Promise.all(rn),Promise.all(sn),Promise.all(yn),Promise.all(Pn),Promise.all(zn)]).then(function(lr){const ar=lr[0],cr=lr[1],hr=lr[2],es=lr[3],Ur=lr[4],Dr=[];for(let zr=0,rs=ar.length;zr<rs;zr++){const as=ar[zr],os=cr[zr],ls=hr[zr],zs=es[zr],ho=Ur[zr];if(as===void 0)continue;as.updateMatrix&&(as.updateMatrix(),as.matrixAutoUpdate=!0);const ga=b._createAnimationTracks(as,os,ls,zs,ho);if(ga)for(let mo=0;mo<ga.length;mo++)Dr.push(ga[mo])}return new pa$1(bt,void 0,Dr)})}createNodeMesh(s){const a=this.json,b=this,_e=a.nodes[s];return _e.mesh===void 0?null:b.getDependency("mesh",_e.mesh).then(function(bt){const rn=b._getNodeRef(b.meshCache,_e.mesh,bt);return _e.weights!==void 0&&rn.traverse(function(sn){if(sn.isMesh)for(let yn=0,Pn=_e.weights.length;yn<Pn;yn++)sn.morphTargetInfluences[yn]=_e.weights[yn]}),rn})}loadNode(s){const a=this.json,b=this,_e=a.nodes[s],bt=b._loadNodeShallow(s),rn=[],sn=_e.children||[];for(let Pn=0,zn=sn.length;Pn<zn;Pn++)rn.push(b.getDependency("node",sn[Pn]));const yn=_e.skin===void 0?Promise.resolve(null):b.getDependency("skin",_e.skin);return Promise.all([bt,Promise.all(rn),yn]).then(function(Pn){const zn=Pn[0],lr=Pn[1],ar=Pn[2];ar!==null&&zn.traverse(function(cr){cr.isSkinnedMesh&&cr.bind(ar,d1)});for(let cr=0,hr=lr.length;cr<hr;cr++)zn.add(lr[cr]);return zn})}_loadNodeShallow(s){const a=this.json,b=this.extensions,_e=this;if(this.nodeCache[s]!==void 0)return this.nodeCache[s];const bt=a.nodes[s],rn=bt.name?_e.createUniqueName(bt.name):"",sn=[],yn=_e._invokeOne(function(Pn){return Pn.createNodeMesh&&Pn.createNodeMesh(s)});return yn&&sn.push(yn),bt.camera!==void 0&&sn.push(_e.getDependency("camera",bt.camera).then(function(Pn){return _e._getNodeRef(_e.cameraCache,bt.camera,Pn)})),_e._invokeAll(function(Pn){return Pn.createNodeAttachment&&Pn.createNodeAttachment(s)}).forEach(function(Pn){sn.push(Pn)}),this.nodeCache[s]=Promise.all(sn).then(function(Pn){let zn;if(bt.isBone===!0?zn=new lf$1:Pn.length>1?zn=new Si$1:Pn.length===1?zn=Pn[0]:zn=new je$1,zn!==Pn[0])for(let lr=0,ar=Pn.length;lr<ar;lr++)zn.add(Pn[lr]);if(bt.name&&(zn.userData.name=bt.name,zn.name=rn),ki$1(zn,bt),bt.extensions&&us(b,zn,bt),bt.matrix!==void 0){const lr=new Be$1;lr.fromArray(bt.matrix),zn.applyMatrix4(lr)}else bt.translation!==void 0&&zn.position.fromArray(bt.translation),bt.rotation!==void 0&&zn.quaternion.fromArray(bt.rotation),bt.scale!==void 0&&zn.scale.fromArray(bt.scale);return _e.associations.has(zn)||_e.associations.set(zn,{}),_e.associations.get(zn).nodes=s,zn}),this.nodeCache[s]}loadScene(s){const a=this.extensions,b=this.json.scenes[s],_e=this,bt=new Si$1;b.name&&(bt.name=_e.createUniqueName(b.name)),ki$1(bt,b),b.extensions&&us(a,bt,b);const rn=b.nodes||[],sn=[];for(let yn=0,Pn=rn.length;yn<Pn;yn++)sn.push(_e.getDependency("node",rn[yn]));return Promise.all(sn).then(function(yn){for(let zn=0,lr=yn.length;zn<lr;zn++)bt.add(yn[zn]);const Pn=zn=>{const lr=new Map;for(const[ar,cr]of _e.associations)(ar instanceof Rt$1||ar instanceof Ct$1)&&lr.set(ar,cr);return zn.traverse(ar=>{const cr=_e.associations.get(ar);cr!=null&&lr.set(ar,cr)}),lr};return _e.associations=Pn(bt),bt})}_createAnimationTracks(s,a,b,_e,bt){const rn=[],sn=s.name?s.name:s.uuid,yn=[];Ni$1[bt.path]===Ni$1.weights?s.traverse(function(ar){ar.morphTargetInfluences&&yn.push(ar.name?ar.name:ar.uuid)}):yn.push(sn);let Pn;switch(Ni$1[bt.path]){case Ni$1.weights:Pn=Kr;break;case Ni$1.rotation:Pn=Fs;break;case Ni$1.position:case Ni$1.scale:default:switch(b.itemSize){case 1:Pn=Kr;break;case 2:case 3:Pn=fa$1;break}break}const zn=_e.interpolation!==void 0?o1[_e.interpolation]:Ps,lr=this._getArrayFromAccessor(b);for(let ar=0,cr=yn.length;ar<cr;ar++){const hr=new Pn(yn[ar]+"."+Ni$1[bt.path],a.array,lr,zn);zn==="CUBICSPLINE"&&this._createCubicSplineTrackInterpolant(hr),rn.push(hr)}return rn}_getArrayFromAccessor(s){let a=s.array;if(s.normalized){const b=Td$1(a.constructor),_e=new Float32Array(a.length);for(let bt=0,rn=a.length;bt<rn;bt++)_e[bt]=a[bt]*b;a=_e}return a}_createCubicSplineTrackInterpolant(s){s.createInterpolant=function(a){const b=this instanceof Fs?r1:ev;return new b(this.times,this.values,this.getValueSize()/3,a)},s.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline=!0}}function p1(o,s,a){const b=s.attributes,_e=new Kt;if(b.POSITION!==void 0){const sn=a.json.accessors[b.POSITION],yn=sn.min,Pn=sn.max;if(yn!==void 0&&Pn!==void 0){if(_e.set(new C$2(yn[0],yn[1],yn[2]),new C$2(Pn[0],Pn[1],Pn[2])),sn.normalized){const zn=Td$1(Vr[sn.componentType]);_e.min.multiplyScalar(zn),_e.max.multiplyScalar(zn)}}else{console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");return}}else return;const bt=s.targets;if(bt!==void 0){const sn=new C$2,yn=new C$2;for(let Pn=0,zn=bt.length;Pn<zn;Pn++){const lr=bt[Pn];if(lr.POSITION!==void 0){const ar=a.json.accessors[lr.POSITION],cr=ar.min,hr=ar.max;if(cr!==void 0&&hr!==void 0){if(yn.setX(Math.max(Math.abs(cr[0]),Math.abs(hr[0]))),yn.setY(Math.max(Math.abs(cr[1]),Math.abs(hr[1]))),yn.setZ(Math.max(Math.abs(cr[2]),Math.abs(hr[2]))),ar.normalized){const es=Td$1(Vr[ar.componentType]);yn.multiplyScalar(es)}sn.max(yn)}else console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.")}}_e.expandByVector(sn)}o.boundingBox=_e;const rn=new bn;_e.getCenter(rn.center),rn.radius=_e.min.distanceTo(_e.max)/2,o.boundingSphere=rn}function pm(o,s,a){const b=s.attributes,_e=[];function bt(rn,sn){return a.getDependency("accessor",rn).then(function(yn){o.setAttribute(sn,yn)})}for(const rn in b){const sn=bd$1[rn]||rn.toLowerCase();sn in o.attributes||_e.push(bt(b[rn],sn))}if(s.indices!==void 0&&!o.index){const rn=a.getDependency("accessor",s.indices).then(function(sn){o.setIndex(sn)});_e.push(rn)}return ki$1(o,s),p1(o,s,a),Promise.all(_e).then(function(){return s.targets!==void 0?l1(o,s.targets,a):o})}class A1{constructor(s=4){this.pool=s,this.queue=[],this.workers=[],this.workersResolve=[],this.workerStatus=0}_initWorker(s){if(!this.workers[s]){const a=this.workerCreator();a.addEventListener("message",this._onMessage.bind(this,s)),this.workers[s]=a}}_getIdleWorker(){for(let s=0;s<this.pool;s++)if(!(this.workerStatus&1<<s))return s;return-1}_onMessage(s,a){const b=this.workersResolve[s];if(b&&b(a),this.queue.length){const{resolve:_e,msg:bt,transfer:rn}=this.queue.shift();this.workersResolve[s]=_e,this.workers[s].postMessage(bt,rn)}else this.workerStatus^=1<<s}setWorkerCreator(s){this.workerCreator=s}setWorkerLimit(s){this.pool=s}postMessage(s,a){return new Promise(b=>{const _e=this._getIdleWorker();_e!==-1?(this._initWorker(_e),this.workerStatus|=1<<_e,this.workersResolve[_e]=b,this.workers[_e].postMessage(s,a)):this.queue.push({resolve:b,msg:s,transfer:a})})}dispose(){this.workers.forEach(s=>s.terminate()),this.workersResolve.length=0,this.workers.length=0,this.queue.length=0,this.workerStatus=0}}const m1=0,g1=2,y1=1,v1$1=2,E1=0,tv=9,Of$1=15,nv=16,Qf$1=22,iv=37,kf$1=43,sv=76,rv=83,ov=97,av=100,lv=103,cv=109;class _1{constructor(){this.vkFormat=0,this.typeSize=1,this.pixelWidth=0,this.pixelHeight=0,this.pixelDepth=0,this.layerCount=0,this.faceCount=1,this.supercompressionScheme=0,this.levels=[],this.dataFormatDescriptor=[{vendorId:0,descriptorType:0,descriptorBlockSize:0,versionNumber:2,colorModel:0,colorPrimaries:1,transferFunction:2,flags:0,texelBlockDimension:[0,0,0,0],bytesPlane:[0,0,0,0,0,0,0,0],samples:[]}],this.keyValue={},this.globalData=null}}class wo{constructor(s,a,b,_e){this._dataView=new DataView(s.buffer,s.byteOffset+a,b),this._littleEndian=_e,this._offset=0}_nextUint8(){const s=this._dataView.getUint8(this._offset);return this._offset+=1,s}_nextUint16(){const s=this._dataView.getUint16(this._offset,this._littleEndian);return this._offset+=2,s}_nextUint32(){const s=this._dataView.getUint32(this._offset,this._littleEndian);return this._offset+=4,s}_nextUint64(){const s=this._dataView.getUint32(this._offset,this._littleEndian)+4294967296*this._dataView.getUint32(this._offset+4,this._littleEndian);return this._offset+=8,s}_nextInt32(){const s=this._dataView.getInt32(this._offset,this._littleEndian);return this._offset+=4,s}_skip(s){return this._offset+=s,this}_scan(s,a=0){const b=this._offset;let _e=0;for(;this._dataView.getUint8(this._offset)!==a&&_e<s;)_e++,this._offset++;return _e<s&&this._offset++,new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+b,_e)}}const an=[171,75,84,88,32,50,48,187,13,10,26,10];function Am(o){return typeof TextDecoder<"u"?new TextDecoder().decode(o):Buffer.from(o).toString("utf8")}function x1(o){const s=new Uint8Array(o.buffer,o.byteOffset,an.length);if(s[0]!==an[0]||s[1]!==an[1]||s[2]!==an[2]||s[3]!==an[3]||s[4]!==an[4]||s[5]!==an[5]||s[6]!==an[6]||s[7]!==an[7]||s[8]!==an[8]||s[9]!==an[9]||s[10]!==an[10]||s[11]!==an[11])throw new Error("Missing KTX 2.0 identifier.");const a=new _1,b=17*Uint32Array.BYTES_PER_ELEMENT,_e=new wo(o,an.length,b,!0);a.vkFormat=_e._nextUint32(),a.typeSize=_e._nextUint32(),a.pixelWidth=_e._nextUint32(),a.pixelHeight=_e._nextUint32(),a.pixelDepth=_e._nextUint32(),a.layerCount=_e._nextUint32(),a.faceCount=_e._nextUint32();const bt=_e._nextUint32();a.supercompressionScheme=_e._nextUint32();const rn=_e._nextUint32(),sn=_e._nextUint32(),yn=_e._nextUint32(),Pn=_e._nextUint32(),zn=_e._nextUint64(),lr=_e._nextUint64(),ar=new wo(o,an.length+b,3*bt*8,!0);for(let by=0;by<bt;by++)a.levels.push({levelData:new Uint8Array(o.buffer,o.byteOffset+ar._nextUint64(),ar._nextUint64()),uncompressedByteLength:ar._nextUint64()});const cr=new wo(o,rn,sn,!0),hr={vendorId:cr._skip(4)._nextUint16(),descriptorType:cr._nextUint16(),versionNumber:cr._nextUint16(),descriptorBlockSize:cr._nextUint16(),colorModel:cr._nextUint8(),colorPrimaries:cr._nextUint8(),transferFunction:cr._nextUint8(),flags:cr._nextUint8(),texelBlockDimension:[cr._nextUint8(),cr._nextUint8(),cr._nextUint8(),cr._nextUint8()],bytesPlane:[cr._nextUint8(),cr._nextUint8(),cr._nextUint8(),cr._nextUint8(),cr._nextUint8(),cr._nextUint8(),cr._nextUint8(),cr._nextUint8()],samples:[]},es=(hr.descriptorBlockSize/4-6)/4;for(let by=0;by<es;by++){const Al={bitOffset:cr._nextUint16(),bitLength:cr._nextUint8(),channelType:cr._nextUint8(),samplePosition:[cr._nextUint8(),cr._nextUint8(),cr._nextUint8(),cr._nextUint8()],sampleLower:-1/0,sampleUpper:1/0};64&Al.channelType?(Al.sampleLower=cr._nextInt32(),Al.sampleUpper=cr._nextInt32()):(Al.sampleLower=cr._nextUint32(),Al.sampleUpper=cr._nextUint32()),hr.samples[by]=Al}a.dataFormatDescriptor.length=0,a.dataFormatDescriptor.push(hr);const Ur=new wo(o,yn,Pn,!0);for(;Ur._offset<Pn;){const by=Ur._nextUint32(),Al=Ur._scan(by),_f=Am(Al),gy=Ur._scan(by-Al.byteLength);a.keyValue[_f]=_f.match(/^ktx/i)?Am(gy):gy,Ur._offset%4&&Ur._skip(4-Ur._offset%4)}if(lr<=0)return a;const Dr=new wo(o,zn,lr,!0),zr=Dr._nextUint16(),rs=Dr._nextUint16(),as=Dr._nextUint32(),os=Dr._nextUint32(),ls=Dr._nextUint32(),zs=Dr._nextUint32(),ho=[];for(let by=0;by<bt;by++)ho.push({imageFlags:Dr._nextUint32(),rgbSliceByteOffset:Dr._nextUint32(),rgbSliceByteLength:Dr._nextUint32(),alphaSliceByteOffset:Dr._nextUint32(),alphaSliceByteLength:Dr._nextUint32()});const ga=zn+Dr._offset,mo=ga+as,go=mo+os,yl=go+ls,Zl=new Uint8Array(o.buffer,o.byteOffset+ga,as),_d=new Uint8Array(o.buffer,o.byteOffset+mo,os),Ty=new Uint8Array(o.buffer,o.byteOffset+go,ls),yy=new Uint8Array(o.buffer,o.byteOffset+yl,zs);return a.globalData={endpointCount:zr,selectorCount:rs,imageDescs:ho,endpointsData:Zl,selectorsData:_d,tablesData:Ty,extendedData:yy},a}let qh$1,Ei$1,Bd$1;const $h$1={env:{emscripten_notify_memory_growth:function(o){Bd$1=new Uint8Array(Ei$1.exports.memory.buffer)}}};class S1{init(){return qh$1||(qh$1=typeof fetch<"u"?fetch("data:application/wasm;base64,"+mm).then(s=>s.arrayBuffer()).then(s=>WebAssembly.instantiate(s,$h$1)).then(this._init):WebAssembly.instantiate(Buffer.from(mm,"base64"),$h$1).then(this._init),qh$1)}_init(s){Ei$1=s.instance,$h$1.env.emscripten_notify_memory_growth(0)}decode(s,a=0){if(!Ei$1)throw new Error("ZSTDDecoder: Await .init() before decoding.");const b=s.byteLength,_e=Ei$1.exports.malloc(b);Bd$1.set(s,_e),a=a||Number(Ei$1.exports.ZSTD_findDecompressedSize(_e,b));const bt=Ei$1.exports.malloc(a),rn=Ei$1.exports.ZSTD_decompress(bt,a,_e,b),sn=Bd$1.slice(bt,bt+rn);return Ei$1.exports.free(_e),Ei$1.exports.free(bt),sn}}const mm="AGFzbQEAAAABpQEVYAF/AX9gAn9/AGADf39/AX9gBX9/f39/AX9gAX8AYAJ/fwF/YAR/f39/AX9gA39/fwBgBn9/f39/fwF/YAd/f39/f39/AX9gAn9/AX5gAn5+AX5gAABgBX9/f39/AGAGf39/f39/AGAIf39/f39/f38AYAl/f39/f39/f38AYAABf2AIf39/f39/f38Bf2ANf39/f39/f39/f39/fwF/YAF/AX4CJwEDZW52H2Vtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGgABANpaAEFAAAFAgEFCwACAQABAgIFBQcAAwABDgsBAQcAEhMHAAUBDAQEAAANBwQCAgYCBAgDAwMDBgEACQkHBgICAAYGAgQUBwYGAwIGAAMCAQgBBwUGCgoEEQAEBAEIAwgDBQgDEA8IAAcABAUBcAECAgUEAQCAAgYJAX8BQaCgwAILB2AHBm1lbW9yeQIABm1hbGxvYwAoBGZyZWUAJgxaU1REX2lzRXJyb3IAaBlaU1REX2ZpbmREZWNvbXByZXNzZWRTaXplAFQPWlNURF9kZWNvbXByZXNzAEoGX3N0YXJ0ACQJBwEAQQELASQKussBaA8AIAAgACgCBCABajYCBAsZACAAKAIAIAAoAgRBH3F0QQAgAWtBH3F2CwgAIABBiH9LC34BBH9BAyEBIAAoAgQiA0EgTQRAIAAoAggiASAAKAIQTwRAIAAQDQ8LIAAoAgwiAiABRgRAQQFBAiADQSBJGw8LIAAgASABIAJrIANBA3YiBCABIARrIAJJIgEbIgJrIgQ2AgggACADIAJBA3RrNgIEIAAgBCgAADYCAAsgAQsUAQF/IAAgARACIQIgACABEAEgAgv3AQECfyACRQRAIABCADcCACAAQQA2AhAgAEIANwIIQbh/DwsgACABNgIMIAAgAUEEajYCECACQQRPBEAgACABIAJqIgFBfGoiAzYCCCAAIAMoAAA2AgAgAUF/ai0AACIBBEAgAEEIIAEQFGs2AgQgAg8LIABBADYCBEF/DwsgACABNgIIIAAgAS0AACIDNgIAIAJBfmoiBEEBTQRAIARBAWtFBEAgACABLQACQRB0IANyIgM2AgALIAAgAS0AAUEIdCADajYCAAsgASACakF/ai0AACIBRQRAIABBADYCBEFsDwsgAEEoIAEQFCACQQN0ams2AgQgAgsWACAAIAEpAAA3AAAgACABKQAINwAICy8BAX8gAUECdEGgHWooAgAgACgCAEEgIAEgACgCBGprQR9xdnEhAiAAIAEQASACCyEAIAFCz9bTvtLHq9lCfiAAfEIfiUKHla+vmLbem55/fgsdAQF/IAAoAgggACgCDEYEfyAAKAIEQSBGBUEACwuCBAEDfyACQYDAAE8EQCAAIAEgAhBnIAAPCyAAIAJqIQMCQCAAIAFzQQNxRQRAAkAgAkEBSARAIAAhAgwBCyAAQQNxRQRAIAAhAgwBCyAAIQIDQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADTw0BIAJBA3ENAAsLAkAgA0F8cSIEQcAASQ0AIAIgBEFAaiIFSw0AA0AgAiABKAIANgIAIAIgASgCBDYCBCACIAEoAgg2AgggAiABKAIMNgIMIAIgASgCEDYCECACIAEoAhQ2AhQgAiABKAIYNgIYIAIgASgCHDYCHCACIAEoAiA2AiAgAiABKAIkNgIkIAIgASgCKDYCKCACIAEoAiw2AiwgAiABKAIwNgIwIAIgASgCNDYCNCACIAEoAjg2AjggAiABKAI8NgI8IAFBQGshASACQUBrIgIgBU0NAAsLIAIgBE8NAQNAIAIgASgCADYCACABQQRqIQEgAkEEaiICIARJDQALDAELIANBBEkEQCAAIQIMAQsgA0F8aiIEIABJBEAgACECDAELIAAhAgNAIAIgAS0AADoAACACIAEtAAE6AAEgAiABLQACOgACIAIgAS0AAzoAAyABQQRqIQEgAkEEaiICIARNDQALCyACIANJBEADQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADRw0ACwsgAAsMACAAIAEpAAA3AAALQQECfyAAKAIIIgEgACgCEEkEQEEDDwsgACAAKAIEIgJBB3E2AgQgACABIAJBA3ZrIgE2AgggACABKAAANgIAQQALDAAgACABKAIANgAAC/cCAQJ/AkAgACABRg0AAkAgASACaiAASwRAIAAgAmoiBCABSw0BCyAAIAEgAhALDwsgACABc0EDcSEDAkACQCAAIAFJBEAgAwRAIAAhAwwDCyAAQQNxRQRAIAAhAwwCCyAAIQMDQCACRQ0EIAMgAS0AADoAACABQQFqIQEgAkF/aiECIANBAWoiA0EDcQ0ACwwBCwJAIAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQhBSAGQQR2IQRBICAAdCIAQQFyIQkgASgCACEPQQAhAiADIQYCQANAIAlBAkggAiAPS3JFBEAgAiEHAkAgCARAA0AgBEH//wNxQf//A0YEQCAHQRhqIQcgBiAQSQR/IAZBAmoiBigAACAFdgUgBUEQaiEFIARBEHYLIQQMAQsLA0AgBEEDcSIIQQNGBEAgBUECaiEFIARBAnYhBCAHQQNqIQcMAQsLIAcgCGoiByAPSw0EIAVBAmohBQNAIAIgB0kEQCANIAJBAXRqQQA7AQAgAkEBaiECDAELCyAGIA5LQQAgBiAFQQN1aiIHIAxLG0UEQCAHKAAAIAVBB3EiBXYhBAwCCyAEQQJ2IQQLIAYhBwsCfyALQX9qIAQgAEF/anEiBiAAQQF0QX9qIgggCWsiEUkNABogBCAIcSIEQQAgESAEIABIG2shBiALCyEIIA0gAkEBdGogBkF/aiIEOwEAIAlBASAGayAEIAZBAUgbayEJA0AgCSAASARAIABBAXUhACALQX9qIQsMAQsLAn8gByAOS0EAIAcgBSAIaiIFQQN1aiIGIAxLG0UEQCAFQQdxDAELIAUgDCIGIAdrQQN0awshBSACQQFqIQIgBEUhCCAGKAAAIAVBH3F2IQQMAQsLQWwgCUEBRyAFQSBKcg0BGiABIAJBf2o2AgAgBiAFQQdqQQN1aiADawwBC0FQCyEAIApBEGokACAACwkAQQFBBSAAGwsMACAAIAEoAAA2AAALqgMBCn8jAEHwAGsiCiQAIAJBAWohDiAAQQhqIQtBgIAEIAVBf2p0QRB1IQxBACECQQEhBkEBIAV0IglBf2oiDyEIA0AgAiAORkUEQAJAIAEgAkEBdCINai8BACIHQf//A0YEQCALIAhBA3RqIAI2AgQgCEF/aiEIQQEhBwwBCyAGQQAgDCAHQRB0QRB1ShshBgsgCiANaiAHOwEAIAJBAWohAgwBCwsgACAFNgIEIAAgBjYCACAJQQN2IAlBAXZqQQNqIQxBACEAQQAhBkEAIQIDQCAGIA5GBEADQAJAIAAgCUYNACAKIAsgAEEDdGoiASgCBCIGQQF0aiICIAIvAQAiAkEBajsBACABIAUgAhAUayIIOgADIAEgAiAIQf8BcXQgCWs7AQAgASAEIAZBAnQiAmooAgA6AAIgASACIANqKAIANgIEIABBAWohAAwBCwsFIAEgBkEBdGouAQAhDUEAIQcDQCAHIA1ORQRAIAsgAkEDdGogBjYCBANAIAIgDGogD3EiAiAISw0ACyAHQQFqIQcMAQsLIAZBAWohBgwBCwsgCkHwAGokAAsjAEIAIAEQCSAAhUKHla+vmLbem55/fkLj3MqV/M7y9YV/fAsQACAAQn43AwggACABNgIACyQBAX8gAARAIAEoAgQiAgRAIAEoAgggACACEQEADwsgABAmCwsfACAAIAEgAi8BABAINgIAIAEQBBogACACQQRqNgIEC0oBAX9BoCAoAgAiASAAaiIAQX9MBEBBiCBBMDYCAEF/DwsCQCAAPwBBEHRNDQAgABBmDQBBiCBBMDYCAEF/DwtBoCAgADYCACABC9cBAQh/Qbp/IQoCQCACKAIEIgggAigCACIJaiIOIAEgAGtLDQBBbCEKIAkgBCADKAIAIgtrSw0AIAAgCWoiBCACKAIIIgxrIQ0gACABQWBqIg8gCyAJQQAQKSADIAkgC2o2AgACQAJAIAwgBCAFa00EQCANIQUMAQsgDCAEIAZrSw0CIAcgDSAFayIAaiIBIAhqIAdNBEAgBCABIAgQDxoMAgsgBCABQQAgAGsQDyEBIAIgACAIaiIINgIEIAEgAGshBAsgBCAPIAUgCEEBECkLIA4hCgsgCgubAgEBfyMAQYABayINJAAgDSADNgJ8AkAgAkEDSwRAQX8hCQwBCwJAAkACQAJAIAJBAWsOAwADAgELIAZFBEBBuH8hCQwEC0FsIQkgBS0AACICIANLDQMgACAHIAJBAnQiAmooAgAgAiAIaigCABA7IAEgADYCAEEBIQkMAwsgASAJNgIAQQAhCQwCCyAKRQRAQWwhCQwCC0EAIQkgC0UgDEEZSHINAUEIIAR0QQhqIQBBACECA0AgAiAATw0CIAJBQGshAgwAAAsAC0FsIQkgDSANQfwAaiANQfgAaiAFIAYQFSICEAMNACANKAJ4IgMgBEsNACAAIA0gDSgCfCAHIAggAxAYIAEgADYCACACIQkLIA1BgAFqJAAgCQsLACAAIAEgAhALGgsQACAALwAAIAAtAAJBEHRyCy8AAn9BuH8gAUEISQ0AGkFyIAAoAAQiAEF3Sw0AGkG4fyAAQQhqIgAgACABSxsLCwkAIAAgATsAAAsDAAELigYBBX8gACAAKAIAIgVBfnE2AgBBACAAIAVBAXZqQYQgKAIAIgQgAEYbIQECQAJAIAAoAgQiAkUNACACKAIAIgNBAXENACACQQhqIgUgA0EBdkF4aiIDQQggA0EISxtnQR9zQQJ0QYAfaiIDKAIARgRAIAMgAigCDDYCAAsgAigCCCIDBEAgAyACKAIMNgIECyACKAIMIgMEQCADIAIoAgg2AgALIAIgAigCACAAKAIAQX5xajYCAEGEICEAAkACQCABRQ0AIAEgAjYCBCABKAIAIgNBAXENASADQQF2QXhqIgNBCCADQQhLG2dBH3NBAnRBgB9qIgMoAgAgAUEIakYEQCADIAEoAgw2AgALIAEoAggiAwRAIAMgASgCDDYCBAsgASgCDCIDBEAgAyABKAIINgIAQYQgKAIAIQQLIAIgAigCACABKAIAQX5xajYCACABIARGDQAgASABKAIAQQF2akEEaiEACyAAIAI2AgALIAIoAgBBAXZBeGoiAEEIIABBCEsbZ0Efc0ECdEGAH2oiASgCACEAIAEgBTYCACACIAA2AgwgAkEANgIIIABFDQEgACAFNgIADwsCQCABRQ0AIAEoAgAiAkEBcQ0AIAJBAXZBeGoiAkEIIAJBCEsbZ0Efc0ECdEGAH2oiAigCACABQQhqRgRAIAIgASgCDDYCAAsgASgCCCICBEAgAiABKAIMNgIECyABKAIMIgIEQCACIAEoAgg2AgBBhCAoAgAhBAsgACAAKAIAIAEoAgBBfnFqIgI2AgACQCABIARHBEAgASABKAIAQQF2aiAANgIEIAAoAgAhAgwBC0GEICAANgIACyACQQF2QXhqIgFBCCABQQhLG2dBH3NBAnRBgB9qIgIoAgAhASACIABBCGoiAjYCACAAIAE2AgwgAEEANgIIIAFFDQEgASACNgIADwsgBUEBdkF4aiIBQQggAUEISxtnQR9zQQJ0QYAfaiICKAIAIQEgAiAAQQhqIgI2AgAgACABNgIMIABBADYCCCABRQ0AIAEgAjYCAAsLDgAgAARAIABBeGoQJQsLgAIBA38CQCAAQQ9qQXhxQYQgKAIAKAIAQQF2ayICEB1Bf0YNAAJAQYQgKAIAIgAoAgAiAUEBcQ0AIAFBAXZBeGoiAUEIIAFBCEsbZ0Efc0ECdEGAH2oiASgCACAAQQhqRgRAIAEgACgCDDYCAAsgACgCCCIBBEAgASAAKAIMNgIECyAAKAIMIgFFDQAgASAAKAIINgIAC0EBIQEgACAAKAIAIAJBAXRqIgI2AgAgAkEBcQ0AIAJBAXZBeGoiAkEIIAJBCEsbZ0Efc0ECdEGAH2oiAygCACECIAMgAEEIaiIDNgIAIAAgAjYCDCAAQQA2AgggAkUNACACIAM2AgALIAELtwIBA38CQAJAIABBASAAGyICEDgiAA0AAkACQEGEICgCACIARQ0AIAAoAgAiA0EBcQ0AIAAgA0EBcjYCACADQQF2QXhqIgFBCCABQQhLG2dBH3NBAnRBgB9qIgEoAgAgAEEIakYEQCABIAAoAgw2AgALIAAoAggiAQRAIAEgACgCDDYCBAsgACgCDCIBBEAgASAAKAIINgIACyACECchAkEAIQFBhCAoAgAhACACDQEgACAAKAIAQX5xNgIAQQAPCyACQQ9qQXhxIgMQHSICQX9GDQIgAkEHakF4cSIAIAJHBEAgACACaxAdQX9GDQMLAkBBhCAoAgAiAUUEQEGAICAANgIADAELIAAgATYCBAtBhCAgADYCACAAIANBAXRBAXI2AgAMAQsgAEUNAQsgAEEIaiEBCyABC7kDAQJ/IAAgA2ohBQJAIANBB0wEQANAIAAgBU8NAiAAIAItAAA6AAAgAEEBaiEAIAJBAWohAgwAAAsACyAEQQFGBEACQCAAIAJrIgZBB00EQCAAIAItAAA6AAAgACACLQABOgABIAAgAi0AAjoAAiAAIAItAAM6AAMgAEEEaiACIAZBAnQiBkHAHmooAgBqIgIQFyACIAZB4B5qKAIAayECDAELIAAgAhAMCyACQQhqIQIgAEEIaiEACwJAAkACQAJAIAUgAU0EQCAAIANqIQEgBEEBRyAAIAJrQQ9Kcg0BA0AgACACEAwgAkEIaiECIABBCGoiACABSQ0ACwwFCyAAIAFLBEAgACEBDAQLIARBAUcgACACa0EPSnINASAAIQMgAiEEA0AgAyAEEAwgBEEIaiEEIANBCGoiAyABSQ0ACwwCCwNAIAAgAhAHIAJBEGohAiAAQRBqIgAgAUkNAAsMAwsgACEDIAIhBANAIAMgBBAHIARBEGohBCADQRBqIgMgAUkNAAsLIAIgASAAa2ohAgsDQCABIAVPDQEgASACLQAAOgAAIAFBAWohASACQQFqIQIMAAALAAsLQQECfyAAIAAoArjgASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigCACACaiAAQQZ2IgFBAnRBsB5qKAIAaiAAQSBxIgBFaiABRSAAQQV2cWoFQbh/CwsdACAAKAKQ4gEQWiAAQQA2AqDiASAAQgA3A5DiAQu1AwEFfyMAQZACayIKJABBuH8hBgJAIAVFDQAgBCwAACIIQf8BcSEHAkAgCEF/TARAIAdBgn9qQQF2IgggBU8NAkFsIQYgB0GBf2oiBUGAAk8NAiAEQQFqIQdBACEGA0AgBiAFTwRAIAUhBiAIIQcMAwUgACAGaiAHIAZBAXZqIgQtAABBBHY6AAAgACAGQQFyaiAELQAAQQ9xOgAAIAZBAmohBgwBCwAACwALIAcgBU8NASAAIARBAWogByAKEFMiBhADDQELIAYhBEEAIQYgAUEAQTQQECEJQQAhBQNAIAQgBkcEQCAAIAZqIggtAAAiAUELSwRAQWwhBgwDBSAJIAFBAnRqIgEgASgCAEEBajYCACAGQQFqIQZBASAILQAAdEEBdSAFaiEFDAILAAsLQWwhBiAFRQ0AIAUQFEEBaiIBQQxLDQAgAyABNgIAQQFBASABdCAFayIDEBQiAXQgA0cNACAAIARqIAFBAWoiADoAACAJIABBAnRqIgAgACgCAEEBajYCACAJKAIEIgBBAkkgAEEBcXINACACIARBAWo2AgAgB0EBaiEGCyAKQZACaiQAIAYLxhEBDH8jAEHwAGsiBSQAQWwhCwJAIANBCkkNACACLwAAIQogAi8AAiEJIAIvAAQhByAFQQhqIAQQDgJAIAMgByAJIApqakEGaiIMSQ0AIAUtAAohCCAFQdgAaiACQQZqIgIgChAGIgsQAw0BIAVBQGsgAiAKaiICIAkQBiILEAMNASAFQShqIAIgCWoiAiAHEAYiCxADDQEgBUEQaiACIAdqIAMgDGsQBiILEAMNASAAIAFqIg9BfWohECAEQQRqIQZBASELIAAgAUEDakECdiIDaiIMIANqIgIgA2oiDiEDIAIhBCAMIQcDQCALIAMgEElxBEAgACAGIAVB2ABqIAgQAkECdGoiCS8BADsAACAFQdgAaiAJLQACEAEgCS0AAyELIAcgBiAFQUBrIAgQAkECdGoiCS8BADsAACAFQUBrIAktAAIQASAJLQADIQogBCAGIAVBKGogCBACQQJ0aiIJLwEAOwAAIAVBKGogCS0AAhABIAktAAMhCSADIAYgBUEQaiAIEAJBAnRqIg0vAQA7AAAgBUEQaiANLQACEAEgDS0AAyENIAAgC2oiCyAGIAVB2ABqIAgQAkECdGoiAC8BADsAACAFQdgAaiAALQACEAEgAC0AAyEAIAcgCmoiCiAGIAVBQGsgCBACQQJ0aiIHLwEAOwAAIAVBQGsgBy0AAhABIActAAMhByAEIAlqIgkgBiAFQShqIAgQAkECdGoiBC8BADsAACAFQShqIAQtAAIQASAELQADIQQgAyANaiIDIAYgBUEQaiAIEAJBAnRqIg0vAQA7AAAgBUEQaiANLQACEAEgACALaiEAIAcgCmohByAEIAlqIQQgAyANLQADaiEDIAVB2ABqEA0gBUFAaxANciAFQShqEA1yIAVBEGoQDXJFIQsMAQsLIAQgDksgByACS3INAEFsIQsgACAMSw0BIAxBfWohCQNAQQAgACAJSSAFQdgAahAEGwRAIAAgBiAFQdgAaiAIEAJBAnRqIgovAQA7AAAgBUHYAGogCi0AAhABIAAgCi0AA2oiACAGIAVB2ABqIAgQAkECdGoiCi8BADsAACAFQdgAaiAKLQACEAEgACAKLQADaiEADAEFIAxBfmohCgNAIAVB2ABqEAQgACAKS3JFBEAgACAGIAVB2ABqIAgQAkECdGoiCS8BADsAACAFQdgAaiAJLQACEAEgACAJLQADaiEADAELCwNAIAAgCk0EQCAAIAYgBUHYAGogCBACQQJ0aiIJLwEAOwAAIAVB2ABqIAktAAIQASAAIAktAANqIQAMAQsLAkAgACAMTw0AIAAgBiAFQdgAaiAIEAIiAEECdGoiDC0AADoAACAMLQADQQFGBEAgBUHYAGogDC0AAhABDAELIAUoAlxBH0sNACAFQdgAaiAGIABBAnRqLQACEAEgBSgCXEEhSQ0AIAVBIDYCXAsgAkF9aiEMA0BBACAHIAxJIAVBQGsQBBsEQCAHIAYgBUFAayAIEAJBAnRqIgAvAQA7AAAgBUFAayAALQACEAEgByAALQADaiIAIAYgBUFAayAIEAJBAnRqIgcvAQA7AAAgBUFAayAHLQACEAEgACAHLQADaiEHDAEFIAJBfmohDANAIAVBQGsQBCAHIAxLckUEQCAHIAYgBUFAayAIEAJBAnRqIgAvAQA7AAAgBUFAayAALQACEAEgByAALQADaiEHDAELCwNAIAcgDE0EQCAHIAYgBUFAayAIEAJBAnRqIgAvAQA7AAAgBUFAayAALQACEAEgByAALQADaiEHDAELCwJAIAcgAk8NACAHIAYgBUFAayAIEAIiAEECdGoiAi0AADoAACACLQADQQFGBEAgBUFAayACLQACEAEMAQsgBSgCREEfSw0AIAVBQGsgBiAAQQJ0ai0AAhABIAUoAkRBIUkNACAFQSA2AkQLIA5BfWohAgNAQQAgBCACSSAFQShqEAQbBEAgBCAGIAVBKGogCBACQQJ0aiIALwEAOwAAIAVBKGogAC0AAhABIAQgAC0AA2oiACAGIAVBKGogCBACQQJ0aiIELwEAOwAAIAVBKGogBC0AAhABIAAgBC0AA2ohBAwBBSAOQX5qIQIDQCAFQShqEAQgBCACS3JFBEAgBCAGIAVBKGogCBACQQJ0aiIALwEAOwAAIAVBKGogAC0AAhABIAQgAC0AA2ohBAwBCwsDQCAEIAJNBEAgBCAGIAVBKGogCBACQQJ0aiIALwEAOwAAIAVBKGogAC0AAhABIAQgAC0AA2ohBAwBCwsCQCAEIA5PDQAgBCAGIAVBKGogCBACIgBBAnRqIgItAAA6AAAgAi0AA0EBRgRAIAVBKGogAi0AAhABDAELIAUoAixBH0sNACAFQShqIAYgAEECdGotAAIQASAFKAIsQSFJDQAgBUEgNgIsCwNAQQAgAyAQSSAFQRBqEAQbBEAgAyAGIAVBEGogCBACQQJ0aiIALwEAOwAAIAVBEGogAC0AAhABIAMgAC0AA2oiACAGIAVBEGogCBACQQJ0aiICLwEAOwAAIAVBEGogAi0AAhABIAAgAi0AA2ohAwwBBSAPQX5qIQIDQCAFQRBqEAQgAyACS3JFBEAgAyAGIAVBEGogCBACQQJ0aiIALwEAOwAAIAVBEGogAC0AAhABIAMgAC0AA2ohAwwBCwsDQCADIAJNBEAgAyAGIAVBEGogCBACQQJ0aiIALwEAOwAAIAVBEGogAC0AAhABIAMgAC0AA2ohAwwBCwsCQCADIA9PDQAgAyAGIAVBEGogCBACIgBBAnRqIgItAAA6AAAgAi0AA0EBRgRAIAVBEGogAi0AAhABDAELIAUoAhRBH0sNACAFQRBqIAYgAEECdGotAAIQASAFKAIUQSFJDQAgBUEgNgIUCyABQWwgBUHYAGoQCiAFQUBrEApxIAVBKGoQCnEgBUEQahAKcRshCwwJCwAACwALAAALAAsAAAsACwAACwALQWwhCwsgBUHwAGokACALC7UEAQ5/IwBBEGsiBiQAIAZBBGogABAOQVQhBQJAIARB3AtJDQAgBi0ABCEHIANB8ARqQQBB7AAQECEIIAdBDEsNACADQdwJaiIJIAggBkEIaiAGQQxqIAEgAhAxIhAQA0UEQCAGKAIMIgQgB0sNASADQdwFaiEPIANBpAVqIREgAEEEaiESIANBqAVqIQEgBCEFA0AgBSICQX9qIQUgCCACQQJ0aigCAEUNAAsgAkEBaiEOQQEhBQNAIAUgDk9FBEAgCCAFQQJ0IgtqKAIAIQwgASALaiAKNgIAIAVBAWohBSAKIAxqIQoMAQsLIAEgCjYCAEEAIQUgBigCCCELA0AgBSALRkUEQCABIAUgCWotAAAiDEECdGoiDSANKAIAIg1BAWo2AgAgDyANQQF0aiINIAw6AAEgDSAFOgAAIAVBAWohBQwBCwtBACEBIANBADYCqAUgBEF/cyAHaiEJQQEhBQNAIAUgDk9FBEAgCCAFQQJ0IgtqKAIAIQwgAyALaiABNgIAIAwgBSAJanQgAWohASAFQQFqIQUMAQsLIAcgBEEBaiIBIAJrIgRrQQFqIQgDQEEBIQUgBCAIT0UEQANAIAUgDk9FBEAgBUECdCIJIAMgBEE0bGpqIAMgCWooAgAgBHY2AgAgBUEBaiEFDAELCyAEQQFqIQQMAQsLIBIgByAPIAogESADIAIgARBkIAZBAToABSAGIAc6AAYgACAGKAIENgIACyAQIQULIAZBEGokACAFC8ENAQt/IwBB8ABrIgUkAEFsIQkCQCADQQpJDQAgAi8AACEKIAIvAAIhDCACLwAEIQYgBUEIaiAEEA4CQCADIAYgCiAMampBBmoiDUkNACAFLQAKIQcgBUHYAGogAkEGaiICIAoQBiIJEAMNASAFQUBrIAIgCmoiAiAMEAYiCRADDQEgBUEoaiACIAxqIgIgBhAGIgkQAw0BIAVBEGogAiAGaiADIA1rEAYiCRADDQEgACABaiIOQX1qIQ8gBEEEaiEGQQEhCSAAIAFBA2pBAnYiAmoiCiACaiIMIAJqIg0hAyAMIQQgCiECA0AgCSADIA9JcQRAIAYgBUHYAGogBxACQQF0aiIILQAAIQsgBUHYAGogCC0AARABIAAgCzoAACAGIAVBQGsgBxACQQF0aiIILQAAIQsgBUFAayAILQABEAEgAiALOgAAIAYgBUEoaiAHEAJBAXRqIggtAAAhCyAFQShqIAgtAAEQASAEIAs6AAAgBiAFQRBqIAcQAkEBdGoiCC0AACELIAVBEGogCC0AARABIAMgCzoAACAGIAVB2ABqIAcQAkEBdGoiCC0AACELIAVB2ABqIAgtAAEQASAAIAs6AAEgBiAFQUBrIAcQAkEBdGoiCC0AACELIAVBQGsgCC0AARABIAIgCzoAASAGIAVBKGogBxACQQF0aiIILQAAIQsgBUEoaiAILQABEAEgBCALOgABIAYgBUEQaiAHEAJBAXRqIggtAAAhCyAFQRBqIAgtAAEQASADIAs6AAEgA0ECaiEDIARBAmohBCACQQJqIQIgAEECaiEAIAkgBUHYAGoQDUVxIAVBQGsQDUVxIAVBKGoQDUVxIAVBEGoQDUVxIQkMAQsLIAQgDUsgAiAMS3INAEFsIQkgACAKSw0BIApBfWohCQNAIAVB2ABqEAQgACAJT3JFBEAgBiAFQdgAaiAHEAJBAXRqIggtAAAhCyAFQdgAaiAILQABEAEgACALOgAAIAYgBUHYAGogBxACQQF0aiIILQAAIQsgBUHYAGogCC0AARABIAAgCzoAASAAQQJqIQAMAQsLA0AgBUHYAGoQBCAAIApPckUEQCAGIAVB2ABqIAcQAkEBdGoiCS0AACEIIAVB2ABqIAktAAEQASAAIAg6AAAgAEEBaiEADAELCwNAIAAgCkkEQCAGIAVB2ABqIAcQAkEBdGoiCS0AACEIIAVB2ABqIAktAAEQASAAIAg6AAAgAEEBaiEADAELCyAMQX1qIQADQCAFQUBrEAQgAiAAT3JFBEAgBiAFQUBrIAcQAkEBdGoiCi0AACEJIAVBQGsgCi0AARABIAIgCToAACAGIAVBQGsgBxACQQF0aiIKLQAAIQkgBUFAayAKLQABEAEgAiAJOgABIAJBAmohAgwBCwsDQCAFQUBrEAQgAiAMT3JFBEAgBiAFQUBrIAcQAkEBdGoiAC0AACEKIAVBQGsgAC0AARABIAIgCjoAACACQQFqIQIMAQsLA0AgAiAMSQRAIAYgBUFAayAHEAJBAXRqIgAtAAAhCiAFQUBrIAAtAAEQASACIAo6AAAgAkEBaiECDAELCyANQX1qIQADQCAFQShqEAQgBCAAT3JFBEAgBiAFQShqIAcQAkEBdGoiAi0AACEKIAVBKGogAi0AARABIAQgCjoAACAGIAVBKGogBxACQQF0aiICLQAAIQogBUEoaiACLQABEAEgBCAKOgABIARBAmohBAwBCwsDQCAFQShqEAQgBCANT3JFBEAgBiAFQShqIAcQAkEBdGoiAC0AACECIAVBKGogAC0AARABIAQgAjoAACAEQQFqIQQMAQsLA0AgBCANSQRAIAYgBUEoaiAHEAJBAXRqIgAtAAAhAiAFQShqIAAtAAEQASAEIAI6AAAgBEEBaiEEDAELCwNAIAVBEGoQBCADIA9PckUEQCAGIAVBEGogBxACQQF0aiIALQAAIQIgBUEQaiAALQABEAEgAyACOgAAIAYgBUEQaiAHEAJBAXRqIgAtAAAhAiAFQRBqIAAtAAEQASADIAI6AAEgA0ECaiEDDAELCwNAIAVBEGoQBCADIA5PckUEQCAGIAVBEGogBxACQQF0aiIALQAAIQIgBUEQaiAALQABEAEgAyACOgAAIANBAWohAwwBCwsDQCADIA5JBEAgBiAFQRBqIAcQAkEBdGoiAC0AACECIAVBEGogAC0AARABIAMgAjoAACADQQFqIQMMAQsLIAFBbCAFQdgAahAKIAVBQGsQCnEgBUEoahAKcSAFQRBqEApxGyEJDAELQWwhCQsgBUHwAGokACAJC8oCAQR/IwBBIGsiBSQAIAUgBBAOIAUtAAIhByAFQQhqIAIgAxAGIgIQA0UEQCAEQQRqIQIgACABaiIDQX1qIQQDQCAFQQhqEAQgACAET3JFBEAgAiAFQQhqIAcQAkEBdGoiBi0AACEIIAVBCGogBi0AARABIAAgCDoAACACIAVBCGogBxACQQF0aiIGLQAAIQggBUEIaiAGLQABEAEgACAIOgABIABBAmohAAwBCwsDQCAFQQhqEAQgACADT3JFBEAgAiAFQQhqIAcQAkEBdGoiBC0AACEGIAVBCGogBC0AARABIAAgBjoAACAAQQFqIQAMAQsLA0AgACADT0UEQCACIAVBCGogBxACQQF0aiIELQAAIQYgBUEIaiAELQABEAEgACAGOgAAIABBAWohAAwBCwsgAUFsIAVBCGoQChshAgsgBUEgaiQAIAILtgMBCX8jAEEQayIGJAAgBkEANgIMIAZBADYCCEFUIQQCQAJAIANBQGsiDCADIAZBCGogBkEMaiABIAIQMSICEAMNACAGQQRqIAAQDiAGKAIMIgcgBi0ABEEBaksNASAAQQRqIQogBkEAOgAFIAYgBzoABiAAIAYoAgQ2AgAgB0EBaiEJQQEhBANAIAQgCUkEQCADIARBAnRqIgEoAgAhACABIAU2AgAgACAEQX9qdCAFaiEFIARBAWohBAwBCwsgB0EBaiEHQQAhBSAGKAIIIQkDQCAFIAlGDQEgAyAFIAxqLQAAIgRBAnRqIgBBASAEdEEBdSILIAAoAgAiAWoiADYCACAHIARrIQhBACEEAkAgC0EDTQRAA0AgBCALRg0CIAogASAEakEBdGoiACAIOgABIAAgBToAACAEQQFqIQQMAAALAAsDQCABIABPDQEgCiABQQF0aiIEIAg6AAEgBCAFOgAAIAQgCDoAAyAEIAU6AAIgBCAIOgAFIAQgBToABCAEIAg6AAcgBCAFOgAGIAFBBGohAQwAAAsACyAFQQFqIQUMAAALAAsgAiEECyAGQRBqJAAgBAutAQECfwJAQYQgKAIAIABHIAAoAgBBAXYiAyABa0F4aiICQXhxQQhHcgR/IAIFIAMQJ0UNASACQQhqC0EQSQ0AIAAgACgCACICQQFxIAAgAWpBD2pBeHEiASAAa0EBdHI2AgAgASAANgIEIAEgASgCAEEBcSAAIAJBAXZqIAFrIgJBAXRyNgIAQYQgIAEgAkH/////B3FqQQRqQYQgKAIAIABGGyABNgIAIAEQJQsLygIBBX8CQAJAAkAgAEEIIABBCEsbZ0EfcyAAaUEBR2oiAUEESSAAIAF2cg0AIAFBAnRB/B5qKAIAIgJFDQADQCACQXhqIgMoAgBBAXZBeGoiBSAATwRAIAIgBUEIIAVBCEsbZ0Efc0ECdEGAH2oiASgCAEYEQCABIAIoAgQ2AgALDAMLIARBHksNASAEQQFqIQQgAigCBCICDQALC0EAIQMgAUEgTw0BA0AgAUECdEGAH2ooAgAiAkUEQCABQR5LIQIgAUEBaiEBIAJFDQEMAwsLIAIgAkF4aiIDKAIAQQF2QXhqIgFBCCABQQhLG2dBH3NBAnRBgB9qIgEoAgBGBEAgASACKAIENgIACwsgAigCACIBBEAgASACKAIENgIECyACKAIEIgEEQCABIAIoAgA2AgALIAMgAygCAEEBcjYCACADIAAQNwsgAwvhCwINfwV+IwBB8ABrIgckACAHIAAoAvDhASIINgJcIAEgAmohDSAIIAAoAoDiAWohDwJAAkAgBUUEQCABIQQMAQsgACgCxOABIRAgACgCwOABIREgACgCvOABIQ4gAEEBNgKM4QFBACEIA0AgCEEDRwRAIAcgCEECdCICaiAAIAJqQazQAWooAgA2AkQgCEEBaiEIDAELC0FsIQwgB0EYaiADIAQQBhADDQEgB0EsaiAHQRhqIAAoAgAQEyAHQTRqIAdBGGogACgCCBATIAdBPGogB0EYaiAAKAIEEBMgDUFgaiESIAEhBEEAIQwDQCAHKAIwIAcoAixBA3RqKQIAIhRCEIinQf8BcSEIIAcoAkAgBygCPEEDdGopAgAiFUIQiKdB/wFxIQsgBygCOCAHKAI0QQN0aikCACIWQiCIpyEJIBVCIIghFyAUQiCIpyECAkAgFkIQiKdB/wFxIgNBAk8EQAJAIAZFIANBGUlyRQRAIAkgB0EYaiADQSAgBygCHGsiCiAKIANLGyIKEAUgAyAKayIDdGohCSAHQRhqEAQaIANFDQEgB0EYaiADEAUgCWohCQwBCyAHQRhqIAMQBSAJaiEJIAdBGGoQBBoLIAcpAkQhGCAHIAk2AkQgByAYNwNIDAELAkAgA0UEQCACBEAgBygCRCEJDAMLIAcoAkghCQwBCwJAAkAgB0EYakEBEAUgCSACRWpqIgNBA0YEQCAHKAJEQX9qIgMgA0VqIQkMAQsgA0ECdCAHaigCRCIJIAlFaiEJIANBAUYNAQsgByAHKAJINgJMCwsgByAHKAJENgJIIAcgCTYCRAsgF6chAyALBEAgB0EYaiALEAUgA2ohAwsgCCALakEUTwRAIAdBGGoQBBoLIAgEQCAHQRhqIAgQBSACaiECCyAHQRhqEAQaIAcgB0EYaiAUQhiIp0H/AXEQCCAUp0H//wNxajYCLCAHIAdBGGogFUIYiKdB/wFxEAggFadB//8DcWo2AjwgB0EYahAEGiAHIAdBGGogFkIYiKdB/wFxEAggFqdB//8DcWo2AjQgByACNgJgIAcoAlwhCiAHIAk2AmggByADNgJkAkACQAJAIAQgAiADaiILaiASSw0AIAIgCmoiEyAPSw0AIA0gBGsgC0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdBKGogACgCBBATQQAhBCAHQeAAaiEMIAdB5ABqIQoDQCAHQShqEARBAksgBCAXTnJFBEAgBygCQCAHKAI8QQN0aikCACIdQhCIp0H/AXEhCyAHKAJQIAcoAkxBA3RqKQIAIh5CEIinQf8BcSEJIAcoAkggBygCREEDdGopAgAiH0IgiKchCCAeQiCIISAgHUIgiKchAgJAIB9CEIinQf8BcSIDQQJPBEACQCAGRSADQRlJckUEQCAIIAdBKGogA0EgIAcoAixrIg0gDSADSxsiDRAFIAMgDWsiA3RqIQggB0EoahAEGiADRQ0BIAdBKGogAxAFIAhqIQgMAQsgB0EoaiADEAUgCGohCCAHQShqEAQaCyAHKQJUISEgByAINgJUIAcgITcDWAwBCwJAIANFBEAgAgRAIAcoAlQhCAwDCyAHKAJYIQgMAQsCQAJAIAdBKGpBARAFIAggAkVqaiIDQQNGBEAgBygCVEF/aiIDIANFaiEIDAELIANBAnQgB2ooAlQiCCAIRWohCCADQQFGDQELIAcgBygCWDYCXAsLIAcgBygCVDYCWCAHIAg2AlQLICCnIQMgCQRAIAdBKGogCRAFIANqIQMLIAkgC2pBFE8EQCAHQShqEAQaCyALBEAgB0EoaiALEAUgAmohAgsgB0EoahAEGiAHIAcoAmggAmoiCSADajYCaCAKIAwgCCAJSxsoAgAhDSAHIAdBKGogHUIYiKdB/wFxEAggHadB//8DcWo2AjwgByAHQShqIB5CGIinQf8BcRAIIB6nQf//A3FqNgJMIAdBKGoQBBogB0EoaiAfQhiIp0H/AXEQCCEOIAdB8ABqIARBBHRqIgsgCSANaiAIazYCDCALIAg2AgggCyADNgIEIAsgAjYCACAHIA4gH6dB//8DcWo2AkQgBEEBaiEEDAELCyAEIBdIDQEgEkFgaiEYIAdB4ABqIRogB0HkAGohGyABIQMDQCAHQShqEARBAksgBCAFTnJFBEAgBygCQCAHKAI8QQN0aikCACIdQhCIp0H/AXEhCyAHKAJQIAcoAkxBA3RqKQIAIh5CEIinQf8BcSEIIAcoAkggBygCREEDdGopAgAiH0IgiKchCSAeQiCIISAgHUIgiKchDAJAIB9CEIinQf8BcSICQQJPBEACQCAGRSACQRlJckUEQCAJIAdBKGogAkEgIAcoAixrIgogCiACSxsiChAFIAIgCmsiAnRqIQkgB0EoahAEGiACRQ0BIAdBKGogAhAFIAlqIQkMAQsgB0EoaiACEAUgCWohCSAHQShqEAQaCyAHKQJUISEgByAJNgJUIAcgITcDWAwBCwJAIAJFBEAgDARAIAcoAlQhCQwDCyAHKAJYIQkMAQsCQAJAIAdBKGpBARAFIAkgDEVqaiICQQNGBEAgBygCVEF/aiICIAJFaiEJDAELIAJBAnQgB2ooAlQiCSAJRWohCSACQQFGDQELIAcgBygCWDYCXAsLIAcgBygCVDYCWCAHIAk2AlQLICCnIRQgCARAIAdBKGogCBAFIBRqIRQLIAggC2pBFE8EQCAHQShqEAQaCyALBEAgB0EoaiALEAUgDGohDAsgB0EoahAEGiAHIAcoAmggDGoiGSAUajYCaCAbIBogCSAZSxsoAgAhHCAHIAdBKGogHUIYiKdB/wFxEAggHadB//8DcWo2AjwgByAHQShqIB5CGIinQf8BcRAIIB6nQf//A3FqNgJMIAdBKGoQBBogByAHQShqIB9CGIinQf8BcRAIIB+nQf//A3FqNgJEIAcgB0HwAGogBEEDcUEEdGoiDSkDCCIdNwPIASAHIA0pAwAiHjcDwAECQAJAAkAgBygCvAEiDiAepyICaiIWIBNLDQAgAyAHKALEASIKIAJqIgtqIBhLDQAgEiADayALQSBqTw0BCyAHIAcpA8gBNwMQIAcgBykDwAE3AwggAyASIAdBCGogB0G8AWogEyAPIBUgERAeIQsMAQsgAiADaiEIIAMgDhAHIAJBEU8EQCADQRBqIQIDQCACIA5BEGoiDhAHIAJBEGoiAiAISQ0ACwsgCCAdpyIOayECIAcgFjYCvAEgDiAIIA9rSwRAIA4gCCAVa0sEQEFsIQsMAgsgESACIA9rIgJqIhYgCmogEU0EQCAIIBYgChAPGgwCCyAIIBZBACACaxAPIQggByACIApqIgo2AsQBIAggAmshCCAPIQILIA5BEE8EQCAIIApqIQoDQCAIIAIQByACQRBqIQIgCEEQaiIIIApJDQALDAELAkAgDkEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgDkECdCIKQcAeaigCAGoiAhAXIAIgCkHgHmooAgBrIQIgBygCxAEhCgwBCyAIIAIQDAsgCkEJSQ0AIAggCmohCiAIQQhqIgggAkEIaiICa0EPTARAA0AgCCACEAwgAkEIaiECIAhBCGoiCCAKSQ0ADAIACwALA0AgCCACEAcgAkEQaiECIAhBEGoiCCAKSQ0ACwsgCxADBEAgCyEQDAQFIA0gDDYCACANIBkgHGogCWs2AgwgDSAJNgIIIA0gFDYCBCAEQQFqIQQgAyALaiEDDAILAAsLIAQgBUgNASAEIBdrIQtBACEEA0AgCyAFSARAIAcgB0HwAGogC0EDcUEEdGoiAikDCCIdNwPIASAHIAIpAwAiHjcDwAECQAJAAkAgBygCvAEiDCAepyICaiIKIBNLDQAgAyAHKALEASIJIAJqIhBqIBhLDQAgEiADayAQQSBqTw0BCyAHIAcpA8gBNwMgIAcgBykDwAE3AxggAyASIAdBGGogB0G8AWogEyAPIBUgERAeIRAMAQsgAiADaiEIIAMgDBAHIAJBEU8EQCADQRBqIQIDQCACIAxBEGoiDBAHIAJBEGoiAiAISQ0ACwsgCCAdpyIGayECIAcgCjYCvAEgBiAIIA9rSwRAIAYgCCAVa0sEQEFsIRAMAgsgESACIA9rIgJqIgwgCWogEU0EQCAIIAwgCRAPGgwCCyAIIAxBACACaxAPIQggByACIAlqIgk2AsQBIAggAmshCCAPIQILIAZBEE8EQCAIIAlqIQYDQCAIIAIQByACQRBqIQIgCEEQaiIIIAZJDQALDAELAkAgBkEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgBkECdCIGQcAeaigCAGoiAhAXIAIgBkHgHmooAgBrIQIgBygCxAEhCQwBCyAIIAIQDAsgCUEJSQ0AIAggCWohBiAIQQhqIgggAkEIaiICa0EPTARAA0AgCCACEAwgAkEIaiECIAhBCGoiCCAGSQ0ADAIACwALA0AgCCACEAcgAkEQaiECIAhBEGoiCCAGSQ0ACwsgEBADDQMgC0EBaiELIAMgEGohAwwBCwsDQCAEQQNHBEAgACAEQQJ0IgJqQazQAWogAiAHaigCVDYCACAEQQFqIQQMAQsLIAcoArwBIQgLQbp/IRAgEyAIayIAIBIgA2tLDQAgAwR/IAMgCCAAEAsgAGoFQQALIAFrIRALIAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY0AAQMyIFEAMiBg0AIANBHzYCfCADIANB/ABqIANB+ABqIAQgBCAFaiAGGyIEIAEgAmoiAiAEaxAVIgUQAw0AIAMoAnwiBkEfSw0AIAMoAngiB0EJTw0AIABBiCBqIAMgBkGAC0GADCAHEBggA0E0NgJ8IAMgA0H8AGogA0H4AGogBCAFaiIEIAIgBGsQFSIFEAMNACADKAJ8IgZBNEsNACADKAJ4IgdBCk8NACAAQZAwaiADIAZBgA1B4A4gBxAYIANBIzYCfCADIANB/ABqIANB+ABqIAQgBWoiBCACIARrEBUiBRADDQAgAygCfCIGQSNLDQAgAygCeCIHQQpPDQAgACADIAZBwBBB0BEgBxAYIAQgBWoiBEEMaiIFIAJLDQAgAiAFayEFQQAhAgNAIAJBA0cEQCAEKAAAIgZBf2ogBU8NAiAAIAJBAnRqQZzQAWogBjYCACACQQFqIQIgBEEEaiEEDAELCyAEIAFrIQgLIANBgAFqJAAgCAtGAQN/IABBCGohAyAAKAIEIQJBACEAA0AgACACdkUEQCABIAMgAEEDdGotAAJBFktqIQEgAEEBaiEADAELCyABQQggAmt0C4YDAQV/Qbh/IQcCQCADRQ0AIAItAAAiBEUEQCABQQA2AgBBAUG4fyADQQFGGw8LAn8gAkEBaiIFIARBGHRBGHUiBkF/Sg0AGiAGQX9GBEAgA0EDSA0CIAUvAABBgP4BaiEEIAJBA2oMAQsgA0ECSA0BIAItAAEgBEEIdHJBgIB+aiEEIAJBAmoLIQUgASAENgIAIAVBAWoiASACIANqIgNLDQBBbCEHIABBEGogACAFLQAAIgVBBnZBI0EJIAEgAyABa0HAEEHQEUHwEiAAKAKM4QEgACgCnOIBIAQQHyIGEAMiCA0AIABBmCBqIABBCGogBUEEdkEDcUEfQQggASABIAZqIAgbIgEgAyABa0GAC0GADEGAFyAAKAKM4QEgACgCnOIBIAQQHyIGEAMiCA0AIABBoDBqIABBBGogBUECdkEDcUE0QQkgASABIAZqIAgbIgEgAyABa0GADUHgDkGQGSAAKAKM4QEgACgCnOIBIAQQHyIAEAMNACAAIAFqIAJrIQcLIAcLrQMBCn8jAEGABGsiCCQAAn9BUiACQf8BSw0AGkFUIANBDEsNABogAkEBaiELIABBBGohCUGAgAQgA0F/anRBEHUhCkEAIQJBASEEQQEgA3QiB0F/aiIMIQUDQCACIAtGRQRAAkAgASACQQF0Ig1qLwEAIgZB//8DRgRAIAkgBUECdGogAjoAAiAFQX9qIQVBASEGDAELIARBACAKIAZBEHRBEHVKGyEECyAIIA1qIAY7AQAgAkEBaiECDAELCyAAIAQ7AQIgACADOwEAIAdBA3YgB0EBdmpBA2ohBkEAIQRBACECA0AgBCALRkUEQCABIARBAXRqLgEAIQpBACEAA0AgACAKTkUEQCAJIAJBAnRqIAQ6AAIDQCACIAZqIAxxIgIgBUsNAAsgAEEBaiEADAELCyAEQQFqIQQMAQsLQX8gAg0AGkEAIQIDfyACIAdGBH9BAAUgCCAJIAJBAnRqIgAtAAJBAXRqIgEgAS8BACIBQQFqOwEAIAAgAyABEBRrIgU6AAMgACABIAVB/wFxdCAHazsBACACQQFqIQIMAQsLCyEFIAhBgARqJAAgBQvjBgEIf0FsIQcCQCACQQNJDQACQAJAAkACQCABLQAAIgNBA3EiCUEBaw4DAwEAAgsgACgCiOEBDQBBYg8LIAJBBUkNAkEDIQYgASgAACEFAn8CQAJAIANBAnZBA3EiCEF+aiIEQQFNBEAgBEEBaw0BDAILIAVBDnZB/wdxIQQgBUEEdkH/B3EhAyAIRQwCCyAFQRJ2IQRBBCEGIAVBBHZB//8AcSEDQQAMAQsgBUEEdkH//w9xIgNBgIAISw0DIAEtAARBCnQgBUEWdnIhBEEFIQZBAAshBSAEIAZqIgogAksNAgJAIANBgQZJDQAgACgCnOIBRQ0AQQAhAgNAIAJBg4ABSw0BIAJBQGshAgwAAAsACwJ/IAlBA0YEQCABIAZqIQEgAEHw4gFqIQIgACgCDCEGIAUEQCACIAMgASAEIAYQXwwCCyACIAMgASAEIAYQXQwBCyAAQbjQAWohAiABIAZqIQEgAEHw4gFqIQYgAEGo0ABqIQggBQRAIAggBiADIAEgBCACEF4MAQsgCCAGIAMgASAEIAIQXAsQAw0CIAAgAzYCgOIBIABBATYCiOEBIAAgAEHw4gFqNgLw4QEgCUECRgRAIAAgAEGo0ABqNgIMCyAAIANqIgBBiOMBakIANwAAIABBgOMBakIANwAAIABB+OIBakIANwAAIABB8OIBakIANwAAIAoPCwJ/AkACQAJAIANBAnZBA3FBf2oiBEECSw0AIARBAWsOAgACAQtBASEEIANBA3YMAgtBAiEEIAEvAABBBHYMAQtBAyEEIAEQIUEEdgsiAyAEaiIFQSBqIAJLBEAgBSACSw0CIABB8OIBaiABIARqIAMQCyEBIAAgAzYCgOIBIAAgATYC8OEBIAEgA2oiAEIANwAYIABCADcAECAAQgA3AAggAEIANwAAIAUPCyAAIAM2AoDiASAAIAEgBGo2AvDhASAFDwsCfwJAAkACQCADQQJ2QQNxQX9qIgRBAksNACAEQQFrDgIAAgELQQEhByADQQN2DAILQQIhByABLwAAQQR2DAELIAJBBEkgARAhIgJBj4CAAUtyDQFBAyEHIAJBBHYLIQIgAEHw4gFqIAEgB2otAAAgAkEgahAQIQEgACACNgKA4gEgACABNgLw4QEgB0EBaiEHCyAHC0sAIABC+erQ0OfJoeThADcDICAAQgA3AxggAELP1tO+0ser2UI3AxAgAELW64Lu6v2J9eAANwMIIABCADcDACAAQShqQQBBKBAQGgviAgICfwV+IABBKGoiASAAKAJIaiECAn4gACkDACIDQiBaBEAgACkDECIEQgeJIAApAwgiBUIBiXwgACkDGCIGQgyJfCAAKQMgIgdCEol8IAUQGSAEEBkgBhAZIAcQGQwBCyAAKQMYQsXP2bLx5brqJ3wLIAN8IQMDQCABQQhqIgAgAk0EQEIAIAEpAAAQCSADhUIbiUKHla+vmLbem55/fkLj3MqV/M7y9YV/fCEDIAAhAQwBCwsCQCABQQRqIgAgAksEQCABIQAMAQsgASgAAK1Ch5Wvr5i23puef34gA4VCF4lCz9bTvtLHq9lCfkL5893xmfaZqxZ8IQMLA0AgACACSQRAIAAxAABCxc/ZsvHluuonfiADhUILiUKHla+vmLbem55/fiEDIABBAWohAAwBCwsgA0IhiCADhULP1tO+0ser2UJ+IgNCHYggA4VC+fPd8Zn2masWfiIDQiCIIAOFC+8CAgJ/BH4gACAAKQMAIAKtfDcDAAJAAkAgACgCSCIDIAJqIgRBH00EQCABRQ0BIAAgA2pBKGogASACECAgACgCSCACaiEEDAELIAEgAmohAgJ/IAMEQCAAQShqIgQgA2ogAUEgIANrECAgACAAKQMIIAQpAAAQCTcDCCAAIAApAxAgACkAMBAJNwMQIAAgACkDGCAAKQA4EAk3AxggACAAKQMgIABBQGspAAAQCTcDICAAKAJIIQMgAEEANgJIIAEgA2tBIGohAQsgAUEgaiACTQsEQCACQWBqIQMgACkDICEFIAApAxghBiAAKQMQIQcgACkDCCEIA0AgCCABKQAAEAkhCCAHIAEpAAgQCSEHIAYgASkAEBAJIQYgBSABKQAYEAkhBSABQSBqIgEgA00NAAsgACAFNwMgIAAgBjcDGCAAIAc3AxAgACAINwMICyABIAJPDQEgAEEoaiABIAIgAWsiBBAgCyAAIAQ2AkgLCy8BAX8gAEUEQEG2f0EAIAMbDwtBun8hBCADIAFNBH8gACACIAMQEBogAwVBun8LCy8BAX8gAEUEQEG2f0EAIAMbDwtBun8hBCADIAFNBH8gACACIAMQCxogAwVBun8LC6gCAQZ/IwBBEGsiByQAIABB2OABaikDAEKAgIAQViEIQbh/IQUCQCAEQf//B0sNACAAIAMgBBBCIgUQAyIGDQAgACgCnOIBIQkgACAHQQxqIAMgAyAFaiAGGyIKIARBACAFIAYbayIGEEAiAxADBEAgAyEFDAELIAcoAgwhBCABRQRAQbp/IQUgBEEASg0BCyAGIANrIQUgAyAKaiEDAkAgCQRAIABBADYCnOIBDAELAkACQAJAIARBBUgNACAAQdjgAWopAwBCgICACFgNAAwBCyAAQQA2ApziAQwBCyAAKAIIED8hBiAAQQA2ApziASAGQRRPDQELIAAgASACIAMgBSAEIAgQOSEFDAELIAAgASACIAMgBSAEIAgQOiEFCyAHQRBqJAAgBQtnACAAQdDgAWogASACIAAoAuzhARAuIgEQAwRAIAEPC0G4fyECAkAgAQ0AIABB7OABaigCACIBBEBBYCECIAAoApjiASABRw0BC0EAIQIgAEHw4AFqKAIARQ0AIABBkOEBahBDCyACCycBAX8QVyIERQRAQUAPCyAEIAAgASACIAMgBBBLEE8hACAEEFYgAAs/AQF/AkACQAJAIAAoAqDiAUEBaiIBQQJLDQAgAUEBaw4CAAECCyAAEDBBAA8LIABBADYCoOIBCyAAKAKU4gELvAMCB38BfiMAQRBrIgkkAEG4fyEGAkAgBCgCACIIQQVBCSAAKALs4QEiBRtJDQAgAygCACIHQQFBBSAFGyAFEC8iBRADBEAgBSEGDAELIAggBUEDakkNACAAIAcgBRBJIgYQAw0AIAEgAmohCiAAQZDhAWohCyAIIAVrIQIgBSAHaiEHIAEhBQNAIAcgAiAJECwiBhADDQEgAkF9aiICIAZJBEBBuH8hBgwCCyAJKAIAIghBAksEQEFsIQYMAgsgB0EDaiEHAn8CQAJAAkAgCEEBaw4CAgABCyAAIAUgCiAFayAHIAYQSAwCCyAFIAogBWsgByAGEEcMAQsgBSAKIAVrIActAAAgCSgCCBBGCyIIEAMEQCAIIQYMAgsgACgC8OABBEAgCyAFIAgQRQsgAiAGayECIAYgB2ohByAFIAhqIQUgCSgCBEUNAAsgACkD0OABIgxCf1IEQEFsIQYgDCAFIAFrrFINAQsgACgC8OABBEBBaiEGIAJBBEkNASALEEQhDCAHKAAAIAynRw0BIAdBBGohByACQXxqIQILIAMgBzYCACAEIAI2AgAgBSABayEGCyAJQRBqJAAgBgsuACAAECsCf0EAQQAQAw0AGiABRSACRXJFBEBBYiAAIAEgAhA9EAMNARoLQQALCzcAIAEEQCAAIAAoAsTgASABKAIEIAEoAghqRzYCnOIBCyAAECtBABADIAFFckUEQCAAIAEQWwsL0QIBB38jAEEQayIGJAAgBiAENgIIIAYgAzYCDCAFBEAgBSgCBCEKIAUoAgghCQsgASEIAkACQANAIAAoAuzhARAWIQsCQANAIAQgC0kNASADKAAAQXBxQdDUtMIBRgRAIAMgBBAiIgcQAw0EIAQgB2shBCADIAdqIQMMAQsLIAYgAzYCDCAGIAQ2AggCQCAFBEAgACAFEE5BACEHQQAQA0UNAQwFCyAAIAogCRBNIgcQAw0ECyAAIAgQUCAMQQFHQQAgACAIIAIgBkEMaiAGQQhqEEwiByIDa0EAIAMQAxtBCkdyRQRAQbh/IQcMBAsgBxADDQMgAiAHayECIAcgCGohCEEBIQwgBigCDCEDIAYoAgghBAwBCwsgBiADNgIMIAYgBDYCCEG4fyEHIAQNASAIIAFrIQcMAQsgBiADNgIMIAYgBDYCCAsgBkEQaiQAIAcLRgECfyABIAAoArjgASICRwRAIAAgAjYCxOABIAAgATYCuOABIAAoArzgASEDIAAgATYCvOABIAAgASADIAJrajYCwOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEEdCAAbiECCyAAQQh2IgEgAkEYbCIAQYwIaigCAGwgAEGICGooAgBqIgJBA3YgAmogAEGACGooAgAgAEGECGooAgAgAWxqSQs3ACAAIAMgBCAFQYAQEDMiBRADBEAgBQ8LIAUgBEkEfyABIAIgAyAFaiAEIAVrIAAQMgVBuH8LC78DAQN/IwBBIGsiBSQAIAVBCGogAiADEAYiAhADRQRAIAAgAWoiB0F9aiEGIAUgBBAOIARBBGohAiAFLQACIQMDQEEAIAAgBkkgBUEIahAEGwRAIAAgAiAFQQhqIAMQAkECdGoiBC8BADsAACAFQQhqIAQtAAIQASAAIAQtAANqIgQgAiAFQQhqIAMQAkECdGoiAC8BADsAACAFQQhqIAAtAAIQASAEIAAtAANqIQAMAQUgB0F+aiEEA0AgBUEIahAEIAAgBEtyRQRAIAAgAiAFQQhqIAMQAkECdGoiBi8BADsAACAFQQhqIAYtAAIQASAAIAYtAANqIQAMAQsLA0AgACAES0UEQCAAIAIgBUEIaiADEAJBAnRqIgYvAQA7AAAgBUEIaiAGLQACEAEgACAGLQADaiEADAELCwJAIAAgB08NACAAIAIgBUEIaiADEAIiA0ECdGoiAC0AADoAACAALQADQQFGBEAgBUEIaiAALQACEAEMAQsgBSgCDEEfSw0AIAVBCGogAiADQQJ0ai0AAhABIAUoAgxBIUkNACAFQSA2AgwLIAFBbCAFQQhqEAobIQILCwsgBUEgaiQAIAILkgIBBH8jAEFAaiIJJAAgCSADQTQQCyEDAkAgBEECSA0AIAMgBEECdGooAgAhCSADQTxqIAgQIyADQQE6AD8gAyACOgA+QQAhBCADKAI8IQoDQCAEIAlGDQEgACAEQQJ0aiAKNgEAIARBAWohBAwAAAsAC0EAIQkDQCAGIAlGRQRAIAMgBSAJQQF0aiIKLQABIgtBAnRqIgwoAgAhBCADQTxqIAotAABBCHQgCGpB//8DcRAjIANBAjoAPyADIAcgC2siCiACajoAPiAEQQEgASAKa3RqIQogAygCPCELA0AgACAEQQJ0aiALNgEAIARBAWoiBCAKSQ0ACyAMIAo2AgAgCUEBaiEJDAELCyADQUBrJAALowIBCX8jAEHQAGsiCSQAIAlBEGogBUE0EAsaIAcgBmshDyAHIAFrIRADQAJAIAMgCkcEQEEBIAEgByACIApBAXRqIgYtAAEiDGsiCGsiC3QhDSAGLQAAIQ4gCUEQaiAMQQJ0aiIMKAIAIQYgCyAPTwRAIAAgBkECdGogCyAIIAUgCEE0bGogCCAQaiIIQQEgCEEBShsiCCACIAQgCEECdGooAgAiCEEBdGogAyAIayAHIA4QYyAGIA1qIQgMAgsgCUEMaiAOECMgCUEBOgAPIAkgCDoADiAGIA1qIQggCSgCDCELA0AgBiAITw0CIAAgBkECdGogCzYBACAGQQFqIQYMAAALAAsgCUHQAGokAA8LIAwgCDYCACAKQQFqIQoMAAALAAs0ACAAIAMgBCAFEDYiBRADBEAgBQ8LIAUgBEkEfyABIAIgAyAFaiAEIAVrIAAQNAVBuH8LCyMAIAA/AEEQdGtB//8DakEQdkAAQX9GBEBBAA8LQQAQAEEBCzsBAX8gAgRAA0AgACABIAJBgCAgAkGAIEkbIgMQCyEAIAFBgCBqIQEgAEGAIGohACACIANrIgINAAsLCwYAIAAQAwsLqBUJAEGICAsNAQAAAAEAAAACAAAAAgBBoAgLswYBAAAAAQAAAAIAAAACAAAAJgAAAIIAAAAhBQAASgAAAGcIAAAmAAAAwAEAAIAAAABJBQAASgAAAL4IAAApAAAALAIAAIAAAABJBQAASgAAAL4IAAAvAAAAygIAAIAAAACKBQAASgAAAIQJAAA1AAAAcwMAAIAAAACdBQAASgAAAKAJAAA9AAAAgQMAAIAAAADrBQAASwAAAD4KAABEAAAAngMAAIAAAABNBgAASwAAAKoKAABLAAAAswMAAIAAAADBBgAATQAAAB8NAABNAAAAUwQAAIAAAAAjCAAAUQAAAKYPAABUAAAAmQQAAIAAAABLCQAAVwAAALESAABYAAAA2gQAAIAAAABvCQAAXQAAACMUAABUAAAARQUAAIAAAABUCgAAagAAAIwUAABqAAAArwUAAIAAAAB2CQAAfAAAAE4QAAB8AAAA0gIAAIAAAABjBwAAkQAAAJAHAACSAAAAAAAAAAEAAAABAAAABQAAAA0AAAAdAAAAPQAAAH0AAAD9AAAA/QEAAP0DAAD9BwAA/Q8AAP0fAAD9PwAA/X8AAP3/AAD9/wEA/f8DAP3/BwD9/w8A/f8fAP3/PwD9/38A/f//AP3//wH9//8D/f//B/3//w/9//8f/f//P/3//38AAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAB0AAAAeAAAAHwAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAACEAAAAiAAAAIwAAACUAAAAnAAAAKQAAACsAAAAvAAAAMwAAADsAAABDAAAAUwAAAGMAAACDAAAAAwEAAAMCAAADBAAAAwgAAAMQAAADIAAAA0AAAAOAAAADAAEAQeAPC1EBAAAAAQAAAAEAAAABAAAAAgAAAAIAAAADAAAAAwAAAAQAAAAEAAAABQAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAQcQQC4sBAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABIAAAAUAAAAFgAAABgAAAAcAAAAIAAAACgAAAAwAAAAQAAAAIAAAAAAAQAAAAIAAAAEAAAACAAAABAAAAAgAAAAQAAAAIAAAAAAAQBBkBIL5gQBAAAAAQAAAAEAAAABAAAAAgAAAAIAAAADAAAAAwAAAAQAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAAAEAAAAEAAAACAAAAAAAAAABAAEBBgAAAAAAAAQAAAAAEAAABAAAAAAgAAAFAQAAAAAAAAUDAAAAAAAABQQAAAAAAAAFBgAAAAAAAAUHAAAAAAAABQkAAAAAAAAFCgAAAAAAAAUMAAAAAAAABg4AAAAAAAEFEAAAAAAAAQUUAAAAAAABBRYAAAAAAAIFHAAAAAAAAwUgAAAAAAAEBTAAAAAgAAYFQAAAAAAABwWAAAAAAAAIBgABAAAAAAoGAAQAAAAADAYAEAAAIAAABAAAAAAAAAAEAQAAAAAAAAUCAAAAIAAABQQAAAAAAAAFBQAAACAAAAUHAAAAAAAABQgAAAAgAAAFCgAAAAAAAAULAAAAAAAABg0AAAAgAAEFEAAAAAAAAQUSAAAAIAABBRYAAAAAAAIFGAAAACAAAwUgAAAAAAADBSgAAAAAAAYEQAAAABAABgRAAAAAIAAHBYAAAAAAAAkGAAIAAAAACwYACAAAMAAABAAAAAAQAAAEAQAAACAAAAUCAAAAIAAABQMAAAAgAAAFBQAAACAAAAUGAAAAIAAABQgAAAAgAAAFCQAAACAAAAULAAAAIAAABQwAAAAAAAAGDwAAACAAAQUSAAAAIAABBRQAAAAgAAIFGAAAACAAAgUcAAAAIAADBSgAAAAgAAQFMAAAAAAAEAYAAAEAAAAPBgCAAAAAAA4GAEAAAAAADQYAIABBgBcLhwIBAAEBBQAAAAAAAAUAAAAAAAAGBD0AAAAAAAkF/QEAAAAADwX9fwAAAAAVBf3/HwAAAAMFBQAAAAAABwR9AAAAAAAMBf0PAAAAABIF/f8DAAAAFwX9/38AAAAFBR0AAAAAAAgE/QAAAAAADgX9PwAAAAAUBf3/DwAAAAIFAQAAABAABwR9AAAAAAALBf0HAAAAABEF/f8BAAAAFgX9/z8AAAAEBQ0AAAAQAAgE/QAAAAAADQX9HwAAAAATBf3/BwAAAAEFAQAAABAABgQ9AAAAAAAKBf0DAAAAABAF/f8AAAAAHAX9//8PAAAbBf3//wcAABoF/f//AwAAGQX9//8BAAAYBf3//wBBkBkLhgQBAAEBBgAAAAAAAAYDAAAAAAAABAQAAAAgAAAFBQAAAAAAAAUGAAAAAAAABQgAAAAAAAAFCQAAAAAAAAULAAAAAAAABg0AAAAAAAAGEAAAAAAAAAYTAAAAAAAABhYAAAAAAAAGGQAAAAAAAAYcAAAAAAAABh8AAAAAAAAGIgAAAAAAAQYlAAAAAAABBikAAAAAAAIGLwAAAAAAAwY7AAAAAAAEBlMAAAAAAAcGgwAAAAAACQYDAgAAEAAABAQAAAAAAAAEBQAAACAAAAUGAAAAAAAABQcAAAAgAAAFCQAAAAAAAAUKAAAAAAAABgwAAAAAAAAGDwAAAAAAAAYSAAAAAAAABhUAAAAAAAAGGAAAAAAAAAYbAAAAAAAABh4AAAAAAAAGIQAAAAAAAQYjAAAAAAABBicAAAAAAAIGKwAAAAAAAwYzAAAAAAAEBkMAAAAAAAUGYwAAAAAACAYDAQAAIAAABAQAAAAwAAAEBAAAABAAAAQFAAAAIAAABQcAAAAgAAAFCAAAACAAAAUKAAAAIAAABQsAAAAAAAAGDgAAAAAAAAYRAAAAAAAABhQAAAAAAAAGFwAAAAAAAAYaAAAAAAAABh0AAAAAAAAGIAAAAAAAEAYDAAEAAAAPBgOAAAAAAA4GA0AAAAAADQYDIAAAAAAMBgMQAAAAAAsGAwgAAAAACgYDBABBpB0L2QEBAAAAAwAAAAcAAAAPAAAAHwAAAD8AAAB/AAAA/wAAAP8BAAD/AwAA/wcAAP8PAAD/HwAA/z8AAP9/AAD//wAA//8BAP//AwD//wcA//8PAP//HwD//z8A//9/AP///wD///8B////A////wf///8P////H////z////9/AAAAAAEAAAACAAAABAAAAAAAAAACAAAABAAAAAgAAAAAAAAAAQAAAAIAAAABAAAABAAAAAQAAAAEAAAABAAAAAgAAAAIAAAACAAAAAcAAAAIAAAACQAAAAoAAAALAEGgIAsDwBBQ",Xh$1=new WeakMap;let Yh$1=0,Jh$1,Jn$1=class Q2 extends Wt{constructor(s){super(s),this.transcoderPath="",this.transcoderBinary=null,this.transcoderPending=null,this.workerPool=new A1,this.workerSourceURL="",this.workerConfig=null,typeof MSC_TRANSCODER<"u"&&console.warn('THREE.KTX2Loader: Please update to latest "basis_transcoder". "msc_basis_transcoder" is no longer supported in three.js r125+.')}setTranscoderPath(s){return this.transcoderPath=s,this}setWorkerLimit(s){return this.workerPool.setWorkerLimit(s),this}detectSupport(s){return s.isWebGPURenderer===!0?this.workerConfig={astcSupported:s.hasFeature("texture-compression-astc"),etc1Supported:!1,etc2Supported:s.hasFeature("texture-compression-etc2"),dxtSupported:s.hasFeature("texture-compression-bc"),bptcSupported:!1,pvrtcSupported:!1}:(this.workerConfig={astcSupported:s.extensions.has("WEBGL_compressed_texture_astc"),etc1Supported:s.extensions.has("WEBGL_compressed_texture_etc1"),etc2Supported:s.extensions.has("WEBGL_compressed_texture_etc"),dxtSupported:s.extensions.has("WEBGL_compressed_texture_s3tc"),bptcSupported:s.extensions.has("EXT_texture_compression_bptc"),pvrtcSupported:s.extensions.has("WEBGL_compressed_texture_pvrtc")||s.extensions.has("WEBKIT_WEBGL_compressed_texture_pvrtc")},s.capabilities.isWebGL2&&(this.workerConfig.etc1Supported=!1)),this}init(){if(!this.transcoderPending){const s=new tn(this.manager);s.setPath(this.transcoderPath),s.setWithCredentials(this.withCredentials);const a=s.loadAsync("basis_transcoder.js"),b=new tn(this.manager);b.setPath(this.transcoderPath),b.setResponseType("arraybuffer"),b.setWithCredentials(this.withCredentials);const _e=b.loadAsync("basis_transcoder.wasm");this.transcoderPending=Promise.all([a,_e]).then(([bt,rn])=>{const sn=Q2.BasisWorker.toString(),yn=["/* constants */","let _EngineFormat = "+JSON.stringify(Q2.EngineFormat),"let _TranscoderFormat = "+JSON.stringify(Q2.TranscoderFormat),"let _BasisFormat = "+JSON.stringify(Q2.BasisFormat),"/* basis_transcoder.js */",bt,"/* worker */",sn.substring(sn.indexOf("{")+1,sn.lastIndexOf("}"))].join(`
|
|
4110
|
-
`);this.workerSourceURL=URL.createObjectURL(new Blob([yn])),this.transcoderBinary=rn,this.workerPool.setWorkerCreator(()=>{const Pn=new Worker(this.workerSourceURL),zn=this.transcoderBinary.slice(0);return Pn.postMessage({type:"init",config:this.workerConfig,transcoderBinary:zn},[zn]),Pn})}),Yh$1>0&&console.warn("THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues. Use a single KTX2Loader instance, or call .dispose() on old instances."),Yh$1++}return this.transcoderPending}load(s,a,b,_e){if(this.workerConfig===null)throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");const bt=new tn(this.manager);bt.setResponseType("arraybuffer"),bt.setWithCredentials(this.withCredentials),bt.load(s,rn=>{if(Xh$1.has(rn))return Xh$1.get(rn).promise.then(a).catch(_e);this._createTexture(rn).then(sn=>a?a(sn):null).catch(_e)},b,_e)}_createTextureFrom(s,a){const{faces:b,width:_e,height:bt,format:rn,type:sn,error:yn,dfdTransferFn:Pn,dfdFlags:zn}=s;if(sn==="error")return Promise.reject(yn);let lr;if(a.faceCount===6)lr=new Rs,lr.image=b,lr.format=rn,lr.type=Ht;else{const ar=b[0].mipmaps;lr=a.layerCount>1?new MI(ar,_e,bt,a.layerCount,rn,Ht):new Rs(ar,_e,bt,rn,Ht)}return lr.minFilter=b[0].mipmaps.length===1?ht$1:Hn,lr.magFilter=ht$1,lr.generateMipmaps=!1,lr.needsUpdate=!0,lr.colorSpace=Pn===v1$
|
|
4109
|
+
`);this.workerSourceURL=URL.createObjectURL(new Blob([rn]))}),this.decoderPending}_getWorker(s,a){return this._initDecoder().then(()=>{if(this.workerPool.length<this.workerLimit){const _e=new Worker(this.workerSourceURL);_e._callbacks={},_e._taskCosts={},_e._taskLoad=0,_e.postMessage({type:"init",decoderConfig:this.decoderConfig}),_e.onmessage=function(bt){const rn=bt.data;switch(rn.type){case"decode":_e._callbacks[rn.id].resolve(rn);break;case"error":_e._callbacks[rn.id].reject(rn);break;default:console.error('THREE.DRACOLoader: Unexpected message, "'+rn.type+'"')}},this.workerPool.push(_e)}else this.workerPool.sort(function(_e,bt){return _e._taskLoad>bt._taskLoad?-1:1});const b=this.workerPool[this.workerPool.length-1];return b._taskCosts[s]=a,b._taskLoad+=a,b})}_releaseTask(s,a){s._taskLoad-=s._taskCosts[a],delete s._callbacks[a],delete s._taskCosts[a]}debug(){console.log("Task load: ",this.workerPool.map(s=>s._taskLoad))}dispose(){for(let s=0;s<this.workerPool.length;++s)this.workerPool[s].terminate();return this.workerPool.length=0,this.workerSourceURL!==""&&URL.revokeObjectURL(this.workerSourceURL),this}};function Ub$1(){let o,s;onmessage=function(rn){const sn=rn.data;switch(sn.type){case"init":o=sn.decoderConfig,s=new Promise(function(zn){o.onModuleLoaded=function(lr){zn({draco:lr})},DracoDecoderModule(o)});break;case"decode":const yn=sn.buffer,Pn=sn.taskConfig;s.then(zn=>{const lr=zn.draco,ar=new lr.Decoder;try{const cr=a(lr,ar,new Int8Array(yn),Pn),hr=cr.attributes.map(es=>es.array.buffer);cr.index&&hr.push(cr.index.array.buffer),self.postMessage({type:"decode",id:sn.id,geometry:cr},hr)}catch(cr){console.error(cr),self.postMessage({type:"error",id:sn.id,error:cr.message})}finally{lr.destroy(ar)}});break}};function a(rn,sn,yn,Pn){const zn=Pn.attributeIDs,lr=Pn.attributeTypes;let ar,cr;const hr=sn.GetEncodedGeometryType(yn);if(hr===rn.TRIANGULAR_MESH)ar=new rn.Mesh,cr=sn.DecodeArrayToMesh(yn,yn.byteLength,ar);else if(hr===rn.POINT_CLOUD)ar=new rn.PointCloud,cr=sn.DecodeArrayToPointCloud(yn,yn.byteLength,ar);else throw new Error("THREE.DRACOLoader: Unexpected geometry type.");if(!cr.ok()||ar.ptr===0)throw new Error("THREE.DRACOLoader: Decoding failed: "+cr.error_msg());const es={index:null,attributes:[]};for(const Ur in zn){const Dr=self[lr[Ur]];let zr,rs;if(Pn.useUniqueIDs)rs=zn[Ur],zr=sn.GetAttributeByUniqueId(ar,rs);else{if(rs=sn.GetAttributeId(ar,rn[zn[Ur]]),rs===-1)continue;zr=sn.GetAttribute(ar,rs)}const as=_e(rn,sn,ar,Ur,Dr,zr);Ur==="color"&&(as.vertexColorSpace=Pn.vertexColorSpace),es.attributes.push(as)}return hr===rn.TRIANGULAR_MESH&&(es.index=b(rn,sn,ar)),rn.destroy(ar),es}function b(rn,sn,yn){const Pn=yn.num_faces()*3,zn=Pn*4,lr=rn._malloc(zn);sn.GetTrianglesUInt32Array(yn,zn,lr);const ar=new Uint32Array(rn.HEAPF32.buffer,lr,Pn).slice();return rn._free(lr),{array:ar,itemSize:1}}function _e(rn,sn,yn,Pn,zn,lr){const ar=lr.num_components(),cr=yn.num_points()*ar,hr=cr*zn.BYTES_PER_ELEMENT,es=bt(rn,zn),Ur=rn._malloc(hr);sn.GetAttributeDataArrayForAllPoints(yn,lr,es,hr,Ur);const Dr=new zn(rn.HEAPF32.buffer,Ur,cr).slice();return rn._free(Ur),{name:Pn,array:Dr,itemSize:ar}}function bt(rn,sn){switch(sn){case Float32Array:return rn.DT_FLOAT32;case Int8Array:return rn.DT_INT8;case Int16Array:return rn.DT_INT16;case Int32Array:return rn.DT_INT32;case Uint8Array:return rn.DT_UINT8;case Uint16Array:return rn.DT_UINT16;case Uint32Array:return rn.DT_UINT32}}}function hm(o,s){if(s===zE)return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."),o;if(s===pd$1||s===ty){let a=o.getIndex();if(a===null){const rn=[],sn=o.getAttribute("position");if(sn!==void 0){for(let yn=0;yn<sn.count;yn++)rn.push(yn);o.setIndex(rn),a=o.getIndex()}else return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."),o}const b=a.count-2,_e=[];if(s===pd$1)for(let rn=1;rn<=b;rn++)_e.push(a.getX(0)),_e.push(a.getX(rn)),_e.push(a.getX(rn+1));else for(let rn=0;rn<b;rn++)rn%2===0?(_e.push(a.getX(rn)),_e.push(a.getX(rn+1)),_e.push(a.getX(rn+2))):(_e.push(a.getX(rn+2)),_e.push(a.getX(rn+1)),_e.push(a.getX(rn)));_e.length/3!==b&&console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.");const bt=o.clone();return bt.setIndex(_e),bt.clearGroups(),bt}else return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:",s),o}let Nb$1=class extends Wt{constructor(s){super(s),this.dracoLoader=null,this.ktx2Loader=null,this.meshoptDecoder=null,this.pluginCallbacks=[],this.register(function(a){return new Gb$1(a)}),this.register(function(a){return new Yb$1(a)}),this.register(function(a){return new Jb$1(a)}),this.register(function(a){return new Kb$1(a)}),this.register(function(a){return new zb$1(a)}),this.register(function(a){return new Vb$1(a)}),this.register(function(a){return new Wb$1(a)}),this.register(function(a){return new qb$1(a)}),this.register(function(a){return new kb$1(a)}),this.register(function(a){return new $b$1(a)}),this.register(function(a){return new Hb$1(a)}),this.register(function(a){return new Xb$1(a)}),this.register(function(a){return new Ob$1(a)}),this.register(function(a){return new jb$1(a)}),this.register(function(a){return new Zb$1(a)})}load(s,a,b,_e){const bt=this;let rn;this.resourcePath!==""?rn=this.resourcePath:this.path!==""?rn=this.path:rn=Aa$1.extractUrlBase(s),this.manager.itemStart(s);const sn=function(Pn){_e?_e(Pn):console.error(Pn),bt.manager.itemError(s),bt.manager.itemEnd(s)},yn=new tn(this.manager);yn.setPath(this.path),yn.setResponseType("arraybuffer"),yn.setRequestHeader(this.requestHeader),yn.setWithCredentials(this.withCredentials),yn.load(s,function(Pn){try{bt.parse(Pn,rn,function(zn){a(zn),bt.manager.itemEnd(s)},sn)}catch(zn){sn(zn)}},b,sn)}setDRACOLoader(s){return this.dracoLoader=s,this}setDDSLoader(){throw new Error('THREE.GLTFLoader: "MSFT_texture_dds" no longer supported. Please update to "KHR_texture_basisu".')}setKTX2Loader(s){return this.ktx2Loader=s,this}setMeshoptDecoder(s){return this.meshoptDecoder=s,this}register(s){return this.pluginCallbacks.indexOf(s)===-1&&this.pluginCallbacks.push(s),this}unregister(s){return this.pluginCallbacks.indexOf(s)!==-1&&this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(s),1),this}parse(s,a,b,_e){let bt;const rn={},sn={},yn=new TextDecoder;if(typeof s=="string")bt=JSON.parse(s);else if(s instanceof ArrayBuffer)if(yn.decode(new Uint8Array(s,0,4))===Zy){try{rn[et$2.KHR_BINARY_GLTF]=new e1(s)}catch(zn){_e&&_e(zn);return}bt=JSON.parse(rn[et$2.KHR_BINARY_GLTF].content)}else bt=JSON.parse(yn.decode(s));else bt=s;if(bt.asset===void 0||bt.asset.version[0]<2){_e&&_e(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported."));return}const Pn=new f1(bt,{path:a||this.resourcePath||"",crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});Pn.fileLoader.setRequestHeader(this.requestHeader);for(let zn=0;zn<this.pluginCallbacks.length;zn++){const lr=this.pluginCallbacks[zn](Pn);sn[lr.name]=lr,rn[lr.name]=!0}if(bt.extensionsUsed)for(let zn=0;zn<bt.extensionsUsed.length;++zn){const lr=bt.extensionsUsed[zn],ar=bt.extensionsRequired||[];switch(lr){case et$2.KHR_MATERIALS_UNLIT:rn[lr]=new Qb$1;break;case et$2.KHR_DRACO_MESH_COMPRESSION:rn[lr]=new t1(bt,this.dracoLoader);break;case et$2.KHR_TEXTURE_TRANSFORM:rn[lr]=new n1;break;case et$2.KHR_MESH_QUANTIZATION:rn[lr]=new i1;break;default:ar.indexOf(lr)>=0&&sn[lr]===void 0&&console.warn('THREE.GLTFLoader: Unknown extension "'+lr+'".')}}Pn.setExtensions(rn),Pn.setPlugins(sn),Pn.parse(b,_e)}parseAsync(s,a){const b=this;return new Promise(function(_e,bt){b.parse(s,a,_e,bt)})}};function Fb$1(){let o={};return{get:function(s){return o[s]},add:function(s,a){o[s]=a},remove:function(s){delete o[s]},removeAll:function(){o={}}}}const et$2={KHR_BINARY_GLTF:"KHR_binary_glTF",KHR_DRACO_MESH_COMPRESSION:"KHR_draco_mesh_compression",KHR_LIGHTS_PUNCTUAL:"KHR_lights_punctual",KHR_MATERIALS_CLEARCOAT:"KHR_materials_clearcoat",KHR_MATERIALS_IOR:"KHR_materials_ior",KHR_MATERIALS_SHEEN:"KHR_materials_sheen",KHR_MATERIALS_SPECULAR:"KHR_materials_specular",KHR_MATERIALS_TRANSMISSION:"KHR_materials_transmission",KHR_MATERIALS_IRIDESCENCE:"KHR_materials_iridescence",KHR_MATERIALS_ANISOTROPY:"KHR_materials_anisotropy",KHR_MATERIALS_UNLIT:"KHR_materials_unlit",KHR_MATERIALS_VOLUME:"KHR_materials_volume",KHR_TEXTURE_BASISU:"KHR_texture_basisu",KHR_TEXTURE_TRANSFORM:"KHR_texture_transform",KHR_MESH_QUANTIZATION:"KHR_mesh_quantization",KHR_MATERIALS_EMISSIVE_STRENGTH:"KHR_materials_emissive_strength",EXT_TEXTURE_WEBP:"EXT_texture_webp",EXT_TEXTURE_AVIF:"EXT_texture_avif",EXT_MESHOPT_COMPRESSION:"EXT_meshopt_compression",EXT_MESH_GPU_INSTANCING:"EXT_mesh_gpu_instancing"};let Ob$1=class{constructor(s){this.parser=s,this.name=et$2.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){const s=this.parser,a=this.parser.json.nodes||[];for(let b=0,_e=a.length;b<_e;b++){const bt=a[b];bt.extensions&&bt.extensions[this.name]&&bt.extensions[this.name].light!==void 0&&s._addNodeRef(this.cache,bt.extensions[this.name].light)}}_loadLight(s){const a=this.parser,b="light:"+s;let _e=a.cache.get(b);if(_e)return _e;const bt=a.json,rn=((bt.extensions&&bt.extensions[this.name]||{}).lights||[])[s];let sn;const yn=new he$1(16777215);rn.color!==void 0&&yn.fromArray(rn.color);const Pn=rn.range!==void 0?rn.range:0;switch(rn.type){case"directional":sn=new Tf$1(yn),sn.target.position.set(0,0,-1),sn.add(sn.target);break;case"point":sn=new Gc$1(yn),sn.distance=Pn;break;case"spot":sn=new Ny(yn),sn.distance=Pn,rn.spot=rn.spot||{},rn.spot.innerConeAngle=rn.spot.innerConeAngle!==void 0?rn.spot.innerConeAngle:0,rn.spot.outerConeAngle=rn.spot.outerConeAngle!==void 0?rn.spot.outerConeAngle:Math.PI/4,sn.angle=rn.spot.outerConeAngle,sn.penumbra=1-rn.spot.innerConeAngle/rn.spot.outerConeAngle,sn.target.position.set(0,0,-1),sn.add(sn.target);break;default:throw new Error("THREE.GLTFLoader: Unexpected light type: "+rn.type)}return sn.position.set(0,0,0),sn.decay=2,ki$1(sn,rn),rn.intensity!==void 0&&(sn.intensity=rn.intensity),sn.name=a.createUniqueName(rn.name||"light_"+s),_e=Promise.resolve(sn),a.cache.add(b,_e),_e}getDependency(s,a){if(s==="light")return this._loadLight(a)}createNodeAttachment(s){const a=this,b=this.parser,_e=b.json.nodes[s],bt=(_e.extensions&&_e.extensions[this.name]||{}).light;return bt===void 0?null:this._loadLight(bt).then(function(rn){return b._getNodeRef(a.cache,bt,rn)})}},Qb$1=class{constructor(){this.name=et$2.KHR_MATERIALS_UNLIT}getMaterialType(){return Zt}extendParams(s,a,b){const _e=[];s.color=new he$1(1,1,1),s.opacity=1;const bt=a.pbrMetallicRoughness;if(bt){if(Array.isArray(bt.baseColorFactor)){const rn=bt.baseColorFactor;s.color.fromArray(rn),s.opacity=rn[3]}bt.baseColorTexture!==void 0&&_e.push(b.assignTexture(s,"map",bt.baseColorTexture,we$2))}return Promise.all(_e)}},kb$1=class{constructor(s){this.parser=s,this.name=et$2.KHR_MATERIALS_EMISSIVE_STRENGTH}extendMaterialParams(s,a){const b=this.parser.json.materials[s];if(!b.extensions||!b.extensions[this.name])return Promise.resolve();const _e=b.extensions[this.name].emissiveStrength;return _e!==void 0&&(a.emissiveIntensity=_e),Promise.resolve()}},Gb$1=class{constructor(s){this.parser=s,this.name=et$2.KHR_MATERIALS_CLEARCOAT}getMaterialType(s){const a=this.parser.json.materials[s];return!a.extensions||!a.extensions[this.name]?null:Bi$1}extendMaterialParams(s,a){const b=this.parser,_e=b.json.materials[s];if(!_e.extensions||!_e.extensions[this.name])return Promise.resolve();const bt=[],rn=_e.extensions[this.name];if(rn.clearcoatFactor!==void 0&&(a.clearcoat=rn.clearcoatFactor),rn.clearcoatTexture!==void 0&&bt.push(b.assignTexture(a,"clearcoatMap",rn.clearcoatTexture)),rn.clearcoatRoughnessFactor!==void 0&&(a.clearcoatRoughness=rn.clearcoatRoughnessFactor),rn.clearcoatRoughnessTexture!==void 0&&bt.push(b.assignTexture(a,"clearcoatRoughnessMap",rn.clearcoatRoughnessTexture)),rn.clearcoatNormalTexture!==void 0&&(bt.push(b.assignTexture(a,"clearcoatNormalMap",rn.clearcoatNormalTexture)),rn.clearcoatNormalTexture.scale!==void 0)){const sn=rn.clearcoatNormalTexture.scale;a.clearcoatNormalScale=new j$1(sn,sn)}return Promise.all(bt)}},Hb$1=class{constructor(s){this.parser=s,this.name=et$2.KHR_MATERIALS_IRIDESCENCE}getMaterialType(s){const a=this.parser.json.materials[s];return!a.extensions||!a.extensions[this.name]?null:Bi$1}extendMaterialParams(s,a){const b=this.parser,_e=b.json.materials[s];if(!_e.extensions||!_e.extensions[this.name])return Promise.resolve();const bt=[],rn=_e.extensions[this.name];return rn.iridescenceFactor!==void 0&&(a.iridescence=rn.iridescenceFactor),rn.iridescenceTexture!==void 0&&bt.push(b.assignTexture(a,"iridescenceMap",rn.iridescenceTexture)),rn.iridescenceIor!==void 0&&(a.iridescenceIOR=rn.iridescenceIor),a.iridescenceThicknessRange===void 0&&(a.iridescenceThicknessRange=[100,400]),rn.iridescenceThicknessMinimum!==void 0&&(a.iridescenceThicknessRange[0]=rn.iridescenceThicknessMinimum),rn.iridescenceThicknessMaximum!==void 0&&(a.iridescenceThicknessRange[1]=rn.iridescenceThicknessMaximum),rn.iridescenceThicknessTexture!==void 0&&bt.push(b.assignTexture(a,"iridescenceThicknessMap",rn.iridescenceThicknessTexture)),Promise.all(bt)}},zb$1=class{constructor(s){this.parser=s,this.name=et$2.KHR_MATERIALS_SHEEN}getMaterialType(s){const a=this.parser.json.materials[s];return!a.extensions||!a.extensions[this.name]?null:Bi$1}extendMaterialParams(s,a){const b=this.parser,_e=b.json.materials[s];if(!_e.extensions||!_e.extensions[this.name])return Promise.resolve();const bt=[];a.sheenColor=new he$1(0,0,0),a.sheenRoughness=0,a.sheen=1;const rn=_e.extensions[this.name];return rn.sheenColorFactor!==void 0&&a.sheenColor.fromArray(rn.sheenColorFactor),rn.sheenRoughnessFactor!==void 0&&(a.sheenRoughness=rn.sheenRoughnessFactor),rn.sheenColorTexture!==void 0&&bt.push(b.assignTexture(a,"sheenColorMap",rn.sheenColorTexture,we$2)),rn.sheenRoughnessTexture!==void 0&&bt.push(b.assignTexture(a,"sheenRoughnessMap",rn.sheenRoughnessTexture)),Promise.all(bt)}},Vb$1=class{constructor(s){this.parser=s,this.name=et$2.KHR_MATERIALS_TRANSMISSION}getMaterialType(s){const a=this.parser.json.materials[s];return!a.extensions||!a.extensions[this.name]?null:Bi$1}extendMaterialParams(s,a){const b=this.parser,_e=b.json.materials[s];if(!_e.extensions||!_e.extensions[this.name])return Promise.resolve();const bt=[],rn=_e.extensions[this.name];return rn.transmissionFactor!==void 0&&(a.transmission=rn.transmissionFactor),rn.transmissionTexture!==void 0&&bt.push(b.assignTexture(a,"transmissionMap",rn.transmissionTexture)),Promise.all(bt)}},Wb$1=class{constructor(s){this.parser=s,this.name=et$2.KHR_MATERIALS_VOLUME}getMaterialType(s){const a=this.parser.json.materials[s];return!a.extensions||!a.extensions[this.name]?null:Bi$1}extendMaterialParams(s,a){const b=this.parser,_e=b.json.materials[s];if(!_e.extensions||!_e.extensions[this.name])return Promise.resolve();const bt=[],rn=_e.extensions[this.name];a.thickness=rn.thicknessFactor!==void 0?rn.thicknessFactor:0,rn.thicknessTexture!==void 0&&bt.push(b.assignTexture(a,"thicknessMap",rn.thicknessTexture)),a.attenuationDistance=rn.attenuationDistance||1/0;const sn=rn.attenuationColor||[1,1,1];return a.attenuationColor=new he$1(sn[0],sn[1],sn[2]),Promise.all(bt)}},qb$1=class{constructor(s){this.parser=s,this.name=et$2.KHR_MATERIALS_IOR}getMaterialType(s){const a=this.parser.json.materials[s];return!a.extensions||!a.extensions[this.name]?null:Bi$1}extendMaterialParams(s,a){const b=this.parser.json.materials[s];if(!b.extensions||!b.extensions[this.name])return Promise.resolve();const _e=b.extensions[this.name];return a.ior=_e.ior!==void 0?_e.ior:1.5,Promise.resolve()}},$b$1=class{constructor(s){this.parser=s,this.name=et$2.KHR_MATERIALS_SPECULAR}getMaterialType(s){const a=this.parser.json.materials[s];return!a.extensions||!a.extensions[this.name]?null:Bi$1}extendMaterialParams(s,a){const b=this.parser,_e=b.json.materials[s];if(!_e.extensions||!_e.extensions[this.name])return Promise.resolve();const bt=[],rn=_e.extensions[this.name];a.specularIntensity=rn.specularFactor!==void 0?rn.specularFactor:1,rn.specularTexture!==void 0&&bt.push(b.assignTexture(a,"specularIntensityMap",rn.specularTexture));const sn=rn.specularColorFactor||[1,1,1];return a.specularColor=new he$1(sn[0],sn[1],sn[2]),rn.specularColorTexture!==void 0&&bt.push(b.assignTexture(a,"specularColorMap",rn.specularColorTexture,we$2)),Promise.all(bt)}},Xb$1=class{constructor(s){this.parser=s,this.name=et$2.KHR_MATERIALS_ANISOTROPY}getMaterialType(s){const a=this.parser.json.materials[s];return!a.extensions||!a.extensions[this.name]?null:Bi$1}extendMaterialParams(s,a){const b=this.parser,_e=b.json.materials[s];if(!_e.extensions||!_e.extensions[this.name])return Promise.resolve();const bt=[],rn=_e.extensions[this.name];return rn.anisotropyStrength!==void 0&&(a.anisotropy=rn.anisotropyStrength),rn.anisotropyRotation!==void 0&&(a.anisotropyRotation=rn.anisotropyRotation),rn.anisotropyTexture!==void 0&&bt.push(b.assignTexture(a,"anisotropyMap",rn.anisotropyTexture)),Promise.all(bt)}},Yb$1=class{constructor(s){this.parser=s,this.name=et$2.KHR_TEXTURE_BASISU}loadTexture(s){const a=this.parser,b=a.json,_e=b.textures[s];if(!_e.extensions||!_e.extensions[this.name])return null;const bt=_e.extensions[this.name],rn=a.options.ktx2Loader;if(!rn){if(b.extensionsRequired&&b.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");return null}return a.loadTextureImage(s,bt.source,rn)}},Jb$1=class{constructor(s){this.parser=s,this.name=et$2.EXT_TEXTURE_WEBP,this.isSupported=null}loadTexture(s){const a=this.name,b=this.parser,_e=b.json,bt=_e.textures[s];if(!bt.extensions||!bt.extensions[a])return null;const rn=bt.extensions[a],sn=_e.images[rn.source];let yn=b.textureLoader;if(sn.uri){const Pn=b.options.manager.getHandler(sn.uri);Pn!==null&&(yn=Pn)}return this.detectSupport().then(function(Pn){if(Pn)return b.loadTextureImage(s,rn.source,yn);if(_e.extensionsRequired&&_e.extensionsRequired.indexOf(a)>=0)throw new Error("THREE.GLTFLoader: WebP required by asset but unsupported.");return b.loadTexture(s)})}detectSupport(){return this.isSupported||(this.isSupported=new Promise(function(s){const a=new Image;a.src="data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA",a.onload=a.onerror=function(){s(a.height===1)}})),this.isSupported}},Kb$1=class{constructor(s){this.parser=s,this.name=et$2.EXT_TEXTURE_AVIF,this.isSupported=null}loadTexture(s){const a=this.name,b=this.parser,_e=b.json,bt=_e.textures[s];if(!bt.extensions||!bt.extensions[a])return null;const rn=bt.extensions[a],sn=_e.images[rn.source];let yn=b.textureLoader;if(sn.uri){const Pn=b.options.manager.getHandler(sn.uri);Pn!==null&&(yn=Pn)}return this.detectSupport().then(function(Pn){if(Pn)return b.loadTextureImage(s,rn.source,yn);if(_e.extensionsRequired&&_e.extensionsRequired.indexOf(a)>=0)throw new Error("THREE.GLTFLoader: AVIF required by asset but unsupported.");return b.loadTexture(s)})}detectSupport(){return this.isSupported||(this.isSupported=new Promise(function(s){const a=new Image;a.src="data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=",a.onload=a.onerror=function(){s(a.height===1)}})),this.isSupported}},jb$1=class{constructor(s){this.name=et$2.EXT_MESHOPT_COMPRESSION,this.parser=s}loadBufferView(s){const a=this.parser.json,b=a.bufferViews[s];if(b.extensions&&b.extensions[this.name]){const _e=b.extensions[this.name],bt=this.parser.getDependency("buffer",_e.buffer),rn=this.parser.options.meshoptDecoder;if(!rn||!rn.supported){if(a.extensionsRequired&&a.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files");return null}return bt.then(function(sn){const yn=_e.byteOffset||0,Pn=_e.byteLength||0,zn=_e.count,lr=_e.byteStride,ar=new Uint8Array(sn,yn,Pn);return rn.decodeGltfBufferAsync?rn.decodeGltfBufferAsync(zn,lr,ar,_e.mode,_e.filter).then(function(cr){return cr.buffer}):rn.ready.then(function(){const cr=new ArrayBuffer(zn*lr);return rn.decodeGltfBuffer(new Uint8Array(cr),zn,lr,ar,_e.mode,_e.filter),cr})})}else return null}},Zb$1=class{constructor(s){this.name=et$2.EXT_MESH_GPU_INSTANCING,this.parser=s}createNodeMesh(s){const a=this.parser.json,b=a.nodes[s];if(!b.extensions||!b.extensions[this.name]||b.mesh===void 0)return null;const _e=a.meshes[b.mesh];for(const yn of _e.primitives)if(yn.mode!==Rn.TRIANGLES&&yn.mode!==Rn.TRIANGLE_STRIP&&yn.mode!==Rn.TRIANGLE_FAN&&yn.mode!==void 0)return null;const bt=b.extensions[this.name].attributes,rn=[],sn={};for(const yn in bt)rn.push(this.parser.getDependency("accessor",bt[yn]).then(Pn=>(sn[yn]=Pn,sn[yn])));return rn.length<1?null:(rn.push(this.parser.createNodeMesh(s)),Promise.all(rn).then(yn=>{const Pn=yn.pop(),zn=Pn.isGroup?Pn.children:[Pn],lr=yn[0].count,ar=[];for(const cr of zn){const hr=new Be$1,es=new C$2,Ur=new en,Dr=new C$2(1,1,1),zr=new Ey(cr.geometry,cr.material,lr);for(let rs=0;rs<lr;rs++)sn.TRANSLATION&&es.fromBufferAttribute(sn.TRANSLATION,rs),sn.ROTATION&&Ur.fromBufferAttribute(sn.ROTATION,rs),sn.SCALE&&Dr.fromBufferAttribute(sn.SCALE,rs),zr.setMatrixAt(rs,hr.compose(es,Ur,Dr));for(const rs in sn)rs!=="TRANSLATION"&&rs!=="ROTATION"&&rs!=="SCALE"&&cr.geometry.setAttribute(rs,sn[rs]);je$1.prototype.copy.call(zr,cr),this.parser.assignFinalMaterial(zr),ar.push(zr)}return Pn.isGroup?(Pn.clear(),Pn.add(...ar),Pn):ar[0]}))}};const Zy="glTF",Mo=12,um={JSON:1313821514,BIN:5130562};class e1{constructor(s){this.name=et$2.KHR_BINARY_GLTF,this.content=null,this.body=null;const a=new DataView(s,0,Mo),b=new TextDecoder;if(this.header={magic:b.decode(new Uint8Array(s.slice(0,4))),version:a.getUint32(4,!0),length:a.getUint32(8,!0)},this.header.magic!==Zy)throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header.");if(this.header.version<2)throw new Error("THREE.GLTFLoader: Legacy binary file detected.");const _e=this.header.length-Mo,bt=new DataView(s,Mo);let rn=0;for(;rn<_e;){const sn=bt.getUint32(rn,!0);rn+=4;const yn=bt.getUint32(rn,!0);if(rn+=4,yn===um.JSON){const Pn=new Uint8Array(s,Mo+rn,sn);this.content=b.decode(Pn)}else if(yn===um.BIN){const Pn=Mo+rn;this.body=s.slice(Pn,Pn+sn)}rn+=sn}if(this.content===null)throw new Error("THREE.GLTFLoader: JSON content not found.")}}class t1{constructor(s,a){if(!a)throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided.");this.name=et$2.KHR_DRACO_MESH_COMPRESSION,this.json=s,this.dracoLoader=a,this.dracoLoader.preload()}decodePrimitive(s,a){const b=this.json,_e=this.dracoLoader,bt=s.extensions[this.name].bufferView,rn=s.extensions[this.name].attributes,sn={},yn={},Pn={};for(const zn in rn){const lr=bd$1[zn]||zn.toLowerCase();sn[lr]=rn[zn]}for(const zn in s.attributes){const lr=bd$1[zn]||zn.toLowerCase();if(rn[zn]!==void 0){const ar=b.accessors[s.attributes[zn]],cr=Vr[ar.componentType];Pn[lr]=cr.name,yn[lr]=ar.normalized===!0}}return a.getDependency("bufferView",bt).then(function(zn){return new Promise(function(lr){_e.decodeDracoFile(zn,function(ar){for(const cr in ar.attributes){const hr=ar.attributes[cr],es=yn[cr];es!==void 0&&(hr.normalized=es)}lr(ar)},sn,Pn)})})}}class n1{constructor(){this.name=et$2.KHR_TEXTURE_TRANSFORM}extendTexture(s,a){return(a.texCoord===void 0||a.texCoord===s.channel)&&a.offset===void 0&&a.rotation===void 0&&a.scale===void 0||(s=s.clone(),a.texCoord!==void 0&&(s.channel=a.texCoord),a.offset!==void 0&&s.offset.fromArray(a.offset),a.rotation!==void 0&&(s.rotation=a.rotation),a.scale!==void 0&&s.repeat.fromArray(a.scale),s.needsUpdate=!0),s}}class i1{constructor(){this.name=et$2.KHR_MESH_QUANTIZATION}}class ev extends Ia$1{constructor(s,a,b,_e){super(s,a,b,_e)}copySampleValue_(s){const a=this.resultBuffer,b=this.sampleValues,_e=this.valueSize,bt=s*_e*3+_e;for(let rn=0;rn!==_e;rn++)a[rn]=b[bt+rn];return a}interpolate_(s,a,b,_e){const bt=this.resultBuffer,rn=this.sampleValues,sn=this.valueSize,yn=sn*2,Pn=sn*3,zn=_e-a,lr=(b-a)/zn,ar=lr*lr,cr=ar*lr,hr=s*Pn,es=hr-Pn,Ur=-2*cr+3*ar,Dr=cr-ar,zr=1-Ur,rs=Dr-ar+lr;for(let as=0;as!==sn;as++){const os=rn[es+as+sn],ls=rn[es+as+yn]*zn,zs=rn[hr+as+sn],ho=rn[hr+as]*zn;bt[as]=zr*os+rs*ls+Ur*zs+Dr*ho}return bt}}const s1=new en;class r1 extends ev{interpolate_(s,a,b,_e){const bt=super.interpolate_(s,a,b,_e);return s1.fromArray(bt).normalize().toArray(bt),bt}}const Rn={FLOAT:5126,FLOAT_MAT3:35675,FLOAT_MAT4:35676,FLOAT_VEC2:35664,FLOAT_VEC3:35665,FLOAT_VEC4:35666,LINEAR:9729,REPEAT:10497,SAMPLER_2D:35678,POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6,UNSIGNED_BYTE:5121,UNSIGNED_SHORT:5123},Vr={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},dm={9728:gt$1,9729:ht$1,9984:aa$1,9985:Lc$1,9986:kr,9987:Hn},fm={33071:zt,33648:qr,10497:Zn$1},zh$1={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},bd$1={POSITION:"position",NORMAL:"normal",TANGENT:"tangent",TEXCOORD_0:"uv",TEXCOORD_1:"uv1",TEXCOORD_2:"uv2",TEXCOORD_3:"uv3",COLOR_0:"color",WEIGHTS_0:"skinWeight",JOINTS_0:"skinIndex"},Ni$1={scale:"scale",translation:"position",rotation:"quaternion",weights:"morphTargetInfluences"},o1={CUBICSPLINE:void 0,LINEAR:Ps,STEP:Xr},Vh$1={OPAQUE:"OPAQUE",MASK:"MASK",BLEND:"BLEND"};function a1(o){return o.DefaultMaterial===void 0&&(o.DefaultMaterial=new Yi$1({color:16777215,emissive:0,metalness:1,roughness:1,transparent:!1,depthTest:!0,side:Gn})),o.DefaultMaterial}function us(o,s,a){for(const b in a.extensions)o[b]===void 0&&(s.userData.gltfExtensions=s.userData.gltfExtensions||{},s.userData.gltfExtensions[b]=a.extensions[b])}function ki$1(o,s){s.extras!==void 0&&(typeof s.extras=="object"?Object.assign(o.userData,s.extras):console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, "+s.extras))}function l1(o,s,a){let b=!1,_e=!1,bt=!1;for(let Pn=0,zn=s.length;Pn<zn;Pn++){const lr=s[Pn];if(lr.POSITION!==void 0&&(b=!0),lr.NORMAL!==void 0&&(_e=!0),lr.COLOR_0!==void 0&&(bt=!0),b&&_e&&bt)break}if(!b&&!_e&&!bt)return Promise.resolve(o);const rn=[],sn=[],yn=[];for(let Pn=0,zn=s.length;Pn<zn;Pn++){const lr=s[Pn];if(b){const ar=lr.POSITION!==void 0?a.getDependency("accessor",lr.POSITION):o.attributes.position;rn.push(ar)}if(_e){const ar=lr.NORMAL!==void 0?a.getDependency("accessor",lr.NORMAL):o.attributes.normal;sn.push(ar)}if(bt){const ar=lr.COLOR_0!==void 0?a.getDependency("accessor",lr.COLOR_0):o.attributes.color;yn.push(ar)}}return Promise.all([Promise.all(rn),Promise.all(sn),Promise.all(yn)]).then(function(Pn){const zn=Pn[0],lr=Pn[1],ar=Pn[2];return b&&(o.morphAttributes.position=zn),_e&&(o.morphAttributes.normal=lr),bt&&(o.morphAttributes.color=ar),o.morphTargetsRelative=!0,o})}function c1(o,s){if(o.updateMorphTargets(),s.weights!==void 0)for(let a=0,b=s.weights.length;a<b;a++)o.morphTargetInfluences[a]=s.weights[a];if(s.extras&&Array.isArray(s.extras.targetNames)){const a=s.extras.targetNames;if(o.morphTargetInfluences.length===a.length){o.morphTargetDictionary={};for(let b=0,_e=a.length;b<_e;b++)o.morphTargetDictionary[a[b]]=b}else console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.")}}function h1(o){let s;const a=o.extensions&&o.extensions[et$2.KHR_DRACO_MESH_COMPRESSION];if(a?s="draco:"+a.bufferView+":"+a.indices+":"+Wh$1(a.attributes):s=o.indices+":"+Wh$1(o.attributes)+":"+o.mode,o.targets!==void 0)for(let b=0,_e=o.targets.length;b<_e;b++)s+=":"+Wh$1(o.targets[b]);return s}function Wh$1(o){let s="";const a=Object.keys(o).sort();for(let b=0,_e=a.length;b<_e;b++)s+=a[b]+":"+o[a[b]]+";";return s}function Td$1(o){switch(o){case Int8Array:return 1/127;case Uint8Array:return 1/255;case Int16Array:return 1/32767;case Uint16Array:return 1/65535;default:throw new Error("THREE.GLTFLoader: Unsupported normalized accessor component type.")}}function u1(o){return o.search(/\.jpe?g($|\?)/i)>0||o.search(/^data\:image\/jpeg/)===0?"image/jpeg":o.search(/\.webp($|\?)/i)>0||o.search(/^data\:image\/webp/)===0?"image/webp":"image/png"}const d1=new Be$1;class f1{constructor(s={},a={}){this.json=s,this.extensions={},this.plugins={},this.options=a,this.cache=new Fb$1,this.associations=new Map,this.primitiveCache={},this.nodeCache={},this.meshCache={refs:{},uses:{}},this.cameraCache={refs:{},uses:{}},this.lightCache={refs:{},uses:{}},this.sourceCache={},this.textureCache={},this.nodeNamesUsed={};let b=!1,_e=!1,bt=-1;typeof navigator<"u"&&(b=/^((?!chrome|android).)*safari/i.test(navigator.userAgent)===!0,_e=navigator.userAgent.indexOf("Firefox")>-1,bt=_e?navigator.userAgent.match(/Firefox\/([0-9]+)\./)[1]:-1),typeof createImageBitmap>"u"||b||_e&&bt<98?this.textureLoader=new Uy(this.options.manager):this.textureLoader=new DC(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new tn(this.options.manager),this.fileLoader.setResponseType("arraybuffer"),this.options.crossOrigin==="use-credentials"&&this.fileLoader.setWithCredentials(!0)}setExtensions(s){this.extensions=s}setPlugins(s){this.plugins=s}parse(s,a){const b=this,_e=this.json,bt=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll(function(rn){return rn._markDefs&&rn._markDefs()}),Promise.all(this._invokeAll(function(rn){return rn.beforeRoot&&rn.beforeRoot()})).then(function(){return Promise.all([b.getDependencies("scene"),b.getDependencies("animation"),b.getDependencies("camera")])}).then(function(rn){const sn={scene:rn[0][_e.scene||0],scenes:rn[0],animations:rn[1],cameras:rn[2],asset:_e.asset,parser:b,userData:{}};us(bt,sn,_e),ki$1(sn,_e),Promise.all(b._invokeAll(function(yn){return yn.afterRoot&&yn.afterRoot(sn)})).then(function(){s(sn)})}).catch(a)}_markDefs(){const s=this.json.nodes||[],a=this.json.skins||[],b=this.json.meshes||[];for(let _e=0,bt=a.length;_e<bt;_e++){const rn=a[_e].joints;for(let sn=0,yn=rn.length;sn<yn;sn++)s[rn[sn]].isBone=!0}for(let _e=0,bt=s.length;_e<bt;_e++){const rn=s[_e];rn.mesh!==void 0&&(this._addNodeRef(this.meshCache,rn.mesh),rn.skin!==void 0&&(b[rn.mesh].isSkinnedMesh=!0)),rn.camera!==void 0&&this._addNodeRef(this.cameraCache,rn.camera)}}_addNodeRef(s,a){a!==void 0&&(s.refs[a]===void 0&&(s.refs[a]=s.uses[a]=0),s.refs[a]++)}_getNodeRef(s,a,b){if(s.refs[a]<=1)return b;const _e=b.clone(),bt=(rn,sn)=>{const yn=this.associations.get(rn);yn!=null&&this.associations.set(sn,yn);for(const[Pn,zn]of rn.children.entries())bt(zn,sn.children[Pn])};return bt(b,_e),_e.name+="_instance_"+s.uses[a]++,_e}_invokeOne(s){const a=Object.values(this.plugins);a.push(this);for(let b=0;b<a.length;b++){const _e=s(a[b]);if(_e)return _e}return null}_invokeAll(s){const a=Object.values(this.plugins);a.unshift(this);const b=[];for(let _e=0;_e<a.length;_e++){const bt=s(a[_e]);bt&&b.push(bt)}return b}getDependency(s,a){const b=s+":"+a;let _e=this.cache.get(b);if(!_e){switch(s){case"scene":_e=this.loadScene(a);break;case"node":_e=this._invokeOne(function(bt){return bt.loadNode&&bt.loadNode(a)});break;case"mesh":_e=this._invokeOne(function(bt){return bt.loadMesh&&bt.loadMesh(a)});break;case"accessor":_e=this.loadAccessor(a);break;case"bufferView":_e=this._invokeOne(function(bt){return bt.loadBufferView&&bt.loadBufferView(a)});break;case"buffer":_e=this.loadBuffer(a);break;case"material":_e=this._invokeOne(function(bt){return bt.loadMaterial&&bt.loadMaterial(a)});break;case"texture":_e=this._invokeOne(function(bt){return bt.loadTexture&&bt.loadTexture(a)});break;case"skin":_e=this.loadSkin(a);break;case"animation":_e=this._invokeOne(function(bt){return bt.loadAnimation&&bt.loadAnimation(a)});break;case"camera":_e=this.loadCamera(a);break;default:if(_e=this._invokeOne(function(bt){return bt!=this&&bt.getDependency&&bt.getDependency(s,a)}),!_e)throw new Error("Unknown type: "+s);break}this.cache.add(b,_e)}return _e}getDependencies(s){let a=this.cache.get(s);if(!a){const b=this,_e=this.json[s+(s==="mesh"?"es":"s")]||[];a=Promise.all(_e.map(function(bt,rn){return b.getDependency(s,rn)})),this.cache.add(s,a)}return a}loadBuffer(s){const a=this.json.buffers[s],b=this.fileLoader;if(a.type&&a.type!=="arraybuffer")throw new Error("THREE.GLTFLoader: "+a.type+" buffer type is not supported.");if(a.uri===void 0&&s===0)return Promise.resolve(this.extensions[et$2.KHR_BINARY_GLTF].body);const _e=this.options;return new Promise(function(bt,rn){b.load(Aa$1.resolveURL(a.uri,_e.path),bt,void 0,function(){rn(new Error('THREE.GLTFLoader: Failed to load buffer "'+a.uri+'".'))})})}loadBufferView(s){const a=this.json.bufferViews[s];return this.getDependency("buffer",a.buffer).then(function(b){const _e=a.byteLength||0,bt=a.byteOffset||0;return b.slice(bt,bt+_e)})}loadAccessor(s){const a=this,b=this.json,_e=this.json.accessors[s];if(_e.bufferView===void 0&&_e.sparse===void 0){const rn=zh$1[_e.type],sn=Vr[_e.componentType],yn=_e.normalized===!0,Pn=new sn(_e.count*rn);return Promise.resolve(new tt$1(Pn,rn,yn))}const bt=[];return _e.bufferView!==void 0?bt.push(this.getDependency("bufferView",_e.bufferView)):bt.push(null),_e.sparse!==void 0&&(bt.push(this.getDependency("bufferView",_e.sparse.indices.bufferView)),bt.push(this.getDependency("bufferView",_e.sparse.values.bufferView))),Promise.all(bt).then(function(rn){const sn=rn[0],yn=zh$1[_e.type],Pn=Vr[_e.componentType],zn=Pn.BYTES_PER_ELEMENT,lr=zn*yn,ar=_e.byteOffset||0,cr=_e.bufferView!==void 0?b.bufferViews[_e.bufferView].byteStride:void 0,hr=_e.normalized===!0;let es,Ur;if(cr&&cr!==lr){const Dr=Math.floor(ar/cr),zr="InterleavedBuffer:"+_e.bufferView+":"+_e.componentType+":"+Dr+":"+_e.count;let rs=a.cache.get(zr);rs||(es=new Pn(sn,Dr*cr,_e.count*cr/zn),rs=new Uc$1(es,cr/zn),a.cache.add(zr,rs)),Ur=new Us(rs,yn,ar%cr/zn,hr)}else sn===null?es=new Pn(_e.count*yn):es=new Pn(sn,ar,_e.count*yn),Ur=new tt$1(es,yn,hr);if(_e.sparse!==void 0){const Dr=zh$1.SCALAR,zr=Vr[_e.sparse.indices.componentType],rs=_e.sparse.indices.byteOffset||0,as=_e.sparse.values.byteOffset||0,os=new zr(rn[1],rs,_e.sparse.count*Dr),ls=new Pn(rn[2],as,_e.sparse.count*yn);sn!==null&&(Ur=new tt$1(Ur.array.slice(),Ur.itemSize,Ur.normalized));for(let zs=0,ho=os.length;zs<ho;zs++){const ga=os[zs];if(Ur.setX(ga,ls[zs*yn]),yn>=2&&Ur.setY(ga,ls[zs*yn+1]),yn>=3&&Ur.setZ(ga,ls[zs*yn+2]),yn>=4&&Ur.setW(ga,ls[zs*yn+3]),yn>=5)throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}}return Ur})}loadTexture(s){const a=this.json,b=this.options,_e=a.textures[s].source,bt=a.images[_e];let rn=this.textureLoader;if(bt.uri){const sn=b.manager.getHandler(bt.uri);sn!==null&&(rn=sn)}return this.loadTextureImage(s,_e,rn)}loadTextureImage(s,a,b){const _e=this,bt=this.json,rn=bt.textures[s],sn=bt.images[a],yn=(sn.uri||sn.bufferView)+":"+rn.sampler;if(this.textureCache[yn])return this.textureCache[yn];const Pn=this.loadImageSource(a,b).then(function(zn){zn.flipY=!1,zn.name=rn.name||sn.name||"",zn.name===""&&typeof sn.uri=="string"&&sn.uri.startsWith("data:image/")===!1&&(zn.name=sn.uri);const lr=(bt.samplers||{})[rn.sampler]||{};return zn.magFilter=dm[lr.magFilter]||ht$1,zn.minFilter=dm[lr.minFilter]||Hn,zn.wrapS=fm[lr.wrapS]||Zn$1,zn.wrapT=fm[lr.wrapT]||Zn$1,_e.associations.set(zn,{textures:s}),zn}).catch(function(){return null});return this.textureCache[yn]=Pn,Pn}loadImageSource(s,a){const b=this,_e=this.json,bt=this.options;if(this.sourceCache[s]!==void 0)return this.sourceCache[s].then(lr=>lr.clone());const rn=_e.images[s],sn=self.URL||self.webkitURL;let yn=rn.uri||"",Pn=!1;if(rn.bufferView!==void 0)yn=b.getDependency("bufferView",rn.bufferView).then(function(lr){Pn=!0;const ar=new Blob([lr],{type:rn.mimeType});return yn=sn.createObjectURL(ar),yn});else if(rn.uri===void 0)throw new Error("THREE.GLTFLoader: Image "+s+" is missing URI and bufferView");const zn=Promise.resolve(yn).then(function(lr){return new Promise(function(ar,cr){let hr=ar;a.isImageBitmapLoader===!0&&(hr=function(es){const Ur=new Ct$1(es);Ur.needsUpdate=!0,ar(Ur)}),a.load(Aa$1.resolveURL(lr,bt.path),hr,void 0,cr)})}).then(function(lr){return Pn===!0&&sn.revokeObjectURL(yn),lr.userData.mimeType=rn.mimeType||u1(rn.uri),lr}).catch(function(lr){throw console.error("THREE.GLTFLoader: Couldn't load texture",yn),lr});return this.sourceCache[s]=zn,zn}assignTexture(s,a,b,_e){const bt=this;return this.getDependency("texture",b.index).then(function(rn){if(!rn)return null;if(b.texCoord!==void 0&&b.texCoord>0&&(rn=rn.clone(),rn.channel=b.texCoord),bt.extensions[et$2.KHR_TEXTURE_TRANSFORM]){const sn=b.extensions!==void 0?b.extensions[et$2.KHR_TEXTURE_TRANSFORM]:void 0;if(sn){const yn=bt.associations.get(rn);rn=bt.extensions[et$2.KHR_TEXTURE_TRANSFORM].extendTexture(rn,sn),bt.associations.set(rn,yn)}}return _e!==void 0&&(rn.colorSpace=_e),s[a]=rn,rn})}assignFinalMaterial(s){const a=s.geometry;let b=s.material;const _e=a.attributes.tangent===void 0,bt=a.attributes.color!==void 0,rn=a.attributes.normal===void 0;if(s.isPoints){const sn="PointsMaterial:"+b.uuid;let yn=this.cache.get(sn);yn||(yn=new cf$1,Rt$1.prototype.copy.call(yn,b),yn.color.copy(b.color),yn.map=b.map,yn.sizeAttenuation=!1,this.cache.add(sn,yn)),b=yn}else if(s.isLine){const sn="LineBasicMaterial:"+b.uuid;let yn=this.cache.get(sn);yn||(yn=new pn,Rt$1.prototype.copy.call(yn,b),yn.color.copy(b.color),yn.map=b.map,this.cache.add(sn,yn)),b=yn}if(_e||bt||rn){let sn="ClonedMaterial:"+b.uuid+":";_e&&(sn+="derivative-tangents:"),bt&&(sn+="vertex-colors:"),rn&&(sn+="flat-shading:");let yn=this.cache.get(sn);yn||(yn=b.clone(),bt&&(yn.vertexColors=!0),rn&&(yn.flatShading=!0),_e&&(yn.normalScale&&(yn.normalScale.y*=-1),yn.clearcoatNormalScale&&(yn.clearcoatNormalScale.y*=-1)),this.cache.add(sn,yn),this.associations.set(yn,this.associations.get(b))),b=yn}s.material=b}getMaterialType(){return Yi$1}loadMaterial(s){const a=this,b=this.json,_e=this.extensions,bt=b.materials[s];let rn;const sn={},yn=bt.extensions||{},Pn=[];if(yn[et$2.KHR_MATERIALS_UNLIT]){const lr=_e[et$2.KHR_MATERIALS_UNLIT];rn=lr.getMaterialType(),Pn.push(lr.extendParams(sn,bt,a))}else{const lr=bt.pbrMetallicRoughness||{};if(sn.color=new he$1(1,1,1),sn.opacity=1,Array.isArray(lr.baseColorFactor)){const ar=lr.baseColorFactor;sn.color.fromArray(ar),sn.opacity=ar[3]}lr.baseColorTexture!==void 0&&Pn.push(a.assignTexture(sn,"map",lr.baseColorTexture,we$2)),sn.metalness=lr.metallicFactor!==void 0?lr.metallicFactor:1,sn.roughness=lr.roughnessFactor!==void 0?lr.roughnessFactor:1,lr.metallicRoughnessTexture!==void 0&&(Pn.push(a.assignTexture(sn,"metalnessMap",lr.metallicRoughnessTexture)),Pn.push(a.assignTexture(sn,"roughnessMap",lr.metallicRoughnessTexture))),rn=this._invokeOne(function(ar){return ar.getMaterialType&&ar.getMaterialType(s)}),Pn.push(Promise.all(this._invokeAll(function(ar){return ar.extendMaterialParams&&ar.extendMaterialParams(s,sn)})))}bt.doubleSided===!0&&(sn.side=Jt);const zn=bt.alphaMode||Vh$1.OPAQUE;if(zn===Vh$1.BLEND?(sn.transparent=!0,sn.depthWrite=!1):(sn.transparent=!1,zn===Vh$1.MASK&&(sn.alphaTest=bt.alphaCutoff!==void 0?bt.alphaCutoff:.5)),bt.normalTexture!==void 0&&rn!==Zt&&(Pn.push(a.assignTexture(sn,"normalMap",bt.normalTexture)),sn.normalScale=new j$1(1,1),bt.normalTexture.scale!==void 0)){const lr=bt.normalTexture.scale;sn.normalScale.set(lr,lr)}return bt.occlusionTexture!==void 0&&rn!==Zt&&(Pn.push(a.assignTexture(sn,"aoMap",bt.occlusionTexture)),bt.occlusionTexture.strength!==void 0&&(sn.aoMapIntensity=bt.occlusionTexture.strength)),bt.emissiveFactor!==void 0&&rn!==Zt&&(sn.emissive=new he$1().fromArray(bt.emissiveFactor)),bt.emissiveTexture!==void 0&&rn!==Zt&&Pn.push(a.assignTexture(sn,"emissiveMap",bt.emissiveTexture,we$2)),Promise.all(Pn).then(function(){const lr=new rn(sn);return bt.name&&(lr.name=bt.name),ki$1(lr,bt),a.associations.set(lr,{materials:s}),bt.extensions&&us(_e,lr,bt),lr})}createUniqueName(s){const a=Je$1.sanitizeNodeName(s||"");return a in this.nodeNamesUsed?a+"_"+ ++this.nodeNamesUsed[a]:(this.nodeNamesUsed[a]=0,a)}loadGeometries(s){const a=this,b=this.extensions,_e=this.primitiveCache;function bt(sn){return b[et$2.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(sn,a).then(function(yn){return pm(yn,sn,a)})}const rn=[];for(let sn=0,yn=s.length;sn<yn;sn++){const Pn=s[sn],zn=h1(Pn),lr=_e[zn];if(lr)rn.push(lr.promise);else{let ar;Pn.extensions&&Pn.extensions[et$2.KHR_DRACO_MESH_COMPRESSION]?ar=bt(Pn):ar=pm(new Ve$1,Pn,a),_e[zn]={primitive:Pn,promise:ar},rn.push(ar)}}return Promise.all(rn)}loadMesh(s){const a=this,b=this.json,_e=this.extensions,bt=b.meshes[s],rn=bt.primitives,sn=[];for(let yn=0,Pn=rn.length;yn<Pn;yn++){const zn=rn[yn].material===void 0?a1(this.cache):this.getDependency("material",rn[yn].material);sn.push(zn)}return sn.push(a.loadGeometries(rn)),Promise.all(sn).then(function(yn){const Pn=yn.slice(0,yn.length-1),zn=yn[yn.length-1],lr=[];for(let cr=0,hr=zn.length;cr<hr;cr++){const es=zn[cr],Ur=rn[cr];let Dr;const zr=Pn[cr];if(Ur.mode===Rn.TRIANGLES||Ur.mode===Rn.TRIANGLE_STRIP||Ur.mode===Rn.TRIANGLE_FAN||Ur.mode===void 0)Dr=bt.isSkinnedMesh===!0?new vy(es,zr):new Te$2(es,zr),Dr.isSkinnedMesh===!0&&Dr.normalizeSkinWeights(),Ur.mode===Rn.TRIANGLE_STRIP?Dr.geometry=hm(Dr.geometry,ty):Ur.mode===Rn.TRIANGLE_FAN&&(Dr.geometry=hm(Dr.geometry,pd$1));else if(Ur.mode===Rn.LINES)Dr=new ti$1(es,zr);else if(Ur.mode===Rn.LINE_STRIP)Dr=new Xi$1(es,zr);else if(Ur.mode===Rn.LINE_LOOP)Dr=new _y$1(es,zr);else if(Ur.mode===Rn.POINTS)Dr=new xy(es,zr);else throw new Error("THREE.GLTFLoader: Primitive mode unsupported: "+Ur.mode);Object.keys(Dr.geometry.morphAttributes).length>0&&c1(Dr,bt),Dr.name=a.createUniqueName(bt.name||"mesh_"+s),ki$1(Dr,bt),Ur.extensions&&us(_e,Dr,Ur),a.assignFinalMaterial(Dr),lr.push(Dr)}for(let cr=0,hr=lr.length;cr<hr;cr++)a.associations.set(lr[cr],{meshes:s,primitives:cr});if(lr.length===1)return bt.extensions&&us(_e,lr[0],bt),lr[0];const ar=new Si$1;bt.extensions&&us(_e,ar,bt),a.associations.set(ar,{meshes:s});for(let cr=0,hr=lr.length;cr<hr;cr++)ar.add(lr[cr]);return ar})}loadCamera(s){let a;const b=this.json.cameras[s],_e=b[b.type];if(!_e){console.warn("THREE.GLTFLoader: Missing camera parameters.");return}return b.type==="perspective"?a=new It$1(Ec$1.radToDeg(_e.yfov),_e.aspectRatio||1,_e.znear||1,_e.zfar||2e6):b.type==="orthographic"&&(a=new ro(-_e.xmag,_e.xmag,_e.ymag,-_e.ymag,_e.znear,_e.zfar)),b.name&&(a.name=this.createUniqueName(b.name)),ki$1(a,b),Promise.resolve(a)}loadSkin(s){const a=this.json.skins[s],b=[];for(let _e=0,bt=a.joints.length;_e<bt;_e++)b.push(this._loadNodeShallow(a.joints[_e]));return a.inverseBindMatrices!==void 0?b.push(this.getDependency("accessor",a.inverseBindMatrices)):b.push(null),Promise.all(b).then(function(_e){const bt=_e.pop(),rn=_e,sn=[],yn=[];for(let Pn=0,zn=rn.length;Pn<zn;Pn++){const lr=rn[Pn];if(lr){sn.push(lr);const ar=new Be$1;bt!==null&&ar.fromArray(bt.array,Pn*16),yn.push(ar)}else console.warn('THREE.GLTFLoader: Joint "%s" could not be found.',a.joints[Pn])}return new Nc$1(sn,yn)})}loadAnimation(s){const a=this.json,b=this,_e=a.animations[s],bt=_e.name?_e.name:"animation_"+s,rn=[],sn=[],yn=[],Pn=[],zn=[];for(let lr=0,ar=_e.channels.length;lr<ar;lr++){const cr=_e.channels[lr],hr=_e.samplers[cr.sampler],es=cr.target,Ur=es.node,Dr=_e.parameters!==void 0?_e.parameters[hr.input]:hr.input,zr=_e.parameters!==void 0?_e.parameters[hr.output]:hr.output;es.node!==void 0&&(rn.push(this.getDependency("node",Ur)),sn.push(this.getDependency("accessor",Dr)),yn.push(this.getDependency("accessor",zr)),Pn.push(hr),zn.push(es))}return Promise.all([Promise.all(rn),Promise.all(sn),Promise.all(yn),Promise.all(Pn),Promise.all(zn)]).then(function(lr){const ar=lr[0],cr=lr[1],hr=lr[2],es=lr[3],Ur=lr[4],Dr=[];for(let zr=0,rs=ar.length;zr<rs;zr++){const as=ar[zr],os=cr[zr],ls=hr[zr],zs=es[zr],ho=Ur[zr];if(as===void 0)continue;as.updateMatrix&&(as.updateMatrix(),as.matrixAutoUpdate=!0);const ga=b._createAnimationTracks(as,os,ls,zs,ho);if(ga)for(let mo=0;mo<ga.length;mo++)Dr.push(ga[mo])}return new pa$1(bt,void 0,Dr)})}createNodeMesh(s){const a=this.json,b=this,_e=a.nodes[s];return _e.mesh===void 0?null:b.getDependency("mesh",_e.mesh).then(function(bt){const rn=b._getNodeRef(b.meshCache,_e.mesh,bt);return _e.weights!==void 0&&rn.traverse(function(sn){if(sn.isMesh)for(let yn=0,Pn=_e.weights.length;yn<Pn;yn++)sn.morphTargetInfluences[yn]=_e.weights[yn]}),rn})}loadNode(s){const a=this.json,b=this,_e=a.nodes[s],bt=b._loadNodeShallow(s),rn=[],sn=_e.children||[];for(let Pn=0,zn=sn.length;Pn<zn;Pn++)rn.push(b.getDependency("node",sn[Pn]));const yn=_e.skin===void 0?Promise.resolve(null):b.getDependency("skin",_e.skin);return Promise.all([bt,Promise.all(rn),yn]).then(function(Pn){const zn=Pn[0],lr=Pn[1],ar=Pn[2];ar!==null&&zn.traverse(function(cr){cr.isSkinnedMesh&&cr.bind(ar,d1)});for(let cr=0,hr=lr.length;cr<hr;cr++)zn.add(lr[cr]);return zn})}_loadNodeShallow(s){const a=this.json,b=this.extensions,_e=this;if(this.nodeCache[s]!==void 0)return this.nodeCache[s];const bt=a.nodes[s],rn=bt.name?_e.createUniqueName(bt.name):"",sn=[],yn=_e._invokeOne(function(Pn){return Pn.createNodeMesh&&Pn.createNodeMesh(s)});return yn&&sn.push(yn),bt.camera!==void 0&&sn.push(_e.getDependency("camera",bt.camera).then(function(Pn){return _e._getNodeRef(_e.cameraCache,bt.camera,Pn)})),_e._invokeAll(function(Pn){return Pn.createNodeAttachment&&Pn.createNodeAttachment(s)}).forEach(function(Pn){sn.push(Pn)}),this.nodeCache[s]=Promise.all(sn).then(function(Pn){let zn;if(bt.isBone===!0?zn=new lf$1:Pn.length>1?zn=new Si$1:Pn.length===1?zn=Pn[0]:zn=new je$1,zn!==Pn[0])for(let lr=0,ar=Pn.length;lr<ar;lr++)zn.add(Pn[lr]);if(bt.name&&(zn.userData.name=bt.name,zn.name=rn),ki$1(zn,bt),bt.extensions&&us(b,zn,bt),bt.matrix!==void 0){const lr=new Be$1;lr.fromArray(bt.matrix),zn.applyMatrix4(lr)}else bt.translation!==void 0&&zn.position.fromArray(bt.translation),bt.rotation!==void 0&&zn.quaternion.fromArray(bt.rotation),bt.scale!==void 0&&zn.scale.fromArray(bt.scale);return _e.associations.has(zn)||_e.associations.set(zn,{}),_e.associations.get(zn).nodes=s,zn}),this.nodeCache[s]}loadScene(s){const a=this.extensions,b=this.json.scenes[s],_e=this,bt=new Si$1;b.name&&(bt.name=_e.createUniqueName(b.name)),ki$1(bt,b),b.extensions&&us(a,bt,b);const rn=b.nodes||[],sn=[];for(let yn=0,Pn=rn.length;yn<Pn;yn++)sn.push(_e.getDependency("node",rn[yn]));return Promise.all(sn).then(function(yn){for(let zn=0,lr=yn.length;zn<lr;zn++)bt.add(yn[zn]);const Pn=zn=>{const lr=new Map;for(const[ar,cr]of _e.associations)(ar instanceof Rt$1||ar instanceof Ct$1)&&lr.set(ar,cr);return zn.traverse(ar=>{const cr=_e.associations.get(ar);cr!=null&&lr.set(ar,cr)}),lr};return _e.associations=Pn(bt),bt})}_createAnimationTracks(s,a,b,_e,bt){const rn=[],sn=s.name?s.name:s.uuid,yn=[];Ni$1[bt.path]===Ni$1.weights?s.traverse(function(ar){ar.morphTargetInfluences&&yn.push(ar.name?ar.name:ar.uuid)}):yn.push(sn);let Pn;switch(Ni$1[bt.path]){case Ni$1.weights:Pn=Kr;break;case Ni$1.rotation:Pn=Fs;break;case Ni$1.position:case Ni$1.scale:default:switch(b.itemSize){case 1:Pn=Kr;break;case 2:case 3:Pn=fa$1;break}break}const zn=_e.interpolation!==void 0?o1[_e.interpolation]:Ps,lr=this._getArrayFromAccessor(b);for(let ar=0,cr=yn.length;ar<cr;ar++){const hr=new Pn(yn[ar]+"."+Ni$1[bt.path],a.array,lr,zn);zn==="CUBICSPLINE"&&this._createCubicSplineTrackInterpolant(hr),rn.push(hr)}return rn}_getArrayFromAccessor(s){let a=s.array;if(s.normalized){const b=Td$1(a.constructor),_e=new Float32Array(a.length);for(let bt=0,rn=a.length;bt<rn;bt++)_e[bt]=a[bt]*b;a=_e}return a}_createCubicSplineTrackInterpolant(s){s.createInterpolant=function(a){const b=this instanceof Fs?r1:ev;return new b(this.times,this.values,this.getValueSize()/3,a)},s.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline=!0}}function p1(o,s,a){const b=s.attributes,_e=new Kt;if(b.POSITION!==void 0){const sn=a.json.accessors[b.POSITION],yn=sn.min,Pn=sn.max;if(yn!==void 0&&Pn!==void 0){if(_e.set(new C$2(yn[0],yn[1],yn[2]),new C$2(Pn[0],Pn[1],Pn[2])),sn.normalized){const zn=Td$1(Vr[sn.componentType]);_e.min.multiplyScalar(zn),_e.max.multiplyScalar(zn)}}else{console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");return}}else return;const bt=s.targets;if(bt!==void 0){const sn=new C$2,yn=new C$2;for(let Pn=0,zn=bt.length;Pn<zn;Pn++){const lr=bt[Pn];if(lr.POSITION!==void 0){const ar=a.json.accessors[lr.POSITION],cr=ar.min,hr=ar.max;if(cr!==void 0&&hr!==void 0){if(yn.setX(Math.max(Math.abs(cr[0]),Math.abs(hr[0]))),yn.setY(Math.max(Math.abs(cr[1]),Math.abs(hr[1]))),yn.setZ(Math.max(Math.abs(cr[2]),Math.abs(hr[2]))),ar.normalized){const es=Td$1(Vr[ar.componentType]);yn.multiplyScalar(es)}sn.max(yn)}else console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.")}}_e.expandByVector(sn)}o.boundingBox=_e;const rn=new bn;_e.getCenter(rn.center),rn.radius=_e.min.distanceTo(_e.max)/2,o.boundingSphere=rn}function pm(o,s,a){const b=s.attributes,_e=[];function bt(rn,sn){return a.getDependency("accessor",rn).then(function(yn){o.setAttribute(sn,yn)})}for(const rn in b){const sn=bd$1[rn]||rn.toLowerCase();sn in o.attributes||_e.push(bt(b[rn],sn))}if(s.indices!==void 0&&!o.index){const rn=a.getDependency("accessor",s.indices).then(function(sn){o.setIndex(sn)});_e.push(rn)}return ki$1(o,s),p1(o,s,a),Promise.all(_e).then(function(){return s.targets!==void 0?l1(o,s.targets,a):o})}class A1{constructor(s=4){this.pool=s,this.queue=[],this.workers=[],this.workersResolve=[],this.workerStatus=0}_initWorker(s){if(!this.workers[s]){const a=this.workerCreator();a.addEventListener("message",this._onMessage.bind(this,s)),this.workers[s]=a}}_getIdleWorker(){for(let s=0;s<this.pool;s++)if(!(this.workerStatus&1<<s))return s;return-1}_onMessage(s,a){const b=this.workersResolve[s];if(b&&b(a),this.queue.length){const{resolve:_e,msg:bt,transfer:rn}=this.queue.shift();this.workersResolve[s]=_e,this.workers[s].postMessage(bt,rn)}else this.workerStatus^=1<<s}setWorkerCreator(s){this.workerCreator=s}setWorkerLimit(s){this.pool=s}postMessage(s,a){return new Promise(b=>{const _e=this._getIdleWorker();_e!==-1?(this._initWorker(_e),this.workerStatus|=1<<_e,this.workersResolve[_e]=b,this.workers[_e].postMessage(s,a)):this.queue.push({resolve:b,msg:s,transfer:a})})}dispose(){this.workers.forEach(s=>s.terminate()),this.workersResolve.length=0,this.workers.length=0,this.queue.length=0,this.workerStatus=0}}const m1=0,g1=2,y1=1,v1$3=2,E1=0,tv=9,Of$1=15,nv=16,Qf$1=22,iv=37,kf$1=43,sv=76,rv=83,ov=97,av=100,lv=103,cv=109;class _1{constructor(){this.vkFormat=0,this.typeSize=1,this.pixelWidth=0,this.pixelHeight=0,this.pixelDepth=0,this.layerCount=0,this.faceCount=1,this.supercompressionScheme=0,this.levels=[],this.dataFormatDescriptor=[{vendorId:0,descriptorType:0,descriptorBlockSize:0,versionNumber:2,colorModel:0,colorPrimaries:1,transferFunction:2,flags:0,texelBlockDimension:[0,0,0,0],bytesPlane:[0,0,0,0,0,0,0,0],samples:[]}],this.keyValue={},this.globalData=null}}class wo{constructor(s,a,b,_e){this._dataView=new DataView(s.buffer,s.byteOffset+a,b),this._littleEndian=_e,this._offset=0}_nextUint8(){const s=this._dataView.getUint8(this._offset);return this._offset+=1,s}_nextUint16(){const s=this._dataView.getUint16(this._offset,this._littleEndian);return this._offset+=2,s}_nextUint32(){const s=this._dataView.getUint32(this._offset,this._littleEndian);return this._offset+=4,s}_nextUint64(){const s=this._dataView.getUint32(this._offset,this._littleEndian)+4294967296*this._dataView.getUint32(this._offset+4,this._littleEndian);return this._offset+=8,s}_nextInt32(){const s=this._dataView.getInt32(this._offset,this._littleEndian);return this._offset+=4,s}_skip(s){return this._offset+=s,this}_scan(s,a=0){const b=this._offset;let _e=0;for(;this._dataView.getUint8(this._offset)!==a&&_e<s;)_e++,this._offset++;return _e<s&&this._offset++,new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+b,_e)}}const an=[171,75,84,88,32,50,48,187,13,10,26,10];function Am(o){return typeof TextDecoder<"u"?new TextDecoder().decode(o):Buffer.from(o).toString("utf8")}function x1(o){const s=new Uint8Array(o.buffer,o.byteOffset,an.length);if(s[0]!==an[0]||s[1]!==an[1]||s[2]!==an[2]||s[3]!==an[3]||s[4]!==an[4]||s[5]!==an[5]||s[6]!==an[6]||s[7]!==an[7]||s[8]!==an[8]||s[9]!==an[9]||s[10]!==an[10]||s[11]!==an[11])throw new Error("Missing KTX 2.0 identifier.");const a=new _1,b=17*Uint32Array.BYTES_PER_ELEMENT,_e=new wo(o,an.length,b,!0);a.vkFormat=_e._nextUint32(),a.typeSize=_e._nextUint32(),a.pixelWidth=_e._nextUint32(),a.pixelHeight=_e._nextUint32(),a.pixelDepth=_e._nextUint32(),a.layerCount=_e._nextUint32(),a.faceCount=_e._nextUint32();const bt=_e._nextUint32();a.supercompressionScheme=_e._nextUint32();const rn=_e._nextUint32(),sn=_e._nextUint32(),yn=_e._nextUint32(),Pn=_e._nextUint32(),zn=_e._nextUint64(),lr=_e._nextUint64(),ar=new wo(o,an.length+b,3*bt*8,!0);for(let by=0;by<bt;by++)a.levels.push({levelData:new Uint8Array(o.buffer,o.byteOffset+ar._nextUint64(),ar._nextUint64()),uncompressedByteLength:ar._nextUint64()});const cr=new wo(o,rn,sn,!0),hr={vendorId:cr._skip(4)._nextUint16(),descriptorType:cr._nextUint16(),versionNumber:cr._nextUint16(),descriptorBlockSize:cr._nextUint16(),colorModel:cr._nextUint8(),colorPrimaries:cr._nextUint8(),transferFunction:cr._nextUint8(),flags:cr._nextUint8(),texelBlockDimension:[cr._nextUint8(),cr._nextUint8(),cr._nextUint8(),cr._nextUint8()],bytesPlane:[cr._nextUint8(),cr._nextUint8(),cr._nextUint8(),cr._nextUint8(),cr._nextUint8(),cr._nextUint8(),cr._nextUint8(),cr._nextUint8()],samples:[]},es=(hr.descriptorBlockSize/4-6)/4;for(let by=0;by<es;by++){const Al={bitOffset:cr._nextUint16(),bitLength:cr._nextUint8(),channelType:cr._nextUint8(),samplePosition:[cr._nextUint8(),cr._nextUint8(),cr._nextUint8(),cr._nextUint8()],sampleLower:-1/0,sampleUpper:1/0};64&Al.channelType?(Al.sampleLower=cr._nextInt32(),Al.sampleUpper=cr._nextInt32()):(Al.sampleLower=cr._nextUint32(),Al.sampleUpper=cr._nextUint32()),hr.samples[by]=Al}a.dataFormatDescriptor.length=0,a.dataFormatDescriptor.push(hr);const Ur=new wo(o,yn,Pn,!0);for(;Ur._offset<Pn;){const by=Ur._nextUint32(),Al=Ur._scan(by),_f=Am(Al),gy=Ur._scan(by-Al.byteLength);a.keyValue[_f]=_f.match(/^ktx/i)?Am(gy):gy,Ur._offset%4&&Ur._skip(4-Ur._offset%4)}if(lr<=0)return a;const Dr=new wo(o,zn,lr,!0),zr=Dr._nextUint16(),rs=Dr._nextUint16(),as=Dr._nextUint32(),os=Dr._nextUint32(),ls=Dr._nextUint32(),zs=Dr._nextUint32(),ho=[];for(let by=0;by<bt;by++)ho.push({imageFlags:Dr._nextUint32(),rgbSliceByteOffset:Dr._nextUint32(),rgbSliceByteLength:Dr._nextUint32(),alphaSliceByteOffset:Dr._nextUint32(),alphaSliceByteLength:Dr._nextUint32()});const ga=zn+Dr._offset,mo=ga+as,go=mo+os,yl=go+ls,Zl=new Uint8Array(o.buffer,o.byteOffset+ga,as),_d=new Uint8Array(o.buffer,o.byteOffset+mo,os),Ty=new Uint8Array(o.buffer,o.byteOffset+go,ls),yy=new Uint8Array(o.buffer,o.byteOffset+yl,zs);return a.globalData={endpointCount:zr,selectorCount:rs,imageDescs:ho,endpointsData:Zl,selectorsData:_d,tablesData:Ty,extendedData:yy},a}let qh$1,Ei$1,Bd$1;const $h$1={env:{emscripten_notify_memory_growth:function(o){Bd$1=new Uint8Array(Ei$1.exports.memory.buffer)}}};class S1{init(){return qh$1||(qh$1=typeof fetch<"u"?fetch("data:application/wasm;base64,"+mm).then(s=>s.arrayBuffer()).then(s=>WebAssembly.instantiate(s,$h$1)).then(this._init):WebAssembly.instantiate(Buffer.from(mm,"base64"),$h$1).then(this._init),qh$1)}_init(s){Ei$1=s.instance,$h$1.env.emscripten_notify_memory_growth(0)}decode(s,a=0){if(!Ei$1)throw new Error("ZSTDDecoder: Await .init() before decoding.");const b=s.byteLength,_e=Ei$1.exports.malloc(b);Bd$1.set(s,_e),a=a||Number(Ei$1.exports.ZSTD_findDecompressedSize(_e,b));const bt=Ei$1.exports.malloc(a),rn=Ei$1.exports.ZSTD_decompress(bt,a,_e,b),sn=Bd$1.slice(bt,bt+rn);return Ei$1.exports.free(_e),Ei$1.exports.free(bt),sn}}const mm="AGFzbQEAAAABpQEVYAF/AX9gAn9/AGADf39/AX9gBX9/f39/AX9gAX8AYAJ/fwF/YAR/f39/AX9gA39/fwBgBn9/f39/fwF/YAd/f39/f39/AX9gAn9/AX5gAn5+AX5gAABgBX9/f39/AGAGf39/f39/AGAIf39/f39/f38AYAl/f39/f39/f38AYAABf2AIf39/f39/f38Bf2ANf39/f39/f39/f39/fwF/YAF/AX4CJwEDZW52H2Vtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGgABANpaAEFAAAFAgEFCwACAQABAgIFBQcAAwABDgsBAQcAEhMHAAUBDAQEAAANBwQCAgYCBAgDAwMDBgEACQkHBgICAAYGAgQUBwYGAwIGAAMCAQgBBwUGCgoEEQAEBAEIAwgDBQgDEA8IAAcABAUBcAECAgUEAQCAAgYJAX8BQaCgwAILB2AHBm1lbW9yeQIABm1hbGxvYwAoBGZyZWUAJgxaU1REX2lzRXJyb3IAaBlaU1REX2ZpbmREZWNvbXByZXNzZWRTaXplAFQPWlNURF9kZWNvbXByZXNzAEoGX3N0YXJ0ACQJBwEAQQELASQKussBaA8AIAAgACgCBCABajYCBAsZACAAKAIAIAAoAgRBH3F0QQAgAWtBH3F2CwgAIABBiH9LC34BBH9BAyEBIAAoAgQiA0EgTQRAIAAoAggiASAAKAIQTwRAIAAQDQ8LIAAoAgwiAiABRgRAQQFBAiADQSBJGw8LIAAgASABIAJrIANBA3YiBCABIARrIAJJIgEbIgJrIgQ2AgggACADIAJBA3RrNgIEIAAgBCgAADYCAAsgAQsUAQF/IAAgARACIQIgACABEAEgAgv3AQECfyACRQRAIABCADcCACAAQQA2AhAgAEIANwIIQbh/DwsgACABNgIMIAAgAUEEajYCECACQQRPBEAgACABIAJqIgFBfGoiAzYCCCAAIAMoAAA2AgAgAUF/ai0AACIBBEAgAEEIIAEQFGs2AgQgAg8LIABBADYCBEF/DwsgACABNgIIIAAgAS0AACIDNgIAIAJBfmoiBEEBTQRAIARBAWtFBEAgACABLQACQRB0IANyIgM2AgALIAAgAS0AAUEIdCADajYCAAsgASACakF/ai0AACIBRQRAIABBADYCBEFsDwsgAEEoIAEQFCACQQN0ams2AgQgAgsWACAAIAEpAAA3AAAgACABKQAINwAICy8BAX8gAUECdEGgHWooAgAgACgCAEEgIAEgACgCBGprQR9xdnEhAiAAIAEQASACCyEAIAFCz9bTvtLHq9lCfiAAfEIfiUKHla+vmLbem55/fgsdAQF/IAAoAgggACgCDEYEfyAAKAIEQSBGBUEACwuCBAEDfyACQYDAAE8EQCAAIAEgAhBnIAAPCyAAIAJqIQMCQCAAIAFzQQNxRQRAAkAgAkEBSARAIAAhAgwBCyAAQQNxRQRAIAAhAgwBCyAAIQIDQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADTw0BIAJBA3ENAAsLAkAgA0F8cSIEQcAASQ0AIAIgBEFAaiIFSw0AA0AgAiABKAIANgIAIAIgASgCBDYCBCACIAEoAgg2AgggAiABKAIMNgIMIAIgASgCEDYCECACIAEoAhQ2AhQgAiABKAIYNgIYIAIgASgCHDYCHCACIAEoAiA2AiAgAiABKAIkNgIkIAIgASgCKDYCKCACIAEoAiw2AiwgAiABKAIwNgIwIAIgASgCNDYCNCACIAEoAjg2AjggAiABKAI8NgI8IAFBQGshASACQUBrIgIgBU0NAAsLIAIgBE8NAQNAIAIgASgCADYCACABQQRqIQEgAkEEaiICIARJDQALDAELIANBBEkEQCAAIQIMAQsgA0F8aiIEIABJBEAgACECDAELIAAhAgNAIAIgAS0AADoAACACIAEtAAE6AAEgAiABLQACOgACIAIgAS0AAzoAAyABQQRqIQEgAkEEaiICIARNDQALCyACIANJBEADQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADRw0ACwsgAAsMACAAIAEpAAA3AAALQQECfyAAKAIIIgEgACgCEEkEQEEDDwsgACAAKAIEIgJBB3E2AgQgACABIAJBA3ZrIgE2AgggACABKAAANgIAQQALDAAgACABKAIANgAAC/cCAQJ/AkAgACABRg0AAkAgASACaiAASwRAIAAgAmoiBCABSw0BCyAAIAEgAhALDwsgACABc0EDcSEDAkACQCAAIAFJBEAgAwRAIAAhAwwDCyAAQQNxRQRAIAAhAwwCCyAAIQMDQCACRQ0EIAMgAS0AADoAACABQQFqIQEgAkF/aiECIANBAWoiA0EDcQ0ACwwBCwJAIAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQhBSAGQQR2IQRBICAAdCIAQQFyIQkgASgCACEPQQAhAiADIQYCQANAIAlBAkggAiAPS3JFBEAgAiEHAkAgCARAA0AgBEH//wNxQf//A0YEQCAHQRhqIQcgBiAQSQR/IAZBAmoiBigAACAFdgUgBUEQaiEFIARBEHYLIQQMAQsLA0AgBEEDcSIIQQNGBEAgBUECaiEFIARBAnYhBCAHQQNqIQcMAQsLIAcgCGoiByAPSw0EIAVBAmohBQNAIAIgB0kEQCANIAJBAXRqQQA7AQAgAkEBaiECDAELCyAGIA5LQQAgBiAFQQN1aiIHIAxLG0UEQCAHKAAAIAVBB3EiBXYhBAwCCyAEQQJ2IQQLIAYhBwsCfyALQX9qIAQgAEF/anEiBiAAQQF0QX9qIgggCWsiEUkNABogBCAIcSIEQQAgESAEIABIG2shBiALCyEIIA0gAkEBdGogBkF/aiIEOwEAIAlBASAGayAEIAZBAUgbayEJA0AgCSAASARAIABBAXUhACALQX9qIQsMAQsLAn8gByAOS0EAIAcgBSAIaiIFQQN1aiIGIAxLG0UEQCAFQQdxDAELIAUgDCIGIAdrQQN0awshBSACQQFqIQIgBEUhCCAGKAAAIAVBH3F2IQQMAQsLQWwgCUEBRyAFQSBKcg0BGiABIAJBf2o2AgAgBiAFQQdqQQN1aiADawwBC0FQCyEAIApBEGokACAACwkAQQFBBSAAGwsMACAAIAEoAAA2AAALqgMBCn8jAEHwAGsiCiQAIAJBAWohDiAAQQhqIQtBgIAEIAVBf2p0QRB1IQxBACECQQEhBkEBIAV0IglBf2oiDyEIA0AgAiAORkUEQAJAIAEgAkEBdCINai8BACIHQf//A0YEQCALIAhBA3RqIAI2AgQgCEF/aiEIQQEhBwwBCyAGQQAgDCAHQRB0QRB1ShshBgsgCiANaiAHOwEAIAJBAWohAgwBCwsgACAFNgIEIAAgBjYCACAJQQN2IAlBAXZqQQNqIQxBACEAQQAhBkEAIQIDQCAGIA5GBEADQAJAIAAgCUYNACAKIAsgAEEDdGoiASgCBCIGQQF0aiICIAIvAQAiAkEBajsBACABIAUgAhAUayIIOgADIAEgAiAIQf8BcXQgCWs7AQAgASAEIAZBAnQiAmooAgA6AAIgASACIANqKAIANgIEIABBAWohAAwBCwsFIAEgBkEBdGouAQAhDUEAIQcDQCAHIA1ORQRAIAsgAkEDdGogBjYCBANAIAIgDGogD3EiAiAISw0ACyAHQQFqIQcMAQsLIAZBAWohBgwBCwsgCkHwAGokAAsjAEIAIAEQCSAAhUKHla+vmLbem55/fkLj3MqV/M7y9YV/fAsQACAAQn43AwggACABNgIACyQBAX8gAARAIAEoAgQiAgRAIAEoAgggACACEQEADwsgABAmCwsfACAAIAEgAi8BABAINgIAIAEQBBogACACQQRqNgIEC0oBAX9BoCAoAgAiASAAaiIAQX9MBEBBiCBBMDYCAEF/DwsCQCAAPwBBEHRNDQAgABBmDQBBiCBBMDYCAEF/DwtBoCAgADYCACABC9cBAQh/Qbp/IQoCQCACKAIEIgggAigCACIJaiIOIAEgAGtLDQBBbCEKIAkgBCADKAIAIgtrSw0AIAAgCWoiBCACKAIIIgxrIQ0gACABQWBqIg8gCyAJQQAQKSADIAkgC2o2AgACQAJAIAwgBCAFa00EQCANIQUMAQsgDCAEIAZrSw0CIAcgDSAFayIAaiIBIAhqIAdNBEAgBCABIAgQDxoMAgsgBCABQQAgAGsQDyEBIAIgACAIaiIINgIEIAEgAGshBAsgBCAPIAUgCEEBECkLIA4hCgsgCgubAgEBfyMAQYABayINJAAgDSADNgJ8AkAgAkEDSwRAQX8hCQwBCwJAAkACQAJAIAJBAWsOAwADAgELIAZFBEBBuH8hCQwEC0FsIQkgBS0AACICIANLDQMgACAHIAJBAnQiAmooAgAgAiAIaigCABA7IAEgADYCAEEBIQkMAwsgASAJNgIAQQAhCQwCCyAKRQRAQWwhCQwCC0EAIQkgC0UgDEEZSHINAUEIIAR0QQhqIQBBACECA0AgAiAATw0CIAJBQGshAgwAAAsAC0FsIQkgDSANQfwAaiANQfgAaiAFIAYQFSICEAMNACANKAJ4IgMgBEsNACAAIA0gDSgCfCAHIAggAxAYIAEgADYCACACIQkLIA1BgAFqJAAgCQsLACAAIAEgAhALGgsQACAALwAAIAAtAAJBEHRyCy8AAn9BuH8gAUEISQ0AGkFyIAAoAAQiAEF3Sw0AGkG4fyAAQQhqIgAgACABSxsLCwkAIAAgATsAAAsDAAELigYBBX8gACAAKAIAIgVBfnE2AgBBACAAIAVBAXZqQYQgKAIAIgQgAEYbIQECQAJAIAAoAgQiAkUNACACKAIAIgNBAXENACACQQhqIgUgA0EBdkF4aiIDQQggA0EISxtnQR9zQQJ0QYAfaiIDKAIARgRAIAMgAigCDDYCAAsgAigCCCIDBEAgAyACKAIMNgIECyACKAIMIgMEQCADIAIoAgg2AgALIAIgAigCACAAKAIAQX5xajYCAEGEICEAAkACQCABRQ0AIAEgAjYCBCABKAIAIgNBAXENASADQQF2QXhqIgNBCCADQQhLG2dBH3NBAnRBgB9qIgMoAgAgAUEIakYEQCADIAEoAgw2AgALIAEoAggiAwRAIAMgASgCDDYCBAsgASgCDCIDBEAgAyABKAIINgIAQYQgKAIAIQQLIAIgAigCACABKAIAQX5xajYCACABIARGDQAgASABKAIAQQF2akEEaiEACyAAIAI2AgALIAIoAgBBAXZBeGoiAEEIIABBCEsbZ0Efc0ECdEGAH2oiASgCACEAIAEgBTYCACACIAA2AgwgAkEANgIIIABFDQEgACAFNgIADwsCQCABRQ0AIAEoAgAiAkEBcQ0AIAJBAXZBeGoiAkEIIAJBCEsbZ0Efc0ECdEGAH2oiAigCACABQQhqRgRAIAIgASgCDDYCAAsgASgCCCICBEAgAiABKAIMNgIECyABKAIMIgIEQCACIAEoAgg2AgBBhCAoAgAhBAsgACAAKAIAIAEoAgBBfnFqIgI2AgACQCABIARHBEAgASABKAIAQQF2aiAANgIEIAAoAgAhAgwBC0GEICAANgIACyACQQF2QXhqIgFBCCABQQhLG2dBH3NBAnRBgB9qIgIoAgAhASACIABBCGoiAjYCACAAIAE2AgwgAEEANgIIIAFFDQEgASACNgIADwsgBUEBdkF4aiIBQQggAUEISxtnQR9zQQJ0QYAfaiICKAIAIQEgAiAAQQhqIgI2AgAgACABNgIMIABBADYCCCABRQ0AIAEgAjYCAAsLDgAgAARAIABBeGoQJQsLgAIBA38CQCAAQQ9qQXhxQYQgKAIAKAIAQQF2ayICEB1Bf0YNAAJAQYQgKAIAIgAoAgAiAUEBcQ0AIAFBAXZBeGoiAUEIIAFBCEsbZ0Efc0ECdEGAH2oiASgCACAAQQhqRgRAIAEgACgCDDYCAAsgACgCCCIBBEAgASAAKAIMNgIECyAAKAIMIgFFDQAgASAAKAIINgIAC0EBIQEgACAAKAIAIAJBAXRqIgI2AgAgAkEBcQ0AIAJBAXZBeGoiAkEIIAJBCEsbZ0Efc0ECdEGAH2oiAygCACECIAMgAEEIaiIDNgIAIAAgAjYCDCAAQQA2AgggAkUNACACIAM2AgALIAELtwIBA38CQAJAIABBASAAGyICEDgiAA0AAkACQEGEICgCACIARQ0AIAAoAgAiA0EBcQ0AIAAgA0EBcjYCACADQQF2QXhqIgFBCCABQQhLG2dBH3NBAnRBgB9qIgEoAgAgAEEIakYEQCABIAAoAgw2AgALIAAoAggiAQRAIAEgACgCDDYCBAsgACgCDCIBBEAgASAAKAIINgIACyACECchAkEAIQFBhCAoAgAhACACDQEgACAAKAIAQX5xNgIAQQAPCyACQQ9qQXhxIgMQHSICQX9GDQIgAkEHakF4cSIAIAJHBEAgACACaxAdQX9GDQMLAkBBhCAoAgAiAUUEQEGAICAANgIADAELIAAgATYCBAtBhCAgADYCACAAIANBAXRBAXI2AgAMAQsgAEUNAQsgAEEIaiEBCyABC7kDAQJ/IAAgA2ohBQJAIANBB0wEQANAIAAgBU8NAiAAIAItAAA6AAAgAEEBaiEAIAJBAWohAgwAAAsACyAEQQFGBEACQCAAIAJrIgZBB00EQCAAIAItAAA6AAAgACACLQABOgABIAAgAi0AAjoAAiAAIAItAAM6AAMgAEEEaiACIAZBAnQiBkHAHmooAgBqIgIQFyACIAZB4B5qKAIAayECDAELIAAgAhAMCyACQQhqIQIgAEEIaiEACwJAAkACQAJAIAUgAU0EQCAAIANqIQEgBEEBRyAAIAJrQQ9Kcg0BA0AgACACEAwgAkEIaiECIABBCGoiACABSQ0ACwwFCyAAIAFLBEAgACEBDAQLIARBAUcgACACa0EPSnINASAAIQMgAiEEA0AgAyAEEAwgBEEIaiEEIANBCGoiAyABSQ0ACwwCCwNAIAAgAhAHIAJBEGohAiAAQRBqIgAgAUkNAAsMAwsgACEDIAIhBANAIAMgBBAHIARBEGohBCADQRBqIgMgAUkNAAsLIAIgASAAa2ohAgsDQCABIAVPDQEgASACLQAAOgAAIAFBAWohASACQQFqIQIMAAALAAsLQQECfyAAIAAoArjgASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigCACACaiAAQQZ2IgFBAnRBsB5qKAIAaiAAQSBxIgBFaiABRSAAQQV2cWoFQbh/CwsdACAAKAKQ4gEQWiAAQQA2AqDiASAAQgA3A5DiAQu1AwEFfyMAQZACayIKJABBuH8hBgJAIAVFDQAgBCwAACIIQf8BcSEHAkAgCEF/TARAIAdBgn9qQQF2IgggBU8NAkFsIQYgB0GBf2oiBUGAAk8NAiAEQQFqIQdBACEGA0AgBiAFTwRAIAUhBiAIIQcMAwUgACAGaiAHIAZBAXZqIgQtAABBBHY6AAAgACAGQQFyaiAELQAAQQ9xOgAAIAZBAmohBgwBCwAACwALIAcgBU8NASAAIARBAWogByAKEFMiBhADDQELIAYhBEEAIQYgAUEAQTQQECEJQQAhBQNAIAQgBkcEQCAAIAZqIggtAAAiAUELSwRAQWwhBgwDBSAJIAFBAnRqIgEgASgCAEEBajYCACAGQQFqIQZBASAILQAAdEEBdSAFaiEFDAILAAsLQWwhBiAFRQ0AIAUQFEEBaiIBQQxLDQAgAyABNgIAQQFBASABdCAFayIDEBQiAXQgA0cNACAAIARqIAFBAWoiADoAACAJIABBAnRqIgAgACgCAEEBajYCACAJKAIEIgBBAkkgAEEBcXINACACIARBAWo2AgAgB0EBaiEGCyAKQZACaiQAIAYLxhEBDH8jAEHwAGsiBSQAQWwhCwJAIANBCkkNACACLwAAIQogAi8AAiEJIAIvAAQhByAFQQhqIAQQDgJAIAMgByAJIApqakEGaiIMSQ0AIAUtAAohCCAFQdgAaiACQQZqIgIgChAGIgsQAw0BIAVBQGsgAiAKaiICIAkQBiILEAMNASAFQShqIAIgCWoiAiAHEAYiCxADDQEgBUEQaiACIAdqIAMgDGsQBiILEAMNASAAIAFqIg9BfWohECAEQQRqIQZBASELIAAgAUEDakECdiIDaiIMIANqIgIgA2oiDiEDIAIhBCAMIQcDQCALIAMgEElxBEAgACAGIAVB2ABqIAgQAkECdGoiCS8BADsAACAFQdgAaiAJLQACEAEgCS0AAyELIAcgBiAFQUBrIAgQAkECdGoiCS8BADsAACAFQUBrIAktAAIQASAJLQADIQogBCAGIAVBKGogCBACQQJ0aiIJLwEAOwAAIAVBKGogCS0AAhABIAktAAMhCSADIAYgBUEQaiAIEAJBAnRqIg0vAQA7AAAgBUEQaiANLQACEAEgDS0AAyENIAAgC2oiCyAGIAVB2ABqIAgQAkECdGoiAC8BADsAACAFQdgAaiAALQACEAEgAC0AAyEAIAcgCmoiCiAGIAVBQGsgCBACQQJ0aiIHLwEAOwAAIAVBQGsgBy0AAhABIActAAMhByAEIAlqIgkgBiAFQShqIAgQAkECdGoiBC8BADsAACAFQShqIAQtAAIQASAELQADIQQgAyANaiIDIAYgBUEQaiAIEAJBAnRqIg0vAQA7AAAgBUEQaiANLQACEAEgACALaiEAIAcgCmohByAEIAlqIQQgAyANLQADaiEDIAVB2ABqEA0gBUFAaxANciAFQShqEA1yIAVBEGoQDXJFIQsMAQsLIAQgDksgByACS3INAEFsIQsgACAMSw0BIAxBfWohCQNAQQAgACAJSSAFQdgAahAEGwRAIAAgBiAFQdgAaiAIEAJBAnRqIgovAQA7AAAgBUHYAGogCi0AAhABIAAgCi0AA2oiACAGIAVB2ABqIAgQAkECdGoiCi8BADsAACAFQdgAaiAKLQACEAEgACAKLQADaiEADAEFIAxBfmohCgNAIAVB2ABqEAQgACAKS3JFBEAgACAGIAVB2ABqIAgQAkECdGoiCS8BADsAACAFQdgAaiAJLQACEAEgACAJLQADaiEADAELCwNAIAAgCk0EQCAAIAYgBUHYAGogCBACQQJ0aiIJLwEAOwAAIAVB2ABqIAktAAIQASAAIAktAANqIQAMAQsLAkAgACAMTw0AIAAgBiAFQdgAaiAIEAIiAEECdGoiDC0AADoAACAMLQADQQFGBEAgBUHYAGogDC0AAhABDAELIAUoAlxBH0sNACAFQdgAaiAGIABBAnRqLQACEAEgBSgCXEEhSQ0AIAVBIDYCXAsgAkF9aiEMA0BBACAHIAxJIAVBQGsQBBsEQCAHIAYgBUFAayAIEAJBAnRqIgAvAQA7AAAgBUFAayAALQACEAEgByAALQADaiIAIAYgBUFAayAIEAJBAnRqIgcvAQA7AAAgBUFAayAHLQACEAEgACAHLQADaiEHDAEFIAJBfmohDANAIAVBQGsQBCAHIAxLckUEQCAHIAYgBUFAayAIEAJBAnRqIgAvAQA7AAAgBUFAayAALQACEAEgByAALQADaiEHDAELCwNAIAcgDE0EQCAHIAYgBUFAayAIEAJBAnRqIgAvAQA7AAAgBUFAayAALQACEAEgByAALQADaiEHDAELCwJAIAcgAk8NACAHIAYgBUFAayAIEAIiAEECdGoiAi0AADoAACACLQADQQFGBEAgBUFAayACLQACEAEMAQsgBSgCREEfSw0AIAVBQGsgBiAAQQJ0ai0AAhABIAUoAkRBIUkNACAFQSA2AkQLIA5BfWohAgNAQQAgBCACSSAFQShqEAQbBEAgBCAGIAVBKGogCBACQQJ0aiIALwEAOwAAIAVBKGogAC0AAhABIAQgAC0AA2oiACAGIAVBKGogCBACQQJ0aiIELwEAOwAAIAVBKGogBC0AAhABIAAgBC0AA2ohBAwBBSAOQX5qIQIDQCAFQShqEAQgBCACS3JFBEAgBCAGIAVBKGogCBACQQJ0aiIALwEAOwAAIAVBKGogAC0AAhABIAQgAC0AA2ohBAwBCwsDQCAEIAJNBEAgBCAGIAVBKGogCBACQQJ0aiIALwEAOwAAIAVBKGogAC0AAhABIAQgAC0AA2ohBAwBCwsCQCAEIA5PDQAgBCAGIAVBKGogCBACIgBBAnRqIgItAAA6AAAgAi0AA0EBRgRAIAVBKGogAi0AAhABDAELIAUoAixBH0sNACAFQShqIAYgAEECdGotAAIQASAFKAIsQSFJDQAgBUEgNgIsCwNAQQAgAyAQSSAFQRBqEAQbBEAgAyAGIAVBEGogCBACQQJ0aiIALwEAOwAAIAVBEGogAC0AAhABIAMgAC0AA2oiACAGIAVBEGogCBACQQJ0aiICLwEAOwAAIAVBEGogAi0AAhABIAAgAi0AA2ohAwwBBSAPQX5qIQIDQCAFQRBqEAQgAyACS3JFBEAgAyAGIAVBEGogCBACQQJ0aiIALwEAOwAAIAVBEGogAC0AAhABIAMgAC0AA2ohAwwBCwsDQCADIAJNBEAgAyAGIAVBEGogCBACQQJ0aiIALwEAOwAAIAVBEGogAC0AAhABIAMgAC0AA2ohAwwBCwsCQCADIA9PDQAgAyAGIAVBEGogCBACIgBBAnRqIgItAAA6AAAgAi0AA0EBRgRAIAVBEGogAi0AAhABDAELIAUoAhRBH0sNACAFQRBqIAYgAEECdGotAAIQASAFKAIUQSFJDQAgBUEgNgIUCyABQWwgBUHYAGoQCiAFQUBrEApxIAVBKGoQCnEgBUEQahAKcRshCwwJCwAACwALAAALAAsAAAsACwAACwALQWwhCwsgBUHwAGokACALC7UEAQ5/IwBBEGsiBiQAIAZBBGogABAOQVQhBQJAIARB3AtJDQAgBi0ABCEHIANB8ARqQQBB7AAQECEIIAdBDEsNACADQdwJaiIJIAggBkEIaiAGQQxqIAEgAhAxIhAQA0UEQCAGKAIMIgQgB0sNASADQdwFaiEPIANBpAVqIREgAEEEaiESIANBqAVqIQEgBCEFA0AgBSICQX9qIQUgCCACQQJ0aigCAEUNAAsgAkEBaiEOQQEhBQNAIAUgDk9FBEAgCCAFQQJ0IgtqKAIAIQwgASALaiAKNgIAIAVBAWohBSAKIAxqIQoMAQsLIAEgCjYCAEEAIQUgBigCCCELA0AgBSALRkUEQCABIAUgCWotAAAiDEECdGoiDSANKAIAIg1BAWo2AgAgDyANQQF0aiINIAw6AAEgDSAFOgAAIAVBAWohBQwBCwtBACEBIANBADYCqAUgBEF/cyAHaiEJQQEhBQNAIAUgDk9FBEAgCCAFQQJ0IgtqKAIAIQwgAyALaiABNgIAIAwgBSAJanQgAWohASAFQQFqIQUMAQsLIAcgBEEBaiIBIAJrIgRrQQFqIQgDQEEBIQUgBCAIT0UEQANAIAUgDk9FBEAgBUECdCIJIAMgBEE0bGpqIAMgCWooAgAgBHY2AgAgBUEBaiEFDAELCyAEQQFqIQQMAQsLIBIgByAPIAogESADIAIgARBkIAZBAToABSAGIAc6AAYgACAGKAIENgIACyAQIQULIAZBEGokACAFC8ENAQt/IwBB8ABrIgUkAEFsIQkCQCADQQpJDQAgAi8AACEKIAIvAAIhDCACLwAEIQYgBUEIaiAEEA4CQCADIAYgCiAMampBBmoiDUkNACAFLQAKIQcgBUHYAGogAkEGaiICIAoQBiIJEAMNASAFQUBrIAIgCmoiAiAMEAYiCRADDQEgBUEoaiACIAxqIgIgBhAGIgkQAw0BIAVBEGogAiAGaiADIA1rEAYiCRADDQEgACABaiIOQX1qIQ8gBEEEaiEGQQEhCSAAIAFBA2pBAnYiAmoiCiACaiIMIAJqIg0hAyAMIQQgCiECA0AgCSADIA9JcQRAIAYgBUHYAGogBxACQQF0aiIILQAAIQsgBUHYAGogCC0AARABIAAgCzoAACAGIAVBQGsgBxACQQF0aiIILQAAIQsgBUFAayAILQABEAEgAiALOgAAIAYgBUEoaiAHEAJBAXRqIggtAAAhCyAFQShqIAgtAAEQASAEIAs6AAAgBiAFQRBqIAcQAkEBdGoiCC0AACELIAVBEGogCC0AARABIAMgCzoAACAGIAVB2ABqIAcQAkEBdGoiCC0AACELIAVB2ABqIAgtAAEQASAAIAs6AAEgBiAFQUBrIAcQAkEBdGoiCC0AACELIAVBQGsgCC0AARABIAIgCzoAASAGIAVBKGogBxACQQF0aiIILQAAIQsgBUEoaiAILQABEAEgBCALOgABIAYgBUEQaiAHEAJBAXRqIggtAAAhCyAFQRBqIAgtAAEQASADIAs6AAEgA0ECaiEDIARBAmohBCACQQJqIQIgAEECaiEAIAkgBUHYAGoQDUVxIAVBQGsQDUVxIAVBKGoQDUVxIAVBEGoQDUVxIQkMAQsLIAQgDUsgAiAMS3INAEFsIQkgACAKSw0BIApBfWohCQNAIAVB2ABqEAQgACAJT3JFBEAgBiAFQdgAaiAHEAJBAXRqIggtAAAhCyAFQdgAaiAILQABEAEgACALOgAAIAYgBUHYAGogBxACQQF0aiIILQAAIQsgBUHYAGogCC0AARABIAAgCzoAASAAQQJqIQAMAQsLA0AgBUHYAGoQBCAAIApPckUEQCAGIAVB2ABqIAcQAkEBdGoiCS0AACEIIAVB2ABqIAktAAEQASAAIAg6AAAgAEEBaiEADAELCwNAIAAgCkkEQCAGIAVB2ABqIAcQAkEBdGoiCS0AACEIIAVB2ABqIAktAAEQASAAIAg6AAAgAEEBaiEADAELCyAMQX1qIQADQCAFQUBrEAQgAiAAT3JFBEAgBiAFQUBrIAcQAkEBdGoiCi0AACEJIAVBQGsgCi0AARABIAIgCToAACAGIAVBQGsgBxACQQF0aiIKLQAAIQkgBUFAayAKLQABEAEgAiAJOgABIAJBAmohAgwBCwsDQCAFQUBrEAQgAiAMT3JFBEAgBiAFQUBrIAcQAkEBdGoiAC0AACEKIAVBQGsgAC0AARABIAIgCjoAACACQQFqIQIMAQsLA0AgAiAMSQRAIAYgBUFAayAHEAJBAXRqIgAtAAAhCiAFQUBrIAAtAAEQASACIAo6AAAgAkEBaiECDAELCyANQX1qIQADQCAFQShqEAQgBCAAT3JFBEAgBiAFQShqIAcQAkEBdGoiAi0AACEKIAVBKGogAi0AARABIAQgCjoAACAGIAVBKGogBxACQQF0aiICLQAAIQogBUEoaiACLQABEAEgBCAKOgABIARBAmohBAwBCwsDQCAFQShqEAQgBCANT3JFBEAgBiAFQShqIAcQAkEBdGoiAC0AACECIAVBKGogAC0AARABIAQgAjoAACAEQQFqIQQMAQsLA0AgBCANSQRAIAYgBUEoaiAHEAJBAXRqIgAtAAAhAiAFQShqIAAtAAEQASAEIAI6AAAgBEEBaiEEDAELCwNAIAVBEGoQBCADIA9PckUEQCAGIAVBEGogBxACQQF0aiIALQAAIQIgBUEQaiAALQABEAEgAyACOgAAIAYgBUEQaiAHEAJBAXRqIgAtAAAhAiAFQRBqIAAtAAEQASADIAI6AAEgA0ECaiEDDAELCwNAIAVBEGoQBCADIA5PckUEQCAGIAVBEGogBxACQQF0aiIALQAAIQIgBUEQaiAALQABEAEgAyACOgAAIANBAWohAwwBCwsDQCADIA5JBEAgBiAFQRBqIAcQAkEBdGoiAC0AACECIAVBEGogAC0AARABIAMgAjoAACADQQFqIQMMAQsLIAFBbCAFQdgAahAKIAVBQGsQCnEgBUEoahAKcSAFQRBqEApxGyEJDAELQWwhCQsgBUHwAGokACAJC8oCAQR/IwBBIGsiBSQAIAUgBBAOIAUtAAIhByAFQQhqIAIgAxAGIgIQA0UEQCAEQQRqIQIgACABaiIDQX1qIQQDQCAFQQhqEAQgACAET3JFBEAgAiAFQQhqIAcQAkEBdGoiBi0AACEIIAVBCGogBi0AARABIAAgCDoAACACIAVBCGogBxACQQF0aiIGLQAAIQggBUEIaiAGLQABEAEgACAIOgABIABBAmohAAwBCwsDQCAFQQhqEAQgACADT3JFBEAgAiAFQQhqIAcQAkEBdGoiBC0AACEGIAVBCGogBC0AARABIAAgBjoAACAAQQFqIQAMAQsLA0AgACADT0UEQCACIAVBCGogBxACQQF0aiIELQAAIQYgBUEIaiAELQABEAEgACAGOgAAIABBAWohAAwBCwsgAUFsIAVBCGoQChshAgsgBUEgaiQAIAILtgMBCX8jAEEQayIGJAAgBkEANgIMIAZBADYCCEFUIQQCQAJAIANBQGsiDCADIAZBCGogBkEMaiABIAIQMSICEAMNACAGQQRqIAAQDiAGKAIMIgcgBi0ABEEBaksNASAAQQRqIQogBkEAOgAFIAYgBzoABiAAIAYoAgQ2AgAgB0EBaiEJQQEhBANAIAQgCUkEQCADIARBAnRqIgEoAgAhACABIAU2AgAgACAEQX9qdCAFaiEFIARBAWohBAwBCwsgB0EBaiEHQQAhBSAGKAIIIQkDQCAFIAlGDQEgAyAFIAxqLQAAIgRBAnRqIgBBASAEdEEBdSILIAAoAgAiAWoiADYCACAHIARrIQhBACEEAkAgC0EDTQRAA0AgBCALRg0CIAogASAEakEBdGoiACAIOgABIAAgBToAACAEQQFqIQQMAAALAAsDQCABIABPDQEgCiABQQF0aiIEIAg6AAEgBCAFOgAAIAQgCDoAAyAEIAU6AAIgBCAIOgAFIAQgBToABCAEIAg6AAcgBCAFOgAGIAFBBGohAQwAAAsACyAFQQFqIQUMAAALAAsgAiEECyAGQRBqJAAgBAutAQECfwJAQYQgKAIAIABHIAAoAgBBAXYiAyABa0F4aiICQXhxQQhHcgR/IAIFIAMQJ0UNASACQQhqC0EQSQ0AIAAgACgCACICQQFxIAAgAWpBD2pBeHEiASAAa0EBdHI2AgAgASAANgIEIAEgASgCAEEBcSAAIAJBAXZqIAFrIgJBAXRyNgIAQYQgIAEgAkH/////B3FqQQRqQYQgKAIAIABGGyABNgIAIAEQJQsLygIBBX8CQAJAAkAgAEEIIABBCEsbZ0EfcyAAaUEBR2oiAUEESSAAIAF2cg0AIAFBAnRB/B5qKAIAIgJFDQADQCACQXhqIgMoAgBBAXZBeGoiBSAATwRAIAIgBUEIIAVBCEsbZ0Efc0ECdEGAH2oiASgCAEYEQCABIAIoAgQ2AgALDAMLIARBHksNASAEQQFqIQQgAigCBCICDQALC0EAIQMgAUEgTw0BA0AgAUECdEGAH2ooAgAiAkUEQCABQR5LIQIgAUEBaiEBIAJFDQEMAwsLIAIgAkF4aiIDKAIAQQF2QXhqIgFBCCABQQhLG2dBH3NBAnRBgB9qIgEoAgBGBEAgASACKAIENgIACwsgAigCACIBBEAgASACKAIENgIECyACKAIEIgEEQCABIAIoAgA2AgALIAMgAygCAEEBcjYCACADIAAQNwsgAwvhCwINfwV+IwBB8ABrIgckACAHIAAoAvDhASIINgJcIAEgAmohDSAIIAAoAoDiAWohDwJAAkAgBUUEQCABIQQMAQsgACgCxOABIRAgACgCwOABIREgACgCvOABIQ4gAEEBNgKM4QFBACEIA0AgCEEDRwRAIAcgCEECdCICaiAAIAJqQazQAWooAgA2AkQgCEEBaiEIDAELC0FsIQwgB0EYaiADIAQQBhADDQEgB0EsaiAHQRhqIAAoAgAQEyAHQTRqIAdBGGogACgCCBATIAdBPGogB0EYaiAAKAIEEBMgDUFgaiESIAEhBEEAIQwDQCAHKAIwIAcoAixBA3RqKQIAIhRCEIinQf8BcSEIIAcoAkAgBygCPEEDdGopAgAiFUIQiKdB/wFxIQsgBygCOCAHKAI0QQN0aikCACIWQiCIpyEJIBVCIIghFyAUQiCIpyECAkAgFkIQiKdB/wFxIgNBAk8EQAJAIAZFIANBGUlyRQRAIAkgB0EYaiADQSAgBygCHGsiCiAKIANLGyIKEAUgAyAKayIDdGohCSAHQRhqEAQaIANFDQEgB0EYaiADEAUgCWohCQwBCyAHQRhqIAMQBSAJaiEJIAdBGGoQBBoLIAcpAkQhGCAHIAk2AkQgByAYNwNIDAELAkAgA0UEQCACBEAgBygCRCEJDAMLIAcoAkghCQwBCwJAAkAgB0EYakEBEAUgCSACRWpqIgNBA0YEQCAHKAJEQX9qIgMgA0VqIQkMAQsgA0ECdCAHaigCRCIJIAlFaiEJIANBAUYNAQsgByAHKAJINgJMCwsgByAHKAJENgJIIAcgCTYCRAsgF6chAyALBEAgB0EYaiALEAUgA2ohAwsgCCALakEUTwRAIAdBGGoQBBoLIAgEQCAHQRhqIAgQBSACaiECCyAHQRhqEAQaIAcgB0EYaiAUQhiIp0H/AXEQCCAUp0H//wNxajYCLCAHIAdBGGogFUIYiKdB/wFxEAggFadB//8DcWo2AjwgB0EYahAEGiAHIAdBGGogFkIYiKdB/wFxEAggFqdB//8DcWo2AjQgByACNgJgIAcoAlwhCiAHIAk2AmggByADNgJkAkACQAJAIAQgAiADaiILaiASSw0AIAIgCmoiEyAPSw0AIA0gBGsgC0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdBKGogACgCBBATQQAhBCAHQeAAaiEMIAdB5ABqIQoDQCAHQShqEARBAksgBCAXTnJFBEAgBygCQCAHKAI8QQN0aikCACIdQhCIp0H/AXEhCyAHKAJQIAcoAkxBA3RqKQIAIh5CEIinQf8BcSEJIAcoAkggBygCREEDdGopAgAiH0IgiKchCCAeQiCIISAgHUIgiKchAgJAIB9CEIinQf8BcSIDQQJPBEACQCAGRSADQRlJckUEQCAIIAdBKGogA0EgIAcoAixrIg0gDSADSxsiDRAFIAMgDWsiA3RqIQggB0EoahAEGiADRQ0BIAdBKGogAxAFIAhqIQgMAQsgB0EoaiADEAUgCGohCCAHQShqEAQaCyAHKQJUISEgByAINgJUIAcgITcDWAwBCwJAIANFBEAgAgRAIAcoAlQhCAwDCyAHKAJYIQgMAQsCQAJAIAdBKGpBARAFIAggAkVqaiIDQQNGBEAgBygCVEF/aiIDIANFaiEIDAELIANBAnQgB2ooAlQiCCAIRWohCCADQQFGDQELIAcgBygCWDYCXAsLIAcgBygCVDYCWCAHIAg2AlQLICCnIQMgCQRAIAdBKGogCRAFIANqIQMLIAkgC2pBFE8EQCAHQShqEAQaCyALBEAgB0EoaiALEAUgAmohAgsgB0EoahAEGiAHIAcoAmggAmoiCSADajYCaCAKIAwgCCAJSxsoAgAhDSAHIAdBKGogHUIYiKdB/wFxEAggHadB//8DcWo2AjwgByAHQShqIB5CGIinQf8BcRAIIB6nQf//A3FqNgJMIAdBKGoQBBogB0EoaiAfQhiIp0H/AXEQCCEOIAdB8ABqIARBBHRqIgsgCSANaiAIazYCDCALIAg2AgggCyADNgIEIAsgAjYCACAHIA4gH6dB//8DcWo2AkQgBEEBaiEEDAELCyAEIBdIDQEgEkFgaiEYIAdB4ABqIRogB0HkAGohGyABIQMDQCAHQShqEARBAksgBCAFTnJFBEAgBygCQCAHKAI8QQN0aikCACIdQhCIp0H/AXEhCyAHKAJQIAcoAkxBA3RqKQIAIh5CEIinQf8BcSEIIAcoAkggBygCREEDdGopAgAiH0IgiKchCSAeQiCIISAgHUIgiKchDAJAIB9CEIinQf8BcSICQQJPBEACQCAGRSACQRlJckUEQCAJIAdBKGogAkEgIAcoAixrIgogCiACSxsiChAFIAIgCmsiAnRqIQkgB0EoahAEGiACRQ0BIAdBKGogAhAFIAlqIQkMAQsgB0EoaiACEAUgCWohCSAHQShqEAQaCyAHKQJUISEgByAJNgJUIAcgITcDWAwBCwJAIAJFBEAgDARAIAcoAlQhCQwDCyAHKAJYIQkMAQsCQAJAIAdBKGpBARAFIAkgDEVqaiICQQNGBEAgBygCVEF/aiICIAJFaiEJDAELIAJBAnQgB2ooAlQiCSAJRWohCSACQQFGDQELIAcgBygCWDYCXAsLIAcgBygCVDYCWCAHIAk2AlQLICCnIRQgCARAIAdBKGogCBAFIBRqIRQLIAggC2pBFE8EQCAHQShqEAQaCyALBEAgB0EoaiALEAUgDGohDAsgB0EoahAEGiAHIAcoAmggDGoiGSAUajYCaCAbIBogCSAZSxsoAgAhHCAHIAdBKGogHUIYiKdB/wFxEAggHadB//8DcWo2AjwgByAHQShqIB5CGIinQf8BcRAIIB6nQf//A3FqNgJMIAdBKGoQBBogByAHQShqIB9CGIinQf8BcRAIIB+nQf//A3FqNgJEIAcgB0HwAGogBEEDcUEEdGoiDSkDCCIdNwPIASAHIA0pAwAiHjcDwAECQAJAAkAgBygCvAEiDiAepyICaiIWIBNLDQAgAyAHKALEASIKIAJqIgtqIBhLDQAgEiADayALQSBqTw0BCyAHIAcpA8gBNwMQIAcgBykDwAE3AwggAyASIAdBCGogB0G8AWogEyAPIBUgERAeIQsMAQsgAiADaiEIIAMgDhAHIAJBEU8EQCADQRBqIQIDQCACIA5BEGoiDhAHIAJBEGoiAiAISQ0ACwsgCCAdpyIOayECIAcgFjYCvAEgDiAIIA9rSwRAIA4gCCAVa0sEQEFsIQsMAgsgESACIA9rIgJqIhYgCmogEU0EQCAIIBYgChAPGgwCCyAIIBZBACACaxAPIQggByACIApqIgo2AsQBIAggAmshCCAPIQILIA5BEE8EQCAIIApqIQoDQCAIIAIQByACQRBqIQIgCEEQaiIIIApJDQALDAELAkAgDkEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgDkECdCIKQcAeaigCAGoiAhAXIAIgCkHgHmooAgBrIQIgBygCxAEhCgwBCyAIIAIQDAsgCkEJSQ0AIAggCmohCiAIQQhqIgggAkEIaiICa0EPTARAA0AgCCACEAwgAkEIaiECIAhBCGoiCCAKSQ0ADAIACwALA0AgCCACEAcgAkEQaiECIAhBEGoiCCAKSQ0ACwsgCxADBEAgCyEQDAQFIA0gDDYCACANIBkgHGogCWs2AgwgDSAJNgIIIA0gFDYCBCAEQQFqIQQgAyALaiEDDAILAAsLIAQgBUgNASAEIBdrIQtBACEEA0AgCyAFSARAIAcgB0HwAGogC0EDcUEEdGoiAikDCCIdNwPIASAHIAIpAwAiHjcDwAECQAJAAkAgBygCvAEiDCAepyICaiIKIBNLDQAgAyAHKALEASIJIAJqIhBqIBhLDQAgEiADayAQQSBqTw0BCyAHIAcpA8gBNwMgIAcgBykDwAE3AxggAyASIAdBGGogB0G8AWogEyAPIBUgERAeIRAMAQsgAiADaiEIIAMgDBAHIAJBEU8EQCADQRBqIQIDQCACIAxBEGoiDBAHIAJBEGoiAiAISQ0ACwsgCCAdpyIGayECIAcgCjYCvAEgBiAIIA9rSwRAIAYgCCAVa0sEQEFsIRAMAgsgESACIA9rIgJqIgwgCWogEU0EQCAIIAwgCRAPGgwCCyAIIAxBACACaxAPIQggByACIAlqIgk2AsQBIAggAmshCCAPIQILIAZBEE8EQCAIIAlqIQYDQCAIIAIQByACQRBqIQIgCEEQaiIIIAZJDQALDAELAkAgBkEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgBkECdCIGQcAeaigCAGoiAhAXIAIgBkHgHmooAgBrIQIgBygCxAEhCQwBCyAIIAIQDAsgCUEJSQ0AIAggCWohBiAIQQhqIgggAkEIaiICa0EPTARAA0AgCCACEAwgAkEIaiECIAhBCGoiCCAGSQ0ADAIACwALA0AgCCACEAcgAkEQaiECIAhBEGoiCCAGSQ0ACwsgEBADDQMgC0EBaiELIAMgEGohAwwBCwsDQCAEQQNHBEAgACAEQQJ0IgJqQazQAWogAiAHaigCVDYCACAEQQFqIQQMAQsLIAcoArwBIQgLQbp/IRAgEyAIayIAIBIgA2tLDQAgAwR/IAMgCCAAEAsgAGoFQQALIAFrIRALIAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY0AAQMyIFEAMiBg0AIANBHzYCfCADIANB/ABqIANB+ABqIAQgBCAFaiAGGyIEIAEgAmoiAiAEaxAVIgUQAw0AIAMoAnwiBkEfSw0AIAMoAngiB0EJTw0AIABBiCBqIAMgBkGAC0GADCAHEBggA0E0NgJ8IAMgA0H8AGogA0H4AGogBCAFaiIEIAIgBGsQFSIFEAMNACADKAJ8IgZBNEsNACADKAJ4IgdBCk8NACAAQZAwaiADIAZBgA1B4A4gBxAYIANBIzYCfCADIANB/ABqIANB+ABqIAQgBWoiBCACIARrEBUiBRADDQAgAygCfCIGQSNLDQAgAygCeCIHQQpPDQAgACADIAZBwBBB0BEgBxAYIAQgBWoiBEEMaiIFIAJLDQAgAiAFayEFQQAhAgNAIAJBA0cEQCAEKAAAIgZBf2ogBU8NAiAAIAJBAnRqQZzQAWogBjYCACACQQFqIQIgBEEEaiEEDAELCyAEIAFrIQgLIANBgAFqJAAgCAtGAQN/IABBCGohAyAAKAIEIQJBACEAA0AgACACdkUEQCABIAMgAEEDdGotAAJBFktqIQEgAEEBaiEADAELCyABQQggAmt0C4YDAQV/Qbh/IQcCQCADRQ0AIAItAAAiBEUEQCABQQA2AgBBAUG4fyADQQFGGw8LAn8gAkEBaiIFIARBGHRBGHUiBkF/Sg0AGiAGQX9GBEAgA0EDSA0CIAUvAABBgP4BaiEEIAJBA2oMAQsgA0ECSA0BIAItAAEgBEEIdHJBgIB+aiEEIAJBAmoLIQUgASAENgIAIAVBAWoiASACIANqIgNLDQBBbCEHIABBEGogACAFLQAAIgVBBnZBI0EJIAEgAyABa0HAEEHQEUHwEiAAKAKM4QEgACgCnOIBIAQQHyIGEAMiCA0AIABBmCBqIABBCGogBUEEdkEDcUEfQQggASABIAZqIAgbIgEgAyABa0GAC0GADEGAFyAAKAKM4QEgACgCnOIBIAQQHyIGEAMiCA0AIABBoDBqIABBBGogBUECdkEDcUE0QQkgASABIAZqIAgbIgEgAyABa0GADUHgDkGQGSAAKAKM4QEgACgCnOIBIAQQHyIAEAMNACAAIAFqIAJrIQcLIAcLrQMBCn8jAEGABGsiCCQAAn9BUiACQf8BSw0AGkFUIANBDEsNABogAkEBaiELIABBBGohCUGAgAQgA0F/anRBEHUhCkEAIQJBASEEQQEgA3QiB0F/aiIMIQUDQCACIAtGRQRAAkAgASACQQF0Ig1qLwEAIgZB//8DRgRAIAkgBUECdGogAjoAAiAFQX9qIQVBASEGDAELIARBACAKIAZBEHRBEHVKGyEECyAIIA1qIAY7AQAgAkEBaiECDAELCyAAIAQ7AQIgACADOwEAIAdBA3YgB0EBdmpBA2ohBkEAIQRBACECA0AgBCALRkUEQCABIARBAXRqLgEAIQpBACEAA0AgACAKTkUEQCAJIAJBAnRqIAQ6AAIDQCACIAZqIAxxIgIgBUsNAAsgAEEBaiEADAELCyAEQQFqIQQMAQsLQX8gAg0AGkEAIQIDfyACIAdGBH9BAAUgCCAJIAJBAnRqIgAtAAJBAXRqIgEgAS8BACIBQQFqOwEAIAAgAyABEBRrIgU6AAMgACABIAVB/wFxdCAHazsBACACQQFqIQIMAQsLCyEFIAhBgARqJAAgBQvjBgEIf0FsIQcCQCACQQNJDQACQAJAAkACQCABLQAAIgNBA3EiCUEBaw4DAwEAAgsgACgCiOEBDQBBYg8LIAJBBUkNAkEDIQYgASgAACEFAn8CQAJAIANBAnZBA3EiCEF+aiIEQQFNBEAgBEEBaw0BDAILIAVBDnZB/wdxIQQgBUEEdkH/B3EhAyAIRQwCCyAFQRJ2IQRBBCEGIAVBBHZB//8AcSEDQQAMAQsgBUEEdkH//w9xIgNBgIAISw0DIAEtAARBCnQgBUEWdnIhBEEFIQZBAAshBSAEIAZqIgogAksNAgJAIANBgQZJDQAgACgCnOIBRQ0AQQAhAgNAIAJBg4ABSw0BIAJBQGshAgwAAAsACwJ/IAlBA0YEQCABIAZqIQEgAEHw4gFqIQIgACgCDCEGIAUEQCACIAMgASAEIAYQXwwCCyACIAMgASAEIAYQXQwBCyAAQbjQAWohAiABIAZqIQEgAEHw4gFqIQYgAEGo0ABqIQggBQRAIAggBiADIAEgBCACEF4MAQsgCCAGIAMgASAEIAIQXAsQAw0CIAAgAzYCgOIBIABBATYCiOEBIAAgAEHw4gFqNgLw4QEgCUECRgRAIAAgAEGo0ABqNgIMCyAAIANqIgBBiOMBakIANwAAIABBgOMBakIANwAAIABB+OIBakIANwAAIABB8OIBakIANwAAIAoPCwJ/AkACQAJAIANBAnZBA3FBf2oiBEECSw0AIARBAWsOAgACAQtBASEEIANBA3YMAgtBAiEEIAEvAABBBHYMAQtBAyEEIAEQIUEEdgsiAyAEaiIFQSBqIAJLBEAgBSACSw0CIABB8OIBaiABIARqIAMQCyEBIAAgAzYCgOIBIAAgATYC8OEBIAEgA2oiAEIANwAYIABCADcAECAAQgA3AAggAEIANwAAIAUPCyAAIAM2AoDiASAAIAEgBGo2AvDhASAFDwsCfwJAAkACQCADQQJ2QQNxQX9qIgRBAksNACAEQQFrDgIAAgELQQEhByADQQN2DAILQQIhByABLwAAQQR2DAELIAJBBEkgARAhIgJBj4CAAUtyDQFBAyEHIAJBBHYLIQIgAEHw4gFqIAEgB2otAAAgAkEgahAQIQEgACACNgKA4gEgACABNgLw4QEgB0EBaiEHCyAHC0sAIABC+erQ0OfJoeThADcDICAAQgA3AxggAELP1tO+0ser2UI3AxAgAELW64Lu6v2J9eAANwMIIABCADcDACAAQShqQQBBKBAQGgviAgICfwV+IABBKGoiASAAKAJIaiECAn4gACkDACIDQiBaBEAgACkDECIEQgeJIAApAwgiBUIBiXwgACkDGCIGQgyJfCAAKQMgIgdCEol8IAUQGSAEEBkgBhAZIAcQGQwBCyAAKQMYQsXP2bLx5brqJ3wLIAN8IQMDQCABQQhqIgAgAk0EQEIAIAEpAAAQCSADhUIbiUKHla+vmLbem55/fkLj3MqV/M7y9YV/fCEDIAAhAQwBCwsCQCABQQRqIgAgAksEQCABIQAMAQsgASgAAK1Ch5Wvr5i23puef34gA4VCF4lCz9bTvtLHq9lCfkL5893xmfaZqxZ8IQMLA0AgACACSQRAIAAxAABCxc/ZsvHluuonfiADhUILiUKHla+vmLbem55/fiEDIABBAWohAAwBCwsgA0IhiCADhULP1tO+0ser2UJ+IgNCHYggA4VC+fPd8Zn2masWfiIDQiCIIAOFC+8CAgJ/BH4gACAAKQMAIAKtfDcDAAJAAkAgACgCSCIDIAJqIgRBH00EQCABRQ0BIAAgA2pBKGogASACECAgACgCSCACaiEEDAELIAEgAmohAgJ/IAMEQCAAQShqIgQgA2ogAUEgIANrECAgACAAKQMIIAQpAAAQCTcDCCAAIAApAxAgACkAMBAJNwMQIAAgACkDGCAAKQA4EAk3AxggACAAKQMgIABBQGspAAAQCTcDICAAKAJIIQMgAEEANgJIIAEgA2tBIGohAQsgAUEgaiACTQsEQCACQWBqIQMgACkDICEFIAApAxghBiAAKQMQIQcgACkDCCEIA0AgCCABKQAAEAkhCCAHIAEpAAgQCSEHIAYgASkAEBAJIQYgBSABKQAYEAkhBSABQSBqIgEgA00NAAsgACAFNwMgIAAgBjcDGCAAIAc3AxAgACAINwMICyABIAJPDQEgAEEoaiABIAIgAWsiBBAgCyAAIAQ2AkgLCy8BAX8gAEUEQEG2f0EAIAMbDwtBun8hBCADIAFNBH8gACACIAMQEBogAwVBun8LCy8BAX8gAEUEQEG2f0EAIAMbDwtBun8hBCADIAFNBH8gACACIAMQCxogAwVBun8LC6gCAQZ/IwBBEGsiByQAIABB2OABaikDAEKAgIAQViEIQbh/IQUCQCAEQf//B0sNACAAIAMgBBBCIgUQAyIGDQAgACgCnOIBIQkgACAHQQxqIAMgAyAFaiAGGyIKIARBACAFIAYbayIGEEAiAxADBEAgAyEFDAELIAcoAgwhBCABRQRAQbp/IQUgBEEASg0BCyAGIANrIQUgAyAKaiEDAkAgCQRAIABBADYCnOIBDAELAkACQAJAIARBBUgNACAAQdjgAWopAwBCgICACFgNAAwBCyAAQQA2ApziAQwBCyAAKAIIED8hBiAAQQA2ApziASAGQRRPDQELIAAgASACIAMgBSAEIAgQOSEFDAELIAAgASACIAMgBSAEIAgQOiEFCyAHQRBqJAAgBQtnACAAQdDgAWogASACIAAoAuzhARAuIgEQAwRAIAEPC0G4fyECAkAgAQ0AIABB7OABaigCACIBBEBBYCECIAAoApjiASABRw0BC0EAIQIgAEHw4AFqKAIARQ0AIABBkOEBahBDCyACCycBAX8QVyIERQRAQUAPCyAEIAAgASACIAMgBBBLEE8hACAEEFYgAAs/AQF/AkACQAJAIAAoAqDiAUEBaiIBQQJLDQAgAUEBaw4CAAECCyAAEDBBAA8LIABBADYCoOIBCyAAKAKU4gELvAMCB38BfiMAQRBrIgkkAEG4fyEGAkAgBCgCACIIQQVBCSAAKALs4QEiBRtJDQAgAygCACIHQQFBBSAFGyAFEC8iBRADBEAgBSEGDAELIAggBUEDakkNACAAIAcgBRBJIgYQAw0AIAEgAmohCiAAQZDhAWohCyAIIAVrIQIgBSAHaiEHIAEhBQNAIAcgAiAJECwiBhADDQEgAkF9aiICIAZJBEBBuH8hBgwCCyAJKAIAIghBAksEQEFsIQYMAgsgB0EDaiEHAn8CQAJAAkAgCEEBaw4CAgABCyAAIAUgCiAFayAHIAYQSAwCCyAFIAogBWsgByAGEEcMAQsgBSAKIAVrIActAAAgCSgCCBBGCyIIEAMEQCAIIQYMAgsgACgC8OABBEAgCyAFIAgQRQsgAiAGayECIAYgB2ohByAFIAhqIQUgCSgCBEUNAAsgACkD0OABIgxCf1IEQEFsIQYgDCAFIAFrrFINAQsgACgC8OABBEBBaiEGIAJBBEkNASALEEQhDCAHKAAAIAynRw0BIAdBBGohByACQXxqIQILIAMgBzYCACAEIAI2AgAgBSABayEGCyAJQRBqJAAgBgsuACAAECsCf0EAQQAQAw0AGiABRSACRXJFBEBBYiAAIAEgAhA9EAMNARoLQQALCzcAIAEEQCAAIAAoAsTgASABKAIEIAEoAghqRzYCnOIBCyAAECtBABADIAFFckUEQCAAIAEQWwsL0QIBB38jAEEQayIGJAAgBiAENgIIIAYgAzYCDCAFBEAgBSgCBCEKIAUoAgghCQsgASEIAkACQANAIAAoAuzhARAWIQsCQANAIAQgC0kNASADKAAAQXBxQdDUtMIBRgRAIAMgBBAiIgcQAw0EIAQgB2shBCADIAdqIQMMAQsLIAYgAzYCDCAGIAQ2AggCQCAFBEAgACAFEE5BACEHQQAQA0UNAQwFCyAAIAogCRBNIgcQAw0ECyAAIAgQUCAMQQFHQQAgACAIIAIgBkEMaiAGQQhqEEwiByIDa0EAIAMQAxtBCkdyRQRAQbh/IQcMBAsgBxADDQMgAiAHayECIAcgCGohCEEBIQwgBigCDCEDIAYoAgghBAwBCwsgBiADNgIMIAYgBDYCCEG4fyEHIAQNASAIIAFrIQcMAQsgBiADNgIMIAYgBDYCCAsgBkEQaiQAIAcLRgECfyABIAAoArjgASICRwRAIAAgAjYCxOABIAAgATYCuOABIAAoArzgASEDIAAgATYCvOABIAAgASADIAJrajYCwOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEEdCAAbiECCyAAQQh2IgEgAkEYbCIAQYwIaigCAGwgAEGICGooAgBqIgJBA3YgAmogAEGACGooAgAgAEGECGooAgAgAWxqSQs3ACAAIAMgBCAFQYAQEDMiBRADBEAgBQ8LIAUgBEkEfyABIAIgAyAFaiAEIAVrIAAQMgVBuH8LC78DAQN/IwBBIGsiBSQAIAVBCGogAiADEAYiAhADRQRAIAAgAWoiB0F9aiEGIAUgBBAOIARBBGohAiAFLQACIQMDQEEAIAAgBkkgBUEIahAEGwRAIAAgAiAFQQhqIAMQAkECdGoiBC8BADsAACAFQQhqIAQtAAIQASAAIAQtAANqIgQgAiAFQQhqIAMQAkECdGoiAC8BADsAACAFQQhqIAAtAAIQASAEIAAtAANqIQAMAQUgB0F+aiEEA0AgBUEIahAEIAAgBEtyRQRAIAAgAiAFQQhqIAMQAkECdGoiBi8BADsAACAFQQhqIAYtAAIQASAAIAYtAANqIQAMAQsLA0AgACAES0UEQCAAIAIgBUEIaiADEAJBAnRqIgYvAQA7AAAgBUEIaiAGLQACEAEgACAGLQADaiEADAELCwJAIAAgB08NACAAIAIgBUEIaiADEAIiA0ECdGoiAC0AADoAACAALQADQQFGBEAgBUEIaiAALQACEAEMAQsgBSgCDEEfSw0AIAVBCGogAiADQQJ0ai0AAhABIAUoAgxBIUkNACAFQSA2AgwLIAFBbCAFQQhqEAobIQILCwsgBUEgaiQAIAILkgIBBH8jAEFAaiIJJAAgCSADQTQQCyEDAkAgBEECSA0AIAMgBEECdGooAgAhCSADQTxqIAgQIyADQQE6AD8gAyACOgA+QQAhBCADKAI8IQoDQCAEIAlGDQEgACAEQQJ0aiAKNgEAIARBAWohBAwAAAsAC0EAIQkDQCAGIAlGRQRAIAMgBSAJQQF0aiIKLQABIgtBAnRqIgwoAgAhBCADQTxqIAotAABBCHQgCGpB//8DcRAjIANBAjoAPyADIAcgC2siCiACajoAPiAEQQEgASAKa3RqIQogAygCPCELA0AgACAEQQJ0aiALNgEAIARBAWoiBCAKSQ0ACyAMIAo2AgAgCUEBaiEJDAELCyADQUBrJAALowIBCX8jAEHQAGsiCSQAIAlBEGogBUE0EAsaIAcgBmshDyAHIAFrIRADQAJAIAMgCkcEQEEBIAEgByACIApBAXRqIgYtAAEiDGsiCGsiC3QhDSAGLQAAIQ4gCUEQaiAMQQJ0aiIMKAIAIQYgCyAPTwRAIAAgBkECdGogCyAIIAUgCEE0bGogCCAQaiIIQQEgCEEBShsiCCACIAQgCEECdGooAgAiCEEBdGogAyAIayAHIA4QYyAGIA1qIQgMAgsgCUEMaiAOECMgCUEBOgAPIAkgCDoADiAGIA1qIQggCSgCDCELA0AgBiAITw0CIAAgBkECdGogCzYBACAGQQFqIQYMAAALAAsgCUHQAGokAA8LIAwgCDYCACAKQQFqIQoMAAALAAs0ACAAIAMgBCAFEDYiBRADBEAgBQ8LIAUgBEkEfyABIAIgAyAFaiAEIAVrIAAQNAVBuH8LCyMAIAA/AEEQdGtB//8DakEQdkAAQX9GBEBBAA8LQQAQAEEBCzsBAX8gAgRAA0AgACABIAJBgCAgAkGAIEkbIgMQCyEAIAFBgCBqIQEgAEGAIGohACACIANrIgINAAsLCwYAIAAQAwsLqBUJAEGICAsNAQAAAAEAAAACAAAAAgBBoAgLswYBAAAAAQAAAAIAAAACAAAAJgAAAIIAAAAhBQAASgAAAGcIAAAmAAAAwAEAAIAAAABJBQAASgAAAL4IAAApAAAALAIAAIAAAABJBQAASgAAAL4IAAAvAAAAygIAAIAAAACKBQAASgAAAIQJAAA1AAAAcwMAAIAAAACdBQAASgAAAKAJAAA9AAAAgQMAAIAAAADrBQAASwAAAD4KAABEAAAAngMAAIAAAABNBgAASwAAAKoKAABLAAAAswMAAIAAAADBBgAATQAAAB8NAABNAAAAUwQAAIAAAAAjCAAAUQAAAKYPAABUAAAAmQQAAIAAAABLCQAAVwAAALESAABYAAAA2gQAAIAAAABvCQAAXQAAACMUAABUAAAARQUAAIAAAABUCgAAagAAAIwUAABqAAAArwUAAIAAAAB2CQAAfAAAAE4QAAB8AAAA0gIAAIAAAABjBwAAkQAAAJAHAACSAAAAAAAAAAEAAAABAAAABQAAAA0AAAAdAAAAPQAAAH0AAAD9AAAA/QEAAP0DAAD9BwAA/Q8AAP0fAAD9PwAA/X8AAP3/AAD9/wEA/f8DAP3/BwD9/w8A/f8fAP3/PwD9/38A/f//AP3//wH9//8D/f//B/3//w/9//8f/f//P/3//38AAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAB0AAAAeAAAAHwAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAACEAAAAiAAAAIwAAACUAAAAnAAAAKQAAACsAAAAvAAAAMwAAADsAAABDAAAAUwAAAGMAAACDAAAAAwEAAAMCAAADBAAAAwgAAAMQAAADIAAAA0AAAAOAAAADAAEAQeAPC1EBAAAAAQAAAAEAAAABAAAAAgAAAAIAAAADAAAAAwAAAAQAAAAEAAAABQAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAQcQQC4sBAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABIAAAAUAAAAFgAAABgAAAAcAAAAIAAAACgAAAAwAAAAQAAAAIAAAAAAAQAAAAIAAAAEAAAACAAAABAAAAAgAAAAQAAAAIAAAAAAAQBBkBIL5gQBAAAAAQAAAAEAAAABAAAAAgAAAAIAAAADAAAAAwAAAAQAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAAAEAAAAEAAAACAAAAAAAAAABAAEBBgAAAAAAAAQAAAAAEAAABAAAAAAgAAAFAQAAAAAAAAUDAAAAAAAABQQAAAAAAAAFBgAAAAAAAAUHAAAAAAAABQkAAAAAAAAFCgAAAAAAAAUMAAAAAAAABg4AAAAAAAEFEAAAAAAAAQUUAAAAAAABBRYAAAAAAAIFHAAAAAAAAwUgAAAAAAAEBTAAAAAgAAYFQAAAAAAABwWAAAAAAAAIBgABAAAAAAoGAAQAAAAADAYAEAAAIAAABAAAAAAAAAAEAQAAAAAAAAUCAAAAIAAABQQAAAAAAAAFBQAAACAAAAUHAAAAAAAABQgAAAAgAAAFCgAAAAAAAAULAAAAAAAABg0AAAAgAAEFEAAAAAAAAQUSAAAAIAABBRYAAAAAAAIFGAAAACAAAwUgAAAAAAADBSgAAAAAAAYEQAAAABAABgRAAAAAIAAHBYAAAAAAAAkGAAIAAAAACwYACAAAMAAABAAAAAAQAAAEAQAAACAAAAUCAAAAIAAABQMAAAAgAAAFBQAAACAAAAUGAAAAIAAABQgAAAAgAAAFCQAAACAAAAULAAAAIAAABQwAAAAAAAAGDwAAACAAAQUSAAAAIAABBRQAAAAgAAIFGAAAACAAAgUcAAAAIAADBSgAAAAgAAQFMAAAAAAAEAYAAAEAAAAPBgCAAAAAAA4GAEAAAAAADQYAIABBgBcLhwIBAAEBBQAAAAAAAAUAAAAAAAAGBD0AAAAAAAkF/QEAAAAADwX9fwAAAAAVBf3/HwAAAAMFBQAAAAAABwR9AAAAAAAMBf0PAAAAABIF/f8DAAAAFwX9/38AAAAFBR0AAAAAAAgE/QAAAAAADgX9PwAAAAAUBf3/DwAAAAIFAQAAABAABwR9AAAAAAALBf0HAAAAABEF/f8BAAAAFgX9/z8AAAAEBQ0AAAAQAAgE/QAAAAAADQX9HwAAAAATBf3/BwAAAAEFAQAAABAABgQ9AAAAAAAKBf0DAAAAABAF/f8AAAAAHAX9//8PAAAbBf3//wcAABoF/f//AwAAGQX9//8BAAAYBf3//wBBkBkLhgQBAAEBBgAAAAAAAAYDAAAAAAAABAQAAAAgAAAFBQAAAAAAAAUGAAAAAAAABQgAAAAAAAAFCQAAAAAAAAULAAAAAAAABg0AAAAAAAAGEAAAAAAAAAYTAAAAAAAABhYAAAAAAAAGGQAAAAAAAAYcAAAAAAAABh8AAAAAAAAGIgAAAAAAAQYlAAAAAAABBikAAAAAAAIGLwAAAAAAAwY7AAAAAAAEBlMAAAAAAAcGgwAAAAAACQYDAgAAEAAABAQAAAAAAAAEBQAAACAAAAUGAAAAAAAABQcAAAAgAAAFCQAAAAAAAAUKAAAAAAAABgwAAAAAAAAGDwAAAAAAAAYSAAAAAAAABhUAAAAAAAAGGAAAAAAAAAYbAAAAAAAABh4AAAAAAAAGIQAAAAAAAQYjAAAAAAABBicAAAAAAAIGKwAAAAAAAwYzAAAAAAAEBkMAAAAAAAUGYwAAAAAACAYDAQAAIAAABAQAAAAwAAAEBAAAABAAAAQFAAAAIAAABQcAAAAgAAAFCAAAACAAAAUKAAAAIAAABQsAAAAAAAAGDgAAAAAAAAYRAAAAAAAABhQAAAAAAAAGFwAAAAAAAAYaAAAAAAAABh0AAAAAAAAGIAAAAAAAEAYDAAEAAAAPBgOAAAAAAA4GA0AAAAAADQYDIAAAAAAMBgMQAAAAAAsGAwgAAAAACgYDBABBpB0L2QEBAAAAAwAAAAcAAAAPAAAAHwAAAD8AAAB/AAAA/wAAAP8BAAD/AwAA/wcAAP8PAAD/HwAA/z8AAP9/AAD//wAA//8BAP//AwD//wcA//8PAP//HwD//z8A//9/AP///wD///8B////A////wf///8P////H////z////9/AAAAAAEAAAACAAAABAAAAAAAAAACAAAABAAAAAgAAAAAAAAAAQAAAAIAAAABAAAABAAAAAQAAAAEAAAABAAAAAgAAAAIAAAACAAAAAcAAAAIAAAACQAAAAoAAAALAEGgIAsDwBBQ",Xh$1=new WeakMap;let Yh$1=0,Jh$1,Jn$1=class Q2 extends Wt{constructor(s){super(s),this.transcoderPath="",this.transcoderBinary=null,this.transcoderPending=null,this.workerPool=new A1,this.workerSourceURL="",this.workerConfig=null,typeof MSC_TRANSCODER<"u"&&console.warn('THREE.KTX2Loader: Please update to latest "basis_transcoder". "msc_basis_transcoder" is no longer supported in three.js r125+.')}setTranscoderPath(s){return this.transcoderPath=s,this}setWorkerLimit(s){return this.workerPool.setWorkerLimit(s),this}detectSupport(s){return s.isWebGPURenderer===!0?this.workerConfig={astcSupported:s.hasFeature("texture-compression-astc"),etc1Supported:!1,etc2Supported:s.hasFeature("texture-compression-etc2"),dxtSupported:s.hasFeature("texture-compression-bc"),bptcSupported:!1,pvrtcSupported:!1}:(this.workerConfig={astcSupported:s.extensions.has("WEBGL_compressed_texture_astc"),etc1Supported:s.extensions.has("WEBGL_compressed_texture_etc1"),etc2Supported:s.extensions.has("WEBGL_compressed_texture_etc"),dxtSupported:s.extensions.has("WEBGL_compressed_texture_s3tc"),bptcSupported:s.extensions.has("EXT_texture_compression_bptc"),pvrtcSupported:s.extensions.has("WEBGL_compressed_texture_pvrtc")||s.extensions.has("WEBKIT_WEBGL_compressed_texture_pvrtc")},s.capabilities.isWebGL2&&(this.workerConfig.etc1Supported=!1)),this}init(){if(!this.transcoderPending){const s=new tn(this.manager);s.setPath(this.transcoderPath),s.setWithCredentials(this.withCredentials);const a=s.loadAsync("basis_transcoder.js"),b=new tn(this.manager);b.setPath(this.transcoderPath),b.setResponseType("arraybuffer"),b.setWithCredentials(this.withCredentials);const _e=b.loadAsync("basis_transcoder.wasm");this.transcoderPending=Promise.all([a,_e]).then(([bt,rn])=>{const sn=Q2.BasisWorker.toString(),yn=["/* constants */","let _EngineFormat = "+JSON.stringify(Q2.EngineFormat),"let _TranscoderFormat = "+JSON.stringify(Q2.TranscoderFormat),"let _BasisFormat = "+JSON.stringify(Q2.BasisFormat),"/* basis_transcoder.js */",bt,"/* worker */",sn.substring(sn.indexOf("{")+1,sn.lastIndexOf("}"))].join(`
|
|
4110
|
+
`);this.workerSourceURL=URL.createObjectURL(new Blob([yn])),this.transcoderBinary=rn,this.workerPool.setWorkerCreator(()=>{const Pn=new Worker(this.workerSourceURL),zn=this.transcoderBinary.slice(0);return Pn.postMessage({type:"init",config:this.workerConfig,transcoderBinary:zn},[zn]),Pn})}),Yh$1>0&&console.warn("THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues. Use a single KTX2Loader instance, or call .dispose() on old instances."),Yh$1++}return this.transcoderPending}load(s,a,b,_e){if(this.workerConfig===null)throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");const bt=new tn(this.manager);bt.setResponseType("arraybuffer"),bt.setWithCredentials(this.withCredentials),bt.load(s,rn=>{if(Xh$1.has(rn))return Xh$1.get(rn).promise.then(a).catch(_e);this._createTexture(rn).then(sn=>a?a(sn):null).catch(_e)},b,_e)}_createTextureFrom(s,a){const{faces:b,width:_e,height:bt,format:rn,type:sn,error:yn,dfdTransferFn:Pn,dfdFlags:zn}=s;if(sn==="error")return Promise.reject(yn);let lr;if(a.faceCount===6)lr=new Rs,lr.image=b,lr.format=rn,lr.type=Ht;else{const ar=b[0].mipmaps;lr=a.layerCount>1?new MI(ar,_e,bt,a.layerCount,rn,Ht):new Rs(ar,_e,bt,rn,Ht)}return lr.minFilter=b[0].mipmaps.length===1?ht$1:Hn,lr.magFilter=ht$1,lr.generateMipmaps=!1,lr.needsUpdate=!0,lr.colorSpace=Pn===v1$3?we$2:kn,lr.premultiplyAlpha=!!(zn&y1),lr}async _createTexture(s,a={}){const b=x1(new Uint8Array(s));if(b.vkFormat!==E1){const rn=[],sn=[];for(let Pn=0;Pn<b.levels.length;Pn++)sn.push(w1(b,Pn).then(function(zn){rn[Pn]=zn}));await Promise.all(sn);const yn=rn[0];return yn.mipmaps=rn.map(Pn=>({data:Pn.source.data,width:Pn.source.data.width,height:Pn.source.data.height,depth:Pn.source.data.depth})),yn}const _e=a,bt=this.init().then(()=>this.workerPool.postMessage({type:"transcode",buffer:s,taskConfig:_e},[s])).then(rn=>this._createTextureFrom(rn.data,b));return Xh$1.set(s,{promise:bt}),bt}dispose(){return this.workerPool.dispose(),this.workerSourceURL&&URL.revokeObjectURL(this.workerSourceURL),Yh$1--,this}};Jn$1.BasisFormat={ETC1S:0,UASTC_4x4:1};Jn$1.TranscoderFormat={ETC1:0,ETC2:1,BC1:2,BC3:3,BC4:4,BC5:5,BC7_M6_OPAQUE_ONLY:6,BC7_M5:7,PVRTC1_4_RGB:8,PVRTC1_4_RGBA:9,ASTC_4x4:10,ATC_RGB:11,ATC_RGBA_INTERPOLATED_ALPHA:12,RGBA32:13,RGB565:14,BGR565:15,RGBA4444:16};Jn$1.EngineFormat={RGBAFormat:Bt$1,RGBA_ASTC_4x4_Format:fd$2,RGBA_BPTC_Format:jl$1,RGBA_ETC2_EAC_Format:dd$1,RGBA_PVRTC_4BPPV1_Format:hd$1,RGBA_S3TC_DXT5_Format:Kl,RGB_ETC1_Format:j0,RGB_ETC2_Format:ud$1,RGB_PVRTC_4BPPV1_Format:cd$1,RGB_S3TC_DXT1_Format:Jl};Jn$1.BasisWorker=function(){let o,s,a;const b=_EngineFormat,_e=_TranscoderFormat,bt=_BasisFormat;self.addEventListener("message",function(hr){const es=hr.data;switch(es.type){case"init":o=es.config,rn(es.transcoderBinary);break;case"transcode":s.then(()=>{try{const{faces:Ur,buffers:Dr,width:zr,height:rs,hasAlpha:as,format:os,dfdTransferFn:ls,dfdFlags:zs}=sn(es.buffer);self.postMessage({type:"transcode",id:es.id,faces:Ur,width:zr,height:rs,hasAlpha:as,format:os,dfdTransferFn:ls,dfdFlags:zs},Dr)}catch(Ur){console.error(Ur),self.postMessage({type:"error",id:es.id,error:Ur.message})}});break}});function rn(hr){s=new Promise(es=>{a={wasmBinary:hr,onRuntimeInitialized:es},BASIS(a)}).then(()=>{a.initializeBasis(),a.KTX2File===void 0&&console.warn("THREE.KTX2Loader: Please update Basis Universal transcoder.")})}function sn(hr){const es=new a.KTX2File(new Uint8Array(hr));function Ur(){es.close(),es.delete()}if(!es.isValid())throw Ur(),new Error("THREE.KTX2Loader: Invalid or unsupported .ktx2 file");const Dr=es.isUASTC()?bt.UASTC_4x4:bt.ETC1S,zr=es.getWidth(),rs=es.getHeight(),as=es.getLayers()||1,os=es.getLevels(),ls=es.getFaces(),zs=es.getHasAlpha(),ho=es.getDFDTransferFunc(),ga=es.getDFDFlags(),{transcoderFormat:mo,engineFormat:go}=lr(Dr,zr,rs,zs);if(!zr||!rs||!os)throw Ur(),new Error("THREE.KTX2Loader: Invalid texture");if(!es.startTranscoding())throw Ur(),new Error("THREE.KTX2Loader: .startTranscoding failed");const yl=[],Zl=[];for(let _d=0;_d<ls;_d++){const Ty=[];for(let yy=0;yy<os;yy++){const by=[];let Al,_f;for(let El=0;El<as;El++){const My=es.getImageLevelInfo(yy,El,_d);_d===0&&yy===0&&El===0&&(My.origWidth%4!==0||My.origHeight%4!==0)&&console.warn("THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions."),os>1?(Al=My.origWidth,_f=My.origHeight):(Al=My.width,_f=My.height);const By=new Uint8Array(es.getImageTranscodedSizeInBytes(yy,El,0,mo));if(!es.transcodeImage(By,yy,El,_d,mo,0,-1,-1))throw Ur(),new Error("THREE.KTX2Loader: .transcodeImage failed.");by.push(By)}const gy=cr(by);Ty.push({data:gy,width:Al,height:_f}),Zl.push(gy.buffer)}yl.push({mipmaps:Ty,width:zr,height:rs,format:go})}return Ur(),{faces:yl,buffers:Zl,width:zr,height:rs,hasAlpha:zs,format:go,dfdTransferFn:ho,dfdFlags:ga}}const yn=[{if:"astcSupported",basisFormat:[bt.UASTC_4x4],transcoderFormat:[_e.ASTC_4x4,_e.ASTC_4x4],engineFormat:[b.RGBA_ASTC_4x4_Format,b.RGBA_ASTC_4x4_Format],priorityETC1S:1/0,priorityUASTC:1,needsPowerOfTwo:!1},{if:"bptcSupported",basisFormat:[bt.ETC1S,bt.UASTC_4x4],transcoderFormat:[_e.BC7_M5,_e.BC7_M5],engineFormat:[b.RGBA_BPTC_Format,b.RGBA_BPTC_Format],priorityETC1S:3,priorityUASTC:2,needsPowerOfTwo:!1},{if:"dxtSupported",basisFormat:[bt.ETC1S,bt.UASTC_4x4],transcoderFormat:[_e.BC1,_e.BC3],engineFormat:[b.RGB_S3TC_DXT1_Format,b.RGBA_S3TC_DXT5_Format],priorityETC1S:4,priorityUASTC:5,needsPowerOfTwo:!1},{if:"etc2Supported",basisFormat:[bt.ETC1S,bt.UASTC_4x4],transcoderFormat:[_e.ETC1,_e.ETC2],engineFormat:[b.RGB_ETC2_Format,b.RGBA_ETC2_EAC_Format],priorityETC1S:1,priorityUASTC:3,needsPowerOfTwo:!1},{if:"etc1Supported",basisFormat:[bt.ETC1S,bt.UASTC_4x4],transcoderFormat:[_e.ETC1],engineFormat:[b.RGB_ETC1_Format],priorityETC1S:2,priorityUASTC:4,needsPowerOfTwo:!1},{if:"pvrtcSupported",basisFormat:[bt.ETC1S,bt.UASTC_4x4],transcoderFormat:[_e.PVRTC1_4_RGB,_e.PVRTC1_4_RGBA],engineFormat:[b.RGB_PVRTC_4BPPV1_Format,b.RGBA_PVRTC_4BPPV1_Format],priorityETC1S:5,priorityUASTC:6,needsPowerOfTwo:!0}],Pn=yn.sort(function(hr,es){return hr.priorityETC1S-es.priorityETC1S}),zn=yn.sort(function(hr,es){return hr.priorityUASTC-es.priorityUASTC});function lr(hr,es,Ur,Dr){let zr,rs;const as=hr===bt.ETC1S?Pn:zn;for(let os=0;os<as.length;os++){const ls=as[os];if(o[ls.if]&&ls.basisFormat.includes(hr)&&!(Dr&&ls.transcoderFormat.length<2)&&!(ls.needsPowerOfTwo&&!(ar(es)&&ar(Ur))))return zr=ls.transcoderFormat[Dr?1:0],rs=ls.engineFormat[Dr?1:0],{transcoderFormat:zr,engineFormat:rs}}return console.warn("THREE.KTX2Loader: No suitable compressed texture format found. Decoding to RGBA32."),zr=_e.RGBA32,rs=b.RGBAFormat,{transcoderFormat:zr,engineFormat:rs}}function ar(hr){return hr<=2?!0:(hr&hr-1)===0&&hr!==0}function cr(hr){if(hr.length===1)return hr[0];let es=0;for(let zr=0;zr<hr.length;zr++){const rs=hr[zr];es+=rs.byteLength}const Ur=new Uint8Array(es);let Dr=0;for(let zr=0;zr<hr.length;zr++){const rs=hr[zr];Ur.set(rs,Dr),Dr+=rs.byteLength}return Ur}};const gm={[cv]:Bt$1,[ov]:Bt$1,[iv]:Bt$1,[kf$1]:Bt$1,[lv]:Ho,[rv]:Ho,[nv]:Ho,[Qf$1]:Ho,[av]:Go,[sv]:Go,[Of$1]:Go,[tv]:Go},Kh$1={[cv]:jt,[ov]:un,[iv]:Ht,[kf$1]:Ht,[lv]:jt,[rv]:un,[nv]:Ht,[Qf$1]:Ht,[av]:jt,[sv]:un,[Of$1]:Ht,[tv]:Ht},M1={[kf$1]:we$2,[Qf$1]:we$2,[Of$1]:we$2};async function w1(o,s=0){const{vkFormat:a}=o,b=Math.max(1,o.pixelWidth>>s),_e=Math.max(1,o.pixelHeight>>s),bt=Math.max(1,o.pixelDepth>>s);if(gm[a]===void 0)throw new Error("THREE.KTX2Loader: Unsupported vkFormat.");const rn=o.levels[s];let sn,yn;if(o.supercompressionScheme===m1)sn=rn.levelData;else if(o.supercompressionScheme===g1)Jh$1||(Jh$1=new Promise(async zn=>{const lr=new S1;await lr.init(),zn(lr)})),sn=(await Jh$1).decode(rn.levelData,rn.uncompressedByteLength);else throw new Error("THREE.KTX2Loader: Unsupported supercompressionScheme.");Kh$1[a]===jt?yn=new Float32Array(sn.buffer,sn.byteOffset,sn.byteLength/Float32Array.BYTES_PER_ELEMENT):Kh$1[a]===un?yn=new Uint16Array(sn.buffer,sn.byteOffset,sn.byteLength/Uint16Array.BYTES_PER_ELEMENT):yn=sn;const Pn=bt===0?new Hr(yn,b,_e):new Kd$1(yn,b,_e,bt);return Pn.type=Kh$1[a],Pn.format=gm[a],Pn.colorSpace=M1[a]||kn,Pn.needsUpdate=!0,Promise.resolve(Pn)}/* @license
|
|
4111
4111
|
* Copyright 2019 Google LLC. All Rights Reserved.
|
|
4112
4112
|
* Licensed under the Apache License, Version 2.0 (the 'License');
|
|
4113
4113
|
* you may not use this file except in compliance with the License.
|
|
@@ -8610,7 +8610,7 @@ void main() {
|
|
|
8610
8610
|
squared_mean = squared_mean / samples;
|
|
8611
8611
|
float std_dev = sqrt( squared_mean - mean * mean );
|
|
8612
8612
|
gl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );
|
|
8613
|
-
}`;function WebGLShadowMap(o,s,a){let b=new Frustum;const _e=new Vector2,bt=new Vector2,rn=new Vector4,sn=new MeshDepthMaterial({depthPacking:RGBADepthPacking}),yn=new MeshDistanceMaterial,Pn={},zn=a.maxTextureSize,lr={[FrontSide]:BackSide,[BackSide]:FrontSide,[DoubleSide]:DoubleSide},ar=new ShaderMaterial({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new Vector2},radius:{value:4}},vertexShader:vertex,fragmentShader:fragment}),cr=ar.clone();cr.defines.HORIZONTAL_PASS=1;const hr=new BufferGeometry;hr.setAttribute("position",new BufferAttribute(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const es=new Mesh(hr,ar),Ur=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=PCFShadowMap;let Dr=this.type;this.render=function(os,ls,zs){if(Ur.enabled===!1||Ur.autoUpdate===!1&&Ur.needsUpdate===!1||os.length===0)return;const ho=o.getRenderTarget(),ga=o.getActiveCubeFace(),mo=o.getActiveMipmapLevel(),go=o.state;go.setBlending(NoBlending),go.buffers.color.setClear(1,1,1,1),go.buffers.depth.setTest(!0),go.setScissorTest(!1);const yl=Dr!==VSMShadowMap&&this.type===VSMShadowMap,Zl=Dr===VSMShadowMap&&this.type!==VSMShadowMap;for(let _d=0,Ty=os.length;_d<Ty;_d++){const yy=os[_d],by=yy.shadow;if(by===void 0){console.warn("THREE.WebGLShadowMap:",yy,"has no shadow.");continue}if(by.autoUpdate===!1&&by.needsUpdate===!1)continue;_e.copy(by.mapSize);const Al=by.getFrameExtents();if(_e.multiply(Al),bt.copy(by.mapSize),(_e.x>zn||_e.y>zn)&&(_e.x>zn&&(bt.x=Math.floor(zn/Al.x),_e.x=bt.x*Al.x,by.mapSize.x=bt.x),_e.y>zn&&(bt.y=Math.floor(zn/Al.y),_e.y=bt.y*Al.y,by.mapSize.y=bt.y)),by.map===null||yl===!0||Zl===!0){const gy=this.type!==VSMShadowMap?{minFilter:NearestFilter,magFilter:NearestFilter}:{};by.map!==null&&by.map.dispose(),by.map=new WebGLRenderTarget(_e.x,_e.y,gy),by.map.texture.name=yy.name+".shadowMap",by.camera.updateProjectionMatrix()}o.setRenderTarget(by.map),o.clear();const _f=by.getViewportCount();for(let gy=0;gy<_f;gy++){const El=by.getViewport(gy);rn.set(bt.x*El.x,bt.y*El.y,bt.x*El.z,bt.y*El.w),go.viewport(rn),by.updateMatrices(yy,gy),b=by.getFrustum(),as(ls,zs,by.camera,yy,this.type)}by.isPointLightShadow!==!0&&this.type===VSMShadowMap&&zr(by,zs),by.needsUpdate=!1}Dr=this.type,Ur.needsUpdate=!1,o.setRenderTarget(ho,ga,mo)};function zr(os,ls){const zs=s.update(es);ar.defines.VSM_SAMPLES!==os.blurSamples&&(ar.defines.VSM_SAMPLES=os.blurSamples,cr.defines.VSM_SAMPLES=os.blurSamples,ar.needsUpdate=!0,cr.needsUpdate=!0),os.mapPass===null&&(os.mapPass=new WebGLRenderTarget(_e.x,_e.y)),ar.uniforms.shadow_pass.value=os.map.texture,ar.uniforms.resolution.value=os.mapSize,ar.uniforms.radius.value=os.radius,o.setRenderTarget(os.mapPass),o.clear(),o.renderBufferDirect(ls,null,zs,ar,es,null),cr.uniforms.shadow_pass.value=os.mapPass.texture,cr.uniforms.resolution.value=os.mapSize,cr.uniforms.radius.value=os.radius,o.setRenderTarget(os.map),o.clear(),o.renderBufferDirect(ls,null,zs,cr,es,null)}function rs(os,ls,zs,ho){let ga=null;const mo=zs.isPointLight===!0?os.customDistanceMaterial:os.customDepthMaterial;if(mo!==void 0)ga=mo;else if(ga=zs.isPointLight===!0?yn:sn,o.localClippingEnabled&&ls.clipShadows===!0&&Array.isArray(ls.clippingPlanes)&&ls.clippingPlanes.length!==0||ls.displacementMap&&ls.displacementScale!==0||ls.alphaMap&&ls.alphaTest>0||ls.map&&ls.alphaTest>0){const go=ga.uuid,yl=ls.uuid;let Zl=Pn[go];Zl===void 0&&(Zl={},Pn[go]=Zl);let _d=Zl[yl];_d===void 0&&(_d=ga.clone(),Zl[yl]=_d),ga=_d}if(ga.visible=ls.visible,ga.wireframe=ls.wireframe,ho===VSMShadowMap?ga.side=ls.shadowSide!==null?ls.shadowSide:ls.side:ga.side=ls.shadowSide!==null?ls.shadowSide:lr[ls.side],ga.alphaMap=ls.alphaMap,ga.alphaTest=ls.alphaTest,ga.map=ls.map,ga.clipShadows=ls.clipShadows,ga.clippingPlanes=ls.clippingPlanes,ga.clipIntersection=ls.clipIntersection,ga.displacementMap=ls.displacementMap,ga.displacementScale=ls.displacementScale,ga.displacementBias=ls.displacementBias,ga.wireframeLinewidth=ls.wireframeLinewidth,ga.linewidth=ls.linewidth,zs.isPointLight===!0&&ga.isMeshDistanceMaterial===!0){const go=o.properties.get(ga);go.light=zs}return ga}function as(os,ls,zs,ho,ga){if(os.visible===!1)return;if(os.layers.test(ls.layers)&&(os.isMesh||os.isLine||os.isPoints)&&(os.castShadow||os.receiveShadow&&ga===VSMShadowMap)&&(!os.frustumCulled||b.intersectsObject(os))){os.modelViewMatrix.multiplyMatrices(zs.matrixWorldInverse,os.matrixWorld);const yl=s.update(os),Zl=os.material;if(Array.isArray(Zl)){const _d=yl.groups;for(let Ty=0,yy=_d.length;Ty<yy;Ty++){const by=_d[Ty],Al=Zl[by.materialIndex];if(Al&&Al.visible){const _f=rs(os,Al,ho,ga);o.renderBufferDirect(zs,null,yl,_f,os,by)}}}else if(Zl.visible){const _d=rs(os,Zl,ho,ga);o.renderBufferDirect(zs,null,yl,_d,os,null)}}const go=os.children;for(let yl=0,Zl=go.length;yl<Zl;yl++)as(go[yl],ls,zs,ho,ga)}}function WebGLState(o,s,a){const b=a.isWebGL2;function _e(){let IA=!1;const XA=new Vector4;let QA=null;const fC=new Vector4(0,0,0,0);return{setMask:function(uC){QA!==uC&&!IA&&(o.colorMask(uC,uC,uC,uC),QA=uC)},setLocked:function(uC){IA=uC},setClear:function(uC,CC,CI,DI,FR){FR===!0&&(uC*=DI,CC*=DI,CI*=DI),XA.set(uC,CC,CI,DI),fC.equals(XA)===!1&&(o.clearColor(uC,CC,CI,DI),fC.copy(XA))},reset:function(){IA=!1,QA=null,fC.set(-1,0,0,0)}}}function bt(){let IA=!1,XA=null,QA=null,fC=null;return{setTest:function(uC){uC?OA(o.DEPTH_TEST):UA(o.DEPTH_TEST)},setMask:function(uC){XA!==uC&&!IA&&(o.depthMask(uC),XA=uC)},setFunc:function(uC){if(QA!==uC){switch(uC){case NeverDepth:o.depthFunc(o.NEVER);break;case AlwaysDepth:o.depthFunc(o.ALWAYS);break;case LessDepth:o.depthFunc(o.LESS);break;case LessEqualDepth:o.depthFunc(o.LEQUAL);break;case EqualDepth:o.depthFunc(o.EQUAL);break;case GreaterEqualDepth:o.depthFunc(o.GEQUAL);break;case GreaterDepth:o.depthFunc(o.GREATER);break;case NotEqualDepth:o.depthFunc(o.NOTEQUAL);break;default:o.depthFunc(o.LEQUAL)}QA=uC}},setLocked:function(uC){IA=uC},setClear:function(uC){fC!==uC&&(o.clearDepth(uC),fC=uC)},reset:function(){IA=!1,XA=null,QA=null,fC=null}}}function rn(){let IA=!1,XA=null,QA=null,fC=null,uC=null,CC=null,CI=null,DI=null,FR=null;return{setTest:function(GI){IA||(GI?OA(o.STENCIL_TEST):UA(o.STENCIL_TEST))},setMask:function(GI){XA!==GI&&!IA&&(o.stencilMask(GI),XA=GI)},setFunc:function(GI,$R,ZI){(QA!==GI||fC!==$R||uC!==ZI)&&(o.stencilFunc(GI,$R,ZI),QA=GI,fC=$R,uC=ZI)},setOp:function(GI,$R,ZI){(CC!==GI||CI!==$R||DI!==ZI)&&(o.stencilOp(GI,$R,ZI),CC=GI,CI=$R,DI=ZI)},setLocked:function(GI){IA=GI},setClear:function(GI){FR!==GI&&(o.clearStencil(GI),FR=GI)},reset:function(){IA=!1,XA=null,QA=null,fC=null,uC=null,CC=null,CI=null,DI=null,FR=null}}}const sn=new _e,yn=new bt,Pn=new rn,zn=new WeakMap,lr=new WeakMap;let ar={},cr={},hr=new WeakMap,es=[],Ur=null,Dr=!1,zr=null,rs=null,as=null,os=null,ls=null,zs=null,ho=null,ga=!1,mo=null,go=null,yl=null,Zl=null,_d=null;const Ty=o.getParameter(o.MAX_COMBINED_TEXTURE_IMAGE_UNITS);let yy=!1,by=0;const Al=o.getParameter(o.VERSION);Al.indexOf("WebGL")!==-1?(by=parseFloat(/^WebGL (\d)/.exec(Al)[1]),yy=by>=1):Al.indexOf("OpenGL ES")!==-1&&(by=parseFloat(/^OpenGL ES (\d)/.exec(Al)[1]),yy=by>=2);let _f=null,gy={};const El=o.getParameter(o.SCISSOR_BOX),My=o.getParameter(o.VIEWPORT),By=new Vector4().fromArray(El),lA=new Vector4().fromArray(My);function wA(IA,XA,QA,fC){const uC=new Uint8Array(4),CC=o.createTexture();o.bindTexture(IA,CC),o.texParameteri(IA,o.TEXTURE_MIN_FILTER,o.NEAREST),o.texParameteri(IA,o.TEXTURE_MAG_FILTER,o.NEAREST);for(let CI=0;CI<QA;CI++)b&&(IA===o.TEXTURE_3D||IA===o.TEXTURE_2D_ARRAY)?o.texImage3D(XA,0,o.RGBA,1,1,fC,0,o.RGBA,o.UNSIGNED_BYTE,uC):o.texImage2D(XA+CI,0,o.RGBA,1,1,0,o.RGBA,o.UNSIGNED_BYTE,uC);return CC}const Fy={};Fy[o.TEXTURE_2D]=wA(o.TEXTURE_2D,o.TEXTURE_2D,1),Fy[o.TEXTURE_CUBE_MAP]=wA(o.TEXTURE_CUBE_MAP,o.TEXTURE_CUBE_MAP_POSITIVE_X,6),b&&(Fy[o.TEXTURE_2D_ARRAY]=wA(o.TEXTURE_2D_ARRAY,o.TEXTURE_2D_ARRAY,1,1),Fy[o.TEXTURE_3D]=wA(o.TEXTURE_3D,o.TEXTURE_3D,1,1)),sn.setClear(0,0,0,1),yn.setClear(1),Pn.setClear(0),OA(o.DEPTH_TEST),yn.setFunc(LessEqualDepth),sE(!1),SC(CullFaceBack),OA(o.CULL_FACE),BA(NoBlending);function OA(IA){ar[IA]!==!0&&(o.enable(IA),ar[IA]=!0)}function UA(IA){ar[IA]!==!1&&(o.disable(IA),ar[IA]=!1)}function $A(IA,XA){return cr[IA]!==XA?(o.bindFramebuffer(IA,XA),cr[IA]=XA,b&&(IA===o.DRAW_FRAMEBUFFER&&(cr[o.FRAMEBUFFER]=XA),IA===o.FRAMEBUFFER&&(cr[o.DRAW_FRAMEBUFFER]=XA)),!0):!1}function YA(IA,XA){let QA=es,fC=!1;if(IA)if(QA=hr.get(XA),QA===void 0&&(QA=[],hr.set(XA,QA)),IA.isWebGLMultipleRenderTargets){const uC=IA.texture;if(QA.length!==uC.length||QA[0]!==o.COLOR_ATTACHMENT0){for(let CC=0,CI=uC.length;CC<CI;CC++)QA[CC]=o.COLOR_ATTACHMENT0+CC;QA.length=uC.length,fC=!0}}else QA[0]!==o.COLOR_ATTACHMENT0&&(QA[0]=o.COLOR_ATTACHMENT0,fC=!0);else QA[0]!==o.BACK&&(QA[0]=o.BACK,fC=!0);fC&&(a.isWebGL2?o.drawBuffers(QA):s.get("WEBGL_draw_buffers").drawBuffersWEBGL(QA))}function WA(IA){return Ur!==IA?(o.useProgram(IA),Ur=IA,!0):!1}const bA={[AddEquation]:o.FUNC_ADD,[SubtractEquation]:o.FUNC_SUBTRACT,[ReverseSubtractEquation]:o.FUNC_REVERSE_SUBTRACT};if(b)bA[MinEquation]=o.MIN,bA[MaxEquation]=o.MAX;else{const IA=s.get("EXT_blend_minmax");IA!==null&&(bA[MinEquation]=IA.MIN_EXT,bA[MaxEquation]=IA.MAX_EXT)}const FA={[ZeroFactor]:o.ZERO,[OneFactor]:o.ONE,[SrcColorFactor]:o.SRC_COLOR,[SrcAlphaFactor]:o.SRC_ALPHA,[SrcAlphaSaturateFactor]:o.SRC_ALPHA_SATURATE,[DstColorFactor]:o.DST_COLOR,[DstAlphaFactor]:o.DST_ALPHA,[OneMinusSrcColorFactor]:o.ONE_MINUS_SRC_COLOR,[OneMinusSrcAlphaFactor]:o.ONE_MINUS_SRC_ALPHA,[OneMinusDstColorFactor]:o.ONE_MINUS_DST_COLOR,[OneMinusDstAlphaFactor]:o.ONE_MINUS_DST_ALPHA};function BA(IA,XA,QA,fC,uC,CC,CI,DI){if(IA===NoBlending){Dr===!0&&(UA(o.BLEND),Dr=!1);return}if(Dr===!1&&(OA(o.BLEND),Dr=!0),IA!==CustomBlending){if(IA!==zr||DI!==ga){if((rs!==AddEquation||ls!==AddEquation)&&(o.blendEquation(o.FUNC_ADD),rs=AddEquation,ls=AddEquation),DI)switch(IA){case NormalBlending:o.blendFuncSeparate(o.ONE,o.ONE_MINUS_SRC_ALPHA,o.ONE,o.ONE_MINUS_SRC_ALPHA);break;case AdditiveBlending:o.blendFunc(o.ONE,o.ONE);break;case SubtractiveBlending:o.blendFuncSeparate(o.ZERO,o.ONE_MINUS_SRC_COLOR,o.ZERO,o.ONE);break;case MultiplyBlending:o.blendFuncSeparate(o.ZERO,o.SRC_COLOR,o.ZERO,o.SRC_ALPHA);break;default:console.error("THREE.WebGLState: Invalid blending: ",IA);break}else switch(IA){case NormalBlending:o.blendFuncSeparate(o.SRC_ALPHA,o.ONE_MINUS_SRC_ALPHA,o.ONE,o.ONE_MINUS_SRC_ALPHA);break;case AdditiveBlending:o.blendFunc(o.SRC_ALPHA,o.ONE);break;case SubtractiveBlending:o.blendFuncSeparate(o.ZERO,o.ONE_MINUS_SRC_COLOR,o.ZERO,o.ONE);break;case MultiplyBlending:o.blendFunc(o.ZERO,o.SRC_COLOR);break;default:console.error("THREE.WebGLState: Invalid blending: ",IA);break}as=null,os=null,zs=null,ho=null,zr=IA,ga=DI}return}uC=uC||XA,CC=CC||QA,CI=CI||fC,(XA!==rs||uC!==ls)&&(o.blendEquationSeparate(bA[XA],bA[uC]),rs=XA,ls=uC),(QA!==as||fC!==os||CC!==zs||CI!==ho)&&(o.blendFuncSeparate(FA[QA],FA[fC],FA[CC],FA[CI]),as=QA,os=fC,zs=CC,ho=CI),zr=IA,ga=!1}function rE(IA,XA){IA.side===DoubleSide?UA(o.CULL_FACE):OA(o.CULL_FACE);let QA=IA.side===BackSide;XA&&(QA=!QA),sE(QA),IA.blending===NormalBlending&&IA.transparent===!1?BA(NoBlending):BA(IA.blending,IA.blendEquation,IA.blendSrc,IA.blendDst,IA.blendEquationAlpha,IA.blendSrcAlpha,IA.blendDstAlpha,IA.premultipliedAlpha),yn.setFunc(IA.depthFunc),yn.setTest(IA.depthTest),yn.setMask(IA.depthWrite),sn.setMask(IA.colorWrite);const fC=IA.stencilWrite;Pn.setTest(fC),fC&&(Pn.setMask(IA.stencilWriteMask),Pn.setFunc(IA.stencilFunc,IA.stencilRef,IA.stencilFuncMask),Pn.setOp(IA.stencilFail,IA.stencilZFail,IA.stencilZPass)),VA(IA.polygonOffset,IA.polygonOffsetFactor,IA.polygonOffsetUnits),IA.alphaToCoverage===!0?OA(o.SAMPLE_ALPHA_TO_COVERAGE):UA(o.SAMPLE_ALPHA_TO_COVERAGE)}function sE(IA){mo!==IA&&(IA?o.frontFace(o.CW):o.frontFace(o.CCW),mo=IA)}function SC(IA){IA!==CullFaceNone?(OA(o.CULL_FACE),IA!==go&&(IA===CullFaceBack?o.cullFace(o.BACK):IA===CullFaceFront?o.cullFace(o.FRONT):o.cullFace(o.FRONT_AND_BACK))):UA(o.CULL_FACE),go=IA}function HA(IA){IA!==yl&&(yy&&o.lineWidth(IA),yl=IA)}function VA(IA,XA,QA){IA?(OA(o.POLYGON_OFFSET_FILL),(Zl!==XA||_d!==QA)&&(o.polygonOffset(XA,QA),Zl=XA,_d=QA)):UA(o.POLYGON_OFFSET_FILL)}function oC(IA){IA?OA(o.SCISSOR_TEST):UA(o.SCISSOR_TEST)}function pC(IA){IA===void 0&&(IA=o.TEXTURE0+Ty-1),_f!==IA&&(o.activeTexture(IA),_f=IA)}function cC(IA,XA,QA){QA===void 0&&(_f===null?QA=o.TEXTURE0+Ty-1:QA=_f);let fC=gy[QA];fC===void 0&&(fC={type:void 0,texture:void 0},gy[QA]=fC),(fC.type!==IA||fC.texture!==XA)&&(_f!==QA&&(o.activeTexture(QA),_f=QA),o.bindTexture(IA,XA||Fy[IA]),fC.type=IA,fC.texture=XA)}function qy(){const IA=gy[_f];IA!==void 0&&IA.type!==void 0&&(o.bindTexture(IA.type,null),IA.type=void 0,IA.texture=void 0)}function Iy(){try{o.compressedTexImage2D.apply(o,arguments)}catch(IA){console.error("THREE.WebGLState:",IA)}}function kA(){try{o.compressedTexImage3D.apply(o,arguments)}catch(IA){console.error("THREE.WebGLState:",IA)}}function nE(){try{o.texSubImage2D.apply(o,arguments)}catch(IA){console.error("THREE.WebGLState:",IA)}}function A_(){try{o.texSubImage3D.apply(o,arguments)}catch(IA){console.error("THREE.WebGLState:",IA)}}function eC(){try{o.compressedTexSubImage2D.apply(o,arguments)}catch(IA){console.error("THREE.WebGLState:",IA)}}function PC(){try{o.compressedTexSubImage3D.apply(o,arguments)}catch(IA){console.error("THREE.WebGLState:",IA)}}function nC(){try{o.texStorage2D.apply(o,arguments)}catch(IA){console.error("THREE.WebGLState:",IA)}}function iE(){try{o.texStorage3D.apply(o,arguments)}catch(IA){console.error("THREE.WebGLState:",IA)}}function KC(){try{o.texImage2D.apply(o,arguments)}catch(IA){console.error("THREE.WebGLState:",IA)}}function bI(){try{o.texImage3D.apply(o,arguments)}catch(IA){console.error("THREE.WebGLState:",IA)}}function lC(IA){By.equals(IA)===!1&&(o.scissor(IA.x,IA.y,IA.z,IA.w),By.copy(IA))}function yI(IA){lA.equals(IA)===!1&&(o.viewport(IA.x,IA.y,IA.z,IA.w),lA.copy(IA))}function LC(IA,XA){let QA=lr.get(XA);QA===void 0&&(QA=new WeakMap,lr.set(XA,QA));let fC=QA.get(IA);fC===void 0&&(fC=o.getUniformBlockIndex(XA,IA.name),QA.set(IA,fC))}function ZC(IA,XA){const fC=lr.get(XA).get(IA);zn.get(XA)!==fC&&(o.uniformBlockBinding(XA,fC,IA.__bindingPointIndex),zn.set(XA,fC))}function vI(){o.disable(o.BLEND),o.disable(o.CULL_FACE),o.disable(o.DEPTH_TEST),o.disable(o.POLYGON_OFFSET_FILL),o.disable(o.SCISSOR_TEST),o.disable(o.STENCIL_TEST),o.disable(o.SAMPLE_ALPHA_TO_COVERAGE),o.blendEquation(o.FUNC_ADD),o.blendFunc(o.ONE,o.ZERO),o.blendFuncSeparate(o.ONE,o.ZERO,o.ONE,o.ZERO),o.colorMask(!0,!0,!0,!0),o.clearColor(0,0,0,0),o.depthMask(!0),o.depthFunc(o.LESS),o.clearDepth(1),o.stencilMask(4294967295),o.stencilFunc(o.ALWAYS,0,4294967295),o.stencilOp(o.KEEP,o.KEEP,o.KEEP),o.clearStencil(0),o.cullFace(o.BACK),o.frontFace(o.CCW),o.polygonOffset(0,0),o.activeTexture(o.TEXTURE0),o.bindFramebuffer(o.FRAMEBUFFER,null),b===!0&&(o.bindFramebuffer(o.DRAW_FRAMEBUFFER,null),o.bindFramebuffer(o.READ_FRAMEBUFFER,null)),o.useProgram(null),o.lineWidth(1),o.scissor(0,0,o.canvas.width,o.canvas.height),o.viewport(0,0,o.canvas.width,o.canvas.height),ar={},_f=null,gy={},cr={},hr=new WeakMap,es=[],Ur=null,Dr=!1,zr=null,rs=null,as=null,os=null,ls=null,zs=null,ho=null,ga=!1,mo=null,go=null,yl=null,Zl=null,_d=null,By.set(0,0,o.canvas.width,o.canvas.height),lA.set(0,0,o.canvas.width,o.canvas.height),sn.reset(),yn.reset(),Pn.reset()}return{buffers:{color:sn,depth:yn,stencil:Pn},enable:OA,disable:UA,bindFramebuffer:$A,drawBuffers:YA,useProgram:WA,setBlending:BA,setMaterial:rE,setFlipSided:sE,setCullFace:SC,setLineWidth:HA,setPolygonOffset:VA,setScissorTest:oC,activeTexture:pC,bindTexture:cC,unbindTexture:qy,compressedTexImage2D:Iy,compressedTexImage3D:kA,texImage2D:KC,texImage3D:bI,updateUBOMapping:LC,uniformBlockBinding:ZC,texStorage2D:nC,texStorage3D:iE,texSubImage2D:nE,texSubImage3D:A_,compressedTexSubImage2D:eC,compressedTexSubImage3D:PC,scissor:lC,viewport:yI,reset:vI}}function WebGLTextures(o,s,a,b,_e,bt,rn){const sn=_e.isWebGL2,yn=_e.maxTextures,Pn=_e.maxCubemapSize,zn=_e.maxTextureSize,lr=_e.maxSamples,ar=s.has("WEBGL_multisampled_render_to_texture")?s.get("WEBGL_multisampled_render_to_texture"):null,cr=typeof navigator>"u"?!1:/OculusBrowser/g.test(navigator.userAgent),hr=new WeakMap;let es;const Ur=new WeakMap;let Dr=!1;try{Dr=typeof OffscreenCanvas<"u"&&new OffscreenCanvas(1,1).getContext("2d")!==null}catch{}function zr(qy,Iy){return Dr?new OffscreenCanvas(qy,Iy):createElementNS("canvas")}function rs(qy,Iy,kA,nE){let A_=1;if((qy.width>nE||qy.height>nE)&&(A_=nE/Math.max(qy.width,qy.height)),A_<1||Iy===!0)if(typeof HTMLImageElement<"u"&&qy instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&qy instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&qy instanceof ImageBitmap){const eC=Iy?floorPowerOfTwo:Math.floor,PC=eC(A_*qy.width),nC=eC(A_*qy.height);es===void 0&&(es=zr(PC,nC));const iE=kA?zr(PC,nC):es;return iE.width=PC,iE.height=nC,iE.getContext("2d").drawImage(qy,0,0,PC,nC),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+qy.width+"x"+qy.height+") to ("+PC+"x"+nC+")."),iE}else return"data"in qy&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+qy.width+"x"+qy.height+")."),qy;return qy}function as(qy){return isPowerOfTwo(qy.width)&&isPowerOfTwo(qy.height)}function os(qy){return sn?!1:qy.wrapS!==ClampToEdgeWrapping||qy.wrapT!==ClampToEdgeWrapping||qy.minFilter!==NearestFilter&&qy.minFilter!==LinearFilter}function ls(qy,Iy){return qy.generateMipmaps&&Iy&&qy.minFilter!==NearestFilter&&qy.minFilter!==LinearFilter}function zs(qy){o.generateMipmap(qy)}function ho(qy,Iy,kA,nE,A_=!1){if(sn===!1)return Iy;if(qy!==null){if(o[qy]!==void 0)return o[qy];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+qy+"'")}let eC=Iy;if(Iy===o.RED&&(kA===o.FLOAT&&(eC=o.R32F),kA===o.HALF_FLOAT&&(eC=o.R16F),kA===o.UNSIGNED_BYTE&&(eC=o.R8)),Iy===o.RED_INTEGER&&(kA===o.UNSIGNED_BYTE&&(eC=o.R8UI),kA===o.UNSIGNED_SHORT&&(eC=o.R16UI),kA===o.UNSIGNED_INT&&(eC=o.R32UI),kA===o.BYTE&&(eC=o.R8I),kA===o.SHORT&&(eC=o.R16I),kA===o.INT&&(eC=o.R32I)),Iy===o.RG&&(kA===o.FLOAT&&(eC=o.RG32F),kA===o.HALF_FLOAT&&(eC=o.RG16F),kA===o.UNSIGNED_BYTE&&(eC=o.RG8)),Iy===o.RGBA){const PC=A_?LinearTransfer:ColorManagement.getTransfer(nE);kA===o.FLOAT&&(eC=o.RGBA32F),kA===o.HALF_FLOAT&&(eC=o.RGBA16F),kA===o.UNSIGNED_BYTE&&(eC=PC===SRGBTransfer?o.SRGB8_ALPHA8:o.RGBA8),kA===o.UNSIGNED_SHORT_4_4_4_4&&(eC=o.RGBA4),kA===o.UNSIGNED_SHORT_5_5_5_1&&(eC=o.RGB5_A1)}return(eC===o.R16F||eC===o.R32F||eC===o.RG16F||eC===o.RG32F||eC===o.RGBA16F||eC===o.RGBA32F)&&s.get("EXT_color_buffer_float"),eC}function ga(qy,Iy,kA){return ls(qy,kA)===!0||qy.isFramebufferTexture&&qy.minFilter!==NearestFilter&&qy.minFilter!==LinearFilter?Math.log2(Math.max(Iy.width,Iy.height))+1:qy.mipmaps!==void 0&&qy.mipmaps.length>0?qy.mipmaps.length:qy.isCompressedTexture&&Array.isArray(qy.image)?Iy.mipmaps.length:1}function mo(qy){return qy===NearestFilter||qy===NearestMipmapNearestFilter||qy===NearestMipmapLinearFilter?o.NEAREST:o.LINEAR}function go(qy){const Iy=qy.target;Iy.removeEventListener("dispose",go),Zl(Iy),Iy.isVideoTexture&&hr.delete(Iy)}function yl(qy){const Iy=qy.target;Iy.removeEventListener("dispose",yl),Ty(Iy)}function Zl(qy){const Iy=b.get(qy);if(Iy.__webglInit===void 0)return;const kA=qy.source,nE=Ur.get(kA);if(nE){const A_=nE[Iy.__cacheKey];A_.usedTimes--,A_.usedTimes===0&&_d(qy),Object.keys(nE).length===0&&Ur.delete(kA)}b.remove(qy)}function _d(qy){const Iy=b.get(qy);o.deleteTexture(Iy.__webglTexture);const kA=qy.source,nE=Ur.get(kA);delete nE[Iy.__cacheKey],rn.memory.textures--}function Ty(qy){const Iy=qy.texture,kA=b.get(qy),nE=b.get(Iy);if(nE.__webglTexture!==void 0&&(o.deleteTexture(nE.__webglTexture),rn.memory.textures--),qy.depthTexture&&qy.depthTexture.dispose(),qy.isWebGLCubeRenderTarget)for(let A_=0;A_<6;A_++){if(Array.isArray(kA.__webglFramebuffer[A_]))for(let eC=0;eC<kA.__webglFramebuffer[A_].length;eC++)o.deleteFramebuffer(kA.__webglFramebuffer[A_][eC]);else o.deleteFramebuffer(kA.__webglFramebuffer[A_]);kA.__webglDepthbuffer&&o.deleteRenderbuffer(kA.__webglDepthbuffer[A_])}else{if(Array.isArray(kA.__webglFramebuffer))for(let A_=0;A_<kA.__webglFramebuffer.length;A_++)o.deleteFramebuffer(kA.__webglFramebuffer[A_]);else o.deleteFramebuffer(kA.__webglFramebuffer);if(kA.__webglDepthbuffer&&o.deleteRenderbuffer(kA.__webglDepthbuffer),kA.__webglMultisampledFramebuffer&&o.deleteFramebuffer(kA.__webglMultisampledFramebuffer),kA.__webglColorRenderbuffer)for(let A_=0;A_<kA.__webglColorRenderbuffer.length;A_++)kA.__webglColorRenderbuffer[A_]&&o.deleteRenderbuffer(kA.__webglColorRenderbuffer[A_]);kA.__webglDepthRenderbuffer&&o.deleteRenderbuffer(kA.__webglDepthRenderbuffer)}if(qy.isWebGLMultipleRenderTargets)for(let A_=0,eC=Iy.length;A_<eC;A_++){const PC=b.get(Iy[A_]);PC.__webglTexture&&(o.deleteTexture(PC.__webglTexture),rn.memory.textures--),b.remove(Iy[A_])}b.remove(Iy),b.remove(qy)}let yy=0;function by(){yy=0}function Al(){const qy=yy;return qy>=yn&&console.warn("THREE.WebGLTextures: Trying to use "+qy+" texture units while this GPU supports only "+yn),yy+=1,qy}function _f(qy){const Iy=[];return Iy.push(qy.wrapS),Iy.push(qy.wrapT),Iy.push(qy.wrapR||0),Iy.push(qy.magFilter),Iy.push(qy.minFilter),Iy.push(qy.anisotropy),Iy.push(qy.internalFormat),Iy.push(qy.format),Iy.push(qy.type),Iy.push(qy.generateMipmaps),Iy.push(qy.premultiplyAlpha),Iy.push(qy.flipY),Iy.push(qy.unpackAlignment),Iy.push(qy.colorSpace),Iy.join()}function gy(qy,Iy){const kA=b.get(qy);if(qy.isVideoTexture&&pC(qy),qy.isRenderTargetTexture===!1&&qy.version>0&&kA.__version!==qy.version){const nE=qy.image;if(nE===null)console.warn("THREE.WebGLRenderer: Texture marked for update but no image data found.");else if(nE.complete===!1)console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete");else{$A(kA,qy,Iy);return}}a.bindTexture(o.TEXTURE_2D,kA.__webglTexture,o.TEXTURE0+Iy)}function El(qy,Iy){const kA=b.get(qy);if(qy.version>0&&kA.__version!==qy.version){$A(kA,qy,Iy);return}a.bindTexture(o.TEXTURE_2D_ARRAY,kA.__webglTexture,o.TEXTURE0+Iy)}function My(qy,Iy){const kA=b.get(qy);if(qy.version>0&&kA.__version!==qy.version){$A(kA,qy,Iy);return}a.bindTexture(o.TEXTURE_3D,kA.__webglTexture,o.TEXTURE0+Iy)}function By(qy,Iy){const kA=b.get(qy);if(qy.version>0&&kA.__version!==qy.version){YA(kA,qy,Iy);return}a.bindTexture(o.TEXTURE_CUBE_MAP,kA.__webglTexture,o.TEXTURE0+Iy)}const lA={[RepeatWrapping]:o.REPEAT,[ClampToEdgeWrapping]:o.CLAMP_TO_EDGE,[MirroredRepeatWrapping]:o.MIRRORED_REPEAT},wA={[NearestFilter]:o.NEAREST,[NearestMipmapNearestFilter]:o.NEAREST_MIPMAP_NEAREST,[NearestMipmapLinearFilter]:o.NEAREST_MIPMAP_LINEAR,[LinearFilter]:o.LINEAR,[LinearMipmapNearestFilter]:o.LINEAR_MIPMAP_NEAREST,[LinearMipmapLinearFilter]:o.LINEAR_MIPMAP_LINEAR},Fy={[NeverCompare]:o.NEVER,[AlwaysCompare]:o.ALWAYS,[LessCompare]:o.LESS,[LessEqualCompare]:o.LEQUAL,[EqualCompare]:o.EQUAL,[GreaterEqualCompare]:o.GEQUAL,[GreaterCompare]:o.GREATER,[NotEqualCompare]:o.NOTEQUAL};function OA(qy,Iy,kA){if(kA?(o.texParameteri(qy,o.TEXTURE_WRAP_S,lA[Iy.wrapS]),o.texParameteri(qy,o.TEXTURE_WRAP_T,lA[Iy.wrapT]),(qy===o.TEXTURE_3D||qy===o.TEXTURE_2D_ARRAY)&&o.texParameteri(qy,o.TEXTURE_WRAP_R,lA[Iy.wrapR]),o.texParameteri(qy,o.TEXTURE_MAG_FILTER,wA[Iy.magFilter]),o.texParameteri(qy,o.TEXTURE_MIN_FILTER,wA[Iy.minFilter])):(o.texParameteri(qy,o.TEXTURE_WRAP_S,o.CLAMP_TO_EDGE),o.texParameteri(qy,o.TEXTURE_WRAP_T,o.CLAMP_TO_EDGE),(qy===o.TEXTURE_3D||qy===o.TEXTURE_2D_ARRAY)&&o.texParameteri(qy,o.TEXTURE_WRAP_R,o.CLAMP_TO_EDGE),(Iy.wrapS!==ClampToEdgeWrapping||Iy.wrapT!==ClampToEdgeWrapping)&&console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping."),o.texParameteri(qy,o.TEXTURE_MAG_FILTER,mo(Iy.magFilter)),o.texParameteri(qy,o.TEXTURE_MIN_FILTER,mo(Iy.minFilter)),Iy.minFilter!==NearestFilter&&Iy.minFilter!==LinearFilter&&console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.")),Iy.compareFunction&&(o.texParameteri(qy,o.TEXTURE_COMPARE_MODE,o.COMPARE_REF_TO_TEXTURE),o.texParameteri(qy,o.TEXTURE_COMPARE_FUNC,Fy[Iy.compareFunction])),s.has("EXT_texture_filter_anisotropic")===!0){const nE=s.get("EXT_texture_filter_anisotropic");if(Iy.magFilter===NearestFilter||Iy.minFilter!==NearestMipmapLinearFilter&&Iy.minFilter!==LinearMipmapLinearFilter||Iy.type===FloatType&&s.has("OES_texture_float_linear")===!1||sn===!1&&Iy.type===HalfFloatType&&s.has("OES_texture_half_float_linear")===!1)return;(Iy.anisotropy>1||b.get(Iy).__currentAnisotropy)&&(o.texParameterf(qy,nE.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(Iy.anisotropy,_e.getMaxAnisotropy())),b.get(Iy).__currentAnisotropy=Iy.anisotropy)}}function UA(qy,Iy){let kA=!1;qy.__webglInit===void 0&&(qy.__webglInit=!0,Iy.addEventListener("dispose",go));const nE=Iy.source;let A_=Ur.get(nE);A_===void 0&&(A_={},Ur.set(nE,A_));const eC=_f(Iy);if(eC!==qy.__cacheKey){A_[eC]===void 0&&(A_[eC]={texture:o.createTexture(),usedTimes:0},rn.memory.textures++,kA=!0),A_[eC].usedTimes++;const PC=A_[qy.__cacheKey];PC!==void 0&&(A_[qy.__cacheKey].usedTimes--,PC.usedTimes===0&&_d(Iy)),qy.__cacheKey=eC,qy.__webglTexture=A_[eC].texture}return kA}function $A(qy,Iy,kA){let nE=o.TEXTURE_2D;(Iy.isDataArrayTexture||Iy.isCompressedArrayTexture)&&(nE=o.TEXTURE_2D_ARRAY),Iy.isData3DTexture&&(nE=o.TEXTURE_3D);const A_=UA(qy,Iy),eC=Iy.source;a.bindTexture(nE,qy.__webglTexture,o.TEXTURE0+kA);const PC=b.get(eC);if(eC.version!==PC.__version||A_===!0){a.activeTexture(o.TEXTURE0+kA);const nC=ColorManagement.getPrimaries(ColorManagement.workingColorSpace),iE=Iy.colorSpace===NoColorSpace$1?null:ColorManagement.getPrimaries(Iy.colorSpace),KC=Iy.colorSpace===NoColorSpace$1||nC===iE?o.NONE:o.BROWSER_DEFAULT_WEBGL;o.pixelStorei(o.UNPACK_FLIP_Y_WEBGL,Iy.flipY),o.pixelStorei(o.UNPACK_PREMULTIPLY_ALPHA_WEBGL,Iy.premultiplyAlpha),o.pixelStorei(o.UNPACK_ALIGNMENT,Iy.unpackAlignment),o.pixelStorei(o.UNPACK_COLORSPACE_CONVERSION_WEBGL,KC);const bI=os(Iy)&&as(Iy.image)===!1;let lC=rs(Iy.image,bI,!1,zn);lC=cC(Iy,lC);const yI=as(lC)||sn,LC=bt.convert(Iy.format,Iy.colorSpace);let ZC=bt.convert(Iy.type),vI=ho(Iy.internalFormat,LC,ZC,Iy.colorSpace,Iy.isVideoTexture);OA(nE,Iy,yI);let IA;const XA=Iy.mipmaps,QA=sn&&Iy.isVideoTexture!==!0,fC=PC.__version===void 0||A_===!0,uC=ga(Iy,lC,yI);if(Iy.isDepthTexture)vI=o.DEPTH_COMPONENT,sn?Iy.type===FloatType?vI=o.DEPTH_COMPONENT32F:Iy.type===UnsignedIntType?vI=o.DEPTH_COMPONENT24:Iy.type===UnsignedInt248Type?vI=o.DEPTH24_STENCIL8:vI=o.DEPTH_COMPONENT16:Iy.type===FloatType&&console.error("WebGLRenderer: Floating point depth texture requires WebGL2."),Iy.format===DepthFormat&&vI===o.DEPTH_COMPONENT&&Iy.type!==UnsignedShortType&&Iy.type!==UnsignedIntType&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),Iy.type=UnsignedIntType,ZC=bt.convert(Iy.type)),Iy.format===DepthStencilFormat&&vI===o.DEPTH_COMPONENT&&(vI=o.DEPTH_STENCIL,Iy.type!==UnsignedInt248Type&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),Iy.type=UnsignedInt248Type,ZC=bt.convert(Iy.type))),fC&&(QA?a.texStorage2D(o.TEXTURE_2D,1,vI,lC.width,lC.height):a.texImage2D(o.TEXTURE_2D,0,vI,lC.width,lC.height,0,LC,ZC,null));else if(Iy.isDataTexture)if(XA.length>0&&yI){QA&&fC&&a.texStorage2D(o.TEXTURE_2D,uC,vI,XA[0].width,XA[0].height);for(let CC=0,CI=XA.length;CC<CI;CC++)IA=XA[CC],QA?a.texSubImage2D(o.TEXTURE_2D,CC,0,0,IA.width,IA.height,LC,ZC,IA.data):a.texImage2D(o.TEXTURE_2D,CC,vI,IA.width,IA.height,0,LC,ZC,IA.data);Iy.generateMipmaps=!1}else QA?(fC&&a.texStorage2D(o.TEXTURE_2D,uC,vI,lC.width,lC.height),a.texSubImage2D(o.TEXTURE_2D,0,0,0,lC.width,lC.height,LC,ZC,lC.data)):a.texImage2D(o.TEXTURE_2D,0,vI,lC.width,lC.height,0,LC,ZC,lC.data);else if(Iy.isCompressedTexture)if(Iy.isCompressedArrayTexture){QA&&fC&&a.texStorage3D(o.TEXTURE_2D_ARRAY,uC,vI,XA[0].width,XA[0].height,lC.depth);for(let CC=0,CI=XA.length;CC<CI;CC++)IA=XA[CC],Iy.format!==RGBAFormat?LC!==null?QA?a.compressedTexSubImage3D(o.TEXTURE_2D_ARRAY,CC,0,0,0,IA.width,IA.height,lC.depth,LC,IA.data,0,0):a.compressedTexImage3D(o.TEXTURE_2D_ARRAY,CC,vI,IA.width,IA.height,lC.depth,0,IA.data,0,0):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):QA?a.texSubImage3D(o.TEXTURE_2D_ARRAY,CC,0,0,0,IA.width,IA.height,lC.depth,LC,ZC,IA.data):a.texImage3D(o.TEXTURE_2D_ARRAY,CC,vI,IA.width,IA.height,lC.depth,0,LC,ZC,IA.data)}else{QA&&fC&&a.texStorage2D(o.TEXTURE_2D,uC,vI,XA[0].width,XA[0].height);for(let CC=0,CI=XA.length;CC<CI;CC++)IA=XA[CC],Iy.format!==RGBAFormat?LC!==null?QA?a.compressedTexSubImage2D(o.TEXTURE_2D,CC,0,0,IA.width,IA.height,LC,IA.data):a.compressedTexImage2D(o.TEXTURE_2D,CC,vI,IA.width,IA.height,0,IA.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):QA?a.texSubImage2D(o.TEXTURE_2D,CC,0,0,IA.width,IA.height,LC,ZC,IA.data):a.texImage2D(o.TEXTURE_2D,CC,vI,IA.width,IA.height,0,LC,ZC,IA.data)}else if(Iy.isDataArrayTexture)QA?(fC&&a.texStorage3D(o.TEXTURE_2D_ARRAY,uC,vI,lC.width,lC.height,lC.depth),a.texSubImage3D(o.TEXTURE_2D_ARRAY,0,0,0,0,lC.width,lC.height,lC.depth,LC,ZC,lC.data)):a.texImage3D(o.TEXTURE_2D_ARRAY,0,vI,lC.width,lC.height,lC.depth,0,LC,ZC,lC.data);else if(Iy.isData3DTexture)QA?(fC&&a.texStorage3D(o.TEXTURE_3D,uC,vI,lC.width,lC.height,lC.depth),a.texSubImage3D(o.TEXTURE_3D,0,0,0,0,lC.width,lC.height,lC.depth,LC,ZC,lC.data)):a.texImage3D(o.TEXTURE_3D,0,vI,lC.width,lC.height,lC.depth,0,LC,ZC,lC.data);else if(Iy.isFramebufferTexture){if(fC)if(QA)a.texStorage2D(o.TEXTURE_2D,uC,vI,lC.width,lC.height);else{let CC=lC.width,CI=lC.height;for(let DI=0;DI<uC;DI++)a.texImage2D(o.TEXTURE_2D,DI,vI,CC,CI,0,LC,ZC,null),CC>>=1,CI>>=1}}else if(XA.length>0&&yI){QA&&fC&&a.texStorage2D(o.TEXTURE_2D,uC,vI,XA[0].width,XA[0].height);for(let CC=0,CI=XA.length;CC<CI;CC++)IA=XA[CC],QA?a.texSubImage2D(o.TEXTURE_2D,CC,0,0,LC,ZC,IA):a.texImage2D(o.TEXTURE_2D,CC,vI,LC,ZC,IA);Iy.generateMipmaps=!1}else QA?(fC&&a.texStorage2D(o.TEXTURE_2D,uC,vI,lC.width,lC.height),a.texSubImage2D(o.TEXTURE_2D,0,0,0,LC,ZC,lC)):a.texImage2D(o.TEXTURE_2D,0,vI,LC,ZC,lC);ls(Iy,yI)&&zs(nE),PC.__version=eC.version,Iy.onUpdate&&Iy.onUpdate(Iy)}qy.__version=Iy.version}function YA(qy,Iy,kA){if(Iy.image.length!==6)return;const nE=UA(qy,Iy),A_=Iy.source;a.bindTexture(o.TEXTURE_CUBE_MAP,qy.__webglTexture,o.TEXTURE0+kA);const eC=b.get(A_);if(A_.version!==eC.__version||nE===!0){a.activeTexture(o.TEXTURE0+kA);const PC=ColorManagement.getPrimaries(ColorManagement.workingColorSpace),nC=Iy.colorSpace===NoColorSpace$1?null:ColorManagement.getPrimaries(Iy.colorSpace),iE=Iy.colorSpace===NoColorSpace$1||PC===nC?o.NONE:o.BROWSER_DEFAULT_WEBGL;o.pixelStorei(o.UNPACK_FLIP_Y_WEBGL,Iy.flipY),o.pixelStorei(o.UNPACK_PREMULTIPLY_ALPHA_WEBGL,Iy.premultiplyAlpha),o.pixelStorei(o.UNPACK_ALIGNMENT,Iy.unpackAlignment),o.pixelStorei(o.UNPACK_COLORSPACE_CONVERSION_WEBGL,iE);const KC=Iy.isCompressedTexture||Iy.image[0].isCompressedTexture,bI=Iy.image[0]&&Iy.image[0].isDataTexture,lC=[];for(let CC=0;CC<6;CC++)!KC&&!bI?lC[CC]=rs(Iy.image[CC],!1,!0,Pn):lC[CC]=bI?Iy.image[CC].image:Iy.image[CC],lC[CC]=cC(Iy,lC[CC]);const yI=lC[0],LC=as(yI)||sn,ZC=bt.convert(Iy.format,Iy.colorSpace),vI=bt.convert(Iy.type),IA=ho(Iy.internalFormat,ZC,vI,Iy.colorSpace),XA=sn&&Iy.isVideoTexture!==!0,QA=eC.__version===void 0||nE===!0;let fC=ga(Iy,yI,LC);OA(o.TEXTURE_CUBE_MAP,Iy,LC);let uC;if(KC){XA&&QA&&a.texStorage2D(o.TEXTURE_CUBE_MAP,fC,IA,yI.width,yI.height);for(let CC=0;CC<6;CC++){uC=lC[CC].mipmaps;for(let CI=0;CI<uC.length;CI++){const DI=uC[CI];Iy.format!==RGBAFormat?ZC!==null?XA?a.compressedTexSubImage2D(o.TEXTURE_CUBE_MAP_POSITIVE_X+CC,CI,0,0,DI.width,DI.height,ZC,DI.data):a.compressedTexImage2D(o.TEXTURE_CUBE_MAP_POSITIVE_X+CC,CI,IA,DI.width,DI.height,0,DI.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()"):XA?a.texSubImage2D(o.TEXTURE_CUBE_MAP_POSITIVE_X+CC,CI,0,0,DI.width,DI.height,ZC,vI,DI.data):a.texImage2D(o.TEXTURE_CUBE_MAP_POSITIVE_X+CC,CI,IA,DI.width,DI.height,0,ZC,vI,DI.data)}}}else{uC=Iy.mipmaps,XA&&QA&&(uC.length>0&&fC++,a.texStorage2D(o.TEXTURE_CUBE_MAP,fC,IA,lC[0].width,lC[0].height));for(let CC=0;CC<6;CC++)if(bI){XA?a.texSubImage2D(o.TEXTURE_CUBE_MAP_POSITIVE_X+CC,0,0,0,lC[CC].width,lC[CC].height,ZC,vI,lC[CC].data):a.texImage2D(o.TEXTURE_CUBE_MAP_POSITIVE_X+CC,0,IA,lC[CC].width,lC[CC].height,0,ZC,vI,lC[CC].data);for(let CI=0;CI<uC.length;CI++){const FR=uC[CI].image[CC].image;XA?a.texSubImage2D(o.TEXTURE_CUBE_MAP_POSITIVE_X+CC,CI+1,0,0,FR.width,FR.height,ZC,vI,FR.data):a.texImage2D(o.TEXTURE_CUBE_MAP_POSITIVE_X+CC,CI+1,IA,FR.width,FR.height,0,ZC,vI,FR.data)}}else{XA?a.texSubImage2D(o.TEXTURE_CUBE_MAP_POSITIVE_X+CC,0,0,0,ZC,vI,lC[CC]):a.texImage2D(o.TEXTURE_CUBE_MAP_POSITIVE_X+CC,0,IA,ZC,vI,lC[CC]);for(let CI=0;CI<uC.length;CI++){const DI=uC[CI];XA?a.texSubImage2D(o.TEXTURE_CUBE_MAP_POSITIVE_X+CC,CI+1,0,0,ZC,vI,DI.image[CC]):a.texImage2D(o.TEXTURE_CUBE_MAP_POSITIVE_X+CC,CI+1,IA,ZC,vI,DI.image[CC])}}}ls(Iy,LC)&&zs(o.TEXTURE_CUBE_MAP),eC.__version=A_.version,Iy.onUpdate&&Iy.onUpdate(Iy)}qy.__version=Iy.version}function WA(qy,Iy,kA,nE,A_,eC){const PC=bt.convert(kA.format,kA.colorSpace),nC=bt.convert(kA.type),iE=ho(kA.internalFormat,PC,nC,kA.colorSpace);if(!b.get(Iy).__hasExternalTextures){const bI=Math.max(1,Iy.width>>eC),lC=Math.max(1,Iy.height>>eC);A_===o.TEXTURE_3D||A_===o.TEXTURE_2D_ARRAY?a.texImage3D(A_,eC,iE,bI,lC,Iy.depth,0,PC,nC,null):a.texImage2D(A_,eC,iE,bI,lC,0,PC,nC,null)}a.bindFramebuffer(o.FRAMEBUFFER,qy),oC(Iy)?ar.framebufferTexture2DMultisampleEXT(o.FRAMEBUFFER,nE,A_,b.get(kA).__webglTexture,0,VA(Iy)):(A_===o.TEXTURE_2D||A_>=o.TEXTURE_CUBE_MAP_POSITIVE_X&&A_<=o.TEXTURE_CUBE_MAP_NEGATIVE_Z)&&o.framebufferTexture2D(o.FRAMEBUFFER,nE,A_,b.get(kA).__webglTexture,eC),a.bindFramebuffer(o.FRAMEBUFFER,null)}function bA(qy,Iy,kA){if(o.bindRenderbuffer(o.RENDERBUFFER,qy),Iy.depthBuffer&&!Iy.stencilBuffer){let nE=sn===!0?o.DEPTH_COMPONENT24:o.DEPTH_COMPONENT16;if(kA||oC(Iy)){const A_=Iy.depthTexture;A_&&A_.isDepthTexture&&(A_.type===FloatType?nE=o.DEPTH_COMPONENT32F:A_.type===UnsignedIntType&&(nE=o.DEPTH_COMPONENT24));const eC=VA(Iy);oC(Iy)?ar.renderbufferStorageMultisampleEXT(o.RENDERBUFFER,eC,nE,Iy.width,Iy.height):o.renderbufferStorageMultisample(o.RENDERBUFFER,eC,nE,Iy.width,Iy.height)}else o.renderbufferStorage(o.RENDERBUFFER,nE,Iy.width,Iy.height);o.framebufferRenderbuffer(o.FRAMEBUFFER,o.DEPTH_ATTACHMENT,o.RENDERBUFFER,qy)}else if(Iy.depthBuffer&&Iy.stencilBuffer){const nE=VA(Iy);kA&&oC(Iy)===!1?o.renderbufferStorageMultisample(o.RENDERBUFFER,nE,o.DEPTH24_STENCIL8,Iy.width,Iy.height):oC(Iy)?ar.renderbufferStorageMultisampleEXT(o.RENDERBUFFER,nE,o.DEPTH24_STENCIL8,Iy.width,Iy.height):o.renderbufferStorage(o.RENDERBUFFER,o.DEPTH_STENCIL,Iy.width,Iy.height),o.framebufferRenderbuffer(o.FRAMEBUFFER,o.DEPTH_STENCIL_ATTACHMENT,o.RENDERBUFFER,qy)}else{const nE=Iy.isWebGLMultipleRenderTargets===!0?Iy.texture:[Iy.texture];for(let A_=0;A_<nE.length;A_++){const eC=nE[A_],PC=bt.convert(eC.format,eC.colorSpace),nC=bt.convert(eC.type),iE=ho(eC.internalFormat,PC,nC,eC.colorSpace),KC=VA(Iy);kA&&oC(Iy)===!1?o.renderbufferStorageMultisample(o.RENDERBUFFER,KC,iE,Iy.width,Iy.height):oC(Iy)?ar.renderbufferStorageMultisampleEXT(o.RENDERBUFFER,KC,iE,Iy.width,Iy.height):o.renderbufferStorage(o.RENDERBUFFER,iE,Iy.width,Iy.height)}}o.bindRenderbuffer(o.RENDERBUFFER,null)}function FA(qy,Iy){if(Iy&&Iy.isWebGLCubeRenderTarget)throw new Error("Depth Texture with cube render targets is not supported");if(a.bindFramebuffer(o.FRAMEBUFFER,qy),!(Iy.depthTexture&&Iy.depthTexture.isDepthTexture))throw new Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");(!b.get(Iy.depthTexture).__webglTexture||Iy.depthTexture.image.width!==Iy.width||Iy.depthTexture.image.height!==Iy.height)&&(Iy.depthTexture.image.width=Iy.width,Iy.depthTexture.image.height=Iy.height,Iy.depthTexture.needsUpdate=!0),gy(Iy.depthTexture,0);const nE=b.get(Iy.depthTexture).__webglTexture,A_=VA(Iy);if(Iy.depthTexture.format===DepthFormat)oC(Iy)?ar.framebufferTexture2DMultisampleEXT(o.FRAMEBUFFER,o.DEPTH_ATTACHMENT,o.TEXTURE_2D,nE,0,A_):o.framebufferTexture2D(o.FRAMEBUFFER,o.DEPTH_ATTACHMENT,o.TEXTURE_2D,nE,0);else if(Iy.depthTexture.format===DepthStencilFormat)oC(Iy)?ar.framebufferTexture2DMultisampleEXT(o.FRAMEBUFFER,o.DEPTH_STENCIL_ATTACHMENT,o.TEXTURE_2D,nE,0,A_):o.framebufferTexture2D(o.FRAMEBUFFER,o.DEPTH_STENCIL_ATTACHMENT,o.TEXTURE_2D,nE,0);else throw new Error("Unknown depthTexture format")}function BA(qy){const Iy=b.get(qy),kA=qy.isWebGLCubeRenderTarget===!0;if(qy.depthTexture&&!Iy.__autoAllocateDepthBuffer){if(kA)throw new Error("target.depthTexture not supported in Cube render targets");FA(Iy.__webglFramebuffer,qy)}else if(kA){Iy.__webglDepthbuffer=[];for(let nE=0;nE<6;nE++)a.bindFramebuffer(o.FRAMEBUFFER,Iy.__webglFramebuffer[nE]),Iy.__webglDepthbuffer[nE]=o.createRenderbuffer(),bA(Iy.__webglDepthbuffer[nE],qy,!1)}else a.bindFramebuffer(o.FRAMEBUFFER,Iy.__webglFramebuffer),Iy.__webglDepthbuffer=o.createRenderbuffer(),bA(Iy.__webglDepthbuffer,qy,!1);a.bindFramebuffer(o.FRAMEBUFFER,null)}function rE(qy,Iy,kA){const nE=b.get(qy);Iy!==void 0&&WA(nE.__webglFramebuffer,qy,qy.texture,o.COLOR_ATTACHMENT0,o.TEXTURE_2D,0),kA!==void 0&&BA(qy)}function sE(qy){const Iy=qy.texture,kA=b.get(qy),nE=b.get(Iy);qy.addEventListener("dispose",yl),qy.isWebGLMultipleRenderTargets!==!0&&(nE.__webglTexture===void 0&&(nE.__webglTexture=o.createTexture()),nE.__version=Iy.version,rn.memory.textures++);const A_=qy.isWebGLCubeRenderTarget===!0,eC=qy.isWebGLMultipleRenderTargets===!0,PC=as(qy)||sn;if(A_){kA.__webglFramebuffer=[];for(let nC=0;nC<6;nC++)if(sn&&Iy.mipmaps&&Iy.mipmaps.length>0){kA.__webglFramebuffer[nC]=[];for(let iE=0;iE<Iy.mipmaps.length;iE++)kA.__webglFramebuffer[nC][iE]=o.createFramebuffer()}else kA.__webglFramebuffer[nC]=o.createFramebuffer()}else{if(sn&&Iy.mipmaps&&Iy.mipmaps.length>0){kA.__webglFramebuffer=[];for(let nC=0;nC<Iy.mipmaps.length;nC++)kA.__webglFramebuffer[nC]=o.createFramebuffer()}else kA.__webglFramebuffer=o.createFramebuffer();if(eC)if(_e.drawBuffers){const nC=qy.texture;for(let iE=0,KC=nC.length;iE<KC;iE++){const bI=b.get(nC[iE]);bI.__webglTexture===void 0&&(bI.__webglTexture=o.createTexture(),rn.memory.textures++)}}else console.warn("THREE.WebGLRenderer: WebGLMultipleRenderTargets can only be used with WebGL2 or WEBGL_draw_buffers extension.");if(sn&&qy.samples>0&&oC(qy)===!1){const nC=eC?Iy:[Iy];kA.__webglMultisampledFramebuffer=o.createFramebuffer(),kA.__webglColorRenderbuffer=[],a.bindFramebuffer(o.FRAMEBUFFER,kA.__webglMultisampledFramebuffer);for(let iE=0;iE<nC.length;iE++){const KC=nC[iE];kA.__webglColorRenderbuffer[iE]=o.createRenderbuffer(),o.bindRenderbuffer(o.RENDERBUFFER,kA.__webglColorRenderbuffer[iE]);const bI=bt.convert(KC.format,KC.colorSpace),lC=bt.convert(KC.type),yI=ho(KC.internalFormat,bI,lC,KC.colorSpace,qy.isXRRenderTarget===!0),LC=VA(qy);o.renderbufferStorageMultisample(o.RENDERBUFFER,LC,yI,qy.width,qy.height),o.framebufferRenderbuffer(o.FRAMEBUFFER,o.COLOR_ATTACHMENT0+iE,o.RENDERBUFFER,kA.__webglColorRenderbuffer[iE])}o.bindRenderbuffer(o.RENDERBUFFER,null),qy.depthBuffer&&(kA.__webglDepthRenderbuffer=o.createRenderbuffer(),bA(kA.__webglDepthRenderbuffer,qy,!0)),a.bindFramebuffer(o.FRAMEBUFFER,null)}}if(A_){a.bindTexture(o.TEXTURE_CUBE_MAP,nE.__webglTexture),OA(o.TEXTURE_CUBE_MAP,Iy,PC);for(let nC=0;nC<6;nC++)if(sn&&Iy.mipmaps&&Iy.mipmaps.length>0)for(let iE=0;iE<Iy.mipmaps.length;iE++)WA(kA.__webglFramebuffer[nC][iE],qy,Iy,o.COLOR_ATTACHMENT0,o.TEXTURE_CUBE_MAP_POSITIVE_X+nC,iE);else WA(kA.__webglFramebuffer[nC],qy,Iy,o.COLOR_ATTACHMENT0,o.TEXTURE_CUBE_MAP_POSITIVE_X+nC,0);ls(Iy,PC)&&zs(o.TEXTURE_CUBE_MAP),a.unbindTexture()}else if(eC){const nC=qy.texture;for(let iE=0,KC=nC.length;iE<KC;iE++){const bI=nC[iE],lC=b.get(bI);a.bindTexture(o.TEXTURE_2D,lC.__webglTexture),OA(o.TEXTURE_2D,bI,PC),WA(kA.__webglFramebuffer,qy,bI,o.COLOR_ATTACHMENT0+iE,o.TEXTURE_2D,0),ls(bI,PC)&&zs(o.TEXTURE_2D)}a.unbindTexture()}else{let nC=o.TEXTURE_2D;if((qy.isWebGL3DRenderTarget||qy.isWebGLArrayRenderTarget)&&(sn?nC=qy.isWebGL3DRenderTarget?o.TEXTURE_3D:o.TEXTURE_2D_ARRAY:console.error("THREE.WebGLTextures: THREE.Data3DTexture and THREE.DataArrayTexture only supported with WebGL2.")),a.bindTexture(nC,nE.__webglTexture),OA(nC,Iy,PC),sn&&Iy.mipmaps&&Iy.mipmaps.length>0)for(let iE=0;iE<Iy.mipmaps.length;iE++)WA(kA.__webglFramebuffer[iE],qy,Iy,o.COLOR_ATTACHMENT0,nC,iE);else WA(kA.__webglFramebuffer,qy,Iy,o.COLOR_ATTACHMENT0,nC,0);ls(Iy,PC)&&zs(nC),a.unbindTexture()}qy.depthBuffer&&BA(qy)}function SC(qy){const Iy=as(qy)||sn,kA=qy.isWebGLMultipleRenderTargets===!0?qy.texture:[qy.texture];for(let nE=0,A_=kA.length;nE<A_;nE++){const eC=kA[nE];if(ls(eC,Iy)){const PC=qy.isWebGLCubeRenderTarget?o.TEXTURE_CUBE_MAP:o.TEXTURE_2D,nC=b.get(eC).__webglTexture;a.bindTexture(PC,nC),zs(PC),a.unbindTexture()}}}function HA(qy){if(sn&&qy.samples>0&&oC(qy)===!1){const Iy=qy.isWebGLMultipleRenderTargets?qy.texture:[qy.texture],kA=qy.width,nE=qy.height;let A_=o.COLOR_BUFFER_BIT;const eC=[],PC=qy.stencilBuffer?o.DEPTH_STENCIL_ATTACHMENT:o.DEPTH_ATTACHMENT,nC=b.get(qy),iE=qy.isWebGLMultipleRenderTargets===!0;if(iE)for(let KC=0;KC<Iy.length;KC++)a.bindFramebuffer(o.FRAMEBUFFER,nC.__webglMultisampledFramebuffer),o.framebufferRenderbuffer(o.FRAMEBUFFER,o.COLOR_ATTACHMENT0+KC,o.RENDERBUFFER,null),a.bindFramebuffer(o.FRAMEBUFFER,nC.__webglFramebuffer),o.framebufferTexture2D(o.DRAW_FRAMEBUFFER,o.COLOR_ATTACHMENT0+KC,o.TEXTURE_2D,null,0);a.bindFramebuffer(o.READ_FRAMEBUFFER,nC.__webglMultisampledFramebuffer),a.bindFramebuffer(o.DRAW_FRAMEBUFFER,nC.__webglFramebuffer);for(let KC=0;KC<Iy.length;KC++){eC.push(o.COLOR_ATTACHMENT0+KC),qy.depthBuffer&&eC.push(PC);const bI=nC.__ignoreDepthValues!==void 0?nC.__ignoreDepthValues:!1;if(bI===!1&&(qy.depthBuffer&&(A_|=o.DEPTH_BUFFER_BIT),qy.stencilBuffer&&(A_|=o.STENCIL_BUFFER_BIT)),iE&&o.framebufferRenderbuffer(o.READ_FRAMEBUFFER,o.COLOR_ATTACHMENT0,o.RENDERBUFFER,nC.__webglColorRenderbuffer[KC]),bI===!0&&(o.invalidateFramebuffer(o.READ_FRAMEBUFFER,[PC]),o.invalidateFramebuffer(o.DRAW_FRAMEBUFFER,[PC])),iE){const lC=b.get(Iy[KC]).__webglTexture;o.framebufferTexture2D(o.DRAW_FRAMEBUFFER,o.COLOR_ATTACHMENT0,o.TEXTURE_2D,lC,0)}o.blitFramebuffer(0,0,kA,nE,0,0,kA,nE,A_,o.NEAREST),cr&&o.invalidateFramebuffer(o.READ_FRAMEBUFFER,eC)}if(a.bindFramebuffer(o.READ_FRAMEBUFFER,null),a.bindFramebuffer(o.DRAW_FRAMEBUFFER,null),iE)for(let KC=0;KC<Iy.length;KC++){a.bindFramebuffer(o.FRAMEBUFFER,nC.__webglMultisampledFramebuffer),o.framebufferRenderbuffer(o.FRAMEBUFFER,o.COLOR_ATTACHMENT0+KC,o.RENDERBUFFER,nC.__webglColorRenderbuffer[KC]);const bI=b.get(Iy[KC]).__webglTexture;a.bindFramebuffer(o.FRAMEBUFFER,nC.__webglFramebuffer),o.framebufferTexture2D(o.DRAW_FRAMEBUFFER,o.COLOR_ATTACHMENT0+KC,o.TEXTURE_2D,bI,0)}a.bindFramebuffer(o.DRAW_FRAMEBUFFER,nC.__webglMultisampledFramebuffer)}}function VA(qy){return Math.min(lr,qy.samples)}function oC(qy){const Iy=b.get(qy);return sn&&qy.samples>0&&s.has("WEBGL_multisampled_render_to_texture")===!0&&Iy.__useRenderToTexture!==!1}function pC(qy){const Iy=rn.render.frame;hr.get(qy)!==Iy&&(hr.set(qy,Iy),qy.update())}function cC(qy,Iy){const kA=qy.colorSpace,nE=qy.format,A_=qy.type;return qy.isCompressedTexture===!0||qy.isVideoTexture===!0||qy.format===_SRGBAFormat||kA!==LinearSRGBColorSpace$1&&kA!==NoColorSpace$1&&(ColorManagement.getTransfer(kA)===SRGBTransfer?sn===!1?s.has("EXT_sRGB")===!0&&nE===RGBAFormat?(qy.format=_SRGBAFormat,qy.minFilter=LinearFilter,qy.generateMipmaps=!1):Iy=ImageUtils.sRGBToLinear(Iy):(nE!==RGBAFormat||A_!==UnsignedByteType)&&console.warn("THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."):console.error("THREE.WebGLTextures: Unsupported texture color space:",kA)),Iy}this.allocateTextureUnit=Al,this.resetTextureUnits=by,this.setTexture2D=gy,this.setTexture2DArray=El,this.setTexture3D=My,this.setTextureCube=By,this.rebindTextures=rE,this.setupRenderTarget=sE,this.updateRenderTargetMipmap=SC,this.updateMultisampleRenderTarget=HA,this.setupDepthRenderbuffer=BA,this.setupFrameBufferTexture=WA,this.useMultisampledRTT=oC}function WebGLUtils(o,s,a){const b=a.isWebGL2;function _e(bt,rn=NoColorSpace$1){let sn;const yn=ColorManagement.getTransfer(rn);if(bt===UnsignedByteType)return o.UNSIGNED_BYTE;if(bt===UnsignedShort4444Type)return o.UNSIGNED_SHORT_4_4_4_4;if(bt===UnsignedShort5551Type)return o.UNSIGNED_SHORT_5_5_5_1;if(bt===ByteType)return o.BYTE;if(bt===ShortType)return o.SHORT;if(bt===UnsignedShortType)return o.UNSIGNED_SHORT;if(bt===IntType)return o.INT;if(bt===UnsignedIntType)return o.UNSIGNED_INT;if(bt===FloatType)return o.FLOAT;if(bt===HalfFloatType)return b?o.HALF_FLOAT:(sn=s.get("OES_texture_half_float"),sn!==null?sn.HALF_FLOAT_OES:null);if(bt===AlphaFormat)return o.ALPHA;if(bt===RGBAFormat)return o.RGBA;if(bt===LuminanceFormat)return o.LUMINANCE;if(bt===LuminanceAlphaFormat)return o.LUMINANCE_ALPHA;if(bt===DepthFormat)return o.DEPTH_COMPONENT;if(bt===DepthStencilFormat)return o.DEPTH_STENCIL;if(bt===_SRGBAFormat)return sn=s.get("EXT_sRGB"),sn!==null?sn.SRGB_ALPHA_EXT:null;if(bt===RedFormat)return o.RED;if(bt===RedIntegerFormat)return o.RED_INTEGER;if(bt===RGFormat)return o.RG;if(bt===RGIntegerFormat)return o.RG_INTEGER;if(bt===RGBAIntegerFormat)return o.RGBA_INTEGER;if(bt===RGB_S3TC_DXT1_Format||bt===RGBA_S3TC_DXT1_Format||bt===RGBA_S3TC_DXT3_Format||bt===RGBA_S3TC_DXT5_Format)if(yn===SRGBTransfer)if(sn=s.get("WEBGL_compressed_texture_s3tc_srgb"),sn!==null){if(bt===RGB_S3TC_DXT1_Format)return sn.COMPRESSED_SRGB_S3TC_DXT1_EXT;if(bt===RGBA_S3TC_DXT1_Format)return sn.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;if(bt===RGBA_S3TC_DXT3_Format)return sn.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;if(bt===RGBA_S3TC_DXT5_Format)return sn.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}else return null;else if(sn=s.get("WEBGL_compressed_texture_s3tc"),sn!==null){if(bt===RGB_S3TC_DXT1_Format)return sn.COMPRESSED_RGB_S3TC_DXT1_EXT;if(bt===RGBA_S3TC_DXT1_Format)return sn.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(bt===RGBA_S3TC_DXT3_Format)return sn.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(bt===RGBA_S3TC_DXT5_Format)return sn.COMPRESSED_RGBA_S3TC_DXT5_EXT}else return null;if(bt===RGB_PVRTC_4BPPV1_Format||bt===RGB_PVRTC_2BPPV1_Format||bt===RGBA_PVRTC_4BPPV1_Format||bt===RGBA_PVRTC_2BPPV1_Format)if(sn=s.get("WEBGL_compressed_texture_pvrtc"),sn!==null){if(bt===RGB_PVRTC_4BPPV1_Format)return sn.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(bt===RGB_PVRTC_2BPPV1_Format)return sn.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(bt===RGBA_PVRTC_4BPPV1_Format)return sn.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(bt===RGBA_PVRTC_2BPPV1_Format)return sn.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}else return null;if(bt===RGB_ETC1_Format)return sn=s.get("WEBGL_compressed_texture_etc1"),sn!==null?sn.COMPRESSED_RGB_ETC1_WEBGL:null;if(bt===RGB_ETC2_Format||bt===RGBA_ETC2_EAC_Format)if(sn=s.get("WEBGL_compressed_texture_etc"),sn!==null){if(bt===RGB_ETC2_Format)return yn===SRGBTransfer?sn.COMPRESSED_SRGB8_ETC2:sn.COMPRESSED_RGB8_ETC2;if(bt===RGBA_ETC2_EAC_Format)return yn===SRGBTransfer?sn.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:sn.COMPRESSED_RGBA8_ETC2_EAC}else return null;if(bt===RGBA_ASTC_4x4_Format||bt===RGBA_ASTC_5x4_Format||bt===RGBA_ASTC_5x5_Format||bt===RGBA_ASTC_6x5_Format||bt===RGBA_ASTC_6x6_Format||bt===RGBA_ASTC_8x5_Format||bt===RGBA_ASTC_8x6_Format||bt===RGBA_ASTC_8x8_Format||bt===RGBA_ASTC_10x5_Format||bt===RGBA_ASTC_10x6_Format||bt===RGBA_ASTC_10x8_Format||bt===RGBA_ASTC_10x10_Format||bt===RGBA_ASTC_12x10_Format||bt===RGBA_ASTC_12x12_Format)if(sn=s.get("WEBGL_compressed_texture_astc"),sn!==null){if(bt===RGBA_ASTC_4x4_Format)return yn===SRGBTransfer?sn.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:sn.COMPRESSED_RGBA_ASTC_4x4_KHR;if(bt===RGBA_ASTC_5x4_Format)return yn===SRGBTransfer?sn.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:sn.COMPRESSED_RGBA_ASTC_5x4_KHR;if(bt===RGBA_ASTC_5x5_Format)return yn===SRGBTransfer?sn.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:sn.COMPRESSED_RGBA_ASTC_5x5_KHR;if(bt===RGBA_ASTC_6x5_Format)return yn===SRGBTransfer?sn.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:sn.COMPRESSED_RGBA_ASTC_6x5_KHR;if(bt===RGBA_ASTC_6x6_Format)return yn===SRGBTransfer?sn.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:sn.COMPRESSED_RGBA_ASTC_6x6_KHR;if(bt===RGBA_ASTC_8x5_Format)return yn===SRGBTransfer?sn.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:sn.COMPRESSED_RGBA_ASTC_8x5_KHR;if(bt===RGBA_ASTC_8x6_Format)return yn===SRGBTransfer?sn.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:sn.COMPRESSED_RGBA_ASTC_8x6_KHR;if(bt===RGBA_ASTC_8x8_Format)return yn===SRGBTransfer?sn.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:sn.COMPRESSED_RGBA_ASTC_8x8_KHR;if(bt===RGBA_ASTC_10x5_Format)return yn===SRGBTransfer?sn.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:sn.COMPRESSED_RGBA_ASTC_10x5_KHR;if(bt===RGBA_ASTC_10x6_Format)return yn===SRGBTransfer?sn.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:sn.COMPRESSED_RGBA_ASTC_10x6_KHR;if(bt===RGBA_ASTC_10x8_Format)return yn===SRGBTransfer?sn.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:sn.COMPRESSED_RGBA_ASTC_10x8_KHR;if(bt===RGBA_ASTC_10x10_Format)return yn===SRGBTransfer?sn.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:sn.COMPRESSED_RGBA_ASTC_10x10_KHR;if(bt===RGBA_ASTC_12x10_Format)return yn===SRGBTransfer?sn.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:sn.COMPRESSED_RGBA_ASTC_12x10_KHR;if(bt===RGBA_ASTC_12x12_Format)return yn===SRGBTransfer?sn.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:sn.COMPRESSED_RGBA_ASTC_12x12_KHR}else return null;if(bt===RGBA_BPTC_Format||bt===RGB_BPTC_SIGNED_Format||bt===RGB_BPTC_UNSIGNED_Format)if(sn=s.get("EXT_texture_compression_bptc"),sn!==null){if(bt===RGBA_BPTC_Format)return yn===SRGBTransfer?sn.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:sn.COMPRESSED_RGBA_BPTC_UNORM_EXT;if(bt===RGB_BPTC_SIGNED_Format)return sn.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT;if(bt===RGB_BPTC_UNSIGNED_Format)return sn.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT}else return null;if(bt===RED_RGTC1_Format||bt===SIGNED_RED_RGTC1_Format||bt===RED_GREEN_RGTC2_Format||bt===SIGNED_RED_GREEN_RGTC2_Format)if(sn=s.get("EXT_texture_compression_rgtc"),sn!==null){if(bt===RGBA_BPTC_Format)return sn.COMPRESSED_RED_RGTC1_EXT;if(bt===SIGNED_RED_RGTC1_Format)return sn.COMPRESSED_SIGNED_RED_RGTC1_EXT;if(bt===RED_GREEN_RGTC2_Format)return sn.COMPRESSED_RED_GREEN_RGTC2_EXT;if(bt===SIGNED_RED_GREEN_RGTC2_Format)return sn.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT}else return null;return bt===UnsignedInt248Type?b?o.UNSIGNED_INT_24_8:(sn=s.get("WEBGL_depth_texture"),sn!==null?sn.UNSIGNED_INT_24_8_WEBGL:null):o[bt]!==void 0?o[bt]:null}return{convert:_e}}class ArrayCamera extends PerspectiveCamera{constructor(s=[]){super(),this.isArrayCamera=!0,this.cameras=s}}class Group extends Object3D{constructor(){super(),this.isGroup=!0,this.type="Group"}}const _moveEvent={type:"move"};class WebXRController{constructor(){this._targetRay=null,this._grip=null,this._hand=null}getHandSpace(){return this._hand===null&&(this._hand=new Group,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand}getTargetRaySpace(){return this._targetRay===null&&(this._targetRay=new Group,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new Vector3,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new Vector3),this._targetRay}getGripSpace(){return this._grip===null&&(this._grip=new Group,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new Vector3,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new Vector3),this._grip}dispatchEvent(s){return this._targetRay!==null&&this._targetRay.dispatchEvent(s),this._grip!==null&&this._grip.dispatchEvent(s),this._hand!==null&&this._hand.dispatchEvent(s),this}connect(s){if(s&&s.hand){const a=this._hand;if(a)for(const b of s.hand.values())this._getHandJoint(a,b)}return this.dispatchEvent({type:"connected",data:s}),this}disconnect(s){return this.dispatchEvent({type:"disconnected",data:s}),this._targetRay!==null&&(this._targetRay.visible=!1),this._grip!==null&&(this._grip.visible=!1),this._hand!==null&&(this._hand.visible=!1),this}update(s,a,b){let _e=null,bt=null,rn=null;const sn=this._targetRay,yn=this._grip,Pn=this._hand;if(s&&a.session.visibilityState!=="visible-blurred"){if(Pn&&s.hand){rn=!0;for(const es of s.hand.values()){const Ur=a.getJointPose(es,b),Dr=this._getHandJoint(Pn,es);Ur!==null&&(Dr.matrix.fromArray(Ur.transform.matrix),Dr.matrix.decompose(Dr.position,Dr.rotation,Dr.scale),Dr.matrixWorldNeedsUpdate=!0,Dr.jointRadius=Ur.radius),Dr.visible=Ur!==null}const zn=Pn.joints["index-finger-tip"],lr=Pn.joints["thumb-tip"],ar=zn.position.distanceTo(lr.position),cr=.02,hr=.005;Pn.inputState.pinching&&ar>cr+hr?(Pn.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:s.handedness,target:this})):!Pn.inputState.pinching&&ar<=cr-hr&&(Pn.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:s.handedness,target:this}))}else yn!==null&&s.gripSpace&&(bt=a.getPose(s.gripSpace,b),bt!==null&&(yn.matrix.fromArray(bt.transform.matrix),yn.matrix.decompose(yn.position,yn.rotation,yn.scale),yn.matrixWorldNeedsUpdate=!0,bt.linearVelocity?(yn.hasLinearVelocity=!0,yn.linearVelocity.copy(bt.linearVelocity)):yn.hasLinearVelocity=!1,bt.angularVelocity?(yn.hasAngularVelocity=!0,yn.angularVelocity.copy(bt.angularVelocity)):yn.hasAngularVelocity=!1));sn!==null&&(_e=a.getPose(s.targetRaySpace,b),_e===null&&bt!==null&&(_e=bt),_e!==null&&(sn.matrix.fromArray(_e.transform.matrix),sn.matrix.decompose(sn.position,sn.rotation,sn.scale),sn.matrixWorldNeedsUpdate=!0,_e.linearVelocity?(sn.hasLinearVelocity=!0,sn.linearVelocity.copy(_e.linearVelocity)):sn.hasLinearVelocity=!1,_e.angularVelocity?(sn.hasAngularVelocity=!0,sn.angularVelocity.copy(_e.angularVelocity)):sn.hasAngularVelocity=!1,this.dispatchEvent(_moveEvent)))}return sn!==null&&(sn.visible=_e!==null),yn!==null&&(yn.visible=bt!==null),Pn!==null&&(Pn.visible=rn!==null),this}_getHandJoint(s,a){if(s.joints[a.jointName]===void 0){const b=new Group;b.matrixAutoUpdate=!1,b.visible=!1,s.joints[a.jointName]=b,s.add(b)}return s.joints[a.jointName]}}class DepthTexture extends Texture{constructor(s,a,b,_e,bt,rn,sn,yn,Pn,zn){if(zn=zn!==void 0?zn:DepthFormat,zn!==DepthFormat&&zn!==DepthStencilFormat)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");b===void 0&&zn===DepthFormat&&(b=UnsignedIntType),b===void 0&&zn===DepthStencilFormat&&(b=UnsignedInt248Type),super(null,_e,bt,rn,sn,yn,zn,b,Pn),this.isDepthTexture=!0,this.image={width:s,height:a},this.magFilter=sn!==void 0?sn:NearestFilter,this.minFilter=yn!==void 0?yn:NearestFilter,this.flipY=!1,this.generateMipmaps=!1,this.compareFunction=null}copy(s){return super.copy(s),this.compareFunction=s.compareFunction,this}toJSON(s){const a=super.toJSON(s);return this.compareFunction!==null&&(a.compareFunction=this.compareFunction),a}}class WebXRManager extends EventDispatcher$2{constructor(s,a){super();const b=this;let _e=null,bt=1,rn=null,sn="local-floor",yn=1,Pn=null,zn=null,lr=null,ar=null,cr=null,hr=null;const es=a.getContextAttributes();let Ur=null,Dr=null;const zr=[],rs=[],as=new PerspectiveCamera;as.layers.enable(1),as.viewport=new Vector4;const os=new PerspectiveCamera;os.layers.enable(2),os.viewport=new Vector4;const ls=[as,os],zs=new ArrayCamera;zs.layers.enable(1),zs.layers.enable(2);let ho=null,ga=null;this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(El){let My=zr[El];return My===void 0&&(My=new WebXRController,zr[El]=My),My.getTargetRaySpace()},this.getControllerGrip=function(El){let My=zr[El];return My===void 0&&(My=new WebXRController,zr[El]=My),My.getGripSpace()},this.getHand=function(El){let My=zr[El];return My===void 0&&(My=new WebXRController,zr[El]=My),My.getHandSpace()};function mo(El){const My=rs.indexOf(El.inputSource);if(My===-1)return;const By=zr[My];By!==void 0&&(By.update(El.inputSource,El.frame,Pn||rn),By.dispatchEvent({type:El.type,data:El.inputSource}))}function go(){_e.removeEventListener("select",mo),_e.removeEventListener("selectstart",mo),_e.removeEventListener("selectend",mo),_e.removeEventListener("squeeze",mo),_e.removeEventListener("squeezestart",mo),_e.removeEventListener("squeezeend",mo),_e.removeEventListener("end",go),_e.removeEventListener("inputsourceschange",yl);for(let El=0;El<zr.length;El++){const My=rs[El];My!==null&&(rs[El]=null,zr[El].disconnect(My))}ho=null,ga=null,s.setRenderTarget(Ur),cr=null,ar=null,lr=null,_e=null,Dr=null,gy.stop(),b.isPresenting=!1,b.dispatchEvent({type:"sessionend"})}this.setFramebufferScaleFactor=function(El){bt=El,b.isPresenting===!0&&console.warn("THREE.WebXRManager: Cannot change framebuffer scale while presenting.")},this.setReferenceSpaceType=function(El){sn=El,b.isPresenting===!0&&console.warn("THREE.WebXRManager: Cannot change reference space type while presenting.")},this.getReferenceSpace=function(){return Pn||rn},this.setReferenceSpace=function(El){Pn=El},this.getBaseLayer=function(){return ar!==null?ar:cr},this.getBinding=function(){return lr},this.getFrame=function(){return hr},this.getSession=function(){return _e},this.setSession=async function(El){if(_e=El,_e!==null){if(Ur=s.getRenderTarget(),_e.addEventListener("select",mo),_e.addEventListener("selectstart",mo),_e.addEventListener("selectend",mo),_e.addEventListener("squeeze",mo),_e.addEventListener("squeezestart",mo),_e.addEventListener("squeezeend",mo),_e.addEventListener("end",go),_e.addEventListener("inputsourceschange",yl),es.xrCompatible!==!0&&await a.makeXRCompatible(),_e.renderState.layers===void 0||s.capabilities.isWebGL2===!1){const My={antialias:_e.renderState.layers===void 0?es.antialias:!0,alpha:!0,depth:es.depth,stencil:es.stencil,framebufferScaleFactor:bt};cr=new XRWebGLLayer(_e,a,My),_e.updateRenderState({baseLayer:cr}),Dr=new WebGLRenderTarget(cr.framebufferWidth,cr.framebufferHeight,{format:RGBAFormat,type:UnsignedByteType,colorSpace:s.outputColorSpace,stencilBuffer:es.stencil})}else{let My=null,By=null,lA=null;es.depth&&(lA=es.stencil?a.DEPTH24_STENCIL8:a.DEPTH_COMPONENT24,My=es.stencil?DepthStencilFormat:DepthFormat,By=es.stencil?UnsignedInt248Type:UnsignedIntType);const wA={colorFormat:a.RGBA8,depthFormat:lA,scaleFactor:bt};lr=new XRWebGLBinding(_e,a),ar=lr.createProjectionLayer(wA),_e.updateRenderState({layers:[ar]}),Dr=new WebGLRenderTarget(ar.textureWidth,ar.textureHeight,{format:RGBAFormat,type:UnsignedByteType,depthTexture:new DepthTexture(ar.textureWidth,ar.textureHeight,By,void 0,void 0,void 0,void 0,void 0,void 0,My),stencilBuffer:es.stencil,colorSpace:s.outputColorSpace,samples:es.antialias?4:0});const Fy=s.properties.get(Dr);Fy.__ignoreDepthValues=ar.ignoreDepthValues}Dr.isXRRenderTarget=!0,this.setFoveation(yn),Pn=null,rn=await _e.requestReferenceSpace(sn),gy.setContext(_e),gy.start(),b.isPresenting=!0,b.dispatchEvent({type:"sessionstart"})}},this.getEnvironmentBlendMode=function(){if(_e!==null)return _e.environmentBlendMode};function yl(El){for(let My=0;My<El.removed.length;My++){const By=El.removed[My],lA=rs.indexOf(By);lA>=0&&(rs[lA]=null,zr[lA].disconnect(By))}for(let My=0;My<El.added.length;My++){const By=El.added[My];let lA=rs.indexOf(By);if(lA===-1){for(let Fy=0;Fy<zr.length;Fy++)if(Fy>=rs.length){rs.push(By),lA=Fy;break}else if(rs[Fy]===null){rs[Fy]=By,lA=Fy;break}if(lA===-1)break}const wA=zr[lA];wA&&wA.connect(By)}}const Zl=new Vector3,_d=new Vector3;function Ty(El,My,By){Zl.setFromMatrixPosition(My.matrixWorld),_d.setFromMatrixPosition(By.matrixWorld);const lA=Zl.distanceTo(_d),wA=My.projectionMatrix.elements,Fy=By.projectionMatrix.elements,OA=wA[14]/(wA[10]-1),UA=wA[14]/(wA[10]+1),$A=(wA[9]+1)/wA[5],YA=(wA[9]-1)/wA[5],WA=(wA[8]-1)/wA[0],bA=(Fy[8]+1)/Fy[0],FA=OA*WA,BA=OA*bA,rE=lA/(-WA+bA),sE=rE*-WA;My.matrixWorld.decompose(El.position,El.quaternion,El.scale),El.translateX(sE),El.translateZ(rE),El.matrixWorld.compose(El.position,El.quaternion,El.scale),El.matrixWorldInverse.copy(El.matrixWorld).invert();const SC=OA+rE,HA=UA+rE,VA=FA-sE,oC=BA+(lA-sE),pC=$A*UA/HA*SC,cC=YA*UA/HA*SC;El.projectionMatrix.makePerspective(VA,oC,pC,cC,SC,HA),El.projectionMatrixInverse.copy(El.projectionMatrix).invert()}function yy(El,My){My===null?El.matrixWorld.copy(El.matrix):El.matrixWorld.multiplyMatrices(My.matrixWorld,El.matrix),El.matrixWorldInverse.copy(El.matrixWorld).invert()}this.updateCamera=function(El){if(_e===null)return;zs.near=os.near=as.near=El.near,zs.far=os.far=as.far=El.far,(ho!==zs.near||ga!==zs.far)&&(_e.updateRenderState({depthNear:zs.near,depthFar:zs.far}),ho=zs.near,ga=zs.far);const My=El.parent,By=zs.cameras;yy(zs,My);for(let lA=0;lA<By.length;lA++)yy(By[lA],My);By.length===2?Ty(zs,as,os):zs.projectionMatrix.copy(as.projectionMatrix),by(El,zs,My)};function by(El,My,By){By===null?El.matrix.copy(My.matrixWorld):(El.matrix.copy(By.matrixWorld),El.matrix.invert(),El.matrix.multiply(My.matrixWorld)),El.matrix.decompose(El.position,El.quaternion,El.scale),El.updateMatrixWorld(!0),El.projectionMatrix.copy(My.projectionMatrix),El.projectionMatrixInverse.copy(My.projectionMatrixInverse),El.isPerspectiveCamera&&(El.fov=RAD2DEG*2*Math.atan(1/El.projectionMatrix.elements[5]),El.zoom=1)}this.getCamera=function(){return zs},this.getFoveation=function(){if(!(ar===null&&cr===null))return yn},this.setFoveation=function(El){yn=El,ar!==null&&(ar.fixedFoveation=El),cr!==null&&cr.fixedFoveation!==void 0&&(cr.fixedFoveation=El)};let Al=null;function _f(El,My){if(zn=My.getViewerPose(Pn||rn),hr=My,zn!==null){const By=zn.views;cr!==null&&(s.setRenderTargetFramebuffer(Dr,cr.framebuffer),s.setRenderTarget(Dr));let lA=!1;By.length!==zs.cameras.length&&(zs.cameras.length=0,lA=!0);for(let wA=0;wA<By.length;wA++){const Fy=By[wA];let OA=null;if(cr!==null)OA=cr.getViewport(Fy);else{const $A=lr.getViewSubImage(ar,Fy);OA=$A.viewport,wA===0&&(s.setRenderTargetTextures(Dr,$A.colorTexture,ar.ignoreDepthValues?void 0:$A.depthStencilTexture),s.setRenderTarget(Dr))}let UA=ls[wA];UA===void 0&&(UA=new PerspectiveCamera,UA.layers.enable(wA),UA.viewport=new Vector4,ls[wA]=UA),UA.matrix.fromArray(Fy.transform.matrix),UA.matrix.decompose(UA.position,UA.quaternion,UA.scale),UA.projectionMatrix.fromArray(Fy.projectionMatrix),UA.projectionMatrixInverse.copy(UA.projectionMatrix).invert(),UA.viewport.set(OA.x,OA.y,OA.width,OA.height),wA===0&&(zs.matrix.copy(UA.matrix),zs.matrix.decompose(zs.position,zs.quaternion,zs.scale)),lA===!0&&zs.cameras.push(UA)}}for(let By=0;By<zr.length;By++){const lA=rs[By],wA=zr[By];lA!==null&&wA!==void 0&&wA.update(lA,My,Pn||rn)}Al&&Al(El,My),My.detectedPlanes&&b.dispatchEvent({type:"planesdetected",data:My}),hr=null}const gy=new WebGLAnimation;gy.setAnimationLoop(_f),this.setAnimationLoop=function(El){Al=El},this.dispose=function(){}}}function WebGLMaterials(o,s){function a(Ur,Dr){Ur.matrixAutoUpdate===!0&&Ur.updateMatrix(),Dr.value.copy(Ur.matrix)}function b(Ur,Dr){Dr.color.getRGB(Ur.fogColor.value,getUnlitUniformColorSpace(o)),Dr.isFog?(Ur.fogNear.value=Dr.near,Ur.fogFar.value=Dr.far):Dr.isFogExp2&&(Ur.fogDensity.value=Dr.density)}function _e(Ur,Dr,zr,rs,as){Dr.isMeshBasicMaterial||Dr.isMeshLambertMaterial?bt(Ur,Dr):Dr.isMeshToonMaterial?(bt(Ur,Dr),lr(Ur,Dr)):Dr.isMeshPhongMaterial?(bt(Ur,Dr),zn(Ur,Dr)):Dr.isMeshStandardMaterial?(bt(Ur,Dr),ar(Ur,Dr),Dr.isMeshPhysicalMaterial&&cr(Ur,Dr,as)):Dr.isMeshMatcapMaterial?(bt(Ur,Dr),hr(Ur,Dr)):Dr.isMeshDepthMaterial?bt(Ur,Dr):Dr.isMeshDistanceMaterial?(bt(Ur,Dr),es(Ur,Dr)):Dr.isMeshNormalMaterial?bt(Ur,Dr):Dr.isLineBasicMaterial?(rn(Ur,Dr),Dr.isLineDashedMaterial&&sn(Ur,Dr)):Dr.isPointsMaterial?yn(Ur,Dr,zr,rs):Dr.isSpriteMaterial?Pn(Ur,Dr):Dr.isShadowMaterial?(Ur.color.value.copy(Dr.color),Ur.opacity.value=Dr.opacity):Dr.isShaderMaterial&&(Dr.uniformsNeedUpdate=!1)}function bt(Ur,Dr){Ur.opacity.value=Dr.opacity,Dr.color&&Ur.diffuse.value.copy(Dr.color),Dr.emissive&&Ur.emissive.value.copy(Dr.emissive).multiplyScalar(Dr.emissiveIntensity),Dr.map&&(Ur.map.value=Dr.map,a(Dr.map,Ur.mapTransform)),Dr.alphaMap&&(Ur.alphaMap.value=Dr.alphaMap,a(Dr.alphaMap,Ur.alphaMapTransform)),Dr.bumpMap&&(Ur.bumpMap.value=Dr.bumpMap,a(Dr.bumpMap,Ur.bumpMapTransform),Ur.bumpScale.value=Dr.bumpScale,Dr.side===BackSide&&(Ur.bumpScale.value*=-1)),Dr.normalMap&&(Ur.normalMap.value=Dr.normalMap,a(Dr.normalMap,Ur.normalMapTransform),Ur.normalScale.value.copy(Dr.normalScale),Dr.side===BackSide&&Ur.normalScale.value.negate()),Dr.displacementMap&&(Ur.displacementMap.value=Dr.displacementMap,a(Dr.displacementMap,Ur.displacementMapTransform),Ur.displacementScale.value=Dr.displacementScale,Ur.displacementBias.value=Dr.displacementBias),Dr.emissiveMap&&(Ur.emissiveMap.value=Dr.emissiveMap,a(Dr.emissiveMap,Ur.emissiveMapTransform)),Dr.specularMap&&(Ur.specularMap.value=Dr.specularMap,a(Dr.specularMap,Ur.specularMapTransform)),Dr.alphaTest>0&&(Ur.alphaTest.value=Dr.alphaTest);const zr=s.get(Dr).envMap;if(zr&&(Ur.envMap.value=zr,Ur.flipEnvMap.value=zr.isCubeTexture&&zr.isRenderTargetTexture===!1?-1:1,Ur.reflectivity.value=Dr.reflectivity,Ur.ior.value=Dr.ior,Ur.refractionRatio.value=Dr.refractionRatio),Dr.lightMap){Ur.lightMap.value=Dr.lightMap;const rs=o._useLegacyLights===!0?Math.PI:1;Ur.lightMapIntensity.value=Dr.lightMapIntensity*rs,a(Dr.lightMap,Ur.lightMapTransform)}Dr.aoMap&&(Ur.aoMap.value=Dr.aoMap,Ur.aoMapIntensity.value=Dr.aoMapIntensity,a(Dr.aoMap,Ur.aoMapTransform))}function rn(Ur,Dr){Ur.diffuse.value.copy(Dr.color),Ur.opacity.value=Dr.opacity,Dr.map&&(Ur.map.value=Dr.map,a(Dr.map,Ur.mapTransform))}function sn(Ur,Dr){Ur.dashSize.value=Dr.dashSize,Ur.totalSize.value=Dr.dashSize+Dr.gapSize,Ur.scale.value=Dr.scale}function yn(Ur,Dr,zr,rs){Ur.diffuse.value.copy(Dr.color),Ur.opacity.value=Dr.opacity,Ur.size.value=Dr.size*zr,Ur.scale.value=rs*.5,Dr.map&&(Ur.map.value=Dr.map,a(Dr.map,Ur.uvTransform)),Dr.alphaMap&&(Ur.alphaMap.value=Dr.alphaMap,a(Dr.alphaMap,Ur.alphaMapTransform)),Dr.alphaTest>0&&(Ur.alphaTest.value=Dr.alphaTest)}function Pn(Ur,Dr){Ur.diffuse.value.copy(Dr.color),Ur.opacity.value=Dr.opacity,Ur.rotation.value=Dr.rotation,Dr.map&&(Ur.map.value=Dr.map,a(Dr.map,Ur.mapTransform)),Dr.alphaMap&&(Ur.alphaMap.value=Dr.alphaMap,a(Dr.alphaMap,Ur.alphaMapTransform)),Dr.alphaTest>0&&(Ur.alphaTest.value=Dr.alphaTest)}function zn(Ur,Dr){Ur.specular.value.copy(Dr.specular),Ur.shininess.value=Math.max(Dr.shininess,1e-4)}function lr(Ur,Dr){Dr.gradientMap&&(Ur.gradientMap.value=Dr.gradientMap)}function ar(Ur,Dr){Ur.metalness.value=Dr.metalness,Dr.metalnessMap&&(Ur.metalnessMap.value=Dr.metalnessMap,a(Dr.metalnessMap,Ur.metalnessMapTransform)),Ur.roughness.value=Dr.roughness,Dr.roughnessMap&&(Ur.roughnessMap.value=Dr.roughnessMap,a(Dr.roughnessMap,Ur.roughnessMapTransform)),s.get(Dr).envMap&&(Ur.envMapIntensity.value=Dr.envMapIntensity)}function cr(Ur,Dr,zr){Ur.ior.value=Dr.ior,Dr.sheen>0&&(Ur.sheenColor.value.copy(Dr.sheenColor).multiplyScalar(Dr.sheen),Ur.sheenRoughness.value=Dr.sheenRoughness,Dr.sheenColorMap&&(Ur.sheenColorMap.value=Dr.sheenColorMap,a(Dr.sheenColorMap,Ur.sheenColorMapTransform)),Dr.sheenRoughnessMap&&(Ur.sheenRoughnessMap.value=Dr.sheenRoughnessMap,a(Dr.sheenRoughnessMap,Ur.sheenRoughnessMapTransform))),Dr.clearcoat>0&&(Ur.clearcoat.value=Dr.clearcoat,Ur.clearcoatRoughness.value=Dr.clearcoatRoughness,Dr.clearcoatMap&&(Ur.clearcoatMap.value=Dr.clearcoatMap,a(Dr.clearcoatMap,Ur.clearcoatMapTransform)),Dr.clearcoatRoughnessMap&&(Ur.clearcoatRoughnessMap.value=Dr.clearcoatRoughnessMap,a(Dr.clearcoatRoughnessMap,Ur.clearcoatRoughnessMapTransform)),Dr.clearcoatNormalMap&&(Ur.clearcoatNormalMap.value=Dr.clearcoatNormalMap,a(Dr.clearcoatNormalMap,Ur.clearcoatNormalMapTransform),Ur.clearcoatNormalScale.value.copy(Dr.clearcoatNormalScale),Dr.side===BackSide&&Ur.clearcoatNormalScale.value.negate())),Dr.iridescence>0&&(Ur.iridescence.value=Dr.iridescence,Ur.iridescenceIOR.value=Dr.iridescenceIOR,Ur.iridescenceThicknessMinimum.value=Dr.iridescenceThicknessRange[0],Ur.iridescenceThicknessMaximum.value=Dr.iridescenceThicknessRange[1],Dr.iridescenceMap&&(Ur.iridescenceMap.value=Dr.iridescenceMap,a(Dr.iridescenceMap,Ur.iridescenceMapTransform)),Dr.iridescenceThicknessMap&&(Ur.iridescenceThicknessMap.value=Dr.iridescenceThicknessMap,a(Dr.iridescenceThicknessMap,Ur.iridescenceThicknessMapTransform))),Dr.transmission>0&&(Ur.transmission.value=Dr.transmission,Ur.transmissionSamplerMap.value=zr.texture,Ur.transmissionSamplerSize.value.set(zr.width,zr.height),Dr.transmissionMap&&(Ur.transmissionMap.value=Dr.transmissionMap,a(Dr.transmissionMap,Ur.transmissionMapTransform)),Ur.thickness.value=Dr.thickness,Dr.thicknessMap&&(Ur.thicknessMap.value=Dr.thicknessMap,a(Dr.thicknessMap,Ur.thicknessMapTransform)),Ur.attenuationDistance.value=Dr.attenuationDistance,Ur.attenuationColor.value.copy(Dr.attenuationColor)),Dr.anisotropy>0&&(Ur.anisotropyVector.value.set(Dr.anisotropy*Math.cos(Dr.anisotropyRotation),Dr.anisotropy*Math.sin(Dr.anisotropyRotation)),Dr.anisotropyMap&&(Ur.anisotropyMap.value=Dr.anisotropyMap,a(Dr.anisotropyMap,Ur.anisotropyMapTransform))),Ur.specularIntensity.value=Dr.specularIntensity,Ur.specularColor.value.copy(Dr.specularColor),Dr.specularColorMap&&(Ur.specularColorMap.value=Dr.specularColorMap,a(Dr.specularColorMap,Ur.specularColorMapTransform)),Dr.specularIntensityMap&&(Ur.specularIntensityMap.value=Dr.specularIntensityMap,a(Dr.specularIntensityMap,Ur.specularIntensityMapTransform))}function hr(Ur,Dr){Dr.matcap&&(Ur.matcap.value=Dr.matcap)}function es(Ur,Dr){const zr=s.get(Dr).light;Ur.referencePosition.value.setFromMatrixPosition(zr.matrixWorld),Ur.nearDistance.value=zr.shadow.camera.near,Ur.farDistance.value=zr.shadow.camera.far}return{refreshFogUniforms:b,refreshMaterialUniforms:_e}}function WebGLUniformsGroups(o,s,a,b){let _e={},bt={},rn=[];const sn=a.isWebGL2?o.getParameter(o.MAX_UNIFORM_BUFFER_BINDINGS):0;function yn(zr,rs){const as=rs.program;b.uniformBlockBinding(zr,as)}function Pn(zr,rs){let as=_e[zr.id];as===void 0&&(hr(zr),as=zn(zr),_e[zr.id]=as,zr.addEventListener("dispose",Ur));const os=rs.program;b.updateUBOMapping(zr,os);const ls=s.render.frame;bt[zr.id]!==ls&&(ar(zr),bt[zr.id]=ls)}function zn(zr){const rs=lr();zr.__bindingPointIndex=rs;const as=o.createBuffer(),os=zr.__size,ls=zr.usage;return o.bindBuffer(o.UNIFORM_BUFFER,as),o.bufferData(o.UNIFORM_BUFFER,os,ls),o.bindBuffer(o.UNIFORM_BUFFER,null),o.bindBufferBase(o.UNIFORM_BUFFER,rs,as),as}function lr(){for(let zr=0;zr<sn;zr++)if(rn.indexOf(zr)===-1)return rn.push(zr),zr;return console.error("THREE.WebGLRenderer: Maximum number of simultaneously usable uniforms groups reached."),0}function ar(zr){const rs=_e[zr.id],as=zr.uniforms,os=zr.__cache;o.bindBuffer(o.UNIFORM_BUFFER,rs);for(let ls=0,zs=as.length;ls<zs;ls++){const ho=as[ls];if(cr(ho,ls,os)===!0){const ga=ho.__offset,mo=Array.isArray(ho.value)?ho.value:[ho.value];let go=0;for(let yl=0;yl<mo.length;yl++){const Zl=mo[yl],_d=es(Zl);typeof Zl=="number"?(ho.__data[0]=Zl,o.bufferSubData(o.UNIFORM_BUFFER,ga+go,ho.__data)):Zl.isMatrix3?(ho.__data[0]=Zl.elements[0],ho.__data[1]=Zl.elements[1],ho.__data[2]=Zl.elements[2],ho.__data[3]=Zl.elements[0],ho.__data[4]=Zl.elements[3],ho.__data[5]=Zl.elements[4],ho.__data[6]=Zl.elements[5],ho.__data[7]=Zl.elements[0],ho.__data[8]=Zl.elements[6],ho.__data[9]=Zl.elements[7],ho.__data[10]=Zl.elements[8],ho.__data[11]=Zl.elements[0]):(Zl.toArray(ho.__data,go),go+=_d.storage/Float32Array.BYTES_PER_ELEMENT)}o.bufferSubData(o.UNIFORM_BUFFER,ga,ho.__data)}}o.bindBuffer(o.UNIFORM_BUFFER,null)}function cr(zr,rs,as){const os=zr.value;if(as[rs]===void 0){if(typeof os=="number")as[rs]=os;else{const ls=Array.isArray(os)?os:[os],zs=[];for(let ho=0;ho<ls.length;ho++)zs.push(ls[ho].clone());as[rs]=zs}return!0}else if(typeof os=="number"){if(as[rs]!==os)return as[rs]=os,!0}else{const ls=Array.isArray(as[rs])?as[rs]:[as[rs]],zs=Array.isArray(os)?os:[os];for(let ho=0;ho<ls.length;ho++){const ga=ls[ho];if(ga.equals(zs[ho])===!1)return ga.copy(zs[ho]),!0}}return!1}function hr(zr){const rs=zr.uniforms;let as=0;const os=16;let ls=0;for(let zs=0,ho=rs.length;zs<ho;zs++){const ga=rs[zs],mo={boundary:0,storage:0},go=Array.isArray(ga.value)?ga.value:[ga.value];for(let yl=0,Zl=go.length;yl<Zl;yl++){const _d=go[yl],Ty=es(_d);mo.boundary+=Ty.boundary,mo.storage+=Ty.storage}if(ga.__data=new Float32Array(mo.storage/Float32Array.BYTES_PER_ELEMENT),ga.__offset=as,zs>0){ls=as%os;const yl=os-ls;ls!==0&&yl-mo.boundary<0&&(as+=os-ls,ga.__offset=as)}as+=mo.storage}return ls=as%os,ls>0&&(as+=os-ls),zr.__size=as,zr.__cache={},this}function es(zr){const rs={boundary:0,storage:0};return typeof zr=="number"?(rs.boundary=4,rs.storage=4):zr.isVector2?(rs.boundary=8,rs.storage=8):zr.isVector3||zr.isColor?(rs.boundary=16,rs.storage=12):zr.isVector4?(rs.boundary=16,rs.storage=16):zr.isMatrix3?(rs.boundary=48,rs.storage=48):zr.isMatrix4?(rs.boundary=64,rs.storage=64):zr.isTexture?console.warn("THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group."):console.warn("THREE.WebGLRenderer: Unsupported uniform value type.",zr),rs}function Ur(zr){const rs=zr.target;rs.removeEventListener("dispose",Ur);const as=rn.indexOf(rs.__bindingPointIndex);rn.splice(as,1),o.deleteBuffer(_e[rs.id]),delete _e[rs.id],delete bt[rs.id]}function Dr(){for(const zr in _e)o.deleteBuffer(_e[zr]);rn=[],_e={},bt={}}return{bind:yn,update:Pn,dispose:Dr}}class WebGLRenderer{constructor(s={}){const{canvas:a=createCanvasElement(),context:b=null,depth:_e=!0,stencil:bt=!0,alpha:rn=!1,antialias:sn=!1,premultipliedAlpha:yn=!0,preserveDrawingBuffer:Pn=!1,powerPreference:zn="default",failIfMajorPerformanceCaveat:lr=!1}=s;this.isWebGLRenderer=!0;let ar;b!==null?ar=b.getContextAttributes().alpha:ar=rn;const cr=new Uint32Array(4),hr=new Int32Array(4);let es=null,Ur=null;const Dr=[],zr=[];this.domElement=a,this.debug={checkShaderErrors:!0,onShaderError:null},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this._outputColorSpace=SRGBColorSpace$1,this._useLegacyLights=!1,this.toneMapping=NoToneMapping,this.toneMappingExposure=1;const rs=this;let as=!1,os=0,ls=0,zs=null,ho=-1,ga=null;const mo=new Vector4,go=new Vector4;let yl=null;const Zl=new Color$1(0);let _d=0,Ty=a.width,yy=a.height,by=1,Al=null,_f=null;const gy=new Vector4(0,0,Ty,yy),El=new Vector4(0,0,Ty,yy);let My=!1;const By=new Frustum;let lA=!1,wA=!1,Fy=null;const OA=new Matrix4,UA=new Vector2,$A=new Vector3,YA={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};function WA(){return zs===null?by:1}let bA=b;function FA(wy,aA){for(let PA=0;PA<wy.length;PA++){const TA=wy[PA],NA=a.getContext(TA,aA);if(NA!==null)return NA}return null}try{const wy={alpha:!0,depth:_e,stencil:bt,antialias:sn,premultipliedAlpha:yn,preserveDrawingBuffer:Pn,powerPreference:zn,failIfMajorPerformanceCaveat:lr};if("setAttribute"in a&&a.setAttribute("data-engine",`three.js r${REVISION}`),a.addEventListener("webglcontextlost",XA,!1),a.addEventListener("webglcontextrestored",QA,!1),a.addEventListener("webglcontextcreationerror",fC,!1),bA===null){const aA=["webgl2","webgl","experimental-webgl"];if(rs.isWebGL1Renderer===!0&&aA.shift(),bA=FA(aA,wy),bA===null)throw FA(aA)?new Error("Error creating WebGL context with your selected attributes."):new Error("Error creating WebGL context.")}typeof WebGLRenderingContext<"u"&&bA instanceof WebGLRenderingContext&&console.warn("THREE.WebGLRenderer: WebGL 1 support was deprecated in r153 and will be removed in r163."),bA.getShaderPrecisionFormat===void 0&&(bA.getShaderPrecisionFormat=function(){return{rangeMin:1,rangeMax:1,precision:1}})}catch(wy){throw console.error("THREE.WebGLRenderer: "+wy.message),wy}let BA,rE,sE,SC,HA,VA,oC,pC,cC,qy,Iy,kA,nE,A_,eC,PC,nC,iE,KC,bI,lC,yI,LC,ZC;function vI(){BA=new WebGLExtensions(bA),rE=new WebGLCapabilities(bA,BA,s),BA.init(rE),yI=new WebGLUtils(bA,BA,rE),sE=new WebGLState(bA,BA,rE),SC=new WebGLInfo(bA),HA=new WebGLProperties,VA=new WebGLTextures(bA,BA,sE,HA,rE,yI,SC),oC=new WebGLCubeMaps(rs),pC=new WebGLCubeUVMaps(rs),cC=new WebGLAttributes(bA,rE),LC=new WebGLBindingStates(bA,BA,cC,rE),qy=new WebGLGeometries(bA,cC,SC,LC),Iy=new WebGLObjects(bA,qy,cC,SC),KC=new WebGLMorphtargets(bA,rE,VA),PC=new WebGLClipping(HA),kA=new WebGLPrograms(rs,oC,pC,BA,rE,LC,PC),nE=new WebGLMaterials(rs,HA),A_=new WebGLRenderLists,eC=new WebGLRenderStates(BA,rE),iE=new WebGLBackground(rs,oC,pC,sE,Iy,ar,yn),nC=new WebGLShadowMap(rs,Iy,rE),ZC=new WebGLUniformsGroups(bA,SC,rE,sE),bI=new WebGLBufferRenderer(bA,BA,SC,rE),lC=new WebGLIndexedBufferRenderer(bA,BA,SC,rE),SC.programs=kA.programs,rs.capabilities=rE,rs.extensions=BA,rs.properties=HA,rs.renderLists=A_,rs.shadowMap=nC,rs.state=sE,rs.info=SC}vI();const IA=new WebXRManager(rs,bA);this.xr=IA,this.getContext=function(){return bA},this.getContextAttributes=function(){return bA.getContextAttributes()},this.forceContextLoss=function(){const wy=BA.get("WEBGL_lose_context");wy&&wy.loseContext()},this.forceContextRestore=function(){const wy=BA.get("WEBGL_lose_context");wy&&wy.restoreContext()},this.getPixelRatio=function(){return by},this.setPixelRatio=function(wy){wy!==void 0&&(by=wy,this.setSize(Ty,yy,!1))},this.getSize=function(wy){return wy.set(Ty,yy)},this.setSize=function(wy,aA,PA=!0){if(IA.isPresenting){console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting.");return}Ty=wy,yy=aA,a.width=Math.floor(wy*by),a.height=Math.floor(aA*by),PA===!0&&(a.style.width=wy+"px",a.style.height=aA+"px"),this.setViewport(0,0,wy,aA)},this.getDrawingBufferSize=function(wy){return wy.set(Ty*by,yy*by).floor()},this.setDrawingBufferSize=function(wy,aA,PA){Ty=wy,yy=aA,by=PA,a.width=Math.floor(wy*PA),a.height=Math.floor(aA*PA),this.setViewport(0,0,wy,aA)},this.getCurrentViewport=function(wy){return wy.copy(mo)},this.getViewport=function(wy){return wy.copy(gy)},this.setViewport=function(wy,aA,PA,TA){wy.isVector4?gy.set(wy.x,wy.y,wy.z,wy.w):gy.set(wy,aA,PA,TA),sE.viewport(mo.copy(gy).multiplyScalar(by).floor())},this.getScissor=function(wy){return wy.copy(El)},this.setScissor=function(wy,aA,PA,TA){wy.isVector4?El.set(wy.x,wy.y,wy.z,wy.w):El.set(wy,aA,PA,TA),sE.scissor(go.copy(El).multiplyScalar(by).floor())},this.getScissorTest=function(){return My},this.setScissorTest=function(wy){sE.setScissorTest(My=wy)},this.setOpaqueSort=function(wy){Al=wy},this.setTransparentSort=function(wy){_f=wy},this.getClearColor=function(wy){return wy.copy(iE.getClearColor())},this.setClearColor=function(){iE.setClearColor.apply(iE,arguments)},this.getClearAlpha=function(){return iE.getClearAlpha()},this.setClearAlpha=function(){iE.setClearAlpha.apply(iE,arguments)},this.clear=function(wy=!0,aA=!0,PA=!0){let TA=0;if(wy){let NA=!1;if(zs!==null){const qA=zs.texture.format;NA=qA===RGBAIntegerFormat||qA===RGIntegerFormat||qA===RedIntegerFormat}if(NA){const qA=zs.texture.type,oE=qA===UnsignedByteType||qA===UnsignedIntType||qA===UnsignedShortType||qA===UnsignedInt248Type||qA===UnsignedShort4444Type||qA===UnsignedShort5551Type,iC=iE.getClearColor(),aC=iE.getClearAlpha(),hC=iC.r,sC=iC.g,NC=iC.b;oE?(cr[0]=hC,cr[1]=sC,cr[2]=NC,cr[3]=aC,bA.clearBufferuiv(bA.COLOR,0,cr)):(hr[0]=hC,hr[1]=sC,hr[2]=NC,hr[3]=aC,bA.clearBufferiv(bA.COLOR,0,hr))}else TA|=bA.COLOR_BUFFER_BIT}aA&&(TA|=bA.DEPTH_BUFFER_BIT),PA&&(TA|=bA.STENCIL_BUFFER_BIT),bA.clear(TA)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.dispose=function(){a.removeEventListener("webglcontextlost",XA,!1),a.removeEventListener("webglcontextrestored",QA,!1),a.removeEventListener("webglcontextcreationerror",fC,!1),A_.dispose(),eC.dispose(),HA.dispose(),oC.dispose(),pC.dispose(),Iy.dispose(),LC.dispose(),ZC.dispose(),kA.dispose(),IA.dispose(),IA.removeEventListener("sessionstart",GI),IA.removeEventListener("sessionend",$R),Fy&&(Fy.dispose(),Fy=null),ZI.stop()};function XA(wy){wy.preventDefault(),console.log("THREE.WebGLRenderer: Context Lost."),as=!0}function QA(){console.log("THREE.WebGLRenderer: Context Restored."),as=!1;const wy=SC.autoReset,aA=nC.enabled,PA=nC.autoUpdate,TA=nC.needsUpdate,NA=nC.type;vI(),SC.autoReset=wy,nC.enabled=aA,nC.autoUpdate=PA,nC.needsUpdate=TA,nC.type=NA}function fC(wy){console.error("THREE.WebGLRenderer: A WebGL context could not be created. Reason: ",wy.statusMessage)}function uC(wy){const aA=wy.target;aA.removeEventListener("dispose",uC),CC(aA)}function CC(wy){CI(wy),HA.remove(wy)}function CI(wy){const aA=HA.get(wy).programs;aA!==void 0&&(aA.forEach(function(PA){kA.releaseProgram(PA)}),wy.isShaderMaterial&&kA.releaseShaderCache(wy))}this.renderBufferDirect=function(wy,aA,PA,TA,NA,qA){aA===null&&(aA=YA);const oE=NA.isMesh&&NA.matrixWorld.determinant()<0,iC=HR(wy,aA,PA,TA,NA);sE.setMaterial(TA,oE);let aC=PA.index,hC=1;if(TA.wireframe===!0){if(aC=qy.getWireframeAttribute(PA),aC===void 0)return;hC=2}const sC=PA.drawRange,NC=PA.attributes.position;let UC=sC.start*hC,FC=(sC.start+sC.count)*hC;qA!==null&&(UC=Math.max(UC,qA.start*hC),FC=Math.min(FC,(qA.start+qA.count)*hC)),aC!==null?(UC=Math.max(UC,0),FC=Math.min(FC,aC.count)):NC!=null&&(UC=Math.max(UC,0),FC=Math.min(FC,NC.count));const LI=FC-UC;if(LI<0||LI===1/0)return;LC.setup(NA,TA,iC,PA,aC);let BI,II=bI;if(aC!==null&&(BI=cC.get(aC),II=lC,II.setIndex(BI)),NA.isMesh)TA.wireframe===!0?(sE.setLineWidth(TA.wireframeLinewidth*WA()),II.setMode(bA.LINES)):II.setMode(bA.TRIANGLES);else if(NA.isLine){let BC=TA.linewidth;BC===void 0&&(BC=1),sE.setLineWidth(BC*WA()),NA.isLineSegments?II.setMode(bA.LINES):NA.isLineLoop?II.setMode(bA.LINE_LOOP):II.setMode(bA.LINE_STRIP)}else NA.isPoints?II.setMode(bA.POINTS):NA.isSprite&&II.setMode(bA.TRIANGLES);if(NA.isInstancedMesh)II.renderInstances(UC,LI,NA.count);else if(PA.isInstancedBufferGeometry){const BC=PA._maxInstanceCount!==void 0?PA._maxInstanceCount:1/0,VI=Math.min(PA.instanceCount,BC);II.renderInstances(UC,LI,VI)}else II.render(UC,LI)},this.compile=function(wy,aA){function PA(TA,NA,qA){TA.transparent===!0&&TA.side===DoubleSide&&TA.forceSinglePass===!1?(TA.side=BackSide,TA.needsUpdate=!0,TI(TA,NA,qA),TA.side=FrontSide,TA.needsUpdate=!0,TI(TA,NA,qA),TA.side=DoubleSide):TI(TA,NA,qA)}Ur=eC.get(wy),Ur.init(),zr.push(Ur),wy.traverseVisible(function(TA){TA.isLight&&TA.layers.test(aA.layers)&&(Ur.pushLight(TA),TA.castShadow&&Ur.pushShadow(TA))}),Ur.setupLights(rs._useLegacyLights),wy.traverse(function(TA){const NA=TA.material;if(NA)if(Array.isArray(NA))for(let qA=0;qA<NA.length;qA++){const oE=NA[qA];PA(oE,wy,TA)}else PA(NA,wy,TA)}),zr.pop(),Ur=null};let DI=null;function FR(wy){DI&&DI(wy)}function GI(){ZI.stop()}function $R(){ZI.start()}const ZI=new WebGLAnimation;ZI.setAnimationLoop(FR),typeof self<"u"&&ZI.setContext(self),this.setAnimationLoop=function(wy){DI=wy,IA.setAnimationLoop(wy),wy===null?ZI.stop():ZI.start()},IA.addEventListener("sessionstart",GI),IA.addEventListener("sessionend",$R),this.render=function(wy,aA){if(aA!==void 0&&aA.isCamera!==!0){console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");return}if(as===!0)return;wy.matrixWorldAutoUpdate===!0&&wy.updateMatrixWorld(),aA.parent===null&&aA.matrixWorldAutoUpdate===!0&&aA.updateMatrixWorld(),IA.enabled===!0&&IA.isPresenting===!0&&(IA.cameraAutoUpdate===!0&&IA.updateCamera(aA),aA=IA.getCamera()),wy.isScene===!0&&wy.onBeforeRender(rs,wy,aA,zs),Ur=eC.get(wy,zr.length),Ur.init(),zr.push(Ur),OA.multiplyMatrices(aA.projectionMatrix,aA.matrixWorldInverse),By.setFromProjectionMatrix(OA),wA=this.localClippingEnabled,lA=PC.init(this.clippingPlanes,wA),es=A_.get(wy,Dr.length),es.init(),Dr.push(es),RP(wy,aA,0,rs.sortObjects),es.finish(),rs.sortObjects===!0&&es.sort(Al,_f),this.info.render.frame++,lA===!0&&PC.beginShadows();const PA=Ur.state.shadowsArray;if(nC.render(PA,wy,aA),lA===!0&&PC.endShadows(),this.info.autoReset===!0&&this.info.reset(),iE.render(es,wy),Ur.setupLights(rs._useLegacyLights),aA.isArrayCamera){const TA=aA.cameras;for(let NA=0,qA=TA.length;NA<qA;NA++){const oE=TA[NA];EP(es,wy,oE,oE.viewport)}}else EP(es,wy,aA);zs!==null&&(VA.updateMultisampleRenderTarget(zs),VA.updateRenderTargetMipmap(zs)),wy.isScene===!0&&wy.onAfterRender(rs,wy,aA),LC.resetDefaultState(),ho=-1,ga=null,zr.pop(),zr.length>0?Ur=zr[zr.length-1]:Ur=null,Dr.pop(),Dr.length>0?es=Dr[Dr.length-1]:es=null};function RP(wy,aA,PA,TA){if(wy.visible===!1)return;if(wy.layers.test(aA.layers)){if(wy.isGroup)PA=wy.renderOrder;else if(wy.isLOD)wy.autoUpdate===!0&&wy.update(aA);else if(wy.isLight)Ur.pushLight(wy),wy.castShadow&&Ur.pushShadow(wy);else if(wy.isSprite){if(!wy.frustumCulled||By.intersectsSprite(wy)){TA&&$A.setFromMatrixPosition(wy.matrixWorld).applyMatrix4(OA);const oE=Iy.update(wy),iC=wy.material;iC.visible&&es.push(wy,oE,iC,PA,$A.z,null)}}else if((wy.isMesh||wy.isLine||wy.isPoints)&&(!wy.frustumCulled||By.intersectsObject(wy))){const oE=Iy.update(wy),iC=wy.material;if(TA&&(wy.boundingSphere!==void 0?(wy.boundingSphere===null&&wy.computeBoundingSphere(),$A.copy(wy.boundingSphere.center)):(oE.boundingSphere===null&&oE.computeBoundingSphere(),$A.copy(oE.boundingSphere.center)),$A.applyMatrix4(wy.matrixWorld).applyMatrix4(OA)),Array.isArray(iC)){const aC=oE.groups;for(let hC=0,sC=aC.length;hC<sC;hC++){const NC=aC[hC],UC=iC[NC.materialIndex];UC&&UC.visible&&es.push(wy,oE,UC,PA,$A.z,NC)}}else iC.visible&&es.push(wy,oE,iC,PA,$A.z,null)}}const qA=wy.children;for(let oE=0,iC=qA.length;oE<iC;oE++)RP(qA[oE],aA,PA,TA)}function EP(wy,aA,PA,TA){const NA=wy.opaque,qA=wy.transmissive,oE=wy.transparent;Ur.setupLightsView(PA),lA===!0&&PC.setGlobalState(rs.clippingPlanes,PA),qA.length>0&&gP(NA,qA,aA,PA),TA&&sE.viewport(mo.copy(TA)),NA.length>0&&rP(NA,aA,PA),qA.length>0&&rP(qA,aA,PA),oE.length>0&&rP(oE,aA,PA),sE.buffers.depth.setTest(!0),sE.buffers.depth.setMask(!0),sE.buffers.color.setMask(!0),sE.setPolygonOffset(!1)}function gP(wy,aA,PA,TA){const NA=rE.isWebGL2;Fy===null&&(Fy=new WebGLRenderTarget(1,1,{generateMipmaps:!0,type:BA.has("EXT_color_buffer_half_float")?HalfFloatType:UnsignedByteType,minFilter:LinearMipmapLinearFilter,samples:NA?4:0})),rs.getDrawingBufferSize(UA),NA?Fy.setSize(UA.x,UA.y):Fy.setSize(floorPowerOfTwo(UA.x),floorPowerOfTwo(UA.y));const qA=rs.getRenderTarget();rs.setRenderTarget(Fy),rs.getClearColor(Zl),_d=rs.getClearAlpha(),_d<1&&rs.setClearColor(16777215,.5),rs.clear();const oE=rs.toneMapping;rs.toneMapping=NoToneMapping,rP(wy,PA,TA),VA.updateMultisampleRenderTarget(Fy),VA.updateRenderTargetMipmap(Fy);let iC=!1;for(let aC=0,hC=aA.length;aC<hC;aC++){const sC=aA[aC],NC=sC.object,UC=sC.geometry,FC=sC.material,LI=sC.group;if(FC.side===DoubleSide&&NC.layers.test(TA.layers)){const BI=FC.side;FC.side=BackSide,FC.needsUpdate=!0,cP(NC,PA,TA,UC,FC,LI),FC.side=BI,FC.needsUpdate=!0,iC=!0}}iC===!0&&(VA.updateMultisampleRenderTarget(Fy),VA.updateRenderTargetMipmap(Fy)),rs.setRenderTarget(qA),rs.setClearColor(Zl,_d),rs.toneMapping=oE}function rP(wy,aA,PA){const TA=aA.isScene===!0?aA.overrideMaterial:null;for(let NA=0,qA=wy.length;NA<qA;NA++){const oE=wy[NA],iC=oE.object,aC=oE.geometry,hC=TA===null?oE.material:TA,sC=oE.group;iC.layers.test(PA.layers)&&cP(iC,aA,PA,aC,hC,sC)}}function cP(wy,aA,PA,TA,NA,qA){wy.onBeforeRender(rs,aA,PA,TA,NA,qA),wy.modelViewMatrix.multiplyMatrices(PA.matrixWorldInverse,wy.matrixWorld),wy.normalMatrix.getNormalMatrix(wy.modelViewMatrix),NA.onBeforeRender(rs,aA,PA,TA,wy,qA),NA.transparent===!0&&NA.side===DoubleSide&&NA.forceSinglePass===!1?(NA.side=BackSide,NA.needsUpdate=!0,rs.renderBufferDirect(PA,aA,TA,NA,wy,qA),NA.side=FrontSide,NA.needsUpdate=!0,rs.renderBufferDirect(PA,aA,TA,NA,wy,qA),NA.side=DoubleSide):rs.renderBufferDirect(PA,aA,TA,NA,wy,qA),wy.onAfterRender(rs,aA,PA,TA,NA,qA)}function TI(wy,aA,PA){aA.isScene!==!0&&(aA=YA);const TA=HA.get(wy),NA=Ur.state.lights,qA=Ur.state.shadowsArray,oE=NA.state.version,iC=kA.getParameters(wy,NA.state,qA,aA,PA),aC=kA.getProgramCacheKey(iC);let hC=TA.programs;TA.environment=wy.isMeshStandardMaterial?aA.environment:null,TA.fog=aA.fog,TA.envMap=(wy.isMeshStandardMaterial?pC:oC).get(wy.envMap||TA.environment),hC===void 0&&(wy.addEventListener("dispose",uC),hC=new Map,TA.programs=hC);let sC=hC.get(aC);if(sC!==void 0){if(TA.currentProgram===sC&&TA.lightsStateVersion===oE)return kI(wy,iC),sC}else iC.uniforms=kA.getUniforms(wy),wy.onBuild(PA,iC,rs),wy.onBeforeCompile(iC,rs),sC=kA.acquireProgram(iC,aC),hC.set(aC,sC),TA.uniforms=iC.uniforms;const NC=TA.uniforms;(!wy.isShaderMaterial&&!wy.isRawShaderMaterial||wy.clipping===!0)&&(NC.clippingPlanes=PC.uniform),kI(wy,iC),TA.needsLights=CA(wy),TA.lightsStateVersion=oE,TA.needsLights&&(NC.ambientLightColor.value=NA.state.ambient,NC.lightProbe.value=NA.state.probe,NC.directionalLights.value=NA.state.directional,NC.directionalLightShadows.value=NA.state.directionalShadow,NC.spotLights.value=NA.state.spot,NC.spotLightShadows.value=NA.state.spotShadow,NC.rectAreaLights.value=NA.state.rectArea,NC.ltc_1.value=NA.state.rectAreaLTC1,NC.ltc_2.value=NA.state.rectAreaLTC2,NC.pointLights.value=NA.state.point,NC.pointLightShadows.value=NA.state.pointShadow,NC.hemisphereLights.value=NA.state.hemi,NC.directionalShadowMap.value=NA.state.directionalShadowMap,NC.directionalShadowMatrix.value=NA.state.directionalShadowMatrix,NC.spotShadowMap.value=NA.state.spotShadowMap,NC.spotLightMatrix.value=NA.state.spotLightMatrix,NC.spotLightMap.value=NA.state.spotLightMap,NC.pointShadowMap.value=NA.state.pointShadowMap,NC.pointShadowMatrix.value=NA.state.pointShadowMatrix);const UC=sC.getUniforms(),FC=WebGLUniforms.seqWithValue(UC.seq,NC);return TA.currentProgram=sC,TA.uniformsList=FC,sC}function kI(wy,aA){const PA=HA.get(wy);PA.outputColorSpace=aA.outputColorSpace,PA.instancing=aA.instancing,PA.instancingColor=aA.instancingColor,PA.skinning=aA.skinning,PA.morphTargets=aA.morphTargets,PA.morphNormals=aA.morphNormals,PA.morphColors=aA.morphColors,PA.morphTargetsCount=aA.morphTargetsCount,PA.numClippingPlanes=aA.numClippingPlanes,PA.numIntersection=aA.numClipIntersection,PA.vertexAlphas=aA.vertexAlphas,PA.vertexTangents=aA.vertexTangents,PA.toneMapping=aA.toneMapping}function HR(wy,aA,PA,TA,NA){aA.isScene!==!0&&(aA=YA),VA.resetTextureUnits();const qA=aA.fog,oE=TA.isMeshStandardMaterial?aA.environment:null,iC=zs===null?rs.outputColorSpace:zs.isXRRenderTarget===!0?zs.texture.colorSpace:LinearSRGBColorSpace$1,aC=(TA.isMeshStandardMaterial?pC:oC).get(TA.envMap||oE),hC=TA.vertexColors===!0&&!!PA.attributes.color&&PA.attributes.color.itemSize===4,sC=!!PA.attributes.tangent&&(!!TA.normalMap||TA.anisotropy>0),NC=!!PA.morphAttributes.position,UC=!!PA.morphAttributes.normal,FC=!!PA.morphAttributes.color;let LI=NoToneMapping;TA.toneMapped&&(zs===null||zs.isXRRenderTarget===!0)&&(LI=rs.toneMapping);const BI=PA.morphAttributes.position||PA.morphAttributes.normal||PA.morphAttributes.color,II=BI!==void 0?BI.length:0,BC=HA.get(TA),VI=Ur.state.lights;if(lA===!0&&(wA===!0||wy!==ga)){const UI=wy===ga&&TA.id===ho;PC.setState(TA,wy,UI)}let OI=!1;TA.version===BC.__version?(BC.needsLights&&BC.lightsStateVersion!==VI.state.version||BC.outputColorSpace!==iC||NA.isInstancedMesh&&BC.instancing===!1||!NA.isInstancedMesh&&BC.instancing===!0||NA.isSkinnedMesh&&BC.skinning===!1||!NA.isSkinnedMesh&&BC.skinning===!0||NA.isInstancedMesh&&BC.instancingColor===!0&&NA.instanceColor===null||NA.isInstancedMesh&&BC.instancingColor===!1&&NA.instanceColor!==null||BC.envMap!==aC||TA.fog===!0&&BC.fog!==qA||BC.numClippingPlanes!==void 0&&(BC.numClippingPlanes!==PC.numPlanes||BC.numIntersection!==PC.numIntersection)||BC.vertexAlphas!==hC||BC.vertexTangents!==sC||BC.morphTargets!==NC||BC.morphNormals!==UC||BC.morphColors!==FC||BC.toneMapping!==LI||rE.isWebGL2===!0&&BC.morphTargetsCount!==II)&&(OI=!0):(OI=!0,BC.__version=TA.version);let jI=BC.currentProgram;OI===!0&&(jI=TI(TA,aA,NA));let OR=!1,zI=!1,RR=!1;const WI=jI.getUniforms(),JI=BC.uniforms;if(sE.useProgram(jI.program)&&(OR=!0,zI=!0,RR=!0),TA.id!==ho&&(ho=TA.id,zI=!0),OR||ga!==wy){WI.setValue(bA,"projectionMatrix",wy.projectionMatrix),WI.setValue(bA,"viewMatrix",wy.matrixWorldInverse);const UI=WI.map.cameraPosition;UI!==void 0&&UI.setValue(bA,$A.setFromMatrixPosition(wy.matrixWorld)),rE.logarithmicDepthBuffer&&WI.setValue(bA,"logDepthBufFC",2/(Math.log(wy.far+1)/Math.LN2)),(TA.isMeshPhongMaterial||TA.isMeshToonMaterial||TA.isMeshLambertMaterial||TA.isMeshBasicMaterial||TA.isMeshStandardMaterial||TA.isShaderMaterial)&&WI.setValue(bA,"isOrthographic",wy.isOrthographicCamera===!0),ga!==wy&&(ga=wy,zI=!0,RR=!0)}if(NA.isSkinnedMesh){WI.setOptional(bA,NA,"bindMatrix"),WI.setOptional(bA,NA,"bindMatrixInverse");const UI=NA.skeleton;UI&&(rE.floatVertexTextures?(UI.boneTexture===null&&UI.computeBoneTexture(),WI.setValue(bA,"boneTexture",UI.boneTexture,VA),WI.setValue(bA,"boneTextureSize",UI.boneTextureSize)):console.warn("THREE.WebGLRenderer: SkinnedMesh can only be used with WebGL 2. With WebGL 1 OES_texture_float and vertex textures support is required."))}const zR=PA.morphAttributes;if((zR.position!==void 0||zR.normal!==void 0||zR.color!==void 0&&rE.isWebGL2===!0)&&KC.update(NA,PA,jI),(zI||BC.receiveShadow!==NA.receiveShadow)&&(BC.receiveShadow=NA.receiveShadow,WI.setValue(bA,"receiveShadow",NA.receiveShadow)),TA.isMeshGouraudMaterial&&TA.envMap!==null&&(JI.envMap.value=aC,JI.flipEnvMap.value=aC.isCubeTexture&&aC.isRenderTargetTexture===!1?-1:1),zI&&(WI.setValue(bA,"toneMappingExposure",rs.toneMappingExposure),BC.needsLights&&qR(JI,RR),qA&&TA.fog===!0&&nE.refreshFogUniforms(JI,qA),nE.refreshMaterialUniforms(JI,TA,by,yy,Fy),WebGLUniforms.upload(bA,BC.uniformsList,JI,VA)),TA.isShaderMaterial&&TA.uniformsNeedUpdate===!0&&(WebGLUniforms.upload(bA,BC.uniformsList,JI,VA),TA.uniformsNeedUpdate=!1),TA.isSpriteMaterial&&WI.setValue(bA,"center",NA.center),WI.setValue(bA,"modelViewMatrix",NA.modelViewMatrix),WI.setValue(bA,"normalMatrix",NA.normalMatrix),WI.setValue(bA,"modelMatrix",NA.matrixWorld),TA.isShaderMaterial||TA.isRawShaderMaterial){const UI=TA.uniformsGroups;for(let GR=0,NR=UI.length;GR<NR;GR++)if(rE.isWebGL2){const KI=UI[GR];ZC.update(KI,jI),ZC.bind(KI,jI)}else console.warn("THREE.WebGLRenderer: Uniform Buffer Objects can only be used with WebGL 2.")}return jI}function qR(wy,aA){wy.ambientLightColor.needsUpdate=aA,wy.lightProbe.needsUpdate=aA,wy.directionalLights.needsUpdate=aA,wy.directionalLightShadows.needsUpdate=aA,wy.pointLights.needsUpdate=aA,wy.pointLightShadows.needsUpdate=aA,wy.spotLights.needsUpdate=aA,wy.spotLightShadows.needsUpdate=aA,wy.rectAreaLights.needsUpdate=aA,wy.hemisphereLights.needsUpdate=aA}function CA(wy){return wy.isMeshLambertMaterial||wy.isMeshToonMaterial||wy.isMeshPhongMaterial||wy.isMeshStandardMaterial||wy.isShadowMaterial||wy.isShaderMaterial&&wy.lights===!0}this.getActiveCubeFace=function(){return os},this.getActiveMipmapLevel=function(){return ls},this.getRenderTarget=function(){return zs},this.setRenderTargetTextures=function(wy,aA,PA){HA.get(wy.texture).__webglTexture=aA,HA.get(wy.depthTexture).__webglTexture=PA;const TA=HA.get(wy);TA.__hasExternalTextures=!0,TA.__hasExternalTextures&&(TA.__autoAllocateDepthBuffer=PA===void 0,TA.__autoAllocateDepthBuffer||BA.has("WEBGL_multisampled_render_to_texture")===!0&&(console.warn("THREE.WebGLRenderer: Render-to-texture extension was disabled because an external texture was provided"),TA.__useRenderToTexture=!1))},this.setRenderTargetFramebuffer=function(wy,aA){const PA=HA.get(wy);PA.__webglFramebuffer=aA,PA.__useDefaultFramebuffer=aA===void 0},this.setRenderTarget=function(wy,aA=0,PA=0){zs=wy,os=aA,ls=PA;let TA=!0,NA=null,qA=!1,oE=!1;if(wy){const aC=HA.get(wy);aC.__useDefaultFramebuffer!==void 0?(sE.bindFramebuffer(bA.FRAMEBUFFER,null),TA=!1):aC.__webglFramebuffer===void 0?VA.setupRenderTarget(wy):aC.__hasExternalTextures&&VA.rebindTextures(wy,HA.get(wy.texture).__webglTexture,HA.get(wy.depthTexture).__webglTexture);const hC=wy.texture;(hC.isData3DTexture||hC.isDataArrayTexture||hC.isCompressedArrayTexture)&&(oE=!0);const sC=HA.get(wy).__webglFramebuffer;wy.isWebGLCubeRenderTarget?(Array.isArray(sC[aA])?NA=sC[aA][PA]:NA=sC[aA],qA=!0):rE.isWebGL2&&wy.samples>0&&VA.useMultisampledRTT(wy)===!1?NA=HA.get(wy).__webglMultisampledFramebuffer:Array.isArray(sC)?NA=sC[PA]:NA=sC,mo.copy(wy.viewport),go.copy(wy.scissor),yl=wy.scissorTest}else mo.copy(gy).multiplyScalar(by).floor(),go.copy(El).multiplyScalar(by).floor(),yl=My;if(sE.bindFramebuffer(bA.FRAMEBUFFER,NA)&&rE.drawBuffers&&TA&&sE.drawBuffers(wy,NA),sE.viewport(mo),sE.scissor(go),sE.setScissorTest(yl),qA){const aC=HA.get(wy.texture);bA.framebufferTexture2D(bA.FRAMEBUFFER,bA.COLOR_ATTACHMENT0,bA.TEXTURE_CUBE_MAP_POSITIVE_X+aA,aC.__webglTexture,PA)}else if(oE){const aC=HA.get(wy.texture),hC=aA||0;bA.framebufferTextureLayer(bA.FRAMEBUFFER,bA.COLOR_ATTACHMENT0,aC.__webglTexture,PA||0,hC)}ho=-1},this.readRenderTargetPixels=function(wy,aA,PA,TA,NA,qA,oE){if(!(wy&&wy.isWebGLRenderTarget)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");return}let iC=HA.get(wy).__webglFramebuffer;if(wy.isWebGLCubeRenderTarget&&oE!==void 0&&(iC=iC[oE]),iC){sE.bindFramebuffer(bA.FRAMEBUFFER,iC);try{const aC=wy.texture,hC=aC.format,sC=aC.type;if(hC!==RGBAFormat&&yI.convert(hC)!==bA.getParameter(bA.IMPLEMENTATION_COLOR_READ_FORMAT)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");return}const NC=sC===HalfFloatType&&(BA.has("EXT_color_buffer_half_float")||rE.isWebGL2&&BA.has("EXT_color_buffer_float"));if(sC!==UnsignedByteType&&yI.convert(sC)!==bA.getParameter(bA.IMPLEMENTATION_COLOR_READ_TYPE)&&!(sC===FloatType&&(rE.isWebGL2||BA.has("OES_texture_float")||BA.has("WEBGL_color_buffer_float")))&&!NC){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");return}aA>=0&&aA<=wy.width-TA&&PA>=0&&PA<=wy.height-NA&&bA.readPixels(aA,PA,TA,NA,yI.convert(hC),yI.convert(sC),qA)}finally{const aC=zs!==null?HA.get(zs).__webglFramebuffer:null;sE.bindFramebuffer(bA.FRAMEBUFFER,aC)}}},this.copyFramebufferToTexture=function(wy,aA,PA=0){const TA=Math.pow(2,-PA),NA=Math.floor(aA.image.width*TA),qA=Math.floor(aA.image.height*TA);VA.setTexture2D(aA,0),bA.copyTexSubImage2D(bA.TEXTURE_2D,PA,0,0,wy.x,wy.y,NA,qA),sE.unbindTexture()},this.copyTextureToTexture=function(wy,aA,PA,TA=0){const NA=aA.image.width,qA=aA.image.height,oE=yI.convert(PA.format),iC=yI.convert(PA.type);VA.setTexture2D(PA,0),bA.pixelStorei(bA.UNPACK_FLIP_Y_WEBGL,PA.flipY),bA.pixelStorei(bA.UNPACK_PREMULTIPLY_ALPHA_WEBGL,PA.premultiplyAlpha),bA.pixelStorei(bA.UNPACK_ALIGNMENT,PA.unpackAlignment),aA.isDataTexture?bA.texSubImage2D(bA.TEXTURE_2D,TA,wy.x,wy.y,NA,qA,oE,iC,aA.image.data):aA.isCompressedTexture?bA.compressedTexSubImage2D(bA.TEXTURE_2D,TA,wy.x,wy.y,aA.mipmaps[0].width,aA.mipmaps[0].height,oE,aA.mipmaps[0].data):bA.texSubImage2D(bA.TEXTURE_2D,TA,wy.x,wy.y,oE,iC,aA.image),TA===0&&PA.generateMipmaps&&bA.generateMipmap(bA.TEXTURE_2D),sE.unbindTexture()},this.copyTextureToTexture3D=function(wy,aA,PA,TA,NA=0){if(rs.isWebGL1Renderer){console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.");return}const qA=wy.max.x-wy.min.x+1,oE=wy.max.y-wy.min.y+1,iC=wy.max.z-wy.min.z+1,aC=yI.convert(TA.format),hC=yI.convert(TA.type);let sC;if(TA.isData3DTexture)VA.setTexture3D(TA,0),sC=bA.TEXTURE_3D;else if(TA.isDataArrayTexture)VA.setTexture2DArray(TA,0),sC=bA.TEXTURE_2D_ARRAY;else{console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.");return}bA.pixelStorei(bA.UNPACK_FLIP_Y_WEBGL,TA.flipY),bA.pixelStorei(bA.UNPACK_PREMULTIPLY_ALPHA_WEBGL,TA.premultiplyAlpha),bA.pixelStorei(bA.UNPACK_ALIGNMENT,TA.unpackAlignment);const NC=bA.getParameter(bA.UNPACK_ROW_LENGTH),UC=bA.getParameter(bA.UNPACK_IMAGE_HEIGHT),FC=bA.getParameter(bA.UNPACK_SKIP_PIXELS),LI=bA.getParameter(bA.UNPACK_SKIP_ROWS),BI=bA.getParameter(bA.UNPACK_SKIP_IMAGES),II=PA.isCompressedTexture?PA.mipmaps[0]:PA.image;bA.pixelStorei(bA.UNPACK_ROW_LENGTH,II.width),bA.pixelStorei(bA.UNPACK_IMAGE_HEIGHT,II.height),bA.pixelStorei(bA.UNPACK_SKIP_PIXELS,wy.min.x),bA.pixelStorei(bA.UNPACK_SKIP_ROWS,wy.min.y),bA.pixelStorei(bA.UNPACK_SKIP_IMAGES,wy.min.z),PA.isDataTexture||PA.isData3DTexture?bA.texSubImage3D(sC,NA,aA.x,aA.y,aA.z,qA,oE,iC,aC,hC,II.data):PA.isCompressedArrayTexture?(console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: untested support for compressed srcTexture."),bA.compressedTexSubImage3D(sC,NA,aA.x,aA.y,aA.z,qA,oE,iC,aC,II.data)):bA.texSubImage3D(sC,NA,aA.x,aA.y,aA.z,qA,oE,iC,aC,hC,II),bA.pixelStorei(bA.UNPACK_ROW_LENGTH,NC),bA.pixelStorei(bA.UNPACK_IMAGE_HEIGHT,UC),bA.pixelStorei(bA.UNPACK_SKIP_PIXELS,FC),bA.pixelStorei(bA.UNPACK_SKIP_ROWS,LI),bA.pixelStorei(bA.UNPACK_SKIP_IMAGES,BI),NA===0&&TA.generateMipmaps&&bA.generateMipmap(sC),sE.unbindTexture()},this.initTexture=function(wy){wy.isCubeTexture?VA.setTextureCube(wy,0):wy.isData3DTexture?VA.setTexture3D(wy,0):wy.isDataArrayTexture||wy.isCompressedArrayTexture?VA.setTexture2DArray(wy,0):VA.setTexture2D(wy,0),sE.unbindTexture()},this.resetState=function(){os=0,ls=0,zs=null,sE.reset(),LC.reset()},typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}get coordinateSystem(){return WebGLCoordinateSystem}get outputColorSpace(){return this._outputColorSpace}set outputColorSpace(s){this._outputColorSpace=s;const a=this.getContext();a.drawingBufferColorSpace=s===DisplayP3ColorSpace?"display-p3":"srgb",a.unpackColorSpace=ColorManagement.workingColorSpace===LinearDisplayP3ColorSpace?"display-p3":"srgb"}get physicallyCorrectLights(){return console.warn("THREE.WebGLRenderer: The property .physicallyCorrectLights has been removed. Set renderer.useLegacyLights instead."),!this.useLegacyLights}set physicallyCorrectLights(s){console.warn("THREE.WebGLRenderer: The property .physicallyCorrectLights has been removed. Set renderer.useLegacyLights instead."),this.useLegacyLights=!s}get outputEncoding(){return console.warn("THREE.WebGLRenderer: Property .outputEncoding has been removed. Use .outputColorSpace instead."),this.outputColorSpace===SRGBColorSpace$1?sRGBEncoding:LinearEncoding}set outputEncoding(s){console.warn("THREE.WebGLRenderer: Property .outputEncoding has been removed. Use .outputColorSpace instead."),this.outputColorSpace=s===sRGBEncoding?SRGBColorSpace$1:LinearSRGBColorSpace$1}get useLegacyLights(){return console.warn("THREE.WebGLRenderer: The property .useLegacyLights has been deprecated. Migrate your lighting according to the following guide: https://discourse.threejs.org/t/updates-to-lighting-in-three-js-r155/53733."),this._useLegacyLights}set useLegacyLights(s){console.warn("THREE.WebGLRenderer: The property .useLegacyLights has been deprecated. Migrate your lighting according to the following guide: https://discourse.threejs.org/t/updates-to-lighting-in-three-js-r155/53733."),this._useLegacyLights=s}}class WebGL1Renderer extends WebGLRenderer{}WebGL1Renderer.prototype.isWebGL1Renderer=!0;class FogExp2{constructor(s,a=25e-5){this.isFogExp2=!0,this.name="",this.color=new Color$1(s),this.density=a}clone(){return new FogExp2(this.color,this.density)}toJSON(){return{type:"FogExp2",name:this.name,color:this.color.getHex(),density:this.density}}}class Fog{constructor(s,a=1,b=1e3){this.isFog=!0,this.name="",this.color=new Color$1(s),this.near=a,this.far=b}clone(){return new Fog(this.color,this.near,this.far)}toJSON(){return{type:"Fog",name:this.name,color:this.color.getHex(),near:this.near,far:this.far}}}class Scene extends Object3D{constructor(){super(),this.isScene=!0,this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.backgroundBlurriness=0,this.backgroundIntensity=1,this.overrideMaterial=null,typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(s,a){return super.copy(s,a),s.background!==null&&(this.background=s.background.clone()),s.environment!==null&&(this.environment=s.environment.clone()),s.fog!==null&&(this.fog=s.fog.clone()),this.backgroundBlurriness=s.backgroundBlurriness,this.backgroundIntensity=s.backgroundIntensity,s.overrideMaterial!==null&&(this.overrideMaterial=s.overrideMaterial.clone()),this.matrixAutoUpdate=s.matrixAutoUpdate,this}toJSON(s){const a=super.toJSON(s);return this.fog!==null&&(a.object.fog=this.fog.toJSON()),this.backgroundBlurriness>0&&(a.object.backgroundBlurriness=this.backgroundBlurriness),this.backgroundIntensity!==1&&(a.object.backgroundIntensity=this.backgroundIntensity),a}}class InterleavedBuffer{constructor(s,a){this.isInterleavedBuffer=!0,this.array=s,this.stride=a,this.count=s!==void 0?s.length/a:0,this.usage=StaticDrawUsage,this.updateRange={offset:0,count:-1},this.version=0,this.uuid=generateUUID()}onUploadCallback(){}set needsUpdate(s){s===!0&&this.version++}setUsage(s){return this.usage=s,this}copy(s){return this.array=new s.array.constructor(s.array),this.count=s.count,this.stride=s.stride,this.usage=s.usage,this}copyAt(s,a,b){s*=this.stride,b*=a.stride;for(let _e=0,bt=this.stride;_e<bt;_e++)this.array[s+_e]=a.array[b+_e];return this}set(s,a=0){return this.array.set(s,a),this}clone(s){s.arrayBuffers===void 0&&(s.arrayBuffers={}),this.array.buffer._uuid===void 0&&(this.array.buffer._uuid=generateUUID()),s.arrayBuffers[this.array.buffer._uuid]===void 0&&(s.arrayBuffers[this.array.buffer._uuid]=this.array.slice(0).buffer);const a=new this.array.constructor(s.arrayBuffers[this.array.buffer._uuid]),b=new this.constructor(a,this.stride);return b.setUsage(this.usage),b}onUpload(s){return this.onUploadCallback=s,this}toJSON(s){return s.arrayBuffers===void 0&&(s.arrayBuffers={}),this.array.buffer._uuid===void 0&&(this.array.buffer._uuid=generateUUID()),s.arrayBuffers[this.array.buffer._uuid]===void 0&&(s.arrayBuffers[this.array.buffer._uuid]=Array.from(new Uint32Array(this.array.buffer))),{uuid:this.uuid,buffer:this.array.buffer._uuid,type:this.array.constructor.name,stride:this.stride}}}const _vector$5=new Vector3;class InterleavedBufferAttribute{constructor(s,a,b,_e=!1){this.isInterleavedBufferAttribute=!0,this.name="",this.data=s,this.itemSize=a,this.offset=b,this.normalized=_e}get count(){return this.data.count}get array(){return this.data.array}set needsUpdate(s){this.data.needsUpdate=s}applyMatrix4(s){for(let a=0,b=this.data.count;a<b;a++)_vector$5.fromBufferAttribute(this,a),_vector$5.applyMatrix4(s),this.setXYZ(a,_vector$5.x,_vector$5.y,_vector$5.z);return this}applyNormalMatrix(s){for(let a=0,b=this.count;a<b;a++)_vector$5.fromBufferAttribute(this,a),_vector$5.applyNormalMatrix(s),this.setXYZ(a,_vector$5.x,_vector$5.y,_vector$5.z);return this}transformDirection(s){for(let a=0,b=this.count;a<b;a++)_vector$5.fromBufferAttribute(this,a),_vector$5.transformDirection(s),this.setXYZ(a,_vector$5.x,_vector$5.y,_vector$5.z);return this}setX(s,a){return this.normalized&&(a=normalize(a,this.array)),this.data.array[s*this.data.stride+this.offset]=a,this}setY(s,a){return this.normalized&&(a=normalize(a,this.array)),this.data.array[s*this.data.stride+this.offset+1]=a,this}setZ(s,a){return this.normalized&&(a=normalize(a,this.array)),this.data.array[s*this.data.stride+this.offset+2]=a,this}setW(s,a){return this.normalized&&(a=normalize(a,this.array)),this.data.array[s*this.data.stride+this.offset+3]=a,this}getX(s){let a=this.data.array[s*this.data.stride+this.offset];return this.normalized&&(a=denormalize(a,this.array)),a}getY(s){let a=this.data.array[s*this.data.stride+this.offset+1];return this.normalized&&(a=denormalize(a,this.array)),a}getZ(s){let a=this.data.array[s*this.data.stride+this.offset+2];return this.normalized&&(a=denormalize(a,this.array)),a}getW(s){let a=this.data.array[s*this.data.stride+this.offset+3];return this.normalized&&(a=denormalize(a,this.array)),a}setXY(s,a,b){return s=s*this.data.stride+this.offset,this.normalized&&(a=normalize(a,this.array),b=normalize(b,this.array)),this.data.array[s+0]=a,this.data.array[s+1]=b,this}setXYZ(s,a,b,_e){return s=s*this.data.stride+this.offset,this.normalized&&(a=normalize(a,this.array),b=normalize(b,this.array),_e=normalize(_e,this.array)),this.data.array[s+0]=a,this.data.array[s+1]=b,this.data.array[s+2]=_e,this}setXYZW(s,a,b,_e,bt){return s=s*this.data.stride+this.offset,this.normalized&&(a=normalize(a,this.array),b=normalize(b,this.array),_e=normalize(_e,this.array),bt=normalize(bt,this.array)),this.data.array[s+0]=a,this.data.array[s+1]=b,this.data.array[s+2]=_e,this.data.array[s+3]=bt,this}clone(s){if(s===void 0){console.log("THREE.InterleavedBufferAttribute.clone(): Cloning an interleaved buffer attribute will de-interleave buffer data.");const a=[];for(let b=0;b<this.count;b++){const _e=b*this.data.stride+this.offset;for(let bt=0;bt<this.itemSize;bt++)a.push(this.data.array[_e+bt])}return new BufferAttribute(new this.array.constructor(a),this.itemSize,this.normalized)}else return s.interleavedBuffers===void 0&&(s.interleavedBuffers={}),s.interleavedBuffers[this.data.uuid]===void 0&&(s.interleavedBuffers[this.data.uuid]=this.data.clone(s)),new InterleavedBufferAttribute(s.interleavedBuffers[this.data.uuid],this.itemSize,this.offset,this.normalized)}toJSON(s){if(s===void 0){console.log("THREE.InterleavedBufferAttribute.toJSON(): Serializing an interleaved buffer attribute will de-interleave buffer data.");const a=[];for(let b=0;b<this.count;b++){const _e=b*this.data.stride+this.offset;for(let bt=0;bt<this.itemSize;bt++)a.push(this.data.array[_e+bt])}return{itemSize:this.itemSize,type:this.array.constructor.name,array:a,normalized:this.normalized}}else return s.interleavedBuffers===void 0&&(s.interleavedBuffers={}),s.interleavedBuffers[this.data.uuid]===void 0&&(s.interleavedBuffers[this.data.uuid]=this.data.toJSON(s)),{isInterleavedBufferAttribute:!0,itemSize:this.itemSize,data:this.data.uuid,offset:this.offset,normalized:this.normalized}}}class SpriteMaterial extends Material{constructor(s){super(),this.isSpriteMaterial=!0,this.type="SpriteMaterial",this.color=new Color$1(16777215),this.map=null,this.alphaMap=null,this.rotation=0,this.sizeAttenuation=!0,this.transparent=!0,this.fog=!0,this.setValues(s)}copy(s){return super.copy(s),this.color.copy(s.color),this.map=s.map,this.alphaMap=s.alphaMap,this.rotation=s.rotation,this.sizeAttenuation=s.sizeAttenuation,this.fog=s.fog,this}}let _geometry;const _intersectPoint=new Vector3,_worldScale=new Vector3,_mvPosition=new Vector3,_alignedPosition=new Vector2,_rotatedPosition=new Vector2,_viewWorldMatrix=new Matrix4,_vA=new Vector3,_vB=new Vector3,_vC=new Vector3,_uvA=new Vector2,_uvB=new Vector2,_uvC=new Vector2;class Sprite extends Object3D{constructor(s=new SpriteMaterial){if(super(),this.isSprite=!0,this.type="Sprite",_geometry===void 0){_geometry=new BufferGeometry;const a=new Float32Array([-.5,-.5,0,0,0,.5,-.5,0,1,0,.5,.5,0,1,1,-.5,.5,0,0,1]),b=new InterleavedBuffer(a,5);_geometry.setIndex([0,1,2,0,2,3]),_geometry.setAttribute("position",new InterleavedBufferAttribute(b,3,0,!1)),_geometry.setAttribute("uv",new InterleavedBufferAttribute(b,2,3,!1))}this.geometry=_geometry,this.material=s,this.center=new Vector2(.5,.5)}raycast(s,a){s.camera===null&&console.error('THREE.Sprite: "Raycaster.camera" needs to be set in order to raycast against sprites.'),_worldScale.setFromMatrixScale(this.matrixWorld),_viewWorldMatrix.copy(s.camera.matrixWorld),this.modelViewMatrix.multiplyMatrices(s.camera.matrixWorldInverse,this.matrixWorld),_mvPosition.setFromMatrixPosition(this.modelViewMatrix),s.camera.isPerspectiveCamera&&this.material.sizeAttenuation===!1&&_worldScale.multiplyScalar(-_mvPosition.z);const b=this.material.rotation;let _e,bt;b!==0&&(bt=Math.cos(b),_e=Math.sin(b));const rn=this.center;transformVertex(_vA.set(-.5,-.5,0),_mvPosition,rn,_worldScale,_e,bt),transformVertex(_vB.set(.5,-.5,0),_mvPosition,rn,_worldScale,_e,bt),transformVertex(_vC.set(.5,.5,0),_mvPosition,rn,_worldScale,_e,bt),_uvA.set(0,0),_uvB.set(1,0),_uvC.set(1,1);let sn=s.ray.intersectTriangle(_vA,_vB,_vC,!1,_intersectPoint);if(sn===null&&(transformVertex(_vB.set(-.5,.5,0),_mvPosition,rn,_worldScale,_e,bt),_uvB.set(0,1),sn=s.ray.intersectTriangle(_vA,_vC,_vB,!1,_intersectPoint),sn===null))return;const yn=s.ray.origin.distanceTo(_intersectPoint);yn<s.near||yn>s.far||a.push({distance:yn,point:_intersectPoint.clone(),uv:Triangle.getInterpolation(_intersectPoint,_vA,_vB,_vC,_uvA,_uvB,_uvC,new Vector2),face:null,object:this})}copy(s,a){return super.copy(s,a),s.center!==void 0&&this.center.copy(s.center),this.material=s.material,this}}function transformVertex(o,s,a,b,_e,bt){_alignedPosition.subVectors(o,a).addScalar(.5).multiply(b),_e!==void 0?(_rotatedPosition.x=bt*_alignedPosition.x-_e*_alignedPosition.y,_rotatedPosition.y=_e*_alignedPosition.x+bt*_alignedPosition.y):_rotatedPosition.copy(_alignedPosition),o.copy(s),o.x+=_rotatedPosition.x,o.y+=_rotatedPosition.y,o.applyMatrix4(_viewWorldMatrix)}const _v1$2=new Vector3,_v2$1=new Vector3;class LOD extends Object3D{constructor(){super(),this._currentLevel=0,this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]},isLOD:{value:!0}}),this.autoUpdate=!0}copy(s){super.copy(s,!1);const a=s.levels;for(let b=0,_e=a.length;b<_e;b++){const bt=a[b];this.addLevel(bt.object.clone(),bt.distance,bt.hysteresis)}return this.autoUpdate=s.autoUpdate,this}addLevel(s,a=0,b=0){a=Math.abs(a);const _e=this.levels;let bt;for(bt=0;bt<_e.length&&!(a<_e[bt].distance);bt++);return _e.splice(bt,0,{distance:a,hysteresis:b,object:s}),this.add(s),this}getCurrentLevel(){return this._currentLevel}getObjectForDistance(s){const a=this.levels;if(a.length>0){let b,_e;for(b=1,_e=a.length;b<_e;b++){let bt=a[b].distance;if(a[b].object.visible&&(bt-=bt*a[b].hysteresis),s<bt)break}return a[b-1].object}return null}raycast(s,a){if(this.levels.length>0){_v1$2.setFromMatrixPosition(this.matrixWorld);const _e=s.ray.origin.distanceTo(_v1$2);this.getObjectForDistance(_e).raycast(s,a)}}update(s){const a=this.levels;if(a.length>1){_v1$2.setFromMatrixPosition(s.matrixWorld),_v2$1.setFromMatrixPosition(this.matrixWorld);const b=_v1$2.distanceTo(_v2$1)/s.zoom;a[0].object.visible=!0;let _e,bt;for(_e=1,bt=a.length;_e<bt;_e++){let rn=a[_e].distance;if(a[_e].object.visible&&(rn-=rn*a[_e].hysteresis),b>=rn)a[_e-1].object.visible=!1,a[_e].object.visible=!0;else break}for(this._currentLevel=_e-1;_e<bt;_e++)a[_e].object.visible=!1}}toJSON(s){const a=super.toJSON(s);this.autoUpdate===!1&&(a.object.autoUpdate=!1),a.object.levels=[];const b=this.levels;for(let _e=0,bt=b.length;_e<bt;_e++){const rn=b[_e];a.object.levels.push({object:rn.object.uuid,distance:rn.distance,hysteresis:rn.hysteresis})}return a}}const _basePosition=new Vector3,_skinIndex=new Vector4,_skinWeight=new Vector4,_vector3=new Vector3,_matrix4=new Matrix4,_vertex=new Vector3,_sphere$3=new Sphere,_inverseMatrix$2=new Matrix4,_ray$2=new Ray;class SkinnedMesh extends Mesh{constructor(s,a){super(s,a),this.isSkinnedMesh=!0,this.type="SkinnedMesh",this.bindMode="attached",this.bindMatrix=new Matrix4,this.bindMatrixInverse=new Matrix4,this.boundingBox=null,this.boundingSphere=null}computeBoundingBox(){const s=this.geometry;this.boundingBox===null&&(this.boundingBox=new Box3),this.boundingBox.makeEmpty();const a=s.getAttribute("position");for(let b=0;b<a.count;b++)_vertex.fromBufferAttribute(a,b),this.applyBoneTransform(b,_vertex),this.boundingBox.expandByPoint(_vertex)}computeBoundingSphere(){const s=this.geometry;this.boundingSphere===null&&(this.boundingSphere=new Sphere),this.boundingSphere.makeEmpty();const a=s.getAttribute("position");for(let b=0;b<a.count;b++)_vertex.fromBufferAttribute(a,b),this.applyBoneTransform(b,_vertex),this.boundingSphere.expandByPoint(_vertex)}copy(s,a){return super.copy(s,a),this.bindMode=s.bindMode,this.bindMatrix.copy(s.bindMatrix),this.bindMatrixInverse.copy(s.bindMatrixInverse),this.skeleton=s.skeleton,s.boundingBox!==null&&(this.boundingBox=s.boundingBox.clone()),s.boundingSphere!==null&&(this.boundingSphere=s.boundingSphere.clone()),this}raycast(s,a){const b=this.material,_e=this.matrixWorld;b!==void 0&&(this.boundingSphere===null&&this.computeBoundingSphere(),_sphere$3.copy(this.boundingSphere),_sphere$3.applyMatrix4(_e),s.ray.intersectsSphere(_sphere$3)!==!1&&(_inverseMatrix$2.copy(_e).invert(),_ray$2.copy(s.ray).applyMatrix4(_inverseMatrix$2),!(this.boundingBox!==null&&_ray$2.intersectsBox(this.boundingBox)===!1)&&this._computeIntersections(s,a,_ray$2)))}getVertexPosition(s,a){return super.getVertexPosition(s,a),this.applyBoneTransform(s,a),a}bind(s,a){this.skeleton=s,a===void 0&&(this.updateMatrixWorld(!0),this.skeleton.calculateInverses(),a=this.matrixWorld),this.bindMatrix.copy(a),this.bindMatrixInverse.copy(a).invert()}pose(){this.skeleton.pose()}normalizeSkinWeights(){const s=new Vector4,a=this.geometry.attributes.skinWeight;for(let b=0,_e=a.count;b<_e;b++){s.fromBufferAttribute(a,b);const bt=1/s.manhattanLength();bt!==1/0?s.multiplyScalar(bt):s.set(1,0,0,0),a.setXYZW(b,s.x,s.y,s.z,s.w)}}updateMatrixWorld(s){super.updateMatrixWorld(s),this.bindMode==="attached"?this.bindMatrixInverse.copy(this.matrixWorld).invert():this.bindMode==="detached"?this.bindMatrixInverse.copy(this.bindMatrix).invert():console.warn("THREE.SkinnedMesh: Unrecognized bindMode: "+this.bindMode)}applyBoneTransform(s,a){const b=this.skeleton,_e=this.geometry;_skinIndex.fromBufferAttribute(_e.attributes.skinIndex,s),_skinWeight.fromBufferAttribute(_e.attributes.skinWeight,s),_basePosition.copy(a).applyMatrix4(this.bindMatrix),a.set(0,0,0);for(let bt=0;bt<4;bt++){const rn=_skinWeight.getComponent(bt);if(rn!==0){const sn=_skinIndex.getComponent(bt);_matrix4.multiplyMatrices(b.bones[sn].matrixWorld,b.boneInverses[sn]),a.addScaledVector(_vector3.copy(_basePosition).applyMatrix4(_matrix4),rn)}}return a.applyMatrix4(this.bindMatrixInverse)}boneTransform(s,a){return console.warn("THREE.SkinnedMesh: .boneTransform() was renamed to .applyBoneTransform() in r151."),this.applyBoneTransform(s,a)}}class Bone extends Object3D{constructor(){super(),this.isBone=!0,this.type="Bone"}}class DataTexture extends Texture{constructor(s=null,a=1,b=1,_e,bt,rn,sn,yn,Pn=NearestFilter,zn=NearestFilter,lr,ar){super(null,rn,sn,yn,Pn,zn,_e,bt,lr,ar),this.isDataTexture=!0,this.image={data:s,width:a,height:b},this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}}const _offsetMatrix=new Matrix4,_identityMatrix$1=new Matrix4;class Skeleton{constructor(s=[],a=[]){this.uuid=generateUUID(),this.bones=s.slice(0),this.boneInverses=a,this.boneMatrices=null,this.boneTexture=null,this.boneTextureSize=0,this.init()}init(){const s=this.bones,a=this.boneInverses;if(this.boneMatrices=new Float32Array(s.length*16),a.length===0)this.calculateInverses();else if(s.length!==a.length){console.warn("THREE.Skeleton: Number of inverse bone matrices does not match amount of bones."),this.boneInverses=[];for(let b=0,_e=this.bones.length;b<_e;b++)this.boneInverses.push(new Matrix4)}}calculateInverses(){this.boneInverses.length=0;for(let s=0,a=this.bones.length;s<a;s++){const b=new Matrix4;this.bones[s]&&b.copy(this.bones[s].matrixWorld).invert(),this.boneInverses.push(b)}}pose(){for(let s=0,a=this.bones.length;s<a;s++){const b=this.bones[s];b&&b.matrixWorld.copy(this.boneInverses[s]).invert()}for(let s=0,a=this.bones.length;s<a;s++){const b=this.bones[s];b&&(b.parent&&b.parent.isBone?(b.matrix.copy(b.parent.matrixWorld).invert(),b.matrix.multiply(b.matrixWorld)):b.matrix.copy(b.matrixWorld),b.matrix.decompose(b.position,b.quaternion,b.scale))}}update(){const s=this.bones,a=this.boneInverses,b=this.boneMatrices,_e=this.boneTexture;for(let bt=0,rn=s.length;bt<rn;bt++){const sn=s[bt]?s[bt].matrixWorld:_identityMatrix$1;_offsetMatrix.multiplyMatrices(sn,a[bt]),_offsetMatrix.toArray(b,bt*16)}_e!==null&&(_e.needsUpdate=!0)}clone(){return new Skeleton(this.bones,this.boneInverses)}computeBoneTexture(){let s=Math.sqrt(this.bones.length*4);s=ceilPowerOfTwo(s),s=Math.max(s,4);const a=new Float32Array(s*s*4);a.set(this.boneMatrices);const b=new DataTexture(a,s,s,RGBAFormat,FloatType);return b.needsUpdate=!0,this.boneMatrices=a,this.boneTexture=b,this.boneTextureSize=s,this}getBoneByName(s){for(let a=0,b=this.bones.length;a<b;a++){const _e=this.bones[a];if(_e.name===s)return _e}}dispose(){this.boneTexture!==null&&(this.boneTexture.dispose(),this.boneTexture=null)}fromJSON(s,a){this.uuid=s.uuid;for(let b=0,_e=s.bones.length;b<_e;b++){const bt=s.bones[b];let rn=a[bt];rn===void 0&&(console.warn("THREE.Skeleton: No bone found with UUID:",bt),rn=new Bone),this.bones.push(rn),this.boneInverses.push(new Matrix4().fromArray(s.boneInverses[b]))}return this.init(),this}toJSON(){const s={metadata:{version:4.6,type:"Skeleton",generator:"Skeleton.toJSON"},bones:[],boneInverses:[]};s.uuid=this.uuid;const a=this.bones,b=this.boneInverses;for(let _e=0,bt=a.length;_e<bt;_e++){const rn=a[_e];s.bones.push(rn.uuid);const sn=b[_e];s.boneInverses.push(sn.toArray())}return s}}class InstancedBufferAttribute extends BufferAttribute{constructor(s,a,b,_e=1){super(s,a,b),this.isInstancedBufferAttribute=!0,this.meshPerAttribute=_e}copy(s){return super.copy(s),this.meshPerAttribute=s.meshPerAttribute,this}toJSON(){const s=super.toJSON();return s.meshPerAttribute=this.meshPerAttribute,s.isInstancedBufferAttribute=!0,s}}const _instanceLocalMatrix=new Matrix4,_instanceWorldMatrix=new Matrix4,_instanceIntersects=[],_box3=new Box3,_identity=new Matrix4,_mesh=new Mesh,_sphere$2=new Sphere;class InstancedMesh extends Mesh{constructor(s,a,b){super(s,a),this.isInstancedMesh=!0,this.instanceMatrix=new InstancedBufferAttribute(new Float32Array(b*16),16),this.instanceColor=null,this.count=b,this.boundingBox=null,this.boundingSphere=null;for(let _e=0;_e<b;_e++)this.setMatrixAt(_e,_identity)}computeBoundingBox(){const s=this.geometry,a=this.count;this.boundingBox===null&&(this.boundingBox=new Box3),s.boundingBox===null&&s.computeBoundingBox(),this.boundingBox.makeEmpty();for(let b=0;b<a;b++)this.getMatrixAt(b,_instanceLocalMatrix),_box3.copy(s.boundingBox).applyMatrix4(_instanceLocalMatrix),this.boundingBox.union(_box3)}computeBoundingSphere(){const s=this.geometry,a=this.count;this.boundingSphere===null&&(this.boundingSphere=new Sphere),s.boundingSphere===null&&s.computeBoundingSphere(),this.boundingSphere.makeEmpty();for(let b=0;b<a;b++)this.getMatrixAt(b,_instanceLocalMatrix),_sphere$2.copy(s.boundingSphere).applyMatrix4(_instanceLocalMatrix),this.boundingSphere.union(_sphere$2)}copy(s,a){return super.copy(s,a),this.instanceMatrix.copy(s.instanceMatrix),s.instanceColor!==null&&(this.instanceColor=s.instanceColor.clone()),this.count=s.count,s.boundingBox!==null&&(this.boundingBox=s.boundingBox.clone()),s.boundingSphere!==null&&(this.boundingSphere=s.boundingSphere.clone()),this}getColorAt(s,a){a.fromArray(this.instanceColor.array,s*3)}getMatrixAt(s,a){a.fromArray(this.instanceMatrix.array,s*16)}raycast(s,a){const b=this.matrixWorld,_e=this.count;if(_mesh.geometry=this.geometry,_mesh.material=this.material,_mesh.material!==void 0&&(this.boundingSphere===null&&this.computeBoundingSphere(),_sphere$2.copy(this.boundingSphere),_sphere$2.applyMatrix4(b),s.ray.intersectsSphere(_sphere$2)!==!1))for(let bt=0;bt<_e;bt++){this.getMatrixAt(bt,_instanceLocalMatrix),_instanceWorldMatrix.multiplyMatrices(b,_instanceLocalMatrix),_mesh.matrixWorld=_instanceWorldMatrix,_mesh.raycast(s,_instanceIntersects);for(let rn=0,sn=_instanceIntersects.length;rn<sn;rn++){const yn=_instanceIntersects[rn];yn.instanceId=bt,yn.object=this,a.push(yn)}_instanceIntersects.length=0}}setColorAt(s,a){this.instanceColor===null&&(this.instanceColor=new InstancedBufferAttribute(new Float32Array(this.instanceMatrix.count*3),3)),a.toArray(this.instanceColor.array,s*3)}setMatrixAt(s,a){a.toArray(this.instanceMatrix.array,s*16)}updateMorphTargets(){}dispose(){this.dispatchEvent({type:"dispose"})}}class LineBasicMaterial extends Material{constructor(s){super(),this.isLineBasicMaterial=!0,this.type="LineBasicMaterial",this.color=new Color$1(16777215),this.map=null,this.linewidth=1,this.linecap="round",this.linejoin="round",this.fog=!0,this.setValues(s)}copy(s){return super.copy(s),this.color.copy(s.color),this.map=s.map,this.linewidth=s.linewidth,this.linecap=s.linecap,this.linejoin=s.linejoin,this.fog=s.fog,this}}const _start$1=new Vector3,_end$1=new Vector3,_inverseMatrix$1=new Matrix4,_ray$1=new Ray,_sphere$1=new Sphere;class Line extends Object3D{constructor(s=new BufferGeometry,a=new LineBasicMaterial){super(),this.isLine=!0,this.type="Line",this.geometry=s,this.material=a,this.updateMorphTargets()}copy(s,a){return super.copy(s,a),this.material=Array.isArray(s.material)?s.material.slice():s.material,this.geometry=s.geometry,this}computeLineDistances(){const s=this.geometry;if(s.index===null){const a=s.attributes.position,b=[0];for(let _e=1,bt=a.count;_e<bt;_e++)_start$1.fromBufferAttribute(a,_e-1),_end$1.fromBufferAttribute(a,_e),b[_e]=b[_e-1],b[_e]+=_start$1.distanceTo(_end$1);s.setAttribute("lineDistance",new Float32BufferAttribute(b,1))}else console.warn("THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.");return this}raycast(s,a){const b=this.geometry,_e=this.matrixWorld,bt=s.params.Line.threshold,rn=b.drawRange;if(b.boundingSphere===null&&b.computeBoundingSphere(),_sphere$1.copy(b.boundingSphere),_sphere$1.applyMatrix4(_e),_sphere$1.radius+=bt,s.ray.intersectsSphere(_sphere$1)===!1)return;_inverseMatrix$1.copy(_e).invert(),_ray$1.copy(s.ray).applyMatrix4(_inverseMatrix$1);const sn=bt/((this.scale.x+this.scale.y+this.scale.z)/3),yn=sn*sn,Pn=new Vector3,zn=new Vector3,lr=new Vector3,ar=new Vector3,cr=this.isLineSegments?2:1,hr=b.index,Ur=b.attributes.position;if(hr!==null){const Dr=Math.max(0,rn.start),zr=Math.min(hr.count,rn.start+rn.count);for(let rs=Dr,as=zr-1;rs<as;rs+=cr){const os=hr.getX(rs),ls=hr.getX(rs+1);if(Pn.fromBufferAttribute(Ur,os),zn.fromBufferAttribute(Ur,ls),_ray$1.distanceSqToSegment(Pn,zn,ar,lr)>yn)continue;ar.applyMatrix4(this.matrixWorld);const ho=s.ray.origin.distanceTo(ar);ho<s.near||ho>s.far||a.push({distance:ho,point:lr.clone().applyMatrix4(this.matrixWorld),index:rs,face:null,faceIndex:null,object:this})}}else{const Dr=Math.max(0,rn.start),zr=Math.min(Ur.count,rn.start+rn.count);for(let rs=Dr,as=zr-1;rs<as;rs+=cr){if(Pn.fromBufferAttribute(Ur,rs),zn.fromBufferAttribute(Ur,rs+1),_ray$1.distanceSqToSegment(Pn,zn,ar,lr)>yn)continue;ar.applyMatrix4(this.matrixWorld);const ls=s.ray.origin.distanceTo(ar);ls<s.near||ls>s.far||a.push({distance:ls,point:lr.clone().applyMatrix4(this.matrixWorld),index:rs,face:null,faceIndex:null,object:this})}}}updateMorphTargets(){const a=this.geometry.morphAttributes,b=Object.keys(a);if(b.length>0){const _e=a[b[0]];if(_e!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let bt=0,rn=_e.length;bt<rn;bt++){const sn=_e[bt].name||String(bt);this.morphTargetInfluences.push(0),this.morphTargetDictionary[sn]=bt}}}}}const _start=new Vector3,_end=new Vector3;class LineSegments extends Line{constructor(s,a){super(s,a),this.isLineSegments=!0,this.type="LineSegments"}computeLineDistances(){const s=this.geometry;if(s.index===null){const a=s.attributes.position,b=[];for(let _e=0,bt=a.count;_e<bt;_e+=2)_start.fromBufferAttribute(a,_e),_end.fromBufferAttribute(a,_e+1),b[_e]=_e===0?0:b[_e-1],b[_e+1]=b[_e]+_start.distanceTo(_end);s.setAttribute("lineDistance",new Float32BufferAttribute(b,1))}else console.warn("THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.");return this}}class LineLoop extends Line{constructor(s,a){super(s,a),this.isLineLoop=!0,this.type="LineLoop"}}class PointsMaterial extends Material{constructor(s){super(),this.isPointsMaterial=!0,this.type="PointsMaterial",this.color=new Color$1(16777215),this.map=null,this.alphaMap=null,this.size=1,this.sizeAttenuation=!0,this.fog=!0,this.setValues(s)}copy(s){return super.copy(s),this.color.copy(s.color),this.map=s.map,this.alphaMap=s.alphaMap,this.size=s.size,this.sizeAttenuation=s.sizeAttenuation,this.fog=s.fog,this}}const _inverseMatrix=new Matrix4,_ray=new Ray,_sphere$6=new Sphere,_position$2=new Vector3;class Points extends Object3D{constructor(s=new BufferGeometry,a=new PointsMaterial){super(),this.isPoints=!0,this.type="Points",this.geometry=s,this.material=a,this.updateMorphTargets()}copy(s,a){return super.copy(s,a),this.material=Array.isArray(s.material)?s.material.slice():s.material,this.geometry=s.geometry,this}raycast(s,a){const b=this.geometry,_e=this.matrixWorld,bt=s.params.Points.threshold,rn=b.drawRange;if(b.boundingSphere===null&&b.computeBoundingSphere(),_sphere$6.copy(b.boundingSphere),_sphere$6.applyMatrix4(_e),_sphere$6.radius+=bt,s.ray.intersectsSphere(_sphere$6)===!1)return;_inverseMatrix.copy(_e).invert(),_ray.copy(s.ray).applyMatrix4(_inverseMatrix);const sn=bt/((this.scale.x+this.scale.y+this.scale.z)/3),yn=sn*sn,Pn=b.index,lr=b.attributes.position;if(Pn!==null){const ar=Math.max(0,rn.start),cr=Math.min(Pn.count,rn.start+rn.count);for(let hr=ar,es=cr;hr<es;hr++){const Ur=Pn.getX(hr);_position$2.fromBufferAttribute(lr,Ur),testPoint(_position$2,Ur,yn,_e,s,a,this)}}else{const ar=Math.max(0,rn.start),cr=Math.min(lr.count,rn.start+rn.count);for(let hr=ar,es=cr;hr<es;hr++)_position$2.fromBufferAttribute(lr,hr),testPoint(_position$2,hr,yn,_e,s,a,this)}}updateMorphTargets(){const a=this.geometry.morphAttributes,b=Object.keys(a);if(b.length>0){const _e=a[b[0]];if(_e!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let bt=0,rn=_e.length;bt<rn;bt++){const sn=_e[bt].name||String(bt);this.morphTargetInfluences.push(0),this.morphTargetDictionary[sn]=bt}}}}}function testPoint(o,s,a,b,_e,bt,rn){const sn=_ray.distanceSqToPoint(o);if(sn<a){const yn=new Vector3;_ray.closestPointToPoint(o,yn),yn.applyMatrix4(b);const Pn=_e.ray.origin.distanceTo(yn);if(Pn<_e.near||Pn>_e.far)return;bt.push({distance:Pn,distanceToRay:Math.sqrt(sn),point:yn,index:s,face:null,object:rn})}}class VideoTexture extends Texture{constructor(s,a,b,_e,bt,rn,sn,yn,Pn){super(s,a,b,_e,bt,rn,sn,yn,Pn),this.isVideoTexture=!0,this.minFilter=rn!==void 0?rn:LinearFilter,this.magFilter=bt!==void 0?bt:LinearFilter,this.generateMipmaps=!1;const zn=this;function lr(){zn.needsUpdate=!0,s.requestVideoFrameCallback(lr)}"requestVideoFrameCallback"in s&&s.requestVideoFrameCallback(lr)}clone(){return new this.constructor(this.image).copy(this)}update(){const s=this.image;"requestVideoFrameCallback"in s===!1&&s.readyState>=s.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}}class FramebufferTexture extends Texture{constructor(s,a){super({width:s,height:a}),this.isFramebufferTexture=!0,this.magFilter=NearestFilter,this.minFilter=NearestFilter,this.generateMipmaps=!1,this.needsUpdate=!0}}class CompressedTexture extends Texture{constructor(s,a,b,_e,bt,rn,sn,yn,Pn,zn,lr,ar){super(null,rn,sn,yn,Pn,zn,_e,bt,lr,ar),this.isCompressedTexture=!0,this.image={width:a,height:b},this.mipmaps=s,this.flipY=!1,this.generateMipmaps=!1}}class CompressedArrayTexture extends CompressedTexture{constructor(s,a,b,_e,bt,rn){super(s,a,b,bt,rn),this.isCompressedArrayTexture=!0,this.image.depth=_e,this.wrapR=ClampToEdgeWrapping}}class CompressedCubeTexture extends CompressedTexture{constructor(s,a,b){super(void 0,s[0].width,s[0].height,a,b,CubeReflectionMapping),this.isCompressedCubeTexture=!0,this.isCubeTexture=!0,this.image=s}}class CanvasTexture extends Texture{constructor(s,a,b,_e,bt,rn,sn,yn,Pn){super(s,a,b,_e,bt,rn,sn,yn,Pn),this.isCanvasTexture=!0,this.needsUpdate=!0}}class Curve{constructor(){this.type="Curve",this.arcLengthDivisions=200}getPoint(){return console.warn("THREE.Curve: .getPoint() not implemented."),null}getPointAt(s,a){const b=this.getUtoTmapping(s);return this.getPoint(b,a)}getPoints(s=5){const a=[];for(let b=0;b<=s;b++)a.push(this.getPoint(b/s));return a}getSpacedPoints(s=5){const a=[];for(let b=0;b<=s;b++)a.push(this.getPointAt(b/s));return a}getLength(){const s=this.getLengths();return s[s.length-1]}getLengths(s=this.arcLengthDivisions){if(this.cacheArcLengths&&this.cacheArcLengths.length===s+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;const a=[];let b,_e=this.getPoint(0),bt=0;a.push(0);for(let rn=1;rn<=s;rn++)b=this.getPoint(rn/s),bt+=b.distanceTo(_e),a.push(bt),_e=b;return this.cacheArcLengths=a,a}updateArcLengths(){this.needsUpdate=!0,this.getLengths()}getUtoTmapping(s,a){const b=this.getLengths();let _e=0;const bt=b.length;let rn;a?rn=a:rn=s*b[bt-1];let sn=0,yn=bt-1,Pn;for(;sn<=yn;)if(_e=Math.floor(sn+(yn-sn)/2),Pn=b[_e]-rn,Pn<0)sn=_e+1;else if(Pn>0)yn=_e-1;else{yn=_e;break}if(_e=yn,b[_e]===rn)return _e/(bt-1);const zn=b[_e],ar=b[_e+1]-zn,cr=(rn-zn)/ar;return(_e+cr)/(bt-1)}getTangent(s,a){let _e=s-1e-4,bt=s+1e-4;_e<0&&(_e=0),bt>1&&(bt=1);const rn=this.getPoint(_e),sn=this.getPoint(bt),yn=a||(rn.isVector2?new Vector2:new Vector3);return yn.copy(sn).sub(rn).normalize(),yn}getTangentAt(s,a){const b=this.getUtoTmapping(s);return this.getTangent(b,a)}computeFrenetFrames(s,a){const b=new Vector3,_e=[],bt=[],rn=[],sn=new Vector3,yn=new Matrix4;for(let cr=0;cr<=s;cr++){const hr=cr/s;_e[cr]=this.getTangentAt(hr,new Vector3)}bt[0]=new Vector3,rn[0]=new Vector3;let Pn=Number.MAX_VALUE;const zn=Math.abs(_e[0].x),lr=Math.abs(_e[0].y),ar=Math.abs(_e[0].z);zn<=Pn&&(Pn=zn,b.set(1,0,0)),lr<=Pn&&(Pn=lr,b.set(0,1,0)),ar<=Pn&&b.set(0,0,1),sn.crossVectors(_e[0],b).normalize(),bt[0].crossVectors(_e[0],sn),rn[0].crossVectors(_e[0],bt[0]);for(let cr=1;cr<=s;cr++){if(bt[cr]=bt[cr-1].clone(),rn[cr]=rn[cr-1].clone(),sn.crossVectors(_e[cr-1],_e[cr]),sn.length()>Number.EPSILON){sn.normalize();const hr=Math.acos(clamp$2(_e[cr-1].dot(_e[cr]),-1,1));bt[cr].applyMatrix4(yn.makeRotationAxis(sn,hr))}rn[cr].crossVectors(_e[cr],bt[cr])}if(a===!0){let cr=Math.acos(clamp$2(bt[0].dot(bt[s]),-1,1));cr/=s,_e[0].dot(sn.crossVectors(bt[0],bt[s]))>0&&(cr=-cr);for(let hr=1;hr<=s;hr++)bt[hr].applyMatrix4(yn.makeRotationAxis(_e[hr],cr*hr)),rn[hr].crossVectors(_e[hr],bt[hr])}return{tangents:_e,normals:bt,binormals:rn}}clone(){return new this.constructor().copy(this)}copy(s){return this.arcLengthDivisions=s.arcLengthDivisions,this}toJSON(){const s={metadata:{version:4.6,type:"Curve",generator:"Curve.toJSON"}};return s.arcLengthDivisions=this.arcLengthDivisions,s.type=this.type,s}fromJSON(s){return this.arcLengthDivisions=s.arcLengthDivisions,this}}class EllipseCurve extends Curve{constructor(s=0,a=0,b=1,_e=1,bt=0,rn=Math.PI*2,sn=!1,yn=0){super(),this.isEllipseCurve=!0,this.type="EllipseCurve",this.aX=s,this.aY=a,this.xRadius=b,this.yRadius=_e,this.aStartAngle=bt,this.aEndAngle=rn,this.aClockwise=sn,this.aRotation=yn}getPoint(s,a){const b=a||new Vector2,_e=Math.PI*2;let bt=this.aEndAngle-this.aStartAngle;const rn=Math.abs(bt)<Number.EPSILON;for(;bt<0;)bt+=_e;for(;bt>_e;)bt-=_e;bt<Number.EPSILON&&(rn?bt=0:bt=_e),this.aClockwise===!0&&!rn&&(bt===_e?bt=-_e:bt=bt-_e);const sn=this.aStartAngle+s*bt;let yn=this.aX+this.xRadius*Math.cos(sn),Pn=this.aY+this.yRadius*Math.sin(sn);if(this.aRotation!==0){const zn=Math.cos(this.aRotation),lr=Math.sin(this.aRotation),ar=yn-this.aX,cr=Pn-this.aY;yn=ar*zn-cr*lr+this.aX,Pn=ar*lr+cr*zn+this.aY}return b.set(yn,Pn)}copy(s){return super.copy(s),this.aX=s.aX,this.aY=s.aY,this.xRadius=s.xRadius,this.yRadius=s.yRadius,this.aStartAngle=s.aStartAngle,this.aEndAngle=s.aEndAngle,this.aClockwise=s.aClockwise,this.aRotation=s.aRotation,this}toJSON(){const s=super.toJSON();return s.aX=this.aX,s.aY=this.aY,s.xRadius=this.xRadius,s.yRadius=this.yRadius,s.aStartAngle=this.aStartAngle,s.aEndAngle=this.aEndAngle,s.aClockwise=this.aClockwise,s.aRotation=this.aRotation,s}fromJSON(s){return super.fromJSON(s),this.aX=s.aX,this.aY=s.aY,this.xRadius=s.xRadius,this.yRadius=s.yRadius,this.aStartAngle=s.aStartAngle,this.aEndAngle=s.aEndAngle,this.aClockwise=s.aClockwise,this.aRotation=s.aRotation,this}}class ArcCurve extends EllipseCurve{constructor(s,a,b,_e,bt,rn){super(s,a,b,b,_e,bt,rn),this.isArcCurve=!0,this.type="ArcCurve"}}function CubicPoly(){let o=0,s=0,a=0,b=0;function _e(bt,rn,sn,yn){o=bt,s=sn,a=-3*bt+3*rn-2*sn-yn,b=2*bt-2*rn+sn+yn}return{initCatmullRom:function(bt,rn,sn,yn,Pn){_e(rn,sn,Pn*(sn-bt),Pn*(yn-rn))},initNonuniformCatmullRom:function(bt,rn,sn,yn,Pn,zn,lr){let ar=(rn-bt)/Pn-(sn-bt)/(Pn+zn)+(sn-rn)/zn,cr=(sn-rn)/zn-(yn-rn)/(zn+lr)+(yn-sn)/lr;ar*=zn,cr*=zn,_e(rn,sn,ar,cr)},calc:function(bt){const rn=bt*bt,sn=rn*bt;return o+s*bt+a*rn+b*sn}}}const tmp=new Vector3,px=new CubicPoly,py=new CubicPoly,pz=new CubicPoly;class CatmullRomCurve3 extends Curve{constructor(s=[],a=!1,b="centripetal",_e=.5){super(),this.isCatmullRomCurve3=!0,this.type="CatmullRomCurve3",this.points=s,this.closed=a,this.curveType=b,this.tension=_e}getPoint(s,a=new Vector3){const b=a,_e=this.points,bt=_e.length,rn=(bt-(this.closed?0:1))*s;let sn=Math.floor(rn),yn=rn-sn;this.closed?sn+=sn>0?0:(Math.floor(Math.abs(sn)/bt)+1)*bt:yn===0&&sn===bt-1&&(sn=bt-2,yn=1);let Pn,zn;this.closed||sn>0?Pn=_e[(sn-1)%bt]:(tmp.subVectors(_e[0],_e[1]).add(_e[0]),Pn=tmp);const lr=_e[sn%bt],ar=_e[(sn+1)%bt];if(this.closed||sn+2<bt?zn=_e[(sn+2)%bt]:(tmp.subVectors(_e[bt-1],_e[bt-2]).add(_e[bt-1]),zn=tmp),this.curveType==="centripetal"||this.curveType==="chordal"){const cr=this.curveType==="chordal"?.5:.25;let hr=Math.pow(Pn.distanceToSquared(lr),cr),es=Math.pow(lr.distanceToSquared(ar),cr),Ur=Math.pow(ar.distanceToSquared(zn),cr);es<1e-4&&(es=1),hr<1e-4&&(hr=es),Ur<1e-4&&(Ur=es),px.initNonuniformCatmullRom(Pn.x,lr.x,ar.x,zn.x,hr,es,Ur),py.initNonuniformCatmullRom(Pn.y,lr.y,ar.y,zn.y,hr,es,Ur),pz.initNonuniformCatmullRom(Pn.z,lr.z,ar.z,zn.z,hr,es,Ur)}else this.curveType==="catmullrom"&&(px.initCatmullRom(Pn.x,lr.x,ar.x,zn.x,this.tension),py.initCatmullRom(Pn.y,lr.y,ar.y,zn.y,this.tension),pz.initCatmullRom(Pn.z,lr.z,ar.z,zn.z,this.tension));return b.set(px.calc(yn),py.calc(yn),pz.calc(yn)),b}copy(s){super.copy(s),this.points=[];for(let a=0,b=s.points.length;a<b;a++){const _e=s.points[a];this.points.push(_e.clone())}return this.closed=s.closed,this.curveType=s.curveType,this.tension=s.tension,this}toJSON(){const s=super.toJSON();s.points=[];for(let a=0,b=this.points.length;a<b;a++){const _e=this.points[a];s.points.push(_e.toArray())}return s.closed=this.closed,s.curveType=this.curveType,s.tension=this.tension,s}fromJSON(s){super.fromJSON(s),this.points=[];for(let a=0,b=s.points.length;a<b;a++){const _e=s.points[a];this.points.push(new Vector3().fromArray(_e))}return this.closed=s.closed,this.curveType=s.curveType,this.tension=s.tension,this}}function CatmullRom(o,s,a,b,_e){const bt=(b-s)*.5,rn=(_e-a)*.5,sn=o*o,yn=o*sn;return(2*a-2*b+bt+rn)*yn+(-3*a+3*b-2*bt-rn)*sn+bt*o+a}function QuadraticBezierP0(o,s){const a=1-o;return a*a*s}function QuadraticBezierP1(o,s){return 2*(1-o)*o*s}function QuadraticBezierP2(o,s){return o*o*s}function QuadraticBezier(o,s,a,b){return QuadraticBezierP0(o,s)+QuadraticBezierP1(o,a)+QuadraticBezierP2(o,b)}function CubicBezierP0(o,s){const a=1-o;return a*a*a*s}function CubicBezierP1(o,s){const a=1-o;return 3*a*a*o*s}function CubicBezierP2(o,s){return 3*(1-o)*o*o*s}function CubicBezierP3(o,s){return o*o*o*s}function CubicBezier(o,s,a,b,_e){return CubicBezierP0(o,s)+CubicBezierP1(o,a)+CubicBezierP2(o,b)+CubicBezierP3(o,_e)}class CubicBezierCurve extends Curve{constructor(s=new Vector2,a=new Vector2,b=new Vector2,_e=new Vector2){super(),this.isCubicBezierCurve=!0,this.type="CubicBezierCurve",this.v0=s,this.v1=a,this.v2=b,this.v3=_e}getPoint(s,a=new Vector2){const b=a,_e=this.v0,bt=this.v1,rn=this.v2,sn=this.v3;return b.set(CubicBezier(s,_e.x,bt.x,rn.x,sn.x),CubicBezier(s,_e.y,bt.y,rn.y,sn.y)),b}copy(s){return super.copy(s),this.v0.copy(s.v0),this.v1.copy(s.v1),this.v2.copy(s.v2),this.v3.copy(s.v3),this}toJSON(){const s=super.toJSON();return s.v0=this.v0.toArray(),s.v1=this.v1.toArray(),s.v2=this.v2.toArray(),s.v3=this.v3.toArray(),s}fromJSON(s){return super.fromJSON(s),this.v0.fromArray(s.v0),this.v1.fromArray(s.v1),this.v2.fromArray(s.v2),this.v3.fromArray(s.v3),this}}class CubicBezierCurve3 extends Curve{constructor(s=new Vector3,a=new Vector3,b=new Vector3,_e=new Vector3){super(),this.isCubicBezierCurve3=!0,this.type="CubicBezierCurve3",this.v0=s,this.v1=a,this.v2=b,this.v3=_e}getPoint(s,a=new Vector3){const b=a,_e=this.v0,bt=this.v1,rn=this.v2,sn=this.v3;return b.set(CubicBezier(s,_e.x,bt.x,rn.x,sn.x),CubicBezier(s,_e.y,bt.y,rn.y,sn.y),CubicBezier(s,_e.z,bt.z,rn.z,sn.z)),b}copy(s){return super.copy(s),this.v0.copy(s.v0),this.v1.copy(s.v1),this.v2.copy(s.v2),this.v3.copy(s.v3),this}toJSON(){const s=super.toJSON();return s.v0=this.v0.toArray(),s.v1=this.v1.toArray(),s.v2=this.v2.toArray(),s.v3=this.v3.toArray(),s}fromJSON(s){return super.fromJSON(s),this.v0.fromArray(s.v0),this.v1.fromArray(s.v1),this.v2.fromArray(s.v2),this.v3.fromArray(s.v3),this}}class LineCurve extends Curve{constructor(s=new Vector2,a=new Vector2){super(),this.isLineCurve=!0,this.type="LineCurve",this.v1=s,this.v2=a}getPoint(s,a=new Vector2){const b=a;return s===1?b.copy(this.v2):(b.copy(this.v2).sub(this.v1),b.multiplyScalar(s).add(this.v1)),b}getPointAt(s,a){return this.getPoint(s,a)}getTangent(s,a=new Vector2){return a.subVectors(this.v2,this.v1).normalize()}getTangentAt(s,a){return this.getTangent(s,a)}copy(s){return super.copy(s),this.v1.copy(s.v1),this.v2.copy(s.v2),this}toJSON(){const s=super.toJSON();return s.v1=this.v1.toArray(),s.v2=this.v2.toArray(),s}fromJSON(s){return super.fromJSON(s),this.v1.fromArray(s.v1),this.v2.fromArray(s.v2),this}}class LineCurve3 extends Curve{constructor(s=new Vector3,a=new Vector3){super(),this.isLineCurve3=!0,this.type="LineCurve3",this.v1=s,this.v2=a}getPoint(s,a=new Vector3){const b=a;return s===1?b.copy(this.v2):(b.copy(this.v2).sub(this.v1),b.multiplyScalar(s).add(this.v1)),b}getPointAt(s,a){return this.getPoint(s,a)}getTangent(s,a=new Vector3){return a.subVectors(this.v2,this.v1).normalize()}getTangentAt(s,a){return this.getTangent(s,a)}copy(s){return super.copy(s),this.v1.copy(s.v1),this.v2.copy(s.v2),this}toJSON(){const s=super.toJSON();return s.v1=this.v1.toArray(),s.v2=this.v2.toArray(),s}fromJSON(s){return super.fromJSON(s),this.v1.fromArray(s.v1),this.v2.fromArray(s.v2),this}}class QuadraticBezierCurve extends Curve{constructor(s=new Vector2,a=new Vector2,b=new Vector2){super(),this.isQuadraticBezierCurve=!0,this.type="QuadraticBezierCurve",this.v0=s,this.v1=a,this.v2=b}getPoint(s,a=new Vector2){const b=a,_e=this.v0,bt=this.v1,rn=this.v2;return b.set(QuadraticBezier(s,_e.x,bt.x,rn.x),QuadraticBezier(s,_e.y,bt.y,rn.y)),b}copy(s){return super.copy(s),this.v0.copy(s.v0),this.v1.copy(s.v1),this.v2.copy(s.v2),this}toJSON(){const s=super.toJSON();return s.v0=this.v0.toArray(),s.v1=this.v1.toArray(),s.v2=this.v2.toArray(),s}fromJSON(s){return super.fromJSON(s),this.v0.fromArray(s.v0),this.v1.fromArray(s.v1),this.v2.fromArray(s.v2),this}}class QuadraticBezierCurve3 extends Curve{constructor(s=new Vector3,a=new Vector3,b=new Vector3){super(),this.isQuadraticBezierCurve3=!0,this.type="QuadraticBezierCurve3",this.v0=s,this.v1=a,this.v2=b}getPoint(s,a=new Vector3){const b=a,_e=this.v0,bt=this.v1,rn=this.v2;return b.set(QuadraticBezier(s,_e.x,bt.x,rn.x),QuadraticBezier(s,_e.y,bt.y,rn.y),QuadraticBezier(s,_e.z,bt.z,rn.z)),b}copy(s){return super.copy(s),this.v0.copy(s.v0),this.v1.copy(s.v1),this.v2.copy(s.v2),this}toJSON(){const s=super.toJSON();return s.v0=this.v0.toArray(),s.v1=this.v1.toArray(),s.v2=this.v2.toArray(),s}fromJSON(s){return super.fromJSON(s),this.v0.fromArray(s.v0),this.v1.fromArray(s.v1),this.v2.fromArray(s.v2),this}}class SplineCurve extends Curve{constructor(s=[]){super(),this.isSplineCurve=!0,this.type="SplineCurve",this.points=s}getPoint(s,a=new Vector2){const b=a,_e=this.points,bt=(_e.length-1)*s,rn=Math.floor(bt),sn=bt-rn,yn=_e[rn===0?rn:rn-1],Pn=_e[rn],zn=_e[rn>_e.length-2?_e.length-1:rn+1],lr=_e[rn>_e.length-3?_e.length-1:rn+2];return b.set(CatmullRom(sn,yn.x,Pn.x,zn.x,lr.x),CatmullRom(sn,yn.y,Pn.y,zn.y,lr.y)),b}copy(s){super.copy(s),this.points=[];for(let a=0,b=s.points.length;a<b;a++){const _e=s.points[a];this.points.push(_e.clone())}return this}toJSON(){const s=super.toJSON();s.points=[];for(let a=0,b=this.points.length;a<b;a++){const _e=this.points[a];s.points.push(_e.toArray())}return s}fromJSON(s){super.fromJSON(s),this.points=[];for(let a=0,b=s.points.length;a<b;a++){const _e=s.points[a];this.points.push(new Vector2().fromArray(_e))}return this}}var Curves=Object.freeze({__proto__:null,ArcCurve,CatmullRomCurve3,CubicBezierCurve,CubicBezierCurve3,EllipseCurve,LineCurve,LineCurve3,QuadraticBezierCurve,QuadraticBezierCurve3,SplineCurve});class CurvePath extends Curve{constructor(){super(),this.type="CurvePath",this.curves=[],this.autoClose=!1}add(s){this.curves.push(s)}closePath(){const s=this.curves[0].getPoint(0),a=this.curves[this.curves.length-1].getPoint(1);if(!s.equals(a)){const b=s.isVector2===!0?"LineCurve":"LineCurve3";this.curves.push(new Curves[b](a,s))}return this}getPoint(s,a){const b=s*this.getLength(),_e=this.getCurveLengths();let bt=0;for(;bt<_e.length;){if(_e[bt]>=b){const rn=_e[bt]-b,sn=this.curves[bt],yn=sn.getLength(),Pn=yn===0?0:1-rn/yn;return sn.getPointAt(Pn,a)}bt++}return null}getLength(){const s=this.getCurveLengths();return s[s.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;const s=[];let a=0;for(let b=0,_e=this.curves.length;b<_e;b++)a+=this.curves[b].getLength(),s.push(a);return this.cacheLengths=s,s}getSpacedPoints(s=40){const a=[];for(let b=0;b<=s;b++)a.push(this.getPoint(b/s));return this.autoClose&&a.push(a[0]),a}getPoints(s=12){const a=[];let b;for(let _e=0,bt=this.curves;_e<bt.length;_e++){const rn=bt[_e],sn=rn.isEllipseCurve?s*2:rn.isLineCurve||rn.isLineCurve3?1:rn.isSplineCurve?s*rn.points.length:s,yn=rn.getPoints(sn);for(let Pn=0;Pn<yn.length;Pn++){const zn=yn[Pn];b&&b.equals(zn)||(a.push(zn),b=zn)}}return this.autoClose&&a.length>1&&!a[a.length-1].equals(a[0])&&a.push(a[0]),a}copy(s){super.copy(s),this.curves=[];for(let a=0,b=s.curves.length;a<b;a++){const _e=s.curves[a];this.curves.push(_e.clone())}return this.autoClose=s.autoClose,this}toJSON(){const s=super.toJSON();s.autoClose=this.autoClose,s.curves=[];for(let a=0,b=this.curves.length;a<b;a++){const _e=this.curves[a];s.curves.push(_e.toJSON())}return s}fromJSON(s){super.fromJSON(s),this.autoClose=s.autoClose,this.curves=[];for(let a=0,b=s.curves.length;a<b;a++){const _e=s.curves[a];this.curves.push(new Curves[_e.type]().fromJSON(_e))}return this}}class Path extends CurvePath{constructor(s){super(),this.type="Path",this.currentPoint=new Vector2,s&&this.setFromPoints(s)}setFromPoints(s){this.moveTo(s[0].x,s[0].y);for(let a=1,b=s.length;a<b;a++)this.lineTo(s[a].x,s[a].y);return this}moveTo(s,a){return this.currentPoint.set(s,a),this}lineTo(s,a){const b=new LineCurve(this.currentPoint.clone(),new Vector2(s,a));return this.curves.push(b),this.currentPoint.set(s,a),this}quadraticCurveTo(s,a,b,_e){const bt=new QuadraticBezierCurve(this.currentPoint.clone(),new Vector2(s,a),new Vector2(b,_e));return this.curves.push(bt),this.currentPoint.set(b,_e),this}bezierCurveTo(s,a,b,_e,bt,rn){const sn=new CubicBezierCurve(this.currentPoint.clone(),new Vector2(s,a),new Vector2(b,_e),new Vector2(bt,rn));return this.curves.push(sn),this.currentPoint.set(bt,rn),this}splineThru(s){const a=[this.currentPoint.clone()].concat(s),b=new SplineCurve(a);return this.curves.push(b),this.currentPoint.copy(s[s.length-1]),this}arc(s,a,b,_e,bt,rn){const sn=this.currentPoint.x,yn=this.currentPoint.y;return this.absarc(s+sn,a+yn,b,_e,bt,rn),this}absarc(s,a,b,_e,bt,rn){return this.absellipse(s,a,b,b,_e,bt,rn),this}ellipse(s,a,b,_e,bt,rn,sn,yn){const Pn=this.currentPoint.x,zn=this.currentPoint.y;return this.absellipse(s+Pn,a+zn,b,_e,bt,rn,sn,yn),this}absellipse(s,a,b,_e,bt,rn,sn,yn){const Pn=new EllipseCurve(s,a,b,_e,bt,rn,sn,yn);if(this.curves.length>0){const lr=Pn.getPoint(0);lr.equals(this.currentPoint)||this.lineTo(lr.x,lr.y)}this.curves.push(Pn);const zn=Pn.getPoint(1);return this.currentPoint.copy(zn),this}copy(s){return super.copy(s),this.currentPoint.copy(s.currentPoint),this}toJSON(){const s=super.toJSON();return s.currentPoint=this.currentPoint.toArray(),s}fromJSON(s){return super.fromJSON(s),this.currentPoint.fromArray(s.currentPoint),this}}class LatheGeometry extends BufferGeometry{constructor(s=[new Vector2(0,-.5),new Vector2(.5,0),new Vector2(0,.5)],a=12,b=0,_e=Math.PI*2){super(),this.type="LatheGeometry",this.parameters={points:s,segments:a,phiStart:b,phiLength:_e},a=Math.floor(a),_e=clamp$2(_e,0,Math.PI*2);const bt=[],rn=[],sn=[],yn=[],Pn=[],zn=1/a,lr=new Vector3,ar=new Vector2,cr=new Vector3,hr=new Vector3,es=new Vector3;let Ur=0,Dr=0;for(let zr=0;zr<=s.length-1;zr++)switch(zr){case 0:Ur=s[zr+1].x-s[zr].x,Dr=s[zr+1].y-s[zr].y,cr.x=Dr*1,cr.y=-Ur,cr.z=Dr*0,es.copy(cr),cr.normalize(),yn.push(cr.x,cr.y,cr.z);break;case s.length-1:yn.push(es.x,es.y,es.z);break;default:Ur=s[zr+1].x-s[zr].x,Dr=s[zr+1].y-s[zr].y,cr.x=Dr*1,cr.y=-Ur,cr.z=Dr*0,hr.copy(cr),cr.x+=es.x,cr.y+=es.y,cr.z+=es.z,cr.normalize(),yn.push(cr.x,cr.y,cr.z),es.copy(hr)}for(let zr=0;zr<=a;zr++){const rs=b+zr*zn*_e,as=Math.sin(rs),os=Math.cos(rs);for(let ls=0;ls<=s.length-1;ls++){lr.x=s[ls].x*as,lr.y=s[ls].y,lr.z=s[ls].x*os,rn.push(lr.x,lr.y,lr.z),ar.x=zr/a,ar.y=ls/(s.length-1),sn.push(ar.x,ar.y);const zs=yn[3*ls+0]*as,ho=yn[3*ls+1],ga=yn[3*ls+0]*os;Pn.push(zs,ho,ga)}}for(let zr=0;zr<a;zr++)for(let rs=0;rs<s.length-1;rs++){const as=rs+zr*s.length,os=as,ls=as+s.length,zs=as+s.length+1,ho=as+1;bt.push(os,ls,ho),bt.push(zs,ho,ls)}this.setIndex(bt),this.setAttribute("position",new Float32BufferAttribute(rn,3)),this.setAttribute("uv",new Float32BufferAttribute(sn,2)),this.setAttribute("normal",new Float32BufferAttribute(Pn,3))}copy(s){return super.copy(s),this.parameters=Object.assign({},s.parameters),this}static fromJSON(s){return new LatheGeometry(s.points,s.segments,s.phiStart,s.phiLength)}}class CapsuleGeometry extends LatheGeometry{constructor(s=1,a=1,b=4,_e=8){const bt=new Path;bt.absarc(0,-a/2,s,Math.PI*1.5,0),bt.absarc(0,a/2,s,0,Math.PI*.5),super(bt.getPoints(b),_e),this.type="CapsuleGeometry",this.parameters={radius:s,length:a,capSegments:b,radialSegments:_e}}static fromJSON(s){return new CapsuleGeometry(s.radius,s.length,s.capSegments,s.radialSegments)}}class CircleGeometry extends BufferGeometry{constructor(s=1,a=32,b=0,_e=Math.PI*2){super(),this.type="CircleGeometry",this.parameters={radius:s,segments:a,thetaStart:b,thetaLength:_e},a=Math.max(3,a);const bt=[],rn=[],sn=[],yn=[],Pn=new Vector3,zn=new Vector2;rn.push(0,0,0),sn.push(0,0,1),yn.push(.5,.5);for(let lr=0,ar=3;lr<=a;lr++,ar+=3){const cr=b+lr/a*_e;Pn.x=s*Math.cos(cr),Pn.y=s*Math.sin(cr),rn.push(Pn.x,Pn.y,Pn.z),sn.push(0,0,1),zn.x=(rn[ar]/s+1)/2,zn.y=(rn[ar+1]/s+1)/2,yn.push(zn.x,zn.y)}for(let lr=1;lr<=a;lr++)bt.push(lr,lr+1,0);this.setIndex(bt),this.setAttribute("position",new Float32BufferAttribute(rn,3)),this.setAttribute("normal",new Float32BufferAttribute(sn,3)),this.setAttribute("uv",new Float32BufferAttribute(yn,2))}copy(s){return super.copy(s),this.parameters=Object.assign({},s.parameters),this}static fromJSON(s){return new CircleGeometry(s.radius,s.segments,s.thetaStart,s.thetaLength)}}class CylinderGeometry extends BufferGeometry{constructor(s=1,a=1,b=1,_e=32,bt=1,rn=!1,sn=0,yn=Math.PI*2){super(),this.type="CylinderGeometry",this.parameters={radiusTop:s,radiusBottom:a,height:b,radialSegments:_e,heightSegments:bt,openEnded:rn,thetaStart:sn,thetaLength:yn};const Pn=this;_e=Math.floor(_e),bt=Math.floor(bt);const zn=[],lr=[],ar=[],cr=[];let hr=0;const es=[],Ur=b/2;let Dr=0;zr(),rn===!1&&(s>0&&rs(!0),a>0&&rs(!1)),this.setIndex(zn),this.setAttribute("position",new Float32BufferAttribute(lr,3)),this.setAttribute("normal",new Float32BufferAttribute(ar,3)),this.setAttribute("uv",new Float32BufferAttribute(cr,2));function zr(){const as=new Vector3,os=new Vector3;let ls=0;const zs=(a-s)/b;for(let ho=0;ho<=bt;ho++){const ga=[],mo=ho/bt,go=mo*(a-s)+s;for(let yl=0;yl<=_e;yl++){const Zl=yl/_e,_d=Zl*yn+sn,Ty=Math.sin(_d),yy=Math.cos(_d);os.x=go*Ty,os.y=-mo*b+Ur,os.z=go*yy,lr.push(os.x,os.y,os.z),as.set(Ty,zs,yy).normalize(),ar.push(as.x,as.y,as.z),cr.push(Zl,1-mo),ga.push(hr++)}es.push(ga)}for(let ho=0;ho<_e;ho++)for(let ga=0;ga<bt;ga++){const mo=es[ga][ho],go=es[ga+1][ho],yl=es[ga+1][ho+1],Zl=es[ga][ho+1];zn.push(mo,go,Zl),zn.push(go,yl,Zl),ls+=6}Pn.addGroup(Dr,ls,0),Dr+=ls}function rs(as){const os=hr,ls=new Vector2,zs=new Vector3;let ho=0;const ga=as===!0?s:a,mo=as===!0?1:-1;for(let yl=1;yl<=_e;yl++)lr.push(0,Ur*mo,0),ar.push(0,mo,0),cr.push(.5,.5),hr++;const go=hr;for(let yl=0;yl<=_e;yl++){const _d=yl/_e*yn+sn,Ty=Math.cos(_d),yy=Math.sin(_d);zs.x=ga*yy,zs.y=Ur*mo,zs.z=ga*Ty,lr.push(zs.x,zs.y,zs.z),ar.push(0,mo,0),ls.x=Ty*.5+.5,ls.y=yy*.5*mo+.5,cr.push(ls.x,ls.y),hr++}for(let yl=0;yl<_e;yl++){const Zl=os+yl,_d=go+yl;as===!0?zn.push(_d,_d+1,Zl):zn.push(_d+1,_d,Zl),ho+=3}Pn.addGroup(Dr,ho,as===!0?1:2),Dr+=ho}}copy(s){return super.copy(s),this.parameters=Object.assign({},s.parameters),this}static fromJSON(s){return new CylinderGeometry(s.radiusTop,s.radiusBottom,s.height,s.radialSegments,s.heightSegments,s.openEnded,s.thetaStart,s.thetaLength)}}class ConeGeometry extends CylinderGeometry{constructor(s=1,a=1,b=32,_e=1,bt=!1,rn=0,sn=Math.PI*2){super(0,s,a,b,_e,bt,rn,sn),this.type="ConeGeometry",this.parameters={radius:s,height:a,radialSegments:b,heightSegments:_e,openEnded:bt,thetaStart:rn,thetaLength:sn}}static fromJSON(s){return new ConeGeometry(s.radius,s.height,s.radialSegments,s.heightSegments,s.openEnded,s.thetaStart,s.thetaLength)}}class PolyhedronGeometry extends BufferGeometry{constructor(s=[],a=[],b=1,_e=0){super(),this.type="PolyhedronGeometry",this.parameters={vertices:s,indices:a,radius:b,detail:_e};const bt=[],rn=[];sn(_e),Pn(b),zn(),this.setAttribute("position",new Float32BufferAttribute(bt,3)),this.setAttribute("normal",new Float32BufferAttribute(bt.slice(),3)),this.setAttribute("uv",new Float32BufferAttribute(rn,2)),_e===0?this.computeVertexNormals():this.normalizeNormals();function sn(zr){const rs=new Vector3,as=new Vector3,os=new Vector3;for(let ls=0;ls<a.length;ls+=3)cr(a[ls+0],rs),cr(a[ls+1],as),cr(a[ls+2],os),yn(rs,as,os,zr)}function yn(zr,rs,as,os){const ls=os+1,zs=[];for(let ho=0;ho<=ls;ho++){zs[ho]=[];const ga=zr.clone().lerp(as,ho/ls),mo=rs.clone().lerp(as,ho/ls),go=ls-ho;for(let yl=0;yl<=go;yl++)yl===0&&ho===ls?zs[ho][yl]=ga:zs[ho][yl]=ga.clone().lerp(mo,yl/go)}for(let ho=0;ho<ls;ho++)for(let ga=0;ga<2*(ls-ho)-1;ga++){const mo=Math.floor(ga/2);ga%2===0?(ar(zs[ho][mo+1]),ar(zs[ho+1][mo]),ar(zs[ho][mo])):(ar(zs[ho][mo+1]),ar(zs[ho+1][mo+1]),ar(zs[ho+1][mo]))}}function Pn(zr){const rs=new Vector3;for(let as=0;as<bt.length;as+=3)rs.x=bt[as+0],rs.y=bt[as+1],rs.z=bt[as+2],rs.normalize().multiplyScalar(zr),bt[as+0]=rs.x,bt[as+1]=rs.y,bt[as+2]=rs.z}function zn(){const zr=new Vector3;for(let rs=0;rs<bt.length;rs+=3){zr.x=bt[rs+0],zr.y=bt[rs+1],zr.z=bt[rs+2];const as=Ur(zr)/2/Math.PI+.5,os=Dr(zr)/Math.PI+.5;rn.push(as,1-os)}hr(),lr()}function lr(){for(let zr=0;zr<rn.length;zr+=6){const rs=rn[zr+0],as=rn[zr+2],os=rn[zr+4],ls=Math.max(rs,as,os),zs=Math.min(rs,as,os);ls>.9&&zs<.1&&(rs<.2&&(rn[zr+0]+=1),as<.2&&(rn[zr+2]+=1),os<.2&&(rn[zr+4]+=1))}}function ar(zr){bt.push(zr.x,zr.y,zr.z)}function cr(zr,rs){const as=zr*3;rs.x=s[as+0],rs.y=s[as+1],rs.z=s[as+2]}function hr(){const zr=new Vector3,rs=new Vector3,as=new Vector3,os=new Vector3,ls=new Vector2,zs=new Vector2,ho=new Vector2;for(let ga=0,mo=0;ga<bt.length;ga+=9,mo+=6){zr.set(bt[ga+0],bt[ga+1],bt[ga+2]),rs.set(bt[ga+3],bt[ga+4],bt[ga+5]),as.set(bt[ga+6],bt[ga+7],bt[ga+8]),ls.set(rn[mo+0],rn[mo+1]),zs.set(rn[mo+2],rn[mo+3]),ho.set(rn[mo+4],rn[mo+5]),os.copy(zr).add(rs).add(as).divideScalar(3);const go=Ur(os);es(ls,mo+0,zr,go),es(zs,mo+2,rs,go),es(ho,mo+4,as,go)}}function es(zr,rs,as,os){os<0&&zr.x===1&&(rn[rs]=zr.x-1),as.x===0&&as.z===0&&(rn[rs]=os/2/Math.PI+.5)}function Ur(zr){return Math.atan2(zr.z,-zr.x)}function Dr(zr){return Math.atan2(-zr.y,Math.sqrt(zr.x*zr.x+zr.z*zr.z))}}copy(s){return super.copy(s),this.parameters=Object.assign({},s.parameters),this}static fromJSON(s){return new PolyhedronGeometry(s.vertices,s.indices,s.radius,s.details)}}class DodecahedronGeometry extends PolyhedronGeometry{constructor(s=1,a=0){const b=(1+Math.sqrt(5))/2,_e=1/b,bt=[-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-_e,-b,0,-_e,b,0,_e,-b,0,_e,b,-_e,-b,0,-_e,b,0,_e,-b,0,_e,b,0,-b,0,-_e,b,0,-_e,-b,0,_e,b,0,_e],rn=[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9];super(bt,rn,s,a),this.type="DodecahedronGeometry",this.parameters={radius:s,detail:a}}static fromJSON(s){return new DodecahedronGeometry(s.radius,s.detail)}}const _v0=new Vector3,_v1$1=new Vector3,_normal=new Vector3,_triangle=new Triangle;class EdgesGeometry extends BufferGeometry{constructor(s=null,a=1){if(super(),this.type="EdgesGeometry",this.parameters={geometry:s,thresholdAngle:a},s!==null){const _e=Math.pow(10,4),bt=Math.cos(DEG2RAD$1*a),rn=s.getIndex(),sn=s.getAttribute("position"),yn=rn?rn.count:sn.count,Pn=[0,0,0],zn=["a","b","c"],lr=new Array(3),ar={},cr=[];for(let hr=0;hr<yn;hr+=3){rn?(Pn[0]=rn.getX(hr),Pn[1]=rn.getX(hr+1),Pn[2]=rn.getX(hr+2)):(Pn[0]=hr,Pn[1]=hr+1,Pn[2]=hr+2);const{a:es,b:Ur,c:Dr}=_triangle;if(es.fromBufferAttribute(sn,Pn[0]),Ur.fromBufferAttribute(sn,Pn[1]),Dr.fromBufferAttribute(sn,Pn[2]),_triangle.getNormal(_normal),lr[0]=`${Math.round(es.x*_e)},${Math.round(es.y*_e)},${Math.round(es.z*_e)}`,lr[1]=`${Math.round(Ur.x*_e)},${Math.round(Ur.y*_e)},${Math.round(Ur.z*_e)}`,lr[2]=`${Math.round(Dr.x*_e)},${Math.round(Dr.y*_e)},${Math.round(Dr.z*_e)}`,!(lr[0]===lr[1]||lr[1]===lr[2]||lr[2]===lr[0]))for(let zr=0;zr<3;zr++){const rs=(zr+1)%3,as=lr[zr],os=lr[rs],ls=_triangle[zn[zr]],zs=_triangle[zn[rs]],ho=`${as}_${os}`,ga=`${os}_${as}`;ga in ar&&ar[ga]?(_normal.dot(ar[ga].normal)<=bt&&(cr.push(ls.x,ls.y,ls.z),cr.push(zs.x,zs.y,zs.z)),ar[ga]=null):ho in ar||(ar[ho]={index0:Pn[zr],index1:Pn[rs],normal:_normal.clone()})}}for(const hr in ar)if(ar[hr]){const{index0:es,index1:Ur}=ar[hr];_v0.fromBufferAttribute(sn,es),_v1$1.fromBufferAttribute(sn,Ur),cr.push(_v0.x,_v0.y,_v0.z),cr.push(_v1$1.x,_v1$1.y,_v1$1.z)}this.setAttribute("position",new Float32BufferAttribute(cr,3))}}copy(s){return super.copy(s),this.parameters=Object.assign({},s.parameters),this}}class Shape extends Path{constructor(s){super(s),this.uuid=generateUUID(),this.type="Shape",this.holes=[]}getPointsHoles(s){const a=[];for(let b=0,_e=this.holes.length;b<_e;b++)a[b]=this.holes[b].getPoints(s);return a}extractPoints(s){return{shape:this.getPoints(s),holes:this.getPointsHoles(s)}}copy(s){super.copy(s),this.holes=[];for(let a=0,b=s.holes.length;a<b;a++){const _e=s.holes[a];this.holes.push(_e.clone())}return this}toJSON(){const s=super.toJSON();s.uuid=this.uuid,s.holes=[];for(let a=0,b=this.holes.length;a<b;a++){const _e=this.holes[a];s.holes.push(_e.toJSON())}return s}fromJSON(s){super.fromJSON(s),this.uuid=s.uuid,this.holes=[];for(let a=0,b=s.holes.length;a<b;a++){const _e=s.holes[a];this.holes.push(new Path().fromJSON(_e))}return this}}const Earcut={triangulate:function(o,s,a=2){const b=s&&s.length,_e=b?s[0]*a:o.length;let bt=linkedList(o,0,_e,a,!0);const rn=[];if(!bt||bt.next===bt.prev)return rn;let sn,yn,Pn,zn,lr,ar,cr;if(b&&(bt=eliminateHoles(o,s,bt,a)),o.length>80*a){sn=Pn=o[0],yn=zn=o[1];for(let hr=a;hr<_e;hr+=a)lr=o[hr],ar=o[hr+1],lr<sn&&(sn=lr),ar<yn&&(yn=ar),lr>Pn&&(Pn=lr),ar>zn&&(zn=ar);cr=Math.max(Pn-sn,zn-yn),cr=cr!==0?32767/cr:0}return earcutLinked(bt,rn,a,sn,yn,cr,0),rn}};function linkedList(o,s,a,b,_e){let bt,rn;if(_e===signedArea(o,s,a,b)>0)for(bt=s;bt<a;bt+=b)rn=insertNode(bt,o[bt],o[bt+1],rn);else for(bt=a-b;bt>=s;bt-=b)rn=insertNode(bt,o[bt],o[bt+1],rn);return rn&&equals(rn,rn.next)&&(removeNode(rn),rn=rn.next),rn}function filterPoints(o,s){if(!o)return o;s||(s=o);let a=o,b;do if(b=!1,!a.steiner&&(equals(a,a.next)||area$1(a.prev,a,a.next)===0)){if(removeNode(a),a=s=a.prev,a===a.next)break;b=!0}else a=a.next;while(b||a!==s);return s}function earcutLinked(o,s,a,b,_e,bt,rn){if(!o)return;!rn&&bt&&indexCurve(o,b,_e,bt);let sn=o,yn,Pn;for(;o.prev!==o.next;){if(yn=o.prev,Pn=o.next,bt?isEarHashed(o,b,_e,bt):isEar(o)){s.push(yn.i/a|0),s.push(o.i/a|0),s.push(Pn.i/a|0),removeNode(o),o=Pn.next,sn=Pn.next;continue}if(o=Pn,o===sn){rn?rn===1?(o=cureLocalIntersections(filterPoints(o),s,a),earcutLinked(o,s,a,b,_e,bt,2)):rn===2&&splitEarcut(o,s,a,b,_e,bt):earcutLinked(filterPoints(o),s,a,b,_e,bt,1);break}}}function isEar(o){const s=o.prev,a=o,b=o.next;if(area$1(s,a,b)>=0)return!1;const _e=s.x,bt=a.x,rn=b.x,sn=s.y,yn=a.y,Pn=b.y,zn=_e<bt?_e<rn?_e:rn:bt<rn?bt:rn,lr=sn<yn?sn<Pn?sn:Pn:yn<Pn?yn:Pn,ar=_e>bt?_e>rn?_e:rn:bt>rn?bt:rn,cr=sn>yn?sn>Pn?sn:Pn:yn>Pn?yn:Pn;let hr=b.next;for(;hr!==s;){if(hr.x>=zn&&hr.x<=ar&&hr.y>=lr&&hr.y<=cr&&pointInTriangle(_e,sn,bt,yn,rn,Pn,hr.x,hr.y)&&area$1(hr.prev,hr,hr.next)>=0)return!1;hr=hr.next}return!0}function isEarHashed(o,s,a,b){const _e=o.prev,bt=o,rn=o.next;if(area$1(_e,bt,rn)>=0)return!1;const sn=_e.x,yn=bt.x,Pn=rn.x,zn=_e.y,lr=bt.y,ar=rn.y,cr=sn<yn?sn<Pn?sn:Pn:yn<Pn?yn:Pn,hr=zn<lr?zn<ar?zn:ar:lr<ar?lr:ar,es=sn>yn?sn>Pn?sn:Pn:yn>Pn?yn:Pn,Ur=zn>lr?zn>ar?zn:ar:lr>ar?lr:ar,Dr=zOrder(cr,hr,s,a,b),zr=zOrder(es,Ur,s,a,b);let rs=o.prevZ,as=o.nextZ;for(;rs&&rs.z>=Dr&&as&&as.z<=zr;){if(rs.x>=cr&&rs.x<=es&&rs.y>=hr&&rs.y<=Ur&&rs!==_e&&rs!==rn&&pointInTriangle(sn,zn,yn,lr,Pn,ar,rs.x,rs.y)&&area$1(rs.prev,rs,rs.next)>=0||(rs=rs.prevZ,as.x>=cr&&as.x<=es&&as.y>=hr&&as.y<=Ur&&as!==_e&&as!==rn&&pointInTriangle(sn,zn,yn,lr,Pn,ar,as.x,as.y)&&area$1(as.prev,as,as.next)>=0))return!1;as=as.nextZ}for(;rs&&rs.z>=Dr;){if(rs.x>=cr&&rs.x<=es&&rs.y>=hr&&rs.y<=Ur&&rs!==_e&&rs!==rn&&pointInTriangle(sn,zn,yn,lr,Pn,ar,rs.x,rs.y)&&area$1(rs.prev,rs,rs.next)>=0)return!1;rs=rs.prevZ}for(;as&&as.z<=zr;){if(as.x>=cr&&as.x<=es&&as.y>=hr&&as.y<=Ur&&as!==_e&&as!==rn&&pointInTriangle(sn,zn,yn,lr,Pn,ar,as.x,as.y)&&area$1(as.prev,as,as.next)>=0)return!1;as=as.nextZ}return!0}function cureLocalIntersections(o,s,a){let b=o;do{const _e=b.prev,bt=b.next.next;!equals(_e,bt)&&intersects(_e,b,b.next,bt)&&locallyInside(_e,bt)&&locallyInside(bt,_e)&&(s.push(_e.i/a|0),s.push(b.i/a|0),s.push(bt.i/a|0),removeNode(b),removeNode(b.next),b=o=bt),b=b.next}while(b!==o);return filterPoints(b)}function splitEarcut(o,s,a,b,_e,bt){let rn=o;do{let sn=rn.next.next;for(;sn!==rn.prev;){if(rn.i!==sn.i&&isValidDiagonal(rn,sn)){let yn=splitPolygon(rn,sn);rn=filterPoints(rn,rn.next),yn=filterPoints(yn,yn.next),earcutLinked(rn,s,a,b,_e,bt,0),earcutLinked(yn,s,a,b,_e,bt,0);return}sn=sn.next}rn=rn.next}while(rn!==o)}function eliminateHoles(o,s,a,b){const _e=[];let bt,rn,sn,yn,Pn;for(bt=0,rn=s.length;bt<rn;bt++)sn=s[bt]*b,yn=bt<rn-1?s[bt+1]*b:o.length,Pn=linkedList(o,sn,yn,b,!1),Pn===Pn.next&&(Pn.steiner=!0),_e.push(getLeftmost(Pn));for(_e.sort(compareX),bt=0;bt<_e.length;bt++)a=eliminateHole(_e[bt],a);return a}function compareX(o,s){return o.x-s.x}function eliminateHole(o,s){const a=findHoleBridge(o,s);if(!a)return s;const b=splitPolygon(a,o);return filterPoints(b,b.next),filterPoints(a,a.next)}function findHoleBridge(o,s){let a=s,b=-1/0,_e;const bt=o.x,rn=o.y;do{if(rn<=a.y&&rn>=a.next.y&&a.next.y!==a.y){const ar=a.x+(rn-a.y)*(a.next.x-a.x)/(a.next.y-a.y);if(ar<=bt&&ar>b&&(b=ar,_e=a.x<a.next.x?a:a.next,ar===bt))return _e}a=a.next}while(a!==s);if(!_e)return null;const sn=_e,yn=_e.x,Pn=_e.y;let zn=1/0,lr;a=_e;do bt>=a.x&&a.x>=yn&&bt!==a.x&&pointInTriangle(rn<Pn?bt:b,rn,yn,Pn,rn<Pn?b:bt,rn,a.x,a.y)&&(lr=Math.abs(rn-a.y)/(bt-a.x),locallyInside(a,o)&&(lr<zn||lr===zn&&(a.x>_e.x||a.x===_e.x&§orContainsSector(_e,a)))&&(_e=a,zn=lr)),a=a.next;while(a!==sn);return _e}function sectorContainsSector(o,s){return area$1(o.prev,o,s.prev)<0&&area$1(s.next,o,o.next)<0}function indexCurve(o,s,a,b){let _e=o;do _e.z===0&&(_e.z=zOrder(_e.x,_e.y,s,a,b)),_e.prevZ=_e.prev,_e.nextZ=_e.next,_e=_e.next;while(_e!==o);_e.prevZ.nextZ=null,_e.prevZ=null,sortLinked(_e)}function sortLinked(o){let s,a,b,_e,bt,rn,sn,yn,Pn=1;do{for(a=o,o=null,bt=null,rn=0;a;){for(rn++,b=a,sn=0,s=0;s<Pn&&(sn++,b=b.nextZ,!!b);s++);for(yn=Pn;sn>0||yn>0&&b;)sn!==0&&(yn===0||!b||a.z<=b.z)?(_e=a,a=a.nextZ,sn--):(_e=b,b=b.nextZ,yn--),bt?bt.nextZ=_e:o=_e,_e.prevZ=bt,bt=_e;a=b}bt.nextZ=null,Pn*=2}while(rn>1);return o}function zOrder(o,s,a,b,_e){return o=(o-a)*_e|0,s=(s-b)*_e|0,o=(o|o<<8)&16711935,o=(o|o<<4)&252645135,o=(o|o<<2)&858993459,o=(o|o<<1)&1431655765,s=(s|s<<8)&16711935,s=(s|s<<4)&252645135,s=(s|s<<2)&858993459,s=(s|s<<1)&1431655765,o|s<<1}function getLeftmost(o){let s=o,a=o;do(s.x<a.x||s.x===a.x&&s.y<a.y)&&(a=s),s=s.next;while(s!==o);return a}function pointInTriangle(o,s,a,b,_e,bt,rn,sn){return(_e-rn)*(s-sn)>=(o-rn)*(bt-sn)&&(o-rn)*(b-sn)>=(a-rn)*(s-sn)&&(a-rn)*(bt-sn)>=(_e-rn)*(b-sn)}function isValidDiagonal(o,s){return o.next.i!==s.i&&o.prev.i!==s.i&&!intersectsPolygon(o,s)&&(locallyInside(o,s)&&locallyInside(s,o)&&middleInside(o,s)&&(area$1(o.prev,o,s.prev)||area$1(o,s.prev,s))||equals(o,s)&&area$1(o.prev,o,o.next)>0&&area$1(s.prev,s,s.next)>0)}function area$1(o,s,a){return(s.y-o.y)*(a.x-s.x)-(s.x-o.x)*(a.y-s.y)}function equals(o,s){return o.x===s.x&&o.y===s.y}function intersects(o,s,a,b){const _e=sign(area$1(o,s,a)),bt=sign(area$1(o,s,b)),rn=sign(area$1(a,b,o)),sn=sign(area$1(a,b,s));return!!(_e!==bt&&rn!==sn||_e===0&&onSegment(o,a,s)||bt===0&&onSegment(o,b,s)||rn===0&&onSegment(a,o,b)||sn===0&&onSegment(a,s,b))}function onSegment(o,s,a){return s.x<=Math.max(o.x,a.x)&&s.x>=Math.min(o.x,a.x)&&s.y<=Math.max(o.y,a.y)&&s.y>=Math.min(o.y,a.y)}function sign(o){return o>0?1:o<0?-1:0}function intersectsPolygon(o,s){let a=o;do{if(a.i!==o.i&&a.next.i!==o.i&&a.i!==s.i&&a.next.i!==s.i&&intersects(a,a.next,o,s))return!0;a=a.next}while(a!==o);return!1}function locallyInside(o,s){return area$1(o.prev,o,o.next)<0?area$1(o,s,o.next)>=0&&area$1(o,o.prev,s)>=0:area$1(o,s,o.prev)<0||area$1(o,o.next,s)<0}function middleInside(o,s){let a=o,b=!1;const _e=(o.x+s.x)/2,bt=(o.y+s.y)/2;do a.y>bt!=a.next.y>bt&&a.next.y!==a.y&&_e<(a.next.x-a.x)*(bt-a.y)/(a.next.y-a.y)+a.x&&(b=!b),a=a.next;while(a!==o);return b}function splitPolygon(o,s){const a=new Node$2(o.i,o.x,o.y),b=new Node$2(s.i,s.x,s.y),_e=o.next,bt=s.prev;return o.next=s,s.prev=o,a.next=_e,_e.prev=a,b.next=a,a.prev=b,bt.next=b,b.prev=bt,b}function insertNode(o,s,a,b){const _e=new Node$2(o,s,a);return b?(_e.next=b.next,_e.prev=b,b.next.prev=_e,b.next=_e):(_e.prev=_e,_e.next=_e),_e}function removeNode(o){o.next.prev=o.prev,o.prev.next=o.next,o.prevZ&&(o.prevZ.nextZ=o.nextZ),o.nextZ&&(o.nextZ.prevZ=o.prevZ)}function Node$2(o,s,a){this.i=o,this.x=s,this.y=a,this.prev=null,this.next=null,this.z=0,this.prevZ=null,this.nextZ=null,this.steiner=!1}function signedArea(o,s,a,b){let _e=0;for(let bt=s,rn=a-b;bt<a;bt+=b)_e+=(o[rn]-o[bt])*(o[bt+1]+o[rn+1]),rn=bt;return _e}class ShapeUtils{static area(s){const a=s.length;let b=0;for(let _e=a-1,bt=0;bt<a;_e=bt++)b+=s[_e].x*s[bt].y-s[bt].x*s[_e].y;return b*.5}static isClockWise(s){return ShapeUtils.area(s)<0}static triangulateShape(s,a){const b=[],_e=[],bt=[];removeDupEndPts(s),addContour(b,s);let rn=s.length;a.forEach(removeDupEndPts);for(let yn=0;yn<a.length;yn++)_e.push(rn),rn+=a[yn].length,addContour(b,a[yn]);const sn=Earcut.triangulate(b,_e);for(let yn=0;yn<sn.length;yn+=3)bt.push(sn.slice(yn,yn+3));return bt}}function removeDupEndPts(o){const s=o.length;s>2&&o[s-1].equals(o[0])&&o.pop()}function addContour(o,s){for(let a=0;a<s.length;a++)o.push(s[a].x),o.push(s[a].y)}class ExtrudeGeometry extends BufferGeometry{constructor(s=new Shape([new Vector2(.5,.5),new Vector2(-.5,.5),new Vector2(-.5,-.5),new Vector2(.5,-.5)]),a={}){super(),this.type="ExtrudeGeometry",this.parameters={shapes:s,options:a},s=Array.isArray(s)?s:[s];const b=this,_e=[],bt=[];for(let sn=0,yn=s.length;sn<yn;sn++){const Pn=s[sn];rn(Pn)}this.setAttribute("position",new Float32BufferAttribute(_e,3)),this.setAttribute("uv",new Float32BufferAttribute(bt,2)),this.computeVertexNormals();function rn(sn){const yn=[],Pn=a.curveSegments!==void 0?a.curveSegments:12,zn=a.steps!==void 0?a.steps:1,lr=a.depth!==void 0?a.depth:1;let ar=a.bevelEnabled!==void 0?a.bevelEnabled:!0,cr=a.bevelThickness!==void 0?a.bevelThickness:.2,hr=a.bevelSize!==void 0?a.bevelSize:cr-.1,es=a.bevelOffset!==void 0?a.bevelOffset:0,Ur=a.bevelSegments!==void 0?a.bevelSegments:3;const Dr=a.extrudePath,zr=a.UVGenerator!==void 0?a.UVGenerator:WorldUVGenerator;let rs,as=!1,os,ls,zs,ho;Dr&&(rs=Dr.getSpacedPoints(zn),as=!0,ar=!1,os=Dr.computeFrenetFrames(zn,!1),ls=new Vector3,zs=new Vector3,ho=new Vector3),ar||(Ur=0,cr=0,hr=0,es=0);const ga=sn.extractPoints(Pn);let mo=ga.shape;const go=ga.holes;if(!ShapeUtils.isClockWise(mo)){mo=mo.reverse();for(let bA=0,FA=go.length;bA<FA;bA++){const BA=go[bA];ShapeUtils.isClockWise(BA)&&(go[bA]=BA.reverse())}}const Zl=ShapeUtils.triangulateShape(mo,go),_d=mo;for(let bA=0,FA=go.length;bA<FA;bA++){const BA=go[bA];mo=mo.concat(BA)}function Ty(bA,FA,BA){return FA||console.error("THREE.ExtrudeGeometry: vec does not exist"),bA.clone().addScaledVector(FA,BA)}const yy=mo.length,by=Zl.length;function Al(bA,FA,BA){let rE,sE,SC;const HA=bA.x-FA.x,VA=bA.y-FA.y,oC=BA.x-bA.x,pC=BA.y-bA.y,cC=HA*HA+VA*VA,qy=HA*pC-VA*oC;if(Math.abs(qy)>Number.EPSILON){const Iy=Math.sqrt(cC),kA=Math.sqrt(oC*oC+pC*pC),nE=FA.x-VA/Iy,A_=FA.y+HA/Iy,eC=BA.x-pC/kA,PC=BA.y+oC/kA,nC=((eC-nE)*pC-(PC-A_)*oC)/(HA*pC-VA*oC);rE=nE+HA*nC-bA.x,sE=A_+VA*nC-bA.y;const iE=rE*rE+sE*sE;if(iE<=2)return new Vector2(rE,sE);SC=Math.sqrt(iE/2)}else{let Iy=!1;HA>Number.EPSILON?oC>Number.EPSILON&&(Iy=!0):HA<-Number.EPSILON?oC<-Number.EPSILON&&(Iy=!0):Math.sign(VA)===Math.sign(pC)&&(Iy=!0),Iy?(rE=-VA,sE=HA,SC=Math.sqrt(cC)):(rE=HA,sE=VA,SC=Math.sqrt(cC/2))}return new Vector2(rE/SC,sE/SC)}const _f=[];for(let bA=0,FA=_d.length,BA=FA-1,rE=bA+1;bA<FA;bA++,BA++,rE++)BA===FA&&(BA=0),rE===FA&&(rE=0),_f[bA]=Al(_d[bA],_d[BA],_d[rE]);const gy=[];let El,My=_f.concat();for(let bA=0,FA=go.length;bA<FA;bA++){const BA=go[bA];El=[];for(let rE=0,sE=BA.length,SC=sE-1,HA=rE+1;rE<sE;rE++,SC++,HA++)SC===sE&&(SC=0),HA===sE&&(HA=0),El[rE]=Al(BA[rE],BA[SC],BA[HA]);gy.push(El),My=My.concat(El)}for(let bA=0;bA<Ur;bA++){const FA=bA/Ur,BA=cr*Math.cos(FA*Math.PI/2),rE=hr*Math.sin(FA*Math.PI/2)+es;for(let sE=0,SC=_d.length;sE<SC;sE++){const HA=Ty(_d[sE],_f[sE],rE);OA(HA.x,HA.y,-BA)}for(let sE=0,SC=go.length;sE<SC;sE++){const HA=go[sE];El=gy[sE];for(let VA=0,oC=HA.length;VA<oC;VA++){const pC=Ty(HA[VA],El[VA],rE);OA(pC.x,pC.y,-BA)}}}const By=hr+es;for(let bA=0;bA<yy;bA++){const FA=ar?Ty(mo[bA],My[bA],By):mo[bA];as?(zs.copy(os.normals[0]).multiplyScalar(FA.x),ls.copy(os.binormals[0]).multiplyScalar(FA.y),ho.copy(rs[0]).add(zs).add(ls),OA(ho.x,ho.y,ho.z)):OA(FA.x,FA.y,0)}for(let bA=1;bA<=zn;bA++)for(let FA=0;FA<yy;FA++){const BA=ar?Ty(mo[FA],My[FA],By):mo[FA];as?(zs.copy(os.normals[bA]).multiplyScalar(BA.x),ls.copy(os.binormals[bA]).multiplyScalar(BA.y),ho.copy(rs[bA]).add(zs).add(ls),OA(ho.x,ho.y,ho.z)):OA(BA.x,BA.y,lr/zn*bA)}for(let bA=Ur-1;bA>=0;bA--){const FA=bA/Ur,BA=cr*Math.cos(FA*Math.PI/2),rE=hr*Math.sin(FA*Math.PI/2)+es;for(let sE=0,SC=_d.length;sE<SC;sE++){const HA=Ty(_d[sE],_f[sE],rE);OA(HA.x,HA.y,lr+BA)}for(let sE=0,SC=go.length;sE<SC;sE++){const HA=go[sE];El=gy[sE];for(let VA=0,oC=HA.length;VA<oC;VA++){const pC=Ty(HA[VA],El[VA],rE);as?OA(pC.x,pC.y+rs[zn-1].y,rs[zn-1].x+BA):OA(pC.x,pC.y,lr+BA)}}}lA(),wA();function lA(){const bA=_e.length/3;if(ar){let FA=0,BA=yy*FA;for(let rE=0;rE<by;rE++){const sE=Zl[rE];UA(sE[2]+BA,sE[1]+BA,sE[0]+BA)}FA=zn+Ur*2,BA=yy*FA;for(let rE=0;rE<by;rE++){const sE=Zl[rE];UA(sE[0]+BA,sE[1]+BA,sE[2]+BA)}}else{for(let FA=0;FA<by;FA++){const BA=Zl[FA];UA(BA[2],BA[1],BA[0])}for(let FA=0;FA<by;FA++){const BA=Zl[FA];UA(BA[0]+yy*zn,BA[1]+yy*zn,BA[2]+yy*zn)}}b.addGroup(bA,_e.length/3-bA,0)}function wA(){const bA=_e.length/3;let FA=0;Fy(_d,FA),FA+=_d.length;for(let BA=0,rE=go.length;BA<rE;BA++){const sE=go[BA];Fy(sE,FA),FA+=sE.length}b.addGroup(bA,_e.length/3-bA,1)}function Fy(bA,FA){let BA=bA.length;for(;--BA>=0;){const rE=BA;let sE=BA-1;sE<0&&(sE=bA.length-1);for(let SC=0,HA=zn+Ur*2;SC<HA;SC++){const VA=yy*SC,oC=yy*(SC+1),pC=FA+rE+VA,cC=FA+sE+VA,qy=FA+sE+oC,Iy=FA+rE+oC;$A(pC,cC,qy,Iy)}}}function OA(bA,FA,BA){yn.push(bA),yn.push(FA),yn.push(BA)}function UA(bA,FA,BA){YA(bA),YA(FA),YA(BA);const rE=_e.length/3,sE=zr.generateTopUV(b,_e,rE-3,rE-2,rE-1);WA(sE[0]),WA(sE[1]),WA(sE[2])}function $A(bA,FA,BA,rE){YA(bA),YA(FA),YA(rE),YA(FA),YA(BA),YA(rE);const sE=_e.length/3,SC=zr.generateSideWallUV(b,_e,sE-6,sE-3,sE-2,sE-1);WA(SC[0]),WA(SC[1]),WA(SC[3]),WA(SC[1]),WA(SC[2]),WA(SC[3])}function YA(bA){_e.push(yn[bA*3+0]),_e.push(yn[bA*3+1]),_e.push(yn[bA*3+2])}function WA(bA){bt.push(bA.x),bt.push(bA.y)}}}copy(s){return super.copy(s),this.parameters=Object.assign({},s.parameters),this}toJSON(){const s=super.toJSON(),a=this.parameters.shapes,b=this.parameters.options;return toJSON$1(a,b,s)}static fromJSON(s,a){const b=[];for(let bt=0,rn=s.shapes.length;bt<rn;bt++){const sn=a[s.shapes[bt]];b.push(sn)}const _e=s.options.extrudePath;return _e!==void 0&&(s.options.extrudePath=new Curves[_e.type]().fromJSON(_e)),new ExtrudeGeometry(b,s.options)}}const WorldUVGenerator={generateTopUV:function(o,s,a,b,_e){const bt=s[a*3],rn=s[a*3+1],sn=s[b*3],yn=s[b*3+1],Pn=s[_e*3],zn=s[_e*3+1];return[new Vector2(bt,rn),new Vector2(sn,yn),new Vector2(Pn,zn)]},generateSideWallUV:function(o,s,a,b,_e,bt){const rn=s[a*3],sn=s[a*3+1],yn=s[a*3+2],Pn=s[b*3],zn=s[b*3+1],lr=s[b*3+2],ar=s[_e*3],cr=s[_e*3+1],hr=s[_e*3+2],es=s[bt*3],Ur=s[bt*3+1],Dr=s[bt*3+2];return Math.abs(sn-zn)<Math.abs(rn-Pn)?[new Vector2(rn,1-yn),new Vector2(Pn,1-lr),new Vector2(ar,1-hr),new Vector2(es,1-Dr)]:[new Vector2(sn,1-yn),new Vector2(zn,1-lr),new Vector2(cr,1-hr),new Vector2(Ur,1-Dr)]}};function toJSON$1(o,s,a){if(a.shapes=[],Array.isArray(o))for(let b=0,_e=o.length;b<_e;b++){const bt=o[b];a.shapes.push(bt.uuid)}else a.shapes.push(o.uuid);return a.options=Object.assign({},s),s.extrudePath!==void 0&&(a.options.extrudePath=s.extrudePath.toJSON()),a}class IcosahedronGeometry extends PolyhedronGeometry{constructor(s=1,a=0){const b=(1+Math.sqrt(5))/2,_e=[-1,b,0,1,b,0,-1,-b,0,1,-b,0,0,-1,b,0,1,b,0,-1,-b,0,1,-b,b,0,-1,b,0,1,-b,0,-1,-b,0,1],bt=[0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5,11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1];super(_e,bt,s,a),this.type="IcosahedronGeometry",this.parameters={radius:s,detail:a}}static fromJSON(s){return new IcosahedronGeometry(s.radius,s.detail)}}class OctahedronGeometry extends PolyhedronGeometry{constructor(s=1,a=0){const b=[1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1],_e=[0,2,4,0,4,3,0,3,5,0,5,2,1,2,5,1,5,3,1,3,4,1,4,2];super(b,_e,s,a),this.type="OctahedronGeometry",this.parameters={radius:s,detail:a}}static fromJSON(s){return new OctahedronGeometry(s.radius,s.detail)}}class RingGeometry extends BufferGeometry{constructor(s=.5,a=1,b=32,_e=1,bt=0,rn=Math.PI*2){super(),this.type="RingGeometry",this.parameters={innerRadius:s,outerRadius:a,thetaSegments:b,phiSegments:_e,thetaStart:bt,thetaLength:rn},b=Math.max(3,b),_e=Math.max(1,_e);const sn=[],yn=[],Pn=[],zn=[];let lr=s;const ar=(a-s)/_e,cr=new Vector3,hr=new Vector2;for(let es=0;es<=_e;es++){for(let Ur=0;Ur<=b;Ur++){const Dr=bt+Ur/b*rn;cr.x=lr*Math.cos(Dr),cr.y=lr*Math.sin(Dr),yn.push(cr.x,cr.y,cr.z),Pn.push(0,0,1),hr.x=(cr.x/a+1)/2,hr.y=(cr.y/a+1)/2,zn.push(hr.x,hr.y)}lr+=ar}for(let es=0;es<_e;es++){const Ur=es*(b+1);for(let Dr=0;Dr<b;Dr++){const zr=Dr+Ur,rs=zr,as=zr+b+1,os=zr+b+2,ls=zr+1;sn.push(rs,as,ls),sn.push(as,os,ls)}}this.setIndex(sn),this.setAttribute("position",new Float32BufferAttribute(yn,3)),this.setAttribute("normal",new Float32BufferAttribute(Pn,3)),this.setAttribute("uv",new Float32BufferAttribute(zn,2))}copy(s){return super.copy(s),this.parameters=Object.assign({},s.parameters),this}static fromJSON(s){return new RingGeometry(s.innerRadius,s.outerRadius,s.thetaSegments,s.phiSegments,s.thetaStart,s.thetaLength)}}class ShapeGeometry extends BufferGeometry{constructor(s=new Shape([new Vector2(0,.5),new Vector2(-.5,-.5),new Vector2(.5,-.5)]),a=12){super(),this.type="ShapeGeometry",this.parameters={shapes:s,curveSegments:a};const b=[],_e=[],bt=[],rn=[];let sn=0,yn=0;if(Array.isArray(s)===!1)Pn(s);else for(let zn=0;zn<s.length;zn++)Pn(s[zn]),this.addGroup(sn,yn,zn),sn+=yn,yn=0;this.setIndex(b),this.setAttribute("position",new Float32BufferAttribute(_e,3)),this.setAttribute("normal",new Float32BufferAttribute(bt,3)),this.setAttribute("uv",new Float32BufferAttribute(rn,2));function Pn(zn){const lr=_e.length/3,ar=zn.extractPoints(a);let cr=ar.shape;const hr=ar.holes;ShapeUtils.isClockWise(cr)===!1&&(cr=cr.reverse());for(let Ur=0,Dr=hr.length;Ur<Dr;Ur++){const zr=hr[Ur];ShapeUtils.isClockWise(zr)===!0&&(hr[Ur]=zr.reverse())}const es=ShapeUtils.triangulateShape(cr,hr);for(let Ur=0,Dr=hr.length;Ur<Dr;Ur++){const zr=hr[Ur];cr=cr.concat(zr)}for(let Ur=0,Dr=cr.length;Ur<Dr;Ur++){const zr=cr[Ur];_e.push(zr.x,zr.y,0),bt.push(0,0,1),rn.push(zr.x,zr.y)}for(let Ur=0,Dr=es.length;Ur<Dr;Ur++){const zr=es[Ur],rs=zr[0]+lr,as=zr[1]+lr,os=zr[2]+lr;b.push(rs,as,os),yn+=3}}}copy(s){return super.copy(s),this.parameters=Object.assign({},s.parameters),this}toJSON(){const s=super.toJSON(),a=this.parameters.shapes;return toJSON(a,s)}static fromJSON(s,a){const b=[];for(let _e=0,bt=s.shapes.length;_e<bt;_e++){const rn=a[s.shapes[_e]];b.push(rn)}return new ShapeGeometry(b,s.curveSegments)}}function toJSON(o,s){if(s.shapes=[],Array.isArray(o))for(let a=0,b=o.length;a<b;a++){const _e=o[a];s.shapes.push(_e.uuid)}else s.shapes.push(o.uuid);return s}class SphereGeometry extends BufferGeometry{constructor(s=1,a=32,b=16,_e=0,bt=Math.PI*2,rn=0,sn=Math.PI){super(),this.type="SphereGeometry",this.parameters={radius:s,widthSegments:a,heightSegments:b,phiStart:_e,phiLength:bt,thetaStart:rn,thetaLength:sn},a=Math.max(3,Math.floor(a)),b=Math.max(2,Math.floor(b));const yn=Math.min(rn+sn,Math.PI);let Pn=0;const zn=[],lr=new Vector3,ar=new Vector3,cr=[],hr=[],es=[],Ur=[];for(let Dr=0;Dr<=b;Dr++){const zr=[],rs=Dr/b;let as=0;Dr===0&&rn===0?as=.5/a:Dr===b&&yn===Math.PI&&(as=-.5/a);for(let os=0;os<=a;os++){const ls=os/a;lr.x=-s*Math.cos(_e+ls*bt)*Math.sin(rn+rs*sn),lr.y=s*Math.cos(rn+rs*sn),lr.z=s*Math.sin(_e+ls*bt)*Math.sin(rn+rs*sn),hr.push(lr.x,lr.y,lr.z),ar.copy(lr).normalize(),es.push(ar.x,ar.y,ar.z),Ur.push(ls+as,1-rs),zr.push(Pn++)}zn.push(zr)}for(let Dr=0;Dr<b;Dr++)for(let zr=0;zr<a;zr++){const rs=zn[Dr][zr+1],as=zn[Dr][zr],os=zn[Dr+1][zr],ls=zn[Dr+1][zr+1];(Dr!==0||rn>0)&&cr.push(rs,as,ls),(Dr!==b-1||yn<Math.PI)&&cr.push(as,os,ls)}this.setIndex(cr),this.setAttribute("position",new Float32BufferAttribute(hr,3)),this.setAttribute("normal",new Float32BufferAttribute(es,3)),this.setAttribute("uv",new Float32BufferAttribute(Ur,2))}copy(s){return super.copy(s),this.parameters=Object.assign({},s.parameters),this}static fromJSON(s){return new SphereGeometry(s.radius,s.widthSegments,s.heightSegments,s.phiStart,s.phiLength,s.thetaStart,s.thetaLength)}}class TetrahedronGeometry extends PolyhedronGeometry{constructor(s=1,a=0){const b=[1,1,1,-1,-1,1,-1,1,-1,1,-1,-1],_e=[2,1,0,0,3,2,1,3,0,2,3,1];super(b,_e,s,a),this.type="TetrahedronGeometry",this.parameters={radius:s,detail:a}}static fromJSON(s){return new TetrahedronGeometry(s.radius,s.detail)}}class TorusGeometry extends BufferGeometry{constructor(s=1,a=.4,b=12,_e=48,bt=Math.PI*2){super(),this.type="TorusGeometry",this.parameters={radius:s,tube:a,radialSegments:b,tubularSegments:_e,arc:bt},b=Math.floor(b),_e=Math.floor(_e);const rn=[],sn=[],yn=[],Pn=[],zn=new Vector3,lr=new Vector3,ar=new Vector3;for(let cr=0;cr<=b;cr++)for(let hr=0;hr<=_e;hr++){const es=hr/_e*bt,Ur=cr/b*Math.PI*2;lr.x=(s+a*Math.cos(Ur))*Math.cos(es),lr.y=(s+a*Math.cos(Ur))*Math.sin(es),lr.z=a*Math.sin(Ur),sn.push(lr.x,lr.y,lr.z),zn.x=s*Math.cos(es),zn.y=s*Math.sin(es),ar.subVectors(lr,zn).normalize(),yn.push(ar.x,ar.y,ar.z),Pn.push(hr/_e),Pn.push(cr/b)}for(let cr=1;cr<=b;cr++)for(let hr=1;hr<=_e;hr++){const es=(_e+1)*cr+hr-1,Ur=(_e+1)*(cr-1)+hr-1,Dr=(_e+1)*(cr-1)+hr,zr=(_e+1)*cr+hr;rn.push(es,Ur,zr),rn.push(Ur,Dr,zr)}this.setIndex(rn),this.setAttribute("position",new Float32BufferAttribute(sn,3)),this.setAttribute("normal",new Float32BufferAttribute(yn,3)),this.setAttribute("uv",new Float32BufferAttribute(Pn,2))}copy(s){return super.copy(s),this.parameters=Object.assign({},s.parameters),this}static fromJSON(s){return new TorusGeometry(s.radius,s.tube,s.radialSegments,s.tubularSegments,s.arc)}}class TorusKnotGeometry extends BufferGeometry{constructor(s=1,a=.4,b=64,_e=8,bt=2,rn=3){super(),this.type="TorusKnotGeometry",this.parameters={radius:s,tube:a,tubularSegments:b,radialSegments:_e,p:bt,q:rn},b=Math.floor(b),_e=Math.floor(_e);const sn=[],yn=[],Pn=[],zn=[],lr=new Vector3,ar=new Vector3,cr=new Vector3,hr=new Vector3,es=new Vector3,Ur=new Vector3,Dr=new Vector3;for(let rs=0;rs<=b;++rs){const as=rs/b*bt*Math.PI*2;zr(as,bt,rn,s,cr),zr(as+.01,bt,rn,s,hr),Ur.subVectors(hr,cr),Dr.addVectors(hr,cr),es.crossVectors(Ur,Dr),Dr.crossVectors(es,Ur),es.normalize(),Dr.normalize();for(let os=0;os<=_e;++os){const ls=os/_e*Math.PI*2,zs=-a*Math.cos(ls),ho=a*Math.sin(ls);lr.x=cr.x+(zs*Dr.x+ho*es.x),lr.y=cr.y+(zs*Dr.y+ho*es.y),lr.z=cr.z+(zs*Dr.z+ho*es.z),yn.push(lr.x,lr.y,lr.z),ar.subVectors(lr,cr).normalize(),Pn.push(ar.x,ar.y,ar.z),zn.push(rs/b),zn.push(os/_e)}}for(let rs=1;rs<=b;rs++)for(let as=1;as<=_e;as++){const os=(_e+1)*(rs-1)+(as-1),ls=(_e+1)*rs+(as-1),zs=(_e+1)*rs+as,ho=(_e+1)*(rs-1)+as;sn.push(os,ls,ho),sn.push(ls,zs,ho)}this.setIndex(sn),this.setAttribute("position",new Float32BufferAttribute(yn,3)),this.setAttribute("normal",new Float32BufferAttribute(Pn,3)),this.setAttribute("uv",new Float32BufferAttribute(zn,2));function zr(rs,as,os,ls,zs){const ho=Math.cos(rs),ga=Math.sin(rs),mo=os/as*rs,go=Math.cos(mo);zs.x=ls*(2+go)*.5*ho,zs.y=ls*(2+go)*ga*.5,zs.z=ls*Math.sin(mo)*.5}}copy(s){return super.copy(s),this.parameters=Object.assign({},s.parameters),this}static fromJSON(s){return new TorusKnotGeometry(s.radius,s.tube,s.tubularSegments,s.radialSegments,s.p,s.q)}}class TubeGeometry extends BufferGeometry{constructor(s=new QuadraticBezierCurve3(new Vector3(-1,-1,0),new Vector3(-1,1,0),new Vector3(1,1,0)),a=64,b=1,_e=8,bt=!1){super(),this.type="TubeGeometry",this.parameters={path:s,tubularSegments:a,radius:b,radialSegments:_e,closed:bt};const rn=s.computeFrenetFrames(a,bt);this.tangents=rn.tangents,this.normals=rn.normals,this.binormals=rn.binormals;const sn=new Vector3,yn=new Vector3,Pn=new Vector2;let zn=new Vector3;const lr=[],ar=[],cr=[],hr=[];es(),this.setIndex(hr),this.setAttribute("position",new Float32BufferAttribute(lr,3)),this.setAttribute("normal",new Float32BufferAttribute(ar,3)),this.setAttribute("uv",new Float32BufferAttribute(cr,2));function es(){for(let rs=0;rs<a;rs++)Ur(rs);Ur(bt===!1?a:0),zr(),Dr()}function Ur(rs){zn=s.getPointAt(rs/a,zn);const as=rn.normals[rs],os=rn.binormals[rs];for(let ls=0;ls<=_e;ls++){const zs=ls/_e*Math.PI*2,ho=Math.sin(zs),ga=-Math.cos(zs);yn.x=ga*as.x+ho*os.x,yn.y=ga*as.y+ho*os.y,yn.z=ga*as.z+ho*os.z,yn.normalize(),ar.push(yn.x,yn.y,yn.z),sn.x=zn.x+b*yn.x,sn.y=zn.y+b*yn.y,sn.z=zn.z+b*yn.z,lr.push(sn.x,sn.y,sn.z)}}function Dr(){for(let rs=1;rs<=a;rs++)for(let as=1;as<=_e;as++){const os=(_e+1)*(rs-1)+(as-1),ls=(_e+1)*rs+(as-1),zs=(_e+1)*rs+as,ho=(_e+1)*(rs-1)+as;hr.push(os,ls,ho),hr.push(ls,zs,ho)}}function zr(){for(let rs=0;rs<=a;rs++)for(let as=0;as<=_e;as++)Pn.x=rs/a,Pn.y=as/_e,cr.push(Pn.x,Pn.y)}}copy(s){return super.copy(s),this.parameters=Object.assign({},s.parameters),this}toJSON(){const s=super.toJSON();return s.path=this.parameters.path.toJSON(),s}static fromJSON(s){return new TubeGeometry(new Curves[s.path.type]().fromJSON(s.path),s.tubularSegments,s.radius,s.radialSegments,s.closed)}}class WireframeGeometry extends BufferGeometry{constructor(s=null){if(super(),this.type="WireframeGeometry",this.parameters={geometry:s},s!==null){const a=[],b=new Set,_e=new Vector3,bt=new Vector3;if(s.index!==null){const rn=s.attributes.position,sn=s.index;let yn=s.groups;yn.length===0&&(yn=[{start:0,count:sn.count,materialIndex:0}]);for(let Pn=0,zn=yn.length;Pn<zn;++Pn){const lr=yn[Pn],ar=lr.start,cr=lr.count;for(let hr=ar,es=ar+cr;hr<es;hr+=3)for(let Ur=0;Ur<3;Ur++){const Dr=sn.getX(hr+Ur),zr=sn.getX(hr+(Ur+1)%3);_e.fromBufferAttribute(rn,Dr),bt.fromBufferAttribute(rn,zr),isUniqueEdge(_e,bt,b)===!0&&(a.push(_e.x,_e.y,_e.z),a.push(bt.x,bt.y,bt.z))}}}else{const rn=s.attributes.position;for(let sn=0,yn=rn.count/3;sn<yn;sn++)for(let Pn=0;Pn<3;Pn++){const zn=3*sn+Pn,lr=3*sn+(Pn+1)%3;_e.fromBufferAttribute(rn,zn),bt.fromBufferAttribute(rn,lr),isUniqueEdge(_e,bt,b)===!0&&(a.push(_e.x,_e.y,_e.z),a.push(bt.x,bt.y,bt.z))}}this.setAttribute("position",new Float32BufferAttribute(a,3))}}copy(s){return super.copy(s),this.parameters=Object.assign({},s.parameters),this}}function isUniqueEdge(o,s,a){const b=`${o.x},${o.y},${o.z}-${s.x},${s.y},${s.z}`,_e=`${s.x},${s.y},${s.z}-${o.x},${o.y},${o.z}`;return a.has(b)===!0||a.has(_e)===!0?!1:(a.add(b),a.add(_e),!0)}var Geometries=Object.freeze({__proto__:null,BoxGeometry,CapsuleGeometry,CircleGeometry,ConeGeometry,CylinderGeometry,DodecahedronGeometry,EdgesGeometry,ExtrudeGeometry,IcosahedronGeometry,LatheGeometry,OctahedronGeometry,PlaneGeometry,PolyhedronGeometry,RingGeometry,ShapeGeometry,SphereGeometry,TetrahedronGeometry,TorusGeometry,TorusKnotGeometry,TubeGeometry,WireframeGeometry});class ShadowMaterial extends Material{constructor(s){super(),this.isShadowMaterial=!0,this.type="ShadowMaterial",this.color=new Color$1(0),this.transparent=!0,this.fog=!0,this.setValues(s)}copy(s){return super.copy(s),this.color.copy(s.color),this.fog=s.fog,this}}class RawShaderMaterial extends ShaderMaterial{constructor(s){super(s),this.isRawShaderMaterial=!0,this.type="RawShaderMaterial"}}class MeshStandardMaterial extends Material{constructor(s){super(),this.isMeshStandardMaterial=!0,this.defines={STANDARD:""},this.type="MeshStandardMaterial",this.color=new Color$1(16777215),this.roughness=1,this.metalness=0,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Color$1(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=TangentSpaceNormalMap,this.normalScale=new Vector2(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.roughnessMap=null,this.metalnessMap=null,this.alphaMap=null,this.envMap=null,this.envMapIntensity=1,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(s)}copy(s){return super.copy(s),this.defines={STANDARD:""},this.color.copy(s.color),this.roughness=s.roughness,this.metalness=s.metalness,this.map=s.map,this.lightMap=s.lightMap,this.lightMapIntensity=s.lightMapIntensity,this.aoMap=s.aoMap,this.aoMapIntensity=s.aoMapIntensity,this.emissive.copy(s.emissive),this.emissiveMap=s.emissiveMap,this.emissiveIntensity=s.emissiveIntensity,this.bumpMap=s.bumpMap,this.bumpScale=s.bumpScale,this.normalMap=s.normalMap,this.normalMapType=s.normalMapType,this.normalScale.copy(s.normalScale),this.displacementMap=s.displacementMap,this.displacementScale=s.displacementScale,this.displacementBias=s.displacementBias,this.roughnessMap=s.roughnessMap,this.metalnessMap=s.metalnessMap,this.alphaMap=s.alphaMap,this.envMap=s.envMap,this.envMapIntensity=s.envMapIntensity,this.wireframe=s.wireframe,this.wireframeLinewidth=s.wireframeLinewidth,this.wireframeLinecap=s.wireframeLinecap,this.wireframeLinejoin=s.wireframeLinejoin,this.flatShading=s.flatShading,this.fog=s.fog,this}}class MeshPhysicalMaterial extends MeshStandardMaterial{constructor(s){super(),this.isMeshPhysicalMaterial=!0,this.defines={STANDARD:"",PHYSICAL:""},this.type="MeshPhysicalMaterial",this.anisotropyRotation=0,this.anisotropyMap=null,this.clearcoatMap=null,this.clearcoatRoughness=0,this.clearcoatRoughnessMap=null,this.clearcoatNormalScale=new Vector2(1,1),this.clearcoatNormalMap=null,this.ior=1.5,Object.defineProperty(this,"reflectivity",{get:function(){return clamp$2(2.5*(this.ior-1)/(this.ior+1),0,1)},set:function(a){this.ior=(1+.4*a)/(1-.4*a)}}),this.iridescenceMap=null,this.iridescenceIOR=1.3,this.iridescenceThicknessRange=[100,400],this.iridescenceThicknessMap=null,this.sheenColor=new Color$1(0),this.sheenColorMap=null,this.sheenRoughness=1,this.sheenRoughnessMap=null,this.transmissionMap=null,this.thickness=0,this.thicknessMap=null,this.attenuationDistance=1/0,this.attenuationColor=new Color$1(1,1,1),this.specularIntensity=1,this.specularIntensityMap=null,this.specularColor=new Color$1(1,1,1),this.specularColorMap=null,this._anisotropy=0,this._clearcoat=0,this._iridescence=0,this._sheen=0,this._transmission=0,this.setValues(s)}get anisotropy(){return this._anisotropy}set anisotropy(s){this._anisotropy>0!=s>0&&this.version++,this._anisotropy=s}get clearcoat(){return this._clearcoat}set clearcoat(s){this._clearcoat>0!=s>0&&this.version++,this._clearcoat=s}get iridescence(){return this._iridescence}set iridescence(s){this._iridescence>0!=s>0&&this.version++,this._iridescence=s}get sheen(){return this._sheen}set sheen(s){this._sheen>0!=s>0&&this.version++,this._sheen=s}get transmission(){return this._transmission}set transmission(s){this._transmission>0!=s>0&&this.version++,this._transmission=s}copy(s){return super.copy(s),this.defines={STANDARD:"",PHYSICAL:""},this.anisotropy=s.anisotropy,this.anisotropyRotation=s.anisotropyRotation,this.anisotropyMap=s.anisotropyMap,this.clearcoat=s.clearcoat,this.clearcoatMap=s.clearcoatMap,this.clearcoatRoughness=s.clearcoatRoughness,this.clearcoatRoughnessMap=s.clearcoatRoughnessMap,this.clearcoatNormalMap=s.clearcoatNormalMap,this.clearcoatNormalScale.copy(s.clearcoatNormalScale),this.ior=s.ior,this.iridescence=s.iridescence,this.iridescenceMap=s.iridescenceMap,this.iridescenceIOR=s.iridescenceIOR,this.iridescenceThicknessRange=[...s.iridescenceThicknessRange],this.iridescenceThicknessMap=s.iridescenceThicknessMap,this.sheen=s.sheen,this.sheenColor.copy(s.sheenColor),this.sheenColorMap=s.sheenColorMap,this.sheenRoughness=s.sheenRoughness,this.sheenRoughnessMap=s.sheenRoughnessMap,this.transmission=s.transmission,this.transmissionMap=s.transmissionMap,this.thickness=s.thickness,this.thicknessMap=s.thicknessMap,this.attenuationDistance=s.attenuationDistance,this.attenuationColor.copy(s.attenuationColor),this.specularIntensity=s.specularIntensity,this.specularIntensityMap=s.specularIntensityMap,this.specularColor.copy(s.specularColor),this.specularColorMap=s.specularColorMap,this}}class MeshPhongMaterial extends Material{constructor(s){super(),this.isMeshPhongMaterial=!0,this.type="MeshPhongMaterial",this.color=new Color$1(16777215),this.specular=new Color$1(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Color$1(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=TangentSpaceNormalMap,this.normalScale=new Vector2(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=MultiplyOperation,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(s)}copy(s){return super.copy(s),this.color.copy(s.color),this.specular.copy(s.specular),this.shininess=s.shininess,this.map=s.map,this.lightMap=s.lightMap,this.lightMapIntensity=s.lightMapIntensity,this.aoMap=s.aoMap,this.aoMapIntensity=s.aoMapIntensity,this.emissive.copy(s.emissive),this.emissiveMap=s.emissiveMap,this.emissiveIntensity=s.emissiveIntensity,this.bumpMap=s.bumpMap,this.bumpScale=s.bumpScale,this.normalMap=s.normalMap,this.normalMapType=s.normalMapType,this.normalScale.copy(s.normalScale),this.displacementMap=s.displacementMap,this.displacementScale=s.displacementScale,this.displacementBias=s.displacementBias,this.specularMap=s.specularMap,this.alphaMap=s.alphaMap,this.envMap=s.envMap,this.combine=s.combine,this.reflectivity=s.reflectivity,this.refractionRatio=s.refractionRatio,this.wireframe=s.wireframe,this.wireframeLinewidth=s.wireframeLinewidth,this.wireframeLinecap=s.wireframeLinecap,this.wireframeLinejoin=s.wireframeLinejoin,this.flatShading=s.flatShading,this.fog=s.fog,this}}class MeshToonMaterial extends Material{constructor(s){super(),this.isMeshToonMaterial=!0,this.defines={TOON:""},this.type="MeshToonMaterial",this.color=new Color$1(16777215),this.map=null,this.gradientMap=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Color$1(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=TangentSpaceNormalMap,this.normalScale=new Vector2(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(s)}copy(s){return super.copy(s),this.color.copy(s.color),this.map=s.map,this.gradientMap=s.gradientMap,this.lightMap=s.lightMap,this.lightMapIntensity=s.lightMapIntensity,this.aoMap=s.aoMap,this.aoMapIntensity=s.aoMapIntensity,this.emissive.copy(s.emissive),this.emissiveMap=s.emissiveMap,this.emissiveIntensity=s.emissiveIntensity,this.bumpMap=s.bumpMap,this.bumpScale=s.bumpScale,this.normalMap=s.normalMap,this.normalMapType=s.normalMapType,this.normalScale.copy(s.normalScale),this.displacementMap=s.displacementMap,this.displacementScale=s.displacementScale,this.displacementBias=s.displacementBias,this.alphaMap=s.alphaMap,this.wireframe=s.wireframe,this.wireframeLinewidth=s.wireframeLinewidth,this.wireframeLinecap=s.wireframeLinecap,this.wireframeLinejoin=s.wireframeLinejoin,this.fog=s.fog,this}}class MeshNormalMaterial extends Material{constructor(s){super(),this.isMeshNormalMaterial=!0,this.type="MeshNormalMaterial",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=TangentSpaceNormalMap,this.normalScale=new Vector2(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.flatShading=!1,this.setValues(s)}copy(s){return super.copy(s),this.bumpMap=s.bumpMap,this.bumpScale=s.bumpScale,this.normalMap=s.normalMap,this.normalMapType=s.normalMapType,this.normalScale.copy(s.normalScale),this.displacementMap=s.displacementMap,this.displacementScale=s.displacementScale,this.displacementBias=s.displacementBias,this.wireframe=s.wireframe,this.wireframeLinewidth=s.wireframeLinewidth,this.flatShading=s.flatShading,this}}class MeshLambertMaterial extends Material{constructor(s){super(),this.isMeshLambertMaterial=!0,this.type="MeshLambertMaterial",this.color=new Color$1(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Color$1(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=TangentSpaceNormalMap,this.normalScale=new Vector2(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=MultiplyOperation,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(s)}copy(s){return super.copy(s),this.color.copy(s.color),this.map=s.map,this.lightMap=s.lightMap,this.lightMapIntensity=s.lightMapIntensity,this.aoMap=s.aoMap,this.aoMapIntensity=s.aoMapIntensity,this.emissive.copy(s.emissive),this.emissiveMap=s.emissiveMap,this.emissiveIntensity=s.emissiveIntensity,this.bumpMap=s.bumpMap,this.bumpScale=s.bumpScale,this.normalMap=s.normalMap,this.normalMapType=s.normalMapType,this.normalScale.copy(s.normalScale),this.displacementMap=s.displacementMap,this.displacementScale=s.displacementScale,this.displacementBias=s.displacementBias,this.specularMap=s.specularMap,this.alphaMap=s.alphaMap,this.envMap=s.envMap,this.combine=s.combine,this.reflectivity=s.reflectivity,this.refractionRatio=s.refractionRatio,this.wireframe=s.wireframe,this.wireframeLinewidth=s.wireframeLinewidth,this.wireframeLinecap=s.wireframeLinecap,this.wireframeLinejoin=s.wireframeLinejoin,this.flatShading=s.flatShading,this.fog=s.fog,this}}class MeshMatcapMaterial extends Material{constructor(s){super(),this.isMeshMatcapMaterial=!0,this.defines={MATCAP:""},this.type="MeshMatcapMaterial",this.color=new Color$1(16777215),this.matcap=null,this.map=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=TangentSpaceNormalMap,this.normalScale=new Vector2(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.flatShading=!1,this.fog=!0,this.setValues(s)}copy(s){return super.copy(s),this.defines={MATCAP:""},this.color.copy(s.color),this.matcap=s.matcap,this.map=s.map,this.bumpMap=s.bumpMap,this.bumpScale=s.bumpScale,this.normalMap=s.normalMap,this.normalMapType=s.normalMapType,this.normalScale.copy(s.normalScale),this.displacementMap=s.displacementMap,this.displacementScale=s.displacementScale,this.displacementBias=s.displacementBias,this.alphaMap=s.alphaMap,this.flatShading=s.flatShading,this.fog=s.fog,this}}class LineDashedMaterial extends LineBasicMaterial{constructor(s){super(),this.isLineDashedMaterial=!0,this.type="LineDashedMaterial",this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(s)}copy(s){return super.copy(s),this.scale=s.scale,this.dashSize=s.dashSize,this.gapSize=s.gapSize,this}}function convertArray(o,s,a){return!o||!a&&o.constructor===s?o:typeof s.BYTES_PER_ELEMENT=="number"?new s(o):Array.prototype.slice.call(o)}function isTypedArray(o){return ArrayBuffer.isView(o)&&!(o instanceof DataView)}function getKeyframeOrder(o){function s(_e,bt){return o[_e]-o[bt]}const a=o.length,b=new Array(a);for(let _e=0;_e!==a;++_e)b[_e]=_e;return b.sort(s),b}function sortedArray(o,s,a){const b=o.length,_e=new o.constructor(b);for(let bt=0,rn=0;rn!==b;++bt){const sn=a[bt]*s;for(let yn=0;yn!==s;++yn)_e[rn++]=o[sn+yn]}return _e}function flattenJSON(o,s,a,b){let _e=1,bt=o[0];for(;bt!==void 0&&bt[b]===void 0;)bt=o[_e++];if(bt===void 0)return;let rn=bt[b];if(rn!==void 0)if(Array.isArray(rn))do rn=bt[b],rn!==void 0&&(s.push(bt.time),a.push.apply(a,rn)),bt=o[_e++];while(bt!==void 0);else if(rn.toArray!==void 0)do rn=bt[b],rn!==void 0&&(s.push(bt.time),rn.toArray(a,a.length)),bt=o[_e++];while(bt!==void 0);else do rn=bt[b],rn!==void 0&&(s.push(bt.time),a.push(rn)),bt=o[_e++];while(bt!==void 0)}function subclip(o,s,a,b,_e=30){const bt=o.clone();bt.name=s;const rn=[];for(let yn=0;yn<bt.tracks.length;++yn){const Pn=bt.tracks[yn],zn=Pn.getValueSize(),lr=[],ar=[];for(let cr=0;cr<Pn.times.length;++cr){const hr=Pn.times[cr]*_e;if(!(hr<a||hr>=b)){lr.push(Pn.times[cr]);for(let es=0;es<zn;++es)ar.push(Pn.values[cr*zn+es])}}lr.length!==0&&(Pn.times=convertArray(lr,Pn.times.constructor),Pn.values=convertArray(ar,Pn.values.constructor),rn.push(Pn))}bt.tracks=rn;let sn=1/0;for(let yn=0;yn<bt.tracks.length;++yn)sn>bt.tracks[yn].times[0]&&(sn=bt.tracks[yn].times[0]);for(let yn=0;yn<bt.tracks.length;++yn)bt.tracks[yn].shift(-1*sn);return bt.resetDuration(),bt}function makeClipAdditive(o,s=0,a=o,b=30){b<=0&&(b=30);const _e=a.tracks.length,bt=s/b;for(let rn=0;rn<_e;++rn){const sn=a.tracks[rn],yn=sn.ValueTypeName;if(yn==="bool"||yn==="string")continue;const Pn=o.tracks.find(function(Dr){return Dr.name===sn.name&&Dr.ValueTypeName===yn});if(Pn===void 0)continue;let zn=0;const lr=sn.getValueSize();sn.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline&&(zn=lr/3);let ar=0;const cr=Pn.getValueSize();Pn.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline&&(ar=cr/3);const hr=sn.times.length-1;let es;if(bt<=sn.times[0]){const Dr=zn,zr=lr-zn;es=sn.values.slice(Dr,zr)}else if(bt>=sn.times[hr]){const Dr=hr*lr+zn,zr=Dr+lr-zn;es=sn.values.slice(Dr,zr)}else{const Dr=sn.createInterpolant(),zr=zn,rs=lr-zn;Dr.evaluate(bt),es=Dr.resultBuffer.slice(zr,rs)}yn==="quaternion"&&new Quaternion().fromArray(es).normalize().conjugate().toArray(es);const Ur=Pn.times.length;for(let Dr=0;Dr<Ur;++Dr){const zr=Dr*cr+ar;if(yn==="quaternion")Quaternion.multiplyQuaternionsFlat(Pn.values,zr,es,0,Pn.values,zr);else{const rs=cr-ar*2;for(let as=0;as<rs;++as)Pn.values[zr+as]-=es[as]}}}return o.blendMode=AdditiveAnimationBlendMode,o}const AnimationUtils={convertArray,isTypedArray,getKeyframeOrder,sortedArray,flattenJSON,subclip,makeClipAdditive};class Interpolant{constructor(s,a,b,_e){this.parameterPositions=s,this._cachedIndex=0,this.resultBuffer=_e!==void 0?_e:new a.constructor(b),this.sampleValues=a,this.valueSize=b,this.settings=null,this.DefaultSettings_={}}evaluate(s){const a=this.parameterPositions;let b=this._cachedIndex,_e=a[b],bt=a[b-1];e:{t:{let rn;n:{r:if(!(s<_e)){for(let sn=b+2;;){if(_e===void 0){if(s<bt)break r;return b=a.length,this._cachedIndex=b,this.copySampleValue_(b-1)}if(b===sn)break;if(bt=_e,_e=a[++b],s<_e)break t}rn=a.length;break n}if(!(s>=bt)){const sn=a[1];s<sn&&(b=2,bt=sn);for(let yn=b-2;;){if(bt===void 0)return this._cachedIndex=0,this.copySampleValue_(0);if(b===yn)break;if(_e=bt,bt=a[--b-1],s>=bt)break t}rn=b,b=0;break n}break e}for(;b<rn;){const sn=b+rn>>>1;s<a[sn]?rn=sn:b=sn+1}if(_e=a[b],bt=a[b-1],bt===void 0)return this._cachedIndex=0,this.copySampleValue_(0);if(_e===void 0)return b=a.length,this._cachedIndex=b,this.copySampleValue_(b-1)}this._cachedIndex=b,this.intervalChanged_(b,bt,_e)}return this.interpolate_(b,bt,s,_e)}getSettings_(){return this.settings||this.DefaultSettings_}copySampleValue_(s){const a=this.resultBuffer,b=this.sampleValues,_e=this.valueSize,bt=s*_e;for(let rn=0;rn!==_e;++rn)a[rn]=b[bt+rn];return a}interpolate_(){throw new Error("call to abstract method")}intervalChanged_(){}}class CubicInterpolant extends Interpolant{constructor(s,a,b,_e){super(s,a,b,_e),this._weightPrev=-0,this._offsetPrev=-0,this._weightNext=-0,this._offsetNext=-0,this.DefaultSettings_={endingStart:ZeroCurvatureEnding,endingEnd:ZeroCurvatureEnding}}intervalChanged_(s,a,b){const _e=this.parameterPositions;let bt=s-2,rn=s+1,sn=_e[bt],yn=_e[rn];if(sn===void 0)switch(this.getSettings_().endingStart){case ZeroSlopeEnding:bt=s,sn=2*a-b;break;case WrapAroundEnding:bt=_e.length-2,sn=a+_e[bt]-_e[bt+1];break;default:bt=s,sn=b}if(yn===void 0)switch(this.getSettings_().endingEnd){case ZeroSlopeEnding:rn=s,yn=2*b-a;break;case WrapAroundEnding:rn=1,yn=b+_e[1]-_e[0];break;default:rn=s-1,yn=a}const Pn=(b-a)*.5,zn=this.valueSize;this._weightPrev=Pn/(a-sn),this._weightNext=Pn/(yn-b),this._offsetPrev=bt*zn,this._offsetNext=rn*zn}interpolate_(s,a,b,_e){const bt=this.resultBuffer,rn=this.sampleValues,sn=this.valueSize,yn=s*sn,Pn=yn-sn,zn=this._offsetPrev,lr=this._offsetNext,ar=this._weightPrev,cr=this._weightNext,hr=(b-a)/(_e-a),es=hr*hr,Ur=es*hr,Dr=-ar*Ur+2*ar*es-ar*hr,zr=(1+ar)*Ur+(-1.5-2*ar)*es+(-.5+ar)*hr+1,rs=(-1-cr)*Ur+(1.5+cr)*es+.5*hr,as=cr*Ur-cr*es;for(let os=0;os!==sn;++os)bt[os]=Dr*rn[zn+os]+zr*rn[Pn+os]+rs*rn[yn+os]+as*rn[lr+os];return bt}}class LinearInterpolant extends Interpolant{constructor(s,a,b,_e){super(s,a,b,_e)}interpolate_(s,a,b,_e){const bt=this.resultBuffer,rn=this.sampleValues,sn=this.valueSize,yn=s*sn,Pn=yn-sn,zn=(b-a)/(_e-a),lr=1-zn;for(let ar=0;ar!==sn;++ar)bt[ar]=rn[Pn+ar]*lr+rn[yn+ar]*zn;return bt}}class DiscreteInterpolant extends Interpolant{constructor(s,a,b,_e){super(s,a,b,_e)}interpolate_(s){return this.copySampleValue_(s-1)}}class KeyframeTrack{constructor(s,a,b,_e){if(s===void 0)throw new Error("THREE.KeyframeTrack: track name is undefined");if(a===void 0||a.length===0)throw new Error("THREE.KeyframeTrack: no keyframes in track named "+s);this.name=s,this.times=convertArray(a,this.TimeBufferType),this.values=convertArray(b,this.ValueBufferType),this.setInterpolation(_e||this.DefaultInterpolation)}static toJSON(s){const a=s.constructor;let b;if(a.toJSON!==this.toJSON)b=a.toJSON(s);else{b={name:s.name,times:convertArray(s.times,Array),values:convertArray(s.values,Array)};const _e=s.getInterpolation();_e!==s.DefaultInterpolation&&(b.interpolation=_e)}return b.type=s.ValueTypeName,b}InterpolantFactoryMethodDiscrete(s){return new DiscreteInterpolant(this.times,this.values,this.getValueSize(),s)}InterpolantFactoryMethodLinear(s){return new LinearInterpolant(this.times,this.values,this.getValueSize(),s)}InterpolantFactoryMethodSmooth(s){return new CubicInterpolant(this.times,this.values,this.getValueSize(),s)}setInterpolation(s){let a;switch(s){case InterpolateDiscrete:a=this.InterpolantFactoryMethodDiscrete;break;case InterpolateLinear:a=this.InterpolantFactoryMethodLinear;break;case InterpolateSmooth:a=this.InterpolantFactoryMethodSmooth;break}if(a===void 0){const b="unsupported interpolation for "+this.ValueTypeName+" keyframe track named "+this.name;if(this.createInterpolant===void 0)if(s!==this.DefaultInterpolation)this.setInterpolation(this.DefaultInterpolation);else throw new Error(b);return console.warn("THREE.KeyframeTrack:",b),this}return this.createInterpolant=a,this}getInterpolation(){switch(this.createInterpolant){case this.InterpolantFactoryMethodDiscrete:return InterpolateDiscrete;case this.InterpolantFactoryMethodLinear:return InterpolateLinear;case this.InterpolantFactoryMethodSmooth:return InterpolateSmooth}}getValueSize(){return this.values.length/this.times.length}shift(s){if(s!==0){const a=this.times;for(let b=0,_e=a.length;b!==_e;++b)a[b]+=s}return this}scale(s){if(s!==1){const a=this.times;for(let b=0,_e=a.length;b!==_e;++b)a[b]*=s}return this}trim(s,a){const b=this.times,_e=b.length;let bt=0,rn=_e-1;for(;bt!==_e&&b[bt]<s;)++bt;for(;rn!==-1&&b[rn]>a;)--rn;if(++rn,bt!==0||rn!==_e){bt>=rn&&(rn=Math.max(rn,1),bt=rn-1);const sn=this.getValueSize();this.times=b.slice(bt,rn),this.values=this.values.slice(bt*sn,rn*sn)}return this}validate(){let s=!0;const a=this.getValueSize();a-Math.floor(a)!==0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),s=!1);const b=this.times,_e=this.values,bt=b.length;bt===0&&(console.error("THREE.KeyframeTrack: Track is empty.",this),s=!1);let rn=null;for(let sn=0;sn!==bt;sn++){const yn=b[sn];if(typeof yn=="number"&&isNaN(yn)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,sn,yn),s=!1;break}if(rn!==null&&rn>yn){console.error("THREE.KeyframeTrack: Out of order keys.",this,sn,yn,rn),s=!1;break}rn=yn}if(_e!==void 0&&isTypedArray(_e))for(let sn=0,yn=_e.length;sn!==yn;++sn){const Pn=_e[sn];if(isNaN(Pn)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,sn,Pn),s=!1;break}}return s}optimize(){const s=this.times.slice(),a=this.values.slice(),b=this.getValueSize(),_e=this.getInterpolation()===InterpolateSmooth,bt=s.length-1;let rn=1;for(let sn=1;sn<bt;++sn){let yn=!1;const Pn=s[sn],zn=s[sn+1];if(Pn!==zn&&(sn!==1||Pn!==s[0]))if(_e)yn=!0;else{const lr=sn*b,ar=lr-b,cr=lr+b;for(let hr=0;hr!==b;++hr){const es=a[lr+hr];if(es!==a[ar+hr]||es!==a[cr+hr]){yn=!0;break}}}if(yn){if(sn!==rn){s[rn]=s[sn];const lr=sn*b,ar=rn*b;for(let cr=0;cr!==b;++cr)a[ar+cr]=a[lr+cr]}++rn}}if(bt>0){s[rn]=s[bt];for(let sn=bt*b,yn=rn*b,Pn=0;Pn!==b;++Pn)a[yn+Pn]=a[sn+Pn];++rn}return rn!==s.length?(this.times=s.slice(0,rn),this.values=a.slice(0,rn*b)):(this.times=s,this.values=a),this}clone(){const s=this.times.slice(),a=this.values.slice(),b=this.constructor,_e=new b(this.name,s,a);return _e.createInterpolant=this.createInterpolant,_e}}KeyframeTrack.prototype.TimeBufferType=Float32Array;KeyframeTrack.prototype.ValueBufferType=Float32Array;KeyframeTrack.prototype.DefaultInterpolation=InterpolateLinear;class BooleanKeyframeTrack extends KeyframeTrack{}BooleanKeyframeTrack.prototype.ValueTypeName="bool";BooleanKeyframeTrack.prototype.ValueBufferType=Array;BooleanKeyframeTrack.prototype.DefaultInterpolation=InterpolateDiscrete;BooleanKeyframeTrack.prototype.InterpolantFactoryMethodLinear=void 0;BooleanKeyframeTrack.prototype.InterpolantFactoryMethodSmooth=void 0;class ColorKeyframeTrack extends KeyframeTrack{}ColorKeyframeTrack.prototype.ValueTypeName="color";class NumberKeyframeTrack extends KeyframeTrack{}NumberKeyframeTrack.prototype.ValueTypeName="number";class QuaternionLinearInterpolant extends Interpolant{constructor(s,a,b,_e){super(s,a,b,_e)}interpolate_(s,a,b,_e){const bt=this.resultBuffer,rn=this.sampleValues,sn=this.valueSize,yn=(b-a)/(_e-a);let Pn=s*sn;for(let zn=Pn+sn;Pn!==zn;Pn+=4)Quaternion.slerpFlat(bt,0,rn,Pn-sn,rn,Pn,yn);return bt}}class QuaternionKeyframeTrack extends KeyframeTrack{InterpolantFactoryMethodLinear(s){return new QuaternionLinearInterpolant(this.times,this.values,this.getValueSize(),s)}}QuaternionKeyframeTrack.prototype.ValueTypeName="quaternion";QuaternionKeyframeTrack.prototype.DefaultInterpolation=InterpolateLinear;QuaternionKeyframeTrack.prototype.InterpolantFactoryMethodSmooth=void 0;class StringKeyframeTrack extends KeyframeTrack{}StringKeyframeTrack.prototype.ValueTypeName="string";StringKeyframeTrack.prototype.ValueBufferType=Array;StringKeyframeTrack.prototype.DefaultInterpolation=InterpolateDiscrete;StringKeyframeTrack.prototype.InterpolantFactoryMethodLinear=void 0;StringKeyframeTrack.prototype.InterpolantFactoryMethodSmooth=void 0;class VectorKeyframeTrack extends KeyframeTrack{}VectorKeyframeTrack.prototype.ValueTypeName="vector";class AnimationClip{constructor(s,a=-1,b,_e=NormalAnimationBlendMode){this.name=s,this.tracks=b,this.duration=a,this.blendMode=_e,this.uuid=generateUUID(),this.duration<0&&this.resetDuration()}static parse(s){const a=[],b=s.tracks,_e=1/(s.fps||1);for(let rn=0,sn=b.length;rn!==sn;++rn)a.push(parseKeyframeTrack(b[rn]).scale(_e));const bt=new this(s.name,s.duration,a,s.blendMode);return bt.uuid=s.uuid,bt}static toJSON(s){const a=[],b=s.tracks,_e={name:s.name,duration:s.duration,tracks:a,uuid:s.uuid,blendMode:s.blendMode};for(let bt=0,rn=b.length;bt!==rn;++bt)a.push(KeyframeTrack.toJSON(b[bt]));return _e}static CreateFromMorphTargetSequence(s,a,b,_e){const bt=a.length,rn=[];for(let sn=0;sn<bt;sn++){let yn=[],Pn=[];yn.push((sn+bt-1)%bt,sn,(sn+1)%bt),Pn.push(0,1,0);const zn=getKeyframeOrder(yn);yn=sortedArray(yn,1,zn),Pn=sortedArray(Pn,1,zn),!_e&&yn[0]===0&&(yn.push(bt),Pn.push(Pn[0])),rn.push(new NumberKeyframeTrack(".morphTargetInfluences["+a[sn].name+"]",yn,Pn).scale(1/b))}return new this(s,-1,rn)}static findByName(s,a){let b=s;if(!Array.isArray(s)){const _e=s;b=_e.geometry&&_e.geometry.animations||_e.animations}for(let _e=0;_e<b.length;_e++)if(b[_e].name===a)return b[_e];return null}static CreateClipsFromMorphTargetSequences(s,a,b){const _e={},bt=/^([\w-]*?)([\d]+)$/;for(let sn=0,yn=s.length;sn<yn;sn++){const Pn=s[sn],zn=Pn.name.match(bt);if(zn&&zn.length>1){const lr=zn[1];let ar=_e[lr];ar||(_e[lr]=ar=[]),ar.push(Pn)}}const rn=[];for(const sn in _e)rn.push(this.CreateFromMorphTargetSequence(sn,_e[sn],a,b));return rn}static parseAnimation(s,a){if(!s)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;const b=function(lr,ar,cr,hr,es){if(cr.length!==0){const Ur=[],Dr=[];flattenJSON(cr,Ur,Dr,hr),Ur.length!==0&&es.push(new lr(ar,Ur,Dr))}},_e=[],bt=s.name||"default",rn=s.fps||30,sn=s.blendMode;let yn=s.length||-1;const Pn=s.hierarchy||[];for(let lr=0;lr<Pn.length;lr++){const ar=Pn[lr].keys;if(!(!ar||ar.length===0))if(ar[0].morphTargets){const cr={};let hr;for(hr=0;hr<ar.length;hr++)if(ar[hr].morphTargets)for(let es=0;es<ar[hr].morphTargets.length;es++)cr[ar[hr].morphTargets[es]]=-1;for(const es in cr){const Ur=[],Dr=[];for(let zr=0;zr!==ar[hr].morphTargets.length;++zr){const rs=ar[hr];Ur.push(rs.time),Dr.push(rs.morphTarget===es?1:0)}_e.push(new NumberKeyframeTrack(".morphTargetInfluence["+es+"]",Ur,Dr))}yn=cr.length*rn}else{const cr=".bones["+a[lr].name+"]";b(VectorKeyframeTrack,cr+".position",ar,"pos",_e),b(QuaternionKeyframeTrack,cr+".quaternion",ar,"rot",_e),b(VectorKeyframeTrack,cr+".scale",ar,"scl",_e)}}return _e.length===0?null:new this(bt,yn,_e,sn)}resetDuration(){const s=this.tracks;let a=0;for(let b=0,_e=s.length;b!==_e;++b){const bt=this.tracks[b];a=Math.max(a,bt.times[bt.times.length-1])}return this.duration=a,this}trim(){for(let s=0;s<this.tracks.length;s++)this.tracks[s].trim(0,this.duration);return this}validate(){let s=!0;for(let a=0;a<this.tracks.length;a++)s=s&&this.tracks[a].validate();return s}optimize(){for(let s=0;s<this.tracks.length;s++)this.tracks[s].optimize();return this}clone(){const s=[];for(let a=0;a<this.tracks.length;a++)s.push(this.tracks[a].clone());return new this.constructor(this.name,this.duration,s,this.blendMode)}toJSON(){return this.constructor.toJSON(this)}}function getTrackTypeForValueTypeName(o){switch(o.toLowerCase()){case"scalar":case"double":case"float":case"number":case"integer":return NumberKeyframeTrack;case"vector":case"vector2":case"vector3":case"vector4":return VectorKeyframeTrack;case"color":return ColorKeyframeTrack;case"quaternion":return QuaternionKeyframeTrack;case"bool":case"boolean":return BooleanKeyframeTrack;case"string":return StringKeyframeTrack}throw new Error("THREE.KeyframeTrack: Unsupported typeName: "+o)}function parseKeyframeTrack(o){if(o.type===void 0)throw new Error("THREE.KeyframeTrack: track type undefined, can not parse");const s=getTrackTypeForValueTypeName(o.type);if(o.times===void 0){const a=[],b=[];flattenJSON(o.keys,a,b,"value"),o.times=a,o.values=b}return s.parse!==void 0?s.parse(o):new s(o.name,o.times,o.values,o.interpolation)}const Cache={enabled:!1,files:{},add:function(o,s){this.enabled!==!1&&(this.files[o]=s)},get:function(o){if(this.enabled!==!1)return this.files[o]},remove:function(o){delete this.files[o]},clear:function(){this.files={}}};class LoadingManager{constructor(s,a,b){const _e=this;let bt=!1,rn=0,sn=0,yn;const Pn=[];this.onStart=void 0,this.onLoad=s,this.onProgress=a,this.onError=b,this.itemStart=function(zn){sn++,bt===!1&&_e.onStart!==void 0&&_e.onStart(zn,rn,sn),bt=!0},this.itemEnd=function(zn){rn++,_e.onProgress!==void 0&&_e.onProgress(zn,rn,sn),rn===sn&&(bt=!1,_e.onLoad!==void 0&&_e.onLoad())},this.itemError=function(zn){_e.onError!==void 0&&_e.onError(zn)},this.resolveURL=function(zn){return yn?yn(zn):zn},this.setURLModifier=function(zn){return yn=zn,this},this.addHandler=function(zn,lr){return Pn.push(zn,lr),this},this.removeHandler=function(zn){const lr=Pn.indexOf(zn);return lr!==-1&&Pn.splice(lr,2),this},this.getHandler=function(zn){for(let lr=0,ar=Pn.length;lr<ar;lr+=2){const cr=Pn[lr],hr=Pn[lr+1];if(cr.global&&(cr.lastIndex=0),cr.test(zn))return hr}return null}}}const DefaultLoadingManager=new LoadingManager;class Loader{constructor(s){this.manager=s!==void 0?s:DefaultLoadingManager,this.crossOrigin="anonymous",this.withCredentials=!1,this.path="",this.resourcePath="",this.requestHeader={}}load(){}loadAsync(s,a){const b=this;return new Promise(function(_e,bt){b.load(s,_e,a,bt)})}parse(){}setCrossOrigin(s){return this.crossOrigin=s,this}setWithCredentials(s){return this.withCredentials=s,this}setPath(s){return this.path=s,this}setResourcePath(s){return this.resourcePath=s,this}setRequestHeader(s){return this.requestHeader=s,this}}Loader.DEFAULT_MATERIAL_NAME="__DEFAULT";const loading={};class HttpError extends Error{constructor(s,a){super(s),this.response=a}}class FileLoader extends Loader{constructor(s){super(s)}load(s,a,b,_e){s===void 0&&(s=""),this.path!==void 0&&(s=this.path+s),s=this.manager.resolveURL(s);const bt=Cache.get(s);if(bt!==void 0)return this.manager.itemStart(s),setTimeout(()=>{a&&a(bt),this.manager.itemEnd(s)},0),bt;if(loading[s]!==void 0){loading[s].push({onLoad:a,onProgress:b,onError:_e});return}loading[s]=[],loading[s].push({onLoad:a,onProgress:b,onError:_e});const rn=new Request(s,{headers:new Headers(this.requestHeader),credentials:this.withCredentials?"include":"same-origin"}),sn=this.mimeType,yn=this.responseType;fetch(rn).then(Pn=>{if(Pn.status===200||Pn.status===0){if(Pn.status===0&&console.warn("THREE.FileLoader: HTTP Status 0 received."),typeof ReadableStream>"u"||Pn.body===void 0||Pn.body.getReader===void 0)return Pn;const zn=loading[s],lr=Pn.body.getReader(),ar=Pn.headers.get("Content-Length")||Pn.headers.get("X-File-Size"),cr=ar?parseInt(ar):0,hr=cr!==0;let es=0;const Ur=new ReadableStream({start(Dr){zr();function zr(){lr.read().then(({done:rs,value:as})=>{if(rs)Dr.close();else{es+=as.byteLength;const os=new ProgressEvent("progress",{lengthComputable:hr,loaded:es,total:cr});for(let ls=0,zs=zn.length;ls<zs;ls++){const ho=zn[ls];ho.onProgress&&ho.onProgress(os)}Dr.enqueue(as),zr()}})}}});return new Response(Ur)}else throw new HttpError(`fetch for "${Pn.url}" responded with ${Pn.status}: ${Pn.statusText}`,Pn)}).then(Pn=>{switch(yn){case"arraybuffer":return Pn.arrayBuffer();case"blob":return Pn.blob();case"document":return Pn.text().then(zn=>new DOMParser().parseFromString(zn,sn));case"json":return Pn.json();default:if(sn===void 0)return Pn.text();{const lr=/charset="?([^;"\s]*)"?/i.exec(sn),ar=lr&&lr[1]?lr[1].toLowerCase():void 0,cr=new TextDecoder(ar);return Pn.arrayBuffer().then(hr=>cr.decode(hr))}}}).then(Pn=>{Cache.add(s,Pn);const zn=loading[s];delete loading[s];for(let lr=0,ar=zn.length;lr<ar;lr++){const cr=zn[lr];cr.onLoad&&cr.onLoad(Pn)}}).catch(Pn=>{const zn=loading[s];if(zn===void 0)throw this.manager.itemError(s),Pn;delete loading[s];for(let lr=0,ar=zn.length;lr<ar;lr++){const cr=zn[lr];cr.onError&&cr.onError(Pn)}this.manager.itemError(s)}).finally(()=>{this.manager.itemEnd(s)}),this.manager.itemStart(s)}setResponseType(s){return this.responseType=s,this}setMimeType(s){return this.mimeType=s,this}}class AnimationLoader extends Loader{constructor(s){super(s)}load(s,a,b,_e){const bt=this,rn=new FileLoader(this.manager);rn.setPath(this.path),rn.setRequestHeader(this.requestHeader),rn.setWithCredentials(this.withCredentials),rn.load(s,function(sn){try{a(bt.parse(JSON.parse(sn)))}catch(yn){_e?_e(yn):console.error(yn),bt.manager.itemError(s)}},b,_e)}parse(s){const a=[];for(let b=0;b<s.length;b++){const _e=AnimationClip.parse(s[b]);a.push(_e)}return a}}class CompressedTextureLoader extends Loader{constructor(s){super(s)}load(s,a,b,_e){const bt=this,rn=[],sn=new CompressedTexture,yn=new FileLoader(this.manager);yn.setPath(this.path),yn.setResponseType("arraybuffer"),yn.setRequestHeader(this.requestHeader),yn.setWithCredentials(bt.withCredentials);let Pn=0;function zn(lr){yn.load(s[lr],function(ar){const cr=bt.parse(ar,!0);rn[lr]={width:cr.width,height:cr.height,format:cr.format,mipmaps:cr.mipmaps},Pn+=1,Pn===6&&(cr.mipmapCount===1&&(sn.minFilter=LinearFilter),sn.image=rn,sn.format=cr.format,sn.needsUpdate=!0,a&&a(sn))},b,_e)}if(Array.isArray(s))for(let lr=0,ar=s.length;lr<ar;++lr)zn(lr);else yn.load(s,function(lr){const ar=bt.parse(lr,!0);if(ar.isCubemap){const cr=ar.mipmaps.length/ar.mipmapCount;for(let hr=0;hr<cr;hr++){rn[hr]={mipmaps:[]};for(let es=0;es<ar.mipmapCount;es++)rn[hr].mipmaps.push(ar.mipmaps[hr*ar.mipmapCount+es]),rn[hr].format=ar.format,rn[hr].width=ar.width,rn[hr].height=ar.height}sn.image=rn}else sn.image.width=ar.width,sn.image.height=ar.height,sn.mipmaps=ar.mipmaps;ar.mipmapCount===1&&(sn.minFilter=LinearFilter),sn.format=ar.format,sn.needsUpdate=!0,a&&a(sn)},b,_e);return sn}}class ImageLoader extends Loader{constructor(s){super(s)}load(s,a,b,_e){this.path!==void 0&&(s=this.path+s),s=this.manager.resolveURL(s);const bt=this,rn=Cache.get(s);if(rn!==void 0)return bt.manager.itemStart(s),setTimeout(function(){a&&a(rn),bt.manager.itemEnd(s)},0),rn;const sn=createElementNS("img");function yn(){zn(),Cache.add(s,this),a&&a(this),bt.manager.itemEnd(s)}function Pn(lr){zn(),_e&&_e(lr),bt.manager.itemError(s),bt.manager.itemEnd(s)}function zn(){sn.removeEventListener("load",yn,!1),sn.removeEventListener("error",Pn,!1)}return sn.addEventListener("load",yn,!1),sn.addEventListener("error",Pn,!1),s.slice(0,5)!=="data:"&&this.crossOrigin!==void 0&&(sn.crossOrigin=this.crossOrigin),bt.manager.itemStart(s),sn.src=s,sn}}class CubeTextureLoader extends Loader{constructor(s){super(s)}load(s,a,b,_e){const bt=new CubeTexture;bt.colorSpace=SRGBColorSpace$1;const rn=new ImageLoader(this.manager);rn.setCrossOrigin(this.crossOrigin),rn.setPath(this.path);let sn=0;function yn(Pn){rn.load(s[Pn],function(zn){bt.images[Pn]=zn,sn++,sn===6&&(bt.needsUpdate=!0,a&&a(bt))},void 0,_e)}for(let Pn=0;Pn<s.length;++Pn)yn(Pn);return bt}}class DataTextureLoader extends Loader{constructor(s){super(s)}load(s,a,b,_e){const bt=this,rn=new DataTexture,sn=new FileLoader(this.manager);return sn.setResponseType("arraybuffer"),sn.setRequestHeader(this.requestHeader),sn.setPath(this.path),sn.setWithCredentials(bt.withCredentials),sn.load(s,function(yn){let Pn;try{Pn=bt.parse(yn)}catch(zn){if(_e!==void 0)_e(zn);else{console.error(zn);return}}Pn.image!==void 0?rn.image=Pn.image:Pn.data!==void 0&&(rn.image.width=Pn.width,rn.image.height=Pn.height,rn.image.data=Pn.data),rn.wrapS=Pn.wrapS!==void 0?Pn.wrapS:ClampToEdgeWrapping,rn.wrapT=Pn.wrapT!==void 0?Pn.wrapT:ClampToEdgeWrapping,rn.magFilter=Pn.magFilter!==void 0?Pn.magFilter:LinearFilter,rn.minFilter=Pn.minFilter!==void 0?Pn.minFilter:LinearFilter,rn.anisotropy=Pn.anisotropy!==void 0?Pn.anisotropy:1,Pn.colorSpace!==void 0?rn.colorSpace=Pn.colorSpace:Pn.encoding!==void 0&&(rn.encoding=Pn.encoding),Pn.flipY!==void 0&&(rn.flipY=Pn.flipY),Pn.format!==void 0&&(rn.format=Pn.format),Pn.type!==void 0&&(rn.type=Pn.type),Pn.mipmaps!==void 0&&(rn.mipmaps=Pn.mipmaps,rn.minFilter=LinearMipmapLinearFilter),Pn.mipmapCount===1&&(rn.minFilter=LinearFilter),Pn.generateMipmaps!==void 0&&(rn.generateMipmaps=Pn.generateMipmaps),rn.needsUpdate=!0,a&&a(rn,Pn)},b,_e),rn}}class TextureLoader extends Loader{constructor(s){super(s)}load(s,a,b,_e){const bt=new Texture,rn=new ImageLoader(this.manager);return rn.setCrossOrigin(this.crossOrigin),rn.setPath(this.path),rn.load(s,function(sn){bt.image=sn,bt.needsUpdate=!0,a!==void 0&&a(bt)},b,_e),bt}}class Light extends Object3D{constructor(s,a=1){super(),this.isLight=!0,this.type="Light",this.color=new Color$1(s),this.intensity=a}dispose(){}copy(s,a){return super.copy(s,a),this.color.copy(s.color),this.intensity=s.intensity,this}toJSON(s){const a=super.toJSON(s);return a.object.color=this.color.getHex(),a.object.intensity=this.intensity,this.groundColor!==void 0&&(a.object.groundColor=this.groundColor.getHex()),this.distance!==void 0&&(a.object.distance=this.distance),this.angle!==void 0&&(a.object.angle=this.angle),this.decay!==void 0&&(a.object.decay=this.decay),this.penumbra!==void 0&&(a.object.penumbra=this.penumbra),this.shadow!==void 0&&(a.object.shadow=this.shadow.toJSON()),a}}class HemisphereLight extends Light{constructor(s,a,b){super(s,b),this.isHemisphereLight=!0,this.type="HemisphereLight",this.position.copy(Object3D.DEFAULT_UP),this.updateMatrix(),this.groundColor=new Color$1(a)}copy(s,a){return super.copy(s,a),this.groundColor.copy(s.groundColor),this}}const _projScreenMatrix$1=new Matrix4,_lightPositionWorld$1=new Vector3,_lookTarget$1=new Vector3;class LightShadow{constructor(s){this.camera=s,this.bias=0,this.normalBias=0,this.radius=1,this.blurSamples=8,this.mapSize=new Vector2(512,512),this.map=null,this.mapPass=null,this.matrix=new Matrix4,this.autoUpdate=!0,this.needsUpdate=!1,this._frustum=new Frustum,this._frameExtents=new Vector2(1,1),this._viewportCount=1,this._viewports=[new Vector4(0,0,1,1)]}getViewportCount(){return this._viewportCount}getFrustum(){return this._frustum}updateMatrices(s){const a=this.camera,b=this.matrix;_lightPositionWorld$1.setFromMatrixPosition(s.matrixWorld),a.position.copy(_lightPositionWorld$1),_lookTarget$1.setFromMatrixPosition(s.target.matrixWorld),a.lookAt(_lookTarget$1),a.updateMatrixWorld(),_projScreenMatrix$1.multiplyMatrices(a.projectionMatrix,a.matrixWorldInverse),this._frustum.setFromProjectionMatrix(_projScreenMatrix$1),b.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),b.multiply(_projScreenMatrix$1)}getViewport(s){return this._viewports[s]}getFrameExtents(){return this._frameExtents}dispose(){this.map&&this.map.dispose(),this.mapPass&&this.mapPass.dispose()}copy(s){return this.camera=s.camera.clone(),this.bias=s.bias,this.radius=s.radius,this.mapSize.copy(s.mapSize),this}clone(){return new this.constructor().copy(this)}toJSON(){const s={};return this.bias!==0&&(s.bias=this.bias),this.normalBias!==0&&(s.normalBias=this.normalBias),this.radius!==1&&(s.radius=this.radius),(this.mapSize.x!==512||this.mapSize.y!==512)&&(s.mapSize=this.mapSize.toArray()),s.camera=this.camera.toJSON(!1).object,delete s.camera.matrix,s}}class SpotLightShadow extends LightShadow{constructor(){super(new PerspectiveCamera(50,1,.5,500)),this.isSpotLightShadow=!0,this.focus=1}updateMatrices(s){const a=this.camera,b=RAD2DEG*2*s.angle*this.focus,_e=this.mapSize.width/this.mapSize.height,bt=s.distance||a.far;(b!==a.fov||_e!==a.aspect||bt!==a.far)&&(a.fov=b,a.aspect=_e,a.far=bt,a.updateProjectionMatrix()),super.updateMatrices(s)}copy(s){return super.copy(s),this.focus=s.focus,this}}class SpotLight extends Light{constructor(s,a,b=0,_e=Math.PI/3,bt=0,rn=2){super(s,a),this.isSpotLight=!0,this.type="SpotLight",this.position.copy(Object3D.DEFAULT_UP),this.updateMatrix(),this.target=new Object3D,this.distance=b,this.angle=_e,this.penumbra=bt,this.decay=rn,this.map=null,this.shadow=new SpotLightShadow}get power(){return this.intensity*Math.PI}set power(s){this.intensity=s/Math.PI}dispose(){this.shadow.dispose()}copy(s,a){return super.copy(s,a),this.distance=s.distance,this.angle=s.angle,this.penumbra=s.penumbra,this.decay=s.decay,this.target=s.target.clone(),this.shadow=s.shadow.clone(),this}}const _projScreenMatrix=new Matrix4,_lightPositionWorld=new Vector3,_lookTarget=new Vector3;class PointLightShadow extends LightShadow{constructor(){super(new PerspectiveCamera(90,1,.5,500)),this.isPointLightShadow=!0,this._frameExtents=new Vector2(4,2),this._viewportCount=6,this._viewports=[new Vector4(2,1,1,1),new Vector4(0,1,1,1),new Vector4(3,1,1,1),new Vector4(1,1,1,1),new Vector4(3,0,1,1),new Vector4(1,0,1,1)],this._cubeDirections=[new Vector3(1,0,0),new Vector3(-1,0,0),new Vector3(0,0,1),new Vector3(0,0,-1),new Vector3(0,1,0),new Vector3(0,-1,0)],this._cubeUps=[new Vector3(0,1,0),new Vector3(0,1,0),new Vector3(0,1,0),new Vector3(0,1,0),new Vector3(0,0,1),new Vector3(0,0,-1)]}updateMatrices(s,a=0){const b=this.camera,_e=this.matrix,bt=s.distance||b.far;bt!==b.far&&(b.far=bt,b.updateProjectionMatrix()),_lightPositionWorld.setFromMatrixPosition(s.matrixWorld),b.position.copy(_lightPositionWorld),_lookTarget.copy(b.position),_lookTarget.add(this._cubeDirections[a]),b.up.copy(this._cubeUps[a]),b.lookAt(_lookTarget),b.updateMatrixWorld(),_e.makeTranslation(-_lightPositionWorld.x,-_lightPositionWorld.y,-_lightPositionWorld.z),_projScreenMatrix.multiplyMatrices(b.projectionMatrix,b.matrixWorldInverse),this._frustum.setFromProjectionMatrix(_projScreenMatrix)}}class PointLight extends Light{constructor(s,a,b=0,_e=2){super(s,a),this.isPointLight=!0,this.type="PointLight",this.distance=b,this.decay=_e,this.shadow=new PointLightShadow}get power(){return this.intensity*4*Math.PI}set power(s){this.intensity=s/(4*Math.PI)}dispose(){this.shadow.dispose()}copy(s,a){return super.copy(s,a),this.distance=s.distance,this.decay=s.decay,this.shadow=s.shadow.clone(),this}}class DirectionalLightShadow extends LightShadow{constructor(){super(new OrthographicCamera(-5,5,5,-5,.5,500)),this.isDirectionalLightShadow=!0}}class DirectionalLight extends Light{constructor(s,a){super(s,a),this.isDirectionalLight=!0,this.type="DirectionalLight",this.position.copy(Object3D.DEFAULT_UP),this.updateMatrix(),this.target=new Object3D,this.shadow=new DirectionalLightShadow}dispose(){this.shadow.dispose()}copy(s){return super.copy(s),this.target=s.target.clone(),this.shadow=s.shadow.clone(),this}}class AmbientLight extends Light{constructor(s,a){super(s,a),this.isAmbientLight=!0,this.type="AmbientLight"}}class RectAreaLight extends Light{constructor(s,a,b=10,_e=10){super(s,a),this.isRectAreaLight=!0,this.type="RectAreaLight",this.width=b,this.height=_e}get power(){return this.intensity*this.width*this.height*Math.PI}set power(s){this.intensity=s/(this.width*this.height*Math.PI)}copy(s){return super.copy(s),this.width=s.width,this.height=s.height,this}toJSON(s){const a=super.toJSON(s);return a.object.width=this.width,a.object.height=this.height,a}}class SphericalHarmonics3{constructor(){this.isSphericalHarmonics3=!0,this.coefficients=[];for(let s=0;s<9;s++)this.coefficients.push(new Vector3)}set(s){for(let a=0;a<9;a++)this.coefficients[a].copy(s[a]);return this}zero(){for(let s=0;s<9;s++)this.coefficients[s].set(0,0,0);return this}getAt(s,a){const b=s.x,_e=s.y,bt=s.z,rn=this.coefficients;return a.copy(rn[0]).multiplyScalar(.282095),a.addScaledVector(rn[1],.488603*_e),a.addScaledVector(rn[2],.488603*bt),a.addScaledVector(rn[3],.488603*b),a.addScaledVector(rn[4],1.092548*(b*_e)),a.addScaledVector(rn[5],1.092548*(_e*bt)),a.addScaledVector(rn[6],.315392*(3*bt*bt-1)),a.addScaledVector(rn[7],1.092548*(b*bt)),a.addScaledVector(rn[8],.546274*(b*b-_e*_e)),a}getIrradianceAt(s,a){const b=s.x,_e=s.y,bt=s.z,rn=this.coefficients;return a.copy(rn[0]).multiplyScalar(.886227),a.addScaledVector(rn[1],2*.511664*_e),a.addScaledVector(rn[2],2*.511664*bt),a.addScaledVector(rn[3],2*.511664*b),a.addScaledVector(rn[4],2*.429043*b*_e),a.addScaledVector(rn[5],2*.429043*_e*bt),a.addScaledVector(rn[6],.743125*bt*bt-.247708),a.addScaledVector(rn[7],2*.429043*b*bt),a.addScaledVector(rn[8],.429043*(b*b-_e*_e)),a}add(s){for(let a=0;a<9;a++)this.coefficients[a].add(s.coefficients[a]);return this}addScaledSH(s,a){for(let b=0;b<9;b++)this.coefficients[b].addScaledVector(s.coefficients[b],a);return this}scale(s){for(let a=0;a<9;a++)this.coefficients[a].multiplyScalar(s);return this}lerp(s,a){for(let b=0;b<9;b++)this.coefficients[b].lerp(s.coefficients[b],a);return this}equals(s){for(let a=0;a<9;a++)if(!this.coefficients[a].equals(s.coefficients[a]))return!1;return!0}copy(s){return this.set(s.coefficients)}clone(){return new this.constructor().copy(this)}fromArray(s,a=0){const b=this.coefficients;for(let _e=0;_e<9;_e++)b[_e].fromArray(s,a+_e*3);return this}toArray(s=[],a=0){const b=this.coefficients;for(let _e=0;_e<9;_e++)b[_e].toArray(s,a+_e*3);return s}static getBasisAt(s,a){const b=s.x,_e=s.y,bt=s.z;a[0]=.282095,a[1]=.488603*_e,a[2]=.488603*bt,a[3]=.488603*b,a[4]=1.092548*b*_e,a[5]=1.092548*_e*bt,a[6]=.315392*(3*bt*bt-1),a[7]=1.092548*b*bt,a[8]=.546274*(b*b-_e*_e)}}class LightProbe extends Light{constructor(s=new SphericalHarmonics3,a=1){super(void 0,a),this.isLightProbe=!0,this.sh=s}copy(s){return super.copy(s),this.sh.copy(s.sh),this}fromJSON(s){return this.intensity=s.intensity,this.sh.fromArray(s.sh),this}toJSON(s){const a=super.toJSON(s);return a.object.sh=this.sh.toArray(),a}}class MaterialLoader extends Loader{constructor(s){super(s),this.textures={}}load(s,a,b,_e){const bt=this,rn=new FileLoader(bt.manager);rn.setPath(bt.path),rn.setRequestHeader(bt.requestHeader),rn.setWithCredentials(bt.withCredentials),rn.load(s,function(sn){try{a(bt.parse(JSON.parse(sn)))}catch(yn){_e?_e(yn):console.error(yn),bt.manager.itemError(s)}},b,_e)}parse(s){const a=this.textures;function b(bt){return a[bt]===void 0&&console.warn("THREE.MaterialLoader: Undefined texture",bt),a[bt]}const _e=MaterialLoader.createMaterialFromType(s.type);if(s.uuid!==void 0&&(_e.uuid=s.uuid),s.name!==void 0&&(_e.name=s.name),s.color!==void 0&&_e.color!==void 0&&_e.color.setHex(s.color),s.roughness!==void 0&&(_e.roughness=s.roughness),s.metalness!==void 0&&(_e.metalness=s.metalness),s.sheen!==void 0&&(_e.sheen=s.sheen),s.sheenColor!==void 0&&(_e.sheenColor=new Color$1().setHex(s.sheenColor)),s.sheenRoughness!==void 0&&(_e.sheenRoughness=s.sheenRoughness),s.emissive!==void 0&&_e.emissive!==void 0&&_e.emissive.setHex(s.emissive),s.specular!==void 0&&_e.specular!==void 0&&_e.specular.setHex(s.specular),s.specularIntensity!==void 0&&(_e.specularIntensity=s.specularIntensity),s.specularColor!==void 0&&_e.specularColor!==void 0&&_e.specularColor.setHex(s.specularColor),s.shininess!==void 0&&(_e.shininess=s.shininess),s.clearcoat!==void 0&&(_e.clearcoat=s.clearcoat),s.clearcoatRoughness!==void 0&&(_e.clearcoatRoughness=s.clearcoatRoughness),s.iridescence!==void 0&&(_e.iridescence=s.iridescence),s.iridescenceIOR!==void 0&&(_e.iridescenceIOR=s.iridescenceIOR),s.iridescenceThicknessRange!==void 0&&(_e.iridescenceThicknessRange=s.iridescenceThicknessRange),s.transmission!==void 0&&(_e.transmission=s.transmission),s.thickness!==void 0&&(_e.thickness=s.thickness),s.attenuationDistance!==void 0&&(_e.attenuationDistance=s.attenuationDistance),s.attenuationColor!==void 0&&_e.attenuationColor!==void 0&&_e.attenuationColor.setHex(s.attenuationColor),s.anisotropy!==void 0&&(_e.anisotropy=s.anisotropy),s.anisotropyRotation!==void 0&&(_e.anisotropyRotation=s.anisotropyRotation),s.fog!==void 0&&(_e.fog=s.fog),s.flatShading!==void 0&&(_e.flatShading=s.flatShading),s.blending!==void 0&&(_e.blending=s.blending),s.combine!==void 0&&(_e.combine=s.combine),s.side!==void 0&&(_e.side=s.side),s.shadowSide!==void 0&&(_e.shadowSide=s.shadowSide),s.opacity!==void 0&&(_e.opacity=s.opacity),s.transparent!==void 0&&(_e.transparent=s.transparent),s.alphaTest!==void 0&&(_e.alphaTest=s.alphaTest),s.alphaHash!==void 0&&(_e.alphaHash=s.alphaHash),s.depthTest!==void 0&&(_e.depthTest=s.depthTest),s.depthWrite!==void 0&&(_e.depthWrite=s.depthWrite),s.colorWrite!==void 0&&(_e.colorWrite=s.colorWrite),s.stencilWrite!==void 0&&(_e.stencilWrite=s.stencilWrite),s.stencilWriteMask!==void 0&&(_e.stencilWriteMask=s.stencilWriteMask),s.stencilFunc!==void 0&&(_e.stencilFunc=s.stencilFunc),s.stencilRef!==void 0&&(_e.stencilRef=s.stencilRef),s.stencilFuncMask!==void 0&&(_e.stencilFuncMask=s.stencilFuncMask),s.stencilFail!==void 0&&(_e.stencilFail=s.stencilFail),s.stencilZFail!==void 0&&(_e.stencilZFail=s.stencilZFail),s.stencilZPass!==void 0&&(_e.stencilZPass=s.stencilZPass),s.wireframe!==void 0&&(_e.wireframe=s.wireframe),s.wireframeLinewidth!==void 0&&(_e.wireframeLinewidth=s.wireframeLinewidth),s.wireframeLinecap!==void 0&&(_e.wireframeLinecap=s.wireframeLinecap),s.wireframeLinejoin!==void 0&&(_e.wireframeLinejoin=s.wireframeLinejoin),s.rotation!==void 0&&(_e.rotation=s.rotation),s.linewidth!==void 0&&(_e.linewidth=s.linewidth),s.dashSize!==void 0&&(_e.dashSize=s.dashSize),s.gapSize!==void 0&&(_e.gapSize=s.gapSize),s.scale!==void 0&&(_e.scale=s.scale),s.polygonOffset!==void 0&&(_e.polygonOffset=s.polygonOffset),s.polygonOffsetFactor!==void 0&&(_e.polygonOffsetFactor=s.polygonOffsetFactor),s.polygonOffsetUnits!==void 0&&(_e.polygonOffsetUnits=s.polygonOffsetUnits),s.dithering!==void 0&&(_e.dithering=s.dithering),s.alphaToCoverage!==void 0&&(_e.alphaToCoverage=s.alphaToCoverage),s.premultipliedAlpha!==void 0&&(_e.premultipliedAlpha=s.premultipliedAlpha),s.forceSinglePass!==void 0&&(_e.forceSinglePass=s.forceSinglePass),s.visible!==void 0&&(_e.visible=s.visible),s.toneMapped!==void 0&&(_e.toneMapped=s.toneMapped),s.userData!==void 0&&(_e.userData=s.userData),s.vertexColors!==void 0&&(typeof s.vertexColors=="number"?_e.vertexColors=s.vertexColors>0:_e.vertexColors=s.vertexColors),s.uniforms!==void 0)for(const bt in s.uniforms){const rn=s.uniforms[bt];switch(_e.uniforms[bt]={},rn.type){case"t":_e.uniforms[bt].value=b(rn.value);break;case"c":_e.uniforms[bt].value=new Color$1().setHex(rn.value);break;case"v2":_e.uniforms[bt].value=new Vector2().fromArray(rn.value);break;case"v3":_e.uniforms[bt].value=new Vector3().fromArray(rn.value);break;case"v4":_e.uniforms[bt].value=new Vector4().fromArray(rn.value);break;case"m3":_e.uniforms[bt].value=new Matrix3().fromArray(rn.value);break;case"m4":_e.uniforms[bt].value=new Matrix4().fromArray(rn.value);break;default:_e.uniforms[bt].value=rn.value}}if(s.defines!==void 0&&(_e.defines=s.defines),s.vertexShader!==void 0&&(_e.vertexShader=s.vertexShader),s.fragmentShader!==void 0&&(_e.fragmentShader=s.fragmentShader),s.glslVersion!==void 0&&(_e.glslVersion=s.glslVersion),s.extensions!==void 0)for(const bt in s.extensions)_e.extensions[bt]=s.extensions[bt];if(s.lights!==void 0&&(_e.lights=s.lights),s.clipping!==void 0&&(_e.clipping=s.clipping),s.size!==void 0&&(_e.size=s.size),s.sizeAttenuation!==void 0&&(_e.sizeAttenuation=s.sizeAttenuation),s.map!==void 0&&(_e.map=b(s.map)),s.matcap!==void 0&&(_e.matcap=b(s.matcap)),s.alphaMap!==void 0&&(_e.alphaMap=b(s.alphaMap)),s.bumpMap!==void 0&&(_e.bumpMap=b(s.bumpMap)),s.bumpScale!==void 0&&(_e.bumpScale=s.bumpScale),s.normalMap!==void 0&&(_e.normalMap=b(s.normalMap)),s.normalMapType!==void 0&&(_e.normalMapType=s.normalMapType),s.normalScale!==void 0){let bt=s.normalScale;Array.isArray(bt)===!1&&(bt=[bt,bt]),_e.normalScale=new Vector2().fromArray(bt)}return s.displacementMap!==void 0&&(_e.displacementMap=b(s.displacementMap)),s.displacementScale!==void 0&&(_e.displacementScale=s.displacementScale),s.displacementBias!==void 0&&(_e.displacementBias=s.displacementBias),s.roughnessMap!==void 0&&(_e.roughnessMap=b(s.roughnessMap)),s.metalnessMap!==void 0&&(_e.metalnessMap=b(s.metalnessMap)),s.emissiveMap!==void 0&&(_e.emissiveMap=b(s.emissiveMap)),s.emissiveIntensity!==void 0&&(_e.emissiveIntensity=s.emissiveIntensity),s.specularMap!==void 0&&(_e.specularMap=b(s.specularMap)),s.specularIntensityMap!==void 0&&(_e.specularIntensityMap=b(s.specularIntensityMap)),s.specularColorMap!==void 0&&(_e.specularColorMap=b(s.specularColorMap)),s.envMap!==void 0&&(_e.envMap=b(s.envMap)),s.envMapIntensity!==void 0&&(_e.envMapIntensity=s.envMapIntensity),s.reflectivity!==void 0&&(_e.reflectivity=s.reflectivity),s.refractionRatio!==void 0&&(_e.refractionRatio=s.refractionRatio),s.lightMap!==void 0&&(_e.lightMap=b(s.lightMap)),s.lightMapIntensity!==void 0&&(_e.lightMapIntensity=s.lightMapIntensity),s.aoMap!==void 0&&(_e.aoMap=b(s.aoMap)),s.aoMapIntensity!==void 0&&(_e.aoMapIntensity=s.aoMapIntensity),s.gradientMap!==void 0&&(_e.gradientMap=b(s.gradientMap)),s.clearcoatMap!==void 0&&(_e.clearcoatMap=b(s.clearcoatMap)),s.clearcoatRoughnessMap!==void 0&&(_e.clearcoatRoughnessMap=b(s.clearcoatRoughnessMap)),s.clearcoatNormalMap!==void 0&&(_e.clearcoatNormalMap=b(s.clearcoatNormalMap)),s.clearcoatNormalScale!==void 0&&(_e.clearcoatNormalScale=new Vector2().fromArray(s.clearcoatNormalScale)),s.iridescenceMap!==void 0&&(_e.iridescenceMap=b(s.iridescenceMap)),s.iridescenceThicknessMap!==void 0&&(_e.iridescenceThicknessMap=b(s.iridescenceThicknessMap)),s.transmissionMap!==void 0&&(_e.transmissionMap=b(s.transmissionMap)),s.thicknessMap!==void 0&&(_e.thicknessMap=b(s.thicknessMap)),s.anisotropyMap!==void 0&&(_e.anisotropyMap=b(s.anisotropyMap)),s.sheenColorMap!==void 0&&(_e.sheenColorMap=b(s.sheenColorMap)),s.sheenRoughnessMap!==void 0&&(_e.sheenRoughnessMap=b(s.sheenRoughnessMap)),_e}setTextures(s){return this.textures=s,this}static createMaterialFromType(s){const a={ShadowMaterial,SpriteMaterial,RawShaderMaterial,ShaderMaterial,PointsMaterial,MeshPhysicalMaterial,MeshStandardMaterial,MeshPhongMaterial,MeshToonMaterial,MeshNormalMaterial,MeshLambertMaterial,MeshDepthMaterial,MeshDistanceMaterial,MeshBasicMaterial,MeshMatcapMaterial,LineDashedMaterial,LineBasicMaterial,Material};return new a[s]}}class LoaderUtils{static decodeText(s){if(typeof TextDecoder<"u")return new TextDecoder().decode(s);let a="";for(let b=0,_e=s.length;b<_e;b++)a+=String.fromCharCode(s[b]);try{return decodeURIComponent(escape(a))}catch{return a}}static extractUrlBase(s){const a=s.lastIndexOf("/");return a===-1?"./":s.slice(0,a+1)}static resolveURL(s,a){return typeof s!="string"||s===""?"":(/^https?:\/\//i.test(a)&&/^\//.test(s)&&(a=a.replace(/(^https?:\/\/[^\/]+).*/i,"$1")),/^(https?:)?\/\//i.test(s)||/^data:.*,.*$/i.test(s)||/^blob:.*$/i.test(s)?s:a+s)}}class InstancedBufferGeometry extends BufferGeometry{constructor(){super(),this.isInstancedBufferGeometry=!0,this.type="InstancedBufferGeometry",this.instanceCount=1/0}copy(s){return super.copy(s),this.instanceCount=s.instanceCount,this}toJSON(){const s=super.toJSON();return s.instanceCount=this.instanceCount,s.isInstancedBufferGeometry=!0,s}}class BufferGeometryLoader extends Loader{constructor(s){super(s)}load(s,a,b,_e){const bt=this,rn=new FileLoader(bt.manager);rn.setPath(bt.path),rn.setRequestHeader(bt.requestHeader),rn.setWithCredentials(bt.withCredentials),rn.load(s,function(sn){try{a(bt.parse(JSON.parse(sn)))}catch(yn){_e?_e(yn):console.error(yn),bt.manager.itemError(s)}},b,_e)}parse(s){const a={},b={};function _e(cr,hr){if(a[hr]!==void 0)return a[hr];const Ur=cr.interleavedBuffers[hr],Dr=bt(cr,Ur.buffer),zr=getTypedArray(Ur.type,Dr),rs=new InterleavedBuffer(zr,Ur.stride);return rs.uuid=Ur.uuid,a[hr]=rs,rs}function bt(cr,hr){if(b[hr]!==void 0)return b[hr];const Ur=cr.arrayBuffers[hr],Dr=new Uint32Array(Ur).buffer;return b[hr]=Dr,Dr}const rn=s.isInstancedBufferGeometry?new InstancedBufferGeometry:new BufferGeometry,sn=s.data.index;if(sn!==void 0){const cr=getTypedArray(sn.type,sn.array);rn.setIndex(new BufferAttribute(cr,1))}const yn=s.data.attributes;for(const cr in yn){const hr=yn[cr];let es;if(hr.isInterleavedBufferAttribute){const Ur=_e(s.data,hr.data);es=new InterleavedBufferAttribute(Ur,hr.itemSize,hr.offset,hr.normalized)}else{const Ur=getTypedArray(hr.type,hr.array),Dr=hr.isInstancedBufferAttribute?InstancedBufferAttribute:BufferAttribute;es=new Dr(Ur,hr.itemSize,hr.normalized)}hr.name!==void 0&&(es.name=hr.name),hr.usage!==void 0&&es.setUsage(hr.usage),hr.updateRange!==void 0&&(es.updateRange.offset=hr.updateRange.offset,es.updateRange.count=hr.updateRange.count),rn.setAttribute(cr,es)}const Pn=s.data.morphAttributes;if(Pn)for(const cr in Pn){const hr=Pn[cr],es=[];for(let Ur=0,Dr=hr.length;Ur<Dr;Ur++){const zr=hr[Ur];let rs;if(zr.isInterleavedBufferAttribute){const as=_e(s.data,zr.data);rs=new InterleavedBufferAttribute(as,zr.itemSize,zr.offset,zr.normalized)}else{const as=getTypedArray(zr.type,zr.array);rs=new BufferAttribute(as,zr.itemSize,zr.normalized)}zr.name!==void 0&&(rs.name=zr.name),es.push(rs)}rn.morphAttributes[cr]=es}s.data.morphTargetsRelative&&(rn.morphTargetsRelative=!0);const lr=s.data.groups||s.data.drawcalls||s.data.offsets;if(lr!==void 0)for(let cr=0,hr=lr.length;cr!==hr;++cr){const es=lr[cr];rn.addGroup(es.start,es.count,es.materialIndex)}const ar=s.data.boundingSphere;if(ar!==void 0){const cr=new Vector3;ar.center!==void 0&&cr.fromArray(ar.center),rn.boundingSphere=new Sphere(cr,ar.radius)}return s.name&&(rn.name=s.name),s.userData&&(rn.userData=s.userData),rn}}class ObjectLoader extends Loader{constructor(s){super(s)}load(s,a,b,_e){const bt=this,rn=this.path===""?LoaderUtils.extractUrlBase(s):this.path;this.resourcePath=this.resourcePath||rn;const sn=new FileLoader(this.manager);sn.setPath(this.path),sn.setRequestHeader(this.requestHeader),sn.setWithCredentials(this.withCredentials),sn.load(s,function(yn){let Pn=null;try{Pn=JSON.parse(yn)}catch(lr){_e!==void 0&&_e(lr),console.error("THREE:ObjectLoader: Can't parse "+s+".",lr.message);return}const zn=Pn.metadata;if(zn===void 0||zn.type===void 0||zn.type.toLowerCase()==="geometry"){_e!==void 0&&_e(new Error("THREE.ObjectLoader: Can't load "+s)),console.error("THREE.ObjectLoader: Can't load "+s);return}bt.parse(Pn,a)},b,_e)}async loadAsync(s,a){const b=this,_e=this.path===""?LoaderUtils.extractUrlBase(s):this.path;this.resourcePath=this.resourcePath||_e;const bt=new FileLoader(this.manager);bt.setPath(this.path),bt.setRequestHeader(this.requestHeader),bt.setWithCredentials(this.withCredentials);const rn=await bt.loadAsync(s,a),sn=JSON.parse(rn),yn=sn.metadata;if(yn===void 0||yn.type===void 0||yn.type.toLowerCase()==="geometry")throw new Error("THREE.ObjectLoader: Can't load "+s);return await b.parseAsync(sn)}parse(s,a){const b=this.parseAnimations(s.animations),_e=this.parseShapes(s.shapes),bt=this.parseGeometries(s.geometries,_e),rn=this.parseImages(s.images,function(){a!==void 0&&a(Pn)}),sn=this.parseTextures(s.textures,rn),yn=this.parseMaterials(s.materials,sn),Pn=this.parseObject(s.object,bt,yn,sn,b),zn=this.parseSkeletons(s.skeletons,Pn);if(this.bindSkeletons(Pn,zn),a!==void 0){let lr=!1;for(const ar in rn)if(rn[ar].data instanceof HTMLImageElement){lr=!0;break}lr===!1&&a(Pn)}return Pn}async parseAsync(s){const a=this.parseAnimations(s.animations),b=this.parseShapes(s.shapes),_e=this.parseGeometries(s.geometries,b),bt=await this.parseImagesAsync(s.images),rn=this.parseTextures(s.textures,bt),sn=this.parseMaterials(s.materials,rn),yn=this.parseObject(s.object,_e,sn,rn,a),Pn=this.parseSkeletons(s.skeletons,yn);return this.bindSkeletons(yn,Pn),yn}parseShapes(s){const a={};if(s!==void 0)for(let b=0,_e=s.length;b<_e;b++){const bt=new Shape().fromJSON(s[b]);a[bt.uuid]=bt}return a}parseSkeletons(s,a){const b={},_e={};if(a.traverse(function(bt){bt.isBone&&(_e[bt.uuid]=bt)}),s!==void 0)for(let bt=0,rn=s.length;bt<rn;bt++){const sn=new Skeleton().fromJSON(s[bt],_e);b[sn.uuid]=sn}return b}parseGeometries(s,a){const b={};if(s!==void 0){const _e=new BufferGeometryLoader;for(let bt=0,rn=s.length;bt<rn;bt++){let sn;const yn=s[bt];switch(yn.type){case"BufferGeometry":case"InstancedBufferGeometry":sn=_e.parse(yn);break;default:yn.type in Geometries?sn=Geometries[yn.type].fromJSON(yn,a):console.warn(`THREE.ObjectLoader: Unsupported geometry type "${yn.type}"`)}sn.uuid=yn.uuid,yn.name!==void 0&&(sn.name=yn.name),yn.userData!==void 0&&(sn.userData=yn.userData),b[yn.uuid]=sn}}return b}parseMaterials(s,a){const b={},_e={};if(s!==void 0){const bt=new MaterialLoader;bt.setTextures(a);for(let rn=0,sn=s.length;rn<sn;rn++){const yn=s[rn];b[yn.uuid]===void 0&&(b[yn.uuid]=bt.parse(yn)),_e[yn.uuid]=b[yn.uuid]}}return _e}parseAnimations(s){const a={};if(s!==void 0)for(let b=0;b<s.length;b++){const _e=s[b],bt=AnimationClip.parse(_e);a[bt.uuid]=bt}return a}parseImages(s,a){const b=this,_e={};let bt;function rn(yn){return b.manager.itemStart(yn),bt.load(yn,function(){b.manager.itemEnd(yn)},void 0,function(){b.manager.itemError(yn),b.manager.itemEnd(yn)})}function sn(yn){if(typeof yn=="string"){const Pn=yn,zn=/^(\/\/)|([a-z]+:(\/\/)?)/i.test(Pn)?Pn:b.resourcePath+Pn;return rn(zn)}else return yn.data?{data:getTypedArray(yn.type,yn.data),width:yn.width,height:yn.height}:null}if(s!==void 0&&s.length>0){const yn=new LoadingManager(a);bt=new ImageLoader(yn),bt.setCrossOrigin(this.crossOrigin);for(let Pn=0,zn=s.length;Pn<zn;Pn++){const lr=s[Pn],ar=lr.url;if(Array.isArray(ar)){const cr=[];for(let hr=0,es=ar.length;hr<es;hr++){const Ur=ar[hr],Dr=sn(Ur);Dr!==null&&(Dr instanceof HTMLImageElement?cr.push(Dr):cr.push(new DataTexture(Dr.data,Dr.width,Dr.height)))}_e[lr.uuid]=new Source(cr)}else{const cr=sn(lr.url);_e[lr.uuid]=new Source(cr)}}}return _e}async parseImagesAsync(s){const a=this,b={};let _e;async function bt(rn){if(typeof rn=="string"){const sn=rn,yn=/^(\/\/)|([a-z]+:(\/\/)?)/i.test(sn)?sn:a.resourcePath+sn;return await _e.loadAsync(yn)}else return rn.data?{data:getTypedArray(rn.type,rn.data),width:rn.width,height:rn.height}:null}if(s!==void 0&&s.length>0){_e=new ImageLoader(this.manager),_e.setCrossOrigin(this.crossOrigin);for(let rn=0,sn=s.length;rn<sn;rn++){const yn=s[rn],Pn=yn.url;if(Array.isArray(Pn)){const zn=[];for(let lr=0,ar=Pn.length;lr<ar;lr++){const cr=Pn[lr],hr=await bt(cr);hr!==null&&(hr instanceof HTMLImageElement?zn.push(hr):zn.push(new DataTexture(hr.data,hr.width,hr.height)))}b[yn.uuid]=new Source(zn)}else{const zn=await bt(yn.url);b[yn.uuid]=new Source(zn)}}}return b}parseTextures(s,a){function b(bt,rn){return typeof bt=="number"?bt:(console.warn("THREE.ObjectLoader.parseTexture: Constant should be in numeric form.",bt),rn[bt])}const _e={};if(s!==void 0)for(let bt=0,rn=s.length;bt<rn;bt++){const sn=s[bt];sn.image===void 0&&console.warn('THREE.ObjectLoader: No "image" specified for',sn.uuid),a[sn.image]===void 0&&console.warn("THREE.ObjectLoader: Undefined image",sn.image);const yn=a[sn.image],Pn=yn.data;let zn;Array.isArray(Pn)?(zn=new CubeTexture,Pn.length===6&&(zn.needsUpdate=!0)):(Pn&&Pn.data?zn=new DataTexture:zn=new Texture,Pn&&(zn.needsUpdate=!0)),zn.source=yn,zn.uuid=sn.uuid,sn.name!==void 0&&(zn.name=sn.name),sn.mapping!==void 0&&(zn.mapping=b(sn.mapping,TEXTURE_MAPPING)),sn.channel!==void 0&&(zn.channel=sn.channel),sn.offset!==void 0&&zn.offset.fromArray(sn.offset),sn.repeat!==void 0&&zn.repeat.fromArray(sn.repeat),sn.center!==void 0&&zn.center.fromArray(sn.center),sn.rotation!==void 0&&(zn.rotation=sn.rotation),sn.wrap!==void 0&&(zn.wrapS=b(sn.wrap[0],TEXTURE_WRAPPING),zn.wrapT=b(sn.wrap[1],TEXTURE_WRAPPING)),sn.format!==void 0&&(zn.format=sn.format),sn.internalFormat!==void 0&&(zn.internalFormat=sn.internalFormat),sn.type!==void 0&&(zn.type=sn.type),sn.colorSpace!==void 0&&(zn.colorSpace=sn.colorSpace),sn.encoding!==void 0&&(zn.encoding=sn.encoding),sn.minFilter!==void 0&&(zn.minFilter=b(sn.minFilter,TEXTURE_FILTER)),sn.magFilter!==void 0&&(zn.magFilter=b(sn.magFilter,TEXTURE_FILTER)),sn.anisotropy!==void 0&&(zn.anisotropy=sn.anisotropy),sn.flipY!==void 0&&(zn.flipY=sn.flipY),sn.generateMipmaps!==void 0&&(zn.generateMipmaps=sn.generateMipmaps),sn.premultiplyAlpha!==void 0&&(zn.premultiplyAlpha=sn.premultiplyAlpha),sn.unpackAlignment!==void 0&&(zn.unpackAlignment=sn.unpackAlignment),sn.compareFunction!==void 0&&(zn.compareFunction=sn.compareFunction),sn.userData!==void 0&&(zn.userData=sn.userData),_e[sn.uuid]=zn}return _e}parseObject(s,a,b,_e,bt){let rn;function sn(ar){return a[ar]===void 0&&console.warn("THREE.ObjectLoader: Undefined geometry",ar),a[ar]}function yn(ar){if(ar!==void 0){if(Array.isArray(ar)){const cr=[];for(let hr=0,es=ar.length;hr<es;hr++){const Ur=ar[hr];b[Ur]===void 0&&console.warn("THREE.ObjectLoader: Undefined material",Ur),cr.push(b[Ur])}return cr}return b[ar]===void 0&&console.warn("THREE.ObjectLoader: Undefined material",ar),b[ar]}}function Pn(ar){return _e[ar]===void 0&&console.warn("THREE.ObjectLoader: Undefined texture",ar),_e[ar]}let zn,lr;switch(s.type){case"Scene":rn=new Scene,s.background!==void 0&&(Number.isInteger(s.background)?rn.background=new Color$1(s.background):rn.background=Pn(s.background)),s.environment!==void 0&&(rn.environment=Pn(s.environment)),s.fog!==void 0&&(s.fog.type==="Fog"?rn.fog=new Fog(s.fog.color,s.fog.near,s.fog.far):s.fog.type==="FogExp2"&&(rn.fog=new FogExp2(s.fog.color,s.fog.density)),s.fog.name!==""&&(rn.fog.name=s.fog.name)),s.backgroundBlurriness!==void 0&&(rn.backgroundBlurriness=s.backgroundBlurriness),s.backgroundIntensity!==void 0&&(rn.backgroundIntensity=s.backgroundIntensity);break;case"PerspectiveCamera":rn=new PerspectiveCamera(s.fov,s.aspect,s.near,s.far),s.focus!==void 0&&(rn.focus=s.focus),s.zoom!==void 0&&(rn.zoom=s.zoom),s.filmGauge!==void 0&&(rn.filmGauge=s.filmGauge),s.filmOffset!==void 0&&(rn.filmOffset=s.filmOffset),s.view!==void 0&&(rn.view=Object.assign({},s.view));break;case"OrthographicCamera":rn=new OrthographicCamera(s.left,s.right,s.top,s.bottom,s.near,s.far),s.zoom!==void 0&&(rn.zoom=s.zoom),s.view!==void 0&&(rn.view=Object.assign({},s.view));break;case"AmbientLight":rn=new AmbientLight(s.color,s.intensity);break;case"DirectionalLight":rn=new DirectionalLight(s.color,s.intensity);break;case"PointLight":rn=new PointLight(s.color,s.intensity,s.distance,s.decay);break;case"RectAreaLight":rn=new RectAreaLight(s.color,s.intensity,s.width,s.height);break;case"SpotLight":rn=new SpotLight(s.color,s.intensity,s.distance,s.angle,s.penumbra,s.decay);break;case"HemisphereLight":rn=new HemisphereLight(s.color,s.groundColor,s.intensity);break;case"LightProbe":rn=new LightProbe().fromJSON(s);break;case"SkinnedMesh":zn=sn(s.geometry),lr=yn(s.material),rn=new SkinnedMesh(zn,lr),s.bindMode!==void 0&&(rn.bindMode=s.bindMode),s.bindMatrix!==void 0&&rn.bindMatrix.fromArray(s.bindMatrix),s.skeleton!==void 0&&(rn.skeleton=s.skeleton);break;case"Mesh":zn=sn(s.geometry),lr=yn(s.material),rn=new Mesh(zn,lr);break;case"InstancedMesh":zn=sn(s.geometry),lr=yn(s.material);const ar=s.count,cr=s.instanceMatrix,hr=s.instanceColor;rn=new InstancedMesh(zn,lr,ar),rn.instanceMatrix=new InstancedBufferAttribute(new Float32Array(cr.array),16),hr!==void 0&&(rn.instanceColor=new InstancedBufferAttribute(new Float32Array(hr.array),hr.itemSize));break;case"LOD":rn=new LOD;break;case"Line":rn=new Line(sn(s.geometry),yn(s.material));break;case"LineLoop":rn=new LineLoop(sn(s.geometry),yn(s.material));break;case"LineSegments":rn=new LineSegments(sn(s.geometry),yn(s.material));break;case"PointCloud":case"Points":rn=new Points(sn(s.geometry),yn(s.material));break;case"Sprite":rn=new Sprite(yn(s.material));break;case"Group":rn=new Group;break;case"Bone":rn=new Bone;break;default:rn=new Object3D}if(rn.uuid=s.uuid,s.name!==void 0&&(rn.name=s.name),s.matrix!==void 0?(rn.matrix.fromArray(s.matrix),s.matrixAutoUpdate!==void 0&&(rn.matrixAutoUpdate=s.matrixAutoUpdate),rn.matrixAutoUpdate&&rn.matrix.decompose(rn.position,rn.quaternion,rn.scale)):(s.position!==void 0&&rn.position.fromArray(s.position),s.rotation!==void 0&&rn.rotation.fromArray(s.rotation),s.quaternion!==void 0&&rn.quaternion.fromArray(s.quaternion),s.scale!==void 0&&rn.scale.fromArray(s.scale)),s.up!==void 0&&rn.up.fromArray(s.up),s.castShadow!==void 0&&(rn.castShadow=s.castShadow),s.receiveShadow!==void 0&&(rn.receiveShadow=s.receiveShadow),s.shadow&&(s.shadow.bias!==void 0&&(rn.shadow.bias=s.shadow.bias),s.shadow.normalBias!==void 0&&(rn.shadow.normalBias=s.shadow.normalBias),s.shadow.radius!==void 0&&(rn.shadow.radius=s.shadow.radius),s.shadow.mapSize!==void 0&&rn.shadow.mapSize.fromArray(s.shadow.mapSize),s.shadow.camera!==void 0&&(rn.shadow.camera=this.parseObject(s.shadow.camera))),s.visible!==void 0&&(rn.visible=s.visible),s.frustumCulled!==void 0&&(rn.frustumCulled=s.frustumCulled),s.renderOrder!==void 0&&(rn.renderOrder=s.renderOrder),s.userData!==void 0&&(rn.userData=s.userData),s.layers!==void 0&&(rn.layers.mask=s.layers),s.children!==void 0){const ar=s.children;for(let cr=0;cr<ar.length;cr++)rn.add(this.parseObject(ar[cr],a,b,_e,bt))}if(s.animations!==void 0){const ar=s.animations;for(let cr=0;cr<ar.length;cr++){const hr=ar[cr];rn.animations.push(bt[hr])}}if(s.type==="LOD"){s.autoUpdate!==void 0&&(rn.autoUpdate=s.autoUpdate);const ar=s.levels;for(let cr=0;cr<ar.length;cr++){const hr=ar[cr],es=rn.getObjectByProperty("uuid",hr.object);es!==void 0&&rn.addLevel(es,hr.distance,hr.hysteresis)}}return rn}bindSkeletons(s,a){Object.keys(a).length!==0&&s.traverse(function(b){if(b.isSkinnedMesh===!0&&b.skeleton!==void 0){const _e=a[b.skeleton];_e===void 0?console.warn("THREE.ObjectLoader: No skeleton found with UUID:",b.skeleton):b.bind(_e,b.bindMatrix)}})}}const TEXTURE_MAPPING={UVMapping,CubeReflectionMapping,CubeRefractionMapping,EquirectangularReflectionMapping,EquirectangularRefractionMapping,CubeUVReflectionMapping},TEXTURE_WRAPPING={RepeatWrapping,ClampToEdgeWrapping,MirroredRepeatWrapping},TEXTURE_FILTER={NearestFilter,NearestMipmapNearestFilter,NearestMipmapLinearFilter,LinearFilter,LinearMipmapNearestFilter,LinearMipmapLinearFilter};class ImageBitmapLoader extends Loader{constructor(s){super(s),this.isImageBitmapLoader=!0,typeof createImageBitmap>"u"&&console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported."),typeof fetch>"u"&&console.warn("THREE.ImageBitmapLoader: fetch() not supported."),this.options={premultiplyAlpha:"none"}}setOptions(s){return this.options=s,this}load(s,a,b,_e){s===void 0&&(s=""),this.path!==void 0&&(s=this.path+s),s=this.manager.resolveURL(s);const bt=this,rn=Cache.get(s);if(rn!==void 0)return bt.manager.itemStart(s),setTimeout(function(){a&&a(rn),bt.manager.itemEnd(s)},0),rn;const sn={};sn.credentials=this.crossOrigin==="anonymous"?"same-origin":"include",sn.headers=this.requestHeader,fetch(s,sn).then(function(yn){return yn.blob()}).then(function(yn){return createImageBitmap(yn,Object.assign(bt.options,{colorSpaceConversion:"none"}))}).then(function(yn){Cache.add(s,yn),a&&a(yn),bt.manager.itemEnd(s)}).catch(function(yn){_e&&_e(yn),bt.manager.itemError(s),bt.manager.itemEnd(s)}),bt.manager.itemStart(s)}}let _context;class AudioContext{static getContext(){return _context===void 0&&(_context=new(window.AudioContext||window.webkitAudioContext)),_context}static setContext(s){_context=s}}class AudioLoader extends Loader{constructor(s){super(s)}load(s,a,b,_e){const bt=this,rn=new FileLoader(this.manager);rn.setResponseType("arraybuffer"),rn.setPath(this.path),rn.setRequestHeader(this.requestHeader),rn.setWithCredentials(this.withCredentials),rn.load(s,function(yn){try{const Pn=yn.slice(0);AudioContext.getContext().decodeAudioData(Pn,function(lr){a(lr)},sn)}catch(Pn){sn(Pn)}},b,_e);function sn(yn){_e?_e(yn):console.error(yn),bt.manager.itemError(s)}}}const _eyeRight=new Matrix4,_eyeLeft=new Matrix4,_projectionMatrix=new Matrix4;class StereoCamera{constructor(){this.type="StereoCamera",this.aspect=1,this.eyeSep=.064,this.cameraL=new PerspectiveCamera,this.cameraL.layers.enable(1),this.cameraL.matrixAutoUpdate=!1,this.cameraR=new PerspectiveCamera,this.cameraR.layers.enable(2),this.cameraR.matrixAutoUpdate=!1,this._cache={focus:null,fov:null,aspect:null,near:null,far:null,zoom:null,eyeSep:null}}update(s){const a=this._cache;if(a.focus!==s.focus||a.fov!==s.fov||a.aspect!==s.aspect*this.aspect||a.near!==s.near||a.far!==s.far||a.zoom!==s.zoom||a.eyeSep!==this.eyeSep){a.focus=s.focus,a.fov=s.fov,a.aspect=s.aspect*this.aspect,a.near=s.near,a.far=s.far,a.zoom=s.zoom,a.eyeSep=this.eyeSep,_projectionMatrix.copy(s.projectionMatrix);const _e=a.eyeSep/2,bt=_e*a.near/a.focus,rn=a.near*Math.tan(DEG2RAD$1*a.fov*.5)/a.zoom;let sn,yn;_eyeLeft.elements[12]=-_e,_eyeRight.elements[12]=_e,sn=-rn*a.aspect+bt,yn=rn*a.aspect+bt,_projectionMatrix.elements[0]=2*a.near/(yn-sn),_projectionMatrix.elements[8]=(yn+sn)/(yn-sn),this.cameraL.projectionMatrix.copy(_projectionMatrix),sn=-rn*a.aspect-bt,yn=rn*a.aspect-bt,_projectionMatrix.elements[0]=2*a.near/(yn-sn),_projectionMatrix.elements[8]=(yn+sn)/(yn-sn),this.cameraR.projectionMatrix.copy(_projectionMatrix)}this.cameraL.matrixWorld.copy(s.matrixWorld).multiply(_eyeLeft),this.cameraR.matrixWorld.copy(s.matrixWorld).multiply(_eyeRight)}}class Clock{constructor(s=!0){this.autoStart=s,this.startTime=0,this.oldTime=0,this.elapsedTime=0,this.running=!1}start(){this.startTime=now(),this.oldTime=this.startTime,this.elapsedTime=0,this.running=!0}stop(){this.getElapsedTime(),this.running=!1,this.autoStart=!1}getElapsedTime(){return this.getDelta(),this.elapsedTime}getDelta(){let s=0;if(this.autoStart&&!this.running)return this.start(),0;if(this.running){const a=now();s=(a-this.oldTime)/1e3,this.oldTime=a,this.elapsedTime+=s}return s}}function now(){return(typeof performance>"u"?Date:performance).now()}const _position$1=new Vector3,_quaternion$1=new Quaternion,_scale$1=new Vector3,_orientation$1=new Vector3;class AudioListener extends Object3D{constructor(){super(),this.type="AudioListener",this.context=AudioContext.getContext(),this.gain=this.context.createGain(),this.gain.connect(this.context.destination),this.filter=null,this.timeDelta=0,this._clock=new Clock}getInput(){return this.gain}removeFilter(){return this.filter!==null&&(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination),this.gain.connect(this.context.destination),this.filter=null),this}getFilter(){return this.filter}setFilter(s){return this.filter!==null?(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination)):this.gain.disconnect(this.context.destination),this.filter=s,this.gain.connect(this.filter),this.filter.connect(this.context.destination),this}getMasterVolume(){return this.gain.gain.value}setMasterVolume(s){return this.gain.gain.setTargetAtTime(s,this.context.currentTime,.01),this}updateMatrixWorld(s){super.updateMatrixWorld(s);const a=this.context.listener,b=this.up;if(this.timeDelta=this._clock.getDelta(),this.matrixWorld.decompose(_position$1,_quaternion$1,_scale$1),_orientation$1.set(0,0,-1).applyQuaternion(_quaternion$1),a.positionX){const _e=this.context.currentTime+this.timeDelta;a.positionX.linearRampToValueAtTime(_position$1.x,_e),a.positionY.linearRampToValueAtTime(_position$1.y,_e),a.positionZ.linearRampToValueAtTime(_position$1.z,_e),a.forwardX.linearRampToValueAtTime(_orientation$1.x,_e),a.forwardY.linearRampToValueAtTime(_orientation$1.y,_e),a.forwardZ.linearRampToValueAtTime(_orientation$1.z,_e),a.upX.linearRampToValueAtTime(b.x,_e),a.upY.linearRampToValueAtTime(b.y,_e),a.upZ.linearRampToValueAtTime(b.z,_e)}else a.setPosition(_position$1.x,_position$1.y,_position$1.z),a.setOrientation(_orientation$1.x,_orientation$1.y,_orientation$1.z,b.x,b.y,b.z)}}class Audio extends Object3D{constructor(s){super(),this.type="Audio",this.listener=s,this.context=s.context,this.gain=this.context.createGain(),this.gain.connect(s.getInput()),this.autoplay=!1,this.buffer=null,this.detune=0,this.loop=!1,this.loopStart=0,this.loopEnd=0,this.offset=0,this.duration=void 0,this.playbackRate=1,this.isPlaying=!1,this.hasPlaybackControl=!0,this.source=null,this.sourceType="empty",this._startedAt=0,this._progress=0,this._connected=!1,this.filters=[]}getOutput(){return this.gain}setNodeSource(s){return this.hasPlaybackControl=!1,this.sourceType="audioNode",this.source=s,this.connect(),this}setMediaElementSource(s){return this.hasPlaybackControl=!1,this.sourceType="mediaNode",this.source=this.context.createMediaElementSource(s),this.connect(),this}setMediaStreamSource(s){return this.hasPlaybackControl=!1,this.sourceType="mediaStreamNode",this.source=this.context.createMediaStreamSource(s),this.connect(),this}setBuffer(s){return this.buffer=s,this.sourceType="buffer",this.autoplay&&this.play(),this}play(s=0){if(this.isPlaying===!0){console.warn("THREE.Audio: Audio is already playing.");return}if(this.hasPlaybackControl===!1){console.warn("THREE.Audio: this Audio has no playback control.");return}this._startedAt=this.context.currentTime+s;const a=this.context.createBufferSource();return a.buffer=this.buffer,a.loop=this.loop,a.loopStart=this.loopStart,a.loopEnd=this.loopEnd,a.onended=this.onEnded.bind(this),a.start(this._startedAt,this._progress+this.offset,this.duration),this.isPlaying=!0,this.source=a,this.setDetune(this.detune),this.setPlaybackRate(this.playbackRate),this.connect()}pause(){if(this.hasPlaybackControl===!1){console.warn("THREE.Audio: this Audio has no playback control.");return}return this.isPlaying===!0&&(this._progress+=Math.max(this.context.currentTime-this._startedAt,0)*this.playbackRate,this.loop===!0&&(this._progress=this._progress%(this.duration||this.buffer.duration)),this.source.stop(),this.source.onended=null,this.isPlaying=!1),this}stop(){if(this.hasPlaybackControl===!1){console.warn("THREE.Audio: this Audio has no playback control.");return}return this._progress=0,this.source!==null&&(this.source.stop(),this.source.onended=null),this.isPlaying=!1,this}connect(){if(this.filters.length>0){this.source.connect(this.filters[0]);for(let s=1,a=this.filters.length;s<a;s++)this.filters[s-1].connect(this.filters[s]);this.filters[this.filters.length-1].connect(this.getOutput())}else this.source.connect(this.getOutput());return this._connected=!0,this}disconnect(){if(this._connected!==!1){if(this.filters.length>0){this.source.disconnect(this.filters[0]);for(let s=1,a=this.filters.length;s<a;s++)this.filters[s-1].disconnect(this.filters[s]);this.filters[this.filters.length-1].disconnect(this.getOutput())}else this.source.disconnect(this.getOutput());return this._connected=!1,this}}getFilters(){return this.filters}setFilters(s){return s||(s=[]),this._connected===!0?(this.disconnect(),this.filters=s.slice(),this.connect()):this.filters=s.slice(),this}setDetune(s){if(this.detune=s,this.source.detune!==void 0)return this.isPlaying===!0&&this.source.detune.setTargetAtTime(this.detune,this.context.currentTime,.01),this}getDetune(){return this.detune}getFilter(){return this.getFilters()[0]}setFilter(s){return this.setFilters(s?[s]:[])}setPlaybackRate(s){if(this.hasPlaybackControl===!1){console.warn("THREE.Audio: this Audio has no playback control.");return}return this.playbackRate=s,this.isPlaying===!0&&this.source.playbackRate.setTargetAtTime(this.playbackRate,this.context.currentTime,.01),this}getPlaybackRate(){return this.playbackRate}onEnded(){this.isPlaying=!1}getLoop(){return this.hasPlaybackControl===!1?(console.warn("THREE.Audio: this Audio has no playback control."),!1):this.loop}setLoop(s){if(this.hasPlaybackControl===!1){console.warn("THREE.Audio: this Audio has no playback control.");return}return this.loop=s,this.isPlaying===!0&&(this.source.loop=this.loop),this}setLoopStart(s){return this.loopStart=s,this}setLoopEnd(s){return this.loopEnd=s,this}getVolume(){return this.gain.gain.value}setVolume(s){return this.gain.gain.setTargetAtTime(s,this.context.currentTime,.01),this}}const _position=new Vector3,_quaternion=new Quaternion,_scale=new Vector3,_orientation=new Vector3;class PositionalAudio extends Audio{constructor(s){super(s),this.panner=this.context.createPanner(),this.panner.panningModel="HRTF",this.panner.connect(this.gain)}connect(){super.connect(),this.panner.connect(this.gain)}disconnect(){super.disconnect(),this.panner.disconnect(this.gain)}getOutput(){return this.panner}getRefDistance(){return this.panner.refDistance}setRefDistance(s){return this.panner.refDistance=s,this}getRolloffFactor(){return this.panner.rolloffFactor}setRolloffFactor(s){return this.panner.rolloffFactor=s,this}getDistanceModel(){return this.panner.distanceModel}setDistanceModel(s){return this.panner.distanceModel=s,this}getMaxDistance(){return this.panner.maxDistance}setMaxDistance(s){return this.panner.maxDistance=s,this}setDirectionalCone(s,a,b){return this.panner.coneInnerAngle=s,this.panner.coneOuterAngle=a,this.panner.coneOuterGain=b,this}updateMatrixWorld(s){if(super.updateMatrixWorld(s),this.hasPlaybackControl===!0&&this.isPlaying===!1)return;this.matrixWorld.decompose(_position,_quaternion,_scale),_orientation.set(0,0,1).applyQuaternion(_quaternion);const a=this.panner;if(a.positionX){const b=this.context.currentTime+this.listener.timeDelta;a.positionX.linearRampToValueAtTime(_position.x,b),a.positionY.linearRampToValueAtTime(_position.y,b),a.positionZ.linearRampToValueAtTime(_position.z,b),a.orientationX.linearRampToValueAtTime(_orientation.x,b),a.orientationY.linearRampToValueAtTime(_orientation.y,b),a.orientationZ.linearRampToValueAtTime(_orientation.z,b)}else a.setPosition(_position.x,_position.y,_position.z),a.setOrientation(_orientation.x,_orientation.y,_orientation.z)}}class AudioAnalyser{constructor(s,a=2048){this.analyser=s.context.createAnalyser(),this.analyser.fftSize=a,this.data=new Uint8Array(this.analyser.frequencyBinCount),s.getOutput().connect(this.analyser)}getFrequencyData(){return this.analyser.getByteFrequencyData(this.data),this.data}getAverageFrequency(){let s=0;const a=this.getFrequencyData();for(let b=0;b<a.length;b++)s+=a[b];return s/a.length}}class PropertyMixer{constructor(s,a,b){this.binding=s,this.valueSize=b;let _e,bt,rn;switch(a){case"quaternion":_e=this._slerp,bt=this._slerpAdditive,rn=this._setAdditiveIdentityQuaternion,this.buffer=new Float64Array(b*6),this._workIndex=5;break;case"string":case"bool":_e=this._select,bt=this._select,rn=this._setAdditiveIdentityOther,this.buffer=new Array(b*5);break;default:_e=this._lerp,bt=this._lerpAdditive,rn=this._setAdditiveIdentityNumeric,this.buffer=new Float64Array(b*5)}this._mixBufferRegion=_e,this._mixBufferRegionAdditive=bt,this._setIdentity=rn,this._origIndex=3,this._addIndex=4,this.cumulativeWeight=0,this.cumulativeWeightAdditive=0,this.useCount=0,this.referenceCount=0}accumulate(s,a){const b=this.buffer,_e=this.valueSize,bt=s*_e+_e;let rn=this.cumulativeWeight;if(rn===0){for(let sn=0;sn!==_e;++sn)b[bt+sn]=b[sn];rn=a}else{rn+=a;const sn=a/rn;this._mixBufferRegion(b,bt,0,sn,_e)}this.cumulativeWeight=rn}accumulateAdditive(s){const a=this.buffer,b=this.valueSize,_e=b*this._addIndex;this.cumulativeWeightAdditive===0&&this._setIdentity(),this._mixBufferRegionAdditive(a,_e,0,s,b),this.cumulativeWeightAdditive+=s}apply(s){const a=this.valueSize,b=this.buffer,_e=s*a+a,bt=this.cumulativeWeight,rn=this.cumulativeWeightAdditive,sn=this.binding;if(this.cumulativeWeight=0,this.cumulativeWeightAdditive=0,bt<1){const yn=a*this._origIndex;this._mixBufferRegion(b,_e,yn,1-bt,a)}rn>0&&this._mixBufferRegionAdditive(b,_e,this._addIndex*a,1,a);for(let yn=a,Pn=a+a;yn!==Pn;++yn)if(b[yn]!==b[yn+a]){sn.setValue(b,_e);break}}saveOriginalState(){const s=this.binding,a=this.buffer,b=this.valueSize,_e=b*this._origIndex;s.getValue(a,_e);for(let bt=b,rn=_e;bt!==rn;++bt)a[bt]=a[_e+bt%b];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){const s=this.valueSize*3;this.binding.setValue(this.buffer,s)}_setAdditiveIdentityNumeric(){const s=this._addIndex*this.valueSize,a=s+this.valueSize;for(let b=s;b<a;b++)this.buffer[b]=0}_setAdditiveIdentityQuaternion(){this._setAdditiveIdentityNumeric(),this.buffer[this._addIndex*this.valueSize+3]=1}_setAdditiveIdentityOther(){const s=this._origIndex*this.valueSize,a=this._addIndex*this.valueSize;for(let b=0;b<this.valueSize;b++)this.buffer[a+b]=this.buffer[s+b]}_select(s,a,b,_e,bt){if(_e>=.5)for(let rn=0;rn!==bt;++rn)s[a+rn]=s[b+rn]}_slerp(s,a,b,_e){Quaternion.slerpFlat(s,a,s,a,s,b,_e)}_slerpAdditive(s,a,b,_e,bt){const rn=this._workIndex*bt;Quaternion.multiplyQuaternionsFlat(s,rn,s,a,s,b),Quaternion.slerpFlat(s,a,s,a,s,rn,_e)}_lerp(s,a,b,_e,bt){const rn=1-_e;for(let sn=0;sn!==bt;++sn){const yn=a+sn;s[yn]=s[yn]*rn+s[b+sn]*_e}}_lerpAdditive(s,a,b,_e,bt){for(let rn=0;rn!==bt;++rn){const sn=a+rn;s[sn]=s[sn]+s[b+rn]*_e}}}const _RESERVED_CHARS_RE="\\[\\]\\.:\\/",_reservedRe=new RegExp("["+_RESERVED_CHARS_RE+"]","g"),_wordChar="[^"+_RESERVED_CHARS_RE+"]",_wordCharOrDot="[^"+_RESERVED_CHARS_RE.replace("\\.","")+"]",_directoryRe=/((?:WC+[\/:])*)/.source.replace("WC",_wordChar),_nodeRe=/(WCOD+)?/.source.replace("WCOD",_wordCharOrDot),_objectRe=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",_wordChar),_propertyRe=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",_wordChar),_trackRe=new RegExp("^"+_directoryRe+_nodeRe+_objectRe+_propertyRe+"$"),_supportedObjectNames=["material","materials","bones","map"];class Composite{constructor(s,a,b){const _e=b||PropertyBinding.parseTrackName(a);this._targetGroup=s,this._bindings=s.subscribe_(a,_e)}getValue(s,a){this.bind();const b=this._targetGroup.nCachedObjects_,_e=this._bindings[b];_e!==void 0&&_e.getValue(s,a)}setValue(s,a){const b=this._bindings;for(let _e=this._targetGroup.nCachedObjects_,bt=b.length;_e!==bt;++_e)b[_e].setValue(s,a)}bind(){const s=this._bindings;for(let a=this._targetGroup.nCachedObjects_,b=s.length;a!==b;++a)s[a].bind()}unbind(){const s=this._bindings;for(let a=this._targetGroup.nCachedObjects_,b=s.length;a!==b;++a)s[a].unbind()}}class PropertyBinding{constructor(s,a,b){this.path=a,this.parsedPath=b||PropertyBinding.parseTrackName(a),this.node=PropertyBinding.findNode(s,this.parsedPath.nodeName),this.rootNode=s,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(s,a,b){return s&&s.isAnimationObjectGroup?new PropertyBinding.Composite(s,a,b):new PropertyBinding(s,a,b)}static sanitizeNodeName(s){return s.replace(/\s/g,"_").replace(_reservedRe,"")}static parseTrackName(s){const a=_trackRe.exec(s);if(a===null)throw new Error("PropertyBinding: Cannot parse trackName: "+s);const b={nodeName:a[2],objectName:a[3],objectIndex:a[4],propertyName:a[5],propertyIndex:a[6]},_e=b.nodeName&&b.nodeName.lastIndexOf(".");if(_e!==void 0&&_e!==-1){const bt=b.nodeName.substring(_e+1);_supportedObjectNames.indexOf(bt)!==-1&&(b.nodeName=b.nodeName.substring(0,_e),b.objectName=bt)}if(b.propertyName===null||b.propertyName.length===0)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+s);return b}static findNode(s,a){if(a===void 0||a===""||a==="."||a===-1||a===s.name||a===s.uuid)return s;if(s.skeleton){const b=s.skeleton.getBoneByName(a);if(b!==void 0)return b}if(s.children){const b=function(bt){for(let rn=0;rn<bt.length;rn++){const sn=bt[rn];if(sn.name===a||sn.uuid===a)return sn;const yn=b(sn.children);if(yn)return yn}return null},_e=b(s.children);if(_e)return _e}return null}_getValue_unavailable(){}_setValue_unavailable(){}_getValue_direct(s,a){s[a]=this.targetObject[this.propertyName]}_getValue_array(s,a){const b=this.resolvedProperty;for(let _e=0,bt=b.length;_e!==bt;++_e)s[a++]=b[_e]}_getValue_arrayElement(s,a){s[a]=this.resolvedProperty[this.propertyIndex]}_getValue_toArray(s,a){this.resolvedProperty.toArray(s,a)}_setValue_direct(s,a){this.targetObject[this.propertyName]=s[a]}_setValue_direct_setNeedsUpdate(s,a){this.targetObject[this.propertyName]=s[a],this.targetObject.needsUpdate=!0}_setValue_direct_setMatrixWorldNeedsUpdate(s,a){this.targetObject[this.propertyName]=s[a],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_array(s,a){const b=this.resolvedProperty;for(let _e=0,bt=b.length;_e!==bt;++_e)b[_e]=s[a++]}_setValue_array_setNeedsUpdate(s,a){const b=this.resolvedProperty;for(let _e=0,bt=b.length;_e!==bt;++_e)b[_e]=s[a++];this.targetObject.needsUpdate=!0}_setValue_array_setMatrixWorldNeedsUpdate(s,a){const b=this.resolvedProperty;for(let _e=0,bt=b.length;_e!==bt;++_e)b[_e]=s[a++];this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_arrayElement(s,a){this.resolvedProperty[this.propertyIndex]=s[a]}_setValue_arrayElement_setNeedsUpdate(s,a){this.resolvedProperty[this.propertyIndex]=s[a],this.targetObject.needsUpdate=!0}_setValue_arrayElement_setMatrixWorldNeedsUpdate(s,a){this.resolvedProperty[this.propertyIndex]=s[a],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_fromArray(s,a){this.resolvedProperty.fromArray(s,a)}_setValue_fromArray_setNeedsUpdate(s,a){this.resolvedProperty.fromArray(s,a),this.targetObject.needsUpdate=!0}_setValue_fromArray_setMatrixWorldNeedsUpdate(s,a){this.resolvedProperty.fromArray(s,a),this.targetObject.matrixWorldNeedsUpdate=!0}_getValue_unbound(s,a){this.bind(),this.getValue(s,a)}_setValue_unbound(s,a){this.bind(),this.setValue(s,a)}bind(){let s=this.node;const a=this.parsedPath,b=a.objectName,_e=a.propertyName;let bt=a.propertyIndex;if(s||(s=PropertyBinding.findNode(this.rootNode,a.nodeName),this.node=s),this.getValue=this._getValue_unavailable,this.setValue=this._setValue_unavailable,!s){console.warn("THREE.PropertyBinding: No target node found for track: "+this.path+".");return}if(b){let Pn=a.objectIndex;switch(b){case"materials":if(!s.material){console.error("THREE.PropertyBinding: Can not bind to material as node does not have a material.",this);return}if(!s.material.materials){console.error("THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.",this);return}s=s.material.materials;break;case"bones":if(!s.skeleton){console.error("THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.",this);return}s=s.skeleton.bones;for(let zn=0;zn<s.length;zn++)if(s[zn].name===Pn){Pn=zn;break}break;case"map":if("map"in s){s=s.map;break}if(!s.material){console.error("THREE.PropertyBinding: Can not bind to material as node does not have a material.",this);return}if(!s.material.map){console.error("THREE.PropertyBinding: Can not bind to material.map as node.material does not have a map.",this);return}s=s.material.map;break;default:if(s[b]===void 0){console.error("THREE.PropertyBinding: Can not bind to objectName of node undefined.",this);return}s=s[b]}if(Pn!==void 0){if(s[Pn]===void 0){console.error("THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.",this,s);return}s=s[Pn]}}const rn=s[_e];if(rn===void 0){const Pn=a.nodeName;console.error("THREE.PropertyBinding: Trying to update property for track: "+Pn+"."+_e+" but it wasn't found.",s);return}let sn=this.Versioning.None;this.targetObject=s,s.needsUpdate!==void 0?sn=this.Versioning.NeedsUpdate:s.matrixWorldNeedsUpdate!==void 0&&(sn=this.Versioning.MatrixWorldNeedsUpdate);let yn=this.BindingType.Direct;if(bt!==void 0){if(_e==="morphTargetInfluences"){if(!s.geometry){console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.",this);return}if(!s.geometry.morphAttributes){console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.",this);return}s.morphTargetDictionary[bt]!==void 0&&(bt=s.morphTargetDictionary[bt])}yn=this.BindingType.ArrayElement,this.resolvedProperty=rn,this.propertyIndex=bt}else rn.fromArray!==void 0&&rn.toArray!==void 0?(yn=this.BindingType.HasFromToArray,this.resolvedProperty=rn):Array.isArray(rn)?(yn=this.BindingType.EntireArray,this.resolvedProperty=rn):this.propertyName=_e;this.getValue=this.GetterByBindingType[yn],this.setValue=this.SetterByBindingTypeAndVersioning[yn][sn]}unbind(){this.node=null,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}}PropertyBinding.Composite=Composite;PropertyBinding.prototype.BindingType={Direct:0,EntireArray:1,ArrayElement:2,HasFromToArray:3};PropertyBinding.prototype.Versioning={None:0,NeedsUpdate:1,MatrixWorldNeedsUpdate:2};PropertyBinding.prototype.GetterByBindingType=[PropertyBinding.prototype._getValue_direct,PropertyBinding.prototype._getValue_array,PropertyBinding.prototype._getValue_arrayElement,PropertyBinding.prototype._getValue_toArray];PropertyBinding.prototype.SetterByBindingTypeAndVersioning=[[PropertyBinding.prototype._setValue_direct,PropertyBinding.prototype._setValue_direct_setNeedsUpdate,PropertyBinding.prototype._setValue_direct_setMatrixWorldNeedsUpdate],[PropertyBinding.prototype._setValue_array,PropertyBinding.prototype._setValue_array_setNeedsUpdate,PropertyBinding.prototype._setValue_array_setMatrixWorldNeedsUpdate],[PropertyBinding.prototype._setValue_arrayElement,PropertyBinding.prototype._setValue_arrayElement_setNeedsUpdate,PropertyBinding.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate],[PropertyBinding.prototype._setValue_fromArray,PropertyBinding.prototype._setValue_fromArray_setNeedsUpdate,PropertyBinding.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate]];class AnimationObjectGroup{constructor(){this.isAnimationObjectGroup=!0,this.uuid=generateUUID(),this._objects=Array.prototype.slice.call(arguments),this.nCachedObjects_=0;const s={};this._indicesByUUID=s;for(let b=0,_e=arguments.length;b!==_e;++b)s[arguments[b].uuid]=b;this._paths=[],this._parsedPaths=[],this._bindings=[],this._bindingsIndicesByPath={};const a=this;this.stats={objects:{get total(){return a._objects.length},get inUse(){return this.total-a.nCachedObjects_}},get bindingsPerObject(){return a._bindings.length}}}add(){const s=this._objects,a=this._indicesByUUID,b=this._paths,_e=this._parsedPaths,bt=this._bindings,rn=bt.length;let sn,yn=s.length,Pn=this.nCachedObjects_;for(let zn=0,lr=arguments.length;zn!==lr;++zn){const ar=arguments[zn],cr=ar.uuid;let hr=a[cr];if(hr===void 0){hr=yn++,a[cr]=hr,s.push(ar);for(let es=0,Ur=rn;es!==Ur;++es)bt[es].push(new PropertyBinding(ar,b[es],_e[es]))}else if(hr<Pn){sn=s[hr];const es=--Pn,Ur=s[es];a[Ur.uuid]=hr,s[hr]=Ur,a[cr]=es,s[es]=ar;for(let Dr=0,zr=rn;Dr!==zr;++Dr){const rs=bt[Dr],as=rs[es];let os=rs[hr];rs[hr]=as,os===void 0&&(os=new PropertyBinding(ar,b[Dr],_e[Dr])),rs[es]=os}}else s[hr]!==sn&&console.error("THREE.AnimationObjectGroup: Different objects with the same UUID detected. Clean the caches or recreate your infrastructure when reloading scenes.")}this.nCachedObjects_=Pn}remove(){const s=this._objects,a=this._indicesByUUID,b=this._bindings,_e=b.length;let bt=this.nCachedObjects_;for(let rn=0,sn=arguments.length;rn!==sn;++rn){const yn=arguments[rn],Pn=yn.uuid,zn=a[Pn];if(zn!==void 0&&zn>=bt){const lr=bt++,ar=s[lr];a[ar.uuid]=zn,s[zn]=ar,a[Pn]=lr,s[lr]=yn;for(let cr=0,hr=_e;cr!==hr;++cr){const es=b[cr],Ur=es[lr],Dr=es[zn];es[zn]=Ur,es[lr]=Dr}}}this.nCachedObjects_=bt}uncache(){const s=this._objects,a=this._indicesByUUID,b=this._bindings,_e=b.length;let bt=this.nCachedObjects_,rn=s.length;for(let sn=0,yn=arguments.length;sn!==yn;++sn){const Pn=arguments[sn],zn=Pn.uuid,lr=a[zn];if(lr!==void 0)if(delete a[zn],lr<bt){const ar=--bt,cr=s[ar],hr=--rn,es=s[hr];a[cr.uuid]=lr,s[lr]=cr,a[es.uuid]=ar,s[ar]=es,s.pop();for(let Ur=0,Dr=_e;Ur!==Dr;++Ur){const zr=b[Ur],rs=zr[ar],as=zr[hr];zr[lr]=rs,zr[ar]=as,zr.pop()}}else{const ar=--rn,cr=s[ar];ar>0&&(a[cr.uuid]=lr),s[lr]=cr,s.pop();for(let hr=0,es=_e;hr!==es;++hr){const Ur=b[hr];Ur[lr]=Ur[ar],Ur.pop()}}}this.nCachedObjects_=bt}subscribe_(s,a){const b=this._bindingsIndicesByPath;let _e=b[s];const bt=this._bindings;if(_e!==void 0)return bt[_e];const rn=this._paths,sn=this._parsedPaths,yn=this._objects,Pn=yn.length,zn=this.nCachedObjects_,lr=new Array(Pn);_e=bt.length,b[s]=_e,rn.push(s),sn.push(a),bt.push(lr);for(let ar=zn,cr=yn.length;ar!==cr;++ar){const hr=yn[ar];lr[ar]=new PropertyBinding(hr,s,a)}return lr}unsubscribe_(s){const a=this._bindingsIndicesByPath,b=a[s];if(b!==void 0){const _e=this._paths,bt=this._parsedPaths,rn=this._bindings,sn=rn.length-1,yn=rn[sn],Pn=s[sn];a[Pn]=b,rn[b]=yn,rn.pop(),bt[b]=bt[sn],bt.pop(),_e[b]=_e[sn],_e.pop()}}}class AnimationAction{constructor(s,a,b=null,_e=a.blendMode){this._mixer=s,this._clip=a,this._localRoot=b,this.blendMode=_e;const bt=a.tracks,rn=bt.length,sn=new Array(rn),yn={endingStart:ZeroCurvatureEnding,endingEnd:ZeroCurvatureEnding};for(let Pn=0;Pn!==rn;++Pn){const zn=bt[Pn].createInterpolant(null);sn[Pn]=zn,zn.settings=yn}this._interpolantSettings=yn,this._interpolants=sn,this._propertyBindings=new Array(rn),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=LoopRepeat,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}play(){return this._mixer._activateAction(this),this}stop(){return this._mixer._deactivateAction(this),this.reset()}reset(){return this.paused=!1,this.enabled=!0,this.time=0,this._loopCount=-1,this._startTime=null,this.stopFading().stopWarping()}isRunning(){return this.enabled&&!this.paused&&this.timeScale!==0&&this._startTime===null&&this._mixer._isActiveAction(this)}isScheduled(){return this._mixer._isActiveAction(this)}startAt(s){return this._startTime=s,this}setLoop(s,a){return this.loop=s,this.repetitions=a,this}setEffectiveWeight(s){return this.weight=s,this._effectiveWeight=this.enabled?s:0,this.stopFading()}getEffectiveWeight(){return this._effectiveWeight}fadeIn(s){return this._scheduleFading(s,0,1)}fadeOut(s){return this._scheduleFading(s,1,0)}crossFadeFrom(s,a,b){if(s.fadeOut(a),this.fadeIn(a),b){const _e=this._clip.duration,bt=s._clip.duration,rn=bt/_e,sn=_e/bt;s.warp(1,rn,a),this.warp(sn,1,a)}return this}crossFadeTo(s,a,b){return s.crossFadeFrom(this,a,b)}stopFading(){const s=this._weightInterpolant;return s!==null&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(s)),this}setEffectiveTimeScale(s){return this.timeScale=s,this._effectiveTimeScale=this.paused?0:s,this.stopWarping()}getEffectiveTimeScale(){return this._effectiveTimeScale}setDuration(s){return this.timeScale=this._clip.duration/s,this.stopWarping()}syncWith(s){return this.time=s.time,this.timeScale=s.timeScale,this.stopWarping()}halt(s){return this.warp(this._effectiveTimeScale,0,s)}warp(s,a,b){const _e=this._mixer,bt=_e.time,rn=this.timeScale;let sn=this._timeScaleInterpolant;sn===null&&(sn=_e._lendControlInterpolant(),this._timeScaleInterpolant=sn);const yn=sn.parameterPositions,Pn=sn.sampleValues;return yn[0]=bt,yn[1]=bt+b,Pn[0]=s/rn,Pn[1]=a/rn,this}stopWarping(){const s=this._timeScaleInterpolant;return s!==null&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(s)),this}getMixer(){return this._mixer}getClip(){return this._clip}getRoot(){return this._localRoot||this._mixer._root}_update(s,a,b,_e){if(!this.enabled){this._updateWeight(s);return}const bt=this._startTime;if(bt!==null){const yn=(s-bt)*b;yn<0||b===0?a=0:(this._startTime=null,a=b*yn)}a*=this._updateTimeScale(s);const rn=this._updateTime(a),sn=this._updateWeight(s);if(sn>0){const yn=this._interpolants,Pn=this._propertyBindings;switch(this.blendMode){case AdditiveAnimationBlendMode:for(let zn=0,lr=yn.length;zn!==lr;++zn)yn[zn].evaluate(rn),Pn[zn].accumulateAdditive(sn);break;case NormalAnimationBlendMode:default:for(let zn=0,lr=yn.length;zn!==lr;++zn)yn[zn].evaluate(rn),Pn[zn].accumulate(_e,sn)}}}_updateWeight(s){let a=0;if(this.enabled){a=this.weight;const b=this._weightInterpolant;if(b!==null){const _e=b.evaluate(s)[0];a*=_e,s>b.parameterPositions[1]&&(this.stopFading(),_e===0&&(this.enabled=!1))}}return this._effectiveWeight=a,a}_updateTimeScale(s){let a=0;if(!this.paused){a=this.timeScale;const b=this._timeScaleInterpolant;if(b!==null){const _e=b.evaluate(s)[0];a*=_e,s>b.parameterPositions[1]&&(this.stopWarping(),a===0?this.paused=!0:this.timeScale=a)}}return this._effectiveTimeScale=a,a}_updateTime(s){const a=this._clip.duration,b=this.loop;let _e=this.time+s,bt=this._loopCount;const rn=b===LoopPingPong;if(s===0)return bt===-1?_e:rn&&(bt&1)===1?a-_e:_e;if(b===LoopOnce){bt===-1&&(this._loopCount=0,this._setEndings(!0,!0,!1));e:{if(_e>=a)_e=a;else if(_e<0)_e=0;else{this.time=_e;break e}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=_e,this._mixer.dispatchEvent({type:"finished",action:this,direction:s<0?-1:1})}}else{if(bt===-1&&(s>=0?(bt=0,this._setEndings(!0,this.repetitions===0,rn)):this._setEndings(this.repetitions===0,!0,rn)),_e>=a||_e<0){const sn=Math.floor(_e/a);_e-=a*sn,bt+=Math.abs(sn);const yn=this.repetitions-bt;if(yn<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,_e=s>0?a:0,this.time=_e,this._mixer.dispatchEvent({type:"finished",action:this,direction:s>0?1:-1});else{if(yn===1){const Pn=s<0;this._setEndings(Pn,!Pn,rn)}else this._setEndings(!1,!1,rn);this._loopCount=bt,this.time=_e,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:sn})}}else this.time=_e;if(rn&&(bt&1)===1)return a-_e}return _e}_setEndings(s,a,b){const _e=this._interpolantSettings;b?(_e.endingStart=ZeroSlopeEnding,_e.endingEnd=ZeroSlopeEnding):(s?_e.endingStart=this.zeroSlopeAtStart?ZeroSlopeEnding:ZeroCurvatureEnding:_e.endingStart=WrapAroundEnding,a?_e.endingEnd=this.zeroSlopeAtEnd?ZeroSlopeEnding:ZeroCurvatureEnding:_e.endingEnd=WrapAroundEnding)}_scheduleFading(s,a,b){const _e=this._mixer,bt=_e.time;let rn=this._weightInterpolant;rn===null&&(rn=_e._lendControlInterpolant(),this._weightInterpolant=rn);const sn=rn.parameterPositions,yn=rn.sampleValues;return sn[0]=bt,yn[0]=a,sn[1]=bt+s,yn[1]=b,this}}const _controlInterpolantsResultBuffer=new Float32Array(1);class AnimationMixer extends EventDispatcher$2{constructor(s){super(),this._root=s,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}_bindAction(s,a){const b=s._localRoot||this._root,_e=s._clip.tracks,bt=_e.length,rn=s._propertyBindings,sn=s._interpolants,yn=b.uuid,Pn=this._bindingsByRootAndName;let zn=Pn[yn];zn===void 0&&(zn={},Pn[yn]=zn);for(let lr=0;lr!==bt;++lr){const ar=_e[lr],cr=ar.name;let hr=zn[cr];if(hr!==void 0)++hr.referenceCount,rn[lr]=hr;else{if(hr=rn[lr],hr!==void 0){hr._cacheIndex===null&&(++hr.referenceCount,this._addInactiveBinding(hr,yn,cr));continue}const es=a&&a._propertyBindings[lr].binding.parsedPath;hr=new PropertyMixer(PropertyBinding.create(b,cr,es),ar.ValueTypeName,ar.getValueSize()),++hr.referenceCount,this._addInactiveBinding(hr,yn,cr),rn[lr]=hr}sn[lr].resultBuffer=hr.buffer}}_activateAction(s){if(!this._isActiveAction(s)){if(s._cacheIndex===null){const b=(s._localRoot||this._root).uuid,_e=s._clip.uuid,bt=this._actionsByClip[_e];this._bindAction(s,bt&&bt.knownActions[0]),this._addInactiveAction(s,_e,b)}const a=s._propertyBindings;for(let b=0,_e=a.length;b!==_e;++b){const bt=a[b];bt.useCount++===0&&(this._lendBinding(bt),bt.saveOriginalState())}this._lendAction(s)}}_deactivateAction(s){if(this._isActiveAction(s)){const a=s._propertyBindings;for(let b=0,_e=a.length;b!==_e;++b){const bt=a[b];--bt.useCount===0&&(bt.restoreOriginalState(),this._takeBackBinding(bt))}this._takeBackAction(s)}}_initMemoryManager(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;const s=this;this.stats={actions:{get total(){return s._actions.length},get inUse(){return s._nActiveActions}},bindings:{get total(){return s._bindings.length},get inUse(){return s._nActiveBindings}},controlInterpolants:{get total(){return s._controlInterpolants.length},get inUse(){return s._nActiveControlInterpolants}}}}_isActiveAction(s){const a=s._cacheIndex;return a!==null&&a<this._nActiveActions}_addInactiveAction(s,a,b){const _e=this._actions,bt=this._actionsByClip;let rn=bt[a];if(rn===void 0)rn={knownActions:[s],actionByRoot:{}},s._byClipCacheIndex=0,bt[a]=rn;else{const sn=rn.knownActions;s._byClipCacheIndex=sn.length,sn.push(s)}s._cacheIndex=_e.length,_e.push(s),rn.actionByRoot[b]=s}_removeInactiveAction(s){const a=this._actions,b=a[a.length-1],_e=s._cacheIndex;b._cacheIndex=_e,a[_e]=b,a.pop(),s._cacheIndex=null;const bt=s._clip.uuid,rn=this._actionsByClip,sn=rn[bt],yn=sn.knownActions,Pn=yn[yn.length-1],zn=s._byClipCacheIndex;Pn._byClipCacheIndex=zn,yn[zn]=Pn,yn.pop(),s._byClipCacheIndex=null;const lr=sn.actionByRoot,ar=(s._localRoot||this._root).uuid;delete lr[ar],yn.length===0&&delete rn[bt],this._removeInactiveBindingsForAction(s)}_removeInactiveBindingsForAction(s){const a=s._propertyBindings;for(let b=0,_e=a.length;b!==_e;++b){const bt=a[b];--bt.referenceCount===0&&this._removeInactiveBinding(bt)}}_lendAction(s){const a=this._actions,b=s._cacheIndex,_e=this._nActiveActions++,bt=a[_e];s._cacheIndex=_e,a[_e]=s,bt._cacheIndex=b,a[b]=bt}_takeBackAction(s){const a=this._actions,b=s._cacheIndex,_e=--this._nActiveActions,bt=a[_e];s._cacheIndex=_e,a[_e]=s,bt._cacheIndex=b,a[b]=bt}_addInactiveBinding(s,a,b){const _e=this._bindingsByRootAndName,bt=this._bindings;let rn=_e[a];rn===void 0&&(rn={},_e[a]=rn),rn[b]=s,s._cacheIndex=bt.length,bt.push(s)}_removeInactiveBinding(s){const a=this._bindings,b=s.binding,_e=b.rootNode.uuid,bt=b.path,rn=this._bindingsByRootAndName,sn=rn[_e],yn=a[a.length-1],Pn=s._cacheIndex;yn._cacheIndex=Pn,a[Pn]=yn,a.pop(),delete sn[bt],Object.keys(sn).length===0&&delete rn[_e]}_lendBinding(s){const a=this._bindings,b=s._cacheIndex,_e=this._nActiveBindings++,bt=a[_e];s._cacheIndex=_e,a[_e]=s,bt._cacheIndex=b,a[b]=bt}_takeBackBinding(s){const a=this._bindings,b=s._cacheIndex,_e=--this._nActiveBindings,bt=a[_e];s._cacheIndex=_e,a[_e]=s,bt._cacheIndex=b,a[b]=bt}_lendControlInterpolant(){const s=this._controlInterpolants,a=this._nActiveControlInterpolants++;let b=s[a];return b===void 0&&(b=new LinearInterpolant(new Float32Array(2),new Float32Array(2),1,_controlInterpolantsResultBuffer),b.__cacheIndex=a,s[a]=b),b}_takeBackControlInterpolant(s){const a=this._controlInterpolants,b=s.__cacheIndex,_e=--this._nActiveControlInterpolants,bt=a[_e];s.__cacheIndex=_e,a[_e]=s,bt.__cacheIndex=b,a[b]=bt}clipAction(s,a,b){const _e=a||this._root,bt=_e.uuid;let rn=typeof s=="string"?AnimationClip.findByName(_e,s):s;const sn=rn!==null?rn.uuid:s,yn=this._actionsByClip[sn];let Pn=null;if(b===void 0&&(rn!==null?b=rn.blendMode:b=NormalAnimationBlendMode),yn!==void 0){const lr=yn.actionByRoot[bt];if(lr!==void 0&&lr.blendMode===b)return lr;Pn=yn.knownActions[0],rn===null&&(rn=Pn._clip)}if(rn===null)return null;const zn=new AnimationAction(this,rn,a,b);return this._bindAction(zn,Pn),this._addInactiveAction(zn,sn,bt),zn}existingAction(s,a){const b=a||this._root,_e=b.uuid,bt=typeof s=="string"?AnimationClip.findByName(b,s):s,rn=bt?bt.uuid:s,sn=this._actionsByClip[rn];return sn!==void 0&&sn.actionByRoot[_e]||null}stopAllAction(){const s=this._actions,a=this._nActiveActions;for(let b=a-1;b>=0;--b)s[b].stop();return this}update(s){s*=this.timeScale;const a=this._actions,b=this._nActiveActions,_e=this.time+=s,bt=Math.sign(s),rn=this._accuIndex^=1;for(let Pn=0;Pn!==b;++Pn)a[Pn]._update(_e,s,bt,rn);const sn=this._bindings,yn=this._nActiveBindings;for(let Pn=0;Pn!==yn;++Pn)sn[Pn].apply(rn);return this}setTime(s){this.time=0;for(let a=0;a<this._actions.length;a++)this._actions[a].time=0;return this.update(s)}getRoot(){return this._root}uncacheClip(s){const a=this._actions,b=s.uuid,_e=this._actionsByClip,bt=_e[b];if(bt!==void 0){const rn=bt.knownActions;for(let sn=0,yn=rn.length;sn!==yn;++sn){const Pn=rn[sn];this._deactivateAction(Pn);const zn=Pn._cacheIndex,lr=a[a.length-1];Pn._cacheIndex=null,Pn._byClipCacheIndex=null,lr._cacheIndex=zn,a[zn]=lr,a.pop(),this._removeInactiveBindingsForAction(Pn)}delete _e[b]}}uncacheRoot(s){const a=s.uuid,b=this._actionsByClip;for(const rn in b){const sn=b[rn].actionByRoot,yn=sn[a];yn!==void 0&&(this._deactivateAction(yn),this._removeInactiveAction(yn))}const _e=this._bindingsByRootAndName,bt=_e[a];if(bt!==void 0)for(const rn in bt){const sn=bt[rn];sn.restoreOriginalState(),this._removeInactiveBinding(sn)}}uncacheAction(s,a){const b=this.existingAction(s,a);b!==null&&(this._deactivateAction(b),this._removeInactiveAction(b))}}class Uniform{constructor(s){this.value=s}clone(){return new Uniform(this.value.clone===void 0?this.value:this.value.clone())}}let _id=0;class UniformsGroup extends EventDispatcher$2{constructor(){super(),this.isUniformsGroup=!0,Object.defineProperty(this,"id",{value:_id++}),this.name="",this.usage=StaticDrawUsage,this.uniforms=[]}add(s){return this.uniforms.push(s),this}remove(s){const a=this.uniforms.indexOf(s);return a!==-1&&this.uniforms.splice(a,1),this}setName(s){return this.name=s,this}setUsage(s){return this.usage=s,this}dispose(){return this.dispatchEvent({type:"dispose"}),this}copy(s){this.name=s.name,this.usage=s.usage;const a=s.uniforms;this.uniforms.length=0;for(let b=0,_e=a.length;b<_e;b++)this.uniforms.push(a[b].clone());return this}clone(){return new this.constructor().copy(this)}}class InstancedInterleavedBuffer extends InterleavedBuffer{constructor(s,a,b=1){super(s,a),this.isInstancedInterleavedBuffer=!0,this.meshPerAttribute=b}copy(s){return super.copy(s),this.meshPerAttribute=s.meshPerAttribute,this}clone(s){const a=super.clone(s);return a.meshPerAttribute=this.meshPerAttribute,a}toJSON(s){const a=super.toJSON(s);return a.isInstancedInterleavedBuffer=!0,a.meshPerAttribute=this.meshPerAttribute,a}}class GLBufferAttribute{constructor(s,a,b,_e,bt){this.isGLBufferAttribute=!0,this.name="",this.buffer=s,this.type=a,this.itemSize=b,this.elementSize=_e,this.count=bt,this.version=0}set needsUpdate(s){s===!0&&this.version++}setBuffer(s){return this.buffer=s,this}setType(s,a){return this.type=s,this.elementSize=a,this}setItemSize(s){return this.itemSize=s,this}setCount(s){return this.count=s,this}}class Raycaster{constructor(s,a,b=0,_e=1/0){this.ray=new Ray(s,a),this.near=b,this.far=_e,this.camera=null,this.layers=new Layers,this.params={Mesh:{},Line:{threshold:1},LOD:{},Points:{threshold:1},Sprite:{}}}set(s,a){this.ray.set(s,a)}setFromCamera(s,a){a.isPerspectiveCamera?(this.ray.origin.setFromMatrixPosition(a.matrixWorld),this.ray.direction.set(s.x,s.y,.5).unproject(a).sub(this.ray.origin).normalize(),this.camera=a):a.isOrthographicCamera?(this.ray.origin.set(s.x,s.y,(a.near+a.far)/(a.near-a.far)).unproject(a),this.ray.direction.set(0,0,-1).transformDirection(a.matrixWorld),this.camera=a):console.error("THREE.Raycaster: Unsupported camera type: "+a.type)}intersectObject(s,a=!0,b=[]){return intersectObject(s,this,b,a),b.sort(ascSort),b}intersectObjects(s,a=!0,b=[]){for(let _e=0,bt=s.length;_e<bt;_e++)intersectObject(s[_e],this,b,a);return b.sort(ascSort),b}}function ascSort(o,s){return o.distance-s.distance}function intersectObject(o,s,a,b){if(o.layers.test(s.layers)&&o.raycast(s,a),b===!0){const _e=o.children;for(let bt=0,rn=_e.length;bt<rn;bt++)intersectObject(_e[bt],s,a,!0)}}class Spherical{constructor(s=1,a=0,b=0){return this.radius=s,this.phi=a,this.theta=b,this}set(s,a,b){return this.radius=s,this.phi=a,this.theta=b,this}copy(s){return this.radius=s.radius,this.phi=s.phi,this.theta=s.theta,this}makeSafe(){return this.phi=Math.max(1e-6,Math.min(Math.PI-1e-6,this.phi)),this}setFromVector3(s){return this.setFromCartesianCoords(s.x,s.y,s.z)}setFromCartesianCoords(s,a,b){return this.radius=Math.sqrt(s*s+a*a+b*b),this.radius===0?(this.theta=0,this.phi=0):(this.theta=Math.atan2(s,b),this.phi=Math.acos(clamp$2(a/this.radius,-1,1))),this}clone(){return new this.constructor().copy(this)}}class Cylindrical{constructor(s=1,a=0,b=0){return this.radius=s,this.theta=a,this.y=b,this}set(s,a,b){return this.radius=s,this.theta=a,this.y=b,this}copy(s){return this.radius=s.radius,this.theta=s.theta,this.y=s.y,this}setFromVector3(s){return this.setFromCartesianCoords(s.x,s.y,s.z)}setFromCartesianCoords(s,a,b){return this.radius=Math.sqrt(s*s+b*b),this.theta=Math.atan2(s,b),this.y=a,this}clone(){return new this.constructor().copy(this)}}const _vector$4=new Vector2;class Box2{constructor(s=new Vector2(1/0,1/0),a=new Vector2(-1/0,-1/0)){this.isBox2=!0,this.min=s,this.max=a}set(s,a){return this.min.copy(s),this.max.copy(a),this}setFromPoints(s){this.makeEmpty();for(let a=0,b=s.length;a<b;a++)this.expandByPoint(s[a]);return this}setFromCenterAndSize(s,a){const b=_vector$4.copy(a).multiplyScalar(.5);return this.min.copy(s).sub(b),this.max.copy(s).add(b),this}clone(){return new this.constructor().copy(this)}copy(s){return this.min.copy(s.min),this.max.copy(s.max),this}makeEmpty(){return this.min.x=this.min.y=1/0,this.max.x=this.max.y=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y}getCenter(s){return this.isEmpty()?s.set(0,0):s.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(s){return this.isEmpty()?s.set(0,0):s.subVectors(this.max,this.min)}expandByPoint(s){return this.min.min(s),this.max.max(s),this}expandByVector(s){return this.min.sub(s),this.max.add(s),this}expandByScalar(s){return this.min.addScalar(-s),this.max.addScalar(s),this}containsPoint(s){return!(s.x<this.min.x||s.x>this.max.x||s.y<this.min.y||s.y>this.max.y)}containsBox(s){return this.min.x<=s.min.x&&s.max.x<=this.max.x&&this.min.y<=s.min.y&&s.max.y<=this.max.y}getParameter(s,a){return a.set((s.x-this.min.x)/(this.max.x-this.min.x),(s.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(s){return!(s.max.x<this.min.x||s.min.x>this.max.x||s.max.y<this.min.y||s.min.y>this.max.y)}clampPoint(s,a){return a.copy(s).clamp(this.min,this.max)}distanceToPoint(s){return this.clampPoint(s,_vector$4).distanceTo(s)}intersect(s){return this.min.max(s.min),this.max.min(s.max),this.isEmpty()&&this.makeEmpty(),this}union(s){return this.min.min(s.min),this.max.max(s.max),this}translate(s){return this.min.add(s),this.max.add(s),this}equals(s){return s.min.equals(this.min)&&s.max.equals(this.max)}}const _startP=new Vector3,_startEnd=new Vector3;class Line3{constructor(s=new Vector3,a=new Vector3){this.start=s,this.end=a}set(s,a){return this.start.copy(s),this.end.copy(a),this}copy(s){return this.start.copy(s.start),this.end.copy(s.end),this}getCenter(s){return s.addVectors(this.start,this.end).multiplyScalar(.5)}delta(s){return s.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(s,a){return this.delta(a).multiplyScalar(s).add(this.start)}closestPointToPointParameter(s,a){_startP.subVectors(s,this.start),_startEnd.subVectors(this.end,this.start);const b=_startEnd.dot(_startEnd);let bt=_startEnd.dot(_startP)/b;return a&&(bt=clamp$2(bt,0,1)),bt}closestPointToPoint(s,a,b){const _e=this.closestPointToPointParameter(s,a);return this.delta(b).multiplyScalar(_e).add(this.start)}applyMatrix4(s){return this.start.applyMatrix4(s),this.end.applyMatrix4(s),this}equals(s){return s.start.equals(this.start)&&s.end.equals(this.end)}clone(){return new this.constructor().copy(this)}}const _vector$3=new Vector3;class SpotLightHelper extends Object3D{constructor(s,a){super(),this.light=s,this.matrix=s.matrixWorld,this.matrixAutoUpdate=!1,this.color=a,this.type="SpotLightHelper";const b=new BufferGeometry,_e=[0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,-1,0,1,0,0,0,0,1,1,0,0,0,0,-1,1];for(let rn=0,sn=1,yn=32;rn<yn;rn++,sn++){const Pn=rn/yn*Math.PI*2,zn=sn/yn*Math.PI*2;_e.push(Math.cos(Pn),Math.sin(Pn),1,Math.cos(zn),Math.sin(zn),1)}b.setAttribute("position",new Float32BufferAttribute(_e,3));const bt=new LineBasicMaterial({fog:!1,toneMapped:!1});this.cone=new LineSegments(b,bt),this.add(this.cone),this.update()}dispose(){this.cone.geometry.dispose(),this.cone.material.dispose()}update(){this.light.updateWorldMatrix(!0,!1),this.light.target.updateWorldMatrix(!0,!1);const s=this.light.distance?this.light.distance:1e3,a=s*Math.tan(this.light.angle);this.cone.scale.set(a,a,s),_vector$3.setFromMatrixPosition(this.light.target.matrixWorld),this.cone.lookAt(_vector$3),this.color!==void 0?this.cone.material.color.set(this.color):this.cone.material.color.copy(this.light.color)}}const _vector$2=new Vector3,_boneMatrix=new Matrix4,_matrixWorldInv=new Matrix4;class SkeletonHelper extends LineSegments{constructor(s){const a=getBoneList(s),b=new BufferGeometry,_e=[],bt=[],rn=new Color$1(0,0,1),sn=new Color$1(0,1,0);for(let Pn=0;Pn<a.length;Pn++){const zn=a[Pn];zn.parent&&zn.parent.isBone&&(_e.push(0,0,0),_e.push(0,0,0),bt.push(rn.r,rn.g,rn.b),bt.push(sn.r,sn.g,sn.b))}b.setAttribute("position",new Float32BufferAttribute(_e,3)),b.setAttribute("color",new Float32BufferAttribute(bt,3));const yn=new LineBasicMaterial({vertexColors:!0,depthTest:!1,depthWrite:!1,toneMapped:!1,transparent:!0});super(b,yn),this.isSkeletonHelper=!0,this.type="SkeletonHelper",this.root=s,this.bones=a,this.matrix=s.matrixWorld,this.matrixAutoUpdate=!1}updateMatrixWorld(s){const a=this.bones,b=this.geometry,_e=b.getAttribute("position");_matrixWorldInv.copy(this.root.matrixWorld).invert();for(let bt=0,rn=0;bt<a.length;bt++){const sn=a[bt];sn.parent&&sn.parent.isBone&&(_boneMatrix.multiplyMatrices(_matrixWorldInv,sn.matrixWorld),_vector$2.setFromMatrixPosition(_boneMatrix),_e.setXYZ(rn,_vector$2.x,_vector$2.y,_vector$2.z),_boneMatrix.multiplyMatrices(_matrixWorldInv,sn.parent.matrixWorld),_vector$2.setFromMatrixPosition(_boneMatrix),_e.setXYZ(rn+1,_vector$2.x,_vector$2.y,_vector$2.z),rn+=2)}b.getAttribute("position").needsUpdate=!0,super.updateMatrixWorld(s)}dispose(){this.geometry.dispose(),this.material.dispose()}}function getBoneList(o){const s=[];o.isBone===!0&&s.push(o);for(let a=0;a<o.children.length;a++)s.push.apply(s,getBoneList(o.children[a]));return s}class PointLightHelper extends Mesh{constructor(s,a,b){const _e=new SphereGeometry(a,4,2),bt=new MeshBasicMaterial({wireframe:!0,fog:!1,toneMapped:!1});super(_e,bt),this.light=s,this.color=b,this.type="PointLightHelper",this.matrix=this.light.matrixWorld,this.matrixAutoUpdate=!1,this.update()}dispose(){this.geometry.dispose(),this.material.dispose()}update(){this.light.updateWorldMatrix(!0,!1),this.color!==void 0?this.material.color.set(this.color):this.material.color.copy(this.light.color)}}const _vector$1=new Vector3,_color1=new Color$1,_color2=new Color$1;class HemisphereLightHelper extends Object3D{constructor(s,a,b){super(),this.light=s,this.matrix=s.matrixWorld,this.matrixAutoUpdate=!1,this.color=b,this.type="HemisphereLightHelper";const _e=new OctahedronGeometry(a);_e.rotateY(Math.PI*.5),this.material=new MeshBasicMaterial({wireframe:!0,fog:!1,toneMapped:!1}),this.color===void 0&&(this.material.vertexColors=!0);const bt=_e.getAttribute("position"),rn=new Float32Array(bt.count*3);_e.setAttribute("color",new BufferAttribute(rn,3)),this.add(new Mesh(_e,this.material)),this.update()}dispose(){this.children[0].geometry.dispose(),this.children[0].material.dispose()}update(){const s=this.children[0];if(this.color!==void 0)this.material.color.set(this.color);else{const a=s.geometry.getAttribute("color");_color1.copy(this.light.color),_color2.copy(this.light.groundColor);for(let b=0,_e=a.count;b<_e;b++){const bt=b<_e/2?_color1:_color2;a.setXYZ(b,bt.r,bt.g,bt.b)}a.needsUpdate=!0}this.light.updateWorldMatrix(!0,!1),s.lookAt(_vector$1.setFromMatrixPosition(this.light.matrixWorld).negate())}}class GridHelper extends LineSegments{constructor(s=10,a=10,b=4473924,_e=8947848){b=new Color$1(b),_e=new Color$1(_e);const bt=a/2,rn=s/a,sn=s/2,yn=[],Pn=[];for(let ar=0,cr=0,hr=-sn;ar<=a;ar++,hr+=rn){yn.push(-sn,0,hr,sn,0,hr),yn.push(hr,0,-sn,hr,0,sn);const es=ar===bt?b:_e;es.toArray(Pn,cr),cr+=3,es.toArray(Pn,cr),cr+=3,es.toArray(Pn,cr),cr+=3,es.toArray(Pn,cr),cr+=3}const zn=new BufferGeometry;zn.setAttribute("position",new Float32BufferAttribute(yn,3)),zn.setAttribute("color",new Float32BufferAttribute(Pn,3));const lr=new LineBasicMaterial({vertexColors:!0,toneMapped:!1});super(zn,lr),this.type="GridHelper"}dispose(){this.geometry.dispose(),this.material.dispose()}}class PolarGridHelper extends LineSegments{constructor(s=10,a=16,b=8,_e=64,bt=4473924,rn=8947848){bt=new Color$1(bt),rn=new Color$1(rn);const sn=[],yn=[];if(a>1)for(let lr=0;lr<a;lr++){const ar=lr/a*(Math.PI*2),cr=Math.sin(ar)*s,hr=Math.cos(ar)*s;sn.push(0,0,0),sn.push(cr,0,hr);const es=lr&1?bt:rn;yn.push(es.r,es.g,es.b),yn.push(es.r,es.g,es.b)}for(let lr=0;lr<b;lr++){const ar=lr&1?bt:rn,cr=s-s/b*lr;for(let hr=0;hr<_e;hr++){let es=hr/_e*(Math.PI*2),Ur=Math.sin(es)*cr,Dr=Math.cos(es)*cr;sn.push(Ur,0,Dr),yn.push(ar.r,ar.g,ar.b),es=(hr+1)/_e*(Math.PI*2),Ur=Math.sin(es)*cr,Dr=Math.cos(es)*cr,sn.push(Ur,0,Dr),yn.push(ar.r,ar.g,ar.b)}}const Pn=new BufferGeometry;Pn.setAttribute("position",new Float32BufferAttribute(sn,3)),Pn.setAttribute("color",new Float32BufferAttribute(yn,3));const zn=new LineBasicMaterial({vertexColors:!0,toneMapped:!1});super(Pn,zn),this.type="PolarGridHelper"}dispose(){this.geometry.dispose(),this.material.dispose()}}const _v1=new Vector3,_v2$5=new Vector3,_v3=new Vector3;class DirectionalLightHelper extends Object3D{constructor(s,a,b){super(),this.light=s,this.matrix=s.matrixWorld,this.matrixAutoUpdate=!1,this.color=b,this.type="DirectionalLightHelper",a===void 0&&(a=1);let _e=new BufferGeometry;_e.setAttribute("position",new Float32BufferAttribute([-a,a,0,a,a,0,a,-a,0,-a,-a,0,-a,a,0],3));const bt=new LineBasicMaterial({fog:!1,toneMapped:!1});this.lightPlane=new Line(_e,bt),this.add(this.lightPlane),_e=new BufferGeometry,_e.setAttribute("position",new Float32BufferAttribute([0,0,0,0,0,1],3)),this.targetLine=new Line(_e,bt),this.add(this.targetLine),this.update()}dispose(){this.lightPlane.geometry.dispose(),this.lightPlane.material.dispose(),this.targetLine.geometry.dispose(),this.targetLine.material.dispose()}update(){this.light.updateWorldMatrix(!0,!1),this.light.target.updateWorldMatrix(!0,!1),_v1.setFromMatrixPosition(this.light.matrixWorld),_v2$5.setFromMatrixPosition(this.light.target.matrixWorld),_v3.subVectors(_v2$5,_v1),this.lightPlane.lookAt(_v2$5),this.color!==void 0?(this.lightPlane.material.color.set(this.color),this.targetLine.material.color.set(this.color)):(this.lightPlane.material.color.copy(this.light.color),this.targetLine.material.color.copy(this.light.color)),this.targetLine.lookAt(_v2$5),this.targetLine.scale.z=_v3.length()}}const _vector=new Vector3,_camera=new Camera;class CameraHelper extends LineSegments{constructor(s){const a=new BufferGeometry,b=new LineBasicMaterial({color:16777215,vertexColors:!0,toneMapped:!1}),_e=[],bt=[],rn={};sn("n1","n2"),sn("n2","n4"),sn("n4","n3"),sn("n3","n1"),sn("f1","f2"),sn("f2","f4"),sn("f4","f3"),sn("f3","f1"),sn("n1","f1"),sn("n2","f2"),sn("n3","f3"),sn("n4","f4"),sn("p","n1"),sn("p","n2"),sn("p","n3"),sn("p","n4"),sn("u1","u2"),sn("u2","u3"),sn("u3","u1"),sn("c","t"),sn("p","c"),sn("cn1","cn2"),sn("cn3","cn4"),sn("cf1","cf2"),sn("cf3","cf4");function sn(hr,es){yn(hr),yn(es)}function yn(hr){_e.push(0,0,0),bt.push(0,0,0),rn[hr]===void 0&&(rn[hr]=[]),rn[hr].push(_e.length/3-1)}a.setAttribute("position",new Float32BufferAttribute(_e,3)),a.setAttribute("color",new Float32BufferAttribute(bt,3)),super(a,b),this.type="CameraHelper",this.camera=s,this.camera.updateProjectionMatrix&&this.camera.updateProjectionMatrix(),this.matrix=s.matrixWorld,this.matrixAutoUpdate=!1,this.pointMap=rn,this.update();const Pn=new Color$1(16755200),zn=new Color$1(16711680),lr=new Color$1(43775),ar=new Color$1(16777215),cr=new Color$1(3355443);this.setColors(Pn,zn,lr,ar,cr)}setColors(s,a,b,_e,bt){const sn=this.geometry.getAttribute("color");sn.setXYZ(0,s.r,s.g,s.b),sn.setXYZ(1,s.r,s.g,s.b),sn.setXYZ(2,s.r,s.g,s.b),sn.setXYZ(3,s.r,s.g,s.b),sn.setXYZ(4,s.r,s.g,s.b),sn.setXYZ(5,s.r,s.g,s.b),sn.setXYZ(6,s.r,s.g,s.b),sn.setXYZ(7,s.r,s.g,s.b),sn.setXYZ(8,s.r,s.g,s.b),sn.setXYZ(9,s.r,s.g,s.b),sn.setXYZ(10,s.r,s.g,s.b),sn.setXYZ(11,s.r,s.g,s.b),sn.setXYZ(12,s.r,s.g,s.b),sn.setXYZ(13,s.r,s.g,s.b),sn.setXYZ(14,s.r,s.g,s.b),sn.setXYZ(15,s.r,s.g,s.b),sn.setXYZ(16,s.r,s.g,s.b),sn.setXYZ(17,s.r,s.g,s.b),sn.setXYZ(18,s.r,s.g,s.b),sn.setXYZ(19,s.r,s.g,s.b),sn.setXYZ(20,s.r,s.g,s.b),sn.setXYZ(21,s.r,s.g,s.b),sn.setXYZ(22,s.r,s.g,s.b),sn.setXYZ(23,s.r,s.g,s.b),sn.setXYZ(24,a.r,a.g,a.b),sn.setXYZ(25,a.r,a.g,a.b),sn.setXYZ(26,a.r,a.g,a.b),sn.setXYZ(27,a.r,a.g,a.b),sn.setXYZ(28,a.r,a.g,a.b),sn.setXYZ(29,a.r,a.g,a.b),sn.setXYZ(30,a.r,a.g,a.b),sn.setXYZ(31,a.r,a.g,a.b),sn.setXYZ(32,b.r,b.g,b.b),sn.setXYZ(33,b.r,b.g,b.b),sn.setXYZ(34,b.r,b.g,b.b),sn.setXYZ(35,b.r,b.g,b.b),sn.setXYZ(36,b.r,b.g,b.b),sn.setXYZ(37,b.r,b.g,b.b),sn.setXYZ(38,_e.r,_e.g,_e.b),sn.setXYZ(39,_e.r,_e.g,_e.b),sn.setXYZ(40,bt.r,bt.g,bt.b),sn.setXYZ(41,bt.r,bt.g,bt.b),sn.setXYZ(42,bt.r,bt.g,bt.b),sn.setXYZ(43,bt.r,bt.g,bt.b),sn.setXYZ(44,bt.r,bt.g,bt.b),sn.setXYZ(45,bt.r,bt.g,bt.b),sn.setXYZ(46,bt.r,bt.g,bt.b),sn.setXYZ(47,bt.r,bt.g,bt.b),sn.setXYZ(48,bt.r,bt.g,bt.b),sn.setXYZ(49,bt.r,bt.g,bt.b),sn.needsUpdate=!0}update(){const s=this.geometry,a=this.pointMap,b=1,_e=1;_camera.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse),setPoint("c",a,s,_camera,0,0,-1),setPoint("t",a,s,_camera,0,0,1),setPoint("n1",a,s,_camera,-b,-_e,-1),setPoint("n2",a,s,_camera,b,-_e,-1),setPoint("n3",a,s,_camera,-b,_e,-1),setPoint("n4",a,s,_camera,b,_e,-1),setPoint("f1",a,s,_camera,-b,-_e,1),setPoint("f2",a,s,_camera,b,-_e,1),setPoint("f3",a,s,_camera,-b,_e,1),setPoint("f4",a,s,_camera,b,_e,1),setPoint("u1",a,s,_camera,b*.7,_e*1.1,-1),setPoint("u2",a,s,_camera,-b*.7,_e*1.1,-1),setPoint("u3",a,s,_camera,0,_e*2,-1),setPoint("cf1",a,s,_camera,-b,0,1),setPoint("cf2",a,s,_camera,b,0,1),setPoint("cf3",a,s,_camera,0,-_e,1),setPoint("cf4",a,s,_camera,0,_e,1),setPoint("cn1",a,s,_camera,-b,0,-1),setPoint("cn2",a,s,_camera,b,0,-1),setPoint("cn3",a,s,_camera,0,-_e,-1),setPoint("cn4",a,s,_camera,0,_e,-1),s.getAttribute("position").needsUpdate=!0}dispose(){this.geometry.dispose(),this.material.dispose()}}function setPoint(o,s,a,b,_e,bt,rn){_vector.set(_e,bt,rn).unproject(b);const sn=s[o];if(sn!==void 0){const yn=a.getAttribute("position");for(let Pn=0,zn=sn.length;Pn<zn;Pn++)yn.setXYZ(sn[Pn],_vector.x,_vector.y,_vector.z)}}const _box=new Box3;class BoxHelper extends LineSegments{constructor(s,a=16776960){const b=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),_e=new Float32Array(8*3),bt=new BufferGeometry;bt.setIndex(new BufferAttribute(b,1)),bt.setAttribute("position",new BufferAttribute(_e,3)),super(bt,new LineBasicMaterial({color:a,toneMapped:!1})),this.object=s,this.type="BoxHelper",this.matrixAutoUpdate=!1,this.update()}update(s){if(s!==void 0&&console.warn("THREE.BoxHelper: .update() has no longer arguments."),this.object!==void 0&&_box.setFromObject(this.object),_box.isEmpty())return;const a=_box.min,b=_box.max,_e=this.geometry.attributes.position,bt=_e.array;bt[0]=b.x,bt[1]=b.y,bt[2]=b.z,bt[3]=a.x,bt[4]=b.y,bt[5]=b.z,bt[6]=a.x,bt[7]=a.y,bt[8]=b.z,bt[9]=b.x,bt[10]=a.y,bt[11]=b.z,bt[12]=b.x,bt[13]=b.y,bt[14]=a.z,bt[15]=a.x,bt[16]=b.y,bt[17]=a.z,bt[18]=a.x,bt[19]=a.y,bt[20]=a.z,bt[21]=b.x,bt[22]=a.y,bt[23]=a.z,_e.needsUpdate=!0,this.geometry.computeBoundingSphere()}setFromObject(s){return this.object=s,this.update(),this}copy(s,a){return super.copy(s,a),this.object=s.object,this}dispose(){this.geometry.dispose(),this.material.dispose()}}class Box3Helper extends LineSegments{constructor(s,a=16776960){const b=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),_e=[1,1,1,-1,1,1,-1,-1,1,1,-1,1,1,1,-1,-1,1,-1,-1,-1,-1,1,-1,-1],bt=new BufferGeometry;bt.setIndex(new BufferAttribute(b,1)),bt.setAttribute("position",new Float32BufferAttribute(_e,3)),super(bt,new LineBasicMaterial({color:a,toneMapped:!1})),this.box=s,this.type="Box3Helper",this.geometry.computeBoundingSphere()}updateMatrixWorld(s){const a=this.box;a.isEmpty()||(a.getCenter(this.position),a.getSize(this.scale),this.scale.multiplyScalar(.5),super.updateMatrixWorld(s))}dispose(){this.geometry.dispose(),this.material.dispose()}}class PlaneHelper extends Line{constructor(s,a=1,b=16776960){const _e=b,bt=[1,-1,0,-1,1,0,-1,-1,0,1,1,0,-1,1,0,-1,-1,0,1,-1,0,1,1,0],rn=new BufferGeometry;rn.setAttribute("position",new Float32BufferAttribute(bt,3)),rn.computeBoundingSphere(),super(rn,new LineBasicMaterial({color:_e,toneMapped:!1})),this.type="PlaneHelper",this.plane=s,this.size=a;const sn=[1,1,0,-1,1,0,-1,-1,0,1,1,0,-1,-1,0,1,-1,0],yn=new BufferGeometry;yn.setAttribute("position",new Float32BufferAttribute(sn,3)),yn.computeBoundingSphere(),this.add(new Mesh(yn,new MeshBasicMaterial({color:_e,opacity:.2,transparent:!0,depthWrite:!1,toneMapped:!1})))}updateMatrixWorld(s){this.position.set(0,0,0),this.scale.set(.5*this.size,.5*this.size,1),this.lookAt(this.plane.normal),this.translateZ(-this.plane.constant),super.updateMatrixWorld(s)}dispose(){this.geometry.dispose(),this.material.dispose(),this.children[0].geometry.dispose(),this.children[0].material.dispose()}}const _axis=new Vector3;let _lineGeometry,_coneGeometry;class ArrowHelper extends Object3D{constructor(s=new Vector3(0,0,1),a=new Vector3(0,0,0),b=1,_e=16776960,bt=b*.2,rn=bt*.2){super(),this.type="ArrowHelper",_lineGeometry===void 0&&(_lineGeometry=new BufferGeometry,_lineGeometry.setAttribute("position",new Float32BufferAttribute([0,0,0,0,1,0],3)),_coneGeometry=new CylinderGeometry(0,.5,1,5,1),_coneGeometry.translate(0,-.5,0)),this.position.copy(a),this.line=new Line(_lineGeometry,new LineBasicMaterial({color:_e,toneMapped:!1})),this.line.matrixAutoUpdate=!1,this.add(this.line),this.cone=new Mesh(_coneGeometry,new MeshBasicMaterial({color:_e,toneMapped:!1})),this.cone.matrixAutoUpdate=!1,this.add(this.cone),this.setDirection(s),this.setLength(b,bt,rn)}setDirection(s){if(s.y>.99999)this.quaternion.set(0,0,0,1);else if(s.y<-.99999)this.quaternion.set(1,0,0,0);else{_axis.set(s.z,0,-s.x).normalize();const a=Math.acos(s.y);this.quaternion.setFromAxisAngle(_axis,a)}}setLength(s,a=s*.2,b=a*.2){this.line.scale.set(1,Math.max(1e-4,s-a),1),this.line.updateMatrix(),this.cone.scale.set(b,a,b),this.cone.position.y=s,this.cone.updateMatrix()}setColor(s){this.line.material.color.set(s),this.cone.material.color.set(s)}copy(s){return super.copy(s,!1),this.line.copy(s.line),this.cone.copy(s.cone),this}dispose(){this.line.geometry.dispose(),this.line.material.dispose(),this.cone.geometry.dispose(),this.cone.material.dispose()}}class AxesHelper extends LineSegments{constructor(s=1){const a=[0,0,0,s,0,0,0,0,0,0,s,0,0,0,0,0,0,s],b=[1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1],_e=new BufferGeometry;_e.setAttribute("position",new Float32BufferAttribute(a,3)),_e.setAttribute("color",new Float32BufferAttribute(b,3));const bt=new LineBasicMaterial({vertexColors:!0,toneMapped:!1});super(_e,bt),this.type="AxesHelper"}setColors(s,a,b){const _e=new Color$1,bt=this.geometry.attributes.color.array;return _e.set(s),_e.toArray(bt,0),_e.toArray(bt,3),_e.set(a),_e.toArray(bt,6),_e.toArray(bt,9),_e.set(b),_e.toArray(bt,12),_e.toArray(bt,15),this.geometry.attributes.color.needsUpdate=!0,this}dispose(){this.geometry.dispose(),this.material.dispose()}}class ShapePath{constructor(){this.type="ShapePath",this.color=new Color$1,this.subPaths=[],this.currentPath=null}moveTo(s,a){return this.currentPath=new Path,this.subPaths.push(this.currentPath),this.currentPath.moveTo(s,a),this}lineTo(s,a){return this.currentPath.lineTo(s,a),this}quadraticCurveTo(s,a,b,_e){return this.currentPath.quadraticCurveTo(s,a,b,_e),this}bezierCurveTo(s,a,b,_e,bt,rn){return this.currentPath.bezierCurveTo(s,a,b,_e,bt,rn),this}splineThru(s){return this.currentPath.splineThru(s),this}toShapes(s){function a(Dr){const zr=[];for(let rs=0,as=Dr.length;rs<as;rs++){const os=Dr[rs],ls=new Shape;ls.curves=os.curves,zr.push(ls)}return zr}function b(Dr,zr){const rs=zr.length;let as=!1;for(let os=rs-1,ls=0;ls<rs;os=ls++){let zs=zr[os],ho=zr[ls],ga=ho.x-zs.x,mo=ho.y-zs.y;if(Math.abs(mo)>Number.EPSILON){if(mo<0&&(zs=zr[ls],ga=-ga,ho=zr[os],mo=-mo),Dr.y<zs.y||Dr.y>ho.y)continue;if(Dr.y===zs.y){if(Dr.x===zs.x)return!0}else{const go=mo*(Dr.x-zs.x)-ga*(Dr.y-zs.y);if(go===0)return!0;if(go<0)continue;as=!as}}else{if(Dr.y!==zs.y)continue;if(ho.x<=Dr.x&&Dr.x<=zs.x||zs.x<=Dr.x&&Dr.x<=ho.x)return!0}}return as}const _e=ShapeUtils.isClockWise,bt=this.subPaths;if(bt.length===0)return[];let rn,sn,yn;const Pn=[];if(bt.length===1)return sn=bt[0],yn=new Shape,yn.curves=sn.curves,Pn.push(yn),Pn;let zn=!_e(bt[0].getPoints());zn=s?!zn:zn;const lr=[],ar=[];let cr=[],hr=0,es;ar[hr]=void 0,cr[hr]=[];for(let Dr=0,zr=bt.length;Dr<zr;Dr++)sn=bt[Dr],es=sn.getPoints(),rn=_e(es),rn=s?!rn:rn,rn?(!zn&&ar[hr]&&hr++,ar[hr]={s:new Shape,p:es},ar[hr].s.curves=sn.curves,zn&&hr++,cr[hr]=[]):cr[hr].push({h:sn,p:es[0]});if(!ar[0])return a(bt);if(ar.length>1){let Dr=!1,zr=0;for(let rs=0,as=ar.length;rs<as;rs++)lr[rs]=[];for(let rs=0,as=ar.length;rs<as;rs++){const os=cr[rs];for(let ls=0;ls<os.length;ls++){const zs=os[ls];let ho=!0;for(let ga=0;ga<ar.length;ga++)b(zs.p,ar[ga].p)&&(rs!==ga&&zr++,ho?(ho=!1,lr[ga].push(zs)):Dr=!0);ho&&lr[rs].push(zs)}}zr>0&&Dr===!1&&(cr=lr)}let Ur;for(let Dr=0,zr=ar.length;Dr<zr;Dr++){yn=ar[Dr].s,Pn.push(yn),Ur=cr[Dr];for(let rs=0,as=Ur.length;rs<as;rs++)yn.holes.push(Ur[rs].h)}return Pn}}typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:REVISION}}));typeof window<"u"&&(window.__THREE__?console.warn("WARNING: Multiple instances of Three.js being imported."):window.__THREE__=REVISION);const THREE$1=Object.freeze(Object.defineProperty({__proto__:null,ACESFilmicToneMapping,AddEquation,AddOperation,AdditiveAnimationBlendMode,AdditiveBlending,AlphaFormat,AlwaysCompare,AlwaysDepth,AlwaysStencilFunc,AmbientLight,AnimationAction,AnimationClip,AnimationLoader,AnimationMixer,AnimationObjectGroup,AnimationUtils,ArcCurve,ArrayCamera,ArrowHelper,Audio,AudioAnalyser,AudioContext,AudioListener,AudioLoader,AxesHelper,BackSide,BasicDepthPacking,BasicShadowMap,Bone,BooleanKeyframeTrack,Box2,Box3,Box3Helper,BoxGeometry,BoxHelper,BufferAttribute,BufferGeometry,BufferGeometryLoader,ByteType,Cache,Camera,CameraHelper,CanvasTexture,CapsuleGeometry,CatmullRomCurve3,CineonToneMapping,CircleGeometry,ClampToEdgeWrapping,Clock,Color:Color$1,ColorKeyframeTrack,ColorManagement,CompressedArrayTexture,CompressedCubeTexture,CompressedTexture,CompressedTextureLoader,ConeGeometry,CubeCamera,CubeReflectionMapping,CubeRefractionMapping,CubeTexture,CubeTextureLoader,CubeUVReflectionMapping,CubicBezierCurve,CubicBezierCurve3,CubicInterpolant,CullFaceBack,CullFaceFront,CullFaceFrontBack,CullFaceNone,Curve,CurvePath,CustomBlending,CustomToneMapping,CylinderGeometry,Cylindrical,Data3DTexture,DataArrayTexture,DataTexture,DataTextureLoader,DataUtils,DecrementStencilOp,DecrementWrapStencilOp,DefaultLoadingManager,DepthFormat,DepthStencilFormat,DepthTexture,DirectionalLight,DirectionalLightHelper,DiscreteInterpolant,DisplayP3ColorSpace,DodecahedronGeometry,DoubleSide,DstAlphaFactor,DstColorFactor,DynamicCopyUsage,DynamicDrawUsage,DynamicReadUsage,EdgesGeometry,EllipseCurve,EqualCompare,EqualDepth,EqualStencilFunc,EquirectangularReflectionMapping,EquirectangularRefractionMapping,Euler,EventDispatcher:EventDispatcher$2,ExtrudeGeometry,FileLoader,Float16BufferAttribute,Float32BufferAttribute,Float64BufferAttribute,FloatType,Fog,FogExp2,FramebufferTexture,FrontSide,Frustum,GLBufferAttribute,GLSL1,GLSL3,GreaterCompare,GreaterDepth,GreaterEqualCompare,GreaterEqualDepth,GreaterEqualStencilFunc,GreaterStencilFunc,GridHelper,Group,HalfFloatType,HemisphereLight,HemisphereLightHelper,IcosahedronGeometry,ImageBitmapLoader,ImageLoader,ImageUtils,IncrementStencilOp,IncrementWrapStencilOp,InstancedBufferAttribute,InstancedBufferGeometry,InstancedInterleavedBuffer,InstancedMesh,Int16BufferAttribute,Int32BufferAttribute,Int8BufferAttribute,IntType,InterleavedBuffer,InterleavedBufferAttribute,Interpolant,InterpolateDiscrete,InterpolateLinear,InterpolateSmooth,InvertStencilOp,KeepStencilOp,KeyframeTrack,LOD,LatheGeometry,Layers,LessCompare,LessDepth,LessEqualCompare,LessEqualDepth,LessEqualStencilFunc,LessStencilFunc,Light,LightProbe,Line,Line3,LineBasicMaterial,LineCurve,LineCurve3,LineDashedMaterial,LineLoop,LineSegments,LinearDisplayP3ColorSpace,LinearEncoding,LinearFilter,LinearInterpolant,LinearMipMapLinearFilter,LinearMipMapNearestFilter,LinearMipmapLinearFilter,LinearMipmapNearestFilter,LinearSRGBColorSpace:LinearSRGBColorSpace$1,LinearToneMapping,LinearTransfer,Loader,LoaderUtils,LoadingManager,LoopOnce,LoopPingPong,LoopRepeat,LuminanceAlphaFormat,LuminanceFormat,MOUSE,Material,MaterialLoader,MathUtils,Matrix3,Matrix4,MaxEquation,Mesh,MeshBasicMaterial,MeshDepthMaterial,MeshDistanceMaterial,MeshLambertMaterial,MeshMatcapMaterial,MeshNormalMaterial,MeshPhongMaterial,MeshPhysicalMaterial,MeshStandardMaterial,MeshToonMaterial,MinEquation,MirroredRepeatWrapping,MixOperation,MultiplyBlending,MultiplyOperation,NearestFilter,NearestMipMapLinearFilter,NearestMipMapNearestFilter,NearestMipmapLinearFilter,NearestMipmapNearestFilter,NeverCompare,NeverDepth,NeverStencilFunc,NoBlending,NoColorSpace:NoColorSpace$1,NoToneMapping,NormalAnimationBlendMode,NormalBlending,NotEqualCompare,NotEqualDepth,NotEqualStencilFunc,NumberKeyframeTrack,Object3D,ObjectLoader,ObjectSpaceNormalMap,OctahedronGeometry,OneFactor,OneMinusDstAlphaFactor,OneMinusDstColorFactor,OneMinusSrcAlphaFactor,OneMinusSrcColorFactor,OrthographicCamera,P3Primaries,PCFShadowMap,PCFSoftShadowMap,PMREMGenerator,Path,PerspectiveCamera,Plane,PlaneGeometry,PlaneHelper,PointLight,PointLightHelper,Points,PointsMaterial,PolarGridHelper,PolyhedronGeometry,PositionalAudio,PropertyBinding,PropertyMixer,QuadraticBezierCurve,QuadraticBezierCurve3,Quaternion,QuaternionKeyframeTrack,QuaternionLinearInterpolant,RED_GREEN_RGTC2_Format,RED_RGTC1_Format,REVISION,RGBADepthPacking,RGBAFormat,RGBAIntegerFormat,RGBA_ASTC_10x10_Format,RGBA_ASTC_10x5_Format,RGBA_ASTC_10x6_Format,RGBA_ASTC_10x8_Format,RGBA_ASTC_12x10_Format,RGBA_ASTC_12x12_Format,RGBA_ASTC_4x4_Format,RGBA_ASTC_5x4_Format,RGBA_ASTC_5x5_Format,RGBA_ASTC_6x5_Format,RGBA_ASTC_6x6_Format,RGBA_ASTC_8x5_Format,RGBA_ASTC_8x6_Format,RGBA_ASTC_8x8_Format,RGBA_BPTC_Format,RGBA_ETC2_EAC_Format,RGBA_PVRTC_2BPPV1_Format,RGBA_PVRTC_4BPPV1_Format,RGBA_S3TC_DXT1_Format,RGBA_S3TC_DXT3_Format,RGBA_S3TC_DXT5_Format,RGB_BPTC_SIGNED_Format,RGB_BPTC_UNSIGNED_Format,RGB_ETC1_Format,RGB_ETC2_Format,RGB_PVRTC_2BPPV1_Format,RGB_PVRTC_4BPPV1_Format,RGB_S3TC_DXT1_Format,RGFormat,RGIntegerFormat,RawShaderMaterial,Ray,Raycaster,Rec709Primaries,RectAreaLight,RedFormat,RedIntegerFormat,ReinhardToneMapping,RenderTarget,RepeatWrapping,ReplaceStencilOp,ReverseSubtractEquation,RingGeometry,SIGNED_RED_GREEN_RGTC2_Format,SIGNED_RED_RGTC1_Format,SRGBColorSpace:SRGBColorSpace$1,SRGBTransfer,Scene,ShaderChunk,ShaderLib,ShaderMaterial,ShadowMaterial,Shape,ShapeGeometry,ShapePath,ShapeUtils,ShortType,Skeleton,SkeletonHelper,SkinnedMesh,Source,Sphere,SphereGeometry,Spherical,SphericalHarmonics3,SplineCurve,SpotLight,SpotLightHelper,Sprite,SpriteMaterial,SrcAlphaFactor,SrcAlphaSaturateFactor,SrcColorFactor,StaticCopyUsage,StaticDrawUsage,StaticReadUsage,StereoCamera,StreamCopyUsage,StreamDrawUsage,StreamReadUsage,StringKeyframeTrack,SubtractEquation,SubtractiveBlending,TOUCH,TangentSpaceNormalMap,TetrahedronGeometry,Texture,TextureLoader,TorusGeometry,TorusKnotGeometry,Triangle,TriangleFanDrawMode,TriangleStripDrawMode,TrianglesDrawMode,TubeGeometry,TwoPassDoubleSide,UVMapping,Uint16BufferAttribute,Uint32BufferAttribute,Uint8BufferAttribute,Uint8ClampedBufferAttribute,Uniform,UniformsGroup,UniformsLib,UniformsUtils,UnsignedByteType,UnsignedInt248Type,UnsignedIntType,UnsignedShort4444Type,UnsignedShort5551Type,UnsignedShortType,VSMShadowMap,Vector2,Vector3,Vector4,VectorKeyframeTrack,VideoTexture,WebGL1Renderer,WebGL3DRenderTarget,WebGLArrayRenderTarget,WebGLCoordinateSystem,WebGLCubeRenderTarget,WebGLMultipleRenderTargets,WebGLRenderTarget,WebGLRenderer,WebGLUtils,WebGPUCoordinateSystem,WireframeGeometry,WrapAroundEnding,ZeroCurvatureEnding,ZeroFactor,ZeroSlopeEnding,ZeroStencilOp,_SRGBAFormat,createCanvasElement,sRGBEncoding},Symbol.toStringTag,{value:"Module"}));async function wait$1(o){return LOGGER$1.info({title:`Waiting for ${o}ms`}),new Promise((s,a)=>{setTimeout(()=>{s(!0)},o)})}const capitalize$1=o=>o&&o[0].toUpperCase()+o.slice(1)||"",numberWithCommas=o=>o.toString().replace(/\B(?=(\d{3})+(?!\d))/g,","),InfoDrawer=({open:o,dismissDrawer:s})=>{const a=uiSceneStore(sn=>sn.CORE_API),b=reactExports.useRef(null),[_e,bt]=reactExports.useState(!1),rn=infoStore(sn=>sn.infoObject);return reactExports.useEffect(()=>(bt(o),()=>{}),[o]),reactExports.useEffect(()=>{b.current&&b.current.addEventListener("drawerClosed",()=>{s()})},[b]),jsxRuntimeExports.jsx(BottomDrawer,{ref:b,id:"bottomDrawer",open:`${_e}`,"initial-screen-coverage":"0%",children:jsxRuntimeExports.jsx("div",{className:"infoDrawer epigraphDrawer",slot:"bottom-drawer-content",children:jsxRuntimeExports.jsxs("div",{className:"drawerContent",children:[jsxRuntimeExports.jsxs("a",{href:rn?.productPageUrl,className:"categoryLink",target:"_blank",style:rn?.productPageUrl?{pointerEvents:"all"}:{pointerEvents:"none"},children:[jsxRuntimeExports.jsxs("h2",{className:"categoryTitle",children:[rn?.productCategory?.label,rn.subheading&&jsxRuntimeExports.jsx("div",{className:"modalSubHeading",children:rn.subheading})]}),rn.productPageUrl&&jsxRuntimeExports.jsx("img",{alt:"Open Product Page",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/OpenTab.svg"})]}),jsxRuntimeExports.jsx("div",{className:"infoDrawerImageContainer",children:jsxRuntimeExports.jsx("img",{className:"itemImage",alt:"Item Image",src:rn?.thumbnails?.high?a.getResolvedAssetUrl(rn.thumbnails.high):""})}),jsxRuntimeExports.jsx("h2",{className:"itemTitle",children:rn.title}),jsxRuntimeExports.jsx("pre",{className:"itemDescription",children:rn.description}),rn.boundingBoxSize?jsxRuntimeExports.jsxs("p",{className:"infoModalDimensions",children:[rn.boundingBoxSize.x.toFixed(1),"” W x"," ",rn.boundingBoxSize.y.toFixed(1),"” D x"," ",rn.boundingBoxSize.z.toFixed(1),"” H"]}):"",jsxRuntimeExports.jsx("div",{className:"infoModalActions",children:jsxRuntimeExports.jsx("button",{className:"item-price",disabled:!0,children:rn.price&&`$${numberWithCommas(parseFloat(rn.price).toFixed(2))}`})})]})})})},UtilityMenuButton=({buttonAction:o,buttonLabel:s,hoverLabel:a,icon:b,activeCondition:_e})=>{const[bt,rn]=reactExports.useState(_e),sn=uiSceneStore(yn=>yn.dialogPopupOpen);return reactExports.useEffect(()=>(rn(_e),()=>{}),[_e]),jsxRuntimeExports.jsxs("div",{role:"button",tabIndex:sn?-1:0,className:bt!==void 0&&bt?"shellButtonContainer active":"shellButtonContainer","aria-label":s+" button",onClick:()=>{o()},children:[jsxRuntimeExports.jsxs("div",{className:"buttonContent",children:[jsxRuntimeExports.jsx("img",{className:"button",src:b,alt:s+" button"}),jsxRuntimeExports.jsx("span",{children:s})]}),jsxRuntimeExports.jsx("div",{className:"hoverDescriptor",children:jsxRuntimeExports.jsx("span",{children:a})})]})};let webGL2Available;function isWebGL2Available(){var o;if(webGL2Available!==void 0)return webGL2Available;try{let s;const a=document.createElement("canvas");return webGL2Available=!!(window.WebGL2RenderingContext&&(s=a.getContext("webgl2"))),s&&((o=s.getExtension("WEBGL_lose_context"))==null||o.loseContext()),webGL2Available}catch{return webGL2Available=!1}}function toTrianglesDrawMode(o,s){if(s===TrianglesDrawMode)return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."),o;if(s===TriangleFanDrawMode||s===TriangleStripDrawMode){let a=o.getIndex();if(a===null){const rn=[],sn=o.getAttribute("position");if(sn!==void 0){for(let yn=0;yn<sn.count;yn++)rn.push(yn);o.setIndex(rn),a=o.getIndex()}else return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."),o}const b=a.count-2,_e=[];if(a)if(s===TriangleFanDrawMode)for(let rn=1;rn<=b;rn++)_e.push(a.getX(0)),_e.push(a.getX(rn)),_e.push(a.getX(rn+1));else for(let rn=0;rn<b;rn++)rn%2===0?(_e.push(a.getX(rn)),_e.push(a.getX(rn+1)),_e.push(a.getX(rn+2))):(_e.push(a.getX(rn+2)),_e.push(a.getX(rn+1)),_e.push(a.getX(rn)));_e.length/3!==b&&console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.");const bt=o.clone();return bt.setIndex(_e),bt.clearGroups(),bt}else return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:",s),o}function toCreasedNormals(o,s=Math.PI/3){const a=Math.cos(s),b=(1+1e-10)*100,_e=[new Vector3,new Vector3,new Vector3],bt=new Vector3,rn=new Vector3,sn=new Vector3,yn=new Vector3;function Pn(es){const Ur=~~(es.x*b),Dr=~~(es.y*b),zr=~~(es.z*b);return`${Ur},${Dr},${zr}`}const zn=o.index?o.toNonIndexed():o,lr=zn.attributes.position,ar={};for(let es=0,Ur=lr.count/3;es<Ur;es++){const Dr=3*es,zr=_e[0].fromBufferAttribute(lr,Dr+0),rs=_e[1].fromBufferAttribute(lr,Dr+1),as=_e[2].fromBufferAttribute(lr,Dr+2);bt.subVectors(as,rs),rn.subVectors(zr,rs);const os=new Vector3().crossVectors(bt,rn).normalize();for(let ls=0;ls<3;ls++){const zs=_e[ls],ho=Pn(zs);ho in ar||(ar[ho]=[]),ar[ho].push(os)}}const cr=new Float32Array(lr.count*3),hr=new BufferAttribute(cr,3,!1);for(let es=0,Ur=lr.count/3;es<Ur;es++){const Dr=3*es,zr=_e[0].fromBufferAttribute(lr,Dr+0),rs=_e[1].fromBufferAttribute(lr,Dr+1),as=_e[2].fromBufferAttribute(lr,Dr+2);bt.subVectors(as,rs),rn.subVectors(zr,rs),sn.crossVectors(bt,rn).normalize();for(let os=0;os<3;os++){const ls=_e[os],zs=Pn(ls),ho=ar[zs];yn.set(0,0,0);for(let ga=0,mo=ho.length;ga<mo;ga++){const go=ho[ga];sn.dot(go)>a&&yn.add(go)}yn.normalize(),hr.setXYZ(Dr+os,yn.x,yn.y,yn.z)}}return zn.setAttribute("normal",hr),zn}const version=parseInt(REVISION.replace(/\D+/g,""));var u8=Uint8Array,u16=Uint16Array,u32=Uint32Array,fleb=new u8([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]),fdeb=new u8([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]),clim=new u8([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),freb=function(o,s){for(var a=new u16(31),b=0;b<31;++b)a[b]=s+=1<<o[b-1];for(var _e=new u32(a[30]),b=1;b<30;++b)for(var bt=a[b];bt<a[b+1];++bt)_e[bt]=bt-a[b]<<5|b;return[a,_e]},_a=freb(fleb,2),fl=_a[0],revfl=_a[1];fl[28]=258,revfl[258]=28;var _b=freb(fdeb,0),fd=_b[0],revfd=_b[1],rev=new u16(32768);for(var i$1=0;i$1<32768;++i$1){var x=(i$1&43690)>>>1|(i$1&21845)<<1;x=(x&52428)>>>2|(x&13107)<<2,x=(x&61680)>>>4|(x&3855)<<4,rev[i$1]=((x&65280)>>>8|(x&255)<<8)>>>1}var hMap=function(o,s,a){for(var b=o.length,_e=0,bt=new u16(s);_e<b;++_e)++bt[o[_e]-1];var rn=new u16(s);for(_e=0;_e<s;++_e)rn[_e]=rn[_e-1]+bt[_e-1]<<1;var sn;if(a){sn=new u16(1<<s);var yn=15-s;for(_e=0;_e<b;++_e)if(o[_e])for(var Pn=_e<<4|o[_e],zn=s-o[_e],lr=rn[o[_e]-1]++<<zn,ar=lr|(1<<zn)-1;lr<=ar;++lr)sn[rev[lr]>>>yn]=Pn}else for(sn=new u16(b),_e=0;_e<b;++_e)o[_e]&&(sn[_e]=rev[rn[o[_e]-1]++]>>>15-o[_e]);return sn},flt=new u8(288);for(var i$1=0;i$1<144;++i$1)flt[i$1]=8;for(var i$1=144;i$1<256;++i$1)flt[i$1]=9;for(var i$1=256;i$1<280;++i$1)flt[i$1]=7;for(var i$1=280;i$1<288;++i$1)flt[i$1]=8;var fdt=new u8(32);for(var i$1=0;i$1<32;++i$1)fdt[i$1]=5;var flm=hMap(flt,9,0),flrm=hMap(flt,9,1),fdm=hMap(fdt,5,0),fdrm=hMap(fdt,5,1),max=function(o){for(var s=o[0],a=1;a<o.length;++a)o[a]>s&&(s=o[a]);return s},bits$1=function(o,s,a){var b=s/8|0;return(o[b]|o[b+1]<<8)>>(s&7)&a},bits16=function(o,s){var a=s/8|0;return(o[a]|o[a+1]<<8|o[a+2]<<16)>>(s&7)},shft=function(o){return(o/8|0)+(o&7&&1)},slc=function(o,s,a){(s==null||s<0)&&(s=0),(a==null||a>o.length)&&(a=o.length);var b=new(o instanceof u16?u16:o instanceof u32?u32:u8)(a-s);return b.set(o.subarray(s,a)),b},inflt=function(o,s,a){var b=o.length;if(!b||a&&!a.l&&b<5)return s||new u8(0);var _e=!s||a,bt=!a||a.i;a||(a={}),s||(s=new u8(b*3));var rn=function(Fy){var OA=s.length;if(Fy>OA){var UA=new u8(Math.max(OA*2,Fy));UA.set(s),s=UA}},sn=a.f||0,yn=a.p||0,Pn=a.b||0,zn=a.l,lr=a.d,ar=a.m,cr=a.n,hr=b*8;do{if(!zn){a.f=sn=bits$1(o,yn,1);var es=bits$1(o,yn+1,3);if(yn+=3,es)if(es==1)zn=flrm,lr=fdrm,ar=9,cr=5;else if(es==2){var rs=bits$1(o,yn,31)+257,as=bits$1(o,yn+10,15)+4,os=rs+bits$1(o,yn+5,31)+1;yn+=14;for(var ls=new u8(os),zs=new u8(19),ho=0;ho<as;++ho)zs[clim[ho]]=bits$1(o,yn+ho*3,7);yn+=as*3;for(var ga=max(zs),mo=(1<<ga)-1,go=hMap(zs,ga,1),ho=0;ho<os;){var yl=go[bits$1(o,yn,mo)];yn+=yl&15;var Ur=yl>>>4;if(Ur<16)ls[ho++]=Ur;else{var Zl=0,_d=0;for(Ur==16?(_d=3+bits$1(o,yn,3),yn+=2,Zl=ls[ho-1]):Ur==17?(_d=3+bits$1(o,yn,7),yn+=3):Ur==18&&(_d=11+bits$1(o,yn,127),yn+=7);_d--;)ls[ho++]=Zl}}var Ty=ls.subarray(0,rs),yy=ls.subarray(rs);ar=max(Ty),cr=max(yy),zn=hMap(Ty,ar,1),lr=hMap(yy,cr,1)}else throw"invalid block type";else{var Ur=shft(yn)+4,Dr=o[Ur-4]|o[Ur-3]<<8,zr=Ur+Dr;if(zr>b){if(bt)throw"unexpected EOF";break}_e&&rn(Pn+Dr),s.set(o.subarray(Ur,zr),Pn),a.b=Pn+=Dr,a.p=yn=zr*8;continue}if(yn>hr){if(bt)throw"unexpected EOF";break}}_e&&rn(Pn+131072);for(var by=(1<<ar)-1,Al=(1<<cr)-1,_f=yn;;_f=yn){var Zl=zn[bits16(o,yn)&by],gy=Zl>>>4;if(yn+=Zl&15,yn>hr){if(bt)throw"unexpected EOF";break}if(!Zl)throw"invalid length/literal";if(gy<256)s[Pn++]=gy;else if(gy==256){_f=yn,zn=null;break}else{var El=gy-254;if(gy>264){var ho=gy-257,My=fleb[ho];El=bits$1(o,yn,(1<<My)-1)+fl[ho],yn+=My}var By=lr[bits16(o,yn)&Al],lA=By>>>4;if(!By)throw"invalid distance";yn+=By&15;var yy=fd[lA];if(lA>3){var My=fdeb[lA];yy+=bits16(o,yn)&(1<<My)-1,yn+=My}if(yn>hr){if(bt)throw"unexpected EOF";break}_e&&rn(Pn+131072);for(var wA=Pn+El;Pn<wA;Pn+=4)s[Pn]=s[Pn-yy],s[Pn+1]=s[Pn+1-yy],s[Pn+2]=s[Pn+2-yy],s[Pn+3]=s[Pn+3-yy];Pn=wA}}a.l=zn,a.p=_f,a.b=Pn,zn&&(sn=1,a.m=ar,a.d=lr,a.n=cr)}while(!sn);return Pn==s.length?s:slc(s,0,Pn)},wbits=function(o,s,a){a<<=s&7;var b=s/8|0;o[b]|=a,o[b+1]|=a>>>8},wbits16=function(o,s,a){a<<=s&7;var b=s/8|0;o[b]|=a,o[b+1]|=a>>>8,o[b+2]|=a>>>16},hTree=function(o,s){for(var a=[],b=0;b<o.length;++b)o[b]&&a.push({s:b,f:o[b]});var _e=a.length,bt=a.slice();if(!_e)return[et$1,0];if(_e==1){var rn=new u8(a[0].s+1);return rn[a[0].s]=1,[rn,1]}a.sort(function(os,ls){return os.f-ls.f}),a.push({s:-1,f:25001});var sn=a[0],yn=a[1],Pn=0,zn=1,lr=2;for(a[0]={s:-1,f:sn.f+yn.f,l:sn,r:yn};zn!=_e-1;)sn=a[a[Pn].f<a[lr].f?Pn++:lr++],yn=a[Pn!=zn&&a[Pn].f<a[lr].f?Pn++:lr++],a[zn++]={s:-1,f:sn.f+yn.f,l:sn,r:yn};for(var ar=bt[0].s,b=1;b<_e;++b)bt[b].s>ar&&(ar=bt[b].s);var cr=new u16(ar+1),hr=ln(a[zn-1],cr,0);if(hr>s){var b=0,es=0,Ur=hr-s,Dr=1<<Ur;for(bt.sort(function(ls,zs){return cr[zs.s]-cr[ls.s]||ls.f-zs.f});b<_e;++b){var zr=bt[b].s;if(cr[zr]>s)es+=Dr-(1<<hr-cr[zr]),cr[zr]=s;else break}for(es>>>=Ur;es>0;){var rs=bt[b].s;cr[rs]<s?es-=1<<s-cr[rs]++-1:++b}for(;b>=0&&es;--b){var as=bt[b].s;cr[as]==s&&(--cr[as],++es)}hr=s}return[new u8(cr),hr]},ln=function(o,s,a){return o.s==-1?Math.max(ln(o.l,s,a+1),ln(o.r,s,a+1)):s[o.s]=a},lc=function(o){for(var s=o.length;s&&!o[--s];);for(var a=new u16(++s),b=0,_e=o[0],bt=1,rn=function(yn){a[b++]=yn},sn=1;sn<=s;++sn)if(o[sn]==_e&&sn!=s)++bt;else{if(!_e&&bt>2){for(;bt>138;bt-=138)rn(32754);bt>2&&(rn(bt>10?bt-11<<5|28690:bt-3<<5|12305),bt=0)}else if(bt>3){for(rn(_e),--bt;bt>6;bt-=6)rn(8304);bt>2&&(rn(bt-3<<5|8208),bt=0)}for(;bt--;)rn(_e);bt=1,_e=o[sn]}return[a.subarray(0,b),s]},clen=function(o,s){for(var a=0,b=0;b<s.length;++b)a+=o[b]*s[b];return a},wfblk=function(o,s,a){var b=a.length,_e=shft(s+2);o[_e]=b&255,o[_e+1]=b>>>8,o[_e+2]=o[_e]^255,o[_e+3]=o[_e+1]^255;for(var bt=0;bt<b;++bt)o[_e+bt+4]=a[bt];return(_e+4+b)*8},wblk=function(o,s,a,b,_e,bt,rn,sn,yn,Pn,zn){wbits(s,zn++,a),++_e[256];for(var lr=hTree(_e,15),ar=lr[0],cr=lr[1],hr=hTree(bt,15),es=hr[0],Ur=hr[1],Dr=lc(ar),zr=Dr[0],rs=Dr[1],as=lc(es),os=as[0],ls=as[1],zs=new u16(19),ho=0;ho<zr.length;++ho)zs[zr[ho]&31]++;for(var ho=0;ho<os.length;++ho)zs[os[ho]&31]++;for(var ga=hTree(zs,7),mo=ga[0],go=ga[1],yl=19;yl>4&&!mo[clim[yl-1]];--yl);var Zl=Pn+5<<3,_d=clen(_e,flt)+clen(bt,fdt)+rn,Ty=clen(_e,ar)+clen(bt,es)+rn+14+3*yl+clen(zs,mo)+(2*zs[16]+3*zs[17]+7*zs[18]);if(Zl<=_d&&Zl<=Ty)return wfblk(s,zn,o.subarray(yn,yn+Pn));var yy,by,Al,_f;if(wbits(s,zn,1+(Ty<_d)),zn+=2,Ty<_d){yy=hMap(ar,cr,0),by=ar,Al=hMap(es,Ur,0),_f=es;var gy=hMap(mo,go,0);wbits(s,zn,rs-257),wbits(s,zn+5,ls-1),wbits(s,zn+10,yl-4),zn+=14;for(var ho=0;ho<yl;++ho)wbits(s,zn+3*ho,mo[clim[ho]]);zn+=3*yl;for(var El=[zr,os],My=0;My<2;++My)for(var By=El[My],ho=0;ho<By.length;++ho){var lA=By[ho]&31;wbits(s,zn,gy[lA]),zn+=mo[lA],lA>15&&(wbits(s,zn,By[ho]>>>5&127),zn+=By[ho]>>>12)}}else yy=flm,by=flt,Al=fdm,_f=fdt;for(var ho=0;ho<sn;++ho)if(b[ho]>255){var lA=b[ho]>>>18&31;wbits16(s,zn,yy[lA+257]),zn+=by[lA+257],lA>7&&(wbits(s,zn,b[ho]>>>23&31),zn+=fleb[lA]);var wA=b[ho]&31;wbits16(s,zn,Al[wA]),zn+=_f[wA],wA>3&&(wbits16(s,zn,b[ho]>>>5&8191),zn+=fdeb[wA])}else wbits16(s,zn,yy[b[ho]]),zn+=by[b[ho]];return wbits16(s,zn,yy[256]),zn+by[256]},deo=new u32([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),et$1=new u8(0),dflt=function(o,s,a,b,_e,bt){var rn=o.length,sn=new u8(b+rn+5*(1+Math.ceil(rn/7e3))+_e),yn=sn.subarray(b,sn.length-_e),Pn=0;if(!s||rn<8)for(var zn=0;zn<=rn;zn+=65535){var lr=zn+65535;lr<rn?Pn=wfblk(yn,Pn,o.subarray(zn,lr)):(yn[zn]=bt,Pn=wfblk(yn,Pn,o.subarray(zn,rn)))}else{for(var ar=deo[s-1],cr=ar>>>13,hr=ar&8191,es=(1<<a)-1,Ur=new u16(32768),Dr=new u16(es+1),zr=Math.ceil(a/3),rs=2*zr,as=function(BA){return(o[BA]^o[BA+1]<<zr^o[BA+2]<<rs)&es},os=new u32(25e3),ls=new u16(288),zs=new u16(32),ho=0,ga=0,zn=0,mo=0,go=0,yl=0;zn<rn;++zn){var Zl=as(zn),_d=zn&32767,Ty=Dr[Zl];if(Ur[_d]=Ty,Dr[Zl]=_d,go<=zn){var yy=rn-zn;if((ho>7e3||mo>24576)&&yy>423){Pn=wblk(o,yn,0,os,ls,zs,ga,mo,yl,zn-yl,Pn),mo=ho=ga=0,yl=zn;for(var by=0;by<286;++by)ls[by]=0;for(var by=0;by<30;++by)zs[by]=0}var Al=2,_f=0,gy=hr,El=_d-Ty&32767;if(yy>2&&Zl==as(zn-El))for(var My=Math.min(cr,yy)-1,By=Math.min(32767,zn),lA=Math.min(258,yy);El<=By&&--gy&&_d!=Ty;){if(o[zn+Al]==o[zn+Al-El]){for(var wA=0;wA<lA&&o[zn+wA]==o[zn+wA-El];++wA);if(wA>Al){if(Al=wA,_f=El,wA>My)break;for(var Fy=Math.min(El,wA-2),OA=0,by=0;by<Fy;++by){var UA=zn-El+by+32768&32767,$A=Ur[UA],YA=UA-$A+32768&32767;YA>OA&&(OA=YA,Ty=UA)}}}_d=Ty,Ty=Ur[_d],El+=_d-Ty+32768&32767}if(_f){os[mo++]=268435456|revfl[Al]<<18|revfd[_f];var WA=revfl[Al]&31,bA=revfd[_f]&31;ga+=fleb[WA]+fdeb[bA],++ls[257+WA],++zs[bA],go=zn+Al,++ho}else os[mo++]=o[zn],++ls[o[zn]]}}Pn=wblk(o,yn,bt,os,ls,zs,ga,mo,yl,zn-yl,Pn),!bt&&Pn&7&&(Pn=wfblk(yn,Pn+1,et$1))}return slc(sn,0,b+shft(Pn)+_e)},crct=function(){for(var o=new Int32Array(256),s=0;s<256;++s){for(var a=s,b=9;--b;)a=(a&1&&-306674912)^a>>>1;o[s]=a}return o}(),crc=function(){var o=-1;return{p:function(s){for(var a=o,b=0;b<s.length;++b)a=crct[a&255^s[b]]^a>>>8;o=a},d:function(){return~o}}},dopt=function(o,s,a,b,_e){return dflt(o,s.level==null?6:s.level,s.mem==null?Math.ceil(Math.max(8,Math.min(13,Math.log(o.length)))*1.5):12+s.mem,a,b,!_e)},mrg=function(o,s){var a={};for(var b in o)a[b]=o[b];for(var b in s)a[b]=s[b];return a},wbytes=function(o,s,a){for(;a;++s)o[s]=a,a>>>=8},zlv=function(o){if((o[0]&15)!=8||o[0]>>>4>7||(o[0]<<8|o[1])%31)throw"invalid zlib data";if(o[1]&32)throw"invalid zlib data: preset dictionaries not supported"};function deflateSync(o,s){return dopt(o,s||{},0,0)}function unzlibSync(o,s){return inflt((zlv(o),o.subarray(2,-4)),s)}var fltn=function(o,s,a,b){for(var _e in o){var bt=o[_e],rn=s+_e;bt instanceof u8?a[rn]=[bt,b]:Array.isArray(bt)?a[rn]=[bt[0],mrg(b,bt[1])]:fltn(bt,rn+"/",a,b)}},te=typeof TextEncoder<"u"&&new TextEncoder,td=typeof TextDecoder<"u"&&new TextDecoder,tds=0;try{td.decode(et$1,{stream:!0}),tds=1}catch{}function strToU8(o,s){if(s){for(var a=new u8(o.length),b=0;b<o.length;++b)a[b]=o.charCodeAt(b);return a}if(te)return te.encode(o);for(var _e=o.length,bt=new u8(o.length+(o.length>>1)),rn=0,sn=function(zn){bt[rn++]=zn},b=0;b<_e;++b){if(rn+5>bt.length){var yn=new u8(rn+8+(_e-b<<1));yn.set(bt),bt=yn}var Pn=o.charCodeAt(b);Pn<128||s?sn(Pn):Pn<2048?(sn(192|Pn>>6),sn(128|Pn&63)):Pn>55295&&Pn<57344?(Pn=65536+(Pn&1047552)|o.charCodeAt(++b)&1023,sn(240|Pn>>18),sn(128|Pn>>12&63),sn(128|Pn>>6&63),sn(128|Pn&63)):(sn(224|Pn>>12),sn(128|Pn>>6&63),sn(128|Pn&63))}return slc(bt,0,rn)}var exfl=function(o){var s=0;if(o)for(var a in o){var b=o[a].length;if(b>65535)throw"extra field too long";s+=b+4}return s},wzh=function(o,s,a,b,_e,bt,rn,sn){var yn=b.length,Pn=a.extra,zn=sn&&sn.length,lr=exfl(Pn);wbytes(o,s,rn!=null?33639248:67324752),s+=4,rn!=null&&(o[s++]=20,o[s++]=a.os),o[s]=20,s+=2,o[s++]=a.flag<<1|(bt==null&&8),o[s++]=_e&&8,o[s++]=a.compression&255,o[s++]=a.compression>>8;var ar=new Date(a.mtime==null?Date.now():a.mtime),cr=ar.getFullYear()-1980;if(cr<0||cr>119)throw"date not in range 1980-2099";if(wbytes(o,s,cr<<25|ar.getMonth()+1<<21|ar.getDate()<<16|ar.getHours()<<11|ar.getMinutes()<<5|ar.getSeconds()>>>1),s+=4,bt!=null&&(wbytes(o,s,a.crc),wbytes(o,s+4,bt),wbytes(o,s+8,a.size)),wbytes(o,s+12,yn),wbytes(o,s+14,lr),s+=16,rn!=null&&(wbytes(o,s,zn),wbytes(o,s+6,a.attrs),wbytes(o,s+10,rn),s+=14),o.set(b,s),s+=yn,lr)for(var hr in Pn){var es=Pn[hr],Ur=es.length;wbytes(o,s,+hr),wbytes(o,s+2,Ur),o.set(es,s+4),s+=4+Ur}return zn&&(o.set(sn,s),s+=zn),s},wzf=function(o,s,a,b,_e){wbytes(o,s,101010256),wbytes(o,s+8,a),wbytes(o,s+10,a),wbytes(o,s+12,b),wbytes(o,s+16,_e)};function zipSync(o,s){s||(s={});var a={},b=[];fltn(o,"",a,s);var _e=0,bt=0;for(var rn in a){var sn=a[rn],yn=sn[0],Pn=sn[1],zn=Pn.level==0?0:8,lr=strToU8(rn),ar=lr.length,cr=Pn.comment,hr=cr&&strToU8(cr),es=hr&&hr.length,Ur=exfl(Pn.extra);if(ar>65535)throw"filename too long";var Dr=zn?deflateSync(yn,Pn):yn,zr=Dr.length,rs=crc();rs.p(yn),b.push(mrg(Pn,{size:yn.length,crc:rs.d(),c:Dr,f:lr,m:hr,u:ar!=rn.length||hr&&cr.length!=es,o:_e,compression:zn})),_e+=30+ar+Ur+zr,bt+=76+2*(ar+Ur)+(es||0)+zr}for(var as=new u8(bt+22),os=_e,ls=bt-_e,zs=0;zs<b.length;++zs){var lr=b[zs];wzh(as,lr.o,lr,lr.f,lr.u,lr.c.length);var ho=30+lr.f.length+exfl(lr.extra);as.set(lr.c,lr.o+ho),wzh(as,_e,lr,lr.f,lr.u,lr.c.length,lr.o,lr.m),_e+=16+ho+(lr.m?lr.m.length:0)}return wzf(as,_e,b.length,ls,os),as}const isCubeTexture=o=>o&&o.isCubeTexture;class GroundProjectedEnv extends Mesh{constructor(s,a){var b,_e;const bt=isCubeTexture(s),sn=((_e=bt?(b=s.image[0])==null?void 0:b.width:s.image.width)!=null?_e:1024)/4,yn=Math.floor(Math.log2(sn)),Pn=Math.pow(2,yn),zn=3*Math.max(Pn,16*7),lr=4*Pn,ar=[bt?"#define ENVMAP_TYPE_CUBE":"",`#define CUBEUV_TEXEL_WIDTH ${1/zn}`,`#define CUBEUV_TEXEL_HEIGHT ${1/lr}`,`#define CUBEUV_MAX_MIP ${yn}.0`],cr=`
|
|
8613
|
+
}`;function WebGLShadowMap(o,s,a){let b=new Frustum;const _e=new Vector2,bt=new Vector2,rn=new Vector4,sn=new MeshDepthMaterial({depthPacking:RGBADepthPacking}),yn=new MeshDistanceMaterial,Pn={},zn=a.maxTextureSize,lr={[FrontSide]:BackSide,[BackSide]:FrontSide,[DoubleSide]:DoubleSide},ar=new ShaderMaterial({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new Vector2},radius:{value:4}},vertexShader:vertex,fragmentShader:fragment}),cr=ar.clone();cr.defines.HORIZONTAL_PASS=1;const hr=new BufferGeometry;hr.setAttribute("position",new BufferAttribute(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const es=new Mesh(hr,ar),Ur=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=PCFShadowMap;let Dr=this.type;this.render=function(os,ls,zs){if(Ur.enabled===!1||Ur.autoUpdate===!1&&Ur.needsUpdate===!1||os.length===0)return;const ho=o.getRenderTarget(),ga=o.getActiveCubeFace(),mo=o.getActiveMipmapLevel(),go=o.state;go.setBlending(NoBlending),go.buffers.color.setClear(1,1,1,1),go.buffers.depth.setTest(!0),go.setScissorTest(!1);const yl=Dr!==VSMShadowMap&&this.type===VSMShadowMap,Zl=Dr===VSMShadowMap&&this.type!==VSMShadowMap;for(let _d=0,Ty=os.length;_d<Ty;_d++){const yy=os[_d],by=yy.shadow;if(by===void 0){console.warn("THREE.WebGLShadowMap:",yy,"has no shadow.");continue}if(by.autoUpdate===!1&&by.needsUpdate===!1)continue;_e.copy(by.mapSize);const Al=by.getFrameExtents();if(_e.multiply(Al),bt.copy(by.mapSize),(_e.x>zn||_e.y>zn)&&(_e.x>zn&&(bt.x=Math.floor(zn/Al.x),_e.x=bt.x*Al.x,by.mapSize.x=bt.x),_e.y>zn&&(bt.y=Math.floor(zn/Al.y),_e.y=bt.y*Al.y,by.mapSize.y=bt.y)),by.map===null||yl===!0||Zl===!0){const gy=this.type!==VSMShadowMap?{minFilter:NearestFilter,magFilter:NearestFilter}:{};by.map!==null&&by.map.dispose(),by.map=new WebGLRenderTarget(_e.x,_e.y,gy),by.map.texture.name=yy.name+".shadowMap",by.camera.updateProjectionMatrix()}o.setRenderTarget(by.map),o.clear();const _f=by.getViewportCount();for(let gy=0;gy<_f;gy++){const El=by.getViewport(gy);rn.set(bt.x*El.x,bt.y*El.y,bt.x*El.z,bt.y*El.w),go.viewport(rn),by.updateMatrices(yy,gy),b=by.getFrustum(),as(ls,zs,by.camera,yy,this.type)}by.isPointLightShadow!==!0&&this.type===VSMShadowMap&&zr(by,zs),by.needsUpdate=!1}Dr=this.type,Ur.needsUpdate=!1,o.setRenderTarget(ho,ga,mo)};function zr(os,ls){const zs=s.update(es);ar.defines.VSM_SAMPLES!==os.blurSamples&&(ar.defines.VSM_SAMPLES=os.blurSamples,cr.defines.VSM_SAMPLES=os.blurSamples,ar.needsUpdate=!0,cr.needsUpdate=!0),os.mapPass===null&&(os.mapPass=new WebGLRenderTarget(_e.x,_e.y)),ar.uniforms.shadow_pass.value=os.map.texture,ar.uniforms.resolution.value=os.mapSize,ar.uniforms.radius.value=os.radius,o.setRenderTarget(os.mapPass),o.clear(),o.renderBufferDirect(ls,null,zs,ar,es,null),cr.uniforms.shadow_pass.value=os.mapPass.texture,cr.uniforms.resolution.value=os.mapSize,cr.uniforms.radius.value=os.radius,o.setRenderTarget(os.map),o.clear(),o.renderBufferDirect(ls,null,zs,cr,es,null)}function rs(os,ls,zs,ho){let ga=null;const mo=zs.isPointLight===!0?os.customDistanceMaterial:os.customDepthMaterial;if(mo!==void 0)ga=mo;else if(ga=zs.isPointLight===!0?yn:sn,o.localClippingEnabled&&ls.clipShadows===!0&&Array.isArray(ls.clippingPlanes)&&ls.clippingPlanes.length!==0||ls.displacementMap&&ls.displacementScale!==0||ls.alphaMap&&ls.alphaTest>0||ls.map&&ls.alphaTest>0){const go=ga.uuid,yl=ls.uuid;let Zl=Pn[go];Zl===void 0&&(Zl={},Pn[go]=Zl);let _d=Zl[yl];_d===void 0&&(_d=ga.clone(),Zl[yl]=_d),ga=_d}if(ga.visible=ls.visible,ga.wireframe=ls.wireframe,ho===VSMShadowMap?ga.side=ls.shadowSide!==null?ls.shadowSide:ls.side:ga.side=ls.shadowSide!==null?ls.shadowSide:lr[ls.side],ga.alphaMap=ls.alphaMap,ga.alphaTest=ls.alphaTest,ga.map=ls.map,ga.clipShadows=ls.clipShadows,ga.clippingPlanes=ls.clippingPlanes,ga.clipIntersection=ls.clipIntersection,ga.displacementMap=ls.displacementMap,ga.displacementScale=ls.displacementScale,ga.displacementBias=ls.displacementBias,ga.wireframeLinewidth=ls.wireframeLinewidth,ga.linewidth=ls.linewidth,zs.isPointLight===!0&&ga.isMeshDistanceMaterial===!0){const go=o.properties.get(ga);go.light=zs}return ga}function as(os,ls,zs,ho,ga){if(os.visible===!1)return;if(os.layers.test(ls.layers)&&(os.isMesh||os.isLine||os.isPoints)&&(os.castShadow||os.receiveShadow&&ga===VSMShadowMap)&&(!os.frustumCulled||b.intersectsObject(os))){os.modelViewMatrix.multiplyMatrices(zs.matrixWorldInverse,os.matrixWorld);const yl=s.update(os),Zl=os.material;if(Array.isArray(Zl)){const _d=yl.groups;for(let Ty=0,yy=_d.length;Ty<yy;Ty++){const by=_d[Ty],Al=Zl[by.materialIndex];if(Al&&Al.visible){const _f=rs(os,Al,ho,ga);o.renderBufferDirect(zs,null,yl,_f,os,by)}}}else if(Zl.visible){const _d=rs(os,Zl,ho,ga);o.renderBufferDirect(zs,null,yl,_d,os,null)}}const go=os.children;for(let yl=0,Zl=go.length;yl<Zl;yl++)as(go[yl],ls,zs,ho,ga)}}function WebGLState(o,s,a){const b=a.isWebGL2;function _e(){let IA=!1;const XA=new Vector4;let QA=null;const fC=new Vector4(0,0,0,0);return{setMask:function(uC){QA!==uC&&!IA&&(o.colorMask(uC,uC,uC,uC),QA=uC)},setLocked:function(uC){IA=uC},setClear:function(uC,CC,CI,DI,FR){FR===!0&&(uC*=DI,CC*=DI,CI*=DI),XA.set(uC,CC,CI,DI),fC.equals(XA)===!1&&(o.clearColor(uC,CC,CI,DI),fC.copy(XA))},reset:function(){IA=!1,QA=null,fC.set(-1,0,0,0)}}}function bt(){let IA=!1,XA=null,QA=null,fC=null;return{setTest:function(uC){uC?OA(o.DEPTH_TEST):UA(o.DEPTH_TEST)},setMask:function(uC){XA!==uC&&!IA&&(o.depthMask(uC),XA=uC)},setFunc:function(uC){if(QA!==uC){switch(uC){case NeverDepth:o.depthFunc(o.NEVER);break;case AlwaysDepth:o.depthFunc(o.ALWAYS);break;case LessDepth:o.depthFunc(o.LESS);break;case LessEqualDepth:o.depthFunc(o.LEQUAL);break;case EqualDepth:o.depthFunc(o.EQUAL);break;case GreaterEqualDepth:o.depthFunc(o.GEQUAL);break;case GreaterDepth:o.depthFunc(o.GREATER);break;case NotEqualDepth:o.depthFunc(o.NOTEQUAL);break;default:o.depthFunc(o.LEQUAL)}QA=uC}},setLocked:function(uC){IA=uC},setClear:function(uC){fC!==uC&&(o.clearDepth(uC),fC=uC)},reset:function(){IA=!1,XA=null,QA=null,fC=null}}}function rn(){let IA=!1,XA=null,QA=null,fC=null,uC=null,CC=null,CI=null,DI=null,FR=null;return{setTest:function(GI){IA||(GI?OA(o.STENCIL_TEST):UA(o.STENCIL_TEST))},setMask:function(GI){XA!==GI&&!IA&&(o.stencilMask(GI),XA=GI)},setFunc:function(GI,$R,ZI){(QA!==GI||fC!==$R||uC!==ZI)&&(o.stencilFunc(GI,$R,ZI),QA=GI,fC=$R,uC=ZI)},setOp:function(GI,$R,ZI){(CC!==GI||CI!==$R||DI!==ZI)&&(o.stencilOp(GI,$R,ZI),CC=GI,CI=$R,DI=ZI)},setLocked:function(GI){IA=GI},setClear:function(GI){FR!==GI&&(o.clearStencil(GI),FR=GI)},reset:function(){IA=!1,XA=null,QA=null,fC=null,uC=null,CC=null,CI=null,DI=null,FR=null}}}const sn=new _e,yn=new bt,Pn=new rn,zn=new WeakMap,lr=new WeakMap;let ar={},cr={},hr=new WeakMap,es=[],Ur=null,Dr=!1,zr=null,rs=null,as=null,os=null,ls=null,zs=null,ho=null,ga=!1,mo=null,go=null,yl=null,Zl=null,_d=null;const Ty=o.getParameter(o.MAX_COMBINED_TEXTURE_IMAGE_UNITS);let yy=!1,by=0;const Al=o.getParameter(o.VERSION);Al.indexOf("WebGL")!==-1?(by=parseFloat(/^WebGL (\d)/.exec(Al)[1]),yy=by>=1):Al.indexOf("OpenGL ES")!==-1&&(by=parseFloat(/^OpenGL ES (\d)/.exec(Al)[1]),yy=by>=2);let _f=null,gy={};const El=o.getParameter(o.SCISSOR_BOX),My=o.getParameter(o.VIEWPORT),By=new Vector4().fromArray(El),lA=new Vector4().fromArray(My);function wA(IA,XA,QA,fC){const uC=new Uint8Array(4),CC=o.createTexture();o.bindTexture(IA,CC),o.texParameteri(IA,o.TEXTURE_MIN_FILTER,o.NEAREST),o.texParameteri(IA,o.TEXTURE_MAG_FILTER,o.NEAREST);for(let CI=0;CI<QA;CI++)b&&(IA===o.TEXTURE_3D||IA===o.TEXTURE_2D_ARRAY)?o.texImage3D(XA,0,o.RGBA,1,1,fC,0,o.RGBA,o.UNSIGNED_BYTE,uC):o.texImage2D(XA+CI,0,o.RGBA,1,1,0,o.RGBA,o.UNSIGNED_BYTE,uC);return CC}const Fy={};Fy[o.TEXTURE_2D]=wA(o.TEXTURE_2D,o.TEXTURE_2D,1),Fy[o.TEXTURE_CUBE_MAP]=wA(o.TEXTURE_CUBE_MAP,o.TEXTURE_CUBE_MAP_POSITIVE_X,6),b&&(Fy[o.TEXTURE_2D_ARRAY]=wA(o.TEXTURE_2D_ARRAY,o.TEXTURE_2D_ARRAY,1,1),Fy[o.TEXTURE_3D]=wA(o.TEXTURE_3D,o.TEXTURE_3D,1,1)),sn.setClear(0,0,0,1),yn.setClear(1),Pn.setClear(0),OA(o.DEPTH_TEST),yn.setFunc(LessEqualDepth),sE(!1),SC(CullFaceBack),OA(o.CULL_FACE),BA(NoBlending);function OA(IA){ar[IA]!==!0&&(o.enable(IA),ar[IA]=!0)}function UA(IA){ar[IA]!==!1&&(o.disable(IA),ar[IA]=!1)}function $A(IA,XA){return cr[IA]!==XA?(o.bindFramebuffer(IA,XA),cr[IA]=XA,b&&(IA===o.DRAW_FRAMEBUFFER&&(cr[o.FRAMEBUFFER]=XA),IA===o.FRAMEBUFFER&&(cr[o.DRAW_FRAMEBUFFER]=XA)),!0):!1}function YA(IA,XA){let QA=es,fC=!1;if(IA)if(QA=hr.get(XA),QA===void 0&&(QA=[],hr.set(XA,QA)),IA.isWebGLMultipleRenderTargets){const uC=IA.texture;if(QA.length!==uC.length||QA[0]!==o.COLOR_ATTACHMENT0){for(let CC=0,CI=uC.length;CC<CI;CC++)QA[CC]=o.COLOR_ATTACHMENT0+CC;QA.length=uC.length,fC=!0}}else QA[0]!==o.COLOR_ATTACHMENT0&&(QA[0]=o.COLOR_ATTACHMENT0,fC=!0);else QA[0]!==o.BACK&&(QA[0]=o.BACK,fC=!0);fC&&(a.isWebGL2?o.drawBuffers(QA):s.get("WEBGL_draw_buffers").drawBuffersWEBGL(QA))}function WA(IA){return Ur!==IA?(o.useProgram(IA),Ur=IA,!0):!1}const bA={[AddEquation]:o.FUNC_ADD,[SubtractEquation]:o.FUNC_SUBTRACT,[ReverseSubtractEquation]:o.FUNC_REVERSE_SUBTRACT};if(b)bA[MinEquation]=o.MIN,bA[MaxEquation]=o.MAX;else{const IA=s.get("EXT_blend_minmax");IA!==null&&(bA[MinEquation]=IA.MIN_EXT,bA[MaxEquation]=IA.MAX_EXT)}const FA={[ZeroFactor]:o.ZERO,[OneFactor]:o.ONE,[SrcColorFactor]:o.SRC_COLOR,[SrcAlphaFactor]:o.SRC_ALPHA,[SrcAlphaSaturateFactor]:o.SRC_ALPHA_SATURATE,[DstColorFactor]:o.DST_COLOR,[DstAlphaFactor]:o.DST_ALPHA,[OneMinusSrcColorFactor]:o.ONE_MINUS_SRC_COLOR,[OneMinusSrcAlphaFactor]:o.ONE_MINUS_SRC_ALPHA,[OneMinusDstColorFactor]:o.ONE_MINUS_DST_COLOR,[OneMinusDstAlphaFactor]:o.ONE_MINUS_DST_ALPHA};function BA(IA,XA,QA,fC,uC,CC,CI,DI){if(IA===NoBlending){Dr===!0&&(UA(o.BLEND),Dr=!1);return}if(Dr===!1&&(OA(o.BLEND),Dr=!0),IA!==CustomBlending){if(IA!==zr||DI!==ga){if((rs!==AddEquation||ls!==AddEquation)&&(o.blendEquation(o.FUNC_ADD),rs=AddEquation,ls=AddEquation),DI)switch(IA){case NormalBlending:o.blendFuncSeparate(o.ONE,o.ONE_MINUS_SRC_ALPHA,o.ONE,o.ONE_MINUS_SRC_ALPHA);break;case AdditiveBlending:o.blendFunc(o.ONE,o.ONE);break;case SubtractiveBlending:o.blendFuncSeparate(o.ZERO,o.ONE_MINUS_SRC_COLOR,o.ZERO,o.ONE);break;case MultiplyBlending:o.blendFuncSeparate(o.ZERO,o.SRC_COLOR,o.ZERO,o.SRC_ALPHA);break;default:console.error("THREE.WebGLState: Invalid blending: ",IA);break}else switch(IA){case NormalBlending:o.blendFuncSeparate(o.SRC_ALPHA,o.ONE_MINUS_SRC_ALPHA,o.ONE,o.ONE_MINUS_SRC_ALPHA);break;case AdditiveBlending:o.blendFunc(o.SRC_ALPHA,o.ONE);break;case SubtractiveBlending:o.blendFuncSeparate(o.ZERO,o.ONE_MINUS_SRC_COLOR,o.ZERO,o.ONE);break;case MultiplyBlending:o.blendFunc(o.ZERO,o.SRC_COLOR);break;default:console.error("THREE.WebGLState: Invalid blending: ",IA);break}as=null,os=null,zs=null,ho=null,zr=IA,ga=DI}return}uC=uC||XA,CC=CC||QA,CI=CI||fC,(XA!==rs||uC!==ls)&&(o.blendEquationSeparate(bA[XA],bA[uC]),rs=XA,ls=uC),(QA!==as||fC!==os||CC!==zs||CI!==ho)&&(o.blendFuncSeparate(FA[QA],FA[fC],FA[CC],FA[CI]),as=QA,os=fC,zs=CC,ho=CI),zr=IA,ga=!1}function rE(IA,XA){IA.side===DoubleSide?UA(o.CULL_FACE):OA(o.CULL_FACE);let QA=IA.side===BackSide;XA&&(QA=!QA),sE(QA),IA.blending===NormalBlending&&IA.transparent===!1?BA(NoBlending):BA(IA.blending,IA.blendEquation,IA.blendSrc,IA.blendDst,IA.blendEquationAlpha,IA.blendSrcAlpha,IA.blendDstAlpha,IA.premultipliedAlpha),yn.setFunc(IA.depthFunc),yn.setTest(IA.depthTest),yn.setMask(IA.depthWrite),sn.setMask(IA.colorWrite);const fC=IA.stencilWrite;Pn.setTest(fC),fC&&(Pn.setMask(IA.stencilWriteMask),Pn.setFunc(IA.stencilFunc,IA.stencilRef,IA.stencilFuncMask),Pn.setOp(IA.stencilFail,IA.stencilZFail,IA.stencilZPass)),VA(IA.polygonOffset,IA.polygonOffsetFactor,IA.polygonOffsetUnits),IA.alphaToCoverage===!0?OA(o.SAMPLE_ALPHA_TO_COVERAGE):UA(o.SAMPLE_ALPHA_TO_COVERAGE)}function sE(IA){mo!==IA&&(IA?o.frontFace(o.CW):o.frontFace(o.CCW),mo=IA)}function SC(IA){IA!==CullFaceNone?(OA(o.CULL_FACE),IA!==go&&(IA===CullFaceBack?o.cullFace(o.BACK):IA===CullFaceFront?o.cullFace(o.FRONT):o.cullFace(o.FRONT_AND_BACK))):UA(o.CULL_FACE),go=IA}function HA(IA){IA!==yl&&(yy&&o.lineWidth(IA),yl=IA)}function VA(IA,XA,QA){IA?(OA(o.POLYGON_OFFSET_FILL),(Zl!==XA||_d!==QA)&&(o.polygonOffset(XA,QA),Zl=XA,_d=QA)):UA(o.POLYGON_OFFSET_FILL)}function oC(IA){IA?OA(o.SCISSOR_TEST):UA(o.SCISSOR_TEST)}function pC(IA){IA===void 0&&(IA=o.TEXTURE0+Ty-1),_f!==IA&&(o.activeTexture(IA),_f=IA)}function cC(IA,XA,QA){QA===void 0&&(_f===null?QA=o.TEXTURE0+Ty-1:QA=_f);let fC=gy[QA];fC===void 0&&(fC={type:void 0,texture:void 0},gy[QA]=fC),(fC.type!==IA||fC.texture!==XA)&&(_f!==QA&&(o.activeTexture(QA),_f=QA),o.bindTexture(IA,XA||Fy[IA]),fC.type=IA,fC.texture=XA)}function qy(){const IA=gy[_f];IA!==void 0&&IA.type!==void 0&&(o.bindTexture(IA.type,null),IA.type=void 0,IA.texture=void 0)}function Iy(){try{o.compressedTexImage2D.apply(o,arguments)}catch(IA){console.error("THREE.WebGLState:",IA)}}function kA(){try{o.compressedTexImage3D.apply(o,arguments)}catch(IA){console.error("THREE.WebGLState:",IA)}}function nE(){try{o.texSubImage2D.apply(o,arguments)}catch(IA){console.error("THREE.WebGLState:",IA)}}function A_(){try{o.texSubImage3D.apply(o,arguments)}catch(IA){console.error("THREE.WebGLState:",IA)}}function eC(){try{o.compressedTexSubImage2D.apply(o,arguments)}catch(IA){console.error("THREE.WebGLState:",IA)}}function PC(){try{o.compressedTexSubImage3D.apply(o,arguments)}catch(IA){console.error("THREE.WebGLState:",IA)}}function nC(){try{o.texStorage2D.apply(o,arguments)}catch(IA){console.error("THREE.WebGLState:",IA)}}function iE(){try{o.texStorage3D.apply(o,arguments)}catch(IA){console.error("THREE.WebGLState:",IA)}}function KC(){try{o.texImage2D.apply(o,arguments)}catch(IA){console.error("THREE.WebGLState:",IA)}}function bI(){try{o.texImage3D.apply(o,arguments)}catch(IA){console.error("THREE.WebGLState:",IA)}}function lC(IA){By.equals(IA)===!1&&(o.scissor(IA.x,IA.y,IA.z,IA.w),By.copy(IA))}function yI(IA){lA.equals(IA)===!1&&(o.viewport(IA.x,IA.y,IA.z,IA.w),lA.copy(IA))}function LC(IA,XA){let QA=lr.get(XA);QA===void 0&&(QA=new WeakMap,lr.set(XA,QA));let fC=QA.get(IA);fC===void 0&&(fC=o.getUniformBlockIndex(XA,IA.name),QA.set(IA,fC))}function ZC(IA,XA){const fC=lr.get(XA).get(IA);zn.get(XA)!==fC&&(o.uniformBlockBinding(XA,fC,IA.__bindingPointIndex),zn.set(XA,fC))}function vI(){o.disable(o.BLEND),o.disable(o.CULL_FACE),o.disable(o.DEPTH_TEST),o.disable(o.POLYGON_OFFSET_FILL),o.disable(o.SCISSOR_TEST),o.disable(o.STENCIL_TEST),o.disable(o.SAMPLE_ALPHA_TO_COVERAGE),o.blendEquation(o.FUNC_ADD),o.blendFunc(o.ONE,o.ZERO),o.blendFuncSeparate(o.ONE,o.ZERO,o.ONE,o.ZERO),o.colorMask(!0,!0,!0,!0),o.clearColor(0,0,0,0),o.depthMask(!0),o.depthFunc(o.LESS),o.clearDepth(1),o.stencilMask(4294967295),o.stencilFunc(o.ALWAYS,0,4294967295),o.stencilOp(o.KEEP,o.KEEP,o.KEEP),o.clearStencil(0),o.cullFace(o.BACK),o.frontFace(o.CCW),o.polygonOffset(0,0),o.activeTexture(o.TEXTURE0),o.bindFramebuffer(o.FRAMEBUFFER,null),b===!0&&(o.bindFramebuffer(o.DRAW_FRAMEBUFFER,null),o.bindFramebuffer(o.READ_FRAMEBUFFER,null)),o.useProgram(null),o.lineWidth(1),o.scissor(0,0,o.canvas.width,o.canvas.height),o.viewport(0,0,o.canvas.width,o.canvas.height),ar={},_f=null,gy={},cr={},hr=new WeakMap,es=[],Ur=null,Dr=!1,zr=null,rs=null,as=null,os=null,ls=null,zs=null,ho=null,ga=!1,mo=null,go=null,yl=null,Zl=null,_d=null,By.set(0,0,o.canvas.width,o.canvas.height),lA.set(0,0,o.canvas.width,o.canvas.height),sn.reset(),yn.reset(),Pn.reset()}return{buffers:{color:sn,depth:yn,stencil:Pn},enable:OA,disable:UA,bindFramebuffer:$A,drawBuffers:YA,useProgram:WA,setBlending:BA,setMaterial:rE,setFlipSided:sE,setCullFace:SC,setLineWidth:HA,setPolygonOffset:VA,setScissorTest:oC,activeTexture:pC,bindTexture:cC,unbindTexture:qy,compressedTexImage2D:Iy,compressedTexImage3D:kA,texImage2D:KC,texImage3D:bI,updateUBOMapping:LC,uniformBlockBinding:ZC,texStorage2D:nC,texStorage3D:iE,texSubImage2D:nE,texSubImage3D:A_,compressedTexSubImage2D:eC,compressedTexSubImage3D:PC,scissor:lC,viewport:yI,reset:vI}}function WebGLTextures(o,s,a,b,_e,bt,rn){const sn=_e.isWebGL2,yn=_e.maxTextures,Pn=_e.maxCubemapSize,zn=_e.maxTextureSize,lr=_e.maxSamples,ar=s.has("WEBGL_multisampled_render_to_texture")?s.get("WEBGL_multisampled_render_to_texture"):null,cr=typeof navigator>"u"?!1:/OculusBrowser/g.test(navigator.userAgent),hr=new WeakMap;let es;const Ur=new WeakMap;let Dr=!1;try{Dr=typeof OffscreenCanvas<"u"&&new OffscreenCanvas(1,1).getContext("2d")!==null}catch{}function zr(qy,Iy){return Dr?new OffscreenCanvas(qy,Iy):createElementNS("canvas")}function rs(qy,Iy,kA,nE){let A_=1;if((qy.width>nE||qy.height>nE)&&(A_=nE/Math.max(qy.width,qy.height)),A_<1||Iy===!0)if(typeof HTMLImageElement<"u"&&qy instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&qy instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&qy instanceof ImageBitmap){const eC=Iy?floorPowerOfTwo:Math.floor,PC=eC(A_*qy.width),nC=eC(A_*qy.height);es===void 0&&(es=zr(PC,nC));const iE=kA?zr(PC,nC):es;return iE.width=PC,iE.height=nC,iE.getContext("2d").drawImage(qy,0,0,PC,nC),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+qy.width+"x"+qy.height+") to ("+PC+"x"+nC+")."),iE}else return"data"in qy&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+qy.width+"x"+qy.height+")."),qy;return qy}function as(qy){return isPowerOfTwo(qy.width)&&isPowerOfTwo(qy.height)}function os(qy){return sn?!1:qy.wrapS!==ClampToEdgeWrapping||qy.wrapT!==ClampToEdgeWrapping||qy.minFilter!==NearestFilter&&qy.minFilter!==LinearFilter}function ls(qy,Iy){return qy.generateMipmaps&&Iy&&qy.minFilter!==NearestFilter&&qy.minFilter!==LinearFilter}function zs(qy){o.generateMipmap(qy)}function ho(qy,Iy,kA,nE,A_=!1){if(sn===!1)return Iy;if(qy!==null){if(o[qy]!==void 0)return o[qy];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+qy+"'")}let eC=Iy;if(Iy===o.RED&&(kA===o.FLOAT&&(eC=o.R32F),kA===o.HALF_FLOAT&&(eC=o.R16F),kA===o.UNSIGNED_BYTE&&(eC=o.R8)),Iy===o.RED_INTEGER&&(kA===o.UNSIGNED_BYTE&&(eC=o.R8UI),kA===o.UNSIGNED_SHORT&&(eC=o.R16UI),kA===o.UNSIGNED_INT&&(eC=o.R32UI),kA===o.BYTE&&(eC=o.R8I),kA===o.SHORT&&(eC=o.R16I),kA===o.INT&&(eC=o.R32I)),Iy===o.RG&&(kA===o.FLOAT&&(eC=o.RG32F),kA===o.HALF_FLOAT&&(eC=o.RG16F),kA===o.UNSIGNED_BYTE&&(eC=o.RG8)),Iy===o.RGBA){const PC=A_?LinearTransfer:ColorManagement.getTransfer(nE);kA===o.FLOAT&&(eC=o.RGBA32F),kA===o.HALF_FLOAT&&(eC=o.RGBA16F),kA===o.UNSIGNED_BYTE&&(eC=PC===SRGBTransfer?o.SRGB8_ALPHA8:o.RGBA8),kA===o.UNSIGNED_SHORT_4_4_4_4&&(eC=o.RGBA4),kA===o.UNSIGNED_SHORT_5_5_5_1&&(eC=o.RGB5_A1)}return(eC===o.R16F||eC===o.R32F||eC===o.RG16F||eC===o.RG32F||eC===o.RGBA16F||eC===o.RGBA32F)&&s.get("EXT_color_buffer_float"),eC}function ga(qy,Iy,kA){return ls(qy,kA)===!0||qy.isFramebufferTexture&&qy.minFilter!==NearestFilter&&qy.minFilter!==LinearFilter?Math.log2(Math.max(Iy.width,Iy.height))+1:qy.mipmaps!==void 0&&qy.mipmaps.length>0?qy.mipmaps.length:qy.isCompressedTexture&&Array.isArray(qy.image)?Iy.mipmaps.length:1}function mo(qy){return qy===NearestFilter||qy===NearestMipmapNearestFilter||qy===NearestMipmapLinearFilter?o.NEAREST:o.LINEAR}function go(qy){const Iy=qy.target;Iy.removeEventListener("dispose",go),Zl(Iy),Iy.isVideoTexture&&hr.delete(Iy)}function yl(qy){const Iy=qy.target;Iy.removeEventListener("dispose",yl),Ty(Iy)}function Zl(qy){const Iy=b.get(qy);if(Iy.__webglInit===void 0)return;const kA=qy.source,nE=Ur.get(kA);if(nE){const A_=nE[Iy.__cacheKey];A_.usedTimes--,A_.usedTimes===0&&_d(qy),Object.keys(nE).length===0&&Ur.delete(kA)}b.remove(qy)}function _d(qy){const Iy=b.get(qy);o.deleteTexture(Iy.__webglTexture);const kA=qy.source,nE=Ur.get(kA);delete nE[Iy.__cacheKey],rn.memory.textures--}function Ty(qy){const Iy=qy.texture,kA=b.get(qy),nE=b.get(Iy);if(nE.__webglTexture!==void 0&&(o.deleteTexture(nE.__webglTexture),rn.memory.textures--),qy.depthTexture&&qy.depthTexture.dispose(),qy.isWebGLCubeRenderTarget)for(let A_=0;A_<6;A_++){if(Array.isArray(kA.__webglFramebuffer[A_]))for(let eC=0;eC<kA.__webglFramebuffer[A_].length;eC++)o.deleteFramebuffer(kA.__webglFramebuffer[A_][eC]);else o.deleteFramebuffer(kA.__webglFramebuffer[A_]);kA.__webglDepthbuffer&&o.deleteRenderbuffer(kA.__webglDepthbuffer[A_])}else{if(Array.isArray(kA.__webglFramebuffer))for(let A_=0;A_<kA.__webglFramebuffer.length;A_++)o.deleteFramebuffer(kA.__webglFramebuffer[A_]);else o.deleteFramebuffer(kA.__webglFramebuffer);if(kA.__webglDepthbuffer&&o.deleteRenderbuffer(kA.__webglDepthbuffer),kA.__webglMultisampledFramebuffer&&o.deleteFramebuffer(kA.__webglMultisampledFramebuffer),kA.__webglColorRenderbuffer)for(let A_=0;A_<kA.__webglColorRenderbuffer.length;A_++)kA.__webglColorRenderbuffer[A_]&&o.deleteRenderbuffer(kA.__webglColorRenderbuffer[A_]);kA.__webglDepthRenderbuffer&&o.deleteRenderbuffer(kA.__webglDepthRenderbuffer)}if(qy.isWebGLMultipleRenderTargets)for(let A_=0,eC=Iy.length;A_<eC;A_++){const PC=b.get(Iy[A_]);PC.__webglTexture&&(o.deleteTexture(PC.__webglTexture),rn.memory.textures--),b.remove(Iy[A_])}b.remove(Iy),b.remove(qy)}let yy=0;function by(){yy=0}function Al(){const qy=yy;return qy>=yn&&console.warn("THREE.WebGLTextures: Trying to use "+qy+" texture units while this GPU supports only "+yn),yy+=1,qy}function _f(qy){const Iy=[];return Iy.push(qy.wrapS),Iy.push(qy.wrapT),Iy.push(qy.wrapR||0),Iy.push(qy.magFilter),Iy.push(qy.minFilter),Iy.push(qy.anisotropy),Iy.push(qy.internalFormat),Iy.push(qy.format),Iy.push(qy.type),Iy.push(qy.generateMipmaps),Iy.push(qy.premultiplyAlpha),Iy.push(qy.flipY),Iy.push(qy.unpackAlignment),Iy.push(qy.colorSpace),Iy.join()}function gy(qy,Iy){const kA=b.get(qy);if(qy.isVideoTexture&&pC(qy),qy.isRenderTargetTexture===!1&&qy.version>0&&kA.__version!==qy.version){const nE=qy.image;if(nE===null)console.warn("THREE.WebGLRenderer: Texture marked for update but no image data found.");else if(nE.complete===!1)console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete");else{$A(kA,qy,Iy);return}}a.bindTexture(o.TEXTURE_2D,kA.__webglTexture,o.TEXTURE0+Iy)}function El(qy,Iy){const kA=b.get(qy);if(qy.version>0&&kA.__version!==qy.version){$A(kA,qy,Iy);return}a.bindTexture(o.TEXTURE_2D_ARRAY,kA.__webglTexture,o.TEXTURE0+Iy)}function My(qy,Iy){const kA=b.get(qy);if(qy.version>0&&kA.__version!==qy.version){$A(kA,qy,Iy);return}a.bindTexture(o.TEXTURE_3D,kA.__webglTexture,o.TEXTURE0+Iy)}function By(qy,Iy){const kA=b.get(qy);if(qy.version>0&&kA.__version!==qy.version){YA(kA,qy,Iy);return}a.bindTexture(o.TEXTURE_CUBE_MAP,kA.__webglTexture,o.TEXTURE0+Iy)}const lA={[RepeatWrapping]:o.REPEAT,[ClampToEdgeWrapping]:o.CLAMP_TO_EDGE,[MirroredRepeatWrapping]:o.MIRRORED_REPEAT},wA={[NearestFilter]:o.NEAREST,[NearestMipmapNearestFilter]:o.NEAREST_MIPMAP_NEAREST,[NearestMipmapLinearFilter]:o.NEAREST_MIPMAP_LINEAR,[LinearFilter]:o.LINEAR,[LinearMipmapNearestFilter]:o.LINEAR_MIPMAP_NEAREST,[LinearMipmapLinearFilter]:o.LINEAR_MIPMAP_LINEAR},Fy={[NeverCompare]:o.NEVER,[AlwaysCompare]:o.ALWAYS,[LessCompare]:o.LESS,[LessEqualCompare]:o.LEQUAL,[EqualCompare]:o.EQUAL,[GreaterEqualCompare]:o.GEQUAL,[GreaterCompare]:o.GREATER,[NotEqualCompare]:o.NOTEQUAL};function OA(qy,Iy,kA){if(kA?(o.texParameteri(qy,o.TEXTURE_WRAP_S,lA[Iy.wrapS]),o.texParameteri(qy,o.TEXTURE_WRAP_T,lA[Iy.wrapT]),(qy===o.TEXTURE_3D||qy===o.TEXTURE_2D_ARRAY)&&o.texParameteri(qy,o.TEXTURE_WRAP_R,lA[Iy.wrapR]),o.texParameteri(qy,o.TEXTURE_MAG_FILTER,wA[Iy.magFilter]),o.texParameteri(qy,o.TEXTURE_MIN_FILTER,wA[Iy.minFilter])):(o.texParameteri(qy,o.TEXTURE_WRAP_S,o.CLAMP_TO_EDGE),o.texParameteri(qy,o.TEXTURE_WRAP_T,o.CLAMP_TO_EDGE),(qy===o.TEXTURE_3D||qy===o.TEXTURE_2D_ARRAY)&&o.texParameteri(qy,o.TEXTURE_WRAP_R,o.CLAMP_TO_EDGE),(Iy.wrapS!==ClampToEdgeWrapping||Iy.wrapT!==ClampToEdgeWrapping)&&console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping."),o.texParameteri(qy,o.TEXTURE_MAG_FILTER,mo(Iy.magFilter)),o.texParameteri(qy,o.TEXTURE_MIN_FILTER,mo(Iy.minFilter)),Iy.minFilter!==NearestFilter&&Iy.minFilter!==LinearFilter&&console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.")),Iy.compareFunction&&(o.texParameteri(qy,o.TEXTURE_COMPARE_MODE,o.COMPARE_REF_TO_TEXTURE),o.texParameteri(qy,o.TEXTURE_COMPARE_FUNC,Fy[Iy.compareFunction])),s.has("EXT_texture_filter_anisotropic")===!0){const nE=s.get("EXT_texture_filter_anisotropic");if(Iy.magFilter===NearestFilter||Iy.minFilter!==NearestMipmapLinearFilter&&Iy.minFilter!==LinearMipmapLinearFilter||Iy.type===FloatType&&s.has("OES_texture_float_linear")===!1||sn===!1&&Iy.type===HalfFloatType&&s.has("OES_texture_half_float_linear")===!1)return;(Iy.anisotropy>1||b.get(Iy).__currentAnisotropy)&&(o.texParameterf(qy,nE.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(Iy.anisotropy,_e.getMaxAnisotropy())),b.get(Iy).__currentAnisotropy=Iy.anisotropy)}}function UA(qy,Iy){let kA=!1;qy.__webglInit===void 0&&(qy.__webglInit=!0,Iy.addEventListener("dispose",go));const nE=Iy.source;let A_=Ur.get(nE);A_===void 0&&(A_={},Ur.set(nE,A_));const eC=_f(Iy);if(eC!==qy.__cacheKey){A_[eC]===void 0&&(A_[eC]={texture:o.createTexture(),usedTimes:0},rn.memory.textures++,kA=!0),A_[eC].usedTimes++;const PC=A_[qy.__cacheKey];PC!==void 0&&(A_[qy.__cacheKey].usedTimes--,PC.usedTimes===0&&_d(Iy)),qy.__cacheKey=eC,qy.__webglTexture=A_[eC].texture}return kA}function $A(qy,Iy,kA){let nE=o.TEXTURE_2D;(Iy.isDataArrayTexture||Iy.isCompressedArrayTexture)&&(nE=o.TEXTURE_2D_ARRAY),Iy.isData3DTexture&&(nE=o.TEXTURE_3D);const A_=UA(qy,Iy),eC=Iy.source;a.bindTexture(nE,qy.__webglTexture,o.TEXTURE0+kA);const PC=b.get(eC);if(eC.version!==PC.__version||A_===!0){a.activeTexture(o.TEXTURE0+kA);const nC=ColorManagement.getPrimaries(ColorManagement.workingColorSpace),iE=Iy.colorSpace===NoColorSpace$1?null:ColorManagement.getPrimaries(Iy.colorSpace),KC=Iy.colorSpace===NoColorSpace$1||nC===iE?o.NONE:o.BROWSER_DEFAULT_WEBGL;o.pixelStorei(o.UNPACK_FLIP_Y_WEBGL,Iy.flipY),o.pixelStorei(o.UNPACK_PREMULTIPLY_ALPHA_WEBGL,Iy.premultiplyAlpha),o.pixelStorei(o.UNPACK_ALIGNMENT,Iy.unpackAlignment),o.pixelStorei(o.UNPACK_COLORSPACE_CONVERSION_WEBGL,KC);const bI=os(Iy)&&as(Iy.image)===!1;let lC=rs(Iy.image,bI,!1,zn);lC=cC(Iy,lC);const yI=as(lC)||sn,LC=bt.convert(Iy.format,Iy.colorSpace);let ZC=bt.convert(Iy.type),vI=ho(Iy.internalFormat,LC,ZC,Iy.colorSpace,Iy.isVideoTexture);OA(nE,Iy,yI);let IA;const XA=Iy.mipmaps,QA=sn&&Iy.isVideoTexture!==!0,fC=PC.__version===void 0||A_===!0,uC=ga(Iy,lC,yI);if(Iy.isDepthTexture)vI=o.DEPTH_COMPONENT,sn?Iy.type===FloatType?vI=o.DEPTH_COMPONENT32F:Iy.type===UnsignedIntType?vI=o.DEPTH_COMPONENT24:Iy.type===UnsignedInt248Type?vI=o.DEPTH24_STENCIL8:vI=o.DEPTH_COMPONENT16:Iy.type===FloatType&&console.error("WebGLRenderer: Floating point depth texture requires WebGL2."),Iy.format===DepthFormat&&vI===o.DEPTH_COMPONENT&&Iy.type!==UnsignedShortType&&Iy.type!==UnsignedIntType&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),Iy.type=UnsignedIntType,ZC=bt.convert(Iy.type)),Iy.format===DepthStencilFormat&&vI===o.DEPTH_COMPONENT&&(vI=o.DEPTH_STENCIL,Iy.type!==UnsignedInt248Type&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),Iy.type=UnsignedInt248Type,ZC=bt.convert(Iy.type))),fC&&(QA?a.texStorage2D(o.TEXTURE_2D,1,vI,lC.width,lC.height):a.texImage2D(o.TEXTURE_2D,0,vI,lC.width,lC.height,0,LC,ZC,null));else if(Iy.isDataTexture)if(XA.length>0&&yI){QA&&fC&&a.texStorage2D(o.TEXTURE_2D,uC,vI,XA[0].width,XA[0].height);for(let CC=0,CI=XA.length;CC<CI;CC++)IA=XA[CC],QA?a.texSubImage2D(o.TEXTURE_2D,CC,0,0,IA.width,IA.height,LC,ZC,IA.data):a.texImage2D(o.TEXTURE_2D,CC,vI,IA.width,IA.height,0,LC,ZC,IA.data);Iy.generateMipmaps=!1}else QA?(fC&&a.texStorage2D(o.TEXTURE_2D,uC,vI,lC.width,lC.height),a.texSubImage2D(o.TEXTURE_2D,0,0,0,lC.width,lC.height,LC,ZC,lC.data)):a.texImage2D(o.TEXTURE_2D,0,vI,lC.width,lC.height,0,LC,ZC,lC.data);else if(Iy.isCompressedTexture)if(Iy.isCompressedArrayTexture){QA&&fC&&a.texStorage3D(o.TEXTURE_2D_ARRAY,uC,vI,XA[0].width,XA[0].height,lC.depth);for(let CC=0,CI=XA.length;CC<CI;CC++)IA=XA[CC],Iy.format!==RGBAFormat?LC!==null?QA?a.compressedTexSubImage3D(o.TEXTURE_2D_ARRAY,CC,0,0,0,IA.width,IA.height,lC.depth,LC,IA.data,0,0):a.compressedTexImage3D(o.TEXTURE_2D_ARRAY,CC,vI,IA.width,IA.height,lC.depth,0,IA.data,0,0):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):QA?a.texSubImage3D(o.TEXTURE_2D_ARRAY,CC,0,0,0,IA.width,IA.height,lC.depth,LC,ZC,IA.data):a.texImage3D(o.TEXTURE_2D_ARRAY,CC,vI,IA.width,IA.height,lC.depth,0,LC,ZC,IA.data)}else{QA&&fC&&a.texStorage2D(o.TEXTURE_2D,uC,vI,XA[0].width,XA[0].height);for(let CC=0,CI=XA.length;CC<CI;CC++)IA=XA[CC],Iy.format!==RGBAFormat?LC!==null?QA?a.compressedTexSubImage2D(o.TEXTURE_2D,CC,0,0,IA.width,IA.height,LC,IA.data):a.compressedTexImage2D(o.TEXTURE_2D,CC,vI,IA.width,IA.height,0,IA.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):QA?a.texSubImage2D(o.TEXTURE_2D,CC,0,0,IA.width,IA.height,LC,ZC,IA.data):a.texImage2D(o.TEXTURE_2D,CC,vI,IA.width,IA.height,0,LC,ZC,IA.data)}else if(Iy.isDataArrayTexture)QA?(fC&&a.texStorage3D(o.TEXTURE_2D_ARRAY,uC,vI,lC.width,lC.height,lC.depth),a.texSubImage3D(o.TEXTURE_2D_ARRAY,0,0,0,0,lC.width,lC.height,lC.depth,LC,ZC,lC.data)):a.texImage3D(o.TEXTURE_2D_ARRAY,0,vI,lC.width,lC.height,lC.depth,0,LC,ZC,lC.data);else if(Iy.isData3DTexture)QA?(fC&&a.texStorage3D(o.TEXTURE_3D,uC,vI,lC.width,lC.height,lC.depth),a.texSubImage3D(o.TEXTURE_3D,0,0,0,0,lC.width,lC.height,lC.depth,LC,ZC,lC.data)):a.texImage3D(o.TEXTURE_3D,0,vI,lC.width,lC.height,lC.depth,0,LC,ZC,lC.data);else if(Iy.isFramebufferTexture){if(fC)if(QA)a.texStorage2D(o.TEXTURE_2D,uC,vI,lC.width,lC.height);else{let CC=lC.width,CI=lC.height;for(let DI=0;DI<uC;DI++)a.texImage2D(o.TEXTURE_2D,DI,vI,CC,CI,0,LC,ZC,null),CC>>=1,CI>>=1}}else if(XA.length>0&&yI){QA&&fC&&a.texStorage2D(o.TEXTURE_2D,uC,vI,XA[0].width,XA[0].height);for(let CC=0,CI=XA.length;CC<CI;CC++)IA=XA[CC],QA?a.texSubImage2D(o.TEXTURE_2D,CC,0,0,LC,ZC,IA):a.texImage2D(o.TEXTURE_2D,CC,vI,LC,ZC,IA);Iy.generateMipmaps=!1}else QA?(fC&&a.texStorage2D(o.TEXTURE_2D,uC,vI,lC.width,lC.height),a.texSubImage2D(o.TEXTURE_2D,0,0,0,LC,ZC,lC)):a.texImage2D(o.TEXTURE_2D,0,vI,LC,ZC,lC);ls(Iy,yI)&&zs(nE),PC.__version=eC.version,Iy.onUpdate&&Iy.onUpdate(Iy)}qy.__version=Iy.version}function YA(qy,Iy,kA){if(Iy.image.length!==6)return;const nE=UA(qy,Iy),A_=Iy.source;a.bindTexture(o.TEXTURE_CUBE_MAP,qy.__webglTexture,o.TEXTURE0+kA);const eC=b.get(A_);if(A_.version!==eC.__version||nE===!0){a.activeTexture(o.TEXTURE0+kA);const PC=ColorManagement.getPrimaries(ColorManagement.workingColorSpace),nC=Iy.colorSpace===NoColorSpace$1?null:ColorManagement.getPrimaries(Iy.colorSpace),iE=Iy.colorSpace===NoColorSpace$1||PC===nC?o.NONE:o.BROWSER_DEFAULT_WEBGL;o.pixelStorei(o.UNPACK_FLIP_Y_WEBGL,Iy.flipY),o.pixelStorei(o.UNPACK_PREMULTIPLY_ALPHA_WEBGL,Iy.premultiplyAlpha),o.pixelStorei(o.UNPACK_ALIGNMENT,Iy.unpackAlignment),o.pixelStorei(o.UNPACK_COLORSPACE_CONVERSION_WEBGL,iE);const KC=Iy.isCompressedTexture||Iy.image[0].isCompressedTexture,bI=Iy.image[0]&&Iy.image[0].isDataTexture,lC=[];for(let CC=0;CC<6;CC++)!KC&&!bI?lC[CC]=rs(Iy.image[CC],!1,!0,Pn):lC[CC]=bI?Iy.image[CC].image:Iy.image[CC],lC[CC]=cC(Iy,lC[CC]);const yI=lC[0],LC=as(yI)||sn,ZC=bt.convert(Iy.format,Iy.colorSpace),vI=bt.convert(Iy.type),IA=ho(Iy.internalFormat,ZC,vI,Iy.colorSpace),XA=sn&&Iy.isVideoTexture!==!0,QA=eC.__version===void 0||nE===!0;let fC=ga(Iy,yI,LC);OA(o.TEXTURE_CUBE_MAP,Iy,LC);let uC;if(KC){XA&&QA&&a.texStorage2D(o.TEXTURE_CUBE_MAP,fC,IA,yI.width,yI.height);for(let CC=0;CC<6;CC++){uC=lC[CC].mipmaps;for(let CI=0;CI<uC.length;CI++){const DI=uC[CI];Iy.format!==RGBAFormat?ZC!==null?XA?a.compressedTexSubImage2D(o.TEXTURE_CUBE_MAP_POSITIVE_X+CC,CI,0,0,DI.width,DI.height,ZC,DI.data):a.compressedTexImage2D(o.TEXTURE_CUBE_MAP_POSITIVE_X+CC,CI,IA,DI.width,DI.height,0,DI.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()"):XA?a.texSubImage2D(o.TEXTURE_CUBE_MAP_POSITIVE_X+CC,CI,0,0,DI.width,DI.height,ZC,vI,DI.data):a.texImage2D(o.TEXTURE_CUBE_MAP_POSITIVE_X+CC,CI,IA,DI.width,DI.height,0,ZC,vI,DI.data)}}}else{uC=Iy.mipmaps,XA&&QA&&(uC.length>0&&fC++,a.texStorage2D(o.TEXTURE_CUBE_MAP,fC,IA,lC[0].width,lC[0].height));for(let CC=0;CC<6;CC++)if(bI){XA?a.texSubImage2D(o.TEXTURE_CUBE_MAP_POSITIVE_X+CC,0,0,0,lC[CC].width,lC[CC].height,ZC,vI,lC[CC].data):a.texImage2D(o.TEXTURE_CUBE_MAP_POSITIVE_X+CC,0,IA,lC[CC].width,lC[CC].height,0,ZC,vI,lC[CC].data);for(let CI=0;CI<uC.length;CI++){const FR=uC[CI].image[CC].image;XA?a.texSubImage2D(o.TEXTURE_CUBE_MAP_POSITIVE_X+CC,CI+1,0,0,FR.width,FR.height,ZC,vI,FR.data):a.texImage2D(o.TEXTURE_CUBE_MAP_POSITIVE_X+CC,CI+1,IA,FR.width,FR.height,0,ZC,vI,FR.data)}}else{XA?a.texSubImage2D(o.TEXTURE_CUBE_MAP_POSITIVE_X+CC,0,0,0,ZC,vI,lC[CC]):a.texImage2D(o.TEXTURE_CUBE_MAP_POSITIVE_X+CC,0,IA,ZC,vI,lC[CC]);for(let CI=0;CI<uC.length;CI++){const DI=uC[CI];XA?a.texSubImage2D(o.TEXTURE_CUBE_MAP_POSITIVE_X+CC,CI+1,0,0,ZC,vI,DI.image[CC]):a.texImage2D(o.TEXTURE_CUBE_MAP_POSITIVE_X+CC,CI+1,IA,ZC,vI,DI.image[CC])}}}ls(Iy,LC)&&zs(o.TEXTURE_CUBE_MAP),eC.__version=A_.version,Iy.onUpdate&&Iy.onUpdate(Iy)}qy.__version=Iy.version}function WA(qy,Iy,kA,nE,A_,eC){const PC=bt.convert(kA.format,kA.colorSpace),nC=bt.convert(kA.type),iE=ho(kA.internalFormat,PC,nC,kA.colorSpace);if(!b.get(Iy).__hasExternalTextures){const bI=Math.max(1,Iy.width>>eC),lC=Math.max(1,Iy.height>>eC);A_===o.TEXTURE_3D||A_===o.TEXTURE_2D_ARRAY?a.texImage3D(A_,eC,iE,bI,lC,Iy.depth,0,PC,nC,null):a.texImage2D(A_,eC,iE,bI,lC,0,PC,nC,null)}a.bindFramebuffer(o.FRAMEBUFFER,qy),oC(Iy)?ar.framebufferTexture2DMultisampleEXT(o.FRAMEBUFFER,nE,A_,b.get(kA).__webglTexture,0,VA(Iy)):(A_===o.TEXTURE_2D||A_>=o.TEXTURE_CUBE_MAP_POSITIVE_X&&A_<=o.TEXTURE_CUBE_MAP_NEGATIVE_Z)&&o.framebufferTexture2D(o.FRAMEBUFFER,nE,A_,b.get(kA).__webglTexture,eC),a.bindFramebuffer(o.FRAMEBUFFER,null)}function bA(qy,Iy,kA){if(o.bindRenderbuffer(o.RENDERBUFFER,qy),Iy.depthBuffer&&!Iy.stencilBuffer){let nE=sn===!0?o.DEPTH_COMPONENT24:o.DEPTH_COMPONENT16;if(kA||oC(Iy)){const A_=Iy.depthTexture;A_&&A_.isDepthTexture&&(A_.type===FloatType?nE=o.DEPTH_COMPONENT32F:A_.type===UnsignedIntType&&(nE=o.DEPTH_COMPONENT24));const eC=VA(Iy);oC(Iy)?ar.renderbufferStorageMultisampleEXT(o.RENDERBUFFER,eC,nE,Iy.width,Iy.height):o.renderbufferStorageMultisample(o.RENDERBUFFER,eC,nE,Iy.width,Iy.height)}else o.renderbufferStorage(o.RENDERBUFFER,nE,Iy.width,Iy.height);o.framebufferRenderbuffer(o.FRAMEBUFFER,o.DEPTH_ATTACHMENT,o.RENDERBUFFER,qy)}else if(Iy.depthBuffer&&Iy.stencilBuffer){const nE=VA(Iy);kA&&oC(Iy)===!1?o.renderbufferStorageMultisample(o.RENDERBUFFER,nE,o.DEPTH24_STENCIL8,Iy.width,Iy.height):oC(Iy)?ar.renderbufferStorageMultisampleEXT(o.RENDERBUFFER,nE,o.DEPTH24_STENCIL8,Iy.width,Iy.height):o.renderbufferStorage(o.RENDERBUFFER,o.DEPTH_STENCIL,Iy.width,Iy.height),o.framebufferRenderbuffer(o.FRAMEBUFFER,o.DEPTH_STENCIL_ATTACHMENT,o.RENDERBUFFER,qy)}else{const nE=Iy.isWebGLMultipleRenderTargets===!0?Iy.texture:[Iy.texture];for(let A_=0;A_<nE.length;A_++){const eC=nE[A_],PC=bt.convert(eC.format,eC.colorSpace),nC=bt.convert(eC.type),iE=ho(eC.internalFormat,PC,nC,eC.colorSpace),KC=VA(Iy);kA&&oC(Iy)===!1?o.renderbufferStorageMultisample(o.RENDERBUFFER,KC,iE,Iy.width,Iy.height):oC(Iy)?ar.renderbufferStorageMultisampleEXT(o.RENDERBUFFER,KC,iE,Iy.width,Iy.height):o.renderbufferStorage(o.RENDERBUFFER,iE,Iy.width,Iy.height)}}o.bindRenderbuffer(o.RENDERBUFFER,null)}function FA(qy,Iy){if(Iy&&Iy.isWebGLCubeRenderTarget)throw new Error("Depth Texture with cube render targets is not supported");if(a.bindFramebuffer(o.FRAMEBUFFER,qy),!(Iy.depthTexture&&Iy.depthTexture.isDepthTexture))throw new Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");(!b.get(Iy.depthTexture).__webglTexture||Iy.depthTexture.image.width!==Iy.width||Iy.depthTexture.image.height!==Iy.height)&&(Iy.depthTexture.image.width=Iy.width,Iy.depthTexture.image.height=Iy.height,Iy.depthTexture.needsUpdate=!0),gy(Iy.depthTexture,0);const nE=b.get(Iy.depthTexture).__webglTexture,A_=VA(Iy);if(Iy.depthTexture.format===DepthFormat)oC(Iy)?ar.framebufferTexture2DMultisampleEXT(o.FRAMEBUFFER,o.DEPTH_ATTACHMENT,o.TEXTURE_2D,nE,0,A_):o.framebufferTexture2D(o.FRAMEBUFFER,o.DEPTH_ATTACHMENT,o.TEXTURE_2D,nE,0);else if(Iy.depthTexture.format===DepthStencilFormat)oC(Iy)?ar.framebufferTexture2DMultisampleEXT(o.FRAMEBUFFER,o.DEPTH_STENCIL_ATTACHMENT,o.TEXTURE_2D,nE,0,A_):o.framebufferTexture2D(o.FRAMEBUFFER,o.DEPTH_STENCIL_ATTACHMENT,o.TEXTURE_2D,nE,0);else throw new Error("Unknown depthTexture format")}function BA(qy){const Iy=b.get(qy),kA=qy.isWebGLCubeRenderTarget===!0;if(qy.depthTexture&&!Iy.__autoAllocateDepthBuffer){if(kA)throw new Error("target.depthTexture not supported in Cube render targets");FA(Iy.__webglFramebuffer,qy)}else if(kA){Iy.__webglDepthbuffer=[];for(let nE=0;nE<6;nE++)a.bindFramebuffer(o.FRAMEBUFFER,Iy.__webglFramebuffer[nE]),Iy.__webglDepthbuffer[nE]=o.createRenderbuffer(),bA(Iy.__webglDepthbuffer[nE],qy,!1)}else a.bindFramebuffer(o.FRAMEBUFFER,Iy.__webglFramebuffer),Iy.__webglDepthbuffer=o.createRenderbuffer(),bA(Iy.__webglDepthbuffer,qy,!1);a.bindFramebuffer(o.FRAMEBUFFER,null)}function rE(qy,Iy,kA){const nE=b.get(qy);Iy!==void 0&&WA(nE.__webglFramebuffer,qy,qy.texture,o.COLOR_ATTACHMENT0,o.TEXTURE_2D,0),kA!==void 0&&BA(qy)}function sE(qy){const Iy=qy.texture,kA=b.get(qy),nE=b.get(Iy);qy.addEventListener("dispose",yl),qy.isWebGLMultipleRenderTargets!==!0&&(nE.__webglTexture===void 0&&(nE.__webglTexture=o.createTexture()),nE.__version=Iy.version,rn.memory.textures++);const A_=qy.isWebGLCubeRenderTarget===!0,eC=qy.isWebGLMultipleRenderTargets===!0,PC=as(qy)||sn;if(A_){kA.__webglFramebuffer=[];for(let nC=0;nC<6;nC++)if(sn&&Iy.mipmaps&&Iy.mipmaps.length>0){kA.__webglFramebuffer[nC]=[];for(let iE=0;iE<Iy.mipmaps.length;iE++)kA.__webglFramebuffer[nC][iE]=o.createFramebuffer()}else kA.__webglFramebuffer[nC]=o.createFramebuffer()}else{if(sn&&Iy.mipmaps&&Iy.mipmaps.length>0){kA.__webglFramebuffer=[];for(let nC=0;nC<Iy.mipmaps.length;nC++)kA.__webglFramebuffer[nC]=o.createFramebuffer()}else kA.__webglFramebuffer=o.createFramebuffer();if(eC)if(_e.drawBuffers){const nC=qy.texture;for(let iE=0,KC=nC.length;iE<KC;iE++){const bI=b.get(nC[iE]);bI.__webglTexture===void 0&&(bI.__webglTexture=o.createTexture(),rn.memory.textures++)}}else console.warn("THREE.WebGLRenderer: WebGLMultipleRenderTargets can only be used with WebGL2 or WEBGL_draw_buffers extension.");if(sn&&qy.samples>0&&oC(qy)===!1){const nC=eC?Iy:[Iy];kA.__webglMultisampledFramebuffer=o.createFramebuffer(),kA.__webglColorRenderbuffer=[],a.bindFramebuffer(o.FRAMEBUFFER,kA.__webglMultisampledFramebuffer);for(let iE=0;iE<nC.length;iE++){const KC=nC[iE];kA.__webglColorRenderbuffer[iE]=o.createRenderbuffer(),o.bindRenderbuffer(o.RENDERBUFFER,kA.__webglColorRenderbuffer[iE]);const bI=bt.convert(KC.format,KC.colorSpace),lC=bt.convert(KC.type),yI=ho(KC.internalFormat,bI,lC,KC.colorSpace,qy.isXRRenderTarget===!0),LC=VA(qy);o.renderbufferStorageMultisample(o.RENDERBUFFER,LC,yI,qy.width,qy.height),o.framebufferRenderbuffer(o.FRAMEBUFFER,o.COLOR_ATTACHMENT0+iE,o.RENDERBUFFER,kA.__webglColorRenderbuffer[iE])}o.bindRenderbuffer(o.RENDERBUFFER,null),qy.depthBuffer&&(kA.__webglDepthRenderbuffer=o.createRenderbuffer(),bA(kA.__webglDepthRenderbuffer,qy,!0)),a.bindFramebuffer(o.FRAMEBUFFER,null)}}if(A_){a.bindTexture(o.TEXTURE_CUBE_MAP,nE.__webglTexture),OA(o.TEXTURE_CUBE_MAP,Iy,PC);for(let nC=0;nC<6;nC++)if(sn&&Iy.mipmaps&&Iy.mipmaps.length>0)for(let iE=0;iE<Iy.mipmaps.length;iE++)WA(kA.__webglFramebuffer[nC][iE],qy,Iy,o.COLOR_ATTACHMENT0,o.TEXTURE_CUBE_MAP_POSITIVE_X+nC,iE);else WA(kA.__webglFramebuffer[nC],qy,Iy,o.COLOR_ATTACHMENT0,o.TEXTURE_CUBE_MAP_POSITIVE_X+nC,0);ls(Iy,PC)&&zs(o.TEXTURE_CUBE_MAP),a.unbindTexture()}else if(eC){const nC=qy.texture;for(let iE=0,KC=nC.length;iE<KC;iE++){const bI=nC[iE],lC=b.get(bI);a.bindTexture(o.TEXTURE_2D,lC.__webglTexture),OA(o.TEXTURE_2D,bI,PC),WA(kA.__webglFramebuffer,qy,bI,o.COLOR_ATTACHMENT0+iE,o.TEXTURE_2D,0),ls(bI,PC)&&zs(o.TEXTURE_2D)}a.unbindTexture()}else{let nC=o.TEXTURE_2D;if((qy.isWebGL3DRenderTarget||qy.isWebGLArrayRenderTarget)&&(sn?nC=qy.isWebGL3DRenderTarget?o.TEXTURE_3D:o.TEXTURE_2D_ARRAY:console.error("THREE.WebGLTextures: THREE.Data3DTexture and THREE.DataArrayTexture only supported with WebGL2.")),a.bindTexture(nC,nE.__webglTexture),OA(nC,Iy,PC),sn&&Iy.mipmaps&&Iy.mipmaps.length>0)for(let iE=0;iE<Iy.mipmaps.length;iE++)WA(kA.__webglFramebuffer[iE],qy,Iy,o.COLOR_ATTACHMENT0,nC,iE);else WA(kA.__webglFramebuffer,qy,Iy,o.COLOR_ATTACHMENT0,nC,0);ls(Iy,PC)&&zs(nC),a.unbindTexture()}qy.depthBuffer&&BA(qy)}function SC(qy){const Iy=as(qy)||sn,kA=qy.isWebGLMultipleRenderTargets===!0?qy.texture:[qy.texture];for(let nE=0,A_=kA.length;nE<A_;nE++){const eC=kA[nE];if(ls(eC,Iy)){const PC=qy.isWebGLCubeRenderTarget?o.TEXTURE_CUBE_MAP:o.TEXTURE_2D,nC=b.get(eC).__webglTexture;a.bindTexture(PC,nC),zs(PC),a.unbindTexture()}}}function HA(qy){if(sn&&qy.samples>0&&oC(qy)===!1){const Iy=qy.isWebGLMultipleRenderTargets?qy.texture:[qy.texture],kA=qy.width,nE=qy.height;let A_=o.COLOR_BUFFER_BIT;const eC=[],PC=qy.stencilBuffer?o.DEPTH_STENCIL_ATTACHMENT:o.DEPTH_ATTACHMENT,nC=b.get(qy),iE=qy.isWebGLMultipleRenderTargets===!0;if(iE)for(let KC=0;KC<Iy.length;KC++)a.bindFramebuffer(o.FRAMEBUFFER,nC.__webglMultisampledFramebuffer),o.framebufferRenderbuffer(o.FRAMEBUFFER,o.COLOR_ATTACHMENT0+KC,o.RENDERBUFFER,null),a.bindFramebuffer(o.FRAMEBUFFER,nC.__webglFramebuffer),o.framebufferTexture2D(o.DRAW_FRAMEBUFFER,o.COLOR_ATTACHMENT0+KC,o.TEXTURE_2D,null,0);a.bindFramebuffer(o.READ_FRAMEBUFFER,nC.__webglMultisampledFramebuffer),a.bindFramebuffer(o.DRAW_FRAMEBUFFER,nC.__webglFramebuffer);for(let KC=0;KC<Iy.length;KC++){eC.push(o.COLOR_ATTACHMENT0+KC),qy.depthBuffer&&eC.push(PC);const bI=nC.__ignoreDepthValues!==void 0?nC.__ignoreDepthValues:!1;if(bI===!1&&(qy.depthBuffer&&(A_|=o.DEPTH_BUFFER_BIT),qy.stencilBuffer&&(A_|=o.STENCIL_BUFFER_BIT)),iE&&o.framebufferRenderbuffer(o.READ_FRAMEBUFFER,o.COLOR_ATTACHMENT0,o.RENDERBUFFER,nC.__webglColorRenderbuffer[KC]),bI===!0&&(o.invalidateFramebuffer(o.READ_FRAMEBUFFER,[PC]),o.invalidateFramebuffer(o.DRAW_FRAMEBUFFER,[PC])),iE){const lC=b.get(Iy[KC]).__webglTexture;o.framebufferTexture2D(o.DRAW_FRAMEBUFFER,o.COLOR_ATTACHMENT0,o.TEXTURE_2D,lC,0)}o.blitFramebuffer(0,0,kA,nE,0,0,kA,nE,A_,o.NEAREST),cr&&o.invalidateFramebuffer(o.READ_FRAMEBUFFER,eC)}if(a.bindFramebuffer(o.READ_FRAMEBUFFER,null),a.bindFramebuffer(o.DRAW_FRAMEBUFFER,null),iE)for(let KC=0;KC<Iy.length;KC++){a.bindFramebuffer(o.FRAMEBUFFER,nC.__webglMultisampledFramebuffer),o.framebufferRenderbuffer(o.FRAMEBUFFER,o.COLOR_ATTACHMENT0+KC,o.RENDERBUFFER,nC.__webglColorRenderbuffer[KC]);const bI=b.get(Iy[KC]).__webglTexture;a.bindFramebuffer(o.FRAMEBUFFER,nC.__webglFramebuffer),o.framebufferTexture2D(o.DRAW_FRAMEBUFFER,o.COLOR_ATTACHMENT0+KC,o.TEXTURE_2D,bI,0)}a.bindFramebuffer(o.DRAW_FRAMEBUFFER,nC.__webglMultisampledFramebuffer)}}function VA(qy){return Math.min(lr,qy.samples)}function oC(qy){const Iy=b.get(qy);return sn&&qy.samples>0&&s.has("WEBGL_multisampled_render_to_texture")===!0&&Iy.__useRenderToTexture!==!1}function pC(qy){const Iy=rn.render.frame;hr.get(qy)!==Iy&&(hr.set(qy,Iy),qy.update())}function cC(qy,Iy){const kA=qy.colorSpace,nE=qy.format,A_=qy.type;return qy.isCompressedTexture===!0||qy.isVideoTexture===!0||qy.format===_SRGBAFormat||kA!==LinearSRGBColorSpace$1&&kA!==NoColorSpace$1&&(ColorManagement.getTransfer(kA)===SRGBTransfer?sn===!1?s.has("EXT_sRGB")===!0&&nE===RGBAFormat?(qy.format=_SRGBAFormat,qy.minFilter=LinearFilter,qy.generateMipmaps=!1):Iy=ImageUtils.sRGBToLinear(Iy):(nE!==RGBAFormat||A_!==UnsignedByteType)&&console.warn("THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."):console.error("THREE.WebGLTextures: Unsupported texture color space:",kA)),Iy}this.allocateTextureUnit=Al,this.resetTextureUnits=by,this.setTexture2D=gy,this.setTexture2DArray=El,this.setTexture3D=My,this.setTextureCube=By,this.rebindTextures=rE,this.setupRenderTarget=sE,this.updateRenderTargetMipmap=SC,this.updateMultisampleRenderTarget=HA,this.setupDepthRenderbuffer=BA,this.setupFrameBufferTexture=WA,this.useMultisampledRTT=oC}function WebGLUtils(o,s,a){const b=a.isWebGL2;function _e(bt,rn=NoColorSpace$1){let sn;const yn=ColorManagement.getTransfer(rn);if(bt===UnsignedByteType)return o.UNSIGNED_BYTE;if(bt===UnsignedShort4444Type)return o.UNSIGNED_SHORT_4_4_4_4;if(bt===UnsignedShort5551Type)return o.UNSIGNED_SHORT_5_5_5_1;if(bt===ByteType)return o.BYTE;if(bt===ShortType)return o.SHORT;if(bt===UnsignedShortType)return o.UNSIGNED_SHORT;if(bt===IntType)return o.INT;if(bt===UnsignedIntType)return o.UNSIGNED_INT;if(bt===FloatType)return o.FLOAT;if(bt===HalfFloatType)return b?o.HALF_FLOAT:(sn=s.get("OES_texture_half_float"),sn!==null?sn.HALF_FLOAT_OES:null);if(bt===AlphaFormat)return o.ALPHA;if(bt===RGBAFormat)return o.RGBA;if(bt===LuminanceFormat)return o.LUMINANCE;if(bt===LuminanceAlphaFormat)return o.LUMINANCE_ALPHA;if(bt===DepthFormat)return o.DEPTH_COMPONENT;if(bt===DepthStencilFormat)return o.DEPTH_STENCIL;if(bt===_SRGBAFormat)return sn=s.get("EXT_sRGB"),sn!==null?sn.SRGB_ALPHA_EXT:null;if(bt===RedFormat)return o.RED;if(bt===RedIntegerFormat)return o.RED_INTEGER;if(bt===RGFormat)return o.RG;if(bt===RGIntegerFormat)return o.RG_INTEGER;if(bt===RGBAIntegerFormat)return o.RGBA_INTEGER;if(bt===RGB_S3TC_DXT1_Format||bt===RGBA_S3TC_DXT1_Format||bt===RGBA_S3TC_DXT3_Format||bt===RGBA_S3TC_DXT5_Format)if(yn===SRGBTransfer)if(sn=s.get("WEBGL_compressed_texture_s3tc_srgb"),sn!==null){if(bt===RGB_S3TC_DXT1_Format)return sn.COMPRESSED_SRGB_S3TC_DXT1_EXT;if(bt===RGBA_S3TC_DXT1_Format)return sn.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;if(bt===RGBA_S3TC_DXT3_Format)return sn.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;if(bt===RGBA_S3TC_DXT5_Format)return sn.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}else return null;else if(sn=s.get("WEBGL_compressed_texture_s3tc"),sn!==null){if(bt===RGB_S3TC_DXT1_Format)return sn.COMPRESSED_RGB_S3TC_DXT1_EXT;if(bt===RGBA_S3TC_DXT1_Format)return sn.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(bt===RGBA_S3TC_DXT3_Format)return sn.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(bt===RGBA_S3TC_DXT5_Format)return sn.COMPRESSED_RGBA_S3TC_DXT5_EXT}else return null;if(bt===RGB_PVRTC_4BPPV1_Format||bt===RGB_PVRTC_2BPPV1_Format||bt===RGBA_PVRTC_4BPPV1_Format||bt===RGBA_PVRTC_2BPPV1_Format)if(sn=s.get("WEBGL_compressed_texture_pvrtc"),sn!==null){if(bt===RGB_PVRTC_4BPPV1_Format)return sn.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(bt===RGB_PVRTC_2BPPV1_Format)return sn.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(bt===RGBA_PVRTC_4BPPV1_Format)return sn.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(bt===RGBA_PVRTC_2BPPV1_Format)return sn.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}else return null;if(bt===RGB_ETC1_Format)return sn=s.get("WEBGL_compressed_texture_etc1"),sn!==null?sn.COMPRESSED_RGB_ETC1_WEBGL:null;if(bt===RGB_ETC2_Format||bt===RGBA_ETC2_EAC_Format)if(sn=s.get("WEBGL_compressed_texture_etc"),sn!==null){if(bt===RGB_ETC2_Format)return yn===SRGBTransfer?sn.COMPRESSED_SRGB8_ETC2:sn.COMPRESSED_RGB8_ETC2;if(bt===RGBA_ETC2_EAC_Format)return yn===SRGBTransfer?sn.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:sn.COMPRESSED_RGBA8_ETC2_EAC}else return null;if(bt===RGBA_ASTC_4x4_Format||bt===RGBA_ASTC_5x4_Format||bt===RGBA_ASTC_5x5_Format||bt===RGBA_ASTC_6x5_Format||bt===RGBA_ASTC_6x6_Format||bt===RGBA_ASTC_8x5_Format||bt===RGBA_ASTC_8x6_Format||bt===RGBA_ASTC_8x8_Format||bt===RGBA_ASTC_10x5_Format||bt===RGBA_ASTC_10x6_Format||bt===RGBA_ASTC_10x8_Format||bt===RGBA_ASTC_10x10_Format||bt===RGBA_ASTC_12x10_Format||bt===RGBA_ASTC_12x12_Format)if(sn=s.get("WEBGL_compressed_texture_astc"),sn!==null){if(bt===RGBA_ASTC_4x4_Format)return yn===SRGBTransfer?sn.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:sn.COMPRESSED_RGBA_ASTC_4x4_KHR;if(bt===RGBA_ASTC_5x4_Format)return yn===SRGBTransfer?sn.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:sn.COMPRESSED_RGBA_ASTC_5x4_KHR;if(bt===RGBA_ASTC_5x5_Format)return yn===SRGBTransfer?sn.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:sn.COMPRESSED_RGBA_ASTC_5x5_KHR;if(bt===RGBA_ASTC_6x5_Format)return yn===SRGBTransfer?sn.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:sn.COMPRESSED_RGBA_ASTC_6x5_KHR;if(bt===RGBA_ASTC_6x6_Format)return yn===SRGBTransfer?sn.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:sn.COMPRESSED_RGBA_ASTC_6x6_KHR;if(bt===RGBA_ASTC_8x5_Format)return yn===SRGBTransfer?sn.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:sn.COMPRESSED_RGBA_ASTC_8x5_KHR;if(bt===RGBA_ASTC_8x6_Format)return yn===SRGBTransfer?sn.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:sn.COMPRESSED_RGBA_ASTC_8x6_KHR;if(bt===RGBA_ASTC_8x8_Format)return yn===SRGBTransfer?sn.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:sn.COMPRESSED_RGBA_ASTC_8x8_KHR;if(bt===RGBA_ASTC_10x5_Format)return yn===SRGBTransfer?sn.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:sn.COMPRESSED_RGBA_ASTC_10x5_KHR;if(bt===RGBA_ASTC_10x6_Format)return yn===SRGBTransfer?sn.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:sn.COMPRESSED_RGBA_ASTC_10x6_KHR;if(bt===RGBA_ASTC_10x8_Format)return yn===SRGBTransfer?sn.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:sn.COMPRESSED_RGBA_ASTC_10x8_KHR;if(bt===RGBA_ASTC_10x10_Format)return yn===SRGBTransfer?sn.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:sn.COMPRESSED_RGBA_ASTC_10x10_KHR;if(bt===RGBA_ASTC_12x10_Format)return yn===SRGBTransfer?sn.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:sn.COMPRESSED_RGBA_ASTC_12x10_KHR;if(bt===RGBA_ASTC_12x12_Format)return yn===SRGBTransfer?sn.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:sn.COMPRESSED_RGBA_ASTC_12x12_KHR}else return null;if(bt===RGBA_BPTC_Format||bt===RGB_BPTC_SIGNED_Format||bt===RGB_BPTC_UNSIGNED_Format)if(sn=s.get("EXT_texture_compression_bptc"),sn!==null){if(bt===RGBA_BPTC_Format)return yn===SRGBTransfer?sn.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:sn.COMPRESSED_RGBA_BPTC_UNORM_EXT;if(bt===RGB_BPTC_SIGNED_Format)return sn.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT;if(bt===RGB_BPTC_UNSIGNED_Format)return sn.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT}else return null;if(bt===RED_RGTC1_Format||bt===SIGNED_RED_RGTC1_Format||bt===RED_GREEN_RGTC2_Format||bt===SIGNED_RED_GREEN_RGTC2_Format)if(sn=s.get("EXT_texture_compression_rgtc"),sn!==null){if(bt===RGBA_BPTC_Format)return sn.COMPRESSED_RED_RGTC1_EXT;if(bt===SIGNED_RED_RGTC1_Format)return sn.COMPRESSED_SIGNED_RED_RGTC1_EXT;if(bt===RED_GREEN_RGTC2_Format)return sn.COMPRESSED_RED_GREEN_RGTC2_EXT;if(bt===SIGNED_RED_GREEN_RGTC2_Format)return sn.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT}else return null;return bt===UnsignedInt248Type?b?o.UNSIGNED_INT_24_8:(sn=s.get("WEBGL_depth_texture"),sn!==null?sn.UNSIGNED_INT_24_8_WEBGL:null):o[bt]!==void 0?o[bt]:null}return{convert:_e}}class ArrayCamera extends PerspectiveCamera{constructor(s=[]){super(),this.isArrayCamera=!0,this.cameras=s}}class Group extends Object3D{constructor(){super(),this.isGroup=!0,this.type="Group"}}const _moveEvent={type:"move"};class WebXRController{constructor(){this._targetRay=null,this._grip=null,this._hand=null}getHandSpace(){return this._hand===null&&(this._hand=new Group,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand}getTargetRaySpace(){return this._targetRay===null&&(this._targetRay=new Group,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new Vector3,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new Vector3),this._targetRay}getGripSpace(){return this._grip===null&&(this._grip=new Group,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new Vector3,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new Vector3),this._grip}dispatchEvent(s){return this._targetRay!==null&&this._targetRay.dispatchEvent(s),this._grip!==null&&this._grip.dispatchEvent(s),this._hand!==null&&this._hand.dispatchEvent(s),this}connect(s){if(s&&s.hand){const a=this._hand;if(a)for(const b of s.hand.values())this._getHandJoint(a,b)}return this.dispatchEvent({type:"connected",data:s}),this}disconnect(s){return this.dispatchEvent({type:"disconnected",data:s}),this._targetRay!==null&&(this._targetRay.visible=!1),this._grip!==null&&(this._grip.visible=!1),this._hand!==null&&(this._hand.visible=!1),this}update(s,a,b){let _e=null,bt=null,rn=null;const sn=this._targetRay,yn=this._grip,Pn=this._hand;if(s&&a.session.visibilityState!=="visible-blurred"){if(Pn&&s.hand){rn=!0;for(const es of s.hand.values()){const Ur=a.getJointPose(es,b),Dr=this._getHandJoint(Pn,es);Ur!==null&&(Dr.matrix.fromArray(Ur.transform.matrix),Dr.matrix.decompose(Dr.position,Dr.rotation,Dr.scale),Dr.matrixWorldNeedsUpdate=!0,Dr.jointRadius=Ur.radius),Dr.visible=Ur!==null}const zn=Pn.joints["index-finger-tip"],lr=Pn.joints["thumb-tip"],ar=zn.position.distanceTo(lr.position),cr=.02,hr=.005;Pn.inputState.pinching&&ar>cr+hr?(Pn.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:s.handedness,target:this})):!Pn.inputState.pinching&&ar<=cr-hr&&(Pn.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:s.handedness,target:this}))}else yn!==null&&s.gripSpace&&(bt=a.getPose(s.gripSpace,b),bt!==null&&(yn.matrix.fromArray(bt.transform.matrix),yn.matrix.decompose(yn.position,yn.rotation,yn.scale),yn.matrixWorldNeedsUpdate=!0,bt.linearVelocity?(yn.hasLinearVelocity=!0,yn.linearVelocity.copy(bt.linearVelocity)):yn.hasLinearVelocity=!1,bt.angularVelocity?(yn.hasAngularVelocity=!0,yn.angularVelocity.copy(bt.angularVelocity)):yn.hasAngularVelocity=!1));sn!==null&&(_e=a.getPose(s.targetRaySpace,b),_e===null&&bt!==null&&(_e=bt),_e!==null&&(sn.matrix.fromArray(_e.transform.matrix),sn.matrix.decompose(sn.position,sn.rotation,sn.scale),sn.matrixWorldNeedsUpdate=!0,_e.linearVelocity?(sn.hasLinearVelocity=!0,sn.linearVelocity.copy(_e.linearVelocity)):sn.hasLinearVelocity=!1,_e.angularVelocity?(sn.hasAngularVelocity=!0,sn.angularVelocity.copy(_e.angularVelocity)):sn.hasAngularVelocity=!1,this.dispatchEvent(_moveEvent)))}return sn!==null&&(sn.visible=_e!==null),yn!==null&&(yn.visible=bt!==null),Pn!==null&&(Pn.visible=rn!==null),this}_getHandJoint(s,a){if(s.joints[a.jointName]===void 0){const b=new Group;b.matrixAutoUpdate=!1,b.visible=!1,s.joints[a.jointName]=b,s.add(b)}return s.joints[a.jointName]}}class DepthTexture extends Texture{constructor(s,a,b,_e,bt,rn,sn,yn,Pn,zn){if(zn=zn!==void 0?zn:DepthFormat,zn!==DepthFormat&&zn!==DepthStencilFormat)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");b===void 0&&zn===DepthFormat&&(b=UnsignedIntType),b===void 0&&zn===DepthStencilFormat&&(b=UnsignedInt248Type),super(null,_e,bt,rn,sn,yn,zn,b,Pn),this.isDepthTexture=!0,this.image={width:s,height:a},this.magFilter=sn!==void 0?sn:NearestFilter,this.minFilter=yn!==void 0?yn:NearestFilter,this.flipY=!1,this.generateMipmaps=!1,this.compareFunction=null}copy(s){return super.copy(s),this.compareFunction=s.compareFunction,this}toJSON(s){const a=super.toJSON(s);return this.compareFunction!==null&&(a.compareFunction=this.compareFunction),a}}class WebXRManager extends EventDispatcher$2{constructor(s,a){super();const b=this;let _e=null,bt=1,rn=null,sn="local-floor",yn=1,Pn=null,zn=null,lr=null,ar=null,cr=null,hr=null;const es=a.getContextAttributes();let Ur=null,Dr=null;const zr=[],rs=[],as=new PerspectiveCamera;as.layers.enable(1),as.viewport=new Vector4;const os=new PerspectiveCamera;os.layers.enable(2),os.viewport=new Vector4;const ls=[as,os],zs=new ArrayCamera;zs.layers.enable(1),zs.layers.enable(2);let ho=null,ga=null;this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(El){let My=zr[El];return My===void 0&&(My=new WebXRController,zr[El]=My),My.getTargetRaySpace()},this.getControllerGrip=function(El){let My=zr[El];return My===void 0&&(My=new WebXRController,zr[El]=My),My.getGripSpace()},this.getHand=function(El){let My=zr[El];return My===void 0&&(My=new WebXRController,zr[El]=My),My.getHandSpace()};function mo(El){const My=rs.indexOf(El.inputSource);if(My===-1)return;const By=zr[My];By!==void 0&&(By.update(El.inputSource,El.frame,Pn||rn),By.dispatchEvent({type:El.type,data:El.inputSource}))}function go(){_e.removeEventListener("select",mo),_e.removeEventListener("selectstart",mo),_e.removeEventListener("selectend",mo),_e.removeEventListener("squeeze",mo),_e.removeEventListener("squeezestart",mo),_e.removeEventListener("squeezeend",mo),_e.removeEventListener("end",go),_e.removeEventListener("inputsourceschange",yl);for(let El=0;El<zr.length;El++){const My=rs[El];My!==null&&(rs[El]=null,zr[El].disconnect(My))}ho=null,ga=null,s.setRenderTarget(Ur),cr=null,ar=null,lr=null,_e=null,Dr=null,gy.stop(),b.isPresenting=!1,b.dispatchEvent({type:"sessionend"})}this.setFramebufferScaleFactor=function(El){bt=El,b.isPresenting===!0&&console.warn("THREE.WebXRManager: Cannot change framebuffer scale while presenting.")},this.setReferenceSpaceType=function(El){sn=El,b.isPresenting===!0&&console.warn("THREE.WebXRManager: Cannot change reference space type while presenting.")},this.getReferenceSpace=function(){return Pn||rn},this.setReferenceSpace=function(El){Pn=El},this.getBaseLayer=function(){return ar!==null?ar:cr},this.getBinding=function(){return lr},this.getFrame=function(){return hr},this.getSession=function(){return _e},this.setSession=async function(El){if(_e=El,_e!==null){if(Ur=s.getRenderTarget(),_e.addEventListener("select",mo),_e.addEventListener("selectstart",mo),_e.addEventListener("selectend",mo),_e.addEventListener("squeeze",mo),_e.addEventListener("squeezestart",mo),_e.addEventListener("squeezeend",mo),_e.addEventListener("end",go),_e.addEventListener("inputsourceschange",yl),es.xrCompatible!==!0&&await a.makeXRCompatible(),_e.renderState.layers===void 0||s.capabilities.isWebGL2===!1){const My={antialias:_e.renderState.layers===void 0?es.antialias:!0,alpha:!0,depth:es.depth,stencil:es.stencil,framebufferScaleFactor:bt};cr=new XRWebGLLayer(_e,a,My),_e.updateRenderState({baseLayer:cr}),Dr=new WebGLRenderTarget(cr.framebufferWidth,cr.framebufferHeight,{format:RGBAFormat,type:UnsignedByteType,colorSpace:s.outputColorSpace,stencilBuffer:es.stencil})}else{let My=null,By=null,lA=null;es.depth&&(lA=es.stencil?a.DEPTH24_STENCIL8:a.DEPTH_COMPONENT24,My=es.stencil?DepthStencilFormat:DepthFormat,By=es.stencil?UnsignedInt248Type:UnsignedIntType);const wA={colorFormat:a.RGBA8,depthFormat:lA,scaleFactor:bt};lr=new XRWebGLBinding(_e,a),ar=lr.createProjectionLayer(wA),_e.updateRenderState({layers:[ar]}),Dr=new WebGLRenderTarget(ar.textureWidth,ar.textureHeight,{format:RGBAFormat,type:UnsignedByteType,depthTexture:new DepthTexture(ar.textureWidth,ar.textureHeight,By,void 0,void 0,void 0,void 0,void 0,void 0,My),stencilBuffer:es.stencil,colorSpace:s.outputColorSpace,samples:es.antialias?4:0});const Fy=s.properties.get(Dr);Fy.__ignoreDepthValues=ar.ignoreDepthValues}Dr.isXRRenderTarget=!0,this.setFoveation(yn),Pn=null,rn=await _e.requestReferenceSpace(sn),gy.setContext(_e),gy.start(),b.isPresenting=!0,b.dispatchEvent({type:"sessionstart"})}},this.getEnvironmentBlendMode=function(){if(_e!==null)return _e.environmentBlendMode};function yl(El){for(let My=0;My<El.removed.length;My++){const By=El.removed[My],lA=rs.indexOf(By);lA>=0&&(rs[lA]=null,zr[lA].disconnect(By))}for(let My=0;My<El.added.length;My++){const By=El.added[My];let lA=rs.indexOf(By);if(lA===-1){for(let Fy=0;Fy<zr.length;Fy++)if(Fy>=rs.length){rs.push(By),lA=Fy;break}else if(rs[Fy]===null){rs[Fy]=By,lA=Fy;break}if(lA===-1)break}const wA=zr[lA];wA&&wA.connect(By)}}const Zl=new Vector3,_d=new Vector3;function Ty(El,My,By){Zl.setFromMatrixPosition(My.matrixWorld),_d.setFromMatrixPosition(By.matrixWorld);const lA=Zl.distanceTo(_d),wA=My.projectionMatrix.elements,Fy=By.projectionMatrix.elements,OA=wA[14]/(wA[10]-1),UA=wA[14]/(wA[10]+1),$A=(wA[9]+1)/wA[5],YA=(wA[9]-1)/wA[5],WA=(wA[8]-1)/wA[0],bA=(Fy[8]+1)/Fy[0],FA=OA*WA,BA=OA*bA,rE=lA/(-WA+bA),sE=rE*-WA;My.matrixWorld.decompose(El.position,El.quaternion,El.scale),El.translateX(sE),El.translateZ(rE),El.matrixWorld.compose(El.position,El.quaternion,El.scale),El.matrixWorldInverse.copy(El.matrixWorld).invert();const SC=OA+rE,HA=UA+rE,VA=FA-sE,oC=BA+(lA-sE),pC=$A*UA/HA*SC,cC=YA*UA/HA*SC;El.projectionMatrix.makePerspective(VA,oC,pC,cC,SC,HA),El.projectionMatrixInverse.copy(El.projectionMatrix).invert()}function yy(El,My){My===null?El.matrixWorld.copy(El.matrix):El.matrixWorld.multiplyMatrices(My.matrixWorld,El.matrix),El.matrixWorldInverse.copy(El.matrixWorld).invert()}this.updateCamera=function(El){if(_e===null)return;zs.near=os.near=as.near=El.near,zs.far=os.far=as.far=El.far,(ho!==zs.near||ga!==zs.far)&&(_e.updateRenderState({depthNear:zs.near,depthFar:zs.far}),ho=zs.near,ga=zs.far);const My=El.parent,By=zs.cameras;yy(zs,My);for(let lA=0;lA<By.length;lA++)yy(By[lA],My);By.length===2?Ty(zs,as,os):zs.projectionMatrix.copy(as.projectionMatrix),by(El,zs,My)};function by(El,My,By){By===null?El.matrix.copy(My.matrixWorld):(El.matrix.copy(By.matrixWorld),El.matrix.invert(),El.matrix.multiply(My.matrixWorld)),El.matrix.decompose(El.position,El.quaternion,El.scale),El.updateMatrixWorld(!0),El.projectionMatrix.copy(My.projectionMatrix),El.projectionMatrixInverse.copy(My.projectionMatrixInverse),El.isPerspectiveCamera&&(El.fov=RAD2DEG*2*Math.atan(1/El.projectionMatrix.elements[5]),El.zoom=1)}this.getCamera=function(){return zs},this.getFoveation=function(){if(!(ar===null&&cr===null))return yn},this.setFoveation=function(El){yn=El,ar!==null&&(ar.fixedFoveation=El),cr!==null&&cr.fixedFoveation!==void 0&&(cr.fixedFoveation=El)};let Al=null;function _f(El,My){if(zn=My.getViewerPose(Pn||rn),hr=My,zn!==null){const By=zn.views;cr!==null&&(s.setRenderTargetFramebuffer(Dr,cr.framebuffer),s.setRenderTarget(Dr));let lA=!1;By.length!==zs.cameras.length&&(zs.cameras.length=0,lA=!0);for(let wA=0;wA<By.length;wA++){const Fy=By[wA];let OA=null;if(cr!==null)OA=cr.getViewport(Fy);else{const $A=lr.getViewSubImage(ar,Fy);OA=$A.viewport,wA===0&&(s.setRenderTargetTextures(Dr,$A.colorTexture,ar.ignoreDepthValues?void 0:$A.depthStencilTexture),s.setRenderTarget(Dr))}let UA=ls[wA];UA===void 0&&(UA=new PerspectiveCamera,UA.layers.enable(wA),UA.viewport=new Vector4,ls[wA]=UA),UA.matrix.fromArray(Fy.transform.matrix),UA.matrix.decompose(UA.position,UA.quaternion,UA.scale),UA.projectionMatrix.fromArray(Fy.projectionMatrix),UA.projectionMatrixInverse.copy(UA.projectionMatrix).invert(),UA.viewport.set(OA.x,OA.y,OA.width,OA.height),wA===0&&(zs.matrix.copy(UA.matrix),zs.matrix.decompose(zs.position,zs.quaternion,zs.scale)),lA===!0&&zs.cameras.push(UA)}}for(let By=0;By<zr.length;By++){const lA=rs[By],wA=zr[By];lA!==null&&wA!==void 0&&wA.update(lA,My,Pn||rn)}Al&&Al(El,My),My.detectedPlanes&&b.dispatchEvent({type:"planesdetected",data:My}),hr=null}const gy=new WebGLAnimation;gy.setAnimationLoop(_f),this.setAnimationLoop=function(El){Al=El},this.dispose=function(){}}}function WebGLMaterials(o,s){function a(Ur,Dr){Ur.matrixAutoUpdate===!0&&Ur.updateMatrix(),Dr.value.copy(Ur.matrix)}function b(Ur,Dr){Dr.color.getRGB(Ur.fogColor.value,getUnlitUniformColorSpace(o)),Dr.isFog?(Ur.fogNear.value=Dr.near,Ur.fogFar.value=Dr.far):Dr.isFogExp2&&(Ur.fogDensity.value=Dr.density)}function _e(Ur,Dr,zr,rs,as){Dr.isMeshBasicMaterial||Dr.isMeshLambertMaterial?bt(Ur,Dr):Dr.isMeshToonMaterial?(bt(Ur,Dr),lr(Ur,Dr)):Dr.isMeshPhongMaterial?(bt(Ur,Dr),zn(Ur,Dr)):Dr.isMeshStandardMaterial?(bt(Ur,Dr),ar(Ur,Dr),Dr.isMeshPhysicalMaterial&&cr(Ur,Dr,as)):Dr.isMeshMatcapMaterial?(bt(Ur,Dr),hr(Ur,Dr)):Dr.isMeshDepthMaterial?bt(Ur,Dr):Dr.isMeshDistanceMaterial?(bt(Ur,Dr),es(Ur,Dr)):Dr.isMeshNormalMaterial?bt(Ur,Dr):Dr.isLineBasicMaterial?(rn(Ur,Dr),Dr.isLineDashedMaterial&&sn(Ur,Dr)):Dr.isPointsMaterial?yn(Ur,Dr,zr,rs):Dr.isSpriteMaterial?Pn(Ur,Dr):Dr.isShadowMaterial?(Ur.color.value.copy(Dr.color),Ur.opacity.value=Dr.opacity):Dr.isShaderMaterial&&(Dr.uniformsNeedUpdate=!1)}function bt(Ur,Dr){Ur.opacity.value=Dr.opacity,Dr.color&&Ur.diffuse.value.copy(Dr.color),Dr.emissive&&Ur.emissive.value.copy(Dr.emissive).multiplyScalar(Dr.emissiveIntensity),Dr.map&&(Ur.map.value=Dr.map,a(Dr.map,Ur.mapTransform)),Dr.alphaMap&&(Ur.alphaMap.value=Dr.alphaMap,a(Dr.alphaMap,Ur.alphaMapTransform)),Dr.bumpMap&&(Ur.bumpMap.value=Dr.bumpMap,a(Dr.bumpMap,Ur.bumpMapTransform),Ur.bumpScale.value=Dr.bumpScale,Dr.side===BackSide&&(Ur.bumpScale.value*=-1)),Dr.normalMap&&(Ur.normalMap.value=Dr.normalMap,a(Dr.normalMap,Ur.normalMapTransform),Ur.normalScale.value.copy(Dr.normalScale),Dr.side===BackSide&&Ur.normalScale.value.negate()),Dr.displacementMap&&(Ur.displacementMap.value=Dr.displacementMap,a(Dr.displacementMap,Ur.displacementMapTransform),Ur.displacementScale.value=Dr.displacementScale,Ur.displacementBias.value=Dr.displacementBias),Dr.emissiveMap&&(Ur.emissiveMap.value=Dr.emissiveMap,a(Dr.emissiveMap,Ur.emissiveMapTransform)),Dr.specularMap&&(Ur.specularMap.value=Dr.specularMap,a(Dr.specularMap,Ur.specularMapTransform)),Dr.alphaTest>0&&(Ur.alphaTest.value=Dr.alphaTest);const zr=s.get(Dr).envMap;if(zr&&(Ur.envMap.value=zr,Ur.flipEnvMap.value=zr.isCubeTexture&&zr.isRenderTargetTexture===!1?-1:1,Ur.reflectivity.value=Dr.reflectivity,Ur.ior.value=Dr.ior,Ur.refractionRatio.value=Dr.refractionRatio),Dr.lightMap){Ur.lightMap.value=Dr.lightMap;const rs=o._useLegacyLights===!0?Math.PI:1;Ur.lightMapIntensity.value=Dr.lightMapIntensity*rs,a(Dr.lightMap,Ur.lightMapTransform)}Dr.aoMap&&(Ur.aoMap.value=Dr.aoMap,Ur.aoMapIntensity.value=Dr.aoMapIntensity,a(Dr.aoMap,Ur.aoMapTransform))}function rn(Ur,Dr){Ur.diffuse.value.copy(Dr.color),Ur.opacity.value=Dr.opacity,Dr.map&&(Ur.map.value=Dr.map,a(Dr.map,Ur.mapTransform))}function sn(Ur,Dr){Ur.dashSize.value=Dr.dashSize,Ur.totalSize.value=Dr.dashSize+Dr.gapSize,Ur.scale.value=Dr.scale}function yn(Ur,Dr,zr,rs){Ur.diffuse.value.copy(Dr.color),Ur.opacity.value=Dr.opacity,Ur.size.value=Dr.size*zr,Ur.scale.value=rs*.5,Dr.map&&(Ur.map.value=Dr.map,a(Dr.map,Ur.uvTransform)),Dr.alphaMap&&(Ur.alphaMap.value=Dr.alphaMap,a(Dr.alphaMap,Ur.alphaMapTransform)),Dr.alphaTest>0&&(Ur.alphaTest.value=Dr.alphaTest)}function Pn(Ur,Dr){Ur.diffuse.value.copy(Dr.color),Ur.opacity.value=Dr.opacity,Ur.rotation.value=Dr.rotation,Dr.map&&(Ur.map.value=Dr.map,a(Dr.map,Ur.mapTransform)),Dr.alphaMap&&(Ur.alphaMap.value=Dr.alphaMap,a(Dr.alphaMap,Ur.alphaMapTransform)),Dr.alphaTest>0&&(Ur.alphaTest.value=Dr.alphaTest)}function zn(Ur,Dr){Ur.specular.value.copy(Dr.specular),Ur.shininess.value=Math.max(Dr.shininess,1e-4)}function lr(Ur,Dr){Dr.gradientMap&&(Ur.gradientMap.value=Dr.gradientMap)}function ar(Ur,Dr){Ur.metalness.value=Dr.metalness,Dr.metalnessMap&&(Ur.metalnessMap.value=Dr.metalnessMap,a(Dr.metalnessMap,Ur.metalnessMapTransform)),Ur.roughness.value=Dr.roughness,Dr.roughnessMap&&(Ur.roughnessMap.value=Dr.roughnessMap,a(Dr.roughnessMap,Ur.roughnessMapTransform)),s.get(Dr).envMap&&(Ur.envMapIntensity.value=Dr.envMapIntensity)}function cr(Ur,Dr,zr){Ur.ior.value=Dr.ior,Dr.sheen>0&&(Ur.sheenColor.value.copy(Dr.sheenColor).multiplyScalar(Dr.sheen),Ur.sheenRoughness.value=Dr.sheenRoughness,Dr.sheenColorMap&&(Ur.sheenColorMap.value=Dr.sheenColorMap,a(Dr.sheenColorMap,Ur.sheenColorMapTransform)),Dr.sheenRoughnessMap&&(Ur.sheenRoughnessMap.value=Dr.sheenRoughnessMap,a(Dr.sheenRoughnessMap,Ur.sheenRoughnessMapTransform))),Dr.clearcoat>0&&(Ur.clearcoat.value=Dr.clearcoat,Ur.clearcoatRoughness.value=Dr.clearcoatRoughness,Dr.clearcoatMap&&(Ur.clearcoatMap.value=Dr.clearcoatMap,a(Dr.clearcoatMap,Ur.clearcoatMapTransform)),Dr.clearcoatRoughnessMap&&(Ur.clearcoatRoughnessMap.value=Dr.clearcoatRoughnessMap,a(Dr.clearcoatRoughnessMap,Ur.clearcoatRoughnessMapTransform)),Dr.clearcoatNormalMap&&(Ur.clearcoatNormalMap.value=Dr.clearcoatNormalMap,a(Dr.clearcoatNormalMap,Ur.clearcoatNormalMapTransform),Ur.clearcoatNormalScale.value.copy(Dr.clearcoatNormalScale),Dr.side===BackSide&&Ur.clearcoatNormalScale.value.negate())),Dr.iridescence>0&&(Ur.iridescence.value=Dr.iridescence,Ur.iridescenceIOR.value=Dr.iridescenceIOR,Ur.iridescenceThicknessMinimum.value=Dr.iridescenceThicknessRange[0],Ur.iridescenceThicknessMaximum.value=Dr.iridescenceThicknessRange[1],Dr.iridescenceMap&&(Ur.iridescenceMap.value=Dr.iridescenceMap,a(Dr.iridescenceMap,Ur.iridescenceMapTransform)),Dr.iridescenceThicknessMap&&(Ur.iridescenceThicknessMap.value=Dr.iridescenceThicknessMap,a(Dr.iridescenceThicknessMap,Ur.iridescenceThicknessMapTransform))),Dr.transmission>0&&(Ur.transmission.value=Dr.transmission,Ur.transmissionSamplerMap.value=zr.texture,Ur.transmissionSamplerSize.value.set(zr.width,zr.height),Dr.transmissionMap&&(Ur.transmissionMap.value=Dr.transmissionMap,a(Dr.transmissionMap,Ur.transmissionMapTransform)),Ur.thickness.value=Dr.thickness,Dr.thicknessMap&&(Ur.thicknessMap.value=Dr.thicknessMap,a(Dr.thicknessMap,Ur.thicknessMapTransform)),Ur.attenuationDistance.value=Dr.attenuationDistance,Ur.attenuationColor.value.copy(Dr.attenuationColor)),Dr.anisotropy>0&&(Ur.anisotropyVector.value.set(Dr.anisotropy*Math.cos(Dr.anisotropyRotation),Dr.anisotropy*Math.sin(Dr.anisotropyRotation)),Dr.anisotropyMap&&(Ur.anisotropyMap.value=Dr.anisotropyMap,a(Dr.anisotropyMap,Ur.anisotropyMapTransform))),Ur.specularIntensity.value=Dr.specularIntensity,Ur.specularColor.value.copy(Dr.specularColor),Dr.specularColorMap&&(Ur.specularColorMap.value=Dr.specularColorMap,a(Dr.specularColorMap,Ur.specularColorMapTransform)),Dr.specularIntensityMap&&(Ur.specularIntensityMap.value=Dr.specularIntensityMap,a(Dr.specularIntensityMap,Ur.specularIntensityMapTransform))}function hr(Ur,Dr){Dr.matcap&&(Ur.matcap.value=Dr.matcap)}function es(Ur,Dr){const zr=s.get(Dr).light;Ur.referencePosition.value.setFromMatrixPosition(zr.matrixWorld),Ur.nearDistance.value=zr.shadow.camera.near,Ur.farDistance.value=zr.shadow.camera.far}return{refreshFogUniforms:b,refreshMaterialUniforms:_e}}function WebGLUniformsGroups(o,s,a,b){let _e={},bt={},rn=[];const sn=a.isWebGL2?o.getParameter(o.MAX_UNIFORM_BUFFER_BINDINGS):0;function yn(zr,rs){const as=rs.program;b.uniformBlockBinding(zr,as)}function Pn(zr,rs){let as=_e[zr.id];as===void 0&&(hr(zr),as=zn(zr),_e[zr.id]=as,zr.addEventListener("dispose",Ur));const os=rs.program;b.updateUBOMapping(zr,os);const ls=s.render.frame;bt[zr.id]!==ls&&(ar(zr),bt[zr.id]=ls)}function zn(zr){const rs=lr();zr.__bindingPointIndex=rs;const as=o.createBuffer(),os=zr.__size,ls=zr.usage;return o.bindBuffer(o.UNIFORM_BUFFER,as),o.bufferData(o.UNIFORM_BUFFER,os,ls),o.bindBuffer(o.UNIFORM_BUFFER,null),o.bindBufferBase(o.UNIFORM_BUFFER,rs,as),as}function lr(){for(let zr=0;zr<sn;zr++)if(rn.indexOf(zr)===-1)return rn.push(zr),zr;return console.error("THREE.WebGLRenderer: Maximum number of simultaneously usable uniforms groups reached."),0}function ar(zr){const rs=_e[zr.id],as=zr.uniforms,os=zr.__cache;o.bindBuffer(o.UNIFORM_BUFFER,rs);for(let ls=0,zs=as.length;ls<zs;ls++){const ho=as[ls];if(cr(ho,ls,os)===!0){const ga=ho.__offset,mo=Array.isArray(ho.value)?ho.value:[ho.value];let go=0;for(let yl=0;yl<mo.length;yl++){const Zl=mo[yl],_d=es(Zl);typeof Zl=="number"?(ho.__data[0]=Zl,o.bufferSubData(o.UNIFORM_BUFFER,ga+go,ho.__data)):Zl.isMatrix3?(ho.__data[0]=Zl.elements[0],ho.__data[1]=Zl.elements[1],ho.__data[2]=Zl.elements[2],ho.__data[3]=Zl.elements[0],ho.__data[4]=Zl.elements[3],ho.__data[5]=Zl.elements[4],ho.__data[6]=Zl.elements[5],ho.__data[7]=Zl.elements[0],ho.__data[8]=Zl.elements[6],ho.__data[9]=Zl.elements[7],ho.__data[10]=Zl.elements[8],ho.__data[11]=Zl.elements[0]):(Zl.toArray(ho.__data,go),go+=_d.storage/Float32Array.BYTES_PER_ELEMENT)}o.bufferSubData(o.UNIFORM_BUFFER,ga,ho.__data)}}o.bindBuffer(o.UNIFORM_BUFFER,null)}function cr(zr,rs,as){const os=zr.value;if(as[rs]===void 0){if(typeof os=="number")as[rs]=os;else{const ls=Array.isArray(os)?os:[os],zs=[];for(let ho=0;ho<ls.length;ho++)zs.push(ls[ho].clone());as[rs]=zs}return!0}else if(typeof os=="number"){if(as[rs]!==os)return as[rs]=os,!0}else{const ls=Array.isArray(as[rs])?as[rs]:[as[rs]],zs=Array.isArray(os)?os:[os];for(let ho=0;ho<ls.length;ho++){const ga=ls[ho];if(ga.equals(zs[ho])===!1)return ga.copy(zs[ho]),!0}}return!1}function hr(zr){const rs=zr.uniforms;let as=0;const os=16;let ls=0;for(let zs=0,ho=rs.length;zs<ho;zs++){const ga=rs[zs],mo={boundary:0,storage:0},go=Array.isArray(ga.value)?ga.value:[ga.value];for(let yl=0,Zl=go.length;yl<Zl;yl++){const _d=go[yl],Ty=es(_d);mo.boundary+=Ty.boundary,mo.storage+=Ty.storage}if(ga.__data=new Float32Array(mo.storage/Float32Array.BYTES_PER_ELEMENT),ga.__offset=as,zs>0){ls=as%os;const yl=os-ls;ls!==0&&yl-mo.boundary<0&&(as+=os-ls,ga.__offset=as)}as+=mo.storage}return ls=as%os,ls>0&&(as+=os-ls),zr.__size=as,zr.__cache={},this}function es(zr){const rs={boundary:0,storage:0};return typeof zr=="number"?(rs.boundary=4,rs.storage=4):zr.isVector2?(rs.boundary=8,rs.storage=8):zr.isVector3||zr.isColor?(rs.boundary=16,rs.storage=12):zr.isVector4?(rs.boundary=16,rs.storage=16):zr.isMatrix3?(rs.boundary=48,rs.storage=48):zr.isMatrix4?(rs.boundary=64,rs.storage=64):zr.isTexture?console.warn("THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group."):console.warn("THREE.WebGLRenderer: Unsupported uniform value type.",zr),rs}function Ur(zr){const rs=zr.target;rs.removeEventListener("dispose",Ur);const as=rn.indexOf(rs.__bindingPointIndex);rn.splice(as,1),o.deleteBuffer(_e[rs.id]),delete _e[rs.id],delete bt[rs.id]}function Dr(){for(const zr in _e)o.deleteBuffer(_e[zr]);rn=[],_e={},bt={}}return{bind:yn,update:Pn,dispose:Dr}}class WebGLRenderer{constructor(s={}){const{canvas:a=createCanvasElement(),context:b=null,depth:_e=!0,stencil:bt=!0,alpha:rn=!1,antialias:sn=!1,premultipliedAlpha:yn=!0,preserveDrawingBuffer:Pn=!1,powerPreference:zn="default",failIfMajorPerformanceCaveat:lr=!1}=s;this.isWebGLRenderer=!0;let ar;b!==null?ar=b.getContextAttributes().alpha:ar=rn;const cr=new Uint32Array(4),hr=new Int32Array(4);let es=null,Ur=null;const Dr=[],zr=[];this.domElement=a,this.debug={checkShaderErrors:!0,onShaderError:null},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this._outputColorSpace=SRGBColorSpace$1,this._useLegacyLights=!1,this.toneMapping=NoToneMapping,this.toneMappingExposure=1;const rs=this;let as=!1,os=0,ls=0,zs=null,ho=-1,ga=null;const mo=new Vector4,go=new Vector4;let yl=null;const Zl=new Color$1(0);let _d=0,Ty=a.width,yy=a.height,by=1,Al=null,_f=null;const gy=new Vector4(0,0,Ty,yy),El=new Vector4(0,0,Ty,yy);let My=!1;const By=new Frustum;let lA=!1,wA=!1,Fy=null;const OA=new Matrix4,UA=new Vector2,$A=new Vector3,YA={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};function WA(){return zs===null?by:1}let bA=b;function FA(wy,aA){for(let PA=0;PA<wy.length;PA++){const TA=wy[PA],NA=a.getContext(TA,aA);if(NA!==null)return NA}return null}try{const wy={alpha:!0,depth:_e,stencil:bt,antialias:sn,premultipliedAlpha:yn,preserveDrawingBuffer:Pn,powerPreference:zn,failIfMajorPerformanceCaveat:lr};if("setAttribute"in a&&a.setAttribute("data-engine",`three.js r${REVISION}`),a.addEventListener("webglcontextlost",XA,!1),a.addEventListener("webglcontextrestored",QA,!1),a.addEventListener("webglcontextcreationerror",fC,!1),bA===null){const aA=["webgl2","webgl","experimental-webgl"];if(rs.isWebGL1Renderer===!0&&aA.shift(),bA=FA(aA,wy),bA===null)throw FA(aA)?new Error("Error creating WebGL context with your selected attributes."):new Error("Error creating WebGL context.")}typeof WebGLRenderingContext<"u"&&bA instanceof WebGLRenderingContext&&console.warn("THREE.WebGLRenderer: WebGL 1 support was deprecated in r153 and will be removed in r163."),bA.getShaderPrecisionFormat===void 0&&(bA.getShaderPrecisionFormat=function(){return{rangeMin:1,rangeMax:1,precision:1}})}catch(wy){throw console.error("THREE.WebGLRenderer: "+wy.message),wy}let BA,rE,sE,SC,HA,VA,oC,pC,cC,qy,Iy,kA,nE,A_,eC,PC,nC,iE,KC,bI,lC,yI,LC,ZC;function vI(){BA=new WebGLExtensions(bA),rE=new WebGLCapabilities(bA,BA,s),BA.init(rE),yI=new WebGLUtils(bA,BA,rE),sE=new WebGLState(bA,BA,rE),SC=new WebGLInfo(bA),HA=new WebGLProperties,VA=new WebGLTextures(bA,BA,sE,HA,rE,yI,SC),oC=new WebGLCubeMaps(rs),pC=new WebGLCubeUVMaps(rs),cC=new WebGLAttributes(bA,rE),LC=new WebGLBindingStates(bA,BA,cC,rE),qy=new WebGLGeometries(bA,cC,SC,LC),Iy=new WebGLObjects(bA,qy,cC,SC),KC=new WebGLMorphtargets(bA,rE,VA),PC=new WebGLClipping(HA),kA=new WebGLPrograms(rs,oC,pC,BA,rE,LC,PC),nE=new WebGLMaterials(rs,HA),A_=new WebGLRenderLists,eC=new WebGLRenderStates(BA,rE),iE=new WebGLBackground(rs,oC,pC,sE,Iy,ar,yn),nC=new WebGLShadowMap(rs,Iy,rE),ZC=new WebGLUniformsGroups(bA,SC,rE,sE),bI=new WebGLBufferRenderer(bA,BA,SC,rE),lC=new WebGLIndexedBufferRenderer(bA,BA,SC,rE),SC.programs=kA.programs,rs.capabilities=rE,rs.extensions=BA,rs.properties=HA,rs.renderLists=A_,rs.shadowMap=nC,rs.state=sE,rs.info=SC}vI();const IA=new WebXRManager(rs,bA);this.xr=IA,this.getContext=function(){return bA},this.getContextAttributes=function(){return bA.getContextAttributes()},this.forceContextLoss=function(){const wy=BA.get("WEBGL_lose_context");wy&&wy.loseContext()},this.forceContextRestore=function(){const wy=BA.get("WEBGL_lose_context");wy&&wy.restoreContext()},this.getPixelRatio=function(){return by},this.setPixelRatio=function(wy){wy!==void 0&&(by=wy,this.setSize(Ty,yy,!1))},this.getSize=function(wy){return wy.set(Ty,yy)},this.setSize=function(wy,aA,PA=!0){if(IA.isPresenting){console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting.");return}Ty=wy,yy=aA,a.width=Math.floor(wy*by),a.height=Math.floor(aA*by),PA===!0&&(a.style.width=wy+"px",a.style.height=aA+"px"),this.setViewport(0,0,wy,aA)},this.getDrawingBufferSize=function(wy){return wy.set(Ty*by,yy*by).floor()},this.setDrawingBufferSize=function(wy,aA,PA){Ty=wy,yy=aA,by=PA,a.width=Math.floor(wy*PA),a.height=Math.floor(aA*PA),this.setViewport(0,0,wy,aA)},this.getCurrentViewport=function(wy){return wy.copy(mo)},this.getViewport=function(wy){return wy.copy(gy)},this.setViewport=function(wy,aA,PA,TA){wy.isVector4?gy.set(wy.x,wy.y,wy.z,wy.w):gy.set(wy,aA,PA,TA),sE.viewport(mo.copy(gy).multiplyScalar(by).floor())},this.getScissor=function(wy){return wy.copy(El)},this.setScissor=function(wy,aA,PA,TA){wy.isVector4?El.set(wy.x,wy.y,wy.z,wy.w):El.set(wy,aA,PA,TA),sE.scissor(go.copy(El).multiplyScalar(by).floor())},this.getScissorTest=function(){return My},this.setScissorTest=function(wy){sE.setScissorTest(My=wy)},this.setOpaqueSort=function(wy){Al=wy},this.setTransparentSort=function(wy){_f=wy},this.getClearColor=function(wy){return wy.copy(iE.getClearColor())},this.setClearColor=function(){iE.setClearColor.apply(iE,arguments)},this.getClearAlpha=function(){return iE.getClearAlpha()},this.setClearAlpha=function(){iE.setClearAlpha.apply(iE,arguments)},this.clear=function(wy=!0,aA=!0,PA=!0){let TA=0;if(wy){let NA=!1;if(zs!==null){const qA=zs.texture.format;NA=qA===RGBAIntegerFormat||qA===RGIntegerFormat||qA===RedIntegerFormat}if(NA){const qA=zs.texture.type,oE=qA===UnsignedByteType||qA===UnsignedIntType||qA===UnsignedShortType||qA===UnsignedInt248Type||qA===UnsignedShort4444Type||qA===UnsignedShort5551Type,iC=iE.getClearColor(),aC=iE.getClearAlpha(),hC=iC.r,sC=iC.g,NC=iC.b;oE?(cr[0]=hC,cr[1]=sC,cr[2]=NC,cr[3]=aC,bA.clearBufferuiv(bA.COLOR,0,cr)):(hr[0]=hC,hr[1]=sC,hr[2]=NC,hr[3]=aC,bA.clearBufferiv(bA.COLOR,0,hr))}else TA|=bA.COLOR_BUFFER_BIT}aA&&(TA|=bA.DEPTH_BUFFER_BIT),PA&&(TA|=bA.STENCIL_BUFFER_BIT),bA.clear(TA)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.dispose=function(){a.removeEventListener("webglcontextlost",XA,!1),a.removeEventListener("webglcontextrestored",QA,!1),a.removeEventListener("webglcontextcreationerror",fC,!1),A_.dispose(),eC.dispose(),HA.dispose(),oC.dispose(),pC.dispose(),Iy.dispose(),LC.dispose(),ZC.dispose(),kA.dispose(),IA.dispose(),IA.removeEventListener("sessionstart",GI),IA.removeEventListener("sessionend",$R),Fy&&(Fy.dispose(),Fy=null),ZI.stop()};function XA(wy){wy.preventDefault(),console.log("THREE.WebGLRenderer: Context Lost."),as=!0}function QA(){console.log("THREE.WebGLRenderer: Context Restored."),as=!1;const wy=SC.autoReset,aA=nC.enabled,PA=nC.autoUpdate,TA=nC.needsUpdate,NA=nC.type;vI(),SC.autoReset=wy,nC.enabled=aA,nC.autoUpdate=PA,nC.needsUpdate=TA,nC.type=NA}function fC(wy){console.error("THREE.WebGLRenderer: A WebGL context could not be created. Reason: ",wy.statusMessage)}function uC(wy){const aA=wy.target;aA.removeEventListener("dispose",uC),CC(aA)}function CC(wy){CI(wy),HA.remove(wy)}function CI(wy){const aA=HA.get(wy).programs;aA!==void 0&&(aA.forEach(function(PA){kA.releaseProgram(PA)}),wy.isShaderMaterial&&kA.releaseShaderCache(wy))}this.renderBufferDirect=function(wy,aA,PA,TA,NA,qA){aA===null&&(aA=YA);const oE=NA.isMesh&&NA.matrixWorld.determinant()<0,iC=HR(wy,aA,PA,TA,NA);sE.setMaterial(TA,oE);let aC=PA.index,hC=1;if(TA.wireframe===!0){if(aC=qy.getWireframeAttribute(PA),aC===void 0)return;hC=2}const sC=PA.drawRange,NC=PA.attributes.position;let UC=sC.start*hC,FC=(sC.start+sC.count)*hC;qA!==null&&(UC=Math.max(UC,qA.start*hC),FC=Math.min(FC,(qA.start+qA.count)*hC)),aC!==null?(UC=Math.max(UC,0),FC=Math.min(FC,aC.count)):NC!=null&&(UC=Math.max(UC,0),FC=Math.min(FC,NC.count));const LI=FC-UC;if(LI<0||LI===1/0)return;LC.setup(NA,TA,iC,PA,aC);let BI,II=bI;if(aC!==null&&(BI=cC.get(aC),II=lC,II.setIndex(BI)),NA.isMesh)TA.wireframe===!0?(sE.setLineWidth(TA.wireframeLinewidth*WA()),II.setMode(bA.LINES)):II.setMode(bA.TRIANGLES);else if(NA.isLine){let BC=TA.linewidth;BC===void 0&&(BC=1),sE.setLineWidth(BC*WA()),NA.isLineSegments?II.setMode(bA.LINES):NA.isLineLoop?II.setMode(bA.LINE_LOOP):II.setMode(bA.LINE_STRIP)}else NA.isPoints?II.setMode(bA.POINTS):NA.isSprite&&II.setMode(bA.TRIANGLES);if(NA.isInstancedMesh)II.renderInstances(UC,LI,NA.count);else if(PA.isInstancedBufferGeometry){const BC=PA._maxInstanceCount!==void 0?PA._maxInstanceCount:1/0,VI=Math.min(PA.instanceCount,BC);II.renderInstances(UC,LI,VI)}else II.render(UC,LI)},this.compile=function(wy,aA){function PA(TA,NA,qA){TA.transparent===!0&&TA.side===DoubleSide&&TA.forceSinglePass===!1?(TA.side=BackSide,TA.needsUpdate=!0,TI(TA,NA,qA),TA.side=FrontSide,TA.needsUpdate=!0,TI(TA,NA,qA),TA.side=DoubleSide):TI(TA,NA,qA)}Ur=eC.get(wy),Ur.init(),zr.push(Ur),wy.traverseVisible(function(TA){TA.isLight&&TA.layers.test(aA.layers)&&(Ur.pushLight(TA),TA.castShadow&&Ur.pushShadow(TA))}),Ur.setupLights(rs._useLegacyLights),wy.traverse(function(TA){const NA=TA.material;if(NA)if(Array.isArray(NA))for(let qA=0;qA<NA.length;qA++){const oE=NA[qA];PA(oE,wy,TA)}else PA(NA,wy,TA)}),zr.pop(),Ur=null};let DI=null;function FR(wy){DI&&DI(wy)}function GI(){ZI.stop()}function $R(){ZI.start()}const ZI=new WebGLAnimation;ZI.setAnimationLoop(FR),typeof self<"u"&&ZI.setContext(self),this.setAnimationLoop=function(wy){DI=wy,IA.setAnimationLoop(wy),wy===null?ZI.stop():ZI.start()},IA.addEventListener("sessionstart",GI),IA.addEventListener("sessionend",$R),this.render=function(wy,aA){if(aA!==void 0&&aA.isCamera!==!0){console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");return}if(as===!0)return;wy.matrixWorldAutoUpdate===!0&&wy.updateMatrixWorld(),aA.parent===null&&aA.matrixWorldAutoUpdate===!0&&aA.updateMatrixWorld(),IA.enabled===!0&&IA.isPresenting===!0&&(IA.cameraAutoUpdate===!0&&IA.updateCamera(aA),aA=IA.getCamera()),wy.isScene===!0&&wy.onBeforeRender(rs,wy,aA,zs),Ur=eC.get(wy,zr.length),Ur.init(),zr.push(Ur),OA.multiplyMatrices(aA.projectionMatrix,aA.matrixWorldInverse),By.setFromProjectionMatrix(OA),wA=this.localClippingEnabled,lA=PC.init(this.clippingPlanes,wA),es=A_.get(wy,Dr.length),es.init(),Dr.push(es),RP(wy,aA,0,rs.sortObjects),es.finish(),rs.sortObjects===!0&&es.sort(Al,_f),this.info.render.frame++,lA===!0&&PC.beginShadows();const PA=Ur.state.shadowsArray;if(nC.render(PA,wy,aA),lA===!0&&PC.endShadows(),this.info.autoReset===!0&&this.info.reset(),iE.render(es,wy),Ur.setupLights(rs._useLegacyLights),aA.isArrayCamera){const TA=aA.cameras;for(let NA=0,qA=TA.length;NA<qA;NA++){const oE=TA[NA];EP(es,wy,oE,oE.viewport)}}else EP(es,wy,aA);zs!==null&&(VA.updateMultisampleRenderTarget(zs),VA.updateRenderTargetMipmap(zs)),wy.isScene===!0&&wy.onAfterRender(rs,wy,aA),LC.resetDefaultState(),ho=-1,ga=null,zr.pop(),zr.length>0?Ur=zr[zr.length-1]:Ur=null,Dr.pop(),Dr.length>0?es=Dr[Dr.length-1]:es=null};function RP(wy,aA,PA,TA){if(wy.visible===!1)return;if(wy.layers.test(aA.layers)){if(wy.isGroup)PA=wy.renderOrder;else if(wy.isLOD)wy.autoUpdate===!0&&wy.update(aA);else if(wy.isLight)Ur.pushLight(wy),wy.castShadow&&Ur.pushShadow(wy);else if(wy.isSprite){if(!wy.frustumCulled||By.intersectsSprite(wy)){TA&&$A.setFromMatrixPosition(wy.matrixWorld).applyMatrix4(OA);const oE=Iy.update(wy),iC=wy.material;iC.visible&&es.push(wy,oE,iC,PA,$A.z,null)}}else if((wy.isMesh||wy.isLine||wy.isPoints)&&(!wy.frustumCulled||By.intersectsObject(wy))){const oE=Iy.update(wy),iC=wy.material;if(TA&&(wy.boundingSphere!==void 0?(wy.boundingSphere===null&&wy.computeBoundingSphere(),$A.copy(wy.boundingSphere.center)):(oE.boundingSphere===null&&oE.computeBoundingSphere(),$A.copy(oE.boundingSphere.center)),$A.applyMatrix4(wy.matrixWorld).applyMatrix4(OA)),Array.isArray(iC)){const aC=oE.groups;for(let hC=0,sC=aC.length;hC<sC;hC++){const NC=aC[hC],UC=iC[NC.materialIndex];UC&&UC.visible&&es.push(wy,oE,UC,PA,$A.z,NC)}}else iC.visible&&es.push(wy,oE,iC,PA,$A.z,null)}}const qA=wy.children;for(let oE=0,iC=qA.length;oE<iC;oE++)RP(qA[oE],aA,PA,TA)}function EP(wy,aA,PA,TA){const NA=wy.opaque,qA=wy.transmissive,oE=wy.transparent;Ur.setupLightsView(PA),lA===!0&&PC.setGlobalState(rs.clippingPlanes,PA),qA.length>0&&gP(NA,qA,aA,PA),TA&&sE.viewport(mo.copy(TA)),NA.length>0&&rP(NA,aA,PA),qA.length>0&&rP(qA,aA,PA),oE.length>0&&rP(oE,aA,PA),sE.buffers.depth.setTest(!0),sE.buffers.depth.setMask(!0),sE.buffers.color.setMask(!0),sE.setPolygonOffset(!1)}function gP(wy,aA,PA,TA){const NA=rE.isWebGL2;Fy===null&&(Fy=new WebGLRenderTarget(1,1,{generateMipmaps:!0,type:BA.has("EXT_color_buffer_half_float")?HalfFloatType:UnsignedByteType,minFilter:LinearMipmapLinearFilter,samples:NA?4:0})),rs.getDrawingBufferSize(UA),NA?Fy.setSize(UA.x,UA.y):Fy.setSize(floorPowerOfTwo(UA.x),floorPowerOfTwo(UA.y));const qA=rs.getRenderTarget();rs.setRenderTarget(Fy),rs.getClearColor(Zl),_d=rs.getClearAlpha(),_d<1&&rs.setClearColor(16777215,.5),rs.clear();const oE=rs.toneMapping;rs.toneMapping=NoToneMapping,rP(wy,PA,TA),VA.updateMultisampleRenderTarget(Fy),VA.updateRenderTargetMipmap(Fy);let iC=!1;for(let aC=0,hC=aA.length;aC<hC;aC++){const sC=aA[aC],NC=sC.object,UC=sC.geometry,FC=sC.material,LI=sC.group;if(FC.side===DoubleSide&&NC.layers.test(TA.layers)){const BI=FC.side;FC.side=BackSide,FC.needsUpdate=!0,cP(NC,PA,TA,UC,FC,LI),FC.side=BI,FC.needsUpdate=!0,iC=!0}}iC===!0&&(VA.updateMultisampleRenderTarget(Fy),VA.updateRenderTargetMipmap(Fy)),rs.setRenderTarget(qA),rs.setClearColor(Zl,_d),rs.toneMapping=oE}function rP(wy,aA,PA){const TA=aA.isScene===!0?aA.overrideMaterial:null;for(let NA=0,qA=wy.length;NA<qA;NA++){const oE=wy[NA],iC=oE.object,aC=oE.geometry,hC=TA===null?oE.material:TA,sC=oE.group;iC.layers.test(PA.layers)&&cP(iC,aA,PA,aC,hC,sC)}}function cP(wy,aA,PA,TA,NA,qA){wy.onBeforeRender(rs,aA,PA,TA,NA,qA),wy.modelViewMatrix.multiplyMatrices(PA.matrixWorldInverse,wy.matrixWorld),wy.normalMatrix.getNormalMatrix(wy.modelViewMatrix),NA.onBeforeRender(rs,aA,PA,TA,wy,qA),NA.transparent===!0&&NA.side===DoubleSide&&NA.forceSinglePass===!1?(NA.side=BackSide,NA.needsUpdate=!0,rs.renderBufferDirect(PA,aA,TA,NA,wy,qA),NA.side=FrontSide,NA.needsUpdate=!0,rs.renderBufferDirect(PA,aA,TA,NA,wy,qA),NA.side=DoubleSide):rs.renderBufferDirect(PA,aA,TA,NA,wy,qA),wy.onAfterRender(rs,aA,PA,TA,NA,qA)}function TI(wy,aA,PA){aA.isScene!==!0&&(aA=YA);const TA=HA.get(wy),NA=Ur.state.lights,qA=Ur.state.shadowsArray,oE=NA.state.version,iC=kA.getParameters(wy,NA.state,qA,aA,PA),aC=kA.getProgramCacheKey(iC);let hC=TA.programs;TA.environment=wy.isMeshStandardMaterial?aA.environment:null,TA.fog=aA.fog,TA.envMap=(wy.isMeshStandardMaterial?pC:oC).get(wy.envMap||TA.environment),hC===void 0&&(wy.addEventListener("dispose",uC),hC=new Map,TA.programs=hC);let sC=hC.get(aC);if(sC!==void 0){if(TA.currentProgram===sC&&TA.lightsStateVersion===oE)return kI(wy,iC),sC}else iC.uniforms=kA.getUniforms(wy),wy.onBuild(PA,iC,rs),wy.onBeforeCompile(iC,rs),sC=kA.acquireProgram(iC,aC),hC.set(aC,sC),TA.uniforms=iC.uniforms;const NC=TA.uniforms;(!wy.isShaderMaterial&&!wy.isRawShaderMaterial||wy.clipping===!0)&&(NC.clippingPlanes=PC.uniform),kI(wy,iC),TA.needsLights=CA(wy),TA.lightsStateVersion=oE,TA.needsLights&&(NC.ambientLightColor.value=NA.state.ambient,NC.lightProbe.value=NA.state.probe,NC.directionalLights.value=NA.state.directional,NC.directionalLightShadows.value=NA.state.directionalShadow,NC.spotLights.value=NA.state.spot,NC.spotLightShadows.value=NA.state.spotShadow,NC.rectAreaLights.value=NA.state.rectArea,NC.ltc_1.value=NA.state.rectAreaLTC1,NC.ltc_2.value=NA.state.rectAreaLTC2,NC.pointLights.value=NA.state.point,NC.pointLightShadows.value=NA.state.pointShadow,NC.hemisphereLights.value=NA.state.hemi,NC.directionalShadowMap.value=NA.state.directionalShadowMap,NC.directionalShadowMatrix.value=NA.state.directionalShadowMatrix,NC.spotShadowMap.value=NA.state.spotShadowMap,NC.spotLightMatrix.value=NA.state.spotLightMatrix,NC.spotLightMap.value=NA.state.spotLightMap,NC.pointShadowMap.value=NA.state.pointShadowMap,NC.pointShadowMatrix.value=NA.state.pointShadowMatrix);const UC=sC.getUniforms(),FC=WebGLUniforms.seqWithValue(UC.seq,NC);return TA.currentProgram=sC,TA.uniformsList=FC,sC}function kI(wy,aA){const PA=HA.get(wy);PA.outputColorSpace=aA.outputColorSpace,PA.instancing=aA.instancing,PA.instancingColor=aA.instancingColor,PA.skinning=aA.skinning,PA.morphTargets=aA.morphTargets,PA.morphNormals=aA.morphNormals,PA.morphColors=aA.morphColors,PA.morphTargetsCount=aA.morphTargetsCount,PA.numClippingPlanes=aA.numClippingPlanes,PA.numIntersection=aA.numClipIntersection,PA.vertexAlphas=aA.vertexAlphas,PA.vertexTangents=aA.vertexTangents,PA.toneMapping=aA.toneMapping}function HR(wy,aA,PA,TA,NA){aA.isScene!==!0&&(aA=YA),VA.resetTextureUnits();const qA=aA.fog,oE=TA.isMeshStandardMaterial?aA.environment:null,iC=zs===null?rs.outputColorSpace:zs.isXRRenderTarget===!0?zs.texture.colorSpace:LinearSRGBColorSpace$1,aC=(TA.isMeshStandardMaterial?pC:oC).get(TA.envMap||oE),hC=TA.vertexColors===!0&&!!PA.attributes.color&&PA.attributes.color.itemSize===4,sC=!!PA.attributes.tangent&&(!!TA.normalMap||TA.anisotropy>0),NC=!!PA.morphAttributes.position,UC=!!PA.morphAttributes.normal,FC=!!PA.morphAttributes.color;let LI=NoToneMapping;TA.toneMapped&&(zs===null||zs.isXRRenderTarget===!0)&&(LI=rs.toneMapping);const BI=PA.morphAttributes.position||PA.morphAttributes.normal||PA.morphAttributes.color,II=BI!==void 0?BI.length:0,BC=HA.get(TA),VI=Ur.state.lights;if(lA===!0&&(wA===!0||wy!==ga)){const UI=wy===ga&&TA.id===ho;PC.setState(TA,wy,UI)}let OI=!1;TA.version===BC.__version?(BC.needsLights&&BC.lightsStateVersion!==VI.state.version||BC.outputColorSpace!==iC||NA.isInstancedMesh&&BC.instancing===!1||!NA.isInstancedMesh&&BC.instancing===!0||NA.isSkinnedMesh&&BC.skinning===!1||!NA.isSkinnedMesh&&BC.skinning===!0||NA.isInstancedMesh&&BC.instancingColor===!0&&NA.instanceColor===null||NA.isInstancedMesh&&BC.instancingColor===!1&&NA.instanceColor!==null||BC.envMap!==aC||TA.fog===!0&&BC.fog!==qA||BC.numClippingPlanes!==void 0&&(BC.numClippingPlanes!==PC.numPlanes||BC.numIntersection!==PC.numIntersection)||BC.vertexAlphas!==hC||BC.vertexTangents!==sC||BC.morphTargets!==NC||BC.morphNormals!==UC||BC.morphColors!==FC||BC.toneMapping!==LI||rE.isWebGL2===!0&&BC.morphTargetsCount!==II)&&(OI=!0):(OI=!0,BC.__version=TA.version);let jI=BC.currentProgram;OI===!0&&(jI=TI(TA,aA,NA));let OR=!1,zI=!1,RR=!1;const WI=jI.getUniforms(),JI=BC.uniforms;if(sE.useProgram(jI.program)&&(OR=!0,zI=!0,RR=!0),TA.id!==ho&&(ho=TA.id,zI=!0),OR||ga!==wy){WI.setValue(bA,"projectionMatrix",wy.projectionMatrix),WI.setValue(bA,"viewMatrix",wy.matrixWorldInverse);const UI=WI.map.cameraPosition;UI!==void 0&&UI.setValue(bA,$A.setFromMatrixPosition(wy.matrixWorld)),rE.logarithmicDepthBuffer&&WI.setValue(bA,"logDepthBufFC",2/(Math.log(wy.far+1)/Math.LN2)),(TA.isMeshPhongMaterial||TA.isMeshToonMaterial||TA.isMeshLambertMaterial||TA.isMeshBasicMaterial||TA.isMeshStandardMaterial||TA.isShaderMaterial)&&WI.setValue(bA,"isOrthographic",wy.isOrthographicCamera===!0),ga!==wy&&(ga=wy,zI=!0,RR=!0)}if(NA.isSkinnedMesh){WI.setOptional(bA,NA,"bindMatrix"),WI.setOptional(bA,NA,"bindMatrixInverse");const UI=NA.skeleton;UI&&(rE.floatVertexTextures?(UI.boneTexture===null&&UI.computeBoneTexture(),WI.setValue(bA,"boneTexture",UI.boneTexture,VA),WI.setValue(bA,"boneTextureSize",UI.boneTextureSize)):console.warn("THREE.WebGLRenderer: SkinnedMesh can only be used with WebGL 2. With WebGL 1 OES_texture_float and vertex textures support is required."))}const zR=PA.morphAttributes;if((zR.position!==void 0||zR.normal!==void 0||zR.color!==void 0&&rE.isWebGL2===!0)&&KC.update(NA,PA,jI),(zI||BC.receiveShadow!==NA.receiveShadow)&&(BC.receiveShadow=NA.receiveShadow,WI.setValue(bA,"receiveShadow",NA.receiveShadow)),TA.isMeshGouraudMaterial&&TA.envMap!==null&&(JI.envMap.value=aC,JI.flipEnvMap.value=aC.isCubeTexture&&aC.isRenderTargetTexture===!1?-1:1),zI&&(WI.setValue(bA,"toneMappingExposure",rs.toneMappingExposure),BC.needsLights&&qR(JI,RR),qA&&TA.fog===!0&&nE.refreshFogUniforms(JI,qA),nE.refreshMaterialUniforms(JI,TA,by,yy,Fy),WebGLUniforms.upload(bA,BC.uniformsList,JI,VA)),TA.isShaderMaterial&&TA.uniformsNeedUpdate===!0&&(WebGLUniforms.upload(bA,BC.uniformsList,JI,VA),TA.uniformsNeedUpdate=!1),TA.isSpriteMaterial&&WI.setValue(bA,"center",NA.center),WI.setValue(bA,"modelViewMatrix",NA.modelViewMatrix),WI.setValue(bA,"normalMatrix",NA.normalMatrix),WI.setValue(bA,"modelMatrix",NA.matrixWorld),TA.isShaderMaterial||TA.isRawShaderMaterial){const UI=TA.uniformsGroups;for(let GR=0,NR=UI.length;GR<NR;GR++)if(rE.isWebGL2){const KI=UI[GR];ZC.update(KI,jI),ZC.bind(KI,jI)}else console.warn("THREE.WebGLRenderer: Uniform Buffer Objects can only be used with WebGL 2.")}return jI}function qR(wy,aA){wy.ambientLightColor.needsUpdate=aA,wy.lightProbe.needsUpdate=aA,wy.directionalLights.needsUpdate=aA,wy.directionalLightShadows.needsUpdate=aA,wy.pointLights.needsUpdate=aA,wy.pointLightShadows.needsUpdate=aA,wy.spotLights.needsUpdate=aA,wy.spotLightShadows.needsUpdate=aA,wy.rectAreaLights.needsUpdate=aA,wy.hemisphereLights.needsUpdate=aA}function CA(wy){return wy.isMeshLambertMaterial||wy.isMeshToonMaterial||wy.isMeshPhongMaterial||wy.isMeshStandardMaterial||wy.isShadowMaterial||wy.isShaderMaterial&&wy.lights===!0}this.getActiveCubeFace=function(){return os},this.getActiveMipmapLevel=function(){return ls},this.getRenderTarget=function(){return zs},this.setRenderTargetTextures=function(wy,aA,PA){HA.get(wy.texture).__webglTexture=aA,HA.get(wy.depthTexture).__webglTexture=PA;const TA=HA.get(wy);TA.__hasExternalTextures=!0,TA.__hasExternalTextures&&(TA.__autoAllocateDepthBuffer=PA===void 0,TA.__autoAllocateDepthBuffer||BA.has("WEBGL_multisampled_render_to_texture")===!0&&(console.warn("THREE.WebGLRenderer: Render-to-texture extension was disabled because an external texture was provided"),TA.__useRenderToTexture=!1))},this.setRenderTargetFramebuffer=function(wy,aA){const PA=HA.get(wy);PA.__webglFramebuffer=aA,PA.__useDefaultFramebuffer=aA===void 0},this.setRenderTarget=function(wy,aA=0,PA=0){zs=wy,os=aA,ls=PA;let TA=!0,NA=null,qA=!1,oE=!1;if(wy){const aC=HA.get(wy);aC.__useDefaultFramebuffer!==void 0?(sE.bindFramebuffer(bA.FRAMEBUFFER,null),TA=!1):aC.__webglFramebuffer===void 0?VA.setupRenderTarget(wy):aC.__hasExternalTextures&&VA.rebindTextures(wy,HA.get(wy.texture).__webglTexture,HA.get(wy.depthTexture).__webglTexture);const hC=wy.texture;(hC.isData3DTexture||hC.isDataArrayTexture||hC.isCompressedArrayTexture)&&(oE=!0);const sC=HA.get(wy).__webglFramebuffer;wy.isWebGLCubeRenderTarget?(Array.isArray(sC[aA])?NA=sC[aA][PA]:NA=sC[aA],qA=!0):rE.isWebGL2&&wy.samples>0&&VA.useMultisampledRTT(wy)===!1?NA=HA.get(wy).__webglMultisampledFramebuffer:Array.isArray(sC)?NA=sC[PA]:NA=sC,mo.copy(wy.viewport),go.copy(wy.scissor),yl=wy.scissorTest}else mo.copy(gy).multiplyScalar(by).floor(),go.copy(El).multiplyScalar(by).floor(),yl=My;if(sE.bindFramebuffer(bA.FRAMEBUFFER,NA)&&rE.drawBuffers&&TA&&sE.drawBuffers(wy,NA),sE.viewport(mo),sE.scissor(go),sE.setScissorTest(yl),qA){const aC=HA.get(wy.texture);bA.framebufferTexture2D(bA.FRAMEBUFFER,bA.COLOR_ATTACHMENT0,bA.TEXTURE_CUBE_MAP_POSITIVE_X+aA,aC.__webglTexture,PA)}else if(oE){const aC=HA.get(wy.texture),hC=aA||0;bA.framebufferTextureLayer(bA.FRAMEBUFFER,bA.COLOR_ATTACHMENT0,aC.__webglTexture,PA||0,hC)}ho=-1},this.readRenderTargetPixels=function(wy,aA,PA,TA,NA,qA,oE){if(!(wy&&wy.isWebGLRenderTarget)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");return}let iC=HA.get(wy).__webglFramebuffer;if(wy.isWebGLCubeRenderTarget&&oE!==void 0&&(iC=iC[oE]),iC){sE.bindFramebuffer(bA.FRAMEBUFFER,iC);try{const aC=wy.texture,hC=aC.format,sC=aC.type;if(hC!==RGBAFormat&&yI.convert(hC)!==bA.getParameter(bA.IMPLEMENTATION_COLOR_READ_FORMAT)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");return}const NC=sC===HalfFloatType&&(BA.has("EXT_color_buffer_half_float")||rE.isWebGL2&&BA.has("EXT_color_buffer_float"));if(sC!==UnsignedByteType&&yI.convert(sC)!==bA.getParameter(bA.IMPLEMENTATION_COLOR_READ_TYPE)&&!(sC===FloatType&&(rE.isWebGL2||BA.has("OES_texture_float")||BA.has("WEBGL_color_buffer_float")))&&!NC){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");return}aA>=0&&aA<=wy.width-TA&&PA>=0&&PA<=wy.height-NA&&bA.readPixels(aA,PA,TA,NA,yI.convert(hC),yI.convert(sC),qA)}finally{const aC=zs!==null?HA.get(zs).__webglFramebuffer:null;sE.bindFramebuffer(bA.FRAMEBUFFER,aC)}}},this.copyFramebufferToTexture=function(wy,aA,PA=0){const TA=Math.pow(2,-PA),NA=Math.floor(aA.image.width*TA),qA=Math.floor(aA.image.height*TA);VA.setTexture2D(aA,0),bA.copyTexSubImage2D(bA.TEXTURE_2D,PA,0,0,wy.x,wy.y,NA,qA),sE.unbindTexture()},this.copyTextureToTexture=function(wy,aA,PA,TA=0){const NA=aA.image.width,qA=aA.image.height,oE=yI.convert(PA.format),iC=yI.convert(PA.type);VA.setTexture2D(PA,0),bA.pixelStorei(bA.UNPACK_FLIP_Y_WEBGL,PA.flipY),bA.pixelStorei(bA.UNPACK_PREMULTIPLY_ALPHA_WEBGL,PA.premultiplyAlpha),bA.pixelStorei(bA.UNPACK_ALIGNMENT,PA.unpackAlignment),aA.isDataTexture?bA.texSubImage2D(bA.TEXTURE_2D,TA,wy.x,wy.y,NA,qA,oE,iC,aA.image.data):aA.isCompressedTexture?bA.compressedTexSubImage2D(bA.TEXTURE_2D,TA,wy.x,wy.y,aA.mipmaps[0].width,aA.mipmaps[0].height,oE,aA.mipmaps[0].data):bA.texSubImage2D(bA.TEXTURE_2D,TA,wy.x,wy.y,oE,iC,aA.image),TA===0&&PA.generateMipmaps&&bA.generateMipmap(bA.TEXTURE_2D),sE.unbindTexture()},this.copyTextureToTexture3D=function(wy,aA,PA,TA,NA=0){if(rs.isWebGL1Renderer){console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.");return}const qA=wy.max.x-wy.min.x+1,oE=wy.max.y-wy.min.y+1,iC=wy.max.z-wy.min.z+1,aC=yI.convert(TA.format),hC=yI.convert(TA.type);let sC;if(TA.isData3DTexture)VA.setTexture3D(TA,0),sC=bA.TEXTURE_3D;else if(TA.isDataArrayTexture)VA.setTexture2DArray(TA,0),sC=bA.TEXTURE_2D_ARRAY;else{console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.");return}bA.pixelStorei(bA.UNPACK_FLIP_Y_WEBGL,TA.flipY),bA.pixelStorei(bA.UNPACK_PREMULTIPLY_ALPHA_WEBGL,TA.premultiplyAlpha),bA.pixelStorei(bA.UNPACK_ALIGNMENT,TA.unpackAlignment);const NC=bA.getParameter(bA.UNPACK_ROW_LENGTH),UC=bA.getParameter(bA.UNPACK_IMAGE_HEIGHT),FC=bA.getParameter(bA.UNPACK_SKIP_PIXELS),LI=bA.getParameter(bA.UNPACK_SKIP_ROWS),BI=bA.getParameter(bA.UNPACK_SKIP_IMAGES),II=PA.isCompressedTexture?PA.mipmaps[0]:PA.image;bA.pixelStorei(bA.UNPACK_ROW_LENGTH,II.width),bA.pixelStorei(bA.UNPACK_IMAGE_HEIGHT,II.height),bA.pixelStorei(bA.UNPACK_SKIP_PIXELS,wy.min.x),bA.pixelStorei(bA.UNPACK_SKIP_ROWS,wy.min.y),bA.pixelStorei(bA.UNPACK_SKIP_IMAGES,wy.min.z),PA.isDataTexture||PA.isData3DTexture?bA.texSubImage3D(sC,NA,aA.x,aA.y,aA.z,qA,oE,iC,aC,hC,II.data):PA.isCompressedArrayTexture?(console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: untested support for compressed srcTexture."),bA.compressedTexSubImage3D(sC,NA,aA.x,aA.y,aA.z,qA,oE,iC,aC,II.data)):bA.texSubImage3D(sC,NA,aA.x,aA.y,aA.z,qA,oE,iC,aC,hC,II),bA.pixelStorei(bA.UNPACK_ROW_LENGTH,NC),bA.pixelStorei(bA.UNPACK_IMAGE_HEIGHT,UC),bA.pixelStorei(bA.UNPACK_SKIP_PIXELS,FC),bA.pixelStorei(bA.UNPACK_SKIP_ROWS,LI),bA.pixelStorei(bA.UNPACK_SKIP_IMAGES,BI),NA===0&&TA.generateMipmaps&&bA.generateMipmap(sC),sE.unbindTexture()},this.initTexture=function(wy){wy.isCubeTexture?VA.setTextureCube(wy,0):wy.isData3DTexture?VA.setTexture3D(wy,0):wy.isDataArrayTexture||wy.isCompressedArrayTexture?VA.setTexture2DArray(wy,0):VA.setTexture2D(wy,0),sE.unbindTexture()},this.resetState=function(){os=0,ls=0,zs=null,sE.reset(),LC.reset()},typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}get coordinateSystem(){return WebGLCoordinateSystem}get outputColorSpace(){return this._outputColorSpace}set outputColorSpace(s){this._outputColorSpace=s;const a=this.getContext();a.drawingBufferColorSpace=s===DisplayP3ColorSpace?"display-p3":"srgb",a.unpackColorSpace=ColorManagement.workingColorSpace===LinearDisplayP3ColorSpace?"display-p3":"srgb"}get physicallyCorrectLights(){return console.warn("THREE.WebGLRenderer: The property .physicallyCorrectLights has been removed. Set renderer.useLegacyLights instead."),!this.useLegacyLights}set physicallyCorrectLights(s){console.warn("THREE.WebGLRenderer: The property .physicallyCorrectLights has been removed. Set renderer.useLegacyLights instead."),this.useLegacyLights=!s}get outputEncoding(){return console.warn("THREE.WebGLRenderer: Property .outputEncoding has been removed. Use .outputColorSpace instead."),this.outputColorSpace===SRGBColorSpace$1?sRGBEncoding:LinearEncoding}set outputEncoding(s){console.warn("THREE.WebGLRenderer: Property .outputEncoding has been removed. Use .outputColorSpace instead."),this.outputColorSpace=s===sRGBEncoding?SRGBColorSpace$1:LinearSRGBColorSpace$1}get useLegacyLights(){return console.warn("THREE.WebGLRenderer: The property .useLegacyLights has been deprecated. Migrate your lighting according to the following guide: https://discourse.threejs.org/t/updates-to-lighting-in-three-js-r155/53733."),this._useLegacyLights}set useLegacyLights(s){console.warn("THREE.WebGLRenderer: The property .useLegacyLights has been deprecated. Migrate your lighting according to the following guide: https://discourse.threejs.org/t/updates-to-lighting-in-three-js-r155/53733."),this._useLegacyLights=s}}class WebGL1Renderer extends WebGLRenderer{}WebGL1Renderer.prototype.isWebGL1Renderer=!0;class FogExp2{constructor(s,a=25e-5){this.isFogExp2=!0,this.name="",this.color=new Color$1(s),this.density=a}clone(){return new FogExp2(this.color,this.density)}toJSON(){return{type:"FogExp2",name:this.name,color:this.color.getHex(),density:this.density}}}class Fog{constructor(s,a=1,b=1e3){this.isFog=!0,this.name="",this.color=new Color$1(s),this.near=a,this.far=b}clone(){return new Fog(this.color,this.near,this.far)}toJSON(){return{type:"Fog",name:this.name,color:this.color.getHex(),near:this.near,far:this.far}}}class Scene extends Object3D{constructor(){super(),this.isScene=!0,this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.backgroundBlurriness=0,this.backgroundIntensity=1,this.overrideMaterial=null,typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(s,a){return super.copy(s,a),s.background!==null&&(this.background=s.background.clone()),s.environment!==null&&(this.environment=s.environment.clone()),s.fog!==null&&(this.fog=s.fog.clone()),this.backgroundBlurriness=s.backgroundBlurriness,this.backgroundIntensity=s.backgroundIntensity,s.overrideMaterial!==null&&(this.overrideMaterial=s.overrideMaterial.clone()),this.matrixAutoUpdate=s.matrixAutoUpdate,this}toJSON(s){const a=super.toJSON(s);return this.fog!==null&&(a.object.fog=this.fog.toJSON()),this.backgroundBlurriness>0&&(a.object.backgroundBlurriness=this.backgroundBlurriness),this.backgroundIntensity!==1&&(a.object.backgroundIntensity=this.backgroundIntensity),a}}class InterleavedBuffer{constructor(s,a){this.isInterleavedBuffer=!0,this.array=s,this.stride=a,this.count=s!==void 0?s.length/a:0,this.usage=StaticDrawUsage,this.updateRange={offset:0,count:-1},this.version=0,this.uuid=generateUUID()}onUploadCallback(){}set needsUpdate(s){s===!0&&this.version++}setUsage(s){return this.usage=s,this}copy(s){return this.array=new s.array.constructor(s.array),this.count=s.count,this.stride=s.stride,this.usage=s.usage,this}copyAt(s,a,b){s*=this.stride,b*=a.stride;for(let _e=0,bt=this.stride;_e<bt;_e++)this.array[s+_e]=a.array[b+_e];return this}set(s,a=0){return this.array.set(s,a),this}clone(s){s.arrayBuffers===void 0&&(s.arrayBuffers={}),this.array.buffer._uuid===void 0&&(this.array.buffer._uuid=generateUUID()),s.arrayBuffers[this.array.buffer._uuid]===void 0&&(s.arrayBuffers[this.array.buffer._uuid]=this.array.slice(0).buffer);const a=new this.array.constructor(s.arrayBuffers[this.array.buffer._uuid]),b=new this.constructor(a,this.stride);return b.setUsage(this.usage),b}onUpload(s){return this.onUploadCallback=s,this}toJSON(s){return s.arrayBuffers===void 0&&(s.arrayBuffers={}),this.array.buffer._uuid===void 0&&(this.array.buffer._uuid=generateUUID()),s.arrayBuffers[this.array.buffer._uuid]===void 0&&(s.arrayBuffers[this.array.buffer._uuid]=Array.from(new Uint32Array(this.array.buffer))),{uuid:this.uuid,buffer:this.array.buffer._uuid,type:this.array.constructor.name,stride:this.stride}}}const _vector$5=new Vector3;class InterleavedBufferAttribute{constructor(s,a,b,_e=!1){this.isInterleavedBufferAttribute=!0,this.name="",this.data=s,this.itemSize=a,this.offset=b,this.normalized=_e}get count(){return this.data.count}get array(){return this.data.array}set needsUpdate(s){this.data.needsUpdate=s}applyMatrix4(s){for(let a=0,b=this.data.count;a<b;a++)_vector$5.fromBufferAttribute(this,a),_vector$5.applyMatrix4(s),this.setXYZ(a,_vector$5.x,_vector$5.y,_vector$5.z);return this}applyNormalMatrix(s){for(let a=0,b=this.count;a<b;a++)_vector$5.fromBufferAttribute(this,a),_vector$5.applyNormalMatrix(s),this.setXYZ(a,_vector$5.x,_vector$5.y,_vector$5.z);return this}transformDirection(s){for(let a=0,b=this.count;a<b;a++)_vector$5.fromBufferAttribute(this,a),_vector$5.transformDirection(s),this.setXYZ(a,_vector$5.x,_vector$5.y,_vector$5.z);return this}setX(s,a){return this.normalized&&(a=normalize(a,this.array)),this.data.array[s*this.data.stride+this.offset]=a,this}setY(s,a){return this.normalized&&(a=normalize(a,this.array)),this.data.array[s*this.data.stride+this.offset+1]=a,this}setZ(s,a){return this.normalized&&(a=normalize(a,this.array)),this.data.array[s*this.data.stride+this.offset+2]=a,this}setW(s,a){return this.normalized&&(a=normalize(a,this.array)),this.data.array[s*this.data.stride+this.offset+3]=a,this}getX(s){let a=this.data.array[s*this.data.stride+this.offset];return this.normalized&&(a=denormalize(a,this.array)),a}getY(s){let a=this.data.array[s*this.data.stride+this.offset+1];return this.normalized&&(a=denormalize(a,this.array)),a}getZ(s){let a=this.data.array[s*this.data.stride+this.offset+2];return this.normalized&&(a=denormalize(a,this.array)),a}getW(s){let a=this.data.array[s*this.data.stride+this.offset+3];return this.normalized&&(a=denormalize(a,this.array)),a}setXY(s,a,b){return s=s*this.data.stride+this.offset,this.normalized&&(a=normalize(a,this.array),b=normalize(b,this.array)),this.data.array[s+0]=a,this.data.array[s+1]=b,this}setXYZ(s,a,b,_e){return s=s*this.data.stride+this.offset,this.normalized&&(a=normalize(a,this.array),b=normalize(b,this.array),_e=normalize(_e,this.array)),this.data.array[s+0]=a,this.data.array[s+1]=b,this.data.array[s+2]=_e,this}setXYZW(s,a,b,_e,bt){return s=s*this.data.stride+this.offset,this.normalized&&(a=normalize(a,this.array),b=normalize(b,this.array),_e=normalize(_e,this.array),bt=normalize(bt,this.array)),this.data.array[s+0]=a,this.data.array[s+1]=b,this.data.array[s+2]=_e,this.data.array[s+3]=bt,this}clone(s){if(s===void 0){console.log("THREE.InterleavedBufferAttribute.clone(): Cloning an interleaved buffer attribute will de-interleave buffer data.");const a=[];for(let b=0;b<this.count;b++){const _e=b*this.data.stride+this.offset;for(let bt=0;bt<this.itemSize;bt++)a.push(this.data.array[_e+bt])}return new BufferAttribute(new this.array.constructor(a),this.itemSize,this.normalized)}else return s.interleavedBuffers===void 0&&(s.interleavedBuffers={}),s.interleavedBuffers[this.data.uuid]===void 0&&(s.interleavedBuffers[this.data.uuid]=this.data.clone(s)),new InterleavedBufferAttribute(s.interleavedBuffers[this.data.uuid],this.itemSize,this.offset,this.normalized)}toJSON(s){if(s===void 0){console.log("THREE.InterleavedBufferAttribute.toJSON(): Serializing an interleaved buffer attribute will de-interleave buffer data.");const a=[];for(let b=0;b<this.count;b++){const _e=b*this.data.stride+this.offset;for(let bt=0;bt<this.itemSize;bt++)a.push(this.data.array[_e+bt])}return{itemSize:this.itemSize,type:this.array.constructor.name,array:a,normalized:this.normalized}}else return s.interleavedBuffers===void 0&&(s.interleavedBuffers={}),s.interleavedBuffers[this.data.uuid]===void 0&&(s.interleavedBuffers[this.data.uuid]=this.data.toJSON(s)),{isInterleavedBufferAttribute:!0,itemSize:this.itemSize,data:this.data.uuid,offset:this.offset,normalized:this.normalized}}}class SpriteMaterial extends Material{constructor(s){super(),this.isSpriteMaterial=!0,this.type="SpriteMaterial",this.color=new Color$1(16777215),this.map=null,this.alphaMap=null,this.rotation=0,this.sizeAttenuation=!0,this.transparent=!0,this.fog=!0,this.setValues(s)}copy(s){return super.copy(s),this.color.copy(s.color),this.map=s.map,this.alphaMap=s.alphaMap,this.rotation=s.rotation,this.sizeAttenuation=s.sizeAttenuation,this.fog=s.fog,this}}let _geometry;const _intersectPoint=new Vector3,_worldScale=new Vector3,_mvPosition=new Vector3,_alignedPosition=new Vector2,_rotatedPosition=new Vector2,_viewWorldMatrix=new Matrix4,_vA=new Vector3,_vB=new Vector3,_vC=new Vector3,_uvA=new Vector2,_uvB=new Vector2,_uvC=new Vector2;class Sprite extends Object3D{constructor(s=new SpriteMaterial){if(super(),this.isSprite=!0,this.type="Sprite",_geometry===void 0){_geometry=new BufferGeometry;const a=new Float32Array([-.5,-.5,0,0,0,.5,-.5,0,1,0,.5,.5,0,1,1,-.5,.5,0,0,1]),b=new InterleavedBuffer(a,5);_geometry.setIndex([0,1,2,0,2,3]),_geometry.setAttribute("position",new InterleavedBufferAttribute(b,3,0,!1)),_geometry.setAttribute("uv",new InterleavedBufferAttribute(b,2,3,!1))}this.geometry=_geometry,this.material=s,this.center=new Vector2(.5,.5)}raycast(s,a){s.camera===null&&console.error('THREE.Sprite: "Raycaster.camera" needs to be set in order to raycast against sprites.'),_worldScale.setFromMatrixScale(this.matrixWorld),_viewWorldMatrix.copy(s.camera.matrixWorld),this.modelViewMatrix.multiplyMatrices(s.camera.matrixWorldInverse,this.matrixWorld),_mvPosition.setFromMatrixPosition(this.modelViewMatrix),s.camera.isPerspectiveCamera&&this.material.sizeAttenuation===!1&&_worldScale.multiplyScalar(-_mvPosition.z);const b=this.material.rotation;let _e,bt;b!==0&&(bt=Math.cos(b),_e=Math.sin(b));const rn=this.center;transformVertex(_vA.set(-.5,-.5,0),_mvPosition,rn,_worldScale,_e,bt),transformVertex(_vB.set(.5,-.5,0),_mvPosition,rn,_worldScale,_e,bt),transformVertex(_vC.set(.5,.5,0),_mvPosition,rn,_worldScale,_e,bt),_uvA.set(0,0),_uvB.set(1,0),_uvC.set(1,1);let sn=s.ray.intersectTriangle(_vA,_vB,_vC,!1,_intersectPoint);if(sn===null&&(transformVertex(_vB.set(-.5,.5,0),_mvPosition,rn,_worldScale,_e,bt),_uvB.set(0,1),sn=s.ray.intersectTriangle(_vA,_vC,_vB,!1,_intersectPoint),sn===null))return;const yn=s.ray.origin.distanceTo(_intersectPoint);yn<s.near||yn>s.far||a.push({distance:yn,point:_intersectPoint.clone(),uv:Triangle.getInterpolation(_intersectPoint,_vA,_vB,_vC,_uvA,_uvB,_uvC,new Vector2),face:null,object:this})}copy(s,a){return super.copy(s,a),s.center!==void 0&&this.center.copy(s.center),this.material=s.material,this}}function transformVertex(o,s,a,b,_e,bt){_alignedPosition.subVectors(o,a).addScalar(.5).multiply(b),_e!==void 0?(_rotatedPosition.x=bt*_alignedPosition.x-_e*_alignedPosition.y,_rotatedPosition.y=_e*_alignedPosition.x+bt*_alignedPosition.y):_rotatedPosition.copy(_alignedPosition),o.copy(s),o.x+=_rotatedPosition.x,o.y+=_rotatedPosition.y,o.applyMatrix4(_viewWorldMatrix)}const _v1$2=new Vector3,_v2$1=new Vector3;class LOD extends Object3D{constructor(){super(),this._currentLevel=0,this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]},isLOD:{value:!0}}),this.autoUpdate=!0}copy(s){super.copy(s,!1);const a=s.levels;for(let b=0,_e=a.length;b<_e;b++){const bt=a[b];this.addLevel(bt.object.clone(),bt.distance,bt.hysteresis)}return this.autoUpdate=s.autoUpdate,this}addLevel(s,a=0,b=0){a=Math.abs(a);const _e=this.levels;let bt;for(bt=0;bt<_e.length&&!(a<_e[bt].distance);bt++);return _e.splice(bt,0,{distance:a,hysteresis:b,object:s}),this.add(s),this}getCurrentLevel(){return this._currentLevel}getObjectForDistance(s){const a=this.levels;if(a.length>0){let b,_e;for(b=1,_e=a.length;b<_e;b++){let bt=a[b].distance;if(a[b].object.visible&&(bt-=bt*a[b].hysteresis),s<bt)break}return a[b-1].object}return null}raycast(s,a){if(this.levels.length>0){_v1$2.setFromMatrixPosition(this.matrixWorld);const _e=s.ray.origin.distanceTo(_v1$2);this.getObjectForDistance(_e).raycast(s,a)}}update(s){const a=this.levels;if(a.length>1){_v1$2.setFromMatrixPosition(s.matrixWorld),_v2$1.setFromMatrixPosition(this.matrixWorld);const b=_v1$2.distanceTo(_v2$1)/s.zoom;a[0].object.visible=!0;let _e,bt;for(_e=1,bt=a.length;_e<bt;_e++){let rn=a[_e].distance;if(a[_e].object.visible&&(rn-=rn*a[_e].hysteresis),b>=rn)a[_e-1].object.visible=!1,a[_e].object.visible=!0;else break}for(this._currentLevel=_e-1;_e<bt;_e++)a[_e].object.visible=!1}}toJSON(s){const a=super.toJSON(s);this.autoUpdate===!1&&(a.object.autoUpdate=!1),a.object.levels=[];const b=this.levels;for(let _e=0,bt=b.length;_e<bt;_e++){const rn=b[_e];a.object.levels.push({object:rn.object.uuid,distance:rn.distance,hysteresis:rn.hysteresis})}return a}}const _basePosition=new Vector3,_skinIndex=new Vector4,_skinWeight=new Vector4,_vector3=new Vector3,_matrix4=new Matrix4,_vertex=new Vector3,_sphere$3=new Sphere,_inverseMatrix$2=new Matrix4,_ray$2=new Ray;class SkinnedMesh extends Mesh{constructor(s,a){super(s,a),this.isSkinnedMesh=!0,this.type="SkinnedMesh",this.bindMode="attached",this.bindMatrix=new Matrix4,this.bindMatrixInverse=new Matrix4,this.boundingBox=null,this.boundingSphere=null}computeBoundingBox(){const s=this.geometry;this.boundingBox===null&&(this.boundingBox=new Box3),this.boundingBox.makeEmpty();const a=s.getAttribute("position");for(let b=0;b<a.count;b++)_vertex.fromBufferAttribute(a,b),this.applyBoneTransform(b,_vertex),this.boundingBox.expandByPoint(_vertex)}computeBoundingSphere(){const s=this.geometry;this.boundingSphere===null&&(this.boundingSphere=new Sphere),this.boundingSphere.makeEmpty();const a=s.getAttribute("position");for(let b=0;b<a.count;b++)_vertex.fromBufferAttribute(a,b),this.applyBoneTransform(b,_vertex),this.boundingSphere.expandByPoint(_vertex)}copy(s,a){return super.copy(s,a),this.bindMode=s.bindMode,this.bindMatrix.copy(s.bindMatrix),this.bindMatrixInverse.copy(s.bindMatrixInverse),this.skeleton=s.skeleton,s.boundingBox!==null&&(this.boundingBox=s.boundingBox.clone()),s.boundingSphere!==null&&(this.boundingSphere=s.boundingSphere.clone()),this}raycast(s,a){const b=this.material,_e=this.matrixWorld;b!==void 0&&(this.boundingSphere===null&&this.computeBoundingSphere(),_sphere$3.copy(this.boundingSphere),_sphere$3.applyMatrix4(_e),s.ray.intersectsSphere(_sphere$3)!==!1&&(_inverseMatrix$2.copy(_e).invert(),_ray$2.copy(s.ray).applyMatrix4(_inverseMatrix$2),!(this.boundingBox!==null&&_ray$2.intersectsBox(this.boundingBox)===!1)&&this._computeIntersections(s,a,_ray$2)))}getVertexPosition(s,a){return super.getVertexPosition(s,a),this.applyBoneTransform(s,a),a}bind(s,a){this.skeleton=s,a===void 0&&(this.updateMatrixWorld(!0),this.skeleton.calculateInverses(),a=this.matrixWorld),this.bindMatrix.copy(a),this.bindMatrixInverse.copy(a).invert()}pose(){this.skeleton.pose()}normalizeSkinWeights(){const s=new Vector4,a=this.geometry.attributes.skinWeight;for(let b=0,_e=a.count;b<_e;b++){s.fromBufferAttribute(a,b);const bt=1/s.manhattanLength();bt!==1/0?s.multiplyScalar(bt):s.set(1,0,0,0),a.setXYZW(b,s.x,s.y,s.z,s.w)}}updateMatrixWorld(s){super.updateMatrixWorld(s),this.bindMode==="attached"?this.bindMatrixInverse.copy(this.matrixWorld).invert():this.bindMode==="detached"?this.bindMatrixInverse.copy(this.bindMatrix).invert():console.warn("THREE.SkinnedMesh: Unrecognized bindMode: "+this.bindMode)}applyBoneTransform(s,a){const b=this.skeleton,_e=this.geometry;_skinIndex.fromBufferAttribute(_e.attributes.skinIndex,s),_skinWeight.fromBufferAttribute(_e.attributes.skinWeight,s),_basePosition.copy(a).applyMatrix4(this.bindMatrix),a.set(0,0,0);for(let bt=0;bt<4;bt++){const rn=_skinWeight.getComponent(bt);if(rn!==0){const sn=_skinIndex.getComponent(bt);_matrix4.multiplyMatrices(b.bones[sn].matrixWorld,b.boneInverses[sn]),a.addScaledVector(_vector3.copy(_basePosition).applyMatrix4(_matrix4),rn)}}return a.applyMatrix4(this.bindMatrixInverse)}boneTransform(s,a){return console.warn("THREE.SkinnedMesh: .boneTransform() was renamed to .applyBoneTransform() in r151."),this.applyBoneTransform(s,a)}}class Bone extends Object3D{constructor(){super(),this.isBone=!0,this.type="Bone"}}class DataTexture extends Texture{constructor(s=null,a=1,b=1,_e,bt,rn,sn,yn,Pn=NearestFilter,zn=NearestFilter,lr,ar){super(null,rn,sn,yn,Pn,zn,_e,bt,lr,ar),this.isDataTexture=!0,this.image={data:s,width:a,height:b},this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}}const _offsetMatrix=new Matrix4,_identityMatrix$1=new Matrix4;class Skeleton{constructor(s=[],a=[]){this.uuid=generateUUID(),this.bones=s.slice(0),this.boneInverses=a,this.boneMatrices=null,this.boneTexture=null,this.boneTextureSize=0,this.init()}init(){const s=this.bones,a=this.boneInverses;if(this.boneMatrices=new Float32Array(s.length*16),a.length===0)this.calculateInverses();else if(s.length!==a.length){console.warn("THREE.Skeleton: Number of inverse bone matrices does not match amount of bones."),this.boneInverses=[];for(let b=0,_e=this.bones.length;b<_e;b++)this.boneInverses.push(new Matrix4)}}calculateInverses(){this.boneInverses.length=0;for(let s=0,a=this.bones.length;s<a;s++){const b=new Matrix4;this.bones[s]&&b.copy(this.bones[s].matrixWorld).invert(),this.boneInverses.push(b)}}pose(){for(let s=0,a=this.bones.length;s<a;s++){const b=this.bones[s];b&&b.matrixWorld.copy(this.boneInverses[s]).invert()}for(let s=0,a=this.bones.length;s<a;s++){const b=this.bones[s];b&&(b.parent&&b.parent.isBone?(b.matrix.copy(b.parent.matrixWorld).invert(),b.matrix.multiply(b.matrixWorld)):b.matrix.copy(b.matrixWorld),b.matrix.decompose(b.position,b.quaternion,b.scale))}}update(){const s=this.bones,a=this.boneInverses,b=this.boneMatrices,_e=this.boneTexture;for(let bt=0,rn=s.length;bt<rn;bt++){const sn=s[bt]?s[bt].matrixWorld:_identityMatrix$1;_offsetMatrix.multiplyMatrices(sn,a[bt]),_offsetMatrix.toArray(b,bt*16)}_e!==null&&(_e.needsUpdate=!0)}clone(){return new Skeleton(this.bones,this.boneInverses)}computeBoneTexture(){let s=Math.sqrt(this.bones.length*4);s=ceilPowerOfTwo(s),s=Math.max(s,4);const a=new Float32Array(s*s*4);a.set(this.boneMatrices);const b=new DataTexture(a,s,s,RGBAFormat,FloatType);return b.needsUpdate=!0,this.boneMatrices=a,this.boneTexture=b,this.boneTextureSize=s,this}getBoneByName(s){for(let a=0,b=this.bones.length;a<b;a++){const _e=this.bones[a];if(_e.name===s)return _e}}dispose(){this.boneTexture!==null&&(this.boneTexture.dispose(),this.boneTexture=null)}fromJSON(s,a){this.uuid=s.uuid;for(let b=0,_e=s.bones.length;b<_e;b++){const bt=s.bones[b];let rn=a[bt];rn===void 0&&(console.warn("THREE.Skeleton: No bone found with UUID:",bt),rn=new Bone),this.bones.push(rn),this.boneInverses.push(new Matrix4().fromArray(s.boneInverses[b]))}return this.init(),this}toJSON(){const s={metadata:{version:4.6,type:"Skeleton",generator:"Skeleton.toJSON"},bones:[],boneInverses:[]};s.uuid=this.uuid;const a=this.bones,b=this.boneInverses;for(let _e=0,bt=a.length;_e<bt;_e++){const rn=a[_e];s.bones.push(rn.uuid);const sn=b[_e];s.boneInverses.push(sn.toArray())}return s}}class InstancedBufferAttribute extends BufferAttribute{constructor(s,a,b,_e=1){super(s,a,b),this.isInstancedBufferAttribute=!0,this.meshPerAttribute=_e}copy(s){return super.copy(s),this.meshPerAttribute=s.meshPerAttribute,this}toJSON(){const s=super.toJSON();return s.meshPerAttribute=this.meshPerAttribute,s.isInstancedBufferAttribute=!0,s}}const _instanceLocalMatrix=new Matrix4,_instanceWorldMatrix=new Matrix4,_instanceIntersects=[],_box3=new Box3,_identity=new Matrix4,_mesh=new Mesh,_sphere$2=new Sphere;class InstancedMesh extends Mesh{constructor(s,a,b){super(s,a),this.isInstancedMesh=!0,this.instanceMatrix=new InstancedBufferAttribute(new Float32Array(b*16),16),this.instanceColor=null,this.count=b,this.boundingBox=null,this.boundingSphere=null;for(let _e=0;_e<b;_e++)this.setMatrixAt(_e,_identity)}computeBoundingBox(){const s=this.geometry,a=this.count;this.boundingBox===null&&(this.boundingBox=new Box3),s.boundingBox===null&&s.computeBoundingBox(),this.boundingBox.makeEmpty();for(let b=0;b<a;b++)this.getMatrixAt(b,_instanceLocalMatrix),_box3.copy(s.boundingBox).applyMatrix4(_instanceLocalMatrix),this.boundingBox.union(_box3)}computeBoundingSphere(){const s=this.geometry,a=this.count;this.boundingSphere===null&&(this.boundingSphere=new Sphere),s.boundingSphere===null&&s.computeBoundingSphere(),this.boundingSphere.makeEmpty();for(let b=0;b<a;b++)this.getMatrixAt(b,_instanceLocalMatrix),_sphere$2.copy(s.boundingSphere).applyMatrix4(_instanceLocalMatrix),this.boundingSphere.union(_sphere$2)}copy(s,a){return super.copy(s,a),this.instanceMatrix.copy(s.instanceMatrix),s.instanceColor!==null&&(this.instanceColor=s.instanceColor.clone()),this.count=s.count,s.boundingBox!==null&&(this.boundingBox=s.boundingBox.clone()),s.boundingSphere!==null&&(this.boundingSphere=s.boundingSphere.clone()),this}getColorAt(s,a){a.fromArray(this.instanceColor.array,s*3)}getMatrixAt(s,a){a.fromArray(this.instanceMatrix.array,s*16)}raycast(s,a){const b=this.matrixWorld,_e=this.count;if(_mesh.geometry=this.geometry,_mesh.material=this.material,_mesh.material!==void 0&&(this.boundingSphere===null&&this.computeBoundingSphere(),_sphere$2.copy(this.boundingSphere),_sphere$2.applyMatrix4(b),s.ray.intersectsSphere(_sphere$2)!==!1))for(let bt=0;bt<_e;bt++){this.getMatrixAt(bt,_instanceLocalMatrix),_instanceWorldMatrix.multiplyMatrices(b,_instanceLocalMatrix),_mesh.matrixWorld=_instanceWorldMatrix,_mesh.raycast(s,_instanceIntersects);for(let rn=0,sn=_instanceIntersects.length;rn<sn;rn++){const yn=_instanceIntersects[rn];yn.instanceId=bt,yn.object=this,a.push(yn)}_instanceIntersects.length=0}}setColorAt(s,a){this.instanceColor===null&&(this.instanceColor=new InstancedBufferAttribute(new Float32Array(this.instanceMatrix.count*3),3)),a.toArray(this.instanceColor.array,s*3)}setMatrixAt(s,a){a.toArray(this.instanceMatrix.array,s*16)}updateMorphTargets(){}dispose(){this.dispatchEvent({type:"dispose"})}}class LineBasicMaterial extends Material{constructor(s){super(),this.isLineBasicMaterial=!0,this.type="LineBasicMaterial",this.color=new Color$1(16777215),this.map=null,this.linewidth=1,this.linecap="round",this.linejoin="round",this.fog=!0,this.setValues(s)}copy(s){return super.copy(s),this.color.copy(s.color),this.map=s.map,this.linewidth=s.linewidth,this.linecap=s.linecap,this.linejoin=s.linejoin,this.fog=s.fog,this}}const _start$1=new Vector3,_end$1=new Vector3,_inverseMatrix$1=new Matrix4,_ray$1=new Ray,_sphere$1=new Sphere;class Line extends Object3D{constructor(s=new BufferGeometry,a=new LineBasicMaterial){super(),this.isLine=!0,this.type="Line",this.geometry=s,this.material=a,this.updateMorphTargets()}copy(s,a){return super.copy(s,a),this.material=Array.isArray(s.material)?s.material.slice():s.material,this.geometry=s.geometry,this}computeLineDistances(){const s=this.geometry;if(s.index===null){const a=s.attributes.position,b=[0];for(let _e=1,bt=a.count;_e<bt;_e++)_start$1.fromBufferAttribute(a,_e-1),_end$1.fromBufferAttribute(a,_e),b[_e]=b[_e-1],b[_e]+=_start$1.distanceTo(_end$1);s.setAttribute("lineDistance",new Float32BufferAttribute(b,1))}else console.warn("THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.");return this}raycast(s,a){const b=this.geometry,_e=this.matrixWorld,bt=s.params.Line.threshold,rn=b.drawRange;if(b.boundingSphere===null&&b.computeBoundingSphere(),_sphere$1.copy(b.boundingSphere),_sphere$1.applyMatrix4(_e),_sphere$1.radius+=bt,s.ray.intersectsSphere(_sphere$1)===!1)return;_inverseMatrix$1.copy(_e).invert(),_ray$1.copy(s.ray).applyMatrix4(_inverseMatrix$1);const sn=bt/((this.scale.x+this.scale.y+this.scale.z)/3),yn=sn*sn,Pn=new Vector3,zn=new Vector3,lr=new Vector3,ar=new Vector3,cr=this.isLineSegments?2:1,hr=b.index,Ur=b.attributes.position;if(hr!==null){const Dr=Math.max(0,rn.start),zr=Math.min(hr.count,rn.start+rn.count);for(let rs=Dr,as=zr-1;rs<as;rs+=cr){const os=hr.getX(rs),ls=hr.getX(rs+1);if(Pn.fromBufferAttribute(Ur,os),zn.fromBufferAttribute(Ur,ls),_ray$1.distanceSqToSegment(Pn,zn,ar,lr)>yn)continue;ar.applyMatrix4(this.matrixWorld);const ho=s.ray.origin.distanceTo(ar);ho<s.near||ho>s.far||a.push({distance:ho,point:lr.clone().applyMatrix4(this.matrixWorld),index:rs,face:null,faceIndex:null,object:this})}}else{const Dr=Math.max(0,rn.start),zr=Math.min(Ur.count,rn.start+rn.count);for(let rs=Dr,as=zr-1;rs<as;rs+=cr){if(Pn.fromBufferAttribute(Ur,rs),zn.fromBufferAttribute(Ur,rs+1),_ray$1.distanceSqToSegment(Pn,zn,ar,lr)>yn)continue;ar.applyMatrix4(this.matrixWorld);const ls=s.ray.origin.distanceTo(ar);ls<s.near||ls>s.far||a.push({distance:ls,point:lr.clone().applyMatrix4(this.matrixWorld),index:rs,face:null,faceIndex:null,object:this})}}}updateMorphTargets(){const a=this.geometry.morphAttributes,b=Object.keys(a);if(b.length>0){const _e=a[b[0]];if(_e!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let bt=0,rn=_e.length;bt<rn;bt++){const sn=_e[bt].name||String(bt);this.morphTargetInfluences.push(0),this.morphTargetDictionary[sn]=bt}}}}}const _start=new Vector3,_end=new Vector3;class LineSegments extends Line{constructor(s,a){super(s,a),this.isLineSegments=!0,this.type="LineSegments"}computeLineDistances(){const s=this.geometry;if(s.index===null){const a=s.attributes.position,b=[];for(let _e=0,bt=a.count;_e<bt;_e+=2)_start.fromBufferAttribute(a,_e),_end.fromBufferAttribute(a,_e+1),b[_e]=_e===0?0:b[_e-1],b[_e+1]=b[_e]+_start.distanceTo(_end);s.setAttribute("lineDistance",new Float32BufferAttribute(b,1))}else console.warn("THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.");return this}}class LineLoop extends Line{constructor(s,a){super(s,a),this.isLineLoop=!0,this.type="LineLoop"}}class PointsMaterial extends Material{constructor(s){super(),this.isPointsMaterial=!0,this.type="PointsMaterial",this.color=new Color$1(16777215),this.map=null,this.alphaMap=null,this.size=1,this.sizeAttenuation=!0,this.fog=!0,this.setValues(s)}copy(s){return super.copy(s),this.color.copy(s.color),this.map=s.map,this.alphaMap=s.alphaMap,this.size=s.size,this.sizeAttenuation=s.sizeAttenuation,this.fog=s.fog,this}}const _inverseMatrix=new Matrix4,_ray=new Ray,_sphere$6=new Sphere,_position$2=new Vector3;class Points extends Object3D{constructor(s=new BufferGeometry,a=new PointsMaterial){super(),this.isPoints=!0,this.type="Points",this.geometry=s,this.material=a,this.updateMorphTargets()}copy(s,a){return super.copy(s,a),this.material=Array.isArray(s.material)?s.material.slice():s.material,this.geometry=s.geometry,this}raycast(s,a){const b=this.geometry,_e=this.matrixWorld,bt=s.params.Points.threshold,rn=b.drawRange;if(b.boundingSphere===null&&b.computeBoundingSphere(),_sphere$6.copy(b.boundingSphere),_sphere$6.applyMatrix4(_e),_sphere$6.radius+=bt,s.ray.intersectsSphere(_sphere$6)===!1)return;_inverseMatrix.copy(_e).invert(),_ray.copy(s.ray).applyMatrix4(_inverseMatrix);const sn=bt/((this.scale.x+this.scale.y+this.scale.z)/3),yn=sn*sn,Pn=b.index,lr=b.attributes.position;if(Pn!==null){const ar=Math.max(0,rn.start),cr=Math.min(Pn.count,rn.start+rn.count);for(let hr=ar,es=cr;hr<es;hr++){const Ur=Pn.getX(hr);_position$2.fromBufferAttribute(lr,Ur),testPoint(_position$2,Ur,yn,_e,s,a,this)}}else{const ar=Math.max(0,rn.start),cr=Math.min(lr.count,rn.start+rn.count);for(let hr=ar,es=cr;hr<es;hr++)_position$2.fromBufferAttribute(lr,hr),testPoint(_position$2,hr,yn,_e,s,a,this)}}updateMorphTargets(){const a=this.geometry.morphAttributes,b=Object.keys(a);if(b.length>0){const _e=a[b[0]];if(_e!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let bt=0,rn=_e.length;bt<rn;bt++){const sn=_e[bt].name||String(bt);this.morphTargetInfluences.push(0),this.morphTargetDictionary[sn]=bt}}}}}function testPoint(o,s,a,b,_e,bt,rn){const sn=_ray.distanceSqToPoint(o);if(sn<a){const yn=new Vector3;_ray.closestPointToPoint(o,yn),yn.applyMatrix4(b);const Pn=_e.ray.origin.distanceTo(yn);if(Pn<_e.near||Pn>_e.far)return;bt.push({distance:Pn,distanceToRay:Math.sqrt(sn),point:yn,index:s,face:null,object:rn})}}class VideoTexture extends Texture{constructor(s,a,b,_e,bt,rn,sn,yn,Pn){super(s,a,b,_e,bt,rn,sn,yn,Pn),this.isVideoTexture=!0,this.minFilter=rn!==void 0?rn:LinearFilter,this.magFilter=bt!==void 0?bt:LinearFilter,this.generateMipmaps=!1;const zn=this;function lr(){zn.needsUpdate=!0,s.requestVideoFrameCallback(lr)}"requestVideoFrameCallback"in s&&s.requestVideoFrameCallback(lr)}clone(){return new this.constructor(this.image).copy(this)}update(){const s=this.image;"requestVideoFrameCallback"in s===!1&&s.readyState>=s.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}}class FramebufferTexture extends Texture{constructor(s,a){super({width:s,height:a}),this.isFramebufferTexture=!0,this.magFilter=NearestFilter,this.minFilter=NearestFilter,this.generateMipmaps=!1,this.needsUpdate=!0}}class CompressedTexture extends Texture{constructor(s,a,b,_e,bt,rn,sn,yn,Pn,zn,lr,ar){super(null,rn,sn,yn,Pn,zn,_e,bt,lr,ar),this.isCompressedTexture=!0,this.image={width:a,height:b},this.mipmaps=s,this.flipY=!1,this.generateMipmaps=!1}}class CompressedArrayTexture extends CompressedTexture{constructor(s,a,b,_e,bt,rn){super(s,a,b,bt,rn),this.isCompressedArrayTexture=!0,this.image.depth=_e,this.wrapR=ClampToEdgeWrapping}}class CompressedCubeTexture extends CompressedTexture{constructor(s,a,b){super(void 0,s[0].width,s[0].height,a,b,CubeReflectionMapping),this.isCompressedCubeTexture=!0,this.isCubeTexture=!0,this.image=s}}class CanvasTexture extends Texture{constructor(s,a,b,_e,bt,rn,sn,yn,Pn){super(s,a,b,_e,bt,rn,sn,yn,Pn),this.isCanvasTexture=!0,this.needsUpdate=!0}}class Curve{constructor(){this.type="Curve",this.arcLengthDivisions=200}getPoint(){return console.warn("THREE.Curve: .getPoint() not implemented."),null}getPointAt(s,a){const b=this.getUtoTmapping(s);return this.getPoint(b,a)}getPoints(s=5){const a=[];for(let b=0;b<=s;b++)a.push(this.getPoint(b/s));return a}getSpacedPoints(s=5){const a=[];for(let b=0;b<=s;b++)a.push(this.getPointAt(b/s));return a}getLength(){const s=this.getLengths();return s[s.length-1]}getLengths(s=this.arcLengthDivisions){if(this.cacheArcLengths&&this.cacheArcLengths.length===s+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;const a=[];let b,_e=this.getPoint(0),bt=0;a.push(0);for(let rn=1;rn<=s;rn++)b=this.getPoint(rn/s),bt+=b.distanceTo(_e),a.push(bt),_e=b;return this.cacheArcLengths=a,a}updateArcLengths(){this.needsUpdate=!0,this.getLengths()}getUtoTmapping(s,a){const b=this.getLengths();let _e=0;const bt=b.length;let rn;a?rn=a:rn=s*b[bt-1];let sn=0,yn=bt-1,Pn;for(;sn<=yn;)if(_e=Math.floor(sn+(yn-sn)/2),Pn=b[_e]-rn,Pn<0)sn=_e+1;else if(Pn>0)yn=_e-1;else{yn=_e;break}if(_e=yn,b[_e]===rn)return _e/(bt-1);const zn=b[_e],ar=b[_e+1]-zn,cr=(rn-zn)/ar;return(_e+cr)/(bt-1)}getTangent(s,a){let _e=s-1e-4,bt=s+1e-4;_e<0&&(_e=0),bt>1&&(bt=1);const rn=this.getPoint(_e),sn=this.getPoint(bt),yn=a||(rn.isVector2?new Vector2:new Vector3);return yn.copy(sn).sub(rn).normalize(),yn}getTangentAt(s,a){const b=this.getUtoTmapping(s);return this.getTangent(b,a)}computeFrenetFrames(s,a){const b=new Vector3,_e=[],bt=[],rn=[],sn=new Vector3,yn=new Matrix4;for(let cr=0;cr<=s;cr++){const hr=cr/s;_e[cr]=this.getTangentAt(hr,new Vector3)}bt[0]=new Vector3,rn[0]=new Vector3;let Pn=Number.MAX_VALUE;const zn=Math.abs(_e[0].x),lr=Math.abs(_e[0].y),ar=Math.abs(_e[0].z);zn<=Pn&&(Pn=zn,b.set(1,0,0)),lr<=Pn&&(Pn=lr,b.set(0,1,0)),ar<=Pn&&b.set(0,0,1),sn.crossVectors(_e[0],b).normalize(),bt[0].crossVectors(_e[0],sn),rn[0].crossVectors(_e[0],bt[0]);for(let cr=1;cr<=s;cr++){if(bt[cr]=bt[cr-1].clone(),rn[cr]=rn[cr-1].clone(),sn.crossVectors(_e[cr-1],_e[cr]),sn.length()>Number.EPSILON){sn.normalize();const hr=Math.acos(clamp$2(_e[cr-1].dot(_e[cr]),-1,1));bt[cr].applyMatrix4(yn.makeRotationAxis(sn,hr))}rn[cr].crossVectors(_e[cr],bt[cr])}if(a===!0){let cr=Math.acos(clamp$2(bt[0].dot(bt[s]),-1,1));cr/=s,_e[0].dot(sn.crossVectors(bt[0],bt[s]))>0&&(cr=-cr);for(let hr=1;hr<=s;hr++)bt[hr].applyMatrix4(yn.makeRotationAxis(_e[hr],cr*hr)),rn[hr].crossVectors(_e[hr],bt[hr])}return{tangents:_e,normals:bt,binormals:rn}}clone(){return new this.constructor().copy(this)}copy(s){return this.arcLengthDivisions=s.arcLengthDivisions,this}toJSON(){const s={metadata:{version:4.6,type:"Curve",generator:"Curve.toJSON"}};return s.arcLengthDivisions=this.arcLengthDivisions,s.type=this.type,s}fromJSON(s){return this.arcLengthDivisions=s.arcLengthDivisions,this}}class EllipseCurve extends Curve{constructor(s=0,a=0,b=1,_e=1,bt=0,rn=Math.PI*2,sn=!1,yn=0){super(),this.isEllipseCurve=!0,this.type="EllipseCurve",this.aX=s,this.aY=a,this.xRadius=b,this.yRadius=_e,this.aStartAngle=bt,this.aEndAngle=rn,this.aClockwise=sn,this.aRotation=yn}getPoint(s,a){const b=a||new Vector2,_e=Math.PI*2;let bt=this.aEndAngle-this.aStartAngle;const rn=Math.abs(bt)<Number.EPSILON;for(;bt<0;)bt+=_e;for(;bt>_e;)bt-=_e;bt<Number.EPSILON&&(rn?bt=0:bt=_e),this.aClockwise===!0&&!rn&&(bt===_e?bt=-_e:bt=bt-_e);const sn=this.aStartAngle+s*bt;let yn=this.aX+this.xRadius*Math.cos(sn),Pn=this.aY+this.yRadius*Math.sin(sn);if(this.aRotation!==0){const zn=Math.cos(this.aRotation),lr=Math.sin(this.aRotation),ar=yn-this.aX,cr=Pn-this.aY;yn=ar*zn-cr*lr+this.aX,Pn=ar*lr+cr*zn+this.aY}return b.set(yn,Pn)}copy(s){return super.copy(s),this.aX=s.aX,this.aY=s.aY,this.xRadius=s.xRadius,this.yRadius=s.yRadius,this.aStartAngle=s.aStartAngle,this.aEndAngle=s.aEndAngle,this.aClockwise=s.aClockwise,this.aRotation=s.aRotation,this}toJSON(){const s=super.toJSON();return s.aX=this.aX,s.aY=this.aY,s.xRadius=this.xRadius,s.yRadius=this.yRadius,s.aStartAngle=this.aStartAngle,s.aEndAngle=this.aEndAngle,s.aClockwise=this.aClockwise,s.aRotation=this.aRotation,s}fromJSON(s){return super.fromJSON(s),this.aX=s.aX,this.aY=s.aY,this.xRadius=s.xRadius,this.yRadius=s.yRadius,this.aStartAngle=s.aStartAngle,this.aEndAngle=s.aEndAngle,this.aClockwise=s.aClockwise,this.aRotation=s.aRotation,this}}class ArcCurve extends EllipseCurve{constructor(s,a,b,_e,bt,rn){super(s,a,b,b,_e,bt,rn),this.isArcCurve=!0,this.type="ArcCurve"}}function CubicPoly(){let o=0,s=0,a=0,b=0;function _e(bt,rn,sn,yn){o=bt,s=sn,a=-3*bt+3*rn-2*sn-yn,b=2*bt-2*rn+sn+yn}return{initCatmullRom:function(bt,rn,sn,yn,Pn){_e(rn,sn,Pn*(sn-bt),Pn*(yn-rn))},initNonuniformCatmullRom:function(bt,rn,sn,yn,Pn,zn,lr){let ar=(rn-bt)/Pn-(sn-bt)/(Pn+zn)+(sn-rn)/zn,cr=(sn-rn)/zn-(yn-rn)/(zn+lr)+(yn-sn)/lr;ar*=zn,cr*=zn,_e(rn,sn,ar,cr)},calc:function(bt){const rn=bt*bt,sn=rn*bt;return o+s*bt+a*rn+b*sn}}}const tmp=new Vector3,px=new CubicPoly,py=new CubicPoly,pz=new CubicPoly;class CatmullRomCurve3 extends Curve{constructor(s=[],a=!1,b="centripetal",_e=.5){super(),this.isCatmullRomCurve3=!0,this.type="CatmullRomCurve3",this.points=s,this.closed=a,this.curveType=b,this.tension=_e}getPoint(s,a=new Vector3){const b=a,_e=this.points,bt=_e.length,rn=(bt-(this.closed?0:1))*s;let sn=Math.floor(rn),yn=rn-sn;this.closed?sn+=sn>0?0:(Math.floor(Math.abs(sn)/bt)+1)*bt:yn===0&&sn===bt-1&&(sn=bt-2,yn=1);let Pn,zn;this.closed||sn>0?Pn=_e[(sn-1)%bt]:(tmp.subVectors(_e[0],_e[1]).add(_e[0]),Pn=tmp);const lr=_e[sn%bt],ar=_e[(sn+1)%bt];if(this.closed||sn+2<bt?zn=_e[(sn+2)%bt]:(tmp.subVectors(_e[bt-1],_e[bt-2]).add(_e[bt-1]),zn=tmp),this.curveType==="centripetal"||this.curveType==="chordal"){const cr=this.curveType==="chordal"?.5:.25;let hr=Math.pow(Pn.distanceToSquared(lr),cr),es=Math.pow(lr.distanceToSquared(ar),cr),Ur=Math.pow(ar.distanceToSquared(zn),cr);es<1e-4&&(es=1),hr<1e-4&&(hr=es),Ur<1e-4&&(Ur=es),px.initNonuniformCatmullRom(Pn.x,lr.x,ar.x,zn.x,hr,es,Ur),py.initNonuniformCatmullRom(Pn.y,lr.y,ar.y,zn.y,hr,es,Ur),pz.initNonuniformCatmullRom(Pn.z,lr.z,ar.z,zn.z,hr,es,Ur)}else this.curveType==="catmullrom"&&(px.initCatmullRom(Pn.x,lr.x,ar.x,zn.x,this.tension),py.initCatmullRom(Pn.y,lr.y,ar.y,zn.y,this.tension),pz.initCatmullRom(Pn.z,lr.z,ar.z,zn.z,this.tension));return b.set(px.calc(yn),py.calc(yn),pz.calc(yn)),b}copy(s){super.copy(s),this.points=[];for(let a=0,b=s.points.length;a<b;a++){const _e=s.points[a];this.points.push(_e.clone())}return this.closed=s.closed,this.curveType=s.curveType,this.tension=s.tension,this}toJSON(){const s=super.toJSON();s.points=[];for(let a=0,b=this.points.length;a<b;a++){const _e=this.points[a];s.points.push(_e.toArray())}return s.closed=this.closed,s.curveType=this.curveType,s.tension=this.tension,s}fromJSON(s){super.fromJSON(s),this.points=[];for(let a=0,b=s.points.length;a<b;a++){const _e=s.points[a];this.points.push(new Vector3().fromArray(_e))}return this.closed=s.closed,this.curveType=s.curveType,this.tension=s.tension,this}}function CatmullRom(o,s,a,b,_e){const bt=(b-s)*.5,rn=(_e-a)*.5,sn=o*o,yn=o*sn;return(2*a-2*b+bt+rn)*yn+(-3*a+3*b-2*bt-rn)*sn+bt*o+a}function QuadraticBezierP0(o,s){const a=1-o;return a*a*s}function QuadraticBezierP1(o,s){return 2*(1-o)*o*s}function QuadraticBezierP2(o,s){return o*o*s}function QuadraticBezier(o,s,a,b){return QuadraticBezierP0(o,s)+QuadraticBezierP1(o,a)+QuadraticBezierP2(o,b)}function CubicBezierP0(o,s){const a=1-o;return a*a*a*s}function CubicBezierP1(o,s){const a=1-o;return 3*a*a*o*s}function CubicBezierP2(o,s){return 3*(1-o)*o*o*s}function CubicBezierP3(o,s){return o*o*o*s}function CubicBezier(o,s,a,b,_e){return CubicBezierP0(o,s)+CubicBezierP1(o,a)+CubicBezierP2(o,b)+CubicBezierP3(o,_e)}class CubicBezierCurve extends Curve{constructor(s=new Vector2,a=new Vector2,b=new Vector2,_e=new Vector2){super(),this.isCubicBezierCurve=!0,this.type="CubicBezierCurve",this.v0=s,this.v1=a,this.v2=b,this.v3=_e}getPoint(s,a=new Vector2){const b=a,_e=this.v0,bt=this.v1,rn=this.v2,sn=this.v3;return b.set(CubicBezier(s,_e.x,bt.x,rn.x,sn.x),CubicBezier(s,_e.y,bt.y,rn.y,sn.y)),b}copy(s){return super.copy(s),this.v0.copy(s.v0),this.v1.copy(s.v1),this.v2.copy(s.v2),this.v3.copy(s.v3),this}toJSON(){const s=super.toJSON();return s.v0=this.v0.toArray(),s.v1=this.v1.toArray(),s.v2=this.v2.toArray(),s.v3=this.v3.toArray(),s}fromJSON(s){return super.fromJSON(s),this.v0.fromArray(s.v0),this.v1.fromArray(s.v1),this.v2.fromArray(s.v2),this.v3.fromArray(s.v3),this}}class CubicBezierCurve3 extends Curve{constructor(s=new Vector3,a=new Vector3,b=new Vector3,_e=new Vector3){super(),this.isCubicBezierCurve3=!0,this.type="CubicBezierCurve3",this.v0=s,this.v1=a,this.v2=b,this.v3=_e}getPoint(s,a=new Vector3){const b=a,_e=this.v0,bt=this.v1,rn=this.v2,sn=this.v3;return b.set(CubicBezier(s,_e.x,bt.x,rn.x,sn.x),CubicBezier(s,_e.y,bt.y,rn.y,sn.y),CubicBezier(s,_e.z,bt.z,rn.z,sn.z)),b}copy(s){return super.copy(s),this.v0.copy(s.v0),this.v1.copy(s.v1),this.v2.copy(s.v2),this.v3.copy(s.v3),this}toJSON(){const s=super.toJSON();return s.v0=this.v0.toArray(),s.v1=this.v1.toArray(),s.v2=this.v2.toArray(),s.v3=this.v3.toArray(),s}fromJSON(s){return super.fromJSON(s),this.v0.fromArray(s.v0),this.v1.fromArray(s.v1),this.v2.fromArray(s.v2),this.v3.fromArray(s.v3),this}}class LineCurve extends Curve{constructor(s=new Vector2,a=new Vector2){super(),this.isLineCurve=!0,this.type="LineCurve",this.v1=s,this.v2=a}getPoint(s,a=new Vector2){const b=a;return s===1?b.copy(this.v2):(b.copy(this.v2).sub(this.v1),b.multiplyScalar(s).add(this.v1)),b}getPointAt(s,a){return this.getPoint(s,a)}getTangent(s,a=new Vector2){return a.subVectors(this.v2,this.v1).normalize()}getTangentAt(s,a){return this.getTangent(s,a)}copy(s){return super.copy(s),this.v1.copy(s.v1),this.v2.copy(s.v2),this}toJSON(){const s=super.toJSON();return s.v1=this.v1.toArray(),s.v2=this.v2.toArray(),s}fromJSON(s){return super.fromJSON(s),this.v1.fromArray(s.v1),this.v2.fromArray(s.v2),this}}class LineCurve3 extends Curve{constructor(s=new Vector3,a=new Vector3){super(),this.isLineCurve3=!0,this.type="LineCurve3",this.v1=s,this.v2=a}getPoint(s,a=new Vector3){const b=a;return s===1?b.copy(this.v2):(b.copy(this.v2).sub(this.v1),b.multiplyScalar(s).add(this.v1)),b}getPointAt(s,a){return this.getPoint(s,a)}getTangent(s,a=new Vector3){return a.subVectors(this.v2,this.v1).normalize()}getTangentAt(s,a){return this.getTangent(s,a)}copy(s){return super.copy(s),this.v1.copy(s.v1),this.v2.copy(s.v2),this}toJSON(){const s=super.toJSON();return s.v1=this.v1.toArray(),s.v2=this.v2.toArray(),s}fromJSON(s){return super.fromJSON(s),this.v1.fromArray(s.v1),this.v2.fromArray(s.v2),this}}class QuadraticBezierCurve extends Curve{constructor(s=new Vector2,a=new Vector2,b=new Vector2){super(),this.isQuadraticBezierCurve=!0,this.type="QuadraticBezierCurve",this.v0=s,this.v1=a,this.v2=b}getPoint(s,a=new Vector2){const b=a,_e=this.v0,bt=this.v1,rn=this.v2;return b.set(QuadraticBezier(s,_e.x,bt.x,rn.x),QuadraticBezier(s,_e.y,bt.y,rn.y)),b}copy(s){return super.copy(s),this.v0.copy(s.v0),this.v1.copy(s.v1),this.v2.copy(s.v2),this}toJSON(){const s=super.toJSON();return s.v0=this.v0.toArray(),s.v1=this.v1.toArray(),s.v2=this.v2.toArray(),s}fromJSON(s){return super.fromJSON(s),this.v0.fromArray(s.v0),this.v1.fromArray(s.v1),this.v2.fromArray(s.v2),this}}class QuadraticBezierCurve3 extends Curve{constructor(s=new Vector3,a=new Vector3,b=new Vector3){super(),this.isQuadraticBezierCurve3=!0,this.type="QuadraticBezierCurve3",this.v0=s,this.v1=a,this.v2=b}getPoint(s,a=new Vector3){const b=a,_e=this.v0,bt=this.v1,rn=this.v2;return b.set(QuadraticBezier(s,_e.x,bt.x,rn.x),QuadraticBezier(s,_e.y,bt.y,rn.y),QuadraticBezier(s,_e.z,bt.z,rn.z)),b}copy(s){return super.copy(s),this.v0.copy(s.v0),this.v1.copy(s.v1),this.v2.copy(s.v2),this}toJSON(){const s=super.toJSON();return s.v0=this.v0.toArray(),s.v1=this.v1.toArray(),s.v2=this.v2.toArray(),s}fromJSON(s){return super.fromJSON(s),this.v0.fromArray(s.v0),this.v1.fromArray(s.v1),this.v2.fromArray(s.v2),this}}class SplineCurve extends Curve{constructor(s=[]){super(),this.isSplineCurve=!0,this.type="SplineCurve",this.points=s}getPoint(s,a=new Vector2){const b=a,_e=this.points,bt=(_e.length-1)*s,rn=Math.floor(bt),sn=bt-rn,yn=_e[rn===0?rn:rn-1],Pn=_e[rn],zn=_e[rn>_e.length-2?_e.length-1:rn+1],lr=_e[rn>_e.length-3?_e.length-1:rn+2];return b.set(CatmullRom(sn,yn.x,Pn.x,zn.x,lr.x),CatmullRom(sn,yn.y,Pn.y,zn.y,lr.y)),b}copy(s){super.copy(s),this.points=[];for(let a=0,b=s.points.length;a<b;a++){const _e=s.points[a];this.points.push(_e.clone())}return this}toJSON(){const s=super.toJSON();s.points=[];for(let a=0,b=this.points.length;a<b;a++){const _e=this.points[a];s.points.push(_e.toArray())}return s}fromJSON(s){super.fromJSON(s),this.points=[];for(let a=0,b=s.points.length;a<b;a++){const _e=s.points[a];this.points.push(new Vector2().fromArray(_e))}return this}}var Curves=Object.freeze({__proto__:null,ArcCurve,CatmullRomCurve3,CubicBezierCurve,CubicBezierCurve3,EllipseCurve,LineCurve,LineCurve3,QuadraticBezierCurve,QuadraticBezierCurve3,SplineCurve});class CurvePath extends Curve{constructor(){super(),this.type="CurvePath",this.curves=[],this.autoClose=!1}add(s){this.curves.push(s)}closePath(){const s=this.curves[0].getPoint(0),a=this.curves[this.curves.length-1].getPoint(1);if(!s.equals(a)){const b=s.isVector2===!0?"LineCurve":"LineCurve3";this.curves.push(new Curves[b](a,s))}return this}getPoint(s,a){const b=s*this.getLength(),_e=this.getCurveLengths();let bt=0;for(;bt<_e.length;){if(_e[bt]>=b){const rn=_e[bt]-b,sn=this.curves[bt],yn=sn.getLength(),Pn=yn===0?0:1-rn/yn;return sn.getPointAt(Pn,a)}bt++}return null}getLength(){const s=this.getCurveLengths();return s[s.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;const s=[];let a=0;for(let b=0,_e=this.curves.length;b<_e;b++)a+=this.curves[b].getLength(),s.push(a);return this.cacheLengths=s,s}getSpacedPoints(s=40){const a=[];for(let b=0;b<=s;b++)a.push(this.getPoint(b/s));return this.autoClose&&a.push(a[0]),a}getPoints(s=12){const a=[];let b;for(let _e=0,bt=this.curves;_e<bt.length;_e++){const rn=bt[_e],sn=rn.isEllipseCurve?s*2:rn.isLineCurve||rn.isLineCurve3?1:rn.isSplineCurve?s*rn.points.length:s,yn=rn.getPoints(sn);for(let Pn=0;Pn<yn.length;Pn++){const zn=yn[Pn];b&&b.equals(zn)||(a.push(zn),b=zn)}}return this.autoClose&&a.length>1&&!a[a.length-1].equals(a[0])&&a.push(a[0]),a}copy(s){super.copy(s),this.curves=[];for(let a=0,b=s.curves.length;a<b;a++){const _e=s.curves[a];this.curves.push(_e.clone())}return this.autoClose=s.autoClose,this}toJSON(){const s=super.toJSON();s.autoClose=this.autoClose,s.curves=[];for(let a=0,b=this.curves.length;a<b;a++){const _e=this.curves[a];s.curves.push(_e.toJSON())}return s}fromJSON(s){super.fromJSON(s),this.autoClose=s.autoClose,this.curves=[];for(let a=0,b=s.curves.length;a<b;a++){const _e=s.curves[a];this.curves.push(new Curves[_e.type]().fromJSON(_e))}return this}}class Path extends CurvePath{constructor(s){super(),this.type="Path",this.currentPoint=new Vector2,s&&this.setFromPoints(s)}setFromPoints(s){this.moveTo(s[0].x,s[0].y);for(let a=1,b=s.length;a<b;a++)this.lineTo(s[a].x,s[a].y);return this}moveTo(s,a){return this.currentPoint.set(s,a),this}lineTo(s,a){const b=new LineCurve(this.currentPoint.clone(),new Vector2(s,a));return this.curves.push(b),this.currentPoint.set(s,a),this}quadraticCurveTo(s,a,b,_e){const bt=new QuadraticBezierCurve(this.currentPoint.clone(),new Vector2(s,a),new Vector2(b,_e));return this.curves.push(bt),this.currentPoint.set(b,_e),this}bezierCurveTo(s,a,b,_e,bt,rn){const sn=new CubicBezierCurve(this.currentPoint.clone(),new Vector2(s,a),new Vector2(b,_e),new Vector2(bt,rn));return this.curves.push(sn),this.currentPoint.set(bt,rn),this}splineThru(s){const a=[this.currentPoint.clone()].concat(s),b=new SplineCurve(a);return this.curves.push(b),this.currentPoint.copy(s[s.length-1]),this}arc(s,a,b,_e,bt,rn){const sn=this.currentPoint.x,yn=this.currentPoint.y;return this.absarc(s+sn,a+yn,b,_e,bt,rn),this}absarc(s,a,b,_e,bt,rn){return this.absellipse(s,a,b,b,_e,bt,rn),this}ellipse(s,a,b,_e,bt,rn,sn,yn){const Pn=this.currentPoint.x,zn=this.currentPoint.y;return this.absellipse(s+Pn,a+zn,b,_e,bt,rn,sn,yn),this}absellipse(s,a,b,_e,bt,rn,sn,yn){const Pn=new EllipseCurve(s,a,b,_e,bt,rn,sn,yn);if(this.curves.length>0){const lr=Pn.getPoint(0);lr.equals(this.currentPoint)||this.lineTo(lr.x,lr.y)}this.curves.push(Pn);const zn=Pn.getPoint(1);return this.currentPoint.copy(zn),this}copy(s){return super.copy(s),this.currentPoint.copy(s.currentPoint),this}toJSON(){const s=super.toJSON();return s.currentPoint=this.currentPoint.toArray(),s}fromJSON(s){return super.fromJSON(s),this.currentPoint.fromArray(s.currentPoint),this}}class LatheGeometry extends BufferGeometry{constructor(s=[new Vector2(0,-.5),new Vector2(.5,0),new Vector2(0,.5)],a=12,b=0,_e=Math.PI*2){super(),this.type="LatheGeometry",this.parameters={points:s,segments:a,phiStart:b,phiLength:_e},a=Math.floor(a),_e=clamp$2(_e,0,Math.PI*2);const bt=[],rn=[],sn=[],yn=[],Pn=[],zn=1/a,lr=new Vector3,ar=new Vector2,cr=new Vector3,hr=new Vector3,es=new Vector3;let Ur=0,Dr=0;for(let zr=0;zr<=s.length-1;zr++)switch(zr){case 0:Ur=s[zr+1].x-s[zr].x,Dr=s[zr+1].y-s[zr].y,cr.x=Dr*1,cr.y=-Ur,cr.z=Dr*0,es.copy(cr),cr.normalize(),yn.push(cr.x,cr.y,cr.z);break;case s.length-1:yn.push(es.x,es.y,es.z);break;default:Ur=s[zr+1].x-s[zr].x,Dr=s[zr+1].y-s[zr].y,cr.x=Dr*1,cr.y=-Ur,cr.z=Dr*0,hr.copy(cr),cr.x+=es.x,cr.y+=es.y,cr.z+=es.z,cr.normalize(),yn.push(cr.x,cr.y,cr.z),es.copy(hr)}for(let zr=0;zr<=a;zr++){const rs=b+zr*zn*_e,as=Math.sin(rs),os=Math.cos(rs);for(let ls=0;ls<=s.length-1;ls++){lr.x=s[ls].x*as,lr.y=s[ls].y,lr.z=s[ls].x*os,rn.push(lr.x,lr.y,lr.z),ar.x=zr/a,ar.y=ls/(s.length-1),sn.push(ar.x,ar.y);const zs=yn[3*ls+0]*as,ho=yn[3*ls+1],ga=yn[3*ls+0]*os;Pn.push(zs,ho,ga)}}for(let zr=0;zr<a;zr++)for(let rs=0;rs<s.length-1;rs++){const as=rs+zr*s.length,os=as,ls=as+s.length,zs=as+s.length+1,ho=as+1;bt.push(os,ls,ho),bt.push(zs,ho,ls)}this.setIndex(bt),this.setAttribute("position",new Float32BufferAttribute(rn,3)),this.setAttribute("uv",new Float32BufferAttribute(sn,2)),this.setAttribute("normal",new Float32BufferAttribute(Pn,3))}copy(s){return super.copy(s),this.parameters=Object.assign({},s.parameters),this}static fromJSON(s){return new LatheGeometry(s.points,s.segments,s.phiStart,s.phiLength)}}class CapsuleGeometry extends LatheGeometry{constructor(s=1,a=1,b=4,_e=8){const bt=new Path;bt.absarc(0,-a/2,s,Math.PI*1.5,0),bt.absarc(0,a/2,s,0,Math.PI*.5),super(bt.getPoints(b),_e),this.type="CapsuleGeometry",this.parameters={radius:s,length:a,capSegments:b,radialSegments:_e}}static fromJSON(s){return new CapsuleGeometry(s.radius,s.length,s.capSegments,s.radialSegments)}}class CircleGeometry extends BufferGeometry{constructor(s=1,a=32,b=0,_e=Math.PI*2){super(),this.type="CircleGeometry",this.parameters={radius:s,segments:a,thetaStart:b,thetaLength:_e},a=Math.max(3,a);const bt=[],rn=[],sn=[],yn=[],Pn=new Vector3,zn=new Vector2;rn.push(0,0,0),sn.push(0,0,1),yn.push(.5,.5);for(let lr=0,ar=3;lr<=a;lr++,ar+=3){const cr=b+lr/a*_e;Pn.x=s*Math.cos(cr),Pn.y=s*Math.sin(cr),rn.push(Pn.x,Pn.y,Pn.z),sn.push(0,0,1),zn.x=(rn[ar]/s+1)/2,zn.y=(rn[ar+1]/s+1)/2,yn.push(zn.x,zn.y)}for(let lr=1;lr<=a;lr++)bt.push(lr,lr+1,0);this.setIndex(bt),this.setAttribute("position",new Float32BufferAttribute(rn,3)),this.setAttribute("normal",new Float32BufferAttribute(sn,3)),this.setAttribute("uv",new Float32BufferAttribute(yn,2))}copy(s){return super.copy(s),this.parameters=Object.assign({},s.parameters),this}static fromJSON(s){return new CircleGeometry(s.radius,s.segments,s.thetaStart,s.thetaLength)}}class CylinderGeometry extends BufferGeometry{constructor(s=1,a=1,b=1,_e=32,bt=1,rn=!1,sn=0,yn=Math.PI*2){super(),this.type="CylinderGeometry",this.parameters={radiusTop:s,radiusBottom:a,height:b,radialSegments:_e,heightSegments:bt,openEnded:rn,thetaStart:sn,thetaLength:yn};const Pn=this;_e=Math.floor(_e),bt=Math.floor(bt);const zn=[],lr=[],ar=[],cr=[];let hr=0;const es=[],Ur=b/2;let Dr=0;zr(),rn===!1&&(s>0&&rs(!0),a>0&&rs(!1)),this.setIndex(zn),this.setAttribute("position",new Float32BufferAttribute(lr,3)),this.setAttribute("normal",new Float32BufferAttribute(ar,3)),this.setAttribute("uv",new Float32BufferAttribute(cr,2));function zr(){const as=new Vector3,os=new Vector3;let ls=0;const zs=(a-s)/b;for(let ho=0;ho<=bt;ho++){const ga=[],mo=ho/bt,go=mo*(a-s)+s;for(let yl=0;yl<=_e;yl++){const Zl=yl/_e,_d=Zl*yn+sn,Ty=Math.sin(_d),yy=Math.cos(_d);os.x=go*Ty,os.y=-mo*b+Ur,os.z=go*yy,lr.push(os.x,os.y,os.z),as.set(Ty,zs,yy).normalize(),ar.push(as.x,as.y,as.z),cr.push(Zl,1-mo),ga.push(hr++)}es.push(ga)}for(let ho=0;ho<_e;ho++)for(let ga=0;ga<bt;ga++){const mo=es[ga][ho],go=es[ga+1][ho],yl=es[ga+1][ho+1],Zl=es[ga][ho+1];zn.push(mo,go,Zl),zn.push(go,yl,Zl),ls+=6}Pn.addGroup(Dr,ls,0),Dr+=ls}function rs(as){const os=hr,ls=new Vector2,zs=new Vector3;let ho=0;const ga=as===!0?s:a,mo=as===!0?1:-1;for(let yl=1;yl<=_e;yl++)lr.push(0,Ur*mo,0),ar.push(0,mo,0),cr.push(.5,.5),hr++;const go=hr;for(let yl=0;yl<=_e;yl++){const _d=yl/_e*yn+sn,Ty=Math.cos(_d),yy=Math.sin(_d);zs.x=ga*yy,zs.y=Ur*mo,zs.z=ga*Ty,lr.push(zs.x,zs.y,zs.z),ar.push(0,mo,0),ls.x=Ty*.5+.5,ls.y=yy*.5*mo+.5,cr.push(ls.x,ls.y),hr++}for(let yl=0;yl<_e;yl++){const Zl=os+yl,_d=go+yl;as===!0?zn.push(_d,_d+1,Zl):zn.push(_d+1,_d,Zl),ho+=3}Pn.addGroup(Dr,ho,as===!0?1:2),Dr+=ho}}copy(s){return super.copy(s),this.parameters=Object.assign({},s.parameters),this}static fromJSON(s){return new CylinderGeometry(s.radiusTop,s.radiusBottom,s.height,s.radialSegments,s.heightSegments,s.openEnded,s.thetaStart,s.thetaLength)}}class ConeGeometry extends CylinderGeometry{constructor(s=1,a=1,b=32,_e=1,bt=!1,rn=0,sn=Math.PI*2){super(0,s,a,b,_e,bt,rn,sn),this.type="ConeGeometry",this.parameters={radius:s,height:a,radialSegments:b,heightSegments:_e,openEnded:bt,thetaStart:rn,thetaLength:sn}}static fromJSON(s){return new ConeGeometry(s.radius,s.height,s.radialSegments,s.heightSegments,s.openEnded,s.thetaStart,s.thetaLength)}}class PolyhedronGeometry extends BufferGeometry{constructor(s=[],a=[],b=1,_e=0){super(),this.type="PolyhedronGeometry",this.parameters={vertices:s,indices:a,radius:b,detail:_e};const bt=[],rn=[];sn(_e),Pn(b),zn(),this.setAttribute("position",new Float32BufferAttribute(bt,3)),this.setAttribute("normal",new Float32BufferAttribute(bt.slice(),3)),this.setAttribute("uv",new Float32BufferAttribute(rn,2)),_e===0?this.computeVertexNormals():this.normalizeNormals();function sn(zr){const rs=new Vector3,as=new Vector3,os=new Vector3;for(let ls=0;ls<a.length;ls+=3)cr(a[ls+0],rs),cr(a[ls+1],as),cr(a[ls+2],os),yn(rs,as,os,zr)}function yn(zr,rs,as,os){const ls=os+1,zs=[];for(let ho=0;ho<=ls;ho++){zs[ho]=[];const ga=zr.clone().lerp(as,ho/ls),mo=rs.clone().lerp(as,ho/ls),go=ls-ho;for(let yl=0;yl<=go;yl++)yl===0&&ho===ls?zs[ho][yl]=ga:zs[ho][yl]=ga.clone().lerp(mo,yl/go)}for(let ho=0;ho<ls;ho++)for(let ga=0;ga<2*(ls-ho)-1;ga++){const mo=Math.floor(ga/2);ga%2===0?(ar(zs[ho][mo+1]),ar(zs[ho+1][mo]),ar(zs[ho][mo])):(ar(zs[ho][mo+1]),ar(zs[ho+1][mo+1]),ar(zs[ho+1][mo]))}}function Pn(zr){const rs=new Vector3;for(let as=0;as<bt.length;as+=3)rs.x=bt[as+0],rs.y=bt[as+1],rs.z=bt[as+2],rs.normalize().multiplyScalar(zr),bt[as+0]=rs.x,bt[as+1]=rs.y,bt[as+2]=rs.z}function zn(){const zr=new Vector3;for(let rs=0;rs<bt.length;rs+=3){zr.x=bt[rs+0],zr.y=bt[rs+1],zr.z=bt[rs+2];const as=Ur(zr)/2/Math.PI+.5,os=Dr(zr)/Math.PI+.5;rn.push(as,1-os)}hr(),lr()}function lr(){for(let zr=0;zr<rn.length;zr+=6){const rs=rn[zr+0],as=rn[zr+2],os=rn[zr+4],ls=Math.max(rs,as,os),zs=Math.min(rs,as,os);ls>.9&&zs<.1&&(rs<.2&&(rn[zr+0]+=1),as<.2&&(rn[zr+2]+=1),os<.2&&(rn[zr+4]+=1))}}function ar(zr){bt.push(zr.x,zr.y,zr.z)}function cr(zr,rs){const as=zr*3;rs.x=s[as+0],rs.y=s[as+1],rs.z=s[as+2]}function hr(){const zr=new Vector3,rs=new Vector3,as=new Vector3,os=new Vector3,ls=new Vector2,zs=new Vector2,ho=new Vector2;for(let ga=0,mo=0;ga<bt.length;ga+=9,mo+=6){zr.set(bt[ga+0],bt[ga+1],bt[ga+2]),rs.set(bt[ga+3],bt[ga+4],bt[ga+5]),as.set(bt[ga+6],bt[ga+7],bt[ga+8]),ls.set(rn[mo+0],rn[mo+1]),zs.set(rn[mo+2],rn[mo+3]),ho.set(rn[mo+4],rn[mo+5]),os.copy(zr).add(rs).add(as).divideScalar(3);const go=Ur(os);es(ls,mo+0,zr,go),es(zs,mo+2,rs,go),es(ho,mo+4,as,go)}}function es(zr,rs,as,os){os<0&&zr.x===1&&(rn[rs]=zr.x-1),as.x===0&&as.z===0&&(rn[rs]=os/2/Math.PI+.5)}function Ur(zr){return Math.atan2(zr.z,-zr.x)}function Dr(zr){return Math.atan2(-zr.y,Math.sqrt(zr.x*zr.x+zr.z*zr.z))}}copy(s){return super.copy(s),this.parameters=Object.assign({},s.parameters),this}static fromJSON(s){return new PolyhedronGeometry(s.vertices,s.indices,s.radius,s.details)}}class DodecahedronGeometry extends PolyhedronGeometry{constructor(s=1,a=0){const b=(1+Math.sqrt(5))/2,_e=1/b,bt=[-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-_e,-b,0,-_e,b,0,_e,-b,0,_e,b,-_e,-b,0,-_e,b,0,_e,-b,0,_e,b,0,-b,0,-_e,b,0,-_e,-b,0,_e,b,0,_e],rn=[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9];super(bt,rn,s,a),this.type="DodecahedronGeometry",this.parameters={radius:s,detail:a}}static fromJSON(s){return new DodecahedronGeometry(s.radius,s.detail)}}const _v0=new Vector3,_v1$1=new Vector3,_normal=new Vector3,_triangle=new Triangle;class EdgesGeometry extends BufferGeometry{constructor(s=null,a=1){if(super(),this.type="EdgesGeometry",this.parameters={geometry:s,thresholdAngle:a},s!==null){const _e=Math.pow(10,4),bt=Math.cos(DEG2RAD$1*a),rn=s.getIndex(),sn=s.getAttribute("position"),yn=rn?rn.count:sn.count,Pn=[0,0,0],zn=["a","b","c"],lr=new Array(3),ar={},cr=[];for(let hr=0;hr<yn;hr+=3){rn?(Pn[0]=rn.getX(hr),Pn[1]=rn.getX(hr+1),Pn[2]=rn.getX(hr+2)):(Pn[0]=hr,Pn[1]=hr+1,Pn[2]=hr+2);const{a:es,b:Ur,c:Dr}=_triangle;if(es.fromBufferAttribute(sn,Pn[0]),Ur.fromBufferAttribute(sn,Pn[1]),Dr.fromBufferAttribute(sn,Pn[2]),_triangle.getNormal(_normal),lr[0]=`${Math.round(es.x*_e)},${Math.round(es.y*_e)},${Math.round(es.z*_e)}`,lr[1]=`${Math.round(Ur.x*_e)},${Math.round(Ur.y*_e)},${Math.round(Ur.z*_e)}`,lr[2]=`${Math.round(Dr.x*_e)},${Math.round(Dr.y*_e)},${Math.round(Dr.z*_e)}`,!(lr[0]===lr[1]||lr[1]===lr[2]||lr[2]===lr[0]))for(let zr=0;zr<3;zr++){const rs=(zr+1)%3,as=lr[zr],os=lr[rs],ls=_triangle[zn[zr]],zs=_triangle[zn[rs]],ho=`${as}_${os}`,ga=`${os}_${as}`;ga in ar&&ar[ga]?(_normal.dot(ar[ga].normal)<=bt&&(cr.push(ls.x,ls.y,ls.z),cr.push(zs.x,zs.y,zs.z)),ar[ga]=null):ho in ar||(ar[ho]={index0:Pn[zr],index1:Pn[rs],normal:_normal.clone()})}}for(const hr in ar)if(ar[hr]){const{index0:es,index1:Ur}=ar[hr];_v0.fromBufferAttribute(sn,es),_v1$1.fromBufferAttribute(sn,Ur),cr.push(_v0.x,_v0.y,_v0.z),cr.push(_v1$1.x,_v1$1.y,_v1$1.z)}this.setAttribute("position",new Float32BufferAttribute(cr,3))}}copy(s){return super.copy(s),this.parameters=Object.assign({},s.parameters),this}}class Shape extends Path{constructor(s){super(s),this.uuid=generateUUID(),this.type="Shape",this.holes=[]}getPointsHoles(s){const a=[];for(let b=0,_e=this.holes.length;b<_e;b++)a[b]=this.holes[b].getPoints(s);return a}extractPoints(s){return{shape:this.getPoints(s),holes:this.getPointsHoles(s)}}copy(s){super.copy(s),this.holes=[];for(let a=0,b=s.holes.length;a<b;a++){const _e=s.holes[a];this.holes.push(_e.clone())}return this}toJSON(){const s=super.toJSON();s.uuid=this.uuid,s.holes=[];for(let a=0,b=this.holes.length;a<b;a++){const _e=this.holes[a];s.holes.push(_e.toJSON())}return s}fromJSON(s){super.fromJSON(s),this.uuid=s.uuid,this.holes=[];for(let a=0,b=s.holes.length;a<b;a++){const _e=s.holes[a];this.holes.push(new Path().fromJSON(_e))}return this}}const Earcut={triangulate:function(o,s,a=2){const b=s&&s.length,_e=b?s[0]*a:o.length;let bt=linkedList(o,0,_e,a,!0);const rn=[];if(!bt||bt.next===bt.prev)return rn;let sn,yn,Pn,zn,lr,ar,cr;if(b&&(bt=eliminateHoles(o,s,bt,a)),o.length>80*a){sn=Pn=o[0],yn=zn=o[1];for(let hr=a;hr<_e;hr+=a)lr=o[hr],ar=o[hr+1],lr<sn&&(sn=lr),ar<yn&&(yn=ar),lr>Pn&&(Pn=lr),ar>zn&&(zn=ar);cr=Math.max(Pn-sn,zn-yn),cr=cr!==0?32767/cr:0}return earcutLinked(bt,rn,a,sn,yn,cr,0),rn}};function linkedList(o,s,a,b,_e){let bt,rn;if(_e===signedArea(o,s,a,b)>0)for(bt=s;bt<a;bt+=b)rn=insertNode(bt,o[bt],o[bt+1],rn);else for(bt=a-b;bt>=s;bt-=b)rn=insertNode(bt,o[bt],o[bt+1],rn);return rn&&equals(rn,rn.next)&&(removeNode(rn),rn=rn.next),rn}function filterPoints(o,s){if(!o)return o;s||(s=o);let a=o,b;do if(b=!1,!a.steiner&&(equals(a,a.next)||area$1(a.prev,a,a.next)===0)){if(removeNode(a),a=s=a.prev,a===a.next)break;b=!0}else a=a.next;while(b||a!==s);return s}function earcutLinked(o,s,a,b,_e,bt,rn){if(!o)return;!rn&&bt&&indexCurve(o,b,_e,bt);let sn=o,yn,Pn;for(;o.prev!==o.next;){if(yn=o.prev,Pn=o.next,bt?isEarHashed(o,b,_e,bt):isEar(o)){s.push(yn.i/a|0),s.push(o.i/a|0),s.push(Pn.i/a|0),removeNode(o),o=Pn.next,sn=Pn.next;continue}if(o=Pn,o===sn){rn?rn===1?(o=cureLocalIntersections(filterPoints(o),s,a),earcutLinked(o,s,a,b,_e,bt,2)):rn===2&&splitEarcut(o,s,a,b,_e,bt):earcutLinked(filterPoints(o),s,a,b,_e,bt,1);break}}}function isEar(o){const s=o.prev,a=o,b=o.next;if(area$1(s,a,b)>=0)return!1;const _e=s.x,bt=a.x,rn=b.x,sn=s.y,yn=a.y,Pn=b.y,zn=_e<bt?_e<rn?_e:rn:bt<rn?bt:rn,lr=sn<yn?sn<Pn?sn:Pn:yn<Pn?yn:Pn,ar=_e>bt?_e>rn?_e:rn:bt>rn?bt:rn,cr=sn>yn?sn>Pn?sn:Pn:yn>Pn?yn:Pn;let hr=b.next;for(;hr!==s;){if(hr.x>=zn&&hr.x<=ar&&hr.y>=lr&&hr.y<=cr&&pointInTriangle(_e,sn,bt,yn,rn,Pn,hr.x,hr.y)&&area$1(hr.prev,hr,hr.next)>=0)return!1;hr=hr.next}return!0}function isEarHashed(o,s,a,b){const _e=o.prev,bt=o,rn=o.next;if(area$1(_e,bt,rn)>=0)return!1;const sn=_e.x,yn=bt.x,Pn=rn.x,zn=_e.y,lr=bt.y,ar=rn.y,cr=sn<yn?sn<Pn?sn:Pn:yn<Pn?yn:Pn,hr=zn<lr?zn<ar?zn:ar:lr<ar?lr:ar,es=sn>yn?sn>Pn?sn:Pn:yn>Pn?yn:Pn,Ur=zn>lr?zn>ar?zn:ar:lr>ar?lr:ar,Dr=zOrder(cr,hr,s,a,b),zr=zOrder(es,Ur,s,a,b);let rs=o.prevZ,as=o.nextZ;for(;rs&&rs.z>=Dr&&as&&as.z<=zr;){if(rs.x>=cr&&rs.x<=es&&rs.y>=hr&&rs.y<=Ur&&rs!==_e&&rs!==rn&&pointInTriangle(sn,zn,yn,lr,Pn,ar,rs.x,rs.y)&&area$1(rs.prev,rs,rs.next)>=0||(rs=rs.prevZ,as.x>=cr&&as.x<=es&&as.y>=hr&&as.y<=Ur&&as!==_e&&as!==rn&&pointInTriangle(sn,zn,yn,lr,Pn,ar,as.x,as.y)&&area$1(as.prev,as,as.next)>=0))return!1;as=as.nextZ}for(;rs&&rs.z>=Dr;){if(rs.x>=cr&&rs.x<=es&&rs.y>=hr&&rs.y<=Ur&&rs!==_e&&rs!==rn&&pointInTriangle(sn,zn,yn,lr,Pn,ar,rs.x,rs.y)&&area$1(rs.prev,rs,rs.next)>=0)return!1;rs=rs.prevZ}for(;as&&as.z<=zr;){if(as.x>=cr&&as.x<=es&&as.y>=hr&&as.y<=Ur&&as!==_e&&as!==rn&&pointInTriangle(sn,zn,yn,lr,Pn,ar,as.x,as.y)&&area$1(as.prev,as,as.next)>=0)return!1;as=as.nextZ}return!0}function cureLocalIntersections(o,s,a){let b=o;do{const _e=b.prev,bt=b.next.next;!equals(_e,bt)&&intersects(_e,b,b.next,bt)&&locallyInside(_e,bt)&&locallyInside(bt,_e)&&(s.push(_e.i/a|0),s.push(b.i/a|0),s.push(bt.i/a|0),removeNode(b),removeNode(b.next),b=o=bt),b=b.next}while(b!==o);return filterPoints(b)}function splitEarcut(o,s,a,b,_e,bt){let rn=o;do{let sn=rn.next.next;for(;sn!==rn.prev;){if(rn.i!==sn.i&&isValidDiagonal(rn,sn)){let yn=splitPolygon(rn,sn);rn=filterPoints(rn,rn.next),yn=filterPoints(yn,yn.next),earcutLinked(rn,s,a,b,_e,bt,0),earcutLinked(yn,s,a,b,_e,bt,0);return}sn=sn.next}rn=rn.next}while(rn!==o)}function eliminateHoles(o,s,a,b){const _e=[];let bt,rn,sn,yn,Pn;for(bt=0,rn=s.length;bt<rn;bt++)sn=s[bt]*b,yn=bt<rn-1?s[bt+1]*b:o.length,Pn=linkedList(o,sn,yn,b,!1),Pn===Pn.next&&(Pn.steiner=!0),_e.push(getLeftmost(Pn));for(_e.sort(compareX),bt=0;bt<_e.length;bt++)a=eliminateHole(_e[bt],a);return a}function compareX(o,s){return o.x-s.x}function eliminateHole(o,s){const a=findHoleBridge(o,s);if(!a)return s;const b=splitPolygon(a,o);return filterPoints(b,b.next),filterPoints(a,a.next)}function findHoleBridge(o,s){let a=s,b=-1/0,_e;const bt=o.x,rn=o.y;do{if(rn<=a.y&&rn>=a.next.y&&a.next.y!==a.y){const ar=a.x+(rn-a.y)*(a.next.x-a.x)/(a.next.y-a.y);if(ar<=bt&&ar>b&&(b=ar,_e=a.x<a.next.x?a:a.next,ar===bt))return _e}a=a.next}while(a!==s);if(!_e)return null;const sn=_e,yn=_e.x,Pn=_e.y;let zn=1/0,lr;a=_e;do bt>=a.x&&a.x>=yn&&bt!==a.x&&pointInTriangle(rn<Pn?bt:b,rn,yn,Pn,rn<Pn?b:bt,rn,a.x,a.y)&&(lr=Math.abs(rn-a.y)/(bt-a.x),locallyInside(a,o)&&(lr<zn||lr===zn&&(a.x>_e.x||a.x===_e.x&§orContainsSector(_e,a)))&&(_e=a,zn=lr)),a=a.next;while(a!==sn);return _e}function sectorContainsSector(o,s){return area$1(o.prev,o,s.prev)<0&&area$1(s.next,o,o.next)<0}function indexCurve(o,s,a,b){let _e=o;do _e.z===0&&(_e.z=zOrder(_e.x,_e.y,s,a,b)),_e.prevZ=_e.prev,_e.nextZ=_e.next,_e=_e.next;while(_e!==o);_e.prevZ.nextZ=null,_e.prevZ=null,sortLinked(_e)}function sortLinked(o){let s,a,b,_e,bt,rn,sn,yn,Pn=1;do{for(a=o,o=null,bt=null,rn=0;a;){for(rn++,b=a,sn=0,s=0;s<Pn&&(sn++,b=b.nextZ,!!b);s++);for(yn=Pn;sn>0||yn>0&&b;)sn!==0&&(yn===0||!b||a.z<=b.z)?(_e=a,a=a.nextZ,sn--):(_e=b,b=b.nextZ,yn--),bt?bt.nextZ=_e:o=_e,_e.prevZ=bt,bt=_e;a=b}bt.nextZ=null,Pn*=2}while(rn>1);return o}function zOrder(o,s,a,b,_e){return o=(o-a)*_e|0,s=(s-b)*_e|0,o=(o|o<<8)&16711935,o=(o|o<<4)&252645135,o=(o|o<<2)&858993459,o=(o|o<<1)&1431655765,s=(s|s<<8)&16711935,s=(s|s<<4)&252645135,s=(s|s<<2)&858993459,s=(s|s<<1)&1431655765,o|s<<1}function getLeftmost(o){let s=o,a=o;do(s.x<a.x||s.x===a.x&&s.y<a.y)&&(a=s),s=s.next;while(s!==o);return a}function pointInTriangle(o,s,a,b,_e,bt,rn,sn){return(_e-rn)*(s-sn)>=(o-rn)*(bt-sn)&&(o-rn)*(b-sn)>=(a-rn)*(s-sn)&&(a-rn)*(bt-sn)>=(_e-rn)*(b-sn)}function isValidDiagonal(o,s){return o.next.i!==s.i&&o.prev.i!==s.i&&!intersectsPolygon(o,s)&&(locallyInside(o,s)&&locallyInside(s,o)&&middleInside(o,s)&&(area$1(o.prev,o,s.prev)||area$1(o,s.prev,s))||equals(o,s)&&area$1(o.prev,o,o.next)>0&&area$1(s.prev,s,s.next)>0)}function area$1(o,s,a){return(s.y-o.y)*(a.x-s.x)-(s.x-o.x)*(a.y-s.y)}function equals(o,s){return o.x===s.x&&o.y===s.y}function intersects(o,s,a,b){const _e=sign(area$1(o,s,a)),bt=sign(area$1(o,s,b)),rn=sign(area$1(a,b,o)),sn=sign(area$1(a,b,s));return!!(_e!==bt&&rn!==sn||_e===0&&onSegment(o,a,s)||bt===0&&onSegment(o,b,s)||rn===0&&onSegment(a,o,b)||sn===0&&onSegment(a,s,b))}function onSegment(o,s,a){return s.x<=Math.max(o.x,a.x)&&s.x>=Math.min(o.x,a.x)&&s.y<=Math.max(o.y,a.y)&&s.y>=Math.min(o.y,a.y)}function sign(o){return o>0?1:o<0?-1:0}function intersectsPolygon(o,s){let a=o;do{if(a.i!==o.i&&a.next.i!==o.i&&a.i!==s.i&&a.next.i!==s.i&&intersects(a,a.next,o,s))return!0;a=a.next}while(a!==o);return!1}function locallyInside(o,s){return area$1(o.prev,o,o.next)<0?area$1(o,s,o.next)>=0&&area$1(o,o.prev,s)>=0:area$1(o,s,o.prev)<0||area$1(o,o.next,s)<0}function middleInside(o,s){let a=o,b=!1;const _e=(o.x+s.x)/2,bt=(o.y+s.y)/2;do a.y>bt!=a.next.y>bt&&a.next.y!==a.y&&_e<(a.next.x-a.x)*(bt-a.y)/(a.next.y-a.y)+a.x&&(b=!b),a=a.next;while(a!==o);return b}function splitPolygon(o,s){const a=new Node$2(o.i,o.x,o.y),b=new Node$2(s.i,s.x,s.y),_e=o.next,bt=s.prev;return o.next=s,s.prev=o,a.next=_e,_e.prev=a,b.next=a,a.prev=b,bt.next=b,b.prev=bt,b}function insertNode(o,s,a,b){const _e=new Node$2(o,s,a);return b?(_e.next=b.next,_e.prev=b,b.next.prev=_e,b.next=_e):(_e.prev=_e,_e.next=_e),_e}function removeNode(o){o.next.prev=o.prev,o.prev.next=o.next,o.prevZ&&(o.prevZ.nextZ=o.nextZ),o.nextZ&&(o.nextZ.prevZ=o.prevZ)}function Node$2(o,s,a){this.i=o,this.x=s,this.y=a,this.prev=null,this.next=null,this.z=0,this.prevZ=null,this.nextZ=null,this.steiner=!1}function signedArea(o,s,a,b){let _e=0;for(let bt=s,rn=a-b;bt<a;bt+=b)_e+=(o[rn]-o[bt])*(o[bt+1]+o[rn+1]),rn=bt;return _e}class ShapeUtils{static area(s){const a=s.length;let b=0;for(let _e=a-1,bt=0;bt<a;_e=bt++)b+=s[_e].x*s[bt].y-s[bt].x*s[_e].y;return b*.5}static isClockWise(s){return ShapeUtils.area(s)<0}static triangulateShape(s,a){const b=[],_e=[],bt=[];removeDupEndPts(s),addContour(b,s);let rn=s.length;a.forEach(removeDupEndPts);for(let yn=0;yn<a.length;yn++)_e.push(rn),rn+=a[yn].length,addContour(b,a[yn]);const sn=Earcut.triangulate(b,_e);for(let yn=0;yn<sn.length;yn+=3)bt.push(sn.slice(yn,yn+3));return bt}}function removeDupEndPts(o){const s=o.length;s>2&&o[s-1].equals(o[0])&&o.pop()}function addContour(o,s){for(let a=0;a<s.length;a++)o.push(s[a].x),o.push(s[a].y)}class ExtrudeGeometry extends BufferGeometry{constructor(s=new Shape([new Vector2(.5,.5),new Vector2(-.5,.5),new Vector2(-.5,-.5),new Vector2(.5,-.5)]),a={}){super(),this.type="ExtrudeGeometry",this.parameters={shapes:s,options:a},s=Array.isArray(s)?s:[s];const b=this,_e=[],bt=[];for(let sn=0,yn=s.length;sn<yn;sn++){const Pn=s[sn];rn(Pn)}this.setAttribute("position",new Float32BufferAttribute(_e,3)),this.setAttribute("uv",new Float32BufferAttribute(bt,2)),this.computeVertexNormals();function rn(sn){const yn=[],Pn=a.curveSegments!==void 0?a.curveSegments:12,zn=a.steps!==void 0?a.steps:1,lr=a.depth!==void 0?a.depth:1;let ar=a.bevelEnabled!==void 0?a.bevelEnabled:!0,cr=a.bevelThickness!==void 0?a.bevelThickness:.2,hr=a.bevelSize!==void 0?a.bevelSize:cr-.1,es=a.bevelOffset!==void 0?a.bevelOffset:0,Ur=a.bevelSegments!==void 0?a.bevelSegments:3;const Dr=a.extrudePath,zr=a.UVGenerator!==void 0?a.UVGenerator:WorldUVGenerator;let rs,as=!1,os,ls,zs,ho;Dr&&(rs=Dr.getSpacedPoints(zn),as=!0,ar=!1,os=Dr.computeFrenetFrames(zn,!1),ls=new Vector3,zs=new Vector3,ho=new Vector3),ar||(Ur=0,cr=0,hr=0,es=0);const ga=sn.extractPoints(Pn);let mo=ga.shape;const go=ga.holes;if(!ShapeUtils.isClockWise(mo)){mo=mo.reverse();for(let bA=0,FA=go.length;bA<FA;bA++){const BA=go[bA];ShapeUtils.isClockWise(BA)&&(go[bA]=BA.reverse())}}const Zl=ShapeUtils.triangulateShape(mo,go),_d=mo;for(let bA=0,FA=go.length;bA<FA;bA++){const BA=go[bA];mo=mo.concat(BA)}function Ty(bA,FA,BA){return FA||console.error("THREE.ExtrudeGeometry: vec does not exist"),bA.clone().addScaledVector(FA,BA)}const yy=mo.length,by=Zl.length;function Al(bA,FA,BA){let rE,sE,SC;const HA=bA.x-FA.x,VA=bA.y-FA.y,oC=BA.x-bA.x,pC=BA.y-bA.y,cC=HA*HA+VA*VA,qy=HA*pC-VA*oC;if(Math.abs(qy)>Number.EPSILON){const Iy=Math.sqrt(cC),kA=Math.sqrt(oC*oC+pC*pC),nE=FA.x-VA/Iy,A_=FA.y+HA/Iy,eC=BA.x-pC/kA,PC=BA.y+oC/kA,nC=((eC-nE)*pC-(PC-A_)*oC)/(HA*pC-VA*oC);rE=nE+HA*nC-bA.x,sE=A_+VA*nC-bA.y;const iE=rE*rE+sE*sE;if(iE<=2)return new Vector2(rE,sE);SC=Math.sqrt(iE/2)}else{let Iy=!1;HA>Number.EPSILON?oC>Number.EPSILON&&(Iy=!0):HA<-Number.EPSILON?oC<-Number.EPSILON&&(Iy=!0):Math.sign(VA)===Math.sign(pC)&&(Iy=!0),Iy?(rE=-VA,sE=HA,SC=Math.sqrt(cC)):(rE=HA,sE=VA,SC=Math.sqrt(cC/2))}return new Vector2(rE/SC,sE/SC)}const _f=[];for(let bA=0,FA=_d.length,BA=FA-1,rE=bA+1;bA<FA;bA++,BA++,rE++)BA===FA&&(BA=0),rE===FA&&(rE=0),_f[bA]=Al(_d[bA],_d[BA],_d[rE]);const gy=[];let El,My=_f.concat();for(let bA=0,FA=go.length;bA<FA;bA++){const BA=go[bA];El=[];for(let rE=0,sE=BA.length,SC=sE-1,HA=rE+1;rE<sE;rE++,SC++,HA++)SC===sE&&(SC=0),HA===sE&&(HA=0),El[rE]=Al(BA[rE],BA[SC],BA[HA]);gy.push(El),My=My.concat(El)}for(let bA=0;bA<Ur;bA++){const FA=bA/Ur,BA=cr*Math.cos(FA*Math.PI/2),rE=hr*Math.sin(FA*Math.PI/2)+es;for(let sE=0,SC=_d.length;sE<SC;sE++){const HA=Ty(_d[sE],_f[sE],rE);OA(HA.x,HA.y,-BA)}for(let sE=0,SC=go.length;sE<SC;sE++){const HA=go[sE];El=gy[sE];for(let VA=0,oC=HA.length;VA<oC;VA++){const pC=Ty(HA[VA],El[VA],rE);OA(pC.x,pC.y,-BA)}}}const By=hr+es;for(let bA=0;bA<yy;bA++){const FA=ar?Ty(mo[bA],My[bA],By):mo[bA];as?(zs.copy(os.normals[0]).multiplyScalar(FA.x),ls.copy(os.binormals[0]).multiplyScalar(FA.y),ho.copy(rs[0]).add(zs).add(ls),OA(ho.x,ho.y,ho.z)):OA(FA.x,FA.y,0)}for(let bA=1;bA<=zn;bA++)for(let FA=0;FA<yy;FA++){const BA=ar?Ty(mo[FA],My[FA],By):mo[FA];as?(zs.copy(os.normals[bA]).multiplyScalar(BA.x),ls.copy(os.binormals[bA]).multiplyScalar(BA.y),ho.copy(rs[bA]).add(zs).add(ls),OA(ho.x,ho.y,ho.z)):OA(BA.x,BA.y,lr/zn*bA)}for(let bA=Ur-1;bA>=0;bA--){const FA=bA/Ur,BA=cr*Math.cos(FA*Math.PI/2),rE=hr*Math.sin(FA*Math.PI/2)+es;for(let sE=0,SC=_d.length;sE<SC;sE++){const HA=Ty(_d[sE],_f[sE],rE);OA(HA.x,HA.y,lr+BA)}for(let sE=0,SC=go.length;sE<SC;sE++){const HA=go[sE];El=gy[sE];for(let VA=0,oC=HA.length;VA<oC;VA++){const pC=Ty(HA[VA],El[VA],rE);as?OA(pC.x,pC.y+rs[zn-1].y,rs[zn-1].x+BA):OA(pC.x,pC.y,lr+BA)}}}lA(),wA();function lA(){const bA=_e.length/3;if(ar){let FA=0,BA=yy*FA;for(let rE=0;rE<by;rE++){const sE=Zl[rE];UA(sE[2]+BA,sE[1]+BA,sE[0]+BA)}FA=zn+Ur*2,BA=yy*FA;for(let rE=0;rE<by;rE++){const sE=Zl[rE];UA(sE[0]+BA,sE[1]+BA,sE[2]+BA)}}else{for(let FA=0;FA<by;FA++){const BA=Zl[FA];UA(BA[2],BA[1],BA[0])}for(let FA=0;FA<by;FA++){const BA=Zl[FA];UA(BA[0]+yy*zn,BA[1]+yy*zn,BA[2]+yy*zn)}}b.addGroup(bA,_e.length/3-bA,0)}function wA(){const bA=_e.length/3;let FA=0;Fy(_d,FA),FA+=_d.length;for(let BA=0,rE=go.length;BA<rE;BA++){const sE=go[BA];Fy(sE,FA),FA+=sE.length}b.addGroup(bA,_e.length/3-bA,1)}function Fy(bA,FA){let BA=bA.length;for(;--BA>=0;){const rE=BA;let sE=BA-1;sE<0&&(sE=bA.length-1);for(let SC=0,HA=zn+Ur*2;SC<HA;SC++){const VA=yy*SC,oC=yy*(SC+1),pC=FA+rE+VA,cC=FA+sE+VA,qy=FA+sE+oC,Iy=FA+rE+oC;$A(pC,cC,qy,Iy)}}}function OA(bA,FA,BA){yn.push(bA),yn.push(FA),yn.push(BA)}function UA(bA,FA,BA){YA(bA),YA(FA),YA(BA);const rE=_e.length/3,sE=zr.generateTopUV(b,_e,rE-3,rE-2,rE-1);WA(sE[0]),WA(sE[1]),WA(sE[2])}function $A(bA,FA,BA,rE){YA(bA),YA(FA),YA(rE),YA(FA),YA(BA),YA(rE);const sE=_e.length/3,SC=zr.generateSideWallUV(b,_e,sE-6,sE-3,sE-2,sE-1);WA(SC[0]),WA(SC[1]),WA(SC[3]),WA(SC[1]),WA(SC[2]),WA(SC[3])}function YA(bA){_e.push(yn[bA*3+0]),_e.push(yn[bA*3+1]),_e.push(yn[bA*3+2])}function WA(bA){bt.push(bA.x),bt.push(bA.y)}}}copy(s){return super.copy(s),this.parameters=Object.assign({},s.parameters),this}toJSON(){const s=super.toJSON(),a=this.parameters.shapes,b=this.parameters.options;return toJSON$1(a,b,s)}static fromJSON(s,a){const b=[];for(let bt=0,rn=s.shapes.length;bt<rn;bt++){const sn=a[s.shapes[bt]];b.push(sn)}const _e=s.options.extrudePath;return _e!==void 0&&(s.options.extrudePath=new Curves[_e.type]().fromJSON(_e)),new ExtrudeGeometry(b,s.options)}}const WorldUVGenerator={generateTopUV:function(o,s,a,b,_e){const bt=s[a*3],rn=s[a*3+1],sn=s[b*3],yn=s[b*3+1],Pn=s[_e*3],zn=s[_e*3+1];return[new Vector2(bt,rn),new Vector2(sn,yn),new Vector2(Pn,zn)]},generateSideWallUV:function(o,s,a,b,_e,bt){const rn=s[a*3],sn=s[a*3+1],yn=s[a*3+2],Pn=s[b*3],zn=s[b*3+1],lr=s[b*3+2],ar=s[_e*3],cr=s[_e*3+1],hr=s[_e*3+2],es=s[bt*3],Ur=s[bt*3+1],Dr=s[bt*3+2];return Math.abs(sn-zn)<Math.abs(rn-Pn)?[new Vector2(rn,1-yn),new Vector2(Pn,1-lr),new Vector2(ar,1-hr),new Vector2(es,1-Dr)]:[new Vector2(sn,1-yn),new Vector2(zn,1-lr),new Vector2(cr,1-hr),new Vector2(Ur,1-Dr)]}};function toJSON$1(o,s,a){if(a.shapes=[],Array.isArray(o))for(let b=0,_e=o.length;b<_e;b++){const bt=o[b];a.shapes.push(bt.uuid)}else a.shapes.push(o.uuid);return a.options=Object.assign({},s),s.extrudePath!==void 0&&(a.options.extrudePath=s.extrudePath.toJSON()),a}class IcosahedronGeometry extends PolyhedronGeometry{constructor(s=1,a=0){const b=(1+Math.sqrt(5))/2,_e=[-1,b,0,1,b,0,-1,-b,0,1,-b,0,0,-1,b,0,1,b,0,-1,-b,0,1,-b,b,0,-1,b,0,1,-b,0,-1,-b,0,1],bt=[0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5,11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1];super(_e,bt,s,a),this.type="IcosahedronGeometry",this.parameters={radius:s,detail:a}}static fromJSON(s){return new IcosahedronGeometry(s.radius,s.detail)}}class OctahedronGeometry extends PolyhedronGeometry{constructor(s=1,a=0){const b=[1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1],_e=[0,2,4,0,4,3,0,3,5,0,5,2,1,2,5,1,5,3,1,3,4,1,4,2];super(b,_e,s,a),this.type="OctahedronGeometry",this.parameters={radius:s,detail:a}}static fromJSON(s){return new OctahedronGeometry(s.radius,s.detail)}}class RingGeometry extends BufferGeometry{constructor(s=.5,a=1,b=32,_e=1,bt=0,rn=Math.PI*2){super(),this.type="RingGeometry",this.parameters={innerRadius:s,outerRadius:a,thetaSegments:b,phiSegments:_e,thetaStart:bt,thetaLength:rn},b=Math.max(3,b),_e=Math.max(1,_e);const sn=[],yn=[],Pn=[],zn=[];let lr=s;const ar=(a-s)/_e,cr=new Vector3,hr=new Vector2;for(let es=0;es<=_e;es++){for(let Ur=0;Ur<=b;Ur++){const Dr=bt+Ur/b*rn;cr.x=lr*Math.cos(Dr),cr.y=lr*Math.sin(Dr),yn.push(cr.x,cr.y,cr.z),Pn.push(0,0,1),hr.x=(cr.x/a+1)/2,hr.y=(cr.y/a+1)/2,zn.push(hr.x,hr.y)}lr+=ar}for(let es=0;es<_e;es++){const Ur=es*(b+1);for(let Dr=0;Dr<b;Dr++){const zr=Dr+Ur,rs=zr,as=zr+b+1,os=zr+b+2,ls=zr+1;sn.push(rs,as,ls),sn.push(as,os,ls)}}this.setIndex(sn),this.setAttribute("position",new Float32BufferAttribute(yn,3)),this.setAttribute("normal",new Float32BufferAttribute(Pn,3)),this.setAttribute("uv",new Float32BufferAttribute(zn,2))}copy(s){return super.copy(s),this.parameters=Object.assign({},s.parameters),this}static fromJSON(s){return new RingGeometry(s.innerRadius,s.outerRadius,s.thetaSegments,s.phiSegments,s.thetaStart,s.thetaLength)}}class ShapeGeometry extends BufferGeometry{constructor(s=new Shape([new Vector2(0,.5),new Vector2(-.5,-.5),new Vector2(.5,-.5)]),a=12){super(),this.type="ShapeGeometry",this.parameters={shapes:s,curveSegments:a};const b=[],_e=[],bt=[],rn=[];let sn=0,yn=0;if(Array.isArray(s)===!1)Pn(s);else for(let zn=0;zn<s.length;zn++)Pn(s[zn]),this.addGroup(sn,yn,zn),sn+=yn,yn=0;this.setIndex(b),this.setAttribute("position",new Float32BufferAttribute(_e,3)),this.setAttribute("normal",new Float32BufferAttribute(bt,3)),this.setAttribute("uv",new Float32BufferAttribute(rn,2));function Pn(zn){const lr=_e.length/3,ar=zn.extractPoints(a);let cr=ar.shape;const hr=ar.holes;ShapeUtils.isClockWise(cr)===!1&&(cr=cr.reverse());for(let Ur=0,Dr=hr.length;Ur<Dr;Ur++){const zr=hr[Ur];ShapeUtils.isClockWise(zr)===!0&&(hr[Ur]=zr.reverse())}const es=ShapeUtils.triangulateShape(cr,hr);for(let Ur=0,Dr=hr.length;Ur<Dr;Ur++){const zr=hr[Ur];cr=cr.concat(zr)}for(let Ur=0,Dr=cr.length;Ur<Dr;Ur++){const zr=cr[Ur];_e.push(zr.x,zr.y,0),bt.push(0,0,1),rn.push(zr.x,zr.y)}for(let Ur=0,Dr=es.length;Ur<Dr;Ur++){const zr=es[Ur],rs=zr[0]+lr,as=zr[1]+lr,os=zr[2]+lr;b.push(rs,as,os),yn+=3}}}copy(s){return super.copy(s),this.parameters=Object.assign({},s.parameters),this}toJSON(){const s=super.toJSON(),a=this.parameters.shapes;return toJSON(a,s)}static fromJSON(s,a){const b=[];for(let _e=0,bt=s.shapes.length;_e<bt;_e++){const rn=a[s.shapes[_e]];b.push(rn)}return new ShapeGeometry(b,s.curveSegments)}}function toJSON(o,s){if(s.shapes=[],Array.isArray(o))for(let a=0,b=o.length;a<b;a++){const _e=o[a];s.shapes.push(_e.uuid)}else s.shapes.push(o.uuid);return s}class SphereGeometry extends BufferGeometry{constructor(s=1,a=32,b=16,_e=0,bt=Math.PI*2,rn=0,sn=Math.PI){super(),this.type="SphereGeometry",this.parameters={radius:s,widthSegments:a,heightSegments:b,phiStart:_e,phiLength:bt,thetaStart:rn,thetaLength:sn},a=Math.max(3,Math.floor(a)),b=Math.max(2,Math.floor(b));const yn=Math.min(rn+sn,Math.PI);let Pn=0;const zn=[],lr=new Vector3,ar=new Vector3,cr=[],hr=[],es=[],Ur=[];for(let Dr=0;Dr<=b;Dr++){const zr=[],rs=Dr/b;let as=0;Dr===0&&rn===0?as=.5/a:Dr===b&&yn===Math.PI&&(as=-.5/a);for(let os=0;os<=a;os++){const ls=os/a;lr.x=-s*Math.cos(_e+ls*bt)*Math.sin(rn+rs*sn),lr.y=s*Math.cos(rn+rs*sn),lr.z=s*Math.sin(_e+ls*bt)*Math.sin(rn+rs*sn),hr.push(lr.x,lr.y,lr.z),ar.copy(lr).normalize(),es.push(ar.x,ar.y,ar.z),Ur.push(ls+as,1-rs),zr.push(Pn++)}zn.push(zr)}for(let Dr=0;Dr<b;Dr++)for(let zr=0;zr<a;zr++){const rs=zn[Dr][zr+1],as=zn[Dr][zr],os=zn[Dr+1][zr],ls=zn[Dr+1][zr+1];(Dr!==0||rn>0)&&cr.push(rs,as,ls),(Dr!==b-1||yn<Math.PI)&&cr.push(as,os,ls)}this.setIndex(cr),this.setAttribute("position",new Float32BufferAttribute(hr,3)),this.setAttribute("normal",new Float32BufferAttribute(es,3)),this.setAttribute("uv",new Float32BufferAttribute(Ur,2))}copy(s){return super.copy(s),this.parameters=Object.assign({},s.parameters),this}static fromJSON(s){return new SphereGeometry(s.radius,s.widthSegments,s.heightSegments,s.phiStart,s.phiLength,s.thetaStart,s.thetaLength)}}class TetrahedronGeometry extends PolyhedronGeometry{constructor(s=1,a=0){const b=[1,1,1,-1,-1,1,-1,1,-1,1,-1,-1],_e=[2,1,0,0,3,2,1,3,0,2,3,1];super(b,_e,s,a),this.type="TetrahedronGeometry",this.parameters={radius:s,detail:a}}static fromJSON(s){return new TetrahedronGeometry(s.radius,s.detail)}}class TorusGeometry extends BufferGeometry{constructor(s=1,a=.4,b=12,_e=48,bt=Math.PI*2){super(),this.type="TorusGeometry",this.parameters={radius:s,tube:a,radialSegments:b,tubularSegments:_e,arc:bt},b=Math.floor(b),_e=Math.floor(_e);const rn=[],sn=[],yn=[],Pn=[],zn=new Vector3,lr=new Vector3,ar=new Vector3;for(let cr=0;cr<=b;cr++)for(let hr=0;hr<=_e;hr++){const es=hr/_e*bt,Ur=cr/b*Math.PI*2;lr.x=(s+a*Math.cos(Ur))*Math.cos(es),lr.y=(s+a*Math.cos(Ur))*Math.sin(es),lr.z=a*Math.sin(Ur),sn.push(lr.x,lr.y,lr.z),zn.x=s*Math.cos(es),zn.y=s*Math.sin(es),ar.subVectors(lr,zn).normalize(),yn.push(ar.x,ar.y,ar.z),Pn.push(hr/_e),Pn.push(cr/b)}for(let cr=1;cr<=b;cr++)for(let hr=1;hr<=_e;hr++){const es=(_e+1)*cr+hr-1,Ur=(_e+1)*(cr-1)+hr-1,Dr=(_e+1)*(cr-1)+hr,zr=(_e+1)*cr+hr;rn.push(es,Ur,zr),rn.push(Ur,Dr,zr)}this.setIndex(rn),this.setAttribute("position",new Float32BufferAttribute(sn,3)),this.setAttribute("normal",new Float32BufferAttribute(yn,3)),this.setAttribute("uv",new Float32BufferAttribute(Pn,2))}copy(s){return super.copy(s),this.parameters=Object.assign({},s.parameters),this}static fromJSON(s){return new TorusGeometry(s.radius,s.tube,s.radialSegments,s.tubularSegments,s.arc)}}class TorusKnotGeometry extends BufferGeometry{constructor(s=1,a=.4,b=64,_e=8,bt=2,rn=3){super(),this.type="TorusKnotGeometry",this.parameters={radius:s,tube:a,tubularSegments:b,radialSegments:_e,p:bt,q:rn},b=Math.floor(b),_e=Math.floor(_e);const sn=[],yn=[],Pn=[],zn=[],lr=new Vector3,ar=new Vector3,cr=new Vector3,hr=new Vector3,es=new Vector3,Ur=new Vector3,Dr=new Vector3;for(let rs=0;rs<=b;++rs){const as=rs/b*bt*Math.PI*2;zr(as,bt,rn,s,cr),zr(as+.01,bt,rn,s,hr),Ur.subVectors(hr,cr),Dr.addVectors(hr,cr),es.crossVectors(Ur,Dr),Dr.crossVectors(es,Ur),es.normalize(),Dr.normalize();for(let os=0;os<=_e;++os){const ls=os/_e*Math.PI*2,zs=-a*Math.cos(ls),ho=a*Math.sin(ls);lr.x=cr.x+(zs*Dr.x+ho*es.x),lr.y=cr.y+(zs*Dr.y+ho*es.y),lr.z=cr.z+(zs*Dr.z+ho*es.z),yn.push(lr.x,lr.y,lr.z),ar.subVectors(lr,cr).normalize(),Pn.push(ar.x,ar.y,ar.z),zn.push(rs/b),zn.push(os/_e)}}for(let rs=1;rs<=b;rs++)for(let as=1;as<=_e;as++){const os=(_e+1)*(rs-1)+(as-1),ls=(_e+1)*rs+(as-1),zs=(_e+1)*rs+as,ho=(_e+1)*(rs-1)+as;sn.push(os,ls,ho),sn.push(ls,zs,ho)}this.setIndex(sn),this.setAttribute("position",new Float32BufferAttribute(yn,3)),this.setAttribute("normal",new Float32BufferAttribute(Pn,3)),this.setAttribute("uv",new Float32BufferAttribute(zn,2));function zr(rs,as,os,ls,zs){const ho=Math.cos(rs),ga=Math.sin(rs),mo=os/as*rs,go=Math.cos(mo);zs.x=ls*(2+go)*.5*ho,zs.y=ls*(2+go)*ga*.5,zs.z=ls*Math.sin(mo)*.5}}copy(s){return super.copy(s),this.parameters=Object.assign({},s.parameters),this}static fromJSON(s){return new TorusKnotGeometry(s.radius,s.tube,s.tubularSegments,s.radialSegments,s.p,s.q)}}class TubeGeometry extends BufferGeometry{constructor(s=new QuadraticBezierCurve3(new Vector3(-1,-1,0),new Vector3(-1,1,0),new Vector3(1,1,0)),a=64,b=1,_e=8,bt=!1){super(),this.type="TubeGeometry",this.parameters={path:s,tubularSegments:a,radius:b,radialSegments:_e,closed:bt};const rn=s.computeFrenetFrames(a,bt);this.tangents=rn.tangents,this.normals=rn.normals,this.binormals=rn.binormals;const sn=new Vector3,yn=new Vector3,Pn=new Vector2;let zn=new Vector3;const lr=[],ar=[],cr=[],hr=[];es(),this.setIndex(hr),this.setAttribute("position",new Float32BufferAttribute(lr,3)),this.setAttribute("normal",new Float32BufferAttribute(ar,3)),this.setAttribute("uv",new Float32BufferAttribute(cr,2));function es(){for(let rs=0;rs<a;rs++)Ur(rs);Ur(bt===!1?a:0),zr(),Dr()}function Ur(rs){zn=s.getPointAt(rs/a,zn);const as=rn.normals[rs],os=rn.binormals[rs];for(let ls=0;ls<=_e;ls++){const zs=ls/_e*Math.PI*2,ho=Math.sin(zs),ga=-Math.cos(zs);yn.x=ga*as.x+ho*os.x,yn.y=ga*as.y+ho*os.y,yn.z=ga*as.z+ho*os.z,yn.normalize(),ar.push(yn.x,yn.y,yn.z),sn.x=zn.x+b*yn.x,sn.y=zn.y+b*yn.y,sn.z=zn.z+b*yn.z,lr.push(sn.x,sn.y,sn.z)}}function Dr(){for(let rs=1;rs<=a;rs++)for(let as=1;as<=_e;as++){const os=(_e+1)*(rs-1)+(as-1),ls=(_e+1)*rs+(as-1),zs=(_e+1)*rs+as,ho=(_e+1)*(rs-1)+as;hr.push(os,ls,ho),hr.push(ls,zs,ho)}}function zr(){for(let rs=0;rs<=a;rs++)for(let as=0;as<=_e;as++)Pn.x=rs/a,Pn.y=as/_e,cr.push(Pn.x,Pn.y)}}copy(s){return super.copy(s),this.parameters=Object.assign({},s.parameters),this}toJSON(){const s=super.toJSON();return s.path=this.parameters.path.toJSON(),s}static fromJSON(s){return new TubeGeometry(new Curves[s.path.type]().fromJSON(s.path),s.tubularSegments,s.radius,s.radialSegments,s.closed)}}class WireframeGeometry extends BufferGeometry{constructor(s=null){if(super(),this.type="WireframeGeometry",this.parameters={geometry:s},s!==null){const a=[],b=new Set,_e=new Vector3,bt=new Vector3;if(s.index!==null){const rn=s.attributes.position,sn=s.index;let yn=s.groups;yn.length===0&&(yn=[{start:0,count:sn.count,materialIndex:0}]);for(let Pn=0,zn=yn.length;Pn<zn;++Pn){const lr=yn[Pn],ar=lr.start,cr=lr.count;for(let hr=ar,es=ar+cr;hr<es;hr+=3)for(let Ur=0;Ur<3;Ur++){const Dr=sn.getX(hr+Ur),zr=sn.getX(hr+(Ur+1)%3);_e.fromBufferAttribute(rn,Dr),bt.fromBufferAttribute(rn,zr),isUniqueEdge(_e,bt,b)===!0&&(a.push(_e.x,_e.y,_e.z),a.push(bt.x,bt.y,bt.z))}}}else{const rn=s.attributes.position;for(let sn=0,yn=rn.count/3;sn<yn;sn++)for(let Pn=0;Pn<3;Pn++){const zn=3*sn+Pn,lr=3*sn+(Pn+1)%3;_e.fromBufferAttribute(rn,zn),bt.fromBufferAttribute(rn,lr),isUniqueEdge(_e,bt,b)===!0&&(a.push(_e.x,_e.y,_e.z),a.push(bt.x,bt.y,bt.z))}}this.setAttribute("position",new Float32BufferAttribute(a,3))}}copy(s){return super.copy(s),this.parameters=Object.assign({},s.parameters),this}}function isUniqueEdge(o,s,a){const b=`${o.x},${o.y},${o.z}-${s.x},${s.y},${s.z}`,_e=`${s.x},${s.y},${s.z}-${o.x},${o.y},${o.z}`;return a.has(b)===!0||a.has(_e)===!0?!1:(a.add(b),a.add(_e),!0)}var Geometries=Object.freeze({__proto__:null,BoxGeometry,CapsuleGeometry,CircleGeometry,ConeGeometry,CylinderGeometry,DodecahedronGeometry,EdgesGeometry,ExtrudeGeometry,IcosahedronGeometry,LatheGeometry,OctahedronGeometry,PlaneGeometry,PolyhedronGeometry,RingGeometry,ShapeGeometry,SphereGeometry,TetrahedronGeometry,TorusGeometry,TorusKnotGeometry,TubeGeometry,WireframeGeometry});class ShadowMaterial extends Material{constructor(s){super(),this.isShadowMaterial=!0,this.type="ShadowMaterial",this.color=new Color$1(0),this.transparent=!0,this.fog=!0,this.setValues(s)}copy(s){return super.copy(s),this.color.copy(s.color),this.fog=s.fog,this}}class RawShaderMaterial extends ShaderMaterial{constructor(s){super(s),this.isRawShaderMaterial=!0,this.type="RawShaderMaterial"}}class MeshStandardMaterial extends Material{constructor(s){super(),this.isMeshStandardMaterial=!0,this.defines={STANDARD:""},this.type="MeshStandardMaterial",this.color=new Color$1(16777215),this.roughness=1,this.metalness=0,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Color$1(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=TangentSpaceNormalMap,this.normalScale=new Vector2(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.roughnessMap=null,this.metalnessMap=null,this.alphaMap=null,this.envMap=null,this.envMapIntensity=1,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(s)}copy(s){return super.copy(s),this.defines={STANDARD:""},this.color.copy(s.color),this.roughness=s.roughness,this.metalness=s.metalness,this.map=s.map,this.lightMap=s.lightMap,this.lightMapIntensity=s.lightMapIntensity,this.aoMap=s.aoMap,this.aoMapIntensity=s.aoMapIntensity,this.emissive.copy(s.emissive),this.emissiveMap=s.emissiveMap,this.emissiveIntensity=s.emissiveIntensity,this.bumpMap=s.bumpMap,this.bumpScale=s.bumpScale,this.normalMap=s.normalMap,this.normalMapType=s.normalMapType,this.normalScale.copy(s.normalScale),this.displacementMap=s.displacementMap,this.displacementScale=s.displacementScale,this.displacementBias=s.displacementBias,this.roughnessMap=s.roughnessMap,this.metalnessMap=s.metalnessMap,this.alphaMap=s.alphaMap,this.envMap=s.envMap,this.envMapIntensity=s.envMapIntensity,this.wireframe=s.wireframe,this.wireframeLinewidth=s.wireframeLinewidth,this.wireframeLinecap=s.wireframeLinecap,this.wireframeLinejoin=s.wireframeLinejoin,this.flatShading=s.flatShading,this.fog=s.fog,this}}class MeshPhysicalMaterial extends MeshStandardMaterial{constructor(s){super(),this.isMeshPhysicalMaterial=!0,this.defines={STANDARD:"",PHYSICAL:""},this.type="MeshPhysicalMaterial",this.anisotropyRotation=0,this.anisotropyMap=null,this.clearcoatMap=null,this.clearcoatRoughness=0,this.clearcoatRoughnessMap=null,this.clearcoatNormalScale=new Vector2(1,1),this.clearcoatNormalMap=null,this.ior=1.5,Object.defineProperty(this,"reflectivity",{get:function(){return clamp$2(2.5*(this.ior-1)/(this.ior+1),0,1)},set:function(a){this.ior=(1+.4*a)/(1-.4*a)}}),this.iridescenceMap=null,this.iridescenceIOR=1.3,this.iridescenceThicknessRange=[100,400],this.iridescenceThicknessMap=null,this.sheenColor=new Color$1(0),this.sheenColorMap=null,this.sheenRoughness=1,this.sheenRoughnessMap=null,this.transmissionMap=null,this.thickness=0,this.thicknessMap=null,this.attenuationDistance=1/0,this.attenuationColor=new Color$1(1,1,1),this.specularIntensity=1,this.specularIntensityMap=null,this.specularColor=new Color$1(1,1,1),this.specularColorMap=null,this._anisotropy=0,this._clearcoat=0,this._iridescence=0,this._sheen=0,this._transmission=0,this.setValues(s)}get anisotropy(){return this._anisotropy}set anisotropy(s){this._anisotropy>0!=s>0&&this.version++,this._anisotropy=s}get clearcoat(){return this._clearcoat}set clearcoat(s){this._clearcoat>0!=s>0&&this.version++,this._clearcoat=s}get iridescence(){return this._iridescence}set iridescence(s){this._iridescence>0!=s>0&&this.version++,this._iridescence=s}get sheen(){return this._sheen}set sheen(s){this._sheen>0!=s>0&&this.version++,this._sheen=s}get transmission(){return this._transmission}set transmission(s){this._transmission>0!=s>0&&this.version++,this._transmission=s}copy(s){return super.copy(s),this.defines={STANDARD:"",PHYSICAL:""},this.anisotropy=s.anisotropy,this.anisotropyRotation=s.anisotropyRotation,this.anisotropyMap=s.anisotropyMap,this.clearcoat=s.clearcoat,this.clearcoatMap=s.clearcoatMap,this.clearcoatRoughness=s.clearcoatRoughness,this.clearcoatRoughnessMap=s.clearcoatRoughnessMap,this.clearcoatNormalMap=s.clearcoatNormalMap,this.clearcoatNormalScale.copy(s.clearcoatNormalScale),this.ior=s.ior,this.iridescence=s.iridescence,this.iridescenceMap=s.iridescenceMap,this.iridescenceIOR=s.iridescenceIOR,this.iridescenceThicknessRange=[...s.iridescenceThicknessRange],this.iridescenceThicknessMap=s.iridescenceThicknessMap,this.sheen=s.sheen,this.sheenColor.copy(s.sheenColor),this.sheenColorMap=s.sheenColorMap,this.sheenRoughness=s.sheenRoughness,this.sheenRoughnessMap=s.sheenRoughnessMap,this.transmission=s.transmission,this.transmissionMap=s.transmissionMap,this.thickness=s.thickness,this.thicknessMap=s.thicknessMap,this.attenuationDistance=s.attenuationDistance,this.attenuationColor.copy(s.attenuationColor),this.specularIntensity=s.specularIntensity,this.specularIntensityMap=s.specularIntensityMap,this.specularColor.copy(s.specularColor),this.specularColorMap=s.specularColorMap,this}}class MeshPhongMaterial extends Material{constructor(s){super(),this.isMeshPhongMaterial=!0,this.type="MeshPhongMaterial",this.color=new Color$1(16777215),this.specular=new Color$1(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Color$1(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=TangentSpaceNormalMap,this.normalScale=new Vector2(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=MultiplyOperation,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(s)}copy(s){return super.copy(s),this.color.copy(s.color),this.specular.copy(s.specular),this.shininess=s.shininess,this.map=s.map,this.lightMap=s.lightMap,this.lightMapIntensity=s.lightMapIntensity,this.aoMap=s.aoMap,this.aoMapIntensity=s.aoMapIntensity,this.emissive.copy(s.emissive),this.emissiveMap=s.emissiveMap,this.emissiveIntensity=s.emissiveIntensity,this.bumpMap=s.bumpMap,this.bumpScale=s.bumpScale,this.normalMap=s.normalMap,this.normalMapType=s.normalMapType,this.normalScale.copy(s.normalScale),this.displacementMap=s.displacementMap,this.displacementScale=s.displacementScale,this.displacementBias=s.displacementBias,this.specularMap=s.specularMap,this.alphaMap=s.alphaMap,this.envMap=s.envMap,this.combine=s.combine,this.reflectivity=s.reflectivity,this.refractionRatio=s.refractionRatio,this.wireframe=s.wireframe,this.wireframeLinewidth=s.wireframeLinewidth,this.wireframeLinecap=s.wireframeLinecap,this.wireframeLinejoin=s.wireframeLinejoin,this.flatShading=s.flatShading,this.fog=s.fog,this}}class MeshToonMaterial extends Material{constructor(s){super(),this.isMeshToonMaterial=!0,this.defines={TOON:""},this.type="MeshToonMaterial",this.color=new Color$1(16777215),this.map=null,this.gradientMap=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Color$1(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=TangentSpaceNormalMap,this.normalScale=new Vector2(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(s)}copy(s){return super.copy(s),this.color.copy(s.color),this.map=s.map,this.gradientMap=s.gradientMap,this.lightMap=s.lightMap,this.lightMapIntensity=s.lightMapIntensity,this.aoMap=s.aoMap,this.aoMapIntensity=s.aoMapIntensity,this.emissive.copy(s.emissive),this.emissiveMap=s.emissiveMap,this.emissiveIntensity=s.emissiveIntensity,this.bumpMap=s.bumpMap,this.bumpScale=s.bumpScale,this.normalMap=s.normalMap,this.normalMapType=s.normalMapType,this.normalScale.copy(s.normalScale),this.displacementMap=s.displacementMap,this.displacementScale=s.displacementScale,this.displacementBias=s.displacementBias,this.alphaMap=s.alphaMap,this.wireframe=s.wireframe,this.wireframeLinewidth=s.wireframeLinewidth,this.wireframeLinecap=s.wireframeLinecap,this.wireframeLinejoin=s.wireframeLinejoin,this.fog=s.fog,this}}class MeshNormalMaterial extends Material{constructor(s){super(),this.isMeshNormalMaterial=!0,this.type="MeshNormalMaterial",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=TangentSpaceNormalMap,this.normalScale=new Vector2(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.flatShading=!1,this.setValues(s)}copy(s){return super.copy(s),this.bumpMap=s.bumpMap,this.bumpScale=s.bumpScale,this.normalMap=s.normalMap,this.normalMapType=s.normalMapType,this.normalScale.copy(s.normalScale),this.displacementMap=s.displacementMap,this.displacementScale=s.displacementScale,this.displacementBias=s.displacementBias,this.wireframe=s.wireframe,this.wireframeLinewidth=s.wireframeLinewidth,this.flatShading=s.flatShading,this}}class MeshLambertMaterial extends Material{constructor(s){super(),this.isMeshLambertMaterial=!0,this.type="MeshLambertMaterial",this.color=new Color$1(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Color$1(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=TangentSpaceNormalMap,this.normalScale=new Vector2(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=MultiplyOperation,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(s)}copy(s){return super.copy(s),this.color.copy(s.color),this.map=s.map,this.lightMap=s.lightMap,this.lightMapIntensity=s.lightMapIntensity,this.aoMap=s.aoMap,this.aoMapIntensity=s.aoMapIntensity,this.emissive.copy(s.emissive),this.emissiveMap=s.emissiveMap,this.emissiveIntensity=s.emissiveIntensity,this.bumpMap=s.bumpMap,this.bumpScale=s.bumpScale,this.normalMap=s.normalMap,this.normalMapType=s.normalMapType,this.normalScale.copy(s.normalScale),this.displacementMap=s.displacementMap,this.displacementScale=s.displacementScale,this.displacementBias=s.displacementBias,this.specularMap=s.specularMap,this.alphaMap=s.alphaMap,this.envMap=s.envMap,this.combine=s.combine,this.reflectivity=s.reflectivity,this.refractionRatio=s.refractionRatio,this.wireframe=s.wireframe,this.wireframeLinewidth=s.wireframeLinewidth,this.wireframeLinecap=s.wireframeLinecap,this.wireframeLinejoin=s.wireframeLinejoin,this.flatShading=s.flatShading,this.fog=s.fog,this}}class MeshMatcapMaterial extends Material{constructor(s){super(),this.isMeshMatcapMaterial=!0,this.defines={MATCAP:""},this.type="MeshMatcapMaterial",this.color=new Color$1(16777215),this.matcap=null,this.map=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=TangentSpaceNormalMap,this.normalScale=new Vector2(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.flatShading=!1,this.fog=!0,this.setValues(s)}copy(s){return super.copy(s),this.defines={MATCAP:""},this.color.copy(s.color),this.matcap=s.matcap,this.map=s.map,this.bumpMap=s.bumpMap,this.bumpScale=s.bumpScale,this.normalMap=s.normalMap,this.normalMapType=s.normalMapType,this.normalScale.copy(s.normalScale),this.displacementMap=s.displacementMap,this.displacementScale=s.displacementScale,this.displacementBias=s.displacementBias,this.alphaMap=s.alphaMap,this.flatShading=s.flatShading,this.fog=s.fog,this}}class LineDashedMaterial extends LineBasicMaterial{constructor(s){super(),this.isLineDashedMaterial=!0,this.type="LineDashedMaterial",this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(s)}copy(s){return super.copy(s),this.scale=s.scale,this.dashSize=s.dashSize,this.gapSize=s.gapSize,this}}function convertArray(o,s,a){return!o||!a&&o.constructor===s?o:typeof s.BYTES_PER_ELEMENT=="number"?new s(o):Array.prototype.slice.call(o)}function isTypedArray(o){return ArrayBuffer.isView(o)&&!(o instanceof DataView)}function getKeyframeOrder(o){function s(_e,bt){return o[_e]-o[bt]}const a=o.length,b=new Array(a);for(let _e=0;_e!==a;++_e)b[_e]=_e;return b.sort(s),b}function sortedArray(o,s,a){const b=o.length,_e=new o.constructor(b);for(let bt=0,rn=0;rn!==b;++bt){const sn=a[bt]*s;for(let yn=0;yn!==s;++yn)_e[rn++]=o[sn+yn]}return _e}function flattenJSON(o,s,a,b){let _e=1,bt=o[0];for(;bt!==void 0&&bt[b]===void 0;)bt=o[_e++];if(bt===void 0)return;let rn=bt[b];if(rn!==void 0)if(Array.isArray(rn))do rn=bt[b],rn!==void 0&&(s.push(bt.time),a.push.apply(a,rn)),bt=o[_e++];while(bt!==void 0);else if(rn.toArray!==void 0)do rn=bt[b],rn!==void 0&&(s.push(bt.time),rn.toArray(a,a.length)),bt=o[_e++];while(bt!==void 0);else do rn=bt[b],rn!==void 0&&(s.push(bt.time),a.push(rn)),bt=o[_e++];while(bt!==void 0)}function subclip(o,s,a,b,_e=30){const bt=o.clone();bt.name=s;const rn=[];for(let yn=0;yn<bt.tracks.length;++yn){const Pn=bt.tracks[yn],zn=Pn.getValueSize(),lr=[],ar=[];for(let cr=0;cr<Pn.times.length;++cr){const hr=Pn.times[cr]*_e;if(!(hr<a||hr>=b)){lr.push(Pn.times[cr]);for(let es=0;es<zn;++es)ar.push(Pn.values[cr*zn+es])}}lr.length!==0&&(Pn.times=convertArray(lr,Pn.times.constructor),Pn.values=convertArray(ar,Pn.values.constructor),rn.push(Pn))}bt.tracks=rn;let sn=1/0;for(let yn=0;yn<bt.tracks.length;++yn)sn>bt.tracks[yn].times[0]&&(sn=bt.tracks[yn].times[0]);for(let yn=0;yn<bt.tracks.length;++yn)bt.tracks[yn].shift(-1*sn);return bt.resetDuration(),bt}function makeClipAdditive(o,s=0,a=o,b=30){b<=0&&(b=30);const _e=a.tracks.length,bt=s/b;for(let rn=0;rn<_e;++rn){const sn=a.tracks[rn],yn=sn.ValueTypeName;if(yn==="bool"||yn==="string")continue;const Pn=o.tracks.find(function(Dr){return Dr.name===sn.name&&Dr.ValueTypeName===yn});if(Pn===void 0)continue;let zn=0;const lr=sn.getValueSize();sn.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline&&(zn=lr/3);let ar=0;const cr=Pn.getValueSize();Pn.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline&&(ar=cr/3);const hr=sn.times.length-1;let es;if(bt<=sn.times[0]){const Dr=zn,zr=lr-zn;es=sn.values.slice(Dr,zr)}else if(bt>=sn.times[hr]){const Dr=hr*lr+zn,zr=Dr+lr-zn;es=sn.values.slice(Dr,zr)}else{const Dr=sn.createInterpolant(),zr=zn,rs=lr-zn;Dr.evaluate(bt),es=Dr.resultBuffer.slice(zr,rs)}yn==="quaternion"&&new Quaternion().fromArray(es).normalize().conjugate().toArray(es);const Ur=Pn.times.length;for(let Dr=0;Dr<Ur;++Dr){const zr=Dr*cr+ar;if(yn==="quaternion")Quaternion.multiplyQuaternionsFlat(Pn.values,zr,es,0,Pn.values,zr);else{const rs=cr-ar*2;for(let as=0;as<rs;++as)Pn.values[zr+as]-=es[as]}}}return o.blendMode=AdditiveAnimationBlendMode,o}const AnimationUtils={convertArray,isTypedArray,getKeyframeOrder,sortedArray,flattenJSON,subclip,makeClipAdditive};class Interpolant{constructor(s,a,b,_e){this.parameterPositions=s,this._cachedIndex=0,this.resultBuffer=_e!==void 0?_e:new a.constructor(b),this.sampleValues=a,this.valueSize=b,this.settings=null,this.DefaultSettings_={}}evaluate(s){const a=this.parameterPositions;let b=this._cachedIndex,_e=a[b],bt=a[b-1];e:{t:{let rn;n:{r:if(!(s<_e)){for(let sn=b+2;;){if(_e===void 0){if(s<bt)break r;return b=a.length,this._cachedIndex=b,this.copySampleValue_(b-1)}if(b===sn)break;if(bt=_e,_e=a[++b],s<_e)break t}rn=a.length;break n}if(!(s>=bt)){const sn=a[1];s<sn&&(b=2,bt=sn);for(let yn=b-2;;){if(bt===void 0)return this._cachedIndex=0,this.copySampleValue_(0);if(b===yn)break;if(_e=bt,bt=a[--b-1],s>=bt)break t}rn=b,b=0;break n}break e}for(;b<rn;){const sn=b+rn>>>1;s<a[sn]?rn=sn:b=sn+1}if(_e=a[b],bt=a[b-1],bt===void 0)return this._cachedIndex=0,this.copySampleValue_(0);if(_e===void 0)return b=a.length,this._cachedIndex=b,this.copySampleValue_(b-1)}this._cachedIndex=b,this.intervalChanged_(b,bt,_e)}return this.interpolate_(b,bt,s,_e)}getSettings_(){return this.settings||this.DefaultSettings_}copySampleValue_(s){const a=this.resultBuffer,b=this.sampleValues,_e=this.valueSize,bt=s*_e;for(let rn=0;rn!==_e;++rn)a[rn]=b[bt+rn];return a}interpolate_(){throw new Error("call to abstract method")}intervalChanged_(){}}class CubicInterpolant extends Interpolant{constructor(s,a,b,_e){super(s,a,b,_e),this._weightPrev=-0,this._offsetPrev=-0,this._weightNext=-0,this._offsetNext=-0,this.DefaultSettings_={endingStart:ZeroCurvatureEnding,endingEnd:ZeroCurvatureEnding}}intervalChanged_(s,a,b){const _e=this.parameterPositions;let bt=s-2,rn=s+1,sn=_e[bt],yn=_e[rn];if(sn===void 0)switch(this.getSettings_().endingStart){case ZeroSlopeEnding:bt=s,sn=2*a-b;break;case WrapAroundEnding:bt=_e.length-2,sn=a+_e[bt]-_e[bt+1];break;default:bt=s,sn=b}if(yn===void 0)switch(this.getSettings_().endingEnd){case ZeroSlopeEnding:rn=s,yn=2*b-a;break;case WrapAroundEnding:rn=1,yn=b+_e[1]-_e[0];break;default:rn=s-1,yn=a}const Pn=(b-a)*.5,zn=this.valueSize;this._weightPrev=Pn/(a-sn),this._weightNext=Pn/(yn-b),this._offsetPrev=bt*zn,this._offsetNext=rn*zn}interpolate_(s,a,b,_e){const bt=this.resultBuffer,rn=this.sampleValues,sn=this.valueSize,yn=s*sn,Pn=yn-sn,zn=this._offsetPrev,lr=this._offsetNext,ar=this._weightPrev,cr=this._weightNext,hr=(b-a)/(_e-a),es=hr*hr,Ur=es*hr,Dr=-ar*Ur+2*ar*es-ar*hr,zr=(1+ar)*Ur+(-1.5-2*ar)*es+(-.5+ar)*hr+1,rs=(-1-cr)*Ur+(1.5+cr)*es+.5*hr,as=cr*Ur-cr*es;for(let os=0;os!==sn;++os)bt[os]=Dr*rn[zn+os]+zr*rn[Pn+os]+rs*rn[yn+os]+as*rn[lr+os];return bt}}class LinearInterpolant extends Interpolant{constructor(s,a,b,_e){super(s,a,b,_e)}interpolate_(s,a,b,_e){const bt=this.resultBuffer,rn=this.sampleValues,sn=this.valueSize,yn=s*sn,Pn=yn-sn,zn=(b-a)/(_e-a),lr=1-zn;for(let ar=0;ar!==sn;++ar)bt[ar]=rn[Pn+ar]*lr+rn[yn+ar]*zn;return bt}}class DiscreteInterpolant extends Interpolant{constructor(s,a,b,_e){super(s,a,b,_e)}interpolate_(s){return this.copySampleValue_(s-1)}}class KeyframeTrack{constructor(s,a,b,_e){if(s===void 0)throw new Error("THREE.KeyframeTrack: track name is undefined");if(a===void 0||a.length===0)throw new Error("THREE.KeyframeTrack: no keyframes in track named "+s);this.name=s,this.times=convertArray(a,this.TimeBufferType),this.values=convertArray(b,this.ValueBufferType),this.setInterpolation(_e||this.DefaultInterpolation)}static toJSON(s){const a=s.constructor;let b;if(a.toJSON!==this.toJSON)b=a.toJSON(s);else{b={name:s.name,times:convertArray(s.times,Array),values:convertArray(s.values,Array)};const _e=s.getInterpolation();_e!==s.DefaultInterpolation&&(b.interpolation=_e)}return b.type=s.ValueTypeName,b}InterpolantFactoryMethodDiscrete(s){return new DiscreteInterpolant(this.times,this.values,this.getValueSize(),s)}InterpolantFactoryMethodLinear(s){return new LinearInterpolant(this.times,this.values,this.getValueSize(),s)}InterpolantFactoryMethodSmooth(s){return new CubicInterpolant(this.times,this.values,this.getValueSize(),s)}setInterpolation(s){let a;switch(s){case InterpolateDiscrete:a=this.InterpolantFactoryMethodDiscrete;break;case InterpolateLinear:a=this.InterpolantFactoryMethodLinear;break;case InterpolateSmooth:a=this.InterpolantFactoryMethodSmooth;break}if(a===void 0){const b="unsupported interpolation for "+this.ValueTypeName+" keyframe track named "+this.name;if(this.createInterpolant===void 0)if(s!==this.DefaultInterpolation)this.setInterpolation(this.DefaultInterpolation);else throw new Error(b);return console.warn("THREE.KeyframeTrack:",b),this}return this.createInterpolant=a,this}getInterpolation(){switch(this.createInterpolant){case this.InterpolantFactoryMethodDiscrete:return InterpolateDiscrete;case this.InterpolantFactoryMethodLinear:return InterpolateLinear;case this.InterpolantFactoryMethodSmooth:return InterpolateSmooth}}getValueSize(){return this.values.length/this.times.length}shift(s){if(s!==0){const a=this.times;for(let b=0,_e=a.length;b!==_e;++b)a[b]+=s}return this}scale(s){if(s!==1){const a=this.times;for(let b=0,_e=a.length;b!==_e;++b)a[b]*=s}return this}trim(s,a){const b=this.times,_e=b.length;let bt=0,rn=_e-1;for(;bt!==_e&&b[bt]<s;)++bt;for(;rn!==-1&&b[rn]>a;)--rn;if(++rn,bt!==0||rn!==_e){bt>=rn&&(rn=Math.max(rn,1),bt=rn-1);const sn=this.getValueSize();this.times=b.slice(bt,rn),this.values=this.values.slice(bt*sn,rn*sn)}return this}validate(){let s=!0;const a=this.getValueSize();a-Math.floor(a)!==0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),s=!1);const b=this.times,_e=this.values,bt=b.length;bt===0&&(console.error("THREE.KeyframeTrack: Track is empty.",this),s=!1);let rn=null;for(let sn=0;sn!==bt;sn++){const yn=b[sn];if(typeof yn=="number"&&isNaN(yn)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,sn,yn),s=!1;break}if(rn!==null&&rn>yn){console.error("THREE.KeyframeTrack: Out of order keys.",this,sn,yn,rn),s=!1;break}rn=yn}if(_e!==void 0&&isTypedArray(_e))for(let sn=0,yn=_e.length;sn!==yn;++sn){const Pn=_e[sn];if(isNaN(Pn)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,sn,Pn),s=!1;break}}return s}optimize(){const s=this.times.slice(),a=this.values.slice(),b=this.getValueSize(),_e=this.getInterpolation()===InterpolateSmooth,bt=s.length-1;let rn=1;for(let sn=1;sn<bt;++sn){let yn=!1;const Pn=s[sn],zn=s[sn+1];if(Pn!==zn&&(sn!==1||Pn!==s[0]))if(_e)yn=!0;else{const lr=sn*b,ar=lr-b,cr=lr+b;for(let hr=0;hr!==b;++hr){const es=a[lr+hr];if(es!==a[ar+hr]||es!==a[cr+hr]){yn=!0;break}}}if(yn){if(sn!==rn){s[rn]=s[sn];const lr=sn*b,ar=rn*b;for(let cr=0;cr!==b;++cr)a[ar+cr]=a[lr+cr]}++rn}}if(bt>0){s[rn]=s[bt];for(let sn=bt*b,yn=rn*b,Pn=0;Pn!==b;++Pn)a[yn+Pn]=a[sn+Pn];++rn}return rn!==s.length?(this.times=s.slice(0,rn),this.values=a.slice(0,rn*b)):(this.times=s,this.values=a),this}clone(){const s=this.times.slice(),a=this.values.slice(),b=this.constructor,_e=new b(this.name,s,a);return _e.createInterpolant=this.createInterpolant,_e}}KeyframeTrack.prototype.TimeBufferType=Float32Array;KeyframeTrack.prototype.ValueBufferType=Float32Array;KeyframeTrack.prototype.DefaultInterpolation=InterpolateLinear;class BooleanKeyframeTrack extends KeyframeTrack{}BooleanKeyframeTrack.prototype.ValueTypeName="bool";BooleanKeyframeTrack.prototype.ValueBufferType=Array;BooleanKeyframeTrack.prototype.DefaultInterpolation=InterpolateDiscrete;BooleanKeyframeTrack.prototype.InterpolantFactoryMethodLinear=void 0;BooleanKeyframeTrack.prototype.InterpolantFactoryMethodSmooth=void 0;class ColorKeyframeTrack extends KeyframeTrack{}ColorKeyframeTrack.prototype.ValueTypeName="color";class NumberKeyframeTrack extends KeyframeTrack{}NumberKeyframeTrack.prototype.ValueTypeName="number";class QuaternionLinearInterpolant extends Interpolant{constructor(s,a,b,_e){super(s,a,b,_e)}interpolate_(s,a,b,_e){const bt=this.resultBuffer,rn=this.sampleValues,sn=this.valueSize,yn=(b-a)/(_e-a);let Pn=s*sn;for(let zn=Pn+sn;Pn!==zn;Pn+=4)Quaternion.slerpFlat(bt,0,rn,Pn-sn,rn,Pn,yn);return bt}}class QuaternionKeyframeTrack extends KeyframeTrack{InterpolantFactoryMethodLinear(s){return new QuaternionLinearInterpolant(this.times,this.values,this.getValueSize(),s)}}QuaternionKeyframeTrack.prototype.ValueTypeName="quaternion";QuaternionKeyframeTrack.prototype.DefaultInterpolation=InterpolateLinear;QuaternionKeyframeTrack.prototype.InterpolantFactoryMethodSmooth=void 0;class StringKeyframeTrack extends KeyframeTrack{}StringKeyframeTrack.prototype.ValueTypeName="string";StringKeyframeTrack.prototype.ValueBufferType=Array;StringKeyframeTrack.prototype.DefaultInterpolation=InterpolateDiscrete;StringKeyframeTrack.prototype.InterpolantFactoryMethodLinear=void 0;StringKeyframeTrack.prototype.InterpolantFactoryMethodSmooth=void 0;class VectorKeyframeTrack extends KeyframeTrack{}VectorKeyframeTrack.prototype.ValueTypeName="vector";class AnimationClip{constructor(s,a=-1,b,_e=NormalAnimationBlendMode){this.name=s,this.tracks=b,this.duration=a,this.blendMode=_e,this.uuid=generateUUID(),this.duration<0&&this.resetDuration()}static parse(s){const a=[],b=s.tracks,_e=1/(s.fps||1);for(let rn=0,sn=b.length;rn!==sn;++rn)a.push(parseKeyframeTrack(b[rn]).scale(_e));const bt=new this(s.name,s.duration,a,s.blendMode);return bt.uuid=s.uuid,bt}static toJSON(s){const a=[],b=s.tracks,_e={name:s.name,duration:s.duration,tracks:a,uuid:s.uuid,blendMode:s.blendMode};for(let bt=0,rn=b.length;bt!==rn;++bt)a.push(KeyframeTrack.toJSON(b[bt]));return _e}static CreateFromMorphTargetSequence(s,a,b,_e){const bt=a.length,rn=[];for(let sn=0;sn<bt;sn++){let yn=[],Pn=[];yn.push((sn+bt-1)%bt,sn,(sn+1)%bt),Pn.push(0,1,0);const zn=getKeyframeOrder(yn);yn=sortedArray(yn,1,zn),Pn=sortedArray(Pn,1,zn),!_e&&yn[0]===0&&(yn.push(bt),Pn.push(Pn[0])),rn.push(new NumberKeyframeTrack(".morphTargetInfluences["+a[sn].name+"]",yn,Pn).scale(1/b))}return new this(s,-1,rn)}static findByName(s,a){let b=s;if(!Array.isArray(s)){const _e=s;b=_e.geometry&&_e.geometry.animations||_e.animations}for(let _e=0;_e<b.length;_e++)if(b[_e].name===a)return b[_e];return null}static CreateClipsFromMorphTargetSequences(s,a,b){const _e={},bt=/^([\w-]*?)([\d]+)$/;for(let sn=0,yn=s.length;sn<yn;sn++){const Pn=s[sn],zn=Pn.name.match(bt);if(zn&&zn.length>1){const lr=zn[1];let ar=_e[lr];ar||(_e[lr]=ar=[]),ar.push(Pn)}}const rn=[];for(const sn in _e)rn.push(this.CreateFromMorphTargetSequence(sn,_e[sn],a,b));return rn}static parseAnimation(s,a){if(!s)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;const b=function(lr,ar,cr,hr,es){if(cr.length!==0){const Ur=[],Dr=[];flattenJSON(cr,Ur,Dr,hr),Ur.length!==0&&es.push(new lr(ar,Ur,Dr))}},_e=[],bt=s.name||"default",rn=s.fps||30,sn=s.blendMode;let yn=s.length||-1;const Pn=s.hierarchy||[];for(let lr=0;lr<Pn.length;lr++){const ar=Pn[lr].keys;if(!(!ar||ar.length===0))if(ar[0].morphTargets){const cr={};let hr;for(hr=0;hr<ar.length;hr++)if(ar[hr].morphTargets)for(let es=0;es<ar[hr].morphTargets.length;es++)cr[ar[hr].morphTargets[es]]=-1;for(const es in cr){const Ur=[],Dr=[];for(let zr=0;zr!==ar[hr].morphTargets.length;++zr){const rs=ar[hr];Ur.push(rs.time),Dr.push(rs.morphTarget===es?1:0)}_e.push(new NumberKeyframeTrack(".morphTargetInfluence["+es+"]",Ur,Dr))}yn=cr.length*rn}else{const cr=".bones["+a[lr].name+"]";b(VectorKeyframeTrack,cr+".position",ar,"pos",_e),b(QuaternionKeyframeTrack,cr+".quaternion",ar,"rot",_e),b(VectorKeyframeTrack,cr+".scale",ar,"scl",_e)}}return _e.length===0?null:new this(bt,yn,_e,sn)}resetDuration(){const s=this.tracks;let a=0;for(let b=0,_e=s.length;b!==_e;++b){const bt=this.tracks[b];a=Math.max(a,bt.times[bt.times.length-1])}return this.duration=a,this}trim(){for(let s=0;s<this.tracks.length;s++)this.tracks[s].trim(0,this.duration);return this}validate(){let s=!0;for(let a=0;a<this.tracks.length;a++)s=s&&this.tracks[a].validate();return s}optimize(){for(let s=0;s<this.tracks.length;s++)this.tracks[s].optimize();return this}clone(){const s=[];for(let a=0;a<this.tracks.length;a++)s.push(this.tracks[a].clone());return new this.constructor(this.name,this.duration,s,this.blendMode)}toJSON(){return this.constructor.toJSON(this)}}function getTrackTypeForValueTypeName(o){switch(o.toLowerCase()){case"scalar":case"double":case"float":case"number":case"integer":return NumberKeyframeTrack;case"vector":case"vector2":case"vector3":case"vector4":return VectorKeyframeTrack;case"color":return ColorKeyframeTrack;case"quaternion":return QuaternionKeyframeTrack;case"bool":case"boolean":return BooleanKeyframeTrack;case"string":return StringKeyframeTrack}throw new Error("THREE.KeyframeTrack: Unsupported typeName: "+o)}function parseKeyframeTrack(o){if(o.type===void 0)throw new Error("THREE.KeyframeTrack: track type undefined, can not parse");const s=getTrackTypeForValueTypeName(o.type);if(o.times===void 0){const a=[],b=[];flattenJSON(o.keys,a,b,"value"),o.times=a,o.values=b}return s.parse!==void 0?s.parse(o):new s(o.name,o.times,o.values,o.interpolation)}const Cache={enabled:!1,files:{},add:function(o,s){this.enabled!==!1&&(this.files[o]=s)},get:function(o){if(this.enabled!==!1)return this.files[o]},remove:function(o){delete this.files[o]},clear:function(){this.files={}}};class LoadingManager{constructor(s,a,b){const _e=this;let bt=!1,rn=0,sn=0,yn;const Pn=[];this.onStart=void 0,this.onLoad=s,this.onProgress=a,this.onError=b,this.itemStart=function(zn){sn++,bt===!1&&_e.onStart!==void 0&&_e.onStart(zn,rn,sn),bt=!0},this.itemEnd=function(zn){rn++,_e.onProgress!==void 0&&_e.onProgress(zn,rn,sn),rn===sn&&(bt=!1,_e.onLoad!==void 0&&_e.onLoad())},this.itemError=function(zn){_e.onError!==void 0&&_e.onError(zn)},this.resolveURL=function(zn){return yn?yn(zn):zn},this.setURLModifier=function(zn){return yn=zn,this},this.addHandler=function(zn,lr){return Pn.push(zn,lr),this},this.removeHandler=function(zn){const lr=Pn.indexOf(zn);return lr!==-1&&Pn.splice(lr,2),this},this.getHandler=function(zn){for(let lr=0,ar=Pn.length;lr<ar;lr+=2){const cr=Pn[lr],hr=Pn[lr+1];if(cr.global&&(cr.lastIndex=0),cr.test(zn))return hr}return null}}}const DefaultLoadingManager=new LoadingManager;class Loader{constructor(s){this.manager=s!==void 0?s:DefaultLoadingManager,this.crossOrigin="anonymous",this.withCredentials=!1,this.path="",this.resourcePath="",this.requestHeader={}}load(){}loadAsync(s,a){const b=this;return new Promise(function(_e,bt){b.load(s,_e,a,bt)})}parse(){}setCrossOrigin(s){return this.crossOrigin=s,this}setWithCredentials(s){return this.withCredentials=s,this}setPath(s){return this.path=s,this}setResourcePath(s){return this.resourcePath=s,this}setRequestHeader(s){return this.requestHeader=s,this}}Loader.DEFAULT_MATERIAL_NAME="__DEFAULT";const loading={};class HttpError extends Error{constructor(s,a){super(s),this.response=a}}class FileLoader extends Loader{constructor(s){super(s)}load(s,a,b,_e){s===void 0&&(s=""),this.path!==void 0&&(s=this.path+s),s=this.manager.resolveURL(s);const bt=Cache.get(s);if(bt!==void 0)return this.manager.itemStart(s),setTimeout(()=>{a&&a(bt),this.manager.itemEnd(s)},0),bt;if(loading[s]!==void 0){loading[s].push({onLoad:a,onProgress:b,onError:_e});return}loading[s]=[],loading[s].push({onLoad:a,onProgress:b,onError:_e});const rn=new Request(s,{headers:new Headers(this.requestHeader),credentials:this.withCredentials?"include":"same-origin"}),sn=this.mimeType,yn=this.responseType;fetch(rn).then(Pn=>{if(Pn.status===200||Pn.status===0){if(Pn.status===0&&console.warn("THREE.FileLoader: HTTP Status 0 received."),typeof ReadableStream>"u"||Pn.body===void 0||Pn.body.getReader===void 0)return Pn;const zn=loading[s],lr=Pn.body.getReader(),ar=Pn.headers.get("Content-Length")||Pn.headers.get("X-File-Size"),cr=ar?parseInt(ar):0,hr=cr!==0;let es=0;const Ur=new ReadableStream({start(Dr){zr();function zr(){lr.read().then(({done:rs,value:as})=>{if(rs)Dr.close();else{es+=as.byteLength;const os=new ProgressEvent("progress",{lengthComputable:hr,loaded:es,total:cr});for(let ls=0,zs=zn.length;ls<zs;ls++){const ho=zn[ls];ho.onProgress&&ho.onProgress(os)}Dr.enqueue(as),zr()}})}}});return new Response(Ur)}else throw new HttpError(`fetch for "${Pn.url}" responded with ${Pn.status}: ${Pn.statusText}`,Pn)}).then(Pn=>{switch(yn){case"arraybuffer":return Pn.arrayBuffer();case"blob":return Pn.blob();case"document":return Pn.text().then(zn=>new DOMParser().parseFromString(zn,sn));case"json":return Pn.json();default:if(sn===void 0)return Pn.text();{const lr=/charset="?([^;"\s]*)"?/i.exec(sn),ar=lr&&lr[1]?lr[1].toLowerCase():void 0,cr=new TextDecoder(ar);return Pn.arrayBuffer().then(hr=>cr.decode(hr))}}}).then(Pn=>{Cache.add(s,Pn);const zn=loading[s];delete loading[s];for(let lr=0,ar=zn.length;lr<ar;lr++){const cr=zn[lr];cr.onLoad&&cr.onLoad(Pn)}}).catch(Pn=>{const zn=loading[s];if(zn===void 0)throw this.manager.itemError(s),Pn;delete loading[s];for(let lr=0,ar=zn.length;lr<ar;lr++){const cr=zn[lr];cr.onError&&cr.onError(Pn)}this.manager.itemError(s)}).finally(()=>{this.manager.itemEnd(s)}),this.manager.itemStart(s)}setResponseType(s){return this.responseType=s,this}setMimeType(s){return this.mimeType=s,this}}class AnimationLoader extends Loader{constructor(s){super(s)}load(s,a,b,_e){const bt=this,rn=new FileLoader(this.manager);rn.setPath(this.path),rn.setRequestHeader(this.requestHeader),rn.setWithCredentials(this.withCredentials),rn.load(s,function(sn){try{a(bt.parse(JSON.parse(sn)))}catch(yn){_e?_e(yn):console.error(yn),bt.manager.itemError(s)}},b,_e)}parse(s){const a=[];for(let b=0;b<s.length;b++){const _e=AnimationClip.parse(s[b]);a.push(_e)}return a}}class CompressedTextureLoader extends Loader{constructor(s){super(s)}load(s,a,b,_e){const bt=this,rn=[],sn=new CompressedTexture,yn=new FileLoader(this.manager);yn.setPath(this.path),yn.setResponseType("arraybuffer"),yn.setRequestHeader(this.requestHeader),yn.setWithCredentials(bt.withCredentials);let Pn=0;function zn(lr){yn.load(s[lr],function(ar){const cr=bt.parse(ar,!0);rn[lr]={width:cr.width,height:cr.height,format:cr.format,mipmaps:cr.mipmaps},Pn+=1,Pn===6&&(cr.mipmapCount===1&&(sn.minFilter=LinearFilter),sn.image=rn,sn.format=cr.format,sn.needsUpdate=!0,a&&a(sn))},b,_e)}if(Array.isArray(s))for(let lr=0,ar=s.length;lr<ar;++lr)zn(lr);else yn.load(s,function(lr){const ar=bt.parse(lr,!0);if(ar.isCubemap){const cr=ar.mipmaps.length/ar.mipmapCount;for(let hr=0;hr<cr;hr++){rn[hr]={mipmaps:[]};for(let es=0;es<ar.mipmapCount;es++)rn[hr].mipmaps.push(ar.mipmaps[hr*ar.mipmapCount+es]),rn[hr].format=ar.format,rn[hr].width=ar.width,rn[hr].height=ar.height}sn.image=rn}else sn.image.width=ar.width,sn.image.height=ar.height,sn.mipmaps=ar.mipmaps;ar.mipmapCount===1&&(sn.minFilter=LinearFilter),sn.format=ar.format,sn.needsUpdate=!0,a&&a(sn)},b,_e);return sn}}class ImageLoader extends Loader{constructor(s){super(s)}load(s,a,b,_e){this.path!==void 0&&(s=this.path+s),s=this.manager.resolveURL(s);const bt=this,rn=Cache.get(s);if(rn!==void 0)return bt.manager.itemStart(s),setTimeout(function(){a&&a(rn),bt.manager.itemEnd(s)},0),rn;const sn=createElementNS("img");function yn(){zn(),Cache.add(s,this),a&&a(this),bt.manager.itemEnd(s)}function Pn(lr){zn(),_e&&_e(lr),bt.manager.itemError(s),bt.manager.itemEnd(s)}function zn(){sn.removeEventListener("load",yn,!1),sn.removeEventListener("error",Pn,!1)}return sn.addEventListener("load",yn,!1),sn.addEventListener("error",Pn,!1),s.slice(0,5)!=="data:"&&this.crossOrigin!==void 0&&(sn.crossOrigin=this.crossOrigin),bt.manager.itemStart(s),sn.src=s,sn}}class CubeTextureLoader extends Loader{constructor(s){super(s)}load(s,a,b,_e){const bt=new CubeTexture;bt.colorSpace=SRGBColorSpace$1;const rn=new ImageLoader(this.manager);rn.setCrossOrigin(this.crossOrigin),rn.setPath(this.path);let sn=0;function yn(Pn){rn.load(s[Pn],function(zn){bt.images[Pn]=zn,sn++,sn===6&&(bt.needsUpdate=!0,a&&a(bt))},void 0,_e)}for(let Pn=0;Pn<s.length;++Pn)yn(Pn);return bt}}class DataTextureLoader extends Loader{constructor(s){super(s)}load(s,a,b,_e){const bt=this,rn=new DataTexture,sn=new FileLoader(this.manager);return sn.setResponseType("arraybuffer"),sn.setRequestHeader(this.requestHeader),sn.setPath(this.path),sn.setWithCredentials(bt.withCredentials),sn.load(s,function(yn){let Pn;try{Pn=bt.parse(yn)}catch(zn){if(_e!==void 0)_e(zn);else{console.error(zn);return}}Pn.image!==void 0?rn.image=Pn.image:Pn.data!==void 0&&(rn.image.width=Pn.width,rn.image.height=Pn.height,rn.image.data=Pn.data),rn.wrapS=Pn.wrapS!==void 0?Pn.wrapS:ClampToEdgeWrapping,rn.wrapT=Pn.wrapT!==void 0?Pn.wrapT:ClampToEdgeWrapping,rn.magFilter=Pn.magFilter!==void 0?Pn.magFilter:LinearFilter,rn.minFilter=Pn.minFilter!==void 0?Pn.minFilter:LinearFilter,rn.anisotropy=Pn.anisotropy!==void 0?Pn.anisotropy:1,Pn.colorSpace!==void 0?rn.colorSpace=Pn.colorSpace:Pn.encoding!==void 0&&(rn.encoding=Pn.encoding),Pn.flipY!==void 0&&(rn.flipY=Pn.flipY),Pn.format!==void 0&&(rn.format=Pn.format),Pn.type!==void 0&&(rn.type=Pn.type),Pn.mipmaps!==void 0&&(rn.mipmaps=Pn.mipmaps,rn.minFilter=LinearMipmapLinearFilter),Pn.mipmapCount===1&&(rn.minFilter=LinearFilter),Pn.generateMipmaps!==void 0&&(rn.generateMipmaps=Pn.generateMipmaps),rn.needsUpdate=!0,a&&a(rn,Pn)},b,_e),rn}}class TextureLoader extends Loader{constructor(s){super(s)}load(s,a,b,_e){const bt=new Texture,rn=new ImageLoader(this.manager);return rn.setCrossOrigin(this.crossOrigin),rn.setPath(this.path),rn.load(s,function(sn){bt.image=sn,bt.needsUpdate=!0,a!==void 0&&a(bt)},b,_e),bt}}class Light extends Object3D{constructor(s,a=1){super(),this.isLight=!0,this.type="Light",this.color=new Color$1(s),this.intensity=a}dispose(){}copy(s,a){return super.copy(s,a),this.color.copy(s.color),this.intensity=s.intensity,this}toJSON(s){const a=super.toJSON(s);return a.object.color=this.color.getHex(),a.object.intensity=this.intensity,this.groundColor!==void 0&&(a.object.groundColor=this.groundColor.getHex()),this.distance!==void 0&&(a.object.distance=this.distance),this.angle!==void 0&&(a.object.angle=this.angle),this.decay!==void 0&&(a.object.decay=this.decay),this.penumbra!==void 0&&(a.object.penumbra=this.penumbra),this.shadow!==void 0&&(a.object.shadow=this.shadow.toJSON()),a}}class HemisphereLight extends Light{constructor(s,a,b){super(s,b),this.isHemisphereLight=!0,this.type="HemisphereLight",this.position.copy(Object3D.DEFAULT_UP),this.updateMatrix(),this.groundColor=new Color$1(a)}copy(s,a){return super.copy(s,a),this.groundColor.copy(s.groundColor),this}}const _projScreenMatrix$1=new Matrix4,_lightPositionWorld$1=new Vector3,_lookTarget$1=new Vector3;class LightShadow{constructor(s){this.camera=s,this.bias=0,this.normalBias=0,this.radius=1,this.blurSamples=8,this.mapSize=new Vector2(512,512),this.map=null,this.mapPass=null,this.matrix=new Matrix4,this.autoUpdate=!0,this.needsUpdate=!1,this._frustum=new Frustum,this._frameExtents=new Vector2(1,1),this._viewportCount=1,this._viewports=[new Vector4(0,0,1,1)]}getViewportCount(){return this._viewportCount}getFrustum(){return this._frustum}updateMatrices(s){const a=this.camera,b=this.matrix;_lightPositionWorld$1.setFromMatrixPosition(s.matrixWorld),a.position.copy(_lightPositionWorld$1),_lookTarget$1.setFromMatrixPosition(s.target.matrixWorld),a.lookAt(_lookTarget$1),a.updateMatrixWorld(),_projScreenMatrix$1.multiplyMatrices(a.projectionMatrix,a.matrixWorldInverse),this._frustum.setFromProjectionMatrix(_projScreenMatrix$1),b.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),b.multiply(_projScreenMatrix$1)}getViewport(s){return this._viewports[s]}getFrameExtents(){return this._frameExtents}dispose(){this.map&&this.map.dispose(),this.mapPass&&this.mapPass.dispose()}copy(s){return this.camera=s.camera.clone(),this.bias=s.bias,this.radius=s.radius,this.mapSize.copy(s.mapSize),this}clone(){return new this.constructor().copy(this)}toJSON(){const s={};return this.bias!==0&&(s.bias=this.bias),this.normalBias!==0&&(s.normalBias=this.normalBias),this.radius!==1&&(s.radius=this.radius),(this.mapSize.x!==512||this.mapSize.y!==512)&&(s.mapSize=this.mapSize.toArray()),s.camera=this.camera.toJSON(!1).object,delete s.camera.matrix,s}}class SpotLightShadow extends LightShadow{constructor(){super(new PerspectiveCamera(50,1,.5,500)),this.isSpotLightShadow=!0,this.focus=1}updateMatrices(s){const a=this.camera,b=RAD2DEG*2*s.angle*this.focus,_e=this.mapSize.width/this.mapSize.height,bt=s.distance||a.far;(b!==a.fov||_e!==a.aspect||bt!==a.far)&&(a.fov=b,a.aspect=_e,a.far=bt,a.updateProjectionMatrix()),super.updateMatrices(s)}copy(s){return super.copy(s),this.focus=s.focus,this}}class SpotLight extends Light{constructor(s,a,b=0,_e=Math.PI/3,bt=0,rn=2){super(s,a),this.isSpotLight=!0,this.type="SpotLight",this.position.copy(Object3D.DEFAULT_UP),this.updateMatrix(),this.target=new Object3D,this.distance=b,this.angle=_e,this.penumbra=bt,this.decay=rn,this.map=null,this.shadow=new SpotLightShadow}get power(){return this.intensity*Math.PI}set power(s){this.intensity=s/Math.PI}dispose(){this.shadow.dispose()}copy(s,a){return super.copy(s,a),this.distance=s.distance,this.angle=s.angle,this.penumbra=s.penumbra,this.decay=s.decay,this.target=s.target.clone(),this.shadow=s.shadow.clone(),this}}const _projScreenMatrix=new Matrix4,_lightPositionWorld=new Vector3,_lookTarget=new Vector3;class PointLightShadow extends LightShadow{constructor(){super(new PerspectiveCamera(90,1,.5,500)),this.isPointLightShadow=!0,this._frameExtents=new Vector2(4,2),this._viewportCount=6,this._viewports=[new Vector4(2,1,1,1),new Vector4(0,1,1,1),new Vector4(3,1,1,1),new Vector4(1,1,1,1),new Vector4(3,0,1,1),new Vector4(1,0,1,1)],this._cubeDirections=[new Vector3(1,0,0),new Vector3(-1,0,0),new Vector3(0,0,1),new Vector3(0,0,-1),new Vector3(0,1,0),new Vector3(0,-1,0)],this._cubeUps=[new Vector3(0,1,0),new Vector3(0,1,0),new Vector3(0,1,0),new Vector3(0,1,0),new Vector3(0,0,1),new Vector3(0,0,-1)]}updateMatrices(s,a=0){const b=this.camera,_e=this.matrix,bt=s.distance||b.far;bt!==b.far&&(b.far=bt,b.updateProjectionMatrix()),_lightPositionWorld.setFromMatrixPosition(s.matrixWorld),b.position.copy(_lightPositionWorld),_lookTarget.copy(b.position),_lookTarget.add(this._cubeDirections[a]),b.up.copy(this._cubeUps[a]),b.lookAt(_lookTarget),b.updateMatrixWorld(),_e.makeTranslation(-_lightPositionWorld.x,-_lightPositionWorld.y,-_lightPositionWorld.z),_projScreenMatrix.multiplyMatrices(b.projectionMatrix,b.matrixWorldInverse),this._frustum.setFromProjectionMatrix(_projScreenMatrix)}}class PointLight extends Light{constructor(s,a,b=0,_e=2){super(s,a),this.isPointLight=!0,this.type="PointLight",this.distance=b,this.decay=_e,this.shadow=new PointLightShadow}get power(){return this.intensity*4*Math.PI}set power(s){this.intensity=s/(4*Math.PI)}dispose(){this.shadow.dispose()}copy(s,a){return super.copy(s,a),this.distance=s.distance,this.decay=s.decay,this.shadow=s.shadow.clone(),this}}class DirectionalLightShadow extends LightShadow{constructor(){super(new OrthographicCamera(-5,5,5,-5,.5,500)),this.isDirectionalLightShadow=!0}}class DirectionalLight extends Light{constructor(s,a){super(s,a),this.isDirectionalLight=!0,this.type="DirectionalLight",this.position.copy(Object3D.DEFAULT_UP),this.updateMatrix(),this.target=new Object3D,this.shadow=new DirectionalLightShadow}dispose(){this.shadow.dispose()}copy(s){return super.copy(s),this.target=s.target.clone(),this.shadow=s.shadow.clone(),this}}class AmbientLight extends Light{constructor(s,a){super(s,a),this.isAmbientLight=!0,this.type="AmbientLight"}}class RectAreaLight extends Light{constructor(s,a,b=10,_e=10){super(s,a),this.isRectAreaLight=!0,this.type="RectAreaLight",this.width=b,this.height=_e}get power(){return this.intensity*this.width*this.height*Math.PI}set power(s){this.intensity=s/(this.width*this.height*Math.PI)}copy(s){return super.copy(s),this.width=s.width,this.height=s.height,this}toJSON(s){const a=super.toJSON(s);return a.object.width=this.width,a.object.height=this.height,a}}class SphericalHarmonics3{constructor(){this.isSphericalHarmonics3=!0,this.coefficients=[];for(let s=0;s<9;s++)this.coefficients.push(new Vector3)}set(s){for(let a=0;a<9;a++)this.coefficients[a].copy(s[a]);return this}zero(){for(let s=0;s<9;s++)this.coefficients[s].set(0,0,0);return this}getAt(s,a){const b=s.x,_e=s.y,bt=s.z,rn=this.coefficients;return a.copy(rn[0]).multiplyScalar(.282095),a.addScaledVector(rn[1],.488603*_e),a.addScaledVector(rn[2],.488603*bt),a.addScaledVector(rn[3],.488603*b),a.addScaledVector(rn[4],1.092548*(b*_e)),a.addScaledVector(rn[5],1.092548*(_e*bt)),a.addScaledVector(rn[6],.315392*(3*bt*bt-1)),a.addScaledVector(rn[7],1.092548*(b*bt)),a.addScaledVector(rn[8],.546274*(b*b-_e*_e)),a}getIrradianceAt(s,a){const b=s.x,_e=s.y,bt=s.z,rn=this.coefficients;return a.copy(rn[0]).multiplyScalar(.886227),a.addScaledVector(rn[1],2*.511664*_e),a.addScaledVector(rn[2],2*.511664*bt),a.addScaledVector(rn[3],2*.511664*b),a.addScaledVector(rn[4],2*.429043*b*_e),a.addScaledVector(rn[5],2*.429043*_e*bt),a.addScaledVector(rn[6],.743125*bt*bt-.247708),a.addScaledVector(rn[7],2*.429043*b*bt),a.addScaledVector(rn[8],.429043*(b*b-_e*_e)),a}add(s){for(let a=0;a<9;a++)this.coefficients[a].add(s.coefficients[a]);return this}addScaledSH(s,a){for(let b=0;b<9;b++)this.coefficients[b].addScaledVector(s.coefficients[b],a);return this}scale(s){for(let a=0;a<9;a++)this.coefficients[a].multiplyScalar(s);return this}lerp(s,a){for(let b=0;b<9;b++)this.coefficients[b].lerp(s.coefficients[b],a);return this}equals(s){for(let a=0;a<9;a++)if(!this.coefficients[a].equals(s.coefficients[a]))return!1;return!0}copy(s){return this.set(s.coefficients)}clone(){return new this.constructor().copy(this)}fromArray(s,a=0){const b=this.coefficients;for(let _e=0;_e<9;_e++)b[_e].fromArray(s,a+_e*3);return this}toArray(s=[],a=0){const b=this.coefficients;for(let _e=0;_e<9;_e++)b[_e].toArray(s,a+_e*3);return s}static getBasisAt(s,a){const b=s.x,_e=s.y,bt=s.z;a[0]=.282095,a[1]=.488603*_e,a[2]=.488603*bt,a[3]=.488603*b,a[4]=1.092548*b*_e,a[5]=1.092548*_e*bt,a[6]=.315392*(3*bt*bt-1),a[7]=1.092548*b*bt,a[8]=.546274*(b*b-_e*_e)}}class LightProbe extends Light{constructor(s=new SphericalHarmonics3,a=1){super(void 0,a),this.isLightProbe=!0,this.sh=s}copy(s){return super.copy(s),this.sh.copy(s.sh),this}fromJSON(s){return this.intensity=s.intensity,this.sh.fromArray(s.sh),this}toJSON(s){const a=super.toJSON(s);return a.object.sh=this.sh.toArray(),a}}class MaterialLoader extends Loader{constructor(s){super(s),this.textures={}}load(s,a,b,_e){const bt=this,rn=new FileLoader(bt.manager);rn.setPath(bt.path),rn.setRequestHeader(bt.requestHeader),rn.setWithCredentials(bt.withCredentials),rn.load(s,function(sn){try{a(bt.parse(JSON.parse(sn)))}catch(yn){_e?_e(yn):console.error(yn),bt.manager.itemError(s)}},b,_e)}parse(s){const a=this.textures;function b(bt){return a[bt]===void 0&&console.warn("THREE.MaterialLoader: Undefined texture",bt),a[bt]}const _e=MaterialLoader.createMaterialFromType(s.type);if(s.uuid!==void 0&&(_e.uuid=s.uuid),s.name!==void 0&&(_e.name=s.name),s.color!==void 0&&_e.color!==void 0&&_e.color.setHex(s.color),s.roughness!==void 0&&(_e.roughness=s.roughness),s.metalness!==void 0&&(_e.metalness=s.metalness),s.sheen!==void 0&&(_e.sheen=s.sheen),s.sheenColor!==void 0&&(_e.sheenColor=new Color$1().setHex(s.sheenColor)),s.sheenRoughness!==void 0&&(_e.sheenRoughness=s.sheenRoughness),s.emissive!==void 0&&_e.emissive!==void 0&&_e.emissive.setHex(s.emissive),s.specular!==void 0&&_e.specular!==void 0&&_e.specular.setHex(s.specular),s.specularIntensity!==void 0&&(_e.specularIntensity=s.specularIntensity),s.specularColor!==void 0&&_e.specularColor!==void 0&&_e.specularColor.setHex(s.specularColor),s.shininess!==void 0&&(_e.shininess=s.shininess),s.clearcoat!==void 0&&(_e.clearcoat=s.clearcoat),s.clearcoatRoughness!==void 0&&(_e.clearcoatRoughness=s.clearcoatRoughness),s.iridescence!==void 0&&(_e.iridescence=s.iridescence),s.iridescenceIOR!==void 0&&(_e.iridescenceIOR=s.iridescenceIOR),s.iridescenceThicknessRange!==void 0&&(_e.iridescenceThicknessRange=s.iridescenceThicknessRange),s.transmission!==void 0&&(_e.transmission=s.transmission),s.thickness!==void 0&&(_e.thickness=s.thickness),s.attenuationDistance!==void 0&&(_e.attenuationDistance=s.attenuationDistance),s.attenuationColor!==void 0&&_e.attenuationColor!==void 0&&_e.attenuationColor.setHex(s.attenuationColor),s.anisotropy!==void 0&&(_e.anisotropy=s.anisotropy),s.anisotropyRotation!==void 0&&(_e.anisotropyRotation=s.anisotropyRotation),s.fog!==void 0&&(_e.fog=s.fog),s.flatShading!==void 0&&(_e.flatShading=s.flatShading),s.blending!==void 0&&(_e.blending=s.blending),s.combine!==void 0&&(_e.combine=s.combine),s.side!==void 0&&(_e.side=s.side),s.shadowSide!==void 0&&(_e.shadowSide=s.shadowSide),s.opacity!==void 0&&(_e.opacity=s.opacity),s.transparent!==void 0&&(_e.transparent=s.transparent),s.alphaTest!==void 0&&(_e.alphaTest=s.alphaTest),s.alphaHash!==void 0&&(_e.alphaHash=s.alphaHash),s.depthTest!==void 0&&(_e.depthTest=s.depthTest),s.depthWrite!==void 0&&(_e.depthWrite=s.depthWrite),s.colorWrite!==void 0&&(_e.colorWrite=s.colorWrite),s.stencilWrite!==void 0&&(_e.stencilWrite=s.stencilWrite),s.stencilWriteMask!==void 0&&(_e.stencilWriteMask=s.stencilWriteMask),s.stencilFunc!==void 0&&(_e.stencilFunc=s.stencilFunc),s.stencilRef!==void 0&&(_e.stencilRef=s.stencilRef),s.stencilFuncMask!==void 0&&(_e.stencilFuncMask=s.stencilFuncMask),s.stencilFail!==void 0&&(_e.stencilFail=s.stencilFail),s.stencilZFail!==void 0&&(_e.stencilZFail=s.stencilZFail),s.stencilZPass!==void 0&&(_e.stencilZPass=s.stencilZPass),s.wireframe!==void 0&&(_e.wireframe=s.wireframe),s.wireframeLinewidth!==void 0&&(_e.wireframeLinewidth=s.wireframeLinewidth),s.wireframeLinecap!==void 0&&(_e.wireframeLinecap=s.wireframeLinecap),s.wireframeLinejoin!==void 0&&(_e.wireframeLinejoin=s.wireframeLinejoin),s.rotation!==void 0&&(_e.rotation=s.rotation),s.linewidth!==void 0&&(_e.linewidth=s.linewidth),s.dashSize!==void 0&&(_e.dashSize=s.dashSize),s.gapSize!==void 0&&(_e.gapSize=s.gapSize),s.scale!==void 0&&(_e.scale=s.scale),s.polygonOffset!==void 0&&(_e.polygonOffset=s.polygonOffset),s.polygonOffsetFactor!==void 0&&(_e.polygonOffsetFactor=s.polygonOffsetFactor),s.polygonOffsetUnits!==void 0&&(_e.polygonOffsetUnits=s.polygonOffsetUnits),s.dithering!==void 0&&(_e.dithering=s.dithering),s.alphaToCoverage!==void 0&&(_e.alphaToCoverage=s.alphaToCoverage),s.premultipliedAlpha!==void 0&&(_e.premultipliedAlpha=s.premultipliedAlpha),s.forceSinglePass!==void 0&&(_e.forceSinglePass=s.forceSinglePass),s.visible!==void 0&&(_e.visible=s.visible),s.toneMapped!==void 0&&(_e.toneMapped=s.toneMapped),s.userData!==void 0&&(_e.userData=s.userData),s.vertexColors!==void 0&&(typeof s.vertexColors=="number"?_e.vertexColors=s.vertexColors>0:_e.vertexColors=s.vertexColors),s.uniforms!==void 0)for(const bt in s.uniforms){const rn=s.uniforms[bt];switch(_e.uniforms[bt]={},rn.type){case"t":_e.uniforms[bt].value=b(rn.value);break;case"c":_e.uniforms[bt].value=new Color$1().setHex(rn.value);break;case"v2":_e.uniforms[bt].value=new Vector2().fromArray(rn.value);break;case"v3":_e.uniforms[bt].value=new Vector3().fromArray(rn.value);break;case"v4":_e.uniforms[bt].value=new Vector4().fromArray(rn.value);break;case"m3":_e.uniforms[bt].value=new Matrix3().fromArray(rn.value);break;case"m4":_e.uniforms[bt].value=new Matrix4().fromArray(rn.value);break;default:_e.uniforms[bt].value=rn.value}}if(s.defines!==void 0&&(_e.defines=s.defines),s.vertexShader!==void 0&&(_e.vertexShader=s.vertexShader),s.fragmentShader!==void 0&&(_e.fragmentShader=s.fragmentShader),s.glslVersion!==void 0&&(_e.glslVersion=s.glslVersion),s.extensions!==void 0)for(const bt in s.extensions)_e.extensions[bt]=s.extensions[bt];if(s.lights!==void 0&&(_e.lights=s.lights),s.clipping!==void 0&&(_e.clipping=s.clipping),s.size!==void 0&&(_e.size=s.size),s.sizeAttenuation!==void 0&&(_e.sizeAttenuation=s.sizeAttenuation),s.map!==void 0&&(_e.map=b(s.map)),s.matcap!==void 0&&(_e.matcap=b(s.matcap)),s.alphaMap!==void 0&&(_e.alphaMap=b(s.alphaMap)),s.bumpMap!==void 0&&(_e.bumpMap=b(s.bumpMap)),s.bumpScale!==void 0&&(_e.bumpScale=s.bumpScale),s.normalMap!==void 0&&(_e.normalMap=b(s.normalMap)),s.normalMapType!==void 0&&(_e.normalMapType=s.normalMapType),s.normalScale!==void 0){let bt=s.normalScale;Array.isArray(bt)===!1&&(bt=[bt,bt]),_e.normalScale=new Vector2().fromArray(bt)}return s.displacementMap!==void 0&&(_e.displacementMap=b(s.displacementMap)),s.displacementScale!==void 0&&(_e.displacementScale=s.displacementScale),s.displacementBias!==void 0&&(_e.displacementBias=s.displacementBias),s.roughnessMap!==void 0&&(_e.roughnessMap=b(s.roughnessMap)),s.metalnessMap!==void 0&&(_e.metalnessMap=b(s.metalnessMap)),s.emissiveMap!==void 0&&(_e.emissiveMap=b(s.emissiveMap)),s.emissiveIntensity!==void 0&&(_e.emissiveIntensity=s.emissiveIntensity),s.specularMap!==void 0&&(_e.specularMap=b(s.specularMap)),s.specularIntensityMap!==void 0&&(_e.specularIntensityMap=b(s.specularIntensityMap)),s.specularColorMap!==void 0&&(_e.specularColorMap=b(s.specularColorMap)),s.envMap!==void 0&&(_e.envMap=b(s.envMap)),s.envMapIntensity!==void 0&&(_e.envMapIntensity=s.envMapIntensity),s.reflectivity!==void 0&&(_e.reflectivity=s.reflectivity),s.refractionRatio!==void 0&&(_e.refractionRatio=s.refractionRatio),s.lightMap!==void 0&&(_e.lightMap=b(s.lightMap)),s.lightMapIntensity!==void 0&&(_e.lightMapIntensity=s.lightMapIntensity),s.aoMap!==void 0&&(_e.aoMap=b(s.aoMap)),s.aoMapIntensity!==void 0&&(_e.aoMapIntensity=s.aoMapIntensity),s.gradientMap!==void 0&&(_e.gradientMap=b(s.gradientMap)),s.clearcoatMap!==void 0&&(_e.clearcoatMap=b(s.clearcoatMap)),s.clearcoatRoughnessMap!==void 0&&(_e.clearcoatRoughnessMap=b(s.clearcoatRoughnessMap)),s.clearcoatNormalMap!==void 0&&(_e.clearcoatNormalMap=b(s.clearcoatNormalMap)),s.clearcoatNormalScale!==void 0&&(_e.clearcoatNormalScale=new Vector2().fromArray(s.clearcoatNormalScale)),s.iridescenceMap!==void 0&&(_e.iridescenceMap=b(s.iridescenceMap)),s.iridescenceThicknessMap!==void 0&&(_e.iridescenceThicknessMap=b(s.iridescenceThicknessMap)),s.transmissionMap!==void 0&&(_e.transmissionMap=b(s.transmissionMap)),s.thicknessMap!==void 0&&(_e.thicknessMap=b(s.thicknessMap)),s.anisotropyMap!==void 0&&(_e.anisotropyMap=b(s.anisotropyMap)),s.sheenColorMap!==void 0&&(_e.sheenColorMap=b(s.sheenColorMap)),s.sheenRoughnessMap!==void 0&&(_e.sheenRoughnessMap=b(s.sheenRoughnessMap)),_e}setTextures(s){return this.textures=s,this}static createMaterialFromType(s){const a={ShadowMaterial,SpriteMaterial,RawShaderMaterial,ShaderMaterial,PointsMaterial,MeshPhysicalMaterial,MeshStandardMaterial,MeshPhongMaterial,MeshToonMaterial,MeshNormalMaterial,MeshLambertMaterial,MeshDepthMaterial,MeshDistanceMaterial,MeshBasicMaterial,MeshMatcapMaterial,LineDashedMaterial,LineBasicMaterial,Material};return new a[s]}}class LoaderUtils{static decodeText(s){if(typeof TextDecoder<"u")return new TextDecoder().decode(s);let a="";for(let b=0,_e=s.length;b<_e;b++)a+=String.fromCharCode(s[b]);try{return decodeURIComponent(escape(a))}catch{return a}}static extractUrlBase(s){const a=s.lastIndexOf("/");return a===-1?"./":s.slice(0,a+1)}static resolveURL(s,a){return typeof s!="string"||s===""?"":(/^https?:\/\//i.test(a)&&/^\//.test(s)&&(a=a.replace(/(^https?:\/\/[^\/]+).*/i,"$1")),/^(https?:)?\/\//i.test(s)||/^data:.*,.*$/i.test(s)||/^blob:.*$/i.test(s)?s:a+s)}}class InstancedBufferGeometry extends BufferGeometry{constructor(){super(),this.isInstancedBufferGeometry=!0,this.type="InstancedBufferGeometry",this.instanceCount=1/0}copy(s){return super.copy(s),this.instanceCount=s.instanceCount,this}toJSON(){const s=super.toJSON();return s.instanceCount=this.instanceCount,s.isInstancedBufferGeometry=!0,s}}class BufferGeometryLoader extends Loader{constructor(s){super(s)}load(s,a,b,_e){const bt=this,rn=new FileLoader(bt.manager);rn.setPath(bt.path),rn.setRequestHeader(bt.requestHeader),rn.setWithCredentials(bt.withCredentials),rn.load(s,function(sn){try{a(bt.parse(JSON.parse(sn)))}catch(yn){_e?_e(yn):console.error(yn),bt.manager.itemError(s)}},b,_e)}parse(s){const a={},b={};function _e(cr,hr){if(a[hr]!==void 0)return a[hr];const Ur=cr.interleavedBuffers[hr],Dr=bt(cr,Ur.buffer),zr=getTypedArray(Ur.type,Dr),rs=new InterleavedBuffer(zr,Ur.stride);return rs.uuid=Ur.uuid,a[hr]=rs,rs}function bt(cr,hr){if(b[hr]!==void 0)return b[hr];const Ur=cr.arrayBuffers[hr],Dr=new Uint32Array(Ur).buffer;return b[hr]=Dr,Dr}const rn=s.isInstancedBufferGeometry?new InstancedBufferGeometry:new BufferGeometry,sn=s.data.index;if(sn!==void 0){const cr=getTypedArray(sn.type,sn.array);rn.setIndex(new BufferAttribute(cr,1))}const yn=s.data.attributes;for(const cr in yn){const hr=yn[cr];let es;if(hr.isInterleavedBufferAttribute){const Ur=_e(s.data,hr.data);es=new InterleavedBufferAttribute(Ur,hr.itemSize,hr.offset,hr.normalized)}else{const Ur=getTypedArray(hr.type,hr.array),Dr=hr.isInstancedBufferAttribute?InstancedBufferAttribute:BufferAttribute;es=new Dr(Ur,hr.itemSize,hr.normalized)}hr.name!==void 0&&(es.name=hr.name),hr.usage!==void 0&&es.setUsage(hr.usage),hr.updateRange!==void 0&&(es.updateRange.offset=hr.updateRange.offset,es.updateRange.count=hr.updateRange.count),rn.setAttribute(cr,es)}const Pn=s.data.morphAttributes;if(Pn)for(const cr in Pn){const hr=Pn[cr],es=[];for(let Ur=0,Dr=hr.length;Ur<Dr;Ur++){const zr=hr[Ur];let rs;if(zr.isInterleavedBufferAttribute){const as=_e(s.data,zr.data);rs=new InterleavedBufferAttribute(as,zr.itemSize,zr.offset,zr.normalized)}else{const as=getTypedArray(zr.type,zr.array);rs=new BufferAttribute(as,zr.itemSize,zr.normalized)}zr.name!==void 0&&(rs.name=zr.name),es.push(rs)}rn.morphAttributes[cr]=es}s.data.morphTargetsRelative&&(rn.morphTargetsRelative=!0);const lr=s.data.groups||s.data.drawcalls||s.data.offsets;if(lr!==void 0)for(let cr=0,hr=lr.length;cr!==hr;++cr){const es=lr[cr];rn.addGroup(es.start,es.count,es.materialIndex)}const ar=s.data.boundingSphere;if(ar!==void 0){const cr=new Vector3;ar.center!==void 0&&cr.fromArray(ar.center),rn.boundingSphere=new Sphere(cr,ar.radius)}return s.name&&(rn.name=s.name),s.userData&&(rn.userData=s.userData),rn}}class ObjectLoader extends Loader{constructor(s){super(s)}load(s,a,b,_e){const bt=this,rn=this.path===""?LoaderUtils.extractUrlBase(s):this.path;this.resourcePath=this.resourcePath||rn;const sn=new FileLoader(this.manager);sn.setPath(this.path),sn.setRequestHeader(this.requestHeader),sn.setWithCredentials(this.withCredentials),sn.load(s,function(yn){let Pn=null;try{Pn=JSON.parse(yn)}catch(lr){_e!==void 0&&_e(lr),console.error("THREE:ObjectLoader: Can't parse "+s+".",lr.message);return}const zn=Pn.metadata;if(zn===void 0||zn.type===void 0||zn.type.toLowerCase()==="geometry"){_e!==void 0&&_e(new Error("THREE.ObjectLoader: Can't load "+s)),console.error("THREE.ObjectLoader: Can't load "+s);return}bt.parse(Pn,a)},b,_e)}async loadAsync(s,a){const b=this,_e=this.path===""?LoaderUtils.extractUrlBase(s):this.path;this.resourcePath=this.resourcePath||_e;const bt=new FileLoader(this.manager);bt.setPath(this.path),bt.setRequestHeader(this.requestHeader),bt.setWithCredentials(this.withCredentials);const rn=await bt.loadAsync(s,a),sn=JSON.parse(rn),yn=sn.metadata;if(yn===void 0||yn.type===void 0||yn.type.toLowerCase()==="geometry")throw new Error("THREE.ObjectLoader: Can't load "+s);return await b.parseAsync(sn)}parse(s,a){const b=this.parseAnimations(s.animations),_e=this.parseShapes(s.shapes),bt=this.parseGeometries(s.geometries,_e),rn=this.parseImages(s.images,function(){a!==void 0&&a(Pn)}),sn=this.parseTextures(s.textures,rn),yn=this.parseMaterials(s.materials,sn),Pn=this.parseObject(s.object,bt,yn,sn,b),zn=this.parseSkeletons(s.skeletons,Pn);if(this.bindSkeletons(Pn,zn),a!==void 0){let lr=!1;for(const ar in rn)if(rn[ar].data instanceof HTMLImageElement){lr=!0;break}lr===!1&&a(Pn)}return Pn}async parseAsync(s){const a=this.parseAnimations(s.animations),b=this.parseShapes(s.shapes),_e=this.parseGeometries(s.geometries,b),bt=await this.parseImagesAsync(s.images),rn=this.parseTextures(s.textures,bt),sn=this.parseMaterials(s.materials,rn),yn=this.parseObject(s.object,_e,sn,rn,a),Pn=this.parseSkeletons(s.skeletons,yn);return this.bindSkeletons(yn,Pn),yn}parseShapes(s){const a={};if(s!==void 0)for(let b=0,_e=s.length;b<_e;b++){const bt=new Shape().fromJSON(s[b]);a[bt.uuid]=bt}return a}parseSkeletons(s,a){const b={},_e={};if(a.traverse(function(bt){bt.isBone&&(_e[bt.uuid]=bt)}),s!==void 0)for(let bt=0,rn=s.length;bt<rn;bt++){const sn=new Skeleton().fromJSON(s[bt],_e);b[sn.uuid]=sn}return b}parseGeometries(s,a){const b={};if(s!==void 0){const _e=new BufferGeometryLoader;for(let bt=0,rn=s.length;bt<rn;bt++){let sn;const yn=s[bt];switch(yn.type){case"BufferGeometry":case"InstancedBufferGeometry":sn=_e.parse(yn);break;default:yn.type in Geometries?sn=Geometries[yn.type].fromJSON(yn,a):console.warn(`THREE.ObjectLoader: Unsupported geometry type "${yn.type}"`)}sn.uuid=yn.uuid,yn.name!==void 0&&(sn.name=yn.name),yn.userData!==void 0&&(sn.userData=yn.userData),b[yn.uuid]=sn}}return b}parseMaterials(s,a){const b={},_e={};if(s!==void 0){const bt=new MaterialLoader;bt.setTextures(a);for(let rn=0,sn=s.length;rn<sn;rn++){const yn=s[rn];b[yn.uuid]===void 0&&(b[yn.uuid]=bt.parse(yn)),_e[yn.uuid]=b[yn.uuid]}}return _e}parseAnimations(s){const a={};if(s!==void 0)for(let b=0;b<s.length;b++){const _e=s[b],bt=AnimationClip.parse(_e);a[bt.uuid]=bt}return a}parseImages(s,a){const b=this,_e={};let bt;function rn(yn){return b.manager.itemStart(yn),bt.load(yn,function(){b.manager.itemEnd(yn)},void 0,function(){b.manager.itemError(yn),b.manager.itemEnd(yn)})}function sn(yn){if(typeof yn=="string"){const Pn=yn,zn=/^(\/\/)|([a-z]+:(\/\/)?)/i.test(Pn)?Pn:b.resourcePath+Pn;return rn(zn)}else return yn.data?{data:getTypedArray(yn.type,yn.data),width:yn.width,height:yn.height}:null}if(s!==void 0&&s.length>0){const yn=new LoadingManager(a);bt=new ImageLoader(yn),bt.setCrossOrigin(this.crossOrigin);for(let Pn=0,zn=s.length;Pn<zn;Pn++){const lr=s[Pn],ar=lr.url;if(Array.isArray(ar)){const cr=[];for(let hr=0,es=ar.length;hr<es;hr++){const Ur=ar[hr],Dr=sn(Ur);Dr!==null&&(Dr instanceof HTMLImageElement?cr.push(Dr):cr.push(new DataTexture(Dr.data,Dr.width,Dr.height)))}_e[lr.uuid]=new Source(cr)}else{const cr=sn(lr.url);_e[lr.uuid]=new Source(cr)}}}return _e}async parseImagesAsync(s){const a=this,b={};let _e;async function bt(rn){if(typeof rn=="string"){const sn=rn,yn=/^(\/\/)|([a-z]+:(\/\/)?)/i.test(sn)?sn:a.resourcePath+sn;return await _e.loadAsync(yn)}else return rn.data?{data:getTypedArray(rn.type,rn.data),width:rn.width,height:rn.height}:null}if(s!==void 0&&s.length>0){_e=new ImageLoader(this.manager),_e.setCrossOrigin(this.crossOrigin);for(let rn=0,sn=s.length;rn<sn;rn++){const yn=s[rn],Pn=yn.url;if(Array.isArray(Pn)){const zn=[];for(let lr=0,ar=Pn.length;lr<ar;lr++){const cr=Pn[lr],hr=await bt(cr);hr!==null&&(hr instanceof HTMLImageElement?zn.push(hr):zn.push(new DataTexture(hr.data,hr.width,hr.height)))}b[yn.uuid]=new Source(zn)}else{const zn=await bt(yn.url);b[yn.uuid]=new Source(zn)}}}return b}parseTextures(s,a){function b(bt,rn){return typeof bt=="number"?bt:(console.warn("THREE.ObjectLoader.parseTexture: Constant should be in numeric form.",bt),rn[bt])}const _e={};if(s!==void 0)for(let bt=0,rn=s.length;bt<rn;bt++){const sn=s[bt];sn.image===void 0&&console.warn('THREE.ObjectLoader: No "image" specified for',sn.uuid),a[sn.image]===void 0&&console.warn("THREE.ObjectLoader: Undefined image",sn.image);const yn=a[sn.image],Pn=yn.data;let zn;Array.isArray(Pn)?(zn=new CubeTexture,Pn.length===6&&(zn.needsUpdate=!0)):(Pn&&Pn.data?zn=new DataTexture:zn=new Texture,Pn&&(zn.needsUpdate=!0)),zn.source=yn,zn.uuid=sn.uuid,sn.name!==void 0&&(zn.name=sn.name),sn.mapping!==void 0&&(zn.mapping=b(sn.mapping,TEXTURE_MAPPING)),sn.channel!==void 0&&(zn.channel=sn.channel),sn.offset!==void 0&&zn.offset.fromArray(sn.offset),sn.repeat!==void 0&&zn.repeat.fromArray(sn.repeat),sn.center!==void 0&&zn.center.fromArray(sn.center),sn.rotation!==void 0&&(zn.rotation=sn.rotation),sn.wrap!==void 0&&(zn.wrapS=b(sn.wrap[0],TEXTURE_WRAPPING),zn.wrapT=b(sn.wrap[1],TEXTURE_WRAPPING)),sn.format!==void 0&&(zn.format=sn.format),sn.internalFormat!==void 0&&(zn.internalFormat=sn.internalFormat),sn.type!==void 0&&(zn.type=sn.type),sn.colorSpace!==void 0&&(zn.colorSpace=sn.colorSpace),sn.encoding!==void 0&&(zn.encoding=sn.encoding),sn.minFilter!==void 0&&(zn.minFilter=b(sn.minFilter,TEXTURE_FILTER)),sn.magFilter!==void 0&&(zn.magFilter=b(sn.magFilter,TEXTURE_FILTER)),sn.anisotropy!==void 0&&(zn.anisotropy=sn.anisotropy),sn.flipY!==void 0&&(zn.flipY=sn.flipY),sn.generateMipmaps!==void 0&&(zn.generateMipmaps=sn.generateMipmaps),sn.premultiplyAlpha!==void 0&&(zn.premultiplyAlpha=sn.premultiplyAlpha),sn.unpackAlignment!==void 0&&(zn.unpackAlignment=sn.unpackAlignment),sn.compareFunction!==void 0&&(zn.compareFunction=sn.compareFunction),sn.userData!==void 0&&(zn.userData=sn.userData),_e[sn.uuid]=zn}return _e}parseObject(s,a,b,_e,bt){let rn;function sn(ar){return a[ar]===void 0&&console.warn("THREE.ObjectLoader: Undefined geometry",ar),a[ar]}function yn(ar){if(ar!==void 0){if(Array.isArray(ar)){const cr=[];for(let hr=0,es=ar.length;hr<es;hr++){const Ur=ar[hr];b[Ur]===void 0&&console.warn("THREE.ObjectLoader: Undefined material",Ur),cr.push(b[Ur])}return cr}return b[ar]===void 0&&console.warn("THREE.ObjectLoader: Undefined material",ar),b[ar]}}function Pn(ar){return _e[ar]===void 0&&console.warn("THREE.ObjectLoader: Undefined texture",ar),_e[ar]}let zn,lr;switch(s.type){case"Scene":rn=new Scene,s.background!==void 0&&(Number.isInteger(s.background)?rn.background=new Color$1(s.background):rn.background=Pn(s.background)),s.environment!==void 0&&(rn.environment=Pn(s.environment)),s.fog!==void 0&&(s.fog.type==="Fog"?rn.fog=new Fog(s.fog.color,s.fog.near,s.fog.far):s.fog.type==="FogExp2"&&(rn.fog=new FogExp2(s.fog.color,s.fog.density)),s.fog.name!==""&&(rn.fog.name=s.fog.name)),s.backgroundBlurriness!==void 0&&(rn.backgroundBlurriness=s.backgroundBlurriness),s.backgroundIntensity!==void 0&&(rn.backgroundIntensity=s.backgroundIntensity);break;case"PerspectiveCamera":rn=new PerspectiveCamera(s.fov,s.aspect,s.near,s.far),s.focus!==void 0&&(rn.focus=s.focus),s.zoom!==void 0&&(rn.zoom=s.zoom),s.filmGauge!==void 0&&(rn.filmGauge=s.filmGauge),s.filmOffset!==void 0&&(rn.filmOffset=s.filmOffset),s.view!==void 0&&(rn.view=Object.assign({},s.view));break;case"OrthographicCamera":rn=new OrthographicCamera(s.left,s.right,s.top,s.bottom,s.near,s.far),s.zoom!==void 0&&(rn.zoom=s.zoom),s.view!==void 0&&(rn.view=Object.assign({},s.view));break;case"AmbientLight":rn=new AmbientLight(s.color,s.intensity);break;case"DirectionalLight":rn=new DirectionalLight(s.color,s.intensity);break;case"PointLight":rn=new PointLight(s.color,s.intensity,s.distance,s.decay);break;case"RectAreaLight":rn=new RectAreaLight(s.color,s.intensity,s.width,s.height);break;case"SpotLight":rn=new SpotLight(s.color,s.intensity,s.distance,s.angle,s.penumbra,s.decay);break;case"HemisphereLight":rn=new HemisphereLight(s.color,s.groundColor,s.intensity);break;case"LightProbe":rn=new LightProbe().fromJSON(s);break;case"SkinnedMesh":zn=sn(s.geometry),lr=yn(s.material),rn=new SkinnedMesh(zn,lr),s.bindMode!==void 0&&(rn.bindMode=s.bindMode),s.bindMatrix!==void 0&&rn.bindMatrix.fromArray(s.bindMatrix),s.skeleton!==void 0&&(rn.skeleton=s.skeleton);break;case"Mesh":zn=sn(s.geometry),lr=yn(s.material),rn=new Mesh(zn,lr);break;case"InstancedMesh":zn=sn(s.geometry),lr=yn(s.material);const ar=s.count,cr=s.instanceMatrix,hr=s.instanceColor;rn=new InstancedMesh(zn,lr,ar),rn.instanceMatrix=new InstancedBufferAttribute(new Float32Array(cr.array),16),hr!==void 0&&(rn.instanceColor=new InstancedBufferAttribute(new Float32Array(hr.array),hr.itemSize));break;case"LOD":rn=new LOD;break;case"Line":rn=new Line(sn(s.geometry),yn(s.material));break;case"LineLoop":rn=new LineLoop(sn(s.geometry),yn(s.material));break;case"LineSegments":rn=new LineSegments(sn(s.geometry),yn(s.material));break;case"PointCloud":case"Points":rn=new Points(sn(s.geometry),yn(s.material));break;case"Sprite":rn=new Sprite(yn(s.material));break;case"Group":rn=new Group;break;case"Bone":rn=new Bone;break;default:rn=new Object3D}if(rn.uuid=s.uuid,s.name!==void 0&&(rn.name=s.name),s.matrix!==void 0?(rn.matrix.fromArray(s.matrix),s.matrixAutoUpdate!==void 0&&(rn.matrixAutoUpdate=s.matrixAutoUpdate),rn.matrixAutoUpdate&&rn.matrix.decompose(rn.position,rn.quaternion,rn.scale)):(s.position!==void 0&&rn.position.fromArray(s.position),s.rotation!==void 0&&rn.rotation.fromArray(s.rotation),s.quaternion!==void 0&&rn.quaternion.fromArray(s.quaternion),s.scale!==void 0&&rn.scale.fromArray(s.scale)),s.up!==void 0&&rn.up.fromArray(s.up),s.castShadow!==void 0&&(rn.castShadow=s.castShadow),s.receiveShadow!==void 0&&(rn.receiveShadow=s.receiveShadow),s.shadow&&(s.shadow.bias!==void 0&&(rn.shadow.bias=s.shadow.bias),s.shadow.normalBias!==void 0&&(rn.shadow.normalBias=s.shadow.normalBias),s.shadow.radius!==void 0&&(rn.shadow.radius=s.shadow.radius),s.shadow.mapSize!==void 0&&rn.shadow.mapSize.fromArray(s.shadow.mapSize),s.shadow.camera!==void 0&&(rn.shadow.camera=this.parseObject(s.shadow.camera))),s.visible!==void 0&&(rn.visible=s.visible),s.frustumCulled!==void 0&&(rn.frustumCulled=s.frustumCulled),s.renderOrder!==void 0&&(rn.renderOrder=s.renderOrder),s.userData!==void 0&&(rn.userData=s.userData),s.layers!==void 0&&(rn.layers.mask=s.layers),s.children!==void 0){const ar=s.children;for(let cr=0;cr<ar.length;cr++)rn.add(this.parseObject(ar[cr],a,b,_e,bt))}if(s.animations!==void 0){const ar=s.animations;for(let cr=0;cr<ar.length;cr++){const hr=ar[cr];rn.animations.push(bt[hr])}}if(s.type==="LOD"){s.autoUpdate!==void 0&&(rn.autoUpdate=s.autoUpdate);const ar=s.levels;for(let cr=0;cr<ar.length;cr++){const hr=ar[cr],es=rn.getObjectByProperty("uuid",hr.object);es!==void 0&&rn.addLevel(es,hr.distance,hr.hysteresis)}}return rn}bindSkeletons(s,a){Object.keys(a).length!==0&&s.traverse(function(b){if(b.isSkinnedMesh===!0&&b.skeleton!==void 0){const _e=a[b.skeleton];_e===void 0?console.warn("THREE.ObjectLoader: No skeleton found with UUID:",b.skeleton):b.bind(_e,b.bindMatrix)}})}}const TEXTURE_MAPPING={UVMapping,CubeReflectionMapping,CubeRefractionMapping,EquirectangularReflectionMapping,EquirectangularRefractionMapping,CubeUVReflectionMapping},TEXTURE_WRAPPING={RepeatWrapping,ClampToEdgeWrapping,MirroredRepeatWrapping},TEXTURE_FILTER={NearestFilter,NearestMipmapNearestFilter,NearestMipmapLinearFilter,LinearFilter,LinearMipmapNearestFilter,LinearMipmapLinearFilter};class ImageBitmapLoader extends Loader{constructor(s){super(s),this.isImageBitmapLoader=!0,typeof createImageBitmap>"u"&&console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported."),typeof fetch>"u"&&console.warn("THREE.ImageBitmapLoader: fetch() not supported."),this.options={premultiplyAlpha:"none"}}setOptions(s){return this.options=s,this}load(s,a,b,_e){s===void 0&&(s=""),this.path!==void 0&&(s=this.path+s),s=this.manager.resolveURL(s);const bt=this,rn=Cache.get(s);if(rn!==void 0)return bt.manager.itemStart(s),setTimeout(function(){a&&a(rn),bt.manager.itemEnd(s)},0),rn;const sn={};sn.credentials=this.crossOrigin==="anonymous"?"same-origin":"include",sn.headers=this.requestHeader,fetch(s,sn).then(function(yn){return yn.blob()}).then(function(yn){return createImageBitmap(yn,Object.assign(bt.options,{colorSpaceConversion:"none"}))}).then(function(yn){Cache.add(s,yn),a&&a(yn),bt.manager.itemEnd(s)}).catch(function(yn){_e&&_e(yn),bt.manager.itemError(s),bt.manager.itemEnd(s)}),bt.manager.itemStart(s)}}let _context;class AudioContext{static getContext(){return _context===void 0&&(_context=new(window.AudioContext||window.webkitAudioContext)),_context}static setContext(s){_context=s}}class AudioLoader extends Loader{constructor(s){super(s)}load(s,a,b,_e){const bt=this,rn=new FileLoader(this.manager);rn.setResponseType("arraybuffer"),rn.setPath(this.path),rn.setRequestHeader(this.requestHeader),rn.setWithCredentials(this.withCredentials),rn.load(s,function(yn){try{const Pn=yn.slice(0);AudioContext.getContext().decodeAudioData(Pn,function(lr){a(lr)},sn)}catch(Pn){sn(Pn)}},b,_e);function sn(yn){_e?_e(yn):console.error(yn),bt.manager.itemError(s)}}}const _eyeRight=new Matrix4,_eyeLeft=new Matrix4,_projectionMatrix=new Matrix4;class StereoCamera{constructor(){this.type="StereoCamera",this.aspect=1,this.eyeSep=.064,this.cameraL=new PerspectiveCamera,this.cameraL.layers.enable(1),this.cameraL.matrixAutoUpdate=!1,this.cameraR=new PerspectiveCamera,this.cameraR.layers.enable(2),this.cameraR.matrixAutoUpdate=!1,this._cache={focus:null,fov:null,aspect:null,near:null,far:null,zoom:null,eyeSep:null}}update(s){const a=this._cache;if(a.focus!==s.focus||a.fov!==s.fov||a.aspect!==s.aspect*this.aspect||a.near!==s.near||a.far!==s.far||a.zoom!==s.zoom||a.eyeSep!==this.eyeSep){a.focus=s.focus,a.fov=s.fov,a.aspect=s.aspect*this.aspect,a.near=s.near,a.far=s.far,a.zoom=s.zoom,a.eyeSep=this.eyeSep,_projectionMatrix.copy(s.projectionMatrix);const _e=a.eyeSep/2,bt=_e*a.near/a.focus,rn=a.near*Math.tan(DEG2RAD$1*a.fov*.5)/a.zoom;let sn,yn;_eyeLeft.elements[12]=-_e,_eyeRight.elements[12]=_e,sn=-rn*a.aspect+bt,yn=rn*a.aspect+bt,_projectionMatrix.elements[0]=2*a.near/(yn-sn),_projectionMatrix.elements[8]=(yn+sn)/(yn-sn),this.cameraL.projectionMatrix.copy(_projectionMatrix),sn=-rn*a.aspect-bt,yn=rn*a.aspect-bt,_projectionMatrix.elements[0]=2*a.near/(yn-sn),_projectionMatrix.elements[8]=(yn+sn)/(yn-sn),this.cameraR.projectionMatrix.copy(_projectionMatrix)}this.cameraL.matrixWorld.copy(s.matrixWorld).multiply(_eyeLeft),this.cameraR.matrixWorld.copy(s.matrixWorld).multiply(_eyeRight)}}class Clock{constructor(s=!0){this.autoStart=s,this.startTime=0,this.oldTime=0,this.elapsedTime=0,this.running=!1}start(){this.startTime=now(),this.oldTime=this.startTime,this.elapsedTime=0,this.running=!0}stop(){this.getElapsedTime(),this.running=!1,this.autoStart=!1}getElapsedTime(){return this.getDelta(),this.elapsedTime}getDelta(){let s=0;if(this.autoStart&&!this.running)return this.start(),0;if(this.running){const a=now();s=(a-this.oldTime)/1e3,this.oldTime=a,this.elapsedTime+=s}return s}}function now(){return(typeof performance>"u"?Date:performance).now()}const _position$1=new Vector3,_quaternion$1=new Quaternion,_scale$1=new Vector3,_orientation$1=new Vector3;class AudioListener extends Object3D{constructor(){super(),this.type="AudioListener",this.context=AudioContext.getContext(),this.gain=this.context.createGain(),this.gain.connect(this.context.destination),this.filter=null,this.timeDelta=0,this._clock=new Clock}getInput(){return this.gain}removeFilter(){return this.filter!==null&&(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination),this.gain.connect(this.context.destination),this.filter=null),this}getFilter(){return this.filter}setFilter(s){return this.filter!==null?(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination)):this.gain.disconnect(this.context.destination),this.filter=s,this.gain.connect(this.filter),this.filter.connect(this.context.destination),this}getMasterVolume(){return this.gain.gain.value}setMasterVolume(s){return this.gain.gain.setTargetAtTime(s,this.context.currentTime,.01),this}updateMatrixWorld(s){super.updateMatrixWorld(s);const a=this.context.listener,b=this.up;if(this.timeDelta=this._clock.getDelta(),this.matrixWorld.decompose(_position$1,_quaternion$1,_scale$1),_orientation$1.set(0,0,-1).applyQuaternion(_quaternion$1),a.positionX){const _e=this.context.currentTime+this.timeDelta;a.positionX.linearRampToValueAtTime(_position$1.x,_e),a.positionY.linearRampToValueAtTime(_position$1.y,_e),a.positionZ.linearRampToValueAtTime(_position$1.z,_e),a.forwardX.linearRampToValueAtTime(_orientation$1.x,_e),a.forwardY.linearRampToValueAtTime(_orientation$1.y,_e),a.forwardZ.linearRampToValueAtTime(_orientation$1.z,_e),a.upX.linearRampToValueAtTime(b.x,_e),a.upY.linearRampToValueAtTime(b.y,_e),a.upZ.linearRampToValueAtTime(b.z,_e)}else a.setPosition(_position$1.x,_position$1.y,_position$1.z),a.setOrientation(_orientation$1.x,_orientation$1.y,_orientation$1.z,b.x,b.y,b.z)}}class Audio extends Object3D{constructor(s){super(),this.type="Audio",this.listener=s,this.context=s.context,this.gain=this.context.createGain(),this.gain.connect(s.getInput()),this.autoplay=!1,this.buffer=null,this.detune=0,this.loop=!1,this.loopStart=0,this.loopEnd=0,this.offset=0,this.duration=void 0,this.playbackRate=1,this.isPlaying=!1,this.hasPlaybackControl=!0,this.source=null,this.sourceType="empty",this._startedAt=0,this._progress=0,this._connected=!1,this.filters=[]}getOutput(){return this.gain}setNodeSource(s){return this.hasPlaybackControl=!1,this.sourceType="audioNode",this.source=s,this.connect(),this}setMediaElementSource(s){return this.hasPlaybackControl=!1,this.sourceType="mediaNode",this.source=this.context.createMediaElementSource(s),this.connect(),this}setMediaStreamSource(s){return this.hasPlaybackControl=!1,this.sourceType="mediaStreamNode",this.source=this.context.createMediaStreamSource(s),this.connect(),this}setBuffer(s){return this.buffer=s,this.sourceType="buffer",this.autoplay&&this.play(),this}play(s=0){if(this.isPlaying===!0){console.warn("THREE.Audio: Audio is already playing.");return}if(this.hasPlaybackControl===!1){console.warn("THREE.Audio: this Audio has no playback control.");return}this._startedAt=this.context.currentTime+s;const a=this.context.createBufferSource();return a.buffer=this.buffer,a.loop=this.loop,a.loopStart=this.loopStart,a.loopEnd=this.loopEnd,a.onended=this.onEnded.bind(this),a.start(this._startedAt,this._progress+this.offset,this.duration),this.isPlaying=!0,this.source=a,this.setDetune(this.detune),this.setPlaybackRate(this.playbackRate),this.connect()}pause(){if(this.hasPlaybackControl===!1){console.warn("THREE.Audio: this Audio has no playback control.");return}return this.isPlaying===!0&&(this._progress+=Math.max(this.context.currentTime-this._startedAt,0)*this.playbackRate,this.loop===!0&&(this._progress=this._progress%(this.duration||this.buffer.duration)),this.source.stop(),this.source.onended=null,this.isPlaying=!1),this}stop(){if(this.hasPlaybackControl===!1){console.warn("THREE.Audio: this Audio has no playback control.");return}return this._progress=0,this.source!==null&&(this.source.stop(),this.source.onended=null),this.isPlaying=!1,this}connect(){if(this.filters.length>0){this.source.connect(this.filters[0]);for(let s=1,a=this.filters.length;s<a;s++)this.filters[s-1].connect(this.filters[s]);this.filters[this.filters.length-1].connect(this.getOutput())}else this.source.connect(this.getOutput());return this._connected=!0,this}disconnect(){if(this._connected!==!1){if(this.filters.length>0){this.source.disconnect(this.filters[0]);for(let s=1,a=this.filters.length;s<a;s++)this.filters[s-1].disconnect(this.filters[s]);this.filters[this.filters.length-1].disconnect(this.getOutput())}else this.source.disconnect(this.getOutput());return this._connected=!1,this}}getFilters(){return this.filters}setFilters(s){return s||(s=[]),this._connected===!0?(this.disconnect(),this.filters=s.slice(),this.connect()):this.filters=s.slice(),this}setDetune(s){if(this.detune=s,this.source.detune!==void 0)return this.isPlaying===!0&&this.source.detune.setTargetAtTime(this.detune,this.context.currentTime,.01),this}getDetune(){return this.detune}getFilter(){return this.getFilters()[0]}setFilter(s){return this.setFilters(s?[s]:[])}setPlaybackRate(s){if(this.hasPlaybackControl===!1){console.warn("THREE.Audio: this Audio has no playback control.");return}return this.playbackRate=s,this.isPlaying===!0&&this.source.playbackRate.setTargetAtTime(this.playbackRate,this.context.currentTime,.01),this}getPlaybackRate(){return this.playbackRate}onEnded(){this.isPlaying=!1}getLoop(){return this.hasPlaybackControl===!1?(console.warn("THREE.Audio: this Audio has no playback control."),!1):this.loop}setLoop(s){if(this.hasPlaybackControl===!1){console.warn("THREE.Audio: this Audio has no playback control.");return}return this.loop=s,this.isPlaying===!0&&(this.source.loop=this.loop),this}setLoopStart(s){return this.loopStart=s,this}setLoopEnd(s){return this.loopEnd=s,this}getVolume(){return this.gain.gain.value}setVolume(s){return this.gain.gain.setTargetAtTime(s,this.context.currentTime,.01),this}}const _position=new Vector3,_quaternion=new Quaternion,_scale=new Vector3,_orientation=new Vector3;class PositionalAudio extends Audio{constructor(s){super(s),this.panner=this.context.createPanner(),this.panner.panningModel="HRTF",this.panner.connect(this.gain)}connect(){super.connect(),this.panner.connect(this.gain)}disconnect(){super.disconnect(),this.panner.disconnect(this.gain)}getOutput(){return this.panner}getRefDistance(){return this.panner.refDistance}setRefDistance(s){return this.panner.refDistance=s,this}getRolloffFactor(){return this.panner.rolloffFactor}setRolloffFactor(s){return this.panner.rolloffFactor=s,this}getDistanceModel(){return this.panner.distanceModel}setDistanceModel(s){return this.panner.distanceModel=s,this}getMaxDistance(){return this.panner.maxDistance}setMaxDistance(s){return this.panner.maxDistance=s,this}setDirectionalCone(s,a,b){return this.panner.coneInnerAngle=s,this.panner.coneOuterAngle=a,this.panner.coneOuterGain=b,this}updateMatrixWorld(s){if(super.updateMatrixWorld(s),this.hasPlaybackControl===!0&&this.isPlaying===!1)return;this.matrixWorld.decompose(_position,_quaternion,_scale),_orientation.set(0,0,1).applyQuaternion(_quaternion);const a=this.panner;if(a.positionX){const b=this.context.currentTime+this.listener.timeDelta;a.positionX.linearRampToValueAtTime(_position.x,b),a.positionY.linearRampToValueAtTime(_position.y,b),a.positionZ.linearRampToValueAtTime(_position.z,b),a.orientationX.linearRampToValueAtTime(_orientation.x,b),a.orientationY.linearRampToValueAtTime(_orientation.y,b),a.orientationZ.linearRampToValueAtTime(_orientation.z,b)}else a.setPosition(_position.x,_position.y,_position.z),a.setOrientation(_orientation.x,_orientation.y,_orientation.z)}}class AudioAnalyser{constructor(s,a=2048){this.analyser=s.context.createAnalyser(),this.analyser.fftSize=a,this.data=new Uint8Array(this.analyser.frequencyBinCount),s.getOutput().connect(this.analyser)}getFrequencyData(){return this.analyser.getByteFrequencyData(this.data),this.data}getAverageFrequency(){let s=0;const a=this.getFrequencyData();for(let b=0;b<a.length;b++)s+=a[b];return s/a.length}}class PropertyMixer{constructor(s,a,b){this.binding=s,this.valueSize=b;let _e,bt,rn;switch(a){case"quaternion":_e=this._slerp,bt=this._slerpAdditive,rn=this._setAdditiveIdentityQuaternion,this.buffer=new Float64Array(b*6),this._workIndex=5;break;case"string":case"bool":_e=this._select,bt=this._select,rn=this._setAdditiveIdentityOther,this.buffer=new Array(b*5);break;default:_e=this._lerp,bt=this._lerpAdditive,rn=this._setAdditiveIdentityNumeric,this.buffer=new Float64Array(b*5)}this._mixBufferRegion=_e,this._mixBufferRegionAdditive=bt,this._setIdentity=rn,this._origIndex=3,this._addIndex=4,this.cumulativeWeight=0,this.cumulativeWeightAdditive=0,this.useCount=0,this.referenceCount=0}accumulate(s,a){const b=this.buffer,_e=this.valueSize,bt=s*_e+_e;let rn=this.cumulativeWeight;if(rn===0){for(let sn=0;sn!==_e;++sn)b[bt+sn]=b[sn];rn=a}else{rn+=a;const sn=a/rn;this._mixBufferRegion(b,bt,0,sn,_e)}this.cumulativeWeight=rn}accumulateAdditive(s){const a=this.buffer,b=this.valueSize,_e=b*this._addIndex;this.cumulativeWeightAdditive===0&&this._setIdentity(),this._mixBufferRegionAdditive(a,_e,0,s,b),this.cumulativeWeightAdditive+=s}apply(s){const a=this.valueSize,b=this.buffer,_e=s*a+a,bt=this.cumulativeWeight,rn=this.cumulativeWeightAdditive,sn=this.binding;if(this.cumulativeWeight=0,this.cumulativeWeightAdditive=0,bt<1){const yn=a*this._origIndex;this._mixBufferRegion(b,_e,yn,1-bt,a)}rn>0&&this._mixBufferRegionAdditive(b,_e,this._addIndex*a,1,a);for(let yn=a,Pn=a+a;yn!==Pn;++yn)if(b[yn]!==b[yn+a]){sn.setValue(b,_e);break}}saveOriginalState(){const s=this.binding,a=this.buffer,b=this.valueSize,_e=b*this._origIndex;s.getValue(a,_e);for(let bt=b,rn=_e;bt!==rn;++bt)a[bt]=a[_e+bt%b];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){const s=this.valueSize*3;this.binding.setValue(this.buffer,s)}_setAdditiveIdentityNumeric(){const s=this._addIndex*this.valueSize,a=s+this.valueSize;for(let b=s;b<a;b++)this.buffer[b]=0}_setAdditiveIdentityQuaternion(){this._setAdditiveIdentityNumeric(),this.buffer[this._addIndex*this.valueSize+3]=1}_setAdditiveIdentityOther(){const s=this._origIndex*this.valueSize,a=this._addIndex*this.valueSize;for(let b=0;b<this.valueSize;b++)this.buffer[a+b]=this.buffer[s+b]}_select(s,a,b,_e,bt){if(_e>=.5)for(let rn=0;rn!==bt;++rn)s[a+rn]=s[b+rn]}_slerp(s,a,b,_e){Quaternion.slerpFlat(s,a,s,a,s,b,_e)}_slerpAdditive(s,a,b,_e,bt){const rn=this._workIndex*bt;Quaternion.multiplyQuaternionsFlat(s,rn,s,a,s,b),Quaternion.slerpFlat(s,a,s,a,s,rn,_e)}_lerp(s,a,b,_e,bt){const rn=1-_e;for(let sn=0;sn!==bt;++sn){const yn=a+sn;s[yn]=s[yn]*rn+s[b+sn]*_e}}_lerpAdditive(s,a,b,_e,bt){for(let rn=0;rn!==bt;++rn){const sn=a+rn;s[sn]=s[sn]+s[b+rn]*_e}}}const _RESERVED_CHARS_RE="\\[\\]\\.:\\/",_reservedRe=new RegExp("["+_RESERVED_CHARS_RE+"]","g"),_wordChar="[^"+_RESERVED_CHARS_RE+"]",_wordCharOrDot="[^"+_RESERVED_CHARS_RE.replace("\\.","")+"]",_directoryRe=/((?:WC+[\/:])*)/.source.replace("WC",_wordChar),_nodeRe=/(WCOD+)?/.source.replace("WCOD",_wordCharOrDot),_objectRe=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",_wordChar),_propertyRe=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",_wordChar),_trackRe=new RegExp("^"+_directoryRe+_nodeRe+_objectRe+_propertyRe+"$"),_supportedObjectNames=["material","materials","bones","map"];class Composite{constructor(s,a,b){const _e=b||PropertyBinding.parseTrackName(a);this._targetGroup=s,this._bindings=s.subscribe_(a,_e)}getValue(s,a){this.bind();const b=this._targetGroup.nCachedObjects_,_e=this._bindings[b];_e!==void 0&&_e.getValue(s,a)}setValue(s,a){const b=this._bindings;for(let _e=this._targetGroup.nCachedObjects_,bt=b.length;_e!==bt;++_e)b[_e].setValue(s,a)}bind(){const s=this._bindings;for(let a=this._targetGroup.nCachedObjects_,b=s.length;a!==b;++a)s[a].bind()}unbind(){const s=this._bindings;for(let a=this._targetGroup.nCachedObjects_,b=s.length;a!==b;++a)s[a].unbind()}}class PropertyBinding{constructor(s,a,b){this.path=a,this.parsedPath=b||PropertyBinding.parseTrackName(a),this.node=PropertyBinding.findNode(s,this.parsedPath.nodeName),this.rootNode=s,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(s,a,b){return s&&s.isAnimationObjectGroup?new PropertyBinding.Composite(s,a,b):new PropertyBinding(s,a,b)}static sanitizeNodeName(s){return s.replace(/\s/g,"_").replace(_reservedRe,"")}static parseTrackName(s){const a=_trackRe.exec(s);if(a===null)throw new Error("PropertyBinding: Cannot parse trackName: "+s);const b={nodeName:a[2],objectName:a[3],objectIndex:a[4],propertyName:a[5],propertyIndex:a[6]},_e=b.nodeName&&b.nodeName.lastIndexOf(".");if(_e!==void 0&&_e!==-1){const bt=b.nodeName.substring(_e+1);_supportedObjectNames.indexOf(bt)!==-1&&(b.nodeName=b.nodeName.substring(0,_e),b.objectName=bt)}if(b.propertyName===null||b.propertyName.length===0)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+s);return b}static findNode(s,a){if(a===void 0||a===""||a==="."||a===-1||a===s.name||a===s.uuid)return s;if(s.skeleton){const b=s.skeleton.getBoneByName(a);if(b!==void 0)return b}if(s.children){const b=function(bt){for(let rn=0;rn<bt.length;rn++){const sn=bt[rn];if(sn.name===a||sn.uuid===a)return sn;const yn=b(sn.children);if(yn)return yn}return null},_e=b(s.children);if(_e)return _e}return null}_getValue_unavailable(){}_setValue_unavailable(){}_getValue_direct(s,a){s[a]=this.targetObject[this.propertyName]}_getValue_array(s,a){const b=this.resolvedProperty;for(let _e=0,bt=b.length;_e!==bt;++_e)s[a++]=b[_e]}_getValue_arrayElement(s,a){s[a]=this.resolvedProperty[this.propertyIndex]}_getValue_toArray(s,a){this.resolvedProperty.toArray(s,a)}_setValue_direct(s,a){this.targetObject[this.propertyName]=s[a]}_setValue_direct_setNeedsUpdate(s,a){this.targetObject[this.propertyName]=s[a],this.targetObject.needsUpdate=!0}_setValue_direct_setMatrixWorldNeedsUpdate(s,a){this.targetObject[this.propertyName]=s[a],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_array(s,a){const b=this.resolvedProperty;for(let _e=0,bt=b.length;_e!==bt;++_e)b[_e]=s[a++]}_setValue_array_setNeedsUpdate(s,a){const b=this.resolvedProperty;for(let _e=0,bt=b.length;_e!==bt;++_e)b[_e]=s[a++];this.targetObject.needsUpdate=!0}_setValue_array_setMatrixWorldNeedsUpdate(s,a){const b=this.resolvedProperty;for(let _e=0,bt=b.length;_e!==bt;++_e)b[_e]=s[a++];this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_arrayElement(s,a){this.resolvedProperty[this.propertyIndex]=s[a]}_setValue_arrayElement_setNeedsUpdate(s,a){this.resolvedProperty[this.propertyIndex]=s[a],this.targetObject.needsUpdate=!0}_setValue_arrayElement_setMatrixWorldNeedsUpdate(s,a){this.resolvedProperty[this.propertyIndex]=s[a],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_fromArray(s,a){this.resolvedProperty.fromArray(s,a)}_setValue_fromArray_setNeedsUpdate(s,a){this.resolvedProperty.fromArray(s,a),this.targetObject.needsUpdate=!0}_setValue_fromArray_setMatrixWorldNeedsUpdate(s,a){this.resolvedProperty.fromArray(s,a),this.targetObject.matrixWorldNeedsUpdate=!0}_getValue_unbound(s,a){this.bind(),this.getValue(s,a)}_setValue_unbound(s,a){this.bind(),this.setValue(s,a)}bind(){let s=this.node;const a=this.parsedPath,b=a.objectName,_e=a.propertyName;let bt=a.propertyIndex;if(s||(s=PropertyBinding.findNode(this.rootNode,a.nodeName),this.node=s),this.getValue=this._getValue_unavailable,this.setValue=this._setValue_unavailable,!s){console.warn("THREE.PropertyBinding: No target node found for track: "+this.path+".");return}if(b){let Pn=a.objectIndex;switch(b){case"materials":if(!s.material){console.error("THREE.PropertyBinding: Can not bind to material as node does not have a material.",this);return}if(!s.material.materials){console.error("THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.",this);return}s=s.material.materials;break;case"bones":if(!s.skeleton){console.error("THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.",this);return}s=s.skeleton.bones;for(let zn=0;zn<s.length;zn++)if(s[zn].name===Pn){Pn=zn;break}break;case"map":if("map"in s){s=s.map;break}if(!s.material){console.error("THREE.PropertyBinding: Can not bind to material as node does not have a material.",this);return}if(!s.material.map){console.error("THREE.PropertyBinding: Can not bind to material.map as node.material does not have a map.",this);return}s=s.material.map;break;default:if(s[b]===void 0){console.error("THREE.PropertyBinding: Can not bind to objectName of node undefined.",this);return}s=s[b]}if(Pn!==void 0){if(s[Pn]===void 0){console.error("THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.",this,s);return}s=s[Pn]}}const rn=s[_e];if(rn===void 0){const Pn=a.nodeName;console.error("THREE.PropertyBinding: Trying to update property for track: "+Pn+"."+_e+" but it wasn't found.",s);return}let sn=this.Versioning.None;this.targetObject=s,s.needsUpdate!==void 0?sn=this.Versioning.NeedsUpdate:s.matrixWorldNeedsUpdate!==void 0&&(sn=this.Versioning.MatrixWorldNeedsUpdate);let yn=this.BindingType.Direct;if(bt!==void 0){if(_e==="morphTargetInfluences"){if(!s.geometry){console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.",this);return}if(!s.geometry.morphAttributes){console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.",this);return}s.morphTargetDictionary[bt]!==void 0&&(bt=s.morphTargetDictionary[bt])}yn=this.BindingType.ArrayElement,this.resolvedProperty=rn,this.propertyIndex=bt}else rn.fromArray!==void 0&&rn.toArray!==void 0?(yn=this.BindingType.HasFromToArray,this.resolvedProperty=rn):Array.isArray(rn)?(yn=this.BindingType.EntireArray,this.resolvedProperty=rn):this.propertyName=_e;this.getValue=this.GetterByBindingType[yn],this.setValue=this.SetterByBindingTypeAndVersioning[yn][sn]}unbind(){this.node=null,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}}PropertyBinding.Composite=Composite;PropertyBinding.prototype.BindingType={Direct:0,EntireArray:1,ArrayElement:2,HasFromToArray:3};PropertyBinding.prototype.Versioning={None:0,NeedsUpdate:1,MatrixWorldNeedsUpdate:2};PropertyBinding.prototype.GetterByBindingType=[PropertyBinding.prototype._getValue_direct,PropertyBinding.prototype._getValue_array,PropertyBinding.prototype._getValue_arrayElement,PropertyBinding.prototype._getValue_toArray];PropertyBinding.prototype.SetterByBindingTypeAndVersioning=[[PropertyBinding.prototype._setValue_direct,PropertyBinding.prototype._setValue_direct_setNeedsUpdate,PropertyBinding.prototype._setValue_direct_setMatrixWorldNeedsUpdate],[PropertyBinding.prototype._setValue_array,PropertyBinding.prototype._setValue_array_setNeedsUpdate,PropertyBinding.prototype._setValue_array_setMatrixWorldNeedsUpdate],[PropertyBinding.prototype._setValue_arrayElement,PropertyBinding.prototype._setValue_arrayElement_setNeedsUpdate,PropertyBinding.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate],[PropertyBinding.prototype._setValue_fromArray,PropertyBinding.prototype._setValue_fromArray_setNeedsUpdate,PropertyBinding.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate]];class AnimationObjectGroup{constructor(){this.isAnimationObjectGroup=!0,this.uuid=generateUUID(),this._objects=Array.prototype.slice.call(arguments),this.nCachedObjects_=0;const s={};this._indicesByUUID=s;for(let b=0,_e=arguments.length;b!==_e;++b)s[arguments[b].uuid]=b;this._paths=[],this._parsedPaths=[],this._bindings=[],this._bindingsIndicesByPath={};const a=this;this.stats={objects:{get total(){return a._objects.length},get inUse(){return this.total-a.nCachedObjects_}},get bindingsPerObject(){return a._bindings.length}}}add(){const s=this._objects,a=this._indicesByUUID,b=this._paths,_e=this._parsedPaths,bt=this._bindings,rn=bt.length;let sn,yn=s.length,Pn=this.nCachedObjects_;for(let zn=0,lr=arguments.length;zn!==lr;++zn){const ar=arguments[zn],cr=ar.uuid;let hr=a[cr];if(hr===void 0){hr=yn++,a[cr]=hr,s.push(ar);for(let es=0,Ur=rn;es!==Ur;++es)bt[es].push(new PropertyBinding(ar,b[es],_e[es]))}else if(hr<Pn){sn=s[hr];const es=--Pn,Ur=s[es];a[Ur.uuid]=hr,s[hr]=Ur,a[cr]=es,s[es]=ar;for(let Dr=0,zr=rn;Dr!==zr;++Dr){const rs=bt[Dr],as=rs[es];let os=rs[hr];rs[hr]=as,os===void 0&&(os=new PropertyBinding(ar,b[Dr],_e[Dr])),rs[es]=os}}else s[hr]!==sn&&console.error("THREE.AnimationObjectGroup: Different objects with the same UUID detected. Clean the caches or recreate your infrastructure when reloading scenes.")}this.nCachedObjects_=Pn}remove(){const s=this._objects,a=this._indicesByUUID,b=this._bindings,_e=b.length;let bt=this.nCachedObjects_;for(let rn=0,sn=arguments.length;rn!==sn;++rn){const yn=arguments[rn],Pn=yn.uuid,zn=a[Pn];if(zn!==void 0&&zn>=bt){const lr=bt++,ar=s[lr];a[ar.uuid]=zn,s[zn]=ar,a[Pn]=lr,s[lr]=yn;for(let cr=0,hr=_e;cr!==hr;++cr){const es=b[cr],Ur=es[lr],Dr=es[zn];es[zn]=Ur,es[lr]=Dr}}}this.nCachedObjects_=bt}uncache(){const s=this._objects,a=this._indicesByUUID,b=this._bindings,_e=b.length;let bt=this.nCachedObjects_,rn=s.length;for(let sn=0,yn=arguments.length;sn!==yn;++sn){const Pn=arguments[sn],zn=Pn.uuid,lr=a[zn];if(lr!==void 0)if(delete a[zn],lr<bt){const ar=--bt,cr=s[ar],hr=--rn,es=s[hr];a[cr.uuid]=lr,s[lr]=cr,a[es.uuid]=ar,s[ar]=es,s.pop();for(let Ur=0,Dr=_e;Ur!==Dr;++Ur){const zr=b[Ur],rs=zr[ar],as=zr[hr];zr[lr]=rs,zr[ar]=as,zr.pop()}}else{const ar=--rn,cr=s[ar];ar>0&&(a[cr.uuid]=lr),s[lr]=cr,s.pop();for(let hr=0,es=_e;hr!==es;++hr){const Ur=b[hr];Ur[lr]=Ur[ar],Ur.pop()}}}this.nCachedObjects_=bt}subscribe_(s,a){const b=this._bindingsIndicesByPath;let _e=b[s];const bt=this._bindings;if(_e!==void 0)return bt[_e];const rn=this._paths,sn=this._parsedPaths,yn=this._objects,Pn=yn.length,zn=this.nCachedObjects_,lr=new Array(Pn);_e=bt.length,b[s]=_e,rn.push(s),sn.push(a),bt.push(lr);for(let ar=zn,cr=yn.length;ar!==cr;++ar){const hr=yn[ar];lr[ar]=new PropertyBinding(hr,s,a)}return lr}unsubscribe_(s){const a=this._bindingsIndicesByPath,b=a[s];if(b!==void 0){const _e=this._paths,bt=this._parsedPaths,rn=this._bindings,sn=rn.length-1,yn=rn[sn],Pn=s[sn];a[Pn]=b,rn[b]=yn,rn.pop(),bt[b]=bt[sn],bt.pop(),_e[b]=_e[sn],_e.pop()}}}class AnimationAction{constructor(s,a,b=null,_e=a.blendMode){this._mixer=s,this._clip=a,this._localRoot=b,this.blendMode=_e;const bt=a.tracks,rn=bt.length,sn=new Array(rn),yn={endingStart:ZeroCurvatureEnding,endingEnd:ZeroCurvatureEnding};for(let Pn=0;Pn!==rn;++Pn){const zn=bt[Pn].createInterpolant(null);sn[Pn]=zn,zn.settings=yn}this._interpolantSettings=yn,this._interpolants=sn,this._propertyBindings=new Array(rn),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=LoopRepeat,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}play(){return this._mixer._activateAction(this),this}stop(){return this._mixer._deactivateAction(this),this.reset()}reset(){return this.paused=!1,this.enabled=!0,this.time=0,this._loopCount=-1,this._startTime=null,this.stopFading().stopWarping()}isRunning(){return this.enabled&&!this.paused&&this.timeScale!==0&&this._startTime===null&&this._mixer._isActiveAction(this)}isScheduled(){return this._mixer._isActiveAction(this)}startAt(s){return this._startTime=s,this}setLoop(s,a){return this.loop=s,this.repetitions=a,this}setEffectiveWeight(s){return this.weight=s,this._effectiveWeight=this.enabled?s:0,this.stopFading()}getEffectiveWeight(){return this._effectiveWeight}fadeIn(s){return this._scheduleFading(s,0,1)}fadeOut(s){return this._scheduleFading(s,1,0)}crossFadeFrom(s,a,b){if(s.fadeOut(a),this.fadeIn(a),b){const _e=this._clip.duration,bt=s._clip.duration,rn=bt/_e,sn=_e/bt;s.warp(1,rn,a),this.warp(sn,1,a)}return this}crossFadeTo(s,a,b){return s.crossFadeFrom(this,a,b)}stopFading(){const s=this._weightInterpolant;return s!==null&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(s)),this}setEffectiveTimeScale(s){return this.timeScale=s,this._effectiveTimeScale=this.paused?0:s,this.stopWarping()}getEffectiveTimeScale(){return this._effectiveTimeScale}setDuration(s){return this.timeScale=this._clip.duration/s,this.stopWarping()}syncWith(s){return this.time=s.time,this.timeScale=s.timeScale,this.stopWarping()}halt(s){return this.warp(this._effectiveTimeScale,0,s)}warp(s,a,b){const _e=this._mixer,bt=_e.time,rn=this.timeScale;let sn=this._timeScaleInterpolant;sn===null&&(sn=_e._lendControlInterpolant(),this._timeScaleInterpolant=sn);const yn=sn.parameterPositions,Pn=sn.sampleValues;return yn[0]=bt,yn[1]=bt+b,Pn[0]=s/rn,Pn[1]=a/rn,this}stopWarping(){const s=this._timeScaleInterpolant;return s!==null&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(s)),this}getMixer(){return this._mixer}getClip(){return this._clip}getRoot(){return this._localRoot||this._mixer._root}_update(s,a,b,_e){if(!this.enabled){this._updateWeight(s);return}const bt=this._startTime;if(bt!==null){const yn=(s-bt)*b;yn<0||b===0?a=0:(this._startTime=null,a=b*yn)}a*=this._updateTimeScale(s);const rn=this._updateTime(a),sn=this._updateWeight(s);if(sn>0){const yn=this._interpolants,Pn=this._propertyBindings;switch(this.blendMode){case AdditiveAnimationBlendMode:for(let zn=0,lr=yn.length;zn!==lr;++zn)yn[zn].evaluate(rn),Pn[zn].accumulateAdditive(sn);break;case NormalAnimationBlendMode:default:for(let zn=0,lr=yn.length;zn!==lr;++zn)yn[zn].evaluate(rn),Pn[zn].accumulate(_e,sn)}}}_updateWeight(s){let a=0;if(this.enabled){a=this.weight;const b=this._weightInterpolant;if(b!==null){const _e=b.evaluate(s)[0];a*=_e,s>b.parameterPositions[1]&&(this.stopFading(),_e===0&&(this.enabled=!1))}}return this._effectiveWeight=a,a}_updateTimeScale(s){let a=0;if(!this.paused){a=this.timeScale;const b=this._timeScaleInterpolant;if(b!==null){const _e=b.evaluate(s)[0];a*=_e,s>b.parameterPositions[1]&&(this.stopWarping(),a===0?this.paused=!0:this.timeScale=a)}}return this._effectiveTimeScale=a,a}_updateTime(s){const a=this._clip.duration,b=this.loop;let _e=this.time+s,bt=this._loopCount;const rn=b===LoopPingPong;if(s===0)return bt===-1?_e:rn&&(bt&1)===1?a-_e:_e;if(b===LoopOnce){bt===-1&&(this._loopCount=0,this._setEndings(!0,!0,!1));e:{if(_e>=a)_e=a;else if(_e<0)_e=0;else{this.time=_e;break e}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=_e,this._mixer.dispatchEvent({type:"finished",action:this,direction:s<0?-1:1})}}else{if(bt===-1&&(s>=0?(bt=0,this._setEndings(!0,this.repetitions===0,rn)):this._setEndings(this.repetitions===0,!0,rn)),_e>=a||_e<0){const sn=Math.floor(_e/a);_e-=a*sn,bt+=Math.abs(sn);const yn=this.repetitions-bt;if(yn<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,_e=s>0?a:0,this.time=_e,this._mixer.dispatchEvent({type:"finished",action:this,direction:s>0?1:-1});else{if(yn===1){const Pn=s<0;this._setEndings(Pn,!Pn,rn)}else this._setEndings(!1,!1,rn);this._loopCount=bt,this.time=_e,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:sn})}}else this.time=_e;if(rn&&(bt&1)===1)return a-_e}return _e}_setEndings(s,a,b){const _e=this._interpolantSettings;b?(_e.endingStart=ZeroSlopeEnding,_e.endingEnd=ZeroSlopeEnding):(s?_e.endingStart=this.zeroSlopeAtStart?ZeroSlopeEnding:ZeroCurvatureEnding:_e.endingStart=WrapAroundEnding,a?_e.endingEnd=this.zeroSlopeAtEnd?ZeroSlopeEnding:ZeroCurvatureEnding:_e.endingEnd=WrapAroundEnding)}_scheduleFading(s,a,b){const _e=this._mixer,bt=_e.time;let rn=this._weightInterpolant;rn===null&&(rn=_e._lendControlInterpolant(),this._weightInterpolant=rn);const sn=rn.parameterPositions,yn=rn.sampleValues;return sn[0]=bt,yn[0]=a,sn[1]=bt+s,yn[1]=b,this}}const _controlInterpolantsResultBuffer=new Float32Array(1);class AnimationMixer extends EventDispatcher$2{constructor(s){super(),this._root=s,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}_bindAction(s,a){const b=s._localRoot||this._root,_e=s._clip.tracks,bt=_e.length,rn=s._propertyBindings,sn=s._interpolants,yn=b.uuid,Pn=this._bindingsByRootAndName;let zn=Pn[yn];zn===void 0&&(zn={},Pn[yn]=zn);for(let lr=0;lr!==bt;++lr){const ar=_e[lr],cr=ar.name;let hr=zn[cr];if(hr!==void 0)++hr.referenceCount,rn[lr]=hr;else{if(hr=rn[lr],hr!==void 0){hr._cacheIndex===null&&(++hr.referenceCount,this._addInactiveBinding(hr,yn,cr));continue}const es=a&&a._propertyBindings[lr].binding.parsedPath;hr=new PropertyMixer(PropertyBinding.create(b,cr,es),ar.ValueTypeName,ar.getValueSize()),++hr.referenceCount,this._addInactiveBinding(hr,yn,cr),rn[lr]=hr}sn[lr].resultBuffer=hr.buffer}}_activateAction(s){if(!this._isActiveAction(s)){if(s._cacheIndex===null){const b=(s._localRoot||this._root).uuid,_e=s._clip.uuid,bt=this._actionsByClip[_e];this._bindAction(s,bt&&bt.knownActions[0]),this._addInactiveAction(s,_e,b)}const a=s._propertyBindings;for(let b=0,_e=a.length;b!==_e;++b){const bt=a[b];bt.useCount++===0&&(this._lendBinding(bt),bt.saveOriginalState())}this._lendAction(s)}}_deactivateAction(s){if(this._isActiveAction(s)){const a=s._propertyBindings;for(let b=0,_e=a.length;b!==_e;++b){const bt=a[b];--bt.useCount===0&&(bt.restoreOriginalState(),this._takeBackBinding(bt))}this._takeBackAction(s)}}_initMemoryManager(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;const s=this;this.stats={actions:{get total(){return s._actions.length},get inUse(){return s._nActiveActions}},bindings:{get total(){return s._bindings.length},get inUse(){return s._nActiveBindings}},controlInterpolants:{get total(){return s._controlInterpolants.length},get inUse(){return s._nActiveControlInterpolants}}}}_isActiveAction(s){const a=s._cacheIndex;return a!==null&&a<this._nActiveActions}_addInactiveAction(s,a,b){const _e=this._actions,bt=this._actionsByClip;let rn=bt[a];if(rn===void 0)rn={knownActions:[s],actionByRoot:{}},s._byClipCacheIndex=0,bt[a]=rn;else{const sn=rn.knownActions;s._byClipCacheIndex=sn.length,sn.push(s)}s._cacheIndex=_e.length,_e.push(s),rn.actionByRoot[b]=s}_removeInactiveAction(s){const a=this._actions,b=a[a.length-1],_e=s._cacheIndex;b._cacheIndex=_e,a[_e]=b,a.pop(),s._cacheIndex=null;const bt=s._clip.uuid,rn=this._actionsByClip,sn=rn[bt],yn=sn.knownActions,Pn=yn[yn.length-1],zn=s._byClipCacheIndex;Pn._byClipCacheIndex=zn,yn[zn]=Pn,yn.pop(),s._byClipCacheIndex=null;const lr=sn.actionByRoot,ar=(s._localRoot||this._root).uuid;delete lr[ar],yn.length===0&&delete rn[bt],this._removeInactiveBindingsForAction(s)}_removeInactiveBindingsForAction(s){const a=s._propertyBindings;for(let b=0,_e=a.length;b!==_e;++b){const bt=a[b];--bt.referenceCount===0&&this._removeInactiveBinding(bt)}}_lendAction(s){const a=this._actions,b=s._cacheIndex,_e=this._nActiveActions++,bt=a[_e];s._cacheIndex=_e,a[_e]=s,bt._cacheIndex=b,a[b]=bt}_takeBackAction(s){const a=this._actions,b=s._cacheIndex,_e=--this._nActiveActions,bt=a[_e];s._cacheIndex=_e,a[_e]=s,bt._cacheIndex=b,a[b]=bt}_addInactiveBinding(s,a,b){const _e=this._bindingsByRootAndName,bt=this._bindings;let rn=_e[a];rn===void 0&&(rn={},_e[a]=rn),rn[b]=s,s._cacheIndex=bt.length,bt.push(s)}_removeInactiveBinding(s){const a=this._bindings,b=s.binding,_e=b.rootNode.uuid,bt=b.path,rn=this._bindingsByRootAndName,sn=rn[_e],yn=a[a.length-1],Pn=s._cacheIndex;yn._cacheIndex=Pn,a[Pn]=yn,a.pop(),delete sn[bt],Object.keys(sn).length===0&&delete rn[_e]}_lendBinding(s){const a=this._bindings,b=s._cacheIndex,_e=this._nActiveBindings++,bt=a[_e];s._cacheIndex=_e,a[_e]=s,bt._cacheIndex=b,a[b]=bt}_takeBackBinding(s){const a=this._bindings,b=s._cacheIndex,_e=--this._nActiveBindings,bt=a[_e];s._cacheIndex=_e,a[_e]=s,bt._cacheIndex=b,a[b]=bt}_lendControlInterpolant(){const s=this._controlInterpolants,a=this._nActiveControlInterpolants++;let b=s[a];return b===void 0&&(b=new LinearInterpolant(new Float32Array(2),new Float32Array(2),1,_controlInterpolantsResultBuffer),b.__cacheIndex=a,s[a]=b),b}_takeBackControlInterpolant(s){const a=this._controlInterpolants,b=s.__cacheIndex,_e=--this._nActiveControlInterpolants,bt=a[_e];s.__cacheIndex=_e,a[_e]=s,bt.__cacheIndex=b,a[b]=bt}clipAction(s,a,b){const _e=a||this._root,bt=_e.uuid;let rn=typeof s=="string"?AnimationClip.findByName(_e,s):s;const sn=rn!==null?rn.uuid:s,yn=this._actionsByClip[sn];let Pn=null;if(b===void 0&&(rn!==null?b=rn.blendMode:b=NormalAnimationBlendMode),yn!==void 0){const lr=yn.actionByRoot[bt];if(lr!==void 0&&lr.blendMode===b)return lr;Pn=yn.knownActions[0],rn===null&&(rn=Pn._clip)}if(rn===null)return null;const zn=new AnimationAction(this,rn,a,b);return this._bindAction(zn,Pn),this._addInactiveAction(zn,sn,bt),zn}existingAction(s,a){const b=a||this._root,_e=b.uuid,bt=typeof s=="string"?AnimationClip.findByName(b,s):s,rn=bt?bt.uuid:s,sn=this._actionsByClip[rn];return sn!==void 0&&sn.actionByRoot[_e]||null}stopAllAction(){const s=this._actions,a=this._nActiveActions;for(let b=a-1;b>=0;--b)s[b].stop();return this}update(s){s*=this.timeScale;const a=this._actions,b=this._nActiveActions,_e=this.time+=s,bt=Math.sign(s),rn=this._accuIndex^=1;for(let Pn=0;Pn!==b;++Pn)a[Pn]._update(_e,s,bt,rn);const sn=this._bindings,yn=this._nActiveBindings;for(let Pn=0;Pn!==yn;++Pn)sn[Pn].apply(rn);return this}setTime(s){this.time=0;for(let a=0;a<this._actions.length;a++)this._actions[a].time=0;return this.update(s)}getRoot(){return this._root}uncacheClip(s){const a=this._actions,b=s.uuid,_e=this._actionsByClip,bt=_e[b];if(bt!==void 0){const rn=bt.knownActions;for(let sn=0,yn=rn.length;sn!==yn;++sn){const Pn=rn[sn];this._deactivateAction(Pn);const zn=Pn._cacheIndex,lr=a[a.length-1];Pn._cacheIndex=null,Pn._byClipCacheIndex=null,lr._cacheIndex=zn,a[zn]=lr,a.pop(),this._removeInactiveBindingsForAction(Pn)}delete _e[b]}}uncacheRoot(s){const a=s.uuid,b=this._actionsByClip;for(const rn in b){const sn=b[rn].actionByRoot,yn=sn[a];yn!==void 0&&(this._deactivateAction(yn),this._removeInactiveAction(yn))}const _e=this._bindingsByRootAndName,bt=_e[a];if(bt!==void 0)for(const rn in bt){const sn=bt[rn];sn.restoreOriginalState(),this._removeInactiveBinding(sn)}}uncacheAction(s,a){const b=this.existingAction(s,a);b!==null&&(this._deactivateAction(b),this._removeInactiveAction(b))}}class Uniform{constructor(s){this.value=s}clone(){return new Uniform(this.value.clone===void 0?this.value:this.value.clone())}}let _id=0;class UniformsGroup extends EventDispatcher$2{constructor(){super(),this.isUniformsGroup=!0,Object.defineProperty(this,"id",{value:_id++}),this.name="",this.usage=StaticDrawUsage,this.uniforms=[]}add(s){return this.uniforms.push(s),this}remove(s){const a=this.uniforms.indexOf(s);return a!==-1&&this.uniforms.splice(a,1),this}setName(s){return this.name=s,this}setUsage(s){return this.usage=s,this}dispose(){return this.dispatchEvent({type:"dispose"}),this}copy(s){this.name=s.name,this.usage=s.usage;const a=s.uniforms;this.uniforms.length=0;for(let b=0,_e=a.length;b<_e;b++)this.uniforms.push(a[b].clone());return this}clone(){return new this.constructor().copy(this)}}class InstancedInterleavedBuffer extends InterleavedBuffer{constructor(s,a,b=1){super(s,a),this.isInstancedInterleavedBuffer=!0,this.meshPerAttribute=b}copy(s){return super.copy(s),this.meshPerAttribute=s.meshPerAttribute,this}clone(s){const a=super.clone(s);return a.meshPerAttribute=this.meshPerAttribute,a}toJSON(s){const a=super.toJSON(s);return a.isInstancedInterleavedBuffer=!0,a.meshPerAttribute=this.meshPerAttribute,a}}class GLBufferAttribute{constructor(s,a,b,_e,bt){this.isGLBufferAttribute=!0,this.name="",this.buffer=s,this.type=a,this.itemSize=b,this.elementSize=_e,this.count=bt,this.version=0}set needsUpdate(s){s===!0&&this.version++}setBuffer(s){return this.buffer=s,this}setType(s,a){return this.type=s,this.elementSize=a,this}setItemSize(s){return this.itemSize=s,this}setCount(s){return this.count=s,this}}class Raycaster{constructor(s,a,b=0,_e=1/0){this.ray=new Ray(s,a),this.near=b,this.far=_e,this.camera=null,this.layers=new Layers,this.params={Mesh:{},Line:{threshold:1},LOD:{},Points:{threshold:1},Sprite:{}}}set(s,a){this.ray.set(s,a)}setFromCamera(s,a){a.isPerspectiveCamera?(this.ray.origin.setFromMatrixPosition(a.matrixWorld),this.ray.direction.set(s.x,s.y,.5).unproject(a).sub(this.ray.origin).normalize(),this.camera=a):a.isOrthographicCamera?(this.ray.origin.set(s.x,s.y,(a.near+a.far)/(a.near-a.far)).unproject(a),this.ray.direction.set(0,0,-1).transformDirection(a.matrixWorld),this.camera=a):console.error("THREE.Raycaster: Unsupported camera type: "+a.type)}intersectObject(s,a=!0,b=[]){return intersectObject(s,this,b,a),b.sort(ascSort),b}intersectObjects(s,a=!0,b=[]){for(let _e=0,bt=s.length;_e<bt;_e++)intersectObject(s[_e],this,b,a);return b.sort(ascSort),b}}function ascSort(o,s){return o.distance-s.distance}function intersectObject(o,s,a,b){if(o.layers.test(s.layers)&&o.raycast(s,a),b===!0){const _e=o.children;for(let bt=0,rn=_e.length;bt<rn;bt++)intersectObject(_e[bt],s,a,!0)}}class Spherical{constructor(s=1,a=0,b=0){return this.radius=s,this.phi=a,this.theta=b,this}set(s,a,b){return this.radius=s,this.phi=a,this.theta=b,this}copy(s){return this.radius=s.radius,this.phi=s.phi,this.theta=s.theta,this}makeSafe(){return this.phi=Math.max(1e-6,Math.min(Math.PI-1e-6,this.phi)),this}setFromVector3(s){return this.setFromCartesianCoords(s.x,s.y,s.z)}setFromCartesianCoords(s,a,b){return this.radius=Math.sqrt(s*s+a*a+b*b),this.radius===0?(this.theta=0,this.phi=0):(this.theta=Math.atan2(s,b),this.phi=Math.acos(clamp$2(a/this.radius,-1,1))),this}clone(){return new this.constructor().copy(this)}}class Cylindrical{constructor(s=1,a=0,b=0){return this.radius=s,this.theta=a,this.y=b,this}set(s,a,b){return this.radius=s,this.theta=a,this.y=b,this}copy(s){return this.radius=s.radius,this.theta=s.theta,this.y=s.y,this}setFromVector3(s){return this.setFromCartesianCoords(s.x,s.y,s.z)}setFromCartesianCoords(s,a,b){return this.radius=Math.sqrt(s*s+b*b),this.theta=Math.atan2(s,b),this.y=a,this}clone(){return new this.constructor().copy(this)}}const _vector$4=new Vector2;class Box2{constructor(s=new Vector2(1/0,1/0),a=new Vector2(-1/0,-1/0)){this.isBox2=!0,this.min=s,this.max=a}set(s,a){return this.min.copy(s),this.max.copy(a),this}setFromPoints(s){this.makeEmpty();for(let a=0,b=s.length;a<b;a++)this.expandByPoint(s[a]);return this}setFromCenterAndSize(s,a){const b=_vector$4.copy(a).multiplyScalar(.5);return this.min.copy(s).sub(b),this.max.copy(s).add(b),this}clone(){return new this.constructor().copy(this)}copy(s){return this.min.copy(s.min),this.max.copy(s.max),this}makeEmpty(){return this.min.x=this.min.y=1/0,this.max.x=this.max.y=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y}getCenter(s){return this.isEmpty()?s.set(0,0):s.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(s){return this.isEmpty()?s.set(0,0):s.subVectors(this.max,this.min)}expandByPoint(s){return this.min.min(s),this.max.max(s),this}expandByVector(s){return this.min.sub(s),this.max.add(s),this}expandByScalar(s){return this.min.addScalar(-s),this.max.addScalar(s),this}containsPoint(s){return!(s.x<this.min.x||s.x>this.max.x||s.y<this.min.y||s.y>this.max.y)}containsBox(s){return this.min.x<=s.min.x&&s.max.x<=this.max.x&&this.min.y<=s.min.y&&s.max.y<=this.max.y}getParameter(s,a){return a.set((s.x-this.min.x)/(this.max.x-this.min.x),(s.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(s){return!(s.max.x<this.min.x||s.min.x>this.max.x||s.max.y<this.min.y||s.min.y>this.max.y)}clampPoint(s,a){return a.copy(s).clamp(this.min,this.max)}distanceToPoint(s){return this.clampPoint(s,_vector$4).distanceTo(s)}intersect(s){return this.min.max(s.min),this.max.min(s.max),this.isEmpty()&&this.makeEmpty(),this}union(s){return this.min.min(s.min),this.max.max(s.max),this}translate(s){return this.min.add(s),this.max.add(s),this}equals(s){return s.min.equals(this.min)&&s.max.equals(this.max)}}const _startP=new Vector3,_startEnd=new Vector3;class Line3{constructor(s=new Vector3,a=new Vector3){this.start=s,this.end=a}set(s,a){return this.start.copy(s),this.end.copy(a),this}copy(s){return this.start.copy(s.start),this.end.copy(s.end),this}getCenter(s){return s.addVectors(this.start,this.end).multiplyScalar(.5)}delta(s){return s.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(s,a){return this.delta(a).multiplyScalar(s).add(this.start)}closestPointToPointParameter(s,a){_startP.subVectors(s,this.start),_startEnd.subVectors(this.end,this.start);const b=_startEnd.dot(_startEnd);let bt=_startEnd.dot(_startP)/b;return a&&(bt=clamp$2(bt,0,1)),bt}closestPointToPoint(s,a,b){const _e=this.closestPointToPointParameter(s,a);return this.delta(b).multiplyScalar(_e).add(this.start)}applyMatrix4(s){return this.start.applyMatrix4(s),this.end.applyMatrix4(s),this}equals(s){return s.start.equals(this.start)&&s.end.equals(this.end)}clone(){return new this.constructor().copy(this)}}const _vector$3=new Vector3;class SpotLightHelper extends Object3D{constructor(s,a){super(),this.light=s,this.matrix=s.matrixWorld,this.matrixAutoUpdate=!1,this.color=a,this.type="SpotLightHelper";const b=new BufferGeometry,_e=[0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,-1,0,1,0,0,0,0,1,1,0,0,0,0,-1,1];for(let rn=0,sn=1,yn=32;rn<yn;rn++,sn++){const Pn=rn/yn*Math.PI*2,zn=sn/yn*Math.PI*2;_e.push(Math.cos(Pn),Math.sin(Pn),1,Math.cos(zn),Math.sin(zn),1)}b.setAttribute("position",new Float32BufferAttribute(_e,3));const bt=new LineBasicMaterial({fog:!1,toneMapped:!1});this.cone=new LineSegments(b,bt),this.add(this.cone),this.update()}dispose(){this.cone.geometry.dispose(),this.cone.material.dispose()}update(){this.light.updateWorldMatrix(!0,!1),this.light.target.updateWorldMatrix(!0,!1);const s=this.light.distance?this.light.distance:1e3,a=s*Math.tan(this.light.angle);this.cone.scale.set(a,a,s),_vector$3.setFromMatrixPosition(this.light.target.matrixWorld),this.cone.lookAt(_vector$3),this.color!==void 0?this.cone.material.color.set(this.color):this.cone.material.color.copy(this.light.color)}}const _vector$2=new Vector3,_boneMatrix=new Matrix4,_matrixWorldInv=new Matrix4;class SkeletonHelper extends LineSegments{constructor(s){const a=getBoneList(s),b=new BufferGeometry,_e=[],bt=[],rn=new Color$1(0,0,1),sn=new Color$1(0,1,0);for(let Pn=0;Pn<a.length;Pn++){const zn=a[Pn];zn.parent&&zn.parent.isBone&&(_e.push(0,0,0),_e.push(0,0,0),bt.push(rn.r,rn.g,rn.b),bt.push(sn.r,sn.g,sn.b))}b.setAttribute("position",new Float32BufferAttribute(_e,3)),b.setAttribute("color",new Float32BufferAttribute(bt,3));const yn=new LineBasicMaterial({vertexColors:!0,depthTest:!1,depthWrite:!1,toneMapped:!1,transparent:!0});super(b,yn),this.isSkeletonHelper=!0,this.type="SkeletonHelper",this.root=s,this.bones=a,this.matrix=s.matrixWorld,this.matrixAutoUpdate=!1}updateMatrixWorld(s){const a=this.bones,b=this.geometry,_e=b.getAttribute("position");_matrixWorldInv.copy(this.root.matrixWorld).invert();for(let bt=0,rn=0;bt<a.length;bt++){const sn=a[bt];sn.parent&&sn.parent.isBone&&(_boneMatrix.multiplyMatrices(_matrixWorldInv,sn.matrixWorld),_vector$2.setFromMatrixPosition(_boneMatrix),_e.setXYZ(rn,_vector$2.x,_vector$2.y,_vector$2.z),_boneMatrix.multiplyMatrices(_matrixWorldInv,sn.parent.matrixWorld),_vector$2.setFromMatrixPosition(_boneMatrix),_e.setXYZ(rn+1,_vector$2.x,_vector$2.y,_vector$2.z),rn+=2)}b.getAttribute("position").needsUpdate=!0,super.updateMatrixWorld(s)}dispose(){this.geometry.dispose(),this.material.dispose()}}function getBoneList(o){const s=[];o.isBone===!0&&s.push(o);for(let a=0;a<o.children.length;a++)s.push.apply(s,getBoneList(o.children[a]));return s}class PointLightHelper extends Mesh{constructor(s,a,b){const _e=new SphereGeometry(a,4,2),bt=new MeshBasicMaterial({wireframe:!0,fog:!1,toneMapped:!1});super(_e,bt),this.light=s,this.color=b,this.type="PointLightHelper",this.matrix=this.light.matrixWorld,this.matrixAutoUpdate=!1,this.update()}dispose(){this.geometry.dispose(),this.material.dispose()}update(){this.light.updateWorldMatrix(!0,!1),this.color!==void 0?this.material.color.set(this.color):this.material.color.copy(this.light.color)}}const _vector$1=new Vector3,_color1=new Color$1,_color2=new Color$1;class HemisphereLightHelper extends Object3D{constructor(s,a,b){super(),this.light=s,this.matrix=s.matrixWorld,this.matrixAutoUpdate=!1,this.color=b,this.type="HemisphereLightHelper";const _e=new OctahedronGeometry(a);_e.rotateY(Math.PI*.5),this.material=new MeshBasicMaterial({wireframe:!0,fog:!1,toneMapped:!1}),this.color===void 0&&(this.material.vertexColors=!0);const bt=_e.getAttribute("position"),rn=new Float32Array(bt.count*3);_e.setAttribute("color",new BufferAttribute(rn,3)),this.add(new Mesh(_e,this.material)),this.update()}dispose(){this.children[0].geometry.dispose(),this.children[0].material.dispose()}update(){const s=this.children[0];if(this.color!==void 0)this.material.color.set(this.color);else{const a=s.geometry.getAttribute("color");_color1.copy(this.light.color),_color2.copy(this.light.groundColor);for(let b=0,_e=a.count;b<_e;b++){const bt=b<_e/2?_color1:_color2;a.setXYZ(b,bt.r,bt.g,bt.b)}a.needsUpdate=!0}this.light.updateWorldMatrix(!0,!1),s.lookAt(_vector$1.setFromMatrixPosition(this.light.matrixWorld).negate())}}class GridHelper extends LineSegments{constructor(s=10,a=10,b=4473924,_e=8947848){b=new Color$1(b),_e=new Color$1(_e);const bt=a/2,rn=s/a,sn=s/2,yn=[],Pn=[];for(let ar=0,cr=0,hr=-sn;ar<=a;ar++,hr+=rn){yn.push(-sn,0,hr,sn,0,hr),yn.push(hr,0,-sn,hr,0,sn);const es=ar===bt?b:_e;es.toArray(Pn,cr),cr+=3,es.toArray(Pn,cr),cr+=3,es.toArray(Pn,cr),cr+=3,es.toArray(Pn,cr),cr+=3}const zn=new BufferGeometry;zn.setAttribute("position",new Float32BufferAttribute(yn,3)),zn.setAttribute("color",new Float32BufferAttribute(Pn,3));const lr=new LineBasicMaterial({vertexColors:!0,toneMapped:!1});super(zn,lr),this.type="GridHelper"}dispose(){this.geometry.dispose(),this.material.dispose()}}class PolarGridHelper extends LineSegments{constructor(s=10,a=16,b=8,_e=64,bt=4473924,rn=8947848){bt=new Color$1(bt),rn=new Color$1(rn);const sn=[],yn=[];if(a>1)for(let lr=0;lr<a;lr++){const ar=lr/a*(Math.PI*2),cr=Math.sin(ar)*s,hr=Math.cos(ar)*s;sn.push(0,0,0),sn.push(cr,0,hr);const es=lr&1?bt:rn;yn.push(es.r,es.g,es.b),yn.push(es.r,es.g,es.b)}for(let lr=0;lr<b;lr++){const ar=lr&1?bt:rn,cr=s-s/b*lr;for(let hr=0;hr<_e;hr++){let es=hr/_e*(Math.PI*2),Ur=Math.sin(es)*cr,Dr=Math.cos(es)*cr;sn.push(Ur,0,Dr),yn.push(ar.r,ar.g,ar.b),es=(hr+1)/_e*(Math.PI*2),Ur=Math.sin(es)*cr,Dr=Math.cos(es)*cr,sn.push(Ur,0,Dr),yn.push(ar.r,ar.g,ar.b)}}const Pn=new BufferGeometry;Pn.setAttribute("position",new Float32BufferAttribute(sn,3)),Pn.setAttribute("color",new Float32BufferAttribute(yn,3));const zn=new LineBasicMaterial({vertexColors:!0,toneMapped:!1});super(Pn,zn),this.type="PolarGridHelper"}dispose(){this.geometry.dispose(),this.material.dispose()}}const _v1=new Vector3,_v2$5=new Vector3,_v3=new Vector3;class DirectionalLightHelper extends Object3D{constructor(s,a,b){super(),this.light=s,this.matrix=s.matrixWorld,this.matrixAutoUpdate=!1,this.color=b,this.type="DirectionalLightHelper",a===void 0&&(a=1);let _e=new BufferGeometry;_e.setAttribute("position",new Float32BufferAttribute([-a,a,0,a,a,0,a,-a,0,-a,-a,0,-a,a,0],3));const bt=new LineBasicMaterial({fog:!1,toneMapped:!1});this.lightPlane=new Line(_e,bt),this.add(this.lightPlane),_e=new BufferGeometry,_e.setAttribute("position",new Float32BufferAttribute([0,0,0,0,0,1],3)),this.targetLine=new Line(_e,bt),this.add(this.targetLine),this.update()}dispose(){this.lightPlane.geometry.dispose(),this.lightPlane.material.dispose(),this.targetLine.geometry.dispose(),this.targetLine.material.dispose()}update(){this.light.updateWorldMatrix(!0,!1),this.light.target.updateWorldMatrix(!0,!1),_v1.setFromMatrixPosition(this.light.matrixWorld),_v2$5.setFromMatrixPosition(this.light.target.matrixWorld),_v3.subVectors(_v2$5,_v1),this.lightPlane.lookAt(_v2$5),this.color!==void 0?(this.lightPlane.material.color.set(this.color),this.targetLine.material.color.set(this.color)):(this.lightPlane.material.color.copy(this.light.color),this.targetLine.material.color.copy(this.light.color)),this.targetLine.lookAt(_v2$5),this.targetLine.scale.z=_v3.length()}}const _vector=new Vector3,_camera=new Camera;class CameraHelper extends LineSegments{constructor(s){const a=new BufferGeometry,b=new LineBasicMaterial({color:16777215,vertexColors:!0,toneMapped:!1}),_e=[],bt=[],rn={};sn("n1","n2"),sn("n2","n4"),sn("n4","n3"),sn("n3","n1"),sn("f1","f2"),sn("f2","f4"),sn("f4","f3"),sn("f3","f1"),sn("n1","f1"),sn("n2","f2"),sn("n3","f3"),sn("n4","f4"),sn("p","n1"),sn("p","n2"),sn("p","n3"),sn("p","n4"),sn("u1","u2"),sn("u2","u3"),sn("u3","u1"),sn("c","t"),sn("p","c"),sn("cn1","cn2"),sn("cn3","cn4"),sn("cf1","cf2"),sn("cf3","cf4");function sn(hr,es){yn(hr),yn(es)}function yn(hr){_e.push(0,0,0),bt.push(0,0,0),rn[hr]===void 0&&(rn[hr]=[]),rn[hr].push(_e.length/3-1)}a.setAttribute("position",new Float32BufferAttribute(_e,3)),a.setAttribute("color",new Float32BufferAttribute(bt,3)),super(a,b),this.type="CameraHelper",this.camera=s,this.camera.updateProjectionMatrix&&this.camera.updateProjectionMatrix(),this.matrix=s.matrixWorld,this.matrixAutoUpdate=!1,this.pointMap=rn,this.update();const Pn=new Color$1(16755200),zn=new Color$1(16711680),lr=new Color$1(43775),ar=new Color$1(16777215),cr=new Color$1(3355443);this.setColors(Pn,zn,lr,ar,cr)}setColors(s,a,b,_e,bt){const sn=this.geometry.getAttribute("color");sn.setXYZ(0,s.r,s.g,s.b),sn.setXYZ(1,s.r,s.g,s.b),sn.setXYZ(2,s.r,s.g,s.b),sn.setXYZ(3,s.r,s.g,s.b),sn.setXYZ(4,s.r,s.g,s.b),sn.setXYZ(5,s.r,s.g,s.b),sn.setXYZ(6,s.r,s.g,s.b),sn.setXYZ(7,s.r,s.g,s.b),sn.setXYZ(8,s.r,s.g,s.b),sn.setXYZ(9,s.r,s.g,s.b),sn.setXYZ(10,s.r,s.g,s.b),sn.setXYZ(11,s.r,s.g,s.b),sn.setXYZ(12,s.r,s.g,s.b),sn.setXYZ(13,s.r,s.g,s.b),sn.setXYZ(14,s.r,s.g,s.b),sn.setXYZ(15,s.r,s.g,s.b),sn.setXYZ(16,s.r,s.g,s.b),sn.setXYZ(17,s.r,s.g,s.b),sn.setXYZ(18,s.r,s.g,s.b),sn.setXYZ(19,s.r,s.g,s.b),sn.setXYZ(20,s.r,s.g,s.b),sn.setXYZ(21,s.r,s.g,s.b),sn.setXYZ(22,s.r,s.g,s.b),sn.setXYZ(23,s.r,s.g,s.b),sn.setXYZ(24,a.r,a.g,a.b),sn.setXYZ(25,a.r,a.g,a.b),sn.setXYZ(26,a.r,a.g,a.b),sn.setXYZ(27,a.r,a.g,a.b),sn.setXYZ(28,a.r,a.g,a.b),sn.setXYZ(29,a.r,a.g,a.b),sn.setXYZ(30,a.r,a.g,a.b),sn.setXYZ(31,a.r,a.g,a.b),sn.setXYZ(32,b.r,b.g,b.b),sn.setXYZ(33,b.r,b.g,b.b),sn.setXYZ(34,b.r,b.g,b.b),sn.setXYZ(35,b.r,b.g,b.b),sn.setXYZ(36,b.r,b.g,b.b),sn.setXYZ(37,b.r,b.g,b.b),sn.setXYZ(38,_e.r,_e.g,_e.b),sn.setXYZ(39,_e.r,_e.g,_e.b),sn.setXYZ(40,bt.r,bt.g,bt.b),sn.setXYZ(41,bt.r,bt.g,bt.b),sn.setXYZ(42,bt.r,bt.g,bt.b),sn.setXYZ(43,bt.r,bt.g,bt.b),sn.setXYZ(44,bt.r,bt.g,bt.b),sn.setXYZ(45,bt.r,bt.g,bt.b),sn.setXYZ(46,bt.r,bt.g,bt.b),sn.setXYZ(47,bt.r,bt.g,bt.b),sn.setXYZ(48,bt.r,bt.g,bt.b),sn.setXYZ(49,bt.r,bt.g,bt.b),sn.needsUpdate=!0}update(){const s=this.geometry,a=this.pointMap,b=1,_e=1;_camera.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse),setPoint("c",a,s,_camera,0,0,-1),setPoint("t",a,s,_camera,0,0,1),setPoint("n1",a,s,_camera,-b,-_e,-1),setPoint("n2",a,s,_camera,b,-_e,-1),setPoint("n3",a,s,_camera,-b,_e,-1),setPoint("n4",a,s,_camera,b,_e,-1),setPoint("f1",a,s,_camera,-b,-_e,1),setPoint("f2",a,s,_camera,b,-_e,1),setPoint("f3",a,s,_camera,-b,_e,1),setPoint("f4",a,s,_camera,b,_e,1),setPoint("u1",a,s,_camera,b*.7,_e*1.1,-1),setPoint("u2",a,s,_camera,-b*.7,_e*1.1,-1),setPoint("u3",a,s,_camera,0,_e*2,-1),setPoint("cf1",a,s,_camera,-b,0,1),setPoint("cf2",a,s,_camera,b,0,1),setPoint("cf3",a,s,_camera,0,-_e,1),setPoint("cf4",a,s,_camera,0,_e,1),setPoint("cn1",a,s,_camera,-b,0,-1),setPoint("cn2",a,s,_camera,b,0,-1),setPoint("cn3",a,s,_camera,0,-_e,-1),setPoint("cn4",a,s,_camera,0,_e,-1),s.getAttribute("position").needsUpdate=!0}dispose(){this.geometry.dispose(),this.material.dispose()}}function setPoint(o,s,a,b,_e,bt,rn){_vector.set(_e,bt,rn).unproject(b);const sn=s[o];if(sn!==void 0){const yn=a.getAttribute("position");for(let Pn=0,zn=sn.length;Pn<zn;Pn++)yn.setXYZ(sn[Pn],_vector.x,_vector.y,_vector.z)}}const _box=new Box3;class BoxHelper extends LineSegments{constructor(s,a=16776960){const b=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),_e=new Float32Array(8*3),bt=new BufferGeometry;bt.setIndex(new BufferAttribute(b,1)),bt.setAttribute("position",new BufferAttribute(_e,3)),super(bt,new LineBasicMaterial({color:a,toneMapped:!1})),this.object=s,this.type="BoxHelper",this.matrixAutoUpdate=!1,this.update()}update(s){if(s!==void 0&&console.warn("THREE.BoxHelper: .update() has no longer arguments."),this.object!==void 0&&_box.setFromObject(this.object),_box.isEmpty())return;const a=_box.min,b=_box.max,_e=this.geometry.attributes.position,bt=_e.array;bt[0]=b.x,bt[1]=b.y,bt[2]=b.z,bt[3]=a.x,bt[4]=b.y,bt[5]=b.z,bt[6]=a.x,bt[7]=a.y,bt[8]=b.z,bt[9]=b.x,bt[10]=a.y,bt[11]=b.z,bt[12]=b.x,bt[13]=b.y,bt[14]=a.z,bt[15]=a.x,bt[16]=b.y,bt[17]=a.z,bt[18]=a.x,bt[19]=a.y,bt[20]=a.z,bt[21]=b.x,bt[22]=a.y,bt[23]=a.z,_e.needsUpdate=!0,this.geometry.computeBoundingSphere()}setFromObject(s){return this.object=s,this.update(),this}copy(s,a){return super.copy(s,a),this.object=s.object,this}dispose(){this.geometry.dispose(),this.material.dispose()}}class Box3Helper extends LineSegments{constructor(s,a=16776960){const b=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),_e=[1,1,1,-1,1,1,-1,-1,1,1,-1,1,1,1,-1,-1,1,-1,-1,-1,-1,1,-1,-1],bt=new BufferGeometry;bt.setIndex(new BufferAttribute(b,1)),bt.setAttribute("position",new Float32BufferAttribute(_e,3)),super(bt,new LineBasicMaterial({color:a,toneMapped:!1})),this.box=s,this.type="Box3Helper",this.geometry.computeBoundingSphere()}updateMatrixWorld(s){const a=this.box;a.isEmpty()||(a.getCenter(this.position),a.getSize(this.scale),this.scale.multiplyScalar(.5),super.updateMatrixWorld(s))}dispose(){this.geometry.dispose(),this.material.dispose()}}class PlaneHelper extends Line{constructor(s,a=1,b=16776960){const _e=b,bt=[1,-1,0,-1,1,0,-1,-1,0,1,1,0,-1,1,0,-1,-1,0,1,-1,0,1,1,0],rn=new BufferGeometry;rn.setAttribute("position",new Float32BufferAttribute(bt,3)),rn.computeBoundingSphere(),super(rn,new LineBasicMaterial({color:_e,toneMapped:!1})),this.type="PlaneHelper",this.plane=s,this.size=a;const sn=[1,1,0,-1,1,0,-1,-1,0,1,1,0,-1,-1,0,1,-1,0],yn=new BufferGeometry;yn.setAttribute("position",new Float32BufferAttribute(sn,3)),yn.computeBoundingSphere(),this.add(new Mesh(yn,new MeshBasicMaterial({color:_e,opacity:.2,transparent:!0,depthWrite:!1,toneMapped:!1})))}updateMatrixWorld(s){this.position.set(0,0,0),this.scale.set(.5*this.size,.5*this.size,1),this.lookAt(this.plane.normal),this.translateZ(-this.plane.constant),super.updateMatrixWorld(s)}dispose(){this.geometry.dispose(),this.material.dispose(),this.children[0].geometry.dispose(),this.children[0].material.dispose()}}const _axis=new Vector3;let _lineGeometry,_coneGeometry;class ArrowHelper extends Object3D{constructor(s=new Vector3(0,0,1),a=new Vector3(0,0,0),b=1,_e=16776960,bt=b*.2,rn=bt*.2){super(),this.type="ArrowHelper",_lineGeometry===void 0&&(_lineGeometry=new BufferGeometry,_lineGeometry.setAttribute("position",new Float32BufferAttribute([0,0,0,0,1,0],3)),_coneGeometry=new CylinderGeometry(0,.5,1,5,1),_coneGeometry.translate(0,-.5,0)),this.position.copy(a),this.line=new Line(_lineGeometry,new LineBasicMaterial({color:_e,toneMapped:!1})),this.line.matrixAutoUpdate=!1,this.add(this.line),this.cone=new Mesh(_coneGeometry,new MeshBasicMaterial({color:_e,toneMapped:!1})),this.cone.matrixAutoUpdate=!1,this.add(this.cone),this.setDirection(s),this.setLength(b,bt,rn)}setDirection(s){if(s.y>.99999)this.quaternion.set(0,0,0,1);else if(s.y<-.99999)this.quaternion.set(1,0,0,0);else{_axis.set(s.z,0,-s.x).normalize();const a=Math.acos(s.y);this.quaternion.setFromAxisAngle(_axis,a)}}setLength(s,a=s*.2,b=a*.2){this.line.scale.set(1,Math.max(1e-4,s-a),1),this.line.updateMatrix(),this.cone.scale.set(b,a,b),this.cone.position.y=s,this.cone.updateMatrix()}setColor(s){this.line.material.color.set(s),this.cone.material.color.set(s)}copy(s){return super.copy(s,!1),this.line.copy(s.line),this.cone.copy(s.cone),this}dispose(){this.line.geometry.dispose(),this.line.material.dispose(),this.cone.geometry.dispose(),this.cone.material.dispose()}}class AxesHelper extends LineSegments{constructor(s=1){const a=[0,0,0,s,0,0,0,0,0,0,s,0,0,0,0,0,0,s],b=[1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1],_e=new BufferGeometry;_e.setAttribute("position",new Float32BufferAttribute(a,3)),_e.setAttribute("color",new Float32BufferAttribute(b,3));const bt=new LineBasicMaterial({vertexColors:!0,toneMapped:!1});super(_e,bt),this.type="AxesHelper"}setColors(s,a,b){const _e=new Color$1,bt=this.geometry.attributes.color.array;return _e.set(s),_e.toArray(bt,0),_e.toArray(bt,3),_e.set(a),_e.toArray(bt,6),_e.toArray(bt,9),_e.set(b),_e.toArray(bt,12),_e.toArray(bt,15),this.geometry.attributes.color.needsUpdate=!0,this}dispose(){this.geometry.dispose(),this.material.dispose()}}class ShapePath{constructor(){this.type="ShapePath",this.color=new Color$1,this.subPaths=[],this.currentPath=null}moveTo(s,a){return this.currentPath=new Path,this.subPaths.push(this.currentPath),this.currentPath.moveTo(s,a),this}lineTo(s,a){return this.currentPath.lineTo(s,a),this}quadraticCurveTo(s,a,b,_e){return this.currentPath.quadraticCurveTo(s,a,b,_e),this}bezierCurveTo(s,a,b,_e,bt,rn){return this.currentPath.bezierCurveTo(s,a,b,_e,bt,rn),this}splineThru(s){return this.currentPath.splineThru(s),this}toShapes(s){function a(Dr){const zr=[];for(let rs=0,as=Dr.length;rs<as;rs++){const os=Dr[rs],ls=new Shape;ls.curves=os.curves,zr.push(ls)}return zr}function b(Dr,zr){const rs=zr.length;let as=!1;for(let os=rs-1,ls=0;ls<rs;os=ls++){let zs=zr[os],ho=zr[ls],ga=ho.x-zs.x,mo=ho.y-zs.y;if(Math.abs(mo)>Number.EPSILON){if(mo<0&&(zs=zr[ls],ga=-ga,ho=zr[os],mo=-mo),Dr.y<zs.y||Dr.y>ho.y)continue;if(Dr.y===zs.y){if(Dr.x===zs.x)return!0}else{const go=mo*(Dr.x-zs.x)-ga*(Dr.y-zs.y);if(go===0)return!0;if(go<0)continue;as=!as}}else{if(Dr.y!==zs.y)continue;if(ho.x<=Dr.x&&Dr.x<=zs.x||zs.x<=Dr.x&&Dr.x<=ho.x)return!0}}return as}const _e=ShapeUtils.isClockWise,bt=this.subPaths;if(bt.length===0)return[];let rn,sn,yn;const Pn=[];if(bt.length===1)return sn=bt[0],yn=new Shape,yn.curves=sn.curves,Pn.push(yn),Pn;let zn=!_e(bt[0].getPoints());zn=s?!zn:zn;const lr=[],ar=[];let cr=[],hr=0,es;ar[hr]=void 0,cr[hr]=[];for(let Dr=0,zr=bt.length;Dr<zr;Dr++)sn=bt[Dr],es=sn.getPoints(),rn=_e(es),rn=s?!rn:rn,rn?(!zn&&ar[hr]&&hr++,ar[hr]={s:new Shape,p:es},ar[hr].s.curves=sn.curves,zn&&hr++,cr[hr]=[]):cr[hr].push({h:sn,p:es[0]});if(!ar[0])return a(bt);if(ar.length>1){let Dr=!1,zr=0;for(let rs=0,as=ar.length;rs<as;rs++)lr[rs]=[];for(let rs=0,as=ar.length;rs<as;rs++){const os=cr[rs];for(let ls=0;ls<os.length;ls++){const zs=os[ls];let ho=!0;for(let ga=0;ga<ar.length;ga++)b(zs.p,ar[ga].p)&&(rs!==ga&&zr++,ho?(ho=!1,lr[ga].push(zs)):Dr=!0);ho&&lr[rs].push(zs)}}zr>0&&Dr===!1&&(cr=lr)}let Ur;for(let Dr=0,zr=ar.length;Dr<zr;Dr++){yn=ar[Dr].s,Pn.push(yn),Ur=cr[Dr];for(let rs=0,as=Ur.length;rs<as;rs++)yn.holes.push(Ur[rs].h)}return Pn}}typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:REVISION}}));typeof window<"u"&&(window.__THREE__?console.warn("WARNING: Multiple instances of Three.js being imported."):window.__THREE__=REVISION);const THREE$1=Object.freeze(Object.defineProperty({__proto__:null,ACESFilmicToneMapping,AddEquation,AddOperation,AdditiveAnimationBlendMode,AdditiveBlending,AlphaFormat,AlwaysCompare,AlwaysDepth,AlwaysStencilFunc,AmbientLight,AnimationAction,AnimationClip,AnimationLoader,AnimationMixer,AnimationObjectGroup,AnimationUtils,ArcCurve,ArrayCamera,ArrowHelper,Audio,AudioAnalyser,AudioContext,AudioListener,AudioLoader,AxesHelper,BackSide,BasicDepthPacking,BasicShadowMap,Bone,BooleanKeyframeTrack,Box2,Box3,Box3Helper,BoxGeometry,BoxHelper,BufferAttribute,BufferGeometry,BufferGeometryLoader,ByteType,Cache,Camera,CameraHelper,CanvasTexture,CapsuleGeometry,CatmullRomCurve3,CineonToneMapping,CircleGeometry,ClampToEdgeWrapping,Clock,Color:Color$1,ColorKeyframeTrack,ColorManagement,CompressedArrayTexture,CompressedCubeTexture,CompressedTexture,CompressedTextureLoader,ConeGeometry,CubeCamera,CubeReflectionMapping,CubeRefractionMapping,CubeTexture,CubeTextureLoader,CubeUVReflectionMapping,CubicBezierCurve,CubicBezierCurve3,CubicInterpolant,CullFaceBack,CullFaceFront,CullFaceFrontBack,CullFaceNone,Curve,CurvePath,CustomBlending,CustomToneMapping,CylinderGeometry,Cylindrical,Data3DTexture,DataArrayTexture,DataTexture,DataTextureLoader,DataUtils,DecrementStencilOp,DecrementWrapStencilOp,DefaultLoadingManager,DepthFormat,DepthStencilFormat,DepthTexture,DirectionalLight,DirectionalLightHelper,DiscreteInterpolant,DisplayP3ColorSpace,DodecahedronGeometry,DoubleSide,DstAlphaFactor,DstColorFactor,DynamicCopyUsage,DynamicDrawUsage,DynamicReadUsage,EdgesGeometry,EllipseCurve,EqualCompare,EqualDepth,EqualStencilFunc,EquirectangularReflectionMapping,EquirectangularRefractionMapping,Euler,EventDispatcher:EventDispatcher$2,ExtrudeGeometry,FileLoader,Float16BufferAttribute,Float32BufferAttribute,Float64BufferAttribute,FloatType,Fog,FogExp2,FramebufferTexture,FrontSide,Frustum,GLBufferAttribute,GLSL1,GLSL3,GreaterCompare,GreaterDepth,GreaterEqualCompare,GreaterEqualDepth,GreaterEqualStencilFunc,GreaterStencilFunc,GridHelper,Group,HalfFloatType,HemisphereLight,HemisphereLightHelper,IcosahedronGeometry,ImageBitmapLoader,ImageLoader,ImageUtils,IncrementStencilOp,IncrementWrapStencilOp,InstancedBufferAttribute,InstancedBufferGeometry,InstancedInterleavedBuffer,InstancedMesh,Int16BufferAttribute,Int32BufferAttribute,Int8BufferAttribute,IntType,InterleavedBuffer,InterleavedBufferAttribute,Interpolant,InterpolateDiscrete,InterpolateLinear,InterpolateSmooth,InvertStencilOp,KeepStencilOp,KeyframeTrack,LOD,LatheGeometry,Layers,LessCompare,LessDepth,LessEqualCompare,LessEqualDepth,LessEqualStencilFunc,LessStencilFunc,Light,LightProbe,Line,Line3,LineBasicMaterial,LineCurve,LineCurve3,LineDashedMaterial,LineLoop,LineSegments,LinearDisplayP3ColorSpace,LinearEncoding,LinearFilter,LinearInterpolant,LinearMipMapLinearFilter,LinearMipMapNearestFilter,LinearMipmapLinearFilter,LinearMipmapNearestFilter,LinearSRGBColorSpace:LinearSRGBColorSpace$1,LinearToneMapping,LinearTransfer,Loader,LoaderUtils,LoadingManager,LoopOnce,LoopPingPong,LoopRepeat,LuminanceAlphaFormat,LuminanceFormat,MOUSE,Material,MaterialLoader,MathUtils,Matrix3,Matrix4,MaxEquation,Mesh,MeshBasicMaterial,MeshDepthMaterial,MeshDistanceMaterial,MeshLambertMaterial,MeshMatcapMaterial,MeshNormalMaterial,MeshPhongMaterial,MeshPhysicalMaterial,MeshStandardMaterial,MeshToonMaterial,MinEquation,MirroredRepeatWrapping,MixOperation,MultiplyBlending,MultiplyOperation,NearestFilter,NearestMipMapLinearFilter,NearestMipMapNearestFilter,NearestMipmapLinearFilter,NearestMipmapNearestFilter,NeverCompare,NeverDepth,NeverStencilFunc,NoBlending,NoColorSpace:NoColorSpace$1,NoToneMapping,NormalAnimationBlendMode,NormalBlending,NotEqualCompare,NotEqualDepth,NotEqualStencilFunc,NumberKeyframeTrack,Object3D,ObjectLoader,ObjectSpaceNormalMap,OctahedronGeometry,OneFactor,OneMinusDstAlphaFactor,OneMinusDstColorFactor,OneMinusSrcAlphaFactor,OneMinusSrcColorFactor,OrthographicCamera,P3Primaries,PCFShadowMap,PCFSoftShadowMap,PMREMGenerator,Path,PerspectiveCamera,Plane,PlaneGeometry,PlaneHelper,PointLight,PointLightHelper,Points,PointsMaterial,PolarGridHelper,PolyhedronGeometry,PositionalAudio,PropertyBinding,PropertyMixer,QuadraticBezierCurve,QuadraticBezierCurve3,Quaternion,QuaternionKeyframeTrack,QuaternionLinearInterpolant,RED_GREEN_RGTC2_Format,RED_RGTC1_Format,REVISION,RGBADepthPacking,RGBAFormat,RGBAIntegerFormat,RGBA_ASTC_10x10_Format,RGBA_ASTC_10x5_Format,RGBA_ASTC_10x6_Format,RGBA_ASTC_10x8_Format,RGBA_ASTC_12x10_Format,RGBA_ASTC_12x12_Format,RGBA_ASTC_4x4_Format,RGBA_ASTC_5x4_Format,RGBA_ASTC_5x5_Format,RGBA_ASTC_6x5_Format,RGBA_ASTC_6x6_Format,RGBA_ASTC_8x5_Format,RGBA_ASTC_8x6_Format,RGBA_ASTC_8x8_Format,RGBA_BPTC_Format,RGBA_ETC2_EAC_Format,RGBA_PVRTC_2BPPV1_Format,RGBA_PVRTC_4BPPV1_Format,RGBA_S3TC_DXT1_Format,RGBA_S3TC_DXT3_Format,RGBA_S3TC_DXT5_Format,RGB_BPTC_SIGNED_Format,RGB_BPTC_UNSIGNED_Format,RGB_ETC1_Format,RGB_ETC2_Format,RGB_PVRTC_2BPPV1_Format,RGB_PVRTC_4BPPV1_Format,RGB_S3TC_DXT1_Format,RGFormat,RGIntegerFormat,RawShaderMaterial,Ray,Raycaster,Rec709Primaries,RectAreaLight,RedFormat,RedIntegerFormat,ReinhardToneMapping,RenderTarget,RepeatWrapping,ReplaceStencilOp,ReverseSubtractEquation,RingGeometry,SIGNED_RED_GREEN_RGTC2_Format,SIGNED_RED_RGTC1_Format,SRGBColorSpace:SRGBColorSpace$1,SRGBTransfer,Scene,ShaderChunk,ShaderLib,ShaderMaterial,ShadowMaterial,Shape,ShapeGeometry,ShapePath,ShapeUtils,ShortType,Skeleton,SkeletonHelper,SkinnedMesh,Source,Sphere,SphereGeometry,Spherical,SphericalHarmonics3,SplineCurve,SpotLight,SpotLightHelper,Sprite,SpriteMaterial,SrcAlphaFactor,SrcAlphaSaturateFactor,SrcColorFactor,StaticCopyUsage,StaticDrawUsage,StaticReadUsage,StereoCamera,StreamCopyUsage,StreamDrawUsage,StreamReadUsage,StringKeyframeTrack,SubtractEquation,SubtractiveBlending,TOUCH,TangentSpaceNormalMap,TetrahedronGeometry,Texture,TextureLoader,TorusGeometry,TorusKnotGeometry,Triangle,TriangleFanDrawMode,TriangleStripDrawMode,TrianglesDrawMode,TubeGeometry,TwoPassDoubleSide,UVMapping,Uint16BufferAttribute,Uint32BufferAttribute,Uint8BufferAttribute,Uint8ClampedBufferAttribute,Uniform,UniformsGroup,UniformsLib,UniformsUtils,UnsignedByteType,UnsignedInt248Type,UnsignedIntType,UnsignedShort4444Type,UnsignedShort5551Type,UnsignedShortType,VSMShadowMap,Vector2,Vector3,Vector4,VectorKeyframeTrack,VideoTexture,WebGL1Renderer,WebGL3DRenderTarget,WebGLArrayRenderTarget,WebGLCoordinateSystem,WebGLCubeRenderTarget,WebGLMultipleRenderTargets,WebGLRenderTarget,WebGLRenderer,WebGLUtils,WebGPUCoordinateSystem,WireframeGeometry,WrapAroundEnding,ZeroCurvatureEnding,ZeroFactor,ZeroSlopeEnding,ZeroStencilOp,_SRGBAFormat,createCanvasElement,sRGBEncoding},Symbol.toStringTag,{value:"Module"}));async function wait$1(o){return LOGGER$1.info({title:`Waiting for ${o}ms`}),new Promise((s,a)=>{setTimeout(()=>{s(!0)},o)})}const capitalize$1=o=>o&&o[0].toUpperCase()+o.slice(1)||"",numberWithCommas=o=>o.toString().replace(/\B(?=(\d{3})+(?!\d))/g,","),InfoDrawer=({open:o,dismissDrawer:s})=>{const a=uiSceneStore(sn=>sn.CORE_API),b=reactExports.useRef(null),[_e,bt]=reactExports.useState(!1),rn=infoStore(sn=>sn.infoObject);return reactExports.useEffect(()=>(bt(o),()=>{}),[o]),reactExports.useEffect(()=>{b.current&&b.current.addEventListener("drawerClosed",()=>{s()})},[b]),jsxRuntimeExports.jsx(BottomDrawer,{ref:b,id:"bottomDrawer",open:`${_e}`,"initial-screen-coverage":"0%",children:jsxRuntimeExports.jsx("div",{className:"infoDrawer epigraphDrawer",slot:"bottom-drawer-content",children:jsxRuntimeExports.jsxs("div",{className:"drawerContent",children:[jsxRuntimeExports.jsxs("a",{href:rn?.productPageUrl,className:"categoryLink",target:"_blank",style:rn?.productPageUrl?{pointerEvents:"all"}:{pointerEvents:"none"},children:[jsxRuntimeExports.jsxs("h2",{className:"categoryTitle",children:[rn?.productCategory?.label,rn.subheading&&jsxRuntimeExports.jsx("div",{className:"modalSubHeading",children:rn.subheading})]}),rn.productPageUrl&&jsxRuntimeExports.jsx("img",{alt:"Open Product Page",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/OpenTab.svg"})]}),jsxRuntimeExports.jsx("div",{className:"infoDrawerImageContainer",children:jsxRuntimeExports.jsx("img",{className:"itemImage",alt:"Item Image",src:rn?.thumbnails?.high?a.getResolvedAssetUrl(rn.thumbnails.high):""})}),jsxRuntimeExports.jsx("h2",{className:"itemTitle",children:rn.title}),jsxRuntimeExports.jsx("pre",{className:"itemDescription",children:rn.description}),rn.boundingBoxSize?jsxRuntimeExports.jsxs("p",{className:"infoModalDimensions",children:[rn.boundingBoxSize.x.toFixed(1),"” W x"," ",rn.boundingBoxSize.y.toFixed(1),"” D x"," ",rn.boundingBoxSize.z.toFixed(1),"” H"]}):"",jsxRuntimeExports.jsx("div",{className:"infoModalActions",children:jsxRuntimeExports.jsx("button",{className:"item-price",disabled:!0,children:rn.price&&`$${numberWithCommas(parseFloat(rn.price).toFixed(2))}`})})]})})})},UtilityMenuButton=({buttonAction:o,buttonLabel:s,hoverLabel:a,icon:b,activeCondition:_e})=>{const[bt,rn]=reactExports.useState(_e),sn=uiSceneStore(yn=>yn.dialogPopupOpen);return reactExports.useEffect(()=>(rn(_e),()=>{}),[_e]),jsxRuntimeExports.jsxs("div",{role:"button",tabIndex:sn?-1:0,className:bt!==void 0&&bt?"shellButtonContainer active":"shellButtonContainer","aria-label":s+" button",onClick:()=>{o()},children:[jsxRuntimeExports.jsxs("div",{className:"buttonContent",children:[jsxRuntimeExports.jsx("img",{className:"button",src:b,alt:s+" button"}),jsxRuntimeExports.jsx("span",{children:s})]}),jsxRuntimeExports.jsx("div",{className:"hoverDescriptor",children:jsxRuntimeExports.jsx("span",{children:a})})]})};let webGL2Available;function isWebGL2Available(){var o;if(webGL2Available!==void 0)return webGL2Available;try{let s;const a=document.createElement("canvas");return webGL2Available=!!(window.WebGL2RenderingContext&&(s=a.getContext("webgl2"))),s&&((o=s.getExtension("WEBGL_lose_context"))==null||o.loseContext()),webGL2Available}catch{return webGL2Available=!1}}function toTrianglesDrawMode(o,s){if(s===TrianglesDrawMode)return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."),o;if(s===TriangleFanDrawMode||s===TriangleStripDrawMode){let a=o.getIndex();if(a===null){const rn=[],sn=o.getAttribute("position");if(sn!==void 0){for(let yn=0;yn<sn.count;yn++)rn.push(yn);o.setIndex(rn),a=o.getIndex()}else return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."),o}const b=a.count-2,_e=[];if(a)if(s===TriangleFanDrawMode)for(let rn=1;rn<=b;rn++)_e.push(a.getX(0)),_e.push(a.getX(rn)),_e.push(a.getX(rn+1));else for(let rn=0;rn<b;rn++)rn%2===0?(_e.push(a.getX(rn)),_e.push(a.getX(rn+1)),_e.push(a.getX(rn+2))):(_e.push(a.getX(rn+2)),_e.push(a.getX(rn+1)),_e.push(a.getX(rn)));_e.length/3!==b&&console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.");const bt=o.clone();return bt.setIndex(_e),bt.clearGroups(),bt}else return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:",s),o}function toCreasedNormals(o,s=Math.PI/3){const a=Math.cos(s),b=(1+1e-10)*100,_e=[new Vector3,new Vector3,new Vector3],bt=new Vector3,rn=new Vector3,sn=new Vector3,yn=new Vector3;function Pn(es){const Ur=~~(es.x*b),Dr=~~(es.y*b),zr=~~(es.z*b);return`${Ur},${Dr},${zr}`}const zn=o.index?o.toNonIndexed():o,lr=zn.attributes.position,ar={};for(let es=0,Ur=lr.count/3;es<Ur;es++){const Dr=3*es,zr=_e[0].fromBufferAttribute(lr,Dr+0),rs=_e[1].fromBufferAttribute(lr,Dr+1),as=_e[2].fromBufferAttribute(lr,Dr+2);bt.subVectors(as,rs),rn.subVectors(zr,rs);const os=new Vector3().crossVectors(bt,rn).normalize();for(let ls=0;ls<3;ls++){const zs=_e[ls],ho=Pn(zs);ho in ar||(ar[ho]=[]),ar[ho].push(os)}}const cr=new Float32Array(lr.count*3),hr=new BufferAttribute(cr,3,!1);for(let es=0,Ur=lr.count/3;es<Ur;es++){const Dr=3*es,zr=_e[0].fromBufferAttribute(lr,Dr+0),rs=_e[1].fromBufferAttribute(lr,Dr+1),as=_e[2].fromBufferAttribute(lr,Dr+2);bt.subVectors(as,rs),rn.subVectors(zr,rs),sn.crossVectors(bt,rn).normalize();for(let os=0;os<3;os++){const ls=_e[os],zs=Pn(ls),ho=ar[zs];yn.set(0,0,0);for(let ga=0,mo=ho.length;ga<mo;ga++){const go=ho[ga];sn.dot(go)>a&&yn.add(go)}yn.normalize(),hr.setXYZ(Dr+os,yn.x,yn.y,yn.z)}}return zn.setAttribute("normal",hr),zn}const version=parseInt(REVISION.replace(/\D+/g,""));var u8=Uint8Array,u16=Uint16Array,u32=Uint32Array,fleb=new u8([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]),fdeb=new u8([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]),clim=new u8([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),freb=function(o,s){for(var a=new u16(31),b=0;b<31;++b)a[b]=s+=1<<o[b-1];for(var _e=new u32(a[30]),b=1;b<30;++b)for(var bt=a[b];bt<a[b+1];++bt)_e[bt]=bt-a[b]<<5|b;return[a,_e]},_a=freb(fleb,2),fl=_a[0],revfl=_a[1];fl[28]=258,revfl[258]=28;var _b=freb(fdeb,0),fd=_b[0],revfd=_b[1],rev=new u16(32768);for(var i$2=0;i$2<32768;++i$2){var x=(i$2&43690)>>>1|(i$2&21845)<<1;x=(x&52428)>>>2|(x&13107)<<2,x=(x&61680)>>>4|(x&3855)<<4,rev[i$2]=((x&65280)>>>8|(x&255)<<8)>>>1}var hMap=function(o,s,a){for(var b=o.length,_e=0,bt=new u16(s);_e<b;++_e)++bt[o[_e]-1];var rn=new u16(s);for(_e=0;_e<s;++_e)rn[_e]=rn[_e-1]+bt[_e-1]<<1;var sn;if(a){sn=new u16(1<<s);var yn=15-s;for(_e=0;_e<b;++_e)if(o[_e])for(var Pn=_e<<4|o[_e],zn=s-o[_e],lr=rn[o[_e]-1]++<<zn,ar=lr|(1<<zn)-1;lr<=ar;++lr)sn[rev[lr]>>>yn]=Pn}else for(sn=new u16(b),_e=0;_e<b;++_e)o[_e]&&(sn[_e]=rev[rn[o[_e]-1]++]>>>15-o[_e]);return sn},flt=new u8(288);for(var i$2=0;i$2<144;++i$2)flt[i$2]=8;for(var i$2=144;i$2<256;++i$2)flt[i$2]=9;for(var i$2=256;i$2<280;++i$2)flt[i$2]=7;for(var i$2=280;i$2<288;++i$2)flt[i$2]=8;var fdt=new u8(32);for(var i$2=0;i$2<32;++i$2)fdt[i$2]=5;var flm=hMap(flt,9,0),flrm=hMap(flt,9,1),fdm=hMap(fdt,5,0),fdrm=hMap(fdt,5,1),max=function(o){for(var s=o[0],a=1;a<o.length;++a)o[a]>s&&(s=o[a]);return s},bits$1=function(o,s,a){var b=s/8|0;return(o[b]|o[b+1]<<8)>>(s&7)&a},bits16=function(o,s){var a=s/8|0;return(o[a]|o[a+1]<<8|o[a+2]<<16)>>(s&7)},shft=function(o){return(o/8|0)+(o&7&&1)},slc=function(o,s,a){(s==null||s<0)&&(s=0),(a==null||a>o.length)&&(a=o.length);var b=new(o instanceof u16?u16:o instanceof u32?u32:u8)(a-s);return b.set(o.subarray(s,a)),b},inflt=function(o,s,a){var b=o.length;if(!b||a&&!a.l&&b<5)return s||new u8(0);var _e=!s||a,bt=!a||a.i;a||(a={}),s||(s=new u8(b*3));var rn=function(Fy){var OA=s.length;if(Fy>OA){var UA=new u8(Math.max(OA*2,Fy));UA.set(s),s=UA}},sn=a.f||0,yn=a.p||0,Pn=a.b||0,zn=a.l,lr=a.d,ar=a.m,cr=a.n,hr=b*8;do{if(!zn){a.f=sn=bits$1(o,yn,1);var es=bits$1(o,yn+1,3);if(yn+=3,es)if(es==1)zn=flrm,lr=fdrm,ar=9,cr=5;else if(es==2){var rs=bits$1(o,yn,31)+257,as=bits$1(o,yn+10,15)+4,os=rs+bits$1(o,yn+5,31)+1;yn+=14;for(var ls=new u8(os),zs=new u8(19),ho=0;ho<as;++ho)zs[clim[ho]]=bits$1(o,yn+ho*3,7);yn+=as*3;for(var ga=max(zs),mo=(1<<ga)-1,go=hMap(zs,ga,1),ho=0;ho<os;){var yl=go[bits$1(o,yn,mo)];yn+=yl&15;var Ur=yl>>>4;if(Ur<16)ls[ho++]=Ur;else{var Zl=0,_d=0;for(Ur==16?(_d=3+bits$1(o,yn,3),yn+=2,Zl=ls[ho-1]):Ur==17?(_d=3+bits$1(o,yn,7),yn+=3):Ur==18&&(_d=11+bits$1(o,yn,127),yn+=7);_d--;)ls[ho++]=Zl}}var Ty=ls.subarray(0,rs),yy=ls.subarray(rs);ar=max(Ty),cr=max(yy),zn=hMap(Ty,ar,1),lr=hMap(yy,cr,1)}else throw"invalid block type";else{var Ur=shft(yn)+4,Dr=o[Ur-4]|o[Ur-3]<<8,zr=Ur+Dr;if(zr>b){if(bt)throw"unexpected EOF";break}_e&&rn(Pn+Dr),s.set(o.subarray(Ur,zr),Pn),a.b=Pn+=Dr,a.p=yn=zr*8;continue}if(yn>hr){if(bt)throw"unexpected EOF";break}}_e&&rn(Pn+131072);for(var by=(1<<ar)-1,Al=(1<<cr)-1,_f=yn;;_f=yn){var Zl=zn[bits16(o,yn)&by],gy=Zl>>>4;if(yn+=Zl&15,yn>hr){if(bt)throw"unexpected EOF";break}if(!Zl)throw"invalid length/literal";if(gy<256)s[Pn++]=gy;else if(gy==256){_f=yn,zn=null;break}else{var El=gy-254;if(gy>264){var ho=gy-257,My=fleb[ho];El=bits$1(o,yn,(1<<My)-1)+fl[ho],yn+=My}var By=lr[bits16(o,yn)&Al],lA=By>>>4;if(!By)throw"invalid distance";yn+=By&15;var yy=fd[lA];if(lA>3){var My=fdeb[lA];yy+=bits16(o,yn)&(1<<My)-1,yn+=My}if(yn>hr){if(bt)throw"unexpected EOF";break}_e&&rn(Pn+131072);for(var wA=Pn+El;Pn<wA;Pn+=4)s[Pn]=s[Pn-yy],s[Pn+1]=s[Pn+1-yy],s[Pn+2]=s[Pn+2-yy],s[Pn+3]=s[Pn+3-yy];Pn=wA}}a.l=zn,a.p=_f,a.b=Pn,zn&&(sn=1,a.m=ar,a.d=lr,a.n=cr)}while(!sn);return Pn==s.length?s:slc(s,0,Pn)},wbits=function(o,s,a){a<<=s&7;var b=s/8|0;o[b]|=a,o[b+1]|=a>>>8},wbits16=function(o,s,a){a<<=s&7;var b=s/8|0;o[b]|=a,o[b+1]|=a>>>8,o[b+2]|=a>>>16},hTree=function(o,s){for(var a=[],b=0;b<o.length;++b)o[b]&&a.push({s:b,f:o[b]});var _e=a.length,bt=a.slice();if(!_e)return[et$1,0];if(_e==1){var rn=new u8(a[0].s+1);return rn[a[0].s]=1,[rn,1]}a.sort(function(os,ls){return os.f-ls.f}),a.push({s:-1,f:25001});var sn=a[0],yn=a[1],Pn=0,zn=1,lr=2;for(a[0]={s:-1,f:sn.f+yn.f,l:sn,r:yn};zn!=_e-1;)sn=a[a[Pn].f<a[lr].f?Pn++:lr++],yn=a[Pn!=zn&&a[Pn].f<a[lr].f?Pn++:lr++],a[zn++]={s:-1,f:sn.f+yn.f,l:sn,r:yn};for(var ar=bt[0].s,b=1;b<_e;++b)bt[b].s>ar&&(ar=bt[b].s);var cr=new u16(ar+1),hr=ln(a[zn-1],cr,0);if(hr>s){var b=0,es=0,Ur=hr-s,Dr=1<<Ur;for(bt.sort(function(ls,zs){return cr[zs.s]-cr[ls.s]||ls.f-zs.f});b<_e;++b){var zr=bt[b].s;if(cr[zr]>s)es+=Dr-(1<<hr-cr[zr]),cr[zr]=s;else break}for(es>>>=Ur;es>0;){var rs=bt[b].s;cr[rs]<s?es-=1<<s-cr[rs]++-1:++b}for(;b>=0&&es;--b){var as=bt[b].s;cr[as]==s&&(--cr[as],++es)}hr=s}return[new u8(cr),hr]},ln=function(o,s,a){return o.s==-1?Math.max(ln(o.l,s,a+1),ln(o.r,s,a+1)):s[o.s]=a},lc=function(o){for(var s=o.length;s&&!o[--s];);for(var a=new u16(++s),b=0,_e=o[0],bt=1,rn=function(yn){a[b++]=yn},sn=1;sn<=s;++sn)if(o[sn]==_e&&sn!=s)++bt;else{if(!_e&&bt>2){for(;bt>138;bt-=138)rn(32754);bt>2&&(rn(bt>10?bt-11<<5|28690:bt-3<<5|12305),bt=0)}else if(bt>3){for(rn(_e),--bt;bt>6;bt-=6)rn(8304);bt>2&&(rn(bt-3<<5|8208),bt=0)}for(;bt--;)rn(_e);bt=1,_e=o[sn]}return[a.subarray(0,b),s]},clen=function(o,s){for(var a=0,b=0;b<s.length;++b)a+=o[b]*s[b];return a},wfblk=function(o,s,a){var b=a.length,_e=shft(s+2);o[_e]=b&255,o[_e+1]=b>>>8,o[_e+2]=o[_e]^255,o[_e+3]=o[_e+1]^255;for(var bt=0;bt<b;++bt)o[_e+bt+4]=a[bt];return(_e+4+b)*8},wblk=function(o,s,a,b,_e,bt,rn,sn,yn,Pn,zn){wbits(s,zn++,a),++_e[256];for(var lr=hTree(_e,15),ar=lr[0],cr=lr[1],hr=hTree(bt,15),es=hr[0],Ur=hr[1],Dr=lc(ar),zr=Dr[0],rs=Dr[1],as=lc(es),os=as[0],ls=as[1],zs=new u16(19),ho=0;ho<zr.length;++ho)zs[zr[ho]&31]++;for(var ho=0;ho<os.length;++ho)zs[os[ho]&31]++;for(var ga=hTree(zs,7),mo=ga[0],go=ga[1],yl=19;yl>4&&!mo[clim[yl-1]];--yl);var Zl=Pn+5<<3,_d=clen(_e,flt)+clen(bt,fdt)+rn,Ty=clen(_e,ar)+clen(bt,es)+rn+14+3*yl+clen(zs,mo)+(2*zs[16]+3*zs[17]+7*zs[18]);if(Zl<=_d&&Zl<=Ty)return wfblk(s,zn,o.subarray(yn,yn+Pn));var yy,by,Al,_f;if(wbits(s,zn,1+(Ty<_d)),zn+=2,Ty<_d){yy=hMap(ar,cr,0),by=ar,Al=hMap(es,Ur,0),_f=es;var gy=hMap(mo,go,0);wbits(s,zn,rs-257),wbits(s,zn+5,ls-1),wbits(s,zn+10,yl-4),zn+=14;for(var ho=0;ho<yl;++ho)wbits(s,zn+3*ho,mo[clim[ho]]);zn+=3*yl;for(var El=[zr,os],My=0;My<2;++My)for(var By=El[My],ho=0;ho<By.length;++ho){var lA=By[ho]&31;wbits(s,zn,gy[lA]),zn+=mo[lA],lA>15&&(wbits(s,zn,By[ho]>>>5&127),zn+=By[ho]>>>12)}}else yy=flm,by=flt,Al=fdm,_f=fdt;for(var ho=0;ho<sn;++ho)if(b[ho]>255){var lA=b[ho]>>>18&31;wbits16(s,zn,yy[lA+257]),zn+=by[lA+257],lA>7&&(wbits(s,zn,b[ho]>>>23&31),zn+=fleb[lA]);var wA=b[ho]&31;wbits16(s,zn,Al[wA]),zn+=_f[wA],wA>3&&(wbits16(s,zn,b[ho]>>>5&8191),zn+=fdeb[wA])}else wbits16(s,zn,yy[b[ho]]),zn+=by[b[ho]];return wbits16(s,zn,yy[256]),zn+by[256]},deo=new u32([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),et$1=new u8(0),dflt=function(o,s,a,b,_e,bt){var rn=o.length,sn=new u8(b+rn+5*(1+Math.ceil(rn/7e3))+_e),yn=sn.subarray(b,sn.length-_e),Pn=0;if(!s||rn<8)for(var zn=0;zn<=rn;zn+=65535){var lr=zn+65535;lr<rn?Pn=wfblk(yn,Pn,o.subarray(zn,lr)):(yn[zn]=bt,Pn=wfblk(yn,Pn,o.subarray(zn,rn)))}else{for(var ar=deo[s-1],cr=ar>>>13,hr=ar&8191,es=(1<<a)-1,Ur=new u16(32768),Dr=new u16(es+1),zr=Math.ceil(a/3),rs=2*zr,as=function(BA){return(o[BA]^o[BA+1]<<zr^o[BA+2]<<rs)&es},os=new u32(25e3),ls=new u16(288),zs=new u16(32),ho=0,ga=0,zn=0,mo=0,go=0,yl=0;zn<rn;++zn){var Zl=as(zn),_d=zn&32767,Ty=Dr[Zl];if(Ur[_d]=Ty,Dr[Zl]=_d,go<=zn){var yy=rn-zn;if((ho>7e3||mo>24576)&&yy>423){Pn=wblk(o,yn,0,os,ls,zs,ga,mo,yl,zn-yl,Pn),mo=ho=ga=0,yl=zn;for(var by=0;by<286;++by)ls[by]=0;for(var by=0;by<30;++by)zs[by]=0}var Al=2,_f=0,gy=hr,El=_d-Ty&32767;if(yy>2&&Zl==as(zn-El))for(var My=Math.min(cr,yy)-1,By=Math.min(32767,zn),lA=Math.min(258,yy);El<=By&&--gy&&_d!=Ty;){if(o[zn+Al]==o[zn+Al-El]){for(var wA=0;wA<lA&&o[zn+wA]==o[zn+wA-El];++wA);if(wA>Al){if(Al=wA,_f=El,wA>My)break;for(var Fy=Math.min(El,wA-2),OA=0,by=0;by<Fy;++by){var UA=zn-El+by+32768&32767,$A=Ur[UA],YA=UA-$A+32768&32767;YA>OA&&(OA=YA,Ty=UA)}}}_d=Ty,Ty=Ur[_d],El+=_d-Ty+32768&32767}if(_f){os[mo++]=268435456|revfl[Al]<<18|revfd[_f];var WA=revfl[Al]&31,bA=revfd[_f]&31;ga+=fleb[WA]+fdeb[bA],++ls[257+WA],++zs[bA],go=zn+Al,++ho}else os[mo++]=o[zn],++ls[o[zn]]}}Pn=wblk(o,yn,bt,os,ls,zs,ga,mo,yl,zn-yl,Pn),!bt&&Pn&7&&(Pn=wfblk(yn,Pn+1,et$1))}return slc(sn,0,b+shft(Pn)+_e)},crct=function(){for(var o=new Int32Array(256),s=0;s<256;++s){for(var a=s,b=9;--b;)a=(a&1&&-306674912)^a>>>1;o[s]=a}return o}(),crc=function(){var o=-1;return{p:function(s){for(var a=o,b=0;b<s.length;++b)a=crct[a&255^s[b]]^a>>>8;o=a},d:function(){return~o}}},dopt=function(o,s,a,b,_e){return dflt(o,s.level==null?6:s.level,s.mem==null?Math.ceil(Math.max(8,Math.min(13,Math.log(o.length)))*1.5):12+s.mem,a,b,!_e)},mrg=function(o,s){var a={};for(var b in o)a[b]=o[b];for(var b in s)a[b]=s[b];return a},wbytes=function(o,s,a){for(;a;++s)o[s]=a,a>>>=8},zlv=function(o){if((o[0]&15)!=8||o[0]>>>4>7||(o[0]<<8|o[1])%31)throw"invalid zlib data";if(o[1]&32)throw"invalid zlib data: preset dictionaries not supported"};function deflateSync(o,s){return dopt(o,s||{},0,0)}function unzlibSync(o,s){return inflt((zlv(o),o.subarray(2,-4)),s)}var fltn=function(o,s,a,b){for(var _e in o){var bt=o[_e],rn=s+_e;bt instanceof u8?a[rn]=[bt,b]:Array.isArray(bt)?a[rn]=[bt[0],mrg(b,bt[1])]:fltn(bt,rn+"/",a,b)}},te=typeof TextEncoder<"u"&&new TextEncoder,td=typeof TextDecoder<"u"&&new TextDecoder,tds=0;try{td.decode(et$1,{stream:!0}),tds=1}catch{}function strToU8(o,s){if(s){for(var a=new u8(o.length),b=0;b<o.length;++b)a[b]=o.charCodeAt(b);return a}if(te)return te.encode(o);for(var _e=o.length,bt=new u8(o.length+(o.length>>1)),rn=0,sn=function(zn){bt[rn++]=zn},b=0;b<_e;++b){if(rn+5>bt.length){var yn=new u8(rn+8+(_e-b<<1));yn.set(bt),bt=yn}var Pn=o.charCodeAt(b);Pn<128||s?sn(Pn):Pn<2048?(sn(192|Pn>>6),sn(128|Pn&63)):Pn>55295&&Pn<57344?(Pn=65536+(Pn&1047552)|o.charCodeAt(++b)&1023,sn(240|Pn>>18),sn(128|Pn>>12&63),sn(128|Pn>>6&63),sn(128|Pn&63)):(sn(224|Pn>>12),sn(128|Pn>>6&63),sn(128|Pn&63))}return slc(bt,0,rn)}var exfl=function(o){var s=0;if(o)for(var a in o){var b=o[a].length;if(b>65535)throw"extra field too long";s+=b+4}return s},wzh=function(o,s,a,b,_e,bt,rn,sn){var yn=b.length,Pn=a.extra,zn=sn&&sn.length,lr=exfl(Pn);wbytes(o,s,rn!=null?33639248:67324752),s+=4,rn!=null&&(o[s++]=20,o[s++]=a.os),o[s]=20,s+=2,o[s++]=a.flag<<1|(bt==null&&8),o[s++]=_e&&8,o[s++]=a.compression&255,o[s++]=a.compression>>8;var ar=new Date(a.mtime==null?Date.now():a.mtime),cr=ar.getFullYear()-1980;if(cr<0||cr>119)throw"date not in range 1980-2099";if(wbytes(o,s,cr<<25|ar.getMonth()+1<<21|ar.getDate()<<16|ar.getHours()<<11|ar.getMinutes()<<5|ar.getSeconds()>>>1),s+=4,bt!=null&&(wbytes(o,s,a.crc),wbytes(o,s+4,bt),wbytes(o,s+8,a.size)),wbytes(o,s+12,yn),wbytes(o,s+14,lr),s+=16,rn!=null&&(wbytes(o,s,zn),wbytes(o,s+6,a.attrs),wbytes(o,s+10,rn),s+=14),o.set(b,s),s+=yn,lr)for(var hr in Pn){var es=Pn[hr],Ur=es.length;wbytes(o,s,+hr),wbytes(o,s+2,Ur),o.set(es,s+4),s+=4+Ur}return zn&&(o.set(sn,s),s+=zn),s},wzf=function(o,s,a,b,_e){wbytes(o,s,101010256),wbytes(o,s+8,a),wbytes(o,s+10,a),wbytes(o,s+12,b),wbytes(o,s+16,_e)};function zipSync(o,s){s||(s={});var a={},b=[];fltn(o,"",a,s);var _e=0,bt=0;for(var rn in a){var sn=a[rn],yn=sn[0],Pn=sn[1],zn=Pn.level==0?0:8,lr=strToU8(rn),ar=lr.length,cr=Pn.comment,hr=cr&&strToU8(cr),es=hr&&hr.length,Ur=exfl(Pn.extra);if(ar>65535)throw"filename too long";var Dr=zn?deflateSync(yn,Pn):yn,zr=Dr.length,rs=crc();rs.p(yn),b.push(mrg(Pn,{size:yn.length,crc:rs.d(),c:Dr,f:lr,m:hr,u:ar!=rn.length||hr&&cr.length!=es,o:_e,compression:zn})),_e+=30+ar+Ur+zr,bt+=76+2*(ar+Ur)+(es||0)+zr}for(var as=new u8(bt+22),os=_e,ls=bt-_e,zs=0;zs<b.length;++zs){var lr=b[zs];wzh(as,lr.o,lr,lr.f,lr.u,lr.c.length);var ho=30+lr.f.length+exfl(lr.extra);as.set(lr.c,lr.o+ho),wzh(as,_e,lr,lr.f,lr.u,lr.c.length,lr.o,lr.m),_e+=16+ho+(lr.m?lr.m.length:0)}return wzf(as,_e,b.length,ls,os),as}const isCubeTexture=o=>o&&o.isCubeTexture;class GroundProjectedEnv extends Mesh{constructor(s,a){var b,_e;const bt=isCubeTexture(s),sn=((_e=bt?(b=s.image[0])==null?void 0:b.width:s.image.width)!=null?_e:1024)/4,yn=Math.floor(Math.log2(sn)),Pn=Math.pow(2,yn),zn=3*Math.max(Pn,16*7),lr=4*Pn,ar=[bt?"#define ENVMAP_TYPE_CUBE":"",`#define CUBEUV_TEXEL_WIDTH ${1/zn}`,`#define CUBEUV_TEXEL_HEIGHT ${1/lr}`,`#define CUBEUV_MAX_MIP ${yn}.0`],cr=`
|
|
8614
8614
|
varying vec3 vWorldPosition;
|
|
8615
8615
|
void main()
|
|
8616
8616
|
{
|
|
@@ -8989,12 +8989,12 @@ outputColor=vec4(Uncharted2ToneMapping(inputColor.rgb),inputColor.a);
|
|
|
8989
8989
|
#else
|
|
8990
8990
|
outputColor=vec4(toneMapping(inputColor.rgb),inputColor.a);
|
|
8991
8991
|
#endif
|
|
8992
|
-
}`,ToneMappingEffect=class extends Effect{constructor({blendFunction:o=BlendFunction.SRC,adaptive:s=!1,mode:a=s?ToneMappingMode.REINHARD2_ADAPTIVE:ToneMappingMode.ACES_FILMIC,resolution:b=256,maxLuminance:_e=4,whitePoint:bt=_e,middleGrey:rn=.6,minLuminance:sn=.01,averageLuminance:yn=1,adaptationRate:Pn=1}={}){super("ToneMappingEffect",tone_mapping_default,{blendFunction:o,uniforms:new Map([["luminanceBuffer",new Uniform(null)],["maxLuminance",new Uniform(_e)],["whitePoint",new Uniform(bt)],["middleGrey",new Uniform(rn)],["averageLuminance",new Uniform(yn)]])}),this.renderTargetLuminance=new WebGLRenderTarget(1,1,{minFilter:LinearMipmapLinearFilter,depthBuffer:!1}),this.renderTargetLuminance.texture.generateMipmaps=!0,this.renderTargetLuminance.texture.name="Luminance",this.luminancePass=new LuminancePass({renderTarget:this.renderTargetLuminance}),this.adaptiveLuminancePass=new AdaptiveLuminancePass(this.luminancePass.texture,{minLuminance:sn,adaptationRate:Pn}),this.uniforms.get("luminanceBuffer").value=this.adaptiveLuminancePass.texture,this.resolution=b,this.mode=a}get mode(){return Number(this.defines.get("TONE_MAPPING_MODE"))}set mode(o){if(this.mode!==o){switch(this.defines.clear(),this.defines.set("TONE_MAPPING_MODE",o.toFixed(0)),o){case ToneMappingMode.REINHARD:this.defines.set("toneMapping(texel)","ReinhardToneMapping(texel)");break;case ToneMappingMode.OPTIMIZED_CINEON:this.defines.set("toneMapping(texel)","OptimizedCineonToneMapping(texel)");break;case ToneMappingMode.ACES_FILMIC:this.defines.set("toneMapping(texel)","ACESFilmicToneMapping(texel)");break;default:this.defines.set("toneMapping(texel)","texel");break}this.adaptiveLuminancePass.enabled=o===ToneMappingMode.REINHARD2_ADAPTIVE,this.setChanged()}}getMode(){return this.mode}setMode(o){this.mode=o}get whitePoint(){return this.uniforms.get("whitePoint").value}set whitePoint(o){this.uniforms.get("whitePoint").value=o}get middleGrey(){return this.uniforms.get("middleGrey").value}set middleGrey(o){this.uniforms.get("middleGrey").value=o}get averageLuminance(){return this.uniforms.get("averageLuminance").value}set averageLuminance(o){this.uniforms.get("averageLuminance").value=o}get adaptiveLuminanceMaterial(){return this.adaptiveLuminancePass.fullscreenMaterial}getAdaptiveLuminanceMaterial(){return this.adaptiveLuminanceMaterial}get resolution(){return this.luminancePass.resolution.width}set resolution(o){const s=Math.max(0,Math.ceil(Math.log2(o))),a=Math.pow(2,s);this.luminancePass.resolution.setPreferredSize(a,a),this.adaptiveLuminanceMaterial.mipLevel1x1=s}getResolution(){return this.resolution}setResolution(o){this.resolution=o}get adaptive(){return this.mode===ToneMappingMode.REINHARD2_ADAPTIVE}set adaptive(o){this.mode=o?ToneMappingMode.REINHARD2_ADAPTIVE:ToneMappingMode.REINHARD2}get adaptationRate(){return this.adaptiveLuminanceMaterial.adaptationRate}set adaptationRate(o){this.adaptiveLuminanceMaterial.adaptationRate=o}get distinction(){return console.warn(this.name,"distinction was removed."),1}set distinction(o){console.warn(this.name,"distinction was removed.")}update(o,s,a){this.adaptiveLuminancePass.enabled&&(this.luminancePass.render(o,s),this.adaptiveLuminancePass.render(o,null,null,a))}initialize(o,s,a){this.adaptiveLuminancePass.initialize(o,s,a)}};const coreSceneStore=create$3((o,s)=>({CORE_API:null,frameloop:"always",hoveredGhostIndex:-1,itemDraggedSkuID:null,screenshotRenderer:new WebGLRenderer({antiAlias:!0,preserveDrawingBuffer:!0}),screenshotCamera:new PerspectiveCamera(75,1.33,.1,1e3),builderMode:!1,dragging:!1,bbox:null,draggingItemGUID:null,sceneRef:null,cssLoaded:!1,sceneHasDefaultConfigurationID:!1,configurationLoaded:!0,preconfigurationLoaded:!1,configurationLoadedOnRestart:!0,cursorParentRef:null,glContext:null,canvasTooltipText:"",canvasSize:{width:600,height:600},boundData:null,showDimensions:!1,autoFocusTrigger:0,cameraActive:!1,autoFocusRef:null,alertData:{},persistantAlertData:null,alertQueue:[],currentAlertData:null,alertSettings:null,draggingOnDropCollisionData:null,multipleTouchDetected:!1,isMobile:!1,isTouchDevice:!1,isTablet:!1,isDesktop:!0,isLandscape:!1,sceneSettings:{swappableRoot:!0,ghostColorOnHoverWithDraggableUi:{r:153,g:252,b:0,a:1},preserveDrawingBuffer:!1,showSaveBtn:!0,showShareBtn:!0,showResetBtn:!0,showDimensionBtn:!0,showViewInYourSpaceBtn:!0,showDependencyOnHover:!1,showContextMenu:!0,showHotspotsBtn:!0,showInstructionsBtn:!1,showInstructionsOnStartup:!1,sceneScaleUnit:"ft",arPlacement:"floor",arTransforms:{position:[0,0,0],rotation:[0,0,0],scale:[1,1,1]},currency:"$",disableDragDrop:!1,ignoreSpawningCollision:!1,disableCollider:!1,disableContextMenu:!1,ghostColor:{r:10,g:10,b:10,a:.2},ghostScale:[1,1,1],ghostAsWireframe:!1,draggableUI:!1,addFromInfoModal:!1,clickToAddUi:!0,accordionInBuildUi:!1,outOfStock_EmissiveColor:{r:250,g:50,b:0},outOfStock_EmissiveIntensity:.002,defaultConfigurationID:null,emptySceneText:null,emptySceneTextFontSize:"2rem",addToCartCTAText:"Add To Cart",ignoreCollisionPostDragging:!1,comboPlugDistanceThreshold:.05,disableCart:!1,dimensionColor:{r:0,g:0,b:0},disableLocalColorOverride:!1,analyticsEventPrefix:"",outlineSettings:{multisampling:10,visibleEdgeColor:new Color$1("#0f0").convertSRGBToLinear(),hiddenEdgeColor:new Color$1("#0f0").convertSRGBToLinear(),blur:3,width:1e3,edgeStrength:1e3,blendFunction:BlendFunction.ALPHA,pulseSpeed:0,xRay:!0},textSettings:{cartQuantityText:"Qty",reviewButtonText:"Review",cartHeadingText:"Review Products",buildTabHeadingText:"Build",colorTabHeadingText:"Color",featuresTabHeadingText:"Features",tooltipEmptySceneText:"",tooltipInstructionText:"-Drag to rotate the camera-"},variantsTabOrder:{color:{enabled:!0,priority:1},geometryVariants:{enabled:!0,priority:2}},boundingBoxLeeway:.9,contactShadowVisibility:!0,measurementPrecision:2,disableAlerts:!1,focusCameraOnGhosts:!0,alertLevel:2999,alertControl:{default:!0,itemAdded:!0,geometryVariantChanged:!0,overridesRemoved:!0,materialVariantChanged:!0,itemRemoved:!0,itemRepositioned:!0,configurationSaved:!0,linkCopied:!0,outOfStock:!0,unvisualizedItemSpawn:!0},screenshotCameras:[{position:new Vector3(-2.5,.6,-5),rotation:new Vector3(-3.1097068566150314,-.6437852162982552,-3.122449778846033)},{position:new Vector3(3,1,-5),rotation:new Vector3(-.5,1,.5)}],instructionsSettings_desktop:[{header:"Add to Scene",description:"Click to add individual modules to the scene.",lottieURL:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Non-Furniture/Non-furniture_Step_1A_Drag_Drop/Non-furniture_Step_1A.json"},{header:"Rearrange Modules",description:"Drag & drop individual modules in the scene to rearrange.",lottieURL:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Non-Furniture/Non-furniture_Step_2/Non-furniture_Step_2.json"},{header:"Remove Modules",description:"Click to select and remove individual modules from the scene.",lottieURL:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Non-Furniture/Non-furniture_Step_3/Non-furniture_Step_3.json"}],instructionsSettings_mobile:[{header:"Add to Scene",description:"Click to add individual modules to the scene.",lottieURL:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Non-Furniture/Non-furniture_Step_1A_Drag_Drop_Mobile/Mobile_Non-furniture_Step_1A.json"},{header:"Rearrange Modules",description:"Drag & drop individual modules in the scene to rearrange.",lottieURL:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Non-Furniture/Non-furniture_Step_2/Non-furniture_Step_2.json"},{header:"Remove Modules",description:"Tap to select and remove individual modules from the scene.",lottieURL:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Non-Furniture/Non-furniture_Step_3/Non-furniture_Step_3.json"}],defaultInstructionsSettings:{step1_drag:{mobile:{header:"Add to Scene",description:"Drag & drop individual modules to add to the scene.",lottieURL:{furniture:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Furniture/Furniture_Step_1A_Drag_Drop_Mobile/Mobile_Furniture_Step_1A.json",nonFurniture:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Non-Furniture/Non-furniture_Step_1A_Drag_Drop_Mobile/Mobile_Non-furniture_Step_1A.json"}},desktop:{header:"Add to Scene",description:"Drag & drop individual modules to add to the scene.",lottieURL:{furniture:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Furniture/Furniture_Step_1A_Drag_Drop/Furniture_Step_1A.json",nonFurniture:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Non-Furniture/Non-furniture_Step_1A_Drag_Drop/Non-furniture_Step_1A.json"}}},step1_add:{mobile:{header:"Add to Scene",description:"Click to add individual modules to the scene.",lottieURL:{furniture:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Furniture/Furniture_Step_1B_Click_Add_Mobile/Mobile_Furniture_Step_1B.json",nonFurniture:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Non-Furniture/Non-furniture_Step_1B_Click_Add_Mobile/Mobile_Non-furniture_Step_1B.json"}},desktop:{header:"Add to Scene",description:"Click to add individual modules to the scene.",lottieURL:{furniture:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Furniture/Furniture_Step_1B_Click_Add/Furniture_Step_1B.json",nonFurniture:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Non-Furniture/Non-furniture_Step_1B_Click_Add/Non-furniture_Step_1B.json"}}},step2:{mobile:{header:"Rearrange Modules",description:"Drag & drop individual modules in the scene to rearrange.",lottieURL:{furniture:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Furniture/Furniture_Step_2/Furniture_Step_2.json",nonFurniture:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Non-Furniture/Non-furniture_Step_2/Non-furniture_Step_2.json"}},desktop:{header:"Rearrange Modules",description:"Drag & drop individual modules in the scene to rearrange.",lottieURL:{furniture:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Furniture/Furniture_Step_2/Furniture_Step_2.json",nonFurniture:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Non-Furniture/Non-furniture_Step_2/Non-furniture_Step_2.json"}}},step3:{mobile:{header:"Remove Modules",description:"Tap to select and remove individual modules from the scene.",lottieURL:{furniture:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Furniture/Furniture_Step_3/Furniture_Step_3.json",nonFurniture:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Non-Furniture/Non-furniture_Step_3/Non-furniture_Step_3.json"}},desktop:{header:"Remove Modules",description:"Click to select and remove individual modules from the scene.",lottieURL:{furniture:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Furniture/Furniture_Step_3/Furniture_Step_3.json",nonFurniture:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Non-Furniture/Non-furniture_Step_3/Non-furniture_Step_3.json"}}}}},setCSSLoaded:a=>{o({cssLoaded:a})},actions:{popFromAlertQueue:()=>{const{alertQueue:a}=s();return a.shift(),o({alertQueue:a}),a},addToAlertQueue:a=>{const{alertQueue:b,currentAlertData:_e}=s();return b.length>0&&b[b.length-1].alertId&&a.alertId===b[b.length-1].alertId||b.length==0&&_e&&_e.alertId&&_e.alertId==a.alertId||(b.push(a),o({alertQueue:b})),b},getDeviceState:()=>{const{isDesktop:a,isMobile:b,isTablet:_e,isTouchDevice:bt,isLandscape:rn}=s();return{isDesktop:a,isMobile:b,isTablet:_e,isTouchDevice:bt,isLandscape:rn}},enableCart:()=>{const{sceneSettings:a}=s();a.disableCart=!1,inventoryStore.getState().actions.refreshInventory(itemStore.getState().itemsSpawned),CORE_API.fireEvent(CORE_API.EVENTS.SCENE.Cart_StatusUpdated,{disableCart:!1})},disableCart:()=>{const{sceneSettings:a}=s();a.disableCart=!0,inventoryStore.getState().actions.refreshInventory(itemStore.getState().itemsSpawned),CORE_API.fireEvent(CORE_API.EVENTS.SCENE.Cart_StatusUpdated,{disableCart:!0})},getSceneSettings:()=>{const{sceneSettings:a}=s();return a},sendAlert:a=>{o({alertData:{...a}})},switchCursor(a){const{cursorParentRef:b}=s();if(!b)return;let _e="";switch(a){default:case CURSORS.GRAB:_e="grabCursor";break;case CURSORS.GRABBING:_e="grabbingCursor";break;case CURSORS.BLOCKED:_e="blockedCursor";break;case CURSORS.POINTER:_e="pointerCursor";break;case CURSORS.MOVE:_e="moveCursor";break}for(let bt=0;bt<b.classList.length;bt++)b.classList[bt].includes("Cursor")&&b.classList.remove(b.classList[bt]);b.classList.add(_e)},setAlertSettings:a=>{o({alertSettings:a})},async completeDropItem(){const a=attachmentStore$1.getState().attachmentSystem,{draggingOnDropCollisionData:b}=s(),{node:_e,attachedChildrenGuids:bt,collidingStatus:rn,intersectingGhostObject:sn,initPosition:yn,initRotation:Pn,detachedPlugs:zn,attachedNodesToCurrentNode:lr}=b;CORE_API.alert({alertMsg:"Item(s) have been removed",alertTime:7e3,alertType:"info",alertLabel:"Item(s) Removed",alertId:"itemRemoved"});for(const[es,Ur]of bt.entries())rn[es]===!0&&await itemStore.getState().actions.removeItemByGUID(Ur);const ar=sn.userData;let cr=_e.getPlugByName(ar.incomingPlugName),hr=a.currentStructure.getPlugByGUID(ar.receiverPlugGUID);_e.ref.position.set(sn.position.x,sn.position.y,sn.position.z),_e.ref.setRotationFromEuler(sn.rotation),_e.transform={position:sn.position,rotation:sn.quaternion},a.currentStructure.connectPlugs({incomingPlug:cr,receiverPlug:hr}),ghostStore.getState().actions.clearAllGhosts(),itemStore.getState().actions.deselectItem(),lr.map(es=>{_e.ref.parent.attach(es.ref),es.transform={position:es.ref.position,rotation:es.ref.quaternion},_e.dragging=!1,es.dragging=!1}),await attachmentStore$1.getState().actions.updateFittingSkuIds()},async revertDropItem(){const a=attachmentStore$1.getState().attachmentSystem,{draggingOnDropCollisionData:b}=s(),{node:_e,attachedChildrenGuids:bt,collidingStatus:rn,intersectingGhostObject:sn,initPosition:yn,initRotation:Pn,detachedPlugs:zn,attachedNodesToCurrentNode:lr}=b;CORE_API.alert({alertMsg:"Position of item"+_e.skuID+"is being moved to it's original position",alertTime:4e3,alertType:"info",alertLabel:"Repositioning",alertId:"itemRepositioned"});const ar=zn.neighbourDetachedPlugs;ar&&(zn.neighbourNode.detachNodeFromReceiver(),a.currentStructure.connectPlugs({incomingPlug:ar.incomingPlug,receiverPlug:ar.receiverPlug}));let cr=zn.rootDetachedPlugs.incomingPlug,hr=zn.rootDetachedPlugs.receiverPlug;_e.ref.position.set(yn.x,yn.y,yn.z),_e.ref.setRotationFromEuler(Pn);let es=new Quaternion().identity();_e.ref.getWorldQuaternion(es),_e.transform={position:yn,rotation:es},a.currentStructure.connectPlugs({incomingPlug:cr,receiverPlug:hr}),ghostStore.getState().actions.clearAllGhosts(),itemStore.getState().actions.deselectItem(),lr.map(Ur=>{_e.ref.parent.attach(Ur.ref),Ur.transform={position:Ur.ref.position,rotation:Ur.ref.quaternion},_e.dragging=!1,Ur.dragging=!1}),await attachmentStore$1.getState().actions.updateFittingSkuIds()},setCoreSettings:a=>{const{sceneSettings:b,isMobile:_e,isTouchDevice:bt,isLandscape:rn,actions:sn}=s(),yn=_e===!0?"mobile":"desktop",Pn=["showSave","showShare","showReset","showDimension","showHotspots","showInstructionsBtn","showViewInYourSpace","showContextMenu","showInstructionsOnStartup","draggableUI","clickToAddUi","textSettings","alertControl","variantsTabOrder","emptySceneTextFontSize","instructionsSettings"];for(const zn of Pn)if(zn==="draggableUI"||zn==="clickToAddUi"||zn==="emptySceneTextFontSize"||zn==="showInstructionsOnStartup"||zn==="showInstructionsBtn"||zn==="instructionsSettings"){const ar=`${zn}_${rn===!1&&bt===!0?"mobile":"desktop"}`;a[ar]!==void 0?b[zn]=a[ar]:b[ar]!==void 0&&(b[zn]=b[ar])}else if(zn==="textSettings"||zn==="variantsTabOrder"||zn==="alertControl"||zn==="outlineSettings"){if(a.hasOwnProperty(zn)){let lr=b[zn];Object.keys(lr).map(ar=>{let cr=a[zn];cr.hasOwnProperty(ar)?(ar==="visibleEdgeColor"||ar==="hiddenEdgeColor")&&(cr[ar]=new Color$1(cr[ar]).convertSRGBToLinear()):cr[ar]=lr[ar]})}}else{const lr=`${zn}_${yn}`;if(a[lr]!==void 0){let ar=`${zn}Btn`;zn=="showContextMenu"&&(ar=`${zn}`),b[ar]=a[lr]}}a.disableCart===!0&&sn.disableCart(),Object.keys(a).map(zn=>b[zn]=a[zn]),b.emptySceneText===null&&(b.emptySceneTextFontSize=_e?"1.2rem":"1.5rem",b.draggableUI===!0?b.emptySceneText="Drag an item here to get started":b.emptySceneText="Select an item to get started"),o({sceneSettings:{...b,ghostThreeColor:{r:b.ghostColor.r/255,g:b.ghostColor.g/255,b:b.ghostColor.b/255,a:b.ghostColor.a/255},draggableUiGhostThreeColorOnHover:{r:b.ghostColorOnHoverWithDraggableUi.r/255,g:b.ghostColorOnHoverWithDraggableUi.g/255,b:b.ghostColorOnHoverWithDraggableUi.b/255,a:b.ghostColorOnHoverWithDraggableUi.a/255}}})},triggerAutoFocus:(a=null)=>o(b=>({autoFocusRef:a,autoFocusTrigger:b.autoFocusTrigger+1})),requestNewScreenshot:async(a,b)=>new Promise(async(_e,bt)=>{LOGGER.info({title:"Taking a screenshot"});const{screenshotRenderer:rn,sceneRef:sn,screenshotCamera:yn,canvasSize:Pn}=s(),zn=await CORE_API.getCurrentCameraDetails();if(rn.setClearColor(16777215),yn.copy(zn),a!==null&&(yn.position.copy(a.position),yn.rotation.copy(new Euler(a.rotation.x,a.rotation.y,a.rotation.z))),b==null?rn.setSize(Pn.width,Pn.height):rn.setSize(b.width,b.height),rn.render(sn.parent,yn),rn.preserveDrawingBuffer===!1)LOGGER.warn({title:"Preserve Drawing Buffer must be enabled to take a screenshot. Please make sure to enable this within the project input data coreSettings"}),bt({success:!1,imageData:null});else{LOGGER.info({title:"Downloading the screenshot"});const lr=rn.domElement.toDataURL("image/png").replace("image/png","image/octet-stream");_e({success:!0,imageData:lr})}})}})),hotspotIdPrefix="rd",hotspotIdSeparator="_";function generateHotspotAbsoluteID(o,s){return`${hotspotIdPrefix}${hotspotIdSeparator}${o}${hotspotIdSeparator}${s}`}async function wait(o){return LOGGER.info({title:`Waiting for ${o}ms`}),new Promise((s,a)=>{setTimeout(()=>{s(!0)},o)})}function compareObjects(o,s){if(o===null||s===null)return!1;for(let a in o)if(o.hasOwnProperty(a)&&s.hasOwnProperty(a)&&o[a]!==s[a])return!1;return Object.keys(o).length===Object.keys(s).length}const saveStructureToCMS=o=>{const s={method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o)};return fetch(SAVE_CONFIG_ENDPOINT,s)},mobileCheck=function(){let o=!1;return function(s){(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(s)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(s.substr(0,4)))&&(o=!0)}(navigator.userAgent||navigator.vendor||window.opera),o};function isIpadOS(){return navigator.maxTouchPoints&&navigator.maxTouchPoints>2&&/MacIntel/.test(navigator.platform)}function tabletCheck(){const o=navigator.userAgent.toLowerCase(),s=/(ipad|tablet|(android(?!.*mobile))|(windows(?!.*phone)(.*touch))|kindle|playbook|silk|(puffin(?!.*(IP|AP|WP))))/.test(o);return s||isIpadOS()}function touchDeviceCheck(){return"ontouchstart"in window||navigator.maxTouchPoints>0||navigator.msMaxTouchPoints>0}async function getJSONFromEndpoint(o){let s={data:null,report:"",success:!1};try{const b=await(await fetch(o)).text();s.data=JSON.parse(b),s.success=!0,s.report="Successfully fetched JSON data."}catch(a){s.report=a,CORE_API.alert({alertMsg:"",alertTime:5e3,alertType:"warn",alertLabel:"Preload Failed"})}return s}const addVector=(o,s)=>new Vector3(o[0]+s[0],o[1]+s[1],o[2]+s[2]),Vec3ToArr=o=>[o.x,o.y,o.z],ArrToVec3=o=>new Vector3(o[0],o[1],o[2]),findMeshAndCloneMatFromScene=(o,s=!0)=>{let a=[];const b=coreSceneStore.getState().sceneSettings.outOfStock_EmissiveColor,_e=coreSceneStore.getState().sceneSettings.outOfStock_EmissiveIntensity;return o.traverse(bt=>{bt.isMesh&&(bt.material.userData.cloned?bt.material.userData.inStock!==s&&(s?(bt.material.emissive.set(new Color$1(255,255,255)),bt.material.emissiveIntensity=0):(bt.material.emissive.set(new Color$1(b.r,b.g,b.b)),bt.material.emissiveIntensity=_e),bt.material.userData.inStock=s):(bt.material=bt.material.clone(),bt.material.userData.inStock=s,bt.material.userData.cloned=!0,s?(bt.material.emissive.set(new Color$1(255,255,255)),bt.material.emissiveIntensity=0):(bt.material.emissive.set(new Color$1(b.r,b.g,b.b)),bt.material.emissiveIntensity=_e)),a.push(bt))}),a},filterArrWithCondition=(o,s)=>{let a=0,b=[];for(let _e=0;_e<o.length;_e++){const bt=o[_e];s(bt)?o[a++]=bt:b.push(o[_e])}return o.length=a,b},degToRad=o=>o*Math.PI/180,resolveAssetUrl=o=>{if(!o)return;if(new RegExp("^(?:[a-z+]+:)?//","i").test(o))return o;let b=o;return b=b.replaceAll("<@all-projects@>",ALL_PROJECTS_ASSET_DATA_ROOT_URL),b=b.replaceAll("<@generic-project@>",GENERIC_PROJECT_ASSET_DATA_ROOT_URL),b};function componentToHex(o){var s=o.toString(16);return s.length==1?"0"+s:s}function rgbToHex(o,s,a){return"#"+componentToHex(o)+componentToHex(s)+componentToHex(a)}function getUrlParameterByName(o,s=window.location.search){const a=new URLSearchParams(s);return Object.fromEntries(a.entries())[o]}const lightStore=create$3((o,s)=>({defaultEnvMapUrl:"<@generic-project@>/env-map/neutral.hdr",envMapUrl:"",actions:{setEnvLightMap:a=>{o(b=>({envMapUrl:a}))},processLookEnvMapOverride:a=>{const{envMapUrl:b,defaultEnvMapUrl:_e,actions:bt}=s(),rn=productDataStore$1.getState().lookData[a],sn=rn?.envMapOverride;if(!rn||!sn){bt.setEnvLightMap(_e);return}if(sn===b){LOGGER.info({title:`New Env Map Url is the same as the current ${sn}`});return}bt.setEnvLightMap(sn)}}}));class Plug{constructor(s,a,b=null){this._attachedPlug=null,this._name=s.name,this._acceptedPlugTypes=s.acceptedPlugTypes,this._affectedNodes=s.affectedNodes,this._unvisualizedCount=s.unvisualizedCount,this._weight=s.weight,this._connectsToPlugTypes=s.connectsToPlugTypes,this._dependencySku=s.dependencySku,this._isDependencySkuInteractive=s.isDependencySkuInteractive,this._autoSpawnDependencyIfMissing=s.autoSpawnDependencyIfMissing,this._node=a,b?(this._comboPlugConnector=b.comboPlugConnector,this._guid=b.guid,this._isOpen=b.isOpen,this._type=b.type,this._isReceiverPlug=b.isReceiverPlug,this._attachedPlugGUID=b.attachedPlugGUID):(this._comboPlugConnector=!1,this._guid=crypto.randomUUID(),this._isOpen=!0,this._type=s.type,this._isReceiverPlug=!1,this._attachedPlugGUID=null)}export(){return this.isOpen?null:{guid:this._guid,type:this._type,isOpen:this._isOpen,comboPlugConnector:this._comboPlugConnector,attachedPlugGUID:this._attachedPlugGUID,isReceiverPlug:this._isReceiverPlug}}get node(){return this._node}set comboPlugConnector(s){this._comboPlugConnector=s}get comboPlugConnector(){return this._comboPlugConnector}get attachedPlug(){return this._attachedPlug}set attachedPlug(s){this._attachedPlug=s}get attachedPlugGUID(){return this._attachedPlugGUID}set type(s){this._type=s}get type(){return this._type}get weight(){return this._weight}get unvisualizedCount(){return this.__unvisualizedCount}get affectedNodes(){return this._affectedNodes}get guid(){return this._guid}get isReceiverPlug(){return this._isReceiverPlug}get name(){return this._name}get acceptedPlugTypes(){return this._acceptedPlugTypes}set acceptedPlugTypes(s){this._acceptedPlugTypes=s}get connectsToPlugTypes(){return this._connectsToPlugTypes}set connectsToPlugTypes(s){this._connectsToPlugTypes=s}get isOpen(){return this._isOpen}attachPlug(s,a=!1){this._attachedPlug=s,this._attachedPlugGUID=s.guid,this._isOpen=!1,this._isReceiverPlug=a;const b=this,_e=this._node;if(_e.isConnectedToRoot&&a){const bt=_e.whichPlugAreWeAttachedUsing();switch(s.type){case"weighted_hider":bt.weight<b.weight&&(_e.showNodes(bt.affectedNodes)||CORE_API.coreWCRef.addEventListener(_e.guid+":modelLoaded",function(){_e.showNodes(bt.affectedNodes)},{once:!0}));break}}if(a&&s.type!==""&&s.type==b._type)switch(s.type){default:case"weighted_hider":b._weight>s.weight?s.node.hideNodes(s.affectedNodes)||CORE_API.coreWCRef.addEventListener(s.node.guid+":modelLoaded",function(){s.node.hideNodes(s.affectedNodes)},{once:!0}):b._weight<s.weight&&(_e.hideNodes(b._affectedNodes)||CORE_API.coreWCRef.addEventListener(_e.guid+":modelLoaded",function(){_e.hideNodes(b._affectedNodes)},{once:!0}));break}a&&(_e.isEndNode=!1)}async openPlug(){if(this._comboPlugConnector&&(this._comboPlugConnector=!1),this._node.isConnectedToRoot){const s=this._node.whichPlugAreWeAttachedUsing();if(s&&this._guid!==s.guid)switch(this.type){case"weighted_hider":s.type==="weighted_hider"&&s.weight<this.weight&&this._node.hideNodes(s.affectedNodes);break}}if(this._isReceiverPlug&&this._attachedPlug.type!==""&&this._attachedPlug.type==this._type)switch(this._attachedPlug.type){default:case"weighted_hider":this._weight>this._attachedPlug.weight?this._attachedPlug.node.showNodes(this._attachedPlug.affectedNodes):this._weight<this._attachedPlug.weight&&this._node.showNodes(this._affectedNodes);break}if(this._attachedPlug=null,this._attachedPlugGUID=null,this._isOpen=!0,this._isReceiverPlug&&(this._isReceiverPlug=!1,this._node.checkIfEndNode()),!!this._dependencySku&&!(this._autoSpawnDependencyIfMissing==!1||this._isDependencySkuInteractive||coreSceneStore.getState().configurationLoaded===!1))try{const s=await ghostStore.getState().actions.spawnGhostsForSkuID(this._dependencySku,!0);if(!s)return;const a=s.connectablePlugs;let b=!1;const _e=this._isDependencySkuInteractive?this.isDependencySkuInteractive===1:!1;for(const bt of a){if(bt.receiverPlug.guid!==this._guid)continue;b=!0;const rn=await itemStore.getState().actions.addItemBySkuID(this._dependencySku,a.indexOf(bt),!0,_e);rn!==null&&this._node.addMyDependenciesGUID(rn)}b||await ghostStore.getState().actions.clearAllGhosts()}catch{LOGGER.info({title:"The Plug has been removed!"})}}canAttachToPlug(s){for(let a=0;a<this._connectsToPlugTypes.length;a++)if(s._acceptedPlugTypes.includes(this._connectsToPlugTypes[a]))return!0;return!1}}let Node$1=class{#t="default";#r=!1;#i=!1;#a=!0;#n={};#o=!1;#c={};#u=[];constructor(s,a=null,b,_e){let bt=productDataStore$1.getState().productData;this._plugs=[],this._skuID=s,this._ref=null,this._dragging=!1,this._modelData=null,this._transform=null,this.#t="default",this._overrideVariant=null,this._followsParent=bt[s].followsParent,this._categoryID=bt[s].categoryID,this._replace=bt[s].replace,this._swappable=bt[s].swappable,this._price=this.#s(),this.#r=bt[s]?.ignoreInCart,a?(this._guid=a.guid,this._isEndNode=a.isEndNode,this._overrideVariant=a.overrideVariant,this.generatePlugsWithData(s,a.plugs)):(this._guid=crypto.randomUUID(),this._isEndNode=!0,this.generatePlugsForNode(s)),b&&Object.keys(b).map(rn=>{if(bt[s].looks&&bt[s].looks.includes(rn)){this.#t=rn;return}})}get isRoot(){return this._skuID.toLowerCase()==="root"}updateGeometryVariant(s,a){const _e=productDataStore$1.getState().categoryData.geometryVariants;let bt=null;if(_e.map(zn=>{zn.id==s&&(bt=zn)}),!bt)return;const rn=bt.productsInCategory,yn=bt.variants[a].productsToSwitch,Pn=itemStore.getState().itemsSpawned;rn.map(zn=>{zn.products.map(lr=>{this.skuID===lr&&zn.products.map(ar=>{yn.map(cr=>{if(cr==ar){const hr=productDataStore$1.getState().actions.getProductDataById(cr);this.skuID=hr.skuID;const es=Pn[this.guid];es&&es.itemData&&Object.keys(hr).map(Ur=>{es.itemData[Ur]=hr[Ur]}),this.hideNodes(hr.geometriesToHide),this.showNodes(hr.geometriesToShow),this.updatePricing(),this.resetInStock(),inventoryStore.getState().actions.refreshInventory(Pn)}})})})})}resetInStock(){this.#n={},this.#o=!0}setInStockForRef(s){if(!this.ref)return!1;let a=this.ref.getObjectByName("GRP_RenderGeometry");return a?(a.inStock=s,!0):!1}set inStock({variantName:s,newValue:a}){if(this.#n[s]&&this.#n[s]==a||(this.#n[s]=a,s!==this.#t&&this.#o===!1))return;const b=()=>{this.setInStockForRef(a)};b()||CORE_API.coreWCRef.addEventListener(this.guid+":modelLoaded",b,{once:!0})}get myDependenciesGUID(){return this.#u}set myDependenciesGUID(s){this.#u=s}get dragging(){return this._dragging}set dragging(s){this._dragging=s}addMyDependenciesGUID(s){this.#u.push(s)}get isDependent(){return this.#i}set isDependent(s){this.#i=s}get isInteractive(){return this.#a}set isInteractive(s){this.#a=s}update(s){this._skuID=s;const a=productDataStore$1.getState().productData,b=a[s]?.plugs;if(this.ignoreInCart=a[s].ignoreInCart,!!b)for(let _e=0;_e<this._plugs.length;_e++)for(let bt=0;bt<b.length;bt++)this._plugs[_e].name==b[bt].name&&(this._plugs[_e].acceptedPlugTypes=b[bt].acceptedPlugTypes,this._plugs[_e].connectsToPlugTypes=b[bt].connectsToPlugTypes)}export(){let s={};for(let a=0;a<this._plugs.length;a++){let b=this._plugs[a].export();b&&(s[this._plugs[a].name]=b)}return{skuID:this._skuID,guid:this._guid,isEndNode:this._isEndNode,plugs:s,overrideVariant:this._overrideVariant}}get node(){return this}get swappable(){return this._swappable}get replace(){return this._replace}get ignoreInCart(){return this.#r}set ignoreInCart(s){this.#r=s}get isTypeCombo(){const s=this.whichPlugAreWeAttachedUsing();return s.type=="comboPlug"&&s.connectsToPlugTypes.length>0}get canRotate(){let s=!0;if(this.isTypeCombo)return!1;if(!this._isEndNode){const b=this.whichNodesAreAttachedToUs();if(b.length>0){let _e=!0;if(b.map(bt=>{bt.followsParent===!1&&(_e=!1)}),!_e)return!1}}let a=!1;for(let b=0;b<this.plugs.length;b++)if(!this.plugs[b].isOpen&&this.plugs[b].attachedPlug.isReceiverPlug){const _e=this.plugs[b].attachedPlug.acceptedPlugTypes;for(let bt=0;bt<this.plugs.length;bt++)if(b!=bt)for(let rn=0;rn<this.plugs[bt].connectsToPlugTypes.length;rn++)_e.includes(this.plugs[bt].connectsToPlugTypes[rn])&&(a=!0)}return s=a,s}hideNodes(s){if(!this.ref)return!1;const a=this.ref.getObjectByName("GRP_RenderGeometry"),b=this.ref.getObjectByName("GRP_ProxyMesh");return s.map(_e=>{if(a){const bt=a.getObjectByName(_e);bt&&(bt.visible=!1)}if(b){const bt=b.getObjectByName(_e);bt&&(bt.visible=!1)}}),!0}showNodes(s){if(!this.ref)return!1;const a=this.ref.getObjectByName("GRP_RenderGeometry"),b=this.ref.getObjectByName("GRP_ProxyMesh");return s.map(_e=>{if(a){const bt=a.getObjectByName(_e);bt&&(bt.visible=!0)}if(b){const bt=b.getObjectByName(_e);bt&&(bt.visible=!0)}}),!0}canConnectToPlugType(s){let a=!1;return this._plugs.map(b=>{b.connectsToPlugTypes.map(_e=>{_e==s&&(a=!0)})}),a}isConnectedToSkuID(s){let a=!1;return this._plugs.map(b=>{if(b.isOpen||a===!0)return;let _e=b.attachedPlug;!_e&&b.attachedPlugGUID&&(_e=attachmentStore$1.getState().attachmentSystem.currentStructure.getPlugByGUID(b.attachedPlugGUID)),_e.node.skuID==s&&(a=!0)}),a}get isConnectedToRoot(){return this.isConnectedToSkuID("Root")}swapRoot(){if(!this.canSwapRoot)return;const a=attachmentStore$1.getState().attachmentSystem.currentStructure,b=this.whichNodesAreAttachedToUs();let _e=null;b.map(Pn=>{Pn.followsParent===!1&&(_e=Pn)});const bt=_e.detachNodeFromReceiver();let rn=null;this._plugs.map(Pn=>{Pn.isOpen||Pn.attachedPlug.node.skuID=="Root"&&(rn=Pn.attachedPlug)});const sn=this.detachNodeFromReceiver();let yn=null;return _e.plugs.map(Pn=>{Pn.connectsToPlugTypes.includes("root")&&(yn=Pn)}),a.connectPlugs({incomingPlug:yn,receiverPlug:rn}),{neighbourDetachedPlugs:bt,rootDetachedPlugs:sn,neighbourNode:_e}}get canSwapRoot(){if(coreSceneStore.getState().sceneSettings.swappableRoot===!1)return!1;let s=!1;if(this.isConnectedToRoot&&!this._isEndNode){const b=this.whichNodesAreAttachedToUs();let _e=0,bt=null;b.map(rn=>{rn.followsParent===!1&&(_e++,bt=rn)}),_e==1?bt.canConnectToPlugType("root")&&(s=!0):_e>0&&(s=!1)}return s}get canRemove(){let s=!0;return this._isEndNode||(this.whichNodesAreAttachedToUs().map(b=>{b.followsParent===!1&&(s=!1)}),s||(s=this.canSwapRoot)),s}getComboPlugNodesAttachedToUs(){let s=[];return this.whichNodesAreAttachedToUs().forEach(b=>{b.isTypeCombo&&s.push(b);const _e=b.getComboPlugNodesAttachedToUs();_e.length>0&&(s=s.concat(_e))}),s}getAllBranchedNodesAttachedToUs(){let s=[];const a=this.whichNodesAreAttachedToUs();for(let b=0;b<a.length;b++){s.push(a[b]);const _e=a[b].getAllBranchedNodesAttachedToUs();_e.length>0&&(s=s.concat(_e))}return s}get canDrag(){let s=!0;if(this.isTypeCombo)return!1;for(let b=0;b<this._plugs.length;b++)if(this._plugs[b].isOpen==!1&&this._plugs[b].attachedPlug.type=="comboPlug")return!1;const a=this.getComboPlugNodesAttachedToUs();if(a.length>0){const b=this.getAllBranchedNodesAttachedToUs();let _e=!0;if(a.map(bt=>{const rn=bt.whichNodesIsThisComboPlugAttachedTo();let sn=!0;if(rn.map(yn=>{let Pn=!1;if(b.map(zn=>{yn.guid===zn.guid&&(Pn=!0)}),Pn==!1){sn=!1;return}}),sn==!1){_e=!1;return}}),_e==!1)return!1}return this._isEndNode||(this.whichNodesAreAttachedToUs().map(_e=>{_e.followsParent===!1&&(s=!1)}),s||(s=this.canSwapRoot)),s}get followsParent(){return this._followsParent}set followsParent(s){this._followsParent=s}resetFollowsParent(){const s=productDataStore$1.getState().productData;this._followsParent=s[this.skuID].followsParent}get currentVariant(){return this.#t==="default"?productDataStore$1.getState().actions.getProductDataById(this._skuID).lookDetails.default.id:this.#t}get price(){return this._price}set price(s){this._price=s}updatePricing(){this._price=this.#s()}#s(){let a=productDataStore$1.getState().actions.getProductDataById(this._skuID).lookDetails[this.#t]?.price;return a||(a=0),a}set currentVariant(s){this.#t=s,this._price=this.#s()}get overrideVariant(){return this._overrideVariant}set overrideVariant(s){this._overrideVariant=s,this.#t=this._overrideVariant,this._price=this.#s()}get guid(){return this._guid}get skuID(){return this._skuID}set skuID(s){this._skuID=s}get plugs(){return this._plugs}get ref(){return this._ref}set ref(s){this._ref=s}get modelData(){return this._modelData}set modelData(s){this._modelData=s;let a=new CustomEvent(this._guid+":modelLoaded",{bubbles:!0,cancelable:!1,composed:!0});const b=attachmentStore$1.getState().attachmentSystem;b.globalGeometryVariants&&Object.keys(b.globalGeometryVariants).map(_e=>{this.updateGeometryVariant(_e,b.globalGeometryVariants[_e])}),a.data={},CORE_API.coreWCRef?CORE_API.coreWCRef.dispatchEvent(a):LOGGER.warn({title:"core web component not found!"})}get isEndNode(){return this._isEndNode}set isEndNode(s){this._isEndNode=s}get categoryID(){return this._categoryID}get transform(){return this._transform}set transform(s){this._transform=s}setModelVisibility(s){s?this._ref?.scale.set(1,1,1):this._ref.scale.set(0,0,0)}checkIfEndNode(){let s=!0;for(let a=0;a<this._plugs.length;a++)this._plugs[a].isReceiverPlug&&(s=!1);this.isEndNode=s}whichNodesAreAttachedToUs(){const s=[];for(let a=0;a<this._plugs.length;a++)this._plugs[a].isReceiverPlug&&s.push(this._plugs[a].attachedPlug.node);return s}whichPlugsAreAttachedToUs(){const s=[];for(let a=0;a<this._plugs.length;a++)this._plugs[a].isReceiverPlug&&s.push({receiverPlug:this._plugs[a],incomingPlug:this._plugs[a].attachedPlug});return s}whichNodeAreWeAttachedTo(){let s=null;for(const a of this._plugs)a?.attachedPlug?.isReceiverPlug&&(s=a.attachedPlug.node);return s}whichNodesIsThisComboPlugAttachedTo(){if(!this.isTypeCombo)return[];let s=[];for(const a of this._plugs)a?.attachedPlug?.isReceiverPlug&&s.push(a.attachedPlug.node);return s}isReplaceableWithSkuId(s){const b=productDataStore$1.getState().productData[s]?.plugs;let _e=0;if(!b)return!1;for(let bt=0;bt<this._plugs.length;bt++)for(let rn=0;rn<b.length;rn++)this._plugs[bt].name==b[rn].name&&_e++;return _e==this._plugs.length}whichPlugAreWeAttachedUsing(){for(let s=0;s<this._plugs.length;s++){const a=this._plugs[s];let b=a.attachedPlug;if(!b&&a.attachedPlugGUID&&(b=attachmentStore$1.getState().attachmentSystem.currentStructure.getPlugByGUID(a.attachedPlugGUID)),!a.isOpen&&b.isReceiverPlug)return a}}whichPlugAreWeAttachedTo(){for(let s=0;s<this._plugs.length;s++)if(!this._plugs[s].isOpen&&this._plugs[s].attachedPlug.isReceiverPlug)return this._plugs[s].attachedPlug}getPlugWhichCanConnectToType(s){for(const a of this._plugs)if(a.connectsToPlugTypes.includes(s))return a;return null}getOpenPlugsWeCanAttachFrom(){let s=[];if(this.whichNodeAreWeAttachedTo())return s;for(let a=0;a<this._plugs.length;a++)this.plugs[a].isOpen&&this.plugs[a].connectsToPlugTypes.length>0&&s.push(this._plugs[a]);return s}getOpenPlugsFromNode(){let s=[];for(let a=0;a<this._plugs.length;a++)this._plugs[a].isOpen&&this._plugs[a].acceptedPlugTypes.length>0&&s.push(this._plugs[a]);return s}generatePlugsForNode(s){this._plugs=[];let a=productDataStore$1.getState().productData[s]?.plugs;if(a)for(let b=0;b<a.length;b++)if(a[b].type==="unvisualizedPlug"){const _e=a[b]?.unvisualizedCount>=0?a[b].unvisualizedCount:1e3;for(let bt=0;bt<_e;bt++){const rn=new Plug({...a[b],name:`${a[b].name}_${bt}`},this);this._plugs.push(rn)}}else{const _e=new Plug(a[b],this);this._plugs.push(_e)}}generatePlugsWithData(s,a){const b=productDataStore$1.getState().productData[s]?.plugs;b&&b.forEach(_e=>{if(_e.type==="unvisualizedPlug"){const bt=_e.unvisualizedCount&&_e.unvisualizedCount>=0?_e.unvisualizedCount:1e3;for(let rn=0;rn<bt;rn++){const sn=new Plug({..._e,name:`${_e.name}_${rn}`},this,a[`${_e.name}_${rn}`]);this._plugs.push(sn)}}else{const bt=new Plug(_e,this,a[_e.name]);this._plugs.push(bt)}})}detachNodeFromReceiver(){for(let s=0;s<this.plugs.length;s++)if(!this.plugs[s].isOpen&&this.plugs[s].attachedPlug.isReceiverPlug){const a={incomingPlug:this.plugs[s],receiverPlug:this.plugs[s].attachedPlug};return this.plugs[s].attachedPlug.openPlug(),this.plugs[s].openPlug(),a}}detachNodeCompletely(){for(let s=0;s<this._plugs.length;s++)this._plugs[s].isOpen||(this._plugs[s].attachedPlug.openPlug(),this._plugs[s].openPlug())}getPlugByName(s){for(let a=0;a<this._plugs.length;a++)if(this._plugs[a].name==s)return this._plugs[a];return null}getPlugByGUID(s){for(let a=0;a<this._plugs.length;a++)if(this._plugs[a].guid==s)return this._plugs[a];return null}async removeNode(){const s=[];for(const a of this._plugs)if(!a.isOpen){if(a.type==="comboPlug"&&a.connectsToPlugTypes.length>0){a.attachedPlug.openPlug();continue}a.attachedPlug.isReceiverPlug?a.attachedPlug.openPlug():s.push(a.attachedPlug.node.guid)}if(s.length>0)for(const a of s)itemStore.getState().actions.addToRemoveItems(a)}};const EPIGRAPH_CONFIGURATOR_CATEGORY="Epigraph - Configurator",CONFIGURATOR_LOADING={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorLoading",label:"",interaction:{nonInteraction:!0}},CONFIGURATOR_READY={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorReady",label:"",interaction:{nonInteraction:!0}},CONFIGURATOR_FAILED={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorFailed",label:"",interaction:{nonInteraction:!0}},CONFIGURATOR_REVIEW_CART_SHOWN={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorReviewCartShown",label:"",interaction:{nonInteraction:!1}},CONFIGURATOR_REVIEW_CART_HIDE={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorReviewCartHide",label:"",interaction:{nonInteraction:!1}},CONFIGURATOR_CHECKOUT={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorCheckout",label:"",interaction:{nonInteraction:!1}},CONFIGURATOR_CHECKOUT_ITEM={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorCheckoutItemDetails",label:"",interaction:{nonInteraction:!1}},CONFIGURATOR_GLOBAL_GEOMETRY_VARIANT_SWITCHED={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorGlobalGeometryVariantSwitched",label:"",interaction:{nonInteraction:!1}},CONFIGURATOR_GLOBAL_VARIANT_SWITCHED={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorGlobalVariantSwitched",label:"",interaction:{nonInteraction:!1}},CONFIGURATOR_LOCAL_VARIANT_SWITCHED={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorLocalVariantSwitched",label:"",interaction:{nonInteraction:!1}},CONFIGURATOR_LOAD_FROM_PRECONFIG={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorLoadFromPreConfiguration",label:"",interaction:{nonInteraction:!0}},CONFIGURATOR_PRECONFIGURATION_ITEM_ADDED={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"preconfigurationItemAdded",label:"",interaction:{nonInteraction:!0}},CONFIGURATOR_SCENE_RESTARTED={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorSceneRestarted",label:"",interaction:{nonInteraction:!1}},CONFIGURATOR_AR_REQUESTED={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorArRequested",label:"",interaction:{nonInteraction:!1}},CONFIGURATOR_ITEM_REMOVED={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorItemRemoved",label:"",interaction:{nonInteraction:!1}},CONFIGURATOR_ITEM_ADDED={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorItemAdded",label:"",interaction:{nonInteraction:!1}},CONFIGURATOR_INSTRUCTIONS_BTN_CLICKED={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorInstructionsBtnClicked",label:"",interaction:{nonInteraction:!1}},CONFIGURATOR_INSTRUCTIONS_COMPLETION_RATE={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorInstructionsStageCompletionRate",label:"",interaction:{nonInteraction:!1}},CONFIGURATOR_INSTRUCTIONS_SHOWN={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorInstructionsShow",label:"",interaction:{nonInteraction:!1}},CONFIGURATOR_DIMENSION_SHOWN={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorDimensionsBtnShow",label:"",interaction:{nonInteraction:!1}},CONFIGURATOR_DIMENSION_HIDE={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorDimensionsBtnHide",label:"",interaction:{nonInteraction:!1}},CONFIGURATOR_HOTSPOT_ENTER={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorHotspotEnter",label:"",interaction:{nonInteraction:!1}},CONFIGURATOR_HOTSPOT_EXIT={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorHotspotExit",label:"",interaction:{nonInteraction:!1}},CONFIGURATOR_SCENE_SHARED={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorSceneShared",label:"",interaction:{nonInteraction:!1}};class Structure{#t=!1;constructor(s=null,a,b){if(this._nodes=[],this._rootNode=null,LOGGER.info({title:"preloadNodes",details:s}),this.setupHookOnSceneItemsUpdated(),s){LOGGER.info({title:"PRELOAD Length-----------------:"+s.length});for(var _e=0;_e<s.length;_e++){LOGGER.info({title:"FOUND PRELOAD-----------------"});const bt=s[_e].skuID;if(bt.toLowerCase()=="root"){const sn=itemStore.getState().itemsSpawned;Object.keys(sn).length>0&&(s[_e].guid=Object.keys(sn)[0])}let rn=new Node$1(bt,s[_e],a,b);bt.toLowerCase()=="root"&&(this._rootNode=rn),this._nodes.push(rn)}}else{const bt=new Node$1("Root",null,a,b);this._rootNode=bt,this._nodes.push(bt),itemStore.getState().actions.addItemWithTransform({position:new Vector3(0,0,0),rotation:new Quaternion().identity()},"Root",this._rootNode.guid,!1)}this._boundingBoxLeeway=coreSceneStore.getState().sceneSettings.boundingBoxLeeway}async setupHookOnSceneItemsUpdated(){CORE_API.coreWCRef.addEventListener(CORE_API.EVENTS.SCENE.FittingSkuIds_Updated,()=>{DynamicHooks.hookOnSceneItemsUpdated(this._nodes,CORE_API)})}get nodes(){return this._nodes}get rootNode(){return this._rootNode}updatePricing(){for(let s=0;s<this._nodes.length;s++)this._nodes[s].updatePricing()}getCurrentItemsInReplaceableCategory(){let s={};for(const a of this._nodes)a.replace&&(s[a.categoryID]=a.skuID);return s}recalculateStructureFromNode(s){for(let a=0;a<s.plugs.length;a++)if(!s.plugs[a].isOpen&&s.plugs[a].isReceiverPlug){const b=s.plugs[a].attachedPlug.node,_e={receiverPlug:s.plugs[a],incomingPlug:s.plugs[a].attachedPlug};if(_e){const bt=this.findItemTransform(_e);bt&&(b.ref.position.set(bt.position.x,bt.position.y,bt.position.z),bt.rotation.isQuaternion===!0?b.ref.setRotationFromQuaternion(bt.rotation):bt.rotation.isEuler===!0&&b.ref.setRotationFromEuler(bt.rotation),b.transform={position:bt.position,rotation:bt.rotation})}this.recalculateStructureFromNode(b)}}rotateNode(s){const a=this.getNodeByGUID(s);let b=null,_e=null;for(let sn=0;sn<a.plugs.length;sn++)if(!_e&&!a.plugs[sn].isOpen&&a.plugs[sn].attachedPlug.isReceiverPlug){const yn=a.plugs[sn].attachedPlug.acceptedPlugTypes;_e=a.plugs[sn].attachedPlug;let Pn=[];for(let zn=sn+1;zn<a.plugs.length;zn++)Pn.push(a.plugs[zn]);for(let zn=0;zn<sn;zn++)Pn.push(a.plugs[zn]);for(let zn=0;zn<Pn.length;zn++)for(let lr=0;lr<Pn[zn].connectsToPlugTypes.length;lr++)yn.includes(Pn[zn].connectsToPlugTypes[lr])&&(b=Pn[zn])}if(!b)return;a.detachNodeFromReceiver();const{position:bt,rotation:rn}=this.findItemTransform({receiverPlug:_e,incomingPlug:b});a.ref.position.set(bt.x,bt.y,bt.z),rn.isQuaternion===!0?a.ref.setRotationFromQuaternion(rn):rn.isEuler===!0&&a.ref.setRotationFromEuler(rn),a.transform={position:a.ref.position,rotation:rn},this.connectPlugs({receiverPlug:_e,incomingPlug:b}),this.recalculateStructureFromNode(a)}async load(s){this.resolvePlugConnections(s),await this.respawnItems()}materialOverrideExists(){let s=!1;return this.nodes.map(a=>{if(a.overrideVariant)return s=!0,!0}),s}findGhostTransformForReplacement(s,a){let b=[],_e=[],bt=[];for(const rn of a){if(rn.skuID==s)continue;const sn=attachmentStore$1.getState().attachmentSystem,yn=rn.whichPlugAreWeAttachedTo(),Pn=rn.whichPlugAreWeAttachedUsing(),lr=new Node$1(s,null,sn.globalVariants,sn.globalGeometryVariants).getPlugByName(Pn.name);if(!lr)continue;const ar={incomingPlug:lr,receiverPlug:yn},{position:cr,rotation:hr}=this.findItemTransform(ar);cr&&hr&&(_e.push({position:cr,rotation:hr,incomingPlugName:ar.incomingPlug.name,receiverPlugName:ar.receiverPlug.name,incomingPlugGUID:ar.incomingPlug.guid,receiverPlugGUID:ar.receiverPlug.guid}),bt.push(ar),b.push(rn))}return{transforms:_e,connectablePlugs:bt,newNodes:b}}async findGhostTransforms(s,a){const b=this.getOpenPlugs(),_e=coreSceneStore.getState().sceneSettings.comboPlugDistanceThreshold;if(b.length<=0)return{transforms:[]};const bt=attachmentStore$1.getState().attachmentSystem,rn=productDataStore$1.getState().productData,sn=new Node$1(s,null,bt.globalVariants,bt.globalGeometryVariants),yn=this.getConnectablePlugs(sn,b);let Pn=[];if(yn.length<=0)return{transforms:[]};let zn=[],lr=[];const ar=assetStore.getState().assets.items[s].proxy.data.scene;if(!ar)return!1;let cr=ar.clone();for(let Ur=0;Ur<yn.length;Ur++){let Dr=a,{incomingPlug:zr,receiverPlug:rs}=yn[Ur],as=this.findItemTransform(yn[Ur]);if(!as)continue;let{position:os,rotation:ls}=as;if(!os||!ls)continue;cr.position.set(os.x,os.y,os.z),ls.isQuaternion===!0?cr.setRotationFromQuaternion(ls):ls.isEuler===!0&&cr.setRotationFromEuler(ls);let zs=[],ho=[];if(zr.type=="comboPlug"){if(zr.connectsToPlugTypes.length<=0)continue;const yl=zr.connectsToPlugTypes[0];let Zl=!1;if(lr.map(by=>{Zl===!0||by.length<=0||by.map(Al=>{Zl===!0||Al.incomingPlug.guid!==zr.guid||Al.incomingPlug.connectsToPlugTypes.includes(yl)&&(Zl=!0)})}),Zl===!0)continue;const Ty=zr.node.plugs;let yy=!0;if(Ty.map(by=>{if(by.type!=="comboPlug"||by.guid===zr.guid||!by.connectsToPlugTypes.includes(yl))return;let Al=!1;if(b.map(_f=>{if(rs.guid===_f.guid||!_f.acceptedPlugTypes.includes(yl)||!_f.node.ref)return;let gy=new Vector3(0,0,0);const El=_f.node.ref.getObjectByName(""+_f.name);if(!El)return;El.getWorldPosition(gy);let My=new Vector3(0,0,0);const By=cr.getObjectByName(""+by.name);if(!By)return;By.getWorldPosition(My);const lA=gy.distanceTo(My);Math.abs(lA)<_e&&(zs.push(rs.node.guid),zs.push(_f.node.guid),ho.push({receiverPlug:_f,incomingPlug:by}),Al=!0)}),Al==!1){yy=!1;return}}),!yy)continue}let ga=Dr;Array.isArray(Dr)===!0&&(ga=!1),zs.length>0&&(ga=!1,Array.isArray(Dr)===!0?zs.map(yl=>{Dr.push(yl)}):Dr=zs),rn[s].hasOwnProperty("ignoreSpawningCollision")&&(ga=rn[s].ignoreSpawningCollision),yn[Ur].receiverPlug.type=="unvisualizedPlug"&&(ga=!0),(ga?!1:this.isColliding(sn.skuID,as,yn[Ur].receiverPlug,Dr))||(zn.push({position:os,rotation:ls,incomingPlugName:yn[Ur].incomingPlug.name,receiverPlugName:yn[Ur].receiverPlug.name,incomingPlugGUID:yn[Ur].incomingPlug.guid,receiverPlugGUID:yn[Ur].receiverPlug.guid}),Pn.push(yn[Ur]),lr.push(ho))}let hr=[];for(let Ur=0;Ur<zn.length;Ur++)hr.push(sn);let es={transforms:zn,newNodes:hr,connectablePlugs:Pn,comboPlugs:lr};return es=await DynamicHooks.hookOnNewItemGhostsCollected(es,CORE_API),es}resolvePlugConnections(s){for(let a=0;a<s.length;a++)Object.keys(s[a].plugs).map(b=>{let _e=s[a].plugs[b].guid,bt=this.getPlugInNodesByGUID(_e);if(!bt||bt.attachedPlug)return;let rn=s[a].plugs[b].attachedPlugGUID,sn=this.getPlugInNodesByGUID(rn);sn&&(sn.attachedPlug||(bt.attachPlug(sn,s[a].plugs[b].isReceiverPlug),sn.attachPlug(bt,!s[a].plugs[b].isReceiverPlug)))});LOGGER.info({title:"RESOLVED PLUG CONNECTION: ",details:this})}async respawnItems(){let s=[this.rootNode];for(let bt=0;bt<s.length;bt++){let sn=s[bt].whichPlugsAreAttachedToUs();for(let yn=0;yn<sn.length;yn++){if(sn[yn].incomingPlug.type=="comboPlug"&&sn[yn].incomingPlug.connectsToPlugTypes.length>0&&!sn[yn].incomingPlug.comboPlugConnector)continue;let Pn=this.findItemTransformForPreload(sn[yn],sn[yn].receiverPlug.node.transform);Pn?await itemStore.getState().actions.addItemWithTransform(Pn,sn[yn].incomingPlug.node.skuID,sn[yn].incomingPlug.node.guid):LOGGER.warn({title:"Problem finding plug transform! "+sn[yn].name}),sn[yn].incomingPlug.node.transform=Pn,s.push(sn[yn].incomingPlug.node)}}const a=await CORE_API.getCartItemsAsync();CORE_API.fireEvent(CORE_API.EVENTS.SCENE.SavedConfiguration_Loaded,{...a}),coreSceneStore.getState().actions.triggerAutoFocus(),hotspotStore$1.getState().actions.checkHotspotHealth();const b=coreSceneStore.getState().preconfigurationLoaded==!1&&coreSceneStore.getState().sceneHasDefaultConfigurationID==!1,_e=coreSceneStore.getState().configurationLoaded==!1&&coreSceneStore.getState().preconfigurationLoaded==!0&&coreSceneStore.getState().configurationLoadedOnRestart==!0;if(b||_e){let bt=Object.assign({},CONFIGURATOR_LOAD_FROM_PRECONFIG);bt.parameters={project_id:`${CORE_API.projectId}`,...a},CORE_API.sendAnalyticsEvent(bt)}}getPlugInNodesByGUID(s){for(let a=0;a<this._nodes.length;a++){let b=this._nodes[a].getPlugByGUID(s);if(b)return b}return null}export(){let s=[];for(let a=0;a<this._nodes.length;a++){let b=this._nodes[a].export();b&&s.push(b)}return s}async clear(){return new Promise(async(s,a)=>{!this._rootNode&&this._rootNode.isEndNode&&s(!0);let b=null;const _e=this._rootNode.whichNodesAreAttachedToUs();_e.length>0&&(b=_e[0]),this.#t=!0,CORE_API.coreWCRef.addEventListener(CORE_API.EVENTS.SCENE.Scene_Cleared,bt=>s(bt.data),{once:!0}),b?CORE_API.removeItemByGUID(b.guid,!0):(await wait(500),s(!0))})}getNodeByGUID(s){for(let a=0;a<this._nodes.length;a++)if(this._nodes[a].guid==s)return this._nodes[a];return null}getPlugByGUID(s){for(const a of this._nodes){const b=a.getPlugByGUID(s);if(b)return b}return null}findItemTransformForPreload(s,a){let{receiverPlug:b,incomingPlug:_e}=s,bt=b,rn=_e;if(bt.node.skuID=="Root")return this.findItemTransformRoot(s);let sn=null,yn=null,Pn=new Object3D,zn=assetStore.getState().assets.items[bt.node.skuID].proxy.data.scene.clone();Pn.add(zn);let{position:lr,rotation:ar}=a;if(zn.position.set(lr.x,lr.y,lr.z),ar.isQuaternion===!0?zn.setRotationFromQuaternion(ar):ar.isEuler===!0&&zn.setRotationFromEuler(ar),yn=zn,!yn||(sn=yn.getObjectByName(bt.name),!sn))return;let cr=new Vector3(0,0,0);sn.getWorldPosition(cr);let hr=new Quaternion().identity();sn.getWorldQuaternion(hr);let es=new Object3D;sn.add(es);let Ur=assetStore.getState().assets.items[rn.node.skuID].proxy.data.scene.clone();Ur.position.set(cr.x,cr.y,cr.z),Ur.applyQuaternion(hr);let Dr=new Vector3;Dr.copy(zn.up).applyQuaternion(yn.quaternion);let zr=new Vector3;zr.copy(Ur.up).applyQuaternion(hr),zr.negate();let rs=new Quaternion().setFromUnitVectors(Dr,zr);Dr.round(),zr.round();let as=Dr.dot(zr);as!==1&&as!==-1&&Ur.applyQuaternion(rs);let os=Ur.getObjectByName(rn.name),ls=new Quaternion().identity();os.getWorldQuaternion(ls);let zs=new Vector3(0,1,0);zs.applyQuaternion(ls);let ho=new Vector3(0,1,0);ho.applyQuaternion(hr),ho.negate();let ga=new Quaternion().setFromUnitVectors(zs,ho);if(zs.round(),ho.round(),zs.dot(ho)!==-1)Ur.applyQuaternion(ga);else{let Ty=new Vector3(0,1,0),yy=ho.dot(Ty);if(yy!==1&&yy!==-1)Ur.rotateOnAxis(Ty,Math.PI);else{let by=new Vector3(0,0,1),Al=ho.dot(by);if(Al!==1&&Al!==-1)Ur.rotateOnAxis(by,Math.PI);else{let _f=new Vector3(1,0,0),gy=ho.dot(_f);gy!==1&&gy!==-1&&Ur.rotateOnAxis(_f,Math.PI)}}}let go=Ur.getObjectByName(rn.name),yl=new Vector3(go.position.x,go.position.y,go.position.z);Ur.translateX(-yl.x),Ur.translateY(-yl.y),Ur.translateZ(-yl.z);let Zl=new Vector3(0,0,0);Ur.getWorldPosition(Zl);let _d=new Quaternion().identity();return Ur.getWorldQuaternion(_d),Ur=null,{position:Zl,rotation:_d}}findItemTransformRoot(s){let{receiverPlug:a,incomingPlug:b}=s,_e=b;const bt=new Object3D;let rn=bt,sn=new Vector3(0,0,0);rn.getWorldPosition(sn);let yn=new Quaternion().identity(),Pn=new Object3D;Pn.position.set(0,0,0),bt.add(Pn);let zn=assetStore.getState().assets.items[_e.node.skuID].proxy.data.scene.clone();Pn.attach(zn),zn.translateX(sn.x),zn.translateY(sn.y),zn.translateZ(sn.z);let lr=zn.getObjectByName(_e.name),ar=new Quaternion().identity();lr&&lr.getWorldQuaternion(ar);const cr=new Vector3(0,1,0);cr.applyQuaternion(ar);const hr=new Vector3(0,1,0);hr.applyQuaternion(yn);const es=hr.angleTo(cr),Ur=new Vector3(0,0,0);Ur.crossVectors(hr,cr),Ur.round(),Ur.length()!==0&&zn.rotateOnAxis(Ur,es);var Dr=new Matrix4().extractRotation(zn.matrixWorld);let zr=new Vector3(0,0,0);lr&&zr.set(lr.position.x,lr.position.y,lr.position.z),zr.applyMatrix4(Dr),zn.translateX(-zr.x),zn.translateY(-zr.y),zn.translateZ(-zr.z);let rs=new Vector3(0,0,0);zn.getWorldPosition(rs);let as=new Quaternion().identity();return zn.getWorldQuaternion(as),Pn.remove(zn),Pn=null,zn=null,{position:rs,rotation:as}}findItemTransform(s){let{receiverPlug:a,incomingPlug:b}=s,_e=a,bt=b;if(_e.node.isRoot)return this.findItemTransformRoot(s);const rn=_e.node.transform;if(!rn)return;const sn=assetStore.getState().assets.items[_e.node.skuID].proxy.data.scene.clone(),yn=new Object3D;yn.position.set(rn.position.x,rn.position.y,rn.position.z),rn.rotation.isQuaternion===!0?yn.setRotationFromQuaternion(rn.rotation):rn.rotation.isEuler===!0&&yn.setRotationFromEuler(rn.rotation),yn.add(sn);let Pn=yn.getObjectByName(""+_e.name);if(!Pn){LOGGER.error({title:"Plug: "+_e.name+" doesn't exist in "+_e.node.skuID});return}let zn=new Vector3(0,1,0);Pn.getWorldPosition(zn);let lr=new Quaternion().identity();Pn.getWorldQuaternion(lr);let ar=assetStore.getState().assets.items[bt.node.skuID].proxy.data.scene.clone();ar.position.set(zn.x,zn.y,zn.z),ar.applyQuaternion(lr);let cr=new Vector3;cr.copy(sn.up).applyQuaternion(yn.quaternion);let hr=new Vector3;hr.copy(ar.up).applyQuaternion(lr),hr.negate();let es=new Quaternion().setFromUnitVectors(cr,hr);cr.round(),hr.round();let Ur=cr.dot(hr);Ur!==1&&Ur!==-1&&ar.applyQuaternion(es);let Dr=ar.getObjectByName(bt.name);if(!Dr){LOGGER.error({title:"Plug: "+bt.name+" doesn't exist in "+bt.node.skuID});return}let zr=new Quaternion().identity();Dr.getWorldQuaternion(zr);let rs=new Vector3(0,1,0);rs.applyQuaternion(zr);let as=new Vector3(0,1,0);as.applyQuaternion(lr),as.negate();let os=new Quaternion().setFromUnitVectors(rs,as);if(rs.round(),as.round(),rs.dot(as)!==-1)ar.applyQuaternion(os);else{let go=new Vector3(0,1,0),yl=as.dot(go);if(yl!==1&&yl!==-1)ar.rotateOnAxis(go,Math.PI);else{let Zl=new Vector3(0,0,1),_d=as.dot(Zl);if(_d!==1&&_d!==-1)ar.rotateOnAxis(Zl,Math.PI);else{let Ty=new Vector3(1,0,0),yy=as.dot(Ty);yy!==1&&yy!==-1&&ar.rotateOnAxis(Ty,Math.PI)}}}let zs=ar.getObjectByName(bt.name),ho=new Vector3(zs.position.x,zs.position.y,zs.position.z);ar.translateX(-ho.x),ar.translateY(-ho.y),ar.translateZ(-ho.z);let ga=new Vector3(0,0,0);ar.getWorldPosition(ga);let mo=new Quaternion().identity();return ar.getWorldQuaternion(mo),yn.remove(sn),ar=null,{position:ga,rotation:mo}}getSpawningRequirementForSkuID(s){let a=[];const b=productDataStore$1.getState().productData,_e=b[s];if(!_e)return a;const bt=[];return _e.plugs.map(rn=>{rn.connectsToPlugTypes.map(sn=>{bt.push(sn)})}),Object.keys(b).map(rn=>{for(let sn=0;sn<b[rn].plugs.length;sn++){const yn=b[rn].plugs[sn].acceptedPlugTypes;for(let Pn=0;Pn<yn.length;Pn++)bt.map(zn=>{zn==yn[Pn]&&!a.includes(rn)&&a.push(rn)})}}),a}getConnectablePlugs(s,a){let b=[],_e=s.getOpenPlugsWeCanAttachFrom();for(let bt=0;bt<_e.length;bt++)for(let rn=0;rn<a.length;rn++){let sn=!1;for(let Pn=0;Pn<b.length;Pn++)if(b[Pn].receiverPlug.guid==a[rn].guid&&b[Pn].incomingPlug.type!="comboPlug"){sn=!0;break}if(sn)continue;_e[bt].canAttachToPlug(a[rn])&&b.push({incomingPlug:_e[bt],receiverPlug:a[rn]})}return b}getOpenPlugs(){let s=[];return this._nodes.map(a=>{if(a.dragging===!0)return;let b=a.getOpenPlugsFromNode();s=s.concat(b)}),s}checkCollisionforGUID(s,a=[]){if(coreSceneStore.getState().sceneSettings.disableCollider)return!1;const b=itemStore.getState().itemsSpawned,_e=productDataStore$1.getState().productData;if(!b[s])return!1;const rn=this.getNodeByGUID(s);if(!rn||!rn.ref||_e[rn.skuID].disableCollider)return!1;let sn=new Vector3;rn.ref.getWorldPosition(sn);let yn=new Quaternion;rn.ref.getWorldQuaternion(yn);const Pn={position:sn,rotation:yn},zn=rn.whichPlugAreWeAttachedTo();return zn==null?!1:this.isColliding(rn.skuID,Pn,zn,a)}isColliding(s,{position:a,rotation:b},_e,bt=[]){const rn=assetStore.getState().assets.items[s].proxy.data.scene,sn=productDataStore$1.getState().productData;if(!rn)return!1;let yn=rn.clone();yn.position.set(a.x,a.y,a.z),b.isQuaternion===!0?yn.setRotationFromQuaternion(b):b.isEuler===!0&&yn.setRotationFromEuler(b);let Pn=new Box3().setFromObject(yn);var zn=new Vector3;Pn.getCenter(zn);let lr=new Object3D;lr.position.set(zn.x,zn.y,zn.z),lr.attach(yn),lr.scale.set(this._boundingBoxLeeway,this._boundingBoxLeeway,this._boundingBoxLeeway),Pn=new Box3().setFromObject(lr);const ar=[];if(this._nodes.forEach(hr=>{if(_e.node.guid==hr.guid||Array.isArray(bt)===!0&&bt.includes(hr.guid)||!hr.ref||(sn[hr.skuID].hasOwnProperty("disableCollider")?sn[hr.skuID].disableCollider:coreSceneStore.getState().sceneSettings.disableCollider))return;const es=hr.ref.getObjectByName("GRP_ProxyMesh");es&&ar.push(es)}),ar.length<=0)return!1;let cr=!1;return ar.forEach(hr=>{if(cr)return;let es=new Box3().setFromObject(hr);if(Pn.intersectsBox(es)){cr=!0;return}}),lr.clear(),yn=null,lr=null,Pn=null,cr}boxOverlapPercent(s,a){if(s.containsBox(a)||a.containsBox(s))return 100;if(!(s.min.x<a.max.x||a.min.x<s.max.x))return 0;let b=new Vector3(0,0,0);s.getSize(b),b.x*b.y*b.z;let _e=new Vector3(0,0,0);a.getSize(_e),_e.x*_e.y*_e.z}checkInsideOutCollision(s,a,b){let _e=a.position.clone(),bt=new Float32Array(b.attributes.position.array),rn=bt.length/3;for(let sn=0;sn<rn;sn++){let yn=new Vector3(bt[sn*3],bt[sn*3+1],bt[sn*3+2]),Pn=yn.add(a.position);Pn=yn.applyQuaternion(a.quaternion);let zn=Pn.sub(a.position);const ar=new Raycaster(_e,zn.clone().normalize()).intersectObjects(s),cr=ar.length>0,hr=ar[0].distance<zn.length();if(cr&&hr)return!0}return!1}addNode(s){this._nodes.push(s)}getFirstNodeByCategoryID(s){for(var a=0;a<this._nodes.length;a++)if(this._nodes[a]._categoryID==s)return this._nodes[a];return null}getNodesBySKUID(s){let a=[];for(var b=0;b<this._nodes.length;b++)this._nodes[b].skuID==s&&a.push(this._nodes[b]);return a}getNodesByCategoryID(s){let a=[];for(var b=0;b<this._nodes.length;b++)this._nodes[b]._categoryID==s&&a.push(this._nodes[b]);return a}async connectPlugs({incomingPlug:s,receiverPlug:a}){s.attachPlug(a,!1),a.attachPlug(s,!0),await attachmentStore$1.getState().actions.toggleStructureUpdated()}removeNodeByGUID(s){for(let a=0;a<this._nodes.length;a++)if(this._nodes[a].guid==s){this._nodes[a].removeNode(),this._nodes.splice(a,1);break}this._nodes.length==1&&this.#t&&CORE_API.fireEvent(CORE_API.EVENTS.SCENE.Scene_Cleared,!0),attachmentStore$1.getState().actions.updateFittingSkuIds(),attachmentStore$1.getState().actions.toggleStructureUpdated()}async removeNodeFromStructure(s){for(let a=0;a<this._nodes.length;a++)if(this._nodes[a].guid==s.guid){this._nodes.splice(a,1);break}await attachmentStore$1.getState().actions.toggleStructureUpdated()}}class AttachmentSystem{constructor(){this._globalVariants={},this._globalGeometryVariants={},productDataStore$1.getState().categoryData.geometryVariants.map(s=>{this._globalGeometryVariants[s.id]=s.defaultVariant}),productDataStore$1.getState().categoryData.color.map(s=>{this._globalVariants[s.id]=s.defaultLook}),this._currentStructure=new Structure(null,this._globalVariants,this._globalGeometryVariants);for(const[s,a]of Object.entries(this._globalVariants))this.switchGlobalVariant(s,a);for(const[s,a]of Object.entries(this._globalGeometryVariants))this.switchGlobalGeometryVariant(s,a)}get globalGeometryVariants(){return this._globalGeometryVariants}get globalVariants(){return this._globalVariants}get currentStructure(){return this._currentStructure}getClientProductId(s,a){let b;return b=productDataStore$1.getState()?.productData[s]?.lookDetails[a],b?.clientProductId?b?.clientProductId:""}getCartItems(){let s=[];const a=inventoryStore.getState().inventoryData;this.currentStructure.nodes.map(bt=>{if(bt.skuID=="Root"||bt.ignoreInCart===!0)return;let rn=!1;if(s.map(Pn=>{const zn=a[Pn.skuID];if(Pn.skuID==bt.skuID&&Pn.currentVariant==bt.currentVariant){Pn.count++,Pn.countAvailable=zn[bt.currentVariant].countAvailable,Pn.countUnavailable=zn[bt.currentVariant].countUnavailable,Pn.price=bt.price*Pn.count,rn=!0;return}}),rn===!0)return;let sn={};sn.skuID=bt.skuID,sn.currentVariant=bt.currentVariant,sn.clientProductId=this.getClientProductId(sn.skuID,sn.currentVariant),sn.count=1;const yn=a[sn.skuID];sn.price=bt.price,sn.countAvailable=yn[bt.currentVariant].countAvailable,sn.countUnavailable=yn[bt.currentVariant].countUnavailable,s.push(sn)});let b=0;for(const bt of s)b=b+bt.price;return{cartItems:s,details:{total:b.toFixed(2)}}}async getCartItemsAsync(){let s=[];const a=inventoryStore.getState().inventoryData;this.currentStructure.nodes.map(bt=>{if(bt.skuID=="Root"||bt.ignoreInCart===!0)return;let rn=!1;if(s.map(Pn=>{const zn=a[Pn.skuID];if(Pn.skuID==bt.skuID&&Pn.currentVariant==bt.currentVariant){Pn.count++,Pn.countAvailable=zn[bt.currentVariant].countAvailable,Pn.countUnavailable=zn[bt.currentVariant].countUnavailable,Pn.price=bt.price*Pn.count,rn=!0;return}}),rn===!0)return;let sn={};sn.skuID=bt.skuID,sn.currentVariant=bt.currentVariant,sn.clientProductId=this.getClientProductId(sn.skuID,sn.currentVariant),sn.count=1;const yn=a[sn.skuID];sn.price=bt.price,sn.countAvailable=yn[bt.currentVariant].countAvailable,sn.countUnavailable=yn[bt.currentVariant].countUnavailable,s.push(sn)}),s=await DynamicHooks.hookOnCartItemsCollected(s,CORE_API);let b=0;for(const bt of s)b=b+bt.price;return{cartItems:s,details:{total:b.toFixed(2)}}}async getFittingSKUIDs(){const s=productDataStore$1.getState().productData;if(!this.currentStructure)return;const a=coreSceneStore.getState().sceneSettings.draggableUI;let b=this.currentStructure.nodes,_e=[],bt=[],rn=[],sn=[];if(b.map(Pn=>{sn.push(Pn.skuID),Pn.plugs.map(zn=>{if(!zn.isOpen){zn.attachedPlug.node.replace&&zn.acceptedPlugTypes.map(lr=>{bt.includes(lr)||bt.push(lr)});return}zn.acceptedPlugTypes.map(lr=>{_e.includes(lr)||_e.push(lr)})})}),_e.length<=0&&bt.length<=0)return[];Object.keys(s).map(Pn=>{!s[Pn].plugs||rn.includes(Pn)||s[Pn].plugs.map(zn=>{rn.includes(Pn)||zn.connectsToPlugTypes.map(lr=>{if(!rn.includes(Pn)){if(bt.includes(lr)){if(!sn.includes(Pn)||a){let ar=this.currentStructure.getNodesByCategoryID(s[Pn].categoryID);for(const cr of ar){if(rn.includes(Pn)||cr.skuID==Pn)continue;let hr=!0,es=!1;cr?.plugs.map(Ur=>{!Ur.isOpen&&Ur.isReceiverPlug&&(es=!0,hr=!1,s[Pn].plugs.map(Dr=>{Dr.name==Ur.name&&Ur.attachedPlug.connectsToPlugTypes.map(zr=>{Dr.acceptedPlugTypes.includes(zr)&&(hr=!0)})}))}),(hr||!es)&&rn.push(Pn)}}}else if(_e.includes(lr)){const ar=this.currentStructure.getFirstNodeByCategoryID(s[Pn].categoryID);if(ar&&ar.replace)return;rn.push(Pn)}}})})});let yn=[];for(const Pn of rn){if(yn.includes(Pn))continue;if(s[Pn].replace){yn.push(Pn);continue}const{transforms:zn,newNodes:lr,connectablePlugs:ar}=await this.currentStructure.findGhostTransforms(Pn,coreSceneStore.getState().sceneSettings.ignoreSpawningCollision);zn.length>0&&yn.push(Pn)}for(const Pn of yn)s[Pn].replace;return yn}async removeAllVariantOverrides(){let s=this._currentStructure.nodes,a=productDataStore$1.getState().productData,b=itemStore.getState().itemsSpawned;await s.map(async _e=>{if(!_e.overrideVariant||(_e.overrideVariant=null,!a[_e.skuID].looks))return;let bt=null;Object.keys(this._globalVariants).map(rn=>{a[_e.skuID].looks.includes(this._globalVariants[rn])&&bt==null&&(bt=this._globalVariants[rn])}),bt&&await itemStore.getState().actions.switchToVariant(b[_e.guid].itemData,bt)}),CORE_API.alert({alertMsg:"Changes to individual items in the scene have been cleared",alertTime:6e3,alertType:"info",alertLabel:"Overrides Removed",alertId:"overridesRemoved"}),CORE_API.fireEvent(CORE_API.EVENTS.SCENE.MaterialOverrides_Exists,!1)}async switchGlobalGeometryVariant(s,a){const _e=productDataStore$1.getState().categoryData.geometryVariants;let bt=null;if(_e.map(ar=>{ar.id==s&&(bt=ar)}),!bt)return;const rn=bt.productsInCategory,yn=bt.variants[a].productsToSwitch,Pn=itemStore.getState().itemsSpawned;let zn=productDataStore$1.getState().categoryData;yn.map(ar=>{rn.map(cr=>{let hr=!1;cr.products.map(es=>{ar==es&&(hr=!0)}),hr&&zn.build.map(es=>{cr.products.map(Ur=>{es.skus.map((Dr,zr)=>{es.skus[zr]==Ur&&(es.skus[zr]=ar)})})})})}),this._currentStructure.nodes.map(ar=>{rn.map(cr=>{cr.products.map(hr=>{ar.skuID==hr&&ar.ref!==null&&cr.products.map(es=>{yn.map(Ur=>{if(Ur==es){const Dr=productDataStore$1.getState().actions.getProductDataById(Ur);let zr=Dr.geometriesToHide;ar.plugs.map(as=>{!as.isOpen&&as.attachedPlug&&as.type=="weighted_hider"&&as.attachedPlug.weight>as.weight&&(zr=zr.concat(as.affectedNodes))}),ar.showNodes(Dr.geometriesToShow),ar.hideNodes(zr),ar.skuID=Ur;const rs=Pn[ar.guid];rs&&rs.itemData&&Object.keys(Dr).map(as=>{rs.itemData[as]=Dr[as]}),ar.resetInStock(),ar.updatePricing()}})})})})}),this._globalGeometryVariants[s]=a,hotspotStore$1.getState().actions.checkHotspotHealth(),inventoryStore.getState().actions.refreshInventory(Pn),productDataStore$1.setState({categoryData:zn}),CORE_API.fireEvent(CORE_API.EVENTS.SCENE.CategoryData_Updated,zn),CORE_API.fireEvent(CORE_API.EVENTS.SCENE.GlobalGeometryVariant_Updated,this._globalGeometryVariants);const lr=await this.getCartItemsAsync();lr&&CORE_API.fireEvent(CORE_API.EVENTS.SCENE.CartItems_Updated,lr)}async switchGlobalVariant(s,a){this._globalVariants[s]=a;const b=itemStore.getState().actions;let _e=itemStore.getState().itemsSpawned;for(let yn=0;yn<Object.keys(_e).length;yn++){let Pn=_e[Object.keys(_e)[yn]];if(Pn.itemData.looks&&Pn.itemData.looks.includes(a)){let zn=this._currentStructure.getNodeByGUID(Pn.itemData.guid);zn&&!zn.overrideVariant&&await b.switchToVariant(Pn.itemData,a)}}const bt=productDataStore$1.getState().lookData;lightStore.getState().actions.processLookEnvMapOverride(a);const rn=s;Object.keys(_e).length>0&&CORE_API.alert({alertMsg:rn.charAt(0).toUpperCase()+rn.slice(1)+" was successfully switched to "+bt[a].label+".",alertTime:3e3,alertType:"success",alertLabel:`${rn} Changed`,alertId:"materialVariantChanged"}),CORE_API.fireEvent(CORE_API.EVENTS.SCENE.GlobalVariant_Updated,this._globalVariants),itemStore.setState({variantChangeAlert:!itemStore.getState().variantChangeAlert});const sn=await this.getCartItemsAsync();sn&&CORE_API.fireEvent(CORE_API.EVENTS.SCENE.CartItems_Updated,sn)}async#t(s){if(!s)return;LOGGER.info({title:"Structure to load",details:s}),delete this._currentStructure,this._globalVariants={...s.globalVariants},this._globalGeometryVariants=s.globalGeometryVariants?{...s.globalGeometryVariants}:{};const a=[...s.structure];this._currentStructure=new Structure(a,this._globalVariants,this._globalGeometryVariants);for(const[b,_e]of Object.entries(this._globalVariants))this.switchGlobalVariant(b,_e);for(const[b,_e]of Object.entries(this._globalGeometryVariants))this.switchGlobalGeometryVariant(b,_e);LOGGER.info({title:"Structure Loading..."}),await this._currentStructure.load(a),LOGGER.info({title:"Structure Loaded."})}async loadStructure(s){s&&(CORE_API.fireEvent(CORE_API.EVENTS.UI.PreloadScreen_Show),coreSceneStore.setState({configurationLoaded:!1}),await wait(500),await this._currentStructure.clear(),await this.#t(s),coreSceneStore.getState().preconfigurationLoaded?CORE_API.fireEvent(CORE_API.EVENTS.UI.PreloadScreen_Hide):coreSceneStore.setState({preconfigurationLoaded:!0}),coreSceneStore.getState().configurationLoadedOnRestart||coreSceneStore.setState({configurationLoadedOnRestart:!0}),coreSceneStore.setState({configurationLoaded:!0}),await attachmentStore$1.getState().actions.toggleStructureUpdated())}export(){return{structure:this._currentStructure.export(),globalVariants:this._globalVariants,globalGeometryVariants:this._globalGeometryVariants}}async clear(){CORE_API.fireEvent(CORE_API.EVENTS.UI.PreloadScreen_Show),this._currentStructure.clear(),CORE_API.fireEvent(CORE_API.EVENTS.UI.PreloadScreen_Hide)}async restart(){LOGGER.warn({title:"Restarting the Scene!!"}),itemStore.getState().selectedItemData&&itemStore.getState().actions.deselectItem();const s=attachmentStore$1.getState().defaultConfig;coreSceneStore.setState({configurationLoaded:!1,configurationLoadedOnRestart:!1}),CORE_API.fireEvent(CORE_API.EVENTS.UI.PreloadScreen_Show),await wait(500),await this._currentStructure.clear(),await this.#t(s),await attachmentStore$1.getState().actions.toggleStructureUpdated(),coreSceneStore.setState({configurationLoaded:!0,configurationLoadedOnRestart:!0}),CORE_API.fireEvent(CORE_API.EVENTS.UI.PreloadScreen_Hide)}}const attachmentStore=create$3((o,s)=>({attachmentSystem:null,defaultConfig:null,structureUpdated:!1,colliderMeshRef:null,placeholderRef:null,draggingItem:null,snappingThreshold:.5,actions:{initializeAttachmentSystem:async()=>{const{actions:a,defaultConfig:b}=s();LOGGER.info({title:"Initializing Attachment System!"});const _e=await new AttachmentSystem;o({attachmentSystem:_e}),await a.updateFittingSkuIds(),await a.toggleStructureUpdated()},loadSavedStructureFromConfigID:async a=>{LOGGER.info({title:"Fetching Structure Using ConfigID!"});const b=await getJSONFromEndpoint(FETCH_CONFIG_ENDPOINT+a);return b.success===!1?null:b.data},loadDefaultStructure:async()=>{const{actions:a,defaultConfig:b,attachmentSystem:_e}=s();LOGGER.info({title:"Loading Default Structure!"}),await a.loadStructure(b)},updateFittingSkuIds:async()=>{const a=await attachmentStore.getState().attachmentSystem.getFittingSKUIDs();a&&(itemStore.setState({fittingSkuIds:[...a]}),CORE_API.fireEvent(CORE_API.EVENTS.SCENE.FittingSkuIds_Updated,{skuids:a}))},toggleStructureUpdated:async()=>{const{attachmentSystem:a}=s();o(_e=>({structureUpdated:!_e.structureUpdated})),CORE_API.fireEvent(CORE_API.EVENTS.SCENE.ReplaceableCategory_Updated,a.currentStructure.getCurrentItemsInReplaceableCategory());const b=await a.getCartItemsAsync();b&&CORE_API.fireEvent(CORE_API.EVENTS.SCENE.CartItems_Updated,b)},loadStructure:async a=>{const{attachmentSystem:b}=s();LOGGER.info({title:"Loading Structure!"}),b&&coreSceneStore.getState().configurationLoaded!==!1&&await b.loadStructure(a)},export:()=>{const{attachmentSystem:a}=s();if(a)return a.export()}}})),attachmentStore$1=attachmentStore,productDataStore=create$3((o,s)=>({productData:{},categoryData:{},lookData:{},hotspotsData:{},endpoints:{},assetsData:void 0,actions:{getCurrentPricingInfo:()=>{const{productData:a}=s();let b={};return Object.keys(a).map(_e=>{if(_e.toLowerCase()==="root")return;let bt=a[_e].lookDetails,rn={};Object.keys(bt).map(sn=>{sn!="default"&&(rn[sn]=bt[sn].price)}),b[_e]=rn}),b},updatePricingForAllProducts:a=>{const{actions:b}=s();Object.keys(a).map(_e=>{let bt=a[_e];Object.keys(bt).map(rn=>{b.updatePricingForProduct(_e,rn,bt[rn])})})},updatePricingForProduct:(a,b,_e)=>{const{productData:bt}=s();let rn=bt[a];if(!rn||!rn.lookDetails)return;let sn=rn.lookDetails[b];if(!sn)return;sn.price=_e,attachmentStore$1.getState().attachmentSystem.currentStructure.getNodesBySKUID(a).map(zn=>zn.updatePricing())},setProductData:a=>{let b={};a&&Object.keys(a).map(_e=>{const bt=a[_e];if(bt.skuID=_e,bt.skuID.toLowerCase()==="root"){bt.lookDetails={default:{title:"",description:"",productPageUrl:"",thumbnails:{high:"",low:""},price:0}},bt.defaultVariant="default";return}if(bt?.lookDetails){const rn=bt.lookDetails;let sn=Object.keys(bt.lookDetails);if(sn.includes("default")){const Pn=sn.indexOf("default");sn.splice(Pn,1)}bt.looks=sn,Object.keys(bt.lookDetails).map(Pn=>{let zn=bt.lookDetails[Pn];zn.inventory===void 0&&(zn.inventory=DEFAULT_INVENTORY),zn.price===void 0&&(zn.price=DEFAULT_PRODUCT_PRICE),b[_e]={...b[_e],[Pn]:{inventory:DEFAULT_INVENTORY,inScene:[]}}});let yn=bt?.defaultVariant;yn||(LOGGER.warn({title:`No defaultVariant set for ${bt.skuID}. Attempting to auto resolve but the colour variants behaviour might be unexpected!`}),yn=Object.keys(bt.lookDetails).sort()[0],LOGGER.warn({title:"Auto resolved default look ID: "+yn})),sn.includes(yn)?(bt.lookDetails.default=rn[yn],bt.lookDetails.default.id=yn):(LOGGER.error({title:`Default look [ ${yn} ] doesn't exist for: ${_e}. Please make sure to select a default variant in Input Data for this project`}),bt.lookDetails.default=null)}}),LOGGER.info({title:"PRODUCT DATA: ",details:a}),inventoryStore.setState({inventoryData:b}),o({productData:a})},setCategoryData:a=>{const{productData:b}=s();a.geometryVariants!==void 0&&a.geometryVariants.map(_e=>{_e.defaultVariant===void 0&&Object.keys(_e.variants).length>0&&(_e.defaultVariant=Object.keys(_e.variants)[0])}),a.color!==void 0&&a.color.map(_e=>{(_e.defaultLook===void 0&&_e.looks.length>0||!_e.looks.includes(_e.defaultLook))&&(_e.defaultLook=_e.looks[0])}),o({categoryData:a}),a.build!==void 0&&a.build.map(_e=>{_e.skus.map(bt=>{b[bt].categoryID=_e.categoryID,b[bt].categoryLabel=_e.label,b[bt].swappable=_e.swappable?_e.swappable:!1,b[bt].replace=_e.replace})})},getProductDataById:a=>{const{productData:b}=s();let _e=null;return b[a]&&(_e=b[a]),_e},setLookData:a=>o({lookData:a}),setHotspotsData:a=>{const{categoryData:b,productData:_e}=s();b.geometryVariants&&Object.keys(a).map(bt=>{a[bt].map(rn=>{rn.geometryVariantID&&b.geometryVariants.map(sn=>{Object.keys(sn.variants).map(yn=>{rn.geometryVariantID==yn&&sn.productsInCategory.map(Pn=>{let zn=null;Pn.products.map(lr=>{a.hasOwnProperty(lr)&&(zn=a[lr])}),Pn.products.map(lr=>{a.hasOwnProperty(lr)||(a[lr]=zn)})})})})})}),o({hotspotsData:a})},setEndpoints:a=>{o({endpoints:a}),setGlobalEndpoints(a)},setAssetsData:a=>o({assetsData:a})}})),productDataStore$1=productDataStore,UtilityMenu=({handleShareButtonTrigger:o,handleSaveButtonTrigger:s,handleRestartButtonClick:a,handleShowHotspots:b,handleDimensionClick:_e,handleInstructionButtonClick:bt,utilityMenuVisible:rn,hotspotsVisibility:sn,viewInYourSpaceMenuBtnVisible:yn,restartMenuBtnVisible:Pn,saveMenuBtnVisible:zn,hotspotsMenuBtnVisible:lr,instructionsMenuBtnVisible:ar,dimensionsMenuBtnVisible:cr,shareMenuBtnVisible:hr,dimensionsVisible:es,position:Ur,CORE_API:Dr})=>{const[zr,rs]=reactExports.useState("bottom"),as=productDataStore$1(ls=>ls.assetsData),os={ar:"https://storage.googleapis.com/gsc-epigraph-design/product-assets/Icon/AR.svg",restart:"https://storage.googleapis.com/gsc-epigraph-design/product-assets/Icon/Restart.svg",save:"https://storage.googleapis.com/gsc-epigraph-design/product-assets/Icon/save.svg",share:"https://storage.googleapis.com/gsc-epigraph-design/product-assets/Icon/Share.svg",dimensions:"https://storage.googleapis.com/gsc-epigraph-design/product-assets/Icon/Ruler.svg",hotspots:"https://storage.googleapis.com/gsc-epigraph-design/product-assets/Icon/Eye.svg",instructions:"https://storage.googleapis.com/gsc-epigraph-design/product-assets/Icon/Info.svg"};return reactExports.useEffect(()=>{switch(Ur){case"top":rs("top");break;case"bottom":rs("bottom");break;case"left":rs("left");break;case"right":rs("right");break}return()=>{}},[Ur]),jsxRuntimeExports.jsx("div",{className:"shellCanvasContainerParent",id:zr,children:jsxRuntimeExports.jsxs("div",{className:(rn&&(hr||yn||Pn||cr||lr||ar))==!0?"shellCanvasContainer":"shellCanvasContainer shellCanvasContainerInactive",children:[yn&&jsxRuntimeExports.jsx(UtilityMenuButton,{buttonAction:()=>{Dr.viewInYourSpace()},buttonLabel:"AR",hoverLabel:"View in Your Space",icon:as?.icons?.utilityMenu?.viewInYourSpace?Dr.getResolvedAssetUrl(as?.icons?.utilityMenu?.viewInYourSpace):os.ar}),Pn&&jsxRuntimeExports.jsx(UtilityMenuButton,{buttonAction:()=>{a()},buttonLabel:"Restart",hoverLabel:"Restart",icon:as?.icons?.utilityMenu?.restart?Dr.getResolvedAssetUrl(as?.icons?.utilityMenu?.restart):os.restart}),zn&&jsxRuntimeExports.jsx(UtilityMenuButton,{buttonAction:()=>{s()},buttonLabel:"Save",hoverLabel:"Save",icon:as?.icons?.utilityMenu?.save?Dr.getResolvedAssetUrl(as?.icons?.utilityMenu?.save):os.save}),hr&&jsxRuntimeExports.jsx(UtilityMenuButton,{buttonAction:()=>{o()},buttonLabel:"Share",hoverLabel:"Share",icon:as?.icons?.utilityMenu?.share?Dr.getResolvedAssetUrl(as?.icons?.utilityMenu?.share):os.share}),cr&&jsxRuntimeExports.jsx(UtilityMenuButton,{buttonAction:()=>{_e()},buttonLabel:"Size",hoverLabel:"Size",icon:as?.icons?.utilityMenu?.dimensions?Dr.getResolvedAssetUrl(as?.icons?.utilityMenu?.dimensions):os.dimensions,activeCondition:es}),lr&&jsxRuntimeExports.jsx(UtilityMenuButton,{buttonAction:()=>{b()},buttonLabel:"Hotspots",hoverLabel:"Hotspots",icon:as?.icons?.utilityMenu?.hotspots?Dr.getResolvedAssetUrl(as?.icons?.utilityMenu?.hotspots):os.hotspots,activeCondition:sn}),ar&&jsxRuntimeExports.jsx(UtilityMenuButton,{buttonAction:()=>{bt()},buttonLabel:"Instructions",hoverLabel:"Instructions",icon:as?.icons?.utilityMenu?.instructions?Dr.getResolvedAssetUrl(as?.icons?.utilityMenu?.instructions):os.instructions})]})})};function makeTypeChecker(o){return s=>!!s.type&&s.type.tabsRole===o}const isTab=makeTypeChecker("Tab"),isTabList=makeTypeChecker("TabList"),isTabPanel=makeTypeChecker("TabPanel");function isTabChild(o){return isTab(o)||isTabList(o)||isTabPanel(o)}function deepMap(o,s){return reactExports.Children.map(o,a=>a===null?null:isTabChild(a)?s(a):a.props&&a.props.children&&typeof a.props.children=="object"?reactExports.cloneElement(a,{...a.props,children:deepMap(a.props.children,s)}):a)}function deepForEach(o,s){return reactExports.Children.forEach(o,a=>{a!==null&&(isTab(a)||isTabPanel(a)?s(a):a.props&&a.props.children&&typeof a.props.children=="object"&&(isTabList(a)&&s(a),deepForEach(a.props.children,s)))})}function r(o){var s,a,b="";if(typeof o=="string"||typeof o=="number")b+=o;else if(typeof o=="object")if(Array.isArray(o))for(s=0;s<o.length;s++)o[s]&&(a=r(o[s]))&&(b&&(b+=" "),b+=a);else for(s in o)o[s]&&(b&&(b+=" "),b+=s);return b}function clsx(){for(var o,s,a=0,b="";a<arguments.length;)(o=arguments[a++])&&(s=r(o))&&(b&&(b+=" "),b+=s);return b}function getTabsCount(o){let s=0;return deepForEach(o,a=>{isTab(a)&&s++}),s}function isNode(o){return o&&"getAttribute"in o}function isTabNode(o){return isNode(o)&&o.getAttribute("data-rttab")}function isTabDisabled(o){return isNode(o)&&o.getAttribute("aria-disabled")==="true"}let canUseActiveElement;function determineCanUseActiveElement(o){const s=o||(typeof window<"u"?window:void 0);try{canUseActiveElement=!!(typeof s<"u"&&s.document&&s.document.activeElement)}catch{canUseActiveElement=!1}}const defaultProps$4={className:"react-tabs",focus:!1},UncontrolledTabs=o=>{let s=reactExports.useRef([]),a=reactExports.useRef([]);const b=reactExports.useRef();function _e(Zl,_d){if(Zl<0||Zl>=Pn())return;const{onSelect:Ty,selectedIndex:yy}=o;Ty(Zl,yy,_d)}function bt(Zl){const _d=Pn();for(let Ty=Zl+1;Ty<_d;Ty++)if(!isTabDisabled(zn(Ty)))return Ty;for(let Ty=0;Ty<Zl;Ty++)if(!isTabDisabled(zn(Ty)))return Ty;return Zl}function rn(Zl){let _d=Zl;for(;_d--;)if(!isTabDisabled(zn(_d)))return _d;for(_d=Pn();_d-- >Zl;)if(!isTabDisabled(zn(_d)))return _d;return Zl}function sn(){const Zl=Pn();for(let _d=0;_d<Zl;_d++)if(!isTabDisabled(zn(_d)))return _d;return null}function yn(){let Zl=Pn();for(;Zl--;)if(!isTabDisabled(zn(Zl)))return Zl;return null}function Pn(){const{children:Zl}=o;return getTabsCount(Zl)}function zn(Zl){return s.current[`tabs-${Zl}`]}function lr(){let Zl=0;const{children:_d,disabledTabClassName:Ty,focus:yy,forceRenderTabPanel:by,selectedIndex:Al,selectedTabClassName:_f,selectedTabPanelClassName:gy,environment:El}=o;a.current=a.current||[];let My=a.current.length-Pn();const By=reactExports.useId();for(;My++<0;)a.current.push(`${By}${a.current.length}`);return deepMap(_d,lA=>{let wA=lA;if(isTabList(lA)){let Fy=0,OA=!1;canUseActiveElement==null&&determineCanUseActiveElement(El);const UA=El||(typeof window<"u"?window:void 0);canUseActiveElement&&UA&&(OA=React.Children.toArray(lA.props.children).filter(isTab).some(($A,YA)=>UA.document.activeElement===zn(YA))),wA=reactExports.cloneElement(lA,{children:deepMap(lA.props.children,$A=>{const YA=`tabs-${Fy}`,WA=Al===Fy,bA={tabRef:FA=>{s.current[YA]=FA},id:a.current[Fy],selected:WA,focus:WA&&(yy||OA)};return _f&&(bA.selectedClassName=_f),Ty&&(bA.disabledClassName=Ty),Fy++,reactExports.cloneElement($A,bA)})})}else if(isTabPanel(lA)){const Fy={id:a.current[Zl],selected:Al===Zl};by&&(Fy.forceRender=by),gy&&(Fy.selectedClassName=gy),Zl++,wA=reactExports.cloneElement(lA,Fy)}return wA})}function ar(Zl){const{direction:_d,disableUpDownKeys:Ty,disableLeftRightKeys:yy}=o;if(hr(Zl.target)){let{selectedIndex:by}=o,Al=!1,_f=!1;(Zl.code==="Space"||Zl.keyCode===32||Zl.code==="Enter"||Zl.keyCode===13)&&(Al=!0,_f=!1,cr(Zl)),!yy&&(Zl.keyCode===37||Zl.code==="ArrowLeft")||!Ty&&(Zl.keyCode===38||Zl.code==="ArrowUp")?(_d==="rtl"?by=bt(by):by=rn(by),Al=!0,_f=!0):!yy&&(Zl.keyCode===39||Zl.code==="ArrowRight")||!Ty&&(Zl.keyCode===40||Zl.code==="ArrowDown")?(_d==="rtl"?by=rn(by):by=bt(by),Al=!0,_f=!0):Zl.keyCode===35||Zl.code==="End"?(by=yn(),Al=!0,_f=!0):(Zl.keyCode===36||Zl.code==="Home")&&(by=sn(),Al=!0,_f=!0),Al&&Zl.preventDefault(),_f&&_e(by,Zl)}}function cr(Zl){let _d=Zl.target;do if(hr(_d)){if(isTabDisabled(_d))return;const Ty=[].slice.call(_d.parentNode.children).filter(isTabNode).indexOf(_d);_e(Ty,Zl);return}while((_d=_d.parentNode)!=null)}function hr(Zl){if(!isTabNode(Zl))return!1;let _d=Zl.parentElement;do{if(_d===b.current)return!0;if(_d.getAttribute("data-rttabs"))break;_d=_d.parentElement}while(_d);return!1}const{children:es,className:Ur,disabledTabClassName:Dr,domRef:zr,focus:rs,forceRenderTabPanel:as,onSelect:os,selectedIndex:ls,selectedTabClassName:zs,selectedTabPanelClassName:ho,environment:ga,disableUpDownKeys:mo,disableLeftRightKeys:go,...yl}={...defaultProps$4,...o};return React.createElement("div",Object.assign({},yl,{className:clsx(Ur),onClick:cr,onKeyDown:ar,ref:Zl=>{b.current=Zl,zr&&zr(Zl)},"data-rttabs":!0}),lr())};UncontrolledTabs.propTypes={};const MODE_CONTROLLED=0,MODE_UNCONTROLLED=1,defaultProps$3={defaultFocus:!1,focusTabOnClick:!0,forceRenderTabPanel:!1,selectedIndex:null,defaultIndex:null,environment:null,disableUpDownKeys:!1,disableLeftRightKeys:!1},getModeFromProps=o=>o.selectedIndex===null?MODE_UNCONTROLLED:MODE_CONTROLLED,Tabs=o=>{const{children:s,defaultFocus:a,defaultIndex:b,focusTabOnClick:_e,onSelect:bt,...rn}={...defaultProps$3,...o},[sn,yn]=reactExports.useState(a),[Pn]=reactExports.useState(getModeFromProps(rn)),[zn,lr]=reactExports.useState(Pn===MODE_UNCONTROLLED?b||0:null);if(reactExports.useEffect(()=>{yn(!1)},[]),Pn===MODE_UNCONTROLLED){const hr=getTabsCount(s);reactExports.useEffect(()=>{if(zn!=null){const es=Math.max(0,hr-1);lr(Math.min(zn,es))}},[hr])}const ar=(hr,es,Ur)=>{typeof bt=="function"&&bt(hr,es,Ur)===!1||(_e&&yn(!0),Pn===MODE_UNCONTROLLED&&lr(hr))};let cr={...o,...rn};return cr.focus=sn,cr.onSelect=ar,zn!=null&&(cr.selectedIndex=zn),delete cr.defaultFocus,delete cr.defaultIndex,delete cr.focusTabOnClick,React.createElement(UncontrolledTabs,cr,s)};Tabs.propTypes={};Tabs.tabsRole="Tabs";const defaultProps$2={className:"react-tabs__tab-list"},TabList=o=>{const{children:s,className:a,...b}={...defaultProps$2,...o};return React.createElement("ul",Object.assign({},b,{className:clsx(a),role:"tablist"}),s)};TabList.tabsRole="TabList";TabList.propTypes={};const DEFAULT_CLASS$1="react-tabs__tab",defaultProps$1={className:DEFAULT_CLASS$1,disabledClassName:`${DEFAULT_CLASS$1}--disabled`,focus:!1,id:null,selected:!1,selectedClassName:`${DEFAULT_CLASS$1}--selected`},Tab$1=o=>{let s=reactExports.useRef();const{children:a,className:b,disabled:_e,disabledClassName:bt,focus:rn,id:sn,selected:yn,selectedClassName:Pn,tabIndex:zn,tabRef:lr,...ar}={...defaultProps$1,...o};return reactExports.useEffect(()=>{yn&&rn&&s.current.focus()},[yn,rn]),React.createElement("li",Object.assign({},ar,{className:clsx(b,{[Pn]:yn,[bt]:_e}),ref:cr=>{s.current=cr,lr&&lr(cr)},role:"tab",id:`tab${sn}`,"aria-selected":yn?"true":"false","aria-disabled":_e?"true":"false","aria-controls":`panel${sn}`,tabIndex:zn||(yn?"0":null),"data-rttab":!0}),a)};Tab$1.propTypes={};Tab$1.tabsRole="Tab";const DEFAULT_CLASS="react-tabs__tab-panel",defaultProps={className:DEFAULT_CLASS,forceRender:!1,selectedClassName:`${DEFAULT_CLASS}--selected`},TabPanel=o=>{const{children:s,className:a,forceRender:b,id:_e,selected:bt,selectedClassName:rn,...sn}={...defaultProps,...o};return React.createElement("div",Object.assign({},sn,{className:clsx(a,{[rn]:bt}),role:"tabpanel",id:`panel${_e}`,"aria-labelledby":`tab${_e}`}),b||bt?s:null)};TabPanel.tabsRole="TabPanel";TabPanel.propTypes={};const colorStore=create$3(o=>({allActiveVariants:{},allActiveGeometryVariants:{}})),arrayWithoutElementAtIndex=function(o,s){return o.filter(function(a,b){return s!==b})},updateQuantityAtIndex=function(o,s,a){let b=o.slice();return b[s].quantity=a,b},cartStore=create$3((o,s)=>({cart:[],cartTotalPrice:0,deleteCartItem:a=>{o(b=>({cart:arrayWithoutElementAtIndex(b.cart,a)}))},addToCart:a=>{o(b=>({cart:[...b.cart,a]}))},updateQuantity:(a,b)=>{o(_e=>({cart:updateQuantityAtIndex(_e.cart,a,b)}))},previewCartModalOpen:!1,togglePreviewCartModal:()=>{const{previewCartModalOpen:a}=s();a===!0?uiSceneStore.getState().CORE_API.reviewCartHidden():uiSceneStore.getState().CORE_API.reviewCartShown(),o({previewCartModalOpen:!a})},actions:{setCartTotalPrice:a=>{o(()=>({cartTotalPrice:a}))}}})),ItemCard=({spawnGhosts:o,accordionActive:s,spawnItem:a,removeAllGhosts:b,skuId:_e,active:bt})=>{const rn=uiSceneStore(FA=>FA.CORE_API),sn=infoStore(FA=>FA.infoModalOpen),yn=reactExports.useRef(null),Pn=infoStore(FA=>FA.populateInfoObject),zn=uiSceneStore(FA=>FA.dialogPopupOpen),lr=cartStore(FA=>FA.previewCartModalOpen),ar=infoStore(FA=>FA.updateInfoModalOpen),[cr,hr]=reactExports.useState("default"),[es,Ur]=reactExports.useState(!0),Dr=colorStore(FA=>FA.allActiveVariants),zr=productDataStore$1(FA=>FA.productData),rs=itemStore(FA=>FA.fittingSkuIds),[as,os]=reactExports.useState(zr[_e].incrementDecrementControl?zr[_e].incrementDecrementControl:!1),[ls,zs]=reactExports.useState(zr[_e]?zr[_e]:{}),[ho,ga]=reactExports.useState(zr[_e].name?zr[_e].name:"Not Set"),[mo,go]=reactExports.useState(zr[_e].subheading?zr[_e].subheading:""),[yl,Zl]=reactExports.useState(zr[_e].lookDetails.default.thumbnails.low?zr[_e].lookDetails.default.thumbnails.low:""),[_d,Ty]=reactExports.useState(zr[_e].draggableUI!=null?zr[_e].draggableUI:uiSceneStore.getState().CORE_API.sceneSettings.draggableUI),[yy,by]=reactExports.useState(null),[Al,_f]=reactExports.useState(!1),[gy,El]=reactExports.useState(!1),[My,By]=reactExports.useState(0),lA=reactExports.useCallback(()=>{My<=0||rn.removeLastItemBySkuId(_e)},[My]),wA=()=>{let FA=0;const BA=itemStore.getState().itemsSpawned,rE=Object.keys(BA);for(let sE=rE.length-1;sE>=0;sE--){const SC=rE[sE];BA[SC].itemData.skuID===_e&&FA++}By(FA)};reactExports.useEffect(()=>{wA()},[]),addCoreEventListener(rn.EVENTS.SCENE.Items_Updated,wA),reactExports.useEffect(()=>{rs.includes(_e)?_f(!0):_f(!1)},[rs]),reactExports.useEffect(()=>{Object.keys(zr).length!=0},[zr]),reactExports.useEffect(()=>{ls.looks.length<=1&&Ur(!1)},[ls]);const Fy=reactExports.useCallback(()=>{const FA=ls.looks;let BA="default";for(const[rE,sE]of Object.entries(Dr))if(FA.includes(sE)){BA=sE;break}hr(BA)},[Dr]);reactExports.useEffect(()=>{Zl(ls.lookDetails[cr].thumbnails.low)},[cr]),reactExports.useEffect(()=>{es===!0&&Fy()},[Dr]);const OA=reactExports.useCallback(FA=>{if(FA.stopPropagation(),!(!uiSceneStore.getState().CORE_API.sceneSettings.clickToAddUi&&!as)){if(FA.stopPropagation(),Al===!1||yy){rn.alert({alertMsg:"Unable to add item to the scene.",alertTime:4e3,alertType:"warn",alertLabel:"Action Unavailable"});return}a(_e,!0)}},[Al,yy]),UA=reactExports.useCallback(async()=>{const FA=rn.sceneSettings?.showDependencyOnHover;if(FA===void 0||FA===!1)return;let BA=rn.getSpawningRequirementForSkuID(_e);if(BA.length<=0)return;let rE="";const sE=await rn.getCartItemsAsync();let SC=!1;if(sE.cartItems.map(HA=>{BA.includes(HA.skuID)&&(SC=!0)}),BA.includes("Root")&&BA.length==1&&(SC=!0,BA=[]),SC)rE="No space available to spawn the item.";else{rE=`This item requires a dependency to be added to the scene first.
|
|
8992
|
+
}`,ToneMappingEffect=class extends Effect{constructor({blendFunction:o=BlendFunction.SRC,adaptive:s=!1,mode:a=s?ToneMappingMode.REINHARD2_ADAPTIVE:ToneMappingMode.ACES_FILMIC,resolution:b=256,maxLuminance:_e=4,whitePoint:bt=_e,middleGrey:rn=.6,minLuminance:sn=.01,averageLuminance:yn=1,adaptationRate:Pn=1}={}){super("ToneMappingEffect",tone_mapping_default,{blendFunction:o,uniforms:new Map([["luminanceBuffer",new Uniform(null)],["maxLuminance",new Uniform(_e)],["whitePoint",new Uniform(bt)],["middleGrey",new Uniform(rn)],["averageLuminance",new Uniform(yn)]])}),this.renderTargetLuminance=new WebGLRenderTarget(1,1,{minFilter:LinearMipmapLinearFilter,depthBuffer:!1}),this.renderTargetLuminance.texture.generateMipmaps=!0,this.renderTargetLuminance.texture.name="Luminance",this.luminancePass=new LuminancePass({renderTarget:this.renderTargetLuminance}),this.adaptiveLuminancePass=new AdaptiveLuminancePass(this.luminancePass.texture,{minLuminance:sn,adaptationRate:Pn}),this.uniforms.get("luminanceBuffer").value=this.adaptiveLuminancePass.texture,this.resolution=b,this.mode=a}get mode(){return Number(this.defines.get("TONE_MAPPING_MODE"))}set mode(o){if(this.mode!==o){switch(this.defines.clear(),this.defines.set("TONE_MAPPING_MODE",o.toFixed(0)),o){case ToneMappingMode.REINHARD:this.defines.set("toneMapping(texel)","ReinhardToneMapping(texel)");break;case ToneMappingMode.OPTIMIZED_CINEON:this.defines.set("toneMapping(texel)","OptimizedCineonToneMapping(texel)");break;case ToneMappingMode.ACES_FILMIC:this.defines.set("toneMapping(texel)","ACESFilmicToneMapping(texel)");break;default:this.defines.set("toneMapping(texel)","texel");break}this.adaptiveLuminancePass.enabled=o===ToneMappingMode.REINHARD2_ADAPTIVE,this.setChanged()}}getMode(){return this.mode}setMode(o){this.mode=o}get whitePoint(){return this.uniforms.get("whitePoint").value}set whitePoint(o){this.uniforms.get("whitePoint").value=o}get middleGrey(){return this.uniforms.get("middleGrey").value}set middleGrey(o){this.uniforms.get("middleGrey").value=o}get averageLuminance(){return this.uniforms.get("averageLuminance").value}set averageLuminance(o){this.uniforms.get("averageLuminance").value=o}get adaptiveLuminanceMaterial(){return this.adaptiveLuminancePass.fullscreenMaterial}getAdaptiveLuminanceMaterial(){return this.adaptiveLuminanceMaterial}get resolution(){return this.luminancePass.resolution.width}set resolution(o){const s=Math.max(0,Math.ceil(Math.log2(o))),a=Math.pow(2,s);this.luminancePass.resolution.setPreferredSize(a,a),this.adaptiveLuminanceMaterial.mipLevel1x1=s}getResolution(){return this.resolution}setResolution(o){this.resolution=o}get adaptive(){return this.mode===ToneMappingMode.REINHARD2_ADAPTIVE}set adaptive(o){this.mode=o?ToneMappingMode.REINHARD2_ADAPTIVE:ToneMappingMode.REINHARD2}get adaptationRate(){return this.adaptiveLuminanceMaterial.adaptationRate}set adaptationRate(o){this.adaptiveLuminanceMaterial.adaptationRate=o}get distinction(){return console.warn(this.name,"distinction was removed."),1}set distinction(o){console.warn(this.name,"distinction was removed.")}update(o,s,a){this.adaptiveLuminancePass.enabled&&(this.luminancePass.render(o,s),this.adaptiveLuminancePass.render(o,null,null,a))}initialize(o,s,a){this.adaptiveLuminancePass.initialize(o,s,a)}};const coreSceneStore=create$3((o,s)=>({CORE_API:null,frameloop:"always",hoveredGhostIndex:-1,itemDraggedSkuID:null,screenshotRenderer:new WebGLRenderer({antiAlias:!0,preserveDrawingBuffer:!0}),screenshotCamera:new PerspectiveCamera(75,1.33,.1,1e3),builderMode:!1,dragging:!1,bbox:null,draggingItemGUID:null,sceneRef:null,cssLoaded:!1,sceneHasDefaultConfigurationID:!1,configurationLoaded:!0,preconfigurationLoaded:!1,configurationLoadedOnRestart:!0,cursorParentRef:null,glContext:null,canvasTooltipText:"",canvasSize:{width:600,height:600},boundData:{center:new Vector3(0,0,0),size:new Vector3(0,0,0)},showDimensions:!1,autoFocusTrigger:0,cameraActive:!1,autoFocusRef:null,alertData:{},persistantAlertData:null,alertQueue:[],currentAlertData:null,alertSettings:null,draggingOnDropCollisionData:null,multipleTouchDetected:!1,isMobile:!1,isTouchDevice:!1,isTablet:!1,isDesktop:!0,isLandscape:!1,sceneSettings:{swappableRoot:!0,ghostColorOnHoverWithDraggableUi:{r:153,g:252,b:0,a:1},preserveDrawingBuffer:!1,showSaveBtn:!0,showShareBtn:!0,showResetBtn:!0,showDimensionBtn:!0,showViewInYourSpaceBtn:!0,showDependencyOnHover:!1,showContextMenu:!0,showHotspotsBtn:!0,showInstructionsBtn:!1,showInstructionsOnStartup:!1,sceneScaleUnit:"ft",arPlacement:"floor",arTransforms:{position:[0,0,0],rotation:[0,0,0],scale:[1,1,1]},currency:"$",disableDragDrop:!1,ignoreSpawningCollision:!1,disableCollider:!1,disableContextMenu:!1,ghostColor:{r:10,g:10,b:10,a:.2},ghostScale:[1,1,1],ghostAsWireframe:!1,draggableUI:!1,addFromInfoModal:!1,clickToAddUi:!0,accordionInBuildUi:!1,outOfStock_EmissiveColor:{r:250,g:50,b:0},outOfStock_EmissiveIntensity:.002,defaultConfigurationID:null,emptySceneText:null,emptySceneTextFontSize:"2rem",addToCartCTAText:"Add To Cart",ignoreCollisionPostDragging:!1,comboPlugDistanceThreshold:.05,disableCart:!1,dimensionColor:{r:0,g:0,b:0},disableLocalColorOverride:!1,analyticsEventPrefix:"",outlineSettings:{multisampling:10,visibleEdgeColor:new Color$1("#0f0").convertSRGBToLinear(),hiddenEdgeColor:new Color$1("#0f0").convertSRGBToLinear(),blur:3,width:1e3,edgeStrength:1e3,blendFunction:BlendFunction.ALPHA,pulseSpeed:0,xRay:!0},textSettings:{cartQuantityText:"Qty",reviewButtonText:"Review",cartHeadingText:"Review Products",buildTabHeadingText:"Build",colorTabHeadingText:"Color",featuresTabHeadingText:"Features",tooltipEmptySceneText:"",tooltipInstructionText:"-Drag to rotate the camera-"},variantsTabOrder:{color:{enabled:!0,priority:1},geometryVariants:{enabled:!0,priority:2}},boundingBoxLeeway:.9,contactShadowVisibility:!0,measurementPrecision:2,disableAlerts:!1,focusCameraOnGhosts:!0,alertLevel:2999,alertControl:{default:!0,itemAdded:!0,geometryVariantChanged:!0,overridesRemoved:!0,materialVariantChanged:!0,itemRemoved:!0,itemRepositioned:!0,configurationSaved:!0,linkCopied:!0,outOfStock:!0,unvisualizedItemSpawn:!0},screenshotCameras:[{position:new Vector3(-2.5,.6,-5),rotation:new Vector3(-3.1097068566150314,-.6437852162982552,-3.122449778846033)},{position:new Vector3(3,1,-5),rotation:new Vector3(-.5,1,.5)}],instructionsSettings_desktop:[{header:"Add to Scene",description:"Click to add individual modules to the scene.",lottieURL:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Non-Furniture/Non-furniture_Step_1A_Drag_Drop/Non-furniture_Step_1A.json"},{header:"Rearrange Modules",description:"Drag & drop individual modules in the scene to rearrange.",lottieURL:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Non-Furniture/Non-furniture_Step_2/Non-furniture_Step_2.json"},{header:"Remove Modules",description:"Click to select and remove individual modules from the scene.",lottieURL:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Non-Furniture/Non-furniture_Step_3/Non-furniture_Step_3.json"}],instructionsSettings_mobile:[{header:"Add to Scene",description:"Click to add individual modules to the scene.",lottieURL:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Non-Furniture/Non-furniture_Step_1A_Drag_Drop_Mobile/Mobile_Non-furniture_Step_1A.json"},{header:"Rearrange Modules",description:"Drag & drop individual modules in the scene to rearrange.",lottieURL:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Non-Furniture/Non-furniture_Step_2/Non-furniture_Step_2.json"},{header:"Remove Modules",description:"Tap to select and remove individual modules from the scene.",lottieURL:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Non-Furniture/Non-furniture_Step_3/Non-furniture_Step_3.json"}],defaultInstructionsSettings:{step1_drag:{mobile:{header:"Add to Scene",description:"Drag & drop individual modules to add to the scene.",lottieURL:{furniture:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Furniture/Furniture_Step_1A_Drag_Drop_Mobile/Mobile_Furniture_Step_1A.json",nonFurniture:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Non-Furniture/Non-furniture_Step_1A_Drag_Drop_Mobile/Mobile_Non-furniture_Step_1A.json"}},desktop:{header:"Add to Scene",description:"Drag & drop individual modules to add to the scene.",lottieURL:{furniture:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Furniture/Furniture_Step_1A_Drag_Drop/Furniture_Step_1A.json",nonFurniture:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Non-Furniture/Non-furniture_Step_1A_Drag_Drop/Non-furniture_Step_1A.json"}}},step1_add:{mobile:{header:"Add to Scene",description:"Click to add individual modules to the scene.",lottieURL:{furniture:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Furniture/Furniture_Step_1B_Click_Add_Mobile/Mobile_Furniture_Step_1B.json",nonFurniture:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Non-Furniture/Non-furniture_Step_1B_Click_Add_Mobile/Mobile_Non-furniture_Step_1B.json"}},desktop:{header:"Add to Scene",description:"Click to add individual modules to the scene.",lottieURL:{furniture:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Furniture/Furniture_Step_1B_Click_Add/Furniture_Step_1B.json",nonFurniture:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Non-Furniture/Non-furniture_Step_1B_Click_Add/Non-furniture_Step_1B.json"}}},step2:{mobile:{header:"Rearrange Modules",description:"Drag & drop individual modules in the scene to rearrange.",lottieURL:{furniture:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Furniture/Furniture_Step_2/Furniture_Step_2.json",nonFurniture:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Non-Furniture/Non-furniture_Step_2/Non-furniture_Step_2.json"}},desktop:{header:"Rearrange Modules",description:"Drag & drop individual modules in the scene to rearrange.",lottieURL:{furniture:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Furniture/Furniture_Step_2/Furniture_Step_2.json",nonFurniture:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Non-Furniture/Non-furniture_Step_2/Non-furniture_Step_2.json"}}},step3:{mobile:{header:"Remove Modules",description:"Tap to select and remove individual modules from the scene.",lottieURL:{furniture:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Furniture/Furniture_Step_3/Furniture_Step_3.json",nonFurniture:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Non-Furniture/Non-furniture_Step_3/Non-furniture_Step_3.json"}},desktop:{header:"Remove Modules",description:"Click to select and remove individual modules from the scene.",lottieURL:{furniture:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Furniture/Furniture_Step_3/Furniture_Step_3.json",nonFurniture:"<@all-projects@>/common-assets/instructions-assets/lottie-animations/Non-Furniture/Non-furniture_Step_3/Non-furniture_Step_3.json"}}}}},setCSSLoaded:a=>{o({cssLoaded:a})},actions:{popFromAlertQueue:()=>{const{alertQueue:a}=s();return a.shift(),o({alertQueue:a}),a},addToAlertQueue:a=>{const{alertQueue:b,currentAlertData:_e}=s();return b.length>0&&b[b.length-1].alertId&&a.alertId===b[b.length-1].alertId||b.length==0&&_e&&_e.alertId&&_e.alertId==a.alertId||(b.push(a),o({alertQueue:b})),b},getDeviceState:()=>{const{isDesktop:a,isMobile:b,isTablet:_e,isTouchDevice:bt,isLandscape:rn}=s();return{isDesktop:a,isMobile:b,isTablet:_e,isTouchDevice:bt,isLandscape:rn}},enableCart:()=>{const{sceneSettings:a}=s();a.disableCart=!1,inventoryStore.getState().actions.refreshInventory(itemStore.getState().itemsSpawned),CORE_API.fireEvent(CORE_API.EVENTS.SCENE.Cart_StatusUpdated,{disableCart:!1})},disableCart:()=>{const{sceneSettings:a}=s();a.disableCart=!0,inventoryStore.getState().actions.refreshInventory(itemStore.getState().itemsSpawned),CORE_API.fireEvent(CORE_API.EVENTS.SCENE.Cart_StatusUpdated,{disableCart:!0})},getSceneSettings:()=>{const{sceneSettings:a}=s();return a},sendAlert:a=>{o({alertData:{...a}})},switchCursor(a){const{cursorParentRef:b}=s();if(!b)return;let _e="";switch(a){default:case CURSORS.GRAB:_e="grabCursor";break;case CURSORS.GRABBING:_e="grabbingCursor";break;case CURSORS.BLOCKED:_e="blockedCursor";break;case CURSORS.POINTER:_e="pointerCursor";break;case CURSORS.MOVE:_e="moveCursor";break}for(let bt=0;bt<b.classList.length;bt++)b.classList[bt].includes("Cursor")&&b.classList.remove(b.classList[bt]);b.classList.add(_e)},setAlertSettings:a=>{o({alertSettings:a})},async completeDropItem(){const a=attachmentStore$1.getState().attachmentSystem,{draggingOnDropCollisionData:b}=s(),{node:_e,attachedChildrenGuids:bt,collidingStatus:rn,intersectingGhostObject:sn,initPosition:yn,initRotation:Pn,detachedPlugs:zn,attachedNodesToCurrentNode:lr}=b;CORE_API.alert({alertMsg:"Item(s) have been removed",alertTime:7e3,alertType:"info",alertLabel:"Item(s) Removed",alertId:"itemRemoved"});for(const[es,Ur]of bt.entries())rn[es]===!0&&await itemStore.getState().actions.removeItemByGUID(Ur);const ar=sn.userData;let cr=_e.getPlugByName(ar.incomingPlugName),hr=a.currentStructure.getPlugByGUID(ar.receiverPlugGUID);_e.ref.position.set(sn.position.x,sn.position.y,sn.position.z),_e.ref.setRotationFromEuler(sn.rotation),_e.transform={position:sn.position,rotation:sn.quaternion},a.currentStructure.connectPlugs({incomingPlug:cr,receiverPlug:hr}),ghostStore.getState().actions.clearAllGhosts(),itemStore.getState().actions.deselectItem(),lr.map(es=>{_e.ref.parent.attach(es.ref),es.transform={position:es.ref.position,rotation:es.ref.quaternion},_e.dragging=!1,es.dragging=!1}),await attachmentStore$1.getState().actions.updateFittingSkuIds()},async revertDropItem(){const a=attachmentStore$1.getState().attachmentSystem,{draggingOnDropCollisionData:b}=s(),{node:_e,attachedChildrenGuids:bt,collidingStatus:rn,intersectingGhostObject:sn,initPosition:yn,initRotation:Pn,detachedPlugs:zn,attachedNodesToCurrentNode:lr}=b;CORE_API.alert({alertMsg:"Position of item"+_e.skuID+"is being moved to it's original position",alertTime:4e3,alertType:"info",alertLabel:"Repositioning",alertId:"itemRepositioned"});const ar=zn.neighbourDetachedPlugs;ar&&(zn.neighbourNode.detachNodeFromReceiver(),a.currentStructure.connectPlugs({incomingPlug:ar.incomingPlug,receiverPlug:ar.receiverPlug}));let cr=zn.rootDetachedPlugs.incomingPlug,hr=zn.rootDetachedPlugs.receiverPlug;_e.ref.position.set(yn.x,yn.y,yn.z),_e.ref.setRotationFromEuler(Pn);let es=new Quaternion().identity();_e.ref.getWorldQuaternion(es),_e.transform={position:yn,rotation:es},a.currentStructure.connectPlugs({incomingPlug:cr,receiverPlug:hr}),ghostStore.getState().actions.clearAllGhosts(),itemStore.getState().actions.deselectItem(),lr.map(Ur=>{_e.ref.parent.attach(Ur.ref),Ur.transform={position:Ur.ref.position,rotation:Ur.ref.quaternion},_e.dragging=!1,Ur.dragging=!1}),await attachmentStore$1.getState().actions.updateFittingSkuIds()},setCoreSettings:a=>{const{sceneSettings:b,isMobile:_e,isTouchDevice:bt,isLandscape:rn,actions:sn}=s(),yn=_e===!0?"mobile":"desktop",Pn=["showSave","showShare","showReset","showDimension","showHotspots","showInstructionsBtn","showViewInYourSpace","showContextMenu","showInstructionsOnStartup","draggableUI","clickToAddUi","textSettings","alertControl","variantsTabOrder","emptySceneTextFontSize","instructionsSettings"];for(const zn of Pn)if(zn==="draggableUI"||zn==="clickToAddUi"||zn==="emptySceneTextFontSize"||zn==="showInstructionsOnStartup"||zn==="showInstructionsBtn"||zn==="instructionsSettings"){const ar=`${zn}_${rn===!1&&bt===!0?"mobile":"desktop"}`;a[ar]!==void 0?b[zn]=a[ar]:b[ar]!==void 0&&(b[zn]=b[ar])}else if(zn==="textSettings"||zn==="variantsTabOrder"||zn==="alertControl"||zn==="outlineSettings"){if(a.hasOwnProperty(zn)){let lr=b[zn];Object.keys(lr).map(ar=>{let cr=a[zn];cr.hasOwnProperty(ar)?(ar==="visibleEdgeColor"||ar==="hiddenEdgeColor")&&(cr[ar]=new Color$1(cr[ar]).convertSRGBToLinear()):cr[ar]=lr[ar]})}}else{const lr=`${zn}_${yn}`;if(a[lr]!==void 0){let ar=`${zn}Btn`;zn=="showContextMenu"&&(ar=`${zn}`),b[ar]=a[lr]}}a.disableCart===!0&&sn.disableCart(),Object.keys(a).map(zn=>b[zn]=a[zn]),b.emptySceneText===null&&(b.emptySceneTextFontSize=_e?"1.2rem":"1.5rem",b.draggableUI===!0?b.emptySceneText="Drag an item here to get started":b.emptySceneText="Select an item to get started"),o({sceneSettings:{...b,ghostThreeColor:{r:b.ghostColor.r/255,g:b.ghostColor.g/255,b:b.ghostColor.b/255,a:b.ghostColor.a/255},draggableUiGhostThreeColorOnHover:{r:b.ghostColorOnHoverWithDraggableUi.r/255,g:b.ghostColorOnHoverWithDraggableUi.g/255,b:b.ghostColorOnHoverWithDraggableUi.b/255,a:b.ghostColorOnHoverWithDraggableUi.a/255}}})},triggerAutoFocus:(a=null)=>o(b=>({autoFocusRef:a,autoFocusTrigger:b.autoFocusTrigger+1})),requestNewScreenshot:async(a,b)=>new Promise(async(_e,bt)=>{LOGGER.info({title:"Taking a screenshot"});const{screenshotRenderer:rn,sceneRef:sn,screenshotCamera:yn,canvasSize:Pn}=s(),zn=await CORE_API.getCurrentCameraDetails();if(rn.setClearColor(16777215),yn.copy(zn),a!==null&&(yn.position.copy(a.position),yn.rotation.copy(new Euler(a.rotation.x,a.rotation.y,a.rotation.z))),b==null?rn.setSize(Pn.width,Pn.height):rn.setSize(b.width,b.height),rn.render(sn.parent,yn),rn.preserveDrawingBuffer===!1)LOGGER.warn({title:"Preserve Drawing Buffer must be enabled to take a screenshot. Please make sure to enable this within the project input data coreSettings"}),bt({success:!1,imageData:null});else{LOGGER.info({title:"Downloading the screenshot"});const lr=rn.domElement.toDataURL("image/png").replace("image/png","image/octet-stream");_e({success:!0,imageData:lr})}})}})),hotspotIdPrefix="rd",hotspotIdSeparator="_";function generateHotspotAbsoluteID(o,s){return`${hotspotIdPrefix}${hotspotIdSeparator}${o}${hotspotIdSeparator}${s}`}async function wait(o){return LOGGER.info({title:`Waiting for ${o}ms`}),new Promise((s,a)=>{setTimeout(()=>{s(!0)},o)})}function compareObjects(o,s){if(o===null||s===null)return!1;for(let a in o)if(o.hasOwnProperty(a)&&s.hasOwnProperty(a)&&o[a]!==s[a])return!1;return Object.keys(o).length===Object.keys(s).length}const saveStructureToCMS=o=>{const s={method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o)};return fetch(SAVE_CONFIG_ENDPOINT,s)},mobileCheck=function(){let o=!1;return function(s){(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(s)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(s.substr(0,4)))&&(o=!0)}(navigator.userAgent||navigator.vendor||window.opera),o};function isIpadOS(){return navigator.maxTouchPoints&&navigator.maxTouchPoints>2&&/MacIntel/.test(navigator.platform)}function tabletCheck(){const o=navigator.userAgent.toLowerCase(),s=/(ipad|tablet|(android(?!.*mobile))|(windows(?!.*phone)(.*touch))|kindle|playbook|silk|(puffin(?!.*(IP|AP|WP))))/.test(o);return s||isIpadOS()}function touchDeviceCheck(){return"ontouchstart"in window||navigator.maxTouchPoints>0||navigator.msMaxTouchPoints>0}async function getJSONFromEndpoint(o){let s={data:null,report:"",success:!1};try{const b=await(await fetch(o)).text();s.data=JSON.parse(b),s.success=!0,s.report="Successfully fetched JSON data."}catch(a){s.report=a,CORE_API.alert({alertMsg:"",alertTime:5e3,alertType:"warn",alertLabel:"Preload Failed"})}return s}const addVector=(o,s)=>new Vector3(o[0]+s[0],o[1]+s[1],o[2]+s[2]),Vec3ToArr=o=>[o.x,o.y,o.z],ArrToVec3=o=>new Vector3(o[0],o[1],o[2]),findMeshAndCloneMatFromScene=(o,s=!0)=>{let a=[];const b=coreSceneStore.getState().sceneSettings.outOfStock_EmissiveColor,_e=coreSceneStore.getState().sceneSettings.outOfStock_EmissiveIntensity;return o.traverse(bt=>{bt.isMesh&&(bt.material.userData.cloned?bt.material.userData.inStock!==s&&(s?(bt.material.emissive.set(new Color$1(255,255,255)),bt.material.emissiveIntensity=0):(bt.material.emissive.set(new Color$1(b.r,b.g,b.b)),bt.material.emissiveIntensity=_e),bt.material.userData.inStock=s):(bt.material=bt.material.clone(),bt.material.userData.inStock=s,bt.material.userData.cloned=!0,s?(bt.material.emissive.set(new Color$1(255,255,255)),bt.material.emissiveIntensity=0):(bt.material.emissive.set(new Color$1(b.r,b.g,b.b)),bt.material.emissiveIntensity=_e)),a.push(bt))}),a},filterArrWithCondition=(o,s)=>{let a=0,b=[];for(let _e=0;_e<o.length;_e++){const bt=o[_e];s(bt)?o[a++]=bt:b.push(o[_e])}return o.length=a,b},degToRad=o=>o*Math.PI/180,resolveAssetUrl=o=>{if(!o)return;if(new RegExp("^(?:[a-z+]+:)?//","i").test(o))return o;let b=o;return b=b.replaceAll("<@all-projects@>",ALL_PROJECTS_ASSET_DATA_ROOT_URL),b=b.replaceAll("<@generic-project@>",GENERIC_PROJECT_ASSET_DATA_ROOT_URL),b};function componentToHex(o){var s=o.toString(16);return s.length==1?"0"+s:s}function rgbToHex(o,s,a){return"#"+componentToHex(o)+componentToHex(s)+componentToHex(a)}function getUrlParameterByName(o,s=window.location.search){const a=new URLSearchParams(s);return Object.fromEntries(a.entries())[o]}const lightStore=create$3((o,s)=>({defaultEnvMapUrl:"<@generic-project@>/env-map/neutral.hdr",envMapUrl:"",actions:{setEnvLightMap:a=>{o(b=>({envMapUrl:a}))},processLookEnvMapOverride:a=>{const{envMapUrl:b,defaultEnvMapUrl:_e,actions:bt}=s(),rn=productDataStore$1.getState().lookData[a],sn=rn?.envMapOverride;if(!rn||!sn){bt.setEnvLightMap(_e);return}if(sn===b){LOGGER.info({title:`New Env Map Url is the same as the current ${sn}`});return}bt.setEnvLightMap(sn)}}}));var rngBrowser={exports:{}},getRandomValues=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto<"u"&&typeof window.msCrypto.getRandomValues=="function"&&msCrypto.getRandomValues.bind(msCrypto);if(getRandomValues){var rnds8=new Uint8Array(16);rngBrowser.exports=function(){return getRandomValues(rnds8),rnds8}}else{var rnds=new Array(16);rngBrowser.exports=function(){for(var s=0,a;s<16;s++)s&3||(a=Math.random()*4294967296),rnds[s]=a>>>((s&3)<<3)&255;return rnds}}var rngBrowserExports=rngBrowser.exports,byteToHex=[];for(var i$1=0;i$1<256;++i$1)byteToHex[i$1]=(i$1+256).toString(16).substr(1);function bytesToUuid$2(o,s){var a=s||0,b=byteToHex;return[b[o[a++]],b[o[a++]],b[o[a++]],b[o[a++]],"-",b[o[a++]],b[o[a++]],"-",b[o[a++]],b[o[a++]],"-",b[o[a++]],b[o[a++]],"-",b[o[a++]],b[o[a++]],b[o[a++]],b[o[a++]],b[o[a++]],b[o[a++]]].join("")}var bytesToUuid_1=bytesToUuid$2,rng$1=rngBrowserExports,bytesToUuid$1=bytesToUuid_1,_nodeId,_clockseq,_lastMSecs=0,_lastNSecs=0;function v1$2(o,s,a){var b=s&&a||0,_e=s||[];o=o||{};var bt=o.node||_nodeId,rn=o.clockseq!==void 0?o.clockseq:_clockseq;if(bt==null||rn==null){var sn=rng$1();bt==null&&(bt=_nodeId=[sn[0]|1,sn[1],sn[2],sn[3],sn[4],sn[5]]),rn==null&&(rn=_clockseq=(sn[6]<<8|sn[7])&16383)}var yn=o.msecs!==void 0?o.msecs:new Date().getTime(),Pn=o.nsecs!==void 0?o.nsecs:_lastNSecs+1,zn=yn-_lastMSecs+(Pn-_lastNSecs)/1e4;if(zn<0&&o.clockseq===void 0&&(rn=rn+1&16383),(zn<0||yn>_lastMSecs)&&o.nsecs===void 0&&(Pn=0),Pn>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");_lastMSecs=yn,_lastNSecs=Pn,_clockseq=rn,yn+=122192928e5;var lr=((yn&268435455)*1e4+Pn)%4294967296;_e[b++]=lr>>>24&255,_e[b++]=lr>>>16&255,_e[b++]=lr>>>8&255,_e[b++]=lr&255;var ar=yn/4294967296*1e4&268435455;_e[b++]=ar>>>8&255,_e[b++]=ar&255,_e[b++]=ar>>>24&15|16,_e[b++]=ar>>>16&255,_e[b++]=rn>>>8|128,_e[b++]=rn&255;for(var cr=0;cr<6;++cr)_e[b+cr]=bt[cr];return s||bytesToUuid$1(_e)}var v1_1=v1$2,rng=rngBrowserExports,bytesToUuid=bytesToUuid_1;function v4$1(o,s,a){var b=s&&a||0;typeof o=="string"&&(s=o==="binary"?new Array(16):null,o=null),o=o||{};var _e=o.random||(o.rng||rng)();if(_e[6]=_e[6]&15|64,_e[8]=_e[8]&63|128,s)for(var bt=0;bt<16;++bt)s[b+bt]=_e[bt];return s||bytesToUuid(_e)}var v4_1=v4$1,v1$1=v1_1,v4=v4_1,uuid=v4;uuid.v1=v1$1;uuid.v4=v4;var uuid_1=uuid;class Plug{constructor(s,a,b=null){this._attachedPlug=null,this._name=s.name,this._acceptedPlugTypes=s.acceptedPlugTypes,this._affectedNodes=s.affectedNodes,this._unvisualizedCount=s.unvisualizedCount,this._weight=s.weight,this._connectsToPlugTypes=s.connectsToPlugTypes,this._dependencySku=s.dependencySku,this._isDependencySkuInteractive=s.isDependencySkuInteractive,this._autoSpawnDependencyIfMissing=s.autoSpawnDependencyIfMissing,this._node=a,b?(this._comboPlugConnector=b.comboPlugConnector,this._guid=b.guid,this._isOpen=b.isOpen,this._type=b.type,this._isReceiverPlug=b.isReceiverPlug,this._attachedPlugGUID=b.attachedPlugGUID):(this._comboPlugConnector=!1,this._guid=uuid_1.v4(),this._isOpen=!0,this._type=s.type,this._isReceiverPlug=!1,this._attachedPlugGUID=null)}export(){return this.isOpen?null:{guid:this._guid,type:this._type,isOpen:this._isOpen,comboPlugConnector:this._comboPlugConnector,attachedPlugGUID:this._attachedPlugGUID,isReceiverPlug:this._isReceiverPlug}}get node(){return this._node}set comboPlugConnector(s){this._comboPlugConnector=s}get comboPlugConnector(){return this._comboPlugConnector}get attachedPlug(){return this._attachedPlug}set attachedPlug(s){this._attachedPlug=s}get attachedPlugGUID(){return this._attachedPlugGUID}set type(s){this._type=s}get type(){return this._type}get weight(){return this._weight}get unvisualizedCount(){return this.__unvisualizedCount}get affectedNodes(){return this._affectedNodes}get guid(){return this._guid}get isReceiverPlug(){return this._isReceiverPlug}get name(){return this._name}get acceptedPlugTypes(){return this._acceptedPlugTypes}set acceptedPlugTypes(s){this._acceptedPlugTypes=s}get connectsToPlugTypes(){return this._connectsToPlugTypes}set connectsToPlugTypes(s){this._connectsToPlugTypes=s}get isOpen(){return this._isOpen}attachPlug(s,a=!1){this._attachedPlug=s,this._attachedPlugGUID=s.guid,this._isOpen=!1,this._isReceiverPlug=a;const b=this,_e=this._node;if(_e.isConnectedToRoot&&a){const bt=_e.whichPlugAreWeAttachedUsing();switch(s.type){case"weighted_hider":bt.weight<b.weight&&(_e.showNodes(bt.affectedNodes)||CORE_API.coreWCRef.addEventListener(_e.guid+":modelLoaded",function(){_e.showNodes(bt.affectedNodes)},{once:!0}));break}}if(a&&s.type!==""&&s.type==b._type)switch(s.type){default:case"weighted_hider":b._weight>s.weight?s.node.hideNodes(s.affectedNodes)||CORE_API.coreWCRef.addEventListener(s.node.guid+":modelLoaded",function(){s.node.hideNodes(s.affectedNodes)},{once:!0}):b._weight<s.weight&&(_e.hideNodes(b._affectedNodes)||CORE_API.coreWCRef.addEventListener(_e.guid+":modelLoaded",function(){_e.hideNodes(b._affectedNodes)},{once:!0}));break}a&&(_e.isEndNode=!1)}async openPlug(){if(this._comboPlugConnector&&(this._comboPlugConnector=!1),this._node.isConnectedToRoot){const s=this._node.whichPlugAreWeAttachedUsing();if(s&&this._guid!==s.guid)switch(this.type){case"weighted_hider":s.type==="weighted_hider"&&s.weight<this.weight&&this._node.hideNodes(s.affectedNodes);break}}if(this._isReceiverPlug&&this._attachedPlug.type!==""&&this._attachedPlug.type==this._type)switch(this._attachedPlug.type){default:case"weighted_hider":this._weight>this._attachedPlug.weight?this._attachedPlug.node.showNodes(this._attachedPlug.affectedNodes):this._weight<this._attachedPlug.weight&&this._node.showNodes(this._affectedNodes);break}if(this._attachedPlug=null,this._attachedPlugGUID=null,this._isOpen=!0,this._isReceiverPlug&&(this._isReceiverPlug=!1,this._node.checkIfEndNode()),!!this._dependencySku&&!(this._autoSpawnDependencyIfMissing==!1||this._isDependencySkuInteractive||coreSceneStore.getState().configurationLoaded===!1))try{const s=await ghostStore.getState().actions.spawnGhostsForSkuID(this._dependencySku,!0);if(!s)return;const a=s.connectablePlugs;let b=!1;const _e=this._isDependencySkuInteractive?this.isDependencySkuInteractive===1:!1;for(const bt of a){if(bt.receiverPlug.guid!==this._guid)continue;b=!0;const rn=await itemStore.getState().actions.addItemBySkuID(this._dependencySku,a.indexOf(bt),!0,_e);rn!==null&&this._node.addMyDependenciesGUID(rn)}b||await ghostStore.getState().actions.clearAllGhosts()}catch{LOGGER.info({title:"The Plug has been removed!"})}}canAttachToPlug(s){for(let a=0;a<this._connectsToPlugTypes.length;a++)if(s._acceptedPlugTypes.includes(this._connectsToPlugTypes[a]))return!0;return!1}}let Node$1=class{#t="default";#r=!1;#i=!1;#a=!0;#n={};#o=!1;#c={};#u=[];constructor(s,a=null,b,_e){let bt=productDataStore$1.getState().productData;this._plugs=[],this._skuID=s,this._ref=null,this._dragging=!1,this._modelData=null,this._transform=null,this.#t="default",this._overrideVariant=null,this._followsParent=bt[s].followsParent,this._categoryID=bt[s].categoryID,this._replace=bt[s].replace,this._swappable=bt[s].swappable,this._price=this.#s(),this.#r=bt[s]?.ignoreInCart,a?(this._guid=a.guid,this._isEndNode=a.isEndNode,this._overrideVariant=a.overrideVariant,this.generatePlugsWithData(s,a.plugs)):(this._guid=uuid_1.v4(),this._isEndNode=!0,this.generatePlugsForNode(s)),b&&Object.keys(b).map(rn=>{if(bt[s].looks&&bt[s].looks.includes(rn)){this.#t=rn;return}})}get isRoot(){return this._skuID.toLowerCase()==="root"}updateGeometryVariant(s,a){const _e=productDataStore$1.getState().categoryData.geometryVariants;let bt=null;if(_e.map(zn=>{zn.id==s&&(bt=zn)}),!bt)return;const rn=bt.productsInCategory,yn=bt.variants[a].productsToSwitch,Pn=itemStore.getState().itemsSpawned;rn.map(zn=>{zn.products.map(lr=>{this.skuID===lr&&zn.products.map(ar=>{yn.map(cr=>{if(cr==ar){const hr=productDataStore$1.getState().actions.getProductDataById(cr);this.skuID=hr.skuID;const es=Pn[this.guid];es&&es.itemData&&Object.keys(hr).map(Ur=>{es.itemData[Ur]=hr[Ur]}),this.hideNodes(hr.geometriesToHide),this.showNodes(hr.geometriesToShow),this.updatePricing(),this.resetInStock(),inventoryStore.getState().actions.refreshInventory(Pn)}})})})})}resetInStock(){this.#n={},this.#o=!0}setInStockForRef(s){if(!this.ref)return!1;let a=this.ref.getObjectByName("GRP_RenderGeometry");return a?(a.inStock=s,!0):!1}set inStock({variantName:s,newValue:a}){if(this.#n[s]&&this.#n[s]==a||(this.#n[s]=a,s!==this.#t&&this.#o===!1))return;const b=()=>{this.setInStockForRef(a)};b()||CORE_API.coreWCRef.addEventListener(this.guid+":modelLoaded",b,{once:!0})}get myDependenciesGUID(){return this.#u}set myDependenciesGUID(s){this.#u=s}get dragging(){return this._dragging}set dragging(s){this._dragging=s}addMyDependenciesGUID(s){this.#u.push(s)}get isDependent(){return this.#i}set isDependent(s){this.#i=s}get isInteractive(){return this.#a}set isInteractive(s){this.#a=s}update(s){this._skuID=s;const a=productDataStore$1.getState().productData,b=a[s]?.plugs;if(this.ignoreInCart=a[s].ignoreInCart,!!b)for(let _e=0;_e<this._plugs.length;_e++)for(let bt=0;bt<b.length;bt++)this._plugs[_e].name==b[bt].name&&(this._plugs[_e].acceptedPlugTypes=b[bt].acceptedPlugTypes,this._plugs[_e].connectsToPlugTypes=b[bt].connectsToPlugTypes)}export(){let s={};for(let a=0;a<this._plugs.length;a++){let b=this._plugs[a].export();b&&(s[this._plugs[a].name]=b)}return{skuID:this._skuID,guid:this._guid,isEndNode:this._isEndNode,plugs:s,overrideVariant:this._overrideVariant}}get node(){return this}get swappable(){return this._swappable}get replace(){return this._replace}get ignoreInCart(){return this.#r}set ignoreInCart(s){this.#r=s}get isTypeCombo(){const s=this.whichPlugAreWeAttachedUsing();return s.type=="comboPlug"&&s.connectsToPlugTypes.length>0}get canRotate(){let s=!0;if(this.isTypeCombo)return!1;if(!this._isEndNode){const b=this.whichNodesAreAttachedToUs();if(b.length>0){let _e=!0;if(b.map(bt=>{bt.followsParent===!1&&(_e=!1)}),!_e)return!1}}let a=!1;for(let b=0;b<this.plugs.length;b++)if(!this.plugs[b].isOpen&&this.plugs[b].attachedPlug.isReceiverPlug){const _e=this.plugs[b].attachedPlug.acceptedPlugTypes;for(let bt=0;bt<this.plugs.length;bt++)if(b!=bt)for(let rn=0;rn<this.plugs[bt].connectsToPlugTypes.length;rn++)_e.includes(this.plugs[bt].connectsToPlugTypes[rn])&&(a=!0)}return s=a,s}hideNodes(s){if(!this.ref)return!1;const a=this.ref.getObjectByName("GRP_RenderGeometry"),b=this.ref.getObjectByName("GRP_ProxyMesh");return s.map(_e=>{if(a){const bt=a.getObjectByName(_e);bt&&(bt.visible=!1)}if(b){const bt=b.getObjectByName(_e);bt&&(bt.visible=!1)}}),!0}showNodes(s){if(!this.ref)return!1;const a=this.ref.getObjectByName("GRP_RenderGeometry"),b=this.ref.getObjectByName("GRP_ProxyMesh");return s.map(_e=>{if(a){const bt=a.getObjectByName(_e);bt&&(bt.visible=!0)}if(b){const bt=b.getObjectByName(_e);bt&&(bt.visible=!0)}}),!0}canConnectToPlugType(s){let a=!1;return this._plugs.map(b=>{b.connectsToPlugTypes.map(_e=>{_e==s&&(a=!0)})}),a}isConnectedToSkuID(s){let a=!1;return this._plugs.map(b=>{if(b.isOpen||a===!0)return;let _e=b.attachedPlug;!_e&&b.attachedPlugGUID&&(_e=attachmentStore$1.getState().attachmentSystem.currentStructure.getPlugByGUID(b.attachedPlugGUID)),_e.node.skuID==s&&(a=!0)}),a}get isConnectedToRoot(){return this.isConnectedToSkuID("Root")}swapRoot(){if(!this.canSwapRoot)return;const a=attachmentStore$1.getState().attachmentSystem.currentStructure,b=this.whichNodesAreAttachedToUs();let _e=null;b.map(Pn=>{Pn.followsParent===!1&&(_e=Pn)});const bt=_e.detachNodeFromReceiver();let rn=null;this._plugs.map(Pn=>{Pn.isOpen||Pn.attachedPlug.node.skuID=="Root"&&(rn=Pn.attachedPlug)});const sn=this.detachNodeFromReceiver();let yn=null;return _e.plugs.map(Pn=>{Pn.connectsToPlugTypes.includes("root")&&(yn=Pn)}),a.connectPlugs({incomingPlug:yn,receiverPlug:rn}),{neighbourDetachedPlugs:bt,rootDetachedPlugs:sn,neighbourNode:_e}}get canSwapRoot(){if(coreSceneStore.getState().sceneSettings.swappableRoot===!1)return!1;let s=!1;if(this.isConnectedToRoot&&!this._isEndNode){const b=this.whichNodesAreAttachedToUs();let _e=0,bt=null;b.map(rn=>{rn.followsParent===!1&&(_e++,bt=rn)}),_e==1?bt.canConnectToPlugType("root")&&(s=!0):_e>0&&(s=!1)}return s}get canRemove(){let s=!0;return this._isEndNode||(this.whichNodesAreAttachedToUs().map(b=>{b.followsParent===!1&&(s=!1)}),s||(s=this.canSwapRoot)),s}getComboPlugNodesAttachedToUs(){let s=[];return this.whichNodesAreAttachedToUs().forEach(b=>{b.isTypeCombo&&s.push(b);const _e=b.getComboPlugNodesAttachedToUs();_e.length>0&&(s=s.concat(_e))}),s}getAllBranchedNodesAttachedToUs(){let s=[];const a=this.whichNodesAreAttachedToUs();for(let b=0;b<a.length;b++){s.push(a[b]);const _e=a[b].getAllBranchedNodesAttachedToUs();_e.length>0&&(s=s.concat(_e))}return s}get canDrag(){let s=!0;if(this.isTypeCombo)return!1;for(let b=0;b<this._plugs.length;b++)if(this._plugs[b].isOpen==!1&&this._plugs[b].attachedPlug.type=="comboPlug")return!1;const a=this.getComboPlugNodesAttachedToUs();if(a.length>0){const b=this.getAllBranchedNodesAttachedToUs();let _e=!0;if(a.map(bt=>{const rn=bt.whichNodesIsThisComboPlugAttachedTo();let sn=!0;if(rn.map(yn=>{let Pn=!1;if(b.map(zn=>{yn.guid===zn.guid&&(Pn=!0)}),Pn==!1){sn=!1;return}}),sn==!1){_e=!1;return}}),_e==!1)return!1}return this._isEndNode||(this.whichNodesAreAttachedToUs().map(_e=>{_e.followsParent===!1&&(s=!1)}),s||(s=this.canSwapRoot)),s}get followsParent(){return this._followsParent}set followsParent(s){this._followsParent=s}resetFollowsParent(){const s=productDataStore$1.getState().productData;this._followsParent=s[this.skuID].followsParent}get currentVariant(){return this.#t==="default"?productDataStore$1.getState().actions.getProductDataById(this._skuID).lookDetails.default.id:this.#t}get price(){return this._price}set price(s){this._price=s}updatePricing(){this._price=this.#s()}#s(){let a=productDataStore$1.getState().actions.getProductDataById(this._skuID).lookDetails[this.#t]?.price;return a||(a=0),a}set currentVariant(s){this.#t=s,this._price=this.#s()}get overrideVariant(){return this._overrideVariant}set overrideVariant(s){this._overrideVariant=s,this.#t=this._overrideVariant,this._price=this.#s()}get guid(){return this._guid}get skuID(){return this._skuID}set skuID(s){this._skuID=s}get plugs(){return this._plugs}get ref(){return this._ref}set ref(s){this._ref=s}get modelData(){return this._modelData}set modelData(s){this._modelData=s;let a=new CustomEvent(this._guid+":modelLoaded",{bubbles:!0,cancelable:!1,composed:!0});const b=attachmentStore$1.getState().attachmentSystem;b.globalGeometryVariants&&Object.keys(b.globalGeometryVariants).map(_e=>{this.updateGeometryVariant(_e,b.globalGeometryVariants[_e])}),a.data={},CORE_API.coreWCRef?CORE_API.coreWCRef.dispatchEvent(a):LOGGER.warn({title:"core web component not found!"})}get isEndNode(){return this._isEndNode}set isEndNode(s){this._isEndNode=s}get categoryID(){return this._categoryID}get transform(){return this._transform}set transform(s){this._transform=s}setModelVisibility(s){s?this._ref?.scale.set(1,1,1):this._ref.scale.set(0,0,0)}checkIfEndNode(){let s=!0;for(let a=0;a<this._plugs.length;a++)this._plugs[a].isReceiverPlug&&(s=!1);this.isEndNode=s}whichNodesAreAttachedToUs(){const s=[];for(let a=0;a<this._plugs.length;a++)this._plugs[a].isReceiverPlug&&s.push(this._plugs[a].attachedPlug.node);return s}whichPlugsAreAttachedToUs(){const s=[];for(let a=0;a<this._plugs.length;a++)this._plugs[a].isReceiverPlug&&s.push({receiverPlug:this._plugs[a],incomingPlug:this._plugs[a].attachedPlug});return s}whichNodeAreWeAttachedTo(){let s=null;for(const a of this._plugs)a?.attachedPlug?.isReceiverPlug&&(s=a.attachedPlug.node);return s}whichNodesIsThisComboPlugAttachedTo(){if(!this.isTypeCombo)return[];let s=[];for(const a of this._plugs)a?.attachedPlug?.isReceiverPlug&&s.push(a.attachedPlug.node);return s}isReplaceableWithSkuId(s){const b=productDataStore$1.getState().productData[s]?.plugs;let _e=0;if(!b)return!1;for(let bt=0;bt<this._plugs.length;bt++)for(let rn=0;rn<b.length;rn++)this._plugs[bt].name==b[rn].name&&_e++;return _e==this._plugs.length}whichPlugAreWeAttachedUsing(){for(let s=0;s<this._plugs.length;s++){const a=this._plugs[s];let b=a.attachedPlug;if(!b&&a.attachedPlugGUID&&(b=attachmentStore$1.getState().attachmentSystem.currentStructure.getPlugByGUID(a.attachedPlugGUID)),!a.isOpen&&b.isReceiverPlug)return a}}whichPlugAreWeAttachedTo(){for(let s=0;s<this._plugs.length;s++)if(!this._plugs[s].isOpen&&this._plugs[s].attachedPlug.isReceiverPlug)return this._plugs[s].attachedPlug}getPlugWhichCanConnectToType(s){for(const a of this._plugs)if(a.connectsToPlugTypes.includes(s))return a;return null}getOpenPlugsWeCanAttachFrom(){let s=[];if(this.whichNodeAreWeAttachedTo())return s;for(let a=0;a<this._plugs.length;a++)this.plugs[a].isOpen&&this.plugs[a].connectsToPlugTypes.length>0&&s.push(this._plugs[a]);return s}getOpenPlugsFromNode(){let s=[];for(let a=0;a<this._plugs.length;a++)this._plugs[a].isOpen&&this._plugs[a].acceptedPlugTypes.length>0&&s.push(this._plugs[a]);return s}generatePlugsForNode(s){this._plugs=[];let a=productDataStore$1.getState().productData[s]?.plugs;if(a)for(let b=0;b<a.length;b++)if(a[b].type==="unvisualizedPlug"){const _e=a[b]?.unvisualizedCount>=0?a[b].unvisualizedCount:1e3;for(let bt=0;bt<_e;bt++){const rn=new Plug({...a[b],name:`${a[b].name}_${bt}`},this);this._plugs.push(rn)}}else{const _e=new Plug(a[b],this);this._plugs.push(_e)}}generatePlugsWithData(s,a){const b=productDataStore$1.getState().productData[s]?.plugs;b&&b.forEach(_e=>{if(_e.type==="unvisualizedPlug"){const bt=_e.unvisualizedCount&&_e.unvisualizedCount>=0?_e.unvisualizedCount:1e3;for(let rn=0;rn<bt;rn++){const sn=new Plug({..._e,name:`${_e.name}_${rn}`},this,a[`${_e.name}_${rn}`]);this._plugs.push(sn)}}else{const bt=new Plug(_e,this,a[_e.name]);this._plugs.push(bt)}})}detachNodeFromReceiver(){for(let s=0;s<this.plugs.length;s++)if(!this.plugs[s].isOpen&&this.plugs[s].attachedPlug.isReceiverPlug){const a={incomingPlug:this.plugs[s],receiverPlug:this.plugs[s].attachedPlug};return this.plugs[s].attachedPlug.openPlug(),this.plugs[s].openPlug(),a}}detachNodeCompletely(){for(let s=0;s<this._plugs.length;s++)this._plugs[s].isOpen||(this._plugs[s].attachedPlug.openPlug(),this._plugs[s].openPlug())}getPlugByName(s){for(let a=0;a<this._plugs.length;a++)if(this._plugs[a].name==s)return this._plugs[a];return null}getPlugByGUID(s){for(let a=0;a<this._plugs.length;a++)if(this._plugs[a].guid==s)return this._plugs[a];return null}async removeNode(){const s=[];for(const a of this._plugs)if(!a.isOpen){if(a.type==="comboPlug"&&a.connectsToPlugTypes.length>0){a.attachedPlug.openPlug();continue}a.attachedPlug.isReceiverPlug?a.attachedPlug.openPlug():s.push(a.attachedPlug.node.guid)}if(s.length>0)for(const a of s)itemStore.getState().actions.addToRemoveItems(a)}};const EPIGRAPH_CONFIGURATOR_CATEGORY="Epigraph - Configurator",CONFIGURATOR_LOADING={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorLoading",label:"",interaction:{nonInteraction:!0}},CONFIGURATOR_READY={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorReady",label:"",interaction:{nonInteraction:!0}},CONFIGURATOR_FAILED={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorFailed",label:"",interaction:{nonInteraction:!0}},CONFIGURATOR_REVIEW_CART_SHOWN={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorReviewCartShown",label:"",interaction:{nonInteraction:!1}},CONFIGURATOR_REVIEW_CART_HIDE={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorReviewCartHide",label:"",interaction:{nonInteraction:!1}},CONFIGURATOR_CHECKOUT={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorCheckout",label:"",interaction:{nonInteraction:!1}},CONFIGURATOR_CHECKOUT_ITEM={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorCheckoutItemDetails",label:"",interaction:{nonInteraction:!1}},CONFIGURATOR_GLOBAL_GEOMETRY_VARIANT_SWITCHED={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorGlobalGeometryVariantSwitched",label:"",interaction:{nonInteraction:!1}},CONFIGURATOR_GLOBAL_VARIANT_SWITCHED={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorGlobalVariantSwitched",label:"",interaction:{nonInteraction:!1}},CONFIGURATOR_LOCAL_VARIANT_SWITCHED={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorLocalVariantSwitched",label:"",interaction:{nonInteraction:!1}},CONFIGURATOR_LOAD_FROM_PRECONFIG={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorLoadFromPreConfiguration",label:"",interaction:{nonInteraction:!0}},CONFIGURATOR_PRECONFIGURATION_ITEM_ADDED={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"preconfigurationItemAdded",label:"",interaction:{nonInteraction:!0}},CONFIGURATOR_SCENE_RESTARTED={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorSceneRestarted",label:"",interaction:{nonInteraction:!1}},CONFIGURATOR_AR_REQUESTED={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorArRequested",label:"",interaction:{nonInteraction:!1}},CONFIGURATOR_ITEM_REMOVED={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorItemRemoved",label:"",interaction:{nonInteraction:!1}},CONFIGURATOR_ITEM_ADDED={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorItemAdded",label:"",interaction:{nonInteraction:!1}},CONFIGURATOR_INSTRUCTIONS_BTN_CLICKED={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorInstructionsBtnClicked",label:"",interaction:{nonInteraction:!1}},CONFIGURATOR_INSTRUCTIONS_COMPLETION_RATE={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorInstructionsStageCompletionRate",label:"",interaction:{nonInteraction:!1}},CONFIGURATOR_INSTRUCTIONS_SHOWN={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorInstructionsShow",label:"",interaction:{nonInteraction:!1}},CONFIGURATOR_DIMENSION_SHOWN={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorDimensionsBtnShow",label:"",interaction:{nonInteraction:!1}},CONFIGURATOR_DIMENSION_HIDE={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorDimensionsBtnHide",label:"",interaction:{nonInteraction:!1}},CONFIGURATOR_HOTSPOT_ENTER={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorHotspotEnter",label:"",interaction:{nonInteraction:!1}},CONFIGURATOR_HOTSPOT_EXIT={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorHotspotExit",label:"",interaction:{nonInteraction:!1}},CONFIGURATOR_SCENE_SHARED={type:"event",category:EPIGRAPH_CONFIGURATOR_CATEGORY,action:"configuratorSceneShared",label:"",interaction:{nonInteraction:!1}};class Structure{#t=!1;constructor(s=null,a,b){if(this._nodes=[],this._rootNode=null,LOGGER.info({title:"preloadNodes",details:s}),this.setupHookOnSceneItemsUpdated(),s){LOGGER.info({title:"PRELOAD Length-----------------:"+s.length});for(var _e=0;_e<s.length;_e++){LOGGER.info({title:"FOUND PRELOAD-----------------"});const bt=s[_e].skuID;if(bt.toLowerCase()=="root"){const sn=itemStore.getState().itemsSpawned;Object.keys(sn).length>0&&(s[_e].guid=Object.keys(sn)[0])}let rn=new Node$1(bt,s[_e],a,b);bt.toLowerCase()=="root"&&(this._rootNode=rn),this._nodes.push(rn)}}else{const bt=new Node$1("Root",null,a,b);this._rootNode=bt,this._nodes.push(bt),itemStore.getState().actions.addItemWithTransform({position:new Vector3(0,0,0),rotation:new Quaternion().identity()},"Root",this._rootNode.guid,!1)}this._boundingBoxLeeway=coreSceneStore.getState().sceneSettings.boundingBoxLeeway}async setupHookOnSceneItemsUpdated(){CORE_API.coreWCRef.addEventListener(CORE_API.EVENTS.SCENE.FittingSkuIds_Updated,()=>{DynamicHooks.hookOnSceneItemsUpdated(this._nodes,CORE_API)})}get nodes(){return this._nodes}get rootNode(){return this._rootNode}updatePricing(){for(let s=0;s<this._nodes.length;s++)this._nodes[s].updatePricing()}getCurrentItemsInReplaceableCategory(){let s={};for(const a of this._nodes)a.replace&&(s[a.categoryID]=a.skuID);return s}recalculateStructureFromNode(s){for(let a=0;a<s.plugs.length;a++)if(!s.plugs[a].isOpen&&s.plugs[a].isReceiverPlug){const b=s.plugs[a].attachedPlug.node,_e={receiverPlug:s.plugs[a],incomingPlug:s.plugs[a].attachedPlug};if(_e){const bt=this.findItemTransform(_e);bt&&(b.ref.position.set(bt.position.x,bt.position.y,bt.position.z),bt.rotation.isQuaternion===!0?b.ref.setRotationFromQuaternion(bt.rotation):bt.rotation.isEuler===!0&&b.ref.setRotationFromEuler(bt.rotation),b.transform={position:bt.position,rotation:bt.rotation})}this.recalculateStructureFromNode(b)}}rotateNode(s){const a=this.getNodeByGUID(s);let b=null,_e=null;for(let sn=0;sn<a.plugs.length;sn++)if(!_e&&!a.plugs[sn].isOpen&&a.plugs[sn].attachedPlug.isReceiverPlug){const yn=a.plugs[sn].attachedPlug.acceptedPlugTypes;_e=a.plugs[sn].attachedPlug;let Pn=[];for(let zn=sn+1;zn<a.plugs.length;zn++)Pn.push(a.plugs[zn]);for(let zn=0;zn<sn;zn++)Pn.push(a.plugs[zn]);for(let zn=0;zn<Pn.length;zn++)for(let lr=0;lr<Pn[zn].connectsToPlugTypes.length;lr++)yn.includes(Pn[zn].connectsToPlugTypes[lr])&&(b=Pn[zn])}if(!b)return;a.detachNodeFromReceiver();const{position:bt,rotation:rn}=this.findItemTransform({receiverPlug:_e,incomingPlug:b});a.ref.position.set(bt.x,bt.y,bt.z),rn.isQuaternion===!0?a.ref.setRotationFromQuaternion(rn):rn.isEuler===!0&&a.ref.setRotationFromEuler(rn),a.transform={position:a.ref.position,rotation:rn},this.connectPlugs({receiverPlug:_e,incomingPlug:b}),this.recalculateStructureFromNode(a)}async load(s){this.resolvePlugConnections(s),await this.respawnItems()}materialOverrideExists(){let s=!1;return this.nodes.map(a=>{if(a.overrideVariant)return s=!0,!0}),s}findGhostTransformForReplacement(s,a){let b=[],_e=[],bt=[];for(const rn of a){if(rn.skuID==s)continue;const sn=attachmentStore$1.getState().attachmentSystem,yn=rn.whichPlugAreWeAttachedTo(),Pn=rn.whichPlugAreWeAttachedUsing(),lr=new Node$1(s,null,sn.globalVariants,sn.globalGeometryVariants).getPlugByName(Pn.name);if(!lr)continue;const ar={incomingPlug:lr,receiverPlug:yn},{position:cr,rotation:hr}=this.findItemTransform(ar);cr&&hr&&(_e.push({position:cr,rotation:hr,incomingPlugName:ar.incomingPlug.name,receiverPlugName:ar.receiverPlug.name,incomingPlugGUID:ar.incomingPlug.guid,receiverPlugGUID:ar.receiverPlug.guid}),bt.push(ar),b.push(rn))}return{transforms:_e,connectablePlugs:bt,newNodes:b}}async findGhostTransforms(s,a){const b=this.getOpenPlugs(),_e=coreSceneStore.getState().sceneSettings.comboPlugDistanceThreshold;if(b.length<=0)return{transforms:[]};const bt=attachmentStore$1.getState().attachmentSystem,rn=productDataStore$1.getState().productData,sn=new Node$1(s,null,bt.globalVariants,bt.globalGeometryVariants),yn=this.getConnectablePlugs(sn,b);let Pn=[];if(yn.length<=0)return{transforms:[]};let zn=[],lr=[];const ar=assetStore.getState().assets.items[s].proxy.data.scene;if(!ar)return!1;let cr=ar.clone();for(let Ur=0;Ur<yn.length;Ur++){let Dr=a,{incomingPlug:zr,receiverPlug:rs}=yn[Ur],as=this.findItemTransform(yn[Ur]);if(!as)continue;let{position:os,rotation:ls}=as;if(!os||!ls)continue;cr.position.set(os.x,os.y,os.z),ls.isQuaternion===!0?cr.setRotationFromQuaternion(ls):ls.isEuler===!0&&cr.setRotationFromEuler(ls);let zs=[],ho=[];if(zr.type=="comboPlug"){if(zr.connectsToPlugTypes.length<=0)continue;const yl=zr.connectsToPlugTypes[0];let Zl=!1;if(lr.map(by=>{Zl===!0||by.length<=0||by.map(Al=>{Zl===!0||Al.incomingPlug.guid!==zr.guid||Al.incomingPlug.connectsToPlugTypes.includes(yl)&&(Zl=!0)})}),Zl===!0)continue;const Ty=zr.node.plugs;let yy=!0;if(Ty.map(by=>{if(by.type!=="comboPlug"||by.guid===zr.guid||!by.connectsToPlugTypes.includes(yl))return;let Al=!1;if(b.map(_f=>{if(rs.guid===_f.guid||!_f.acceptedPlugTypes.includes(yl)||!_f.node.ref)return;let gy=new Vector3(0,0,0);const El=_f.node.ref.getObjectByName(""+_f.name);if(!El)return;El.getWorldPosition(gy);let My=new Vector3(0,0,0);const By=cr.getObjectByName(""+by.name);if(!By)return;By.getWorldPosition(My);const lA=gy.distanceTo(My);Math.abs(lA)<_e&&(zs.push(rs.node.guid),zs.push(_f.node.guid),ho.push({receiverPlug:_f,incomingPlug:by}),Al=!0)}),Al==!1){yy=!1;return}}),!yy)continue}let ga=Dr;Array.isArray(Dr)===!0&&(ga=!1),zs.length>0&&(ga=!1,Array.isArray(Dr)===!0?zs.map(yl=>{Dr.push(yl)}):Dr=zs),rn[s].hasOwnProperty("ignoreSpawningCollision")&&(ga=rn[s].ignoreSpawningCollision),yn[Ur].receiverPlug.type=="unvisualizedPlug"&&(ga=!0),(ga?!1:this.isColliding(sn.skuID,as,yn[Ur].receiverPlug,Dr))||(zn.push({position:os,rotation:ls,incomingPlugName:yn[Ur].incomingPlug.name,receiverPlugName:yn[Ur].receiverPlug.name,incomingPlugGUID:yn[Ur].incomingPlug.guid,receiverPlugGUID:yn[Ur].receiverPlug.guid}),Pn.push(yn[Ur]),lr.push(ho))}let hr=[];for(let Ur=0;Ur<zn.length;Ur++)hr.push(sn);let es={transforms:zn,newNodes:hr,connectablePlugs:Pn,comboPlugs:lr};return es=await DynamicHooks.hookOnNewItemGhostsCollected(es,CORE_API),es}resolvePlugConnections(s){for(let a=0;a<s.length;a++)Object.keys(s[a].plugs).map(b=>{let _e=s[a].plugs[b].guid,bt=this.getPlugInNodesByGUID(_e);if(!bt||bt.attachedPlug)return;let rn=s[a].plugs[b].attachedPlugGUID,sn=this.getPlugInNodesByGUID(rn);sn&&(sn.attachedPlug||(bt.attachPlug(sn,s[a].plugs[b].isReceiverPlug),sn.attachPlug(bt,!s[a].plugs[b].isReceiverPlug)))});LOGGER.info({title:"RESOLVED PLUG CONNECTION: ",details:this})}async respawnItems(){let s=[this.rootNode];for(let bt=0;bt<s.length;bt++){let sn=s[bt].whichPlugsAreAttachedToUs();for(let yn=0;yn<sn.length;yn++){if(sn[yn].incomingPlug.type=="comboPlug"&&sn[yn].incomingPlug.connectsToPlugTypes.length>0&&!sn[yn].incomingPlug.comboPlugConnector)continue;let Pn=this.findItemTransformForPreload(sn[yn],sn[yn].receiverPlug.node.transform);Pn?await itemStore.getState().actions.addItemWithTransform(Pn,sn[yn].incomingPlug.node.skuID,sn[yn].incomingPlug.node.guid):LOGGER.warn({title:"Problem finding plug transform! "+sn[yn].name}),sn[yn].incomingPlug.node.transform=Pn,s.push(sn[yn].incomingPlug.node)}}const a=await CORE_API.getCartItemsAsync();CORE_API.fireEvent(CORE_API.EVENTS.SCENE.SavedConfiguration_Loaded,{...a}),coreSceneStore.getState().actions.triggerAutoFocus(),hotspotStore$1.getState().actions.checkHotspotHealth();const b=coreSceneStore.getState().preconfigurationLoaded==!1&&coreSceneStore.getState().sceneHasDefaultConfigurationID==!1,_e=coreSceneStore.getState().configurationLoaded==!1&&coreSceneStore.getState().preconfigurationLoaded==!0&&coreSceneStore.getState().configurationLoadedOnRestart==!0;if(b||_e){let bt=Object.assign({},CONFIGURATOR_LOAD_FROM_PRECONFIG);bt.parameters={project_id:`${CORE_API.projectId}`,...a},CORE_API.sendAnalyticsEvent(bt)}}getPlugInNodesByGUID(s){for(let a=0;a<this._nodes.length;a++){let b=this._nodes[a].getPlugByGUID(s);if(b)return b}return null}export(){let s=[];for(let a=0;a<this._nodes.length;a++){let b=this._nodes[a].export();b&&s.push(b)}return s}async clear(){return new Promise(async(s,a)=>{!this._rootNode&&this._rootNode.isEndNode&&s(!0);let b=null;const _e=this._rootNode.whichNodesAreAttachedToUs();_e.length>0&&(b=_e[0]),this.#t=!0,CORE_API.coreWCRef.addEventListener(CORE_API.EVENTS.SCENE.Scene_Cleared,bt=>s(bt.data),{once:!0}),b?CORE_API.removeItemByGUID(b.guid,!0):(await wait(500),s(!0))})}getNodeByGUID(s){for(let a=0;a<this._nodes.length;a++)if(this._nodes[a].guid==s)return this._nodes[a];return null}getPlugByGUID(s){for(const a of this._nodes){const b=a.getPlugByGUID(s);if(b)return b}return null}findItemTransformForPreload(s,a){let{receiverPlug:b,incomingPlug:_e}=s,bt=b,rn=_e;if(bt.node.skuID=="Root")return this.findItemTransformRoot(s);let sn=null,yn=null,Pn=new Object3D,zn=assetStore.getState().assets.items[bt.node.skuID].proxy.data.scene.clone();Pn.add(zn);let{position:lr,rotation:ar}=a;if(zn.position.set(lr.x,lr.y,lr.z),ar.isQuaternion===!0?zn.setRotationFromQuaternion(ar):ar.isEuler===!0&&zn.setRotationFromEuler(ar),yn=zn,!yn||(sn=yn.getObjectByName(bt.name),!sn))return;let cr=new Vector3(0,0,0);sn.getWorldPosition(cr);let hr=new Quaternion().identity();sn.getWorldQuaternion(hr);let es=new Object3D;sn.add(es);let Ur=assetStore.getState().assets.items[rn.node.skuID].proxy.data.scene.clone();Ur.position.set(cr.x,cr.y,cr.z),Ur.applyQuaternion(hr);let Dr=new Vector3;Dr.copy(zn.up).applyQuaternion(yn.quaternion);let zr=new Vector3;zr.copy(Ur.up).applyQuaternion(hr),zr.negate();let rs=new Quaternion().setFromUnitVectors(Dr,zr);Dr.round(),zr.round();let as=Dr.dot(zr);as!==1&&as!==-1&&Ur.applyQuaternion(rs);let os=Ur.getObjectByName(rn.name),ls=new Quaternion().identity();os.getWorldQuaternion(ls);let zs=new Vector3(0,1,0);zs.applyQuaternion(ls);let ho=new Vector3(0,1,0);ho.applyQuaternion(hr),ho.negate();let ga=new Quaternion().setFromUnitVectors(zs,ho);if(zs.round(),ho.round(),zs.dot(ho)!==-1)Ur.applyQuaternion(ga);else{let Ty=new Vector3(0,1,0),yy=ho.dot(Ty);if(yy!==1&&yy!==-1)Ur.rotateOnAxis(Ty,Math.PI);else{let by=new Vector3(0,0,1),Al=ho.dot(by);if(Al!==1&&Al!==-1)Ur.rotateOnAxis(by,Math.PI);else{let _f=new Vector3(1,0,0),gy=ho.dot(_f);gy!==1&&gy!==-1&&Ur.rotateOnAxis(_f,Math.PI)}}}let go=Ur.getObjectByName(rn.name),yl=new Vector3(go.position.x,go.position.y,go.position.z);Ur.translateX(-yl.x),Ur.translateY(-yl.y),Ur.translateZ(-yl.z);let Zl=new Vector3(0,0,0);Ur.getWorldPosition(Zl);let _d=new Quaternion().identity();return Ur.getWorldQuaternion(_d),Ur=null,{position:Zl,rotation:_d}}findItemTransformRoot(s){let{receiverPlug:a,incomingPlug:b}=s,_e=b;const bt=new Object3D;let rn=bt,sn=new Vector3(0,0,0);rn.getWorldPosition(sn);let yn=new Quaternion().identity(),Pn=new Object3D;Pn.position.set(0,0,0),bt.add(Pn);let zn=assetStore.getState().assets.items[_e.node.skuID].proxy.data.scene.clone();Pn.attach(zn),zn.translateX(sn.x),zn.translateY(sn.y),zn.translateZ(sn.z);let lr=zn.getObjectByName(_e.name),ar=new Quaternion().identity();lr&&lr.getWorldQuaternion(ar);const cr=new Vector3(0,1,0);cr.applyQuaternion(ar);const hr=new Vector3(0,1,0);hr.applyQuaternion(yn);const es=hr.angleTo(cr),Ur=new Vector3(0,0,0);Ur.crossVectors(hr,cr),Ur.round(),Ur.length()!==0&&zn.rotateOnAxis(Ur,es);var Dr=new Matrix4().extractRotation(zn.matrixWorld);let zr=new Vector3(0,0,0);lr&&zr.set(lr.position.x,lr.position.y,lr.position.z),zr.applyMatrix4(Dr),zn.translateX(-zr.x),zn.translateY(-zr.y),zn.translateZ(-zr.z);let rs=new Vector3(0,0,0);zn.getWorldPosition(rs);let as=new Quaternion().identity();return zn.getWorldQuaternion(as),Pn.remove(zn),Pn=null,zn=null,{position:rs,rotation:as}}findItemTransform(s){let{receiverPlug:a,incomingPlug:b}=s,_e=a,bt=b;if(_e.node.isRoot)return this.findItemTransformRoot(s);const rn=_e.node.transform;if(!rn)return;const sn=assetStore.getState().assets.items[_e.node.skuID].proxy.data.scene.clone(),yn=new Object3D;yn.position.set(rn.position.x,rn.position.y,rn.position.z),rn.rotation.isQuaternion===!0?yn.setRotationFromQuaternion(rn.rotation):rn.rotation.isEuler===!0&&yn.setRotationFromEuler(rn.rotation),yn.add(sn);let Pn=yn.getObjectByName(""+_e.name);if(!Pn){LOGGER.error({title:"Plug: "+_e.name+" doesn't exist in "+_e.node.skuID});return}let zn=new Vector3(0,1,0);Pn.getWorldPosition(zn);let lr=new Quaternion().identity();Pn.getWorldQuaternion(lr);let ar=assetStore.getState().assets.items[bt.node.skuID].proxy.data.scene.clone();ar.position.set(zn.x,zn.y,zn.z),ar.applyQuaternion(lr);let cr=new Vector3;cr.copy(sn.up).applyQuaternion(yn.quaternion);let hr=new Vector3;hr.copy(ar.up).applyQuaternion(lr),hr.negate();let es=new Quaternion().setFromUnitVectors(cr,hr);cr.round(),hr.round();let Ur=cr.dot(hr);Ur!==1&&Ur!==-1&&ar.applyQuaternion(es);let Dr=ar.getObjectByName(bt.name);if(!Dr){LOGGER.error({title:"Plug: "+bt.name+" doesn't exist in "+bt.node.skuID});return}let zr=new Quaternion().identity();Dr.getWorldQuaternion(zr);let rs=new Vector3(0,1,0);rs.applyQuaternion(zr);let as=new Vector3(0,1,0);as.applyQuaternion(lr),as.negate();let os=new Quaternion().setFromUnitVectors(rs,as);if(rs.round(),as.round(),rs.dot(as)!==-1)ar.applyQuaternion(os);else{let go=new Vector3(0,1,0),yl=as.dot(go);if(yl!==1&&yl!==-1)ar.rotateOnAxis(go,Math.PI);else{let Zl=new Vector3(0,0,1),_d=as.dot(Zl);if(_d!==1&&_d!==-1)ar.rotateOnAxis(Zl,Math.PI);else{let Ty=new Vector3(1,0,0),yy=as.dot(Ty);yy!==1&&yy!==-1&&ar.rotateOnAxis(Ty,Math.PI)}}}let zs=ar.getObjectByName(bt.name),ho=new Vector3(zs.position.x,zs.position.y,zs.position.z);ar.translateX(-ho.x),ar.translateY(-ho.y),ar.translateZ(-ho.z);let ga=new Vector3(0,0,0);ar.getWorldPosition(ga);let mo=new Quaternion().identity();return ar.getWorldQuaternion(mo),yn.remove(sn),ar=null,{position:ga,rotation:mo}}getSpawningRequirementForSkuID(s){let a=[];const b=productDataStore$1.getState().productData,_e=b[s];if(!_e)return a;const bt=[];return _e.plugs.map(rn=>{rn.connectsToPlugTypes.map(sn=>{bt.push(sn)})}),Object.keys(b).map(rn=>{for(let sn=0;sn<b[rn].plugs.length;sn++){const yn=b[rn].plugs[sn].acceptedPlugTypes;for(let Pn=0;Pn<yn.length;Pn++)bt.map(zn=>{zn==yn[Pn]&&!a.includes(rn)&&a.push(rn)})}}),a}getConnectablePlugs(s,a){let b=[],_e=s.getOpenPlugsWeCanAttachFrom();for(let bt=0;bt<_e.length;bt++)for(let rn=0;rn<a.length;rn++){let sn=!1;for(let Pn=0;Pn<b.length;Pn++)if(b[Pn].receiverPlug.guid==a[rn].guid&&b[Pn].incomingPlug.type!="comboPlug"){sn=!0;break}if(sn)continue;_e[bt].canAttachToPlug(a[rn])&&b.push({incomingPlug:_e[bt],receiverPlug:a[rn]})}return b}getOpenPlugs(){let s=[];return this._nodes.map(a=>{if(a.dragging===!0)return;let b=a.getOpenPlugsFromNode();s=s.concat(b)}),s}checkCollisionforGUID(s,a=[]){if(coreSceneStore.getState().sceneSettings.disableCollider)return!1;const b=itemStore.getState().itemsSpawned,_e=productDataStore$1.getState().productData;if(!b[s])return!1;const rn=this.getNodeByGUID(s);if(!rn||!rn.ref||_e[rn.skuID].disableCollider)return!1;let sn=new Vector3;rn.ref.getWorldPosition(sn);let yn=new Quaternion;rn.ref.getWorldQuaternion(yn);const Pn={position:sn,rotation:yn},zn=rn.whichPlugAreWeAttachedTo();return zn==null?!1:this.isColliding(rn.skuID,Pn,zn,a)}isColliding(s,{position:a,rotation:b},_e,bt=[]){const rn=assetStore.getState().assets.items[s].proxy.data.scene,sn=productDataStore$1.getState().productData;if(!rn)return!1;let yn=rn.clone();yn.position.set(a.x,a.y,a.z),b.isQuaternion===!0?yn.setRotationFromQuaternion(b):b.isEuler===!0&&yn.setRotationFromEuler(b);let Pn=new Box3().setFromObject(yn);var zn=new Vector3;Pn.getCenter(zn);let lr=new Object3D;lr.position.set(zn.x,zn.y,zn.z),lr.attach(yn),lr.scale.set(this._boundingBoxLeeway,this._boundingBoxLeeway,this._boundingBoxLeeway),Pn=new Box3().setFromObject(lr);const ar=[];if(this._nodes.forEach(hr=>{if(_e.node.guid==hr.guid||Array.isArray(bt)===!0&&bt.includes(hr.guid)||!hr.ref||(sn[hr.skuID].hasOwnProperty("disableCollider")?sn[hr.skuID].disableCollider:coreSceneStore.getState().sceneSettings.disableCollider))return;const es=hr.ref.getObjectByName("GRP_ProxyMesh");es&&ar.push(es)}),ar.length<=0)return!1;let cr=!1;return ar.forEach(hr=>{if(cr)return;let es=new Box3().setFromObject(hr);if(Pn.intersectsBox(es)){cr=!0;return}}),lr.clear(),yn=null,lr=null,Pn=null,cr}boxOverlapPercent(s,a){if(s.containsBox(a)||a.containsBox(s))return 100;if(!(s.min.x<a.max.x||a.min.x<s.max.x))return 0;let b=new Vector3(0,0,0);s.getSize(b),b.x*b.y*b.z;let _e=new Vector3(0,0,0);a.getSize(_e),_e.x*_e.y*_e.z}checkInsideOutCollision(s,a,b){let _e=a.position.clone(),bt=new Float32Array(b.attributes.position.array),rn=bt.length/3;for(let sn=0;sn<rn;sn++){let yn=new Vector3(bt[sn*3],bt[sn*3+1],bt[sn*3+2]),Pn=yn.add(a.position);Pn=yn.applyQuaternion(a.quaternion);let zn=Pn.sub(a.position);const ar=new Raycaster(_e,zn.clone().normalize()).intersectObjects(s),cr=ar.length>0,hr=ar[0].distance<zn.length();if(cr&&hr)return!0}return!1}addNode(s){this._nodes.push(s)}getFirstNodeByCategoryID(s){for(var a=0;a<this._nodes.length;a++)if(this._nodes[a]._categoryID==s)return this._nodes[a];return null}getNodesBySKUID(s){let a=[];for(var b=0;b<this._nodes.length;b++)this._nodes[b].skuID==s&&a.push(this._nodes[b]);return a}getNodesByCategoryID(s){let a=[];for(var b=0;b<this._nodes.length;b++)this._nodes[b]._categoryID==s&&a.push(this._nodes[b]);return a}async connectPlugs({incomingPlug:s,receiverPlug:a}){s.attachPlug(a,!1),a.attachPlug(s,!0),await attachmentStore$1.getState().actions.toggleStructureUpdated()}removeNodeByGUID(s){for(let a=0;a<this._nodes.length;a++)if(this._nodes[a].guid==s){this._nodes[a].removeNode(),this._nodes.splice(a,1);break}this._nodes.length==1&&this.#t&&CORE_API.fireEvent(CORE_API.EVENTS.SCENE.Scene_Cleared,!0),attachmentStore$1.getState().actions.updateFittingSkuIds(),attachmentStore$1.getState().actions.toggleStructureUpdated()}async removeNodeFromStructure(s){for(let a=0;a<this._nodes.length;a++)if(this._nodes[a].guid==s.guid){this._nodes.splice(a,1);break}await attachmentStore$1.getState().actions.toggleStructureUpdated()}}class AttachmentSystem{constructor(){this._globalVariants={},this._globalGeometryVariants={},productDataStore$1.getState().categoryData.geometryVariants.map(s=>{this._globalGeometryVariants[s.id]=s.defaultVariant}),productDataStore$1.getState().categoryData.color.map(s=>{this._globalVariants[s.id]=s.defaultLook}),this._currentStructure=new Structure(null,this._globalVariants,this._globalGeometryVariants);for(const[s,a]of Object.entries(this._globalVariants))this.switchGlobalVariant(s,a);for(const[s,a]of Object.entries(this._globalGeometryVariants))this.switchGlobalGeometryVariant(s,a)}get globalGeometryVariants(){return this._globalGeometryVariants}get globalVariants(){return this._globalVariants}get currentStructure(){return this._currentStructure}getClientProductId(s,a){let b;return b=productDataStore$1.getState()?.productData[s]?.lookDetails[a],b?.clientProductId?b?.clientProductId:""}getCartItems(){let s=[];const a=inventoryStore.getState().inventoryData;this.currentStructure.nodes.map(bt=>{if(bt.skuID=="Root"||bt.ignoreInCart===!0)return;let rn=!1;if(s.map(Pn=>{const zn=a[Pn.skuID];if(Pn.skuID==bt.skuID&&Pn.currentVariant==bt.currentVariant){Pn.count++,Pn.countAvailable=zn[bt.currentVariant].countAvailable,Pn.countUnavailable=zn[bt.currentVariant].countUnavailable,Pn.price=bt.price*Pn.count,rn=!0;return}}),rn===!0)return;let sn={};sn.skuID=bt.skuID,sn.currentVariant=bt.currentVariant,sn.clientProductId=this.getClientProductId(sn.skuID,sn.currentVariant),sn.count=1;const yn=a[sn.skuID];sn.price=bt.price,sn.countAvailable=yn[bt.currentVariant].countAvailable,sn.countUnavailable=yn[bt.currentVariant].countUnavailable,s.push(sn)});let b=0;for(const bt of s)b=b+bt.price;return{cartItems:s,details:{total:b.toFixed(2)}}}async getCartItemsAsync(){let s=[];const a=inventoryStore.getState().inventoryData;this.currentStructure.nodes.map(bt=>{if(bt.skuID=="Root"||bt.ignoreInCart===!0)return;let rn=!1;if(s.map(Pn=>{const zn=a[Pn.skuID];if(Pn.skuID==bt.skuID&&Pn.currentVariant==bt.currentVariant){Pn.count++,Pn.countAvailable=zn[bt.currentVariant].countAvailable,Pn.countUnavailable=zn[bt.currentVariant].countUnavailable,Pn.price=bt.price*Pn.count,rn=!0;return}}),rn===!0)return;let sn={};sn.skuID=bt.skuID,sn.currentVariant=bt.currentVariant,sn.clientProductId=this.getClientProductId(sn.skuID,sn.currentVariant),sn.count=1;const yn=a[sn.skuID];sn.price=bt.price,sn.countAvailable=yn[bt.currentVariant].countAvailable,sn.countUnavailable=yn[bt.currentVariant].countUnavailable,s.push(sn)}),s=await DynamicHooks.hookOnCartItemsCollected(s,CORE_API);let b=0;for(const bt of s)b=b+bt.price;return{cartItems:s,details:{total:b.toFixed(2)}}}async getFittingSKUIDs(){const s=productDataStore$1.getState().productData;if(!this.currentStructure)return;const a=coreSceneStore.getState().sceneSettings.draggableUI;let b=this.currentStructure.nodes,_e=[],bt=[],rn=[],sn=[];if(b.map(Pn=>{sn.push(Pn.skuID),Pn.plugs.map(zn=>{if(!zn.isOpen){zn.attachedPlug.node.replace&&zn.acceptedPlugTypes.map(lr=>{bt.includes(lr)||bt.push(lr)});return}zn.acceptedPlugTypes.map(lr=>{_e.includes(lr)||_e.push(lr)})})}),_e.length<=0&&bt.length<=0)return[];Object.keys(s).map(Pn=>{!s[Pn].plugs||rn.includes(Pn)||s[Pn].plugs.map(zn=>{rn.includes(Pn)||zn.connectsToPlugTypes.map(lr=>{if(!rn.includes(Pn)){if(bt.includes(lr)){if(!sn.includes(Pn)||a){let ar=this.currentStructure.getNodesByCategoryID(s[Pn].categoryID);for(const cr of ar){if(rn.includes(Pn)||cr.skuID==Pn)continue;let hr=!0,es=!1;cr?.plugs.map(Ur=>{!Ur.isOpen&&Ur.isReceiverPlug&&(es=!0,hr=!1,s[Pn].plugs.map(Dr=>{Dr.name==Ur.name&&Ur.attachedPlug.connectsToPlugTypes.map(zr=>{Dr.acceptedPlugTypes.includes(zr)&&(hr=!0)})}))}),(hr||!es)&&rn.push(Pn)}}}else if(_e.includes(lr)){const ar=this.currentStructure.getFirstNodeByCategoryID(s[Pn].categoryID);if(ar&&ar.replace)return;rn.push(Pn)}}})})});let yn=[];for(const Pn of rn){if(yn.includes(Pn))continue;if(s[Pn].replace){yn.push(Pn);continue}const{transforms:zn,newNodes:lr,connectablePlugs:ar}=await this.currentStructure.findGhostTransforms(Pn,coreSceneStore.getState().sceneSettings.ignoreSpawningCollision);zn.length>0&&yn.push(Pn)}for(const Pn of yn)s[Pn].replace;return yn}async removeAllVariantOverrides(){let s=this._currentStructure.nodes,a=productDataStore$1.getState().productData,b=itemStore.getState().itemsSpawned;await s.map(async _e=>{if(!_e.overrideVariant||(_e.overrideVariant=null,!a[_e.skuID].looks))return;let bt=null;Object.keys(this._globalVariants).map(rn=>{a[_e.skuID].looks.includes(this._globalVariants[rn])&&bt==null&&(bt=this._globalVariants[rn])}),bt&&await itemStore.getState().actions.switchToVariant(b[_e.guid].itemData,bt)}),CORE_API.alert({alertMsg:"Changes to individual items in the scene have been cleared",alertTime:6e3,alertType:"info",alertLabel:"Overrides Removed",alertId:"overridesRemoved"}),CORE_API.fireEvent(CORE_API.EVENTS.SCENE.MaterialOverrides_Exists,!1)}async switchGlobalGeometryVariant(s,a){const _e=productDataStore$1.getState().categoryData.geometryVariants;let bt=null;if(_e.map(ar=>{ar.id==s&&(bt=ar)}),!bt)return;const rn=bt.productsInCategory,yn=bt.variants[a].productsToSwitch,Pn=itemStore.getState().itemsSpawned;let zn=productDataStore$1.getState().categoryData;yn.map(ar=>{rn.map(cr=>{let hr=!1;cr.products.map(es=>{ar==es&&(hr=!0)}),hr&&zn.build.map(es=>{cr.products.map(Ur=>{es.skus.map((Dr,zr)=>{es.skus[zr]==Ur&&(es.skus[zr]=ar)})})})})}),this._currentStructure.nodes.map(ar=>{rn.map(cr=>{cr.products.map(hr=>{ar.skuID==hr&&ar.ref!==null&&cr.products.map(es=>{yn.map(Ur=>{if(Ur==es){const Dr=productDataStore$1.getState().actions.getProductDataById(Ur);let zr=Dr.geometriesToHide;ar.plugs.map(as=>{!as.isOpen&&as.attachedPlug&&as.type=="weighted_hider"&&as.attachedPlug.weight>as.weight&&(zr=zr.concat(as.affectedNodes))}),ar.showNodes(Dr.geometriesToShow),ar.hideNodes(zr),ar.skuID=Ur;const rs=Pn[ar.guid];rs&&rs.itemData&&Object.keys(Dr).map(as=>{rs.itemData[as]=Dr[as]}),ar.resetInStock(),ar.updatePricing()}})})})})}),this._globalGeometryVariants[s]=a,hotspotStore$1.getState().actions.checkHotspotHealth(),inventoryStore.getState().actions.refreshInventory(Pn),productDataStore$1.setState({categoryData:zn}),CORE_API.fireEvent(CORE_API.EVENTS.SCENE.CategoryData_Updated,zn),CORE_API.fireEvent(CORE_API.EVENTS.SCENE.GlobalGeometryVariant_Updated,this._globalGeometryVariants);const lr=await this.getCartItemsAsync();lr&&CORE_API.fireEvent(CORE_API.EVENTS.SCENE.CartItems_Updated,lr)}async switchGlobalVariant(s,a){this._globalVariants[s]=a;const b=itemStore.getState().actions;let _e=itemStore.getState().itemsSpawned;for(let yn=0;yn<Object.keys(_e).length;yn++){let Pn=_e[Object.keys(_e)[yn]];if(Pn.itemData.looks&&Pn.itemData.looks.includes(a)){let zn=this._currentStructure.getNodeByGUID(Pn.itemData.guid);zn&&!zn.overrideVariant&&await b.switchToVariant(Pn.itemData,a)}}const bt=productDataStore$1.getState().lookData;lightStore.getState().actions.processLookEnvMapOverride(a);const rn=s;Object.keys(_e).length>0&&CORE_API.alert({alertMsg:rn.charAt(0).toUpperCase()+rn.slice(1)+" was successfully switched to "+bt[a].label+".",alertTime:3e3,alertType:"success",alertLabel:`${rn} Changed`,alertId:"materialVariantChanged"}),CORE_API.fireEvent(CORE_API.EVENTS.SCENE.GlobalVariant_Updated,this._globalVariants),itemStore.setState({variantChangeAlert:!itemStore.getState().variantChangeAlert});const sn=await this.getCartItemsAsync();sn&&CORE_API.fireEvent(CORE_API.EVENTS.SCENE.CartItems_Updated,sn)}async#t(s){if(!s)return;LOGGER.info({title:"Structure to load",details:s}),delete this._currentStructure,this._globalVariants={...s.globalVariants},this._globalGeometryVariants=s.globalGeometryVariants?{...s.globalGeometryVariants}:{};const a=[...s.structure];this._currentStructure=new Structure(a,this._globalVariants,this._globalGeometryVariants);for(const[b,_e]of Object.entries(this._globalVariants))this.switchGlobalVariant(b,_e);for(const[b,_e]of Object.entries(this._globalGeometryVariants))this.switchGlobalGeometryVariant(b,_e);LOGGER.info({title:"Structure Loading..."}),await this._currentStructure.load(a),LOGGER.info({title:"Structure Loaded."})}async loadStructure(s){s&&(CORE_API.fireEvent(CORE_API.EVENTS.UI.PreloadScreen_Show),coreSceneStore.setState({configurationLoaded:!1}),await wait(500),await this._currentStructure.clear(),await this.#t(s),coreSceneStore.getState().preconfigurationLoaded?CORE_API.fireEvent(CORE_API.EVENTS.UI.PreloadScreen_Hide):coreSceneStore.setState({preconfigurationLoaded:!0}),coreSceneStore.getState().configurationLoadedOnRestart||coreSceneStore.setState({configurationLoadedOnRestart:!0}),coreSceneStore.setState({configurationLoaded:!0}),await attachmentStore$1.getState().actions.toggleStructureUpdated())}export(){return{structure:this._currentStructure.export(),globalVariants:this._globalVariants,globalGeometryVariants:this._globalGeometryVariants}}async clear(){CORE_API.fireEvent(CORE_API.EVENTS.UI.PreloadScreen_Show),this._currentStructure.clear(),CORE_API.fireEvent(CORE_API.EVENTS.UI.PreloadScreen_Hide)}async restart(){LOGGER.warn({title:"Restarting the Scene!!"}),itemStore.getState().selectedItemData&&itemStore.getState().actions.deselectItem();const s=attachmentStore$1.getState().defaultConfig;coreSceneStore.setState({configurationLoaded:!1,configurationLoadedOnRestart:!1}),CORE_API.fireEvent(CORE_API.EVENTS.UI.PreloadScreen_Show),await wait(500),await this._currentStructure.clear(),await this.#t(s),await attachmentStore$1.getState().actions.toggleStructureUpdated(),coreSceneStore.setState({configurationLoaded:!0,configurationLoadedOnRestart:!0}),CORE_API.fireEvent(CORE_API.EVENTS.UI.PreloadScreen_Hide)}}const attachmentStore=create$3((o,s)=>({attachmentSystem:null,defaultConfig:null,structureUpdated:!1,colliderMeshRef:null,placeholderRef:null,draggingItem:null,snappingThreshold:.5,actions:{initializeAttachmentSystem:async()=>{const{actions:a,defaultConfig:b}=s();LOGGER.info({title:"Initializing Attachment System!"});const _e=await new AttachmentSystem;o({attachmentSystem:_e}),await a.updateFittingSkuIds(),await a.toggleStructureUpdated()},loadSavedStructureFromConfigID:async a=>{LOGGER.info({title:"Fetching Structure Using ConfigID!"});const b=await getJSONFromEndpoint(FETCH_CONFIG_ENDPOINT+a);return b.success===!1?null:b.data},loadDefaultStructure:async()=>{const{actions:a,defaultConfig:b,attachmentSystem:_e}=s();LOGGER.info({title:"Loading Default Structure!"}),await a.loadStructure(b)},updateFittingSkuIds:async()=>{const a=await attachmentStore.getState().attachmentSystem.getFittingSKUIDs();a&&(itemStore.setState({fittingSkuIds:[...a]}),CORE_API.fireEvent(CORE_API.EVENTS.SCENE.FittingSkuIds_Updated,{skuids:a}))},toggleStructureUpdated:async()=>{const{attachmentSystem:a}=s();o(_e=>({structureUpdated:!_e.structureUpdated})),CORE_API.fireEvent(CORE_API.EVENTS.SCENE.ReplaceableCategory_Updated,a.currentStructure.getCurrentItemsInReplaceableCategory());const b=await a.getCartItemsAsync();b&&CORE_API.fireEvent(CORE_API.EVENTS.SCENE.CartItems_Updated,b)},loadStructure:async a=>{const{attachmentSystem:b}=s();LOGGER.info({title:"Loading Structure!"}),b&&coreSceneStore.getState().configurationLoaded!==!1&&await b.loadStructure(a)},export:()=>{const{attachmentSystem:a}=s();if(a)return a.export()}}})),attachmentStore$1=attachmentStore,productDataStore=create$3((o,s)=>({productData:{},categoryData:{},lookData:{},hotspotsData:{},endpoints:{},assetsData:void 0,actions:{getCurrentPricingInfo:()=>{const{productData:a}=s();let b={};return Object.keys(a).map(_e=>{if(_e.toLowerCase()==="root")return;let bt=a[_e].lookDetails,rn={};Object.keys(bt).map(sn=>{sn!="default"&&(rn[sn]=bt[sn].price)}),b[_e]=rn}),b},updatePricingForAllProducts:a=>{const{actions:b}=s();Object.keys(a).map(_e=>{let bt=a[_e];Object.keys(bt).map(rn=>{b.updatePricingForProduct(_e,rn,bt[rn])})})},updatePricingForProduct:(a,b,_e)=>{const{productData:bt}=s();let rn=bt[a];if(!rn||!rn.lookDetails)return;let sn=rn.lookDetails[b];if(!sn)return;sn.price=_e,attachmentStore$1.getState().attachmentSystem.currentStructure.getNodesBySKUID(a).map(zn=>zn.updatePricing())},setProductData:a=>{let b={};a&&Object.keys(a).map(_e=>{const bt=a[_e];if(bt.skuID=_e,bt.skuID.toLowerCase()==="root"){bt.lookDetails={default:{title:"",description:"",productPageUrl:"",thumbnails:{high:"",low:""},price:0}},bt.defaultVariant="default";return}if(bt?.lookDetails){const rn=bt.lookDetails;let sn=Object.keys(bt.lookDetails);if(sn.includes("default")){const Pn=sn.indexOf("default");sn.splice(Pn,1)}bt.looks=sn,Object.keys(bt.lookDetails).map(Pn=>{let zn=bt.lookDetails[Pn];zn.inventory===void 0&&(zn.inventory=DEFAULT_INVENTORY),zn.price===void 0&&(zn.price=DEFAULT_PRODUCT_PRICE),b[_e]={...b[_e],[Pn]:{inventory:DEFAULT_INVENTORY,inScene:[]}}});let yn=bt?.defaultVariant;yn||(LOGGER.warn({title:`No defaultVariant set for ${bt.skuID}. Attempting to auto resolve but the colour variants behaviour might be unexpected!`}),yn=Object.keys(bt.lookDetails).sort()[0],LOGGER.warn({title:"Auto resolved default look ID: "+yn})),sn.includes(yn)?(bt.lookDetails.default=rn[yn],bt.lookDetails.default.id=yn):(LOGGER.error({title:`Default look [ ${yn} ] doesn't exist for: ${_e}. Please make sure to select a default variant in Input Data for this project`}),bt.lookDetails.default=null)}}),LOGGER.info({title:"PRODUCT DATA: ",details:a}),inventoryStore.setState({inventoryData:b}),o({productData:a})},setCategoryData:a=>{const{productData:b}=s();a.geometryVariants!==void 0&&a.geometryVariants.map(_e=>{_e.defaultVariant===void 0&&Object.keys(_e.variants).length>0&&(_e.defaultVariant=Object.keys(_e.variants)[0])}),a.color!==void 0&&a.color.map(_e=>{(_e.defaultLook===void 0&&_e.looks.length>0||!_e.looks.includes(_e.defaultLook))&&(_e.defaultLook=_e.looks[0])}),o({categoryData:a}),a.build!==void 0&&a.build.map(_e=>{_e.skus.map(bt=>{b[bt].categoryID=_e.categoryID,b[bt].categoryLabel=_e.label,b[bt].swappable=_e.swappable?_e.swappable:!1,b[bt].replace=_e.replace})})},getProductDataById:a=>{const{productData:b}=s();let _e=null;return b[a]&&(_e=b[a]),_e},setLookData:a=>o({lookData:a}),setHotspotsData:a=>{const{categoryData:b,productData:_e}=s();b.geometryVariants&&Object.keys(a).map(bt=>{a[bt].map(rn=>{rn.geometryVariantID&&b.geometryVariants.map(sn=>{Object.keys(sn.variants).map(yn=>{rn.geometryVariantID==yn&&sn.productsInCategory.map(Pn=>{let zn=null;Pn.products.map(lr=>{a.hasOwnProperty(lr)&&(zn=a[lr])}),Pn.products.map(lr=>{a.hasOwnProperty(lr)||(a[lr]=zn)})})})})})}),o({hotspotsData:a})},setEndpoints:a=>{o({endpoints:a}),setGlobalEndpoints(a)},setAssetsData:a=>o({assetsData:a})}})),productDataStore$1=productDataStore,UtilityMenu=({handleShareButtonTrigger:o,handleSaveButtonTrigger:s,handleRestartButtonClick:a,handleShowHotspots:b,handleDimensionClick:_e,handleInstructionButtonClick:bt,utilityMenuVisible:rn,hotspotsVisibility:sn,viewInYourSpaceMenuBtnVisible:yn,restartMenuBtnVisible:Pn,saveMenuBtnVisible:zn,hotspotsMenuBtnVisible:lr,instructionsMenuBtnVisible:ar,dimensionsMenuBtnVisible:cr,shareMenuBtnVisible:hr,dimensionsVisible:es,position:Ur,CORE_API:Dr})=>{const[zr,rs]=reactExports.useState("bottom"),as=productDataStore$1(ls=>ls.assetsData),os={ar:"https://storage.googleapis.com/gsc-epigraph-design/product-assets/Icon/AR.svg",restart:"https://storage.googleapis.com/gsc-epigraph-design/product-assets/Icon/Restart.svg",save:"https://storage.googleapis.com/gsc-epigraph-design/product-assets/Icon/save.svg",share:"https://storage.googleapis.com/gsc-epigraph-design/product-assets/Icon/Share.svg",dimensions:"https://storage.googleapis.com/gsc-epigraph-design/product-assets/Icon/Ruler.svg",hotspots:"https://storage.googleapis.com/gsc-epigraph-design/product-assets/Icon/Eye.svg",instructions:"https://storage.googleapis.com/gsc-epigraph-design/product-assets/Icon/Info.svg"};return reactExports.useEffect(()=>{switch(Ur){case"top":rs("top");break;case"bottom":rs("bottom");break;case"left":rs("left");break;case"right":rs("right");break}return()=>{}},[Ur]),jsxRuntimeExports.jsx("div",{className:"shellCanvasContainerParent",id:zr,children:jsxRuntimeExports.jsxs("div",{className:(rn&&(hr||yn||Pn||cr||lr||ar))==!0?"shellCanvasContainer":"shellCanvasContainer shellCanvasContainerInactive",children:[yn&&jsxRuntimeExports.jsx(UtilityMenuButton,{buttonAction:()=>{Dr.viewInYourSpace()},buttonLabel:"AR",hoverLabel:"View in Your Space",icon:as?.icons?.utilityMenu?.viewInYourSpace?Dr.getResolvedAssetUrl(as?.icons?.utilityMenu?.viewInYourSpace):os.ar}),Pn&&jsxRuntimeExports.jsx(UtilityMenuButton,{buttonAction:()=>{a()},buttonLabel:"Restart",hoverLabel:"Restart",icon:as?.icons?.utilityMenu?.restart?Dr.getResolvedAssetUrl(as?.icons?.utilityMenu?.restart):os.restart}),zn&&jsxRuntimeExports.jsx(UtilityMenuButton,{buttonAction:()=>{s()},buttonLabel:"Save",hoverLabel:"Save",icon:as?.icons?.utilityMenu?.save?Dr.getResolvedAssetUrl(as?.icons?.utilityMenu?.save):os.save}),hr&&jsxRuntimeExports.jsx(UtilityMenuButton,{buttonAction:()=>{o()},buttonLabel:"Share",hoverLabel:"Share",icon:as?.icons?.utilityMenu?.share?Dr.getResolvedAssetUrl(as?.icons?.utilityMenu?.share):os.share}),cr&&jsxRuntimeExports.jsx(UtilityMenuButton,{buttonAction:()=>{_e()},buttonLabel:"Size",hoverLabel:"Size",icon:as?.icons?.utilityMenu?.dimensions?Dr.getResolvedAssetUrl(as?.icons?.utilityMenu?.dimensions):os.dimensions,activeCondition:es}),lr&&jsxRuntimeExports.jsx(UtilityMenuButton,{buttonAction:()=>{b()},buttonLabel:"Hotspots",hoverLabel:"Hotspots",icon:as?.icons?.utilityMenu?.hotspots?Dr.getResolvedAssetUrl(as?.icons?.utilityMenu?.hotspots):os.hotspots,activeCondition:sn}),ar&&jsxRuntimeExports.jsx(UtilityMenuButton,{buttonAction:()=>{bt()},buttonLabel:"Instructions",hoverLabel:"Instructions",icon:as?.icons?.utilityMenu?.instructions?Dr.getResolvedAssetUrl(as?.icons?.utilityMenu?.instructions):os.instructions})]})})};function makeTypeChecker(o){return s=>!!s.type&&s.type.tabsRole===o}const isTab=makeTypeChecker("Tab"),isTabList=makeTypeChecker("TabList"),isTabPanel=makeTypeChecker("TabPanel");function isTabChild(o){return isTab(o)||isTabList(o)||isTabPanel(o)}function deepMap(o,s){return reactExports.Children.map(o,a=>a===null?null:isTabChild(a)?s(a):a.props&&a.props.children&&typeof a.props.children=="object"?reactExports.cloneElement(a,{...a.props,children:deepMap(a.props.children,s)}):a)}function deepForEach(o,s){return reactExports.Children.forEach(o,a=>{a!==null&&(isTab(a)||isTabPanel(a)?s(a):a.props&&a.props.children&&typeof a.props.children=="object"&&(isTabList(a)&&s(a),deepForEach(a.props.children,s)))})}function r(o){var s,a,b="";if(typeof o=="string"||typeof o=="number")b+=o;else if(typeof o=="object")if(Array.isArray(o))for(s=0;s<o.length;s++)o[s]&&(a=r(o[s]))&&(b&&(b+=" "),b+=a);else for(s in o)o[s]&&(b&&(b+=" "),b+=s);return b}function clsx(){for(var o,s,a=0,b="";a<arguments.length;)(o=arguments[a++])&&(s=r(o))&&(b&&(b+=" "),b+=s);return b}function getTabsCount(o){let s=0;return deepForEach(o,a=>{isTab(a)&&s++}),s}function isNode(o){return o&&"getAttribute"in o}function isTabNode(o){return isNode(o)&&o.getAttribute("data-rttab")}function isTabDisabled(o){return isNode(o)&&o.getAttribute("aria-disabled")==="true"}let canUseActiveElement;function determineCanUseActiveElement(o){const s=o||(typeof window<"u"?window:void 0);try{canUseActiveElement=!!(typeof s<"u"&&s.document&&s.document.activeElement)}catch{canUseActiveElement=!1}}const defaultProps$4={className:"react-tabs",focus:!1},UncontrolledTabs=o=>{let s=reactExports.useRef([]),a=reactExports.useRef([]);const b=reactExports.useRef();function _e(Zl,_d){if(Zl<0||Zl>=Pn())return;const{onSelect:Ty,selectedIndex:yy}=o;Ty(Zl,yy,_d)}function bt(Zl){const _d=Pn();for(let Ty=Zl+1;Ty<_d;Ty++)if(!isTabDisabled(zn(Ty)))return Ty;for(let Ty=0;Ty<Zl;Ty++)if(!isTabDisabled(zn(Ty)))return Ty;return Zl}function rn(Zl){let _d=Zl;for(;_d--;)if(!isTabDisabled(zn(_d)))return _d;for(_d=Pn();_d-- >Zl;)if(!isTabDisabled(zn(_d)))return _d;return Zl}function sn(){const Zl=Pn();for(let _d=0;_d<Zl;_d++)if(!isTabDisabled(zn(_d)))return _d;return null}function yn(){let Zl=Pn();for(;Zl--;)if(!isTabDisabled(zn(Zl)))return Zl;return null}function Pn(){const{children:Zl}=o;return getTabsCount(Zl)}function zn(Zl){return s.current[`tabs-${Zl}`]}function lr(){let Zl=0;const{children:_d,disabledTabClassName:Ty,focus:yy,forceRenderTabPanel:by,selectedIndex:Al,selectedTabClassName:_f,selectedTabPanelClassName:gy,environment:El}=o;a.current=a.current||[];let My=a.current.length-Pn();const By=reactExports.useId();for(;My++<0;)a.current.push(`${By}${a.current.length}`);return deepMap(_d,lA=>{let wA=lA;if(isTabList(lA)){let Fy=0,OA=!1;canUseActiveElement==null&&determineCanUseActiveElement(El);const UA=El||(typeof window<"u"?window:void 0);canUseActiveElement&&UA&&(OA=React.Children.toArray(lA.props.children).filter(isTab).some(($A,YA)=>UA.document.activeElement===zn(YA))),wA=reactExports.cloneElement(lA,{children:deepMap(lA.props.children,$A=>{const YA=`tabs-${Fy}`,WA=Al===Fy,bA={tabRef:FA=>{s.current[YA]=FA},id:a.current[Fy],selected:WA,focus:WA&&(yy||OA)};return _f&&(bA.selectedClassName=_f),Ty&&(bA.disabledClassName=Ty),Fy++,reactExports.cloneElement($A,bA)})})}else if(isTabPanel(lA)){const Fy={id:a.current[Zl],selected:Al===Zl};by&&(Fy.forceRender=by),gy&&(Fy.selectedClassName=gy),Zl++,wA=reactExports.cloneElement(lA,Fy)}return wA})}function ar(Zl){const{direction:_d,disableUpDownKeys:Ty,disableLeftRightKeys:yy}=o;if(hr(Zl.target)){let{selectedIndex:by}=o,Al=!1,_f=!1;(Zl.code==="Space"||Zl.keyCode===32||Zl.code==="Enter"||Zl.keyCode===13)&&(Al=!0,_f=!1,cr(Zl)),!yy&&(Zl.keyCode===37||Zl.code==="ArrowLeft")||!Ty&&(Zl.keyCode===38||Zl.code==="ArrowUp")?(_d==="rtl"?by=bt(by):by=rn(by),Al=!0,_f=!0):!yy&&(Zl.keyCode===39||Zl.code==="ArrowRight")||!Ty&&(Zl.keyCode===40||Zl.code==="ArrowDown")?(_d==="rtl"?by=rn(by):by=bt(by),Al=!0,_f=!0):Zl.keyCode===35||Zl.code==="End"?(by=yn(),Al=!0,_f=!0):(Zl.keyCode===36||Zl.code==="Home")&&(by=sn(),Al=!0,_f=!0),Al&&Zl.preventDefault(),_f&&_e(by,Zl)}}function cr(Zl){let _d=Zl.target;do if(hr(_d)){if(isTabDisabled(_d))return;const Ty=[].slice.call(_d.parentNode.children).filter(isTabNode).indexOf(_d);_e(Ty,Zl);return}while((_d=_d.parentNode)!=null)}function hr(Zl){if(!isTabNode(Zl))return!1;let _d=Zl.parentElement;do{if(_d===b.current)return!0;if(_d.getAttribute("data-rttabs"))break;_d=_d.parentElement}while(_d);return!1}const{children:es,className:Ur,disabledTabClassName:Dr,domRef:zr,focus:rs,forceRenderTabPanel:as,onSelect:os,selectedIndex:ls,selectedTabClassName:zs,selectedTabPanelClassName:ho,environment:ga,disableUpDownKeys:mo,disableLeftRightKeys:go,...yl}={...defaultProps$4,...o};return React.createElement("div",Object.assign({},yl,{className:clsx(Ur),onClick:cr,onKeyDown:ar,ref:Zl=>{b.current=Zl,zr&&zr(Zl)},"data-rttabs":!0}),lr())};UncontrolledTabs.propTypes={};const MODE_CONTROLLED=0,MODE_UNCONTROLLED=1,defaultProps$3={defaultFocus:!1,focusTabOnClick:!0,forceRenderTabPanel:!1,selectedIndex:null,defaultIndex:null,environment:null,disableUpDownKeys:!1,disableLeftRightKeys:!1},getModeFromProps=o=>o.selectedIndex===null?MODE_UNCONTROLLED:MODE_CONTROLLED,Tabs=o=>{const{children:s,defaultFocus:a,defaultIndex:b,focusTabOnClick:_e,onSelect:bt,...rn}={...defaultProps$3,...o},[sn,yn]=reactExports.useState(a),[Pn]=reactExports.useState(getModeFromProps(rn)),[zn,lr]=reactExports.useState(Pn===MODE_UNCONTROLLED?b||0:null);if(reactExports.useEffect(()=>{yn(!1)},[]),Pn===MODE_UNCONTROLLED){const hr=getTabsCount(s);reactExports.useEffect(()=>{if(zn!=null){const es=Math.max(0,hr-1);lr(Math.min(zn,es))}},[hr])}const ar=(hr,es,Ur)=>{typeof bt=="function"&&bt(hr,es,Ur)===!1||(_e&&yn(!0),Pn===MODE_UNCONTROLLED&&lr(hr))};let cr={...o,...rn};return cr.focus=sn,cr.onSelect=ar,zn!=null&&(cr.selectedIndex=zn),delete cr.defaultFocus,delete cr.defaultIndex,delete cr.focusTabOnClick,React.createElement(UncontrolledTabs,cr,s)};Tabs.propTypes={};Tabs.tabsRole="Tabs";const defaultProps$2={className:"react-tabs__tab-list"},TabList=o=>{const{children:s,className:a,...b}={...defaultProps$2,...o};return React.createElement("ul",Object.assign({},b,{className:clsx(a),role:"tablist"}),s)};TabList.tabsRole="TabList";TabList.propTypes={};const DEFAULT_CLASS$1="react-tabs__tab",defaultProps$1={className:DEFAULT_CLASS$1,disabledClassName:`${DEFAULT_CLASS$1}--disabled`,focus:!1,id:null,selected:!1,selectedClassName:`${DEFAULT_CLASS$1}--selected`},Tab$1=o=>{let s=reactExports.useRef();const{children:a,className:b,disabled:_e,disabledClassName:bt,focus:rn,id:sn,selected:yn,selectedClassName:Pn,tabIndex:zn,tabRef:lr,...ar}={...defaultProps$1,...o};return reactExports.useEffect(()=>{yn&&rn&&s.current.focus()},[yn,rn]),React.createElement("li",Object.assign({},ar,{className:clsx(b,{[Pn]:yn,[bt]:_e}),ref:cr=>{s.current=cr,lr&&lr(cr)},role:"tab",id:`tab${sn}`,"aria-selected":yn?"true":"false","aria-disabled":_e?"true":"false","aria-controls":`panel${sn}`,tabIndex:zn||(yn?"0":null),"data-rttab":!0}),a)};Tab$1.propTypes={};Tab$1.tabsRole="Tab";const DEFAULT_CLASS="react-tabs__tab-panel",defaultProps={className:DEFAULT_CLASS,forceRender:!1,selectedClassName:`${DEFAULT_CLASS}--selected`},TabPanel=o=>{const{children:s,className:a,forceRender:b,id:_e,selected:bt,selectedClassName:rn,...sn}={...defaultProps,...o};return React.createElement("div",Object.assign({},sn,{className:clsx(a,{[rn]:bt}),role:"tabpanel",id:`panel${_e}`,"aria-labelledby":`tab${_e}`}),b||bt?s:null)};TabPanel.tabsRole="TabPanel";TabPanel.propTypes={};const colorStore=create$3(o=>({allActiveVariants:{},allActiveGeometryVariants:{}})),arrayWithoutElementAtIndex=function(o,s){return o.filter(function(a,b){return s!==b})},updateQuantityAtIndex=function(o,s,a){let b=o.slice();return b[s].quantity=a,b},cartStore=create$3((o,s)=>({cart:[],cartTotalPrice:0,deleteCartItem:a=>{o(b=>({cart:arrayWithoutElementAtIndex(b.cart,a)}))},addToCart:a=>{o(b=>({cart:[...b.cart,a]}))},updateQuantity:(a,b)=>{o(_e=>({cart:updateQuantityAtIndex(_e.cart,a,b)}))},previewCartModalOpen:!1,togglePreviewCartModal:()=>{const{previewCartModalOpen:a}=s();a===!0?uiSceneStore.getState().CORE_API.reviewCartHidden():uiSceneStore.getState().CORE_API.reviewCartShown(),o({previewCartModalOpen:!a})},actions:{setCartTotalPrice:a=>{o(()=>({cartTotalPrice:a}))}}})),ItemCard=({spawnGhosts:o,accordionActive:s,spawnItem:a,removeAllGhosts:b,skuId:_e,active:bt})=>{const rn=uiSceneStore(FA=>FA.CORE_API),sn=infoStore(FA=>FA.infoModalOpen),yn=reactExports.useRef(null),Pn=infoStore(FA=>FA.populateInfoObject),zn=uiSceneStore(FA=>FA.dialogPopupOpen),lr=cartStore(FA=>FA.previewCartModalOpen),ar=infoStore(FA=>FA.updateInfoModalOpen),[cr,hr]=reactExports.useState("default"),[es,Ur]=reactExports.useState(!0),Dr=colorStore(FA=>FA.allActiveVariants),zr=productDataStore$1(FA=>FA.productData),rs=itemStore(FA=>FA.fittingSkuIds),[as,os]=reactExports.useState(zr[_e].incrementDecrementControl?zr[_e].incrementDecrementControl:!1),[ls,zs]=reactExports.useState(zr[_e]?zr[_e]:{}),[ho,ga]=reactExports.useState(zr[_e].name?zr[_e].name:"Not Set"),[mo,go]=reactExports.useState(zr[_e].subheading?zr[_e].subheading:""),[yl,Zl]=reactExports.useState(zr[_e].lookDetails.default.thumbnails.low?zr[_e].lookDetails.default.thumbnails.low:""),[_d,Ty]=reactExports.useState(zr[_e].draggableUI!=null?zr[_e].draggableUI:uiSceneStore.getState().CORE_API.sceneSettings.draggableUI),[yy,by]=reactExports.useState(null),[Al,_f]=reactExports.useState(!1),[gy,El]=reactExports.useState(!1),[My,By]=reactExports.useState(0),lA=reactExports.useCallback(()=>{My<=0||rn.removeLastItemBySkuId(_e)},[My]),wA=()=>{let FA=0;const BA=itemStore.getState().itemsSpawned,rE=Object.keys(BA);for(let sE=rE.length-1;sE>=0;sE--){const SC=rE[sE];BA[SC].itemData.skuID===_e&&FA++}By(FA)};reactExports.useEffect(()=>{wA()},[]),addCoreEventListener(rn.EVENTS.SCENE.Items_Updated,wA),reactExports.useEffect(()=>{rs.includes(_e)?_f(!0):_f(!1)},[rs]),reactExports.useEffect(()=>{Object.keys(zr).length!=0},[zr]),reactExports.useEffect(()=>{ls.looks.length<=1&&Ur(!1)},[ls]);const Fy=reactExports.useCallback(()=>{const FA=ls.looks;let BA="default";for(const[rE,sE]of Object.entries(Dr))if(FA.includes(sE)){BA=sE;break}hr(BA)},[Dr]);reactExports.useEffect(()=>{Zl(ls.lookDetails[cr].thumbnails.low)},[cr]),reactExports.useEffect(()=>{es===!0&&Fy()},[Dr]);const OA=reactExports.useCallback(FA=>{if(FA.stopPropagation(),!(!uiSceneStore.getState().CORE_API.sceneSettings.clickToAddUi&&!as)){if(FA.stopPropagation(),Al===!1||yy){rn.alert({alertMsg:"Unable to add item to the scene.",alertTime:4e3,alertType:"warn",alertLabel:"Action Unavailable"});return}a(_e,!0)}},[Al,yy]),UA=reactExports.useCallback(async()=>{const FA=rn.sceneSettings?.showDependencyOnHover;if(FA===void 0||FA===!1)return;let BA=rn.getSpawningRequirementForSkuID(_e);if(BA.length<=0)return;let rE="";const sE=await rn.getCartItemsAsync();let SC=!1;if(sE.cartItems.map(HA=>{BA.includes(HA.skuID)&&(SC=!0)}),BA.includes("Root")&&BA.length==1&&(SC=!0,BA=[]),SC)rE="No space available to spawn the item.";else{rE=`This item requires a dependency to be added to the scene first.
|
|
8993
8993
|
|
|
8994
8994
|
Dependency:
|
|
8995
8995
|
`;for(const HA of BA)rE+=`- ${HA}
|
|
8996
8996
|
`}for(const HA of BA)rE+=`- ${HA}
|
|
8997
|
-
`;by(rE)},[yy]),$A=reactExports.useCallback(()=>{rn.isMobile!==!0&&gy!==!0&&(El(!0),!(!uiSceneStore.getState().CORE_API.sceneSettings.clickToAddUi&&!as)&&(Al===!0?(by(null),o(_e)):UA()))},[Al,gy,yy]),YA=reactExports.useCallback(()=>{rn.isMobile!==!0&&(El(!1),!(!uiSceneStore.getState().CORE_API.sceneSettings.clickToAddUi&&!as)&&(window.mouseDragging||Al===!0&&b&&b()))},[Al,gy]),WA=reactExports.useCallback(FA=>{FA.defaultPrevented===!0&&FA.preventDefault(),FA.stopPropagation(),!(_d===!1||Al===!1)&&(window.pointerDownPos=FA.clientX,window.mouseDragging=!1,window.mouseDownImgSrc=rn.getResolvedAssetUrl(yl),window.mouseDownSkuID=_e,window.moveThreshold=10)},[Al,yl,_d]),bA=reactExports.useCallback(FA=>{const BA=ls.lookDetails[cr];BA.skuID=_e,BA.productCategory={id:ls.categoryID,label:ls.categoryLabel},rn.isMobile===!0?(Pn(BA),ar(!0)):(FA.stopPropagation(),Al&&b&&b(),Pn(BA),ar(!0))},[Al,cr,ls]);return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:jsxRuntimeExports.jsxs("div",{className:bt?"imageContainer active":"imageContainer",draggable:!1,children:[as?jsxRuntimeExports.jsxs("div",{className:"incrementContentContainer",children:[jsxRuntimeExports.jsx("div",{id:"itemCard"+_e,className:"incrementContentOverlay ".concat(`${(Al===!0||My>0)&&gy===!0?"enabled-item-overlay":"disabled-item-overlay"}`),ref:yn}),jsxRuntimeExports.jsx("img",{alt:ho,className:"incrementSkuIcon",onTouchStart:WA,onMouseEnter:()=>{_d!==!1&&El(!0)},onMouseLeave:()=>{_d!==!1&&El(!1)},onMouseDown:WA,src:rn.getResolvedAssetUrl(yl)}),jsxRuntimeExports.jsxs("div",{className:"incrementDecrementPanel",children:[jsxRuntimeExports.jsx("div",{role:"button","aria-label":"Decrement Button",tabIndex:My!==0&&!zn&&!sn&&!lr&&s==!0&&Al?0:-1,className:"incrementMinusSign ".concat(`${My===0?"incrementSignDisable":""}`),onClick:lA,onMouseEnter:()=>El(!0),onMouseLeave:()=>El(!1),children:jsxRuntimeExports.jsx("img",{alt:"-",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/Minus.svg"})}),jsxRuntimeExports.jsx("div",{className:"incrementCount",children:My}),jsxRuntimeExports.jsx("div",{role:"button","aria-label":"Increment Button",tabIndex:!zn&&!sn&&!lr&&s==!0&&Al?0:-1,className:"incrementPlusSign ".concat(`${Al===!0?"":"incrementSignDisable"}`),onClick:OA,onMouseEnter:$A,onMouseLeave:YA,children:jsxRuntimeExports.jsx("img",{alt:"+",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/Plus.svg"})})]}),jsxRuntimeExports.jsx("div",{className:"spawning-requirements-container",hidden:!(Al===!1&&gy===!0&&yy),children:jsxRuntimeExports.jsx("p",{className:"spawning-requirements-text",children:yy})})]}):jsxRuntimeExports.jsxs("div",{className:"contentContainer",role:"button","aria-label":"Add Button",tabIndex:!zn&&!sn&&!lr&&s==!0&&Al?0:-1,style:{pointerEvents:Al?"all":"none"},onFocus:$A,onBlur:YA,onClick:OA,children:[jsxRuntimeExports.jsx("div",{id:"itemCard"+_e,className:"contentOverlay ".concat(`${Al===!0&&gy===!0?"enabled-item-overlay":"disabled-item-overlay"}`),ref:yn,onTouchStart:WA,onMouseEnter:$A,onMouseLeave:YA,onMouseDown:WA,children:jsxRuntimeExports.jsx("img",{alt:"+",draggable:!1,className:"addIcon",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/Plus.svg"})}),jsxRuntimeExports.jsx("img",{className:"product-image product-image-default-state ".concat(`${Al===!1?"product-image-disabled":""}`),draggable:!1,alt:ho,src:rn.getResolvedAssetUrl(yl)}),jsxRuntimeExports.jsx("div",{className:"spawning-requirements-container",hidden:!(Al===!1&&gy===!0&&yy),children:jsxRuntimeExports.jsx("p",{className:"spawning-requirements-text",children:yy})})]}),jsxRuntimeExports.jsxs("div",{role:"button","aria-label":"Info Button",tabIndex:!zn&&!sn&&!lr&&s==!0&&Al?0:-1,className:rn.isMobile?"showAlways itemDetails":"itemDetails",onClick:bA,children:[jsxRuntimeExports.jsx("div",{className:"item-details-icon"}),jsxRuntimeExports.jsxs("div",{className:"item-card-text-parent",children:[ho&&jsxRuntimeExports.jsx("p",{className:"skuName truncate",children:ho}),mo&&jsxRuntimeExports.jsx("p",{className:"skuSubheading",children:mo})]})]})]})})},PreconfigCard=({onClick:o,configId:s,name:a,thumbnailURL:b,accordionActive:_e})=>{const bt=uiSceneStore(ar=>ar.CORE_API),rn=infoStore(ar=>ar.infoModalOpen),sn=uiSceneStore(ar=>ar.dialogPopupOpen),yn=cartStore(ar=>ar.previewCartModalOpen),[Pn,zn]=reactExports.useState(!1),lr=reactExports.useCallback(ar=>{ar.stopPropagation(),o(s)},[]);return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:jsxRuntimeExports.jsxs("div",{className:"imageContainer",draggable:!1,children:[jsxRuntimeExports.jsxs("div",{className:b?"contentContainer preconfig":"contentContainer preconfig contentDisabled",children:[jsxRuntimeExports.jsx("div",{role:"button","aria-label":"Load Preconfiguration Button",tabIndex:!sn&&!rn&&!yn&&_e==!0?0:-1,id:"itemCard"+s,className:"contentOverlay ".concat(`${Pn===!0?"enabled-item-overlay":"disabled-item-overlay"}`),onClick:ar=>lr(ar),onFocus:()=>zn(!0),onBlur:()=>zn(!1),onMouseEnter:()=>zn(!0),onMouseLeave:()=>zn(!1),children:jsxRuntimeExports.jsx("img",{alt:"+",draggable:!1,className:"addIcon",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/Plus.svg"})}),jsxRuntimeExports.jsx("img",{className:"product-image product-image-default-state",draggable:!1,alt:a,src:b})]}),jsxRuntimeExports.jsx("div",{className:bt.isMobile?"showAlways itemDetails":"itemDetails",children:jsxRuntimeExports.jsx("p",{className:"truncate",children:a})})]})})};function BuildTabItemRow({element:o,index:s,visible:a,elementsLength:b,spawnGhosts:_e,spawnItem:bt,removeAllGhosts:rn,infoModalOpen:sn,setItemAllowed:yn,activeItems:Pn}){const zn=coreSceneStore(zr=>zr.sceneSettings),lr=reactExports.useRef(null),ar=reactExports.useRef(null),cr=uiSceneStore(zr=>zr.dialogPopupOpen),hr=cartStore(zr=>zr.previewCartModalOpen),[es,Ur]=reactExports.useState(!1),Dr=reactExports.useCallback(()=>{if(!(!ar.current||!lr.current)){if(ar.current.style.maxHeight)ar.current.style.maxHeight=null;else{if(o.skus.length>0&&ar.current.scrollHeight<100)return;ar.current.style.maxHeight=ar.current.scrollHeight+"px"}lr.current.classList.toggle("buildUiAccordionActive"),ar.current.classList.toggle("buildUiContentAccordionActive"),Ur(!es)}},[lr,ar,es]);return reactExports.useEffect(()=>{!ar.current||!lr.current||s==0&&Dr()},[lr,ar]),jsxRuntimeExports.jsxs("div",{className:"subContainer topContainer",children:[zn.accordionInBuildUi?jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsxs("div",{role:"button","aria-label":"Toggle Accordion Button",onClick:Dr,tabIndex:!cr&&!sn&&!hr&&a?0:-1,ref:lr,className:"buildUiAccordion",children:[jsxRuntimeExports.jsx("div",{className:"arrowUp",children:jsxRuntimeExports.jsxs("svg",{width:"30",height:"30",viewBox:"0 0 30 30",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[jsxRuntimeExports.jsx("rect",{x:"0.75",y:"0.6875",width:"28.7343",height:"28.7343",rx:"14.3672",stroke:"#CCCCCC",strokeWidth:"0.5"}),jsxRuntimeExports.jsx("path",{d:"M20.5029 12.8984L15.1172 18.2842L9.73145 12.8984",stroke:"#222222",strokeLinecap:"round",strokeLinejoin:"round"})]})}),jsxRuntimeExports.jsx("div",{className:"arrowDown",children:jsxRuntimeExports.jsxs("svg",{width:"30",height:"30",viewBox:"0 0 30 30",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[jsxRuntimeExports.jsx("rect",{x:"0.881836",y:"0.957031",width:"28.7343",height:"28.7343",rx:"14.3672",stroke:"#CCCCCC",strokeWidth:"0.5"}),jsxRuntimeExports.jsx("path",{d:"M9.86328 17.4795L15.249 12.0938L20.6347 17.4795",stroke:"#222222",strokeLinecap:"round",strokeLinejoin:"round"})]})}),jsxRuntimeExports.jsx("h4",{children:o.label})]}),jsxRuntimeExports.jsx("div",{ref:ar,className:"sidemenuContent buildUiAccordionContent",children:jsxRuntimeExports.jsx("div",{className:"item-grid",children:o.skus.map(zr=>jsxRuntimeExports.jsx(ItemCard,{skuId:zr,accordionActive:a&&es,categoryID:o.categoryID,spawnGhosts:_e,spawnItem:bt,removeAllGhosts:rn,modalOpen:sn,categoryDataIndex:s,setItemAllowed:yn,active:Pn.includes(zr)},"itemCardB"+zr))})})]}):jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx("h4",{className:"subheading",children:o.label}),jsxRuntimeExports.jsx("div",{className:"sidemenuContent",children:jsxRuntimeExports.jsx("div",{className:"item-grid",children:o.skus.map(zr=>jsxRuntimeExports.jsx(ItemCard,{skuId:zr,categoryID:o.categoryID,accordionActive:a,spawnGhosts:_e,spawnItem:bt,removeAllGhosts:rn,modalOpen:sn,categoryDataIndex:s,setItemAllowed:yn,active:Pn.includes(zr)},"itemCardB"+zr))})})]}),s!==b-1?jsxRuntimeExports.jsx("div",{className:"itemGridDivider"}):""]})}function BuildTabItemRow_PreConfig({index:o,elementsLength:s,visible:a,configsData:b,infoModalOpen:_e,onClick:bt,label:rn}){const sn=coreSceneStore(Ur=>Ur.sceneSettings),yn=reactExports.useRef(null),Pn=reactExports.useRef(null),zn=uiSceneStore(Ur=>Ur.dialogPopupOpen),lr=cartStore(Ur=>Ur.previewCartModalOpen),ar=uiSceneStore(Ur=>Ur.CORE_API),[cr,hr]=reactExports.useState(!1),es=reactExports.useCallback(()=>{!Pn.current||!yn.current||(yn.current.classList.toggle("buildUiAccordionActive"),Pn.current.classList.toggle("buildUiContentAccordionActive"),hr(!cr),Pn.current.style.maxHeight?Pn.current.style.maxHeight=null:Pn.current.style.maxHeight=Pn.current.scrollHeight+"px")},[yn,Pn,cr]);return jsxRuntimeExports.jsxs("div",{className:"subContainer topContainer",children:[sn.accordionInBuildUi?jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsxs("div",{role:"button","aria-label":"Toggle Accordion Button",onClick:es,tabIndex:!zn&&!_e&&!lr&&a?0:-1,ref:yn,className:"buildUiAccordion",children:[jsxRuntimeExports.jsx("div",{className:"arrowUp",children:jsxRuntimeExports.jsxs("svg",{width:"30",height:"30",viewBox:"0 0 30 30",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[jsxRuntimeExports.jsx("rect",{x:"0.75",y:"0.6875",width:"28.7343",height:"28.7343",rx:"14.3672",stroke:"#CCCCCC",strokeWidth:"0.5"}),jsxRuntimeExports.jsx("path",{d:"M20.5029 12.8984L15.1172 18.2842L9.73145 12.8984",stroke:"#222222",strokeLinecap:"round",strokeLinejoin:"round"})]})}),jsxRuntimeExports.jsx("div",{className:"arrowDown",children:jsxRuntimeExports.jsxs("svg",{width:"30",height:"30",viewBox:"0 0 30 30",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[jsxRuntimeExports.jsx("rect",{x:"0.881836",y:"0.957031",width:"28.7343",height:"28.7343",rx:"14.3672",stroke:"#CCCCCC",strokeWidth:"0.5"}),jsxRuntimeExports.jsx("path",{d:"M9.86328 17.4795L15.249 12.0938L20.6347 17.4795",stroke:"#222222",strokeLinecap:"round",strokeLinejoin:"round"})]})}),jsxRuntimeExports.jsx("h4",{children:rn})]}),jsxRuntimeExports.jsx("div",{ref:Pn,className:"sidemenuContent buildUiAccordionContent",children:jsxRuntimeExports.jsx("div",{className:"item-grid",children:b.map(Ur=>jsxRuntimeExports.jsx(PreconfigCard,{onClick:bt,accordionActive:a&&cr,configId:Ur.epgsharedconfigid,name:Ur.name,thumbnailURL:ar.getResolvedAssetUrl(Ur.thumbnails.low)},"itemCardB"+Ur.epgsharedconfigid))})})]}):jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx("h4",{className:"subheading",children:rn}),jsxRuntimeExports.jsx("div",{className:"sidemenuContent",children:jsxRuntimeExports.jsx("div",{className:"item-grid",children:b.map(Ur=>jsxRuntimeExports.jsx(PreconfigCard,{onClick:bt,accordionActive:a,configId:Ur.epgsharedconfigid,name:Ur.name,thumbnailURL:ar.getResolvedAssetUrl(Ur.thumbnails.low)},"itemCardB"+Ur.epgsharedconfigid))})})]}),o!==s-1?jsxRuntimeExports.jsx("div",{className:"itemGridDivider"}):""]})}function SecondMobileTabsHandler({index:o,label:s,activeTab:a,tabsRef:b,mobileGrid:_e}){const bt=reactExports.useCallback(rn=>{if(_e.current.scrollLeft===rn)return;let sn,yn,Pn,zn=!1;function lr(ar){sn===void 0&&(sn=ar);const cr=ar-sn;if(yn!==ar){const hr=cr/200;_e.current.scrollLeft>rn?(Pn=(_e.current.scrollLeft-rn)*Math.min(hr,1),_e.current.scrollLeft-=Pn,_e.current.scrollLeft===rn&&(zn=!0)):_e.current.scrollLeft<rn&&(Pn=(rn-_e.current.scrollLeft)*Math.min(hr,1),_e.current.scrollLeft+=Pn,_e.current.scrollLeft===rn&&(zn=!0))}cr<200&&(yn=ar,!zn&&window.requestAnimationFrame(lr))}window.requestAnimationFrame(lr)},[]);return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:jsxRuntimeExports.jsx("a",{className:a===o?"mobileTab scrolled":"mobileTab",onClick:()=>bt(b.current[o].offsetLeft-15),role:"button","aria-label":s+" Button",children:s})})}function MobileGrid({element:o,index:s,elementsLength:a,spawnGhosts:b,spawnItem:_e,removeAllGhosts:bt,infoModalOpen:rn,setItemAllowed:sn,activeItems:yn,tabsRef:Pn}){return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx("section",{id:`section-${o.categoryID}`,className:"mobileGridSection",ref:zn=>Pn.current[s]=zn,children:o.skus.map(zn=>jsxRuntimeExports.jsx(ItemCard,{skuId:zn,categoryID:o.categoryID,spawnGhosts:b,spawnItem:_e,removeAllGhosts:bt,modalOpen:rn,setItemAllowed:sn,active:yn.includes(zn)},"itemCardB"+zn))},"mobileGridSection"+s),s!==a-1?jsxRuntimeExports.jsx("div",{className:"itemGridDivider"}):""]})}function MobileGrid_PreConfig({index:o,elementsLength:s,tabsRef:a,configsData:b,onClick:_e}){const bt=uiSceneStore(rn=>rn.CORE_API);return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsxs("section",{id:"section-preconfig",className:"mobileGridSection",ref:rn=>a.current[o]=rn,children:[b.map(rn=>jsxRuntimeExports.jsx(PreconfigCard,{onClick:_e,configId:rn.epgsharedconfigid,name:rn.name,thumbnailURL:bt.getResolvedAssetUrl(rn.thumbnails.low)},"itemCardB"+rn.epgsharedconfigid)),[...Array(5)].map((rn,sn)=>sn<5-b.length?jsxRuntimeExports.jsx(PreconfigCard,{onClick:()=>{}},"emptyCard"+sn):null)]},"mobileGridSection"+o),o!==s-1?jsxRuntimeExports.jsx("div",{className:"itemGridDivider"}):""]})}const BuildUI=({visible:o})=>{const s=productDataStore$1(mo=>mo.categoryData),[a,b]=reactExports.useState([]),[_e,bt]=reactExports.useState(void 0),rn=infoStore(mo=>mo.infoModalOpen),[sn,yn]=reactExports.useState(0),[Pn,zn]=reactExports.useState(!1),[lr,ar]=reactExports.useState([]),cr=infoStore(mo=>mo.populateInfoObject),hr=infoStore(mo=>mo.updateInfoModalOpen),es=uiSceneStore(mo=>mo.CORE_API),Ur=itemStore(mo=>mo.itemsSpawned),Dr=itemStore(mo=>mo.defaultSceneItemCount),zr=reactExports.useRef(null),rs=reactExports.useCallback(mo=>{let go=[];for(const[yl,Zl]of Object.entries(mo))go.push(Zl);ar(go)},[]);addCoreEventListener(es.EVENTS.UI.ContextMenu_InfoBtnClicked,mo=>{const go=mo.itemData.lookDetails[mo.currentVariant],yl=go;yl.price=go.price,yl.id=mo.currentVariant,yl.productCategory={id:mo.itemData.categoryID,label:mo.itemData.categoryLabel},cr(yl),hr(!0)}),addCoreEventListener(es.EVENTS.SCENE.ReplaceableCategory_Updated,rs),reactExports.useEffect(()=>{const mo=es.getCurrentItemsInReplaceableCategory();return rs(mo),()=>{}},[es]),reactExports.useEffect(()=>{Object.keys(s).length!==0&&(b(s.build),s.preconfiguration!==void 0&&s.preconfiguration.configsData!=null&&bt(s.preconfiguration))},[s]);const as=reactExports.useCallback((mo,go)=>{uiSceneStore.getState().CORE_API.spawnItemBySkuID(mo,go)},[]),os=reactExports.useCallback(mo=>{_e.openConfirmationPopup===!1||Object.keys(Ur).length<=Dr?uiSceneStore.getState().CORE_API.loadSceneFromConfigurationID(mo,!1):(uiSceneStore.setState({loadConfigId:mo}),uiSceneStore.getState().setLoadConfigModalOpen(!0))},[_e,Dr,Ur]),ls=reactExports.useCallback(mo=>{uiSceneStore.getState().CORE_API.spawnGhostsForSkuID(mo,!1,1)},[]),zs=reactExports.useCallback(mo=>{rn||uiSceneStore.getState().CORE_API.removeAllGhosts(mo)},[rn]),ho=reactExports.useRef([]);reactExports.useEffect(()=>{if(!a)return;let mo=a.length;_e!==void 0&&(mo+=1),ho.current=ho.current.slice(0,mo)},[a,_e]);const ga=reactExports.useCallback(()=>{let mo=-3e3,go=-1,yl=a.length;_e!==void 0&&(yl+=1);for(let Zl=0;Zl<yl;Zl++){let _d=ho.current[Zl].getBoundingClientRect().left;_d<28&&mo<_d&&(mo=_d,go=Zl)}go!==-1&&yn(go)},[ho,a,_e]);return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx("div",{className:"mobileTabContent",hidden:!o,children:jsxRuntimeExports.jsxs("div",{className:"scrollSpyTabs",children:[jsxRuntimeExports.jsxs("div",{className:"secondMobileTabs",children:[Object.keys(a).map((mo,go)=>jsxRuntimeExports.jsx(SecondMobileTabsHandler,{index:go,label:a[mo].label,activeTab:sn,tabsRef:ho,mobileGrid:zr},"mobileTabs"+mo)),_e!==void 0&&jsxRuntimeExports.jsx(SecondMobileTabsHandler,{index:a.length,label:_e.label,activeTab:sn,tabsRef:ho,mobileGrid:zr},"preconfiguration_mobileTabs")]}),jsxRuntimeExports.jsxs("div",{className:"mobileGrid",ref:zr,onScroll:ga,children:[a.map((mo,go)=>jsxRuntimeExports.jsx(MobileGrid,{element:mo,index:go,spawnGhosts:ls,spawnItem:as,removeAllGhosts:zs,infoModalOpen:rn,setItemAllowed:zn,activeItems:lr,tabsRef:ho,elementsLength:_e!==void 0?a.length+1:a.length},"mobileGrid"+go)),_e!==void 0&&jsxRuntimeExports.jsx(MobileGrid_PreConfig,{onClick:os,configsData:_e.configsData,tabsRef:ho,index:a.length,elementsLength:a.length+1},"preconfiguration_mobileGrid")]})]})}),jsxRuntimeExports.jsxs("div",{className:"container desktop",hidden:!o,children:[a.map((mo,go)=>jsxRuntimeExports.jsx(BuildTabItemRow,{element:mo,index:go,visible:o,spawnGhosts:ls,spawnItem:as,removeAllGhosts:zs,infoModalOpen:rn,setItemAllowed:zn,activeItems:lr,elementsLength:a.length},`category_${mo.categoryID}_${go}`)),_e!==void 0&&jsxRuntimeExports.jsx(BuildTabItemRow_PreConfig,{onClick:os,visible:o,configsData:_e.configsData,infoModalOpen:rn,label:_e.label,index:a.length,elementsLength:a.length+1},"preconfiguration_desktopCategory")]})]})},handleGlobalVariantSwitch=(o,s)=>{uiSceneStore.getState().CORE_API.switchGlobalVariant(o,s)};function Divider$1(o,s){return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:o!==s.length-1?jsxRuntimeExports.jsx("div",{className:"itemGridDivider"}):""})}const Color=({visible:o})=>{const s=productDataStore$1(yn=>yn.categoryData),a=colorStore(yn=>yn.allActiveVariants),b=uiSceneStore(yn=>yn.materialOverrideExists),_e=uiSceneStore(yn=>yn.CORE_API),bt=cartStore(yn=>yn.previewCartModalOpen),rn=uiSceneStore(yn=>yn.dialogPopupOpen),sn=reactExports.useCallback(()=>{uiSceneStore.getState().CORE_API.removeAllVariantOverrides()},[]);return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:jsxRuntimeExports.jsxs("div",{className:"container desktop",style:{height:"auto"},hidden:!o,children:[b&&jsxRuntimeExports.jsx("button",{tabIndex:!rn&&bt?0:-1,className:"removeAllColorOverridesButton",role:"button","aria-label":"Remove All Overrides Button",onClick:sn,disabled:!b,children:"Remove all overrides"}),s.color.map((yn,Pn)=>jsxRuntimeExports.jsxs("div",{className:"subContainer topContainer",children:[jsxRuntimeExports.jsx("h4",{className:"subheading",children:yn.label}),jsxRuntimeExports.jsx("div",{className:"sidemenuContent",children:jsxRuntimeExports.jsx("div",{className:"color-grid color-variants-selection",children:yn.looks.map((zn,lr)=>jsxRuntimeExports.jsxs("div",{tabIndex:!rn&&!bt?0:-1,onClick:()=>handleGlobalVariantSwitch(yn.id,zn),role:"button","aria-label":productDataStore$1.getState().lookData[zn]?.label+" Button",className:a[yn.id]==zn?"colorSelector selected":"colorSelector",children:[jsxRuntimeExports.jsx("div",{className:"colorThumbnailContainer",children:jsxRuntimeExports.jsxs("div",{className:"colorThumbnail",children:[jsxRuntimeExports.jsx("div",{className:"checkMark",children:jsxRuntimeExports.jsx("img",{alt:"Check",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/Check.svg"})}),jsxRuntimeExports.jsx("img",{alt:"Color Thumbnail",className:"contextColorThumbnail",src:_e.getResolvedAssetUrl(productDataStore$1.getState().lookData[zn]?.thumbnail)})]})}),jsxRuntimeExports.jsxs("div",{className:"colorDetails",children:[jsxRuntimeExports.jsx("p",{className:"truncate colorDetailsLabel",children:capitalize$1(productDataStore$1.getState().lookData[zn]?.label)}),jsxRuntimeExports.jsx("p",{className:"truncate colorDetailsLabel",children:capitalize$1(productDataStore$1.getState().lookData[zn]?.accent)})]})]},"Color-"+lr))})}),jsxRuntimeExports.jsx(Divider$1,{})]},`${yn.label}-${Pn}`))]})})},hotspotStore=create$3((o,s)=>({activeHotspotData:null,activeFeatureID:"",actions:{enterHotspotInFeaturesTab(b){uiSceneStore.getState().sideMenuState!==2&&uiSceneStore.setState({sideMenuState:2}),o({activeFeatureID:b})},exitHotspot(){o({activeFeatureID:null})}}}));function scrollToTop(o,s){if(o.current.scrollTop===s)return;let a,b,_e,bt=!1;function rn(sn){a===void 0&&(a=sn);const yn=sn-a;if(b!==sn){const Pn=yn/200;o.current.scrollTop>s?(_e=(o.current.scrollTop-s)*Math.min(Pn,1),o.current.scrollTop-=_e,o.current.scrollTop===s&&(bt=!0)):o.current.scrollTop<s&&(_e=(s-o.current.scrollTop)*Math.min(Pn,1),o.current.scrollTop+=_e,o.current.scrollTop===s&&(bt=!0))}yn<200&&(b=sn,!bt&&window.requestAnimationFrame(rn))}window.requestAnimationFrame(rn)}function CarouselItem({carouselTabKey:o,hotspotContentRef:s,defaultAltText:a}){const b=reactExports.useRef(null),_e=uiSceneStore(rn=>rn.CORE_API),bt=rn=>{rn.target.style.width="100%"};return jsxRuntimeExports.jsx(SplideSlide,{children:jsxRuntimeExports.jsxs("div",{className:"carouselTabParent",ref:b,children:[o.type==="img"&&jsxRuntimeExports.jsx("img",{src:_e.getResolvedAssetUrl(o.link),alt:o.alt?o.alt:a,onLoad:rn=>bt(rn)}),o.type==="video"&&jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx("p",{className:"carouselVideoPlaceholderText",children:o.alt?o.alt:a}),jsxRuntimeExports.jsx("video",{src:_e.getResolvedAssetUrl(o.link),muted:!0,loop:!0,autoPlay:!0,playsInline:!0,controls:!1,onLoad:rn=>bt(rn)})]}),o.title&&jsxRuntimeExports.jsx("p",{className:"carouselTitle",children:o.title})]})},"SplideSlide-"+o.link)}function Tab({tabs:o,tabKey:s,index:a,activeFeatureID:b}){const[_e,bt]=reactExports.useState([]),rn=reactExports.useRef(null),sn=reactExports.useRef(null);uiSceneStore(hr=>hr.CORE_API);const yn=reactExports.useRef(null),Pn=cartStore(hr=>hr.previewCartModalOpen),zn=uiSceneStore(hr=>hr.dialogPopupOpen),lr=reactExports.useCallback(hr=>{uiSceneStore.getState().CORE_API.clickHotspot("hotspot3D_"+hr,{ignoreUI:!0})},[]);reactExports.useEffect(()=>{let hr=[],es=s.hotspotData;for(let Ur=0;Ur<es.carousel.length;Ur++)es.carousel[Ur].type!==""&&es.carousel[Ur].link!==""&&(hr=[...hr,{...es.carousel[Ur],index:Ur}]);bt(hr)},[s]),reactExports.useEffect(()=>{const{current:hr}=sn;hr&&(b===hr.id?ar(hr):cr(hr))},[b]);const ar=reactExports.useCallback(hr=>{hr.checked=!0,hr.nextElementSibling.nextElementSibling.setAttribute("style","max-height: 800px;");let Dr=hr.nextElementSibling.clientHeight*a;scrollToTop(o,Dr)},[]),cr=reactExports.useCallback(hr=>{hr.nextElementSibling.nextElementSibling.setAttribute("style","max-height: 0px;"),hr.checked=!1},[]);return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:s.hotspotData&&jsxRuntimeExports.jsxs("div",{className:"accordionTab",children:[jsxRuntimeExports.jsx("input",{tabIndex:!zn&&Pn?-1:0,type:"checkbox",name:"accordion",id:"rd_"+s.itemData.skuID+"_"+s.hotspotData.hotspotID,defaultChecked:!1,ref:sn,"aria-label":"Toggle Accordion Button",onClick:hr=>{lr(s.itemData.skuID+"_"+s.hotspotData.hotspotID,{ignoreUI:!1})}}),jsxRuntimeExports.jsxs("label",{className:"tab-label",htmlFor:"rd_"+s.itemData.skuID+"_"+s.hotspotData.hotspotID,children:[jsxRuntimeExports.jsx("span",{children:s.hotspotData.title}),jsxRuntimeExports.jsx("img",{alt:"+",className:"accordion-closed",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/Plus.svg"}),jsxRuntimeExports.jsx("img",{alt:"-",className:"accordion-open",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/Minus.svg"})]}),jsxRuntimeExports.jsx("div",{className:"tab-content",children:jsxRuntimeExports.jsxs("div",{className:"hotspot-content",ref:yn,children:[jsxRuntimeExports.jsx(ReactQuill$1,{className:"ignore",modules:{toolbar:!1},theme:"bubble",readOnly:!0,value:s.hotspotData.description}),_e.length==1&&_e[0].type!=""&&_e[0].link!=""&&jsxRuntimeExports.jsx(CarouselItem,{carouselTabKey:_e[0],index:0,hotspotContentRef:yn},"carouselTabs_"+s.itemData.skuID+"_"+s.hotspotData.hotspotID+"_0"),_e.length>1&&jsxRuntimeExports.jsx("div",{className:"carousel",children:jsxRuntimeExports.jsx(Splide2,{options:{perPage:1,preloadPages:3},ref:rn,children:_e.map((hr,es)=>hr.type!=""&&hr.link!=""&&jsxRuntimeExports.jsx(CarouselItem,{carouselTabKey:hr,defaultAltText:s.itemData.name?s.itemData.name:s.itemData.skuID,index:es,hotspotContentRef:yn},"carouselTabs_"+s.itemData.skuID+"_"+s.hotspotData.hotspotID+"_"+hr.index))})})]})})]})})}const ProductFeaturesUI=({visible:o})=>{const s=uiSceneStore(_e=>_e.tabSpawnCount),a=reactExports.useRef(null),b=hotspotStore(_e=>_e.activeFeatureID);return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:jsxRuntimeExports.jsx("div",{className:"col desktop productFeatureUIDic",hidden:!o,ref:a,children:jsxRuntimeExports.jsxs("div",{className:"tabs",children:[s.length==0&&jsxRuntimeExports.jsx("div",{className:"tabEmptyText",children:"*Please add an item to the scene to see the features"}),s.map((_e,bt)=>jsxRuntimeExports.jsx(Tab,{tabs:a,activeFeatureID:b,tabKey:_e,index:bt},"tabs_"+_e.itemData.skuID+"_"+_e.hotspotData.hotspotID))]})})})},CartItem=({itemObject:o})=>{const s=uiSceneStore(bt=>bt.CORE_API),a=uiSceneStore(bt=>bt.disableCart),[b,_e]=reactExports.useState(s.sceneSettings.currency);return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:jsxRuntimeExports.jsxs("div",{className:o.countUnavailable=="0"||a?"cartItem":"cartItem cartItemOutOfStock",draggable:!1,style:{display:o?"":"none"},children:[jsxRuntimeExports.jsx("div",{className:"cartItemImage",children:jsxRuntimeExports.jsx("img",{draggable:!1,src:s.getResolvedAssetUrl(o.thumbnails.review?o.thumbnails.review:o.thumbnails.low),alt:o.title})}),jsxRuntimeExports.jsxs("div",{className:"cartItemDetails",children:[jsxRuntimeExports.jsx("h4",{children:o.title}),o.subtitle?jsxRuntimeExports.jsx("h5",{children:o.subtitle}):jsxRuntimeExports.jsx("h5",{children:o.subheading}),jsxRuntimeExports.jsxs("div",{className:"cartRow",children:[jsxRuntimeExports.jsxs("span",{className:"itemCount",children:[s.sceneSettings.textSettings.cartQuantityText,":"," ",o.count]}),jsxRuntimeExports.jsxs("h3",{className:"itemPrice".concat(a===!0?" hide":""),children:[b,parseFloat(o.price).toFixed(2)]})]}),o.actionButton&&jsxRuntimeExports.jsx("span",{className:"actionButton",role:"button","aria-label":"Action Button",onClick:()=>s.actionButtonClicked(o),children:o.actionButton.text}),jsxRuntimeExports.jsxs("div",{className:"cartRow".concat(a===!0||o.countUnavailable=="0"?" hide":""),children:[jsxRuntimeExports.jsx("img",{className:"cartRowImage",alt:"Info Icon",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/Info_red.png"}),jsxRuntimeExports.jsxs("h3",{className:"itemAvailable",children:[o.countAvailable," IN STOCK"]}),jsxRuntimeExports.jsx("span",{className:"itemCount",children:"- quantities requested not available"})]})]})]})})},PreviewCart=({})=>{const o=cartStore(Pn=>Pn.cart),s=cartStore(Pn=>Pn.previewCartModalOpen),a=cartStore(Pn=>Pn.togglePreviewCartModal),b=uiSceneStore(Pn=>Pn.CORE_API),_e=uiSceneStore(Pn=>Pn.disableCart),bt=uiSceneStore(Pn=>Pn.cartMessage),rn=uiSceneStore(Pn=>Pn.dialogPopupOpen),sn=reactExports.useRef(null),yn=reactExports.useCallback(async()=>{await b.checkoutAsync()},[]);return reactExports.useEffect(()=>{sn.current&&s&&sn.current.focus()},[s]),jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:jsxRuntimeExports.jsxs("div",{className:s?"previewCartModal open":"previewCartModal",children:[jsxRuntimeExports.jsxs("div",{className:"previewCartModalChild",children:[jsxRuntimeExports.jsx("div",{role:"button",ref:sn,tabIndex:!rn&&s?0:-1,className:"closeButton","aria-label":"Close Button",onClick:()=>{a()},children:jsxRuntimeExports.jsx("img",{alt:"Close Button",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/X.svg"})}),o.length<=0&&jsxRuntimeExports.jsx("h3",{className:"cartEmptyText",children:"Your cart is currently empty"}),o.length>0&&jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx("h2",{className:"cartTitle",children:b.sceneSettings.textSettings.cartHeadingText}),jsxRuntimeExports.jsx("div",{className:"previewCartContentParentDiv",children:jsxRuntimeExports.jsx("div",{className:"previewCartContent",children:o.map((Pn,zn)=>jsxRuntimeExports.jsx(CartItem,{itemObject:Pn,index:zn},`Cart Item-${zn}`))})})]})]}),jsxRuntimeExports.jsxs("div",{className:"checkButtonParentDiv".concat(_e===!0?" hide":""),children:[bt&&jsxRuntimeExports.jsx("div",{className:"cartMessageDiv",children:jsxRuntimeExports.jsx("span",{children:bt})}),jsxRuntimeExports.jsx("div",{role:"button","aria-label":"Checkout Button",tabIndex:s?0:-1,className:"checkoutButton",onClick:yn,children:jsxRuntimeExports.jsx("span",{children:b.sceneSettings.addToCartCTAText})})]})]})})},InfoModal=({visible:o})=>{const s=productDataStore$1(yl=>yl.categoryData),a=uiSceneStore(yl=>yl.dialogPopupOpen),b=colorStore(yl=>yl.allActiveVariants),_e=infoStore(yl=>yl.infoObject),bt=infoStore(yl=>yl.infoModalOpen),rn=itemStore(yl=>yl.itemsSpawned),sn=infoStore(yl=>yl.updateInfoModalOpen),[yn,Pn]=reactExports.useState(""),[zn,lr]=reactExports.useState([]),[ar,cr]=reactExports.useState(!1),hr=uiSceneStore(yl=>yl.CORE_API),es=productDataStore$1(yl=>yl.productData),Ur=itemStore(yl=>yl.fittingSkuIds),[Dr,zr]=reactExports.useState(!1),[rs,as]=reactExports.useState(0),os=coreSceneStore(yl=>yl.sceneSettings),ls=reactExports.useRef(null),zs=reactExports.useCallback(()=>{rs<=0||!_e.skuID||hr.removeLastItemBySkuId(_e.skuID)},[rs,_e]),ho=()=>{if(!rn||!_e.skuID)return;let yl=0;const Zl=Object.keys(rn);for(let _d=Zl.length-1;_d>=0;_d--){const Ty=Zl[_d];rn[Ty].itemData.skuID===_e.skuID&&yl++}as(yl)};reactExports.useEffect(()=>{ho()},[rn,_e]),reactExports.useEffect(()=>{Object.keys(s).length!=0&&lr(s.build)},[s]),reactExports.useEffect(()=>(Pn(b[Object.keys(b)[0]]),()=>{}),[b]),reactExports.useEffect(()=>{Ur.includes(_e.skuID)?cr(!0):cr(!1)},[Ur,_e]),reactExports.useEffect(()=>{if(!es||!_e.skuID)return;const yl=es[_e.skuID].incrementDecrementControl?es[_e.skuID].incrementDecrementControl:!1;zr(yl)},[es,_e]);const ga=reactExports.useCallback(()=>{ar&&hr.spawnGhostsForSkuID(_e.skuID,!1,1)},[_e,ar]),mo=reactExports.useCallback(()=>{ar&&hr.removeAllGhosts(_e.skuID)},[_e,ar]),go=reactExports.useCallback(()=>{ar&&hr.spawnItemBySkuID(_e.skuID,!0)},[_e,ar]);return reactExports.useEffect(()=>{ls.current&&o&&bt&&ls.current.focus()},[bt,o]),jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:jsxRuntimeExports.jsxs("div",{className:bt&&o?"infoModal open":"infoModal",children:[jsxRuntimeExports.jsxs("a",{role:"button","aria-label":"Product Page Link Button",tabIndex:!a&&o&&bt&&_e?.productPageUrl?0:-1,ref:ls,href:_e.productPageUrl,className:"categoryLink",target:"_blank",style:_e?.productPageUrl&&bt?{pointerEvents:"all"}:{pointerEvents:"none"},children:[jsxRuntimeExports.jsxs("h2",{className:"categoryTitle",children:[_e?.productCategory?.label,_e.subheading&&jsxRuntimeExports.jsx("div",{className:"modalSubHeading",children:_e.subheading})]}),_e.productPageUrl&&jsxRuntimeExports.jsx("img",{alt:"Open Product Page",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/OpenTab.svg"})]}),jsxRuntimeExports.jsx("div",{role:"button",tabIndex:!a&&o&&bt?0:-1,className:"closeButton","aria-label":"Close Button",onClick:()=>{sn(!1)},children:jsxRuntimeExports.jsx("img",{alt:"Close Button",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/X.svg"})}),jsxRuntimeExports.jsx("div",{className:"infoModalImageContainer",children:_e?.thumbnails?.high?jsxRuntimeExports.jsx("img",{alt:"Item Image",className:"itemImage",src:hr.getResolvedAssetUrl(_e.thumbnails.high)}):""}),jsxRuntimeExports.jsxs("div",{className:"infoModalTextContainer",children:[jsxRuntimeExports.jsx("h2",{className:"itemTitle",children:_e.title}),jsxRuntimeExports.jsx("pre",{className:"itemDescription",children:_e.description}),_e.boundingBoxSize?jsxRuntimeExports.jsxs("p",{className:"infoModalDimensions",children:[_e.boundingBoxSize.x.toFixed(1),"” W x"," ",_e.boundingBoxSize.y.toFixed(1),"” D x"," ",_e.boundingBoxSize.z.toFixed(1),"” H"]}):""]}),os.addFromInfoModal&&jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:Dr?jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:jsxRuntimeExports.jsxs("div",{className:"infoModalIncrementDecrementParent incrementDecrementPanel",children:[jsxRuntimeExports.jsx("div",{role:"button","aria-label":"Decrement Button",tabIndex:rs!==0&&!a&&bt?0:-1,className:"incrementMinusSign ".concat(`${rs===0?"incrementSignDisable":""}`),onClick:zs,children:jsxRuntimeExports.jsx("img",{alt:"-",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/Minus.svg"})}),jsxRuntimeExports.jsx("div",{className:"incrementCount",children:rs}),jsxRuntimeExports.jsx("div",{role:"button","aria-label":"Increment Button",tabIndex:!a&&bt?0:-1,className:"incrementPlusSign ".concat(`${ar===!0?"":"incrementSignDisable"}`),onClick:go,onMouseEnter:ga,onMouseLeave:mo,children:jsxRuntimeExports.jsx("img",{alt:"+",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/Plus.svg"})})]})}):jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:jsxRuntimeExports.jsx("div",{role:"button","aria-label":"Add Button",tabIndex:!a&&bt?0:-1,className:"infoModalAddButton ".concat(`${ar===!0?"enabledInfoModalAddButton":"disabledInfoModalAddButton"}`),onFocus:ga,onBlur:mo,onMouseEnter:ga,onMouseLeave:mo,onClick:go,children:"Add"})})}),jsxRuntimeExports.jsx("div",{className:"infoModalActions",children:jsxRuntimeExports.jsx("button",{className:"item-price",disabled:!0,children:_e.price&&`$${numberWithCommas(parseFloat(_e.price).toFixed(2))}`})})]})})},handleGlobalGeometryVariantSwitch=(o,s)=>{uiSceneStore.getState().CORE_API.switchGlobalGeometryVariant(o,s)};function Divider(o,s){return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:o!==s.length-1?jsxRuntimeExports.jsx("div",{className:"itemGridDivider"}):""})}const GeometryVariants=({visible:o})=>{const s=productDataStore$1(rn=>rn.categoryData),a=colorStore(rn=>rn.allActiveGeometryVariants),b=uiSceneStore(rn=>rn.CORE_API),_e=cartStore(rn=>rn.previewCartModalOpen),bt=uiSceneStore(rn=>rn.dialogPopupOpen);return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:jsxRuntimeExports.jsx("div",{className:"container desktop",style:{height:"auto"},hidden:!o,children:s.geometryVariants.map((rn,sn)=>jsxRuntimeExports.jsxs("div",{className:"subContainer topContainer",children:[jsxRuntimeExports.jsx("h4",{className:"subheading",children:rn.label}),jsxRuntimeExports.jsx("div",{className:"sidemenuContent",children:jsxRuntimeExports.jsx("div",{className:"color-grid geometry-variants-selection",children:Object.keys(rn.variants).map((yn,Pn)=>jsxRuntimeExports.jsxs("div",{tabIndex:!bt&&!_e?0:-1,onClick:()=>handleGlobalGeometryVariantSwitch(rn.id,yn),role:"button","aria-label":rn.variants[yn].label+" Button",className:a[rn.id]==yn?"colorSelector selected":"colorSelector",children:[jsxRuntimeExports.jsx("div",{className:"colorThumbnailContainer",children:jsxRuntimeExports.jsxs("div",{className:"colorThumbnail",style:{borderRadius:"0%"},children:[jsxRuntimeExports.jsx("div",{className:"checkMark",children:jsxRuntimeExports.jsx("img",{alt:"Check",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/Check.svg"})}),jsxRuntimeExports.jsx("img",{alt:"Color Thumbnail",className:"contextColorThumbnail",src:b.getResolvedAssetUrl(rn.variants[yn].thumbnail)})]})}),jsxRuntimeExports.jsx("div",{className:"colorDetails",children:jsxRuntimeExports.jsx("p",{className:"truncate colorDetailsLabel",children:capitalize$1(rn.variants[yn].label)})})]},"Color-"+Pn))})}),jsxRuntimeExports.jsx(Divider,{})]},`${rn.label}-${sn}`))})})},VariantMobile=({sortedVariantsTabOrder:o})=>{const s=productDataStore$1(ls=>ls.categoryData),a=productDataStore$1(ls=>ls.lookData),b=colorStore(ls=>ls.allActiveVariants),_e=colorStore(ls=>ls.allActiveGeometryVariants),bt=uiSceneStore(ls=>ls.materialOverrideExists);uiSceneStore(ls=>ls.CORE_API);const[rn,sn]=reactExports.useState(0),[yn,Pn]=reactExports.useState(0);reactExports.useEffect(()=>{let ls=0;o.includes("color")===!0&&(ls+=s.color.length),o.includes("geometryVariants")===!0&&(ls+=s.geometryVariants.length),Pn(ls)},[s]);const zn=(ls,zs)=>{uiSceneStore.getState().CORE_API.switchGlobalGeometryVariant(ls,zs)},lr=(ls,zs)=>{uiSceneStore.getState().CORE_API.switchGlobalVariant(ls,zs)};function ar({color:ls,index:zs,elementId:ho,allActiveVariants:ga}){return jsxRuntimeExports.jsxs("div",{role:"button","aria-label":a[ls]?.label+" Button",onClick:()=>lr(ho,ls),className:ga[ho]==ls?"colorSelector selected":"colorSelector",children:[jsxRuntimeExports.jsx("div",{className:"colorThumbnailContainer",children:jsxRuntimeExports.jsxs("div",{className:"colorThumbnail",children:[jsxRuntimeExports.jsx("div",{className:"checkMark",children:jsxRuntimeExports.jsx("img",{alt:"Check",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/Check.svg"})}),jsxRuntimeExports.jsx("img",{alt:"Color Thumbnail",className:"contextColorThumbnail",src:uiSceneStore.getState().CORE_API.getResolvedAssetUrl(a[ls]?.thumbnail)})]})}),jsxRuntimeExports.jsx("div",{className:"colorDetails",children:jsxRuntimeExports.jsx("p",{className:"truncate-mobile colorDetailsLabel",children:capitalize$1(a[ls]?.label)})})]},"Color-"+zs)}function cr({variant:ls,variantId:zs,index:ho,elementId:ga,allActiveGeometryVariants:mo}){return jsxRuntimeExports.jsxs("div",{role:"button","aria-label":ls.label+" Button",onClick:()=>zn(ga,zs),className:mo[ga]==zs?"colorSelector selected":"colorSelector",children:[jsxRuntimeExports.jsx("div",{className:"colorThumbnailContainer",children:jsxRuntimeExports.jsxs("div",{className:"colorThumbnail",children:[jsxRuntimeExports.jsx("div",{className:"checkMark",children:jsxRuntimeExports.jsx("img",{alt:"Check",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/Check.svg"})}),jsxRuntimeExports.jsx("img",{alt:"Color Thumbnail",className:"contextColorThumbnail",src:uiSceneStore.getState().CORE_API.getResolvedAssetUrl(ls.thumbnail)})]})}),jsxRuntimeExports.jsx("div",{className:"colorDetails",children:jsxRuntimeExports.jsx("p",{className:"truncate-mobile colorDetailsLabel",children:capitalize$1(ls.label)})})]},"GeometryVariant-"+ho)}function hr({variantType:ls,element:zs,allActiveVariants:ho,startIndex:ga}){return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[ls=="color"&&zs.looks.map((mo,go)=>jsxRuntimeExports.jsx(ar,{color:mo,index:go,elementId:zs.id,allActiveVariants:ho},"MobileGridInternal_"+go)),ls=="geometry"&&Object.keys(zs.variants).map((mo,go)=>jsxRuntimeExports.jsx(cr,{variant:zs.variants[mo],index:go,elementId:zs.id,variantId:mo,allActiveGeometryVariants:ho},"MobileGridVariantInternal_"+go))]})}const es=reactExports.useCallback(({index:ls})=>jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:ls!==yn-1?jsxRuntimeExports.jsx("div",{className:"itemGridDivider"}):jsxRuntimeExports.jsx("div",{className:"itemGridPlaceholder"})}),[s,yn]),Ur=reactExports.useCallback(()=>{uiSceneStore.getState().CORE_API.removeAllVariantOverrides()},[]),Dr=reactExports.useCallback(ls=>{if(rs.current.scrollLeft===ls)return;let zs,ho,ga,mo=!1;function go(yl){zs===void 0&&(zs=yl);const Zl=yl-zs;if(ho!==yl){const _d=Zl/200;rs.current.scrollLeft>ls?(ga=(rs.current.scrollLeft-ls)*Math.min(_d,1),rs.current.scrollLeft-=ga,rs.current.scrollLeft===ls&&(mo=!0)):rs.current.scrollLeft<ls&&(ga=(ls-rs.current.scrollLeft)*Math.min(_d,1),rs.current.scrollLeft+=ga,rs.current.scrollLeft===ls&&(mo=!0))}Zl<200&&(ho=yl,!mo&&window.requestAnimationFrame(go))}window.requestAnimationFrame(go)},[]),zr=reactExports.useRef([]);reactExports.useEffect(()=>{zr.current=zr.current.slice(0,yn)},[yn]);const rs=reactExports.useRef(null),as=reactExports.useCallback(({categoryID:ls,label:zs,index:ho,totalLength:ga})=>jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:jsxRuntimeExports.jsx("a",{role:"button","aria-label":zs+" Button",className:rn===ho?"mobileTab scrolled":"mobileTab",onClick:()=>{for(let mo=0;mo<ga;mo++)mo===ho&&Dr(zr.current[mo].offsetLeft)},children:zs})}),[rn,zr]),os=reactExports.useCallback(()=>{let ls=-3e3,zs=-1;for(let ho=0;ho<yn;ho++){let ga=zr.current[ho].getBoundingClientRect().left;ga<28&&ls<ga&&(ls=ga,zs=ho)}zs!==-1&&sn(zs)},[zr,s,yn]);return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:jsxRuntimeExports.jsx("div",{className:"mobileTabContent",children:jsxRuntimeExports.jsxs("div",{className:"scrollSpyTabs",children:[jsxRuntimeExports.jsx("div",{className:"secondMobileTabs",children:o.map((ls,zs)=>{if(ls=="color")return s.color.map((ho,ga)=>jsxRuntimeExports.jsx(as,{categoryID:ho.id,label:ho.label,index:zs==0?ga:o.includes("geometryVariants")?s.geometryVariants.length+ga:ga,totalLength:yn},"mobileTabsColors"+ho.id));if(ls=="geometryVariants")return s.geometryVariants.map((ho,ga)=>jsxRuntimeExports.jsx(as,{categoryID:ho.id,label:ho.label,index:zs==0?ga:o.includes("color")?s.color.length+ga:ga,totalLength:yn},"mobileTabsVariants"+ho.id))})}),jsxRuntimeExports.jsx("div",{children:jsxRuntimeExports.jsx("div",{className:"mobileGrid mobileGridCenter",ref:rs,onScroll:os,children:jsxRuntimeExports.jsxs("section",{className:"mobileGridSection",children:[bt&&jsxRuntimeExports.jsxs("button",{role:"button","aria-label":"Remove All Overrides Button",onClick:Ur,className:"removeAllColorOverridesButton",disabled:!bt,children:[jsxRuntimeExports.jsx("div",{className:"iconContainer",children:jsxRuntimeExports.jsx("img",{src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/TrashSimple.svg",alt:"Remove"})}),"Remove all",jsxRuntimeExports.jsx("br",{}),"overrides"]}),o.map((ls,zs)=>{if(ls=="color")return s.color.map((ho,ga)=>jsxRuntimeExports.jsxs("section",{className:"mobileGridCategorySection color-variants-selection",id:`section-${ho.categoryID}`,ref:mo=>zr.current[zs==0?ga:o.includes("geometryVariants")?s.geometryVariants.length+ga:ga]=mo,children:[jsxRuntimeExports.jsx(hr,{variantType:"color",element:ho,allActiveVariants:b},`mobileGrid-${ho.categoryID}`),jsxRuntimeExports.jsx(es,{index:zs==0?ga:o.includes("geometryVariants")?s.geometryVariants.length+ga:ga},"divider"+ho.categoryID)]},`sectionz-${ho.categoryID}-${ga}`));if(ls=="geometryVariants")return s.geometryVariants.map((ho,ga)=>jsxRuntimeExports.jsxs("section",{className:"mobileGridCategorySection geometry-variants-selection",id:`section-${ho.id}`,ref:mo=>zr.current[zs==0?ga:o.includes("color")?s.color.length+ga:ga]=mo,children:[jsxRuntimeExports.jsx(hr,{variantType:"geometry",element:ho,allActiveVariants:_e},`mobileGrid-variants-${ho.id}`),jsxRuntimeExports.jsx(es,{index:zs==0?ga:o.includes("color")?s.color.length+ga:ga},"divider-variants-"+ho.id)]},`sectionz-variants-${ho.id}-${ga}`))})]})})})]})})})},SideMenu=({sideMenuOpen:o,sideMenuRef:s,toggleSideMenuOpen:a,configuratorWcRef:b,PUBLIC_DESIGN_ASSETS_ENDPOINT:_e,handleSideButtonClick:bt,useTabIcon:rn,GENERIC_PROJECT_ASSET_DATA_ROOT_URL:sn,sideMenuState:yn,togglePreviewCartModal:Pn,getItemCount:zn,currency:lr,numberWithCommas:ar})=>{const cr=productDataStore$1(os=>os.hotspotsData),hr=cartStore(os=>os.previewCartModalOpen),es=uiSceneStore(os=>os.dialogPopupOpen),Ur=productDataStore$1(os=>os.categoryData),Dr=uiSceneStore(os=>os.disableCart),zr=uiSceneStore(os=>os.CORE_API),[rs,as]=reactExports.useState([]);return reactExports.useEffect(()=>{const os=zr.sceneSettings.variantsTabOrder,ls=Object.entries(os);ls.sort(([,ho],[,ga])=>ho.priority-ga.priority);const zs=[];ls.forEach(([ho,ga])=>{ga.enabled&&zs.push(ho)}),as(zs)},[zr]),reactExports.useEffect(()=>{if(!uiSceneStore.getState().CORE_API.isMobile)return;const{current:os}=s;!os||b.shadowRoot.getElementById("_leftShell")},[o,s]),jsxRuntimeExports.jsxs("div",{className:`sideMenu interactable ${o===!0?"":"side-menu-collapsed"}`,ref:s,children:[jsxRuntimeExports.jsxs("div",{className:o?"mobileExpandButton sideMenuOpen":"mobileExpandButton",children:[jsxRuntimeExports.jsx("span",{children:"Expand Configurator"}),jsxRuntimeExports.jsx("button",{role:"button","aria-label":"Toggle Menu Button",onClick:a,children:jsxRuntimeExports.jsx("img",{alt:"Down",src:_e+"/Icon/ArrowDown.svg"})},"expandSideMenuButton")]}),jsxRuntimeExports.jsx("div",{className:o===!0?"sideMenuTabContainer":"sideMenuTabContainer side-menu-container-hide",children:jsxRuntimeExports.jsxs(Tabs,{className:"firstMobileTab",children:[jsxRuntimeExports.jsxs(TabList,{className:"firstMobileTabs","aria-label":"Mobile Tab List",children:[jsxRuntimeExports.jsx(Tab$1,{role:"tab",children:jsxRuntimeExports.jsxs("div",{className:"mobileTab",role:"button","aria-label":zr.sceneSettings.textSettings.buildTabHeadingText+" Button",onClick:()=>{bt(0)},children:[rn?jsxRuntimeExports.jsx("img",{className:"icon",alt:"Build Icon",src:sn+"/thumbnails/common-ui/BuildTabIcon.svg"}):"",zr.sceneSettings.textSettings.buildTabHeadingText]})}),(Ur.color.length>0||Ur.geometryVariants.length>0)&&jsxRuntimeExports.jsx(Tab$1,{role:"tab",children:jsxRuntimeExports.jsxs("div",{className:"mobileTab",role:"button","aria-label":zr.sceneSettings.textSettings.colorTabHeadingText+" Button",onClick:()=>{bt(1)},children:[rn?jsxRuntimeExports.jsx("img",{className:"icon",alt:"Color Icon",src:sn+"/thumbnails/common-ui/ColorTabIcon.svg"}):"",zr.sceneSettings.textSettings.colorTabHeadingText]})}),Object.keys(cr).length>0&&jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:jsxRuntimeExports.jsx(Tab$1,{role:"tab",children:jsxRuntimeExports.jsxs("div",{className:"mobileTab",role:"button","aria-label":zr.sceneSettings.textSettings.featuresTabHeadingText+" Button",onClick:()=>{bt(2)},children:[rn?jsxRuntimeExports.jsx("img",{className:"icon",alt:"Features Icon",src:sn+"/thumbnails/common-ui/ProductFeaturesTabIcon.png"}):"",zr.sceneSettings.textSettings.featuresTabHeadingText]})})}),jsxRuntimeExports.jsx("div",{role:"tab",className:"collapse-side-menu-button-parent",children:jsxRuntimeExports.jsx("button",{className:`collapse-side-menu-button ${o===!0?"":"set-display-none"}`,role:"button","aria-label":"Toggle Menu Button",onClick:a,children:jsxRuntimeExports.jsx("img",{alt:"Down",src:_e+"/Icon/ArrowDown.svg"})},"collapseSideMenuButton")})]}),jsxRuntimeExports.jsx(TabPanel,{children:jsxRuntimeExports.jsx(BuildUI,{sideMenuState:0},"BuildUI1")}),(Ur.color.length>0||Ur.geometryVariants.length>0)&&jsxRuntimeExports.jsx(TabPanel,{children:jsxRuntimeExports.jsx("div",{className:"variantContainer",children:jsxRuntimeExports.jsx(VariantMobile,{sortedVariantsTabOrder:rs})})}),Object.keys(cr).length>0&&jsxRuntimeExports.jsx(TabPanel,{children:jsxRuntimeExports.jsx("div",{className:"featuresContainer",children:jsxRuntimeExports.jsx(ProductFeaturesUI,{visible:yn===2},"featuresTab-mobile")})})]})}),jsxRuntimeExports.jsxs("div",{className:"desktopSideMenu",children:[jsxRuntimeExports.jsxs("div",{className:"sideMenuTabs",children:[jsxRuntimeExports.jsxs("div",{role:"button",tabIndex:!es&&!hr?0:-1,className:yn===0?"activeSideMenuTab rightTopBarButton button":"inactiveSideMenuTab rightTopBarButton button","aria-label":zr.sceneSettings.textSettings.buildTabHeadingText+" Button",onClick:()=>{bt(0)},children:[rn?jsxRuntimeExports.jsx("img",{className:"icon",alt:"Build Icon",src:sn+"BuildTabIcon.png"}):"",jsxRuntimeExports.jsx("span",{children:zr.sceneSettings.textSettings.buildTabHeadingText})]}),(Ur.color.length>0||Ur.geometryVariants.length>0)&&jsxRuntimeExports.jsxs("div",{role:"button",tabIndex:!es&&!hr?0:-1,className:yn===1?"activeSideMenuTab rightTopBarButton button":"inactiveSideMenuTab rightTopBarButton button","aria-label":zr.sceneSettings.textSettings.colorTabHeadingText+" Button",onClick:()=>{bt(1)},children:[rn?jsxRuntimeExports.jsx("img",{className:"icon",alt:"Color Icon",src:sn+"/thumbnails/common-ui/ColorTabIcon.svg"}):"",jsxRuntimeExports.jsx("span",{children:zr.sceneSettings.textSettings.colorTabHeadingText})]}),Object.keys(cr).length>0&&jsxRuntimeExports.jsxs("div",{role:"button","aria-label":zr.sceneSettings.textSettings.featuresTabHeadingText+" Button",tabIndex:!es&&!hr?0:-1,className:yn===2?"activeSideMenuTab rightTopBarButton button":"inactiveSideMenuTab rightTopBarButton button",onClick:()=>{bt(2)},children:[rn?jsxRuntimeExports.jsx("img",{className:"icon",alt:"Features Icon",src:sn+"/thumbnails/common-ui/ProductFeaturesTabIcon.png"}):"",jsxRuntimeExports.jsx("span",{children:zr.sceneSettings.textSettings.featuresTabHeadingText})]})]}),jsxRuntimeExports.jsxs("div",{className:"sideMenuContent",children:[jsxRuntimeExports.jsx(PreviewCart,{}),jsxRuntimeExports.jsx(InfoModal,{visible:yn===0}),jsxRuntimeExports.jsx(BuildUI,{visible:yn===0},"buildUi-desktop"),jsxRuntimeExports.jsx("div",{className:"variantContainer",children:rs.map(os=>{if(os=="color"){if(Ur.color.length>0)return jsxRuntimeExports.jsx(Color,{visible:yn===1},"colourTab-desktop")}else if(os=="geometryVariants"&&Ur.geometryVariants.length>0)return jsxRuntimeExports.jsx(GeometryVariants,{visible:yn===1},"geometryVariantsTab-desktop")})}),jsxRuntimeExports.jsx(ProductFeaturesUI,{visible:yn===2},"featuresTab-desktop")]})]}),jsxRuntimeExports.jsxs("div",{role:"button",tabIndex:es?-1:0,className:"bottomBar right button","aria-label":"Toggle Preview Cart Button",onClick:()=>{Pn()},children:[jsxRuntimeExports.jsxs("div",{className:"bottomBarChildDiv",children:[jsxRuntimeExports.jsx("span",{children:zr.sceneSettings.textSettings.reviewButtonText}),jsxRuntimeExports.jsx("div",{className:"cartNumber",children:zn()})]}),jsxRuntimeExports.jsx("div",{className:"reviewButtonParentDiv",children:jsxRuntimeExports.jsx("div",{className:"button reviewButton".concat(Dr===!0?" hide":""),children:jsxRuntimeExports.jsx("div",{className:"",children:`${lr}${ar(cartStore.getState().cartTotalPrice)}`})})})]}),jsxRuntimeExports.jsx("div",{className:"reviewButtonSibling"})]})},PreviewCartMobile=({previewCartModalOpen:o,togglePreviewCartModal:s,PUBLIC_DESIGN_ASSETS_ENDPOINT:a,cart:b})=>{const _e=uiSceneStore(yn=>yn.disableCart),bt=uiSceneStore(yn=>yn.CORE_API),rn=uiSceneStore(yn=>yn.cartMessage),sn=reactExports.useCallback(async()=>{await bt.checkoutAsync()},[]);return jsxRuntimeExports.jsxs("div",{className:o?"previewCartModal mobile open":"previewCartModal mobile",children:[jsxRuntimeExports.jsx("div",{className:"closeButton",role:"button","aria-label":"Close Button",onClick:()=>{s()},children:jsxRuntimeExports.jsx("img",{alt:"Close Button",src:a+"/Icon/X.svg"})}),jsxRuntimeExports.jsx("h2",{className:"cartTitle",children:bt.sceneSettings.textSettings.cartHeadingText}),b.length>0?jsxRuntimeExports.jsxs("div",{className:"previewCartContentParentDiv",children:[jsxRuntimeExports.jsx("div",{className:"previewCartContent",children:b.map(function(yn,Pn){return jsxRuntimeExports.jsx(CartItem,{itemObject:yn,index:Pn},`Cart Item - ${Pn}`)})}),jsxRuntimeExports.jsxs("div",{className:"previewCartButtonContainer".concat(_e===!0?" hide":""),children:[rn&&jsxRuntimeExports.jsx("div",{className:"cartMessageDiv",children:jsxRuntimeExports.jsx("span",{children:rn})}),jsxRuntimeExports.jsxs("button",{className:"checkoutButton",role:"button","aria-label":"Checkout Button",onClick:sn,children:[jsxRuntimeExports.jsx("span",{children:bt.sceneSettings.addToCartCTAText}),jsxRuntimeExports.jsx("img",{alt:"Right",src:a+"/Icon/ArrowRight.svg"})]})]})]}):jsxRuntimeExports.jsx("h3",{className:"cartEmptyText",children:"Your cart is currently empty"})]})},ContextMenuDesktop=({selectedItemData:o,colors:s,colorsCategoryName:a})=>{const b=uiSceneStore(Ur=>Ur.CORE_API),[_e,bt]=reactExports.useState(null),[rn,sn]=reactExports.useState(0),[yn,Pn]=reactExports.useState(0),[zn,lr]=reactExports.useState(null),ar=reactExports.useRef(null),cr=reactExports.useRef(null),hr=uiSceneStore(Ur=>Ur.dialogPopupOpen),es=reactExports.useCallback(()=>{b.fireEvent(b.EVENTS.UI.ContextMenu_InfoBtnClicked,o)},[o]);return reactExports.useEffect(()=>{lr(null),o&&(lr({...o}),o.overrideVariant?bt(o.overrideVariant):bt(o.currentVariant))},[o]),reactExports.useEffect(()=>{if(!zn||!cr.current||!o||!ar.current)return;const Ur=b.getCanvasSize();let Dr=o.offsetX+ar.current.children[0].clientWidth,zr=o.offsetY+ar.current.children[0].clientHeight,rs=Ur.width-Dr;rs<0?sn(o.offsetX+rs-10):sn(o.offsetX);let as=Ur.height-zr;as<0?Pn(o.offsetY+as-10):Pn(o.offsetY),cr.current.focus()},[zn,o,ar]),jsxRuntimeExports.jsx("div",{ref:ar,children:o!==null&&jsxRuntimeExports.jsx("div",{className:"contextMenuParent interactable",style:{left:rn+"px",top:yn+"px"},children:jsxRuntimeExports.jsx("div",{className:"contextContentDiv",children:jsxRuntimeExports.jsxs("div",{className:"contextContent",children:[jsxRuntimeExports.jsxs("div",{className:"contextContentChildDiv",children:[jsxRuntimeExports.jsxs("div",{className:"contextNameContent",children:[jsxRuntimeExports.jsx("h3",{children:o.itemData.name}),jsxRuntimeExports.jsx("img",{ref:cr,role:"button",tabIndex:hr?-1:0,className:"infoButton",alt:"Info Button","aria-label":"Info Button",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/Info.svg",onClick:()=>es()})]}),jsxRuntimeExports.jsx("div",{role:"button",tabIndex:hr?-1:0,"aria-label":"Close Button",className:"closeContainer closeButton",onClick:()=>b.exitSelectedItem(),children:jsxRuntimeExports.jsx("img",{alt:"Close Button",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/X.svg"})})]}),s.length>0&&b.sceneSettings.disableLocalColorOverride===!1&&jsxRuntimeExports.jsxs("div",{className:"contextColorContent",children:[jsxRuntimeExports.jsxs("span",{className:"colorSwatchTitle",children:["Select ",a]}),jsxRuntimeExports.jsx("div",{className:"color-grid color-variants-selection",children:s.map((Ur,Dr)=>jsxRuntimeExports.jsxs("div",{role:"button",tabIndex:hr?-1:0,"aria-label":"Select "+Ur.label,onClick:async()=>{await b.overrideSelectedItemMaterial(Ur.id),bt(Ur.id)},className:_e==Ur.id?"colorSelector selected":"colorSelector",children:[jsxRuntimeExports.jsx("div",{className:"colorThumbnailContainer",children:jsxRuntimeExports.jsxs("div",{className:"colorThumbnail",children:[jsxRuntimeExports.jsx("div",{className:"checkMark",children:jsxRuntimeExports.jsx("img",{alt:"Checkmark",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/Check.svg"})}),jsxRuntimeExports.jsx("img",{alt:"Color Thumbnail",className:"contextColorThumbnail",src:b.getResolvedAssetUrl(Ur.thumbnail)})]})}),jsxRuntimeExports.jsx("div",{className:"colorDetails",children:jsxRuntimeExports.jsxs("p",{className:"truncate colorDetailsLabel",children:[capitalize$1(Ur.label),jsxRuntimeExports.jsx("br",{}),jsxRuntimeExports.jsx("span",{className:"redText",children:Ur.outOfStock?"OUT OF STOCK":jsxRuntimeExports.jsx("br",{})})]})})]},"Color-"+Dr))})]}),jsxRuntimeExports.jsxs("div",{className:"contextButtons",children:[b.canSelectedItemDrag()&&jsxRuntimeExports.jsxs("div",{role:"button",tabIndex:hr?-1:0,"aria-label":"Remove Button",onClick:()=>{b.doesSelectedItemHasAttachedDependency()?b.triggerItemRemoveModal(o.itemData.guid):b.removeSelectedItem()},children:[jsxRuntimeExports.jsx("img",{src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/TrashSimple.svg",alt:"Remove"}),jsxRuntimeExports.jsx("span",{children:"Remove"})]}),b.canSelectedItemRotate()&&jsxRuntimeExports.jsxs("div",{role:"button","aria-label":"Rotate Button",tabIndex:hr?-1:0,onClick:()=>b.rotateSelectedItem(),children:[jsxRuntimeExports.jsx("img",{alt:"Rotate",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/Rotate.svg"}),jsxRuntimeExports.jsx("span",{children:"Rotate"})]})]})]})})})})},ContextMenuMobile=({selectedItemData:o,contextMenuDrawerOpen:s,dismissContextMenuDrawer:a,colors:b,colorsCategoryName:_e})=>{const[bt,rn]=reactExports.useState(s),sn=reactExports.useRef(null),yn=uiSceneStore(ar=>ar.CORE_API),[Pn,zn]=reactExports.useState(null);reactExports.useEffect(()=>{sn.current&&sn.current.addEventListener("drawerClosed",()=>{a()})},[sn]),reactExports.useEffect(()=>(rn(s),()=>{}),[s]),reactExports.useEffect(()=>{!o||!o.itemData||(o.overrideVariant?zn(o.overrideVariant):zn(o.currentVariant))},[o]);async function lr(){yn.doesSelectedItemHasAttachedDependency()?yn.triggerItemRemoveModal(o.itemData.guid):(await yn.removeSelectedItem(),a())}return jsxRuntimeExports.jsx(BottomDrawer,{id:"contextDrawer",ref:sn,open:`${bt}`,"initial-screen-coverage":"60%",children:jsxRuntimeExports.jsx("div",{className:"contextMenuDrawer epigraphDrawer",slot:"bottom-drawer-content",children:jsxRuntimeExports.jsxs("div",{className:"contextMenuParent interactable",children:[jsxRuntimeExports.jsx("div",{className:"contextContent",children:o&&o.itemData?jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:jsxRuntimeExports.jsx("div",{className:"contextContentNameDiv",children:jsxRuntimeExports.jsx("h3",{children:o.itemData.name})})}):""}),b.length>0&&yn.sceneSettings.disableLocalColorOverride===!1&&jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsxs("p",{className:"colorSwatchTitle",children:["Select ",_e]}),jsxRuntimeExports.jsx("div",{className:"color-grid color-variants-selection",children:b.map((ar,cr)=>jsxRuntimeExports.jsxs("div",{role:"button","aria-label":"Select "+ar.label,onClick:async()=>{await uiSceneStore.getState().CORE_API.overrideSelectedItemMaterial(ar.id),zn(ar.id)},className:Pn==ar.id?"colorSelector selected":"colorSelector",children:[jsxRuntimeExports.jsxs("div",{className:"colorThumbnailContainer",children:[jsxRuntimeExports.jsx("div",{className:"colorThumbnail",children:jsxRuntimeExports.jsx("img",{alt:"Color Thumbnail",className:"colorThumbnailImg",src:yn.getResolvedAssetUrl(ar.thumbnail)})}),jsxRuntimeExports.jsx("div",{className:"checkMark",children:jsxRuntimeExports.jsx("img",{alt:"Check",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/Check.svg"})})]}),jsxRuntimeExports.jsx("div",{className:"colorDetails",children:jsxRuntimeExports.jsxs("p",{className:"truncate colorDetailsLabel",children:[capitalize$1(ar.label),jsxRuntimeExports.jsx("br",{}),jsxRuntimeExports.jsx("span",{className:"redText",children:ar.outOfStock?"OUT OF STOCK":jsxRuntimeExports.jsx("br",{})})]})})]},"Color-"+cr))})]}),jsxRuntimeExports.jsxs("div",{className:"contextButtons",children:[yn.canSelectedItemBeRemoved()&&jsxRuntimeExports.jsxs("button",{role:"button","aria-label":"Remove Button",onClick:()=>lr(),children:[jsxRuntimeExports.jsx("img",{alt:"Remove",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/Trash.svg"}),jsxRuntimeExports.jsx("span",{children:"Remove"})]}),yn.canSelectedItemRotate()&&jsxRuntimeExports.jsxs("button",{role:"button","aria-label":"Rotate Button",onClick:()=>yn.rotateSelectedItem(),children:[jsxRuntimeExports.jsx("img",{alt:"Rotate",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/Rotate.svg"}),jsxRuntimeExports.jsx("span",{children:"Rotate"})]})]})]})})})},ContextMenu=({selectedItemData:o,contextMenuOpen:s,dismissContextMenuDrawer:a})=>{const b=uiSceneStore(ar=>ar.CORE_API),[_e,bt]=reactExports.useState(!1),[rn,sn]=reactExports.useState([]),[yn,Pn]=reactExports.useState(""),zn=uiSceneStore(ar=>ar.inventoryData);reactExports.useEffect(()=>(bt(s),()=>{}),[s]),reactExports.useEffect(()=>{if(sn([]),o===void 0||!o.itemData||b===null)return;const ar=b.getSelectedItemColors(),cr=b.getInventoryInfo()[o.itemData.skuID];if(ar.map(es=>{es.outOfStock=!1,cr[es.id].countAvailable==0&&(es.outOfStock=!0)}),sn(ar),ar.length===0)return;const hr=b.categoryData;hr.color&&hr.color.map(es=>{es.looks.map(Ur=>{Ur===ar[0].id&&Pn(es.label)})})},[o]),reactExports.useEffect(()=>{zn!=null&&lr(zn)},[zn]);const lr=reactExports.useCallback(ar=>{const cr=b.getSelectedItemData();if(cr==null)return;const hr=b.getSelectedItemColors(),es=ar[cr.itemData.skuID];hr.map(Ur=>{Ur.outOfStock=!1,es[Ur.id].countAvailable==0&&(Ur.outOfStock=!0)}),sn(hr)},[o]);return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:b.isMobile&&window.innerWidth<=768?jsxRuntimeExports.jsx(ContextMenuMobile,{selectedItemData:o,contextMenuDrawerOpen:_e,dismissContextMenuDrawer:a,colors:rn,colorsCategoryName:yn}):_e&&jsxRuntimeExports.jsx(ContextMenuDesktop,{contextMenuDesktopOpen:_e,selectedItemData:o,colors:rn,colorsCategoryName:yn})})},FullScreenModal=reactExports.forwardRef((o,s)=>{const a=reactExports.useRef(null),b=reactExports.useRef(null);reactExports.useEffect(()=>{s.current&&b.current&&a.current&&(s.current.show=sn=>bt(),s.current.hide=sn=>rn(),s.current.mainContainer=a.current,s.current.closeButton=b.current,_e())},[s,b,a]);const _e=()=>{b.current.addEventListener("click",()=>{o.onExit&&o.onExit(),rn()})},bt=()=>{a.current.classList.add("show"),uiSceneStore.setState({dialogPopupOpen:!0}),b.current.focus()},rn=()=>{uiSceneStore.setState({dialogPopupOpen:!1}),a.current.classList.remove("show")};return jsxRuntimeExports.jsx("div",{id:o.id,ref:s,className:o.className,children:jsxRuntimeExports.jsx("div",{"aria-hidden":!o.open,ref:a,className:"full-screen-modal-container",children:jsxRuntimeExports.jsxs("div",{className:"modal-content-container",children:[jsxRuntimeExports.jsx("div",{role:"button","aria-label":"Close Button",tabIndex:o.open?0:-1,ref:b,className:"close-button",children:jsxRuntimeExports.jsx("img",{alt:"Close Button",src:"https://storage.googleapis.com/gsc-epigraph-design/product-assets/Icon/X.svg"})}),jsxRuntimeExports.jsx("slot",{name:"full-screen-dialog-content",children:o.children})]})})})});var lottie$1={exports:{}};(function(module,exports){typeof navigator<"u"&&function(o,s){module.exports=s()}(commonjsGlobal,function(){var svgNS="http://www.w3.org/2000/svg",locationHref="",_useWebWorker=!1,initialDefaultFrame=-999999,setWebWorker=function(s){_useWebWorker=!!s},getWebWorker=function(){return _useWebWorker},setLocationHref=function(s){locationHref=s},getLocationHref=function(){return locationHref};function createTag(o){return document.createElement(o)}function extendPrototype(o,s){var a,b=o.length,_e;for(a=0;a<b;a+=1){_e=o[a].prototype;for(var bt in _e)Object.prototype.hasOwnProperty.call(_e,bt)&&(s.prototype[bt]=_e[bt])}}function getDescriptor(o,s){return Object.getOwnPropertyDescriptor(o,s)}function createProxyFunction(o){function s(){}return s.prototype=o,s}var audioControllerFactory=function(){function o(s){this.audios=[],this.audioFactory=s,this._volume=1,this._isMuted=!1}return o.prototype={addAudio:function(a){this.audios.push(a)},pause:function(){var a,b=this.audios.length;for(a=0;a<b;a+=1)this.audios[a].pause()},resume:function(){var a,b=this.audios.length;for(a=0;a<b;a+=1)this.audios[a].resume()},setRate:function(a){var b,_e=this.audios.length;for(b=0;b<_e;b+=1)this.audios[b].setRate(a)},createAudio:function(a){return this.audioFactory?this.audioFactory(a):window.Howl?new window.Howl({src:[a]}):{isPlaying:!1,play:function(){this.isPlaying=!0},seek:function(){this.isPlaying=!1},playing:function(){},rate:function(){},setVolume:function(){}}},setAudioFactory:function(a){this.audioFactory=a},setVolume:function(a){this._volume=a,this._updateVolume()},mute:function(){this._isMuted=!0,this._updateVolume()},unmute:function(){this._isMuted=!1,this._updateVolume()},getVolume:function(){return this._volume},_updateVolume:function(){var a,b=this.audios.length;for(a=0;a<b;a+=1)this.audios[a].volume(this._volume*(this._isMuted?0:1))}},function(){return new o}}(),createTypedArray=function(){function o(a,b){var _e=0,bt=[],rn;switch(a){case"int16":case"uint8c":rn=1;break;default:rn=1.1;break}for(_e=0;_e<b;_e+=1)bt.push(rn);return bt}function s(a,b){return a==="float32"?new Float32Array(b):a==="int16"?new Int16Array(b):a==="uint8c"?new Uint8ClampedArray(b):o(a,b)}return typeof Uint8ClampedArray=="function"&&typeof Float32Array=="function"?s:o}();function createSizedArray(o){return Array.apply(null,{length:o})}function _typeof$6(o){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?_typeof$6=function(a){return typeof a}:_typeof$6=function(a){return a&&typeof Symbol=="function"&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},_typeof$6(o)}var subframeEnabled=!0,expressionsPlugin=null,expressionsInterfaces=null,idPrefix$1="",isSafari=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),bmPow=Math.pow,bmSqrt=Math.sqrt,bmFloor=Math.floor,bmMax=Math.max,bmMin=Math.min,BMMath={};(function(){var o=["abs","acos","acosh","asin","asinh","atan","atanh","atan2","ceil","cbrt","expm1","clz32","cos","cosh","exp","floor","fround","hypot","imul","log","log1p","log2","log10","max","min","pow","random","round","sign","sin","sinh","sqrt","tan","tanh","trunc","E","LN10","LN2","LOG10E","LOG2E","PI","SQRT1_2","SQRT2"],s,a=o.length;for(s=0;s<a;s+=1)BMMath[o[s]]=Math[o[s]]})(),BMMath.random=Math.random,BMMath.abs=function(o){var s=_typeof$6(o);if(s==="object"&&o.length){var a=createSizedArray(o.length),b,_e=o.length;for(b=0;b<_e;b+=1)a[b]=Math.abs(o[b]);return a}return Math.abs(o)};var defaultCurveSegments=150,degToRads=Math.PI/180,roundCorner=.5519;function styleDiv(o){o.style.position="absolute",o.style.top=0,o.style.left=0,o.style.display="block",o.style.transformOrigin="0 0",o.style.webkitTransformOrigin="0 0",o.style.backfaceVisibility="visible",o.style.webkitBackfaceVisibility="visible",o.style.transformStyle="preserve-3d",o.style.webkitTransformStyle="preserve-3d",o.style.mozTransformStyle="preserve-3d"}function BMEnterFrameEvent(o,s,a,b){this.type=o,this.currentTime=s,this.totalTime=a,this.direction=b<0?-1:1}function BMCompleteEvent(o,s){this.type=o,this.direction=s<0?-1:1}function BMCompleteLoopEvent(o,s,a,b){this.type=o,this.currentLoop=a,this.totalLoops=s,this.direction=b<0?-1:1}function BMSegmentStartEvent(o,s,a){this.type=o,this.firstFrame=s,this.totalFrames=a}function BMDestroyEvent(o,s){this.type=o,this.target=s}function BMRenderFrameErrorEvent(o,s){this.type="renderFrameError",this.nativeError=o,this.currentTime=s}function BMConfigErrorEvent(o){this.type="configError",this.nativeError=o}var createElementID=function(){var o=0;return function(){return o+=1,idPrefix$1+"__lottie_element_"+o}}();function HSVtoRGB(o,s,a){var b,_e,bt,rn,sn,yn,Pn,zn;switch(rn=Math.floor(o*6),sn=o*6-rn,yn=a*(1-s),Pn=a*(1-sn*s),zn=a*(1-(1-sn)*s),rn%6){case 0:b=a,_e=zn,bt=yn;break;case 1:b=Pn,_e=a,bt=yn;break;case 2:b=yn,_e=a,bt=zn;break;case 3:b=yn,_e=Pn,bt=a;break;case 4:b=zn,_e=yn,bt=a;break;case 5:b=a,_e=yn,bt=Pn;break}return[b,_e,bt]}function RGBtoHSV(o,s,a){var b=Math.max(o,s,a),_e=Math.min(o,s,a),bt=b-_e,rn,sn=b===0?0:bt/b,yn=b/255;switch(b){case _e:rn=0;break;case o:rn=s-a+bt*(s<a?6:0),rn/=6*bt;break;case s:rn=a-o+bt*2,rn/=6*bt;break;case a:rn=o-s+bt*4,rn/=6*bt;break}return[rn,sn,yn]}function addSaturationToRGB(o,s){var a=RGBtoHSV(o[0]*255,o[1]*255,o[2]*255);return a[1]+=s,a[1]>1?a[1]=1:a[1]<=0&&(a[1]=0),HSVtoRGB(a[0],a[1],a[2])}function addBrightnessToRGB(o,s){var a=RGBtoHSV(o[0]*255,o[1]*255,o[2]*255);return a[2]+=s,a[2]>1?a[2]=1:a[2]<0&&(a[2]=0),HSVtoRGB(a[0],a[1],a[2])}function addHueToRGB(o,s){var a=RGBtoHSV(o[0]*255,o[1]*255,o[2]*255);return a[0]+=s/360,a[0]>1?a[0]-=1:a[0]<0&&(a[0]+=1),HSVtoRGB(a[0],a[1],a[2])}var rgbToHex=function(){var o=[],s,a;for(s=0;s<256;s+=1)a=s.toString(16),o[s]=a.length===1?"0"+a:a;return function(b,_e,bt){return b<0&&(b=0),_e<0&&(_e=0),bt<0&&(bt=0),"#"+o[b]+o[_e]+o[bt]}}(),setSubframeEnabled=function(s){subframeEnabled=!!s},getSubframeEnabled=function(){return subframeEnabled},setExpressionsPlugin=function(s){expressionsPlugin=s},getExpressionsPlugin=function(){return expressionsPlugin},setExpressionInterfaces=function(s){expressionsInterfaces=s},getExpressionInterfaces=function(){return expressionsInterfaces},setDefaultCurveSegments=function(s){defaultCurveSegments=s},getDefaultCurveSegments=function(){return defaultCurveSegments},setIdPrefix=function(s){idPrefix$1=s};function createNS(o){return document.createElementNS(svgNS,o)}function _typeof$5(o){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?_typeof$5=function(a){return typeof a}:_typeof$5=function(a){return a&&typeof Symbol=="function"&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},_typeof$5(o)}var dataManager=function(){var o=1,s=[],a,b,_e={onmessage:function(){},postMessage:function(cr){a({data:cr})}},bt={postMessage:function(cr){_e.onmessage({data:cr})}};function rn(ar){if(window.Worker&&window.Blob&&getWebWorker()){var cr=new Blob(["var _workerSelf = self; self.onmessage = ",ar.toString()],{type:"text/javascript"}),hr=URL.createObjectURL(cr);return new Worker(hr)}return a=ar,_e}function sn(){b||(b=rn(function(cr){function hr(){function Ur(Ty,yy){var by,Al,_f=Ty.length,gy,El,My,By;for(Al=0;Al<_f;Al+=1)if(by=Ty[Al],"ks"in by&&!by.completed){if(by.completed=!0,by.hasMask){var lA=by.masksProperties;for(El=lA.length,gy=0;gy<El;gy+=1)if(lA[gy].pt.k.i)os(lA[gy].pt.k);else for(By=lA[gy].pt.k.length,My=0;My<By;My+=1)lA[gy].pt.k[My].s&&os(lA[gy].pt.k[My].s[0]),lA[gy].pt.k[My].e&&os(lA[gy].pt.k[My].e[0])}by.ty===0?(by.layers=rs(by.refId,yy),Ur(by.layers,yy)):by.ty===4?as(by.shapes):by.ty===5&&Zl(by)}}function Dr(Ty,yy){if(Ty){var by=0,Al=Ty.length;for(by=0;by<Al;by+=1)Ty[by].t===1&&(Ty[by].data.layers=rs(Ty[by].data.refId,yy),Ur(Ty[by].data.layers,yy))}}function zr(Ty,yy){for(var by=0,Al=yy.length;by<Al;){if(yy[by].id===Ty)return yy[by];by+=1}return null}function rs(Ty,yy){var by=zr(Ty,yy);return by?by.layers.__used?JSON.parse(JSON.stringify(by.layers)):(by.layers.__used=!0,by.layers):null}function as(Ty){var yy,by=Ty.length,Al,_f;for(yy=by-1;yy>=0;yy-=1)if(Ty[yy].ty==="sh")if(Ty[yy].ks.k.i)os(Ty[yy].ks.k);else for(_f=Ty[yy].ks.k.length,Al=0;Al<_f;Al+=1)Ty[yy].ks.k[Al].s&&os(Ty[yy].ks.k[Al].s[0]),Ty[yy].ks.k[Al].e&&os(Ty[yy].ks.k[Al].e[0]);else Ty[yy].ty==="gr"&&as(Ty[yy].it)}function os(Ty){var yy,by=Ty.i.length;for(yy=0;yy<by;yy+=1)Ty.i[yy][0]+=Ty.v[yy][0],Ty.i[yy][1]+=Ty.v[yy][1],Ty.o[yy][0]+=Ty.v[yy][0],Ty.o[yy][1]+=Ty.v[yy][1]}function ls(Ty,yy){var by=yy?yy.split("."):[100,100,100];return Ty[0]>by[0]?!0:by[0]>Ty[0]?!1:Ty[1]>by[1]?!0:by[1]>Ty[1]?!1:Ty[2]>by[2]?!0:by[2]>Ty[2]?!1:null}var zs=function(){var Ty=[4,4,14];function yy(Al){var _f=Al.t.d;Al.t.d={k:[{s:_f,t:0}]}}function by(Al){var _f,gy=Al.length;for(_f=0;_f<gy;_f+=1)Al[_f].ty===5&&yy(Al[_f])}return function(Al){if(ls(Ty,Al.v)&&(by(Al.layers),Al.assets)){var _f,gy=Al.assets.length;for(_f=0;_f<gy;_f+=1)Al.assets[_f].layers&&by(Al.assets[_f].layers)}}}(),ho=function(){var Ty=[4,7,99];return function(yy){if(yy.chars&&!ls(Ty,yy.v)){var by,Al=yy.chars.length;for(by=0;by<Al;by+=1){var _f=yy.chars[by];_f.data&&_f.data.shapes&&(as(_f.data.shapes),_f.data.ip=0,_f.data.op=99999,_f.data.st=0,_f.data.sr=1,_f.data.ks={p:{k:[0,0],a:0},s:{k:[100,100],a:0},a:{k:[0,0],a:0},r:{k:0,a:0},o:{k:100,a:0}},yy.chars[by].t||(_f.data.shapes.push({ty:"no"}),_f.data.shapes[0].it.push({p:{k:[0,0],a:0},s:{k:[100,100],a:0},a:{k:[0,0],a:0},r:{k:0,a:0},o:{k:100,a:0},sk:{k:0,a:0},sa:{k:0,a:0},ty:"tr"})))}}}}(),ga=function(){var Ty=[5,7,15];function yy(Al){var _f=Al.t.p;typeof _f.a=="number"&&(_f.a={a:0,k:_f.a}),typeof _f.p=="number"&&(_f.p={a:0,k:_f.p}),typeof _f.r=="number"&&(_f.r={a:0,k:_f.r})}function by(Al){var _f,gy=Al.length;for(_f=0;_f<gy;_f+=1)Al[_f].ty===5&&yy(Al[_f])}return function(Al){if(ls(Ty,Al.v)&&(by(Al.layers),Al.assets)){var _f,gy=Al.assets.length;for(_f=0;_f<gy;_f+=1)Al.assets[_f].layers&&by(Al.assets[_f].layers)}}}(),mo=function(){var Ty=[4,1,9];function yy(Al){var _f,gy=Al.length,El,My;for(_f=0;_f<gy;_f+=1)if(Al[_f].ty==="gr")yy(Al[_f].it);else if(Al[_f].ty==="fl"||Al[_f].ty==="st")if(Al[_f].c.k&&Al[_f].c.k[0].i)for(My=Al[_f].c.k.length,El=0;El<My;El+=1)Al[_f].c.k[El].s&&(Al[_f].c.k[El].s[0]/=255,Al[_f].c.k[El].s[1]/=255,Al[_f].c.k[El].s[2]/=255,Al[_f].c.k[El].s[3]/=255),Al[_f].c.k[El].e&&(Al[_f].c.k[El].e[0]/=255,Al[_f].c.k[El].e[1]/=255,Al[_f].c.k[El].e[2]/=255,Al[_f].c.k[El].e[3]/=255);else Al[_f].c.k[0]/=255,Al[_f].c.k[1]/=255,Al[_f].c.k[2]/=255,Al[_f].c.k[3]/=255}function by(Al){var _f,gy=Al.length;for(_f=0;_f<gy;_f+=1)Al[_f].ty===4&&yy(Al[_f].shapes)}return function(Al){if(ls(Ty,Al.v)&&(by(Al.layers),Al.assets)){var _f,gy=Al.assets.length;for(_f=0;_f<gy;_f+=1)Al.assets[_f].layers&&by(Al.assets[_f].layers)}}}(),go=function(){var Ty=[4,4,18];function yy(Al){var _f,gy=Al.length,El,My;for(_f=gy-1;_f>=0;_f-=1)if(Al[_f].ty==="sh")if(Al[_f].ks.k.i)Al[_f].ks.k.c=Al[_f].closed;else for(My=Al[_f].ks.k.length,El=0;El<My;El+=1)Al[_f].ks.k[El].s&&(Al[_f].ks.k[El].s[0].c=Al[_f].closed),Al[_f].ks.k[El].e&&(Al[_f].ks.k[El].e[0].c=Al[_f].closed);else Al[_f].ty==="gr"&&yy(Al[_f].it)}function by(Al){var _f,gy,El=Al.length,My,By,lA,wA;for(gy=0;gy<El;gy+=1){if(_f=Al[gy],_f.hasMask){var Fy=_f.masksProperties;for(By=Fy.length,My=0;My<By;My+=1)if(Fy[My].pt.k.i)Fy[My].pt.k.c=Fy[My].cl;else for(wA=Fy[My].pt.k.length,lA=0;lA<wA;lA+=1)Fy[My].pt.k[lA].s&&(Fy[My].pt.k[lA].s[0].c=Fy[My].cl),Fy[My].pt.k[lA].e&&(Fy[My].pt.k[lA].e[0].c=Fy[My].cl)}_f.ty===4&&yy(_f.shapes)}}return function(Al){if(ls(Ty,Al.v)&&(by(Al.layers),Al.assets)){var _f,gy=Al.assets.length;for(_f=0;_f<gy;_f+=1)Al.assets[_f].layers&&by(Al.assets[_f].layers)}}}();function yl(Ty){Ty.__complete||(mo(Ty),zs(Ty),ho(Ty),ga(Ty),go(Ty),Ur(Ty.layers,Ty.assets),Dr(Ty.chars,Ty.assets),Ty.__complete=!0)}function Zl(Ty){Ty.t.a.length===0&&"m"in Ty.t.p}var _d={};return _d.completeData=yl,_d.checkColors=mo,_d.checkChars=ho,_d.checkPathProperties=ga,_d.checkShapes=go,_d.completeLayers=Ur,_d}if(bt.dataManager||(bt.dataManager=hr()),bt.assetLoader||(bt.assetLoader=function(){function Ur(zr){var rs=zr.getResponseHeader("content-type");return rs&&zr.responseType==="json"&&rs.indexOf("json")!==-1||zr.response&&_typeof$5(zr.response)==="object"?zr.response:zr.response&&typeof zr.response=="string"?JSON.parse(zr.response):zr.responseText?JSON.parse(zr.responseText):null}function Dr(zr,rs,as,os){var ls,zs=new XMLHttpRequest;try{zs.responseType="json"}catch{}zs.onreadystatechange=function(){if(zs.readyState===4)if(zs.status===200)ls=Ur(zs),as(ls);else try{ls=Ur(zs),as(ls)}catch(ho){os&&os(ho)}};try{zs.open(["G","E","T"].join(""),zr,!0)}catch{zs.open(["G","E","T"].join(""),rs+"/"+zr,!0)}zs.send()}return{load:Dr}}()),cr.data.type==="loadAnimation")bt.assetLoader.load(cr.data.path,cr.data.fullPath,function(Ur){bt.dataManager.completeData(Ur),bt.postMessage({id:cr.data.id,payload:Ur,status:"success"})},function(){bt.postMessage({id:cr.data.id,status:"error"})});else if(cr.data.type==="complete"){var es=cr.data.animation;bt.dataManager.completeData(es),bt.postMessage({id:cr.data.id,payload:es,status:"success"})}else cr.data.type==="loadData"&&bt.assetLoader.load(cr.data.path,cr.data.fullPath,function(Ur){bt.postMessage({id:cr.data.id,payload:Ur,status:"success"})},function(){bt.postMessage({id:cr.data.id,status:"error"})})}),b.onmessage=function(ar){var cr=ar.data,hr=cr.id,es=s[hr];s[hr]=null,cr.status==="success"?es.onComplete(cr.payload):es.onError&&es.onError()})}function yn(ar,cr){o+=1;var hr="processId_"+o;return s[hr]={onComplete:ar,onError:cr},hr}function Pn(ar,cr,hr){sn();var es=yn(cr,hr);b.postMessage({type:"loadAnimation",path:ar,fullPath:window.location.origin+window.location.pathname,id:es})}function zn(ar,cr,hr){sn();var es=yn(cr,hr);b.postMessage({type:"loadData",path:ar,fullPath:window.location.origin+window.location.pathname,id:es})}function lr(ar,cr,hr){sn();var es=yn(cr,hr);b.postMessage({type:"complete",animation:ar,id:es})}return{loadAnimation:Pn,loadData:zn,completeAnimation:lr}}(),ImagePreloader=function(){var o=function(){var Dr=createTag("canvas");Dr.width=1,Dr.height=1;var zr=Dr.getContext("2d");return zr.fillStyle="rgba(0,0,0,0)",zr.fillRect(0,0,1,1),Dr}();function s(){this.loadedAssets+=1,this.loadedAssets===this.totalImages&&this.loadedFootagesCount===this.totalFootages&&this.imagesLoadedCb&&this.imagesLoadedCb(null)}function a(){this.loadedFootagesCount+=1,this.loadedAssets===this.totalImages&&this.loadedFootagesCount===this.totalFootages&&this.imagesLoadedCb&&this.imagesLoadedCb(null)}function b(Dr,zr,rs){var as="";if(Dr.e)as=Dr.p;else if(zr){var os=Dr.p;os.indexOf("images/")!==-1&&(os=os.split("/")[1]),as=zr+os}else as=rs,as+=Dr.u?Dr.u:"",as+=Dr.p;return as}function _e(Dr){var zr=0,rs=setInterval(function(){var as=Dr.getBBox();(as.width||zr>500)&&(this._imageLoaded(),clearInterval(rs)),zr+=1}.bind(this),50)}function bt(Dr){var zr=b(Dr,this.assetsPath,this.path),rs=createNS("image");isSafari?this.testImageLoaded(rs):rs.addEventListener("load",this._imageLoaded,!1),rs.addEventListener("error",function(){as.img=o,this._imageLoaded()}.bind(this),!1),rs.setAttributeNS("http://www.w3.org/1999/xlink","href",zr),this._elementHelper.append?this._elementHelper.append(rs):this._elementHelper.appendChild(rs);var as={img:rs,assetData:Dr};return as}function rn(Dr){var zr=b(Dr,this.assetsPath,this.path),rs=createTag("img");rs.crossOrigin="anonymous",rs.addEventListener("load",this._imageLoaded,!1),rs.addEventListener("error",function(){as.img=o,this._imageLoaded()}.bind(this),!1),rs.src=zr;var as={img:rs,assetData:Dr};return as}function sn(Dr){var zr={assetData:Dr},rs=b(Dr,this.assetsPath,this.path);return dataManager.loadData(rs,function(as){zr.img=as,this._footageLoaded()}.bind(this),function(){zr.img={},this._footageLoaded()}.bind(this)),zr}function yn(Dr,zr){this.imagesLoadedCb=zr;var rs,as=Dr.length;for(rs=0;rs<as;rs+=1)Dr[rs].layers||(!Dr[rs].t||Dr[rs].t==="seq"?(this.totalImages+=1,this.images.push(this._createImageData(Dr[rs]))):Dr[rs].t===3&&(this.totalFootages+=1,this.images.push(this.createFootageData(Dr[rs]))))}function Pn(Dr){this.path=Dr||""}function zn(Dr){this.assetsPath=Dr||""}function lr(Dr){for(var zr=0,rs=this.images.length;zr<rs;){if(this.images[zr].assetData===Dr)return this.images[zr].img;zr+=1}return null}function ar(){this.imagesLoadedCb=null,this.images.length=0}function cr(){return this.totalImages===this.loadedAssets}function hr(){return this.totalFootages===this.loadedFootagesCount}function es(Dr,zr){Dr==="svg"?(this._elementHelper=zr,this._createImageData=this.createImageData.bind(this)):this._createImageData=this.createImgData.bind(this)}function Ur(){this._imageLoaded=s.bind(this),this._footageLoaded=a.bind(this),this.testImageLoaded=_e.bind(this),this.createFootageData=sn.bind(this),this.assetsPath="",this.path="",this.totalImages=0,this.totalFootages=0,this.loadedAssets=0,this.loadedFootagesCount=0,this.imagesLoadedCb=null,this.images=[]}return Ur.prototype={loadAssets:yn,setAssetsPath:zn,setPath:Pn,loadedImages:cr,loadedFootages:hr,destroy:ar,getAsset:lr,createImgData:rn,createImageData:bt,imageLoaded:s,footageLoaded:a,setCacheType:es},Ur}();function BaseEvent(){}BaseEvent.prototype={triggerEvent:function(s,a){if(this._cbs[s])for(var b=this._cbs[s],_e=0;_e<b.length;_e+=1)b[_e](a)},addEventListener:function(s,a){return this._cbs[s]||(this._cbs[s]=[]),this._cbs[s].push(a),function(){this.removeEventListener(s,a)}.bind(this)},removeEventListener:function(s,a){if(!a)this._cbs[s]=null;else if(this._cbs[s]){for(var b=0,_e=this._cbs[s].length;b<_e;)this._cbs[s][b]===a&&(this._cbs[s].splice(b,1),b-=1,_e-=1),b+=1;this._cbs[s].length||(this._cbs[s]=null)}}};var markerParser=function(){function o(s){for(var a=s.split(`\r
|
|
8997
|
+
`;by(rE)},[yy]),$A=reactExports.useCallback(()=>{rn.isMobile!==!0&&gy!==!0&&(El(!0),!(!uiSceneStore.getState().CORE_API.sceneSettings.clickToAddUi&&!as)&&(Al===!0?(by(null),o(_e)):UA()))},[Al,gy,yy]),YA=reactExports.useCallback(()=>{rn.isMobile!==!0&&(El(!1),!(!uiSceneStore.getState().CORE_API.sceneSettings.clickToAddUi&&!as)&&(window.mouseDragging||Al===!0&&b&&b()))},[Al,gy]),WA=reactExports.useCallback(FA=>{FA.defaultPrevented===!0&&FA.preventDefault(),FA.stopPropagation(),!(_d===!1||Al===!1)&&(window.pointerDownPos=FA.clientX,window.mouseDragging=!1,window.mouseDownImgSrc=rn.getResolvedAssetUrl(yl),window.mouseDownSkuID=_e,window.moveThreshold=10)},[Al,yl,_d]),bA=reactExports.useCallback(FA=>{const BA=ls.lookDetails[cr];BA.skuID=_e,BA.productCategory={id:ls.categoryID,label:ls.categoryLabel},rn.isMobile===!0?(Pn(BA),ar(!0)):(FA.stopPropagation(),Al&&b&&b(),Pn(BA),ar(!0))},[Al,cr,ls]);return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:jsxRuntimeExports.jsxs("div",{className:bt?"imageContainer active":"imageContainer",draggable:!1,children:[as?jsxRuntimeExports.jsxs("div",{className:"incrementContentContainer",children:[jsxRuntimeExports.jsx("div",{id:"itemCard"+_e,className:"incrementContentOverlay ".concat(`${(Al===!0||My>0)&&gy===!0?"enabled-item-overlay":"disabled-item-overlay"}`),ref:yn}),jsxRuntimeExports.jsx("img",{alt:ho,className:"incrementSkuIcon",onTouchStart:WA,onMouseEnter:()=>{_d!==!1&&El(!0)},onMouseLeave:()=>{_d!==!1&&El(!1)},onMouseDown:WA,src:rn.getResolvedAssetUrl(yl)}),jsxRuntimeExports.jsxs("div",{className:"incrementDecrementPanel",children:[jsxRuntimeExports.jsx("div",{role:"button","aria-label":"Decrement Button",tabIndex:My!==0&&!zn&&!sn&&!lr&&s==!0&&Al?0:-1,className:"incrementMinusSign ".concat(`${My===0?"incrementSignDisable":""}`),onClick:lA,onMouseEnter:()=>El(!0),onMouseLeave:()=>El(!1),children:jsxRuntimeExports.jsx("img",{alt:"-",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/Minus.svg"})}),jsxRuntimeExports.jsx("div",{className:"incrementCount",children:My}),jsxRuntimeExports.jsx("div",{role:"button","aria-label":"Increment Button",tabIndex:!zn&&!sn&&!lr&&s==!0&&Al?0:-1,className:"incrementPlusSign ".concat(`${Al===!0?"":"incrementSignDisable"}`),onClick:OA,onMouseEnter:$A,onMouseLeave:YA,children:jsxRuntimeExports.jsx("img",{alt:"+",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/Plus.svg"})})]}),jsxRuntimeExports.jsx("div",{className:"spawning-requirements-container",hidden:!(Al===!1&&gy===!0&&yy),children:jsxRuntimeExports.jsx("p",{className:"spawning-requirements-text",children:yy})})]}):jsxRuntimeExports.jsxs("div",{className:"contentContainer",role:"button","aria-label":"Add Button",tabIndex:!zn&&!sn&&!lr&&s==!0&&Al?0:-1,style:{pointerEvents:Al?"all":"none"},onFocus:$A,onBlur:YA,onClick:OA,children:[jsxRuntimeExports.jsx("div",{id:"itemCard"+_e,className:"contentOverlay ".concat(`${Al===!0&&gy===!0?"enabled-item-overlay":"disabled-item-overlay"}`),ref:yn,onTouchStart:WA,onMouseEnter:$A,onMouseLeave:YA,onMouseDown:WA,children:jsxRuntimeExports.jsx("img",{alt:"+",draggable:!1,className:"addIcon",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/Plus.svg"})}),jsxRuntimeExports.jsx("img",{className:"product-image product-image-default-state ".concat(`${Al===!1?"product-image-disabled":""}`),draggable:!1,alt:ho,src:rn.getResolvedAssetUrl(yl)}),jsxRuntimeExports.jsx("div",{className:"spawning-requirements-container",hidden:!(Al===!1&&gy===!0&&yy),children:jsxRuntimeExports.jsx("p",{className:"spawning-requirements-text",children:yy})})]}),jsxRuntimeExports.jsxs("div",{role:"button","aria-label":"Info Button",tabIndex:!zn&&!sn&&!lr&&s==!0&&Al?0:-1,className:rn.isMobile?"showAlways itemDetails":"itemDetails",onClick:bA,children:[jsxRuntimeExports.jsx("div",{className:"item-details-icon"}),jsxRuntimeExports.jsxs("div",{className:"item-card-text-parent",children:[ho&&jsxRuntimeExports.jsx("p",{className:"skuName truncate",children:ho}),mo&&jsxRuntimeExports.jsx("p",{className:"skuSubheading",children:mo})]})]})]})})},PreconfigCard=({onClick:o,configId:s,name:a,thumbnailURL:b,accordionActive:_e})=>{const bt=uiSceneStore(ar=>ar.CORE_API),rn=infoStore(ar=>ar.infoModalOpen),sn=uiSceneStore(ar=>ar.dialogPopupOpen),yn=cartStore(ar=>ar.previewCartModalOpen),[Pn,zn]=reactExports.useState(!1),lr=reactExports.useCallback(ar=>{ar.stopPropagation(),o(s)},[]);return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:jsxRuntimeExports.jsxs("div",{className:"imageContainer",draggable:!1,children:[jsxRuntimeExports.jsxs("div",{className:b?"contentContainer preconfig":"contentContainer preconfig contentDisabled",children:[jsxRuntimeExports.jsx("div",{role:"button","aria-label":"Load Preconfiguration Button",tabIndex:!sn&&!rn&&!yn&&_e==!0?0:-1,id:"itemCard"+s,className:"contentOverlay ".concat(`${Pn===!0?"enabled-item-overlay":"disabled-item-overlay"}`),onClick:ar=>lr(ar),onFocus:()=>zn(!0),onBlur:()=>zn(!1),onMouseEnter:()=>zn(!0),onMouseLeave:()=>zn(!1),children:jsxRuntimeExports.jsx("img",{alt:"+",draggable:!1,className:"addIcon",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/Plus.svg"})}),jsxRuntimeExports.jsx("img",{className:"product-image product-image-default-state",draggable:!1,alt:a,src:b})]}),jsxRuntimeExports.jsx("div",{className:bt.isMobile?"showAlways itemDetails":"itemDetails",children:jsxRuntimeExports.jsx("p",{className:"truncate",children:a})})]})})};function BuildTabItemRow({element:o,index:s,visible:a,elementsLength:b,spawnGhosts:_e,spawnItem:bt,removeAllGhosts:rn,infoModalOpen:sn,setItemAllowed:yn,activeItems:Pn}){const zn=coreSceneStore(zr=>zr.sceneSettings),lr=reactExports.useRef(null),ar=reactExports.useRef(null),cr=uiSceneStore(zr=>zr.dialogPopupOpen),hr=cartStore(zr=>zr.previewCartModalOpen),[es,Ur]=reactExports.useState(!1),Dr=reactExports.useCallback(()=>{if(!(!ar.current||!lr.current)){if(ar.current.style.maxHeight)ar.current.style.maxHeight=null;else{if(o.skus.length>0&&ar.current.scrollHeight<100)return;ar.current.style.maxHeight=ar.current.scrollHeight+"px"}lr.current.classList.toggle("buildUiAccordionActive"),ar.current.classList.toggle("buildUiContentAccordionActive"),Ur(!es)}},[lr,ar,es]);return reactExports.useEffect(()=>{!ar.current||!lr.current||s==0&&Dr()},[lr,ar]),jsxRuntimeExports.jsxs("div",{className:"subContainer topContainer",children:[zn.accordionInBuildUi?jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsxs("div",{role:"button","aria-label":"Toggle Accordion Button",onClick:Dr,tabIndex:!cr&&!sn&&!hr&&a?0:-1,ref:lr,className:"buildUiAccordion",children:[jsxRuntimeExports.jsx("div",{className:"arrowUp",children:jsxRuntimeExports.jsxs("svg",{width:"30",height:"30",viewBox:"0 0 30 30",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[jsxRuntimeExports.jsx("rect",{x:"0.75",y:"0.6875",width:"28.7343",height:"28.7343",rx:"14.3672",stroke:"#CCCCCC",strokeWidth:"0.5"}),jsxRuntimeExports.jsx("path",{d:"M20.5029 12.8984L15.1172 18.2842L9.73145 12.8984",stroke:"#222222",strokeLinecap:"round",strokeLinejoin:"round"})]})}),jsxRuntimeExports.jsx("div",{className:"arrowDown",children:jsxRuntimeExports.jsxs("svg",{width:"30",height:"30",viewBox:"0 0 30 30",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[jsxRuntimeExports.jsx("rect",{x:"0.881836",y:"0.957031",width:"28.7343",height:"28.7343",rx:"14.3672",stroke:"#CCCCCC",strokeWidth:"0.5"}),jsxRuntimeExports.jsx("path",{d:"M9.86328 17.4795L15.249 12.0938L20.6347 17.4795",stroke:"#222222",strokeLinecap:"round",strokeLinejoin:"round"})]})}),jsxRuntimeExports.jsx("h4",{children:o.label})]}),jsxRuntimeExports.jsx("div",{ref:ar,className:"sidemenuContent buildUiAccordionContent",children:jsxRuntimeExports.jsx("div",{className:"item-grid",children:o.skus.map(zr=>jsxRuntimeExports.jsx(ItemCard,{skuId:zr,accordionActive:a&&es,categoryID:o.categoryID,spawnGhosts:_e,spawnItem:bt,removeAllGhosts:rn,modalOpen:sn,categoryDataIndex:s,setItemAllowed:yn,active:Pn.includes(zr)},"itemCardB"+zr))})})]}):jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx("h4",{className:"subheading",children:o.label}),jsxRuntimeExports.jsx("div",{className:"sidemenuContent",children:jsxRuntimeExports.jsx("div",{className:"item-grid",children:o.skus.map(zr=>jsxRuntimeExports.jsx(ItemCard,{skuId:zr,categoryID:o.categoryID,accordionActive:a,spawnGhosts:_e,spawnItem:bt,removeAllGhosts:rn,modalOpen:sn,categoryDataIndex:s,setItemAllowed:yn,active:Pn.includes(zr)},"itemCardB"+zr))})})]}),s!==b-1?jsxRuntimeExports.jsx("div",{className:"itemGridDivider"}):""]})}function BuildTabItemRow_PreConfig({index:o,elementsLength:s,visible:a,configsData:b,infoModalOpen:_e,onClick:bt,label:rn}){const sn=coreSceneStore(Ur=>Ur.sceneSettings),yn=reactExports.useRef(null),Pn=reactExports.useRef(null),zn=uiSceneStore(Ur=>Ur.dialogPopupOpen),lr=cartStore(Ur=>Ur.previewCartModalOpen),ar=uiSceneStore(Ur=>Ur.CORE_API),[cr,hr]=reactExports.useState(!1),es=reactExports.useCallback(()=>{!Pn.current||!yn.current||(yn.current.classList.toggle("buildUiAccordionActive"),Pn.current.classList.toggle("buildUiContentAccordionActive"),hr(!cr),Pn.current.style.maxHeight?Pn.current.style.maxHeight=null:Pn.current.style.maxHeight=Pn.current.scrollHeight+"px")},[yn,Pn,cr]);return jsxRuntimeExports.jsxs("div",{className:"subContainer topContainer",children:[sn.accordionInBuildUi?jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsxs("div",{role:"button","aria-label":"Toggle Accordion Button",onClick:es,tabIndex:!zn&&!_e&&!lr&&a?0:-1,ref:yn,className:"buildUiAccordion",children:[jsxRuntimeExports.jsx("div",{className:"arrowUp",children:jsxRuntimeExports.jsxs("svg",{width:"30",height:"30",viewBox:"0 0 30 30",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[jsxRuntimeExports.jsx("rect",{x:"0.75",y:"0.6875",width:"28.7343",height:"28.7343",rx:"14.3672",stroke:"#CCCCCC",strokeWidth:"0.5"}),jsxRuntimeExports.jsx("path",{d:"M20.5029 12.8984L15.1172 18.2842L9.73145 12.8984",stroke:"#222222",strokeLinecap:"round",strokeLinejoin:"round"})]})}),jsxRuntimeExports.jsx("div",{className:"arrowDown",children:jsxRuntimeExports.jsxs("svg",{width:"30",height:"30",viewBox:"0 0 30 30",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[jsxRuntimeExports.jsx("rect",{x:"0.881836",y:"0.957031",width:"28.7343",height:"28.7343",rx:"14.3672",stroke:"#CCCCCC",strokeWidth:"0.5"}),jsxRuntimeExports.jsx("path",{d:"M9.86328 17.4795L15.249 12.0938L20.6347 17.4795",stroke:"#222222",strokeLinecap:"round",strokeLinejoin:"round"})]})}),jsxRuntimeExports.jsx("h4",{children:rn})]}),jsxRuntimeExports.jsx("div",{ref:Pn,className:"sidemenuContent buildUiAccordionContent",children:jsxRuntimeExports.jsx("div",{className:"item-grid",children:b.map(Ur=>jsxRuntimeExports.jsx(PreconfigCard,{onClick:bt,accordionActive:a&&cr,configId:Ur.epgsharedconfigid,name:Ur.name,thumbnailURL:ar.getResolvedAssetUrl(Ur.thumbnails.low)},"itemCardB"+Ur.epgsharedconfigid))})})]}):jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx("h4",{className:"subheading",children:rn}),jsxRuntimeExports.jsx("div",{className:"sidemenuContent",children:jsxRuntimeExports.jsx("div",{className:"item-grid",children:b.map(Ur=>jsxRuntimeExports.jsx(PreconfigCard,{onClick:bt,accordionActive:a,configId:Ur.epgsharedconfigid,name:Ur.name,thumbnailURL:ar.getResolvedAssetUrl(Ur.thumbnails.low)},"itemCardB"+Ur.epgsharedconfigid))})})]}),o!==s-1?jsxRuntimeExports.jsx("div",{className:"itemGridDivider"}):""]})}function SecondMobileTabsHandler({index:o,label:s,activeTab:a,tabsRef:b,mobileGrid:_e}){const bt=reactExports.useCallback(rn=>{if(_e.current.scrollLeft===rn)return;let sn,yn,Pn,zn=!1;function lr(ar){sn===void 0&&(sn=ar);const cr=ar-sn;if(yn!==ar){const hr=cr/200;_e.current.scrollLeft>rn?(Pn=(_e.current.scrollLeft-rn)*Math.min(hr,1),_e.current.scrollLeft-=Pn,_e.current.scrollLeft===rn&&(zn=!0)):_e.current.scrollLeft<rn&&(Pn=(rn-_e.current.scrollLeft)*Math.min(hr,1),_e.current.scrollLeft+=Pn,_e.current.scrollLeft===rn&&(zn=!0))}cr<200&&(yn=ar,!zn&&window.requestAnimationFrame(lr))}window.requestAnimationFrame(lr)},[]);return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:jsxRuntimeExports.jsx("a",{className:a===o?"mobileTab scrolled":"mobileTab",onClick:()=>bt(b.current[o].offsetLeft-15),role:"button","aria-label":s+" Button",children:s})})}function MobileGrid({element:o,index:s,elementsLength:a,spawnGhosts:b,spawnItem:_e,removeAllGhosts:bt,infoModalOpen:rn,setItemAllowed:sn,activeItems:yn,tabsRef:Pn}){return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx("section",{id:`section-${o.categoryID}`,className:"mobileGridSection",ref:zn=>Pn.current[s]=zn,children:o.skus.map(zn=>jsxRuntimeExports.jsx(ItemCard,{skuId:zn,categoryID:o.categoryID,spawnGhosts:b,spawnItem:_e,removeAllGhosts:bt,modalOpen:rn,setItemAllowed:sn,active:yn.includes(zn)},"itemCardB"+zn))},"mobileGridSection"+s),s!==a-1?jsxRuntimeExports.jsx("div",{className:"itemGridDivider"}):""]})}function MobileGrid_PreConfig({index:o,elementsLength:s,tabsRef:a,configsData:b,onClick:_e}){const bt=uiSceneStore(rn=>rn.CORE_API);return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsxs("section",{id:"section-preconfig",className:"mobileGridSection",ref:rn=>a.current[o]=rn,children:[b.map(rn=>jsxRuntimeExports.jsx(PreconfigCard,{onClick:_e,configId:rn.epgsharedconfigid,name:rn.name,thumbnailURL:bt.getResolvedAssetUrl(rn.thumbnails.low)},"itemCardB"+rn.epgsharedconfigid)),[...Array(5)].map((rn,sn)=>sn<5-b.length?jsxRuntimeExports.jsx(PreconfigCard,{onClick:()=>{}},"emptyCard"+sn):null)]},"mobileGridSection"+o),o!==s-1?jsxRuntimeExports.jsx("div",{className:"itemGridDivider"}):""]})}const BuildUI=({visible:o})=>{const s=productDataStore$1(mo=>mo.categoryData),[a,b]=reactExports.useState([]),[_e,bt]=reactExports.useState(void 0),rn=infoStore(mo=>mo.infoModalOpen),[sn,yn]=reactExports.useState(0),[Pn,zn]=reactExports.useState(!1),[lr,ar]=reactExports.useState([]),cr=infoStore(mo=>mo.populateInfoObject),hr=infoStore(mo=>mo.updateInfoModalOpen),es=uiSceneStore(mo=>mo.CORE_API),Ur=itemStore(mo=>mo.itemsSpawned),Dr=itemStore(mo=>mo.defaultSceneItemCount),zr=reactExports.useRef(null),rs=reactExports.useCallback(mo=>{let go=[];for(const[yl,Zl]of Object.entries(mo))go.push(Zl);ar(go)},[]);addCoreEventListener(es.EVENTS.UI.ContextMenu_InfoBtnClicked,mo=>{const go=mo.itemData.lookDetails[mo.currentVariant],yl=go;yl.price=go.price,yl.id=mo.currentVariant,yl.productCategory={id:mo.itemData.categoryID,label:mo.itemData.categoryLabel},cr(yl),hr(!0)}),addCoreEventListener(es.EVENTS.SCENE.ReplaceableCategory_Updated,rs),reactExports.useEffect(()=>{const mo=es.getCurrentItemsInReplaceableCategory();return rs(mo),()=>{}},[es]),reactExports.useEffect(()=>{Object.keys(s).length!==0&&(b(s.build),s.preconfiguration!==void 0&&s.preconfiguration.configsData!=null&&bt(s.preconfiguration))},[s]);const as=reactExports.useCallback((mo,go)=>{uiSceneStore.getState().CORE_API.spawnItemBySkuID(mo,go)},[]),os=reactExports.useCallback(mo=>{_e.openConfirmationPopup===!1||Object.keys(Ur).length<=Dr?uiSceneStore.getState().CORE_API.loadSceneFromConfigurationID(mo,!1):(uiSceneStore.setState({loadConfigId:mo}),uiSceneStore.getState().setLoadConfigModalOpen(!0))},[_e,Dr,Ur]),ls=reactExports.useCallback(mo=>{uiSceneStore.getState().CORE_API.spawnGhostsForSkuID(mo,!1,1)},[]),zs=reactExports.useCallback(mo=>{rn||uiSceneStore.getState().CORE_API.removeAllGhosts(mo)},[rn]),ho=reactExports.useRef([]);reactExports.useEffect(()=>{if(!a)return;let mo=a.length;_e!==void 0&&(mo+=1),ho.current=ho.current.slice(0,mo)},[a,_e]);const ga=reactExports.useCallback(()=>{let mo=-3e3,go=-1,yl=a.length;_e!==void 0&&(yl+=1);for(let Zl=0;Zl<yl;Zl++){let _d=ho.current[Zl].getBoundingClientRect().left;_d<28&&mo<_d&&(mo=_d,go=Zl)}go!==-1&&yn(go)},[ho,a,_e]);return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx("div",{className:"mobileTabContent",hidden:!o,children:jsxRuntimeExports.jsxs("div",{className:"scrollSpyTabs",children:[jsxRuntimeExports.jsxs("div",{className:"secondMobileTabs",children:[Object.keys(a).map((mo,go)=>jsxRuntimeExports.jsx(SecondMobileTabsHandler,{index:go,label:a[mo].label,activeTab:sn,tabsRef:ho,mobileGrid:zr},"mobileTabs"+mo)),_e!==void 0&&jsxRuntimeExports.jsx(SecondMobileTabsHandler,{index:a.length,label:_e.label,activeTab:sn,tabsRef:ho,mobileGrid:zr},"preconfiguration_mobileTabs")]}),jsxRuntimeExports.jsxs("div",{className:"mobileGrid",ref:zr,onScroll:ga,children:[a.map((mo,go)=>jsxRuntimeExports.jsx(MobileGrid,{element:mo,index:go,spawnGhosts:ls,spawnItem:as,removeAllGhosts:zs,infoModalOpen:rn,setItemAllowed:zn,activeItems:lr,tabsRef:ho,elementsLength:_e!==void 0?a.length+1:a.length},"mobileGrid"+go)),_e!==void 0&&jsxRuntimeExports.jsx(MobileGrid_PreConfig,{onClick:os,configsData:_e.configsData,tabsRef:ho,index:a.length,elementsLength:a.length+1},"preconfiguration_mobileGrid")]})]})}),jsxRuntimeExports.jsxs("div",{className:"container desktop",hidden:!o,children:[a.map((mo,go)=>jsxRuntimeExports.jsx(BuildTabItemRow,{element:mo,index:go,visible:o,spawnGhosts:ls,spawnItem:as,removeAllGhosts:zs,infoModalOpen:rn,setItemAllowed:zn,activeItems:lr,elementsLength:a.length},`category_${mo.categoryID}_${go}`)),_e!==void 0&&jsxRuntimeExports.jsx(BuildTabItemRow_PreConfig,{onClick:os,visible:o,configsData:_e.configsData,infoModalOpen:rn,label:_e.label,index:a.length,elementsLength:a.length+1},"preconfiguration_desktopCategory")]})]})},handleGlobalVariantSwitch=(o,s)=>{uiSceneStore.getState().CORE_API.switchGlobalVariant(o,s)};function Divider$1(o,s){return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:o!==s.length-1?jsxRuntimeExports.jsx("div",{className:"itemGridDivider"}):""})}const Color=({visible:o})=>{const s=productDataStore$1(yn=>yn.categoryData),a=colorStore(yn=>yn.allActiveVariants),b=uiSceneStore(yn=>yn.materialOverrideExists),_e=uiSceneStore(yn=>yn.CORE_API),bt=cartStore(yn=>yn.previewCartModalOpen),rn=uiSceneStore(yn=>yn.dialogPopupOpen),sn=reactExports.useCallback(()=>{uiSceneStore.getState().CORE_API.removeAllVariantOverrides()},[]);return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:jsxRuntimeExports.jsxs("div",{className:"container desktop",style:{height:"auto"},hidden:!o,children:[b&&jsxRuntimeExports.jsx("button",{tabIndex:!rn&&bt?0:-1,className:"removeAllColorOverridesButton",role:"button","aria-label":"Remove All Overrides Button",onClick:sn,disabled:!b,children:"Remove all overrides"}),s.color.map((yn,Pn)=>jsxRuntimeExports.jsxs("div",{className:"subContainer topContainer",children:[jsxRuntimeExports.jsx("h4",{className:"subheading",children:yn.label}),jsxRuntimeExports.jsx("div",{className:"sidemenuContent",children:jsxRuntimeExports.jsx("div",{className:"color-grid color-variants-selection",children:yn.looks.map((zn,lr)=>jsxRuntimeExports.jsxs("div",{tabIndex:!rn&&!bt?0:-1,onClick:()=>handleGlobalVariantSwitch(yn.id,zn),role:"button","aria-label":productDataStore$1.getState().lookData[zn]?.label+" Button",className:a[yn.id]==zn?"colorSelector selected":"colorSelector",children:[jsxRuntimeExports.jsx("div",{className:"colorThumbnailContainer",children:jsxRuntimeExports.jsxs("div",{className:"colorThumbnail",children:[jsxRuntimeExports.jsx("div",{className:"checkMark",children:jsxRuntimeExports.jsx("img",{alt:"Check",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/Check.svg"})}),jsxRuntimeExports.jsx("img",{alt:"Color Thumbnail",className:"contextColorThumbnail",src:_e.getResolvedAssetUrl(productDataStore$1.getState().lookData[zn]?.thumbnail)})]})}),jsxRuntimeExports.jsxs("div",{className:"colorDetails",children:[jsxRuntimeExports.jsx("p",{className:"truncate colorDetailsLabel",children:capitalize$1(productDataStore$1.getState().lookData[zn]?.label)}),jsxRuntimeExports.jsx("p",{className:"truncate colorDetailsLabel",children:capitalize$1(productDataStore$1.getState().lookData[zn]?.accent)})]})]},"Color-"+lr))})}),jsxRuntimeExports.jsx(Divider$1,{})]},`${yn.label}-${Pn}`))]})})},hotspotStore=create$3((o,s)=>({activeHotspotData:null,activeFeatureID:"",actions:{enterHotspotInFeaturesTab(b){uiSceneStore.getState().sideMenuState!==2&&uiSceneStore.setState({sideMenuState:2}),o({activeFeatureID:b})},exitHotspot(){o({activeFeatureID:null})}}}));function scrollToTop(o,s,a){let b=s.clientHeight,_e=b*a;if(o.current.scrollTop===_e)return;let bt=null;const rn=500,sn=o.current.scrollTop;function yn(zn){b=s.clientHeight,_e=b*a;let lr=_e-sn;bt||(bt=zn);const ar=zn-bt,cr=Math.min(ar/rn,1);o.current.scrollTop=sn+lr*Pn(cr),cr<1&&window.requestAnimationFrame(yn)}function Pn(zn){return zn<.5?2*zn*zn:-1+(4-2*zn)*zn}window.requestAnimationFrame(yn)}function CarouselItem({carouselTabKey:o,hotspotContentRef:s,defaultAltText:a}){const b=reactExports.useRef(null),_e=uiSceneStore(rn=>rn.CORE_API),bt=rn=>{rn.target.style.width="100%"};return jsxRuntimeExports.jsx(SplideSlide,{children:jsxRuntimeExports.jsxs("div",{className:"carouselTabParent",ref:b,children:[o.type==="img"&&jsxRuntimeExports.jsx("img",{src:_e.getResolvedAssetUrl(o.link),alt:o.alt?o.alt:a,onLoad:rn=>bt(rn)}),o.type==="video"&&jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx("p",{className:"carouselVideoPlaceholderText",children:o.alt?o.alt:a}),jsxRuntimeExports.jsx("video",{src:_e.getResolvedAssetUrl(o.link),muted:!0,loop:!0,autoPlay:!0,playsInline:!0,controls:!1,onLoad:rn=>bt(rn)})]}),o.title&&jsxRuntimeExports.jsx("p",{className:"carouselTitle",children:o.title})]})},"SplideSlide-"+o.link)}function Tab({tabs:o,tabKey:s,index:a,activeFeatureID:b}){const[_e,bt]=reactExports.useState([]),rn=reactExports.useRef(null),sn=reactExports.useRef(null);uiSceneStore(hr=>hr.CORE_API);const yn=reactExports.useRef(null),Pn=cartStore(hr=>hr.previewCartModalOpen),zn=uiSceneStore(hr=>hr.dialogPopupOpen),lr=reactExports.useCallback(hr=>{uiSceneStore.getState().CORE_API.clickHotspot("hotspot3D_"+hr,{ignoreUI:!0})},[]);reactExports.useEffect(()=>{let hr=[],es=s.hotspotData;for(let Ur=0;Ur<es.carousel.length;Ur++)es.carousel[Ur].type!==""&&es.carousel[Ur].link!==""&&(hr=[...hr,{...es.carousel[Ur],index:Ur}]);bt(hr)},[s]),reactExports.useEffect(()=>{const{current:hr}=sn;hr&&(b===hr.id?ar(hr):cr(hr))},[b]);const ar=reactExports.useCallback(hr=>{hr.checked=!0,hr.nextElementSibling.nextElementSibling.setAttribute("style","max-height: 800px;"),scrollToTop(o,hr.nextElementSibling,a)},[]),cr=reactExports.useCallback(hr=>{hr.nextElementSibling.nextElementSibling.setAttribute("style","max-height: 0px;"),hr.checked=!1},[]);return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:s.hotspotData&&jsxRuntimeExports.jsxs("div",{className:"accordionTab",children:[jsxRuntimeExports.jsx("input",{tabIndex:!zn&&Pn?-1:0,type:"checkbox",name:"accordion",id:"rd_"+s.itemData.skuID+"_"+s.hotspotData.hotspotID,defaultChecked:!1,ref:sn,"aria-label":"Toggle Accordion Button",onClick:hr=>{lr(s.itemData.skuID+"_"+s.hotspotData.hotspotID,{ignoreUI:!1})}}),jsxRuntimeExports.jsxs("label",{className:"tab-label",htmlFor:"rd_"+s.itemData.skuID+"_"+s.hotspotData.hotspotID,children:[jsxRuntimeExports.jsx("span",{children:s.hotspotData.title}),jsxRuntimeExports.jsx("img",{alt:"+",className:"accordion-closed",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/Plus.svg"}),jsxRuntimeExports.jsx("img",{alt:"-",className:"accordion-open",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/Minus.svg"})]}),jsxRuntimeExports.jsx("div",{className:"tab-content",children:jsxRuntimeExports.jsxs("div",{className:"hotspot-content",ref:yn,children:[jsxRuntimeExports.jsx(ReactQuill$1,{className:"ignore",modules:{toolbar:!1},theme:"bubble",readOnly:!0,value:s.hotspotData.description}),_e.length==1&&_e[0].type!=""&&_e[0].link!=""&&jsxRuntimeExports.jsx(CarouselItem,{carouselTabKey:_e[0],index:0,hotspotContentRef:yn},"carouselTabs_"+s.itemData.skuID+"_"+s.hotspotData.hotspotID+"_0"),_e.length>1&&jsxRuntimeExports.jsx("div",{className:"carousel",children:jsxRuntimeExports.jsx(Splide2,{options:{perPage:1,preloadPages:3},ref:rn,children:_e.map((hr,es)=>hr.type!=""&&hr.link!=""&&jsxRuntimeExports.jsx(CarouselItem,{carouselTabKey:hr,defaultAltText:s.itemData.name?s.itemData.name:s.itemData.skuID,index:es,hotspotContentRef:yn},"carouselTabs_"+s.itemData.skuID+"_"+s.hotspotData.hotspotID+"_"+hr.index))})})]})})]})})}const ProductFeaturesUI=({visible:o})=>{const s=uiSceneStore(_e=>_e.tabSpawnCount),a=reactExports.useRef(null),b=hotspotStore(_e=>_e.activeFeatureID);return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:jsxRuntimeExports.jsx("div",{className:"col desktop productFeatureUIDic",hidden:!o,children:jsxRuntimeExports.jsxs("div",{className:"tabs",ref:a,children:[s.length==0&&jsxRuntimeExports.jsx("div",{className:"tabEmptyText",children:"*Please add an item to the scene to see the features"}),s.map((_e,bt)=>jsxRuntimeExports.jsx(Tab,{tabs:a,activeFeatureID:b,tabKey:_e,index:bt},"tabs_"+_e.itemData.skuID+"_"+_e.hotspotData.hotspotID))]})})})},CartItem=({itemObject:o})=>{const s=uiSceneStore(bt=>bt.CORE_API),a=uiSceneStore(bt=>bt.disableCart),[b,_e]=reactExports.useState(s.sceneSettings.currency);return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:jsxRuntimeExports.jsxs("div",{className:o.countUnavailable=="0"||a?"cartItem":"cartItem cartItemOutOfStock",draggable:!1,style:{display:o?"":"none"},children:[jsxRuntimeExports.jsx("div",{className:"cartItemImage",children:jsxRuntimeExports.jsx("img",{draggable:!1,src:s.getResolvedAssetUrl(o.thumbnails.review?o.thumbnails.review:o.thumbnails.low),alt:o.title})}),jsxRuntimeExports.jsxs("div",{className:"cartItemDetails",children:[jsxRuntimeExports.jsx("h4",{children:o.title}),o.subtitle?jsxRuntimeExports.jsx("h5",{children:o.subtitle}):jsxRuntimeExports.jsx("h5",{children:o.subheading}),jsxRuntimeExports.jsxs("div",{className:"cartRow",children:[jsxRuntimeExports.jsxs("span",{className:"itemCount",children:[s.sceneSettings.textSettings.cartQuantityText,":"," ",o.count]}),jsxRuntimeExports.jsxs("h3",{className:"itemPrice".concat(a===!0?" hide":""),children:[b,parseFloat(o.price).toFixed(2)]})]}),o.actionButton&&jsxRuntimeExports.jsx("span",{className:"actionButton",role:"button","aria-label":"Action Button",onClick:()=>s.actionButtonClicked(o),children:o.actionButton.text}),jsxRuntimeExports.jsxs("div",{className:"cartRow".concat(a===!0||o.countUnavailable=="0"?" hide":""),children:[jsxRuntimeExports.jsx("img",{className:"cartRowImage",alt:"Info Icon",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/Info_red.png"}),jsxRuntimeExports.jsxs("h3",{className:"itemAvailable",children:[o.countAvailable," IN STOCK"]}),jsxRuntimeExports.jsx("span",{className:"itemCount",children:"- quantities requested not available"})]})]})]})})},PreviewCart=({})=>{const o=cartStore(Pn=>Pn.cart),s=cartStore(Pn=>Pn.previewCartModalOpen),a=cartStore(Pn=>Pn.togglePreviewCartModal),b=uiSceneStore(Pn=>Pn.CORE_API),_e=uiSceneStore(Pn=>Pn.disableCart),bt=uiSceneStore(Pn=>Pn.cartMessage),rn=uiSceneStore(Pn=>Pn.dialogPopupOpen),sn=reactExports.useRef(null),yn=reactExports.useCallback(async()=>{await b.checkoutAsync()},[]);return reactExports.useEffect(()=>{sn.current&&s&&sn.current.focus()},[s]),jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:jsxRuntimeExports.jsxs("div",{className:s?"previewCartModal open":"previewCartModal",children:[jsxRuntimeExports.jsxs("div",{className:"previewCartModalChild",children:[jsxRuntimeExports.jsx("div",{role:"button",ref:sn,tabIndex:!rn&&s?0:-1,className:"closeButton","aria-label":"Close Button",onClick:()=>{a()},children:jsxRuntimeExports.jsx("img",{alt:"Close Button",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/X.svg"})}),o.length<=0&&jsxRuntimeExports.jsx("h3",{className:"cartEmptyText",children:"Your cart is currently empty"}),o.length>0&&jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx("h2",{className:"cartTitle",children:b.sceneSettings.textSettings.cartHeadingText}),jsxRuntimeExports.jsx("div",{className:"previewCartContentParentDiv",children:jsxRuntimeExports.jsx("div",{className:"previewCartContent",children:o.map((Pn,zn)=>jsxRuntimeExports.jsx(CartItem,{itemObject:Pn,index:zn},`Cart Item-${zn}`))})})]})]}),jsxRuntimeExports.jsxs("div",{className:"checkButtonParentDiv".concat(_e===!0?" hide":""),children:[bt&&jsxRuntimeExports.jsx("div",{className:"cartMessageDiv",children:jsxRuntimeExports.jsx("span",{children:bt})}),jsxRuntimeExports.jsx("div",{role:"button","aria-label":"Checkout Button",tabIndex:s?0:-1,className:"checkoutButton",onClick:yn,children:jsxRuntimeExports.jsx("span",{children:b.sceneSettings.addToCartCTAText})})]})]})})},InfoModal=({visible:o})=>{const s=productDataStore$1(yl=>yl.categoryData),a=uiSceneStore(yl=>yl.dialogPopupOpen),b=colorStore(yl=>yl.allActiveVariants),_e=infoStore(yl=>yl.infoObject),bt=infoStore(yl=>yl.infoModalOpen),rn=itemStore(yl=>yl.itemsSpawned),sn=infoStore(yl=>yl.updateInfoModalOpen),[yn,Pn]=reactExports.useState(""),[zn,lr]=reactExports.useState([]),[ar,cr]=reactExports.useState(!1),hr=uiSceneStore(yl=>yl.CORE_API),es=productDataStore$1(yl=>yl.productData),Ur=itemStore(yl=>yl.fittingSkuIds),[Dr,zr]=reactExports.useState(!1),[rs,as]=reactExports.useState(0),os=coreSceneStore(yl=>yl.sceneSettings),ls=reactExports.useRef(null),zs=reactExports.useCallback(()=>{rs<=0||!_e.skuID||hr.removeLastItemBySkuId(_e.skuID)},[rs,_e]),ho=()=>{if(!rn||!_e.skuID)return;let yl=0;const Zl=Object.keys(rn);for(let _d=Zl.length-1;_d>=0;_d--){const Ty=Zl[_d];rn[Ty].itemData.skuID===_e.skuID&&yl++}as(yl)};reactExports.useEffect(()=>{ho()},[rn,_e]),reactExports.useEffect(()=>{Object.keys(s).length!=0&&lr(s.build)},[s]),reactExports.useEffect(()=>(Pn(b[Object.keys(b)[0]]),()=>{}),[b]),reactExports.useEffect(()=>{Ur.includes(_e.skuID)?cr(!0):cr(!1)},[Ur,_e]),reactExports.useEffect(()=>{if(!es||!_e.skuID)return;const yl=es[_e.skuID].incrementDecrementControl?es[_e.skuID].incrementDecrementControl:!1;zr(yl)},[es,_e]);const ga=reactExports.useCallback(()=>{ar&&hr.spawnGhostsForSkuID(_e.skuID,!1,1)},[_e,ar]),mo=reactExports.useCallback(()=>{ar&&hr.removeAllGhosts(_e.skuID)},[_e,ar]),go=reactExports.useCallback(()=>{ar&&hr.spawnItemBySkuID(_e.skuID,!0)},[_e,ar]);return reactExports.useEffect(()=>{ls.current&&o&&bt&&ls.current.focus()},[bt,o]),jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:jsxRuntimeExports.jsxs("div",{className:bt&&o?"infoModal open":"infoModal",children:[jsxRuntimeExports.jsxs("a",{role:"button","aria-label":"Product Page Link Button",tabIndex:!a&&o&&bt&&_e?.productPageUrl?0:-1,ref:ls,href:_e.productPageUrl,className:"categoryLink",target:"_blank",style:_e?.productPageUrl&&bt?{pointerEvents:"all"}:{pointerEvents:"none"},children:[jsxRuntimeExports.jsxs("h2",{className:"categoryTitle",children:[_e?.productCategory?.label,_e.subheading&&jsxRuntimeExports.jsx("div",{className:"modalSubHeading",children:_e.subheading})]}),_e.productPageUrl&&jsxRuntimeExports.jsx("img",{alt:"Open Product Page",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/OpenTab.svg"})]}),jsxRuntimeExports.jsx("div",{role:"button",tabIndex:!a&&o&&bt?0:-1,className:"closeButton","aria-label":"Close Button",onClick:()=>{sn(!1)},children:jsxRuntimeExports.jsx("img",{alt:"Close Button",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/X.svg"})}),jsxRuntimeExports.jsx("div",{className:"infoModalImageContainer",children:_e?.thumbnails?.high?jsxRuntimeExports.jsx("img",{alt:"Item Image",className:"itemImage",src:hr.getResolvedAssetUrl(_e.thumbnails.high)}):""}),jsxRuntimeExports.jsxs("div",{className:"infoModalTextContainer",children:[jsxRuntimeExports.jsx("h2",{className:"itemTitle",children:_e.title}),jsxRuntimeExports.jsx("pre",{className:"itemDescription",children:_e.description}),_e.boundingBoxSize?jsxRuntimeExports.jsxs("p",{className:"infoModalDimensions",children:[_e.boundingBoxSize.x.toFixed(1),"” W x"," ",_e.boundingBoxSize.y.toFixed(1),"” D x"," ",_e.boundingBoxSize.z.toFixed(1),"” H"]}):""]}),os.addFromInfoModal&&jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:Dr?jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:jsxRuntimeExports.jsxs("div",{className:"infoModalIncrementDecrementParent incrementDecrementPanel",children:[jsxRuntimeExports.jsx("div",{role:"button","aria-label":"Decrement Button",tabIndex:rs!==0&&!a&&bt?0:-1,className:"incrementMinusSign ".concat(`${rs===0?"incrementSignDisable":""}`),onClick:zs,children:jsxRuntimeExports.jsx("img",{alt:"-",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/Minus.svg"})}),jsxRuntimeExports.jsx("div",{className:"incrementCount",children:rs}),jsxRuntimeExports.jsx("div",{role:"button","aria-label":"Increment Button",tabIndex:!a&&bt?0:-1,className:"incrementPlusSign ".concat(`${ar===!0?"":"incrementSignDisable"}`),onClick:go,onMouseEnter:ga,onMouseLeave:mo,children:jsxRuntimeExports.jsx("img",{alt:"+",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/Plus.svg"})})]})}):jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:jsxRuntimeExports.jsx("div",{role:"button","aria-label":"Add Button",tabIndex:!a&&bt?0:-1,className:"infoModalAddButton ".concat(`${ar===!0?"enabledInfoModalAddButton":"disabledInfoModalAddButton"}`),onFocus:ga,onBlur:mo,onMouseEnter:ga,onMouseLeave:mo,onClick:go,children:"Add"})})}),jsxRuntimeExports.jsx("div",{className:"infoModalActions",children:jsxRuntimeExports.jsx("button",{className:"item-price",disabled:!0,children:_e.price&&`$${numberWithCommas(parseFloat(_e.price).toFixed(2))}`})})]})})},handleGlobalGeometryVariantSwitch=(o,s)=>{uiSceneStore.getState().CORE_API.switchGlobalGeometryVariant(o,s)};function Divider(o,s){return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:o!==s.length-1?jsxRuntimeExports.jsx("div",{className:"itemGridDivider"}):""})}const GeometryVariants=({visible:o})=>{const s=productDataStore$1(rn=>rn.categoryData),a=colorStore(rn=>rn.allActiveGeometryVariants),b=uiSceneStore(rn=>rn.CORE_API),_e=cartStore(rn=>rn.previewCartModalOpen),bt=uiSceneStore(rn=>rn.dialogPopupOpen);return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:jsxRuntimeExports.jsx("div",{className:"container desktop",style:{height:"auto"},hidden:!o,children:s.geometryVariants.map((rn,sn)=>jsxRuntimeExports.jsxs("div",{className:"subContainer topContainer",children:[jsxRuntimeExports.jsx("h4",{className:"subheading",children:rn.label}),jsxRuntimeExports.jsx("div",{className:"sidemenuContent",children:jsxRuntimeExports.jsx("div",{className:"color-grid geometry-variants-selection",children:Object.keys(rn.variants).map((yn,Pn)=>jsxRuntimeExports.jsxs("div",{tabIndex:!bt&&!_e?0:-1,onClick:()=>handleGlobalGeometryVariantSwitch(rn.id,yn),role:"button","aria-label":rn.variants[yn].label+" Button",className:a[rn.id]==yn?"colorSelector selected":"colorSelector",children:[jsxRuntimeExports.jsx("div",{className:"colorThumbnailContainer",children:jsxRuntimeExports.jsxs("div",{className:"colorThumbnail",style:{borderRadius:"0%"},children:[jsxRuntimeExports.jsx("div",{className:"checkMark",children:jsxRuntimeExports.jsx("img",{alt:"Check",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/Check.svg"})}),jsxRuntimeExports.jsx("img",{alt:"Color Thumbnail",className:"contextColorThumbnail",src:b.getResolvedAssetUrl(rn.variants[yn].thumbnail)})]})}),jsxRuntimeExports.jsx("div",{className:"colorDetails",children:jsxRuntimeExports.jsx("p",{className:"truncate colorDetailsLabel",children:capitalize$1(rn.variants[yn].label)})})]},"Color-"+Pn))})}),jsxRuntimeExports.jsx(Divider,{})]},`${rn.label}-${sn}`))})})},VariantMobile=({sortedVariantsTabOrder:o})=>{const s=productDataStore$1(ls=>ls.categoryData),a=productDataStore$1(ls=>ls.lookData),b=colorStore(ls=>ls.allActiveVariants),_e=colorStore(ls=>ls.allActiveGeometryVariants),bt=uiSceneStore(ls=>ls.materialOverrideExists);uiSceneStore(ls=>ls.CORE_API);const[rn,sn]=reactExports.useState(0),[yn,Pn]=reactExports.useState(0);reactExports.useEffect(()=>{let ls=0;o.includes("color")===!0&&(ls+=s.color.length),o.includes("geometryVariants")===!0&&(ls+=s.geometryVariants.length),Pn(ls)},[s]);const zn=(ls,zs)=>{uiSceneStore.getState().CORE_API.switchGlobalGeometryVariant(ls,zs)},lr=(ls,zs)=>{uiSceneStore.getState().CORE_API.switchGlobalVariant(ls,zs)};function ar({color:ls,index:zs,elementId:ho,allActiveVariants:ga}){return jsxRuntimeExports.jsxs("div",{role:"button","aria-label":a[ls]?.label+" Button",onClick:()=>lr(ho,ls),className:ga[ho]==ls?"colorSelector selected":"colorSelector",children:[jsxRuntimeExports.jsx("div",{className:"colorThumbnailContainer",children:jsxRuntimeExports.jsxs("div",{className:"colorThumbnail",children:[jsxRuntimeExports.jsx("div",{className:"checkMark",children:jsxRuntimeExports.jsx("img",{alt:"Check",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/Check.svg"})}),jsxRuntimeExports.jsx("img",{alt:"Color Thumbnail",className:"contextColorThumbnail",src:uiSceneStore.getState().CORE_API.getResolvedAssetUrl(a[ls]?.thumbnail)})]})}),jsxRuntimeExports.jsx("div",{className:"colorDetails",children:jsxRuntimeExports.jsx("p",{className:"truncate-mobile colorDetailsLabel",children:capitalize$1(a[ls]?.label)})})]},"Color-"+zs)}function cr({variant:ls,variantId:zs,index:ho,elementId:ga,allActiveGeometryVariants:mo}){return jsxRuntimeExports.jsxs("div",{role:"button","aria-label":ls.label+" Button",onClick:()=>zn(ga,zs),className:mo[ga]==zs?"colorSelector selected":"colorSelector",children:[jsxRuntimeExports.jsx("div",{className:"colorThumbnailContainer",children:jsxRuntimeExports.jsxs("div",{className:"colorThumbnail",children:[jsxRuntimeExports.jsx("div",{className:"checkMark",children:jsxRuntimeExports.jsx("img",{alt:"Check",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/Check.svg"})}),jsxRuntimeExports.jsx("img",{alt:"Color Thumbnail",className:"contextColorThumbnail",src:uiSceneStore.getState().CORE_API.getResolvedAssetUrl(ls.thumbnail)})]})}),jsxRuntimeExports.jsx("div",{className:"colorDetails",children:jsxRuntimeExports.jsx("p",{className:"truncate-mobile colorDetailsLabel",children:capitalize$1(ls.label)})})]},"GeometryVariant-"+ho)}function hr({variantType:ls,element:zs,allActiveVariants:ho,startIndex:ga}){return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[ls=="color"&&zs.looks.map((mo,go)=>jsxRuntimeExports.jsx(ar,{color:mo,index:go,elementId:zs.id,allActiveVariants:ho},"MobileGridInternal_"+go)),ls=="geometry"&&Object.keys(zs.variants).map((mo,go)=>jsxRuntimeExports.jsx(cr,{variant:zs.variants[mo],index:go,elementId:zs.id,variantId:mo,allActiveGeometryVariants:ho},"MobileGridVariantInternal_"+go))]})}const es=reactExports.useCallback(({index:ls})=>jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:ls!==yn-1?jsxRuntimeExports.jsx("div",{className:"itemGridDivider"}):jsxRuntimeExports.jsx("div",{className:"itemGridPlaceholder"})}),[s,yn]),Ur=reactExports.useCallback(()=>{uiSceneStore.getState().CORE_API.removeAllVariantOverrides()},[]),Dr=reactExports.useCallback(ls=>{if(rs.current.scrollLeft===ls)return;let zs,ho,ga,mo=!1;function go(yl){zs===void 0&&(zs=yl);const Zl=yl-zs;if(ho!==yl){const _d=Zl/200;rs.current.scrollLeft>ls?(ga=(rs.current.scrollLeft-ls)*Math.min(_d,1),rs.current.scrollLeft-=ga,rs.current.scrollLeft===ls&&(mo=!0)):rs.current.scrollLeft<ls&&(ga=(ls-rs.current.scrollLeft)*Math.min(_d,1),rs.current.scrollLeft+=ga,rs.current.scrollLeft===ls&&(mo=!0))}Zl<200&&(ho=yl,!mo&&window.requestAnimationFrame(go))}window.requestAnimationFrame(go)},[]),zr=reactExports.useRef([]);reactExports.useEffect(()=>{zr.current=zr.current.slice(0,yn)},[yn]);const rs=reactExports.useRef(null),as=reactExports.useCallback(({categoryID:ls,label:zs,index:ho,totalLength:ga})=>jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:jsxRuntimeExports.jsx("a",{role:"button","aria-label":zs+" Button",className:rn===ho?"mobileTab scrolled":"mobileTab",onClick:()=>{for(let mo=0;mo<ga;mo++)mo===ho&&Dr(zr.current[mo].offsetLeft)},children:zs})}),[rn,zr]),os=reactExports.useCallback(()=>{let ls=-3e3,zs=-1;for(let ho=0;ho<yn;ho++){let ga=zr.current[ho].getBoundingClientRect().left;ga<28&&ls<ga&&(ls=ga,zs=ho)}zs!==-1&&sn(zs)},[zr,s,yn]);return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:jsxRuntimeExports.jsx("div",{className:"mobileTabContent",children:jsxRuntimeExports.jsxs("div",{className:"scrollSpyTabs",children:[jsxRuntimeExports.jsx("div",{className:"secondMobileTabs",children:o.map((ls,zs)=>{if(ls=="color")return s.color.map((ho,ga)=>jsxRuntimeExports.jsx(as,{categoryID:ho.id,label:ho.label,index:zs==0?ga:o.includes("geometryVariants")?s.geometryVariants.length+ga:ga,totalLength:yn},"mobileTabsColors"+ho.id));if(ls=="geometryVariants")return s.geometryVariants.map((ho,ga)=>jsxRuntimeExports.jsx(as,{categoryID:ho.id,label:ho.label,index:zs==0?ga:o.includes("color")?s.color.length+ga:ga,totalLength:yn},"mobileTabsVariants"+ho.id))})}),jsxRuntimeExports.jsx("div",{children:jsxRuntimeExports.jsx("div",{className:"mobileGrid mobileGridCenter",ref:rs,onScroll:os,children:jsxRuntimeExports.jsxs("section",{className:"mobileGridSection",children:[bt&&jsxRuntimeExports.jsxs("button",{role:"button","aria-label":"Remove All Overrides Button",onClick:Ur,className:"removeAllColorOverridesButton",disabled:!bt,children:[jsxRuntimeExports.jsx("div",{className:"iconContainer",children:jsxRuntimeExports.jsx("img",{src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/TrashSimple.svg",alt:"Remove"})}),"Remove all",jsxRuntimeExports.jsx("br",{}),"overrides"]}),o.map((ls,zs)=>{if(ls=="color")return s.color.map((ho,ga)=>jsxRuntimeExports.jsxs("section",{className:"mobileGridCategorySection color-variants-selection",id:`section-${ho.categoryID}`,ref:mo=>zr.current[zs==0?ga:o.includes("geometryVariants")?s.geometryVariants.length+ga:ga]=mo,children:[jsxRuntimeExports.jsx(hr,{variantType:"color",element:ho,allActiveVariants:b},`mobileGrid-${ho.categoryID}`),jsxRuntimeExports.jsx(es,{index:zs==0?ga:o.includes("geometryVariants")?s.geometryVariants.length+ga:ga},"divider"+ho.categoryID)]},`sectionz-${ho.categoryID}-${ga}`));if(ls=="geometryVariants")return s.geometryVariants.map((ho,ga)=>jsxRuntimeExports.jsxs("section",{className:"mobileGridCategorySection geometry-variants-selection",id:`section-${ho.id}`,ref:mo=>zr.current[zs==0?ga:o.includes("color")?s.color.length+ga:ga]=mo,children:[jsxRuntimeExports.jsx(hr,{variantType:"geometry",element:ho,allActiveVariants:_e},`mobileGrid-variants-${ho.id}`),jsxRuntimeExports.jsx(es,{index:zs==0?ga:o.includes("color")?s.color.length+ga:ga},"divider-variants-"+ho.id)]},`sectionz-variants-${ho.id}-${ga}`))})]})})})]})})})},SideMenu=({sideMenuOpen:o,sideMenuRef:s,toggleSideMenuOpen:a,configuratorWcRef:b,PUBLIC_DESIGN_ASSETS_ENDPOINT:_e,handleSideButtonClick:bt,useTabIcon:rn,GENERIC_PROJECT_ASSET_DATA_ROOT_URL:sn,sideMenuState:yn,togglePreviewCartModal:Pn,getItemCount:zn,currency:lr,numberWithCommas:ar})=>{const cr=productDataStore$1(os=>os.hotspotsData),hr=cartStore(os=>os.previewCartModalOpen),es=uiSceneStore(os=>os.dialogPopupOpen),Ur=productDataStore$1(os=>os.categoryData),Dr=uiSceneStore(os=>os.disableCart),zr=uiSceneStore(os=>os.CORE_API),[rs,as]=reactExports.useState([]);return reactExports.useEffect(()=>{const os=zr.sceneSettings.variantsTabOrder,ls=Object.entries(os);ls.sort(([,ho],[,ga])=>ho.priority-ga.priority);const zs=[];ls.forEach(([ho,ga])=>{ga.enabled&&zs.push(ho)}),as(zs)},[zr]),reactExports.useEffect(()=>{if(!uiSceneStore.getState().CORE_API.isMobile)return;const{current:os}=s;!os||b.shadowRoot.getElementById("_leftShell")},[o,s]),jsxRuntimeExports.jsxs("div",{className:`sideMenu interactable ${o===!0?"":"side-menu-collapsed"}`,ref:s,children:[jsxRuntimeExports.jsxs("div",{className:o?"mobileExpandButton sideMenuOpen":"mobileExpandButton",children:[jsxRuntimeExports.jsx("span",{children:"Expand Configurator"}),jsxRuntimeExports.jsx("button",{role:"button","aria-label":"Toggle Menu Button",onClick:a,children:jsxRuntimeExports.jsx("img",{alt:"Down",src:_e+"/Icon/ArrowDown.svg"})},"expandSideMenuButton")]}),jsxRuntimeExports.jsx("div",{className:o===!0?"sideMenuTabContainer":"sideMenuTabContainer side-menu-container-hide",children:jsxRuntimeExports.jsxs(Tabs,{className:"firstMobileTab",children:[jsxRuntimeExports.jsxs(TabList,{className:"firstMobileTabs","aria-label":"Mobile Tab List",children:[jsxRuntimeExports.jsx(Tab$1,{role:"tab",children:jsxRuntimeExports.jsxs("div",{className:"mobileTab",role:"button","aria-label":zr.sceneSettings.textSettings.buildTabHeadingText+" Button",onClick:()=>{bt(0)},children:[rn?jsxRuntimeExports.jsx("img",{className:"icon",alt:"Build Icon",src:sn+"/thumbnails/common-ui/BuildTabIcon.svg"}):"",zr.sceneSettings.textSettings.buildTabHeadingText]})}),(Ur.color.length>0||Ur.geometryVariants.length>0)&&jsxRuntimeExports.jsx(Tab$1,{role:"tab",children:jsxRuntimeExports.jsxs("div",{className:"mobileTab",role:"button","aria-label":zr.sceneSettings.textSettings.colorTabHeadingText+" Button",onClick:()=>{bt(1)},children:[rn?jsxRuntimeExports.jsx("img",{className:"icon",alt:"Color Icon",src:sn+"/thumbnails/common-ui/ColorTabIcon.svg"}):"",zr.sceneSettings.textSettings.colorTabHeadingText]})}),Object.keys(cr).length>0&&jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:jsxRuntimeExports.jsx(Tab$1,{role:"tab",children:jsxRuntimeExports.jsxs("div",{className:"mobileTab",role:"button","aria-label":zr.sceneSettings.textSettings.featuresTabHeadingText+" Button",onClick:()=>{bt(2)},children:[rn?jsxRuntimeExports.jsx("img",{className:"icon",alt:"Features Icon",src:sn+"/thumbnails/common-ui/ProductFeaturesTabIcon.png"}):"",zr.sceneSettings.textSettings.featuresTabHeadingText]})})}),jsxRuntimeExports.jsx("div",{role:"tab",className:"collapse-side-menu-button-parent",children:jsxRuntimeExports.jsx("button",{className:`collapse-side-menu-button ${o===!0?"":"set-display-none"}`,role:"button","aria-label":"Toggle Menu Button",onClick:a,children:jsxRuntimeExports.jsx("img",{alt:"Down",src:_e+"/Icon/ArrowDown.svg"})},"collapseSideMenuButton")})]}),jsxRuntimeExports.jsx(TabPanel,{children:jsxRuntimeExports.jsx(BuildUI,{sideMenuState:0},"BuildUI1")}),(Ur.color.length>0||Ur.geometryVariants.length>0)&&jsxRuntimeExports.jsx(TabPanel,{children:jsxRuntimeExports.jsx("div",{className:"variantContainer",children:jsxRuntimeExports.jsx(VariantMobile,{sortedVariantsTabOrder:rs})})}),Object.keys(cr).length>0&&jsxRuntimeExports.jsx(TabPanel,{children:jsxRuntimeExports.jsx("div",{className:"featuresContainer",children:jsxRuntimeExports.jsx(ProductFeaturesUI,{visible:yn===2},"featuresTab-mobile")})})]})}),jsxRuntimeExports.jsxs("div",{className:"desktopSideMenu",children:[jsxRuntimeExports.jsxs("div",{className:"sideMenuTabs",children:[jsxRuntimeExports.jsxs("div",{role:"button",tabIndex:!es&&!hr?0:-1,className:yn===0?"activeSideMenuTab rightTopBarButton button":"inactiveSideMenuTab rightTopBarButton button","aria-label":zr.sceneSettings.textSettings.buildTabHeadingText+" Button",onClick:()=>{bt(0)},children:[rn?jsxRuntimeExports.jsx("img",{className:"icon",alt:"Build Icon",src:sn+"BuildTabIcon.png"}):"",jsxRuntimeExports.jsx("span",{children:zr.sceneSettings.textSettings.buildTabHeadingText})]}),(Ur.color.length>0||Ur.geometryVariants.length>0)&&jsxRuntimeExports.jsxs("div",{role:"button",tabIndex:!es&&!hr?0:-1,className:yn===1?"activeSideMenuTab rightTopBarButton button":"inactiveSideMenuTab rightTopBarButton button","aria-label":zr.sceneSettings.textSettings.colorTabHeadingText+" Button",onClick:()=>{bt(1)},children:[rn?jsxRuntimeExports.jsx("img",{className:"icon",alt:"Color Icon",src:sn+"/thumbnails/common-ui/ColorTabIcon.svg"}):"",jsxRuntimeExports.jsx("span",{children:zr.sceneSettings.textSettings.colorTabHeadingText})]}),Object.keys(cr).length>0&&jsxRuntimeExports.jsxs("div",{role:"button","aria-label":zr.sceneSettings.textSettings.featuresTabHeadingText+" Button",tabIndex:!es&&!hr?0:-1,className:yn===2?"activeSideMenuTab rightTopBarButton button":"inactiveSideMenuTab rightTopBarButton button",onClick:()=>{bt(2)},children:[rn?jsxRuntimeExports.jsx("img",{className:"icon",alt:"Features Icon",src:sn+"/thumbnails/common-ui/ProductFeaturesTabIcon.png"}):"",jsxRuntimeExports.jsx("span",{children:zr.sceneSettings.textSettings.featuresTabHeadingText})]})]}),jsxRuntimeExports.jsxs("div",{className:"sideMenuContent",children:[jsxRuntimeExports.jsx(PreviewCart,{}),jsxRuntimeExports.jsx(InfoModal,{visible:yn===0}),jsxRuntimeExports.jsx(BuildUI,{visible:yn===0},"buildUi-desktop"),jsxRuntimeExports.jsx("div",{className:"variantContainer",children:rs.map(os=>{if(os=="color"){if(Ur.color.length>0)return jsxRuntimeExports.jsx(Color,{visible:yn===1},"colourTab-desktop")}else if(os=="geometryVariants"&&Ur.geometryVariants.length>0)return jsxRuntimeExports.jsx(GeometryVariants,{visible:yn===1},"geometryVariantsTab-desktop")})}),jsxRuntimeExports.jsx(ProductFeaturesUI,{visible:yn===2},"featuresTab-desktop")]})]}),jsxRuntimeExports.jsxs("div",{role:"button",tabIndex:es?-1:0,className:"bottomBar right button","aria-label":"Toggle Preview Cart Button",onClick:()=>{Pn()},children:[jsxRuntimeExports.jsxs("div",{className:"bottomBarChildDiv",children:[jsxRuntimeExports.jsx("span",{children:zr.sceneSettings.textSettings.reviewButtonText}),jsxRuntimeExports.jsx("div",{className:"cartNumber",children:zn()})]}),jsxRuntimeExports.jsx("div",{className:"reviewButtonParentDiv",children:jsxRuntimeExports.jsx("div",{className:"button reviewButton".concat(Dr===!0?" hide":""),children:jsxRuntimeExports.jsx("div",{className:"",children:`${lr}${ar(cartStore.getState().cartTotalPrice)}`})})})]}),jsxRuntimeExports.jsx("div",{className:"reviewButtonSibling"})]})},PreviewCartMobile=({previewCartModalOpen:o,togglePreviewCartModal:s,PUBLIC_DESIGN_ASSETS_ENDPOINT:a,cart:b})=>{const _e=uiSceneStore(yn=>yn.disableCart),bt=uiSceneStore(yn=>yn.CORE_API),rn=uiSceneStore(yn=>yn.cartMessage),sn=reactExports.useCallback(async()=>{await bt.checkoutAsync()},[]);return jsxRuntimeExports.jsxs("div",{className:o?"previewCartModal mobile open":"previewCartModal mobile",children:[jsxRuntimeExports.jsx("div",{className:"closeButton",role:"button","aria-label":"Close Button",onClick:()=>{s()},children:jsxRuntimeExports.jsx("img",{alt:"Close Button",src:a+"/Icon/X.svg"})}),jsxRuntimeExports.jsx("h2",{className:"cartTitle",children:bt.sceneSettings.textSettings.cartHeadingText}),b.length>0?jsxRuntimeExports.jsxs("div",{className:"previewCartContentParentDiv",children:[jsxRuntimeExports.jsx("div",{className:"previewCartContent",children:b.map(function(yn,Pn){return jsxRuntimeExports.jsx(CartItem,{itemObject:yn,index:Pn},`Cart Item - ${Pn}`)})}),jsxRuntimeExports.jsxs("div",{className:"previewCartButtonContainer".concat(_e===!0?" hide":""),children:[rn&&jsxRuntimeExports.jsx("div",{className:"cartMessageDiv",children:jsxRuntimeExports.jsx("span",{children:rn})}),jsxRuntimeExports.jsxs("button",{className:"checkoutButton",role:"button","aria-label":"Checkout Button",onClick:sn,children:[jsxRuntimeExports.jsx("span",{children:bt.sceneSettings.addToCartCTAText}),jsxRuntimeExports.jsx("img",{alt:"Right",src:a+"/Icon/ArrowRight.svg"})]})]})]}):jsxRuntimeExports.jsx("h3",{className:"cartEmptyText",children:"Your cart is currently empty"})]})},ContextMenuDesktop=({selectedItemData:o,colors:s,colorsCategoryName:a})=>{const b=uiSceneStore(Ur=>Ur.CORE_API),[_e,bt]=reactExports.useState(null),[rn,sn]=reactExports.useState(0),[yn,Pn]=reactExports.useState(0),[zn,lr]=reactExports.useState(null),ar=reactExports.useRef(null),cr=reactExports.useRef(null),hr=uiSceneStore(Ur=>Ur.dialogPopupOpen),es=reactExports.useCallback(()=>{b.fireEvent(b.EVENTS.UI.ContextMenu_InfoBtnClicked,o)},[o]);return reactExports.useEffect(()=>{lr(null),o&&(lr({...o}),o.overrideVariant?bt(o.overrideVariant):bt(o.currentVariant))},[o]),reactExports.useEffect(()=>{if(!zn||!cr.current||!o||!ar.current)return;const Ur=b.getCanvasSize();let Dr=o.offsetX+ar.current.children[0].clientWidth,zr=o.offsetY+ar.current.children[0].clientHeight,rs=Ur.width-Dr;rs<0?sn(o.offsetX+rs-10):sn(o.offsetX);let as=Ur.height-zr;as<0?Pn(o.offsetY+as-10):Pn(o.offsetY),cr.current.focus()},[zn,o,ar]),jsxRuntimeExports.jsx("div",{ref:ar,children:o!==null&&jsxRuntimeExports.jsx("div",{className:"contextMenuParent interactable",style:{left:rn+"px",top:yn+"px"},children:jsxRuntimeExports.jsx("div",{className:"contextContentDiv",children:jsxRuntimeExports.jsxs("div",{className:"contextContent",children:[jsxRuntimeExports.jsxs("div",{className:"contextContentChildDiv",children:[jsxRuntimeExports.jsxs("div",{className:"contextNameContent",children:[jsxRuntimeExports.jsx("h3",{children:o.itemData.name}),jsxRuntimeExports.jsx("img",{ref:cr,role:"button",tabIndex:hr?-1:0,className:"infoButton",alt:"Info Button","aria-label":"Info Button",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/Info.svg",onClick:()=>es()})]}),jsxRuntimeExports.jsx("div",{role:"button",tabIndex:hr?-1:0,"aria-label":"Close Button",className:"closeContainer closeButton",onClick:()=>b.exitSelectedItem(),children:jsxRuntimeExports.jsx("img",{alt:"Close Button",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/X.svg"})})]}),s.length>0&&b.sceneSettings.disableLocalColorOverride===!1&&jsxRuntimeExports.jsxs("div",{className:"contextColorContent",children:[jsxRuntimeExports.jsxs("span",{className:"colorSwatchTitle",children:["Select ",a]}),jsxRuntimeExports.jsx("div",{className:"color-grid color-variants-selection",children:s.map((Ur,Dr)=>jsxRuntimeExports.jsxs("div",{role:"button",tabIndex:hr?-1:0,"aria-label":"Select "+Ur.label,onClick:async()=>{await b.overrideSelectedItemMaterial(Ur.id),bt(Ur.id)},className:_e==Ur.id?"colorSelector selected":"colorSelector",children:[jsxRuntimeExports.jsx("div",{className:"colorThumbnailContainer",children:jsxRuntimeExports.jsxs("div",{className:"colorThumbnail",children:[jsxRuntimeExports.jsx("div",{className:"checkMark",children:jsxRuntimeExports.jsx("img",{alt:"Checkmark",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/Check.svg"})}),jsxRuntimeExports.jsx("img",{alt:"Color Thumbnail",className:"contextColorThumbnail",src:b.getResolvedAssetUrl(Ur.thumbnail)})]})}),jsxRuntimeExports.jsx("div",{className:"colorDetails",children:jsxRuntimeExports.jsxs("p",{className:"truncate colorDetailsLabel",children:[capitalize$1(Ur.label),jsxRuntimeExports.jsx("br",{}),jsxRuntimeExports.jsx("span",{className:"redText",children:Ur.outOfStock?"OUT OF STOCK":jsxRuntimeExports.jsx("br",{})})]})})]},"Color-"+Dr))})]}),jsxRuntimeExports.jsxs("div",{className:"contextButtons",children:[b.canSelectedItemDrag()&&jsxRuntimeExports.jsxs("div",{role:"button",tabIndex:hr?-1:0,"aria-label":"Remove Button",onClick:()=>{b.doesSelectedItemHasAttachedDependency()?b.triggerItemRemoveModal(o.itemData.guid):b.removeSelectedItem()},children:[jsxRuntimeExports.jsx("img",{src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/TrashSimple.svg",alt:"Remove"}),jsxRuntimeExports.jsx("span",{children:"Remove"})]}),b.canSelectedItemRotate()&&jsxRuntimeExports.jsxs("div",{role:"button","aria-label":"Rotate Button",tabIndex:hr?-1:0,onClick:()=>b.rotateSelectedItem(),children:[jsxRuntimeExports.jsx("img",{alt:"Rotate",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/Rotate.svg"}),jsxRuntimeExports.jsx("span",{children:"Rotate"})]})]})]})})})})},ContextMenuMobile=({selectedItemData:o,contextMenuDrawerOpen:s,dismissContextMenuDrawer:a,colors:b,colorsCategoryName:_e})=>{const[bt,rn]=reactExports.useState(s),sn=reactExports.useRef(null),yn=uiSceneStore(ar=>ar.CORE_API),[Pn,zn]=reactExports.useState(null);reactExports.useEffect(()=>{sn.current&&sn.current.addEventListener("drawerClosed",()=>{a()})},[sn]),reactExports.useEffect(()=>(rn(s),()=>{}),[s]),reactExports.useEffect(()=>{!o||!o.itemData||(o.overrideVariant?zn(o.overrideVariant):zn(o.currentVariant))},[o]);async function lr(){yn.doesSelectedItemHasAttachedDependency()?yn.triggerItemRemoveModal(o.itemData.guid):(await yn.removeSelectedItem(),a())}return jsxRuntimeExports.jsx(BottomDrawer,{id:"contextDrawer",ref:sn,open:`${bt}`,"initial-screen-coverage":"60%",children:jsxRuntimeExports.jsx("div",{className:"contextMenuDrawer epigraphDrawer",slot:"bottom-drawer-content",children:jsxRuntimeExports.jsxs("div",{className:"contextMenuParent interactable",children:[jsxRuntimeExports.jsx("div",{className:"contextContent",children:o&&o.itemData?jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:jsxRuntimeExports.jsx("div",{className:"contextContentNameDiv",children:jsxRuntimeExports.jsx("h3",{children:o.itemData.name})})}):""}),b.length>0&&yn.sceneSettings.disableLocalColorOverride===!1&&jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsxs("p",{className:"colorSwatchTitle",children:["Select ",_e]}),jsxRuntimeExports.jsx("div",{className:"color-grid color-variants-selection",children:b.map((ar,cr)=>jsxRuntimeExports.jsxs("div",{role:"button","aria-label":"Select "+ar.label,onClick:async()=>{await uiSceneStore.getState().CORE_API.overrideSelectedItemMaterial(ar.id),zn(ar.id)},className:Pn==ar.id?"colorSelector selected":"colorSelector",children:[jsxRuntimeExports.jsxs("div",{className:"colorThumbnailContainer",children:[jsxRuntimeExports.jsx("div",{className:"colorThumbnail",children:jsxRuntimeExports.jsx("img",{alt:"Color Thumbnail",className:"colorThumbnailImg",src:yn.getResolvedAssetUrl(ar.thumbnail)})}),jsxRuntimeExports.jsx("div",{className:"checkMark",children:jsxRuntimeExports.jsx("img",{alt:"Check",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/Check.svg"})})]}),jsxRuntimeExports.jsx("div",{className:"colorDetails",children:jsxRuntimeExports.jsxs("p",{className:"truncate colorDetailsLabel",children:[capitalize$1(ar.label),jsxRuntimeExports.jsx("br",{}),jsxRuntimeExports.jsx("span",{className:"redText",children:ar.outOfStock?"OUT OF STOCK":jsxRuntimeExports.jsx("br",{})})]})})]},"Color-"+cr))})]}),jsxRuntimeExports.jsxs("div",{className:"contextButtons",children:[yn.canSelectedItemBeRemoved()&&jsxRuntimeExports.jsxs("button",{role:"button","aria-label":"Remove Button",onClick:()=>lr(),children:[jsxRuntimeExports.jsx("img",{alt:"Remove",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/Trash.svg"}),jsxRuntimeExports.jsx("span",{children:"Remove"})]}),yn.canSelectedItemRotate()&&jsxRuntimeExports.jsxs("button",{role:"button","aria-label":"Rotate Button",onClick:()=>yn.rotateSelectedItem(),children:[jsxRuntimeExports.jsx("img",{alt:"Rotate",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/Rotate.svg"}),jsxRuntimeExports.jsx("span",{children:"Rotate"})]})]})]})})})},ContextMenu=({selectedItemData:o,contextMenuOpen:s,dismissContextMenuDrawer:a})=>{const b=uiSceneStore(ar=>ar.CORE_API),[_e,bt]=reactExports.useState(!1),[rn,sn]=reactExports.useState([]),[yn,Pn]=reactExports.useState(""),zn=uiSceneStore(ar=>ar.inventoryData);reactExports.useEffect(()=>(bt(s),()=>{}),[s]),reactExports.useEffect(()=>{if(sn([]),o===void 0||!o.itemData||b===null)return;const ar=b.getSelectedItemColors(),cr=b.getInventoryInfo()[o.itemData.skuID];if(ar.map(es=>{es.outOfStock=!1,cr[es.id].countAvailable==0&&(es.outOfStock=!0)}),sn(ar),ar.length===0)return;const hr=b.categoryData;hr.color&&hr.color.map(es=>{es.looks.map(Ur=>{Ur===ar[0].id&&Pn(es.label)})})},[o]),reactExports.useEffect(()=>{zn!=null&&lr(zn)},[zn]);const lr=reactExports.useCallback(ar=>{const cr=b.getSelectedItemData();if(cr==null)return;const hr=b.getSelectedItemColors(),es=ar[cr.itemData.skuID];hr.map(Ur=>{Ur.outOfStock=!1,es[Ur.id].countAvailable==0&&(Ur.outOfStock=!0)}),sn(hr)},[o]);return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:b.isMobile&&window.innerWidth<=768?jsxRuntimeExports.jsx(ContextMenuMobile,{selectedItemData:o,contextMenuDrawerOpen:_e,dismissContextMenuDrawer:a,colors:rn,colorsCategoryName:yn}):_e&&jsxRuntimeExports.jsx(ContextMenuDesktop,{contextMenuDesktopOpen:_e,selectedItemData:o,colors:rn,colorsCategoryName:yn})})},FullScreenModal=reactExports.forwardRef((o,s)=>{const a=reactExports.useRef(null),b=reactExports.useRef(null);reactExports.useEffect(()=>{s.current&&b.current&&a.current&&(s.current.show=sn=>bt(),s.current.hide=sn=>rn(),s.current.mainContainer=a.current,s.current.closeButton=b.current,_e())},[s,b,a]);const _e=()=>{b.current.addEventListener("click",()=>{o.onExit&&o.onExit(),rn()})},bt=()=>{a.current.classList.add("show"),uiSceneStore.setState({dialogPopupOpen:!0}),b.current.focus()},rn=()=>{uiSceneStore.setState({dialogPopupOpen:!1}),a.current.classList.remove("show")};return jsxRuntimeExports.jsx("div",{id:o.id,ref:s,className:o.className,children:jsxRuntimeExports.jsx("div",{"aria-hidden":!o.open,ref:a,className:"full-screen-modal-container",children:jsxRuntimeExports.jsxs("div",{className:"modal-content-container",children:[jsxRuntimeExports.jsx("div",{role:"button","aria-label":"Close Button",tabIndex:o.open?0:-1,ref:b,className:"close-button",children:jsxRuntimeExports.jsx("img",{alt:"Close Button",src:"https://storage.googleapis.com/gsc-epigraph-design/product-assets/Icon/X.svg"})}),jsxRuntimeExports.jsx("slot",{name:"full-screen-dialog-content",children:o.children})]})})})});var lottie$1={exports:{}};(function(module,exports){typeof navigator<"u"&&function(o,s){module.exports=s()}(commonjsGlobal,function(){var svgNS="http://www.w3.org/2000/svg",locationHref="",_useWebWorker=!1,initialDefaultFrame=-999999,setWebWorker=function(s){_useWebWorker=!!s},getWebWorker=function(){return _useWebWorker},setLocationHref=function(s){locationHref=s},getLocationHref=function(){return locationHref};function createTag(o){return document.createElement(o)}function extendPrototype(o,s){var a,b=o.length,_e;for(a=0;a<b;a+=1){_e=o[a].prototype;for(var bt in _e)Object.prototype.hasOwnProperty.call(_e,bt)&&(s.prototype[bt]=_e[bt])}}function getDescriptor(o,s){return Object.getOwnPropertyDescriptor(o,s)}function createProxyFunction(o){function s(){}return s.prototype=o,s}var audioControllerFactory=function(){function o(s){this.audios=[],this.audioFactory=s,this._volume=1,this._isMuted=!1}return o.prototype={addAudio:function(a){this.audios.push(a)},pause:function(){var a,b=this.audios.length;for(a=0;a<b;a+=1)this.audios[a].pause()},resume:function(){var a,b=this.audios.length;for(a=0;a<b;a+=1)this.audios[a].resume()},setRate:function(a){var b,_e=this.audios.length;for(b=0;b<_e;b+=1)this.audios[b].setRate(a)},createAudio:function(a){return this.audioFactory?this.audioFactory(a):window.Howl?new window.Howl({src:[a]}):{isPlaying:!1,play:function(){this.isPlaying=!0},seek:function(){this.isPlaying=!1},playing:function(){},rate:function(){},setVolume:function(){}}},setAudioFactory:function(a){this.audioFactory=a},setVolume:function(a){this._volume=a,this._updateVolume()},mute:function(){this._isMuted=!0,this._updateVolume()},unmute:function(){this._isMuted=!1,this._updateVolume()},getVolume:function(){return this._volume},_updateVolume:function(){var a,b=this.audios.length;for(a=0;a<b;a+=1)this.audios[a].volume(this._volume*(this._isMuted?0:1))}},function(){return new o}}(),createTypedArray=function(){function o(a,b){var _e=0,bt=[],rn;switch(a){case"int16":case"uint8c":rn=1;break;default:rn=1.1;break}for(_e=0;_e<b;_e+=1)bt.push(rn);return bt}function s(a,b){return a==="float32"?new Float32Array(b):a==="int16"?new Int16Array(b):a==="uint8c"?new Uint8ClampedArray(b):o(a,b)}return typeof Uint8ClampedArray=="function"&&typeof Float32Array=="function"?s:o}();function createSizedArray(o){return Array.apply(null,{length:o})}function _typeof$6(o){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?_typeof$6=function(a){return typeof a}:_typeof$6=function(a){return a&&typeof Symbol=="function"&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},_typeof$6(o)}var subframeEnabled=!0,expressionsPlugin=null,expressionsInterfaces=null,idPrefix$1="",isSafari=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),bmPow=Math.pow,bmSqrt=Math.sqrt,bmFloor=Math.floor,bmMax=Math.max,bmMin=Math.min,BMMath={};(function(){var o=["abs","acos","acosh","asin","asinh","atan","atanh","atan2","ceil","cbrt","expm1","clz32","cos","cosh","exp","floor","fround","hypot","imul","log","log1p","log2","log10","max","min","pow","random","round","sign","sin","sinh","sqrt","tan","tanh","trunc","E","LN10","LN2","LOG10E","LOG2E","PI","SQRT1_2","SQRT2"],s,a=o.length;for(s=0;s<a;s+=1)BMMath[o[s]]=Math[o[s]]})(),BMMath.random=Math.random,BMMath.abs=function(o){var s=_typeof$6(o);if(s==="object"&&o.length){var a=createSizedArray(o.length),b,_e=o.length;for(b=0;b<_e;b+=1)a[b]=Math.abs(o[b]);return a}return Math.abs(o)};var defaultCurveSegments=150,degToRads=Math.PI/180,roundCorner=.5519;function styleDiv(o){o.style.position="absolute",o.style.top=0,o.style.left=0,o.style.display="block",o.style.transformOrigin="0 0",o.style.webkitTransformOrigin="0 0",o.style.backfaceVisibility="visible",o.style.webkitBackfaceVisibility="visible",o.style.transformStyle="preserve-3d",o.style.webkitTransformStyle="preserve-3d",o.style.mozTransformStyle="preserve-3d"}function BMEnterFrameEvent(o,s,a,b){this.type=o,this.currentTime=s,this.totalTime=a,this.direction=b<0?-1:1}function BMCompleteEvent(o,s){this.type=o,this.direction=s<0?-1:1}function BMCompleteLoopEvent(o,s,a,b){this.type=o,this.currentLoop=a,this.totalLoops=s,this.direction=b<0?-1:1}function BMSegmentStartEvent(o,s,a){this.type=o,this.firstFrame=s,this.totalFrames=a}function BMDestroyEvent(o,s){this.type=o,this.target=s}function BMRenderFrameErrorEvent(o,s){this.type="renderFrameError",this.nativeError=o,this.currentTime=s}function BMConfigErrorEvent(o){this.type="configError",this.nativeError=o}var createElementID=function(){var o=0;return function(){return o+=1,idPrefix$1+"__lottie_element_"+o}}();function HSVtoRGB(o,s,a){var b,_e,bt,rn,sn,yn,Pn,zn;switch(rn=Math.floor(o*6),sn=o*6-rn,yn=a*(1-s),Pn=a*(1-sn*s),zn=a*(1-(1-sn)*s),rn%6){case 0:b=a,_e=zn,bt=yn;break;case 1:b=Pn,_e=a,bt=yn;break;case 2:b=yn,_e=a,bt=zn;break;case 3:b=yn,_e=Pn,bt=a;break;case 4:b=zn,_e=yn,bt=a;break;case 5:b=a,_e=yn,bt=Pn;break}return[b,_e,bt]}function RGBtoHSV(o,s,a){var b=Math.max(o,s,a),_e=Math.min(o,s,a),bt=b-_e,rn,sn=b===0?0:bt/b,yn=b/255;switch(b){case _e:rn=0;break;case o:rn=s-a+bt*(s<a?6:0),rn/=6*bt;break;case s:rn=a-o+bt*2,rn/=6*bt;break;case a:rn=o-s+bt*4,rn/=6*bt;break}return[rn,sn,yn]}function addSaturationToRGB(o,s){var a=RGBtoHSV(o[0]*255,o[1]*255,o[2]*255);return a[1]+=s,a[1]>1?a[1]=1:a[1]<=0&&(a[1]=0),HSVtoRGB(a[0],a[1],a[2])}function addBrightnessToRGB(o,s){var a=RGBtoHSV(o[0]*255,o[1]*255,o[2]*255);return a[2]+=s,a[2]>1?a[2]=1:a[2]<0&&(a[2]=0),HSVtoRGB(a[0],a[1],a[2])}function addHueToRGB(o,s){var a=RGBtoHSV(o[0]*255,o[1]*255,o[2]*255);return a[0]+=s/360,a[0]>1?a[0]-=1:a[0]<0&&(a[0]+=1),HSVtoRGB(a[0],a[1],a[2])}var rgbToHex=function(){var o=[],s,a;for(s=0;s<256;s+=1)a=s.toString(16),o[s]=a.length===1?"0"+a:a;return function(b,_e,bt){return b<0&&(b=0),_e<0&&(_e=0),bt<0&&(bt=0),"#"+o[b]+o[_e]+o[bt]}}(),setSubframeEnabled=function(s){subframeEnabled=!!s},getSubframeEnabled=function(){return subframeEnabled},setExpressionsPlugin=function(s){expressionsPlugin=s},getExpressionsPlugin=function(){return expressionsPlugin},setExpressionInterfaces=function(s){expressionsInterfaces=s},getExpressionInterfaces=function(){return expressionsInterfaces},setDefaultCurveSegments=function(s){defaultCurveSegments=s},getDefaultCurveSegments=function(){return defaultCurveSegments},setIdPrefix=function(s){idPrefix$1=s};function createNS(o){return document.createElementNS(svgNS,o)}function _typeof$5(o){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?_typeof$5=function(a){return typeof a}:_typeof$5=function(a){return a&&typeof Symbol=="function"&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},_typeof$5(o)}var dataManager=function(){var o=1,s=[],a,b,_e={onmessage:function(){},postMessage:function(cr){a({data:cr})}},bt={postMessage:function(cr){_e.onmessage({data:cr})}};function rn(ar){if(window.Worker&&window.Blob&&getWebWorker()){var cr=new Blob(["var _workerSelf = self; self.onmessage = ",ar.toString()],{type:"text/javascript"}),hr=URL.createObjectURL(cr);return new Worker(hr)}return a=ar,_e}function sn(){b||(b=rn(function(cr){function hr(){function Ur(Ty,yy){var by,Al,_f=Ty.length,gy,El,My,By;for(Al=0;Al<_f;Al+=1)if(by=Ty[Al],"ks"in by&&!by.completed){if(by.completed=!0,by.hasMask){var lA=by.masksProperties;for(El=lA.length,gy=0;gy<El;gy+=1)if(lA[gy].pt.k.i)os(lA[gy].pt.k);else for(By=lA[gy].pt.k.length,My=0;My<By;My+=1)lA[gy].pt.k[My].s&&os(lA[gy].pt.k[My].s[0]),lA[gy].pt.k[My].e&&os(lA[gy].pt.k[My].e[0])}by.ty===0?(by.layers=rs(by.refId,yy),Ur(by.layers,yy)):by.ty===4?as(by.shapes):by.ty===5&&Zl(by)}}function Dr(Ty,yy){if(Ty){var by=0,Al=Ty.length;for(by=0;by<Al;by+=1)Ty[by].t===1&&(Ty[by].data.layers=rs(Ty[by].data.refId,yy),Ur(Ty[by].data.layers,yy))}}function zr(Ty,yy){for(var by=0,Al=yy.length;by<Al;){if(yy[by].id===Ty)return yy[by];by+=1}return null}function rs(Ty,yy){var by=zr(Ty,yy);return by?by.layers.__used?JSON.parse(JSON.stringify(by.layers)):(by.layers.__used=!0,by.layers):null}function as(Ty){var yy,by=Ty.length,Al,_f;for(yy=by-1;yy>=0;yy-=1)if(Ty[yy].ty==="sh")if(Ty[yy].ks.k.i)os(Ty[yy].ks.k);else for(_f=Ty[yy].ks.k.length,Al=0;Al<_f;Al+=1)Ty[yy].ks.k[Al].s&&os(Ty[yy].ks.k[Al].s[0]),Ty[yy].ks.k[Al].e&&os(Ty[yy].ks.k[Al].e[0]);else Ty[yy].ty==="gr"&&as(Ty[yy].it)}function os(Ty){var yy,by=Ty.i.length;for(yy=0;yy<by;yy+=1)Ty.i[yy][0]+=Ty.v[yy][0],Ty.i[yy][1]+=Ty.v[yy][1],Ty.o[yy][0]+=Ty.v[yy][0],Ty.o[yy][1]+=Ty.v[yy][1]}function ls(Ty,yy){var by=yy?yy.split("."):[100,100,100];return Ty[0]>by[0]?!0:by[0]>Ty[0]?!1:Ty[1]>by[1]?!0:by[1]>Ty[1]?!1:Ty[2]>by[2]?!0:by[2]>Ty[2]?!1:null}var zs=function(){var Ty=[4,4,14];function yy(Al){var _f=Al.t.d;Al.t.d={k:[{s:_f,t:0}]}}function by(Al){var _f,gy=Al.length;for(_f=0;_f<gy;_f+=1)Al[_f].ty===5&&yy(Al[_f])}return function(Al){if(ls(Ty,Al.v)&&(by(Al.layers),Al.assets)){var _f,gy=Al.assets.length;for(_f=0;_f<gy;_f+=1)Al.assets[_f].layers&&by(Al.assets[_f].layers)}}}(),ho=function(){var Ty=[4,7,99];return function(yy){if(yy.chars&&!ls(Ty,yy.v)){var by,Al=yy.chars.length;for(by=0;by<Al;by+=1){var _f=yy.chars[by];_f.data&&_f.data.shapes&&(as(_f.data.shapes),_f.data.ip=0,_f.data.op=99999,_f.data.st=0,_f.data.sr=1,_f.data.ks={p:{k:[0,0],a:0},s:{k:[100,100],a:0},a:{k:[0,0],a:0},r:{k:0,a:0},o:{k:100,a:0}},yy.chars[by].t||(_f.data.shapes.push({ty:"no"}),_f.data.shapes[0].it.push({p:{k:[0,0],a:0},s:{k:[100,100],a:0},a:{k:[0,0],a:0},r:{k:0,a:0},o:{k:100,a:0},sk:{k:0,a:0},sa:{k:0,a:0},ty:"tr"})))}}}}(),ga=function(){var Ty=[5,7,15];function yy(Al){var _f=Al.t.p;typeof _f.a=="number"&&(_f.a={a:0,k:_f.a}),typeof _f.p=="number"&&(_f.p={a:0,k:_f.p}),typeof _f.r=="number"&&(_f.r={a:0,k:_f.r})}function by(Al){var _f,gy=Al.length;for(_f=0;_f<gy;_f+=1)Al[_f].ty===5&&yy(Al[_f])}return function(Al){if(ls(Ty,Al.v)&&(by(Al.layers),Al.assets)){var _f,gy=Al.assets.length;for(_f=0;_f<gy;_f+=1)Al.assets[_f].layers&&by(Al.assets[_f].layers)}}}(),mo=function(){var Ty=[4,1,9];function yy(Al){var _f,gy=Al.length,El,My;for(_f=0;_f<gy;_f+=1)if(Al[_f].ty==="gr")yy(Al[_f].it);else if(Al[_f].ty==="fl"||Al[_f].ty==="st")if(Al[_f].c.k&&Al[_f].c.k[0].i)for(My=Al[_f].c.k.length,El=0;El<My;El+=1)Al[_f].c.k[El].s&&(Al[_f].c.k[El].s[0]/=255,Al[_f].c.k[El].s[1]/=255,Al[_f].c.k[El].s[2]/=255,Al[_f].c.k[El].s[3]/=255),Al[_f].c.k[El].e&&(Al[_f].c.k[El].e[0]/=255,Al[_f].c.k[El].e[1]/=255,Al[_f].c.k[El].e[2]/=255,Al[_f].c.k[El].e[3]/=255);else Al[_f].c.k[0]/=255,Al[_f].c.k[1]/=255,Al[_f].c.k[2]/=255,Al[_f].c.k[3]/=255}function by(Al){var _f,gy=Al.length;for(_f=0;_f<gy;_f+=1)Al[_f].ty===4&&yy(Al[_f].shapes)}return function(Al){if(ls(Ty,Al.v)&&(by(Al.layers),Al.assets)){var _f,gy=Al.assets.length;for(_f=0;_f<gy;_f+=1)Al.assets[_f].layers&&by(Al.assets[_f].layers)}}}(),go=function(){var Ty=[4,4,18];function yy(Al){var _f,gy=Al.length,El,My;for(_f=gy-1;_f>=0;_f-=1)if(Al[_f].ty==="sh")if(Al[_f].ks.k.i)Al[_f].ks.k.c=Al[_f].closed;else for(My=Al[_f].ks.k.length,El=0;El<My;El+=1)Al[_f].ks.k[El].s&&(Al[_f].ks.k[El].s[0].c=Al[_f].closed),Al[_f].ks.k[El].e&&(Al[_f].ks.k[El].e[0].c=Al[_f].closed);else Al[_f].ty==="gr"&&yy(Al[_f].it)}function by(Al){var _f,gy,El=Al.length,My,By,lA,wA;for(gy=0;gy<El;gy+=1){if(_f=Al[gy],_f.hasMask){var Fy=_f.masksProperties;for(By=Fy.length,My=0;My<By;My+=1)if(Fy[My].pt.k.i)Fy[My].pt.k.c=Fy[My].cl;else for(wA=Fy[My].pt.k.length,lA=0;lA<wA;lA+=1)Fy[My].pt.k[lA].s&&(Fy[My].pt.k[lA].s[0].c=Fy[My].cl),Fy[My].pt.k[lA].e&&(Fy[My].pt.k[lA].e[0].c=Fy[My].cl)}_f.ty===4&&yy(_f.shapes)}}return function(Al){if(ls(Ty,Al.v)&&(by(Al.layers),Al.assets)){var _f,gy=Al.assets.length;for(_f=0;_f<gy;_f+=1)Al.assets[_f].layers&&by(Al.assets[_f].layers)}}}();function yl(Ty){Ty.__complete||(mo(Ty),zs(Ty),ho(Ty),ga(Ty),go(Ty),Ur(Ty.layers,Ty.assets),Dr(Ty.chars,Ty.assets),Ty.__complete=!0)}function Zl(Ty){Ty.t.a.length===0&&"m"in Ty.t.p}var _d={};return _d.completeData=yl,_d.checkColors=mo,_d.checkChars=ho,_d.checkPathProperties=ga,_d.checkShapes=go,_d.completeLayers=Ur,_d}if(bt.dataManager||(bt.dataManager=hr()),bt.assetLoader||(bt.assetLoader=function(){function Ur(zr){var rs=zr.getResponseHeader("content-type");return rs&&zr.responseType==="json"&&rs.indexOf("json")!==-1||zr.response&&_typeof$5(zr.response)==="object"?zr.response:zr.response&&typeof zr.response=="string"?JSON.parse(zr.response):zr.responseText?JSON.parse(zr.responseText):null}function Dr(zr,rs,as,os){var ls,zs=new XMLHttpRequest;try{zs.responseType="json"}catch{}zs.onreadystatechange=function(){if(zs.readyState===4)if(zs.status===200)ls=Ur(zs),as(ls);else try{ls=Ur(zs),as(ls)}catch(ho){os&&os(ho)}};try{zs.open(["G","E","T"].join(""),zr,!0)}catch{zs.open(["G","E","T"].join(""),rs+"/"+zr,!0)}zs.send()}return{load:Dr}}()),cr.data.type==="loadAnimation")bt.assetLoader.load(cr.data.path,cr.data.fullPath,function(Ur){bt.dataManager.completeData(Ur),bt.postMessage({id:cr.data.id,payload:Ur,status:"success"})},function(){bt.postMessage({id:cr.data.id,status:"error"})});else if(cr.data.type==="complete"){var es=cr.data.animation;bt.dataManager.completeData(es),bt.postMessage({id:cr.data.id,payload:es,status:"success"})}else cr.data.type==="loadData"&&bt.assetLoader.load(cr.data.path,cr.data.fullPath,function(Ur){bt.postMessage({id:cr.data.id,payload:Ur,status:"success"})},function(){bt.postMessage({id:cr.data.id,status:"error"})})}),b.onmessage=function(ar){var cr=ar.data,hr=cr.id,es=s[hr];s[hr]=null,cr.status==="success"?es.onComplete(cr.payload):es.onError&&es.onError()})}function yn(ar,cr){o+=1;var hr="processId_"+o;return s[hr]={onComplete:ar,onError:cr},hr}function Pn(ar,cr,hr){sn();var es=yn(cr,hr);b.postMessage({type:"loadAnimation",path:ar,fullPath:window.location.origin+window.location.pathname,id:es})}function zn(ar,cr,hr){sn();var es=yn(cr,hr);b.postMessage({type:"loadData",path:ar,fullPath:window.location.origin+window.location.pathname,id:es})}function lr(ar,cr,hr){sn();var es=yn(cr,hr);b.postMessage({type:"complete",animation:ar,id:es})}return{loadAnimation:Pn,loadData:zn,completeAnimation:lr}}(),ImagePreloader=function(){var o=function(){var Dr=createTag("canvas");Dr.width=1,Dr.height=1;var zr=Dr.getContext("2d");return zr.fillStyle="rgba(0,0,0,0)",zr.fillRect(0,0,1,1),Dr}();function s(){this.loadedAssets+=1,this.loadedAssets===this.totalImages&&this.loadedFootagesCount===this.totalFootages&&this.imagesLoadedCb&&this.imagesLoadedCb(null)}function a(){this.loadedFootagesCount+=1,this.loadedAssets===this.totalImages&&this.loadedFootagesCount===this.totalFootages&&this.imagesLoadedCb&&this.imagesLoadedCb(null)}function b(Dr,zr,rs){var as="";if(Dr.e)as=Dr.p;else if(zr){var os=Dr.p;os.indexOf("images/")!==-1&&(os=os.split("/")[1]),as=zr+os}else as=rs,as+=Dr.u?Dr.u:"",as+=Dr.p;return as}function _e(Dr){var zr=0,rs=setInterval(function(){var as=Dr.getBBox();(as.width||zr>500)&&(this._imageLoaded(),clearInterval(rs)),zr+=1}.bind(this),50)}function bt(Dr){var zr=b(Dr,this.assetsPath,this.path),rs=createNS("image");isSafari?this.testImageLoaded(rs):rs.addEventListener("load",this._imageLoaded,!1),rs.addEventListener("error",function(){as.img=o,this._imageLoaded()}.bind(this),!1),rs.setAttributeNS("http://www.w3.org/1999/xlink","href",zr),this._elementHelper.append?this._elementHelper.append(rs):this._elementHelper.appendChild(rs);var as={img:rs,assetData:Dr};return as}function rn(Dr){var zr=b(Dr,this.assetsPath,this.path),rs=createTag("img");rs.crossOrigin="anonymous",rs.addEventListener("load",this._imageLoaded,!1),rs.addEventListener("error",function(){as.img=o,this._imageLoaded()}.bind(this),!1),rs.src=zr;var as={img:rs,assetData:Dr};return as}function sn(Dr){var zr={assetData:Dr},rs=b(Dr,this.assetsPath,this.path);return dataManager.loadData(rs,function(as){zr.img=as,this._footageLoaded()}.bind(this),function(){zr.img={},this._footageLoaded()}.bind(this)),zr}function yn(Dr,zr){this.imagesLoadedCb=zr;var rs,as=Dr.length;for(rs=0;rs<as;rs+=1)Dr[rs].layers||(!Dr[rs].t||Dr[rs].t==="seq"?(this.totalImages+=1,this.images.push(this._createImageData(Dr[rs]))):Dr[rs].t===3&&(this.totalFootages+=1,this.images.push(this.createFootageData(Dr[rs]))))}function Pn(Dr){this.path=Dr||""}function zn(Dr){this.assetsPath=Dr||""}function lr(Dr){for(var zr=0,rs=this.images.length;zr<rs;){if(this.images[zr].assetData===Dr)return this.images[zr].img;zr+=1}return null}function ar(){this.imagesLoadedCb=null,this.images.length=0}function cr(){return this.totalImages===this.loadedAssets}function hr(){return this.totalFootages===this.loadedFootagesCount}function es(Dr,zr){Dr==="svg"?(this._elementHelper=zr,this._createImageData=this.createImageData.bind(this)):this._createImageData=this.createImgData.bind(this)}function Ur(){this._imageLoaded=s.bind(this),this._footageLoaded=a.bind(this),this.testImageLoaded=_e.bind(this),this.createFootageData=sn.bind(this),this.assetsPath="",this.path="",this.totalImages=0,this.totalFootages=0,this.loadedAssets=0,this.loadedFootagesCount=0,this.imagesLoadedCb=null,this.images=[]}return Ur.prototype={loadAssets:yn,setAssetsPath:zn,setPath:Pn,loadedImages:cr,loadedFootages:hr,destroy:ar,getAsset:lr,createImgData:rn,createImageData:bt,imageLoaded:s,footageLoaded:a,setCacheType:es},Ur}();function BaseEvent(){}BaseEvent.prototype={triggerEvent:function(s,a){if(this._cbs[s])for(var b=this._cbs[s],_e=0;_e<b.length;_e+=1)b[_e](a)},addEventListener:function(s,a){return this._cbs[s]||(this._cbs[s]=[]),this._cbs[s].push(a),function(){this.removeEventListener(s,a)}.bind(this)},removeEventListener:function(s,a){if(!a)this._cbs[s]=null;else if(this._cbs[s]){for(var b=0,_e=this._cbs[s].length;b<_e;)this._cbs[s][b]===a&&(this._cbs[s].splice(b,1),b-=1,_e-=1),b+=1;this._cbs[s].length||(this._cbs[s]=null)}}};var markerParser=function(){function o(s){for(var a=s.split(`\r
|
|
8998
8998
|
`),b={},_e,bt=0,rn=0;rn<a.length;rn+=1)_e=a[rn].split(":"),_e.length===2&&(b[_e[0]]=_e[1].trim(),bt+=1);if(bt===0)throw new Error;return b}return function(s){for(var a=[],b=0;b<s.length;b+=1){var _e=s[b],bt={time:_e.tm,duration:_e.dr};try{bt.payload=JSON.parse(s[b].cm)}catch{try{bt.payload=o(s[b].cm)}catch{bt.payload={name:s[b].cm}}}a.push(bt)}return a}}(),ProjectInterface=function(){function o(s){this.compositions.push(s)}return function(){function s(a){for(var b=0,_e=this.compositions.length;b<_e;){if(this.compositions[b].data&&this.compositions[b].data.nm===a)return this.compositions[b].prepareFrame&&this.compositions[b].data.xt&&this.compositions[b].prepareFrame(this.currentFrame),this.compositions[b].compInterface;b+=1}return null}return s.compositions=[],s.currentFrame=0,s.registerComposition=o,s}}(),renderers={},registerRenderer=function(s,a){renderers[s]=a};function getRenderer(o){return renderers[o]}function getRegisteredRenderer(){if(renderers.canvas)return"canvas";for(var o in renderers)if(renderers[o])return o;return""}function _typeof$4(o){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?_typeof$4=function(a){return typeof a}:_typeof$4=function(a){return a&&typeof Symbol=="function"&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},_typeof$4(o)}var AnimationItem=function(){this._cbs=[],this.name="",this.path="",this.isLoaded=!1,this.currentFrame=0,this.currentRawFrame=0,this.firstFrame=0,this.totalFrames=0,this.frameRate=0,this.frameMult=0,this.playSpeed=1,this.playDirection=1,this.playCount=0,this.animationData={},this.assets=[],this.isPaused=!0,this.autoplay=!1,this.loop=!0,this.renderer=null,this.animationID=createElementID(),this.assetsPath="",this.timeCompleted=0,this.segmentPos=0,this.isSubframeEnabled=getSubframeEnabled(),this.segments=[],this._idle=!0,this._completedLoop=!1,this.projectInterface=ProjectInterface(),this.imagePreloader=new ImagePreloader,this.audioController=audioControllerFactory(),this.markers=[],this.configAnimation=this.configAnimation.bind(this),this.onSetupError=this.onSetupError.bind(this),this.onSegmentComplete=this.onSegmentComplete.bind(this),this.drawnFrameEvent=new BMEnterFrameEvent("drawnFrame",0,0,0),this.expressionsPlugin=getExpressionsPlugin()};extendPrototype([BaseEvent],AnimationItem),AnimationItem.prototype.setParams=function(o){(o.wrapper||o.container)&&(this.wrapper=o.wrapper||o.container);var s="svg";o.animType?s=o.animType:o.renderer&&(s=o.renderer);var a=getRenderer(s);this.renderer=new a(this,o.rendererSettings),this.imagePreloader.setCacheType(s,this.renderer.globalData.defs),this.renderer.setProjectInterface(this.projectInterface),this.animType=s,o.loop===""||o.loop===null||o.loop===void 0||o.loop===!0?this.loop=!0:o.loop===!1?this.loop=!1:this.loop=parseInt(o.loop,10),this.autoplay="autoplay"in o?o.autoplay:!0,this.name=o.name?o.name:"",this.autoloadSegments=Object.prototype.hasOwnProperty.call(o,"autoloadSegments")?o.autoloadSegments:!0,this.assetsPath=o.assetsPath,this.initialSegment=o.initialSegment,o.audioFactory&&this.audioController.setAudioFactory(o.audioFactory),o.animationData?this.setupAnimation(o.animationData):o.path&&(o.path.lastIndexOf("\\")!==-1?this.path=o.path.substr(0,o.path.lastIndexOf("\\")+1):this.path=o.path.substr(0,o.path.lastIndexOf("/")+1),this.fileName=o.path.substr(o.path.lastIndexOf("/")+1),this.fileName=this.fileName.substr(0,this.fileName.lastIndexOf(".json")),dataManager.loadAnimation(o.path,this.configAnimation,this.onSetupError))},AnimationItem.prototype.onSetupError=function(){this.trigger("data_failed")},AnimationItem.prototype.setupAnimation=function(o){dataManager.completeAnimation(o,this.configAnimation)},AnimationItem.prototype.setData=function(o,s){s&&_typeof$4(s)!=="object"&&(s=JSON.parse(s));var a={wrapper:o,animationData:s},b=o.attributes;a.path=b.getNamedItem("data-animation-path")?b.getNamedItem("data-animation-path").value:b.getNamedItem("data-bm-path")?b.getNamedItem("data-bm-path").value:b.getNamedItem("bm-path")?b.getNamedItem("bm-path").value:"",a.animType=b.getNamedItem("data-anim-type")?b.getNamedItem("data-anim-type").value:b.getNamedItem("data-bm-type")?b.getNamedItem("data-bm-type").value:b.getNamedItem("bm-type")?b.getNamedItem("bm-type").value:b.getNamedItem("data-bm-renderer")?b.getNamedItem("data-bm-renderer").value:b.getNamedItem("bm-renderer")?b.getNamedItem("bm-renderer").value:getRegisteredRenderer()||"canvas";var _e=b.getNamedItem("data-anim-loop")?b.getNamedItem("data-anim-loop").value:b.getNamedItem("data-bm-loop")?b.getNamedItem("data-bm-loop").value:b.getNamedItem("bm-loop")?b.getNamedItem("bm-loop").value:"";_e==="false"?a.loop=!1:_e==="true"?a.loop=!0:_e!==""&&(a.loop=parseInt(_e,10));var bt=b.getNamedItem("data-anim-autoplay")?b.getNamedItem("data-anim-autoplay").value:b.getNamedItem("data-bm-autoplay")?b.getNamedItem("data-bm-autoplay").value:b.getNamedItem("bm-autoplay")?b.getNamedItem("bm-autoplay").value:!0;a.autoplay=bt!=="false",a.name=b.getNamedItem("data-name")?b.getNamedItem("data-name").value:b.getNamedItem("data-bm-name")?b.getNamedItem("data-bm-name").value:b.getNamedItem("bm-name")?b.getNamedItem("bm-name").value:"";var rn=b.getNamedItem("data-anim-prerender")?b.getNamedItem("data-anim-prerender").value:b.getNamedItem("data-bm-prerender")?b.getNamedItem("data-bm-prerender").value:b.getNamedItem("bm-prerender")?b.getNamedItem("bm-prerender").value:"";rn==="false"&&(a.prerender=!1),a.path?this.setParams(a):this.trigger("destroy")},AnimationItem.prototype.includeLayers=function(o){o.op>this.animationData.op&&(this.animationData.op=o.op,this.totalFrames=Math.floor(o.op-this.animationData.ip));var s=this.animationData.layers,a,b=s.length,_e=o.layers,bt,rn=_e.length;for(bt=0;bt<rn;bt+=1)for(a=0;a<b;){if(s[a].id===_e[bt].id){s[a]=_e[bt];break}a+=1}if((o.chars||o.fonts)&&(this.renderer.globalData.fontManager.addChars(o.chars),this.renderer.globalData.fontManager.addFonts(o.fonts,this.renderer.globalData.defs)),o.assets)for(b=o.assets.length,a=0;a<b;a+=1)this.animationData.assets.push(o.assets[a]);this.animationData.__complete=!1,dataManager.completeAnimation(this.animationData,this.onSegmentComplete)},AnimationItem.prototype.onSegmentComplete=function(o){this.animationData=o;var s=getExpressionsPlugin();s&&s.initExpressions(this),this.loadNextSegment()},AnimationItem.prototype.loadNextSegment=function(){var o=this.animationData.segments;if(!o||o.length===0||!this.autoloadSegments){this.trigger("data_ready"),this.timeCompleted=this.totalFrames;return}var s=o.shift();this.timeCompleted=s.time*this.frameRate;var a=this.path+this.fileName+"_"+this.segmentPos+".json";this.segmentPos+=1,dataManager.loadData(a,this.includeLayers.bind(this),function(){this.trigger("data_failed")}.bind(this))},AnimationItem.prototype.loadSegments=function(){var o=this.animationData.segments;o||(this.timeCompleted=this.totalFrames),this.loadNextSegment()},AnimationItem.prototype.imagesLoaded=function(){this.trigger("loaded_images"),this.checkLoaded()},AnimationItem.prototype.preloadImages=function(){this.imagePreloader.setAssetsPath(this.assetsPath),this.imagePreloader.setPath(this.path),this.imagePreloader.loadAssets(this.animationData.assets,this.imagesLoaded.bind(this))},AnimationItem.prototype.configAnimation=function(o){if(this.renderer)try{this.animationData=o,this.initialSegment?(this.totalFrames=Math.floor(this.initialSegment[1]-this.initialSegment[0]),this.firstFrame=Math.round(this.initialSegment[0])):(this.totalFrames=Math.floor(this.animationData.op-this.animationData.ip),this.firstFrame=Math.round(this.animationData.ip)),this.renderer.configAnimation(o),o.assets||(o.assets=[]),this.assets=this.animationData.assets,this.frameRate=this.animationData.fr,this.frameMult=this.animationData.fr/1e3,this.renderer.searchExtraCompositions(o.assets),this.markers=markerParser(o.markers||[]),this.trigger("config_ready"),this.preloadImages(),this.loadSegments(),this.updaFrameModifier(),this.waitForFontsLoaded(),this.isPaused&&this.audioController.pause()}catch(s){this.triggerConfigError(s)}},AnimationItem.prototype.waitForFontsLoaded=function(){this.renderer&&(this.renderer.globalData.fontManager.isLoaded?this.checkLoaded():setTimeout(this.waitForFontsLoaded.bind(this),20))},AnimationItem.prototype.checkLoaded=function(){if(!this.isLoaded&&this.renderer.globalData.fontManager.isLoaded&&(this.imagePreloader.loadedImages()||this.renderer.rendererType!=="canvas")&&this.imagePreloader.loadedFootages()){this.isLoaded=!0;var o=getExpressionsPlugin();o&&o.initExpressions(this),this.renderer.initItems(),setTimeout(function(){this.trigger("DOMLoaded")}.bind(this),0),this.gotoFrame(),this.autoplay&&this.play()}},AnimationItem.prototype.resize=function(o,s){var a=typeof o=="number"?o:void 0,b=typeof s=="number"?s:void 0;this.renderer.updateContainerSize(a,b)},AnimationItem.prototype.setSubframe=function(o){this.isSubframeEnabled=!!o},AnimationItem.prototype.gotoFrame=function(){this.currentFrame=this.isSubframeEnabled?this.currentRawFrame:~~this.currentRawFrame,this.timeCompleted!==this.totalFrames&&this.currentFrame>this.timeCompleted&&(this.currentFrame=this.timeCompleted),this.trigger("enterFrame"),this.renderFrame(),this.trigger("drawnFrame")},AnimationItem.prototype.renderFrame=function(){if(!(this.isLoaded===!1||!this.renderer))try{this.expressionsPlugin&&this.expressionsPlugin.resetFrame(),this.renderer.renderFrame(this.currentFrame+this.firstFrame)}catch(o){this.triggerRenderFrameError(o)}},AnimationItem.prototype.play=function(o){o&&this.name!==o||this.isPaused===!0&&(this.isPaused=!1,this.trigger("_play"),this.audioController.resume(),this._idle&&(this._idle=!1,this.trigger("_active")))},AnimationItem.prototype.pause=function(o){o&&this.name!==o||this.isPaused===!1&&(this.isPaused=!0,this.trigger("_pause"),this._idle=!0,this.trigger("_idle"),this.audioController.pause())},AnimationItem.prototype.togglePause=function(o){o&&this.name!==o||(this.isPaused===!0?this.play():this.pause())},AnimationItem.prototype.stop=function(o){o&&this.name!==o||(this.pause(),this.playCount=0,this._completedLoop=!1,this.setCurrentRawFrameValue(0))},AnimationItem.prototype.getMarkerData=function(o){for(var s,a=0;a<this.markers.length;a+=1)if(s=this.markers[a],s.payload&&s.payload.name===o)return s;return null},AnimationItem.prototype.goToAndStop=function(o,s,a){if(!(a&&this.name!==a)){var b=Number(o);if(isNaN(b)){var _e=this.getMarkerData(o);_e&&this.goToAndStop(_e.time,!0)}else s?this.setCurrentRawFrameValue(o):this.setCurrentRawFrameValue(o*this.frameModifier);this.pause()}},AnimationItem.prototype.goToAndPlay=function(o,s,a){if(!(a&&this.name!==a)){var b=Number(o);if(isNaN(b)){var _e=this.getMarkerData(o);_e&&(_e.duration?this.playSegments([_e.time,_e.time+_e.duration],!0):this.goToAndStop(_e.time,!0))}else this.goToAndStop(b,s,a);this.play()}},AnimationItem.prototype.advanceTime=function(o){if(!(this.isPaused===!0||this.isLoaded===!1)){var s=this.currentRawFrame+o*this.frameModifier,a=!1;s>=this.totalFrames-1&&this.frameModifier>0?!this.loop||this.playCount===this.loop?this.checkSegments(s>this.totalFrames?s%this.totalFrames:0)||(a=!0,s=this.totalFrames-1):s>=this.totalFrames?(this.playCount+=1,this.checkSegments(s%this.totalFrames)||(this.setCurrentRawFrameValue(s%this.totalFrames),this._completedLoop=!0,this.trigger("loopComplete"))):this.setCurrentRawFrameValue(s):s<0?this.checkSegments(s%this.totalFrames)||(this.loop&&!(this.playCount--<=0&&this.loop!==!0)?(this.setCurrentRawFrameValue(this.totalFrames+s%this.totalFrames),this._completedLoop?this.trigger("loopComplete"):this._completedLoop=!0):(a=!0,s=0)):this.setCurrentRawFrameValue(s),a&&(this.setCurrentRawFrameValue(s),this.pause(),this.trigger("complete"))}},AnimationItem.prototype.adjustSegment=function(o,s){this.playCount=0,o[1]<o[0]?(this.frameModifier>0&&(this.playSpeed<0?this.setSpeed(-this.playSpeed):this.setDirection(-1)),this.totalFrames=o[0]-o[1],this.timeCompleted=this.totalFrames,this.firstFrame=o[1],this.setCurrentRawFrameValue(this.totalFrames-.001-s)):o[1]>o[0]&&(this.frameModifier<0&&(this.playSpeed<0?this.setSpeed(-this.playSpeed):this.setDirection(1)),this.totalFrames=o[1]-o[0],this.timeCompleted=this.totalFrames,this.firstFrame=o[0],this.setCurrentRawFrameValue(.001+s)),this.trigger("segmentStart")},AnimationItem.prototype.setSegment=function(o,s){var a=-1;this.isPaused&&(this.currentRawFrame+this.firstFrame<o?a=o:this.currentRawFrame+this.firstFrame>s&&(a=s-o)),this.firstFrame=o,this.totalFrames=s-o,this.timeCompleted=this.totalFrames,a!==-1&&this.goToAndStop(a,!0)},AnimationItem.prototype.playSegments=function(o,s){if(s&&(this.segments.length=0),_typeof$4(o[0])==="object"){var a,b=o.length;for(a=0;a<b;a+=1)this.segments.push(o[a])}else this.segments.push(o);this.segments.length&&s&&this.adjustSegment(this.segments.shift(),0),this.isPaused&&this.play()},AnimationItem.prototype.resetSegments=function(o){this.segments.length=0,this.segments.push([this.animationData.ip,this.animationData.op]),o&&this.checkSegments(0)},AnimationItem.prototype.checkSegments=function(o){return this.segments.length?(this.adjustSegment(this.segments.shift(),o),!0):!1},AnimationItem.prototype.destroy=function(o){o&&this.name!==o||!this.renderer||(this.renderer.destroy(),this.imagePreloader.destroy(),this.trigger("destroy"),this._cbs=null,this.onEnterFrame=null,this.onLoopComplete=null,this.onComplete=null,this.onSegmentStart=null,this.onDestroy=null,this.renderer=null,this.expressionsPlugin=null,this.imagePreloader=null,this.projectInterface=null)},AnimationItem.prototype.setCurrentRawFrameValue=function(o){this.currentRawFrame=o,this.gotoFrame()},AnimationItem.prototype.setSpeed=function(o){this.playSpeed=o,this.updaFrameModifier()},AnimationItem.prototype.setDirection=function(o){this.playDirection=o<0?-1:1,this.updaFrameModifier()},AnimationItem.prototype.setLoop=function(o){this.loop=o},AnimationItem.prototype.setVolume=function(o,s){s&&this.name!==s||this.audioController.setVolume(o)},AnimationItem.prototype.getVolume=function(){return this.audioController.getVolume()},AnimationItem.prototype.mute=function(o){o&&this.name!==o||this.audioController.mute()},AnimationItem.prototype.unmute=function(o){o&&this.name!==o||this.audioController.unmute()},AnimationItem.prototype.updaFrameModifier=function(){this.frameModifier=this.frameMult*this.playSpeed*this.playDirection,this.audioController.setRate(this.playSpeed*this.playDirection)},AnimationItem.prototype.getPath=function(){return this.path},AnimationItem.prototype.getAssetsPath=function(o){var s="";if(o.e)s=o.p;else if(this.assetsPath){var a=o.p;a.indexOf("images/")!==-1&&(a=a.split("/")[1]),s=this.assetsPath+a}else s=this.path,s+=o.u?o.u:"",s+=o.p;return s},AnimationItem.prototype.getAssetData=function(o){for(var s=0,a=this.assets.length;s<a;){if(o===this.assets[s].id)return this.assets[s];s+=1}return null},AnimationItem.prototype.hide=function(){this.renderer.hide()},AnimationItem.prototype.show=function(){this.renderer.show()},AnimationItem.prototype.getDuration=function(o){return o?this.totalFrames:this.totalFrames/this.frameRate},AnimationItem.prototype.updateDocumentData=function(o,s,a){try{var b=this.renderer.getElementByPath(o);b.updateDocumentData(s,a)}catch{}},AnimationItem.prototype.trigger=function(o){if(this._cbs&&this._cbs[o])switch(o){case"enterFrame":this.triggerEvent(o,new BMEnterFrameEvent(o,this.currentFrame,this.totalFrames,this.frameModifier));break;case"drawnFrame":this.drawnFrameEvent.currentTime=this.currentFrame,this.drawnFrameEvent.totalTime=this.totalFrames,this.drawnFrameEvent.direction=this.frameModifier,this.triggerEvent(o,this.drawnFrameEvent);break;case"loopComplete":this.triggerEvent(o,new BMCompleteLoopEvent(o,this.loop,this.playCount,this.frameMult));break;case"complete":this.triggerEvent(o,new BMCompleteEvent(o,this.frameMult));break;case"segmentStart":this.triggerEvent(o,new BMSegmentStartEvent(o,this.firstFrame,this.totalFrames));break;case"destroy":this.triggerEvent(o,new BMDestroyEvent(o,this));break;default:this.triggerEvent(o)}o==="enterFrame"&&this.onEnterFrame&&this.onEnterFrame.call(this,new BMEnterFrameEvent(o,this.currentFrame,this.totalFrames,this.frameMult)),o==="loopComplete"&&this.onLoopComplete&&this.onLoopComplete.call(this,new BMCompleteLoopEvent(o,this.loop,this.playCount,this.frameMult)),o==="complete"&&this.onComplete&&this.onComplete.call(this,new BMCompleteEvent(o,this.frameMult)),o==="segmentStart"&&this.onSegmentStart&&this.onSegmentStart.call(this,new BMSegmentStartEvent(o,this.firstFrame,this.totalFrames)),o==="destroy"&&this.onDestroy&&this.onDestroy.call(this,new BMDestroyEvent(o,this))},AnimationItem.prototype.triggerRenderFrameError=function(o){var s=new BMRenderFrameErrorEvent(o,this.currentFrame);this.triggerEvent("error",s),this.onError&&this.onError.call(this,s)},AnimationItem.prototype.triggerConfigError=function(o){var s=new BMConfigErrorEvent(o,this.currentFrame);this.triggerEvent("error",s),this.onError&&this.onError.call(this,s)};var animationManager=function(){var o={},s=[],a=0,b=0,_e=0,bt=!0,rn=!1;function sn(yy){for(var by=0,Al=yy.target;by<b;)s[by].animation===Al&&(s.splice(by,1),by-=1,b-=1,Al.isPaused||lr()),by+=1}function yn(yy,by){if(!yy)return null;for(var Al=0;Al<b;){if(s[Al].elem===yy&&s[Al].elem!==null)return s[Al].animation;Al+=1}var _f=new AnimationItem;return ar(_f,yy),_f.setData(yy,by),_f}function Pn(){var yy,by=s.length,Al=[];for(yy=0;yy<by;yy+=1)Al.push(s[yy].animation);return Al}function zn(){_e+=1,mo()}function lr(){_e-=1}function ar(yy,by){yy.addEventListener("destroy",sn),yy.addEventListener("_active",zn),yy.addEventListener("_idle",lr),s.push({elem:by,animation:yy}),b+=1}function cr(yy){var by=new AnimationItem;return ar(by,null),by.setParams(yy),by}function hr(yy,by){var Al;for(Al=0;Al<b;Al+=1)s[Al].animation.setSpeed(yy,by)}function es(yy,by){var Al;for(Al=0;Al<b;Al+=1)s[Al].animation.setDirection(yy,by)}function Ur(yy){var by;for(by=0;by<b;by+=1)s[by].animation.play(yy)}function Dr(yy){var by=yy-a,Al;for(Al=0;Al<b;Al+=1)s[Al].animation.advanceTime(by);a=yy,_e&&!rn?window.requestAnimationFrame(Dr):bt=!0}function zr(yy){a=yy,window.requestAnimationFrame(Dr)}function rs(yy){var by;for(by=0;by<b;by+=1)s[by].animation.pause(yy)}function as(yy,by,Al){var _f;for(_f=0;_f<b;_f+=1)s[_f].animation.goToAndStop(yy,by,Al)}function os(yy){var by;for(by=0;by<b;by+=1)s[by].animation.stop(yy)}function ls(yy){var by;for(by=0;by<b;by+=1)s[by].animation.togglePause(yy)}function zs(yy){var by;for(by=b-1;by>=0;by-=1)s[by].animation.destroy(yy)}function ho(yy,by,Al){var _f=[].concat([].slice.call(document.getElementsByClassName("lottie")),[].slice.call(document.getElementsByClassName("bodymovin"))),gy,El=_f.length;for(gy=0;gy<El;gy+=1)Al&&_f[gy].setAttribute("data-bm-type",Al),yn(_f[gy],yy);if(by&&El===0){Al||(Al="svg");var My=document.getElementsByTagName("body")[0];My.innerText="";var By=createTag("div");By.style.width="100%",By.style.height="100%",By.setAttribute("data-bm-type",Al),My.appendChild(By),yn(By,yy)}}function ga(){var yy;for(yy=0;yy<b;yy+=1)s[yy].animation.resize()}function mo(){!rn&&_e&&bt&&(window.requestAnimationFrame(zr),bt=!1)}function go(){rn=!0}function yl(){rn=!1,mo()}function Zl(yy,by){var Al;for(Al=0;Al<b;Al+=1)s[Al].animation.setVolume(yy,by)}function _d(yy){var by;for(by=0;by<b;by+=1)s[by].animation.mute(yy)}function Ty(yy){var by;for(by=0;by<b;by+=1)s[by].animation.unmute(yy)}return o.registerAnimation=yn,o.loadAnimation=cr,o.setSpeed=hr,o.setDirection=es,o.play=Ur,o.pause=rs,o.stop=os,o.togglePause=ls,o.searchAnimations=ho,o.resize=ga,o.goToAndStop=as,o.destroy=zs,o.freeze=go,o.unfreeze=yl,o.setVolume=Zl,o.mute=_d,o.unmute=Ty,o.getRegisteredAnimations=Pn,o}(),BezierFactory=function(){var o={};o.getBezierEasing=a;var s={};function a(zr,rs,as,os,ls){var zs=ls||("bez_"+zr+"_"+rs+"_"+as+"_"+os).replace(/\./g,"p");if(s[zs])return s[zs];var ho=new Dr([zr,rs,as,os]);return s[zs]=ho,ho}var b=4,_e=.001,bt=1e-7,rn=10,sn=11,yn=1/(sn-1),Pn=typeof Float32Array=="function";function zn(zr,rs){return 1-3*rs+3*zr}function lr(zr,rs){return 3*rs-6*zr}function ar(zr){return 3*zr}function cr(zr,rs,as){return((zn(rs,as)*zr+lr(rs,as))*zr+ar(rs))*zr}function hr(zr,rs,as){return 3*zn(rs,as)*zr*zr+2*lr(rs,as)*zr+ar(rs)}function es(zr,rs,as,os,ls){var zs,ho,ga=0;do ho=rs+(as-rs)/2,zs=cr(ho,os,ls)-zr,zs>0?as=ho:rs=ho;while(Math.abs(zs)>bt&&++ga<rn);return ho}function Ur(zr,rs,as,os){for(var ls=0;ls<b;++ls){var zs=hr(rs,as,os);if(zs===0)return rs;var ho=cr(rs,as,os)-zr;rs-=ho/zs}return rs}function Dr(zr){this._p=zr,this._mSampleValues=Pn?new Float32Array(sn):new Array(sn),this._precomputed=!1,this.get=this.get.bind(this)}return Dr.prototype={get:function(rs){var as=this._p[0],os=this._p[1],ls=this._p[2],zs=this._p[3];return this._precomputed||this._precompute(),as===os&&ls===zs?rs:rs===0?0:rs===1?1:cr(this._getTForX(rs),os,zs)},_precompute:function(){var rs=this._p[0],as=this._p[1],os=this._p[2],ls=this._p[3];this._precomputed=!0,(rs!==as||os!==ls)&&this._calcSampleValues()},_calcSampleValues:function(){for(var rs=this._p[0],as=this._p[2],os=0;os<sn;++os)this._mSampleValues[os]=cr(os*yn,rs,as)},_getTForX:function(rs){for(var as=this._p[0],os=this._p[2],ls=this._mSampleValues,zs=0,ho=1,ga=sn-1;ho!==ga&&ls[ho]<=rs;++ho)zs+=yn;--ho;var mo=(rs-ls[ho])/(ls[ho+1]-ls[ho]),go=zs+mo*yn,yl=hr(go,as,os);return yl>=_e?Ur(rs,go,as,os):yl===0?go:es(rs,zs,zs+yn,as,os)}},o}(),pooling=function(){function o(s){return s.concat(createSizedArray(s.length))}return{double:o}}(),poolFactory=function(){return function(o,s,a){var b=0,_e=o,bt=createSizedArray(_e),rn={newElement:sn,release:yn};function sn(){var Pn;return b?(b-=1,Pn=bt[b]):Pn=s(),Pn}function yn(Pn){b===_e&&(bt=pooling.double(bt),_e*=2),a&&a(Pn),bt[b]=Pn,b+=1}return rn}}(),bezierLengthPool=function(){function o(){return{addedLength:0,percents:createTypedArray("float32",getDefaultCurveSegments()),lengths:createTypedArray("float32",getDefaultCurveSegments())}}return poolFactory(8,o)}(),segmentsLengthPool=function(){function o(){return{lengths:[],totalLength:0}}function s(a){var b,_e=a.lengths.length;for(b=0;b<_e;b+=1)bezierLengthPool.release(a.lengths[b]);a.lengths.length=0}return poolFactory(8,o,s)}();function bezFunction(){var o=Math;function s(ar,cr,hr,es,Ur,Dr){var zr=ar*es+cr*Ur+hr*Dr-Ur*es-Dr*ar-hr*cr;return zr>-.001&&zr<.001}function a(ar,cr,hr,es,Ur,Dr,zr,rs,as){if(hr===0&&Dr===0&&as===0)return s(ar,cr,es,Ur,zr,rs);var os=o.sqrt(o.pow(es-ar,2)+o.pow(Ur-cr,2)+o.pow(Dr-hr,2)),ls=o.sqrt(o.pow(zr-ar,2)+o.pow(rs-cr,2)+o.pow(as-hr,2)),zs=o.sqrt(o.pow(zr-es,2)+o.pow(rs-Ur,2)+o.pow(as-Dr,2)),ho;return os>ls?os>zs?ho=os-ls-zs:ho=zs-ls-os:zs>ls?ho=zs-ls-os:ho=ls-os-zs,ho>-1e-4&&ho<1e-4}var b=function(){return function(ar,cr,hr,es){var Ur=getDefaultCurveSegments(),Dr,zr,rs,as,os,ls=0,zs,ho=[],ga=[],mo=bezierLengthPool.newElement();for(rs=hr.length,Dr=0;Dr<Ur;Dr+=1){for(os=Dr/(Ur-1),zs=0,zr=0;zr<rs;zr+=1)as=bmPow(1-os,3)*ar[zr]+3*bmPow(1-os,2)*os*hr[zr]+3*(1-os)*bmPow(os,2)*es[zr]+bmPow(os,3)*cr[zr],ho[zr]=as,ga[zr]!==null&&(zs+=bmPow(ho[zr]-ga[zr],2)),ga[zr]=ho[zr];zs&&(zs=bmSqrt(zs),ls+=zs),mo.percents[Dr]=os,mo.lengths[Dr]=ls}return mo.addedLength=ls,mo}}();function _e(ar){var cr=segmentsLengthPool.newElement(),hr=ar.c,es=ar.v,Ur=ar.o,Dr=ar.i,zr,rs=ar._length,as=cr.lengths,os=0;for(zr=0;zr<rs-1;zr+=1)as[zr]=b(es[zr],es[zr+1],Ur[zr],Dr[zr+1]),os+=as[zr].addedLength;return hr&&rs&&(as[zr]=b(es[zr],es[0],Ur[zr],Dr[0]),os+=as[zr].addedLength),cr.totalLength=os,cr}function bt(ar){this.segmentLength=0,this.points=new Array(ar)}function rn(ar,cr){this.partialLength=ar,this.point=cr}var sn=function(){var ar={};return function(cr,hr,es,Ur){var Dr=(cr[0]+"_"+cr[1]+"_"+hr[0]+"_"+hr[1]+"_"+es[0]+"_"+es[1]+"_"+Ur[0]+"_"+Ur[1]).replace(/\./g,"p");if(!ar[Dr]){var zr=getDefaultCurveSegments(),rs,as,os,ls,zs,ho=0,ga,mo,go=null;cr.length===2&&(cr[0]!==hr[0]||cr[1]!==hr[1])&&s(cr[0],cr[1],hr[0],hr[1],cr[0]+es[0],cr[1]+es[1])&&s(cr[0],cr[1],hr[0],hr[1],hr[0]+Ur[0],hr[1]+Ur[1])&&(zr=2);var yl=new bt(zr);for(os=es.length,rs=0;rs<zr;rs+=1){for(mo=createSizedArray(os),zs=rs/(zr-1),ga=0,as=0;as<os;as+=1)ls=bmPow(1-zs,3)*cr[as]+3*bmPow(1-zs,2)*zs*(cr[as]+es[as])+3*(1-zs)*bmPow(zs,2)*(hr[as]+Ur[as])+bmPow(zs,3)*hr[as],mo[as]=ls,go!==null&&(ga+=bmPow(mo[as]-go[as],2));ga=bmSqrt(ga),ho+=ga,yl.points[rs]=new rn(ga,mo),go=mo}yl.segmentLength=ho,ar[Dr]=yl}return ar[Dr]}}();function yn(ar,cr){var hr=cr.percents,es=cr.lengths,Ur=hr.length,Dr=bmFloor((Ur-1)*ar),zr=ar*cr.addedLength,rs=0;if(Dr===Ur-1||Dr===0||zr===es[Dr])return hr[Dr];for(var as=es[Dr]>zr?-1:1,os=!0;os;)if(es[Dr]<=zr&&es[Dr+1]>zr?(rs=(zr-es[Dr])/(es[Dr+1]-es[Dr]),os=!1):Dr+=as,Dr<0||Dr>=Ur-1){if(Dr===Ur-1)return hr[Dr];os=!1}return hr[Dr]+(hr[Dr+1]-hr[Dr])*rs}function Pn(ar,cr,hr,es,Ur,Dr){var zr=yn(Ur,Dr),rs=1-zr,as=o.round((rs*rs*rs*ar[0]+(zr*rs*rs+rs*zr*rs+rs*rs*zr)*hr[0]+(zr*zr*rs+rs*zr*zr+zr*rs*zr)*es[0]+zr*zr*zr*cr[0])*1e3)/1e3,os=o.round((rs*rs*rs*ar[1]+(zr*rs*rs+rs*zr*rs+rs*rs*zr)*hr[1]+(zr*zr*rs+rs*zr*zr+zr*rs*zr)*es[1]+zr*zr*zr*cr[1])*1e3)/1e3;return[as,os]}var zn=createTypedArray("float32",8);function lr(ar,cr,hr,es,Ur,Dr,zr){Ur<0?Ur=0:Ur>1&&(Ur=1);var rs=yn(Ur,zr);Dr=Dr>1?1:Dr;var as=yn(Dr,zr),os,ls=ar.length,zs=1-rs,ho=1-as,ga=zs*zs*zs,mo=rs*zs*zs*3,go=rs*rs*zs*3,yl=rs*rs*rs,Zl=zs*zs*ho,_d=rs*zs*ho+zs*rs*ho+zs*zs*as,Ty=rs*rs*ho+zs*rs*as+rs*zs*as,yy=rs*rs*as,by=zs*ho*ho,Al=rs*ho*ho+zs*as*ho+zs*ho*as,_f=rs*as*ho+zs*as*as+rs*ho*as,gy=rs*as*as,El=ho*ho*ho,My=as*ho*ho+ho*as*ho+ho*ho*as,By=as*as*ho+ho*as*as+as*ho*as,lA=as*as*as;for(os=0;os<ls;os+=1)zn[os*4]=o.round((ga*ar[os]+mo*hr[os]+go*es[os]+yl*cr[os])*1e3)/1e3,zn[os*4+1]=o.round((Zl*ar[os]+_d*hr[os]+Ty*es[os]+yy*cr[os])*1e3)/1e3,zn[os*4+2]=o.round((by*ar[os]+Al*hr[os]+_f*es[os]+gy*cr[os])*1e3)/1e3,zn[os*4+3]=o.round((El*ar[os]+My*hr[os]+By*es[os]+lA*cr[os])*1e3)/1e3;return zn}return{getSegmentsLength:_e,getNewSegment:lr,getPointInSegment:Pn,buildBezierData:sn,pointOnLine2D:s,pointOnLine3D:a}}var bez=bezFunction(),initFrame=initialDefaultFrame,mathAbs=Math.abs;function interpolateValue(o,s){var a=this.offsetTime,b;this.propType==="multidimensional"&&(b=createTypedArray("float32",this.pv.length));for(var _e=s.lastIndex,bt=_e,rn=this.keyframes.length-1,sn=!0,yn,Pn,zn;sn;){if(yn=this.keyframes[bt],Pn=this.keyframes[bt+1],bt===rn-1&&o>=Pn.t-a){yn.h&&(yn=Pn),_e=0;break}if(Pn.t-a>o){_e=bt;break}bt<rn-1?bt+=1:(_e=0,sn=!1)}zn=this.keyframesMetadata[bt]||{};var lr,ar,cr,hr,es,Ur,Dr=Pn.t-a,zr=yn.t-a,rs;if(yn.to){zn.bezierData||(zn.bezierData=bez.buildBezierData(yn.s,Pn.s||yn.e,yn.to,yn.ti));var as=zn.bezierData;if(o>=Dr||o<zr){var os=o>=Dr?as.points.length-1:0;for(ar=as.points[os].point.length,lr=0;lr<ar;lr+=1)b[lr]=as.points[os].point[lr]}else{zn.__fnct?Ur=zn.__fnct:(Ur=BezierFactory.getBezierEasing(yn.o.x,yn.o.y,yn.i.x,yn.i.y,yn.n).get,zn.__fnct=Ur),cr=Ur((o-zr)/(Dr-zr));var ls=as.segmentLength*cr,zs,ho=s.lastFrame<o&&s._lastKeyframeIndex===bt?s._lastAddedLength:0;for(es=s.lastFrame<o&&s._lastKeyframeIndex===bt?s._lastPoint:0,sn=!0,hr=as.points.length;sn;){if(ho+=as.points[es].partialLength,ls===0||cr===0||es===as.points.length-1){for(ar=as.points[es].point.length,lr=0;lr<ar;lr+=1)b[lr]=as.points[es].point[lr];break}else if(ls>=ho&&ls<ho+as.points[es+1].partialLength){for(zs=(ls-ho)/as.points[es+1].partialLength,ar=as.points[es].point.length,lr=0;lr<ar;lr+=1)b[lr]=as.points[es].point[lr]+(as.points[es+1].point[lr]-as.points[es].point[lr])*zs;break}es<hr-1?es+=1:sn=!1}s._lastPoint=es,s._lastAddedLength=ho-as.points[es].partialLength,s._lastKeyframeIndex=bt}}else{var ga,mo,go,yl,Zl;if(rn=yn.s.length,rs=Pn.s||yn.e,this.sh&&yn.h!==1)if(o>=Dr)b[0]=rs[0],b[1]=rs[1],b[2]=rs[2];else if(o<=zr)b[0]=yn.s[0],b[1]=yn.s[1],b[2]=yn.s[2];else{var _d=createQuaternion(yn.s),Ty=createQuaternion(rs),yy=(o-zr)/(Dr-zr);quaternionToEuler(b,slerp(_d,Ty,yy))}else for(bt=0;bt<rn;bt+=1)yn.h!==1&&(o>=Dr?cr=1:o<zr?cr=0:(yn.o.x.constructor===Array?(zn.__fnct||(zn.__fnct=[]),zn.__fnct[bt]?Ur=zn.__fnct[bt]:(ga=yn.o.x[bt]===void 0?yn.o.x[0]:yn.o.x[bt],mo=yn.o.y[bt]===void 0?yn.o.y[0]:yn.o.y[bt],go=yn.i.x[bt]===void 0?yn.i.x[0]:yn.i.x[bt],yl=yn.i.y[bt]===void 0?yn.i.y[0]:yn.i.y[bt],Ur=BezierFactory.getBezierEasing(ga,mo,go,yl).get,zn.__fnct[bt]=Ur)):zn.__fnct?Ur=zn.__fnct:(ga=yn.o.x,mo=yn.o.y,go=yn.i.x,yl=yn.i.y,Ur=BezierFactory.getBezierEasing(ga,mo,go,yl).get,yn.keyframeMetadata=Ur),cr=Ur((o-zr)/(Dr-zr)))),rs=Pn.s||yn.e,Zl=yn.h===1?yn.s[bt]:yn.s[bt]+(rs[bt]-yn.s[bt])*cr,this.propType==="multidimensional"?b[bt]=Zl:b=Zl}return s.lastIndex=_e,b}function slerp(o,s,a){var b=[],_e=o[0],bt=o[1],rn=o[2],sn=o[3],yn=s[0],Pn=s[1],zn=s[2],lr=s[3],ar,cr,hr,es,Ur;return cr=_e*yn+bt*Pn+rn*zn+sn*lr,cr<0&&(cr=-cr,yn=-yn,Pn=-Pn,zn=-zn,lr=-lr),1-cr>1e-6?(ar=Math.acos(cr),hr=Math.sin(ar),es=Math.sin((1-a)*ar)/hr,Ur=Math.sin(a*ar)/hr):(es=1-a,Ur=a),b[0]=es*_e+Ur*yn,b[1]=es*bt+Ur*Pn,b[2]=es*rn+Ur*zn,b[3]=es*sn+Ur*lr,b}function quaternionToEuler(o,s){var a=s[0],b=s[1],_e=s[2],bt=s[3],rn=Math.atan2(2*b*bt-2*a*_e,1-2*b*b-2*_e*_e),sn=Math.asin(2*a*b+2*_e*bt),yn=Math.atan2(2*a*bt-2*b*_e,1-2*a*a-2*_e*_e);o[0]=rn/degToRads,o[1]=sn/degToRads,o[2]=yn/degToRads}function createQuaternion(o){var s=o[0]*degToRads,a=o[1]*degToRads,b=o[2]*degToRads,_e=Math.cos(s/2),bt=Math.cos(a/2),rn=Math.cos(b/2),sn=Math.sin(s/2),yn=Math.sin(a/2),Pn=Math.sin(b/2),zn=_e*bt*rn-sn*yn*Pn,lr=sn*yn*rn+_e*bt*Pn,ar=sn*bt*rn+_e*yn*Pn,cr=_e*yn*rn-sn*bt*Pn;return[lr,ar,cr,zn]}function getValueAtCurrentTime(){var o=this.comp.renderedFrame-this.offsetTime,s=this.keyframes[0].t-this.offsetTime,a=this.keyframes[this.keyframes.length-1].t-this.offsetTime;if(!(o===this._caching.lastFrame||this._caching.lastFrame!==initFrame&&(this._caching.lastFrame>=a&&o>=a||this._caching.lastFrame<s&&o<s))){this._caching.lastFrame>=o&&(this._caching._lastKeyframeIndex=-1,this._caching.lastIndex=0);var b=this.interpolateValue(o,this._caching);this.pv=b}return this._caching.lastFrame=o,this.pv}function setVValue(o){var s;if(this.propType==="unidimensional")s=o*this.mult,mathAbs(this.v-s)>1e-5&&(this.v=s,this._mdf=!0);else for(var a=0,b=this.v.length;a<b;)s=o[a]*this.mult,mathAbs(this.v[a]-s)>1e-5&&(this.v[a]=s,this._mdf=!0),a+=1}function processEffectsSequence(){if(!(this.elem.globalData.frameId===this.frameId||!this.effectsSequence.length)){if(this.lock){this.setVValue(this.pv);return}this.lock=!0,this._mdf=this._isFirstFrame;var o,s=this.effectsSequence.length,a=this.kf?this.pv:this.data.k;for(o=0;o<s;o+=1)a=this.effectsSequence[o](a);this.setVValue(a),this._isFirstFrame=!1,this.lock=!1,this.frameId=this.elem.globalData.frameId}}function addEffect(o){this.effectsSequence.push(o),this.container.addDynamicProperty(this)}function ValueProperty(o,s,a,b){this.propType="unidimensional",this.mult=a||1,this.data=s,this.v=a?s.k*a:s.k,this.pv=s.k,this._mdf=!1,this.elem=o,this.container=b,this.comp=o.comp,this.k=!1,this.kf=!1,this.vel=0,this.effectsSequence=[],this._isFirstFrame=!0,this.getValue=processEffectsSequence,this.setVValue=setVValue,this.addEffect=addEffect}function MultiDimensionalProperty(o,s,a,b){this.propType="multidimensional",this.mult=a||1,this.data=s,this._mdf=!1,this.elem=o,this.container=b,this.comp=o.comp,this.k=!1,this.kf=!1,this.frameId=-1;var _e,bt=s.k.length;for(this.v=createTypedArray("float32",bt),this.pv=createTypedArray("float32",bt),this.vel=createTypedArray("float32",bt),_e=0;_e<bt;_e+=1)this.v[_e]=s.k[_e]*this.mult,this.pv[_e]=s.k[_e];this._isFirstFrame=!0,this.effectsSequence=[],this.getValue=processEffectsSequence,this.setVValue=setVValue,this.addEffect=addEffect}function KeyframedValueProperty(o,s,a,b){this.propType="unidimensional",this.keyframes=s.k,this.keyframesMetadata=[],this.offsetTime=o.data.st,this.frameId=-1,this._caching={lastFrame:initFrame,lastIndex:0,value:0,_lastKeyframeIndex:-1},this.k=!0,this.kf=!0,this.data=s,this.mult=a||1,this.elem=o,this.container=b,this.comp=o.comp,this.v=initFrame,this.pv=initFrame,this._isFirstFrame=!0,this.getValue=processEffectsSequence,this.setVValue=setVValue,this.interpolateValue=interpolateValue,this.effectsSequence=[getValueAtCurrentTime.bind(this)],this.addEffect=addEffect}function KeyframedMultidimensionalProperty(o,s,a,b){this.propType="multidimensional";var _e,bt=s.k.length,rn,sn,yn,Pn;for(_e=0;_e<bt-1;_e+=1)s.k[_e].to&&s.k[_e].s&&s.k[_e+1]&&s.k[_e+1].s&&(rn=s.k[_e].s,sn=s.k[_e+1].s,yn=s.k[_e].to,Pn=s.k[_e].ti,(rn.length===2&&!(rn[0]===sn[0]&&rn[1]===sn[1])&&bez.pointOnLine2D(rn[0],rn[1],sn[0],sn[1],rn[0]+yn[0],rn[1]+yn[1])&&bez.pointOnLine2D(rn[0],rn[1],sn[0],sn[1],sn[0]+Pn[0],sn[1]+Pn[1])||rn.length===3&&!(rn[0]===sn[0]&&rn[1]===sn[1]&&rn[2]===sn[2])&&bez.pointOnLine3D(rn[0],rn[1],rn[2],sn[0],sn[1],sn[2],rn[0]+yn[0],rn[1]+yn[1],rn[2]+yn[2])&&bez.pointOnLine3D(rn[0],rn[1],rn[2],sn[0],sn[1],sn[2],sn[0]+Pn[0],sn[1]+Pn[1],sn[2]+Pn[2]))&&(s.k[_e].to=null,s.k[_e].ti=null),rn[0]===sn[0]&&rn[1]===sn[1]&&yn[0]===0&&yn[1]===0&&Pn[0]===0&&Pn[1]===0&&(rn.length===2||rn[2]===sn[2]&&yn[2]===0&&Pn[2]===0)&&(s.k[_e].to=null,s.k[_e].ti=null));this.effectsSequence=[getValueAtCurrentTime.bind(this)],this.data=s,this.keyframes=s.k,this.keyframesMetadata=[],this.offsetTime=o.data.st,this.k=!0,this.kf=!0,this._isFirstFrame=!0,this.mult=a||1,this.elem=o,this.container=b,this.comp=o.comp,this.getValue=processEffectsSequence,this.setVValue=setVValue,this.interpolateValue=interpolateValue,this.frameId=-1;var zn=s.k[0].s.length;for(this.v=createTypedArray("float32",zn),this.pv=createTypedArray("float32",zn),_e=0;_e<zn;_e+=1)this.v[_e]=initFrame,this.pv[_e]=initFrame;this._caching={lastFrame:initFrame,lastIndex:0,value:createTypedArray("float32",zn)},this.addEffect=addEffect}var PropertyFactory=function(){function o(a,b,_e,bt,rn){b.sid&&(b=a.globalData.slotManager.getProp(b));var sn;if(!b.k.length)sn=new ValueProperty(a,b,bt,rn);else if(typeof b.k[0]=="number")sn=new MultiDimensionalProperty(a,b,bt,rn);else switch(_e){case 0:sn=new KeyframedValueProperty(a,b,bt,rn);break;case 1:sn=new KeyframedMultidimensionalProperty(a,b,bt,rn);break}return sn.effectsSequence.length&&rn.addDynamicProperty(sn),sn}var s={getProp:o};return s}();function DynamicPropertyContainer(){}DynamicPropertyContainer.prototype={addDynamicProperty:function(s){this.dynamicProperties.indexOf(s)===-1&&(this.dynamicProperties.push(s),this.container.addDynamicProperty(this),this._isAnimated=!0)},iterateDynamicProperties:function(){this._mdf=!1;var s,a=this.dynamicProperties.length;for(s=0;s<a;s+=1)this.dynamicProperties[s].getValue(),this.dynamicProperties[s]._mdf&&(this._mdf=!0)},initDynamicPropertyContainer:function(s){this.container=s,this.dynamicProperties=[],this._mdf=!1,this._isAnimated=!1}};var pointPool=function(){function o(){return createTypedArray("float32",2)}return poolFactory(8,o)}();function ShapePath(){this.c=!1,this._length=0,this._maxLength=8,this.v=createSizedArray(this._maxLength),this.o=createSizedArray(this._maxLength),this.i=createSizedArray(this._maxLength)}ShapePath.prototype.setPathData=function(o,s){this.c=o,this.setLength(s);for(var a=0;a<s;)this.v[a]=pointPool.newElement(),this.o[a]=pointPool.newElement(),this.i[a]=pointPool.newElement(),a+=1},ShapePath.prototype.setLength=function(o){for(;this._maxLength<o;)this.doubleArrayLength();this._length=o},ShapePath.prototype.doubleArrayLength=function(){this.v=this.v.concat(createSizedArray(this._maxLength)),this.i=this.i.concat(createSizedArray(this._maxLength)),this.o=this.o.concat(createSizedArray(this._maxLength)),this._maxLength*=2},ShapePath.prototype.setXYAt=function(o,s,a,b,_e){var bt;switch(this._length=Math.max(this._length,b+1),this._length>=this._maxLength&&this.doubleArrayLength(),a){case"v":bt=this.v;break;case"i":bt=this.i;break;case"o":bt=this.o;break;default:bt=[];break}(!bt[b]||bt[b]&&!_e)&&(bt[b]=pointPool.newElement()),bt[b][0]=o,bt[b][1]=s},ShapePath.prototype.setTripleAt=function(o,s,a,b,_e,bt,rn,sn){this.setXYAt(o,s,"v",rn,sn),this.setXYAt(a,b,"o",rn,sn),this.setXYAt(_e,bt,"i",rn,sn)},ShapePath.prototype.reverse=function(){var o=new ShapePath;o.setPathData(this.c,this._length);var s=this.v,a=this.o,b=this.i,_e=0;this.c&&(o.setTripleAt(s[0][0],s[0][1],b[0][0],b[0][1],a[0][0],a[0][1],0,!1),_e=1);var bt=this._length-1,rn=this._length,sn;for(sn=_e;sn<rn;sn+=1)o.setTripleAt(s[bt][0],s[bt][1],b[bt][0],b[bt][1],a[bt][0],a[bt][1],sn,!1),bt-=1;return o},ShapePath.prototype.length=function(){return this._length};var shapePool=function(){function o(){return new ShapePath}function s(_e){var bt=_e._length,rn;for(rn=0;rn<bt;rn+=1)pointPool.release(_e.v[rn]),pointPool.release(_e.i[rn]),pointPool.release(_e.o[rn]),_e.v[rn]=null,_e.i[rn]=null,_e.o[rn]=null;_e._length=0,_e.c=!1}function a(_e){var bt=b.newElement(),rn,sn=_e._length===void 0?_e.v.length:_e._length;for(bt.setLength(sn),bt.c=_e.c,rn=0;rn<sn;rn+=1)bt.setTripleAt(_e.v[rn][0],_e.v[rn][1],_e.o[rn][0],_e.o[rn][1],_e.i[rn][0],_e.i[rn][1],rn);return bt}var b=poolFactory(4,o,s);return b.clone=a,b}();function ShapeCollection(){this._length=0,this._maxLength=4,this.shapes=createSizedArray(this._maxLength)}ShapeCollection.prototype.addShape=function(o){this._length===this._maxLength&&(this.shapes=this.shapes.concat(createSizedArray(this._maxLength)),this._maxLength*=2),this.shapes[this._length]=o,this._length+=1},ShapeCollection.prototype.releaseShapes=function(){var o;for(o=0;o<this._length;o+=1)shapePool.release(this.shapes[o]);this._length=0};var shapeCollectionPool=function(){var o={newShapeCollection:_e,release:bt},s=0,a=4,b=createSizedArray(a);function _e(){var rn;return s?(s-=1,rn=b[s]):rn=new ShapeCollection,rn}function bt(rn){var sn,yn=rn._length;for(sn=0;sn<yn;sn+=1)shapePool.release(rn.shapes[sn]);rn._length=0,s===a&&(b=pooling.double(b),a*=2),b[s]=rn,s+=1}return o}(),ShapePropertyFactory=function(){var o=-999999;function s(Dr,zr,rs){var as=rs.lastIndex,os,ls,zs,ho,ga,mo,go,yl,Zl,_d=this.keyframes;if(Dr<_d[0].t-this.offsetTime)os=_d[0].s[0],zs=!0,as=0;else if(Dr>=_d[_d.length-1].t-this.offsetTime)os=_d[_d.length-1].s?_d[_d.length-1].s[0]:_d[_d.length-2].e[0],zs=!0;else{for(var Ty=as,yy=_d.length-1,by=!0,Al,_f,gy;by&&(Al=_d[Ty],_f=_d[Ty+1],!(_f.t-this.offsetTime>Dr));)Ty<yy-1?Ty+=1:by=!1;if(gy=this.keyframesMetadata[Ty]||{},zs=Al.h===1,as=Ty,!zs){if(Dr>=_f.t-this.offsetTime)yl=1;else if(Dr<Al.t-this.offsetTime)yl=0;else{var El;gy.__fnct?El=gy.__fnct:(El=BezierFactory.getBezierEasing(Al.o.x,Al.o.y,Al.i.x,Al.i.y).get,gy.__fnct=El),yl=El((Dr-(Al.t-this.offsetTime))/(_f.t-this.offsetTime-(Al.t-this.offsetTime)))}ls=_f.s?_f.s[0]:Al.e[0]}os=Al.s[0]}for(mo=zr._length,go=os.i[0].length,rs.lastIndex=as,ho=0;ho<mo;ho+=1)for(ga=0;ga<go;ga+=1)Zl=zs?os.i[ho][ga]:os.i[ho][ga]+(ls.i[ho][ga]-os.i[ho][ga])*yl,zr.i[ho][ga]=Zl,Zl=zs?os.o[ho][ga]:os.o[ho][ga]+(ls.o[ho][ga]-os.o[ho][ga])*yl,zr.o[ho][ga]=Zl,Zl=zs?os.v[ho][ga]:os.v[ho][ga]+(ls.v[ho][ga]-os.v[ho][ga])*yl,zr.v[ho][ga]=Zl}function a(){var Dr=this.comp.renderedFrame-this.offsetTime,zr=this.keyframes[0].t-this.offsetTime,rs=this.keyframes[this.keyframes.length-1].t-this.offsetTime,as=this._caching.lastFrame;return as!==o&&(as<zr&&Dr<zr||as>rs&&Dr>rs)||(this._caching.lastIndex=as<Dr?this._caching.lastIndex:0,this.interpolateShape(Dr,this.pv,this._caching)),this._caching.lastFrame=Dr,this.pv}function b(){this.paths=this.localShapeCollection}function _e(Dr,zr){if(Dr._length!==zr._length||Dr.c!==zr.c)return!1;var rs,as=Dr._length;for(rs=0;rs<as;rs+=1)if(Dr.v[rs][0]!==zr.v[rs][0]||Dr.v[rs][1]!==zr.v[rs][1]||Dr.o[rs][0]!==zr.o[rs][0]||Dr.o[rs][1]!==zr.o[rs][1]||Dr.i[rs][0]!==zr.i[rs][0]||Dr.i[rs][1]!==zr.i[rs][1])return!1;return!0}function bt(Dr){_e(this.v,Dr)||(this.v=shapePool.clone(Dr),this.localShapeCollection.releaseShapes(),this.localShapeCollection.addShape(this.v),this._mdf=!0,this.paths=this.localShapeCollection)}function rn(){if(this.elem.globalData.frameId!==this.frameId){if(!this.effectsSequence.length){this._mdf=!1;return}if(this.lock){this.setVValue(this.pv);return}this.lock=!0,this._mdf=!1;var Dr;this.kf?Dr=this.pv:this.data.ks?Dr=this.data.ks.k:Dr=this.data.pt.k;var zr,rs=this.effectsSequence.length;for(zr=0;zr<rs;zr+=1)Dr=this.effectsSequence[zr](Dr);this.setVValue(Dr),this.lock=!1,this.frameId=this.elem.globalData.frameId}}function sn(Dr,zr,rs){this.propType="shape",this.comp=Dr.comp,this.container=Dr,this.elem=Dr,this.data=zr,this.k=!1,this.kf=!1,this._mdf=!1;var as=rs===3?zr.pt.k:zr.ks.k;this.v=shapePool.clone(as),this.pv=shapePool.clone(this.v),this.localShapeCollection=shapeCollectionPool.newShapeCollection(),this.paths=this.localShapeCollection,this.paths.addShape(this.v),this.reset=b,this.effectsSequence=[]}function yn(Dr){this.effectsSequence.push(Dr),this.container.addDynamicProperty(this)}sn.prototype.interpolateShape=s,sn.prototype.getValue=rn,sn.prototype.setVValue=bt,sn.prototype.addEffect=yn;function Pn(Dr,zr,rs){this.propType="shape",this.comp=Dr.comp,this.elem=Dr,this.container=Dr,this.offsetTime=Dr.data.st,this.keyframes=rs===3?zr.pt.k:zr.ks.k,this.keyframesMetadata=[],this.k=!0,this.kf=!0;var as=this.keyframes[0].s[0].i.length;this.v=shapePool.newElement(),this.v.setPathData(this.keyframes[0].s[0].c,as),this.pv=shapePool.clone(this.v),this.localShapeCollection=shapeCollectionPool.newShapeCollection(),this.paths=this.localShapeCollection,this.paths.addShape(this.v),this.lastFrame=o,this.reset=b,this._caching={lastFrame:o,lastIndex:0},this.effectsSequence=[a.bind(this)]}Pn.prototype.getValue=rn,Pn.prototype.interpolateShape=s,Pn.prototype.setVValue=bt,Pn.prototype.addEffect=yn;var zn=function(){var Dr=roundCorner;function zr(rs,as){this.v=shapePool.newElement(),this.v.setPathData(!0,4),this.localShapeCollection=shapeCollectionPool.newShapeCollection(),this.paths=this.localShapeCollection,this.localShapeCollection.addShape(this.v),this.d=as.d,this.elem=rs,this.comp=rs.comp,this.frameId=-1,this.initDynamicPropertyContainer(rs),this.p=PropertyFactory.getProp(rs,as.p,1,0,this),this.s=PropertyFactory.getProp(rs,as.s,1,0,this),this.dynamicProperties.length?this.k=!0:(this.k=!1,this.convertEllToPath())}return zr.prototype={reset:b,getValue:function(){this.elem.globalData.frameId!==this.frameId&&(this.frameId=this.elem.globalData.frameId,this.iterateDynamicProperties(),this._mdf&&this.convertEllToPath())},convertEllToPath:function(){var as=this.p.v[0],os=this.p.v[1],ls=this.s.v[0]/2,zs=this.s.v[1]/2,ho=this.d!==3,ga=this.v;ga.v[0][0]=as,ga.v[0][1]=os-zs,ga.v[1][0]=ho?as+ls:as-ls,ga.v[1][1]=os,ga.v[2][0]=as,ga.v[2][1]=os+zs,ga.v[3][0]=ho?as-ls:as+ls,ga.v[3][1]=os,ga.i[0][0]=ho?as-ls*Dr:as+ls*Dr,ga.i[0][1]=os-zs,ga.i[1][0]=ho?as+ls:as-ls,ga.i[1][1]=os-zs*Dr,ga.i[2][0]=ho?as+ls*Dr:as-ls*Dr,ga.i[2][1]=os+zs,ga.i[3][0]=ho?as-ls:as+ls,ga.i[3][1]=os+zs*Dr,ga.o[0][0]=ho?as+ls*Dr:as-ls*Dr,ga.o[0][1]=os-zs,ga.o[1][0]=ho?as+ls:as-ls,ga.o[1][1]=os+zs*Dr,ga.o[2][0]=ho?as-ls*Dr:as+ls*Dr,ga.o[2][1]=os+zs,ga.o[3][0]=ho?as-ls:as+ls,ga.o[3][1]=os-zs*Dr}},extendPrototype([DynamicPropertyContainer],zr),zr}(),lr=function(){function Dr(zr,rs){this.v=shapePool.newElement(),this.v.setPathData(!0,0),this.elem=zr,this.comp=zr.comp,this.data=rs,this.frameId=-1,this.d=rs.d,this.initDynamicPropertyContainer(zr),rs.sy===1?(this.ir=PropertyFactory.getProp(zr,rs.ir,0,0,this),this.is=PropertyFactory.getProp(zr,rs.is,0,.01,this),this.convertToPath=this.convertStarToPath):this.convertToPath=this.convertPolygonToPath,this.pt=PropertyFactory.getProp(zr,rs.pt,0,0,this),this.p=PropertyFactory.getProp(zr,rs.p,1,0,this),this.r=PropertyFactory.getProp(zr,rs.r,0,degToRads,this),this.or=PropertyFactory.getProp(zr,rs.or,0,0,this),this.os=PropertyFactory.getProp(zr,rs.os,0,.01,this),this.localShapeCollection=shapeCollectionPool.newShapeCollection(),this.localShapeCollection.addShape(this.v),this.paths=this.localShapeCollection,this.dynamicProperties.length?this.k=!0:(this.k=!1,this.convertToPath())}return Dr.prototype={reset:b,getValue:function(){this.elem.globalData.frameId!==this.frameId&&(this.frameId=this.elem.globalData.frameId,this.iterateDynamicProperties(),this._mdf&&this.convertToPath())},convertStarToPath:function(){var rs=Math.floor(this.pt.v)*2,as=Math.PI*2/rs,os=!0,ls=this.or.v,zs=this.ir.v,ho=this.os.v,ga=this.is.v,mo=2*Math.PI*ls/(rs*2),go=2*Math.PI*zs/(rs*2),yl,Zl,_d,Ty,yy=-Math.PI/2;yy+=this.r.v;var by=this.data.d===3?-1:1;for(this.v._length=0,yl=0;yl<rs;yl+=1){Zl=os?ls:zs,_d=os?ho:ga,Ty=os?mo:go;var Al=Zl*Math.cos(yy),_f=Zl*Math.sin(yy),gy=Al===0&&_f===0?0:_f/Math.sqrt(Al*Al+_f*_f),El=Al===0&&_f===0?0:-Al/Math.sqrt(Al*Al+_f*_f);Al+=+this.p.v[0],_f+=+this.p.v[1],this.v.setTripleAt(Al,_f,Al-gy*Ty*_d*by,_f-El*Ty*_d*by,Al+gy*Ty*_d*by,_f+El*Ty*_d*by,yl,!0),os=!os,yy+=as*by}},convertPolygonToPath:function(){var rs=Math.floor(this.pt.v),as=Math.PI*2/rs,os=this.or.v,ls=this.os.v,zs=2*Math.PI*os/(rs*4),ho,ga=-Math.PI*.5,mo=this.data.d===3?-1:1;for(ga+=this.r.v,this.v._length=0,ho=0;ho<rs;ho+=1){var go=os*Math.cos(ga),yl=os*Math.sin(ga),Zl=go===0&&yl===0?0:yl/Math.sqrt(go*go+yl*yl),_d=go===0&&yl===0?0:-go/Math.sqrt(go*go+yl*yl);go+=+this.p.v[0],yl+=+this.p.v[1],this.v.setTripleAt(go,yl,go-Zl*zs*ls*mo,yl-_d*zs*ls*mo,go+Zl*zs*ls*mo,yl+_d*zs*ls*mo,ho,!0),ga+=as*mo}this.paths.length=0,this.paths[0]=this.v}},extendPrototype([DynamicPropertyContainer],Dr),Dr}(),ar=function(){function Dr(zr,rs){this.v=shapePool.newElement(),this.v.c=!0,this.localShapeCollection=shapeCollectionPool.newShapeCollection(),this.localShapeCollection.addShape(this.v),this.paths=this.localShapeCollection,this.elem=zr,this.comp=zr.comp,this.frameId=-1,this.d=rs.d,this.initDynamicPropertyContainer(zr),this.p=PropertyFactory.getProp(zr,rs.p,1,0,this),this.s=PropertyFactory.getProp(zr,rs.s,1,0,this),this.r=PropertyFactory.getProp(zr,rs.r,0,0,this),this.dynamicProperties.length?this.k=!0:(this.k=!1,this.convertRectToPath())}return Dr.prototype={convertRectToPath:function(){var rs=this.p.v[0],as=this.p.v[1],os=this.s.v[0]/2,ls=this.s.v[1]/2,zs=bmMin(os,ls,this.r.v),ho=zs*(1-roundCorner);this.v._length=0,this.d===2||this.d===1?(this.v.setTripleAt(rs+os,as-ls+zs,rs+os,as-ls+zs,rs+os,as-ls+ho,0,!0),this.v.setTripleAt(rs+os,as+ls-zs,rs+os,as+ls-ho,rs+os,as+ls-zs,1,!0),zs!==0?(this.v.setTripleAt(rs+os-zs,as+ls,rs+os-zs,as+ls,rs+os-ho,as+ls,2,!0),this.v.setTripleAt(rs-os+zs,as+ls,rs-os+ho,as+ls,rs-os+zs,as+ls,3,!0),this.v.setTripleAt(rs-os,as+ls-zs,rs-os,as+ls-zs,rs-os,as+ls-ho,4,!0),this.v.setTripleAt(rs-os,as-ls+zs,rs-os,as-ls+ho,rs-os,as-ls+zs,5,!0),this.v.setTripleAt(rs-os+zs,as-ls,rs-os+zs,as-ls,rs-os+ho,as-ls,6,!0),this.v.setTripleAt(rs+os-zs,as-ls,rs+os-ho,as-ls,rs+os-zs,as-ls,7,!0)):(this.v.setTripleAt(rs-os,as+ls,rs-os+ho,as+ls,rs-os,as+ls,2),this.v.setTripleAt(rs-os,as-ls,rs-os,as-ls+ho,rs-os,as-ls,3))):(this.v.setTripleAt(rs+os,as-ls+zs,rs+os,as-ls+ho,rs+os,as-ls+zs,0,!0),zs!==0?(this.v.setTripleAt(rs+os-zs,as-ls,rs+os-zs,as-ls,rs+os-ho,as-ls,1,!0),this.v.setTripleAt(rs-os+zs,as-ls,rs-os+ho,as-ls,rs-os+zs,as-ls,2,!0),this.v.setTripleAt(rs-os,as-ls+zs,rs-os,as-ls+zs,rs-os,as-ls+ho,3,!0),this.v.setTripleAt(rs-os,as+ls-zs,rs-os,as+ls-ho,rs-os,as+ls-zs,4,!0),this.v.setTripleAt(rs-os+zs,as+ls,rs-os+zs,as+ls,rs-os+ho,as+ls,5,!0),this.v.setTripleAt(rs+os-zs,as+ls,rs+os-ho,as+ls,rs+os-zs,as+ls,6,!0),this.v.setTripleAt(rs+os,as+ls-zs,rs+os,as+ls-zs,rs+os,as+ls-ho,7,!0)):(this.v.setTripleAt(rs-os,as-ls,rs-os+ho,as-ls,rs-os,as-ls,1,!0),this.v.setTripleAt(rs-os,as+ls,rs-os,as+ls-ho,rs-os,as+ls,2,!0),this.v.setTripleAt(rs+os,as+ls,rs+os-ho,as+ls,rs+os,as+ls,3,!0)))},getValue:function(){this.elem.globalData.frameId!==this.frameId&&(this.frameId=this.elem.globalData.frameId,this.iterateDynamicProperties(),this._mdf&&this.convertRectToPath())},reset:b},extendPrototype([DynamicPropertyContainer],Dr),Dr}();function cr(Dr,zr,rs){var as;if(rs===3||rs===4){var os=rs===3?zr.pt:zr.ks,ls=os.k;ls.length?as=new Pn(Dr,zr,rs):as=new sn(Dr,zr,rs)}else rs===5?as=new ar(Dr,zr):rs===6?as=new zn(Dr,zr):rs===7&&(as=new lr(Dr,zr));return as.k&&Dr.addDynamicProperty(as),as}function hr(){return sn}function es(){return Pn}var Ur={};return Ur.getShapeProp=cr,Ur.getConstructorFunction=hr,Ur.getKeyframedConstructorFunction=es,Ur}();/*!
|
|
8999
8999
|
Transformation Matrix v2.0
|
|
9000
9000
|
(c) Epistemex 2014-2015
|
|
@@ -9014,7 +9014,7 @@ b.goToAndStop(es-b.firstFrame-1,!0)}hr.type==="loop"&&(zn===null||zn!==hr.frames
|
|
|
9014
9014
|
`:kI=`The following items are unavailable and will not be added to your cart:
|
|
9015
9015
|
`,OA(kI+HR)});function $R(TI){_e(TI)}function ZI(){sn(!rn)}function RP(){cr(!1)}function EP(){Pn(!1),uiSceneStore.getState().CORE_API.closeContextMenu()}function gP(){lr(!1),uiSceneStore.getState().CORE_API.exitHotspot()}const rP=reactExports.useCallback(()=>{navigator.clipboard.writeText(Ur),VA.alert({alertMsg:"Link copied to the clipboard",alertTime:4e3,alertType:"success",alertLabel:"Copied",alertId:"linkCopied"})},[Ur]),cP=reactExports.useCallback(()=>{let TI=0;return $A.map(kI=>TI+=kI.count),TI},[$A]);return jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[eC&&yy&&jsxRuntimeExports.jsx(ContextMenu,{selectedItemData:yy,contextMenuOpen:bA,dismissContextMenuDrawer:EP}),jsxRuntimeExports.jsxs("div",{className:"overlayUI",children:[jsxRuntimeExports.jsx("div",{id:"view-in-your-space-slot",ref:Ty}),jsxRuntimeExports.jsx(UIModal,{open:hr,setOpen:es,heading:VA.sceneSettings.textSettings.shareModalHeading??"Share Configuration",inputValue:Ur,buttonText:jsxRuntimeExports.jsx("img",{alt:"Copy",src:PUBLIC_DESIGN_ASSETS_ENDPOINT$1+"/Icon/Copy.svg"}),dualOptions:!1,modalText:"Your design has been saved via the unique link below.",shareModal:!0,formFieldExists:!0,onSubmit:()=>{rP(),es(!1)},loading:BA}),jsxRuntimeExports.jsx(UIModal,{open:zr,setOpen:rs,heading:"Are you sure you want to restart?",buttonText:"Restart",dualOptions:!0,modalText:"All changes will be lost.",formFieldExists:!1,onSubmit:()=>VA.restartScene()}),jsxRuntimeExports.jsx(UIModal,{zIndex:31,open:zs,setOpen:ho,heading:"Are you sure you want to remove?",buttonText:"Remove",dualOptions:!0,modalText:lA,formFieldExists:!1,onSubmit:async()=>{await VA.removeSelectedItem(),EP()}}),jsxRuntimeExports.jsx(UIModal,{open:os,setOpen:ls,heading:"Are you sure you want to load preconfiguration?",buttonText:"Confirm",dualOptions:!0,modalText:"All changes will be lost.",formFieldExists:!1,onSubmit:()=>VA.loadSceneFromConfigurationID(as,!1)}),jsxRuntimeExports.jsx(UIModal,{zIndex:31,open:ga,setOpen:mo,heading:"Are you sure you want to move?",buttonText:"Move",dualOptions:!0,modalText:My,formFieldExists:!1,onSubmit:async()=>{await VA.completeItemDrop()},onCancel:()=>{VA.revertItemDrop()}}),jsxRuntimeExports.jsx(UIModal,{zIndex:31,open:go,setOpen:yl,heading:"Items Out Of Stock!",buttonText:"Confirm",dualOptions:!0,modalText:Fy,formFieldExists:!1,onSubmit:async()=>{await VA.checkout(!0)}}),jsxRuntimeExports.jsx(HotspotDrawer,{open:zn,dataObject:Al,dismissDrawer:gP}),jsxRuntimeExports.jsx(InfoDrawer,{open:ar,dismissDrawer:RP})]}),jsxRuntimeExports.jsxs("div",{className:`leftShell ${b===!0?"disabledleftShell":""} ${rn===!1?"expanded-left-shell":""}`,id:"_leftShell",children:[(nE||Iy||vI||iE||XA||lC)&&jsxRuntimeExports.jsx(UtilityMenu,{utilityMenuVisible:cC,dimensionsVisible:oC,viewInYourSpaceMenuBtnVisible:nC,saveMenuBtnVisible:nE,shareMenuBtnVisible:Iy,dimensionsMenuBtnVisible:vI,restartMenuBtnVisible:iE,instructionsMenuBtnVisible:lC,hotspotsMenuBtnVisible:XA,hotspotsVisibility:sE,handleRestartButtonClick:FR,handleShareButtonTrigger:GI,handleInstructionButtonClick:CI,handleDimensionClick:DI,handleShowHotspots:CC,position:"bottom",CORE_API:VA}),jsxRuntimeExports.jsx("div",{id:"epigraph-configurator-core-slot",ref:_d})]}),jsxRuntimeExports.jsx(InstructionModal,{showOnStartup:LC,ref:bI}),b===!1&&jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx(PreviewCartMobile,{previewCartModalOpen:YA,togglePreviewCartModal:WA,PUBLIC_DESIGN_ASSETS_ENDPOINT:PUBLIC_DESIGN_ASSETS_ENDPOINT$1,cart:$A}),jsxRuntimeExports.jsx(SideMenu,{configuratorWcRef:o,sideMenuOpen:rn,sideMenuRef:Zl,toggleSideMenuOpen:ZI,PUBLIC_DESIGN_ASSETS_ENDPOINT:PUBLIC_DESIGN_ASSETS_ENDPOINT$1,handleSideButtonClick:$R,useTabIcon:gy,GENERIC_PROJECT_ASSET_DATA_ROOT_URL:GENERIC_PROJECT_ASSET_DATA_ROOT_URL$1,sideMenuState:bt,togglePreviewCartModal:WA,getItemCount:cP,currency:fC,numberWithCommas})]})]})};function StyleManager({containerId:o,localStyles:s,dynamicStylesId:a,setCSSLoaded:b}){const _e=reactExports.useRef(0),[bt,rn]=reactExports.useState(!1),sn=productDataStore$1(lr=>lr.assetsData),yn=coreSceneStore(lr=>lr.CORE_API),[Pn,zn]=reactExports.useState([]);return reactExports.useEffect(()=>{if(!yn||sn===void 0)return;let lr;sn.hasOwnProperty(a)&&(lr=sn[a]);let ar=s;if(_e.current=ar.length,lr){for(const cr of lr)if(cr&&cr?.enabled===!0&&!cr.global&&ar.push(cr),cr.global===!0){const hr=`dynamic-${cr.id}`;if(!document.querySelector(`#${hr}`)){const es=document.createElement("link");es.href=yn.getResolvedAssetUrl(cr.url),es.id=hr,es.rel="stylesheet",es.type="text/css",document.body.appendChild(es)}}}zn(ar)},[sn,yn]),reactExports.useEffect(()=>{!yn||Pn.length<=0||_e.current===Pn.length&&b(!0)},[bt,Pn,yn]),jsxRuntimeExports.jsx("div",{id:o,children:Pn&&Pn.map(lr=>jsxRuntimeExports.jsx("div",{children:lr.contents?jsxRuntimeExports.jsx("style",{id:lr.id,children:lr.contents},lr.id):jsxRuntimeExports.jsx("link",{href:yn.getResolvedAssetUrl(lr.url),id:`dynamic-${lr.id}`,rel:"stylesheet",type:"text/css",onLoad:()=>{lr.loaded=!0,_e.current+=1,rn(!bt)}},lr.id)},`styleContainer-${lr.id}`))},o)}const StyleVariables=`*{--primary-color: #e52438;--secondary-color: #e52438;--visited-color: #949494;--brand-dark: #333;--font-family: "Inter", helvetica, sans-serif;--hotspot-inner-circle-border-color: #e52438;--hotspot-active-inner-circle-border-color: var(--brand-dark);--hotspot-button-background-color: white;--hotspot-button-border-color: #e52438;--product-tour-dot-background-color: #000;--product-tour-current-dot-background-color: white;--tabs-height: 3.25rem;--tab-button-padding: 0 0 0 0;--tab-button-container-backgroundColor: #fff;--tab-button-hover-container-backgroundColor: #fff;--tab-button-background-color: #ffffff00;--tab-button-hover-background-color: #fff;--tab-button-text-color: var(--brand-dark);--tab-button-hover-text-color: var(--brand-dark);--tab-button-underline: var(--brand-dark);--tabs-border-color: transparent;--review-cart-panel-background-color: var(--brand-dark);--product-feature-border-color: #f1f1f1;--item-card-box-shadow: 0px 2px 8px rgb(0 0 0 / 10%);--item-card-border-radius: .6rem;--item-card-background-coolor: #fff;--info-dark: #2e6cdf;--info-light: #d3e0f8;--warn-dark: #e2b236;--warn-light: #f9eed2;--error-dark: #d0342c;--error-light: #f6d7d5;--success-dark: #65bc6c;--success-light: #dbf0dd;--view-in-your-space-done-button-bg-color: var(--primary-color);--view-in-your-space-done-button-hover-bg-color: transparent;--view-in-your-space-done-button-hover-color: var(--primary-color)}
|
|
9016
9016
|
`,GenericStyles$1=`@import"https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap";*{box-sizing:border-box;font-family:var(--font-family)}epigraph-configurator{overflow-anchor:none}#epigraph-configurator-core-slot{width:100%;height:100%;position:relative;overflow:hidden}html,#root{width:100%;height:100%;margin:0;padding:0;overflow:hidden;display:flex;align-items:center;justify-content:space-evenly;align-content:center;flex-direction:row}.configuratorParentDiv{display:flex;width:100%;height:100%;justify-content:center;align-items:center}#dragImgElRef{opacity:0;position:absolute;z-index:1000;width:3rem;height:3rem;pointer-events:none;border-radius:.6rem;background:white;padding:.3rem}@media only screen and (orientation: portrait){#dragImgElRef{opacity:0;position:absolute;z-index:1000;width:6rem;height:6rem;pointer-events:none;border-radius:.6rem;background:white;padding:.3rem}}.loading{color:var(--primary-color, #000)}.contentDisabled{opacity:0;pointer-events:none}.uiContainer{position:relative;width:100%;height:100%;display:flex;justify-content:center;align-items:center;overflow:hidden}.mainCanvas{background:white}.annotation{cursor:pointer;outline:none;border:none;font-size:8px;font-weight:300;background:black;color:#f0f0f0;padding:2px 10px;border-radius:20px;letter-spacing:1px;display:flex;justify-content:center;align-items:center;gap:5px}.annotation:hover{opacity:.8}.content{transform:translate3d(50%,0,0);text-align:left;background:#202035;color:#fff;padding:10px 15px;border-radius:5px}.ItemsParent{position:absolute;right:0;bottom:0;background-color:#e0e0e0ee;margin:5px;border-radius:15%}.Item{width:75px;height:75px;padding:15px;cursor:grab;user-drag:none;-webkit-user-drag:none;user-select:none;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.Item:hover{transform:scale(1.1)}.cursorImg{position:absolute;top:0;left:0;opacity:0;width:0px;height:0px;pointer-events:none}.heading{font-size:2rem;padding:1rem;font-weight:700}.description{font-size:1rem;padding:0rem 1rem}.overlayUI{width:100%;height:100%;padding:0;position:absolute;display:flex;align-items:center;justify-content:center;align-content:center;flex-direction:row;box-shadow:4px 4px 24px #00000014}.shellCanvas{width:100%;height:85%;position:relative;border-radius:12px 12px 0 0}.shellSideMenu{width:30%;height:100%}.ignore{pointer-events:none}.interactable{pointer-events:all}.arButton{position:absolute;bottom:3vh;left:2vh}.sideMenu{width:31%;height:100%;background:#fff;display:flex;flex-direction:column;align-items:flex-start;justify-content:space-between;align-content:center;min-width:27.5rem;max-width:27.5rem;filter:drop-shadow(-4px 4px 12px rgba(0,0,0,.05));position:relative}.desktopSideMenu{width:100%;height:100%;position:relative}.sideMenuTabs{width:100%;height:5rem;display:flex;justify-content:center;align-items:center;gap:0px;box-shadow:-4px 4px 8px #0000000d;position:relative;z-index:1;border-bottom:2px solid var(--tabs-border-color)}.sideMenuTabs .button{display:flex;align-items:center;justify-content:center;flex-direction:column;font-weight:600;color:var(--brand-dark);min-width:33.33%;opacity:1;text-transform:uppercase;padding:var(--tab-button-padding);font-size:1rem;height:100%;background:var(--tab-button-container-background-color);border-left:2px solid var(--tabs-border-color);border-right:2px solid var(--tabs-border-color)}.sideMenuTabs .button:nth-child(2){border-left:none;border-right:none}.sideMenuTabs .button .icon,.sideMenuTabs .button span{opacity:.7}.sideMenuTabs .button span{padding:.5rem 2rem;transition:.1s ease;background:var(--tab-button-background-color)}.activeSideMenuTab .icon,.activeSideMenuTab span{opacity:1!important}.sideMenuTabs .button:hover{border-bottom:1px solid var(--tab-button-underline)}.sideMenuTabs .button:hover span,.activeSideMenuTab span{opacity:1;background:var(--tab-button-hover-background-color)!important;color:var(--tab-button-hover-text-color)}.activeSideMenuTab{border-bottom:2px solid var(--tab-button-underline)!important}.sideMenuTabs .button .icon{width:22px;margin-bottom:.5rem}.sideMenuContent{height:calc(100% - 9rem);width:100%;background:#fff;position:absolute;top:5rem;left:0}.leftShell{height:100%;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;align-content:center;position:relative;min-width:50%;width:100%;z-index:2}.disabledleftShell{width:100%}.shellCanvasContainerParent{display:flex;height:100%;align-items:center;position:absolute;z-index:5;top:0;left:0}.shellCanvasContainerParent#bottom{height:auto;width:100%;top:auto;bottom:0;justify-content:center}.shellCanvasContainerParent#right{height:100%;left:auto;top:0;right:0}.shellCanvasContainerParent#top{height:auto;width:100%;top:0;justify-content:center}.shellCanvasContainer{box-shadow:4px 4px 12px #0000000d;border-radius:2px;padding:1rem 1rem 1rem 0px;display:flex;flex-direction:column;gap:1.125rem;background:white;transition:.25s ease-in-out}.shellCanvasContainerParent#bottom .shellCanvasContainer{gap:.75rem;flex-direction:row;justify-content:center;align-items:center;box-shadow:0 -4px 12px #0000000d}.shellCanvasContainerParent#right .shellCanvasContainer{box-shadow:-4px 0 12px #0000000d}.shellCanvasContainerParent#top .shellCanvasContainer{gap:.75rem;flex-direction:row;justify-content:center;align-items:center;box-shadow:0 4px 12px #0000000d}.shellCanvasContainerInactive{opacity:0;pointer-events:none}.shellCanvasContainerInactive .shellButtonContainer{pointer-events:none}.shellButtonContainer{margin-left:1rem;cursor:pointer;pointer-events:all;border-left:1px solid #fff;position:relative}.shellCanvasContainerParent#bottom .shellButtonContainer,.shellCanvasContainerParent#top .shellButtonContainer{display:flex;flex-direction:column;justify-content:center;align-items:center}.shellButtonContainer .buttonContent{background:#fff;transition:.2s all ease;-webkit-transition:.2s all ease;min-width:2.5rem;max-width:2.5rem;min-height:2.5rem;max-height:2.5rem;display:flex;flex-direction:column;justify-content:center;align-items:center;border-radius:50%}.shellButtonContainer .buttonContent span{display:none}.shellButtonContainer:hover .buttonContent{background:#f1f1f1}.shellButtonContainer.active{border-left:1px solid var(--brand-dark)}.shellCanvasContainerParent#bottom .shellButtonContainer.active,.shellCanvasContainerParent#top .shellButtonContainer.active{border-left:none}.shellCanvasContainerParent#right .shellButtonContainer.active{border-left:none;border-right:1px solid var(--brand-dark)}.shellButtonContainer.active .buttonContent{background:#f1f1f1}.shellButtonContainer img{width:1.375rem}.shellButtonContainer span{font-size:.6875rem;color:#333}.shellButtonContainer .hoverDescriptor{position:absolute;border-radius:1px;display:flex;justify-content:center;transition:.2s all ease;-webkit-transition:.2s all ease;opacity:0;pointer-events:none;top:calc(50% - .5625rem);left:calc(100% + 1rem);padding:.25rem .5rem;background:rgba(0,0,0,.6)}.shellCanvasContainerParent#bottom .shellButtonContainer .hoverDescriptor{top:-2rem;left:auto}.shellCanvasContainerParent#right .hoverDescriptor{right:calc(100% + 1rem);left:auto}.shellCanvasContainerParent#top .shellButtonContainer .hoverDescriptor{top:auto;bottom:-2rem;left:auto}.shellButtonContainer:hover .hoverDescriptor{opacity:1}.shellButtonContainer .hoverDescriptor span{color:#fff;font-size:11px;white-space:nowrap}.bottomBar{background-color:var(--brand-dark);height:4rem;width:100%;display:flex;padding:1vh;justify-content:flex-end;align-items:center;bottom:0;left:0;min-height:4rem;position:absolute;z-index:5}.bottomBar.right{justify-content:space-between;padding:.5rem 24px;border-radius:12px 12px 0 0}.bottomBar:hover{background-color:#1f1f1f}.bottomBar .cartButton{position:relative}.bottomBar .reviewButton{color:#fff;margin-right:12px;font-size:18px}.bottomBar div{font-size:1.125rem;font-weight:700;color:#fff;text-transform:uppercase}.bottomBar .cartNumber{position:relative;margin-left:.5rem;padding:.5rem;background:var(--primary-color);color:#fff;border-radius:50%;width:2rem;height:2rem;display:flex;justify-content:center;align-items:center}.bottomBar .bottomBarChildDiv{display:flex;align-items:center}.bottomBar .reviewButtonParentDiv{display:flex;align-items:center;color:#fff}.button{cursor:pointer;font-weight:700}.leftBottomBarButton{color:#fff;margin:1vh;width:80px;padding:12px;font-size:14px;border:2px solid #ccc!important;text-align:center;border-radius:4px}*{scrollbar-width:8px;scrollbar-color:var(--primary-color) transparent}*::-webkit-scrollbar{width:8px;height:3px;background-color:#c4c4c426}*::-webkit-scrollbar-track{background:transparent}*::-webkit-scrollbar-thumb{background-color:#c4c4c4;border-radius:0;border:none}.shellCanvasTopOptions{position:absolute;top:2rem;right:2rem}.shellCanvasBottomOptions{position:absolute;right:2rem;bottom:2rem;display:flex;flex-direction:column;justify-content:flex-end;z-index:4}.shellCanvasBottomOptions img:nth-child(1){margin-bottom:1rem}.hotspotDrawer .drawerContent{padding:2rem}.hotspotDrawer h2{text-transform:uppercase;font-weight:700}.uiModals{z-index:3}[aria-hidden=true]{pointer-events:none}.uiModal{position:fixed;z-index:7;width:100%;height:100%;top:0;left:0;display:flex;justify-content:center;align-items:center;opacity:0;pointer-events:none;transition:.2s ease;-webkit-transition:.2s ease}.uiModal.open{opacity:1;pointer-events:all}.uiModal .modalOverlay{background:rgba(51,51,51,.4);position:absolute;top:0;left:0;width:100%;height:100%;display:none}.uiModal.open .modalOverlay{display:block}.uiModal .modalDialog{background:#fff;width:90%;max-width:27.5rem;padding:3rem 2rem 2rem;border-radius:6px;position:relative;z-index:8;display:flex;flex-direction:column;justify-content:center;align-items:flex-start}.uiModal .modalText{white-space:pre-wrap;font-size:.75rem;font-weight:300;color:#222;margin-bottom:1rem}.uiModal .modalDialog .modalHeading{font-size:1.5rem;font-weight:700;color:var(--brand-dark);text-transform:capitalize;margin:0;margin-bottom:2.25rem}.uiModal .modalDialog input{font-weight:300;color:var(--brand-dark);border:.5px solid var(--brand-dark);border-radius:2px;width:100%;height:100%}.uiModal .modalDialog button{border-radius:2px;background:var(--primary-color);color:#fff;text-align:center;font-size:.875rem;font-weight:700;padding:.75rem 1rem;border:2px solid black;box-shadow:none;margin:0;margin-top:2.25rem;cursor:pointer;width:100%;transition:.5s}.uiModal .modalDialog button:hover{color:#000;background-color:#fff}.shareModal{display:flex;width:100%;height:3rem;align-items:center;justify-content:center}.noShareModal{width:100%}.shareModalChildDiv,.shareModalLoaderImg{height:100%}.uiModal .shareModal button{text-transform:uppercase;right:.25rem;margin:0;top:.25rem;font-size:1rem;padding:0;width:20%;height:100%;display:flex;justify-content:center;align-items:center}.uiModal .shareModal button img{width:1.75rem;filter:invert(100%) sepia(100%) saturate(2%) hue-rotate(188deg) brightness(101%)}.uiModal .shareModal button:hover img{filter:unset}.uiModal .modalDialog .modalCloseContainer{width:100%;display:flex;justify-content:flex-end;position:absolute;right:26px;top:1rem}.uiModal .modalDialog .modalCloseContainer button{cursor:pointer;outline:none;background:transparent;border:none;margin:0;padding:0;width:auto}.uiModal .modalDialog .modalCloseContainer button img{width:1.75rem}.removeAllColorOverridesButton{cursor:pointer;margin-bottom:1rem;width:100%;height:44px;font-family:var(--font-family);font-weight:700;background-color:transparent;border:solid 1px var(--brand-dark);color:var(--brand-dark);border-radius:3px;transition:.2s}.removeAllColorOverridesButton:hover{background-color:var(--brand-dark);color:#fff;transition:.25s}.removeAllColorOverridesButton:disabled{opacity:.25;cursor:not-allowed}.Toastify__toast-container--bottom-right{bottom:4rem!important}.Toastify__close-button{align-self:center!important}.viewInYourSpace{z-index:213}.contextMenuParent{position:absolute;max-width:none;width:auto;z-index:3;background:#ffffff;box-shadow:0 1.21008px 14.521px #0003;border:black;border-radius:3%;display:flex;justify-content:center;padding:1rem 1rem 1.5rem;flex-direction:column;align-content:center;transition:ease-in-out .25s;border-radius:.625rem;min-width:10.625rem}.contextMenuParent .infoButton{transition:.2s all ease;cursor:pointer}.contextMenuParent .infoButton:hover{opacity:.5}.contextMenuParent .closeContainer{width:fit-content;display:flex;justify-content:flex-end}.contextMenuParent .closeContainer button{cursor:pointer;border:none;outline:none;box-shadow:none;background:transparent;transition:.25s}.contextMenuParent .closeContainer button img{width:1.5rem}.contextMenuParent .contextContent{min-width:13.5rem}.contextMenuParent .contextNameContent{display:flex;align-items:center;gap:.5rem}.contextMenuParent .contextColorContent{margin-top:.75rem;display:flex;flex-direction:column}.colorThumbnailContainer .contextColorThumbnail,.contextMenuParent .contextColorThumbnail{height:100%;width:100%;opacity:1}.contextMenuParent .contextContentDiv{display:flex;align-items:flex-start}.contextMenuParent .contextContent .contextContentChildDiv{width:100%;display:flex;justify-content:space-between}.contextMenuParent .contextContent h3{font-size:1rem;font-weight:600;text-transform:uppercase;margin:0}.contextMenuParent .contextContent p{font-size:.75rem;font-weight:300;margin:0;width:100%;white-space:nowrap}.contextMenuParent .contextButtons{display:flex;flex-direction:row;gap:.75rem;margin-top:.05rem}.contextMenuParent .contextButtons div{border-radius:1.75px;padding:.75rem 2rem;display:flex;flex-direction:row;align-items:center;justify-content:center;gap:.25rem;cursor:pointer;text-transform:uppercase;font-size:.75rem;border:none;box-shadow:none;background:#ffffff;font-weight:700}.contextMenuParent .contextButtons div img{width:1.125rem}.contextMenuParent .contextButtons div:nth-child(1){color:var(--primary-color);border:.5px solid var(--primary-color)}.contextMenuParent .contextButtons div:nth-child(1) img{filter:invert(52%) sepia(97%) saturate(5241%) hue-rotate(347deg) brightness(94%) contrast(93%)}.contextMenuParent .color-grid{display:flex;align-items:center;gap:.5rem;flex-direction:row;flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden;max-width:320px;padding-bottom:4px}.contextMenuParent .color-grid ::-webkit-scrollbar-thumb{height:4px}.contextMenuParent .colorSwatchTitle{color:#c4c4c4;font-size:.6875rem;margin-bottom:.5rem;text-transform:uppercase}.mobileExpandButton{display:none}.epigraphDrawer .contextMenuParent{position:relative;max-width:none;width:100%;top:0;left:0;z-index:1005;background:#ffffff;box-shadow:none;border:black;border-radius:3%;display:flex;justify-content:center;padding:1rem 1rem 1.5rem;flex-direction:column;align-content:center;transition:ease-in-out .25s;border-radius:.625rem;min-width:200px}.epigraphDrawer .contextMenuParent .closeContainer{width:100%;display:flex;justify-content:flex-end}.epigraphDrawer .contextMenuParent .closeContainer button{cursor:pointer;border:none;outline:none;box-shadow:none;background:transparent}.epigraphDrawer .contextMenuParent .closeContainer button img{width:.75rem}.epigraphDrawer .contextMenuParent .contextContent h3{font-size:.875rem;font-weight:700;text-transform:uppercase;margin:0}.epigraphDrawer .contextMenuParent .contextContent p{font-size:.75rem;font-weight:300;margin:0}.epigraphDrawer .contextMenuParent .contextButtons{display:flex;flex-direction:row;gap:.75rem;margin-top:.05rem}.epigraphDrawer .contextMenuParent .contextButtons button{border-radius:.25rem;padding:.75rem 2rem;background:transparent;display:flex;flex-direction:row;align-items:center;gap:.25rem;cursor:pointer;text-transform:uppercase;font-size:.75rem;font-weight:700;border:1px solid var(--primary-color);outline:none;background:#fff;box-shadow:none;justify-content:center}.epigraphDrawer .contextMenuParent .contextButtons button img{width:1rem}.epigraphDrawer .contextMenuParent .contextButtons button{color:var(--primary-color);width:100%}.epigraphDrawer .contextMenuParent .contextButtons button:nth-child(1) img{filter:invert(52%) sepia(97%) saturate(5241%) hue-rotate(347deg) brightness(94%) contrast(93%)}.epigraphDrawer .contextMenuParent .contextButtons button svg path{fill:var(--primary-color)}.epigraphDrawer .color-grid{display:flex;gap:1rem}.epigraphDrawer .colorSelector{cursor:pointer;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:.25rem}.epigraphDrawer .colorSelector .colorThumbnailContainer{position:relative}.epigraphDrawer .colorSelector .colorThumbnailContainer .colorThumbnail{width:2.625rem;height:2.625rem;border-radius:50%}.epigraphDrawer .colorSelector .colorThumbnailContainer .checkMark{width:100%;height:100%;display:flex;justify-content:center;align-items:center;position:absolute;left:0;top:0}.epigraphDrawer .colorSelector .colorThumbnailContainer .checkMark img{opacity:0;transition:.1s all ease;width:45%;filter:invert(100%) sepia(100%) saturate(2%) hue-rotate(188deg) brightness(101%)}.epigraphDrawer .colorSelector.selected .colorThumbnailContainer .checkMark img{opacity:1}.epigraphDrawer .colorSelector .colorDetails{text-align:center;opacity:.75;pointer-events:none;margin-top:0}.spawning-requirements-container{position:absolute;top:5.5rem;background:#eaeaea;width:125%;border-radius:.3rem;padding:.2rem;z-index:1;pointer-events:none;font-size:.5rem;box-shadow:0 2px 8px #0000001a;-webkit-box-shadow:0px 2px 8px rgb(0 0 0 / 10%);transition:.25s}.spawningRequirementDiv .reason,.spawning-requirements-text{width:100%;padding:.2rem;white-space:pre-line}.truncate{width:100px;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;text-align:center}.epigraphDrawer .colorSelector:hover .colorDetails,.epigraphDrawer .colorSelector.selected .colorDetails{opacity:1;pointer-events:all}.epigraphDrawer .colorSelector .colorDetails p{margin:0;font-size:.75rem;color:var(--brand-dark)}.epigraphDrawer .colorSelector .colorDetails p:nth-child(1){font-weight:600}.epigraphDrawer .colorSelector .colorDetails p:nth-child(2){font-weight:400}.epigraphDrawer p,.epigraphDrawer span,.epigraphDrawer h1,.epigraphDrawer h2,.epigraphDrawer h3,.epigraphDrawer h4,.epigraphDrawer h5,.epigraphDrawer pre{font-family:Inter,helvetica,sans-serif}.infoDrawer{padding-top:2rem;padding-bottom:3rem;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;position:relative}.infoDrawer .infoDrawerImageContainer{position:relative;width:100%}.infoDrawer button{background:transparent;border:none;outline:none;cursor:pointer}.closeButton{cursor:pointer;width:1.5rem;height:1.5rem}.infoDrawer .closeButton{position:absolute;right:1.5rem;top:1.5rem}.infoDrawer .closeButton img{width:.75rem}.infoDrawer .openNewTab{position:relative;margin-top:1rem;display:flex;align-items:center;color:var(--brand-dark);gap:.5rem;outline:none}.infoDrawer .itemImage{max-width:60%;width:50%}.infoDrawer .itemTitle{font-weight:400;max-width:70%;font-size:1rem;margin-top:1.25rem;text-align:center}.infoDrawer .infoDrawerActions{margin-top:1.5rem}.infoDrawer .infoDrawerActions button{width:65%;padding:.6875rem;text-align:center;color:#fff}.infoDrawer .infoDrawerActions .removeFromCart{background:var(--brand-dark)}.infoDrawer .itemTitle{font-weight:400;max-width:60%;font-size:1.25rem;margin-top:1rem}.infoDrawer .infoDrawerDimensions{color:var(--brand-dark);opacity:.4;font-weight:700;font-size:.875rem;margin-top:1rem}.infoDrawer .infoDrawerActions{margin-top:3.75rem}.infoDrawer .infoModalActions button{width:65%;padding:.6875rem;text-align:center;color:var(--brand-dark);pointer-events:none;font-size:1.25rem;font-weight:700;background:#f8f8f8;margin-top:1rem}.infoDrawer .categoryLink{display:flex;align-items:center;color:var(--brand-dark);gap:.75rem;text-decoration:none;position:relative;width:70%;outline:none;margin-bottom:1rem}.previewCartModalChild{width:100%;height:100%}.cartEmptyText{padding:2rem}.previewCartContentParentDiv{position:relative;padding-top:.5rem;width:100%;height:100%}.checkButtonParentDiv{background:#fff;display:flex;flex-direction:column;justify-content:center;align-items:center;height:auto;padding:1rem;width:100%;box-shadow:0 2px 12px #0000001a}.cartMessageDiv{font-size:.7rem;width:20.625rem;padding:1rem;font-weight:600;text-align:center;display:flex;justify-content:center;align-items:center}.infoModalTextContainer{text-align:center;width:100%;height:100%;display:flex;flex-direction:column;align-items:center;margin-top:1rem}#hotspotDrawer{position:absolute;width:100%;height:100%}.epigraphDrawer.hotspotDrawer .drawerContent{padding:3.5rem 1.25rem}.epigraphDrawer.hotspotDrawer .quill p{margin:0;margin-top:.5rem}.product-image-default-state{opacity:1;cursor:not-allowed;transition:opacity .3s ease-in-out}.product-image-disabled{opacity:.1}.UIModalButtonParentDiv{display:flex;gap:1rem;width:inherit}.colorSelector .colorThumbnailContainer .checkMark{display:none!important}.colorSelector .colorThumbnailContainer{border-radius:3.97381px;border:2px solid #4a4a4a00;padding:2px}.colorSelector.selected .colorThumbnailContainer{border:2px solid #4a4a4a}.imageContainer .contentContainer{border-radius:3.97381px;border:2px solid #4a4a4a00}.imageContainer.active .contentContainer{border:2px solid #4a4a4a}
|
|
9017
|
-
`,AccordionStyles=`h1{margin:0;line-height:2;text-align:center}h2{margin:0 0 .5em;font-weight:400}.tabs input{position:absolute;opacity:0;z-index:-1}.row{display:flex}.row .col{flex:1}.row .col:last-child{margin-left:1em}.tabs{overflow:scroll;top:0;left:0;width:100%;height:100%;min-height:100%;position:absolute}.productFeatureUIDiv{position:relative}.tabEmptyText{padding-top:2rem;text-align:center;color:#818181;font-size:.9rem}.tab{width:100%;color:#fff;overflow:hidden}.accordionTab>input:focus+label{outline:1px dotted #212121;outline:5px auto -webkit-focus-ring-color}.tab-label{display:flex;justify-content:space-between;align-items:center;padding:1rem 1.5rem;background:#fff;font-weight:600;cursor:pointer;color:#000;font-size:16px;text-transform:uppercase;position:relative;border-bottom:1px solid var(--product-feature-border-color)}.tab-label img{width:1.6rem;height:auto}.tab-label span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:80%}input:checked~.tab-label{background:#f8f8f8}input:checked~.tab-content{background:#f8f8f8}.tab-label:hover{background:hsl(0,0%,97%)}.tab-label .ellipsis{width:20px;height:20px;background:#ffffff;border:2px solid #e52438;box-sizing:border-box;border-radius:50%;margin-right:12px}.tabs .tab-content{padding:0 1em;color:#000;background:white;transition:.
|
|
9017
|
+
`,AccordionStyles=`h1{margin:0;line-height:2;text-align:center}h2{margin:0 0 .5em;font-weight:400}.tabs input{position:absolute;opacity:0;z-index:-1}.row{display:flex}.row .col{flex:1}.row .col:last-child{margin-left:1em}.tabs{overflow:scroll;top:0;left:0;width:100%;height:100%;min-height:100%;position:absolute}.productFeatureUIDiv{position:relative}.tabEmptyText{padding-top:2rem;text-align:center;color:#818181;font-size:.9rem}.tab{width:100%;color:#fff;overflow:hidden}.accordionTab>input:focus+label{outline:1px dotted #212121;outline:5px auto -webkit-focus-ring-color}.tab-label{display:flex;justify-content:space-between;align-items:center;padding:1rem 1.5rem;background:#fff;font-weight:600;cursor:pointer;color:#000;font-size:16px;text-transform:uppercase;position:relative;border-bottom:1px solid var(--product-feature-border-color)}.tab-label img{width:1.6rem;height:auto}.tab-label span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:80%}input:checked~.tab-label{background:#f8f8f8}input:checked~.tab-content{background:#f8f8f8}.tab-label:hover{background:hsl(0,0%,97%)}.tab-label .ellipsis{width:20px;height:20px;background:#ffffff;border:2px solid #e52438;box-sizing:border-box;border-radius:50%;margin-right:12px}.tabs .tab-content{padding:0 1em;color:#000;background:white;transition:.5s ease-out;height:auto;max-height:0px;overflow:hidden}input:checked~.tab-label{font-weight:700}.tab:nth-child(2n) .tab-content{background:#f5f5f5}.tab-close{display:flex;justify-content:flex-end;padding:1em;font-size:.75em;background:#2c3e50;cursor:pointer}.tab-close:hover{background:#1a252f}input:checked+.tab-label .accordion-closed{display:none}input+.tab-label .accordion-closed{display:flex}input:checked+.tab-label .accordion-open{display:flex}input+.tab-label .accordion-open{display:none}
|
|
9018
9018
|
`,BuildStyles=`.react-tabs{-webkit-tap-highlight-color:transparent}.react-tabs__tab-list{border-bottom:1px solid #aaa;margin:0 0 10px;padding:0}.react-tabs__tab{border:1px solid transparent;border-bottom:none;bottom:-1px;cursor:pointer;display:inline-block;list-style:none;padding:6px 12px;position:relative}.react-tabs__tab--selected{background:#fff;border-color:#aaa;border-radius:5px 5px 0 0;color:#000}.react-tabs__tab--disabled{color:GrayText;cursor:default}.react-tabs__tab:focus{outline:none}.react-tabs__tab:focus:after{background:#ffffff00;bottom:-5px;content:"";height:5px;left:-4px;position:absolute;right:-4px}.react-tabs__tab-panel{display:none}.react-tabs__tab-panel--selected{display:block}@keyframes splide-loading{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.splide--draggable>.splide__slider>.splide__track,.splide--draggable>.splide__track{-webkit-user-select:none;-ms-user-select:none;user-select:none}.splide--fade>.splide__slider>.splide__track>.splide__list,.splide--fade>.splide__track>.splide__list{display:block}.splide--fade>.splide__slider>.splide__track>.splide__list>.splide__slide,.splide--fade>.splide__track>.splide__list>.splide__slide{left:0;opacity:0;position:absolute;top:0;z-index:0}.splide--fade>.splide__slider>.splide__track>.splide__list>.splide__slide.is-active,.splide--fade>.splide__track>.splide__list>.splide__slide.is-active{opacity:1;position:relative;z-index:1}.splide--rtl{direction:rtl}.splide--ttb.is-active>.splide__slider>.splide__track>.splide__list,.splide--ttb.is-active>.splide__track>.splide__list{display:block}.splide__container{box-sizing:border-box;position:relative}.splide__list{-webkit-backface-visibility:hidden;backface-visibility:hidden;display:-ms-flexbox;display:flex;height:100%;margin:0!important;padding:0!important;transform-style:preserve-3d}.splide.is-initialized:not(.is-active) .splide__list{display:block}.splide__pagination{-ms-flex-align:center;-ms-flex-pack:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;justify-content:center;margin:0;pointer-events:none}.splide__pagination li{display:inline-block;line-height:1;list-style-type:none;margin:0;pointer-events:auto}.splide__progress__bar{width:0}.splide{outline:none;position:relative;visibility:hidden}.splide.is-initialized,.splide.is-rendered{visibility:visible}.splide__slide{-ms-flex-negative:0;-webkit-backface-visibility:hidden;backface-visibility:hidden;box-sizing:border-box;flex-shrink:0;list-style-type:none!important;margin:0;outline:none;position:relative}.splide__slide img{vertical-align:bottom}.splide__slider{position:relative}.splide__spinner{animation:splide-loading 1s linear infinite;border:2px solid #999;border-left-color:transparent;border-radius:50%;contain:strict;display:inline-block;height:20px;inset:0;margin:auto;position:absolute;width:20px}.splide__track{overflow:hidden;position:relative;z-index:0}:root{--toastify-color-light: #fff;--toastify-color-dark: #121212;--toastify-color-info: #3498db;--toastify-color-success: #07bc0c;--toastify-color-warning: #f1c40f;--toastify-color-error: #e74c3c;--toastify-color-transparent: hsla(0, 0%, 100%, .7);--toastify-icon-color-info: var(--toastify-color-info);--toastify-icon-color-success: var(--toastify-color-success);--toastify-icon-color-warning: var(--toastify-color-warning);--toastify-icon-color-error: var(--toastify-color-error);--toastify-toast-width: 320px;--toastify-toast-background: #fff;--toastify-toast-min-height: 64px;--toastify-toast-max-height: 800px;--toastify-font-family: sans-serif;--toastify-z-index: 9999;--toastify-text-color-light: #757575;--toastify-text-color-dark: #fff;--toastify-text-color-info: #fff;--toastify-text-color-success: #fff;--toastify-text-color-warning: #fff;--toastify-text-color-error: #fff;--toastify-spinner-color: #616161;--toastify-spinner-color-empty-area: #e0e0e0;--toastify-color-progress-light: linear-gradient( 90deg, #4cd964, #5ac8fa, #007aff, #34aadc, #5856d6, #ff2d55 );--toastify-color-progress-dark: #bb86fc;--toastify-color-progress-info: var(--toastify-color-info);--toastify-color-progress-success: var(--toastify-color-success);--toastify-color-progress-warning: var(--toastify-color-warning);--toastify-color-progress-error: var(--toastify-color-error)}.Toastify__toast-container{box-sizing:border-box;color:#fff;padding:4px;position:fixed;-webkit-transform:translate3d(0,0,9999 px);-webkit-transform:translate3d(0,0,var(--toastify-z-index) px);width:320px;width:var(--toastify-toast-width);z-index:9999;z-index:var(--toastify-z-index)}.Toastify__toast-container--top-left{left:1em;top:1em}.Toastify__toast-container--top-center{left:50%;top:1em;-webkit-transform:translateX(-50%);transform:translate(-50%)}.Toastify__toast-container--top-right{right:1em;top:1em}.Toastify__toast-container--bottom-left{bottom:1em;left:1em}.Toastify__toast-container--bottom-center{bottom:1em;left:50%;-webkit-transform:translateX(-50%);transform:translate(-50%)}.Toastify__toast-container--bottom-right{bottom:1em;right:1em}@media only screen and (max-width: 480px){.Toastify__toast-container{left:0;margin:0;padding:0;width:100vw}.Toastify__toast-container--top-center,.Toastify__toast-container--top-left,.Toastify__toast-container--top-right{top:0;-webkit-transform:translateX(0);transform:translate(0)}.Toastify__toast-container--bottom-center,.Toastify__toast-container--bottom-left,.Toastify__toast-container--bottom-right{bottom:0;-webkit-transform:translateX(0);transform:translate(0)}.Toastify__toast-container--rtl{left:auto;right:0}}.Toastify__toast{border-radius:4px;box-shadow:0 1px 10px #0000001a,0 2px 15px #0000000d;box-sizing:border-box;cursor:pointer;direction:ltr;display:flex;font-family:sans-serif;font-family:var(--toastify-font-family);justify-content:space-between;margin-bottom:1rem;max-height:800px;max-height:var(--toastify-toast-max-height);min-height:64px;min-height:var(--toastify-toast-min-height);overflow:hidden;padding:8px;position:relative}.Toastify__toast--rtl{direction:rtl}.Toastify__toast-body{align-items:center;display:flex;flex:1 1 auto;margin:auto 0;padding:6px}.Toastify__toast-body>div:last-child{flex:1 1}.Toastify__toast-icon{-webkit-margin-end:10px;display:flex;flex-shrink:0;margin-inline-end:10px;width:20px}.Toastify--animate{-webkit-animation-duration:.7s;animation-duration:.7s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.Toastify--animate-icon{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both}@media only screen and (max-width: 480px){.Toastify__toast{border-radius:0;margin-bottom:0}}.f{--y: calc(var(--len) - var(--nth));bottom:0;min-height:80px;position:absolute;right:0;-webkit-transform:translate3d(0,calc(var(--y) * -40%),0) scale(calc(1 - var(--y) * .05));transform:translate3d(0,calc(var(--y) * -40%),0) scale(calc(1 - var(--y) * .05));transition:all .3s;width:100%}.Toastify__toast-theme--dark{background:#121212;background:var(--toastify-color-dark);color:#fff;color:var(--toastify-text-color-dark)}.Toastify__toast-theme--colored.Toastify__toast--default,.Toastify__toast-theme--light{background:#fff;background:var(--toastify-color-light);color:#757575;color:var(--toastify-text-color-light)}.Toastify__toast-theme--colored.Toastify__toast--info{background:#3498db;background:var(--toastify-color-info);color:#fff;color:var(--toastify-text-color-info)}.Toastify__toast-theme--colored.Toastify__toast--success{background:#07bc0c;background:var(--toastify-color-success);color:#fff;color:var(--toastify-text-color-success)}.Toastify__toast-theme--colored.Toastify__toast--warning{background:#f1c40f;background:var(--toastify-color-warning);color:#fff;color:var(--toastify-text-color-warning)}.Toastify__toast-theme--colored.Toastify__toast--error{background:#e74c3c;background:var(--toastify-color-error);color:#fff;color:var(--toastify-text-color-error)}.Toastify__progress-bar-theme--light{background:linear-gradient(90deg,#4cd964,#5ac8fa,#007aff,#34aadc,#5856d6,#ff2d55);background:var(--toastify-color-progress-light)}.Toastify__progress-bar-theme--dark{background:#bb86fc;background:var(--toastify-color-progress-dark)}.Toastify__progress-bar--info{background:#3498db;background:var(--toastify-color-progress-info)}.Toastify__progress-bar--success{background:#07bc0c;background:var(--toastify-color-progress-success)}.Toastify__progress-bar--warning{background:#f1c40f;background:var(--toastify-color-progress-warning)}.Toastify__progress-bar--error{background:#e74c3c;background:var(--toastify-color-progress-error)}.Toastify__progress-bar-theme--colored.Toastify__progress-bar--error,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--info,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--success,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--warning{background:hsla(0,0%,100%,.7);background:var(--toastify-color-transparent)}.Toastify__close-button{align-self:flex-start;background:transparent;border:none;color:#fff;cursor:pointer;opacity:.7;outline:none;padding:0;transition:.3s ease}.Toastify__close-button--light{color:#000;opacity:.3}.Toastify__close-button>svg{fill:currentColor;height:16px;width:14px}.Toastify__close-button:focus,.Toastify__close-button:hover{opacity:1}@-webkit-keyframes Toastify__trackProgress{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}to{-webkit-transform:scaleX(0);transform:scaleX(0)}}@keyframes Toastify__trackProgress{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}to{-webkit-transform:scaleX(0);transform:scaleX(0)}}.Toastify__progress-bar{bottom:0;height:5px;left:0;opacity:.7;position:absolute;-webkit-transform-origin:left;transform-origin:left;width:100%;z-index:9999;z-index:var(--toastify-z-index)}.Toastify__progress-bar--animated{-webkit-animation:Toastify__trackProgress linear 1 forwards;animation:Toastify__trackProgress linear 1 forwards}.Toastify__progress-bar--controlled{transition:-webkit-transform .2s;transition:transform .2s;transition:transform .2s,-webkit-transform .2s}.Toastify__progress-bar--rtl{left:auto;right:0;-webkit-transform-origin:right;transform-origin:right}.Toastify__spinner{-webkit-animation:Toastify__spin .65s linear infinite;animation:Toastify__spin .65s linear infinite;border:2px solid #e0e0e0;border-radius:100%;border-right:2px solid var(--toastify-spinner-color);box-sizing:border-box;height:20px;width:20px}@-webkit-keyframes Toastify__bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes Toastify__bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}@-webkit-keyframes Toastify__bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes Toastify__bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@-webkit-keyframes Toastify__bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes Toastify__bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}@-webkit-keyframes Toastify__bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes Toastify__bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@-webkit-keyframes Toastify__bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes Toastify__bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@-webkit-keyframes Toastify__bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}@keyframes Toastify__bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}@-webkit-keyframes Toastify__bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes Toastify__bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.Toastify__bounce-enter--bottom-left,.Toastify__bounce-enter--top-left{-webkit-animation-name:Toastify__bounceInLeft;animation-name:Toastify__bounceInLeft}.Toastify__bounce-enter--bottom-right,.Toastify__bounce-enter--top-right{-webkit-animation-name:Toastify__bounceInRight;animation-name:Toastify__bounceInRight}.Toastify__bounce-enter--top-center{-webkit-animation-name:Toastify__bounceInDown;animation-name:Toastify__bounceInDown}.Toastify__bounce-enter--bottom-center{-webkit-animation-name:Toastify__bounceInUp;animation-name:Toastify__bounceInUp}.Toastify__bounce-exit--bottom-left,.Toastify__bounce-exit--top-left{-webkit-animation-name:Toastify__bounceOutLeft;animation-name:Toastify__bounceOutLeft}.Toastify__bounce-exit--bottom-right,.Toastify__bounce-exit--top-right{-webkit-animation-name:Toastify__bounceOutRight;animation-name:Toastify__bounceOutRight}.Toastify__bounce-exit--top-center{-webkit-animation-name:Toastify__bounceOutUp;animation-name:Toastify__bounceOutUp}.Toastify__bounce-exit--bottom-center{-webkit-animation-name:Toastify__bounceOutDown;animation-name:Toastify__bounceOutDown}@-webkit-keyframes Toastify__zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes Toastify__zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@-webkit-keyframes Toastify__zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes Toastify__zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}.Toastify__zoom-enter{-webkit-animation-name:Toastify__zoomIn;animation-name:Toastify__zoomIn}.Toastify__zoom-exit{-webkit-animation-name:Toastify__zoomOut;animation-name:Toastify__zoomOut}@-webkit-keyframes Toastify__flipIn{0%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}40%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg)}60%{opacity:1;-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg)}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes Toastify__flipIn{0%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}40%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg)}60%{opacity:1;-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg)}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@-webkit-keyframes Toastify__flipOut{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{opacity:1;-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg)}to{opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}}@keyframes Toastify__flipOut{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{opacity:1;-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg)}to{opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}}.Toastify__flip-enter{-webkit-animation-name:Toastify__flipIn;animation-name:Toastify__flipIn}.Toastify__flip-exit{-webkit-animation-name:Toastify__flipOut;animation-name:Toastify__flipOut}@-webkit-keyframes Toastify__slideInRight{0%{-webkit-transform:translate3d(110%,0,0);transform:translate3d(110%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__slideInRight{0%{-webkit-transform:translate3d(110%,0,0);transform:translate3d(110%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__slideInLeft{0%{-webkit-transform:translate3d(-110%,0,0);transform:translate3d(-110%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__slideInLeft{0%{-webkit-transform:translate3d(-110%,0,0);transform:translate3d(-110%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__slideInUp{0%{-webkit-transform:translate3d(0,110%,0);transform:translate3d(0,110%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__slideInUp{0%{-webkit-transform:translate3d(0,110%,0);transform:translate3d(0,110%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__slideInDown{0%{-webkit-transform:translate3d(0,-110%,0);transform:translate3d(0,-110%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__slideInDown{0%{-webkit-transform:translate3d(0,-110%,0);transform:translate3d(0,-110%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(110%,0,0);transform:translate3d(110%,0,0);visibility:hidden}}@keyframes Toastify__slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(110%,0,0);transform:translate3d(110%,0,0);visibility:hidden}}@-webkit-keyframes Toastify__slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(-110%,0,0);transform:translate3d(-110%,0,0);visibility:hidden}}@keyframes Toastify__slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(-110%,0,0);transform:translate3d(-110%,0,0);visibility:hidden}}@-webkit-keyframes Toastify__slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,500px,0);transform:translate3d(0,500px,0);visibility:hidden}}@keyframes Toastify__slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,500px,0);transform:translate3d(0,500px,0);visibility:hidden}}@-webkit-keyframes Toastify__slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,-500px,0);transform:translate3d(0,-500px,0);visibility:hidden}}@keyframes Toastify__slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,-500px,0);transform:translate3d(0,-500px,0);visibility:hidden}}.Toastify__slide-enter--bottom-left,.Toastify__slide-enter--top-left{-webkit-animation-name:Toastify__slideInLeft;animation-name:Toastify__slideInLeft}.Toastify__slide-enter--bottom-right,.Toastify__slide-enter--top-right{-webkit-animation-name:Toastify__slideInRight;animation-name:Toastify__slideInRight}.Toastify__slide-enter--top-center{-webkit-animation-name:Toastify__slideInDown;animation-name:Toastify__slideInDown}.Toastify__slide-enter--bottom-center{-webkit-animation-name:Toastify__slideInUp;animation-name:Toastify__slideInUp}.Toastify__slide-exit--bottom-left,.Toastify__slide-exit--top-left{-webkit-animation-name:Toastify__slideOutLeft;animation-name:Toastify__slideOutLeft}.Toastify__slide-exit--bottom-right,.Toastify__slide-exit--top-right{-webkit-animation-name:Toastify__slideOutRight;animation-name:Toastify__slideOutRight}.Toastify__slide-exit--top-center{-webkit-animation-name:Toastify__slideOutUp;animation-name:Toastify__slideOutUp}.Toastify__slide-exit--bottom-center{-webkit-animation-name:Toastify__slideOutDown;animation-name:Toastify__slideOutDown}@-webkit-keyframes Toastify__spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes Toastify__spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}[data-rsbs-overlay]{background:#fff;background:var(--rsbs-bg, #fff);border-top-left-radius:16px;border-top-left-radius:var(--rsbs-overlay-rounded, 16px);border-top-right-radius:16px;border-top-right-radius:var(--rsbs-overlay-rounded, 16px);display:flex;flex-direction:column;height:0;height:var(--rsbs-overlay-h, 0);transform:translateZ(0);transform:translate3d(0,var(--rsbs-overlay-translate-y, 0),0);will-change:height}[data-rsbs-overlay]:focus{outline:none}[data-rsbs-is-blocking=false] [data-rsbs-overlay]{box-shadow:0 -5px 60px #2659731c,0 -1px #2659730d}[data-rsbs-overlay],[data-rsbs-root]:after{margin-left:env(safe-area-inset-left);margin-left:var(--rsbs-ml, env(safe-area-inset-left));margin-right:env(safe-area-inset-right);margin-right:var(--rsbs-mr, env(safe-area-inset-right));max-width:auto;max-width:var(--rsbs-max-w, auto)}[data-rsbs-backdrop],[data-rsbs-overlay],[data-rsbs-root]:after{-ms-scroll-chaining:none;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;bottom:0;left:0;overscroll-behavior:none;position:fixed;right:0;touch-action:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:3}[data-rsbs-backdrop]{background-color:#0009;background-color:var(--rsbs-backdrop-bg, rgba(0, 0, 0, .6));bottom:-60px;cursor:pointer;opacity:1;top:-60px;will-change:opacity}[data-rsbs-is-dismissable=false] [data-rsbs-backdrop]{cursor:ns-resize}[data-rsbs-root]:after{background:#fff;background:var(--rsbs-bg, #fff);content:"";height:1px;pointer-events:none;transform:scaleY(0);transform:scaleY(var(--rsbs-antigap-scale-y, 0));transform-origin:bottom;will-change:transform}[data-rsbs-footer],[data-rsbs-header]{cursor:ns-resize;flex-shrink:0;padding:16px}[data-rsbs-header]{box-shadow:0 1px #2e3b4220;box-shadow:0 1px 0 rgba(46,59,66,calc(var(--rsbs-content-opacity, 1) * .125));padding-bottom:8px;padding-top:calc(20px + env(safe-area-inset-top));text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:1}[data-rsbs-header]:before{background-color:#00000024;background-color:var(--rsbs-handle-bg, rgba(0, 0, 0, .14));border-radius:2px;content:"";display:block;height:4px;left:50%;position:absolute;top:calc(8px + env(safe-area-inset-top));transform:translate(-50%);width:36px}@media (-webkit-min-device-pixel-ratio: 2),(min-resolution: 2dppx){[data-rsbs-header]:before{transform:translate(-50%) scaleY(.75)}}[data-rsbs-has-header=false] [data-rsbs-header]{box-shadow:none;padding-top:calc(12px + env(safe-area-inset-top))}[data-rsbs-scroll]{-webkit-tap-highlight-color:revert;-webkit-touch-callout:revert;-ms-scroll-chaining:none;-webkit-overflow-scrolling:touch;flex-grow:1;flex-shrink:1;overflow:auto;overscroll-behavior:contain;-webkit-user-select:auto;-ms-user-select:auto;-moz-user-select:auto;user-select:auto}[data-rsbs-scroll]:focus{outline:none}[data-rsbs-has-footer=false] [data-rsbs-content]{padding-bottom:env(safe-area-inset-bottom)}[data-rsbs-content]{overflow:hidden}[data-rsbs-footer]{box-shadow:0 -1px #2e3b4220,0 2px #fff;box-shadow:0 -1px 0 rgba(46,59,66,calc(var(--rsbs-content-opacity, 1) * .125)),0 2px 0 var(--rsbs-bg, #fff);overflow:hidden;padding-bottom:calc(16px + env(safe-area-inset-bottom));z-index:1}[data-rsbs-is-dismissable=false][data-rsbs-state=closing] [data-rsbs-footer]>*,[data-rsbs-is-dismissable=false][data-rsbs-state=closing] [data-rsbs-header]>*,[data-rsbs-is-dismissable=false][data-rsbs-state=closing] [data-rsbs-scroll]>*,[data-rsbs-is-dismissable=false][data-rsbs-state=opening] [data-rsbs-footer]>*,[data-rsbs-is-dismissable=false][data-rsbs-state=opening] [data-rsbs-header]>*,[data-rsbs-is-dismissable=false][data-rsbs-state=opening] [data-rsbs-scroll]>*,[data-rsbs-is-dismissable=true] [data-rsbs-footer]>*,[data-rsbs-is-dismissable=true] [data-rsbs-header]>*,[data-rsbs-is-dismissable=true] [data-rsbs-scroll]>*{opacity:1;opacity:var(--rsbs-content-opacity, 1)}[data-rsbs-is-dismissable=false][data-rsbs-state=closing] [data-rsbs-backdrop],[data-rsbs-is-dismissable=false][data-rsbs-state=opening] [data-rsbs-backdrop],[data-rsbs-is-dismissable=true] [data-rsbs-backdrop]{opacity:1;opacity:var(--rsbs-backdrop-opacity, 1)}[data-rsbs-state=closed],[data-rsbs-state=closing]{pointer-events:none}
|
|
9019
9019
|
`,FeaturesUiStyles=`h1,h2,h3,h4,h5,p{margin:0}.hotspot-content{padding:.5rem 2rem 2.5rem}.hotspot-content h2{font-size:1.3rem;font-weight:700;text-transform:uppercase;margin-bottom:1rem}.carousel{margin-top:1rem;padding-bottom:1rem;display:flex;justify-content:center}.carousel img{width:100%}.carousel video{max-width:100%;height:100%}.carouselTabParent{width:100%;display:flex;flex-direction:column;justify-content:center;align-items:center}.carouselVideoPlaceholderText{position:absolute}.carouselTitle{padding-left:1rem;padding-right:1rem;padding-top:.75rem;text-transform:none;text-align:center}.splide__pagination{display:none!important}.splide__arrows{position:absolute;bottom:-52px;width:100%;justify-content:center;display:flex}.splide__arrow--prev{transform:rotateY(180deg)}.splide__arrow{background:transparent;border:none;box-shadow:none;transition:.1s;padding:1rem}.splide__arrow svg{width:1rem;height:1rem}.splide__arrow:disabled{opacity:.3;pointer-events:none}.col{border-radius:12px}
|
|
9020
9020
|
`,SideMenuContentStyles=`.hide{display:none!important}.container{padding:28px 46px;padding-bottom:2.5rem;height:100%;overflow-y:scroll}.variantContainer{height:100%;overflow-y:scroll}.col{padding:0;height:100%;overflow-y:scroll}.container .subheading{font-size:.75rem;font-weight:700;text-transform:uppercase;margin-top:0;margin-bottom:1.5rem}.buildUiAccordion{cursor:pointer;transition:.4s;width:100%;border:none;background:#00000000;text-align:left;display:flex;align-items:center;margin-bottom:.5rem}.buildUiAccordion .arrowUp{display:block}.buildUiAccordionActive .arrowUp,.buildUiAccordion .arrowDown{display:none}.buildUiAccordionActive .arrowDown{display:block}.buildUiAccordionContent{max-height:0;overflow:hidden;transition:max-height .2s ease-out}.buildUiAccordion h4{padding-left:.5rem;font-size:.75rem;font-weight:700;text-transform:uppercase}.item-grid{display:flex;justify-content:flex-start;column-gap:1.25rem;align-items:flex-start;position:relative;flex-wrap:wrap}.item-grid .imageContainer{width:6rem;height:fit-content;position:relative;cursor:pointer;border-radius:.6rem;background:#fff;box-sizing:border-box;margin-bottom:2rem;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;transition:.2s ease}.item-grid .imageContainer .contentContainer{left:0;top:0;width:6rem;height:6rem;transition:.2s ease;background:var(--item-card-background-color);padding:8px;display:flex;flex-direction:column;justify-content:center;align-items:center;box-shadow:0 2px 8px #0000001a;-webkit-box-shadow:0px 2px 8px rgb(0 0 0 / 10%);border-radius:.6rem;margin:0}.incrementContentContainer{left:0;top:0;width:6rem;height:6rem;transition:.2s ease;background:var(--item-card-background-color);padding:8px;display:flex;flex-direction:column;justify-content:space-around;align-items:center;box-shadow:0 2px 8px #0000001a;-webkit-box-shadow:0px 2px 8px rgb(0 0 0 / 10%);border-radius:.6rem;margin:0;background:white}.splide__arrow{pointer-events:all;cursor:pointer}.item-grid .imageContainer .addCartButton{width:100%;height:auto;line-height:.75rem;justify-content:center;align-items:center;background:var(--primary-color);cursor:pointer;display:none;position:absolute;bottom:0;left:0;border:none;border-bottom-left-radius:.6rem;border-bottom-right-radius:.6rem;font-size:.625rem;color:#fff;text-transform:uppercase;font-weight:600;padding:.5rem;transition:.2s all ease;-webkit-transition:.2s all ease}.item-grid .imageContainer .addCartButton.added{background:var(--brand-dark)}.item-grid .imageContainer .infoButton{position:absolute;right:.25rem;top:.25rem;z-index:8;background:none;padding:0;margin:0;border:0;cursor:pointer;opacity:0;pointer-events:none;transition:.2s all ease;-webkit-transition:.2s all ease}.incrementContentOverlay{pointer-events:none;position:absolute;left:0;top:0;width:6rem;height:6rem;display:flex;justify-content:center;align-items:center;opacity:0;transition:.5s;border-radius:.6rem;z-index:3}.item-grid .imageContainer .contentOverlay{position:absolute;left:0;top:0;width:6rem;height:6rem;display:flex;justify-content:center;align-items:center;opacity:0;transition:.5s;background:rgba(51,51,51,.2);border-radius:.6rem;z-index:3;pointer-events:all}.enabled-item-overlay{opacity:1!important;cursor:pointer!important}.disabled-item-overlay{cursor:not-allowed!important}.item-grid .imageContainer .contentOverlay img{filter:invert(96%) sepia(3%) saturate(312%) hue-rotate(315deg) brightness(114%) contrast(100%);width:1.875rem;pointer-events:all}.item-grid .imageContainer .itemDetails{opacity:0;font-size:.685rem;justify-content:center;width:100%;height:fit-content;margin-top:.8rem;display:flex;align-items:center}.showAlways{opacity:1!important}.incrementDecrementPanel{width:100%;display:flex;align-items:center;justify-content:center}.incrementCount{cursor:auto;background:#f5f5f5;border:solid .5px #cccccc;padding:0rem .5rem;height:100%;border-right:none;border-left:none;font-size:.7rem;display:flex;align-items:center}.incrementPlusSign{cursor:pointer;height:100%;background:#f5f5f5;border-radius:0 1rem 1rem 0;border:solid .5px #cccccc;display:flex;justify-content:center;align-items:center;padding:0rem .3rem}.incrementPlusSign:hover{background:rgb(232,232,232)}.incrementMinusSign{cursor:pointer;height:100%;background:#f5f5f5;border-radius:1rem 0 0 1rem;border:solid .5px #cccccc;display:flex;justify-content:center;align-items:center;padding:0rem .3rem}.incrementMinusSign:hover{background:rgb(232,232,232)}.infoModalIncrementDecrementParent .incrementCount{padding:.25rem 1.25rem;font-size:.9rem}.infoModalIncrementDecrementParent .incrementPlusSign,.infoModalIncrementDecrementParent .incrementMinusSign{padding:.25rem .5rem}.incrementSignDisable{pointer-events:none;cursor:not-allowed}.incrementSignDisable img{opacity:.2}.item-details-icon:before{content:none;vertical-align:middle}.item-card-text-parent{display:flex;flex-direction:column;align-items:center;justify-content:center}.item-card-text-parent .skuName{margin-bottom:.2rem}.item-card-text-parent .skuSubheading{color:#707070;font-size:.6rem}.container .item-grid .imageContainer .itemDetails:hover{opacity:1;text-decoration:underline}.item-grid .imageContainer .itemDetails:focus-within{opacity:1;text-decoration:underline}.item-grid .imageContainer:hover .itemDetails{opacity:1;transition:.5s}.item-grid .imageContainer:focus-within .itemDetails{opacity:1;transition:.5s}.item-grid .contentContainer img{max-width:100%;max-height:100%}.incrementSkuIcon{max-width:70%;max-height:70%;margin-bottom:.25rem}.splide__sr{display:none}.container .subContainer{border-bottom:.5px solid #c4c4c4;margin-bottom:2rem}.container .subContainer:nth-child(1){margin-top:0}.container .subContainer:nth-last-child(1){margin-bottom:0;border-bottom:0}.bottomBar .cartButton img{width:2rem}.sideMenu .sideMenuTabContainer,.mobileTabContent,.mobileElementsModal{display:none}.infoModal{position:absolute;width:100%;height:100%;left:0;top:0;z-index:8;background:#fff;box-shadow:0 -5px 8px #00000005;border-radius:.75rem .75rem 0 0;display:flex;flex-direction:column;justify-content:flex-start;align-items:center;text-align:center;opacity:0;pointer-events:none;transition:.2s all ease;-webkit-transition:.2s all ease;padding-bottom:1rem;padding-top:2rem;overflow-y:auto}.infoModal.open{opacity:1;pointer-events:all}.infoModal .categoryLink{display:flex;align-items:center;color:var(--brand-dark);gap:.75rem;text-decoration:none;align-self:flex-start;align-items:flex-start;margin-left:4rem;margin-bottom:2rem}.infoModal .categoryLink img{margin-top:.5rem}.infoModal .categoryLink:hover{text-decoration:underline}.reviewButtonSibling{display:none}.infoModal .categoryLink .categoryTitle{font-size:1.25rem;font-weight:700;text-align:left;margin:auto;display:flex;flex-direction:column}.categoryTitle .modalSubHeading{font-size:.8rem;font-weight:300;margin-top:.5rem;color:#8f8f8f}.infoModal .infoModalImageContainer{position:relative;width:auto;height:12.5rem;display:flex;flex-direction:column;justify-content:center;align-items:center;background:#fff;border-radius:.8rem}.infoModal .itemImage{width:auto;height:100%}.infoModal .closeButton{cursor:pointer;position:absolute;right:1.5rem;top:1.5rem}.infoModal .closeButton img{width:1.5rem}.infoModal .openNewTab{position:relative;margin-top:1rem;color:var(--brand-dark);font-size:.75rem;text-decoration:underline}.infoModal .itemTitle{font-weight:400;max-width:60%;font-size:1.25rem;margin-top:1rem;margin-bottom:1rem}.infoModal .infoModalAddButton{background:var(--primary-color);color:#000;width:93%;font-size:.8rem;padding:.7rem 0;cursor:pointer;margin-top:1rem;transition:.2s}.infoModal .infoModalAddButton:hover{background:white;border:2px solid black}.disabledInfoModalAddButton{pointer-events:none;opacity:.5;background:#c7c7c7!important}.infoModal .itemDescription{max-width:70%;font-size:1rem;line-height:1.25rem;display:-webkit-box;-webkit-box-orient:vertical;white-space:pre-wrap;text-align:-webkit-left}.infoModal .infoModalDimensions{color:var(--brand-dark);opacity:.4;font-weight:700;font-size:.875rem;margin-top:1rem}.infoModal .infoModalActions{width:100%;margin-top:2rem}.infoModal .infoModalActions button{width:65%;padding:.6875rem;text-align:center;color:var(--brand-dark);pointer-events:none;font-size:1.25rem;font-weight:700;background:#f8f8f8}.addToCartDisabled{background:#00000057!important;opacity:.75;cursor:not-allowed!important}.previewCartModal{position:absolute;width:100%;height:calc(100% + 5rem);left:0;top:-5rem;z-index:9;background:#fff;box-shadow:0 4.96px 19.84px #0000001a;border-radius:.75rem .75rem 0 0;display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;opacity:0;pointer-events:none;transition:.2s all ease;-webkit-transition:.2s all ease;overflow:hidden;padding-top:5.75rem}.previewCartModal .cartTitle{font-size:1.25rem;font-weight:700;position:absolute;left:2rem;top:2.5rem}.previewCartModal.open{opacity:1;pointer-events:all}.previewCartModal.mobile{display:none}.previewCartModal .previewCartContent{overflow:auto;padding:0 1.5rem;width:100%;height:100%;position:absolute}.previewCartModal .checkoutButton{position:relative;width:20.625rem;background:var(--primary-color);color:#fff;display:flex;align-items:center;text-align:center;padding:.6875rem 1rem;border-radius:.25rem;justify-content:center;cursor:pointer}.previewCartModal .checkoutButton:focus{padding:2px;border:2px solid rgb(0,132,255)!important}.previewCartModal .checkoutButton:disabled{background:#00000057!important;opacity:.75;cursor:not-allowed!important}.previewCartModal .checkoutButton img{margin-left:.25rem}.previewCartModal .checkoutButton span{font-size:.6875rem;text-transform:uppercase;font-weight:700}.previewCartModal button{background:transparent;border:none;outline:none;cursor:pointer}.previewCartModal .closeButton{position:absolute;right:1.5rem;top:1.5rem}.previewCartModal .closeButton img{width:1.5rem}.cartItem{display:flex;align-items:flex-start;max-width:100%}.cartItemOutOfStock{border:1px solid #d0342c;border-radius:5px}.cartItem:nth-child(n+1){margin-bottom:1rem}.cartItem .cartItemImage{width:6.25rem;height:6.25rem;padding:.5rem;background:#ffffff;box-shadow:0 2px 8px #0000001a;border-radius:.25rem;margin-right:1rem;display:flex;justify-content:center;align-items:center}.cartItem .cartItemImage img{width:100%;height:auto;max-width:100%;max-height:100%}.cartItem .cartItemDetails{display:flex;flex-direction:column;width:calc(100% - 6.25rem);justify-content:flex-start;padding-top:.75rem}.cartItem .cartItemDetails h4{font-size:.75rem;font-weight:400;padding-top:.25rem;white-space:pre-line}.cartItem .cartItemDetails h5{font-size:.7rem;font-weight:400;padding-top:.25rem;white-space:pre-line}.cartRowImage{height:.8rem}.cartItem .cartRow{margin-top:1rem;width:100%;display:flex;justify-content:flex-start;align-items:center;color:red;gap:.25rem}.cartItem .itemCount{font-size:.7rem}.cartItem .qtyContainer{display:flex;gap:.5rem;color:var(--primary-color);margin-right:1.75rem}.cartItem .qtyContainer span{display:none}.cartItem .qtyContainer button{color:var(--primary-color)}.cartItem .qtyContainer input{color:#333;width:1.7rem;padding:.25rem .5rem;border-radius:3px;background:#eeeeee;border:none}.cartItem .deleteCartButton{font-size:.6875rem;text-decoration:underline;color:#333;display:flex;margin-top:.5rem}.cartItem .deleteCartButton:hover{color:var(--primary-color)}.cartItem .itemPrice{font-size:.7rem}.cartItem .itemAvailable{font-size:.5rem}.cartItem .actionButton{margin-top:.2rem;font-weight:600;font-size:.9rem;cursor:pointer}.color-grid{display:flex;gap:1rem;margin-top:.5rem;flex-wrap:wrap;align-items:flex-start}.colorSelector{cursor:pointer;display:flex;flex-direction:column;align-items:center}.colorSelector .colorThumbnailContainer{position:relative}.colorSelector .colorThumbnailContainer .colorThumbnail{width:5rem;height:5rem;position:relative;overflow:hidden}.colorSelector .colorThumbnailContainer .checkMark{width:100%;height:100%;display:flex;justify-content:center;align-items:center;position:absolute;left:0;top:0}.colorSelector .colorThumbnailContainer .checkMark img{opacity:0;transition:.1s all ease;width:45%;filter:invert(100%) sepia(100%) saturate(2%) hue-rotate(188deg) brightness(101%)}.colorSelector.selected .colorThumbnailContainer .checkMark img{opacity:1}.colorSelector .colorDetails{margin-top:.5rem;text-align:center}.colorDetails .colorDetailsLabel{width:100px}.colorSelector .colorDetails p{margin:0;font-size:.75rem;color:var(--brand-dark)}.colorDetails .redText{color:#d0342c!important;font-size:.6rem!important;font-weight:800}.colorSelector .colorDetails p:nth-child(1){font-weight:600}.colorSelector .colorDetails p:nth-child(2){font-weight:400}
|
|
@@ -9099,7 +9099,7 @@ No matching component was found for:
|
|
|
9099
9099
|
* https://github.com/yomotsu/camera-controls
|
|
9100
9100
|
* (c) 2017 @yomotsu
|
|
9101
9101
|
* Released under the MIT License.
|
|
9102
|
-
*/const MOUSE_BUTTON={LEFT:1,RIGHT:2,MIDDLE:4},ACTION=Object.freeze({NONE:0,ROTATE:1,TRUCK:2,OFFSET:4,DOLLY:8,ZOOM:16,TOUCH_ROTATE:32,TOUCH_TRUCK:64,TOUCH_OFFSET:128,TOUCH_DOLLY:256,TOUCH_ZOOM:512,TOUCH_DOLLY_TRUCK:1024,TOUCH_DOLLY_OFFSET:2048,TOUCH_DOLLY_ROTATE:4096,TOUCH_ZOOM_TRUCK:8192,TOUCH_ZOOM_OFFSET:16384,TOUCH_ZOOM_ROTATE:32768}),DOLLY_DIRECTION={NONE:0,IN:1,OUT:-1};function isPerspectiveCamera(o){return o.isPerspectiveCamera}function isOrthographicCamera(o){return o.isOrthographicCamera}const PI_2=Math.PI*2,PI_HALF=Math.PI/2,EPSILON=1e-5,DEG2RAD=Math.PI/180;function clamp(o,s,a){return Math.max(s,Math.min(a,o))}function approxZero(o,s=EPSILON){return Math.abs(o)<s}function approxEquals(o,s,a=EPSILON){return approxZero(o-s,a)}function roundToStep(o,s){return Math.round(o/s)*s}function infinityToMaxNumber(o){return isFinite(o)?o:o<0?-Number.MAX_VALUE:Number.MAX_VALUE}function maxNumberToInfinity(o){return Math.abs(o)<Number.MAX_VALUE?o:o*(1/0)}function smoothDamp(o,s,a,b,_e=1/0,bt){b=Math.max(1e-4,b);const rn=2/b,sn=rn*bt,yn=1/(1+sn+.48*sn*sn+.235*sn*sn*sn);let Pn=o-s;const zn=s,lr=_e*b;Pn=clamp(Pn,-lr,lr),s=o-Pn;const ar=(a.value+rn*Pn)*bt;a.value=(a.value-rn*ar)*yn;let cr=s+(Pn+ar)*yn;return zn-o>0==cr>zn&&(cr=zn,a.value=(cr-zn)/bt),cr}function smoothDampVec3(o,s,a,b,_e=1/0,bt,rn){b=Math.max(1e-4,b);const sn=2/b,yn=sn*bt,Pn=1/(1+yn+.48*yn*yn+.235*yn*yn*yn);let zn=s.x,lr=s.y,ar=s.z,cr=o.x-zn,hr=o.y-lr,es=o.z-ar;const Ur=zn,Dr=lr,zr=ar,rs=_e*b,as=rs*rs,os=cr*cr+hr*hr+es*es;if(os>as){const Ty=Math.sqrt(os);cr=cr/Ty*rs,hr=hr/Ty*rs,es=es/Ty*rs}zn=o.x-cr,lr=o.y-hr,ar=o.z-es;const ls=(a.x+sn*cr)*bt,zs=(a.y+sn*hr)*bt,ho=(a.z+sn*es)*bt;a.x=(a.x-sn*ls)*Pn,a.y=(a.y-sn*zs)*Pn,a.z=(a.z-sn*ho)*Pn,rn.x=zn+(cr+ls)*Pn,rn.y=lr+(hr+zs)*Pn,rn.z=ar+(es+ho)*Pn;const ga=Ur-o.x,mo=Dr-o.y,go=zr-o.z,yl=rn.x-Ur,Zl=rn.y-Dr,_d=rn.z-zr;return ga*yl+mo*Zl+go*_d>0&&(rn.x=Ur,rn.y=Dr,rn.z=zr,a.x=(rn.x-Ur)/bt,a.y=(rn.y-Dr)/bt,a.z=(rn.z-zr)/bt),rn}function extractClientCoordFromEvent(o,s){s.set(0,0),o.forEach(a=>{s.x+=a.clientX,s.y+=a.clientY}),s.x/=o.length,s.y/=o.length}function notSupportedInOrthographicCamera(o,s){return isOrthographicCamera(o)?(console.warn(`${s} is not supported in OrthographicCamera`),!0):!1}let EventDispatcher$1=class{constructor(){this._listeners={}}addEventListener(s,a){const b=this._listeners;b[s]===void 0&&(b[s]=[]),b[s].indexOf(a)===-1&&b[s].push(a)}hasEventListener(s,a){const b=this._listeners;return b[s]!==void 0&&b[s].indexOf(a)!==-1}removeEventListener(s,a){const _e=this._listeners[s];if(_e!==void 0){const bt=_e.indexOf(a);bt!==-1&&_e.splice(bt,1)}}removeAllEventListeners(s){if(!s){this._listeners={};return}Array.isArray(this._listeners[s])&&(this._listeners[s].length=0)}dispatchEvent(s){const b=this._listeners[s.type];if(b!==void 0){s.target=this;const _e=b.slice(0);for(let bt=0,rn=_e.length;bt<rn;bt++)_e[bt].call(this,s)}}};const VERSION="2.7.3",TOUCH_DOLLY_FACTOR=1/8,isBrowser=typeof window<"u",isMac=isBrowser&&/Mac/.test(navigator.platform),isPointerEventsNotSupported=!(isBrowser&&"PointerEvent"in window);let THREE,_ORIGIN,_AXIS_Y,_AXIS_Z,_v2,_v3A,_v3B,_v3C,_cameraDirection,_xColumn,_yColumn,_zColumn,_deltaTarget,_deltaOffset,_sphericalA,_sphericalB,_box3A,_box3B,_sphere,_quaternionA,_quaternionB,_rotationMatrix,_raycaster,CameraControls$1=class YD extends EventDispatcher$1{static install(s){THREE=s.THREE,_ORIGIN=Object.freeze(new THREE.Vector3(0,0,0)),_AXIS_Y=Object.freeze(new THREE.Vector3(0,1,0)),_AXIS_Z=Object.freeze(new THREE.Vector3(0,0,1)),_v2=new THREE.Vector2,_v3A=new THREE.Vector3,_v3B=new THREE.Vector3,_v3C=new THREE.Vector3,_cameraDirection=new THREE.Vector3,_xColumn=new THREE.Vector3,_yColumn=new THREE.Vector3,_zColumn=new THREE.Vector3,_deltaTarget=new THREE.Vector3,_deltaOffset=new THREE.Vector3,_sphericalA=new THREE.Spherical,_sphericalB=new THREE.Spherical,_box3A=new THREE.Box3,_box3B=new THREE.Box3,_sphere=new THREE.Sphere,_quaternionA=new THREE.Quaternion,_quaternionB=new THREE.Quaternion,_rotationMatrix=new THREE.Matrix4,_raycaster=new THREE.Raycaster}static get ACTION(){return ACTION}constructor(s,a){super(),this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.minDistance=Number.EPSILON,this.maxDistance=1/0,this.infinityDolly=!1,this.minZoom=.01,this.maxZoom=1/0,this.smoothTime=.25,this.draggingSmoothTime=.125,this.maxSpeed=1/0,this.azimuthRotateSpeed=1,this.polarRotateSpeed=1,this.dollySpeed=1,this.dollyDragInverted=!1,this.truckSpeed=2,this.dollyToCursor=!1,this.dragToOffset=!1,this.verticalDragToForward=!1,this.boundaryFriction=0,this.restThreshold=.01,this.colliderMeshes=[],this.cancel=()=>{},this._enabled=!0,this._state=ACTION.NONE,this._viewport=null,this._changedDolly=0,this._changedZoom=0,this._hasRested=!0,this._boundaryEnclosesCamera=!1,this._needsUpdate=!0,this._updatedLastTime=!1,this._elementRect=new DOMRect,this._isDragging=!1,this._dragNeedsUpdate=!0,this._activePointers=[],this._lockedPointer=null,this._interactiveArea=new DOMRect(0,0,1,1),this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._isUserControllingOffset=!1,this._isUserControllingZoom=!1,this._lastDollyDirection=DOLLY_DIRECTION.NONE,this._thetaVelocity={value:0},this._phiVelocity={value:0},this._radiusVelocity={value:0},this._targetVelocity=new THREE.Vector3,this._focalOffsetVelocity=new THREE.Vector3,this._zoomVelocity={value:0},this._truckInternal=(as,os,ls)=>{let zs,ho;if(isPerspectiveCamera(this._camera)){const ga=_v3A.copy(this._camera.position).sub(this._target),mo=this._camera.getEffectiveFOV()*DEG2RAD,go=ga.length()*Math.tan(mo*.5);zs=this.truckSpeed*as*go/this._elementRect.height,ho=this.truckSpeed*os*go/this._elementRect.height}else if(isOrthographicCamera(this._camera)){const ga=this._camera;zs=as*(ga.right-ga.left)/ga.zoom/this._elementRect.width,ho=os*(ga.top-ga.bottom)/ga.zoom/this._elementRect.height}else return;this.verticalDragToForward?(ls?this.setFocalOffset(this._focalOffsetEnd.x+zs,this._focalOffsetEnd.y,this._focalOffsetEnd.z,!0):this.truck(zs,0,!0),this.forward(-ho,!0)):ls?this.setFocalOffset(this._focalOffsetEnd.x+zs,this._focalOffsetEnd.y+ho,this._focalOffsetEnd.z,!0):this.truck(zs,ho,!0)},this._rotateInternal=(as,os)=>{const ls=PI_2*this.azimuthRotateSpeed*as/this._elementRect.height,zs=PI_2*this.polarRotateSpeed*os/this._elementRect.height;this.rotate(ls,zs,!0)},this._dollyInternal=(as,os,ls)=>{const zs=Math.pow(.95,-as*this.dollySpeed),ho=this._sphericalEnd.radius,ga=this._sphericalEnd.radius*zs,mo=clamp(ga,this.minDistance,this.maxDistance),go=mo-ga;this.infinityDolly&&this.dollyToCursor?this._dollyToNoClamp(ga,!0):this.infinityDolly&&!this.dollyToCursor?(this.dollyInFixed(go,!0),this._dollyToNoClamp(mo,!0)):this._dollyToNoClamp(mo,!0),this.dollyToCursor&&(this._changedDolly+=(this.infinityDolly?ga:mo)-ho,this._dollyControlCoord.set(os,ls)),this._lastDollyDirection=Math.sign(-as)},this._zoomInternal=(as,os,ls)=>{const zs=Math.pow(.95,as*this.dollySpeed),ho=this._zoom,ga=this._zoom*zs;this.zoomTo(ga,!0),this.dollyToCursor&&(this._changedZoom+=ga-ho,this._dollyControlCoord.set(os,ls))},typeof THREE>"u"&&console.error("camera-controls: `THREE` is undefined. You must first run `CameraControls.install( { THREE: THREE } )`. Check the docs for further information."),this._camera=s,this._yAxisUpSpace=new THREE.Quaternion().setFromUnitVectors(this._camera.up,_AXIS_Y),this._yAxisUpSpaceInverse=this._yAxisUpSpace.clone().invert(),this._state=ACTION.NONE,this._target=new THREE.Vector3,this._targetEnd=this._target.clone(),this._focalOffset=new THREE.Vector3,this._focalOffsetEnd=this._focalOffset.clone(),this._spherical=new THREE.Spherical().setFromVector3(_v3A.copy(this._camera.position).applyQuaternion(this._yAxisUpSpace)),this._sphericalEnd=this._spherical.clone(),this._lastDistance=this._spherical.radius,this._zoom=this._camera.zoom,this._zoomEnd=this._zoom,this._lastZoom=this._zoom,this._nearPlaneCorners=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3],this._updateNearPlaneCorners(),this._boundary=new THREE.Box3(new THREE.Vector3(-1/0,-1/0,-1/0),new THREE.Vector3(1/0,1/0,1/0)),this._cameraUp0=this._camera.up.clone(),this._target0=this._target.clone(),this._position0=this._camera.position.clone(),this._zoom0=this._zoom,this._focalOffset0=this._focalOffset.clone(),this._dollyControlCoord=new THREE.Vector2,this.mouseButtons={left:ACTION.ROTATE,middle:ACTION.DOLLY,right:ACTION.TRUCK,wheel:isPerspectiveCamera(this._camera)?ACTION.DOLLY:isOrthographicCamera(this._camera)?ACTION.ZOOM:ACTION.NONE},this.touches={one:ACTION.TOUCH_ROTATE,two:isPerspectiveCamera(this._camera)?ACTION.TOUCH_DOLLY_TRUCK:isOrthographicCamera(this._camera)?ACTION.TOUCH_ZOOM_TRUCK:ACTION.NONE,three:ACTION.TOUCH_TRUCK};const b=new THREE.Vector2,_e=new THREE.Vector2,bt=new THREE.Vector2,rn=as=>{if(!this._enabled||!this._domElement)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const zs=this._domElement.getBoundingClientRect(),ho=as.clientX/zs.width,ga=as.clientY/zs.height;if(ho<this._interactiveArea.left||ho>this._interactiveArea.right||ga<this._interactiveArea.top||ga>this._interactiveArea.bottom)return}const os=as.pointerType!=="mouse"?null:(as.buttons&MOUSE_BUTTON.LEFT)===MOUSE_BUTTON.LEFT?MOUSE_BUTTON.LEFT:(as.buttons&MOUSE_BUTTON.MIDDLE)===MOUSE_BUTTON.MIDDLE?MOUSE_BUTTON.MIDDLE:(as.buttons&MOUSE_BUTTON.RIGHT)===MOUSE_BUTTON.RIGHT?MOUSE_BUTTON.RIGHT:null;if(os!==null){const zs=this._findPointerByMouseButton(os);zs&&this._disposePointer(zs)}if((as.buttons&MOUSE_BUTTON.LEFT)===MOUSE_BUTTON.LEFT&&this._lockedPointer)return;const ls={pointerId:as.pointerId,clientX:as.clientX,clientY:as.clientY,deltaX:0,deltaY:0,mouseButton:os};this._activePointers.push(ls),this._domElement.ownerDocument.removeEventListener("pointermove",yn,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",zn),this._domElement.ownerDocument.addEventListener("pointermove",yn,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",zn),this._isDragging=!0,es(as)},sn=as=>{if(!this._enabled||!this._domElement||this._lockedPointer)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const zs=this._domElement.getBoundingClientRect(),ho=as.clientX/zs.width,ga=as.clientY/zs.height;if(ho<this._interactiveArea.left||ho>this._interactiveArea.right||ga<this._interactiveArea.top||ga>this._interactiveArea.bottom)return}const os=(as.buttons&MOUSE_BUTTON.LEFT)===MOUSE_BUTTON.LEFT?MOUSE_BUTTON.LEFT:(as.buttons&MOUSE_BUTTON.MIDDLE)===MOUSE_BUTTON.MIDDLE?MOUSE_BUTTON.MIDDLE:(as.buttons&MOUSE_BUTTON.RIGHT)===MOUSE_BUTTON.RIGHT?MOUSE_BUTTON.RIGHT:null;if(os!==null){const zs=this._findPointerByMouseButton(os);zs&&this._disposePointer(zs)}const ls={pointerId:1,clientX:as.clientX,clientY:as.clientY,deltaX:0,deltaY:0,mouseButton:(as.buttons&MOUSE_BUTTON.LEFT)===MOUSE_BUTTON.LEFT?MOUSE_BUTTON.LEFT:(as.buttons&MOUSE_BUTTON.MIDDLE)===MOUSE_BUTTON.LEFT?MOUSE_BUTTON.MIDDLE:(as.buttons&MOUSE_BUTTON.RIGHT)===MOUSE_BUTTON.LEFT?MOUSE_BUTTON.RIGHT:null};this._activePointers.push(ls),this._domElement.ownerDocument.removeEventListener("mousemove",Pn),this._domElement.ownerDocument.removeEventListener("mouseup",lr),this._domElement.ownerDocument.addEventListener("mousemove",Pn),this._domElement.ownerDocument.addEventListener("mouseup",lr),this._isDragging=!0,es(as)},yn=as=>{as.cancelable&&as.preventDefault();const os=as.pointerId,ls=this._lockedPointer||this._findPointerById(os);if(ls){if(ls.clientX=as.clientX,ls.clientY=as.clientY,ls.deltaX=as.movementX,ls.deltaY=as.movementY,this._state=0,as.pointerType==="touch")switch(this._activePointers.length){case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else(!this._isDragging&&this._lockedPointer||this._isDragging&&(as.buttons&MOUSE_BUTTON.LEFT)===MOUSE_BUTTON.LEFT)&&(this._state=this._state|this.mouseButtons.left),this._isDragging&&(as.buttons&MOUSE_BUTTON.MIDDLE)===MOUSE_BUTTON.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),this._isDragging&&(as.buttons&MOUSE_BUTTON.RIGHT)===MOUSE_BUTTON.RIGHT&&(this._state=this._state|this.mouseButtons.right);Ur()}},Pn=as=>{const os=this._lockedPointer||this._findPointerById(1);os&&(os.clientX=as.clientX,os.clientY=as.clientY,os.deltaX=as.movementX,os.deltaY=as.movementY,this._state=0,(this._lockedPointer||(as.buttons&MOUSE_BUTTON.LEFT)===MOUSE_BUTTON.LEFT)&&(this._state=this._state|this.mouseButtons.left),(as.buttons&MOUSE_BUTTON.MIDDLE)===MOUSE_BUTTON.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),(as.buttons&MOUSE_BUTTON.RIGHT)===MOUSE_BUTTON.RIGHT&&(this._state=this._state|this.mouseButtons.right),Ur())},zn=as=>{const os=this._findPointerById(as.pointerId);if(!(os&&os===this._lockedPointer)){if(os&&this._disposePointer(os),as.pointerType==="touch")switch(this._activePointers.length){case 0:this._state=ACTION.NONE;break;case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else this._state=ACTION.NONE;Dr()}},lr=()=>{const as=this._findPointerById(1);as&&as===this._lockedPointer||(as&&this._disposePointer(as),this._state=ACTION.NONE,Dr())};let ar=-1;const cr=as=>{if(!this._domElement||!this._enabled||this.mouseButtons.wheel===ACTION.NONE)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const ga=this._domElement.getBoundingClientRect(),mo=as.clientX/ga.width,go=as.clientY/ga.height;if(mo<this._interactiveArea.left||mo>this._interactiveArea.right||go<this._interactiveArea.top||go>this._interactiveArea.bottom)return}if(as.preventDefault(),this.dollyToCursor||this.mouseButtons.wheel===ACTION.ROTATE||this.mouseButtons.wheel===ACTION.TRUCK){const ga=performance.now();ar-ga<1e3&&this._getClientRect(this._elementRect),ar=ga}const os=isMac?-1:-3,ls=as.deltaMode===1?as.deltaY/os:as.deltaY/(os*10),zs=this.dollyToCursor?(as.clientX-this._elementRect.x)/this._elementRect.width*2-1:0,ho=this.dollyToCursor?(as.clientY-this._elementRect.y)/this._elementRect.height*-2+1:0;switch(this.mouseButtons.wheel){case ACTION.ROTATE:{this._rotateInternal(as.deltaX,as.deltaY),this._isUserControllingRotate=!0;break}case ACTION.TRUCK:{this._truckInternal(as.deltaX,as.deltaY,!1),this._isUserControllingTruck=!0;break}case ACTION.OFFSET:{this._truckInternal(as.deltaX,as.deltaY,!0),this._isUserControllingOffset=!0;break}case ACTION.DOLLY:{this._dollyInternal(-ls,zs,ho),this._isUserControllingDolly=!0;break}case ACTION.ZOOM:{this._zoomInternal(-ls,zs,ho),this._isUserControllingZoom=!0;break}}this.dispatchEvent({type:"control"})},hr=as=>{if(!(!this._domElement||!this._enabled)){if(this.mouseButtons.right===YD.ACTION.NONE){const os=as instanceof PointerEvent?as.pointerId:(as instanceof MouseEvent,0),ls=this._findPointerById(os);ls&&this._disposePointer(ls),this._domElement.ownerDocument.removeEventListener("pointermove",yn,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",zn),this._domElement.ownerDocument.removeEventListener("mousemove",Pn),this._domElement.ownerDocument.removeEventListener("mouseup",lr);return}as.preventDefault()}},es=as=>{if(!this._enabled)return;if(extractClientCoordFromEvent(this._activePointers,_v2),this._getClientRect(this._elementRect),b.copy(_v2),_e.copy(_v2),this._activePointers.length>=2){const ls=_v2.x-this._activePointers[1].clientX,zs=_v2.y-this._activePointers[1].clientY,ho=Math.sqrt(ls*ls+zs*zs);bt.set(0,ho);const ga=(this._activePointers[0].clientX+this._activePointers[1].clientX)*.5,mo=(this._activePointers[0].clientY+this._activePointers[1].clientY)*.5;_e.set(ga,mo)}if(this._state=0,!as)this._lockedPointer&&(this._state=this._state|this.mouseButtons.left);else if("pointerType"in as&&as.pointerType==="touch")switch(this._activePointers.length){case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else!this._lockedPointer&&(as.buttons&MOUSE_BUTTON.LEFT)===MOUSE_BUTTON.LEFT&&(this._state=this._state|this.mouseButtons.left),(as.buttons&MOUSE_BUTTON.MIDDLE)===MOUSE_BUTTON.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),(as.buttons&MOUSE_BUTTON.RIGHT)===MOUSE_BUTTON.RIGHT&&(this._state=this._state|this.mouseButtons.right);((this._state&ACTION.ROTATE)===ACTION.ROTATE||(this._state&ACTION.TOUCH_ROTATE)===ACTION.TOUCH_ROTATE||(this._state&ACTION.TOUCH_DOLLY_ROTATE)===ACTION.TOUCH_DOLLY_ROTATE||(this._state&ACTION.TOUCH_ZOOM_ROTATE)===ACTION.TOUCH_ZOOM_ROTATE)&&(this._sphericalEnd.theta=this._spherical.theta,this._sphericalEnd.phi=this._spherical.phi,this._thetaVelocity.value=0,this._phiVelocity.value=0),((this._state&ACTION.TRUCK)===ACTION.TRUCK||(this._state&ACTION.TOUCH_TRUCK)===ACTION.TOUCH_TRUCK||(this._state&ACTION.TOUCH_DOLLY_TRUCK)===ACTION.TOUCH_DOLLY_TRUCK||(this._state&ACTION.TOUCH_ZOOM_TRUCK)===ACTION.TOUCH_ZOOM_TRUCK)&&(this._targetEnd.copy(this._target),this._targetVelocity.set(0,0,0)),((this._state&ACTION.DOLLY)===ACTION.DOLLY||(this._state&ACTION.TOUCH_DOLLY)===ACTION.TOUCH_DOLLY||(this._state&ACTION.TOUCH_DOLLY_TRUCK)===ACTION.TOUCH_DOLLY_TRUCK||(this._state&ACTION.TOUCH_DOLLY_OFFSET)===ACTION.TOUCH_DOLLY_OFFSET||(this._state&ACTION.TOUCH_DOLLY_ROTATE)===ACTION.TOUCH_DOLLY_ROTATE)&&(this._sphericalEnd.radius=this._spherical.radius,this._radiusVelocity.value=0),((this._state&ACTION.ZOOM)===ACTION.ZOOM||(this._state&ACTION.TOUCH_ZOOM)===ACTION.TOUCH_ZOOM||(this._state&ACTION.TOUCH_ZOOM_TRUCK)===ACTION.TOUCH_ZOOM_TRUCK||(this._state&ACTION.TOUCH_ZOOM_OFFSET)===ACTION.TOUCH_ZOOM_OFFSET||(this._state&ACTION.TOUCH_ZOOM_ROTATE)===ACTION.TOUCH_ZOOM_ROTATE)&&(this._zoomEnd=this._zoom,this._zoomVelocity.value=0),((this._state&ACTION.OFFSET)===ACTION.OFFSET||(this._state&ACTION.TOUCH_OFFSET)===ACTION.TOUCH_OFFSET||(this._state&ACTION.TOUCH_DOLLY_OFFSET)===ACTION.TOUCH_DOLLY_OFFSET||(this._state&ACTION.TOUCH_ZOOM_OFFSET)===ACTION.TOUCH_ZOOM_OFFSET)&&(this._focalOffsetEnd.copy(this._focalOffset),this._focalOffsetVelocity.set(0,0,0)),this.dispatchEvent({type:"controlstart"})},Ur=()=>{if(!this._enabled||!this._dragNeedsUpdate)return;this._dragNeedsUpdate=!1,extractClientCoordFromEvent(this._activePointers,_v2);const os=this._domElement&&document.pointerLockElement===this._domElement?this._lockedPointer||this._activePointers[0]:null,ls=os?-os.deltaX:_e.x-_v2.x,zs=os?-os.deltaY:_e.y-_v2.y;if(_e.copy(_v2),((this._state&ACTION.ROTATE)===ACTION.ROTATE||(this._state&ACTION.TOUCH_ROTATE)===ACTION.TOUCH_ROTATE||(this._state&ACTION.TOUCH_DOLLY_ROTATE)===ACTION.TOUCH_DOLLY_ROTATE||(this._state&ACTION.TOUCH_ZOOM_ROTATE)===ACTION.TOUCH_ZOOM_ROTATE)&&(this._rotateInternal(ls,zs),this._isUserControllingRotate=!0),(this._state&ACTION.DOLLY)===ACTION.DOLLY||(this._state&ACTION.ZOOM)===ACTION.ZOOM){const ho=this.dollyToCursor?(b.x-this._elementRect.x)/this._elementRect.width*2-1:0,ga=this.dollyToCursor?(b.y-this._elementRect.y)/this._elementRect.height*-2+1:0,mo=this.dollyDragInverted?-1:1;(this._state&ACTION.DOLLY)===ACTION.DOLLY?(this._dollyInternal(mo*zs*TOUCH_DOLLY_FACTOR,ho,ga),this._isUserControllingDolly=!0):(this._zoomInternal(mo*zs*TOUCH_DOLLY_FACTOR,ho,ga),this._isUserControllingZoom=!0)}if((this._state&ACTION.TOUCH_DOLLY)===ACTION.TOUCH_DOLLY||(this._state&ACTION.TOUCH_ZOOM)===ACTION.TOUCH_ZOOM||(this._state&ACTION.TOUCH_DOLLY_TRUCK)===ACTION.TOUCH_DOLLY_TRUCK||(this._state&ACTION.TOUCH_ZOOM_TRUCK)===ACTION.TOUCH_ZOOM_TRUCK||(this._state&ACTION.TOUCH_DOLLY_OFFSET)===ACTION.TOUCH_DOLLY_OFFSET||(this._state&ACTION.TOUCH_ZOOM_OFFSET)===ACTION.TOUCH_ZOOM_OFFSET||(this._state&ACTION.TOUCH_DOLLY_ROTATE)===ACTION.TOUCH_DOLLY_ROTATE||(this._state&ACTION.TOUCH_ZOOM_ROTATE)===ACTION.TOUCH_ZOOM_ROTATE){const ho=_v2.x-this._activePointers[1].clientX,ga=_v2.y-this._activePointers[1].clientY,mo=Math.sqrt(ho*ho+ga*ga),go=bt.y-mo;bt.set(0,mo);const yl=this.dollyToCursor?(_e.x-this._elementRect.x)/this._elementRect.width*2-1:0,Zl=this.dollyToCursor?(_e.y-this._elementRect.y)/this._elementRect.height*-2+1:0;(this._state&ACTION.TOUCH_DOLLY)===ACTION.TOUCH_DOLLY||(this._state&ACTION.TOUCH_DOLLY_ROTATE)===ACTION.TOUCH_DOLLY_ROTATE||(this._state&ACTION.TOUCH_DOLLY_TRUCK)===ACTION.TOUCH_DOLLY_TRUCK||(this._state&ACTION.TOUCH_DOLLY_OFFSET)===ACTION.TOUCH_DOLLY_OFFSET?(this._dollyInternal(go*TOUCH_DOLLY_FACTOR,yl,Zl),this._isUserControllingDolly=!0):(this._zoomInternal(go*TOUCH_DOLLY_FACTOR,yl,Zl),this._isUserControllingZoom=!0)}((this._state&ACTION.TRUCK)===ACTION.TRUCK||(this._state&ACTION.TOUCH_TRUCK)===ACTION.TOUCH_TRUCK||(this._state&ACTION.TOUCH_DOLLY_TRUCK)===ACTION.TOUCH_DOLLY_TRUCK||(this._state&ACTION.TOUCH_ZOOM_TRUCK)===ACTION.TOUCH_ZOOM_TRUCK)&&(this._truckInternal(ls,zs,!1),this._isUserControllingTruck=!0),((this._state&ACTION.OFFSET)===ACTION.OFFSET||(this._state&ACTION.TOUCH_OFFSET)===ACTION.TOUCH_OFFSET||(this._state&ACTION.TOUCH_DOLLY_OFFSET)===ACTION.TOUCH_DOLLY_OFFSET||(this._state&ACTION.TOUCH_ZOOM_OFFSET)===ACTION.TOUCH_ZOOM_OFFSET)&&(this._truckInternal(ls,zs,!0),this._isUserControllingOffset=!0),this.dispatchEvent({type:"control"})},Dr=()=>{extractClientCoordFromEvent(this._activePointers,_v2),_e.copy(_v2),this._dragNeedsUpdate=!1,(this._activePointers.length===0||this._activePointers.length===1&&this._activePointers[0]===this._lockedPointer)&&(this._isDragging=!1),this._activePointers.length===0&&this._domElement&&(this._domElement.ownerDocument.removeEventListener("pointermove",yn,{passive:!1}),this._domElement.ownerDocument.removeEventListener("mousemove",Pn),this._domElement.ownerDocument.removeEventListener("pointerup",zn),this._domElement.ownerDocument.removeEventListener("mouseup",lr),this.dispatchEvent({type:"controlend"}))};this.lockPointer=()=>{!this._enabled||!this._domElement||(this.cancel(),this._lockedPointer={pointerId:-1,clientX:0,clientY:0,deltaX:0,deltaY:0,mouseButton:null},this._activePointers.push(this._lockedPointer),this._domElement.ownerDocument.removeEventListener("pointermove",yn,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",zn),this._domElement.requestPointerLock(),this._domElement.ownerDocument.addEventListener("pointerlockchange",zr),this._domElement.ownerDocument.addEventListener("pointerlockerror",rs),this._domElement.ownerDocument.addEventListener("pointermove",yn,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",zn),es())},this.unlockPointer=()=>{this._lockedPointer!==null&&(this._disposePointer(this._lockedPointer),this._lockedPointer=null),document.exitPointerLock(),this.cancel(),this._domElement&&(this._domElement.ownerDocument.removeEventListener("pointerlockchange",zr),this._domElement.ownerDocument.removeEventListener("pointerlockerror",rs))};const zr=()=>{this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement||this.unlockPointer()},rs=()=>{this.unlockPointer()};this._addAllEventListeners=as=>{this._domElement=as,this._domElement.style.touchAction="none",this._domElement.style.userSelect="none",this._domElement.style.webkitUserSelect="none",this._domElement.addEventListener("pointerdown",rn),isPointerEventsNotSupported&&this._domElement.addEventListener("mousedown",sn),this._domElement.addEventListener("pointercancel",zn),this._domElement.addEventListener("wheel",cr,{passive:!1}),this._domElement.addEventListener("contextmenu",hr)},this._removeAllEventListeners=()=>{this._domElement&&(this._domElement.style.touchAction="",this._domElement.style.userSelect="",this._domElement.style.webkitUserSelect="",this._domElement.removeEventListener("pointerdown",rn),this._domElement.removeEventListener("mousedown",sn),this._domElement.removeEventListener("pointercancel",zn),this._domElement.removeEventListener("wheel",cr,{passive:!1}),this._domElement.removeEventListener("contextmenu",hr),this._domElement.ownerDocument.removeEventListener("pointermove",yn,{passive:!1}),this._domElement.ownerDocument.removeEventListener("mousemove",Pn),this._domElement.ownerDocument.removeEventListener("pointerup",zn),this._domElement.ownerDocument.removeEventListener("mouseup",lr),this._domElement.ownerDocument.removeEventListener("pointerlockchange",zr),this._domElement.ownerDocument.removeEventListener("pointerlockerror",rs))},this.cancel=()=>{this._state!==ACTION.NONE&&(this._state=ACTION.NONE,this._activePointers.length=0,Dr())},a&&this.connect(a),this.update(0)}get camera(){return this._camera}set camera(s){this._camera=s,this.updateCameraUp(),this._camera.updateProjectionMatrix(),this._updateNearPlaneCorners(),this._needsUpdate=!0}get enabled(){return this._enabled}set enabled(s){this._enabled=s,this._domElement&&(s?(this._domElement.style.touchAction="none",this._domElement.style.userSelect="none",this._domElement.style.webkitUserSelect="none"):(this.cancel(),this._domElement.style.touchAction="",this._domElement.style.userSelect="",this._domElement.style.webkitUserSelect=""))}get active(){return!this._hasRested}get currentAction(){return this._state}get distance(){return this._spherical.radius}set distance(s){this._spherical.radius===s&&this._sphericalEnd.radius===s||(this._spherical.radius=s,this._sphericalEnd.radius=s,this._needsUpdate=!0)}get azimuthAngle(){return this._spherical.theta}set azimuthAngle(s){this._spherical.theta===s&&this._sphericalEnd.theta===s||(this._spherical.theta=s,this._sphericalEnd.theta=s,this._needsUpdate=!0)}get polarAngle(){return this._spherical.phi}set polarAngle(s){this._spherical.phi===s&&this._sphericalEnd.phi===s||(this._spherical.phi=s,this._sphericalEnd.phi=s,this._needsUpdate=!0)}get boundaryEnclosesCamera(){return this._boundaryEnclosesCamera}set boundaryEnclosesCamera(s){this._boundaryEnclosesCamera=s,this._needsUpdate=!0}set interactiveArea(s){this._interactiveArea.width=clamp(s.width,0,1),this._interactiveArea.height=clamp(s.height,0,1),this._interactiveArea.x=clamp(s.x,0,1-this._interactiveArea.width),this._interactiveArea.y=clamp(s.y,0,1-this._interactiveArea.height)}addEventListener(s,a){super.addEventListener(s,a)}removeEventListener(s,a){super.removeEventListener(s,a)}rotate(s,a,b=!1){return this.rotateTo(this._sphericalEnd.theta+s,this._sphericalEnd.phi+a,b)}rotateAzimuthTo(s,a=!1){return this.rotateTo(s,this._sphericalEnd.phi,a)}rotatePolarTo(s,a=!1){return this.rotateTo(this._sphericalEnd.theta,s,a)}rotateTo(s,a,b=!1){this._isUserControllingRotate=!1;const _e=clamp(s,this.minAzimuthAngle,this.maxAzimuthAngle),bt=clamp(a,this.minPolarAngle,this.maxPolarAngle);this._sphericalEnd.theta=_e,this._sphericalEnd.phi=bt,this._sphericalEnd.makeSafe(),this._needsUpdate=!0,b||(this._spherical.theta=this._sphericalEnd.theta,this._spherical.phi=this._sphericalEnd.phi);const rn=!b||approxEquals(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&approxEquals(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold);return this._createOnRestPromise(rn)}dolly(s,a=!1){return this.dollyTo(this._sphericalEnd.radius-s,a)}dollyTo(s,a=!1){return this._isUserControllingDolly=!1,this._lastDollyDirection=DOLLY_DIRECTION.NONE,this._changedDolly=0,this._dollyToNoClamp(clamp(s,this.minDistance,this.maxDistance),a)}_dollyToNoClamp(s,a=!1){const b=this._sphericalEnd.radius;if(this.colliderMeshes.length>=1){const rn=this._collisionTest(),sn=approxEquals(rn,this._spherical.radius);if(!(b>s)&&sn)return Promise.resolve();this._sphericalEnd.radius=Math.min(s,rn)}else this._sphericalEnd.radius=s;this._needsUpdate=!0,a||(this._spherical.radius=this._sphericalEnd.radius);const bt=!a||approxEquals(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(bt)}dollyInFixed(s,a=!1){this._targetEnd.add(this._getCameraDirection(_cameraDirection).multiplyScalar(s)),a||this._target.copy(this._targetEnd);const b=!a||approxEquals(this._target.x,this._targetEnd.x,this.restThreshold)&&approxEquals(this._target.y,this._targetEnd.y,this.restThreshold)&&approxEquals(this._target.z,this._targetEnd.z,this.restThreshold);return this._createOnRestPromise(b)}zoom(s,a=!1){return this.zoomTo(this._zoomEnd+s,a)}zoomTo(s,a=!1){this._isUserControllingZoom=!1,this._zoomEnd=clamp(s,this.minZoom,this.maxZoom),this._needsUpdate=!0,a||(this._zoom=this._zoomEnd);const b=!a||approxEquals(this._zoom,this._zoomEnd,this.restThreshold);return this._changedZoom=0,this._createOnRestPromise(b)}pan(s,a,b=!1){return console.warn("`pan` has been renamed to `truck`"),this.truck(s,a,b)}truck(s,a,b=!1){this._camera.updateMatrix(),_xColumn.setFromMatrixColumn(this._camera.matrix,0),_yColumn.setFromMatrixColumn(this._camera.matrix,1),_xColumn.multiplyScalar(s),_yColumn.multiplyScalar(-a);const _e=_v3A.copy(_xColumn).add(_yColumn),bt=_v3B.copy(this._targetEnd).add(_e);return this.moveTo(bt.x,bt.y,bt.z,b)}forward(s,a=!1){_v3A.setFromMatrixColumn(this._camera.matrix,0),_v3A.crossVectors(this._camera.up,_v3A),_v3A.multiplyScalar(s);const b=_v3B.copy(this._targetEnd).add(_v3A);return this.moveTo(b.x,b.y,b.z,a)}elevate(s,a=!1){return _v3A.copy(this._camera.up).multiplyScalar(s),this.moveTo(this._targetEnd.x+_v3A.x,this._targetEnd.y+_v3A.y,this._targetEnd.z+_v3A.z,a)}moveTo(s,a,b,_e=!1){this._isUserControllingTruck=!1;const bt=_v3A.set(s,a,b).sub(this._targetEnd);this._encloseToBoundary(this._targetEnd,bt,this.boundaryFriction),this._needsUpdate=!0,_e||this._target.copy(this._targetEnd);const rn=!_e||approxEquals(this._target.x,this._targetEnd.x,this.restThreshold)&&approxEquals(this._target.y,this._targetEnd.y,this.restThreshold)&&approxEquals(this._target.z,this._targetEnd.z,this.restThreshold);return this._createOnRestPromise(rn)}lookInDirectionOf(s,a,b,_e=!1){const sn=_v3A.set(s,a,b).sub(this._targetEnd).normalize().multiplyScalar(-this._sphericalEnd.radius);return this.setPosition(sn.x,sn.y,sn.z,_e)}fitToBox(s,a,{cover:b=!1,paddingLeft:_e=0,paddingRight:bt=0,paddingBottom:rn=0,paddingTop:sn=0}={}){const yn=[],Pn=s.isBox3?_box3A.copy(s):_box3A.setFromObject(s);Pn.isEmpty()&&(console.warn("camera-controls: fitTo() cannot be used with an empty box. Aborting"),Promise.resolve());const zn=roundToStep(this._sphericalEnd.theta,PI_HALF),lr=roundToStep(this._sphericalEnd.phi,PI_HALF);yn.push(this.rotateTo(zn,lr,a));const ar=_v3A.setFromSpherical(this._sphericalEnd).normalize(),cr=_quaternionA.setFromUnitVectors(ar,_AXIS_Z),hr=approxEquals(Math.abs(ar.y),1);hr&&cr.multiply(_quaternionB.setFromAxisAngle(_AXIS_Y,zn)),cr.multiply(this._yAxisUpSpaceInverse);const es=_box3B.makeEmpty();_v3B.copy(Pn.min).applyQuaternion(cr),es.expandByPoint(_v3B),_v3B.copy(Pn.min).setX(Pn.max.x).applyQuaternion(cr),es.expandByPoint(_v3B),_v3B.copy(Pn.min).setY(Pn.max.y).applyQuaternion(cr),es.expandByPoint(_v3B),_v3B.copy(Pn.max).setZ(Pn.min.z).applyQuaternion(cr),es.expandByPoint(_v3B),_v3B.copy(Pn.min).setZ(Pn.max.z).applyQuaternion(cr),es.expandByPoint(_v3B),_v3B.copy(Pn.max).setY(Pn.min.y).applyQuaternion(cr),es.expandByPoint(_v3B),_v3B.copy(Pn.max).setX(Pn.min.x).applyQuaternion(cr),es.expandByPoint(_v3B),_v3B.copy(Pn.max).applyQuaternion(cr),es.expandByPoint(_v3B),es.min.x-=_e,es.min.y-=rn,es.max.x+=bt,es.max.y+=sn,cr.setFromUnitVectors(_AXIS_Z,ar),hr&&cr.premultiply(_quaternionB.invert()),cr.premultiply(this._yAxisUpSpace);const Ur=es.getSize(_v3A),Dr=es.getCenter(_v3B).applyQuaternion(cr);if(isPerspectiveCamera(this._camera)){const zr=this.getDistanceToFitBox(Ur.x,Ur.y,Ur.z,b);yn.push(this.moveTo(Dr.x,Dr.y,Dr.z,a)),yn.push(this.dollyTo(zr,a)),yn.push(this.setFocalOffset(0,0,0,a))}else if(isOrthographicCamera(this._camera)){const zr=this._camera,rs=zr.right-zr.left,as=zr.top-zr.bottom,os=b?Math.max(rs/Ur.x,as/Ur.y):Math.min(rs/Ur.x,as/Ur.y);yn.push(this.moveTo(Dr.x,Dr.y,Dr.z,a)),yn.push(this.zoomTo(os,a)),yn.push(this.setFocalOffset(0,0,0,a))}return Promise.all(yn)}fitToSphere(s,a){const b=[],bt=s instanceof THREE.Sphere?_sphere.copy(s):YD.createBoundingSphere(s,_sphere);if(b.push(this.moveTo(bt.center.x,bt.center.y,bt.center.z,a)),isPerspectiveCamera(this._camera)){const rn=this.getDistanceToFitSphere(bt.radius);b.push(this.dollyTo(rn,a))}else if(isOrthographicCamera(this._camera)){const rn=this._camera.right-this._camera.left,sn=this._camera.top-this._camera.bottom,yn=2*bt.radius,Pn=Math.min(rn/yn,sn/yn);b.push(this.zoomTo(Pn,a))}return b.push(this.setFocalOffset(0,0,0,a)),Promise.all(b)}setLookAt(s,a,b,_e,bt,rn,sn=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=DOLLY_DIRECTION.NONE,this._changedDolly=0;const yn=_v3B.set(_e,bt,rn),Pn=_v3A.set(s,a,b);this._targetEnd.copy(yn),this._sphericalEnd.setFromVector3(Pn.sub(yn).applyQuaternion(this._yAxisUpSpace)),this.normalizeRotations(),this._needsUpdate=!0,sn||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const zn=!sn||approxEquals(this._target.x,this._targetEnd.x,this.restThreshold)&&approxEquals(this._target.y,this._targetEnd.y,this.restThreshold)&&approxEquals(this._target.z,this._targetEnd.z,this.restThreshold)&&approxEquals(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&approxEquals(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&approxEquals(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(zn)}lerpLookAt(s,a,b,_e,bt,rn,sn,yn,Pn,zn,lr,ar,cr,hr=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=DOLLY_DIRECTION.NONE,this._changedDolly=0;const es=_v3A.set(_e,bt,rn),Ur=_v3B.set(s,a,b);_sphericalA.setFromVector3(Ur.sub(es).applyQuaternion(this._yAxisUpSpace));const Dr=_v3C.set(zn,lr,ar),zr=_v3B.set(sn,yn,Pn);_sphericalB.setFromVector3(zr.sub(Dr).applyQuaternion(this._yAxisUpSpace)),this._targetEnd.copy(es.lerp(Dr,cr));const rs=_sphericalB.theta-_sphericalA.theta,as=_sphericalB.phi-_sphericalA.phi,os=_sphericalB.radius-_sphericalA.radius;this._sphericalEnd.set(_sphericalA.radius+os*cr,_sphericalA.phi+as*cr,_sphericalA.theta+rs*cr),this.normalizeRotations(),this._needsUpdate=!0,hr||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const ls=!hr||approxEquals(this._target.x,this._targetEnd.x,this.restThreshold)&&approxEquals(this._target.y,this._targetEnd.y,this.restThreshold)&&approxEquals(this._target.z,this._targetEnd.z,this.restThreshold)&&approxEquals(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&approxEquals(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&approxEquals(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(ls)}setPosition(s,a,b,_e=!1){return this.setLookAt(s,a,b,this._targetEnd.x,this._targetEnd.y,this._targetEnd.z,_e)}setTarget(s,a,b,_e=!1){const bt=this.getPosition(_v3A),rn=this.setLookAt(bt.x,bt.y,bt.z,s,a,b,_e);return this._sphericalEnd.phi=clamp(this._sphericalEnd.phi,this.minPolarAngle,this.maxPolarAngle),rn}setFocalOffset(s,a,b,_e=!1){this._isUserControllingOffset=!1,this._focalOffsetEnd.set(s,a,b),this._needsUpdate=!0,_e||this._focalOffset.copy(this._focalOffsetEnd);const bt=!_e||approxEquals(this._focalOffset.x,this._focalOffsetEnd.x,this.restThreshold)&&approxEquals(this._focalOffset.y,this._focalOffsetEnd.y,this.restThreshold)&&approxEquals(this._focalOffset.z,this._focalOffsetEnd.z,this.restThreshold);return this._createOnRestPromise(bt)}setOrbitPoint(s,a,b){this._camera.updateMatrixWorld(),_xColumn.setFromMatrixColumn(this._camera.matrixWorldInverse,0),_yColumn.setFromMatrixColumn(this._camera.matrixWorldInverse,1),_zColumn.setFromMatrixColumn(this._camera.matrixWorldInverse,2);const _e=_v3A.set(s,a,b),bt=_e.distanceTo(this._camera.position),rn=_e.sub(this._camera.position);_xColumn.multiplyScalar(rn.x),_yColumn.multiplyScalar(rn.y),_zColumn.multiplyScalar(rn.z),_v3A.copy(_xColumn).add(_yColumn).add(_zColumn),_v3A.z=_v3A.z+bt,this.dollyTo(bt,!1),this.setFocalOffset(-_v3A.x,_v3A.y,-_v3A.z,!1),this.moveTo(s,a,b,!1)}setBoundary(s){if(!s){this._boundary.min.set(-1/0,-1/0,-1/0),this._boundary.max.set(1/0,1/0,1/0),this._needsUpdate=!0;return}this._boundary.copy(s),this._boundary.clampPoint(this._targetEnd,this._targetEnd),this._needsUpdate=!0}setViewport(s,a,b,_e){if(s===null){this._viewport=null;return}this._viewport=this._viewport||new THREE.Vector4,typeof s=="number"?this._viewport.set(s,a,b,_e):this._viewport.copy(s)}getDistanceToFitBox(s,a,b,_e=!1){if(notSupportedInOrthographicCamera(this._camera,"getDistanceToFitBox"))return this._spherical.radius;const bt=s/a,rn=this._camera.getEffectiveFOV()*DEG2RAD,sn=this._camera.aspect;return((_e?bt>sn:bt<sn)?a:s/sn)*.5/Math.tan(rn*.5)+b*.5}getDistanceToFitSphere(s){if(notSupportedInOrthographicCamera(this._camera,"getDistanceToFitSphere"))return this._spherical.radius;const a=this._camera.getEffectiveFOV()*DEG2RAD,b=Math.atan(Math.tan(a*.5)*this._camera.aspect)*2,_e=1<this._camera.aspect?a:b;return s/Math.sin(_e*.5)}getTarget(s,a=!0){return(s&&s.isVector3?s:new THREE.Vector3).copy(a?this._targetEnd:this._target)}getPosition(s,a=!0){return(s&&s.isVector3?s:new THREE.Vector3).setFromSpherical(a?this._sphericalEnd:this._spherical).applyQuaternion(this._yAxisUpSpaceInverse).add(a?this._targetEnd:this._target)}getSpherical(s,a=!0){return(s&&s instanceof THREE.Spherical?s:new THREE.Spherical).copy(a?this._sphericalEnd:this._spherical)}getFocalOffset(s,a=!0){return(s&&s.isVector3?s:new THREE.Vector3).copy(a?this._focalOffsetEnd:this._focalOffset)}normalizeRotations(){this._sphericalEnd.theta=this._sphericalEnd.theta%PI_2,this._sphericalEnd.theta<0&&(this._sphericalEnd.theta+=PI_2),this._spherical.theta+=PI_2*Math.round((this._sphericalEnd.theta-this._spherical.theta)/PI_2)}reset(s=!1){if(!approxEquals(this._camera.up.x,this._cameraUp0.x)||!approxEquals(this._camera.up.y,this._cameraUp0.y)||!approxEquals(this._camera.up.z,this._cameraUp0.z)){this._camera.up.copy(this._cameraUp0);const b=this.getPosition(_v3A);this.updateCameraUp(),this.setPosition(b.x,b.y,b.z)}const a=[this.setLookAt(this._position0.x,this._position0.y,this._position0.z,this._target0.x,this._target0.y,this._target0.z,s),this.setFocalOffset(this._focalOffset0.x,this._focalOffset0.y,this._focalOffset0.z,s),this.zoomTo(this._zoom0,s)];return Promise.all(a)}saveState(){this._cameraUp0.copy(this._camera.up),this.getTarget(this._target0),this.getPosition(this._position0),this._zoom0=this._zoom,this._focalOffset0.copy(this._focalOffset)}updateCameraUp(){this._yAxisUpSpace.setFromUnitVectors(this._camera.up,_AXIS_Y),this._yAxisUpSpaceInverse.copy(this._yAxisUpSpace).invert()}applyCameraUp(){const s=_v3A.subVectors(this._target,this._camera.position).normalize(),a=_v3B.crossVectors(s,this._camera.up);this._camera.up.crossVectors(a,s).normalize(),this._camera.updateMatrixWorld();const b=this.getPosition(_v3A);this.updateCameraUp(),this.setPosition(b.x,b.y,b.z)}update(s){const a=this._sphericalEnd.theta-this._spherical.theta,b=this._sphericalEnd.phi-this._spherical.phi,_e=this._sphericalEnd.radius-this._spherical.radius,bt=_deltaTarget.subVectors(this._targetEnd,this._target),rn=_deltaOffset.subVectors(this._focalOffsetEnd,this._focalOffset),sn=this._zoomEnd-this._zoom;if(approxZero(a))this._thetaVelocity.value=0,this._spherical.theta=this._sphericalEnd.theta;else{const lr=this._isUserControllingRotate?this.draggingSmoothTime:this.smoothTime;this._spherical.theta=smoothDamp(this._spherical.theta,this._sphericalEnd.theta,this._thetaVelocity,lr,1/0,s),this._needsUpdate=!0}if(approxZero(b))this._phiVelocity.value=0,this._spherical.phi=this._sphericalEnd.phi;else{const lr=this._isUserControllingRotate?this.draggingSmoothTime:this.smoothTime;this._spherical.phi=smoothDamp(this._spherical.phi,this._sphericalEnd.phi,this._phiVelocity,lr,1/0,s),this._needsUpdate=!0}if(approxZero(_e))this._radiusVelocity.value=0,this._spherical.radius=this._sphericalEnd.radius;else{const lr=this._isUserControllingDolly?this.draggingSmoothTime:this.smoothTime;this._spherical.radius=smoothDamp(this._spherical.radius,this._sphericalEnd.radius,this._radiusVelocity,lr,this.maxSpeed,s),this._needsUpdate=!0}if(approxZero(bt.x)&&approxZero(bt.y)&&approxZero(bt.z))this._targetVelocity.set(0,0,0),this._target.copy(this._targetEnd);else{const lr=this._isUserControllingTruck?this.draggingSmoothTime:this.smoothTime;smoothDampVec3(this._target,this._targetEnd,this._targetVelocity,lr,this.maxSpeed,s,this._target),this._needsUpdate=!0}if(approxZero(rn.x)&&approxZero(rn.y)&&approxZero(rn.z))this._focalOffsetVelocity.set(0,0,0),this._focalOffset.copy(this._focalOffsetEnd);else{const lr=this._isUserControllingOffset?this.draggingSmoothTime:this.smoothTime;smoothDampVec3(this._focalOffset,this._focalOffsetEnd,this._focalOffsetVelocity,lr,this.maxSpeed,s,this._focalOffset),this._needsUpdate=!0}if(approxZero(sn))this._zoomVelocity.value=0,this._zoom=this._zoomEnd;else{const lr=this._isUserControllingZoom?this.draggingSmoothTime:this.smoothTime;this._zoom=smoothDamp(this._zoom,this._zoomEnd,this._zoomVelocity,lr,1/0,s)}if(this.dollyToCursor){if(isPerspectiveCamera(this._camera)&&this._changedDolly!==0){const lr=this._spherical.radius-this._lastDistance,ar=this._camera,cr=this._getCameraDirection(_cameraDirection),hr=_v3A.copy(cr).cross(ar.up).normalize();hr.lengthSq()===0&&(hr.x=1);const es=_v3B.crossVectors(hr,cr),Ur=this._sphericalEnd.radius*Math.tan(ar.getEffectiveFOV()*DEG2RAD*.5),zr=(this._sphericalEnd.radius-lr-this._sphericalEnd.radius)/this._sphericalEnd.radius,rs=_v3C.copy(this._targetEnd).add(hr.multiplyScalar(this._dollyControlCoord.x*Ur*ar.aspect)).add(es.multiplyScalar(this._dollyControlCoord.y*Ur)),as=_v3A.copy(this._targetEnd).lerp(rs,zr),os=this._lastDollyDirection===DOLLY_DIRECTION.IN&&this._spherical.radius<=this.minDistance,ls=this._lastDollyDirection===DOLLY_DIRECTION.OUT&&this.maxDistance<=this._spherical.radius;if(this.infinityDolly&&(os||ls)){this._sphericalEnd.radius-=lr,this._spherical.radius-=lr;const ho=_v3B.copy(cr).multiplyScalar(-lr);as.add(ho)}this._boundary.clampPoint(as,as);const zs=_v3B.subVectors(as,this._targetEnd);this._targetEnd.copy(as),this._target.add(zs),this._changedDolly-=lr,approxZero(this._changedDolly)&&(this._changedDolly=0)}else if(isOrthographicCamera(this._camera)&&this._changedZoom!==0){const lr=this._zoom-this._lastZoom,ar=this._camera,cr=_v3A.set(this._dollyControlCoord.x,this._dollyControlCoord.y,(ar.near+ar.far)/(ar.near-ar.far)).unproject(ar),hr=_v3B.set(0,0,-1).applyQuaternion(ar.quaternion),es=_v3C.copy(cr).add(hr.multiplyScalar(-cr.dot(ar.up))),Dr=-(this._zoom-lr-this._zoom)/this._zoom,zr=this._getCameraDirection(_cameraDirection),rs=this._targetEnd.dot(zr),as=_v3A.copy(this._targetEnd).lerp(es,Dr),os=as.dot(zr),ls=zr.multiplyScalar(os-rs);as.sub(ls),this._boundary.clampPoint(as,as);const zs=_v3B.subVectors(as,this._targetEnd);this._targetEnd.copy(as),this._target.add(zs),this._changedZoom-=lr,approxZero(this._changedZoom)&&(this._changedZoom=0)}}this._camera.zoom!==this._zoom&&(this._camera.zoom=this._zoom,this._camera.updateProjectionMatrix(),this._updateNearPlaneCorners(),this._needsUpdate=!0),this._dragNeedsUpdate=!0;const yn=this._collisionTest();this._spherical.radius=Math.min(this._spherical.radius,yn),this._spherical.makeSafe(),this._camera.position.setFromSpherical(this._spherical).applyQuaternion(this._yAxisUpSpaceInverse).add(this._target),this._camera.lookAt(this._target),(!approxZero(this._focalOffset.x)||!approxZero(this._focalOffset.y)||!approxZero(this._focalOffset.z))&&(this._camera.updateMatrixWorld(),_xColumn.setFromMatrixColumn(this._camera.matrix,0),_yColumn.setFromMatrixColumn(this._camera.matrix,1),_zColumn.setFromMatrixColumn(this._camera.matrix,2),_xColumn.multiplyScalar(this._focalOffset.x),_yColumn.multiplyScalar(-this._focalOffset.y),_zColumn.multiplyScalar(this._focalOffset.z),_v3A.copy(_xColumn).add(_yColumn).add(_zColumn),this._camera.position.add(_v3A)),this._boundaryEnclosesCamera&&this._encloseToBoundary(this._camera.position.copy(this._target),_v3A.setFromSpherical(this._spherical).applyQuaternion(this._yAxisUpSpaceInverse),1);const zn=this._needsUpdate;return zn&&!this._updatedLastTime?(this._hasRested=!1,this.dispatchEvent({type:"wake"}),this.dispatchEvent({type:"update"})):zn?(this.dispatchEvent({type:"update"}),approxZero(a,this.restThreshold)&&approxZero(b,this.restThreshold)&&approxZero(_e,this.restThreshold)&&approxZero(bt.x,this.restThreshold)&&approxZero(bt.y,this.restThreshold)&&approxZero(bt.z,this.restThreshold)&&approxZero(rn.x,this.restThreshold)&&approxZero(rn.y,this.restThreshold)&&approxZero(rn.z,this.restThreshold)&&approxZero(sn,this.restThreshold)&&!this._hasRested&&(this._hasRested=!0,this.dispatchEvent({type:"rest"}))):!zn&&this._updatedLastTime&&this.dispatchEvent({type:"sleep"}),this._lastDistance=this._spherical.radius,this._lastZoom=this._zoom,this._updatedLastTime=zn,this._needsUpdate=!1,zn}toJSON(){return JSON.stringify({enabled:this._enabled,minDistance:this.minDistance,maxDistance:infinityToMaxNumber(this.maxDistance),minZoom:this.minZoom,maxZoom:infinityToMaxNumber(this.maxZoom),minPolarAngle:this.minPolarAngle,maxPolarAngle:infinityToMaxNumber(this.maxPolarAngle),minAzimuthAngle:infinityToMaxNumber(this.minAzimuthAngle),maxAzimuthAngle:infinityToMaxNumber(this.maxAzimuthAngle),smoothTime:this.smoothTime,draggingSmoothTime:this.draggingSmoothTime,dollySpeed:this.dollySpeed,truckSpeed:this.truckSpeed,dollyToCursor:this.dollyToCursor,verticalDragToForward:this.verticalDragToForward,target:this._targetEnd.toArray(),position:_v3A.setFromSpherical(this._sphericalEnd).add(this._targetEnd).toArray(),zoom:this._zoomEnd,focalOffset:this._focalOffsetEnd.toArray(),target0:this._target0.toArray(),position0:this._position0.toArray(),zoom0:this._zoom0,focalOffset0:this._focalOffset0.toArray()})}fromJSON(s,a=!1){const b=JSON.parse(s);this.enabled=b.enabled,this.minDistance=b.minDistance,this.maxDistance=maxNumberToInfinity(b.maxDistance),this.minZoom=b.minZoom,this.maxZoom=maxNumberToInfinity(b.maxZoom),this.minPolarAngle=b.minPolarAngle,this.maxPolarAngle=maxNumberToInfinity(b.maxPolarAngle),this.minAzimuthAngle=maxNumberToInfinity(b.minAzimuthAngle),this.maxAzimuthAngle=maxNumberToInfinity(b.maxAzimuthAngle),this.smoothTime=b.smoothTime,this.draggingSmoothTime=b.draggingSmoothTime,this.dollySpeed=b.dollySpeed,this.truckSpeed=b.truckSpeed,this.dollyToCursor=b.dollyToCursor,this.verticalDragToForward=b.verticalDragToForward,this._target0.fromArray(b.target0),this._position0.fromArray(b.position0),this._zoom0=b.zoom0,this._focalOffset0.fromArray(b.focalOffset0),this.moveTo(b.target[0],b.target[1],b.target[2],a),_sphericalA.setFromVector3(_v3A.fromArray(b.position).sub(this._targetEnd).applyQuaternion(this._yAxisUpSpace)),this.rotateTo(_sphericalA.theta,_sphericalA.phi,a),this.dollyTo(_sphericalA.radius,a),this.zoomTo(b.zoom,a),this.setFocalOffset(b.focalOffset[0],b.focalOffset[1],b.focalOffset[2],a),this._needsUpdate=!0}connect(s){if(this._domElement){console.warn("camera-controls is already connected.");return}s.setAttribute("data-camera-controls-version",VERSION),this._addAllEventListeners(s),this._getClientRect(this._elementRect)}disconnect(){this.cancel(),this._removeAllEventListeners(),this._domElement&&(this._domElement.removeAttribute("data-camera-controls-version"),this._domElement=void 0)}dispose(){this.removeAllEventListeners(),this.disconnect()}_getTargetDirection(s){return s.setFromSpherical(this._spherical).divideScalar(this._spherical.radius).applyQuaternion(this._yAxisUpSpaceInverse)}_getCameraDirection(s){return this._getTargetDirection(s).negate()}_findPointerById(s){return this._activePointers.find(a=>a.pointerId===s)}_findPointerByMouseButton(s){return this._activePointers.find(a=>a.mouseButton===s)}_disposePointer(s){this._activePointers.splice(this._activePointers.indexOf(s),1)}_encloseToBoundary(s,a,b){const _e=a.lengthSq();if(_e===0)return s;const bt=_v3B.copy(a).add(s),sn=this._boundary.clampPoint(bt,_v3C).sub(bt),yn=sn.lengthSq();if(yn===0)return s.add(a);if(yn===_e)return s;if(b===0)return s.add(a).add(sn);{const Pn=1+b*yn/a.dot(sn);return s.add(_v3B.copy(a).multiplyScalar(Pn)).add(sn.multiplyScalar(1-b))}}_updateNearPlaneCorners(){if(isPerspectiveCamera(this._camera)){const s=this._camera,a=s.near,b=s.getEffectiveFOV()*DEG2RAD,_e=Math.tan(b*.5)*a,bt=_e*s.aspect;this._nearPlaneCorners[0].set(-bt,-_e,0),this._nearPlaneCorners[1].set(bt,-_e,0),this._nearPlaneCorners[2].set(bt,_e,0),this._nearPlaneCorners[3].set(-bt,_e,0)}else if(isOrthographicCamera(this._camera)){const s=this._camera,a=1/s.zoom,b=s.left*a,_e=s.right*a,bt=s.top*a,rn=s.bottom*a;this._nearPlaneCorners[0].set(b,bt,0),this._nearPlaneCorners[1].set(_e,bt,0),this._nearPlaneCorners[2].set(_e,rn,0),this._nearPlaneCorners[3].set(b,rn,0)}}_collisionTest(){let s=1/0;if(!(this.colliderMeshes.length>=1)||notSupportedInOrthographicCamera(this._camera,"_collisionTest"))return s;const b=this._getTargetDirection(_cameraDirection);_rotationMatrix.lookAt(_ORIGIN,b,this._camera.up);for(let _e=0;_e<4;_e++){const bt=_v3B.copy(this._nearPlaneCorners[_e]);bt.applyMatrix4(_rotationMatrix);const rn=_v3C.addVectors(this._target,bt);_raycaster.set(rn,b),_raycaster.far=this._spherical.radius+1;const sn=_raycaster.intersectObjects(this.colliderMeshes);sn.length!==0&&sn[0].distance<s&&(s=sn[0].distance)}return s}_getClientRect(s){if(!this._domElement)return;const a=this._domElement.getBoundingClientRect();return s.x=a.left,s.y=a.top,this._viewport?(s.x+=this._viewport.x,s.y+=a.height-this._viewport.w-this._viewport.y,s.width=this._viewport.z,s.height=this._viewport.w):(s.width=a.width,s.height=a.height),s}_createOnRestPromise(s){return s?Promise.resolve():(this._hasRested=!1,this.dispatchEvent({type:"transitionstart"}),new Promise(a=>{const b=()=>{this.removeEventListener("rest",b),a()};this.addEventListener("rest",b)}))}_addAllEventListeners(s){}_removeAllEventListeners(){}get dampingFactor(){return console.warn(".dampingFactor has been deprecated. use smoothTime (in seconds) instead."),0}set dampingFactor(s){console.warn(".dampingFactor has been deprecated. use smoothTime (in seconds) instead.")}get draggingDampingFactor(){return console.warn(".draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead."),0}set draggingDampingFactor(s){console.warn(".draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead.")}static createBoundingSphere(s,a=new THREE.Sphere){const b=a,_e=b.center;_box3A.makeEmpty(),s.traverseVisible(rn=>{rn.isMesh&&_box3A.expandByObject(rn)}),_box3A.getCenter(_e);let bt=0;return s.traverseVisible(rn=>{if(!rn.isMesh)return;const sn=rn,yn=sn.geometry.clone();yn.applyMatrix4(sn.matrixWorld);const zn=yn.attributes.position;for(let lr=0,ar=zn.count;lr<ar;lr++)_v3A.fromBufferAttribute(zn,lr),bt=Math.max(bt,_e.distanceToSquared(_v3A))}),b.radius=Math.sqrt(bt),b}};const CameraControls=reactExports.forwardRef((o,s)=>{reactExports.useMemo(()=>{const os={Box3,MathUtils:{clamp:MathUtils.clamp},Matrix4,Quaternion,Raycaster,Sphere,Spherical,Vector2,Vector3,Vector4};CameraControls$1.install({THREE:os}),extend({CameraControlsImpl:CameraControls$1})},[]);const{camera:a,domElement:b,makeDefault:_e,onStart:bt,onEnd:rn,onChange:sn,regress:yn,...Pn}=o,zn=useThree(os=>os.camera),lr=useThree(os=>os.gl),ar=useThree(os=>os.invalidate),cr=useThree(os=>os.events),hr=useThree(os=>os.setEvents),es=useThree(os=>os.set),Ur=useThree(os=>os.get),Dr=useThree(os=>os.performance),zr=a||zn,rs=b||cr.connected||lr.domElement,as=reactExports.useMemo(()=>new CameraControls$1(zr),[zr]);return useFrame((os,ls)=>{as.enabled&&as.update(ls)},-1),reactExports.useEffect(()=>(as.connect(rs),()=>void as.disconnect()),[rs,as]),reactExports.useEffect(()=>{const os=ho=>{ar(),yn&&Dr.regress(),sn&&sn(ho)},ls=ho=>{bt&&bt(ho)},zs=ho=>{rn&&rn(ho)};return as.addEventListener("update",os),as.addEventListener("controlstart",ls),as.addEventListener("controlend",zs),as.addEventListener("control",os),as.addEventListener("transitionstart",os),as.addEventListener("wake",os),()=>{as.removeEventListener("update",os),as.removeEventListener("controlstart",ls),as.removeEventListener("controlend",zs),as.removeEventListener("control",os),as.removeEventListener("transitionstart",os),as.removeEventListener("wake",os)}},[as,bt,rn,ar,hr,yn,sn]),reactExports.useEffect(()=>{if(_e){const os=Ur().controls;return es({controls:as}),()=>es({controls:os})}},[_e,as]),reactExports.createElement("primitive",_extends$1({ref:s,object:as},Pn))});function useAnimations(o,s){const a=reactExports.useRef(),[b]=reactExports.useState(()=>s?s instanceof Object3D?{current:s}:s:a),[_e]=reactExports.useState(()=>new AnimationMixer(void 0));reactExports.useLayoutEffect(()=>{s&&(b.current=s instanceof Object3D?s:s.current),_e._root=b.current});const bt=reactExports.useRef({}),rn=reactExports.useMemo(()=>{const sn={};return o.forEach(yn=>Object.defineProperty(sn,yn.name,{enumerable:!0,get(){if(b.current)return bt.current[yn.name]||(bt.current[yn.name]=_e.clipAction(yn,b.current))},configurable:!0})),{ref:b,clips:o,actions:sn,names:o.map(yn=>yn.name),mixer:_e}},[o]);return useFrame((sn,yn)=>_e.update(yn)),reactExports.useEffect(()=>{const sn=b.current;return()=>{bt.current={},_e.stopAllAction(),Object.values(rn.actions).forEach(yn=>{sn&&_e.uncacheAction(yn,sn)})}},[o]),rn}function create(o,s){const a=o+"Geometry";return reactExports.forwardRef(({args:b,children:_e,...bt},rn)=>{const sn=reactExports.useRef(null);return reactExports.useImperativeHandle(rn,()=>sn.current),reactExports.useLayoutEffect(()=>void s?.(sn.current)),reactExports.createElement("mesh",_extends$1({ref:sn},bt),reactExports.createElement(a,{attach:"geometry",args:b}),_e)})}const Box=create("box"),eps=1e-5;function createShape(o,s,a){const b=new Shape,_e=a-eps;return b.absarc(eps,eps,eps,-Math.PI/2,-Math.PI,!0),b.absarc(eps,s-_e*2,eps,Math.PI,Math.PI/2,!0),b.absarc(o-_e*2,s-_e*2,eps,Math.PI/2,0,!0),b.absarc(o-_e*2,eps,eps,0,-Math.PI/2,!0),b}const RoundedBox=reactExports.forwardRef(function o({args:[s=1,a=1,b=1]=[],radius:_e=.05,steps:bt=1,smoothness:rn=4,bevelSegments:sn=4,creaseAngle:yn=.4,children:Pn,...zn},lr){const ar=reactExports.useMemo(()=>createShape(s,a,_e),[s,a,_e]),cr=reactExports.useMemo(()=>({depth:b-_e*2,bevelEnabled:!0,bevelSegments:sn*2,steps:bt,bevelSize:_e-eps,bevelThickness:_e,curveSegments:rn}),[b,_e,rn]),hr=reactExports.useRef(null);return reactExports.useLayoutEffect(()=>{hr.current&&(hr.current.center(),toCreasedNormals(hr.current,yn))},[ar,cr]),reactExports.createElement("mesh",_extends$1({ref:lr},zn),reactExports.createElement("extrudeGeometry",{ref:hr,args:[ar,cr]}),Pn)}),presetsObj={apartment:"lebombo_1k.hdr",city:"potsdamer_platz_1k.hdr",dawn:"kiara_1_dawn_1k.hdr",forest:"forest_slope_1k.hdr",lobby:"st_fagans_interior_1k.hdr",night:"dikhololo_night_1k.hdr",park:"rooitou_park_1k.hdr",studio:"studio_small_03_1k.hdr",sunset:"venice_sunset_1k.hdr",warehouse:"empty_warehouse_01_1k.hdr"},CUBEMAP_ROOT="https://raw.githack.com/pmndrs/drei-assets/456060a26bbeb8fdf79326f224b6d99b8bcce736/hdri/",isArray=o=>Array.isArray(o);function useEnvironment({files:o=["/px.png","/nx.png","/py.png","/ny.png","/pz.png","/nz.png"],path:s="",preset:a=void 0,encoding:b=void 0,extensions:_e}={}){var bt;let rn=null,sn=!1,yn;if(a){if(!(a in presetsObj))throw new Error("Preset must be one of: "+Object.keys(presetsObj).join(", "));o=presetsObj[a],s=CUBEMAP_ROOT}if(sn=isArray(o),yn=isArray(o)?"cube":o.startsWith("data:application/exr")?"exr":o.startsWith("data:application/hdr")?"hdr":(bt=o.split(".").pop())==null||(bt=bt.split("?"))==null||(bt=bt.shift())==null?void 0:bt.toLowerCase(),rn=sn?CubeTextureLoader:yn==="hdr"?RGBELoader:yn==="exr"?EXRLoader:null,!rn)throw new Error("useEnvironment: Unrecognized file extension: "+o);const Pn=useLoader(rn,sn?[o]:o,cr=>{cr.setPath==null||cr.setPath(s),_e&&_e(cr)}),zn=sn?Pn[0]:Pn;zn.mapping=sn?CubeReflectionMapping:EquirectangularReflectionMapping;const lr=3001,ar=3e3;return"colorSpace"in zn?zn.colorSpace=b??sn?"srgb":"srgb-linear":zn.encoding=b??sn?lr:ar,zn}const isRef$1=o=>o.current&&o.current.isScene,resolveScene=o=>isRef$1(o)?o.current:o;function setEnvProps(o,s,a,b,_e=0){const bt=resolveScene(s||a),rn=bt.background,sn=bt.environment,yn=bt.backgroundBlurriness||0;return o!=="only"&&(bt.environment=b),o&&(bt.background=b),o&&bt.backgroundBlurriness!==void 0&&(bt.backgroundBlurriness=_e),()=>{o!=="only"&&(bt.environment=sn),o&&(bt.background=rn),o&&bt.backgroundBlurriness!==void 0&&(bt.backgroundBlurriness=yn)}}function EnvironmentMap({scene:o,background:s=!1,blur:a,map:b}){const _e=useThree(bt=>bt.scene);return reactExports.useLayoutEffect(()=>{if(b)return setEnvProps(s,o,_e,b,a)},[_e,o,b,s,a]),null}function EnvironmentCube({background:o=!1,scene:s,blur:a,...b}){const _e=useEnvironment(b),bt=useThree(rn=>rn.scene);return reactExports.useLayoutEffect(()=>setEnvProps(o,s,bt,_e,a),[_e,o,s,bt,a]),null}function EnvironmentPortal({children:o,near:s=1,far:a=1e3,resolution:b=256,frames:_e=1,map:bt,background:rn=!1,blur:sn,scene:yn,files:Pn,path:zn,preset:lr=void 0,extensions:ar}){const cr=useThree(rs=>rs.gl),hr=useThree(rs=>rs.scene),es=reactExports.useRef(null),[Ur]=reactExports.useState(()=>new Scene),Dr=reactExports.useMemo(()=>{const rs=new WebGLCubeRenderTarget(b);return rs.texture.type=HalfFloatType,rs},[b]);reactExports.useLayoutEffect(()=>(_e===1&&es.current.update(cr,Ur),setEnvProps(rn,yn,hr,Dr.texture,sn)),[o,Ur,Dr.texture,yn,hr,rn,_e,cr]);let zr=1;return useFrame(()=>{(_e===1/0||zr<_e)&&(es.current.update(cr,Ur),zr++)}),reactExports.createElement(reactExports.Fragment,null,createPortal(reactExports.createElement(reactExports.Fragment,null,o,reactExports.createElement("cubeCamera",{ref:es,args:[s,a,Dr]}),Pn||lr?reactExports.createElement(EnvironmentCube,{background:!0,files:Pn,preset:lr,path:zn,extensions:ar}):bt?reactExports.createElement(EnvironmentMap,{background:!0,map:bt,extensions:ar}):null),Ur))}function EnvironmentGround(o){var s,a,b,_e;const bt=useEnvironment(o),rn=o.map||bt;reactExports.useMemo(()=>extend({GroundProjectedEnvImpl:GroundProjectedEnv}),[]);const sn=reactExports.useMemo(()=>[rn],[rn]),yn=(s=o.ground)==null?void 0:s.height,Pn=(a=o.ground)==null?void 0:a.radius,zn=(b=(_e=o.ground)==null?void 0:_e.scale)!==null&&b!==void 0?b:1e3;return reactExports.createElement(reactExports.Fragment,null,reactExports.createElement(EnvironmentMap,_extends$1({},o,{map:rn})),reactExports.createElement("groundProjectedEnvImpl",{args:sn,scale:zn,height:yn,radius:Pn}))}function Environment(o){return o.ground?reactExports.createElement(EnvironmentGround,o):o.map?reactExports.createElement(EnvironmentMap,o):o.children?reactExports.createElement(EnvironmentPortal,o):reactExports.createElement(EnvironmentCube,o)}const LightManager=()=>{const[o,s]=reactExports.useState(!1),a=productDataStore$1(rn=>rn),b=lightStore(rn=>rn),[_e,bt]=reactExports.useState(1);return reactExports.useEffect(()=>{const rn=a.assetsData,sn=rn?.sceneMoodSettings?.envMap;sn&&(lightStore.setState({defaultEnvMapUrl:sn}),b.actions.setEnvLightMap(sn)),b.envMapUrl===""&&b.actions.setEnvLightMap(lightStore.getState().defaultEnvMapUrl);const yn=rn?.sceneMoodSettings?.ambientLightIntensity;yn!==void 0&&bt(yn),s(!0)},[]),reactExports.useEffect(()=>{o!==!1&&(LOGGER.groupCollapsed("SCENE LIGHTING INFO:"),LOGGER.table({title:"Scene Lights",details:{"Environment Map":b.envMapUrl,"Ambient Light Intensity":_e}}),LOGGER.groupEnd())},[o]),jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:o===!0&&jsxRuntimeExports.jsxs("group",{name:"GRP_LIGHTS",children:[jsxRuntimeExports.jsx("ambientLight",{intensity:_e}),jsxRuntimeExports.jsx(Environment,{background:!1,files:CORE_API.getResolvedAssetUrl(b.envMapUrl)})]})})};function Draggable({children:o,guid:s,onDragStartHandler:a,onDragEndHandler:b,onItemClickHandler:_e,onPointerEnter:bt,onPointerLeave:rn,dragging:sn=!1,intersectingGhostObject:yn=null,isInteractive:Pn=!0,initialIntersectedGhostUUID:zn=null,isSnapAllowed:lr=!1,...ar}){const cr=reactExports.useRef(),hr=reactExports.useRef(-1),es=reactExports.useRef([]),Ur=reactExports.useRef([]),{raycaster:Dr,size:zr,camera:rs}=useThree(),as=hotspotStore$1(gy=>gy.isAnyHotspotActive),os=coreSceneStore(gy=>gy.multipleTouchDetected),[ls,zs]=reactExports.useState(null),{raycasterGhost:ho}=reactExports.useMemo(()=>({raycasterGhost:new Raycaster})),ga=gy=>{let El;return gy.isGhost===!0?El=gy:gy.parent?gy.parent.isGhost===!0?El=gy.parent:El=ga(gy.parent):El=null,El},mo=gy=>{ho.layers.enable(GHOST_LAYER),ho.setFromCamera(gy,rs);const El=ho.intersectObject(ghostStore.getState().ghostParentRef);let My=null;return El.length>0&&(My=ga(El[0].object)),My},go=gy=>{let El=gy.whichNodesAreAttachedToUs();return El.map(My=>{go(My).map(lA=>{El.push(lA)})}),El},{initialMouse2D:yl,mouse2D:Zl,mouse3D:_d,offset:Ty,normal:yy,plane:by,pointerDownPos:Al}=reactExports.useMemo(()=>({initialMouse2D:new Vector2,mouse2D:new Vector2,mouse3D:new Vector3,offset:new Vector3,normal:new Vector3,plane:new Plane,pointerDownPos:new Vector2}),[]);reactExports.useEffect(()=>{let gy=attachmentStore$1.getState().attachmentSystem.currentStructure.getNodeByGUID(s);zs(gy)},[]);const _f=useGesture({onPointerEnter:gy=>{os||coreSceneStore.getState().sceneSettings.disableDragDrop&&coreSceneStore.getState().sceneSettings.disableContextMenu||coreSceneStore.getState().itemDraggedSkuID||coreSceneStore.getState().cameraActive!==!0&&!coreSceneStore.getState().dragging&&!as&&(ls&&!ls.isEndNode?CORE_API.switchCursor(CURSORS.POINTER):CORE_API.switchCursor(CURSORS.GRAB),bt(gy.event))},onPointerLeave:gy=>{os||coreSceneStore.getState().sceneSettings.disableDragDrop&&coreSceneStore.getState().sceneSettings.disableContextMenu||coreSceneStore.getState().itemDraggedSkuID||coreSceneStore.getState().cameraActive!==!0&&!coreSceneStore.getState().dragging&&!as&&(CORE_API.switchCursor(CURSORS.GRAB),rn(gy.event))},onClick:gy=>{if(gy.event.stopPropagation(),!os){if(coreSceneStore.getState().builderMode){const{eventObject:El,point:My}=gy.event;El.getWorldPosition(Ty).sub(My),_d.copy(My);const By=gy.event.offsetX,lA=gy.event.offsetY,wA=By/zr.width*2-1,Fy=-lA/zr.height*2+1;Zl.set(wA,Fy);const OA=new Raycaster;OA.setFromCamera(Zl,rs);const UA=OA.intersectObject(coreSceneStore.getState().sceneRef.getObjectByName("proxyGeometry"));UA.length>0&&CORE_API.fireEvent(CORE_API.EVENTS.CONFIGURATION.OnClickItem,{point:UA[0].point,camera:OA.camera})}if(!coreSceneStore.getState().sceneSettings.disableContextMenu)if(!gy.dragging&&!as){if(Math.abs(gy.event.x-Al.x)>1)return;_e(gy.event.offsetX,gy.event.offsetY,s)}else hotspotStore$1.getState().actions.exitHotspot(!0)}},onDrag:async gy=>{if(coreSceneStore.getState().simulateDragEnd===!0||coreSceneStore.getState().dragging&&coreSceneStore.getState().draggingItemGUID!==ls.guid||coreSceneStore.getState().sceneSettings.disableDragDrop)return;const El=gy.event;if(El.stopPropagation(),as){CORE_API.switchCursor(CURSORS.BLOCKED);return}if(itemStore.getState().selectedItemData){CORE_API.switchCursor(CURSORS.BLOCKED);return}if(Object.keys(itemStore.getState().itemsSpawned).length<2){CORE_API.switchCursor(CURSORS.BLOCKED);return}const By=gy.event.offsetX,lA=gy.event.offsetY;if(!coreSceneStore.getState().dragging){if(itemStore.setState({busyDraggingItem:!0}),Math.abs(El.x-Al.x)<=1)return;if(ls&&!ls.canDrag){CORE_API.switchCursor(CURSORS.BLOCKED);return}const YA=ls.whichPlugAreWeAttachedUsing().attachedPlug.guid;let WA=ls.swapRoot();WA||(WA={rootDetachedPlugs:ls.detachNodeFromReceiver()}),es.current=go(ls),Ur.current=[],es.current.map(SC=>{Ur.current.push(SC.guid),ls.ref.attach(SC.ref),ls.dragging=!0,SC.dragging=!0}),CORE_API.switchCursor(CURSORS.MOVE),coreSceneStore.setState({dragging:!0,draggingItemGUID:ls.guid}),window.pointerDownPos=gy.event.clientX,window.mouseDragging=!1;const FA=productDataStore$1.getState().productData[ls.skuID].lookDetails[ls.currentVariant].thumbnails.low;window.mouseDownImgSrc=CORE_API.getResolvedAssetUrl(FA),window.mouseDownSkuID=ls.skuID,window.moveThreshold=0,lr=!1,yn=null,zn=null,hr.current=-1;const BA=By/zr.width*2-1,rE=-lA/zr.height*2+1;yl.set(BA,rE);const sE=await a({guid:s,node:ls,detachedData:WA,attachedChildrenGuids:Ur.current});if(!sE||sE.length<=0||sE.transforms===void 0)return;sE.transforms.map((SC,HA)=>{SC.receiverPlugGUID===YA&&(hr.current=HA)})}const wA=By/zr.width*2-1,Fy=-lA/zr.height*2+1;Zl.set(wA,Fy),Dr.setFromCamera(Zl,rs),rs.getWorldDirection(yy).negate(),by.setFromNormalAndCoplanarPoint(yy,_d),Dr.ray.intersectPlane(by,_d),ls.ref.visible=!1;const OA=ghostStore.getState().ghostParentRef;if(OA.children.length>0){yn=mo(Zl),zn===null&&hr.current!==-1&&hr.current<OA.children.length&&OA.children[hr.current]!==void 0&&(zn=OA.children[hr.current].children[0].uuid);const UA=coreSceneStore.getState().hoveredGhostIndex;yn?UA!==yn.index&&coreSceneStore.setState({hoveredGhostIndex:yn.index}):UA!==-1&&coreSceneStore.setState({hoveredGhostIndex:-1}),ls.ref.position.copy(_d).add(Ty)}if(wA>1||wA<-1||Fy<-1||Fy>1){itemStore.setState({busyDraggingItem:!1}),CORE_API.switchCursor(CURSORS.GRAB),window.mouseDownImgSrc=null,window.mouseDragging=!1,window.dragImgElRef.style.opacity=0,ls.ref.visible=!0,coreSceneStore.setState({simulateDragEnd:!0,dragging:!1,draggingItemGUID:null,hoveredGhostIndex:-1}),b({node:ls,intersectingGhostObject:yn,attachedChildrenGuids:Ur.current,attachedNodesToCurrentNode:es.current});const UA=attachmentStore$1.getState().attachmentSystem.currentStructure.nodes;DynamicHooks.hookOnSceneItemsUpdated(UA)}},onDragStart:({event:gy})=>{if(coreSceneStore.setState({simulateDragEnd:!1}),os||coreSceneStore.getState().sceneSettings.disableDragDrop&&coreSceneStore.getState().sceneSettings.disableContextMenu)return;gy.stopPropagation();const{eventObject:El,point:My}=gy;El.getWorldPosition(Ty).sub(My),_d.copy(My),Al.set(gy.x,gy.y)},onDragEnd:({event:gy})=>{if(coreSceneStore.setState({simulateDragEnd:!1}),coreSceneStore.getState().dragging&&coreSceneStore.getState().draggingItemGUID!==ls.guid||coreSceneStore.getState().sceneSettings.disableDragDrop&&coreSceneStore.getState().sceneSettings.disableContextMenu)return;gy.stopPropagation(),window.mouseDownImgSrc=null,window.mouseDragging=!1,window.dragImgElRef.style.opacity=0,ls.ref.visible=!0,coreSceneStore.setState({dragging:!1,hoveredGhostIndex:-1,draggingItemGUID:null}),itemStore.setState({busyDraggingItem:!1}),CORE_API.switchCursor(CURSORS.GRAB),b({node:ls,intersectingGhostObject:yn,attachedChildrenGuids:Ur.current,attachedNodesToCurrentNode:es.current});const El=attachmentStore$1.getState().attachmentSystem.currentStructure.nodes;DynamicHooks.hookOnSceneItemsUpdated(El)}});return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:Pn?jsxRuntimeExports.jsx("group",{ref:cr,..._f(),...ar,children:o}):jsxRuntimeExports.jsx("group",{ref:cr,...ar,children:o})})}const selectionContext=reactExports.createContext(null);function Selection({children:o,enabled:s=!0}){const[a,b]=reactExports.useState([]),_e=reactExports.useMemo(()=>({selected:a,select:b,enabled:s}),[a,b,s]);return jsxRuntimeExports.jsx(selectionContext.Provider,{value:_e,children:o})}function Select({enabled:o=!1,children:s,...a}){const b=reactExports.useRef(null),_e=reactExports.useContext(selectionContext);return reactExports.useEffect(()=>{if(_e&&o){let bt=!1;const rn=[];if(b.current.traverse(sn=>{sn.type==="Mesh"&&rn.push(sn),_e.selected.indexOf(sn)===-1&&(bt=!0)}),bt)return _e.select(sn=>[...sn,...rn]),()=>{_e.select(sn=>sn.filter(yn=>!rn.includes(yn)))}}},[o,s,_e]),jsxRuntimeExports.jsx("group",{ref:b,...a,children:s})}const EffectComposerContext=reactExports.createContext(null),isConvolution=o=>(o.getAttributes()&EffectAttribute.CONVOLUTION)===EffectAttribute.CONVOLUTION,EffectComposer=React.memo(reactExports.forwardRef(({children:o,camera:s,scene:a,resolutionScale:b,enabled:_e=!0,renderPriority:bt=1,autoClear:rn=!0,depthBuffer:sn,disableNormalPass:yn,stencilBuffer:Pn,multisampling:zn=8,frameBufferType:lr=HalfFloatType},ar)=>{const{gl:cr,scene:hr,camera:es,size:Ur}=useThree(),Dr=a||hr,zr=s||es,[rs,as,os]=reactExports.useMemo(()=>{const ga=isWebGL2Available(),mo=new EffectComposer$1(cr,{depthBuffer:sn,stencilBuffer:Pn,multisampling:zn>0&&ga?zn:0,frameBufferType:lr});mo.addPass(new RenderPass(Dr,zr));let go=null,yl=null;return yn||(yl=new NormalPass(Dr,zr),yl.enabled=!1,mo.addPass(yl),b!==void 0&&ga&&(go=new DepthDownsamplingPass({normalBuffer:yl.texture,resolutionScale:b}),go.enabled=!1,mo.addPass(go))),[mo,yl,go]},[zr,cr,sn,Pn,zn,lr,Dr,yn,b]);reactExports.useEffect(()=>rs?.setSize(Ur.width,Ur.height),[rs,Ur]),useFrame((ga,mo)=>{if(_e){const go=cr.autoClear;cr.autoClear=rn,Pn&&!rn&&cr.clearStencil(),rs.render(mo),cr.autoClear=go}},_e?bt:0);const ls=reactExports.useRef(null),zs=useInstanceHandle(ls);reactExports.useLayoutEffect(()=>{const ga=[];if(ls.current&&zs.current&&rs){const mo=zs.current.objects;for(let go=0;go<mo.length;go++){const yl=mo[go];if(yl instanceof Effect){const Zl=[yl];if(!isConvolution(yl)){let Ty=null;for(;(Ty=mo[go+1])instanceof Effect&&!isConvolution(Ty);)Zl.push(Ty),go++}const _d=new EffectPass(zr,...Zl);ga.push(_d)}else yl instanceof Pass&&ga.push(yl)}for(const go of ga)rs?.addPass(go);as&&(as.enabled=!0),os&&(os.enabled=!0)}return()=>{for(const mo of ga)rs?.removePass(mo);as&&(as.enabled=!1),os&&(os.enabled=!1)}},[rs,o,zr,as,os,zs]);const ho=reactExports.useMemo(()=>({composer:rs,normalPass:as,downSamplingPass:os,resolutionScale:b,camera:zr,scene:Dr}),[rs,as,os,b,zr,Dr]);return reactExports.useImperativeHandle(ar,()=>rs,[rs]),jsxRuntimeExports.jsx(EffectComposerContext.Provider,{value:ho,children:jsxRuntimeExports.jsx("group",{ref:ls,children:o})})})),resolveRef=o=>typeof o=="object"&&o!=null&&"current"in o?o.current:o,Outline=reactExports.forwardRef(function o({selection:s=[],selectionLayer:a=10,blendFunction:b,patternTexture:_e,edgeStrength:bt,pulseSpeed:rn,visibleEdgeColor:sn,hiddenEdgeColor:yn,width:Pn,height:zn,kernelSize:lr,blur:ar,xRay:cr,...hr},es){const Ur=useThree(os=>os.invalidate),{scene:Dr,camera:zr}=reactExports.useContext(EffectComposerContext),rs=reactExports.useMemo(()=>new OutlineEffect(Dr,zr,{blendFunction:b,patternTexture:_e,edgeStrength:bt,pulseSpeed:rn,visibleEdgeColor:sn,hiddenEdgeColor:yn,width:Pn,height:zn,kernelSize:lr,blur:ar,xRay:cr,...hr}),[b,ar,zr,bt,zn,yn,lr,_e,rn,Dr,sn,Pn,cr]),as=reactExports.useContext(selectionContext);return reactExports.useEffect(()=>{if(!as&&s)return rs.selection.set(Array.isArray(s)?s.map(resolveRef):[resolveRef(s)]),Ur(),()=>{rs.selection.clear(),Ur()}},[rs,s,as,Ur]),reactExports.useEffect(()=>{rs.selectionLayer=a,Ur()},[rs,Ur,a]),reactExports.useRef(),reactExports.useEffect(()=>{var os;if(as&&as.enabled&&(os=as.selected)!=null&&os.length)return rs.selection.set(as.selected),Ur(),()=>{rs.selection.clear(),Ur()}},[as,rs.selection,Ur]),reactExports.useEffect(()=>()=>{rs.dispose()},[rs]),jsxRuntimeExports.jsx("primitive",{ref:es,object:rs})}),ToneMapping=reactExports.forwardRef(function o({blendFunction:s,adaptive:a,mode:b,resolution:_e,maxLuminance:bt,whitePoint:rn,middleGrey:sn,minLuminance:yn,averageLuminance:Pn,adaptationRate:zn,...lr},ar){const cr=reactExports.useMemo(()=>new ToneMappingEffect({blendFunction:s,adaptive:a,mode:b,resolution:_e,maxLuminance:bt,whitePoint:rn,middleGrey:sn,minLuminance:yn,averageLuminance:Pn,adaptationRate:zn}),[s,a,b,_e,bt,rn,sn,yn,Pn,zn]);return reactExports.useEffect(()=>{cr.dispose()},[cr]),jsxRuntimeExports.jsx("primitive",{...lr,ref:ar,object:cr,attributes:EffectAttribute.CONVOLUTION})}),Model=({modelData:o,clonedMesh:s,clonedProxyMesh:a,itemKey:b,scale:_e,onItemClickHandler:bt,onDragEndHandler:rn,onDragStartHandler:sn,stockAlert:yn=!0})=>{const Pn=itemStore(by=>by.focusedGUID),zn=hotspotStore$1(by=>by),lr=itemStore(by=>by),ar=itemStore(by=>by.hoveredItemRef),cr=reactExports.useRef(null),hr=reactExports.useRef(null),es=reactExports.useRef([]),Ur=reactExports.useRef(null),[Dr,zr]=reactExports.useState(s),[rs,as]=reactExports.useState(a),os=reactExports.useRef(0),ls=reactExports.useRef(0),{ref:zs,actions:ho,names:ga}=useAnimations(o.data.animations),mo=reactExports.useCallback((by,Al,_f,gy)=>playAnimation(by,Al,_f,gy,ga,ho),[ga,ho]),go=reactExports.useCallback(by=>stopAnimation(by,ga,ho),[ga,ho]);reactExports.useEffect(()=>{if(cr.current===b.itemData.guid){cr.current=null;let by=zn.lastActiveHotspotData.hotspotData;if(!by)return;if(by.exitAnim?mo(by.exitAnim,!1,!1,!1):by.entryAnim&&mo(by.entryAnim,!1,!0,!1),by.activeAnim&&go(by.activeAnim),zn.activeHotspotData){if(b.itemData.guid===zn.activeHotspotData.itemData.guid){cr.current=b.itemData.guid;let Al=zn.activeHotspotData.hotspotData;if(!Al)return;Al.entryAnim&&mo(Al.entryAnim,!1,!1,!0),Al.activeAnim&&mo(Al.activeAnim,!0,!1,!1)}}else return}else if(zn.activeHotspotData){if(b.itemData.guid===zn.activeHotspotData.itemData.guid){cr.current=b.itemData.guid;let by=zn.activeHotspotData.hotspotData;if(!by)return;by.entryAnim&&mo(by.entryAnim,!1,!1,!0),by.activeAnim&&mo(by.activeAnim,!0,!1,!1)}}else return},[zn.activeHotspotData]),reactExports.useEffect(()=>{coreSceneStore.getState().actions.triggerAutoFocus(),CORE_API.fireEvent(CORE_API.EVENTS.SCENE.Item_Added,{...b,visualizedInScene:!0})},[]);const yl=reactExports.useCallback(()=>{if(!zs.current||(es.current=findMeshAndCloneMatFromScene(zs.current,zs.current.inStock),es.current.length==0))return;if(zs.current.inStock===!1){yn==!0&&(yn=!1,CORE_API.alert({alertMsg:"Some item(s) in configuration are out of stock",alertTime:7e3,alertType:"warn",alertLabel:"Stock Alert",persistant:!0,alertId:"outOfStock"}));return}const{current:by}=ls;for(let Al=0;Al<es.current.length;Al++){const _f=es.current[Al].material;_f.emissiveIntensity=by}},[ls,zs]),Zl=reactExports.useCallback(()=>{os.current=0},[es]),_d=reactExports.useCallback(()=>{os.current=.005},[es,Dr]);useFrame(()=>{if(coreSceneStore.getState().builderMode)return;const by=cameraStore.getState().userDragging,Al=0;ls.current=MathUtils.lerp(ls.current,by?Al:os.current,.1),yl()}),reactExports.useEffect(()=>{const by=attachmentStore$1.getState().attachmentSystem.currentStructure,Al=by.getNodeByGUID(b.itemData.guid);if(Al?.isDependent&&!Al.isInteractive&&Object.keys(ar).length>0){const _f=by.getNodeByGUID(Object.keys(ar)[0]);if(!_f||!_f.myDependenciesGUID)return;_f.myDependenciesGUID.includes(b.itemData.guid)?Zl():_d()}else ar.hasOwnProperty(b.itemData.guid)||Object.keys(ar).length==0?Zl():_d()},[ar]);const Ty=reactExports.useCallback(by=>{by.stopPropagation();const Al=lr.selectedItemData;coreSceneStore.setState({canvasTooltipText:"-"+b.itemData.name+"-"}),Al||itemStore.setState({hoveredItemRef:{}});let _f=itemStore.getState().hoveredItemRef;_f.hasOwnProperty(b.itemData.guid)||(_f[b.itemData.guid]={instance:zs.current},lr.actions.setHoveredItemRef({..._f}))},[lr,ar,hr]),yy=reactExports.useCallback(by=>{by.stopPropagation();const Al=lr.selectedItemData;if(coreSceneStore.setState({canvasTooltipText:""}),Al){if(Al.itemData.guid==b.itemData.guid)return;ar[b.itemData.guid]&&(delete ar[b.itemData.guid],lr.actions.setHoveredItemRef({...ar}))}else itemStore.setState({hoveredItemRef:{}})},[hr,lr,ar]);return reactExports.useEffect(()=>{if(Ur.current)return lr.collidersRef.push(Ur),lr.actions.setCollidersRef([...lr.collidersRef]),()=>{const by=lr.collidersRef.indexOf(Ur);by>-1&&lr.collidersRef.splice(by,1),lr.actions.setCollidersRef([...lr.collidersRef])}},[Ur]),jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[Dr&&jsxRuntimeExports.jsx(Select,{enabled:Pn===b.itemData.guid,children:jsxRuntimeExports.jsx(Clone,{name:"GRP_RenderGeometry",ref:zs,object:Dr,scale:_e,inStock:!0})}),(b.itemData.hasOwnProperty("disableCollider")?!b.itemData.disableCollider:!coreSceneStore.getState().sceneSettings.disableCollider)&&jsxRuntimeExports.jsx("group",{name:"GRP_LoadingPlaceholder",children:jsxRuntimeExports.jsx("group",{position:b.itemData.boundingSphereCenter,scale:[.9,.9,.9],name:"boxGeometry",children:jsxRuntimeExports.jsx(Box,{ref:Ur,scale:Vec3ToArr(b.itemData.boundingBoxSize),visible:!1})})}),o.proxy.isLoaded&&jsxRuntimeExports.jsx(Draggable,{guid:b.itemData.guid,onDragStartHandler:sn,onDragEndHandler:rn,onItemClickHandler:bt,onPointerEnter:Ty,onPointerLeave:yy,name:"GRP_ProxyMesh",isInteractive:b.itemData.isInteractive,children:jsxRuntimeExports.jsx("primitive",{name:"proxyGeometry",autoFocusEnabled:!0,object:rs,scale:_e,visible:!1})})]})};function playAnimation(o,s,a,b,_e,bt){if(!_e.includes(o))return;const rn=bt[o];rn.setLoop(s?LoopRepeat:LoopOnce),rn.clampWhenFinished=!s,b&&rn.reset(),a?rn.fadeOut(.5).play():rn.fadeIn(.5).play()}function stopAnimation(o,s,a){if(!s.includes(o))return;a[o].stop()}function LoadingBox({distanceFactor:o,position:s,proxymodel:a,scale:b}){return jsxRuntimeExports.jsx("primitive",{position:[0,0,0],name:"proxyLoader",object:a,scale:b,visible:!0,wireframe:!0,children:jsxRuntimeExports.jsx(Html,{center:!0,position:s,distanceFactor:o,zIndexRange:[29,0],children:jsxRuntimeExports.jsx("img",{alt:"Loading...",draggable:"false",src:PUBLIC_DESIGN_ASSETS_ENDPOINT+"/Animation/Loading.svg"})})})}function ProxyModelOnly({proxymodel:o,itemKey:s,scale:a}){return reactExports.useEffect(()=>{if(attachmentStore$1.getState().attachmentSystem.currentStructure.getNodeByGUID(s.itemData.guid)==null)return;async function _e(){await attachmentStore$1.getState().actions.updateFittingSkuIds()}CORE_API.fireEvent(CORE_API.EVENTS.SCENE.Model_Loaded,s.itemData.skuID),CORE_API.fireEvent(CORE_API.EVENTS.SCENE.Item_Added,{...s,visualizedInScene:!1}),_e()},[]),jsxRuntimeExports.jsxs("group",{children:[(s.itemData.hasOwnProperty("disableCollider")?!s.itemData.disableCollider:!coreSceneStore.getState().sceneSettings.disableCollider)&&jsxRuntimeExports.jsx("group",{name:"GRP_LoadingPlaceholder",children:jsxRuntimeExports.jsx("group",{position:s.itemData.boundingSphereCenter,scale:[.9,.9,.9],name:"boxGeometry",children:jsxRuntimeExports.jsx(Box,{scale:Vec3ToArr(s.itemData.boundingBoxSize),visible:!1})})}),jsxRuntimeExports.jsx("group",{name:"GRP_ProxyMesh",onClick:()=>{CORE_API.closeContextMenu()},children:jsxRuntimeExports.jsx("primitive",{name:"proxyGeometry",object:o.clone(),scale:a,visible:!1})})]})}const Item=({position:o,rotation:s,itemKey:a,scale:b,rejectFunc:_e,onItemClickHandler:bt,onDragEndHandler:rn,onDragStartHandler:sn,itemIndex:yn,proxyScene:Pn})=>{const zn=coreSceneStore(zr=>zr.sceneRef),lr=assetStore(zr=>zr),[ar,cr]=reactExports.useState(null),[hr,es]=reactExports.useState(Pn.clone()),Ur=reactExports.useRef(null);reactExports.useEffect(()=>((async()=>{let zr=await lr.actions.loadAsset(a.itemData.skuID).catch((ls,zs)=>{_e(ls,zs,a.itemData.guid)});if(!zr||!zr.data){cr({data:null,clonedMesh:null,mainModelReady:!1});return}const rs=zr.data,os=a.itemData.replace===!0||CORE_API.sceneSettings.disableLocalColorOverride?rs.scene:rs.scene.clone();a.itemData.clonedScene=os,rs.functions&&(rs.functions.copyVariantMaterials(os,rs.scene),await Dr(rs,os)),LOGGER.info({title:"model loaded: "+a.itemData.skuID}),a.itemData.hasItemLoaded=!0,itemStore.getState().actions.triggerModelLoaded(),CORE_API.fireEvent(CORE_API.EVENTS.SCENE.Model_Loaded,a.itemData.skuID),cr({data:zr,clonedMesh:os,mainModelReady:!0})})(),()=>{CORE_API.fireEvent(CORE_API.EVENTS.SCENE.Model_Removed,a.itemData.skuID)}),[]);const Dr=reactExports.useCallback(async(zr,rs)=>{const as=attachmentStore$1.getState().attachmentSystem;var os=as.currentStructure.getNodeByGUID(a.itemData.guid);if(!os)return;let ls="";if(os.overrideVariant)ls=os.overrideVariant,CORE_API.fireEvent(CORE_API.EVENTS.SCENE.MaterialOverrides_Exists,!0);else{const zs=as.globalVariants;if(!zs||zs.Count<=0)return;let ho=[];Object.keys(zs).map((ga,mo)=>{ho.push(zs[ga])}),a.itemData.looks?.map(ga=>{ho.includes(ga)&&(ls=ga)}),ls||(ls=a.itemData.looks[0])}return ls&&(os.currentVariant=ls,await zr.functions.selectVariant(rs,ls),itemStore.setState({variantChangeAlert:!itemStore.getState().variantChangeAlert})),ls},[]);return reactExports.useEffect(()=>{if(!Ur.current||ar===null)return;const zr=attachmentStore$1.getState().attachmentSystem.currentStructure.getNodeByGUID(a.itemData.guid);if(zr==null)return;async function rs(){zr.ref!==Ur.current&&(zr.ref=Ur.current,zr.transform={position:o,rotation:s}),zr.modelData=ar,await attachmentStore$1.getState().actions.updateFittingSkuIds()}rs()},[Ur,ar]),reactExports.useEffect(()=>{if(Ur.current&&zn&&a.itemData.hasOwnProperty("excludeFromSceneBounds")&&a.itemData.excludeFromSceneBounds){const zr=zn.getObjectByName("#GRP_EXCLUDED");zr!==void 0&&zr.attach(Ur.current)}},[zn,Ur]),jsxRuntimeExports.jsxs("group",{ref:Ur,position:o,quaternion:s,name:`GRP_${a.itemData.name}_`+yn.toString().padStart(2,"0"),children:[ar!==null&&(ar.mainModelReady?jsxRuntimeExports.jsx(Model,{modelData:ar.data,clonedMesh:ar.clonedMesh,clonedProxyMesh:hr,itemKey:a,scale:b,onDragStartHandler:sn,onDragEndHandler:rn,onItemClickHandler:bt}):jsxRuntimeExports.jsx(ProxyModelOnly,{itemKey:a,proxymodel:hr,scale:b})),ar==null&&hr&&a.itemData.gltfURL&&jsxRuntimeExports.jsx(LoadingBox,{proxymodel:hr,distanceFactor:a.itemData.boundingBoxSize.x*4>1?1:a.itemData.boundingBoxSize.x*4,position:a.itemData.boundingSphereCenter,scale:b})]})};function GhostEventHandler({index:o,children:s,...a}){const b=reactExports.useRef(),_e=useGesture({onPointerEnter:bt=>{bt.event.stopPropagation(),coreSceneStore.getState().itemDraggedSkuID&&coreSceneStore.setState({hoveredGhostIndex:o})},onPointerLeave:bt=>{bt.event.stopPropagation(),coreSceneStore.getState().itemDraggedSkuID&&coreSceneStore.getState().hoveredGhostIndex===o&&coreSceneStore.setState({hoveredGhostIndex:-1})}});return jsxRuntimeExports.jsx("group",{ref:b,..._e(),...a,children:s})}const Ghost=({ghostVisibility:o,ghostData:s,ghostTransform:a,index:b})=>{const _e=reactExports.useRef(),bt=reactExports.useMemo(()=>s.proxyScene.clone(),[s]),rn=coreSceneStore(sn=>sn.hoveredGhostIndex);return reactExports.useEffect(()=>{const{current:sn}=_e;sn&&(sn.userData.incomingPlugName=a.incomingPlugName,sn.userData.receiverPlugName=a.receiverPlugName,sn.userData.incomingPlugGUID=a.incomingPlugGUID,sn.userData.receiverPlugGUID=a.receiverPlugGUID,CORE_API.fireEvent(CORE_API.EVENTS.SCENE.Ghost_Loaded,{ghostData:s,ghostTransform:a}))},[_e]),jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:jsxRuntimeExports.jsx(GhostEventHandler,{index:b,children:jsxRuntimeExports.jsx(Select,{enabled:rn===b,children:jsxRuntimeExports.jsx("primitive",{isGhost:!0,ref:_e,index:b,autoFocusEnabled:o,position:a.position,scale:coreSceneStore.getState().sceneSettings.ghostScale,quaternion:a.rotation,object:bt,castShadow:!1,receiveShadow:!1,frustumCulled:!1},`ghost${b}`)})})})},GhostManager=({intersectingGhostObject:o=null})=>{const{camera:s}=useThree(),a=ghostStore(Pn=>Pn.ghostVisibility),b=ghostStore(Pn=>Pn.ghostData),_e=ghostStore(Pn=>Pn.ghostsTransform),bt=reactExports.useRef(),{_touch2D:rn,raycasterGhost:sn}=reactExports.useMemo(()=>({_touch2D:new Vector2,raycasterGhost:new Raycaster}),[]);reactExports.useEffect(()=>{const{current:Pn}=bt;Pn&&ghostStore.setState({ghostParentRef:Pn})},[bt]);const yn=Pn=>{let zn=0,lr=0;if(Pn.touches&&Pn.touches[0])zn=Pn.touches[0].clientX,lr=Pn.touches[0].clientY;else return;if(!coreSceneStore.getState().itemDraggedSkuID)return;const ar=coreSceneStore.getState().cursorParentRef,cr=coreSceneStore.getState().canvasSize;if(!ar)return;const hr=ar.getBoundingClientRect(),es=hr.top,Ur=hr.left,Dr=(zn-Ur)/cr.width*2-1,zr=(-lr+es)/cr.height*2+1;rn.set(Dr,zr),sn.layers.enable(GHOST_LAYER),sn.setFromCamera(rn,s);const rs=sn.intersectObject(ghostStore.getState().ghostParentRef);rs.length>0?(o=rs[0].object,coreSceneStore.setState({hoveredGhostIndex:o.parent.index})):(o=null,coreSceneStore.setState({hoveredGhostIndex:-1}))};return reactExports.useEffect(()=>{window.addEventListener("touchmove",yn,!1),LOGGER.info({title:"Ghost Manager Mounted!"})},[]),jsxRuntimeExports.jsx("group",{name:"#GRP_GhostParent",visible:a,scale:a?[1,1,1]:[0,0,0],ref:bt,children:b&&jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:_e.map((Pn,zn)=>zn<b.count&&jsxRuntimeExports.jsx(Ghost,{ghostVisibility:a,ghostData:b,ghostTransform:Pn,index:zn},"ghosts"+zn))})})},ItemManager=()=>{const o=attachmentStore$1(ho=>ho.attachmentSystem),s=attachmentStore$1(ho=>ho),a=itemStore(ho=>ho.removeItemTrigger),b=itemStore(ho=>ho.variantChangeAlert),_e=hotspotStore$1(ho=>ho),bt=coreSceneStore(ho=>ho.showDimensions);coreSceneStore(ho=>ho.sceneSettings);const rn=itemStore(ho=>ho),sn=itemStore(ho=>ho.lastDeletedItemData),yn=cameraStore(ho=>ho),Pn=itemStore(ho=>ho.selectedItemData),zn=itemStore(ho=>ho.itemsSpawned),lr=reactExports.useRef(null),ar=reactExports.useRef(null),cr=reactExports.useRef(!1),hr=reactExports.useRef(null),es=reactExports.useRef(null),Ur=reactExports.useRef(!1),Dr=reactExports.useRef(!1);reactExports.useRef(!1),reactExports.useRef(!1);const zr=reactExports.useCallback(async({guid:ho,node:ga,detachedData:mo,attachedChildrenGuids:go})=>{if(cr.current!==!0)return cr.current=!0,cameraStore.getState().actions.canCameraRotate(!1),_e.actions.switchHotspotsVisibility(!1,!0),hr.current={position:ga.ref.position.clone(),rotation:ga.ref.rotation.clone()},es.current=mo,await o.currentStructure.removeNodeFromStructure(ga),go.length<=0&&(go=!1),ghostStore.getState().actions.spawnGhostsForSkuID(zn[ho].itemData.skuID,go)},[yn,zn]),rs=reactExports.useCallback(async({node:ho,intersectingGhostObject:ga,attachedChildrenGuids:mo,attachedNodesToCurrentNode:go})=>{if(!cr.current)return;cr.current=!1,cameraStore.getState().actions.canCameraRotate(!0),_e.actions.switchHotspotsVisibility(!0,!0);function yl(){ho.ref.position.set(0,0,0),ghostStore.getState().actions.clearAllGhosts()}if(!ghostStore.getState().ghostData?.connectablePlugs){yl();return}o.currentStructure.addNode(ho);let _d=null,Ty=null,yy=!1,by=[],Al={};if(coreSceneStore.getState().sceneSettings.ignoreCollisionPostDragging===!1&&mo.map((_f,gy)=>{by[gy]=o.currentStructure.checkCollisionforGUID(_f,mo),by[gy]&&(Al[_f]=zn[_f],o.currentStructure.getNodeByGUID(_f).getAllBranchedNodesAttachedToUs().map(By=>{Al[By.guid]=zn[By.guid]}))}),by.map(_f=>{yy||(yy=_f)}),ga&&yy){coreSceneStore.setState({draggingOnDropCollisionData:{node:ho,attachedChildrenGuids:mo,collidingStatus:by,intersectingGhostObject:ga,initPosition:hr.current.position,initRotation:hr.current.rotation,detachedPlugs:es.current,attachedNodesToCurrentNode:go}}),ho.ref.position.set(ga.position.x,ga.position.y,ga.position.z),ho.ref.setRotationFromEuler(ga.rotation),CORE_API.fireEvent(CORE_API.EVENTS.SCENE.DraggingOnDrop_CollsionDetected,Al);return}if(ga){const _f=ga.userData;_d=ho.getPlugByName(_f.incomingPlugName),Ty=o.currentStructure.getPlugByGUID(_f.receiverPlugGUID),ho.ref.position.set(ga.position.x,ga.position.y,ga.position.z),ho.ref.setRotationFromEuler(ga.rotation),ho.transform={position:ga.position,rotation:ga.quaternion}}else{const _f=es.current.neighbourDetachedPlugs;_f&&(es.current.neighbourNode.detachNodeFromReceiver(),o.currentStructure.connectPlugs({incomingPlug:_f.incomingPlug,receiverPlug:_f.receiverPlug})),_d=es.current.rootDetachedPlugs.incomingPlug,Ty=es.current.rootDetachedPlugs.receiverPlug,ho.ref.position.set(hr.current.position.x,hr.current.position.y,hr.current.position.z),ho.ref.setRotationFromEuler(hr.current.rotation);let gy=new Quaternion().identity();ho.ref.getWorldQuaternion(gy),ho.transform={position:hr.current.position,rotation:gy}}o.currentStructure.connectPlugs({incomingPlug:_d,receiverPlug:Ty}),ghostStore.getState().actions.clearAllGhosts(),itemStore.getState().actions.deselectItem(),go.map(_f=>{ho.ref.parent.attach(_f.ref),_f.transform={position:_f.ref.position,rotation:_f.ref.quaternion},ho.dragging=!1,_f.dragging=!1}),await attachmentStore$1.getState().actions.updateFittingSkuIds()},[yn,coreSceneStore,ghostStore,o,s,zn]),as=reactExports.useCallback((ho,ga,mo)=>{if(coreSceneStore.getState().sceneSettings.disableContextMenu)return;const go=attachmentStore$1.getState().attachmentSystem.currentStructure,yl=go.getNodeByGUID(mo);let Zl=[];if(!yl?.myDependenciesGUID)return;yl.myDependenciesGUID.map(yy=>{const by=go.getNodeByGUID(yy);if(!by)return;let Al={guid:yy,name:zn[yy].itemData.guid,data:{...zn[yy],overrideVariant:by.overrideVariant,currentVariant:by.currentVariant,offsetX:ho,offsetY:ga}};Zl.push(Al)}),Zl.sort((yy,by)=>yy.name>by.name?1:by.name>yy.name?-1:0);let _d=inventoryStore.getState().inventoryData[zn[mo].itemData.skuID];const Ty={primary:{guid:mo,name:zn[mo].itemData.name,data:{inventory:_d,...zn[mo],overrideVariant:yl.overrideVariant,currentVariant:yl.currentVariant,offsetX:ho,offsetY:ga}},dependencies:Zl};rn.actions.setSelectedItemData(Ty.primary.data),CORE_API.fireEvent(CORE_API.EVENTS.UI.ContextMenu_Show,Ty)},[zn]),os=reactExports.useCallback(ho=>{if(!ho)return;itemStore.setState({lastDeletedItemData:{...zn[ho]}});const ga={...zn[ho]};delete zn[ho],rn.actions.setItemsSpawned({...zn}),CORE_API.fireEvent(CORE_API.EVENTS.SCENE.Item_Removed,ga)},[rn,itemStore,zn]);reactExports.useEffect(()=>{let ho=itemStore.getState().removeItems;if(ho.length<=0&&!sn)return;let ga=ho.pop();os(ga)},[a,sn]);const ls=reactExports.useCallback(function(ho,ga){const mo=ho>1?!0:ho===1?Object.values(zn)[0].itemData.skuID.toLowerCase()!=="root":!1,go=!mo;LOGGER.groupCollapsed("Resolving buttons visibility"),LOGGER.table({sceneIsEmpty:go,sceneIsNotEmpty:mo}),LOGGER.groupEnd(),ga.showViewInYourSpaceBtn===!0&&(mo&&Ur.current===!1?(CORE_API.fireEvent(CORE_API.EVENTS.UI.ViewInYourSpaceButton_Show),Ur.current=!0):go&&Ur.current===!0&&(CORE_API.fireEvent(CORE_API.EVENTS.UI.ViewInYourSpaceButton_Hide),Ur.current=!1)),ga.showShareBtn===!0&&(mo&&Dr.current===!1?(CORE_API.fireEvent(CORE_API.EVENTS.UI.ShareButton_Show),Dr.current=!0):go&&Dr.current===!0&&(CORE_API.fireEvent(CORE_API.EVENTS.UI.ShareButton_Hide),Dr.current=!1))},[zn]);reactExports.useEffect(()=>{CORE_API.fireEvent(CORE_API.EVENTS.SCENE.Items_Updated,{itemsSpawned:zn});const ho=coreSceneStore.getState().sceneSettings,ga=itemStore.getState().defaultSceneItemCount;ls(Object.keys(zn).length,ho),Object.keys(zn).length===ga?coreSceneStore.setState({canvasTooltipText:ho.textSettings.tooltipEmptySceneText}):Object.keys(zn).length===ga+1&&coreSceneStore.setState({canvasTooltipText:ho.textSettings.tooltipInstructionText})},[zn]),reactExports.useEffect(()=>{async function ho(){const ga=attachmentStore$1.getState().attachmentSystem;if(!ga)return;inventoryStore.getState().actions.refreshInventory(zn);const mo=await ga.getCartItemsAsync();CORE_API.fireEvent(CORE_API.EVENTS.SCENE.CartItems_Updated,mo),CORE_API.fireEvent(CORE_API.EVENTS.SCENE.ReplaceableCategory_Updated,ga.currentStructure.getCurrentItemsInReplaceableCategory())}ho()},[zn,b]);const zs=reactExports.useCallback((ho,ga,mo)=>{CORE_API.removeItemByGUID(mo),CORE_API.alert({alertMsg:ga+": "+ho,alertTime:5e3,alertType:"error",alertLabel:"Error",persistant:!0})},[]);return reactExports.useEffect(()=>{const{current:ho}=ar;ho&&attachmentStore$1.setState({colliderMeshRef:ho})},[ar]),reactExports.useEffect(()=>{const{current:ho}=lr;ho&&coreSceneStore.setState({sceneRef:ho})},[lr]),reactExports.useEffect(()=>{let ho=Pn?cameraStore.getState().cameraSettings.zoomingMultiplier:cameraStore.getState().cameraSettings.zoomingMultiplier+.1;ho+=bt?.3:.1,cameraStore.setState({boundsMargin:ho}),coreSceneStore.getState().actions.triggerAutoFocus()},[bt,Pn]),reactExports.useEffect(()=>{const ho=itemStore.getState().itemsSpawned;if(LOGGER.info({title:"item Manager mounted"}),!coreSceneStore.getState().preconfigurationLoaded)attachmentStore$1.getState().actions.loadDefaultStructure();else if(Object.keys(ho).length===1){const ga=Object.keys(ho)[0];itemStore.getState().actions.resolvePlugDependencyOnGUID(ga)}},[]),jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsxs("group",{name:"Scene",ref:lr,onPointerMissed:()=>{Pn&&rn.actions.deselectItem(),hotspotStore$1.getState().isAnyHotspotActive&&hotspotStore$1.getState().actions.exitHotspot()},children:[IS_DEV_ENV,jsxRuntimeExports.jsx("group",{name:"#GRP_EXCLUDED"}),jsxRuntimeExports.jsxs("group",{name:"#ITEMSANDGHOSTS",children:[jsxRuntimeExports.jsx("group",{name:"#ITEMS",children:Object.keys(zn).map((ho,ga)=>jsxRuntimeExports.jsx(Item,{scale:[1,1,1],onDragStartHandler:zr,onDragEndHandler:rs,onItemClickHandler:as,itemKey:zn[ho],position:zn[ho].itemData.position,rotation:zn[ho].itemData.rotation,itemIndex:ga,proxyScene:zn[ho].itemData.proxyScene,rejectFunc:zs},ho))}),jsxRuntimeExports.jsx(GhostManager,{})]})]}),jsxRuntimeExports.jsx("group",{name:"#Parent_ColliderMesh",children:jsxRuntimeExports.jsx("mesh",{ref:ar,visible:!1,enabled:!0,name:"#COLLIDER_MESH",children:jsxRuntimeExports.jsx("meshPhongMaterial",{depthTest:!1,transparent:!0,opacity:.8})})})]})},ContactShadows=reactExports.forwardRef(({scale:o=10,frames:s=1/0,excludeLayer:a=-1,bbmin:b=1,bbmax:_e=1,opacity:bt=1,width:rn=1,height:sn=1,blur:yn=1,near:Pn=0,far:zn=10,resolution:lr=512,smooth:ar=!0,color:cr="#000000",depthWrite:hr=!1,renderOrder:es,...Ur},Dr)=>{const zr=reactExports.useRef(null),rs=useThree(by=>by.scene),as=useThree(by=>by.gl),os=reactExports.useRef(null);rn=rn*(Array.isArray(o)?o[0]:o||1),sn=sn*(Array.isArray(o)?o[1]:o||1);const[ls,zs,ho,ga,mo,go,yl]=reactExports.useMemo(()=>{const by=new WebGLRenderTarget(lr,lr),Al=new WebGLRenderTarget(lr,lr);Al.texture.generateMipmaps=by.texture.generateMipmaps=!1;const _f=new PlaneGeometry(rn,sn).rotateX(Math.PI/2),gy=new Mesh(_f),El=new MeshDepthMaterial;El.depthTest=El.depthWrite=!1,El.onBeforeCompile=lA=>{lA.uniforms={...lA.uniforms,ucolor:{value:new Color$1(cr)}},lA.fragmentShader=lA.fragmentShader.replace("void main() {",`uniform vec3 ucolor;
|
|
9102
|
+
*/const MOUSE_BUTTON={LEFT:1,RIGHT:2,MIDDLE:4},ACTION=Object.freeze({NONE:0,ROTATE:1,TRUCK:2,OFFSET:4,DOLLY:8,ZOOM:16,TOUCH_ROTATE:32,TOUCH_TRUCK:64,TOUCH_OFFSET:128,TOUCH_DOLLY:256,TOUCH_ZOOM:512,TOUCH_DOLLY_TRUCK:1024,TOUCH_DOLLY_OFFSET:2048,TOUCH_DOLLY_ROTATE:4096,TOUCH_ZOOM_TRUCK:8192,TOUCH_ZOOM_OFFSET:16384,TOUCH_ZOOM_ROTATE:32768}),DOLLY_DIRECTION={NONE:0,IN:1,OUT:-1};function isPerspectiveCamera(o){return o.isPerspectiveCamera}function isOrthographicCamera(o){return o.isOrthographicCamera}const PI_2=Math.PI*2,PI_HALF=Math.PI/2,EPSILON=1e-5,DEG2RAD=Math.PI/180;function clamp(o,s,a){return Math.max(s,Math.min(a,o))}function approxZero(o,s=EPSILON){return Math.abs(o)<s}function approxEquals(o,s,a=EPSILON){return approxZero(o-s,a)}function roundToStep(o,s){return Math.round(o/s)*s}function infinityToMaxNumber(o){return isFinite(o)?o:o<0?-Number.MAX_VALUE:Number.MAX_VALUE}function maxNumberToInfinity(o){return Math.abs(o)<Number.MAX_VALUE?o:o*(1/0)}function smoothDamp(o,s,a,b,_e=1/0,bt){b=Math.max(1e-4,b);const rn=2/b,sn=rn*bt,yn=1/(1+sn+.48*sn*sn+.235*sn*sn*sn);let Pn=o-s;const zn=s,lr=_e*b;Pn=clamp(Pn,-lr,lr),s=o-Pn;const ar=(a.value+rn*Pn)*bt;a.value=(a.value-rn*ar)*yn;let cr=s+(Pn+ar)*yn;return zn-o>0==cr>zn&&(cr=zn,a.value=(cr-zn)/bt),cr}function smoothDampVec3(o,s,a,b,_e=1/0,bt,rn){b=Math.max(1e-4,b);const sn=2/b,yn=sn*bt,Pn=1/(1+yn+.48*yn*yn+.235*yn*yn*yn);let zn=s.x,lr=s.y,ar=s.z,cr=o.x-zn,hr=o.y-lr,es=o.z-ar;const Ur=zn,Dr=lr,zr=ar,rs=_e*b,as=rs*rs,os=cr*cr+hr*hr+es*es;if(os>as){const Ty=Math.sqrt(os);cr=cr/Ty*rs,hr=hr/Ty*rs,es=es/Ty*rs}zn=o.x-cr,lr=o.y-hr,ar=o.z-es;const ls=(a.x+sn*cr)*bt,zs=(a.y+sn*hr)*bt,ho=(a.z+sn*es)*bt;a.x=(a.x-sn*ls)*Pn,a.y=(a.y-sn*zs)*Pn,a.z=(a.z-sn*ho)*Pn,rn.x=zn+(cr+ls)*Pn,rn.y=lr+(hr+zs)*Pn,rn.z=ar+(es+ho)*Pn;const ga=Ur-o.x,mo=Dr-o.y,go=zr-o.z,yl=rn.x-Ur,Zl=rn.y-Dr,_d=rn.z-zr;return ga*yl+mo*Zl+go*_d>0&&(rn.x=Ur,rn.y=Dr,rn.z=zr,a.x=(rn.x-Ur)/bt,a.y=(rn.y-Dr)/bt,a.z=(rn.z-zr)/bt),rn}function extractClientCoordFromEvent(o,s){s.set(0,0),o.forEach(a=>{s.x+=a.clientX,s.y+=a.clientY}),s.x/=o.length,s.y/=o.length}function notSupportedInOrthographicCamera(o,s){return isOrthographicCamera(o)?(console.warn(`${s} is not supported in OrthographicCamera`),!0):!1}let EventDispatcher$1=class{constructor(){this._listeners={}}addEventListener(s,a){const b=this._listeners;b[s]===void 0&&(b[s]=[]),b[s].indexOf(a)===-1&&b[s].push(a)}hasEventListener(s,a){const b=this._listeners;return b[s]!==void 0&&b[s].indexOf(a)!==-1}removeEventListener(s,a){const _e=this._listeners[s];if(_e!==void 0){const bt=_e.indexOf(a);bt!==-1&&_e.splice(bt,1)}}removeAllEventListeners(s){if(!s){this._listeners={};return}Array.isArray(this._listeners[s])&&(this._listeners[s].length=0)}dispatchEvent(s){const b=this._listeners[s.type];if(b!==void 0){s.target=this;const _e=b.slice(0);for(let bt=0,rn=_e.length;bt<rn;bt++)_e[bt].call(this,s)}}};const VERSION="2.7.3",TOUCH_DOLLY_FACTOR=1/8,isBrowser=typeof window<"u",isMac=isBrowser&&/Mac/.test(navigator.platform),isPointerEventsNotSupported=!(isBrowser&&"PointerEvent"in window);let THREE,_ORIGIN,_AXIS_Y,_AXIS_Z,_v2,_v3A,_v3B,_v3C,_cameraDirection,_xColumn,_yColumn,_zColumn,_deltaTarget,_deltaOffset,_sphericalA,_sphericalB,_box3A,_box3B,_sphere,_quaternionA,_quaternionB,_rotationMatrix,_raycaster,CameraControls$1=class YD extends EventDispatcher$1{static install(s){THREE=s.THREE,_ORIGIN=Object.freeze(new THREE.Vector3(0,0,0)),_AXIS_Y=Object.freeze(new THREE.Vector3(0,1,0)),_AXIS_Z=Object.freeze(new THREE.Vector3(0,0,1)),_v2=new THREE.Vector2,_v3A=new THREE.Vector3,_v3B=new THREE.Vector3,_v3C=new THREE.Vector3,_cameraDirection=new THREE.Vector3,_xColumn=new THREE.Vector3,_yColumn=new THREE.Vector3,_zColumn=new THREE.Vector3,_deltaTarget=new THREE.Vector3,_deltaOffset=new THREE.Vector3,_sphericalA=new THREE.Spherical,_sphericalB=new THREE.Spherical,_box3A=new THREE.Box3,_box3B=new THREE.Box3,_sphere=new THREE.Sphere,_quaternionA=new THREE.Quaternion,_quaternionB=new THREE.Quaternion,_rotationMatrix=new THREE.Matrix4,_raycaster=new THREE.Raycaster}static get ACTION(){return ACTION}constructor(s,a){super(),this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.minDistance=Number.EPSILON,this.maxDistance=1/0,this.infinityDolly=!1,this.minZoom=.01,this.maxZoom=1/0,this.smoothTime=.25,this.draggingSmoothTime=.125,this.maxSpeed=1/0,this.azimuthRotateSpeed=1,this.polarRotateSpeed=1,this.dollySpeed=1,this.dollyDragInverted=!1,this.truckSpeed=2,this.dollyToCursor=!1,this.dragToOffset=!1,this.verticalDragToForward=!1,this.boundaryFriction=0,this.restThreshold=.01,this.colliderMeshes=[],this.cancel=()=>{},this._enabled=!0,this._state=ACTION.NONE,this._viewport=null,this._changedDolly=0,this._changedZoom=0,this._hasRested=!0,this._boundaryEnclosesCamera=!1,this._needsUpdate=!0,this._updatedLastTime=!1,this._elementRect=new DOMRect,this._isDragging=!1,this._dragNeedsUpdate=!0,this._activePointers=[],this._lockedPointer=null,this._interactiveArea=new DOMRect(0,0,1,1),this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._isUserControllingOffset=!1,this._isUserControllingZoom=!1,this._lastDollyDirection=DOLLY_DIRECTION.NONE,this._thetaVelocity={value:0},this._phiVelocity={value:0},this._radiusVelocity={value:0},this._targetVelocity=new THREE.Vector3,this._focalOffsetVelocity=new THREE.Vector3,this._zoomVelocity={value:0},this._truckInternal=(as,os,ls)=>{let zs,ho;if(isPerspectiveCamera(this._camera)){const ga=_v3A.copy(this._camera.position).sub(this._target),mo=this._camera.getEffectiveFOV()*DEG2RAD,go=ga.length()*Math.tan(mo*.5);zs=this.truckSpeed*as*go/this._elementRect.height,ho=this.truckSpeed*os*go/this._elementRect.height}else if(isOrthographicCamera(this._camera)){const ga=this._camera;zs=as*(ga.right-ga.left)/ga.zoom/this._elementRect.width,ho=os*(ga.top-ga.bottom)/ga.zoom/this._elementRect.height}else return;this.verticalDragToForward?(ls?this.setFocalOffset(this._focalOffsetEnd.x+zs,this._focalOffsetEnd.y,this._focalOffsetEnd.z,!0):this.truck(zs,0,!0),this.forward(-ho,!0)):ls?this.setFocalOffset(this._focalOffsetEnd.x+zs,this._focalOffsetEnd.y+ho,this._focalOffsetEnd.z,!0):this.truck(zs,ho,!0)},this._rotateInternal=(as,os)=>{const ls=PI_2*this.azimuthRotateSpeed*as/this._elementRect.height,zs=PI_2*this.polarRotateSpeed*os/this._elementRect.height;this.rotate(ls,zs,!0)},this._dollyInternal=(as,os,ls)=>{const zs=Math.pow(.95,-as*this.dollySpeed),ho=this._sphericalEnd.radius,ga=this._sphericalEnd.radius*zs,mo=clamp(ga,this.minDistance,this.maxDistance),go=mo-ga;this.infinityDolly&&this.dollyToCursor?this._dollyToNoClamp(ga,!0):this.infinityDolly&&!this.dollyToCursor?(this.dollyInFixed(go,!0),this._dollyToNoClamp(mo,!0)):this._dollyToNoClamp(mo,!0),this.dollyToCursor&&(this._changedDolly+=(this.infinityDolly?ga:mo)-ho,this._dollyControlCoord.set(os,ls)),this._lastDollyDirection=Math.sign(-as)},this._zoomInternal=(as,os,ls)=>{const zs=Math.pow(.95,as*this.dollySpeed),ho=this._zoom,ga=this._zoom*zs;this.zoomTo(ga,!0),this.dollyToCursor&&(this._changedZoom+=ga-ho,this._dollyControlCoord.set(os,ls))},typeof THREE>"u"&&console.error("camera-controls: `THREE` is undefined. You must first run `CameraControls.install( { THREE: THREE } )`. Check the docs for further information."),this._camera=s,this._yAxisUpSpace=new THREE.Quaternion().setFromUnitVectors(this._camera.up,_AXIS_Y),this._yAxisUpSpaceInverse=this._yAxisUpSpace.clone().invert(),this._state=ACTION.NONE,this._target=new THREE.Vector3,this._targetEnd=this._target.clone(),this._focalOffset=new THREE.Vector3,this._focalOffsetEnd=this._focalOffset.clone(),this._spherical=new THREE.Spherical().setFromVector3(_v3A.copy(this._camera.position).applyQuaternion(this._yAxisUpSpace)),this._sphericalEnd=this._spherical.clone(),this._lastDistance=this._spherical.radius,this._zoom=this._camera.zoom,this._zoomEnd=this._zoom,this._lastZoom=this._zoom,this._nearPlaneCorners=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3],this._updateNearPlaneCorners(),this._boundary=new THREE.Box3(new THREE.Vector3(-1/0,-1/0,-1/0),new THREE.Vector3(1/0,1/0,1/0)),this._cameraUp0=this._camera.up.clone(),this._target0=this._target.clone(),this._position0=this._camera.position.clone(),this._zoom0=this._zoom,this._focalOffset0=this._focalOffset.clone(),this._dollyControlCoord=new THREE.Vector2,this.mouseButtons={left:ACTION.ROTATE,middle:ACTION.DOLLY,right:ACTION.TRUCK,wheel:isPerspectiveCamera(this._camera)?ACTION.DOLLY:isOrthographicCamera(this._camera)?ACTION.ZOOM:ACTION.NONE},this.touches={one:ACTION.TOUCH_ROTATE,two:isPerspectiveCamera(this._camera)?ACTION.TOUCH_DOLLY_TRUCK:isOrthographicCamera(this._camera)?ACTION.TOUCH_ZOOM_TRUCK:ACTION.NONE,three:ACTION.TOUCH_TRUCK};const b=new THREE.Vector2,_e=new THREE.Vector2,bt=new THREE.Vector2,rn=as=>{if(!this._enabled||!this._domElement)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const zs=this._domElement.getBoundingClientRect(),ho=as.clientX/zs.width,ga=as.clientY/zs.height;if(ho<this._interactiveArea.left||ho>this._interactiveArea.right||ga<this._interactiveArea.top||ga>this._interactiveArea.bottom)return}const os=as.pointerType!=="mouse"?null:(as.buttons&MOUSE_BUTTON.LEFT)===MOUSE_BUTTON.LEFT?MOUSE_BUTTON.LEFT:(as.buttons&MOUSE_BUTTON.MIDDLE)===MOUSE_BUTTON.MIDDLE?MOUSE_BUTTON.MIDDLE:(as.buttons&MOUSE_BUTTON.RIGHT)===MOUSE_BUTTON.RIGHT?MOUSE_BUTTON.RIGHT:null;if(os!==null){const zs=this._findPointerByMouseButton(os);zs&&this._disposePointer(zs)}if((as.buttons&MOUSE_BUTTON.LEFT)===MOUSE_BUTTON.LEFT&&this._lockedPointer)return;const ls={pointerId:as.pointerId,clientX:as.clientX,clientY:as.clientY,deltaX:0,deltaY:0,mouseButton:os};this._activePointers.push(ls),this._domElement.ownerDocument.removeEventListener("pointermove",yn,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",zn),this._domElement.ownerDocument.addEventListener("pointermove",yn,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",zn),this._isDragging=!0,es(as)},sn=as=>{if(!this._enabled||!this._domElement||this._lockedPointer)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const zs=this._domElement.getBoundingClientRect(),ho=as.clientX/zs.width,ga=as.clientY/zs.height;if(ho<this._interactiveArea.left||ho>this._interactiveArea.right||ga<this._interactiveArea.top||ga>this._interactiveArea.bottom)return}const os=(as.buttons&MOUSE_BUTTON.LEFT)===MOUSE_BUTTON.LEFT?MOUSE_BUTTON.LEFT:(as.buttons&MOUSE_BUTTON.MIDDLE)===MOUSE_BUTTON.MIDDLE?MOUSE_BUTTON.MIDDLE:(as.buttons&MOUSE_BUTTON.RIGHT)===MOUSE_BUTTON.RIGHT?MOUSE_BUTTON.RIGHT:null;if(os!==null){const zs=this._findPointerByMouseButton(os);zs&&this._disposePointer(zs)}const ls={pointerId:1,clientX:as.clientX,clientY:as.clientY,deltaX:0,deltaY:0,mouseButton:(as.buttons&MOUSE_BUTTON.LEFT)===MOUSE_BUTTON.LEFT?MOUSE_BUTTON.LEFT:(as.buttons&MOUSE_BUTTON.MIDDLE)===MOUSE_BUTTON.LEFT?MOUSE_BUTTON.MIDDLE:(as.buttons&MOUSE_BUTTON.RIGHT)===MOUSE_BUTTON.LEFT?MOUSE_BUTTON.RIGHT:null};this._activePointers.push(ls),this._domElement.ownerDocument.removeEventListener("mousemove",Pn),this._domElement.ownerDocument.removeEventListener("mouseup",lr),this._domElement.ownerDocument.addEventListener("mousemove",Pn),this._domElement.ownerDocument.addEventListener("mouseup",lr),this._isDragging=!0,es(as)},yn=as=>{as.cancelable&&as.preventDefault();const os=as.pointerId,ls=this._lockedPointer||this._findPointerById(os);if(ls){if(ls.clientX=as.clientX,ls.clientY=as.clientY,ls.deltaX=as.movementX,ls.deltaY=as.movementY,this._state=0,as.pointerType==="touch")switch(this._activePointers.length){case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else(!this._isDragging&&this._lockedPointer||this._isDragging&&(as.buttons&MOUSE_BUTTON.LEFT)===MOUSE_BUTTON.LEFT)&&(this._state=this._state|this.mouseButtons.left),this._isDragging&&(as.buttons&MOUSE_BUTTON.MIDDLE)===MOUSE_BUTTON.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),this._isDragging&&(as.buttons&MOUSE_BUTTON.RIGHT)===MOUSE_BUTTON.RIGHT&&(this._state=this._state|this.mouseButtons.right);Ur()}},Pn=as=>{const os=this._lockedPointer||this._findPointerById(1);os&&(os.clientX=as.clientX,os.clientY=as.clientY,os.deltaX=as.movementX,os.deltaY=as.movementY,this._state=0,(this._lockedPointer||(as.buttons&MOUSE_BUTTON.LEFT)===MOUSE_BUTTON.LEFT)&&(this._state=this._state|this.mouseButtons.left),(as.buttons&MOUSE_BUTTON.MIDDLE)===MOUSE_BUTTON.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),(as.buttons&MOUSE_BUTTON.RIGHT)===MOUSE_BUTTON.RIGHT&&(this._state=this._state|this.mouseButtons.right),Ur())},zn=as=>{const os=this._findPointerById(as.pointerId);if(!(os&&os===this._lockedPointer)){if(os&&this._disposePointer(os),as.pointerType==="touch")switch(this._activePointers.length){case 0:this._state=ACTION.NONE;break;case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else this._state=ACTION.NONE;Dr()}},lr=()=>{const as=this._findPointerById(1);as&&as===this._lockedPointer||(as&&this._disposePointer(as),this._state=ACTION.NONE,Dr())};let ar=-1;const cr=as=>{if(!this._domElement||!this._enabled||this.mouseButtons.wheel===ACTION.NONE)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const ga=this._domElement.getBoundingClientRect(),mo=as.clientX/ga.width,go=as.clientY/ga.height;if(mo<this._interactiveArea.left||mo>this._interactiveArea.right||go<this._interactiveArea.top||go>this._interactiveArea.bottom)return}if(as.preventDefault(),this.dollyToCursor||this.mouseButtons.wheel===ACTION.ROTATE||this.mouseButtons.wheel===ACTION.TRUCK){const ga=performance.now();ar-ga<1e3&&this._getClientRect(this._elementRect),ar=ga}const os=isMac?-1:-3,ls=as.deltaMode===1?as.deltaY/os:as.deltaY/(os*10),zs=this.dollyToCursor?(as.clientX-this._elementRect.x)/this._elementRect.width*2-1:0,ho=this.dollyToCursor?(as.clientY-this._elementRect.y)/this._elementRect.height*-2+1:0;switch(this.mouseButtons.wheel){case ACTION.ROTATE:{this._rotateInternal(as.deltaX,as.deltaY),this._isUserControllingRotate=!0;break}case ACTION.TRUCK:{this._truckInternal(as.deltaX,as.deltaY,!1),this._isUserControllingTruck=!0;break}case ACTION.OFFSET:{this._truckInternal(as.deltaX,as.deltaY,!0),this._isUserControllingOffset=!0;break}case ACTION.DOLLY:{this._dollyInternal(-ls,zs,ho),this._isUserControllingDolly=!0;break}case ACTION.ZOOM:{this._zoomInternal(-ls,zs,ho),this._isUserControllingZoom=!0;break}}this.dispatchEvent({type:"control"})},hr=as=>{if(!(!this._domElement||!this._enabled)){if(this.mouseButtons.right===YD.ACTION.NONE){const os=as instanceof PointerEvent?as.pointerId:(as instanceof MouseEvent,0),ls=this._findPointerById(os);ls&&this._disposePointer(ls),this._domElement.ownerDocument.removeEventListener("pointermove",yn,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",zn),this._domElement.ownerDocument.removeEventListener("mousemove",Pn),this._domElement.ownerDocument.removeEventListener("mouseup",lr);return}as.preventDefault()}},es=as=>{if(!this._enabled)return;if(extractClientCoordFromEvent(this._activePointers,_v2),this._getClientRect(this._elementRect),b.copy(_v2),_e.copy(_v2),this._activePointers.length>=2){const ls=_v2.x-this._activePointers[1].clientX,zs=_v2.y-this._activePointers[1].clientY,ho=Math.sqrt(ls*ls+zs*zs);bt.set(0,ho);const ga=(this._activePointers[0].clientX+this._activePointers[1].clientX)*.5,mo=(this._activePointers[0].clientY+this._activePointers[1].clientY)*.5;_e.set(ga,mo)}if(this._state=0,!as)this._lockedPointer&&(this._state=this._state|this.mouseButtons.left);else if("pointerType"in as&&as.pointerType==="touch")switch(this._activePointers.length){case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else!this._lockedPointer&&(as.buttons&MOUSE_BUTTON.LEFT)===MOUSE_BUTTON.LEFT&&(this._state=this._state|this.mouseButtons.left),(as.buttons&MOUSE_BUTTON.MIDDLE)===MOUSE_BUTTON.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),(as.buttons&MOUSE_BUTTON.RIGHT)===MOUSE_BUTTON.RIGHT&&(this._state=this._state|this.mouseButtons.right);((this._state&ACTION.ROTATE)===ACTION.ROTATE||(this._state&ACTION.TOUCH_ROTATE)===ACTION.TOUCH_ROTATE||(this._state&ACTION.TOUCH_DOLLY_ROTATE)===ACTION.TOUCH_DOLLY_ROTATE||(this._state&ACTION.TOUCH_ZOOM_ROTATE)===ACTION.TOUCH_ZOOM_ROTATE)&&(this._sphericalEnd.theta=this._spherical.theta,this._sphericalEnd.phi=this._spherical.phi,this._thetaVelocity.value=0,this._phiVelocity.value=0),((this._state&ACTION.TRUCK)===ACTION.TRUCK||(this._state&ACTION.TOUCH_TRUCK)===ACTION.TOUCH_TRUCK||(this._state&ACTION.TOUCH_DOLLY_TRUCK)===ACTION.TOUCH_DOLLY_TRUCK||(this._state&ACTION.TOUCH_ZOOM_TRUCK)===ACTION.TOUCH_ZOOM_TRUCK)&&(this._targetEnd.copy(this._target),this._targetVelocity.set(0,0,0)),((this._state&ACTION.DOLLY)===ACTION.DOLLY||(this._state&ACTION.TOUCH_DOLLY)===ACTION.TOUCH_DOLLY||(this._state&ACTION.TOUCH_DOLLY_TRUCK)===ACTION.TOUCH_DOLLY_TRUCK||(this._state&ACTION.TOUCH_DOLLY_OFFSET)===ACTION.TOUCH_DOLLY_OFFSET||(this._state&ACTION.TOUCH_DOLLY_ROTATE)===ACTION.TOUCH_DOLLY_ROTATE)&&(this._sphericalEnd.radius=this._spherical.radius,this._radiusVelocity.value=0),((this._state&ACTION.ZOOM)===ACTION.ZOOM||(this._state&ACTION.TOUCH_ZOOM)===ACTION.TOUCH_ZOOM||(this._state&ACTION.TOUCH_ZOOM_TRUCK)===ACTION.TOUCH_ZOOM_TRUCK||(this._state&ACTION.TOUCH_ZOOM_OFFSET)===ACTION.TOUCH_ZOOM_OFFSET||(this._state&ACTION.TOUCH_ZOOM_ROTATE)===ACTION.TOUCH_ZOOM_ROTATE)&&(this._zoomEnd=this._zoom,this._zoomVelocity.value=0),((this._state&ACTION.OFFSET)===ACTION.OFFSET||(this._state&ACTION.TOUCH_OFFSET)===ACTION.TOUCH_OFFSET||(this._state&ACTION.TOUCH_DOLLY_OFFSET)===ACTION.TOUCH_DOLLY_OFFSET||(this._state&ACTION.TOUCH_ZOOM_OFFSET)===ACTION.TOUCH_ZOOM_OFFSET)&&(this._focalOffsetEnd.copy(this._focalOffset),this._focalOffsetVelocity.set(0,0,0)),this.dispatchEvent({type:"controlstart"})},Ur=()=>{if(!this._enabled||!this._dragNeedsUpdate)return;this._dragNeedsUpdate=!1,extractClientCoordFromEvent(this._activePointers,_v2);const os=this._domElement&&document.pointerLockElement===this._domElement?this._lockedPointer||this._activePointers[0]:null,ls=os?-os.deltaX:_e.x-_v2.x,zs=os?-os.deltaY:_e.y-_v2.y;if(_e.copy(_v2),((this._state&ACTION.ROTATE)===ACTION.ROTATE||(this._state&ACTION.TOUCH_ROTATE)===ACTION.TOUCH_ROTATE||(this._state&ACTION.TOUCH_DOLLY_ROTATE)===ACTION.TOUCH_DOLLY_ROTATE||(this._state&ACTION.TOUCH_ZOOM_ROTATE)===ACTION.TOUCH_ZOOM_ROTATE)&&(this._rotateInternal(ls,zs),this._isUserControllingRotate=!0),(this._state&ACTION.DOLLY)===ACTION.DOLLY||(this._state&ACTION.ZOOM)===ACTION.ZOOM){const ho=this.dollyToCursor?(b.x-this._elementRect.x)/this._elementRect.width*2-1:0,ga=this.dollyToCursor?(b.y-this._elementRect.y)/this._elementRect.height*-2+1:0,mo=this.dollyDragInverted?-1:1;(this._state&ACTION.DOLLY)===ACTION.DOLLY?(this._dollyInternal(mo*zs*TOUCH_DOLLY_FACTOR,ho,ga),this._isUserControllingDolly=!0):(this._zoomInternal(mo*zs*TOUCH_DOLLY_FACTOR,ho,ga),this._isUserControllingZoom=!0)}if((this._state&ACTION.TOUCH_DOLLY)===ACTION.TOUCH_DOLLY||(this._state&ACTION.TOUCH_ZOOM)===ACTION.TOUCH_ZOOM||(this._state&ACTION.TOUCH_DOLLY_TRUCK)===ACTION.TOUCH_DOLLY_TRUCK||(this._state&ACTION.TOUCH_ZOOM_TRUCK)===ACTION.TOUCH_ZOOM_TRUCK||(this._state&ACTION.TOUCH_DOLLY_OFFSET)===ACTION.TOUCH_DOLLY_OFFSET||(this._state&ACTION.TOUCH_ZOOM_OFFSET)===ACTION.TOUCH_ZOOM_OFFSET||(this._state&ACTION.TOUCH_DOLLY_ROTATE)===ACTION.TOUCH_DOLLY_ROTATE||(this._state&ACTION.TOUCH_ZOOM_ROTATE)===ACTION.TOUCH_ZOOM_ROTATE){const ho=_v2.x-this._activePointers[1].clientX,ga=_v2.y-this._activePointers[1].clientY,mo=Math.sqrt(ho*ho+ga*ga),go=bt.y-mo;bt.set(0,mo);const yl=this.dollyToCursor?(_e.x-this._elementRect.x)/this._elementRect.width*2-1:0,Zl=this.dollyToCursor?(_e.y-this._elementRect.y)/this._elementRect.height*-2+1:0;(this._state&ACTION.TOUCH_DOLLY)===ACTION.TOUCH_DOLLY||(this._state&ACTION.TOUCH_DOLLY_ROTATE)===ACTION.TOUCH_DOLLY_ROTATE||(this._state&ACTION.TOUCH_DOLLY_TRUCK)===ACTION.TOUCH_DOLLY_TRUCK||(this._state&ACTION.TOUCH_DOLLY_OFFSET)===ACTION.TOUCH_DOLLY_OFFSET?(this._dollyInternal(go*TOUCH_DOLLY_FACTOR,yl,Zl),this._isUserControllingDolly=!0):(this._zoomInternal(go*TOUCH_DOLLY_FACTOR,yl,Zl),this._isUserControllingZoom=!0)}((this._state&ACTION.TRUCK)===ACTION.TRUCK||(this._state&ACTION.TOUCH_TRUCK)===ACTION.TOUCH_TRUCK||(this._state&ACTION.TOUCH_DOLLY_TRUCK)===ACTION.TOUCH_DOLLY_TRUCK||(this._state&ACTION.TOUCH_ZOOM_TRUCK)===ACTION.TOUCH_ZOOM_TRUCK)&&(this._truckInternal(ls,zs,!1),this._isUserControllingTruck=!0),((this._state&ACTION.OFFSET)===ACTION.OFFSET||(this._state&ACTION.TOUCH_OFFSET)===ACTION.TOUCH_OFFSET||(this._state&ACTION.TOUCH_DOLLY_OFFSET)===ACTION.TOUCH_DOLLY_OFFSET||(this._state&ACTION.TOUCH_ZOOM_OFFSET)===ACTION.TOUCH_ZOOM_OFFSET)&&(this._truckInternal(ls,zs,!0),this._isUserControllingOffset=!0),this.dispatchEvent({type:"control"})},Dr=()=>{extractClientCoordFromEvent(this._activePointers,_v2),_e.copy(_v2),this._dragNeedsUpdate=!1,(this._activePointers.length===0||this._activePointers.length===1&&this._activePointers[0]===this._lockedPointer)&&(this._isDragging=!1),this._activePointers.length===0&&this._domElement&&(this._domElement.ownerDocument.removeEventListener("pointermove",yn,{passive:!1}),this._domElement.ownerDocument.removeEventListener("mousemove",Pn),this._domElement.ownerDocument.removeEventListener("pointerup",zn),this._domElement.ownerDocument.removeEventListener("mouseup",lr),this.dispatchEvent({type:"controlend"}))};this.lockPointer=()=>{!this._enabled||!this._domElement||(this.cancel(),this._lockedPointer={pointerId:-1,clientX:0,clientY:0,deltaX:0,deltaY:0,mouseButton:null},this._activePointers.push(this._lockedPointer),this._domElement.ownerDocument.removeEventListener("pointermove",yn,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",zn),this._domElement.requestPointerLock(),this._domElement.ownerDocument.addEventListener("pointerlockchange",zr),this._domElement.ownerDocument.addEventListener("pointerlockerror",rs),this._domElement.ownerDocument.addEventListener("pointermove",yn,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",zn),es())},this.unlockPointer=()=>{this._lockedPointer!==null&&(this._disposePointer(this._lockedPointer),this._lockedPointer=null),document.exitPointerLock(),this.cancel(),this._domElement&&(this._domElement.ownerDocument.removeEventListener("pointerlockchange",zr),this._domElement.ownerDocument.removeEventListener("pointerlockerror",rs))};const zr=()=>{this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement||this.unlockPointer()},rs=()=>{this.unlockPointer()};this._addAllEventListeners=as=>{this._domElement=as,this._domElement.style.touchAction="none",this._domElement.style.userSelect="none",this._domElement.style.webkitUserSelect="none",this._domElement.addEventListener("pointerdown",rn),isPointerEventsNotSupported&&this._domElement.addEventListener("mousedown",sn),this._domElement.addEventListener("pointercancel",zn),this._domElement.addEventListener("wheel",cr,{passive:!1}),this._domElement.addEventListener("contextmenu",hr)},this._removeAllEventListeners=()=>{this._domElement&&(this._domElement.style.touchAction="",this._domElement.style.userSelect="",this._domElement.style.webkitUserSelect="",this._domElement.removeEventListener("pointerdown",rn),this._domElement.removeEventListener("mousedown",sn),this._domElement.removeEventListener("pointercancel",zn),this._domElement.removeEventListener("wheel",cr,{passive:!1}),this._domElement.removeEventListener("contextmenu",hr),this._domElement.ownerDocument.removeEventListener("pointermove",yn,{passive:!1}),this._domElement.ownerDocument.removeEventListener("mousemove",Pn),this._domElement.ownerDocument.removeEventListener("pointerup",zn),this._domElement.ownerDocument.removeEventListener("mouseup",lr),this._domElement.ownerDocument.removeEventListener("pointerlockchange",zr),this._domElement.ownerDocument.removeEventListener("pointerlockerror",rs))},this.cancel=()=>{this._state!==ACTION.NONE&&(this._state=ACTION.NONE,this._activePointers.length=0,Dr())},a&&this.connect(a),this.update(0)}get camera(){return this._camera}set camera(s){this._camera=s,this.updateCameraUp(),this._camera.updateProjectionMatrix(),this._updateNearPlaneCorners(),this._needsUpdate=!0}get enabled(){return this._enabled}set enabled(s){this._enabled=s,this._domElement&&(s?(this._domElement.style.touchAction="none",this._domElement.style.userSelect="none",this._domElement.style.webkitUserSelect="none"):(this.cancel(),this._domElement.style.touchAction="",this._domElement.style.userSelect="",this._domElement.style.webkitUserSelect=""))}get active(){return!this._hasRested}get currentAction(){return this._state}get distance(){return this._spherical.radius}set distance(s){this._spherical.radius===s&&this._sphericalEnd.radius===s||(this._spherical.radius=s,this._sphericalEnd.radius=s,this._needsUpdate=!0)}get azimuthAngle(){return this._spherical.theta}set azimuthAngle(s){this._spherical.theta===s&&this._sphericalEnd.theta===s||(this._spherical.theta=s,this._sphericalEnd.theta=s,this._needsUpdate=!0)}get polarAngle(){return this._spherical.phi}set polarAngle(s){this._spherical.phi===s&&this._sphericalEnd.phi===s||(this._spherical.phi=s,this._sphericalEnd.phi=s,this._needsUpdate=!0)}get boundaryEnclosesCamera(){return this._boundaryEnclosesCamera}set boundaryEnclosesCamera(s){this._boundaryEnclosesCamera=s,this._needsUpdate=!0}set interactiveArea(s){this._interactiveArea.width=clamp(s.width,0,1),this._interactiveArea.height=clamp(s.height,0,1),this._interactiveArea.x=clamp(s.x,0,1-this._interactiveArea.width),this._interactiveArea.y=clamp(s.y,0,1-this._interactiveArea.height)}addEventListener(s,a){super.addEventListener(s,a)}removeEventListener(s,a){super.removeEventListener(s,a)}rotate(s,a,b=!1){return this.rotateTo(this._sphericalEnd.theta+s,this._sphericalEnd.phi+a,b)}rotateAzimuthTo(s,a=!1){return this.rotateTo(s,this._sphericalEnd.phi,a)}rotatePolarTo(s,a=!1){return this.rotateTo(this._sphericalEnd.theta,s,a)}rotateTo(s,a,b=!1){this._isUserControllingRotate=!1;const _e=clamp(s,this.minAzimuthAngle,this.maxAzimuthAngle),bt=clamp(a,this.minPolarAngle,this.maxPolarAngle);this._sphericalEnd.theta=_e,this._sphericalEnd.phi=bt,this._sphericalEnd.makeSafe(),this._needsUpdate=!0,b||(this._spherical.theta=this._sphericalEnd.theta,this._spherical.phi=this._sphericalEnd.phi);const rn=!b||approxEquals(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&approxEquals(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold);return this._createOnRestPromise(rn)}dolly(s,a=!1){return this.dollyTo(this._sphericalEnd.radius-s,a)}dollyTo(s,a=!1){return this._isUserControllingDolly=!1,this._lastDollyDirection=DOLLY_DIRECTION.NONE,this._changedDolly=0,this._dollyToNoClamp(clamp(s,this.minDistance,this.maxDistance),a)}_dollyToNoClamp(s,a=!1){const b=this._sphericalEnd.radius;if(this.colliderMeshes.length>=1){const rn=this._collisionTest(),sn=approxEquals(rn,this._spherical.radius);if(!(b>s)&&sn)return Promise.resolve();this._sphericalEnd.radius=Math.min(s,rn)}else this._sphericalEnd.radius=s;this._needsUpdate=!0,a||(this._spherical.radius=this._sphericalEnd.radius);const bt=!a||approxEquals(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(bt)}dollyInFixed(s,a=!1){this._targetEnd.add(this._getCameraDirection(_cameraDirection).multiplyScalar(s)),a||this._target.copy(this._targetEnd);const b=!a||approxEquals(this._target.x,this._targetEnd.x,this.restThreshold)&&approxEquals(this._target.y,this._targetEnd.y,this.restThreshold)&&approxEquals(this._target.z,this._targetEnd.z,this.restThreshold);return this._createOnRestPromise(b)}zoom(s,a=!1){return this.zoomTo(this._zoomEnd+s,a)}zoomTo(s,a=!1){this._isUserControllingZoom=!1,this._zoomEnd=clamp(s,this.minZoom,this.maxZoom),this._needsUpdate=!0,a||(this._zoom=this._zoomEnd);const b=!a||approxEquals(this._zoom,this._zoomEnd,this.restThreshold);return this._changedZoom=0,this._createOnRestPromise(b)}pan(s,a,b=!1){return console.warn("`pan` has been renamed to `truck`"),this.truck(s,a,b)}truck(s,a,b=!1){this._camera.updateMatrix(),_xColumn.setFromMatrixColumn(this._camera.matrix,0),_yColumn.setFromMatrixColumn(this._camera.matrix,1),_xColumn.multiplyScalar(s),_yColumn.multiplyScalar(-a);const _e=_v3A.copy(_xColumn).add(_yColumn),bt=_v3B.copy(this._targetEnd).add(_e);return this.moveTo(bt.x,bt.y,bt.z,b)}forward(s,a=!1){_v3A.setFromMatrixColumn(this._camera.matrix,0),_v3A.crossVectors(this._camera.up,_v3A),_v3A.multiplyScalar(s);const b=_v3B.copy(this._targetEnd).add(_v3A);return this.moveTo(b.x,b.y,b.z,a)}elevate(s,a=!1){return _v3A.copy(this._camera.up).multiplyScalar(s),this.moveTo(this._targetEnd.x+_v3A.x,this._targetEnd.y+_v3A.y,this._targetEnd.z+_v3A.z,a)}moveTo(s,a,b,_e=!1){this._isUserControllingTruck=!1;const bt=_v3A.set(s,a,b).sub(this._targetEnd);this._encloseToBoundary(this._targetEnd,bt,this.boundaryFriction),this._needsUpdate=!0,_e||this._target.copy(this._targetEnd);const rn=!_e||approxEquals(this._target.x,this._targetEnd.x,this.restThreshold)&&approxEquals(this._target.y,this._targetEnd.y,this.restThreshold)&&approxEquals(this._target.z,this._targetEnd.z,this.restThreshold);return this._createOnRestPromise(rn)}lookInDirectionOf(s,a,b,_e=!1){const sn=_v3A.set(s,a,b).sub(this._targetEnd).normalize().multiplyScalar(-this._sphericalEnd.radius);return this.setPosition(sn.x,sn.y,sn.z,_e)}fitToBox(s,a,{cover:b=!1,paddingLeft:_e=0,paddingRight:bt=0,paddingBottom:rn=0,paddingTop:sn=0}={}){const yn=[],Pn=s.isBox3?_box3A.copy(s):_box3A.setFromObject(s);Pn.isEmpty()&&(console.warn("camera-controls: fitTo() cannot be used with an empty box. Aborting"),Promise.resolve());const zn=roundToStep(this._sphericalEnd.theta,PI_HALF),lr=roundToStep(this._sphericalEnd.phi,PI_HALF);yn.push(this.rotateTo(zn,lr,a));const ar=_v3A.setFromSpherical(this._sphericalEnd).normalize(),cr=_quaternionA.setFromUnitVectors(ar,_AXIS_Z),hr=approxEquals(Math.abs(ar.y),1);hr&&cr.multiply(_quaternionB.setFromAxisAngle(_AXIS_Y,zn)),cr.multiply(this._yAxisUpSpaceInverse);const es=_box3B.makeEmpty();_v3B.copy(Pn.min).applyQuaternion(cr),es.expandByPoint(_v3B),_v3B.copy(Pn.min).setX(Pn.max.x).applyQuaternion(cr),es.expandByPoint(_v3B),_v3B.copy(Pn.min).setY(Pn.max.y).applyQuaternion(cr),es.expandByPoint(_v3B),_v3B.copy(Pn.max).setZ(Pn.min.z).applyQuaternion(cr),es.expandByPoint(_v3B),_v3B.copy(Pn.min).setZ(Pn.max.z).applyQuaternion(cr),es.expandByPoint(_v3B),_v3B.copy(Pn.max).setY(Pn.min.y).applyQuaternion(cr),es.expandByPoint(_v3B),_v3B.copy(Pn.max).setX(Pn.min.x).applyQuaternion(cr),es.expandByPoint(_v3B),_v3B.copy(Pn.max).applyQuaternion(cr),es.expandByPoint(_v3B),es.min.x-=_e,es.min.y-=rn,es.max.x+=bt,es.max.y+=sn,cr.setFromUnitVectors(_AXIS_Z,ar),hr&&cr.premultiply(_quaternionB.invert()),cr.premultiply(this._yAxisUpSpace);const Ur=es.getSize(_v3A),Dr=es.getCenter(_v3B).applyQuaternion(cr);if(isPerspectiveCamera(this._camera)){const zr=this.getDistanceToFitBox(Ur.x,Ur.y,Ur.z,b);yn.push(this.moveTo(Dr.x,Dr.y,Dr.z,a)),yn.push(this.dollyTo(zr,a)),yn.push(this.setFocalOffset(0,0,0,a))}else if(isOrthographicCamera(this._camera)){const zr=this._camera,rs=zr.right-zr.left,as=zr.top-zr.bottom,os=b?Math.max(rs/Ur.x,as/Ur.y):Math.min(rs/Ur.x,as/Ur.y);yn.push(this.moveTo(Dr.x,Dr.y,Dr.z,a)),yn.push(this.zoomTo(os,a)),yn.push(this.setFocalOffset(0,0,0,a))}return Promise.all(yn)}fitToSphere(s,a){const b=[],bt=s instanceof THREE.Sphere?_sphere.copy(s):YD.createBoundingSphere(s,_sphere);if(b.push(this.moveTo(bt.center.x,bt.center.y,bt.center.z,a)),isPerspectiveCamera(this._camera)){const rn=this.getDistanceToFitSphere(bt.radius);b.push(this.dollyTo(rn,a))}else if(isOrthographicCamera(this._camera)){const rn=this._camera.right-this._camera.left,sn=this._camera.top-this._camera.bottom,yn=2*bt.radius,Pn=Math.min(rn/yn,sn/yn);b.push(this.zoomTo(Pn,a))}return b.push(this.setFocalOffset(0,0,0,a)),Promise.all(b)}setLookAt(s,a,b,_e,bt,rn,sn=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=DOLLY_DIRECTION.NONE,this._changedDolly=0;const yn=_v3B.set(_e,bt,rn),Pn=_v3A.set(s,a,b);this._targetEnd.copy(yn),this._sphericalEnd.setFromVector3(Pn.sub(yn).applyQuaternion(this._yAxisUpSpace)),this.normalizeRotations(),this._needsUpdate=!0,sn||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const zn=!sn||approxEquals(this._target.x,this._targetEnd.x,this.restThreshold)&&approxEquals(this._target.y,this._targetEnd.y,this.restThreshold)&&approxEquals(this._target.z,this._targetEnd.z,this.restThreshold)&&approxEquals(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&approxEquals(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&approxEquals(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(zn)}lerpLookAt(s,a,b,_e,bt,rn,sn,yn,Pn,zn,lr,ar,cr,hr=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=DOLLY_DIRECTION.NONE,this._changedDolly=0;const es=_v3A.set(_e,bt,rn),Ur=_v3B.set(s,a,b);_sphericalA.setFromVector3(Ur.sub(es).applyQuaternion(this._yAxisUpSpace));const Dr=_v3C.set(zn,lr,ar),zr=_v3B.set(sn,yn,Pn);_sphericalB.setFromVector3(zr.sub(Dr).applyQuaternion(this._yAxisUpSpace)),this._targetEnd.copy(es.lerp(Dr,cr));const rs=_sphericalB.theta-_sphericalA.theta,as=_sphericalB.phi-_sphericalA.phi,os=_sphericalB.radius-_sphericalA.radius;this._sphericalEnd.set(_sphericalA.radius+os*cr,_sphericalA.phi+as*cr,_sphericalA.theta+rs*cr),this.normalizeRotations(),this._needsUpdate=!0,hr||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const ls=!hr||approxEquals(this._target.x,this._targetEnd.x,this.restThreshold)&&approxEquals(this._target.y,this._targetEnd.y,this.restThreshold)&&approxEquals(this._target.z,this._targetEnd.z,this.restThreshold)&&approxEquals(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&approxEquals(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&approxEquals(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(ls)}setPosition(s,a,b,_e=!1){return this.setLookAt(s,a,b,this._targetEnd.x,this._targetEnd.y,this._targetEnd.z,_e)}setTarget(s,a,b,_e=!1){const bt=this.getPosition(_v3A),rn=this.setLookAt(bt.x,bt.y,bt.z,s,a,b,_e);return this._sphericalEnd.phi=clamp(this._sphericalEnd.phi,this.minPolarAngle,this.maxPolarAngle),rn}setFocalOffset(s,a,b,_e=!1){this._isUserControllingOffset=!1,this._focalOffsetEnd.set(s,a,b),this._needsUpdate=!0,_e||this._focalOffset.copy(this._focalOffsetEnd);const bt=!_e||approxEquals(this._focalOffset.x,this._focalOffsetEnd.x,this.restThreshold)&&approxEquals(this._focalOffset.y,this._focalOffsetEnd.y,this.restThreshold)&&approxEquals(this._focalOffset.z,this._focalOffsetEnd.z,this.restThreshold);return this._createOnRestPromise(bt)}setOrbitPoint(s,a,b){this._camera.updateMatrixWorld(),_xColumn.setFromMatrixColumn(this._camera.matrixWorldInverse,0),_yColumn.setFromMatrixColumn(this._camera.matrixWorldInverse,1),_zColumn.setFromMatrixColumn(this._camera.matrixWorldInverse,2);const _e=_v3A.set(s,a,b),bt=_e.distanceTo(this._camera.position),rn=_e.sub(this._camera.position);_xColumn.multiplyScalar(rn.x),_yColumn.multiplyScalar(rn.y),_zColumn.multiplyScalar(rn.z),_v3A.copy(_xColumn).add(_yColumn).add(_zColumn),_v3A.z=_v3A.z+bt,this.dollyTo(bt,!1),this.setFocalOffset(-_v3A.x,_v3A.y,-_v3A.z,!1),this.moveTo(s,a,b,!1)}setBoundary(s){if(!s){this._boundary.min.set(-1/0,-1/0,-1/0),this._boundary.max.set(1/0,1/0,1/0),this._needsUpdate=!0;return}this._boundary.copy(s),this._boundary.clampPoint(this._targetEnd,this._targetEnd),this._needsUpdate=!0}setViewport(s,a,b,_e){if(s===null){this._viewport=null;return}this._viewport=this._viewport||new THREE.Vector4,typeof s=="number"?this._viewport.set(s,a,b,_e):this._viewport.copy(s)}getDistanceToFitBox(s,a,b,_e=!1){if(notSupportedInOrthographicCamera(this._camera,"getDistanceToFitBox"))return this._spherical.radius;const bt=s/a,rn=this._camera.getEffectiveFOV()*DEG2RAD,sn=this._camera.aspect;return((_e?bt>sn:bt<sn)?a:s/sn)*.5/Math.tan(rn*.5)+b*.5}getDistanceToFitSphere(s){if(notSupportedInOrthographicCamera(this._camera,"getDistanceToFitSphere"))return this._spherical.radius;const a=this._camera.getEffectiveFOV()*DEG2RAD,b=Math.atan(Math.tan(a*.5)*this._camera.aspect)*2,_e=1<this._camera.aspect?a:b;return s/Math.sin(_e*.5)}getTarget(s,a=!0){return(s&&s.isVector3?s:new THREE.Vector3).copy(a?this._targetEnd:this._target)}getPosition(s,a=!0){return(s&&s.isVector3?s:new THREE.Vector3).setFromSpherical(a?this._sphericalEnd:this._spherical).applyQuaternion(this._yAxisUpSpaceInverse).add(a?this._targetEnd:this._target)}getSpherical(s,a=!0){return(s&&s instanceof THREE.Spherical?s:new THREE.Spherical).copy(a?this._sphericalEnd:this._spherical)}getFocalOffset(s,a=!0){return(s&&s.isVector3?s:new THREE.Vector3).copy(a?this._focalOffsetEnd:this._focalOffset)}normalizeRotations(){this._sphericalEnd.theta=this._sphericalEnd.theta%PI_2,this._sphericalEnd.theta<0&&(this._sphericalEnd.theta+=PI_2),this._spherical.theta+=PI_2*Math.round((this._sphericalEnd.theta-this._spherical.theta)/PI_2)}reset(s=!1){if(!approxEquals(this._camera.up.x,this._cameraUp0.x)||!approxEquals(this._camera.up.y,this._cameraUp0.y)||!approxEquals(this._camera.up.z,this._cameraUp0.z)){this._camera.up.copy(this._cameraUp0);const b=this.getPosition(_v3A);this.updateCameraUp(),this.setPosition(b.x,b.y,b.z)}const a=[this.setLookAt(this._position0.x,this._position0.y,this._position0.z,this._target0.x,this._target0.y,this._target0.z,s),this.setFocalOffset(this._focalOffset0.x,this._focalOffset0.y,this._focalOffset0.z,s),this.zoomTo(this._zoom0,s)];return Promise.all(a)}saveState(){this._cameraUp0.copy(this._camera.up),this.getTarget(this._target0),this.getPosition(this._position0),this._zoom0=this._zoom,this._focalOffset0.copy(this._focalOffset)}updateCameraUp(){this._yAxisUpSpace.setFromUnitVectors(this._camera.up,_AXIS_Y),this._yAxisUpSpaceInverse.copy(this._yAxisUpSpace).invert()}applyCameraUp(){const s=_v3A.subVectors(this._target,this._camera.position).normalize(),a=_v3B.crossVectors(s,this._camera.up);this._camera.up.crossVectors(a,s).normalize(),this._camera.updateMatrixWorld();const b=this.getPosition(_v3A);this.updateCameraUp(),this.setPosition(b.x,b.y,b.z)}update(s){const a=this._sphericalEnd.theta-this._spherical.theta,b=this._sphericalEnd.phi-this._spherical.phi,_e=this._sphericalEnd.radius-this._spherical.radius,bt=_deltaTarget.subVectors(this._targetEnd,this._target),rn=_deltaOffset.subVectors(this._focalOffsetEnd,this._focalOffset),sn=this._zoomEnd-this._zoom;if(approxZero(a))this._thetaVelocity.value=0,this._spherical.theta=this._sphericalEnd.theta;else{const lr=this._isUserControllingRotate?this.draggingSmoothTime:this.smoothTime;this._spherical.theta=smoothDamp(this._spherical.theta,this._sphericalEnd.theta,this._thetaVelocity,lr,1/0,s),this._needsUpdate=!0}if(approxZero(b))this._phiVelocity.value=0,this._spherical.phi=this._sphericalEnd.phi;else{const lr=this._isUserControllingRotate?this.draggingSmoothTime:this.smoothTime;this._spherical.phi=smoothDamp(this._spherical.phi,this._sphericalEnd.phi,this._phiVelocity,lr,1/0,s),this._needsUpdate=!0}if(approxZero(_e))this._radiusVelocity.value=0,this._spherical.radius=this._sphericalEnd.radius;else{const lr=this._isUserControllingDolly?this.draggingSmoothTime:this.smoothTime;this._spherical.radius=smoothDamp(this._spherical.radius,this._sphericalEnd.radius,this._radiusVelocity,lr,this.maxSpeed,s),this._needsUpdate=!0}if(approxZero(bt.x)&&approxZero(bt.y)&&approxZero(bt.z))this._targetVelocity.set(0,0,0),this._target.copy(this._targetEnd);else{const lr=this._isUserControllingTruck?this.draggingSmoothTime:this.smoothTime;smoothDampVec3(this._target,this._targetEnd,this._targetVelocity,lr,this.maxSpeed,s,this._target),this._needsUpdate=!0}if(approxZero(rn.x)&&approxZero(rn.y)&&approxZero(rn.z))this._focalOffsetVelocity.set(0,0,0),this._focalOffset.copy(this._focalOffsetEnd);else{const lr=this._isUserControllingOffset?this.draggingSmoothTime:this.smoothTime;smoothDampVec3(this._focalOffset,this._focalOffsetEnd,this._focalOffsetVelocity,lr,this.maxSpeed,s,this._focalOffset),this._needsUpdate=!0}if(approxZero(sn))this._zoomVelocity.value=0,this._zoom=this._zoomEnd;else{const lr=this._isUserControllingZoom?this.draggingSmoothTime:this.smoothTime;this._zoom=smoothDamp(this._zoom,this._zoomEnd,this._zoomVelocity,lr,1/0,s)}if(this.dollyToCursor){if(isPerspectiveCamera(this._camera)&&this._changedDolly!==0){const lr=this._spherical.radius-this._lastDistance,ar=this._camera,cr=this._getCameraDirection(_cameraDirection),hr=_v3A.copy(cr).cross(ar.up).normalize();hr.lengthSq()===0&&(hr.x=1);const es=_v3B.crossVectors(hr,cr),Ur=this._sphericalEnd.radius*Math.tan(ar.getEffectiveFOV()*DEG2RAD*.5),zr=(this._sphericalEnd.radius-lr-this._sphericalEnd.radius)/this._sphericalEnd.radius,rs=_v3C.copy(this._targetEnd).add(hr.multiplyScalar(this._dollyControlCoord.x*Ur*ar.aspect)).add(es.multiplyScalar(this._dollyControlCoord.y*Ur)),as=_v3A.copy(this._targetEnd).lerp(rs,zr),os=this._lastDollyDirection===DOLLY_DIRECTION.IN&&this._spherical.radius<=this.minDistance,ls=this._lastDollyDirection===DOLLY_DIRECTION.OUT&&this.maxDistance<=this._spherical.radius;if(this.infinityDolly&&(os||ls)){this._sphericalEnd.radius-=lr,this._spherical.radius-=lr;const ho=_v3B.copy(cr).multiplyScalar(-lr);as.add(ho)}this._boundary.clampPoint(as,as);const zs=_v3B.subVectors(as,this._targetEnd);this._targetEnd.copy(as),this._target.add(zs),this._changedDolly-=lr,approxZero(this._changedDolly)&&(this._changedDolly=0)}else if(isOrthographicCamera(this._camera)&&this._changedZoom!==0){const lr=this._zoom-this._lastZoom,ar=this._camera,cr=_v3A.set(this._dollyControlCoord.x,this._dollyControlCoord.y,(ar.near+ar.far)/(ar.near-ar.far)).unproject(ar),hr=_v3B.set(0,0,-1).applyQuaternion(ar.quaternion),es=_v3C.copy(cr).add(hr.multiplyScalar(-cr.dot(ar.up))),Dr=-(this._zoom-lr-this._zoom)/this._zoom,zr=this._getCameraDirection(_cameraDirection),rs=this._targetEnd.dot(zr),as=_v3A.copy(this._targetEnd).lerp(es,Dr),os=as.dot(zr),ls=zr.multiplyScalar(os-rs);as.sub(ls),this._boundary.clampPoint(as,as);const zs=_v3B.subVectors(as,this._targetEnd);this._targetEnd.copy(as),this._target.add(zs),this._changedZoom-=lr,approxZero(this._changedZoom)&&(this._changedZoom=0)}}this._camera.zoom!==this._zoom&&(this._camera.zoom=this._zoom,this._camera.updateProjectionMatrix(),this._updateNearPlaneCorners(),this._needsUpdate=!0),this._dragNeedsUpdate=!0;const yn=this._collisionTest();this._spherical.radius=Math.min(this._spherical.radius,yn),this._spherical.makeSafe(),this._camera.position.setFromSpherical(this._spherical).applyQuaternion(this._yAxisUpSpaceInverse).add(this._target),this._camera.lookAt(this._target),(!approxZero(this._focalOffset.x)||!approxZero(this._focalOffset.y)||!approxZero(this._focalOffset.z))&&(this._camera.updateMatrixWorld(),_xColumn.setFromMatrixColumn(this._camera.matrix,0),_yColumn.setFromMatrixColumn(this._camera.matrix,1),_zColumn.setFromMatrixColumn(this._camera.matrix,2),_xColumn.multiplyScalar(this._focalOffset.x),_yColumn.multiplyScalar(-this._focalOffset.y),_zColumn.multiplyScalar(this._focalOffset.z),_v3A.copy(_xColumn).add(_yColumn).add(_zColumn),this._camera.position.add(_v3A)),this._boundaryEnclosesCamera&&this._encloseToBoundary(this._camera.position.copy(this._target),_v3A.setFromSpherical(this._spherical).applyQuaternion(this._yAxisUpSpaceInverse),1);const zn=this._needsUpdate;return zn&&!this._updatedLastTime?(this._hasRested=!1,this.dispatchEvent({type:"wake"}),this.dispatchEvent({type:"update"})):zn?(this.dispatchEvent({type:"update"}),approxZero(a,this.restThreshold)&&approxZero(b,this.restThreshold)&&approxZero(_e,this.restThreshold)&&approxZero(bt.x,this.restThreshold)&&approxZero(bt.y,this.restThreshold)&&approxZero(bt.z,this.restThreshold)&&approxZero(rn.x,this.restThreshold)&&approxZero(rn.y,this.restThreshold)&&approxZero(rn.z,this.restThreshold)&&approxZero(sn,this.restThreshold)&&!this._hasRested&&(this._hasRested=!0,this.dispatchEvent({type:"rest"}))):!zn&&this._updatedLastTime&&this.dispatchEvent({type:"sleep"}),this._lastDistance=this._spherical.radius,this._lastZoom=this._zoom,this._updatedLastTime=zn,this._needsUpdate=!1,zn}toJSON(){return JSON.stringify({enabled:this._enabled,minDistance:this.minDistance,maxDistance:infinityToMaxNumber(this.maxDistance),minZoom:this.minZoom,maxZoom:infinityToMaxNumber(this.maxZoom),minPolarAngle:this.minPolarAngle,maxPolarAngle:infinityToMaxNumber(this.maxPolarAngle),minAzimuthAngle:infinityToMaxNumber(this.minAzimuthAngle),maxAzimuthAngle:infinityToMaxNumber(this.maxAzimuthAngle),smoothTime:this.smoothTime,draggingSmoothTime:this.draggingSmoothTime,dollySpeed:this.dollySpeed,truckSpeed:this.truckSpeed,dollyToCursor:this.dollyToCursor,verticalDragToForward:this.verticalDragToForward,target:this._targetEnd.toArray(),position:_v3A.setFromSpherical(this._sphericalEnd).add(this._targetEnd).toArray(),zoom:this._zoomEnd,focalOffset:this._focalOffsetEnd.toArray(),target0:this._target0.toArray(),position0:this._position0.toArray(),zoom0:this._zoom0,focalOffset0:this._focalOffset0.toArray()})}fromJSON(s,a=!1){const b=JSON.parse(s);this.enabled=b.enabled,this.minDistance=b.minDistance,this.maxDistance=maxNumberToInfinity(b.maxDistance),this.minZoom=b.minZoom,this.maxZoom=maxNumberToInfinity(b.maxZoom),this.minPolarAngle=b.minPolarAngle,this.maxPolarAngle=maxNumberToInfinity(b.maxPolarAngle),this.minAzimuthAngle=maxNumberToInfinity(b.minAzimuthAngle),this.maxAzimuthAngle=maxNumberToInfinity(b.maxAzimuthAngle),this.smoothTime=b.smoothTime,this.draggingSmoothTime=b.draggingSmoothTime,this.dollySpeed=b.dollySpeed,this.truckSpeed=b.truckSpeed,this.dollyToCursor=b.dollyToCursor,this.verticalDragToForward=b.verticalDragToForward,this._target0.fromArray(b.target0),this._position0.fromArray(b.position0),this._zoom0=b.zoom0,this._focalOffset0.fromArray(b.focalOffset0),this.moveTo(b.target[0],b.target[1],b.target[2],a),_sphericalA.setFromVector3(_v3A.fromArray(b.position).sub(this._targetEnd).applyQuaternion(this._yAxisUpSpace)),this.rotateTo(_sphericalA.theta,_sphericalA.phi,a),this.dollyTo(_sphericalA.radius,a),this.zoomTo(b.zoom,a),this.setFocalOffset(b.focalOffset[0],b.focalOffset[1],b.focalOffset[2],a),this._needsUpdate=!0}connect(s){if(this._domElement){console.warn("camera-controls is already connected.");return}s.setAttribute("data-camera-controls-version",VERSION),this._addAllEventListeners(s),this._getClientRect(this._elementRect)}disconnect(){this.cancel(),this._removeAllEventListeners(),this._domElement&&(this._domElement.removeAttribute("data-camera-controls-version"),this._domElement=void 0)}dispose(){this.removeAllEventListeners(),this.disconnect()}_getTargetDirection(s){return s.setFromSpherical(this._spherical).divideScalar(this._spherical.radius).applyQuaternion(this._yAxisUpSpaceInverse)}_getCameraDirection(s){return this._getTargetDirection(s).negate()}_findPointerById(s){return this._activePointers.find(a=>a.pointerId===s)}_findPointerByMouseButton(s){return this._activePointers.find(a=>a.mouseButton===s)}_disposePointer(s){this._activePointers.splice(this._activePointers.indexOf(s),1)}_encloseToBoundary(s,a,b){const _e=a.lengthSq();if(_e===0)return s;const bt=_v3B.copy(a).add(s),sn=this._boundary.clampPoint(bt,_v3C).sub(bt),yn=sn.lengthSq();if(yn===0)return s.add(a);if(yn===_e)return s;if(b===0)return s.add(a).add(sn);{const Pn=1+b*yn/a.dot(sn);return s.add(_v3B.copy(a).multiplyScalar(Pn)).add(sn.multiplyScalar(1-b))}}_updateNearPlaneCorners(){if(isPerspectiveCamera(this._camera)){const s=this._camera,a=s.near,b=s.getEffectiveFOV()*DEG2RAD,_e=Math.tan(b*.5)*a,bt=_e*s.aspect;this._nearPlaneCorners[0].set(-bt,-_e,0),this._nearPlaneCorners[1].set(bt,-_e,0),this._nearPlaneCorners[2].set(bt,_e,0),this._nearPlaneCorners[3].set(-bt,_e,0)}else if(isOrthographicCamera(this._camera)){const s=this._camera,a=1/s.zoom,b=s.left*a,_e=s.right*a,bt=s.top*a,rn=s.bottom*a;this._nearPlaneCorners[0].set(b,bt,0),this._nearPlaneCorners[1].set(_e,bt,0),this._nearPlaneCorners[2].set(_e,rn,0),this._nearPlaneCorners[3].set(b,rn,0)}}_collisionTest(){let s=1/0;if(!(this.colliderMeshes.length>=1)||notSupportedInOrthographicCamera(this._camera,"_collisionTest"))return s;const b=this._getTargetDirection(_cameraDirection);_rotationMatrix.lookAt(_ORIGIN,b,this._camera.up);for(let _e=0;_e<4;_e++){const bt=_v3B.copy(this._nearPlaneCorners[_e]);bt.applyMatrix4(_rotationMatrix);const rn=_v3C.addVectors(this._target,bt);_raycaster.set(rn,b),_raycaster.far=this._spherical.radius+1;const sn=_raycaster.intersectObjects(this.colliderMeshes);sn.length!==0&&sn[0].distance<s&&(s=sn[0].distance)}return s}_getClientRect(s){if(!this._domElement)return;const a=this._domElement.getBoundingClientRect();return s.x=a.left,s.y=a.top,this._viewport?(s.x+=this._viewport.x,s.y+=a.height-this._viewport.w-this._viewport.y,s.width=this._viewport.z,s.height=this._viewport.w):(s.width=a.width,s.height=a.height),s}_createOnRestPromise(s){return s?Promise.resolve():(this._hasRested=!1,this.dispatchEvent({type:"transitionstart"}),new Promise(a=>{const b=()=>{this.removeEventListener("rest",b),a()};this.addEventListener("rest",b)}))}_addAllEventListeners(s){}_removeAllEventListeners(){}get dampingFactor(){return console.warn(".dampingFactor has been deprecated. use smoothTime (in seconds) instead."),0}set dampingFactor(s){console.warn(".dampingFactor has been deprecated. use smoothTime (in seconds) instead.")}get draggingDampingFactor(){return console.warn(".draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead."),0}set draggingDampingFactor(s){console.warn(".draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead.")}static createBoundingSphere(s,a=new THREE.Sphere){const b=a,_e=b.center;_box3A.makeEmpty(),s.traverseVisible(rn=>{rn.isMesh&&_box3A.expandByObject(rn)}),_box3A.getCenter(_e);let bt=0;return s.traverseVisible(rn=>{if(!rn.isMesh)return;const sn=rn,yn=sn.geometry.clone();yn.applyMatrix4(sn.matrixWorld);const zn=yn.attributes.position;for(let lr=0,ar=zn.count;lr<ar;lr++)_v3A.fromBufferAttribute(zn,lr),bt=Math.max(bt,_e.distanceToSquared(_v3A))}),b.radius=Math.sqrt(bt),b}};const CameraControls=reactExports.forwardRef((o,s)=>{reactExports.useMemo(()=>{const os={Box3,MathUtils:{clamp:MathUtils.clamp},Matrix4,Quaternion,Raycaster,Sphere,Spherical,Vector2,Vector3,Vector4};CameraControls$1.install({THREE:os}),extend({CameraControlsImpl:CameraControls$1})},[]);const{camera:a,domElement:b,makeDefault:_e,onStart:bt,onEnd:rn,onChange:sn,regress:yn,...Pn}=o,zn=useThree(os=>os.camera),lr=useThree(os=>os.gl),ar=useThree(os=>os.invalidate),cr=useThree(os=>os.events),hr=useThree(os=>os.setEvents),es=useThree(os=>os.set),Ur=useThree(os=>os.get),Dr=useThree(os=>os.performance),zr=a||zn,rs=b||cr.connected||lr.domElement,as=reactExports.useMemo(()=>new CameraControls$1(zr),[zr]);return useFrame((os,ls)=>{as.enabled&&as.update(ls)},-1),reactExports.useEffect(()=>(as.connect(rs),()=>void as.disconnect()),[rs,as]),reactExports.useEffect(()=>{const os=ho=>{ar(),yn&&Dr.regress(),sn&&sn(ho)},ls=ho=>{bt&&bt(ho)},zs=ho=>{rn&&rn(ho)};return as.addEventListener("update",os),as.addEventListener("controlstart",ls),as.addEventListener("controlend",zs),as.addEventListener("control",os),as.addEventListener("transitionstart",os),as.addEventListener("wake",os),()=>{as.removeEventListener("update",os),as.removeEventListener("controlstart",ls),as.removeEventListener("controlend",zs),as.removeEventListener("control",os),as.removeEventListener("transitionstart",os),as.removeEventListener("wake",os)}},[as,bt,rn,ar,hr,yn,sn]),reactExports.useEffect(()=>{if(_e){const os=Ur().controls;return es({controls:as}),()=>es({controls:os})}},[_e,as]),reactExports.createElement("primitive",_extends$1({ref:s,object:as},Pn))});function useAnimations(o,s){const a=reactExports.useRef(),[b]=reactExports.useState(()=>s?s instanceof Object3D?{current:s}:s:a),[_e]=reactExports.useState(()=>new AnimationMixer(void 0));reactExports.useLayoutEffect(()=>{s&&(b.current=s instanceof Object3D?s:s.current),_e._root=b.current});const bt=reactExports.useRef({}),rn=reactExports.useMemo(()=>{const sn={};return o.forEach(yn=>Object.defineProperty(sn,yn.name,{enumerable:!0,get(){if(b.current)return bt.current[yn.name]||(bt.current[yn.name]=_e.clipAction(yn,b.current))},configurable:!0})),{ref:b,clips:o,actions:sn,names:o.map(yn=>yn.name),mixer:_e}},[o]);return useFrame((sn,yn)=>_e.update(yn)),reactExports.useEffect(()=>{const sn=b.current;return()=>{bt.current={},_e.stopAllAction(),Object.values(rn.actions).forEach(yn=>{sn&&_e.uncacheAction(yn,sn)})}},[o]),rn}function create(o,s){const a=o+"Geometry";return reactExports.forwardRef(({args:b,children:_e,...bt},rn)=>{const sn=reactExports.useRef(null);return reactExports.useImperativeHandle(rn,()=>sn.current),reactExports.useLayoutEffect(()=>void s?.(sn.current)),reactExports.createElement("mesh",_extends$1({ref:sn},bt),reactExports.createElement(a,{attach:"geometry",args:b}),_e)})}const Box=create("box"),eps=1e-5;function createShape(o,s,a){const b=new Shape,_e=a-eps;return b.absarc(eps,eps,eps,-Math.PI/2,-Math.PI,!0),b.absarc(eps,s-_e*2,eps,Math.PI,Math.PI/2,!0),b.absarc(o-_e*2,s-_e*2,eps,Math.PI/2,0,!0),b.absarc(o-_e*2,eps,eps,0,-Math.PI/2,!0),b}const RoundedBox=reactExports.forwardRef(function o({args:[s=1,a=1,b=1]=[],radius:_e=.05,steps:bt=1,smoothness:rn=4,bevelSegments:sn=4,creaseAngle:yn=.4,children:Pn,...zn},lr){const ar=reactExports.useMemo(()=>createShape(s,a,_e),[s,a,_e]),cr=reactExports.useMemo(()=>({depth:b-_e*2,bevelEnabled:!0,bevelSegments:sn*2,steps:bt,bevelSize:_e-eps,bevelThickness:_e,curveSegments:rn}),[b,_e,rn]),hr=reactExports.useRef(null);return reactExports.useLayoutEffect(()=>{hr.current&&(hr.current.center(),toCreasedNormals(hr.current,yn))},[ar,cr]),reactExports.createElement("mesh",_extends$1({ref:lr},zn),reactExports.createElement("extrudeGeometry",{ref:hr,args:[ar,cr]}),Pn)}),presetsObj={apartment:"lebombo_1k.hdr",city:"potsdamer_platz_1k.hdr",dawn:"kiara_1_dawn_1k.hdr",forest:"forest_slope_1k.hdr",lobby:"st_fagans_interior_1k.hdr",night:"dikhololo_night_1k.hdr",park:"rooitou_park_1k.hdr",studio:"studio_small_03_1k.hdr",sunset:"venice_sunset_1k.hdr",warehouse:"empty_warehouse_01_1k.hdr"},CUBEMAP_ROOT="https://raw.githack.com/pmndrs/drei-assets/456060a26bbeb8fdf79326f224b6d99b8bcce736/hdri/",isArray=o=>Array.isArray(o);function useEnvironment({files:o=["/px.png","/nx.png","/py.png","/ny.png","/pz.png","/nz.png"],path:s="",preset:a=void 0,encoding:b=void 0,extensions:_e}={}){var bt;let rn=null,sn=!1,yn;if(a){if(!(a in presetsObj))throw new Error("Preset must be one of: "+Object.keys(presetsObj).join(", "));o=presetsObj[a],s=CUBEMAP_ROOT}if(sn=isArray(o),yn=isArray(o)?"cube":o.startsWith("data:application/exr")?"exr":o.startsWith("data:application/hdr")?"hdr":(bt=o.split(".").pop())==null||(bt=bt.split("?"))==null||(bt=bt.shift())==null?void 0:bt.toLowerCase(),rn=sn?CubeTextureLoader:yn==="hdr"?RGBELoader:yn==="exr"?EXRLoader:null,!rn)throw new Error("useEnvironment: Unrecognized file extension: "+o);const Pn=useLoader(rn,sn?[o]:o,cr=>{cr.setPath==null||cr.setPath(s),_e&&_e(cr)}),zn=sn?Pn[0]:Pn;zn.mapping=sn?CubeReflectionMapping:EquirectangularReflectionMapping;const lr=3001,ar=3e3;return"colorSpace"in zn?zn.colorSpace=b??sn?"srgb":"srgb-linear":zn.encoding=b??sn?lr:ar,zn}const isRef$1=o=>o.current&&o.current.isScene,resolveScene=o=>isRef$1(o)?o.current:o;function setEnvProps(o,s,a,b,_e=0){const bt=resolveScene(s||a),rn=bt.background,sn=bt.environment,yn=bt.backgroundBlurriness||0;return o!=="only"&&(bt.environment=b),o&&(bt.background=b),o&&bt.backgroundBlurriness!==void 0&&(bt.backgroundBlurriness=_e),()=>{o!=="only"&&(bt.environment=sn),o&&(bt.background=rn),o&&bt.backgroundBlurriness!==void 0&&(bt.backgroundBlurriness=yn)}}function EnvironmentMap({scene:o,background:s=!1,blur:a,map:b}){const _e=useThree(bt=>bt.scene);return reactExports.useLayoutEffect(()=>{if(b)return setEnvProps(s,o,_e,b,a)},[_e,o,b,s,a]),null}function EnvironmentCube({background:o=!1,scene:s,blur:a,...b}){const _e=useEnvironment(b),bt=useThree(rn=>rn.scene);return reactExports.useLayoutEffect(()=>setEnvProps(o,s,bt,_e,a),[_e,o,s,bt,a]),null}function EnvironmentPortal({children:o,near:s=1,far:a=1e3,resolution:b=256,frames:_e=1,map:bt,background:rn=!1,blur:sn,scene:yn,files:Pn,path:zn,preset:lr=void 0,extensions:ar}){const cr=useThree(rs=>rs.gl),hr=useThree(rs=>rs.scene),es=reactExports.useRef(null),[Ur]=reactExports.useState(()=>new Scene),Dr=reactExports.useMemo(()=>{const rs=new WebGLCubeRenderTarget(b);return rs.texture.type=HalfFloatType,rs},[b]);reactExports.useLayoutEffect(()=>(_e===1&&es.current.update(cr,Ur),setEnvProps(rn,yn,hr,Dr.texture,sn)),[o,Ur,Dr.texture,yn,hr,rn,_e,cr]);let zr=1;return useFrame(()=>{(_e===1/0||zr<_e)&&(es.current.update(cr,Ur),zr++)}),reactExports.createElement(reactExports.Fragment,null,createPortal(reactExports.createElement(reactExports.Fragment,null,o,reactExports.createElement("cubeCamera",{ref:es,args:[s,a,Dr]}),Pn||lr?reactExports.createElement(EnvironmentCube,{background:!0,files:Pn,preset:lr,path:zn,extensions:ar}):bt?reactExports.createElement(EnvironmentMap,{background:!0,map:bt,extensions:ar}):null),Ur))}function EnvironmentGround(o){var s,a,b,_e;const bt=useEnvironment(o),rn=o.map||bt;reactExports.useMemo(()=>extend({GroundProjectedEnvImpl:GroundProjectedEnv}),[]);const sn=reactExports.useMemo(()=>[rn],[rn]),yn=(s=o.ground)==null?void 0:s.height,Pn=(a=o.ground)==null?void 0:a.radius,zn=(b=(_e=o.ground)==null?void 0:_e.scale)!==null&&b!==void 0?b:1e3;return reactExports.createElement(reactExports.Fragment,null,reactExports.createElement(EnvironmentMap,_extends$1({},o,{map:rn})),reactExports.createElement("groundProjectedEnvImpl",{args:sn,scale:zn,height:yn,radius:Pn}))}function Environment(o){return o.ground?reactExports.createElement(EnvironmentGround,o):o.map?reactExports.createElement(EnvironmentMap,o):o.children?reactExports.createElement(EnvironmentPortal,o):reactExports.createElement(EnvironmentCube,o)}const LightManager=()=>{const[o,s]=reactExports.useState(!1),a=productDataStore$1(rn=>rn),b=lightStore(rn=>rn),[_e,bt]=reactExports.useState(1);return reactExports.useEffect(()=>{const rn=a.assetsData,sn=rn?.sceneMoodSettings?.envMap;sn&&(lightStore.setState({defaultEnvMapUrl:sn}),b.actions.setEnvLightMap(sn)),b.envMapUrl===""&&b.actions.setEnvLightMap(lightStore.getState().defaultEnvMapUrl);const yn=rn?.sceneMoodSettings?.ambientLightIntensity;yn!==void 0&&bt(yn),s(!0)},[]),reactExports.useEffect(()=>{o!==!1&&(LOGGER.groupCollapsed("SCENE LIGHTING INFO:"),LOGGER.table({title:"Scene Lights",details:{"Environment Map":b.envMapUrl,"Ambient Light Intensity":_e}}),LOGGER.groupEnd())},[o]),jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:o===!0&&jsxRuntimeExports.jsxs("group",{name:"GRP_LIGHTS",children:[jsxRuntimeExports.jsx("ambientLight",{intensity:_e}),jsxRuntimeExports.jsx(Environment,{background:!1,files:CORE_API.getResolvedAssetUrl(b.envMapUrl)})]})})};function Draggable({children:o,guid:s,onDragStartHandler:a,onDragEndHandler:b,onItemClickHandler:_e,onPointerEnter:bt,onPointerLeave:rn,dragging:sn=!1,intersectingGhostObject:yn=null,isInteractive:Pn=!0,initialIntersectedGhostUUID:zn=null,isSnapAllowed:lr=!1,...ar}){const cr=reactExports.useRef(),hr=reactExports.useRef(-1),es=reactExports.useRef([]),Ur=reactExports.useRef([]),{raycaster:Dr,size:zr,camera:rs}=useThree(),as=hotspotStore$1(gy=>gy.isAnyHotspotActive),os=coreSceneStore(gy=>gy.multipleTouchDetected),[ls,zs]=reactExports.useState(null),{raycasterGhost:ho}=reactExports.useMemo(()=>({raycasterGhost:new Raycaster})),ga=gy=>{let El;return gy.isGhost===!0?El=gy:gy.parent?gy.parent.isGhost===!0?El=gy.parent:El=ga(gy.parent):El=null,El},mo=gy=>{ho.layers.enable(GHOST_LAYER),ho.setFromCamera(gy,rs);const El=ho.intersectObject(ghostStore.getState().ghostParentRef);let My=null;return El.length>0&&(My=ga(El[0].object)),My},go=gy=>{let El=gy.whichNodesAreAttachedToUs();return El.map(My=>{go(My).map(lA=>{El.push(lA)})}),El},{initialMouse2D:yl,mouse2D:Zl,mouse3D:_d,offset:Ty,normal:yy,plane:by,pointerDownPos:Al}=reactExports.useMemo(()=>({initialMouse2D:new Vector2,mouse2D:new Vector2,mouse3D:new Vector3,offset:new Vector3,normal:new Vector3,plane:new Plane,pointerDownPos:new Vector2}),[]);reactExports.useEffect(()=>{let gy=attachmentStore$1.getState().attachmentSystem.currentStructure.getNodeByGUID(s);zs(gy)},[]);const _f=useGesture({onPointerEnter:gy=>{os||coreSceneStore.getState().sceneSettings.disableDragDrop&&coreSceneStore.getState().sceneSettings.disableContextMenu||coreSceneStore.getState().itemDraggedSkuID||coreSceneStore.getState().cameraActive!==!0&&!coreSceneStore.getState().dragging&&!as&&(ls&&!ls.isEndNode?CORE_API.switchCursor(CURSORS.POINTER):CORE_API.switchCursor(CURSORS.GRAB),bt(gy.event))},onPointerLeave:gy=>{os||coreSceneStore.getState().sceneSettings.disableDragDrop&&coreSceneStore.getState().sceneSettings.disableContextMenu||coreSceneStore.getState().itemDraggedSkuID||coreSceneStore.getState().cameraActive!==!0&&!coreSceneStore.getState().dragging&&!as&&(CORE_API.switchCursor(CURSORS.GRAB),rn(gy.event))},onClick:gy=>{if(gy.event.stopPropagation(),!os){if(coreSceneStore.getState().builderMode){const{eventObject:El,point:My}=gy.event;El.getWorldPosition(Ty).sub(My),_d.copy(My);const By=gy.event.offsetX,lA=gy.event.offsetY,wA=By/zr.width*2-1,Fy=-lA/zr.height*2+1;Zl.set(wA,Fy);const OA=new Raycaster;OA.setFromCamera(Zl,rs);const UA=OA.intersectObject(coreSceneStore.getState().sceneRef.getObjectByName("proxyGeometry"));UA.length>0&&CORE_API.fireEvent(CORE_API.EVENTS.CONFIGURATION.OnClickItem,{point:UA[0].point,camera:OA.camera})}if(!coreSceneStore.getState().sceneSettings.disableContextMenu)if(!gy.dragging&&!as){if(Math.abs(gy.event.x-Al.x)>1)return;_e(gy.event.offsetX,gy.event.offsetY,s)}else hotspotStore$1.getState().actions.exitHotspot(!0)}},onDrag:async gy=>{if(coreSceneStore.getState().simulateDragEnd===!0||coreSceneStore.getState().dragging&&coreSceneStore.getState().draggingItemGUID!==ls.guid||coreSceneStore.getState().sceneSettings.disableDragDrop)return;const El=gy.event;if(El.stopPropagation(),as){CORE_API.switchCursor(CURSORS.BLOCKED);return}if(itemStore.getState().selectedItemData){CORE_API.switchCursor(CURSORS.BLOCKED);return}if(Object.keys(itemStore.getState().itemsSpawned).length<2){CORE_API.switchCursor(CURSORS.BLOCKED);return}const By=gy.event.offsetX,lA=gy.event.offsetY;if(!coreSceneStore.getState().dragging){if(itemStore.setState({busyDraggingItem:!0}),Math.abs(El.x-Al.x)<=1)return;if(ls&&!ls.canDrag){CORE_API.switchCursor(CURSORS.BLOCKED);return}const YA=ls.whichPlugAreWeAttachedUsing().attachedPlug.guid;let WA=ls.swapRoot();WA||(WA={rootDetachedPlugs:ls.detachNodeFromReceiver()}),es.current=go(ls),Ur.current=[],es.current.map(SC=>{Ur.current.push(SC.guid),ls.ref.attach(SC.ref),ls.dragging=!0,SC.dragging=!0}),CORE_API.switchCursor(CURSORS.MOVE),coreSceneStore.setState({dragging:!0,draggingItemGUID:ls.guid}),window.pointerDownPos=gy.event.clientX,window.mouseDragging=!1;const FA=productDataStore$1.getState().productData[ls.skuID].lookDetails[ls.currentVariant].thumbnails.low;window.mouseDownImgSrc=CORE_API.getResolvedAssetUrl(FA),window.mouseDownSkuID=ls.skuID,window.moveThreshold=0,lr=!1,yn=null,zn=null,hr.current=-1;const BA=By/zr.width*2-1,rE=-lA/zr.height*2+1;yl.set(BA,rE);const sE=await a({guid:s,node:ls,detachedData:WA,attachedChildrenGuids:Ur.current});if(!sE||sE.length<=0||sE.transforms===void 0)return;sE.transforms.map((SC,HA)=>{SC.receiverPlugGUID===YA&&(hr.current=HA)})}const wA=By/zr.width*2-1,Fy=-lA/zr.height*2+1;Zl.set(wA,Fy),Dr.setFromCamera(Zl,rs),rs.getWorldDirection(yy).negate(),by.setFromNormalAndCoplanarPoint(yy,_d),Dr.ray.intersectPlane(by,_d),ls.ref.visible=!1;const OA=ghostStore.getState().ghostParentRef;if(OA.children.length>0){yn=mo(Zl),zn===null&&hr.current!==-1&&hr.current<OA.children.length&&OA.children[hr.current]!==void 0&&(zn=OA.children[hr.current].children[0].uuid);const UA=coreSceneStore.getState().hoveredGhostIndex;yn?UA!==yn.index&&coreSceneStore.setState({hoveredGhostIndex:yn.index}):UA!==-1&&coreSceneStore.setState({hoveredGhostIndex:-1}),ls.ref.position.copy(_d).add(Ty)}if(wA>1||wA<-1||Fy<-1||Fy>1){itemStore.setState({busyDraggingItem:!1}),CORE_API.switchCursor(CURSORS.GRAB),window.mouseDownImgSrc=null,window.mouseDragging=!1,window.dragImgElRef.style.opacity=0,ls.ref.visible=!0,coreSceneStore.setState({simulateDragEnd:!0,dragging:!1,draggingItemGUID:null,hoveredGhostIndex:-1}),b({node:ls,intersectingGhostObject:yn,attachedChildrenGuids:Ur.current,attachedNodesToCurrentNode:es.current});const UA=attachmentStore$1.getState().attachmentSystem.currentStructure.nodes;DynamicHooks.hookOnSceneItemsUpdated(UA)}},onDragStart:({event:gy})=>{if(coreSceneStore.setState({simulateDragEnd:!1}),os||coreSceneStore.getState().sceneSettings.disableDragDrop&&coreSceneStore.getState().sceneSettings.disableContextMenu)return;gy.stopPropagation();const{eventObject:El,point:My}=gy;El.getWorldPosition(Ty).sub(My),_d.copy(My),Al.set(gy.x,gy.y)},onDragEnd:({event:gy})=>{if(coreSceneStore.setState({simulateDragEnd:!1}),coreSceneStore.getState().dragging&&coreSceneStore.getState().draggingItemGUID!==ls.guid||coreSceneStore.getState().sceneSettings.disableDragDrop&&coreSceneStore.getState().sceneSettings.disableContextMenu)return;gy.stopPropagation(),window.mouseDownImgSrc=null,window.mouseDragging=!1,window.dragImgElRef.style.opacity=0,ls.ref.visible=!0,coreSceneStore.setState({dragging:!1,hoveredGhostIndex:-1,draggingItemGUID:null}),itemStore.setState({busyDraggingItem:!1}),CORE_API.switchCursor(CURSORS.GRAB),b({node:ls,intersectingGhostObject:yn,attachedChildrenGuids:Ur.current,attachedNodesToCurrentNode:es.current});const El=attachmentStore$1.getState().attachmentSystem.currentStructure.nodes;DynamicHooks.hookOnSceneItemsUpdated(El)}});return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:Pn?jsxRuntimeExports.jsx("group",{ref:cr,..._f(),...ar,children:o}):jsxRuntimeExports.jsx("group",{ref:cr,...ar,children:o})})}const selectionContext=reactExports.createContext(null);function Selection({children:o,enabled:s=!0}){const[a,b]=reactExports.useState([]),_e=reactExports.useMemo(()=>({selected:a,select:b,enabled:s}),[a,b,s]);return jsxRuntimeExports.jsx(selectionContext.Provider,{value:_e,children:o})}function Select({enabled:o=!1,children:s,...a}){const b=reactExports.useRef(null),_e=reactExports.useContext(selectionContext);return reactExports.useEffect(()=>{if(_e&&o){let bt=!1;const rn=[];if(b.current.traverse(sn=>{sn.type==="Mesh"&&rn.push(sn),_e.selected.indexOf(sn)===-1&&(bt=!0)}),bt)return _e.select(sn=>[...sn,...rn]),()=>{_e.select(sn=>sn.filter(yn=>!rn.includes(yn)))}}},[o,s,_e]),jsxRuntimeExports.jsx("group",{ref:b,...a,children:s})}const EffectComposerContext=reactExports.createContext(null),isConvolution=o=>(o.getAttributes()&EffectAttribute.CONVOLUTION)===EffectAttribute.CONVOLUTION,EffectComposer=React.memo(reactExports.forwardRef(({children:o,camera:s,scene:a,resolutionScale:b,enabled:_e=!0,renderPriority:bt=1,autoClear:rn=!0,depthBuffer:sn,disableNormalPass:yn,stencilBuffer:Pn,multisampling:zn=8,frameBufferType:lr=HalfFloatType},ar)=>{const{gl:cr,scene:hr,camera:es,size:Ur}=useThree(),Dr=a||hr,zr=s||es,[rs,as,os]=reactExports.useMemo(()=>{const ga=isWebGL2Available(),mo=new EffectComposer$1(cr,{depthBuffer:sn,stencilBuffer:Pn,multisampling:zn>0&&ga?zn:0,frameBufferType:lr});mo.addPass(new RenderPass(Dr,zr));let go=null,yl=null;return yn||(yl=new NormalPass(Dr,zr),yl.enabled=!1,mo.addPass(yl),b!==void 0&&ga&&(go=new DepthDownsamplingPass({normalBuffer:yl.texture,resolutionScale:b}),go.enabled=!1,mo.addPass(go))),[mo,yl,go]},[zr,cr,sn,Pn,zn,lr,Dr,yn,b]);reactExports.useEffect(()=>rs?.setSize(Ur.width,Ur.height),[rs,Ur]),useFrame((ga,mo)=>{if(_e){const go=cr.autoClear;cr.autoClear=rn,Pn&&!rn&&cr.clearStencil(),rs.render(mo),cr.autoClear=go}},_e?bt:0);const ls=reactExports.useRef(null),zs=useInstanceHandle(ls);reactExports.useLayoutEffect(()=>{const ga=[];if(ls.current&&zs.current&&rs){const mo=zs.current.objects;for(let go=0;go<mo.length;go++){const yl=mo[go];if(yl instanceof Effect){const Zl=[yl];if(!isConvolution(yl)){let Ty=null;for(;(Ty=mo[go+1])instanceof Effect&&!isConvolution(Ty);)Zl.push(Ty),go++}const _d=new EffectPass(zr,...Zl);ga.push(_d)}else yl instanceof Pass&&ga.push(yl)}for(const go of ga)rs?.addPass(go);as&&(as.enabled=!0),os&&(os.enabled=!0)}return()=>{for(const mo of ga)rs?.removePass(mo);as&&(as.enabled=!1),os&&(os.enabled=!1)}},[rs,o,zr,as,os,zs]);const ho=reactExports.useMemo(()=>({composer:rs,normalPass:as,downSamplingPass:os,resolutionScale:b,camera:zr,scene:Dr}),[rs,as,os,b,zr,Dr]);return reactExports.useImperativeHandle(ar,()=>rs,[rs]),jsxRuntimeExports.jsx(EffectComposerContext.Provider,{value:ho,children:jsxRuntimeExports.jsx("group",{ref:ls,children:o})})})),resolveRef=o=>typeof o=="object"&&o!=null&&"current"in o?o.current:o,Outline=reactExports.forwardRef(function o({selection:s=[],selectionLayer:a=10,blendFunction:b,patternTexture:_e,edgeStrength:bt,pulseSpeed:rn,visibleEdgeColor:sn,hiddenEdgeColor:yn,width:Pn,height:zn,kernelSize:lr,blur:ar,xRay:cr,...hr},es){const Ur=useThree(os=>os.invalidate),{scene:Dr,camera:zr}=reactExports.useContext(EffectComposerContext),rs=reactExports.useMemo(()=>new OutlineEffect(Dr,zr,{blendFunction:b,patternTexture:_e,edgeStrength:bt,pulseSpeed:rn,visibleEdgeColor:sn,hiddenEdgeColor:yn,width:Pn,height:zn,kernelSize:lr,blur:ar,xRay:cr,...hr}),[b,ar,zr,bt,zn,yn,lr,_e,rn,Dr,sn,Pn,cr]),as=reactExports.useContext(selectionContext);return reactExports.useEffect(()=>{if(!as&&s)return rs.selection.set(Array.isArray(s)?s.map(resolveRef):[resolveRef(s)]),Ur(),()=>{rs.selection.clear(),Ur()}},[rs,s,as,Ur]),reactExports.useEffect(()=>{rs.selectionLayer=a,Ur()},[rs,Ur,a]),reactExports.useRef(),reactExports.useEffect(()=>{var os;if(as&&as.enabled&&(os=as.selected)!=null&&os.length)return rs.selection.set(as.selected),Ur(),()=>{rs.selection.clear(),Ur()}},[as,rs.selection,Ur]),reactExports.useEffect(()=>()=>{rs.dispose()},[rs]),jsxRuntimeExports.jsx("primitive",{ref:es,object:rs})}),ToneMapping=reactExports.forwardRef(function o({blendFunction:s,adaptive:a,mode:b,resolution:_e,maxLuminance:bt,whitePoint:rn,middleGrey:sn,minLuminance:yn,averageLuminance:Pn,adaptationRate:zn,...lr},ar){const cr=reactExports.useMemo(()=>new ToneMappingEffect({blendFunction:s,adaptive:a,mode:b,resolution:_e,maxLuminance:bt,whitePoint:rn,middleGrey:sn,minLuminance:yn,averageLuminance:Pn,adaptationRate:zn}),[s,a,b,_e,bt,rn,sn,yn,Pn,zn]);return reactExports.useEffect(()=>{cr.dispose()},[cr]),jsxRuntimeExports.jsx("primitive",{...lr,ref:ar,object:cr,attributes:EffectAttribute.CONVOLUTION})}),Model=({modelData:o,clonedMesh:s,clonedProxyMesh:a,itemKey:b,scale:_e,onItemClickHandler:bt,onDragEndHandler:rn,onDragStartHandler:sn,stockAlert:yn=!0})=>{const Pn=itemStore(by=>by.focusedGUID),zn=hotspotStore$1(by=>by),lr=itemStore(by=>by),ar=itemStore(by=>by.hoveredItemRef),cr=reactExports.useRef(null),hr=reactExports.useRef(null),es=reactExports.useRef([]),Ur=reactExports.useRef(null),[Dr,zr]=reactExports.useState(s),[rs,as]=reactExports.useState(a),os=reactExports.useRef(0),ls=reactExports.useRef(0),{ref:zs,actions:ho,names:ga}=useAnimations(o.data.animations),mo=reactExports.useCallback((by,Al,_f,gy)=>playAnimation(by,Al,_f,gy,ga,ho),[ga,ho]),go=reactExports.useCallback(by=>stopAnimation(by,ga,ho),[ga,ho]);reactExports.useEffect(()=>{if(cr.current===b.itemData.guid){if(cr.current=null,!zn.lastActiveHotspotData)return;let by=zn.lastActiveHotspotData.hotspotData;if(!by)return;if(by.exitAnim?mo(by.exitAnim,!1,!1,!1):by.entryAnim&&mo(by.entryAnim,!1,!0,!1),by.activeAnim&&go(by.activeAnim),zn.activeHotspotData){if(b.itemData.guid===zn.activeHotspotData.itemData.guid){cr.current=b.itemData.guid;let Al=zn.activeHotspotData.hotspotData;if(!Al)return;Al.entryAnim&&mo(Al.entryAnim,!1,!1,!0),Al.activeAnim&&mo(Al.activeAnim,!0,!1,!1)}}else return}else if(zn.activeHotspotData){if(b.itemData.guid===zn.activeHotspotData.itemData.guid){cr.current=b.itemData.guid;let by=zn.activeHotspotData.hotspotData;if(!by)return;by.entryAnim&&mo(by.entryAnim,!1,!1,!0),by.activeAnim&&mo(by.activeAnim,!0,!1,!1)}}else return},[zn.activeHotspotData]),reactExports.useEffect(()=>{coreSceneStore.getState().actions.triggerAutoFocus(),CORE_API.fireEvent(CORE_API.EVENTS.SCENE.Item_Added,{...b,visualizedInScene:!0})},[]);const yl=reactExports.useCallback(()=>{if(!zs.current||(es.current=findMeshAndCloneMatFromScene(zs.current,zs.current.inStock),es.current.length==0))return;if(zs.current.inStock===!1){yn==!0&&(yn=!1,CORE_API.alert({alertMsg:"Some item(s) in configuration are out of stock",alertTime:7e3,alertType:"warn",alertLabel:"Stock Alert",persistant:!0,alertId:"outOfStock"}));return}const{current:by}=ls;for(let Al=0;Al<es.current.length;Al++){const _f=es.current[Al].material;_f.emissiveIntensity=by}},[ls,zs]),Zl=reactExports.useCallback(()=>{os.current=0},[es]),_d=reactExports.useCallback(()=>{os.current=.005},[es,Dr]);useFrame(()=>{if(coreSceneStore.getState().builderMode)return;const by=cameraStore.getState().userDragging,Al=0;ls.current=MathUtils.lerp(ls.current,by?Al:os.current,.1),yl()}),reactExports.useEffect(()=>{const by=attachmentStore$1.getState().attachmentSystem.currentStructure,Al=by.getNodeByGUID(b.itemData.guid);if(Al?.isDependent&&!Al.isInteractive&&Object.keys(ar).length>0){const _f=by.getNodeByGUID(Object.keys(ar)[0]);if(!_f||!_f.myDependenciesGUID)return;_f.myDependenciesGUID.includes(b.itemData.guid)?Zl():_d()}else ar.hasOwnProperty(b.itemData.guid)||Object.keys(ar).length==0?Zl():_d()},[ar]);const Ty=reactExports.useCallback(by=>{by.stopPropagation();const Al=lr.selectedItemData;coreSceneStore.setState({canvasTooltipText:"-"+b.itemData.name+"-"}),Al||itemStore.setState({hoveredItemRef:{}});let _f=itemStore.getState().hoveredItemRef;_f.hasOwnProperty(b.itemData.guid)||(_f[b.itemData.guid]={instance:zs.current},lr.actions.setHoveredItemRef({..._f}))},[lr,ar,hr]),yy=reactExports.useCallback(by=>{by.stopPropagation();const Al=lr.selectedItemData;if(coreSceneStore.setState({canvasTooltipText:""}),Al){if(Al.itemData.guid==b.itemData.guid)return;ar[b.itemData.guid]&&(delete ar[b.itemData.guid],lr.actions.setHoveredItemRef({...ar}))}else itemStore.setState({hoveredItemRef:{}})},[hr,lr,ar]);return reactExports.useEffect(()=>{if(Ur.current)return lr.collidersRef.push(Ur),lr.actions.setCollidersRef([...lr.collidersRef]),()=>{const by=lr.collidersRef.indexOf(Ur);by>-1&&lr.collidersRef.splice(by,1),lr.actions.setCollidersRef([...lr.collidersRef])}},[Ur]),jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[Dr&&jsxRuntimeExports.jsx(Select,{enabled:Pn===b.itemData.guid,children:jsxRuntimeExports.jsx(Clone,{name:"GRP_RenderGeometry",ref:zs,object:Dr,scale:_e,inStock:!0})}),(b.itemData.hasOwnProperty("disableCollider")?!b.itemData.disableCollider:!coreSceneStore.getState().sceneSettings.disableCollider)&&jsxRuntimeExports.jsx("group",{name:"GRP_LoadingPlaceholder",children:jsxRuntimeExports.jsx("group",{position:b.itemData.boundingSphereCenter,scale:[.9,.9,.9],name:"boxGeometry",children:jsxRuntimeExports.jsx(Box,{ref:Ur,scale:Vec3ToArr(b.itemData.boundingBoxSize),visible:!1})})}),o.proxy.isLoaded&&jsxRuntimeExports.jsx(Draggable,{guid:b.itemData.guid,onDragStartHandler:sn,onDragEndHandler:rn,onItemClickHandler:bt,onPointerEnter:Ty,onPointerLeave:yy,name:"GRP_ProxyMesh",isInteractive:b.itemData.isInteractive,children:jsxRuntimeExports.jsx("primitive",{name:"proxyGeometry",autoFocusEnabled:!0,object:rs,scale:_e,visible:!1})})]})};function playAnimation(o,s,a,b,_e,bt){if(!_e.includes(o))return;const rn=bt[o];rn.setLoop(s?LoopRepeat:LoopOnce),rn.clampWhenFinished=!s,b&&rn.reset(),a?rn.fadeOut(.5).play():rn.fadeIn(.5).play()}function stopAnimation(o,s,a){if(!s.includes(o))return;a[o].stop()}function LoadingBox({distanceFactor:o,position:s,proxymodel:a,scale:b}){return jsxRuntimeExports.jsx("primitive",{position:[0,0,0],name:"proxyLoader",object:a,scale:b,visible:!0,wireframe:!0,children:jsxRuntimeExports.jsx(Html,{center:!0,position:s,distanceFactor:o,zIndexRange:[29,0],children:jsxRuntimeExports.jsx("img",{alt:"Loading...",draggable:"false",src:PUBLIC_DESIGN_ASSETS_ENDPOINT+"/Animation/Loading.svg"})})})}function ProxyModelOnly({proxymodel:o,itemKey:s,scale:a}){return reactExports.useEffect(()=>{if(attachmentStore$1.getState().attachmentSystem.currentStructure.getNodeByGUID(s.itemData.guid)==null)return;async function _e(){await attachmentStore$1.getState().actions.updateFittingSkuIds()}CORE_API.fireEvent(CORE_API.EVENTS.SCENE.Model_Loaded,s.itemData.skuID),CORE_API.fireEvent(CORE_API.EVENTS.SCENE.Item_Added,{...s,visualizedInScene:!1}),_e()},[]),jsxRuntimeExports.jsxs("group",{children:[(s.itemData.hasOwnProperty("disableCollider")?!s.itemData.disableCollider:!coreSceneStore.getState().sceneSettings.disableCollider)&&jsxRuntimeExports.jsx("group",{name:"GRP_LoadingPlaceholder",children:jsxRuntimeExports.jsx("group",{position:s.itemData.boundingSphereCenter,scale:[.9,.9,.9],name:"boxGeometry",children:jsxRuntimeExports.jsx(Box,{scale:Vec3ToArr(s.itemData.boundingBoxSize),visible:!1})})}),jsxRuntimeExports.jsx("group",{name:"GRP_ProxyMesh",onClick:()=>{CORE_API.closeContextMenu()},children:jsxRuntimeExports.jsx("primitive",{name:"proxyGeometry",object:o.clone(),scale:a,visible:!1})})]})}const Item=({position:o,rotation:s,itemKey:a,scale:b,rejectFunc:_e,onItemClickHandler:bt,onDragEndHandler:rn,onDragStartHandler:sn,itemIndex:yn,proxyScene:Pn})=>{const zn=coreSceneStore(zr=>zr.sceneRef),lr=assetStore(zr=>zr),[ar,cr]=reactExports.useState(null),[hr,es]=reactExports.useState(Pn.clone()),Ur=reactExports.useRef(null);reactExports.useEffect(()=>((async()=>{let zr=await lr.actions.loadAsset(a.itemData.skuID).catch((ls,zs)=>{_e(ls,zs,a.itemData.guid)});if(!zr||!zr.data){cr({data:null,clonedMesh:null,mainModelReady:!1});return}const rs=zr.data,os=a.itemData.replace===!0||CORE_API.sceneSettings.disableLocalColorOverride?rs.scene:rs.scene.clone();a.itemData.clonedScene=os,rs.functions&&(rs.functions.copyVariantMaterials(os,rs.scene),await Dr(rs,os)),LOGGER.info({title:"model loaded: "+a.itemData.skuID}),a.itemData.hasItemLoaded=!0,itemStore.getState().actions.triggerModelLoaded(),CORE_API.fireEvent(CORE_API.EVENTS.SCENE.Model_Loaded,a.itemData.skuID),cr({data:zr,clonedMesh:os,mainModelReady:!0})})(),()=>{CORE_API.fireEvent(CORE_API.EVENTS.SCENE.Model_Removed,a.itemData.skuID)}),[]);const Dr=reactExports.useCallback(async(zr,rs)=>{const as=attachmentStore$1.getState().attachmentSystem;var os=as.currentStructure.getNodeByGUID(a.itemData.guid);if(!os)return;let ls="";if(os.overrideVariant)ls=os.overrideVariant,CORE_API.fireEvent(CORE_API.EVENTS.SCENE.MaterialOverrides_Exists,!0);else{const zs=as.globalVariants;if(!zs||zs.Count<=0)return;let ho=[];Object.keys(zs).map((ga,mo)=>{ho.push(zs[ga])}),a.itemData.looks?.map(ga=>{ho.includes(ga)&&(ls=ga)}),ls||(ls=a.itemData.looks[0])}return ls&&(os.currentVariant=ls,await zr.functions.selectVariant(rs,ls),itemStore.setState({variantChangeAlert:!itemStore.getState().variantChangeAlert})),ls},[]);return reactExports.useEffect(()=>{if(!Ur.current||ar===null)return;async function zr(){await attachmentStore$1.getState().actions.updateFittingSkuIds();const rs=attachmentStore$1.getState().attachmentSystem.currentStructure.getNodeByGUID(a.itemData.guid);rs!=null&&(rs.ref!==Ur.current&&(rs.ref=Ur.current,rs.transform={position:o,rotation:s}),rs.modelData=ar)}zr()},[Ur,ar]),reactExports.useEffect(()=>{if(Ur.current&&zn&&a.itemData.hasOwnProperty("excludeFromSceneBounds")&&a.itemData.excludeFromSceneBounds){const zr=zn.getObjectByName("#GRP_EXCLUDED");zr!==void 0&&zr.attach(Ur.current)}},[zn,Ur]),jsxRuntimeExports.jsxs("group",{ref:Ur,position:o,quaternion:s,name:`GRP_${a.itemData.name}_`+yn.toString().padStart(2,"0"),children:[ar!==null&&(ar.mainModelReady?jsxRuntimeExports.jsx(Model,{modelData:ar.data,clonedMesh:ar.clonedMesh,clonedProxyMesh:hr,itemKey:a,scale:b,onDragStartHandler:sn,onDragEndHandler:rn,onItemClickHandler:bt}):jsxRuntimeExports.jsx(ProxyModelOnly,{itemKey:a,proxymodel:hr,scale:b})),ar==null&&hr&&a.itemData.gltfURL&&jsxRuntimeExports.jsx(LoadingBox,{proxymodel:hr,distanceFactor:a.itemData.boundingBoxSize.x*4>1?1:a.itemData.boundingBoxSize.x*4,position:a.itemData.boundingSphereCenter,scale:b})]})};function GhostEventHandler({index:o,children:s,...a}){const b=reactExports.useRef(),_e=useGesture({onPointerEnter:bt=>{bt.event.stopPropagation(),coreSceneStore.getState().itemDraggedSkuID&&coreSceneStore.setState({hoveredGhostIndex:o})},onPointerLeave:bt=>{bt.event.stopPropagation(),coreSceneStore.getState().itemDraggedSkuID&&coreSceneStore.getState().hoveredGhostIndex===o&&coreSceneStore.setState({hoveredGhostIndex:-1})}});return jsxRuntimeExports.jsx("group",{ref:b,..._e(),...a,children:s})}const Ghost=({ghostVisibility:o,ghostData:s,ghostTransform:a,index:b})=>{const _e=reactExports.useRef(),bt=reactExports.useMemo(()=>s.proxyScene.clone(),[s]),rn=coreSceneStore(sn=>sn.hoveredGhostIndex);return reactExports.useEffect(()=>{const{current:sn}=_e;sn&&(sn.userData.incomingPlugName=a.incomingPlugName,sn.userData.receiverPlugName=a.receiverPlugName,sn.userData.incomingPlugGUID=a.incomingPlugGUID,sn.userData.receiverPlugGUID=a.receiverPlugGUID,CORE_API.fireEvent(CORE_API.EVENTS.SCENE.Ghost_Loaded,{ghostData:s,ghostTransform:a}))},[_e]),jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:jsxRuntimeExports.jsx(GhostEventHandler,{index:b,children:jsxRuntimeExports.jsx(Select,{enabled:rn===b,children:jsxRuntimeExports.jsx("primitive",{isGhost:!0,ref:_e,index:b,autoFocusEnabled:o,position:a.position,scale:coreSceneStore.getState().sceneSettings.ghostScale,quaternion:a.rotation,object:bt,castShadow:!1,receiveShadow:!1,frustumCulled:!1},`ghost${b}`)})})})},GhostManager=({intersectingGhostObject:o=null})=>{const{camera:s}=useThree(),a=ghostStore(Pn=>Pn.ghostVisibility),b=ghostStore(Pn=>Pn.ghostData),_e=ghostStore(Pn=>Pn.ghostsTransform),bt=reactExports.useRef(),{_touch2D:rn,raycasterGhost:sn}=reactExports.useMemo(()=>({_touch2D:new Vector2,raycasterGhost:new Raycaster}),[]);reactExports.useEffect(()=>{const{current:Pn}=bt;Pn&&ghostStore.setState({ghostParentRef:Pn})},[bt]);const yn=Pn=>{let zn=0,lr=0;if(Pn.touches&&Pn.touches[0])zn=Pn.touches[0].clientX,lr=Pn.touches[0].clientY;else return;if(!coreSceneStore.getState().itemDraggedSkuID)return;const ar=coreSceneStore.getState().cursorParentRef,cr=coreSceneStore.getState().canvasSize;if(!ar)return;const hr=ar.getBoundingClientRect(),es=hr.top,Ur=hr.left,Dr=(zn-Ur)/cr.width*2-1,zr=(-lr+es)/cr.height*2+1;rn.set(Dr,zr),sn.layers.enable(GHOST_LAYER),sn.setFromCamera(rn,s);const rs=sn.intersectObject(ghostStore.getState().ghostParentRef);rs.length>0?(o=rs[0].object,coreSceneStore.setState({hoveredGhostIndex:o.parent.index})):(o=null,coreSceneStore.setState({hoveredGhostIndex:-1}))};return reactExports.useEffect(()=>{window.addEventListener("touchmove",yn,!1),LOGGER.info({title:"Ghost Manager Mounted!"})},[]),jsxRuntimeExports.jsx("group",{name:"#GRP_GhostParent",visible:a,scale:a?[1,1,1]:[0,0,0],ref:bt,children:b&&jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:_e.map((Pn,zn)=>zn<b.count&&jsxRuntimeExports.jsx(Ghost,{ghostVisibility:a,ghostData:b,ghostTransform:Pn,index:zn},"ghosts"+zn))})})},ItemManager=()=>{const o=attachmentStore$1(ho=>ho.attachmentSystem),s=attachmentStore$1(ho=>ho),a=itemStore(ho=>ho.removeItemTrigger),b=itemStore(ho=>ho.variantChangeAlert),_e=hotspotStore$1(ho=>ho),bt=coreSceneStore(ho=>ho.showDimensions);coreSceneStore(ho=>ho.sceneSettings);const rn=itemStore(ho=>ho),sn=itemStore(ho=>ho.lastDeletedItemData),yn=cameraStore(ho=>ho),Pn=itemStore(ho=>ho.selectedItemData),zn=itemStore(ho=>ho.itemsSpawned),lr=reactExports.useRef(null),ar=reactExports.useRef(null),cr=reactExports.useRef(!1),hr=reactExports.useRef(null),es=reactExports.useRef(null),Ur=reactExports.useRef(!1),Dr=reactExports.useRef(!1);reactExports.useRef(!1),reactExports.useRef(!1);const zr=reactExports.useCallback(async({guid:ho,node:ga,detachedData:mo,attachedChildrenGuids:go})=>{if(cr.current!==!0)return cr.current=!0,cameraStore.getState().actions.canCameraRotate(!1),_e.actions.switchHotspotsVisibility(!1,!0),hr.current={position:ga.ref.position.clone(),rotation:ga.ref.rotation.clone()},es.current=mo,await o.currentStructure.removeNodeFromStructure(ga),go.length<=0&&(go=!1),ghostStore.getState().actions.spawnGhostsForSkuID(zn[ho].itemData.skuID,go)},[yn,zn]),rs=reactExports.useCallback(async({node:ho,intersectingGhostObject:ga,attachedChildrenGuids:mo,attachedNodesToCurrentNode:go})=>{if(!cr.current)return;cr.current=!1,cameraStore.getState().actions.canCameraRotate(!0),_e.actions.switchHotspotsVisibility(!0,!0);function yl(){ho.ref.position.set(0,0,0),ghostStore.getState().actions.clearAllGhosts()}if(!ghostStore.getState().ghostData?.connectablePlugs){yl();return}o.currentStructure.addNode(ho);let _d=null,Ty=null,yy=!1,by=[],Al={};if(coreSceneStore.getState().sceneSettings.ignoreCollisionPostDragging===!1&&mo.map((_f,gy)=>{by[gy]=o.currentStructure.checkCollisionforGUID(_f,mo),by[gy]&&(Al[_f]=zn[_f],o.currentStructure.getNodeByGUID(_f).getAllBranchedNodesAttachedToUs().map(By=>{Al[By.guid]=zn[By.guid]}))}),by.map(_f=>{yy||(yy=_f)}),ga&&yy){coreSceneStore.setState({draggingOnDropCollisionData:{node:ho,attachedChildrenGuids:mo,collidingStatus:by,intersectingGhostObject:ga,initPosition:hr.current.position,initRotation:hr.current.rotation,detachedPlugs:es.current,attachedNodesToCurrentNode:go}}),ho.ref.position.set(ga.position.x,ga.position.y,ga.position.z),ho.ref.setRotationFromEuler(ga.rotation),CORE_API.fireEvent(CORE_API.EVENTS.SCENE.DraggingOnDrop_CollsionDetected,Al);return}if(ga){const _f=ga.userData;_d=ho.getPlugByName(_f.incomingPlugName),Ty=o.currentStructure.getPlugByGUID(_f.receiverPlugGUID),ho.ref.position.set(ga.position.x,ga.position.y,ga.position.z),ho.ref.setRotationFromEuler(ga.rotation),ho.transform={position:ga.position,rotation:ga.quaternion}}else{const _f=es.current.neighbourDetachedPlugs;_f&&(es.current.neighbourNode.detachNodeFromReceiver(),o.currentStructure.connectPlugs({incomingPlug:_f.incomingPlug,receiverPlug:_f.receiverPlug})),_d=es.current.rootDetachedPlugs.incomingPlug,Ty=es.current.rootDetachedPlugs.receiverPlug,ho.ref.position.set(hr.current.position.x,hr.current.position.y,hr.current.position.z),ho.ref.setRotationFromEuler(hr.current.rotation);let gy=new Quaternion().identity();ho.ref.getWorldQuaternion(gy),ho.transform={position:hr.current.position,rotation:gy}}o.currentStructure.connectPlugs({incomingPlug:_d,receiverPlug:Ty}),ghostStore.getState().actions.clearAllGhosts(),itemStore.getState().actions.deselectItem(),go.map(_f=>{ho.ref.parent.attach(_f.ref),_f.transform={position:_f.ref.position,rotation:_f.ref.quaternion},ho.dragging=!1,_f.dragging=!1}),await attachmentStore$1.getState().actions.updateFittingSkuIds()},[yn,coreSceneStore,ghostStore,o,s,zn]),as=reactExports.useCallback((ho,ga,mo)=>{if(coreSceneStore.getState().sceneSettings.disableContextMenu)return;const go=attachmentStore$1.getState().attachmentSystem.currentStructure,yl=go.getNodeByGUID(mo);let Zl=[];if(!yl?.myDependenciesGUID)return;yl.myDependenciesGUID.map(yy=>{const by=go.getNodeByGUID(yy);if(!by)return;let Al={guid:yy,name:zn[yy].itemData.guid,data:{...zn[yy],overrideVariant:by.overrideVariant,currentVariant:by.currentVariant,offsetX:ho,offsetY:ga}};Zl.push(Al)}),Zl.sort((yy,by)=>yy.name>by.name?1:by.name>yy.name?-1:0);let _d=inventoryStore.getState().inventoryData[zn[mo].itemData.skuID];const Ty={primary:{guid:mo,name:zn[mo].itemData.name,data:{inventory:_d,...zn[mo],overrideVariant:yl.overrideVariant,currentVariant:yl.currentVariant,offsetX:ho,offsetY:ga}},dependencies:Zl};rn.actions.setSelectedItemData(Ty.primary.data),CORE_API.fireEvent(CORE_API.EVENTS.UI.ContextMenu_Show,Ty)},[zn]),os=reactExports.useCallback(ho=>{if(!ho)return;itemStore.setState({lastDeletedItemData:{...zn[ho]}});const ga={...zn[ho]};delete zn[ho],rn.actions.setItemsSpawned({...zn}),CORE_API.fireEvent(CORE_API.EVENTS.SCENE.Item_Removed,ga)},[rn,itemStore,zn]);reactExports.useEffect(()=>{let ho=itemStore.getState().removeItems;if(ho.length<=0&&!sn)return;let ga=ho.pop();os(ga)},[a,sn]);const ls=reactExports.useCallback(function(ho,ga){const mo=ho>1?!0:ho===1?Object.values(zn)[0].itemData.skuID.toLowerCase()!=="root":!1,go=!mo;LOGGER.groupCollapsed("Resolving buttons visibility"),LOGGER.table({sceneIsEmpty:go,sceneIsNotEmpty:mo}),LOGGER.groupEnd(),ga.showViewInYourSpaceBtn===!0&&(mo&&Ur.current===!1?(CORE_API.fireEvent(CORE_API.EVENTS.UI.ViewInYourSpaceButton_Show),Ur.current=!0):go&&Ur.current===!0&&(CORE_API.fireEvent(CORE_API.EVENTS.UI.ViewInYourSpaceButton_Hide),Ur.current=!1)),ga.showShareBtn===!0&&(mo&&Dr.current===!1?(CORE_API.fireEvent(CORE_API.EVENTS.UI.ShareButton_Show),Dr.current=!0):go&&Dr.current===!0&&(CORE_API.fireEvent(CORE_API.EVENTS.UI.ShareButton_Hide),Dr.current=!1))},[zn]);reactExports.useEffect(()=>{CORE_API.fireEvent(CORE_API.EVENTS.SCENE.Items_Updated,{itemsSpawned:zn});const ho=coreSceneStore.getState().sceneSettings,ga=itemStore.getState().defaultSceneItemCount;ls(Object.keys(zn).length,ho),Object.keys(zn).length===ga?coreSceneStore.setState({canvasTooltipText:ho.textSettings.tooltipEmptySceneText}):Object.keys(zn).length===ga+1&&coreSceneStore.setState({canvasTooltipText:ho.textSettings.tooltipInstructionText})},[zn]),reactExports.useEffect(()=>{async function ho(){const ga=attachmentStore$1.getState().attachmentSystem;if(!ga)return;inventoryStore.getState().actions.refreshInventory(zn);const mo=await ga.getCartItemsAsync();CORE_API.fireEvent(CORE_API.EVENTS.SCENE.CartItems_Updated,mo),CORE_API.fireEvent(CORE_API.EVENTS.SCENE.ReplaceableCategory_Updated,ga.currentStructure.getCurrentItemsInReplaceableCategory())}ho()},[zn,b]);const zs=reactExports.useCallback((ho,ga,mo)=>{CORE_API.removeItemByGUID(mo),CORE_API.alert({alertMsg:ga+": "+ho,alertTime:5e3,alertType:"error",alertLabel:"Error",persistant:!0})},[]);return reactExports.useEffect(()=>{const{current:ho}=ar;ho&&attachmentStore$1.setState({colliderMeshRef:ho})},[ar]),reactExports.useEffect(()=>{const{current:ho}=lr;ho&&coreSceneStore.setState({sceneRef:ho})},[lr]),reactExports.useEffect(()=>{let ho=Pn?cameraStore.getState().cameraSettings.zoomingMultiplier:cameraStore.getState().cameraSettings.zoomingMultiplier+.1;ho+=bt?.3:.1,cameraStore.setState({boundsMargin:ho}),coreSceneStore.getState().actions.triggerAutoFocus()},[bt,Pn]),reactExports.useEffect(()=>{const ho=itemStore.getState().itemsSpawned;if(LOGGER.info({title:"item Manager mounted"}),!coreSceneStore.getState().preconfigurationLoaded)attachmentStore$1.getState().actions.loadDefaultStructure();else if(Object.keys(ho).length===1){const ga=Object.keys(ho)[0];itemStore.getState().actions.resolvePlugDependencyOnGUID(ga)}},[]),jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsxs("group",{name:"Scene",ref:lr,onPointerMissed:()=>{Pn&&rn.actions.deselectItem(),hotspotStore$1.getState().isAnyHotspotActive&&hotspotStore$1.getState().actions.exitHotspot()},children:[IS_DEV_ENV,jsxRuntimeExports.jsx("group",{name:"#GRP_EXCLUDED"}),jsxRuntimeExports.jsxs("group",{name:"#ITEMSANDGHOSTS",children:[jsxRuntimeExports.jsx("group",{name:"#ITEMS",children:Object.keys(zn).map((ho,ga)=>jsxRuntimeExports.jsx(Item,{scale:[1,1,1],onDragStartHandler:zr,onDragEndHandler:rs,onItemClickHandler:as,itemKey:zn[ho],position:zn[ho].itemData.position,rotation:zn[ho].itemData.rotation,itemIndex:ga,proxyScene:zn[ho].itemData.proxyScene,rejectFunc:zs},ho))}),jsxRuntimeExports.jsx(GhostManager,{})]})]}),jsxRuntimeExports.jsx("group",{name:"#Parent_ColliderMesh",children:jsxRuntimeExports.jsx("mesh",{ref:ar,visible:!1,enabled:!0,name:"#COLLIDER_MESH",children:jsxRuntimeExports.jsx("meshPhongMaterial",{depthTest:!1,transparent:!0,opacity:.8})})})]})},ContactShadows=reactExports.forwardRef(({scale:o=10,frames:s=1/0,excludeLayer:a=-1,bbmin:b=1,bbmax:_e=1,opacity:bt=1,width:rn=1,height:sn=1,blur:yn=1,near:Pn=0,far:zn=10,resolution:lr=512,smooth:ar=!0,color:cr="#000000",depthWrite:hr=!1,renderOrder:es,...Ur},Dr)=>{const zr=reactExports.useRef(null),rs=useThree(by=>by.scene),as=useThree(by=>by.gl),os=reactExports.useRef(null);rn=rn*(Array.isArray(o)?o[0]:o||1),sn=sn*(Array.isArray(o)?o[1]:o||1);const[ls,zs,ho,ga,mo,go,yl]=reactExports.useMemo(()=>{const by=new WebGLRenderTarget(lr,lr),Al=new WebGLRenderTarget(lr,lr);Al.texture.generateMipmaps=by.texture.generateMipmaps=!1;const _f=new PlaneGeometry(rn,sn).rotateX(Math.PI/2),gy=new Mesh(_f),El=new MeshDepthMaterial;El.depthTest=El.depthWrite=!1,El.onBeforeCompile=lA=>{lA.uniforms={...lA.uniforms,ucolor:{value:new Color$1(cr)}},lA.fragmentShader=lA.fragmentShader.replace("void main() {",`uniform vec3 ucolor;
|
|
9103
9103
|
void main() {
|
|
9104
9104
|
`),lA.fragmentShader=lA.fragmentShader.replace("vec4( vec3( 1.0 - fragCoordZ ), opacity );","vec4( ucolor * fragCoordZ * 2.0, ( 1.0 - fragCoordZ ) * 1.0 );")};const My=new ShaderMaterial(HorizontalBlurShader),By=new ShaderMaterial(VerticalBlurShader);return By.depthTest=My.depthTest=!1,[by,_f,El,gy,My,By,Al]},[lr,rn,sn,o,cr]),Zl=by=>{ga.visible=!0,ga.material=mo,mo.uniforms.tDiffuse.value=ls.texture,mo.uniforms.h.value=by*1/256,as.setRenderTarget(yl),as.render(ga,os.current),ga.material=go,go.uniforms.tDiffuse.value=yl.texture,go.uniforms.v.value=by*1/256,as.setRenderTarget(ls),as.render(ga,os.current),ga.visible=!1};let _d=0,Ty,yy;return useFrame(()=>{os.current&&(s===1/0||_d<s)&&(_d++,Ty=rs.background,yy=rs.overrideMaterial,zr.current.visible=!1,rs.background=null,rs.overrideMaterial=ho,as.setRenderTarget(ls),as.render(rs,os.current),Zl(yn),ar&&Zl(yn*.4),as.setRenderTarget(null),zr.current.visible=!0,rs.overrideMaterial=yy,rs.background=Ty)}),reactExports.useEffect(()=>()=>{os.current&&os.current.layers.disable(a)},[os]),reactExports.useEffect(()=>()=>{ls.dispose(),yl.dispose(),zs.dispose(),ho.dispose(),ga.geometry.dispose(),mo.dispose(),go.dispose()},[]),reactExports.useImperativeHandle(Dr,()=>zr.current,[]),reactExports.createElement("group",_extends$1({"rotation-x":Math.PI/2},Ur,{ref:zr}),reactExports.createElement("mesh",{renderOrder:es,geometry:zs,layers:2,scale:[1,-1,1],rotation:[-Math.PI/2,0,0]},reactExports.createElement("meshBasicMaterial",{transparent:!0,map:ls.texture,opacity:bt,depthWrite:hr})),reactExports.createElement("orthographicCamera",{ref:os,args:[-rn/2,rn/2,sn/2,-sn/2,Pn,zn]}))}),EffectsComposer=({...o})=>{const[s,a]=reactExports.useState(10),b=coreSceneStore(zn=>zn.bbox),_e=itemStore(zn=>zn.itemsSpawned),bt=ghostStore(zn=>zn.ghostsTransform),rn=coreSceneStore(zn=>zn.sceneSettings),[sn,yn]=reactExports.useState(0),Pn=()=>{yn(zn=>zn+1)};return reactExports.useEffect(()=>{bt.length===0&&Pn()},[_e,bt]),reactExports.useEffect(()=>{if(!b||!b.isBox3){a(10);return}const zn=new Vector3(0,0,0);let lr=zn.distanceTo(b.min)*2,ar=zn.distanceTo(b.max)*2,cr=ar>lr?ar:lr;cr!=1/0&&cr!=-1/0&&(cr+=5,a(cr||10))},[b]),jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsxs(EffectComposer,{multisampling:4,autoClear:!1,disableNormalPass:!0,children:[jsxRuntimeExports.jsx(ToneMapping,{blendFunction:BlendFunction.NORMAL,adaptive:!1,resolution:240,maxLuminance:40,middleGrey:5}),jsxRuntimeExports.jsx(Outline,{...rn.outlineSettings})]}),rn.contactShadowVisibility&&jsxRuntimeExports.jsx(ContactShadows,{excludeLayer:GHOST_LAYER,position:[0,0,0],opacity:.3,scale:s,blur:.35,far:2,resolution:256,frames:1},sn)]})};function Hotspot({hotspotKey:o}){const s=coreSceneStore(zr=>zr.sceneSettings),a=attachmentStore$1(zr=>zr.attachmentSystem),b=hotspotStore$1(zr=>zr),_e=hotspotStore$1(zr=>zr.activeHotspotData),bt=itemStore(zr=>zr.lastDeletedItemData),rn=ghostStore(zr=>zr.ghostData),sn=hotspotStore$1(zr=>zr.actions),yn=hotspotStore$1(zr=>zr.hotspotsVisibility),Pn=hotspotStore$1(zr=>zr.hotspotsTempVisibility),[zn,lr]=reactExports.useState(null),[ar,cr]=reactExports.useState(!1),hr=reactExports.useRef(null),es=reactExports.useRef(null),Ur=reactExports.useRef(null),Dr=reactExports.useCallback(zr=>{zr.includes(o.itemData.skuID+"_"+o.hotspotData.hotspotID)&&cr(!0)},[o]);return reactExports.useEffect(()=>Dr(b.visitedHotspotsID),[b,Dr]),reactExports.useEffect(()=>{lr(_e?_e.hotspotData.guid:null)},[_e]),reactExports.useEffect(()=>{es.current&&(zn===o.hotspotData.guid?es.current.parentNode.classList.add("topmostActive"):es.current.parentNode.classList.remove("topmostActive"))},[zn]),reactExports.useEffect(()=>{hr.current&&zn===o.hotspotData.guid&&(hr.current.style.opacity=1)},[zn,hr]),reactExports.useEffect(()=>{if(!(!Ur.current&&!bt)){var zr=a.currentStructure.getNodeByGUID(o.itemData.guid);zr?.ref&&(Ur.current.parent=zr.ref)}},[Ur,a,yn,bt]),jsxRuntimeExports.jsx("group",{ref:Ur,position:o.hotspotData.hotspotPointTransform,children:jsxRuntimeExports.jsx(Html,{ref:es,zIndexRange:[6,0],style:yn&&Pn&&!rn&&s.showHotspotsBtn?{opacity:"1",pointerEvents:"all",transition:"0.5s"}:{opacity:"0",pointerEvents:"none",transition:"0.5s"},children:jsxRuntimeExports.jsxs("button",{style:{display:o.hotspotData.visibleInScene==!1?"none":"block"},ref:hr,className:zn===o.hotspotData.guid?"hotspot hotspot-0 active":ar?"hotspot hotspot-0 visited":"hotspot hotspot-0",onPointerEnter:zr=>{zr.stopPropagation(),hr.current&&zn!==o.hotspotData.guid&&(hr.current.getClientRects()[0].left>coreSceneStore.getState().canvasSize.width/1.6?hr.current.classList.add("left"):hr.current.classList.remove("left")),es.current&&es.current.parentNode.classList.add("topmostHover")},onPointerLeave:zr=>{zr.stopPropagation(),es.current&&es.current.parentNode.classList.remove("topmostHover")},id:"hotspot3D_"+o.itemData.skuID+"_"+o.hotspotData.hotspotID,role:"button","aria-label":"Hotspot Button",onClick:zr=>{if(zr.stopPropagation(),b.isAnyHotspotActive&&b.activeHotspotData.hotspotData.guid===o.hotspotData.guid){sn.exitHotspot();return}sn.clickHotspot(o.hotspotData.hotspotID,o.hotspotData.guid,o.itemData.guid)},children:[jsxRuntimeExports.jsx("span",{className:"inner-circle"}),jsxRuntimeExports.jsx("span",{className:"hotspot-annotation",children:o.hotspotData.title})]})})})}const HotspotManager=()=>{const o=hotspotStore$1(Ur=>Ur),s=hotspotStore$1(Ur=>Ur.hotspotsHealthCheck),a=itemStore(Ur=>Ur.lastDeletedItemData),b=hotspotStore$1(Ur=>Ur.hotspotsSpawned),_e=itemStore(Ur=>Ur.itemsSpawned),bt=hotspotStore$1(Ur=>Ur.activeHotspotData),[rn,sn]=reactExports.useState(null),{camera:yn}=useThree(),Pn=reactExports.useRef(null),zn=reactExports.useCallback(()=>{const Ur=hotspotStore$1.getState().hotspotSpawnedForCategoryIDs,Dr=attachmentStore$1.getState().attachmentSystem.globalGeometryVariants;Object.keys(_e).map(zr=>{let rs=_e[zr];if(!rs.hotspotsData)return;let as=!1;Object.keys(b).map(os=>{const ls=b[os].hotspotData.geometryVariantID;if(ls){let zs=!1;if(Object.keys(Dr).map(ho=>{ls==Dr[ho]&&(zs=!0)}),zs===!1){as=!0;let ho=[];ho.push(b[os].hotspotData.categoryID);const ga=new Set(ho);filterArrWithCondition(Ur,mo=>!ga.has(mo)),delete b[os]}}}),as===!0&&(hotspotStore$1.setState({hotspotSpawned:{...b}}),hotspotStore$1.setState({hotspotSpawnedForCategoryIDs:Ur})),rs.hotspotsData.map(os=>{const ls=hotspotStore$1.getState().hotspotSpawnedForCategoryIDs;if(os.geometryVariantID){let zs=!1;if(Object.keys(Dr).map(ho=>{os.geometryVariantID==Dr[ho]&&(zs=!0)}),zs===!1)return}os.categoryID!==""&&ls.includes(os.categoryID)||(rs.hotspotSpawned=!0,ls.push(os.categoryID),lr(zr,os))})})},[_e,b]),lr=reactExports.useCallback((Ur,Dr)=>{let zr=_e[Ur].itemData.skuID+"_"+Dr.hotspotID;b[zr]={itemData:{guid:Ur,..._e[Ur].itemData},hotspotData:{guid:zr,...Dr}},hotspotStore$1.setState({hotspotsSpawned:{...b}})},[_e,o,b]);reactExports.useEffect(()=>{if(!a||!a.itemData)return;if(a.hotspotSpawned){hotspotStore$1.getState().actions.removeHotspotForItem({...a});const Dr=hotspotStore$1.getState().hotspotSpawnedForCategoryIDs;let zr=[];a.hotspotsData.map(as=>{zr.push(as.categoryID)});const rs=new Set(zr);filterArrWithCondition(Dr,as=>!rs.has(as)),hotspotStore$1.setState({hotspotSpawnedForCategoryIDs:Dr})}itemStore.setState({lastDeletedItemData:null});const Ur=attachmentStore$1.getState().attachmentSystem;Ur.currentStructure.removeNodeByGUID(a.itemData.guid),CORE_API.fireEvent(CORE_API.EVENTS.SCENE.MaterialOverrides_Exists,Ur.currentStructure.materialOverrideExists())},[a]);const{raycasterHotspot:ar,worldPos:cr}=reactExports.useMemo(()=>({raycasterHotspot:new Raycaster,worldPos:new Vector3}),[]),hr=(Ur,Dr)=>{let zr=Ur;zr.sub(yn.position);const rs=zr.length();ar.set(yn.position,zr);const as=ar.intersectObject(coreSceneStore.getState().sceneRef);if(as.length>0&&as[0].distance<rs){Dr.style.opacity=.5;return}Dr.style.opacity=rn?.5:1};reactExports.useEffect(()=>{sn(bt?bt.hotspotData.guid:null)},[bt]);const es=reactExports.useRef(0);return useFrame(()=>{if(Pn.current===null||Pn.current.children.length<=0)return;es.current<Pn.current.children.length-1?es.current+=1:es.current=0;const Ur=Object.keys(b)[es.current],Dr="hotspot3D_"+b[Ur].itemData.skuID+"_"+b[Ur].hotspotData.hotspotID,zr=CORE_API.coreWCRef.shadowRootRef.getElementById(Dr);rn===Ur||zr===null||(Pn.current.children[es.current].getWorldPosition(cr),hr(cr,zr))},[]),reactExports.useEffect(()=>{zn()},[Object.keys(_e).length,s]),o.hotspotsVisibility===!0&&jsxRuntimeExports.jsx("group",{name:"#GRP_HotspotManager",ref:Pn,children:Object.keys(b).map(Ur=>jsxRuntimeExports.jsx(Hotspot,{hotspotKey:b[Ur]},Ur))})};var objectTypes$3={boolean:!1,function:!0,object:!0,number:!1,string:!1,undefined:!1},lodash__objecttypes=objectTypes$3,objectTypes$2=lodash__objecttypes;function isObject$4(o){return!!(o&&objectTypes$2[typeof o])}var lodash_isobject=isObject$4,objectProto$1=Object.prototype,toString=objectProto$1.toString,reNative$4=RegExp("^"+String(toString).replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/toString| for [^\]]+/g,".*?")+"$"),lodash__renative=reNative$4,objectTypes$1=lodash__objecttypes,objectProto=Object.prototype,hasOwnProperty=objectProto.hasOwnProperty,shimKeys$1=function(o){var s,a=o,b=[];if(!a||!objectTypes$1[typeof o])return b;for(s in a)hasOwnProperty.call(a,s)&&b.push(s);return b},lodash__shimkeys=shimKeys$1,isObject$3=lodash_isobject,reNative$3=lodash__renative,shimKeys=lodash__shimkeys,nativeKeys=reNative$3.test(nativeKeys=Object.keys)&&nativeKeys,keys$2=nativeKeys?function(o){return isObject$3(o)?nativeKeys(o):[]}:shimKeys,lodash_keys=keys$2;function noop$1(){}var lodash_noop=noop$1,isObject$2=lodash_isobject,reNative$2=lodash__renative,nativeCreate=reNative$2.test(nativeCreate=Object.create)&&nativeCreate;function baseCreate$2(o,s){return isObject$2(o)?nativeCreate(o):{}}nativeCreate||(baseCreate$2=function(){function o(){}return function(s){if(isObject$2(s)){o.prototype=s;var a=new o;o.prototype=null}return a||commonjsGlobal.Object()}}());var lodash__basecreate=baseCreate$2,noop=lodash_noop,reNative$1=lodash__renative,descriptor={configurable:!1,enumerable:!1,value:null,writable:!1},defineProperty=function(){try{var o={},s=reNative$1.test(s=Object.defineProperty)&&s,a=s(o,o,o)&&s}catch{}return a}(),setBindData$3=defineProperty?function(o,s){descriptor.value=s,defineProperty(o,"__bindData__",descriptor)}:noop,lodash__setbinddata=setBindData$3,baseCreate$1=lodash__basecreate,isObject$1=lodash_isobject,setBindData$2=lodash__setbinddata,arrayRef$2=[],push$2=arrayRef$2.push;function baseBind$1(o){var s=o[0],a=o[2],b=o[4];function _e(){if(a){var bt=a.slice();push$2.apply(bt,arguments)}if(this instanceof _e){var rn=baseCreate$1(s.prototype),sn=s.apply(rn,bt||arguments);return isObject$1(sn)?sn:rn}return s.apply(b,bt||arguments)}return setBindData$2(_e,o),_e}var lodash__basebind=baseBind$1;function slice$2(o,s,a){s||(s=0),typeof a>"u"&&(a=o?o.length:0);for(var b=-1,_e=a-s||0,bt=Array(_e<0?0:_e);++b<_e;)bt[b]=o[s+b];return bt}var lodash__slice=slice$2,baseCreate=lodash__basecreate,isObject=lodash_isobject,setBindData$1=lodash__setbinddata,slice$1=lodash__slice,arrayRef$1=[],push$1=arrayRef$1.push;function baseCreateWrapper$1(o){var s=o[0],a=o[1],b=o[2],_e=o[3],bt=o[4],rn=o[5],sn=a&1,yn=a&2,Pn=a&4,zn=a&8,lr=s;function ar(){var cr=sn?bt:this;if(b){var hr=b.slice();push$1.apply(hr,arguments)}if((_e||Pn)&&(hr||(hr=slice$1(arguments)),_e&&push$1.apply(hr,_e),Pn&&hr.length<rn))return a|=16,baseCreateWrapper$1([s,zn?a:a&-4,hr,null,bt,rn]);if(hr||(hr=arguments),yn&&(s=cr[lr]),this instanceof ar){cr=baseCreate(s.prototype);var es=s.apply(cr,hr);return isObject(es)?es:cr}return s.apply(cr,hr)}return setBindData$1(ar,o),ar}var lodash__basecreatewrapper=baseCreateWrapper$1;function isFunction$1(o){return typeof o=="function"}var lodash_isfunction=isFunction$1,baseBind=lodash__basebind,baseCreateWrapper=lodash__basecreatewrapper,isFunction=lodash_isfunction,arrayRef=[],push=arrayRef.push;function createWrapper$1(o,s,a,b,_e,bt){var rn=s&1,sn=s&2,yn=s&4,Pn=s&16,zn=s&32;if(!sn&&!isFunction(o))throw new TypeError;Pn&&!a.length&&(s&=-17,Pn=a=!1),zn&&!b.length&&(s&=-33,zn=b=!1);var lr=o&&o.__bindData__;if(lr&&lr!==!0)return lr=lr.slice(),rn&&!(lr[1]&1)&&(lr[4]=_e),!rn&&lr[1]&1&&(s|=8),yn&&!(lr[1]&4)&&(lr[5]=bt),Pn&&push.apply(lr[2]||(lr[2]=[]),a),zn&&push.apply(lr[3]||(lr[3]=[]),b),lr[1]|=s,createWrapper$1.apply(null,lr);var ar=s==1||s===17?baseBind:baseCreateWrapper;return ar([o,s,a,b,_e,bt])}var lodash__createwrapper=createWrapper$1,createWrapper=lodash__createwrapper,slice=lodash__slice;function bind$1(o,s){return arguments.length>2?createWrapper(o,17,slice(arguments,2),null,s):createWrapper(o,1,null,null,s)}var lodash_bind=bind$1;function identity$1(o){return o}var lodash_identity=identity$1,reNative=lodash__renative,reThis$1=/\bthis\b/,support$1={};support$1.funcDecomp=!reNative.test(commonjsGlobal.WinRTError)&&reThis$1.test(function(){return this});support$1.funcNames=typeof Function.name=="string";var lodash_support=support$1,bind=lodash_bind,identity=lodash_identity,setBindData=lodash__setbinddata,support=lodash_support,reFuncName=/^\s*function[ \n\r\t]+\w/,reThis=/\bthis\b/,fnToString=Function.prototype.toString;function baseCreateCallback$2(o,s,a){if(typeof o!="function")return identity;if(typeof s>"u"||!("prototype"in o))return o;var b=o.__bindData__;if(typeof b>"u"&&(support.funcNames&&(b=!o.name),b=b||!support.funcDecomp,!b)){var _e=fnToString.call(o);support.funcNames||(b=!reFuncName.test(_e)),b||(b=reThis.test(_e),setBindData(o,b))}if(b===!1||b!==!0&&b[1]&1)return o;switch(a){case 1:return function(bt){return o.call(s,bt)};case 2:return function(bt,rn){return o.call(s,bt,rn)};case 3:return function(bt,rn,sn){return o.call(s,bt,rn,sn)};case 4:return function(bt,rn,sn,yn){return o.call(s,bt,rn,sn,yn)}}return bind(o,s)}var lodash__basecreatecallback=baseCreateCallback$2,baseCreateCallback$1=lodash__basecreatecallback,keys$1=lodash_keys,objectTypes=lodash__objecttypes,forOwn$1=function(o,s,a){var b,_e=o,bt=_e;if(!_e||!objectTypes[typeof _e])return bt;s=s&&typeof a>"u"?s:baseCreateCallback$1(s,a,3);for(var rn=-1,sn=objectTypes[typeof _e]&&keys$1(_e),yn=sn?sn.length:0;++rn<yn;)if(b=sn[rn],s(_e[b],b,o)===!1)return bt;return bt},lodash_forown=forOwn$1,baseCreateCallback=lodash__basecreatecallback,forOwn=lodash_forown;function forEach(o,s,a){var b=-1,_e=o?o.length:0;if(s=s&&typeof a>"u"?s:baseCreateCallback(s,a,3),typeof _e=="number")for(;++b<_e&&s(o[b],b,o)!==!1;);else forOwn(o,s);return o}var lodash_foreach=forEach,metric$b,imperial$9;metric$b={mm:{name:{singular:"Millimeter",plural:"Millimeters"},to_anchor:1/1e3},cm:{name:{singular:"Centimeter",plural:"Centimeters"},to_anchor:1/100},m:{name:{singular:"Meter",plural:"Meters"},to_anchor:1},km:{name:{singular:"Kilometer",plural:"Kilometers"},to_anchor:1e3}};imperial$9={in:{name:{singular:"Inch",plural:"Inches"},to_anchor:1/12},yd:{name:{singular:"Yard",plural:"Yards"},to_anchor:3},"ft-us":{name:{singular:"US Survey Foot",plural:"US Survey Feet"},to_anchor:1.000002},ft:{name:{singular:"Foot",plural:"Feet"},to_anchor:1},mi:{name:{singular:"Mile",plural:"Miles"},to_anchor:5280}};var length={metric:metric$b,imperial:imperial$9,_anchors:{metric:{unit:"m",ratio:3.28084},imperial:{unit:"ft",ratio:1/3.28084}}},metric$a,imperial$8;metric$a={mm2:{name:{singular:"Square Millimeter",plural:"Square Millimeters"},to_anchor:1/1e6},cm2:{name:{singular:"Centimeter",plural:"Centimeters"},to_anchor:1/1e4},m2:{name:{singular:"Square Meter",plural:"Square Meters"},to_anchor:1},ha:{name:{singular:"Hectare",plural:"Hectares"},to_anchor:1e4},km2:{name:{singular:"Square Kilometer",plural:"Square Kilometers"},to_anchor:1e6}};imperial$8={in2:{name:{singular:"Square Inch",plural:"Square Inches"},to_anchor:1/144},yd2:{name:{singular:"Square Yard",plural:"Square Yards"},to_anchor:9},ft2:{name:{singular:"Square Foot",plural:"Square Feet"},to_anchor:1},ac:{name:{singular:"Acre",plural:"Acres"},to_anchor:43560},mi2:{name:{singular:"Square Mile",plural:"Square Miles"},to_anchor:27878400}};var area={metric:metric$a,imperial:imperial$8,_anchors:{metric:{unit:"m2",ratio:10.7639},imperial:{unit:"ft2",ratio:1/10.7639}}},metric$9,imperial$7;metric$9={mcg:{name:{singular:"Microgram",plural:"Micrograms"},to_anchor:1/1e6},mg:{name:{singular:"Milligram",plural:"Milligrams"},to_anchor:1/1e3},g:{name:{singular:"Gram",plural:"Grams"},to_anchor:1},kg:{name:{singular:"Kilogram",plural:"Kilograms"},to_anchor:1e3},mt:{name:{singular:"Metric Tonne",plural:"Metric Tonnes"},to_anchor:1e6}};imperial$7={oz:{name:{singular:"Ounce",plural:"Ounces"},to_anchor:1/16},lb:{name:{singular:"Pound",plural:"Pounds"},to_anchor:1},t:{name:{singular:"Ton",plural:"Tons"},to_anchor:2e3}};var mass={metric:metric$9,imperial:imperial$7,_anchors:{metric:{unit:"g",ratio:1/453.592},imperial:{unit:"lb",ratio:453.592}}},metric$8,imperial$6;metric$8={mm3:{name:{singular:"Cubic Millimeter",plural:"Cubic Millimeters"},to_anchor:1/1e6},cm3:{name:{singular:"Cubic Centimeter",plural:"Cubic Centimeters"},to_anchor:1/1e3},ml:{name:{singular:"Millilitre",plural:"Millilitres"},to_anchor:1/1e3},cl:{name:{singular:"Centilitre",plural:"Centilitres"},to_anchor:1/100},dl:{name:{singular:"Decilitre",plural:"Decilitres"},to_anchor:1/10},l:{name:{singular:"Litre",plural:"Litres"},to_anchor:1},kl:{name:{singular:"Kilolitre",plural:"Kilolitres"},to_anchor:1e3},m3:{name:{singular:"Cubic meter",plural:"Cubic meters"},to_anchor:1e3},km3:{name:{singular:"Cubic kilometer",plural:"Cubic kilometers"},to_anchor:1e12},krm:{name:{singular:"Matsked",plural:"Matskedar"},to_anchor:1/1e3},tsk:{name:{singular:"Tesked",plural:"Teskedar"},to_anchor:5/1e3},msk:{name:{singular:"Matsked",plural:"Matskedar"},to_anchor:15/1e3},kkp:{name:{singular:"Kaffekopp",plural:"Kaffekoppar"},to_anchor:150/1e3},glas:{name:{singular:"Glas",plural:"Glas"},to_anchor:200/1e3},kanna:{name:{singular:"Kanna",plural:"Kannor"},to_anchor:2.617}};imperial$6={tsp:{name:{singular:"Teaspoon",plural:"Teaspoons"},to_anchor:1/6},Tbs:{name:{singular:"Tablespoon",plural:"Tablespoons"},to_anchor:1/2},in3:{name:{singular:"Cubic inch",plural:"Cubic inches"},to_anchor:.55411},"fl-oz":{name:{singular:"Fluid Ounce",plural:"Fluid Ounces"},to_anchor:1},cup:{name:{singular:"Cup",plural:"Cups"},to_anchor:8},pnt:{name:{singular:"Pint",plural:"Pints"},to_anchor:16},qt:{name:{singular:"Quart",plural:"Quarts"},to_anchor:32},gal:{name:{singular:"Gallon",plural:"Gallons"},to_anchor:128},ft3:{name:{singular:"Cubic foot",plural:"Cubic feet"},to_anchor:957.506},yd3:{name:{singular:"Cubic yard",plural:"Cubic yards"},to_anchor:25852.7}};var volume={metric:metric$8,imperial:imperial$6,_anchors:{metric:{unit:"l",ratio:33.8140226},imperial:{unit:"fl-oz",ratio:1/33.8140226}}},metric$7;metric$7={ea:{name:{singular:"Each",plural:"Each"},to_anchor:1},dz:{name:{singular:"Dozen",plural:"Dozens"},to_anchor:12}};var each$1={metric:metric$7,imperial:{},_anchors:{metric:{unit:"ea",ratio:1}}},metric$6,imperial$5;metric$6={C:{name:{singular:"degree Celsius",plural:"degrees Celsius"},to_anchor:1,anchor_shift:0},K:{name:{singular:"degree Kelvin",plural:"degrees Kelvin"},to_anchor:1,anchor_shift:273.15}};imperial$5={F:{name:{singular:"degree Fahrenheit",plural:"degrees Fahrenheit"},to_anchor:1},R:{name:{singular:"degree Rankine",plural:"degrees Rankine"},to_anchor:1,anchor_shift:459.67}};var temperature={metric:metric$6,imperial:imperial$5,_anchors:{metric:{unit:"C",transform:function(o){return o/(5/9)+32}},imperial:{unit:"F",transform:function(o){return(o-32)*(5/9)}}}},time,daysInYear=365.25;time={ns:{name:{singular:"Nanosecond",plural:"Nanoseconds"},to_anchor:1/1e9},mu:{name:{singular:"Microsecond",plural:"Microseconds"},to_anchor:1/1e6},ms:{name:{singular:"Millisecond",plural:"Milliseconds"},to_anchor:1/1e3},s:{name:{singular:"Second",plural:"Seconds"},to_anchor:1},min:{name:{singular:"Minute",plural:"Minutes"},to_anchor:60},h:{name:{singular:"Hour",plural:"Hours"},to_anchor:60*60},d:{name:{singular:"Day",plural:"Days"},to_anchor:60*60*24},week:{name:{singular:"Week",plural:"Weeks"},to_anchor:60*60*24*7},month:{name:{singular:"Month",plural:"Months"},to_anchor:60*60*24*daysInYear/12},year:{name:{singular:"Year",plural:"Years"},to_anchor:60*60*24*daysInYear}};var time_1={metric:time,_anchors:{metric:{unit:"s",ratio:1}}},bits,bytes;bits={b:{name:{singular:"Bit",plural:"Bits"},to_anchor:1},Kb:{name:{singular:"Kilobit",plural:"Kilobits"},to_anchor:1024},Mb:{name:{singular:"Megabit",plural:"Megabits"},to_anchor:1048576},Gb:{name:{singular:"Gigabit",plural:"Gigabits"},to_anchor:1073741824},Tb:{name:{singular:"Terabit",plural:"Terabits"},to_anchor:1099511627776}};bytes={B:{name:{singular:"Byte",plural:"Bytes"},to_anchor:1},KB:{name:{singular:"Kilobyte",plural:"Kilobytes"},to_anchor:1024},MB:{name:{singular:"Megabyte",plural:"Megabytes"},to_anchor:1048576},GB:{name:{singular:"Gigabyte",plural:"Gigabytes"},to_anchor:1073741824},TB:{name:{singular:"Terabyte",plural:"Terabytes"},to_anchor:1099511627776}};var digital={bits,bytes,_anchors:{bits:{unit:"b",ratio:1/8},bytes:{unit:"B",ratio:8}}},metric$5;metric$5={ppm:{name:{singular:"Part-per Million",plural:"Parts-per Million"},to_anchor:1},ppb:{name:{singular:"Part-per Billion",plural:"Parts-per Billion"},to_anchor:.001},ppt:{name:{singular:"Part-per Trillion",plural:"Parts-per Trillion"},to_anchor:1e-6},ppq:{name:{singular:"Part-per Quadrillion",plural:"Parts-per Quadrillion"},to_anchor:1e-9}};var partsPer={metric:metric$5,imperial:{},_anchors:{metric:{unit:"ppm",ratio:1e-6}}},metric$4,imperial$4;metric$4={"m/s":{name:{singular:"Metre per second",plural:"Metres per second"},to_anchor:3.6},"km/h":{name:{singular:"Kilometre per hour",plural:"Kilometres per hour"},to_anchor:1}};imperial$4={"m/h":{name:{singular:"Mile per hour",plural:"Miles per hour"},to_anchor:1},knot:{name:{singular:"Knot",plural:"Knots"},to_anchor:1.150779},"ft/s":{name:{singular:"Foot per second",plural:"Feet per second"},to_anchor:.681818}};var speed={metric:metric$4,imperial:imperial$4,_anchors:{metric:{unit:"km/h",ratio:1/1.609344},imperial:{unit:"m/h",ratio:1.609344}}},metric$3,imperial$3;metric$3={"min/km":{name:{singular:"Minute per kilometre",plural:"Minutes per kilometre"},to_anchor:.06},"s/m":{name:{singular:"Second per metre",plural:"Seconds per metre"},to_anchor:1}};imperial$3={"min/mi":{name:{singular:"Minute per mile",plural:"Minutes per mile"},to_anchor:.0113636},"s/ft":{name:{singular:"Second per foot",plural:"Seconds per foot"},to_anchor:1}};var pace={metric:metric$3,imperial:imperial$3,_anchors:{metric:{unit:"s/m",ratio:.3048},imperial:{unit:"s/ft",ratio:1/.3048}}},metric$2,imperial$2;metric$2={Pa:{name:{singular:"pascal",plural:"pascals"},to_anchor:1/1e3},kPa:{name:{singular:"kilopascal",plural:"kilopascals"},to_anchor:1},MPa:{name:{singular:"megapascal",plural:"megapascals"},to_anchor:1e3},hPa:{name:{singular:"hectopascal",plural:"hectopascals"},to_anchor:1/10},bar:{name:{singular:"bar",plural:"bar"},to_anchor:100},torr:{name:{singular:"torr",plural:"torr"},to_anchor:101325/76e4}};imperial$2={psi:{name:{singular:"pound per square inch",plural:"pounds per square inch"},to_anchor:1/1e3},ksi:{name:{singular:"kilopound per square inch",plural:"kilopound per square inch"},to_anchor:1}};var pressure={metric:metric$2,imperial:imperial$2,_anchors:{metric:{unit:"kPa",ratio:.00014503768078},imperial:{unit:"psi",ratio:1/.00014503768078}}},current;current={A:{name:{singular:"Ampere",plural:"Amperes"},to_anchor:1},mA:{name:{singular:"Milliampere",plural:"Milliamperes"},to_anchor:.001},kA:{name:{singular:"Kiloampere",plural:"Kiloamperes"},to_anchor:1e3}};var current_1={metric:current,_anchors:{metric:{unit:"A",ratio:1}}},voltage;voltage={V:{name:{singular:"Volt",plural:"Volts"},to_anchor:1},mV:{name:{singular:"Millivolt",plural:"Millivolts"},to_anchor:.001},kV:{name:{singular:"Kilovolt",plural:"Kilovolts"},to_anchor:1e3}};var voltage_1={metric:voltage,_anchors:{metric:{unit:"V",ratio:1}}},power;power={W:{name:{singular:"Watt",plural:"Watts"},to_anchor:1},mW:{name:{singular:"Milliwatt",plural:"Milliwatts"},to_anchor:.001},kW:{name:{singular:"Kilowatt",plural:"Kilowatts"},to_anchor:1e3},MW:{name:{singular:"Megawatt",plural:"Megawatts"},to_anchor:1e6},GW:{name:{singular:"Gigawatt",plural:"Gigawatts"},to_anchor:1e9}};var power_1={metric:power,_anchors:{metric:{unit:"W",ratio:1}}},reactivePower;reactivePower={VAR:{name:{singular:"Volt-Ampere Reactive",plural:"Volt-Amperes Reactive"},to_anchor:1},mVAR:{name:{singular:"Millivolt-Ampere Reactive",plural:"Millivolt-Amperes Reactive"},to_anchor:.001},kVAR:{name:{singular:"Kilovolt-Ampere Reactive",plural:"Kilovolt-Amperes Reactive"},to_anchor:1e3},MVAR:{name:{singular:"Megavolt-Ampere Reactive",plural:"Megavolt-Amperes Reactive"},to_anchor:1e6},GVAR:{name:{singular:"Gigavolt-Ampere Reactive",plural:"Gigavolt-Amperes Reactive"},to_anchor:1e9}};var reactivePower_1={metric:reactivePower,_anchors:{metric:{unit:"VAR",ratio:1}}},apparentPower;apparentPower={VA:{name:{singular:"Volt-Ampere",plural:"Volt-Amperes"},to_anchor:1},mVA:{name:{singular:"Millivolt-Ampere",plural:"Millivolt-Amperes"},to_anchor:.001},kVA:{name:{singular:"Kilovolt-Ampere",plural:"Kilovolt-Amperes"},to_anchor:1e3},MVA:{name:{singular:"Megavolt-Ampere",plural:"Megavolt-Amperes"},to_anchor:1e6},GVA:{name:{singular:"Gigavolt-Ampere",plural:"Gigavolt-Amperes"},to_anchor:1e9}};var apparentPower_1={metric:apparentPower,_anchors:{metric:{unit:"VA",ratio:1}}},energy;energy={Wh:{name:{singular:"Watt-hour",plural:"Watt-hours"},to_anchor:3600},mWh:{name:{singular:"Milliwatt-hour",plural:"Milliwatt-hours"},to_anchor:3.6},kWh:{name:{singular:"Kilowatt-hour",plural:"Kilowatt-hours"},to_anchor:36e5},MWh:{name:{singular:"Megawatt-hour",plural:"Megawatt-hours"},to_anchor:36e8},GWh:{name:{singular:"Gigawatt-hour",plural:"Gigawatt-hours"},to_anchor:36e11},J:{name:{singular:"Joule",plural:"Joules"},to_anchor:1},kJ:{name:{singular:"Kilojoule",plural:"Kilojoules"},to_anchor:1e3}};var energy_1={metric:energy,_anchors:{metric:{unit:"J",ratio:1}}},reactiveEnergy;reactiveEnergy={VARh:{name:{singular:"Volt-Ampere Reactive Hour",plural:"Volt-Amperes Reactive Hour"},to_anchor:1},mVARh:{name:{singular:"Millivolt-Ampere Reactive Hour",plural:"Millivolt-Amperes Reactive Hour"},to_anchor:.001},kVARh:{name:{singular:"Kilovolt-Ampere Reactive Hour",plural:"Kilovolt-Amperes Reactive Hour"},to_anchor:1e3},MVARh:{name:{singular:"Megavolt-Ampere Reactive Hour",plural:"Megavolt-Amperes Reactive Hour"},to_anchor:1e6},GVARh:{name:{singular:"Gigavolt-Ampere Reactive Hour",plural:"Gigavolt-Amperes Reactive Hour"},to_anchor:1e9}};var reactiveEnergy_1={metric:reactiveEnergy,_anchors:{metric:{unit:"VARh",ratio:1}}},metric$1,imperial$1;metric$1={"mm3/s":{name:{singular:"Cubic Millimeter per second",plural:"Cubic Millimeters per second"},to_anchor:1/1e6},"cm3/s":{name:{singular:"Cubic Centimeter per second",plural:"Cubic Centimeters per second"},to_anchor:1/1e3},"ml/s":{name:{singular:"Millilitre per second",plural:"Millilitres per second"},to_anchor:1/1e3},"cl/s":{name:{singular:"Centilitre per second",plural:"Centilitres per second"},to_anchor:1/100},"dl/s":{name:{singular:"Decilitre per second",plural:"Decilitres per second"},to_anchor:1/10},"l/s":{name:{singular:"Litre per second",plural:"Litres per second"},to_anchor:1},"l/min":{name:{singular:"Litre per minute",plural:"Litres per minute"},to_anchor:1/60},"l/h":{name:{singular:"Litre per hour",plural:"Litres per hour"},to_anchor:1/3600},"kl/s":{name:{singular:"Kilolitre per second",plural:"Kilolitres per second"},to_anchor:1e3},"kl/min":{name:{singular:"Kilolitre per minute",plural:"Kilolitres per minute"},to_anchor:50/3},"kl/h":{name:{singular:"Kilolitre per hour",plural:"Kilolitres per hour"},to_anchor:5/18},"m3/s":{name:{singular:"Cubic meter per second",plural:"Cubic meters per second"},to_anchor:1e3},"m3/min":{name:{singular:"Cubic meter per minute",plural:"Cubic meters per minute"},to_anchor:50/3},"m3/h":{name:{singular:"Cubic meter per hour",plural:"Cubic meters per hour"},to_anchor:5/18},"km3/s":{name:{singular:"Cubic kilometer per second",plural:"Cubic kilometers per second"},to_anchor:1e12}};imperial$1={"tsp/s":{name:{singular:"Teaspoon per second",plural:"Teaspoons per second"},to_anchor:1/6},"Tbs/s":{name:{singular:"Tablespoon per second",plural:"Tablespoons per second"},to_anchor:1/2},"in3/s":{name:{singular:"Cubic inch per second",plural:"Cubic inches per second"},to_anchor:.55411},"in3/min":{name:{singular:"Cubic inch per minute",plural:"Cubic inches per minute"},to_anchor:.55411/60},"in3/h":{name:{singular:"Cubic inch per hour",plural:"Cubic inches per hour"},to_anchor:.55411/3600},"fl-oz/s":{name:{singular:"Fluid Ounce per second",plural:"Fluid Ounces per second"},to_anchor:1},"fl-oz/min":{name:{singular:"Fluid Ounce per minute",plural:"Fluid Ounces per minute"},to_anchor:1/60},"fl-oz/h":{name:{singular:"Fluid Ounce per hour",plural:"Fluid Ounces per hour"},to_anchor:1/3600},"cup/s":{name:{singular:"Cup per second",plural:"Cups per second"},to_anchor:8},"pnt/s":{name:{singular:"Pint per second",plural:"Pints per second"},to_anchor:16},"pnt/min":{name:{singular:"Pint per minute",plural:"Pints per minute"},to_anchor:4/15},"pnt/h":{name:{singular:"Pint per hour",plural:"Pints per hour"},to_anchor:1/225},"qt/s":{name:{singular:"Quart per second",plural:"Quarts per second"},to_anchor:32},"gal/s":{name:{singular:"Gallon per second",plural:"Gallons per second"},to_anchor:128},"gal/min":{name:{singular:"Gallon per minute",plural:"Gallons per minute"},to_anchor:32/15},"gal/h":{name:{singular:"Gallon per hour",plural:"Gallons per hour"},to_anchor:8/225},"ft3/s":{name:{singular:"Cubic foot per second",plural:"Cubic feet per second"},to_anchor:957.506},"ft3/min":{name:{singular:"Cubic foot per minute",plural:"Cubic feet per minute"},to_anchor:957.506/60},"ft3/h":{name:{singular:"Cubic foot per hour",plural:"Cubic feet per hour"},to_anchor:957.506/3600},"yd3/s":{name:{singular:"Cubic yard per second",plural:"Cubic yards per second"},to_anchor:25852.7},"yd3/min":{name:{singular:"Cubic yard per minute",plural:"Cubic yards per minute"},to_anchor:25852.7/60},"yd3/h":{name:{singular:"Cubic yard per hour",plural:"Cubic yards per hour"},to_anchor:25852.7/3600}};var volumeFlowRate={metric:metric$1,imperial:imperial$1,_anchors:{metric:{unit:"l/s",ratio:33.8140227},imperial:{unit:"fl-oz/s",ratio:1/33.8140227}}},metric,imperial;metric={lx:{name:{singular:"Lux",plural:"Lux"},to_anchor:1}};imperial={"ft-cd":{name:{singular:"Foot-candle",plural:"Foot-candles"},to_anchor:1}};var illuminance={metric,imperial,_anchors:{metric:{unit:"lx",ratio:1/10.76391},imperial:{unit:"ft-cd",ratio:10.76391}}},frequency;frequency={mHz:{name:{singular:"millihertz",plural:"millihertz"},to_anchor:1/1e3},Hz:{name:{singular:"hertz",plural:"hertz"},to_anchor:1},kHz:{name:{singular:"kilohertz",plural:"kilohertz"},to_anchor:1e3},MHz:{name:{singular:"megahertz",plural:"megahertz"},to_anchor:1e3*1e3},GHz:{name:{singular:"gigahertz",plural:"gigahertz"},to_anchor:1e3*1e3*1e3},THz:{name:{singular:"terahertz",plural:"terahertz"},to_anchor:1e3*1e3*1e3*1e3},rpm:{name:{singular:"rotation per minute",plural:"rotations per minute"},to_anchor:1/60},"deg/s":{name:{singular:"degree per second",plural:"degrees per second"},to_anchor:1/360},"rad/s":{name:{singular:"radian per second",plural:"radians per second"},to_anchor:1/(Math.PI*2)}};var frequency_1={metric:frequency,_anchors:{frequency:{unit:"hz",ratio:1}}},angle;angle={rad:{name:{singular:"radian",plural:"radians"},to_anchor:180/Math.PI},deg:{name:{singular:"degree",plural:"degrees"},to_anchor:1},grad:{name:{singular:"gradian",plural:"gradians"},to_anchor:9/10},arcmin:{name:{singular:"arcminute",plural:"arcminutes"},to_anchor:1/60},arcsec:{name:{singular:"arcsecond",plural:"arcseconds"},to_anchor:1/3600}};var angle_1={metric:angle,_anchors:{metric:{unit:"deg",ratio:1}}},convert,keys=lodash_keys,each=lodash_foreach,measures={length,area,mass,volume,each:each$1,temperature,time:time_1,digital,partsPer,speed,pace,pressure,current:current_1,voltage:voltage_1,power:power_1,reactivePower:reactivePower_1,apparentPower:apparentPower_1,energy:energy_1,reactiveEnergy:reactiveEnergy_1,volumeFlowRate,illuminance,frequency:frequency_1,angle:angle_1},Converter;Converter=function(o,s){s?this.val=o/s:this.val=o};Converter.prototype.from=function(o){if(this.destination)throw new Error(".from must be called before .to");return this.origin=this.getUnit(o),this.origin||this.throwUnsupportedUnitError(o),this};Converter.prototype.to=function(o){if(!this.origin)throw new Error(".to must be called after .from");this.destination=this.getUnit(o);var s,a;if(this.destination||this.throwUnsupportedUnitError(o),this.origin.abbr===this.destination.abbr)return this.val;if(this.destination.measure!=this.origin.measure)throw new Error("Cannot convert incompatible measures of "+this.destination.measure+" and "+this.origin.measure);return s=this.val*this.origin.unit.to_anchor,this.origin.unit.anchor_shift&&(s-=this.origin.unit.anchor_shift),this.origin.system!=this.destination.system&&(a=measures[this.origin.measure]._anchors[this.origin.system].transform,typeof a=="function"?s=a(s):s*=measures[this.origin.measure]._anchors[this.origin.system].ratio),this.destination.unit.anchor_shift&&(s+=this.destination.unit.anchor_shift),s/this.destination.unit.to_anchor};Converter.prototype.toBest=function(s){if(!this.origin)throw new Error(".toBest must be called after .from");var s=Object.assign({exclude:[],cutOffNumber:1},s),a;return each(this.possibilities(),function(b){var _e=this.describe(b),bt=s.exclude.indexOf(b)===-1;if(bt&&_e.system===this.origin.system){var rn=this.to(b);(!a||rn>=s.cutOffNumber&&rn<a.val)&&(a={val:rn,unit:b,singular:_e.singular,plural:_e.plural})}}.bind(this)),a};Converter.prototype.getUnit=function(o){var s;return each(measures,function(a,b){if(each(a,function(_e,bt){if(bt=="_anchors"||(each(_e,function(rn,sn){if(sn==o)return s={abbr:o,measure:b,system:bt,unit:rn},!1}),s))return!1}),s)return!1}),s};var describe=function(o){return{abbr:o.abbr,measure:o.measure,system:o.system,singular:o.unit.name.singular,plural:o.unit.name.plural}};Converter.prototype.describe=function(o){var s=Converter.prototype.getUnit(o),a=null;try{a=describe(s)}catch{this.throwUnsupportedUnitError(o)}return a};Converter.prototype.list=function(o){var s=[];return each(measures,function(a,b){o&&o!==b||each(a,function(_e,bt){if(bt=="_anchors")return!1;each(_e,function(rn,sn){s=s.concat(describe({abbr:sn,measure:b,system:bt,unit:rn}))})})}),s};Converter.prototype.throwUnsupportedUnitError=function(o){var s=[];throw each(measures,function(a,b){each(a,function(_e,bt){if(bt=="_anchors")return!1;s=s.concat(keys(_e))})}),new Error("Unsupported unit "+o+", use one of: "+s.join(", "))};Converter.prototype.possibilities=function(o){var s=[];return!this.origin&&!o?each(keys(measures),function(a){each(measures[a],function(b,_e){if(_e=="_anchors")return!1;s=s.concat(keys(b))})}):(o=o||this.origin.measure,each(measures[o],function(a,b){if(b=="_anchors")return!1;s=s.concat(keys(a))})),s};Converter.prototype.measures=function(){return keys(measures)};convert=function(o){return new Converter(o)};var lib=convert;const convert$1=getDefaultExportFromCjs(lib),DimensionsManager=()=>{const o=itemStore(hr=>hr.itemsSpawned),s=coreSceneStore(hr=>hr.showDimensions),a=coreSceneStore(hr=>hr.sceneSettings),b=coreSceneStore(hr=>hr.boundData),_e=coreSceneStore(hr=>hr.sceneSettings.sceneScaleUnit),bt=coreSceneStore(hr=>hr.sceneSettings.sceneScaleDisplayUnit),[rn,sn]=reactExports.useState(.2),[yn,Pn]=reactExports.useState("#000000"),[zn,lr]=reactExports.useState(.01),ar=reactExports.useRef(null);reactExports.useRef(null);const cr=reactExports.useRef(0);return reactExports.useEffect(()=>{if(a==null)return;const hr=a.dimensionColor,es=rgbToHex(hr.r,hr.g,hr.b);Pn(es)},[a]),reactExports.useEffect(()=>{if(a==null)return;const hr=a.dimensionColor,es=rgbToHex(hr.r,hr.g,hr.b);Pn(es)},[a]),reactExports.useEffect(()=>{if(!b||!b.size)return;let hr=b.size.x;hr>b.size.z&&(hr=b.size.z);let es=hr/20;lr(es<.005?es:.005),sn(hr<.2?hr:.2)},[b]),reactExports.useEffect(()=>{cr.current=0},[s]),useFrame(()=>{ar.current!==null&&cr.current<1&&(cr.current+=.05,ar.current.scale.x=cr.current,ar.current.scale.y=cr.current,ar.current.scale.z=cr.current)}),s===!0&&jsxRuntimeExports.jsx("group",{ref:ar,children:b!==null&&b.size.x!==0&&b.size.y!==0&&b.size.z!==0&&Object.keys(o).length>0&&jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsxs(RoundedBox,{position:[b.center.x,b.center.y-b.size.y/2,b.center.z+b.size.z/2+rn],rotation:[0,0,degToRad(90)],scale:[zn,b.size.x,zn],visible:!0,children:[jsxRuntimeExports.jsx(RoundedBox,{position:[0,.5,0],scale:[1,zn,7],visible:!0,children:jsxRuntimeExports.jsx("meshBasicMaterial",{color:yn})}),jsxRuntimeExports.jsx(RoundedBox,{position:[0,-.5,0],scale:[1,zn,7],visible:!0,children:jsxRuntimeExports.jsx("meshBasicMaterial",{color:yn})}),jsxRuntimeExports.jsx("meshBasicMaterial",{color:yn}),jsxRuntimeExports.jsxs(Html,{center:!0,className:"dimensionsText ignore",style:{opacity:"1"},zIndexRange:[29,0],children:[convert$1(b.size.x).from("m").to(_e).toFixed(a.measurementPrecision),bt??_e]})]}),jsxRuntimeExports.jsxs(RoundedBox,{position:[b.center.x-b.size.x/2-rn,b.center.y,b.center.z+b.size.z/2+rn],rotation:[0,0,0],scale:[zn,b.size.y,zn],visible:!0,children:[jsxRuntimeExports.jsx(RoundedBox,{position:[0,.5,0],scale:[1,zn,7],visible:!0,children:jsxRuntimeExports.jsx("meshBasicMaterial",{color:yn})}),jsxRuntimeExports.jsx(RoundedBox,{position:[0,-.5,0],scale:[1,zn,7],visible:!0,children:jsxRuntimeExports.jsx("meshBasicMaterial",{color:yn})}),jsxRuntimeExports.jsx("meshBasicMaterial",{color:yn}),jsxRuntimeExports.jsxs(Html,{center:!0,className:"dimensionsText ignore",style:{opacity:"1"},zIndexRange:[29,0],children:[convert$1(b.size.y).from("m").to(_e).toFixed(a.measurementPrecision),bt??_e]})]}),jsxRuntimeExports.jsxs(RoundedBox,{position:[b.center.x+b.size.x/2+rn,b.center.y-b.size.y/2,b.center.z],rotation:[degToRad(90),0,0],scale:[zn,b.size.z,zn],visible:!0,children:[jsxRuntimeExports.jsx(RoundedBox,{position:[0,.5,0],scale:[7,zn,1],visible:!0,children:jsxRuntimeExports.jsx("meshBasicMaterial",{color:yn})}),jsxRuntimeExports.jsx(RoundedBox,{position:[0,-.5,0],scale:[7,zn,1],visible:!0,children:jsxRuntimeExports.jsx("meshBasicMaterial",{color:yn})}),jsxRuntimeExports.jsx("meshBasicMaterial",{color:yn}),jsxRuntimeExports.jsxs(Html,{center:!0,className:"dimensionsText ignore",style:{opacity:"1"},zIndexRange:[29,0],children:[convert$1(b.size.z).from("m").to(_e).toFixed(a.measurementPrecision),bt??_e]})]})]})})},BaseScene=({...o})=>jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx(HotspotManager,{}),jsxRuntimeExports.jsx(DimensionsManager,{}),jsxRuntimeExports.jsxs(Selection,{children:[jsxRuntimeExports.jsx(ItemManager,{}),jsxRuntimeExports.jsx(EffectsComposer,{})]})]}),CameraManager=()=>{const o=reactExports.useRef(null),s=itemStore(hr=>hr.itemsSpawned),a=hotspotStore$1(hr=>hr.isAnyHotspotActive),b=cameraStore(hr=>hr.cameraSettings),_e=cameraStore(hr=>hr.disableAutoRotate),bt=coreSceneStore(hr=>hr.autoFocusTrigger),rn=coreSceneStore(hr=>hr.dragging),sn=cameraStore(hr=>hr.sendCameraDetailsTrigger),yn=cameraStore(hr=>hr.focusPointPosition),Pn=cameraStore(hr=>hr.viewPointPosition),{raycaster:zn,camera:lr}=useThree(),ar=ghostStore(hr=>hr.ghostsTransform),cr=()=>{if(o.current===null)return;const es=1/o.current._lastZoom,Ur=cameraStore.getState().boundsMargin,Dr=coreSceneStore.getState().autoFocusRef;let zr=new Box3;Dr?zr.setFromObject(Dr):coreSceneStore.getState().sceneRef.traverse(as=>{as.autoFocusEnabled&&zr.expandByObject(as)}),Dr||coreSceneStore.setState({bbox:zr});const rs=new Vector3;if(zr.getSize(rs),rs.x>0){const as=new Vector3;zr.getCenter(as);const os=new Vector3(zr.max.x,zr.max.y,zr.max.z);os.sub(zr.min),coreSceneStore.setState({boundData:{center:as,size:os}}),o.current.setBoundary(zr);const ls=new Box3(zr.min,zr.max);ls.min=new Vector3((ls.min.x-Ur/2)*es,(ls.min.y-Ur/2)*es,(ls.min.z-Ur/2)*es),ls.max=new Vector3((ls.max.x+Ur/2)*es,(ls.max.y+Ur/2)*es,(ls.max.z+Ur/2)*es);const zs=ls.getBoundingSphere(new Sphere(as));zs.radius>0&&o.current.fitToSphere(zs,!0)}else{const as=new Vector3(0,0,0),os=new Vector3(0,0,0);coreSceneStore.setState({boundData:{center:as,size:os}})}o.current.zoomTo(1,!0)};return reactExports.useEffect(()=>{cr()},[bt,Object.keys(s).length]),reactExports.useEffect(()=>{CORE_API!=null&&(coreSceneStore.getState().sceneSettings.focusCameraOnGhosts===!0?CORE_API.focusOnGhosts():CORE_API.refocus())},[ar]),reactExports.useEffect(()=>{const hr=cameraStore.getState().savedState,es=cameraStore.getState().resetToLastPosition;if(a===!1){hr===!0&&(es===!0?o.current.reset(!0):cameraStore.setState({resetToLastPosition:!0}),cameraStore.setState({savedState:!1}));return}hr===!1&&es===!0&&(o.current.saveState(),cameraStore.setState({savedState:!0})),o.current.setLookAt(Pn.x,Pn.y,Pn.z,yn.x,yn.y,yn.z,!0)},[a,Pn,yn]),reactExports.useEffect(()=>{CORE_API.fireEvent(CORE_API.EVENTS.CONFIGURATION.CameraDetails_Update,lr)},[sn]),useFrame(hr=>{b.canAutoRotate===!1||o.current===null||_e===!1&&a===!1&&(o.current.azimuthAngle+=20*hr*MathUtils.DEG2RAD*b.autoRotateSpeed)}),reactExports.useEffect(()=>{o.current!==null&&(b.canZoom===!0&&rn===!1?(o.current.mouseButtons.wheel=CAMERA_ACTION.ZOOM,o.current.mouseButtons.middle=CAMERA_ACTION.ZOOM):(o.current.mouseButtons.wheel=CAMERA_ACTION.NONE,o.current.mouseButtons.middle=CAMERA_ACTION.NONE),b.canPan===!0&&rn===!1?(o.current.mouseButtons.right=CAMERA_ACTION.OFFSET,b.canZoom===!0&&rn===!1?(o.current.touches.two=CAMERA_ACTION.TOUCH_ZOOM_OFFSET,o.current.touches.three=CAMERA_ACTION.TOUCH_ZOOM_OFFSET):(o.current.touches.two=CAMERA_ACTION.TOUCH_OFFSET,o.current.touches.three=CAMERA_ACTION.TOUCH_OFFSET)):(o.current.mouseButtons.right=CAMERA_ACTION.NONE,b.canZoom===!0&&rn===!1?(o.current.touches.two=CAMERA_ACTION.TOUCH_ZOOM,o.current.touches.three=CAMERA_ACTION.TOUCH_ZOOM):(o.current.touches.two=CAMERA_ACTION.NONE,o.current.touches.three=CAMERA_ACTION.NONE)))},[o,b,rn]),reactExports.useEffect(()=>{if(o.current===null)return;lr.fov=b.fov,lr.updateProjectionMatrix();const hr=()=>{o.current.removeEventListener("rest",hr),cameraStore.setState({userDragging:!1,disableAutoRotate:!1})};o.current.addEventListener("controlstart",()=>{hotspotStore$1.getState().isAnyHotspotActive&&hotspotStore$1.getState().actions.exitHotspot(),o.current.removeEventListener("rest",hr),cameraStore.setState({userDragging:!0,disableAutoRotate:!0})}),o.current.addEventListener("controlend",()=>{o.current.active?o.current.addEventListener("rest",hr):hr()}),o.current.addEventListener("transitionstart",()=>{cameraStore.getState().userDragging!==!0&&(cameraStore.setState({disableAutoRotate:!0}),o.current.addEventListener("rest",hr))})},[o]),reactExports.useEffect(()=>{o.current&&(zn.layers.enable(GHOST_LAYER),lr.layers.enable(GHOST_LAYER),cameraStore.setState({cameraControlsRef:o.current}))},[o]),jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:jsxRuntimeExports.jsx(CameraControls,{ref:o,makeDefault:!0,dollySpeed:b.dollySpeed,truckSpeed:b.truckSpeed,minZoom:b.minZoom,maxZoom:b.maxZoom,minPolarAngle:a?-Math.PI:degToRad(b.minPolarAngle),maxPolarAngle:a?Math.PI:degToRad(b.maxPolarAngle)})})},Root=()=>{const o=useThree(s=>s.gl);return reactExports.useEffect(()=>{coreSceneStore.setState({glContext:o})},[]),jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsx(BaseScene,{}),jsxRuntimeExports.jsx(CameraManager,{}),jsxRuntimeExports.jsx(LightManager,{})]})},Alert=({handleCloseAlert:o,alertData:s})=>{const a=reactExports.useRef(null),b=reactExports.useRef(null),_e=reactExports.useRef(null),bt=uiSceneStore(sn=>sn.dialogPopupOpen),rn=()=>{clearTimeout(a.current),_e.current.style="",b.current.style="",o()};return reactExports.useEffect(()=>{if(_e.current===null||b.current===null)return;const sn=s.alertTime?s.alertTime:1e3;_e.current.style="animation: loader "+sn+"ms; animation-timing-function: linear;",b.current.style="animation: loader "+sn+"ms; animation-timing-function: linear;",a.current=setTimeout(rn,sn)},[_e,b,s]),jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[jsxRuntimeExports.jsxs("div",{className:"alert-bg ".concat(ALERT_TYPES[s.alertType].cssClass),children:[jsxRuntimeExports.jsx("div",{className:"alert-icon-bg ".concat(ALERT_TYPES[s.alertType].cssClass),children:jsxRuntimeExports.jsx("img",{src:ALERT_TYPES[s.alertType].src,className:"alert-icon",alt:s.alertType})}),jsxRuntimeExports.jsxs("div",{className:"alert-msg-cross-timer-bg",children:[jsxRuntimeExports.jsxs("div",{className:"alert-msg-cross-bg",children:[jsxRuntimeExports.jsxs("div",{className:"alert-msg-bg",style:s.alertLabel?{}:{display:"flex",alignItems:"center"},children:[s.alertLabel&&jsxRuntimeExports.jsx("p",{className:"alert-label",children:s.alertLabel}),jsxRuntimeExports.jsx("span",{className:"alert-msg",children:s.alertMsg})]}),jsxRuntimeExports.jsx("div",{className:"alert-close-btn-bg",children:jsxRuntimeExports.jsx("img",{tabIndex:bt?-1:0,onClick:rn,className:"alert-cross-btn",alt:"Close Button",role:"button","aria-label":"Close Button",src:PUBLIC_DESIGN_ASSETS_ENDPOINT+"/Icon/X.svg"})})]}),jsxRuntimeExports.jsx("div",{ref:b,className:"alert-timer ".concat(ALERT_TYPES[s.alertType].cssClass)})]})]}),jsxRuntimeExports.jsxs("div",{className:"alert-bg alert-mobile ".concat(ALERT_TYPES[s.alertType].cssClass),children:[jsxRuntimeExports.jsxs("div",{className:"alert-icon-msg-cross-bg",children:[jsxRuntimeExports.jsx("div",{className:"alert-icon-bg ".concat(ALERT_TYPES[s.alertType].cssClass),children:jsxRuntimeExports.jsx("img",{src:ALERT_TYPES[s.alertType].src,className:"alert-icon",alt:s.alertType})}),jsxRuntimeExports.jsxs("div",{className:"alert-msg-bg",children:[s.alertLabel&&jsxRuntimeExports.jsx("p",{className:"alert-label",children:s.alertLabel}),jsxRuntimeExports.jsx("span",{className:"alert-msg",children:s.alertMsg_Mobile?s.alertMsg_Mobile:s.alertMsg})]}),jsxRuntimeExports.jsx("div",{className:"alert-close-btn-bg",children:jsxRuntimeExports.jsx("img",{tabIndex:bt?-1:0,onClick:rn,className:"alert-cross-btn",alt:"Close Button",role:"button","aria-label":"Close Button",src:PUBLIC_DESIGN_ASSETS_ENDPOINT+"/Icon/X.svg"})})]}),jsxRuntimeExports.jsx("div",{ref:_e,className:"alert-timer ".concat(ALERT_TYPES[s.alertType].cssClass)})]})]})},AlertManager=()=>{const o=coreSceneStore(sn=>sn.alertData),s=coreSceneStore(sn=>sn.persistantAlertData),a=coreSceneStore(sn=>sn.currentAlertData),b=sn=>{coreSceneStore.setState({currentAlertData:sn})};reactExports.useEffect(()=>{!o||!o.alertMsg||_e(o)},[o]),reactExports.useEffect(()=>{const sn=coreSceneStore.getState().alertQueue;sn.length<=0||(a===null&&(b(sn[0]),sn[0].persistant===!0&&coreSceneStore.setState({persistantAlertData:sn[0]})),coreSceneStore.getState().actions.popFromAlertQueue())},[a]);const _e=reactExports.useCallback(sn=>{if(coreSceneStore.getState().sceneSettings.disableAlerts===!0)return;let yn=sn.alertType,Pn=sn.alertId;const zn=coreSceneStore.getState().sceneSettings.alertControl;let lr=!1;Object.keys(zn).map(hr=>{hr==Pn&&(lr=!0)}),lr==!1&&(Pn="default");let ar=!1;if(Object.keys(ALERT_TYPES).map(hr=>{hr==yn.toLowerCase()&&(ar=!0)}),ar==!1&&(yn=ALERT_TYPES.info.id,sn.alertType=yn),ALERT_TYPES[sn.alertType].level<coreSceneStore.getState().sceneSettings.alertLevel||coreSceneStore.getState().sceneSettings.alertControl[Pn]!==!0)return;const cr=coreSceneStore.getState().actions.addToAlertQueue(sn);a===null&&cr.length===1&&(b(sn),sn.persistant===!0&&coreSceneStore.setState({persistantAlertData:sn}))},[a]),bt=reactExports.useCallback(()=>{b(s)},[s]),rn=reactExports.useCallback(async()=>{b(null)},[]);return reactExports.useEffect(()=>{async function sn(){await wait(1500);let yn=null,Pn={alertMsg:"Add items by selecting from the panel",alertMsg_Mobile:"Add items by selecting from the panel",alertTime:8e3,alertType:"info",alertLabel:"Get Started"};coreSceneStore.getState().alertSettings&&(coreSceneStore.getState().alertSettings.welcomeMessage&&(yn=coreSceneStore.getState().alertSettings.welcomeMessage),coreSceneStore.getState().alertSettings.instructionMessage&&(Pn=coreSceneStore.getState().alertSettings.instructionMessage)),yn!==null&&_e(yn),_e(Pn)}sn()},[]),jsxRuntimeExports.jsxs("div",{className:"alert-space",children:[a===null&&s&&jsxRuntimeExports.jsx("div",{role:"button","aria-label":"Alert Button",onClick:bt,className:"alert-persistant-btn-bg",style:{background:ALERT_TYPES[s.alertType].background,border:"1px solid "+ALERT_TYPES[s.alertType].color},children:jsxRuntimeExports.jsx("img",{style:{filter:ALERT_TYPES[s.alertType].filter},className:"alert-persistant-btn",alt:s.alertType,src:ALERT_TYPES[s.alertType].src})}),a&&jsxRuntimeExports.jsx(Alert,{handleCloseAlert:rn,alertData:a})]})},FocusManager=()=>{const o=itemStore(a=>a.itemsSpawned),s=uiSceneStore(a=>a.dialogPopupOpen);return jsxRuntimeExports.jsx("div",{id:"focusBtns",children:Object.keys(o).map((a,b)=>jsxRuntimeExports.jsx("div",{children:o[a].itemData.isInteractive&&o[a].itemData.gltfURL&&jsxRuntimeExports.jsx("div",{onFocus:()=>{itemStore.setState({focusedGUID:a})},onBlur:()=>{itemStore.setState({focusedGUID:null})},onClick:()=>{const _e=coreSceneStore.getState().canvasSize,bt=itemStore.getState().itemsSpawned,rn=attachmentStore$1.getState().attachmentSystem.currentStructure.getNodeByGUID(a),sn={primary:{guid:a,name:o[a].itemData.name,data:{...bt[a],overrideVariant:rn.overrideVariant,currentVariant:rn.currentVariant,offsetX:_e.width/2,offsetY:_e.height/2}}};itemStore.getState().actions.setSelectedItemData(sn.primary.data),CORE_API.fireEvent(CORE_API.EVENTS.UI.ContextMenu_Show,sn)},role:"button",id:"focusBtn-"+a,tabIndex:s?-1:0,className:"canvasFocusButton","aria-label":o[a].itemData.name?o[a].itemData.name:o[a].itemData.skuID},"focusBtn-key-"+a)},"focusBtn-single-key-"+a))},"focusBtns")},OverlayUIManager=()=>{const o=coreSceneStore(_e=>_e.canvasTooltipText),s=coreSceneStore(_e=>_e.sceneSettings),a=ghostStore(_e=>_e.ghostData),b=itemStore(_e=>_e.defaultSceneItemCount);return jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment,{children:jsxRuntimeExports.jsxs("div",{children:[jsxRuntimeExports.jsx(AlertManager,{}),jsxRuntimeExports.jsx(FocusManager,{}),CORE_API.getSceneItemCount()<=b&&!a&&jsxRuntimeExports.jsx("div",{style:{fontSize:s.emptySceneTextFontSize},className:"emptySceneBG",children:s.emptySceneText}),jsxRuntimeExports.jsx("div",{className:"canvasTooltip",children:o})]})})};function getPlugAttributesFromObject(o){let s={};if(o.type.toLowerCase()==="object3d"){const a=o.userData;if(a?.isPlug===1){const b=a.name;b&&typeof b=="string"&&(s.name=b);const _e=a.type;_e&&typeof _e=="string"?s.type=_e:s.type="";const bt=a.weight;bt&&typeof bt=="number"?s.weight=bt:s.weight=1;const rn=a.affectedNodes;rn&&typeof rn=="string"?s.affectedNodes=rn.replaceAll(" ","").split(","):s.affectedNodes=[];const sn=a.acceptedPlugTypes;sn&&typeof sn=="string"?s.acceptedPlugTypes=sn.replaceAll(" ","").split(","):s.acceptedPlugTypes=[];const yn=a.connectsToPlugTypes;yn&&typeof yn=="string"?s.connectsToPlugTypes=yn.replaceAll(" ","").split(","):s.connectsToPlugTypes=[];const Pn=a.dependencySku;Pn&&typeof Pn=="string"?s.dependencySku=Pn:s.dependencySku="";const zn=a.isDependencySkuInteractive;Pn!==void 0&&typeof zn=="number"?s.isDependencySkuInteractive=zn:s.isDependencySkuInteractive=1}}return s}async function loadAllDynamicHooks(o){if(!o){LOGGER.info({title:"No hook URL provided"});return}try{const s=resolveAssetUrl(o),a=await __vitePreload(()=>import(s),[]);for(const[b,_e]of Object.entries(a))typeof _e=="function"&&(DynamicHooks[b]!==void 0?(DynamicHooks[b]=_e,LOGGER.info({title:`${b} successfully updated from `+s})):LOGGER.warn({title:`No matching hook found for ${b}`}))}catch(s){LOGGER.error({title:`Error loading dynamic hooks from: ${o}`,details:s})}}async function loadAllProxies(o){const s=assetStore.getState().actions;for(let a=0;a<Object.keys(o).length;a++){const b=Object.keys(o)[a];LOGGER.info({title:"loading proxy: "+b});const _e=performance.now(),bt=await s.loadAsset(b,!0),rn=performance.now();if(LOGGER.info({title:`${b} proxy: ${((rn-_e)/1e3).toFixed(2)} seconds to load.`}),LOGGER.info({title:"loaded proxy: "+b}),LOGGER.info({title:"waitingForAsset",details:bt}),!bt||!bt.proxy.data)continue;const sn=o[b]?.plugs,yn=sn===void 0||Array.isArray(sn)&&sn.length===0;yn===!0&&LOGGER.info({title:`Collecting plugs information for ${b} from the proxy mesh`});let Pn=[];bt.proxy.data.scene.traverse(ar=>{if(yn===!0){const cr=getPlugAttributesFromObject(ar);Object.keys(cr).length>0&&Pn.push(cr)}if(ar.isMesh){ar.layers.set(GHOST_LAYER),ar.material.color=new Color$1(0/255,0/255,0/255);const cr=coreSceneStore.getState().sceneSettings.ghostColor;ar.material.emissive=new Color$1(cr.r/255,cr.g/255,cr.b/255),ar.material.emissiveIntensity=.75,ar.material.alphaTest=cr.a,ar.material.transparent=cr.a<1,ar.material.opacity=cr.a,ar.material.depthTest=!1,ar.material.reflectivity=0,ar.material.metalness=0,ar.material.wireframe=coreSceneStore.getState().sceneSettings.ghostAsWireframe}}),Pn.length>0&&(o[b].plugs=Pn);const{boundingBox:zn,boundingSphere:lr}=computeProxyBoundingBox(bt);if(zn&&lr){const ar=calculateBoundingBoxSize(zn);o[b].boundingBox=zn,o[b].boundingSphereCenter=lr.center,o[b].boundingBoxSize=ar}else o[b].boundingSphereCenter={x:0,y:0,z:0},o[b].boundingBoxSize={x:0,y:0,z:0}}}function calculateBoundingBoxSize(o){return{x:o.max.x-o.min.x,y:o.max.y-o.min.y,z:o.max.z-o.min.z}}function computeProxyBoundingBox(o){const s=o.proxy.data.scene;if(s){let a=null;return s.traverse(b=>{if(b.isMesh){a=b;return}}),a?(a.geometry.boundingBox||a.geometry.computeBoundingBox(),{boundingBox:a.geometry.boundingBox,boundingSphere:a.geometry.boundingSphere}):!1}}const AlertStyles=`.alert-space{position:absolute;width:auto;height:auto;max-width:40%;top:0;margin:1rem}.alert-bg{display:flex;flex-direction:row;border-radius:5.04px}.alert-mobile{display:none}.alert-persistant-btn{width:2rem;height:2rem;margin:4px;filter:invert(100%) brightness(200%)}.alert-persistant-btn-bg{cursor:pointer;display:flex;justify-content:center;align-items:center;border-radius:4px}.alert-persistant-btn-bg:hover{opacity:.9!important}.alert-icon{width:2rem;height:2rem;margin:14px;filter:invert(100%) brightness(200%)}.alert-icon-bg{border-radius:5.04px 0 0 5.04px}.alert-msg-bg{padding:1rem}.alert-label{font-weight:600;font-size:1.125rem;margin:0 0 4px;text-transform:capitalize}.alert-msg{font-size:1rem}.alert-cross-btn{width:1.5rem;cursor:pointer;margin:.5rem}.alert-msg-cross-timer-bg{display:flex;flex-direction:column;justify-content:space-between}.alert-msg-cross-bg{display:flex;flex-direction:row}.alert-timer{width:0%;height:2px;transition:10ms}.alert-bg.alert-info,.alert-bg.alert-mobile.alert-info{background-color:var(--info-light);border:1.26px solid var(--info-dark)}.alert-icon-bg.alert-info{background-color:var(--info-dark);border:1.26px solid var(--info-dark)}.alert-timer.alert-info{background-color:var(--info-dark)}.alert-bg.alert-warn,.alert-bg.alert-mobile.alert-warn{background-color:var(--warn-light);border:1.26px solid var(--warn-dark)}.alert-icon-bg.alert-warn{background-color:var(--warn-dark);border:1.26px solid var(--warn-dark)}.alert-timer.alert-warn{background-color:var(--warn-dark)}.alert-bg.alert-error,.alert-bg.alert-mobile.alert-error{background-color:var(--error-light);border:1.26px solid var(--error-dark)}.alert-icon-bg.alert-error{background-color:var(--error-dark);border:1.26px solid var(--error-dark)}.alert-timer.alert-error{background-color:var(--error-dark)}.alert-bg.alert-success,.alert-bg.alert-mobile.alert-success{background-color:var(--success-light);border:1.26px solid var(--success-dark)}.alert-icon-bg.alert-success{background-color:var(--success-dark);border:1.26px solid var(--success-dark)}.alert-timer.alert-success{background-color:var(--success-dark)}@keyframes loader{0%{width:0%}to{width:100%}}@media only screen and (orientation: portrait){.alert-label{margin:auto}.alert-close-btn-bg{display:flex;justify-content:center}.alert-icon-msg-cross-bg{display:flex;flex-direction:row;width:100%;align-items:center}.alert-space{width:100%;max-width:100%;margin:auto}.alert-bg{display:none;flex-direction:column}.alert-mobile{display:flex;justify-content:center;align-items:flex-start}.alert-icon{margin:4px}.alert-icon-bg{display:flex;justify-content:center;align-items:center;border-radius:5.04px;margin:8px 16px;height:fit-content}.alert-msg-bg{padding:1rem 0rem;width:calc(100% - 70px)}.alert-persistant-btn{margin:4px!important}.alert-persistant-btn-bg{display:flex;justify-content:center;width:calc(8px + 2rem)!important;align-items:center;border-radius:5.04px;margin:8px 16px}}
|
|
9105
9105
|
`,GenericStyles=`#epigraphConfiguratorCore{width:100%;height:100%;margin:0;padding:0;overflow:hidden;display:flex;align-items:center;justify-content:space-evenly;align-content:center;flex-direction:row}*{user-select:none!important;-webkit-user-select:none!important}.coreContainer{position:relative;width:100%;height:100%}.grabCursor{cursor:url(https://storage.googleapis.com/gsc-epigraph-design/product-assets/Icon/Cursor-Move.svg) 6 3,auto}.grabbingCursor{cursor:url(https://storage.googleapis.com/gsc-epigraph-design/product-assets/Icon/Cursor-Grab.svg) 6 3,auto}.pointerCursor{cursor:url(https://storage.googleapis.com/gsc-epigraph-design/product-assets/Icon/Cursor-Click.svg) 6 2,auto}.blockedCursor{cursor:url(https://storage.googleapis.com/gsc-epigraph-design/product-assets/Icon/Cursor-Block.svg),auto}.moveCursor{cursor:url(https://storage.googleapis.com/gsc-epigraph-design/product-assets/Icon/Cursor-MoveArrows.svg) 8.65 8.65,auto}.mainCanvas{width:100%!important;height:100%!important;background:white}.uninteractable{pointer-events:none;opacity:.8}.dimensionsButtonParent{position:relative;display:flex}.dimensionText{font-size:.8rem;font-style:normal;font-weight:600}.dimensionActive{border-color:#c7c7c7!important}.canvasFocusButton{width:0;height:0;position:absolute;top:0}.color-grid{display:flex;gap:1rem}.canvasTooltip{position:absolute;width:100%;display:flex;padding:1rem;bottom:0;justify-content:center;color:#898989;font-style:italic;font-size:.75rem;font-family:Inter,helvetica,sans-serif;opacity:1;transition:.2s all ease;-webkit-transition:.2s all ease;pointer-events:none;text-transform:uppercase;margin-bottom:5rem}.emptySceneBG{position:absolute;width:100%;height:100%;display:flex;padding:1rem;bottom:0;font-size:2rem;justify-content:center;align-items:center;text-align:center;color:#89898939;font-family:Inter,helvetica,sans-serif;opacity:1;transition:.2s all ease;-webkit-transition:.2s all ease;pointer-events:none;text-transform:uppercase}
|