@needle-tools/engine 4.12.0-beta.2 → 4.12.0-next.58a3049

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/components.needle.json +1 -1
  2. package/dist/{gltf-progressive-Rs-ojtXy.umd.cjs → gltf-progressive-Bfpfaz84.umd.cjs} +1 -1
  3. package/dist/{gltf-progressive-DnLBuGK5.js → gltf-progressive-DPunMlEM.js} +1 -1
  4. package/dist/{gltf-progressive-BmSygnAC.min.js → gltf-progressive-hFPACYio.min.js} +1 -1
  5. package/dist/{needle-engine.bundle-DKrAL5Vo.min.js → needle-engine.bundle-B0kv56HS.min.js} +145 -144
  6. package/dist/{needle-engine.bundle-CG9VEmXC.umd.cjs → needle-engine.bundle-BmK_kKrT.umd.cjs} +142 -141
  7. package/dist/{needle-engine.bundle-CO2y_WSU.js → needle-engine.bundle-Dxc1qRsY.js} +8187 -8002
  8. package/dist/needle-engine.d.ts +12 -5
  9. package/dist/needle-engine.js +47 -47
  10. package/dist/needle-engine.min.js +1 -1
  11. package/dist/needle-engine.umd.cjs +1 -1
  12. package/dist/{postprocessing-DZtb9Nnn.umd.cjs → postprocessing-BHQvwehB.umd.cjs} +1 -1
  13. package/dist/{postprocessing-B5ksn9-G.min.js → postprocessing-ClLv0reO.min.js} +1 -1
  14. package/dist/{postprocessing-__7s9wON.js → postprocessing-DLI2N3LL.js} +1 -1
  15. package/dist/{three-examples-y2GeYlze.js → three-examples-D4rE49Ui.js} +10 -2
  16. package/dist/{three-examples-MsJjauyk.min.js → three-examples-DB5Uoja4.min.js} +2 -2
  17. package/dist/{three-examples-Dho7cuu4.umd.cjs → three-examples-Djbk6WA4.umd.cjs} +2 -2
  18. package/lib/engine/debug/debug_console.js +1 -1
  19. package/lib/engine/debug/debug_console.js.map +1 -1
  20. package/lib/engine/engine_context.js +2 -0
  21. package/lib/engine/engine_context.js.map +1 -1
  22. package/lib/engine/engine_license.d.ts +18 -0
  23. package/lib/engine/engine_license.js +160 -9
  24. package/lib/engine/engine_license.js.map +1 -1
  25. package/lib/engine/engine_networking.js +15 -0
  26. package/lib/engine/engine_networking.js.map +1 -1
  27. package/lib/engine/engine_serialization_builtin_serializer.js +1 -1
  28. package/lib/engine/engine_serialization_builtin_serializer.js.map +1 -1
  29. package/lib/engine/engine_three_utils.js +2 -2
  30. package/lib/engine/engine_three_utils.js.map +1 -1
  31. package/lib/engine/webcomponents/needle menu/needle-menu-spatial.js +2 -1
  32. package/lib/engine/webcomponents/needle menu/needle-menu-spatial.js.map +1 -1
  33. package/lib/engine/webcomponents/needle menu/needle-menu.d.ts +2 -0
  34. package/lib/engine/webcomponents/needle menu/needle-menu.js +33 -1
  35. package/lib/engine/webcomponents/needle menu/needle-menu.js.map +1 -1
  36. package/lib/engine/xr/NeedleXRSession.js +49 -8
  37. package/lib/engine/xr/NeedleXRSession.js.map +1 -1
  38. package/lib/engine-components/Camera.js +4 -1
  39. package/lib/engine-components/Camera.js.map +1 -1
  40. package/lib/engine-components/DragControls.js +1 -1
  41. package/lib/engine-components/DragControls.js.map +1 -1
  42. package/lib/engine-components/DropListener.d.ts +1 -0
  43. package/lib/engine-components/DropListener.js +26 -8
  44. package/lib/engine-components/DropListener.js.map +1 -1
  45. package/lib/engine-components/EventList.js +4 -1
  46. package/lib/engine-components/EventList.js.map +1 -1
  47. package/lib/engine-components/SceneSwitcher.d.ts +3 -2
  48. package/lib/engine-components/SceneSwitcher.js +20 -11
  49. package/lib/engine-components/SceneSwitcher.js.map +1 -1
  50. package/lib/engine-components/SpectatorCamera.js +1 -1
  51. package/lib/engine-components/SpectatorCamera.js.map +1 -1
  52. package/lib/engine-components/api.d.ts +1 -1
  53. package/lib/engine-components/api.js +1 -1
  54. package/lib/engine-components/api.js.map +1 -1
  55. package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.js +8 -0
  56. package/lib/engine-components/export/usdz/extensions/behavior/BehaviourComponents.js.map +1 -1
  57. package/lib/engine-components/webxr/Avatar.js +1 -1
  58. package/lib/engine-components/webxr/Avatar.js.map +1 -1
  59. package/lib/engine-components/webxr/WebARSessionRoot.d.ts +5 -2
  60. package/lib/engine-components/webxr/WebARSessionRoot.js +5 -2
  61. package/lib/engine-components/webxr/WebARSessionRoot.js.map +1 -1
  62. package/lib/engine-components/webxr/WebXR.d.ts +3 -1
  63. package/lib/engine-components/webxr/WebXR.js +3 -1
  64. package/lib/engine-components/webxr/WebXR.js.map +1 -1
  65. package/package.json +3 -3
  66. package/src/engine/debug/debug_console.ts +1 -1
  67. package/src/engine/engine_context.ts +2 -0
  68. package/src/engine/engine_license.ts +176 -9
  69. package/src/engine/engine_networking.ts +15 -0
  70. package/src/engine/engine_serialization_builtin_serializer.ts +1 -1
  71. package/src/engine/engine_three_utils.ts +4 -2
  72. package/src/engine/webcomponents/needle menu/needle-menu-spatial.ts +2 -1
  73. package/src/engine/webcomponents/needle menu/needle-menu.ts +35 -2
  74. package/src/engine/xr/NeedleXRSession.ts +56 -11
  75. package/src/engine-components/Camera.ts +4 -1
  76. package/src/engine-components/DragControls.ts +1 -1
  77. package/src/engine-components/DropListener.ts +29 -8
  78. package/src/engine-components/EventList.ts +5 -1
  79. package/src/engine-components/SceneSwitcher.ts +23 -13
  80. package/src/engine-components/SpectatorCamera.ts +1 -1
  81. package/src/engine-components/api.ts +1 -1
  82. package/src/engine-components/export/usdz/extensions/behavior/BehaviourComponents.ts +11 -0
  83. package/src/engine-components/webxr/Avatar.ts +1 -1
  84. package/src/engine-components/webxr/WebARSessionRoot.ts +7 -3
  85. package/src/engine-components/webxr/WebXR.ts +4 -2
@@ -1,4 +1,4 @@
1
- import{Uniform$1 as u,Vector4 as he,Color as Q,Vector2 as v,CanvasTexture as Qr,RepeatWrapping as ae,ShaderMaterial as T,NoBlending as H,WebGLRenderTarget as E,NearestFilter as P,EventDispatcher as st,SRGBColorSpace as C,UnsignedByteType as Y,PerspectiveCamera as Ae,BasicDepthPacking as V,REVISION as xe,AlwaysDepth as Pt,LinearFilter as R,RGBADepthPacking as se,FloatType as Z,LessDepth as It,Vector3 as F,MeshDepthMaterial as Vr,LinearSRGBColorSpace as Qe,NoColorSpace as Ve,DepthTexture as De,DepthStencilFormat as Rt,UnsignedInt248Type as bt,UnsignedIntType as Re,RGBAFormat as z,Scene as nt,Matrix4 as O,HalfFloatType as $,Data3DTexture as We,Loader as ot,LoadingManager as fe,FileLoader as Ut,ClampToEdgeWrapping as lt,DataTexture as Ye,RedFormat as Ke,MeshNormalMaterial as Wr,BackSide as Xe,DoubleSide as Ze,FrontSide as Yr,OrthographicCamera as Ft,Mesh as Lt,Texture as je,EqualDepth as ut,NotEqualDepth as Ot,LinearMipmapLinearFilter as Kr,GreaterDepth as Xr,GreaterEqualDepth as Zr,LessEqualDepth as jr,NeverDepth as Jr,Material as Nt,BufferGeometry as Ht,BufferAttribute as Je,RGFormat as qr,DepthFormat as zt,Sphere as _r}from"./three-W7zWTcfP.min.js";import{Pass as $r}from"./three-examples-MsJjauyk.min.js";var ei="6.38.2",ti=class{dispose(){}},ct=1/1e3,ri=1e3,Gt=class{constructor(){this.startTime=performance.now(),this.previousTime=0,this.currentTime=0,this._delta=0,this._elapsed=0,this._fixedDelta=1e3/60,this.timescale=1,this.useFixedDelta=!1,this._autoReset=!1}get autoReset(){return this._autoReset}set autoReset(e){typeof document<"u"&&document.hidden!==void 0&&(e?document.addEventListener("visibilitychange",this):document.removeEventListener("visibilitychange",this),this._autoReset=e)}get delta(){return this._delta*ct}get fixedDelta(){return this._fixedDelta*ct}set fixedDelta(e){this._fixedDelta=e*ri}get elapsed(){return this._elapsed*ct}update(e){this.useFixedDelta?this._delta=this.fixedDelta:(this.previousTime=this.currentTime,this.currentTime=(e!==void 0?e:performance.now())-this.startTime,this._delta=this.currentTime-this.previousTime),this._delta*=this.timescale,this._elapsed+=this._delta}reset(){this._delta=0,this._elapsed=0,this.currentTime=performance.now()-this.startTime}getDelta(){return this.delta}getElapsed(){return this.elapsed}handleEvent(e){document.hidden||(this.currentTime=performance.now()-this.startTime)}dispose(){this.autoReset=!1}},ii=(()=>{const e=new Float32Array([-1,-1,0,3,-1,0,-1,3,0]),t=new Float32Array([0,0,2,0,0,2]),r=new Ht;return r.setAttribute("position",new Je(e,3)),r.setAttribute("uv",new Je(t,2)),r})(),N=class Mt{static get fullscreenGeometry(){return ii}constructor(t="Pass",r=new nt,i=new Ft){this.name=t,this.renderer=null,this.scene=r,this.camera=i,this.screen=null,this.rtt=!0,this.needsSwap=!0,this.needsDepthTexture=!1,this.enabled=!0}get renderToScreen(){return!this.rtt}set renderToScreen(t){if(this.rtt===t){const r=this.fullscreenMaterial;r!==null&&(r.needsUpdate=!0),this.rtt=!t}}set mainScene(t){}set mainCamera(t){}setRenderer(t){this.renderer=t}isEnabled(){return this.enabled}setEnabled(t){this.enabled=t}get fullscreenMaterial(){return this.screen!==null?this.screen.material:null}set fullscreenMaterial(t){let r=this.screen;r!==null?r.material=t:(r=new Lt(Mt.fullscreenGeometry,t),r.frustumCulled=!1,this.scene===null&&(this.scene=new nt),this.scene.add(r),this.screen=r)}getFullscreenMaterial(){return this.fullscreenMaterial}setFullscreenMaterial(t){this.fullscreenMaterial=t}getDepthTexture(){return null}setDepthTexture(t,r=V){}render(t,r,i,a,n){throw new Error("Render method not implemented!")}setSize(t,r){}initialize(t,r,i){}dispose(){for(const t of Object.keys(this)){const r=this[t];(r instanceof E||r instanceof Nt||r instanceof je||r instanceof Mt)&&this[t].dispose()}this.fullscreenMaterial!==null&&this.fullscreenMaterial.dispose()}},kt=class extends N{constructor(){super("ClearMaskPass",null,null),this.needsSwap=!1}render(e,t,r,i,a){const n=e.state.buffers.stencil;n.setLocked(!1),n.setTest(!1)}},ai=`#ifdef COLOR_WRITE
1
+ import{Uniform$1 as u,Vector4 as he,Color as Q,Vector2 as v,CanvasTexture as Qr,RepeatWrapping as ae,ShaderMaterial as T,NoBlending as H,WebGLRenderTarget as E,NearestFilter as P,EventDispatcher as st,SRGBColorSpace as C,UnsignedByteType as Y,PerspectiveCamera as Ae,BasicDepthPacking as V,REVISION as xe,AlwaysDepth as Pt,LinearFilter as R,RGBADepthPacking as se,FloatType as Z,LessDepth as It,Vector3 as F,MeshDepthMaterial as Vr,LinearSRGBColorSpace as Qe,NoColorSpace as Ve,DepthTexture as De,DepthStencilFormat as Rt,UnsignedInt248Type as bt,UnsignedIntType as Re,RGBAFormat as z,Scene as nt,Matrix4 as O,HalfFloatType as $,Data3DTexture as We,Loader as ot,LoadingManager as fe,FileLoader as Ut,ClampToEdgeWrapping as lt,DataTexture as Ye,RedFormat as Ke,MeshNormalMaterial as Wr,BackSide as Xe,DoubleSide as Ze,FrontSide as Yr,OrthographicCamera as Ft,Mesh as Lt,Texture as je,EqualDepth as ut,NotEqualDepth as Ot,LinearMipmapLinearFilter as Kr,GreaterDepth as Xr,GreaterEqualDepth as Zr,LessEqualDepth as jr,NeverDepth as Jr,Material as Nt,BufferGeometry as Ht,BufferAttribute as Je,RGFormat as qr,DepthFormat as zt,Sphere as _r}from"./three-W7zWTcfP.min.js";import{Pass as $r}from"./three-examples-DB5Uoja4.min.js";var ei="6.38.2",ti=class{dispose(){}},ct=1/1e3,ri=1e3,Gt=class{constructor(){this.startTime=performance.now(),this.previousTime=0,this.currentTime=0,this._delta=0,this._elapsed=0,this._fixedDelta=1e3/60,this.timescale=1,this.useFixedDelta=!1,this._autoReset=!1}get autoReset(){return this._autoReset}set autoReset(e){typeof document<"u"&&document.hidden!==void 0&&(e?document.addEventListener("visibilitychange",this):document.removeEventListener("visibilitychange",this),this._autoReset=e)}get delta(){return this._delta*ct}get fixedDelta(){return this._fixedDelta*ct}set fixedDelta(e){this._fixedDelta=e*ri}get elapsed(){return this._elapsed*ct}update(e){this.useFixedDelta?this._delta=this.fixedDelta:(this.previousTime=this.currentTime,this.currentTime=(e!==void 0?e:performance.now())-this.startTime,this._delta=this.currentTime-this.previousTime),this._delta*=this.timescale,this._elapsed+=this._delta}reset(){this._delta=0,this._elapsed=0,this.currentTime=performance.now()-this.startTime}getDelta(){return this.delta}getElapsed(){return this.elapsed}handleEvent(e){document.hidden||(this.currentTime=performance.now()-this.startTime)}dispose(){this.autoReset=!1}},ii=(()=>{const e=new Float32Array([-1,-1,0,3,-1,0,-1,3,0]),t=new Float32Array([0,0,2,0,0,2]),r=new Ht;return r.setAttribute("position",new Je(e,3)),r.setAttribute("uv",new Je(t,2)),r})(),N=class Mt{static get fullscreenGeometry(){return ii}constructor(t="Pass",r=new nt,i=new Ft){this.name=t,this.renderer=null,this.scene=r,this.camera=i,this.screen=null,this.rtt=!0,this.needsSwap=!0,this.needsDepthTexture=!1,this.enabled=!0}get renderToScreen(){return!this.rtt}set renderToScreen(t){if(this.rtt===t){const r=this.fullscreenMaterial;r!==null&&(r.needsUpdate=!0),this.rtt=!t}}set mainScene(t){}set mainCamera(t){}setRenderer(t){this.renderer=t}isEnabled(){return this.enabled}setEnabled(t){this.enabled=t}get fullscreenMaterial(){return this.screen!==null?this.screen.material:null}set fullscreenMaterial(t){let r=this.screen;r!==null?r.material=t:(r=new Lt(Mt.fullscreenGeometry,t),r.frustumCulled=!1,this.scene===null&&(this.scene=new nt),this.scene.add(r),this.screen=r)}getFullscreenMaterial(){return this.fullscreenMaterial}setFullscreenMaterial(t){this.fullscreenMaterial=t}getDepthTexture(){return null}setDepthTexture(t,r=V){}render(t,r,i,a,n){throw new Error("Render method not implemented!")}setSize(t,r){}initialize(t,r,i){}dispose(){for(const t of Object.keys(this)){const r=this[t];(r instanceof E||r instanceof Nt||r instanceof je||r instanceof Mt)&&this[t].dispose()}this.fullscreenMaterial!==null&&this.fullscreenMaterial.dispose()}},kt=class extends N{constructor(){super("ClearMaskPass",null,null),this.needsSwap=!1}render(e,t,r,i,a){const n=e.state.buffers.stencil;n.setLocked(!1),n.setTest(!1)}},ai=`#ifdef COLOR_WRITE
2
2
  #include <common>
3
3
  #include <dithering_pars_fragment>
4
4
  #ifdef FRAMEBUFFER_PRECISION_HIGH
@@ -1,5 +1,5 @@
1
1
  import { Uniform$1 as u, Vector4 as de, Color as Q, Vector2 as p, CanvasTexture as Qi, RepeatWrapping as se, ShaderMaterial as T, NoBlending as z, WebGLRenderTarget as w, NearestFilter as P, EventDispatcher as wt, SRGBColorSpace as S, UnsignedByteType as Y, PerspectiveCamera as Be, BasicDepthPacking as W, REVISION as Pe, AlwaysDepth as Kt, LinearFilter as R, RGBADepthPacking as ae, FloatType as J, LessDepth as Pt, Vector3 as F, MeshDepthMaterial as Vi, LinearSRGBColorSpace as Je, NoColorSpace as tt, DepthTexture as Ce, DepthStencilFormat as Xt, UnsignedInt248Type as Zt, UnsignedIntType as Oe, RGBAFormat as H, Scene as dt, Matrix4 as O, HalfFloatType as $, Data3DTexture as Ze, Loader as Et, LoadingManager as ve, FileLoader as jt, ClampToEdgeWrapping as st, DataTexture as it, RedFormat as rt, MeshNormalMaterial as Wi, BackSide as Qe, DoubleSide as Ve, FrontSide as Yi, OrthographicCamera as Jt, Mesh as qt, Texture as qe, EqualDepth as vt, NotEqualDepth as _t, LinearMipmapLinearFilter as Ki, GreaterDepth as Xi, GreaterEqualDepth as Zi, LessEqualDepth as ji, NeverDepth as Ji, Material as $t, BufferGeometry as ei, BufferAttribute as _e, RGFormat as qi, DepthFormat as It, Sphere as _i } from "./three-BCCkyCA5.js";
