quake2ts 0.0.65 → 0.0.67

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 (57) hide show
  1. package/apps/demo/dist/assets/index-Lj9akWtw.js +1 -0
  2. package/apps/demo/dist/index.html +1 -1
  3. package/apps/viewer/dist/browser/index.global.js +1 -1
  4. package/apps/viewer/dist/browser/index.global.js.map +1 -1
  5. package/apps/viewer/dist/cjs/index.cjs +30 -3
  6. package/apps/viewer/dist/cjs/index.cjs.map +1 -1
  7. package/apps/viewer/dist/esm/index.js +30 -3
  8. package/apps/viewer/dist/esm/index.js.map +1 -1
  9. package/apps/viewer/dist/tsconfig.tsbuildinfo +1 -1
  10. package/package.json +1 -1
  11. package/packages/client/dist/browser/index.global.js +1 -1
  12. package/packages/client/dist/browser/index.global.js.map +1 -1
  13. package/packages/client/dist/cjs/index.cjs +30 -3
  14. package/packages/client/dist/cjs/index.cjs.map +1 -1
  15. package/packages/client/dist/esm/index.js +30 -3
  16. package/packages/client/dist/esm/index.js.map +1 -1
  17. package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
  18. package/packages/client/dist/types/hud/layout.d.ts +11 -0
  19. package/packages/client/dist/types/hud/layout.d.ts.map +1 -0
  20. package/packages/client/dist/types/hud/numbers.d.ts +3 -0
  21. package/packages/client/dist/types/hud/numbers.d.ts.map +1 -0
  22. package/packages/client/dist/types/hud.d.ts +4 -1
  23. package/packages/client/dist/types/hud.d.ts.map +1 -1
  24. package/packages/engine/dist/browser/index.global.js +9 -9
  25. package/packages/engine/dist/browser/index.global.js.map +1 -1
  26. package/packages/engine/dist/cjs/index.cjs +37 -3
  27. package/packages/engine/dist/cjs/index.cjs.map +1 -1
  28. package/packages/engine/dist/esm/index.js +37 -3
  29. package/packages/engine/dist/esm/index.js.map +1 -1
  30. package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
  31. package/packages/engine/dist/types/index.d.ts +1 -0
  32. package/packages/engine/dist/types/index.d.ts.map +1 -1
  33. package/packages/engine/dist/types/render/camera.d.ts +9 -0
  34. package/packages/engine/dist/types/render/camera.d.ts.map +1 -1
  35. package/packages/engine/dist/types/render/renderer.d.ts +13 -2
  36. package/packages/engine/dist/types/render/renderer.d.ts.map +1 -1
  37. package/packages/engine/dist/types/render/resources.d.ts +4 -1
  38. package/packages/engine/dist/types/render/resources.d.ts.map +1 -1
  39. package/packages/engine/dist/types/render/scene.d.ts +22 -0
  40. package/packages/engine/dist/types/render/scene.d.ts.map +1 -0
  41. package/packages/engine/dist/types/render/sprite.d.ts +17 -0
  42. package/packages/engine/dist/types/render/sprite.d.ts.map +1 -0
  43. package/packages/game/dist/browser/index.global.js.map +1 -1
  44. package/packages/game/dist/cjs/index.cjs.map +1 -1
  45. package/packages/game/dist/esm/index.js.map +1 -1
  46. package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
  47. package/packages/shared/dist/browser/index.global.js +1 -1
  48. package/packages/shared/dist/browser/index.global.js.map +1 -1
  49. package/packages/shared/dist/cjs/index.cjs +12 -9
  50. package/packages/shared/dist/cjs/index.cjs.map +1 -1
  51. package/packages/shared/dist/esm/index.js +12 -9
  52. package/packages/shared/dist/esm/index.js.map +1 -1
  53. package/packages/shared/dist/tsconfig.tsbuildinfo +1 -1
  54. package/packages/shared/dist/types/bsp/collision.d.ts.map +1 -1
  55. package/apps/demo/dist/assets/index-D1xQWPvb.js +0 -1
  56. package/packages/engine/dist/types/render/draw.d.ts +0 -9
  57. package/packages/engine/dist/types/render/draw.d.ts.map +0 -1
@@ -1,7 +1,7 @@
1
- "use strict";var Quake2Engine=(()=>{var Mc=Object.create;var Nn=Object.defineProperty;var _c=Object.getOwnPropertyDescriptor;var Ac=Object.getOwnPropertyNames;var wc=Object.getPrototypeOf,Lc=Object.prototype.hasOwnProperty;var zc=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),ii=(t,e)=>{for(var r in e)Nn(t,r,{get:e[r],enumerable:!0})},_s=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Ac(e))!Lc.call(t,o)&&o!==r&&Nn(t,o,{get:()=>e[o],enumerable:!(n=_c(e,o))||n.enumerable});return t};var Ec=(t,e,r)=>(r=t!=null?Mc(wc(t)):{},_s(e||!t||!t.__esModule?Nn(r,"default",{value:t,enumerable:!0}):r,t)),Cc=t=>_s(Nn({},"__esModule",{value:!0}),t);var ta=zc((tm,ea)=>{"use strict";ea.exports=Worker});var Gd={};ii(Gd,{ATTN_IDLE:()=>Fa,ATTN_LOOP_NONE:()=>Ta,ATTN_NONE:()=>ko,ATTN_NORM:()=>Pa,ATTN_STATIC:()=>Ia,AssetDependencyError:()=>Yt,AssetDependencyTracker:()=>Pn,AssetManager:()=>Io,AudioApi:()=>qo,AudioContextController:()=>Ho,AudioRegistry:()=>br,AudioRegistryError:()=>En,AudioSystem:()=>Wo,BSP_SURFACE_FRAGMENT_SOURCE:()=>Qi,BSP_SURFACE_VERTEX_SOURCE:()=>$i,BSP_VERTEX_LAYOUT:()=>Yi,BspSurfacePipeline:()=>Ko,Camera:()=>ei,ConfigStringRegistry:()=>Jt,Cvar:()=>Fr,CvarRegistry:()=>qn,EngineHost:()=>$t,EngineRuntime:()=>Pr,FixedTimestepLoop:()=>Tt,Framebuffer:()=>Yo,IndexBuffer:()=>ke,LruCache:()=>ut,MAX_SOUND_CHANNELS:()=>Gi,MD2_FRAGMENT_SHADER:()=>os,MD2_VERTEX_SHADER:()=>ns,MD3_FRAGMENT_SHADER:()=>fs,MD3_VERTEX_SHADER:()=>ms,Md2Loader:()=>er,Md2MeshBuffers:()=>Qo,Md2ParseError:()=>ie,Md2Pipeline:()=>Jo,Md3Loader:()=>tr,Md3ModelMesh:()=>ti,Md3ParseError:()=>Ee,Md3Pipeline:()=>ri,Md3SurfaceMesh:()=>Rn,MusicSystem:()=>Xo,PARTICLE_FRAGMENT_SHADER:()=>hs,PARTICLE_VERTEX_SHADER:()=>ps,PakArchive:()=>Zt,PakIndexStore:()=>Fo,PakIngestionError:()=>dt,PakParseError:()=>ze,PakValidationError:()=>Pt,PakValidator:()=>jn,ParticleRenderer:()=>oi,ParticleSystem:()=>ni,RERELEASE_KNOWN_PAKS:()=>xi,SKYBOX_FRAGMENT_SHADER:()=>ts,SKYBOX_VERTEX_SHADER:()=>es,SOUND_FULLVOLUME:()=>Sr,SOUND_LOOP_ATTENUATE:()=>Ra,ShaderProgram:()=>he,SkyboxPipeline:()=>$o,SoundChannel:()=>Ro,SoundPrecache:()=>Bo,SoundRegistry:()=>No,Texture2D:()=>Mr,TextureCache:()=>rr,TextureCubeMap:()=>_r,VertexArray:()=>be,VertexBuffer:()=>ye,VirtualFileSystem:()=>Yn,advanceAnimation:()=>Ys,applySurfaceState:()=>qa,attenuationToDistanceMultiplier:()=>jt,boxIntersectsFrustum:()=>In,buildBspGeometry:()=>Na,buildMd2Geometry:()=>is,buildMd2VertexData:()=>ss,buildMd3SurfaceGeometry:()=>ds,buildMd3VertexData:()=>us,calculateMaxAudibleDistance:()=>Do,calculatePakChecksum:()=>Ns,computeFrameBlend:()=>js,computeSkyScroll:()=>Ka,createAnimationState:()=>Ks,createAudioGraph:()=>Oo,createEngine:()=>Ud,createEngineRuntime:()=>Hs,createInitialChannels:()=>Vo,createProgramFromSources:()=>Oa,createWebGLContext:()=>Da,decodeOgg:()=>Po,deriveSurfaceRenderState:()=>Zi,extractFrustumPlanes:()=>Ba,filesToPakSources:()=>gi,findLeafForPoint:()=>Ki,gatherVisibleFaces:()=>Wa,groupMd2Animations:()=>Xs,ingestPakFiles:()=>Bs,ingestPaks:()=>Kn,interpolateMd3Tag:()=>fc,interpolateVec3:()=>$s,parseMd2:()=>vi,parseMd3:()=>bi,parsePcx:()=>Qs,parseWal:()=>Qn,parseWalTexture:()=>Zs,parseWav:()=>Zn,pcxToRgba:()=>Jn,pickChannel:()=>Uo,preparePcxTexture:()=>Js,removeViewTranslation:()=>ja,resolveLightStyles:()=>Ji,spatializeOrigin:()=>Go,spawnBlood:()=>yc,spawnBulletImpact:()=>pc,spawnExplosion:()=>hc,spawnMuzzleFlash:()=>gc,spawnTeleportFlash:()=>xc,spawnTrail:()=>vc,walToRgba:()=>Si,wireDropTarget:()=>Vs,wireFileInput:()=>Us});var Tc=()=>typeof performance<"u"?performance.now():Date.now(),Pc=t=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>t()):setTimeout(t,25)},Tt=class{constructor(e,r={}){this.callbacks=e;this.accumulatorMs=0;this.frame=0;this.running=!1;this.tick=()=>{if(!this.running)return;let e=this.options.now(),r=this.lastTimeMs===void 0?0:e-this.lastTimeMs;this.lastTimeMs=e,this.advance(r,e),this.running&&this.options.schedule(this.tick)};let n=r.fixedDeltaMs??25,o=r.maxSubSteps??5;this.options={fixedDeltaMs:n,maxSubSteps:o,maxDeltaMs:r.maxDeltaMs??n*o,startTimeMs:r.startTimeMs,now:r.now??Tc,schedule:r.schedule??Pc}}start(){this.running||(this.running=!0,this.lastTimeMs=this.options.startTimeMs??this.options.now(),this.options.schedule(this.tick))}stop(){this.running=!1}pump(e){let r=(this.lastTimeMs??0)+e;this.lastTimeMs=r,this.advance(e,r)}isRunning(){return this.running}get frameNumber(){return this.frame}advance(e,r){let n=Math.min(Math.max(e,0),this.options.maxDeltaMs);this.accumulatorMs=Math.min(this.accumulatorMs+n,this.options.fixedDeltaMs*this.options.maxSubSteps);let o=0;for(;this.accumulatorMs>=this.options.fixedDeltaMs&&o<this.options.maxSubSteps;)this.frame+=1,this.callbacks.simulate({frame:this.frame,deltaMs:this.options.fixedDeltaMs,nowMs:r}),this.accumulatorMs-=this.options.fixedDeltaMs,o+=1;let i=this.options.fixedDeltaMs===0?0:this.accumulatorMs/this.options.fixedDeltaMs;this.callbacks.render?.({alpha:i,nowMs:r,accumulatorMs:this.accumulatorMs,frame:this.frame})}};var $t=class{constructor(e,r,n={}){this.game=e;this.client=r;this.started=!1;this.stepSimulation=e=>{this.previousFrame=this.latestFrame,this.latestFrame=this.game.frame(e,this.latestCommand)};this.renderClient=e=>{this.client&&(this.latestCommand=this.client.render({...e,previous:this.previousFrame,latest:this.latestFrame}))};let o=n.loop?.now?.()??Date.now();this.startTimeMs=n.startTimeMs??n.loop?.startTimeMs??o,this.loop=new Tt({simulate:this.stepSimulation,render:this.renderClient},{...n.loop,startTimeMs:this.startTimeMs})}start(){this.started||(this.latestFrame=this.game.init(this.startTimeMs)??this.latestFrame,this.client?.init(this.latestFrame),this.started=!0,this.loop.start())}stop(){this.started&&(this.loop.stop(),this.client?.shutdown(),this.game.shutdown(),this.previousFrame=void 0,this.latestFrame=void 0,this.started=!1)}pump(e){this.loop.pump(e)}getLatestFrame(){return this.latestFrame}isRunning(){return this.loop.isRunning()}};var As={x:0,y:0,z:0};var jd=Math.PI/180;function ws(t,e){return{x:t.x-e.x,y:t.y-e.y,z:t.z-e.z}}function Fc(t,e){return{x:t.x*e,y:t.y*e,z:t.z*e}}function ai(t,e){return t.x*e.x+t.y*e.y+t.z*e.z}function Ic(t){return ai(t,t)}function ci(t){return Math.sqrt(Ic(t))}function Oe(t){let e=ci(t);return e===0?t:Fc(t,1/e)}var Rc=Math.PI/180,Kd=180/Math.PI,Qt=Rc;function kc(){return new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])}function Ls(t,e){let r=e.x,n=e.y,o=e.z;return{x:t[0]*r+t[4]*n+t[8]*o+t[12],y:t[1]*r+t[5]*n+t[9]*o+t[13],z:t[2]*r+t[6]*n+t[10]*o+t[14]}}function zs(t,e){let r=kc();return r[0]=e[0].x,r[1]=e[0].y,r[2]=e[0].z,r[4]=e[1].x,r[5]=e[1].y,r[6]=e[1].z,r[8]=e[2].x,r[9]=e[2].y,r[10]=e[2].z,r[12]=t.x,r[13]=t.y,r[14]=t.z,r}var Ge=1,lt=2;var li=8,di=16,Dc=32;var Hc=16384;var Bn=65536,Es=1<<17,Oc=1<<18,Nc=1<<19,Bc=1<<20,Vc=1<<21,Uc=1<<22,Gc=1<<23,$d=1<<24,Vn=1<<25,Wc=1<<26,Qd=1<<27,Jd=1<<28,Zd=1<<29,Un=1<<30,eu=1<<31;var Tr=0;var Cs=4,Ts=8,Ps=16,Fs=32,Is=64;var tu=1<<25,ru=1<<28,nu=1<<29,ou=1<<30,iu=1<<31;var su=Ge|lt,au=Ge|Bn|lt|Vn|Un,cu=Ge|Bn|lt,lu=Ge|Es|lt|Vn|Un,du=Dc|li|di,uu=Ge|di|li,Xc=Ge|Vn|Un|lt|Wc,mu=Oc|Nc|Bc|Vc|Uc|Gc,fu=Ge|li|di|Vn|Un,pu=Ge|Bn|lt,hu=Ge|lt,yu=Ge|Bn|lt|Es,xu=Xc|Hc;var gu=Number.MAX_SAFE_INTEGER-1;var Gn=(t=>(t[t.None=0]="None",t[t.Archive=1]="Archive",t[t.UserInfo=2]="UserInfo",t[t.ServerInfo=4]="ServerInfo",t[t.Latch=8]="Latch",t[t.Cheat=16]="Cheat",t))(Gn||{});var Wn=256;var ui=256,mi=8192,Xn=2048,fi=512,pi=256,hi=Wn*2,yi=256,si=32,Cr=96;var X=(t=>(t[t.Name=0]="Name",t[t.CdTrack=1]="CdTrack",t[t.Sky=2]="Sky",t[t.SkyAxis=3]="SkyAxis",t[t.SkyRotate=4]="SkyRotate",t[t.StatusBar=5]="StatusBar",t[t.AirAccel=59]="AirAccel",t[t.MaxClients=60]="MaxClients",t[t.MapChecksum=61]="MapChecksum",t[t.Models=62]="Models",t[t.Sounds=62+mi]="Sounds",t[t.Images=t.Sounds+Xn]="Images",t[t.Lights=t.Images+fi]="Lights",t[t.ShadowLights=t.Lights+ui]="ShadowLights",t[t.Items=t.ShadowLights+yi]="Items",t[t.PlayerSkins=t.Items+pi]="PlayerSkins",t[t.General=t.PlayerSkins+Wn]="General",t[t.WheelWeapons=t.General+hi]="WheelWeapons",t[t.WheelAmmo=t.WheelWeapons+si]="WheelAmmo",t[t.WheelPowerups=t.WheelAmmo+si]="WheelPowerups",t[t.CdLoopCount=t.WheelPowerups+si]="CdLoopCount",t[t.GameStyle=t.CdLoopCount+1]="GameStyle",t[t.MaxConfigStrings=t.GameStyle+1]="MaxConfigStrings",t))(X||{}),Rs=X.MaxConfigStrings;function ks(t){return t>=5&&t<59?Cr*(59-t):t>=X.General&&t<X.WheelWeapons?Cr*(X.MaxConfigStrings-t):Cr}function qc(t){if(t<0||t>=X.MaxConfigStrings)throw new RangeError(`Configstring index ${t} is out of range (0-${X.MaxConfigStrings-1})`)}function Ds(t,e){let r=ks(t);if(e.length>r)throw new RangeError(`Configstring ${t} exceeds maximum length (${e.length} > ${r}); limit is ${Cr} chars per slot`)}var Jt=class{constructor(){this.values=new Map;this.modelCursor=X.Models;this.soundCursor=X.Sounds;this.imageCursor=X.Images;this.lightCursor=X.Lights;this.shadowLightCursor=X.ShadowLights;this.itemCursor=X.Items;this.playerSkinCursor=X.PlayerSkins;this.generalCursor=X.General}set(e,r){return qc(e),Ds(e,r),this.values.set(e,r),e}get(e){return this.values.get(e)}getAll(){let e=new Array(Rs).fill("");for(let[r,n]of this.values.entries())e[r]=n;return e}modelIndex(e){return this.register(e,X.Models,mi,"modelCursor")}soundIndex(e){return this.register(e,X.Sounds,Xn,"soundCursor")}findSoundIndex(e){for(let r=X.Sounds;r<X.Sounds+Xn;r+=1)if(this.values.get(r)===e)return r}imageIndex(e){return this.register(e,X.Images,fi,"imageCursor")}lightIndex(e){return this.register(e,X.Lights,ui,"lightCursor")}shadowLightIndex(e){return this.register(e,X.ShadowLights,yi,"shadowLightCursor")}itemIndex(e){return this.register(e,X.Items,pi,"itemCursor")}playerSkinIndex(e){return this.register(e,X.PlayerSkins,Wn,"playerSkinCursor")}generalIndex(e){return this.register(e,X.General,hi,"generalCursor")}register(e,r,n,o){for(let a=r;a<r+n;a+=1)if(this.values.get(a)===e)return a;let i=this[o],s=r+n;if(i>=s)throw new RangeError(`Out of configstring slots for range starting at ${r}`);return Ds(i,e),this.values.set(i,e),this[o]=i+1,i}};var Pr=class{constructor(e,r){this.engine=e;this.host=r;this.started=!1}start(){this.started||(this.engine.init(),this.host.start(),this.started=!0)}stop(){this.started&&(this.host.stop(),this.engine.shutdown(),this.started=!1)}pump(e){this.host.pump(e)}getLatestFrame(){return this.host.getLatestFrame()}isRunning(){return this.started&&this.host.isRunning()}};function Hs(t,e,r,n){return new Pr(t,new $t(e,r,n))}var Fr=class{constructor({name:e,defaultValue:r,description:n,flags:o=Gn.None,onChange:i}){this.modifiedCount=0;this.name=e,this.defaultValue=r,this.description=n,this.flags=o,this._value=r,this.onChange=i}get string(){return this._value}get number(){return Number(this._value)}get integer(){return Math.trunc(this.number)}get boolean(){return!!this.integer}set(e){if(this.flags&Gn.Latch){if(e===this._value){this.latched=void 0;return}if(this.latched===e)return;this.latched!==e&&(this.latched=e);return}this.apply(e)}reset(){this.latched=void 0,this.apply(this.defaultValue)}applyLatched(){if(this.latched===void 0)return!1;let e=this.latched;return this.latched=void 0,e===this._value?!1:(this.apply(e),!0)}apply(e){if(this._value===e)return;let r=this._value;this._value=e,this.modifiedCount+=1,this.onChange?.(this,r)}},qn=class{constructor(){this.cvars=new Map}register(e){let r=this.cvars.get(e.name);if(r)return r;let n=new Fr(e);return this.cvars.set(e.name,n),n}get(e){return this.cvars.get(e)}setValue(e,r){let n=this.get(e);if(!n)throw new Error(`Unknown cvar: ${e}`);return n.set(r),n}resetAll(){for(let e of this.cvars.values())e.reset()}applyLatched(){let e=!1;for(let r of this.cvars.values())e=r.applyLatched()||e;return e}list(){return[...this.cvars.values()].sort((e,r)=>e.name.localeCompare(r.name))}};var Yc="PACK";function jc(t,e,r){let n=[];for(let o=0;o<r;o+=1){let i=t.getUint8(e+o);if(i===0)break;n.push(i)}return String.fromCharCode(...n)}function te(t){return t.replace(/\\/g,"/").replace(/^\/+/,"").toLowerCase()}function Kc(){let t=new Uint32Array(256);for(let e=0;e<256;e+=1){let r=e;for(let n=0;n<8;n+=1)r=(r&1)!==0?3988292384^r>>>1:r>>>1;t[e]=r>>>0}return t}var $c=Kc();function Os(t){let e=4294967295;for(let r=0;r<t.length;r+=1){let n=t[r];e=$c[(e^n)&255]^e>>>8}return(e^4294967295)>>>0}var ze=class extends Error{},Zt=class t{constructor(e,r,n,o){this.name=e;this.buffer=r;this.entries=new Map(n.map(i=>[i.name,i])),this.checksum=o,this.size=r.byteLength}static fromArrayBuffer(e,r){let n=new DataView(r);if(r.byteLength<12)throw new ze("PAK buffer too small to contain header");let o=String.fromCharCode(n.getUint8(0),n.getUint8(1),n.getUint8(2),n.getUint8(3));if(o!==Yc)throw new ze(`Invalid PAK header magic: ${o}`);let i=n.getInt32(4,!0),s=n.getInt32(8,!0);if(i<12)throw new ze(`Invalid directory offset: ${i}`);if(s<=0||s%64!==0)throw new ze(`Invalid directory length: ${s}`);if(i+s>r.byteLength)throw new ze("Directory exceeds buffer length");let c=s/64,l=[],d=new Map;for(let u=0;u<c;u+=1){let m=i+u*64,f=jc(n,m,56),h=te(f),y=n.getInt32(m+56,!0),p=n.getInt32(m+60,!0);if(y<0||p<0||y+p>r.byteLength)throw new ze(`Invalid entry bounds for ${f||"<unnamed>"} (offset=${y}, length=${p})`);if(!h)throw new ze(`Entry ${u} has an empty name`);let x={name:h,offset:y,length:p};d.set(h,x)}return l.push(...d.values()),new t(e,r,l,Os(new Uint8Array(r)))}getEntry(e){return this.entries.get(te(e))}listEntries(){return Array.from(this.entries.values())}readFile(e){let r=this.getEntry(e);if(!r)throw new ze(`File not found in PAK: ${e}`);return new Uint8Array(this.buffer,r.offset,r.length)}validate(){return{checksum:this.checksum,entries:this.listEntries()}}};function Ns(t){return Os(new Uint8Array(t))}var Yn=class{constructor(e=[]){this.mounts=[];this.files=new Map;e.forEach(r=>this.mountPak(r))}mountPak(e){this.mounts.push(e);for(let r of e.listEntries()){let n=te(r.name);this.files.set(n,{archive:e,entry:r})}}get mountedPaks(){return[...this.mounts]}hasFile(e){return this.files.has(te(e))}stat(e){let r=this.files.get(te(e));if(r)return{path:r.entry.name,size:r.entry.length,sourcePak:r.archive.name}}async readFile(e){let r=this.files.get(te(e));if(!r)throw new Error(`File not found in VFS: ${e}`);return r.archive.readFile(e)}list(e=""){let r=te(e).replace(/\/+$|^\//g,""),n=[],o=new Set,i=r?`${r}/`:"";for(let s of this.files.values()){if(r&&!s.entry.name.startsWith(i))continue;let a=r?s.entry.name.slice(i.length):s.entry.name,c=a.indexOf("/");c===-1?n.push({path:s.entry.name,size:s.entry.length,sourcePak:s.archive.name}):o.add(a.slice(0,c))}return n.sort((s,a)=>s.path.localeCompare(a.path)),{files:n,directories:[...o].sort()}}findByExtension(e){let r=e.startsWith(".")?e.toLowerCase():`.${e.toLowerCase()}`,n=[];for(let o of this.files.values())o.entry.name.toLowerCase().endsWith(r)&&n.push({path:o.entry.name,size:o.entry.length,sourcePak:o.archive.name});return n.sort((o,i)=>o.path.localeCompare(i.path))}};var xi=Object.freeze([{name:"pak0.pak",checksum:2378051181,description:"Base game assets"},{name:"pak0.pak@baseq2",checksum:2378051181,description:"Base game assets (baseq2)"},{name:"pak0.pak@rogue",checksum:3373211245,description:"Ground Zero (rogue) mission pack"},{name:"pak0.pak@xatrix",checksum:1358269824,description:"The Reckoning (xatrix) mission pack"}]),Pt=class extends Error{constructor(r){super(r.status==="unknown"?`Unknown PAK not allowed: ${r.name}`:`PAK checksum mismatch for ${r.name}`);this.result=r;this.name="PakValidationError"}},jn=class{constructor(e=xi){this.known=new Map;e.forEach(r=>this.known.set(this.normalizePakName(r.name),r))}validateArchive(e,r){let n=this.normalizePakName(r??("name"in e?e.name:"unknown")),o=e.checksum,i="size"in e?e.size:void 0,s=this.known.get(n);return s?s.checksum!==o?{name:n,checksum:o,expectedChecksum:s.checksum,status:"mismatch",size:i,description:s.description}:{name:n,checksum:o,expectedChecksum:s.checksum,status:"valid",size:i,description:s.description}:{name:n,checksum:o,status:"unknown",size:i}}assertValid(e,r){let n=this.validateArchive(e,r);if(n.status==="mismatch")throw new Pt(n);return n}normalizePakName(e){let r=te(e),n=r.split("/"),o=n.pop()??r,i=n.pop();return i?`${o}@${i}`:o}};var dt=class extends Error{constructor(r,n){super(`Failed to ingest PAK: ${r}`);this.file=r;this.name="PakIngestionError",n instanceof Error&&n.stack&&(this.stack=n.stack),this.cause=n}};async function Qc(t,e){if(typeof t.arrayBuffer=="function"){let r=await t.arrayBuffer();return e?.({file:"blob",loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}if(typeof FileReader<"u")return new Promise((r,n)=>{let o=new FileReader;o.onerror=()=>n(o.error??new Error("Unknown FileReader error")),o.onprogress=i=>{e?.({file:"blob",loadedBytes:i.loaded,totalBytes:i.total||t.size,state:"reading"})},o.onload=()=>{let i=o.result;i instanceof ArrayBuffer?r(i):n(new Error("Unexpected FileReader result"))},o.readAsArrayBuffer(t)});if(typeof Response<"u"){let r=await new Response(t).arrayBuffer();return e?.({file:"blob",loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}if(typeof t.stream=="function"){let r=t.stream().getReader(),n=[],o=0;for(;;){let{done:a,value:c}=await r.read();if(a)break;if(!c)continue;let l=c;n.push(l),o+=l.byteLength,e?.({file:"blob",loadedBytes:o,totalBytes:t.size,state:"reading"})}let i=new Uint8Array(o),s=0;for(let a of n)i.set(a,s),s+=a.byteLength;return i.buffer}throw new dt("blob",new Error("Unsupported Blob type"))}async function Jc(t,e){if(t.data instanceof ArrayBuffer)return e?.({file:t.name,loadedBytes:t.data.byteLength,totalBytes:t.data.byteLength,state:"reading"}),t.data;if(t.data instanceof Blob){let n=t.data.size;return Qc(t.data,o=>e?.({...o,file:t.name,totalBytes:n}))}let r=t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength);return e?.({file:t.name,loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}async function Kn(t,e,r){let n=typeof r=="function"?{onProgress:r}:r??{},o=n.persistIndexes??!!n.pakIndexStore,i=n.enforceValidation??!!n.validator,s=n.allowUnknownPaks??!0,a=n.stopOnError??!1,c=[];for(let l of e)try{let d=await Jc(l,n.onProgress),u=Zt.fromArrayBuffer(l.name,d),m=n.validator?.validateArchive(u);if(m){n.onValidationResult?.(m);let f=m.status==="mismatch",h=m.status==="unknown";if(f&&i||h&&!s){let y=new Pt(m);if(n.onError?.(l.name,y),a)throw new dt(l.name,y);c.push({archive:u,mounted:!1,validation:m});continue}}if(t.mountPak(u),o&&n.pakIndexStore)try{await n.pakIndexStore.persist(u)}catch(f){if(n.onError?.(l.name,f),a)throw new dt(l.name,f)}n.onProgress?.({file:l.name,loadedBytes:d.byteLength,totalBytes:d.byteLength,state:"parsed"}),c.push({archive:u,mounted:!0,validation:m})}catch(d){if(n.onProgress?.({file:l.name,loadedBytes:0,totalBytes:0,state:"error"}),n.onError?.(l.name,d),a)throw new dt(l.name,d)}return c}var ut=class{constructor(e){this.capacity=e;this.map=new Map;if(e<=0)throw new RangeError("LRU cache capacity must be greater than zero")}get size(){return this.map.size}has(e){return this.map.has(e)}get(e){let r=this.map.get(e);if(r!==void 0)return this.map.delete(e),this.map.set(e,r),r}set(e,r){if(this.map.has(e)&&this.map.delete(e),this.map.set(e,r),this.map.size>this.capacity){let n=this.map.keys().next();n.done||this.map.delete(n.value)}}delete(e){return this.map.delete(e)}clear(){this.map.clear()}entries(){return Array.from(this.map.entries()).reverse().map(([e,r])=>({key:e,value:r}))}};function Zc(t){return Array.isArray(t)?t:Array.from(t)}function gi(t){return Zc(t).map(e=>({name:e.name,data:e}))}async function Bs(t,e,r){let n=gi(e);return Kn(t,n,r??{})}function Vs(t,e){let r=o=>{o.preventDefault(),o.dataTransfer?.dropEffect&&(o.dataTransfer.dropEffect="copy")},n=o=>{o.preventDefault();let i=o.dataTransfer?.files;i&&i.length>0&&e(Array.from(i))};return t.addEventListener("dragover",r),t.addEventListener("drop",n),()=>{t.removeEventListener("dragover",r),t.removeEventListener("drop",n)}}function Us(t,e){let r=n=>{let o=n.target;!o||!o.files||o.files.length===0||(e(o.files),o.value="")};return t.addEventListener("change",r),()=>t.removeEventListener("change",r)}var el=844121161,tl=8,Gs=68,rl=[{x:-.525731,y:0,z:.850651},{x:-.442863,y:.238856,z:.864188},{x:-.295242,y:0,z:.955423},{x:-.309017,y:.5,z:.809017},{x:-.16246,y:.262866,z:.951056},{x:0,y:0,z:1},{x:0,y:.850651,z:.525731},{x:-.147621,y:.716567,z:.681718},{x:.147621,y:.716567,z:.681718},{x:0,y:.525731,z:.850651},{x:.309017,y:.5,z:.809017},{x:.525731,y:0,z:.850651},{x:.295242,y:0,z:.955423},{x:.442863,y:.238856,z:.864188},{x:.16246,y:.262866,z:.951056},{x:-.681718,y:.147621,z:.716567},{x:-.809017,y:.309017,z:.5},{x:-.587785,y:.425325,z:.688191},{x:-.850651,y:.525731,z:0},{x:-.864188,y:.442863,z:.238856},{x:-.716567,y:.681718,z:.147621},{x:-.688191,y:.587785,z:.425325},{x:-.5,y:.809017,z:.309017},{x:-.238856,y:.864188,z:.442863},{x:-.425325,y:.688191,z:.587785},{x:-.716567,y:.681718,z:-.147621},{x:-.5,y:.809017,z:-.309017},{x:-.525731,y:.850651,z:0},{x:0,y:.850651,z:-.525731},{x:-.238856,y:.864188,z:-.442863},{x:0,y:.955423,z:-.295242},{x:-.262866,y:.951056,z:-.16246},{x:0,y:1,z:0},{x:0,y:.955423,z:.295242},{x:-.262866,y:.951056,z:.16246},{x:.238856,y:.864188,z:.442863},{x:.262866,y:.951056,z:.16246},{x:.5,y:.809017,z:.309017},{x:.238856,y:.864188,z:-.442863},{x:.262866,y:.951056,z:-.16246},{x:.5,y:.809017,z:-.309017},{x:.850651,y:.525731,z:0},{x:.716567,y:.681718,z:.147621},{x:.716567,y:.681718,z:-.147621},{x:.525731,y:.850651,z:0},{x:.425325,y:.688191,z:.587785},{x:.864188,y:.442863,z:.238856},{x:.688191,y:.587785,z:.425325},{x:.809017,y:.309017,z:.5},{x:.681718,y:.147621,z:.716567},{x:.587785,y:.425325,z:.688191},{x:.955423,y:.295242,z:0},{x:1,y:0,z:0},{x:.951056,y:.16246,z:.262866},{x:.850651,y:-.525731,z:0},{x:.955423,y:-.295242,z:0},{x:.864188,y:-.442863,z:.238856},{x:.951056,y:-.16246,z:.262866},{x:.809017,y:-.309017,z:.5},{x:.681718,y:-.147621,z:.716567},{x:.850651,y:0,z:.525731},{x:.864188,y:.442863,z:-.238856},{x:.809017,y:.309017,z:-.5},{x:.951056,y:.16246,z:-.262866},{x:.525731,y:0,z:-.850651},{x:.681718,y:.147621,z:-.716567},{x:.681718,y:-.147621,z:-.716567},{x:.850651,y:0,z:-.525731},{x:.809017,y:-.309017,z:-.5},{x:.864188,y:-.442863,z:-.238856},{x:.951056,y:-.16246,z:-.262866},{x:.147621,y:.716567,z:-.681718},{x:.309017,y:.5,z:-.809017},{x:.425325,y:.688191,z:-.587785},{x:.442863,y:.238856,z:-.864188},{x:.587785,y:.425325,z:-.688191},{x:.688191,y:.587785,z:-.425325},{x:-.147621,y:.716567,z:-.681718},{x:-.309017,y:.5,z:-.809017},{x:0,y:.525731,z:-.850651},{x:-.525731,y:0,z:-.850651},{x:-.442863,y:.238856,z:-.864188},{x:-.295242,y:0,z:-.955423},{x:-.16246,y:.262866,z:-.951056},{x:0,y:0,z:-1},{x:.295242,y:0,z:-.955423},{x:.16246,y:.262866,z:-.951056},{x:-.442863,y:-.238856,z:-.864188},{x:-.309017,y:-.5,z:-.809017},{x:-.16246,y:-.262866,z:-.951056},{x:0,y:-.850651,z:-.525731},{x:-.147621,y:-.716567,z:-.681718},{x:.147621,y:-.716567,z:-.681718},{x:0,y:-.525731,z:-.850651},{x:.309017,y:-.5,z:-.809017},{x:.442863,y:-.238856,z:-.864188},{x:.16246,y:-.262866,z:-.951056},{x:.238856,y:-.864188,z:-.442863},{x:.5,y:-.809017,z:-.309017},{x:.425325,y:-.688191,z:-.587785},{x:.716567,y:-.681718,z:-.147621},{x:.688191,y:-.587785,z:-.425325},{x:.587785,y:-.425325,z:-.688191},{x:0,y:-.955423,z:-.295242},{x:0,y:-1,z:0},{x:.262866,y:-.951056,z:-.16246},{x:0,y:-.850651,z:.525731},{x:0,y:-.955423,z:.295242},{x:.238856,y:-.864188,z:.442863},{x:.262866,y:-.951056,z:.16246},{x:.5,y:-.809017,z:.309017},{x:.716567,y:-.681718,z:.147621},{x:.525731,y:-.850651,z:0},{x:-.238856,y:-.864188,z:-.442863},{x:-.5,y:-.809017,z:-.309017},{x:-.262866,y:-.951056,z:-.16246},{x:-.850651,y:-.525731,z:0},{x:-.716567,y:-.681718,z:-.147621},{x:-.716567,y:-.681718,z:.147621},{x:-.525731,y:-.850651,z:0},{x:-.5,y:-.809017,z:.309017},{x:-.238856,y:-.864188,z:.442863},{x:-.262866,y:-.951056,z:.16246},{x:-.864188,y:-.442863,z:.238856},{x:-.809017,y:-.309017,z:.5},{x:-.688191,y:-.587785,z:.425325},{x:-.681718,y:-.147621,z:.716567},{x:-.442863,y:-.238856,z:.864188},{x:-.587785,y:-.425325,z:.688191},{x:-.309017,y:-.5,z:.809017},{x:-.147621,y:-.716567,z:.681718},{x:-.425325,y:-.688191,z:.587785},{x:-.16246,y:-.262866,z:.951056},{x:.442863,y:-.238856,z:.864188},{x:.16246,y:-.262866,z:.951056},{x:.309017,y:-.5,z:.809017},{x:.147621,y:-.716567,z:.681718},{x:0,y:-.525731,z:.850651},{x:.425325,y:-.688191,z:.587785},{x:.587785,y:-.425325,z:.688191},{x:.688191,y:-.587785,z:.425325},{x:-.955423,y:.295242,z:0},{x:-.951056,y:.16246,z:.262866},{x:-1,y:0,z:0},{x:-.850651,y:0,z:.525731},{x:-.955423,y:-.295242,z:0},{x:-.951056,y:-.16246,z:.262866},{x:-.864188,y:.442863,z:-.238856},{x:-.951056,y:.16246,z:-.262866},{x:-.809017,y:.309017,z:-.5},{x:-.864188,y:-.442863,z:-.238856},{x:-.951056,y:-.16246,z:-.262866},{x:-.809017,y:-.309017,z:-.5},{x:-.681718,y:.147621,z:-.716567},{x:-.681718,y:-.147621,z:-.716567},{x:-.850651,y:0,z:-.525731},{x:-.688191,y:.587785,z:-.425325},{x:-.587785,y:.425325,z:-.688191},{x:-.425325,y:.688191,z:-.587785},{x:-.425325,y:-.688191,z:-.587785},{x:-.587785,y:-.425325,z:-.688191},{x:-.688191,y:-.587785,z:-.425325}],ie=class extends Error{},er=class{constructor(e){this.vfs=e}async load(e){let r=await this.vfs.readFile(e),n=new Uint8Array(r.byteLength);return n.set(r),vi(n.buffer)}};function Ws(t,e,r){let n=[];for(let o=0;o<r;o+=1){let i=t.getUint8(e+o);if(i===0)break;n.push(i)}return String.fromCharCode(...n)}function Ir(t,e,r,n){if(r!==0&&(e<Gs||e+r>t.byteLength))throw new ie(`${n} section is out of bounds`)}function nl(t){if(t.byteLength<Gs)throw new ie("MD2 buffer too small to contain header");let e=new DataView(t),r=e.getInt32(0,!0),n=e.getInt32(4,!0);if(r!==el)throw new ie(`Invalid MD2 ident: ${r}`);if(n!==tl)throw new ie(`Unsupported MD2 version: ${n}`);let o={ident:r,version:n,skinWidth:e.getInt32(8,!0),skinHeight:e.getInt32(12,!0),frameSize:e.getInt32(16,!0),numSkins:e.getInt32(20,!0),numVertices:e.getInt32(24,!0),numTexCoords:e.getInt32(28,!0),numTriangles:e.getInt32(32,!0),numGlCommands:e.getInt32(36,!0),numFrames:e.getInt32(40,!0),offsetSkins:e.getInt32(44,!0),offsetTexCoords:e.getInt32(48,!0),offsetTriangles:e.getInt32(52,!0),offsetFrames:e.getInt32(56,!0),offsetGlCommands:e.getInt32(60,!0),offsetEnd:e.getInt32(64,!0)},i=40+o.numVertices*4;if(o.frameSize!==i)throw new ie(`Unexpected frame size ${o.frameSize}, expected ${i}`);if(o.offsetEnd>t.byteLength)throw new ie("MD2 offset_end exceeds buffer length");return o}function ol(t,e){let r=e.numSkins*64;Ir(t,e.offsetSkins,r,"skins");let n=new DataView(t,e.offsetSkins,r),o=[];for(let i=0;i<e.numSkins;i+=1)o.push({name:Ws(n,i*64,64)});return o}function il(t,e){let r=e.numTexCoords*4;Ir(t,e.offsetTexCoords,r,"texcoords");let n=new DataView(t,e.offsetTexCoords,r),o=[];for(let i=0;i<e.numTexCoords;i+=1){let s=i*4;o.push({s:n.getInt16(s,!0),t:n.getInt16(s+2,!0)})}return o}function sl(t,e){let r=e.numTriangles*12;Ir(t,e.offsetTriangles,r,"triangles");let n=new DataView(t,e.offsetTriangles,r),o=[];for(let i=0;i<e.numTriangles;i+=1){let s=i*12,a=[n.getUint16(s,!0),n.getUint16(s+2,!0),n.getUint16(s+4,!0)],c=[n.getUint16(s+6,!0),n.getUint16(s+8,!0),n.getUint16(s+10,!0)];if(a.some(l=>l>=e.numVertices)||c.some(l=>l>=e.numTexCoords))throw new ie("Triangle references out of range vertex or texcoord");o.push({vertexIndices:a,texCoordIndices:c})}return o}function al(t,e){let r=e.numFrames*e.frameSize;Ir(t,e.offsetFrames,r,"frames");let n=[];for(let o=0;o<e.numFrames;o+=1){let i=e.offsetFrames+o*e.frameSize,s=new DataView(t,i,e.frameSize),a={x:s.getFloat32(0,!0),y:s.getFloat32(4,!0),z:s.getFloat32(8,!0)},c={x:s.getFloat32(12,!0),y:s.getFloat32(16,!0),z:s.getFloat32(20,!0)},l=Ws(s,24,16),d=[];for(let u=0;u<e.numVertices;u+=1){let m=40+u*4,f={x:s.getUint8(m)*a.x+c.x,y:s.getUint8(m+1)*a.y+c.y,z:s.getUint8(m+2)*a.z+c.z},h=s.getUint8(m+3),y=rl[h];if(!y)throw new ie(`Invalid normal index ${h} in frame ${l}`);d.push({position:f,normalIndex:h,normal:y})}n.push({name:l,vertices:d})}return n}function cl(t,e){let r=e.numGlCommands*4;if(Ir(t,e.offsetGlCommands,r,"gl commands"),r===0)return[];let n=new DataView(t,e.offsetGlCommands,r),o=[],i=0;for(;;){if(i+4>r)throw new ie("GL command list ended unexpectedly");let s=n.getInt32(i,!0);if(i+=4,s===0)break;let a=Math.abs(s),c=[],l=a*12;if(i+l>r)throw new ie("GL command vertex block exceeds buffer");for(let d=0;d<a;d+=1){let u=n.getFloat32(i,!0),m=n.getFloat32(i+4,!0),f=n.getInt32(i+8,!0);if(i+=12,f<0||f>=e.numVertices)throw new ie("GL command references invalid vertex index");c.push({s:u,t:m,vertexIndex:f})}o.push({mode:s>0?"strip":"fan",vertices:c})}if(i!==r)throw new ie("GL command list did not consume expected data");return o}function vi(t){let e=nl(t),r=ol(t,e),n=il(t,e),o=sl(t,e),i=al(t,e),s=cl(t,e);return{header:e,skins:r,texCoords:n,triangles:o,frames:i,glCommands:s}}function Xs(t){let e=[],r=0;for(;r<t.length;){let n=t[r].name,o=n.replace(/\d+$/,"")||n,i=r;for(;i+1<t.length&&(t[i+1].name.replace(/\d+$/,"")||t[i+1].name)===o;)i+=1;e.push({name:o,firstFrame:r,lastFrame:i}),r=i+1}return e}var qs=860898377,ll=15,Ee=class extends Error{constructor(e){super(e),this.name="Md3ParseError"}};function Rr(t,e,r){let n=new Uint8Array(t.buffer,t.byteOffset+e,r);return new TextDecoder("utf-8").decode(n).replace(/\0.*$/,"").trim()}function dl(t){let e=(t>>8&255)*(2*Math.PI/255),r=(t&255)*(2*Math.PI/255),n=Math.sin(r);return{x:Math.cos(e)*n,y:Math.sin(e)*n,z:Math.cos(r)}}function $n(t,e,r,n){if(e<0||e+r>n)throw new Ee(`${t} exceeds buffer bounds`)}function ul(t){let e=t.getInt32(0,!0);if(e!==qs)throw new Ee(`Invalid MD3 ident: ${e}`);let r=t.getInt32(4,!0);if(r!==ll)throw new Ee(`Unsupported MD3 version: ${r}`);let n=Rr(t,8,64),o=t.getInt32(72,!0),i=t.getInt32(76,!0),s=t.getInt32(80,!0),a=t.getInt32(84,!0),c=t.getInt32(88,!0),l=t.getInt32(92,!0),d=t.getInt32(96,!0),u=t.getInt32(100,!0),m=t.getInt32(104,!0);if(i<=0||a<0||s<0)throw new Ee("Invalid MD3 counts");return{ident:e,version:r,name:n,flags:o,numFrames:i,numTags:s,numSurfaces:a,numSkins:c,ofsFrames:l,ofsTags:d,ofsSurfaces:u,ofsEnd:m}}function ml(t,e){let r=[];$n("Frames",e.ofsFrames,e.numFrames*56,t.byteLength);for(let o=0;o<e.numFrames;o+=1){let i=e.ofsFrames+o*56;r.push({minBounds:{x:t.getFloat32(i,!0),y:t.getFloat32(i+4,!0),z:t.getFloat32(i+8,!0)},maxBounds:{x:t.getFloat32(i+12,!0),y:t.getFloat32(i+16,!0),z:t.getFloat32(i+20,!0)},localOrigin:{x:t.getFloat32(i+24,!0),y:t.getFloat32(i+28,!0),z:t.getFloat32(i+32,!0)},radius:t.getFloat32(i+36,!0),name:Rr(t,i+40,16)})}return r}function fl(t,e){let r=[],o=e.numFrames*e.numTags*112;$n("Tags",e.ofsTags,o,t.byteLength);for(let i=0;i<e.numFrames;i+=1){let s=[];for(let a=0;a<e.numTags;a+=1){let c=e.ofsTags+(i*e.numTags+a)*112,l=c+64,d=l+12;s.push({name:Rr(t,c,64),origin:{x:t.getFloat32(l,!0),y:t.getFloat32(l+4,!0),z:t.getFloat32(l+8,!0)},axis:[{x:t.getFloat32(d,!0),y:t.getFloat32(d+4,!0),z:t.getFloat32(d+8,!0)},{x:t.getFloat32(d+12,!0),y:t.getFloat32(d+16,!0),z:t.getFloat32(d+20,!0)},{x:t.getFloat32(d+24,!0),y:t.getFloat32(d+28,!0),z:t.getFloat32(d+32,!0)}]})}r.push(s)}return r}function pl(t,e){let r=t.getInt32(e,!0);if(r!==qs)throw new Ee(`Invalid surface ident at ${e}: ${r}`);let n=Rr(t,e+4,64),o=t.getInt32(e+68,!0),i=t.getInt32(e+72,!0),s=t.getInt32(e+76,!0),a=t.getInt32(e+80,!0),c=t.getInt32(e+84,!0),l=t.getInt32(e+88,!0),d=t.getInt32(e+92,!0),u=t.getInt32(e+96,!0),m=t.getInt32(e+100,!0),f=t.getInt32(e+104,!0);if(i<=0||a<=0||c<=0)throw new Ee(`Invalid surface counts for ${n}`);let h=f;$n(`Surface ${n}`,e,h,t.byteLength);let y=[],p=e+l;for(let w=0;w<c;w+=1){let L=p+w*12;y.push({indices:[t.getInt32(L,!0),t.getInt32(L+4,!0),t.getInt32(L+8,!0)]})}let x=[],M=e+d;for(let w=0;w<s;w+=1){let L=M+w*68;x.push({name:Rr(t,L,64),shaderIndex:t.getInt32(L+64,!0)})}let v=[],S=e+u;for(let w=0;w<a;w+=1){let L=S+w*8;v.push({s:t.getFloat32(L,!0),t:t.getFloat32(L+4,!0)})}let b=[],_=e+m;for(let w=0;w<i;w+=1){let L=[];for(let P=0;P<a;P+=1){let A=_+(w*a+P)*8,N=t.getInt16(A,!0)/64,U=t.getInt16(A+2,!0)/64,V=t.getInt16(A+4,!0)/64,F=t.getUint16(A+6,!0);L.push({position:{x:N,y:U,z:V},latLng:F,normal:dl(F)})}b.push(L)}return{surface:{name:n,flags:o,numFrames:i,shaders:x,triangles:y,texCoords:v,vertices:b},nextOffset:e+f}}function bi(t){if(t.byteLength<108)throw new Ee("MD3 buffer too small for header");let e=new DataView(t),r=ul(e);$n("MD3 end",r.ofsEnd,0,t.byteLength);let n=ml(e,r),o=fl(e,r),i=[],s=r.ofsSurfaces;for(let a=0;a<r.numSurfaces;a+=1){let{surface:c,nextOffset:l}=pl(e,s);i.push(c),s=l}if(s!==r.ofsEnd)throw new Ee("Surface parsing did not reach ofsEnd");return{header:r,frames:n,tags:o,surfaces:i}}var tr=class{constructor(e){this.vfs=e}async load(e){let r=await this.vfs.readFile(e);return bi(r.slice().buffer)}};function Ys(t,e){let r=(t.sequence.end-t.sequence.start+1)/t.sequence.fps,n=t.sequence.loop!==!1,o=t.time+e;return n?o=(o%r+r)%r:o>r&&(o=r),{...t,time:Math.max(0,Math.min(o,r))}}function js(t){let e=t.sequence.end-t.sequence.start+1,r=1/t.sequence.fps,n=t.sequence.loop!==!1,o=t.time/r;if(!n&&o>=e)return{frame:t.sequence.end,nextFrame:t.sequence.end,lerp:0};let i=n?o%e:Math.min(o,e-1),s=Math.floor(i),a=t.sequence.start+s,c=s+1>=e?n?t.sequence.start:t.sequence.end:a+1,l=!n&&s>=e-1?0:i-s;return{frame:a,nextFrame:c,lerp:l}}function Ks(t){return{sequence:t,time:0}}function $s(t,e,r){return{x:t.x+(e.x-t.x)*r,y:t.y+(e.y-t.y)*r,z:t.z+(e.z-t.z)*r}}var kr=class extends Error{constructor(e){super(e),this.name="WalParseError"}};function Qn(t){if(t.byteLength<100)throw new kr("WAL buffer too small");let e=new DataView(t),r=new Uint8Array(t,0,32),n=new TextDecoder("utf-8").decode(r).replace(/\0.*$/,"").trim(),o=e.getInt32(32,!0),i=e.getInt32(36,!0),s=[e.getInt32(40,!0),e.getInt32(44,!0),e.getInt32(48,!0),e.getInt32(52,!0)],a=new Uint8Array(t,56,32),c=new TextDecoder("utf-8").decode(a).replace(/\0.*$/,"").trim(),l=e.getInt32(88,!0),d=e.getInt32(92,!0),u=e.getInt32(96,!0);if(o<=0||i<=0)throw new kr("Invalid WAL dimensions");let m=[],f=o,h=i;for(let y=0;y<s.length;y+=1){let p=s[y],x=Math.max(1,f*h|0);if(p<=0||p+x>t.byteLength)throw new kr(`Invalid WAL mip offset for level ${y}`);let M=new Uint8Array(t,p,x);m.push({level:y,width:f,height:h,data:M}),f=Math.max(1,f>>1),h=Math.max(1,h>>1)}return{name:n,width:o,height:i,mipmaps:m,animName:c,flags:l,contents:d,value:u}}var Ft=class extends Error{constructor(e){super(e),this.name="PcxParseError"}};function Qs(t){if(t.byteLength<128)throw new Ft("PCX buffer too small for header");let e=new DataView(t),r=e.getUint8(0),n=e.getUint8(2),o=e.getUint8(3),i=e.getUint16(4,!0),s=e.getUint16(6,!0),a=e.getUint16(8,!0),c=e.getUint16(10,!0);if(r!==10||n!==1)throw new Ft("Unsupported PCX encoding");if(o!==8)throw new Ft("Only 8bpp PCX files are supported");let l=a-i+1,d=c-s+1,u=e.getUint16(66,!0),m=t.byteLength-769;if(m<128||new DataView(t,m,1).getUint8(0)!==12)throw new Ft("Missing PCX palette");let f=new Uint8Array(t,m+1,768),h=new Uint8Array(t,128,m-128),y=new Uint8Array(l*d),p=0,x=0;for(let M=0;M<d;M+=1){let v=0;for(;v<u&&p<h.length;){let S=1,b=h[p++];if((b&192)===192){if(S=b&63,p>=h.length)throw new Ft("Unexpected end of PCX RLE data");b=h[p++]}for(let _=0;_<S&&v<u;_+=1)v<l&&(y[x++]=b),v+=1}}return{width:l,height:d,bitsPerPixel:o,pixels:y,palette:f}}function Jn(t){let e=new Uint8Array(t.width*t.height*4);for(let r=0;r<t.pixels.length;r+=1){let n=t.pixels[r],o=n*3,i=r*4;e[i]=t.palette[o],e[i+1]=t.palette[o+1],e[i+2]=t.palette[o+2],e[i+3]=n===255?0:255}return e}var rr=class{constructor(e={}){this.cache=new ut(e.capacity??128)}get size(){return this.cache.size}get(e){return this.cache.get(e.toLowerCase())}set(e,r){this.cache.set(e.toLowerCase(),r)}clear(){this.cache.clear()}};function Si(t,e){let r=[];for(let n of t.mipmaps){let o=new Uint8Array(n.width*n.height*4);for(let i=0;i<n.data.length;i+=1){let s=n.data[i],a=s*3,c=i*4;o[c]=e[a],o[c+1]=e[a+1],o[c+2]=e[a+2],o[c+3]=s===255?0:255}r.push({level:n.level,width:n.width,height:n.height,rgba:o})}return{width:t.width,height:t.height,levels:r,source:"wal"}}function Js(t){let e=Jn(t),r={level:0,width:t.width,height:t.height,rgba:e};return{width:t.width,height:t.height,levels:[r],source:"pcx"}}function Zs(t,e){return Si(Qn(t),e)}var It=class extends Error{constructor(e){super(e),this.name="WavParseError"}};function Mi(t,e,r){return new TextDecoder("ascii").decode(new Uint8Array(t.buffer,t.byteOffset+e,r))}function Zn(t){if(t.byteLength<44)throw new It("WAV buffer too small");let e=new DataView(t);if(Mi(e,0,4)!=="RIFF"||Mi(e,8,4)!=="WAVE")throw new It("Invalid WAV header");let r=12,n=-1,o=-1,i=0,s=0;for(;r+8<=t.byteLength;){let h=Mi(e,r,4),y=e.getUint32(r+4,!0),p=r+8;h==="fmt "?(n=p,i=y):h==="data"&&(o=p,s=y),r=p+y}if(n===-1||o===-1)throw new It("Missing fmt or data chunk");let a=e.getUint16(n,!0),c=e.getUint16(n+2,!0),l=e.getUint32(n+4,!0),d=e.getUint16(n+14,!0);if(a!==1)throw new It("Only PCM WAV is supported");let u=d/8,m=s/(u*c),f=new Float32Array(m*c);for(let h=0;h<m;h+=1)for(let y=0;y<c;y+=1){let p=h*c+y,x=o+p*u,M=0;if(d===8)M=e.getUint8(x),f[p]=(M-128)/128;else if(d===16)M=e.getInt16(x,!0),f[p]=M/32768;else if(d===24){let v=e.getUint8(x),S=e.getUint8(x+1),b=e.getInt8(x+2);M=v|S<<8|b<<16,f[p]=M/8388608}else throw new It(`Unsupported bitsPerSample: ${d}`)}return{sampleRate:l,channels:c,bitsPerSample:d,samples:f}}var hl=(t,e=4294967295,r=79764919)=>{let n=new Int32Array(256),o,i,s,a=e;for(o=0;o<256;o++){for(s=o<<24,i=8;i>0;--i)s=2147483648&s?s<<1^r:s<<1;n[o]=s}for(o=0;o<t.length;o++)a=a<<8^n[255&(a>>24^t[o])];return a};var _i=(t,e=hl)=>{let r=p=>new Uint8Array(p.length/2).map(((x,M)=>parseInt(p.substring(2*M,2*(M+1)),16))),n=p=>r(p)[0],o=new Map;[,8364,,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,,381,,,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,,382,376].forEach(((p,x)=>o.set(p,x)));let i=new Uint8Array(t.length),s,a,c,l=!1,d=0,u=42,m=t.length>13&&t.substring(0,9)==="dynEncode",f=0;m&&(f=11,a=n(t.substring(9,f)),a<=1&&(f+=2,u=n(t.substring(11,f))),a===1&&(f+=8,c=(p=>new DataView(r(p).buffer).getInt32(0,!0))(t.substring(13,f))));let h=256-u;for(let p=f;p<t.length;p++)if(s=t.charCodeAt(p),s!==61||l){if(s===92&&p<t.length-5&&m){let x=t.charCodeAt(p+1);x!==117&&x!==85||(s=parseInt(t.substring(p+2,p+6),16),p+=5)}if(s>255){let x=o.get(s);x&&(s=x+127)}l&&(l=!1,s-=64),i[d++]=s<u&&s>0?s+h:s-u}else l=!0;let y=i.subarray(0,d);if(m&&a===1){let p=e(y);if(p!==c){let x="Decode failed crc32 validation";throw console.error("`simple-yenc`\n",x+`
1
+ "use strict";var Quake2Engine=(()=>{var Mc=Object.create;var Nn=Object.defineProperty;var _c=Object.getOwnPropertyDescriptor;var Ac=Object.getOwnPropertyNames;var wc=Object.getPrototypeOf,Lc=Object.prototype.hasOwnProperty;var zc=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),ii=(t,e)=>{for(var r in e)Nn(t,r,{get:e[r],enumerable:!0})},_s=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Ac(e))!Lc.call(t,o)&&o!==r&&Nn(t,o,{get:()=>e[o],enumerable:!(n=_c(e,o))||n.enumerable});return t};var Ec=(t,e,r)=>(r=t!=null?Mc(wc(t)):{},_s(e||!t||!t.__esModule?Nn(r,"default",{value:t,enumerable:!0}):r,t)),Cc=t=>_s(Nn({},"__esModule",{value:!0}),t);var ta=zc((tm,ea)=>{"use strict";ea.exports=Worker});var Gd={};ii(Gd,{ATTN_IDLE:()=>Fa,ATTN_LOOP_NONE:()=>Ta,ATTN_NONE:()=>ko,ATTN_NORM:()=>Pa,ATTN_STATIC:()=>Ia,AssetDependencyError:()=>Yt,AssetDependencyTracker:()=>Pn,AssetManager:()=>Io,AudioApi:()=>qo,AudioContextController:()=>Ho,AudioRegistry:()=>br,AudioRegistryError:()=>En,AudioSystem:()=>Wo,BSP_SURFACE_FRAGMENT_SOURCE:()=>Qi,BSP_SURFACE_VERTEX_SOURCE:()=>$i,BSP_VERTEX_LAYOUT:()=>Yi,BspSurfacePipeline:()=>Ko,Camera:()=>ei,ConfigStringRegistry:()=>Jt,Cvar:()=>Fr,CvarRegistry:()=>qn,EngineHost:()=>$t,EngineRuntime:()=>Pr,FixedTimestepLoop:()=>Tt,Framebuffer:()=>Yo,IndexBuffer:()=>De,LruCache:()=>ut,MAX_SOUND_CHANNELS:()=>Gi,MD2_FRAGMENT_SHADER:()=>os,MD2_VERTEX_SHADER:()=>ns,MD3_FRAGMENT_SHADER:()=>fs,MD3_VERTEX_SHADER:()=>ms,Md2Loader:()=>er,Md2MeshBuffers:()=>Qo,Md2ParseError:()=>ie,Md2Pipeline:()=>Jo,Md3Loader:()=>tr,Md3ModelMesh:()=>ti,Md3ParseError:()=>Ce,Md3Pipeline:()=>ri,Md3SurfaceMesh:()=>Rn,MusicSystem:()=>Xo,PARTICLE_FRAGMENT_SHADER:()=>hs,PARTICLE_VERTEX_SHADER:()=>ps,PakArchive:()=>Zt,PakIndexStore:()=>Fo,PakIngestionError:()=>dt,PakParseError:()=>Ee,PakValidationError:()=>Pt,PakValidator:()=>jn,ParticleRenderer:()=>oi,ParticleSystem:()=>ni,RERELEASE_KNOWN_PAKS:()=>xi,SKYBOX_FRAGMENT_SHADER:()=>ts,SKYBOX_VERTEX_SHADER:()=>es,SOUND_FULLVOLUME:()=>Sr,SOUND_LOOP_ATTENUATE:()=>Ra,ShaderProgram:()=>ye,SkyboxPipeline:()=>$o,SoundChannel:()=>Ro,SoundPrecache:()=>Bo,SoundRegistry:()=>No,Texture2D:()=>Mr,TextureCache:()=>rr,TextureCubeMap:()=>_r,VertexArray:()=>Se,VertexBuffer:()=>xe,VirtualFileSystem:()=>Yn,advanceAnimation:()=>Ys,applySurfaceState:()=>qa,attenuationToDistanceMultiplier:()=>jt,boxIntersectsFrustum:()=>In,buildBspGeometry:()=>Na,buildMd2Geometry:()=>is,buildMd2VertexData:()=>ss,buildMd3SurfaceGeometry:()=>ds,buildMd3VertexData:()=>us,calculateMaxAudibleDistance:()=>Do,calculatePakChecksum:()=>Ns,computeFrameBlend:()=>js,computeSkyScroll:()=>Ka,createAnimationState:()=>Ks,createAudioGraph:()=>Oo,createEngine:()=>Ud,createEngineRuntime:()=>Hs,createInitialChannels:()=>Vo,createProgramFromSources:()=>Oa,createWebGLContext:()=>Da,decodeOgg:()=>Po,deriveSurfaceRenderState:()=>Zi,extractFrustumPlanes:()=>Ba,filesToPakSources:()=>gi,findLeafForPoint:()=>Ki,gatherVisibleFaces:()=>Wa,groupMd2Animations:()=>Xs,ingestPakFiles:()=>Bs,ingestPaks:()=>Kn,interpolateMd3Tag:()=>fc,interpolateVec3:()=>$s,parseMd2:()=>vi,parseMd3:()=>bi,parsePcx:()=>Qs,parseWal:()=>Qn,parseWalTexture:()=>Zs,parseWav:()=>Zn,pcxToRgba:()=>Jn,pickChannel:()=>Uo,preparePcxTexture:()=>Js,removeViewTranslation:()=>ja,resolveLightStyles:()=>Ji,spatializeOrigin:()=>Go,spawnBlood:()=>yc,spawnBulletImpact:()=>pc,spawnExplosion:()=>hc,spawnMuzzleFlash:()=>gc,spawnTeleportFlash:()=>xc,spawnTrail:()=>vc,walToRgba:()=>Si,wireDropTarget:()=>Vs,wireFileInput:()=>Us});var Tc=()=>typeof performance<"u"?performance.now():Date.now(),Pc=t=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>t()):setTimeout(t,25)},Tt=class{constructor(e,r={}){this.callbacks=e;this.accumulatorMs=0;this.frame=0;this.running=!1;this.tick=()=>{if(!this.running)return;let e=this.options.now(),r=this.lastTimeMs===void 0?0:e-this.lastTimeMs;this.lastTimeMs=e,this.advance(r,e),this.running&&this.options.schedule(this.tick)};let n=r.fixedDeltaMs??25,o=r.maxSubSteps??5;this.options={fixedDeltaMs:n,maxSubSteps:o,maxDeltaMs:r.maxDeltaMs??n*o,startTimeMs:r.startTimeMs,now:r.now??Tc,schedule:r.schedule??Pc}}start(){this.running||(this.running=!0,this.lastTimeMs=this.options.startTimeMs??this.options.now(),this.options.schedule(this.tick))}stop(){this.running=!1}pump(e){let r=(this.lastTimeMs??0)+e;this.lastTimeMs=r,this.advance(e,r)}isRunning(){return this.running}get frameNumber(){return this.frame}advance(e,r){let n=Math.min(Math.max(e,0),this.options.maxDeltaMs);this.accumulatorMs=Math.min(this.accumulatorMs+n,this.options.fixedDeltaMs*this.options.maxSubSteps);let o=0;for(;this.accumulatorMs>=this.options.fixedDeltaMs&&o<this.options.maxSubSteps;)this.frame+=1,this.callbacks.simulate({frame:this.frame,deltaMs:this.options.fixedDeltaMs,nowMs:r}),this.accumulatorMs-=this.options.fixedDeltaMs,o+=1;let i=this.options.fixedDeltaMs===0?0:this.accumulatorMs/this.options.fixedDeltaMs;this.callbacks.render?.({alpha:i,nowMs:r,accumulatorMs:this.accumulatorMs,frame:this.frame})}};var $t=class{constructor(e,r,n={}){this.game=e;this.client=r;this.started=!1;this.stepSimulation=e=>{this.previousFrame=this.latestFrame,this.latestFrame=this.game.frame(e,this.latestCommand)};this.renderClient=e=>{this.client&&(this.latestCommand=this.client.render({...e,previous:this.previousFrame,latest:this.latestFrame}))};let o=n.loop?.now?.()??Date.now();this.startTimeMs=n.startTimeMs??n.loop?.startTimeMs??o,this.loop=new Tt({simulate:this.stepSimulation,render:this.renderClient},{...n.loop,startTimeMs:this.startTimeMs})}start(){this.started||(this.latestFrame=this.game.init(this.startTimeMs)??this.latestFrame,this.client?.init(this.latestFrame),this.started=!0,this.loop.start())}stop(){this.started&&(this.loop.stop(),this.client?.shutdown(),this.game.shutdown(),this.previousFrame=void 0,this.latestFrame=void 0,this.started=!1)}pump(e){this.loop.pump(e)}getLatestFrame(){return this.latestFrame}isRunning(){return this.loop.isRunning()}};var As={x:0,y:0,z:0};var jd=Math.PI/180;function ws(t,e){return{x:t.x-e.x,y:t.y-e.y,z:t.z-e.z}}function Fc(t,e){return{x:t.x*e,y:t.y*e,z:t.z*e}}function ai(t,e){return t.x*e.x+t.y*e.y+t.z*e.z}function Ic(t){return ai(t,t)}function ci(t){return Math.sqrt(Ic(t))}function Oe(t){let e=ci(t);return e===0?t:Fc(t,1/e)}var Rc=Math.PI/180,Kd=180/Math.PI,Qt=Rc;function kc(){return new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])}function Ls(t,e){let r=e.x,n=e.y,o=e.z;return{x:t[0]*r+t[4]*n+t[8]*o+t[12],y:t[1]*r+t[5]*n+t[9]*o+t[13],z:t[2]*r+t[6]*n+t[10]*o+t[14]}}function zs(t,e){let r=kc();return r[0]=e[0].x,r[1]=e[0].y,r[2]=e[0].z,r[4]=e[1].x,r[5]=e[1].y,r[6]=e[1].z,r[8]=e[2].x,r[9]=e[2].y,r[10]=e[2].z,r[12]=t.x,r[13]=t.y,r[14]=t.z,r}var Ge=1,lt=2;var li=8,di=16,Dc=32;var Hc=16384;var Bn=65536,Es=1<<17,Oc=1<<18,Nc=1<<19,Bc=1<<20,Vc=1<<21,Uc=1<<22,Gc=1<<23,$d=1<<24,Vn=1<<25,Wc=1<<26,Qd=1<<27,Jd=1<<28,Zd=1<<29,Un=1<<30,eu=1<<31;var Tr=0;var Cs=4,Ts=8,Ps=16,Fs=32,Is=64;var tu=1<<25,ru=1<<28,nu=1<<29,ou=1<<30,iu=1<<31;var su=Ge|lt,au=Ge|Bn|lt|Vn|Un,cu=Ge|Bn|lt,lu=Ge|Es|lt|Vn|Un,du=Dc|li|di,uu=Ge|di|li,Xc=Ge|Vn|Un|lt|Wc,mu=Oc|Nc|Bc|Vc|Uc|Gc,fu=Ge|li|di|Vn|Un,pu=Ge|Bn|lt,hu=Ge|lt,yu=Ge|Bn|lt|Es,xu=Xc|Hc;var gu=Number.MAX_SAFE_INTEGER-1;var Gn=(t=>(t[t.None=0]="None",t[t.Archive=1]="Archive",t[t.UserInfo=2]="UserInfo",t[t.ServerInfo=4]="ServerInfo",t[t.Latch=8]="Latch",t[t.Cheat=16]="Cheat",t))(Gn||{});var Wn=256;var ui=256,mi=8192,Xn=2048,fi=512,pi=256,hi=Wn*2,yi=256,si=32,Cr=96;var X=(t=>(t[t.Name=0]="Name",t[t.CdTrack=1]="CdTrack",t[t.Sky=2]="Sky",t[t.SkyAxis=3]="SkyAxis",t[t.SkyRotate=4]="SkyRotate",t[t.StatusBar=5]="StatusBar",t[t.AirAccel=59]="AirAccel",t[t.MaxClients=60]="MaxClients",t[t.MapChecksum=61]="MapChecksum",t[t.Models=62]="Models",t[t.Sounds=62+mi]="Sounds",t[t.Images=t.Sounds+Xn]="Images",t[t.Lights=t.Images+fi]="Lights",t[t.ShadowLights=t.Lights+ui]="ShadowLights",t[t.Items=t.ShadowLights+yi]="Items",t[t.PlayerSkins=t.Items+pi]="PlayerSkins",t[t.General=t.PlayerSkins+Wn]="General",t[t.WheelWeapons=t.General+hi]="WheelWeapons",t[t.WheelAmmo=t.WheelWeapons+si]="WheelAmmo",t[t.WheelPowerups=t.WheelAmmo+si]="WheelPowerups",t[t.CdLoopCount=t.WheelPowerups+si]="CdLoopCount",t[t.GameStyle=t.CdLoopCount+1]="GameStyle",t[t.MaxConfigStrings=t.GameStyle+1]="MaxConfigStrings",t))(X||{}),Rs=X.MaxConfigStrings;function ks(t){return t>=5&&t<59?Cr*(59-t):t>=X.General&&t<X.WheelWeapons?Cr*(X.MaxConfigStrings-t):Cr}function qc(t){if(t<0||t>=X.MaxConfigStrings)throw new RangeError(`Configstring index ${t} is out of range (0-${X.MaxConfigStrings-1})`)}function Ds(t,e){let r=ks(t);if(e.length>r)throw new RangeError(`Configstring ${t} exceeds maximum length (${e.length} > ${r}); limit is ${Cr} chars per slot`)}var Jt=class{constructor(){this.values=new Map;this.modelCursor=X.Models;this.soundCursor=X.Sounds;this.imageCursor=X.Images;this.lightCursor=X.Lights;this.shadowLightCursor=X.ShadowLights;this.itemCursor=X.Items;this.playerSkinCursor=X.PlayerSkins;this.generalCursor=X.General}set(e,r){return qc(e),Ds(e,r),this.values.set(e,r),e}get(e){return this.values.get(e)}getAll(){let e=new Array(Rs).fill("");for(let[r,n]of this.values.entries())e[r]=n;return e}modelIndex(e){return this.register(e,X.Models,mi,"modelCursor")}soundIndex(e){return this.register(e,X.Sounds,Xn,"soundCursor")}findSoundIndex(e){for(let r=X.Sounds;r<X.Sounds+Xn;r+=1)if(this.values.get(r)===e)return r}imageIndex(e){return this.register(e,X.Images,fi,"imageCursor")}lightIndex(e){return this.register(e,X.Lights,ui,"lightCursor")}shadowLightIndex(e){return this.register(e,X.ShadowLights,yi,"shadowLightCursor")}itemIndex(e){return this.register(e,X.Items,pi,"itemCursor")}playerSkinIndex(e){return this.register(e,X.PlayerSkins,Wn,"playerSkinCursor")}generalIndex(e){return this.register(e,X.General,hi,"generalCursor")}register(e,r,n,o){for(let a=r;a<r+n;a+=1)if(this.values.get(a)===e)return a;let i=this[o],s=r+n;if(i>=s)throw new RangeError(`Out of configstring slots for range starting at ${r}`);return Ds(i,e),this.values.set(i,e),this[o]=i+1,i}};var Pr=class{constructor(e,r){this.engine=e;this.host=r;this.started=!1}start(){this.started||(this.engine.init(),this.host.start(),this.started=!0)}stop(){this.started&&(this.host.stop(),this.engine.shutdown(),this.started=!1)}pump(e){this.host.pump(e)}getLatestFrame(){return this.host.getLatestFrame()}isRunning(){return this.started&&this.host.isRunning()}};function Hs(t,e,r,n){return new Pr(t,new $t(e,r,n))}var Fr=class{constructor({name:e,defaultValue:r,description:n,flags:o=Gn.None,onChange:i}){this.modifiedCount=0;this.name=e,this.defaultValue=r,this.description=n,this.flags=o,this._value=r,this.onChange=i}get string(){return this._value}get number(){return Number(this._value)}get integer(){return Math.trunc(this.number)}get boolean(){return!!this.integer}set(e){if(this.flags&Gn.Latch){if(e===this._value){this.latched=void 0;return}if(this.latched===e)return;this.latched!==e&&(this.latched=e);return}this.apply(e)}reset(){this.latched=void 0,this.apply(this.defaultValue)}applyLatched(){if(this.latched===void 0)return!1;let e=this.latched;return this.latched=void 0,e===this._value?!1:(this.apply(e),!0)}apply(e){if(this._value===e)return;let r=this._value;this._value=e,this.modifiedCount+=1,this.onChange?.(this,r)}},qn=class{constructor(){this.cvars=new Map}register(e){let r=this.cvars.get(e.name);if(r)return r;let n=new Fr(e);return this.cvars.set(e.name,n),n}get(e){return this.cvars.get(e)}setValue(e,r){let n=this.get(e);if(!n)throw new Error(`Unknown cvar: ${e}`);return n.set(r),n}resetAll(){for(let e of this.cvars.values())e.reset()}applyLatched(){let e=!1;for(let r of this.cvars.values())e=r.applyLatched()||e;return e}list(){return[...this.cvars.values()].sort((e,r)=>e.name.localeCompare(r.name))}};var Yc="PACK";function jc(t,e,r){let n=[];for(let o=0;o<r;o+=1){let i=t.getUint8(e+o);if(i===0)break;n.push(i)}return String.fromCharCode(...n)}function te(t){return t.replace(/\\/g,"/").replace(/^\/+/,"").toLowerCase()}function Kc(){let t=new Uint32Array(256);for(let e=0;e<256;e+=1){let r=e;for(let n=0;n<8;n+=1)r=(r&1)!==0?3988292384^r>>>1:r>>>1;t[e]=r>>>0}return t}var $c=Kc();function Os(t){let e=4294967295;for(let r=0;r<t.length;r+=1){let n=t[r];e=$c[(e^n)&255]^e>>>8}return(e^4294967295)>>>0}var Ee=class extends Error{},Zt=class t{constructor(e,r,n,o){this.name=e;this.buffer=r;this.entries=new Map(n.map(i=>[i.name,i])),this.checksum=o,this.size=r.byteLength}static fromArrayBuffer(e,r){let n=new DataView(r);if(r.byteLength<12)throw new Ee("PAK buffer too small to contain header");let o=String.fromCharCode(n.getUint8(0),n.getUint8(1),n.getUint8(2),n.getUint8(3));if(o!==Yc)throw new Ee(`Invalid PAK header magic: ${o}`);let i=n.getInt32(4,!0),s=n.getInt32(8,!0);if(i<12)throw new Ee(`Invalid directory offset: ${i}`);if(s<=0||s%64!==0)throw new Ee(`Invalid directory length: ${s}`);if(i+s>r.byteLength)throw new Ee("Directory exceeds buffer length");let c=s/64,l=[],d=new Map;for(let u=0;u<c;u+=1){let m=i+u*64,f=jc(n,m,56),h=te(f),y=n.getInt32(m+56,!0),p=n.getInt32(m+60,!0);if(y<0||p<0||y+p>r.byteLength)throw new Ee(`Invalid entry bounds for ${f||"<unnamed>"} (offset=${y}, length=${p})`);if(!h)throw new Ee(`Entry ${u} has an empty name`);let x={name:h,offset:y,length:p};d.set(h,x)}return l.push(...d.values()),new t(e,r,l,Os(new Uint8Array(r)))}getEntry(e){return this.entries.get(te(e))}listEntries(){return Array.from(this.entries.values())}readFile(e){let r=this.getEntry(e);if(!r)throw new Ee(`File not found in PAK: ${e}`);return new Uint8Array(this.buffer,r.offset,r.length)}validate(){return{checksum:this.checksum,entries:this.listEntries()}}};function Ns(t){return Os(new Uint8Array(t))}var Yn=class{constructor(e=[]){this.mounts=[];this.files=new Map;e.forEach(r=>this.mountPak(r))}mountPak(e){this.mounts.push(e);for(let r of e.listEntries()){let n=te(r.name);this.files.set(n,{archive:e,entry:r})}}get mountedPaks(){return[...this.mounts]}hasFile(e){return this.files.has(te(e))}stat(e){let r=this.files.get(te(e));if(r)return{path:r.entry.name,size:r.entry.length,sourcePak:r.archive.name}}async readFile(e){let r=this.files.get(te(e));if(!r)throw new Error(`File not found in VFS: ${e}`);return r.archive.readFile(e)}list(e=""){let r=te(e).replace(/\/+$|^\//g,""),n=[],o=new Set,i=r?`${r}/`:"";for(let s of this.files.values()){if(r&&!s.entry.name.startsWith(i))continue;let a=r?s.entry.name.slice(i.length):s.entry.name,c=a.indexOf("/");c===-1?n.push({path:s.entry.name,size:s.entry.length,sourcePak:s.archive.name}):o.add(a.slice(0,c))}return n.sort((s,a)=>s.path.localeCompare(a.path)),{files:n,directories:[...o].sort()}}findByExtension(e){let r=e.startsWith(".")?e.toLowerCase():`.${e.toLowerCase()}`,n=[];for(let o of this.files.values())o.entry.name.toLowerCase().endsWith(r)&&n.push({path:o.entry.name,size:o.entry.length,sourcePak:o.archive.name});return n.sort((o,i)=>o.path.localeCompare(i.path))}};var xi=Object.freeze([{name:"pak0.pak",checksum:2378051181,description:"Base game assets"},{name:"pak0.pak@baseq2",checksum:2378051181,description:"Base game assets (baseq2)"},{name:"pak0.pak@rogue",checksum:3373211245,description:"Ground Zero (rogue) mission pack"},{name:"pak0.pak@xatrix",checksum:1358269824,description:"The Reckoning (xatrix) mission pack"}]),Pt=class extends Error{constructor(r){super(r.status==="unknown"?`Unknown PAK not allowed: ${r.name}`:`PAK checksum mismatch for ${r.name}`);this.result=r;this.name="PakValidationError"}},jn=class{constructor(e=xi){this.known=new Map;e.forEach(r=>this.known.set(this.normalizePakName(r.name),r))}validateArchive(e,r){let n=this.normalizePakName(r??("name"in e?e.name:"unknown")),o=e.checksum,i="size"in e?e.size:void 0,s=this.known.get(n);return s?s.checksum!==o?{name:n,checksum:o,expectedChecksum:s.checksum,status:"mismatch",size:i,description:s.description}:{name:n,checksum:o,expectedChecksum:s.checksum,status:"valid",size:i,description:s.description}:{name:n,checksum:o,status:"unknown",size:i}}assertValid(e,r){let n=this.validateArchive(e,r);if(n.status==="mismatch")throw new Pt(n);return n}normalizePakName(e){let r=te(e),n=r.split("/"),o=n.pop()??r,i=n.pop();return i?`${o}@${i}`:o}};var dt=class extends Error{constructor(r,n){super(`Failed to ingest PAK: ${r}`);this.file=r;this.name="PakIngestionError",n instanceof Error&&n.stack&&(this.stack=n.stack),this.cause=n}};async function Qc(t,e){if(typeof t.arrayBuffer=="function"){let r=await t.arrayBuffer();return e?.({file:"blob",loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}if(typeof FileReader<"u")return new Promise((r,n)=>{let o=new FileReader;o.onerror=()=>n(o.error??new Error("Unknown FileReader error")),o.onprogress=i=>{e?.({file:"blob",loadedBytes:i.loaded,totalBytes:i.total||t.size,state:"reading"})},o.onload=()=>{let i=o.result;i instanceof ArrayBuffer?r(i):n(new Error("Unexpected FileReader result"))},o.readAsArrayBuffer(t)});if(typeof Response<"u"){let r=await new Response(t).arrayBuffer();return e?.({file:"blob",loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}if(typeof t.stream=="function"){let r=t.stream().getReader(),n=[],o=0;for(;;){let{done:a,value:c}=await r.read();if(a)break;if(!c)continue;let l=c;n.push(l),o+=l.byteLength,e?.({file:"blob",loadedBytes:o,totalBytes:t.size,state:"reading"})}let i=new Uint8Array(o),s=0;for(let a of n)i.set(a,s),s+=a.byteLength;return i.buffer}throw new dt("blob",new Error("Unsupported Blob type"))}async function Jc(t,e){if(t.data instanceof ArrayBuffer)return e?.({file:t.name,loadedBytes:t.data.byteLength,totalBytes:t.data.byteLength,state:"reading"}),t.data;if(t.data instanceof Blob){let n=t.data.size;return Qc(t.data,o=>e?.({...o,file:t.name,totalBytes:n}))}let r=t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength);return e?.({file:t.name,loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}async function Kn(t,e,r){let n=typeof r=="function"?{onProgress:r}:r??{},o=n.persistIndexes??!!n.pakIndexStore,i=n.enforceValidation??!!n.validator,s=n.allowUnknownPaks??!0,a=n.stopOnError??!1,c=[];for(let l of e)try{let d=await Jc(l,n.onProgress),u=Zt.fromArrayBuffer(l.name,d),m=n.validator?.validateArchive(u);if(m){n.onValidationResult?.(m);let f=m.status==="mismatch",h=m.status==="unknown";if(f&&i||h&&!s){let y=new Pt(m);if(n.onError?.(l.name,y),a)throw new dt(l.name,y);c.push({archive:u,mounted:!1,validation:m});continue}}if(t.mountPak(u),o&&n.pakIndexStore)try{await n.pakIndexStore.persist(u)}catch(f){if(n.onError?.(l.name,f),a)throw new dt(l.name,f)}n.onProgress?.({file:l.name,loadedBytes:d.byteLength,totalBytes:d.byteLength,state:"parsed"}),c.push({archive:u,mounted:!0,validation:m})}catch(d){if(n.onProgress?.({file:l.name,loadedBytes:0,totalBytes:0,state:"error"}),n.onError?.(l.name,d),a)throw new dt(l.name,d)}return c}var ut=class{constructor(e){this.capacity=e;this.map=new Map;if(e<=0)throw new RangeError("LRU cache capacity must be greater than zero")}get size(){return this.map.size}has(e){return this.map.has(e)}get(e){let r=this.map.get(e);if(r!==void 0)return this.map.delete(e),this.map.set(e,r),r}set(e,r){if(this.map.has(e)&&this.map.delete(e),this.map.set(e,r),this.map.size>this.capacity){let n=this.map.keys().next();n.done||this.map.delete(n.value)}}delete(e){return this.map.delete(e)}clear(){this.map.clear()}entries(){return Array.from(this.map.entries()).reverse().map(([e,r])=>({key:e,value:r}))}};function Zc(t){return Array.isArray(t)?t:Array.from(t)}function gi(t){return Zc(t).map(e=>({name:e.name,data:e}))}async function Bs(t,e,r){let n=gi(e);return Kn(t,n,r??{})}function Vs(t,e){let r=o=>{o.preventDefault(),o.dataTransfer?.dropEffect&&(o.dataTransfer.dropEffect="copy")},n=o=>{o.preventDefault();let i=o.dataTransfer?.files;i&&i.length>0&&e(Array.from(i))};return t.addEventListener("dragover",r),t.addEventListener("drop",n),()=>{t.removeEventListener("dragover",r),t.removeEventListener("drop",n)}}function Us(t,e){let r=n=>{let o=n.target;!o||!o.files||o.files.length===0||(e(o.files),o.value="")};return t.addEventListener("change",r),()=>t.removeEventListener("change",r)}var el=844121161,tl=8,Gs=68,rl=[{x:-.525731,y:0,z:.850651},{x:-.442863,y:.238856,z:.864188},{x:-.295242,y:0,z:.955423},{x:-.309017,y:.5,z:.809017},{x:-.16246,y:.262866,z:.951056},{x:0,y:0,z:1},{x:0,y:.850651,z:.525731},{x:-.147621,y:.716567,z:.681718},{x:.147621,y:.716567,z:.681718},{x:0,y:.525731,z:.850651},{x:.309017,y:.5,z:.809017},{x:.525731,y:0,z:.850651},{x:.295242,y:0,z:.955423},{x:.442863,y:.238856,z:.864188},{x:.16246,y:.262866,z:.951056},{x:-.681718,y:.147621,z:.716567},{x:-.809017,y:.309017,z:.5},{x:-.587785,y:.425325,z:.688191},{x:-.850651,y:.525731,z:0},{x:-.864188,y:.442863,z:.238856},{x:-.716567,y:.681718,z:.147621},{x:-.688191,y:.587785,z:.425325},{x:-.5,y:.809017,z:.309017},{x:-.238856,y:.864188,z:.442863},{x:-.425325,y:.688191,z:.587785},{x:-.716567,y:.681718,z:-.147621},{x:-.5,y:.809017,z:-.309017},{x:-.525731,y:.850651,z:0},{x:0,y:.850651,z:-.525731},{x:-.238856,y:.864188,z:-.442863},{x:0,y:.955423,z:-.295242},{x:-.262866,y:.951056,z:-.16246},{x:0,y:1,z:0},{x:0,y:.955423,z:.295242},{x:-.262866,y:.951056,z:.16246},{x:.238856,y:.864188,z:.442863},{x:.262866,y:.951056,z:.16246},{x:.5,y:.809017,z:.309017},{x:.238856,y:.864188,z:-.442863},{x:.262866,y:.951056,z:-.16246},{x:.5,y:.809017,z:-.309017},{x:.850651,y:.525731,z:0},{x:.716567,y:.681718,z:.147621},{x:.716567,y:.681718,z:-.147621},{x:.525731,y:.850651,z:0},{x:.425325,y:.688191,z:.587785},{x:.864188,y:.442863,z:.238856},{x:.688191,y:.587785,z:.425325},{x:.809017,y:.309017,z:.5},{x:.681718,y:.147621,z:.716567},{x:.587785,y:.425325,z:.688191},{x:.955423,y:.295242,z:0},{x:1,y:0,z:0},{x:.951056,y:.16246,z:.262866},{x:.850651,y:-.525731,z:0},{x:.955423,y:-.295242,z:0},{x:.864188,y:-.442863,z:.238856},{x:.951056,y:-.16246,z:.262866},{x:.809017,y:-.309017,z:.5},{x:.681718,y:-.147621,z:.716567},{x:.850651,y:0,z:.525731},{x:.864188,y:.442863,z:-.238856},{x:.809017,y:.309017,z:-.5},{x:.951056,y:.16246,z:-.262866},{x:.525731,y:0,z:-.850651},{x:.681718,y:.147621,z:-.716567},{x:.681718,y:-.147621,z:-.716567},{x:.850651,y:0,z:-.525731},{x:.809017,y:-.309017,z:-.5},{x:.864188,y:-.442863,z:-.238856},{x:.951056,y:-.16246,z:-.262866},{x:.147621,y:.716567,z:-.681718},{x:.309017,y:.5,z:-.809017},{x:.425325,y:.688191,z:-.587785},{x:.442863,y:.238856,z:-.864188},{x:.587785,y:.425325,z:-.688191},{x:.688191,y:.587785,z:-.425325},{x:-.147621,y:.716567,z:-.681718},{x:-.309017,y:.5,z:-.809017},{x:0,y:.525731,z:-.850651},{x:-.525731,y:0,z:-.850651},{x:-.442863,y:.238856,z:-.864188},{x:-.295242,y:0,z:-.955423},{x:-.16246,y:.262866,z:-.951056},{x:0,y:0,z:-1},{x:.295242,y:0,z:-.955423},{x:.16246,y:.262866,z:-.951056},{x:-.442863,y:-.238856,z:-.864188},{x:-.309017,y:-.5,z:-.809017},{x:-.16246,y:-.262866,z:-.951056},{x:0,y:-.850651,z:-.525731},{x:-.147621,y:-.716567,z:-.681718},{x:.147621,y:-.716567,z:-.681718},{x:0,y:-.525731,z:-.850651},{x:.309017,y:-.5,z:-.809017},{x:.442863,y:-.238856,z:-.864188},{x:.16246,y:-.262866,z:-.951056},{x:.238856,y:-.864188,z:-.442863},{x:.5,y:-.809017,z:-.309017},{x:.425325,y:-.688191,z:-.587785},{x:.716567,y:-.681718,z:-.147621},{x:.688191,y:-.587785,z:-.425325},{x:.587785,y:-.425325,z:-.688191},{x:0,y:-.955423,z:-.295242},{x:0,y:-1,z:0},{x:.262866,y:-.951056,z:-.16246},{x:0,y:-.850651,z:.525731},{x:0,y:-.955423,z:.295242},{x:.238856,y:-.864188,z:.442863},{x:.262866,y:-.951056,z:.16246},{x:.5,y:-.809017,z:.309017},{x:.716567,y:-.681718,z:.147621},{x:.525731,y:-.850651,z:0},{x:-.238856,y:-.864188,z:-.442863},{x:-.5,y:-.809017,z:-.309017},{x:-.262866,y:-.951056,z:-.16246},{x:-.850651,y:-.525731,z:0},{x:-.716567,y:-.681718,z:-.147621},{x:-.716567,y:-.681718,z:.147621},{x:-.525731,y:-.850651,z:0},{x:-.5,y:-.809017,z:.309017},{x:-.238856,y:-.864188,z:.442863},{x:-.262866,y:-.951056,z:.16246},{x:-.864188,y:-.442863,z:.238856},{x:-.809017,y:-.309017,z:.5},{x:-.688191,y:-.587785,z:.425325},{x:-.681718,y:-.147621,z:.716567},{x:-.442863,y:-.238856,z:.864188},{x:-.587785,y:-.425325,z:.688191},{x:-.309017,y:-.5,z:.809017},{x:-.147621,y:-.716567,z:.681718},{x:-.425325,y:-.688191,z:.587785},{x:-.16246,y:-.262866,z:.951056},{x:.442863,y:-.238856,z:.864188},{x:.16246,y:-.262866,z:.951056},{x:.309017,y:-.5,z:.809017},{x:.147621,y:-.716567,z:.681718},{x:0,y:-.525731,z:.850651},{x:.425325,y:-.688191,z:.587785},{x:.587785,y:-.425325,z:.688191},{x:.688191,y:-.587785,z:.425325},{x:-.955423,y:.295242,z:0},{x:-.951056,y:.16246,z:.262866},{x:-1,y:0,z:0},{x:-.850651,y:0,z:.525731},{x:-.955423,y:-.295242,z:0},{x:-.951056,y:-.16246,z:.262866},{x:-.864188,y:.442863,z:-.238856},{x:-.951056,y:.16246,z:-.262866},{x:-.809017,y:.309017,z:-.5},{x:-.864188,y:-.442863,z:-.238856},{x:-.951056,y:-.16246,z:-.262866},{x:-.809017,y:-.309017,z:-.5},{x:-.681718,y:.147621,z:-.716567},{x:-.681718,y:-.147621,z:-.716567},{x:-.850651,y:0,z:-.525731},{x:-.688191,y:.587785,z:-.425325},{x:-.587785,y:.425325,z:-.688191},{x:-.425325,y:.688191,z:-.587785},{x:-.425325,y:-.688191,z:-.587785},{x:-.587785,y:-.425325,z:-.688191},{x:-.688191,y:-.587785,z:-.425325}],ie=class extends Error{},er=class{constructor(e){this.vfs=e}async load(e){let r=await this.vfs.readFile(e),n=new Uint8Array(r.byteLength);return n.set(r),vi(n.buffer)}};function Ws(t,e,r){let n=[];for(let o=0;o<r;o+=1){let i=t.getUint8(e+o);if(i===0)break;n.push(i)}return String.fromCharCode(...n)}function Ir(t,e,r,n){if(r!==0&&(e<Gs||e+r>t.byteLength))throw new ie(`${n} section is out of bounds`)}function nl(t){if(t.byteLength<Gs)throw new ie("MD2 buffer too small to contain header");let e=new DataView(t),r=e.getInt32(0,!0),n=e.getInt32(4,!0);if(r!==el)throw new ie(`Invalid MD2 ident: ${r}`);if(n!==tl)throw new ie(`Unsupported MD2 version: ${n}`);let o={ident:r,version:n,skinWidth:e.getInt32(8,!0),skinHeight:e.getInt32(12,!0),frameSize:e.getInt32(16,!0),numSkins:e.getInt32(20,!0),numVertices:e.getInt32(24,!0),numTexCoords:e.getInt32(28,!0),numTriangles:e.getInt32(32,!0),numGlCommands:e.getInt32(36,!0),numFrames:e.getInt32(40,!0),offsetSkins:e.getInt32(44,!0),offsetTexCoords:e.getInt32(48,!0),offsetTriangles:e.getInt32(52,!0),offsetFrames:e.getInt32(56,!0),offsetGlCommands:e.getInt32(60,!0),offsetEnd:e.getInt32(64,!0)},i=40+o.numVertices*4;if(o.frameSize!==i)throw new ie(`Unexpected frame size ${o.frameSize}, expected ${i}`);if(o.offsetEnd>t.byteLength)throw new ie("MD2 offset_end exceeds buffer length");return o}function ol(t,e){let r=e.numSkins*64;Ir(t,e.offsetSkins,r,"skins");let n=new DataView(t,e.offsetSkins,r),o=[];for(let i=0;i<e.numSkins;i+=1)o.push({name:Ws(n,i*64,64)});return o}function il(t,e){let r=e.numTexCoords*4;Ir(t,e.offsetTexCoords,r,"texcoords");let n=new DataView(t,e.offsetTexCoords,r),o=[];for(let i=0;i<e.numTexCoords;i+=1){let s=i*4;o.push({s:n.getInt16(s,!0),t:n.getInt16(s+2,!0)})}return o}function sl(t,e){let r=e.numTriangles*12;Ir(t,e.offsetTriangles,r,"triangles");let n=new DataView(t,e.offsetTriangles,r),o=[];for(let i=0;i<e.numTriangles;i+=1){let s=i*12,a=[n.getUint16(s,!0),n.getUint16(s+2,!0),n.getUint16(s+4,!0)],c=[n.getUint16(s+6,!0),n.getUint16(s+8,!0),n.getUint16(s+10,!0)];if(a.some(l=>l>=e.numVertices)||c.some(l=>l>=e.numTexCoords))throw new ie("Triangle references out of range vertex or texcoord");o.push({vertexIndices:a,texCoordIndices:c})}return o}function al(t,e){let r=e.numFrames*e.frameSize;Ir(t,e.offsetFrames,r,"frames");let n=[];for(let o=0;o<e.numFrames;o+=1){let i=e.offsetFrames+o*e.frameSize,s=new DataView(t,i,e.frameSize),a={x:s.getFloat32(0,!0),y:s.getFloat32(4,!0),z:s.getFloat32(8,!0)},c={x:s.getFloat32(12,!0),y:s.getFloat32(16,!0),z:s.getFloat32(20,!0)},l=Ws(s,24,16),d=[];for(let u=0;u<e.numVertices;u+=1){let m=40+u*4,f={x:s.getUint8(m)*a.x+c.x,y:s.getUint8(m+1)*a.y+c.y,z:s.getUint8(m+2)*a.z+c.z},h=s.getUint8(m+3),y=rl[h];if(!y)throw new ie(`Invalid normal index ${h} in frame ${l}`);d.push({position:f,normalIndex:h,normal:y})}n.push({name:l,vertices:d})}return n}function cl(t,e){let r=e.numGlCommands*4;if(Ir(t,e.offsetGlCommands,r,"gl commands"),r===0)return[];let n=new DataView(t,e.offsetGlCommands,r),o=[],i=0;for(;;){if(i+4>r)throw new ie("GL command list ended unexpectedly");let s=n.getInt32(i,!0);if(i+=4,s===0)break;let a=Math.abs(s),c=[],l=a*12;if(i+l>r)throw new ie("GL command vertex block exceeds buffer");for(let d=0;d<a;d+=1){let u=n.getFloat32(i,!0),m=n.getFloat32(i+4,!0),f=n.getInt32(i+8,!0);if(i+=12,f<0||f>=e.numVertices)throw new ie("GL command references invalid vertex index");c.push({s:u,t:m,vertexIndex:f})}o.push({mode:s>0?"strip":"fan",vertices:c})}if(i!==r)throw new ie("GL command list did not consume expected data");return o}function vi(t){let e=nl(t),r=ol(t,e),n=il(t,e),o=sl(t,e),i=al(t,e),s=cl(t,e);return{header:e,skins:r,texCoords:n,triangles:o,frames:i,glCommands:s}}function Xs(t){let e=[],r=0;for(;r<t.length;){let n=t[r].name,o=n.replace(/\d+$/,"")||n,i=r;for(;i+1<t.length&&(t[i+1].name.replace(/\d+$/,"")||t[i+1].name)===o;)i+=1;e.push({name:o,firstFrame:r,lastFrame:i}),r=i+1}return e}var qs=860898377,ll=15,Ce=class extends Error{constructor(e){super(e),this.name="Md3ParseError"}};function Rr(t,e,r){let n=new Uint8Array(t.buffer,t.byteOffset+e,r);return new TextDecoder("utf-8").decode(n).replace(/\0.*$/,"").trim()}function dl(t){let e=(t>>8&255)*(2*Math.PI/255),r=(t&255)*(2*Math.PI/255),n=Math.sin(r);return{x:Math.cos(e)*n,y:Math.sin(e)*n,z:Math.cos(r)}}function $n(t,e,r,n){if(e<0||e+r>n)throw new Ce(`${t} exceeds buffer bounds`)}function ul(t){let e=t.getInt32(0,!0);if(e!==qs)throw new Ce(`Invalid MD3 ident: ${e}`);let r=t.getInt32(4,!0);if(r!==ll)throw new Ce(`Unsupported MD3 version: ${r}`);let n=Rr(t,8,64),o=t.getInt32(72,!0),i=t.getInt32(76,!0),s=t.getInt32(80,!0),a=t.getInt32(84,!0),c=t.getInt32(88,!0),l=t.getInt32(92,!0),d=t.getInt32(96,!0),u=t.getInt32(100,!0),m=t.getInt32(104,!0);if(i<=0||a<0||s<0)throw new Ce("Invalid MD3 counts");return{ident:e,version:r,name:n,flags:o,numFrames:i,numTags:s,numSurfaces:a,numSkins:c,ofsFrames:l,ofsTags:d,ofsSurfaces:u,ofsEnd:m}}function ml(t,e){let r=[];$n("Frames",e.ofsFrames,e.numFrames*56,t.byteLength);for(let o=0;o<e.numFrames;o+=1){let i=e.ofsFrames+o*56;r.push({minBounds:{x:t.getFloat32(i,!0),y:t.getFloat32(i+4,!0),z:t.getFloat32(i+8,!0)},maxBounds:{x:t.getFloat32(i+12,!0),y:t.getFloat32(i+16,!0),z:t.getFloat32(i+20,!0)},localOrigin:{x:t.getFloat32(i+24,!0),y:t.getFloat32(i+28,!0),z:t.getFloat32(i+32,!0)},radius:t.getFloat32(i+36,!0),name:Rr(t,i+40,16)})}return r}function fl(t,e){let r=[],o=e.numFrames*e.numTags*112;$n("Tags",e.ofsTags,o,t.byteLength);for(let i=0;i<e.numFrames;i+=1){let s=[];for(let a=0;a<e.numTags;a+=1){let c=e.ofsTags+(i*e.numTags+a)*112,l=c+64,d=l+12;s.push({name:Rr(t,c,64),origin:{x:t.getFloat32(l,!0),y:t.getFloat32(l+4,!0),z:t.getFloat32(l+8,!0)},axis:[{x:t.getFloat32(d,!0),y:t.getFloat32(d+4,!0),z:t.getFloat32(d+8,!0)},{x:t.getFloat32(d+12,!0),y:t.getFloat32(d+16,!0),z:t.getFloat32(d+20,!0)},{x:t.getFloat32(d+24,!0),y:t.getFloat32(d+28,!0),z:t.getFloat32(d+32,!0)}]})}r.push(s)}return r}function pl(t,e){let r=t.getInt32(e,!0);if(r!==qs)throw new Ce(`Invalid surface ident at ${e}: ${r}`);let n=Rr(t,e+4,64),o=t.getInt32(e+68,!0),i=t.getInt32(e+72,!0),s=t.getInt32(e+76,!0),a=t.getInt32(e+80,!0),c=t.getInt32(e+84,!0),l=t.getInt32(e+88,!0),d=t.getInt32(e+92,!0),u=t.getInt32(e+96,!0),m=t.getInt32(e+100,!0),f=t.getInt32(e+104,!0);if(i<=0||a<=0||c<=0)throw new Ce(`Invalid surface counts for ${n}`);let h=f;$n(`Surface ${n}`,e,h,t.byteLength);let y=[],p=e+l;for(let w=0;w<c;w+=1){let L=p+w*12;y.push({indices:[t.getInt32(L,!0),t.getInt32(L+4,!0),t.getInt32(L+8,!0)]})}let x=[],M=e+d;for(let w=0;w<s;w+=1){let L=M+w*68;x.push({name:Rr(t,L,64),shaderIndex:t.getInt32(L+64,!0)})}let v=[],S=e+u;for(let w=0;w<a;w+=1){let L=S+w*8;v.push({s:t.getFloat32(L,!0),t:t.getFloat32(L+4,!0)})}let b=[],_=e+m;for(let w=0;w<i;w+=1){let L=[];for(let P=0;P<a;P+=1){let A=_+(w*a+P)*8,N=t.getInt16(A,!0)/64,U=t.getInt16(A+2,!0)/64,V=t.getInt16(A+4,!0)/64,F=t.getUint16(A+6,!0);L.push({position:{x:N,y:U,z:V},latLng:F,normal:dl(F)})}b.push(L)}return{surface:{name:n,flags:o,numFrames:i,shaders:x,triangles:y,texCoords:v,vertices:b},nextOffset:e+f}}function bi(t){if(t.byteLength<108)throw new Ce("MD3 buffer too small for header");let e=new DataView(t),r=ul(e);$n("MD3 end",r.ofsEnd,0,t.byteLength);let n=ml(e,r),o=fl(e,r),i=[],s=r.ofsSurfaces;for(let a=0;a<r.numSurfaces;a+=1){let{surface:c,nextOffset:l}=pl(e,s);i.push(c),s=l}if(s!==r.ofsEnd)throw new Ce("Surface parsing did not reach ofsEnd");return{header:r,frames:n,tags:o,surfaces:i}}var tr=class{constructor(e){this.vfs=e}async load(e){let r=await this.vfs.readFile(e);return bi(r.slice().buffer)}};function Ys(t,e){let r=(t.sequence.end-t.sequence.start+1)/t.sequence.fps,n=t.sequence.loop!==!1,o=t.time+e;return n?o=(o%r+r)%r:o>r&&(o=r),{...t,time:Math.max(0,Math.min(o,r))}}function js(t){let e=t.sequence.end-t.sequence.start+1,r=1/t.sequence.fps,n=t.sequence.loop!==!1,o=t.time/r;if(!n&&o>=e)return{frame:t.sequence.end,nextFrame:t.sequence.end,lerp:0};let i=n?o%e:Math.min(o,e-1),s=Math.floor(i),a=t.sequence.start+s,c=s+1>=e?n?t.sequence.start:t.sequence.end:a+1,l=!n&&s>=e-1?0:i-s;return{frame:a,nextFrame:c,lerp:l}}function Ks(t){return{sequence:t,time:0}}function $s(t,e,r){return{x:t.x+(e.x-t.x)*r,y:t.y+(e.y-t.y)*r,z:t.z+(e.z-t.z)*r}}var kr=class extends Error{constructor(e){super(e),this.name="WalParseError"}};function Qn(t){if(t.byteLength<100)throw new kr("WAL buffer too small");let e=new DataView(t),r=new Uint8Array(t,0,32),n=new TextDecoder("utf-8").decode(r).replace(/\0.*$/,"").trim(),o=e.getInt32(32,!0),i=e.getInt32(36,!0),s=[e.getInt32(40,!0),e.getInt32(44,!0),e.getInt32(48,!0),e.getInt32(52,!0)],a=new Uint8Array(t,56,32),c=new TextDecoder("utf-8").decode(a).replace(/\0.*$/,"").trim(),l=e.getInt32(88,!0),d=e.getInt32(92,!0),u=e.getInt32(96,!0);if(o<=0||i<=0)throw new kr("Invalid WAL dimensions");let m=[],f=o,h=i;for(let y=0;y<s.length;y+=1){let p=s[y],x=Math.max(1,f*h|0);if(p<=0||p+x>t.byteLength)throw new kr(`Invalid WAL mip offset for level ${y}`);let M=new Uint8Array(t,p,x);m.push({level:y,width:f,height:h,data:M}),f=Math.max(1,f>>1),h=Math.max(1,h>>1)}return{name:n,width:o,height:i,mipmaps:m,animName:c,flags:l,contents:d,value:u}}var Ft=class extends Error{constructor(e){super(e),this.name="PcxParseError"}};function Qs(t){if(t.byteLength<128)throw new Ft("PCX buffer too small for header");let e=new DataView(t),r=e.getUint8(0),n=e.getUint8(2),o=e.getUint8(3),i=e.getUint16(4,!0),s=e.getUint16(6,!0),a=e.getUint16(8,!0),c=e.getUint16(10,!0);if(r!==10||n!==1)throw new Ft("Unsupported PCX encoding");if(o!==8)throw new Ft("Only 8bpp PCX files are supported");let l=a-i+1,d=c-s+1,u=e.getUint16(66,!0),m=t.byteLength-769;if(m<128||new DataView(t,m,1).getUint8(0)!==12)throw new Ft("Missing PCX palette");let f=new Uint8Array(t,m+1,768),h=new Uint8Array(t,128,m-128),y=new Uint8Array(l*d),p=0,x=0;for(let M=0;M<d;M+=1){let v=0;for(;v<u&&p<h.length;){let S=1,b=h[p++];if((b&192)===192){if(S=b&63,p>=h.length)throw new Ft("Unexpected end of PCX RLE data");b=h[p++]}for(let _=0;_<S&&v<u;_+=1)v<l&&(y[x++]=b),v+=1}}return{width:l,height:d,bitsPerPixel:o,pixels:y,palette:f}}function Jn(t){let e=new Uint8Array(t.width*t.height*4);for(let r=0;r<t.pixels.length;r+=1){let n=t.pixels[r],o=n*3,i=r*4;e[i]=t.palette[o],e[i+1]=t.palette[o+1],e[i+2]=t.palette[o+2],e[i+3]=n===255?0:255}return e}var rr=class{constructor(e={}){this.cache=new ut(e.capacity??128)}get size(){return this.cache.size}get(e){return this.cache.get(e.toLowerCase())}set(e,r){this.cache.set(e.toLowerCase(),r)}clear(){this.cache.clear()}};function Si(t,e){let r=[];for(let n of t.mipmaps){let o=new Uint8Array(n.width*n.height*4);for(let i=0;i<n.data.length;i+=1){let s=n.data[i],a=s*3,c=i*4;o[c]=e[a],o[c+1]=e[a+1],o[c+2]=e[a+2],o[c+3]=s===255?0:255}r.push({level:n.level,width:n.width,height:n.height,rgba:o})}return{width:t.width,height:t.height,levels:r,source:"wal"}}function Js(t){let e=Jn(t),r={level:0,width:t.width,height:t.height,rgba:e};return{width:t.width,height:t.height,levels:[r],source:"pcx"}}function Zs(t,e){return Si(Qn(t),e)}var It=class extends Error{constructor(e){super(e),this.name="WavParseError"}};function Mi(t,e,r){return new TextDecoder("ascii").decode(new Uint8Array(t.buffer,t.byteOffset+e,r))}function Zn(t){if(t.byteLength<44)throw new It("WAV buffer too small");let e=new DataView(t);if(Mi(e,0,4)!=="RIFF"||Mi(e,8,4)!=="WAVE")throw new It("Invalid WAV header");let r=12,n=-1,o=-1,i=0,s=0;for(;r+8<=t.byteLength;){let h=Mi(e,r,4),y=e.getUint32(r+4,!0),p=r+8;h==="fmt "?(n=p,i=y):h==="data"&&(o=p,s=y),r=p+y}if(n===-1||o===-1)throw new It("Missing fmt or data chunk");let a=e.getUint16(n,!0),c=e.getUint16(n+2,!0),l=e.getUint32(n+4,!0),d=e.getUint16(n+14,!0);if(a!==1)throw new It("Only PCM WAV is supported");let u=d/8,m=s/(u*c),f=new Float32Array(m*c);for(let h=0;h<m;h+=1)for(let y=0;y<c;y+=1){let p=h*c+y,x=o+p*u,M=0;if(d===8)M=e.getUint8(x),f[p]=(M-128)/128;else if(d===16)M=e.getInt16(x,!0),f[p]=M/32768;else if(d===24){let v=e.getUint8(x),S=e.getUint8(x+1),b=e.getInt8(x+2);M=v|S<<8|b<<16,f[p]=M/8388608}else throw new It(`Unsupported bitsPerSample: ${d}`)}return{sampleRate:l,channels:c,bitsPerSample:d,samples:f}}var hl=(t,e=4294967295,r=79764919)=>{let n=new Int32Array(256),o,i,s,a=e;for(o=0;o<256;o++){for(s=o<<24,i=8;i>0;--i)s=2147483648&s?s<<1^r:s<<1;n[o]=s}for(o=0;o<t.length;o++)a=a<<8^n[255&(a>>24^t[o])];return a};var _i=(t,e=hl)=>{let r=p=>new Uint8Array(p.length/2).map(((x,M)=>parseInt(p.substring(2*M,2*(M+1)),16))),n=p=>r(p)[0],o=new Map;[,8364,,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,,381,,,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,,382,376].forEach(((p,x)=>o.set(p,x)));let i=new Uint8Array(t.length),s,a,c,l=!1,d=0,u=42,m=t.length>13&&t.substring(0,9)==="dynEncode",f=0;m&&(f=11,a=n(t.substring(9,f)),a<=1&&(f+=2,u=n(t.substring(11,f))),a===1&&(f+=8,c=(p=>new DataView(r(p).buffer).getInt32(0,!0))(t.substring(13,f))));let h=256-u;for(let p=f;p<t.length;p++)if(s=t.charCodeAt(p),s!==61||l){if(s===92&&p<t.length-5&&m){let x=t.charCodeAt(p+1);x!==117&&x!==85||(s=parseInt(t.substring(p+2,p+6),16),p+=5)}if(s>255){let x=o.get(s);x&&(s=x+127)}l&&(l=!1,s-=64),i[d++]=s<u&&s>0?s+h:s-u}else l=!0;let y=i.subarray(0,d);if(m&&a===1){let p=e(y);if(p!==c){let x="Decode failed crc32 validation";throw console.error("`simple-yenc`\n",x+`
2
2
  `,"Expected: "+c+"; Got: "+p+`
3
- `,"Visit https://github.com/eshaz/simple-yenc for more information"),Error(x)}}return y};function $(){let t=Uint8Array,e=Float32Array;$.modules||Object.defineProperties($,{modules:{value:new WeakMap},setModule:{value(r,n){$.modules.set(r,Promise.resolve(n))}},getModule:{value(r,n){let o=$.modules.get(r);return o||(n?o=WebAssembly.compile(_i(n)):(n=r.wasm,o=$.inflateDynEncodeString(n).then(i=>WebAssembly.compile(i))),$.modules.set(r,o)),o}},concatFloat32:{value(r,n){let o=new e(n),i=0,s=0;for(;i<r.length;)o.set(r[i],s),s+=r[i++].length;return o}},getDecodedAudio:{value:(r,n,o,i,s)=>({errors:r,channelData:n,samplesDecoded:o,sampleRate:i,bitDepth:s})},getDecodedAudioMultiChannel:{value(r,n,o,i,s,a){let c=[],l,d;for(l=0;l<o;l++){let u=[];for(d=0;d<n.length;)u.push(n[d++][l]||[]);c.push($.concatFloat32(u,i))}return $.getDecodedAudio(r,c,i,s,a)}},inflateDynEncodeString:{value(r){return r=_i(r),new Promise(n=>{let o=String.raw`dynEncode012804c7886d(‰›•)((()>+ˆ*§§)§ˆ,§§§§)§ˆ+§§§)§+.-()(*)-+)(ˆ.7*§)i¸¸,3§(i¸¸,3/G+.••—š¡*(,˜ŽŽ(,3‡‡‰˜‡Š‰›+)2å:-œ),§H(P*DI*H(P*@I++hH)H*r,hH(H(P*<J,i)’^*<H,H(P*4’U((I-H(H*i0’J,^*DH+H-H*œšI+H,I*4)33H(H*H)“^*DH(H+H)^*@H+i§H)œi§›™3æ*).§K(iH“I/+§H,iHn,§H+i(H+i(rCJ0I,H*I-+hH,,hH(H-V)(i)œ’J.H.W)(i)’c)(H,i)“I,H-i*’I-4)33i(I.*hH(V)(H+n5(H(i*’I-i(I,i)I.+hH,i*’J+iHn,hi(I-i*I,+hH,H/’H-c)(H,iFn,hi(I,+hH,H0n5-H*V)(J(,hH/H(i)œ’J(H(V)(J(i)’c)(H)H(i)œ’H,c)(3H*i*’I*H,i)’I,4(3(-H(H,’W)(H-’I-H,i*’I,4)3(3(3H,H-’I1H+I,H.i)œH1V)(“J.i(v5(33H.-H(H,’i(c)(H,i*’I,4)333–)-§i*I*+§H*iHn,hiž73H,H(i)8(H+šJ+H)P*(H*’V)(J-“r,§H)P*,H.i)œ’H+H,“i)œ’V)(-H*i*’I*H+i)œI+H-H.’I.H,H-’i)œI,4)333Ã+)-§iø7i(^*(iü7I,*h+hH+iDn,h*hilI+i)I,+hH+,hH+iô7’H,c)(i)H+i´8’W)(œH,’I,H+i*’I+4)-+hH(H)8*J-i(p5.*h*h*hH-i')u,hH(P*(J+,hH(P*0J,H(P*,n50H+H,’H-b((3H(P*0i)’I.4)3H-i¨*n5*H-iÅ*s,hiž73H-i)œJ+V)&+I,H(H+V)æ,8(I.H(H*8*J-i(p51H-i)œJ+i¸7’V)(H(H+iø7’V)(8(’J/H(P*0J+s,hi73H+H,H.’J,’I.H(P*(m5(H.H(P*,s5.+hH,m5*H(P*(J.H+’H.H+H/“’U((b((H(H(P*0i)’J+^*0H,i)“I,4(3(3H(H.^*03H-i¨*o5)33i(73(3(3-H,H+i)žc)(H,i*’I,H+i)’I+4)33i)I-3H-3!2)0§K(i2“J,L(H,H(^*(H,H*^*4H,i(^*0H,i(^*DH,j(_*<H,H)P*(^*,H,H+P*(^*8*h*h+hH,i)8(I3i§I**h*h*h*h*h*h*hH,i*8(6+(),03H,j(_*@i*I-H,P*<J.i,’J(H,P*8J/s50H,H.i+’J0^*<i¦I*H.H,P*4J1’J.U(*H.U((J2›i')o5/H.U()I.H,H(^*<H0H1’U((H.i0œJ.i§›i0ži')™o5/H/H.H2šJ*H(’J.q50H,P*0J/H*’I-H,P*(J0,hH,P*,H-q,hi)I-423+hH*m5+H/H0’H(H1’U((b((H/i)’I/H(i)’I(H*i)“I*4(3(3H,H.^*<H,H-^*04*3iØ1U((5+i(I(i¨7i1^*(i$6iè1^*(i°7iè6^*(i¬7iÈ6^*(+hH(iÈ*n,hiÈ*I(+hH(i¨,n,hi¨,I(+hH(iØ,n,hiØ,I(+hH(iè,o,hH,i-’H(’i0c)(H(i*’I(4)33iè1i1H,i-’iÈ*8)Bi(I(+hH(ido,hH,i-’H(’i-c)(H(i*’I(4)33iÈ6iè6H,i-’iF8)BiØ1i)b((41-H,i-’H(’i/c)(H(i*’I(4)3(3(-H,i-’H(’i1c)(H(i*’I(4)3(3(-H,i-’H(’i0c)(H(i*’I(4)3(3(3H,H/^*0H,H(^*<3i(I*4*3H,H,i¸)’^*TH,H,iø-’^*PH,H,iX’^*LH,H,i(’^*HH,i-8(I(H,i-8(I-i¥I*H,i,8(I.H(iErH-iErš5)H(i©*’I1H-i)’I0i(i;H.i,’J(i(H(i(rCJ(“J*H*i;sCI*i¨1I-H(I/+hH/,hH,i-’H-V)(i)œ’H,i+8(c)(H/i)“I/H-i*’I-H*i)’I*4)-H(i)œi¨1’I/+hH(H*o,hH,i-’H/V)(i)œ’i(c)(H/i*’I/H(i)’I(4)33i¤I*H,iø-’H,i¸)’H,i-’i;8)5+H0H1’I2i(I-+hH-H2p,hH,H,iP’8*J*i(p5-H*i7u,hH,i-’H-i)œ’H*c)(H-i)’I-4*3i(I/i+I.i+I(*h*h*hH*i8“6*(*)3H-m,hi£I*403H-i)œH,’W)-I/i*I(4)3i3I.i/I(3H2H,H(8(H.’J(H-’J.p,hi¢I*4.3H,i-’H-i)œ’I*+hH(,hH*H/c)(H*i*’I*H(i)“I(4)-H.I-4+3(3(33H,W)1m,hiŸI*4,3H,iø-’H,i¸)’H,i-’H18)J(,hi¡I*H(i(p5,H1H,V)ú-H,V)ø-’o5,3H,i(’H,iX’H,i-’H1i)œ’H08)J(,hi I*H(i(p5,H0H,V)šH,V)˜’o5,3H,H,iP’H,iH’8+I*4+3(3(3H,i$6i¬78+I*3H*H3šm5(3i)I-H*i(r5)3H)H,P*0^*(H+H,P*<^*(H*I-3H,i2’L(H-33Á)+(i¨03b+(,(-(.(/(0(1(2(3(5(7(9(;(?(C(G(K(S([(c(k({(‹(›(«(Ë(ë( (*)(iø03O)()()()(*(*(*(*(+(+(+(+(,(,(,(,(-(-(-(-(i¨13M8(9(:(((0(/(1(.(2(-(3(,(4(+(5(*(6()(7(T7œ‰šœ‡Ž‰œš›*S7•œ‰Š”U”—Љ”›S0›‘–U œ`;$.getModule($,o).then(i=>WebAssembly.instantiate(i,{})).then(({exports:i})=>{let s=new Map(Object.entries(i)),a=s.get("puff"),c=s.get("memory").buffer,l=new t(c),d=new DataView(c),u=s.get("__heap_base"),m=r.length,f=u;u+=4,d.setInt32(f,m,!0);let h=u;u+=m,l.set(r,h);let y=u;u+=4,d.setInt32(y,l.byteLength-u,!0),a(u,y,h,f),n(l.slice(u,u+d.getInt32(y,!0)))})})}}}),Object.defineProperty(this,"wasm",{enumerable:!0,get:()=>this._wasm}),this.getOutputChannels=(r,n,o)=>{let i=[],s=0;for(;s<n;)i.push(r.slice(s*o,s++*o+o));return i},this.allocateTypedArray=(r,n,o=!0)=>{let i=this._wasm.malloc(n.BYTES_PER_ELEMENT*r);return o&&this._pointers.add(i),{ptr:i,len:r,buf:new n(this._wasm.HEAP,i,r)}},this.free=()=>{this._pointers.forEach(r=>{this._wasm.free(r)}),this._pointers.clear()},this.codeToString=r=>{let n=[],o=new Uint8Array(this._wasm.HEAP);for(let i=o[r];i!==0;i=o[++r])n.push(i);return String.fromCharCode.apply(null,n)},this.addError=(r,n,o,i,s,a)=>{r.push({message:n,frameLength:o,frameNumber:i,inputBytes:s,outputSamples:a})},this.instantiate=(r,n)=>(n&&$.setModule(r,n),this._wasm=new r($).instantiate(),this._pointers=new Set,this._wasm.ready.then(()=>this))}var ra=Ec(ta(),1);var yl=()=>globalThis.Worker||ra.default,nr=class extends yl(){constructor(e,r,n,o){$.modules||new $;let i=$.modules.get(n);if(!i){let s="text/javascript",a,c=`'use strict';(${((l,d,u)=>{let m,f,h=new Promise(y=>{f=y});self.onmessage=({data:{id:y,command:p,data:x}})=>{let M=h,v={id:y},S;p==="init"?(Object.defineProperties(l,{WASMAudioDecoderCommon:{value:d},EmscriptenWASM:{value:u},module:{value:x.module},isWebWorker:{value:!0}}),m=new l(x.options),f()):p==="free"?m.free():p==="ready"?M=M.then(()=>m.ready):p==="reset"?M=M.then(()=>m.reset()):(Object.assign(v,m[p](Array.isArray(x)?x.map(b=>new Uint8Array(b)):new Uint8Array(x))),S=v.channelData?v.channelData.map(b=>b.buffer):[]),M.then(()=>self.postMessage(v,S))}}).toString()})(${n}, ${$}, ${o})`;try{a=typeof process.versions.node<"u"}catch{}i=a?`data:${s};base64,${Buffer.from(c).toString("base64")}`:URL.createObjectURL(new Blob([c],{type:s})),$.modules.set(n,i)}super(i,{name:r}),this._id=Number.MIN_SAFE_INTEGER,this._enqueuedOperations=new Map,this.onmessage=({data:s})=>{let{id:a,...c}=s;this._enqueuedOperations.get(a)(c),this._enqueuedOperations.delete(a)},new o($).getModule().then(s=>{this.postToDecoder("init",{module:s,options:e})})}async postToDecoder(e,r){return new Promise(n=>{this.postMessage({command:e,id:this._id,data:r}),this._enqueuedOperations.set(this._id++,n)})}get ready(){return this.postToDecoder("ready")}async free(){await this.postToDecoder("free").finally(()=>{this.terminate()})}async reset(){await this.postToDecoder("reset")}};var eo=(t,e)=>{Object.defineProperty(t,"name",{value:e})};var Q=Symbol,na=", ",T=(()=>{let t="front",e="side",r="rear",n="left",o="center",i="right";return["",t+" ",e+" ",r+" "].map(s=>[[n,i],[n,i,o],[n,o,i],[o,n,i],[o]].flatMap(a=>a.map(c=>s+c).join(na)))})(),We="LFE",mt="monophonic (mono)",ft="stereo",Dr="surround",J=(t,...e)=>`${[mt,ft,`linear ${Dr}`,"quadraphonic",`5.0 ${Dr}`,`5.1 ${Dr}`,`6.1 ${Dr}`,`7.1 ${Dr}`][t-1]} (${e.join(na)})`,Hr=[mt,J(2,T[0][0]),J(3,T[0][2]),J(4,T[1][0],T[3][0]),J(5,T[1][2],T[3][0]),J(6,T[1][2],T[3][0],We),J(7,T[1][2],T[2][0],T[3][4],We),J(8,T[1][2],T[2][0],T[3][0],We)],oa=192e3,ia=176400,to=96e3,ro=88200,sa=64e3,pt=48e3,or=44100,ir=32e3,sr=24e3,ar=22050,cr=16e3,no=12e3,oo=11025,lr=8e3,aa=7350,Ne="absoluteGranulePosition",k="bandwidth",ce="bitDepth",le="bitrate",Or=le+"Maximum",Nr=le+"Minimum",Br=le+"Nominal",Xe="buffer",Vr=Xe+"Fullness",j="codec",de=j+"Frames",Ur="coupledStreamCount",dr="crc",Gr=dr+"16",Wr=dr+"32",q="data",C="description",qe="duration",ur="emphasis",Xr="hasOpusPadding",Se="header",ht="isContinuedPacket",qr="isCopyrighted",yt="isFirstPage",Yr="isHome",Me="isLastPage",Qe="isOriginal",Je="isPrivate",jr="isVbr",ge="layer",g="length",R="mode",Ze=R+"Extension",io="mpeg",et=io+"Version",Kr="numberAACFrames",$r="outputGain",Rt="preSkip",Qr="profile",so=Q(),tt="protection",Ai="rawData",Ce="segments",D="subarray",xt="version",kt="vorbis",Jr=kt+"Comments",mr=kt+"Setup",ao="block",Zr=ao+"ingStrategy",co=Q(),rt=ao+"Size",gt=ao+"size0",vt=ao+"size1",en=Q(),lo="channel",nt=lo+"MappingFamily",tn=lo+"MappingTable",ue=lo+"Mode",rn=Q(),E=lo+"s",ca="copyright",nn=ca+"Id",on=ca+"IdStart",ot="frame",it=ot+"Count",ve=ot+"Length",uo="Number",st=ot+uo,Ye=ot+"Padding",I=ot+"Size",la="Rate",sn="inputSample"+la,wi="page",Dt=wi+"Checksum",fr=Q(),bt=wi+"SegmentTable",re=wi+"Sequence"+uo,Li="sample",an=Li+uo,H=Li+la,je=Q(),O=Li+"s",mo="stream",cn=mo+"Count",ln=mo+"Info",Ke=mo+"Serial"+uo,zi=mo+"StructureVersion",Ei="total",Ht=Ei+"BytesOut",Ot=Ei+"Duration",Nt=Ei+"Samples",B=Q(),Te=Q(),dn=Q(),St=Q(),Be=Q(),fo=Q(),Ci=Q(),Mt=Q(),G=Q(),Pe=Q(),Fe=Q(),$e=Q(),_t=Q(),po=Q(),Ve=Q(),Ue=Q(),Ie=Q(),ho=Q(),me=Uint8Array,At=DataView,W="reserved",fe="bad",pr="free",un="none",yo="16bit CRC";var Ti=(t,e,r)=>{for(let n=0;n<t[g];n++){let o=e(n);for(let i=8;i>0;i--)o=r(o);t[n]=o}return t},gl=Ti(new me(256),t=>t,t=>t&128?7^t<<1:t<<1),Z=[Ti(new Uint16Array(256),t=>t<<8,t=>t<<1^(t&32768?32773:0))],ee=[Ti(new Uint32Array(256),t=>t,t=>t>>>1^(t&1)*3988292384)];for(let t=0;t<15;t++){Z.push(new Uint16Array(256)),ee.push(new Uint32Array(256));for(let e=0;e<=255;e++)Z[t+1][e]=Z[0][Z[t][e]>>>8]^Z[t][e]<<8,ee[t+1][e]=ee[t][e]>>>8^ee[0][ee[t][e]&255]}var ua=t=>{let e=0,r=t[g];for(let n=0;n!==r;n++)e=gl[e^t[n]];return e},ma=t=>{let e=t[g],r=e-16,n=0,o=0;for(;o<=r;)n^=t[o++]<<8|t[o++],n=Z[15][n>>8]^Z[14][n&255]^Z[13][t[o++]]^Z[12][t[o++]]^Z[11][t[o++]]^Z[10][t[o++]]^Z[9][t[o++]]^Z[8][t[o++]]^Z[7][t[o++]]^Z[6][t[o++]]^Z[5][t[o++]]^Z[4][t[o++]]^Z[3][t[o++]]^Z[2][t[o++]]^Z[1][t[o++]]^Z[0][t[o++]];for(;o!==e;)n=(n&255)<<8^Z[0][n>>8^t[o++]];return n},fa=t=>{let e=t[g],r=e-16,n=0,o=0;for(;o<=r;)n=ee[15][(t[o++]^n)&255]^ee[14][(t[o++]^n>>>8)&255]^ee[13][(t[o++]^n>>>16)&255]^ee[12][t[o++]^n>>>24]^ee[11][t[o++]]^ee[10][t[o++]]^ee[9][t[o++]]^ee[8][t[o++]]^ee[7][t[o++]]^ee[6][t[o++]]^ee[5][t[o++]]^ee[4][t[o++]]^ee[3][t[o++]]^ee[2][t[o++]]^ee[1][t[o++]]^ee[0][t[o++]];for(;o!==e;)n=ee[0][(n^t[o++])&255]^n>>>8;return n^-1},fn=(...t)=>{let e=new me(t.reduce((r,n)=>r+n[g],0));return t.reduce((r,n)=>(e.set(n,r),r+n[g]),0),e},_e=t=>String.fromCharCode(...t),da=[0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15],mn=t=>da[t&15]<<4|da[t>>4],xo=class{constructor(e){this._data=e,this._pos=e[g]*8}set position(e){this._pos=e}get position(){return this._pos}read(e){let r=Math.floor(this._pos/8),n=this._pos%8;return this._pos-=e,(mn(this._data[r-1])<<8)+mn(this._data[r])>>7-n&255}},pa=(t,e)=>{try{return t.getBigInt64(e,!0)}catch{let r=t.getUint8(e+7)&128?-1:1,n=t.getUint32(e,!0),o=t.getUint32(e+4,!0);return r===-1&&(n=~n+1,o=~o+1),o>1048575&&console.warn("This platform does not support BigInt"),r*(n+o*2**32)}};var pn=class{constructor(e,r){this._onCodecHeader=e,this._onCodecUpdate=r,this[Ve]()}[Ue](){this._isEnabled=!0}[Ve](){this._headerCache=new Map,this._codecUpdateData=new WeakMap,this._codecHeaderSent=!1,this._codecShouldUpdate=!1,this._bitrate=null,this._isEnabled=!1}[po](e,r){if(this._onCodecUpdate){this._bitrate!==e&&(this._bitrate=e,this._codecShouldUpdate=!0);let n=this._codecUpdateData.get(this._headerCache.get(this._currentHeader));this._codecShouldUpdate&&n&&this._onCodecUpdate({bitrate:e,...n},r),this._codecShouldUpdate=!1}}[G](e){let r=this._headerCache.get(e);return r&&this._updateCurrentHeader(e),r}[Pe](e,r,n){this._isEnabled&&(this._codecHeaderSent||(this._onCodecHeader({...r}),this._codecHeaderSent=!0),this._updateCurrentHeader(e),this._headerCache.set(e,r),this._codecUpdateData.set(r,n))}_updateCurrentHeader(e){this._onCodecUpdate&&e!==this._currentHeader&&(this._codecShouldUpdate=!0,this._currentHeader=e)}};var oe=new WeakMap,se=new WeakMap;var pe=class{constructor(e,r){this._codecParser=e,this._headerCache=r}*[Ci](){let e;do{if(e=yield*this.Frame[Fe](this._codecParser,this._headerCache,0),e)return e;this._codecParser[Te](1)}while(!0)}*[Mt](e){let r=yield*this[Ci](),n=se.get(r)[g];if(e||this._codecParser._flushing||(yield*this.Header[G](this._codecParser,this._headerCache,n)))return this._headerCache[Ue](),this._codecParser[Te](n),this._codecParser[St](r),r;this._codecParser[Be](`Missing ${ot} at ${n} bytes from current position.`,`Dropping current ${ot} and trying again.`),this._headerCache[Ve](),this._codecParser[Te](1)}};var Bt=class{constructor(e,r){se.set(this,{[Se]:e}),this[q]=r}};var Ae=class extends Bt{static*[Fe](e,r,n,o,i){let s=yield*e[G](n,o,i);if(s){let a=oe.get(s)[ve],c=oe.get(s)[O],l=(yield*n[B](a,i))[D](0,a);return new r(s,l,c)}else return null}constructor(e,r,n){super(e,r),this[Se]=e,this[O]=n,this[qe]=n/e[H]*1e3,this[st]=null,this[Ht]=null,this[Nt]=null,this[Ot]=null,se.get(this)[g]=r[g]}};var Pi="unsynchronizationFlag",Fi="extendedHeaderFlag",Ii="experimentalFlag",Ri="footerPresent",hn=class t{static*getID3v2Header(e,r,n){let i={},s=yield*e[B](3,n);if(s[0]!==73||s[1]!==68||s[2]!==51||(s=yield*e[B](10,n),i[xt]=`id3v2.${s[3]}.${s[4]}`,s[5]&15)||(i[Pi]=!!(s[5]&128),i[Fi]=!!(s[5]&64),i[Ii]=!!(s[5]&32),i[Ri]=!!(s[5]&16),s[6]&128||s[7]&128||s[8]&128||s[9]&128))return null;let a=s[6]<<21|s[7]<<14|s[8]<<7|s[9];return i[g]=10+a,new t(i)}constructor(e){this[xt]=e[xt],this[Pi]=e[Pi],this[Fi]=e[Fi],this[Ii]=e[Ii],this[Ri]=e[Ri],this[g]=e[g]}};var we=class{constructor(e){oe.set(this,e),this[ce]=e[ce],this[le]=null,this[E]=e[E],this[ue]=e[ue],this[H]=e[H]}};var va={0:[pr,pr,pr,pr,pr],16:[32,32,32,32,8],240:[fe,fe,fe,fe,fe]},go=(t,e,r)=>8*((t+r)%e+e)*(1<<(t+r)/e)-8*e*(e/8|0);for(let t=2;t<15;t++)va[t<<4]=[t*32,go(t,4,0),go(t,4,-1),go(t,8,4),go(t,8,0)];var vl=0,bl=1,Sl=2,Ml=3,ha=4,vo="bands ",bo=" to 31",ya={0:vo+4+bo,16:vo+8+bo,32:vo+12+bo,48:vo+16+bo},Vt="bitrateIndex",yn="v2",wo="v1",So="Intensity stereo ",Mo=", MS stereo ",_o="on",Ao="off",_l={0:So+Ao+Mo+Ao,16:So+_o+Mo+Ao,32:So+Ao+Mo+_o,48:So+_o+Mo+_o},ki={0:{[C]:W},2:{[C]:"Layer III",[Ye]:1,[Ze]:_l,[wo]:{[Vt]:Sl,[O]:1152},[yn]:{[Vt]:ha,[O]:576}},4:{[C]:"Layer II",[Ye]:1,[Ze]:ya,[O]:1152,[wo]:{[Vt]:bl},[yn]:{[Vt]:ha}},6:{[C]:"Layer I",[Ye]:4,[Ze]:ya,[O]:384,[wo]:{[Vt]:vl},[yn]:{[Vt]:Ml}}},Di="MPEG Version ",xa="ISO/IEC ",Al={0:{[C]:`${Di}2.5 (later extension of MPEG 2)`,[ge]:yn,[H]:{0:oo,4:no,8:lr,12:W}},8:{[C]:W},16:{[C]:`${Di}2 (${xa}13818-3)`,[ge]:yn,[H]:{0:ar,4:sr,8:cr,12:W}},24:{[C]:`${Di}1 (${xa}11172-3)`,[ge]:wo,[H]:{0:or,4:pt,8:ir,12:W}},length:g},wl={0:yo,1:un},Ll={0:un,1:"50/15 ms",2:W,3:"CCIT J.17"},ga={0:{[E]:2,[C]:ft},64:{[E]:2,[C]:"joint "+ft},128:{[E]:2,[C]:"dual channel"},192:{[E]:1,[C]:mt}},Ut=class t extends we{static*[G](e,r,n){let o={},i=yield*hn.getID3v2Header(e,r,n);i&&(yield*e[B](i[g],n),e[Te](i[g]));let s=yield*e[B](4,n),a=_e(s[D](0,4)),c=r[G](a);if(c)return new t(c);if(s[0]!==255||s[1]<224)return null;let l=Al[s[1]&24];if(l[C]===W)return null;let d=s[1]&6;if(ki[d][C]===W)return null;let u={...ki[d],...ki[d][l[ge]]};if(o[et]=l[C],o[ge]=u[C],o[O]=u[O],o[tt]=wl[s[1]&1],o[g]=4,o[le]=va[s[2]&240][u[Vt]],o[le]===fe||(o[H]=l[H][s[2]&12],o[H]===W)||(o[Ye]=s[2]&2&&u[Ye],o[Je]=!!(s[2]&1),o[ve]=Math.floor(125*o[le]*o[O]/o[H]+o[Ye]),!o[ve]))return null;let m=s[3]&192;if(o[ue]=ga[m][C],o[E]=ga[m][E],o[Ze]=u[Ze][s[3]&48],o[qr]=!!(s[3]&8),o[Qe]=!!(s[3]&4),o[ur]=Ll[s[3]&3],o[ur]===W)return null;o[ce]=16;{let{length:f,frameLength:h,samples:y,...p}=o;r[Pe](a,o,p)}return new t(o)}constructor(e){super(e),this[le]=e[le],this[ur]=e[ur],this[Ye]=e[Ye],this[qr]=e[qr],this[Qe]=e[Qe],this[Je]=e[Je],this[ge]=e[ge],this[Ze]=e[Ze],this[et]=e[et],this[tt]=e[tt]}};var xn=class t extends Ae{static*[Fe](e,r,n){return yield*super[Fe](Ut,t,e,r,n)}constructor(e,r,n){super(e,r,n)}};var gn=class extends pe{constructor(e,r,n){super(e,r),this.Frame=xn,this.Header=Ut,n(this[j])}get[j](){return io}*[$e](){return yield*this[Mt]()}};var zl={0:"MPEG-4",8:"MPEG-2"},El={0:"valid",2:fe,4:fe,6:fe},Cl={0:yo,1:un},Tl={0:"AAC Main",64:"AAC LC (Low Complexity)",128:"AAC SSR (Scalable Sample Rate)",192:"AAC LTP (Long Term Prediction)"},Pl={0:to,4:ro,8:sa,12:pt,16:or,20:ir,24:sr,28:ar,32:cr,36:no,40:oo,44:lr,48:aa,52:W,56:W,60:"frequency is written explicitly"},ba={0:{[E]:0,[C]:"Defined in AOT Specific Config"},64:{[E]:1,[C]:mt},128:{[E]:2,[C]:J(2,T[0][0])},192:{[E]:3,[C]:J(3,T[1][3])},256:{[E]:4,[C]:J(4,T[1][3],T[3][4])},320:{[E]:5,[C]:J(5,T[1][3],T[3][0])},384:{[E]:6,[C]:J(6,T[1][3],T[3][0],We)},448:{[E]:8,[C]:J(8,T[1][3],T[2][0],T[3][0],We)}},Gt=class t extends we{static*[G](e,r,n){let o={},i=yield*e[B](7,n),s=_e([i[0],i[1],i[2],i[3]&252|i[6]&3]),a=r[G](s);if(a)Object.assign(o,a);else{if(i[0]!==255||i[1]<240||(o[et]=zl[i[1]&8],o[ge]=El[i[1]&6],o[ge]===fe))return null;let l=i[1]&1;o[tt]=Cl[l],o[g]=l?7:9,o[so]=i[2]&192,o[je]=i[2]&60;let d=i[2]&2;if(o[Qr]=Tl[o[so]],o[H]=Pl[o[je]],o[H]===W)return null;o[Je]=!!d,o[rn]=(i[2]<<8|i[3])&448,o[ue]=ba[o[rn]][C],o[E]=ba[o[rn]][E],o[Qe]=!!(i[3]&32),o[Yr]=!!(i[3]&8),o[nn]=!!(i[3]&8),o[on]=!!(i[3]&4),o[ce]=16,o[O]=1024,o[Kr]=i[6]&3;{let{length:u,channelModeBits:m,profileBits:f,sampleRateBits:h,frameLength:y,samples:p,numberAACFrames:x,...M}=o;r[Pe](s,o,M)}}if(o[ve]=(i[3]<<11|i[4]<<3|i[5]>>5)&8191,!o[ve])return null;let c=(i[5]<<6|i[6]>>2)&2047;return o[Vr]=c===2047?"VBR":c,new t(o)}constructor(e){super(e),this[nn]=e[nn],this[on]=e[on],this[Vr]=e[Vr],this[Yr]=e[Yr],this[Qe]=e[Qe],this[Je]=e[Je],this[ge]=e[ge],this[g]=e[g],this[et]=e[et],this[Kr]=e[Kr],this[Qr]=e[Qr],this[tt]=e[tt]}get audioSpecificConfig(){let e=oe.get(this),r=e[so]+64<<5|e[je]<<5|e[rn]>>3,n=new me(2);return new At(n[Xe]).setUint16(0,r,!1),n}};var vn=class t extends Ae{static*[Fe](e,r,n){return yield*super[Fe](Gt,t,e,r,n)}constructor(e,r,n){super(e,r,n)}};var bn=class extends pe{constructor(e,r,n){super(e,r),this.Frame=vn,this.Header=Gt,n(this[j])}get[j](){return"aac"}*[$e](){return yield*this[Mt]()}};var wt=class t extends Ae{static _getFrameFooterCrc16(e){return(e[e[g]-2]<<8)+e[e[g]-1]}static[ho](e){let r=t._getFrameFooterCrc16(e),n=ma(e[D](0,-2));return r===n}constructor(e,r,n){r[ln]=n,r[Gr]=t._getFrameFooterCrc16(e),super(r,e,oe.get(r)[O])}};var Sa="get from STREAMINFO metadata block",Fl={0:"Fixed",1:"Variable"},Ma={0:W,16:192};for(let t=2;t<16;t++)Ma[t<<4]=t<6?576*2**(t-2):2**t;var Il={0:Sa,1:ro,2:ia,3:oa,4:lr,5:cr,6:ar,7:sr,8:ir,9:or,10:pt,11:to,15:fe},Rl={0:{[E]:1,[C]:mt},16:{[E]:2,[C]:J(2,T[0][0])},32:{[E]:3,[C]:J(3,T[0][1])},48:{[E]:4,[C]:J(4,T[1][0],T[3][0])},64:{[E]:5,[C]:J(5,T[1][1],T[3][0])},80:{[E]:6,[C]:J(6,T[1][1],We,T[3][0])},96:{[E]:7,[C]:J(7,T[1][1],We,T[3][4],T[2][0])},112:{[E]:8,[C]:J(8,T[1][1],We,T[3][0],T[2][0])},128:{[E]:2,[C]:`${ft} (left, diff)`},144:{[E]:2,[C]:`${ft} (diff, right)`},160:{[E]:2,[C]:`${ft} (avg, diff)`},176:W,192:W,208:W,224:W,240:W},kl={0:Sa,2:8,4:12,6:W,8:16,10:20,12:24,14:W},Lt=class t extends we{static _decodeUTF8Int(e){if(e[0]>254)return null;if(e[0]<128)return{value:e[0],length:1};let r=1;for(let s=64;s&e[0];s>>=1)r++;let n=r-1,o=0,i=0;for(;n>0;i+=6,n--){if((e[n]&192)!==128)return null;o|=(e[n]&63)<<i}return o|=(e[n]&127>>r)<<i,{value:o,length:r}}static[Ie](e,r){let n={[B]:function*(){return e}};return t[G](n,r,0).next().value}static*[G](e,r,n){let o=yield*e[B](6,n);if(o[0]!==255||!(o[1]===248||o[1]===249))return null;let i={},s=_e(o[D](0,4)),a=r[G](s);if(a)Object.assign(i,a);else{if(i[co]=o[1]&1,i[Zr]=Fl[i[co]],i[en]=o[2]&240,i[je]=o[2]&15,i[rt]=Ma[i[en]],i[rt]===W||(i[H]=Il[i[je]],i[H]===fe)||o[3]&1)return null;let l=Rl[o[3]&240];if(l===W||(i[E]=l[E],i[ue]=l[C],i[ce]=kl[o[3]&14],i[ce]===W))return null}i[g]=5,o=yield*e[B](i[g]+8,n);let c=t._decodeUTF8Int(o[D](4));if(!c||(i[co]?i[an]=c.value:i[st]=c.value,i[g]+=c[g],i[en]===96?(o[g]<i[g]&&(o=yield*e[B](i[g],n)),i[rt]=o[i[g]-1]+1,i[g]+=1):i[en]===112&&(o[g]<i[g]&&(o=yield*e[B](i[g],n)),i[rt]=(o[i[g]-1]<<8)+o[i[g]]+1,i[g]+=2),i[O]=i[rt],i[je]===12?(o[g]<i[g]&&(o=yield*e[B](i[g],n)),i[H]=o[i[g]-1]*1e3,i[g]+=1):i[je]===13?(o[g]<i[g]&&(o=yield*e[B](i[g],n)),i[H]=(o[i[g]-1]<<8)+o[i[g]],i[g]+=2):i[je]===14&&(o[g]<i[g]&&(o=yield*e[B](i[g],n)),i[H]=((o[i[g]-1]<<8)+o[i[g]])*10,i[g]+=2),o[g]<i[g]&&(o=yield*e[B](i[g],n)),i[dr]=o[i[g]-1],i[dr]!==ua(o[D](0,i[g]-1))))return null;if(!a){let{blockingStrategyBits:l,frameNumber:d,sampleNumber:u,samples:m,sampleRateBits:f,blockSizeBits:h,crc:y,length:p,...x}=i;r[Pe](s,i,x)}return new t(i)}constructor(e){super(e),this[Gr]=null,this[Zr]=e[Zr],this[rt]=e[rt],this[st]=e[st],this[an]=e[an],this[ln]=null}};var Dl=2,Hl=512*1024,Wt=class extends pe{constructor(e,r,n){super(e,r),this.Frame=wt,this.Header=Lt,n(this[j])}get[j](){return"flac"}*_getNextFrameSyncOffset(e){let r=yield*this._codecParser[B](2,0),n=r[g]-2;for(;e<n;){if(r[e]===255){let i=r[e+1];if(i===248||i===249)break;i!==255&&e++}e++}return e}*[$e](){do{let e=yield*Lt[G](this._codecParser,this._headerCache,0);if(e){let r=oe.get(e)[g]+Dl;for(;r<=Hl;){if(this._codecParser._flushing||(yield*Lt[G](this._codecParser,this._headerCache,r))){let n=yield*this._codecParser[B](r);if(this._codecParser._flushing||(n=n[D](0,r)),wt[ho](n)){let o=new wt(n,e);return this._headerCache[Ue](),this._codecParser[Te](r),this._codecParser[St](o),o}}r=yield*this._getNextFrameSyncOffset(r+1)}this._codecParser[Be](`Unable to sync FLAC frame after searching ${r} bytes.`),this._codecParser[Te](r)}else this._codecParser[Te](yield*this._getNextFrameSyncOffset(1))}while(!0)}[_t](e){return e[re]===0?(this._headerCache[Ue](),this._streamInfo=e[q][D](13)):e[re]===1||(e[de]=se.get(e)[Ce].map(r=>{let n=Lt[Ie](r,this._headerCache);if(n)return new wt(r,n,this._streamInfo);this._codecParser[Be]("Failed to parse Ogg FLAC frame","Skipping invalid FLAC frame")}).filter(r=>!!r)),e}};var Xt=class t{static*[G](e,r,n){let o={},i=yield*e[B](28,n);if(i[0]!==79||i[1]!==103||i[2]!==103||i[3]!==83||(o[zi]=i[4],i[5]&248))return null;o[Me]=!!(i[5]&4),o[yt]=!!(i[5]&2),o[ht]=!!(i[5]&1);let a=new At(me.from(i[D](0,28))[Xe]);o[Ne]=pa(a,6),o[Ke]=a.getInt32(14,!0),o[re]=a.getInt32(18,!0),o[Dt]=a.getInt32(22,!0);let c=i[26];o[g]=c+27,i=yield*e[B](o[g],n),o[ve]=0,o[bt]=[],o[fr]=me.from(i[D](27,o[g]));for(let l=0,d=0;l<c;l++){let u=o[fr][l];o[ve]+=u,d+=u,(u!==255||l===c-1)&&(o[bt].push(d),d=0)}return new t(o)}constructor(e){oe.set(this,e),this[Ne]=e[Ne],this[ht]=e[ht],this[yt]=e[yt],this[Me]=e[Me],this[bt]=e[bt],this[re]=e[re],this[Dt]=e[Dt],this[Ke]=e[Ke]}};var Sn=class t extends Bt{static*[Fe](e,r,n){let o=yield*Xt[G](e,r,n);if(o){let i=oe.get(o)[ve],s=oe.get(o)[g],a=s+i,c=(yield*e[B](a,0))[D](0,a),l=c[D](s,a);return new t(o,l,c)}else return null}constructor(e,r,n){super(e,r),se.get(this)[g]=n[g],this[de]=[],this[Ai]=n,this[Ne]=e[Ne],this[Wr]=e[Dt],this[qe]=0,this[ht]=e[ht],this[yt]=e[yt],this[Me]=e[Me],this[re]=e[re],this[O]=0,this[Ke]=e[Ke]}};var hr=class extends Ae{constructor(e,r,n){super(r,e,n)}};var _a={0:Hr.slice(0,2),1:Hr},Re="SILK-only",ae="CELT-only",Lo="Hybrid",zt="narrowband",zo="medium-band",Et="wideband",yr="super-wideband",xr="fullband",Ol={0:{[R]:Re,[k]:zt,[I]:10},8:{[R]:Re,[k]:zt,[I]:20},16:{[R]:Re,[k]:zt,[I]:40},24:{[R]:Re,[k]:zt,[I]:60},32:{[R]:Re,[k]:zo,[I]:10},40:{[R]:Re,[k]:zo,[I]:20},48:{[R]:Re,[k]:zo,[I]:40},56:{[R]:Re,[k]:zo,[I]:60},64:{[R]:Re,[k]:Et,[I]:10},72:{[R]:Re,[k]:Et,[I]:20},80:{[R]:Re,[k]:Et,[I]:40},88:{[R]:Re,[k]:Et,[I]:60},96:{[R]:Lo,[k]:yr,[I]:10},104:{[R]:Lo,[k]:yr,[I]:20},112:{[R]:Lo,[k]:xr,[I]:10},120:{[R]:Lo,[k]:xr,[I]:20},128:{[R]:ae,[k]:zt,[I]:2.5},136:{[R]:ae,[k]:zt,[I]:5},144:{[R]:ae,[k]:zt,[I]:10},152:{[R]:ae,[k]:zt,[I]:20},160:{[R]:ae,[k]:Et,[I]:2.5},168:{[R]:ae,[k]:Et,[I]:5},176:{[R]:ae,[k]:Et,[I]:10},184:{[R]:ae,[k]:Et,[I]:20},192:{[R]:ae,[k]:yr,[I]:2.5},200:{[R]:ae,[k]:yr,[I]:5},208:{[R]:ae,[k]:yr,[I]:10},216:{[R]:ae,[k]:yr,[I]:20},224:{[R]:ae,[k]:xr,[I]:2.5},232:{[R]:ae,[k]:xr,[I]:5},240:{[R]:ae,[k]:xr,[I]:10},248:{[R]:ae,[k]:xr,[I]:20}},gr=class t extends we{static[Ie](e,r,n){let o={};if(o[E]=e[9],o[nt]=e[18],o[g]=o[nt]!==0?21+o[E]:19,e[g]<o[g])throw new Error("Out of data while inside an Ogg Page");let i=r[0]&3,s=i===3?2:1,a=_e(e[D](0,o[g]))+_e(r[D](0,s)),c=n[G](a);if(c)return new t(c);if(a.substr(0,8)!=="OpusHead"||e[8]!==1)return null;o[q]=me.from(e[D](0,o[g]));let l=new At(o[q][Xe]);if(o[ce]=16,o[Rt]=l.getUint16(10,!0),o[sn]=l.getUint32(12,!0),o[H]=pt,o[$r]=l.getInt16(16,!0),o[nt]in _a&&(o[ue]=_a[o[nt]][o[E]-1],!o[ue]))return null;o[nt]!==0&&(o[cn]=e[19],o[Ur]=e[20],o[tn]=[...e[D](21,o[E]+21)]);let d=Ol[248&r[0]];switch(o[R]=d[R],o[k]=d[k],o[I]=d[I],i){case 0:o[it]=1;break;case 1:case 2:o[it]=2;break;case 3:o[jr]=!!(128&r[1]),o[Xr]=!!(64&r[1]),o[it]=63&r[1];break;default:return null}{let{length:u,data:m,channelMappingFamily:f,...h}=o;n[Pe](a,o,h)}return new t(o)}constructor(e){super(e),this[q]=e[q],this[k]=e[k],this[nt]=e[nt],this[tn]=e[tn],this[Ur]=e[Ur],this[it]=e[it],this[I]=e[I],this[Xr]=e[Xr],this[sn]=e[sn],this[jr]=e[jr],this[R]=e[R],this[$r]=e[$r],this[Rt]=e[Rt],this[cn]=e[cn]}};var Mn=class extends pe{constructor(e,r,n){super(e,r),this.Frame=hr,this.Header=gr,n(this[j]),this._identificationHeader=null,this._preSkipRemaining=null}get[j](){return"opus"}[_t](e){return e[re]===0?(this._headerCache[Ue](),this._identificationHeader=e[q]):e[re]===1||(e[de]=se.get(e)[Ce].map(r=>{let n=gr[Ie](this._identificationHeader,r,this._headerCache);if(n){this._preSkipRemaining===null&&(this._preSkipRemaining=n[Rt]);let o=n[I]*n[it]/1e3*n[H];return this._preSkipRemaining>0&&(this._preSkipRemaining-=o,o=this._preSkipRemaining<0?-this._preSkipRemaining:0),new hr(r,n,o)}this._codecParser[fo]("Failed to parse Ogg Opus Header","Not a valid Ogg Opus file")})),e}};var vr=class extends Ae{constructor(e,r,n){super(r,e,n)}};var Hi={};for(let t=0;t<8;t++)Hi[t+6]=2**(6+t);var _n=class t extends we{static[Ie](e,r,n,o){if(e[g]<30)throw new Error("Out of data while inside an Ogg Page");let i=_e(e[D](0,30)),s=r[G](i);if(s)return new t(s);let a={[g]:30};if(i.substr(0,7)!=="vorbis")return null;a[q]=me.from(e[D](0,30));let c=new At(a[q][Xe]);if(a[xt]=c.getUint32(7,!0),a[xt]!==0||(a[E]=e[11],a[ue]=Hr[a[E]-1]||"application defined",a[H]=c.getUint32(12,!0),a[Or]=c.getInt32(16,!0),a[Br]=c.getInt32(20,!0),a[Nr]=c.getInt32(24,!0),a[vt]=Hi[(e[28]&240)>>4],a[gt]=Hi[e[28]&15],a[gt]>a[vt])||e[29]!==1)return null;a[ce]=32,a[mr]=o,a[Jr]=n;{let{length:l,data:d,version:u,vorbisSetup:m,vorbisComments:f,...h}=a;r[Pe](i,a,h)}return new t(a)}constructor(e){super(e),this[Or]=e[Or],this[Nr]=e[Nr],this[Br]=e[Br],this[gt]=e[gt],this[vt]=e[vt],this[q]=e[q],this[Jr]=e[Jr],this[mr]=e[mr]}};var An=class extends pe{constructor(e,r,n){super(e,r),this.Frame=vr,n(this[j]),this._identificationHeader=null,this._setupComplete=!1,this._prevBlockSize=null}get[j](){return kt}[_t](e){e[de]=[];for(let r of se.get(e)[Ce])if(r[0]===1)this._headerCache[Ue](),this._identificationHeader=e[q],this._setupComplete=!1;else if(r[0]===3)this._vorbisComments=r;else if(r[0]===5)this._vorbisSetup=r,this._mode=this._parseSetupHeader(r),this._setupComplete=!0;else if(this._setupComplete){let n=_n[Ie](this._identificationHeader,this._headerCache,this._vorbisComments,this._vorbisSetup);n?e[de].push(new vr(r,n,this._getSamples(r,n))):this._codecParser[logError]("Failed to parse Ogg Vorbis Header","Not a valid Ogg Vorbis file")}return e}_getSamples(e,r){let o=this._mode.blockFlags[e[0]>>1&this._mode.mask]?r[vt]:r[gt],i=this._prevBlockSize===null?0:(this._prevBlockSize+o)/4;return this._prevBlockSize=o,i}_parseSetupHeader(e){let r=new xo(e),n={count:0,blockFlags:[]};for(;(r.read(1)&1)!==1;);let o;for(;n.count<64&&r.position>0;){mn(r.read(8));let i=0;for(;r.read(8)===0&&i++<3;);if(i===4)o=r.read(7),n.blockFlags.unshift(o&1),r.position+=6,n.count++;else{((mn(o)&126)>>1)+1!==n.count&&this._codecParser[Be]("vorbis derived mode count did not match actual mode count");break}}return n.mask=(1<<Math.log2(n.count))-1,n}};var Oi=class{constructor(e,r,n){this._codecParser=e,this._headerCache=r,this._onCodec=n,this._continuedPacket=new me,this._codec=null,this._isSupported=null,this._previousAbsoluteGranulePosition=null}get[j](){return this._codec||""}_updateCodec(e,r){this._codec!==e&&(this._headerCache[Ve](),this._parser=new r(this._codecParser,this._headerCache,this._onCodec),this._codec=e)}_checkCodecSupport({data:e}){let r=_e(e[D](0,8));switch(r){case"fishead\0":return!1;case"OpusHead":return this._updateCodec("opus",Mn),!0;case(/^\x7fFLAC/.test(r)&&r):return this._updateCodec("flac",Wt),!0;case(/^\x01vorbis/.test(r)&&r):return this._updateCodec(kt,An),!0;default:return!1}}_checkPageSequenceNumber(e){e[re]!==this._pageSequenceNumber+1&&this._pageSequenceNumber>1&&e[re]>1&&this._codecParser[Be]("Unexpected gap in Ogg Page Sequence Number.",`Expected: ${this._pageSequenceNumber+1}, Got: ${e[re]}`),this._pageSequenceNumber=e[re]}_parsePage(e){this._isSupported===null&&(this._pageSequenceNumber=e[re],this._isSupported=this._checkCodecSupport(e)),this._checkPageSequenceNumber(e);let r=se.get(e),n=oe.get(r[Se]),o=0;if(r[Ce]=n[bt].map(i=>e[q][D](o,o+=i)),this._continuedPacket[g]&&(r[Ce][0]=fn(this._continuedPacket,r[Ce][0]),this._continuedPacket=new me),n[fr][n[fr][g]-1]===255&&(this._continuedPacket=fn(this._continuedPacket,r[Ce].pop())),this._previousAbsoluteGranulePosition!==null&&(e[O]=Number(e[Ne]-this._previousAbsoluteGranulePosition)),this._previousAbsoluteGranulePosition=e[Ne],this._isSupported){let i=this._parser[_t](e);return this._codecParser[St](i),i}else return e}},wn=class extends pe{constructor(e,r,n){super(e,r),this._onCodec=n,this.Frame=Sn,this.Header=Xt,this._streams=new Map,this._currentSerialNumber=null}get[j](){let e=this._streams.get(this._currentSerialNumber);return e?e.codec:""}*[$e](){let e=yield*this[Mt](!0);this._currentSerialNumber=e[Ke];let r=this._streams.get(this._currentSerialNumber);return r||(r=new Oi(this._codecParser,this._headerCache,this._onCodec),this._streams.set(this._currentSerialNumber,r)),e[Me]&&this._streams.delete(this._currentSerialNumber),r._parsePage(e)}};var Ni=()=>{},Ln=class{constructor(e,{onCodec:r,onCodecHeader:n,onCodecUpdate:o,enableLogging:i=!1,enableFrameCRC32:s=!0}={}){this._inputMimeType=e,this._onCodec=r||Ni,this._onCodecHeader=n||Ni,this._onCodecUpdate=o,this._enableLogging=i,this._crc32=s?fa:Ni,this[Ve]()}get[j](){return this._parser?this._parser[j]:""}[Ve](){this._headerCache=new pn(this._onCodecHeader,this._onCodecUpdate),this._generator=this._getGenerator(),this._generator.next()}*flush(){this._flushing=!0;for(let e=this._generator.next();e.value;e=this._generator.next())yield e.value;this._flushing=!1,this[Ve]()}*parseChunk(e){for(let r=this._generator.next(e);r.value;r=this._generator.next())yield r.value}parseAll(e){return[...this.parseChunk(e),...this.flush()]}*_getGenerator(){if(this._inputMimeType.match(/aac/))this._parser=new bn(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/mpeg/))this._parser=new gn(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/flac/))this._parser=new Wt(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/ogg/))this._parser=new wn(this,this._headerCache,this._onCodec);else throw new Error(`Unsupported Codec ${mimeType}`);for(this._frameNumber=0,this._currentReadPosition=0,this._totalBytesIn=0,this._totalBytesOut=0,this._totalSamples=0,this._sampleRate=void 0,this._rawData=new Uint8Array(0);;){let e=yield*this._parser[$e]();e&&(yield e)}}*[B](e=0,r=0){let n;for(;this._rawData[g]<=e+r;){if(n=yield,this._flushing)return this._rawData[D](r);n&&(this._totalBytesIn+=n[g],this._rawData=fn(this._rawData,n))}return this._rawData[D](r)}[Te](e){this._currentReadPosition+=e,this._rawData=this._rawData[D](e)}[dn](e){this._sampleRate=e[Se][H],e[Se][le]=e[qe]>0?Math.round(e[q][g]/e[qe])*8:0,e[st]=this._frameNumber++,e[Ht]=this._totalBytesOut,e[Nt]=this._totalSamples,e[Ot]=this._totalSamples/this._sampleRate*1e3,e[Wr]=this._crc32(e[q]),this._headerCache[po](e[Se][le],e[Ot]),this._totalBytesOut+=e[q][g],this._totalSamples+=e[O]}[St](e){if(e[de]){if(e[Me]){let r=e[O];e[de].forEach(n=>{let o=n[O];r<o&&(n[O]=r>0?r:0,n[qe]=n[O]/n[Se][H]*1e3),r-=o,this[dn](n)})}else e[O]=0,e[de].forEach(r=>{e[O]+=r[O],this[dn](r)});e[qe]=e[O]/this._sampleRate*1e3||0,e[Nt]=this._totalSamples,e[Ot]=this._totalSamples/this._sampleRate*1e3||0,e[Ht]=this._totalBytesOut}else this[dn](e)}_log(e,r){if(this._enableLogging){let n=[`${j}: ${this[j]}`,`inputMimeType: ${this._inputMimeType}`,`readPosition: ${this._currentReadPosition}`,`totalBytesIn: ${this._totalBytesIn}`,`${Ht}: ${this._totalBytesOut}`],o=Math.max(...n.map(i=>i[g]));r.push(`--stats--${"-".repeat(o-9)}`,...n,"-".repeat(o)),e("codec-parser",r.reduce((i,s)=>i+`
4
- `+s,""))}}[Be](...e){this._log(console.warn,e)}[fo](...e){this._log(console.error,e)}};var Aa=Ln;var Eo=de;var Co=q;var wa=Se;var La=Me;var za=mr;var Ea=Nt;function at(t){var e=e;function r(){}e={};function n(z){throw z}var o,i,s,a,c,l,d,u,m,f,h;function y(){var z=h.buffer;o=new Int8Array(z),i=new Int16Array(z),a=new Uint8Array(z),c=new Uint16Array(z),s=new Int32Array(z),l=new Uint32Array(z),d=new Float32Array(z),u=new Float64Array(z),m=new BigInt64Array(z),f=new BigUint64Array(z)}for(var p=z=>{for(var Le,Er,Kt=0,Dn=0,Hn=z.length,On=new Uint8Array((Hn*3>>2)-(z[Hn-2]=="=")-(z[Hn-1]=="="));Kt<Hn;Kt+=4,Dn+=3)Le=K[z.charCodeAt(Kt+1)],Er=K[z.charCodeAt(Kt+2)],On[Dn]=K[z.charCodeAt(Kt)]<<2|Le>>4,On[Dn+1]=Le<<4|Er>>2,On[Dn+2]=Er<<6|K[z.charCodeAt(Kt+3)];return On},x=()=>n(""),M=()=>{},v={},S=z=>z(),b=()=>performance.now(),_=(z,Le)=>{if(v[z]&&(clearTimeout(v[z].id),delete v[z]),!Le)return 0;var Er=setTimeout(()=>{delete v[z],S(()=>Ms(z,b()))},Le);return v[z]={id:Er,timeout_ms:Le},0},w=Math.atan,L=Math.cos,P=Math.exp,A=Math.log,N=Math.pow,U=Math.sin,V=z=>{var Le=a.length;return z>>>=0,!1},F=z=>{throw`exit(${z})`},K=new Uint8Array(123),xe=25;xe>=0;--xe)K[48+xe]=52+xe,K[65+xe]=xe,K[97+xe]=26+xe;K[43]=62,K[47]=63;var Ct={e:x,d:M,f:_,b:w,a:L,i:P,h:A,g:N,c:U,k:V,j:F};function kn(z){zr=z.n,ys=z.o,xs=z.p,gs=z.q,vs=z.r,bs=z.s,Ss=z.t,Ms=z.v}var zr,ys,xs,gs,vs,bs,Ss,Ms;function bc(z){z.m()}at.wasm||Object.defineProperty(at,"wasm",{get:()=>String.raw`dynEncode012091253f87dì%nä= 4&¿nÝØä‘ÂLÚªã9ÚØ[äº\ ¼¡³R=}L]ŸÈÿ2 ÿù¶J1jj¡é,zäV|i¸Qk¹‡= 
3
+ `,"Visit https://github.com/eshaz/simple-yenc for more information"),Error(x)}}return y};function $(){let t=Uint8Array,e=Float32Array;$.modules||Object.defineProperties($,{modules:{value:new WeakMap},setModule:{value(r,n){$.modules.set(r,Promise.resolve(n))}},getModule:{value(r,n){let o=$.modules.get(r);return o||(n?o=WebAssembly.compile(_i(n)):(n=r.wasm,o=$.inflateDynEncodeString(n).then(i=>WebAssembly.compile(i))),$.modules.set(r,o)),o}},concatFloat32:{value(r,n){let o=new e(n),i=0,s=0;for(;i<r.length;)o.set(r[i],s),s+=r[i++].length;return o}},getDecodedAudio:{value:(r,n,o,i,s)=>({errors:r,channelData:n,samplesDecoded:o,sampleRate:i,bitDepth:s})},getDecodedAudioMultiChannel:{value(r,n,o,i,s,a){let c=[],l,d;for(l=0;l<o;l++){let u=[];for(d=0;d<n.length;)u.push(n[d++][l]||[]);c.push($.concatFloat32(u,i))}return $.getDecodedAudio(r,c,i,s,a)}},inflateDynEncodeString:{value(r){return r=_i(r),new Promise(n=>{let o=String.raw`dynEncode012804c7886d(‰›•)((()>+ˆ*§§)§ˆ,§§§§)§ˆ+§§§)§+.-()(*)-+)(ˆ.7*§)i¸¸,3§(i¸¸,3/G+.••—š¡*(,˜ŽŽ(,3‡‡‰˜‡Š‰›+)2å:-œ),§H(P*DI*H(P*@I++hH)H*r,hH(H(P*<J,i)’^*<H,H(P*4’U((I-H(H*i0’J,^*DH+H-H*œšI+H,I*4)33H(H*H)“^*DH(H+H)^*@H+i§H)œi§›™3æ*).§K(iH“I/+§H,iHn,§H+i(H+i(rCJ0I,H*I-+hH,,hH(H-V)(i)œ’J.H.W)(i)’c)(H,i)“I,H-i*’I-4)33i(I.*hH(V)(H+n5(H(i*’I-i(I,i)I.+hH,i*’J+iHn,hi(I-i*I,+hH,H/’H-c)(H,iFn,hi(I,+hH,H0n5-H*V)(J(,hH/H(i)œ’J(H(V)(J(i)’c)(H)H(i)œ’H,c)(3H*i*’I*H,i)’I,4(3(-H(H,’W)(H-’I-H,i*’I,4)3(3(3H,H-’I1H+I,H.i)œH1V)(“J.i(v5(33H.-H(H,’i(c)(H,i*’I,4)333–)-§i*I*+§H*iHn,hiž73H,H(i)8(H+šJ+H)P*(H*’V)(J-“r,§H)P*,H.i)œ’H+H,“i)œ’V)(-H*i*’I*H+i)œI+H-H.’I.H,H-’i)œI,4)333Ã+)-§iø7i(^*(iü7I,*h+hH+iDn,h*hilI+i)I,+hH+,hH+iô7’H,c)(i)H+i´8’W)(œH,’I,H+i*’I+4)-+hH(H)8*J-i(p5.*h*h*hH-i')u,hH(P*(J+,hH(P*0J,H(P*,n50H+H,’H-b((3H(P*0i)’I.4)3H-i¨*n5*H-iÅ*s,hiž73H-i)œJ+V)&+I,H(H+V)æ,8(I.H(H*8*J-i(p51H-i)œJ+i¸7’V)(H(H+iø7’V)(8(’J/H(P*0J+s,hi73H+H,H.’J,’I.H(P*(m5(H.H(P*,s5.+hH,m5*H(P*(J.H+’H.H+H/“’U((b((H(H(P*0i)’J+^*0H,i)“I,4(3(3H(H.^*03H-i¨*o5)33i(73(3(3-H,H+i)žc)(H,i*’I,H+i)’I+4)33i)I-3H-3!2)0§K(i2“J,L(H,H(^*(H,H*^*4H,i(^*0H,i(^*DH,j(_*<H,H)P*(^*,H,H+P*(^*8*h*h+hH,i)8(I3i§I**h*h*h*h*h*h*hH,i*8(6+(),03H,j(_*@i*I-H,P*<J.i,’J(H,P*8J/s50H,H.i+’J0^*<i¦I*H.H,P*4J1’J.U(*H.U((J2›i')o5/H.U()I.H,H(^*<H0H1’U((H.i0œJ.i§›i0ži')™o5/H/H.H2šJ*H(’J.q50H,P*0J/H*’I-H,P*(J0,hH,P*,H-q,hi)I-423+hH*m5+H/H0’H(H1’U((b((H/i)’I/H(i)’I(H*i)“I*4(3(3H,H.^*<H,H-^*04*3iØ1U((5+i(I(i¨7i1^*(i$6iè1^*(i°7iè6^*(i¬7iÈ6^*(+hH(iÈ*n,hiÈ*I(+hH(i¨,n,hi¨,I(+hH(iØ,n,hiØ,I(+hH(iè,o,hH,i-’H(’i0c)(H(i*’I(4)33iè1i1H,i-’iÈ*8)Bi(I(+hH(ido,hH,i-’H(’i-c)(H(i*’I(4)33iÈ6iè6H,i-’iF8)BiØ1i)b((41-H,i-’H(’i/c)(H(i*’I(4)3(3(-H,i-’H(’i1c)(H(i*’I(4)3(3(-H,i-’H(’i0c)(H(i*’I(4)3(3(3H,H/^*0H,H(^*<3i(I*4*3H,H,i¸)’^*TH,H,iø-’^*PH,H,iX’^*LH,H,i(’^*HH,i-8(I(H,i-8(I-i¥I*H,i,8(I.H(iErH-iErš5)H(i©*’I1H-i)’I0i(i;H.i,’J(i(H(i(rCJ(“J*H*i;sCI*i¨1I-H(I/+hH/,hH,i-’H-V)(i)œ’H,i+8(c)(H/i)“I/H-i*’I-H*i)’I*4)-H(i)œi¨1’I/+hH(H*o,hH,i-’H/V)(i)œ’i(c)(H/i*’I/H(i)’I(4)33i¤I*H,iø-’H,i¸)’H,i-’i;8)5+H0H1’I2i(I-+hH-H2p,hH,H,iP’8*J*i(p5-H*i7u,hH,i-’H-i)œ’H*c)(H-i)’I-4*3i(I/i+I.i+I(*h*h*hH*i8“6*(*)3H-m,hi£I*403H-i)œH,’W)-I/i*I(4)3i3I.i/I(3H2H,H(8(H.’J(H-’J.p,hi¢I*4.3H,i-’H-i)œ’I*+hH(,hH*H/c)(H*i*’I*H(i)“I(4)-H.I-4+3(3(33H,W)1m,hiŸI*4,3H,iø-’H,i¸)’H,i-’H18)J(,hi¡I*H(i(p5,H1H,V)ú-H,V)ø-’o5,3H,i(’H,iX’H,i-’H1i)œ’H08)J(,hi I*H(i(p5,H0H,V)šH,V)˜’o5,3H,H,iP’H,iH’8+I*4+3(3(3H,i$6i¬78+I*3H*H3šm5(3i)I-H*i(r5)3H)H,P*0^*(H+H,P*<^*(H*I-3H,i2’L(H-33Á)+(i¨03b+(,(-(.(/(0(1(2(3(5(7(9(;(?(C(G(K(S([(c(k({(‹(›(«(Ë(ë( (*)(iø03O)()()()(*(*(*(*(+(+(+(+(,(,(,(,(-(-(-(-(i¨13M8(9(:(((0(/(1(.(2(-(3(,(4(+(5(*(6()(7(T7œ‰šœ‡Ž‰œš›*S7•œ‰Š”U”—Љ”›S0›‘–U œ`;$.getModule($,o).then(i=>WebAssembly.instantiate(i,{})).then(({exports:i})=>{let s=new Map(Object.entries(i)),a=s.get("puff"),c=s.get("memory").buffer,l=new t(c),d=new DataView(c),u=s.get("__heap_base"),m=r.length,f=u;u+=4,d.setInt32(f,m,!0);let h=u;u+=m,l.set(r,h);let y=u;u+=4,d.setInt32(y,l.byteLength-u,!0),a(u,y,h,f),n(l.slice(u,u+d.getInt32(y,!0)))})})}}}),Object.defineProperty(this,"wasm",{enumerable:!0,get:()=>this._wasm}),this.getOutputChannels=(r,n,o)=>{let i=[],s=0;for(;s<n;)i.push(r.slice(s*o,s++*o+o));return i},this.allocateTypedArray=(r,n,o=!0)=>{let i=this._wasm.malloc(n.BYTES_PER_ELEMENT*r);return o&&this._pointers.add(i),{ptr:i,len:r,buf:new n(this._wasm.HEAP,i,r)}},this.free=()=>{this._pointers.forEach(r=>{this._wasm.free(r)}),this._pointers.clear()},this.codeToString=r=>{let n=[],o=new Uint8Array(this._wasm.HEAP);for(let i=o[r];i!==0;i=o[++r])n.push(i);return String.fromCharCode.apply(null,n)},this.addError=(r,n,o,i,s,a)=>{r.push({message:n,frameLength:o,frameNumber:i,inputBytes:s,outputSamples:a})},this.instantiate=(r,n)=>(n&&$.setModule(r,n),this._wasm=new r($).instantiate(),this._pointers=new Set,this._wasm.ready.then(()=>this))}var ra=Ec(ta(),1);var yl=()=>globalThis.Worker||ra.default,nr=class extends yl(){constructor(e,r,n,o){$.modules||new $;let i=$.modules.get(n);if(!i){let s="text/javascript",a,c=`'use strict';(${((l,d,u)=>{let m,f,h=new Promise(y=>{f=y});self.onmessage=({data:{id:y,command:p,data:x}})=>{let M=h,v={id:y},S;p==="init"?(Object.defineProperties(l,{WASMAudioDecoderCommon:{value:d},EmscriptenWASM:{value:u},module:{value:x.module},isWebWorker:{value:!0}}),m=new l(x.options),f()):p==="free"?m.free():p==="ready"?M=M.then(()=>m.ready):p==="reset"?M=M.then(()=>m.reset()):(Object.assign(v,m[p](Array.isArray(x)?x.map(b=>new Uint8Array(b)):new Uint8Array(x))),S=v.channelData?v.channelData.map(b=>b.buffer):[]),M.then(()=>self.postMessage(v,S))}}).toString()})(${n}, ${$}, ${o})`;try{a=typeof process.versions.node<"u"}catch{}i=a?`data:${s};base64,${Buffer.from(c).toString("base64")}`:URL.createObjectURL(new Blob([c],{type:s})),$.modules.set(n,i)}super(i,{name:r}),this._id=Number.MIN_SAFE_INTEGER,this._enqueuedOperations=new Map,this.onmessage=({data:s})=>{let{id:a,...c}=s;this._enqueuedOperations.get(a)(c),this._enqueuedOperations.delete(a)},new o($).getModule().then(s=>{this.postToDecoder("init",{module:s,options:e})})}async postToDecoder(e,r){return new Promise(n=>{this.postMessage({command:e,id:this._id,data:r}),this._enqueuedOperations.set(this._id++,n)})}get ready(){return this.postToDecoder("ready")}async free(){await this.postToDecoder("free").finally(()=>{this.terminate()})}async reset(){await this.postToDecoder("reset")}};var eo=(t,e)=>{Object.defineProperty(t,"name",{value:e})};var Q=Symbol,na=", ",T=(()=>{let t="front",e="side",r="rear",n="left",o="center",i="right";return["",t+" ",e+" ",r+" "].map(s=>[[n,i],[n,i,o],[n,o,i],[o,n,i],[o]].flatMap(a=>a.map(c=>s+c).join(na)))})(),We="LFE",mt="monophonic (mono)",ft="stereo",Dr="surround",J=(t,...e)=>`${[mt,ft,`linear ${Dr}`,"quadraphonic",`5.0 ${Dr}`,`5.1 ${Dr}`,`6.1 ${Dr}`,`7.1 ${Dr}`][t-1]} (${e.join(na)})`,Hr=[mt,J(2,T[0][0]),J(3,T[0][2]),J(4,T[1][0],T[3][0]),J(5,T[1][2],T[3][0]),J(6,T[1][2],T[3][0],We),J(7,T[1][2],T[2][0],T[3][4],We),J(8,T[1][2],T[2][0],T[3][0],We)],oa=192e3,ia=176400,to=96e3,ro=88200,sa=64e3,pt=48e3,or=44100,ir=32e3,sr=24e3,ar=22050,cr=16e3,no=12e3,oo=11025,lr=8e3,aa=7350,Ne="absoluteGranulePosition",k="bandwidth",le="bitDepth",de="bitrate",Or=de+"Maximum",Nr=de+"Minimum",Br=de+"Nominal",Xe="buffer",Vr=Xe+"Fullness",j="codec",ue=j+"Frames",Ur="coupledStreamCount",dr="crc",Gr=dr+"16",Wr=dr+"32",q="data",C="description",qe="duration",ur="emphasis",Xr="hasOpusPadding",Me="header",ht="isContinuedPacket",qr="isCopyrighted",yt="isFirstPage",Yr="isHome",_e="isLastPage",Qe="isOriginal",Je="isPrivate",jr="isVbr",ve="layer",g="length",R="mode",Ze=R+"Extension",io="mpeg",et=io+"Version",Kr="numberAACFrames",$r="outputGain",Rt="preSkip",Qr="profile",so=Q(),tt="protection",Ai="rawData",Te="segments",D="subarray",xt="version",kt="vorbis",Jr=kt+"Comments",mr=kt+"Setup",ao="block",Zr=ao+"ingStrategy",co=Q(),rt=ao+"Size",gt=ao+"size0",vt=ao+"size1",en=Q(),lo="channel",nt=lo+"MappingFamily",tn=lo+"MappingTable",me=lo+"Mode",rn=Q(),E=lo+"s",ca="copyright",nn=ca+"Id",on=ca+"IdStart",ot="frame",it=ot+"Count",be=ot+"Length",uo="Number",st=ot+uo,Ye=ot+"Padding",I=ot+"Size",la="Rate",sn="inputSample"+la,wi="page",Dt=wi+"Checksum",fr=Q(),bt=wi+"SegmentTable",re=wi+"Sequence"+uo,Li="sample",an=Li+uo,H=Li+la,je=Q(),O=Li+"s",mo="stream",cn=mo+"Count",ln=mo+"Info",Ke=mo+"Serial"+uo,zi=mo+"StructureVersion",Ei="total",Ht=Ei+"BytesOut",Ot=Ei+"Duration",Nt=Ei+"Samples",B=Q(),Pe=Q(),dn=Q(),St=Q(),Be=Q(),fo=Q(),Ci=Q(),Mt=Q(),G=Q(),Fe=Q(),Ie=Q(),$e=Q(),_t=Q(),po=Q(),Ve=Q(),Ue=Q(),Re=Q(),ho=Q(),fe=Uint8Array,At=DataView,W="reserved",pe="bad",pr="free",un="none",yo="16bit CRC";var Ti=(t,e,r)=>{for(let n=0;n<t[g];n++){let o=e(n);for(let i=8;i>0;i--)o=r(o);t[n]=o}return t},gl=Ti(new fe(256),t=>t,t=>t&128?7^t<<1:t<<1),Z=[Ti(new Uint16Array(256),t=>t<<8,t=>t<<1^(t&32768?32773:0))],ee=[Ti(new Uint32Array(256),t=>t,t=>t>>>1^(t&1)*3988292384)];for(let t=0;t<15;t++){Z.push(new Uint16Array(256)),ee.push(new Uint32Array(256));for(let e=0;e<=255;e++)Z[t+1][e]=Z[0][Z[t][e]>>>8]^Z[t][e]<<8,ee[t+1][e]=ee[t][e]>>>8^ee[0][ee[t][e]&255]}var ua=t=>{let e=0,r=t[g];for(let n=0;n!==r;n++)e=gl[e^t[n]];return e},ma=t=>{let e=t[g],r=e-16,n=0,o=0;for(;o<=r;)n^=t[o++]<<8|t[o++],n=Z[15][n>>8]^Z[14][n&255]^Z[13][t[o++]]^Z[12][t[o++]]^Z[11][t[o++]]^Z[10][t[o++]]^Z[9][t[o++]]^Z[8][t[o++]]^Z[7][t[o++]]^Z[6][t[o++]]^Z[5][t[o++]]^Z[4][t[o++]]^Z[3][t[o++]]^Z[2][t[o++]]^Z[1][t[o++]]^Z[0][t[o++]];for(;o!==e;)n=(n&255)<<8^Z[0][n>>8^t[o++]];return n},fa=t=>{let e=t[g],r=e-16,n=0,o=0;for(;o<=r;)n=ee[15][(t[o++]^n)&255]^ee[14][(t[o++]^n>>>8)&255]^ee[13][(t[o++]^n>>>16)&255]^ee[12][t[o++]^n>>>24]^ee[11][t[o++]]^ee[10][t[o++]]^ee[9][t[o++]]^ee[8][t[o++]]^ee[7][t[o++]]^ee[6][t[o++]]^ee[5][t[o++]]^ee[4][t[o++]]^ee[3][t[o++]]^ee[2][t[o++]]^ee[1][t[o++]]^ee[0][t[o++]];for(;o!==e;)n=ee[0][(n^t[o++])&255]^n>>>8;return n^-1},fn=(...t)=>{let e=new fe(t.reduce((r,n)=>r+n[g],0));return t.reduce((r,n)=>(e.set(n,r),r+n[g]),0),e},Ae=t=>String.fromCharCode(...t),da=[0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15],mn=t=>da[t&15]<<4|da[t>>4],xo=class{constructor(e){this._data=e,this._pos=e[g]*8}set position(e){this._pos=e}get position(){return this._pos}read(e){let r=Math.floor(this._pos/8),n=this._pos%8;return this._pos-=e,(mn(this._data[r-1])<<8)+mn(this._data[r])>>7-n&255}},pa=(t,e)=>{try{return t.getBigInt64(e,!0)}catch{let r=t.getUint8(e+7)&128?-1:1,n=t.getUint32(e,!0),o=t.getUint32(e+4,!0);return r===-1&&(n=~n+1,o=~o+1),o>1048575&&console.warn("This platform does not support BigInt"),r*(n+o*2**32)}};var pn=class{constructor(e,r){this._onCodecHeader=e,this._onCodecUpdate=r,this[Ve]()}[Ue](){this._isEnabled=!0}[Ve](){this._headerCache=new Map,this._codecUpdateData=new WeakMap,this._codecHeaderSent=!1,this._codecShouldUpdate=!1,this._bitrate=null,this._isEnabled=!1}[po](e,r){if(this._onCodecUpdate){this._bitrate!==e&&(this._bitrate=e,this._codecShouldUpdate=!0);let n=this._codecUpdateData.get(this._headerCache.get(this._currentHeader));this._codecShouldUpdate&&n&&this._onCodecUpdate({bitrate:e,...n},r),this._codecShouldUpdate=!1}}[G](e){let r=this._headerCache.get(e);return r&&this._updateCurrentHeader(e),r}[Fe](e,r,n){this._isEnabled&&(this._codecHeaderSent||(this._onCodecHeader({...r}),this._codecHeaderSent=!0),this._updateCurrentHeader(e),this._headerCache.set(e,r),this._codecUpdateData.set(r,n))}_updateCurrentHeader(e){this._onCodecUpdate&&e!==this._currentHeader&&(this._codecShouldUpdate=!0,this._currentHeader=e)}};var oe=new WeakMap,se=new WeakMap;var he=class{constructor(e,r){this._codecParser=e,this._headerCache=r}*[Ci](){let e;do{if(e=yield*this.Frame[Ie](this._codecParser,this._headerCache,0),e)return e;this._codecParser[Pe](1)}while(!0)}*[Mt](e){let r=yield*this[Ci](),n=se.get(r)[g];if(e||this._codecParser._flushing||(yield*this.Header[G](this._codecParser,this._headerCache,n)))return this._headerCache[Ue](),this._codecParser[Pe](n),this._codecParser[St](r),r;this._codecParser[Be](`Missing ${ot} at ${n} bytes from current position.`,`Dropping current ${ot} and trying again.`),this._headerCache[Ve](),this._codecParser[Pe](1)}};var Bt=class{constructor(e,r){se.set(this,{[Me]:e}),this[q]=r}};var we=class extends Bt{static*[Ie](e,r,n,o,i){let s=yield*e[G](n,o,i);if(s){let a=oe.get(s)[be],c=oe.get(s)[O],l=(yield*n[B](a,i))[D](0,a);return new r(s,l,c)}else return null}constructor(e,r,n){super(e,r),this[Me]=e,this[O]=n,this[qe]=n/e[H]*1e3,this[st]=null,this[Ht]=null,this[Nt]=null,this[Ot]=null,se.get(this)[g]=r[g]}};var Pi="unsynchronizationFlag",Fi="extendedHeaderFlag",Ii="experimentalFlag",Ri="footerPresent",hn=class t{static*getID3v2Header(e,r,n){let i={},s=yield*e[B](3,n);if(s[0]!==73||s[1]!==68||s[2]!==51||(s=yield*e[B](10,n),i[xt]=`id3v2.${s[3]}.${s[4]}`,s[5]&15)||(i[Pi]=!!(s[5]&128),i[Fi]=!!(s[5]&64),i[Ii]=!!(s[5]&32),i[Ri]=!!(s[5]&16),s[6]&128||s[7]&128||s[8]&128||s[9]&128))return null;let a=s[6]<<21|s[7]<<14|s[8]<<7|s[9];return i[g]=10+a,new t(i)}constructor(e){this[xt]=e[xt],this[Pi]=e[Pi],this[Fi]=e[Fi],this[Ii]=e[Ii],this[Ri]=e[Ri],this[g]=e[g]}};var Le=class{constructor(e){oe.set(this,e),this[le]=e[le],this[de]=null,this[E]=e[E],this[me]=e[me],this[H]=e[H]}};var va={0:[pr,pr,pr,pr,pr],16:[32,32,32,32,8],240:[pe,pe,pe,pe,pe]},go=(t,e,r)=>8*((t+r)%e+e)*(1<<(t+r)/e)-8*e*(e/8|0);for(let t=2;t<15;t++)va[t<<4]=[t*32,go(t,4,0),go(t,4,-1),go(t,8,4),go(t,8,0)];var vl=0,bl=1,Sl=2,Ml=3,ha=4,vo="bands ",bo=" to 31",ya={0:vo+4+bo,16:vo+8+bo,32:vo+12+bo,48:vo+16+bo},Vt="bitrateIndex",yn="v2",wo="v1",So="Intensity stereo ",Mo=", MS stereo ",_o="on",Ao="off",_l={0:So+Ao+Mo+Ao,16:So+_o+Mo+Ao,32:So+Ao+Mo+_o,48:So+_o+Mo+_o},ki={0:{[C]:W},2:{[C]:"Layer III",[Ye]:1,[Ze]:_l,[wo]:{[Vt]:Sl,[O]:1152},[yn]:{[Vt]:ha,[O]:576}},4:{[C]:"Layer II",[Ye]:1,[Ze]:ya,[O]:1152,[wo]:{[Vt]:bl},[yn]:{[Vt]:ha}},6:{[C]:"Layer I",[Ye]:4,[Ze]:ya,[O]:384,[wo]:{[Vt]:vl},[yn]:{[Vt]:Ml}}},Di="MPEG Version ",xa="ISO/IEC ",Al={0:{[C]:`${Di}2.5 (later extension of MPEG 2)`,[ve]:yn,[H]:{0:oo,4:no,8:lr,12:W}},8:{[C]:W},16:{[C]:`${Di}2 (${xa}13818-3)`,[ve]:yn,[H]:{0:ar,4:sr,8:cr,12:W}},24:{[C]:`${Di}1 (${xa}11172-3)`,[ve]:wo,[H]:{0:or,4:pt,8:ir,12:W}},length:g},wl={0:yo,1:un},Ll={0:un,1:"50/15 ms",2:W,3:"CCIT J.17"},ga={0:{[E]:2,[C]:ft},64:{[E]:2,[C]:"joint "+ft},128:{[E]:2,[C]:"dual channel"},192:{[E]:1,[C]:mt}},Ut=class t extends Le{static*[G](e,r,n){let o={},i=yield*hn.getID3v2Header(e,r,n);i&&(yield*e[B](i[g],n),e[Pe](i[g]));let s=yield*e[B](4,n),a=Ae(s[D](0,4)),c=r[G](a);if(c)return new t(c);if(s[0]!==255||s[1]<224)return null;let l=Al[s[1]&24];if(l[C]===W)return null;let d=s[1]&6;if(ki[d][C]===W)return null;let u={...ki[d],...ki[d][l[ve]]};if(o[et]=l[C],o[ve]=u[C],o[O]=u[O],o[tt]=wl[s[1]&1],o[g]=4,o[de]=va[s[2]&240][u[Vt]],o[de]===pe||(o[H]=l[H][s[2]&12],o[H]===W)||(o[Ye]=s[2]&2&&u[Ye],o[Je]=!!(s[2]&1),o[be]=Math.floor(125*o[de]*o[O]/o[H]+o[Ye]),!o[be]))return null;let m=s[3]&192;if(o[me]=ga[m][C],o[E]=ga[m][E],o[Ze]=u[Ze][s[3]&48],o[qr]=!!(s[3]&8),o[Qe]=!!(s[3]&4),o[ur]=Ll[s[3]&3],o[ur]===W)return null;o[le]=16;{let{length:f,frameLength:h,samples:y,...p}=o;r[Fe](a,o,p)}return new t(o)}constructor(e){super(e),this[de]=e[de],this[ur]=e[ur],this[Ye]=e[Ye],this[qr]=e[qr],this[Qe]=e[Qe],this[Je]=e[Je],this[ve]=e[ve],this[Ze]=e[Ze],this[et]=e[et],this[tt]=e[tt]}};var xn=class t extends we{static*[Ie](e,r,n){return yield*super[Ie](Ut,t,e,r,n)}constructor(e,r,n){super(e,r,n)}};var gn=class extends he{constructor(e,r,n){super(e,r),this.Frame=xn,this.Header=Ut,n(this[j])}get[j](){return io}*[$e](){return yield*this[Mt]()}};var zl={0:"MPEG-4",8:"MPEG-2"},El={0:"valid",2:pe,4:pe,6:pe},Cl={0:yo,1:un},Tl={0:"AAC Main",64:"AAC LC (Low Complexity)",128:"AAC SSR (Scalable Sample Rate)",192:"AAC LTP (Long Term Prediction)"},Pl={0:to,4:ro,8:sa,12:pt,16:or,20:ir,24:sr,28:ar,32:cr,36:no,40:oo,44:lr,48:aa,52:W,56:W,60:"frequency is written explicitly"},ba={0:{[E]:0,[C]:"Defined in AOT Specific Config"},64:{[E]:1,[C]:mt},128:{[E]:2,[C]:J(2,T[0][0])},192:{[E]:3,[C]:J(3,T[1][3])},256:{[E]:4,[C]:J(4,T[1][3],T[3][4])},320:{[E]:5,[C]:J(5,T[1][3],T[3][0])},384:{[E]:6,[C]:J(6,T[1][3],T[3][0],We)},448:{[E]:8,[C]:J(8,T[1][3],T[2][0],T[3][0],We)}},Gt=class t extends Le{static*[G](e,r,n){let o={},i=yield*e[B](7,n),s=Ae([i[0],i[1],i[2],i[3]&252|i[6]&3]),a=r[G](s);if(a)Object.assign(o,a);else{if(i[0]!==255||i[1]<240||(o[et]=zl[i[1]&8],o[ve]=El[i[1]&6],o[ve]===pe))return null;let l=i[1]&1;o[tt]=Cl[l],o[g]=l?7:9,o[so]=i[2]&192,o[je]=i[2]&60;let d=i[2]&2;if(o[Qr]=Tl[o[so]],o[H]=Pl[o[je]],o[H]===W)return null;o[Je]=!!d,o[rn]=(i[2]<<8|i[3])&448,o[me]=ba[o[rn]][C],o[E]=ba[o[rn]][E],o[Qe]=!!(i[3]&32),o[Yr]=!!(i[3]&8),o[nn]=!!(i[3]&8),o[on]=!!(i[3]&4),o[le]=16,o[O]=1024,o[Kr]=i[6]&3;{let{length:u,channelModeBits:m,profileBits:f,sampleRateBits:h,frameLength:y,samples:p,numberAACFrames:x,...M}=o;r[Fe](s,o,M)}}if(o[be]=(i[3]<<11|i[4]<<3|i[5]>>5)&8191,!o[be])return null;let c=(i[5]<<6|i[6]>>2)&2047;return o[Vr]=c===2047?"VBR":c,new t(o)}constructor(e){super(e),this[nn]=e[nn],this[on]=e[on],this[Vr]=e[Vr],this[Yr]=e[Yr],this[Qe]=e[Qe],this[Je]=e[Je],this[ve]=e[ve],this[g]=e[g],this[et]=e[et],this[Kr]=e[Kr],this[Qr]=e[Qr],this[tt]=e[tt]}get audioSpecificConfig(){let e=oe.get(this),r=e[so]+64<<5|e[je]<<5|e[rn]>>3,n=new fe(2);return new At(n[Xe]).setUint16(0,r,!1),n}};var vn=class t extends we{static*[Ie](e,r,n){return yield*super[Ie](Gt,t,e,r,n)}constructor(e,r,n){super(e,r,n)}};var bn=class extends he{constructor(e,r,n){super(e,r),this.Frame=vn,this.Header=Gt,n(this[j])}get[j](){return"aac"}*[$e](){return yield*this[Mt]()}};var wt=class t extends we{static _getFrameFooterCrc16(e){return(e[e[g]-2]<<8)+e[e[g]-1]}static[ho](e){let r=t._getFrameFooterCrc16(e),n=ma(e[D](0,-2));return r===n}constructor(e,r,n){r[ln]=n,r[Gr]=t._getFrameFooterCrc16(e),super(r,e,oe.get(r)[O])}};var Sa="get from STREAMINFO metadata block",Fl={0:"Fixed",1:"Variable"},Ma={0:W,16:192};for(let t=2;t<16;t++)Ma[t<<4]=t<6?576*2**(t-2):2**t;var Il={0:Sa,1:ro,2:ia,3:oa,4:lr,5:cr,6:ar,7:sr,8:ir,9:or,10:pt,11:to,15:pe},Rl={0:{[E]:1,[C]:mt},16:{[E]:2,[C]:J(2,T[0][0])},32:{[E]:3,[C]:J(3,T[0][1])},48:{[E]:4,[C]:J(4,T[1][0],T[3][0])},64:{[E]:5,[C]:J(5,T[1][1],T[3][0])},80:{[E]:6,[C]:J(6,T[1][1],We,T[3][0])},96:{[E]:7,[C]:J(7,T[1][1],We,T[3][4],T[2][0])},112:{[E]:8,[C]:J(8,T[1][1],We,T[3][0],T[2][0])},128:{[E]:2,[C]:`${ft} (left, diff)`},144:{[E]:2,[C]:`${ft} (diff, right)`},160:{[E]:2,[C]:`${ft} (avg, diff)`},176:W,192:W,208:W,224:W,240:W},kl={0:Sa,2:8,4:12,6:W,8:16,10:20,12:24,14:W},Lt=class t extends Le{static _decodeUTF8Int(e){if(e[0]>254)return null;if(e[0]<128)return{value:e[0],length:1};let r=1;for(let s=64;s&e[0];s>>=1)r++;let n=r-1,o=0,i=0;for(;n>0;i+=6,n--){if((e[n]&192)!==128)return null;o|=(e[n]&63)<<i}return o|=(e[n]&127>>r)<<i,{value:o,length:r}}static[Re](e,r){let n={[B]:function*(){return e}};return t[G](n,r,0).next().value}static*[G](e,r,n){let o=yield*e[B](6,n);if(o[0]!==255||!(o[1]===248||o[1]===249))return null;let i={},s=Ae(o[D](0,4)),a=r[G](s);if(a)Object.assign(i,a);else{if(i[co]=o[1]&1,i[Zr]=Fl[i[co]],i[en]=o[2]&240,i[je]=o[2]&15,i[rt]=Ma[i[en]],i[rt]===W||(i[H]=Il[i[je]],i[H]===pe)||o[3]&1)return null;let l=Rl[o[3]&240];if(l===W||(i[E]=l[E],i[me]=l[C],i[le]=kl[o[3]&14],i[le]===W))return null}i[g]=5,o=yield*e[B](i[g]+8,n);let c=t._decodeUTF8Int(o[D](4));if(!c||(i[co]?i[an]=c.value:i[st]=c.value,i[g]+=c[g],i[en]===96?(o[g]<i[g]&&(o=yield*e[B](i[g],n)),i[rt]=o[i[g]-1]+1,i[g]+=1):i[en]===112&&(o[g]<i[g]&&(o=yield*e[B](i[g],n)),i[rt]=(o[i[g]-1]<<8)+o[i[g]]+1,i[g]+=2),i[O]=i[rt],i[je]===12?(o[g]<i[g]&&(o=yield*e[B](i[g],n)),i[H]=o[i[g]-1]*1e3,i[g]+=1):i[je]===13?(o[g]<i[g]&&(o=yield*e[B](i[g],n)),i[H]=(o[i[g]-1]<<8)+o[i[g]],i[g]+=2):i[je]===14&&(o[g]<i[g]&&(o=yield*e[B](i[g],n)),i[H]=((o[i[g]-1]<<8)+o[i[g]])*10,i[g]+=2),o[g]<i[g]&&(o=yield*e[B](i[g],n)),i[dr]=o[i[g]-1],i[dr]!==ua(o[D](0,i[g]-1))))return null;if(!a){let{blockingStrategyBits:l,frameNumber:d,sampleNumber:u,samples:m,sampleRateBits:f,blockSizeBits:h,crc:y,length:p,...x}=i;r[Fe](s,i,x)}return new t(i)}constructor(e){super(e),this[Gr]=null,this[Zr]=e[Zr],this[rt]=e[rt],this[st]=e[st],this[an]=e[an],this[ln]=null}};var Dl=2,Hl=512*1024,Wt=class extends he{constructor(e,r,n){super(e,r),this.Frame=wt,this.Header=Lt,n(this[j])}get[j](){return"flac"}*_getNextFrameSyncOffset(e){let r=yield*this._codecParser[B](2,0),n=r[g]-2;for(;e<n;){if(r[e]===255){let i=r[e+1];if(i===248||i===249)break;i!==255&&e++}e++}return e}*[$e](){do{let e=yield*Lt[G](this._codecParser,this._headerCache,0);if(e){let r=oe.get(e)[g]+Dl;for(;r<=Hl;){if(this._codecParser._flushing||(yield*Lt[G](this._codecParser,this._headerCache,r))){let n=yield*this._codecParser[B](r);if(this._codecParser._flushing||(n=n[D](0,r)),wt[ho](n)){let o=new wt(n,e);return this._headerCache[Ue](),this._codecParser[Pe](r),this._codecParser[St](o),o}}r=yield*this._getNextFrameSyncOffset(r+1)}this._codecParser[Be](`Unable to sync FLAC frame after searching ${r} bytes.`),this._codecParser[Pe](r)}else this._codecParser[Pe](yield*this._getNextFrameSyncOffset(1))}while(!0)}[_t](e){return e[re]===0?(this._headerCache[Ue](),this._streamInfo=e[q][D](13)):e[re]===1||(e[ue]=se.get(e)[Te].map(r=>{let n=Lt[Re](r,this._headerCache);if(n)return new wt(r,n,this._streamInfo);this._codecParser[Be]("Failed to parse Ogg FLAC frame","Skipping invalid FLAC frame")}).filter(r=>!!r)),e}};var Xt=class t{static*[G](e,r,n){let o={},i=yield*e[B](28,n);if(i[0]!==79||i[1]!==103||i[2]!==103||i[3]!==83||(o[zi]=i[4],i[5]&248))return null;o[_e]=!!(i[5]&4),o[yt]=!!(i[5]&2),o[ht]=!!(i[5]&1);let a=new At(fe.from(i[D](0,28))[Xe]);o[Ne]=pa(a,6),o[Ke]=a.getInt32(14,!0),o[re]=a.getInt32(18,!0),o[Dt]=a.getInt32(22,!0);let c=i[26];o[g]=c+27,i=yield*e[B](o[g],n),o[be]=0,o[bt]=[],o[fr]=fe.from(i[D](27,o[g]));for(let l=0,d=0;l<c;l++){let u=o[fr][l];o[be]+=u,d+=u,(u!==255||l===c-1)&&(o[bt].push(d),d=0)}return new t(o)}constructor(e){oe.set(this,e),this[Ne]=e[Ne],this[ht]=e[ht],this[yt]=e[yt],this[_e]=e[_e],this[bt]=e[bt],this[re]=e[re],this[Dt]=e[Dt],this[Ke]=e[Ke]}};var Sn=class t extends Bt{static*[Ie](e,r,n){let o=yield*Xt[G](e,r,n);if(o){let i=oe.get(o)[be],s=oe.get(o)[g],a=s+i,c=(yield*e[B](a,0))[D](0,a),l=c[D](s,a);return new t(o,l,c)}else return null}constructor(e,r,n){super(e,r),se.get(this)[g]=n[g],this[ue]=[],this[Ai]=n,this[Ne]=e[Ne],this[Wr]=e[Dt],this[qe]=0,this[ht]=e[ht],this[yt]=e[yt],this[_e]=e[_e],this[re]=e[re],this[O]=0,this[Ke]=e[Ke]}};var hr=class extends we{constructor(e,r,n){super(r,e,n)}};var _a={0:Hr.slice(0,2),1:Hr},ke="SILK-only",ae="CELT-only",Lo="Hybrid",zt="narrowband",zo="medium-band",Et="wideband",yr="super-wideband",xr="fullband",Ol={0:{[R]:ke,[k]:zt,[I]:10},8:{[R]:ke,[k]:zt,[I]:20},16:{[R]:ke,[k]:zt,[I]:40},24:{[R]:ke,[k]:zt,[I]:60},32:{[R]:ke,[k]:zo,[I]:10},40:{[R]:ke,[k]:zo,[I]:20},48:{[R]:ke,[k]:zo,[I]:40},56:{[R]:ke,[k]:zo,[I]:60},64:{[R]:ke,[k]:Et,[I]:10},72:{[R]:ke,[k]:Et,[I]:20},80:{[R]:ke,[k]:Et,[I]:40},88:{[R]:ke,[k]:Et,[I]:60},96:{[R]:Lo,[k]:yr,[I]:10},104:{[R]:Lo,[k]:yr,[I]:20},112:{[R]:Lo,[k]:xr,[I]:10},120:{[R]:Lo,[k]:xr,[I]:20},128:{[R]:ae,[k]:zt,[I]:2.5},136:{[R]:ae,[k]:zt,[I]:5},144:{[R]:ae,[k]:zt,[I]:10},152:{[R]:ae,[k]:zt,[I]:20},160:{[R]:ae,[k]:Et,[I]:2.5},168:{[R]:ae,[k]:Et,[I]:5},176:{[R]:ae,[k]:Et,[I]:10},184:{[R]:ae,[k]:Et,[I]:20},192:{[R]:ae,[k]:yr,[I]:2.5},200:{[R]:ae,[k]:yr,[I]:5},208:{[R]:ae,[k]:yr,[I]:10},216:{[R]:ae,[k]:yr,[I]:20},224:{[R]:ae,[k]:xr,[I]:2.5},232:{[R]:ae,[k]:xr,[I]:5},240:{[R]:ae,[k]:xr,[I]:10},248:{[R]:ae,[k]:xr,[I]:20}},gr=class t extends Le{static[Re](e,r,n){let o={};if(o[E]=e[9],o[nt]=e[18],o[g]=o[nt]!==0?21+o[E]:19,e[g]<o[g])throw new Error("Out of data while inside an Ogg Page");let i=r[0]&3,s=i===3?2:1,a=Ae(e[D](0,o[g]))+Ae(r[D](0,s)),c=n[G](a);if(c)return new t(c);if(a.substr(0,8)!=="OpusHead"||e[8]!==1)return null;o[q]=fe.from(e[D](0,o[g]));let l=new At(o[q][Xe]);if(o[le]=16,o[Rt]=l.getUint16(10,!0),o[sn]=l.getUint32(12,!0),o[H]=pt,o[$r]=l.getInt16(16,!0),o[nt]in _a&&(o[me]=_a[o[nt]][o[E]-1],!o[me]))return null;o[nt]!==0&&(o[cn]=e[19],o[Ur]=e[20],o[tn]=[...e[D](21,o[E]+21)]);let d=Ol[248&r[0]];switch(o[R]=d[R],o[k]=d[k],o[I]=d[I],i){case 0:o[it]=1;break;case 1:case 2:o[it]=2;break;case 3:o[jr]=!!(128&r[1]),o[Xr]=!!(64&r[1]),o[it]=63&r[1];break;default:return null}{let{length:u,data:m,channelMappingFamily:f,...h}=o;n[Fe](a,o,h)}return new t(o)}constructor(e){super(e),this[q]=e[q],this[k]=e[k],this[nt]=e[nt],this[tn]=e[tn],this[Ur]=e[Ur],this[it]=e[it],this[I]=e[I],this[Xr]=e[Xr],this[sn]=e[sn],this[jr]=e[jr],this[R]=e[R],this[$r]=e[$r],this[Rt]=e[Rt],this[cn]=e[cn]}};var Mn=class extends he{constructor(e,r,n){super(e,r),this.Frame=hr,this.Header=gr,n(this[j]),this._identificationHeader=null,this._preSkipRemaining=null}get[j](){return"opus"}[_t](e){return e[re]===0?(this._headerCache[Ue](),this._identificationHeader=e[q]):e[re]===1||(e[ue]=se.get(e)[Te].map(r=>{let n=gr[Re](this._identificationHeader,r,this._headerCache);if(n){this._preSkipRemaining===null&&(this._preSkipRemaining=n[Rt]);let o=n[I]*n[it]/1e3*n[H];return this._preSkipRemaining>0&&(this._preSkipRemaining-=o,o=this._preSkipRemaining<0?-this._preSkipRemaining:0),new hr(r,n,o)}this._codecParser[fo]("Failed to parse Ogg Opus Header","Not a valid Ogg Opus file")})),e}};var vr=class extends we{constructor(e,r,n){super(r,e,n)}};var Hi={};for(let t=0;t<8;t++)Hi[t+6]=2**(6+t);var _n=class t extends Le{static[Re](e,r,n,o){if(e[g]<30)throw new Error("Out of data while inside an Ogg Page");let i=Ae(e[D](0,30)),s=r[G](i);if(s)return new t(s);let a={[g]:30};if(i.substr(0,7)!=="vorbis")return null;a[q]=fe.from(e[D](0,30));let c=new At(a[q][Xe]);if(a[xt]=c.getUint32(7,!0),a[xt]!==0||(a[E]=e[11],a[me]=Hr[a[E]-1]||"application defined",a[H]=c.getUint32(12,!0),a[Or]=c.getInt32(16,!0),a[Br]=c.getInt32(20,!0),a[Nr]=c.getInt32(24,!0),a[vt]=Hi[(e[28]&240)>>4],a[gt]=Hi[e[28]&15],a[gt]>a[vt])||e[29]!==1)return null;a[le]=32,a[mr]=o,a[Jr]=n;{let{length:l,data:d,version:u,vorbisSetup:m,vorbisComments:f,...h}=a;r[Fe](i,a,h)}return new t(a)}constructor(e){super(e),this[Or]=e[Or],this[Nr]=e[Nr],this[Br]=e[Br],this[gt]=e[gt],this[vt]=e[vt],this[q]=e[q],this[Jr]=e[Jr],this[mr]=e[mr]}};var An=class extends he{constructor(e,r,n){super(e,r),this.Frame=vr,n(this[j]),this._identificationHeader=null,this._setupComplete=!1,this._prevBlockSize=null}get[j](){return kt}[_t](e){e[ue]=[];for(let r of se.get(e)[Te])if(r[0]===1)this._headerCache[Ue](),this._identificationHeader=e[q],this._setupComplete=!1;else if(r[0]===3)this._vorbisComments=r;else if(r[0]===5)this._vorbisSetup=r,this._mode=this._parseSetupHeader(r),this._setupComplete=!0;else if(this._setupComplete){let n=_n[Re](this._identificationHeader,this._headerCache,this._vorbisComments,this._vorbisSetup);n?e[ue].push(new vr(r,n,this._getSamples(r,n))):this._codecParser[logError]("Failed to parse Ogg Vorbis Header","Not a valid Ogg Vorbis file")}return e}_getSamples(e,r){let o=this._mode.blockFlags[e[0]>>1&this._mode.mask]?r[vt]:r[gt],i=this._prevBlockSize===null?0:(this._prevBlockSize+o)/4;return this._prevBlockSize=o,i}_parseSetupHeader(e){let r=new xo(e),n={count:0,blockFlags:[]};for(;(r.read(1)&1)!==1;);let o;for(;n.count<64&&r.position>0;){mn(r.read(8));let i=0;for(;r.read(8)===0&&i++<3;);if(i===4)o=r.read(7),n.blockFlags.unshift(o&1),r.position+=6,n.count++;else{((mn(o)&126)>>1)+1!==n.count&&this._codecParser[Be]("vorbis derived mode count did not match actual mode count");break}}return n.mask=(1<<Math.log2(n.count))-1,n}};var Oi=class{constructor(e,r,n){this._codecParser=e,this._headerCache=r,this._onCodec=n,this._continuedPacket=new fe,this._codec=null,this._isSupported=null,this._previousAbsoluteGranulePosition=null}get[j](){return this._codec||""}_updateCodec(e,r){this._codec!==e&&(this._headerCache[Ve](),this._parser=new r(this._codecParser,this._headerCache,this._onCodec),this._codec=e)}_checkCodecSupport({data:e}){let r=Ae(e[D](0,8));switch(r){case"fishead\0":return!1;case"OpusHead":return this._updateCodec("opus",Mn),!0;case(/^\x7fFLAC/.test(r)&&r):return this._updateCodec("flac",Wt),!0;case(/^\x01vorbis/.test(r)&&r):return this._updateCodec(kt,An),!0;default:return!1}}_checkPageSequenceNumber(e){e[re]!==this._pageSequenceNumber+1&&this._pageSequenceNumber>1&&e[re]>1&&this._codecParser[Be]("Unexpected gap in Ogg Page Sequence Number.",`Expected: ${this._pageSequenceNumber+1}, Got: ${e[re]}`),this._pageSequenceNumber=e[re]}_parsePage(e){this._isSupported===null&&(this._pageSequenceNumber=e[re],this._isSupported=this._checkCodecSupport(e)),this._checkPageSequenceNumber(e);let r=se.get(e),n=oe.get(r[Me]),o=0;if(r[Te]=n[bt].map(i=>e[q][D](o,o+=i)),this._continuedPacket[g]&&(r[Te][0]=fn(this._continuedPacket,r[Te][0]),this._continuedPacket=new fe),n[fr][n[fr][g]-1]===255&&(this._continuedPacket=fn(this._continuedPacket,r[Te].pop())),this._previousAbsoluteGranulePosition!==null&&(e[O]=Number(e[Ne]-this._previousAbsoluteGranulePosition)),this._previousAbsoluteGranulePosition=e[Ne],this._isSupported){let i=this._parser[_t](e);return this._codecParser[St](i),i}else return e}},wn=class extends he{constructor(e,r,n){super(e,r),this._onCodec=n,this.Frame=Sn,this.Header=Xt,this._streams=new Map,this._currentSerialNumber=null}get[j](){let e=this._streams.get(this._currentSerialNumber);return e?e.codec:""}*[$e](){let e=yield*this[Mt](!0);this._currentSerialNumber=e[Ke];let r=this._streams.get(this._currentSerialNumber);return r||(r=new Oi(this._codecParser,this._headerCache,this._onCodec),this._streams.set(this._currentSerialNumber,r)),e[_e]&&this._streams.delete(this._currentSerialNumber),r._parsePage(e)}};var Ni=()=>{},Ln=class{constructor(e,{onCodec:r,onCodecHeader:n,onCodecUpdate:o,enableLogging:i=!1,enableFrameCRC32:s=!0}={}){this._inputMimeType=e,this._onCodec=r||Ni,this._onCodecHeader=n||Ni,this._onCodecUpdate=o,this._enableLogging=i,this._crc32=s?fa:Ni,this[Ve]()}get[j](){return this._parser?this._parser[j]:""}[Ve](){this._headerCache=new pn(this._onCodecHeader,this._onCodecUpdate),this._generator=this._getGenerator(),this._generator.next()}*flush(){this._flushing=!0;for(let e=this._generator.next();e.value;e=this._generator.next())yield e.value;this._flushing=!1,this[Ve]()}*parseChunk(e){for(let r=this._generator.next(e);r.value;r=this._generator.next())yield r.value}parseAll(e){return[...this.parseChunk(e),...this.flush()]}*_getGenerator(){if(this._inputMimeType.match(/aac/))this._parser=new bn(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/mpeg/))this._parser=new gn(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/flac/))this._parser=new Wt(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/ogg/))this._parser=new wn(this,this._headerCache,this._onCodec);else throw new Error(`Unsupported Codec ${mimeType}`);for(this._frameNumber=0,this._currentReadPosition=0,this._totalBytesIn=0,this._totalBytesOut=0,this._totalSamples=0,this._sampleRate=void 0,this._rawData=new Uint8Array(0);;){let e=yield*this._parser[$e]();e&&(yield e)}}*[B](e=0,r=0){let n;for(;this._rawData[g]<=e+r;){if(n=yield,this._flushing)return this._rawData[D](r);n&&(this._totalBytesIn+=n[g],this._rawData=fn(this._rawData,n))}return this._rawData[D](r)}[Pe](e){this._currentReadPosition+=e,this._rawData=this._rawData[D](e)}[dn](e){this._sampleRate=e[Me][H],e[Me][de]=e[qe]>0?Math.round(e[q][g]/e[qe])*8:0,e[st]=this._frameNumber++,e[Ht]=this._totalBytesOut,e[Nt]=this._totalSamples,e[Ot]=this._totalSamples/this._sampleRate*1e3,e[Wr]=this._crc32(e[q]),this._headerCache[po](e[Me][de],e[Ot]),this._totalBytesOut+=e[q][g],this._totalSamples+=e[O]}[St](e){if(e[ue]){if(e[_e]){let r=e[O];e[ue].forEach(n=>{let o=n[O];r<o&&(n[O]=r>0?r:0,n[qe]=n[O]/n[Me][H]*1e3),r-=o,this[dn](n)})}else e[O]=0,e[ue].forEach(r=>{e[O]+=r[O],this[dn](r)});e[qe]=e[O]/this._sampleRate*1e3||0,e[Nt]=this._totalSamples,e[Ot]=this._totalSamples/this._sampleRate*1e3||0,e[Ht]=this._totalBytesOut}else this[dn](e)}_log(e,r){if(this._enableLogging){let n=[`${j}: ${this[j]}`,`inputMimeType: ${this._inputMimeType}`,`readPosition: ${this._currentReadPosition}`,`totalBytesIn: ${this._totalBytesIn}`,`${Ht}: ${this._totalBytesOut}`],o=Math.max(...n.map(i=>i[g]));r.push(`--stats--${"-".repeat(o-9)}`,...n,"-".repeat(o)),e("codec-parser",r.reduce((i,s)=>i+`
4
+ `+s,""))}}[Be](...e){this._log(console.warn,e)}[fo](...e){this._log(console.error,e)}};var Aa=Ln;var Eo=ue;var Co=q;var wa=Me;var La=_e;var za=mr;var Ea=Nt;function at(t){var e=e;function r(){}e={};function n(z){throw z}var o,i,s,a,c,l,d,u,m,f,h;function y(){var z=h.buffer;o=new Int8Array(z),i=new Int16Array(z),a=new Uint8Array(z),c=new Uint16Array(z),s=new Int32Array(z),l=new Uint32Array(z),d=new Float32Array(z),u=new Float64Array(z),m=new BigInt64Array(z),f=new BigUint64Array(z)}for(var p=z=>{for(var ze,Er,Kt=0,Dn=0,Hn=z.length,On=new Uint8Array((Hn*3>>2)-(z[Hn-2]=="=")-(z[Hn-1]=="="));Kt<Hn;Kt+=4,Dn+=3)ze=K[z.charCodeAt(Kt+1)],Er=K[z.charCodeAt(Kt+2)],On[Dn]=K[z.charCodeAt(Kt)]<<2|ze>>4,On[Dn+1]=ze<<4|Er>>2,On[Dn+2]=Er<<6|K[z.charCodeAt(Kt+3)];return On},x=()=>n(""),M=()=>{},v={},S=z=>z(),b=()=>performance.now(),_=(z,ze)=>{if(v[z]&&(clearTimeout(v[z].id),delete v[z]),!ze)return 0;var Er=setTimeout(()=>{delete v[z],S(()=>Ms(z,b()))},ze);return v[z]={id:Er,timeout_ms:ze},0},w=Math.atan,L=Math.cos,P=Math.exp,A=Math.log,N=Math.pow,U=Math.sin,V=z=>{var ze=a.length;return z>>>=0,!1},F=z=>{throw`exit(${z})`},K=new Uint8Array(123),ge=25;ge>=0;--ge)K[48+ge]=52+ge,K[65+ge]=ge,K[97+ge]=26+ge;K[43]=62,K[47]=63;var Ct={e:x,d:M,f:_,b:w,a:L,i:P,h:A,g:N,c:U,k:V,j:F};function kn(z){zr=z.n,ys=z.o,xs=z.p,gs=z.q,vs=z.r,bs=z.s,Ss=z.t,Ms=z.v}var zr,ys,xs,gs,vs,bs,Ss,Ms;function bc(z){z.m()}at.wasm||Object.defineProperty(at,"wasm",{get:()=>String.raw`dynEncode012091253f87dì%nä= 4&¿nÝØä‘ÂLÚªã9ÚØ[äº\ ¼¡³R=}L]ŸÈÿ2 ÿù¶J1jj¡é,zäV|i¸Qk¹‡= 
5
5
  ¨¨Ÿ%‰€ýv²†±»ŸoúâLa:ê±ÊäÌÓ.÷؇ý×>àW>z¯°8¯ñ€\Ñós 9ˆ\§ôÊ@Ü (tÂø4° ¢7fqÓg²Jè6x[zç®&4=} p.(°tÍޖ™ã¾>÷CõË"*k?¿~ 7‚~H2ÛÜâ.ÏQä;Œ6{ÜãFÑá'DœD¤±°HQ>MínÎϕÎöʵ’Ñӓ…™Þ“‰Ž‘š†Š‚œÌP¼P¨Þˆ*X²E=M¦qíxMà ±=M̚ë4/<šgNO‰™/¢ ¢>ˆa~Ï®”ììììì0”ìœa笡çëOÓÇM Q9tùµyuéµµÞϒ/Ÿ±Óõò}E{òÓJ¹Û|· ôfÒ c’¬”Wêaûÿlʽp¹|)‘ÖEL–†¦ }‰ypÕSϹI†]¢ˆºãæ°ÿo¶7ÛRqš¾ÔÅEߨ‘]æˉwÚ{óç‰Vwó1¾”E­Øpˆàe"Æùû–¡Áª ‡ Ààð´Lõ›€ÎxEÓ¢N¦‘…9Ÿëùši&€ Ò§Ø!ÇFçS=MbäO?ß·™縪‡7ùa}5ðšûÕtsUŒþ£Kïg‡ˆN™¾)ø§\V0uSIö:ÌU4ж¯´Õn9ÔƒèE£ZƼ{hµmى¾6ÆžÑ+xñ´«„þ¸=M‚ߤ·å®«ïÆGFÝì|H?äE"þ!9«Æïpæ'][¯ù·£W÷O§&#aŸ‡x$qf=}ø ô bϗŸ×W÷LôožÝWQÕӎ)u †÷½èV|¥Gà¨Ö¸˜@Œê| ÇK5ò €A·Â9’CS2š¸‹¼¿,ä›Ý ÑÝy™!ÑR„%ÆÝÎ0Âv§ qTcó±hØÉã‰=}Z=}Ælü­ën¯ð(-°ÜwVχï.th¥í­‡S~SÏ»Z”ZÔZ
6
6
  3–BÌÛ¬•<éæO)ÎyÚ¯O*®uìÛ$öI¥Ý9ôø³\¤ò³Ù¹ÇP¸J׎y@ÔyOÇm—’ô½üœš¾|S?2àú¤F?½ûoo3ôž;<àáûܘ8‚ì²7ïë¨RäY¹|ÓºÌF,ƒÐ™-¸*\P!FJÒ8= o6HwLrúº”¶Ð۞\Ù¬o¢–9Iq„Ý.ôf¶Îȏ{Ī×N|Mfs…•¤ „ÉݖàŸâ§‘*+ã§­’ô¯î¬7ç×§ä)€Š!Z¨ƒÉž,Äp~ý·wsSGó—äs„E€\ýï鞧Ö:Ò'“Cç(_X$\¦½eҒ8$’X˜F|e‚•œíٙә‚†¡¤Û<ØÞÛ¸9‰¿ðÃÎ#b~× ‚4éîÿÏq
7
7
  ˜ód‡|0•wU‰—&®è·vh6¨—{Ú珁Ú18ә(ÓY‚\ƒ0¦= çˆèíß)Ø=} ˜[xü-v˜?N(Kk‘gš0}âډ´ð“†¬”œÕQNÍ¢usѳ=}. ëg…û= Í M—Bp'²¨ œx’4è@9t“§eݵ¾âð½ z?†‹Z¹FH'‰Ì¯¿<ŒK,üµ<{˜ ¶JãývåàÆeù0Ð"F¥ÃÒÞŽþԛÉvC›zl}„ðN’£ Í^ƒP%²¸FX»WÎêô¶…ŠäÉJ^gƒ×SÃã.žÄt*'ªG‘«ÒB<ÜӅ¿ºp­\àuV¯£›Åݑ½á–Þ ùߞ=}ÎÚ^‹Ÿÿí>¥!¨ â=M·? */¤"å)â·ÿîÿî*(%*›2[½"üríÔ4š’l½»a}¯CwpCÓèìGc-ã6®=M32†k?Êg­…–!So-™x›>³G+ã@ò,™ Áïƒá„åN0þŠÙ‚è.~È÷¡vTr¶‰­‚Æ[üB±º»ávëw¹{pÜºû"Aæ’±9Æ^¹³òïRIAy5GÂwÉfœ4@Tù|qý7†ðªwBL|ÔqŽ‘v!ª°|]KiÐJVQ5‰¸åõ§‡‡åŒ"H¼0e¬<óBîÚS€ÏUìHPÙA+çÉ'se†ÌNf°@ÈM,ð½egÖ¬x©“„‹û½2~«ŠÒ1;ֈ«…¯°4&90èE»Ó׺ç‚ʧJ<Æ¿&~Nu¼ãÙµ¢.UÇä(qQô^ö–·“%!É
@@ -138,7 +138,7 @@ KÙ:KµºKí{K]ûK£[KÚKóšKÓ½R׿ÿ'P^j9TîçmóœþL¿_o©×hÙtÙ
138
138
  ÁiŸ;ª•äÀž‡%Ёn= =M+W= ÓÖc[aS
139
139
  FÁð]Nô‡Ý'= “qr(¶ù¤nŒü«òÿ¿d&ÿ ÈõT4Þ=}z|ö ¿OW×SMtdH.τãRX&§o3ؘÜXÍ^œÊM–í£W´iâ]NüOå£S£Å·ƒç÷­˜Ý§½GÑU y¹¦ß§/6P0(Cúýb"þ¥°VٌÄᣈ’ÓÙ@¾YýòDŽŒ{òÃv?’EP©”=MBé­\ĽYäýRò øfâëEEf¼D+gC×úDZGÅÿ±Ç?TzÙ¡±†Ï€ÁÕ¯¦ð‰vZ’mT}Œ3x˘z×cºrÑM=M„ c-ɩԈ™7½wæc§Î»cû¾yf‡ÙWòŒÆÝÔc¥³ôØfƒ«Äñ·9‰ø%­g:y”^+{U]¤þ‚…[&fӁÏY낫‡Gªõ‡¹¦ÖŒðþ¬m„oÛø‘?/ÛS’.[S›9ÛùœC›…/û2”²Y£ÎÑ%/sy¢×ÌùJ­W6Oí\g0^JùêßÏ0í[Ü“'ÏÔ>žÀ-¿[ÔW?Y]±ž ØÙÃî<~ÎëR~Ìf¾Z—/×¼_á¾Þê+îoÐñ{Þ\e3K%©¹§íB¹§(c=}ËÈ·SzÔnf§èx}o\9öf|%Ýå¥~©‚Iǀ ü€ñY8}FfŸú@Rú1éþ3‚÷˂‹ótQøvœû|³Îaá,Óé>BG6Òê}—ÄJ|¶=}°Žˆöf6žõk¶ÌºHgN’j‡Ò{柾M;9·é—§WèO±›Ä3қËÒyt™ ;ù´ˆà©aš|—Ó^!ÝøûšÄ
140
140
  (VV¸ ÇÙcÏ>yoçz ÃvòG{3Þ£½šŠcמôŒ íŚé;°OÛ‰GØ<wÜW> rU]Žq­{û'ùÝír{*øï?t-ígùWÿ…&§] m}×ût¥‚Ë~ß&>&Õv!b#ÅÌ‚q¢µ|jŽÍüùÉ^Æ&™ôžþŸ~sIµ"“]d)uâ´‘ºvk Å\<͉ÿ­öꍽƒÂ
141
- ïBçϧmÙIólÜoëVbƒ¦¯éWÇû3`});var Sc={a:Ct};this.setModule=z=>{t.setModule(at,z)},this.getModule=()=>t.getModule(at),this.instantiate=()=>(this.getModule().then(z=>WebAssembly.instantiate(z,Sc)).then(z=>{let Le=z.exports;kn(Le),h=Le.l,y(),bc(Le),r()}),this.ready=new Promise(z=>{r=z}).then(()=>{this.HEAP=h.buffer,this.malloc=ys,this.free=Ss,this.create_decoder=zr,this.send_setup=xs,this.init_dsp=gs,this.decode_packets=vs,this.destroy_decoder=bs}),this)}function qt(){return this._init=()=>new this._WASMAudioDecoderCommon().instantiate(this._EmscriptenWASM,this._module).then(t=>{this._common=t,this._input=this._common.allocateTypedArray(this._inputSize,Uint8Array),this._firstPage=!0,this._inputLen=this._common.allocateTypedArray(1,Uint32Array),this._outputBufferPtr=this._common.allocateTypedArray(1,Uint32Array),this._channels=this._common.allocateTypedArray(1,Uint32Array),this._sampleRate=this._common.allocateTypedArray(1,Uint32Array),this._samplesDecoded=this._common.allocateTypedArray(1,Uint32Array);let e=256;this._errors=this._common.allocateTypedArray(e,Uint32Array),this._errorsLength=this._common.allocateTypedArray(1,Int32Array),this._frameNumber=0,this._inputBytes=0,this._outputSamples=0,this._decoder=this._common.wasm.create_decoder(this._input.ptr,this._inputLen.ptr,this._outputBufferPtr.ptr,this._channels.ptr,this._sampleRate.ptr,this._samplesDecoded.ptr,this._errors.ptr,this._errorsLength.ptr,e)}),Object.defineProperty(this,"ready",{enumerable:!0,get:()=>this._ready}),this.reset=()=>(this.free(),this._init()),this.free=()=>{this._common.wasm.destroy_decoder(this._decoder),this._common.free()},this.sendSetupHeader=t=>{this._input.buf.set(t),this._inputLen.buf[0]=t.length,this._common.wasm.send_setup(this._decoder,this._firstPage),this._firstPage=!1},this.initDsp=()=>{this._common.wasm.init_dsp(this._decoder)},this.decodePackets=t=>{let e=[],r=0,n=[];for(let o=0;o<t.length;o++){let i=t[o];this._input.buf.set(i),this._inputLen.buf[0]=i.length,this._common.wasm.decode_packets(this._decoder);let s=this._samplesDecoded.buf[0],a=[],c=new Uint32Array(this._common.wasm.HEAP,this._outputBufferPtr.buf[0],this._channels.buf[0]);for(let l=0;l<this._channels.buf[0];l++){let d=new Float32Array(s);s&&d.set(new Float32Array(this._common.wasm.HEAP,c[l],s)),a.push(d)}e.push(a),r+=s,this._frameNumber++,this._inputBytes+=i.length,this._outputSamples+=s;for(let l=0;l<this._errorsLength.buf;l+=2){let d=this._common.codeToString(this._errors.buf[l]),u=this._common.codeToString(this._errors.buf[l+1]);n.push({message:d+" vorbis_synthesis"+u,frameLength:i.length,frameNumber:this._frameNumber,inputBytes:this._inputBytes,outputSamples:this._outputSamples})}this._errorsLength.buf[0]=0}return this._WASMAudioDecoderCommon.getDecodedAudioMultiChannel(n,e,this._channels.buf[0],r,this._sampleRate.buf[0],16)},this._isWebWorker=qt.isWebWorker,this._WASMAudioDecoderCommon=qt.WASMAudioDecoderCommon||$,this._EmscriptenWASM=qt.EmscriptenWASM||at,this._module=qt.module,this._inputSize=128*1024,this._ready=this._init(),this}var To=Symbol(),ct=class{constructor(){this._onCodec=e=>{if(e!=="vorbis")throw new Error("@wasm-audio-decoders/ogg-vorbis does not support this codec "+e)},new $,this._init(),this._ready=this[To](qt)}_init(){this._vorbisSetupInProgress=!0,this._totalSamplesDecoded=0,this._codecParser=new Aa("audio/ogg",{onCodec:this._onCodec,enableFrameCRC32:!1})}async[To](e){if(this._decoder){let r=this._decoder;await r.ready.then(()=>r.free())}return this._decoder=new e,this._decoder.ready}get ready(){return this._ready}async reset(){return this._init(),this._decoder.reset()}free(){this._decoder.free()}async decodeOggPages(e){let r=[];for(let i=0;i<e.length;i++){let s=e[i];if(this._vorbisSetupInProgress&&(s[Co][0]===1&&this._decoder.sendSetupHeader(s[Co]),s[Eo].length)){let a=s[Eo][0][wa];this._decoder.sendSetupHeader(a[za]),this._decoder.initDsp(),this._vorbisSetupInProgress=!1}r.push(...s[Eo].map(a=>a[Co]))}let n=await this._decoder.decodePackets(r);this._totalSamplesDecoded+=n.samplesDecoded;let o=e[e.length-1];if(o&&o[La]){let i=this._totalSamplesDecoded-o[Ea];if(i>0){for(let s=0;s<n.channelData.length;s++)n.channelData[s]=n.channelData[s].subarray(0,n.samplesDecoded-i);n.samplesDecoded-=i,this._totalSamplesDecoded-=i}}return n}async decode(e){return this.decodeOggPages([...this._codecParser.parseChunk(e)])}async flush(){let e=await this.decodeOggPages([...this._codecParser.flush()]);return await this.reset(),e}async decodeFile(e){let r=await this.decodeOggPages([...this._codecParser.parseAll(e)]);return await this.reset(),r}};var Bi=class extends nr{constructor(e){super(e,"ogg-vorbis-decoder",qt,at)}async sendSetupHeader(e){return this.postToDecoder("sendSetupHeader",e)}async initDsp(){return this.postToDecoder("initDsp")}async decodePackets(e){return this.postToDecoder("decodePackets",e)}},zn=class extends ct{constructor(){super(),this._ready=super[To](Bi)}async free(){await this._decoder.free()}terminate(){this._decoder.terminate()}};eo(ct,"OggVorbisDecoder");eo(zn,"OggVorbisDecoderWebWorker");var Vi=class extends Error{constructor(e){super(e),this.name="OggDecodeError"}};async function Po(t,e=new ct){await e.ready;let r=await e.decode(new Uint8Array(t)),n=r.errors;if(n&&n.length>0)throw new Vi(n.map(o=>o.message).join("; "));return{sampleRate:r.sampleRate,channels:r.channelData.length,bitDepth:r.bitDepth,channelData:r.channelData}}var En=class extends Error{constructor(e){super(e),this.name="AudioRegistryError"}},br=class{constructor(e,r={}){this.vfs=e;this.refCounts=new Map;this.cache=new ut(r.cacheSize??64)}get size(){return this.cache.size}async load(e){let r=e.toLowerCase(),n=this.cache.get(r);if(n)return this.refCounts.set(r,(this.refCounts.get(r)??0)+1),n;let i=(await this.vfs.readFile(e)).slice().buffer,s=await this.decodeByExtension(e,i);return this.cache.set(r,s),this.refCounts.set(r,1),s}release(e){let r=e.toLowerCase(),n=this.refCounts.get(r)??0;n<=1?(this.cache.delete(r),this.refCounts.delete(r)):this.refCounts.set(r,n-1)}clearAll(){this.cache.clear(),this.refCounts.clear()}async decodeByExtension(e,r){let n=e.toLowerCase();if(n.endsWith(".wav")){let o=Zn(r),i=o.channels,s=Array.from({length:i},()=>new Float32Array(o.samples.length/i));for(let a=0;a<o.samples.length;a+=1)s[a%i][Math.floor(a/i)]=o.samples[a];return{sampleRate:o.sampleRate,channels:i,bitDepth:o.bitsPerSample,channelData:s}}if(n.endsWith(".ogg")||n.endsWith(".oga"))return Po(r);throw new En(`Unsupported audio format: ${e}`)}};var Nl="quake2ts-pak-indexes",Bl="pak-indexes";function Ca(){if(typeof indexedDB<"u")return indexedDB;if(typeof window<"u"&&"indexedDB"in window)return window.indexedDB;if(typeof globalThis<"u"&&"indexedDB"in globalThis)return globalThis.indexedDB}function Cn(t,e){let r=Ca();return r?new Promise((n,o)=>{let i=r.open(t,1);i.onupgradeneeded=()=>{let{result:s}=i;s.objectStoreNames.contains(e)||s.createObjectStore(e,{keyPath:"key"})},i.onerror=()=>o(i.error??new Error("Unknown IndexedDB error")),i.onsuccess=()=>n(i.result)}):Promise.reject(new Error("IndexedDB is not available in this environment"))}function Tn(t,e,r,n){return new Promise((o,i)=>{let a=t.transaction(e,r).objectStore(e),c=n(a);c.onsuccess=()=>o(c.result),c.onerror=()=>i(c.error??new Error("IndexedDB transaction error"))})}function Ui(t,e){return`${te(t)}:${e.toString(16)}`}function Vl(t){return t.map(e=>({...e}))}var Fo=class{constructor(e=Nl,r=Bl){this.dbName=e;this.storeName=r}get isSupported(){return!!Ca()}async persist(e){if(!this.isSupported)return;let r=e.validate(),n={...r,key:Ui(e.name,r.checksum),name:e.name,size:e.size,persistedAt:Date.now(),entries:Vl(r.entries)},o=await Cn(this.dbName,this.storeName);return await Tn(o,this.storeName,"readwrite",i=>i.put(n)),o.close(),n}async find(e,r){if(!this.isSupported)return;let n=await Cn(this.dbName,this.storeName),o=r!==void 0?Ui(e,r):void 0,i=await Tn(n,this.storeName,"readonly",s=>o?s.get(o):s.getAll());if(n.close(),!!i){if(Array.isArray(i)){let s=te(e),a=i.filter(c=>te(c.name)===s);return a.length===0?void 0:a.sort((c,l)=>l.persistedAt-c.persistedAt)[0]}return i}}async remove(e,r){if(!this.isSupported)return!1;let n=await Cn(this.dbName,this.storeName),o=r!==void 0?Ui(e,r):void 0,i=await Tn(n,this.storeName,"readwrite",s=>{if(o)return s.delete(o);let a=`${te(e)}:`;return s.delete(IDBKeyRange.bound(a,`${a}\uFFFF`,!1,!0))});return n.close(),typeof i=="number"?i>0:!0}async clear(){if(!this.isSupported)return;let e=await Cn(this.dbName,this.storeName);await Tn(e,this.storeName,"readwrite",r=>r.clear()),e.close()}async list(){if(!this.isSupported)return[];let e=await Cn(this.dbName,this.storeName),r=await Tn(e,this.storeName,"readonly",n=>n.getAll());return e.close(),r.sort((n,o)=>o.persistedAt-n.persistedAt)}};var Yt=class extends Error{constructor(r,n){super(n??`Missing dependencies: ${r.join(", ")}`);this.missing=r;this.name="AssetDependencyError"}},Pn=class{constructor(){this.nodes=new Map}register(e,r=[]){let n=this.nodes.get(e)??{dependencies:new Set,loaded:!1};r.forEach(o=>n.dependencies.add(o)),this.nodes.set(e,n),r.forEach(o=>{this.nodes.has(o)||this.nodes.set(o,{dependencies:new Set,loaded:!1})})}markLoaded(e){let r=this.nodes.get(e)??{dependencies:new Set,loaded:!1},n=this.getMissingDependencies(e,r);if(n.length>0)throw new Yt(n,`Asset ${e} is missing dependencies: ${n.join(", ")}`);r.loaded=!0,this.nodes.set(e,r)}markUnloaded(e){let r=this.nodes.get(e);r&&(r.loaded=!1)}isLoaded(e){return this.nodes.get(e)?.loaded??!1}missingDependencies(e){let r=this.nodes.get(e);return r?this.getMissingDependencies(e,r):[]}reset(){this.nodes.clear()}getMissingDependencies(e,r){let n=[];for(let o of r.dependencies)this.nodes.get(o)?.loaded||n.push(o);return n}},Io=class{constructor(e,r={}){this.vfs=e;this.textures=new rr({capacity:r.textureCacheCapacity??128}),this.audio=new br(e,{cacheSize:r.audioCacheSize??64}),this.dependencyTracker=r.dependencyTracker??new Pn,this.md2=new er(e),this.md3=new tr(e)}isAssetLoaded(e,r){return this.dependencyTracker.isLoaded(this.makeKey(e,r))}registerTexture(e,r){this.textures.set(e,r);let n=this.makeKey("texture",e);this.dependencyTracker.register(n),this.dependencyTracker.markLoaded(n)}async loadSound(e){let r=await this.audio.load(e),n=this.makeKey("sound",e);return this.dependencyTracker.register(n),this.dependencyTracker.markLoaded(n),r}async loadMd2Model(e,r=[]){let n=this.makeKey("model",e),o=r.map(a=>this.makeKey("texture",a));this.dependencyTracker.register(n,o);let i=this.dependencyTracker.missingDependencies(n);if(i.length>0)throw new Yt(i,`Asset ${n} is missing dependencies: ${i.join(", ")}`);let s=await this.md2.load(e);return this.dependencyTracker.markLoaded(n),s}async loadMd3Model(e,r=[]){let n=this.makeKey("model",e),o=r.map(a=>this.makeKey("texture",a));this.dependencyTracker.register(n,o);let i=this.dependencyTracker.missingDependencies(n);if(i.length>0)throw new Yt(i,`Asset ${n} is missing dependencies: ${i.join(", ")}`);let s=await this.md3.load(e);return this.dependencyTracker.markLoaded(n),s}resetForLevelChange(){this.textures.clear(),this.audio.clearAll(),this.dependencyTracker.reset()}makeKey(e,r){return`${e}:${te(r)}`}};var Gi=32,Ro=(u=>(u[u.Auto=0]="Auto",u[u.Weapon=1]="Weapon",u[u.Voice=2]="Voice",u[u.Item=3]="Item",u[u.Body=4]="Body",u[u.Aux=5]="Aux",u[u.Footstep=6]="Footstep",u[u.Aux3=7]="Aux3",u[u.NoPhsAdd=8]="NoPhsAdd",u[u.Reliable=16]="Reliable",u[u.ForcePos=32]="ForcePos",u))(Ro||{}),Ta=-1,ko=0,Pa=1,Fa=2,Ia=3,Sr=80,Ra=.003;function jt(t){return t===3?t*.001:t*5e-4}function Do(t){let e=jt(t);return e<=0?Number.POSITIVE_INFINITY:80+1/e}var Ho=class{constructor(e){this.factory=e}getContext(){return this.context||(this.context=this.factory()),this.context}async resume(){let e=this.getContext();e.state==="suspended"&&await e.resume()}getState(){return this.context?.state??"suspended"}};function Oo(t){let e=t.getContext(),r=e.createGain();r.gain.value=1;let n=e.createDynamicsCompressor(),o=e.createBiquadFilter?.();return o?(o.type="lowpass",o.frequency.value=2e4,o.Q.value=.707,r.connect(o),o.connect(n)):r.connect(n),n.connect(e.destination),{context:e,master:r,compressor:n,filter:o}}var No=class{constructor(e=new Jt){this.configStrings=e;this.buffers=new Map}registerName(e){return this.configStrings.soundIndex(e)}register(e,r){let n=this.registerName(e);return this.buffers.set(n,r),n}find(e){return this.configStrings.findSoundIndex(e)}get(e){return this.buffers.get(e)}has(e){return this.buffers.has(e)}};var Bo=class{constructor(e){this.vfs=e.vfs,this.registry=e.registry,this.contextController=e.context,this.soundRoot=e.soundRoot??"sound/",this.decodeAudio=e.decodeAudio??((r,n)=>{if(!r.decodeAudioData)throw new Error("decodeAudioData is not available on the provided audio context");return r.decodeAudioData(n)})}async precache(e){let r=[...new Set(e.map(i=>this.normalize(i)))],n={loaded:[],skipped:[],missing:[],errors:{}},o=this.contextController.getContext();for(let i of r)try{let s=this.registry.find(i);if(s!==void 0&&this.registry.has(s)){n.skipped.push(i);continue}if(!this.vfs.stat(i)){n.missing.push(i);continue}let l=(await this.vfs.readFile(i)).slice().buffer,d=await this.decodeAudio(o,l);this.registry.register(i,d),n.loaded.push(i)}catch(s){let a=s instanceof Error?s:new Error(String(s));n.errors[i]=a}return n}normalize(e){let r=te(e.replace(/^\//,""));return r.startsWith(this.soundRoot)?r:te(`${this.soundRoot}${r}`)}};var Ul=7,Fn=t=>t&Ul;function Vo(t){return Array.from({length:32},()=>({entnum:0,entchannel:0,endTimeMs:0,isPlayer:!1,active:!1})).map(e=>({...e,isPlayer:e.entnum===t}))}function Uo(t,e,r,n){if(r<0)throw new Error("pickChannel: entchannel must be non-negative");let o=Fn(r),i=-1,s=Number.POSITIVE_INFINITY;for(let a=0;a<t.length;a+=1){let c=t[a],l=Fn(c.entchannel);if(o!==0&&c.entnum===e&&l===o){i=a;break}if(c.active&&c.entnum===n.playerEntity&&e!==n.playerEntity)continue;let d=c.endTimeMs-n.nowMs;(i===-1||d<s)&&(s=d,i=a)}return i===-1?void 0:i}function Go(t,e,r,n,o){if(o)return{left:r,right:r,distanceComponent:0};let i=ws(t,e.origin),s=ci(i),a=Oe(i),c=s-80;c<0&&(c=0),c*=jt(n);let l=ai(e.right,a),d=e.mono??!1,u=d||n===0?1:.5*(1+l),m=d||n===0?1:.5*(1-l),f=Math.max(0,Math.floor(r*(1-c)*u));return{left:Math.max(0,Math.floor(r*(1-c)*m)),right:f,distanceComponent:c}}var Wo=class{constructor(e){this.activeSources=new Map;this.contextController=e.context,this.registry=e.registry,this.playerEntity=e.playerEntity,this.channels=Vo(e.playerEntity),this.listener=e.listener??{origin:As,right:{x:1,y:0,z:0}},this.sfxVolume=e.sfxVolume??1,this.masterVolume=e.masterVolume??1,this.resolveOcclusion=e.resolveOcclusion,this.graph=Oo(this.contextController),this.graph.master.gain.value=this.masterVolume}setListener(e){this.listener=e}setMasterVolume(e){this.masterVolume=e,this.graph.master.gain.value=e}setSfxVolume(e){this.sfxVolume=e}async ensureRunning(){await this.contextController.resume()}play(e){let r=this.registry.get(e.soundIndex);if(!r)return;let n=this.graph.context,o=n.currentTime*1e3,i=Uo(this.channels,e.entity,e.channel,{nowMs:o,playerEntity:this.playerEntity});if(i===void 0)return;let s=this.activeSources.get(i);s&&(s.source.onended=null,s.source.stop(),this.activeSources.delete(i));let a=n.createBufferSource();a.buffer=r,a.loop=e.looping??!1;let c=e.origin??this.listener.origin,l=n.createGain(),d=this.createPanner(n,e.attenuation),u=this.resolveOcclusion?.(this.listener,c,e.attenuation),m=ka(u?.gainScale??1),f=this.resolveOcclusion?this.createOcclusionFilter(n,u?.lowpassHz??2e4):void 0;this.applyOriginToPanner(d,c);let h=e.entity===this.playerEntity,y=Go(c,this.listener,e.volume,e.attenuation,h),x=(e.volume===0?0:Math.max(y.left,y.right)/Math.max(1,e.volume))*(e.volume/255)*this.masterVolume*this.sfxVolume;l.gain.value=x*m;let M=n.currentTime+(e.timeOffsetMs??0)/1e3,v=(e.looping?Number.POSITIVE_INFINITY:r.duration*1e3)+M*1e3;a.connect(d),f?(d.connect(f),f.connect(l)):d.connect(l),l.connect(this.graph.master),a.start(M),a.onended=()=>{this.channels[i].active=!1,this.activeSources.delete(i)};let S={channelIndex:i,entnum:e.entity,entchannel:Fn(e.channel),endTimeMs:v,source:a,panner:d,gain:l,baseGain:x,origin:c,attenuation:e.attenuation,occlusion:f?{scale:m,lowpassHz:u?.lowpassHz,filter:f}:u?{scale:m,lowpassHz:u.lowpassHz}:void 0};return this.channels[i]={entnum:e.entity,entchannel:Fn(e.channel),endTimeMs:v,isPlayer:e.entity===this.playerEntity,active:!0},this.activeSources.set(i,S),S}stop(e){let r=this.activeSources.get(e);r&&(r.source.stop(),this.channels[e].active=!1,this.activeSources.delete(e))}stopEntitySounds(e){for(let[r,n]of[...this.activeSources.entries()])n.entnum===e&&(n.source.stop(),this.channels[r].active=!1,this.activeSources.delete(r))}updateEntityPosition(e,r){for(let n of this.activeSources.values())if(n.entnum===e&&(this.applyOriginToPanner(n.panner,r),n.origin=r,this.resolveOcclusion)){let o=this.resolveOcclusion(this.listener,r,n.attenuation);this.applyOcclusion(n,o)}}positionedSound(e,r,n,o){return this.play({entity:0,channel:0,soundIndex:r,volume:n,attenuation:o,origin:e})}ambientSound(e,r,n){return this.play({entity:0,channel:0,soundIndex:r,volume:n,attenuation:0,origin:e,looping:!0})}getChannelState(e){return this.channels[e]}getDiagnostics(){return{activeChannels:this.activeSources.size,masterVolume:this.masterVolume,sfxVolume:this.sfxVolume,channels:[...this.channels],activeSounds:[...this.activeSources.values()].map(e=>({entnum:e.entnum,entchannel:e.entchannel,channelIndex:e.channelIndex,origin:e.origin,gain:e.gain.gain.value,baseGain:e.baseGain,attenuation:e.attenuation,maxDistance:e.panner.maxDistance,distanceModel:e.panner.distanceModel,occlusion:e.occlusion?{scale:e.occlusion.scale,lowpassHz:e.occlusion.lowpassHz}:void 0}))}}setUnderwater(e,r=400){let n=this.graph.filter;n&&(n.type="lowpass",n.Q.value=.707,n.frequency.value=e?r:2e4)}createPanner(e,r){let n=e.createPanner?e.createPanner():Object.assign(e.createGain(),{positionX:{value:this.listener.origin.x},positionY:{value:this.listener.origin.y},positionZ:{value:this.listener.origin.z}});return this.configurePanner(n,r)}configurePanner(e,r){let n=jt(r);return e.refDistance=80,e.maxDistance=Do(r),e.rolloffFactor=n,e.distanceModel=r===0?"linear":"inverse",e.positionX.value=this.listener.origin.x,e.positionY.value=this.listener.origin.y,e.positionZ.value=this.listener.origin.z,e}applyOriginToPanner(e,r){e.positionX.value=r.x,e.positionY.value=r.y,e.positionZ.value=r.z}createOcclusionFilter(e,r){if(!e.createBiquadFilter)return;let n=e.createBiquadFilter();return n.type="lowpass",n.Q.value=.707,n.frequency.value=Wi(r,10,2e4),n}applyOcclusion(e,r){let n=ka(r?.gainScale??1);if(e.gain.gain.value=e.baseGain*n,e.occlusion?.filter){let o=r?.lowpassHz??2e4;e.occlusion.filter.frequency.value=Wi(o,10,2e4)}e.occlusion?(e.occlusion.scale=n,e.occlusion.lowpassHz=r?.lowpassHz):r&&(e.occlusion={scale:n,lowpassHz:r.lowpassHz})}},Wi=(t,e,r)=>Math.min(r,Math.max(e,t)),ka=t=>Wi(t,0,1);var Xo=class{constructor(e){this.createElement=e.createElement,this.resolveSource=e.resolveSource??(async r=>r),this.volume=e.volume??1}async play(e,{loop:r=!0,restart:n=!1}={}){if(this.track===e&&this.element){this.element.loop=r,this.element.volume=this.volume,n&&(this.element.currentTime=0),(this.element.paused||n)&&await this.element.play();return}let o=await this.resolveSource(e),i=this.createElement();i.src=o,i.loop=r,i.volume=this.volume,i.currentTime=0,i.load(),await i.play(),this.element=i,this.track=e}pause(){!this.element||this.element.paused||this.element.pause()}async resume(){!this.element||!this.element.paused||await this.element.play()}stop(){this.element&&(this.element.pause(),this.element.currentTime=0,this.element=void 0,this.track=void 0)}setVolume(e){this.volume=e,this.element&&(this.element.volume=e)}getState(){let e=!!(this.element&&!this.element.paused&&!this.element.ended),r=!!this.element?.paused;return{track:this.track,paused:r,playing:e,volume:this.volume}}};var qo=class{constructor(e){this.registry=e.registry,this.system=e.system,this.music=e.music}soundindex(e){return this.registry.registerName(e)}sound(e,r,n,o,i,s){this.system.play({entity:e,channel:r,soundIndex:n,volume:o,attenuation:i,timeOffsetMs:s})}positioned_sound(e,r,n,o){this.system.positionedSound(e,r,n,o)}loop_sound(e,r,n,o,i){this.system.play({entity:e,channel:r,soundIndex:n,volume:o,attenuation:i,looping:!0})}stop_entity_sounds(e){this.system.stopEntitySounds(e)}set_listener(e){this.system.setListener(e)}play_music(e,r=!0){return this.music?this.music.play(e,{loop:r}):Promise.resolve()}pause_music(){this.music?.pause()}resume_music(){return this.music?.resume()??Promise.resolve()}stop_music(){this.music?.stop()}set_music_volume(e){this.music?.setVolume(e)}play_ambient(e,r,n){this.system.ambientSound(e,r,n)}play_channel(e){this.system.play({...e})}};function Gl(t){t.enable(t.DEPTH_TEST),t.depthFunc(t.LEQUAL),t.enable(t.CULL_FACE),t.cullFace(t.BACK),t.enable(t.BLEND),t.blendFuncSeparate(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA,t.ONE,t.ONE_MINUS_SRC_ALPHA)}function Wl(t,e,r,n){for(let o of e){let i=t.getExtension(o);if(!i)throw new Error(`Missing required WebGL extension: ${o}`);n.set(o,i)}for(let o of r){let i=t.getExtension(o);i&&n.set(o,i)}}function Da(t,e={}){let{contextAttributes:r,requiredExtensions:n=[],optionalExtensions:o=[]}=e,i=t.getContext("webgl2",r??{antialias:!0});if(!i)throw new Error("WebGL2 not supported or failed to initialize");Gl(i);let s=new Map;Wl(i,n,o,s);let a=!1,c=new Set,l=new Set,d=m=>{a=!0,m.preventDefault();for(let f of c)f()},u=()=>{a=!1;for(let m of l)m()};return t.addEventListener("webglcontextlost",d),t.addEventListener("webglcontextrestored",u),{gl:i,extensions:s,isLost:()=>a,onLost(m){return c.add(m),()=>c.delete(m)},onRestored(m){return l.add(m),()=>l.delete(m)},dispose(){t.removeEventListener("webglcontextlost",d),t.removeEventListener("webglcontextrestored",u),c.clear(),l.clear(),s.clear()}}}function Ha(t,e,r){let n=t.createShader(e);if(!n)throw new Error("Failed to allocate shader");if(t.shaderSource(n,r),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS)){let i=t.getShaderInfoLog(n)??"Unknown shader compile failure";throw t.deleteShader(n),new Error(i)}return n}function Xl(t,e,r,n){let o=t.createProgram();if(!o)throw new Error("Failed to allocate shader program");if(t.attachShader(o,e),t.attachShader(o,r),n)for(let[s,a]of Object.entries(n))t.bindAttribLocation(o,a,s);if(t.linkProgram(o),!t.getProgramParameter(o,t.LINK_STATUS)){let s=t.getProgramInfoLog(o)??"Unknown shader link failure";throw t.deleteProgram(o),new Error(s)}return o}var he=class t{constructor(e,r){this.uniformLocations=new Map;this.attributeLocations=new Map;this.gl=e,this.program=r}static create(e,r,n){let o=Ha(e,e.VERTEX_SHADER,r.vertex),i=Ha(e,e.FRAGMENT_SHADER,r.fragment);try{let s=Xl(e,o,i,n);return new t(e,s)}finally{e.deleteShader(o),e.deleteShader(i)}}use(){this.gl.useProgram(this.program)}getUniformLocation(e){if(!this.uniformLocations.has(e)){let r=this.gl.getUniformLocation(this.program,e);this.uniformLocations.set(e,r)}return this.uniformLocations.get(e)??null}getAttributeLocation(e){if(!this.attributeLocations.has(e)){let r=this.gl.getAttribLocation(this.program,e);this.attributeLocations.set(e,r)}return this.attributeLocations.get(e)??-1}dispose(){this.gl.deleteProgram(this.program),this.uniformLocations.clear(),this.attributeLocations.clear()}};function Oa(t,e,r){return he.create(t,e,r)}var ye=class{constructor(e,r=e.STATIC_DRAW,n){this.gl=e,this.target=n??e.ARRAY_BUFFER;let o=e.createBuffer();if(!o)throw new Error("Failed to allocate buffer");this.buffer=o,e.bindBuffer(this.target,this.buffer),e.bufferData(this.target,0,r)}bind(){this.gl.bindBuffer(this.target,this.buffer)}upload(e,r=this.gl.STATIC_DRAW){this.bind(),this.gl.bufferData(this.target,e,r)}update(e,r=0){this.bind(),this.gl.bufferSubData(this.target,r,e)}dispose(){this.gl.deleteBuffer(this.buffer)}},ke=class extends ye{constructor(e,r=e.STATIC_DRAW){super(e,r,e.ELEMENT_ARRAY_BUFFER)}},be=class{constructor(e){this.gl=e;let r=e.createVertexArray();if(!r)throw new Error("Failed to allocate vertex array object");this.vao=r}bind(){this.gl.bindVertexArray(this.vao)}configureAttributes(e,r){this.bind(),r&&r.bind();for(let n of e)this.gl.enableVertexAttribArray(n.index),this.gl.vertexAttribPointer(n.index,n.size,n.type,n.normalized??!1,n.stride??0,n.offset??0),n.divisor!==void 0&&this.gl.vertexAttribDivisor(n.index,n.divisor)}dispose(){this.gl.deleteVertexArray(this.vao)}},Mr=class{constructor(e,r=e.TEXTURE_2D){this.gl=e,this.target=r;let n=e.createTexture();if(!n)throw new Error("Failed to allocate texture");this.texture=n}bind(e=0){this.gl.activeTexture(this.gl.TEXTURE0+e),this.gl.bindTexture(this.target,this.texture)}setParameters(e){this.bind(),e.wrapS!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_S,e.wrapS),e.wrapT!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_T,e.wrapT),e.minFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MIN_FILTER,e.minFilter),e.magFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MAG_FILTER,e.magFilter)}uploadImage(e,r,n,o,i,s,a,c){this.bind(),this.gl.texImage2D(this.target,e,r,n,o,i,s,a,c)}dispose(){this.gl.deleteTexture(this.texture)}},_r=class{constructor(e){this.gl=e,this.target=e.TEXTURE_CUBE_MAP;let r=e.createTexture();if(!r)throw new Error("Failed to allocate cubemap texture");this.texture=r}bind(e=0){this.gl.activeTexture(this.gl.TEXTURE0+e),this.gl.bindTexture(this.target,this.texture)}setParameters(e){this.bind(),e.wrapS!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_S,e.wrapS),e.wrapT!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_T,e.wrapT),e.minFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MIN_FILTER,e.minFilter),e.magFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MAG_FILTER,e.magFilter)}uploadFace(e,r,n,o,i,s,a,c,l){this.bind(),this.gl.texImage2D(e,r,n,o,i,s,a,c,l)}dispose(){this.gl.deleteTexture(this.texture)}},Yo=class{constructor(e){this.gl=e;let r=e.createFramebuffer();if(!r)throw new Error("Failed to allocate framebuffer");this.framebuffer=r}bind(e=this.gl.FRAMEBUFFER){this.gl.bindFramebuffer(e,this.framebuffer)}attachTexture2D(e,r,n=0){this.bind(),this.gl.framebufferTexture2D(this.gl.FRAMEBUFFER,e,r.target,r.texture,n)}dispose(){this.gl.deleteFramebuffer(this.framebuffer)}};var qi=4,Xi=7*qi,Yi=[{index:0,size:3,type:5126,stride:Xi,offset:0},{index:1,size:2,type:5126,stride:Xi,offset:3*qi},{index:2,size:2,type:5126,stride:Xi,offset:5*qi}];function ql(t,e){return{width:t,height:t,padding:e,data:new Uint8Array(t*t*4),cursorX:0,cursorY:0,rowHeight:0}}function Yl(t){let e=t.width*t.height;if(e===0)throw new Error("Invalid lightmap with zero area");let r=t.samples.byteLength/e;if(!Number.isInteger(r)||r<3||r>4)throw new Error("Unsupported lightmap channel count");return r}function jl(t,e,r){let n=Yl(r),o=t.width*4,i=e.x+t.padding,s=e.y+t.padding,a=0;for(let c=0;c<r.height;c++){let l=(s+c)*o+i*4;for(let d=0;d<r.width;d++){let u=l+d*4;t.data[u]=r.samples[a],t.data[u+1]=r.samples[a+1],t.data[u+2]=r.samples[a+2],t.data[u+3]=n===4?r.samples[a+3]:255,a+=n}}}function Kl(t,e,r){let n=e.width+r.lightmapPadding*2,o=e.height+r.lightmapPadding*2;if(n>r.atlasSize||o>r.atlasSize)throw new Error("Lightmap too large for atlas");for(let a of t){if(a.cursorX+n>a.width&&(a.cursorX=0,a.cursorY+=a.rowHeight+r.lightmapPadding,a.rowHeight=0),a.cursorY+o>a.height)continue;let c={atlasIndex:t.indexOf(a),x:a.cursorX,y:a.cursorY,width:e.width,height:e.height};return a.cursorX+=n+r.lightmapPadding,a.rowHeight=Math.max(a.rowHeight,o),{placement:c,atlas:a}}let i=ql(r.atlasSize,r.lightmapPadding);t.push(i);let s={atlasIndex:t.length-1,x:0,y:0,width:e.width,height:e.height};return i.cursorX=n+r.lightmapPadding,i.rowHeight=o,{placement:s,atlas:i}}function jo(t){return t instanceof Float32Array?t:new Float32Array(t)}function $l(t,e){if(!t){let n=new Uint16Array(e);for(let o=0;o<e;o++)n[o]=o;return n}return t instanceof Uint16Array?t:new Uint16Array(t)}function Ql(t,e){let r=new Float32Array(t.length);for(let n=0;n<t.length;n+=2)r[n]=e.offset[0]+t[n]*e.scale[0],r[n+1]=e.offset[1]+t[n+1]*e.scale[1];return r}function Jl(t,e){let r=jo(t.vertices),n=jo(t.textureCoords),o=e?Ql(jo(t.lightmapCoords??t.textureCoords),e):jo(t.lightmapCoords??new Float32Array(n.length)),i=r.length/3;if(n.length/2!==i)throw new Error("Texture coordinates count mismatch");if(o.length/2!==i)throw new Error("Lightmap coordinates count mismatch");let s=new Float32Array(i*7);for(let a=0;a<i;a++){let c=a*3,l=a*2,d=a*7;s[d]=r[c],s[d+1]=r[c+1],s[d+2]=r[c+2],s[d+3]=n[l],s[d+4]=n[l+1],s[d+5]=o[l],s[d+6]=o[l+1]}return s}function Na(t,e,r={}){let n={atlasSize:r.atlasSize??1024,lightmapPadding:r.lightmapPadding??1},o=[],i=new Map;e.forEach((c,l)=>{if(!c.lightmap)return;let{placement:d,atlas:u}=Kl(o,c.lightmap,n);jl(u,d,c.lightmap),i.set(l,{atlasIndex:d.atlasIndex,offset:[(d.x+n.lightmapPadding)/n.atlasSize,(d.y+n.lightmapPadding)/n.atlasSize],scale:[d.width/n.atlasSize,d.height/n.atlasSize]})});let s=o.map(c=>{let l=new Mr(t);return l.setParameters({wrapS:t.CLAMP_TO_EDGE,wrapT:t.CLAMP_TO_EDGE,minFilter:t.LINEAR,magFilter:t.LINEAR}),l.uploadImage(0,t.RGBA,c.width,c.height,0,t.RGBA,t.UNSIGNED_BYTE,c.data),{texture:l,width:c.width,height:c.height,pixels:c.data}});return{surfaces:e.map((c,l)=>{let d=i.get(l),u=Jl(c,d),m=$l(c.indices,u.length/7),f=new ye(t,t.STATIC_DRAW,t.ARRAY_BUFFER);f.upload(u);let h=new ke(t,t.STATIC_DRAW);h.upload(m);let y=new be(t);return y.configureAttributes(Yi,f),{vao:y,vertexBuffer:f,indexBuffer:h,indexCount:m.length,texture:c.texture,surfaceFlags:c.surfaceFlags??Tr,lightmap:d,vertexData:u,indexData:m}}),lightmaps:s}}function Ar(t){let{normal:e,distance:r}=t,n=Math.sqrt(e.x*e.x+e.y*e.y+e.z*e.z);if(n===0)return t;let o=1/n;return{normal:{x:e.x*o,y:e.y*o,z:e.z*o},distance:r*o}}function Ba(t){if(t.length!==16)throw new Error("View-projection matrix must contain 16 elements");let e=t[0],r=t[4],n=t[8],o=t[12],i=t[1],s=t[5],a=t[9],c=t[13],l=t[2],d=t[6],u=t[10],m=t[14],f=t[3],h=t[7],y=t[11],p=t[15];return[Ar({normal:{x:f+e,y:h+r,z:y+n},distance:p+o}),Ar({normal:{x:f-e,y:h-r,z:y-n},distance:p-o}),Ar({normal:{x:f+i,y:h+s,z:y+a},distance:p+c}),Ar({normal:{x:f-i,y:h-s,z:y-a},distance:p-c}),Ar({normal:{x:f+l,y:h+d,z:y+u},distance:p+m}),Ar({normal:{x:f-l,y:h-d,z:y-u},distance:p-m})]}function Zl(t,e){return t.normal.x*e.x+t.normal.y*e.y+t.normal.z*e.z+t.distance}function In(t,e,r){for(let n of r){let o=n.normal.x>=0?e.x:t.x,i=n.normal.y>=0?e.y:t.y,s=n.normal.z>=0?e.z:t.z;if(Zl(n,{x:o,y:i,z:s})<0)return!1}return!0}function Va(t){return t<0}function Ua(t){return-t-1}function Ga(t,e){return t.normal[0]*e.x+t.normal[1]*e.y+t.normal[2]*e.z-t.dist}function e0(t,e,r){if(!t||e<0||r<0)return!0;let n=Math.ceil(t.numClusters/8),o=t.clusters[e].pvs,i=Math.floor(r/8),s=1<<r%8;return i<0||i>=n?!1:(o[i]&s)!==0}function t0(t,e){let r={x:t.mins[0],y:t.mins[1],z:t.mins[2]},n={x:t.maxs[0],y:t.maxs[1],z:t.maxs[2]};return In(r,n,e)}function Ki(t,e){let r=0;for(;r>=0;){let n=t.nodes[r],o=t.planes[n.planeIndex],s=Ga(o,e)>=0?0:1,a=n.children[s];if(Va(a))return Ua(a);r=a}return-1}function r0(t,e){let r=t.leafs[e],n=[];for(let o=0;o<r.numLeafFaces;o+=1)n.push(t.leafLists.leafFaces[e][o]);return n}function ji(t,e,r,n,o,i,s){if(Va(e)){let m=Ua(e),f=t.leafs[m];if(!e0(t.visibility,o,f.cluster)||!t0(f,n))return;let h={x:(f.mins[0]+f.maxs[0])*.5,y:(f.mins[1]+f.maxs[1])*.5,z:(f.mins[2]+f.maxs[2])*.5},y=h.x-r.x,p=h.y-r.y,x=h.z-r.z,M=-(y*y+p*p+x*x);for(let v of r0(t,m))s.has(v)||(s.add(v),i.push({faceIndex:v,leafIndex:m,sortKey:M}));return}let a=t.nodes[e],c=t.planes[a.planeIndex],l=Ga(c,r),d=l>=0?a.children[0]:a.children[1],u=l>=0?a.children[1]:a.children[0];In({x:a.mins[0],y:a.mins[1],z:a.mins[2]},{x:a.maxs[0],y:a.maxs[1],z:a.maxs[2]},n)&&(ji(t,d,r,n,o,i,s),ji(t,u,r,n,o,i,s))}function Wa(t,e,r){let n=Ki(t,e),o=n>=0?t.leafs[n].cluster:-1,i=[];return ji(t,0,e,r,o,i,new Set),i}var $i=`#version 300 es
141
+ ïBçϧmÙIólÜoëVbƒ¦¯éWÇû3`});var Sc={a:Ct};this.setModule=z=>{t.setModule(at,z)},this.getModule=()=>t.getModule(at),this.instantiate=()=>(this.getModule().then(z=>WebAssembly.instantiate(z,Sc)).then(z=>{let ze=z.exports;kn(ze),h=ze.l,y(),bc(ze),r()}),this.ready=new Promise(z=>{r=z}).then(()=>{this.HEAP=h.buffer,this.malloc=ys,this.free=Ss,this.create_decoder=zr,this.send_setup=xs,this.init_dsp=gs,this.decode_packets=vs,this.destroy_decoder=bs}),this)}function qt(){return this._init=()=>new this._WASMAudioDecoderCommon().instantiate(this._EmscriptenWASM,this._module).then(t=>{this._common=t,this._input=this._common.allocateTypedArray(this._inputSize,Uint8Array),this._firstPage=!0,this._inputLen=this._common.allocateTypedArray(1,Uint32Array),this._outputBufferPtr=this._common.allocateTypedArray(1,Uint32Array),this._channels=this._common.allocateTypedArray(1,Uint32Array),this._sampleRate=this._common.allocateTypedArray(1,Uint32Array),this._samplesDecoded=this._common.allocateTypedArray(1,Uint32Array);let e=256;this._errors=this._common.allocateTypedArray(e,Uint32Array),this._errorsLength=this._common.allocateTypedArray(1,Int32Array),this._frameNumber=0,this._inputBytes=0,this._outputSamples=0,this._decoder=this._common.wasm.create_decoder(this._input.ptr,this._inputLen.ptr,this._outputBufferPtr.ptr,this._channels.ptr,this._sampleRate.ptr,this._samplesDecoded.ptr,this._errors.ptr,this._errorsLength.ptr,e)}),Object.defineProperty(this,"ready",{enumerable:!0,get:()=>this._ready}),this.reset=()=>(this.free(),this._init()),this.free=()=>{this._common.wasm.destroy_decoder(this._decoder),this._common.free()},this.sendSetupHeader=t=>{this._input.buf.set(t),this._inputLen.buf[0]=t.length,this._common.wasm.send_setup(this._decoder,this._firstPage),this._firstPage=!1},this.initDsp=()=>{this._common.wasm.init_dsp(this._decoder)},this.decodePackets=t=>{let e=[],r=0,n=[];for(let o=0;o<t.length;o++){let i=t[o];this._input.buf.set(i),this._inputLen.buf[0]=i.length,this._common.wasm.decode_packets(this._decoder);let s=this._samplesDecoded.buf[0],a=[],c=new Uint32Array(this._common.wasm.HEAP,this._outputBufferPtr.buf[0],this._channels.buf[0]);for(let l=0;l<this._channels.buf[0];l++){let d=new Float32Array(s);s&&d.set(new Float32Array(this._common.wasm.HEAP,c[l],s)),a.push(d)}e.push(a),r+=s,this._frameNumber++,this._inputBytes+=i.length,this._outputSamples+=s;for(let l=0;l<this._errorsLength.buf;l+=2){let d=this._common.codeToString(this._errors.buf[l]),u=this._common.codeToString(this._errors.buf[l+1]);n.push({message:d+" vorbis_synthesis"+u,frameLength:i.length,frameNumber:this._frameNumber,inputBytes:this._inputBytes,outputSamples:this._outputSamples})}this._errorsLength.buf[0]=0}return this._WASMAudioDecoderCommon.getDecodedAudioMultiChannel(n,e,this._channels.buf[0],r,this._sampleRate.buf[0],16)},this._isWebWorker=qt.isWebWorker,this._WASMAudioDecoderCommon=qt.WASMAudioDecoderCommon||$,this._EmscriptenWASM=qt.EmscriptenWASM||at,this._module=qt.module,this._inputSize=128*1024,this._ready=this._init(),this}var To=Symbol(),ct=class{constructor(){this._onCodec=e=>{if(e!=="vorbis")throw new Error("@wasm-audio-decoders/ogg-vorbis does not support this codec "+e)},new $,this._init(),this._ready=this[To](qt)}_init(){this._vorbisSetupInProgress=!0,this._totalSamplesDecoded=0,this._codecParser=new Aa("audio/ogg",{onCodec:this._onCodec,enableFrameCRC32:!1})}async[To](e){if(this._decoder){let r=this._decoder;await r.ready.then(()=>r.free())}return this._decoder=new e,this._decoder.ready}get ready(){return this._ready}async reset(){return this._init(),this._decoder.reset()}free(){this._decoder.free()}async decodeOggPages(e){let r=[];for(let i=0;i<e.length;i++){let s=e[i];if(this._vorbisSetupInProgress&&(s[Co][0]===1&&this._decoder.sendSetupHeader(s[Co]),s[Eo].length)){let a=s[Eo][0][wa];this._decoder.sendSetupHeader(a[za]),this._decoder.initDsp(),this._vorbisSetupInProgress=!1}r.push(...s[Eo].map(a=>a[Co]))}let n=await this._decoder.decodePackets(r);this._totalSamplesDecoded+=n.samplesDecoded;let o=e[e.length-1];if(o&&o[La]){let i=this._totalSamplesDecoded-o[Ea];if(i>0){for(let s=0;s<n.channelData.length;s++)n.channelData[s]=n.channelData[s].subarray(0,n.samplesDecoded-i);n.samplesDecoded-=i,this._totalSamplesDecoded-=i}}return n}async decode(e){return this.decodeOggPages([...this._codecParser.parseChunk(e)])}async flush(){let e=await this.decodeOggPages([...this._codecParser.flush()]);return await this.reset(),e}async decodeFile(e){let r=await this.decodeOggPages([...this._codecParser.parseAll(e)]);return await this.reset(),r}};var Bi=class extends nr{constructor(e){super(e,"ogg-vorbis-decoder",qt,at)}async sendSetupHeader(e){return this.postToDecoder("sendSetupHeader",e)}async initDsp(){return this.postToDecoder("initDsp")}async decodePackets(e){return this.postToDecoder("decodePackets",e)}},zn=class extends ct{constructor(){super(),this._ready=super[To](Bi)}async free(){await this._decoder.free()}terminate(){this._decoder.terminate()}};eo(ct,"OggVorbisDecoder");eo(zn,"OggVorbisDecoderWebWorker");var Vi=class extends Error{constructor(e){super(e),this.name="OggDecodeError"}};async function Po(t,e=new ct){await e.ready;let r=await e.decode(new Uint8Array(t)),n=r.errors;if(n&&n.length>0)throw new Vi(n.map(o=>o.message).join("; "));return{sampleRate:r.sampleRate,channels:r.channelData.length,bitDepth:r.bitDepth,channelData:r.channelData}}var En=class extends Error{constructor(e){super(e),this.name="AudioRegistryError"}},br=class{constructor(e,r={}){this.vfs=e;this.refCounts=new Map;this.cache=new ut(r.cacheSize??64)}get size(){return this.cache.size}async load(e){let r=e.toLowerCase(),n=this.cache.get(r);if(n)return this.refCounts.set(r,(this.refCounts.get(r)??0)+1),n;let i=(await this.vfs.readFile(e)).slice().buffer,s=await this.decodeByExtension(e,i);return this.cache.set(r,s),this.refCounts.set(r,1),s}release(e){let r=e.toLowerCase(),n=this.refCounts.get(r)??0;n<=1?(this.cache.delete(r),this.refCounts.delete(r)):this.refCounts.set(r,n-1)}clearAll(){this.cache.clear(),this.refCounts.clear()}async decodeByExtension(e,r){let n=e.toLowerCase();if(n.endsWith(".wav")){let o=Zn(r),i=o.channels,s=Array.from({length:i},()=>new Float32Array(o.samples.length/i));for(let a=0;a<o.samples.length;a+=1)s[a%i][Math.floor(a/i)]=o.samples[a];return{sampleRate:o.sampleRate,channels:i,bitDepth:o.bitsPerSample,channelData:s}}if(n.endsWith(".ogg")||n.endsWith(".oga"))return Po(r);throw new En(`Unsupported audio format: ${e}`)}};var Nl="quake2ts-pak-indexes",Bl="pak-indexes";function Ca(){if(typeof indexedDB<"u")return indexedDB;if(typeof window<"u"&&"indexedDB"in window)return window.indexedDB;if(typeof globalThis<"u"&&"indexedDB"in globalThis)return globalThis.indexedDB}function Cn(t,e){let r=Ca();return r?new Promise((n,o)=>{let i=r.open(t,1);i.onupgradeneeded=()=>{let{result:s}=i;s.objectStoreNames.contains(e)||s.createObjectStore(e,{keyPath:"key"})},i.onerror=()=>o(i.error??new Error("Unknown IndexedDB error")),i.onsuccess=()=>n(i.result)}):Promise.reject(new Error("IndexedDB is not available in this environment"))}function Tn(t,e,r,n){return new Promise((o,i)=>{let a=t.transaction(e,r).objectStore(e),c=n(a);c.onsuccess=()=>o(c.result),c.onerror=()=>i(c.error??new Error("IndexedDB transaction error"))})}function Ui(t,e){return`${te(t)}:${e.toString(16)}`}function Vl(t){return t.map(e=>({...e}))}var Fo=class{constructor(e=Nl,r=Bl){this.dbName=e;this.storeName=r}get isSupported(){return!!Ca()}async persist(e){if(!this.isSupported)return;let r=e.validate(),n={...r,key:Ui(e.name,r.checksum),name:e.name,size:e.size,persistedAt:Date.now(),entries:Vl(r.entries)},o=await Cn(this.dbName,this.storeName);return await Tn(o,this.storeName,"readwrite",i=>i.put(n)),o.close(),n}async find(e,r){if(!this.isSupported)return;let n=await Cn(this.dbName,this.storeName),o=r!==void 0?Ui(e,r):void 0,i=await Tn(n,this.storeName,"readonly",s=>o?s.get(o):s.getAll());if(n.close(),!!i){if(Array.isArray(i)){let s=te(e),a=i.filter(c=>te(c.name)===s);return a.length===0?void 0:a.sort((c,l)=>l.persistedAt-c.persistedAt)[0]}return i}}async remove(e,r){if(!this.isSupported)return!1;let n=await Cn(this.dbName,this.storeName),o=r!==void 0?Ui(e,r):void 0,i=await Tn(n,this.storeName,"readwrite",s=>{if(o)return s.delete(o);let a=`${te(e)}:`;return s.delete(IDBKeyRange.bound(a,`${a}\uFFFF`,!1,!0))});return n.close(),typeof i=="number"?i>0:!0}async clear(){if(!this.isSupported)return;let e=await Cn(this.dbName,this.storeName);await Tn(e,this.storeName,"readwrite",r=>r.clear()),e.close()}async list(){if(!this.isSupported)return[];let e=await Cn(this.dbName,this.storeName),r=await Tn(e,this.storeName,"readonly",n=>n.getAll());return e.close(),r.sort((n,o)=>o.persistedAt-n.persistedAt)}};var Yt=class extends Error{constructor(r,n){super(n??`Missing dependencies: ${r.join(", ")}`);this.missing=r;this.name="AssetDependencyError"}},Pn=class{constructor(){this.nodes=new Map}register(e,r=[]){let n=this.nodes.get(e)??{dependencies:new Set,loaded:!1};r.forEach(o=>n.dependencies.add(o)),this.nodes.set(e,n),r.forEach(o=>{this.nodes.has(o)||this.nodes.set(o,{dependencies:new Set,loaded:!1})})}markLoaded(e){let r=this.nodes.get(e)??{dependencies:new Set,loaded:!1},n=this.getMissingDependencies(e,r);if(n.length>0)throw new Yt(n,`Asset ${e} is missing dependencies: ${n.join(", ")}`);r.loaded=!0,this.nodes.set(e,r)}markUnloaded(e){let r=this.nodes.get(e);r&&(r.loaded=!1)}isLoaded(e){return this.nodes.get(e)?.loaded??!1}missingDependencies(e){let r=this.nodes.get(e);return r?this.getMissingDependencies(e,r):[]}reset(){this.nodes.clear()}getMissingDependencies(e,r){let n=[];for(let o of r.dependencies)this.nodes.get(o)?.loaded||n.push(o);return n}},Io=class{constructor(e,r={}){this.vfs=e;this.textures=new rr({capacity:r.textureCacheCapacity??128}),this.audio=new br(e,{cacheSize:r.audioCacheSize??64}),this.dependencyTracker=r.dependencyTracker??new Pn,this.md2=new er(e),this.md3=new tr(e)}isAssetLoaded(e,r){return this.dependencyTracker.isLoaded(this.makeKey(e,r))}registerTexture(e,r){this.textures.set(e,r);let n=this.makeKey("texture",e);this.dependencyTracker.register(n),this.dependencyTracker.markLoaded(n)}async loadSound(e){let r=await this.audio.load(e),n=this.makeKey("sound",e);return this.dependencyTracker.register(n),this.dependencyTracker.markLoaded(n),r}async loadMd2Model(e,r=[]){let n=this.makeKey("model",e),o=r.map(a=>this.makeKey("texture",a));this.dependencyTracker.register(n,o);let i=this.dependencyTracker.missingDependencies(n);if(i.length>0)throw new Yt(i,`Asset ${n} is missing dependencies: ${i.join(", ")}`);let s=await this.md2.load(e);return this.dependencyTracker.markLoaded(n),s}async loadMd3Model(e,r=[]){let n=this.makeKey("model",e),o=r.map(a=>this.makeKey("texture",a));this.dependencyTracker.register(n,o);let i=this.dependencyTracker.missingDependencies(n);if(i.length>0)throw new Yt(i,`Asset ${n} is missing dependencies: ${i.join(", ")}`);let s=await this.md3.load(e);return this.dependencyTracker.markLoaded(n),s}resetForLevelChange(){this.textures.clear(),this.audio.clearAll(),this.dependencyTracker.reset()}makeKey(e,r){return`${e}:${te(r)}`}};var Gi=32,Ro=(u=>(u[u.Auto=0]="Auto",u[u.Weapon=1]="Weapon",u[u.Voice=2]="Voice",u[u.Item=3]="Item",u[u.Body=4]="Body",u[u.Aux=5]="Aux",u[u.Footstep=6]="Footstep",u[u.Aux3=7]="Aux3",u[u.NoPhsAdd=8]="NoPhsAdd",u[u.Reliable=16]="Reliable",u[u.ForcePos=32]="ForcePos",u))(Ro||{}),Ta=-1,ko=0,Pa=1,Fa=2,Ia=3,Sr=80,Ra=.003;function jt(t){return t===3?t*.001:t*5e-4}function Do(t){let e=jt(t);return e<=0?Number.POSITIVE_INFINITY:80+1/e}var Ho=class{constructor(e){this.factory=e}getContext(){return this.context||(this.context=this.factory()),this.context}async resume(){let e=this.getContext();e.state==="suspended"&&await e.resume()}getState(){return this.context?.state??"suspended"}};function Oo(t){let e=t.getContext(),r=e.createGain();r.gain.value=1;let n=e.createDynamicsCompressor(),o=e.createBiquadFilter?.();return o?(o.type="lowpass",o.frequency.value=2e4,o.Q.value=.707,r.connect(o),o.connect(n)):r.connect(n),n.connect(e.destination),{context:e,master:r,compressor:n,filter:o}}var No=class{constructor(e=new Jt){this.configStrings=e;this.buffers=new Map}registerName(e){return this.configStrings.soundIndex(e)}register(e,r){let n=this.registerName(e);return this.buffers.set(n,r),n}find(e){return this.configStrings.findSoundIndex(e)}get(e){return this.buffers.get(e)}has(e){return this.buffers.has(e)}};var Bo=class{constructor(e){this.vfs=e.vfs,this.registry=e.registry,this.contextController=e.context,this.soundRoot=e.soundRoot??"sound/",this.decodeAudio=e.decodeAudio??((r,n)=>{if(!r.decodeAudioData)throw new Error("decodeAudioData is not available on the provided audio context");return r.decodeAudioData(n)})}async precache(e){let r=[...new Set(e.map(i=>this.normalize(i)))],n={loaded:[],skipped:[],missing:[],errors:{}},o=this.contextController.getContext();for(let i of r)try{let s=this.registry.find(i);if(s!==void 0&&this.registry.has(s)){n.skipped.push(i);continue}if(!this.vfs.stat(i)){n.missing.push(i);continue}let l=(await this.vfs.readFile(i)).slice().buffer,d=await this.decodeAudio(o,l);this.registry.register(i,d),n.loaded.push(i)}catch(s){let a=s instanceof Error?s:new Error(String(s));n.errors[i]=a}return n}normalize(e){let r=te(e.replace(/^\//,""));return r.startsWith(this.soundRoot)?r:te(`${this.soundRoot}${r}`)}};var Ul=7,Fn=t=>t&Ul;function Vo(t){return Array.from({length:32},()=>({entnum:0,entchannel:0,endTimeMs:0,isPlayer:!1,active:!1})).map(e=>({...e,isPlayer:e.entnum===t}))}function Uo(t,e,r,n){if(r<0)throw new Error("pickChannel: entchannel must be non-negative");let o=Fn(r),i=-1,s=Number.POSITIVE_INFINITY;for(let a=0;a<t.length;a+=1){let c=t[a],l=Fn(c.entchannel);if(o!==0&&c.entnum===e&&l===o){i=a;break}if(c.active&&c.entnum===n.playerEntity&&e!==n.playerEntity)continue;let d=c.endTimeMs-n.nowMs;(i===-1||d<s)&&(s=d,i=a)}return i===-1?void 0:i}function Go(t,e,r,n,o){if(o)return{left:r,right:r,distanceComponent:0};let i=ws(t,e.origin),s=ci(i),a=Oe(i),c=s-80;c<0&&(c=0),c*=jt(n);let l=ai(e.right,a),d=e.mono??!1,u=d||n===0?1:.5*(1+l),m=d||n===0?1:.5*(1-l),f=Math.max(0,Math.floor(r*(1-c)*u));return{left:Math.max(0,Math.floor(r*(1-c)*m)),right:f,distanceComponent:c}}var Wo=class{constructor(e){this.activeSources=new Map;this.contextController=e.context,this.registry=e.registry,this.playerEntity=e.playerEntity,this.channels=Vo(e.playerEntity),this.listener=e.listener??{origin:As,right:{x:1,y:0,z:0}},this.sfxVolume=e.sfxVolume??1,this.masterVolume=e.masterVolume??1,this.resolveOcclusion=e.resolveOcclusion,this.graph=Oo(this.contextController),this.graph.master.gain.value=this.masterVolume}setListener(e){this.listener=e}setMasterVolume(e){this.masterVolume=e,this.graph.master.gain.value=e}setSfxVolume(e){this.sfxVolume=e}async ensureRunning(){await this.contextController.resume()}play(e){let r=this.registry.get(e.soundIndex);if(!r)return;let n=this.graph.context,o=n.currentTime*1e3,i=Uo(this.channels,e.entity,e.channel,{nowMs:o,playerEntity:this.playerEntity});if(i===void 0)return;let s=this.activeSources.get(i);s&&(s.source.onended=null,s.source.stop(),this.activeSources.delete(i));let a=n.createBufferSource();a.buffer=r,a.loop=e.looping??!1;let c=e.origin??this.listener.origin,l=n.createGain(),d=this.createPanner(n,e.attenuation),u=this.resolveOcclusion?.(this.listener,c,e.attenuation),m=ka(u?.gainScale??1),f=this.resolveOcclusion?this.createOcclusionFilter(n,u?.lowpassHz??2e4):void 0;this.applyOriginToPanner(d,c);let h=e.entity===this.playerEntity,y=Go(c,this.listener,e.volume,e.attenuation,h),x=(e.volume===0?0:Math.max(y.left,y.right)/Math.max(1,e.volume))*(e.volume/255)*this.masterVolume*this.sfxVolume;l.gain.value=x*m;let M=n.currentTime+(e.timeOffsetMs??0)/1e3,v=(e.looping?Number.POSITIVE_INFINITY:r.duration*1e3)+M*1e3;a.connect(d),f?(d.connect(f),f.connect(l)):d.connect(l),l.connect(this.graph.master),a.start(M),a.onended=()=>{this.channels[i].active=!1,this.activeSources.delete(i)};let S={channelIndex:i,entnum:e.entity,entchannel:Fn(e.channel),endTimeMs:v,source:a,panner:d,gain:l,baseGain:x,origin:c,attenuation:e.attenuation,occlusion:f?{scale:m,lowpassHz:u?.lowpassHz,filter:f}:u?{scale:m,lowpassHz:u.lowpassHz}:void 0};return this.channels[i]={entnum:e.entity,entchannel:Fn(e.channel),endTimeMs:v,isPlayer:e.entity===this.playerEntity,active:!0},this.activeSources.set(i,S),S}stop(e){let r=this.activeSources.get(e);r&&(r.source.stop(),this.channels[e].active=!1,this.activeSources.delete(e))}stopEntitySounds(e){for(let[r,n]of[...this.activeSources.entries()])n.entnum===e&&(n.source.stop(),this.channels[r].active=!1,this.activeSources.delete(r))}updateEntityPosition(e,r){for(let n of this.activeSources.values())if(n.entnum===e&&(this.applyOriginToPanner(n.panner,r),n.origin=r,this.resolveOcclusion)){let o=this.resolveOcclusion(this.listener,r,n.attenuation);this.applyOcclusion(n,o)}}positionedSound(e,r,n,o){return this.play({entity:0,channel:0,soundIndex:r,volume:n,attenuation:o,origin:e})}ambientSound(e,r,n){return this.play({entity:0,channel:0,soundIndex:r,volume:n,attenuation:0,origin:e,looping:!0})}getChannelState(e){return this.channels[e]}getDiagnostics(){return{activeChannels:this.activeSources.size,masterVolume:this.masterVolume,sfxVolume:this.sfxVolume,channels:[...this.channels],activeSounds:[...this.activeSources.values()].map(e=>({entnum:e.entnum,entchannel:e.entchannel,channelIndex:e.channelIndex,origin:e.origin,gain:e.gain.gain.value,baseGain:e.baseGain,attenuation:e.attenuation,maxDistance:e.panner.maxDistance,distanceModel:e.panner.distanceModel,occlusion:e.occlusion?{scale:e.occlusion.scale,lowpassHz:e.occlusion.lowpassHz}:void 0}))}}setUnderwater(e,r=400){let n=this.graph.filter;n&&(n.type="lowpass",n.Q.value=.707,n.frequency.value=e?r:2e4)}createPanner(e,r){let n=e.createPanner?e.createPanner():Object.assign(e.createGain(),{positionX:{value:this.listener.origin.x},positionY:{value:this.listener.origin.y},positionZ:{value:this.listener.origin.z}});return this.configurePanner(n,r)}configurePanner(e,r){let n=jt(r);return e.refDistance=80,e.maxDistance=Do(r),e.rolloffFactor=n,e.distanceModel=r===0?"linear":"inverse",e.positionX.value=this.listener.origin.x,e.positionY.value=this.listener.origin.y,e.positionZ.value=this.listener.origin.z,e}applyOriginToPanner(e,r){e.positionX.value=r.x,e.positionY.value=r.y,e.positionZ.value=r.z}createOcclusionFilter(e,r){if(!e.createBiquadFilter)return;let n=e.createBiquadFilter();return n.type="lowpass",n.Q.value=.707,n.frequency.value=Wi(r,10,2e4),n}applyOcclusion(e,r){let n=ka(r?.gainScale??1);if(e.gain.gain.value=e.baseGain*n,e.occlusion?.filter){let o=r?.lowpassHz??2e4;e.occlusion.filter.frequency.value=Wi(o,10,2e4)}e.occlusion?(e.occlusion.scale=n,e.occlusion.lowpassHz=r?.lowpassHz):r&&(e.occlusion={scale:n,lowpassHz:r.lowpassHz})}},Wi=(t,e,r)=>Math.min(r,Math.max(e,t)),ka=t=>Wi(t,0,1);var Xo=class{constructor(e){this.createElement=e.createElement,this.resolveSource=e.resolveSource??(async r=>r),this.volume=e.volume??1}async play(e,{loop:r=!0,restart:n=!1}={}){if(this.track===e&&this.element){this.element.loop=r,this.element.volume=this.volume,n&&(this.element.currentTime=0),(this.element.paused||n)&&await this.element.play();return}let o=await this.resolveSource(e),i=this.createElement();i.src=o,i.loop=r,i.volume=this.volume,i.currentTime=0,i.load(),await i.play(),this.element=i,this.track=e}pause(){!this.element||this.element.paused||this.element.pause()}async resume(){!this.element||!this.element.paused||await this.element.play()}stop(){this.element&&(this.element.pause(),this.element.currentTime=0,this.element=void 0,this.track=void 0)}setVolume(e){this.volume=e,this.element&&(this.element.volume=e)}getState(){let e=!!(this.element&&!this.element.paused&&!this.element.ended),r=!!this.element?.paused;return{track:this.track,paused:r,playing:e,volume:this.volume}}};var qo=class{constructor(e){this.registry=e.registry,this.system=e.system,this.music=e.music}soundindex(e){return this.registry.registerName(e)}sound(e,r,n,o,i,s){this.system.play({entity:e,channel:r,soundIndex:n,volume:o,attenuation:i,timeOffsetMs:s})}positioned_sound(e,r,n,o){this.system.positionedSound(e,r,n,o)}loop_sound(e,r,n,o,i){this.system.play({entity:e,channel:r,soundIndex:n,volume:o,attenuation:i,looping:!0})}stop_entity_sounds(e){this.system.stopEntitySounds(e)}set_listener(e){this.system.setListener(e)}play_music(e,r=!0){return this.music?this.music.play(e,{loop:r}):Promise.resolve()}pause_music(){this.music?.pause()}resume_music(){return this.music?.resume()??Promise.resolve()}stop_music(){this.music?.stop()}set_music_volume(e){this.music?.setVolume(e)}play_ambient(e,r,n){this.system.ambientSound(e,r,n)}play_channel(e){this.system.play({...e})}};function Gl(t){t.enable(t.DEPTH_TEST),t.depthFunc(t.LEQUAL),t.enable(t.CULL_FACE),t.cullFace(t.BACK),t.enable(t.BLEND),t.blendFuncSeparate(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA,t.ONE,t.ONE_MINUS_SRC_ALPHA)}function Wl(t,e,r,n){for(let o of e){let i=t.getExtension(o);if(!i)throw new Error(`Missing required WebGL extension: ${o}`);n.set(o,i)}for(let o of r){let i=t.getExtension(o);i&&n.set(o,i)}}function Da(t,e={}){let{contextAttributes:r,requiredExtensions:n=[],optionalExtensions:o=[]}=e,i=t.getContext("webgl2",r??{antialias:!0});if(!i)throw new Error("WebGL2 not supported or failed to initialize");Gl(i);let s=new Map;Wl(i,n,o,s);let a=!1,c=new Set,l=new Set,d=m=>{a=!0,m.preventDefault();for(let f of c)f()},u=()=>{a=!1;for(let m of l)m()};return t.addEventListener("webglcontextlost",d),t.addEventListener("webglcontextrestored",u),{gl:i,extensions:s,isLost:()=>a,onLost(m){return c.add(m),()=>c.delete(m)},onRestored(m){return l.add(m),()=>l.delete(m)},dispose(){t.removeEventListener("webglcontextlost",d),t.removeEventListener("webglcontextrestored",u),c.clear(),l.clear(),s.clear()}}}function Ha(t,e,r){let n=t.createShader(e);if(!n)throw new Error("Failed to allocate shader");if(t.shaderSource(n,r),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS)){let i=t.getShaderInfoLog(n)??"Unknown shader compile failure";throw t.deleteShader(n),new Error(i)}return n}function Xl(t,e,r,n){let o=t.createProgram();if(!o)throw new Error("Failed to allocate shader program");if(t.attachShader(o,e),t.attachShader(o,r),n)for(let[s,a]of Object.entries(n))t.bindAttribLocation(o,a,s);if(t.linkProgram(o),!t.getProgramParameter(o,t.LINK_STATUS)){let s=t.getProgramInfoLog(o)??"Unknown shader link failure";throw t.deleteProgram(o),new Error(s)}return o}var ye=class t{constructor(e,r){this.uniformLocations=new Map;this.attributeLocations=new Map;this.gl=e,this.program=r}static create(e,r,n){let o=Ha(e,e.VERTEX_SHADER,r.vertex),i=Ha(e,e.FRAGMENT_SHADER,r.fragment);try{let s=Xl(e,o,i,n);return new t(e,s)}finally{e.deleteShader(o),e.deleteShader(i)}}use(){this.gl.useProgram(this.program)}getUniformLocation(e){if(!this.uniformLocations.has(e)){let r=this.gl.getUniformLocation(this.program,e);this.uniformLocations.set(e,r)}return this.uniformLocations.get(e)??null}getAttributeLocation(e){if(!this.attributeLocations.has(e)){let r=this.gl.getAttribLocation(this.program,e);this.attributeLocations.set(e,r)}return this.attributeLocations.get(e)??-1}dispose(){this.gl.deleteProgram(this.program),this.uniformLocations.clear(),this.attributeLocations.clear()}};function Oa(t,e,r){return ye.create(t,e,r)}var xe=class{constructor(e,r=e.STATIC_DRAW,n){this.gl=e,this.target=n??e.ARRAY_BUFFER;let o=e.createBuffer();if(!o)throw new Error("Failed to allocate buffer");this.buffer=o,e.bindBuffer(this.target,this.buffer),e.bufferData(this.target,0,r)}bind(){this.gl.bindBuffer(this.target,this.buffer)}upload(e,r=this.gl.STATIC_DRAW){this.bind(),this.gl.bufferData(this.target,e,r)}update(e,r=0){this.bind(),this.gl.bufferSubData(this.target,r,e)}dispose(){this.gl.deleteBuffer(this.buffer)}},De=class extends xe{constructor(e,r=e.STATIC_DRAW){super(e,r,e.ELEMENT_ARRAY_BUFFER)}},Se=class{constructor(e){this.gl=e;let r=e.createVertexArray();if(!r)throw new Error("Failed to allocate vertex array object");this.vao=r}bind(){this.gl.bindVertexArray(this.vao)}configureAttributes(e,r){this.bind(),r&&r.bind();for(let n of e)this.gl.enableVertexAttribArray(n.index),this.gl.vertexAttribPointer(n.index,n.size,n.type,n.normalized??!1,n.stride??0,n.offset??0),n.divisor!==void 0&&this.gl.vertexAttribDivisor(n.index,n.divisor)}dispose(){this.gl.deleteVertexArray(this.vao)}},Mr=class{constructor(e,r=e.TEXTURE_2D){this.width=0;this.height=0;this.gl=e,this.target=r;let n=e.createTexture();if(!n)throw new Error("Failed to allocate texture");this.texture=n}bind(e=0){this.gl.activeTexture(this.gl.TEXTURE0+e),this.gl.bindTexture(this.target,this.texture)}setParameters(e){this.bind(),e.wrapS!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_S,e.wrapS),e.wrapT!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_T,e.wrapT),e.minFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MIN_FILTER,e.minFilter),e.magFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MAG_FILTER,e.magFilter)}upload(e,r,n){this.width=e,this.height=r,this.uploadImage(0,this.gl.RGBA,e,r,0,this.gl.RGBA,this.gl.UNSIGNED_BYTE,n)}uploadImage(e,r,n,o,i,s,a,c){this.bind(),this.gl.texImage2D(this.target,e,r,n,o,i,s,a,c)}dispose(){this.gl.deleteTexture(this.texture)}},_r=class{constructor(e){this.gl=e,this.target=e.TEXTURE_CUBE_MAP;let r=e.createTexture();if(!r)throw new Error("Failed to allocate cubemap texture");this.texture=r}bind(e=0){this.gl.activeTexture(this.gl.TEXTURE0+e),this.gl.bindTexture(this.target,this.texture)}setParameters(e){this.bind(),e.wrapS!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_S,e.wrapS),e.wrapT!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_T,e.wrapT),e.minFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MIN_FILTER,e.minFilter),e.magFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MAG_FILTER,e.magFilter)}uploadFace(e,r,n,o,i,s,a,c,l){this.bind(),this.gl.texImage2D(e,r,n,o,i,s,a,c,l)}dispose(){this.gl.deleteTexture(this.texture)}},Yo=class{constructor(e){this.gl=e;let r=e.createFramebuffer();if(!r)throw new Error("Failed to allocate framebuffer");this.framebuffer=r}bind(e=this.gl.FRAMEBUFFER){this.gl.bindFramebuffer(e,this.framebuffer)}attachTexture2D(e,r,n=0){this.bind(),this.gl.framebufferTexture2D(this.gl.FRAMEBUFFER,e,r.target,r.texture,n)}dispose(){this.gl.deleteFramebuffer(this.framebuffer)}};var qi=4,Xi=7*qi,Yi=[{index:0,size:3,type:5126,stride:Xi,offset:0},{index:1,size:2,type:5126,stride:Xi,offset:3*qi},{index:2,size:2,type:5126,stride:Xi,offset:5*qi}];function ql(t,e){return{width:t,height:t,padding:e,data:new Uint8Array(t*t*4),cursorX:0,cursorY:0,rowHeight:0}}function Yl(t){let e=t.width*t.height;if(e===0)throw new Error("Invalid lightmap with zero area");let r=t.samples.byteLength/e;if(!Number.isInteger(r)||r<3||r>4)throw new Error("Unsupported lightmap channel count");return r}function jl(t,e,r){let n=Yl(r),o=t.width*4,i=e.x+t.padding,s=e.y+t.padding,a=0;for(let c=0;c<r.height;c++){let l=(s+c)*o+i*4;for(let d=0;d<r.width;d++){let u=l+d*4;t.data[u]=r.samples[a],t.data[u+1]=r.samples[a+1],t.data[u+2]=r.samples[a+2],t.data[u+3]=n===4?r.samples[a+3]:255,a+=n}}}function Kl(t,e,r){let n=e.width+r.lightmapPadding*2,o=e.height+r.lightmapPadding*2;if(n>r.atlasSize||o>r.atlasSize)throw new Error("Lightmap too large for atlas");for(let a of t){if(a.cursorX+n>a.width&&(a.cursorX=0,a.cursorY+=a.rowHeight+r.lightmapPadding,a.rowHeight=0),a.cursorY+o>a.height)continue;let c={atlasIndex:t.indexOf(a),x:a.cursorX,y:a.cursorY,width:e.width,height:e.height};return a.cursorX+=n+r.lightmapPadding,a.rowHeight=Math.max(a.rowHeight,o),{placement:c,atlas:a}}let i=ql(r.atlasSize,r.lightmapPadding);t.push(i);let s={atlasIndex:t.length-1,x:0,y:0,width:e.width,height:e.height};return i.cursorX=n+r.lightmapPadding,i.rowHeight=o,{placement:s,atlas:i}}function jo(t){return t instanceof Float32Array?t:new Float32Array(t)}function $l(t,e){if(!t){let n=new Uint16Array(e);for(let o=0;o<e;o++)n[o]=o;return n}return t instanceof Uint16Array?t:new Uint16Array(t)}function Ql(t,e){let r=new Float32Array(t.length);for(let n=0;n<t.length;n+=2)r[n]=e.offset[0]+t[n]*e.scale[0],r[n+1]=e.offset[1]+t[n+1]*e.scale[1];return r}function Jl(t,e){let r=jo(t.vertices),n=jo(t.textureCoords),o=e?Ql(jo(t.lightmapCoords??t.textureCoords),e):jo(t.lightmapCoords??new Float32Array(n.length)),i=r.length/3;if(n.length/2!==i)throw new Error("Texture coordinates count mismatch");if(o.length/2!==i)throw new Error("Lightmap coordinates count mismatch");let s=new Float32Array(i*7);for(let a=0;a<i;a++){let c=a*3,l=a*2,d=a*7;s[d]=r[c],s[d+1]=r[c+1],s[d+2]=r[c+2],s[d+3]=n[l],s[d+4]=n[l+1],s[d+5]=o[l],s[d+6]=o[l+1]}return s}function Na(t,e,r={}){let n={atlasSize:r.atlasSize??1024,lightmapPadding:r.lightmapPadding??1},o=[],i=new Map;e.forEach((c,l)=>{if(!c.lightmap)return;let{placement:d,atlas:u}=Kl(o,c.lightmap,n);jl(u,d,c.lightmap),i.set(l,{atlasIndex:d.atlasIndex,offset:[(d.x+n.lightmapPadding)/n.atlasSize,(d.y+n.lightmapPadding)/n.atlasSize],scale:[d.width/n.atlasSize,d.height/n.atlasSize]})});let s=o.map(c=>{let l=new Mr(t);return l.setParameters({wrapS:t.CLAMP_TO_EDGE,wrapT:t.CLAMP_TO_EDGE,minFilter:t.LINEAR,magFilter:t.LINEAR}),l.uploadImage(0,t.RGBA,c.width,c.height,0,t.RGBA,t.UNSIGNED_BYTE,c.data),{texture:l,width:c.width,height:c.height,pixels:c.data}});return{surfaces:e.map((c,l)=>{let d=i.get(l),u=Jl(c,d),m=$l(c.indices,u.length/7),f=new xe(t,t.STATIC_DRAW,t.ARRAY_BUFFER);f.upload(u);let h=new De(t,t.STATIC_DRAW);h.upload(m);let y=new Se(t);return y.configureAttributes(Yi,f),{vao:y,vertexBuffer:f,indexBuffer:h,indexCount:m.length,texture:c.texture,surfaceFlags:c.surfaceFlags??Tr,lightmap:d,vertexData:u,indexData:m}}),lightmaps:s}}function Ar(t){let{normal:e,distance:r}=t,n=Math.sqrt(e.x*e.x+e.y*e.y+e.z*e.z);if(n===0)return t;let o=1/n;return{normal:{x:e.x*o,y:e.y*o,z:e.z*o},distance:r*o}}function Ba(t){if(t.length!==16)throw new Error("View-projection matrix must contain 16 elements");let e=t[0],r=t[4],n=t[8],o=t[12],i=t[1],s=t[5],a=t[9],c=t[13],l=t[2],d=t[6],u=t[10],m=t[14],f=t[3],h=t[7],y=t[11],p=t[15];return[Ar({normal:{x:f+e,y:h+r,z:y+n},distance:p+o}),Ar({normal:{x:f-e,y:h-r,z:y-n},distance:p-o}),Ar({normal:{x:f+i,y:h+s,z:y+a},distance:p+c}),Ar({normal:{x:f-i,y:h-s,z:y-a},distance:p-c}),Ar({normal:{x:f+l,y:h+d,z:y+u},distance:p+m}),Ar({normal:{x:f-l,y:h-d,z:y-u},distance:p-m})]}function Zl(t,e){return t.normal.x*e.x+t.normal.y*e.y+t.normal.z*e.z+t.distance}function In(t,e,r){for(let n of r){let o=n.normal.x>=0?e.x:t.x,i=n.normal.y>=0?e.y:t.y,s=n.normal.z>=0?e.z:t.z;if(Zl(n,{x:o,y:i,z:s})<0)return!1}return!0}function Va(t){return t<0}function Ua(t){return-t-1}function Ga(t,e){return t.normal[0]*e.x+t.normal[1]*e.y+t.normal[2]*e.z-t.dist}function e0(t,e,r){if(!t||e<0||r<0)return!0;let n=Math.ceil(t.numClusters/8),o=t.clusters[e].pvs,i=Math.floor(r/8),s=1<<r%8;return i<0||i>=n?!1:(o[i]&s)!==0}function t0(t,e){let r={x:t.mins[0],y:t.mins[1],z:t.mins[2]},n={x:t.maxs[0],y:t.maxs[1],z:t.maxs[2]};return In(r,n,e)}function Ki(t,e){let r=0;for(;r>=0;){let n=t.nodes[r],o=t.planes[n.planeIndex],s=Ga(o,e)>=0?0:1,a=n.children[s];if(Va(a))return Ua(a);r=a}return-1}function r0(t,e){let r=t.leafs[e],n=[];for(let o=0;o<r.numLeafFaces;o+=1)n.push(t.leafLists.leafFaces[e][o]);return n}function ji(t,e,r,n,o,i,s){if(Va(e)){let m=Ua(e),f=t.leafs[m];if(!e0(t.visibility,o,f.cluster)||!t0(f,n))return;let h={x:(f.mins[0]+f.maxs[0])*.5,y:(f.mins[1]+f.maxs[1])*.5,z:(f.mins[2]+f.maxs[2])*.5},y=h.x-r.x,p=h.y-r.y,x=h.z-r.z,M=-(y*y+p*p+x*x);for(let v of r0(t,m))s.has(v)||(s.add(v),i.push({faceIndex:v,leafIndex:m,sortKey:M}));return}let a=t.nodes[e],c=t.planes[a.planeIndex],l=Ga(c,r),d=l>=0?a.children[0]:a.children[1],u=l>=0?a.children[1]:a.children[0];In({x:a.mins[0],y:a.mins[1],z:a.mins[2]},{x:a.maxs[0],y:a.maxs[1],z:a.maxs[2]},n)&&(ji(t,d,r,n,o,i,s),ji(t,u,r,n,o,i,s))}function Wa(t,e,r){let n=Ki(t,e),o=n>=0?t.leafs[n].cluster:-1,i=[];return ji(t,0,e,r,o,i,new Set),i}var $i=`#version 300 es
142
142
  precision highp float;
143
143
 
144
144
  layout(location = 0) in vec3 a_position;
@@ -197,7 +197,7 @@ void main() {
197
197
  }
198
198
 
199
199
  o_color = vec4(base.rgb, base.a * u_alpha);
200
- }`,Xa=[0,255,255,255];function Ji(t=Xa,e=[]){let r=new Float32Array(4);for(let n=0;n<4;n+=1){let o=t[n]??255;if(o===255){r[n]=0;continue}let i=e[o];r[n]=i!==void 0?i:1}return r}function n0(t){return[-(t*.25%1),0]}function Zi(t=Tr,e=0){let r=(t&Is)!==0,n=(t&Ts)!==0,o=(t&Cs)!==0,i=(t&Ps)!==0,s=(t&Fs)!==0,a=i?.33:s?.66:1,c=i||s,l=!c&&!o,d=r?n0(e):[0,0];return{alpha:a,blend:c,depthWrite:l,warp:n,flowOffset:d,sky:o}}var Ko=class{constructor(e){this.gl=e,this.program=he.create(e,{vertex:$i,fragment:Qi},{a_position:0,a_texCoord:1,a_lightmapCoord:2}),this.uniformMvp=this.program.getUniformLocation("u_modelViewProjection"),this.uniformTexScroll=this.program.getUniformLocation("u_texScroll"),this.uniformLmScroll=this.program.getUniformLocation("u_lightmapScroll"),this.uniformLightStyles=this.program.getUniformLocation("u_lightStyleFactors"),this.uniformAlpha=this.program.getUniformLocation("u_alpha"),this.uniformApplyLightmap=this.program.getUniformLocation("u_applyLightmap"),this.uniformWarp=this.program.getUniformLocation("u_warp"),this.uniformDiffuse=this.program.getUniformLocation("u_diffuseMap"),this.uniformLightmap=this.program.getUniformLocation("u_lightmapAtlas"),this.uniformTime=this.program.getUniformLocation("u_time")}bind(e){let{modelViewProjection:r,styleIndices:n=Xa,styleValues:o=[],diffuseSampler:i=0,lightmapSampler:s,surfaceFlags:a=Tr,timeSeconds:c=0}=e,l=Zi(a,c),d=Ji(n,o);this.program.use(),this.gl.uniformMatrix4fv(this.uniformMvp,!1,r),this.gl.uniform2f(this.uniformTexScroll,l.flowOffset[0],l.flowOffset[1]),this.gl.uniform2f(this.uniformLmScroll,l.flowOffset[0],l.flowOffset[1]),this.gl.uniform4fv(this.uniformLightStyles,d),this.gl.uniform1f(this.uniformAlpha,l.alpha);let u=!l.sky&&s!==void 0;return this.gl.uniform1i(this.uniformApplyLightmap,u?1:0),this.gl.uniform1i(this.uniformWarp,l.warp?1:0),this.gl.uniform1f(this.uniformTime,c),this.gl.uniform1i(this.uniformDiffuse,i),this.gl.uniform1i(this.uniformLightmap,s??0),l}dispose(){this.program.dispose()}};function qa(t,e){t.depthMask(e.depthWrite),e.blend?(t.enable(t.BLEND),t.blendFunc(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA)):t.disable(t.BLEND)}var Ya=new Float32Array([-1,-1,1,1,-1,1,1,1,1,-1,-1,1,1,1,1,-1,1,1,-1,-1,-1,-1,1,-1,1,1,-1,-1,-1,-1,1,1,-1,1,-1,-1,-1,-1,-1,-1,-1,1,-1,1,1,-1,-1,-1,-1,1,1,-1,1,-1,1,-1,-1,1,1,-1,1,1,1,1,-1,-1,1,1,1,1,-1,1,-1,1,-1,-1,1,1,1,1,1,-1,1,-1,1,1,1,1,1,-1,-1,-1,-1,1,-1,-1,1,-1,1,-1,-1,-1,1,-1,1,-1,-1,1]),es=`#version 300 es
200
+ }`,Xa=[0,255,255,255];function Ji(t=Xa,e=[]){let r=new Float32Array(4);for(let n=0;n<4;n+=1){let o=t[n]??255;if(o===255){r[n]=0;continue}let i=e[o];r[n]=i!==void 0?i:1}return r}function n0(t){return[-(t*.25%1),0]}function Zi(t=Tr,e=0){let r=(t&Is)!==0,n=(t&Ts)!==0,o=(t&Cs)!==0,i=(t&Ps)!==0,s=(t&Fs)!==0,a=i?.33:s?.66:1,c=i||s,l=!c&&!o,d=r?n0(e):[0,0];return{alpha:a,blend:c,depthWrite:l,warp:n,flowOffset:d,sky:o}}var Ko=class{constructor(e){this.gl=e,this.program=ye.create(e,{vertex:$i,fragment:Qi},{a_position:0,a_texCoord:1,a_lightmapCoord:2}),this.uniformMvp=this.program.getUniformLocation("u_modelViewProjection"),this.uniformTexScroll=this.program.getUniformLocation("u_texScroll"),this.uniformLmScroll=this.program.getUniformLocation("u_lightmapScroll"),this.uniformLightStyles=this.program.getUniformLocation("u_lightStyleFactors"),this.uniformAlpha=this.program.getUniformLocation("u_alpha"),this.uniformApplyLightmap=this.program.getUniformLocation("u_applyLightmap"),this.uniformWarp=this.program.getUniformLocation("u_warp"),this.uniformDiffuse=this.program.getUniformLocation("u_diffuseMap"),this.uniformLightmap=this.program.getUniformLocation("u_lightmapAtlas"),this.uniformTime=this.program.getUniformLocation("u_time")}bind(e){let{modelViewProjection:r,styleIndices:n=Xa,styleValues:o=[],diffuseSampler:i=0,lightmapSampler:s,surfaceFlags:a=Tr,timeSeconds:c=0}=e,l=Zi(a,c),d=Ji(n,o);this.program.use(),this.gl.uniformMatrix4fv(this.uniformMvp,!1,r),this.gl.uniform2f(this.uniformTexScroll,l.flowOffset[0],l.flowOffset[1]),this.gl.uniform2f(this.uniformLmScroll,l.flowOffset[0],l.flowOffset[1]),this.gl.uniform4fv(this.uniformLightStyles,d),this.gl.uniform1f(this.uniformAlpha,l.alpha);let u=!l.sky&&s!==void 0;return this.gl.uniform1i(this.uniformApplyLightmap,u?1:0),this.gl.uniform1i(this.uniformWarp,l.warp?1:0),this.gl.uniform1f(this.uniformTime,c),this.gl.uniform1i(this.uniformDiffuse,i),this.gl.uniform1i(this.uniformLightmap,s??0),l}dispose(){this.program.dispose()}};function qa(t,e){t.depthMask(e.depthWrite),e.blend?(t.enable(t.BLEND),t.blendFunc(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA)):t.disable(t.BLEND)}var Ya=new Float32Array([-1,-1,1,1,-1,1,1,1,1,-1,-1,1,1,1,1,-1,1,1,-1,-1,-1,-1,1,-1,1,1,-1,-1,-1,-1,1,1,-1,1,-1,-1,-1,-1,-1,-1,-1,1,-1,1,1,-1,-1,-1,-1,1,1,-1,1,-1,1,-1,-1,1,1,-1,1,1,1,1,-1,-1,1,1,1,1,-1,1,-1,1,-1,-1,1,1,1,1,1,-1,1,-1,1,1,1,1,1,-1,-1,-1,-1,1,-1,-1,1,-1,1,-1,-1,-1,1,-1,1,-1,-1,1]),es=`#version 300 es
201
201
  precision highp float;
202
202
 
203
203
  layout(location = 0) in vec3 a_position;
@@ -222,7 +222,7 @@ out vec4 o_color;
222
222
 
223
223
  void main() {
224
224
  o_color = texture(u_skybox, v_direction);
225
- }`,$o=class{constructor(e){this.gl=e,this.program=he.create(e,{vertex:es,fragment:ts},{a_position:0}),this.vao=new be(e),this.vbo=new ye(e,e.STATIC_DRAW),this.vbo.upload(Ya,e.STATIC_DRAW);let r=[{index:0,size:3,type:e.FLOAT,stride:12,offset:0}];this.vao.configureAttributes(r,this.vbo),this.uniformViewProj=this.program.getUniformLocation("u_viewProjectionNoTranslation"),this.uniformScroll=this.program.getUniformLocation("u_scroll"),this.uniformSampler=this.program.getUniformLocation("u_skybox"),this.cubemap=new _r(e),this.cubemap.setParameters({minFilter:e.LINEAR,magFilter:e.LINEAR,wrapS:e.CLAMP_TO_EDGE,wrapT:e.CLAMP_TO_EDGE})}bind(e){let{viewProjection:r,scroll:n,textureUnit:o=0}=e;this.program.use(),this.gl.depthMask(!1),this.gl.uniformMatrix4fv(this.uniformViewProj,!1,r),this.gl.uniform2f(this.uniformScroll,n[0],n[1]),this.gl.uniform1i(this.uniformSampler,o),this.cubemap.bind(o),this.vao.bind()}draw(){this.gl.drawArrays(this.gl.TRIANGLES,0,Ya.length/3)}dispose(){this.vbo.dispose(),this.vao.dispose(),this.cubemap.dispose(),this.program.dispose()}};function ja(t){let e=new Float32Array(t);return e[12]=0,e[13]=0,e[14]=0,e}function Ka(t,e=[.01,.02]){let[r,n]=e;return[r*t,n*t]}var ns=`#version 300 es
225
+ }`,$o=class{constructor(e){this.gl=e,this.program=ye.create(e,{vertex:es,fragment:ts},{a_position:0}),this.vao=new Se(e),this.vbo=new xe(e,e.STATIC_DRAW),this.vbo.upload(Ya,e.STATIC_DRAW);let r=[{index:0,size:3,type:e.FLOAT,stride:12,offset:0}];this.vao.configureAttributes(r,this.vbo),this.uniformViewProj=this.program.getUniformLocation("u_viewProjectionNoTranslation"),this.uniformScroll=this.program.getUniformLocation("u_scroll"),this.uniformSampler=this.program.getUniformLocation("u_skybox"),this.cubemap=new _r(e),this.cubemap.setParameters({minFilter:e.LINEAR,magFilter:e.LINEAR,wrapS:e.CLAMP_TO_EDGE,wrapT:e.CLAMP_TO_EDGE})}bind(e){let{viewProjection:r,scroll:n,textureUnit:o=0}=e;this.program.use(),this.gl.depthMask(!1),this.gl.uniformMatrix4fv(this.uniformViewProj,!1,r),this.gl.uniform2f(this.uniformScroll,n[0],n[1]),this.gl.uniform1i(this.uniformSampler,o),this.cubemap.bind(o),this.vao.bind()}draw(){this.gl.drawArrays(this.gl.TRIANGLES,0,Ya.length/3)}dispose(){this.vbo.dispose(),this.vao.dispose(),this.cubemap.dispose(),this.program.dispose()}};function ja(t){let e=new Float32Array(t);return e[12]=0,e[13]=0,e[14]=0,e}function Ka(t,e=[.01,.02]){let[r,n]=e;return[r*t,n*t]}var ns=`#version 300 es
226
226
  precision highp float;
227
227
 
228
228
  layout(location = 0) in vec3 a_position;
@@ -254,7 +254,7 @@ out vec4 o_color;
254
254
  void main() {
255
255
  vec4 albedo = texture(u_diffuseMap, v_texCoord) * u_tint;
256
256
  o_color = vec4(albedo.rgb * v_light, albedo.a);
257
- }`;function o0(t){let e=t.x*t.x+t.y*t.y+t.z*t.z;if(e<=0)return{x:0,y:0,z:1};let r=1/Math.sqrt(e);return{x:t.x*r,y:t.y*r,z:t.z*r}}function rs(t,e,r){return t+(e-t)*r}function $a(t,e,r){return{x:rs(t.x,e.x,r),y:rs(t.y,e.y,r),z:rs(t.z,e.z,r)}}function i0(t,e,r){return[t/r.skinWidth,1-e/r.skinHeight]}function is(t){if(t.glCommands.length===0){let n=[],o=[];return t.triangles.forEach(i=>{let s=n.length;for(let a=0;a<3;a+=1){let c=i.vertexIndices[a],l=i.texCoordIndices[a],d=t.texCoords[l];n.push({vertexIndex:c,texCoord:i0(d.s,d.t,t.header)})}o.push(s,s+1,s+2)}),{vertices:n,indices:new Uint16Array(o)}}let e=[],r=[];for(let n of t.glCommands){let o=e.length;if(e.push(...n.vertices.map(i=>({vertexIndex:i.vertexIndex,texCoord:[i.s,1-i.t]}))),n.mode==="strip")for(let i=0;i<n.vertices.length-2;i+=1){let s=i%2===0,a=o+i+(s?0:1),c=o+i+(s?1:0),l=o+i+2;r.push(a,c,l)}else for(let i=1;i<n.vertices.length-1;i+=1)r.push(o,o+i,o+i+1)}return{vertices:e,indices:new Uint16Array(r)}}function ss(t,e,r){let{currentFrame:n,nextFrame:o,lerp:i}=r,s=t.frames[n],a=t.frames[o];if(!s||!a)throw new Error("Requested MD2 frames are out of range");let c=new Float32Array(e.vertices.length*8);return e.vertices.forEach((l,d)=>{let u=s.vertices[l.vertexIndex],m=a.vertices[l.vertexIndex];if(!u||!m)throw new Error("MD2 vertex index out of range for frame");let f=$a(u.position,m.position,i),h=o0($a(u.normal,m.normal,i)),y=d*8;c[y]=f.x,c[y+1]=f.y,c[y+2]=f.z,c[y+3]=h.x,c[y+4]=h.y,c[y+5]=h.z,c[y+6]=l.texCoord[0],c[y+7]=l.texCoord[1]}),c}var Qo=class{constructor(e,r,n){this.gl=e,this.geometry=is(r),this.vertexBuffer=new ye(e,e.STATIC_DRAW),this.indexBuffer=new ke(e,e.STATIC_DRAW),this.vertexArray=new be(e),this.indexCount=this.geometry.indices.length,this.vertexArray.configureAttributes([{index:0,size:3,type:e.FLOAT,stride:32,offset:0},{index:1,size:3,type:e.FLOAT,stride:32,offset:12},{index:2,size:2,type:e.FLOAT,stride:32,offset:24}],this.vertexBuffer),this.vertexArray.bind(),this.indexBuffer.bind(),this.indexBuffer.upload(this.geometry.indices,e.STATIC_DRAW),this.update(r,n)}update(e,r){let n=ss(e,this.geometry,r);this.vertexBuffer.upload(n,this.gl.STATIC_DRAW)}bind(){this.vertexArray.bind(),this.indexBuffer.bind()}dispose(){this.vertexBuffer.dispose(),this.indexBuffer.dispose(),this.vertexArray.dispose()}},Jo=class{constructor(e){this.gl=e,this.program=he.create(e,{vertex:ns,fragment:os},{a_position:0,a_normal:1,a_texCoord:2}),this.uniformMvp=this.program.getUniformLocation("u_modelViewProjection"),this.uniformLightDir=this.program.getUniformLocation("u_lightDir"),this.uniformTint=this.program.getUniformLocation("u_tint"),this.uniformDiffuse=this.program.getUniformLocation("u_diffuseMap")}bind(e){let{modelViewProjection:r,lightDirection:n=[0,0,1],tint:o=[1,1,1,1],diffuseSampler:i=0}=e,s=new Float32Array(n),a=new Float32Array(o);this.program.use(),this.gl.uniformMatrix4fv(this.uniformMvp,!1,r),this.gl.uniform3fv(this.uniformLightDir,s),this.gl.uniform4fv(this.uniformTint,a),this.gl.uniform1i(this.uniformDiffuse,i)}draw(e){e.bind(),this.gl.drawElements(this.gl.TRIANGLES,e.indexCount,this.gl.UNSIGNED_SHORT,0)}dispose(){this.program.dispose()}};var Y=1e-6,De=typeof Float32Array<"u"?Float32Array:Array,as=Math.random;function Zo(t){return t>=0?Math.round(t):t%.5===0?Math.floor(t):Math.round(t)}var Fh=Math.PI/180,Ih=180/Math.PI;var ne={};ii(ne,{add:()=>W0,adjoint:()=>f0,clone:()=>a0,copy:()=>c0,create:()=>s0,decompose:()=>T0,determinant:()=>p0,equals:()=>j0,exactEquals:()=>Y0,frob:()=>G0,fromQuat:()=>I0,fromQuat2:()=>z0,fromRotation:()=>_0,fromRotationTranslation:()=>ec,fromRotationTranslationScale:()=>P0,fromRotationTranslationScaleOrigin:()=>F0,fromScaling:()=>M0,fromTranslation:()=>S0,fromValues:()=>l0,fromXRotation:()=>A0,fromYRotation:()=>w0,fromZRotation:()=>L0,frustum:()=>R0,getRotation:()=>C0,getScaling:()=>tc,getTranslation:()=>E0,identity:()=>Ja,invert:()=>m0,lookAt:()=>B0,mul:()=>K0,multiply:()=>Za,multiplyScalar:()=>X0,multiplyScalarAndAdd:()=>q0,ortho:()=>O0,orthoNO:()=>nc,orthoZO:()=>N0,perspective:()=>k0,perspectiveFromFieldOfView:()=>H0,perspectiveNO:()=>rc,perspectiveZO:()=>D0,rotate:()=>x0,rotateX:()=>g0,rotateY:()=>v0,rotateZ:()=>b0,scale:()=>y0,set:()=>d0,str:()=>U0,sub:()=>$0,subtract:()=>oc,targetTo:()=>V0,translate:()=>h0,transpose:()=>u0});function s0(){var t=new De(16);return De!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0),t[0]=1,t[5]=1,t[10]=1,t[15]=1,t}function a0(t){var e=new De(16);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}function c0(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}function l0(t,e,r,n,o,i,s,a,c,l,d,u,m,f,h,y){var p=new De(16);return p[0]=t,p[1]=e,p[2]=r,p[3]=n,p[4]=o,p[5]=i,p[6]=s,p[7]=a,p[8]=c,p[9]=l,p[10]=d,p[11]=u,p[12]=m,p[13]=f,p[14]=h,p[15]=y,p}function d0(t,e,r,n,o,i,s,a,c,l,d,u,m,f,h,y,p){return t[0]=e,t[1]=r,t[2]=n,t[3]=o,t[4]=i,t[5]=s,t[6]=a,t[7]=c,t[8]=l,t[9]=d,t[10]=u,t[11]=m,t[12]=f,t[13]=h,t[14]=y,t[15]=p,t}function Ja(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function u0(t,e){if(t===e){var r=e[1],n=e[2],o=e[3],i=e[6],s=e[7],a=e[11];t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=r,t[6]=e[9],t[7]=e[13],t[8]=n,t[9]=i,t[11]=e[14],t[12]=o,t[13]=s,t[14]=a}else t[0]=e[0],t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=e[1],t[5]=e[5],t[6]=e[9],t[7]=e[13],t[8]=e[2],t[9]=e[6],t[10]=e[10],t[11]=e[14],t[12]=e[3],t[13]=e[7],t[14]=e[11],t[15]=e[15];return t}function m0(t,e){var r=e[0],n=e[1],o=e[2],i=e[3],s=e[4],a=e[5],c=e[6],l=e[7],d=e[8],u=e[9],m=e[10],f=e[11],h=e[12],y=e[13],p=e[14],x=e[15],M=r*a-n*s,v=r*c-o*s,S=r*l-i*s,b=n*c-o*a,_=n*l-i*a,w=o*l-i*c,L=d*y-u*h,P=d*p-m*h,A=d*x-f*h,N=u*p-m*y,U=u*x-f*y,V=m*x-f*p,F=M*V-v*U+S*N+b*A-_*P+w*L;return F?(F=1/F,t[0]=(a*V-c*U+l*N)*F,t[1]=(o*U-n*V-i*N)*F,t[2]=(y*w-p*_+x*b)*F,t[3]=(m*_-u*w-f*b)*F,t[4]=(c*A-s*V-l*P)*F,t[5]=(r*V-o*A+i*P)*F,t[6]=(p*S-h*w-x*v)*F,t[7]=(d*w-m*S+f*v)*F,t[8]=(s*U-a*A+l*L)*F,t[9]=(n*A-r*U-i*L)*F,t[10]=(h*_-y*S+x*M)*F,t[11]=(u*S-d*_-f*M)*F,t[12]=(a*P-s*N-c*L)*F,t[13]=(r*N-n*P+o*L)*F,t[14]=(y*v-h*b-p*M)*F,t[15]=(d*b-u*v+m*M)*F,t):null}function f0(t,e){var r=e[0],n=e[1],o=e[2],i=e[3],s=e[4],a=e[5],c=e[6],l=e[7],d=e[8],u=e[9],m=e[10],f=e[11],h=e[12],y=e[13],p=e[14],x=e[15],M=r*a-n*s,v=r*c-o*s,S=r*l-i*s,b=n*c-o*a,_=n*l-i*a,w=o*l-i*c,L=d*y-u*h,P=d*p-m*h,A=d*x-f*h,N=u*p-m*y,U=u*x-f*y,V=m*x-f*p;return t[0]=a*V-c*U+l*N,t[1]=o*U-n*V-i*N,t[2]=y*w-p*_+x*b,t[3]=m*_-u*w-f*b,t[4]=c*A-s*V-l*P,t[5]=r*V-o*A+i*P,t[6]=p*S-h*w-x*v,t[7]=d*w-m*S+f*v,t[8]=s*U-a*A+l*L,t[9]=n*A-r*U-i*L,t[10]=h*_-y*S+x*M,t[11]=u*S-d*_-f*M,t[12]=a*P-s*N-c*L,t[13]=r*N-n*P+o*L,t[14]=y*v-h*b-p*M,t[15]=d*b-u*v+m*M,t}function p0(t){var e=t[0],r=t[1],n=t[2],o=t[3],i=t[4],s=t[5],a=t[6],c=t[7],l=t[8],d=t[9],u=t[10],m=t[11],f=t[12],h=t[13],y=t[14],p=t[15],x=e*s-r*i,M=e*a-n*i,v=r*a-n*s,S=l*h-d*f,b=l*y-u*f,_=d*y-u*h,w=e*_-r*b+n*S,L=i*_-s*b+a*S,P=l*v-d*M+u*x,A=f*v-h*M+y*x;return c*w-o*L+p*P-m*A}function Za(t,e,r){var n=e[0],o=e[1],i=e[2],s=e[3],a=e[4],c=e[5],l=e[6],d=e[7],u=e[8],m=e[9],f=e[10],h=e[11],y=e[12],p=e[13],x=e[14],M=e[15],v=r[0],S=r[1],b=r[2],_=r[3];return t[0]=v*n+S*a+b*u+_*y,t[1]=v*o+S*c+b*m+_*p,t[2]=v*i+S*l+b*f+_*x,t[3]=v*s+S*d+b*h+_*M,v=r[4],S=r[5],b=r[6],_=r[7],t[4]=v*n+S*a+b*u+_*y,t[5]=v*o+S*c+b*m+_*p,t[6]=v*i+S*l+b*f+_*x,t[7]=v*s+S*d+b*h+_*M,v=r[8],S=r[9],b=r[10],_=r[11],t[8]=v*n+S*a+b*u+_*y,t[9]=v*o+S*c+b*m+_*p,t[10]=v*i+S*l+b*f+_*x,t[11]=v*s+S*d+b*h+_*M,v=r[12],S=r[13],b=r[14],_=r[15],t[12]=v*n+S*a+b*u+_*y,t[13]=v*o+S*c+b*m+_*p,t[14]=v*i+S*l+b*f+_*x,t[15]=v*s+S*d+b*h+_*M,t}function h0(t,e,r){var n=r[0],o=r[1],i=r[2],s,a,c,l,d,u,m,f,h,y,p,x;return e===t?(t[12]=e[0]*n+e[4]*o+e[8]*i+e[12],t[13]=e[1]*n+e[5]*o+e[9]*i+e[13],t[14]=e[2]*n+e[6]*o+e[10]*i+e[14],t[15]=e[3]*n+e[7]*o+e[11]*i+e[15]):(s=e[0],a=e[1],c=e[2],l=e[3],d=e[4],u=e[5],m=e[6],f=e[7],h=e[8],y=e[9],p=e[10],x=e[11],t[0]=s,t[1]=a,t[2]=c,t[3]=l,t[4]=d,t[5]=u,t[6]=m,t[7]=f,t[8]=h,t[9]=y,t[10]=p,t[11]=x,t[12]=s*n+d*o+h*i+e[12],t[13]=a*n+u*o+y*i+e[13],t[14]=c*n+m*o+p*i+e[14],t[15]=l*n+f*o+x*i+e[15]),t}function y0(t,e,r){var n=r[0],o=r[1],i=r[2];return t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n,t[3]=e[3]*n,t[4]=e[4]*o,t[5]=e[5]*o,t[6]=e[6]*o,t[7]=e[7]*o,t[8]=e[8]*i,t[9]=e[9]*i,t[10]=e[10]*i,t[11]=e[11]*i,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}function x0(t,e,r,n){var o=n[0],i=n[1],s=n[2],a=Math.sqrt(o*o+i*i+s*s),c,l,d,u,m,f,h,y,p,x,M,v,S,b,_,w,L,P,A,N,U,V,F,K;return a<Y?null:(a=1/a,o*=a,i*=a,s*=a,c=Math.sin(r),l=Math.cos(r),d=1-l,u=e[0],m=e[1],f=e[2],h=e[3],y=e[4],p=e[5],x=e[6],M=e[7],v=e[8],S=e[9],b=e[10],_=e[11],w=o*o*d+l,L=i*o*d+s*c,P=s*o*d-i*c,A=o*i*d-s*c,N=i*i*d+l,U=s*i*d+o*c,V=o*s*d+i*c,F=i*s*d-o*c,K=s*s*d+l,t[0]=u*w+y*L+v*P,t[1]=m*w+p*L+S*P,t[2]=f*w+x*L+b*P,t[3]=h*w+M*L+_*P,t[4]=u*A+y*N+v*U,t[5]=m*A+p*N+S*U,t[6]=f*A+x*N+b*U,t[7]=h*A+M*N+_*U,t[8]=u*V+y*F+v*K,t[9]=m*V+p*F+S*K,t[10]=f*V+x*F+b*K,t[11]=h*V+M*F+_*K,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t)}function g0(t,e,r){var n=Math.sin(r),o=Math.cos(r),i=e[4],s=e[5],a=e[6],c=e[7],l=e[8],d=e[9],u=e[10],m=e[11];return e!==t&&(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[4]=i*o+l*n,t[5]=s*o+d*n,t[6]=a*o+u*n,t[7]=c*o+m*n,t[8]=l*o-i*n,t[9]=d*o-s*n,t[10]=u*o-a*n,t[11]=m*o-c*n,t}function v0(t,e,r){var n=Math.sin(r),o=Math.cos(r),i=e[0],s=e[1],a=e[2],c=e[3],l=e[8],d=e[9],u=e[10],m=e[11];return e!==t&&(t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=i*o-l*n,t[1]=s*o-d*n,t[2]=a*o-u*n,t[3]=c*o-m*n,t[8]=i*n+l*o,t[9]=s*n+d*o,t[10]=a*n+u*o,t[11]=c*n+m*o,t}function b0(t,e,r){var n=Math.sin(r),o=Math.cos(r),i=e[0],s=e[1],a=e[2],c=e[3],l=e[4],d=e[5],u=e[6],m=e[7];return e!==t&&(t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=i*o+l*n,t[1]=s*o+d*n,t[2]=a*o+u*n,t[3]=c*o+m*n,t[4]=l*o-i*n,t[5]=d*o-s*n,t[6]=u*o-a*n,t[7]=m*o-c*n,t}function S0(t,e){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=e[0],t[13]=e[1],t[14]=e[2],t[15]=1,t}function M0(t,e){return t[0]=e[0],t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=e[1],t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=e[2],t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function _0(t,e,r){var n=r[0],o=r[1],i=r[2],s=Math.sqrt(n*n+o*o+i*i),a,c,l;return s<Y?null:(s=1/s,n*=s,o*=s,i*=s,a=Math.sin(e),c=Math.cos(e),l=1-c,t[0]=n*n*l+c,t[1]=o*n*l+i*a,t[2]=i*n*l-o*a,t[3]=0,t[4]=n*o*l-i*a,t[5]=o*o*l+c,t[6]=i*o*l+n*a,t[7]=0,t[8]=n*i*l+o*a,t[9]=o*i*l-n*a,t[10]=i*i*l+c,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t)}function A0(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=n,t[6]=r,t[7]=0,t[8]=0,t[9]=-r,t[10]=n,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function w0(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=n,t[1]=0,t[2]=-r,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=r,t[9]=0,t[10]=n,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function L0(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=n,t[1]=r,t[2]=0,t[3]=0,t[4]=-r,t[5]=n,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function ec(t,e,r){var n=e[0],o=e[1],i=e[2],s=e[3],a=n+n,c=o+o,l=i+i,d=n*a,u=n*c,m=n*l,f=o*c,h=o*l,y=i*l,p=s*a,x=s*c,M=s*l;return t[0]=1-(f+y),t[1]=u+M,t[2]=m-x,t[3]=0,t[4]=u-M,t[5]=1-(d+y),t[6]=h+p,t[7]=0,t[8]=m+x,t[9]=h-p,t[10]=1-(d+f),t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t}function z0(t,e){var r=new De(3),n=-e[0],o=-e[1],i=-e[2],s=e[3],a=e[4],c=e[5],l=e[6],d=e[7],u=n*n+o*o+i*i+s*s;return u>0?(r[0]=(a*s+d*n+c*i-l*o)*2/u,r[1]=(c*s+d*o+l*n-a*i)*2/u,r[2]=(l*s+d*i+a*o-c*n)*2/u):(r[0]=(a*s+d*n+c*i-l*o)*2,r[1]=(c*s+d*o+l*n-a*i)*2,r[2]=(l*s+d*i+a*o-c*n)*2),ec(t,e,r),t}function E0(t,e){return t[0]=e[12],t[1]=e[13],t[2]=e[14],t}function tc(t,e){var r=e[0],n=e[1],o=e[2],i=e[4],s=e[5],a=e[6],c=e[8],l=e[9],d=e[10];return t[0]=Math.sqrt(r*r+n*n+o*o),t[1]=Math.sqrt(i*i+s*s+a*a),t[2]=Math.sqrt(c*c+l*l+d*d),t}function C0(t,e){var r=new De(3);tc(r,e);var n=1/r[0],o=1/r[1],i=1/r[2],s=e[0]*n,a=e[1]*o,c=e[2]*i,l=e[4]*n,d=e[5]*o,u=e[6]*i,m=e[8]*n,f=e[9]*o,h=e[10]*i,y=s+d+h,p=0;return y>0?(p=Math.sqrt(y+1)*2,t[3]=.25*p,t[0]=(u-f)/p,t[1]=(m-c)/p,t[2]=(a-l)/p):s>d&&s>h?(p=Math.sqrt(1+s-d-h)*2,t[3]=(u-f)/p,t[0]=.25*p,t[1]=(a+l)/p,t[2]=(m+c)/p):d>h?(p=Math.sqrt(1+d-s-h)*2,t[3]=(m-c)/p,t[0]=(a+l)/p,t[1]=.25*p,t[2]=(u+f)/p):(p=Math.sqrt(1+h-s-d)*2,t[3]=(a-l)/p,t[0]=(m+c)/p,t[1]=(u+f)/p,t[2]=.25*p),t}function T0(t,e,r,n){e[0]=n[12],e[1]=n[13],e[2]=n[14];var o=n[0],i=n[1],s=n[2],a=n[4],c=n[5],l=n[6],d=n[8],u=n[9],m=n[10];r[0]=Math.sqrt(o*o+i*i+s*s),r[1]=Math.sqrt(a*a+c*c+l*l),r[2]=Math.sqrt(d*d+u*u+m*m);var f=1/r[0],h=1/r[1],y=1/r[2],p=o*f,x=i*h,M=s*y,v=a*f,S=c*h,b=l*y,_=d*f,w=u*h,L=m*y,P=p+S+L,A=0;return P>0?(A=Math.sqrt(P+1)*2,t[3]=.25*A,t[0]=(b-w)/A,t[1]=(_-M)/A,t[2]=(x-v)/A):p>S&&p>L?(A=Math.sqrt(1+p-S-L)*2,t[3]=(b-w)/A,t[0]=.25*A,t[1]=(x+v)/A,t[2]=(_+M)/A):S>L?(A=Math.sqrt(1+S-p-L)*2,t[3]=(_-M)/A,t[0]=(x+v)/A,t[1]=.25*A,t[2]=(b+w)/A):(A=Math.sqrt(1+L-p-S)*2,t[3]=(x-v)/A,t[0]=(_+M)/A,t[1]=(b+w)/A,t[2]=.25*A),t}function P0(t,e,r,n){var o=e[0],i=e[1],s=e[2],a=e[3],c=o+o,l=i+i,d=s+s,u=o*c,m=o*l,f=o*d,h=i*l,y=i*d,p=s*d,x=a*c,M=a*l,v=a*d,S=n[0],b=n[1],_=n[2];return t[0]=(1-(h+p))*S,t[1]=(m+v)*S,t[2]=(f-M)*S,t[3]=0,t[4]=(m-v)*b,t[5]=(1-(u+p))*b,t[6]=(y+x)*b,t[7]=0,t[8]=(f+M)*_,t[9]=(y-x)*_,t[10]=(1-(u+h))*_,t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t}function F0(t,e,r,n,o){var i=e[0],s=e[1],a=e[2],c=e[3],l=i+i,d=s+s,u=a+a,m=i*l,f=i*d,h=i*u,y=s*d,p=s*u,x=a*u,M=c*l,v=c*d,S=c*u,b=n[0],_=n[1],w=n[2],L=o[0],P=o[1],A=o[2],N=(1-(y+x))*b,U=(f+S)*b,V=(h-v)*b,F=(f-S)*_,K=(1-(m+x))*_,xe=(p+M)*_,Ct=(h+v)*w,kn=(p-M)*w,zr=(1-(m+y))*w;return t[0]=N,t[1]=U,t[2]=V,t[3]=0,t[4]=F,t[5]=K,t[6]=xe,t[7]=0,t[8]=Ct,t[9]=kn,t[10]=zr,t[11]=0,t[12]=r[0]+L-(N*L+F*P+Ct*A),t[13]=r[1]+P-(U*L+K*P+kn*A),t[14]=r[2]+A-(V*L+xe*P+zr*A),t[15]=1,t}function I0(t,e){var r=e[0],n=e[1],o=e[2],i=e[3],s=r+r,a=n+n,c=o+o,l=r*s,d=n*s,u=n*a,m=o*s,f=o*a,h=o*c,y=i*s,p=i*a,x=i*c;return t[0]=1-u-h,t[1]=d+x,t[2]=m-p,t[3]=0,t[4]=d-x,t[5]=1-l-h,t[6]=f+y,t[7]=0,t[8]=m+p,t[9]=f-y,t[10]=1-l-u,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function R0(t,e,r,n,o,i,s){var a=1/(r-e),c=1/(o-n),l=1/(i-s);return t[0]=i*2*a,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=i*2*c,t[6]=0,t[7]=0,t[8]=(r+e)*a,t[9]=(o+n)*c,t[10]=(s+i)*l,t[11]=-1,t[12]=0,t[13]=0,t[14]=s*i*2*l,t[15]=0,t}function rc(t,e,r,n,o){var i=1/Math.tan(e/2);if(t[0]=i/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=i,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,o!=null&&o!==1/0){var s=1/(n-o);t[10]=(o+n)*s,t[14]=2*o*n*s}else t[10]=-1,t[14]=-2*n;return t}var k0=rc;function D0(t,e,r,n,o){var i=1/Math.tan(e/2);if(t[0]=i/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=i,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,o!=null&&o!==1/0){var s=1/(n-o);t[10]=o*s,t[14]=o*n*s}else t[10]=-1,t[14]=-n;return t}function H0(t,e,r,n){var o=Math.tan(e.upDegrees*Math.PI/180),i=Math.tan(e.downDegrees*Math.PI/180),s=Math.tan(e.leftDegrees*Math.PI/180),a=Math.tan(e.rightDegrees*Math.PI/180),c=2/(s+a),l=2/(o+i);return t[0]=c,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=l,t[6]=0,t[7]=0,t[8]=-((s-a)*c*.5),t[9]=(o-i)*l*.5,t[10]=n/(r-n),t[11]=-1,t[12]=0,t[13]=0,t[14]=n*r/(r-n),t[15]=0,t}function nc(t,e,r,n,o,i,s){var a=1/(e-r),c=1/(n-o),l=1/(i-s);return t[0]=-2*a,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*c,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*l,t[11]=0,t[12]=(e+r)*a,t[13]=(o+n)*c,t[14]=(s+i)*l,t[15]=1,t}var O0=nc;function N0(t,e,r,n,o,i,s){var a=1/(e-r),c=1/(n-o),l=1/(i-s);return t[0]=-2*a,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*c,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=l,t[11]=0,t[12]=(e+r)*a,t[13]=(o+n)*c,t[14]=i*l,t[15]=1,t}function B0(t,e,r,n){var o,i,s,a,c,l,d,u,m,f,h=e[0],y=e[1],p=e[2],x=n[0],M=n[1],v=n[2],S=r[0],b=r[1],_=r[2];return Math.abs(h-S)<Y&&Math.abs(y-b)<Y&&Math.abs(p-_)<Y?Ja(t):(d=h-S,u=y-b,m=p-_,f=1/Math.sqrt(d*d+u*u+m*m),d*=f,u*=f,m*=f,o=M*m-v*u,i=v*d-x*m,s=x*u-M*d,f=Math.sqrt(o*o+i*i+s*s),f?(f=1/f,o*=f,i*=f,s*=f):(o=0,i=0,s=0),a=u*s-m*i,c=m*o-d*s,l=d*i-u*o,f=Math.sqrt(a*a+c*c+l*l),f?(f=1/f,a*=f,c*=f,l*=f):(a=0,c=0,l=0),t[0]=o,t[1]=a,t[2]=d,t[3]=0,t[4]=i,t[5]=c,t[6]=u,t[7]=0,t[8]=s,t[9]=l,t[10]=m,t[11]=0,t[12]=-(o*h+i*y+s*p),t[13]=-(a*h+c*y+l*p),t[14]=-(d*h+u*y+m*p),t[15]=1,t)}function V0(t,e,r,n){var o=e[0],i=e[1],s=e[2],a=n[0],c=n[1],l=n[2],d=o-r[0],u=i-r[1],m=s-r[2],f=d*d+u*u+m*m;f>0&&(f=1/Math.sqrt(f),d*=f,u*=f,m*=f);var h=c*m-l*u,y=l*d-a*m,p=a*u-c*d;return f=h*h+y*y+p*p,f>0&&(f=1/Math.sqrt(f),h*=f,y*=f,p*=f),t[0]=h,t[1]=y,t[2]=p,t[3]=0,t[4]=u*p-m*y,t[5]=m*h-d*p,t[6]=d*y-u*h,t[7]=0,t[8]=d,t[9]=u,t[10]=m,t[11]=0,t[12]=o,t[13]=i,t[14]=s,t[15]=1,t}function U0(t){return"mat4("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+", "+t[4]+", "+t[5]+", "+t[6]+", "+t[7]+", "+t[8]+", "+t[9]+", "+t[10]+", "+t[11]+", "+t[12]+", "+t[13]+", "+t[14]+", "+t[15]+")"}function G0(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]+t[3]*t[3]+t[4]*t[4]+t[5]*t[5]+t[6]*t[6]+t[7]*t[7]+t[8]*t[8]+t[9]*t[9]+t[10]*t[10]+t[11]*t[11]+t[12]*t[12]+t[13]*t[13]+t[14]*t[14]+t[15]*t[15])}function W0(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t[3]=e[3]+r[3],t[4]=e[4]+r[4],t[5]=e[5]+r[5],t[6]=e[6]+r[6],t[7]=e[7]+r[7],t[8]=e[8]+r[8],t[9]=e[9]+r[9],t[10]=e[10]+r[10],t[11]=e[11]+r[11],t[12]=e[12]+r[12],t[13]=e[13]+r[13],t[14]=e[14]+r[14],t[15]=e[15]+r[15],t}function oc(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t[3]=e[3]-r[3],t[4]=e[4]-r[4],t[5]=e[5]-r[5],t[6]=e[6]-r[6],t[7]=e[7]-r[7],t[8]=e[8]-r[8],t[9]=e[9]-r[9],t[10]=e[10]-r[10],t[11]=e[11]-r[11],t[12]=e[12]-r[12],t[13]=e[13]-r[13],t[14]=e[14]-r[14],t[15]=e[15]-r[15],t}function X0(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t[4]=e[4]*r,t[5]=e[5]*r,t[6]=e[6]*r,t[7]=e[7]*r,t[8]=e[8]*r,t[9]=e[9]*r,t[10]=e[10]*r,t[11]=e[11]*r,t[12]=e[12]*r,t[13]=e[13]*r,t[14]=e[14]*r,t[15]=e[15]*r,t}function q0(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t[3]=e[3]+r[3]*n,t[4]=e[4]+r[4]*n,t[5]=e[5]+r[5]*n,t[6]=e[6]+r[6]*n,t[7]=e[7]+r[7]*n,t[8]=e[8]+r[8]*n,t[9]=e[9]+r[9]*n,t[10]=e[10]+r[10]*n,t[11]=e[11]+r[11]*n,t[12]=e[12]+r[12]*n,t[13]=e[13]+r[13]*n,t[14]=e[14]+r[14]*n,t[15]=e[15]+r[15]*n,t}function Y0(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]&&t[3]===e[3]&&t[4]===e[4]&&t[5]===e[5]&&t[6]===e[6]&&t[7]===e[7]&&t[8]===e[8]&&t[9]===e[9]&&t[10]===e[10]&&t[11]===e[11]&&t[12]===e[12]&&t[13]===e[13]&&t[14]===e[14]&&t[15]===e[15]}function j0(t,e){var r=t[0],n=t[1],o=t[2],i=t[3],s=t[4],a=t[5],c=t[6],l=t[7],d=t[8],u=t[9],m=t[10],f=t[11],h=t[12],y=t[13],p=t[14],x=t[15],M=e[0],v=e[1],S=e[2],b=e[3],_=e[4],w=e[5],L=e[6],P=e[7],A=e[8],N=e[9],U=e[10],V=e[11],F=e[12],K=e[13],xe=e[14],Ct=e[15];return Math.abs(r-M)<=Y*Math.max(1,Math.abs(r),Math.abs(M))&&Math.abs(n-v)<=Y*Math.max(1,Math.abs(n),Math.abs(v))&&Math.abs(o-S)<=Y*Math.max(1,Math.abs(o),Math.abs(S))&&Math.abs(i-b)<=Y*Math.max(1,Math.abs(i),Math.abs(b))&&Math.abs(s-_)<=Y*Math.max(1,Math.abs(s),Math.abs(_))&&Math.abs(a-w)<=Y*Math.max(1,Math.abs(a),Math.abs(w))&&Math.abs(c-L)<=Y*Math.max(1,Math.abs(c),Math.abs(L))&&Math.abs(l-P)<=Y*Math.max(1,Math.abs(l),Math.abs(P))&&Math.abs(d-A)<=Y*Math.max(1,Math.abs(d),Math.abs(A))&&Math.abs(u-N)<=Y*Math.max(1,Math.abs(u),Math.abs(N))&&Math.abs(m-U)<=Y*Math.max(1,Math.abs(m),Math.abs(U))&&Math.abs(f-V)<=Y*Math.max(1,Math.abs(f),Math.abs(V))&&Math.abs(h-F)<=Y*Math.max(1,Math.abs(h),Math.abs(F))&&Math.abs(y-K)<=Y*Math.max(1,Math.abs(y),Math.abs(K))&&Math.abs(p-xe)<=Y*Math.max(1,Math.abs(p),Math.abs(xe))&&Math.abs(x-Ct)<=Y*Math.max(1,Math.abs(x),Math.abs(Ct))}var K0=Za,$0=oc;var He={};ii(He,{add:()=>td,angle:()=>Ad,bezier:()=>yd,ceil:()=>rd,clone:()=>Q0,copy:()=>Z0,create:()=>ic,cross:()=>md,dist:()=>Fd,distance:()=>dc,div:()=>Pd,divide:()=>lc,dot:()=>cs,equals:()=>Ed,exactEquals:()=>zd,floor:()=>nd,forEach:()=>Dd,fromValues:()=>J0,hermite:()=>hd,inverse:()=>dd,len:()=>Rd,length:()=>sc,lerp:()=>fd,max:()=>id,min:()=>od,mul:()=>Td,multiply:()=>cc,negate:()=>ld,normalize:()=>ud,random:()=>xd,rotateX:()=>Sd,rotateY:()=>Md,rotateZ:()=>_d,round:()=>sd,scale:()=>ad,scaleAndAdd:()=>cd,set:()=>ed,slerp:()=>pd,sqrDist:()=>Id,sqrLen:()=>kd,squaredDistance:()=>uc,squaredLength:()=>mc,str:()=>Ld,sub:()=>Cd,subtract:()=>ac,transformMat3:()=>vd,transformMat4:()=>gd,transformQuat:()=>bd,zero:()=>wd});function ic(){var t=new De(3);return De!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t}function Q0(t){var e=new De(3);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function sc(t){var e=t[0],r=t[1],n=t[2];return Math.sqrt(e*e+r*r+n*n)}function J0(t,e,r){var n=new De(3);return n[0]=t,n[1]=e,n[2]=r,n}function Z0(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function ed(t,e,r,n){return t[0]=e,t[1]=r,t[2]=n,t}function td(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t}function ac(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t}function cc(t,e,r){return t[0]=e[0]*r[0],t[1]=e[1]*r[1],t[2]=e[2]*r[2],t}function lc(t,e,r){return t[0]=e[0]/r[0],t[1]=e[1]/r[1],t[2]=e[2]/r[2],t}function rd(t,e){return t[0]=Math.ceil(e[0]),t[1]=Math.ceil(e[1]),t[2]=Math.ceil(e[2]),t}function nd(t,e){return t[0]=Math.floor(e[0]),t[1]=Math.floor(e[1]),t[2]=Math.floor(e[2]),t}function od(t,e,r){return t[0]=Math.min(e[0],r[0]),t[1]=Math.min(e[1],r[1]),t[2]=Math.min(e[2],r[2]),t}function id(t,e,r){return t[0]=Math.max(e[0],r[0]),t[1]=Math.max(e[1],r[1]),t[2]=Math.max(e[2],r[2]),t}function sd(t,e){return t[0]=Zo(e[0]),t[1]=Zo(e[1]),t[2]=Zo(e[2]),t}function ad(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t}function cd(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t}function dc(t,e){var r=e[0]-t[0],n=e[1]-t[1],o=e[2]-t[2];return Math.sqrt(r*r+n*n+o*o)}function uc(t,e){var r=e[0]-t[0],n=e[1]-t[1],o=e[2]-t[2];return r*r+n*n+o*o}function mc(t){var e=t[0],r=t[1],n=t[2];return e*e+r*r+n*n}function ld(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t}function dd(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t}function ud(t,e){var r=e[0],n=e[1],o=e[2],i=r*r+n*n+o*o;return i>0&&(i=1/Math.sqrt(i)),t[0]=e[0]*i,t[1]=e[1]*i,t[2]=e[2]*i,t}function cs(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function md(t,e,r){var n=e[0],o=e[1],i=e[2],s=r[0],a=r[1],c=r[2];return t[0]=o*c-i*a,t[1]=i*s-n*c,t[2]=n*a-o*s,t}function fd(t,e,r,n){var o=e[0],i=e[1],s=e[2];return t[0]=o+n*(r[0]-o),t[1]=i+n*(r[1]-i),t[2]=s+n*(r[2]-s),t}function pd(t,e,r,n){var o=Math.acos(Math.min(Math.max(cs(e,r),-1),1)),i=Math.sin(o),s=Math.sin((1-n)*o)/i,a=Math.sin(n*o)/i;return t[0]=s*e[0]+a*r[0],t[1]=s*e[1]+a*r[1],t[2]=s*e[2]+a*r[2],t}function hd(t,e,r,n,o,i){var s=i*i,a=s*(2*i-3)+1,c=s*(i-2)+i,l=s*(i-1),d=s*(3-2*i);return t[0]=e[0]*a+r[0]*c+n[0]*l+o[0]*d,t[1]=e[1]*a+r[1]*c+n[1]*l+o[1]*d,t[2]=e[2]*a+r[2]*c+n[2]*l+o[2]*d,t}function yd(t,e,r,n,o,i){var s=1-i,a=s*s,c=i*i,l=a*s,d=3*i*a,u=3*c*s,m=c*i;return t[0]=e[0]*l+r[0]*d+n[0]*u+o[0]*m,t[1]=e[1]*l+r[1]*d+n[1]*u+o[1]*m,t[2]=e[2]*l+r[2]*d+n[2]*u+o[2]*m,t}function xd(t,e){e=e===void 0?1:e;var r=as()*2*Math.PI,n=as()*2-1,o=Math.sqrt(1-n*n)*e;return t[0]=Math.cos(r)*o,t[1]=Math.sin(r)*o,t[2]=n*e,t}function gd(t,e,r){var n=e[0],o=e[1],i=e[2],s=r[3]*n+r[7]*o+r[11]*i+r[15];return s=s||1,t[0]=(r[0]*n+r[4]*o+r[8]*i+r[12])/s,t[1]=(r[1]*n+r[5]*o+r[9]*i+r[13])/s,t[2]=(r[2]*n+r[6]*o+r[10]*i+r[14])/s,t}function vd(t,e,r){var n=e[0],o=e[1],i=e[2];return t[0]=n*r[0]+o*r[3]+i*r[6],t[1]=n*r[1]+o*r[4]+i*r[7],t[2]=n*r[2]+o*r[5]+i*r[8],t}function bd(t,e,r){var n=r[0],o=r[1],i=r[2],s=r[3],a=e[0],c=e[1],l=e[2],d=o*l-i*c,u=i*a-n*l,m=n*c-o*a;return d=d+d,u=u+u,m=m+m,t[0]=a+s*d+o*m-i*u,t[1]=c+s*u+i*d-n*m,t[2]=l+s*m+n*u-o*d,t}function Sd(t,e,r,n){var o=[],i=[];return o[0]=e[0]-r[0],o[1]=e[1]-r[1],o[2]=e[2]-r[2],i[0]=o[0],i[1]=o[1]*Math.cos(n)-o[2]*Math.sin(n),i[2]=o[1]*Math.sin(n)+o[2]*Math.cos(n),t[0]=i[0]+r[0],t[1]=i[1]+r[1],t[2]=i[2]+r[2],t}function Md(t,e,r,n){var o=[],i=[];return o[0]=e[0]-r[0],o[1]=e[1]-r[1],o[2]=e[2]-r[2],i[0]=o[2]*Math.sin(n)+o[0]*Math.cos(n),i[1]=o[1],i[2]=o[2]*Math.cos(n)-o[0]*Math.sin(n),t[0]=i[0]+r[0],t[1]=i[1]+r[1],t[2]=i[2]+r[2],t}function _d(t,e,r,n){var o=[],i=[];return o[0]=e[0]-r[0],o[1]=e[1]-r[1],o[2]=e[2]-r[2],i[0]=o[0]*Math.cos(n)-o[1]*Math.sin(n),i[1]=o[0]*Math.sin(n)+o[1]*Math.cos(n),i[2]=o[2],t[0]=i[0]+r[0],t[1]=i[1]+r[1],t[2]=i[2]+r[2],t}function Ad(t,e){var r=t[0],n=t[1],o=t[2],i=e[0],s=e[1],a=e[2],c=Math.sqrt((r*r+n*n+o*o)*(i*i+s*s+a*a)),l=c&&cs(t,e)/c;return Math.acos(Math.min(Math.max(l,-1),1))}function wd(t){return t[0]=0,t[1]=0,t[2]=0,t}function Ld(t){return"vec3("+t[0]+", "+t[1]+", "+t[2]+")"}function zd(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]}function Ed(t,e){var r=t[0],n=t[1],o=t[2],i=e[0],s=e[1],a=e[2];return Math.abs(r-i)<=Y*Math.max(1,Math.abs(r),Math.abs(i))&&Math.abs(n-s)<=Y*Math.max(1,Math.abs(n),Math.abs(s))&&Math.abs(o-a)<=Y*Math.max(1,Math.abs(o),Math.abs(a))}var Cd=ac,Td=cc,Pd=lc,Fd=dc,Id=uc,Rd=sc,kd=mc,Dd=(function(){var t=ic();return function(e,r,n,o,i,s){var a,c;for(r||(r=3),n||(n=0),o?c=Math.min(o*r+n,e.length):c=e.length,a=n;a<c;a+=r)t[0]=e[a],t[1]=e[a+1],t[2]=e[a+2],i(t,t,s),e[a]=t[0],e[a+1]=t[1],e[a+2]=t[2];return e}})();var ei=class{constructor(){this._position=He.create();this._angles=He.create();this._fov=90;this._aspect=1;this._near=.1;this._far=1e3;this._viewMatrix=ne.create();this._projectionMatrix=ne.create();this._viewProjectionMatrix=ne.create();this._dirty=!0}get position(){return this._position}set position(e){He.copy(this._position,e),this._dirty=!0}get angles(){return this._angles}set angles(e){He.copy(this._angles,e),this._dirty=!0}get fov(){return this._fov}set fov(e){this._fov=e,this._dirty=!0}get aspect(){return this._aspect}set aspect(e){this._aspect=e,this._dirty=!0}get viewMatrix(){return this.updateMatrices(),this._viewMatrix}get projectionMatrix(){return this.updateMatrices(),this._projectionMatrix}get viewProjectionMatrix(){return this.updateMatrices(),this._viewProjectionMatrix}getViewmodelProjectionMatrix(e){let r=ne.create();return ne.perspective(r,e*Qt,this._aspect,this._near,this._far),r}updateMatrices(){if(!this._dirty)return;ne.perspective(this._projectionMatrix,this._fov*Qt,this._aspect,this._near,this._far);let e=ne.fromValues(0,-1,0,0,0,0,1,0,-1,0,0,0,0,0,0,1),r=this._angles[0]*Qt,n=this._angles[1]*Qt,o=this._angles[2]*Qt,i=ne.create();ne.identity(i),ne.rotateZ(i,i,-n),ne.rotateY(i,i,-r),ne.rotateX(i,i,-o);let s=ne.create();ne.multiply(s,e,i);let a=He.negate(He.create(),this._position),c=He.create();He.transformMat4(c,a,i);let l=He.fromValues(c[1]||0,c[2]||0,c[0]||0);ne.copy(this._viewMatrix,s),this._viewMatrix[12]=l[0],this._viewMatrix[13]=l[1],this._viewMatrix[14]=l[2],ne.multiply(this._viewProjectionMatrix,this._projectionMatrix,this._viewMatrix),this._dirty=!1}};var Hd=[.2,.2,.2],Od={x:0,y:0,z:1},Nd=[.8,.8,.8];function ls(t,e,r){return t+(e-t)*r}function Lr(t,e,r){return{x:ls(t.x,e.x,r),y:ls(t.y,e.y,r),z:ls(t.z,e.z,r)}}function wr(t){return t<0?0:t>1?1:t}function ds(t){let e=[],r=[];for(let n of t.triangles){let o=e.length,[i,s,a]=n.indices,c=t.texCoords[i],l=t.texCoords[s],d=t.texCoords[a];if(!c||!l||!d)throw new Error(`Missing texCoord for triangle in surface ${t.name}`);e.push({vertexIndex:i,texCoord:[c.s,1-c.t]},{vertexIndex:s,texCoord:[l.s,1-l.t]},{vertexIndex:a,texCoord:[d.s,1-d.t]}),r.push(o,o+1,o+2)}return{vertices:e,indices:new Uint16Array(r)}}function Bd(t,e,r){let n=r?.ambient??Hd,o=r?.directional??{direction:Od,color:Nd},i=Oe(t),s=Oe(o.direction),a=wr(i.x*s.x+i.y*s.y+i.z*s.z),c=n[0]+o.color[0]*a,l=n[1]+o.color[1]*a,d=n[2]+o.color[2]*a;if(r?.dynamicLights){let u=r.modelMatrix?Ls(r.modelMatrix,e):e;for(let m of r.dynamicLights){let f=u.x-m.origin.x,h=u.y-m.origin.y,y=u.z-m.origin.z,p=f*f+h*h+y*y,x=m.radius*m.radius;if(p<x&&x>0){let M=1-Math.sqrt(p)/m.radius,v=Math.sqrt(p),S=v>0?wr(-(f*i.x+h*i.y+y*i.z)/v):0,b=wr(M*S);c+=m.color[0]*b,l+=m.color[1]*b,d+=m.color[2]*b}}}return[wr(c),wr(l),wr(d)]}function us(t,e,r,n){let o=t.vertices[r.currentFrame],i=t.vertices[r.nextFrame];if(!o||!i)throw new Error("Requested MD3 frames are out of range");let s=new Float32Array(e.vertices.length*12);return e.vertices.forEach((a,c)=>{let l=o[a.vertexIndex],d=i[a.vertexIndex];if(!l||!d)throw new Error(`Vertex index ${a.vertexIndex} missing for frame`);let u=Lr(l.position,d.position,r.lerp),m=Oe(Lr(l.normal,d.normal,r.lerp)),f=Bd(m,u,n),h=c*12;s[h]=u.x,s[h+1]=u.y,s[h+2]=u.z,s[h+3]=m.x,s[h+4]=m.y,s[h+5]=m.z,s[h+6]=a.texCoord[0],s[h+7]=a.texCoord[1],s[h+8]=f[0],s[h+9]=f[1],s[h+10]=f[2],s[h+11]=1}),s}function fc(t,e,r){let n=t.tags[0];if(!n)return null;let o=n.findIndex(y=>y.name===r);if(o===-1)return null;let i=t.tags[e.currentFrame]?.[o],s=t.tags[e.nextFrame]?.[o];if(!i||!s)throw new Error(`Tag ${r} is missing for one of the interpolated frames`);let a=Lr(i.origin,s.origin,e.lerp),c=Oe(Lr(i.axis[0],s.axis[0],e.lerp)),l=Oe(Lr(i.axis[1],s.axis[1],e.lerp)),d=Oe(Lr(i.axis[2],s.axis[2],e.lerp)),u=c,m=Oe({x:l.x-u.x*(u.x*l.x+u.y*l.y+u.z*l.z),y:l.y-u.y*(u.x*l.x+u.y*l.y+u.z*l.z),z:l.z-u.z*(u.x*l.x+u.y*l.y+u.z*l.z)}),f=Oe({x:u.y*m.z-u.z*m.y,y:u.z*m.x-u.x*m.z,z:u.x*m.y-u.y*m.x}),h=[u,m,f];return{origin:a,axis:h,matrix:zs(a,h)}}var ms=`#version 300 es
257
+ }`;function o0(t){let e=t.x*t.x+t.y*t.y+t.z*t.z;if(e<=0)return{x:0,y:0,z:1};let r=1/Math.sqrt(e);return{x:t.x*r,y:t.y*r,z:t.z*r}}function rs(t,e,r){return t+(e-t)*r}function $a(t,e,r){return{x:rs(t.x,e.x,r),y:rs(t.y,e.y,r),z:rs(t.z,e.z,r)}}function i0(t,e,r){return[t/r.skinWidth,1-e/r.skinHeight]}function is(t){if(t.glCommands.length===0){let n=[],o=[];return t.triangles.forEach(i=>{let s=n.length;for(let a=0;a<3;a+=1){let c=i.vertexIndices[a],l=i.texCoordIndices[a],d=t.texCoords[l];n.push({vertexIndex:c,texCoord:i0(d.s,d.t,t.header)})}o.push(s,s+1,s+2)}),{vertices:n,indices:new Uint16Array(o)}}let e=[],r=[];for(let n of t.glCommands){let o=e.length;if(e.push(...n.vertices.map(i=>({vertexIndex:i.vertexIndex,texCoord:[i.s,1-i.t]}))),n.mode==="strip")for(let i=0;i<n.vertices.length-2;i+=1){let s=i%2===0,a=o+i+(s?0:1),c=o+i+(s?1:0),l=o+i+2;r.push(a,c,l)}else for(let i=1;i<n.vertices.length-1;i+=1)r.push(o,o+i,o+i+1)}return{vertices:e,indices:new Uint16Array(r)}}function ss(t,e,r){let{currentFrame:n,nextFrame:o,lerp:i}=r,s=t.frames[n],a=t.frames[o];if(!s||!a)throw new Error("Requested MD2 frames are out of range");let c=new Float32Array(e.vertices.length*8);return e.vertices.forEach((l,d)=>{let u=s.vertices[l.vertexIndex],m=a.vertices[l.vertexIndex];if(!u||!m)throw new Error("MD2 vertex index out of range for frame");let f=$a(u.position,m.position,i),h=o0($a(u.normal,m.normal,i)),y=d*8;c[y]=f.x,c[y+1]=f.y,c[y+2]=f.z,c[y+3]=h.x,c[y+4]=h.y,c[y+5]=h.z,c[y+6]=l.texCoord[0],c[y+7]=l.texCoord[1]}),c}var Qo=class{constructor(e,r,n){this.gl=e,this.geometry=is(r),this.vertexBuffer=new xe(e,e.STATIC_DRAW),this.indexBuffer=new De(e,e.STATIC_DRAW),this.vertexArray=new Se(e),this.indexCount=this.geometry.indices.length,this.vertexArray.configureAttributes([{index:0,size:3,type:e.FLOAT,stride:32,offset:0},{index:1,size:3,type:e.FLOAT,stride:32,offset:12},{index:2,size:2,type:e.FLOAT,stride:32,offset:24}],this.vertexBuffer),this.vertexArray.bind(),this.indexBuffer.bind(),this.indexBuffer.upload(this.geometry.indices,e.STATIC_DRAW),this.update(r,n)}update(e,r){let n=ss(e,this.geometry,r);this.vertexBuffer.upload(n,this.gl.STATIC_DRAW)}bind(){this.vertexArray.bind(),this.indexBuffer.bind()}dispose(){this.vertexBuffer.dispose(),this.indexBuffer.dispose(),this.vertexArray.dispose()}},Jo=class{constructor(e){this.gl=e,this.program=ye.create(e,{vertex:ns,fragment:os},{a_position:0,a_normal:1,a_texCoord:2}),this.uniformMvp=this.program.getUniformLocation("u_modelViewProjection"),this.uniformLightDir=this.program.getUniformLocation("u_lightDir"),this.uniformTint=this.program.getUniformLocation("u_tint"),this.uniformDiffuse=this.program.getUniformLocation("u_diffuseMap")}bind(e){let{modelViewProjection:r,lightDirection:n=[0,0,1],tint:o=[1,1,1,1],diffuseSampler:i=0}=e,s=new Float32Array(n),a=new Float32Array(o);this.program.use(),this.gl.uniformMatrix4fv(this.uniformMvp,!1,r),this.gl.uniform3fv(this.uniformLightDir,s),this.gl.uniform4fv(this.uniformTint,a),this.gl.uniform1i(this.uniformDiffuse,i)}draw(e){e.bind(),this.gl.drawElements(this.gl.TRIANGLES,e.indexCount,this.gl.UNSIGNED_SHORT,0)}dispose(){this.program.dispose()}};var Y=1e-6,He=typeof Float32Array<"u"?Float32Array:Array,as=Math.random;function Zo(t){return t>=0?Math.round(t):t%.5===0?Math.floor(t):Math.round(t)}var Fh=Math.PI/180,Ih=180/Math.PI;var ne={};ii(ne,{add:()=>W0,adjoint:()=>f0,clone:()=>a0,copy:()=>c0,create:()=>s0,decompose:()=>T0,determinant:()=>p0,equals:()=>j0,exactEquals:()=>Y0,frob:()=>G0,fromQuat:()=>I0,fromQuat2:()=>z0,fromRotation:()=>_0,fromRotationTranslation:()=>ec,fromRotationTranslationScale:()=>P0,fromRotationTranslationScaleOrigin:()=>F0,fromScaling:()=>M0,fromTranslation:()=>S0,fromValues:()=>l0,fromXRotation:()=>A0,fromYRotation:()=>w0,fromZRotation:()=>L0,frustum:()=>R0,getRotation:()=>C0,getScaling:()=>tc,getTranslation:()=>E0,identity:()=>Ja,invert:()=>m0,lookAt:()=>B0,mul:()=>K0,multiply:()=>Za,multiplyScalar:()=>X0,multiplyScalarAndAdd:()=>q0,ortho:()=>O0,orthoNO:()=>nc,orthoZO:()=>N0,perspective:()=>k0,perspectiveFromFieldOfView:()=>H0,perspectiveNO:()=>rc,perspectiveZO:()=>D0,rotate:()=>x0,rotateX:()=>g0,rotateY:()=>v0,rotateZ:()=>b0,scale:()=>y0,set:()=>d0,str:()=>U0,sub:()=>$0,subtract:()=>oc,targetTo:()=>V0,translate:()=>h0,transpose:()=>u0});function s0(){var t=new He(16);return He!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0),t[0]=1,t[5]=1,t[10]=1,t[15]=1,t}function a0(t){var e=new He(16);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}function c0(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}function l0(t,e,r,n,o,i,s,a,c,l,d,u,m,f,h,y){var p=new He(16);return p[0]=t,p[1]=e,p[2]=r,p[3]=n,p[4]=o,p[5]=i,p[6]=s,p[7]=a,p[8]=c,p[9]=l,p[10]=d,p[11]=u,p[12]=m,p[13]=f,p[14]=h,p[15]=y,p}function d0(t,e,r,n,o,i,s,a,c,l,d,u,m,f,h,y,p){return t[0]=e,t[1]=r,t[2]=n,t[3]=o,t[4]=i,t[5]=s,t[6]=a,t[7]=c,t[8]=l,t[9]=d,t[10]=u,t[11]=m,t[12]=f,t[13]=h,t[14]=y,t[15]=p,t}function Ja(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function u0(t,e){if(t===e){var r=e[1],n=e[2],o=e[3],i=e[6],s=e[7],a=e[11];t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=r,t[6]=e[9],t[7]=e[13],t[8]=n,t[9]=i,t[11]=e[14],t[12]=o,t[13]=s,t[14]=a}else t[0]=e[0],t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=e[1],t[5]=e[5],t[6]=e[9],t[7]=e[13],t[8]=e[2],t[9]=e[6],t[10]=e[10],t[11]=e[14],t[12]=e[3],t[13]=e[7],t[14]=e[11],t[15]=e[15];return t}function m0(t,e){var r=e[0],n=e[1],o=e[2],i=e[3],s=e[4],a=e[5],c=e[6],l=e[7],d=e[8],u=e[9],m=e[10],f=e[11],h=e[12],y=e[13],p=e[14],x=e[15],M=r*a-n*s,v=r*c-o*s,S=r*l-i*s,b=n*c-o*a,_=n*l-i*a,w=o*l-i*c,L=d*y-u*h,P=d*p-m*h,A=d*x-f*h,N=u*p-m*y,U=u*x-f*y,V=m*x-f*p,F=M*V-v*U+S*N+b*A-_*P+w*L;return F?(F=1/F,t[0]=(a*V-c*U+l*N)*F,t[1]=(o*U-n*V-i*N)*F,t[2]=(y*w-p*_+x*b)*F,t[3]=(m*_-u*w-f*b)*F,t[4]=(c*A-s*V-l*P)*F,t[5]=(r*V-o*A+i*P)*F,t[6]=(p*S-h*w-x*v)*F,t[7]=(d*w-m*S+f*v)*F,t[8]=(s*U-a*A+l*L)*F,t[9]=(n*A-r*U-i*L)*F,t[10]=(h*_-y*S+x*M)*F,t[11]=(u*S-d*_-f*M)*F,t[12]=(a*P-s*N-c*L)*F,t[13]=(r*N-n*P+o*L)*F,t[14]=(y*v-h*b-p*M)*F,t[15]=(d*b-u*v+m*M)*F,t):null}function f0(t,e){var r=e[0],n=e[1],o=e[2],i=e[3],s=e[4],a=e[5],c=e[6],l=e[7],d=e[8],u=e[9],m=e[10],f=e[11],h=e[12],y=e[13],p=e[14],x=e[15],M=r*a-n*s,v=r*c-o*s,S=r*l-i*s,b=n*c-o*a,_=n*l-i*a,w=o*l-i*c,L=d*y-u*h,P=d*p-m*h,A=d*x-f*h,N=u*p-m*y,U=u*x-f*y,V=m*x-f*p;return t[0]=a*V-c*U+l*N,t[1]=o*U-n*V-i*N,t[2]=y*w-p*_+x*b,t[3]=m*_-u*w-f*b,t[4]=c*A-s*V-l*P,t[5]=r*V-o*A+i*P,t[6]=p*S-h*w-x*v,t[7]=d*w-m*S+f*v,t[8]=s*U-a*A+l*L,t[9]=n*A-r*U-i*L,t[10]=h*_-y*S+x*M,t[11]=u*S-d*_-f*M,t[12]=a*P-s*N-c*L,t[13]=r*N-n*P+o*L,t[14]=y*v-h*b-p*M,t[15]=d*b-u*v+m*M,t}function p0(t){var e=t[0],r=t[1],n=t[2],o=t[3],i=t[4],s=t[5],a=t[6],c=t[7],l=t[8],d=t[9],u=t[10],m=t[11],f=t[12],h=t[13],y=t[14],p=t[15],x=e*s-r*i,M=e*a-n*i,v=r*a-n*s,S=l*h-d*f,b=l*y-u*f,_=d*y-u*h,w=e*_-r*b+n*S,L=i*_-s*b+a*S,P=l*v-d*M+u*x,A=f*v-h*M+y*x;return c*w-o*L+p*P-m*A}function Za(t,e,r){var n=e[0],o=e[1],i=e[2],s=e[3],a=e[4],c=e[5],l=e[6],d=e[7],u=e[8],m=e[9],f=e[10],h=e[11],y=e[12],p=e[13],x=e[14],M=e[15],v=r[0],S=r[1],b=r[2],_=r[3];return t[0]=v*n+S*a+b*u+_*y,t[1]=v*o+S*c+b*m+_*p,t[2]=v*i+S*l+b*f+_*x,t[3]=v*s+S*d+b*h+_*M,v=r[4],S=r[5],b=r[6],_=r[7],t[4]=v*n+S*a+b*u+_*y,t[5]=v*o+S*c+b*m+_*p,t[6]=v*i+S*l+b*f+_*x,t[7]=v*s+S*d+b*h+_*M,v=r[8],S=r[9],b=r[10],_=r[11],t[8]=v*n+S*a+b*u+_*y,t[9]=v*o+S*c+b*m+_*p,t[10]=v*i+S*l+b*f+_*x,t[11]=v*s+S*d+b*h+_*M,v=r[12],S=r[13],b=r[14],_=r[15],t[12]=v*n+S*a+b*u+_*y,t[13]=v*o+S*c+b*m+_*p,t[14]=v*i+S*l+b*f+_*x,t[15]=v*s+S*d+b*h+_*M,t}function h0(t,e,r){var n=r[0],o=r[1],i=r[2],s,a,c,l,d,u,m,f,h,y,p,x;return e===t?(t[12]=e[0]*n+e[4]*o+e[8]*i+e[12],t[13]=e[1]*n+e[5]*o+e[9]*i+e[13],t[14]=e[2]*n+e[6]*o+e[10]*i+e[14],t[15]=e[3]*n+e[7]*o+e[11]*i+e[15]):(s=e[0],a=e[1],c=e[2],l=e[3],d=e[4],u=e[5],m=e[6],f=e[7],h=e[8],y=e[9],p=e[10],x=e[11],t[0]=s,t[1]=a,t[2]=c,t[3]=l,t[4]=d,t[5]=u,t[6]=m,t[7]=f,t[8]=h,t[9]=y,t[10]=p,t[11]=x,t[12]=s*n+d*o+h*i+e[12],t[13]=a*n+u*o+y*i+e[13],t[14]=c*n+m*o+p*i+e[14],t[15]=l*n+f*o+x*i+e[15]),t}function y0(t,e,r){var n=r[0],o=r[1],i=r[2];return t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n,t[3]=e[3]*n,t[4]=e[4]*o,t[5]=e[5]*o,t[6]=e[6]*o,t[7]=e[7]*o,t[8]=e[8]*i,t[9]=e[9]*i,t[10]=e[10]*i,t[11]=e[11]*i,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}function x0(t,e,r,n){var o=n[0],i=n[1],s=n[2],a=Math.sqrt(o*o+i*i+s*s),c,l,d,u,m,f,h,y,p,x,M,v,S,b,_,w,L,P,A,N,U,V,F,K;return a<Y?null:(a=1/a,o*=a,i*=a,s*=a,c=Math.sin(r),l=Math.cos(r),d=1-l,u=e[0],m=e[1],f=e[2],h=e[3],y=e[4],p=e[5],x=e[6],M=e[7],v=e[8],S=e[9],b=e[10],_=e[11],w=o*o*d+l,L=i*o*d+s*c,P=s*o*d-i*c,A=o*i*d-s*c,N=i*i*d+l,U=s*i*d+o*c,V=o*s*d+i*c,F=i*s*d-o*c,K=s*s*d+l,t[0]=u*w+y*L+v*P,t[1]=m*w+p*L+S*P,t[2]=f*w+x*L+b*P,t[3]=h*w+M*L+_*P,t[4]=u*A+y*N+v*U,t[5]=m*A+p*N+S*U,t[6]=f*A+x*N+b*U,t[7]=h*A+M*N+_*U,t[8]=u*V+y*F+v*K,t[9]=m*V+p*F+S*K,t[10]=f*V+x*F+b*K,t[11]=h*V+M*F+_*K,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t)}function g0(t,e,r){var n=Math.sin(r),o=Math.cos(r),i=e[4],s=e[5],a=e[6],c=e[7],l=e[8],d=e[9],u=e[10],m=e[11];return e!==t&&(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[4]=i*o+l*n,t[5]=s*o+d*n,t[6]=a*o+u*n,t[7]=c*o+m*n,t[8]=l*o-i*n,t[9]=d*o-s*n,t[10]=u*o-a*n,t[11]=m*o-c*n,t}function v0(t,e,r){var n=Math.sin(r),o=Math.cos(r),i=e[0],s=e[1],a=e[2],c=e[3],l=e[8],d=e[9],u=e[10],m=e[11];return e!==t&&(t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=i*o-l*n,t[1]=s*o-d*n,t[2]=a*o-u*n,t[3]=c*o-m*n,t[8]=i*n+l*o,t[9]=s*n+d*o,t[10]=a*n+u*o,t[11]=c*n+m*o,t}function b0(t,e,r){var n=Math.sin(r),o=Math.cos(r),i=e[0],s=e[1],a=e[2],c=e[3],l=e[4],d=e[5],u=e[6],m=e[7];return e!==t&&(t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=i*o+l*n,t[1]=s*o+d*n,t[2]=a*o+u*n,t[3]=c*o+m*n,t[4]=l*o-i*n,t[5]=d*o-s*n,t[6]=u*o-a*n,t[7]=m*o-c*n,t}function S0(t,e){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=e[0],t[13]=e[1],t[14]=e[2],t[15]=1,t}function M0(t,e){return t[0]=e[0],t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=e[1],t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=e[2],t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function _0(t,e,r){var n=r[0],o=r[1],i=r[2],s=Math.sqrt(n*n+o*o+i*i),a,c,l;return s<Y?null:(s=1/s,n*=s,o*=s,i*=s,a=Math.sin(e),c=Math.cos(e),l=1-c,t[0]=n*n*l+c,t[1]=o*n*l+i*a,t[2]=i*n*l-o*a,t[3]=0,t[4]=n*o*l-i*a,t[5]=o*o*l+c,t[6]=i*o*l+n*a,t[7]=0,t[8]=n*i*l+o*a,t[9]=o*i*l-n*a,t[10]=i*i*l+c,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t)}function A0(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=n,t[6]=r,t[7]=0,t[8]=0,t[9]=-r,t[10]=n,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function w0(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=n,t[1]=0,t[2]=-r,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=r,t[9]=0,t[10]=n,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function L0(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=n,t[1]=r,t[2]=0,t[3]=0,t[4]=-r,t[5]=n,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function ec(t,e,r){var n=e[0],o=e[1],i=e[2],s=e[3],a=n+n,c=o+o,l=i+i,d=n*a,u=n*c,m=n*l,f=o*c,h=o*l,y=i*l,p=s*a,x=s*c,M=s*l;return t[0]=1-(f+y),t[1]=u+M,t[2]=m-x,t[3]=0,t[4]=u-M,t[5]=1-(d+y),t[6]=h+p,t[7]=0,t[8]=m+x,t[9]=h-p,t[10]=1-(d+f),t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t}function z0(t,e){var r=new He(3),n=-e[0],o=-e[1],i=-e[2],s=e[3],a=e[4],c=e[5],l=e[6],d=e[7],u=n*n+o*o+i*i+s*s;return u>0?(r[0]=(a*s+d*n+c*i-l*o)*2/u,r[1]=(c*s+d*o+l*n-a*i)*2/u,r[2]=(l*s+d*i+a*o-c*n)*2/u):(r[0]=(a*s+d*n+c*i-l*o)*2,r[1]=(c*s+d*o+l*n-a*i)*2,r[2]=(l*s+d*i+a*o-c*n)*2),ec(t,e,r),t}function E0(t,e){return t[0]=e[12],t[1]=e[13],t[2]=e[14],t}function tc(t,e){var r=e[0],n=e[1],o=e[2],i=e[4],s=e[5],a=e[6],c=e[8],l=e[9],d=e[10];return t[0]=Math.sqrt(r*r+n*n+o*o),t[1]=Math.sqrt(i*i+s*s+a*a),t[2]=Math.sqrt(c*c+l*l+d*d),t}function C0(t,e){var r=new He(3);tc(r,e);var n=1/r[0],o=1/r[1],i=1/r[2],s=e[0]*n,a=e[1]*o,c=e[2]*i,l=e[4]*n,d=e[5]*o,u=e[6]*i,m=e[8]*n,f=e[9]*o,h=e[10]*i,y=s+d+h,p=0;return y>0?(p=Math.sqrt(y+1)*2,t[3]=.25*p,t[0]=(u-f)/p,t[1]=(m-c)/p,t[2]=(a-l)/p):s>d&&s>h?(p=Math.sqrt(1+s-d-h)*2,t[3]=(u-f)/p,t[0]=.25*p,t[1]=(a+l)/p,t[2]=(m+c)/p):d>h?(p=Math.sqrt(1+d-s-h)*2,t[3]=(m-c)/p,t[0]=(a+l)/p,t[1]=.25*p,t[2]=(u+f)/p):(p=Math.sqrt(1+h-s-d)*2,t[3]=(a-l)/p,t[0]=(m+c)/p,t[1]=(u+f)/p,t[2]=.25*p),t}function T0(t,e,r,n){e[0]=n[12],e[1]=n[13],e[2]=n[14];var o=n[0],i=n[1],s=n[2],a=n[4],c=n[5],l=n[6],d=n[8],u=n[9],m=n[10];r[0]=Math.sqrt(o*o+i*i+s*s),r[1]=Math.sqrt(a*a+c*c+l*l),r[2]=Math.sqrt(d*d+u*u+m*m);var f=1/r[0],h=1/r[1],y=1/r[2],p=o*f,x=i*h,M=s*y,v=a*f,S=c*h,b=l*y,_=d*f,w=u*h,L=m*y,P=p+S+L,A=0;return P>0?(A=Math.sqrt(P+1)*2,t[3]=.25*A,t[0]=(b-w)/A,t[1]=(_-M)/A,t[2]=(x-v)/A):p>S&&p>L?(A=Math.sqrt(1+p-S-L)*2,t[3]=(b-w)/A,t[0]=.25*A,t[1]=(x+v)/A,t[2]=(_+M)/A):S>L?(A=Math.sqrt(1+S-p-L)*2,t[3]=(_-M)/A,t[0]=(x+v)/A,t[1]=.25*A,t[2]=(b+w)/A):(A=Math.sqrt(1+L-p-S)*2,t[3]=(x-v)/A,t[0]=(_+M)/A,t[1]=(b+w)/A,t[2]=.25*A),t}function P0(t,e,r,n){var o=e[0],i=e[1],s=e[2],a=e[3],c=o+o,l=i+i,d=s+s,u=o*c,m=o*l,f=o*d,h=i*l,y=i*d,p=s*d,x=a*c,M=a*l,v=a*d,S=n[0],b=n[1],_=n[2];return t[0]=(1-(h+p))*S,t[1]=(m+v)*S,t[2]=(f-M)*S,t[3]=0,t[4]=(m-v)*b,t[5]=(1-(u+p))*b,t[6]=(y+x)*b,t[7]=0,t[8]=(f+M)*_,t[9]=(y-x)*_,t[10]=(1-(u+h))*_,t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t}function F0(t,e,r,n,o){var i=e[0],s=e[1],a=e[2],c=e[3],l=i+i,d=s+s,u=a+a,m=i*l,f=i*d,h=i*u,y=s*d,p=s*u,x=a*u,M=c*l,v=c*d,S=c*u,b=n[0],_=n[1],w=n[2],L=o[0],P=o[1],A=o[2],N=(1-(y+x))*b,U=(f+S)*b,V=(h-v)*b,F=(f-S)*_,K=(1-(m+x))*_,ge=(p+M)*_,Ct=(h+v)*w,kn=(p-M)*w,zr=(1-(m+y))*w;return t[0]=N,t[1]=U,t[2]=V,t[3]=0,t[4]=F,t[5]=K,t[6]=ge,t[7]=0,t[8]=Ct,t[9]=kn,t[10]=zr,t[11]=0,t[12]=r[0]+L-(N*L+F*P+Ct*A),t[13]=r[1]+P-(U*L+K*P+kn*A),t[14]=r[2]+A-(V*L+ge*P+zr*A),t[15]=1,t}function I0(t,e){var r=e[0],n=e[1],o=e[2],i=e[3],s=r+r,a=n+n,c=o+o,l=r*s,d=n*s,u=n*a,m=o*s,f=o*a,h=o*c,y=i*s,p=i*a,x=i*c;return t[0]=1-u-h,t[1]=d+x,t[2]=m-p,t[3]=0,t[4]=d-x,t[5]=1-l-h,t[6]=f+y,t[7]=0,t[8]=m+p,t[9]=f-y,t[10]=1-l-u,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function R0(t,e,r,n,o,i,s){var a=1/(r-e),c=1/(o-n),l=1/(i-s);return t[0]=i*2*a,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=i*2*c,t[6]=0,t[7]=0,t[8]=(r+e)*a,t[9]=(o+n)*c,t[10]=(s+i)*l,t[11]=-1,t[12]=0,t[13]=0,t[14]=s*i*2*l,t[15]=0,t}function rc(t,e,r,n,o){var i=1/Math.tan(e/2);if(t[0]=i/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=i,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,o!=null&&o!==1/0){var s=1/(n-o);t[10]=(o+n)*s,t[14]=2*o*n*s}else t[10]=-1,t[14]=-2*n;return t}var k0=rc;function D0(t,e,r,n,o){var i=1/Math.tan(e/2);if(t[0]=i/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=i,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,o!=null&&o!==1/0){var s=1/(n-o);t[10]=o*s,t[14]=o*n*s}else t[10]=-1,t[14]=-n;return t}function H0(t,e,r,n){var o=Math.tan(e.upDegrees*Math.PI/180),i=Math.tan(e.downDegrees*Math.PI/180),s=Math.tan(e.leftDegrees*Math.PI/180),a=Math.tan(e.rightDegrees*Math.PI/180),c=2/(s+a),l=2/(o+i);return t[0]=c,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=l,t[6]=0,t[7]=0,t[8]=-((s-a)*c*.5),t[9]=(o-i)*l*.5,t[10]=n/(r-n),t[11]=-1,t[12]=0,t[13]=0,t[14]=n*r/(r-n),t[15]=0,t}function nc(t,e,r,n,o,i,s){var a=1/(e-r),c=1/(n-o),l=1/(i-s);return t[0]=-2*a,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*c,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*l,t[11]=0,t[12]=(e+r)*a,t[13]=(o+n)*c,t[14]=(s+i)*l,t[15]=1,t}var O0=nc;function N0(t,e,r,n,o,i,s){var a=1/(e-r),c=1/(n-o),l=1/(i-s);return t[0]=-2*a,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*c,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=l,t[11]=0,t[12]=(e+r)*a,t[13]=(o+n)*c,t[14]=i*l,t[15]=1,t}function B0(t,e,r,n){var o,i,s,a,c,l,d,u,m,f,h=e[0],y=e[1],p=e[2],x=n[0],M=n[1],v=n[2],S=r[0],b=r[1],_=r[2];return Math.abs(h-S)<Y&&Math.abs(y-b)<Y&&Math.abs(p-_)<Y?Ja(t):(d=h-S,u=y-b,m=p-_,f=1/Math.sqrt(d*d+u*u+m*m),d*=f,u*=f,m*=f,o=M*m-v*u,i=v*d-x*m,s=x*u-M*d,f=Math.sqrt(o*o+i*i+s*s),f?(f=1/f,o*=f,i*=f,s*=f):(o=0,i=0,s=0),a=u*s-m*i,c=m*o-d*s,l=d*i-u*o,f=Math.sqrt(a*a+c*c+l*l),f?(f=1/f,a*=f,c*=f,l*=f):(a=0,c=0,l=0),t[0]=o,t[1]=a,t[2]=d,t[3]=0,t[4]=i,t[5]=c,t[6]=u,t[7]=0,t[8]=s,t[9]=l,t[10]=m,t[11]=0,t[12]=-(o*h+i*y+s*p),t[13]=-(a*h+c*y+l*p),t[14]=-(d*h+u*y+m*p),t[15]=1,t)}function V0(t,e,r,n){var o=e[0],i=e[1],s=e[2],a=n[0],c=n[1],l=n[2],d=o-r[0],u=i-r[1],m=s-r[2],f=d*d+u*u+m*m;f>0&&(f=1/Math.sqrt(f),d*=f,u*=f,m*=f);var h=c*m-l*u,y=l*d-a*m,p=a*u-c*d;return f=h*h+y*y+p*p,f>0&&(f=1/Math.sqrt(f),h*=f,y*=f,p*=f),t[0]=h,t[1]=y,t[2]=p,t[3]=0,t[4]=u*p-m*y,t[5]=m*h-d*p,t[6]=d*y-u*h,t[7]=0,t[8]=d,t[9]=u,t[10]=m,t[11]=0,t[12]=o,t[13]=i,t[14]=s,t[15]=1,t}function U0(t){return"mat4("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+", "+t[4]+", "+t[5]+", "+t[6]+", "+t[7]+", "+t[8]+", "+t[9]+", "+t[10]+", "+t[11]+", "+t[12]+", "+t[13]+", "+t[14]+", "+t[15]+")"}function G0(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]+t[3]*t[3]+t[4]*t[4]+t[5]*t[5]+t[6]*t[6]+t[7]*t[7]+t[8]*t[8]+t[9]*t[9]+t[10]*t[10]+t[11]*t[11]+t[12]*t[12]+t[13]*t[13]+t[14]*t[14]+t[15]*t[15])}function W0(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t[3]=e[3]+r[3],t[4]=e[4]+r[4],t[5]=e[5]+r[5],t[6]=e[6]+r[6],t[7]=e[7]+r[7],t[8]=e[8]+r[8],t[9]=e[9]+r[9],t[10]=e[10]+r[10],t[11]=e[11]+r[11],t[12]=e[12]+r[12],t[13]=e[13]+r[13],t[14]=e[14]+r[14],t[15]=e[15]+r[15],t}function oc(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t[3]=e[3]-r[3],t[4]=e[4]-r[4],t[5]=e[5]-r[5],t[6]=e[6]-r[6],t[7]=e[7]-r[7],t[8]=e[8]-r[8],t[9]=e[9]-r[9],t[10]=e[10]-r[10],t[11]=e[11]-r[11],t[12]=e[12]-r[12],t[13]=e[13]-r[13],t[14]=e[14]-r[14],t[15]=e[15]-r[15],t}function X0(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t[4]=e[4]*r,t[5]=e[5]*r,t[6]=e[6]*r,t[7]=e[7]*r,t[8]=e[8]*r,t[9]=e[9]*r,t[10]=e[10]*r,t[11]=e[11]*r,t[12]=e[12]*r,t[13]=e[13]*r,t[14]=e[14]*r,t[15]=e[15]*r,t}function q0(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t[3]=e[3]+r[3]*n,t[4]=e[4]+r[4]*n,t[5]=e[5]+r[5]*n,t[6]=e[6]+r[6]*n,t[7]=e[7]+r[7]*n,t[8]=e[8]+r[8]*n,t[9]=e[9]+r[9]*n,t[10]=e[10]+r[10]*n,t[11]=e[11]+r[11]*n,t[12]=e[12]+r[12]*n,t[13]=e[13]+r[13]*n,t[14]=e[14]+r[14]*n,t[15]=e[15]+r[15]*n,t}function Y0(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]&&t[3]===e[3]&&t[4]===e[4]&&t[5]===e[5]&&t[6]===e[6]&&t[7]===e[7]&&t[8]===e[8]&&t[9]===e[9]&&t[10]===e[10]&&t[11]===e[11]&&t[12]===e[12]&&t[13]===e[13]&&t[14]===e[14]&&t[15]===e[15]}function j0(t,e){var r=t[0],n=t[1],o=t[2],i=t[3],s=t[4],a=t[5],c=t[6],l=t[7],d=t[8],u=t[9],m=t[10],f=t[11],h=t[12],y=t[13],p=t[14],x=t[15],M=e[0],v=e[1],S=e[2],b=e[3],_=e[4],w=e[5],L=e[6],P=e[7],A=e[8],N=e[9],U=e[10],V=e[11],F=e[12],K=e[13],ge=e[14],Ct=e[15];return Math.abs(r-M)<=Y*Math.max(1,Math.abs(r),Math.abs(M))&&Math.abs(n-v)<=Y*Math.max(1,Math.abs(n),Math.abs(v))&&Math.abs(o-S)<=Y*Math.max(1,Math.abs(o),Math.abs(S))&&Math.abs(i-b)<=Y*Math.max(1,Math.abs(i),Math.abs(b))&&Math.abs(s-_)<=Y*Math.max(1,Math.abs(s),Math.abs(_))&&Math.abs(a-w)<=Y*Math.max(1,Math.abs(a),Math.abs(w))&&Math.abs(c-L)<=Y*Math.max(1,Math.abs(c),Math.abs(L))&&Math.abs(l-P)<=Y*Math.max(1,Math.abs(l),Math.abs(P))&&Math.abs(d-A)<=Y*Math.max(1,Math.abs(d),Math.abs(A))&&Math.abs(u-N)<=Y*Math.max(1,Math.abs(u),Math.abs(N))&&Math.abs(m-U)<=Y*Math.max(1,Math.abs(m),Math.abs(U))&&Math.abs(f-V)<=Y*Math.max(1,Math.abs(f),Math.abs(V))&&Math.abs(h-F)<=Y*Math.max(1,Math.abs(h),Math.abs(F))&&Math.abs(y-K)<=Y*Math.max(1,Math.abs(y),Math.abs(K))&&Math.abs(p-ge)<=Y*Math.max(1,Math.abs(p),Math.abs(ge))&&Math.abs(x-Ct)<=Y*Math.max(1,Math.abs(x),Math.abs(Ct))}var K0=Za,$0=oc;var ce={};ii(ce,{add:()=>td,angle:()=>Ad,bezier:()=>yd,ceil:()=>rd,clone:()=>Q0,copy:()=>Z0,create:()=>ic,cross:()=>md,dist:()=>Fd,distance:()=>dc,div:()=>Pd,divide:()=>lc,dot:()=>cs,equals:()=>Ed,exactEquals:()=>zd,floor:()=>nd,forEach:()=>Dd,fromValues:()=>J0,hermite:()=>hd,inverse:()=>dd,len:()=>Rd,length:()=>sc,lerp:()=>fd,max:()=>id,min:()=>od,mul:()=>Td,multiply:()=>cc,negate:()=>ld,normalize:()=>ud,random:()=>xd,rotateX:()=>Sd,rotateY:()=>Md,rotateZ:()=>_d,round:()=>sd,scale:()=>ad,scaleAndAdd:()=>cd,set:()=>ed,slerp:()=>pd,sqrDist:()=>Id,sqrLen:()=>kd,squaredDistance:()=>uc,squaredLength:()=>mc,str:()=>Ld,sub:()=>Cd,subtract:()=>ac,transformMat3:()=>vd,transformMat4:()=>gd,transformQuat:()=>bd,zero:()=>wd});function ic(){var t=new He(3);return He!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t}function Q0(t){var e=new He(3);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function sc(t){var e=t[0],r=t[1],n=t[2];return Math.sqrt(e*e+r*r+n*n)}function J0(t,e,r){var n=new He(3);return n[0]=t,n[1]=e,n[2]=r,n}function Z0(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function ed(t,e,r,n){return t[0]=e,t[1]=r,t[2]=n,t}function td(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t}function ac(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t}function cc(t,e,r){return t[0]=e[0]*r[0],t[1]=e[1]*r[1],t[2]=e[2]*r[2],t}function lc(t,e,r){return t[0]=e[0]/r[0],t[1]=e[1]/r[1],t[2]=e[2]/r[2],t}function rd(t,e){return t[0]=Math.ceil(e[0]),t[1]=Math.ceil(e[1]),t[2]=Math.ceil(e[2]),t}function nd(t,e){return t[0]=Math.floor(e[0]),t[1]=Math.floor(e[1]),t[2]=Math.floor(e[2]),t}function od(t,e,r){return t[0]=Math.min(e[0],r[0]),t[1]=Math.min(e[1],r[1]),t[2]=Math.min(e[2],r[2]),t}function id(t,e,r){return t[0]=Math.max(e[0],r[0]),t[1]=Math.max(e[1],r[1]),t[2]=Math.max(e[2],r[2]),t}function sd(t,e){return t[0]=Zo(e[0]),t[1]=Zo(e[1]),t[2]=Zo(e[2]),t}function ad(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t}function cd(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t}function dc(t,e){var r=e[0]-t[0],n=e[1]-t[1],o=e[2]-t[2];return Math.sqrt(r*r+n*n+o*o)}function uc(t,e){var r=e[0]-t[0],n=e[1]-t[1],o=e[2]-t[2];return r*r+n*n+o*o}function mc(t){var e=t[0],r=t[1],n=t[2];return e*e+r*r+n*n}function ld(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t}function dd(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t}function ud(t,e){var r=e[0],n=e[1],o=e[2],i=r*r+n*n+o*o;return i>0&&(i=1/Math.sqrt(i)),t[0]=e[0]*i,t[1]=e[1]*i,t[2]=e[2]*i,t}function cs(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function md(t,e,r){var n=e[0],o=e[1],i=e[2],s=r[0],a=r[1],c=r[2];return t[0]=o*c-i*a,t[1]=i*s-n*c,t[2]=n*a-o*s,t}function fd(t,e,r,n){var o=e[0],i=e[1],s=e[2];return t[0]=o+n*(r[0]-o),t[1]=i+n*(r[1]-i),t[2]=s+n*(r[2]-s),t}function pd(t,e,r,n){var o=Math.acos(Math.min(Math.max(cs(e,r),-1),1)),i=Math.sin(o),s=Math.sin((1-n)*o)/i,a=Math.sin(n*o)/i;return t[0]=s*e[0]+a*r[0],t[1]=s*e[1]+a*r[1],t[2]=s*e[2]+a*r[2],t}function hd(t,e,r,n,o,i){var s=i*i,a=s*(2*i-3)+1,c=s*(i-2)+i,l=s*(i-1),d=s*(3-2*i);return t[0]=e[0]*a+r[0]*c+n[0]*l+o[0]*d,t[1]=e[1]*a+r[1]*c+n[1]*l+o[1]*d,t[2]=e[2]*a+r[2]*c+n[2]*l+o[2]*d,t}function yd(t,e,r,n,o,i){var s=1-i,a=s*s,c=i*i,l=a*s,d=3*i*a,u=3*c*s,m=c*i;return t[0]=e[0]*l+r[0]*d+n[0]*u+o[0]*m,t[1]=e[1]*l+r[1]*d+n[1]*u+o[1]*m,t[2]=e[2]*l+r[2]*d+n[2]*u+o[2]*m,t}function xd(t,e){e=e===void 0?1:e;var r=as()*2*Math.PI,n=as()*2-1,o=Math.sqrt(1-n*n)*e;return t[0]=Math.cos(r)*o,t[1]=Math.sin(r)*o,t[2]=n*e,t}function gd(t,e,r){var n=e[0],o=e[1],i=e[2],s=r[3]*n+r[7]*o+r[11]*i+r[15];return s=s||1,t[0]=(r[0]*n+r[4]*o+r[8]*i+r[12])/s,t[1]=(r[1]*n+r[5]*o+r[9]*i+r[13])/s,t[2]=(r[2]*n+r[6]*o+r[10]*i+r[14])/s,t}function vd(t,e,r){var n=e[0],o=e[1],i=e[2];return t[0]=n*r[0]+o*r[3]+i*r[6],t[1]=n*r[1]+o*r[4]+i*r[7],t[2]=n*r[2]+o*r[5]+i*r[8],t}function bd(t,e,r){var n=r[0],o=r[1],i=r[2],s=r[3],a=e[0],c=e[1],l=e[2],d=o*l-i*c,u=i*a-n*l,m=n*c-o*a;return d=d+d,u=u+u,m=m+m,t[0]=a+s*d+o*m-i*u,t[1]=c+s*u+i*d-n*m,t[2]=l+s*m+n*u-o*d,t}function Sd(t,e,r,n){var o=[],i=[];return o[0]=e[0]-r[0],o[1]=e[1]-r[1],o[2]=e[2]-r[2],i[0]=o[0],i[1]=o[1]*Math.cos(n)-o[2]*Math.sin(n),i[2]=o[1]*Math.sin(n)+o[2]*Math.cos(n),t[0]=i[0]+r[0],t[1]=i[1]+r[1],t[2]=i[2]+r[2],t}function Md(t,e,r,n){var o=[],i=[];return o[0]=e[0]-r[0],o[1]=e[1]-r[1],o[2]=e[2]-r[2],i[0]=o[2]*Math.sin(n)+o[0]*Math.cos(n),i[1]=o[1],i[2]=o[2]*Math.cos(n)-o[0]*Math.sin(n),t[0]=i[0]+r[0],t[1]=i[1]+r[1],t[2]=i[2]+r[2],t}function _d(t,e,r,n){var o=[],i=[];return o[0]=e[0]-r[0],o[1]=e[1]-r[1],o[2]=e[2]-r[2],i[0]=o[0]*Math.cos(n)-o[1]*Math.sin(n),i[1]=o[0]*Math.sin(n)+o[1]*Math.cos(n),i[2]=o[2],t[0]=i[0]+r[0],t[1]=i[1]+r[1],t[2]=i[2]+r[2],t}function Ad(t,e){var r=t[0],n=t[1],o=t[2],i=e[0],s=e[1],a=e[2],c=Math.sqrt((r*r+n*n+o*o)*(i*i+s*s+a*a)),l=c&&cs(t,e)/c;return Math.acos(Math.min(Math.max(l,-1),1))}function wd(t){return t[0]=0,t[1]=0,t[2]=0,t}function Ld(t){return"vec3("+t[0]+", "+t[1]+", "+t[2]+")"}function zd(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]}function Ed(t,e){var r=t[0],n=t[1],o=t[2],i=e[0],s=e[1],a=e[2];return Math.abs(r-i)<=Y*Math.max(1,Math.abs(r),Math.abs(i))&&Math.abs(n-s)<=Y*Math.max(1,Math.abs(n),Math.abs(s))&&Math.abs(o-a)<=Y*Math.max(1,Math.abs(o),Math.abs(a))}var Cd=ac,Td=cc,Pd=lc,Fd=dc,Id=uc,Rd=sc,kd=mc,Dd=(function(){var t=ic();return function(e,r,n,o,i,s){var a,c;for(r||(r=3),n||(n=0),o?c=Math.min(o*r+n,e.length):c=e.length,a=n;a<c;a+=r)t[0]=e[a],t[1]=e[a+1],t[2]=e[a+2],i(t,t,s),e[a]=t[0],e[a+1]=t[1],e[a+2]=t[2];return e}})();var ei=class{constructor(){this._position=ce.create();this._angles=ce.create();this._bobAngles=ce.create();this._kickAngles=ce.create();this._rollAngle=0;this._fov=90;this._aspect=1;this._near=.1;this._far=1e3;this._viewMatrix=ne.create();this._projectionMatrix=ne.create();this._viewProjectionMatrix=ne.create();this._dirty=!0}get position(){return this._position}set position(e){ce.copy(this._position,e),this._dirty=!0}get angles(){return this._angles}set angles(e){ce.copy(this._angles,e),this._dirty=!0}get bobAngles(){return this._bobAngles}set bobAngles(e){ce.copy(this._bobAngles,e),this._dirty=!0}get kickAngles(){return this._kickAngles}set kickAngles(e){ce.copy(this._kickAngles,e),this._dirty=!0}get rollAngle(){return this._rollAngle}set rollAngle(e){this._rollAngle=e,this._dirty=!0}get fov(){return this._fov}set fov(e){this._fov=e,this._dirty=!0}get aspect(){return this._aspect}set aspect(e){this._aspect=e,this._dirty=!0}get viewMatrix(){return this.updateMatrices(),this._viewMatrix}get projectionMatrix(){return this.updateMatrices(),this._projectionMatrix}get viewProjectionMatrix(){return this.updateMatrices(),this._viewProjectionMatrix}getViewmodelProjectionMatrix(e){let r=ne.create();return ne.perspective(r,e*Qt,this._aspect,this._near,this._far),r}updateMatrices(){if(!this._dirty)return;ne.perspective(this._projectionMatrix,this._fov*Qt,this._aspect,this._near,this._far);let e=ne.fromValues(0,-1,0,0,0,0,1,0,-1,0,0,0,0,0,0,1),r=this._angles[0]+this._bobAngles[0]+this._kickAngles[0],n=this._angles[1]+this._bobAngles[1]+this._kickAngles[1],o=this._angles[2]+this._bobAngles[2]+this._kickAngles[2]+this._rollAngle,i=r*Qt,s=n*Qt,a=o*Qt,c=ne.create();ne.identity(c),ne.rotateZ(c,c,-s),ne.rotateY(c,c,-i),ne.rotateX(c,c,-a);let l=ne.create();ne.multiply(l,e,c);let d=ce.negate(ce.create(),this._position),u=ce.create();ce.transformMat4(u,d,c);let m=ce.fromValues(u[1]||0,u[2]||0,u[0]||0);ne.copy(this._viewMatrix,l),this._viewMatrix[12]=m[0],this._viewMatrix[13]=m[1],this._viewMatrix[14]=m[2],ne.multiply(this._viewProjectionMatrix,this._projectionMatrix,this._viewMatrix),this._dirty=!1}};var Hd=[.2,.2,.2],Od={x:0,y:0,z:1},Nd=[.8,.8,.8];function ls(t,e,r){return t+(e-t)*r}function Lr(t,e,r){return{x:ls(t.x,e.x,r),y:ls(t.y,e.y,r),z:ls(t.z,e.z,r)}}function wr(t){return t<0?0:t>1?1:t}function ds(t){let e=[],r=[];for(let n of t.triangles){let o=e.length,[i,s,a]=n.indices,c=t.texCoords[i],l=t.texCoords[s],d=t.texCoords[a];if(!c||!l||!d)throw new Error(`Missing texCoord for triangle in surface ${t.name}`);e.push({vertexIndex:i,texCoord:[c.s,1-c.t]},{vertexIndex:s,texCoord:[l.s,1-l.t]},{vertexIndex:a,texCoord:[d.s,1-d.t]}),r.push(o,o+1,o+2)}return{vertices:e,indices:new Uint16Array(r)}}function Bd(t,e,r){let n=r?.ambient??Hd,o=r?.directional??{direction:Od,color:Nd},i=Oe(t),s=Oe(o.direction),a=wr(i.x*s.x+i.y*s.y+i.z*s.z),c=n[0]+o.color[0]*a,l=n[1]+o.color[1]*a,d=n[2]+o.color[2]*a;if(r?.dynamicLights){let u=r.modelMatrix?Ls(r.modelMatrix,e):e;for(let m of r.dynamicLights){let f=u.x-m.origin.x,h=u.y-m.origin.y,y=u.z-m.origin.z,p=f*f+h*h+y*y,x=m.radius*m.radius;if(p<x&&x>0){let M=1-Math.sqrt(p)/m.radius,v=Math.sqrt(p),S=v>0?wr(-(f*i.x+h*i.y+y*i.z)/v):0,b=wr(M*S);c+=m.color[0]*b,l+=m.color[1]*b,d+=m.color[2]*b}}}return[wr(c),wr(l),wr(d)]}function us(t,e,r,n){let o=t.vertices[r.currentFrame],i=t.vertices[r.nextFrame];if(!o||!i)throw new Error("Requested MD3 frames are out of range");let s=new Float32Array(e.vertices.length*12);return e.vertices.forEach((a,c)=>{let l=o[a.vertexIndex],d=i[a.vertexIndex];if(!l||!d)throw new Error(`Vertex index ${a.vertexIndex} missing for frame`);let u=Lr(l.position,d.position,r.lerp),m=Oe(Lr(l.normal,d.normal,r.lerp)),f=Bd(m,u,n),h=c*12;s[h]=u.x,s[h+1]=u.y,s[h+2]=u.z,s[h+3]=m.x,s[h+4]=m.y,s[h+5]=m.z,s[h+6]=a.texCoord[0],s[h+7]=a.texCoord[1],s[h+8]=f[0],s[h+9]=f[1],s[h+10]=f[2],s[h+11]=1}),s}function fc(t,e,r){let n=t.tags[0];if(!n)return null;let o=n.findIndex(y=>y.name===r);if(o===-1)return null;let i=t.tags[e.currentFrame]?.[o],s=t.tags[e.nextFrame]?.[o];if(!i||!s)throw new Error(`Tag ${r} is missing for one of the interpolated frames`);let a=Lr(i.origin,s.origin,e.lerp),c=Oe(Lr(i.axis[0],s.axis[0],e.lerp)),l=Oe(Lr(i.axis[1],s.axis[1],e.lerp)),d=Oe(Lr(i.axis[2],s.axis[2],e.lerp)),u=c,m=Oe({x:l.x-u.x*(u.x*l.x+u.y*l.y+u.z*l.z),y:l.y-u.y*(u.x*l.x+u.y*l.y+u.z*l.z),z:l.z-u.z*(u.x*l.x+u.y*l.y+u.z*l.z)}),f=Oe({x:u.y*m.z-u.z*m.y,y:u.z*m.x-u.x*m.z,z:u.x*m.y-u.y*m.x}),h=[u,m,f];return{origin:a,axis:h,matrix:zs(a,h)}}var ms=`#version 300 es
258
258
  precision highp float;
259
259
 
260
260
  layout(location = 0) in vec3 a_position;
@@ -285,7 +285,7 @@ out vec4 o_color;
285
285
  void main() {
286
286
  vec4 albedo = texture(u_diffuseMap, v_texCoord) * u_tint;
287
287
  o_color = vec4(albedo.rgb * v_color.rgb, albedo.a * v_color.a);
288
- }`,Rn=class{constructor(e,r,n,o){this.gl=e,this.geometry=ds(r),this.vertexBuffer=new ye(e,e.STATIC_DRAW),this.indexBuffer=new ke(e,e.STATIC_DRAW),this.vertexArray=new be(e),this.indexCount=this.geometry.indices.length,this.vertexArray.configureAttributes([{index:0,size:3,type:e.FLOAT,stride:48,offset:0},{index:1,size:3,type:e.FLOAT,stride:48,offset:12},{index:2,size:2,type:e.FLOAT,stride:48,offset:24},{index:3,size:4,type:e.FLOAT,stride:48,offset:32}],this.vertexBuffer),this.vertexArray.bind(),this.indexBuffer.bind(),this.indexBuffer.upload(this.geometry.indices,e.STATIC_DRAW),this.update(r,n,o)}update(e,r,n){let o=us(e,this.geometry,r,n);this.vertexBuffer.upload(o,this.gl.STATIC_DRAW)}bind(){this.vertexArray.bind(),this.indexBuffer.bind()}dispose(){this.vertexBuffer.dispose(),this.indexBuffer.dispose(),this.vertexArray.dispose()}},ti=class{constructor(e,r,n,o){this.surfaces=new Map;this.gl=e,this.model=r,this.blend=n,this.lighting=o,r.surfaces.forEach(i=>{this.surfaces.set(i.name,new Rn(e,i,n,o))})}update(e,r){this.blend=e,this.lighting=r??this.lighting;for(let n of this.model.surfaces)this.surfaces.get(n.name)?.update(n,e,this.lighting)}dispose(){for(let e of this.surfaces.values())e.dispose();this.surfaces.clear()}},ri=class{constructor(e){this.gl=e,this.program=he.create(e,{vertex:ms,fragment:fs},{a_position:0,a_normal:1,a_texCoord:2,a_color:3}),this.uniformMvp=this.program.getUniformLocation("u_modelViewProjection"),this.uniformTint=this.program.getUniformLocation("u_tint"),this.uniformDiffuse=this.program.getUniformLocation("u_diffuseMap")}bind(e,r=[1,1,1,1],n=0){this.program.use(),this.gl.uniformMatrix4fv(this.uniformMvp,!1,e),this.gl.uniform4fv(this.uniformTint,new Float32Array(r)),this.gl.uniform1i(this.uniformDiffuse,n)}drawSurface(e,r){let n=r?.diffuseSampler??0,o=r?.tint??[1,1,1,1];this.gl.uniform4fv(this.uniformTint,new Float32Array(o)),this.gl.uniform1i(this.uniformDiffuse,n),e.bind(),this.gl.drawElements(this.gl.TRIANGLES,e.indexCount,this.gl.UNSIGNED_SHORT,0)}dispose(){this.program.dispose()}};var Vd=[1,1,1,1],ni=class{constructor(e,r=Math.random){this.maxParticles=e,this.random=r,this.alive=new Uint8Array(e),this.positionX=new Float32Array(e),this.positionY=new Float32Array(e),this.positionZ=new Float32Array(e),this.velocityX=new Float32Array(e),this.velocityY=new Float32Array(e),this.velocityZ=new Float32Array(e),this.colorR=new Float32Array(e),this.colorG=new Float32Array(e),this.colorB=new Float32Array(e),this.colorA=new Float32Array(e),this.size=new Float32Array(e),this.lifetime=new Float32Array(e),this.remaining=new Float32Array(e),this.gravity=new Float32Array(e),this.damping=new Float32Array(e),this.bounce=new Float32Array(e),this.fade=new Uint8Array(e),this.blendMode=new Uint8Array(e)}spawn(e){let r=this.findFreeSlot();if(r===-1)return null;let n=e.color??Vd,o=e.velocity??{x:0,y:0,z:0};return this.alive[r]=1,this.positionX[r]=e.position.x,this.positionY[r]=e.position.y,this.positionZ[r]=e.position.z,this.velocityX[r]=o.x,this.velocityY[r]=o.y,this.velocityZ[r]=o.z,this.colorR[r]=n[0],this.colorG[r]=n[1],this.colorB[r]=n[2],this.colorA[r]=n[3],this.size[r]=e.size??2.5,this.lifetime[r]=e.lifetime,this.remaining[r]=e.lifetime,this.gravity[r]=e.gravity??800,this.damping[r]=e.damping??0,this.bounce[r]=e.bounce??.25,this.fade[r]=e.fade?1:0,this.blendMode[r]=e.blendMode==="additive"?1:0,r}update(e,r={}){let n=r.floorZ??-1/0;for(let o=0;o<this.maxParticles;o+=1){if(!this.alive[o])continue;if(this.remaining[o]-=e,this.remaining[o]<=0){this.alive[o]=0;continue}let i=Math.max(0,1-this.damping[o]*e);this.velocityX[o]*=i,this.velocityY[o]*=i,this.velocityZ[o]=this.velocityZ[o]*i-this.gravity[o]*e,this.positionX[o]+=this.velocityX[o]*e,this.positionY[o]+=this.velocityY[o]*e,this.positionZ[o]+=this.velocityZ[o]*e,this.positionZ[o]<n&&(this.positionZ[o]=n,this.velocityZ[o]=-this.velocityZ[o]*this.bounce[o],this.velocityX[o]*=.7,this.velocityY[o]*=.7)}}killAll(){this.alive.fill(0)}aliveCount(){let e=0;for(let r=0;r<this.maxParticles;r+=1)this.alive[r]&&(e+=1);return e}getState(e){return{alive:this.alive[e]===1,position:{x:this.positionX[e],y:this.positionY[e],z:this.positionZ[e]},velocity:{x:this.velocityX[e],y:this.velocityY[e],z:this.velocityZ[e]},remaining:this.remaining[e],color:[this.colorR[e],this.colorG[e],this.colorB[e],this.colorA[e]],size:this.size[e],blendMode:this.blendMode[e]===1?"additive":"alpha"}}buildMesh(e,r){let n=[],o=[],i=[],s=a=>{let c=o.length,l=0;for(let d=0;d<this.maxParticles;d+=1){if(!this.alive[d]||(a==="additive"?1:0)!==this.blendMode[d])continue;l+=1;let u=n.length/9,m=this.size[d]*.5,f=this.fade[d]?Math.max(this.remaining[d]/this.lifetime[d],0):1,h=this.blendMode[d]===1?1.2:1,y=this.colorR[d]*h,p=this.colorG[d]*h,x=this.colorB[d]*h,M=this.colorA[d]*f,v=this.positionX[d],S=this.positionY[d],b=this.positionZ[d],_=e.x*m,w=e.y*m,L=e.z*m,P=r.x*m,A=r.y*m,N=r.z*m,U=[{x:v-_-P,y:S-w-A,z:b-L-N},{x:v+_-P,y:S+w-A,z:b+L-N},{x:v-_+P,y:S-w+A,z:b-L+N},{x:v+_+P,y:S+w+A,z:b+L+N}],V=[[0,1],[1,1],[0,0],[1,0]];U.forEach((F,K)=>{n.push(F.x,F.y,F.z,V[K]?.[0]??0,V[K]?.[1]??0,y,p,x,M)}),o.push(u,u+1,u+2,u+2,u+1,u+3)}l>0&&i.push({blendMode:a,start:c,count:o.length-c})};return s("alpha"),s("additive"),{vertices:new Float32Array(n),indices:new Uint16Array(o),batches:i}}findFreeSlot(){for(let e=0;e<this.maxParticles;e+=1)if(!this.alive[e])return e;return-1}},ps=`#version 300 es
288
+ }`,Rn=class{constructor(e,r,n,o){this.gl=e,this.geometry=ds(r),this.vertexBuffer=new xe(e,e.STATIC_DRAW),this.indexBuffer=new De(e,e.STATIC_DRAW),this.vertexArray=new Se(e),this.indexCount=this.geometry.indices.length,this.vertexArray.configureAttributes([{index:0,size:3,type:e.FLOAT,stride:48,offset:0},{index:1,size:3,type:e.FLOAT,stride:48,offset:12},{index:2,size:2,type:e.FLOAT,stride:48,offset:24},{index:3,size:4,type:e.FLOAT,stride:48,offset:32}],this.vertexBuffer),this.vertexArray.bind(),this.indexBuffer.bind(),this.indexBuffer.upload(this.geometry.indices,e.STATIC_DRAW),this.update(r,n,o)}update(e,r,n){let o=us(e,this.geometry,r,n);this.vertexBuffer.upload(o,this.gl.STATIC_DRAW)}bind(){this.vertexArray.bind(),this.indexBuffer.bind()}dispose(){this.vertexBuffer.dispose(),this.indexBuffer.dispose(),this.vertexArray.dispose()}},ti=class{constructor(e,r,n,o){this.surfaces=new Map;this.gl=e,this.model=r,this.blend=n,this.lighting=o,r.surfaces.forEach(i=>{this.surfaces.set(i.name,new Rn(e,i,n,o))})}update(e,r){this.blend=e,this.lighting=r??this.lighting;for(let n of this.model.surfaces)this.surfaces.get(n.name)?.update(n,e,this.lighting)}dispose(){for(let e of this.surfaces.values())e.dispose();this.surfaces.clear()}},ri=class{constructor(e){this.gl=e,this.program=ye.create(e,{vertex:ms,fragment:fs},{a_position:0,a_normal:1,a_texCoord:2,a_color:3}),this.uniformMvp=this.program.getUniformLocation("u_modelViewProjection"),this.uniformTint=this.program.getUniformLocation("u_tint"),this.uniformDiffuse=this.program.getUniformLocation("u_diffuseMap")}bind(e,r=[1,1,1,1],n=0){this.program.use(),this.gl.uniformMatrix4fv(this.uniformMvp,!1,e),this.gl.uniform4fv(this.uniformTint,new Float32Array(r)),this.gl.uniform1i(this.uniformDiffuse,n)}drawSurface(e,r){let n=r?.diffuseSampler??0,o=r?.tint??[1,1,1,1];this.gl.uniform4fv(this.uniformTint,new Float32Array(o)),this.gl.uniform1i(this.uniformDiffuse,n),e.bind(),this.gl.drawElements(this.gl.TRIANGLES,e.indexCount,this.gl.UNSIGNED_SHORT,0)}dispose(){this.program.dispose()}};var Vd=[1,1,1,1],ni=class{constructor(e,r=Math.random){this.maxParticles=e,this.random=r,this.alive=new Uint8Array(e),this.positionX=new Float32Array(e),this.positionY=new Float32Array(e),this.positionZ=new Float32Array(e),this.velocityX=new Float32Array(e),this.velocityY=new Float32Array(e),this.velocityZ=new Float32Array(e),this.colorR=new Float32Array(e),this.colorG=new Float32Array(e),this.colorB=new Float32Array(e),this.colorA=new Float32Array(e),this.size=new Float32Array(e),this.lifetime=new Float32Array(e),this.remaining=new Float32Array(e),this.gravity=new Float32Array(e),this.damping=new Float32Array(e),this.bounce=new Float32Array(e),this.fade=new Uint8Array(e),this.blendMode=new Uint8Array(e)}spawn(e){let r=this.findFreeSlot();if(r===-1)return null;let n=e.color??Vd,o=e.velocity??{x:0,y:0,z:0};return this.alive[r]=1,this.positionX[r]=e.position.x,this.positionY[r]=e.position.y,this.positionZ[r]=e.position.z,this.velocityX[r]=o.x,this.velocityY[r]=o.y,this.velocityZ[r]=o.z,this.colorR[r]=n[0],this.colorG[r]=n[1],this.colorB[r]=n[2],this.colorA[r]=n[3],this.size[r]=e.size??2.5,this.lifetime[r]=e.lifetime,this.remaining[r]=e.lifetime,this.gravity[r]=e.gravity??800,this.damping[r]=e.damping??0,this.bounce[r]=e.bounce??.25,this.fade[r]=e.fade?1:0,this.blendMode[r]=e.blendMode==="additive"?1:0,r}update(e,r={}){let n=r.floorZ??-1/0;for(let o=0;o<this.maxParticles;o+=1){if(!this.alive[o])continue;if(this.remaining[o]-=e,this.remaining[o]<=0){this.alive[o]=0;continue}let i=Math.max(0,1-this.damping[o]*e);this.velocityX[o]*=i,this.velocityY[o]*=i,this.velocityZ[o]=this.velocityZ[o]*i-this.gravity[o]*e,this.positionX[o]+=this.velocityX[o]*e,this.positionY[o]+=this.velocityY[o]*e,this.positionZ[o]+=this.velocityZ[o]*e,this.positionZ[o]<n&&(this.positionZ[o]=n,this.velocityZ[o]=-this.velocityZ[o]*this.bounce[o],this.velocityX[o]*=.7,this.velocityY[o]*=.7)}}killAll(){this.alive.fill(0)}aliveCount(){let e=0;for(let r=0;r<this.maxParticles;r+=1)this.alive[r]&&(e+=1);return e}getState(e){return{alive:this.alive[e]===1,position:{x:this.positionX[e],y:this.positionY[e],z:this.positionZ[e]},velocity:{x:this.velocityX[e],y:this.velocityY[e],z:this.velocityZ[e]},remaining:this.remaining[e],color:[this.colorR[e],this.colorG[e],this.colorB[e],this.colorA[e]],size:this.size[e],blendMode:this.blendMode[e]===1?"additive":"alpha"}}buildMesh(e,r){let n=[],o=[],i=[],s=a=>{let c=o.length,l=0;for(let d=0;d<this.maxParticles;d+=1){if(!this.alive[d]||(a==="additive"?1:0)!==this.blendMode[d])continue;l+=1;let u=n.length/9,m=this.size[d]*.5,f=this.fade[d]?Math.max(this.remaining[d]/this.lifetime[d],0):1,h=this.blendMode[d]===1?1.2:1,y=this.colorR[d]*h,p=this.colorG[d]*h,x=this.colorB[d]*h,M=this.colorA[d]*f,v=this.positionX[d],S=this.positionY[d],b=this.positionZ[d],_=e.x*m,w=e.y*m,L=e.z*m,P=r.x*m,A=r.y*m,N=r.z*m,U=[{x:v-_-P,y:S-w-A,z:b-L-N},{x:v+_-P,y:S+w-A,z:b+L-N},{x:v-_+P,y:S-w+A,z:b-L+N},{x:v+_+P,y:S+w+A,z:b+L+N}],V=[[0,1],[1,1],[0,0],[1,0]];U.forEach((F,K)=>{n.push(F.x,F.y,F.z,V[K]?.[0]??0,V[K]?.[1]??0,y,p,x,M)}),o.push(u,u+1,u+2,u+2,u+1,u+3)}l>0&&i.push({blendMode:a,start:c,count:o.length-c})};return s("alpha"),s("additive"),{vertices:new Float32Array(n),indices:new Uint16Array(o),batches:i}}findFreeSlot(){for(let e=0;e<this.maxParticles;e+=1)if(!this.alive[e])return e;return-1}},ps=`#version 300 es
289
289
  precision highp float;
290
290
 
291
291
  layout(location = 0) in vec3 a_position;
@@ -313,5 +313,5 @@ void main() {
313
313
  float dist = distance(v_uv, vec2(0.5));
314
314
  float alpha = v_color.a * (1.0 - smoothstep(0.35, 0.5, dist));
315
315
  o_color = vec4(v_color.rgb, alpha);
316
- }`,oi=class{constructor(e,r){this.vertexCapacity=0;this.indexCapacity=0;this.gl=e,this.system=r,this.program=he.create(e,{vertex:ps,fragment:hs}),this.vertexBuffer=new ye(e,e.DYNAMIC_DRAW),this.indexBuffer=new ke(e,e.DYNAMIC_DRAW),this.vertexArray=new be(e),this.vertexArray.configureAttributes([{index:0,size:3,type:e.FLOAT,stride:36,offset:0},{index:1,size:2,type:e.FLOAT,stride:36,offset:12},{index:2,size:4,type:e.FLOAT,stride:36,offset:20}],this.vertexBuffer)}render(e){let r=this.system.buildMesh(e.viewRight,e.viewUp);if(r.indices.length===0)return;let n=r.vertices;r.vertices.byteLength>this.vertexCapacity?(this.vertexCapacity=r.vertices.byteLength,this.vertexBuffer.upload(n,this.gl.DYNAMIC_DRAW)):this.vertexBuffer.update(n);let o=r.indices;r.indices.byteLength>this.indexCapacity?(this.indexCapacity=r.indices.byteLength,this.indexBuffer.upload(o,this.gl.DYNAMIC_DRAW)):this.indexBuffer.update(o),this.gl.depthMask(!1),this.program.use();let i=this.program.getUniformLocation("u_viewProjection");this.gl.uniformMatrix4fv(i,!1,e.viewProjection),this.vertexArray.bind();for(let s of r.batches)s.blendMode==="additive"?this.gl.blendFunc(this.gl.SRC_ALPHA,this.gl.ONE):this.gl.blendFuncSeparate(this.gl.SRC_ALPHA,this.gl.ONE_MINUS_SRC_ALPHA,this.gl.ONE,this.gl.ONE_MINUS_SRC_ALPHA),this.gl.drawElements(this.gl.TRIANGLES,s.count,this.gl.UNSIGNED_SHORT,s.start*2);this.gl.depthMask(!0)}dispose(){this.program.dispose(),this.vertexBuffer.dispose(),this.indexBuffer.dispose(),this.vertexArray.dispose()}};function pc(t){let{system:e,origin:r,normal:n={x:0,y:0,z:1}}=t;for(let o=0;o<12;o+=1){let i=200+e.random()*180,s=e.random()*.35;e.spawn({position:r,velocity:{x:n.x*i+(e.random()-.5)*80,y:n.y*i+(e.random()-.5)*80,z:Math.max(n.z*i,120)+s*80},color:[1,.8,.4,1],size:2.5,lifetime:.45+e.random()*.1,gravity:600,damping:2,bounce:.45,blendMode:"additive",fade:!0})}for(let o=0;o<8;o+=1)e.spawn({position:r,velocity:{x:(e.random()-.5)*40,y:(e.random()-.5)*40,z:80+e.random()*40},color:[.45,.45,.45,.75],size:6,lifetime:.6,gravity:200,damping:4,bounce:.15,blendMode:"alpha",fade:!0})}function hc(t){let{system:e,origin:r}=t;for(let n=0;n<40;n+=1){let o=e.random()*Math.PI*2,i=Math.acos(2*e.random()-1),s=220+e.random()*260,a={x:Math.sin(i)*Math.cos(o),y:Math.sin(i)*Math.sin(o),z:Math.cos(i)};e.spawn({position:r,velocity:{x:a.x*s,y:a.y*s,z:a.z*s},color:[1,.6,.2,1],size:5,lifetime:.9,gravity:700,damping:1,bounce:.35,blendMode:"additive",fade:!0})}for(let n=0;n<16;n+=1)e.spawn({position:r,velocity:{x:(e.random()-.5)*30,y:(e.random()-.5)*30,z:120+e.random()*120},color:[.25,.25,.25,.9],size:12,lifetime:1.2,gravity:300,damping:3,blendMode:"alpha",fade:!0})}function yc(t){let{system:e,origin:r,direction:n={x:0,y:0,z:1}}=t;for(let o=0;o<24;o+=1){let i=120+e.random()*180;e.spawn({position:r,velocity:{x:n.x*i+(e.random()-.5)*70,y:n.y*i+(e.random()-.5)*70,z:n.z*i+e.random()*80},color:[.6,0,0,.95],size:3,lifetime:.8,gravity:900,damping:1,bounce:.2,blendMode:"alpha",fade:!0})}}function xc(t){let{system:e,origin:r}=t;for(let n=0;n<30;n+=1){let o=e.random()*Math.PI*2,i=8+e.random()*8;e.spawn({position:r,velocity:{x:Math.cos(o)*i,y:Math.sin(o)*i,z:100+e.random()*80},color:[.4,.6,1,.9],size:4,lifetime:.5,gravity:300,damping:2,blendMode:"additive",fade:!0})}}function gc(t){let{system:e,origin:r,direction:n={x:1,y:0,z:0}}=t;for(let o=0;o<10;o+=1){let i=350+e.random()*100;e.spawn({position:r,velocity:{x:n.x*i+(e.random()-.5)*30,y:n.y*i+(e.random()-.5)*30,z:n.z*i+(e.random()-.5)*30},color:[1,.8,.3,1],size:3,lifetime:.25,gravity:200,damping:1,blendMode:"additive",fade:!0})}}function vc(t){let{system:e,origin:r,direction:n={x:0,y:0,z:0}}=t;for(let o=0;o<6;o+=1)e.spawn({position:{x:r.x+n.x*o*2,y:r.y+n.y*o*2,z:r.z+n.z*o*2},velocity:{x:(e.random()-.5)*15,y:(e.random()-.5)*15,z:20+e.random()*15},color:[.6,.6,.6,.8],size:2.2,lifetime:.6,gravity:200,damping:1.5,blendMode:"alpha",fade:!0})}function Ud(t){return{init(){t.trace({x:0,y:0,z:0},{x:0,y:0,z:0})},shutdown(){},createMainLoop(e,r){return new Tt(e,r)}}}return Cc(Gd);})();
316
+ }`,oi=class{constructor(e,r){this.vertexCapacity=0;this.indexCapacity=0;this.gl=e,this.system=r,this.program=ye.create(e,{vertex:ps,fragment:hs}),this.vertexBuffer=new xe(e,e.DYNAMIC_DRAW),this.indexBuffer=new De(e,e.DYNAMIC_DRAW),this.vertexArray=new Se(e),this.vertexArray.configureAttributes([{index:0,size:3,type:e.FLOAT,stride:36,offset:0},{index:1,size:2,type:e.FLOAT,stride:36,offset:12},{index:2,size:4,type:e.FLOAT,stride:36,offset:20}],this.vertexBuffer)}render(e){let r=this.system.buildMesh(e.viewRight,e.viewUp);if(r.indices.length===0)return;let n=r.vertices;r.vertices.byteLength>this.vertexCapacity?(this.vertexCapacity=r.vertices.byteLength,this.vertexBuffer.upload(n,this.gl.DYNAMIC_DRAW)):this.vertexBuffer.update(n);let o=r.indices;r.indices.byteLength>this.indexCapacity?(this.indexCapacity=r.indices.byteLength,this.indexBuffer.upload(o,this.gl.DYNAMIC_DRAW)):this.indexBuffer.update(o),this.gl.depthMask(!1),this.program.use();let i=this.program.getUniformLocation("u_viewProjection");this.gl.uniformMatrix4fv(i,!1,e.viewProjection),this.vertexArray.bind();for(let s of r.batches)s.blendMode==="additive"?this.gl.blendFunc(this.gl.SRC_ALPHA,this.gl.ONE):this.gl.blendFuncSeparate(this.gl.SRC_ALPHA,this.gl.ONE_MINUS_SRC_ALPHA,this.gl.ONE,this.gl.ONE_MINUS_SRC_ALPHA),this.gl.drawElements(this.gl.TRIANGLES,s.count,this.gl.UNSIGNED_SHORT,s.start*2);this.gl.depthMask(!0)}dispose(){this.program.dispose(),this.vertexBuffer.dispose(),this.indexBuffer.dispose(),this.vertexArray.dispose()}};function pc(t){let{system:e,origin:r,normal:n={x:0,y:0,z:1}}=t;for(let o=0;o<12;o+=1){let i=200+e.random()*180,s=e.random()*.35;e.spawn({position:r,velocity:{x:n.x*i+(e.random()-.5)*80,y:n.y*i+(e.random()-.5)*80,z:Math.max(n.z*i,120)+s*80},color:[1,.8,.4,1],size:2.5,lifetime:.45+e.random()*.1,gravity:600,damping:2,bounce:.45,blendMode:"additive",fade:!0})}for(let o=0;o<8;o+=1)e.spawn({position:r,velocity:{x:(e.random()-.5)*40,y:(e.random()-.5)*40,z:80+e.random()*40},color:[.45,.45,.45,.75],size:6,lifetime:.6,gravity:200,damping:4,bounce:.15,blendMode:"alpha",fade:!0})}function hc(t){let{system:e,origin:r}=t;for(let n=0;n<40;n+=1){let o=e.random()*Math.PI*2,i=Math.acos(2*e.random()-1),s=220+e.random()*260,a={x:Math.sin(i)*Math.cos(o),y:Math.sin(i)*Math.sin(o),z:Math.cos(i)};e.spawn({position:r,velocity:{x:a.x*s,y:a.y*s,z:a.z*s},color:[1,.6,.2,1],size:5,lifetime:.9,gravity:700,damping:1,bounce:.35,blendMode:"additive",fade:!0})}for(let n=0;n<16;n+=1)e.spawn({position:r,velocity:{x:(e.random()-.5)*30,y:(e.random()-.5)*30,z:120+e.random()*120},color:[.25,.25,.25,.9],size:12,lifetime:1.2,gravity:300,damping:3,blendMode:"alpha",fade:!0})}function yc(t){let{system:e,origin:r,direction:n={x:0,y:0,z:1}}=t;for(let o=0;o<24;o+=1){let i=120+e.random()*180;e.spawn({position:r,velocity:{x:n.x*i+(e.random()-.5)*70,y:n.y*i+(e.random()-.5)*70,z:n.z*i+e.random()*80},color:[.6,0,0,.95],size:3,lifetime:.8,gravity:900,damping:1,bounce:.2,blendMode:"alpha",fade:!0})}}function xc(t){let{system:e,origin:r}=t;for(let n=0;n<30;n+=1){let o=e.random()*Math.PI*2,i=8+e.random()*8;e.spawn({position:r,velocity:{x:Math.cos(o)*i,y:Math.sin(o)*i,z:100+e.random()*80},color:[.4,.6,1,.9],size:4,lifetime:.5,gravity:300,damping:2,blendMode:"additive",fade:!0})}}function gc(t){let{system:e,origin:r,direction:n={x:1,y:0,z:0}}=t;for(let o=0;o<10;o+=1){let i=350+e.random()*100;e.spawn({position:r,velocity:{x:n.x*i+(e.random()-.5)*30,y:n.y*i+(e.random()-.5)*30,z:n.z*i+(e.random()-.5)*30},color:[1,.8,.3,1],size:3,lifetime:.25,gravity:200,damping:1,blendMode:"additive",fade:!0})}}function vc(t){let{system:e,origin:r,direction:n={x:0,y:0,z:0}}=t;for(let o=0;o<6;o+=1)e.spawn({position:{x:r.x+n.x*o*2,y:r.y+n.y*o*2,z:r.z+n.z*o*2},velocity:{x:(e.random()-.5)*15,y:(e.random()-.5)*15,z:20+e.random()*15},color:[.6,.6,.6,.8],size:2.2,lifetime:.6,gravity:200,damping:1.5,blendMode:"alpha",fade:!0})}function Ud(t){return{init(){t.trace({x:0,y:0,z:0},{x:0,y:0,z:0})},shutdown(){},createMainLoop(e,r){return new Tt(e,r)}}}return Cc(Gd);})();
317
317
  //# sourceMappingURL=index.global.js.map