=0){let ie=N[j];if(ie===void 0&&(j===”instanceMatrix”&&_.instanceMatrix&&(ie=_.instanceMatrix),j===”instanceColor”&&_.instanceColor&&(ie=_.instanceColor)),ie!==void 0){let se=ie.normalized,ae=ie.itemSize,fe=e.get(ie);if(fe===void 0)continue;let Re=fe.buffer,Je=fe.type,et=fe.bytesPerElement,q=Je===n.INT||Je===n.UNSIGNED_INT||ie.gpuType===Ho;if(ie.isInterleavedBufferAttribute){let J=ie.data,me=J.stride,Le=ie.offset;if(J.isInstancedInterleavedBuffer){for(let Me=0;Me<z.locationSize;Me++)d(z.location+Me,J.meshPerAttribute);_.isInstancedMesh!==!0&&Q._maxInstanceCount===void 0&&(Q._maxInstanceCount=J.meshPerAttribute*J.count)}else for(let Me=0;Me<z.locationSize;Me++)A(z.location+Me);n.bindBuffer(n.ARRAY_BUFFER,Re);for(let Me=0;Me<z.locationSize;Me++)v(z.location+Me,ae/z.locationSize,Je,se,me*et,(Le+ae/z.locationSize*Me)*et,q)}else{if(ie.isInstancedBufferAttribute){for(let J=0;J<z.locationSize;J++)d(z.location+J,ie.meshPerAttribute);_.isInstancedMesh!==!0&&Q._maxInstanceCount===void 0&&(Q._maxInstanceCount=ie.meshPerAttribute*ie.count)}else for(let J=0;J<z.locationSize;J++)A(z.location+J);n.bindBuffer(n.ARRAY_BUFFER,Re);for(let J=0;J<z.locationSize;J++)v(z.location+J,ae/z.locationSize,Je,se,ae*et,ae/z.locationSize*J*et,q)}}else if(k!==void 0){let se=k[j];if(se!==void 0)switch(se.length){case 2:n.vertexAttrib2fv(z.location,se);break;case 3:n.vertexAttrib3fv(z.location,se);break;case 4:n.vertexAttrib4fv(z.location,se);break;default:n.vertexAttrib1fv(z.location,se)}}}}S()}function M(){B();for(let _ in i){let T=i[_];for(let U in T){let Q=T[U];for(let N in Q)h(Q[N].object),delete Q[N];delete T[U]}delete i[_]}}function I(_){if(i[_.id]===void 0)return;let T=i[_.id];for(let U in T){let Q=T[U];for(let N in Q)h(Q[N].object),delete Q[N];delete T[U]}delete i[_.id]}function R(_){for(let T in i){let U=i[T];if(U[_.id]===void 0)continue;let Q=U[_.id];for(let N in Q)h(Q[N].object),delete Q[N];delete U[_.id]}}function B(){E(),a=!0,r!==s&&(r=s,l(r.object))}function E(){s.geometry=null,s.program=null,s.wireframe=!1}return{setup:o,reset:B,resetDefaultState:E,dispose:M,releaseStatesOfGeometry:I,releaseStatesOfProgram:R,initAttributes:g,enableAttribute:A,disableUnusedAttributes:S}}function gx(n,e,t){let i;function s(l){i=l}function r(l,h){n.drawArrays(i,l,h),t.update(h,i,1)}function a(l,h,u){u!==0&&(n.drawArraysInstanced(i,l,h,u),t.update(h,i,u))}function o(l,h,u){if(u===0)return;e.get("WEBGL_multi_draw").multiDrawArraysWEBGL(i,l,0,h,0,u);let p=0;for(let m=0;m<u;m++)p+=h[m];t.update(p,i,1)}function c(l,h,u,f){if(u===0)return;let p=e.get("WEBGL_multi_draw");if(p===null)for(let m=0;m<l.length;m++)a(l[m],h[m],f[m]);else{p.multiDrawArraysInstancedWEBGL(i,l,0,h,0,f,0,u);let m=0;for(let g=0;g0&&n.getShaderPrecisionFormat(n.FRAGMENT_SHADER,n.HIGH_FLOAT).precision>0)return”highp”;R=”mediump”}return R===”mediump”&&n.getShaderPrecisionFormat(n.VERTEX_SHADER,n.MEDIUM_FLOAT).precision>0&&n.getShaderPrecisionFormat(n.FRAGMENT_SHADER,n.MEDIUM_FLOAT).precision>0?”mediump”:”lowp”}let l=t.precision!==void 0?t.precision:”highp”,h=c(l);h!==l&&(console.warn(“THREE.WebGLRenderer:”,l,”not supported, using”,h,”instead.”),l=h);let u=t.logarithmicDepthBuffer===!0,f=t.reversedDepthBuffer===!0&&e.has(“EXT_clip_control”),p=n.getParameter(n.MAX_TEXTURE_IMAGE_UNITS),m=n.getParameter(n.MAX_VERTEX_TEXTURE_IMAGE_UNITS),g=n.getParameter(n.MAX_TEXTURE_SIZE),A=n.getParameter(n.MAX_CUBE_MAP_TEXTURE_SIZE),d=n.getParameter(n.MAX_VERTEX_ATTRIBS),S=n.getParameter(n.MAX_VERTEX_UNIFORM_VECTORS),v=n.getParameter(n.MAX_VARYING_VECTORS),b=n.getParameter(n.MAX_FRAGMENT_UNIFORM_VECTORS),M=m>0,I=n.getParameter(n.MAX_SAMPLES);return{isWebGL2:!0,getMaxAnisotropy:r,getMaxPrecision:c,textureFormatReadable:a,textureTypeReadable:o,precision:l,logarithmicDepthBuffer:u,reversedDepthBuffer:f,maxTextures:p,maxVertexTextures:m,maxTextureSize:g,maxCubemapSize:A,maxAttributes:d,maxVertexUniforms:S,maxVaryings:v,maxFragmentUniforms:b,vertexTextures:M,maxSamples:I}}function bx(n){let e=this,t=null,i=0,s=!1,r=!1,a=new ei,o=new Pe,c={value:null,needsUpdate:!1};this.uniform=c,this.numPlanes=0,this.numIntersection=0,this.init=function(u,f){let p=u.length!==0||f||i!==0||s;return s=f,i=u.length,p},this.beginShadows=function(){r=!0,h(null)},this.endShadows=function(){r=!1},this.setGlobalState=function(u,f){t=h(u,f,0)},this.setState=function(u,f,p){let m=u.clippingPlanes,g=u.clipIntersection,A=u.clipShadows,d=n.get(u);if(!s||m===null||m.length===0||r&&!A)r?h(null):l();else{let S=r?0:i,v=S*4,b=d.clippingState||null;c.value=b,b=h(m,f,v,p);for(let M=0;M!==v;++M)b[M]=t[M];d.clippingState=b,this.numIntersection=g?this.numPlanes:0,this.numPlanes+=S}};function l(){c.value!==t&&(c.value=t,c.needsUpdate=i>0),e.numPlanes=i,e.numIntersection=0}function h(u,f,p,m){let g=u!==null?u.length:0,A=null;if(g!==0){if(A=c.value,m!==!0||A===null){let d=p+g*4,S=f.matrixWorldInverse;o.getNormalMatrix(S),(A===null||A.length0){let l=new Ao(c.height);return l.fromEquirectangularTexture(n,a),e.set(a,l),a.addEventListener(“dispose”,s),t(l.texture,a.mapping)}else return null}}return a}function s(a){let o=a.target;o.removeEventListener(“dispose”,s);let c=e.get(o);c!==void 0&&(e.delete(o),c.dispose())}function r(){e=new WeakMap}return{get:i,dispose:r}}var Rr=4,Yf=[.125,.215,.35,.446,.526,.582],Rs=20,Jl=new Ni,Jf=new Ce,jl=null,Zl=0,$l=0,eh=!1,ws=(1+Math.sqrt(5))/2,wr=1/ws,jf=[new D(-ws,wr,0),new D(ws,wr,0),new D(-wr,0,ws),new D(wr,0,ws),new D(0,ws,-wr),new D(0,ws,wr),new D(-1,1,-1),new D(1,1,-1),new D(-1,1,1),new D(1,1,1)],yx=new D,Dr=class{constructor(e){this._renderer=e,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._lodPlanes=[],this._sizeLods=[],this._sigmas=[],this._blurMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._compileMaterial(this._blurMaterial)}fromScene(e,t=0,i=.1,s=100,r={}){let{size:a=256,position:o=yx}=r;jl=this._renderer.getRenderTarget(),Zl=this._renderer.getActiveCubeFace(),$l=this._renderer.getActiveMipmapLevel(),eh=this._renderer.xr.enabled,this._renderer.xr.enabled=!1,this._setSize(a);let c=this._allocateTargets();return c.depthBuffer=!0,this._sceneToCubeUV(e,i,s,c,o),t>0&&this._blur(c,0,0,t),this._applyPMREM(c),this._cleanup(c),c}fromEquirectangular(e,t=null){return this._fromTexture(e,t)}fromCubemap(e,t=null){return this._fromTexture(e,t)}compileCubemapShader(){this._cubemapMaterial===null&&(this._cubemapMaterial=ed(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){this._equirectMaterial===null&&(this._equirectMaterial=$f(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),this._cubemapMaterial!==null&&this._cubemapMaterial.dispose(),this._equirectMaterial!==null&&this._equirectMaterial.dispose()}_setSize(e){this._lodMax=Math.floor(Math.log2(e)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){this._blurMaterial!==null&&this._blurMaterial.dispose(),this._pingPongRenderTarget!==null&&this._pingPongRenderTarget.dispose();for(let e=0;e<this._lodPlanes.length;e++)this._lodPlanes[e].dispose()}_cleanup(e){this._renderer.setRenderTarget(jl,Zl,$l),this._renderer.xr.enabled=eh,e.scissorTest=!1,lc(e,0,0,e.width,e.height)}_fromTexture(e,t){e.mapping===On||e.mapping===bs?this._setSize(e.image.length===0?16:e.image[0].width||e.image[0].image.width):this._setSize(e.image.width/4),jl=this._renderer.getRenderTarget(),Zl=this._renderer.getActiveCubeFace(),$l=this._renderer.getActiveMipmapLevel(),eh=this._renderer.xr.enabled,this._renderer.xr.enabled=!1;let i=t||this._allocateTargets();return this._textureToCubeUV(e,i),this._applyPMREM(i),this._cleanup(i),i}_allocateTargets(){let e=3*Math.max(this._cubeSize,112),t=4*this._cubeSize,i={magFilter:ze,minFilter:ze,generateMipmaps:!1,type:rt,format:nt,colorSpace:Mt,depthBuffer:!1},s=Zf(e,t,i);if(this._pingPongRenderTarget===null||this._pingPongRenderTarget.width!==e||this._pingPongRenderTarget.height!==t){this._pingPongRenderTarget!==null&&this._dispose(),this._pingPongRenderTarget=Zf(e,t,i);let{_lodMax:r}=this;({sizeLods:this._sizeLods,lodPlanes:this._lodPlanes,sigmas:this._sigmas}=Ex(r)),this._blurMaterial=vx(r,e,t)}return s}_compileMaterial(e){let t=new yt(this._lodPlanes[0],e);this._renderer.compile(t,Jl)}_sceneToCubeUV(e,t,i,s,r){let c=new Tt(90,1,t,i),l=[1,-1,1,1,1,1],h=[1,1,1,-1,-1,-1],u=this._renderer,f=u.autoClear,p=u.toneMapping;u.getClearColor(Jf),u.toneMapping=An,u.autoClear=!1,u.state.buffers.depth.getReversed()&&(u.setRenderTarget(s),u.clearDepth(),u.setRenderTarget(null));let g=new mi({name:"PMREM.Background",side:Xt,depthWrite:!1,depthTest:!1}),A=new yt(new Ln,g),d=!1,S=e.background;S?S.isColor&&(g.color.copy(S),e.background=null,d=!0):(g.color.copy(Jf),d=!0);for(let v=0;v2?M:0,M,M),u.setRenderTarget(s),d&&u.render(A,c),u.render(e,c)}A.geometry.dispose(),A.material.dispose(),u.toneMapping=p,u.autoClear=f,e.background=S}_textureToCubeUV(e,t){let i=this._renderer,s=e.mapping===On||e.mapping===bs;s?(this._cubemapMaterial===null&&(this._cubemapMaterial=ed()),this._cubemapMaterial.uniforms.flipEnvMap.value=e.isRenderTargetTexture===!1?-1:1):this._equirectMaterial===null&&(this._equirectMaterial=$f());let r=s?this._cubemapMaterial:this._equirectMaterial,a=new yt(this._lodPlanes[0],r),o=r.uniforms;o.envMap.value=e;let c=this._cubeSize;lc(t,0,0,3*c,2*c),i.setRenderTarget(t),i.render(a,Jl)}_applyPMREM(e){let t=this._renderer,i=t.autoClear;t.autoClear=!1;let s=this._lodPlanes.length;for(let r=1;rRs&&console.warn(`sigmaRadians, ${r}, is too large and will clip, as it requested ${A} samples when the maximum is set to ${Rs}`);let d=[],S=0;for(let R=0;R<Rs;++R){let B=R/g,E=Math.exp(-B*B/2);d.push(E),R===0?S+=E:R<A&&(S+=2*E)}for(let R=0;Rv-Rr?s-v+Rr:0),I=4*(this._cubeSize-b);lc(t,M,I,3*b,2*b),c.setRenderTarget(t),c.render(u,Jl)}};function Ex(n){let e=[],t=[],i=[],s=n,r=n-Rr+1+Yf.length;for(let a=0;an-Rr?c=Yf[a-n+Rr-1]:a===0&&(c=0),i.push(c);let l=1/(o-2),h=-l,u=1+l,f=[h,h,u,h,u,u,h,h,u,u,h,u],p=6,m=6,g=3,A=2,d=1,S=new Float32Array(g*m*p),v=new Float32Array(A*m*p),b=new Float32Array(d*m*p);for(let I=0;I
2?0:-1,E=[R,B,0,R+2/3,B,0,R+2/3,B+1,0,R,B,0,R+2/3,B+1,0,R,B+1,0];S.set(E,g*m*I),v.set(f,A*m*I);let _=[I,I,I,I,I,I];b.set(_,d*m*I)}let M=new Rt;M.setAttribute(“position”,new _t(S,g)),M.setAttribute(“uv”,new _t(v,A)),M.setAttribute(“faceIndex”,new _t(b,d)),e.push(M),s>Rr&&s–}return{lodPlanes:e,sizeLods:t,sigmas:i}}function Zf(n,e,t){let i=new St(n,e,t);return i.texture.mapping=va,i.texture.name=”PMREM.cubeUv”,i.scissorTest=!0,i}function lc(n,e,t,i,s){n.viewport.set(e,t,i,s),n.scissor.set(e,t,i,s)}function vx(n,e,t){let i=new Float32Array(Rs),s=new D(0,1,0);return new ft({name:”SphericalGaussianBlur”,defines:{n:Rs,CUBEUV_TEXEL_WIDTH:1/e,CUBEUV_TEXEL_HEIGHT:1/t,CUBEUV_MAX_MIP:`${n}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:i},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:s}},vertexShader:hh(),fragmentShader:`
precision mediump float;
precision mediump int;
varying vec3 vOutputDirection;
uniform sampler2D envMap;
uniform int samples;
uniform float weights[ n ];
uniform bool latitudinal;
uniform float dTheta;
uniform float mipInt;
uniform vec3 poleAxis;
#define ENVMAP_TYPE_CUBE_UV
#include
vec3 getSample( float theta, vec3 axis ) {
float cosTheta = cos( theta );
// Rodrigues’ axis-angle rotation
vec3 sampleDirection = vOutputDirection * cosTheta
+ cross( axis, vOutputDirection ) * sin( theta )
+ axis * dot( axis, vOutputDirection ) * ( 1.0 – cosTheta );
return bilinearCubeUV( envMap, sampleDirection, mipInt );
}
void main() {
vec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );
if ( all( equal( axis, vec3( 0.0 ) ) ) ) {
axis = vec3( vOutputDirection.z, 0.0, – vOutputDirection.x );
}
axis = normalize( axis );
gl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );
gl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );
for ( int i = 1; i = samples ) {
break;
}
float theta = dTheta * float( i );
gl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );
gl_FragColor.rgb += weights[ i ] * getSample( theta, axis );
}
}
`,blending:Oi,depthTest:!1,depthWrite:!1})}function $f(){return new ft({name:”EquirectangularToCubeUV”,uniforms:{envMap:{value:null}},vertexShader:hh(),fragmentShader:`
precision mediump float;
precision mediump int;
varying vec3 vOutputDirection;
uniform sampler2D envMap;
#include
void main() {
vec3 outputDirection = normalize( vOutputDirection );
vec2 uv = equirectUv( outputDirection );
gl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 );
}
`,blending:Oi,depthTest:!1,depthWrite:!1})}function ed(){return new ft({name:”CubemapToCubeUV”,uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:hh(),fragmentShader:`
precision mediump float;
precision mediump int;
uniform float flipEnvMap;
varying vec3 vOutputDirection;
uniform samplerCube envMap;
void main() {
gl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) );
}
`,blending:Oi,depthTest:!1,depthWrite:!1})}function hh(){return`
precision mediump float;
precision mediump int;
attribute float faceIndex;
varying vec3 vOutputDirection;
// RH coordinate system; PMREM face-indexing convention
vec3 getDirection( vec2 uv, float face ) {
uv = 2.0 * uv – 1.0;
vec3 direction = vec3( uv, 1.0 );
if ( face == 0.0 ) {
direction = direction.zyx; // ( 1, v, u ) pos x
} else if ( face == 1.0 ) {
direction = direction.xzy;
direction.xz *= -1.0; // ( -u, 1, -v ) pos y
} else if ( face == 2.0 ) {
direction.x *= -1.0; // ( -u, v, 1 ) pos z
} else if ( face == 3.0 ) {
direction = direction.zyx;
direction.xz *= -1.0; // ( -1, v, -u ) neg x
} else if ( face == 4.0 ) {
direction = direction.xzy;
direction.xy *= -1.0; // ( -u, -1, v ) neg y
} else if ( face == 5.0 ) {
direction.z *= -1.0; // ( u, v, -1 ) neg z
}
return direction;
}
void main() {
vOutputDirection = getDirection( uv, faceIndex );
gl_Position = vec4( position, 1.0 );
}
`}function Sx(n){let e=new WeakMap,t=null;function i(o){if(o&&o.isTexture){let c=o.mapping,l=c===ko||c===Go,h=c===On||c===bs;if(l||h){let u=e.get(o),f=u!==void 0?u.texture.pmremVersion:0;if(o.isRenderTargetTexture&&o.pmremVersion!==f)return t===null&&(t=new Dr(n)),u=l?t.fromEquirectangular(o,u):t.fromCubemap(o,u),u.texture.pmremVersion=o.pmremVersion,e.set(o,u),u.texture;if(u!==void 0)return u.texture;{let p=o.image;return l&&p&&p.height>0||h&&p&&s(p)?(t===null&&(t=new Dr(n)),u=l?t.fromEquirectangular(o):t.fromCubemap(o),u.texture.pmremVersion=o.pmremVersion,e.set(o,u),o.addEventListener(“dispose”,r),u.texture):null}}}return o}function s(o){let c=0,l=6;for(let h=0;h<l;h++)o[h]!==void 0&&c++;return c===l}function r(o){let c=o.target;c.removeEventListener("dispose",r);let l=e.get(c);l!==void 0&&(e.delete(c),l.dispose())}function a(){e=new WeakMap,t!==null&&(t.dispose(),t=null)}return{get:i,dispose:a}}function Cx(n){let e={};function t(i){if(e[i]!==void 0)return e[i];let s;switch(i){case"WEBGL_depth_texture":s=n.getExtension("WEBGL_depth_texture")||n.getExtension("MOZ_WEBGL_depth_texture")||n.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":s=n.getExtension("EXT_texture_filter_anisotropic")||n.getExtension("MOZ_EXT_texture_filter_anisotropic")||n.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":s=n.getExtension("WEBGL_compressed_texture_s3tc")||n.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||n.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":s=n.getExtension("WEBGL_compressed_texture_pvrtc")||n.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:s=n.getExtension(i)}return e[i]=s,s}return{has:function(i){return t(i)!==null},init:function(){t("EXT_color_buffer_float"),t("WEBGL_clip_cull_distance"),t("OES_texture_float_linear"),t("EXT_color_buffer_half_float"),t("WEBGL_multisampled_render_to_texture"),t("WEBGL_render_shared_exponent")},get:function(i){let s=t(i);return s===null&&ir("THREE.WebGLRenderer: "+i+" extension not supported."),s}}}function Mx(n,e,t,i){let s={},r=new WeakMap;function a(u){let f=u.target;f.index!==null&&e.remove(f.index);for(let m in f.attributes)e.remove(f.attributes[m]);f.removeEventListener("dispose",a),delete s[f.id];let p=r.get(f);p&&(e.remove(p),r.delete(f)),i.releaseStatesOfGeometry(f),f.isInstancedBufferGeometry===!0&&delete f._maxInstanceCount,t.memory.geometries–}function o(u,f){return s[f.id]===!0||(f.addEventListener("dispose",a),s[f.id]=!0,t.memory.geometries++),f}function c(u){let f=u.attributes;for(let p in f)e.update(f[p],n.ARRAY_BUFFER)}function l(u){let f=[],p=u.index,m=u.attributes.position,g=0;if(p!==null){let S=p.array;g=p.version;for(let v=0,b=S.length;v<b;v+=3){let M=S[v+0],I=S[v+1],R=S[v+2];f.push(M,I,I,R,R,M)}}else if(m!==void 0){let S=m.array;g=m.version;for(let v=0,b=S.length/3-1;v<b;v+=3){let M=v+0,I=v+1,R=v+2;f.push(M,I,I,R,R,M)}}else return;let A=new(Wl(f)?ea:$r)(f,1);A.version=g;let d=r.get(u);d&&e.remove(d),r.set(u,A)}function h(u){let f=r.get(u);if(f){let p=u.index;p!==null&&f.version<p.version&&l(u)}else l(u);return r.get(u)}return{get:o,update:c,getWireframeAttribute:h}}function Ix(n,e,t){let i;function s(f){i=f}let r,a;function o(f){r=f.type,a=f.bytesPerElement}function c(f,p){n.drawElements(i,p,r,f*a),t.update(p,i,1)}function l(f,p,m){m!==0&&(n.drawElementsInstanced(i,p,r,f*a,m),t.update(p,i,m))}function h(f,p,m){if(m===0)return;e.get("WEBGL_multi_draw").multiDrawElementsWEBGL(i,p,0,r,f,0,m);let A=0;for(let d=0;d<m;d++)A+=p[d];t.update(A,i,1)}function u(f,p,m,g){if(m===0)return;let A=e.get("WEBGL_multi_draw");if(A===null)for(let d=0;d<f.length;d++)l(f[d]/a,p[d],g[d]);else{A.multiDrawElementsInstancedWEBGL(i,p,0,r,f,0,g,0,m);let d=0;for(let S=0;Se.maxTextureSize&&(M=Math.ceil(b/e.maxTextureSize),b=e.maxTextureSize);let I=new Float32Array(b*M*4*u),R=new Zr(I,b,M,u);R.type=mt,R.needsUpdate=!0;let B=v*4;for(let _=0;_<u;_++){let T=A[_],U=d[_],Q=S[_],N=b*M*4*_;for(let V=0;V<T.count;V++){let k=V*B;p===!0&&(s.fromBufferAttribute(T,V),I[N+k+0]=s.x,I[N+k+1]=s.y,I[N+k+2]=s.z,I[N+k+3]=0),m===!0&&(s.fromBufferAttribute(U,V),I[N+k+4]=s.x,I[N+k+5]=s.y,I[N+k+6]=s.z,I[N+k+7]=0),g===!0&&(s.fromBufferAttribute(Q,V),I[N+k+8]=s.x,I[N+k+9]=s.y,I[N+k+10]=s.z,I[N+k+11]=Q.itemSize===4?s.w:1)}}f={count:u,texture:R,size:new ue(b,M)},i.set(o,f),o.addEventListener("dispose",E)}if(a.isInstancedMesh===!0&&a.morphTexture!==null)c.getUniforms().setValue(n,"morphTexture",a.morphTexture,t);else{let p=0;for(let g=0;g<l.length;g++)p+=l[g];let m=o.morphTargetsRelative?1:1-p;c.getUniforms().setValue(n,"morphTargetBaseInfluence",m),c.getUniforms().setValue(n,"morphTargetInfluences",l)}c.getUniforms().setValue(n,"morphTargetsTexture",f.texture,t),c.getUniforms().setValue(n,"morphTargetsTextureSize",f.size)}return{update:r}}function Rx(n,e,t,i){let s=new WeakMap;function r(c){let l=i.render.frame,h=c.geometry,u=e.get(c,h);if(s.get(u)!==l&&(e.update(u),s.set(u,l)),c.isInstancedMesh&&(c.hasEventListener("dispose",o)===!1&&c.addEventListener("dispose",o),s.get(c)!==l&&(t.update(c.instanceMatrix,n.ARRAY_BUFFER),c.instanceColor!==null&&t.update(c.instanceColor,n.ARRAY_BUFFER),s.set(c,l))),c.isSkinnedMesh){let f=c.skeleton;s.get(f)!==l&&(f.update(),s.set(f,l))}return u}function a(){s=new WeakMap}function o(c){let l=c.target;l.removeEventListener("dispose",o),t.remove(l.instanceMatrix),l.instanceColor!==null&&t.remove(l.instanceColor)}return{update:r,dispose:a}}var bd=new bt,td=new ln(1,1),_d=new Zr,yd=new sr,Ed=new ia,id=[],nd=[],sd=new Float32Array(16),rd=new Float32Array(9),ad=new Float32Array(4);function Fr(n,e,t){let i=n[0];if(i0)return n;let s=e*t,r=id[s];if(r===void 0&&(r=new Float32Array(s),id[s]=r),e!==0){i.toArray(r,0);for(let a=1,o=0;a!==e;++a)o+=t,n[a].toArray(r,o)}return r}function Bt(n,e){if(n.length!==e.length)return!1;for(let t=0,i=n.length;t<i;t++)if(n[t]!==e[t])return!1;return!0}function Dt(n,e){for(let t=0,i=e.length;t<i;t++)n[t]=e[t]}function fc(n,e){let t=nd[e];t===void 0&&(t=new Int32Array(e),nd[e]=t);for(let i=0;i!==e;++i)t[i]=n.allocateTextureUnit();return t}function Bx(n,e){let t=this.cache;t[0]!==e&&(n.uniform1f(this.addr,e),t[0]=e)}function Dx(n,e){let t=this.cache;if(e.x!==void 0)(t[0]!==e.x||t[1]!==e.y)&&(n.uniform2f(this.addr,e.x,e.y),t[0]=e.x,t[1]=e.y);else{if(Bt(t,e))return;n.uniform2fv(this.addr,e),Dt(t,e)}}function Fx(n,e){let t=this.cache;if(e.x!==void 0)(t[0]!==e.x||t[1]!==e.y||t[2]!==e.z)&&(n.uniform3f(this.addr,e.x,e.y,e.z),t[0]=e.x,t[1]=e.y,t[2]=e.z);else if(e.r!==void 0)(t[0]!==e.r||t[1]!==e.g||t[2]!==e.b)&&(n.uniform3f(this.addr,e.r,e.g,e.b),t[0]=e.r,t[1]=e.g,t[2]=e.b);else{if(Bt(t,e))return;n.uniform3fv(this.addr,e),Dt(t,e)}}function Lx(n,e){let t=this.cache;if(e.x!==void 0)(t[0]!==e.x||t[1]!==e.y||t[2]!==e.z||t[3]!==e.w)&&(n.uniform4f(this.addr,e.x,e.y,e.z,e.w),t[0]=e.x,t[1]=e.y,t[2]=e.z,t[3]=e.w);else{if(Bt(t,e))return;n.uniform4fv(this.addr,e),Dt(t,e)}}function Px(n,e){let t=this.cache,i=e.elements;if(i===void 0){if(Bt(t,e))return;n.uniformMatrix2fv(this.addr,!1,e),Dt(t,e)}else{if(Bt(t,i))return;ad.set(i),n.uniformMatrix2fv(this.addr,!1,ad),Dt(t,i)}}function Ux(n,e){let t=this.cache,i=e.elements;if(i===void 0){if(Bt(t,e))return;n.uniformMatrix3fv(this.addr,!1,e),Dt(t,e)}else{if(Bt(t,i))return;rd.set(i),n.uniformMatrix3fv(this.addr,!1,rd),Dt(t,i)}}function Nx(n,e){let t=this.cache,i=e.elements;if(i===void 0){if(Bt(t,e))return;n.uniformMatrix4fv(this.addr,!1,e),Dt(t,e)}else{if(Bt(t,i))return;sd.set(i),n.uniformMatrix4fv(this.addr,!1,sd),Dt(t,i)}}function Ox(n,e){let t=this.cache;t[0]!==e&&(n.uniform1i(this.addr,e),t[0]=e)}function Qx(n,e){let t=this.cache;if(e.x!==void 0)(t[0]!==e.x||t[1]!==e.y)&&(n.uniform2i(this.addr,e.x,e.y),t[0]=e.x,t[1]=e.y);else{if(Bt(t,e))return;n.uniform2iv(this.addr,e),Dt(t,e)}}function kx(n,e){let t=this.cache;if(e.x!==void 0)(t[0]!==e.x||t[1]!==e.y||t[2]!==e.z)&&(n.uniform3i(this.addr,e.x,e.y,e.z),t[0]=e.x,t[1]=e.y,t[2]=e.z);else{if(Bt(t,e))return;n.uniform3iv(this.addr,e),Dt(t,e)}}function Gx(n,e){let t=this.cache;if(e.x!==void 0)(t[0]!==e.x||t[1]!==e.y||t[2]!==e.z||t[3]!==e.w)&&(n.uniform4i(this.addr,e.x,e.y,e.z,e.w),t[0]=e.x,t[1]=e.y,t[2]=e.z,t[3]=e.w);else{if(Bt(t,e))return;n.uniform4iv(this.addr,e),Dt(t,e)}}function Hx(n,e){let t=this.cache;t[0]!==e&&(n.uniform1ui(this.addr,e),t[0]=e)}function zx(n,e){let t=this.cache;if(e.x!==void 0)(t[0]!==e.x||t[1]!==e.y)&&(n.uniform2ui(this.addr,e.x,e.y),t[0]=e.x,t[1]=e.y);else{if(Bt(t,e))return;n.uniform2uiv(this.addr,e),Dt(t,e)}}function Vx(n,e){let t=this.cache;if(e.x!==void 0)(t[0]!==e.x||t[1]!==e.y||t[2]!==e.z)&&(n.uniform3ui(this.addr,e.x,e.y,e.z),t[0]=e.x,t[1]=e.y,t[2]=e.z);else{if(Bt(t,e))return;n.uniform3uiv(this.addr,e),Dt(t,e)}}function Wx(n,e){let t=this.cache;if(e.x!==void 0)(t[0]!==e.x||t[1]!==e.y||t[2]!==e.z||t[3]!==e.w)&&(n.uniform4ui(this.addr,e.x,e.y,e.z,e.w),t[0]=e.x,t[1]=e.y,t[2]=e.z,t[3]=e.w);else{if(Bt(t,e))return;n.uniform4uiv(this.addr,e),Dt(t,e)}}function Kx(n,e,t){let i=this.cache,s=t.allocateTextureUnit();i[0]!==s&&(n.uniform1i(this.addr,s),i[0]=s);let r;this.type===n.SAMPLER_2D_SHADOW?(td.compareFunction=Hl,r=td):r=bd,t.setTexture2D(e||r,s)}function qx(n,e,t){let i=this.cache,s=t.allocateTextureUnit();i[0]!==s&&(n.uniform1i(this.addr,s),i[0]=s),t.setTexture3D(e||yd,s)}function Xx(n,e,t){let i=this.cache,s=t.allocateTextureUnit();i[0]!==s&&(n.uniform1i(this.addr,s),i[0]=s),t.setTextureCube(e||Ed,s)}function Yx(n,e,t){let i=this.cache,s=t.allocateTextureUnit();i[0]!==s&&(n.uniform1i(this.addr,s),i[0]=s),t.setTexture2DArray(e||_d,s)}function Jx(n){switch(n){case 5126:return Bx;case 35664:return Dx;case 35665:return Fx;case 35666:return Lx;case 35674:return Px;case 35675:return Ux;case 35676:return Nx;case 5124:case 35670:return Ox;case 35667:case 35671:return Qx;case 35668:case 35672:return kx;case 35669:case 35673:return Gx;case 5125:return Hx;case 36294:return zx;case 36295:return Vx;case 36296:return Wx;case 35678:case 36198:case 36298:case 36306:case 35682:return Kx;case 35679:case 36299:case 36307:return qx;case 35680:case 36300:case 36308:case 36293:return Xx;case 36289:case 36303:case 36311:case 36292:return Yx}}function jx(n,e){n.uniform1fv(this.addr,e)}function Zx(n,e){let t=Fr(e,this.size,2);n.uniform2fv(this.addr,t)}function $x(n,e){let t=Fr(e,this.size,3);n.uniform3fv(this.addr,t)}function eb(n,e){let t=Fr(e,this.size,4);n.uniform4fv(this.addr,t)}function tb(n,e){let t=Fr(e,this.size,4);n.uniformMatrix2fv(this.addr,!1,t)}function ib(n,e){let t=Fr(e,this.size,9);n.uniformMatrix3fv(this.addr,!1,t)}function nb(n,e){let t=Fr(e,this.size,16);n.uniformMatrix4fv(this.addr,!1,t)}function sb(n,e){n.uniform1iv(this.addr,e)}function rb(n,e){n.uniform2iv(this.addr,e)}function ab(n,e){n.uniform3iv(this.addr,e)}function ob(n,e){n.uniform4iv(this.addr,e)}function cb(n,e){n.uniform1uiv(this.addr,e)}function lb(n,e){n.uniform2uiv(this.addr,e)}function hb(n,e){n.uniform3uiv(this.addr,e)}function ub(n,e){n.uniform4uiv(this.addr,e)}function fb(n,e,t){let i=this.cache,s=e.length,r=fc(t,s);Bt(i,r)||(n.uniform1iv(this.addr,r),Dt(i,r));for(let a=0;a!==s;++a)t.setTexture2D(e[a]||bd,r[a])}function db(n,e,t){let i=this.cache,s=e.length,r=fc(t,s);Bt(i,r)||(n.uniform1iv(this.addr,r),Dt(i,r));for(let a=0;a!==s;++a)t.setTexture3D(e[a]||yd,r[a])}function pb(n,e,t){let i=this.cache,s=e.length,r=fc(t,s);Bt(i,r)||(n.uniform1iv(this.addr,r),Dt(i,r));for(let a=0;a!==s;++a)t.setTextureCube(e[a]||Ed,r[a])}function Ab(n,e,t){let i=this.cache,s=e.length,r=fc(t,s);Bt(i,r)||(n.uniform1iv(this.addr,r),Dt(i,r));for(let a=0;a!==s;++a)t.setTexture2DArray(e[a]||_d,r[a])}function mb(n){switch(n){case 5126:return jx;case 35664:return Zx;case 35665:return $x;case 35666:return eb;case 35674:return tb;case 35675:return ib;case 35676:return nb;case 5124:case 35670:return sb;case 35667:case 35671:return rb;case 35668:case 35672:return ab;case 35669:case 35673:return ob;case 5125:return cb;case 36294:return lb;case 36295:return hb;case 36296:return ub;case 35678:case 36198:case 36298:case 36306:case 35682:return fb;case 35679:case 36299:case 36307:return db;case 35680:case 36300:case 36308:case 36293:return pb;case 36289:case 36303:case 36311:case 36292:return Ab}}var ih=class{constructor(e,t,i){this.id=e,this.addr=i,this.cache=[],this.type=t.type,this.setValue=Jx(t.type)}},nh=class{constructor(e,t,i){this.id=e,this.addr=i,this.cache=[],this.type=t.type,this.size=t.size,this.setValue=mb(t.type)}},sh=class{constructor(e){this.id=e,this.seq=[],this.map={}}setValue(e,t,i){let s=this.seq;for(let r=0,a=s.length;r!==a;++r){let o=s[r];o.setValue(e,t[o.id],i)}}},th=/(w+)(])?([|.)?/g;function od(n,e){n.seq.push(e),n.map[e.id]=e}function gb(n,e,t){let i=n.name,s=i.length;for(th.lastIndex=0;;){let r=th.exec(i),a=th.lastIndex,o=r[1],c=r[2]==="]",l=r[3];if(c&&(o=o|0),l===void 0||l==="["&&a+2===s){od(t,l===void 0?new ih(o,n,e):new nh(o,n,e));break}else{let u=t.map[o];u===void 0&&(u=new sh(o),od(t,u)),t=u}}}var Br=class{constructor(e,t){this.seq=[],this.map={};let i=e.getProgramParameter(t,e.ACTIVE_UNIFORMS);for(let s=0;s<i;++s){let r=e.getActiveUniform(t,s),a=e.getUniformLocation(t,r.name);gb(r,a,this)}}setValue(e,t,i,s){let r=this.map[t];r!==void 0&&r.setValue(e,i,s)}setOptional(e,t,i){let s=t[i];s!==void 0&&this.setValue(e,i,s)}static upload(e,t,i,s){for(let r=0,a=t.length;r!==a;++r){let o=t[r],c=i[o.id];c.needsUpdate!==!1&&o.setValue(e,c.value,s)}}static seqWithValue(e,t){let i=[];for(let s=0,r=e.length;s!==r;++s){let a=e[s];a.id in t&&i.push(a)}return i}};function cd(n,e,t){let i=n.createShader(e);return n.shaderSource(i,t),n.compileShader(i),i}var xb=37297,bb=0;function _b(n,e){let t=n.split(`
`),i=[],s=Math.max(e-6,0),r=Math.min(e+6,t.length);for(let a=s;a”:” “} ${o}: ${t[a]}`)}return i.join(`
`)}var ld=new Pe;function yb(n){Ge._getMatrix(ld,Ge.workingColorSpace,n);let e=`mat3( ${ld.elements.map(t=>t.toFixed(4))} )`;switch(Ge.getTransfer(n)){case er:return[e,”LinearTransferOETF”];case Ze:return[e,”sRGBTransferOETF”];default:return console.warn(“THREE.WebGLProgram: Unsupported color space: “,n),[e,”LinearTransferOETF”]}}function hd(n,e,t){let i=n.getShaderParameter(e,n.COMPILE_STATUS),r=(n.getShaderInfoLog(e)||””).trim();if(i&&r===””)return””;let a=/ERROR: 0:(d+)/.exec(r);if(a){let o=parseInt(a[1]);return t.toUpperCase()+`
`+r+`
`+_b(n.getShaderSource(e),o)}else return r}function Eb(n,e){let t=yb(e);return[`vec4 ${n}( vec4 value ) {`,` return ${t[1]}( vec4( value.rgb * ${t[0]}, value.a ) );`,”}”].join(`
`)}function vb(n,e){let t;switch(e){case Lo:t=”Linear”;break;case Po:t=”Reinhard”;break;case Uo:t=”Cineon”;break;case No:t=”ACESFilmic”;break;case Qo:t=”AgX”;break;case pr:t=”Neutral”;break;case Oo:t=”Custom”;break;default:console.warn(“THREE.WebGLProgram: Unsupported toneMapping:”,e),t=”Linear”}return”vec3 “+n+”( vec3 color ) { return “+t+”ToneMapping( color ); }”}var hc=new D;function Sb(){Ge.getLuminanceCoefficients(hc);let n=hc.x.toFixed(4),e=hc.y.toFixed(4),t=hc.z.toFixed(4);return[“float luminance( const in vec3 rgb ) {“,` const vec3 weights = vec3( ${n}, ${e}, ${t} );`,” return dot( weights, rgb );”,”}”].join(`
`)}function Cb(n){return[n.extensionClipCullDistance?”#extension GL_ANGLE_clip_cull_distance : require”:””,n.extensionMultiDraw?”#extension GL_ANGLE_multi_draw : require”:””].filter(Ma).join(`
`)}function Mb(n){let e=[];for(let t in n){let i=n[t];i!==!1&&e.push(“#define “+t+” “+i)}return e.join(`
`)}function Ib(n,e){let t={},i=n.getProgramParameter(e,n.ACTIVE_ATTRIBUTES);for(let s=0;s<i;s++){let r=n.getActiveAttrib(e,s),a=r.name,o=1;r.type===n.FLOAT_MAT2&&(o=2),r.type===n.FLOAT_MAT3&&(o=3),r.type===n.FLOAT_MAT4&&(o=4),t[a]={type:r.type,location:n.getAttribLocation(e,a),locationSize:o}}return t}function Ma(n){return n!==""}function ud(n,e){let t=e.numSpotLightShadows+e.numSpotLightMaps-e.numSpotLightShadowsWithMaps;return n.replace(/NUM_DIR_LIGHTS/g,e.numDirLights).replace(/NUM_SPOT_LIGHTS/g,e.numSpotLights).replace(/NUM_SPOT_LIGHT_MAPS/g,e.numSpotLightMaps).replace(/NUM_SPOT_LIGHT_COORDS/g,t).replace(/NUM_RECT_AREA_LIGHTS/g,e.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,e.numPointLights).replace(/NUM_HEMI_LIGHTS/g,e.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g,e.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g,e.numSpotLightShadowsWithMaps).replace(/NUM_SPOT_LIGHT_SHADOWS/g,e.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g,e.numPointLightShadows)}function fd(n,e){return n.replace(/NUM_CLIPPING_PLANES/g,e.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g,e.numClippingPlanes-e.numClipIntersection)}var Tb=/^[ t]*#include +/gm;function rh(n){return n.replace(Tb,Rb)}var wb=new Map;function Rb(n,e){let t=Ve[e];if(t===void 0){let i=wb.get(e);if(i!==void 0)t=Ve[i],console.warn(‘THREE.WebGLRenderer: Shader chunk “%s” has been deprecated. Use “%s” instead.’,e,i);else throw new Error(“Can not resolve #include “)}return rh(t)}var Bb=/#pragma unroll_loop_starts+fors*(s*ints+is*=s*(d+)s*;s*is*<s*(d+)s*;s*is*++s*)s*{([sS]+?)}s+#pragma unroll_loop_end/g;function dd(n){return n.replace(Bb,Db)}function Db(n,e,t,i){let s="";for(let r=parseInt(e);r0&&(A+=`
`),d=[“#define SHADER_TYPE “+t.shaderType,”#define SHADER_NAME “+t.shaderName,m].filter(Ma).join(`
`),d.length>0&&(d+=`
`)):(A=[pd(t),”#define SHADER_TYPE “+t.shaderType,”#define SHADER_NAME “+t.shaderName,m,t.extensionClipCullDistance?”#define USE_CLIP_DISTANCE”:””,t.batching?”#define USE_BATCHING”:””,t.batchingColor?”#define USE_BATCHING_COLOR”:””,t.instancing?”#define USE_INSTANCING”:””,t.instancingColor?”#define USE_INSTANCING_COLOR”:””,t.instancingMorph?”#define USE_INSTANCING_MORPH”:””,t.useFog&&t.fog?”#define USE_FOG”:””,t.useFog&&t.fogExp2?”#define FOG_EXP2″:””,t.map?”#define USE_MAP”:””,t.envMap?”#define USE_ENVMAP”:””,t.envMap?”#define “+h:””,t.lightMap?”#define USE_LIGHTMAP”:””,t.aoMap?”#define USE_AOMAP”:””,t.bumpMap?”#define USE_BUMPMAP”:””,t.normalMap?”#define USE_NORMALMAP”:””,t.normalMapObjectSpace?”#define USE_NORMALMAP_OBJECTSPACE”:””,t.normalMapTangentSpace?”#define USE_NORMALMAP_TANGENTSPACE”:””,t.displacementMap?”#define USE_DISPLACEMENTMAP”:””,t.emissiveMap?”#define USE_EMISSIVEMAP”:””,t.anisotropy?”#define USE_ANISOTROPY”:””,t.anisotropyMap?”#define USE_ANISOTROPYMAP”:””,t.clearcoatMap?”#define USE_CLEARCOATMAP”:””,t.clearcoatRoughnessMap?”#define USE_CLEARCOAT_ROUGHNESSMAP”:””,t.clearcoatNormalMap?”#define USE_CLEARCOAT_NORMALMAP”:””,t.iridescenceMap?”#define USE_IRIDESCENCEMAP”:””,t.iridescenceThicknessMap?”#define USE_IRIDESCENCE_THICKNESSMAP”:””,t.specularMap?”#define USE_SPECULARMAP”:””,t.specularColorMap?”#define USE_SPECULAR_COLORMAP”:””,t.specularIntensityMap?”#define USE_SPECULAR_INTENSITYMAP”:””,t.roughnessMap?”#define USE_ROUGHNESSMAP”:””,t.metalnessMap?”#define USE_METALNESSMAP”:””,t.alphaMap?”#define USE_ALPHAMAP”:””,t.alphaHash?”#define USE_ALPHAHASH”:””,t.transmission?”#define USE_TRANSMISSION”:””,t.transmissionMap?”#define USE_TRANSMISSIONMAP”:””,t.thicknessMap?”#define USE_THICKNESSMAP”:””,t.sheenColorMap?”#define USE_SHEEN_COLORMAP”:””,t.sheenRoughnessMap?”#define USE_SHEEN_ROUGHNESSMAP”:””,t.mapUv?”#define MAP_UV “+t.mapUv:””,t.alphaMapUv?”#define ALPHAMAP_UV “+t.alphaMapUv:””,t.lightMapUv?”#define LIGHTMAP_UV “+t.lightMapUv:””,t.aoMapUv?”#define AOMAP_UV “+t.aoMapUv:””,t.emissiveMapUv?”#define EMISSIVEMAP_UV “+t.emissiveMapUv:””,t.bumpMapUv?”#define BUMPMAP_UV “+t.bumpMapUv:””,t.normalMapUv?”#define NORMALMAP_UV “+t.normalMapUv:””,t.displacementMapUv?”#define DISPLACEMENTMAP_UV “+t.displacementMapUv:””,t.metalnessMapUv?”#define METALNESSMAP_UV “+t.metalnessMapUv:””,t.roughnessMapUv?”#define ROUGHNESSMAP_UV “+t.roughnessMapUv:””,t.anisotropyMapUv?”#define ANISOTROPYMAP_UV “+t.anisotropyMapUv:””,t.clearcoatMapUv?”#define CLEARCOATMAP_UV “+t.clearcoatMapUv:””,t.clearcoatNormalMapUv?”#define CLEARCOAT_NORMALMAP_UV “+t.clearcoatNormalMapUv:””,t.clearcoatRoughnessMapUv?”#define CLEARCOAT_ROUGHNESSMAP_UV “+t.clearcoatRoughnessMapUv:””,t.iridescenceMapUv?”#define IRIDESCENCEMAP_UV “+t.iridescenceMapUv:””,t.iridescenceThicknessMapUv?”#define IRIDESCENCE_THICKNESSMAP_UV “+t.iridescenceThicknessMapUv:””,t.sheenColorMapUv?”#define SHEEN_COLORMAP_UV “+t.sheenColorMapUv:””,t.sheenRoughnessMapUv?”#define SHEEN_ROUGHNESSMAP_UV “+t.sheenRoughnessMapUv:””,t.specularMapUv?”#define SPECULARMAP_UV “+t.specularMapUv:””,t.specularColorMapUv?”#define SPECULAR_COLORMAP_UV “+t.specularColorMapUv:””,t.specularIntensityMapUv?”#define SPECULAR_INTENSITYMAP_UV “+t.specularIntensityMapUv:””,t.transmissionMapUv?”#define TRANSMISSIONMAP_UV “+t.transmissionMapUv:””,t.thicknessMapUv?”#define THICKNESSMAP_UV “+t.thicknessMapUv:””,t.vertexTangents&&t.flatShading===!1?”#define USE_TANGENT”:””,t.vertexColors?”#define USE_COLOR”:””,t.vertexAlphas?”#define USE_COLOR_ALPHA”:””,t.vertexUv1s?”#define USE_UV1″:””,t.vertexUv2s?”#define USE_UV2″:””,t.vertexUv3s?”#define USE_UV3″:””,t.pointsUvs?”#define USE_POINTS_UV”:””,t.flatShading?”#define FLAT_SHADED”:””,t.skinning?”#define USE_SKINNING”:””,t.morphTargets?”#define USE_MORPHTARGETS”:””,t.morphNormals&&t.flatShading===!1?”#define USE_MORPHNORMALS”:””,t.morphColors?”#define USE_MORPHCOLORS”:””,t.morphTargetsCount>0?”#define MORPHTARGETS_TEXTURE_STRIDE “+t.morphTextureStride:””,t.morphTargetsCount>0?”#define MORPHTARGETS_COUNT “+t.morphTargetsCount:””,t.doubleSided?”#define DOUBLE_SIDED”:””,t.flipSided?”#define FLIP_SIDED”:””,t.shadowMapEnabled?”#define USE_SHADOWMAP”:””,t.shadowMapEnabled?”#define “+c:””,t.sizeAttenuation?”#define USE_SIZEATTENUATION”:””,t.numLightProbes>0?”#define USE_LIGHT_PROBES”:””,t.logarithmicDepthBuffer?”#define USE_LOGARITHMIC_DEPTH_BUFFER”:””,t.reversedDepthBuffer?”#define USE_REVERSED_DEPTH_BUFFER”:””,”uniform mat4 modelMatrix;”,”uniform mat4 modelViewMatrix;”,”uniform mat4 projectionMatrix;”,”uniform mat4 viewMatrix;”,”uniform mat3 normalMatrix;”,”uniform vec3 cameraPosition;”,”uniform bool isOrthographic;”,”#ifdef USE_INSTANCING”,” attribute mat4 instanceMatrix;”,”#endif”,”#ifdef USE_INSTANCING_COLOR”,” attribute vec3 instanceColor;”,”#endif”,”#ifdef USE_INSTANCING_MORPH”,” uniform sampler2D morphTexture;”,”#endif”,”attribute vec3 position;”,”attribute vec3 normal;”,”attribute vec2 uv;”,”#ifdef USE_UV1″,” attribute vec2 uv1;”,”#endif”,”#ifdef USE_UV2″,” attribute vec2 uv2;”,”#endif”,”#ifdef USE_UV3″,” attribute vec2 uv3;”,”#endif”,”#ifdef USE_TANGENT”,” attribute vec4 tangent;”,”#endif”,”#if defined( USE_COLOR_ALPHA )”,” attribute vec4 color;”,”#elif defined( USE_COLOR )”,” attribute vec3 color;”,”#endif”,”#ifdef USE_SKINNING”,” attribute vec4 skinIndex;”,” attribute vec4 skinWeight;”,”#endif”,`
`].filter(Ma).join(`
`),d=[pd(t),”#define SHADER_TYPE “+t.shaderType,”#define SHADER_NAME “+t.shaderName,m,t.useFog&&t.fog?”#define USE_FOG”:””,t.useFog&&t.fogExp2?”#define FOG_EXP2″:””,t.alphaToCoverage?”#define ALPHA_TO_COVERAGE”:””,t.map?”#define USE_MAP”:””,t.matcap?”#define USE_MATCAP”:””,t.envMap?”#define USE_ENVMAP”:””,t.envMap?”#define “+l:””,t.envMap?”#define “+h:””,t.envMap?”#define “+u:””,f?”#define CUBEUV_TEXEL_WIDTH “+f.texelWidth:””,f?”#define CUBEUV_TEXEL_HEIGHT “+f.texelHeight:””,f?”#define CUBEUV_MAX_MIP “+f.maxMip+”.0″:””,t.lightMap?”#define USE_LIGHTMAP”:””,t.aoMap?”#define USE_AOMAP”:””,t.bumpMap?”#define USE_BUMPMAP”:””,t.normalMap?”#define USE_NORMALMAP”:””,t.normalMapObjectSpace?”#define USE_NORMALMAP_OBJECTSPACE”:””,t.normalMapTangentSpace?”#define USE_NORMALMAP_TANGENTSPACE”:””,t.emissiveMap?”#define USE_EMISSIVEMAP”:””,t.anisotropy?”#define USE_ANISOTROPY”:””,t.anisotropyMap?”#define USE_ANISOTROPYMAP”:””,t.clearcoat?”#define USE_CLEARCOAT”:””,t.clearcoatMap?”#define USE_CLEARCOATMAP”:””,t.clearcoatRoughnessMap?”#define USE_CLEARCOAT_ROUGHNESSMAP”:””,t.clearcoatNormalMap?”#define USE_CLEARCOAT_NORMALMAP”:””,t.dispersion?”#define USE_DISPERSION”:””,t.iridescence?”#define USE_IRIDESCENCE”:””,t.iridescenceMap?”#define USE_IRIDESCENCEMAP”:””,t.iridescenceThicknessMap?”#define USE_IRIDESCENCE_THICKNESSMAP”:””,t.specularMap?”#define USE_SPECULARMAP”:””,t.specularColorMap?”#define USE_SPECULAR_COLORMAP”:””,t.specularIntensityMap?”#define USE_SPECULAR_INTENSITYMAP”:””,t.roughnessMap?”#define USE_ROUGHNESSMAP”:””,t.metalnessMap?”#define USE_METALNESSMAP”:””,t.alphaMap?”#define USE_ALPHAMAP”:””,t.alphaTest?”#define USE_ALPHATEST”:””,t.alphaHash?”#define USE_ALPHAHASH”:””,t.sheen?”#define USE_SHEEN”:””,t.sheenColorMap?”#define USE_SHEEN_COLORMAP”:””,t.sheenRoughnessMap?”#define USE_SHEEN_ROUGHNESSMAP”:””,t.transmission?”#define USE_TRANSMISSION”:””,t.transmissionMap?”#define USE_TRANSMISSIONMAP”:””,t.thicknessMap?”#define USE_THICKNESSMAP”:””,t.vertexTangents&&t.flatShading===!1?”#define USE_TANGENT”:””,t.vertexColors||t.instancingColor||t.batchingColor?”#define USE_COLOR”:””,t.vertexAlphas?”#define USE_COLOR_ALPHA”:””,t.vertexUv1s?”#define USE_UV1″:””,t.vertexUv2s?”#define USE_UV2″:””,t.vertexUv3s?”#define USE_UV3″:””,t.pointsUvs?”#define USE_POINTS_UV”:””,t.gradientMap?”#define USE_GRADIENTMAP”:””,t.flatShading?”#define FLAT_SHADED”:””,t.doubleSided?”#define DOUBLE_SIDED”:””,t.flipSided?”#define FLIP_SIDED”:””,t.shadowMapEnabled?”#define USE_SHADOWMAP”:””,t.shadowMapEnabled?”#define “+c:””,t.premultipliedAlpha?”#define PREMULTIPLIED_ALPHA”:””,t.numLightProbes>0?”#define USE_LIGHT_PROBES”:””,t.decodeVideoTexture?”#define DECODE_VIDEO_TEXTURE”:””,t.decodeVideoTextureEmissive?”#define DECODE_VIDEO_TEXTURE_EMISSIVE”:””,t.logarithmicDepthBuffer?”#define USE_LOGARITHMIC_DEPTH_BUFFER”:””,t.reversedDepthBuffer?”#define USE_REVERSED_DEPTH_BUFFER”:””,”uniform mat4 viewMatrix;”,”uniform vec3 cameraPosition;”,”uniform bool isOrthographic;”,t.toneMapping!==An?”#define TONE_MAPPING”:””,t.toneMapping!==An?Ve.tonemapping_pars_fragment:””,t.toneMapping!==An?vb(“toneMapping”,t.toneMapping):””,t.dithering?”#define DITHERING”:””,t.opaque?”#define OPAQUE”:””,Ve.colorspace_pars_fragment,Eb(“linearToOutputTexel”,t.outputColorSpace),Sb(),t.useDepthPacking?”#define DEPTH_PACKING “+t.depthPacking:””,`
`].filter(Ma).join(`
`)),a=rh(a),a=ud(a,t),a=fd(a,t),o=rh(o),o=ud(o,t),o=fd(o,t),a=dd(a),o=dd(o),t.isRawShaderMaterial!==!0&&(S=`#version 300 es
`,A=[p,”#define attribute in”,”#define varying out”,”#define texture2D texture”].join(`
`)+`
`+A,d=[“#define varying in”,t.glslVersion===zl?””:”layout(location = 0) out highp vec4 pc_fragColor;”,t.glslVersion===zl?””:”#define gl_FragColor pc_fragColor”,”#define gl_FragDepthEXT gl_FragDepth”,”#define texture2D texture”,”#define textureCube texture”,”#define texture2DProj textureProj”,”#define texture2DLodEXT textureLod”,”#define texture2DProjLodEXT textureProjLod”,”#define textureCubeLodEXT textureLod”,”#define texture2DGradEXT textureGrad”,”#define texture2DProjGradEXT textureProjGrad”,”#define textureCubeGradEXT textureGrad”].join(`
`)+`
`+d);let v=S+A+a,b=S+d+o,M=cd(s,s.VERTEX_SHADER,v),I=cd(s,s.FRAGMENT_SHADER,b);s.attachShader(g,M),s.attachShader(g,I),t.index0AttributeName!==void 0?s.bindAttribLocation(g,0,t.index0AttributeName):t.morphTargets===!0&&s.bindAttribLocation(g,0,”position”),s.linkProgram(g);function R(T){if(n.debug.checkShaderErrors){let U=s.getProgramInfoLog(g)||””,Q=s.getShaderInfoLog(M)||””,N=s.getShaderInfoLog(I)||””,V=U.trim(),k=Q.trim(),j=N.trim(),z=!0,ie=!0;if(s.getProgramParameter(g,s.LINK_STATUS)===!1)if(z=!1,typeof n.debug.onShaderError==”function”)n.debug.onShaderError(s,g,M,I);else{let se=hd(s,M,”vertex”),ae=hd(s,I,”fragment”);console.error(“THREE.WebGLProgram: Shader Error “+s.getError()+” – VALIDATE_STATUS “+s.getProgramParameter(g,s.VALIDATE_STATUS)+`
Material Name: `+T.name+`
Material Type: `+T.type+`
Program Info Log: `+V+`
`+se+`
`+ae)}else V!==””?console.warn(“THREE.WebGLProgram: Program Info Log:”,V):(k===””||j===””)&&(ie=!1);ie&&(T.diagnostics={runnable:z,programLog:V,vertexShader:{log:k,prefix:A},fragmentShader:{log:j,prefix:d}})}s.deleteShader(M),s.deleteShader(I),B=new Br(s,g),E=Ib(s,g)}let B;this.getUniforms=function(){return B===void 0&&R(this),B};let E;this.getAttributes=function(){return E===void 0&&R(this),E};let _=t.rendererExtensionParallelShaderCompile===!1;return this.isReady=function(){return _===!1&&(_=s.getProgramParameter(g,xb)),_},this.destroy=function(){i.releaseStatesOfProgram(this),s.deleteProgram(g),this.program=void 0},this.type=t.shaderType,this.name=t.shaderName,this.id=bb++,this.cacheKey=e,this.usedTimes=1,this.program=g,this.vertexShader=M,this.fragmentShader=I,this}var Qb=0,ah=class{constructor(){this.shaderCache=new Map,this.materialCache=new Map}update(e){let t=e.vertexShader,i=e.fragmentShader,s=this._getShaderStage(t),r=this._getShaderStage(i),a=this._getShaderCacheForMaterial(e);return a.has(s)===!1&&(a.add(s),s.usedTimes++),a.has(r)===!1&&(a.add(r),r.usedTimes++),this}remove(e){let t=this.materialCache.get(e);for(let i of t)i.usedTimes–,i.usedTimes===0&&this.shaderCache.delete(i.code);return this.materialCache.delete(e),this}getVertexShaderID(e){return this._getShaderStage(e.vertexShader).id}getFragmentShaderID(e){return this._getShaderStage(e.fragmentShader).id}dispose(){this.shaderCache.clear(),this.materialCache.clear()}_getShaderCacheForMaterial(e){let t=this.materialCache,i=t.get(e);return i===void 0&&(i=new Set,t.set(e,i)),i}_getShaderStage(e){let t=this.shaderCache,i=t.get(e);return i===void 0&&(i=new oh(e),t.set(e,i)),i}},oh=class{constructor(e){this.id=Qb++,this.code=e,this.usedTimes=0}};function kb(n,e,t,i,s,r,a){let o=new rr,c=new ah,l=new Set,h=[],u=s.logarithmicDepthBuffer,f=s.vertexTextures,p=s.precision,m={MeshDepthMaterial:”depth”,MeshDistanceMaterial:”distanceRGBA”,MeshNormalMaterial:”normal”,MeshBasicMaterial:”basic”,MeshLambertMaterial:”lambert”,MeshPhongMaterial:”phong”,MeshToonMaterial:”toon”,MeshStandardMaterial:”physical”,MeshPhysicalMaterial:”physical”,MeshMatcapMaterial:”matcap”,LineBasicMaterial:”basic”,LineDashedMaterial:”dashed”,PointsMaterial:”points”,ShadowMaterial:”shadow”,SpriteMaterial:”sprite”};function g(E){return l.add(E),E===0?”uv”:`uv${E}`}function A(E,_,T,U,Q){let N=U.fog,V=Q.geometry,k=E.isMeshStandardMaterial?U.environment:null,j=(E.isMeshStandardMaterial?t:e).get(E.envMap||k),z=j&&j.mapping===va?j.image.height:null,ie=m[E.type];E.precision!==null&&(p=s.getMaxPrecision(E.precision),p!==E.precision&&console.warn(“THREE.WebGLProgram.getParameters:”,E.precision,”not supported, using”,p,”instead.”));let se=V.morphAttributes.position||V.morphAttributes.normal||V.morphAttributes.color,ae=se!==void 0?se.length:0,fe=0;V.morphAttributes.position!==void 0&&(fe=1),V.morphAttributes.normal!==void 0&&(fe=2),V.morphAttributes.color!==void 0&&(fe=3);let Re,Je,et,q;if(ie){let tt=Xi[ie];Re=tt.vertexShader,Je=tt.fragmentShader}else Re=E.vertexShader,Je=E.fragmentShader,c.update(E),et=c.getVertexShaderID(E),q=c.getFragmentShaderID(E);let J=n.getRenderTarget(),me=n.state.buffers.depth.getReversed(),Le=Q.isInstancedMesh===!0,Me=Q.isBatchedMesh===!0,qe=!!E.map,Nt=!!E.matcap,w=!!j,pt=!!E.aoMap,Ne=!!E.lightMap,De=!!E.bumpMap,be=!!E.normalMap,At=!!E.displacementMap,_e=!!E.emissiveMap,ke=!!E.metalnessMap,Pt=!!E.roughnessMap,Ct=E.anisotropy>0,C=E.clearcoat>0,x=E.dispersion>0,O=E.iridescence>0,K=E.sheen>0,Y=E.transmission>0,W=Ct&&!!E.anisotropyMap,Se=C&&!!E.clearcoatMap,ne=C&&!!E.clearcoatNormalMap,ye=C&&!!E.clearcoatRoughnessMap,Ee=O&&!!E.iridescenceMap,ee=O&&!!E.iridescenceThicknessMap,he=K&&!!E.sheenColorMap,Be=K&&!!E.sheenRoughnessMap,ve=!!E.specularMap,ce=!!E.specularColorMap,Oe=!!E.specularIntensityMap,F=Y&&!!E.transmissionMap,te=Y&&!!E.thicknessMap,re=!!E.gradientMap,Ae=!!E.alphaMap,Z=E.alphaTest>0,X=!!E.alphaHash,xe=!!E.extensions,Ue=An;E.toneMapped&&(J===null||J.isXRRenderTarget===!0)&&(Ue=n.toneMapping);let ht={shaderID:ie,shaderType:E.type,shaderName:E.name,vertexShader:Re,fragmentShader:Je,defines:E.defines,customVertexShaderID:et,customFragmentShaderID:q,isRawShaderMaterial:E.isRawShaderMaterial===!0,glslVersion:E.glslVersion,precision:p,batching:Me,batchingColor:Me&&Q._colorsTexture!==null,instancing:Le,instancingColor:Le&&Q.instanceColor!==null,instancingMorph:Le&&Q.morphTexture!==null,supportsVertexTextures:f,outputColorSpace:J===null?n.outputColorSpace:J.isXRRenderTarget===!0?J.texture.colorSpace:Mt,alphaToCoverage:!!E.alphaToCoverage,map:qe,matcap:Nt,envMap:w,envMapMode:w&&j.mapping,envMapCubeUVHeight:z,aoMap:pt,lightMap:Ne,bumpMap:De,normalMap:be,displacementMap:f&&At,emissiveMap:_e,normalMapObjectSpace:be&&E.normalMapType===Uf,normalMapTangentSpace:be&&E.normalMapType===Gl,metalnessMap:ke,roughnessMap:Pt,anisotropy:Ct,anisotropyMap:W,clearcoat:C,clearcoatMap:Se,clearcoatNormalMap:ne,clearcoatRoughnessMap:ye,dispersion:x,iridescence:O,iridescenceMap:Ee,iridescenceThicknessMap:ee,sheen:K,sheenColorMap:he,sheenRoughnessMap:Be,specularMap:ve,specularColorMap:ce,specularIntensityMap:Oe,transmission:Y,transmissionMap:F,thicknessMap:te,gradientMap:re,opaque:E.transparent===!1&&E.blending===cs&&E.alphaToCoverage===!1,alphaMap:Ae,alphaTest:Z,alphaHash:X,combine:E.combine,mapUv:qe&&g(E.map.channel),aoMapUv:pt&&g(E.aoMap.channel),lightMapUv:Ne&&g(E.lightMap.channel),bumpMapUv:De&&g(E.bumpMap.channel),normalMapUv:be&&g(E.normalMap.channel),displacementMapUv:At&&g(E.displacementMap.channel),emissiveMapUv:_e&&g(E.emissiveMap.channel),metalnessMapUv:ke&&g(E.metalnessMap.channel),roughnessMapUv:Pt&&g(E.roughnessMap.channel),anisotropyMapUv:W&&g(E.anisotropyMap.channel),clearcoatMapUv:Se&&g(E.clearcoatMap.channel),clearcoatNormalMapUv:ne&&g(E.clearcoatNormalMap.channel),clearcoatRoughnessMapUv:ye&&g(E.clearcoatRoughnessMap.channel),iridescenceMapUv:Ee&&g(E.iridescenceMap.channel),iridescenceThicknessMapUv:ee&&g(E.iridescenceThicknessMap.channel),sheenColorMapUv:he&&g(E.sheenColorMap.channel),sheenRoughnessMapUv:Be&&g(E.sheenRoughnessMap.channel),specularMapUv:ve&&g(E.specularMap.channel),specularColorMapUv:ce&&g(E.specularColorMap.channel),specularIntensityMapUv:Oe&&g(E.specularIntensityMap.channel),transmissionMapUv:F&&g(E.transmissionMap.channel),thicknessMapUv:te&&g(E.thicknessMap.channel),alphaMapUv:Ae&&g(E.alphaMap.channel),vertexTangents:!!V.attributes.tangent&&(be||Ct),vertexColors:E.vertexColors,vertexAlphas:E.vertexColors===!0&&!!V.attributes.color&&V.attributes.color.itemSize===4,pointsUvs:Q.isPoints===!0&&!!V.attributes.uv&&(qe||Ae),fog:!!N,useFog:E.fog===!0,fogExp2:!!N&&N.isFogExp2,flatShading:E.flatShading===!0&&E.wireframe===!1,sizeAttenuation:E.sizeAttenuation===!0,logarithmicDepthBuffer:u,reversedDepthBuffer:me,skinning:Q.isSkinnedMesh===!0,morphTargets:V.morphAttributes.position!==void 0,morphNormals:V.morphAttributes.normal!==void 0,morphColors:V.morphAttributes.color!==void 0,morphTargetsCount:ae,morphTextureStride:fe,numDirLights:_.directional.length,numPointLights:_.point.length,numSpotLights:_.spot.length,numSpotLightMaps:_.spotLightMap.length,numRectAreaLights:_.rectArea.length,numHemiLights:_.hemi.length,numDirLightShadows:_.directionalShadowMap.length,numPointLightShadows:_.pointShadowMap.length,numSpotLightShadows:_.spotShadowMap.length,numSpotLightShadowsWithMaps:_.numSpotLightShadowsWithMaps,numLightProbes:_.numLightProbes,numClippingPlanes:a.numPlanes,numClipIntersection:a.numIntersection,dithering:E.dithering,shadowMapEnabled:n.shadowMap.enabled&&T.length>0,shadowMapType:n.shadowMap.type,toneMapping:Ue,decodeVideoTexture:qe&&E.map.isVideoTexture===!0&&Ge.getTransfer(E.map.colorSpace)===Ze,decodeVideoTextureEmissive:_e&&E.emissiveMap.isVideoTexture===!0&&Ge.getTransfer(E.emissiveMap.colorSpace)===Ze,premultipliedAlpha:E.premultipliedAlpha,doubleSided:E.side===ai,flipSided:E.side===Xt,useDepthPacking:E.depthPacking>=0,depthPacking:E.depthPacking||0,index0AttributeName:E.index0AttributeName,extensionClipCullDistance:xe&&E.extensions.clipCullDistance===!0&&i.has(“WEBGL_clip_cull_distance”),extensionMultiDraw:(xe&&E.extensions.multiDraw===!0||Me)&&i.has(“WEBGL_multi_draw”),rendererExtensionParallelShaderCompile:i.has(“KHR_parallel_shader_compile”),customProgramCacheKey:E.customProgramCacheKey()};return ht.vertexUv1s=l.has(1),ht.vertexUv2s=l.has(2),ht.vertexUv3s=l.has(3),l.clear(),ht}function d(E){let _=[];if(E.shaderID?_.push(E.shaderID):(_.push(E.customVertexShaderID),_.push(E.customFragmentShaderID)),E.defines!==void 0)for(let T in E.defines)_.push(T),_.push(E.defines[T]);return E.isRawShaderMaterial===!1&&(S(_,E),v(_,E),_.push(n.outputColorSpace)),_.push(E.customProgramCacheKey),_.join()}function S(E,_){E.push(_.precision),E.push(_.outputColorSpace),E.push(_.envMapMode),E.push(_.envMapCubeUVHeight),E.push(_.mapUv),E.push(_.alphaMapUv),E.push(_.lightMapUv),E.push(_.aoMapUv),E.push(_.bumpMapUv),E.push(_.normalMapUv),E.push(_.displacementMapUv),E.push(_.emissiveMapUv),E.push(_.metalnessMapUv),E.push(_.roughnessMapUv),E.push(_.anisotropyMapUv),E.push(_.clearcoatMapUv),E.push(_.clearcoatNormalMapUv),E.push(_.clearcoatRoughnessMapUv),E.push(_.iridescenceMapUv),E.push(_.iridescenceThicknessMapUv),E.push(_.sheenColorMapUv),E.push(_.sheenRoughnessMapUv),E.push(_.specularMapUv),E.push(_.specularColorMapUv),E.push(_.specularIntensityMapUv),E.push(_.transmissionMapUv),E.push(_.thicknessMapUv),E.push(_.combine),E.push(_.fogExp2),E.push(_.sizeAttenuation),E.push(_.morphTargetsCount),E.push(_.morphAttributeCount),E.push(_.numDirLights),E.push(_.numPointLights),E.push(_.numSpotLights),E.push(_.numSpotLightMaps),E.push(_.numHemiLights),E.push(_.numRectAreaLights),E.push(_.numDirLightShadows),E.push(_.numPointLightShadows),E.push(_.numSpotLightShadows),E.push(_.numSpotLightShadowsWithMaps),E.push(_.numLightProbes),E.push(_.shadowMapType),E.push(_.toneMapping),E.push(_.numClippingPlanes),E.push(_.numClipIntersection),E.push(_.depthPacking)}function v(E,_){o.disableAll(),_.supportsVertexTextures&&o.enable(0),_.instancing&&o.enable(1),_.instancingColor&&o.enable(2),_.instancingMorph&&o.enable(3),_.matcap&&o.enable(4),_.envMap&&o.enable(5),_.normalMapObjectSpace&&o.enable(6),_.normalMapTangentSpace&&o.enable(7),_.clearcoat&&o.enable(8),_.iridescence&&o.enable(9),_.alphaTest&&o.enable(10),_.vertexColors&&o.enable(11),_.vertexAlphas&&o.enable(12),_.vertexUv1s&&o.enable(13),_.vertexUv2s&&o.enable(14),_.vertexUv3s&&o.enable(15),_.vertexTangents&&o.enable(16),_.anisotropy&&o.enable(17),_.alphaHash&&o.enable(18),_.batching&&o.enable(19),_.dispersion&&o.enable(20),_.batchingColor&&o.enable(21),_.gradientMap&&o.enable(22),E.push(o.mask),o.disableAll(),_.fog&&o.enable(0),_.useFog&&o.enable(1),_.flatShading&&o.enable(2),_.logarithmicDepthBuffer&&o.enable(3),_.reversedDepthBuffer&&o.enable(4),_.skinning&&o.enable(5),_.morphTargets&&o.enable(6),_.morphNormals&&o.enable(7),_.morphColors&&o.enable(8),_.premultipliedAlpha&&o.enable(9),_.shadowMapEnabled&&o.enable(10),_.doubleSided&&o.enable(11),_.flipSided&&o.enable(12),_.useDepthPacking&&o.enable(13),_.dithering&&o.enable(14),_.transmission&&o.enable(15),_.sheen&&o.enable(16),_.opaque&&o.enable(17),_.pointsUvs&&o.enable(18),_.decodeVideoTexture&&o.enable(19),_.decodeVideoTextureEmissive&&o.enable(20),_.alphaToCoverage&&o.enable(21),E.push(o.mask)}function b(E){let _=m[E.type],T;if(_){let U=Xi[_];T=Tr.clone(U.uniforms)}else T=E.uniforms;return T}function M(E,_){let T;for(let U=0,Q=h.length;U0?i.push(d):p.transparent===!0?s.push(d):t.push(d)}function c(u,f,p,m,g,A){let d=a(u,f,p,m,g,A);p.transmission>0?i.unshift(d):p.transparent===!0?s.unshift(d):t.unshift(d)}function l(u,f){t.length>1&&t.sort(u||Hb),i.length>1&&i.sort(f||Ad),s.length>1&&s.sort(f||Ad)}function h(){for(let u=e,f=n.length;u=r.length?(a=new md,r.push(a)):a=r[s],a}function t(){n=new WeakMap}return{get:e,dispose:t}}function Vb(){let n={};return{get:function(e){if(n[e.id]!==void 0)return n[e.id];let t;switch(e.type){case”DirectionalLight”:t={direction:new D,color:new Ce};break;case”SpotLight”:t={position:new D,direction:new D,color:new Ce,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case”PointLight”:t={position:new D,color:new Ce,distance:0,decay:0};break;case”HemisphereLight”:t={direction:new D,skyColor:new Ce,groundColor:new Ce};break;case”RectAreaLight”:t={color:new Ce,position:new D,halfWidth:new D,halfHeight:new D};break}return n[e.id]=t,t}}}function Wb(){let n={};return{get:function(e){if(n[e.id]!==void 0)return n[e.id];let t;switch(e.type){case”DirectionalLight”:t={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new ue};break;case”SpotLight”:t={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new ue};break;case”PointLight”:t={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new ue,shadowCameraNear:1,shadowCameraFar:1e3};break}return n[e.id]=t,t}}}var Kb=0;function qb(n,e){return(e.castShadow?2:0)-(n.castShadow?2:0)+(e.map?1:0)-(n.map?1:0)}function Xb(n){let e=new Vb,t=Wb(),i={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1,numLightProbes:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotLightMap:[],spotShadow:[],spotShadowMap:[],spotLightMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],numSpotLightShadowsWithMaps:0,numLightProbes:0};for(let l=0;l<9;l++)i.probe.push(new D);let s=new D,r=new pe,a=new pe;function o(l){let h=0,u=0,f=0;for(let E=0;E<9;E++)i.probe[E].set(0,0,0);let p=0,m=0,g=0,A=0,d=0,S=0,v=0,b=0,M=0,I=0,R=0;l.sort(qb);for(let E=0,_=l.length;E<_;E++){let T=l[E],U=T.color,Q=T.intensity,N=T.distance,V=T.shadow&&T.shadow.map?T.shadow.map.texture:null;if(T.isAmbientLight)h+=U.r*Q,u+=U.g*Q,f+=U.b*Q;else if(T.isLightProbe){for(let k=0;k0&&(n.has(“OES_texture_float_linear”)===!0?(i.rectAreaLTC1=oe.LTC_FLOAT_1,i.rectAreaLTC2=oe.LTC_FLOAT_2):(i.rectAreaLTC1=oe.LTC_HALF_1,i.rectAreaLTC2=oe.LTC_HALF_2)),i.ambient[0]=h,i.ambient[1]=u,i.ambient[2]=f;let B=i.hash;(B.directionalLength!==p||B.pointLength!==m||B.spotLength!==g||B.rectAreaLength!==A||B.hemiLength!==d||B.numDirectionalShadows!==S||B.numPointShadows!==v||B.numSpotShadows!==b||B.numSpotMaps!==M||B.numLightProbes!==R)&&(i.directional.length=p,i.spot.length=g,i.rectArea.length=A,i.point.length=m,i.hemi.length=d,i.directionalShadow.length=S,i.directionalShadowMap.length=S,i.pointShadow.length=v,i.pointShadowMap.length=v,i.spotShadow.length=b,i.spotShadowMap.length=b,i.directionalShadowMatrix.length=S,i.pointShadowMatrix.length=v,i.spotLightMatrix.length=b+M-I,i.spotLightMap.length=M,i.numSpotLightShadowsWithMaps=I,i.numLightProbes=R,B.directionalLength=p,B.pointLength=m,B.spotLength=g,B.rectAreaLength=A,B.hemiLength=d,B.numDirectionalShadows=S,B.numPointShadows=v,B.numSpotShadows=b,B.numSpotMaps=M,B.numLightProbes=R,i.version=Kb++)}function c(l,h){let u=0,f=0,p=0,m=0,g=0,A=h.matrixWorldInverse;for(let d=0,S=l.length;d=a.length?(o=new gd(n),a.push(o)):o=a[r],o}function i(){e=new WeakMap}return{get:t,dispose:i}}var Jb=`void main() {
gl_Position = vec4( position, 1.0 );
}`,jb=`uniform sampler2D shadow_pass;
uniform vec2 resolution;
uniform float radius;
#include
void main() {
const float samples = float( VSM_SAMPLES );
float mean = 0.0;
float squared_mean = 0.0;
float uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples – 1.0 );
float uvStart = samples <= 1.0 ? 0.0 : – 1.0;
for ( float i = 0.0; i < samples; i ++ ) {
float uvOffset = uvStart + i * uvStride;
#ifdef HORIZONTAL_PASS
vec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );
mean += distribution.x;
squared_mean += distribution.y * distribution.y + distribution.x * distribution.x;
#else
float depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );
mean += depth;
squared_mean += depth * depth;
#endif
}
mean = mean / samples;
squared_mean = squared_mean / samples;
float std_dev = sqrt( squared_mean – mean * mean );
gl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );
}`;function Zb(n,e,t){let i=new lr,s=new ue,r=new ue,a=new Xe,o=new xo({depthPacking:Pf}),c=new bo,l={},h=t.maxTextureSize,u={[Li]:Xt,[Xt]:Li,[ai]:ai},f=new ft({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new ue},radius:{value:4}},vertexShader:Jb,fragmentShader:jb}),p=f.clone();p.defines.HORIZONTAL_PASS=1;let m=new Rt;m.setAttribute("position",new _t(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));let g=new yt(m,f),A=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=Bl;let d=this.type;this.render=function(I,R,B){if(A.enabled===!1||A.autoUpdate===!1&&A.needsUpdate===!1||I.length===0)return;let E=n.getRenderTarget(),_=n.getActiveCubeFace(),T=n.getActiveMipmapLevel(),U=n.state;U.setBlending(Oi),U.buffers.depth.getReversed()===!0?U.buffers.color.setClear(0,0,0,0):U.buffers.color.setClear(1,1,1,1),U.buffers.depth.setTest(!0),U.setScissorTest(!1);let Q=d!==qi&&this.type===qi,N=d===qi&&this.type!==qi;for(let V=0,k=I.length;Vh||s.y>h)&&(s.x>h&&(r.x=Math.floor(h/ie.x),s.x=r.x*ie.x,z.mapSize.x=r.x),s.y>h&&(r.y=Math.floor(h/ie.y),s.y=r.y*ie.y,z.mapSize.y=r.y)),z.map===null||Q===!0||N===!0){let ae=this.type!==qi?{minFilter:$e,magFilter:$e}:{};z.map!==null&&z.map.dispose(),z.map=new St(s.x,s.y,ae),z.map.texture.name=j.name+”.shadowMap”,z.camera.updateProjectionMatrix()}n.setRenderTarget(z.map),n.clear();let se=z.getViewportCount();for(let ae=0;ae0||R.map&&R.alphaTest>0||R.alphaToCoverage===!0){let U=_.uuid,Q=R.uuid,N=l[U];N===void 0&&(N={},l[U]=N);let V=N[Q];V===void 0&&(V=_.clone(),N[Q]=V,R.addEventListener(“dispose”,M)),_=V}if(_.visible=R.visible,_.wireframe=R.wireframe,E===qi?_.side=R.shadowSide!==null?R.shadowSide:R.side:_.side=R.shadowSide!==null?R.shadowSide:u[R.side],_.alphaMap=R.alphaMap,_.alphaTest=R.alphaToCoverage===!0?.5:R.alphaTest,_.map=R.map,_.clipShadows=R.clipShadows,_.clippingPlanes=R.clippingPlanes,_.clipIntersection=R.clipIntersection,_.displacementMap=R.displacementMap,_.displacementScale=R.displacementScale,_.displacementBias=R.displacementBias,_.wireframeLinewidth=R.wireframeLinewidth,_.linewidth=R.linewidth,B.isPointLight===!0&&_.isMeshDistanceMaterial===!0){let U=n.properties.get(_);U.light=B}return _}function b(I,R,B,E,_){if(I.visible===!1)return;if(I.layers.test(R.layers)&&(I.isMesh||I.isLine||I.isPoints)&&(I.castShadow||I.receiveShadow&&_===qi)&&(!I.frustumCulled||i.intersectsObject(I))){I.modelViewMatrix.multiplyMatrices(B.matrixWorldInverse,I.matrixWorld);let Q=e.update(I),N=I.material;if(Array.isArray(N)){let V=Q.groups;for(let k=0,j=V.length;k<j;k++){let z=V[k],ie=N[z.materialIndex];if(ie&&ie.visible){let se=v(I,ie,E,_);I.onBeforeShadow(n,I,R,B,Q,se,z),n.renderBufferDirect(B,null,Q,se,I,z),I.onAfterShadow(n,I,R,B,Q,se,z)}}}else if(N.visible){let V=v(I,N,E,_);I.onBeforeShadow(n,I,R,B,Q,V,null),n.renderBufferDirect(B,null,Q,V,I,null),I.onAfterShadow(n,I,R,B,Q,V,null)}}let U=I.children;for(let Q=0,N=U.length;Q=1):z.indexOf(“OpenGL ES”)!==-1&&(j=parseFloat(/^OpenGL ES (d)/.exec(z)[1]),k=j>=2);let ie=null,se={},ae=n.getParameter(n.SCISSOR_BOX),fe=n.getParameter(n.VIEWPORT),Re=new Xe().fromArray(ae),Je=new Xe().fromArray(fe);function et(F,te,re,Ae){let Z=new Uint8Array(4),X=n.createTexture();n.bindTexture(F,X),n.texParameteri(F,n.TEXTURE_MIN_FILTER,n.NEAREST),n.texParameteri(F,n.TEXTURE_MAG_FILTER,n.NEAREST);for(let xe=0;xe<re;xe++)F===n.TEXTURE_3D||F===n.TEXTURE_2D_ARRAY?n.texImage3D(te,0,n.RGBA,1,1,Ae,0,n.RGBA,n.UNSIGNED_BYTE,Z):n.texImage2D(te+xe,0,n.RGBA,1,1,0,n.RGBA,n.UNSIGNED_BYTE,Z);return X}let q={};q[n.TEXTURE_2D]=et(n.TEXTURE_2D,n.TEXTURE_2D,1),q[n.TEXTURE_CUBE_MAP]=et(n.TEXTURE_CUBE_MAP,n.TEXTURE_CUBE_MAP_POSITIVE_X,6),q[n.TEXTURE_2D_ARRAY]=et(n.TEXTURE_2D_ARRAY,n.TEXTURE_2D_ARRAY,1,1),q[n.TEXTURE_3D]=et(n.TEXTURE_3D,n.TEXTURE_3D,1,1),r.setClear(0,0,0,1),a.setClear(1),o.setClear(0),J(n.DEPTH_TEST),a.setFunc(ls),De(!1),be(Rl),J(n.CULL_FACE),pt(Oi);function J(F){h[F]!==!0&&(n.enable(F),h[F]=!0)}function me(F){h[F]!==!1&&(n.disable(F),h[F]=!1)}function Le(F,te){return u[F]!==te?(n.bindFramebuffer(F,te),u[F]=te,F===n.DRAW_FRAMEBUFFER&&(u[n.FRAMEBUFFER]=te),F===n.FRAMEBUFFER&&(u[n.DRAW_FRAMEBUFFER]=te),!0):!1}function Me(F,te){let re=p,Ae=!1;if(F){re=f.get(te),re===void 0&&(re=[],f.set(te,re));let Z=F.textures;if(re.length!==Z.length||re[0]!==n.COLOR_ATTACHMENT0){for(let X=0,xe=Z.length;X”u”?!1:/OculusBrowser/g.test(navigator.userAgent),l=new ue,h=new WeakMap,u,f=new WeakMap,p=!1;try{p=typeof OffscreenCanvasO||Y.height>O)&&(K=O/Math.max(Y.width,Y.height)),K<1)if(typeof HTMLImageElement<"u"&&C instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&C instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&C instanceof ImageBitmap||typeof VideoFrame0?C.mipmaps.length:C.isCompressedTexture&&Array.isArray(C.image)?x.mipmaps.length:1}function I(C){let x=C.target;x.removeEventListener(“dispose”,I),B(x),x.isVideoTexture&&h.delete(x)}function R(C){let x=C.target;x.removeEventListener(“dispose”,R),_(x)}function B(C){let x=i.get(C);if(x.__webglInit===void 0)return;let O=C.source,K=f.get(O);if(K){let Y=K[x.__cacheKey];Y.usedTimes–,Y.usedTimes===0&&E(C),Object.keys(K).length===0&&f.delete(O)}i.remove(C)}function E(C){let x=i.get(C);n.deleteTexture(x.__webglTexture);let O=C.source,K=f.get(O);delete K[x.__cacheKey],a.memory.textures–}function _(C){let x=i.get(C);if(C.depthTexture&&(C.depthTexture.dispose(),i.remove(C.depthTexture)),C.isWebGLCubeRenderTarget)for(let K=0;K<6;K++){if(Array.isArray(x.__webglFramebuffer[K]))for(let Y=0;Y<x.__webglFramebuffer[K].length;Y++)n.deleteFramebuffer(x.__webglFramebuffer[K][Y]);else n.deleteFramebuffer(x.__webglFramebuffer[K]);x.__webglDepthbuffer&&n.deleteRenderbuffer(x.__webglDepthbuffer[K])}else{if(Array.isArray(x.__webglFramebuffer))for(let K=0;K<x.__webglFramebuffer.length;K++)n.deleteFramebuffer(x.__webglFramebuffer[K]);else n.deleteFramebuffer(x.__webglFramebuffer);if(x.__webglDepthbuffer&&n.deleteRenderbuffer(x.__webglDepthbuffer),x.__webglMultisampledFramebuffer&&n.deleteFramebuffer(x.__webglMultisampledFramebuffer),x.__webglColorRenderbuffer)for(let K=0;K<x.__webglColorRenderbuffer.length;K++)x.__webglColorRenderbuffer[K]&&n.deleteRenderbuffer(x.__webglColorRenderbuffer[K]);x.__webglDepthRenderbuffer&&n.deleteRenderbuffer(x.__webglDepthRenderbuffer)}let O=C.textures;for(let K=0,Y=O.length;K=s.maxTextures&&console.warn(“THREE.WebGLTextures: Trying to use “+C+” texture units while this GPU supports only “+s.maxTextures),T+=1,C}function N(C){let x=[];return x.push(C.wrapS),x.push(C.wrapT),x.push(C.wrapR||0),x.push(C.magFilter),x.push(C.minFilter),x.push(C.anisotropy),x.push(C.internalFormat),x.push(C.format),x.push(C.type),x.push(C.generateMipmaps),x.push(C.premultiplyAlpha),x.push(C.flipY),x.push(C.unpackAlignment),x.push(C.colorSpace),x.join()}function V(C,x){let O=i.get(C);if(C.isVideoTexture&&ke(C),C.isRenderTargetTexture===!1&&C.isExternalTexture!==!0&&C.version>0&&O.__version!==C.version){let K=C.image;if(K===null)console.warn(“THREE.WebGLRenderer: Texture marked for update but no image data found.”);else if(K.complete===!1)console.warn(“THREE.WebGLRenderer: Texture marked for update but image is incomplete”);else{q(O,C,x);return}}else C.isExternalTexture&&(O.__webglTexture=C.sourceTexture?C.sourceTexture:null);t.bindTexture(n.TEXTURE_2D,O.__webglTexture,n.TEXTURE0+x)}function k(C,x){let O=i.get(C);if(C.isRenderTargetTexture===!1&&C.version>0&&O.__version!==C.version){q(O,C,x);return}t.bindTexture(n.TEXTURE_2D_ARRAY,O.__webglTexture,n.TEXTURE0+x)}function j(C,x){let O=i.get(C);if(C.isRenderTargetTexture===!1&&C.version>0&&O.__version!==C.version){q(O,C,x);return}t.bindTexture(n.TEXTURE_3D,O.__webglTexture,n.TEXTURE0+x)}function z(C,x){let O=i.get(C);if(C.version>0&&O.__version!==C.version){J(O,C,x);return}t.bindTexture(n.TEXTURE_CUBE_MAP,O.__webglTexture,n.TEXTURE0+x)}let ie={[Pi]:n.REPEAT,[pi]:n.CLAMP_TO_EDGE,[$s]:n.MIRRORED_REPEAT},se={[$e]:n.NEAREST,[Ar]:n.NEAREST_MIPMAP_NEAREST,[_s]:n.NEAREST_MIPMAP_LINEAR,[ze]:n.LINEAR,[mr]:n.LINEAR_MIPMAP_NEAREST,[Yt]:n.LINEAR_MIPMAP_LINEAR},ae={[Nf]:n.NEVER,[zf]:n.ALWAYS,[Of]:n.LESS,[Hl]:n.LEQUAL,[Qf]:n.EQUAL,[Hf]:n.GEQUAL,[kf]:n.GREATER,[Gf]:n.NOTEQUAL};function fe(C,x){if(x.type===mt&&e.has(“OES_texture_float_linear”)===!1&&(x.magFilter===ze||x.magFilter===mr||x.magFilter===_s||x.magFilter===Yt||x.minFilter===ze||x.minFilter===mr||x.minFilter===_s||x.minFilter===Yt)&&console.warn(“THREE.WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device.”),n.texParameteri(C,n.TEXTURE_WRAP_S,ie[x.wrapS]),n.texParameteri(C,n.TEXTURE_WRAP_T,ie[x.wrapT]),(C===n.TEXTURE_3D||C===n.TEXTURE_2D_ARRAY)&&n.texParameteri(C,n.TEXTURE_WRAP_R,ie[x.wrapR]),n.texParameteri(C,n.TEXTURE_MAG_FILTER,se[x.magFilter]),n.texParameteri(C,n.TEXTURE_MIN_FILTER,se[x.minFilter]),x.compareFunction&&(n.texParameteri(C,n.TEXTURE_COMPARE_MODE,n.COMPARE_REF_TO_TEXTURE),n.texParameteri(C,n.TEXTURE_COMPARE_FUNC,ae[x.compareFunction])),e.has(“EXT_texture_filter_anisotropic”)===!0){if(x.magFilter===$e||x.minFilter!==_s&&x.minFilter!==Yt||x.type===mt&&e.has(“OES_texture_float_linear”)===!1)return;if(x.anisotropy>1||i.get(x).__currentAnisotropy){let O=e.get(“EXT_texture_filter_anisotropic”);n.texParameterf(C,O.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(x.anisotropy,s.getMaxAnisotropy())),i.get(x).__currentAnisotropy=x.anisotropy}}}function Re(C,x){let O=!1;C.__webglInit===void 0&&(C.__webglInit=!0,x.addEventListener(“dispose”,I));let K=x.source,Y=f.get(K);Y===void 0&&(Y={},f.set(K,Y));let W=N(x);if(W!==C.__cacheKey){Y[W]===void 0&&(Y[W]={texture:n.createTexture(),usedTimes:0},a.memory.textures++,O=!0),Y[W].usedTimes++;let Se=Y[C.__cacheKey];Se!==void 0&&(Y[C.__cacheKey].usedTimes–,Se.usedTimes===0&&E(x)),C.__cacheKey=W,C.__webglTexture=Y[W].texture}return O}function Je(C,x,O){return Math.floor(Math.floor(C/O)/x)}function et(C,x,O,K){let W=C.updateRanges;if(W.length===0)t.texSubImage2D(n.TEXTURE_2D,0,0,0,x.width,x.height,O,K,x.data);else{W.sort((ee,he)=>ee.start-he.start);let Se=0;for(let ee=1;ee<W.length;ee++){let he=W[Se],Be=W[ee],ve=he.start+he.count,ce=Je(Be.start,x.width,4),Oe=Je(he.start,x.width,4);Be.start<=ve+1&&ce===Oe&&Je(Be.start+Be.count-1,x.width,4)===ce?he.count=Math.max(he.count,Be.start+Be.count-he.start):(++Se,W[Se]=Be)}W.length=Se+1;let ne=n.getParameter(n.UNPACK_ROW_LENGTH),ye=n.getParameter(n.UNPACK_SKIP_PIXELS),Ee=n.getParameter(n.UNPACK_SKIP_ROWS);n.pixelStorei(n.UNPACK_ROW_LENGTH,x.width);for(let ee=0,he=W.length;ee0){F&&te&&t.texStorage2D(n.TEXTURE_2D,Ae,ve,Oe[0].width,Oe[0].height);for(let Z=0,X=Oe.length;Z<X;Z++)ce=Oe[Z],F?re&&t.texSubImage2D(n.TEXTURE_2D,Z,0,0,ce.width,ce.height,he,Be,ce.data):t.texImage2D(n.TEXTURE_2D,Z,ve,ce.width,ce.height,0,he,Be,ce.data);x.generateMipmaps=!1}else F?(te&&t.texStorage2D(n.TEXTURE_2D,Ae,ve,ee.width,ee.height),re&&et(x,ee,he,Be)):t.texImage2D(n.TEXTURE_2D,0,ve,ee.width,ee.height,0,he,Be,ee.data);else if(x.isCompressedTexture)if(x.isCompressedArrayTexture){F&&te&&t.texStorage3D(n.TEXTURE_2D_ARRAY,Ae,ve,Oe[0].width,Oe[0].height,ee.depth);for(let Z=0,X=Oe.length;Z0){let xe=Yl(ce.width,ce.height,x.format,x.type);for(let Ue of x.layerUpdates){let ht=ce.data.subarray(Ue*xe/ce.data.BYTES_PER_ELEMENT,(Ue+1)*xe/ce.data.BYTES_PER_ELEMENT);t.compressedTexSubImage3D(n.TEXTURE_2D_ARRAY,Z,0,0,Ue,ce.width,ce.height,1,he,ht)}x.clearLayerUpdates()}else t.compressedTexSubImage3D(n.TEXTURE_2D_ARRAY,Z,0,0,0,ce.width,ce.height,ee.depth,he,ce.data)}else t.compressedTexImage3D(n.TEXTURE_2D_ARRAY,Z,ve,ce.width,ce.height,ee.depth,0,ce.data,0,0);else console.warn(“THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()”);else F?re&&t.texSubImage3D(n.TEXTURE_2D_ARRAY,Z,0,0,0,ce.width,ce.height,ee.depth,he,Be,ce.data):t.texImage3D(n.TEXTURE_2D_ARRAY,Z,ve,ce.width,ce.height,ee.depth,0,he,Be,ce.data)}else{F&&te&&t.texStorage2D(n.TEXTURE_2D,Ae,ve,Oe[0].width,Oe[0].height);for(let Z=0,X=Oe.length;Z0){let Z=Yl(ee.width,ee.height,x.format,x.type);for(let X of x.layerUpdates){let xe=ee.data.subarray(X*Z/ee.data.BYTES_PER_ELEMENT,(X+1)*Z/ee.data.BYTES_PER_ELEMENT);t.texSubImage3D(n.TEXTURE_2D_ARRAY,0,0,0,X,ee.width,ee.height,1,he,Be,xe)}x.clearLayerUpdates()}else t.texSubImage3D(n.TEXTURE_2D_ARRAY,0,0,0,0,ee.width,ee.height,ee.depth,he,Be,ee.data)}else t.texImage3D(n.TEXTURE_2D_ARRAY,0,ve,ee.width,ee.height,ee.depth,0,he,Be,ee.data);else if(x.isData3DTexture)F?(te&&t.texStorage3D(n.TEXTURE_3D,Ae,ve,ee.width,ee.height,ee.depth),re&&t.texSubImage3D(n.TEXTURE_3D,0,0,0,0,ee.width,ee.height,ee.depth,he,Be,ee.data)):t.texImage3D(n.TEXTURE_3D,0,ve,ee.width,ee.height,ee.depth,0,he,Be,ee.data);else if(x.isFramebufferTexture){if(te)if(F)t.texStorage2D(n.TEXTURE_2D,Ae,ve,ee.width,ee.height);else{let Z=ee.width,X=ee.height;for(let xe=0;xe>=1,X>>=1}}else if(Oe.length>0){if(F&&te){let Z=Ct(Oe[0]);t.texStorage2D(n.TEXTURE_2D,Ae,ve,Z.width,Z.height)}for(let Z=0,X=Oe.length;Z<X;Z++)ce=Oe[Z],F?re&&t.texSubImage2D(n.TEXTURE_2D,Z,0,0,he,Be,ce):t.texImage2D(n.TEXTURE_2D,Z,ve,he,Be,ce);x.generateMipmaps=!1}else if(F){if(te){let Z=Ct(ee);t.texStorage2D(n.TEXTURE_2D,Ae,ve,Z.width,Z.height)}re&&t.texSubImage2D(n.TEXTURE_2D,0,0,0,he,Be,ee)}else t.texImage2D(n.TEXTURE_2D,0,ve,he,Be,ee);A(x)&&d(K),Se.__version=W.version,x.onUpdate&&x.onUpdate(x)}C.__version=x.version}function J(C,x,O){if(x.image.length!==6)return;let K=Re(C,x),Y=x.source;t.bindTexture(n.TEXTURE_CUBE_MAP,C.__webglTexture,n.TEXTURE0+O);let W=i.get(Y);if(Y.version!==W.__version||K===!0){t.activeTexture(n.TEXTURE0+O);let Se=Ge.getPrimaries(Ge.workingColorSpace),ne=x.colorSpace===oi?null:Ge.getPrimaries(x.colorSpace),ye=x.colorSpace===oi||Se===ne?n.NONE:n.BROWSER_DEFAULT_WEBGL;n.pixelStorei(n.UNPACK_FLIP_Y_WEBGL,x.flipY),n.pixelStorei(n.UNPACK_PREMULTIPLY_ALPHA_WEBGL,x.premultiplyAlpha),n.pixelStorei(n.UNPACK_ALIGNMENT,x.unpackAlignment),n.pixelStorei(n.UNPACK_COLORSPACE_CONVERSION_WEBGL,ye);let Ee=x.isCompressedTexture||x.image[0].isCompressedTexture,ee=x.image[0]&&x.image[0].isDataTexture,he=[];for(let X=0;X<6;X++)!Ee&&!ee?he[X]=g(x.image[X],!0,s.maxCubemapSize):he[X]=ee?x.image[X].image:x.image[X],he[X]=Pt(x,he[X]);let Be=he[0],ve=r.convert(x.format,x.colorSpace),ce=r.convert(x.type),Oe=v(x.internalFormat,ve,ce,x.colorSpace),F=x.isVideoTexture!==!0,te=W.__version===void 0||K===!0,re=Y.dataReady,Ae=M(x,Be);fe(n.TEXTURE_CUBE_MAP,x);let Z;if(Ee){F&&te&&t.texStorage2D(n.TEXTURE_CUBE_MAP,Ae,Oe,Be.width,Be.height);for(let X=0;X<6;X++){Z=he[X].mipmaps;for(let xe=0;xe0&&Ae++;let X=Ct(he[0]);t.texStorage2D(n.TEXTURE_CUBE_MAP,Ae,Oe,X.width,X.height)}for(let X=0;X<6;X++)if(ee){F?re&&t.texSubImage2D(n.TEXTURE_CUBE_MAP_POSITIVE_X+X,0,0,0,he[X].width,he[X].height,ve,ce,he[X].data):t.texImage2D(n.TEXTURE_CUBE_MAP_POSITIVE_X+X,0,Oe,he[X].width,he[X].height,0,ve,ce,he[X].data);for(let xe=0;xe<Z.length;xe++){let ht=Z[xe].image[X].image;F?re&&t.texSubImage2D(n.TEXTURE_CUBE_MAP_POSITIVE_X+X,xe+1,0,0,ht.width,ht.height,ve,ce,ht.data):t.texImage2D(n.TEXTURE_CUBE_MAP_POSITIVE_X+X,xe+1,Oe,ht.width,ht.height,0,ve,ce,ht.data)}}else{F?re&&t.texSubImage2D(n.TEXTURE_CUBE_MAP_POSITIVE_X+X,0,0,0,ve,ce,he[X]):t.texImage2D(n.TEXTURE_CUBE_MAP_POSITIVE_X+X,0,Oe,ve,ce,he[X]);for(let xe=0;xe>W),Be=Math.max(1,x.height>>W);Y===n.TEXTURE_3D||Y===n.TEXTURE_2D_ARRAY?t.texImage3D(Y,W,ye,he,Be,x.depth,0,Se,ne,null):t.texImage2D(Y,W,ye,he,Be,0,Se,ne,null)}t.bindFramebuffer(n.FRAMEBUFFER,C),_e(x)?o.framebufferTexture2DMultisampleEXT(n.FRAMEBUFFER,K,Y,ee.__webglTexture,0,At(x)):(Y===n.TEXTURE_2D||Y>=n.TEXTURE_CUBE_MAP_POSITIVE_X&&Y<=n.TEXTURE_CUBE_MAP_NEGATIVE_Z)&&n.framebufferTexture2D(n.FRAMEBUFFER,K,Y,ee.__webglTexture,W),t.bindFramebuffer(n.FRAMEBUFFER,null)}function Le(C,x,O){if(n.bindRenderbuffer(n.RENDERBUFFER,C),x.depthBuffer){let K=x.depthTexture,Y=K&&K.isDepthTexture?K.type:null,W=b(x.stencilBuffer,Y),Se=x.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT,ne=At(x);_e(x)?o.renderbufferStorageMultisampleEXT(n.RENDERBUFFER,ne,W,x.width,x.height):O?n.renderbufferStorageMultisample(n.RENDERBUFFER,ne,W,x.width,x.height):n.renderbufferStorage(n.RENDERBUFFER,W,x.width,x.height),n.framebufferRenderbuffer(n.FRAMEBUFFER,Se,n.RENDERBUFFER,C)}else{let K=x.textures;for(let Y=0;Y{delete x.__boundDepthTexture,delete x.__depthDisposeCallback,K.removeEventListener(“dispose”,Y)};K.addEventListener(“dispose”,Y),x.__depthDisposeCallback=Y}x.__boundDepthTexture=K}if(C.depthTexture&&!x.__autoAllocateDepthBuffer){if(O)throw new Error(“target.depthTexture not supported in Cube render targets”);let K=C.texture.mipmaps;K&&K.length>0?Me(x.__webglFramebuffer[0],C):Me(x.__webglFramebuffer,C)}else if(O){x.__webglDepthbuffer=[];for(let K=0;K0?t.bindFramebuffer(n.FRAMEBUFFER,x.__webglFramebuffer[0]):t.bindFramebuffer(n.FRAMEBUFFER,x.__webglFramebuffer),x.__webglDepthbuffer===void 0)x.__webglDepthbuffer=n.createRenderbuffer(),Le(x.__webglDepthbuffer,C,!1);else{let Y=C.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT,W=x.__webglDepthbuffer;n.bindRenderbuffer(n.RENDERBUFFER,W),n.framebufferRenderbuffer(n.FRAMEBUFFER,Y,n.RENDERBUFFER,W)}}t.bindFramebuffer(n.FRAMEBUFFER,null)}function Nt(C,x,O){let K=i.get(C);x!==void 0&&me(K.__webglFramebuffer,C,C.texture,n.COLOR_ATTACHMENT0,n.TEXTURE_2D,0),O!==void 0&&qe(C)}function w(C){let x=C.texture,O=i.get(C),K=i.get(x);C.addEventListener(“dispose”,R);let Y=C.textures,W=C.isWebGLCubeRenderTarget===!0,Se=Y.length>1;if(Se||(K.__webglTexture===void 0&&(K.__webglTexture=n.createTexture()),K.__version=x.version,a.memory.textures++),W){O.__webglFramebuffer=[];for(let ne=0;ne0){O.__webglFramebuffer[ne]=[];for(let ye=0;ye0){O.__webglFramebuffer=[];for(let ne=0;ne<x.mipmaps.length;ne++)O.__webglFramebuffer[ne]=n.createFramebuffer()}else O.__webglFramebuffer=n.createFramebuffer();if(Se)for(let ne=0,ye=Y.length;ne0&&_e(C)===!1){O.__webglMultisampledFramebuffer=n.createFramebuffer(),O.__webglColorRenderbuffer=[],t.bindFramebuffer(n.FRAMEBUFFER,O.__webglMultisampledFramebuffer);for(let ne=0;ne<Y.length;ne++){let ye=Y[ne];O.__webglColorRenderbuffer[ne]=n.createRenderbuffer(),n.bindRenderbuffer(n.RENDERBUFFER,O.__webglColorRenderbuffer[ne]);let Ee=r.convert(ye.format,ye.colorSpace),ee=r.convert(ye.type),he=v(ye.internalFormat,Ee,ee,ye.colorSpace,C.isXRRenderTarget===!0),Be=At(C);n.renderbufferStorageMultisample(n.RENDERBUFFER,Be,he,C.width,C.height),n.framebufferRenderbuffer(n.FRAMEBUFFER,n.COLOR_ATTACHMENT0+ne,n.RENDERBUFFER,O.__webglColorRenderbuffer[ne])}n.bindRenderbuffer(n.RENDERBUFFER,null),C.depthBuffer&&(O.__webglDepthRenderbuffer=n.createRenderbuffer(),Le(O.__webglDepthRenderbuffer,C,!0)),t.bindFramebuffer(n.FRAMEBUFFER,null)}}if(W){t.bindTexture(n.TEXTURE_CUBE_MAP,K.__webglTexture),fe(n.TEXTURE_CUBE_MAP,x);for(let ne=0;ne0)for(let ye=0;ye<x.mipmaps.length;ye++)me(O.__webglFramebuffer[ne][ye],C,x,n.COLOR_ATTACHMENT0,n.TEXTURE_CUBE_MAP_POSITIVE_X+ne,ye);else me(O.__webglFramebuffer[ne],C,x,n.COLOR_ATTACHMENT0,n.TEXTURE_CUBE_MAP_POSITIVE_X+ne,0);A(x)&&d(n.TEXTURE_CUBE_MAP),t.unbindTexture()}else if(Se){for(let ne=0,ye=Y.length;ne0)for(let ye=0;ye<x.mipmaps.length;ye++)me(O.__webglFramebuffer[ye],C,x,n.COLOR_ATTACHMENT0,ne,ye);else me(O.__webglFramebuffer,C,x,n.COLOR_ATTACHMENT0,ne,0);A(x)&&d(ne),t.unbindTexture()}C.depthBuffer&&qe(C)}function pt(C){let x=C.textures;for(let O=0,K=x.length;O0){if(_e(C)===!1){let x=C.textures,O=C.width,K=C.height,Y=n.COLOR_BUFFER_BIT,W=C.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT,Se=i.get(C),ne=x.length>1;if(ne)for(let Ee=0;Ee0?t.bindFramebuffer(n.DRAW_FRAMEBUFFER,Se.__webglFramebuffer[0]):t.bindFramebuffer(n.DRAW_FRAMEBUFFER,Se.__webglFramebuffer);for(let Ee=0;Ee<x.length;Ee++){if(C.resolveDepthBuffer&&(C.depthBuffer&&(Y|=n.DEPTH_BUFFER_BIT),C.stencilBuffer&&C.resolveStencilBuffer&&(Y|=n.STENCIL_BUFFER_BIT)),ne){n.framebufferRenderbuffer(n.READ_FRAMEBUFFER,n.COLOR_ATTACHMENT0,n.RENDERBUFFER,Se.__webglColorRenderbuffer[Ee]);let ee=i.get(x[Ee]).__webglTexture;n.framebufferTexture2D(n.DRAW_FRAMEBUFFER,n.COLOR_ATTACHMENT0,n.TEXTURE_2D,ee,0)}n.blitFramebuffer(0,0,O,K,0,0,O,K,Y,n.NEAREST),c===!0&&(Ne.length=0,De.length=0,Ne.push(n.COLOR_ATTACHMENT0+Ee),C.depthBuffer&&C.resolveDepthBuffer===!1&&(Ne.push(W),De.push(W),n.invalidateFramebuffer(n.DRAW_FRAMEBUFFER,De)),n.invalidateFramebuffer(n.READ_FRAMEBUFFER,Ne))}if(t.bindFramebuffer(n.READ_FRAMEBUFFER,null),t.bindFramebuffer(n.DRAW_FRAMEBUFFER,null),ne)for(let Ee=0;Ee0&&e.has(“WEBGL_multisampled_render_to_texture”)===!0&&x.__useRenderToTexture!==!1}function ke(C){let x=a.render.frame;h.get(C)!==x&&(h.set(C,x),C.update())}function Pt(C,x){let O=C.colorSpace,K=C.format,Y=C.type;return C.isCompressedTexture===!0||C.isVideoTexture===!0||O!==Mt&&O!==oi&&(Ge.getTransfer(O)===Ze?(K!==nt||Y!==Qe)&&console.warn(“THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType.”):console.error(“THREE.WebGLTextures: Unsupported texture color space:”,O)),x}function Ct(C){return typeof HTMLImageElement<"u"&&C instanceof HTMLImageElement?(l.width=C.naturalWidth||C.width,l.height=C.naturalHeight||C.height):typeof VideoFrame= 1.0 ) {
gl_FragDepth = texture( depthColor, vec3( coord.x – 1.0, coord.y, 1 ) ).r;
} else {
gl_FragDepth = texture( depthColor, vec3( coord.x, coord.y, 0 ) ).r;
}
}`,ch=class{constructor(){this.texture=null,this.mesh=null,this.depthNear=0,this.depthFar=0}init(e,t){if(this.texture===null){let i=new ua(e.texture);(e.depthNear!==t.depthNear||e.depthFar!==t.depthFar)&&(this.depthNear=e.depthNear,this.depthFar=e.depthFar),this.texture=i}}getMesh(e){if(this.texture!==null&&this.mesh===null){let t=e.cameras[0].viewport,i=new ft({vertexShader:n_,fragmentShader:s_,uniforms:{depthColor:{value:this.texture},depthWidth:{value:t.z},depthHeight:{value:t.w}}});this.mesh=new yt(new hn(20,20),i)}return this.mesh}reset(){this.texture=null,this.mesh=null}getDepthTexture(){return this.texture}},lh=class extends Gi{constructor(e,t){super();let i=this,s=null,r=1,a=null,o=”local-floor”,c=1,l=null,h=null,u=null,f=null,p=null,m=null,g=typeof XRWebGLBinding<"u",A=new ch,d={},S=t.getContextAttributes(),v=null,b=null,M=[],I=[],R=new ue,B=null,E=new Tt;E.viewport=new Xe;let _=new Tt;_.viewport=new Xe;let T=[E,_],U=new Mo,Q=null,N=null;this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(q){let J=M[q];return J===void 0&&(J=new ar,M[q]=J),J.getTargetRaySpace()},this.getControllerGrip=function(q){let J=M[q];return J===void 0&&(J=new ar,M[q]=J),J.getGripSpace()},this.getHand=function(q){let J=M[q];return J===void 0&&(J=new ar,M[q]=J),J.getHandSpace()};function V(q){let J=I.indexOf(q.inputSource);if(J===-1)return;let me=M[J];me!==void 0&&(me.update(q.inputSource,q.frame,l||a),me.dispatchEvent({type:q.type,data:q.inputSource}))}function k(){s.removeEventListener("select",V),s.removeEventListener("selectstart",V),s.removeEventListener("selectend",V),s.removeEventListener("squeeze",V),s.removeEventListener("squeezestart",V),s.removeEventListener("squeezeend",V),s.removeEventListener("end",k),s.removeEventListener("inputsourceschange",j);for(let q=0;q<M.length;q++){let J=I[q];J!==null&&(I[q]=null,M[q].disconnect(J))}Q=null,N=null,A.reset();for(let q in d)delete d[q];e.setRenderTarget(v),p=null,f=null,u=null,s=null,b=null,et.stop(),i.isPresenting=!1,e.setPixelRatio(B),e.setSize(R.width,R.height,!1),i.dispatchEvent({type:"sessionend"})}this.setFramebufferScaleFactor=function(q){r=q,i.isPresenting===!0&&console.warn("THREE.WebXRManager: Cannot change framebuffer scale while presenting.")},this.setReferenceSpaceType=function(q){o=q,i.isPresenting===!0&&console.warn("THREE.WebXRManager: Cannot change reference space type while presenting.")},this.getReferenceSpace=function(){return l||a},this.setReferenceSpace=function(q){l=q},this.getBaseLayer=function(){return f!==null?f:p},this.getBinding=function(){return u===null&&g&&(u=new XRWebGLBinding(s,t)),u},this.getFrame=function(){return m},this.getSession=function(){return s},this.setSession=async function(q){if(s=q,s!==null){if(v=e.getRenderTarget(),s.addEventListener("select",V),s.addEventListener("selectstart",V),s.addEventListener("selectend",V),s.addEventListener("squeeze",V),s.addEventListener("squeezestart",V),s.addEventListener("squeezeend",V),s.addEventListener("end",k),s.addEventListener("inputsourceschange",j),S.xrCompatible!==!0&&await t.makeXRCompatible(),B=e.getPixelRatio(),e.getSize(R),g&&"createProjectionLayer"in XRWebGLBinding.prototype){let me=null,Le=null,Me=null;S.depth&&(Me=S.stencil?t.DEPTH24_STENCIL8:t.DEPTH_COMPONENT24,me=S.stencil?kn:cn,Le=S.stencil?Qn:Si);let qe={colorFormat:t.RGBA8,depthFormat:Me,scaleFactor:r};u=this.getBinding(),f=u.createProjectionLayer(qe),s.updateRenderState({layers:[f]}),e.setPixelRatio(1),e.setSize(f.textureWidth,f.textureHeight,!1),b=new St(f.textureWidth,f.textureHeight,{format:nt,type:Qe,depthTexture:new ln(f.textureWidth,f.textureHeight,Le,void 0,void 0,void 0,void 0,void 0,void 0,me),stencilBuffer:S.stencil,colorSpace:e.outputColorSpace,samples:S.antialias?4:0,resolveDepthBuffer:f.ignoreDepthValues===!1,resolveStencilBuffer:f.ignoreDepthValues===!1})}else{let me={antialias:S.antialias,alpha:!0,depth:S.depth,stencil:S.stencil,framebufferScaleFactor:r};p=new XRWebGLLayer(s,t,me),s.updateRenderState({baseLayer:p}),e.setPixelRatio(1),e.setSize(p.framebufferWidth,p.framebufferHeight,!1),b=new St(p.framebufferWidth,p.framebufferHeight,{format:nt,type:Qe,colorSpace:e.outputColorSpace,stencilBuffer:S.stencil,resolveDepthBuffer:p.ignoreDepthValues===!1,resolveStencilBuffer:p.ignoreDepthValues===!1})}b.isXRRenderTarget=!0,this.setFoveation(c),l=null,a=await s.requestReferenceSpace(o),et.setContext(s),et.start(),i.isPresenting=!0,i.dispatchEvent({type:"sessionstart"})}},this.getEnvironmentBlendMode=function(){if(s!==null)return s.environmentBlendMode},this.getDepthTexture=function(){return A.getDepthTexture()};function j(q){for(let J=0;J=0&&(I[Le]=null,M[Le].disconnect(me))}for(let J=0;J<q.added.length;J++){let me=q.added[J],Le=I.indexOf(me);if(Le===-1){for(let qe=0;qe=I.length){I.push(me),Le=qe;break}else if(I[qe]===null){I[qe]=me,Le=qe;break}if(Le===-1)break}let Me=M[Le];Me&&Me.connect(me)}}let z=new D,ie=new D;function se(q,J,me){z.setFromMatrixPosition(J.matrixWorld),ie.setFromMatrixPosition(me.matrixWorld);let Le=z.distanceTo(ie),Me=J.projectionMatrix.elements,qe=me.projectionMatrix.elements,Nt=Me[14]/(Me[10]-1),w=Me[14]/(Me[10]+1),pt=(Me[9]+1)/Me[5],Ne=(Me[9]-1)/Me[5],De=(Me[8]-1)/Me[0],be=(qe[8]+1)/qe[0],At=Nt*De,_e=Nt*be,ke=Le/(-De+be),Pt=ke*-De;if(J.matrixWorld.decompose(q.position,q.quaternion,q.scale),q.translateX(Pt),q.translateZ(ke),q.matrixWorld.compose(q.position,q.quaternion,q.scale),q.matrixWorldInverse.copy(q.matrixWorld).invert(),Me[10]===-1)q.projectionMatrix.copy(J.projectionMatrix),q.projectionMatrixInverse.copy(J.projectionMatrixInverse);else{let Ct=Nt+ke,C=w+ke,x=At-Pt,O=_e+(Le-Pt),K=pt*w/C*Ct,Y=Ne*w/C*Ct;q.projectionMatrix.makePerspective(x,O,K,Y,Ct,C),q.projectionMatrixInverse.copy(q.projectionMatrix).invert()}}function ae(q,J){J===null?q.matrixWorld.copy(q.matrix):q.matrixWorld.multiplyMatrices(J.matrixWorld,q.matrix),q.matrixWorldInverse.copy(q.matrixWorld).invert()}this.updateCamera=function(q){if(s===null)return;let J=q.near,me=q.far;A.texture!==null&&(A.depthNear>0&&(J=A.depthNear),A.depthFar>0&&(me=A.depthFar)),U.near=_.near=E.near=J,U.far=_.far=E.far=me,(Q!==U.near||N!==U.far)&&(s.updateRenderState({depthNear:U.near,depthFar:U.far}),Q=U.near,N=U.far),U.layers.mask=q.layers.mask|6,E.layers.mask=U.layers.mask&3,_.layers.mask=U.layers.mask&5;let Le=q.parent,Me=U.cameras;ae(U,Le);for(let qe=0;qe<Me.length;qe++)ae(Me[qe],Le);Me.length===2?se(U,E,_):U.projectionMatrix.copy(E.projectionMatrix),fe(q,U,Le)};function fe(q,J,me){me===null?q.matrix.copy(J.matrixWorld):(q.matrix.copy(me.matrixWorld),q.matrix.invert(),q.matrix.multiply(J.matrixWorld)),q.matrix.decompose(q.position,q.quaternion,q.scale),q.updateMatrixWorld(!0),q.projectionMatrix.copy(J.projectionMatrix),q.projectionMatrixInverse.copy(J.projectionMatrixInverse),q.isPerspectiveCamera&&(q.fov=fs*2*Math.atan(1/q.projectionMatrix.elements[5]),q.zoom=1)}this.getCamera=function(){return U},this.getFoveation=function(){if(!(f===null&&p===null))return c},this.setFoveation=function(q){c=q,f!==null&&(f.fixedFoveation=q),p!==null&&p.fixedFoveation!==void 0&&(p.fixedFoveation=q)},this.hasDepthSensing=function(){return A.texture!==null},this.getDepthSensingMesh=function(){return A.getMesh(U)},this.getCameraTexture=function(q){return d[q]};let Re=null;function Je(q,J){if(h=J.getViewerPose(l||a),m=J,h!==null){let me=h.views;p!==null&&(e.setRenderTargetFramebuffer(b,p.framebuffer),e.setRenderTarget(b));let Le=!1;me.length!==U.cameras.length&&(U.cameras.length=0,Le=!0);for(let w=0;w<me.length;w++){let pt=me[w],Ne=null;if(p!==null)Ne=p.getViewport(pt);else{let be=u.getViewSubImage(f,pt);Ne=be.viewport,w===0&&(e.setRenderTargetTextures(b,be.colorTexture,be.depthStencilTexture),e.setRenderTarget(b))}let De=T[w];De===void 0&&(De=new Tt,De.layers.enable(w),De.viewport=new Xe,T[w]=De),De.matrix.fromArray(pt.transform.matrix),De.matrix.decompose(De.position,De.quaternion,De.scale),De.projectionMatrix.fromArray(pt.projectionMatrix),De.projectionMatrixInverse.copy(De.projectionMatrix).invert(),De.viewport.set(Ne.x,Ne.y,Ne.width,Ne.height),w===0&&(U.matrix.copy(De.matrix),U.matrix.decompose(U.position,U.quaternion,U.scale)),Le===!0&&U.cameras.push(De)}let Me=s.enabledFeatures;if(Me&&Me.includes("depth-sensing")&&s.depthUsage=="gpu-optimized"&&g){u=i.getBinding();let w=u.getDepthInformation(me[0]);w&&w.isValid&&w.texture&&A.init(w,s.renderState)}if(Me&&Me.includes("camera-access")&&g){e.state.unbindTexture(),u=i.getBinding();for(let w=0;w<me.length;w++){let pt=me[w].camera;if(pt){let Ne=d[pt];Ne||(Ne=new ua,d[pt]=Ne);let De=u.getCameraImage(pt);Ne.sourceTexture=De}}}}for(let me=0;me0&&(A.alphaTest.value=d.alphaTest);let S=e.get(d),v=S.envMap,b=S.envMapRotation;v&&(A.envMap.value=v,Ts.copy(b),Ts.x*=-1,Ts.y*=-1,Ts.z*=-1,v.isCubeTexture&&v.isRenderTargetTexture===!1&&(Ts.y*=-1,Ts.z*=-1),A.envMapRotation.value.setFromMatrix4(r_.makeRotationFromEuler(Ts)),A.flipEnvMap.value=v.isCubeTexture&&v.isRenderTargetTexture===!1?-1:1,A.reflectivity.value=d.reflectivity,A.ior.value=d.ior,A.refractionRatio.value=d.refractionRatio),d.lightMap&&(A.lightMap.value=d.lightMap,A.lightMapIntensity.value=d.lightMapIntensity,t(d.lightMap,A.lightMapTransform)),d.aoMap&&(A.aoMap.value=d.aoMap,A.aoMapIntensity.value=d.aoMapIntensity,t(d.aoMap,A.aoMapTransform))}function a(A,d){A.diffuse.value.copy(d.color),A.opacity.value=d.opacity,d.map&&(A.map.value=d.map,t(d.map,A.mapTransform))}function o(A,d){A.dashSize.value=d.dashSize,A.totalSize.value=d.dashSize+d.gapSize,A.scale.value=d.scale}function c(A,d,S,v){A.diffuse.value.copy(d.color),A.opacity.value=d.opacity,A.size.value=d.size*S,A.scale.value=v*.5,d.map&&(A.map.value=d.map,t(d.map,A.uvTransform)),d.alphaMap&&(A.alphaMap.value=d.alphaMap,t(d.alphaMap,A.alphaMapTransform)),d.alphaTest>0&&(A.alphaTest.value=d.alphaTest)}function l(A,d){A.diffuse.value.copy(d.color),A.opacity.value=d.opacity,A.rotation.value=d.rotation,d.map&&(A.map.value=d.map,t(d.map,A.mapTransform)),d.alphaMap&&(A.alphaMap.value=d.alphaMap,t(d.alphaMap,A.alphaMapTransform)),d.alphaTest>0&&(A.alphaTest.value=d.alphaTest)}function h(A,d){A.specular.value.copy(d.specular),A.shininess.value=Math.max(d.shininess,1e-4)}function u(A,d){d.gradientMap&&(A.gradientMap.value=d.gradientMap)}function f(A,d){A.metalness.value=d.metalness,d.metalnessMap&&(A.metalnessMap.value=d.metalnessMap,t(d.metalnessMap,A.metalnessMapTransform)),A.roughness.value=d.roughness,d.roughnessMap&&(A.roughnessMap.value=d.roughnessMap,t(d.roughnessMap,A.roughnessMapTransform)),d.envMap&&(A.envMapIntensity.value=d.envMapIntensity)}function p(A,d,S){A.ior.value=d.ior,d.sheen>0&&(A.sheenColor.value.copy(d.sheenColor).multiplyScalar(d.sheen),A.sheenRoughness.value=d.sheenRoughness,d.sheenColorMap&&(A.sheenColorMap.value=d.sheenColorMap,t(d.sheenColorMap,A.sheenColorMapTransform)),d.sheenRoughnessMap&&(A.sheenRoughnessMap.value=d.sheenRoughnessMap,t(d.sheenRoughnessMap,A.sheenRoughnessMapTransform))),d.clearcoat>0&&(A.clearcoat.value=d.clearcoat,A.clearcoatRoughness.value=d.clearcoatRoughness,d.clearcoatMap&&(A.clearcoatMap.value=d.clearcoatMap,t(d.clearcoatMap,A.clearcoatMapTransform)),d.clearcoatRoughnessMap&&(A.clearcoatRoughnessMap.value=d.clearcoatRoughnessMap,t(d.clearcoatRoughnessMap,A.clearcoatRoughnessMapTransform)),d.clearcoatNormalMap&&(A.clearcoatNormalMap.value=d.clearcoatNormalMap,t(d.clearcoatNormalMap,A.clearcoatNormalMapTransform),A.clearcoatNormalScale.value.copy(d.clearcoatNormalScale),d.side===Xt&&A.clearcoatNormalScale.value.negate())),d.dispersion>0&&(A.dispersion.value=d.dispersion),d.iridescence>0&&(A.iridescence.value=d.iridescence,A.iridescenceIOR.value=d.iridescenceIOR,A.iridescenceThicknessMinimum.value=d.iridescenceThicknessRange[0],A.iridescenceThicknessMaximum.value=d.iridescenceThicknessRange[1],d.iridescenceMap&&(A.iridescenceMap.value=d.iridescenceMap,t(d.iridescenceMap,A.iridescenceMapTransform)),d.iridescenceThicknessMap&&(A.iridescenceThicknessMap.value=d.iridescenceThicknessMap,t(d.iridescenceThicknessMap,A.iridescenceThicknessMapTransform))),d.transmission>0&&(A.transmission.value=d.transmission,A.transmissionSamplerMap.value=S.texture,A.transmissionSamplerSize.value.set(S.width,S.height),d.transmissionMap&&(A.transmissionMap.value=d.transmissionMap,t(d.transmissionMap,A.transmissionMapTransform)),A.thickness.value=d.thickness,d.thicknessMap&&(A.thicknessMap.value=d.thicknessMap,t(d.thicknessMap,A.thicknessMapTransform)),A.attenuationDistance.value=d.attenuationDistance,A.attenuationColor.value.copy(d.attenuationColor)),d.anisotropy>0&&(A.anisotropyVector.value.set(d.anisotropy*Math.cos(d.anisotropyRotation),d.anisotropy*Math.sin(d.anisotropyRotation)),d.anisotropyMap&&(A.anisotropyMap.value=d.anisotropyMap,t(d.anisotropyMap,A.anisotropyMapTransform))),A.specularIntensity.value=d.specularIntensity,A.specularColor.value.copy(d.specularColor),d.specularColorMap&&(A.specularColorMap.value=d.specularColorMap,t(d.specularColorMap,A.specularColorMapTransform)),d.specularIntensityMap&&(A.specularIntensityMap.value=d.specularIntensityMap,t(d.specularIntensityMap,A.specularIntensityMapTransform))}function m(A,d){d.matcap&&(A.matcap.value=d.matcap)}function g(A,d){let S=e.get(d).light;A.referencePosition.value.setFromMatrixPosition(S.matrixWorld),A.nearDistance.value=S.shadow.camera.near,A.farDistance.value=S.shadow.camera.far}return{refreshFogUniforms:i,refreshMaterialUniforms:s}}function o_(n,e,t,i){let s={},r={},a=[],o=n.getParameter(n.MAX_UNIFORM_BUFFER_BINDINGS);function c(S,v){let b=v.program;i.uniformBlockBinding(S,b)}function l(S,v){let b=s[S.id];b===void 0&&(m(S),b=h(S),s[S.id]=b,S.addEventListener(“dispose”,A));let M=v.program;i.updateUBOMapping(S,M);let I=e.render.frame;r[S.id]!==I&&(f(S),r[S.id]=I)}function h(S){let v=u();S.__bindingPointIndex=v;let b=n.createBuffer(),M=S.__size,I=S.usage;return n.bindBuffer(n.UNIFORM_BUFFER,b),n.bufferData(n.UNIFORM_BUFFER,M,I),n.bindBuffer(n.UNIFORM_BUFFER,null),n.bindBufferBase(n.UNIFORM_BUFFER,v,b),b}function u(){for(let S=0;S<o;S++)if(a.indexOf(S)===-1)return a.push(S),S;return console.error("THREE.WebGLRenderer: Maximum number of simultaneously usable uniforms groups reached."),0}function f(S){let v=s[S.id],b=S.uniforms,M=S.__cache;n.bindBuffer(n.UNIFORM_BUFFER,v);for(let I=0,R=b.length;I<R;I++){let B=Array.isArray(b[I])?b[I]:[b[I]];for(let E=0,_=B.length;E<_;E++){let T=B[E];if(p(T,I,E,M)===!0){let U=T.__offset,Q=Array.isArray(T.value)?T.value:[T.value],N=0;for(let V=0;V<Q.length;V++){let k=Q[V],j=g(k);typeof k=="number"||typeof k=="boolean"?(T.__data[0]=k,n.bufferSubData(n.UNIFORM_BUFFER,U+N,T.__data)):k.isMatrix3?(T.__data[0]=k.elements[0],T.__data[1]=k.elements[1],T.__data[2]=k.elements[2],T.__data[3]=0,T.__data[4]=k.elements[3],T.__data[5]=k.elements[4],T.__data[6]=k.elements[5],T.__data[7]=0,T.__data[8]=k.elements[6],T.__data[9]=k.elements[7],T.__data[10]=k.elements[8],T.__data[11]=0):(k.toArray(T.__data,N),N+=j.storage/Float32Array.BYTES_PER_ELEMENT)}n.bufferSubData(n.UNIFORM_BUFFER,U,T.__data)}}}n.bindBuffer(n.UNIFORM_BUFFER,null)}function p(S,v,b,M){let I=S.value,R=v+"_"+b;if(M[R]===void 0)return typeof I=="number"||typeof I=="boolean"?M[R]=I:M[R]=I.clone(),!0;{let B=M[R];if(typeof I=="number"||typeof I=="boolean"){if(B!==I)return M[R]=I,!0}else if(B.equals(I)===!1)return B.copy(I),!0}return!1}function m(S){let v=S.uniforms,b=0,M=16;for(let R=0,B=v.length;R<B;R++){let E=Array.isArray(v[R])?v[R]:[v[R]];for(let _=0,T=E.length;_<T;_++){let U=E[_],Q=Array.isArray(U.value)?U.value:[U.value];for(let N=0,V=Q.length;N<V;N++){let k=Q[N],j=g(k),z=b%M,ie=z%j.boundary,se=z+ie;b+=ie,se!==0&&M-se0&&(b+=M-I),S.__size=b,S.__cache={},this}function g(S){let v={boundary:0,storage:0};return typeof S==”number”||typeof S==”boolean”?(v.boundary=4,v.storage=4):S.isVector2?(v.boundary=8,v.storage=8):S.isVector3||S.isColor?(v.boundary=16,v.storage=12):S.isVector4?(v.boundary=16,v.storage=16):S.isMatrix3?(v.boundary=48,v.storage=48):S.isMatrix4?(v.boundary=64,v.storage=64):S.isTexture?console.warn(“THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group.”):console.warn(“THREE.WebGLRenderer: Unsupported uniform value type.”,S),v}function A(S){let v=S.target;v.removeEventListener(“dispose”,A);let b=a.indexOf(v.__bindingPointIndex);a.splice(b,1),n.deleteBuffer(s[v.id]),delete s[v.id],delete r[v.id]}function d(){for(let S in s)n.deleteBuffer(s[S]);a=[],s={},r={}}return{bind:c,update:l,dispose:d}}var uc=class{constructor(e={}){let{canvas:t=Vf(),context:i=null,depth:s=!0,stencil:r=!1,alpha:a=!1,antialias:o=!1,premultipliedAlpha:c=!0,preserveDrawingBuffer:l=!1,powerPreference:h=”default”,failIfMajorPerformanceCaveat:u=!1,reversedDepthBuffer:f=!1}=e;this.isWebGLRenderer=!0;let p;if(i!==null){if(typeof WebGLRenderingContext<"u"&&i instanceof WebGLRenderingContext)throw new Error("THREE.WebGLRenderer: WebGL 1 is not supported since r163.");p=i.getContextAttributes().alpha}else p=a;let m=new Uint32Array(4),g=new Int32Array(4),A=null,d=null,S=[],v=[];this.domElement=t,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.toneMapping=An,this.toneMappingExposure=1,this.transmissionResolutionScale=1;let b=this,M=!1;this._outputColorSpace=ct;let I=0,R=0,B=null,E=-1,_=null,T=new Xe,U=new Xe,Q=null,N=new Ce(0),V=0,k=t.width,j=t.height,z=1,ie=null,se=null,ae=new Xe(0,0,k,j),fe=new Xe(0,0,k,j),Re=!1,Je=new lr,et=!1,q=!1,J=new pe,me=new D,Le=new Xe,Me={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0},qe=!1;function Nt(){return B===null?z:1}let w=i;function pt(y,L){return t.getContext(y,L)}try{let y={alpha:!0,depth:s,stencil:r,antialias:o,premultipliedAlpha:c,preserveDrawingBuffer:l,powerPreference:h,failIfMajorPerformanceCaveat:u};if("setAttribute"in t&&t.setAttribute("data-engine",`three.js r${xs}`),t.addEventListener("webglcontextlost",re,!1),t.addEventListener("webglcontextrestored",Ae,!1),t.addEventListener("webglcontextcreationerror",Z,!1),w===null){let L="webgl2";if(w=pt(L,y),w===null)throw pt(L)?new Error("Error creating WebGL context with your selected attributes."):new Error("Error creating WebGL context.")}}catch(y){throw console.error("THREE.WebGLRenderer: "+y.message),y}let Ne,De,be,At,_e,ke,Pt,Ct,C,x,O,K,Y,W,Se,ne,ye,Ee,ee,he,Be,ve,ce,Oe;function F(){Ne=new Cx(w),Ne.init(),ve=new i_(w,Ne),De=new xx(w,Ne,e,ve),be=new e_(w,Ne),De.reversedDepthBuffer&&f&&be.buffers.depth.setReversed(!0),At=new Tx(w),_e=new Gb,ke=new t_(w,Ne,be,_e,De,ve,At),Pt=new _x(b),Ct=new Sx(b),C=new Lm(w),ce=new mx(w,C),x=new Mx(w,C,At,ce),O=new Rx(w,x,C,At),ee=new wx(w,De,ke),ne=new bx(_e),K=new kb(b,Pt,Ct,Ne,De,ce,ne),Y=new a_(b,_e),W=new zb,Se=new Yb(Ne),Ee=new Ax(b,Pt,Ct,be,O,p,c),ye=new Zb(b,O,De),Oe=new o_(w,At,De,be),he=new gx(w,Ne,At),Be=new Ix(w,Ne,At),At.programs=K.programs,b.capabilities=De,b.extensions=Ne,b.properties=_e,b.renderLists=W,b.shadowMap=ye,b.state=be,b.info=At}F();let te=new lh(b,w);this.xr=te,this.getContext=function(){return w},this.getContextAttributes=function(){return w.getContextAttributes()},this.forceContextLoss=function(){let y=Ne.get("WEBGL_lose_context");y&&y.loseContext()},this.forceContextRestore=function(){let y=Ne.get("WEBGL_lose_context");y&&y.restoreContext()},this.getPixelRatio=function(){return z},this.setPixelRatio=function(y){y!==void 0&&(z=y,this.setSize(k,j,!1))},this.getSize=function(y){return y.set(k,j)},this.setSize=function(y,L,G=!0){if(te.isPresenting){console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting.");return}k=y,j=L,t.width=Math.floor(y*z),t.height=Math.floor(L*z),G===!0&&(t.style.width=y+"px",t.style.height=L+"px"),this.setViewport(0,0,y,L)},this.getDrawingBufferSize=function(y){return y.set(k*z,j*z).floor()},this.setDrawingBufferSize=function(y,L,G){k=y,j=L,z=G,t.width=Math.floor(y*G),t.height=Math.floor(L*G),this.setViewport(0,0,y,L)},this.getCurrentViewport=function(y){return y.copy(T)},this.getViewport=function(y){return y.copy(ae)},this.setViewport=function(y,L,G,H){y.isVector4?ae.set(y.x,y.y,y.z,y.w):ae.set(y,L,G,H),be.viewport(T.copy(ae).multiplyScalar(z).round())},this.getScissor=function(y){return y.copy(fe)},this.setScissor=function(y,L,G,H){y.isVector4?fe.set(y.x,y.y,y.z,y.w):fe.set(y,L,G,H),be.scissor(U.copy(fe).multiplyScalar(z).round())},this.getScissorTest=function(){return Re},this.setScissorTest=function(y){be.setScissorTest(Re=y)},this.setOpaqueSort=function(y){ie=y},this.setTransparentSort=function(y){se=y},this.getClearColor=function(y){return y.copy(Ee.getClearColor())},this.setClearColor=function(){Ee.setClearColor(…arguments)},this.getClearAlpha=function(){return Ee.getClearAlpha()},this.setClearAlpha=function(){Ee.setClearAlpha(…arguments)},this.clear=function(y=!0,L=!0,G=!0){let H=0;if(y){let P=!1;if(B!==null){let $=B.texture.format;P=$===qo||$===Ko||$===Wo}if(P){let $=B.texture.type,le=$===Qe||$===Si||$===gr||$===Qn||$===zo||$===Vo,ge=Ee.getClearColor(),de=Ee.getClearAlpha(),we=ge.r,Fe=ge.g,Ie=ge.b;le?(m[0]=we,m[1]=Fe,m[2]=Ie,m[3]=de,w.clearBufferuiv(w.COLOR,0,m)):(g[0]=we,g[1]=Fe,g[2]=Ie,g[3]=de,w.clearBufferiv(w.COLOR,0,g))}else H|=w.COLOR_BUFFER_BIT}L&&(H|=w.DEPTH_BUFFER_BIT),G&&(H|=w.STENCIL_BUFFER_BIT,this.state.buffers.stencil.setMask(4294967295)),w.clear(H)},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(){t.removeEventListener("webglcontextlost",re,!1),t.removeEventListener("webglcontextrestored",Ae,!1),t.removeEventListener("webglcontextcreationerror",Z,!1),Ee.dispose(),W.dispose(),Se.dispose(),_e.dispose(),Pt.dispose(),Ct.dispose(),O.dispose(),ce.dispose(),Oe.dispose(),K.dispose(),te.dispose(),te.removeEventListener("sessionstart",Qi),te.removeEventListener("sessionend",mu),ts.stop()};function re(y){y.preventDefault(),console.log("THREE.WebGLRenderer: Context Lost."),M=!0}function Ae(){console.log("THREE.WebGLRenderer: Context Restored."),M=!1;let y=At.autoReset,L=ye.enabled,G=ye.autoUpdate,H=ye.needsUpdate,P=ye.type;F(),At.autoReset=y,ye.enabled=L,ye.autoUpdate=G,ye.needsUpdate=H,ye.type=P}function Z(y){console.error("THREE.WebGLRenderer: A WebGL context could not be created. Reason: ",y.statusMessage)}function X(y){let L=y.target;L.removeEventListener("dispose",X),xe(L)}function xe(y){Ue(y),_e.remove(y)}function Ue(y){let L=_e.get(y).programs;L!==void 0&&(L.forEach(function(G){K.releaseProgram(G)}),y.isShaderMaterial&&K.releaseShaderCache(y))}this.renderBufferDirect=function(y,L,G,H,P,$){L===null&&(L=Me);let le=P.isMesh&&P.matrixWorld.determinant()<0,ge=bA(y,L,G,H,P);be.setMaterial(H,le);let de=G.index,we=1;if(H.wireframe===!0){if(de=x.getWireframeAttribute(G),de===void 0)return;we=2}let Fe=G.drawRange,Ie=G.attributes.position,Ke=Fe.start*we,st=(Fe.start+Fe.count)*we;$!==null&&(Ke=Math.max(Ke,$.start*we),st=Math.min(st,($.start+$.count)*we)),de!==null?(Ke=Math.max(Ke,0),st=Math.min(st,de.count)):Ie!=null&&(Ke=Math.max(Ke,0),st=Math.min(st,Ie.count));let vt=st-Ke;if(vt<0||vt===1/0)return;ce.setup(P,H,ge,G,de);let ut,ot=he;if(de!==null&&(ut=C.get(de),ot=Be,ot.setIndex(ut)),P.isMesh)H.wireframe===!0?(be.setLineWidth(H.wireframeLinewidth*Nt()),ot.setMode(w.LINES)):ot.setMode(w.TRIANGLES);else if(P.isLine){let Te=H.linewidth;Te===void 0&&(Te=1),be.setLineWidth(Te*Nt()),P.isLineSegments?ot.setMode(w.LINES):P.isLineLoop?ot.setMode(w.LINE_LOOP):ot.setMode(w.LINE_STRIP)}else P.isPoints?ot.setMode(w.POINTS):P.isSprite&&ot.setMode(w.TRIANGLES);if(P.isBatchedMesh)if(P._multiDrawInstances!==null)ir("THREE.WebGLRenderer: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection."),ot.renderMultiDrawInstances(P._multiDrawStarts,P._multiDrawCounts,P._multiDrawCount,P._multiDrawInstances);else if(Ne.get("WEBGL_multi_draw"))ot.renderMultiDraw(P._multiDrawStarts,P._multiDrawCounts,P._multiDrawCount);else{let Te=P._multiDrawStarts,gt=P._multiDrawCounts,je=P._multiDrawCount,hi=de?C.get(de).bytesPerElement:1,Ns=_e.get(H).currentProgram.getUniforms();for(let ui=0;ui<je;ui++)Ns.setValue(w,"_gl_DrawID",ui),ot.render(Te[ui]/hi,gt[ui])}else if(P.isInstancedMesh)ot.renderInstances(Ke,vt,P.count);else if(G.isInstancedBufferGeometry){let Te=G._maxInstanceCount!==void 0?G._maxInstanceCount:1/0,gt=Math.min(G.instanceCount,Te);ot.renderInstances(Ke,vt,gt)}else ot.render(Ke,vt)};function ht(y,L,G){y.transparent===!0&&y.side===ai&&y.forceSinglePass===!1?(y.side=Xt,y.needsUpdate=!0,Ua(y,L,G),y.side=Li,y.needsUpdate=!0,Ua(y,L,G),y.side=ai):Ua(y,L,G)}this.compile=function(y,L,G=null){G===null&&(G=y),d=Se.get(G),d.init(L),v.push(d),G.traverseVisible(function(P){P.isLight&&P.layers.test(L.layers)&&(d.pushLight(P),P.castShadow&&d.pushShadow(P))}),y!==G&&y.traverseVisible(function(P){P.isLight&&P.layers.test(L.layers)&&(d.pushLight(P),P.castShadow&&d.pushShadow(P))}),d.setupLights();let H=new Set;return y.traverse(function(P){if(!(P.isMesh||P.isPoints||P.isLine||P.isSprite))return;let $=P.material;if($)if(Array.isArray($))for(let le=0;le{function $(){if(H.forEach(function(le){_e.get(le).currentProgram.isReady()&&H.delete(le)}),H.size===0){P(y);return}setTimeout($,10)}Ne.get(“KHR_parallel_shader_compile”)!==null?$():setTimeout($,10)})};let tt=null;function Zi(y){tt&&tt(y)}function Qi(){ts.stop()}function mu(){ts.start()}let ts=new xd;ts.setAnimationLoop(Zi),typeof self0)for(let le=0,ge=$.length;le<ge;le++){let de=$[le];xu(H,P,y,de)}qe&&Ee.render(y);for(let le=0,ge=$.length;le0&&xu(H,P,y,L),qe&&Ee.render(y),gu(A,y,L);B!==null&&R===0&&(ke.updateMultisampleRenderTarget(B),ke.updateRenderTargetMipmap(B)),y.isScene===!0&&y.onAfterRender(b,y,L),ce.resetDefaultState(),E=-1,_=null,v.pop(),v.length>0?(d=v[v.length-1],et===!0&&ne.setGlobalState(b.clippingPlanes,d.state.camera)):d=null,S.pop(),S.length>0?A=S[S.length-1]:A=null};function zc(y,L,G,H){if(y.visible===!1)return;if(y.layers.test(L.layers)){if(y.isGroup)G=y.renderOrder;else if(y.isLOD)y.autoUpdate===!0&&y.update(L);else if(y.isLight)d.pushLight(y),y.castShadow&&d.pushShadow(y);else if(y.isSprite){if(!y.frustumCulled||Je.intersectsSprite(y)){H&&Le.setFromMatrixPosition(y.matrixWorld).applyMatrix4(J);let le=O.update(y),ge=y.material;ge.visible&&A.push(y,le,ge,G,Le.z,null)}}else if((y.isMesh||y.isLine||y.isPoints)&&(!y.frustumCulled||Je.intersectsObject(y))){let le=O.update(y),ge=y.material;if(H&&(y.boundingSphere!==void 0?(y.boundingSphere===null&&y.computeBoundingSphere(),Le.copy(y.boundingSphere.center)):(le.boundingSphere===null&&le.computeBoundingSphere(),Le.copy(le.boundingSphere.center)),Le.applyMatrix4(y.matrixWorld).applyMatrix4(J)),Array.isArray(ge)){let de=le.groups;for(let we=0,Fe=de.length;we<Fe;we++){let Ie=de[we],Ke=ge[Ie.materialIndex];Ke&&Ke.visible&&A.push(y,le,Ke,G,Le.z,Ie)}}else ge.visible&&A.push(y,le,ge,G,Le.z,null)}}let $=y.children;for(let le=0,ge=$.length;le0&&Pa(P,L,G),$.length>0&&Pa($,L,G),le.length>0&&Pa(le,L,G),be.buffers.depth.setTest(!0),be.buffers.depth.setMask(!0),be.buffers.color.setMask(!0),be.setPolygonOffset(!1)}function xu(y,L,G,H){if((G.isScene===!0?G.overrideMaterial:null)!==null)return;d.state.transmissionRenderTarget[H.id]===void 0&&(d.state.transmissionRenderTarget[H.id]=new St(1,1,{generateMipmaps:!0,type:Ne.has(“EXT_color_buffer_half_float”)||Ne.has(“EXT_color_buffer_float”)?rt:Qe,minFilter:Yt,samples:4,stencilBuffer:r,resolveDepthBuffer:!1,resolveStencilBuffer:!1,colorSpace:Ge.workingColorSpace}));let $=d.state.transmissionRenderTarget[H.id],le=H.viewport||T;$.setSize(le.z*b.transmissionResolutionScale,le.w*b.transmissionResolutionScale);let ge=b.getRenderTarget(),de=b.getActiveCubeFace(),we=b.getActiveMipmapLevel();b.setRenderTarget($),b.getClearColor(N),V=b.getClearAlpha(),V<1&&b.setClearColor(16777215,.5),b.clear(),qe&&Ee.render(G);let Fe=b.toneMapping;b.toneMapping=An;let Ie=H.viewport;if(H.viewport!==void 0&&(H.viewport=void 0),d.setupLightsView(H),et===!0&&ne.setGlobalState(b.clippingPlanes,H),Pa(y,G,H),ke.updateMultisampleRenderTarget($),ke.updateRenderTargetMipmap($),Ne.has("WEBGL_multisampled_render_to_texture")===!1){let Ke=!1;for(let st=0,vt=L.length;st<vt;st++){let ut=L[st],ot=ut.object,Te=ut.geometry,gt=ut.material,je=ut.group;if(gt.side===ai&&ot.layers.test(H.layers)){let hi=gt.side;gt.side=Xt,gt.needsUpdate=!0,bu(ot,G,H,Te,gt,je),gt.side=hi,gt.needsUpdate=!0,Ke=!0}}Ke===!0&&(ke.updateMultisampleRenderTarget($),ke.updateRenderTargetMipmap($))}b.setRenderTarget(ge,de,we),b.setClearColor(N,V),Ie!==void 0&&(H.viewport=Ie),b.toneMapping=Fe}function Pa(y,L,G){let H=L.isScene===!0?L.overrideMaterial:null;for(let P=0,$=y.length;P0),Ie=!!G.morphAttributes.position,Ke=!!G.morphAttributes.normal,st=!!G.morphAttributes.color,vt=An;H.toneMapped&&(B===null||B.isXRRenderTarget===!0)&&(vt=b.toneMapping);let ut=G.morphAttributes.position||G.morphAttributes.normal||G.morphAttributes.color,ot=ut!==void 0?ut.length:0,Te=_e.get(H),gt=d.state.lights;if(et===!0&&(q===!0||y!==_)){let Wt=y===_&&H.id===E;ne.setState(H,y,Wt)}let je=!1;H.version===Te.__version?(Te.needsLights&&Te.lightsStateVersion!==gt.state.version||Te.outputColorSpace!==ge||P.isBatchedMesh&&Te.batching===!1||!P.isBatchedMesh&&Te.batching===!0||P.isBatchedMesh&&Te.batchingColor===!0&&P.colorTexture===null||P.isBatchedMesh&&Te.batchingColor===!1&&P.colorTexture!==null||P.isInstancedMesh&&Te.instancing===!1||!P.isInstancedMesh&&Te.instancing===!0||P.isSkinnedMesh&&Te.skinning===!1||!P.isSkinnedMesh&&Te.skinning===!0||P.isInstancedMesh&&Te.instancingColor===!0&&P.instanceColor===null||P.isInstancedMesh&&Te.instancingColor===!1&&P.instanceColor!==null||P.isInstancedMesh&&Te.instancingMorph===!0&&P.morphTexture===null||P.isInstancedMesh&&Te.instancingMorph===!1&&P.morphTexture!==null||Te.envMap!==de||H.fog===!0&&Te.fog!==$||Te.numClippingPlanes!==void 0&&(Te.numClippingPlanes!==ne.numPlanes||Te.numIntersection!==ne.numIntersection)||Te.vertexAlphas!==we||Te.vertexTangents!==Fe||Te.morphTargets!==Ie||Te.morphNormals!==Ke||Te.morphColors!==st||Te.toneMapping!==vt||Te.morphTargetsCount!==ot)&&(je=!0):(je=!0,Te.__version=H.version);let hi=Te.currentProgram;je===!0&&(hi=Ua(H,L,P));let Ns=!1,ui=!1,kr=!1,xt=hi.getUniforms(),_i=Te.uniforms;if(be.useProgram(hi.program)&&(Ns=!0,ui=!0,kr=!0),H.id!==E&&(E=H.id,ui=!0),Ns||_!==y){be.buffers.depth.getReversed()&&y.reversedDepth!==!0&&(y._reversedDepth=!0,y.updateProjectionMatrix()),xt.setValue(w,”projectionMatrix”,y.projectionMatrix),xt.setValue(w,”viewMatrix”,y.matrixWorldInverse);let $t=xt.map.cameraPosition;$t!==void 0&&$t.setValue(w,me.setFromMatrixPosition(y.matrixWorld)),De.logarithmicDepthBuffer&&xt.setValue(w,”logDepthBufFC”,2/(Math.log(y.far+1)/Math.LN2)),(H.isMeshPhongMaterial||H.isMeshToonMaterial||H.isMeshLambertMaterial||H.isMeshBasicMaterial||H.isMeshStandardMaterial||H.isShaderMaterial)&&xt.setValue(w,”isOrthographic”,y.isOrthographicCamera===!0),_!==y&&(_=y,ui=!0,kr=!0)}if(P.isSkinnedMesh){xt.setOptional(w,P,”bindMatrix”),xt.setOptional(w,P,”bindMatrixInverse”);let Wt=P.skeleton;Wt&&(Wt.boneTexture===null&&Wt.computeBoneTexture(),xt.setValue(w,”boneTexture”,Wt.boneTexture,ke))}P.isBatchedMesh&&(xt.setOptional(w,P,”batchingTexture”),xt.setValue(w,”batchingTexture”,P._matricesTexture,ke),xt.setOptional(w,P,”batchingIdTexture”),xt.setValue(w,”batchingIdTexture”,P._indirectTexture,ke),xt.setOptional(w,P,”batchingColorTexture”),P._colorsTexture!==null&&xt.setValue(w,”batchingColorTexture”,P._colorsTexture,ke));let yi=G.morphAttributes;if((yi.position!==void 0||yi.normal!==void 0||yi.color!==void 0)&&ee.update(P,G,hi),(ui||Te.receiveShadow!==P.receiveShadow)&&(Te.receiveShadow=P.receiveShadow,xt.setValue(w,”receiveShadow”,P.receiveShadow)),H.isMeshGouraudMaterial&&H.envMap!==null&&(_i.envMap.value=de,_i.flipEnvMap.value=de.isCubeTexture&&de.isRenderTargetTexture===!1?-1:1),H.isMeshStandardMaterial&&H.envMap===null&&L.environment!==null&&(_i.envMapIntensity.value=L.environmentIntensity),ui&&(xt.setValue(w,”toneMappingExposure”,b.toneMappingExposure),Te.needsLights&&_A(_i,kr),$&&H.fog===!0&&Y.refreshFogUniforms(_i,$),Y.refreshMaterialUniforms(_i,H,z,j,d.state.transmissionRenderTarget[y.id]),Br.upload(w,_u(Te),_i,ke)),H.isShaderMaterial&&H.uniformsNeedUpdate===!0&&(Br.upload(w,_u(Te),_i,ke),H.uniformsNeedUpdate=!1),H.isSpriteMaterial&&xt.setValue(w,”center”,P.center),xt.setValue(w,”modelViewMatrix”,P.modelViewMatrix),xt.setValue(w,”normalMatrix”,P.normalMatrix),xt.setValue(w,”modelMatrix”,P.matrixWorld),H.isShaderMaterial||H.isRawShaderMaterial){let Wt=H.uniformsGroups;for(let $t=0,Vc=Wt.length;$t0&&ke.useMultisampledRTT(y)===!1?P=_e.get(y).__webglMultisampledFramebuffer:Array.isArray(Fe)?P=Fe[G]:P=Fe,T.copy(y.viewport),U.copy(y.scissor),Q=y.scissorTest}else T.copy(ae).multiplyScalar(z).floor(),U.copy(fe).multiplyScalar(z).floor(),Q=Re;if(G!==0&&(P=EA),be.bindFramebuffer(w.FRAMEBUFFER,P)&&H&&be.drawBuffers(y,P),be.viewport(T),be.scissor(U),be.setScissorTest(Q),$){let de=_e.get(y.texture);w.framebufferTexture2D(w.FRAMEBUFFER,w.COLOR_ATTACHMENT0,w.TEXTURE_CUBE_MAP_POSITIVE_X+L,de.__webglTexture,G)}else if(le){let de=L;for(let we=0;we=0&&L=0&&G1&&w.readBuffer(w.COLOR_ATTACHMENT0+ge),w.readPixels(L,G,H,P,ve.convert(Fe),ve.convert(Ie),$))}finally{let we=B!==null?_e.get(B).__webglFramebuffer:null;be.bindFramebuffer(w.FRAMEBUFFER,we)}}},this.readRenderTargetPixelsAsync=async function(y,L,G,H,P,$,le,ge=0){if(!(y&&y.isWebGLRenderTarget))throw new Error(“THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.”);let de=_e.get(y).__webglFramebuffer;if(y.isWebGLCubeRenderTarget&&le!==void 0&&(de=de[le]),de)if(L>=0&&L=0&&G1&&w.readBuffer(w.COLOR_ATTACHMENT0+ge),w.readPixels(L,G,H,P,ve.convert(Fe),ve.convert(Ie),0);let st=B!==null?_e.get(B).__webglFramebuffer:null;be.bindFramebuffer(w.FRAMEBUFFER,st);let vt=w.fenceSync(w.SYNC_GPU_COMMANDS_COMPLETE,0);return w.flush(),await Wf(w,vt,4),w.bindBuffer(w.PIXEL_PACK_BUFFER,Ke),w.getBufferSubData(w.PIXEL_PACK_BUFFER,0,$),w.deleteBuffer(Ke),w.deleteSync(vt),$}else throw new Error(“THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.”)},this.copyFramebufferToTexture=function(y,L=null,G=0){let H=Math.pow(2,-G),P=Math.floor(y.image.width*H),$=Math.floor(y.image.height*H),le=L!==null?L.x:0,ge=L!==null?L.y:0;ke.setTexture2D(y,0),w.copyTexSubImage2D(w.TEXTURE_2D,G,0,0,le,ge,P,$),be.unbindTexture()};let vA=w.createFramebuffer(),SA=w.createFramebuffer();this.copyTextureToTexture=function(y,L,G=null,H=null,P=0,$=null){$===null&&(P!==0?(ir(“WebGLRenderer: copyTextureToTexture function signature has changed to support src and dst mipmap levels.”),$=P,P=0):$=0);let le,ge,de,we,Fe,Ie,Ke,st,vt,ut=y.isCompressedTexture?y.mipmaps[$]:y.image;if(G!==null)le=G.max.x-G.min.x,ge=G.max.y-G.min.y,de=G.isBox3?G.max.z-G.min.z:1,we=G.min.x,Fe=G.min.y,Ie=G.isBox3?G.min.z:0;else{let yi=Math.pow(2,-P);le=Math.floor(ut.width*yi),ge=Math.floor(ut.height*yi),y.isDataArrayTexture?de=ut.depth:y.isData3DTexture?de=Math.floor(ut.depth*yi):de=1,we=0,Fe=0,Ie=0}H!==null?(Ke=H.x,st=H.y,vt=H.z):(Ke=0,st=0,vt=0);let ot=ve.convert(L.format),Te=ve.convert(L.type),gt;L.isData3DTexture?(ke.setTexture3D(L,0),gt=w.TEXTURE_3D):L.isDataArrayTexture||L.isCompressedArrayTexture?(ke.setTexture2DArray(L,0),gt=w.TEXTURE_2D_ARRAY):(ke.setTexture2D(L,0),gt=w.TEXTURE_2D),w.pixelStorei(w.UNPACK_FLIP_Y_WEBGL,L.flipY),w.pixelStorei(w.UNPACK_PREMULTIPLY_ALPHA_WEBGL,L.premultiplyAlpha),w.pixelStorei(w.UNPACK_ALIGNMENT,L.unpackAlignment);let je=w.getParameter(w.UNPACK_ROW_LENGTH),hi=w.getParameter(w.UNPACK_IMAGE_HEIGHT),Ns=w.getParameter(w.UNPACK_SKIP_PIXELS),ui=w.getParameter(w.UNPACK_SKIP_ROWS),kr=w.getParameter(w.UNPACK_SKIP_IMAGES);w.pixelStorei(w.UNPACK_ROW_LENGTH,ut.width),w.pixelStorei(w.UNPACK_IMAGE_HEIGHT,ut.height),w.pixelStorei(w.UNPACK_SKIP_PIXELS,we),w.pixelStorei(w.UNPACK_SKIP_ROWS,Fe),w.pixelStorei(w.UNPACK_SKIP_IMAGES,Ie);let xt=y.isDataArrayTexture||y.isData3DTexture,_i=L.isDataArrayTexture||L.isData3DTexture;if(y.isDepthTexture){let yi=_e.get(y),Wt=_e.get(L),$t=_e.get(yi.__renderTarget),Vc=_e.get(Wt.__renderTarget);be.bindFramebuffer(w.READ_FRAMEBUFFER,$t.__webglFramebuffer),be.bindFramebuffer(w.DRAW_FRAMEBUFFER,Vc.__webglFramebuffer);for(let is=0;is<de;is++)xt&&(w.framebufferTextureLayer(w.READ_FRAMEBUFFER,w.COLOR_ATTACHMENT0,_e.get(y).__webglTexture,P,Ie+is),w.framebufferTextureLayer(w.DRAW_FRAMEBUFFER,w.COLOR_ATTACHMENT0,_e.get(L).__webglTexture,$,vt+is)),w.blitFramebuffer(we,Fe,le,ge,Ke,st,le,ge,w.DEPTH_BUFFER_BIT,w.NEAREST);be.bindFramebuffer(w.READ_FRAMEBUFFER,null),be.bindFramebuffer(w.DRAW_FRAMEBUFFER,null)}else if(P!==0||y.isRenderTargetTexture||_e.has(y)){let yi=_e.get(y),Wt=_e.get(L);be.bindFramebuffer(w.READ_FRAMEBUFFER,vA),be.bindFramebuffer(w.DRAW_FRAMEBUFFER,SA);for(let $t=0;$t<de;$t++)xt?w.framebufferTextureLayer(w.READ_FRAMEBUFFER,w.COLOR_ATTACHMENT0,yi.__webglTexture,P,Ie+$t):w.framebufferTexture2D(w.READ_FRAMEBUFFER,w.COLOR_ATTACHMENT0,w.TEXTURE_2D,yi.__webglTexture,P),_i?w.framebufferTextureLayer(w.DRAW_FRAMEBUFFER,w.COLOR_ATTACHMENT0,Wt.__webglTexture,$,vt+$t):w.framebufferTexture2D(w.DRAW_FRAMEBUFFER,w.COLOR_ATTACHMENT0,w.TEXTURE_2D,Wt.__webglTexture,$),P!==0?w.blitFramebuffer(we,Fe,le,ge,Ke,st,le,ge,w.COLOR_BUFFER_BIT,w.NEAREST):_i?w.copyTexSubImage3D(gt,$,Ke,st,vt+$t,we,Fe,le,ge):w.copyTexSubImage2D(gt,$,Ke,st,we,Fe,le,ge);be.bindFramebuffer(w.READ_FRAMEBUFFER,null),be.bindFramebuffer(w.DRAW_FRAMEBUFFER,null)}else _i?y.isDataTexture||y.isData3DTexture?w.texSubImage3D(gt,$,Ke,st,vt,le,ge,de,ot,Te,ut.data):L.isCompressedArrayTexture?w.compressedTexSubImage3D(gt,$,Ke,st,vt,le,ge,de,ot,ut.data):w.texSubImage3D(gt,$,Ke,st,vt,le,ge,de,ot,Te,ut):y.isDataTexture?w.texSubImage2D(w.TEXTURE_2D,$,Ke,st,le,ge,ot,Te,ut.data):y.isCompressedTexture?w.compressedTexSubImage2D(w.TEXTURE_2D,$,Ke,st,ut.width,ut.height,ot,ut.data):w.texSubImage2D(w.TEXTURE_2D,$,Ke,st,le,ge,ot,Te,ut);w.pixelStorei(w.UNPACK_ROW_LENGTH,je),w.pixelStorei(w.UNPACK_IMAGE_HEIGHT,hi),w.pixelStorei(w.UNPACK_SKIP_PIXELS,Ns),w.pixelStorei(w.UNPACK_SKIP_ROWS,ui),w.pixelStorei(w.UNPACK_SKIP_IMAGES,kr),$===0&&L.generateMipmaps&&w.generateMipmap(gt),be.unbindTexture()},this.initRenderTarget=function(y){_e.get(y).__webglFramebuffer===void 0&&ke.setupRenderTarget(y)},this.initTexture=function(y){y.isCubeTexture?ke.setTextureCube(y,0):y.isData3DTexture?ke.setTexture3D(y,0):y.isDataArrayTexture||y.isCompressedArrayTexture?ke.setTexture2DArray(y,0):ke.setTexture2D(y,0),be.unbindTexture()},this.resetState=function(){I=0,R=0,B=null,be.reset(),ce.reset()},typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}get coordinateSystem(){return Bi}get outputColorSpace(){return this._outputColorSpace}set outputColorSpace(e){this._outputColorSpace=e;let t=this.getContext();t.drawingBufferColorSpace=Ge._getDrawingBufferColorSpace(e),t.unpackColorSpace=Ge._getUnpackColorSpace()}};var vd={type:"change"},fh={type:"start"},Cd={type:"end"},dc=new Hi,Sd=new ei,l_=Math.cos(70*Ca.DEG2RAD),Ft=new D,ci=2*Math.PI,at={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6},uh=1e-6,pc=class extends gs{constructor(e,t=null){super(e,t),this.state=at.NONE,this.target=new D,this.cursor=new D,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minTargetRadius=0,this.maxTargetRadius=1/0,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.enableDamping=!1,this.dampingFactor=.05,this.enableZoom=!0,this.zoomSpeed=1,this.enableRotate=!0,this.rotateSpeed=1,this.keyRotateSpeed=1,this.enablePan=!0,this.panSpeed=1,this.screenSpacePanning=!0,this.keyPanSpeed=7,this.zoomToCursor=!1,this.autoRotate=!1,this.autoRotateSpeed=2,this.keys={LEFT:"ArrowLeft",UP:"ArrowUp",RIGHT:"ArrowRight",BOTTOM:"ArrowDown"},this.mouseButtons={LEFT:ri.ROTATE,MIDDLE:ri.DOLLY,RIGHT:ri.PAN},this.touches={ONE:vi.ROTATE,TWO:vi.DOLLY_PAN},this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this._domElementKeyEvents=null,this._lastPosition=new D,this._lastQuaternion=new qt,this._lastTargetPosition=new D,this._quat=new qt().setFromUnitVectors(e.up,new D(0,1,0)),this._quatInverse=this._quat.clone().invert(),this._spherical=new dr,this._sphericalDelta=new dr,this._scale=1,this._panOffset=new D,this._rotateStart=new ue,this._rotateEnd=new ue,this._rotateDelta=new ue,this._panStart=new ue,this._panEnd=new ue,this._panDelta=new ue,this._dollyStart=new ue,this._dollyEnd=new ue,this._dollyDelta=new ue,this._dollyDirection=new D,this._mouse=new ue,this._performCursorZoom=!1,this._pointers=[],this._pointerPositions={},this._controlActive=!1,this._onPointerMove=u_.bind(this),this._onPointerDown=h_.bind(this),this._onPointerUp=f_.bind(this),this._onContextMenu=b_.bind(this),this._onMouseWheel=A_.bind(this),this._onKeyDown=m_.bind(this),this._onTouchStart=g_.bind(this),this._onTouchMove=x_.bind(this),this._onMouseDown=d_.bind(this),this._onMouseMove=p_.bind(this),this._interceptControlDown=__.bind(this),this._interceptControlUp=y_.bind(this),this.domElement!==null&&this.connect(this.domElement),this.update()}connect(e){super.connect(e),this.domElement.addEventListener("pointerdown",this._onPointerDown),this.domElement.addEventListener("pointercancel",this._onPointerUp),this.domElement.addEventListener("contextmenu",this._onContextMenu),this.domElement.addEventListener("wheel",this._onMouseWheel,{passive:!1}),this.domElement.getRootNode().addEventListener("keydown",this._interceptControlDown,{passive:!0,capture:!0}),this.domElement.style.touchAction="none"}disconnect(){this.domElement.removeEventListener("pointerdown",this._onPointerDown),this.domElement.removeEventListener("pointermove",this._onPointerMove),this.domElement.removeEventListener("pointerup",this._onPointerUp),this.domElement.removeEventListener("pointercancel",this._onPointerUp),this.domElement.removeEventListener("wheel",this._onMouseWheel),this.domElement.removeEventListener("contextmenu",this._onContextMenu),this.stopListenToKeyEvents(),this.domElement.getRootNode().removeEventListener("keydown",this._interceptControlDown,{capture:!0}),this.domElement.style.touchAction="auto"}dispose(){this.disconnect()}getPolarAngle(){return this._spherical.phi}getAzimuthalAngle(){return this._spherical.theta}getDistance(){return this.object.position.distanceTo(this.target)}listenToKeyEvents(e){e.addEventListener("keydown",this._onKeyDown),this._domElementKeyEvents=e}stopListenToKeyEvents(){this._domElementKeyEvents!==null&&(this._domElementKeyEvents.removeEventListener("keydown",this._onKeyDown),this._domElementKeyEvents=null)}saveState(){this.target0.copy(this.target),this.position0.copy(this.object.position),this.zoom0=this.object.zoom}reset(){this.target.copy(this.target0),this.object.position.copy(this.position0),this.object.zoom=this.zoom0,this.object.updateProjectionMatrix(),this.dispatchEvent(vd),this.update(),this.state=at.NONE}update(e=null){let t=this.object.position;Ft.copy(t).sub(this.target),Ft.applyQuaternion(this._quat),this._spherical.setFromVector3(Ft),this.autoRotate&&this.state===at.NONE&&this._rotateLeft(this._getAutoRotationAngle(e)),this.enableDamping?(this._spherical.theta+=this._sphericalDelta.theta*this.dampingFactor,this._spherical.phi+=this._sphericalDelta.phi*this.dampingFactor):(this._spherical.theta+=this._sphericalDelta.theta,this._spherical.phi+=this._sphericalDelta.phi);let i=this.minAzimuthAngle,s=this.maxAzimuthAngle;isFinite(i)&&isFinite(s)&&(iMath.PI&&(i-=ci),sMath.PI&&(s-=ci),i(i+s)/2?Math.max(i,this._spherical.theta):Math.min(s,this._spherical.theta)),this._spherical.phi=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,this._spherical.phi)),this._spherical.makeSafe(),this.enableDamping===!0?this.target.addScaledVector(this._panOffset,this.dampingFactor):this.target.add(this._panOffset),this.target.sub(this.cursor),this.target.clampLength(this.minTargetRadius,this.maxTargetRadius),this.target.add(this.cursor);let r=!1;if(this.zoomToCursor&&this._performCursorZoom||this.object.isOrthographicCamera)this._spherical.radius=this._clampDistance(this._spherical.radius);else{let a=this._spherical.radius;this._spherical.radius=this._clampDistance(this._spherical.radius*this._scale),r=a!=this._spherical.radius}if(Ft.setFromSpherical(this._spherical),Ft.applyQuaternion(this._quatInverse),t.copy(this.target).add(Ft),this.object.lookAt(this.target),this.enableDamping===!0?(this._sphericalDelta.theta*=1-this.dampingFactor,this._sphericalDelta.phi*=1-this.dampingFactor,this._panOffset.multiplyScalar(1-this.dampingFactor)):(this._sphericalDelta.set(0,0,0),this._panOffset.set(0,0,0)),this.zoomToCursor&&this._performCursorZoom){let a=null;if(this.object.isPerspectiveCamera){let o=Ft.length();a=this._clampDistance(o*this._scale);let c=o-a;this.object.position.addScaledVector(this._dollyDirection,c),this.object.updateMatrixWorld(),r=!!c}else if(this.object.isOrthographicCamera){let o=new D(this._mouse.x,this._mouse.y,0);o.unproject(this.object);let c=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),this.object.updateProjectionMatrix(),r=c!==this.object.zoom;let l=new D(this._mouse.x,this._mouse.y,0);l.unproject(this.object),this.object.position.sub(l).add(o),this.object.updateMatrixWorld(),a=Ft.length()}else console.warn(“WARNING: OrbitControls.js encountered an unknown camera type – zoom to cursor disabled.”),this.zoomToCursor=!1;a!==null&&(this.screenSpacePanning?this.target.set(0,0,-1).transformDirection(this.object.matrix).multiplyScalar(a).add(this.object.position):(dc.origin.copy(this.object.position),dc.direction.set(0,0,-1).transformDirection(this.object.matrix),Math.abs(this.object.up.dot(dc.direction))uh||8*(1-this._lastQuaternion.dot(this.object.quaternion))>uh||this._lastTargetPosition.distanceToSquared(this.target)>uh?(this.dispatchEvent(vd),this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),!0):!1}_getAutoRotationAngle(e){return e!==null?ci/60*this.autoRotateSpeed*e:ci/60/60*this.autoRotateSpeed}_getZoomScale(e){let t=Math.abs(e*.01);return Math.pow(.95,this.zoomSpeed*t)}_rotateLeft(e){this._sphericalDelta.theta-=e}_rotateUp(e){this._sphericalDelta.phi-=e}_panLeft(e,t){Ft.setFromMatrixColumn(t,0),Ft.multiplyScalar(-e),this._panOffset.add(Ft)}_panUp(e,t){this.screenSpacePanning===!0?Ft.setFromMatrixColumn(t,1):(Ft.setFromMatrixColumn(t,0),Ft.crossVectors(this.object.up,Ft)),Ft.multiplyScalar(e),this._panOffset.add(Ft)}_pan(e,t){let i=this.domElement;if(this.object.isPerspectiveCamera){let s=this.object.position;Ft.copy(s).sub(this.target);let r=Ft.length();r*=Math.tan(this.object.fov/2*Math.PI/180),this._panLeft(2*e*r/i.clientHeight,this.object.matrix),this._panUp(2*t*r/i.clientHeight,this.object.matrix)}else this.object.isOrthographicCamera?(this._panLeft(e*(this.object.right-this.object.left)/this.object.zoom/i.clientWidth,this.object.matrix),this._panUp(t*(this.object.top-this.object.bottom)/this.object.zoom/i.clientHeight,this.object.matrix)):(console.warn(“WARNING: OrbitControls.js encountered an unknown camera type – pan disabled.”),this.enablePan=!1)}_dollyOut(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale/=e:(console.warn(“WARNING: OrbitControls.js encountered an unknown camera type – dolly/zoom disabled.”),this.enableZoom=!1)}_dollyIn(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale*=e:(console.warn(“WARNING: OrbitControls.js encountered an unknown camera type – dolly/zoom disabled.”),this.enableZoom=!1)}_updateZoomParameters(e,t){if(!this.zoomToCursor)return;this._performCursorZoom=!0;let i=this.domElement.getBoundingClientRect(),s=e-i.left,r=t-i.top,a=i.width,o=i.height;this._mouse.x=s/a*2-1,this._mouse.y=-(r/o)*2+1,this._dollyDirection.set(this._mouse.x,this._mouse.y,1).unproject(this.object).sub(this.object.position).normalize()}_clampDistance(e){return Math.max(this.minDistance,Math.min(this.maxDistance,e))}_handleMouseDownRotate(e){this._rotateStart.set(e.clientX,e.clientY)}_handleMouseDownDolly(e){this._updateZoomParameters(e.clientX,e.clientX),this._dollyStart.set(e.clientX,e.clientY)}_handleMouseDownPan(e){this._panStart.set(e.clientX,e.clientY)}_handleMouseMoveRotate(e){this._rotateEnd.set(e.clientX,e.clientY),this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);let t=this.domElement;this._rotateLeft(ci*this._rotateDelta.x/t.clientHeight),this._rotateUp(ci*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd),this.update()}_handleMouseMoveDolly(e){this._dollyEnd.set(e.clientX,e.clientY),this._dollyDelta.subVectors(this._dollyEnd,this._dollyStart),this._dollyDelta.y>0?this._dollyOut(this._getZoomScale(this._dollyDelta.y)):this._dollyDelta.y<0&&this._dollyIn(this._getZoomScale(this._dollyDelta.y)),this._dollyStart.copy(this._dollyEnd),this.update()}_handleMouseMovePan(e){this._panEnd.set(e.clientX,e.clientY),this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd),this.update()}_handleMouseWheel(e){this._updateZoomParameters(e.clientX,e.clientY),e.deltaY0&&this._dollyOut(this._getZoomScale(e.deltaY)),this.update()}_handleKeyDown(e){let t=!1;switch(e.code){case this.keys.UP:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(ci*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,this.keyPanSpeed),t=!0;break;case this.keys.BOTTOM:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(-ci*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,-this.keyPanSpeed),t=!0;break;case this.keys.LEFT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(ci*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(this.keyPanSpeed,0),t=!0;break;case this.keys.RIGHT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(-ci*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(-this.keyPanSpeed,0),t=!0;break}t&&(e.preventDefault(),this.update())}_handleTouchStartRotate(e){if(this._pointers.length===1)this._rotateStart.set(e.pageX,e.pageY);else{let t=this._getSecondPointerPosition(e),i=.5*(e.pageX+t.x),s=.5*(e.pageY+t.y);this._rotateStart.set(i,s)}}_handleTouchStartPan(e){if(this._pointers.length===1)this._panStart.set(e.pageX,e.pageY);else{let t=this._getSecondPointerPosition(e),i=.5*(e.pageX+t.x),s=.5*(e.pageY+t.y);this._panStart.set(i,s)}}_handleTouchStartDolly(e){let t=this._getSecondPointerPosition(e),i=e.pageX-t.x,s=e.pageY-t.y,r=Math.sqrt(i*i+s*s);this._dollyStart.set(0,r)}_handleTouchStartDollyPan(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enablePan&&this._handleTouchStartPan(e)}_handleTouchStartDollyRotate(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enableRotate&&this._handleTouchStartRotate(e)}_handleTouchMoveRotate(e){if(this._pointers.length==1)this._rotateEnd.set(e.pageX,e.pageY);else{let i=this._getSecondPointerPosition(e),s=.5*(e.pageX+i.x),r=.5*(e.pageY+i.y);this._rotateEnd.set(s,r)}this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);let t=this.domElement;this._rotateLeft(ci*this._rotateDelta.x/t.clientHeight),this._rotateUp(ci*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd)}_handleTouchMovePan(e){if(this._pointers.length===1)this._panEnd.set(e.pageX,e.pageY);else{let t=this._getSecondPointerPosition(e),i=.5*(e.pageX+t.x),s=.5*(e.pageY+t.y);this._panEnd.set(i,s)}this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd)}_handleTouchMoveDolly(e){let t=this._getSecondPointerPosition(e),i=e.pageX-t.x,s=e.pageY-t.y,r=Math.sqrt(i*i+s*s);this._dollyEnd.set(0,r),this._dollyDelta.set(0,Math.pow(this._dollyEnd.y/this._dollyStart.y,this.zoomSpeed)),this._dollyOut(this._dollyDelta.y),this._dollyStart.copy(this._dollyEnd);let a=(e.pageX+t.x)*.5,o=(e.pageY+t.y)*.5;this._updateZoomParameters(a,o)}_handleTouchMoveDollyPan(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enablePan&&this._handleTouchMovePan(e)}_handleTouchMoveDollyRotate(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enableRotate&&this._handleTouchMoveRotate(e)}_addPointer(e){this._pointers.push(e.pointerId)}_removePointer(e){delete this._pointerPositions[e.pointerId];for(let t=0;t<this._pointers.length;t++)if(this._pointers[t]==e.pointerId){this._pointers.splice(t,1);return}}_isTrackingPointer(e){for(let t=0;t0){let s=_n[0].object;Lr.setFromNormalAndCoplanarPoint(e.getWorldDirection(Lr.normal),ph.setFromMatrixPosition(s.matrixWorld)),Yi!==s&&Yi!==null&&(this.dispatchEvent({type:”hoveroff”,object:Yi}),t.style.cursor=”auto”,Yi=null),Yi!==s&&(this.dispatchEvent({type:”hoveron”,object:s}),t.style.cursor=”pointer”,Yi=s)}else Yi!==null&&(this.dispatchEvent({type:”hoveroff”,object:Yi}),t.style.cursor=”auto”,Yi=null);Ac.copy(bn)}}function v_(n){let e=this.object,t=this.domElement,i=this.raycaster;this.enabled!==!1&&(this._updatePointer(n),this._updateState(n),_n.length=0,i.setFromCamera(bn,e),i.intersectObjects(this.objects,this.recursive,_n),_n.length>0&&(this.transformGroup===!0?Vt=Rd(_n[0].object):Vt=_n[0].object,Lr.setFromNormalAndCoplanarPoint(e.getWorldDirection(Lr.normal),ph.setFromMatrixPosition(Vt.matrixWorld)),i.ray.intersectPlane(Lr,mc)&&(this.state===Kn.PAN?(Id.copy(Vt.parent.matrixWorld).invert(),Md.copy(mc).sub(ph.setFromMatrixPosition(Vt.matrixWorld)),t.style.cursor=”move”,this.dispatchEvent({type:”dragstart”,object:Vt})):this.state===Kn.ROTATE&&(Td.set(0,1,0).applyQuaternion(e.quaternion).normalize(),wd.set(1,0,0).applyQuaternion(e.quaternion).normalize(),t.style.cursor=”move”,this.dispatchEvent({type:”dragstart”,object:Vt})))),Ac.copy(bn))}function S_(){this.enabled!==!1&&(Vt&&(this.dispatchEvent({type:”dragend”,object:Vt}),Vt=null),this.domElement.style.cursor=Yi?”pointer”:”auto”,this.state=Kn.NONE)}function C_(n){this.enabled!==!1&&n.preventDefault()}function Rd(n,e=null){return n.isGroup&&(e=n),n.parent===null?e:Rd(n.parent,e)}function Ah(n,e){if(e===kl)return console.warn(“THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles.”),n;if(e===Ir||e===Sa){let t=n.getIndex();if(t===null){let a=[],o=n.getAttribute(“position”);if(o!==void 0){for(let c=0;c<o.count;c++)a.push(c);n.setIndex(a),t=n.getIndex()}else return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."),n}let i=t.count-2,s=[];if(e===Ir)for(let a=1;a<=i;a++)s.push(t.getX(0)),s.push(t.getX(a)),s.push(t.getX(a+1));else for(let a=0;a<i;a++)a%2===0?(s.push(t.getX(a)),s.push(t.getX(a+1)),s.push(t.getX(a+2))):(s.push(t.getX(a+2)),s.push(t.getX(a+1)),s.push(t.getX(a)));s.length/3!==i&&console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.");let r=n.clone();return r.setIndex(s),r.clearGroups(),r}else return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:",e),n}var xc=class extends gi{constructor(e){super(e),this.dracoLoader=null,this.ktx2Loader=null,this.meshoptDecoder=null,this.pluginCallbacks=[],this.register(function(t){return new Eh(t)}),this.register(function(t){return new vh(t)}),this.register(function(t){return new Dh(t)}),this.register(function(t){return new Fh(t)}),this.register(function(t){return new Lh(t)}),this.register(function(t){return new Ch(t)}),this.register(function(t){return new Mh(t)}),this.register(function(t){return new Ih(t)}),this.register(function(t){return new Th(t)}),this.register(function(t){return new yh(t)}),this.register(function(t){return new wh(t)}),this.register(function(t){return new Sh(t)}),this.register(function(t){return new Bh(t)}),this.register(function(t){return new Rh(t)}),this.register(function(t){return new bh(t)}),this.register(function(t){return new Ph(t)}),this.register(function(t){return new Uh(t)})}load(e,t,i,s){let r=this,a;if(this.resourcePath!=="")a=this.resourcePath;else if(this.path!==""){let l=pn.extractUrlBase(e);a=pn.resolveURL(l,this.path)}else a=pn.extractUrlBase(e);this.manager.itemStart(e);let o=function(l){s?s(l):console.error(l),r.manager.itemError(e),r.manager.itemEnd(e)},c=new Ui(this.manager);c.setPath(this.path),c.setResponseType("arraybuffer"),c.setRequestHeader(this.requestHeader),c.setWithCredentials(this.withCredentials),c.load(e,function(l){try{r.parse(l,a,function(h){t(h),r.manager.itemEnd(e)},o)}catch(h){o(h)}},i,o)}setDRACOLoader(e){return this.dracoLoader=e,this}setKTX2Loader(e){return this.ktx2Loader=e,this}setMeshoptDecoder(e){return this.meshoptDecoder=e,this}register(e){return this.pluginCallbacks.indexOf(e)===-1&&this.pluginCallbacks.push(e),this}unregister(e){return this.pluginCallbacks.indexOf(e)!==-1&&this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(e),1),this}parse(e,t,i,s){let r,a={},o={},c=new TextDecoder;if(typeof e=="string")r=JSON.parse(e);else if(e instanceof ArrayBuffer)if(c.decode(new Uint8Array(e,0,4))===Pd){try{a[We.KHR_BINARY_GLTF]=new Nh(e)}catch(u){s&&s(u);return}r=JSON.parse(a[We.KHR_BINARY_GLTF].content)}else r=JSON.parse(c.decode(e));else r=e;if(r.asset===void 0||r.asset.version[0]=2.0 are supported.”));return}let l=new Vh(r,{path:t||this.resourcePath||””,crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});l.fileLoader.setRequestHeader(this.requestHeader);for(let h=0;h<this.pluginCallbacks.length;h++){let u=this.pluginCallbacks[h](l);u.name||console.error("THREE.GLTFLoader: Invalid plugin found: missing name"),o[u.name]=u,a[u.name]=!0}if(r.extensionsUsed)for(let h=0;h=0&&o[u]===void 0&&console.warn(‘THREE.GLTFLoader: Unknown extension “‘+u+’”.’)}}l.setExtensions(a),l.setPlugins(o),l.parse(i,s)}parseAsync(e,t){let i=this;return new Promise(function(s,r){i.parse(e,t,s,r)})}};function M_(){let n={};return{get:function(e){return n[e]},add:function(e,t){n[e]=t},remove:function(e){delete n[e]},removeAll:function(){n={}}}}var We={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_DISPERSION:”KHR_materials_dispersion”,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_MATERIALS_BUMP:”EXT_materials_bump”,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”},bh=class{constructor(e){this.parser=e,this.name=We.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){let e=this.parser,t=this.parser.json.nodes||[];for(let i=0,s=t.length;i=0)throw new Error(“THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures”);return null}return t.loadTextureImage(e,r.source,a)}},Fh=class{constructor(e){this.parser=e,this.name=We.EXT_TEXTURE_WEBP}loadTexture(e){let t=this.name,i=this.parser,s=i.json,r=s.textures[e];if(!r.extensions||!r.extensions[t])return null;let a=r.extensions[t],o=s.images[a.source],c=i.textureLoader;if(o.uri){let l=i.options.manager.getHandler(o.uri);l!==null&&(c=l)}return i.loadTextureImage(e,a.source,c)}},Lh=class{constructor(e){this.parser=e,this.name=We.EXT_TEXTURE_AVIF}loadTexture(e){let t=this.name,i=this.parser,s=i.json,r=s.textures[e];if(!r.extensions||!r.extensions[t])return null;let a=r.extensions[t],o=s.images[a.source],c=i.textureLoader;if(o.uri){let l=i.options.manager.getHandler(o.uri);l!==null&&(c=l)}return i.loadTextureImage(e,a.source,c)}},Ph=class{constructor(e){this.name=We.EXT_MESHOPT_COMPRESSION,this.parser=e}loadBufferView(e){let t=this.parser.json,i=t.bufferViews[e];if(i.extensions&&i.extensions[this.name]){let s=i.extensions[this.name],r=this.parser.getDependency(“buffer”,s.buffer),a=this.parser.options.meshoptDecoder;if(!a||!a.supported){if(t.extensionsRequired&&t.extensionsRequired.indexOf(this.name)>=0)throw new Error(“THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files”);return null}return r.then(function(o){let c=s.byteOffset||0,l=s.byteLength||0,h=s.count,u=s.byteStride,f=new Uint8Array(o,c,l);return a.decodeGltfBufferAsync?a.decodeGltfBufferAsync(h,u,f,s.mode,s.filter).then(function(p){return p.buffer}):a.ready.then(function(){let p=new ArrayBuffer(h*u);return a.decodeGltfBuffer(new Uint8Array(p),h,u,f,s.mode,s.filter),p})})}else return null}},Uh=class{constructor(e){this.name=We.EXT_MESH_GPU_INSTANCING,this.parser=e}createNodeMesh(e){let t=this.parser.json,i=t.nodes[e];if(!i.extensions||!i.extensions[this.name]||i.mesh===void 0)return null;let s=t.meshes[i.mesh];for(let l of s.primitives)if(l.mode!==Mi.TRIANGLES&&l.mode!==Mi.TRIANGLE_STRIP&&l.mode!==Mi.TRIANGLE_FAN&&l.mode!==void 0)return null;let a=i.extensions[this.name].attributes,o=[],c={};for(let l in a)o.push(this.parser.getDependency(“accessor”,a[l]).then(h=>(c[l]=h,c[l])));return o.length{let h=l.pop(),u=h.isGroup?h.children:[h],f=l[0].count,p=[];for(let m of u){let g=new pe,A=new D,d=new qt,S=new D(1,1,1),v=new ra(m.geometry,m.material,f);for(let b=0;b<f;b++)c.TRANSLATION&&A.fromBufferAttribute(c.TRANSLATION,b),c.ROTATION&&d.fromBufferAttribute(c.ROTATION,b),c.SCALE&&S.fromBufferAttribute(c.SCALE,b),v.setMatrixAt(b,g.compose(A,d,S));for(let b in c)if(b==="_COLOR_0"){let M=c[b];v.instanceColor=new Un(M.array,M.itemSize,M.normalized)}else b!=="TRANSLATION"&&b!=="ROTATION"&&b!=="SCALE"&&m.geometry.setAttribute(b,c[b]);lt.prototype.copy.call(v,m),this.parser.assignFinalMaterial(v),p.push(v)}return h.isGroup?(h.clear(),h.add(…p),h):p[0]}))}},Pd="glTF",Ia=12,Bd={JSON:1313821514,BIN:5130562},Nh=class{constructor(e){this.name=We.KHR_BINARY_GLTF,this.content=null,this.body=null;let t=new DataView(e,0,Ia),i=new TextDecoder;if(this.header={magic:i.decode(new Uint8Array(e.slice(0,4))),version:t.getUint32(4,!0),length:t.getUint32(8,!0)},this.header.magic!==Pd)throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header.");if(this.header.version<2)throw new Error("THREE.GLTFLoader: Legacy binary file detected.");let s=this.header.length-Ia,r=new DataView(e,Ia),a=0;for(;a<s;){let o=r.getUint32(a,!0);a+=4;let c=r.getUint32(a,!0);if(a+=4,c===Bd.JSON){let l=new Uint8Array(e,Ia+a,o);this.content=i.decode(l)}else if(c===Bd.BIN){let l=Ia+a;this.body=e.slice(l,l+o)}a+=o}if(this.content===null)throw new Error("THREE.GLTFLoader: JSON content not found.")}},Oh=class{constructor(e,t){if(!t)throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided.");this.name=We.KHR_DRACO_MESH_COMPRESSION,this.json=e,this.dracoLoader=t,this.dracoLoader.preload()}decodePrimitive(e,t){let i=this.json,s=this.dracoLoader,r=e.extensions[this.name].bufferView,a=e.extensions[this.name].attributes,o={},c={},l={};for(let h in a){let u=Hh[h]||h.toLowerCase();o[u]=a[h]}for(let h in e.attributes){let u=Hh[h]||h.toLowerCase();if(a[h]!==void 0){let f=i.accessors[e.attributes[h]],p=Pr[f.componentType];l[u]=p.name,c[u]=f.normalized===!0}}return t.getDependency("bufferView",r).then(function(h){return new Promise(function(u,f){s.decodeDracoFile(h,function(p){for(let m in p.attributes){let g=p.attributes[m],A=c[m];A!==void 0&&(g.normalized=A)}u(p)},o,l,Mt,f)})})}},Qh=class{constructor(){this.name=We.KHR_TEXTURE_TRANSFORM}extendTexture(e,t){return(t.texCoord===void 0||t.texCoord===e.channel)&&t.offset===void 0&&t.rotation===void 0&&t.scale===void 0||(e=e.clone(),t.texCoord!==void 0&&(e.channel=t.texCoord),t.offset!==void 0&&e.offset.fromArray(t.offset),t.rotation!==void 0&&(e.rotation=t.rotation),t.scale!==void 0&&e.repeat.fromArray(t.scale),e.needsUpdate=!0),e}},kh=class{constructor(){this.name=We.KHR_MESH_QUANTIZATION}},bc=class extends un{constructor(e,t,i,s){super(e,t,i,s)}copySampleValue_(e){let t=this.resultBuffer,i=this.sampleValues,s=this.valueSize,r=e*s*3+s;for(let a=0;a!==s;a++)t[a]=i[r+a];return t}interpolate_(e,t,i,s){let r=this.resultBuffer,a=this.sampleValues,o=this.valueSize,c=o*2,l=o*3,h=s-t,u=(i-t)/h,f=u*u,p=f*u,m=e*l,g=m-l,A=-2*p+3*f,d=p-f,S=1-A,v=d-f+u;for(let b=0;b!==o;b++){let M=a[g+b+o],I=a[g+b+c]*h,R=a[m+b+o],B=a[m+b]*h;r[b]=S*M+v*I+A*R+d*B}return r}},I_=new qt,Gh=class extends bc{interpolate_(e,t,i,s){let r=super.interpolate_(e,t,i,s);return I_.fromArray(r).normalize().toArray(r),r}},Mi={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},Pr={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},Dd={9728:$e,9729:ze,9984:Ar,9985:mr,9986:_s,9987:Yt},Fd={33071:pi,33648:$s,10497:Pi},mh={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},Hh={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"},qn={scale:"scale",translation:"position",rotation:"quaternion",weights:"morphTargetInfluences"},T_={CUBICSPLINE:void 0,LINEAR:us,STEP:hs},gh={OPAQUE:"OPAQUE",MASK:"MASK",BLEND:"BLEND"};function w_(n){return n.DefaultMaterial===void 0&&(n.DefaultMaterial=new As({color:16777215,emissive:0,metalness:1,roughness:1,transparent:!1,depthTest:!0,side:Li})),n.DefaultMaterial}function Bs(n,e,t){for(let i in t.extensions)n[i]===void 0&&(e.userData.gltfExtensions=e.userData.gltfExtensions||{},e.userData.gltfExtensions[i]=t.extensions[i])}function Ji(n,e){e.extras!==void 0&&(typeof e.extras=="object"?Object.assign(n.userData,e.extras):console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, "+e.extras))}function R_(n,e,t){let i=!1,s=!1,r=!1;for(let l=0,h=e.length;l<h;l++){let u=e[l];if(u.POSITION!==void 0&&(i=!0),u.NORMAL!==void 0&&(s=!0),u.COLOR_0!==void 0&&(r=!0),i&&s&&r)break}if(!i&&!s&&!r)return Promise.resolve(n);let a=[],o=[],c=[];for(let l=0,h=e.length;l<h;l++){let u=e[l];if(i){let f=u.POSITION!==void 0?t.getDependency("accessor",u.POSITION):n.attributes.position;a.push(f)}if(s){let f=u.NORMAL!==void 0?t.getDependency("accessor",u.NORMAL):n.attributes.normal;o.push(f)}if(r){let f=u.COLOR_0!==void 0?t.getDependency("accessor",u.COLOR_0):n.attributes.color;c.push(f)}}return Promise.all([Promise.all(a),Promise.all(o),Promise.all(c)]).then(function(l){let h=l[0],u=l[1],f=l[2];return i&&(n.morphAttributes.position=h),s&&(n.morphAttributes.normal=u),r&&(n.morphAttributes.color=f),n.morphTargetsRelative=!0,n})}function B_(n,e){if(n.updateMorphTargets(),e.weights!==void 0)for(let t=0,i=e.weights.length;t<i;t++)n.morphTargetInfluences[t]=e.weights[t];if(e.extras&&Array.isArray(e.extras.targetNames)){let t=e.extras.targetNames;if(n.morphTargetInfluences.length===t.length){n.morphTargetDictionary={};for(let i=0,s=t.length;i<s;i++)n.morphTargetDictionary[t[i]]=i}else console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.")}}function D_(n){let e,t=n.extensions&&n.extensions[We.KHR_DRACO_MESH_COMPRESSION];if(t?e="draco:"+t.bufferView+":"+t.indices+":"+xh(t.attributes):e=n.indices+":"+xh(n.attributes)+":"+n.mode,n.targets!==void 0)for(let i=0,s=n.targets.length;i<s;i++)e+=":"+xh(n.targets[i]);return e}function xh(n){let e="",t=Object.keys(n).sort();for(let i=0,s=t.length;i0||n.search(/^data:image/jpeg/)===0?”image/jpeg”:n.search(/.webp($|?)/i)>0||n.search(/^data:image/webp/)===0?”image/webp”:n.search(/.ktx2($|?)/i)>0||n.search(/^data:image/ktx2/)===0?”image/ktx2″:”image/png”}var L_=new pe,Vh=class{constructor(e={},t={}){this.json=e,this.extensions={},this.plugins={},this.options=t,this.cache=new M_,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 i=!1,s=-1,r=!1,a=-1;if(typeof navigator-1,a=r?o.match(/Firefox/([0-9]+)./)[1]:-1}typeof createImageBitmap>”u”||i&&s<17||r&&a<98?this.textureLoader=new ms(this.options.manager):this.textureLoader=new _a(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new Ui(this.options.manager),this.fileLoader.setResponseType("arraybuffer"),this.options.crossOrigin==="use-credentials"&&this.fileLoader.setWithCredentials(!0)}setExtensions(e){this.extensions=e}setPlugins(e){this.plugins=e}parse(e,t){let i=this,s=this.json,r=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll(function(a){return a._markDefs&&a._markDefs()}),Promise.all(this._invokeAll(function(a){return a.beforeRoot&&a.beforeRoot()})).then(function(){return Promise.all([i.getDependencies("scene"),i.getDependencies("animation"),i.getDependencies("camera")])}).then(function(a){let o={scene:a[0][s.scene||0],scenes:a[0],animations:a[1],cameras:a[2],asset:s.asset,parser:i,userData:{}};return Bs(r,o,s),Ji(o,s),Promise.all(i._invokeAll(function(c){return c.afterRoot&&c.afterRoot(o)})).then(function(){for(let c of o.scenes)c.updateMatrixWorld();e(o)})}).catch(t)}_markDefs(){let e=this.json.nodes||[],t=this.json.skins||[],i=this.json.meshes||[];for(let s=0,r=t.length;s<r;s++){let a=t[s].joints;for(let o=0,c=a.length;o<c;o++)e[a[o]].isBone=!0}for(let s=0,r=e.length;s<r;s++){let a=e[s];a.mesh!==void 0&&(this._addNodeRef(this.meshCache,a.mesh),a.skin!==void 0&&(i[a.mesh].isSkinnedMesh=!0)),a.camera!==void 0&&this._addNodeRef(this.cameraCache,a.camera)}}_addNodeRef(e,t){t!==void 0&&(e.refs[t]===void 0&&(e.refs[t]=e.uses[t]=0),e.refs[t]++)}_getNodeRef(e,t,i){if(e.refs[t]{let c=this.associations.get(a);c!=null&&this.associations.set(o,c);for(let[l,h]of a.children.entries())r(h,o.children[l])};return r(i,s),s.name+=”_instance_”+e.uses[t]++,s}_invokeOne(e){let t=Object.values(this.plugins);t.push(this);for(let i=0;i<t.length;i++){let s=e(t[i]);if(s)return s}return null}_invokeAll(e){let t=Object.values(this.plugins);t.unshift(this);let i=[];for(let s=0;s<t.length;s++){let r=e(t[s]);r&&i.push(r)}return i}getDependency(e,t){let i=e+":"+t,s=this.cache.get(i);if(!s){switch(e){case"scene":s=this.loadScene(t);break;case"node":s=this._invokeOne(function(r){return r.loadNode&&r.loadNode(t)});break;case"mesh":s=this._invokeOne(function(r){return r.loadMesh&&r.loadMesh(t)});break;case"accessor":s=this.loadAccessor(t);break;case"bufferView":s=this._invokeOne(function(r){return r.loadBufferView&&r.loadBufferView(t)});break;case"buffer":s=this.loadBuffer(t);break;case"material":s=this._invokeOne(function(r){return r.loadMaterial&&r.loadMaterial(t)});break;case"texture":s=this._invokeOne(function(r){return r.loadTexture&&r.loadTexture(t)});break;case"skin":s=this.loadSkin(t);break;case"animation":s=this._invokeOne(function(r){return r.loadAnimation&&r.loadAnimation(t)});break;case"camera":s=this.loadCamera(t);break;default:if(s=this._invokeOne(function(r){return r!=this&&r.getDependency&&r.getDependency(e,t)}),!s)throw new Error("Unknown type: "+e);break}this.cache.add(i,s)}return s}getDependencies(e){let t=this.cache.get(e);if(!t){let i=this,s=this.json[e+(e==="mesh"?"es":"s")]||[];t=Promise.all(s.map(function(r,a){return i.getDependency(e,a)})),this.cache.add(e,t)}return t}loadBuffer(e){let t=this.json.buffers[e],i=this.fileLoader;if(t.type&&t.type!=="arraybuffer")throw new Error("THREE.GLTFLoader: "+t.type+" buffer type is not supported.");if(t.uri===void 0&&e===0)return Promise.resolve(this.extensions[We.KHR_BINARY_GLTF].body);let s=this.options;return new Promise(function(r,a){i.load(pn.resolveURL(t.uri,s.path),r,void 0,function(){a(new Error('THREE.GLTFLoader: Failed to load buffer "'+t.uri+'".'))})})}loadBufferView(e){let t=this.json.bufferViews[e];return this.getDependency("buffer",t.buffer).then(function(i){let s=t.byteLength||0,r=t.byteOffset||0;return i.slice(r,r+s)})}loadAccessor(e){let t=this,i=this.json,s=this.json.accessors[e];if(s.bufferView===void 0&&s.sparse===void 0){let a=mh[s.type],o=Pr[s.componentType],c=s.normalized===!0,l=new o(s.count*a);return Promise.resolve(new _t(l,a,c))}let r=[];return s.bufferView!==void 0?r.push(this.getDependency("bufferView",s.bufferView)):r.push(null),s.sparse!==void 0&&(r.push(this.getDependency("bufferView",s.sparse.indices.bufferView)),r.push(this.getDependency("bufferView",s.sparse.values.bufferView))),Promise.all(r).then(function(a){let o=a[0],c=mh[s.type],l=Pr[s.componentType],h=l.BYTES_PER_ELEMENT,u=h*c,f=s.byteOffset||0,p=s.bufferView!==void 0?i.bufferViews[s.bufferView].byteStride:void 0,m=s.normalized===!0,g,A;if(p&&p!==u){let d=Math.floor(f/p),S="InterleavedBuffer:"+s.bufferView+":"+s.componentType+":"+d+":"+s.count,v=t.cache.get(S);v||(g=new l(o,d*p,s.count*p/h),v=new or(g,p/h),t.cache.add(S,v)),A=new Pn(v,c,f%p/h,m)}else o===null?g=new l(s.count*c):g=new l(o,f,s.count*c),A=new _t(g,c,m);if(s.sparse!==void 0){let d=mh.SCALAR,S=Pr[s.sparse.indices.componentType],v=s.sparse.indices.byteOffset||0,b=s.sparse.values.byteOffset||0,M=new S(a[1],v,s.sparse.count*d),I=new l(a[2],b,s.sparse.count*c);o!==null&&(A=new _t(A.array.slice(),A.itemSize,A.normalized)),A.normalized=!1;for(let R=0,B=M.length;R=2&&A.setY(E,I[R*c+1]),c>=3&&A.setZ(E,I[R*c+2]),c>=4&&A.setW(E,I[R*c+3]),c>=5)throw new Error(“THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.”)}A.normalized=m}return A})}loadTexture(e){let t=this.json,i=this.options,r=t.textures[e].source,a=t.images[r],o=this.textureLoader;if(a.uri){let c=i.manager.getHandler(a.uri);c!==null&&(o=c)}return this.loadTextureImage(e,r,o)}loadTextureImage(e,t,i){let s=this,r=this.json,a=r.textures[e],o=r.images[t],c=(o.uri||o.bufferView)+”:”+a.sampler;if(this.textureCache[c])return this.textureCache[c];let l=this.loadImageSource(t,i).then(function(h){h.flipY=!1,h.name=a.name||o.name||””,h.name===””&&typeof o.uri==”string”&&o.uri.startsWith(“data:image/”)===!1&&(h.name=o.uri);let f=(r.samplers||{})[a.sampler]||{};return h.magFilter=Dd[f.magFilter]||ze,h.minFilter=Dd[f.minFilter]||Yt,h.wrapS=Fd[f.wrapS]||Pi,h.wrapT=Fd[f.wrapT]||Pi,h.generateMipmaps=!h.isCompressedTexture&&h.minFilter!==$e&&h.minFilter!==ze,s.associations.set(h,{textures:e}),h}).catch(function(){return null});return this.textureCache[c]=l,l}loadImageSource(e,t){let i=this,s=this.json,r=this.options;if(this.sourceCache[e]!==void 0)return this.sourceCache[e].then(u=>u.clone());let a=s.images[e],o=self.URL||self.webkitURL,c=a.uri||””,l=!1;if(a.bufferView!==void 0)c=i.getDependency(“bufferView”,a.bufferView).then(function(u){l=!0;let f=new Blob([u],{type:a.mimeType});return c=o.createObjectURL(f),c});else if(a.uri===void 0)throw new Error(“THREE.GLTFLoader: Image “+e+” is missing URI and bufferView”);let h=Promise.resolve(c).then(function(u){return new Promise(function(f,p){let m=f;t.isImageBitmapLoader===!0&&(m=function(g){let A=new bt(g);A.needsUpdate=!0,f(A)}),t.load(pn.resolveURL(u,r.path),m,void 0,p)})}).then(function(u){return l===!0&&o.revokeObjectURL(c),Ji(u,a),u.userData.mimeType=a.mimeType||F_(a.uri),u}).catch(function(u){throw console.error(“THREE.GLTFLoader: Couldn’t load texture”,c),u});return this.sourceCache[e]=h,h}assignTexture(e,t,i,s){let r=this;return this.getDependency(“texture”,i.index).then(function(a){if(!a)return null;if(i.texCoord!==void 0&&i.texCoord>0&&(a=a.clone(),a.channel=i.texCoord),r.extensions[We.KHR_TEXTURE_TRANSFORM]){let o=i.extensions!==void 0?i.extensions[We.KHR_TEXTURE_TRANSFORM]:void 0;if(o){let c=r.associations.get(a);a=r.extensions[We.KHR_TEXTURE_TRANSFORM].extendTexture(a,o),r.associations.set(a,c)}}return s!==void 0&&(a.colorSpace=s),e[t]=a,a})}assignFinalMaterial(e){let t=e.geometry,i=e.material,s=t.attributes.tangent===void 0,r=t.attributes.color!==void 0,a=t.attributes.normal===void 0;if(e.isPoints){let o=”PointsMaterial:”+i.uuid,c=this.cache.get(o);c||(c=new ur,ii.prototype.copy.call(c,i),c.color.copy(i.color),c.map=i.map,c.sizeAttenuation=!1,this.cache.add(o,c)),i=c}else if(e.isLine){let o=”LineBasicMaterial:”+i.uuid,c=this.cache.get(o);c||(c=new hr,ii.prototype.copy.call(c,i),c.color.copy(i.color),c.map=i.map,this.cache.add(o,c)),i=c}if(s||r||a){let o=”ClonedMaterial:”+i.uuid+”:”;s&&(o+=”derivative-tangents:”),r&&(o+=”vertex-colors:”),a&&(o+=”flat-shading:”);let c=this.cache.get(o);c||(c=i.clone(),r&&(c.vertexColors=!0),a&&(c.flatShading=!0),s&&(c.normalScale&&(c.normalScale.y*=-1),c.clearcoatNormalScale&&(c.clearcoatNormalScale.y*=-1)),this.cache.add(o,c),this.associations.set(c,this.associations.get(i))),i=c}e.material=i}getMaterialType(){return As}loadMaterial(e){let t=this,i=this.json,s=this.extensions,r=i.materials[e],a,o={},c=r.extensions||{},l=[];if(c[We.KHR_MATERIALS_UNLIT]){let u=s[We.KHR_MATERIALS_UNLIT];a=u.getMaterialType(),l.push(u.extendParams(o,r,t))}else{let u=r.pbrMetallicRoughness||{};if(o.color=new Ce(1,1,1),o.opacity=1,Array.isArray(u.baseColorFactor)){let f=u.baseColorFactor;o.color.setRGB(f[0],f[1],f[2],Mt),o.opacity=f[3]}u.baseColorTexture!==void 0&&l.push(t.assignTexture(o,”map”,u.baseColorTexture,ct)),o.metalness=u.metallicFactor!==void 0?u.metallicFactor:1,o.roughness=u.roughnessFactor!==void 0?u.roughnessFactor:1,u.metallicRoughnessTexture!==void 0&&(l.push(t.assignTexture(o,”metalnessMap”,u.metallicRoughnessTexture)),l.push(t.assignTexture(o,”roughnessMap”,u.metallicRoughnessTexture))),a=this._invokeOne(function(f){return f.getMaterialType&&f.getMaterialType(e)}),l.push(Promise.all(this._invokeAll(function(f){return f.extendMaterialParams&&f.extendMaterialParams(e,o)})))}r.doubleSided===!0&&(o.side=ai);let h=r.alphaMode||gh.OPAQUE;if(h===gh.BLEND?(o.transparent=!0,o.depthWrite=!1):(o.transparent=!1,h===gh.MASK&&(o.alphaTest=r.alphaCutoff!==void 0?r.alphaCutoff:.5)),r.normalTexture!==void 0&&a!==mi&&(l.push(t.assignTexture(o,”normalMap”,r.normalTexture)),o.normalScale=new ue(1,1),r.normalTexture.scale!==void 0)){let u=r.normalTexture.scale;o.normalScale.set(u,u)}if(r.occlusionTexture!==void 0&&a!==mi&&(l.push(t.assignTexture(o,”aoMap”,r.occlusionTexture)),r.occlusionTexture.strength!==void 0&&(o.aoMapIntensity=r.occlusionTexture.strength)),r.emissiveFactor!==void 0&&a!==mi){let u=r.emissiveFactor;o.emissive=new Ce().setRGB(u[0],u[1],u[2],Mt)}return r.emissiveTexture!==void 0&&a!==mi&&l.push(t.assignTexture(o,”emissiveMap”,r.emissiveTexture,ct)),Promise.all(l).then(function(){let u=new a(o);return r.name&&(u.name=r.name),Ji(u,r),t.associations.set(u,{materials:e}),r.extensions&&Bs(s,u,r),u})}createUniqueName(e){let t=Ye.sanitizeNodeName(e||””);return t in this.nodeNamesUsed?t+”_”+ ++this.nodeNamesUsed[t]:(this.nodeNamesUsed[t]=0,t)}loadGeometries(e){let t=this,i=this.extensions,s=this.primitiveCache;function r(o){return i[We.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(o,t).then(function(c){return Ld(c,o,t)})}let a=[];for(let o=0,c=e.length;o<c;o++){let l=e[o],h=D_(l),u=s[h];if(u)a.push(u.promise);else{let f;l.extensions&&l.extensions[We.KHR_DRACO_MESH_COMPRESSION]?f=r(l):f=Ld(new Rt,l,t),s[h]={primitive:l,promise:f},a.push(f)}}return Promise.all(a)}loadMesh(e){let t=this,i=this.json,s=this.extensions,r=i.meshes[e],a=r.primitives,o=[];for(let c=0,l=a.length;c<l;c++){let h=a[c].material===void 0?w_(this.cache):this.getDependency("material",a[c].material);o.push(h)}return o.push(t.loadGeometries(a)),Promise.all(o).then(function(c){let l=c.slice(0,c.length-1),h=c[c.length-1],u=[];for(let p=0,m=h.length;p0&&B_(d,r),d.name=t.createUniqueName(r.name||”mesh_”+e),Ji(d,r),A.extensions&&Bs(s,d,A),t.assignFinalMaterial(d),u.push(d)}for(let p=0,m=u.length;p<m;p++)t.associations.set(u[p],{meshes:e,primitives:p});if(u.length===1)return r.extensions&&Bs(s,u[0],r),u[0];let f=new Di;r.extensions&&Bs(s,f,r),t.associations.set(f,{meshes:e});for(let p=0,m=u.length;p<m;p++)f.add(u[p]);return f})}loadCamera(e){let t,i=this.json.cameras[e],s=i[i.type];if(!s){console.warn("THREE.GLTFLoader: Missing camera parameters.");return}return i.type==="perspective"?t=new Tt(Ca.radToDeg(s.yfov),s.aspectRatio||1,s.znear||1,s.zfar||2e6):i.type==="orthographic"&&(t=new Ni(-s.xmag,s.xmag,s.ymag,-s.ymag,s.znear,s.zfar)),i.name&&(t.name=this.createUniqueName(i.name)),Ji(t,i),Promise.resolve(t)}loadSkin(e){let t=this.json.skins[e],i=[];for(let s=0,r=t.joints.length;s<r;s++)i.push(this._loadNodeShallow(t.joints[s]));return t.inverseBindMatrices!==void 0?i.push(this.getDependency("accessor",t.inverseBindMatrices)):i.push(null),Promise.all(i).then(function(s){let r=s.pop(),a=s,o=[],c=[];for(let l=0,h=a.length;l<h;l++){let u=a[l];if(u){o.push(u);let f=new pe;r!==null&&f.fromArray(r.array,l*16),c.push(f)}else console.warn('THREE.GLTFLoader: Joint "%s" could not be found.',t.joints[l])}return new ds(o,c)})}loadAnimation(e){let t=this.json,i=this,s=t.animations[e],r=s.name?s.name:"animation_"+e,a=[],o=[],c=[],l=[],h=[];for(let u=0,f=s.channels.length;u<f;u++){let p=s.channels[u],m=s.samplers[p.sampler],g=p.target,A=g.node,d=s.parameters!==void 0?s.parameters[m.input]:m.input,S=s.parameters!==void 0?s.parameters[m.output]:m.output;g.node!==void 0&&(a.push(this.getDependency("node",A)),o.push(this.getDependency("accessor",d)),c.push(this.getDependency("accessor",S)),l.push(m),h.push(g))}return Promise.all([Promise.all(a),Promise.all(o),Promise.all(c),Promise.all(l),Promise.all(h)]).then(function(u){let f=u[0],p=u[1],m=u[2],g=u[3],A=u[4],d=[];for(let v=0,b=f.length;v<b;v++){let M=f[v],I=p[v],R=m[v],B=g[v],E=A[v];if(M===void 0)continue;M.updateMatrix&&M.updateMatrix();let _=i._createAnimationTracks(M,I,R,B,E);if(_)for(let T=0;T<_.length;T++)d.push(_[T])}let S=new pa(r,void 0,d);return Ji(S,s),S})}createNodeMesh(e){let t=this.json,i=this,s=t.nodes[e];return s.mesh===void 0?null:i.getDependency("mesh",s.mesh).then(function(r){let a=i._getNodeRef(i.meshCache,s.mesh,r);return s.weights!==void 0&&a.traverse(function(o){if(o.isMesh)for(let c=0,l=s.weights.length;c<l;c++)o.morphTargetInfluences[c]=s.weights[c]}),a})}loadNode(e){let t=this.json,i=this,s=t.nodes[e],r=i._loadNodeShallow(e),a=[],o=s.children||[];for(let l=0,h=o.length;l<h;l++)a.push(i.getDependency("node",o[l]));let c=s.skin===void 0?Promise.resolve(null):i.getDependency("skin",s.skin);return Promise.all([r,Promise.all(a),c]).then(function(l){let h=l[0],u=l[1],f=l[2];f!==null&&h.traverse(function(p){p.isSkinnedMesh&&p.bind(f,L_)});for(let p=0,m=u.length;p1?h=new Di:l.length===1?h=l[0]:h=new lt,h!==l[0])for(let u=0,f=l.length;u1){let u=s.associations.get(h);s.associations.set(h,{…u})}return s.associations.get(h).nodes=e,h}),this.nodeCache[e]}loadScene(e){let t=this.extensions,i=this.json.scenes[e],s=this,r=new Di;i.name&&(r.name=s.createUniqueName(i.name)),Ji(r,i),i.extensions&&Bs(t,r,i);let a=i.nodes||[],o=[];for(let c=0,l=a.length;c<l;c++)o.push(s.getDependency("node",a[c]));return Promise.all(o).then(function(c){for(let h=0,u=c.length;h{let u=new Map;for(let[f,p]of s.associations)(f instanceof ii||f instanceof bt)&&u.set(f,p);return h.traverse(f=>{let p=s.associations.get(f);p!=null&&u.set(f,p)}),u};return s.associations=l(r),r})}_createAnimationTracks(e,t,i,s,r){let a=[],o=e.name?e.name:e.uuid,c=[];qn[r.path]===qn.weights?e.traverse(function(f){f.morphTargetInfluences&&c.push(f.name?f.name:f.uuid)}):c.push(o);let l;switch(qn[r.path]){case qn.weights:l=Vi;break;case qn.rotation:l=Wi;break;case qn.translation:case qn.scale:l=Ki;break;default:switch(i.itemSize){case 1:l=Vi;break;case 2:case 3:default:l=Ki;break}break}let h=s.interpolation!==void 0?T_[s.interpolation]:us,u=this._getArrayFromAccessor(i);for(let f=0,p=c.length;f<p;f++){let m=new l(c[f]+"."+qn[r.path],t.array,u,h);s.interpolation==="CUBICSPLINE"&&this._createCubicSplineTrackInterpolant(m),a.push(m)}return a}_getArrayFromAccessor(e){let t=e.array;if(e.normalized){let i=zh(t.constructor),s=new Float32Array(t.length);for(let r=0,a=t.length;r<a;r++)s[r]=t[r]*i;t=s}return t}_createCubicSplineTrackInterpolant(e){e.createInterpolant=function(i){let s=this instanceof Wi?Gh:bc;return new s(this.times,this.values,this.getValueSize()/3,i)},e.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline=!0}};function P_(n,e,t){let i=e.attributes,s=new Gt;if(i.POSITION!==void 0){let o=t.json.accessors[i.POSITION],c=o.min,l=o.max;if(c!==void 0&&l!==void 0){if(s.set(new D(c[0],c[1],c[2]),new D(l[0],l[1],l[2])),o.normalized){let h=zh(Pr[o.componentType]);s.min.multiplyScalar(h),s.max.multiplyScalar(h)}}else{console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");return}}else return;let r=e.targets;if(r!==void 0){let o=new D,c=new D;for(let l=0,h=r.length;l<h;l++){let u=r[l];if(u.POSITION!==void 0){let f=t.json.accessors[u.POSITION],p=f.min,m=f.max;if(p!==void 0&&m!==void 0){if(c.setX(Math.max(Math.abs(p[0]),Math.abs(m[0]))),c.setY(Math.max(Math.abs(p[1]),Math.abs(m[1]))),c.setZ(Math.max(Math.abs(p[2]),Math.abs(m[2]))),f.normalized){let g=zh(Pr[f.componentType]);c.multiplyScalar(g)}o.max(c)}else console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.")}}s.expandByVector(o)}n.boundingBox=s;let a=new Ht;s.getCenter(a.center),a.radius=s.min.distanceTo(s.max)/2,n.boundingSphere=a}function Ld(n,e,t){let i=e.attributes,s=[];function r(a,o){return t.getDependency("accessor",a).then(function(c){n.setAttribute(o,c)})}for(let a in i){let o=Hh[a]||a.toLowerCase();o in n.attributes||s.push(r(i[a],o))}if(e.indices!==void 0&&!n.index){let a=t.getDependency("accessor",e.indices).then(function(o){n.setIndex(o)});s.push(a)}return Ge.workingColorSpace!==Mt&&"COLOR_0"in i&&console.warn(`THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${Ge.workingColorSpace}" not supported.`),Ji(n,e),P_(n,e,t),Promise.all(s).then(function(){return e.targets!==void 0?R_(n,e.targets,t):n})}var Ud={name:"CopyShader",uniforms:{tDiffuse:{value:null},opacity:{value:1}},vertexShader:`
varying vec2 vUv;
void main() {
vUv = uv;
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
}`,fragmentShader:`
uniform float opacity;
uniform sampler2D tDiffuse;
varying vec2 vUv;
void main() {
vec4 texel = texture2D( tDiffuse, vUv );
gl_FragColor = opacity * texel;
}`};var xi=class{constructor(){this.isPass=!0,this.enabled=!0,this.needsSwap=!0,this.clear=!1,this.renderToScreen=!1}setSize(){}render(){console.error("THREE.Pass: .render() must be implemented in derived pass.")}dispose(){}},U_=new Ni(-1,1,1,-1,0,1),Wh=class extends Rt{constructor(){super(),this.setAttribute("position",new kt([-1,3,0,-1,-1,0,3,-1,0],3)),this.setAttribute("uv",new kt([0,2,0,0,2,0],2))}},N_=new Wh,Ur=class{constructor(e){this._mesh=new yt(N_,e)}dispose(){this._mesh.geometry.dispose()}render(e){e.render(this._mesh,U_)}get material(){return this._mesh.material}set material(e){this._mesh.material=e}};var Nr=class extends xi{constructor(e,t="tDiffuse"){super(),this.textureID=t,this.uniforms=null,this.material=null,e instanceof ft?(this.uniforms=e.uniforms,this.material=e):e&&(this.uniforms=Tr.clone(e.uniforms),this.material=new ft({name:e.name!==void 0?e.name:"unspecified",defines:Object.assign({},e.defines),uniforms:this.uniforms,vertexShader:e.vertexShader,fragmentShader:e.fragmentShader})),this._fsQuad=new Ur(this.material)}render(e,t,i){this.uniforms[this.textureID]&&(this.uniforms[this.textureID].value=i.texture),this._fsQuad.material=this.material,this.renderToScreen?(e.setRenderTarget(null),this._fsQuad.render(e)):(e.setRenderTarget(t),this.clear&&e.clear(e.autoClearColor,e.autoClearDepth,e.autoClearStencil),this._fsQuad.render(e))}dispose(){this.material.dispose(),this._fsQuad.dispose()}};var Ta=class extends xi{constructor(e,t){super(),this.scene=e,this.camera=t,this.clear=!0,this.needsSwap=!1,this.inverse=!1}render(e,t,i){let s=e.getContext(),r=e.state;r.buffers.color.setMask(!1),r.buffers.depth.setMask(!1),r.buffers.color.setLocked(!0),r.buffers.depth.setLocked(!0);let a,o;this.inverse?(a=0,o=1):(a=1,o=0),r.buffers.stencil.setTest(!0),r.buffers.stencil.setOp(s.REPLACE,s.REPLACE,s.REPLACE),r.buffers.stencil.setFunc(s.ALWAYS,a,4294967295),r.buffers.stencil.setClear(o),r.buffers.stencil.setLocked(!0),e.setRenderTarget(i),this.clear&&e.clear(),e.render(this.scene,this.camera),e.setRenderTarget(t),this.clear&&e.clear(),e.render(this.scene,this.camera),r.buffers.color.setLocked(!1),r.buffers.depth.setLocked(!1),r.buffers.color.setMask(!0),r.buffers.depth.setMask(!0),r.buffers.stencil.setLocked(!1),r.buffers.stencil.setFunc(s.EQUAL,1,4294967295),r.buffers.stencil.setOp(s.KEEP,s.KEEP,s.KEEP),r.buffers.stencil.setLocked(!0)}},_c=class extends xi{constructor(){super(),this.needsSwap=!1}render(e){e.state.buffers.stencil.setLocked(!1),e.state.buffers.stencil.setTest(!1)}};var yc=class{constructor(e,t){if(this.renderer=e,this._pixelRatio=e.getPixelRatio(),t===void 0){let i=e.getSize(new ue);this._width=i.width,this._height=i.height,t=new St(this._width*this._pixelRatio,this._height*this._pixelRatio,{type:rt}),t.texture.name="EffectComposer.rt1"}else this._width=t.width,this._height=t.height;this.renderTarget1=t,this.renderTarget2=t.clone(),this.renderTarget2.texture.name="EffectComposer.rt2",this.writeBuffer=this.renderTarget1,this.readBuffer=this.renderTarget2,this.renderToScreen=!0,this.passes=[],this.copyPass=new Nr(Ud),this.copyPass.material.blending=Oi,this.clock=new ya}swapBuffers(){let e=this.readBuffer;this.readBuffer=this.writeBuffer,this.writeBuffer=e}addPass(e){this.passes.push(e),e.setSize(this._width*this._pixelRatio,this._height*this._pixelRatio)}insertPass(e,t){this.passes.splice(t,0,e),e.setSize(this._width*this._pixelRatio,this._height*this._pixelRatio)}removePass(e){let t=this.passes.indexOf(e);t!==-1&&this.passes.splice(t,1)}isLastEnabledPass(e){for(let t=e+1;t<this.passes.length;t++)if(this.passes[t].enabled)return!1;return!0}render(e){e===void 0&&(e=this.clock.getDelta());let t=this.renderer.getRenderTarget(),i=!1;for(let s=0,r=this.passes.length;s<r;s++){let a=this.passes[s];if(a.enabled!==!1){if(a.renderToScreen=this.renderToScreen&&this.isLastEnabledPass(s),a.render(this.renderer,this.writeBuffer,this.readBuffer,e,i),a.needsSwap){if(i){let o=this.renderer.getContext(),c=this.renderer.state.buffers.stencil;c.setFunc(o.NOTEQUAL,1,4294967295),this.copyPass.render(this.renderer,this.writeBuffer,this.readBuffer,e),c.setFunc(o.EQUAL,1,4294967295)}this.swapBuffers()}Ta!==void 0&&(a instanceof Ta?i=!0:a instanceof _c&&(i=!1))}}this.renderer.setRenderTarget(t)}reset(e){if(e===void 0){let t=this.renderer.getSize(new ue);this._pixelRatio=this.renderer.getPixelRatio(),this._width=t.width,this._height=t.height,e=this.renderTarget1.clone(),e.setSize(this._width*this._pixelRatio,this._height*this._pixelRatio)}this.renderTarget1.dispose(),this.renderTarget2.dispose(),this.renderTarget1=e,this.renderTarget2=e.clone(),this.writeBuffer=this.renderTarget1,this.readBuffer=this.renderTarget2}setSize(e,t){this._width=e,this._height=t;let i=this._width*this._pixelRatio,s=this._height*this._pixelRatio;this.renderTarget1.setSize(i,s),this.renderTarget2.setSize(i,s);for(let r=0;r(Q=k.indexOf(h))&&N<E&&U<B.byteLength;)V+=k,N+=k.length,U+=128,k+=String.fromCharCode.apply(null,new Uint16Array(B.subarray(U,U+128)));return-1=B.byteLength||!(V=u(B)))&&a(1,”no header found”),(k=V.match(E))||a(3,”bad initial token”),N.valid|=1,N.programtype=k[1],N.string+=V+`
`;V=u(B),V!==!1;){if(N.string+=V+`
`,V.charAt(0)===”#”){N.comments+=V+`
`;continue}if((k=V.match(_))&&(N.gamma=parseFloat(k[1])),(k=V.match(T))&&(N.exposure=parseFloat(k[1])),(k=V.match(U))&&(N.valid|=2,N.format=k[1]),(k=V.match(Q))&&(N.valid|=4,N.height=parseInt(k[1],10),N.width=parseInt(k[2],10)),N.valid&2&&N.valid&4)break}return N.valid&2||a(3,”missing format specifier”),N.valid&4||a(3,”missing image size specifier”),N},p=function(B,E,_){let T=E;if(T32767||B[0]!==2||B[1]!==2||B[2]&128)return new Uint8Array(B);T!==(B[2]<0&&NB.byteLength&&a(1),k[0]=B[N++],k[1]=B[N++],k[2]=B[N++],k[3]=B[N++],(k[0]!=2||k[1]!=2||(k[2]<<8|k[3])!=T)&&a(3,"bad rgbe scanline format");let ie=0,se;for(;ie<V&&N128;if(fe&&(se-=128),(se===0||ie+se>V)&&a(3,”bad scanline data”),fe){let Re=B[N++];for(let Je=0;Je<se;Je++)j[ie++]=Re}else j.set(B.subarray(N,N+se),ie),ie+=se,N+=se}let ae=T;for(let fe=0;fe<ae;fe++){let Re=0;U[Q]=j[fe+Re],Re+=T,U[Q+1]=j[fe+Re],Re+=T,U[Q+2]=j[fe+Re],Re+=T,U[Q+3]=j[fe+Re],Q+=4}z–}return U},m=function(B,E,_,T){let U=B[E+3],Q=Math.pow(2,U-128)/255;_[T+0]=B[E+0]*Q,_[T+1]=B[E+1]*Q,_[T+2]=B[E+2]*Q,_[T+3]=1},g=function(B,E,_,T){let U=B[E+3],Q=Math.pow(2,U-128)/255;_[T+0]=Fn.toHalfFloat(Math.min(B[E+0]*Q,65504)),_[T+1]=Fn.toHalfFloat(Math.min(B[E+1]*Q,65504)),_[T+2]=Fn.toHalfFloat(Math.min(B[E+2]*Q,65504)),_[T+3]=Fn.toHalfFloat(1)},A=new Uint8Array(e);A.pos=0;let d=f(A),S=d.width,v=d.height,b=p(A.subarray(A.pos),S,v),M,I,R;switch(this.type){case mt:R=b.length/4;let B=new Float32Array(R*4);for(let _=0;_<R;_++)m(b,_*4,B,_*4);M=B,I=mt;break;case rt:R=b.length/4;let E=new Uint16Array(R*4);for(let _=0;_<R;_++)g(b,_*4,E,_*4);M=E,I=rt;break;default:throw new Error("THREE.HDRLoader: Unsupported type: "+this.type)}return{width:S,height:v,data:M,header:d.string,gamma:d.gamma,exposure:d.exposure,type:I}}setDataType(e){return this.type=e,this}load(e,t,i,s){function r(a,o){switch(a.type){case mt:case rt:a.colorSpace=Mt,a.minFilter=ze,a.magFilter=ze,a.generateMipmaps=!1,a.flipY=!0;break}t&&t(a,o)}return super.load(e,r,i,s)}};var vc=class extends Ec{constructor(e){console.warn("RGBELoader has been deprecated. Please use HDRLoader instead."),super(e)}};var Sc=class extends xi{constructor(e,t,i=null,s=null,r=null){super(),this.scene=e,this.camera=t,this.overrideMaterial=i,this.clearColor=s,this.clearAlpha=r,this.clear=!0,this.clearDepth=!1,this.needsSwap=!1,this._oldClearColor=new Ce}render(e,t,i){let s=e.autoClear;e.autoClear=!1;let r,a;this.overrideMaterial!==null&&(a=this.scene.overrideMaterial,this.scene.overrideMaterial=this.overrideMaterial),this.clearColor!==null&&(e.getClearColor(this._oldClearColor),e.setClearColor(this.clearColor,e.getClearAlpha())),this.clearAlpha!==null&&(r=e.getClearAlpha(),e.setClearAlpha(this.clearAlpha)),this.clearDepth==!0&&e.clearDepth(),e.setRenderTarget(this.renderToScreen?null:i),this.clear===!0&&e.clear(e.autoClearColor,e.autoClearDepth,e.autoClearStencil),e.render(this.scene,this.camera),this.clearColor!==null&&e.setClearColor(this._oldClearColor),this.clearAlpha!==null&&e.setClearAlpha(r),this.overrideMaterial!==null&&(this.scene.overrideMaterial=a),e.autoClear=s}};var wa={name:"OutputShader",uniforms:{tDiffuse:{value:null},toneMappingExposure:{value:1}},vertexShader:`
precision highp float;
uniform mat4 modelViewMatrix;
uniform mat4 projectionMatrix;
attribute vec3 position;
attribute vec2 uv;
varying vec2 vUv;
void main() {
vUv = uv;
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
}`,fragmentShader:`
precision highp float;
uniform sampler2D tDiffuse;
#include
#include
varying vec2 vUv;
void main() {
gl_FragColor = texture2D( tDiffuse, vUv );
// tone mapping
#ifdef LINEAR_TONE_MAPPING
gl_FragColor.rgb = LinearToneMapping( gl_FragColor.rgb );
#elif defined( REINHARD_TONE_MAPPING )
gl_FragColor.rgb = ReinhardToneMapping( gl_FragColor.rgb );
#elif defined( CINEON_TONE_MAPPING )
gl_FragColor.rgb = CineonToneMapping( gl_FragColor.rgb );
#elif defined( ACES_FILMIC_TONE_MAPPING )
gl_FragColor.rgb = ACESFilmicToneMapping( gl_FragColor.rgb );
#elif defined( AGX_TONE_MAPPING )
gl_FragColor.rgb = AgXToneMapping( gl_FragColor.rgb );
#elif defined( NEUTRAL_TONE_MAPPING )
gl_FragColor.rgb = NeutralToneMapping( gl_FragColor.rgb );
#elif defined( CUSTOM_TONE_MAPPING )
gl_FragColor.rgb = CustomToneMapping( gl_FragColor.rgb );
#endif
// color space
#ifdef SRGB_TRANSFER
gl_FragColor = sRGBTransferOETF( gl_FragColor );
#endif
}`};var Cc=class extends xi{constructor(){super(),this.uniforms=Tr.clone(wa.uniforms),this.material=new fa({name:wa.name,uniforms:this.uniforms,vertexShader:wa.vertexShader,fragmentShader:wa.fragmentShader}),this._fsQuad=new Ur(this.material),this._outputColorSpace=null,this._toneMapping=null}render(e,t,i){this.uniforms.tDiffuse.value=i.texture,this.uniforms.toneMappingExposure.value=e.toneMappingExposure,(this._outputColorSpace!==e.outputColorSpace||this._toneMapping!==e.toneMapping)&&(this._outputColorSpace=e.outputColorSpace,this._toneMapping=e.toneMapping,this.material.defines={},Ge.getTransfer(this._outputColorSpace)===Ze&&(this.material.defines.SRGB_TRANSFER=””),this._toneMapping===Lo?this.material.defines.LINEAR_TONE_MAPPING=””:this._toneMapping===Po?this.material.defines.REINHARD_TONE_MAPPING=””:this._toneMapping===Uo?this.material.defines.CINEON_TONE_MAPPING=””:this._toneMapping===No?this.material.defines.ACES_FILMIC_TONE_MAPPING=””:this._toneMapping===Qo?this.material.defines.AGX_TONE_MAPPING=””:this._toneMapping===pr?this.material.defines.NEUTRAL_TONE_MAPPING=””:this._toneMapping===Oo&&(this.material.defines.CUSTOM_TONE_MAPPING=””),this.material.needsUpdate=!0),this.renderToScreen===!0?(e.setRenderTarget(null),this._fsQuad.render(e)):(e.setRenderTarget(t),this.clear&&e.clear(e.autoClearColor,e.autoClearDepth,e.autoClearStencil),this._fsQuad.render(e))}dispose(){this.material.dispose(),this._fsQuad.dispose()}};var Nd={name:”FXAAShader”,uniforms:{tDiffuse:{value:null},resolution:{value:new ue(1/1024,1/512)}},vertexShader:`
varying vec2 vUv;
void main() {
vUv = uv;
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
}`,fragmentShader:`
uniform sampler2D tDiffuse;
uniform vec2 resolution;
varying vec2 vUv;
#define EDGE_STEP_COUNT 6
#define EDGE_GUESS 8.0
#define EDGE_STEPS 1.0, 1.5, 2.0, 2.0, 2.0, 4.0
const float edgeSteps[EDGE_STEP_COUNT] = float[EDGE_STEP_COUNT]( EDGE_STEPS );
float _ContrastThreshold = 0.0312;
float _RelativeThreshold = 0.063;
float _SubpixelBlending = 1.0;
vec4 Sample( sampler2D tex2D, vec2 uv ) {
return texture( tex2D, uv );
}
float SampleLuminance( sampler2D tex2D, vec2 uv ) {
return dot( Sample( tex2D, uv ).rgb, vec3( 0.3, 0.59, 0.11 ) );
}
float SampleLuminance( sampler2D tex2D, vec2 texSize, vec2 uv, float uOffset, float vOffset ) {
uv += texSize * vec2(uOffset, vOffset);
return SampleLuminance(tex2D, uv);
}
struct LuminanceData {
float m, n, e, s, w;
float ne, nw, se, sw;
float highest, lowest, contrast;
};
LuminanceData SampleLuminanceNeighborhood( sampler2D tex2D, vec2 texSize, vec2 uv ) {
LuminanceData l;
l.m = SampleLuminance( tex2D, uv );
l.n = SampleLuminance( tex2D, texSize, uv, 0.0, 1.0 );
l.e = SampleLuminance( tex2D, texSize, uv, 1.0, 0.0 );
l.s = SampleLuminance( tex2D, texSize, uv, 0.0, -1.0 );
l.w = SampleLuminance( tex2D, texSize, uv, -1.0, 0.0 );
l.ne = SampleLuminance( tex2D, texSize, uv, 1.0, 1.0 );
l.nw = SampleLuminance( tex2D, texSize, uv, -1.0, 1.0 );
l.se = SampleLuminance( tex2D, texSize, uv, 1.0, -1.0 );
l.sw = SampleLuminance( tex2D, texSize, uv, -1.0, -1.0 );
l.highest = max( max( max( max( l.n, l.e ), l.s ), l.w ), l.m );
l.lowest = min( min( min( min( l.n, l.e ), l.s ), l.w ), l.m );
l.contrast = l.highest – l.lowest;
return l;
}
bool ShouldSkipPixel( LuminanceData l ) {
float threshold = max( _ContrastThreshold, _RelativeThreshold * l.highest );
return l.contrast = vertical;
float pLuminance = e.isHorizontal ? l.n : l.e;
float nLuminance = e.isHorizontal ? l.s : l.w;
float pGradient = abs( pLuminance – l.m );
float nGradient = abs( nLuminance – l.m );
e.pixelStep = e.isHorizontal ? texSize.y : texSize.x;
if (pGradient = gradientThreshold;
for ( int i = 1; i = gradientThreshold;
}
if ( !pAtEnd ) {
puv += edgeStep * EDGE_GUESS;
}
vec2 nuv = uvEdge – edgeStep * edgeSteps[0];
float nLuminanceDelta = SampleLuminance( tex2D, nuv ) – edgeLuminance;
bool nAtEnd = abs( nLuminanceDelta ) >= gradientThreshold;
for ( int i = 1; i = gradientThreshold;
}
if ( !nAtEnd ) {
nuv -= edgeStep * EDGE_GUESS;
}
float pDistance, nDistance;
if ( e.isHorizontal ) {
pDistance = puv.x – uv.x;
nDistance = uv.x – nuv.x;
} else {
pDistance = puv.y – uv.y;
nDistance = uv.y – nuv.y;
}
float shortestDistance;
bool deltaSign;
if ( pDistance = 0.0;
} else {
shortestDistance = nDistance;
deltaSign = nLuminanceDelta >= 0.0;
}
if ( deltaSign == ( l.m – edgeLuminance >= 0.0 ) ) {
return 0.0;
}
return 0.5 – shortestDistance / ( pDistance + nDistance );
}
vec4 ApplyFXAA( sampler2D tex2D, vec2 texSize, vec2 uv ) {
LuminanceData luminance = SampleLuminanceNeighborhood( tex2D, texSize, uv );
if ( ShouldSkipPixel( luminance ) ) {
return Sample( tex2D, uv );
}
float pixelBlend = DeterminePixelBlendFactor( luminance );
EdgeData edge = DetermineEdge( texSize, luminance );
float edgeBlend = DetermineEdgeBlendFactor( tex2D, texSize, luminance, edge, uv );
float finalBlend = max( pixelBlend, edgeBlend );
if (edge.isHorizontal) {
uv.y += edge.pixelStep * finalBlend;
} else {
uv.x += edge.pixelStep * finalBlend;
}
return Sample( tex2D, uv );
}
void main() {
gl_FragColor = ApplyFXAA( tDiffuse, resolution.xy, vUv );
}`};var Mc=class extends Nr{constructor(){super(Nd)}setSize(e,t){this.material.uniforms.resolution.value.set(1/e,1/t)}};var Kh=class extends Rt{boundingSphere=new Ht;constructor(){super(),this.setAttribute(“position”,new _t(new Float32Array([-1,-1,3,-1,-1,3]),2)),this.setAttribute(“uv”,new _t(new Float32Array([0,0,2,0,0,2]),2))}computeBoundingSphere(){}},O_=new Kh,Q_=new Ni,Xn=class{constructor(e){this._mesh=new yt(O_,e),this._mesh.frustumCulled=!1}render(e){e.render(this._mesh,Q_)}get material(){return this._mesh.material}set material(e){this._mesh.material=e}dispose(){this._mesh.material.dispose(),this._mesh.geometry.dispose()}},k_={uniforms:{sceneDiffuse:{value:null},sceneDepth:{value:null},sceneNormal:{value:null},projMat:{value:new pe},viewMat:{value:new pe},projViewMat:{value:new pe},projectionMatrixInv:{value:new pe},viewMatrixInv:{value:new pe},cameraPos:{value:new D},resolution:{value:new ue},biasAdjustment:{value:new ue},time:{value:0},samples:{value:[]},bluenoise:{value:null},distanceFalloff:{value:1},radius:{value:5},near:{value:.1},far:{value:1e3},ortho:{value:!1},screenSpaceRadius:{value:!1},frame:{value:0}},depthWrite:!1,depthTest:!1,vertexShader:`
varying vec2 vUv;
void main() {
vUv = uv;
gl_Position = vec4(position, 1);
}`,fragmentShader:`
#define SAMPLES 16
#define FSAMPLES 16.0
uniform sampler2D sceneDiffuse;
uniform highp sampler2D sceneNormal;
uniform highp sampler2D sceneDepth;
uniform mat4 projectionMatrixInv;
uniform mat4 viewMatrixInv;
uniform mat4 projMat;
uniform mat4 viewMat;
uniform mat4 projViewMat;
uniform vec3 cameraPos;
uniform vec2 resolution;
uniform vec2 biasAdjustment;
uniform float time;
uniform vec3[SAMPLES] samples;
uniform float radius;
uniform float distanceFalloff;
uniform float near;
uniform float far;
uniform float frame;
uniform bool ortho;
uniform bool screenSpaceRadius;
uniform sampler2D bluenoise;
varying vec2 vUv;
highp float linearize_depth(highp float d, highp float zNear,highp float zFar)
{
return (zFar * zNear) / (zFar – d * (zFar – zNear));
}
highp float linearize_depth_ortho(highp float d, highp float nearZ, highp float farZ) {
return nearZ + (farZ – nearZ) * d;
}
highp float linearize_depth_log(highp float d, highp float nearZ,highp float farZ) {
float depth = pow(2.0, d * log2(farZ + 1.0)) – 1.0;
float a = farZ / (farZ – nearZ);
float b = farZ * nearZ / (nearZ – farZ);
float linDepth = a + b / depth;
/*return ortho ? linearize_depth_ortho(
linDepth,
nearZ,
farZ
) :linearize_depth(linDepth, nearZ, farZ);*/
#ifdef ORTHO
return linearize_depth_ortho(d, nearZ, farZ);
#else
return linearize_depth(linDepth, nearZ, farZ);
#endif
}
vec3 getWorldPosLog(vec3 posS) {
vec2 uv = posS.xy;
float z = posS.z;
float nearZ =near;
float farZ = far;
float depth = pow(2.0, z * log2(farZ + 1.0)) – 1.0;
float a = farZ / (farZ – nearZ);
float b = farZ * nearZ / (nearZ – farZ);
float linDepth = a + b / depth;
vec4 clipVec = vec4(uv, linDepth, 1.0) * 2.0 – 1.0;
vec4 wpos = projectionMatrixInv * clipVec;
return wpos.xyz / wpos.w;
}
vec3 getWorldPos(float depth, vec2 coord) {
#ifdef LOGDEPTH
#ifndef ORTHO
return getWorldPosLog(vec3(coord, depth));
#endif
#endif
float z = depth * 2.0 – 1.0;
vec4 clipSpacePosition = vec4(coord * 2.0 – 1.0, z, 1.0);
vec4 viewSpacePosition = projectionMatrixInv * clipSpacePosition;
// Perspective division
vec4 worldSpacePosition = viewSpacePosition;
worldSpacePosition.xyz /= worldSpacePosition.w;
return worldSpacePosition.xyz;
}
vec3 computeNormal(vec3 worldPos, vec2 vUv) {
ivec2 p = ivec2(vUv * resolution);
#ifdef REVERSEDEPTH
float c0 = 1.0 – texelFetch(sceneDepth, p, 0).x;
float l2 = 1.0 – texelFetch(sceneDepth, p – ivec2(2, 0), 0).x;
float l1 = 1.0 – texelFetch(sceneDepth, p – ivec2(1, 0), 0).x;
float r1 = 1.0 – texelFetch(sceneDepth, p + ivec2(1, 0), 0).x;
float r2 = 1.0 – texelFetch(sceneDepth, p + ivec2(2, 0), 0).x;
float b2 = 1.0 – texelFetch(sceneDepth, p – ivec2(0, 2), 0).x;
float b1 = 1.0 – texelFetch(sceneDepth, p – ivec2(0, 1), 0).x;
float t1 = 1.0 – texelFetch(sceneDepth, p + ivec2(0, 1), 0).x;
float t2 = 1.0 – texelFetch(sceneDepth, p + ivec2(0, 2), 0).x;
#else
float c0 = texelFetch(sceneDepth, p, 0).x;
float l2 = texelFetch(sceneDepth, p – ivec2(2, 0), 0).x;
float l1 = texelFetch(sceneDepth, p – ivec2(1, 0), 0).x;
float r1 = texelFetch(sceneDepth, p + ivec2(1, 0), 0).x;
float r2 = texelFetch(sceneDepth, p + ivec2(2, 0), 0).x;
float b2 = texelFetch(sceneDepth, p – ivec2(0, 2), 0).x;
float b1 = texelFetch(sceneDepth, p – ivec2(0, 1), 0).x;
float t1 = texelFetch(sceneDepth, p + ivec2(0, 1), 0).x;
float t2 = texelFetch(sceneDepth, p + ivec2(0, 2), 0).x;
#endif
float dl = abs((2.0 * l1 – l2) – c0);
float dr = abs((2.0 * r1 – r2) – c0);
float db = abs((2.0 * b1 – b2) – c0);
float dt = abs((2.0 * t1 – t2) – c0);
vec3 ce = getWorldPos(c0, vUv).xyz;
vec3 dpdx = (dl < dr) ? ce – getWorldPos(l1, (vUv – vec2(1.0 / resolution.x, 0.0))).xyz
: -ce + getWorldPos(r1, (vUv + vec2(1.0 / resolution.x, 0.0))).xyz;
vec3 dpdy = (db
0.99) {
helperVec = vec3(1.0, 0.0, 0.0);
}
vec3 tangent = normalize(cross(helperVec, normal));
vec3 bitangent = cross(normal, tangent);
mediump mat3 tbn = mat3(tangent, bitangent, normal) * makeRotationZ( noise.r * 3.1415962 * 2.0) ;
mediump float occluded = 0.0;
mediump float totalWeight = 0.0;
float radiusToUse = screenSpaceRadius ? distance(
worldPos,
getWorldPos(depth, vUv +
vec2(radius, 0.0) / resolution)
) : radius;
float distanceFalloffToUse =screenSpaceRadius ?
radiusToUse * distanceFalloff
: radiusToUse * distanceFalloff * 0.2;
float bias = (min(
0.1,
distanceFalloffToUse * 0.1
) / near) * fwidth(distance(worldPos, cameraPos)) / radiusToUse;
bias = biasAdjustment.x + biasAdjustment.y * bias;
mediump float offsetMove = noise.g;
mediump float offsetMoveInv = 1.0 / FSAMPLES;
float farTimesNear = far * near;
float farMinusNear = far – near;
for(int i = 0; i < SAMPLES; i++) {
mediump vec3 sampleDirection = tbn * samples[i];
float moveAmt = fract(offsetMove);
offsetMove += offsetMoveInv;
vec3 samplePos = worldPos + radiusToUse * moveAmt * sampleDirection;
vec4 offset = projMat * vec4(samplePos, 1.0);
offset.xyz /= offset.w;
offset.xyz = offset.xyz * 0.5 + 0.5;
if (all(greaterThan(offset.xyz * (1.0 – offset.xyz), vec3(0.0)))) {
#ifdef REVERSEDEPTH
float sampleDepth = 1.0 – textureLod(sceneDepth, offset.xy, 0.0).x;
#else
float sampleDepth = textureLod(sceneDepth, offset.xy, 0.0).x;
#endif
/*#ifdef LOGDEPTH
float distSample = linearize_depth_log(sampleDepth, near, far);
#else
#ifdef ORTHO
float distSample = near + farMinusNear * sampleDepth;
#else
float distSample = (farTimesNear) / (far – sampleDepth * farMinusNear);
#endif
#endif*/
#ifdef ORTHO
float distSample = near + sampleDepth * farMinusNear;
#else
#ifdef LOGDEPTH
float distSample = linearize_depth_log(sampleDepth, near, far);
#else
float distSample = (farTimesNear) / (far – sampleDepth * farMinusNear);
#endif
#endif
#ifdef ORTHO
float distWorld = near + offset.z * farMinusNear;
#else
float distWorld = (farTimesNear) / (far – offset.z * farMinusNear);
#endif
mediump float rangeCheck = smoothstep(0.0, 1.0, distanceFalloffToUse / (abs(distSample – distWorld)));
vec2 diff = gl_FragCoord.xy – floor(offset.xy * resolution);
occluded += rangeCheck * float(distSample != distWorld) * float(sampleDepth != depth) * step(distSample + bias, distWorld) * step(
1.0,
dot(diff, diff)
);
totalWeight ++;
}
}
float occ = clamp(1.0 – occluded / (totalWeight == 0.0 ? 1.0 : totalWeight), 0.0, 1.0);
gl_FragColor = vec4(occ, 0.5 + 0.5 * normal);
}`},G_={uniforms:{sceneDiffuse:{value:null},sceneDepth:{value:null},tDiffuse:{value:null},transparencyDWFalse:{value:null},transparencyDWTrue:{value:null},transparencyDWTrueDepth:{value:null},transparencyAware:{value:!1},projMat:{value:new pe},viewMat:{value:new pe},projectionMatrixInv:{value:new pe},viewMatrixInv:{value:new pe},cameraPos:{value:new D},resolution:{value:new ue},color:{value:new D(0,0,0)},blueNoise:{value:null},downsampledDepth:{value:null},time:{value:0},intensity:{value:10},renderMode:{value:0},gammaCorrection:{value:!1},ortho:{value:!1},near:{value:.1},far:{value:1e3},screenSpaceRadius:{value:!1},radius:{value:0},distanceFalloff:{value:1},fog:{value:!1},fogExp:{value:!1},fogDensity:{value:0},fogNear:{value:1/0},fogFar:{value:1/0},colorMultiply:{value:!0},aoTones:{value:0}},depthWrite:!1,depthTest:!1,vertexShader:`
varying vec2 vUv;
void main() {
vUv = uv;
gl_Position = vec4(position, 1);
}`,fragmentShader:`
uniform sampler2D sceneDiffuse;
uniform highp sampler2D sceneDepth;
uniform highp sampler2D downsampledDepth;
uniform highp sampler2D transparencyDWFalse;
uniform highp sampler2D transparencyDWTrue;
uniform highp sampler2D transparencyDWTrueDepth;
uniform sampler2D tDiffuse;
uniform sampler2D blueNoise;
uniform vec2 resolution;
uniform vec3 color;
uniform mat4 projectionMatrixInv;
uniform mat4 viewMatrixInv;
uniform float intensity;
uniform float renderMode;
uniform float near;
uniform float far;
uniform float aoTones;
uniform bool gammaCorrection;
uniform bool ortho;
uniform bool screenSpaceRadius;
uniform bool fog;
uniform bool fogExp;
uniform bool colorMultiply;
uniform bool transparencyAware;
uniform float fogDensity;
uniform float fogNear;
uniform float fogFar;
uniform float radius;
uniform float distanceFalloff;
uniform vec3 cameraPos;
varying vec2 vUv;
highp float linearize_depth(highp float d, highp float zNear,highp float zFar)
{
return (zFar * zNear) / (zFar – d * (zFar – zNear));
}
highp float linearize_depth_ortho(highp float d, highp float nearZ, highp float farZ) {
return nearZ + (farZ – nearZ) * d;
}
highp float linearize_depth_log(highp float d, highp float nearZ,highp float farZ) {
float depth = pow(2.0, d * log2(farZ + 1.0)) – 1.0;
float a = farZ / (farZ – nearZ);
float b = farZ * nearZ / (nearZ – farZ);
float linDepth = a + b / depth;
return ortho ? linearize_depth_ortho(
linDepth,
nearZ,
farZ
) :linearize_depth(linDepth, nearZ, farZ);
}
vec3 getWorldPosLog(vec3 posS) {
vec2 uv = posS.xy;
float z = posS.z;
float nearZ =near;
float farZ = far;
float depth = pow(2.0, z * log2(farZ + 1.0)) – 1.0;
float a = farZ / (farZ – nearZ);
float b = farZ * nearZ / (nearZ – farZ);
float linDepth = a + b / depth;
vec4 clipVec = vec4(uv, linDepth, 1.0) * 2.0 – 1.0;
vec4 wpos = projectionMatrixInv * clipVec;
return wpos.xyz / wpos.w;
}
vec3 getWorldPos(float depth, vec2 coord) {
#ifdef LOGDEPTH
#ifndef ORTHO
return getWorldPosLog(vec3(coord, depth));
#endif
#endif
// }
float z = depth * 2.0 – 1.0;
vec4 clipSpacePosition = vec4(coord * 2.0 – 1.0, z, 1.0);
vec4 viewSpacePosition = projectionMatrixInv * clipSpacePosition;
// Perspective division
vec4 worldSpacePosition = viewSpacePosition;
worldSpacePosition.xyz /= worldSpacePosition.w;
return worldSpacePosition.xyz;
}
vec3 computeNormal(vec3 worldPos, vec2 vUv) {
ivec2 p = ivec2(vUv * resolution);
#ifdef REVERSEDEPTH
float c0 = 1.0 – texelFetch(sceneDepth, p, 0).x;
float l2 = 1.0 – texelFetch(sceneDepth, p – ivec2(2, 0), 0).x;
float l1 = 1.0 – texelFetch(sceneDepth, p – ivec2(1, 0), 0).x;
float r1 = 1.0 – texelFetch(sceneDepth, p + ivec2(1, 0), 0).x;
float r2 = 1.0 – texelFetch(sceneDepth, p + ivec2(2, 0), 0).x;
float b2 = 1.0 – texelFetch(sceneDepth, p – ivec2(0, 2), 0).x;
float b1 = 1.0 – texelFetch(sceneDepth, p – ivec2(0, 1), 0).x;
float t1 = 1.0 – texelFetch(sceneDepth, p + ivec2(0, 1), 0).x;
float t2 = 1.0 – texelFetch(sceneDepth, p + ivec2(0, 2), 0).x;
#else
float c0 = texelFetch(sceneDepth, p, 0).x;
float l2 = texelFetch(sceneDepth, p – ivec2(2, 0), 0).x;
float l1 = texelFetch(sceneDepth, p – ivec2(1, 0), 0).x;
float r1 = texelFetch(sceneDepth, p + ivec2(1, 0), 0).x;
float r2 = texelFetch(sceneDepth, p + ivec2(2, 0), 0).x;
float b2 = texelFetch(sceneDepth, p – ivec2(0, 2), 0).x;
float b1 = texelFetch(sceneDepth, p – ivec2(0, 1), 0).x;
float t1 = texelFetch(sceneDepth, p + ivec2(0, 1), 0).x;
float t2 = texelFetch(sceneDepth, p + ivec2(0, 2), 0).x;
#endif
float dl = abs((2.0 * l1 – l2) – c0);
float dr = abs((2.0 * r1 – r2) – c0);
float db = abs((2.0 * b1 – b2) – c0);
float dt = abs((2.0 * t1 – t2) – c0);
vec3 ce = getWorldPos(c0, vUv).xyz;
vec3 dpdx = (dl < dr) ? ce – getWorldPos(l1, (vUv – vec2(1.0 / resolution.x, 0.0))).xyz
: -ce + getWorldPos(r1, (vUv + vec2(1.0 / resolution.x, 0.0))).xyz;
vec3 dpdy = (db < dt) ? ce – getWorldPos(b1, (vUv – vec2(0.0, 1.0 / resolution.y))).xyz
: -ce + getWorldPos(t1, (vUv + vec2(0.0, 1.0 / resolution.y))).xyz;
return normalize(cross(dpdx, dpdy));
}
#include
#include
void main() {
//vec4 texel = texture2D(tDiffuse, vUv);//vec3(0.0);
vec4 sceneTexel = texture2D(sceneDiffuse, vUv);
#ifdef REVERSEDEPTH
float depth = 1.0 – texture2D(sceneDepth, vUv).x;
#else
float depth = texture2D(sceneDepth, vUv).x;
#endif
#ifdef HALFRES
vec4 texel;
if (depth == 1.0) {
texel = vec4(0.0, 0.0, 0.0, 1.0);
} else {
vec3 worldPos = getWorldPos(depth, vUv);
vec3 normal = computeNormal(getWorldPos(depth, vUv), vUv);
// vec4 texel = texture2D(tDiffuse, vUv);
// Find closest depth;
float totalWeight = 0.0;
float radiusToUse = screenSpaceRadius ? distance(
worldPos,
getWorldPos(depth, vUv +
vec2(radius, 0.0) / resolution)
) : radius;
float distanceFalloffToUse =screenSpaceRadius ?
radiusToUse * distanceFalloff
: distanceFalloff;
for(float x = -1.0; x <= 1.0; x++) {
for(float y = -1.0; y 0.0) {
finalAo = ceil(finalAo * aoTones) / aoTones;
}
float fogFactor;
float fogDepth = distance(
cameraPos,
getWorldPos(depth, vUv)
);
if (fog) {
if (fogExp) {
fogFactor = 1.0 – exp( – fogDensity * fogDensity * fogDepth * fogDepth );
} else {
fogFactor = smoothstep( fogNear, fogFar, fogDepth );
}
}
if (transparencyAware) {
float transparencyDWOff = texture2D(transparencyDWFalse, vUv).a;
float transparencyDWOn = texture2D(transparencyDWTrue, vUv).a;
float adjustmentFactorOff = transparencyDWOff;
#ifdef REVERSEDEPTH
float depthSample = 1.0 – texture2D(sceneDepth, vUv).r;
float trueDepthSample = 1.0 – texture2D(transparencyDWTrueDepth, vUv).r;
#else
float depthSample = texture2D(sceneDepth, vUv).r;
float trueDepthSample = texture2D(transparencyDWTrueDepth, vUv).r;
#endif
float adjustmentFactorOn = (1.0 – transparencyDWOn) * (
trueDepthSample == depthSample ? 1.0 : 0.0
);
float adjustmentFactor = max(adjustmentFactorOff, adjustmentFactorOn);
finalAo = mix(finalAo, 1.0, adjustmentFactor);
}
finalAo = mix(finalAo, 1.0, fogFactor);
vec3 aoApplied = color * mix(vec3(1.0), sceneTexel.rgb, float(colorMultiply));
if (renderMode == 0.0) {
gl_FragColor = vec4( mix(sceneTexel.rgb, aoApplied, 1.0 – finalAo), sceneTexel.a);
} else if (renderMode == 1.0) {
gl_FragColor = vec4( mix(vec3(1.0), aoApplied, 1.0 – finalAo), sceneTexel.a);
} else if (renderMode == 2.0) {
gl_FragColor = vec4( sceneTexel.rgb, sceneTexel.a);
} else if (renderMode == 3.0) {
if (vUv.x < 0.5) {
gl_FragColor = vec4( sceneTexel.rgb, sceneTexel.a);
} else if (abs(vUv.x – 0.5) < 1.0 / resolution.x) {
gl_FragColor = vec4(1.0);
} else {
gl_FragColor = vec4( mix(sceneTexel.rgb, aoApplied, 1.0 – finalAo), sceneTexel.a);
}
} else if (renderMode == 4.0) {
if (vUv.x < 0.5) {
gl_FragColor = vec4( sceneTexel.rgb, sceneTexel.a);
} else if (abs(vUv.x – 0.5) < 1.0 / resolution.x) {
gl_FragColor = vec4(1.0);
} else {
gl_FragColor = vec4( mix(vec3(1.0), aoApplied, 1.0 – finalAo), sceneTexel.a);
}
}
#include
if (gammaCorrection) {
gl_FragColor = sRGBTransferOETF(gl_FragColor);
}
}
`},H_={uniforms:{sceneDiffuse:{value:null},sceneDepth:{value:null},tDiffuse:{value:null},projMat:{value:new pe},viewMat:{value:new pe},projectionMatrixInv:{value:new pe},viewMatrixInv:{value:new pe},cameraPos:{value:new D},resolution:{value:new ue},time:{value:0},r:{value:5},blueNoise:{value:null},radius:{value:12},worldRadius:{value:5},index:{value:0},poissonDisk:{value:[]},distanceFalloff:{value:1},near:{value:.1},far:{value:1e3},screenSpaceRadius:{value:!1}},depthWrite:!1,depthTest:!1,vertexShader:`
varying vec2 vUv;
void main() {
vUv = uv;
gl_Position = vec4(position, 1.0);
}`,fragmentShader:`
uniform sampler2D sceneDiffuse;
uniform highp sampler2D sceneDepth;
uniform sampler2D tDiffuse;
uniform sampler2D blueNoise;
uniform mat4 projectionMatrixInv;
uniform mat4 viewMatrixInv;
uniform vec2 resolution;
uniform float r;
uniform float radius;
uniform float worldRadius;
uniform float index;
uniform float near;
uniform float far;
uniform float distanceFalloff;
uniform bool screenSpaceRadius;
varying vec2 vUv;
highp float linearize_depth(highp float d, highp float zNear,highp float zFar)
{
highp float z_n = 2.0 * d – 1.0;
return 2.0 * zNear * zFar / (zFar + zNear – z_n * (zFar – zNear));
}
highp float linearize_depth_log(highp float d, highp float nearZ,highp float farZ) {
float depth = pow(2.0, d * log2(farZ + 1.0)) – 1.0;
float a = farZ / (farZ – nearZ);
float b = farZ * nearZ / (nearZ – farZ);
float linDepth = a + b / depth;
return linearize_depth(linDepth, nearZ, farZ);
}
highp float linearize_depth_ortho(highp float d, highp float nearZ, highp float farZ) {
return nearZ + (farZ – nearZ) * d;
}
vec3 getWorldPosLog(vec3 posS) {
vec2 uv = posS.xy;
float z = posS.z;
float nearZ =near;
float farZ = far;
float depth = pow(2.0, z * log2(farZ + 1.0)) – 1.0;
float a = farZ / (farZ – nearZ);
float b = farZ * nearZ / (nearZ – farZ);
float linDepth = a + b / depth;
vec4 clipVec = vec4(uv, linDepth, 1.0) * 2.0 – 1.0;
vec4 wpos = projectionMatrixInv * clipVec;
return wpos.xyz / wpos.w;
}
vec3 getWorldPos(float depth, vec2 coord) {
#ifdef LOGDEPTH
#ifndef ORTHO
return getWorldPosLog(vec3(coord, depth));
#endif
#endif
float z = depth * 2.0 – 1.0;
vec4 clipSpacePosition = vec4(coord * 2.0 – 1.0, z, 1.0);
vec4 viewSpacePosition = projectionMatrixInv * clipSpacePosition;
// Perspective division
vec4 worldSpacePosition = viewSpacePosition;
worldSpacePosition.xyz /= worldSpacePosition.w;
return worldSpacePosition.xyz;
}
#include
#define NUM_SAMPLES 16
uniform vec2 poissonDisk[NUM_SAMPLES];
void main() {
const float pi = 3.14159;
vec2 texelSize = vec2(1.0 / resolution.x, 1.0 / resolution.y);
vec2 uv = vUv;
vec4 data = texture2D(tDiffuse, vUv);
float occlusion = data.r;
float baseOcc = data.r;
vec3 normal = data.gba * 2.0 – 1.0;
float count = 1.0;
float d = texture2D(sceneDepth, vUv).x;
if (d == 1.0) {
gl_FragColor = data;
return;
}
vec3 worldPos = getWorldPos(d, vUv);
float size = radius;
float angle;
if (index == 0.0) {
angle = texture2D(blueNoise, gl_FragCoord.xy / 128.0).w * PI2;
} else if (index == 1.0) {
angle = texture2D(blueNoise, gl_FragCoord.xy / 128.0).z * PI2;
} else if (index == 2.0) {
angle = texture2D(blueNoise, gl_FragCoord.xy / 128.0).y * PI2;
} else {
angle = texture2D(blueNoise, gl_FragCoord.xy / 128.0).x * PI2;
}
mat2 rotationMatrix = mat2(cos(angle), -sin(angle), sin(angle), cos(angle));
float radiusToUse = screenSpaceRadius ? distance(
worldPos,
getWorldPos(d, vUv +
vec2(worldRadius, 0.0) / resolution)
) : worldRadius;
float distanceFalloffToUse =screenSpaceRadius ?
radiusToUse * distanceFalloff
: radiusToUse * distanceFalloff * 0.2;
float invDistance = (1.0 / distanceFalloffToUse);
for(int i = 0; i 0.0) {
occlusion /= count;
}
occlusion = clamp(occlusion, 0.0, 1.0);
if (occlusion == 0.0) {
occlusion = 1.0;
}
gl_FragColor = vec4(occlusion, 0.5 + 0.5 * normal);
}
`},z_={uniforms:{sceneDepth:{value:null},resolution:{value:new ue},near:{value:.1},far:{value:1e3},viewMatrixInv:{value:new pe},projectionMatrixInv:{value:new pe},logDepth:{value:!1},ortho:{value:!1}},depthWrite:!1,depthTest:!1,vertexShader:`
varying vec2 vUv;
void main() {
vUv = uv;
gl_Position = vec4(position, 1);
}`,fragmentShader:`
uniform highp sampler2D sceneDepth;
uniform vec2 resolution;
uniform float near;
uniform float far;
uniform bool logDepth;
uniform bool ortho;
uniform mat4 viewMatrixInv;
uniform mat4 projectionMatrixInv;
varying vec2 vUv;
layout(location = 1) out vec4 gNormal;
vec3 getWorldPosLog(vec3 posS) {
vec2 uv = posS.xy;
float z = posS.z;
float nearZ =near;
float farZ = far;
float depth = pow(2.0, z * log2(farZ + 1.0)) – 1.0;
float a = farZ / (farZ – nearZ);
float b = farZ * nearZ / (nearZ – farZ);
float linDepth = a + b / depth;
vec4 clipVec = vec4(uv, linDepth, 1.0) * 2.0 – 1.0;
vec4 wpos = projectionMatrixInv * clipVec;
return wpos.xyz / wpos.w;
}
vec3 getWorldPos(float depth, vec2 coord) {
if (logDepth && !ortho) {
return getWorldPosLog(vec3(coord, depth));
}
float z = depth * 2.0 – 1.0;
vec4 clipSpacePosition = vec4(coord * 2.0 – 1.0, z, 1.0);
vec4 viewSpacePosition = projectionMatrixInv * clipSpacePosition;
// Perspective division
vec4 worldSpacePosition = viewSpacePosition;
worldSpacePosition.xyz /= worldSpacePosition.w;
return worldSpacePosition.xyz;
}
vec3 computeNormal(vec3 worldPos, vec2 vUv) {
ivec2 p = ivec2(vUv * resolution);
#ifdef REVERSEDEPTH
float c0 = 1.0 – texelFetch(sceneDepth, p, 0).x;
float l2 = 1.0 – texelFetch(sceneDepth, p – ivec2(2, 0), 0).x;
float l1 = 1.0 – texelFetch(sceneDepth, p – ivec2(1, 0), 0).x;
float r1 = 1.0 – texelFetch(sceneDepth, p + ivec2(1, 0), 0).x;
float r2 = 1.0 – texelFetch(sceneDepth, p + ivec2(2, 0), 0).x;
float b2 = 1.0 – texelFetch(sceneDepth, p – ivec2(0, 2), 0).x;
float b1 = 1.0 – texelFetch(sceneDepth, p – ivec2(0, 1), 0).x;
float t1 = 1.0 – texelFetch(sceneDepth, p + ivec2(0, 1), 0).x;
float t2 = 1.0 – texelFetch(sceneDepth, p + ivec2(0, 2), 0).x;
#else
float c0 = texelFetch(sceneDepth, p, 0).x;
float l2 = texelFetch(sceneDepth, p – ivec2(2, 0), 0).x;
float l1 = texelFetch(sceneDepth, p – ivec2(1, 0), 0).x;
float r1 = texelFetch(sceneDepth, p + ivec2(1, 0), 0).x;
float r2 = texelFetch(sceneDepth, p + ivec2(2, 0), 0).x;
float b2 = texelFetch(sceneDepth, p – ivec2(0, 2), 0).x;
float b1 = texelFetch(sceneDepth, p – ivec2(0, 1), 0).x;
float t1 = texelFetch(sceneDepth, p + ivec2(0, 1), 0).x;
float t2 = texelFetch(sceneDepth, p + ivec2(0, 2), 0).x;
#endif
float dl = abs((2.0 * l1 – l2) – c0);
float dr = abs((2.0 * r1 – r2) – c0);
float db = abs((2.0 * b1 – b2) – c0);
float dt = abs((2.0 * t1 – t2) – c0);
vec3 ce = getWorldPos(c0, vUv).xyz;
vec3 dpdx = (dl < dr) ? ce – getWorldPos(l1, (vUv – vec2(1.0 / resolution.x, 0.0))).xyz
: -ce + getWorldPos(r1, (vUv + vec2(1.0 / resolution.x, 0.0))).xyz;
vec3 dpdy = (db
0.5) {
targetDepth = maxDepth;
}
int chosenIndex = 0;
float[4] samples;
samples[0] = depth00;
samples[1] = depth10;
samples[2] = depth01;
samples[3] = depth11;
for(int i = 0; i Uint8Array.from(atob(V_),n=>n.charCodeAt(0)))(),K_=W_,q_=(()=>parseInt(xs.replace(/D+/g,””)))(),X_=q_>=162?class extends St{constructor(n=1,e=1,t=1,i={}){super(n,e,{…i,count:t}),this.isWebGLMultipleRenderTargets=!0}get texture(){return this.textures}}:class extends St{constructor(n=1,e=1,t=1,i={}){super(n,e,i),this.isWebGLMultipleRenderTargets=!0;let s=this.texture;this.texture=[];for(let r=0;r<t;r++)this.texture[r]=s.clone(),this.texture[r].isRenderTargetTexture=!0}setSize(n,e,t=1){if(this.width!==n||this.height!==e||this.depth!==t){this.width=n,this.height=e,this.depth=t;for(let i=0,s=this.texture.length;i<s;i++)this.texture[i].image.width=n,this.texture[i].image.height=e,this.texture[i].image.depth=t;this.dispose()}this.viewport.set(0,0,n,e),this.scissor.set(0,0,n,e)}copy(n){this.dispose(),this.width=n.width,this.height=n.height,this.depth=n.depth,this.scissor.copy(n.scissor),this.scissorTest=n.scissorTest,this.viewport.copy(n.viewport),this.depthBuffer=n.depthBuffer,this.stencilBuffer=n.stencilBuffer,n.depthTexture!==null&&(this.depthTexture=n.depthTexture.clone()),this.texture.length=0;for(let e=0,t=n.texture.length;e{Od(n,e,t)},1)}var Lt={Default:1,Log:2,Reverse:3},Ic=class extends xi{constructor(e,t,i=512,s=512){super(),this.width=i,this.height=s,this.clear=!0,this.camera=t,this.scene=e,this.configuration=new Proxy({aoSamples:16,aoRadius:5,aoTones:0,denoiseSamples:8,denoiseRadius:12,distanceFalloff:1,intensity:5,denoiseIterations:2,renderMode:0,biasOffset:0,biasMultiplier:0,color:new Ce(0,0,0),gammaCorrection:!0,depthBufferType:Lt.Default,screenSpaceRadius:!1,halfRes:!1,depthAwareUpsampling:!0,autoRenderBeauty:!0,colorMultiply:!0,transparencyAware:!1,stencil:!1,accumulate:!1},{set:(r,a,o)=>{let c=r[a];return r[a]=o,o.equals?o.equals(c)||this.firstFrame():c!==o&&this.firstFrame(),a===”aoSamples”&&c!==o&&this.configureAOPass(this.configuration.depthBufferType,this.camera.isOrthographicCamera),a===”denoiseSamples”&&c!==o&&this.configureDenoisePass(this.configuration.depthBufferType,this.camera.isOrthographicCamera),a===”halfRes”&&c!==o&&(this.configureAOPass(this.configuration.depthBufferType,this.camera.isOrthographicCamera),this.configureHalfResTargets(),this.configureEffectCompositer(this.configuration.depthBufferType,this.camera.isOrthographicCamera),this.setSize(this.width,this.height)),a===”depthAwareUpsampling”&&c!==o&&this.configureEffectCompositer(this.configuration.depthBufferType,this.camera.isOrthographicCamera),a===”transparencyAware”&&c!==o&&(this.autoDetectTransparency=!1,this.configureTransparencyTarget()),a===”stencil”&&c!==o&&(this.beautyRenderTarget.dispose(),this.beautyRenderTarget=new St(this.width,this.height,{minFilter:ze,magFilter:$e,type:rt,format:nt,stencilBuffer:o}),this.beautyRenderTarget.depthTexture=new ln(this.width,this.height,o?Qn:Si),this.beautyRenderTarget.depthTexture.format=o?kn:cn),!0}}),this.samples=[],this.samplesDenoise=[],this.autoDetectTransparency=!0,this.frame=0,this.lastViewMatrix=new pe,this.lastProjectionMatrix=new pe,this.beautyRenderTarget=new St(this.width,this.height,{minFilter:ze,magFilter:$e,type:rt,format:nt,stencilBuffer:!1}),this.beautyRenderTarget.depthTexture=new ln(this.width,this.height,Si),this.beautyRenderTarget.depthTexture.format=cn,this.configureEffectCompositer(this.configuration.depthBufferType,this.camera.isOrthographicCamera),this.configureSampleDependentPasses(),this.configureHalfResTargets(),this.detectTransparency(),this.configureTransparencyTarget(),this.writeTargetInternal=new St(this.width,this.height,{minFilter:ze,magFilter:ze,depthBuffer:!1,format:nt}),this.readTargetInternal=new St(this.width,this.height,{minFilter:ze,magFilter:ze,depthBuffer:!1,format:nt}),this.accumulationRenderTarget=new St(this.width,this.height,{minFilter:ze,magFilter:ze,depthBuffer:!1,format:nt,type:rt,stencilBuffer:!1,depthBuffer:!1,alpha:!0}),this.bluenoise=new zi(K_,128,128),this.accumulationQuad=new Xn(new ft({uniforms:{frame:{value:0},tDiffuse:{value:null}},transparent:!0,opacity:1,vertexShader:`
varying vec2 vUv;
void main() {
vUv = uv;
gl_Position = vec4(position, 1);
}`,fragmentShader:`
uniform sampler2D tDiffuse;
uniform float frame;
varying vec2 vUv;
void main() {
vec4 color = texture2D(tDiffuse, vUv);
gl_FragColor = vec4(color.rgb, 1.0 / (frame + 1.0));
}
`})),this.bluenoise.colorSpace=oi,this.bluenoise.wrapS=Pi,this.bluenoise.wrapT=Pi,this.bluenoise.minFilter=$e,this.bluenoise.magFilter=$e,this.bluenoise.needsUpdate=!0,this.lastTime=0,this.timeRollingAverage=.99,this._r=new ue,this._c=new Ce}configureHalfResTargets(){if(this.firstFrame(),this.configuration.halfRes){this.depthDownsampleTarget=new X_(this.width/2,this.height/2,2),xs{t.material&&t.material.transparent&&(e=!0)}),this.configuration.transparencyAware=e}}configureTransparencyTarget(){this.configuration.transparencyAware?(this.transparencyRenderTargetDWFalse=new St(this.width,this.height,{minFilter:ze,magFilter:$e,type:rt,format:nt}),this.transparencyRenderTargetDWTrue=new St(this.width,this.height,{minFilter:ze,magFilter:$e,type:rt,format:nt}),this.transparencyRenderTargetDWTrue.depthTexture=new ln(this.width,this.height,Si),this.depthCopyPass=new Xn(new ft({uniforms:{depthTexture:{value:this.depthTexture},reverseDepthBuffer:{value:this.configuration.depthBufferType===Lt.Reverse}},vertexShader:`
varying vec2 vUv;
void main() {
vUv = uv;
gl_Position = vec4(position, 1);
}`,fragmentShader:`
uniform sampler2D depthTexture;
uniform bool reverseDepthBuffer;
varying vec2 vUv;
void main() {
if (reverseDepthBuffer) {
float d = 1.0 – texture2D(depthTexture, vUv).r;
d += 0.00001;
gl_FragDepth = 1.0 – d;
} else {
float d = texture2D(depthTexture, vUv).r;
d += 0.00001;
gl_FragDepth = d;
}
gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);
}
`}))):(this.transparencyRenderTargetDWFalse&&(this.transparencyRenderTargetDWFalse.dispose(),this.transparencyRenderTargetDWFalse=null),this.transparencyRenderTargetDWTrue&&(this.transparencyRenderTargetDWTrue.dispose(),this.transparencyRenderTargetDWTrue=null),this.depthCopyPass&&(this.depthCopyPass.dispose(),this.depthCopyPass=null))}renderTransparency(e){let t=this.scene.background,i=e.getClearColor(new Ce),s=e.getClearAlpha(),r=new Map,a=e.autoClearDepth;this.scene.traverse(o=>{r.set(o,o.visible)}),this.scene.background=null,e.autoClearDepth=!1,e.setClearColor(new Ce(0,0,0),0),this.depthCopyPass.material.uniforms.depthTexture.value=this.beautyRenderTarget.depthTexture,this.depthCopyPass.material.uniforms.reverseDepthBuffer.value=this.configuration.depthBufferType===Lt.Reverse,e.setRenderTarget(this.transparencyRenderTargetDWFalse),this.scene.traverse(o=>{o.material&&(o.visible=r.get(o)&&(o.material.transparent&&!o.material.depthWrite&&!o.userData.treatAsOpaque||!!o.userData.cannotReceiveAO))}),e.clear(!0,!0,!0),this.depthCopyPass.render(e),e.render(this.scene,this.camera),e.setRenderTarget(this.transparencyRenderTargetDWTrue),this.scene.traverse(o=>{o.material&&(o.visible=r.get(o)&&o.material.transparent&&o.material.depthWrite&&!o.userData.treatAsOpaque)}),e.clear(!0,!0,!0),this.depthCopyPass.render(e),e.render(this.scene,this.camera),this.scene.traverse(o=>{o.visible=r.get(o)}),e.setClearColor(i,s),this.scene.background=t,e.autoClearDepth=a}configureSampleDependentPasses(){this.firstFrame(),this.configureAOPass(this.configuration.depthBufferType,this.camera.isOrthographicCamera),this.configureDenoisePass(this.configuration.depthBufferType,this.camera.isOrthographicCamera)}configureAOPass(e=Lt.Default,t=!1){this.firstFrame(),this.samples=this.generateHemisphereSamples(this.configuration.aoSamples);let i={…k_};i.fragmentShader=i.fragmentShader.replace(“16”,this.configuration.aoSamples).replace(“16.0″,this.configuration.aoSamples+”.0″),e===Lt.Log?i.fragmentShader=`#define LOGDEPTH
`+i.fragmentShader:e===Lt.Reverse&&(i.fragmentShader=`#define REVERSEDEPTH
`+i.fragmentShader),t&&(i.fragmentShader=`#define ORTHO
`+i.fragmentShader),this.configuration.halfRes&&(i.fragmentShader=`#define HALFRES
`+i.fragmentShader),this.effectShaderQuad?(this.effectShaderQuad.material.dispose(),this.effectShaderQuad.material=new ft(i)):this.effectShaderQuad=new Xn(new ft(i))}configureDenoisePass(e=Lt.Default,t=!1){this.firstFrame(),this.samplesDenoise=this.generateDenoiseSamples(this.configuration.denoiseSamples,11);let i={…H_};i.fragmentShader=i.fragmentShader.replace(“16”,this.configuration.denoiseSamples),e===Lt.Log?i.fragmentShader=`#define LOGDEPTH
`+i.fragmentShader:e===Lt.Reverse&&(i.fragmentShader=`#define REVERSEDEPTH
`+i.fragmentShader),t&&(i.fragmentShader=`#define ORTHO
`+i.fragmentShader),this.poissonBlurQuad?(this.poissonBlurQuad.material.dispose(),this.poissonBlurQuad.material=new ft(i)):this.poissonBlurQuad=new Xn(new ft(i))}configureEffectCompositer(e=Lt.Default,t=!1){this.firstFrame();let i={…G_};e===Lt.Log?i.fragmentShader=`#define LOGDEPTH
`+i.fragmentShader:e===Lt.Reverse&&(i.fragmentShader=`#define REVERSEDEPTH
`+i.fragmentShader),t&&(i.fragmentShader=`#define ORTHO
`+i.fragmentShader),this.configuration.halfRes&&this.configuration.depthAwareUpsampling&&(i.fragmentShader=`#define HALFRES
`+i.fragmentShader),this.effectCompositerQuad?(this.effectCompositerQuad.material.dispose(),this.effectCompositerQuad.material=new ft(i)):this.effectCompositerQuad=new Xn(new ft(i))}generateHemisphereSamples(e){let t=[];for(let i=0;i<e;i++){let s=2.399963*i,r=Math.sqrt(i+.5)/Math.sqrt(e),a=r*Math.cos(s),o=r*Math.sin(s),c=Math.sqrt(1-(a*a+o*o));t.push(new D(a,o,c))}return t}generateDenoiseSamples(e,t){let i=2*Math.PI*t/e,s=1/e,r=s,a=[],o=s,c=0;for(let l=0;l<e;l++)a.push(new ue(Math.cos(c),Math.sin(c)).multiplyScalar(Math.pow(o,.75))),o+=r,c+=i;return a}setSize(e,t){this.firstFrame(),this.width=e,this.height=t;let i=this.configuration.halfRes?.5:1;this.beautyRenderTarget.setSize(e,t),this.writeTargetInternal.setSize(e*i,t*i),this.readTargetInternal.setSize(e*i,t*i),this.accumulationRenderTarget.setSize(e*i,t*i),this.configuration.halfRes&&this.depthDownsampleTarget.setSize(e*i,t*i),this.configuration.transparencyAware&&(this.transparencyRenderTargetDWFalse.setSize(e,t),this.transparencyRenderTargetDWTrue.setSize(e,t))}firstFrame(){this.needsFrame=!0}render(e,t,i,s,r){(e.capabilities.logarithmicDepthBuffer&&this.configuration.depthBufferType!==Lt.Log||e.capabilities.reverseDepthBuffer&&this.configuration.depthBufferType!==Lt.Reverse)&&(this.configuration.depthBufferType=e.capabilities.logarithmicDepthBuffer?Lt.Log:e.capabilities.reverseDepthBuffer?Lt.Reverse:Lt.Default,this.configureAOPass(this.configuration.depthBufferType,this.camera.isOrthographicCamera),this.configureDenoisePass(this.configuration.depthBufferType,this.camera.isOrthographicCamera),this.configureEffectCompositer(this.configuration.depthBufferType,this.camera.isOrthographicCamera)),this.detectTransparency(),this.camera.updateMatrixWorld(),this.lastViewMatrix.equals(this.camera.matrixWorldInverse)&&this.lastProjectionMatrix.equals(this.camera.projectionMatrix)&&this.configuration.accumulate&&!this.needsFrame?this.frame++:(this.configuration.accumulate&&(e.setRenderTarget(this.accumulationRenderTarget),e.clear(!0,!0,!0)),this.frame=0,this.needsFrame=!1),this.lastViewMatrix.copy(this.camera.matrixWorldInverse),this.lastProjectionMatrix.copy(this.camera.projectionMatrix);let a,o,c;this.debugMode&&(a=e.getContext(),o=a.getExtension("EXT_disjoint_timer_query_webgl2"),o===null&&(console.error("EXT_disjoint_timer_query_webgl2 not available, disabling debug mode."),this.debugMode=!1)),this.configuration.autoRenderBeauty&&(e.setRenderTarget(this.beautyRenderTarget),e.render(this.scene,this.camera),this.configuration.transparencyAware&&this.renderTransparency(e)),this.debugMode&&(c=a.createQuery(),a.beginQuery(o.TIME_ELAPSED_EXT,c));let l=e.xr.enabled;e.xr.enabled=!1,this._r.set(this.width,this.height);let h=this.configuration.aoRadius;if(this.configuration.halfRes&&this.configuration.screenSpaceRadius&&(h*=.5),this.frame<1024/this.configuration.aoSamples){this.configuration.halfRes&&(e.setRenderTarget(this.depthDownsampleTarget),this.depthDownsampleQuad.material.uniforms.sceneDepth.value=this.beautyRenderTarget.depthTexture,this.depthDownsampleQuad.material.uniforms.resolution.value=this._r,this.depthDownsampleQuad.material.uniforms.near.value=this.camera.near,this.depthDownsampleQuad.material.uniforms.far.value=this.camera.far,this.depthDownsampleQuad.material.uniforms.projectionMatrixInv.value=this.camera.projectionMatrixInverse,this.depthDownsampleQuad.material.uniforms.viewMatrixInv.value=this.camera.matrixWorld,this.depthDownsampleQuad.material.uniforms.logDepth.value=this.configuration.depthBufferType===Lt.Log,this.depthDownsampleQuad.material.uniforms.ortho.value=this.camera.isOrthographicCamera,this.depthDownsampleQuad.render(e)),this.effectShaderQuad.material.uniforms.sceneDiffuse.value=this.beautyRenderTarget.texture,this.effectShaderQuad.material.uniforms.sceneDepth.value=this.configuration.halfRes?this.depthDownsampleTarget.textures[0]:this.beautyRenderTarget.depthTexture,this.effectShaderQuad.material.uniforms.sceneNormal.value=this.configuration.halfRes?this.depthDownsampleTarget.textures[1]:null,this.effectShaderQuad.material.uniforms.projMat.value=this.camera.projectionMatrix,this.effectShaderQuad.material.uniforms.viewMat.value=this.camera.matrixWorldInverse,this.effectShaderQuad.material.uniforms.projViewMat.value=this.camera.projectionMatrix.clone().multiply(this.camera.matrixWorldInverse.clone()),this.effectShaderQuad.material.uniforms.projectionMatrixInv.value=this.camera.projectionMatrixInverse,this.effectShaderQuad.material.uniforms.viewMatrixInv.value=this.camera.matrixWorld,this.effectShaderQuad.material.uniforms.cameraPos.value=this.camera.getWorldPosition(new D),this.effectShaderQuad.material.uniforms.biasAdjustment.value=new ue(this.configuration.biasOffset,this.configuration.biasMultiplier),this.effectShaderQuad.material.uniforms.resolution.value=this.configuration.halfRes?this._r.clone().multiplyScalar(.5).floor():this._r,this.effectShaderQuad.material.uniforms.time.value=performance.now()/1e3,this.effectShaderQuad.material.uniforms.samples.value=this.samples,this.effectShaderQuad.material.uniforms.bluenoise.value=this.bluenoise,this.effectShaderQuad.material.uniforms.radius.value=h,this.effectShaderQuad.material.uniforms.distanceFalloff.value=this.configuration.distanceFalloff,this.effectShaderQuad.material.uniforms.near.value=this.camera.near,this.effectShaderQuad.material.uniforms.far.value=this.camera.far,this.effectShaderQuad.material.uniforms.ortho.value=this.camera.isOrthographicCamera,this.effectShaderQuad.material.uniforms.screenSpaceRadius.value=this.configuration.screenSpaceRadius,this.effectShaderQuad.material.uniforms.frame.value=this.frame,e.setRenderTarget(this.writeTargetInternal),this.effectShaderQuad.render(e);for(let f=0;f<this.configuration.denoiseIterations;f++)[this.writeTargetInternal,this.readTargetInternal]=[this.readTargetInternal,this.writeTargetInternal],this.poissonBlurQuad.material.uniforms.tDiffuse.value=this.readTargetInternal.texture,this.poissonBlurQuad.material.uniforms.sceneDepth.value=this.configuration.halfRes?this.depthDownsampleTarget.textures[0]:this.beautyRenderTarget.depthTexture,this.poissonBlurQuad.material.uniforms.projMat.value=this.camera.projectionMatrix,this.poissonBlurQuad.material.uniforms.viewMat.value=this.camera.matrixWorldInverse,this.poissonBlurQuad.material.uniforms.projectionMatrixInv.value=this.camera.projectionMatrixInverse,this.poissonBlurQuad.material.uniforms.viewMatrixInv.value=this.camera.matrixWorld,this.poissonBlurQuad.material.uniforms.cameraPos.value=this.camera.getWorldPosition(new D),this.poissonBlurQuad.material.uniforms.resolution.value=this.configuration.halfRes?this._r.clone().multiplyScalar(.5).floor():this._r,this.poissonBlurQuad.material.uniforms.time.value=performance.now()/1e3,this.poissonBlurQuad.material.uniforms.blueNoise.value=this.bluenoise,this.poissonBlurQuad.material.uniforms.radius.value=this.configuration.denoiseRadius*(this.configuration.halfRes?.5:1),this.poissonBlurQuad.material.uniforms.worldRadius.value=h,this.poissonBlurQuad.material.uniforms.distanceFalloff.value=this.configuration.distanceFalloff,this.poissonBlurQuad.material.uniforms.index.value=f,this.poissonBlurQuad.material.uniforms.poissonDisk.value=this.samplesDenoise,this.poissonBlurQuad.material.uniforms.near.value=this.camera.near,this.poissonBlurQuad.material.uniforms.far.value=this.camera.far,this.poissonBlurQuad.material.uniforms.screenSpaceRadius.value=this.configuration.screenSpaceRadius,e.setRenderTarget(this.writeTargetInternal),this.poissonBlurQuad.render(e);e.setRenderTarget(this.accumulationRenderTarget);let u=e.autoClear;e.autoClear=!1,this.accumulationQuad.material.uniforms.tDiffuse.value=this.writeTargetInternal.texture,this.accumulationQuad.material.uniforms.frame.value=this.frame,this.accumulationQuad.render(e),e.autoClear=u}this.configuration.transparencyAware&&(this.effectCompositerQuad.material.uniforms.transparencyDWFalse.value=this.transparencyRenderTargetDWFalse.texture,this.effectCompositerQuad.material.uniforms.transparencyDWTrue.value=this.transparencyRenderTargetDWTrue.texture,this.effectCompositerQuad.material.uniforms.transparencyDWTrueDepth.value=this.transparencyRenderTargetDWTrue.depthTexture,this.effectCompositerQuad.material.uniforms.transparencyAware.value=!0),this.effectCompositerQuad.material.uniforms.sceneDiffuse.value=this.beautyRenderTarget.texture,this.effectCompositerQuad.material.uniforms.sceneDepth.value=this.beautyRenderTarget.depthTexture,this.effectCompositerQuad.material.uniforms.aoTones.value=this.configuration.aoTones,this.effectCompositerQuad.material.uniforms.near.value=this.camera.near,this.effectCompositerQuad.material.uniforms.far.value=this.camera.far,this.effectCompositerQuad.material.uniforms.projectionMatrixInv.value=this.camera.projectionMatrixInverse,this.effectCompositerQuad.material.uniforms.viewMatrixInv.value=this.camera.matrixWorld,this.effectCompositerQuad.material.uniforms.ortho.value=this.camera.isOrthographicCamera,this.effectCompositerQuad.material.uniforms.downsampledDepth.value=this.configuration.halfRes?this.depthDownsampleTarget.textures[0]:this.beautyRenderTarget.depthTexture,this.effectCompositerQuad.material.uniforms.resolution.value=this._r,this.effectCompositerQuad.material.uniforms.blueNoise.value=this.bluenoise,this.effectCompositerQuad.material.uniforms.intensity.value=this.configuration.intensity,this.effectCompositerQuad.material.uniforms.renderMode.value=this.configuration.renderMode,this.effectCompositerQuad.material.uniforms.screenSpaceRadius.value=this.configuration.screenSpaceRadius,this.effectCompositerQuad.material.uniforms.radius.value=h,this.effectCompositerQuad.material.uniforms.distanceFalloff.value=this.configuration.distanceFalloff,this.effectCompositerQuad.material.uniforms.gammaCorrection.value=this.configuration.gammaCorrection,this.effectCompositerQuad.material.uniforms.tDiffuse.value=this.accumulationRenderTarget.texture,this.effectCompositerQuad.material.uniforms.color.value=this._c.copy(this.configuration.color).convertSRGBToLinear(),this.effectCompositerQuad.material.uniforms.colorMultiply.value=this.configuration.colorMultiply,this.effectCompositerQuad.material.uniforms.cameraPos.value=this.camera.getWorldPosition(new D),this.effectCompositerQuad.material.uniforms.fog.value=!!this.scene.fog,this.scene.fog&&(this.scene.fog.isFog?(this.effectCompositerQuad.material.uniforms.fogExp.value=!1,this.effectCompositerQuad.material.uniforms.fogNear.value=this.scene.fog.near,this.effectCompositerQuad.material.uniforms.fogFar.value=this.scene.fog.far):this.scene.fog.isFogExp2?(this.effectCompositerQuad.material.uniforms.fogExp.value=!0,this.effectCompositerQuad.material.uniforms.fogDensity.value=this.scene.fog.density):console.error(`Unsupported fog type ${this.scene.fog.constructor.name} in SSAOPass.`)),e.setRenderTarget(this.renderToScreen?null:t),this.effectCompositerQuad.render(e),this.debugMode&&(a.endQuery(o.TIME_ELAPSED_EXT),Od(c,a,this)),e.xr.enabled=l}enableDebugMode(){this.debugMode=!0}disableDebugMode(){this.debugMode=!1}setDisplayMode(e){this.configuration.renderMode=["Combined","AO","No AO","Split","Split AO"].indexOf(e)}setQualityMode(e){e==="Performance"?(this.configuration.aoSamples=8,this.configuration.denoiseSamples=4,this.configuration.denoiseRadius=12):e==="Low"?(this.configuration.aoSamples=16,this.configuration.denoiseSamples=4,this.configuration.denoiseRadius=12):e==="Medium"?(this.configuration.aoSamples=16,this.configuration.denoiseSamples=8,this.configuration.denoiseRadius=12):e==="High"?(this.configuration.aoSamples=64,this.configuration.denoiseSamples=8,this.configuration.denoiseRadius=6):e==="Ultra"&&(this.configuration.aoSamples=64,this.configuration.denoiseSamples=16,this.configuration.denoiseRadius=6)}};var Qd=function(){var n="b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuikqbeeedddillviebeoweuec:q:Odkr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbol79IV9Rbrq;w8Wqdbk;esezu8Jjjjjbcj;eb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Radz1jjjbhwcj;abad9Uc;WFbGgocjdaocjd6EhDaicefhocbhqdnindndndnaeaq9nmbaDaeaq9RaqaDfae6Egkcsfglcl4cifcd4hxalc9WGgmTmecbhPawcjdfhsaohzinaraz9Rax6mvarazaxfgo9RcK6mvczhlcbhHinalgic9WfgOawcj;cbffhldndndndndnazaOco4fRbbaHcoG4ciGPlbedibkal9cb83ibalcwf9cb83ibxikalaoRblaoRbbgOco4gAaAciSgAE86bbawcj;cbfaifglcGfaoclfaAfgARbbaOcl4ciGgCaCciSgCE86bbalcVfaAaCfgARbbaOcd4ciGgCaCciSgCE86bbalc7faAaCfgARbbaOciGgOaOciSgOE86bbalctfaAaOfgARbbaoRbegOco4gCaCciSgCE86bbalc91faAaCfgARbbaOcl4ciGgCaCciSgCE86bbalc4faAaCfgARbbaOcd4ciGgCaCciSgCE86bbalc93faAaCfgARbbaOciGgOaOciSgOE86bbalc94faAaOfgARbbaoRbdgOco4gCaCciSgCE86bbalc95faAaCfgARbbaOcl4ciGgCaCciSgCE86bbalc96faAaCfgARbbaOcd4ciGgCaCciSgCE86bbalc97faAaCfgARbbaOciGgOaOciSgOE86bbalc98faAaOfgORbbaoRbigoco4gAaAciSgAE86bbalc99faOaAfgORbbaocl4ciGgAaAciSgAE86bbalc9:faOaAfgORbbaocd4ciGgAaAciSgAE86bbalcufaOaAfglRbbaociGgoaociSgoE86bbalaofhoxdkalaoRbwaoRbbgOcl4gAaAcsSgAE86bbawcj;cbfaifglcGfaocwfaAfgARbbaOcsGgOaOcsSgOE86bbalcVfaAaOfgORbbaoRbegAcl4gCaCcsSgCE86bbalc7faOaCfgORbbaAcsGgAaAcsSgAE86bbalctfaOaAfgORbbaoRbdgAcl4gCaCcsSgCE86bbalc91faOaCfgORbbaAcsGgAaAcsSgAE86bbalc4faOaAfgORbbaoRbigAcl4gCaCcsSgCE86bbalc93faOaCfgORbbaAcsGgAaAcsSgAE86bbalc94faOaAfgORbbaoRblgAcl4gCaCcsSgCE86bbalc95faOaCfgORbbaAcsGgAaAcsSgAE86bbalc96faOaAfgORbbaoRbvgAcl4gCaCcsSgCE86bbalc97faOaCfgORbbaAcsGgAaAcsSgAE86bbalc98faOaAfgORbbaoRbogAcl4gCaCcsSgCE86bbalc99faOaCfgORbbaAcsGgAaAcsSgAE86bbalc9:faOaAfgORbbaoRbrgocl4gAaAcsSgAE86bbalcufaOaAfglRbbaocsGgoaocsSgoE86bbalaofhoxekalao8Pbb83bbalcwfaocwf8Pbb83bbaoczfhokdnaiam9pmbaHcdfhHaiczfhlarao9RcL0mekkaiam6mvaoTmvdnakTmbawaPfRbbhHawcj;cbfhlashiakhOinaialRbbgzce4cbazceG9R7aHfgH86bbaiadfhialcefhlaOcufgOmbkkascefhsaohzaPcefgPad9hmbxikkcbc99arao9Radcaadca0ESEhoxlkaoaxad2fhCdnakmbadhlinaoTmlarao9Rax6mlaoaxfhoalcufglmbkaChoxekcbhmawcjdfhAinarao9Rax6miawamfRbbhHawcj;cbfhlaAhiakhOinaialRbbgzce4cbazceG9R7aHfgH86bbaiadfhialcefhlaOcufgOmbkaAcefhAaoaxfhoamcefgmad9hmbkaChokabaqad2fawcjdfakad2z1jjjb8Aawawcjdfakcufad2fadz1jjjb8Aakaqfhqaombkc9:hoxekc9:hokavcj;ebf8Kjjjjbaok;cseHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgwce0mbavc;abfcFecjez:jjjjb8AavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhDaicefgqarfhidnaeTmbcmcsawceSEhkcbhxcbhmcbhPcbhwcbhlindnaiaD9nmbc9:hoxikdndnaqRbbgoc;Ve0mbavc;abfalaocu7gscl4fcsGcitfgzydlhrazydbhzdnaocsGgHak9pmbavawasfcsGcdtfydbaxaHEhoaHThsdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkaxasfhxcdhHavawcdtfaoBdbawasfhwcehsalhOxdkdndnaHcsSmbaHc987aHamffcefhoxekaicefhoai8SbbgHcFeGhsdndnaHcu9mmbaohixekaicvfhiascFbGhscrhHdninao8SbbgOcFbGaHtasVhsaOcu9kmeaocefhoaHcrfgHc8J9hmbxdkkaocefhikasce4cbasceG9R7amfhokdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkcdhHavawcdtfaoBdbcehsawcefhwalhOaohmxekdnaocpe0mbaxcefgHavawaDaocsGfRbbgocl49RcsGcdtfydbaocz6gzEhravawao9RcsGcdtfydbaHazfgAaocsGgHEhoaHThCdndnadcd9hmbabaPcetfgHax87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHaxBdbaHcwfaoBdbaHclfarBdbkcdhsavawcdtfaxBdbavawcefgwcsGcdtfarBdbcihHavc;abfalcitfgOaxBdlaOarBdbavawazfgwcsGcdtfaoBdbalcefcsGhOawaCfhwaxhzaAaCfhxxekaxcbaiRbbgOEgzaoc;:eSgHfhraOcsGhCaOcl4hAdndnaOcs0mbarcefhoxekarhoavawaA9RcsGcdtfydbhrkdndnaCmbaocefhxxekaohxavawaO9RcsGcdtfydbhokdndnaHTmbaicefhHxekaicdfhHai8SbegscFeGhzdnascu9kmbaicofhXazcFbGhzcrhidninaH8SbbgscFbGaitazVhzascu9kmeaHcefhHaicrfgic8J9hmbkaXhHxekaHcefhHkazce4cbazceG9R7amfgmhzkdndnaAcsSmbaHhsxekaHcefhsaH8SbbgicFeGhrdnaicu9kmbaHcvfhXarcFbGhrcrhidninas8SbbgHcFbGaitarVhraHcu9kmeascefhsaicrfgic8J9hmbkaXhsxekascefhskarce4cbarceG9R7amfgmhrkdndnaCcsSmbashixekascefhias8SbbgocFeGhHdnaocu9kmbascvfhXaHcFbGhHcrhodninai8SbbgscFbGaotaHVhHascu9kmeaicefhiaocrfgoc8J9hmbkaXhixekaicefhikaHce4cbaHceG9R7amfgmhokdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkcdhsavawcdtfazBdbavawcefgwcsGcdtfarBdbcihHavc;abfalcitfgXazBdlaXarBdbavawaOcz6aAcsSVfgwcsGcdtfaoBdbawaCTaCcsSVfhwalcefcsGhOkaqcefhqavc;abfaOcitfgOarBdlaOaoBdbavc;abfalasfcsGcitfgraoBdlarazBdbawcsGhwalaHfcsGhlaPcifgPae6mbkkcbc99aiaDSEhokavc;aef8Kjjjjbaok:flevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:Lvoeue99dud99eud99dndnadcl9hmbaeTmeindndnabcdfgd8Sbb:Yab8Sbbgi:Ygl:l:tabcefgv8Sbbgo:Ygr:l:tgwJbb;:9cawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai86bbdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad86bbdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad86bbabclfhbaecufgembxdkkaeTmbindndnabclfgd8Ueb:Yab8Uebgi:Ygl:l:tabcdfgv8Uebgo:Ygr:l:tgwJb;:FSawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai87ebdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad87ebdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad87ebabcwfhbaecufgembkkk;oiliui99iue99dnaeTmbcbhiabhlindndnJ;Zl81Zalcof8UebgvciV:Y:vgoal8Ueb:YNgrJb;:FSNJbbbZJbbb:;arJbbbb9GEMgw:lJbbb9p9DTmbaw:OhDxekcjjjj94hDkalclf8Uebhqalcdf8UebhkabaiavcefciGfcetfaD87ebdndnaoak:YNgwJb;:FSNJbbbZJbbb:;awJbbbb9GEMgx:lJbbb9p9DTmbax:OhDxekcjjjj94hDkabaiavciGfgkcd7cetfaD87ebdndnaoaq:YNgoJb;:FSNJbbbZJbbb:;aoJbbbb9GEMgx:lJbbb9p9DTmbax:OhDxekcjjjj94hDkabaiavcufciGfcetfaD87ebdndnJbbjZararN:tawawN:taoaoN:tgrJbbbbarJbbbb9GE:rJb;:FSNJbbbZMgr:lJbbb9p9DTmbar:Ohvxekcjjjj94hvkabakcetfav87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2gdTmbinababydbgecwtcw91:Yaece91cjjj98Gcjjj;8if::NUdbabclfhbadcufgdmbkkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkkkebcjwklzNbb",e="b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuikqbbebeedddilve9Weeeviebeoweuec:q:6dkr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbwl79IV9RbDq:p9sqlbzik9:evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaec:q:yjjbfai86bbaecitc:q1jjbfab8Piw83ibaecefgecjd9hmbkk:N8JlHud97euo978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Rad;8qbbcj;abad9UhlaicefhodnaeTmbadTmbalc;WFbGglcjdalcjd6EhwcbhDinawaeaD9RaDawfae6Egqcsfglc9WGgkci2hxakcethmalcl4cifcd4hPabaDad2fhsakc;ab6hzcbhHincbhOaohAdndninaraA9RaP6meavcj;cbfaOak2fhCaAaPfhocbhidnazmbarao9Rc;Gb6mbcbhlinaCalfhidndndndndnaAalco4fRbbgXciGPlbedibkaipxbbbbbbbbbbbbbbbbpklbxikaiaopbblaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbaoclfaYpQbfaKc:q:yjjbfRbbfhoxdkaiaopbbwaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbaocwfaYpQbfaKc:q:yjjbfRbbfhoxekaiaopbbbpklbaoczfhokdndndndndnaXcd4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklzxikaiaopbblaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzaoclfaYpQbfaKc:q:yjjbfRbbfhoxdkaiaopbbwaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzaocwfaYpQbfaKc:q:yjjbfRbbfhoxekaiaopbbbpklzaoczfhokdndndndndnaXcl4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklaxikaiaopbblaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaaoclfaYpQbfaKc:q:yjjbfRbbfhoxdkaiaopbbwaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaaocwfaYpQbfaKc:q:yjjbfRbbfhoxekaiaopbbbpklaaoczfhokdndndndndnaXco4Plbedibkaipxbbbbbbbbbbbbbbbbpkl8WxikaiaopbblaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WaoclfaYpQbfaXc:q:yjjbfRbbfhoxdkaiaopbbwaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WaocwfaYpQbfaXc:q:yjjbfRbbfhoxekaiaopbbbpkl8Waoczfhokalc;abfhialcjefak0meaihlarao9Rc;Fb0mbkkdnaiak9pmbaici4hlinarao9RcK6miaCaifhXdndndndndnaAaico4fRbbalcoG4ciGPlbedibkaXpxbbbbbbbbbbbbbbbbpkbbxikaXaopbblaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkbbaoclfaYpQbfaKc:q:yjjbfRbbfhoxdkaXaopbbwaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkbbaocwfaYpQbfaKc:q:yjjbfRbbfhoxekaXaopbbbpkbbaoczfhokalcdfhlaiczfgiak6mbkkaoTmeaohAaOcefgOclSmdxbkkc9:hoxlkdnakTmbavcjdfaHfhiavaHfpbdbhYcbhXinaiavcj;cbfaXfglpblbgLcep9TaLpxeeeeeeeeeeeeeeeegQp9op9Hp9rgLalakfpblbg8Acep9Ta8AaQp9op9Hp9rg8ApmbzeHdOiAlCvXoQrLgEalamfpblbg3cep9Ta3aQp9op9Hp9rg3alaxfpblbg5cep9Ta5aQp9op9Hp9rg5pmbzeHdOiAlCvXoQrLg8EpmbezHdiOAlvCXorQLgQaQpmbedibedibedibediaYp9UgYp9AdbbaiadfglaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaladfglaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaladfglaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaladfglaYaEa8EpmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaladfglaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaladfglaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaladfglaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaladfglaYaLa8ApmwKDYq8AkEx3m5P8Es8FgLa3a5pmwKDYq8AkEx3m5P8Es8Fg8ApmbezHdiOAlvCXorQLgQaQpmbedibedibedibedip9UgYp9AdbbaladfglaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaladfglaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaladfglaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaladfglaYaLa8ApmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaladfglaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaladfglaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaladfglaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaladfhiaXczfgXak6mbkkaHclfgHad6mbkasavcjdfaqad2;8qbbavavcjdfaqcufad2fad;8qbbaqaDfgDae6mbkkcbc99arao9Radcaadca0ESEhokavcj;kbf8Kjjjjbaokwbz:bjjjbk::seHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgwce0mbavc;abfcFecje;8kbavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhDaicefgqarfhidnaeTmbcmcsawceSEhkcbhxcbhmcbhPcbhwcbhlindnaiaD9nmbc9:hoxikdndnaqRbbgoc;Ve0mbavc;abfalaocu7gscl4fcsGcitfgzydlhrazydbhzdnaocsGgHak9pmbavawasfcsGcdtfydbaxaHEhoaHThsdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkaxasfhxcdhHavawcdtfaoBdbawasfhwcehsalhOxdkdndnaHcsSmbaHc987aHamffcefhoxekaicefhoai8SbbgHcFeGhsdndnaHcu9mmbaohixekaicvfhiascFbGhscrhHdninao8SbbgOcFbGaHtasVhsaOcu9kmeaocefhoaHcrfgHc8J9hmbxdkkaocefhikasce4cbasceG9R7amfhokdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkcdhHavawcdtfaoBdbcehsawcefhwalhOaohmxekdnaocpe0mbaxcefgHavawaDaocsGfRbbgocl49RcsGcdtfydbaocz6gzEhravawao9RcsGcdtfydbaHazfgAaocsGgHEhoaHThCdndnadcd9hmbabaPcetfgHax87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHaxBdbaHcwfaoBdbaHclfarBdbkcdhsavawcdtfaxBdbavawcefgwcsGcdtfarBdbcihHavc;abfalcitfgOaxBdlaOarBdbavawazfgwcsGcdtfaoBdbalcefcsGhOawaCfhwaxhzaAaCfhxxekaxcbaiRbbgOEgzaoc;:eSgHfhraOcsGhCaOcl4hAdndnaOcs0mbarcefhoxekarhoavawaA9RcsGcdtfydbhrkdndnaCmbaocefhxxekaohxavawaO9RcsGcdtfydbhokdndnaHTmbaicefhHxekaicdfhHai8SbegscFeGhzdnascu9kmbaicofhXazcFbGhzcrhidninaH8SbbgscFbGaitazVhzascu9kmeaHcefhHaicrfgic8J9hmbkaXhHxekaHcefhHkazce4cbazceG9R7amfgmhzkdndnaAcsSmbaHhsxekaHcefhsaH8SbbgicFeGhrdnaicu9kmbaHcvfhXarcFbGhrcrhidninas8SbbgHcFbGaitarVhraHcu9kmeascefhsaicrfgic8J9hmbkaXhsxekascefhskarce4cbarceG9R7amfgmhrkdndnaCcsSmbashixekascefhias8SbbgocFeGhHdnaocu9kmbascvfhXaHcFbGhHcrhodninai8SbbgscFbGaotaHVhHascu9kmeaicefhiaocrfgoc8J9hmbkaXhixekaicefhikaHce4cbaHceG9R7amfgmhokdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkcdhsavawcdtfazBdbavawcefgwcsGcdtfarBdbcihHavc;abfalcitfgXazBdlaXarBdbavawaOcz6aAcsSVfgwcsGcdtfaoBdbawaCTaCcsSVfhwalcefcsGhOkaqcefhqavc;abfaOcitfgOarBdlaOaoBdbavc;abfalasfcsGcitfgraoBdlarazBdbawcsGhwalaHfcsGhlaPcifgPae6mbkkcbc99aiaDSEhokavc;aef8Kjjjjbaok:flevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:wPliuo97eue978Jjjjjbca9Rhiaec98Ghldndnadcl9hmbdnalTmbcbhvabhdinadadpbbbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpkbbadczfhdavclfgval6mbkkalaeSmeaipxbbbbbbbbbbbbbbbbgqpklbaiabalcdtfgdaeciGglcdtgv;8qbbdnalTmbaiaipblbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDaqp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpklbkadaiav;8qbbskdnalTmbcbhvabhdinadczfgxaxpbbbgopxbbbbbbFFbbbbbbFFgkp9oadpbbbgDaopmbediwDqkzHOAKY8AEgwczp:Reczp:Sep;6egraDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eawczp:Sep;6egwp;Gearp;Gep;Kep;Legopxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegrpxb;:FSb;:FSb;:FSb;:FSararp;Meaoaop;Meawaqawamp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFFbbFFbbFFbbFFbbp9oaoawp;Meaqp;Keczp:Rep9qgoarawp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogrpmwDKYqk8AExm35Ps8E8Fp9qpkbbadaDakp9oaoarpmbezHdiOAlvCXorQLp9qpkbbadcafhdavclfgval6mbkkalaeSmbaiaeciGgvcitgdfcbcaad9R;8kbaiabalcitfglad;8qbbdnavTmbaiaipblzgopxbbbbbbFFbbbbbbFFgkp9oaipblbgDaopmbediwDqkzHOAKY8AEgwczp:Reczp:Sep;6egraDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eawczp:Sep;6egwp;Gearp;Gep;Kep;Legopxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegrpxb;:FSb;:FSb;:FSb;:FSararp;Meaoaop;Meawaqawamp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFFbbFFbbFFbbFFbbp9oaoawp;Meaqp;Keczp:Rep9qgoarawp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogrpmwDKYqk8AExm35Ps8E8Fp9qpklzaiaDakp9oaoarpmbezHdiOAlvCXorQLp9qpklbkalaiad;8qbbkk;4wllue97euv978Jjjjjbc8W9Rhidnaec98GglTmbcbhvabhoinaiaopbbbgraoczfgwpbbbgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklbaopxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaDakp;Mearp;Keamp9oaqakp;Mearp;Keczp:Rep9qgkpmbezHdiOAlvCXorQLgrp5baipblbpEb:T:j83ibaocwfarp5eaipblbpEe:T:j83ibawaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblbpEd:T:j83ibaocKfakp5eaipblbpEi:T:j83ibaocafhoavclfgval6mbkkdnalaeSmbaiaeciGgvcitgofcbcaao9R;8kbaiabalcitfgwao;8qbbdnavTmbaiaipblbgraipblzgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklaaipxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaDakp;Mearp;Keamp9oaqakp;Mearp;Keczp:Rep9qgkpmbezHdiOAlvCXorQLgrp5baipblapEb:T:j83ibaiarp5eaipblapEe:T:j83iwaiaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblapEd:T:j83izaiakp5eaipblapEi:T:j83iKkawaiao;8qbbkk:Pddiue978Jjjjjbc;ab9Rhidnadcd4ae2glc98GgvTmbcbheabhdinadadpbbbgocwp:Recwp:Sep;6eaocep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepkbbadczfhdaeclfgeav6mbkkdnavalSmbaialciGgecdtgdVcbc;abad9R;8kbaiabavcdtfgvad;8qbbdnaeTmbaiaipblbgocwp:Recwp:Sep;6eaocep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepklbkavaiad;8qbbkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkkebcjwklz:Dbb",t=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,3,2,0,0,5,3,1,0,1,12,1,0,10,22,2,12,0,65,0,65,0,65,0,252,10,0,0,11,7,0,65,0,253,15,26,11]),i=new Uint8Array([32,0,65,2,1,106,34,33,3,128,11,4,13,64,6,253,10,7,15,116,127,5,8,12,40,16,19,54,20,9,27,255,113,17,42,67,24,23,146,148,18,14,22,45,70,69,56,114,101,21,25,63,75,136,108,28,118,29,73,115]);if(typeof WebAssembly!="object")return{supported:!1};var s=WebAssembly.validate(t)?o(e):o(n),r,a=WebAssembly.instantiate(s,{}).then(function(d){r=d.instance,r.exports.__wasm_call_ctors()});function o(d){for(var S=new Uint8Array(d.length),v=0;v96?b-97:b>64?b-39:b+4}for(var M=0,v=0;v<d.length;++v)S[M++]=S[v]<60?i[S[v]]:(S[v]-60)*64+S[++v];return S.buffer.slice(0,M)}function c(d,S,v,b,M,I,R){var B=d.exports.sbrk,E=b+3&-4,_=B(E*M),T=B(I.length),U=new Uint8Array(d.exports.memory.buffer);U.set(I,T);var Q=S(_,b,M,T,I.length);if(Q==0&&R&&R(_,E,M),v.set(U.subarray(_,_+b*M)),B(_-B(0)),Q!=0)throw new Error("Malformed buffer data: "+Q)}var l={NONE:"",OCTAHEDRAL:"meshopt_decodeFilterOct",QUATERNION:"meshopt_decodeFilterQuat",EXPONENTIAL:"meshopt_decodeFilterExp"},h={ATTRIBUTES:"meshopt_decodeVertexBuffer",TRIANGLES:"meshopt_decodeIndexBuffer",INDICES:"meshopt_decodeIndexSequence"},u=[],f=0;function p(d){var S={object:new Worker(d),pending:0,requests:{}};return S.object.onmessage=function(v){var b=v.data;S.pending-=b.count,S.requests[b.id][b.action](b.value),delete S.requests[b.id]},S}function m(d){for(var S="self.ready = WebAssembly.instantiate(new Uint8Array(["+new Uint8Array(s)+"]), {}).then(function(result) { result.instance.exports.__wasm_call_ctors(); return result.instance; });self.onmessage = "+A.name+";"+c.toString()+A.toString(),v=new Blob([S],{type:"text/javascript"}),b=URL.createObjectURL(v),M=u.length;M<d;++M)u[M]=p(b);for(var M=d;M<u.length;++M)u[M].object.postMessage({});u.length=d,URL.revokeObjectURL(b)}function g(d,S,v,b,M){for(var I=u[0],R=1;R<u.length;++R)u[R].pending0?g(d,S,v,h[b],l[M]):a.then(function(){var I=new Uint8Array(d*S);return c(r,r.exports[h[b]],I,d,S,v,r.exports[l[M]]),I})}}}();var Tc=class{constructor(e=4){this.pool=e,this.queue=[],this.workers=[],this.workersResolve=[],this.workerStatus=0,this.workerCreator=null}_initWorker(e){if(!this.workers[e]){let t=this.workerCreator();t.addEventListener(“message”,this._onMessage.bind(this,e)),this.workers[e]=t}}_getIdleWorker(){for(let e=0;e<this.pool;e++)if(!(this.workerStatus&1<<e))return e;return-1}_onMessage(e,t){let i=this.workersResolve[e];if(i&&i(t),this.queue.length){let{resolve:s,msg:r,transfer:a}=this.queue.shift();this.workersResolve[e]=s,this.workers[e].postMessage(r,a)}else this.workerStatus^=1<{let s=this._getIdleWorker();s!==-1?(this._initWorker(s),this.workerStatus|=1<e.terminate()),this.workersResolve.length=0,this.workers.length=0,this.queue.length=0,this.workerStatus=0}};var Ds=class{constructor(e,t,i,s){this._dataView=void 0,this._littleEndian=void 0,this._offset=void 0,this._dataView=new DataView(e.buffer,e.byteOffset+t,i),this._littleEndian=s,this._offset=0}_nextUint8(){let e=this._dataView.getUint8(this._offset);return this._offset+=1,e}_nextUint16(){let e=this._dataView.getUint16(this._offset,this._littleEndian);return this._offset+=2,e}_nextUint32(){let e=this._dataView.getUint32(this._offset,this._littleEndian);return this._offset+=4,e}_nextUint64(){let e=this._dataView.getUint32(this._offset,this._littleEndian)+4294967296*this._dataView.getUint32(this._offset+4,this._littleEndian);return this._offset+=8,e}_nextInt32(){let e=this._dataView.getInt32(this._offset,this._littleEndian);return this._offset+=4,e}_nextUint8Array(e){let t=new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+this._offset,e);return this._offset+=e,t}_skip(e){return this._offset+=e,this}_scan(e,t=0){let i=this._offset,s=0;for(;this._dataView.getUint8(this._offset)!==t&&s<e;)s++,this._offset++;return s<e&&this._offset++,new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+i,s)}},qC=new Uint8Array([0]),Jt=[171,75,84,88,32,50,48,187,13,10,26,10];function kd(n){return new TextDecoder().decode(n)}function Gd(n){let e=new Uint8Array(n.buffer,n.byteOffset,Jt.length);if(e[0]!==Jt[0]||e[1]!==Jt[1]||e[2]!==Jt[2]||e[3]!==Jt[3]||e[4]!==Jt[4]||e[5]!==Jt[5]||e[6]!==Jt[6]||e[7]!==Jt[7]||e[8]!==Jt[8]||e[9]!==Jt[9]||e[10]!==Jt[10]||e[11]!==Jt[11])throw new Error("Missing KTX 2.0 identifier.");let t={vkFormat:0,typeSize:1,pixelWidth:0,pixelHeight:0,pixelDepth:0,layerCount:0,faceCount:1,levelCount:0,supercompressionScheme:0,levels:[],dataFormatDescriptor:[{vendorId:0,descriptorType: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:[]}],keyValue:{},globalData:null},i=17*Uint32Array.BYTES_PER_ELEMENT,s=new Ds(n,Jt.length,i,!0);t.vkFormat=s._nextUint32(),t.typeSize=s._nextUint32(),t.pixelWidth=s._nextUint32(),t.pixelHeight=s._nextUint32(),t.pixelDepth=s._nextUint32(),t.layerCount=s._nextUint32(),t.faceCount=s._nextUint32(),t.levelCount=s._nextUint32(),t.supercompressionScheme=s._nextUint32();let r=s._nextUint32(),a=s._nextUint32(),o=s._nextUint32(),c=s._nextUint32(),l=s._nextUint64(),h=s._nextUint64(),u=3*Math.max(t.levelCount,1)*8,f=new Ds(n,Jt.length+i,u,!0);for(let ae=0,fe=Math.max(t.levelCount,1);ae<fe;ae++)t.levels.push({levelData:new Uint8Array(n.buffer,n.byteOffset+f._nextUint64(),f._nextUint64()),uncompressedByteLength:f._nextUint64()});let p=new Ds(n,r,a,!0);p._skip(4);let m=p._nextUint16(),g=p._nextUint16(),A=p._nextUint16(),d=p._nextUint16(),S={vendorId:m,descriptorType:g,versionNumber:A,colorModel:p._nextUint8(),colorPrimaries:p._nextUint8(),transferFunction:p._nextUint8(),flags:p._nextUint8(),texelBlockDimension:[p._nextUint8(),p._nextUint8(),p._nextUint8(),p._nextUint8()],bytesPlane:[p._nextUint8(),p._nextUint8(),p._nextUint8(),p._nextUint8(),p._nextUint8(),p._nextUint8(),p._nextUint8(),p._nextUint8()],samples:[]},v=(d/4-6)/4;for(let ae=0;ae<v;ae++){let fe={bitOffset:p._nextUint16(),bitLength:p._nextUint8(),channelType:p._nextUint8(),samplePosition:[p._nextUint8(),p._nextUint8(),p._nextUint8(),p._nextUint8()],sampleLower:Number.NEGATIVE_INFINITY,sampleUpper:Number.POSITIVE_INFINITY};64&fe.channelType?(fe.sampleLower=p._nextInt32(),fe.sampleUpper=p._nextInt32()):(fe.sampleLower=p._nextUint32(),fe.sampleUpper=p._nextUint32()),S.samples[ae]=fe}t.dataFormatDescriptor.length=0,t.dataFormatDescriptor.push(S);let b=new Ds(n,o,c,!0);for(;b._offset<c;){let ae=b._nextUint32(),fe=b._scan(ae),Re=kd(fe);if(t.keyValue[Re]=b._nextUint8Array(ae-fe.byteLength-1),Re.match(/^ktx/i)){let Je=kd(t.keyValue[Re]);t.keyValue[Re]=Je.substring(0,Je.lastIndexOf(""))}b._skip(ae%4?4-ae%4:0)}if(h<=0)return t;let M=new Ds(n,l,h,!0),I=M._nextUint16(),R=M._nextUint16(),B=M._nextUint32(),E=M._nextUint32(),_=M._nextUint32(),T=M._nextUint32(),U=[];for(let ae=0,fe=Math.max(t.levelCount,1);ae<fe;ae++)U.push({imageFlags:M._nextUint32(),rgbSliceByteOffset:M._nextUint32(),rgbSliceByteLength:M._nextUint32(),alphaSliceByteOffset:M._nextUint32(),alphaSliceByteLength:M._nextUint32()});let Q=l+M._offset,N=Q+B,V=N+E,k=V+_,j=new Uint8Array(n.buffer,n.byteOffset+Q,B),z=new Uint8Array(n.buffer,n.byteOffset+N,E),ie=new Uint8Array(n.buffer,n.byteOffset+V,_),se=new Uint8Array(n.buffer,n.byteOffset+k,T);return t.globalData={endpointCount:I,selectorCount:R,imageDescs:U,endpointsData:j,selectorsData:z,tablesData:ie,extendedData:se},t}var qh,yn,Yh,Xh={env:{emscripten_notify_memory_growth:function(n){Yh=new Uint8Array(yn.exports.memory.buffer)}}},wc=class{init(){return qh||(qh=typeof fetche.arrayBuffer()).then(e=>WebAssembly.instantiate(e,Xh)).then(this._init):WebAssembly.instantiate(Buffer.from(Hd,”base64″),Xh).then(this._init),qh)}_init(e){yn=e.instance,Xh.env.emscripten_notify_memory_growth(0)}decode(e,t=0){if(!yn)throw new Error(“ZSTDDecoder: Await .init() before decoding.”);let i=e.byteLength,s=yn.exports.malloc(i);Yh.set(e,s),t=t||Number(yn.exports.ZSTD_findDecompressedSize(s,i));let r=yn.exports.malloc(t),a=yn.exports.ZSTD_decompress(r,t,s,i),o=Yh.slice(r,r+a);return yn.exports.free(s),yn.exports.free(r),o}},Hd=”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IAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigCACACaiAAQQZ2IgFBAnRBsB5qKAIAaiAAQSBxIgBFaiABRSAAQQV2cWoFQbh/CwsdACAAKAKQ4gEQWiAAQQA2AqDiASAAQgA3A5DiAQu1AwEFfyMAQZACayIKJABBuH8hBgJAIAVFDQAgBCwAACIIQf8BcSEHAkAgCEF/TARAIAdBgn9qQQF2IgggBU8NAkFsIQYgB0GBf2oiBUGAAk8NAiAEQQFqIQdBACEGA0AgBiAFTwRAIAUhBiAIIQcMAwUgACAGaiAHIAZBAXZqIgQtAABBBHY6AAAgACAGQQFyaiAELQAAQQ9xOgAAIAZBAmohBgwBCwAACwALIAcgBU8NASAAIARBAWogByAKEFMiBhADDQELIAYhBEEAIQYgAUEAQTQQECEJQQAhBQNAIAQgBkcEQCAAIAZqIggtAAAiAUELSwRAQWwhBgwDBSAJIAFBAnRqIgEgASgCAEEBajYCACAGQQFqIQZBASAILQAAdEEBdSAFaiEFDAILAAsLQWwhBiAFRQ0AIAUQFEEBaiIBQQxLDQAgAyABNgIAQQFBASABdCAFayIDEBQiAXQgA0cNACAAIARqIAFBAWoiADoAACAJIABBAnRqIgAgACgCAEEBajYCACAJKAIEIgBBAkkgAEEBcXINACACIARBAWo2AgAgB0EBaiEGCyAKQZACaiQAIAYLxhEBDH8jAEHwAGsiBSQAQWwhCwJAIANBCkkNACACLwAAIQogAi8AAiEJIAIvAAQhByAFQQhqIAQQDgJAIAMgByAJIApqakEGaiIMSQ0AIAUtAAohCCAFQdgAaiACQQZqIgIgChAGIgsQAw0BIAVBQGsgAiAKaiICIAkQBiILEAMNASAFQShqIAIgCWoiAiAHEAYiCxADDQEgBUEQaiACIAdqIAMgDGsQBiILEAMNASAAIAFqIg9BfWohECAEQQRqIQZBASELIAAgAUEDakECdiIDaiIMIANqIgIgA2oiDiEDIAIhBCAMIQcDQCALIAMgEElxBEAgACAGIAVB2ABqIAgQAkECdGoiCS8BADsAACAFQdgAaiAJLQACEAEgCS0AAyELIAcgBiAFQUBrIAgQAkECdGoiCS8BADsAACAFQUBrIAktAAIQASAJLQADIQogBCAGIAVBKGogCBACQQJ0aiIJLwEAOwAAIAVBKGogCS0AAhABIAktAAMhCSADIAYgBUEQaiAIEAJBAnRqIg0vAQA7AAAgBUEQaiANLQACEAEgDS0AAyENIAAgC2oiCyAGIAVB2ABqIAgQAkECdGoiAC8BADsAACAFQdgAaiAALQACEAEgAC0AAyEAIAcgCmoiCiAGIAVBQGsgCBACQQJ0aiIHLwEAOwAAIAVBQGsgBy0AAhABIActAAMhByAEIAlqIgkgBiAFQShqIAgQAkECdGoiBC8BADsAACAFQShqIAQtAAIQASAELQADIQQgAyANaiIDIAYgBUEQaiAIEAJBAnRqIg0vAQA7AAAgBUEQaiANLQACEAEgACALaiEAIAcgCmohByAEIAlqIQQgAyANLQADaiEDIAVB2ABqEA0gBUFAaxANciAFQShqEA1yIAVBEGoQDXJFIQsMAQsLIAQgDksgByACS3INAEFsIQsgACAMSw0BIAxBfWohCQNAQQAgACAJSSAFQdgAahAEGwRAIAAgBiAFQdgAaiAIEAJBAnRqIgovAQA7AAAgBUHYAGogCi0AAhABIAAgCi0AA2oiACAGIAVB2ABqIAgQAkECdGoiCi8BADsAACAFQdgAaiAKLQACEAEgACAKLQADaiEADAEFIAxBfmohCgNAIAVB2ABqEAQgACAKS3JFBEAgACAGIAVB2ABqIAgQAkECdGoiCS8BADsAACAFQdgAaiAJLQACEAEgACAJLQADaiEADAELCwNAIAAgCk0EQCAAIAYgBUHYAGogCBACQQJ0aiIJLwEAOwAAIAVB2ABqIAktAAIQASAAIAktAANqIQAMAQsLAkAgACAMTw0AIAAgBiAFQdgAaiAIEAIiAEECdGoiDC0AADoAACAMLQADQQFGBEAgBUHYAGogDC0AAhABDAELIAUoAlxBH0sNACAFQdgAaiAGIABBAnRqLQACEAEgBSgCXEEhSQ0AIAVBIDYCXAsgAkF9aiEMA0BBACAHIAxJIAVBQGsQBBsEQCAHIAYgBUFAayAIEAJBAnRqIgAvAQA7AAAgBUFAayAALQACEAEgByAALQADaiIAIAYgBUFAayAIEAJBAnRqIgcvAQA7AAAgBUFAayAHLQACEAEgACAHLQADaiEHDAEFIAJBfmohDANAIAVBQGsQBCAHIAxLckUEQCAHIAYgBUFAayAIEAJBAnRqIgAvAQA7AAAgBUFAayAALQACEAEgByAALQADaiEHDAELCwNAIAcgDE0EQCAHIAYgBUFAayAIEAJBAnRqIgAvAQA7AAAgBUFAayAALQACEAEgByAALQADaiEHDAELCwJAIAcgAk8NACAHIAYgBUFAayAIEAIiAEECdGoiAi0AADoAACACLQADQQFGBEAgBUFAayACLQACEAEMAQsgBSgCREEfSw0AIAVBQGsgBiAAQQJ0ai0AAhABIAUoAkRBIUkNACAFQSA2AkQLIA5BfWohAgNAQQAgBCACSSAFQShqEAQbBEAgBCAGIAVBKGogCBACQQJ0aiIALwEAOwAAIAVBKGogAC0AAhABIAQgAC0AA2oiACAGIAVBKGogCBACQQJ0aiIELwEAOwAAIAVBKGogBC0AAhABIAAgBC0AA2ohBAwBBSAOQX5qIQIDQCAFQShqEAQgBCACS3JFBEAgBCAGIAVBKGogCBACQQJ0aiIALwEAOwAAIAVBKGogAC0AAhABIAQgAC0AA2ohBAwBCwsDQCAEIAJNBEAgBCAGIAVBKGogCBACQQJ0aiIALwEAOwAAIAVBKGogAC0AAhABIAQgAC0AA2ohBAwBCwsCQCAEIA5PDQAgBCAGIAVBKGogCBACIgBBAnRqIgItAAA6AAAgAi0AA0EBRgRAIAVBKGogAi0AAhABDAELIAUoAixBH0sNACAFQShqIAYgAEECdGotAAIQASAFKAIsQSFJDQAgBUEgNgIsCwNAQQAgAyAQSSAFQRBqEAQbBEAgAyAGIAVBEGogCBACQQJ0aiIALwEAOwAAIAVBEGogAC0AAhABIAMgAC0AA2oiACAGIAVBEGogCBACQQJ0aiICLwEAOwAAIAVBEGogAi0AAhABIAAgAi0AA2ohAwwBBSAPQX5qIQIDQCAFQRBqEAQgAyACS3JFBEAgAyAGIAVBEGogCBACQQJ0aiIALwEAOwAAIAVBEGogAC0AAhABIAMgAC0AA2ohAwwBCwsDQCADIAJNBEAgAyAGIAVBEGogCBACQQJ0aiIALwEAOwAAIAVBEGogAC0AAhABIAMgAC0AA2ohAwwBCwsCQCADIA9PDQAgAyAGIAVBEGogCBACIgBBAnRqIgItAAA6AAAgAi0AA0EBRgRAIAVBEGogAi0AAhABDAELIAUoAhRBH0sNACAFQRBqIAYgAEECdGotAAIQASAFKAIUQSFJDQAgBUEgNgIUCyABQWwgBUHYAGoQCiAFQUBrEApxIAVBKGoQCnEgBUEQahAKcRshCwwJCwAACwALAAALAAsAAAsACwAACwALQWwhCwsgBUHwAGokACALC7UEAQ5/IwBBEGsiBiQAIAZBBGogABAOQVQhBQJAIARB3AtJDQAgBi0ABCEHIANB8ARqQQBB7AAQECEIIAdBDEsNACADQdwJaiIJIAggBkEIaiAGQQxqIAEgAhAxIhAQA0UEQCAGKAIMIgQgB0sNASADQdwFaiEPIANBpAVqIREgAEEEaiESIANBqAVqIQEgBCEFA0AgBSICQX9qIQUgCCACQQJ0aigCAEUNAAsgAkEBaiEOQQEhBQNAIAUgDk9FBEAgCCAFQQJ0IgtqKAIAIQwgASALaiAKNgIAIAVBAWohBSAKIAxqIQoMAQsLIAEgCjYCAEEAIQUgBigCCCELA0AgBSALRkUEQCABIAUgCWotAAAiDEECdGoiDSANKAIAIg1BAWo2AgAgDyANQQF0aiINIAw6AAEgDSAFOgAAIAVBAWohBQwBCwtBACEBIANBADYCqAUgBEF/cyAHaiEJQQEhBQNAIAUgDk9FBEAgCCAFQQJ0IgtqKAIAIQwgAyALaiABNgIAIAwgBSAJanQgAWohASAFQQFqIQUMAQsLIAcgBEEBaiIBIAJrIgRrQQFqIQgDQEEBIQUgBCAIT0UEQANAIAUgDk9FBEAgBUECdCIJIAMgBEE0bGpqIAMgCWooAgAgBHY2AgAgBUEBaiEFDAELCyAEQQFqIQQMAQsLIBIgByAPIAogESADIAIgARBkIAZBAToABSAGIAc6AAYgACAGKAIENgIACyAQIQULIAZBEGokACAFC8ENAQt/IwBB8ABrIgUkAEFsIQkCQCADQQpJDQAgAi8AACEKIAIvAAIhDCACLwAEIQYgBUEIaiAEEA4CQCADIAYgCiAMampBBmoiDUkNACAFLQAKIQcgBUHYAGogAkEGaiICIAoQBiIJEAMNASAFQUBrIAIgCmoiAiAMEAYiCRADDQEgBUEoaiACIAxqIgIgBhAGIgkQAw0BIAVBEGogAiAGaiADIA1rEAYiCRADDQEgACABaiIOQX1qIQ8gBEEEaiEGQQEhCSAAIAFBA2pBAnYiAmoiCiACaiIMIAJqIg0hAyAMIQQgCiECA0AgCSADIA9JcQRAIAYgBUHYAGogBxACQQF0aiIILQAAIQsgBUHYAGogCC0AARABIAAgCzoAACAGIAVBQGsgBxACQQF0aiIILQAAIQsgBUFAayAILQABEAEgAiALOgAAIAYgBUEoaiAHEAJBAXRqIggtAAAhCyAFQShqIAgtAAEQASAEIAs6AAAgBiAFQRBqIAcQAkEBdGoiCC0AACELIAVBEGogCC0AARABIAMgCzoAACAGIAVB2ABqIAcQAkEBdGoiCC0AACELIAVB2ABqIAgtAAEQASAAIAs6AAEgBiAFQUBrIAcQAkEBdGoiCC0AACELIAVBQGsgCC0AARABIAIgCzoAASAGIAVBKGogBxACQQF0aiIILQAAIQsgBUEoaiAILQABEAEgBCALOgABIAYgBUEQaiAHEAJBAXRqIggtAAAhCyAFQRBqIAgtAAEQASADIAs6AAEgA0ECaiEDIARBAmohBCACQQJqIQIgAEECaiEAIAkgBUHYAGoQDUVxIAVBQGsQDUVxIAVBKGoQDUVxIAVBEGoQDUVxIQkMAQsLIAQgDUsgAiAMS3INAEFsIQkgACAKSw0BIApBfWohCQNAIAVB2ABqEAQgACAJT3JFBEAgBiAFQdgAaiAHEAJBAXRqIggtAAAhCyAFQdgAaiAILQABEAEgACALOgAAIAYgBUHYAGogBxACQQF0aiIILQAAIQsgBUHYAGogCC0AARABIAAgCzoAASAAQQJqIQAMAQsLA0AgBUHYAGoQBCAAIApPckUEQCAGIAVB2ABqIAcQAkEBdGoiCS0AACEIIAVB2ABqIAktAAEQASAAIAg6AAAgAEEBaiEADAELCwNAIAAgCkkEQCAGIAVB2ABqIAcQAkEBdGoiCS0AACEIIAVB2ABqIAktAAEQASAAIAg6AAAgAEEBaiEADAELCyAMQX1qIQADQCAFQUBrEAQgAiAAT3JFBEAgBiAFQUBrIAcQAkEBdGoiCi0AACEJIAVBQGsgCi0AARABIAIgCToAACAGIAVBQGsgBxACQQF0aiIKLQAAIQkgBUFAayAKLQABEAEgAiAJOgABIAJBAmohAgwBCwsDQCAFQUBrEAQgAiAMT3JFBEAgBiAFQUBrIAcQAkEBdGoiAC0AACEKIAVBQGsgAC0AARABIAIgCjoAACACQQFqIQIMAQsLA0AgAiAMSQRAIAYgBUFAayAHEAJBAXRqIgAtAAAhCiAFQUBrIAAtAAEQASACIAo6AAAgAkEBaiECDAELCyANQX1qIQADQCAFQShqEAQgBCAAT3JFBEAgBiAFQShqIAcQAkEBdGoiAi0AACEKIAVBKGogAi0AARABIAQgCjoAACAGIAVBKGogBxACQQF0aiICLQAAIQogBUEoaiACLQABEAEgBCAKOgABIARBAmohBAwBCwsDQCAFQShqEAQgBCANT3JFBEAgBiAFQShqIAcQAkEBdGoiAC0AACECIAVBKGogAC0AARABIAQgAjoAACAEQQFqIQQMAQsLA0AgBCANSQRAIAYgBUEoaiAHEAJBAXRqIgAtAAAhAiAFQShqIAAtAAEQASAEIAI6AAAgBEEBaiEEDAELCwNAIAVBEGoQBCADIA9PckUEQCAGIAVBEGogBxACQQF0aiIALQAAIQIgBUEQaiAALQABEAEgAyACOgAAIAYgBUEQaiAHEAJBAXRqIgAtAAAhAiAFQRBqIAAtAAEQASADIAI6AAEgA0ECaiEDDAELCwNAIAVBEGoQBCADIA5PckUEQCAGIAVBEGogBxACQQF0aiIALQAAIQIgBUEQaiAALQABEAEgAyACOgAAIANBAWohAwwBCwsDQCADIA5JBEAgBiAFQRBqIAcQAkEBdGoiAC0AACECIAVBEGogAC0AARABIAMgAjoAACADQQFqIQMMAQsLIAFBbCAFQdgAahAKIAVBQGsQCnEgBUEoahAKcSAFQRBqEApxGyEJDAELQWwhCQsgBUHwAGokACAJC8oCAQR/IwBBIGsiBSQAIAUgBBAOIAUtAAIhByAFQQhqIAIgAxAGIgIQA0UEQCAEQQRqIQIgACABaiIDQX1qIQQDQCAFQQhqEAQgACAET3JFBEAgAiAFQQhqIAcQAkEBdGoiBi0AACEIIAVBCGogBi0AARABIAAgCDoAACACIAVBCGogBxACQQF0aiIGLQAAIQggBUEIaiAGLQABEAEgACAIOgABIABBAmohAAwBCwsDQCAFQQhqEAQgACADT3JFBEAgAiAFQQhqIAcQAkEBdGoiBC0AACEGIAVBCGogBC0AARABIAAgBjoAACAAQQFqIQAMAQsLA0AgACADT0UEQCACIAVBCGogBxACQQF0aiIELQAAIQYgBUEIaiAELQABEAEgACAGOgAAIABBAWohAAwBCwsgAUFsIAVBCGoQChshAgsgBUEgaiQAIAILtgMBCX8jAEEQayIGJAAgBkEANgIMIAZBADYCCEFUIQQCQAJAIANBQGsiDCADIAZBCGogBkEMaiABIAIQMSICEAMNACAGQQRqIAAQDiAGKAIMIgcgBi0ABEEBaksNASAAQQRqIQogBkEAOgAFIAYgBzoABiAAIAYoAgQ2AgAgB0EBaiEJQQEhBANAIAQgCUkEQCADIARBAnRqIgEoAgAhACABIAU2AgAgACAEQX9qdCAFaiEFIARBAWohBAwBCwsgB0EBaiEHQQAhBSAGKAIIIQkDQCAFIAlGDQEgAyAFIAxqLQAAIgRBAnRqIgBBASAEdEEBdSILIAAoAgAiAWoiADYCACAHIARrIQhBACEEAkAgC0EDTQRAA0AgBCALRg0CIAogASAEakEBdGoiACAIOgABIAAgBToAACAEQQFqIQQMAAALAAsDQCABIABPDQEgCiABQQF0aiIEIAg6AAEgBCAFOgAAIAQgCDoAAyAEIAU6AAIgBCAIOgAFIAQgBToABCAEIAg6AAcgBCAFOgAGIAFBBGohAQwAAAsACyAFQQFqIQUMAAALAAsgAiEECyAGQRBqJAAgBAutAQECfwJAQYQgKAIAIABHIAAoAgBBAXYiAyABa0F4aiICQXhxQQhHcgR/IAIFIAMQJ0UNASACQQhqC0EQSQ0AIAAgACgCACICQQFxIAAgAWpBD2pBeHEiASAAa0EBdHI2AgAgASAANgIEIAEgASgCAEEBcSAAIAJBAXZqIAFrIgJBAXRyNgIAQYQgIAEgAkH/////B3FqQQRqQYQgKAIAIABGGyABNgIAIAEQJQsLygIBBX8CQAJAAkAgAEEIIABBCEsbZ0EfcyAAaUEBR2oiAUEESSAAIAF2cg0AIAFBAnRB/B5qKAIAIgJFDQADQCACQXhqIgMoAgBBAXZBeGoiBSAATwRAIAIgBUEIIAVBCEsbZ0Efc0ECdEGAH2oiASgCAEYEQCABIAIoAgQ2AgALDAMLIARBHksNASAEQQFqIQQgAigCBCICDQALC0EAIQMgAUEgTw0BA0AgAUECdEGAH2ooAgAiAkUEQCABQR5LIQIgAUEBaiEBIAJFDQEMAwsLIAIgAkF4aiIDKAIAQQF2QXhqIgFBCCABQQhLG2dBH3NBAnRBgB9qIgEoAgBGBEAgASACKAIENgIACwsgAigCACIBBEAgASACKAIENgIECyACKAIEIgEEQCABIAIoAgA2AgALIAMgAygCAEEBcjYCACADIAAQNwsgAwvhCwINfwV+IwBB8ABrIgckACAHIAAoAvDhASIINgJcIAEgAmohDSAIIAAoAoDiAWohDwJAAkAgBUUEQCABIQQMAQsgACgCxOABIRAgACgCwOABIREgACgCvOABIQ4gAEEBNgKM4QFBACEIA0AgCEEDRwRAIAcgCEECdCICaiAAIAJqQazQAWooAgA2AkQgCEEBaiEIDAELC0FsIQwgB0EYaiADIAQQBhADDQEgB0EsaiAHQRhqIAAoAgAQEyAHQTRqIAdBGGogACgCCBATIAdBPGogB0EYaiAAKAIEEBMgDUFgaiESIAEhBEEAIQwDQCAHKAIwIAcoAixBA3RqKQIAIhRCEIinQf8BcSEIIAcoAkAgBygCPEEDdGopAgAiFUIQiKdB/wFxIQsgBygCOCAHKAI0QQN0aikCACIWQiCIpyEJIBVCIIghFyAUQiCIpyECAkAgFkIQiKdB/wFxIgNBAk8EQAJAIAZFIANBGUlyRQRAIAkgB0EYaiADQSAgBygCHGsiCiAKIANLGyIKEAUgAyAKayIDdGohCSAHQRhqEAQaIANFDQEgB0EYaiADEAUgCWohCQwBCyAHQRhqIAMQBSAJaiEJIAdBGGoQBBoLIAcpAkQhGCAHIAk2AkQgByAYNwNIDAELAkAgA0UEQCACBEAgBygCRCEJDAMLIAcoAkghCQwBCwJAAkAgB0EYakEBEAUgCSACRWpqIgNBA0YEQCAHKAJEQX9qIgMgA0VqIQkMAQsgA0ECdCAHaigCRCIJIAlFaiEJIANBAUYNAQsgByAHKAJINgJMCwsgByAHKAJENgJIIAcgCTYCRAsgF6chAyALBEAgB0EYaiALEAUgA2ohAwsgCCALakEUTwRAIAdBGGoQBBoLIAgEQCAHQRhqIAgQBSACaiECCyAHQRhqEAQaIAcgB0EYaiAUQhiIp0H/AXEQCCAUp0H//wNxajYCLCAHIAdBGGogFUIYiKdB/wFxEAggFadB//8DcWo2AjwgB0EYahAEGiAHIAdBGGogFkIYiKdB/wFxEAggFqdB//8DcWo2AjQgByACNgJgIAcoAlwhCiAHIAk2AmggByADNgJkAkACQAJAIAQgAiADaiILaiASSw0AIAIgCmoiEyAPSw0AIA0gBGsgC0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdB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IAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY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wOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEE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”;var zd=”display-p3″,Vd=”display-p3-linear”;var jC={…Ge.spaces[ct],outputColorSpaceConfig:{drawingBufferColorSpace:ct,toneMappingMode:”extended”}};var Jh=new WeakMap,jh=0,Zh,jt=class extends gi{constructor(e){super(e),this.transcoderPath=””,this.transcoderBinary=null,this.transcoderPending=null,this.workerPool=new Tc,this.workerSourceURL=””,this.workerConfig=null,typeof MSC_TRANSCODER{let o=jt.BasisWorker.toString(),c=[“/* constants */”,”let _EngineFormat = “+JSON.stringify(jt.EngineFormat),”let _EngineType = “+JSON.stringify(jt.EngineType),”let _TranscoderFormat = “+JSON.stringify(jt.TranscoderFormat),”let _BasisFormat = “+JSON.stringify(jt.BasisFormat),”/* basis_transcoder.js */”,r,”/* worker */”,o.substring(o.indexOf(“{“)+1,o.lastIndexOf(“}”))].join(`
`);this.workerSourceURL=URL.createObjectURL(new Blob([c])),this.transcoderBinary=a,this.workerPool.setWorkerCreator(()=>{let l=new Worker(this.workerSourceURL),h=this.transcoderBinary.slice(0);return l.postMessage({type:”init”,config:this.workerConfig,transcoderBinary:h},[h]),l})}),jh>0&&console.warn(“THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues. Use a single KTX2Loader instance, or call .dispose() on old instances.”),jh++}return this.transcoderPending}load(e,t,i,s){if(this.workerConfig===null)throw new Error(“THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.”);let r=new Ui(this.manager);r.setPath(this.path),r.setCrossOrigin(this.crossOrigin),r.setWithCredentials(this.withCredentials),r.setResponseType(“arraybuffer”),r.load(e,a=>{this.parse(a,t,s)},i,s)}parse(e,t,i){if(this.workerConfig===null)throw new Error(“THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.”);if(Jh.has(e))return Jh.get(e).promise.then(t).catch(i);this._createTexture(e).then(s=>t?t(s):null).catch(i)}_createTextureFrom(e,t){let{type:i,error:s,data:{faces:r,width:a,height:o,format:c,type:l,dfdFlags:h}}=e;if(i===”error”)return Promise.reject(s);let u;if(t.faceCount===6)u=new ha(r,c,l);else{let f=r[0].mipmaps;u=t.layerCount>1?new la(f,a,o,t.layerCount,c,l):new Nn(f,a,o,c,l)}return u.minFilter=r[0].mipmaps.length===1?ze:Yt,u.magFilter=ze,u.generateMipmaps=!1,u.needsUpdate=!0,u.colorSpace=Rp(t),u.premultiplyAlpha=!!(h&1),u}async _createTexture(e,t={}){let i=Gd(new Uint8Array(e)),s=i.vkFormat===1000066e3&&i.dataFormatDescriptor[0].colorModel===167;if(!(i.vkFormat===0||s&&!this.workerConfig.astcHDRSupported))return iy(i);let a=t,o=this.init().then(()=>this.workerPool.postMessage({type:”transcode”,buffer:e,taskConfig:a},[e])).then(c=>this._createTextureFrom(c.data,i));return Jh.set(e,{promise:o}),o}dispose(){this.workerPool.dispose(),this.workerSourceURL&&URL.revokeObjectURL(this.workerSourceURL),jh–}};jt.BasisFormat={ETC1S:0,UASTC:1,UASTC_HDR:2};jt.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,BC6H:22,RGB_HALF:24,RGBA_HALF:25};jt.EngineFormat={RGBAFormat:nt,RGBA_ASTC_4x4_Format:xn,RGB_BPTC_UNSIGNED_Format:Er,RGBA_BPTC_Format:Wn,RGBA_ETC2_EAC_Format:Cs,RGBA_PVRTC_4BPPV1_Format:zn,RGBA_S3TC_DXT5_Format:Es,RGB_ETC1_Format:yr,RGB_ETC2_Format:Ss,RGB_PVRTC_4BPPV1_Format:_r,RGBA_S3TC_DXT1_Format:gn};jt.EngineType={UnsignedByteType:Qe,HalfFloatType:rt,FloatType:mt};jt.BasisWorker=function(){let n,e,t,i=_EngineFormat,s=_EngineType,r=_TranscoderFormat,a=_BasisFormat;self.addEventListener(“message”,function(m){let g=m.data;switch(g.type){case”init”:n=g.config,o(g.transcoderBinary);break;case”transcode”:e.then(()=>{try{let{faces:A,buffers:d,width:S,height:v,hasAlpha:b,format:M,type:I,dfdFlags:R}=c(g.buffer);self.postMessage({type:”transcode”,id:g.id,data:{faces:A,width:S,height:v,hasAlpha:b,format:M,type:I,dfdFlags:R}},d)}catch(A){console.error(A),self.postMessage({type:”error”,id:g.id,error:A.message})}});break}});function o(m){e=new Promise(g=>{t={wasmBinary:m,onRuntimeInitialized:g},BASIS(t)}).then(()=>{t.initializeBasis(),t.KTX2File===void 0&&console.warn(“THREE.KTX2Loader: Please update Basis Universal transcoder.”)})}function c(m){let g=new t.KTX2File(new Uint8Array(m));function A(){g.close(),g.delete()}if(!g.isValid())throw A(),new Error(“THREE.KTX2Loader: Invalid or unsupported .ktx2 file”);let d;if(g.isUASTC())d=a.UASTC;else if(g.isETC1S())d=a.ETC1S;else if(g.isHDR())d=a.UASTC_HDR;else throw new Error(“THREE.KTX2Loader: Unknown Basis encoding”);let S=g.getWidth(),v=g.getHeight(),b=g.getLayers()||1,M=g.getLevels(),I=g.getFaces(),R=g.getHasAlpha(),B=g.getDFDFlags(),{transcoderFormat:E,engineFormat:_,engineType:T}=u(d,S,v,R);if(!S||!v||!M)throw A(),new Error(“THREE.KTX2Loader: Invalid texture”);if(!g.startTranscoding())throw A(),new Error(“THREE.KTX2Loader: .startTranscoding failed”);let U=[],Q=[];for(let N=0;N<I;N++){let V=[];for(let k=0;k<M;k++){let j=[],z,ie;for(let ae=0;ae1?(z=fe.origWidth,ie=fe.origHeight):(z=fe.width,ie=fe.height);let Re=new Uint8Array(g.getImageTranscodedSizeInBytes(k,ae,0,E)),Je=g.transcodeImage(Re,k,ae,N,E,0,-1,-1);if(T===s.HalfFloatType&&(Re=new Uint16Array(Re.buffer,Re.byteOffset,Re.byteLength/Uint16Array.BYTES_PER_ELEMENT)),!Je)throw A(),new Error(“THREE.KTX2Loader: .transcodeImage failed.”);j.push(Re)}let se=p(j);V.push({data:se,width:z,height:ie}),Q.push(se.buffer)}U.push({mipmaps:V,width:S,height:v,format:_,type:T})}return A(),{faces:U,buffers:Q,width:S,height:v,hasAlpha:R,dfdFlags:B,format:_,type:T}}let l=[{if:”astcSupported”,basisFormat:[a.UASTC],transcoderFormat:[r.ASTC_4x4,r.ASTC_4x4],engineFormat:[i.RGBA_ASTC_4x4_Format,i.RGBA_ASTC_4x4_Format],engineType:[s.UnsignedByteType],priorityETC1S:1/0,priorityUASTC:1,needsPowerOfTwo:!1},{if:”bptcSupported”,basisFormat:[a.ETC1S,a.UASTC],transcoderFormat:[r.BC7_M5,r.BC7_M5],engineFormat:[i.RGBA_BPTC_Format,i.RGBA_BPTC_Format],engineType:[s.UnsignedByteType],priorityETC1S:3,priorityUASTC:2,needsPowerOfTwo:!1},{if:”dxtSupported”,basisFormat:[a.ETC1S,a.UASTC],transcoderFormat:[r.BC1,r.BC3],engineFormat:[i.RGBA_S3TC_DXT1_Format,i.RGBA_S3TC_DXT5_Format],engineType:[s.UnsignedByteType],priorityETC1S:4,priorityUASTC:5,needsPowerOfTwo:!1},{if:”etc2Supported”,basisFormat:[a.ETC1S,a.UASTC],transcoderFormat:[r.ETC1,r.ETC2],engineFormat:[i.RGB_ETC2_Format,i.RGBA_ETC2_EAC_Format],engineType:[s.UnsignedByteType],priorityETC1S:1,priorityUASTC:3,needsPowerOfTwo:!1},{if:”etc1Supported”,basisFormat:[a.ETC1S,a.UASTC],transcoderFormat:[r.ETC1],engineFormat:[i.RGB_ETC1_Format],engineType:[s.UnsignedByteType],priorityETC1S:2,priorityUASTC:4,needsPowerOfTwo:!1},{if:”pvrtcSupported”,basisFormat:[a.ETC1S,a.UASTC],transcoderFormat:[r.PVRTC1_4_RGB,r.PVRTC1_4_RGBA],engineFormat:[i.RGB_PVRTC_4BPPV1_Format,i.RGBA_PVRTC_4BPPV1_Format],engineType:[s.UnsignedByteType],priorityETC1S:5,priorityUASTC:6,needsPowerOfTwo:!0},{if:”bptcSupported”,basisFormat:[a.UASTC_HDR],transcoderFormat:[r.BC6H],engineFormat:[i.RGB_BPTC_UNSIGNED_Format],engineType:[s.HalfFloatType],priorityHDR:1,needsPowerOfTwo:!1},{basisFormat:[a.ETC1S,a.UASTC],transcoderFormat:[r.RGBA32,r.RGBA32],engineFormat:[i.RGBAFormat,i.RGBAFormat],engineType:[s.UnsignedByteType,s.UnsignedByteType],priorityETC1S:100,priorityUASTC:100,needsPowerOfTwo:!1},{basisFormat:[a.UASTC_HDR],transcoderFormat:[r.RGBA_HALF],engineFormat:[i.RGBAFormat],engineType:[s.HalfFloatType],priorityHDR:100,needsPowerOfTwo:!1}],h={[a.ETC1S]:l.filter(m=>m.basisFormat.includes(a.ETC1S)).sort((m,g)=>m.priorityUASTC-g.priorityUASTC),[a.UASTC]:l.filter(m=>m.basisFormat.includes(a.UASTC)).sort((m,g)=>m.priorityUASTC-g.priorityUASTC),[a.UASTC_HDR]:l.filter(m=>m.basisFormat.includes(a.UASTC_HDR)).sort((m,g)=>m.priorityHDR-g.priorityHDR)};function u(m,g,A,d){let S=h[m];for(let v=0;v<S.length;v++){let b=S[v];if(b.if&&!n[b.if]||!b.basisFormat.includes(m)||d&&b.transcoderFormat.length<2||b.needsPowerOfTwo&&!(f(g)&&f(A)))continue;let M=b.transcoderFormat[d?1:0],I=b.engineFormat[d?1:0],R=b.engineType[0];return{transcoderFormat:M,engineFormat:I,engineType:R}}throw new Error("THREE.KTX2Loader: Failed to identify transcoding target.")}function f(m){return m<=2?!0:(m&m-1)===0&&m!==0}function p(m){if(m.length===1)return m[0];let g=0;for(let S=0;S<m.length;S++){let v=m[S];g+=v.byteLength}let A=new Uint8Array(g),d=0;for(let S=0;S{let o=new wc;await o.init(),a(o)})),t=await Zh);let i=[];for(let a=0;a>a),c=Math.max(1,n.pixelHeight>>a),l=n.pixelDepth?Math.max(1,n.pixelDepth>>a):0,h=n.levels[a],u;if(n.supercompressionScheme===0)u=h.levelData;else if(n.supercompressionScheme===2)u=t.decode(h.levelData,h.uncompressedByteLength);else throw new Error(“THREE.KTX2Loader: Unsupported supercompressionScheme.”);let f;Or[e]===mt?f=new Float32Array(u.buffer,u.byteOffset,u.byteLength/Float32Array.BYTES_PER_ELEMENT):Or[e]===rt?f=new Uint16Array(u.buffer,u.byteOffset,u.byteLength/Uint16Array.BYTES_PER_ELEMENT):Or[e]===xr||Or[e]===br?f=new Uint32Array(u.buffer,u.byteOffset,u.byteLength/Uint32Array.BYTES_PER_ELEMENT):f=u,i.push({data:f,width:o,height:c,depth:l})}let s=n.levelCount===0||i.length>1,r;if(ty.has($h[e]))r=n.pixelDepth===0?new zi(i[0].data,n.pixelWidth,n.pixelHeight):new sr(i[0].data,n.pixelWidth,n.pixelHeight,n.pixelDepth),r.minFilter=s?Ar:$e,r.magFilter=$e,r.generateMipmaps=n.levelCount===0;else{if(n.pixelDepth>0)throw new Error(“THREE.KTX2Loader: Unsupported pixelDepth.”);r=new Nn(i,n.pixelWidth,n.pixelHeight),r.minFilter=s?Yt:ze,r.magFilter=ze}return r.mipmaps=i,r.type=Or[e],r.format=$h[e],r.colorSpace=Rp(n),r.needsUpdate=!0,Promise.resolve(r)}function Rp(n){let e=n.dataFormatDescriptor[0];return e.colorPrimaries===1?e.transferFunction===2?ct:Mt:e.colorPrimaries===10?e.transferFunction===2?zd:Vd:e.colorPrimaries===0?oi:(console.warn(`THREE.KTX2Loader: Unsupported color primaries, “${e.colorPrimaries}”`),oi)}var Rc={easeInQuad:function(n,e,t,i){return t*(n/=i)*n+e},easeOutQuad:function(n,e,t,i){return-t*(n/=i)*(n-2)+e},easeInOutQuad:function(n,e,t,i){return(n/=i/2)<1?t/2*n*n+e:-t/2*(–n*(n-2)-1)+e},easeInCubic:function(n,e,t,i){return t*(n/=i)*n*n+e},easeOutCubic:function(n,e,t,i){return t*((n=n/i-1)*n*n+1)+e},easeInOutCubic:function(n,e,t,i){return(n/=i/2)<1?t/2*n*n*n+e:t/2*((n-=2)*n*n+2)+e},easeInQuart:function(n,e,t,i){return t*(n/=i)*n*n*n+e},easeOutQuart:function(n,e,t,i){return-t*((n=n/i-1)*n*n*n-1)+e},easeInOutQuart:function(n,e,t,i){return(n/=i/2)<1?t/2*n*n*n*n+e:-t/2*((n-=2)*n*n*n-2)+e},easeInQuint:function(n,e,t,i){return t*(n/=i)*n*n*n*n+e},easeOutQuint:function(n,e,t,i){return t*((n=n/i-1)*n*n*n*n+1)+e},easeInOutQuint:function(n,e,t,i){return(n/=i/2)<1?t/2*n*n*n*n*n+e:t/2*((n-=2)*n*n*n*n+2)+e},easeInSine:function(n,e,t,i){return-t*Math.cos(n/i*(Math.PI/2))+t+e},easeOutSine:function(n,e,t,i){return t*Math.sin(n/i*(Math.PI/2))+e},easeInOutSine:function(n,e,t,i){return-t/2*(Math.cos(Math.PI*n/i)-1)+e},easeInExpo:function(n,e,t,i){return n==0?e:t*Math.pow(2,10*(n/i-1))+e},easeOutExpo:function(n,e,t,i){return n==i?e+t:t*(-Math.pow(2,-10*n/i)+1)+e},easeInOutExpo:function(n,e,t,i){return n==0?e:n==i?e+t:(n/=i/2)<1?t/2*Math.pow(2,10*(n-1))+e:t/2*(-Math.pow(2,-10*–n)+2)+e},easeInCirc:function(n,e,t,i){return-t*(Math.sqrt(1-(n/=i)*n)-1)+e},easeOutCirc:function(n,e,t,i){return t*Math.sqrt(1-(n=n/i-1)*n)+e},easeInOutCirc:function(n,e,t,i){return(n/=i/2)<1?-t/2*(Math.sqrt(1-n*n)-1)+e:t/2*(Math.sqrt(1-(n-=2)*n)+1)+e},easeInElastic:function(n,e,t,i){var a=1.70158,s=0,r=t;if(n==0)return e;if((n/=i)==1)return e+t;if(s||(s=i*.3),r<Math.abs(t)){r=t;var a=s/4}else var a=s/(2*Math.PI)*Math.asin(t/r);return-(r*Math.pow(2,10*(n-=1))*Math.sin((n*i-a)*(2*Math.PI)/s))+e},easeOutElastic:function(n,e,t,i){var a=1.70158,s=0,r=t;if(n==0)return e;if((n/=i)==1)return e+t;if(s||(s=i*.3),r<Math.abs(t)){r=t;var a=s/4}else var a=s/(2*Math.PI)*Math.asin(t/r);return r*Math.pow(2,-10*n)*Math.sin((n*i-a)*(2*Math.PI)/s)+t+e},easeInOutElastic:function(n,e,t,i){var a=1.70158,s=0,r=t;if(n==0)return e;if((n/=i/2)==2)return e+t;if(s||(s=i*(.3*1.5)),r<Math.abs(t)){r=t;var a=s/4}else var a=s/(2*Math.PI)*Math.asin(t/r);return n<1?-.5*(r*Math.pow(2,10*(n-=1))*Math.sin((n*i-a)*(2*Math.PI)/s))+e:r*Math.pow(2,-10*(n-=1))*Math.sin((n*i-a)*(2*Math.PI)/s)*.5+t+e},easeInBack:function(n,e,t,i,s){return s==null&&(s=1.70158),t*(n/=i)*n*((s+1)*n-s)+e},easeOutBack:function(n,e,t,i,s){return s==null&&(s=1.70158),t*((n=n/i-1)*n*((s+1)*n+s)+1)+e},easeInOutBack:function(n,e,t,i,s){return s==null&&(s=1.70158),(n/=i/2)<1?t/2*(n*n*(((s*=1.525)+1)*n-s))+e:t/2*((n-=2)*n*(((s*=1.525)+1)*n+s)+2)+e},easeInBounce:function(n,e,t,i){return t-this.easeOutBounce(i-n,0,t,i)+e},easeOutBounce:function(n,e,t,i){return(n/=i)<1/2.75?t*(7.5625*n*n)+e:n<2/2.75?t*(7.5625*(n-=1.5/2.75)*n+.75)+e:n<2.5/2.75?t*(7.5625*(n-=2.25/2.75)*n+.9375)+e:t*(7.5625*(n-=2.625/2.75)*n+.984375)+e},easeInOutBounce:function(n,e,t,i){return n{new IntersectionObserver(e=>{ry=e[0].isIntersecting},{threshold:0}).observe(Lc)},oy=n=>{let e={q:t=>t.position.x-=wt,e:t=>t.position.x+=wt,w:t=>t.position.y+=wt,s:t=>t.position.y-=wt,a:t=>t.position.z-=wt,d:t=>t.position.z+=wt,r:t=>t.scale.multiplyScalar(1+wt/100),f:t=>t.scale.multiplyScalar(1-wt/100)};window.addEventListener(“keydown”,t=>{if(Sn.photo){let i=ji[Sn.photo].mesh,s=e[t.key.toLowerCase()];if(!s)return;s(i),Bp()}else console.log(“No photo to move”)})},bi=()=>{let n={target:Et.target,position:dt.position};console.log(`u{1F3A5} Camera change ${Sn.camera.from} (${Sn.camera.progress}) `,`
`,JSON.stringify(n,!1,2))},Bp=()=>{let n=ji[Sn.photo].mesh,e=ji[Sn.photo].width*n.scale.x,t={[`${Sn.photo}`]:{position:{x:n.position.x,y:n.position.y,z:n.position.z},width:e}};console.log(“u{1F39E}uFE0F Photo change”,`
`,JSON.stringify(t,!1,2))},cy=()=>{let n={u:()=>{dt.position.x-=wt,bi()},i:()=>{dt.position.y+=wt,bi()},o:()=>{dt.position.z+=wt,bi()},U:()=>{dt.position.x+=wt,bi()},I:()=>{dt.position.y-=wt,bi()},O:()=>{dt.position.z-=wt,bi()},j:()=>{Et.target.x-=wt,Et.update(),bi()},k:()=>{Et.target.y+=wt,Et.update(),bi()},l:()=>{Et.target.z+=wt,Et.update(),bi()},J:()=>{Et.target.x+=wt,Et.update(),bi()},K:()=>{Et.target.y-=wt,Et.update(),bi()},L:()=>{Et.target.z-=wt,Et.update(),bi()}};window.addEventListener(“keydown”,e=>{if(e.ctrlKey||e.metaKey||e.altKey)return;let t=e.shiftKey?e.key.toUpperCase():e.key.toLowerCase(),i=n[e.shiftKey?e.key:t];i&&(e.preventDefault(),i())})},Dp=1e3,ly=60,Fp=new Ce(“#f2f8ff”),Dc=.4,Fs,Ls,nu,vn,dt,li,Et,tu,su={},Lp=!1,Pc=!1,iu=!1,Pp=()=>{let n=Lc.getBoundingClientRect();Fs=n.width,Ls=n.height,nu=Math.min(window.devicePixelRatio||1,2)},hy=async()=>{Fc=document.querySelector(“.js-bridge-caption”),Pp(),vn=new na,dt=new Tt(ly,Fs/Ls,1,1e5),vn.add(dt),dt.position.set(0,0,Dp*3),li=new uc({antialias:!0,logarithmicDepthBuffer:!0}),li.setSize(Fs,Ls),li.setPixelRatio(nu),li.outputColorSpace=ct,li.toneMapping=pr,li.toneMappingExposure=1.5,Lc.appendChild(li.domElement),ay(),Et=new pc(dt,li.domElement),Et.enabled=!1,vn.background=Fp;let n=new Sc(vn,dt),e=new Ic(vn,dt,Fs,Ls);e.configuration.aoRadius=window.innerWidth<768?5:10,e.configuration.intensity=3,e.configuration.aoSamples=window.innerWidth{bi()}),oy(),cy())},uy=async()=>new Promise((n,e)=>{new vc().load(“https://interactives.inquirer.com/projects/2026/07/ben-franklin-bridge/1782915217745/assets/sky.hdr”,t=>{let i=new Dr(li);vn.environment=i.fromEquirectangular(t).texture,vn.background=Fp,t.dispose(),i.dispose(),n()},void 0,e)}),fy=async()=>{let n=window.innerWidth{let i=new xc;i.setMeshoptDecoder(Qd),i.setKTX2Loader(jt),i.load(n,s=>{let r=s.scene,a=new Gt().setFromObject(r),o=a.getCenter(new D),c=a.getSize(new D);r.position.sub(o);let l=Dp/Math.max(c.x,c.y,c.z);r.scale.setScalar(l),r.rotation.y=Math.PI/2,vn.add(r),r.updateMatrixWorld();let h=new Gt().setFromObject(r),u=h.getCenter(new D),f=h.getSize(new D);r.position.sub(u),r.traverse(g=>{g.isMesh&&g.name===”cross_section.001″&&(g.material.polygonOffset=!0,g.material.polygonOffsetFactor=-1,g.material.polygonOffsetUnits=-4)});let p=Math.max(f.x,f.y,f.z)*10;dt.near=5,dt.far=p*20,dt.updateProjectionMatrix();let m=Bc.default;Et.target.set(m.target.x,m.target.y,m.target.z),dt.position.set(m.position.x,m.position.y,m.position.z),Et.update(),e(s),Lp=!0,console.log(“Model loaded u2705″)},void 0,t)})};var dy=async()=>{let n=new ms;return Promise.all(Object.entries(ji).map(([e,t])=>new Promise((i,s)=>{n.load(`https://interactives.inquirer.com/projects/2026/07/ben-franklin-bridge/1782915217745/assets/_resized/photos/${e}–1300px.webp`,r=>{r.colorSpace=ct,r.anisotropy=li.capabilities.getMaxAnisotropy(),r.minFilter=ze,r.magFilter=ze,r.premultiplyAlpha=!1,r.needsUpdate=!0;let a=r.image.width/r.image.height,o=t.width/a,c=new hn(t.width,o),l=new mi({map:r,side:ai,opacity:e===”profile”?1:0,transparent:!0,depthWrite:!1,depthTest:!1});Ra&&(l.premultipliedAlpha=!0);let h=new yt(c,l);h.renderOrder=1,h.position.set(t.position.x,t.position.y,t.position.z),vn.add(h),ji[e].mesh=h,i()},void 0,s)}))).then(()=>{Pc=!0,console.log(“Photos loaded u2705″)})},Up=()=>{Pc&&iu&&(Object.values(ji).forEach(({mesh:n})=>{n&&n.lookAt(dt.position)}),iu=!1),su.composer.render()},py=({current:n,next:e,progress:t})=>{Lp&&Pc&&(Ay({from:n.camera,to:e.camera,fromPhotoId:n.photo||”default”,toPhotoId:e.photo||”default”,progress:t}),my({photoId:n.photo,photoStart:parseInt(n.photoStart)/100||null,photoDirection:n.photoDirection,caption:n.caption,progress:t}),requestAnimationFrame(Up))},Ay=({from:n,to:e,progress:t,fromPhotoId:i,toPhotoId:s})=>{Ra&&(Sn.camera={from:n,progress:t});let r=Bc[n],a=Bc[e];if(!r||!a)return;let o=(h,u)=>Rc.easeInOutSine(t,h,u-h,1);Et.target.set(o(r.target.x,a.target.x),o(r.target.y,a.target.y),o(r.target.z,a.target.z));let c=r.position[i]?r.position[i]:r.position,l=a.position[s]?a.position[s]:a.position;dt.position.set(o(c.x,l.x),o(c.y,l.y),o(c.z,l.z)),dt.lookAt(Et.target),dt.far=o(c.far||1e5,l.far||1e5),dt.updateProjectionMatrix(),iu=!0},En=(n,e)=>{ji[n].mesh.material.opacity=e},Yn=(n,e)=>{n?(Fc.textContent=n,Fc.style.opacity=e):Fc.style.opacity=””},my=({photoId:n,photoStart:e,photoDirection:t,progress:i,caption:s})=>{n&&Ra&&(Sn.photo=n,tu=new gc([ji[n].mesh],dt,li.domElement),tu.addEventListener(“dragstart”,r=>{Et.enabled=!1}),tu.addEventListener(“dragend”,r=>{Bp(),Et.enabled=!0})),Pc&&(n==”profile”&&t==”in”?(En(n,1),Yn(s,1)):Object.entries(ji).forEach(([r,a])=>{if(n==r){if(t==”stay”)En(r,1),Yn(s,1);else if(t==”in”)if(e>i)En(r,0),Yn(s,0);else if(i>e+Dc)En(r,1),Yn(s,1);else{let o=(i-e)/Dc;En(r,o),Yn(s,o)}else if(t==”out”)if(e>i)En(r,1),Yn(s,1);else if(i>e+Dc)En(r,0),Yn(s,0);else{let o=(i-e)/Dc;En(r,1-o),Yn(s,1-o)}}else En(r,0)}))},gy=()=>{Pp(),dt.aspect=Fs/Ls,dt.updateProjectionMatrix(),li.setSize(Fs,Ls),li.setPixelRatio(nu),su.composer.setSize(Fs,Ls)},xy=()=>{Ra&&Lc.classList.add(“is-debug”)},Jn={create:async()=>{await hy(),xy()},update:n=>{py(n)},resize:gy};var by=()=>{document.addEventListener(“scroll”,()=>{ru()}),window.addEventListener(“resize”,()=>{ru()})},ru=()=>{let n=document.querySelector(“.js-camden”),e=n.getBoundingClientRect(),t=e.y+e.height/2,i=window.innerHeight*.5,s=t>i?”before”:”after”;n.setAttribute(“data-state”,s)},Np={init:()=>{by(),ru()}};var _y=(n,e,t,i)=>{let s=(1*e+i)/t,r=n.querySelector(“.js-depth-top”);r.style.clipPath=`inset(0 0 ${100-s*100}% 0)`},jn={update:_y};var Op,yy=()=>{window.addEventListener(“scroll”,()=>{Ey(),vy()})},Qp=()=>{document.querySelector(‘.js-steps[data-steps=”slide-viewer”]’).dataset.current!=”hero”&&document.querySelector(“.js-scroll”).classList.add(“is-visible”)},Ey=()=>{document.querySelector(“.js-scroll”).classList.remove(“is-visible”)},vy=()=>{clearTimeout(Op),Op=setTimeout(()=>{Qp()},2e3)},Uc={init:()=>{yy()},show:()=>{Qp()}};var Hp=BA(Gp());var Zn,ou,cu,lu,zp=new Array,Vp=!1,Da=183,$n=1,Ba,My=()=>{window.addEventListener(“resize”,()=>{Wp(),Kp(),hu()})},Wp=()=>{Zn=document.querySelector(“.js-slide-viewer”),ou=Zn.getBoundingClientRect().height,Zn.height=ou,cu=Zn.getBoundingClientRect().width,Zn.width=cu,lu=Zn.getContext(“2d”)},Iy=async()=>{let n=new Array,t=window.innerWidth<768?"850px":"1300px";for(var i=1;inew Promise((e,t)=>{let i=new Image;i.onload=()=>e(i),i.onerror=()=>t(new Error(`Failed to load image: ${n}`)),i.setAttribute(“crossOrigin”,”anonymous”),i.src=n}),hu=()=>{if($n!==void 0||$n!==null){let n=zp[$n];n&&(lu.clearRect(0,0,Zn.width,Zn.height),lu.drawImage(n,Ba.x,Ba.y,Ba.width,Ba.height))}},Kp=()=>{Ba=(0,Hp.cover)(cu,ou,1280,720)},wy=n=>{$n=n,Vp&&hu(),Ry(),By(),Dy()},Ry=()=>{let t=Da*.5,i=$n/t,s=document.querySelector(“.js-slide-viewer-preview”);s.style.opacity=1-i,s.style.transform=`scale(${.95+i*(1-.95)})`},By=()=>{let n=Da*.5,e=$n/n,t=document.querySelector(“.js-slide-viewer-imagery”);t.style.opacity=e},Dy=()=>{let n=document.querySelector(“.js-slide-viewer-mask”),e=Da*.8;if($n>e){let t=($n-e)/(Da-e);t(au||(Wp(),Kp(),My(),au=Iy()),au),updateFrame:n=>{wy(n)}};var RM=Zp();var $p=()=>/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);var uu=(n,e=null,t=null)=>{t||(t=document.querySelector(“head”));let i=document.createElement(“script”);i.type=”text/javascript”,i.src=n,e&&(i.onload=e),t.appendChild(i)},Qc=()=>(window.PMNdataLayer?.[0]!==void 0&&window.PMNdataLayer[0])?.analytics?.user?.state===”Subscribed”,kc=()=>{let e=(window.PMNdataLayer?.[0]!==void 0&&window.PMNdataLayer[0])?.analytics?.user?.state;return window.location.host.includes(“zzz-systest”)||window.location.host.includes(“pmn.arcpublishing.com”)||window.location.host.includes(“stage.fusion.inquirer.com”)||typeof e>”u”},eA=()=>{let e=(window.PMNdataLayer?.[0]!==void 0&&window.PMNdataLayer[0])?.analytics?.user?.hasAdsFreeReading;return!!(e&&e==1)},Fa=()=>window.location.host.includes(“localhost”);var ky=()=>{eA()&&document.querySelectorAll(“.js-adbox”).forEach(e=>{e.classList.add(“is-hidden”)})},tA={init:()=>{ky()}};var Ps,iA,Gy=()=>{Ps=document.getElementById(“js-inno-toast”)},Hy=n=>{if(!Ps)return;Ps.innerHTML=n,Ps.classList.add(“is-active”);let e=()=>{Ps.addEventListener(“transitionend”,zy,{once:!0}),Ps.classList.remove(“is-active”)};clearTimeout(iA),iA=setTimeout(e,5e3)},zy=()=>{Ps.innerHTML=””},Us={init:()=>{Gy()},showToast:Hy};var Gc,nA=!1,Vy=async()=>new Promise(n=>{setTimeout(()=>{console.log(“simulating createShareLink for localhost”),n(“https://inquirer.com/interactives”),Wy()},100)}),Wy=()=>{let n=document.querySelector(“.js-gift-toast-receiver”);!n||!(n instanceof HTMLElement)||setTimeout(()=>{let e=n?.querySelector(“span”);e&&(e.innerHTML=”Gift link copied to clipboard“)},20)},Ky=()=>{let n=window.services?.createShareLink;n&&(Gc=n),Fa()&&(Gc=Vy),Gc&&Xy()},qy=async n=>{let e=”text/plain”,t=async()=>{try{return await Gc(window.location.pathname)}catch{n.dataset.state=”error”,Us.showToast(“Hmm, we couldn’t generate a gift link…”)}},i=new ClipboardItem({[e]:t()});await navigator.clipboard.write([i]).catch(s=>{console.log(s),Us.showToast(“Couldn’t copy to clipboard, try again?”),n.dataset.state=”error”}),Us.showToast(“Gift link copied to clipboard!”),n.dataset.state=”complete”},Xy=()=>{document.querySelectorAll(“.js-gift”).forEach(e=>{(Qc()||Fa()||kc())&&e.classList.add(“is-available”)}),document.querySelectorAll(“.js-gift-button”).forEach(e=>{e instanceof HTMLButtonElement&&e.addEventListener(“click”,()=>{e.classList.contains(“disabled”)||(e.dataset.state=”loading”,nA=!0,qy(e),setTimeout(()=>{e.dataset.state=”ready”},2e3))})});let n=document.querySelector(“.js-gift-toast-receiver”);!n||!(n instanceof HTMLElement)||Yy(n)},Yy=n=>{new MutationObserver(t=>{for(let i of t){let s=[…i.addedNodes].at(0);if(!(s instanceof HTMLElement))return;nA&&Us.showToast(s.outerHTML)}}).observe(n,{subtree:!0,childList:!0})},sA={init:()=>{Ky()}};var Jy=()=>{window.addEventListener(“message”,n=>{if(n.data[“datawrapper-height”]){let e=n.data[“datawrapper-height”];for(let t in e)document.querySelector(`#datawrapper-chart-${t}`).setAttribute(“height”,e[t])}})},jy=()=>{document.querySelectorAll(“.js-datawrapper-graphic”).forEach(n=>{uu(`https://datawrapper.dwcdn.net/${n.dataset.id}/embed.js`,null,n)})},Zy=()=>{window.addEventListener(“message”,n=>{let e=n.data;document.querySelectorAll(`iframe[src*=”${e.id}”]`).forEach(i=>{i.style.height=`${e.height}px`})},!1)},$y=()=>{document.querySelectorAll(“.js-pym-graphic”).forEach(n=>{if(typeof window{new window.pym.Parent(n.id,n.dataset.iframe)};typeof window.pym>”u”?uu(“https://pym.nprapps.org/pym.v1.min.js”,e):e()}})},rA={init:()=>{Jy(),jy(),$y(),Zy()}};var La,eE=()=>{document.querySelectorAll(“.js-hover”).forEach(n=>{n.addEventListener(“click”,()=>{aA(n)}),n.addEventListener(“mouseenter”,()=>{aA(n)}),n.addEventListener(“mouseout”,()=>{oA(n)})}),window.addEventListener(“scroll”,()=>{La!==null&&tE()})},tE=()=>{(La>window.scrollY+100||La{oA(n)})},aA=n=>{n.classList.add(“is-visible”),La=window.scrollY},oA=n=>{n.classList.remove(“is-visible”),La=null},cA={init:()=>{eE()}};var Hc,iE=(n,e)=>{Hc=Hc||window.PMNdataLayer,Hc?Hc.push({event:”misc_event”,eventAction:n,eventLabel:e}):window.location.hostname.includes(“localhost”)?console.log(“Analytics event:”,n,e,”(not actually being sent due to localhost)”):console.log(“Failed to push analytics event”,n,e)},lA={event:(n,e)=>{iE(n,e)}};var fu,hA=1,du=class{constructor(e){this.el=e,this.contentPosition=”default”,this.possibleSteps=new Array,this.currentStep=null,this.offset=window.innerHeight*.9,this.instanceOfSteps=hA,this.stepID=this.el.dataset.steps,hA++,this.setPossibleSteps(),this.bindings(),this.stepID===”slide-viewer”?Cn.init().then(()=>{console.log(“Slideviewer loaded u2705″),this.updateContent()}):this.stepID===”bridge”?Cn.init().then(()=>{Jn.create().then(()=>{console.log(“Bridge loaded u2705”),this.updateContent()})}):this.updateContent()}setPossibleSteps(){this.el.querySelectorAll(“.js-steps-tracker”).forEach(e=>{e.dataset.step&&this.possibleSteps.push(e.dataset.step)})}bindings(){window.addEventListener(“scroll”,()=>{this.updateContent()},{passive:!0}),window.addEventListener(“resize”,()=>{fu!==window.innerWidth&&(fu=window.innerWidth,Jn.resize(),this.updateContent())},{passive:!0})}updateContent(){this.updateCurrentStep(),this.stepID==”slide-viewer”?this.updateSlide():this.stepID==”bridge”&&this.updateBridge()}updateSlide(){if(this.currentStep){let e=this.currentStep.replace(“is-“,””),t=this.el.querySelector(`.js-steps-tracker[data-step=”${e}”]`),i=this.possibleSteps.indexOf(this.currentStep),s=this.possibleSteps[i+1];if(s){let r=this.el.querySelector(`.js-steps-tracker[data-step=”${s.replace(“is-“,””)}”]`),a=t.getBoundingClientRect().top,o=r.getBoundingClientRect().top,c=o-a,h=1-(o-this.offset)/c,u=parseInt(t.dataset.slide),m=(parseInt(r.dataset.slide)-u)*h,g=u+m,A=Math.round(g);Cn.updateFrame(A),jn.update(this.el,i,this.possibleSteps.length,h)}else{let r=parseInt(t.dataset.slide,10),a=parseInt(t.dataset.end,10);if(a){let o=t.getBoundingClientRect().top,c=this.offset-o,l=t.getBoundingClientRect().height*2||window.innerHeight/2,h=Math.max(0,Math.min(1,c/l)),u=Rc.easeInOutQuad(h,0,1,1),f=Math.round(r+(a-r)*u);Cn.updateFrame(f),jn.update(this.el,i,this.possibleSteps.length,h)}else{let o=parseInt(t.dataset.slide,10);Cn.updateFrame(o)}}}else Cn.updateFrame(0)}updateBridge(){if(this.currentStep){let e=this.currentStep.replace(“is-“,””),t=this.el.querySelector(`.js-steps-tracker[data-step=”${e}”]`),i=this.possibleSteps.indexOf(this.currentStep),s=this.possibleSteps[i+1];if(s){let r=this.el.querySelector(`.js-steps-tracker[data-step=”${s.replace(“is-“,””)}”]`),a=r.getBoundingClientRect().top-t.getBoundingClientRect().top,o=r.getBoundingClientRect().top-this.offset,c=Math.min(Math.max(1-o/a,0),1);Jn.update({current:t.dataset,next:r.dataset,progress:c}),jn.update(this.el,i,this.possibleSteps.length,c)}else{Jn.update({current:{camera:”public”,photo:”public”,photoDirection:”stay”},next:{camera:”public”,photo:”public”,photoDirection:”stay”},progress:0});let r=t.getBoundingClientRect().top,a=this.offset-r,o=t.getBoundingClientRect().height*2||window.innerHeight/2,c=Math.max(0,Math.min(1,a/o));jn.update(this.el,i,this.possibleSteps.length,c)}}else Jn.update({current:{camera:”default”,photo:”profile”,photoDirection:”stay”},next:{camera:”default”,photo:”profile”,photoDirection:”stay”},progress:0}),jn.update(this.el,0,this.possibleSteps.length,0)}updateCurrentStep(){let e;if(this.el.querySelectorAll(“.js-steps-tracker”).forEach((i,s)=>{i.getBoundingClientRect().top{s.classList.remove(“is-active”)}),e?document.querySelector(`.js-steps-card[data-step=”${e}”]`).classList.add(“is-active”):document.querySelector(‘.js-steps-card[data-step=”slide-viewer”]’).classList.add(“is-active”),this.currentStep==null&&delete this.el.dataset.current,this.possibleSteps.forEach((s,r)=>{let a=”is-“+s,o=”is-“+r;this.possibleSteps.indexOf(s){fu=window.innerWidth,document.querySelectorAll(“.js-steps”).forEach(n=>{new du(n)})}};var nE=(n,e,t)=>{document.querySelectorAll(“.js-subscribe”).forEach(i=>{i.classList.toggle(“is-unsubscribed”,!n),i.classList.toggle(“is-preview”,e),i.classList.toggle(“is-dev”,t)})},fA={init:()=>{nE(Qc(),kc(),Fa())}};var sE=()=>{},dA={init:()=>{sE()}};var Qr,pu,Au=!0,rE=()=>{Qr=document.querySelectorAll(“.js-video-autoplay”)},aE=()=>{window.addEventListener(“resize”,()=>{pA()}),window.addEventListener(“scroll”,()=>{pA()}),Qr.forEach(n=>{n.addEventListener(“volumechange”,e=>{n.muted!==Au&&!$p()&&(Au=n.muted,oE())})})},pA=()=>{let n;Qr.forEach((e,t)=>{let i=e.getBoundingClientRect(),s=i.height/2;i.y-s&&(n=e)}),n!==pu&&(pu=n,Qr.forEach(e=>{e.pause()}),n?n.play():pu=null)},oE=()=>{Qr.forEach(n=>{n.muted=Au})},AA={init:()=>{rE(),Qr&&aE()}};var mA={init:()=>{Jn.init?.(),Np.init?.(),jn.init?.(),Uc.init?.(),Cn.init?.(),tA.init?.(),sA.init?.(),rA.init?.(),cA.init?.(),uA.init?.(),fA.init?.(),dA.init?.(),AA.init?.(),Us.init?.()}};var cE=()=>{},gA={init:()=>{cE()}};var lE=document.querySelector(“.js-inno”),xA=()=>{mA.init(),gA.init()};lE?xA():new MutationObserver((e,t)=>{if(document.querySelector(“.js-inno”)){t.disconnect(),xA();return}}).observe(document,{attributes:!0,childList:!0,subtree:!0});})();
/*! Bundled license information:
intrinsic-scale/dist/intrinsic-scale.common-js.js:
(*! npm.im/intrinsic-scale *)
three/build/three.core.js:
(**
* @license
* Copyright 2010-2025 Three.js Authors
* SPDX-License-Identifier: MIT
*)
three/build/three.module.js:
(**
* @license
* Copyright 2010-2025 Three.js Authors
* SPDX-License-Identifier: MIT
*)
*/