2
- import { Pass as $i } from "./three-examples-y2GeYlze.js";
2
+ import { Pass as $i } from "./three-examples-D4rE49Ui.js";
3
3
  var er = "6.38.2", tr = class {
4
4
  /**
5
5
  * Frees internal resources.
@@ -281,7 +281,10 @@ ${c}`;
281
281
  buildCode() {
282
282
  const e = {};
283
283
  for (const t of Yn) {
284
- const s = this.getUniforms(t), n = this.getAttributes(t), i = this.getVaryings(t), o = this.getVars(t), r = this.getCodes(t);
284
+ const s = this.getUniforms(t), n = this.getAttributes(t), i = this.getVaryings(t);
285
+ let o = this.getVars(t);
286
+ o = o.replace("mat4 modelViewMatrix;", "");
287
+ const r = this.getCodes(t);
285
288
  e[t] = `${this.getSignature()}
286
289
  // <node_builder>
287
290
 
@@ -7297,7 +7300,12 @@ class Gh extends kt {
7297
7300
  try {
7298
7301
  const a = i.parse(r, !0);
7299
7302
  for (let c = 0, l = a.materialLibraries.length; c < l; c++) {
7300
- const h = a.materialLibraries[c], g = e.startsWith("blob:") ? e + "/" + h : new URL(h, e);
7303
+ const h = a.materialLibraries[c];
7304
+ if (!h || typeof h != "string" || h.trim() === "") {
7305
+ console.warn("THREE.OBJLoader: Invalid or empty material library reference, skipping.");
7306
+ continue;
7307
+ }
7308
+ const g = e.startsWith("blob:") ? e + "/" + h : new URL(h, e);
7301
7309
  console.debug("Loading MTL file: " + g), await new Promise((d, f) => {
7302
7310
  i.materialsLoader.load(g.toString(), (I) => {
7303
7311
  i.setMaterials(I), d();
@@ -7,7 +7,7 @@ ${i.code}
7
7
 
8
8
  }`}getUniforms(e){const t=this.uniforms[e];let i="";for(const s of t){if(/^(modelViewMatrix|projectionMatrix)$/.test(s.name))continue;let n=null;s.type==="texture"?n=`sampler2D ${s.name}; `:s.type==="cubeTexture"?n=`samplerCube ${s.name}; `:n=`${this.getVectorType(s.type)} ${s.name}; `;const a=s.node.precision;a!==null?n="uniform "+Gr[a]+" "+n:n="uniform "+n,i+=n}return i}getAttributes(e){let t="";if(e==="vertex"){const i=this.attributes;for(const s of i)/^(position|normal|uv[1-3]?)$/.test(s.name)||(t+=`attribute ${s.type} ${s.name}; `)}return t}getVaryings(e){let t="";const i=this.varyings;if(e==="vertex")for(const s of i)t+=`${s.needsInterpolation?"varying":"/*varying*/"} ${s.type} ${s.name}; `;else if(e==="fragment")for(const s of i)s.needsInterpolation&&(t+=`varying ${s.type} ${s.name}; `);return t}addCode(e,t,i,s=this){const n=Bs(e);let a=s[n];const r=a.indexOf(t);if(r!==-1){const A=a.substring(0,r+t.length),c=a.substring(r+t.length);a=`${A}
9
9
  ${i}
10
- ${c}`}s[n]=a}replaceCode(e,t,i,s=this){const n=Bs(e);s[n]=s[n].replaceAll(t,i)}getVertexIndex(){return"gl_VertexID"}getFrontFacing(){return"gl_FrontFacing"}getFragCoord(){return"gl_FragCoord"}isFlipY(){return!0}buildCode(){const e={};for(const t of Hs){const i=this.getUniforms(t),s=this.getAttributes(t),n=this.getVaryings(t),a=this.getVars(t),r=this.getCodes(t);e[t]=`${this.getSignature()}
10
+ ${c}`}s[n]=a}replaceCode(e,t,i,s=this){const n=Bs(e);s[n]=s[n].replaceAll(t,i)}getVertexIndex(){return"gl_VertexID"}getFrontFacing(){return"gl_FrontFacing"}getFragCoord(){return"gl_FragCoord"}isFlipY(){return!0}buildCode(){const e={};for(const t of Hs){const i=this.getUniforms(t),s=this.getAttributes(t),n=this.getVaryings(t);let a=this.getVars(t);a=a.replace("mat4 modelViewMatrix;","");const r=this.getCodes(t);e[t]=`${this.getSignature()}
11
11
  // <node_builder>
12
12
 
13
13
  // uniforms
@@ -38,7 +38,7 @@ ${this.shader[Bs(t)]}
38
38
  `;T=i(m),T!==!1;){if(x.string+=T+`
39
39
  `,T.charAt(0)==="#"){x.comments+=T+`
40
40
  `;continue}if((S=T.match(E))&&(x.gamma=parseFloat(S[1])),(S=T.match(C))&&(x.exposure=parseFloat(S[1])),(S=T.match(y))&&(x.valid|=2,x.format=S[1]),(S=T.match(w))&&(x.valid|=4,x.height=parseInt(S[1],10),x.width=parseInt(S[2],10)),x.valid&2&&x.valid&4)break}return x.valid&2||t(3,"missing format specifier"),x.valid&4||t(3,"missing image size specifier"),x},n=function(m,I,E){const C=I;if(C<8||C>32767||m[0]!==2||m[1]!==2||m[2]&128)return new Uint8Array(m);C!==(m[2]<<8|m[3])&&t(3,"wrong scanline width");const y=new Uint8Array(4*I*E);y.length||t(4,"unable to allocate buffer space");let w=0,x=0;const T=4*C,S=new Uint8Array(4),_=new Uint8Array(T);let Y=E;for(;Y>0&&x<m.byteLength;){x+4>m.byteLength&&t(1),S[0]=m[x++],S[1]=m[x++],S[2]=m[x++],S[3]=m[x++],(S[0]!=2||S[1]!=2||(S[2]<<8|S[3])!=C)&&t(3,"bad rgbe scanline format");let V=0,K;for(;V<T&&x<m.byteLength;){K=m[x++];const j=K>128;if(j&&(K-=128),(K===0||V+K>T)&&t(3,"bad scanline data"),j){const X=m[x++];for(let J=0;J<K;J++)_[V++]=X}else _.set(m.subarray(x,x+K),V),V+=K,x+=K}const W=C;for(let j=0;j<W;j++){let X=0;y[w]=_[j+X],X+=C,y[w+1]=_[j+X],X+=C,y[w+2]=_[j+X],X+=C,y[w+3]=_[j+X],w+=4}Y--}return y},a=function(m,I,E,C){const y=m[I+3],w=Math.pow(2,y-128)/255;E[C+0]=m[I+0]*w,E[C+1]=m[I+1]*w,E[C+2]=m[I+2]*w,E[C+3]=1},r=function(m,I,E,C){const y=m[I+3],w=Math.pow(2,y-128)/255;E[C+0]=os.toHalfFloat(Math.min(m[I+0]*w,65504)),E[C+1]=os.toHalfFloat(Math.min(m[I+1]*w,65504)),E[C+2]=os.toHalfFloat(Math.min(m[I+2]*w,65504)),E[C+3]=os.toHalfFloat(1)},A=new Uint8Array(e);A.pos=0;const c=s(A),l=c.width,h=c.height,d=n(A.subarray(A.pos),l,h);let p,f,b;switch(this.type){case ut:b=d.length/4;const m=new Float32Array(b*4);for(let E=0;E<b;E++)a(d,E*4,m,E*4);p=m,f=ut;break;case Ze:b=d.length/4;const I=new Uint16Array(b*4);for(let E=0;E<b;E++)r(d,E*4,I,E*4);p=I,f=Ze;break;default:throw new Error("THREE.RGBELoader: Unsupported type: "+this.type)}return{width:l,height:h,data:p,header:c.string,gamma:c.gamma,exposure:c.exposure,type:f}}setDataType(e){return this.type=e,this}load(e,t,i,s){function n(a,r){switch(a.type){case ut:case Ze:a.colorSpace=We,a.minFilter=at,a.magFilter=at,a.generateMipmaps=!1,a.flipY=!0;break}t&&t(a,r)}return super.load(e,n,i,s)}}const xc=Object.freeze(Object.defineProperty({__proto__:null,RGBELoader:$a},Symbol.toStringTag,{value:"Module"}));function eo(o,e,t){const i=t.length-o-1;if(e>=t[i])return i-1;if(e<=t[o])return o;let s=o,n=i,a=Math.floor((s+n)/2);for(;e<t[a]||e>=t[a+1];)e<t[a]?n=a:s=a,a=Math.floor((s+n)/2);return a}function Sc(o,e,t,i){const s=[],n=[],a=[];s[0]=1;for(let r=1;r<=t;++r){n[r]=e-i[o+1-r],a[r]=i[o+r]-e;let A=0;for(let c=0;c<r;++c){const l=a[c+1],h=n[r-c],d=s[c]/(l+h);s[c]=A+l*d,A=h*d}s[r]=A}return s}function Tc(o,e,t,i){const s=eo(o,i,e),n=Sc(s,i,o,e),a=new Mt(0,0,0,0);for(let r=0;r<=o;++r){const A=t[s-o+r],c=n[r],l=A.w*c;a.x+=A.x*l,a.y+=A.y*l,a.z+=A.z*l,a.w+=A.w*c}return a}function Rc(o,e,t,i,s){const n=[];for(let h=0;h<=t;++h)n[h]=0;const a=[];for(let h=0;h<=i;++h)a[h]=n.slice(0);const r=[];for(let h=0;h<=t;++h)r[h]=n.slice(0);r[0][0]=1;const A=n.slice(0),c=n.slice(0);for(let h=1;h<=t;++h){A[h]=e-s[o+1-h],c[h]=s[o+h]-e;let d=0;for(let p=0;p<h;++p){const f=c[p+1],b=A[h-p];r[h][p]=f+b;const m=r[p][h-1]/r[h][p];r[p][h]=d+f*m,d=b*m}r[h][h]=d}for(let h=0;h<=t;++h)a[0][h]=r[h][t];for(let h=0;h<=t;++h){let d=0,p=1;const f=[];for(let b=0;b<=t;++b)f[b]=n.slice(0);f[0][0]=1;for(let b=1;b<=i;++b){let m=0;const I=h-b,E=t-b;h>=b&&(f[p][0]=f[d][0]/r[E+1][I],m=f[p][0]*r[I][E]);const C=I>=-1?1:-I,y=h-1<=E?b-1:t-h;for(let x=C;x<=y;++x)f[p][x]=(f[d][x]-f[d][x-1])/r[E+1][I+x],m+=f[p][x]*r[I+x][E];h<=E&&(f[p][b]=-f[d][b-1]/r[E+1][h],m+=f[p][b]*r[h][E]),a[b][h]=m;const w=d;d=p,p=w}}let l=t;for(let h=1;h<=i;++h){for(let d=0;d<=t;++d)a[h][d]*=l;l*=t-h}return a}function Dc(o,e,t,i,s){const n=s<o?s:o,a=[],r=eo(o,i,e),A=Rc(r,i,o,n,e),c=[];for(let l=0;l<t.length;++l){const h=t[l].clone(),d=h.w;h.x*=d,h.y*=d,h.z*=d,c[l]=h}for(let l=0;l<=n;++l){const h=c[r-o].clone().multiplyScalar(A[l][0]);for(let d=1;d<=o;++d)h.add(c[r-o+d].clone().multiplyScalar(A[l][d]));a[l]=h}for(let l=n+1;l<=s+1;++l)a[l]=new Mt(0,0,0);return a}function Mc(o,e){let t=1;for(let s=2;s<=o;++s)t*=s;let i=1;for(let s=2;s<=e;++s)i*=s;for(let s=2;s<=o-e;++s)i*=s;return t/i}function kc(o){const e=o.length,t=[],i=[];for(let n=0;n<e;++n){const a=o[n];t[n]=new N(a.x,a.y,a.z),i[n]=a.w}const s=[];for(let n=0;n<e;++n){const a=t[n].clone();for(let r=1;r<=n;++r)a.sub(s[n-r].clone().multiplyScalar(Mc(n,r)*i[r]));s[n]=a.divideScalar(i[0])}return s}function _c(o,e,t,i,s){const n=Dc(o,e,t,i,s);return kc(n)}class Fc extends Cr{constructor(e,t,i,s,n){super(),this.degree=e,this.knots=t,this.controlPoints=[],this.startKnot=s||0,this.endKnot=n||this.knots.length-1;for(let a=0;a<i.length;++a){const r=i[a];this.controlPoints[a]=new Mt(r.x,r.y,r.z,r.w)}}getPoint(e,t=new N){const i=t,s=this.knots[this.startKnot]+e*(this.knots[this.endKnot]-this.knots[this.startKnot]),n=Tc(this.degree,this.knots,this.controlPoints,s);return n.w!==1&&n.divideScalar(n.w),i.set(n.x,n.y,n.z)}getTangent(e,t=new N){const i=t,s=this.knots[0]+e*(this.knots[this.knots.length-1]-this.knots[0]),n=_c(this.degree,this.knots,this.controlPoints,s,1);return i.copy(n[1]).normalize(),i}}let ie,Se,Ve;class Lc extends Tt{constructor(e){super(e)}load(e,t,i,s){const n=this,a=n.path===""?Jt.extractUrlBase(e):n.path,r=new dt(this.manager);r.setPath(n.path),r.setResponseType("arraybuffer"),r.setRequestHeader(n.requestHeader),r.setWithCredentials(n.withCredentials),r.load(e,function(A){try{t(n.parse(A,a))}catch(c){s?s(c):console.error(c),n.manager.itemError(e)}},i,s)}parse(e,t){if(Hc(e))ie=new Oc().parse(e);else{const s=ao(e);if(!jc(s))throw new Error("THREE.FBXLoader: Unknown format.");if(io(s)<7e3)throw new Error("THREE.FBXLoader: FBX version not supported, FileVersion: "+io(s));ie=new Pc().parse(s)}const i=new ui(this.manager).setPath(this.resourcePath||t).setCrossOrigin(this.crossOrigin);return new Nc(i,this.manager).parse(ie)}getFbxTree(){return ie}}class Nc{constructor(e,t){this.textureLoader=e,this.manager=t}parse(){Se=this.parseConnections();const e=this.parseImages(),t=this.parseTextures(e),i=this.parseMaterials(t),s=this.parseDeformers(),n=new Uc().parse(s);return this.parseScene(s,n,i),Ve}parseConnections(){const e=new Map;return"Connections"in ie&&ie.Connections.connections.forEach(function(t){const i=t[0],s=t[1],n=t[2];e.has(i)||e.set(i,{parents:[],children:[]});const a={ID:s,relationship:n};e.get(i).parents.push(a),e.has(s)||e.set(s,{parents:[],children:[]});const r={ID:i,relationship:n};e.get(s).children.push(r)}),e}parseImages(){const e={},t={};if("Video"in ie.Objects){const i=ie.Objects.Video;for(const s in i){const n=i[s],a=parseInt(s);if(e[a]=n.RelativeFilename||n.Filename,"Content"in n){const r=n.Content instanceof ArrayBuffer&&n.Content.byteLength>0,A=typeof n.Content=="string"&&n.Content!=="";if(r||A){const c=this.parseImage(i[s]);t[n.RelativeFilename||n.Filename]=c}}}}for(const i in e){const s=e[i];t[s]!==void 0?e[i]=t[s]:e[i]=e[i].split("\\").pop()}return e}parseImage(e){const t=e.Content,i=e.RelativeFilename||e.Filename,s=i.slice(i.lastIndexOf(".")+1).toLowerCase();let n;switch(s){case"bmp":n="image/bmp";break;case"jpg":case"jpeg":n="image/jpeg";break;case"png":n="image/png";break;case"tif":n="image/tiff";break;case"tga":this.manager.getHandler(".tga")===null&&console.warn("FBXLoader: TGA loader not found, skipping ",i),n="image/tga";break;default:console.warn('FBXLoader: Image type "'+s+'" is not supported.');return}if(typeof t=="string")return"data:"+n+";base64,"+t;{const a=new Uint8Array(t);return window.URL.createObjectURL(new Blob([a],{type:n}))}}parseTextures(e){const t=new Map;if("Texture"in ie.Objects){const i=ie.Objects.Texture;for(const s in i){const n=this.parseTexture(i[s],e);t.set(parseInt(s),n)}}return t}parseTexture(e,t){const i=this.loadTexture(e,t);i.ID=e.id,i.name=e.attrName;const s=e.WrapModeU,n=e.WrapModeV,a=s!==void 0?s.value:0,r=n!==void 0?n.value:0;if(i.wrapS=a===0?Vt:qs,i.wrapT=r===0?Vt:qs,"Scaling"in e){const A=e.Scaling.value;i.repeat.x=A[0],i.repeat.y=A[1]}if("Translation"in e){const A=e.Translation.value;i.offset.x=A[0],i.offset.y=A[1]}return i}loadTexture(e,t){const i=new Set(["tga","tif","tiff","exr","dds","hdr","ktx2"]),s=e.FileName.split(".").pop().toLowerCase(),n=i.has(s)?this.manager.getHandler(`.${s}`):this.textureLoader;if(!n)return console.warn(`FBXLoader: ${s.toUpperCase()} loader not found, creating placeholder texture for`,e.RelativeFilename),new Ci;const a=n.path;a||n.setPath(this.textureLoader.path);const r=Se.get(e.id).children;let A;r!==void 0&&r.length>0&&t[r[0].ID]!==void 0&&(A=t[r[0].ID],(A.indexOf("blob:")===0||A.indexOf("data:")===0)&&n.setPath(void 0));const c=n.load(A);return n.setPath(a),c}parseMaterials(e){const t=new Map;if("Material"in ie.Objects){const i=ie.Objects.Material;for(const s in i){const n=this.parseMaterial(i[s],e);n!==null&&t.set(parseInt(s),n)}}return t}parseMaterial(e,t){const i=e.id,s=e.attrName;let n=e.ShadingModel;if(typeof n=="object"&&(n=n.value),!Se.has(i))return null;const a=this.parseParameters(e,t,i);let r;switch(n.toLowerCase()){case"phong":r=new Cs;break;case"lambert":r=new Br;break;default:console.warn('THREE.FBXLoader: unknown material type "%s". Defaulting to MeshPhongMaterial.',n),r=new Cs;break}return r.setValues(a),r.name=s,r}parseParameters(e,t,i){const s={};e.BumpFactor&&(s.bumpScale=e.BumpFactor.value),e.Diffuse?s.color=Xe.toWorkingColorSpace(new we().fromArray(e.Diffuse.value),le):e.DiffuseColor&&(e.DiffuseColor.type==="Color"||e.DiffuseColor.type==="ColorRGB")&&(s.color=Xe.toWorkingColorSpace(new we().fromArray(e.DiffuseColor.value),le)),e.DisplacementFactor&&(s.displacementScale=e.DisplacementFactor.value),e.Emissive?s.emissive=Xe.toWorkingColorSpace(new we().fromArray(e.Emissive.value),le):e.EmissiveColor&&(e.EmissiveColor.type==="Color"||e.EmissiveColor.type==="ColorRGB")&&(s.emissive=Xe.toWorkingColorSpace(new we().fromArray(e.EmissiveColor.value),le)),e.EmissiveFactor&&(s.emissiveIntensity=parseFloat(e.EmissiveFactor.value)),e.Opacity&&(s.opacity=parseFloat(e.Opacity.value)),s.opacity<1&&(s.transparent=!0),e.ReflectionFactor&&(s.reflectivity=e.ReflectionFactor.value),e.Shininess&&(s.shininess=e.Shininess.value),e.Specular?s.specular=Xe.toWorkingColorSpace(new we().fromArray(e.Specular.value),le):e.SpecularColor&&e.SpecularColor.type==="Color"&&(s.specular=Xe.toWorkingColorSpace(new we().fromArray(e.SpecularColor.value),le));const n=this;return Se.get(i).children.forEach(function(a){const r=a.relationship;switch(r){case"Bump":s.bumpMap=n.getTexture(t,a.ID);break;case"Maya|TEX_ao_map":s.aoMap=n.getTexture(t,a.ID);break;case"DiffuseColor":case"Maya|TEX_color_map":s.map=n.getTexture(t,a.ID),s.map!==void 0&&(s.map.colorSpace=le);break;case"DisplacementColor":s.displacementMap=n.getTexture(t,a.ID);break;case"EmissiveColor":s.emissiveMap=n.getTexture(t,a.ID),s.emissiveMap!==void 0&&(s.emissiveMap.colorSpace=le);break;case"NormalMap":case"Maya|TEX_normal_map":s.normalMap=n.getTexture(t,a.ID);break;case"ReflectionColor":s.envMap=n.getTexture(t,a.ID),s.envMap!==void 0&&(s.envMap.mapping=wr,s.envMap.colorSpace=le);break;case"SpecularColor":s.specularMap=n.getTexture(t,a.ID),s.specularMap!==void 0&&(s.specularMap.colorSpace=le);break;case"TransparentColor":case"TransparencyFactor":s.alphaMap=n.getTexture(t,a.ID),s.transparent=!0;break;default:console.warn("THREE.FBXLoader: %s map is not supported in three.js, skipping texture.",r);break}}),s}getTexture(e,t){return"LayeredTexture"in ie.Objects&&t in ie.Objects.LayeredTexture&&(console.warn("THREE.FBXLoader: layered textures are not supported in three.js. Discarding all but first layer."),t=Se.get(t).children[0].ID),e.get(t)}parseDeformers(){const e={},t={};if("Deformer"in ie.Objects){const i=ie.Objects.Deformer;for(const s in i){const n=i[s],a=Se.get(parseInt(s));if(n.attrType==="Skin"){const r=this.parseSkeleton(a,i);r.ID=s,a.parents.length>1&&console.warn("THREE.FBXLoader: skeleton attached to more than one geometry is not supported."),r.geometryID=a.parents[0].ID,e[s]=r}else if(n.attrType==="BlendShape"){const r={id:s};r.rawTargets=this.parseMorphTargets(a,i),r.id=s,a.parents.length>1&&console.warn("THREE.FBXLoader: morph target attached to more than one geometry is not supported."),t[s]=r}}}return{skeletons:e,morphTargets:t}}parseSkeleton(e,t){const i=[];return e.children.forEach(function(s){const n=t[s.ID];if(n.attrType!=="Cluster")return;const a={ID:s.ID,indices:[],weights:[],transformLink:new ce().fromArray(n.TransformLink.a)};"Indexes"in n&&(a.indices=n.Indexes.a,a.weights=n.Weights.a),i.push(a)}),{rawBones:i,bones:[]}}parseMorphTargets(e,t){const i=[];for(let s=0;s<e.children.length;s++){const n=e.children[s],a=t[n.ID],r={name:a.attrName,initialWeight:a.DeformPercent,id:a.id,fullWeights:a.FullWeights.a};if(a.attrType!=="BlendShapeChannel")return;r.geoID=Se.get(parseInt(n.ID)).children.filter(function(A){return A.relationship===void 0})[0].ID,i.push(r)}return i}parseScene(e,t,i){Ve=new Wt;const s=this.parseModels(e.skeletons,t,i),n=ie.Objects.Model,a=this;s.forEach(function(A){const c=n[A.ID];a.setLookAtProperties(A,c),Se.get(A.ID)?.parents?.forEach(function(l){const h=s.get(l.ID);h!==void 0&&h.add(A)}),A.parent===null&&Ve.add(A)}),this.bindSkeleton(e.skeletons,t,s),this.addGlobalSceneSettings(),Ve.traverse(function(A){if(A.userData.transformData){A.parent&&(A.userData.transformData.parentMatrix=A.parent.matrix,A.userData.transformData.parentMatrixWorld=A.parent.matrixWorld);const c=no(A.userData.transformData);A.applyMatrix4(c),A.updateWorldMatrix()}A.isSkinnedMesh&&(A.computeBoundingBox(),A.computeBoundingSphere(),A.boundingBox.expandByScalar(3),A.boundingSphere.radius*=3)});const r=new Gc().parse();Ve.children.length===1&&Ve.children[0].isGroup&&(Ve.children[0].animations=r,Ve=Ve.children[0]),Ve.animations=r}parseModels(e,t,i){const s=new Map,n=ie.Objects.Model;for(const a in n){const r=parseInt(a),A=n[a],c=Se.get(r);let l=this.buildSkeleton(c,e,r,A.attrName);if(!l){switch(A.attrType){case"Camera":l=this.createCamera(c);break;case"Light":l=this.createLight(c);break;case"Mesh":l=this.createMesh(c,t,i);break;case"NurbsCurve":l=this.createCurve(c,t);break;case"LimbNode":case"Root":l=new Ii;break;default:l=new Wt;break}l.name=A.attrName?Dt.sanitizeNodeName(A.attrName):"",l.userData.originalName=A.attrName,l.ID=r}this.getTransformData(l,A),s.set(r,l)}return s}buildSkeleton(e,t,i,s){let n=null;return e?.parents.forEach(function(a){for(const r in t){const A=t[r];A.rawBones.forEach(function(c,l){if(c.ID===a.ID){const h=n;n=new Ii,n.matrixWorld.copy(c.transformLink),n.name=s?Dt.sanitizeNodeName(s):"",n.userData.originalName=s,n.ID=i,A.bones[l]=n,h!==null&&n.add(h)}})}}),n}createCamera(e){let t,i;if(e.children.forEach(function(s){const n=ie.Objects.NodeAttribute[s.ID];n!==void 0&&(i=n)}),i===void 0)t=new Bt;else{let s=0;i.CameraProjectionType!==void 0&&i.CameraProjectionType.value===1&&(s=1);let n=1;i.NearPlane!==void 0&&(n=i.NearPlane.value/1e3);let a=1e3;i.FarPlane!==void 0&&(a=i.FarPlane.value/1e3);let r=window.innerWidth,A=window.innerHeight;i.AspectWidth!==void 0&&i.AspectHeight!==void 0&&(r=i.AspectWidth.value,A=i.AspectHeight.value);const c=r/A;let l=45;i.FieldOfView!==void 0&&(l=i.FieldOfView.value);const h=i.FocalLength?i.FocalLength.value:null;switch(s){case 0:t=new Os(l,c,n,a),h!==null&&t.setFocalLength(h);break;case 1:console.warn("THREE.FBXLoader: Orthographic cameras not supported yet."),t=new Bt;break;default:console.warn("THREE.FBXLoader: Unknown camera type "+s+"."),t=new Bt;break}}return t}createLight(e){let t,i;if(e.children.forEach(function(s){const n=ie.Objects.NodeAttribute[s.ID];n!==void 0&&(i=n)}),i===void 0)t=new Bt;else{let s;i.LightType===void 0?s=0:s=i.LightType.value;let n=16777215;i.Color!==void 0&&(n=Xe.toWorkingColorSpace(new we().fromArray(i.Color.value),le));let a=i.Intensity===void 0?1:i.Intensity.value/100;i.CastLightOnObject!==void 0&&i.CastLightOnObject.value===0&&(a=0);let r=0;i.FarAttenuationEnd!==void 0&&(i.EnableFarAttenuation!==void 0&&i.EnableFarAttenuation.value===0?r=0:r=i.FarAttenuationEnd.value);const A=1;switch(s){case 0:t=new pi(n,a,r,A);break;case 1:t=new Tn(n,a);break;case 2:let c=Math.PI/3;i.InnerAngle!==void 0&&(c=Ce.degToRad(i.InnerAngle.value));let l=0;i.OuterAngle!==void 0&&(l=Ce.degToRad(i.OuterAngle.value),l=Math.max(l,1)),t=new Sn(n,a,r,c,l,A);break;default:console.warn("THREE.FBXLoader: Unknown light type "+i.LightType.value+", defaulting to a PointLight."),t=new pi(n,a);break}i.CastShadows!==void 0&&i.CastShadows.value===1&&(t.castShadow=!0)}return t}createMesh(e,t,i){let s,n=null,a=null;const r=[];if(e.children.forEach(function(A){t.has(A.ID)&&(n=t.get(A.ID)),i.has(A.ID)&&r.push(i.get(A.ID))}),r.length>1?a=r:r.length>0?a=r[0]:(a=new Cs({name:Tt.DEFAULT_MATERIAL_NAME,color:13421772}),r.push(a)),"color"in n.attributes&&r.forEach(function(A){A.vertexColors=!0}),n.groups.length>0){let A=!1;for(let c=0,l=n.groups.length;c<l;c++){const h=n.groups[c];(h.materialIndex<0||h.materialIndex>=r.length)&&(h.materialIndex=r.length,A=!0)}if(A){const c=new mi;r.push(c)}}return n.FBX_Deformer?(s=new kn(n,a),s.normalizeSkinWeights()):s=new O(n,a),s}createCurve(e,t){const i=e.children.reduce(function(n,a){return t.has(a.ID)&&(n=t.get(a.ID)),n},null),s=new Rt({name:Tt.DEFAULT_MATERIAL_NAME,color:3342591,linewidth:1});return new pt(i,s)}getTransformData(e,t){const i={};"InheritType"in t&&(i.inheritType=parseInt(t.InheritType.value)),"RotationOrder"in t?i.eulerOrder=Fs(t.RotationOrder.value):i.eulerOrder=Fs(0),"Lcl_Translation"in t&&(i.translation=t.Lcl_Translation.value),"PreRotation"in t&&(i.preRotation=t.PreRotation.value),"Lcl_Rotation"in t&&(i.rotation=t.Lcl_Rotation.value),"PostRotation"in t&&(i.postRotation=t.PostRotation.value),"Lcl_Scaling"in t&&(i.scale=t.Lcl_Scaling.value),"ScalingOffset"in t&&(i.scalingOffset=t.ScalingOffset.value),"ScalingPivot"in t&&(i.scalingPivot=t.ScalingPivot.value),"RotationOffset"in t&&(i.rotationOffset=t.RotationOffset.value),"RotationPivot"in t&&(i.rotationPivot=t.RotationPivot.value),e.userData.transformData=i}setLookAtProperties(e,t){"LookAtProperty"in t&&Se.get(e.ID).children.forEach(function(i){if(i.relationship==="LookAtProperty"){const s=ie.Objects.Model[i.ID];if("Lcl_Translation"in s){const n=s.Lcl_Translation.value;e.target!==void 0?(e.target.position.fromArray(n),Ve.add(e.target)):e.lookAt(new N().fromArray(n))}}})}bindSkeleton(e,t,i){const s=this.parsePoseNodes();for(const n in e){const a=e[n];Se.get(parseInt(a.ID)).parents.forEach(function(r){if(t.has(r.ID)){const A=r.ID;Se.get(A).parents.forEach(function(c){i.has(c.ID)&&i.get(c.ID).bind(new Fn(a.bones),s[c.ID])})}})}}parsePoseNodes(){const e={};if("Pose"in ie.Objects){const t=ie.Objects.Pose;for(const i in t)if(t[i].attrType==="BindPose"&&t[i].NbPoseNodes>0){const s=t[i].PoseNode;Array.isArray(s)?s.forEach(function(n){e[n.Node]=new ce().fromArray(n.Matrix.a)}):e[s.Node]=new ce().fromArray(s.Matrix.a)}}return e}addGlobalSceneSettings(){if("GlobalSettings"in ie){if("AmbientColor"in ie.GlobalSettings){const e=ie.GlobalSettings.AmbientColor.value,t=e[0],i=e[1],s=e[2];if(t!==0||i!==0||s!==0){const n=new we().setRGB(t,i,s,le);Ve.add(new yr(n,1))}}"UnitScaleFactor"in ie.GlobalSettings&&(Ve.userData.unitScaleFactor=ie.GlobalSettings.UnitScaleFactor.value)}}}class Uc{constructor(){this.negativeMaterialIndices=!1}parse(e){const t=new Map;if("Geometry"in ie.Objects){const i=ie.Objects.Geometry;for(const s in i){const n=Se.get(parseInt(s)),a=this.parseGeometry(n,i[s],e);t.set(parseInt(s),a)}}return this.negativeMaterialIndices===!0&&console.warn("THREE.FBXLoader: The FBX file contains invalid (negative) material indices. The asset might not render as expected."),t}parseGeometry(e,t,i){switch(t.attrType){case"Mesh":return this.parseMeshGeometry(e,t,i);case"NurbsCurve":return this.parseNurbsGeometry(t)}}parseMeshGeometry(e,t,i){const s=i.skeletons,n=[],a=e.parents.map(function(h){return ie.Objects.Model[h.ID]});if(a.length===0)return;const r=e.children.reduce(function(h,d){return s[d.ID]!==void 0&&(h=s[d.ID]),h},null);e.children.forEach(function(h){i.morphTargets[h.ID]!==void 0&&n.push(i.morphTargets[h.ID])});const A=a[0],c={};"RotationOrder"in A&&(c.eulerOrder=Fs(A.RotationOrder.value)),"InheritType"in A&&(c.inheritType=parseInt(A.InheritType.value)),"GeometricTranslation"in A&&(c.translation=A.GeometricTranslation.value),"GeometricRotation"in A&&(c.rotation=A.GeometricRotation.value),"GeometricScaling"in A&&(c.scale=A.GeometricScaling.value);const l=no(c);return this.genGeometry(t,r,n,l)}genGeometry(e,t,i,s){const n=new ct;e.attrName&&(n.name=e.attrName);const a=this.parseGeoNode(e,t),r=this.genBuffers(a),A=new Me(r.vertex,3);if(A.applyMatrix4(s),n.setAttribute("position",A),r.colors.length>0&&n.setAttribute("color",new Me(r.colors,3)),t&&(n.setAttribute("skinIndex",new Qr(r.weightsIndices,4)),n.setAttribute("skinWeight",new Me(r.vertexWeights,4)),n.FBX_Deformer=t),r.normal.length>0){const c=new Jn().getNormalMatrix(s),l=new Me(r.normal,3);l.applyNormalMatrix(c),n.setAttribute("normal",l)}if(r.uvs.forEach(function(c,l){const h=l===0?"uv":`uv${l}`;n.setAttribute(h,new Me(r.uvs[l],2))}),a.material&&a.material.mappingType!=="AllSame"){let c=r.materialIndex[0],l=0;if(r.materialIndex.forEach(function(h,d){h!==c&&(n.addGroup(l,d-l,c),c=h,l=d)}),n.groups.length>0){const h=n.groups[n.groups.length-1],d=h.start+h.count;d!==r.materialIndex.length&&n.addGroup(d,r.materialIndex.length-d,c)}n.groups.length===0&&n.addGroup(0,r.materialIndex.length,r.materialIndex[0])}return this.addMorphTargets(n,e,i,s),n}parseGeoNode(e,t){const i={};if(i.vertexPositions=e.Vertices!==void 0?e.Vertices.a:[],i.vertexIndices=e.PolygonVertexIndex!==void 0?e.PolygonVertexIndex.a:[],e.LayerElementColor&&(i.color=this.parseVertexColors(e.LayerElementColor[0])),e.LayerElementMaterial&&(i.material=this.parseMaterialIndices(e.LayerElementMaterial[0])),e.LayerElementNormal&&(i.normal=this.parseNormals(e.LayerElementNormal[0])),e.LayerElementUV){i.uv=[];let s=0;for(;e.LayerElementUV[s];)e.LayerElementUV[s].UV&&i.uv.push(this.parseUVs(e.LayerElementUV[s])),s++}return i.weightTable={},t!==null&&(i.skeleton=t,t.rawBones.forEach(function(s,n){s.indices.forEach(function(a,r){i.weightTable[a]===void 0&&(i.weightTable[a]=[]),i.weightTable[a].push({id:n,weight:s.weights[r]})})})),i}genBuffers(e){const t={vertex:[],normal:[],colors:[],uvs:[],materialIndex:[],vertexWeights:[],weightsIndices:[]};let i=0,s=0,n=!1,a=[],r=[],A=[],c=[],l=[],h=[];const d=this;return e.vertexIndices.forEach(function(p,f){let b,m=!1;p<0&&(p=p^-1,m=!0);let I=[],E=[];if(a.push(p*3,p*3+1,p*3+2),e.color){const C=ii(f,i,p,e.color);A.push(C[0],C[1],C[2])}if(e.skeleton){if(e.weightTable[p]!==void 0&&e.weightTable[p].forEach(function(C){E.push(C.weight),I.push(C.id)}),E.length>4){n||(console.warn("THREE.FBXLoader: Vertex has more than 4 skinning weights assigned to vertex. Deleting additional weights."),n=!0);const C=[0,0,0,0],y=[0,0,0,0];E.forEach(function(w,x){let T=w,S=I[x];y.forEach(function(_,Y,V){if(T>_){V[Y]=T,T=_;const K=C[Y];C[Y]=S,S=K}})}),I=C,E=y}for(;E.length<4;)E.push(0),I.push(0);for(let C=0;C<4;++C)l.push(E[C]),h.push(I[C])}if(e.normal){const C=ii(f,i,p,e.normal);r.push(C[0],C[1],C[2])}e.material&&e.material.mappingType!=="AllSame"&&(b=ii(f,i,p,e.material)[0],b<0&&(d.negativeMaterialIndices=!0,b=0)),e.uv&&e.uv.forEach(function(C,y){const w=ii(f,i,p,C);c[y]===void 0&&(c[y]=[]),c[y].push(w[0]),c[y].push(w[1])}),s++,m&&(d.genFace(t,e,a,b,r,A,c,l,h,s),i++,s=0,a=[],r=[],A=[],c=[],l=[],h=[])}),t}getNormalNewell(e){const t=new N(0,0,0);for(let i=0;i<e.length;i++){const s=e[i],n=e[(i+1)%e.length];t.x+=(s.y-n.y)*(s.z+n.z),t.y+=(s.z-n.z)*(s.x+n.x),t.z+=(s.x-n.x)*(s.y+n.y)}return t.normalize(),t}getNormalTangentAndBitangent(e){const t=this.getNormalNewell(e),i=(Math.abs(t.z)>.5?new N(0,1,0):new N(0,0,1)).cross(t).normalize(),s=t.clone().cross(i).normalize();return{normal:t,tangent:i,bitangent:s}}flattenVertex(e,t,i){return new Le(e.dot(t),e.dot(i))}genFace(e,t,i,s,n,a,r,A,c,l){let h;if(l>3){const d=[],p=t.baseVertexPositions||t.vertexPositions;for(let I=0;I<i.length;I+=3)d.push(new N(p[i[I]],p[i[I+1]],p[i[I+2]]));const{tangent:f,bitangent:b}=this.getNormalTangentAndBitangent(d),m=[];for(const I of d)m.push(this.flattenVertex(I,f,b));h=vr.triangulateShape(m,[])}else l===2?(console.warn("THREE.FBXLoader: Edge topology detected. This is currently not supported. The resulting mesh will not be correct."),h=[[0,1,2]]):h=[[0,1,2]];for(const[d,p,f]of h)e.vertex.push(t.vertexPositions[i[d*3]]),e.vertex.push(t.vertexPositions[i[d*3+1]]),e.vertex.push(t.vertexPositions[i[d*3+2]]),e.vertex.push(t.vertexPositions[i[p*3]]),e.vertex.push(t.vertexPositions[i[p*3+1]]),e.vertex.push(t.vertexPositions[i[p*3+2]]),e.vertex.push(t.vertexPositions[i[f*3]]),e.vertex.push(t.vertexPositions[i[f*3+1]]),e.vertex.push(t.vertexPositions[i[f*3+2]]),t.skeleton&&(e.vertexWeights.push(A[d*4]),e.vertexWeights.push(A[d*4+1]),e.vertexWeights.push(A[d*4+2]),e.vertexWeights.push(A[d*4+3]),e.vertexWeights.push(A[p*4]),e.vertexWeights.push(A[p*4+1]),e.vertexWeights.push(A[p*4+2]),e.vertexWeights.push(A[p*4+3]),e.vertexWeights.push(A[f*4]),e.vertexWeights.push(A[f*4+1]),e.vertexWeights.push(A[f*4+2]),e.vertexWeights.push(A[f*4+3]),e.weightsIndices.push(c[d*4]),e.weightsIndices.push(c[d*4+1]),e.weightsIndices.push(c[d*4+2]),e.weightsIndices.push(c[d*4+3]),e.weightsIndices.push(c[p*4]),e.weightsIndices.push(c[p*4+1]),e.weightsIndices.push(c[p*4+2]),e.weightsIndices.push(c[p*4+3]),e.weightsIndices.push(c[f*4]),e.weightsIndices.push(c[f*4+1]),e.weightsIndices.push(c[f*4+2]),e.weightsIndices.push(c[f*4+3])),t.color&&(e.colors.push(a[d*3]),e.colors.push(a[d*3+1]),e.colors.push(a[d*3+2]),e.colors.push(a[p*3]),e.colors.push(a[p*3+1]),e.colors.push(a[p*3+2]),e.colors.push(a[f*3]),e.colors.push(a[f*3+1]),e.colors.push(a[f*3+2])),t.material&&t.material.mappingType!=="AllSame"&&(e.materialIndex.push(s),e.materialIndex.push(s),e.materialIndex.push(s)),t.normal&&(e.normal.push(n[d*3]),e.normal.push(n[d*3+1]),e.normal.push(n[d*3+2]),e.normal.push(n[p*3]),e.normal.push(n[p*3+1]),e.normal.push(n[p*3+2]),e.normal.push(n[f*3]),e.normal.push(n[f*3+1]),e.normal.push(n[f*3+2])),t.uv&&t.uv.forEach(function(b,m){e.uvs[m]===void 0&&(e.uvs[m]=[]),e.uvs[m].push(r[m][d*2]),e.uvs[m].push(r[m][d*2+1]),e.uvs[m].push(r[m][p*2]),e.uvs[m].push(r[m][p*2+1]),e.uvs[m].push(r[m][f*2]),e.uvs[m].push(r[m][f*2+1])})}addMorphTargets(e,t,i,s){if(i.length===0)return;e.morphTargetsRelative=!0,e.morphAttributes.position=[];const n=this;i.forEach(function(a){a.rawTargets.forEach(function(r){const A=ie.Objects.Geometry[r.geoID];A!==void 0&&n.genMorphGeometry(e,t,A,s,r.name)})})}genMorphGeometry(e,t,i,s,n){const a=t.Vertices!==void 0?t.Vertices.a:[],r=t.PolygonVertexIndex!==void 0?t.PolygonVertexIndex.a:[],A=i.Vertices!==void 0?i.Vertices.a:[],c=i.Indexes!==void 0?i.Indexes.a:[],l=e.attributes.position.count*3,h=new Float32Array(l);for(let b=0;b<c.length;b++){const m=c[b]*3;h[m]=A[b*3],h[m+1]=A[b*3+1],h[m+2]=A[b*3+2]}const d={vertexIndices:r,vertexPositions:h,baseVertexPositions:a},p=this.genBuffers(d),f=new Me(p.vertex,3);f.name=n||i.attrName,f.applyMatrix4(s),e.morphAttributes.position.push(f)}parseNormals(e){const t=e.MappingInformationType,i=e.ReferenceInformationType,s=e.Normals.a;let n=[];return i==="IndexToDirect"&&("NormalIndex"in e?n=e.NormalIndex.a:"NormalsIndex"in e&&(n=e.NormalsIndex.a)),{dataSize:3,buffer:s,indices:n,mappingType:t,referenceType:i}}parseUVs(e){const t=e.MappingInformationType,i=e.ReferenceInformationType,s=e.UV.a;let n=[];return i==="IndexToDirect"&&(n=e.UVIndex.a),{dataSize:2,buffer:s,indices:n,mappingType:t,referenceType:i}}parseVertexColors(e){if(!e.Colors)return;const t=e.MappingInformationType,i=e.ReferenceInformationType,s=e.Colors.a;let n=[];i==="IndexToDirect"&&(n=e.ColorIndex.a);for(let a=0,r=new we;a<s.length;a+=4)r.fromArray(s,a),Xe.toWorkingColorSpace(r,le),r.toArray(s,a);return{dataSize:4,buffer:s,indices:n,mappingType:t,referenceType:i}}parseMaterialIndices(e){const t=e.MappingInformationType,i=e.ReferenceInformationType;if(t==="NoMappingInformation")return{dataSize:1,buffer:[0],indices:[0],mappingType:"AllSame",referenceType:i};const s=e.Materials.a,n=[];for(let a=0;a<s.length;++a)n.push(a);return{dataSize:1,buffer:s,indices:n,mappingType:t,referenceType:i}}parseNurbsGeometry(e){const t=parseInt(e.Order);if(isNaN(t))return console.error("THREE.FBXLoader: Invalid Order %s given for geometry ID: %s",e.Order,e.id),new ct;const i=t-1,s=e.KnotVector.a,n=[],a=e.Points.a;for(let l=0,h=a.length;l<h;l+=4)n.push(new Mt().fromArray(a,l));let r,A;if(e.Form==="Closed")n.push(n[0]);else if(e.Form==="Periodic"){r=i,A=s.length-1-r;for(let l=0;l<i;++l)n.push(n[l])}const c=new Fc(i,s,n,r,A).getPoints(n.length*12);return new ct().setFromPoints(c)}}class Gc{parse(){const e=[],t=this.parseClips();if(t!==void 0)for(const i in t){const s=t[i],n=this.addClip(s);e.push(n)}return e}parseClips(){if(ie.Objects.AnimationCurve===void 0)return;const e=this.parseAnimationCurveNodes();this.parseAnimationCurves(e);const t=this.parseAnimationLayers(e);return this.parseAnimStacks(t)}parseAnimationCurveNodes(){const e=ie.Objects.AnimationCurveNode,t=new Map;for(const i in e){const s=e[i];if(s.attrName.match(/S|R|T|DeformPercent/)!==null){const n={id:s.id,attr:s.attrName,curves:{}};t.set(n.id,n)}}return t}parseAnimationCurves(e){const t=ie.Objects.AnimationCurve;for(const i in t){const s={id:t[i].id,times:t[i].KeyTime.a.map(qc),values:t[i].KeyValueFloat.a},n=Se.get(s.id);if(n!==void 0){const a=n.parents[0].ID,r=n.parents[0].relationship;r.match(/X/)?e.get(a).curves.x=s:r.match(/Y/)?e.get(a).curves.y=s:r.match(/Z/)?e.get(a).curves.z=s:r.match(/DeformPercent/)&&e.has(a)&&(e.get(a).curves.morph=s)}}}parseAnimationLayers(e){const t=ie.Objects.AnimationLayer,i=new Map;for(const s in t){const n=[],a=Se.get(parseInt(s));a!==void 0&&(a.children.forEach(function(r,A){if(e.has(r.ID)){const c=e.get(r.ID);if(c.curves.x!==void 0||c.curves.y!==void 0||c.curves.z!==void 0){if(n[A]===void 0){const l=Se.get(r.ID).parents.filter(function(h){return h.relationship!==void 0})[0].ID;if(l!==void 0){const h=ie.Objects.Model[l.toString()];if(h===void 0){console.warn("THREE.FBXLoader: Encountered a unused curve.",r);return}const d={modelName:h.attrName?Dt.sanitizeNodeName(h.attrName):"",ID:h.id,initialPosition:[0,0,0],initialRotation:[0,0,0],initialScale:[1,1,1]};Ve.traverse(function(p){p.ID===h.id&&(d.transform=p.matrix,p.userData.transformData&&(d.eulerOrder=p.userData.transformData.eulerOrder))}),d.transform||(d.transform=new ce),"PreRotation"in h&&(d.preRotation=h.PreRotation.value),"PostRotation"in h&&(d.postRotation=h.PostRotation.value),n[A]=d}}n[A]&&(n[A][c.attr]=c)}else if(c.curves.morph!==void 0){if(n[A]===void 0){const l=Se.get(r.ID).parents.filter(function(m){return m.relationship!==void 0})[0].ID,h=Se.get(l).parents[0].ID,d=Se.get(h).parents[0].ID,p=Se.get(d).parents[0].ID,f=ie.Objects.Model[p],b={modelName:f.attrName?Dt.sanitizeNodeName(f.attrName):"",morphName:ie.Objects.Deformer[l].attrName};n[A]=b}n[A][c.attr]=c}}}),i.set(parseInt(s),n))}return i}parseAnimStacks(e){const t=ie.Objects.AnimationStack,i={};for(const s in t){const n=Se.get(parseInt(s)).children;n.length>1&&console.warn("THREE.FBXLoader: Encountered an animation stack with multiple layers, this is currently not supported. Ignoring subsequent layers.");const a=e.get(n[0].ID);i[s]={name:t[s].attrName,layer:a}}return i}addClip(e){let t=[];const i=this;return e.layer.forEach(function(s){t=t.concat(i.generateTracks(s))}),new Ln(e.name,-1,t)}generateTracks(e){const t=[];let i=new N,s=new N;if(e.transform&&e.transform.decompose(i,new ye,s),i=i.toArray(),s=s.toArray(),e.T!==void 0&&Object.keys(e.T.curves).length>0){const n=this.generateVectorTrack(e.modelName,e.T.curves,i,"position");n!==void 0&&t.push(n)}if(e.R!==void 0&&Object.keys(e.R.curves).length>0){const n=this.generateRotationTrack(e.modelName,e.R.curves,e.preRotation,e.postRotation,e.eulerOrder);n!==void 0&&t.push(n)}if(e.S!==void 0&&Object.keys(e.S.curves).length>0){const n=this.generateVectorTrack(e.modelName,e.S.curves,s,"scale");n!==void 0&&t.push(n)}if(e.DeformPercent!==void 0){const n=this.generateMorphTrack(e);n!==void 0&&t.push(n)}return t}generateVectorTrack(e,t,i,s){const n=this.getTimesForAllAxes(t),a=this.getKeyframeTrackValues(n,t,i);return new Bi(e+"."+s,n,a)}generateRotationTrack(e,t,i,s,n){let a,r;if(t.x===void 0||t.y===void 0||t.z===void 0){console.warn("THREE.FBXLoader: Missing rotation curves "+(t.x===void 0?"x ":"")+(t.y===void 0?"y ":"")+(t.z===void 0?"z ":"")+" for animation of "+e+". This is currently not supported.");return}if(t.x!==void 0&&t.y!==void 0&&t.z!==void 0){const d=this.interpolateRotations(t.x,t.y,t.z,n);a=d[0],r=d[1]}const A=Fs(0);i!==void 0&&(i=i.map(Ce.degToRad),i.push(A),i=new Pt().fromArray(i),i=new ye().setFromEuler(i)),s!==void 0&&(s=s.map(Ce.degToRad),s.push(A),s=new Pt().fromArray(s),s=new ye().setFromEuler(s).invert());const c=new ye,l=new Pt,h=[];if(!(!r||!a)){for(let d=0;d<r.length;d+=3)l.set(r[d],r[d+1],r[d+2],n),c.setFromEuler(l),i!==void 0&&c.premultiply(i),s!==void 0&&c.multiply(s),d>2&&new ye().fromArray(h,(d-3)/3*4).dot(c)<0&&c.set(-c.x,-c.y,-c.z,-c.w),c.toArray(h,d/3*4);return new yi(e+".quaternion",a,h)}}generateMorphTrack(e){const t=e.DeformPercent.curves.morph,i=t.values.map(function(n){return n/100}),s=Ve.getObjectByName(e.modelName).morphTargetDictionary[e.morphName];return new wi(e.modelName+".morphTargetInfluences["+s+"]",t.times,i)}getTimesForAllAxes(e){let t=[];if(e.x!==void 0&&(t=t.concat(e.x.times)),e.y!==void 0&&(t=t.concat(e.y.times)),e.z!==void 0&&(t=t.concat(e.z.times)),t=t.sort(function(i,s){return i-s}),t.length>1){let i=1,s=t[0];for(let n=1;n<t.length;n++){const a=t[n];a!==s&&(t[i]=a,s=a,i++)}t=t.slice(0,i)}return t}getKeyframeTrackValues(e,t,i){const s=i,n=[];let a=-1,r=-1,A=-1;return e.forEach(function(c){if(t.x&&(a=t.x.times.indexOf(c)),t.y&&(r=t.y.times.indexOf(c)),t.z&&(A=t.z.times.indexOf(c)),a!==-1){const l=t.x.values[a];n.push(l),s[0]=l}else n.push(s[0]);if(r!==-1){const l=t.y.values[r];n.push(l),s[1]=l}else n.push(s[1]);if(A!==-1){const l=t.z.values[A];n.push(l),s[2]=l}else n.push(s[2])}),n}interpolateRotations(e,t,i,s){const n=[],a=[];n.push(e.times[0]),a.push(Ce.degToRad(e.values[0])),a.push(Ce.degToRad(t.values[0])),a.push(Ce.degToRad(i.values[0]));for(let r=1;r<e.values.length;r++){const A=[e.values[r-1],t.values[r-1],i.values[r-1]];if(isNaN(A[0])||isNaN(A[1])||isNaN(A[2]))continue;const c=A.map(Ce.degToRad),l=[e.values[r],t.values[r],i.values[r]];if(isNaN(l[0])||isNaN(l[1])||isNaN(l[2]))continue;const h=l.map(Ce.degToRad),d=[l[0]-A[0],l[1]-A[1],l[2]-A[2]],p=[Math.abs(d[0]),Math.abs(d[1]),Math.abs(d[2])];if(p[0]>=180||p[1]>=180||p[2]>=180){const f=Math.max(...p)/180,b=new Pt(...c,s),m=new Pt(...h,s),I=new ye().setFromEuler(b),E=new ye().setFromEuler(m);I.dot(E)&&E.set(-E.x,-E.y,-E.z,-E.w);const C=e.times[r-1],y=e.times[r]-C,w=new ye,x=new Pt;for(let T=0;T<1;T+=1/f)w.copy(I.clone().slerp(E.clone(),T)),n.push(C+T*y),x.setFromQuaternion(w,s),a.push(x.x),a.push(x.y),a.push(x.z)}else n.push(e.times[r]),a.push(Ce.degToRad(e.values[r])),a.push(Ce.degToRad(t.values[r])),a.push(Ce.degToRad(i.values[r]))}return[n,a]}}class Pc{getPrevNode(){return this.nodeStack[this.currentIndent-2]}getCurrentNode(){return this.nodeStack[this.currentIndent-1]}getCurrentProp(){return this.currentProp}pushStack(e){this.nodeStack.push(e),this.currentIndent+=1}popStack(){this.nodeStack.pop(),this.currentIndent-=1}setCurrentProp(e,t){this.currentProp=e,this.currentPropName=t}parse(e){this.currentIndent=0,this.allNodes=new so,this.nodeStack=[],this.currentProp=[],this.currentPropName="";const t=this,i=e.split(/[\r\n]+/);return i.forEach(function(s,n){const a=s.match(/^[\s\t]*;/),r=s.match(/^[\s\t]*$/);if(a||r)return;const A=s.match("^\\t{"+t.currentIndent+"}(\\w+):(.*){",""),c=s.match("^\\t{"+t.currentIndent+"}(\\w+):[\\s\\t\\r\\n](.*)"),l=s.match("^\\t{"+(t.currentIndent-1)+"}}");A?t.parseNodeBegin(s,A):c?t.parseNodeProperty(s,c,i[++n]):l?t.popStack():s.match(/^[^\s\t}]/)&&t.parseNodePropertyContinued(s)}),this.allNodes}parseNodeBegin(e,t){const i=t[1].trim().replace(/^"/,"").replace(/"$/,""),s=t[2].split(",").map(function(A){return A.trim().replace(/^"/,"").replace(/"$/,"")}),n={name:i},a=this.parseNodeAttr(s),r=this.getCurrentNode();this.currentIndent===0?this.allNodes.add(i,n):i in r?(i==="PoseNode"?r.PoseNode.push(n):r[i].id!==void 0&&(r[i]={},r[i][r[i].id]=r[i]),a.id!==""&&(r[i][a.id]=n)):typeof a.id=="number"?(r[i]={},r[i][a.id]=n):i!=="Properties70"&&(i==="PoseNode"?r[i]=[n]:r[i]=n),typeof a.id=="number"&&(n.id=a.id),a.name!==""&&(n.attrName=a.name),a.type!==""&&(n.attrType=a.type),this.pushStack(n)}parseNodeAttr(e){let t=e[0];e[0]!==""&&(t=parseInt(e[0]),isNaN(t)&&(t=e[0]));let i="",s="";return e.length>1&&(i=e[1].replace(/^(\w+)::/,""),s=e[2]),{id:t,name:i,type:s}}parseNodeProperty(e,t,i){let s=t[1].replace(/^"/,"").replace(/"$/,"").trim(),n=t[2].replace(/^"/,"").replace(/"$/,"").trim();s==="Content"&&n===","&&(n=i.replace(/"/g,"").replace(/,$/,"").trim());const a=this.getCurrentNode();if(a.name==="Properties70"){this.parseNodeSpecialProperty(e,s,n);return}if(s==="C"){const r=n.split(",").slice(1),A=parseInt(r[0]),c=parseInt(r[1]);let l=n.split(",").slice(3);l=l.map(function(h){return h.trim().replace(/^"/,"")}),s="connections",n=[A,c],Yc(n,l),a[s]===void 0&&(a[s]=[])}s==="Node"&&(a.id=n),s in a&&Array.isArray(a[s])?a[s].push(n):s!=="a"?a[s]=n:a.a=n,this.setCurrentProp(a,s),s==="a"&&n.slice(-1)!==","&&(a.a=hn(n))}parseNodePropertyContinued(e){const t=this.getCurrentNode();t.a+=e,e.slice(-1)!==","&&(t.a=hn(t.a))}parseNodeSpecialProperty(e,t,i){const s=i.split('",').map(function(l){return l.trim().replace(/^\"/,"").replace(/\s/,"_")}),n=s[0],a=s[1],r=s[2],A=s[3];let c=s[4];switch(a){case"int":case"enum":case"bool":case"ULongLong":case"double":case"Number":case"FieldOfView":c=parseFloat(c);break;case"Color":case"ColorRGB":case"Vector3D":case"Lcl_Translation":case"Lcl_Rotation":case"Lcl_Scaling":c=hn(c);break}this.getPrevNode()[n]={type:a,type2:r,flag:A,value:c},this.setCurrentProp(this.getPrevNode(),n)}}class Oc{parse(e){const t=new to(e);t.skip(23);const i=t.getUint32();if(i<6400)throw new Error("THREE.FBXLoader: FBX version not supported, FileVersion: "+i);const s=new so;for(;!this.endOfContent(t);){const n=this.parseNode(t,i);n!==null&&s.add(n.name,n)}return s}endOfContent(e){return e.size()%16===0?(e.getOffset()+160+16&-16)>=e.size():e.getOffset()+160+16>=e.size()}parseNode(e,t){const i={},s=t>=7500?e.getUint64():e.getUint32(),n=t>=7500?e.getUint64():e.getUint32();t>=7500?e.getUint64():e.getUint32();const a=e.getUint8(),r=e.getString(a);if(s===0)return null;const A=[];for(let d=0;d<n;d++)A.push(this.parseProperty(e));const c=A.length>0?A[0]:"",l=A.length>1?A[1]:"",h=A.length>2?A[2]:"";for(i.singleProperty=n===1&&e.getOffset()===s;s>e.getOffset();){const d=this.parseNode(e,t);d!==null&&this.parseSubNode(r,i,d)}return i.propertyList=A,typeof c=="number"&&(i.id=c),l!==""&&(i.attrName=l),h!==""&&(i.attrType=h),r!==""&&(i.name=r),i}parseSubNode(e,t,i){if(i.singleProperty===!0){const s=i.propertyList[0];Array.isArray(s)?(t[i.name]=i,i.a=s):t[i.name]=s}else if(e==="Connections"&&i.name==="C"){const s=[];i.propertyList.forEach(function(n,a){a!==0&&s.push(n)}),t.connections===void 0&&(t.connections=[]),t.connections.push(s)}else if(i.name==="Properties70")Object.keys(i).forEach(function(s){t[s]=i[s]});else if(e==="Properties70"&&i.name==="P"){let s=i.propertyList[0],n=i.propertyList[1];const a=i.propertyList[2],r=i.propertyList[3];let A;s.indexOf("Lcl ")===0&&(s=s.replace("Lcl ","Lcl_")),n.indexOf("Lcl ")===0&&(n=n.replace("Lcl ","Lcl_")),n==="Color"||n==="ColorRGB"||n==="Vector"||n==="Vector3D"||n.indexOf("Lcl_")===0?A=[i.propertyList[4],i.propertyList[5],i.propertyList[6]]:A=i.propertyList[4],t[s]={type:n,type2:a,flag:r,value:A}}else t[i.name]===void 0?typeof i.id=="number"?(t[i.name]={},t[i.name][i.id]=i):t[i.name]=i:i.name==="PoseNode"?(Array.isArray(t[i.name])||(t[i.name]=[t[i.name]]),t[i.name].push(i)):t[i.name][i.id]===void 0&&(t[i.name][i.id]=i)}parseProperty(e){const t=e.getString(1);let i;switch(t){case"C":return e.getBoolean();case"D":return e.getFloat64();case"F":return e.getFloat32();case"I":return e.getInt32();case"L":return e.getInt64();case"R":return i=e.getUint32(),e.getArrayBuffer(i);case"S":return i=e.getUint32(),e.getString(i);case"Y":return e.getInt16();case"b":case"c":case"d":case"f":case"i":case"l":const s=e.getUint32(),n=e.getUint32(),a=e.getUint32();if(n===0)switch(t){case"b":case"c":return e.getBooleanArray(s);case"d":return e.getFloat64Array(s);case"f":return e.getFloat32Array(s);case"i":return e.getInt32Array(s);case"l":return e.getInt64Array(s)}const r=_s(new Uint8Array(e.getArrayBuffer(a))),A=new to(r.buffer);switch(t){case"b":case"c":return A.getBooleanArray(s);case"d":return A.getFloat64Array(s);case"f":return A.getFloat32Array(s);case"i":return A.getInt32Array(s);case"l":return A.getInt64Array(s)}break;default:throw new Error("THREE.FBXLoader: Unknown property type "+t)}}}class to{constructor(e,t){this.dv=new DataView(e),this.offset=0,this.littleEndian=t!==void 0?t:!0,this._textDecoder=new TextDecoder}getOffset(){return this.offset}size(){return this.dv.buffer.byteLength}skip(e){this.offset+=e}getBoolean(){return(this.getUint8()&1)===1}getBooleanArray(e){const t=[];for(let i=0;i<e;i++)t.push(this.getBoolean());return t}getUint8(){const e=this.dv.getUint8(this.offset);return this.offset+=1,e}getInt16(){const e=this.dv.getInt16(this.offset,this.littleEndian);return this.offset+=2,e}getInt32(){const e=this.dv.getInt32(this.offset,this.littleEndian);return this.offset+=4,e}getInt32Array(e){const t=[];for(let i=0;i<e;i++)t.push(this.getInt32());return t}getUint32(){const e=this.dv.getUint32(this.offset,this.littleEndian);return this.offset+=4,e}getInt64(){let e,t;return this.littleEndian?(e=this.getUint32(),t=this.getUint32()):(t=this.getUint32(),e=this.getUint32()),t&2147483648?(t=~t&4294967295,e=~e&4294967295,e===4294967295&&(t=t+1&4294967295),e=e+1&4294967295,-(t*4294967296+e)):t*4294967296+e}getInt64Array(e){const t=[];for(let i=0;i<e;i++)t.push(this.getInt64());return t}getUint64(){let e,t;return this.littleEndian?(e=this.getUint32(),t=this.getUint32()):(t=this.getUint32(),e=this.getUint32()),t*4294967296+e}getFloat32(){const e=this.dv.getFloat32(this.offset,this.littleEndian);return this.offset+=4,e}getFloat32Array(e){const t=[];for(let i=0;i<e;i++)t.push(this.getFloat32());return t}getFloat64(){const e=this.dv.getFloat64(this.offset,this.littleEndian);return this.offset+=8,e}getFloat64Array(e){const t=[];for(let i=0;i<e;i++)t.push(this.getFloat64());return t}getArrayBuffer(e){const t=this.dv.buffer.slice(this.offset,this.offset+e);return this.offset+=e,t}getString(e){const t=this.offset;let i=new Uint8Array(this.dv.buffer,t,e);this.skip(e);const s=i.indexOf(0);return s>=0&&(i=new Uint8Array(this.dv.buffer,t,s)),this._textDecoder.decode(i)}}class so{add(e,t){this[e]=t}}function Hc(o){const e="Kaydara FBX Binary \0";return o.byteLength>=e.length&&e===ao(o,0,e.length)}function jc(o){const e=["K","a","y","d","a","r","a","\\","F","B","X","\\","B","i","n","a","r","y","\\","\\"];let t=0;function i(s){const n=o[s-1];return o=o.slice(t+s),t++,n}for(let s=0;s<e.length;++s)if(i(1)===e[s])return!1;return!0}function io(o){const e=/FBXVersion: (\d+)/,t=o.match(e);if(t)return parseInt(t[1]);throw new Error("THREE.FBXLoader: Cannot find the version number for the file given.")}function qc(o){return o/46186158e3}const zc=[];function ii(o,e,t,i){let s;switch(i.mappingType){case"ByPolygonVertex":s=o;break;case"ByPolygon":s=e;break;case"ByVertice":s=t;break;case"AllSame":s=i.indices[0];break;default:console.warn("THREE.FBXLoader: unknown attribute mapping type "+i.mappingType)}i.referenceType==="IndexToDirect"&&(s=i.indices[s]);const n=s*i.dataSize,a=n+i.dataSize;return Kc(zc,i.buffer,n,a)}const ln=new Pt,ls=new N;function no(o){const e=new ce,t=new ce,i=new ce,s=new ce,n=new ce,a=new ce,r=new ce,A=new ce,c=new ce,l=new ce,h=new ce,d=new ce,p=o.inheritType?o.inheritType:0;o.translation&&e.setPosition(ls.fromArray(o.translation));const f=Fs(0);if(o.preRotation){const V=o.preRotation.map(Ce.degToRad);V.push(f),t.makeRotationFromEuler(ln.fromArray(V))}if(o.rotation){const V=o.rotation.map(Ce.degToRad);V.push(o.eulerOrder||f),i.makeRotationFromEuler(ln.fromArray(V))}if(o.postRotation){const V=o.postRotation.map(Ce.degToRad);V.push(f),s.makeRotationFromEuler(ln.fromArray(V)),s.invert()}o.scale&&n.scale(ls.fromArray(o.scale)),o.scalingOffset&&r.setPosition(ls.fromArray(o.scalingOffset)),o.scalingPivot&&a.setPosition(ls.fromArray(o.scalingPivot)),o.rotationOffset&&A.setPosition(ls.fromArray(o.rotationOffset)),o.rotationPivot&&c.setPosition(ls.fromArray(o.rotationPivot)),o.parentMatrixWorld&&(h.copy(o.parentMatrix),l.copy(o.parentMatrixWorld));const b=t.clone().multiply(i).multiply(s),m=new ce;m.extractRotation(l);const I=new ce;I.copyPosition(l);const E=I.clone().invert().multiply(l),C=m.clone().invert().multiply(E),y=n,w=new ce;if(p===0)w.copy(m).multiply(b).multiply(C).multiply(y);else if(p===1)w.copy(m).multiply(C).multiply(b).multiply(y);else{const V=new ce().scale(new N().setFromMatrixScale(h)).clone().invert(),K=C.clone().multiply(V);w.copy(m).multiply(b).multiply(K).multiply(y)}const x=c.clone().invert(),T=a.clone().invert();let S=e.clone().multiply(A).multiply(c).multiply(t).multiply(i).multiply(s).multiply(x).multiply(r).multiply(a).multiply(n).multiply(T);const _=new ce().copyPosition(S),Y=l.clone().multiply(_);return d.copyPosition(Y),S=d.clone().multiply(w),S.premultiply(l.invert()),S}function Fs(o){o=o||0;const e=["ZYX","YZX","XZY","ZXY","YXZ","XYZ"];return o===6?(console.warn("THREE.FBXLoader: unsupported Euler Order: Spherical XYZ. Animations and rotations may be incorrect."),e[0]):e[o]}function hn(o){return o.split(",").map(function(e){return parseFloat(e)})}function ao(o,e,t){return e===void 0&&(e=0),t===void 0&&(t=o.byteLength),new TextDecoder().decode(new Uint8Array(o,e,t))}function Yc(o,e){for(let t=0,i=o.length,s=e.length;t<s;t++,i++)o[i]=e[t]}function Kc(o,e,t,i){for(let s=t,n=0;s<i;s++,n++)o[n]=e[s];return o}class Jc extends Tt{constructor(e){super(e)}load(e,t,i,s){const n=this,a=this.path===""?Jt.extractUrlBase(e):this.path,r=new dt(this.manager);r.setPath(this.path),r.setRequestHeader(this.requestHeader),r.setWithCredentials(this.withCredentials),r.load(e,function(A){try{t(n.parse(A,a))}catch(c){s?s(c):console.error(c),n.manager.itemError(e)}},i,s)}setMaterialOptions(e){return this.materialOptions=e,this}parse(e,t){const i=e.split(`
41
- `);let s={};const n=/\s+/,a={};for(let A=0;A<i.length;A++){let c=i[A];if(c=c.trim(),c.length===0||c.charAt(0)==="#")continue;const l=c.indexOf(" ");let h=l>=0?c.substring(0,l):c;h=h.toLowerCase();let d=l>=0?c.substring(l+1):"";if(d=d.trim(),h==="newmtl")s={name:d},a[d]=s;else if(h==="ka"||h==="kd"||h==="ks"||h==="ke"){const p=d.split(n,3);s[h]=[parseFloat(p[0]),parseFloat(p[1]),parseFloat(p[2])]}else s[h]=d}const r=new Vc(this.resourcePath||t,this.materialOptions);return r.setCrossOrigin(this.crossOrigin),r.setManager(this.manager),r.setMaterials(a),r}}class Vc{constructor(e="",t={}){this.baseUrl=e,this.options=t,this.materialsInfo={},this.materials={},this.materialsArray=[],this.nameLookup={},this.crossOrigin="anonymous",this.side=this.options.side!==void 0?this.options.side:Un,this.wrap=this.options.wrap!==void 0?this.options.wrap:Vt}setCrossOrigin(e){return this.crossOrigin=e,this}setManager(e){this.manager=e}setMaterials(e){this.materialsInfo=this.convert(e),this.materials={},this.materialsArray=[],this.nameLookup={}}convert(e){if(!this.options)return e;const t={};for(const i in e){const s=e[i],n={};t[i]=n;for(const a in s){let r=!0,A=s[a];const c=a.toLowerCase();switch(c){case"kd":case"ka":case"ks":this.options&&this.options.normalizeRGB&&(A=[A[0]/255,A[1]/255,A[2]/255]),this.options&&this.options.ignoreZeroRGBs&&A[0]===0&&A[1]===0&&A[2]===0&&(r=!1);break}r&&(n[c]=A)}}return t}preload(){for(const e in this.materialsInfo)this.create(e)}getIndex(e){return this.nameLookup[e]}getAsArray(){let e=0;for(const t in this.materialsInfo)this.materialsArray[e]=this.create(t),this.nameLookup[t]=e,e++;return this.materialsArray}create(e){return this.materials[e]===void 0&&this.createMaterial_(e),this.materials[e]}createMaterial_(e){const t=this,i=this.materialsInfo[e],s={name:e,side:this.side};function n(r,A){return typeof A!="string"||A===""?"":/^https?:\/\//i.test(A)?A:r+A}function a(r,A){if(s[r])return;const c=t.getTextureParams(A,s),l=t.loadTexture(n(t.baseUrl,c.url));l.repeat.copy(c.scale),l.offset.copy(c.offset),l.wrapS=t.wrap,l.wrapT=t.wrap,(r==="map"||r==="emissiveMap")&&(l.colorSpace=le),s[r]=l}for(const r in i){const A=i[r];let c;if(A!=="")switch(r.toLowerCase()){case"kd":s.color=Xe.toWorkingColorSpace(new we().fromArray(A),le);break;case"ks":s.specular=Xe.toWorkingColorSpace(new we().fromArray(A),le);break;case"ke":s.emissive=Xe.toWorkingColorSpace(new we().fromArray(A),le);break;case"map_kd":a("map",A);break;case"map_ks":a("specularMap",A);break;case"map_ke":a("emissiveMap",A);break;case"norm":a("normalMap",A);break;case"map_bump":case"bump":a("bumpMap",A);break;case"map_d":a("alphaMap",A),s.transparent=!0;break;case"ns":s.shininess=parseFloat(A);break;case"d":c=parseFloat(A),c<1&&(s.opacity=c,s.transparent=!0);break;case"tr":c=parseFloat(A),this.options&&this.options.invertTrProperty&&(c=1-c),c>0&&(s.opacity=1-c,s.transparent=!0);break}}return this.materials[e]=new Cs(s),this.materials[e]}getTextureParams(e,t){const i={scale:new Le(1,1),offset:new Le(0,0)},s=e.split(/\s+/);let n;return n=s.indexOf("-bm"),n>=0&&(t.bumpScale=parseFloat(s[n+1]),s.splice(n,2)),n=s.indexOf("-s"),n>=0&&(i.scale.set(parseFloat(s[n+1]),parseFloat(s[n+2])),s.splice(n,4)),n=s.indexOf("-o"),n>=0&&(i.offset.set(parseFloat(s[n+1]),parseFloat(s[n+2])),s.splice(n,4)),i.url=s.join(" ").trim(),i}loadTexture(e,t,i,s,n){const a=this.manager!==void 0?this.manager:xr;let r=a.getHandler(e);r===null&&(r=new ui(a)),r.setCrossOrigin&&r.setCrossOrigin(this.crossOrigin);const A=r.load(e,i,s,n);return t!==void 0&&(A.mapping=t),A}}const Wc=/^[og]\s*(.+)?/,Xc=/^mtllib /,Zc=/^usemtl /,$c=/^usemap /,oo=/\s+/,ro=new N,gn=new N,Ao=new N,co=new N,ht=new N,ni=new we;function el(){const o={objects:[],object:{},vertices:[],normals:[],colors:[],uvs:[],materials:{},materialLibraries:[],startObject:function(e,t){if(this.object&&this.object.fromDeclaration===!1){this.object.name=e,this.object.fromDeclaration=t!==!1;return}const i=this.object&&typeof this.object.currentMaterial=="function"?this.object.currentMaterial():void 0;if(this.object&&typeof this.object._finalize=="function"&&this.object._finalize(!0),this.object={name:e||"",fromDeclaration:t!==!1,geometry:{vertices:[],normals:[],colors:[],uvs:[],hasUVIndices:!1},materials:[],smooth:!0,startMaterial:function(s,n){const a=this._finalize(!1);a&&(a.inherited||a.groupCount<=0)&&this.materials.splice(a.index,1);const r={index:this.materials.length,name:s||"",mtllib:Array.isArray(n)&&n.length>0?n[n.length-1]:"",smooth:a!==void 0?a.smooth:this.smooth,groupStart:a!==void 0?a.groupEnd:0,groupEnd:-1,groupCount:-1,inherited:!1,clone:function(A){const c={index:typeof A=="number"?A:this.index,name:this.name,mtllib:this.mtllib,smooth:this.smooth,groupStart:0,groupEnd:-1,groupCount:-1,inherited:!1};return c.clone=this.clone.bind(c),c}};return this.materials.push(r),r},currentMaterial:function(){if(this.materials.length>0)return this.materials[this.materials.length-1]},_finalize:function(s){const n=this.currentMaterial();if(n&&n.groupEnd===-1&&(n.groupEnd=this.geometry.vertices.length/3,n.groupCount=n.groupEnd-n.groupStart,n.inherited=!1),s&&this.materials.length>1)for(let a=this.materials.length-1;a>=0;a--)this.materials[a].groupCount<=0&&this.materials.splice(a,1);return s&&this.materials.length===0&&this.materials.push({name:"",smooth:this.smooth}),n}},i&&i.name&&typeof i.clone=="function"){const s=i.clone(0);s.inherited=!0,this.object.materials.push(s)}this.objects.push(this.object)},finalize:function(){this.object&&typeof this.object._finalize=="function"&&this.object._finalize(!0)},parseVertexIndex:function(e,t){const i=parseInt(e,10);return(i>=0?i-1:i+t/3)*3},parseNormalIndex:function(e,t){const i=parseInt(e,10);return(i>=0?i-1:i+t/3)*3},parseUVIndex:function(e,t){const i=parseInt(e,10);return(i>=0?i-1:i+t/2)*2},addVertex:function(e,t,i){const s=this.vertices,n=this.object.geometry.vertices;n.push(s[e+0],s[e+1],s[e+2]),n.push(s[t+0],s[t+1],s[t+2]),n.push(s[i+0],s[i+1],s[i+2])},addVertexPoint:function(e){const t=this.vertices;this.object.geometry.vertices.push(t[e+0],t[e+1],t[e+2])},addVertexLine:function(e){const t=this.vertices;this.object.geometry.vertices.push(t[e+0],t[e+1],t[e+2])},addNormal:function(e,t,i){const s=this.normals,n=this.object.geometry.normals;n.push(s[e+0],s[e+1],s[e+2]),n.push(s[t+0],s[t+1],s[t+2]),n.push(s[i+0],s[i+1],s[i+2])},addFaceNormal:function(e,t,i){const s=this.vertices,n=this.object.geometry.normals;ro.fromArray(s,e),gn.fromArray(s,t),Ao.fromArray(s,i),ht.subVectors(Ao,gn),co.subVectors(ro,gn),ht.cross(co),ht.normalize(),n.push(ht.x,ht.y,ht.z),n.push(ht.x,ht.y,ht.z),n.push(ht.x,ht.y,ht.z)},addColor:function(e,t,i){const s=this.colors,n=this.object.geometry.colors;s[e]!==void 0&&n.push(s[e+0],s[e+1],s[e+2]),s[t]!==void 0&&n.push(s[t+0],s[t+1],s[t+2]),s[i]!==void 0&&n.push(s[i+0],s[i+1],s[i+2])},addUV:function(e,t,i){const s=this.uvs,n=this.object.geometry.uvs;n.push(s[e+0],s[e+1]),n.push(s[t+0],s[t+1]),n.push(s[i+0],s[i+1])},addDefaultUV:function(){const e=this.object.geometry.uvs;e.push(0,0),e.push(0,0),e.push(0,0)},addUVLine:function(e){const t=this.uvs;this.object.geometry.uvs.push(t[e+0],t[e+1])},addFace:function(e,t,i,s,n,a,r,A,c){const l=this.vertices.length;let h=this.parseVertexIndex(e,l),d=this.parseVertexIndex(t,l),p=this.parseVertexIndex(i,l);if(this.addVertex(h,d,p),this.addColor(h,d,p),r!==void 0&&r!==""){const f=this.normals.length;h=this.parseNormalIndex(r,f),d=this.parseNormalIndex(A,f),p=this.parseNormalIndex(c,f),this.addNormal(h,d,p)}else this.addFaceNormal(h,d,p);if(s!==void 0&&s!==""){const f=this.uvs.length;h=this.parseUVIndex(s,f),d=this.parseUVIndex(n,f),p=this.parseUVIndex(a,f),this.addUV(h,d,p),this.object.geometry.hasUVIndices=!0}else this.addDefaultUV()},addPointGeometry:function(e){this.object.geometry.type="Points";const t=this.vertices.length;for(let i=0,s=e.length;i<s;i++){const n=this.parseVertexIndex(e[i],t);this.addVertexPoint(n),this.addColor(n)}},addLineGeometry:function(e,t){this.object.geometry.type="Line";const i=this.vertices.length,s=this.uvs.length;for(let n=0,a=e.length;n<a;n++)this.addVertexLine(this.parseVertexIndex(e[n],i));for(let n=0,a=t.length;n<a;n++)this.addUVLine(this.parseUVIndex(t[n],s))}};return o.startObject("",!1),o}class tl extends Tt{constructor(e){super(e),this.materials=null,this.materialsLoader=new Jc(e)}load(e,t,i,s){const n=this,a=new dt(this.manager);a.setPath(this.path),a.setRequestHeader(this.requestHeader),a.setWithCredentials(this.withCredentials),a.load(e,async function(r){try{const A=n.parse(r,!0);for(let c=0,l=A.materialLibraries.length;c<l;c++){const h=A.materialLibraries[c],d=e.startsWith("blob:")?e+"/"+h:new URL(h,e);console.debug("Loading MTL file: "+d),await new Promise((p,f)=>{n.materialsLoader.load(d.toString(),b=>{n.setMaterials(b),p()},null,f)})}t(n.createObjects(A))}catch(A){s?s(A):console.error(A),n.manager.itemError(e)}},i,s)}setMTLLoader(e){return this.materialsLoader=e,this}setMaterials(e){return this.materials=e,this}parse(e,t=!1){const i=new el;e.indexOf(`\r
41
+ `);let s={};const n=/\s+/,a={};for(let A=0;A<i.length;A++){let c=i[A];if(c=c.trim(),c.length===0||c.charAt(0)==="#")continue;const l=c.indexOf(" ");let h=l>=0?c.substring(0,l):c;h=h.toLowerCase();let d=l>=0?c.substring(l+1):"";if(d=d.trim(),h==="newmtl")s={name:d},a[d]=s;else if(h==="ka"||h==="kd"||h==="ks"||h==="ke"){const p=d.split(n,3);s[h]=[parseFloat(p[0]),parseFloat(p[1]),parseFloat(p[2])]}else s[h]=d}const r=new Vc(this.resourcePath||t,this.materialOptions);return r.setCrossOrigin(this.crossOrigin),r.setManager(this.manager),r.setMaterials(a),r}}class Vc{constructor(e="",t={}){this.baseUrl=e,this.options=t,this.materialsInfo={},this.materials={},this.materialsArray=[],this.nameLookup={},this.crossOrigin="anonymous",this.side=this.options.side!==void 0?this.options.side:Un,this.wrap=this.options.wrap!==void 0?this.options.wrap:Vt}setCrossOrigin(e){return this.crossOrigin=e,this}setManager(e){this.manager=e}setMaterials(e){this.materialsInfo=this.convert(e),this.materials={},this.materialsArray=[],this.nameLookup={}}convert(e){if(!this.options)return e;const t={};for(const i in e){const s=e[i],n={};t[i]=n;for(const a in s){let r=!0,A=s[a];const c=a.toLowerCase();switch(c){case"kd":case"ka":case"ks":this.options&&this.options.normalizeRGB&&(A=[A[0]/255,A[1]/255,A[2]/255]),this.options&&this.options.ignoreZeroRGBs&&A[0]===0&&A[1]===0&&A[2]===0&&(r=!1);break}r&&(n[c]=A)}}return t}preload(){for(const e in this.materialsInfo)this.create(e)}getIndex(e){return this.nameLookup[e]}getAsArray(){let e=0;for(const t in this.materialsInfo)this.materialsArray[e]=this.create(t),this.nameLookup[t]=e,e++;return this.materialsArray}create(e){return this.materials[e]===void 0&&this.createMaterial_(e),this.materials[e]}createMaterial_(e){const t=this,i=this.materialsInfo[e],s={name:e,side:this.side};function n(r,A){return typeof A!="string"||A===""?"":/^https?:\/\//i.test(A)?A:r+A}function a(r,A){if(s[r])return;const c=t.getTextureParams(A,s),l=t.loadTexture(n(t.baseUrl,c.url));l.repeat.copy(c.scale),l.offset.copy(c.offset),l.wrapS=t.wrap,l.wrapT=t.wrap,(r==="map"||r==="emissiveMap")&&(l.colorSpace=le),s[r]=l}for(const r in i){const A=i[r];let c;if(A!=="")switch(r.toLowerCase()){case"kd":s.color=Xe.toWorkingColorSpace(new we().fromArray(A),le);break;case"ks":s.specular=Xe.toWorkingColorSpace(new we().fromArray(A),le);break;case"ke":s.emissive=Xe.toWorkingColorSpace(new we().fromArray(A),le);break;case"map_kd":a("map",A);break;case"map_ks":a("specularMap",A);break;case"map_ke":a("emissiveMap",A);break;case"norm":a("normalMap",A);break;case"map_bump":case"bump":a("bumpMap",A);break;case"map_d":a("alphaMap",A),s.transparent=!0;break;case"ns":s.shininess=parseFloat(A);break;case"d":c=parseFloat(A),c<1&&(s.opacity=c,s.transparent=!0);break;case"tr":c=parseFloat(A),this.options&&this.options.invertTrProperty&&(c=1-c),c>0&&(s.opacity=1-c,s.transparent=!0);break}}return this.materials[e]=new Cs(s),this.materials[e]}getTextureParams(e,t){const i={scale:new Le(1,1),offset:new Le(0,0)},s=e.split(/\s+/);let n;return n=s.indexOf("-bm"),n>=0&&(t.bumpScale=parseFloat(s[n+1]),s.splice(n,2)),n=s.indexOf("-s"),n>=0&&(i.scale.set(parseFloat(s[n+1]),parseFloat(s[n+2])),s.splice(n,4)),n=s.indexOf("-o"),n>=0&&(i.offset.set(parseFloat(s[n+1]),parseFloat(s[n+2])),s.splice(n,4)),i.url=s.join(" ").trim(),i}loadTexture(e,t,i,s,n){const a=this.manager!==void 0?this.manager:xr;let r=a.getHandler(e);r===null&&(r=new ui(a)),r.setCrossOrigin&&r.setCrossOrigin(this.crossOrigin);const A=r.load(e,i,s,n);return t!==void 0&&(A.mapping=t),A}}const Wc=/^[og]\s*(.+)?/,Xc=/^mtllib /,Zc=/^usemtl /,$c=/^usemap /,oo=/\s+/,ro=new N,gn=new N,Ao=new N,co=new N,ht=new N,ni=new we;function el(){const o={objects:[],object:{},vertices:[],normals:[],colors:[],uvs:[],materials:{},materialLibraries:[],startObject:function(e,t){if(this.object&&this.object.fromDeclaration===!1){this.object.name=e,this.object.fromDeclaration=t!==!1;return}const i=this.object&&typeof this.object.currentMaterial=="function"?this.object.currentMaterial():void 0;if(this.object&&typeof this.object._finalize=="function"&&this.object._finalize(!0),this.object={name:e||"",fromDeclaration:t!==!1,geometry:{vertices:[],normals:[],colors:[],uvs:[],hasUVIndices:!1},materials:[],smooth:!0,startMaterial:function(s,n){const a=this._finalize(!1);a&&(a.inherited||a.groupCount<=0)&&this.materials.splice(a.index,1);const r={index:this.materials.length,name:s||"",mtllib:Array.isArray(n)&&n.length>0?n[n.length-1]:"",smooth:a!==void 0?a.smooth:this.smooth,groupStart:a!==void 0?a.groupEnd:0,groupEnd:-1,groupCount:-1,inherited:!1,clone:function(A){const c={index:typeof A=="number"?A:this.index,name:this.name,mtllib:this.mtllib,smooth:this.smooth,groupStart:0,groupEnd:-1,groupCount:-1,inherited:!1};return c.clone=this.clone.bind(c),c}};return this.materials.push(r),r},currentMaterial:function(){if(this.materials.length>0)return this.materials[this.materials.length-1]},_finalize:function(s){const n=this.currentMaterial();if(n&&n.groupEnd===-1&&(n.groupEnd=this.geometry.vertices.length/3,n.groupCount=n.groupEnd-n.groupStart,n.inherited=!1),s&&this.materials.length>1)for(let a=this.materials.length-1;a>=0;a--)this.materials[a].groupCount<=0&&this.materials.splice(a,1);return s&&this.materials.length===0&&this.materials.push({name:"",smooth:this.smooth}),n}},i&&i.name&&typeof i.clone=="function"){const s=i.clone(0);s.inherited=!0,this.object.materials.push(s)}this.objects.push(this.object)},finalize:function(){this.object&&typeof this.object._finalize=="function"&&this.object._finalize(!0)},parseVertexIndex:function(e,t){const i=parseInt(e,10);return(i>=0?i-1:i+t/3)*3},parseNormalIndex:function(e,t){const i=parseInt(e,10);return(i>=0?i-1:i+t/3)*3},parseUVIndex:function(e,t){const i=parseInt(e,10);return(i>=0?i-1:i+t/2)*2},addVertex:function(e,t,i){const s=this.vertices,n=this.object.geometry.vertices;n.push(s[e+0],s[e+1],s[e+2]),n.push(s[t+0],s[t+1],s[t+2]),n.push(s[i+0],s[i+1],s[i+2])},addVertexPoint:function(e){const t=this.vertices;this.object.geometry.vertices.push(t[e+0],t[e+1],t[e+2])},addVertexLine:function(e){const t=this.vertices;this.object.geometry.vertices.push(t[e+0],t[e+1],t[e+2])},addNormal:function(e,t,i){const s=this.normals,n=this.object.geometry.normals;n.push(s[e+0],s[e+1],s[e+2]),n.push(s[t+0],s[t+1],s[t+2]),n.push(s[i+0],s[i+1],s[i+2])},addFaceNormal:function(e,t,i){const s=this.vertices,n=this.object.geometry.normals;ro.fromArray(s,e),gn.fromArray(s,t),Ao.fromArray(s,i),ht.subVectors(Ao,gn),co.subVectors(ro,gn),ht.cross(co),ht.normalize(),n.push(ht.x,ht.y,ht.z),n.push(ht.x,ht.y,ht.z),n.push(ht.x,ht.y,ht.z)},addColor:function(e,t,i){const s=this.colors,n=this.object.geometry.colors;s[e]!==void 0&&n.push(s[e+0],s[e+1],s[e+2]),s[t]!==void 0&&n.push(s[t+0],s[t+1],s[t+2]),s[i]!==void 0&&n.push(s[i+0],s[i+1],s[i+2])},addUV:function(e,t,i){const s=this.uvs,n=this.object.geometry.uvs;n.push(s[e+0],s[e+1]),n.push(s[t+0],s[t+1]),n.push(s[i+0],s[i+1])},addDefaultUV:function(){const e=this.object.geometry.uvs;e.push(0,0),e.push(0,0),e.push(0,0)},addUVLine:function(e){const t=this.uvs;this.object.geometry.uvs.push(t[e+0],t[e+1])},addFace:function(e,t,i,s,n,a,r,A,c){const l=this.vertices.length;let h=this.parseVertexIndex(e,l),d=this.parseVertexIndex(t,l),p=this.parseVertexIndex(i,l);if(this.addVertex(h,d,p),this.addColor(h,d,p),r!==void 0&&r!==""){const f=this.normals.length;h=this.parseNormalIndex(r,f),d=this.parseNormalIndex(A,f),p=this.parseNormalIndex(c,f),this.addNormal(h,d,p)}else this.addFaceNormal(h,d,p);if(s!==void 0&&s!==""){const f=this.uvs.length;h=this.parseUVIndex(s,f),d=this.parseUVIndex(n,f),p=this.parseUVIndex(a,f),this.addUV(h,d,p),this.object.geometry.hasUVIndices=!0}else this.addDefaultUV()},addPointGeometry:function(e){this.object.geometry.type="Points";const t=this.vertices.length;for(let i=0,s=e.length;i<s;i++){const n=this.parseVertexIndex(e[i],t);this.addVertexPoint(n),this.addColor(n)}},addLineGeometry:function(e,t){this.object.geometry.type="Line";const i=this.vertices.length,s=this.uvs.length;for(let n=0,a=e.length;n<a;n++)this.addVertexLine(this.parseVertexIndex(e[n],i));for(let n=0,a=t.length;n<a;n++)this.addUVLine(this.parseUVIndex(t[n],s))}};return o.startObject("",!1),o}class tl extends Tt{constructor(e){super(e),this.materials=null,this.materialsLoader=new Jc(e)}load(e,t,i,s){const n=this,a=new dt(this.manager);a.setPath(this.path),a.setRequestHeader(this.requestHeader),a.setWithCredentials(this.withCredentials),a.load(e,async function(r){try{const A=n.parse(r,!0);for(let c=0,l=A.materialLibraries.length;c<l;c++){const h=A.materialLibraries[c];if(!h||typeof h!="string"||h.trim()===""){console.warn("THREE.OBJLoader: Invalid or empty material library reference, skipping.");continue}const d=e.startsWith("blob:")?e+"/"+h:new URL(h,e);console.debug("Loading MTL file: "+d),await new Promise((p,f)=>{n.materialsLoader.load(d.toString(),b=>{n.setMaterials(b),p()},null,f)})}t(n.createObjects(A))}catch(A){s?s(A):console.error(A),n.manager.itemError(e)}},i,s)}setMTLLoader(e){return this.materialsLoader=e,this}setMaterials(e){return this.materials=e,this}parse(e,t=!1){const i=new el;e.indexOf(`\r
42
42
  `)!==-1&&(e=e.replace(/\r\n/g,`
43
43
  `)),e.indexOf(`\\
44
44
  `)!==-1&&(e=e.replace(/\\\n/g,""));const s=e.split(`
@@ -7,7 +7,7 @@ ${s.code}
7
7
 
8
8
  }`}getUniforms(e){const t=this.uniforms[e];let s="";for(const n of t){if(/^(modelViewMatrix|projectionMatrix)$/.test(n.name))continue;let i=null;n.type==="texture"?i=`sampler2D ${n.name}; `:n.type==="cubeTexture"?i=`samplerCube ${n.name}; `:i=`${this.getVectorType(n.type)} ${n.name}; `;const o=n.node.precision;o!==null?i="uniform "+So[o]+" "+i:i="uniform "+i,s+=i}return s}getAttributes(e){let t="";if(e==="vertex"){const s=this.attributes;for(const n of s)/^(position|normal|uv[1-3]?)$/.test(n.name)||(t+=`attribute ${n.type} ${n.name}; `)}return t}getVaryings(e){let t="";const s=this.varyings;if(e==="vertex")for(const n of s)t+=`${n.needsInterpolation?"varying":"/*varying*/"} ${n.type} ${n.name}; `;else if(e==="fragment")for(const n of s)n.needsInterpolation&&(t+=`varying ${n.type} ${n.name}; `);return t}addCode(e,t,s,n=this){const i=Ft(e);let o=n[i];const a=o.indexOf(t);if(a!==-1){const A=o.substring(0,a+t.length),l=o.substring(a+t.length);o=`${A}
9
9
  ${s}
10
- ${l}`}n[i]=o}replaceCode(e,t,s,n=this){const i=Ft(e);n[i]=n[i].replaceAll(t,s)}getVertexIndex(){return"gl_VertexID"}getFrontFacing(){return"gl_FrontFacing"}getFragCoord(){return"gl_FragCoord"}isFlipY(){return!0}buildCode(){const e={};for(const t of r.defaultShaderStages){const s=this.getUniforms(t),n=this.getAttributes(t),i=this.getVaryings(t),o=this.getVars(t),a=this.getCodes(t);e[t]=`${this.getSignature()}
10
+ ${l}`}n[i]=o}replaceCode(e,t,s,n=this){const i=Ft(e);n[i]=n[i].replaceAll(t,s)}getVertexIndex(){return"gl_VertexID"}getFrontFacing(){return"gl_FrontFacing"}getFragCoord(){return"gl_FragCoord"}isFlipY(){return!0}buildCode(){const e={};for(const t of r.defaultShaderStages){const s=this.getUniforms(t),n=this.getAttributes(t),i=this.getVaryings(t);let o=this.getVars(t);o=o.replace("mat4 modelViewMatrix;","");const a=this.getCodes(t);e[t]=`${this.getSignature()}
11
11
  // <node_builder>
12
12
 
13
13
  // uniforms
@@ -38,7 +38,7 @@ ${this.shader[Ft(t)]}
38
38
  `;Y=u(S),Y!==!1;){if(N.string+=Y+`
39
39
  `,Y.charAt(0)==="#"){N.comments+=Y+`
40
40
  `;continue}if((O=Y.match(U))&&(N.gamma=parseFloat(O[1])),(O=Y.match(G))&&(N.exposure=parseFloat(O[1])),(O=Y.match(H))&&(N.valid|=2,N.format=O[1]),(O=Y.match(X))&&(N.valid|=4,N.height=parseInt(O[1],10),N.width=parseInt(O[2],10)),N.valid&2&&N.valid&4)break}return N.valid&2||o(3,"missing format specifier"),N.valid&4||o(3,"missing image size specifier"),N},g=function(S,v,U){const G=v;if(G<8||G>32767||S[0]!==2||S[1]!==2||S[2]&128)return new Uint8Array(S);G!==(S[2]<<8|S[3])&&o(3,"wrong scanline width");const H=new Uint8Array(4*v*U);H.length||o(4,"unable to allocate buffer space");let X=0,N=0;const Y=4*G,O=new Uint8Array(4),Z=new Uint8Array(Y);let ie=U;for(;ie>0&&N<S.byteLength;){N+4>S.byteLength&&o(1),O[0]=S[N++],O[1]=S[N++],O[2]=S[N++],O[3]=S[N++],(O[0]!=2||O[1]!=2||(O[2]<<8|O[3])!=G)&&o(3,"bad rgbe scanline format");let ee=0,ce;for(;ee<Y&&N<S.byteLength;){ce=S[N++];const W=ce>128;if(W&&(ce-=128),(ce===0||ee+ce>Y)&&o(3,"bad scanline data"),W){const se=S[N++];for(let de=0;de<ce;de++)Z[ee++]=se}else Z.set(S.subarray(N,N+ce),ee),ee+=ce,N+=ce}const te=G;for(let W=0;W<te;W++){let se=0;H[X]=Z[W+se],se+=G,H[X+1]=Z[W+se],se+=G,H[X+2]=Z[W+se],se+=G,H[X+3]=Z[W+se],X+=4}ie--}return H},m=function(S,v,U,G){const H=S[v+3],X=Math.pow(2,H-128)/255;U[G+0]=S[v+0]*X,U[G+1]=S[v+1]*X,U[G+2]=S[v+2]*X,U[G+3]=1},I=function(S,v,U,G){const H=S[v+3],X=Math.pow(2,H-128)/255;U[G+0]=r.DataUtils.toHalfFloat(Math.min(S[v+0]*X,65504)),U[G+1]=r.DataUtils.toHalfFloat(Math.min(S[v+1]*X,65504)),U[G+2]=r.DataUtils.toHalfFloat(Math.min(S[v+2]*X,65504)),U[G+3]=r.DataUtils.toHalfFloat(1)},b=new Uint8Array(e);b.pos=0;const B=p(b),w=B.width,C=B.height,y=g(b.subarray(b.pos),w,C);let x,R,D;switch(this.type){case r.FloatType:D=y.length/4;const S=new Float32Array(D*4);for(let U=0;U<D;U++)m(y,U*4,S,U*4);x=S,R=r.FloatType;break;case r.HalfFloatType:D=y.length/4;const v=new Uint16Array(D*4);for(let U=0;U<D;U++)I(y,U*4,v,U*4);x=v,R=r.HalfFloatType;break;default:throw new Error("THREE.RGBELoader: Unsupported type: "+this.type)}return{width:w,height:C,data:x,header:B.string,gamma:B.gamma,exposure:B.exposure,type:R}}setDataType(e){return this.type=e,this}load(e,t,s,n){function i(o,a){switch(o.type){case r.FloatType:case r.HalfFloatType:o.colorSpace=r.LinearSRGBColorSpace,o.minFilter=r.LinearFilter,o.magFilter=r.LinearFilter,o.generateMipmaps=!1,o.flipY=!0;break}t&&t(o,a)}return super.load(e,i,s,n)}}const ga=Object.freeze(Object.defineProperty({__proto__:null,RGBELoader:ki},Symbol.toStringTag,{value:"Module"}));function Gi(c,e,t){const s=t.length-c-1;if(e>=t[s])return s-1;if(e<=t[c])return c;let n=c,i=s,o=Math.floor((n+i)/2);for(;e<t[o]||e>=t[o+1];)e<t[o]?i=o:n=o,o=Math.floor((n+i)/2);return o}function fa(c,e,t,s){const n=[],i=[],o=[];n[0]=1;for(let a=1;a<=t;++a){i[a]=e-s[c+1-a],o[a]=s[c+a]-e;let A=0;for(let l=0;l<a;++l){const h=o[l+1],u=i[a-l],p=n[l]/(h+u);n[l]=A+h*p,A=u*p}n[a]=A}return n}function ma(c,e,t,s){const n=Gi(c,s,e),i=fa(n,s,c,e),o=new r.Vector4(0,0,0,0);for(let a=0;a<=c;++a){const A=t[n-c+a],l=i[a],h=A.w*l;o.x+=A.x*h,o.y+=A.y*h,o.z+=A.z*h,o.w+=A.w*l}return o}function Ia(c,e,t,s,n){const i=[];for(let u=0;u<=t;++u)i[u]=0;const o=[];for(let u=0;u<=s;++u)o[u]=i.slice(0);const a=[];for(let u=0;u<=t;++u)a[u]=i.slice(0);a[0][0]=1;const A=i.slice(0),l=i.slice(0);for(let u=1;u<=t;++u){A[u]=e-n[c+1-u],l[u]=n[c+u]-e;let p=0;for(let g=0;g<u;++g){const m=l[g+1],I=A[u-g];a[u][g]=m+I;const b=a[g][u-1]/a[u][g];a[g][u]=p+m*b,p=I*b}a[u][u]=p}for(let u=0;u<=t;++u)o[0][u]=a[u][t];for(let u=0;u<=t;++u){let p=0,g=1;const m=[];for(let I=0;I<=t;++I)m[I]=i.slice(0);m[0][0]=1;for(let I=1;I<=s;++I){let b=0;const B=u-I,w=t-I;u>=I&&(m[g][0]=m[p][0]/a[w+1][B],b=m[g][0]*a[B][w]);const C=B>=-1?1:-B,y=u-1<=w?I-1:t-u;for(let R=C;R<=y;++R)m[g][R]=(m[p][R]-m[p][R-1])/a[w+1][B+R],b+=m[g][R]*a[B+R][w];u<=w&&(m[g][I]=-m[p][I-1]/a[w+1][u],b+=m[g][I]*a[u][w]),o[I][u]=b;const x=p;p=g,g=x}}let h=t;for(let u=1;u<=s;++u){for(let p=0;p<=t;++p)o[u][p]*=h;h*=t-u}return o}function ba(c,e,t,s,n){const i=n<c?n:c,o=[],a=Gi(c,s,e),A=Ia(a,s,c,i,e),l=[];for(let h=0;h<t.length;++h){const u=t[h].clone(),p=u.w;u.x*=p,u.y*=p,u.z*=p,l[h]=u}for(let h=0;h<=i;++h){const u=l[a-c].clone().multiplyScalar(A[h][0]);for(let p=1;p<=c;++p)u.add(l[a-c+p].clone().multiplyScalar(A[h][p]));o[h]=u}for(let h=i+1;h<=n+1;++h)o[h]=new r.Vector4(0,0,0);return o}function Ea(c,e){let t=1;for(let n=2;n<=c;++n)t*=n;let s=1;for(let n=2;n<=e;++n)s*=n;for(let n=2;n<=c-e;++n)s*=n;return t/s}function Ca(c){const e=c.length,t=[],s=[];for(let i=0;i<e;++i){const o=c[i];t[i]=new r.Vector3(o.x,o.y,o.z),s[i]=o.w}const n=[];for(let i=0;i<e;++i){const o=t[i].clone();for(let a=1;a<=i;++a)o.sub(n[i-a].clone().multiplyScalar(Ea(i,a)*s[a]));n[i]=o.divideScalar(s[0])}return n}function Ba(c,e,t,s,n){const i=ba(c,e,t,s,n);return Ca(i)}class ya extends r.Curve{constructor(e,t,s,n,i){super(),this.degree=e,this.knots=t,this.controlPoints=[],this.startKnot=n||0,this.endKnot=i||this.knots.length-1;for(let o=0;o<s.length;++o){const a=s[o];this.controlPoints[o]=new r.Vector4(a.x,a.y,a.z,a.w)}}getPoint(e,t=new r.Vector3){const s=t,n=this.knots[this.startKnot]+e*(this.knots[this.endKnot]-this.knots[this.startKnot]),i=ma(this.degree,this.knots,this.controlPoints,n);return i.w!==1&&i.divideScalar(i.w),s.set(i.x,i.y,i.z)}getTangent(e,t=new r.Vector3){const s=t,n=this.knots[0]+e*(this.knots[this.knots.length-1]-this.knots[0]),i=Ba(this.degree,this.knots,this.controlPoints,n,1);return s.copy(i[1]).normalize(),s}}let oe,we,ke;class wa extends r.Loader{constructor(e){super(e)}load(e,t,s,n){const i=this,o=i.path===""?r.LoaderUtils.extractUrlBase(e):i.path,a=new r.FileLoader(this.manager);a.setPath(i.path),a.setResponseType("arraybuffer"),a.setRequestHeader(i.requestHeader),a.setWithCredentials(i.withCredentials),a.load(e,function(A){try{t(i.parse(A,o))}catch(l){n?n(l):console.error(l),i.manager.itemError(e)}},s,n)}parse(e,t){if(Ma(e))oe=new va().parse(e);else{const n=Pi(e);if(!Ra(n))throw new Error("THREE.FBXLoader: Unknown format.");if(Ls(n)<7e3)throw new Error("THREE.FBXLoader: FBX version not supported, FileVersion: "+Ls(n));oe=new Ta().parse(n)}const s=new r.TextureLoader(this.manager).setPath(this.resourcePath||t).setCrossOrigin(this.crossOrigin);return new Qa(s,this.manager).parse(oe)}getFbxTree(){return oe}}class Qa{constructor(e,t){this.textureLoader=e,this.manager=t}parse(){we=this.parseConnections();const e=this.parseImages(),t=this.parseTextures(e),s=this.parseMaterials(t),n=this.parseDeformers(),i=new xa().parse(n);return this.parseScene(n,i,s),ke}parseConnections(){const e=new Map;return"Connections"in oe&&oe.Connections.connections.forEach(function(s){const n=s[0],i=s[1],o=s[2];e.has(n)||e.set(n,{parents:[],children:[]});const a={ID:i,relationship:o};e.get(n).parents.push(a),e.has(i)||e.set(i,{parents:[],children:[]});const A={ID:n,relationship:o};e.get(i).children.push(A)}),e}parseImages(){const e={},t={};if("Video"in oe.Objects){const s=oe.Objects.Video;for(const n in s){const i=s[n],o=parseInt(n);if(e[o]=i.RelativeFilename||i.Filename,"Content"in i){const a=i.Content instanceof ArrayBuffer&&i.Content.byteLength>0,A=typeof i.Content=="string"&&i.Content!=="";if(a||A){const l=this.parseImage(s[n]);t[i.RelativeFilename||i.Filename]=l}}}}for(const s in e){const n=e[s];t[n]!==void 0?e[s]=t[n]:e[s]=e[s].split("\\").pop()}return e}parseImage(e){const t=e.Content,s=e.RelativeFilename||e.Filename,n=s.slice(s.lastIndexOf(".")+1).toLowerCase();let i;switch(n){case"bmp":i="image/bmp";break;case"jpg":case"jpeg":i="image/jpeg";break;case"png":i="image/png";break;case"tif":i="image/tiff";break;case"tga":this.manager.getHandler(".tga")===null&&console.warn("FBXLoader: TGA loader not found, skipping ",s),i="image/tga";break;default:console.warn('FBXLoader: Image type "'+n+'" is not supported.');return}if(typeof t=="string")return"data:"+i+";base64,"+t;{const o=new Uint8Array(t);return window.URL.createObjectURL(new Blob([o],{type:i}))}}parseTextures(e){const t=new Map;if("Texture"in oe.Objects){const s=oe.Objects.Texture;for(const n in s){const i=this.parseTexture(s[n],e);t.set(parseInt(n),i)}}return t}parseTexture(e,t){const s=this.loadTexture(e,t);s.ID=e.id,s.name=e.attrName;const n=e.WrapModeU,i=e.WrapModeV,o=n!==void 0?n.value:0,a=i!==void 0?i.value:0;if(s.wrapS=o===0?r.RepeatWrapping:r.ClampToEdgeWrapping,s.wrapT=a===0?r.RepeatWrapping:r.ClampToEdgeWrapping,"Scaling"in e){const A=e.Scaling.value;s.repeat.x=A[0],s.repeat.y=A[1]}if("Translation"in e){const A=e.Translation.value;s.offset.x=A[0],s.offset.y=A[1]}return s}loadTexture(e,t){const s=new Set(["tga","tif","tiff","exr","dds","hdr","ktx2"]),n=e.FileName.split(".").pop().toLowerCase(),i=s.has(n)?this.manager.getHandler(`.${n}`):this.textureLoader;if(!i)return console.warn(`FBXLoader: ${n.toUpperCase()} loader not found, creating placeholder texture for`,e.RelativeFilename),new r.Texture;const o=i.path;o||i.setPath(this.textureLoader.path);const a=we.get(e.id).children;let A;a!==void 0&&a.length>0&&t[a[0].ID]!==void 0&&(A=t[a[0].ID],(A.indexOf("blob:")===0||A.indexOf("data:")===0)&&i.setPath(void 0));const l=i.load(A);return i.setPath(o),l}parseMaterials(e){const t=new Map;if("Material"in oe.Objects){const s=oe.Objects.Material;for(const n in s){const i=this.parseMaterial(s[n],e);i!==null&&t.set(parseInt(n),i)}}return t}parseMaterial(e,t){const s=e.id,n=e.attrName;let i=e.ShadingModel;if(typeof i=="object"&&(i=i.value),!we.has(s))return null;const o=this.parseParameters(e,t,s);let a;switch(i.toLowerCase()){case"phong":a=new r.MeshPhongMaterial;break;case"lambert":a=new r.MeshLambertMaterial;break;default:console.warn('THREE.FBXLoader: unknown material type "%s". Defaulting to MeshPhongMaterial.',i),a=new r.MeshPhongMaterial;break}return a.setValues(o),a.name=n,a}parseParameters(e,t,s){const n={};e.BumpFactor&&(n.bumpScale=e.BumpFactor.value),e.Diffuse?n.color=r.ColorManagement.toWorkingColorSpace(new r.Color().fromArray(e.Diffuse.value),r.SRGBColorSpace):e.DiffuseColor&&(e.DiffuseColor.type==="Color"||e.DiffuseColor.type==="ColorRGB")&&(n.color=r.ColorManagement.toWorkingColorSpace(new r.Color().fromArray(e.DiffuseColor.value),r.SRGBColorSpace)),e.DisplacementFactor&&(n.displacementScale=e.DisplacementFactor.value),e.Emissive?n.emissive=r.ColorManagement.toWorkingColorSpace(new r.Color().fromArray(e.Emissive.value),r.SRGBColorSpace):e.EmissiveColor&&(e.EmissiveColor.type==="Color"||e.EmissiveColor.type==="ColorRGB")&&(n.emissive=r.ColorManagement.toWorkingColorSpace(new r.Color().fromArray(e.EmissiveColor.value),r.SRGBColorSpace)),e.EmissiveFactor&&(n.emissiveIntensity=parseFloat(e.EmissiveFactor.value)),e.Opacity&&(n.opacity=parseFloat(e.Opacity.value)),n.opacity<1&&(n.transparent=!0),e.ReflectionFactor&&(n.reflectivity=e.ReflectionFactor.value),e.Shininess&&(n.shininess=e.Shininess.value),e.Specular?n.specular=r.ColorManagement.toWorkingColorSpace(new r.Color().fromArray(e.Specular.value),r.SRGBColorSpace):e.SpecularColor&&e.SpecularColor.type==="Color"&&(n.specular=r.ColorManagement.toWorkingColorSpace(new r.Color().fromArray(e.SpecularColor.value),r.SRGBColorSpace));const i=this;return we.get(s).children.forEach(function(o){const a=o.relationship;switch(a){case"Bump":n.bumpMap=i.getTexture(t,o.ID);break;case"Maya|TEX_ao_map":n.aoMap=i.getTexture(t,o.ID);break;case"DiffuseColor":case"Maya|TEX_color_map":n.map=i.getTexture(t,o.ID),n.map!==void 0&&(n.map.colorSpace=r.SRGBColorSpace);break;case"DisplacementColor":n.displacementMap=i.getTexture(t,o.ID);break;case"EmissiveColor":n.emissiveMap=i.getTexture(t,o.ID),n.emissiveMap!==void 0&&(n.emissiveMap.colorSpace=r.SRGBColorSpace);break;case"NormalMap":case"Maya|TEX_normal_map":n.normalMap=i.getTexture(t,o.ID);break;case"ReflectionColor":n.envMap=i.getTexture(t,o.ID),n.envMap!==void 0&&(n.envMap.mapping=r.EquirectangularReflectionMapping,n.envMap.colorSpace=r.SRGBColorSpace);break;case"SpecularColor":n.specularMap=i.getTexture(t,o.ID),n.specularMap!==void 0&&(n.specularMap.colorSpace=r.SRGBColorSpace);break;case"TransparentColor":case"TransparencyFactor":n.alphaMap=i.getTexture(t,o.ID),n.transparent=!0;break;default:console.warn("THREE.FBXLoader: %s map is not supported in three.js, skipping texture.",a);break}}),n}getTexture(e,t){return"LayeredTexture"in oe.Objects&&t in oe.Objects.LayeredTexture&&(console.warn("THREE.FBXLoader: layered textures are not supported in three.js. Discarding all but first layer."),t=we.get(t).children[0].ID),e.get(t)}parseDeformers(){const e={},t={};if("Deformer"in oe.Objects){const s=oe.Objects.Deformer;for(const n in s){const i=s[n],o=we.get(parseInt(n));if(i.attrType==="Skin"){const a=this.parseSkeleton(o,s);a.ID=n,o.parents.length>1&&console.warn("THREE.FBXLoader: skeleton attached to more than one geometry is not supported."),a.geometryID=o.parents[0].ID,e[n]=a}else if(i.attrType==="BlendShape"){const a={id:n};a.rawTargets=this.parseMorphTargets(o,s),a.id=n,o.parents.length>1&&console.warn("THREE.FBXLoader: morph target attached to more than one geometry is not supported."),t[n]=a}}}return{skeletons:e,morphTargets:t}}parseSkeleton(e,t){const s=[];return e.children.forEach(function(n){const i=t[n.ID];if(i.attrType!=="Cluster")return;const o={ID:n.ID,indices:[],weights:[],transformLink:new r.Matrix4().fromArray(i.TransformLink.a)};"Indexes"in i&&(o.indices=i.Indexes.a,o.weights=i.Weights.a),s.push(o)}),{rawBones:s,bones:[]}}parseMorphTargets(e,t){const s=[];for(let n=0;n<e.children.length;n++){const i=e.children[n],o=t[i.ID],a={name:o.attrName,initialWeight:o.DeformPercent,id:o.id,fullWeights:o.FullWeights.a};if(o.attrType!=="BlendShapeChannel")return;a.geoID=we.get(parseInt(i.ID)).children.filter(function(A){return A.relationship===void 0})[0].ID,s.push(a)}return s}parseScene(e,t,s){ke=new r.Group;const n=this.parseModels(e.skeletons,t,s),i=oe.Objects.Model,o=this;n.forEach(function(A){const l=i[A.ID];o.setLookAtProperties(A,l),we.get(A.ID)?.parents?.forEach(function(u){const p=n.get(u.ID);p!==void 0&&p.add(A)}),A.parent===null&&ke.add(A)}),this.bindSkeleton(e.skeletons,t,n),this.addGlobalSceneSettings(),ke.traverse(function(A){if(A.userData.transformData){A.parent&&(A.userData.transformData.parentMatrix=A.parent.matrix,A.userData.transformData.parentMatrixWorld=A.parent.matrixWorld);const l=Ui(A.userData.transformData);A.applyMatrix4(l),A.updateWorldMatrix()}A.isSkinnedMesh&&(A.computeBoundingBox(),A.computeBoundingSphere(),A.boundingBox.expandByScalar(3),A.boundingSphere.radius*=3)});const a=new Sa().parse();ke.children.length===1&&ke.children[0].isGroup&&(ke.children[0].animations=a,ke=ke.children[0]),ke.animations=a}parseModels(e,t,s){const n=new Map,i=oe.Objects.Model;for(const o in i){const a=parseInt(o),A=i[o],l=we.get(a);let h=this.buildSkeleton(l,e,a,A.attrName);if(!h){switch(A.attrType){case"Camera":h=this.createCamera(l);break;case"Light":h=this.createLight(l);break;case"Mesh":h=this.createMesh(l,t,s);break;case"NurbsCurve":h=this.createCurve(l,t);break;case"LimbNode":case"Root":h=new r.Bone;break;default:h=new r.Group;break}h.name=A.attrName?r.PropertyBinding.sanitizeNodeName(A.attrName):"",h.userData.originalName=A.attrName,h.ID=a}this.getTransformData(h,A),n.set(a,h)}return n}buildSkeleton(e,t,s,n){let i=null;return e?.parents.forEach(function(o){for(const a in t){const A=t[a];A.rawBones.forEach(function(l,h){if(l.ID===o.ID){const u=i;i=new r.Bone,i.matrixWorld.copy(l.transformLink),i.name=n?r.PropertyBinding.sanitizeNodeName(n):"",i.userData.originalName=n,i.ID=s,A.bones[h]=i,u!==null&&i.add(u)}})}}),i}createCamera(e){let t,s;if(e.children.forEach(function(n){const i=oe.Objects.NodeAttribute[n.ID];i!==void 0&&(s=i)}),s===void 0)t=new r.Object3D;else{let n=0;s.CameraProjectionType!==void 0&&s.CameraProjectionType.value===1&&(n=1);let i=1;s.NearPlane!==void 0&&(i=s.NearPlane.value/1e3);let o=1e3;s.FarPlane!==void 0&&(o=s.FarPlane.value/1e3);let a=window.innerWidth,A=window.innerHeight;s.AspectWidth!==void 0&&s.AspectHeight!==void 0&&(a=s.AspectWidth.value,A=s.AspectHeight.value);const l=a/A;let h=45;s.FieldOfView!==void 0&&(h=s.FieldOfView.value);const u=s.FocalLength?s.FocalLength.value:null;switch(n){case 0:t=new r.PerspectiveCamera(h,l,i,o),u!==null&&t.setFocalLength(u);break;case 1:console.warn("THREE.FBXLoader: Orthographic cameras not supported yet."),t=new r.Object3D;break;default:console.warn("THREE.FBXLoader: Unknown camera type "+n+"."),t=new r.Object3D;break}}return t}createLight(e){let t,s;if(e.children.forEach(function(n){const i=oe.Objects.NodeAttribute[n.ID];i!==void 0&&(s=i)}),s===void 0)t=new r.Object3D;else{let n;s.LightType===void 0?n=0:n=s.LightType.value;let i=16777215;s.Color!==void 0&&(i=r.ColorManagement.toWorkingColorSpace(new r.Color().fromArray(s.Color.value),r.SRGBColorSpace));let o=s.Intensity===void 0?1:s.Intensity.value/100;s.CastLightOnObject!==void 0&&s.CastLightOnObject.value===0&&(o=0);let a=0;s.FarAttenuationEnd!==void 0&&(s.EnableFarAttenuation!==void 0&&s.EnableFarAttenuation.value===0?a=0:a=s.FarAttenuationEnd.value);const A=1;switch(n){case 0:t=new r.PointLight(i,o,a,A);break;case 1:t=new r.DirectionalLight(i,o);break;case 2:let l=Math.PI/3;s.InnerAngle!==void 0&&(l=r.MathUtils.degToRad(s.InnerAngle.value));let h=0;s.OuterAngle!==void 0&&(h=r.MathUtils.degToRad(s.OuterAngle.value),h=Math.max(h,1)),t=new r.SpotLight(i,o,a,l,h,A);break;default:console.warn("THREE.FBXLoader: Unknown light type "+s.LightType.value+", defaulting to a PointLight."),t=new r.PointLight(i,o);break}s.CastShadows!==void 0&&s.CastShadows.value===1&&(t.castShadow=!0)}return t}createMesh(e,t,s){let n,i=null,o=null;const a=[];if(e.children.forEach(function(A){t.has(A.ID)&&(i=t.get(A.ID)),s.has(A.ID)&&a.push(s.get(A.ID))}),a.length>1?o=a:a.length>0?o=a[0]:(o=new r.MeshPhongMaterial({name:r.Loader.DEFAULT_MATERIAL_NAME,color:13421772}),a.push(o)),"color"in i.attributes&&a.forEach(function(A){A.vertexColors=!0}),i.groups.length>0){let A=!1;for(let l=0,h=i.groups.length;l<h;l++){const u=i.groups[l];(u.materialIndex<0||u.materialIndex>=a.length)&&(u.materialIndex=a.length,A=!0)}if(A){const l=new r.MeshStandardMaterial;a.push(l)}}return i.FBX_Deformer?(n=new r.SkinnedMesh(i,o),n.normalizeSkinWeights()):n=new r.Mesh(i,o),n}createCurve(e,t){const s=e.children.reduce(function(i,o){return t.has(o.ID)&&(i=t.get(o.ID)),i},null),n=new r.LineBasicMaterial({name:r.Loader.DEFAULT_MATERIAL_NAME,color:3342591,linewidth:1});return new r.Line(s,n)}getTransformData(e,t){const s={};"InheritType"in t&&(s.inheritType=parseInt(t.InheritType.value)),"RotationOrder"in t?s.eulerOrder=Xt(t.RotationOrder.value):s.eulerOrder=Xt(0),"Lcl_Translation"in t&&(s.translation=t.Lcl_Translation.value),"PreRotation"in t&&(s.preRotation=t.PreRotation.value),"Lcl_Rotation"in t&&(s.rotation=t.Lcl_Rotation.value),"PostRotation"in t&&(s.postRotation=t.PostRotation.value),"Lcl_Scaling"in t&&(s.scale=t.Lcl_Scaling.value),"ScalingOffset"in t&&(s.scalingOffset=t.ScalingOffset.value),"ScalingPivot"in t&&(s.scalingPivot=t.ScalingPivot.value),"RotationOffset"in t&&(s.rotationOffset=t.RotationOffset.value),"RotationPivot"in t&&(s.rotationPivot=t.RotationPivot.value),e.userData.transformData=s}setLookAtProperties(e,t){"LookAtProperty"in t&&we.get(e.ID).children.forEach(function(n){if(n.relationship==="LookAtProperty"){const i=oe.Objects.Model[n.ID];if("Lcl_Translation"in i){const o=i.Lcl_Translation.value;e.target!==void 0?(e.target.position.fromArray(o),ke.add(e.target)):e.lookAt(new r.Vector3().fromArray(o))}}})}bindSkeleton(e,t,s){const n=this.parsePoseNodes();for(const i in e){const o=e[i];we.get(parseInt(o.ID)).parents.forEach(function(A){if(t.has(A.ID)){const l=A.ID;we.get(l).parents.forEach(function(u){s.has(u.ID)&&s.get(u.ID).bind(new r.Skeleton(o.bones),n[u.ID])})}})}}parsePoseNodes(){const e={};if("Pose"in oe.Objects){const t=oe.Objects.Pose;for(const s in t)if(t[s].attrType==="BindPose"&&t[s].NbPoseNodes>0){const n=t[s].PoseNode;Array.isArray(n)?n.forEach(function(i){e[i.Node]=new r.Matrix4().fromArray(i.Matrix.a)}):e[n.Node]=new r.Matrix4().fromArray(n.Matrix.a)}}return e}addGlobalSceneSettings(){if("GlobalSettings"in oe){if("AmbientColor"in oe.GlobalSettings){const e=oe.GlobalSettings.AmbientColor.value,t=e[0],s=e[1],n=e[2];if(t!==0||s!==0||n!==0){const i=new r.Color().setRGB(t,s,n,r.SRGBColorSpace);ke.add(new r.AmbientLight(i,1))}}"UnitScaleFactor"in oe.GlobalSettings&&(ke.userData.unitScaleFactor=oe.GlobalSettings.UnitScaleFactor.value)}}}class xa{constructor(){this.negativeMaterialIndices=!1}parse(e){const t=new Map;if("Geometry"in oe.Objects){const s=oe.Objects.Geometry;for(const n in s){const i=we.get(parseInt(n)),o=this.parseGeometry(i,s[n],e);t.set(parseInt(n),o)}}return this.negativeMaterialIndices===!0&&console.warn("THREE.FBXLoader: The FBX file contains invalid (negative) material indices. The asset might not render as expected."),t}parseGeometry(e,t,s){switch(t.attrType){case"Mesh":return this.parseMeshGeometry(e,t,s);case"NurbsCurve":return this.parseNurbsGeometry(t)}}parseMeshGeometry(e,t,s){const n=s.skeletons,i=[],o=e.parents.map(function(u){return oe.Objects.Model[u.ID]});if(o.length===0)return;const a=e.children.reduce(function(u,p){return n[p.ID]!==void 0&&(u=n[p.ID]),u},null);e.children.forEach(function(u){s.morphTargets[u.ID]!==void 0&&i.push(s.morphTargets[u.ID])});const A=o[0],l={};"RotationOrder"in A&&(l.eulerOrder=Xt(A.RotationOrder.value)),"InheritType"in A&&(l.inheritType=parseInt(A.InheritType.value)),"GeometricTranslation"in A&&(l.translation=A.GeometricTranslation.value),"GeometricRotation"in A&&(l.rotation=A.GeometricRotation.value),"GeometricScaling"in A&&(l.scale=A.GeometricScaling.value);const h=Ui(l);return this.genGeometry(t,a,i,h)}genGeometry(e,t,s,n){const i=new r.BufferGeometry;e.attrName&&(i.name=e.attrName);const o=this.parseGeoNode(e,t),a=this.genBuffers(o),A=new r.Float32BufferAttribute(a.vertex,3);if(A.applyMatrix4(n),i.setAttribute("position",A),a.colors.length>0&&i.setAttribute("color",new r.Float32BufferAttribute(a.colors,3)),t&&(i.setAttribute("skinIndex",new r.Uint16BufferAttribute(a.weightsIndices,4)),i.setAttribute("skinWeight",new r.Float32BufferAttribute(a.vertexWeights,4)),i.FBX_Deformer=t),a.normal.length>0){const l=new r.Matrix3().getNormalMatrix(n),h=new r.Float32BufferAttribute(a.normal,3);h.applyNormalMatrix(l),i.setAttribute("normal",h)}if(a.uvs.forEach(function(l,h){const u=h===0?"uv":`uv${h}`;i.setAttribute(u,new r.Float32BufferAttribute(a.uvs[h],2))}),o.material&&o.material.mappingType!=="AllSame"){let l=a.materialIndex[0],h=0;if(a.materialIndex.forEach(function(u,p){u!==l&&(i.addGroup(h,p-h,l),l=u,h=p)}),i.groups.length>0){const u=i.groups[i.groups.length-1],p=u.start+u.count;p!==a.materialIndex.length&&i.addGroup(p,a.materialIndex.length-p,l)}i.groups.length===0&&i.addGroup(0,a.materialIndex.length,a.materialIndex[0])}return this.addMorphTargets(i,e,s,n),i}parseGeoNode(e,t){const s={};if(s.vertexPositions=e.Vertices!==void 0?e.Vertices.a:[],s.vertexIndices=e.PolygonVertexIndex!==void 0?e.PolygonVertexIndex.a:[],e.LayerElementColor&&(s.color=this.parseVertexColors(e.LayerElementColor[0])),e.LayerElementMaterial&&(s.material=this.parseMaterialIndices(e.LayerElementMaterial[0])),e.LayerElementNormal&&(s.normal=this.parseNormals(e.LayerElementNormal[0])),e.LayerElementUV){s.uv=[];let n=0;for(;e.LayerElementUV[n];)e.LayerElementUV[n].UV&&s.uv.push(this.parseUVs(e.LayerElementUV[n])),n++}return s.weightTable={},t!==null&&(s.skeleton=t,t.rawBones.forEach(function(n,i){n.indices.forEach(function(o,a){s.weightTable[o]===void 0&&(s.weightTable[o]=[]),s.weightTable[o].push({id:i,weight:n.weights[a]})})})),s}genBuffers(e){const t={vertex:[],normal:[],colors:[],uvs:[],materialIndex:[],vertexWeights:[],weightsIndices:[]};let s=0,n=0,i=!1,o=[],a=[],A=[],l=[],h=[],u=[];const p=this;return e.vertexIndices.forEach(function(g,m){let I,b=!1;g<0&&(g=g^-1,b=!0);let B=[],w=[];if(o.push(g*3,g*3+1,g*3+2),e.color){const C=sn(m,s,g,e.color);A.push(C[0],C[1],C[2])}if(e.skeleton){if(e.weightTable[g]!==void 0&&e.weightTable[g].forEach(function(C){w.push(C.weight),B.push(C.id)}),w.length>4){i||(console.warn("THREE.FBXLoader: Vertex has more than 4 skinning weights assigned to vertex. Deleting additional weights."),i=!0);const C=[0,0,0,0],y=[0,0,0,0];w.forEach(function(x,R){let D=x,S=B[R];y.forEach(function(v,U,G){if(D>v){G[U]=D,D=v;const H=C[U];C[U]=S,S=H}})}),B=C,w=y}for(;w.length<4;)w.push(0),B.push(0);for(let C=0;C<4;++C)h.push(w[C]),u.push(B[C])}if(e.normal){const C=sn(m,s,g,e.normal);a.push(C[0],C[1],C[2])}e.material&&e.material.mappingType!=="AllSame"&&(I=sn(m,s,g,e.material)[0],I<0&&(p.negativeMaterialIndices=!0,I=0)),e.uv&&e.uv.forEach(function(C,y){const x=sn(m,s,g,C);l[y]===void 0&&(l[y]=[]),l[y].push(x[0]),l[y].push(x[1])}),n++,b&&(p.genFace(t,e,o,I,a,A,l,h,u,n),s++,n=0,o=[],a=[],A=[],l=[],h=[],u=[])}),t}getNormalNewell(e){const t=new r.Vector3(0,0,0);for(let s=0;s<e.length;s++){const n=e[s],i=e[(s+1)%e.length];t.x+=(n.y-i.y)*(n.z+i.z),t.y+=(n.z-i.z)*(n.x+i.x),t.z+=(n.x-i.x)*(n.y+i.y)}return t.normalize(),t}getNormalTangentAndBitangent(e){const t=this.getNormalNewell(e),n=(Math.abs(t.z)>.5?new r.Vector3(0,1,0):new r.Vector3(0,0,1)).cross(t).normalize(),i=t.clone().cross(n).normalize();return{normal:t,tangent:n,bitangent:i}}flattenVertex(e,t,s){return new r.Vector2(e.dot(t),e.dot(s))}genFace(e,t,s,n,i,o,a,A,l,h){let u;if(h>3){const p=[],g=t.baseVertexPositions||t.vertexPositions;for(let B=0;B<s.length;B+=3)p.push(new r.Vector3(g[s[B]],g[s[B+1]],g[s[B+2]]));const{tangent:m,bitangent:I}=this.getNormalTangentAndBitangent(p),b=[];for(const B of p)b.push(this.flattenVertex(B,m,I));u=r.ShapeUtils.triangulateShape(b,[])}else h===2?(console.warn("THREE.FBXLoader: Edge topology detected. This is currently not supported. The resulting mesh will not be correct."),u=[[0,1,2]]):u=[[0,1,2]];for(const[p,g,m]of u)e.vertex.push(t.vertexPositions[s[p*3]]),e.vertex.push(t.vertexPositions[s[p*3+1]]),e.vertex.push(t.vertexPositions[s[p*3+2]]),e.vertex.push(t.vertexPositions[s[g*3]]),e.vertex.push(t.vertexPositions[s[g*3+1]]),e.vertex.push(t.vertexPositions[s[g*3+2]]),e.vertex.push(t.vertexPositions[s[m*3]]),e.vertex.push(t.vertexPositions[s[m*3+1]]),e.vertex.push(t.vertexPositions[s[m*3+2]]),t.skeleton&&(e.vertexWeights.push(A[p*4]),e.vertexWeights.push(A[p*4+1]),e.vertexWeights.push(A[p*4+2]),e.vertexWeights.push(A[p*4+3]),e.vertexWeights.push(A[g*4]),e.vertexWeights.push(A[g*4+1]),e.vertexWeights.push(A[g*4+2]),e.vertexWeights.push(A[g*4+3]),e.vertexWeights.push(A[m*4]),e.vertexWeights.push(A[m*4+1]),e.vertexWeights.push(A[m*4+2]),e.vertexWeights.push(A[m*4+3]),e.weightsIndices.push(l[p*4]),e.weightsIndices.push(l[p*4+1]),e.weightsIndices.push(l[p*4+2]),e.weightsIndices.push(l[p*4+3]),e.weightsIndices.push(l[g*4]),e.weightsIndices.push(l[g*4+1]),e.weightsIndices.push(l[g*4+2]),e.weightsIndices.push(l[g*4+3]),e.weightsIndices.push(l[m*4]),e.weightsIndices.push(l[m*4+1]),e.weightsIndices.push(l[m*4+2]),e.weightsIndices.push(l[m*4+3])),t.color&&(e.colors.push(o[p*3]),e.colors.push(o[p*3+1]),e.colors.push(o[p*3+2]),e.colors.push(o[g*3]),e.colors.push(o[g*3+1]),e.colors.push(o[g*3+2]),e.colors.push(o[m*3]),e.colors.push(o[m*3+1]),e.colors.push(o[m*3+2])),t.material&&t.material.mappingType!=="AllSame"&&(e.materialIndex.push(n),e.materialIndex.push(n),e.materialIndex.push(n)),t.normal&&(e.normal.push(i[p*3]),e.normal.push(i[p*3+1]),e.normal.push(i[p*3+2]),e.normal.push(i[g*3]),e.normal.push(i[g*3+1]),e.normal.push(i[g*3+2]),e.normal.push(i[m*3]),e.normal.push(i[m*3+1]),e.normal.push(i[m*3+2])),t.uv&&t.uv.forEach(function(I,b){e.uvs[b]===void 0&&(e.uvs[b]=[]),e.uvs[b].push(a[b][p*2]),e.uvs[b].push(a[b][p*2+1]),e.uvs[b].push(a[b][g*2]),e.uvs[b].push(a[b][g*2+1]),e.uvs[b].push(a[b][m*2]),e.uvs[b].push(a[b][m*2+1])})}addMorphTargets(e,t,s,n){if(s.length===0)return;e.morphTargetsRelative=!0,e.morphAttributes.position=[];const i=this;s.forEach(function(o){o.rawTargets.forEach(function(a){const A=oe.Objects.Geometry[a.geoID];A!==void 0&&i.genMorphGeometry(e,t,A,n,a.name)})})}genMorphGeometry(e,t,s,n,i){const o=t.Vertices!==void 0?t.Vertices.a:[],a=t.PolygonVertexIndex!==void 0?t.PolygonVertexIndex.a:[],A=s.Vertices!==void 0?s.Vertices.a:[],l=s.Indexes!==void 0?s.Indexes.a:[],h=e.attributes.position.count*3,u=new Float32Array(h);for(let I=0;I<l.length;I++){const b=l[I]*3;u[b]=A[I*3],u[b+1]=A[I*3+1],u[b+2]=A[I*3+2]}const p={vertexIndices:a,vertexPositions:u,baseVertexPositions:o},g=this.genBuffers(p),m=new r.Float32BufferAttribute(g.vertex,3);m.name=i||s.attrName,m.applyMatrix4(n),e.morphAttributes.position.push(m)}parseNormals(e){const t=e.MappingInformationType,s=e.ReferenceInformationType,n=e.Normals.a;let i=[];return s==="IndexToDirect"&&("NormalIndex"in e?i=e.NormalIndex.a:"NormalsIndex"in e&&(i=e.NormalsIndex.a)),{dataSize:3,buffer:n,indices:i,mappingType:t,referenceType:s}}parseUVs(e){const t=e.MappingInformationType,s=e.ReferenceInformationType,n=e.UV.a;let i=[];return s==="IndexToDirect"&&(i=e.UVIndex.a),{dataSize:2,buffer:n,indices:i,mappingType:t,referenceType:s}}parseVertexColors(e){if(!e.Colors)return;const t=e.MappingInformationType,s=e.ReferenceInformationType,n=e.Colors.a;let i=[];s==="IndexToDirect"&&(i=e.ColorIndex.a);for(let o=0,a=new r.Color;o<n.length;o+=4)a.fromArray(n,o),r.ColorManagement.toWorkingColorSpace(a,r.SRGBColorSpace),a.toArray(n,o);return{dataSize:4,buffer:n,indices:i,mappingType:t,referenceType:s}}parseMaterialIndices(e){const t=e.MappingInformationType,s=e.ReferenceInformationType;if(t==="NoMappingInformation")return{dataSize:1,buffer:[0],indices:[0],mappingType:"AllSame",referenceType:s};const n=e.Materials.a,i=[];for(let o=0;o<n.length;++o)i.push(o);return{dataSize:1,buffer:n,indices:i,mappingType:t,referenceType:s}}parseNurbsGeometry(e){const t=parseInt(e.Order);if(isNaN(t))return console.error("THREE.FBXLoader: Invalid Order %s given for geometry ID: %s",e.Order,e.id),new r.BufferGeometry;const s=t-1,n=e.KnotVector.a,i=[],o=e.Points.a;for(let u=0,p=o.length;u<p;u+=4)i.push(new r.Vector4().fromArray(o,u));let a,A;if(e.Form==="Closed")i.push(i[0]);else if(e.Form==="Periodic"){a=s,A=n.length-1-a;for(let u=0;u<s;++u)i.push(i[u])}const h=new ya(s,n,i,a,A).getPoints(i.length*12);return new r.BufferGeometry().setFromPoints(h)}}class Sa{parse(){const e=[],t=this.parseClips();if(t!==void 0)for(const s in t){const n=t[s],i=this.addClip(n);e.push(i)}return e}parseClips(){if(oe.Objects.AnimationCurve===void 0)return;const e=this.parseAnimationCurveNodes();this.parseAnimationCurves(e);const t=this.parseAnimationLayers(e);return this.parseAnimStacks(t)}parseAnimationCurveNodes(){const e=oe.Objects.AnimationCurveNode,t=new Map;for(const s in e){const n=e[s];if(n.attrName.match(/S|R|T|DeformPercent/)!==null){const i={id:n.id,attr:n.attrName,curves:{}};t.set(i.id,i)}}return t}parseAnimationCurves(e){const t=oe.Objects.AnimationCurve;for(const s in t){const n={id:t[s].id,times:t[s].KeyTime.a.map(Da),values:t[s].KeyValueFloat.a},i=we.get(n.id);if(i!==void 0){const o=i.parents[0].ID,a=i.parents[0].relationship;a.match(/X/)?e.get(o).curves.x=n:a.match(/Y/)?e.get(o).curves.y=n:a.match(/Z/)?e.get(o).curves.z=n:a.match(/DeformPercent/)&&e.has(o)&&(e.get(o).curves.morph=n)}}}parseAnimationLayers(e){const t=oe.Objects.AnimationLayer,s=new Map;for(const n in t){const i=[],o=we.get(parseInt(n));o!==void 0&&(o.children.forEach(function(A,l){if(e.has(A.ID)){const h=e.get(A.ID);if(h.curves.x!==void 0||h.curves.y!==void 0||h.curves.z!==void 0){if(i[l]===void 0){const u=we.get(A.ID).parents.filter(function(p){return p.relationship!==void 0})[0].ID;if(u!==void 0){const p=oe.Objects.Model[u.toString()];if(p===void 0){console.warn("THREE.FBXLoader: Encountered a unused curve.",A);return}const g={modelName:p.attrName?r.PropertyBinding.sanitizeNodeName(p.attrName):"",ID:p.id,initialPosition:[0,0,0],initialRotation:[0,0,0],initialScale:[1,1,1]};ke.traverse(function(m){m.ID===p.id&&(g.transform=m.matrix,m.userData.transformData&&(g.eulerOrder=m.userData.transformData.eulerOrder))}),g.transform||(g.transform=new r.Matrix4),"PreRotation"in p&&(g.preRotation=p.PreRotation.value),"PostRotation"in p&&(g.postRotation=p.PostRotation.value),i[l]=g}}i[l]&&(i[l][h.attr]=h)}else if(h.curves.morph!==void 0){if(i[l]===void 0){const u=we.get(A.ID).parents.filter(function(B){return B.relationship!==void 0})[0].ID,p=we.get(u).parents[0].ID,g=we.get(p).parents[0].ID,m=we.get(g).parents[0].ID,I=oe.Objects.Model[m],b={modelName:I.attrName?r.PropertyBinding.sanitizeNodeName(I.attrName):"",morphName:oe.Objects.Deformer[u].attrName};i[l]=b}i[l][h.attr]=h}}}),s.set(parseInt(n),i))}return s}parseAnimStacks(e){const t=oe.Objects.AnimationStack,s={};for(const n in t){const i=we.get(parseInt(n)).children;i.length>1&&console.warn("THREE.FBXLoader: Encountered an animation stack with multiple layers, this is currently not supported. Ignoring subsequent layers.");const o=e.get(i[0].ID);s[n]={name:t[n].attrName,layer:o}}return s}addClip(e){let t=[];const s=this;return e.layer.forEach(function(n){t=t.concat(s.generateTracks(n))}),new r.AnimationClip(e.name,-1,t)}generateTracks(e){const t=[];let s=new r.Vector3,n=new r.Vector3;if(e.transform&&e.transform.decompose(s,new r.Quaternion,n),s=s.toArray(),n=n.toArray(),e.T!==void 0&&Object.keys(e.T.curves).length>0){const i=this.generateVectorTrack(e.modelName,e.T.curves,s,"position");i!==void 0&&t.push(i)}if(e.R!==void 0&&Object.keys(e.R.curves).length>0){const i=this.generateRotationTrack(e.modelName,e.R.curves,e.preRotation,e.postRotation,e.eulerOrder);i!==void 0&&t.push(i)}if(e.S!==void 0&&Object.keys(e.S.curves).length>0){const i=this.generateVectorTrack(e.modelName,e.S.curves,n,"scale");i!==void 0&&t.push(i)}if(e.DeformPercent!==void 0){const i=this.generateMorphTrack(e);i!==void 0&&t.push(i)}return t}generateVectorTrack(e,t,s,n){const i=this.getTimesForAllAxes(t),o=this.getKeyframeTrackValues(i,t,s);return new r.VectorKeyframeTrack(e+"."+n,i,o)}generateRotationTrack(e,t,s,n,i){let o,a;if(t.x===void 0||t.y===void 0||t.z===void 0){console.warn("THREE.FBXLoader: Missing rotation curves "+(t.x===void 0?"x ":"")+(t.y===void 0?"y ":"")+(t.z===void 0?"z ":"")+" for animation of "+e+". This is currently not supported.");return}if(t.x!==void 0&&t.y!==void 0&&t.z!==void 0){const p=this.interpolateRotations(t.x,t.y,t.z,i);o=p[0],a=p[1]}const A=Xt(0);s!==void 0&&(s=s.map(r.MathUtils.degToRad),s.push(A),s=new r.Euler().fromArray(s),s=new r.Quaternion().setFromEuler(s)),n!==void 0&&(n=n.map(r.MathUtils.degToRad),n.push(A),n=new r.Euler().fromArray(n),n=new r.Quaternion().setFromEuler(n).invert());const l=new r.Quaternion,h=new r.Euler,u=[];if(!(!a||!o)){for(let p=0;p<a.length;p+=3)h.set(a[p],a[p+1],a[p+2],i),l.setFromEuler(h),s!==void 0&&l.premultiply(s),n!==void 0&&l.multiply(n),p>2&&new r.Quaternion().fromArray(u,(p-3)/3*4).dot(l)<0&&l.set(-l.x,-l.y,-l.z,-l.w),l.toArray(u,p/3*4);return new r.QuaternionKeyframeTrack(e+".quaternion",o,u)}}generateMorphTrack(e){const t=e.DeformPercent.curves.morph,s=t.values.map(function(i){return i/100}),n=ke.getObjectByName(e.modelName).morphTargetDictionary[e.morphName];return new r.NumberKeyframeTrack(e.modelName+".morphTargetInfluences["+n+"]",t.times,s)}getTimesForAllAxes(e){let t=[];if(e.x!==void 0&&(t=t.concat(e.x.times)),e.y!==void 0&&(t=t.concat(e.y.times)),e.z!==void 0&&(t=t.concat(e.z.times)),t=t.sort(function(s,n){return s-n}),t.length>1){let s=1,n=t[0];for(let i=1;i<t.length;i++){const o=t[i];o!==n&&(t[s]=o,n=o,s++)}t=t.slice(0,s)}return t}getKeyframeTrackValues(e,t,s){const n=s,i=[];let o=-1,a=-1,A=-1;return e.forEach(function(l){if(t.x&&(o=t.x.times.indexOf(l)),t.y&&(a=t.y.times.indexOf(l)),t.z&&(A=t.z.times.indexOf(l)),o!==-1){const h=t.x.values[o];i.push(h),n[0]=h}else i.push(n[0]);if(a!==-1){const h=t.y.values[a];i.push(h),n[1]=h}else i.push(n[1]);if(A!==-1){const h=t.z.values[A];i.push(h),n[2]=h}else i.push(n[2])}),i}interpolateRotations(e,t,s,n){const i=[],o=[];i.push(e.times[0]),o.push(r.MathUtils.degToRad(e.values[0])),o.push(r.MathUtils.degToRad(t.values[0])),o.push(r.MathUtils.degToRad(s.values[0]));for(let a=1;a<e.values.length;a++){const A=[e.values[a-1],t.values[a-1],s.values[a-1]];if(isNaN(A[0])||isNaN(A[1])||isNaN(A[2]))continue;const l=A.map(r.MathUtils.degToRad),h=[e.values[a],t.values[a],s.values[a]];if(isNaN(h[0])||isNaN(h[1])||isNaN(h[2]))continue;const u=h.map(r.MathUtils.degToRad),p=[h[0]-A[0],h[1]-A[1],h[2]-A[2]],g=[Math.abs(p[0]),Math.abs(p[1]),Math.abs(p[2])];if(g[0]>=180||g[1]>=180||g[2]>=180){const I=Math.max(...g)/180,b=new r.Euler(...l,n),B=new r.Euler(...u,n),w=new r.Quaternion().setFromEuler(b),C=new r.Quaternion().setFromEuler(B);w.dot(C)&&C.set(-C.x,-C.y,-C.z,-C.w);const y=e.times[a-1],x=e.times[a]-y,R=new r.Quaternion,D=new r.Euler;for(let S=0;S<1;S+=1/I)R.copy(w.clone().slerp(C.clone(),S)),i.push(y+S*x),D.setFromQuaternion(R,n),o.push(D.x),o.push(D.y),o.push(D.z)}else i.push(e.times[a]),o.push(r.MathUtils.degToRad(e.values[a])),o.push(r.MathUtils.degToRad(t.values[a])),o.push(r.MathUtils.degToRad(s.values[a]))}return[i,o]}}class Ta{getPrevNode(){return this.nodeStack[this.currentIndent-2]}getCurrentNode(){return this.nodeStack[this.currentIndent-1]}getCurrentProp(){return this.currentProp}pushStack(e){this.nodeStack.push(e),this.currentIndent+=1}popStack(){this.nodeStack.pop(),this.currentIndent-=1}setCurrentProp(e,t){this.currentProp=e,this.currentPropName=t}parse(e){this.currentIndent=0,this.allNodes=new Ni,this.nodeStack=[],this.currentProp=[],this.currentPropName="";const t=this,s=e.split(/[\r\n]+/);return s.forEach(function(n,i){const o=n.match(/^[\s\t]*;/),a=n.match(/^[\s\t]*$/);if(o||a)return;const A=n.match("^\\t{"+t.currentIndent+"}(\\w+):(.*){",""),l=n.match("^\\t{"+t.currentIndent+"}(\\w+):[\\s\\t\\r\\n](.*)"),h=n.match("^\\t{"+(t.currentIndent-1)+"}}");A?t.parseNodeBegin(n,A):l?t.parseNodeProperty(n,l,s[++i]):h?t.popStack():n.match(/^[^\s\t}]/)&&t.parseNodePropertyContinued(n)}),this.allNodes}parseNodeBegin(e,t){const s=t[1].trim().replace(/^"/,"").replace(/"$/,""),n=t[2].split(",").map(function(A){return A.trim().replace(/^"/,"").replace(/"$/,"")}),i={name:s},o=this.parseNodeAttr(n),a=this.getCurrentNode();this.currentIndent===0?this.allNodes.add(s,i):s in a?(s==="PoseNode"?a.PoseNode.push(i):a[s].id!==void 0&&(a[s]={},a[s][a[s].id]=a[s]),o.id!==""&&(a[s][o.id]=i)):typeof o.id=="number"?(a[s]={},a[s][o.id]=i):s!=="Properties70"&&(s==="PoseNode"?a[s]=[i]:a[s]=i),typeof o.id=="number"&&(i.id=o.id),o.name!==""&&(i.attrName=o.name),o.type!==""&&(i.attrType=o.type),this.pushStack(i)}parseNodeAttr(e){let t=e[0];e[0]!==""&&(t=parseInt(e[0]),isNaN(t)&&(t=e[0]));let s="",n="";return e.length>1&&(s=e[1].replace(/^(\w+)::/,""),n=e[2]),{id:t,name:s,type:n}}parseNodeProperty(e,t,s){let n=t[1].replace(/^"/,"").replace(/"$/,"").trim(),i=t[2].replace(/^"/,"").replace(/"$/,"").trim();n==="Content"&&i===","&&(i=s.replace(/"/g,"").replace(/,$/,"").trim());const o=this.getCurrentNode();if(o.name==="Properties70"){this.parseNodeSpecialProperty(e,n,i);return}if(n==="C"){const A=i.split(",").slice(1),l=parseInt(A[0]),h=parseInt(A[1]);let u=i.split(",").slice(3);u=u.map(function(p){return p.trim().replace(/^"/,"")}),n="connections",i=[l,h],Fa(i,u),o[n]===void 0&&(o[n]=[])}n==="Node"&&(o.id=i),n in o&&Array.isArray(o[n])?o[n].push(i):n!=="a"?o[n]=i:o.a=i,this.setCurrentProp(o,n),n==="a"&&i.slice(-1)!==","&&(o.a=_n(i))}parseNodePropertyContinued(e){const t=this.getCurrentNode();t.a+=e,e.slice(-1)!==","&&(t.a=_n(t.a))}parseNodeSpecialProperty(e,t,s){const n=s.split('",').map(function(h){return h.trim().replace(/^\"/,"").replace(/\s/,"_")}),i=n[0],o=n[1],a=n[2],A=n[3];let l=n[4];switch(o){case"int":case"enum":case"bool":case"ULongLong":case"double":case"Number":case"FieldOfView":l=parseFloat(l);break;case"Color":case"ColorRGB":case"Vector3D":case"Lcl_Translation":case"Lcl_Rotation":case"Lcl_Scaling":l=_n(l);break}this.getPrevNode()[i]={type:o,type2:a,flag:A,value:l},this.setCurrentProp(this.getPrevNode(),i)}}class va{parse(e){const t=new Fs(e);t.skip(23);const s=t.getUint32();if(s<6400)throw new Error("THREE.FBXLoader: FBX version not supported, FileVersion: "+s);const n=new Ni;for(;!this.endOfContent(t);){const i=this.parseNode(t,s);i!==null&&n.add(i.name,i)}return n}endOfContent(e){return e.size()%16===0?(e.getOffset()+160+16&-16)>=e.size():e.getOffset()+160+16>=e.size()}parseNode(e,t){const s={},n=t>=7500?e.getUint64():e.getUint32(),i=t>=7500?e.getUint64():e.getUint32();t>=7500?e.getUint64():e.getUint32();const o=e.getUint8(),a=e.getString(o);if(n===0)return null;const A=[];for(let p=0;p<i;p++)A.push(this.parseProperty(e));const l=A.length>0?A[0]:"",h=A.length>1?A[1]:"",u=A.length>2?A[2]:"";for(s.singleProperty=i===1&&e.getOffset()===n;n>e.getOffset();){const p=this.parseNode(e,t);p!==null&&this.parseSubNode(a,s,p)}return s.propertyList=A,typeof l=="number"&&(s.id=l),h!==""&&(s.attrName=h),u!==""&&(s.attrType=u),a!==""&&(s.name=a),s}parseSubNode(e,t,s){if(s.singleProperty===!0){const n=s.propertyList[0];Array.isArray(n)?(t[s.name]=s,s.a=n):t[s.name]=n}else if(e==="Connections"&&s.name==="C"){const n=[];s.propertyList.forEach(function(i,o){o!==0&&n.push(i)}),t.connections===void 0&&(t.connections=[]),t.connections.push(n)}else if(s.name==="Properties70")Object.keys(s).forEach(function(i){t[i]=s[i]});else if(e==="Properties70"&&s.name==="P"){let n=s.propertyList[0],i=s.propertyList[1];const o=s.propertyList[2],a=s.propertyList[3];let A;n.indexOf("Lcl ")===0&&(n=n.replace("Lcl ","Lcl_")),i.indexOf("Lcl ")===0&&(i=i.replace("Lcl ","Lcl_")),i==="Color"||i==="ColorRGB"||i==="Vector"||i==="Vector3D"||i.indexOf("Lcl_")===0?A=[s.propertyList[4],s.propertyList[5],s.propertyList[6]]:A=s.propertyList[4],t[n]={type:i,type2:o,flag:a,value:A}}else t[s.name]===void 0?typeof s.id=="number"?(t[s.name]={},t[s.name][s.id]=s):t[s.name]=s:s.name==="PoseNode"?(Array.isArray(t[s.name])||(t[s.name]=[t[s.name]]),t[s.name].push(s)):t[s.name][s.id]===void 0&&(t[s.name][s.id]=s)}parseProperty(e){const t=e.getString(1);let s;switch(t){case"C":return e.getBoolean();case"D":return e.getFloat64();case"F":return e.getFloat32();case"I":return e.getInt32();case"L":return e.getInt64();case"R":return s=e.getUint32(),e.getArrayBuffer(s);case"S":return s=e.getUint32(),e.getString(s);case"Y":return e.getInt16();case"b":case"c":case"d":case"f":case"i":case"l":const n=e.getUint32(),i=e.getUint32(),o=e.getUint32();if(i===0)switch(t){case"b":case"c":return e.getBooleanArray(n);case"d":return e.getFloat64Array(n);case"f":return e.getFloat32Array(n);case"i":return e.getInt32Array(n);case"l":return e.getInt64Array(n)}const a=Vt(new Uint8Array(e.getArrayBuffer(o))),A=new Fs(a.buffer);switch(t){case"b":case"c":return A.getBooleanArray(n);case"d":return A.getFloat64Array(n);case"f":return A.getFloat32Array(n);case"i":return A.getInt32Array(n);case"l":return A.getInt64Array(n)}break;default:throw new Error("THREE.FBXLoader: Unknown property type "+t)}}}class Fs{constructor(e,t){this.dv=new DataView(e),this.offset=0,this.littleEndian=t!==void 0?t:!0,this._textDecoder=new TextDecoder}getOffset(){return this.offset}size(){return this.dv.buffer.byteLength}skip(e){this.offset+=e}getBoolean(){return(this.getUint8()&1)===1}getBooleanArray(e){const t=[];for(let s=0;s<e;s++)t.push(this.getBoolean());return t}getUint8(){const e=this.dv.getUint8(this.offset);return this.offset+=1,e}getInt16(){const e=this.dv.getInt16(this.offset,this.littleEndian);return this.offset+=2,e}getInt32(){const e=this.dv.getInt32(this.offset,this.littleEndian);return this.offset+=4,e}getInt32Array(e){const t=[];for(let s=0;s<e;s++)t.push(this.getInt32());return t}getUint32(){const e=this.dv.getUint32(this.offset,this.littleEndian);return this.offset+=4,e}getInt64(){let e,t;return this.littleEndian?(e=this.getUint32(),t=this.getUint32()):(t=this.getUint32(),e=this.getUint32()),t&2147483648?(t=~t&4294967295,e=~e&4294967295,e===4294967295&&(t=t+1&4294967295),e=e+1&4294967295,-(t*4294967296+e)):t*4294967296+e}getInt64Array(e){const t=[];for(let s=0;s<e;s++)t.push(this.getInt64());return t}getUint64(){let e,t;return this.littleEndian?(e=this.getUint32(),t=this.getUint32()):(t=this.getUint32(),e=this.getUint32()),t*4294967296+e}getFloat32(){const e=this.dv.getFloat32(this.offset,this.littleEndian);return this.offset+=4,e}getFloat32Array(e){const t=[];for(let s=0;s<e;s++)t.push(this.getFloat32());return t}getFloat64(){const e=this.dv.getFloat64(this.offset,this.littleEndian);return this.offset+=8,e}getFloat64Array(e){const t=[];for(let s=0;s<e;s++)t.push(this.getFloat64());return t}getArrayBuffer(e){const t=this.dv.buffer.slice(this.offset,this.offset+e);return this.offset+=e,t}getString(e){const t=this.offset;let s=new Uint8Array(this.dv.buffer,t,e);this.skip(e);const n=s.indexOf(0);return n>=0&&(s=new Uint8Array(this.dv.buffer,t,n)),this._textDecoder.decode(s)}}class Ni{add(e,t){this[e]=t}}function Ma(c){const e="Kaydara FBX Binary \0";return c.byteLength>=e.length&&e===Pi(c,0,e.length)}function Ra(c){const e=["K","a","y","d","a","r","a","\\","F","B","X","\\","B","i","n","a","r","y","\\","\\"];let t=0;function s(n){const i=c[n-1];return c=c.slice(t+n),t++,i}for(let n=0;n<e.length;++n)if(s(1)===e[n])return!1;return!0}function Ls(c){const e=/FBXVersion: (\d+)/,t=c.match(e);if(t)return parseInt(t[1]);throw new Error("THREE.FBXLoader: Cannot find the version number for the file given.")}function Da(c){return c/46186158e3}const _a=[];function sn(c,e,t,s){let n;switch(s.mappingType){case"ByPolygonVertex":n=c;break;case"ByPolygon":n=e;break;case"ByVertice":n=t;break;case"AllSame":n=s.indices[0];break;default:console.warn("THREE.FBXLoader: unknown attribute mapping type "+s.mappingType)}s.referenceType==="IndexToDirect"&&(n=s.indices[n]);const i=n*s.dataSize,o=i+s.dataSize;return La(_a,s.buffer,i,o)}const Dn=new r.Euler,Tt=new r.Vector3;function Ui(c){const e=new r.Matrix4,t=new r.Matrix4,s=new r.Matrix4,n=new r.Matrix4,i=new r.Matrix4,o=new r.Matrix4,a=new r.Matrix4,A=new r.Matrix4,l=new r.Matrix4,h=new r.Matrix4,u=new r.Matrix4,p=new r.Matrix4,g=c.inheritType?c.inheritType:0;c.translation&&e.setPosition(Tt.fromArray(c.translation));const m=Xt(0);if(c.preRotation){const G=c.preRotation.map(r.MathUtils.degToRad);G.push(m),t.makeRotationFromEuler(Dn.fromArray(G))}if(c.rotation){const G=c.rotation.map(r.MathUtils.degToRad);G.push(c.eulerOrder||m),s.makeRotationFromEuler(Dn.fromArray(G))}if(c.postRotation){const G=c.postRotation.map(r.MathUtils.degToRad);G.push(m),n.makeRotationFromEuler(Dn.fromArray(G)),n.invert()}c.scale&&i.scale(Tt.fromArray(c.scale)),c.scalingOffset&&a.setPosition(Tt.fromArray(c.scalingOffset)),c.scalingPivot&&o.setPosition(Tt.fromArray(c.scalingPivot)),c.rotationOffset&&A.setPosition(Tt.fromArray(c.rotationOffset)),c.rotationPivot&&l.setPosition(Tt.fromArray(c.rotationPivot)),c.parentMatrixWorld&&(u.copy(c.parentMatrix),h.copy(c.parentMatrixWorld));const I=t.clone().multiply(s).multiply(n),b=new r.Matrix4;b.extractRotation(h);const B=new r.Matrix4;B.copyPosition(h);const w=B.clone().invert().multiply(h),C=b.clone().invert().multiply(w),y=i,x=new r.Matrix4;if(g===0)x.copy(b).multiply(I).multiply(C).multiply(y);else if(g===1)x.copy(b).multiply(C).multiply(I).multiply(y);else{const H=new r.Matrix4().scale(new r.Vector3().setFromMatrixScale(u)).clone().invert(),X=C.clone().multiply(H);x.copy(b).multiply(I).multiply(X).multiply(y)}const R=l.clone().invert(),D=o.clone().invert();let S=e.clone().multiply(A).multiply(l).multiply(t).multiply(s).multiply(n).multiply(R).multiply(a).multiply(o).multiply(i).multiply(D);const v=new r.Matrix4().copyPosition(S),U=h.clone().multiply(v);return p.copyPosition(U),S=p.clone().multiply(x),S.premultiply(h.invert()),S}function Xt(c){c=c||0;const e=["ZYX","YZX","XZY","ZXY","YXZ","XYZ"];return c===6?(console.warn("THREE.FBXLoader: unsupported Euler Order: Spherical XYZ. Animations and rotations may be incorrect."),e[0]):e[c]}function _n(c){return c.split(",").map(function(t){return parseFloat(t)})}function Pi(c,e,t){return e===void 0&&(e=0),t===void 0&&(t=c.byteLength),new TextDecoder().decode(new Uint8Array(c,e,t))}function Fa(c,e){for(let t=0,s=c.length,n=e.length;t<n;t++,s++)c[s]=e[t]}function La(c,e,t,s){for(let n=t,i=0;n<s;n++,i++)c[i]=e[n];return c}class ka extends r.Loader{constructor(e){super(e)}load(e,t,s,n){const i=this,o=this.path===""?r.LoaderUtils.extractUrlBase(e):this.path,a=new r.FileLoader(this.manager);a.setPath(this.path),a.setRequestHeader(this.requestHeader),a.setWithCredentials(this.withCredentials),a.load(e,function(A){try{t(i.parse(A,o))}catch(l){n?n(l):console.error(l),i.manager.itemError(e)}},s,n)}setMaterialOptions(e){return this.materialOptions=e,this}parse(e,t){const s=e.split(`
41
- `);let n={};const i=/\s+/,o={};for(let A=0;A<s.length;A++){let l=s[A];if(l=l.trim(),l.length===0||l.charAt(0)==="#")continue;const h=l.indexOf(" ");let u=h>=0?l.substring(0,h):l;u=u.toLowerCase();let p=h>=0?l.substring(h+1):"";if(p=p.trim(),u==="newmtl")n={name:p},o[p]=n;else if(u==="ka"||u==="kd"||u==="ks"||u==="ke"){const g=p.split(i,3);n[u]=[parseFloat(g[0]),parseFloat(g[1]),parseFloat(g[2])]}else n[u]=p}const a=new Ga(this.resourcePath||t,this.materialOptions);return a.setCrossOrigin(this.crossOrigin),a.setManager(this.manager),a.setMaterials(o),a}}class Ga{constructor(e="",t={}){this.baseUrl=e,this.options=t,this.materialsInfo={},this.materials={},this.materialsArray=[],this.nameLookup={},this.crossOrigin="anonymous",this.side=this.options.side!==void 0?this.options.side:r.FrontSide,this.wrap=this.options.wrap!==void 0?this.options.wrap:r.RepeatWrapping}setCrossOrigin(e){return this.crossOrigin=e,this}setManager(e){this.manager=e}setMaterials(e){this.materialsInfo=this.convert(e),this.materials={},this.materialsArray=[],this.nameLookup={}}convert(e){if(!this.options)return e;const t={};for(const s in e){const n=e[s],i={};t[s]=i;for(const o in n){let a=!0,A=n[o];const l=o.toLowerCase();switch(l){case"kd":case"ka":case"ks":this.options&&this.options.normalizeRGB&&(A=[A[0]/255,A[1]/255,A[2]/255]),this.options&&this.options.ignoreZeroRGBs&&A[0]===0&&A[1]===0&&A[2]===0&&(a=!1);break}a&&(i[l]=A)}}return t}preload(){for(const e in this.materialsInfo)this.create(e)}getIndex(e){return this.nameLookup[e]}getAsArray(){let e=0;for(const t in this.materialsInfo)this.materialsArray[e]=this.create(t),this.nameLookup[t]=e,e++;return this.materialsArray}create(e){return this.materials[e]===void 0&&this.createMaterial_(e),this.materials[e]}createMaterial_(e){const t=this,s=this.materialsInfo[e],n={name:e,side:this.side};function i(a,A){return typeof A!="string"||A===""?"":/^https?:\/\//i.test(A)?A:a+A}function o(a,A){if(n[a])return;const l=t.getTextureParams(A,n),h=t.loadTexture(i(t.baseUrl,l.url));h.repeat.copy(l.scale),h.offset.copy(l.offset),h.wrapS=t.wrap,h.wrapT=t.wrap,(a==="map"||a==="emissiveMap")&&(h.colorSpace=r.SRGBColorSpace),n[a]=h}for(const a in s){const A=s[a];let l;if(A!=="")switch(a.toLowerCase()){case"kd":n.color=r.ColorManagement.toWorkingColorSpace(new r.Color().fromArray(A),r.SRGBColorSpace);break;case"ks":n.specular=r.ColorManagement.toWorkingColorSpace(new r.Color().fromArray(A),r.SRGBColorSpace);break;case"ke":n.emissive=r.ColorManagement.toWorkingColorSpace(new r.Color().fromArray(A),r.SRGBColorSpace);break;case"map_kd":o("map",A);break;case"map_ks":o("specularMap",A);break;case"map_ke":o("emissiveMap",A);break;case"norm":o("normalMap",A);break;case"map_bump":case"bump":o("bumpMap",A);break;case"map_d":o("alphaMap",A),n.transparent=!0;break;case"ns":n.shininess=parseFloat(A);break;case"d":l=parseFloat(A),l<1&&(n.opacity=l,n.transparent=!0);break;case"tr":l=parseFloat(A),this.options&&this.options.invertTrProperty&&(l=1-l),l>0&&(n.opacity=1-l,n.transparent=!0);break}}return this.materials[e]=new r.MeshPhongMaterial(n),this.materials[e]}getTextureParams(e,t){const s={scale:new r.Vector2(1,1),offset:new r.Vector2(0,0)},n=e.split(/\s+/);let i;return i=n.indexOf("-bm"),i>=0&&(t.bumpScale=parseFloat(n[i+1]),n.splice(i,2)),i=n.indexOf("-s"),i>=0&&(s.scale.set(parseFloat(n[i+1]),parseFloat(n[i+2])),n.splice(i,4)),i=n.indexOf("-o"),i>=0&&(s.offset.set(parseFloat(n[i+1]),parseFloat(n[i+2])),n.splice(i,4)),s.url=n.join(" ").trim(),s}loadTexture(e,t,s,n,i){const o=this.manager!==void 0?this.manager:r.DefaultLoadingManager;let a=o.getHandler(e);a===null&&(a=new r.TextureLoader(o)),a.setCrossOrigin&&a.setCrossOrigin(this.crossOrigin);const A=a.load(e,s,n,i);return t!==void 0&&(A.mapping=t),A}}const Na=/^[og]\s*(.+)?/,Ua=/^mtllib /,Pa=/^usemtl /,Oa=/^usemap /,ks=/\s+/,Gs=new r.Vector3,Fn=new r.Vector3,Ns=new r.Vector3,Us=new r.Vector3,Je=new r.Vector3,on=new r.Color;function Ha(){const c={objects:[],object:{},vertices:[],normals:[],colors:[],uvs:[],materials:{},materialLibraries:[],startObject:function(e,t){if(this.object&&this.object.fromDeclaration===!1){this.object.name=e,this.object.fromDeclaration=t!==!1;return}const s=this.object&&typeof this.object.currentMaterial=="function"?this.object.currentMaterial():void 0;if(this.object&&typeof this.object._finalize=="function"&&this.object._finalize(!0),this.object={name:e||"",fromDeclaration:t!==!1,geometry:{vertices:[],normals:[],colors:[],uvs:[],hasUVIndices:!1},materials:[],smooth:!0,startMaterial:function(n,i){const o=this._finalize(!1);o&&(o.inherited||o.groupCount<=0)&&this.materials.splice(o.index,1);const a={index:this.materials.length,name:n||"",mtllib:Array.isArray(i)&&i.length>0?i[i.length-1]:"",smooth:o!==void 0?o.smooth:this.smooth,groupStart:o!==void 0?o.groupEnd:0,groupEnd:-1,groupCount:-1,inherited:!1,clone:function(A){const l={index:typeof A=="number"?A:this.index,name:this.name,mtllib:this.mtllib,smooth:this.smooth,groupStart:0,groupEnd:-1,groupCount:-1,inherited:!1};return l.clone=this.clone.bind(l),l}};return this.materials.push(a),a},currentMaterial:function(){if(this.materials.length>0)return this.materials[this.materials.length-1]},_finalize:function(n){const i=this.currentMaterial();if(i&&i.groupEnd===-1&&(i.groupEnd=this.geometry.vertices.length/3,i.groupCount=i.groupEnd-i.groupStart,i.inherited=!1),n&&this.materials.length>1)for(let o=this.materials.length-1;o>=0;o--)this.materials[o].groupCount<=0&&this.materials.splice(o,1);return n&&this.materials.length===0&&this.materials.push({name:"",smooth:this.smooth}),i}},s&&s.name&&typeof s.clone=="function"){const n=s.clone(0);n.inherited=!0,this.object.materials.push(n)}this.objects.push(this.object)},finalize:function(){this.object&&typeof this.object._finalize=="function"&&this.object._finalize(!0)},parseVertexIndex:function(e,t){const s=parseInt(e,10);return(s>=0?s-1:s+t/3)*3},parseNormalIndex:function(e,t){const s=parseInt(e,10);return(s>=0?s-1:s+t/3)*3},parseUVIndex:function(e,t){const s=parseInt(e,10);return(s>=0?s-1:s+t/2)*2},addVertex:function(e,t,s){const n=this.vertices,i=this.object.geometry.vertices;i.push(n[e+0],n[e+1],n[e+2]),i.push(n[t+0],n[t+1],n[t+2]),i.push(n[s+0],n[s+1],n[s+2])},addVertexPoint:function(e){const t=this.vertices;this.object.geometry.vertices.push(t[e+0],t[e+1],t[e+2])},addVertexLine:function(e){const t=this.vertices;this.object.geometry.vertices.push(t[e+0],t[e+1],t[e+2])},addNormal:function(e,t,s){const n=this.normals,i=this.object.geometry.normals;i.push(n[e+0],n[e+1],n[e+2]),i.push(n[t+0],n[t+1],n[t+2]),i.push(n[s+0],n[s+1],n[s+2])},addFaceNormal:function(e,t,s){const n=this.vertices,i=this.object.geometry.normals;Gs.fromArray(n,e),Fn.fromArray(n,t),Ns.fromArray(n,s),Je.subVectors(Ns,Fn),Us.subVectors(Gs,Fn),Je.cross(Us),Je.normalize(),i.push(Je.x,Je.y,Je.z),i.push(Je.x,Je.y,Je.z),i.push(Je.x,Je.y,Je.z)},addColor:function(e,t,s){const n=this.colors,i=this.object.geometry.colors;n[e]!==void 0&&i.push(n[e+0],n[e+1],n[e+2]),n[t]!==void 0&&i.push(n[t+0],n[t+1],n[t+2]),n[s]!==void 0&&i.push(n[s+0],n[s+1],n[s+2])},addUV:function(e,t,s){const n=this.uvs,i=this.object.geometry.uvs;i.push(n[e+0],n[e+1]),i.push(n[t+0],n[t+1]),i.push(n[s+0],n[s+1])},addDefaultUV:function(){const e=this.object.geometry.uvs;e.push(0,0),e.push(0,0),e.push(0,0)},addUVLine:function(e){const t=this.uvs;this.object.geometry.uvs.push(t[e+0],t[e+1])},addFace:function(e,t,s,n,i,o,a,A,l){const h=this.vertices.length;let u=this.parseVertexIndex(e,h),p=this.parseVertexIndex(t,h),g=this.parseVertexIndex(s,h);if(this.addVertex(u,p,g),this.addColor(u,p,g),a!==void 0&&a!==""){const m=this.normals.length;u=this.parseNormalIndex(a,m),p=this.parseNormalIndex(A,m),g=this.parseNormalIndex(l,m),this.addNormal(u,p,g)}else this.addFaceNormal(u,p,g);if(n!==void 0&&n!==""){const m=this.uvs.length;u=this.parseUVIndex(n,m),p=this.parseUVIndex(i,m),g=this.parseUVIndex(o,m),this.addUV(u,p,g),this.object.geometry.hasUVIndices=!0}else this.addDefaultUV()},addPointGeometry:function(e){this.object.geometry.type="Points";const t=this.vertices.length;for(let s=0,n=e.length;s<n;s++){const i=this.parseVertexIndex(e[s],t);this.addVertexPoint(i),this.addColor(i)}},addLineGeometry:function(e,t){this.object.geometry.type="Line";const s=this.vertices.length,n=this.uvs.length;for(let i=0,o=e.length;i<o;i++)this.addVertexLine(this.parseVertexIndex(e[i],s));for(let i=0,o=t.length;i<o;i++)this.addUVLine(this.parseUVIndex(t[i],n))}};return c.startObject("",!1),c}class ja extends r.Loader{constructor(e){super(e),this.materials=null,this.materialsLoader=new ka(e)}load(e,t,s,n){const i=this,o=new r.FileLoader(this.manager);o.setPath(this.path),o.setRequestHeader(this.requestHeader),o.setWithCredentials(this.withCredentials),o.load(e,async function(a){try{const A=i.parse(a,!0);for(let l=0,h=A.materialLibraries.length;l<h;l++){const u=A.materialLibraries[l],p=e.startsWith("blob:")?e+"/"+u:new URL(u,e);console.debug("Loading MTL file: "+p),await new Promise((g,m)=>{i.materialsLoader.load(p.toString(),I=>{i.setMaterials(I),g()},null,m)})}t(i.createObjects(A))}catch(A){n?n(A):console.error(A),i.manager.itemError(e)}},s,n)}setMTLLoader(e){return this.materialsLoader=e,this}setMaterials(e){return this.materials=e,this}parse(e,t=!1){const s=new Ha;e.indexOf(`\r
41
+ `);let n={};const i=/\s+/,o={};for(let A=0;A<s.length;A++){let l=s[A];if(l=l.trim(),l.length===0||l.charAt(0)==="#")continue;const h=l.indexOf(" ");let u=h>=0?l.substring(0,h):l;u=u.toLowerCase();let p=h>=0?l.substring(h+1):"";if(p=p.trim(),u==="newmtl")n={name:p},o[p]=n;else if(u==="ka"||u==="kd"||u==="ks"||u==="ke"){const g=p.split(i,3);n[u]=[parseFloat(g[0]),parseFloat(g[1]),parseFloat(g[2])]}else n[u]=p}const a=new Ga(this.resourcePath||t,this.materialOptions);return a.setCrossOrigin(this.crossOrigin),a.setManager(this.manager),a.setMaterials(o),a}}class Ga{constructor(e="",t={}){this.baseUrl=e,this.options=t,this.materialsInfo={},this.materials={},this.materialsArray=[],this.nameLookup={},this.crossOrigin="anonymous",this.side=this.options.side!==void 0?this.options.side:r.FrontSide,this.wrap=this.options.wrap!==void 0?this.options.wrap:r.RepeatWrapping}setCrossOrigin(e){return this.crossOrigin=e,this}setManager(e){this.manager=e}setMaterials(e){this.materialsInfo=this.convert(e),this.materials={},this.materialsArray=[],this.nameLookup={}}convert(e){if(!this.options)return e;const t={};for(const s in e){const n=e[s],i={};t[s]=i;for(const o in n){let a=!0,A=n[o];const l=o.toLowerCase();switch(l){case"kd":case"ka":case"ks":this.options&&this.options.normalizeRGB&&(A=[A[0]/255,A[1]/255,A[2]/255]),this.options&&this.options.ignoreZeroRGBs&&A[0]===0&&A[1]===0&&A[2]===0&&(a=!1);break}a&&(i[l]=A)}}return t}preload(){for(const e in this.materialsInfo)this.create(e)}getIndex(e){return this.nameLookup[e]}getAsArray(){let e=0;for(const t in this.materialsInfo)this.materialsArray[e]=this.create(t),this.nameLookup[t]=e,e++;return this.materialsArray}create(e){return this.materials[e]===void 0&&this.createMaterial_(e),this.materials[e]}createMaterial_(e){const t=this,s=this.materialsInfo[e],n={name:e,side:this.side};function i(a,A){return typeof A!="string"||A===""?"":/^https?:\/\//i.test(A)?A:a+A}function o(a,A){if(n[a])return;const l=t.getTextureParams(A,n),h=t.loadTexture(i(t.baseUrl,l.url));h.repeat.copy(l.scale),h.offset.copy(l.offset),h.wrapS=t.wrap,h.wrapT=t.wrap,(a==="map"||a==="emissiveMap")&&(h.colorSpace=r.SRGBColorSpace),n[a]=h}for(const a in s){const A=s[a];let l;if(A!=="")switch(a.toLowerCase()){case"kd":n.color=r.ColorManagement.toWorkingColorSpace(new r.Color().fromArray(A),r.SRGBColorSpace);break;case"ks":n.specular=r.ColorManagement.toWorkingColorSpace(new r.Color().fromArray(A),r.SRGBColorSpace);break;case"ke":n.emissive=r.ColorManagement.toWorkingColorSpace(new r.Color().fromArray(A),r.SRGBColorSpace);break;case"map_kd":o("map",A);break;case"map_ks":o("specularMap",A);break;case"map_ke":o("emissiveMap",A);break;case"norm":o("normalMap",A);break;case"map_bump":case"bump":o("bumpMap",A);break;case"map_d":o("alphaMap",A),n.transparent=!0;break;case"ns":n.shininess=parseFloat(A);break;case"d":l=parseFloat(A),l<1&&(n.opacity=l,n.transparent=!0);break;case"tr":l=parseFloat(A),this.options&&this.options.invertTrProperty&&(l=1-l),l>0&&(n.opacity=1-l,n.transparent=!0);break}}return this.materials[e]=new r.MeshPhongMaterial(n),this.materials[e]}getTextureParams(e,t){const s={scale:new r.Vector2(1,1),offset:new r.Vector2(0,0)},n=e.split(/\s+/);let i;return i=n.indexOf("-bm"),i>=0&&(t.bumpScale=parseFloat(n[i+1]),n.splice(i,2)),i=n.indexOf("-s"),i>=0&&(s.scale.set(parseFloat(n[i+1]),parseFloat(n[i+2])),n.splice(i,4)),i=n.indexOf("-o"),i>=0&&(s.offset.set(parseFloat(n[i+1]),parseFloat(n[i+2])),n.splice(i,4)),s.url=n.join(" ").trim(),s}loadTexture(e,t,s,n,i){const o=this.manager!==void 0?this.manager:r.DefaultLoadingManager;let a=o.getHandler(e);a===null&&(a=new r.TextureLoader(o)),a.setCrossOrigin&&a.setCrossOrigin(this.crossOrigin);const A=a.load(e,s,n,i);return t!==void 0&&(A.mapping=t),A}}const Na=/^[og]\s*(.+)?/,Ua=/^mtllib /,Pa=/^usemtl /,Oa=/^usemap /,ks=/\s+/,Gs=new r.Vector3,Fn=new r.Vector3,Ns=new r.Vector3,Us=new r.Vector3,Je=new r.Vector3,on=new r.Color;function Ha(){const c={objects:[],object:{},vertices:[],normals:[],colors:[],uvs:[],materials:{},materialLibraries:[],startObject:function(e,t){if(this.object&&this.object.fromDeclaration===!1){this.object.name=e,this.object.fromDeclaration=t!==!1;return}const s=this.object&&typeof this.object.currentMaterial=="function"?this.object.currentMaterial():void 0;if(this.object&&typeof this.object._finalize=="function"&&this.object._finalize(!0),this.object={name:e||"",fromDeclaration:t!==!1,geometry:{vertices:[],normals:[],colors:[],uvs:[],hasUVIndices:!1},materials:[],smooth:!0,startMaterial:function(n,i){const o=this._finalize(!1);o&&(o.inherited||o.groupCount<=0)&&this.materials.splice(o.index,1);const a={index:this.materials.length,name:n||"",mtllib:Array.isArray(i)&&i.length>0?i[i.length-1]:"",smooth:o!==void 0?o.smooth:this.smooth,groupStart:o!==void 0?o.groupEnd:0,groupEnd:-1,groupCount:-1,inherited:!1,clone:function(A){const l={index:typeof A=="number"?A:this.index,name:this.name,mtllib:this.mtllib,smooth:this.smooth,groupStart:0,groupEnd:-1,groupCount:-1,inherited:!1};return l.clone=this.clone.bind(l),l}};return this.materials.push(a),a},currentMaterial:function(){if(this.materials.length>0)return this.materials[this.materials.length-1]},_finalize:function(n){const i=this.currentMaterial();if(i&&i.groupEnd===-1&&(i.groupEnd=this.geometry.vertices.length/3,i.groupCount=i.groupEnd-i.groupStart,i.inherited=!1),n&&this.materials.length>1)for(let o=this.materials.length-1;o>=0;o--)this.materials[o].groupCount<=0&&this.materials.splice(o,1);return n&&this.materials.length===0&&this.materials.push({name:"",smooth:this.smooth}),i}},s&&s.name&&typeof s.clone=="function"){const n=s.clone(0);n.inherited=!0,this.object.materials.push(n)}this.objects.push(this.object)},finalize:function(){this.object&&typeof this.object._finalize=="function"&&this.object._finalize(!0)},parseVertexIndex:function(e,t){const s=parseInt(e,10);return(s>=0?s-1:s+t/3)*3},parseNormalIndex:function(e,t){const s=parseInt(e,10);return(s>=0?s-1:s+t/3)*3},parseUVIndex:function(e,t){const s=parseInt(e,10);return(s>=0?s-1:s+t/2)*2},addVertex:function(e,t,s){const n=this.vertices,i=this.object.geometry.vertices;i.push(n[e+0],n[e+1],n[e+2]),i.push(n[t+0],n[t+1],n[t+2]),i.push(n[s+0],n[s+1],n[s+2])},addVertexPoint:function(e){const t=this.vertices;this.object.geometry.vertices.push(t[e+0],t[e+1],t[e+2])},addVertexLine:function(e){const t=this.vertices;this.object.geometry.vertices.push(t[e+0],t[e+1],t[e+2])},addNormal:function(e,t,s){const n=this.normals,i=this.object.geometry.normals;i.push(n[e+0],n[e+1],n[e+2]),i.push(n[t+0],n[t+1],n[t+2]),i.push(n[s+0],n[s+1],n[s+2])},addFaceNormal:function(e,t,s){const n=this.vertices,i=this.object.geometry.normals;Gs.fromArray(n,e),Fn.fromArray(n,t),Ns.fromArray(n,s),Je.subVectors(Ns,Fn),Us.subVectors(Gs,Fn),Je.cross(Us),Je.normalize(),i.push(Je.x,Je.y,Je.z),i.push(Je.x,Je.y,Je.z),i.push(Je.x,Je.y,Je.z)},addColor:function(e,t,s){const n=this.colors,i=this.object.geometry.colors;n[e]!==void 0&&i.push(n[e+0],n[e+1],n[e+2]),n[t]!==void 0&&i.push(n[t+0],n[t+1],n[t+2]),n[s]!==void 0&&i.push(n[s+0],n[s+1],n[s+2])},addUV:function(e,t,s){const n=this.uvs,i=this.object.geometry.uvs;i.push(n[e+0],n[e+1]),i.push(n[t+0],n[t+1]),i.push(n[s+0],n[s+1])},addDefaultUV:function(){const e=this.object.geometry.uvs;e.push(0,0),e.push(0,0),e.push(0,0)},addUVLine:function(e){const t=this.uvs;this.object.geometry.uvs.push(t[e+0],t[e+1])},addFace:function(e,t,s,n,i,o,a,A,l){const h=this.vertices.length;let u=this.parseVertexIndex(e,h),p=this.parseVertexIndex(t,h),g=this.parseVertexIndex(s,h);if(this.addVertex(u,p,g),this.addColor(u,p,g),a!==void 0&&a!==""){const m=this.normals.length;u=this.parseNormalIndex(a,m),p=this.parseNormalIndex(A,m),g=this.parseNormalIndex(l,m),this.addNormal(u,p,g)}else this.addFaceNormal(u,p,g);if(n!==void 0&&n!==""){const m=this.uvs.length;u=this.parseUVIndex(n,m),p=this.parseUVIndex(i,m),g=this.parseUVIndex(o,m),this.addUV(u,p,g),this.object.geometry.hasUVIndices=!0}else this.addDefaultUV()},addPointGeometry:function(e){this.object.geometry.type="Points";const t=this.vertices.length;for(let s=0,n=e.length;s<n;s++){const i=this.parseVertexIndex(e[s],t);this.addVertexPoint(i),this.addColor(i)}},addLineGeometry:function(e,t){this.object.geometry.type="Line";const s=this.vertices.length,n=this.uvs.length;for(let i=0,o=e.length;i<o;i++)this.addVertexLine(this.parseVertexIndex(e[i],s));for(let i=0,o=t.length;i<o;i++)this.addUVLine(this.parseUVIndex(t[i],n))}};return c.startObject("",!1),c}class ja extends r.Loader{constructor(e){super(e),this.materials=null,this.materialsLoader=new ka(e)}load(e,t,s,n){const i=this,o=new r.FileLoader(this.manager);o.setPath(this.path),o.setRequestHeader(this.requestHeader),o.setWithCredentials(this.withCredentials),o.load(e,async function(a){try{const A=i.parse(a,!0);for(let l=0,h=A.materialLibraries.length;l<h;l++){const u=A.materialLibraries[l];if(!u||typeof u!="string"||u.trim()===""){console.warn("THREE.OBJLoader: Invalid or empty material library reference, skipping.");continue}const p=e.startsWith("blob:")?e+"/"+u:new URL(u,e);console.debug("Loading MTL file: "+p),await new Promise((g,m)=>{i.materialsLoader.load(p.toString(),I=>{i.setMaterials(I),g()},null,m)})}t(i.createObjects(A))}catch(A){n?n(A):console.error(A),i.manager.itemError(e)}},s,n)}setMTLLoader(e){return this.materialsLoader=e,this}setMaterials(e){return this.materials=e,this}parse(e,t=!1){const s=new Ha;e.indexOf(`\r
42
42
  `)!==-1&&(e=e.replace(/\r\n/g,`
43
43
  `)),e.indexOf(`\\
44
44
  `)!==-1&&(e=e.replace(/\\\n/g,""));const n=e.split(`
@@ -1,4 +1,4 @@
1
- import { getParam, DeviceUtilities } from "../engine_utils.js";
1
+ import { DeviceUtilities, getParam } from "../engine_utils.js";
2
2
  import { getErrorCount } from "./debug_overlay.js";
3
3
  let consoleInstance = undefined;
4
4
  let consoleHtmlElement = null;
@@ -1 +1 @@
1
- {"version":3,"file":"debug_console.js","sourceRoot":"","sources":["../../../src/engine/debug/debug_console.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"debug_console.js","sourceRoot":"","sources":["../../../src/engine/debug/debug_console.ts"],"names":[],"mappings":"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"}
@@ -31,6 +31,7 @@ import { Time } from './engine_time.js';
31
31
  import { patchTonemapping } from './engine_tonemapping.js';
32
32
  import { deepClone, DeviceUtilities, getParam } from './engine_utils.js';
33
33
  import { NeedleMenu } from './webcomponents/needle menu/needle-menu.js';
34
+ import { Telemetry } from './engine_license.js';
34
35
  const debug = getParam("debugcontext");
35
36
  const stats = getParam("stats");
36
37
  const debugActive = getParam("debugactive");
@@ -1280,6 +1281,7 @@ export class Context {
1280
1281
  if (this._renderlooperrors >= 3) {
1281
1282
  console.warn("Stopping render loop due to error");
1282
1283
  this.renderer.setAnimationLoop(null);
1284
+ Telemetry.sendError(Context.Current, "renderloop", err instanceof Error ? err : new Error(String(err)));
1283
1285
  }
1284
1286
  this.domElement.dispatchEvent(new CustomEvent("error", { detail: err }));
1285
1287
  }