quake2ts 0.0.78 → 0.0.80
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/packages/client/dist/browser/index.global.js +1 -1
- package/packages/client/dist/browser/index.global.js.map +1 -1
- package/packages/client/dist/cjs/index.cjs +856 -1
- package/packages/client/dist/cjs/index.cjs.map +1 -1
- package/packages/client/dist/esm/index.js +856 -1
- package/packages/client/dist/esm/index.js.map +1 -1
- package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/client/dist/types/index.d.ts +2 -1
- package/packages/client/dist/types/index.d.ts.map +1 -1
- package/packages/engine/dist/browser/index.global.js +14 -14
- package/packages/engine/dist/browser/index.global.js.map +1 -1
- package/packages/engine/dist/cjs/index.cjs +875 -0
- package/packages/engine/dist/cjs/index.cjs.map +1 -1
- package/packages/engine/dist/esm/index.js +871 -0
- package/packages/engine/dist/esm/index.js.map +1 -1
- package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/engine/dist/types/demo/demoReader.d.ts +27 -0
- package/packages/engine/dist/types/demo/demoReader.d.ts.map +1 -0
- package/packages/engine/dist/types/demo/index.d.ts +4 -0
- package/packages/engine/dist/types/demo/index.d.ts.map +1 -0
- package/packages/engine/dist/types/demo/playback.d.ts +3 -4
- package/packages/engine/dist/types/demo/playback.d.ts.map +1 -1
- package/packages/engine/dist/types/index.d.ts +1 -0
- package/packages/engine/dist/types/index.d.ts.map +1 -1
- package/packages/game/dist/browser/index.global.js +1 -1
- package/packages/game/dist/browser/index.global.js.map +1 -1
- package/packages/game/dist/cjs/index.cjs +88 -0
- package/packages/game/dist/cjs/index.cjs.map +1 -1
- package/packages/game/dist/esm/index.js +88 -0
- package/packages/game/dist/esm/index.js.map +1 -1
- package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/game/dist/types/physics/movement.d.ts.map +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
"use strict";var Quake2Engine=(()=>{var Rc=Object.create;var Un=Object.defineProperty;var Bc=Object.getOwnPropertyDescriptor;var Oc=Object.getOwnPropertyNames;var Dc=Object.getPrototypeOf,kc=Object.prototype.hasOwnProperty;var Hc=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),di=(t,e)=>{for(var r in e)Un(t,r,{get:e[r],enumerable:!0})},Ps=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Oc(e))!kc.call(t,o)&&o!==r&&Un(t,o,{get:()=>e[o],enumerable:!(n=Bc(e,o))||n.enumerable});return t};var Nc=(t,e,r)=>(r=t!=null?Rc(Dc(t)):{},Ps(e||!t||!t.__esModule?Un(r,"default",{value:t,enumerable:!0}):r,t)),Vc=t=>Ps(Un({},"__esModule",{value:!0}),t);var fa=Hc((kf,ua)=>{"use strict";ua.exports=Worker});var A0={};di(A0,{ATTN_IDLE:()=>Ga,ATTN_LOOP_NONE:()=>Va,ATTN_NONE:()=>No,ATTN_NORM:()=>Ua,ATTN_STATIC:()=>Wa,AssetDependencyError:()=>jt,AssetDependencyTracker:()=>Rn,AssetManager:()=>ko,AudioApi:()=>Qo,AudioContextController:()=>Uo,AudioRegistry:()=>Ar,AudioRegistryError:()=>Fn,AudioSystem:()=>jo,BSP_SURFACE_FRAGMENT_SOURCE:()=>os,BSP_SURFACE_VERTEX_SOURCE:()=>ns,BSP_VERTEX_LAYOUT:()=>es,BspLoader:()=>Zn,BspParseError:()=>K,BspSurfacePipeline:()=>ei,Camera:()=>ii,ConfigStringRegistry:()=>er,Cvar:()=>Br,CvarRegistry:()=>jn,EngineHost:()=>Jt,EngineRuntime:()=>Rr,FixedTimestepLoop:()=>Ct,Framebuffer:()=>Jo,IndexBuffer:()=>De,LruCache:()=>ft,MAX_SOUND_CHANNELS:()=>$i,MD2_FRAGMENT_SHADER:()=>us,MD2_VERTEX_SHADER:()=>ds,MD3_FRAGMENT_SHADER:()=>vs,MD3_VERTEX_SHADER:()=>bs,Md2Loader:()=>rr,Md2MeshBuffers:()=>ri,Md2ParseError:()=>ae,Md2Pipeline:()=>ni,Md3Loader:()=>nr,Md3ModelMesh:()=>si,Md3ParseError:()=>Pe,Md3Pipeline:()=>ai,Md3SurfaceMesh:()=>Dn,MusicSystem:()=>$o,PARTICLE_FRAGMENT_SHADER:()=>Ms,PARTICLE_VERTEX_SHADER:()=>Ss,PakArchive:()=>tr,PakIndexStore:()=>Do,PakIngestionError:()=>ut,PakParseError:()=>ze,PakValidationError:()=>Tt,PakValidator:()=>Qn,ParticleRenderer:()=>li,ParticleSystem:()=>ci,RERELEASE_KNOWN_PAKS:()=>Mi,SKYBOX_FRAGMENT_SHADER:()=>cs,SKYBOX_VERTEX_SHADER:()=>as,SOUND_FULLVOLUME:()=>_r,SOUND_LOOP_ATTENUATE:()=>Xa,ShaderProgram:()=>ge,SkyboxPipeline:()=>ti,SoundChannel:()=>Ho,SoundPrecache:()=>Xo,SoundRegistry:()=>Wo,SpriteLoader:()=>or,SpriteParseError:()=>mt,Texture2D:()=>wr,TextureCache:()=>ir,TextureCubeMap:()=>Lr,VertexArray:()=>Me,VertexBuffer:()=>xe,VirtualFileSystem:()=>$n,advanceAnimation:()=>oa,applySurfaceState:()=>oc,attenuationToDistanceMultiplier:()=>$t,boxIntersectsFrustum:()=>On,buildBspGeometry:()=>Qa,buildMd2Geometry:()=>fs,buildMd2VertexData:()=>ms,buildMd3SurfaceGeometry:()=>gs,buildMd3VertexData:()=>xs,calculateMaxAudibleDistance:()=>Vo,calculatePakChecksum:()=>Ks,computeFrameBlend:()=>ia,computeSkyScroll:()=>ac,createAnimationState:()=>sa,createAudioGraph:()=>Go,createBspSurfaces:()=>$a,createEngine:()=>M0,createEngineRuntime:()=>Ws,createFaceLightmap:()=>eo,createInitialChannels:()=>Ko,createProgramFromSources:()=>ja,createWebGLContext:()=>Ya,decodeOgg:()=>Oo,deriveSurfaceRenderState:()=>ss,extractFrustumPlanes:()=>Ja,filesToPakSources:()=>Ai,findLeafForPoint:()=>rs,gatherVisibleFaces:()=>rc,groupMd2Animations:()=>ea,ingestPakFiles:()=>Ys,ingestPaks:()=>Jn,interpolateMd3Tag:()=>wc,interpolateVec3:()=>aa,parseBsp:()=>_i,parseMd2:()=>wi,parseMd3:()=>Li,parsePcx:()=>ca,parseSprite:()=>Ei,parseWal:()=>ro,parseWalTexture:()=>da,parseWav:()=>oo,pcxToRgba:()=>no,pickChannel:()=>Yo,preparePcxTexture:()=>la,removeViewTranslation:()=>sc,resolveLightStyles:()=>is,spatializeOrigin:()=>qo,spawnBlood:()=>Ic,spawnBulletImpact:()=>Lc,spawnExplosion:()=>Ec,spawnMuzzleFlash:()=>Pc,spawnTeleportFlash:()=>zc,spawnTrail:()=>Fc,walToRgba:()=>Ii,wireDropTarget:()=>qs,wireFileInput:()=>js});var Uc=()=>typeof performance<"u"?performance.now():Date.now(),Gc=t=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>t()):setTimeout(t,25)},Ct=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??Uc,schedule:r.schedule??Gc}}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 Jt=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 Ct({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 Fs={x:0,y:0,z:0};var I0=Math.PI/180;function Cs(t,e){return{x:t.x-e.x,y:t.y-e.y,z:t.z-e.z}}function Wc(t,e){return{x:t.x*e,y:t.y*e,z:t.z*e}}function fi(t,e){return t.x*e.x+t.y*e.y+t.z*e.z}function Xc(t){return fi(t,t)}function mi(t){return Math.sqrt(Xc(t))}function He(t){let e=mi(t);return e===0?t:Wc(t,1/e)}var Kc=Math.PI/180,z0=180/Math.PI,Zt=Kc;function Yc(){return new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])}function Ts(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 Rs(t,e){let r=Yc();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 We=1,dt=2;var hi=8,pi=16,qc=32;var jc=16384;var Gn=65536,Bs=1<<17,$c=1<<18,Qc=1<<19,Jc=1<<20,Zc=1<<21,el=1<<22,tl=1<<23,P0=1<<24,Wn=1<<25,rl=1<<26,F0=1<<27,C0=1<<28,T0=1<<29,Xn=1<<30,R0=1<<31;var Tr=0;var Os=4,Ds=8,ks=16,Hs=32,Ns=64;var B0=1<<25,O0=1<<28,D0=1<<29,k0=1<<30,H0=1<<31;var N0=We|dt,V0=We|Gn|dt|Wn|Xn,U0=We|Gn|dt,G0=We|Bs|dt|Wn|Xn,W0=qc|hi|pi,X0=We|pi|hi,nl=We|Wn|Xn|dt|rl,K0=$c|Qc|Jc|Zc|el|tl,Y0=We|hi|pi|Wn|Xn,q0=We|Gn|dt,j0=We|dt,$0=We|Gn|dt|Bs,Q0=nl|jc;var J0=Number.MAX_SAFE_INTEGER-1;var Kn=(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))(Kn||{});var Yn=256;var yi=256,gi=8192,qn=2048,xi=512,bi=256,vi=Yn*2,Si=256,ui=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+gi]="Sounds",t[t.Images=t.Sounds+qn]="Images",t[t.Lights=t.Images+xi]="Lights",t[t.ShadowLights=t.Lights+yi]="ShadowLights",t[t.Items=t.ShadowLights+Si]="Items",t[t.PlayerSkins=t.Items+bi]="PlayerSkins",t[t.General=t.PlayerSkins+Yn]="General",t[t.WheelWeapons=t.General+vi]="WheelWeapons",t[t.WheelAmmo=t.WheelWeapons+ui]="WheelAmmo",t[t.WheelPowerups=t.WheelAmmo+ui]="WheelPowerups",t[t.CdLoopCount=t.WheelPowerups+ui]="CdLoopCount",t[t.GameStyle=t.CdLoopCount+1]="GameStyle",t[t.MaxConfigStrings=t.GameStyle+1]="MaxConfigStrings",t))(X||{}),Vs=X.MaxConfigStrings;function Us(t){return t>=5&&t<59?Cr*(59-t):t>=X.General&&t<X.WheelWeapons?Cr*(X.MaxConfigStrings-t):Cr}function ol(t){if(t<0||t>=X.MaxConfigStrings)throw new RangeError(`Configstring index ${t} is out of range (0-${X.MaxConfigStrings-1})`)}function Gs(t,e){let r=Us(t);if(e.length>r)throw new RangeError(`Configstring ${t} exceeds maximum length (${e.length} > ${r}); limit is ${Cr} chars per slot`)}var er=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 ol(e),Gs(e,r),this.values.set(e,r),e}get(e){return this.values.get(e)}getAll(){let e=new Array(Vs).fill("");for(let[r,n]of this.values.entries())e[r]=n;return e}modelIndex(e){return this.register(e,X.Models,gi,"modelCursor")}soundIndex(e){return this.register(e,X.Sounds,qn,"soundCursor")}findSoundIndex(e){for(let r=X.Sounds;r<X.Sounds+qn;r+=1)if(this.values.get(r)===e)return r}imageIndex(e){return this.register(e,X.Images,xi,"imageCursor")}lightIndex(e){return this.register(e,X.Lights,yi,"lightCursor")}shadowLightIndex(e){return this.register(e,X.ShadowLights,Si,"shadowLightCursor")}itemIndex(e){return this.register(e,X.Items,bi,"itemCursor")}playerSkinIndex(e){return this.register(e,X.PlayerSkins,Yn,"playerSkinCursor")}generalIndex(e){return this.register(e,X.General,vi,"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 Gs(i,e),this.values.set(i,e),this[o]=i+1,i}};var Rr=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 Ws(t,e,r,n){return new Rr(t,new Jt(e,r,n))}var Br=class{constructor({name:e,defaultValue:r,description:n,flags:o=Kn.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&Kn.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)}},jn=class{constructor(){this.cvars=new Map}register(e){let r=this.cvars.get(e.name);if(r)return r;let n=new Br(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 il="PACK";function sl(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 re(t){return t.replace(/\\/g,"/").replace(/^\/+/,"").toLowerCase()}function al(){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 cl=al();function Xs(t){let e=4294967295;for(let r=0;r<t.length;r+=1){let n=t[r];e=cl[(e^n)&255]^e>>>8}return(e^4294967295)>>>0}var ze=class extends Error{},tr=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!==il)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 f=i+u*64,m=sl(n,f,56),p=re(m),y=n.getInt32(f+56,!0),h=n.getInt32(f+60,!0);if(y<0||h<0||y+h>r.byteLength)throw new ze(`Invalid entry bounds for ${m||"<unnamed>"} (offset=${y}, length=${h})`);if(!p)throw new ze(`Entry ${u} has an empty name`);let g={name:p,offset:y,length:h};d.set(p,g)}return l.push(...d.values()),new t(e,r,l,Xs(new Uint8Array(r)))}getEntry(e){return this.entries.get(re(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 Ks(t){return Xs(new Uint8Array(t))}var $n=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=re(r.name);this.files.set(n,{archive:e,entry:r})}}get mountedPaks(){return[...this.mounts]}hasFile(e){return this.files.has(re(e))}stat(e){let r=this.files.get(re(e));if(r)return{path:r.entry.name,size:r.entry.length,sourcePak:r.archive.name}}async readFile(e){let r=this.files.get(re(e));if(!r)throw new Error(`File not found in VFS: ${e}`);return r.archive.readFile(e)}list(e=""){let r=re(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 Mi=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"}]),Tt=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"}},Qn=class{constructor(e=Mi){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 Tt(n);return n}normalizePakName(e){let r=re(e),n=r.split("/"),o=n.pop()??r,i=n.pop();return i?`${o}@${i}`:o}};var ut=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 ll(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 ut("blob",new Error("Unsupported Blob type"))}async function dl(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 ll(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 Jn(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 dl(l,n.onProgress),u=tr.fromArrayBuffer(l.name,d),f=n.validator?.validateArchive(u);if(f){n.onValidationResult?.(f);let m=f.status==="mismatch",p=f.status==="unknown";if(m&&i||p&&!s){let y=new Tt(f);if(n.onError?.(l.name,y),a)throw new ut(l.name,y);c.push({archive:u,mounted:!1,validation:f});continue}}if(t.mountPak(u),o&&n.pakIndexStore)try{await n.pakIndexStore.persist(u)}catch(m){if(n.onError?.(l.name,m),a)throw new ut(l.name,m)}n.onProgress?.({file:l.name,loadedBytes:d.byteLength,totalBytes:d.byteLength,state:"parsed"}),c.push({archive:u,mounted:!0,validation:f})}catch(d){if(n.onProgress?.({file:l.name,loadedBytes:0,totalBytes:0,state:"error"}),n.onError?.(l.name,d),a)throw new ut(l.name,d)}return c}var ft=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 ul(t){return Array.isArray(t)?t:Array.from(t)}function Ai(t){return ul(t).map(e=>({name:e.name,data:e}))}async function Ys(t,e,r){let n=Ai(e);return Jn(t,n,r??{})}function qs(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 js(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 fl="IBSP",ml=38,Qs=19,hl=8+Qs*8;var K=class extends Error{},Zn=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),_i(n.buffer)}};function _i(t){if(t.byteLength<hl)throw new K("BSP too small to contain header");let e=new DataView(t),r=String.fromCharCode(e.getUint8(0),e.getUint8(1),e.getUint8(2),e.getUint8(3));if(r!==fl)throw new K(`Invalid BSP magic ${r}`);let n=e.getInt32(4,!0);if(n!==ml)throw new K(`Unsupported BSP version ${n}`);let o=new Map;for(let A=0;A<Qs;A+=1){let _=e.getInt32(8+A*8,!0),L=e.getInt32(12+A*8,!0);if(_<0||L<0||_+L>t.byteLength)throw new K(`Invalid lump bounds for index ${A}`);o.set(A,{offset:_,length:L})}let i={version:n,lumps:o},s=pl(t,o.get(0)),a=gl(t,o.get(1)),c=xl(t,o.get(2)),l=bl(t,o.get(4)),d=vl(t,o.get(5)),u=Sl(t,o.get(6)),f=new Uint8Array(t,o.get(7).offset,o.get(7).length),m=Pl(u,o.get(7)),p=Ml(t,o.get(8)),y=Al(t,o.get(11)),h=_l(t,o.get(12)),g=wl(t,o.get(13)),S=Ll(t,o.get(14)),b=El(t,o.get(15)),M=Il(t,o.get(9),o.get(10),p),v=zl(t,o.get(3));return{header:i,entities:s,planes:a,vertices:c,nodes:l,texInfo:d,faces:u,lightMaps:f,lightMapInfo:m,leafs:p,leafLists:M,edges:y,surfEdges:h,models:g,brushes:S,brushSides:b,visibility:v}}function pl(t,e){let r=new TextDecoder().decode(new Uint8Array(t,e.offset,e.length)),n=yl(r),o=n.find(i=>i.classname==="worldspawn");return{raw:r,entities:n,worldspawn:o}}function yl(t){let e=[],r=/\{([^}]*)\}/gms,n;for(;(n=r.exec(t))!==null;){let o=n[1],i={},s=/"([^\"]*)"\s+"([^\"]*)"/g,a;for(;(a=s.exec(o))!==null;)i[a[1]]=a[2];e.push({classname:i.classname,properties:i})}return e}function gl(t,e){let r=new DataView(t,e.offset,e.length),n=e.length/20;if(n%1!==0)throw new K("Plane lump has invalid length");let o=[];for(let i=0;i<n;i+=1){let s=[r.getFloat32(i*20,!0),r.getFloat32(i*20+4,!0),r.getFloat32(i*20+8,!0)],a=r.getFloat32(i*20+12,!0),c=r.getInt32(i*20+16,!0);o.push({normal:s,dist:a,type:c})}return o}function xl(t,e){let r=new DataView(t,e.offset,e.length),n=e.length/12;if(n%1!==0)throw new K("Vertex lump has invalid length");let o=[];for(let i=0;i<n;i+=1)o.push([r.getFloat32(i*12,!0),r.getFloat32(i*12+4,!0),r.getFloat32(i*12+8,!0)]);return o}function bl(t,e){let r=new DataView(t,e.offset,e.length),n=36,o=e.length/n;if(o%1!==0)throw new K("Node lump has invalid length");let i=[];for(let s=0;s<o;s+=1){let a=s*n,c=r.getInt32(a,!0),l=[r.getInt32(a+4,!0),r.getInt32(a+8,!0)],d=[r.getInt16(a+12,!0),r.getInt16(a+14,!0),r.getInt16(a+16,!0)],u=[r.getInt16(a+18,!0),r.getInt16(a+20,!0),r.getInt16(a+22,!0)],f=r.getUint16(a+24,!0),m=r.getUint16(a+26,!0);i.push({planeIndex:c,children:l,mins:d,maxs:u,firstFace:f,numFaces:m})}return i}function vl(t,e){let r=new DataView(t,e.offset,e.length),n=76,o=e.length/n;if(o%1!==0)throw new K("TexInfo lump has invalid length");let i=[];for(let s=0;s<o;s+=1){let a=s*n,c=[r.getFloat32(a,!0),r.getFloat32(a+4,!0),r.getFloat32(a+8,!0)],l=r.getFloat32(a+12,!0),d=[r.getFloat32(a+16,!0),r.getFloat32(a+20,!0),r.getFloat32(a+24,!0)],u=r.getFloat32(a+28,!0),f=r.getInt32(a+32,!0),m=r.getInt32(a+36,!0),p=new Uint8Array(t,e.offset+a+40,32),y=new TextDecoder("utf-8").decode(p).replace(/\0.*$/,""),h=r.getInt32(a+72,!0);i.push({s:c,sOffset:l,t:d,tOffset:u,flags:f,value:m,texture:y,nextTexInfo:h})}return i}function Sl(t,e){let r=new DataView(t,e.offset,e.length),n=20,o=e.length/n;if(o%1!==0)throw new K("Face lump has invalid length");let i=[];for(let s=0;s<o;s+=1){let a=s*n,c=r.getUint16(a,!0),l=r.getInt16(a+2,!0),d=r.getInt32(a+4,!0),u=r.getInt16(a+8,!0),f=r.getInt16(a+10,!0),m=[r.getUint8(a+12),r.getUint8(a+13),r.getUint8(a+14),r.getUint8(a+15)],p=r.getInt32(a+16,!0);i.push({planeIndex:c,side:l,firstEdge:d,numEdges:u,texInfo:f,styles:m,lightOffset:p})}return i}function Ml(t,e){let r=new DataView(t,e.offset,e.length),n=28,o=e.length/n;if(o%1!==0)throw new K("Leaf lump has invalid length");let i=[];for(let s=0;s<o;s+=1){let a=s*n,c=r.getInt32(a,!0),l=r.getInt16(a+4,!0),d=r.getInt16(a+6,!0),u=[r.getInt16(a+8,!0),r.getInt16(a+10,!0),r.getInt16(a+12,!0)],f=[r.getInt16(a+14,!0),r.getInt16(a+16,!0),r.getInt16(a+18,!0)],m=r.getUint16(a+20,!0),p=r.getUint16(a+22,!0),y=r.getUint16(a+24,!0),h=r.getUint16(a+26,!0);i.push({contents:c,cluster:l,area:d,mins:u,maxs:f,firstLeafFace:m,numLeafFaces:p,firstLeafBrush:y,numLeafBrushes:h})}return i}function Al(t,e){let r=new DataView(t,e.offset,e.length),n=4,o=e.length/n;if(o%1!==0)throw new K("Edge lump has invalid length");let i=[];for(let s=0;s<o;s+=1){let a=s*n;i.push({vertices:[r.getUint16(a,!0),r.getUint16(a+2,!0)]})}return i}function _l(t,e){let r=e.length/4;if(r%1!==0)throw new K("SurfEdge lump has invalid length");let n=new DataView(t,e.offset,e.length),o=new Int32Array(r);for(let i=0;i<r;i+=1)o[i]=n.getInt32(i*4,!0);return o}function wl(t,e){let r=new DataView(t,e.offset,e.length),n=48;if(e.length%n!==0)throw new K("Model lump has invalid length");let o=e.length/n,i=[];for(let s=0;s<o;s+=1){let a=s*n,c=[r.getFloat32(a,!0),r.getFloat32(a+4,!0),r.getFloat32(a+8,!0)],l=[r.getFloat32(a+12,!0),r.getFloat32(a+16,!0),r.getFloat32(a+20,!0)],d=[r.getFloat32(a+24,!0),r.getFloat32(a+28,!0),r.getFloat32(a+32,!0)],u=r.getInt32(a+36,!0),f=r.getInt32(a+40,!0),m=r.getInt32(a+44,!0);i.push({mins:c,maxs:l,origin:d,headNode:u,firstFace:f,numFaces:m})}return i}function Ll(t,e){let r=new DataView(t,e.offset,e.length),n=12,o=e.length/n;if(o%1!==0)throw new K("Brush lump has invalid length");let i=[];for(let s=0;s<o;s+=1){let a=s*n;i.push({firstSide:r.getInt32(a,!0),numSides:r.getInt32(a+4,!0),contents:r.getInt32(a+8,!0)})}return i}function El(t,e){let r=new DataView(t,e.offset,e.length),n=8,o=e.length/n;if(o%1!==0)throw new K("Brush side lump has invalid length");let i=[];for(let s=0;s<o;s+=1){let a=s*n;i.push({planeIndex:r.getUint16(a,!0),texInfo:r.getInt16(a+2,!0)})}return i}function Il(t,e,r,n){let o=[],i=[],s=e.length/2,a=r.length/2,c=new DataView(t,e.offset,e.length),l=new DataView(t,r.offset,r.length);for(let d of n){if(d.firstLeafFace+d.numLeafFaces>s)throw new K("Leaf faces reference data past lump bounds");if(d.firstLeafBrush+d.numLeafBrushes>a)throw new K("Leaf brushes reference data past lump bounds");let u=[];for(let m=0;m<d.numLeafFaces;m+=1)u.push(c.getUint16((d.firstLeafFace+m)*2,!0));let f=[];for(let m=0;m<d.numLeafBrushes;m+=1)f.push(l.getUint16((d.firstLeafBrush+m)*2,!0));o.push(u),i.push(f)}return{leafFaces:o,leafBrushes:i}}function zl(t,e){if(e.length===0)return;if(e.length<4)throw new K("Visibility lump too small");let r=new DataView(t,e.offset,e.length),n=r.getInt32(0,!0),o=4+n*8;if(n<0||o>e.length)throw new K("Visibility lump truncated");let i=4,s=[];for(let a=0;a<n;a+=1){let c=r.getInt32(i,!0),l=r.getInt32(i+4,!0);i+=8;let d=e.offset+c,u=e.offset+l,f=e.offset+e.length;if(c<0||l<0||d>=f||u>=f)throw new K("Visibility offsets out of range");s.push({pvs:$s(t,d,n,e),phs:$s(t,u,n,e)})}return{numClusters:n,clusters:s}}function $s(t,e,r,n){let o=Math.ceil(r/8),i=new Uint8Array(o),s=new Uint8Array(t),a=e,c=0,l=n.offset+n.length;for(;c<o;){if(a>=l)throw new K("Visibility data truncated");let d=s[a++];if(d!==0){i[c++]=d;continue}if(a>=l)throw new K("Visibility run exceeds lump bounds");let u=s[a++];for(let f=0;f<u&&c<o;f+=1)i[c++]=0}return i}function Pl(t,e){return t.map(r=>{if(!(r.lightOffset<0))return{offset:r.lightOffset,length:Math.max(0,e.length-r.lightOffset)}})}function eo(t,e,r){if(t.lightOffset<0||t.lightOffset>=e.byteLength)return;let n=e.byteLength-t.lightOffset,o=Math.min(r?.length??n,n);if(!(o<=0))return e.subarray(t.lightOffset,t.lightOffset+o)}var Fl=844121161,Cl=8,Js=68,Tl=[{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}],ae=class extends Error{},rr=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),wi(n.buffer)}};function Zs(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 Or(t,e,r,n){if(r!==0&&(e<Js||e+r>t.byteLength))throw new ae(`${n} section is out of bounds`)}function Rl(t){if(t.byteLength<Js)throw new ae("MD2 buffer too small to contain header");let e=new DataView(t),r=e.getInt32(0,!0),n=e.getInt32(4,!0);if(r!==Fl)throw new ae(`Invalid MD2 ident: ${r}`);if(n!==Cl)throw new ae(`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 ae(`Unexpected frame size ${o.frameSize}, expected ${i}`);if(o.offsetEnd>t.byteLength)throw new ae("MD2 offset_end exceeds buffer length");return o}function Bl(t,e){let r=e.numSkins*64;Or(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:Zs(n,i*64,64)});return o}function Ol(t,e){let r=e.numTexCoords*4;Or(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 Dl(t,e){let r=e.numTriangles*12;Or(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 ae("Triangle references out of range vertex or texcoord");o.push({vertexIndices:a,texCoordIndices:c})}return o}function kl(t,e){let r=e.numFrames*e.frameSize;Or(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=Zs(s,24,16),d=[];for(let u=0;u<e.numVertices;u+=1){let f=40+u*4,m={x:s.getUint8(f)*a.x+c.x,y:s.getUint8(f+1)*a.y+c.y,z:s.getUint8(f+2)*a.z+c.z},p=s.getUint8(f+3),y=Tl[p];if(!y)throw new ae(`Invalid normal index ${p} in frame ${l}`);d.push({position:m,normalIndex:p,normal:y})}n.push({name:l,vertices:d})}return n}function Hl(t,e){let r=e.numGlCommands*4;if(Or(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 ae("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 ae("GL command vertex block exceeds buffer");for(let d=0;d<a;d+=1){let u=n.getFloat32(i,!0),f=n.getFloat32(i+4,!0),m=n.getInt32(i+8,!0);if(i+=12,m<0||m>=e.numVertices)throw new ae("GL command references invalid vertex index");c.push({s:u,t:f,vertexIndex:m})}o.push({mode:s>0?"strip":"fan",vertices:c})}if(i!==r)throw new ae("GL command list did not consume expected data");return o}function wi(t){let e=Rl(t),r=Bl(t,e),n=Ol(t,e),o=Dl(t,e),i=kl(t,e),s=Hl(t,e);return{header:e,skins:r,texCoords:n,triangles:o,frames:i,glCommands:s}}function ea(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 ta=860898377,Nl=15,Pe=class extends Error{constructor(e){super(e),this.name="Md3ParseError"}};function Dr(t,e,r){let n=new Uint8Array(t.buffer,t.byteOffset+e,r);return new TextDecoder("utf-8").decode(n).replace(/\0.*$/,"").trim()}function Vl(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 to(t,e,r,n){if(e<0||e+r>n)throw new Pe(`${t} exceeds buffer bounds`)}function Ul(t){let e=t.getInt32(0,!0);if(e!==ta)throw new Pe(`Invalid MD3 ident: ${e}`);let r=t.getInt32(4,!0);if(r!==Nl)throw new Pe(`Unsupported MD3 version: ${r}`);let n=Dr(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),f=t.getInt32(104,!0);if(i<=0||a<0||s<0)throw new Pe("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:f}}function Gl(t,e){let r=[];to("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:Dr(t,i+40,16)})}return r}function Wl(t,e){let r=[],o=e.numFrames*e.numTags*112;to("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:Dr(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 Xl(t,e){let r=t.getInt32(e,!0);if(r!==ta)throw new Pe(`Invalid surface ident at ${e}: ${r}`);let n=Dr(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),f=t.getInt32(e+100,!0),m=t.getInt32(e+104,!0);if(i<=0||a<=0||c<=0)throw new Pe(`Invalid surface counts for ${n}`);let p=m;to(`Surface ${n}`,e,p,t.byteLength);let y=[],h=e+l;for(let _=0;_<c;_+=1){let L=h+_*12;y.push({indices:[t.getInt32(L,!0),t.getInt32(L+4,!0),t.getInt32(L+8,!0)]})}let g=[],S=e+d;for(let _=0;_<s;_+=1){let L=S+_*68;g.push({name:Dr(t,L,64),shaderIndex:t.getInt32(L+64,!0)})}let b=[],M=e+u;for(let _=0;_<a;_+=1){let L=M+_*8;b.push({s:t.getFloat32(L,!0),t:t.getFloat32(L+4,!0)})}let v=[],A=e+f;for(let _=0;_<i;_+=1){let L=[];for(let F=0;F<a;F+=1){let w=A+(_*a+F)*8,H=t.getInt16(w,!0)/64,U=t.getInt16(w+2,!0)/64,V=t.getInt16(w+4,!0)/64,C=t.getUint16(w+6,!0);L.push({position:{x:H,y:U,z:V},latLng:C,normal:Vl(C)})}v.push(L)}return{surface:{name:n,flags:o,numFrames:i,shaders:g,triangles:y,texCoords:b,vertices:v},nextOffset:e+m}}function Li(t){if(t.byteLength<108)throw new Pe("MD3 buffer too small for header");let e=new DataView(t),r=Ul(e);to("MD3 end",r.ofsEnd,0,t.byteLength);let n=Gl(e,r),o=Wl(e,r),i=[],s=r.ofsSurfaces;for(let a=0;a<r.numSurfaces;a+=1){let{surface:c,nextOffset:l}=Xl(e,s);i.push(c),s=l}if(s!==r.ofsEnd)throw new Pe("Surface parsing did not reach ofsEnd");return{header:r,frames:n,tags:o,surfaces:i}}var nr=class{constructor(e){this.vfs=e}async load(e){let r=await this.vfs.readFile(e);return Li(r.slice().buffer)}};var Kl=1229214514,Yl=2,ra=64,na=12,mt=class extends Error{};function ql(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 Ei(t){if(t.byteLength<na)throw new mt("Sprite buffer too small to contain header");let e=new DataView(t),r=e.getInt32(0,!0),n=e.getInt32(4,!0),o=e.getInt32(8,!0);if(r!==Kl)throw new mt(`Invalid Sprite ident: ${r}`);if(n!==Yl)throw new mt(`Unsupported Sprite version: ${n}`);let i=[],s=16+ra,a=na;for(let c=0;c<o;c+=1){if(a+s>t.byteLength)throw new mt("Sprite frame data exceeds buffer length");let l=e.getInt32(a,!0),d=e.getInt32(a+4,!0),u=e.getInt32(a+8,!0),f=e.getInt32(a+12,!0),m=ql(e,a+16,ra);i.push({width:l,height:d,originX:u,originY:f,name:m}),a+=s}return{ident:r,version:n,numFrames:o,frames:i}}var or=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),Ei(n.buffer)}};function oa(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 ia(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 sa(t){return{sequence:t,time:0}}function aa(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 ro(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 f=[],m=o,p=i;for(let y=0;y<s.length;y+=1){let h=s[y],g=Math.max(1,m*p|0);if(h<=0||h+g>t.byteLength)throw new kr(`Invalid WAL mip offset for level ${y}`);let S=new Uint8Array(t,h,g);f.push({level:y,width:m,height:p,data:S}),m=Math.max(1,m>>1),p=Math.max(1,p>>1)}return{name:n,width:o,height:i,mipmaps:f,animName:c,flags:l,contents:d,value:u}}var Rt=class extends Error{constructor(e){super(e),this.name="PcxParseError"}};function ca(t){if(t.byteLength<128)throw new Rt("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 Rt("Unsupported PCX encoding");if(o!==8)throw new Rt("Only 8bpp PCX files are supported");let l=a-i+1,d=c-s+1,u=e.getUint16(66,!0),f=t.byteLength-769;if(f<128||new DataView(t,f,1).getUint8(0)!==12)throw new Rt("Missing PCX palette");let m=new Uint8Array(t,f+1,768),p=new Uint8Array(t,128,f-128),y=new Uint8Array(l*d),h=0,g=0;for(let S=0;S<d;S+=1){let b=0;for(;b<u&&h<p.length;){let M=1,v=p[h++];if((v&192)===192){if(M=v&63,h>=p.length)throw new Rt("Unexpected end of PCX RLE data");v=p[h++]}for(let A=0;A<M&&b<u;A+=1)b<l&&(y[g++]=v),b+=1}}return{width:l,height:d,bitsPerPixel:o,pixels:y,palette:m}}function no(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 ir=class{constructor(e={}){this.cache=new ft(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 Ii(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 la(t){let e=no(t),r={level:0,width:t.width,height:t.height,rgba:e};return{width:t.width,height:t.height,levels:[r],source:"pcx"}}function da(t,e){return Ii(ro(t),e)}var Bt=class extends Error{constructor(e){super(e),this.name="WavParseError"}};function zi(t,e,r){return new TextDecoder("ascii").decode(new Uint8Array(t.buffer,t.byteOffset+e,r))}function oo(t){if(t.byteLength<44)throw new Bt("WAV buffer too small");let e=new DataView(t);if(zi(e,0,4)!=="RIFF"||zi(e,8,4)!=="WAVE")throw new Bt("Invalid WAV header");let r=12,n=-1,o=-1,i=0,s=0;for(;r+8<=t.byteLength;){let p=zi(e,r,4),y=e.getUint32(r+4,!0),h=r+8;p==="fmt "?(n=h,i=y):p==="data"&&(o=h,s=y),r=h+y}if(n===-1||o===-1)throw new Bt("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 Bt("Only PCM WAV is supported");let u=d/8,f=s/(u*c),m=new Float32Array(f*c);for(let p=0;p<f;p+=1)for(let y=0;y<c;y+=1){let h=p*c+y,g=o+h*u,S=0;if(d===8)S=e.getUint8(g),m[h]=(S-128)/128;else if(d===16)S=e.getInt16(g,!0),m[h]=S/32768;else if(d===24){let b=e.getUint8(g),M=e.getUint8(g+1),v=e.getInt8(g+2);S=b|M<<8|v<<16,m[h]=S/8388608}else throw new Bt(`Unsupported bitsPerSample: ${d}`)}return{sampleRate:l,channels:c,bitsPerSample:d,samples:m}}var jl=(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 Pi=(t,e=jl)=>{let r=h=>new Uint8Array(h.length/2).map(((g,S)=>parseInt(h.substring(2*S,2*(S+1)),16))),n=h=>r(h)[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(((h,g)=>o.set(h,g)));let i=new Uint8Array(t.length),s,a,c,l=!1,d=0,u=42,f=t.length>13&&t.substring(0,9)==="dynEncode",m=0;f&&(m=11,a=n(t.substring(9,m)),a<=1&&(m+=2,u=n(t.substring(11,m))),a===1&&(m+=8,c=(h=>new DataView(r(h).buffer).getInt32(0,!0))(t.substring(13,m))));let p=256-u;for(let h=m;h<t.length;h++)if(s=t.charCodeAt(h),s!==61||l){if(s===92&&h<t.length-5&&f){let g=t.charCodeAt(h+1);g!==117&&g!==85||(s=parseInt(t.substring(h+2,h+6),16),h+=5)}if(s>255){let g=o.get(s);g&&(s=g+127)}l&&(l=!1,s-=64),i[d++]=s<u&&s>0?s+p:s-u}else l=!0;let y=i.subarray(0,d);if(f&&a===1){let h=e(y);if(h!==c){let g="Decode failed crc32 validation";throw console.error("`simple-yenc`\n",g+`
|
|
1
|
+
"use strict";var Quake2Engine=(()=>{var qc=Object.create;var qn=Object.defineProperty;var $c=Object.getOwnPropertyDescriptor;var jc=Object.getOwnPropertyNames;var Qc=Object.getPrototypeOf,Jc=Object.prototype.hasOwnProperty;var Zc=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),go=(t,e)=>{for(var r in e)qn(t,r,{get:e[r],enumerable:!0})},Oi=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of jc(e))!Jc.call(t,s)&&s!==r&&qn(t,s,{get:()=>e[s],enumerable:!(n=$c(e,s))||n.enumerable});return t};var el=(t,e,r)=>(r=t!=null?qc(Qc(t)):{},Oi(e||!t||!t.__esModule?qn(r,"default",{value:t,enumerable:!0}):r,t)),tl=t=>Oi(qn({},"__esModule",{value:!0}),t);var va=Zc((bf,ba)=>{"use strict";ba.exports=Worker});var nm={};go(nm,{ATTN_IDLE:()=>Qa,ATTN_LOOP_NONE:()=>$a,ATTN_NONE:()=>Xs,ATTN_NORM:()=>ja,ATTN_STATIC:()=>Ja,AssetDependencyError:()=>Qt,AssetDependencyTracker:()=>Dn,AssetManager:()=>Gs,AudioApi:()=>ro,AudioContextController:()=>Ys,AudioRegistry:()=>Er,AudioRegistryError:()=>Bn,AudioSystem:()=>eo,BSP_SURFACE_FRAGMENT_SOURCE:()=>ui,BSP_SURFACE_VERTEX_SOURCE:()=>di,BSP_VERTEX_LAYOUT:()=>ai,BspLoader:()=>os,BspParseError:()=>Y,BspSurfacePipeline:()=>oo,Camera:()=>uo,ConfigStringRegistry:()=>sr,Cvar:()=>Nr,CvarRegistry:()=>ts,DemoPlaybackController:()=>Gn,DemoReader:()=>Zt,EngineHost:()=>rr,EngineRuntime:()=>Dr,FixedTimestepLoop:()=>Rt,Framebuffer:()=>no,IndexBuffer:()=>Ne,LruCache:()=>ht,MAX_SOUND_CHANNELS:()=>ni,MD2_FRAGMENT_SHADER:()=>xi,MD2_VERTEX_SHADER:()=>gi,MD3_FRAGMENT_SHADER:()=>Ei,MD3_VERTEX_SHADER:()=>Li,Md2Loader:()=>ir,Md2MeshBuffers:()=>ao,Md2ParseError:()=>le,Md2Pipeline:()=>co,Md3Loader:()=>ar,Md3ModelMesh:()=>mo,Md3ParseError:()=>Te,Md3Pipeline:()=>fo,Md3SurfaceMesh:()=>Vn,MusicSystem:()=>to,NetworkMessageParser:()=>er,PARTICLE_FRAGMENT_SHADER:()=>Ii,PARTICLE_VERTEX_SHADER:()=>Pi,PakArchive:()=>or,PakIndexStore:()=>Us,PakIngestionError:()=>ft,PakParseError:()=>Ce,PakValidationError:()=>Bt,PakValidator:()=>ns,ParticleRenderer:()=>po,ParticleSystem:()=>ho,PlaybackState:()=>yo,RERELEASE_KNOWN_PAKS:()=>Io,SKYBOX_FRAGMENT_SHADER:()=>pi,SKYBOX_VERTEX_SHADER:()=>hi,SOUND_FULLVOLUME:()=>Pr,SOUND_LOOP_ATTENUATE:()=>Za,ShaderProgram:()=>be,SkyboxPipeline:()=>io,SoundChannel:()=>Ws,SoundPrecache:()=>js,SoundRegistry:()=>$s,SpriteLoader:()=>cr,SpriteParseError:()=>pt,Texture2D:()=>Ir,TextureCache:()=>lr,TextureCubeMap:()=>zr,VertexArray:()=>_e,VertexBuffer:()=>ve,VirtualFileSystem:()=>rs,advanceAnimation:()=>ma,applySurfaceState:()=>mc,attenuationToDistanceMultiplier:()=>Jt,boxIntersectsFrustum:()=>Hn,buildBspGeometry:()=>oc,buildMd2Geometry:()=>bi,buildMd2VertexData:()=>vi,buildMd3SurfaceGeometry:()=>_i,buildMd3VertexData:()=>wi,calculateMaxAudibleDistance:()=>Ks,calculatePakChecksum:()=>ea,computeFrameBlend:()=>fa,computeSkyScroll:()=>pc,createAnimationState:()=>ha,createAudioGraph:()=>qs,createBspSurfaces:()=>sc,createEngine:()=>rm,createEngineRuntime:()=>Ji,createFaceLightmap:()=>is,createInitialChannels:()=>Qs,createProgramFromSources:()=>nc,createWebGLContext:()=>tc,decodeOgg:()=>Vs,deriveSurfaceRenderState:()=>fi,extractFrustumPlanes:()=>ic,filesToPakSources:()=>zo,findLeafForPoint:()=>li,gatherVisibleFaces:()=>dc,groupMd2Animations:()=>ca,ingestPakFiles:()=>ta,ingestPaks:()=>ss,interpolateMd3Tag:()=>Fc,interpolateVec3:()=>pa,parseBsp:()=>Co,parseMd2:()=>To,parseMd3:()=>Fo,parsePcx:()=>ya,parseSprite:()=>Ro,parseWal:()=>cs,parseWalTexture:()=>xa,parseWav:()=>ds,pcxToRgba:()=>ls,pickChannel:()=>Js,preparePcxTexture:()=>ga,removeViewTranslation:()=>hc,resolveLightStyles:()=>mi,spatializeOrigin:()=>Zs,spawnBlood:()=>kc,spawnBulletImpact:()=>Rc,spawnExplosion:()=>Bc,spawnMuzzleFlash:()=>Dc,spawnTeleportFlash:()=>Oc,spawnTrail:()=>Nc,walToRgba:()=>Bo,wireDropTarget:()=>ra,wireFileInput:()=>na});var rl=()=>typeof performance<"u"?performance.now():Date.now(),nl=t=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>t()):setTimeout(t,25)},Rt=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,s=r.maxSubSteps??5;this.options={fixedDeltaMs:n,maxSubSteps:s,maxDeltaMs:r.maxDeltaMs??n*s,startTimeMs:r.startTimeMs,now:r.now??rl,schedule:r.schedule??nl}}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 s=0;for(;this.accumulatorMs>=this.options.fixedDeltaMs&&s<this.options.maxSubSteps;)this.frame+=1,this.callbacks.simulate({frame:this.frame,deltaMs:this.options.fixedDeltaMs,nowMs:r}),this.accumulatorMs-=this.options.fixedDeltaMs,s+=1;let o=this.options.fixedDeltaMs===0?0:this.accumulatorMs/this.options.fixedDeltaMs;this.callbacks.render?.({alpha:o,nowMs:r,accumulatorMs:this.accumulatorMs,frame:this.frame})}};var rr=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 s=n.loop?.now?.()??Date.now();this.startTimeMs=n.startTimeMs??n.loop?.startTimeMs??s,this.loop=new Rt({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 Di={x:0,y:0,z:0};var cm=Math.PI/180;function Ni(t,e){return{x:t.x-e.x,y:t.y-e.y,z:t.z-e.z}}function sl(t,e){return{x:t.x*e,y:t.y*e,z:t.z*e}}function bo(t,e){return t.x*e.x+t.y*e.y+t.z*e.z}function ol(t){return bo(t,t)}function vo(t){return Math.sqrt(ol(t))}function Ve(t){let e=vo(t);return e===0?t:sl(t,1/e)}var il=Math.PI/180,lm=180/Math.PI,nr=il;function al(){return new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])}function Hi(t,e){let r=e.x,n=e.y,s=e.z;return{x:t[0]*r+t[4]*n+t[8]*s+t[12],y:t[1]*r+t[5]*n+t[9]*s+t[13],z:t[2]*r+t[6]*n+t[10]*s+t[14]}}function Vi(t,e){let r=al();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 Ke=1,mt=2;var So=8,Ao=16,cl=32;var ll=16384;var $n=65536,Ui=1<<17,dl=1<<18,ul=1<<19,ml=1<<20,fl=1<<21,hl=1<<22,pl=1<<23,dm=1<<24,jn=1<<25,yl=1<<26,um=1<<27,mm=1<<28,fm=1<<29,Qn=1<<30,hm=1<<31;var Or=0;var Gi=4,Wi=8,Xi=16,Ki=32,Yi=64;var pm=1<<25,ym=1<<28,gm=1<<29,xm=1<<30,bm=1<<31;var vm=Ke|mt,Sm=Ke|$n|mt|jn|Qn,Am=Ke|$n|mt,Mm=Ke|Ui|mt|jn|Qn,_m=cl|So|Ao,wm=Ke|Ao|So,gl=Ke|jn|Qn|mt|yl,Lm=dl|ul|ml|fl|hl|pl,Em=Ke|So|Ao|jn|Qn,Pm=Ke|$n|mt,Im=Ke|mt,zm=Ke|$n|mt|Ui,Cm=gl|ll;var Tm=Number.MAX_SAFE_INTEGER-1;var Jn=(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))(Jn||{});var Zn=256;var Mo=256,_o=8192,es=2048,wo=512,Lo=256,Eo=Zn*2,Po=256,xo=32,kr=96;var K=(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+_o]="Sounds",t[t.Images=t.Sounds+es]="Images",t[t.Lights=t.Images+wo]="Lights",t[t.ShadowLights=t.Lights+Mo]="ShadowLights",t[t.Items=t.ShadowLights+Po]="Items",t[t.PlayerSkins=t.Items+Lo]="PlayerSkins",t[t.General=t.PlayerSkins+Zn]="General",t[t.WheelWeapons=t.General+Eo]="WheelWeapons",t[t.WheelAmmo=t.WheelWeapons+xo]="WheelAmmo",t[t.WheelPowerups=t.WheelAmmo+xo]="WheelPowerups",t[t.CdLoopCount=t.WheelPowerups+xo]="CdLoopCount",t[t.GameStyle=t.CdLoopCount+1]="GameStyle",t[t.MaxConfigStrings=t.GameStyle+1]="MaxConfigStrings",t))(K||{}),qi=K.MaxConfigStrings;function $i(t){return t>=5&&t<59?kr*(59-t):t>=K.General&&t<K.WheelWeapons?kr*(K.MaxConfigStrings-t):kr}var j=(t=>(t[t.bad=0]="bad",t[t.muzzleflash=1]="muzzleflash",t[t.muzzleflash2=2]="muzzleflash2",t[t.temp_entity=3]="temp_entity",t[t.layout=4]="layout",t[t.inventory=5]="inventory",t[t.nop=6]="nop",t[t.disconnect=7]="disconnect",t[t.reconnect=8]="reconnect",t[t.sound=9]="sound",t[t.print=10]="print",t[t.stufftext=11]="stufftext",t[t.serverdata=12]="serverdata",t[t.configstring=13]="configstring",t[t.spawnbaseline=14]="spawnbaseline",t[t.centerprint=15]="centerprint",t[t.download=16]="download",t[t.playerinfo=17]="playerinfo",t[t.packetentities=18]="packetentities",t[t.deltapacketentities=19]="deltapacketentities",t[t.frame=20]="frame",t))(j||{});var E=(t=>(t[t.GUNSHOT=0]="GUNSHOT",t[t.BLOOD=1]="BLOOD",t[t.BLASTER=2]="BLASTER",t[t.RAILTRAIL=3]="RAILTRAIL",t[t.SHOTGUN=4]="SHOTGUN",t[t.EXPLOSION1=5]="EXPLOSION1",t[t.EXPLOSION2=6]="EXPLOSION2",t[t.ROCKET_EXPLOSION=7]="ROCKET_EXPLOSION",t[t.GRENADE_EXPLOSION=8]="GRENADE_EXPLOSION",t[t.SPARKS=9]="SPARKS",t[t.SPLASH=10]="SPLASH",t[t.BUBBLETRAIL=11]="BUBBLETRAIL",t[t.SCREEN_SPARKS=12]="SCREEN_SPARKS",t[t.SHIELD_SPARKS=13]="SHIELD_SPARKS",t[t.BULLET_SPARKS=14]="BULLET_SPARKS",t[t.LASER_SPARKS=15]="LASER_SPARKS",t[t.PARASITE_ATTACK=16]="PARASITE_ATTACK",t[t.ROCKET_EXPLOSION_WATER=17]="ROCKET_EXPLOSION_WATER",t[t.GRENADE_EXPLOSION_WATER=18]="GRENADE_EXPLOSION_WATER",t[t.MEDIC_CABLE_ATTACK=19]="MEDIC_CABLE_ATTACK",t[t.BFG_EXPLOSION=20]="BFG_EXPLOSION",t[t.BFG_BIGEXPLOSION=21]="BFG_BIGEXPLOSION",t[t.BOSSTPORT=22]="BOSSTPORT",t[t.BFG_LASER=23]="BFG_LASER",t[t.GRAPPLE_CABLE=24]="GRAPPLE_CABLE",t[t.WELDING_SPARKS=25]="WELDING_SPARKS",t[t.GREENBLOOD=26]="GREENBLOOD",t[t.BLUEHYPERBLASTER=27]="BLUEHYPERBLASTER",t[t.PLASMA_EXPLOSION=28]="PLASMA_EXPLOSION",t[t.TUNNEL_SPARKS=29]="TUNNEL_SPARKS",t[t.BLASTER2=30]="BLASTER2",t[t.RAILTRAIL2=31]="RAILTRAIL2",t[t.FLAME=32]="FLAME",t[t.LIGHTNING=33]="LIGHTNING",t[t.DEBUGTRAIL=34]="DEBUGTRAIL",t[t.PLAIN_EXPLOSION=35]="PLAIN_EXPLOSION",t[t.FLASHLIGHT=36]="FLASHLIGHT",t[t.FORCEWALL=37]="FORCEWALL",t[t.HEATBEAM=38]="HEATBEAM",t[t.MONSTER_HEATBEAM=39]="MONSTER_HEATBEAM",t[t.STEAM=40]="STEAM",t[t.BUBBLETRAIL2=41]="BUBBLETRAIL2",t[t.MOREBLOOD=42]="MOREBLOOD",t[t.HEATBEAM_SPARKS=43]="HEATBEAM_SPARKS",t[t.HEATBEAM_STEAM=44]="HEATBEAM_STEAM",t[t.CHAINFIST_SMOKE=45]="CHAINFIST_SMOKE",t[t.ELECTRIC_SPARKS=46]="ELECTRIC_SPARKS",t[t.TRACKER_EXPLOSION=47]="TRACKER_EXPLOSION",t[t.TELEPORT_EFFECT=48]="TELEPORT_EFFECT",t[t.DBALL_GOAL=49]="DBALL_GOAL",t[t.WIDOWBEAMOUT=50]="WIDOWBEAMOUT",t[t.NUKEBLAST=51]="NUKEBLAST",t[t.WIDOWSPLASH=52]="WIDOWSPLASH",t[t.EXPLOSION1_BIG=53]="EXPLOSION1_BIG",t[t.EXPLOSION1_NP=54]="EXPLOSION1_NP",t[t.FLECHETTE=55]="FLECHETTE",t))(E||{});var ji=class{constructor(t){t instanceof Uint8Array?this.view=new DataView(t.buffer,t.byteOffset,t.byteLength):this.view=new DataView(t),this.offset=0,this.length=this.view.byteLength}getPosition(){return this.offset}seek(t){if(t<0||t>this.length)throw new Error(`Seek out of bounds: ${t} (length: ${this.length})`);this.offset=t}hasMore(){return this.offset<this.length}readChar(){let t=this.view.getInt8(this.offset);return this.offset+=1,t}readByte(){let t=this.view.getUint8(this.offset);return this.offset+=1,t}readShort(){let t=this.view.getInt16(this.offset,!0);return this.offset+=2,t}readLong(){let t=this.view.getInt32(this.offset,!0);return this.offset+=4,t}readFloat(){let t=this.view.getFloat32(this.offset,!0);return this.offset+=4,t}readString(){let t="";for(;this.offset<this.length;){let e=this.readChar();if(e===-1||e===0)break;t+=String.fromCharCode(e)}return t}readStringLine(){let t="";for(;this.offset<this.length;){let e=this.readChar();if(e===-1||e===0||e===10)break;t+=String.fromCharCode(e)}return t}readCoord(){return this.readShort()*(1/8)}readAngle(){return this.readChar()*(360/256)}readAngle16(){return this.readShort()*360/65536}readData(t){if(this.offset+t>this.length)throw new Error(`Read out of bounds: ${this.offset+t} (length: ${this.length})`);let e=new Uint8Array(this.view.buffer,this.view.byteOffset+this.offset,t);return this.offset+=t,new Uint8Array(e)}readPos(t){t.x=this.readCoord(),t.y=this.readCoord(),t.z=this.readCoord()}readDir(t){if(this.readByte()>=162){t.x=0,t.y=0,t.z=0;return}t.x=0,t.y=0,t.z=0}};function xl(t){if(t<0||t>=K.MaxConfigStrings)throw new RangeError(`Configstring index ${t} is out of range (0-${K.MaxConfigStrings-1})`)}function Qi(t,e){let r=$i(t);if(e.length>r)throw new RangeError(`Configstring ${t} exceeds maximum length (${e.length} > ${r}); limit is ${kr} chars per slot`)}var sr=class{constructor(){this.values=new Map;this.modelCursor=K.Models;this.soundCursor=K.Sounds;this.imageCursor=K.Images;this.lightCursor=K.Lights;this.shadowLightCursor=K.ShadowLights;this.itemCursor=K.Items;this.playerSkinCursor=K.PlayerSkins;this.generalCursor=K.General}set(e,r){return xl(e),Qi(e,r),this.values.set(e,r),e}get(e){return this.values.get(e)}getAll(){let e=new Array(qi).fill("");for(let[r,n]of this.values.entries())e[r]=n;return e}modelIndex(e){return this.register(e,K.Models,_o,"modelCursor")}soundIndex(e){return this.register(e,K.Sounds,es,"soundCursor")}findSoundIndex(e){for(let r=K.Sounds;r<K.Sounds+es;r+=1)if(this.values.get(r)===e)return r}imageIndex(e){return this.register(e,K.Images,wo,"imageCursor")}lightIndex(e){return this.register(e,K.Lights,Mo,"lightCursor")}shadowLightIndex(e){return this.register(e,K.ShadowLights,Po,"shadowLightCursor")}itemIndex(e){return this.register(e,K.Items,Lo,"itemCursor")}playerSkinIndex(e){return this.register(e,K.PlayerSkins,Zn,"playerSkinCursor")}generalIndex(e){return this.register(e,K.General,Eo,"generalCursor")}register(e,r,n,s){for(let a=r;a<r+n;a+=1)if(this.values.get(a)===e)return a;let o=this[s],i=r+n;if(o>=i)throw new RangeError(`Out of configstring slots for range starting at ${r}`);return Qi(o,e),this.values.set(o,e),this[s]=o+1,o}};var Dr=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 Ji(t,e,r,n){return new Dr(t,new rr(e,r,n))}var Nr=class{constructor({name:e,defaultValue:r,description:n,flags:s=Jn.None,onChange:o}){this.modifiedCount=0;this.name=e,this.defaultValue=r,this.description=n,this.flags=s,this._value=r,this.onChange=o}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&Jn.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)}},ts=class{constructor(){this.cvars=new Map}register(e){let r=this.cvars.get(e.name);if(r)return r;let n=new Nr(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 bl="PACK";function vl(t,e,r){let n=[];for(let s=0;s<r;s+=1){let o=t.getUint8(e+s);if(o===0)break;n.push(o)}return String.fromCharCode(...n)}function se(t){return t.replace(/\\/g,"/").replace(/^\/+/,"").toLowerCase()}function Sl(){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 Al=Sl();function Zi(t){let e=4294967295;for(let r=0;r<t.length;r+=1){let n=t[r];e=Al[(e^n)&255]^e>>>8}return(e^4294967295)>>>0}var Ce=class extends Error{},or=class t{constructor(e,r,n,s){this.name=e;this.buffer=r;this.entries=new Map(n.map(o=>[o.name,o])),this.checksum=s,this.size=r.byteLength}static fromArrayBuffer(e,r){let n=new DataView(r);if(r.byteLength<12)throw new Ce("PAK buffer too small to contain header");let s=String.fromCharCode(n.getUint8(0),n.getUint8(1),n.getUint8(2),n.getUint8(3));if(s!==bl)throw new Ce(`Invalid PAK header magic: ${s}`);let o=n.getInt32(4,!0),i=n.getInt32(8,!0);if(o<12)throw new Ce(`Invalid directory offset: ${o}`);if(i<=0||i%64!==0)throw new Ce(`Invalid directory length: ${i}`);if(o+i>r.byteLength)throw new Ce("Directory exceeds buffer length");let c=i/64,l=[],d=new Map;for(let u=0;u<c;u+=1){let m=o+u*64,f=vl(n,m,56),p=se(f),y=n.getInt32(m+56,!0),h=n.getInt32(m+60,!0);if(y<0||h<0||y+h>r.byteLength)throw new Ce(`Invalid entry bounds for ${f||"<unnamed>"} (offset=${y}, length=${h})`);if(!p)throw new Ce(`Entry ${u} has an empty name`);let g={name:p,offset:y,length:h};d.set(p,g)}return l.push(...d.values()),new t(e,r,l,Zi(new Uint8Array(r)))}getEntry(e){return this.entries.get(se(e))}listEntries(){return Array.from(this.entries.values())}readFile(e){let r=this.getEntry(e);if(!r)throw new Ce(`File not found in PAK: ${e}`);return new Uint8Array(this.buffer,r.offset,r.length)}validate(){return{checksum:this.checksum,entries:this.listEntries()}}};function ea(t){return Zi(new Uint8Array(t))}var rs=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=se(r.name);this.files.set(n,{archive:e,entry:r})}}get mountedPaks(){return[...this.mounts]}hasFile(e){return this.files.has(se(e))}stat(e){let r=this.files.get(se(e));if(r)return{path:r.entry.name,size:r.entry.length,sourcePak:r.archive.name}}async readFile(e){let r=this.files.get(se(e));if(!r)throw new Error(`File not found in VFS: ${e}`);return r.archive.readFile(e)}list(e=""){let r=se(e).replace(/\/+$|^\//g,""),n=[],s=new Set,o=r?`${r}/`:"";for(let i of this.files.values()){if(r&&!i.entry.name.startsWith(o))continue;let a=r?i.entry.name.slice(o.length):i.entry.name,c=a.indexOf("/");c===-1?n.push({path:i.entry.name,size:i.entry.length,sourcePak:i.archive.name}):s.add(a.slice(0,c))}return n.sort((i,a)=>i.path.localeCompare(a.path)),{files:n,directories:[...s].sort()}}findByExtension(e){let r=e.startsWith(".")?e.toLowerCase():`.${e.toLowerCase()}`,n=[];for(let s of this.files.values())s.entry.name.toLowerCase().endsWith(r)&&n.push({path:s.entry.name,size:s.entry.length,sourcePak:s.archive.name});return n.sort((s,o)=>s.path.localeCompare(o.path))}};var Io=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"}]),Bt=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"}},ns=class{constructor(e=Io){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")),s=e.checksum,o="size"in e?e.size:void 0,i=this.known.get(n);return i?i.checksum!==s?{name:n,checksum:s,expectedChecksum:i.checksum,status:"mismatch",size:o,description:i.description}:{name:n,checksum:s,expectedChecksum:i.checksum,status:"valid",size:o,description:i.description}:{name:n,checksum:s,status:"unknown",size:o}}assertValid(e,r){let n=this.validateArchive(e,r);if(n.status==="mismatch")throw new Bt(n);return n}normalizePakName(e){let r=se(e),n=r.split("/"),s=n.pop()??r,o=n.pop();return o?`${s}@${o}`:s}};var ft=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 Ml(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 s=new FileReader;s.onerror=()=>n(s.error??new Error("Unknown FileReader error")),s.onprogress=o=>{e?.({file:"blob",loadedBytes:o.loaded,totalBytes:o.total||t.size,state:"reading"})},s.onload=()=>{let o=s.result;o instanceof ArrayBuffer?r(o):n(new Error("Unexpected FileReader result"))},s.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=[],s=0;for(;;){let{done:a,value:c}=await r.read();if(a)break;if(!c)continue;let l=c;n.push(l),s+=l.byteLength,e?.({file:"blob",loadedBytes:s,totalBytes:t.size,state:"reading"})}let o=new Uint8Array(s),i=0;for(let a of n)o.set(a,i),i+=a.byteLength;return o.buffer}throw new ft("blob",new Error("Unsupported Blob type"))}async function _l(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 Ml(t.data,s=>e?.({...s,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 ss(t,e,r){let n=typeof r=="function"?{onProgress:r}:r??{},s=n.persistIndexes??!!n.pakIndexStore,o=n.enforceValidation??!!n.validator,i=n.allowUnknownPaks??!0,a=n.stopOnError??!1,c=[];for(let l of e)try{let d=await _l(l,n.onProgress),u=or.fromArrayBuffer(l.name,d),m=n.validator?.validateArchive(u);if(m){n.onValidationResult?.(m);let f=m.status==="mismatch",p=m.status==="unknown";if(f&&o||p&&!i){let y=new Bt(m);if(n.onError?.(l.name,y),a)throw new ft(l.name,y);c.push({archive:u,mounted:!1,validation:m});continue}}if(t.mountPak(u),s&&n.pakIndexStore)try{await n.pakIndexStore.persist(u)}catch(f){if(n.onError?.(l.name,f),a)throw new ft(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 ft(l.name,d)}return c}var ht=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 wl(t){return Array.isArray(t)?t:Array.from(t)}function zo(t){return wl(t).map(e=>({name:e.name,data:e}))}async function ta(t,e,r){let n=zo(e);return ss(t,n,r??{})}function ra(t,e){let r=s=>{s.preventDefault(),s.dataTransfer?.dropEffect&&(s.dataTransfer.dropEffect="copy")},n=s=>{s.preventDefault();let o=s.dataTransfer?.files;o&&o.length>0&&e(Array.from(o))};return t.addEventListener("dragover",r),t.addEventListener("drop",n),()=>{t.removeEventListener("dragover",r),t.removeEventListener("drop",n)}}function na(t,e){let r=n=>{let s=n.target;!s||!s.files||s.files.length===0||(e(s.files),s.value="")};return t.addEventListener("change",r),()=>t.removeEventListener("change",r)}var Ll="IBSP",El=38,oa=19,Pl=8+oa*8;var Y=class extends Error{},os=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),Co(n.buffer)}};function Co(t){if(t.byteLength<Pl)throw new Y("BSP too small to contain header");let e=new DataView(t),r=String.fromCharCode(e.getUint8(0),e.getUint8(1),e.getUint8(2),e.getUint8(3));if(r!==Ll)throw new Y(`Invalid BSP magic ${r}`);let n=e.getInt32(4,!0);if(n!==El)throw new Y(`Unsupported BSP version ${n}`);let s=new Map;for(let M=0;M<oa;M+=1){let _=e.getInt32(8+M*8,!0),L=e.getInt32(12+M*8,!0);if(_<0||L<0||_+L>t.byteLength)throw new Y(`Invalid lump bounds for index ${M}`);s.set(M,{offset:_,length:L})}let o={version:n,lumps:s},i=Il(t,s.get(0)),a=Cl(t,s.get(1)),c=Tl(t,s.get(2)),l=Fl(t,s.get(4)),d=Rl(t,s.get(5)),u=Bl(t,s.get(6)),m=new Uint8Array(t,s.get(7).offset,s.get(7).length),f=Wl(u,s.get(7)),p=kl(t,s.get(8)),y=Ol(t,s.get(11)),h=Dl(t,s.get(12)),g=Nl(t,s.get(13)),S=Hl(t,s.get(14)),b=Vl(t,s.get(15)),A=Ul(t,s.get(9),s.get(10),p),v=Gl(t,s.get(3));return{header:o,entities:i,planes:a,vertices:c,nodes:l,texInfo:d,faces:u,lightMaps:m,lightMapInfo:f,leafs:p,leafLists:A,edges:y,surfEdges:h,models:g,brushes:S,brushSides:b,visibility:v}}function Il(t,e){let r=new TextDecoder().decode(new Uint8Array(t,e.offset,e.length)),n=zl(r),s=n.find(o=>o.classname==="worldspawn");return{raw:r,entities:n,worldspawn:s}}function zl(t){let e=[],r=/\{([^}]*)\}/gms,n;for(;(n=r.exec(t))!==null;){let s=n[1],o={},i=/"([^\"]*)"\s+"([^\"]*)"/g,a;for(;(a=i.exec(s))!==null;)o[a[1]]=a[2];e.push({classname:o.classname,properties:o})}return e}function Cl(t,e){let r=new DataView(t,e.offset,e.length),n=e.length/20;if(n%1!==0)throw new Y("Plane lump has invalid length");let s=[];for(let o=0;o<n;o+=1){let i=[r.getFloat32(o*20,!0),r.getFloat32(o*20+4,!0),r.getFloat32(o*20+8,!0)],a=r.getFloat32(o*20+12,!0),c=r.getInt32(o*20+16,!0);s.push({normal:i,dist:a,type:c})}return s}function Tl(t,e){let r=new DataView(t,e.offset,e.length),n=e.length/12;if(n%1!==0)throw new Y("Vertex lump has invalid length");let s=[];for(let o=0;o<n;o+=1)s.push([r.getFloat32(o*12,!0),r.getFloat32(o*12+4,!0),r.getFloat32(o*12+8,!0)]);return s}function Fl(t,e){let r=new DataView(t,e.offset,e.length),n=36,s=e.length/n;if(s%1!==0)throw new Y("Node lump has invalid length");let o=[];for(let i=0;i<s;i+=1){let a=i*n,c=r.getInt32(a,!0),l=[r.getInt32(a+4,!0),r.getInt32(a+8,!0)],d=[r.getInt16(a+12,!0),r.getInt16(a+14,!0),r.getInt16(a+16,!0)],u=[r.getInt16(a+18,!0),r.getInt16(a+20,!0),r.getInt16(a+22,!0)],m=r.getUint16(a+24,!0),f=r.getUint16(a+26,!0);o.push({planeIndex:c,children:l,mins:d,maxs:u,firstFace:m,numFaces:f})}return o}function Rl(t,e){let r=new DataView(t,e.offset,e.length),n=76,s=e.length/n;if(s%1!==0)throw new Y("TexInfo lump has invalid length");let o=[];for(let i=0;i<s;i+=1){let a=i*n,c=[r.getFloat32(a,!0),r.getFloat32(a+4,!0),r.getFloat32(a+8,!0)],l=r.getFloat32(a+12,!0),d=[r.getFloat32(a+16,!0),r.getFloat32(a+20,!0),r.getFloat32(a+24,!0)],u=r.getFloat32(a+28,!0),m=r.getInt32(a+32,!0),f=r.getInt32(a+36,!0),p=new Uint8Array(t,e.offset+a+40,32),y=new TextDecoder("utf-8").decode(p).replace(/\0.*$/,""),h=r.getInt32(a+72,!0);o.push({s:c,sOffset:l,t:d,tOffset:u,flags:m,value:f,texture:y,nextTexInfo:h})}return o}function Bl(t,e){let r=new DataView(t,e.offset,e.length),n=20,s=e.length/n;if(s%1!==0)throw new Y("Face lump has invalid length");let o=[];for(let i=0;i<s;i+=1){let a=i*n,c=r.getUint16(a,!0),l=r.getInt16(a+2,!0),d=r.getInt32(a+4,!0),u=r.getInt16(a+8,!0),m=r.getInt16(a+10,!0),f=[r.getUint8(a+12),r.getUint8(a+13),r.getUint8(a+14),r.getUint8(a+15)],p=r.getInt32(a+16,!0);o.push({planeIndex:c,side:l,firstEdge:d,numEdges:u,texInfo:m,styles:f,lightOffset:p})}return o}function kl(t,e){let r=new DataView(t,e.offset,e.length),n=28,s=e.length/n;if(s%1!==0)throw new Y("Leaf lump has invalid length");let o=[];for(let i=0;i<s;i+=1){let a=i*n,c=r.getInt32(a,!0),l=r.getInt16(a+4,!0),d=r.getInt16(a+6,!0),u=[r.getInt16(a+8,!0),r.getInt16(a+10,!0),r.getInt16(a+12,!0)],m=[r.getInt16(a+14,!0),r.getInt16(a+16,!0),r.getInt16(a+18,!0)],f=r.getUint16(a+20,!0),p=r.getUint16(a+22,!0),y=r.getUint16(a+24,!0),h=r.getUint16(a+26,!0);o.push({contents:c,cluster:l,area:d,mins:u,maxs:m,firstLeafFace:f,numLeafFaces:p,firstLeafBrush:y,numLeafBrushes:h})}return o}function Ol(t,e){let r=new DataView(t,e.offset,e.length),n=4,s=e.length/n;if(s%1!==0)throw new Y("Edge lump has invalid length");let o=[];for(let i=0;i<s;i+=1){let a=i*n;o.push({vertices:[r.getUint16(a,!0),r.getUint16(a+2,!0)]})}return o}function Dl(t,e){let r=e.length/4;if(r%1!==0)throw new Y("SurfEdge lump has invalid length");let n=new DataView(t,e.offset,e.length),s=new Int32Array(r);for(let o=0;o<r;o+=1)s[o]=n.getInt32(o*4,!0);return s}function Nl(t,e){let r=new DataView(t,e.offset,e.length),n=48;if(e.length%n!==0)throw new Y("Model lump has invalid length");let s=e.length/n,o=[];for(let i=0;i<s;i+=1){let a=i*n,c=[r.getFloat32(a,!0),r.getFloat32(a+4,!0),r.getFloat32(a+8,!0)],l=[r.getFloat32(a+12,!0),r.getFloat32(a+16,!0),r.getFloat32(a+20,!0)],d=[r.getFloat32(a+24,!0),r.getFloat32(a+28,!0),r.getFloat32(a+32,!0)],u=r.getInt32(a+36,!0),m=r.getInt32(a+40,!0),f=r.getInt32(a+44,!0);o.push({mins:c,maxs:l,origin:d,headNode:u,firstFace:m,numFaces:f})}return o}function Hl(t,e){let r=new DataView(t,e.offset,e.length),n=12,s=e.length/n;if(s%1!==0)throw new Y("Brush lump has invalid length");let o=[];for(let i=0;i<s;i+=1){let a=i*n;o.push({firstSide:r.getInt32(a,!0),numSides:r.getInt32(a+4,!0),contents:r.getInt32(a+8,!0)})}return o}function Vl(t,e){let r=new DataView(t,e.offset,e.length),n=8,s=e.length/n;if(s%1!==0)throw new Y("Brush side lump has invalid length");let o=[];for(let i=0;i<s;i+=1){let a=i*n;o.push({planeIndex:r.getUint16(a,!0),texInfo:r.getInt16(a+2,!0)})}return o}function Ul(t,e,r,n){let s=[],o=[],i=e.length/2,a=r.length/2,c=new DataView(t,e.offset,e.length),l=new DataView(t,r.offset,r.length);for(let d of n){if(d.firstLeafFace+d.numLeafFaces>i)throw new Y("Leaf faces reference data past lump bounds");if(d.firstLeafBrush+d.numLeafBrushes>a)throw new Y("Leaf brushes reference data past lump bounds");let u=[];for(let f=0;f<d.numLeafFaces;f+=1)u.push(c.getUint16((d.firstLeafFace+f)*2,!0));let m=[];for(let f=0;f<d.numLeafBrushes;f+=1)m.push(l.getUint16((d.firstLeafBrush+f)*2,!0));s.push(u),o.push(m)}return{leafFaces:s,leafBrushes:o}}function Gl(t,e){if(e.length===0)return;if(e.length<4)throw new Y("Visibility lump too small");let r=new DataView(t,e.offset,e.length),n=r.getInt32(0,!0),s=4+n*8;if(n<0||s>e.length)throw new Y("Visibility lump truncated");let o=4,i=[];for(let a=0;a<n;a+=1){let c=r.getInt32(o,!0),l=r.getInt32(o+4,!0);o+=8;let d=e.offset+c,u=e.offset+l,m=e.offset+e.length;if(c<0||l<0||d>=m||u>=m)throw new Y("Visibility offsets out of range");i.push({pvs:sa(t,d,n,e),phs:sa(t,u,n,e)})}return{numClusters:n,clusters:i}}function sa(t,e,r,n){let s=Math.ceil(r/8),o=new Uint8Array(s),i=new Uint8Array(t),a=e,c=0,l=n.offset+n.length;for(;c<s;){if(a>=l)throw new Y("Visibility data truncated");let d=i[a++];if(d!==0){o[c++]=d;continue}if(a>=l)throw new Y("Visibility run exceeds lump bounds");let u=i[a++];for(let m=0;m<u&&c<s;m+=1)o[c++]=0}return o}function Wl(t,e){return t.map(r=>{if(!(r.lightOffset<0))return{offset:r.lightOffset,length:Math.max(0,e.length-r.lightOffset)}})}function is(t,e,r){if(t.lightOffset<0||t.lightOffset>=e.byteLength)return;let n=e.byteLength-t.lightOffset,s=Math.min(r?.length??n,n);if(!(s<=0))return e.subarray(t.lightOffset,t.lightOffset+s)}var Xl=844121161,Kl=8,ia=68,Yl=[{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}],le=class extends Error{},ir=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),To(n.buffer)}};function aa(t,e,r){let n=[];for(let s=0;s<r;s+=1){let o=t.getUint8(e+s);if(o===0)break;n.push(o)}return String.fromCharCode(...n)}function Hr(t,e,r,n){if(r!==0&&(e<ia||e+r>t.byteLength))throw new le(`${n} section is out of bounds`)}function ql(t){if(t.byteLength<ia)throw new le("MD2 buffer too small to contain header");let e=new DataView(t),r=e.getInt32(0,!0),n=e.getInt32(4,!0);if(r!==Xl)throw new le(`Invalid MD2 ident: ${r}`);if(n!==Kl)throw new le(`Unsupported MD2 version: ${n}`);let s={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)},o=40+s.numVertices*4;if(s.frameSize!==o)throw new le(`Unexpected frame size ${s.frameSize}, expected ${o}`);if(s.offsetEnd>t.byteLength)throw new le("MD2 offset_end exceeds buffer length");return s}function $l(t,e){let r=e.numSkins*64;Hr(t,e.offsetSkins,r,"skins");let n=new DataView(t,e.offsetSkins,r),s=[];for(let o=0;o<e.numSkins;o+=1)s.push({name:aa(n,o*64,64)});return s}function jl(t,e){let r=e.numTexCoords*4;Hr(t,e.offsetTexCoords,r,"texcoords");let n=new DataView(t,e.offsetTexCoords,r),s=[];for(let o=0;o<e.numTexCoords;o+=1){let i=o*4;s.push({s:n.getInt16(i,!0),t:n.getInt16(i+2,!0)})}return s}function Ql(t,e){let r=e.numTriangles*12;Hr(t,e.offsetTriangles,r,"triangles");let n=new DataView(t,e.offsetTriangles,r),s=[];for(let o=0;o<e.numTriangles;o+=1){let i=o*12,a=[n.getUint16(i,!0),n.getUint16(i+2,!0),n.getUint16(i+4,!0)],c=[n.getUint16(i+6,!0),n.getUint16(i+8,!0),n.getUint16(i+10,!0)];if(a.some(l=>l>=e.numVertices)||c.some(l=>l>=e.numTexCoords))throw new le("Triangle references out of range vertex or texcoord");s.push({vertexIndices:a,texCoordIndices:c})}return s}function Jl(t,e){let r=e.numFrames*e.frameSize;Hr(t,e.offsetFrames,r,"frames");let n=[];for(let s=0;s<e.numFrames;s+=1){let o=e.offsetFrames+s*e.frameSize,i=new DataView(t,o,e.frameSize),a={x:i.getFloat32(0,!0),y:i.getFloat32(4,!0),z:i.getFloat32(8,!0)},c={x:i.getFloat32(12,!0),y:i.getFloat32(16,!0),z:i.getFloat32(20,!0)},l=aa(i,24,16),d=[];for(let u=0;u<e.numVertices;u+=1){let m=40+u*4,f={x:i.getUint8(m)*a.x+c.x,y:i.getUint8(m+1)*a.y+c.y,z:i.getUint8(m+2)*a.z+c.z},p=i.getUint8(m+3),y=Yl[p];if(!y)throw new le(`Invalid normal index ${p} in frame ${l}`);d.push({position:f,normalIndex:p,normal:y})}n.push({name:l,vertices:d})}return n}function Zl(t,e){let r=e.numGlCommands*4;if(Hr(t,e.offsetGlCommands,r,"gl commands"),r===0)return[];let n=new DataView(t,e.offsetGlCommands,r),s=[],o=0;for(;;){if(o+4>r)throw new le("GL command list ended unexpectedly");let i=n.getInt32(o,!0);if(o+=4,i===0)break;let a=Math.abs(i),c=[],l=a*12;if(o+l>r)throw new le("GL command vertex block exceeds buffer");for(let d=0;d<a;d+=1){let u=n.getFloat32(o,!0),m=n.getFloat32(o+4,!0),f=n.getInt32(o+8,!0);if(o+=12,f<0||f>=e.numVertices)throw new le("GL command references invalid vertex index");c.push({s:u,t:m,vertexIndex:f})}s.push({mode:i>0?"strip":"fan",vertices:c})}if(o!==r)throw new le("GL command list did not consume expected data");return s}function To(t){let e=ql(t),r=$l(t,e),n=jl(t,e),s=Ql(t,e),o=Jl(t,e),i=Zl(t,e);return{header:e,skins:r,texCoords:n,triangles:s,frames:o,glCommands:i}}function ca(t){let e=[],r=0;for(;r<t.length;){let n=t[r].name,s=n.replace(/\d+$/,"")||n,o=r;for(;o+1<t.length&&(t[o+1].name.replace(/\d+$/,"")||t[o+1].name)===s;)o+=1;e.push({name:s,firstFrame:r,lastFrame:o}),r=o+1}return e}var la=860898377,ed=15,Te=class extends Error{constructor(e){super(e),this.name="Md3ParseError"}};function Vr(t,e,r){let n=new Uint8Array(t.buffer,t.byteOffset+e,r);return new TextDecoder("utf-8").decode(n).replace(/\0.*$/,"").trim()}function td(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 as(t,e,r,n){if(e<0||e+r>n)throw new Te(`${t} exceeds buffer bounds`)}function rd(t){let e=t.getInt32(0,!0);if(e!==la)throw new Te(`Invalid MD3 ident: ${e}`);let r=t.getInt32(4,!0);if(r!==ed)throw new Te(`Unsupported MD3 version: ${r}`);let n=Vr(t,8,64),s=t.getInt32(72,!0),o=t.getInt32(76,!0),i=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(o<=0||a<0||i<0)throw new Te("Invalid MD3 counts");return{ident:e,version:r,name:n,flags:s,numFrames:o,numTags:i,numSurfaces:a,numSkins:c,ofsFrames:l,ofsTags:d,ofsSurfaces:u,ofsEnd:m}}function nd(t,e){let r=[];as("Frames",e.ofsFrames,e.numFrames*56,t.byteLength);for(let s=0;s<e.numFrames;s+=1){let o=e.ofsFrames+s*56;r.push({minBounds:{x:t.getFloat32(o,!0),y:t.getFloat32(o+4,!0),z:t.getFloat32(o+8,!0)},maxBounds:{x:t.getFloat32(o+12,!0),y:t.getFloat32(o+16,!0),z:t.getFloat32(o+20,!0)},localOrigin:{x:t.getFloat32(o+24,!0),y:t.getFloat32(o+28,!0),z:t.getFloat32(o+32,!0)},radius:t.getFloat32(o+36,!0),name:Vr(t,o+40,16)})}return r}function sd(t,e){let r=[],s=e.numFrames*e.numTags*112;as("Tags",e.ofsTags,s,t.byteLength);for(let o=0;o<e.numFrames;o+=1){let i=[];for(let a=0;a<e.numTags;a+=1){let c=e.ofsTags+(o*e.numTags+a)*112,l=c+64,d=l+12;i.push({name:Vr(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(i)}return r}function od(t,e){let r=t.getInt32(e,!0);if(r!==la)throw new Te(`Invalid surface ident at ${e}: ${r}`);let n=Vr(t,e+4,64),s=t.getInt32(e+68,!0),o=t.getInt32(e+72,!0),i=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(o<=0||a<=0||c<=0)throw new Te(`Invalid surface counts for ${n}`);let p=f;as(`Surface ${n}`,e,p,t.byteLength);let y=[],h=e+l;for(let _=0;_<c;_+=1){let L=h+_*12;y.push({indices:[t.getInt32(L,!0),t.getInt32(L+4,!0),t.getInt32(L+8,!0)]})}let g=[],S=e+d;for(let _=0;_<i;_+=1){let L=S+_*68;g.push({name:Vr(t,L,64),shaderIndex:t.getInt32(L+64,!0)})}let b=[],A=e+u;for(let _=0;_<a;_+=1){let L=A+_*8;b.push({s:t.getFloat32(L,!0),t:t.getFloat32(L+4,!0)})}let v=[],M=e+m;for(let _=0;_<o;_+=1){let L=[];for(let T=0;T<a;T+=1){let w=M+(_*a+T)*8,H=t.getInt16(w,!0)/64,G=t.getInt16(w+2,!0)/64,U=t.getInt16(w+4,!0)/64,F=t.getUint16(w+6,!0);L.push({position:{x:H,y:G,z:U},latLng:F,normal:td(F)})}v.push(L)}return{surface:{name:n,flags:s,numFrames:o,shaders:g,triangles:y,texCoords:b,vertices:v},nextOffset:e+f}}function Fo(t){if(t.byteLength<108)throw new Te("MD3 buffer too small for header");let e=new DataView(t),r=rd(e);as("MD3 end",r.ofsEnd,0,t.byteLength);let n=nd(e,r),s=sd(e,r),o=[],i=r.ofsSurfaces;for(let a=0;a<r.numSurfaces;a+=1){let{surface:c,nextOffset:l}=od(e,i);o.push(c),i=l}if(i!==r.ofsEnd)throw new Te("Surface parsing did not reach ofsEnd");return{header:r,frames:n,tags:s,surfaces:o}}var ar=class{constructor(e){this.vfs=e}async load(e){let r=await this.vfs.readFile(e);return Fo(r.slice().buffer)}};var id=1229214514,ad=2,da=64,ua=12,pt=class extends Error{};function cd(t,e,r){let n=[];for(let s=0;s<r;s+=1){let o=t.getUint8(e+s);if(o===0)break;n.push(o)}return String.fromCharCode(...n)}function Ro(t){if(t.byteLength<ua)throw new pt("Sprite buffer too small to contain header");let e=new DataView(t),r=e.getInt32(0,!0),n=e.getInt32(4,!0),s=e.getInt32(8,!0);if(r!==id)throw new pt(`Invalid Sprite ident: ${r}`);if(n!==ad)throw new pt(`Unsupported Sprite version: ${n}`);let o=[],i=16+da,a=ua;for(let c=0;c<s;c+=1){if(a+i>t.byteLength)throw new pt("Sprite frame data exceeds buffer length");let l=e.getInt32(a,!0),d=e.getInt32(a+4,!0),u=e.getInt32(a+8,!0),m=e.getInt32(a+12,!0),f=cd(e,a+16,da);o.push({width:l,height:d,originX:u,originY:m,name:f}),a+=i}return{ident:r,version:n,numFrames:s,frames:o}}var cr=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),Ro(n.buffer)}};function ma(t,e){let r=(t.sequence.end-t.sequence.start+1)/t.sequence.fps,n=t.sequence.loop!==!1,s=t.time+e;return n?s=(s%r+r)%r:s>r&&(s=r),{...t,time:Math.max(0,Math.min(s,r))}}function fa(t){let e=t.sequence.end-t.sequence.start+1,r=1/t.sequence.fps,n=t.sequence.loop!==!1,s=t.time/r;if(!n&&s>=e)return{frame:t.sequence.end,nextFrame:t.sequence.end,lerp:0};let o=n?s%e:Math.min(s,e-1),i=Math.floor(o),a=t.sequence.start+i,c=i+1>=e?n?t.sequence.start:t.sequence.end:a+1,l=!n&&i>=e-1?0:o-i;return{frame:a,nextFrame:c,lerp:l}}function ha(t){return{sequence:t,time:0}}function pa(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 Ur=class extends Error{constructor(e){super(e),this.name="WalParseError"}};function cs(t){if(t.byteLength<100)throw new Ur("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(),s=e.getInt32(32,!0),o=e.getInt32(36,!0),i=[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(s<=0||o<=0)throw new Ur("Invalid WAL dimensions");let m=[],f=s,p=o;for(let y=0;y<i.length;y+=1){let h=i[y],g=Math.max(1,f*p|0);if(h<=0||h+g>t.byteLength)throw new Ur(`Invalid WAL mip offset for level ${y}`);let S=new Uint8Array(t,h,g);m.push({level:y,width:f,height:p,data:S}),f=Math.max(1,f>>1),p=Math.max(1,p>>1)}return{name:n,width:s,height:o,mipmaps:m,animName:c,flags:l,contents:d,value:u}}var kt=class extends Error{constructor(e){super(e),this.name="PcxParseError"}};function ya(t){if(t.byteLength<128)throw new kt("PCX buffer too small for header");let e=new DataView(t),r=e.getUint8(0),n=e.getUint8(2),s=e.getUint8(3),o=e.getUint16(4,!0),i=e.getUint16(6,!0),a=e.getUint16(8,!0),c=e.getUint16(10,!0);if(r!==10||n!==1)throw new kt("Unsupported PCX encoding");if(s!==8)throw new kt("Only 8bpp PCX files are supported");let l=a-o+1,d=c-i+1,u=e.getUint16(66,!0),m=t.byteLength-769;if(m<128||new DataView(t,m,1).getUint8(0)!==12)throw new kt("Missing PCX palette");let f=new Uint8Array(t,m+1,768),p=new Uint8Array(t,128,m-128),y=new Uint8Array(l*d),h=0,g=0;for(let S=0;S<d;S+=1){let b=0;for(;b<u&&h<p.length;){let A=1,v=p[h++];if((v&192)===192){if(A=v&63,h>=p.length)throw new kt("Unexpected end of PCX RLE data");v=p[h++]}for(let M=0;M<A&&b<u;M+=1)b<l&&(y[g++]=v),b+=1}}return{width:l,height:d,bitsPerPixel:s,pixels:y,palette:f}}function ls(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],s=n*3,o=r*4;e[o]=t.palette[s],e[o+1]=t.palette[s+1],e[o+2]=t.palette[s+2],e[o+3]=n===255?0:255}return e}var lr=class{constructor(e={}){this.cache=new ht(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 Bo(t,e){let r=[];for(let n of t.mipmaps){let s=new Uint8Array(n.width*n.height*4);for(let o=0;o<n.data.length;o+=1){let i=n.data[o],a=i*3,c=o*4;s[c]=e[a],s[c+1]=e[a+1],s[c+2]=e[a+2],s[c+3]=i===255?0:255}r.push({level:n.level,width:n.width,height:n.height,rgba:s})}return{width:t.width,height:t.height,levels:r,source:"wal"}}function ga(t){let e=ls(t),r={level:0,width:t.width,height:t.height,rgba:e};return{width:t.width,height:t.height,levels:[r],source:"pcx"}}function xa(t,e){return Bo(cs(t),e)}var Ot=class extends Error{constructor(e){super(e),this.name="WavParseError"}};function ko(t,e,r){return new TextDecoder("ascii").decode(new Uint8Array(t.buffer,t.byteOffset+e,r))}function ds(t){if(t.byteLength<44)throw new Ot("WAV buffer too small");let e=new DataView(t);if(ko(e,0,4)!=="RIFF"||ko(e,8,4)!=="WAVE")throw new Ot("Invalid WAV header");let r=12,n=-1,s=-1,o=0,i=0;for(;r+8<=t.byteLength;){let p=ko(e,r,4),y=e.getUint32(r+4,!0),h=r+8;p==="fmt "?(n=h,o=y):p==="data"&&(s=h,i=y),r=h+y}if(n===-1||s===-1)throw new Ot("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 Ot("Only PCM WAV is supported");let u=d/8,m=i/(u*c),f=new Float32Array(m*c);for(let p=0;p<m;p+=1)for(let y=0;y<c;y+=1){let h=p*c+y,g=s+h*u,S=0;if(d===8)S=e.getUint8(g),f[h]=(S-128)/128;else if(d===16)S=e.getInt16(g,!0),f[h]=S/32768;else if(d===24){let b=e.getUint8(g),A=e.getUint8(g+1),v=e.getInt8(g+2);S=b|A<<8|v<<16,f[h]=S/8388608}else throw new Ot(`Unsupported bitsPerSample: ${d}`)}return{sampleRate:l,channels:c,bitsPerSample:d,samples:f}}var ld=(t,e=4294967295,r=79764919)=>{let n=new Int32Array(256),s,o,i,a=e;for(s=0;s<256;s++){for(i=s<<24,o=8;o>0;--o)i=2147483648&i?i<<1^r:i<<1;n[s]=i}for(s=0;s<t.length;s++)a=a<<8^n[255&(a>>24^t[s])];return a};var Oo=(t,e=ld)=>{let r=h=>new Uint8Array(h.length/2).map(((g,S)=>parseInt(h.substring(2*S,2*(S+1)),16))),n=h=>r(h)[0],s=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(((h,g)=>s.set(h,g)));let o=new Uint8Array(t.length),i,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=(h=>new DataView(r(h).buffer).getInt32(0,!0))(t.substring(13,f))));let p=256-u;for(let h=f;h<t.length;h++)if(i=t.charCodeAt(h),i!==61||l){if(i===92&&h<t.length-5&&m){let g=t.charCodeAt(h+1);g!==117&&g!==85||(i=parseInt(t.substring(h+2,h+6),16),h+=5)}if(i>255){let g=s.get(i);g&&(i=g+127)}l&&(l=!1,i-=64),o[d++]=i<u&&i>0?i+p:i-u}else l=!0;let y=o.subarray(0,d);if(m&&a===1){let h=e(y);if(h!==c){let g="Decode failed crc32 validation";throw console.error("`simple-yenc`\n",g+`
|
|
2
2
|
`,"Expected: "+c+"; Got: "+h+`
|
|
3
|
-
`,"Visit https://github.com/eshaz/simple-yenc for more information"),Error(g)}}return y};function Q(){let t=Uint8Array,e=Float32Array;Q.modules||Object.defineProperties(Q,{modules:{value:new WeakMap},setModule:{value(r,n){Q.modules.set(r,Promise.resolve(n))}},getModule:{value(r,n){let o=Q.modules.get(r);return o||(n?o=WebAssembly.compile(Pi(n)):(n=r.wasm,o=Q.inflateDynEncodeString(n).then(i=>WebAssembly.compile(i))),Q.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(Q.concatFloat32(u,i))}return Q.getDecodedAudio(r,c,i,s,a)}},inflateDynEncodeString:{value(r){return r=Pi(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*4U((I-H(H*i0J,^*DH+H-H*I+H,I*4)33H(H*H)^*DH(H+H)^*@H+i§H)i§3æ*).§K(iHI/+§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,hi73H,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ô7H,c)(i)H+i´8W)(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,hi73H-i)J+V)&+I,H(H+V)æ,8(I.H(H*8*J-i(p51H-i)J+i¸7V)(H(H+iø7V)(8(J/H(P*0J+s,hi73H+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(i2J,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*4J1J.U(*H.U((J2i')o5/H.U()I.H,H(^*<H0H1U((H.i0J.i§i0i')o5/H/H.H2J*H(J.q50H,P*0J/H*I-H,P*(J0,hH,P*,H-q,hi)I-423+hH*m5+H/H0H(H1U((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-iEr5)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¨1I/+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+H0H1I2i(I-+hH-H2p,hH,H,iP8*J*i(p5-H*i7u,hH,i-H-i)H*c)(H-i)I-4*3i(I/i+I.i+I(*h*h*hH*i86*(*)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,hiI*4,3H,iø-H,i¸)H,i-H18)J(,hi¡I*H(i(p5,H1H,V)ú-H,V)ø-o5,3H,i(H,iXH,i-H1i)H08)J(,hi I*H(i(p5,H0H,V)H,V)o5,3H,H,iPH,iH8+I*4+3(3(3H,i$6i¬78+I*3H*H3m5(3i)I-H*i(r5)3H)H,P*0^*(H+H,P*<^*(H*I-3H,i2L(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*S7US0U `;Q.getModule(Q,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"),f=r.length,m=u;u+=4,d.setInt32(m,f,!0);let p=u;u+=f,l.set(r,p);let y=u;u+=4,d.setInt32(y,l.byteLength-u,!0),a(u,y,p,m),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&&Q.setModule(r,n),this._wasm=new r(Q).instantiate(),this._pointers=new Set,this._wasm.ready.then(()=>this))}var ma=Nc(fa(),1);var $l=()=>globalThis.Worker||ma.default,sr=class extends $l(){constructor(e,r,n,o){Q.modules||new Q;let i=Q.modules.get(n);if(!i){let s="text/javascript",a,c=`'use strict';(${((l,d,u)=>{let f,m,p=new Promise(y=>{m=y});self.onmessage=({data:{id:y,command:h,data:g}})=>{let S=p,b={id:y},M;h==="init"?(Object.defineProperties(l,{WASMAudioDecoderCommon:{value:d},EmscriptenWASM:{value:u},module:{value:g.module},isWebWorker:{value:!0}}),f=new l(g.options),m()):h==="free"?f.free():h==="ready"?S=S.then(()=>f.ready):h==="reset"?S=S.then(()=>f.reset()):(Object.assign(b,f[h](Array.isArray(g)?g.map(v=>new Uint8Array(v)):new Uint8Array(g))),M=b.channelData?b.channelData.map(v=>v.buffer):[]),S.then(()=>self.postMessage(b,M))}}).toString()})(${n}, ${Q}, ${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})),Q.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(Q).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 io=(t,e)=>{Object.defineProperty(t,"name",{value:e})};var J=Symbol,ha=", ",P=(()=>{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(ha)))})(),Xe="LFE",ht="monophonic (mono)",pt="stereo",Hr="surround",Z=(t,...e)=>`${[ht,pt,`linear ${Hr}`,"quadraphonic",`5.0 ${Hr}`,`5.1 ${Hr}`,`6.1 ${Hr}`,`7.1 ${Hr}`][t-1]} (${e.join(ha)})`,Nr=[ht,Z(2,P[0][0]),Z(3,P[0][2]),Z(4,P[1][0],P[3][0]),Z(5,P[1][2],P[3][0]),Z(6,P[1][2],P[3][0],Xe),Z(7,P[1][2],P[2][0],P[3][4],Xe),Z(8,P[1][2],P[2][0],P[3][0],Xe)],pa=192e3,ya=176400,so=96e3,ao=88200,ga=64e3,yt=48e3,ar=44100,cr=32e3,lr=24e3,dr=22050,ur=16e3,co=12e3,lo=11025,fr=8e3,xa=7350,Ne="absoluteGranulePosition",B="bandwidth",de="bitDepth",ue="bitrate",Vr=ue+"Maximum",Ur=ue+"Minimum",Gr=ue+"Nominal",Ke="buffer",Wr=Ke+"Fullness",j="codec",fe=j+"Frames",Xr="coupledStreamCount",mr="crc",Kr=mr+"16",Yr=mr+"32",Y="data",z="description",Ye="duration",hr="emphasis",qr="hasOpusPadding",Ae="header",gt="isContinuedPacket",jr="isCopyrighted",xt="isFirstPage",$r="isHome",_e="isLastPage",Je="isOriginal",Ze="isPrivate",Qr="isVbr",ve="layer",x="length",R="mode",et=R+"Extension",uo="mpeg",tt=uo+"Version",Jr="numberAACFrames",Zr="outputGain",Ot="preSkip",en="profile",fo=J(),rt="protection",Fi="rawData",Fe="segments",O="subarray",bt="version",Dt="vorbis",tn=Dt+"Comments",pr=Dt+"Setup",mo="block",rn=mo+"ingStrategy",ho=J(),nt=mo+"Size",vt=mo+"size0",St=mo+"size1",nn=J(),po="channel",ot=po+"MappingFamily",on=po+"MappingTable",me=po+"Mode",sn=J(),I=po+"s",ba="copyright",an=ba+"Id",cn=ba+"IdStart",it="frame",st=it+"Count",Se=it+"Length",yo="Number",at=it+yo,qe=it+"Padding",T=it+"Size",va="Rate",ln="inputSample"+va,Ci="page",kt=Ci+"Checksum",yr=J(),Mt=Ci+"SegmentTable",ne=Ci+"Sequence"+yo,Ti="sample",dn=Ti+yo,D=Ti+va,je=J(),k=Ti+"s",go="stream",un=go+"Count",fn=go+"Info",$e=go+"Serial"+yo,Ri=go+"StructureVersion",Bi="total",Ht=Bi+"BytesOut",Nt=Bi+"Duration",Vt=Bi+"Samples",N=J(),Ce=J(),mn=J(),At=J(),Ve=J(),xo=J(),Oi=J(),_t=J(),G=J(),Te=J(),Re=J(),Qe=J(),wt=J(),bo=J(),Ue=J(),Ge=J(),Be=J(),vo=J(),he=Uint8Array,Lt=DataView,W="reserved",pe="bad",gr="free",hn="none",So="16bit CRC";var Di=(t,e,r)=>{for(let n=0;n<t[x];n++){let o=e(n);for(let i=8;i>0;i--)o=r(o);t[n]=o}return t},Jl=Di(new he(256),t=>t,t=>t&128?7^t<<1:t<<1),ee=[Di(new Uint16Array(256),t=>t<<8,t=>t<<1^(t&32768?32773:0))],te=[Di(new Uint32Array(256),t=>t,t=>t>>>1^(t&1)*3988292384)];for(let t=0;t<15;t++){ee.push(new Uint16Array(256)),te.push(new Uint32Array(256));for(let e=0;e<=255;e++)ee[t+1][e]=ee[0][ee[t][e]>>>8]^ee[t][e]<<8,te[t+1][e]=te[t][e]>>>8^te[0][te[t][e]&255]}var Ma=t=>{let e=0,r=t[x];for(let n=0;n!==r;n++)e=Jl[e^t[n]];return e},Aa=t=>{let e=t[x],r=e-16,n=0,o=0;for(;o<=r;)n^=t[o++]<<8|t[o++],n=ee[15][n>>8]^ee[14][n&255]^ee[13][t[o++]]^ee[12][t[o++]]^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=(n&255)<<8^ee[0][n>>8^t[o++]];return n},_a=t=>{let e=t[x],r=e-16,n=0,o=0;for(;o<=r;)n=te[15][(t[o++]^n)&255]^te[14][(t[o++]^n>>>8)&255]^te[13][(t[o++]^n>>>16)&255]^te[12][t[o++]^n>>>24]^te[11][t[o++]]^te[10][t[o++]]^te[9][t[o++]]^te[8][t[o++]]^te[7][t[o++]]^te[6][t[o++]]^te[5][t[o++]]^te[4][t[o++]]^te[3][t[o++]]^te[2][t[o++]]^te[1][t[o++]]^te[0][t[o++]];for(;o!==e;)n=te[0][(n^t[o++])&255]^n>>>8;return n^-1},yn=(...t)=>{let e=new he(t.reduce((r,n)=>r+n[x],0));return t.reduce((r,n)=>(e.set(n,r),r+n[x]),0),e},we=t=>String.fromCharCode(...t),Sa=[0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15],pn=t=>Sa[t&15]<<4|Sa[t>>4],Mo=class{constructor(e){this._data=e,this._pos=e[x]*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,(pn(this._data[r-1])<<8)+pn(this._data[r])>>7-n&255}},wa=(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 gn=class{constructor(e,r){this._onCodecHeader=e,this._onCodecUpdate=r,this[Ue]()}[Ge](){this._isEnabled=!0}[Ue](){this._headerCache=new Map,this._codecUpdateData=new WeakMap,this._codecHeaderSent=!1,this._codecShouldUpdate=!1,this._bitrate=null,this._isEnabled=!1}[bo](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}[Te](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 se=new WeakMap,ce=new WeakMap;var ye=class{constructor(e,r){this._codecParser=e,this._headerCache=r}*[Oi](){let e;do{if(e=yield*this.Frame[Re](this._codecParser,this._headerCache,0),e)return e;this._codecParser[Ce](1)}while(!0)}*[_t](e){let r=yield*this[Oi](),n=ce.get(r)[x];if(e||this._codecParser._flushing||(yield*this.Header[G](this._codecParser,this._headerCache,n)))return this._headerCache[Ge](),this._codecParser[Ce](n),this._codecParser[At](r),r;this._codecParser[Ve](`Missing ${it} at ${n} bytes from current position.`,`Dropping current ${it} and trying again.`),this._headerCache[Ue](),this._codecParser[Ce](1)}};var Ut=class{constructor(e,r){ce.set(this,{[Ae]:e}),this[Y]=r}};var Le=class extends Ut{static*[Re](e,r,n,o,i){let s=yield*e[G](n,o,i);if(s){let a=se.get(s)[Se],c=se.get(s)[k],l=(yield*n[N](a,i))[O](0,a);return new r(s,l,c)}else return null}constructor(e,r,n){super(e,r),this[Ae]=e,this[k]=n,this[Ye]=n/e[D]*1e3,this[at]=null,this[Ht]=null,this[Vt]=null,this[Nt]=null,ce.get(this)[x]=r[x]}};var ki="unsynchronizationFlag",Hi="extendedHeaderFlag",Ni="experimentalFlag",Vi="footerPresent",xn=class t{static*getID3v2Header(e,r,n){let i={},s=yield*e[N](3,n);if(s[0]!==73||s[1]!==68||s[2]!==51||(s=yield*e[N](10,n),i[bt]=`id3v2.${s[3]}.${s[4]}`,s[5]&15)||(i[ki]=!!(s[5]&128),i[Hi]=!!(s[5]&64),i[Ni]=!!(s[5]&32),i[Vi]=!!(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[x]=10+a,new t(i)}constructor(e){this[bt]=e[bt],this[ki]=e[ki],this[Hi]=e[Hi],this[Ni]=e[Ni],this[Vi]=e[Vi],this[x]=e[x]}};var Ee=class{constructor(e){se.set(this,e),this[de]=e[de],this[ue]=null,this[I]=e[I],this[me]=e[me],this[D]=e[D]}};var Pa={0:[gr,gr,gr,gr,gr],16:[32,32,32,32,8],240:[pe,pe,pe,pe,pe]},Ao=(t,e,r)=>8*((t+r)%e+e)*(1<<(t+r)/e)-8*e*(e/8|0);for(let t=2;t<15;t++)Pa[t<<4]=[t*32,Ao(t,4,0),Ao(t,4,-1),Ao(t,8,4),Ao(t,8,0)];var Zl=0,ed=1,td=2,rd=3,La=4,_o="bands ",wo=" to 31",Ea={0:_o+4+wo,16:_o+8+wo,32:_o+12+wo,48:_o+16+wo},Gt="bitrateIndex",bn="v2",Po="v1",Lo="Intensity stereo ",Eo=", MS stereo ",Io="on",zo="off",nd={0:Lo+zo+Eo+zo,16:Lo+Io+Eo+zo,32:Lo+zo+Eo+Io,48:Lo+Io+Eo+Io},Ui={0:{[z]:W},2:{[z]:"Layer III",[qe]:1,[et]:nd,[Po]:{[Gt]:td,[k]:1152},[bn]:{[Gt]:La,[k]:576}},4:{[z]:"Layer II",[qe]:1,[et]:Ea,[k]:1152,[Po]:{[Gt]:ed},[bn]:{[Gt]:La}},6:{[z]:"Layer I",[qe]:4,[et]:Ea,[k]:384,[Po]:{[Gt]:Zl},[bn]:{[Gt]:rd}}},Gi="MPEG Version ",Ia="ISO/IEC ",od={0:{[z]:`${Gi}2.5 (later extension of MPEG 2)`,[ve]:bn,[D]:{0:lo,4:co,8:fr,12:W}},8:{[z]:W},16:{[z]:`${Gi}2 (${Ia}13818-3)`,[ve]:bn,[D]:{0:dr,4:lr,8:ur,12:W}},24:{[z]:`${Gi}1 (${Ia}11172-3)`,[ve]:Po,[D]:{0:ar,4:yt,8:cr,12:W}},length:x},id={0:So,1:hn},sd={0:hn,1:"50/15 ms",2:W,3:"CCIT J.17"},za={0:{[I]:2,[z]:pt},64:{[I]:2,[z]:"joint "+pt},128:{[I]:2,[z]:"dual channel"},192:{[I]:1,[z]:ht}},Wt=class t extends Ee{static*[G](e,r,n){let o={},i=yield*xn.getID3v2Header(e,r,n);i&&(yield*e[N](i[x],n),e[Ce](i[x]));let s=yield*e[N](4,n),a=we(s[O](0,4)),c=r[G](a);if(c)return new t(c);if(s[0]!==255||s[1]<224)return null;let l=od[s[1]&24];if(l[z]===W)return null;let d=s[1]&6;if(Ui[d][z]===W)return null;let u={...Ui[d],...Ui[d][l[ve]]};if(o[tt]=l[z],o[ve]=u[z],o[k]=u[k],o[rt]=id[s[1]&1],o[x]=4,o[ue]=Pa[s[2]&240][u[Gt]],o[ue]===pe||(o[D]=l[D][s[2]&12],o[D]===W)||(o[qe]=s[2]&2&&u[qe],o[Ze]=!!(s[2]&1),o[Se]=Math.floor(125*o[ue]*o[k]/o[D]+o[qe]),!o[Se]))return null;let f=s[3]&192;if(o[me]=za[f][z],o[I]=za[f][I],o[et]=u[et][s[3]&48],o[jr]=!!(s[3]&8),o[Je]=!!(s[3]&4),o[hr]=sd[s[3]&3],o[hr]===W)return null;o[de]=16;{let{length:m,frameLength:p,samples:y,...h}=o;r[Te](a,o,h)}return new t(o)}constructor(e){super(e),this[ue]=e[ue],this[hr]=e[hr],this[qe]=e[qe],this[jr]=e[jr],this[Je]=e[Je],this[Ze]=e[Ze],this[ve]=e[ve],this[et]=e[et],this[tt]=e[tt],this[rt]=e[rt]}};var vn=class t extends Le{static*[Re](e,r,n){return yield*super[Re](Wt,t,e,r,n)}constructor(e,r,n){super(e,r,n)}};var Sn=class extends ye{constructor(e,r,n){super(e,r),this.Frame=vn,this.Header=Wt,n(this[j])}get[j](){return uo}*[Qe](){return yield*this[_t]()}};var ad={0:"MPEG-4",8:"MPEG-2"},cd={0:"valid",2:pe,4:pe,6:pe},ld={0:So,1:hn},dd={0:"AAC Main",64:"AAC LC (Low Complexity)",128:"AAC SSR (Scalable Sample Rate)",192:"AAC LTP (Long Term Prediction)"},ud={0:so,4:ao,8:ga,12:yt,16:ar,20:cr,24:lr,28:dr,32:ur,36:co,40:lo,44:fr,48:xa,52:W,56:W,60:"frequency is written explicitly"},Fa={0:{[I]:0,[z]:"Defined in AOT Specific Config"},64:{[I]:1,[z]:ht},128:{[I]:2,[z]:Z(2,P[0][0])},192:{[I]:3,[z]:Z(3,P[1][3])},256:{[I]:4,[z]:Z(4,P[1][3],P[3][4])},320:{[I]:5,[z]:Z(5,P[1][3],P[3][0])},384:{[I]:6,[z]:Z(6,P[1][3],P[3][0],Xe)},448:{[I]:8,[z]:Z(8,P[1][3],P[2][0],P[3][0],Xe)}},Xt=class t extends Ee{static*[G](e,r,n){let o={},i=yield*e[N](7,n),s=we([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[tt]=ad[i[1]&8],o[ve]=cd[i[1]&6],o[ve]===pe))return null;let l=i[1]&1;o[rt]=ld[l],o[x]=l?7:9,o[fo]=i[2]&192,o[je]=i[2]&60;let d=i[2]&2;if(o[en]=dd[o[fo]],o[D]=ud[o[je]],o[D]===W)return null;o[Ze]=!!d,o[sn]=(i[2]<<8|i[3])&448,o[me]=Fa[o[sn]][z],o[I]=Fa[o[sn]][I],o[Je]=!!(i[3]&32),o[$r]=!!(i[3]&8),o[an]=!!(i[3]&8),o[cn]=!!(i[3]&4),o[de]=16,o[k]=1024,o[Jr]=i[6]&3;{let{length:u,channelModeBits:f,profileBits:m,sampleRateBits:p,frameLength:y,samples:h,numberAACFrames:g,...S}=o;r[Te](s,o,S)}}if(o[Se]=(i[3]<<11|i[4]<<3|i[5]>>5)&8191,!o[Se])return null;let c=(i[5]<<6|i[6]>>2)&2047;return o[Wr]=c===2047?"VBR":c,new t(o)}constructor(e){super(e),this[an]=e[an],this[cn]=e[cn],this[Wr]=e[Wr],this[$r]=e[$r],this[Je]=e[Je],this[Ze]=e[Ze],this[ve]=e[ve],this[x]=e[x],this[tt]=e[tt],this[Jr]=e[Jr],this[en]=e[en],this[rt]=e[rt]}get audioSpecificConfig(){let e=se.get(this),r=e[fo]+64<<5|e[je]<<5|e[sn]>>3,n=new he(2);return new Lt(n[Ke]).setUint16(0,r,!1),n}};var Mn=class t extends Le{static*[Re](e,r,n){return yield*super[Re](Xt,t,e,r,n)}constructor(e,r,n){super(e,r,n)}};var An=class extends ye{constructor(e,r,n){super(e,r),this.Frame=Mn,this.Header=Xt,n(this[j])}get[j](){return"aac"}*[Qe](){return yield*this[_t]()}};var Et=class t extends Le{static _getFrameFooterCrc16(e){return(e[e[x]-2]<<8)+e[e[x]-1]}static[vo](e){let r=t._getFrameFooterCrc16(e),n=Aa(e[O](0,-2));return r===n}constructor(e,r,n){r[fn]=n,r[Kr]=t._getFrameFooterCrc16(e),super(r,e,se.get(r)[k])}};var Ca="get from STREAMINFO metadata block",fd={0:"Fixed",1:"Variable"},Ta={0:W,16:192};for(let t=2;t<16;t++)Ta[t<<4]=t<6?576*2**(t-2):2**t;var md={0:Ca,1:ao,2:ya,3:pa,4:fr,5:ur,6:dr,7:lr,8:cr,9:ar,10:yt,11:so,15:pe},hd={0:{[I]:1,[z]:ht},16:{[I]:2,[z]:Z(2,P[0][0])},32:{[I]:3,[z]:Z(3,P[0][1])},48:{[I]:4,[z]:Z(4,P[1][0],P[3][0])},64:{[I]:5,[z]:Z(5,P[1][1],P[3][0])},80:{[I]:6,[z]:Z(6,P[1][1],Xe,P[3][0])},96:{[I]:7,[z]:Z(7,P[1][1],Xe,P[3][4],P[2][0])},112:{[I]:8,[z]:Z(8,P[1][1],Xe,P[3][0],P[2][0])},128:{[I]:2,[z]:`${pt} (left, diff)`},144:{[I]:2,[z]:`${pt} (diff, right)`},160:{[I]:2,[z]:`${pt} (avg, diff)`},176:W,192:W,208:W,224:W,240:W},pd={0:Ca,2:8,4:12,6:W,8:16,10:20,12:24,14:W},It=class t extends Ee{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[Be](e,r){let n={[N]:function*(){return e}};return t[G](n,r,0).next().value}static*[G](e,r,n){let o=yield*e[N](6,n);if(o[0]!==255||!(o[1]===248||o[1]===249))return null;let i={},s=we(o[O](0,4)),a=r[G](s);if(a)Object.assign(i,a);else{if(i[ho]=o[1]&1,i[rn]=fd[i[ho]],i[nn]=o[2]&240,i[je]=o[2]&15,i[nt]=Ta[i[nn]],i[nt]===W||(i[D]=md[i[je]],i[D]===pe)||o[3]&1)return null;let l=hd[o[3]&240];if(l===W||(i[I]=l[I],i[me]=l[z],i[de]=pd[o[3]&14],i[de]===W))return null}i[x]=5,o=yield*e[N](i[x]+8,n);let c=t._decodeUTF8Int(o[O](4));if(!c||(i[ho]?i[dn]=c.value:i[at]=c.value,i[x]+=c[x],i[nn]===96?(o[x]<i[x]&&(o=yield*e[N](i[x],n)),i[nt]=o[i[x]-1]+1,i[x]+=1):i[nn]===112&&(o[x]<i[x]&&(o=yield*e[N](i[x],n)),i[nt]=(o[i[x]-1]<<8)+o[i[x]]+1,i[x]+=2),i[k]=i[nt],i[je]===12?(o[x]<i[x]&&(o=yield*e[N](i[x],n)),i[D]=o[i[x]-1]*1e3,i[x]+=1):i[je]===13?(o[x]<i[x]&&(o=yield*e[N](i[x],n)),i[D]=(o[i[x]-1]<<8)+o[i[x]],i[x]+=2):i[je]===14&&(o[x]<i[x]&&(o=yield*e[N](i[x],n)),i[D]=((o[i[x]-1]<<8)+o[i[x]])*10,i[x]+=2),o[x]<i[x]&&(o=yield*e[N](i[x],n)),i[mr]=o[i[x]-1],i[mr]!==Ma(o[O](0,i[x]-1))))return null;if(!a){let{blockingStrategyBits:l,frameNumber:d,sampleNumber:u,samples:f,sampleRateBits:m,blockSizeBits:p,crc:y,length:h,...g}=i;r[Te](s,i,g)}return new t(i)}constructor(e){super(e),this[Kr]=null,this[rn]=e[rn],this[nt]=e[nt],this[at]=e[at],this[dn]=e[dn],this[fn]=null}};var yd=2,gd=512*1024,Kt=class extends ye{constructor(e,r,n){super(e,r),this.Frame=Et,this.Header=It,n(this[j])}get[j](){return"flac"}*_getNextFrameSyncOffset(e){let r=yield*this._codecParser[N](2,0),n=r[x]-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}*[Qe](){do{let e=yield*It[G](this._codecParser,this._headerCache,0);if(e){let r=se.get(e)[x]+yd;for(;r<=gd;){if(this._codecParser._flushing||(yield*It[G](this._codecParser,this._headerCache,r))){let n=yield*this._codecParser[N](r);if(this._codecParser._flushing||(n=n[O](0,r)),Et[vo](n)){let o=new Et(n,e);return this._headerCache[Ge](),this._codecParser[Ce](r),this._codecParser[At](o),o}}r=yield*this._getNextFrameSyncOffset(r+1)}this._codecParser[Ve](`Unable to sync FLAC frame after searching ${r} bytes.`),this._codecParser[Ce](r)}else this._codecParser[Ce](yield*this._getNextFrameSyncOffset(1))}while(!0)}[wt](e){return e[ne]===0?(this._headerCache[Ge](),this._streamInfo=e[Y][O](13)):e[ne]===1||(e[fe]=ce.get(e)[Fe].map(r=>{let n=It[Be](r,this._headerCache);if(n)return new Et(r,n,this._streamInfo);this._codecParser[Ve]("Failed to parse Ogg FLAC frame","Skipping invalid FLAC frame")}).filter(r=>!!r)),e}};var Yt=class t{static*[G](e,r,n){let o={},i=yield*e[N](28,n);if(i[0]!==79||i[1]!==103||i[2]!==103||i[3]!==83||(o[Ri]=i[4],i[5]&248))return null;o[_e]=!!(i[5]&4),o[xt]=!!(i[5]&2),o[gt]=!!(i[5]&1);let a=new Lt(he.from(i[O](0,28))[Ke]);o[Ne]=wa(a,6),o[$e]=a.getInt32(14,!0),o[ne]=a.getInt32(18,!0),o[kt]=a.getInt32(22,!0);let c=i[26];o[x]=c+27,i=yield*e[N](o[x],n),o[Se]=0,o[Mt]=[],o[yr]=he.from(i[O](27,o[x]));for(let l=0,d=0;l<c;l++){let u=o[yr][l];o[Se]+=u,d+=u,(u!==255||l===c-1)&&(o[Mt].push(d),d=0)}return new t(o)}constructor(e){se.set(this,e),this[Ne]=e[Ne],this[gt]=e[gt],this[xt]=e[xt],this[_e]=e[_e],this[Mt]=e[Mt],this[ne]=e[ne],this[kt]=e[kt],this[$e]=e[$e]}};var _n=class t extends Ut{static*[Re](e,r,n){let o=yield*Yt[G](e,r,n);if(o){let i=se.get(o)[Se],s=se.get(o)[x],a=s+i,c=(yield*e[N](a,0))[O](0,a),l=c[O](s,a);return new t(o,l,c)}else return null}constructor(e,r,n){super(e,r),ce.get(this)[x]=n[x],this[fe]=[],this[Fi]=n,this[Ne]=e[Ne],this[Yr]=e[kt],this[Ye]=0,this[gt]=e[gt],this[xt]=e[xt],this[_e]=e[_e],this[ne]=e[ne],this[k]=0,this[$e]=e[$e]}};var xr=class extends Le{constructor(e,r,n){super(r,e,n)}};var Ra={0:Nr.slice(0,2),1:Nr},Oe="SILK-only",le="CELT-only",Fo="Hybrid",zt="narrowband",Co="medium-band",Pt="wideband",br="super-wideband",vr="fullband",xd={0:{[R]:Oe,[B]:zt,[T]:10},8:{[R]:Oe,[B]:zt,[T]:20},16:{[R]:Oe,[B]:zt,[T]:40},24:{[R]:Oe,[B]:zt,[T]:60},32:{[R]:Oe,[B]:Co,[T]:10},40:{[R]:Oe,[B]:Co,[T]:20},48:{[R]:Oe,[B]:Co,[T]:40},56:{[R]:Oe,[B]:Co,[T]:60},64:{[R]:Oe,[B]:Pt,[T]:10},72:{[R]:Oe,[B]:Pt,[T]:20},80:{[R]:Oe,[B]:Pt,[T]:40},88:{[R]:Oe,[B]:Pt,[T]:60},96:{[R]:Fo,[B]:br,[T]:10},104:{[R]:Fo,[B]:br,[T]:20},112:{[R]:Fo,[B]:vr,[T]:10},120:{[R]:Fo,[B]:vr,[T]:20},128:{[R]:le,[B]:zt,[T]:2.5},136:{[R]:le,[B]:zt,[T]:5},144:{[R]:le,[B]:zt,[T]:10},152:{[R]:le,[B]:zt,[T]:20},160:{[R]:le,[B]:Pt,[T]:2.5},168:{[R]:le,[B]:Pt,[T]:5},176:{[R]:le,[B]:Pt,[T]:10},184:{[R]:le,[B]:Pt,[T]:20},192:{[R]:le,[B]:br,[T]:2.5},200:{[R]:le,[B]:br,[T]:5},208:{[R]:le,[B]:br,[T]:10},216:{[R]:le,[B]:br,[T]:20},224:{[R]:le,[B]:vr,[T]:2.5},232:{[R]:le,[B]:vr,[T]:5},240:{[R]:le,[B]:vr,[T]:10},248:{[R]:le,[B]:vr,[T]:20}},Sr=class t extends Ee{static[Be](e,r,n){let o={};if(o[I]=e[9],o[ot]=e[18],o[x]=o[ot]!==0?21+o[I]:19,e[x]<o[x])throw new Error("Out of data while inside an Ogg Page");let i=r[0]&3,s=i===3?2:1,a=we(e[O](0,o[x]))+we(r[O](0,s)),c=n[G](a);if(c)return new t(c);if(a.substr(0,8)!=="OpusHead"||e[8]!==1)return null;o[Y]=he.from(e[O](0,o[x]));let l=new Lt(o[Y][Ke]);if(o[de]=16,o[Ot]=l.getUint16(10,!0),o[ln]=l.getUint32(12,!0),o[D]=yt,o[Zr]=l.getInt16(16,!0),o[ot]in Ra&&(o[me]=Ra[o[ot]][o[I]-1],!o[me]))return null;o[ot]!==0&&(o[un]=e[19],o[Xr]=e[20],o[on]=[...e[O](21,o[I]+21)]);let d=xd[248&r[0]];switch(o[R]=d[R],o[B]=d[B],o[T]=d[T],i){case 0:o[st]=1;break;case 1:case 2:o[st]=2;break;case 3:o[Qr]=!!(128&r[1]),o[qr]=!!(64&r[1]),o[st]=63&r[1];break;default:return null}{let{length:u,data:f,channelMappingFamily:m,...p}=o;n[Te](a,o,p)}return new t(o)}constructor(e){super(e),this[Y]=e[Y],this[B]=e[B],this[ot]=e[ot],this[on]=e[on],this[Xr]=e[Xr],this[st]=e[st],this[T]=e[T],this[qr]=e[qr],this[ln]=e[ln],this[Qr]=e[Qr],this[R]=e[R],this[Zr]=e[Zr],this[Ot]=e[Ot],this[un]=e[un]}};var wn=class extends ye{constructor(e,r,n){super(e,r),this.Frame=xr,this.Header=Sr,n(this[j]),this._identificationHeader=null,this._preSkipRemaining=null}get[j](){return"opus"}[wt](e){return e[ne]===0?(this._headerCache[Ge](),this._identificationHeader=e[Y]):e[ne]===1||(e[fe]=ce.get(e)[Fe].map(r=>{let n=Sr[Be](this._identificationHeader,r,this._headerCache);if(n){this._preSkipRemaining===null&&(this._preSkipRemaining=n[Ot]);let o=n[T]*n[st]/1e3*n[D];return this._preSkipRemaining>0&&(this._preSkipRemaining-=o,o=this._preSkipRemaining<0?-this._preSkipRemaining:0),new xr(r,n,o)}this._codecParser[xo]("Failed to parse Ogg Opus Header","Not a valid Ogg Opus file")})),e}};var Mr=class extends Le{constructor(e,r,n){super(r,e,n)}};var Wi={};for(let t=0;t<8;t++)Wi[t+6]=2**(6+t);var Ln=class t extends Ee{static[Be](e,r,n,o){if(e[x]<30)throw new Error("Out of data while inside an Ogg Page");let i=we(e[O](0,30)),s=r[G](i);if(s)return new t(s);let a={[x]:30};if(i.substr(0,7)!=="vorbis")return null;a[Y]=he.from(e[O](0,30));let c=new Lt(a[Y][Ke]);if(a[bt]=c.getUint32(7,!0),a[bt]!==0||(a[I]=e[11],a[me]=Nr[a[I]-1]||"application defined",a[D]=c.getUint32(12,!0),a[Vr]=c.getInt32(16,!0),a[Gr]=c.getInt32(20,!0),a[Ur]=c.getInt32(24,!0),a[St]=Wi[(e[28]&240)>>4],a[vt]=Wi[e[28]&15],a[vt]>a[St])||e[29]!==1)return null;a[de]=32,a[pr]=o,a[tn]=n;{let{length:l,data:d,version:u,vorbisSetup:f,vorbisComments:m,...p}=a;r[Te](i,a,p)}return new t(a)}constructor(e){super(e),this[Vr]=e[Vr],this[Ur]=e[Ur],this[Gr]=e[Gr],this[vt]=e[vt],this[St]=e[St],this[Y]=e[Y],this[tn]=e[tn],this[pr]=e[pr]}};var En=class extends ye{constructor(e,r,n){super(e,r),this.Frame=Mr,n(this[j]),this._identificationHeader=null,this._setupComplete=!1,this._prevBlockSize=null}get[j](){return Dt}[wt](e){e[fe]=[];for(let r of ce.get(e)[Fe])if(r[0]===1)this._headerCache[Ge](),this._identificationHeader=e[Y],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=Ln[Be](this._identificationHeader,this._headerCache,this._vorbisComments,this._vorbisSetup);n?e[fe].push(new Mr(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[St]:r[vt],i=this._prevBlockSize===null?0:(this._prevBlockSize+o)/4;return this._prevBlockSize=o,i}_parseSetupHeader(e){let r=new Mo(e),n={count:0,blockFlags:[]};for(;(r.read(1)&1)!==1;);let o;for(;n.count<64&&r.position>0;){pn(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{((pn(o)&126)>>1)+1!==n.count&&this._codecParser[Ve]("vorbis derived mode count did not match actual mode count");break}}return n.mask=(1<<Math.log2(n.count))-1,n}};var Xi=class{constructor(e,r,n){this._codecParser=e,this._headerCache=r,this._onCodec=n,this._continuedPacket=new he,this._codec=null,this._isSupported=null,this._previousAbsoluteGranulePosition=null}get[j](){return this._codec||""}_updateCodec(e,r){this._codec!==e&&(this._headerCache[Ue](),this._parser=new r(this._codecParser,this._headerCache,this._onCodec),this._codec=e)}_checkCodecSupport({data:e}){let r=we(e[O](0,8));switch(r){case"fishead\0":return!1;case"OpusHead":return this._updateCodec("opus",wn),!0;case(/^\x7fFLAC/.test(r)&&r):return this._updateCodec("flac",Kt),!0;case(/^\x01vorbis/.test(r)&&r):return this._updateCodec(Dt,En),!0;default:return!1}}_checkPageSequenceNumber(e){e[ne]!==this._pageSequenceNumber+1&&this._pageSequenceNumber>1&&e[ne]>1&&this._codecParser[Ve]("Unexpected gap in Ogg Page Sequence Number.",`Expected: ${this._pageSequenceNumber+1}, Got: ${e[ne]}`),this._pageSequenceNumber=e[ne]}_parsePage(e){this._isSupported===null&&(this._pageSequenceNumber=e[ne],this._isSupported=this._checkCodecSupport(e)),this._checkPageSequenceNumber(e);let r=ce.get(e),n=se.get(r[Ae]),o=0;if(r[Fe]=n[Mt].map(i=>e[Y][O](o,o+=i)),this._continuedPacket[x]&&(r[Fe][0]=yn(this._continuedPacket,r[Fe][0]),this._continuedPacket=new he),n[yr][n[yr][x]-1]===255&&(this._continuedPacket=yn(this._continuedPacket,r[Fe].pop())),this._previousAbsoluteGranulePosition!==null&&(e[k]=Number(e[Ne]-this._previousAbsoluteGranulePosition)),this._previousAbsoluteGranulePosition=e[Ne],this._isSupported){let i=this._parser[wt](e);return this._codecParser[At](i),i}else return e}},In=class extends ye{constructor(e,r,n){super(e,r),this._onCodec=n,this.Frame=_n,this.Header=Yt,this._streams=new Map,this._currentSerialNumber=null}get[j](){let e=this._streams.get(this._currentSerialNumber);return e?e.codec:""}*[Qe](){let e=yield*this[_t](!0);this._currentSerialNumber=e[$e];let r=this._streams.get(this._currentSerialNumber);return r||(r=new Xi(this._codecParser,this._headerCache,this._onCodec),this._streams.set(this._currentSerialNumber,r)),e[_e]&&this._streams.delete(this._currentSerialNumber),r._parsePage(e)}};var Ki=()=>{},zn=class{constructor(e,{onCodec:r,onCodecHeader:n,onCodecUpdate:o,enableLogging:i=!1,enableFrameCRC32:s=!0}={}){this._inputMimeType=e,this._onCodec=r||Ki,this._onCodecHeader=n||Ki,this._onCodecUpdate=o,this._enableLogging=i,this._crc32=s?_a:Ki,this[Ue]()}get[j](){return this._parser?this._parser[j]:""}[Ue](){this._headerCache=new gn(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[Ue]()}*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 An(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/mpeg/))this._parser=new Sn(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/flac/))this._parser=new Kt(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/ogg/))this._parser=new In(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[Qe]();e&&(yield e)}}*[N](e=0,r=0){let n;for(;this._rawData[x]<=e+r;){if(n=yield,this._flushing)return this._rawData[O](r);n&&(this._totalBytesIn+=n[x],this._rawData=yn(this._rawData,n))}return this._rawData[O](r)}[Ce](e){this._currentReadPosition+=e,this._rawData=this._rawData[O](e)}[mn](e){this._sampleRate=e[Ae][D],e[Ae][ue]=e[Ye]>0?Math.round(e[Y][x]/e[Ye])*8:0,e[at]=this._frameNumber++,e[Ht]=this._totalBytesOut,e[Vt]=this._totalSamples,e[Nt]=this._totalSamples/this._sampleRate*1e3,e[Yr]=this._crc32(e[Y]),this._headerCache[bo](e[Ae][ue],e[Nt]),this._totalBytesOut+=e[Y][x],this._totalSamples+=e[k]}[At](e){if(e[fe]){if(e[_e]){let r=e[k];e[fe].forEach(n=>{let o=n[k];r<o&&(n[k]=r>0?r:0,n[Ye]=n[k]/n[Ae][D]*1e3),r-=o,this[mn](n)})}else e[k]=0,e[fe].forEach(r=>{e[k]+=r[k],this[mn](r)});e[Ye]=e[k]/this._sampleRate*1e3||0,e[Vt]=this._totalSamples,e[Nt]=this._totalSamples/this._sampleRate*1e3||0,e[Ht]=this._totalBytesOut}else this[mn](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[x]));r.push(`--stats--${"-".repeat(o-9)}`,...n,"-".repeat(o)),e("codec-parser",r.reduce((i,s)=>i+`
|
|
4
|
-
`+
|
|
3
|
+
`,"Visit https://github.com/eshaz/simple-yenc for more information"),Error(g)}}return y};function Z(){let t=Uint8Array,e=Float32Array;Z.modules||Object.defineProperties(Z,{modules:{value:new WeakMap},setModule:{value(r,n){Z.modules.set(r,Promise.resolve(n))}},getModule:{value(r,n){let s=Z.modules.get(r);return s||(n?s=WebAssembly.compile(Oo(n)):(n=r.wasm,s=Z.inflateDynEncodeString(n).then(o=>WebAssembly.compile(o))),Z.modules.set(r,s)),s}},concatFloat32:{value(r,n){let s=new e(n),o=0,i=0;for(;o<r.length;)s.set(r[o],i),i+=r[o++].length;return s}},getDecodedAudio:{value:(r,n,s,o,i)=>({errors:r,channelData:n,samplesDecoded:s,sampleRate:o,bitDepth:i})},getDecodedAudioMultiChannel:{value(r,n,s,o,i,a){let c=[],l,d;for(l=0;l<s;l++){let u=[];for(d=0;d<n.length;)u.push(n[d++][l]||[]);c.push(Z.concatFloat32(u,o))}return Z.getDecodedAudio(r,c,o,i,a)}},inflateDynEncodeString:{value(r){return r=Oo(r),new Promise(n=>{let s=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*4U((I-H(H*i0J,^*DH+H-H*I+H,I*4)33H(H*H)^*DH(H+H)^*@H+i§H)i§3æ*).§K(iHI/+§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,hi73H,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ô7H,c)(i)H+i´8W)(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,hi73H-i)J+V)&+I,H(H+V)æ,8(I.H(H*8*J-i(p51H-i)J+i¸7V)(H(H+iø7V)(8(J/H(P*0J+s,hi73H+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(i2J,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*4J1J.U(*H.U((J2i')o5/H.U()I.H,H(^*<H0H1U((H.i0J.i§i0i')o5/H/H.H2J*H(J.q50H,P*0J/H*I-H,P*(J0,hH,P*,H-q,hi)I-423+hH*m5+H/H0H(H1U((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-iEr5)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¨1I/+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+H0H1I2i(I-+hH-H2p,hH,H,iP8*J*i(p5-H*i7u,hH,i-H-i)H*c)(H-i)I-4*3i(I/i+I.i+I(*h*h*hH*i86*(*)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,hiI*4,3H,iø-H,i¸)H,i-H18)J(,hi¡I*H(i(p5,H1H,V)ú-H,V)ø-o5,3H,i(H,iXH,i-H1i)H08)J(,hi I*H(i(p5,H0H,V)H,V)o5,3H,H,iPH,iH8+I*4+3(3(3H,i$6i¬78+I*3H*H3m5(3i)I-H*i(r5)3H)H,P*0^*(H+H,P*<^*(H*I-3H,i2L(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*S7US0U `;Z.getModule(Z,s).then(o=>WebAssembly.instantiate(o,{})).then(({exports:o})=>{let i=new Map(Object.entries(o)),a=i.get("puff"),c=i.get("memory").buffer,l=new t(c),d=new DataView(c),u=i.get("__heap_base"),m=r.length,f=u;u+=4,d.setInt32(f,m,!0);let p=u;u+=m,l.set(r,p);let y=u;u+=4,d.setInt32(y,l.byteLength-u,!0),a(u,y,p,f),n(l.slice(u,u+d.getInt32(y,!0)))})})}}}),Object.defineProperty(this,"wasm",{enumerable:!0,get:()=>this._wasm}),this.getOutputChannels=(r,n,s)=>{let o=[],i=0;for(;i<n;)o.push(r.slice(i*s,i++*s+s));return o},this.allocateTypedArray=(r,n,s=!0)=>{let o=this._wasm.malloc(n.BYTES_PER_ELEMENT*r);return s&&this._pointers.add(o),{ptr:o,len:r,buf:new n(this._wasm.HEAP,o,r)}},this.free=()=>{this._pointers.forEach(r=>{this._wasm.free(r)}),this._pointers.clear()},this.codeToString=r=>{let n=[],s=new Uint8Array(this._wasm.HEAP);for(let o=s[r];o!==0;o=s[++r])n.push(o);return String.fromCharCode.apply(null,n)},this.addError=(r,n,s,o,i,a)=>{r.push({message:n,frameLength:s,frameNumber:o,inputBytes:i,outputSamples:a})},this.instantiate=(r,n)=>(n&&Z.setModule(r,n),this._wasm=new r(Z).instantiate(),this._pointers=new Set,this._wasm.ready.then(()=>this))}var Sa=el(va(),1);var dd=()=>globalThis.Worker||Sa.default,dr=class extends dd(){constructor(e,r,n,s){Z.modules||new Z;let o=Z.modules.get(n);if(!o){let i="text/javascript",a,c=`'use strict';(${((l,d,u)=>{let m,f,p=new Promise(y=>{f=y});self.onmessage=({data:{id:y,command:h,data:g}})=>{let S=p,b={id:y},A;h==="init"?(Object.defineProperties(l,{WASMAudioDecoderCommon:{value:d},EmscriptenWASM:{value:u},module:{value:g.module},isWebWorker:{value:!0}}),m=new l(g.options),f()):h==="free"?m.free():h==="ready"?S=S.then(()=>m.ready):h==="reset"?S=S.then(()=>m.reset()):(Object.assign(b,m[h](Array.isArray(g)?g.map(v=>new Uint8Array(v)):new Uint8Array(g))),A=b.channelData?b.channelData.map(v=>v.buffer):[]),S.then(()=>self.postMessage(b,A))}}).toString()})(${n}, ${Z}, ${s})`;try{a=typeof process.versions.node<"u"}catch{}o=a?`data:${i};base64,${Buffer.from(c).toString("base64")}`:URL.createObjectURL(new Blob([c],{type:i})),Z.modules.set(n,o)}super(o,{name:r}),this._id=Number.MIN_SAFE_INTEGER,this._enqueuedOperations=new Map,this.onmessage=({data:i})=>{let{id:a,...c}=i;this._enqueuedOperations.get(a)(c),this._enqueuedOperations.delete(a)},new s(Z).getModule().then(i=>{this.postToDecoder("init",{module:i,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 us=(t,e)=>{Object.defineProperty(t,"name",{value:e})};var ee=Symbol,Aa=", ",C=(()=>{let t="front",e="side",r="rear",n="left",s="center",o="right";return["",t+" ",e+" ",r+" "].map(i=>[[n,o],[n,o,s],[n,s,o],[s,n,o],[s]].flatMap(a=>a.map(c=>i+c).join(Aa)))})(),Ye="LFE",yt="monophonic (mono)",gt="stereo",Gr="surround",te=(t,...e)=>`${[yt,gt,`linear ${Gr}`,"quadraphonic",`5.0 ${Gr}`,`5.1 ${Gr}`,`6.1 ${Gr}`,`7.1 ${Gr}`][t-1]} (${e.join(Aa)})`,Wr=[yt,te(2,C[0][0]),te(3,C[0][2]),te(4,C[1][0],C[3][0]),te(5,C[1][2],C[3][0]),te(6,C[1][2],C[3][0],Ye),te(7,C[1][2],C[2][0],C[3][4],Ye),te(8,C[1][2],C[2][0],C[3][0],Ye)],Ma=192e3,_a=176400,ms=96e3,fs=88200,wa=64e3,xt=48e3,ur=44100,mr=32e3,fr=24e3,hr=22050,pr=16e3,hs=12e3,ps=11025,yr=8e3,La=7350,Ue="absoluteGranulePosition",k="bandwidth",me="bitDepth",fe="bitrate",Xr=fe+"Maximum",Kr=fe+"Minimum",Yr=fe+"Nominal",qe="buffer",qr=qe+"Fullness",Q="codec",he=Q+"Frames",$r="coupledStreamCount",gr="crc",jr=gr+"16",Qr=gr+"32",q="data",z="description",$e="duration",xr="emphasis",Jr="hasOpusPadding",we="header",bt="isContinuedPacket",Zr="isCopyrighted",vt="isFirstPage",en="isHome",Le="isLastPage",et="isOriginal",tt="isPrivate",tn="isVbr",Ae="layer",x="length",B="mode",rt=B+"Extension",ys="mpeg",nt=ys+"Version",rn="numberAACFrames",nn="outputGain",Dt="preSkip",sn="profile",gs=ee(),st="protection",Do="rawData",Fe="segments",O="subarray",St="version",Nt="vorbis",on=Nt+"Comments",br=Nt+"Setup",xs="block",an=xs+"ingStrategy",bs=ee(),ot=xs+"Size",At=xs+"size0",Mt=xs+"size1",cn=ee(),vs="channel",it=vs+"MappingFamily",ln=vs+"MappingTable",pe=vs+"Mode",dn=ee(),I=vs+"s",Ea="copyright",un=Ea+"Id",mn=Ea+"IdStart",at="frame",ct=at+"Count",Me=at+"Length",Ss="Number",lt=at+Ss,je=at+"Padding",R=at+"Size",Pa="Rate",fn="inputSample"+Pa,No="page",Ht=No+"Checksum",vr=ee(),_t=No+"SegmentTable",oe=No+"Sequence"+Ss,Ho="sample",hn=Ho+Ss,D=Ho+Pa,Qe=ee(),N=Ho+"s",As="stream",pn=As+"Count",yn=As+"Info",Je=As+"Serial"+Ss,Vo=As+"StructureVersion",Uo="total",Vt=Uo+"BytesOut",Ut=Uo+"Duration",Gt=Uo+"Samples",V=ee(),Re=ee(),gn=ee(),wt=ee(),Ge=ee(),Ms=ee(),Go=ee(),Lt=ee(),W=ee(),Be=ee(),ke=ee(),Ze=ee(),Et=ee(),_s=ee(),We=ee(),Xe=ee(),Oe=ee(),ws=ee(),ye=Uint8Array,Pt=DataView,X="reserved",ge="bad",Sr="free",xn="none",Ls="16bit CRC";var Wo=(t,e,r)=>{for(let n=0;n<t[x];n++){let s=e(n);for(let o=8;o>0;o--)s=r(s);t[n]=s}return t},md=Wo(new ye(256),t=>t,t=>t&128?7^t<<1:t<<1),re=[Wo(new Uint16Array(256),t=>t<<8,t=>t<<1^(t&32768?32773:0))],ne=[Wo(new Uint32Array(256),t=>t,t=>t>>>1^(t&1)*3988292384)];for(let t=0;t<15;t++){re.push(new Uint16Array(256)),ne.push(new Uint32Array(256));for(let e=0;e<=255;e++)re[t+1][e]=re[0][re[t][e]>>>8]^re[t][e]<<8,ne[t+1][e]=ne[t][e]>>>8^ne[0][ne[t][e]&255]}var za=t=>{let e=0,r=t[x];for(let n=0;n!==r;n++)e=md[e^t[n]];return e},Ca=t=>{let e=t[x],r=e-16,n=0,s=0;for(;s<=r;)n^=t[s++]<<8|t[s++],n=re[15][n>>8]^re[14][n&255]^re[13][t[s++]]^re[12][t[s++]]^re[11][t[s++]]^re[10][t[s++]]^re[9][t[s++]]^re[8][t[s++]]^re[7][t[s++]]^re[6][t[s++]]^re[5][t[s++]]^re[4][t[s++]]^re[3][t[s++]]^re[2][t[s++]]^re[1][t[s++]]^re[0][t[s++]];for(;s!==e;)n=(n&255)<<8^re[0][n>>8^t[s++]];return n},Ta=t=>{let e=t[x],r=e-16,n=0,s=0;for(;s<=r;)n=ne[15][(t[s++]^n)&255]^ne[14][(t[s++]^n>>>8)&255]^ne[13][(t[s++]^n>>>16)&255]^ne[12][t[s++]^n>>>24]^ne[11][t[s++]]^ne[10][t[s++]]^ne[9][t[s++]]^ne[8][t[s++]]^ne[7][t[s++]]^ne[6][t[s++]]^ne[5][t[s++]]^ne[4][t[s++]]^ne[3][t[s++]]^ne[2][t[s++]]^ne[1][t[s++]]^ne[0][t[s++]];for(;s!==e;)n=ne[0][(n^t[s++])&255]^n>>>8;return n^-1},vn=(...t)=>{let e=new ye(t.reduce((r,n)=>r+n[x],0));return t.reduce((r,n)=>(e.set(n,r),r+n[x]),0),e},Ee=t=>String.fromCharCode(...t),Ia=[0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15],bn=t=>Ia[t&15]<<4|Ia[t>>4],Es=class{constructor(e){this._data=e,this._pos=e[x]*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,(bn(this._data[r-1])<<8)+bn(this._data[r])>>7-n&255}},Fa=(t,e)=>{try{return t.getBigInt64(e,!0)}catch{let r=t.getUint8(e+7)&128?-1:1,n=t.getUint32(e,!0),s=t.getUint32(e+4,!0);return r===-1&&(n=~n+1,s=~s+1),s>1048575&&console.warn("This platform does not support BigInt"),r*(n+s*2**32)}};var Sn=class{constructor(e,r){this._onCodecHeader=e,this._onCodecUpdate=r,this[We]()}[Xe](){this._isEnabled=!0}[We](){this._headerCache=new Map,this._codecUpdateData=new WeakMap,this._codecHeaderSent=!1,this._codecShouldUpdate=!1,this._bitrate=null,this._isEnabled=!1}[_s](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}}[W](e){let r=this._headerCache.get(e);return r&&this._updateCurrentHeader(e),r}[Be](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 ce=new WeakMap,de=new WeakMap;var xe=class{constructor(e,r){this._codecParser=e,this._headerCache=r}*[Go](){let e;do{if(e=yield*this.Frame[ke](this._codecParser,this._headerCache,0),e)return e;this._codecParser[Re](1)}while(!0)}*[Lt](e){let r=yield*this[Go](),n=de.get(r)[x];if(e||this._codecParser._flushing||(yield*this.Header[W](this._codecParser,this._headerCache,n)))return this._headerCache[Xe](),this._codecParser[Re](n),this._codecParser[wt](r),r;this._codecParser[Ge](`Missing ${at} at ${n} bytes from current position.`,`Dropping current ${at} and trying again.`),this._headerCache[We](),this._codecParser[Re](1)}};var Wt=class{constructor(e,r){de.set(this,{[we]:e}),this[q]=r}};var Pe=class extends Wt{static*[ke](e,r,n,s,o){let i=yield*e[W](n,s,o);if(i){let a=ce.get(i)[Me],c=ce.get(i)[N],l=(yield*n[V](a,o))[O](0,a);return new r(i,l,c)}else return null}constructor(e,r,n){super(e,r),this[we]=e,this[N]=n,this[$e]=n/e[D]*1e3,this[lt]=null,this[Vt]=null,this[Gt]=null,this[Ut]=null,de.get(this)[x]=r[x]}};var Xo="unsynchronizationFlag",Ko="extendedHeaderFlag",Yo="experimentalFlag",qo="footerPresent",An=class t{static*getID3v2Header(e,r,n){let o={},i=yield*e[V](3,n);if(i[0]!==73||i[1]!==68||i[2]!==51||(i=yield*e[V](10,n),o[St]=`id3v2.${i[3]}.${i[4]}`,i[5]&15)||(o[Xo]=!!(i[5]&128),o[Ko]=!!(i[5]&64),o[Yo]=!!(i[5]&32),o[qo]=!!(i[5]&16),i[6]&128||i[7]&128||i[8]&128||i[9]&128))return null;let a=i[6]<<21|i[7]<<14|i[8]<<7|i[9];return o[x]=10+a,new t(o)}constructor(e){this[St]=e[St],this[Xo]=e[Xo],this[Ko]=e[Ko],this[Yo]=e[Yo],this[qo]=e[qo],this[x]=e[x]}};var Ie=class{constructor(e){ce.set(this,e),this[me]=e[me],this[fe]=null,this[I]=e[I],this[pe]=e[pe],this[D]=e[D]}};var Da={0:[Sr,Sr,Sr,Sr,Sr],16:[32,32,32,32,8],240:[ge,ge,ge,ge,ge]},Ps=(t,e,r)=>8*((t+r)%e+e)*(1<<(t+r)/e)-8*e*(e/8|0);for(let t=2;t<15;t++)Da[t<<4]=[t*32,Ps(t,4,0),Ps(t,4,-1),Ps(t,8,4),Ps(t,8,0)];var fd=0,hd=1,pd=2,yd=3,Ra=4,Is="bands ",zs=" to 31",Ba={0:Is+4+zs,16:Is+8+zs,32:Is+12+zs,48:Is+16+zs},Xt="bitrateIndex",Mn="v2",Bs="v1",Cs="Intensity stereo ",Ts=", MS stereo ",Fs="on",Rs="off",gd={0:Cs+Rs+Ts+Rs,16:Cs+Fs+Ts+Rs,32:Cs+Rs+Ts+Fs,48:Cs+Fs+Ts+Fs},$o={0:{[z]:X},2:{[z]:"Layer III",[je]:1,[rt]:gd,[Bs]:{[Xt]:pd,[N]:1152},[Mn]:{[Xt]:Ra,[N]:576}},4:{[z]:"Layer II",[je]:1,[rt]:Ba,[N]:1152,[Bs]:{[Xt]:hd},[Mn]:{[Xt]:Ra}},6:{[z]:"Layer I",[je]:4,[rt]:Ba,[N]:384,[Bs]:{[Xt]:fd},[Mn]:{[Xt]:yd}}},jo="MPEG Version ",ka="ISO/IEC ",xd={0:{[z]:`${jo}2.5 (later extension of MPEG 2)`,[Ae]:Mn,[D]:{0:ps,4:hs,8:yr,12:X}},8:{[z]:X},16:{[z]:`${jo}2 (${ka}13818-3)`,[Ae]:Mn,[D]:{0:hr,4:fr,8:pr,12:X}},24:{[z]:`${jo}1 (${ka}11172-3)`,[Ae]:Bs,[D]:{0:ur,4:xt,8:mr,12:X}},length:x},bd={0:Ls,1:xn},vd={0:xn,1:"50/15 ms",2:X,3:"CCIT J.17"},Oa={0:{[I]:2,[z]:gt},64:{[I]:2,[z]:"joint "+gt},128:{[I]:2,[z]:"dual channel"},192:{[I]:1,[z]:yt}},Kt=class t extends Ie{static*[W](e,r,n){let s={},o=yield*An.getID3v2Header(e,r,n);o&&(yield*e[V](o[x],n),e[Re](o[x]));let i=yield*e[V](4,n),a=Ee(i[O](0,4)),c=r[W](a);if(c)return new t(c);if(i[0]!==255||i[1]<224)return null;let l=xd[i[1]&24];if(l[z]===X)return null;let d=i[1]&6;if($o[d][z]===X)return null;let u={...$o[d],...$o[d][l[Ae]]};if(s[nt]=l[z],s[Ae]=u[z],s[N]=u[N],s[st]=bd[i[1]&1],s[x]=4,s[fe]=Da[i[2]&240][u[Xt]],s[fe]===ge||(s[D]=l[D][i[2]&12],s[D]===X)||(s[je]=i[2]&2&&u[je],s[tt]=!!(i[2]&1),s[Me]=Math.floor(125*s[fe]*s[N]/s[D]+s[je]),!s[Me]))return null;let m=i[3]&192;if(s[pe]=Oa[m][z],s[I]=Oa[m][I],s[rt]=u[rt][i[3]&48],s[Zr]=!!(i[3]&8),s[et]=!!(i[3]&4),s[xr]=vd[i[3]&3],s[xr]===X)return null;s[me]=16;{let{length:f,frameLength:p,samples:y,...h}=s;r[Be](a,s,h)}return new t(s)}constructor(e){super(e),this[fe]=e[fe],this[xr]=e[xr],this[je]=e[je],this[Zr]=e[Zr],this[et]=e[et],this[tt]=e[tt],this[Ae]=e[Ae],this[rt]=e[rt],this[nt]=e[nt],this[st]=e[st]}};var _n=class t extends Pe{static*[ke](e,r,n){return yield*super[ke](Kt,t,e,r,n)}constructor(e,r,n){super(e,r,n)}};var wn=class extends xe{constructor(e,r,n){super(e,r),this.Frame=_n,this.Header=Kt,n(this[Q])}get[Q](){return ys}*[Ze](){return yield*this[Lt]()}};var Sd={0:"MPEG-4",8:"MPEG-2"},Ad={0:"valid",2:ge,4:ge,6:ge},Md={0:Ls,1:xn},_d={0:"AAC Main",64:"AAC LC (Low Complexity)",128:"AAC SSR (Scalable Sample Rate)",192:"AAC LTP (Long Term Prediction)"},wd={0:ms,4:fs,8:wa,12:xt,16:ur,20:mr,24:fr,28:hr,32:pr,36:hs,40:ps,44:yr,48:La,52:X,56:X,60:"frequency is written explicitly"},Na={0:{[I]:0,[z]:"Defined in AOT Specific Config"},64:{[I]:1,[z]:yt},128:{[I]:2,[z]:te(2,C[0][0])},192:{[I]:3,[z]:te(3,C[1][3])},256:{[I]:4,[z]:te(4,C[1][3],C[3][4])},320:{[I]:5,[z]:te(5,C[1][3],C[3][0])},384:{[I]:6,[z]:te(6,C[1][3],C[3][0],Ye)},448:{[I]:8,[z]:te(8,C[1][3],C[2][0],C[3][0],Ye)}},Yt=class t extends Ie{static*[W](e,r,n){let s={},o=yield*e[V](7,n),i=Ee([o[0],o[1],o[2],o[3]&252|o[6]&3]),a=r[W](i);if(a)Object.assign(s,a);else{if(o[0]!==255||o[1]<240||(s[nt]=Sd[o[1]&8],s[Ae]=Ad[o[1]&6],s[Ae]===ge))return null;let l=o[1]&1;s[st]=Md[l],s[x]=l?7:9,s[gs]=o[2]&192,s[Qe]=o[2]&60;let d=o[2]&2;if(s[sn]=_d[s[gs]],s[D]=wd[s[Qe]],s[D]===X)return null;s[tt]=!!d,s[dn]=(o[2]<<8|o[3])&448,s[pe]=Na[s[dn]][z],s[I]=Na[s[dn]][I],s[et]=!!(o[3]&32),s[en]=!!(o[3]&8),s[un]=!!(o[3]&8),s[mn]=!!(o[3]&4),s[me]=16,s[N]=1024,s[rn]=o[6]&3;{let{length:u,channelModeBits:m,profileBits:f,sampleRateBits:p,frameLength:y,samples:h,numberAACFrames:g,...S}=s;r[Be](i,s,S)}}if(s[Me]=(o[3]<<11|o[4]<<3|o[5]>>5)&8191,!s[Me])return null;let c=(o[5]<<6|o[6]>>2)&2047;return s[qr]=c===2047?"VBR":c,new t(s)}constructor(e){super(e),this[un]=e[un],this[mn]=e[mn],this[qr]=e[qr],this[en]=e[en],this[et]=e[et],this[tt]=e[tt],this[Ae]=e[Ae],this[x]=e[x],this[nt]=e[nt],this[rn]=e[rn],this[sn]=e[sn],this[st]=e[st]}get audioSpecificConfig(){let e=ce.get(this),r=e[gs]+64<<5|e[Qe]<<5|e[dn]>>3,n=new ye(2);return new Pt(n[qe]).setUint16(0,r,!1),n}};var Ln=class t extends Pe{static*[ke](e,r,n){return yield*super[ke](Yt,t,e,r,n)}constructor(e,r,n){super(e,r,n)}};var En=class extends xe{constructor(e,r,n){super(e,r),this.Frame=Ln,this.Header=Yt,n(this[Q])}get[Q](){return"aac"}*[Ze](){return yield*this[Lt]()}};var It=class t extends Pe{static _getFrameFooterCrc16(e){return(e[e[x]-2]<<8)+e[e[x]-1]}static[ws](e){let r=t._getFrameFooterCrc16(e),n=Ca(e[O](0,-2));return r===n}constructor(e,r,n){r[yn]=n,r[jr]=t._getFrameFooterCrc16(e),super(r,e,ce.get(r)[N])}};var Ha="get from STREAMINFO metadata block",Ld={0:"Fixed",1:"Variable"},Va={0:X,16:192};for(let t=2;t<16;t++)Va[t<<4]=t<6?576*2**(t-2):2**t;var Ed={0:Ha,1:fs,2:_a,3:Ma,4:yr,5:pr,6:hr,7:fr,8:mr,9:ur,10:xt,11:ms,15:ge},Pd={0:{[I]:1,[z]:yt},16:{[I]:2,[z]:te(2,C[0][0])},32:{[I]:3,[z]:te(3,C[0][1])},48:{[I]:4,[z]:te(4,C[1][0],C[3][0])},64:{[I]:5,[z]:te(5,C[1][1],C[3][0])},80:{[I]:6,[z]:te(6,C[1][1],Ye,C[3][0])},96:{[I]:7,[z]:te(7,C[1][1],Ye,C[3][4],C[2][0])},112:{[I]:8,[z]:te(8,C[1][1],Ye,C[3][0],C[2][0])},128:{[I]:2,[z]:`${gt} (left, diff)`},144:{[I]:2,[z]:`${gt} (diff, right)`},160:{[I]:2,[z]:`${gt} (avg, diff)`},176:X,192:X,208:X,224:X,240:X},Id={0:Ha,2:8,4:12,6:X,8:16,10:20,12:24,14:X},zt=class t extends Ie{static _decodeUTF8Int(e){if(e[0]>254)return null;if(e[0]<128)return{value:e[0],length:1};let r=1;for(let i=64;i&e[0];i>>=1)r++;let n=r-1,s=0,o=0;for(;n>0;o+=6,n--){if((e[n]&192)!==128)return null;s|=(e[n]&63)<<o}return s|=(e[n]&127>>r)<<o,{value:s,length:r}}static[Oe](e,r){let n={[V]:function*(){return e}};return t[W](n,r,0).next().value}static*[W](e,r,n){let s=yield*e[V](6,n);if(s[0]!==255||!(s[1]===248||s[1]===249))return null;let o={},i=Ee(s[O](0,4)),a=r[W](i);if(a)Object.assign(o,a);else{if(o[bs]=s[1]&1,o[an]=Ld[o[bs]],o[cn]=s[2]&240,o[Qe]=s[2]&15,o[ot]=Va[o[cn]],o[ot]===X||(o[D]=Ed[o[Qe]],o[D]===ge)||s[3]&1)return null;let l=Pd[s[3]&240];if(l===X||(o[I]=l[I],o[pe]=l[z],o[me]=Id[s[3]&14],o[me]===X))return null}o[x]=5,s=yield*e[V](o[x]+8,n);let c=t._decodeUTF8Int(s[O](4));if(!c||(o[bs]?o[hn]=c.value:o[lt]=c.value,o[x]+=c[x],o[cn]===96?(s[x]<o[x]&&(s=yield*e[V](o[x],n)),o[ot]=s[o[x]-1]+1,o[x]+=1):o[cn]===112&&(s[x]<o[x]&&(s=yield*e[V](o[x],n)),o[ot]=(s[o[x]-1]<<8)+s[o[x]]+1,o[x]+=2),o[N]=o[ot],o[Qe]===12?(s[x]<o[x]&&(s=yield*e[V](o[x],n)),o[D]=s[o[x]-1]*1e3,o[x]+=1):o[Qe]===13?(s[x]<o[x]&&(s=yield*e[V](o[x],n)),o[D]=(s[o[x]-1]<<8)+s[o[x]],o[x]+=2):o[Qe]===14&&(s[x]<o[x]&&(s=yield*e[V](o[x],n)),o[D]=((s[o[x]-1]<<8)+s[o[x]])*10,o[x]+=2),s[x]<o[x]&&(s=yield*e[V](o[x],n)),o[gr]=s[o[x]-1],o[gr]!==za(s[O](0,o[x]-1))))return null;if(!a){let{blockingStrategyBits:l,frameNumber:d,sampleNumber:u,samples:m,sampleRateBits:f,blockSizeBits:p,crc:y,length:h,...g}=o;r[Be](i,o,g)}return new t(o)}constructor(e){super(e),this[jr]=null,this[an]=e[an],this[ot]=e[ot],this[lt]=e[lt],this[hn]=e[hn],this[yn]=null}};var zd=2,Cd=512*1024,qt=class extends xe{constructor(e,r,n){super(e,r),this.Frame=It,this.Header=zt,n(this[Q])}get[Q](){return"flac"}*_getNextFrameSyncOffset(e){let r=yield*this._codecParser[V](2,0),n=r[x]-2;for(;e<n;){if(r[e]===255){let o=r[e+1];if(o===248||o===249)break;o!==255&&e++}e++}return e}*[Ze](){do{let e=yield*zt[W](this._codecParser,this._headerCache,0);if(e){let r=ce.get(e)[x]+zd;for(;r<=Cd;){if(this._codecParser._flushing||(yield*zt[W](this._codecParser,this._headerCache,r))){let n=yield*this._codecParser[V](r);if(this._codecParser._flushing||(n=n[O](0,r)),It[ws](n)){let s=new It(n,e);return this._headerCache[Xe](),this._codecParser[Re](r),this._codecParser[wt](s),s}}r=yield*this._getNextFrameSyncOffset(r+1)}this._codecParser[Ge](`Unable to sync FLAC frame after searching ${r} bytes.`),this._codecParser[Re](r)}else this._codecParser[Re](yield*this._getNextFrameSyncOffset(1))}while(!0)}[Et](e){return e[oe]===0?(this._headerCache[Xe](),this._streamInfo=e[q][O](13)):e[oe]===1||(e[he]=de.get(e)[Fe].map(r=>{let n=zt[Oe](r,this._headerCache);if(n)return new It(r,n,this._streamInfo);this._codecParser[Ge]("Failed to parse Ogg FLAC frame","Skipping invalid FLAC frame")}).filter(r=>!!r)),e}};var $t=class t{static*[W](e,r,n){let s={},o=yield*e[V](28,n);if(o[0]!==79||o[1]!==103||o[2]!==103||o[3]!==83||(s[Vo]=o[4],o[5]&248))return null;s[Le]=!!(o[5]&4),s[vt]=!!(o[5]&2),s[bt]=!!(o[5]&1);let a=new Pt(ye.from(o[O](0,28))[qe]);s[Ue]=Fa(a,6),s[Je]=a.getInt32(14,!0),s[oe]=a.getInt32(18,!0),s[Ht]=a.getInt32(22,!0);let c=o[26];s[x]=c+27,o=yield*e[V](s[x],n),s[Me]=0,s[_t]=[],s[vr]=ye.from(o[O](27,s[x]));for(let l=0,d=0;l<c;l++){let u=s[vr][l];s[Me]+=u,d+=u,(u!==255||l===c-1)&&(s[_t].push(d),d=0)}return new t(s)}constructor(e){ce.set(this,e),this[Ue]=e[Ue],this[bt]=e[bt],this[vt]=e[vt],this[Le]=e[Le],this[_t]=e[_t],this[oe]=e[oe],this[Ht]=e[Ht],this[Je]=e[Je]}};var Pn=class t extends Wt{static*[ke](e,r,n){let s=yield*$t[W](e,r,n);if(s){let o=ce.get(s)[Me],i=ce.get(s)[x],a=i+o,c=(yield*e[V](a,0))[O](0,a),l=c[O](i,a);return new t(s,l,c)}else return null}constructor(e,r,n){super(e,r),de.get(this)[x]=n[x],this[he]=[],this[Do]=n,this[Ue]=e[Ue],this[Qr]=e[Ht],this[$e]=0,this[bt]=e[bt],this[vt]=e[vt],this[Le]=e[Le],this[oe]=e[oe],this[N]=0,this[Je]=e[Je]}};var Ar=class extends Pe{constructor(e,r,n){super(r,e,n)}};var Ua={0:Wr.slice(0,2),1:Wr},De="SILK-only",ue="CELT-only",ks="Hybrid",Ct="narrowband",Os="medium-band",Tt="wideband",Mr="super-wideband",_r="fullband",Td={0:{[B]:De,[k]:Ct,[R]:10},8:{[B]:De,[k]:Ct,[R]:20},16:{[B]:De,[k]:Ct,[R]:40},24:{[B]:De,[k]:Ct,[R]:60},32:{[B]:De,[k]:Os,[R]:10},40:{[B]:De,[k]:Os,[R]:20},48:{[B]:De,[k]:Os,[R]:40},56:{[B]:De,[k]:Os,[R]:60},64:{[B]:De,[k]:Tt,[R]:10},72:{[B]:De,[k]:Tt,[R]:20},80:{[B]:De,[k]:Tt,[R]:40},88:{[B]:De,[k]:Tt,[R]:60},96:{[B]:ks,[k]:Mr,[R]:10},104:{[B]:ks,[k]:Mr,[R]:20},112:{[B]:ks,[k]:_r,[R]:10},120:{[B]:ks,[k]:_r,[R]:20},128:{[B]:ue,[k]:Ct,[R]:2.5},136:{[B]:ue,[k]:Ct,[R]:5},144:{[B]:ue,[k]:Ct,[R]:10},152:{[B]:ue,[k]:Ct,[R]:20},160:{[B]:ue,[k]:Tt,[R]:2.5},168:{[B]:ue,[k]:Tt,[R]:5},176:{[B]:ue,[k]:Tt,[R]:10},184:{[B]:ue,[k]:Tt,[R]:20},192:{[B]:ue,[k]:Mr,[R]:2.5},200:{[B]:ue,[k]:Mr,[R]:5},208:{[B]:ue,[k]:Mr,[R]:10},216:{[B]:ue,[k]:Mr,[R]:20},224:{[B]:ue,[k]:_r,[R]:2.5},232:{[B]:ue,[k]:_r,[R]:5},240:{[B]:ue,[k]:_r,[R]:10},248:{[B]:ue,[k]:_r,[R]:20}},wr=class t extends Ie{static[Oe](e,r,n){let s={};if(s[I]=e[9],s[it]=e[18],s[x]=s[it]!==0?21+s[I]:19,e[x]<s[x])throw new Error("Out of data while inside an Ogg Page");let o=r[0]&3,i=o===3?2:1,a=Ee(e[O](0,s[x]))+Ee(r[O](0,i)),c=n[W](a);if(c)return new t(c);if(a.substr(0,8)!=="OpusHead"||e[8]!==1)return null;s[q]=ye.from(e[O](0,s[x]));let l=new Pt(s[q][qe]);if(s[me]=16,s[Dt]=l.getUint16(10,!0),s[fn]=l.getUint32(12,!0),s[D]=xt,s[nn]=l.getInt16(16,!0),s[it]in Ua&&(s[pe]=Ua[s[it]][s[I]-1],!s[pe]))return null;s[it]!==0&&(s[pn]=e[19],s[$r]=e[20],s[ln]=[...e[O](21,s[I]+21)]);let d=Td[248&r[0]];switch(s[B]=d[B],s[k]=d[k],s[R]=d[R],o){case 0:s[ct]=1;break;case 1:case 2:s[ct]=2;break;case 3:s[tn]=!!(128&r[1]),s[Jr]=!!(64&r[1]),s[ct]=63&r[1];break;default:return null}{let{length:u,data:m,channelMappingFamily:f,...p}=s;n[Be](a,s,p)}return new t(s)}constructor(e){super(e),this[q]=e[q],this[k]=e[k],this[it]=e[it],this[ln]=e[ln],this[$r]=e[$r],this[ct]=e[ct],this[R]=e[R],this[Jr]=e[Jr],this[fn]=e[fn],this[tn]=e[tn],this[B]=e[B],this[nn]=e[nn],this[Dt]=e[Dt],this[pn]=e[pn]}};var In=class extends xe{constructor(e,r,n){super(e,r),this.Frame=Ar,this.Header=wr,n(this[Q]),this._identificationHeader=null,this._preSkipRemaining=null}get[Q](){return"opus"}[Et](e){return e[oe]===0?(this._headerCache[Xe](),this._identificationHeader=e[q]):e[oe]===1||(e[he]=de.get(e)[Fe].map(r=>{let n=wr[Oe](this._identificationHeader,r,this._headerCache);if(n){this._preSkipRemaining===null&&(this._preSkipRemaining=n[Dt]);let s=n[R]*n[ct]/1e3*n[D];return this._preSkipRemaining>0&&(this._preSkipRemaining-=s,s=this._preSkipRemaining<0?-this._preSkipRemaining:0),new Ar(r,n,s)}this._codecParser[Ms]("Failed to parse Ogg Opus Header","Not a valid Ogg Opus file")})),e}};var Lr=class extends Pe{constructor(e,r,n){super(r,e,n)}};var Qo={};for(let t=0;t<8;t++)Qo[t+6]=2**(6+t);var zn=class t extends Ie{static[Oe](e,r,n,s){if(e[x]<30)throw new Error("Out of data while inside an Ogg Page");let o=Ee(e[O](0,30)),i=r[W](o);if(i)return new t(i);let a={[x]:30};if(o.substr(0,7)!=="vorbis")return null;a[q]=ye.from(e[O](0,30));let c=new Pt(a[q][qe]);if(a[St]=c.getUint32(7,!0),a[St]!==0||(a[I]=e[11],a[pe]=Wr[a[I]-1]||"application defined",a[D]=c.getUint32(12,!0),a[Xr]=c.getInt32(16,!0),a[Yr]=c.getInt32(20,!0),a[Kr]=c.getInt32(24,!0),a[Mt]=Qo[(e[28]&240)>>4],a[At]=Qo[e[28]&15],a[At]>a[Mt])||e[29]!==1)return null;a[me]=32,a[br]=s,a[on]=n;{let{length:l,data:d,version:u,vorbisSetup:m,vorbisComments:f,...p}=a;r[Be](o,a,p)}return new t(a)}constructor(e){super(e),this[Xr]=e[Xr],this[Kr]=e[Kr],this[Yr]=e[Yr],this[At]=e[At],this[Mt]=e[Mt],this[q]=e[q],this[on]=e[on],this[br]=e[br]}};var Cn=class extends xe{constructor(e,r,n){super(e,r),this.Frame=Lr,n(this[Q]),this._identificationHeader=null,this._setupComplete=!1,this._prevBlockSize=null}get[Q](){return Nt}[Et](e){e[he]=[];for(let r of de.get(e)[Fe])if(r[0]===1)this._headerCache[Xe](),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=zn[Oe](this._identificationHeader,this._headerCache,this._vorbisComments,this._vorbisSetup);n?e[he].push(new Lr(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 s=this._mode.blockFlags[e[0]>>1&this._mode.mask]?r[Mt]:r[At],o=this._prevBlockSize===null?0:(this._prevBlockSize+s)/4;return this._prevBlockSize=s,o}_parseSetupHeader(e){let r=new Es(e),n={count:0,blockFlags:[]};for(;(r.read(1)&1)!==1;);let s;for(;n.count<64&&r.position>0;){bn(r.read(8));let o=0;for(;r.read(8)===0&&o++<3;);if(o===4)s=r.read(7),n.blockFlags.unshift(s&1),r.position+=6,n.count++;else{((bn(s)&126)>>1)+1!==n.count&&this._codecParser[Ge]("vorbis derived mode count did not match actual mode count");break}}return n.mask=(1<<Math.log2(n.count))-1,n}};var Jo=class{constructor(e,r,n){this._codecParser=e,this._headerCache=r,this._onCodec=n,this._continuedPacket=new ye,this._codec=null,this._isSupported=null,this._previousAbsoluteGranulePosition=null}get[Q](){return this._codec||""}_updateCodec(e,r){this._codec!==e&&(this._headerCache[We](),this._parser=new r(this._codecParser,this._headerCache,this._onCodec),this._codec=e)}_checkCodecSupport({data:e}){let r=Ee(e[O](0,8));switch(r){case"fishead\0":return!1;case"OpusHead":return this._updateCodec("opus",In),!0;case(/^\x7fFLAC/.test(r)&&r):return this._updateCodec("flac",qt),!0;case(/^\x01vorbis/.test(r)&&r):return this._updateCodec(Nt,Cn),!0;default:return!1}}_checkPageSequenceNumber(e){e[oe]!==this._pageSequenceNumber+1&&this._pageSequenceNumber>1&&e[oe]>1&&this._codecParser[Ge]("Unexpected gap in Ogg Page Sequence Number.",`Expected: ${this._pageSequenceNumber+1}, Got: ${e[oe]}`),this._pageSequenceNumber=e[oe]}_parsePage(e){this._isSupported===null&&(this._pageSequenceNumber=e[oe],this._isSupported=this._checkCodecSupport(e)),this._checkPageSequenceNumber(e);let r=de.get(e),n=ce.get(r[we]),s=0;if(r[Fe]=n[_t].map(o=>e[q][O](s,s+=o)),this._continuedPacket[x]&&(r[Fe][0]=vn(this._continuedPacket,r[Fe][0]),this._continuedPacket=new ye),n[vr][n[vr][x]-1]===255&&(this._continuedPacket=vn(this._continuedPacket,r[Fe].pop())),this._previousAbsoluteGranulePosition!==null&&(e[N]=Number(e[Ue]-this._previousAbsoluteGranulePosition)),this._previousAbsoluteGranulePosition=e[Ue],this._isSupported){let o=this._parser[Et](e);return this._codecParser[wt](o),o}else return e}},Tn=class extends xe{constructor(e,r,n){super(e,r),this._onCodec=n,this.Frame=Pn,this.Header=$t,this._streams=new Map,this._currentSerialNumber=null}get[Q](){let e=this._streams.get(this._currentSerialNumber);return e?e.codec:""}*[Ze](){let e=yield*this[Lt](!0);this._currentSerialNumber=e[Je];let r=this._streams.get(this._currentSerialNumber);return r||(r=new Jo(this._codecParser,this._headerCache,this._onCodec),this._streams.set(this._currentSerialNumber,r)),e[Le]&&this._streams.delete(this._currentSerialNumber),r._parsePage(e)}};var Zo=()=>{},Fn=class{constructor(e,{onCodec:r,onCodecHeader:n,onCodecUpdate:s,enableLogging:o=!1,enableFrameCRC32:i=!0}={}){this._inputMimeType=e,this._onCodec=r||Zo,this._onCodecHeader=n||Zo,this._onCodecUpdate=s,this._enableLogging=o,this._crc32=i?Ta:Zo,this[We]()}get[Q](){return this._parser?this._parser[Q]:""}[We](){this._headerCache=new Sn(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[We]()}*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 En(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/mpeg/))this._parser=new wn(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/flac/))this._parser=new qt(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/ogg/))this._parser=new Tn(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[Ze]();e&&(yield e)}}*[V](e=0,r=0){let n;for(;this._rawData[x]<=e+r;){if(n=yield,this._flushing)return this._rawData[O](r);n&&(this._totalBytesIn+=n[x],this._rawData=vn(this._rawData,n))}return this._rawData[O](r)}[Re](e){this._currentReadPosition+=e,this._rawData=this._rawData[O](e)}[gn](e){this._sampleRate=e[we][D],e[we][fe]=e[$e]>0?Math.round(e[q][x]/e[$e])*8:0,e[lt]=this._frameNumber++,e[Vt]=this._totalBytesOut,e[Gt]=this._totalSamples,e[Ut]=this._totalSamples/this._sampleRate*1e3,e[Qr]=this._crc32(e[q]),this._headerCache[_s](e[we][fe],e[Ut]),this._totalBytesOut+=e[q][x],this._totalSamples+=e[N]}[wt](e){if(e[he]){if(e[Le]){let r=e[N];e[he].forEach(n=>{let s=n[N];r<s&&(n[N]=r>0?r:0,n[$e]=n[N]/n[we][D]*1e3),r-=s,this[gn](n)})}else e[N]=0,e[he].forEach(r=>{e[N]+=r[N],this[gn](r)});e[$e]=e[N]/this._sampleRate*1e3||0,e[Gt]=this._totalSamples,e[Ut]=this._totalSamples/this._sampleRate*1e3||0,e[Vt]=this._totalBytesOut}else this[gn](e)}_log(e,r){if(this._enableLogging){let n=[`${Q}: ${this[Q]}`,`inputMimeType: ${this._inputMimeType}`,`readPosition: ${this._currentReadPosition}`,`totalBytesIn: ${this._totalBytesIn}`,`${Vt}: ${this._totalBytesOut}`],s=Math.max(...n.map(o=>o[x]));r.push(`--stats--${"-".repeat(s-9)}`,...n,"-".repeat(s)),e("codec-parser",r.reduce((o,i)=>o+`
|
|
4
|
+
`+i,""))}}[Ge](...e){this._log(console.warn,e)}[Ms](...e){this._log(console.error,e)}};var Ga=Fn;var Ds=he;var Ns=q;var Wa=we;var Xa=Le;var Ka=br;var Ya=Gt;function dt(t){var e=e;function r(){}e={};function n(P){throw P}var s,o,i,a,c,l,d,u,m,f,p;function y(){var P=p.buffer;s=new Int8Array(P),o=new Int16Array(P),a=new Uint8Array(P),c=new Uint16Array(P),i=new Int32Array(P),l=new Uint32Array(P),d=new Float32Array(P),u=new Float64Array(P),m=new BigInt64Array(P),f=new BigUint64Array(P)}for(var h=P=>{for(var ze,Br,tr=0,Xn=0,Kn=P.length,Yn=new Uint8Array((Kn*3>>2)-(P[Kn-2]=="=")-(P[Kn-1]=="="));tr<Kn;tr+=4,Xn+=3)ze=J[P.charCodeAt(tr+1)],Br=J[P.charCodeAt(tr+2)],Yn[Xn]=J[P.charCodeAt(tr)]<<2|ze>>4,Yn[Xn+1]=ze<<4|Br>>2,Yn[Xn+2]=Br<<6|J[P.charCodeAt(tr+3)];return Yn},g=()=>n(""),S=()=>{},b={},A=P=>P(),v=()=>performance.now(),M=(P,ze)=>{if(b[P]&&(clearTimeout(b[P].id),delete b[P]),!ze)return 0;var Br=setTimeout(()=>{delete b[P],A(()=>ki(P,v()))},ze);return b[P]={id:Br,timeout_ms:ze},0},_=Math.atan,L=Math.cos,T=Math.exp,w=Math.log,H=Math.pow,G=Math.sin,U=P=>{var ze=a.length;return P>>>=0,!1},F=P=>{throw`exit(${P})`},J=new Uint8Array(123),Se=25;Se>=0;--Se)J[48+Se]=52+Se,J[65+Se]=Se,J[97+Se]=26+Se;J[43]=62,J[47]=63;var Ft={e:g,d:S,f:M,b:_,a:L,i:T,h:w,g:H,c:G,k:U,j:F};function Wn(P){Rr=P.n,zi=P.o,Ci=P.p,Ti=P.q,Fi=P.r,Ri=P.s,Bi=P.t,ki=P.v}var Rr,zi,Ci,Ti,Fi,Ri,Bi,ki;function Kc(P){P.m()}dt.wasm||Object.defineProperty(dt,"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¯ñ\Ñós9\§ôÊ@Ü (tÃø4° ¢7fqÓg²Jè6x[zç®&4=} p.(°tÍÞã¾>÷CõË"*k?¿~7~H2ÛÜâ.ÏQä;6{ÜãFÑá'DD¤±°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ïgN¾)ø§\V0uSIö:ÌU4ж¯´Õn9ÔèE£ZƼ{hµmÙ¾6ÆÑ+xñ´«þ¸=Mߤ·å®«ïÆGFÝì|H?äE"þ!9«Æïpæ'][¯ù·£W÷O§&#ax$qf=}ø ô bÏ×W÷LôoÝWQÕÓ)u÷½èV|¥Gà¨Ö¸@ê|ÇK5ò A·Â9CS2¸¼¿,äÝÑÝy!ÑR%ÆÝÎ0Âv§ qTcó±hØÉã=}Z=}Ælüën¯ð(-°ÜwVÏï.th¥íS~SÏ»ZZÔZ
|
|
6
6
|
3BÌÛ¬<éæ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óäsE\ýïé§Ö:Ò'Cç(_X$\¦½eÒ8$XF|eíÙÓ¡¤Û<ØÞÛ¸9¿ðÃÎ#b~× 4éîÿÏq
|
|
7
7
|
ód|0wU&®è·vh6¨{ÚçÚ18Ó(ÓY\0¦= çèíß)Ø=}[xü-v?N(Kkg0}âÚ´ð¬ÕQNÍ¢usѳ=}. ëg
û= ÍMBp'²¨ x4è@9t§eݵ¾âð½ z?Z¹FH'̯¿<K,üµ<{ ¶JãývåàÆeù0Ð"F¥ÃÒÞþÔÉvCzl}ðN£ Í^P%²¸FX»WÎêô¶
äÉJ^g×SÃã.Ät*'ªG«ÒB<ÜÓ
¿ºp\àuV¯£ÅݽáÞ ùß=}ÎÚ^ÿí>¥!¨ â=M·?*/¤"å)â·ÿîÿî*(%*2[½"üríÔ4l½»a}¯CwpCÓèìGc-ã6®=M32k?Êg
!So-x>³G+ã@ò, ÁïáåN0þÙè.~È÷¡vTr¶Ã[üB±º»ávëw¹{pܺû"Aæ±9Æ^¹³òïRIAy5GÂwÉf4@Tù|qý7ðªwBL|Ôqv!ª°|]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ÑUy¹¦ß§/6P0(Cúýb"þ¥°VÙÄá£ÓÙ@¾YýòD{òÃv?EP©=MBé\ĽYäýRò øfâëEEf¼D+gC×úDZGÅÿ±Ç?TzÙ¡±ÏÁÕ¯¦ðvZmT}3xËz×cºrÑM=Mc-É©Ô7½wæc§Î»cû¾yfÙWòÆÝÔc¥³ôØf«Äñ·9ø%g:y^+{U]¤þ
[&fÓÏYë«Gªõ¹¦Öðþ¬moÛø?/ÛS.[S9ÛùC
/û2²Y£ÎÑ%/sy¢×ÌùJW6Oí\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¶ÌºHgNjÒ{æ¾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 Tc={a:Ft};this.setModule=E=>{t.setModule(ct,E)},this.getModule=()=>t.getModule(ct),this.instantiate=()=>(this.getModule().then(E=>WebAssembly.instantiate(E,Tc)).then(E=>{let Ie=E.exports;kn(Ie),p=Ie.l,y(),Cc(Ie),r()}),this.ready=new Promise(E=>{r=E}).then(()=>{this.HEAP=p.buffer,this.malloc=As,this.free=Is,this.create_decoder=Pr,this.send_setup=_s,this.init_dsp=ws,this.decode_packets=Ls,this.destroy_decoder=Es}),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||Q,this._EmscriptenWASM=qt.EmscriptenWASM||ct,this._module=qt.module,this._inputSize=128*1024,this._ready=this._init(),this}var Bo=Symbol(),lt=class{constructor(){this._onCodec=e=>{if(e!=="vorbis")throw new Error("@wasm-audio-decoders/ogg-vorbis does not support this codec "+e)},new Q,this._init(),this._ready=this[Bo](qt)}_init(){this._vorbisSetupInProgress=!0,this._totalSamplesDecoded=0,this._codecParser=new Ba("audio/ogg",{onCodec:this._onCodec,enableFrameCRC32:!1})}async[Bo](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[Ro][0]===1&&this._decoder.sendSetupHeader(s[Ro]),s[To].length)){let a=s[To][0][Oa];this._decoder.sendSetupHeader(a[ka]),this._decoder.initDsp(),this._vorbisSetupInProgress=!1}r.push(...s[To].map(a=>a[Ro]))}let n=await this._decoder.decodePackets(r);this._totalSamplesDecoded+=n.samplesDecoded;let o=e[e.length-1];if(o&&o[Da]){let i=this._totalSamplesDecoded-o[Ha];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 Yi=class extends sr{constructor(e){super(e,"ogg-vorbis-decoder",qt,ct)}async sendSetupHeader(e){return this.postToDecoder("sendSetupHeader",e)}async initDsp(){return this.postToDecoder("initDsp")}async decodePackets(e){return this.postToDecoder("decodePackets",e)}},Pn=class extends lt{constructor(){super(),this._ready=super[Bo](Yi)}async free(){await this._decoder.free()}terminate(){this._decoder.terminate()}};io(lt,"OggVorbisDecoder");io(Pn,"OggVorbisDecoderWebWorker");var qi=class extends Error{constructor(e){super(e),this.name="OggDecodeError"}};async function Oo(t,e=new lt){await e.ready;let r=await e.decode(new Uint8Array(t)),n=r.errors;if(n&&n.length>0)throw new qi(n.map(o=>o.message).join("; "));return{sampleRate:r.sampleRate,channels:r.channelData.length,bitDepth:r.bitDepth,channelData:r.channelData}}var Fn=class extends Error{constructor(e){super(e),this.name="AudioRegistryError"}},Ar=class{constructor(e,r={}){this.vfs=e;this.refCounts=new Map;this.cache=new ft(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=oo(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 Oo(r);throw new Fn(`Unsupported audio format: ${e}`)}};var bd="quake2ts-pak-indexes",vd="pak-indexes";function Na(){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=Na();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 ji(t,e){return`${re(t)}:${e.toString(16)}`}function Sd(t){return t.map(e=>({...e}))}var Do=class{constructor(e=bd,r=vd){this.dbName=e;this.storeName=r}get isSupported(){return!!Na()}async persist(e){if(!this.isSupported)return;let r=e.validate(),n={...r,key:ji(e.name,r.checksum),name:e.name,size:e.size,persistedAt:Date.now(),entries:Sd(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?ji(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=re(e),a=i.filter(c=>re(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?ji(e,r):void 0,i=await Tn(n,this.storeName,"readwrite",s=>{if(o)return s.delete(o);let a=`${re(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 jt=class extends Error{constructor(r,n){super(n??`Missing dependencies: ${r.join(", ")}`);this.missing=r;this.name="AssetDependencyError"}},Rn=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 jt(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}},ko=class{constructor(e,r={}){this.vfs=e;this.textures=new ir({capacity:r.textureCacheCapacity??128}),this.audio=new Ar(e,{cacheSize:r.audioCacheSize??64}),this.dependencyTracker=r.dependencyTracker??new Rn,this.md2=new rr(e),this.md3=new nr(e),this.sprite=new or(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 jt(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 jt(i,`Asset ${n} is missing dependencies: ${i.join(", ")}`);let s=await this.md3.load(e);return this.dependencyTracker.markLoaded(n),s}async loadSprite(e){let r=this.makeKey("sprite",e);this.dependencyTracker.register(r);let n=await this.sprite.load(e);return this.dependencyTracker.markLoaded(r),n}resetForLevelChange(){this.textures.clear(),this.audio.clearAll(),this.dependencyTracker.reset()}makeKey(e,r){return`${e}:${re(r)}`}};var $i=32,Ho=(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))(Ho||{}),Va=-1,No=0,Ua=1,Ga=2,Wa=3,_r=80,Xa=.003;function $t(t){return t===3?t*.001:t*5e-4}function Vo(t){let e=$t(t);return e<=0?Number.POSITIVE_INFINITY:80+1/e}var Uo=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 Go(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 Wo=class{constructor(e=new er){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 Xo=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=re(e.replace(/^\//,""));return r.startsWith(this.soundRoot)?r:re(`${this.soundRoot}${r}`)}};var Md=7,Bn=t=>t&Md;function Ko(t){return Array.from({length:32},()=>({entnum:0,entchannel:0,endTimeMs:0,isPlayer:!1,active:!1})).map(e=>({...e,isPlayer:e.entnum===t}))}function Yo(t,e,r,n){if(r<0)throw new Error("pickChannel: entchannel must be non-negative");let o=Bn(r),i=-1,s=Number.POSITIVE_INFINITY;for(let a=0;a<t.length;a+=1){let c=t[a],l=Bn(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 qo(t,e,r,n,o){if(o)return{left:r,right:r,distanceComponent:0};let i=Cs(t,e.origin),s=mi(i),a=He(i),c=s-80;c<0&&(c=0),c*=$t(n);let l=fi(e.right,a),d=e.mono??!1,u=d||n===0?1:.5*(1+l),f=d||n===0?1:.5*(1-l),m=Math.max(0,Math.floor(r*(1-c)*u));return{left:Math.max(0,Math.floor(r*(1-c)*f)),right:m,distanceComponent:c}}var jo=class{constructor(e){this.activeSources=new Map;this.contextController=e.context,this.registry=e.registry,this.playerEntity=e.playerEntity,this.channels=Ko(e.playerEntity),this.listener=e.listener??{origin:Fs,right:{x:1,y:0,z:0}},this.sfxVolume=e.sfxVolume??1,this.masterVolume=e.masterVolume??1,this.resolveOcclusion=e.resolveOcclusion,this.graph=Go(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=Yo(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),f=Ka(u?.gainScale??1),m=this.resolveOcclusion?this.createOcclusionFilter(n,u?.lowpassHz??2e4):void 0;this.applyOriginToPanner(d,c);let p=e.entity===this.playerEntity,y=qo(c,this.listener,e.volume,e.attenuation,p),g=(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=g*f;let S=n.currentTime+(e.timeOffsetMs??0)/1e3,b=(e.looping?Number.POSITIVE_INFINITY:r.duration*1e3)+S*1e3;a.connect(d),m?(d.connect(m),m.connect(l)):d.connect(l),l.connect(this.graph.master),a.start(S),a.onended=()=>{this.channels[i].active=!1,this.activeSources.delete(i)};let M={channelIndex:i,entnum:e.entity,entchannel:Bn(e.channel),endTimeMs:b,source:a,panner:d,gain:l,baseGain:g,origin:c,attenuation:e.attenuation,occlusion:m?{scale:f,lowpassHz:u?.lowpassHz,filter:m}:u?{scale:f,lowpassHz:u.lowpassHz}:void 0};return this.channels[i]={entnum:e.entity,entchannel:Bn(e.channel),endTimeMs:b,isPlayer:e.entity===this.playerEntity,active:!0},this.activeSources.set(i,M),M}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=$t(r);return e.refDistance=80,e.maxDistance=Vo(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=Qi(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=Qi(o,10,2e4)}e.occlusion?(e.occlusion.scale=n,e.occlusion.lowpassHz=r?.lowpassHz):r&&(e.occlusion={scale:n,lowpassHz:r.lowpassHz})}},Qi=(t,e,r)=>Math.min(r,Math.max(e,t)),Ka=t=>Qi(t,0,1);var $o=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 Ad(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 _d(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 Ya(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");Ad(i);let s=new Map;_d(i,n,o,s);let a=!1,c=new Set,l=new Set,d=f=>{a=!0,f.preventDefault();for(let m of c)m()},u=()=>{a=!1;for(let f of l)f()};return t.addEventListener("webglcontextlost",d),t.addEventListener("webglcontextrestored",u),{gl:i,extensions:s,isLost:()=>a,onLost(f){return c.add(f),()=>c.delete(f)},onRestored(f){return l.add(f),()=>l.delete(f)},dispose(){t.removeEventListener("webglcontextlost",d),t.removeEventListener("webglcontextrestored",u),c.clear(),l.clear(),s.clear()}}}function qa(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 wd(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 ge=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=qa(e,e.VERTEX_SHADER,r.vertex),i=qa(e,e.FRAGMENT_SHADER,r.fragment);try{let s=wd(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 ja(t,e,r){return ge.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)}},Me=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)}},wr=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)}},Lr=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)}},Jo=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 Zi=4,Ji=7*Zi,es=[{index:0,size:3,type:5126,stride:Ji,offset:0},{index:1,size:2,type:5126,stride:Ji,offset:3*Zi},{index:2,size:2,type:5126,stride:Ji,offset:5*Zi}];function Ld(t,e){return{width:t,height:t,padding:e,data:new Uint8Array(t*t*4),cursorX:0,cursorY:0,rowHeight:0}}function Ed(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 Id(t,e,r){let n=Ed(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 zd(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=Ld(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 Zo(t){return t instanceof Float32Array?t:new Float32Array(t)}function Pd(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 Fd(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 Cd(t,e){let r=Zo(t.vertices),n=Zo(t.textureCoords),o=e?Fd(Zo(t.lightmapCoords??t.textureCoords),e):Zo(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 $a(t){let e=[];for(let r=0;r<t.faces.length;r++){let n=t.faces[r];if(n.texInfo<0)continue;let o=t.texInfo[n.texInfo],i=[],s=[],a=[];for(let f=0;f<n.numEdges;f++){let m=t.surfEdges[n.firstEdge+f],p=t.edges[Math.abs(m)],y=m>=0?p.vertices[0]:p.vertices[1],h=t.vertices[y];i.push(h[0],h[1],h[2]);let g=h[0]*o.s[0]+h[1]*o.s[1]+h[2]*o.s[2]+o.sOffset,S=h[0]*o.t[0]+h[1]*o.t[1]+h[2]*o.t[2]+o.tOffset;s.push(g,S),a.push(g,S)}let c=[],l=i.length/3;for(let f=1;f<l-1;f++)c.push(0,f,f+1);let d,u=t.lightMapInfo[r];if(u){let f=1/0,m=-1/0,p=1/0,y=-1/0;for(let v=0;v<s.length;v+=2){let A=s[v],_=s[v+1];A<f&&(f=A),A>m&&(m=A),_<p&&(p=_),_>y&&(y=_)}let h=Math.floor(f/16),g=Math.floor(p/16),S=Math.ceil(m/16)-h+1,b=Math.ceil(y/16)-g+1,M=eo(n,t.lightMaps,u);if(M&&M.length===S*b*3){d={width:S,height:b,samples:M};for(let v=0;v<a.length;v+=2)a[v]=s[v]/16-h+.5,a[v+1]=s[v+1]/16-g+.5}}e.push({vertices:new Float32Array(i),textureCoords:new Float32Array(s),lightmapCoords:new Float32Array(a),indices:new Uint16Array(c),texture:o.texture,surfaceFlags:o.flags,lightmap:d})}return e}function Qa(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}=zd(o,c.lightmap,n);Id(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 wr(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=Cd(c,d),f=Pd(c.indices,u.length/7),m=new xe(t,t.STATIC_DRAW,t.ARRAY_BUFFER);m.upload(u);let p=new De(t,t.STATIC_DRAW);p.upload(f);let y=new Me(t);return y.configureAttributes(es,m),{vao:y,vertexBuffer:m,indexBuffer:p,indexCount:f.length,vertexCount:u.length/7,texture:c.texture,surfaceFlags:c.surfaceFlags??Tr,lightmap:d,vertexData:u,indexData:f}}),lightmaps:s}}function Er(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 Ja(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],f=t[14],m=t[3],p=t[7],y=t[11],h=t[15];return[Er({normal:{x:m+e,y:p+r,z:y+n},distance:h+o}),Er({normal:{x:m-e,y:p-r,z:y-n},distance:h-o}),Er({normal:{x:m+i,y:p+s,z:y+a},distance:h+c}),Er({normal:{x:m-i,y:p-s,z:y-a},distance:h-c}),Er({normal:{x:m+l,y:p+d,z:y+u},distance:h+f}),Er({normal:{x:m-l,y:p-d,z:y-u},distance:h-f})]}function Td(t,e){return t.normal.x*e.x+t.normal.y*e.y+t.normal.z*e.z+t.distance}function On(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(Td(n,{x:o,y:i,z:s})<0)return!1}return!0}function Za(t){return t<0}function ec(t){return-t-1}function tc(t,e){return t.normal[0]*e.x+t.normal[1]*e.y+t.normal[2]*e.z-t.dist}function Rd(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 Bd(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 On(r,n,e)}function rs(t,e){let r=0;for(;r>=0;){let n=t.nodes[r],o=t.planes[n.planeIndex],s=tc(o,e)>=0?0:1,a=n.children[s];if(Za(a))return ec(a);r=a}return-1}function Od(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 ts(t,e,r,n,o,i,s){if(Za(e)){let f=ec(e),m=t.leafs[f];if(!Rd(t.visibility,o,m.cluster)||!Bd(m,n))return;let p={x:(m.mins[0]+m.maxs[0])*.5,y:(m.mins[1]+m.maxs[1])*.5,z:(m.mins[2]+m.maxs[2])*.5},y=p.x-r.x,h=p.y-r.y,g=p.z-r.z,S=-(y*y+h*h+g*g);for(let b of Od(t,f))s.has(b)||(s.add(b),i.push({faceIndex:b,leafIndex:f,sortKey:S}));return}let a=t.nodes[e],c=t.planes[a.planeIndex],l=tc(c,r),d=l>=0?a.children[0]:a.children[1],u=l>=0?a.children[1]:a.children[0];On({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)&&(ts(t,d,r,n,o,i,s),ts(t,u,r,n,o,i,s))}function rc(t,e,r){let n=rs(t,e),o=n>=0?t.leafs[n].cluster:-1,i=[];return ts(t,0,e,r,o,i,new Set),i}var ns=`#version 300 es
|
|
141
|
+
ïBçϧmÙIólÜoëVb¦¯éWÇû3`});var Yc={a:Ft};this.setModule=P=>{t.setModule(dt,P)},this.getModule=()=>t.getModule(dt),this.instantiate=()=>(this.getModule().then(P=>WebAssembly.instantiate(P,Yc)).then(P=>{let ze=P.exports;Wn(ze),p=ze.l,y(),Kc(ze),r()}),this.ready=new Promise(P=>{r=P}).then(()=>{this.HEAP=p.buffer,this.malloc=zi,this.free=Bi,this.create_decoder=Rr,this.send_setup=Ci,this.init_dsp=Ti,this.decode_packets=Fi,this.destroy_decoder=Ri}),this)}function jt(){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 s=0;s<t.length;s++){let o=t[s];this._input.buf.set(o),this._inputLen.buf[0]=o.length,this._common.wasm.decode_packets(this._decoder);let i=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(i);i&&d.set(new Float32Array(this._common.wasm.HEAP,c[l],i)),a.push(d)}e.push(a),r+=i,this._frameNumber++,this._inputBytes+=o.length,this._outputSamples+=i;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:o.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=jt.isWebWorker,this._WASMAudioDecoderCommon=jt.WASMAudioDecoderCommon||Z,this._EmscriptenWASM=jt.EmscriptenWASM||dt,this._module=jt.module,this._inputSize=128*1024,this._ready=this._init(),this}var Hs=Symbol(),ut=class{constructor(){this._onCodec=e=>{if(e!=="vorbis")throw new Error("@wasm-audio-decoders/ogg-vorbis does not support this codec "+e)},new Z,this._init(),this._ready=this[Hs](jt)}_init(){this._vorbisSetupInProgress=!0,this._totalSamplesDecoded=0,this._codecParser=new Ga("audio/ogg",{onCodec:this._onCodec,enableFrameCRC32:!1})}async[Hs](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 o=0;o<e.length;o++){let i=e[o];if(this._vorbisSetupInProgress&&(i[Ns][0]===1&&this._decoder.sendSetupHeader(i[Ns]),i[Ds].length)){let a=i[Ds][0][Wa];this._decoder.sendSetupHeader(a[Ka]),this._decoder.initDsp(),this._vorbisSetupInProgress=!1}r.push(...i[Ds].map(a=>a[Ns]))}let n=await this._decoder.decodePackets(r);this._totalSamplesDecoded+=n.samplesDecoded;let s=e[e.length-1];if(s&&s[Xa]){let o=this._totalSamplesDecoded-s[Ya];if(o>0){for(let i=0;i<n.channelData.length;i++)n.channelData[i]=n.channelData[i].subarray(0,n.samplesDecoded-o);n.samplesDecoded-=o,this._totalSamplesDecoded-=o}}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 ei=class extends dr{constructor(e){super(e,"ogg-vorbis-decoder",jt,dt)}async sendSetupHeader(e){return this.postToDecoder("sendSetupHeader",e)}async initDsp(){return this.postToDecoder("initDsp")}async decodePackets(e){return this.postToDecoder("decodePackets",e)}},Rn=class extends ut{constructor(){super(),this._ready=super[Hs](ei)}async free(){await this._decoder.free()}terminate(){this._decoder.terminate()}};us(ut,"OggVorbisDecoder");us(Rn,"OggVorbisDecoderWebWorker");var ti=class extends Error{constructor(e){super(e),this.name="OggDecodeError"}};async function Vs(t,e=new ut){await e.ready;let r=await e.decode(new Uint8Array(t)),n=r.errors;if(n&&n.length>0)throw new ti(n.map(s=>s.message).join("; "));return{sampleRate:r.sampleRate,channels:r.channelData.length,bitDepth:r.bitDepth,channelData:r.channelData}}var Bn=class extends Error{constructor(e){super(e),this.name="AudioRegistryError"}},Er=class{constructor(e,r={}){this.vfs=e;this.refCounts=new Map;this.cache=new ht(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 o=(await this.vfs.readFile(e)).slice().buffer,i=await this.decodeByExtension(e,o);return this.cache.set(r,i),this.refCounts.set(r,1),i}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 s=ds(r),o=s.channels,i=Array.from({length:o},()=>new Float32Array(s.samples.length/o));for(let a=0;a<s.samples.length;a+=1)i[a%o][Math.floor(a/o)]=s.samples[a];return{sampleRate:s.sampleRate,channels:o,bitDepth:s.bitsPerSample,channelData:i}}if(n.endsWith(".ogg")||n.endsWith(".oga"))return Vs(r);throw new Bn(`Unsupported audio format: ${e}`)}};var Fd="quake2ts-pak-indexes",Rd="pak-indexes";function qa(){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 kn(t,e){let r=qa();return r?new Promise((n,s)=>{let o=r.open(t,1);o.onupgradeneeded=()=>{let{result:i}=o;i.objectStoreNames.contains(e)||i.createObjectStore(e,{keyPath:"key"})},o.onerror=()=>s(o.error??new Error("Unknown IndexedDB error")),o.onsuccess=()=>n(o.result)}):Promise.reject(new Error("IndexedDB is not available in this environment"))}function On(t,e,r,n){return new Promise((s,o)=>{let a=t.transaction(e,r).objectStore(e),c=n(a);c.onsuccess=()=>s(c.result),c.onerror=()=>o(c.error??new Error("IndexedDB transaction error"))})}function ri(t,e){return`${se(t)}:${e.toString(16)}`}function Bd(t){return t.map(e=>({...e}))}var Us=class{constructor(e=Fd,r=Rd){this.dbName=e;this.storeName=r}get isSupported(){return!!qa()}async persist(e){if(!this.isSupported)return;let r=e.validate(),n={...r,key:ri(e.name,r.checksum),name:e.name,size:e.size,persistedAt:Date.now(),entries:Bd(r.entries)},s=await kn(this.dbName,this.storeName);return await On(s,this.storeName,"readwrite",o=>o.put(n)),s.close(),n}async find(e,r){if(!this.isSupported)return;let n=await kn(this.dbName,this.storeName),s=r!==void 0?ri(e,r):void 0,o=await On(n,this.storeName,"readonly",i=>s?i.get(s):i.getAll());if(n.close(),!!o){if(Array.isArray(o)){let i=se(e),a=o.filter(c=>se(c.name)===i);return a.length===0?void 0:a.sort((c,l)=>l.persistedAt-c.persistedAt)[0]}return o}}async remove(e,r){if(!this.isSupported)return!1;let n=await kn(this.dbName,this.storeName),s=r!==void 0?ri(e,r):void 0,o=await On(n,this.storeName,"readwrite",i=>{if(s)return i.delete(s);let a=`${se(e)}:`;return i.delete(IDBKeyRange.bound(a,`${a}\uFFFF`,!1,!0))});return n.close(),typeof o=="number"?o>0:!0}async clear(){if(!this.isSupported)return;let e=await kn(this.dbName,this.storeName);await On(e,this.storeName,"readwrite",r=>r.clear()),e.close()}async list(){if(!this.isSupported)return[];let e=await kn(this.dbName,this.storeName),r=await On(e,this.storeName,"readonly",n=>n.getAll());return e.close(),r.sort((n,s)=>s.persistedAt-n.persistedAt)}};var Qt=class extends Error{constructor(r,n){super(n??`Missing dependencies: ${r.join(", ")}`);this.missing=r;this.name="AssetDependencyError"}},Dn=class{constructor(){this.nodes=new Map}register(e,r=[]){let n=this.nodes.get(e)??{dependencies:new Set,loaded:!1};r.forEach(s=>n.dependencies.add(s)),this.nodes.set(e,n),r.forEach(s=>{this.nodes.has(s)||this.nodes.set(s,{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 Qt(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 s of r.dependencies)this.nodes.get(s)?.loaded||n.push(s);return n}},Gs=class{constructor(e,r={}){this.vfs=e;this.textures=new lr({capacity:r.textureCacheCapacity??128}),this.audio=new Er(e,{cacheSize:r.audioCacheSize??64}),this.dependencyTracker=r.dependencyTracker??new Dn,this.md2=new ir(e),this.md3=new ar(e),this.sprite=new cr(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),s=r.map(a=>this.makeKey("texture",a));this.dependencyTracker.register(n,s);let o=this.dependencyTracker.missingDependencies(n);if(o.length>0)throw new Qt(o,`Asset ${n} is missing dependencies: ${o.join(", ")}`);let i=await this.md2.load(e);return this.dependencyTracker.markLoaded(n),i}async loadMd3Model(e,r=[]){let n=this.makeKey("model",e),s=r.map(a=>this.makeKey("texture",a));this.dependencyTracker.register(n,s);let o=this.dependencyTracker.missingDependencies(n);if(o.length>0)throw new Qt(o,`Asset ${n} is missing dependencies: ${o.join(", ")}`);let i=await this.md3.load(e);return this.dependencyTracker.markLoaded(n),i}async loadSprite(e){let r=this.makeKey("sprite",e);this.dependencyTracker.register(r);let n=await this.sprite.load(e);return this.dependencyTracker.markLoaded(r),n}resetForLevelChange(){this.textures.clear(),this.audio.clearAll(),this.dependencyTracker.reset()}makeKey(e,r){return`${e}:${se(r)}`}};var ni=32,Ws=(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))(Ws||{}),$a=-1,Xs=0,ja=1,Qa=2,Ja=3,Pr=80,Za=.003;function Jt(t){return t===3?t*.001:t*5e-4}function Ks(t){let e=Jt(t);return e<=0?Number.POSITIVE_INFINITY:80+1/e}var Ys=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 qs(t){let e=t.getContext(),r=e.createGain();r.gain.value=1;let n=e.createDynamicsCompressor(),s=e.createBiquadFilter?.();return s?(s.type="lowpass",s.frequency.value=2e4,s.Q.value=.707,r.connect(s),s.connect(n)):r.connect(n),n.connect(e.destination),{context:e,master:r,compressor:n,filter:s}}var $s=class{constructor(e=new sr){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 js=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(o=>this.normalize(o)))],n={loaded:[],skipped:[],missing:[],errors:{}},s=this.contextController.getContext();for(let o of r)try{let i=this.registry.find(o);if(i!==void 0&&this.registry.has(i)){n.skipped.push(o);continue}if(!this.vfs.stat(o)){n.missing.push(o);continue}let l=(await this.vfs.readFile(o)).slice().buffer,d=await this.decodeAudio(s,l);this.registry.register(o,d),n.loaded.push(o)}catch(i){let a=i instanceof Error?i:new Error(String(i));n.errors[o]=a}return n}normalize(e){let r=se(e.replace(/^\//,""));return r.startsWith(this.soundRoot)?r:se(`${this.soundRoot}${r}`)}};var kd=7,Nn=t=>t&kd;function Qs(t){return Array.from({length:32},()=>({entnum:0,entchannel:0,endTimeMs:0,isPlayer:!1,active:!1})).map(e=>({...e,isPlayer:e.entnum===t}))}function Js(t,e,r,n){if(r<0)throw new Error("pickChannel: entchannel must be non-negative");let s=Nn(r),o=-1,i=Number.POSITIVE_INFINITY;for(let a=0;a<t.length;a+=1){let c=t[a],l=Nn(c.entchannel);if(s!==0&&c.entnum===e&&l===s){o=a;break}if(c.active&&c.entnum===n.playerEntity&&e!==n.playerEntity)continue;let d=c.endTimeMs-n.nowMs;(o===-1||d<i)&&(i=d,o=a)}return o===-1?void 0:o}function Zs(t,e,r,n,s){if(s)return{left:r,right:r,distanceComponent:0};let o=Ni(t,e.origin),i=vo(o),a=Ve(o),c=i-80;c<0&&(c=0),c*=Jt(n);let l=bo(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 eo=class{constructor(e){this.activeSources=new Map;this.contextController=e.context,this.registry=e.registry,this.playerEntity=e.playerEntity,this.channels=Qs(e.playerEntity),this.listener=e.listener??{origin:Di,right:{x:1,y:0,z:0}},this.sfxVolume=e.sfxVolume??1,this.masterVolume=e.masterVolume??1,this.resolveOcclusion=e.resolveOcclusion,this.graph=qs(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,s=n.currentTime*1e3,o=Js(this.channels,e.entity,e.channel,{nowMs:s,playerEntity:this.playerEntity});if(o===void 0)return;let i=this.activeSources.get(o);i&&(i.source.onended=null,i.source.stop(),this.activeSources.delete(o));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=ec(u?.gainScale??1),f=this.resolveOcclusion?this.createOcclusionFilter(n,u?.lowpassHz??2e4):void 0;this.applyOriginToPanner(d,c);let p=e.entity===this.playerEntity,y=Zs(c,this.listener,e.volume,e.attenuation,p),g=(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=g*m;let S=n.currentTime+(e.timeOffsetMs??0)/1e3,b=(e.looping?Number.POSITIVE_INFINITY:r.duration*1e3)+S*1e3;a.connect(d),f?(d.connect(f),f.connect(l)):d.connect(l),l.connect(this.graph.master),a.start(S),a.onended=()=>{this.channels[o].active=!1,this.activeSources.delete(o)};let A={channelIndex:o,entnum:e.entity,entchannel:Nn(e.channel),endTimeMs:b,source:a,panner:d,gain:l,baseGain:g,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[o]={entnum:e.entity,entchannel:Nn(e.channel),endTimeMs:b,isPlayer:e.entity===this.playerEntity,active:!0},this.activeSources.set(o,A),A}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 s=this.resolveOcclusion(this.listener,r,n.attenuation);this.applyOcclusion(n,s)}}positionedSound(e,r,n,s){return this.play({entity:0,channel:0,soundIndex:r,volume:n,attenuation:s,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=Ks(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=si(r,10,2e4),n}applyOcclusion(e,r){let n=ec(r?.gainScale??1);if(e.gain.gain.value=e.baseGain*n,e.occlusion?.filter){let s=r?.lowpassHz??2e4;e.occlusion.filter.frequency.value=si(s,10,2e4)}e.occlusion?(e.occlusion.scale=n,e.occlusion.lowpassHz=r?.lowpassHz):r&&(e.occlusion={scale:n,lowpassHz:r.lowpassHz})}},si=(t,e,r)=>Math.min(r,Math.max(e,t)),ec=t=>si(t,0,1);var to=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 s=await this.resolveSource(e),o=this.createElement();o.src=s,o.loop=r,o.volume=this.volume,o.currentTime=0,o.load(),await o.play(),this.element=o,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 ro=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,s,o,i){this.system.play({entity:e,channel:r,soundIndex:n,volume:s,attenuation:o,timeOffsetMs:i})}positioned_sound(e,r,n,s){this.system.positionedSound(e,r,n,s)}loop_sound(e,r,n,s,o){this.system.play({entity:e,channel:r,soundIndex:n,volume:s,attenuation:o,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 Od(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 Dd(t,e,r,n){for(let s of e){let o=t.getExtension(s);if(!o)throw new Error(`Missing required WebGL extension: ${s}`);n.set(s,o)}for(let s of r){let o=t.getExtension(s);o&&n.set(s,o)}}function tc(t,e={}){let{contextAttributes:r,requiredExtensions:n=[],optionalExtensions:s=[]}=e,o=t.getContext("webgl2",r??{antialias:!0});if(!o)throw new Error("WebGL2 not supported or failed to initialize");Od(o);let i=new Map;Dd(o,n,s,i);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:o,extensions:i,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(),i.clear()}}}function rc(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 o=t.getShaderInfoLog(n)??"Unknown shader compile failure";throw t.deleteShader(n),new Error(o)}return n}function Nd(t,e,r,n){let s=t.createProgram();if(!s)throw new Error("Failed to allocate shader program");if(t.attachShader(s,e),t.attachShader(s,r),n)for(let[i,a]of Object.entries(n))t.bindAttribLocation(s,a,i);if(t.linkProgram(s),!t.getProgramParameter(s,t.LINK_STATUS)){let i=t.getProgramInfoLog(s)??"Unknown shader link failure";throw t.deleteProgram(s),new Error(i)}return s}var be=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 s=rc(e,e.VERTEX_SHADER,r.vertex),o=rc(e,e.FRAGMENT_SHADER,r.fragment);try{let i=Nd(e,s,o,n);return new t(e,i)}finally{e.deleteShader(s),e.deleteShader(o)}}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 nc(t,e,r){return be.create(t,e,r)}var ve=class{constructor(e,r=e.STATIC_DRAW,n){this.gl=e,this.target=n??e.ARRAY_BUFFER;let s=e.createBuffer();if(!s)throw new Error("Failed to allocate buffer");this.buffer=s,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)}},Ne=class extends ve{constructor(e,r=e.STATIC_DRAW){super(e,r,e.ELEMENT_ARRAY_BUFFER)}},_e=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)}},Ir=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,s,o,i,a,c){this.bind(),this.gl.texImage2D(this.target,e,r,n,s,o,i,a,c)}dispose(){this.gl.deleteTexture(this.texture)}},zr=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,s,o,i,a,c,l){this.bind(),this.gl.texImage2D(e,r,n,s,o,i,a,c,l)}dispose(){this.gl.deleteTexture(this.texture)}},no=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 ii=4,oi=7*ii,ai=[{index:0,size:3,type:5126,stride:oi,offset:0},{index:1,size:2,type:5126,stride:oi,offset:3*ii},{index:2,size:2,type:5126,stride:oi,offset:5*ii}];function Hd(t,e){return{width:t,height:t,padding:e,data:new Uint8Array(t*t*4),cursorX:0,cursorY:0,rowHeight:0}}function Vd(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 Ud(t,e,r){let n=Vd(r),s=t.width*4,o=e.x+t.padding,i=e.y+t.padding,a=0;for(let c=0;c<r.height;c++){let l=(i+c)*s+o*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 Gd(t,e,r){let n=e.width+r.lightmapPadding*2,s=e.height+r.lightmapPadding*2;if(n>r.atlasSize||s>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+s>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,s),{placement:c,atlas:a}}let o=Hd(r.atlasSize,r.lightmapPadding);t.push(o);let i={atlasIndex:t.length-1,x:0,y:0,width:e.width,height:e.height};return o.cursorX=n+r.lightmapPadding,o.rowHeight=s,{placement:i,atlas:o}}function so(t){return t instanceof Float32Array?t:new Float32Array(t)}function Wd(t,e){if(!t){let n=new Uint16Array(e);for(let s=0;s<e;s++)n[s]=s;return n}return t instanceof Uint16Array?t:new Uint16Array(t)}function Xd(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 Kd(t,e){let r=so(t.vertices),n=so(t.textureCoords),s=e?Xd(so(t.lightmapCoords??t.textureCoords),e):so(t.lightmapCoords??new Float32Array(n.length)),o=r.length/3;if(n.length/2!==o)throw new Error("Texture coordinates count mismatch");if(s.length/2!==o)throw new Error("Lightmap coordinates count mismatch");let i=new Float32Array(o*7);for(let a=0;a<o;a++){let c=a*3,l=a*2,d=a*7;i[d]=r[c],i[d+1]=r[c+1],i[d+2]=r[c+2],i[d+3]=n[l],i[d+4]=n[l+1],i[d+5]=s[l],i[d+6]=s[l+1]}return i}function sc(t){let e=[];for(let r=0;r<t.faces.length;r++){let n=t.faces[r];if(n.texInfo<0)continue;let s=t.texInfo[n.texInfo],o=[],i=[],a=[];for(let m=0;m<n.numEdges;m++){let f=t.surfEdges[n.firstEdge+m],p=t.edges[Math.abs(f)],y=f>=0?p.vertices[0]:p.vertices[1],h=t.vertices[y];o.push(h[0],h[1],h[2]);let g=h[0]*s.s[0]+h[1]*s.s[1]+h[2]*s.s[2]+s.sOffset,S=h[0]*s.t[0]+h[1]*s.t[1]+h[2]*s.t[2]+s.tOffset;i.push(g,S),a.push(g,S)}let c=[],l=o.length/3;for(let m=1;m<l-1;m++)c.push(0,m,m+1);let d,u=t.lightMapInfo[r];if(u){let m=1/0,f=-1/0,p=1/0,y=-1/0;for(let v=0;v<i.length;v+=2){let M=i[v],_=i[v+1];M<m&&(m=M),M>f&&(f=M),_<p&&(p=_),_>y&&(y=_)}let h=Math.floor(m/16),g=Math.floor(p/16),S=Math.ceil(f/16)-h+1,b=Math.ceil(y/16)-g+1,A=is(n,t.lightMaps,u);if(A&&A.length===S*b*3){d={width:S,height:b,samples:A};for(let v=0;v<a.length;v+=2)a[v]=i[v]/16-h+.5,a[v+1]=i[v+1]/16-g+.5}}e.push({vertices:new Float32Array(o),textureCoords:new Float32Array(i),lightmapCoords:new Float32Array(a),indices:new Uint16Array(c),texture:s.texture,surfaceFlags:s.flags,lightmap:d})}return e}function oc(t,e,r={}){let n={atlasSize:r.atlasSize??1024,lightmapPadding:r.lightmapPadding??1},s=[],o=new Map;e.forEach((c,l)=>{if(!c.lightmap)return;let{placement:d,atlas:u}=Gd(s,c.lightmap,n);Ud(u,d,c.lightmap),o.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 i=s.map(c=>{let l=new Ir(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=o.get(l),u=Kd(c,d),m=Wd(c.indices,u.length/7),f=new ve(t,t.STATIC_DRAW,t.ARRAY_BUFFER);f.upload(u);let p=new Ne(t,t.STATIC_DRAW);p.upload(m);let y=new _e(t);return y.configureAttributes(ai,f),{vao:y,vertexBuffer:f,indexBuffer:p,indexCount:m.length,vertexCount:u.length/7,texture:c.texture,surfaceFlags:c.surfaceFlags??Or,lightmap:d,vertexData:u,indexData:m}}),lightmaps:i}}function Cr(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 s=1/n;return{normal:{x:e.x*s,y:e.y*s,z:e.z*s},distance:r*s}}function ic(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],s=t[12],o=t[1],i=t[5],a=t[9],c=t[13],l=t[2],d=t[6],u=t[10],m=t[14],f=t[3],p=t[7],y=t[11],h=t[15];return[Cr({normal:{x:f+e,y:p+r,z:y+n},distance:h+s}),Cr({normal:{x:f-e,y:p-r,z:y-n},distance:h-s}),Cr({normal:{x:f+o,y:p+i,z:y+a},distance:h+c}),Cr({normal:{x:f-o,y:p-i,z:y-a},distance:h-c}),Cr({normal:{x:f+l,y:p+d,z:y+u},distance:h+m}),Cr({normal:{x:f-l,y:p-d,z:y-u},distance:h-m})]}function Yd(t,e){return t.normal.x*e.x+t.normal.y*e.y+t.normal.z*e.z+t.distance}function Hn(t,e,r){for(let n of r){let s=n.normal.x>=0?e.x:t.x,o=n.normal.y>=0?e.y:t.y,i=n.normal.z>=0?e.z:t.z;if(Yd(n,{x:s,y:o,z:i})<0)return!1}return!0}function ac(t){return t<0}function cc(t){return-t-1}function lc(t,e){return t.normal[0]*e.x+t.normal[1]*e.y+t.normal[2]*e.z-t.dist}function qd(t,e,r){if(!t||e<0||r<0)return!0;let n=Math.ceil(t.numClusters/8),s=t.clusters[e].pvs,o=Math.floor(r/8),i=1<<r%8;return o<0||o>=n?!1:(s[o]&i)!==0}function $d(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 Hn(r,n,e)}function li(t,e){let r=0;for(;r>=0;){let n=t.nodes[r],s=t.planes[n.planeIndex],i=lc(s,e)>=0?0:1,a=n.children[i];if(ac(a))return cc(a);r=a}return-1}function jd(t,e){let r=t.leafs[e],n=[];for(let s=0;s<r.numLeafFaces;s+=1)n.push(t.leafLists.leafFaces[e][s]);return n}function ci(t,e,r,n,s,o,i){if(ac(e)){let m=cc(e),f=t.leafs[m];if(!qd(t.visibility,s,f.cluster)||!$d(f,n))return;let p={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=p.x-r.x,h=p.y-r.y,g=p.z-r.z,S=-(y*y+h*h+g*g);for(let b of jd(t,m))i.has(b)||(i.add(b),o.push({faceIndex:b,leafIndex:m,sortKey:S}));return}let a=t.nodes[e],c=t.planes[a.planeIndex],l=lc(c,r),d=l>=0?a.children[0]:a.children[1],u=l>=0?a.children[1]:a.children[0];Hn({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)&&(ci(t,d,r,n,s,o,i),ci(t,u,r,n,s,o,i))}function dc(t,e,r){let n=li(t,e),s=n>=0?t.leafs[n].cluster:-1,o=[];return ci(t,0,e,r,s,o,new Set),o}var di=`#version 300 es
|
|
142
142
|
precision highp float;
|
|
143
143
|
|
|
144
144
|
layout(location = 0) in vec3 a_position;
|
|
@@ -160,7 +160,7 @@ void main() {
|
|
|
160
160
|
v_texCoord = applyScroll(a_texCoord, u_texScroll);
|
|
161
161
|
v_lightmapCoord = applyScroll(a_lightmapCoord, u_lightmapScroll);
|
|
162
162
|
gl_Position = u_modelViewProjection * vec4(a_position, 1.0);
|
|
163
|
-
}`,
|
|
163
|
+
}`,ui=`#version 300 es
|
|
164
164
|
precision highp float;
|
|
165
165
|
|
|
166
166
|
in vec2 v_texCoord;
|
|
@@ -197,7 +197,7 @@ void main() {
|
|
|
197
197
|
}
|
|
198
198
|
|
|
199
199
|
o_color = vec4(base.rgb, base.a * u_alpha);
|
|
200
|
-
}`,
|
|
200
|
+
}`,uc=[0,255,255,255];function mi(t=uc,e=[]){let r=new Float32Array(4);for(let n=0;n<4;n+=1){let s=t[n]??255;if(s===255){r[n]=0;continue}let o=e[s];r[n]=o!==void 0?o:1}return r}function Qd(t){return[-(t*.25%1),0]}function fi(t=Or,e=0){let r=(t&Yi)!==0,n=(t&Wi)!==0,s=(t&Gi)!==0,o=(t&Xi)!==0,i=(t&Ki)!==0,a=o?.33:i?.66:1,c=o||i,l=!c&&!s,d=r?Qd(e):[0,0];return{alpha:a,blend:c,depthWrite:l,warp:n,flowOffset:d,sky:s}}var oo=class{constructor(e){this.gl=e,this.program=be.create(e,{vertex:di,fragment:ui},{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=uc,styleValues:s=[],diffuseSampler:o=0,lightmapSampler:i,surfaceFlags:a=Or,timeSeconds:c=0}=e,l=fi(a,c),d=mi(n,s);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&&i!==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,o),this.gl.uniform1i(this.uniformLightmap,i??0),l}dispose(){this.program.dispose()}};function mc(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 fc=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]),hi=`#version 300 es
|
|
201
201
|
precision highp float;
|
|
202
202
|
|
|
203
203
|
layout(location = 0) in vec3 a_position;
|
|
@@ -212,7 +212,7 @@ void main() {
|
|
|
212
212
|
dir.xy += u_scroll;
|
|
213
213
|
v_direction = dir;
|
|
214
214
|
gl_Position = u_viewProjectionNoTranslation * vec4(a_position, 1.0);
|
|
215
|
-
}`,
|
|
215
|
+
}`,pi=`#version 300 es
|
|
216
216
|
precision highp float;
|
|
217
217
|
|
|
218
218
|
in vec3 v_direction;
|
|
@@ -222,7 +222,7 @@ out vec4 o_color;
|
|
|
222
222
|
|
|
223
223
|
void main() {
|
|
224
224
|
o_color = texture(u_skybox, v_direction);
|
|
225
|
-
}`,
|
|
225
|
+
}`,io=class{constructor(e){this.gl=e,this.program=be.create(e,{vertex:hi,fragment:pi},{a_position:0}),this.vao=new _e(e),this.vbo=new ve(e,e.STATIC_DRAW),this.vbo.upload(fc,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 zr(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:s=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,s),this.cubemap.bind(s),this.vao.bind()}draw(){this.gl.drawArrays(this.gl.TRIANGLES,0,fc.length/3)}dispose(){this.vbo.dispose(),this.vao.dispose(),this.cubemap.dispose(),this.program.dispose()}};function hc(t){let e=new Float32Array(t);return e[12]=0,e[13]=0,e[14]=0,e}function pc(t,e=[.01,.02]){let[r,n]=e;return[r*t,n*t]}var gi=`#version 300 es
|
|
226
226
|
precision highp float;
|
|
227
227
|
|
|
228
228
|
layout(location = 0) in vec3 a_position;
|
|
@@ -240,7 +240,7 @@ void main() {
|
|
|
240
240
|
v_light = max(dot(normal, normalize(u_lightDir)), 0.0);
|
|
241
241
|
v_texCoord = a_texCoord;
|
|
242
242
|
gl_Position = u_modelViewProjection * vec4(a_position, 1.0);
|
|
243
|
-
}`,
|
|
243
|
+
}`,xi=`#version 300 es
|
|
244
244
|
precision highp float;
|
|
245
245
|
|
|
246
246
|
in vec2 v_texCoord;
|
|
@@ -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 kd(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 ls(t,e,r){return t+(e-t)*r}function cc(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 Hd(t,e,r){return[t/r.skinWidth,1-e/r.skinHeight]}function fs(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:Hd(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 ms(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],f=a.vertices[l.vertexIndex];if(!u||!f)throw new Error("MD2 vertex index out of range for frame");let m=cc(u.position,f.position,i),p=kd(cc(u.normal,f.normal,i)),y=d*8;c[y]=m.x,c[y+1]=m.y,c[y+2]=m.z,c[y+3]=p.x,c[y+4]=p.y,c[y+5]=p.z,c[y+6]=l.texCoord[0],c[y+7]=l.texCoord[1]}),c}var ri=class{constructor(e,r,n){this.gl=e,this.geometry=fs(r),this.vertexBuffer=new xe(e,e.STATIC_DRAW),this.indexBuffer=new De(e,e.STATIC_DRAW),this.vertexArray=new Me(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=ms(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()}},ni=class{constructor(e){this.gl=e,this.program=ge.create(e,{vertex:ds,fragment:us},{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 q=1e-6,ke=typeof Float32Array<"u"?Float32Array:Array,hs=Math.random;function oi(t){return t>=0?Math.round(t):t%.5===0?Math.floor(t):Math.round(t)}var g1=Math.PI/180,x1=180/Math.PI;var ie={};di(ie,{add:()=>_u,adjoint:()=>Yd,clone:()=>Vd,copy:()=>Ud,create:()=>Nd,decompose:()=>du,determinant:()=>qd,equals:()=>Iu,exactEquals:()=>Eu,frob:()=>Au,fromQuat:()=>mu,fromQuat2:()=>au,fromRotation:()=>nu,fromRotationTranslation:()=>fc,fromRotationTranslationScale:()=>uu,fromRotationTranslationScaleOrigin:()=>fu,fromScaling:()=>ru,fromTranslation:()=>tu,fromValues:()=>Gd,fromXRotation:()=>ou,fromYRotation:()=>iu,fromZRotation:()=>su,frustum:()=>hu,getRotation:()=>lu,getScaling:()=>mc,getTranslation:()=>cu,identity:()=>dc,invert:()=>Kd,lookAt:()=>vu,mul:()=>zu,multiply:()=>uc,multiplyScalar:()=>wu,multiplyScalarAndAdd:()=>Lu,ortho:()=>xu,orthoNO:()=>pc,orthoZO:()=>bu,perspective:()=>pu,perspectiveFromFieldOfView:()=>gu,perspectiveNO:()=>hc,perspectiveZO:()=>yu,rotate:()=>Qd,rotateX:()=>Jd,rotateY:()=>Zd,rotateZ:()=>eu,scale:()=>$d,set:()=>Wd,str:()=>Mu,sub:()=>Pu,subtract:()=>yc,targetTo:()=>Su,translate:()=>jd,transpose:()=>Xd});function Nd(){var t=new ke(16);return ke!=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 Vd(t){var e=new ke(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 Ud(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 Gd(t,e,r,n,o,i,s,a,c,l,d,u,f,m,p,y){var h=new ke(16);return h[0]=t,h[1]=e,h[2]=r,h[3]=n,h[4]=o,h[5]=i,h[6]=s,h[7]=a,h[8]=c,h[9]=l,h[10]=d,h[11]=u,h[12]=f,h[13]=m,h[14]=p,h[15]=y,h}function Wd(t,e,r,n,o,i,s,a,c,l,d,u,f,m,p,y,h){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]=f,t[12]=m,t[13]=p,t[14]=y,t[15]=h,t}function dc(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 Xd(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 Kd(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],f=e[10],m=e[11],p=e[12],y=e[13],h=e[14],g=e[15],S=r*a-n*s,b=r*c-o*s,M=r*l-i*s,v=n*c-o*a,A=n*l-i*a,_=o*l-i*c,L=d*y-u*p,F=d*h-f*p,w=d*g-m*p,H=u*h-f*y,U=u*g-m*y,V=f*g-m*h,C=S*V-b*U+M*H+v*w-A*F+_*L;return C?(C=1/C,t[0]=(a*V-c*U+l*H)*C,t[1]=(o*U-n*V-i*H)*C,t[2]=(y*_-h*A+g*v)*C,t[3]=(f*A-u*_-m*v)*C,t[4]=(c*w-s*V-l*F)*C,t[5]=(r*V-o*w+i*F)*C,t[6]=(h*M-p*_-g*b)*C,t[7]=(d*_-f*M+m*b)*C,t[8]=(s*U-a*w+l*L)*C,t[9]=(n*w-r*U-i*L)*C,t[10]=(p*A-y*M+g*S)*C,t[11]=(u*M-d*A-m*S)*C,t[12]=(a*F-s*H-c*L)*C,t[13]=(r*H-n*F+o*L)*C,t[14]=(y*b-p*v-h*S)*C,t[15]=(d*v-u*b+f*S)*C,t):null}function Yd(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],f=e[10],m=e[11],p=e[12],y=e[13],h=e[14],g=e[15],S=r*a-n*s,b=r*c-o*s,M=r*l-i*s,v=n*c-o*a,A=n*l-i*a,_=o*l-i*c,L=d*y-u*p,F=d*h-f*p,w=d*g-m*p,H=u*h-f*y,U=u*g-m*y,V=f*g-m*h;return t[0]=a*V-c*U+l*H,t[1]=o*U-n*V-i*H,t[2]=y*_-h*A+g*v,t[3]=f*A-u*_-m*v,t[4]=c*w-s*V-l*F,t[5]=r*V-o*w+i*F,t[6]=h*M-p*_-g*b,t[7]=d*_-f*M+m*b,t[8]=s*U-a*w+l*L,t[9]=n*w-r*U-i*L,t[10]=p*A-y*M+g*S,t[11]=u*M-d*A-m*S,t[12]=a*F-s*H-c*L,t[13]=r*H-n*F+o*L,t[14]=y*b-p*v-h*S,t[15]=d*v-u*b+f*S,t}function qd(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],f=t[11],m=t[12],p=t[13],y=t[14],h=t[15],g=e*s-r*i,S=e*a-n*i,b=r*a-n*s,M=l*p-d*m,v=l*y-u*m,A=d*y-u*p,_=e*A-r*v+n*M,L=i*A-s*v+a*M,F=l*b-d*S+u*g,w=m*b-p*S+y*g;return c*_-o*L+h*F-f*w}function uc(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],f=e[9],m=e[10],p=e[11],y=e[12],h=e[13],g=e[14],S=e[15],b=r[0],M=r[1],v=r[2],A=r[3];return t[0]=b*n+M*a+v*u+A*y,t[1]=b*o+M*c+v*f+A*h,t[2]=b*i+M*l+v*m+A*g,t[3]=b*s+M*d+v*p+A*S,b=r[4],M=r[5],v=r[6],A=r[7],t[4]=b*n+M*a+v*u+A*y,t[5]=b*o+M*c+v*f+A*h,t[6]=b*i+M*l+v*m+A*g,t[7]=b*s+M*d+v*p+A*S,b=r[8],M=r[9],v=r[10],A=r[11],t[8]=b*n+M*a+v*u+A*y,t[9]=b*o+M*c+v*f+A*h,t[10]=b*i+M*l+v*m+A*g,t[11]=b*s+M*d+v*p+A*S,b=r[12],M=r[13],v=r[14],A=r[15],t[12]=b*n+M*a+v*u+A*y,t[13]=b*o+M*c+v*f+A*h,t[14]=b*i+M*l+v*m+A*g,t[15]=b*s+M*d+v*p+A*S,t}function jd(t,e,r){var n=r[0],o=r[1],i=r[2],s,a,c,l,d,u,f,m,p,y,h,g;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],f=e[6],m=e[7],p=e[8],y=e[9],h=e[10],g=e[11],t[0]=s,t[1]=a,t[2]=c,t[3]=l,t[4]=d,t[5]=u,t[6]=f,t[7]=m,t[8]=p,t[9]=y,t[10]=h,t[11]=g,t[12]=s*n+d*o+p*i+e[12],t[13]=a*n+u*o+y*i+e[13],t[14]=c*n+f*o+h*i+e[14],t[15]=l*n+m*o+g*i+e[15]),t}function $d(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 Qd(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,f,m,p,y,h,g,S,b,M,v,A,_,L,F,w,H,U,V,C,$;return a<q?null:(a=1/a,o*=a,i*=a,s*=a,c=Math.sin(r),l=Math.cos(r),d=1-l,u=e[0],f=e[1],m=e[2],p=e[3],y=e[4],h=e[5],g=e[6],S=e[7],b=e[8],M=e[9],v=e[10],A=e[11],_=o*o*d+l,L=i*o*d+s*c,F=s*o*d-i*c,w=o*i*d-s*c,H=i*i*d+l,U=s*i*d+o*c,V=o*s*d+i*c,C=i*s*d-o*c,$=s*s*d+l,t[0]=u*_+y*L+b*F,t[1]=f*_+h*L+M*F,t[2]=m*_+g*L+v*F,t[3]=p*_+S*L+A*F,t[4]=u*w+y*H+b*U,t[5]=f*w+h*H+M*U,t[6]=m*w+g*H+v*U,t[7]=p*w+S*H+A*U,t[8]=u*V+y*C+b*$,t[9]=f*V+h*C+M*$,t[10]=m*V+g*C+v*$,t[11]=p*V+S*C+A*$,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t)}function Jd(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],f=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+f*n,t[8]=l*o-i*n,t[9]=d*o-s*n,t[10]=u*o-a*n,t[11]=f*o-c*n,t}function Zd(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],f=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-f*n,t[8]=i*n+l*o,t[9]=s*n+d*o,t[10]=a*n+u*o,t[11]=c*n+f*o,t}function eu(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],f=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+f*n,t[4]=l*o-i*n,t[5]=d*o-s*n,t[6]=u*o-a*n,t[7]=f*o-c*n,t}function tu(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 ru(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 nu(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<q?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 ou(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 iu(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 su(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 fc(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,f=n*l,m=o*c,p=o*l,y=i*l,h=s*a,g=s*c,S=s*l;return t[0]=1-(m+y),t[1]=u+S,t[2]=f-g,t[3]=0,t[4]=u-S,t[5]=1-(d+y),t[6]=p+h,t[7]=0,t[8]=f+g,t[9]=p-h,t[10]=1-(d+m),t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t}function au(t,e){var r=new ke(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),fc(t,e,r),t}function cu(t,e){return t[0]=e[12],t[1]=e[13],t[2]=e[14],t}function mc(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 lu(t,e){var r=new ke(3);mc(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,f=e[8]*n,m=e[9]*o,p=e[10]*i,y=s+d+p,h=0;return y>0?(h=Math.sqrt(y+1)*2,t[3]=.25*h,t[0]=(u-m)/h,t[1]=(f-c)/h,t[2]=(a-l)/h):s>d&&s>p?(h=Math.sqrt(1+s-d-p)*2,t[3]=(u-m)/h,t[0]=.25*h,t[1]=(a+l)/h,t[2]=(f+c)/h):d>p?(h=Math.sqrt(1+d-s-p)*2,t[3]=(f-c)/h,t[0]=(a+l)/h,t[1]=.25*h,t[2]=(u+m)/h):(h=Math.sqrt(1+p-s-d)*2,t[3]=(a-l)/h,t[0]=(f+c)/h,t[1]=(u+m)/h,t[2]=.25*h),t}function du(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],f=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+f*f);var m=1/r[0],p=1/r[1],y=1/r[2],h=o*m,g=i*p,S=s*y,b=a*m,M=c*p,v=l*y,A=d*m,_=u*p,L=f*y,F=h+M+L,w=0;return F>0?(w=Math.sqrt(F+1)*2,t[3]=.25*w,t[0]=(v-_)/w,t[1]=(A-S)/w,t[2]=(g-b)/w):h>M&&h>L?(w=Math.sqrt(1+h-M-L)*2,t[3]=(v-_)/w,t[0]=.25*w,t[1]=(g+b)/w,t[2]=(A+S)/w):M>L?(w=Math.sqrt(1+M-h-L)*2,t[3]=(A-S)/w,t[0]=(g+b)/w,t[1]=.25*w,t[2]=(v+_)/w):(w=Math.sqrt(1+L-h-M)*2,t[3]=(g-b)/w,t[0]=(A+S)/w,t[1]=(v+_)/w,t[2]=.25*w),t}function uu(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,f=o*l,m=o*d,p=i*l,y=i*d,h=s*d,g=a*c,S=a*l,b=a*d,M=n[0],v=n[1],A=n[2];return t[0]=(1-(p+h))*M,t[1]=(f+b)*M,t[2]=(m-S)*M,t[3]=0,t[4]=(f-b)*v,t[5]=(1-(u+h))*v,t[6]=(y+g)*v,t[7]=0,t[8]=(m+S)*A,t[9]=(y-g)*A,t[10]=(1-(u+p))*A,t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t}function fu(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,f=i*l,m=i*d,p=i*u,y=s*d,h=s*u,g=a*u,S=c*l,b=c*d,M=c*u,v=n[0],A=n[1],_=n[2],L=o[0],F=o[1],w=o[2],H=(1-(y+g))*v,U=(m+M)*v,V=(p-b)*v,C=(m-M)*A,$=(1-(f+g))*A,be=(h+S)*A,Ft=(p+b)*_,kn=(h-S)*_,Pr=(1-(f+y))*_;return t[0]=H,t[1]=U,t[2]=V,t[3]=0,t[4]=C,t[5]=$,t[6]=be,t[7]=0,t[8]=Ft,t[9]=kn,t[10]=Pr,t[11]=0,t[12]=r[0]+L-(H*L+C*F+Ft*w),t[13]=r[1]+F-(U*L+$*F+kn*w),t[14]=r[2]+w-(V*L+be*F+Pr*w),t[15]=1,t}function mu(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,f=o*s,m=o*a,p=o*c,y=i*s,h=i*a,g=i*c;return t[0]=1-u-p,t[1]=d+g,t[2]=f-h,t[3]=0,t[4]=d-g,t[5]=1-l-p,t[6]=m+y,t[7]=0,t[8]=f+h,t[9]=m-y,t[10]=1-l-u,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function hu(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 hc(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 pu=hc;function yu(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 gu(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 pc(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 xu=pc;function bu(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 vu(t,e,r,n){var o,i,s,a,c,l,d,u,f,m,p=e[0],y=e[1],h=e[2],g=n[0],S=n[1],b=n[2],M=r[0],v=r[1],A=r[2];return Math.abs(p-M)<q&&Math.abs(y-v)<q&&Math.abs(h-A)<q?dc(t):(d=p-M,u=y-v,f=h-A,m=1/Math.sqrt(d*d+u*u+f*f),d*=m,u*=m,f*=m,o=S*f-b*u,i=b*d-g*f,s=g*u-S*d,m=Math.sqrt(o*o+i*i+s*s),m?(m=1/m,o*=m,i*=m,s*=m):(o=0,i=0,s=0),a=u*s-f*i,c=f*o-d*s,l=d*i-u*o,m=Math.sqrt(a*a+c*c+l*l),m?(m=1/m,a*=m,c*=m,l*=m):(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]=f,t[11]=0,t[12]=-(o*p+i*y+s*h),t[13]=-(a*p+c*y+l*h),t[14]=-(d*p+u*y+f*h),t[15]=1,t)}function Su(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],f=s-r[2],m=d*d+u*u+f*f;m>0&&(m=1/Math.sqrt(m),d*=m,u*=m,f*=m);var p=c*f-l*u,y=l*d-a*f,h=a*u-c*d;return m=p*p+y*y+h*h,m>0&&(m=1/Math.sqrt(m),p*=m,y*=m,h*=m),t[0]=p,t[1]=y,t[2]=h,t[3]=0,t[4]=u*h-f*y,t[5]=f*p-d*h,t[6]=d*y-u*p,t[7]=0,t[8]=d,t[9]=u,t[10]=f,t[11]=0,t[12]=o,t[13]=i,t[14]=s,t[15]=1,t}function Mu(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 Au(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 _u(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 yc(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 wu(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 Lu(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 Eu(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 Iu(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],f=t[10],m=t[11],p=t[12],y=t[13],h=t[14],g=t[15],S=e[0],b=e[1],M=e[2],v=e[3],A=e[4],_=e[5],L=e[6],F=e[7],w=e[8],H=e[9],U=e[10],V=e[11],C=e[12],$=e[13],be=e[14],Ft=e[15];return Math.abs(r-S)<=q*Math.max(1,Math.abs(r),Math.abs(S))&&Math.abs(n-b)<=q*Math.max(1,Math.abs(n),Math.abs(b))&&Math.abs(o-M)<=q*Math.max(1,Math.abs(o),Math.abs(M))&&Math.abs(i-v)<=q*Math.max(1,Math.abs(i),Math.abs(v))&&Math.abs(s-A)<=q*Math.max(1,Math.abs(s),Math.abs(A))&&Math.abs(a-_)<=q*Math.max(1,Math.abs(a),Math.abs(_))&&Math.abs(c-L)<=q*Math.max(1,Math.abs(c),Math.abs(L))&&Math.abs(l-F)<=q*Math.max(1,Math.abs(l),Math.abs(F))&&Math.abs(d-w)<=q*Math.max(1,Math.abs(d),Math.abs(w))&&Math.abs(u-H)<=q*Math.max(1,Math.abs(u),Math.abs(H))&&Math.abs(f-U)<=q*Math.max(1,Math.abs(f),Math.abs(U))&&Math.abs(m-V)<=q*Math.max(1,Math.abs(m),Math.abs(V))&&Math.abs(p-C)<=q*Math.max(1,Math.abs(p),Math.abs(C))&&Math.abs(y-$)<=q*Math.max(1,Math.abs(y),Math.abs($))&&Math.abs(h-be)<=q*Math.max(1,Math.abs(h),Math.abs(be))&&Math.abs(g-Ft)<=q*Math.max(1,Math.abs(g),Math.abs(Ft))}var zu=uc,Pu=yc;var oe={};di(oe,{add:()=>Bu,angle:()=>o0,bezier:()=>$u,ceil:()=>Ou,clone:()=>Fu,copy:()=>Tu,create:()=>gc,cross:()=>Ku,dist:()=>f0,distance:()=>Mc,div:()=>u0,divide:()=>Sc,dot:()=>ps,equals:()=>c0,exactEquals:()=>a0,floor:()=>Du,forEach:()=>y0,fromValues:()=>Cu,hermite:()=>ju,inverse:()=>Wu,len:()=>h0,length:()=>xc,lerp:()=>Yu,max:()=>Hu,min:()=>ku,mul:()=>d0,multiply:()=>vc,negate:()=>Gu,normalize:()=>Xu,random:()=>Qu,rotateX:()=>t0,rotateY:()=>r0,rotateZ:()=>n0,round:()=>Nu,scale:()=>Vu,scaleAndAdd:()=>Uu,set:()=>Ru,slerp:()=>qu,sqrDist:()=>m0,sqrLen:()=>p0,squaredDistance:()=>Ac,squaredLength:()=>_c,str:()=>s0,sub:()=>l0,subtract:()=>bc,transformMat3:()=>Zu,transformMat4:()=>Ju,transformQuat:()=>e0,zero:()=>i0});function gc(){var t=new ke(3);return ke!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t}function Fu(t){var e=new ke(3);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function xc(t){var e=t[0],r=t[1],n=t[2];return Math.sqrt(e*e+r*r+n*n)}function Cu(t,e,r){var n=new ke(3);return n[0]=t,n[1]=e,n[2]=r,n}function Tu(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function Ru(t,e,r,n){return t[0]=e,t[1]=r,t[2]=n,t}function Bu(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t}function bc(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t}function vc(t,e,r){return t[0]=e[0]*r[0],t[1]=e[1]*r[1],t[2]=e[2]*r[2],t}function Sc(t,e,r){return t[0]=e[0]/r[0],t[1]=e[1]/r[1],t[2]=e[2]/r[2],t}function Ou(t,e){return t[0]=Math.ceil(e[0]),t[1]=Math.ceil(e[1]),t[2]=Math.ceil(e[2]),t}function Du(t,e){return t[0]=Math.floor(e[0]),t[1]=Math.floor(e[1]),t[2]=Math.floor(e[2]),t}function ku(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 Hu(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 Nu(t,e){return t[0]=oi(e[0]),t[1]=oi(e[1]),t[2]=oi(e[2]),t}function Vu(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t}function Uu(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 Mc(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 Ac(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 _c(t){var e=t[0],r=t[1],n=t[2];return e*e+r*r+n*n}function Gu(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t}function Wu(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t}function Xu(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 ps(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function Ku(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 Yu(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 qu(t,e,r,n){var o=Math.acos(Math.min(Math.max(ps(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 ju(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 $u(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,f=c*i;return t[0]=e[0]*l+r[0]*d+n[0]*u+o[0]*f,t[1]=e[1]*l+r[1]*d+n[1]*u+o[1]*f,t[2]=e[2]*l+r[2]*d+n[2]*u+o[2]*f,t}function Qu(t,e){e=e===void 0?1:e;var r=hs()*2*Math.PI,n=hs()*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 Ju(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 Zu(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 e0(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,f=n*c-o*a;return d=d+d,u=u+u,f=f+f,t[0]=a+s*d+o*f-i*u,t[1]=c+s*u+i*d-n*f,t[2]=l+s*f+n*u-o*d,t}function t0(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 r0(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 n0(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 o0(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&&ps(t,e)/c;return Math.acos(Math.min(Math.max(l,-1),1))}function i0(t){return t[0]=0,t[1]=0,t[2]=0,t}function s0(t){return"vec3("+t[0]+", "+t[1]+", "+t[2]+")"}function a0(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]}function c0(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)<=q*Math.max(1,Math.abs(r),Math.abs(i))&&Math.abs(n-s)<=q*Math.max(1,Math.abs(n),Math.abs(s))&&Math.abs(o-a)<=q*Math.max(1,Math.abs(o),Math.abs(a))}var l0=bc,d0=vc,u0=Sc,f0=Mc,m0=Ac,h0=xc,p0=_c,y0=(function(){var t=gc();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 ii=class{constructor(){this._position=oe.create();this._angles=oe.create();this._bobAngles=oe.create();this._bobOffset=oe.create();this._kickAngles=oe.create();this._rollAngle=0;this._fov=90;this._aspect=1;this._near=.1;this._far=1e3;this._viewMatrix=ie.create();this._projectionMatrix=ie.create();this._viewProjectionMatrix=ie.create();this._dirty=!0}get position(){return this._position}set position(e){oe.copy(this._position,e),this._dirty=!0}get angles(){return this._angles}set angles(e){oe.copy(this._angles,e),this._dirty=!0}get bobAngles(){return this._bobAngles}set bobAngles(e){oe.copy(this._bobAngles,e),this._dirty=!0}get kickAngles(){return this._kickAngles}set kickAngles(e){oe.copy(this._kickAngles,e),this._dirty=!0}get bobOffset(){return this._bobOffset}set bobOffset(e){oe.copy(this._bobOffset,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=ie.create();return ie.perspective(r,e*Zt,this._aspect,this._near,this._far),r}updateMatrices(){if(!this._dirty)return;ie.perspective(this._projectionMatrix,this._fov*Zt,this._aspect,this._near,this._far);let e=ie.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*Zt,s=n*Zt,a=o*Zt,c=ie.create();ie.identity(c),ie.rotateZ(c,c,-s),ie.rotateY(c,c,-i),ie.rotateX(c,c,-a);let l=ie.create();ie.multiply(l,e,c);let d=oe.add(oe.create(),this._position,this._bobOffset),u=oe.negate(oe.create(),d),f=oe.create();oe.transformMat4(f,u,c);let m=oe.fromValues(f[1]||0,f[2]||0,f[0]||0);ie.copy(this._viewMatrix,l),this._viewMatrix[12]=m[0],this._viewMatrix[13]=m[1],this._viewMatrix[14]=m[2],ie.multiply(this._viewProjectionMatrix,this._projectionMatrix,this._viewMatrix),this._dirty=!1}};var g0=[.2,.2,.2],x0={x:0,y:0,z:1},b0=[.8,.8,.8];function ys(t,e,r){return t+(e-t)*r}function zr(t,e,r){return{x:ys(t.x,e.x,r),y:ys(t.y,e.y,r),z:ys(t.z,e.z,r)}}function Ir(t){return t<0?0:t>1?1:t}function gs(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 v0(t,e,r){let n=r?.ambient??g0,o=r?.directional??{direction:x0,color:b0},i=He(t),s=He(o.direction),a=Ir(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?Ts(r.modelMatrix,e):e;for(let f of r.dynamicLights){let m=u.x-f.origin.x,p=u.y-f.origin.y,y=u.z-f.origin.z,h=m*m+p*p+y*y,g=f.radius*f.radius;if(h<g&&g>0){let S=1-Math.sqrt(h)/f.radius,b=Math.sqrt(h),M=b>0?Ir(-(m*i.x+p*i.y+y*i.z)/b):0,v=Ir(S*M);c+=f.color[0]*v,l+=f.color[1]*v,d+=f.color[2]*v}}}return[Ir(c),Ir(l),Ir(d)]}function xs(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=zr(l.position,d.position,r.lerp),f=He(zr(l.normal,d.normal,r.lerp)),m=v0(f,u,n),p=c*12;s[p]=u.x,s[p+1]=u.y,s[p+2]=u.z,s[p+3]=f.x,s[p+4]=f.y,s[p+5]=f.z,s[p+6]=a.texCoord[0],s[p+7]=a.texCoord[1],s[p+8]=m[0],s[p+9]=m[1],s[p+10]=m[2],s[p+11]=1}),s}function wc(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=zr(i.origin,s.origin,e.lerp),c=He(zr(i.axis[0],s.axis[0],e.lerp)),l=He(zr(i.axis[1],s.axis[1],e.lerp)),d=He(zr(i.axis[2],s.axis[2],e.lerp)),u=c,f=He({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)}),m=He({x:u.y*f.z-u.z*f.y,y:u.z*f.x-u.x*f.z,z:u.x*f.y-u.y*f.x}),p=[u,f,m];return{origin:a,axis:p,matrix:Rs(a,p)}}var bs=`#version 300 es
|
|
257
|
+
}`;function Jd(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 yi(t,e,r){return t+(e-t)*r}function yc(t,e,r){return{x:yi(t.x,e.x,r),y:yi(t.y,e.y,r),z:yi(t.z,e.z,r)}}function Zd(t,e,r){return[t/r.skinWidth,1-e/r.skinHeight]}function bi(t){if(t.glCommands.length===0){let n=[],s=[];return t.triangles.forEach(o=>{let i=n.length;for(let a=0;a<3;a+=1){let c=o.vertexIndices[a],l=o.texCoordIndices[a],d=t.texCoords[l];n.push({vertexIndex:c,texCoord:Zd(d.s,d.t,t.header)})}s.push(i,i+1,i+2)}),{vertices:n,indices:new Uint16Array(s)}}let e=[],r=[];for(let n of t.glCommands){let s=e.length;if(e.push(...n.vertices.map(o=>({vertexIndex:o.vertexIndex,texCoord:[o.s,1-o.t]}))),n.mode==="strip")for(let o=0;o<n.vertices.length-2;o+=1){let i=o%2===0,a=s+o+(i?0:1),c=s+o+(i?1:0),l=s+o+2;r.push(a,c,l)}else for(let o=1;o<n.vertices.length-1;o+=1)r.push(s,s+o,s+o+1)}return{vertices:e,indices:new Uint16Array(r)}}function vi(t,e,r){let{currentFrame:n,nextFrame:s,lerp:o}=r,i=t.frames[n],a=t.frames[s];if(!i||!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=i.vertices[l.vertexIndex],m=a.vertices[l.vertexIndex];if(!u||!m)throw new Error("MD2 vertex index out of range for frame");let f=yc(u.position,m.position,o),p=Jd(yc(u.normal,m.normal,o)),y=d*8;c[y]=f.x,c[y+1]=f.y,c[y+2]=f.z,c[y+3]=p.x,c[y+4]=p.y,c[y+5]=p.z,c[y+6]=l.texCoord[0],c[y+7]=l.texCoord[1]}),c}var ao=class{constructor(e,r,n){this.gl=e,this.geometry=bi(r),this.vertexBuffer=new ve(e,e.STATIC_DRAW),this.indexBuffer=new Ne(e,e.STATIC_DRAW),this.vertexArray=new _e(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=vi(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()}},co=class{constructor(e){this.gl=e,this.program=be.create(e,{vertex:gi,fragment:xi},{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:s=[1,1,1,1],diffuseSampler:o=0}=e,i=new Float32Array(n),a=new Float32Array(s);this.program.use(),this.gl.uniformMatrix4fv(this.uniformMvp,!1,r),this.gl.uniform3fv(this.uniformLightDir,i),this.gl.uniform4fv(this.uniformTint,a),this.gl.uniform1i(this.uniformDiffuse,o)}draw(e){e.bind(),this.gl.drawElements(this.gl.TRIANGLES,e.indexCount,this.gl.UNSIGNED_SHORT,0)}dispose(){this.program.dispose()}};var $=1e-6,He=typeof Float32Array<"u"?Float32Array:Array,Si=Math.random;function lo(t){return t>=0?Math.round(t):t%.5===0?Math.floor(t):Math.round(t)}var J1=Math.PI/180,Z1=180/Math.PI;var ae={};go(ae,{add:()=>Du,adjoint:()=>au,clone:()=>tu,copy:()=>ru,create:()=>eu,decompose:()=>_u,determinant:()=>cu,equals:()=>Uu,exactEquals:()=>Vu,frob:()=>Ou,fromQuat:()=>Eu,fromQuat2:()=>Su,fromRotation:()=>gu,fromRotationTranslation:()=>vc,fromRotationTranslationScale:()=>wu,fromRotationTranslationScaleOrigin:()=>Lu,fromScaling:()=>yu,fromTranslation:()=>pu,fromValues:()=>nu,fromXRotation:()=>xu,fromYRotation:()=>bu,fromZRotation:()=>vu,frustum:()=>Pu,getRotation:()=>Mu,getScaling:()=>Sc,getTranslation:()=>Au,identity:()=>xc,invert:()=>iu,lookAt:()=>Ru,mul:()=>Gu,multiply:()=>bc,multiplyScalar:()=>Nu,multiplyScalarAndAdd:()=>Hu,ortho:()=>Tu,orthoNO:()=>Mc,orthoZO:()=>Fu,perspective:()=>Iu,perspectiveFromFieldOfView:()=>Cu,perspectiveNO:()=>Ac,perspectiveZO:()=>zu,rotate:()=>uu,rotateX:()=>mu,rotateY:()=>fu,rotateZ:()=>hu,scale:()=>du,set:()=>su,str:()=>ku,sub:()=>Wu,subtract:()=>_c,targetTo:()=>Bu,translate:()=>lu,transpose:()=>ou});function eu(){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 tu(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 ru(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 nu(t,e,r,n,s,o,i,a,c,l,d,u,m,f,p,y){var h=new He(16);return h[0]=t,h[1]=e,h[2]=r,h[3]=n,h[4]=s,h[5]=o,h[6]=i,h[7]=a,h[8]=c,h[9]=l,h[10]=d,h[11]=u,h[12]=m,h[13]=f,h[14]=p,h[15]=y,h}function su(t,e,r,n,s,o,i,a,c,l,d,u,m,f,p,y,h){return t[0]=e,t[1]=r,t[2]=n,t[3]=s,t[4]=o,t[5]=i,t[6]=a,t[7]=c,t[8]=l,t[9]=d,t[10]=u,t[11]=m,t[12]=f,t[13]=p,t[14]=y,t[15]=h,t}function xc(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 ou(t,e){if(t===e){var r=e[1],n=e[2],s=e[3],o=e[6],i=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]=o,t[11]=e[14],t[12]=s,t[13]=i,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 iu(t,e){var r=e[0],n=e[1],s=e[2],o=e[3],i=e[4],a=e[5],c=e[6],l=e[7],d=e[8],u=e[9],m=e[10],f=e[11],p=e[12],y=e[13],h=e[14],g=e[15],S=r*a-n*i,b=r*c-s*i,A=r*l-o*i,v=n*c-s*a,M=n*l-o*a,_=s*l-o*c,L=d*y-u*p,T=d*h-m*p,w=d*g-f*p,H=u*h-m*y,G=u*g-f*y,U=m*g-f*h,F=S*U-b*G+A*H+v*w-M*T+_*L;return F?(F=1/F,t[0]=(a*U-c*G+l*H)*F,t[1]=(s*G-n*U-o*H)*F,t[2]=(y*_-h*M+g*v)*F,t[3]=(m*M-u*_-f*v)*F,t[4]=(c*w-i*U-l*T)*F,t[5]=(r*U-s*w+o*T)*F,t[6]=(h*A-p*_-g*b)*F,t[7]=(d*_-m*A+f*b)*F,t[8]=(i*G-a*w+l*L)*F,t[9]=(n*w-r*G-o*L)*F,t[10]=(p*M-y*A+g*S)*F,t[11]=(u*A-d*M-f*S)*F,t[12]=(a*T-i*H-c*L)*F,t[13]=(r*H-n*T+s*L)*F,t[14]=(y*b-p*v-h*S)*F,t[15]=(d*v-u*b+m*S)*F,t):null}function au(t,e){var r=e[0],n=e[1],s=e[2],o=e[3],i=e[4],a=e[5],c=e[6],l=e[7],d=e[8],u=e[9],m=e[10],f=e[11],p=e[12],y=e[13],h=e[14],g=e[15],S=r*a-n*i,b=r*c-s*i,A=r*l-o*i,v=n*c-s*a,M=n*l-o*a,_=s*l-o*c,L=d*y-u*p,T=d*h-m*p,w=d*g-f*p,H=u*h-m*y,G=u*g-f*y,U=m*g-f*h;return t[0]=a*U-c*G+l*H,t[1]=s*G-n*U-o*H,t[2]=y*_-h*M+g*v,t[3]=m*M-u*_-f*v,t[4]=c*w-i*U-l*T,t[5]=r*U-s*w+o*T,t[6]=h*A-p*_-g*b,t[7]=d*_-m*A+f*b,t[8]=i*G-a*w+l*L,t[9]=n*w-r*G-o*L,t[10]=p*M-y*A+g*S,t[11]=u*A-d*M-f*S,t[12]=a*T-i*H-c*L,t[13]=r*H-n*T+s*L,t[14]=y*b-p*v-h*S,t[15]=d*v-u*b+m*S,t}function cu(t){var e=t[0],r=t[1],n=t[2],s=t[3],o=t[4],i=t[5],a=t[6],c=t[7],l=t[8],d=t[9],u=t[10],m=t[11],f=t[12],p=t[13],y=t[14],h=t[15],g=e*i-r*o,S=e*a-n*o,b=r*a-n*i,A=l*p-d*f,v=l*y-u*f,M=d*y-u*p,_=e*M-r*v+n*A,L=o*M-i*v+a*A,T=l*b-d*S+u*g,w=f*b-p*S+y*g;return c*_-s*L+h*T-m*w}function bc(t,e,r){var n=e[0],s=e[1],o=e[2],i=e[3],a=e[4],c=e[5],l=e[6],d=e[7],u=e[8],m=e[9],f=e[10],p=e[11],y=e[12],h=e[13],g=e[14],S=e[15],b=r[0],A=r[1],v=r[2],M=r[3];return t[0]=b*n+A*a+v*u+M*y,t[1]=b*s+A*c+v*m+M*h,t[2]=b*o+A*l+v*f+M*g,t[3]=b*i+A*d+v*p+M*S,b=r[4],A=r[5],v=r[6],M=r[7],t[4]=b*n+A*a+v*u+M*y,t[5]=b*s+A*c+v*m+M*h,t[6]=b*o+A*l+v*f+M*g,t[7]=b*i+A*d+v*p+M*S,b=r[8],A=r[9],v=r[10],M=r[11],t[8]=b*n+A*a+v*u+M*y,t[9]=b*s+A*c+v*m+M*h,t[10]=b*o+A*l+v*f+M*g,t[11]=b*i+A*d+v*p+M*S,b=r[12],A=r[13],v=r[14],M=r[15],t[12]=b*n+A*a+v*u+M*y,t[13]=b*s+A*c+v*m+M*h,t[14]=b*o+A*l+v*f+M*g,t[15]=b*i+A*d+v*p+M*S,t}function lu(t,e,r){var n=r[0],s=r[1],o=r[2],i,a,c,l,d,u,m,f,p,y,h,g;return e===t?(t[12]=e[0]*n+e[4]*s+e[8]*o+e[12],t[13]=e[1]*n+e[5]*s+e[9]*o+e[13],t[14]=e[2]*n+e[6]*s+e[10]*o+e[14],t[15]=e[3]*n+e[7]*s+e[11]*o+e[15]):(i=e[0],a=e[1],c=e[2],l=e[3],d=e[4],u=e[5],m=e[6],f=e[7],p=e[8],y=e[9],h=e[10],g=e[11],t[0]=i,t[1]=a,t[2]=c,t[3]=l,t[4]=d,t[5]=u,t[6]=m,t[7]=f,t[8]=p,t[9]=y,t[10]=h,t[11]=g,t[12]=i*n+d*s+p*o+e[12],t[13]=a*n+u*s+y*o+e[13],t[14]=c*n+m*s+h*o+e[14],t[15]=l*n+f*s+g*o+e[15]),t}function du(t,e,r){var n=r[0],s=r[1],o=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]*s,t[5]=e[5]*s,t[6]=e[6]*s,t[7]=e[7]*s,t[8]=e[8]*o,t[9]=e[9]*o,t[10]=e[10]*o,t[11]=e[11]*o,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}function uu(t,e,r,n){var s=n[0],o=n[1],i=n[2],a=Math.sqrt(s*s+o*o+i*i),c,l,d,u,m,f,p,y,h,g,S,b,A,v,M,_,L,T,w,H,G,U,F,J;return a<$?null:(a=1/a,s*=a,o*=a,i*=a,c=Math.sin(r),l=Math.cos(r),d=1-l,u=e[0],m=e[1],f=e[2],p=e[3],y=e[4],h=e[5],g=e[6],S=e[7],b=e[8],A=e[9],v=e[10],M=e[11],_=s*s*d+l,L=o*s*d+i*c,T=i*s*d-o*c,w=s*o*d-i*c,H=o*o*d+l,G=i*o*d+s*c,U=s*i*d+o*c,F=o*i*d-s*c,J=i*i*d+l,t[0]=u*_+y*L+b*T,t[1]=m*_+h*L+A*T,t[2]=f*_+g*L+v*T,t[3]=p*_+S*L+M*T,t[4]=u*w+y*H+b*G,t[5]=m*w+h*H+A*G,t[6]=f*w+g*H+v*G,t[7]=p*w+S*H+M*G,t[8]=u*U+y*F+b*J,t[9]=m*U+h*F+A*J,t[10]=f*U+g*F+v*J,t[11]=p*U+S*F+M*J,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t)}function mu(t,e,r){var n=Math.sin(r),s=Math.cos(r),o=e[4],i=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]=o*s+l*n,t[5]=i*s+d*n,t[6]=a*s+u*n,t[7]=c*s+m*n,t[8]=l*s-o*n,t[9]=d*s-i*n,t[10]=u*s-a*n,t[11]=m*s-c*n,t}function fu(t,e,r){var n=Math.sin(r),s=Math.cos(r),o=e[0],i=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]=o*s-l*n,t[1]=i*s-d*n,t[2]=a*s-u*n,t[3]=c*s-m*n,t[8]=o*n+l*s,t[9]=i*n+d*s,t[10]=a*n+u*s,t[11]=c*n+m*s,t}function hu(t,e,r){var n=Math.sin(r),s=Math.cos(r),o=e[0],i=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]=o*s+l*n,t[1]=i*s+d*n,t[2]=a*s+u*n,t[3]=c*s+m*n,t[4]=l*s-o*n,t[5]=d*s-i*n,t[6]=u*s-a*n,t[7]=m*s-c*n,t}function pu(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 yu(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 gu(t,e,r){var n=r[0],s=r[1],o=r[2],i=Math.sqrt(n*n+s*s+o*o),a,c,l;return i<$?null:(i=1/i,n*=i,s*=i,o*=i,a=Math.sin(e),c=Math.cos(e),l=1-c,t[0]=n*n*l+c,t[1]=s*n*l+o*a,t[2]=o*n*l-s*a,t[3]=0,t[4]=n*s*l-o*a,t[5]=s*s*l+c,t[6]=o*s*l+n*a,t[7]=0,t[8]=n*o*l+s*a,t[9]=s*o*l-n*a,t[10]=o*o*l+c,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t)}function xu(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 bu(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 vu(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 vc(t,e,r){var n=e[0],s=e[1],o=e[2],i=e[3],a=n+n,c=s+s,l=o+o,d=n*a,u=n*c,m=n*l,f=s*c,p=s*l,y=o*l,h=i*a,g=i*c,S=i*l;return t[0]=1-(f+y),t[1]=u+S,t[2]=m-g,t[3]=0,t[4]=u-S,t[5]=1-(d+y),t[6]=p+h,t[7]=0,t[8]=m+g,t[9]=p-h,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 Su(t,e){var r=new He(3),n=-e[0],s=-e[1],o=-e[2],i=e[3],a=e[4],c=e[5],l=e[6],d=e[7],u=n*n+s*s+o*o+i*i;return u>0?(r[0]=(a*i+d*n+c*o-l*s)*2/u,r[1]=(c*i+d*s+l*n-a*o)*2/u,r[2]=(l*i+d*o+a*s-c*n)*2/u):(r[0]=(a*i+d*n+c*o-l*s)*2,r[1]=(c*i+d*s+l*n-a*o)*2,r[2]=(l*i+d*o+a*s-c*n)*2),vc(t,e,r),t}function Au(t,e){return t[0]=e[12],t[1]=e[13],t[2]=e[14],t}function Sc(t,e){var r=e[0],n=e[1],s=e[2],o=e[4],i=e[5],a=e[6],c=e[8],l=e[9],d=e[10];return t[0]=Math.sqrt(r*r+n*n+s*s),t[1]=Math.sqrt(o*o+i*i+a*a),t[2]=Math.sqrt(c*c+l*l+d*d),t}function Mu(t,e){var r=new He(3);Sc(r,e);var n=1/r[0],s=1/r[1],o=1/r[2],i=e[0]*n,a=e[1]*s,c=e[2]*o,l=e[4]*n,d=e[5]*s,u=e[6]*o,m=e[8]*n,f=e[9]*s,p=e[10]*o,y=i+d+p,h=0;return y>0?(h=Math.sqrt(y+1)*2,t[3]=.25*h,t[0]=(u-f)/h,t[1]=(m-c)/h,t[2]=(a-l)/h):i>d&&i>p?(h=Math.sqrt(1+i-d-p)*2,t[3]=(u-f)/h,t[0]=.25*h,t[1]=(a+l)/h,t[2]=(m+c)/h):d>p?(h=Math.sqrt(1+d-i-p)*2,t[3]=(m-c)/h,t[0]=(a+l)/h,t[1]=.25*h,t[2]=(u+f)/h):(h=Math.sqrt(1+p-i-d)*2,t[3]=(a-l)/h,t[0]=(m+c)/h,t[1]=(u+f)/h,t[2]=.25*h),t}function _u(t,e,r,n){e[0]=n[12],e[1]=n[13],e[2]=n[14];var s=n[0],o=n[1],i=n[2],a=n[4],c=n[5],l=n[6],d=n[8],u=n[9],m=n[10];r[0]=Math.sqrt(s*s+o*o+i*i),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],p=1/r[1],y=1/r[2],h=s*f,g=o*p,S=i*y,b=a*f,A=c*p,v=l*y,M=d*f,_=u*p,L=m*y,T=h+A+L,w=0;return T>0?(w=Math.sqrt(T+1)*2,t[3]=.25*w,t[0]=(v-_)/w,t[1]=(M-S)/w,t[2]=(g-b)/w):h>A&&h>L?(w=Math.sqrt(1+h-A-L)*2,t[3]=(v-_)/w,t[0]=.25*w,t[1]=(g+b)/w,t[2]=(M+S)/w):A>L?(w=Math.sqrt(1+A-h-L)*2,t[3]=(M-S)/w,t[0]=(g+b)/w,t[1]=.25*w,t[2]=(v+_)/w):(w=Math.sqrt(1+L-h-A)*2,t[3]=(g-b)/w,t[0]=(M+S)/w,t[1]=(v+_)/w,t[2]=.25*w),t}function wu(t,e,r,n){var s=e[0],o=e[1],i=e[2],a=e[3],c=s+s,l=o+o,d=i+i,u=s*c,m=s*l,f=s*d,p=o*l,y=o*d,h=i*d,g=a*c,S=a*l,b=a*d,A=n[0],v=n[1],M=n[2];return t[0]=(1-(p+h))*A,t[1]=(m+b)*A,t[2]=(f-S)*A,t[3]=0,t[4]=(m-b)*v,t[5]=(1-(u+h))*v,t[6]=(y+g)*v,t[7]=0,t[8]=(f+S)*M,t[9]=(y-g)*M,t[10]=(1-(u+p))*M,t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t}function Lu(t,e,r,n,s){var o=e[0],i=e[1],a=e[2],c=e[3],l=o+o,d=i+i,u=a+a,m=o*l,f=o*d,p=o*u,y=i*d,h=i*u,g=a*u,S=c*l,b=c*d,A=c*u,v=n[0],M=n[1],_=n[2],L=s[0],T=s[1],w=s[2],H=(1-(y+g))*v,G=(f+A)*v,U=(p-b)*v,F=(f-A)*M,J=(1-(m+g))*M,Se=(h+S)*M,Ft=(p+b)*_,Wn=(h-S)*_,Rr=(1-(m+y))*_;return t[0]=H,t[1]=G,t[2]=U,t[3]=0,t[4]=F,t[5]=J,t[6]=Se,t[7]=0,t[8]=Ft,t[9]=Wn,t[10]=Rr,t[11]=0,t[12]=r[0]+L-(H*L+F*T+Ft*w),t[13]=r[1]+T-(G*L+J*T+Wn*w),t[14]=r[2]+w-(U*L+Se*T+Rr*w),t[15]=1,t}function Eu(t,e){var r=e[0],n=e[1],s=e[2],o=e[3],i=r+r,a=n+n,c=s+s,l=r*i,d=n*i,u=n*a,m=s*i,f=s*a,p=s*c,y=o*i,h=o*a,g=o*c;return t[0]=1-u-p,t[1]=d+g,t[2]=m-h,t[3]=0,t[4]=d-g,t[5]=1-l-p,t[6]=f+y,t[7]=0,t[8]=m+h,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 Pu(t,e,r,n,s,o,i){var a=1/(r-e),c=1/(s-n),l=1/(o-i);return t[0]=o*2*a,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=o*2*c,t[6]=0,t[7]=0,t[8]=(r+e)*a,t[9]=(s+n)*c,t[10]=(i+o)*l,t[11]=-1,t[12]=0,t[13]=0,t[14]=i*o*2*l,t[15]=0,t}function Ac(t,e,r,n,s){var o=1/Math.tan(e/2);if(t[0]=o/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=o,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,s!=null&&s!==1/0){var i=1/(n-s);t[10]=(s+n)*i,t[14]=2*s*n*i}else t[10]=-1,t[14]=-2*n;return t}var Iu=Ac;function zu(t,e,r,n,s){var o=1/Math.tan(e/2);if(t[0]=o/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=o,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,s!=null&&s!==1/0){var i=1/(n-s);t[10]=s*i,t[14]=s*n*i}else t[10]=-1,t[14]=-n;return t}function Cu(t,e,r,n){var s=Math.tan(e.upDegrees*Math.PI/180),o=Math.tan(e.downDegrees*Math.PI/180),i=Math.tan(e.leftDegrees*Math.PI/180),a=Math.tan(e.rightDegrees*Math.PI/180),c=2/(i+a),l=2/(s+o);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]=-((i-a)*c*.5),t[9]=(s-o)*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 Mc(t,e,r,n,s,o,i){var a=1/(e-r),c=1/(n-s),l=1/(o-i);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]=(s+n)*c,t[14]=(i+o)*l,t[15]=1,t}var Tu=Mc;function Fu(t,e,r,n,s,o,i){var a=1/(e-r),c=1/(n-s),l=1/(o-i);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]=(s+n)*c,t[14]=o*l,t[15]=1,t}function Ru(t,e,r,n){var s,o,i,a,c,l,d,u,m,f,p=e[0],y=e[1],h=e[2],g=n[0],S=n[1],b=n[2],A=r[0],v=r[1],M=r[2];return Math.abs(p-A)<$&&Math.abs(y-v)<$&&Math.abs(h-M)<$?xc(t):(d=p-A,u=y-v,m=h-M,f=1/Math.sqrt(d*d+u*u+m*m),d*=f,u*=f,m*=f,s=S*m-b*u,o=b*d-g*m,i=g*u-S*d,f=Math.sqrt(s*s+o*o+i*i),f?(f=1/f,s*=f,o*=f,i*=f):(s=0,o=0,i=0),a=u*i-m*o,c=m*s-d*i,l=d*o-u*s,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]=s,t[1]=a,t[2]=d,t[3]=0,t[4]=o,t[5]=c,t[6]=u,t[7]=0,t[8]=i,t[9]=l,t[10]=m,t[11]=0,t[12]=-(s*p+o*y+i*h),t[13]=-(a*p+c*y+l*h),t[14]=-(d*p+u*y+m*h),t[15]=1,t)}function Bu(t,e,r,n){var s=e[0],o=e[1],i=e[2],a=n[0],c=n[1],l=n[2],d=s-r[0],u=o-r[1],m=i-r[2],f=d*d+u*u+m*m;f>0&&(f=1/Math.sqrt(f),d*=f,u*=f,m*=f);var p=c*m-l*u,y=l*d-a*m,h=a*u-c*d;return f=p*p+y*y+h*h,f>0&&(f=1/Math.sqrt(f),p*=f,y*=f,h*=f),t[0]=p,t[1]=y,t[2]=h,t[3]=0,t[4]=u*h-m*y,t[5]=m*p-d*h,t[6]=d*y-u*p,t[7]=0,t[8]=d,t[9]=u,t[10]=m,t[11]=0,t[12]=s,t[13]=o,t[14]=i,t[15]=1,t}function ku(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 Ou(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 Du(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 _c(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 Nu(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 Hu(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 Vu(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 Uu(t,e){var r=t[0],n=t[1],s=t[2],o=t[3],i=t[4],a=t[5],c=t[6],l=t[7],d=t[8],u=t[9],m=t[10],f=t[11],p=t[12],y=t[13],h=t[14],g=t[15],S=e[0],b=e[1],A=e[2],v=e[3],M=e[4],_=e[5],L=e[6],T=e[7],w=e[8],H=e[9],G=e[10],U=e[11],F=e[12],J=e[13],Se=e[14],Ft=e[15];return Math.abs(r-S)<=$*Math.max(1,Math.abs(r),Math.abs(S))&&Math.abs(n-b)<=$*Math.max(1,Math.abs(n),Math.abs(b))&&Math.abs(s-A)<=$*Math.max(1,Math.abs(s),Math.abs(A))&&Math.abs(o-v)<=$*Math.max(1,Math.abs(o),Math.abs(v))&&Math.abs(i-M)<=$*Math.max(1,Math.abs(i),Math.abs(M))&&Math.abs(a-_)<=$*Math.max(1,Math.abs(a),Math.abs(_))&&Math.abs(c-L)<=$*Math.max(1,Math.abs(c),Math.abs(L))&&Math.abs(l-T)<=$*Math.max(1,Math.abs(l),Math.abs(T))&&Math.abs(d-w)<=$*Math.max(1,Math.abs(d),Math.abs(w))&&Math.abs(u-H)<=$*Math.max(1,Math.abs(u),Math.abs(H))&&Math.abs(m-G)<=$*Math.max(1,Math.abs(m),Math.abs(G))&&Math.abs(f-U)<=$*Math.max(1,Math.abs(f),Math.abs(U))&&Math.abs(p-F)<=$*Math.max(1,Math.abs(p),Math.abs(F))&&Math.abs(y-J)<=$*Math.max(1,Math.abs(y),Math.abs(J))&&Math.abs(h-Se)<=$*Math.max(1,Math.abs(h),Math.abs(Se))&&Math.abs(g-Ft)<=$*Math.max(1,Math.abs(g),Math.abs(Ft))}var Gu=bc,Wu=_c;var ie={};go(ie,{add:()=>$u,angle:()=>x0,bezier:()=>d0,ceil:()=>ju,clone:()=>Xu,copy:()=>Yu,create:()=>wc,cross:()=>i0,dist:()=>L0,distance:()=>zc,div:()=>w0,divide:()=>Ic,dot:()=>Ai,equals:()=>A0,exactEquals:()=>S0,floor:()=>Qu,forEach:()=>z0,fromValues:()=>Ku,hermite:()=>l0,inverse:()=>s0,len:()=>P0,length:()=>Lc,lerp:()=>a0,max:()=>Zu,min:()=>Ju,mul:()=>_0,multiply:()=>Pc,negate:()=>n0,normalize:()=>o0,random:()=>u0,rotateX:()=>p0,rotateY:()=>y0,rotateZ:()=>g0,round:()=>e0,scale:()=>t0,scaleAndAdd:()=>r0,set:()=>qu,slerp:()=>c0,sqrDist:()=>E0,sqrLen:()=>I0,squaredDistance:()=>Cc,squaredLength:()=>Tc,str:()=>v0,sub:()=>M0,subtract:()=>Ec,transformMat3:()=>f0,transformMat4:()=>m0,transformQuat:()=>h0,zero:()=>b0});function wc(){var t=new He(3);return He!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t}function Xu(t){var e=new He(3);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function Lc(t){var e=t[0],r=t[1],n=t[2];return Math.sqrt(e*e+r*r+n*n)}function Ku(t,e,r){var n=new He(3);return n[0]=t,n[1]=e,n[2]=r,n}function Yu(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function qu(t,e,r,n){return t[0]=e,t[1]=r,t[2]=n,t}function $u(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t}function Ec(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t}function Pc(t,e,r){return t[0]=e[0]*r[0],t[1]=e[1]*r[1],t[2]=e[2]*r[2],t}function Ic(t,e,r){return t[0]=e[0]/r[0],t[1]=e[1]/r[1],t[2]=e[2]/r[2],t}function ju(t,e){return t[0]=Math.ceil(e[0]),t[1]=Math.ceil(e[1]),t[2]=Math.ceil(e[2]),t}function Qu(t,e){return t[0]=Math.floor(e[0]),t[1]=Math.floor(e[1]),t[2]=Math.floor(e[2]),t}function Ju(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 Zu(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 e0(t,e){return t[0]=lo(e[0]),t[1]=lo(e[1]),t[2]=lo(e[2]),t}function t0(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t}function r0(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 zc(t,e){var r=e[0]-t[0],n=e[1]-t[1],s=e[2]-t[2];return Math.sqrt(r*r+n*n+s*s)}function Cc(t,e){var r=e[0]-t[0],n=e[1]-t[1],s=e[2]-t[2];return r*r+n*n+s*s}function Tc(t){var e=t[0],r=t[1],n=t[2];return e*e+r*r+n*n}function n0(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t}function s0(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t}function o0(t,e){var r=e[0],n=e[1],s=e[2],o=r*r+n*n+s*s;return o>0&&(o=1/Math.sqrt(o)),t[0]=e[0]*o,t[1]=e[1]*o,t[2]=e[2]*o,t}function Ai(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function i0(t,e,r){var n=e[0],s=e[1],o=e[2],i=r[0],a=r[1],c=r[2];return t[0]=s*c-o*a,t[1]=o*i-n*c,t[2]=n*a-s*i,t}function a0(t,e,r,n){var s=e[0],o=e[1],i=e[2];return t[0]=s+n*(r[0]-s),t[1]=o+n*(r[1]-o),t[2]=i+n*(r[2]-i),t}function c0(t,e,r,n){var s=Math.acos(Math.min(Math.max(Ai(e,r),-1),1)),o=Math.sin(s),i=Math.sin((1-n)*s)/o,a=Math.sin(n*s)/o;return t[0]=i*e[0]+a*r[0],t[1]=i*e[1]+a*r[1],t[2]=i*e[2]+a*r[2],t}function l0(t,e,r,n,s,o){var i=o*o,a=i*(2*o-3)+1,c=i*(o-2)+o,l=i*(o-1),d=i*(3-2*o);return t[0]=e[0]*a+r[0]*c+n[0]*l+s[0]*d,t[1]=e[1]*a+r[1]*c+n[1]*l+s[1]*d,t[2]=e[2]*a+r[2]*c+n[2]*l+s[2]*d,t}function d0(t,e,r,n,s,o){var i=1-o,a=i*i,c=o*o,l=a*i,d=3*o*a,u=3*c*i,m=c*o;return t[0]=e[0]*l+r[0]*d+n[0]*u+s[0]*m,t[1]=e[1]*l+r[1]*d+n[1]*u+s[1]*m,t[2]=e[2]*l+r[2]*d+n[2]*u+s[2]*m,t}function u0(t,e){e=e===void 0?1:e;var r=Si()*2*Math.PI,n=Si()*2-1,s=Math.sqrt(1-n*n)*e;return t[0]=Math.cos(r)*s,t[1]=Math.sin(r)*s,t[2]=n*e,t}function m0(t,e,r){var n=e[0],s=e[1],o=e[2],i=r[3]*n+r[7]*s+r[11]*o+r[15];return i=i||1,t[0]=(r[0]*n+r[4]*s+r[8]*o+r[12])/i,t[1]=(r[1]*n+r[5]*s+r[9]*o+r[13])/i,t[2]=(r[2]*n+r[6]*s+r[10]*o+r[14])/i,t}function f0(t,e,r){var n=e[0],s=e[1],o=e[2];return t[0]=n*r[0]+s*r[3]+o*r[6],t[1]=n*r[1]+s*r[4]+o*r[7],t[2]=n*r[2]+s*r[5]+o*r[8],t}function h0(t,e,r){var n=r[0],s=r[1],o=r[2],i=r[3],a=e[0],c=e[1],l=e[2],d=s*l-o*c,u=o*a-n*l,m=n*c-s*a;return d=d+d,u=u+u,m=m+m,t[0]=a+i*d+s*m-o*u,t[1]=c+i*u+o*d-n*m,t[2]=l+i*m+n*u-s*d,t}function p0(t,e,r,n){var s=[],o=[];return s[0]=e[0]-r[0],s[1]=e[1]-r[1],s[2]=e[2]-r[2],o[0]=s[0],o[1]=s[1]*Math.cos(n)-s[2]*Math.sin(n),o[2]=s[1]*Math.sin(n)+s[2]*Math.cos(n),t[0]=o[0]+r[0],t[1]=o[1]+r[1],t[2]=o[2]+r[2],t}function y0(t,e,r,n){var s=[],o=[];return s[0]=e[0]-r[0],s[1]=e[1]-r[1],s[2]=e[2]-r[2],o[0]=s[2]*Math.sin(n)+s[0]*Math.cos(n),o[1]=s[1],o[2]=s[2]*Math.cos(n)-s[0]*Math.sin(n),t[0]=o[0]+r[0],t[1]=o[1]+r[1],t[2]=o[2]+r[2],t}function g0(t,e,r,n){var s=[],o=[];return s[0]=e[0]-r[0],s[1]=e[1]-r[1],s[2]=e[2]-r[2],o[0]=s[0]*Math.cos(n)-s[1]*Math.sin(n),o[1]=s[0]*Math.sin(n)+s[1]*Math.cos(n),o[2]=s[2],t[0]=o[0]+r[0],t[1]=o[1]+r[1],t[2]=o[2]+r[2],t}function x0(t,e){var r=t[0],n=t[1],s=t[2],o=e[0],i=e[1],a=e[2],c=Math.sqrt((r*r+n*n+s*s)*(o*o+i*i+a*a)),l=c&&Ai(t,e)/c;return Math.acos(Math.min(Math.max(l,-1),1))}function b0(t){return t[0]=0,t[1]=0,t[2]=0,t}function v0(t){return"vec3("+t[0]+", "+t[1]+", "+t[2]+")"}function S0(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]}function A0(t,e){var r=t[0],n=t[1],s=t[2],o=e[0],i=e[1],a=e[2];return Math.abs(r-o)<=$*Math.max(1,Math.abs(r),Math.abs(o))&&Math.abs(n-i)<=$*Math.max(1,Math.abs(n),Math.abs(i))&&Math.abs(s-a)<=$*Math.max(1,Math.abs(s),Math.abs(a))}var M0=Ec,_0=Pc,w0=Ic,L0=zc,E0=Cc,P0=Lc,I0=Tc,z0=(function(){var t=wc();return function(e,r,n,s,o,i){var a,c;for(r||(r=3),n||(n=0),s?c=Math.min(s*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],o(t,t,i),e[a]=t[0],e[a+1]=t[1],e[a+2]=t[2];return e}})();var uo=class{constructor(){this._position=ie.create();this._angles=ie.create();this._bobAngles=ie.create();this._bobOffset=ie.create();this._kickAngles=ie.create();this._rollAngle=0;this._fov=90;this._aspect=1;this._near=.1;this._far=1e3;this._viewMatrix=ae.create();this._projectionMatrix=ae.create();this._viewProjectionMatrix=ae.create();this._dirty=!0}get position(){return this._position}set position(e){ie.copy(this._position,e),this._dirty=!0}get angles(){return this._angles}set angles(e){ie.copy(this._angles,e),this._dirty=!0}get bobAngles(){return this._bobAngles}set bobAngles(e){ie.copy(this._bobAngles,e),this._dirty=!0}get kickAngles(){return this._kickAngles}set kickAngles(e){ie.copy(this._kickAngles,e),this._dirty=!0}get bobOffset(){return this._bobOffset}set bobOffset(e){ie.copy(this._bobOffset,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=ae.create();return ae.perspective(r,e*nr,this._aspect,this._near,this._far),r}updateMatrices(){if(!this._dirty)return;ae.perspective(this._projectionMatrix,this._fov*nr,this._aspect,this._near,this._far);let e=ae.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],s=this._angles[2]+this._bobAngles[2]+this._kickAngles[2]+this._rollAngle,o=r*nr,i=n*nr,a=s*nr,c=ae.create();ae.identity(c),ae.rotateZ(c,c,-i),ae.rotateY(c,c,-o),ae.rotateX(c,c,-a);let l=ae.create();ae.multiply(l,e,c);let d=ie.add(ie.create(),this._position,this._bobOffset),u=ie.negate(ie.create(),d),m=ie.create();ie.transformMat4(m,u,c);let f=ie.fromValues(m[1]||0,m[2]||0,m[0]||0);ae.copy(this._viewMatrix,l),this._viewMatrix[12]=f[0],this._viewMatrix[13]=f[1],this._viewMatrix[14]=f[2],ae.multiply(this._viewProjectionMatrix,this._projectionMatrix,this._viewMatrix),this._dirty=!1}};var C0=[.2,.2,.2],T0={x:0,y:0,z:1},F0=[.8,.8,.8];function Mi(t,e,r){return t+(e-t)*r}function Fr(t,e,r){return{x:Mi(t.x,e.x,r),y:Mi(t.y,e.y,r),z:Mi(t.z,e.z,r)}}function Tr(t){return t<0?0:t>1?1:t}function _i(t){let e=[],r=[];for(let n of t.triangles){let s=e.length,[o,i,a]=n.indices,c=t.texCoords[o],l=t.texCoords[i],d=t.texCoords[a];if(!c||!l||!d)throw new Error(`Missing texCoord for triangle in surface ${t.name}`);e.push({vertexIndex:o,texCoord:[c.s,1-c.t]},{vertexIndex:i,texCoord:[l.s,1-l.t]},{vertexIndex:a,texCoord:[d.s,1-d.t]}),r.push(s,s+1,s+2)}return{vertices:e,indices:new Uint16Array(r)}}function R0(t,e,r){let n=r?.ambient??C0,s=r?.directional??{direction:T0,color:F0},o=Ve(t),i=Ve(s.direction),a=Tr(o.x*i.x+o.y*i.y+o.z*i.z),c=n[0]+s.color[0]*a,l=n[1]+s.color[1]*a,d=n[2]+s.color[2]*a;if(r?.dynamicLights){let u=r.modelMatrix?Hi(r.modelMatrix,e):e;for(let m of r.dynamicLights){let f=u.x-m.origin.x,p=u.y-m.origin.y,y=u.z-m.origin.z,h=f*f+p*p+y*y,g=m.radius*m.radius;if(h<g&&g>0){let S=1-Math.sqrt(h)/m.radius,b=Math.sqrt(h),A=b>0?Tr(-(f*o.x+p*o.y+y*o.z)/b):0,v=Tr(S*A);c+=m.color[0]*v,l+=m.color[1]*v,d+=m.color[2]*v}}}return[Tr(c),Tr(l),Tr(d)]}function wi(t,e,r,n){let s=t.vertices[r.currentFrame],o=t.vertices[r.nextFrame];if(!s||!o)throw new Error("Requested MD3 frames are out of range");let i=new Float32Array(e.vertices.length*12);return e.vertices.forEach((a,c)=>{let l=s[a.vertexIndex],d=o[a.vertexIndex];if(!l||!d)throw new Error(`Vertex index ${a.vertexIndex} missing for frame`);let u=Fr(l.position,d.position,r.lerp),m=Ve(Fr(l.normal,d.normal,r.lerp)),f=R0(m,u,n),p=c*12;i[p]=u.x,i[p+1]=u.y,i[p+2]=u.z,i[p+3]=m.x,i[p+4]=m.y,i[p+5]=m.z,i[p+6]=a.texCoord[0],i[p+7]=a.texCoord[1],i[p+8]=f[0],i[p+9]=f[1],i[p+10]=f[2],i[p+11]=1}),i}function Fc(t,e,r){let n=t.tags[0];if(!n)return null;let s=n.findIndex(y=>y.name===r);if(s===-1)return null;let o=t.tags[e.currentFrame]?.[s],i=t.tags[e.nextFrame]?.[s];if(!o||!i)throw new Error(`Tag ${r} is missing for one of the interpolated frames`);let a=Fr(o.origin,i.origin,e.lerp),c=Ve(Fr(o.axis[0],i.axis[0],e.lerp)),l=Ve(Fr(o.axis[1],i.axis[1],e.lerp)),d=Ve(Fr(o.axis[2],i.axis[2],e.lerp)),u=c,m=Ve({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=Ve({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}),p=[u,m,f];return{origin:a,axis:p,matrix:Vi(a,p)}}var Li=`#version 300 es
|
|
258
258
|
precision highp float;
|
|
259
259
|
|
|
260
260
|
layout(location = 0) in vec3 a_position;
|
|
@@ -271,7 +271,7 @@ void main() {
|
|
|
271
271
|
v_texCoord = a_texCoord;
|
|
272
272
|
v_color = a_color;
|
|
273
273
|
gl_Position = u_modelViewProjection * vec4(a_position, 1.0);
|
|
274
|
-
}`,
|
|
274
|
+
}`,Ei=`#version 300 es
|
|
275
275
|
precision highp float;
|
|
276
276
|
|
|
277
277
|
in vec2 v_texCoord;
|
|
@@ -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
|
-
}`,
|
|
288
|
+
}`,Vn=class{constructor(e,r,n,s){this.gl=e,this.geometry=_i(r),this.vertexBuffer=new ve(e,e.STATIC_DRAW),this.indexBuffer=new Ne(e,e.STATIC_DRAW),this.vertexArray=new _e(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,s)}update(e,r,n){let s=wi(e,this.geometry,r,n);this.vertexBuffer.upload(s,this.gl.STATIC_DRAW)}bind(){this.vertexArray.bind(),this.indexBuffer.bind()}dispose(){this.vertexBuffer.dispose(),this.indexBuffer.dispose(),this.vertexArray.dispose()}},mo=class{constructor(e,r,n,s){this.surfaces=new Map;this.gl=e,this.model=r,this.blend=n,this.lighting=s,r.surfaces.forEach(o=>{this.surfaces.set(o.name,new Vn(e,o,n,s))})}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()}},fo=class{constructor(e){this.gl=e,this.program=be.create(e,{vertex:Li,fragment:Ei},{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,s=r?.tint??[1,1,1,1];this.gl.uniform4fv(this.uniformTint,new Float32Array(s)),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 B0=[1,1,1,1],ho=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??B0,s=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]=s.x,this.velocityY[r]=s.y,this.velocityZ[r]=s.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 s=0;s<this.maxParticles;s+=1){if(!this.alive[s])continue;if(this.remaining[s]-=e,this.remaining[s]<=0){this.alive[s]=0;continue}let o=Math.max(0,1-this.damping[s]*e);this.velocityX[s]*=o,this.velocityY[s]*=o,this.velocityZ[s]=this.velocityZ[s]*o-this.gravity[s]*e,this.positionX[s]+=this.velocityX[s]*e,this.positionY[s]+=this.velocityY[s]*e,this.positionZ[s]+=this.velocityZ[s]*e,this.positionZ[s]<n&&(this.positionZ[s]=n,this.velocityZ[s]=-this.velocityZ[s]*this.bounce[s],this.velocityX[s]*=.7,this.velocityY[s]*=.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=[],s=[],o=[],i=a=>{let c=s.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,p=this.blendMode[d]===1?1.2:1,y=this.colorR[d]*p,h=this.colorG[d]*p,g=this.colorB[d]*p,S=this.colorA[d]*f,b=this.positionX[d],A=this.positionY[d],v=this.positionZ[d],M=e.x*m,_=e.y*m,L=e.z*m,T=r.x*m,w=r.y*m,H=r.z*m,G=[{x:b-M-T,y:A-_-w,z:v-L-H},{x:b+M-T,y:A+_-w,z:v+L-H},{x:b-M+T,y:A-_+w,z:v-L+H},{x:b+M+T,y:A+_+w,z:v+L+H}],U=[[0,1],[1,1],[0,0],[1,0]];G.forEach((F,J)=>{n.push(F.x,F.y,F.z,U[J]?.[0]??0,U[J]?.[1]??0,y,h,g,S)}),s.push(u,u+1,u+2,u+2,u+1,u+3)}l>0&&o.push({blendMode:a,start:c,count:s.length-c})};return i("alpha"),i("additive"),{vertices:new Float32Array(n),indices:new Uint16Array(s),batches:o}}findFreeSlot(){for(let e=0;e<this.maxParticles;e+=1)if(!this.alive[e])return e;return-1}},Pi=`#version 300 es
|
|
289
289
|
precision highp float;
|
|
290
290
|
|
|
291
291
|
layout(location = 0) in vec3 a_position;
|
|
@@ -301,7 +301,7 @@ void main() {
|
|
|
301
301
|
v_uv = a_uv;
|
|
302
302
|
v_color = a_color;
|
|
303
303
|
gl_Position = u_viewProjection * vec4(a_position, 1.0);
|
|
304
|
-
}`,
|
|
304
|
+
}`,Ii=`#version 300 es
|
|
305
305
|
precision highp float;
|
|
306
306
|
|
|
307
307
|
in vec2 v_uv;
|
|
@@ -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
|
-
}`,li=class{constructor(e,r){this.vertexCapacity=0;this.indexCapacity=0;this.gl=e,this.system=r,this.program=ge.create(e,{vertex:Ss,fragment:Ms}),this.vertexBuffer=new xe(e,e.DYNAMIC_DRAW),this.indexBuffer=new De(e,e.DYNAMIC_DRAW),this.vertexArray=new Me(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 Lc(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 Ec(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 Ic(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 zc(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 Pc(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 Fc(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 M0(t){return{init(){t.trace({x:0,y:0,z:0},{x:0,y:0,z:0})},shutdown(){},createMainLoop(e,r){return new Ct(e,r)}}}return Vc(A0);})();
|
|
316
|
+
}`,po=class{constructor(e,r){this.vertexCapacity=0;this.indexCapacity=0;this.gl=e,this.system=r,this.program=be.create(e,{vertex:Pi,fragment:Ii}),this.vertexBuffer=new ve(e,e.DYNAMIC_DRAW),this.indexBuffer=new Ne(e,e.DYNAMIC_DRAW),this.vertexArray=new _e(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 s=r.indices;r.indices.byteLength>this.indexCapacity?(this.indexCapacity=r.indices.byteLength,this.indexBuffer.upload(s,this.gl.DYNAMIC_DRAW)):this.indexBuffer.update(s),this.gl.depthMask(!1),this.program.use();let o=this.program.getUniformLocation("u_viewProjection");this.gl.uniformMatrix4fv(o,!1,e.viewProjection),this.vertexArray.bind();for(let i of r.batches)i.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,i.count,this.gl.UNSIGNED_SHORT,i.start*2);this.gl.depthMask(!0)}dispose(){this.program.dispose(),this.vertexBuffer.dispose(),this.indexBuffer.dispose(),this.vertexArray.dispose()}};function Rc(t){let{system:e,origin:r,normal:n={x:0,y:0,z:1}}=t;for(let s=0;s<12;s+=1){let o=200+e.random()*180,i=e.random()*.35;e.spawn({position:r,velocity:{x:n.x*o+(e.random()-.5)*80,y:n.y*o+(e.random()-.5)*80,z:Math.max(n.z*o,120)+i*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 s=0;s<8;s+=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 Bc(t){let{system:e,origin:r}=t;for(let n=0;n<40;n+=1){let s=e.random()*Math.PI*2,o=Math.acos(2*e.random()-1),i=220+e.random()*260,a={x:Math.sin(o)*Math.cos(s),y:Math.sin(o)*Math.sin(s),z:Math.cos(o)};e.spawn({position:r,velocity:{x:a.x*i,y:a.y*i,z:a.z*i},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 kc(t){let{system:e,origin:r,direction:n={x:0,y:0,z:1}}=t;for(let s=0;s<24;s+=1){let o=120+e.random()*180;e.spawn({position:r,velocity:{x:n.x*o+(e.random()-.5)*70,y:n.y*o+(e.random()-.5)*70,z:n.z*o+e.random()*80},color:[.6,0,0,.95],size:3,lifetime:.8,gravity:900,damping:1,bounce:.2,blendMode:"alpha",fade:!0})}}function Oc(t){let{system:e,origin:r}=t;for(let n=0;n<30;n+=1){let s=e.random()*Math.PI*2,o=8+e.random()*8;e.spawn({position:r,velocity:{x:Math.cos(s)*o,y:Math.sin(s)*o,z:100+e.random()*80},color:[.4,.6,1,.9],size:4,lifetime:.5,gravity:300,damping:2,blendMode:"additive",fade:!0})}}function Dc(t){let{system:e,origin:r,direction:n={x:1,y:0,z:0}}=t;for(let s=0;s<10;s+=1){let o=350+e.random()*100;e.spawn({position:r,velocity:{x:n.x*o+(e.random()-.5)*30,y:n.y*o+(e.random()-.5)*30,z:n.z*o+(e.random()-.5)*30},color:[1,.8,.3,1],size:3,lifetime:.25,gravity:200,damping:1,blendMode:"additive",fade:!0})}}function Nc(t){let{system:e,origin:r,direction:n={x:0,y:0,z:0}}=t;for(let s=0;s<6;s+=1)e.spawn({position:{x:r.x+n.x*s*2,y:r.y+n.y*s*2,z:r.z+n.z*s*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})}var Zt=class{constructor(e){this.buffer=e,this.view=new DataView(e),this.offset=0}hasMore(){return this.offset<this.buffer.byteLength}readNextBlock(){if(this.offset+4>this.buffer.byteLength)return null;let e=this.view.getInt32(this.offset,!0);if(this.offset+=4,e<0||e>262144)return console.warn(`DemoReader: Invalid block length ${e} at offset ${this.offset-4}`),null;if(this.offset+e>this.buffer.byteLength)return console.warn(`DemoReader: Incomplete block. Expected ${e} bytes, but only ${this.buffer.byteLength-this.offset} remain.`),null;let r=this.buffer.slice(this.offset,this.offset+e);return this.offset+=e,{length:e,data:new ji(r)}}reset(){this.offset=0}getOffset(){return this.offset}};var k0=1,O0=2,D0=4,N0=8,H0=16,V0=32;var U0=128,G0=256,W0=512,X0=1024,K0=2048,Hc=4096,Vc=16384,Y0=32768,Uc=65536,q0=1<<17,Gc=1<<18,Wc=1<<19,$0=1<<20,j0=1<<21,Q0=1<<22,J0=1<<23,Z0=1<<24,Xc=1<<25,em=1<<26,tm=1<<27,Un=()=>({number:0,modelindex:0,modelindex2:0,modelindex3:0,modelindex4:0,frame:0,skinnum:0,effects:0,renderfx:0,origin:{x:0,y:0,z:0},old_origin:{x:0,y:0,z:0},angles:{x:0,y:0,z:0},sound:0,event:0,solid:0}),er=class{constructor(e){this.stream=e}parseMessage(){for(;this.stream.hasMore();){let e=this.stream.readByte();if(e===-1)break;switch(e){case j.nop:break;case j.disconnect:console.log("Server disconnected");break;case j.reconnect:console.log("Server reconnect");break;case j.print:let r=this.stream.readByte(),n=this.stream.readString();console.log(`[Server Print ${r}]: ${n}`);break;case j.serverdata:this.parseServerData();break;case j.configstring:this.parseConfigString();break;case j.spawnbaseline:this.parseSpawnBaseline();break;case j.centerprint:let s=this.stream.readString();console.log(`[Center Print]: ${s}`);break;case j.download:this.parseDownload();break;case j.frame:this.parseFrame();break;case j.packetentities:this.parsePacketEntities(!1);break;case j.deltapacketentities:this.parsePacketEntities(!0);break;case j.stufftext:let o=this.stream.readString();console.log(`[StuffText]: ${o}`);break;case j.layout:let i=this.stream.readString();break;case j.inventory:this.parseInventory();break;case j.sound:this.parseSound();break;case j.muzzleflash:this.parseMuzzleFlash();break;case j.muzzleflash2:this.parseMuzzleFlash2();break;case j.temp_entity:this.parseTempEntity();break;default:console.warn(`Unknown server command: ${e}`);return}}}parseServerData(){let e=this.stream.readLong(),r=this.stream.readLong(),n=this.stream.readByte(),s=this.stream.readString(),o=this.stream.readShort(),i=this.stream.readString();console.log(`Server Data: Protocol ${e}, Level ${i}, GameDir ${s}`)}parseConfigString(){let e=this.stream.readShort(),r=this.stream.readString()}parseDownload(){let e=this.stream.readShort(),r=this.stream.readByte();e>0&&this.stream.readData(e)}parseInventory(){for(let r=0;r<256;r++)this.stream.readShort()}parseSound(){let e=this.stream.readByte(),r=this.stream.readByte();if(e&1&&this.stream.readByte(),e&2&&this.stream.readByte(),e&16&&this.stream.readByte(),e&8&&this.stream.readShort(),e&4){let n={x:0,y:0,z:0};this.stream.readPos(n)}}parseMuzzleFlash(){let e=this.stream.readShort(),r=this.stream.readByte()}parseMuzzleFlash2(){let e=this.stream.readShort(),r=this.stream.readByte()}parseTempEntity(){let e=this.stream.readByte(),r={x:0,y:0,z:0},n={x:0,y:0,z:0},s={x:0,y:0,z:0};switch(e){case E.BLOOD:this.stream.readPos(r),this.stream.readDir(s);break;case E.GUNSHOT:case E.SPARKS:case E.BULLET_SPARKS:this.stream.readPos(r),this.stream.readDir(s);break;case E.SCREEN_SPARKS:case E.SHIELD_SPARKS:this.stream.readPos(r),this.stream.readDir(s);break;case E.SHOTGUN:this.stream.readPos(r),this.stream.readDir(s);break;case E.SPLASH:this.stream.readByte(),this.stream.readPos(r),this.stream.readDir(s),this.stream.readByte();break;case E.LASER_SPARKS:this.stream.readByte(),this.stream.readPos(r),this.stream.readDir(s),this.stream.readByte();break;case E.BLUEHYPERBLASTER:this.stream.readPos(r),this.stream.readPos(s);break;case E.BLASTER:this.stream.readPos(r),this.stream.readDir(s);break;case E.RAILTRAIL:this.stream.readPos(r),this.stream.readPos(n);break;case E.EXPLOSION2:case E.GRENADE_EXPLOSION:case E.GRENADE_EXPLOSION_WATER:this.stream.readPos(r);break;case E.PLASMA_EXPLOSION:this.stream.readPos(r);break;case E.EXPLOSION1:case E.EXPLOSION1_BIG:case E.ROCKET_EXPLOSION:case E.ROCKET_EXPLOSION_WATER:case E.EXPLOSION1_NP:this.stream.readPos(r);break;case E.BFG_EXPLOSION:this.stream.readPos(r);break;case E.BFG_BIGEXPLOSION:this.stream.readPos(r);break;case E.BFG_LASER:this.stream.readPos(r),this.stream.readPos(n);break;case E.BUBBLETRAIL:this.stream.readPos(r),this.stream.readPos(n);break;case E.PARASITE_ATTACK:case E.MEDIC_CABLE_ATTACK:this.stream.readShort(),this.stream.readPos(r),this.stream.readPos(n);break;case E.BOSSTPORT:this.stream.readPos(r);break;case E.GRAPPLE_CABLE:this.stream.readShort(),this.stream.readPos(r),this.stream.readPos(n),this.stream.readPos(s);break;case E.WELDING_SPARKS:this.stream.readByte(),this.stream.readPos(r),this.stream.readDir(s),this.stream.readByte();break;case E.GREENBLOOD:this.stream.readPos(r),this.stream.readDir(s);break;case E.TUNNEL_SPARKS:this.stream.readByte(),this.stream.readPos(r),this.stream.readDir(s),this.stream.readByte();break;case E.BLASTER2:case E.FLECHETTE:this.stream.readPos(r),this.stream.readDir(s);break;case E.LIGHTNING:this.stream.readShort(),this.stream.readShort(),this.stream.readPos(r),this.stream.readPos(n);break;case E.DEBUGTRAIL:this.stream.readPos(r),this.stream.readPos(n);break;case E.PLAIN_EXPLOSION:this.stream.readPos(r);break;case E.FLASHLIGHT:this.stream.readPos(r),this.stream.readShort();break;case E.FORCEWALL:this.stream.readPos(r),this.stream.readPos(n),this.stream.readByte();break;case E.HEATBEAM:this.stream.readShort(),this.stream.readPos(r),this.stream.readPos(n),this.stream.readPos(s);break;case E.MONSTER_HEATBEAM:this.stream.readShort(),this.stream.readPos(r),this.stream.readPos(n),this.stream.readPos(s);break;case E.HEATBEAM_SPARKS:this.stream.readPos(r),this.stream.readDir(s);break;case E.HEATBEAM_STEAM:this.stream.readPos(r),this.stream.readDir(s);break;case E.STEAM:this.stream.readShort()!==-1?(this.stream.readByte(),this.stream.readPos(r),this.stream.readDir(s),this.stream.readByte(),this.stream.readShort(),this.stream.readLong()):(this.stream.readByte(),this.stream.readPos(r),this.stream.readDir(s),this.stream.readByte(),this.stream.readShort());break;case E.BUBBLETRAIL2:this.stream.readPos(r),this.stream.readPos(n);break;case E.MOREBLOOD:this.stream.readPos(r),this.stream.readDir(s);break;case E.CHAINFIST_SMOKE:this.stream.readPos(r);break;case E.ELECTRIC_SPARKS:this.stream.readPos(r),this.stream.readDir(s);break;case E.TRACKER_EXPLOSION:this.stream.readPos(r);break;case E.TELEPORT_EFFECT:case E.DBALL_GOAL:this.stream.readPos(r);break;case E.WIDOWBEAMOUT:let i=this.stream.readShort();this.stream.readPos(r);break;case E.NUKEBLAST:this.stream.readPos(r);break;case E.WIDOWSPLASH:this.stream.readPos(r);break;default:console.warn(`CL_ParseTEnt: bad type ${e}`);break}}parseSpawnBaseline(){let e=this.parseEntityBits();this.parseDelta(Un(),Un(),e.number,e.bits)}parseFrame(){let e=this.stream.readLong(),r=this.stream.readLong(),n=this.stream.readByte(),s=this.stream.readByte();this.stream.readData(s);let o=this.stream.readByte();if(o!==j.playerinfo)throw new Error(`Expected svc_playerinfo after svc_frame, got ${o}`);this.parsePlayerState();let i=this.stream.readByte();if(i!==j.packetentities&&i!==j.deltapacketentities)throw new Error(`Expected svc_packetentities after svc_playerinfo, got ${i}`);this.parsePacketEntities(i===j.deltapacketentities)}parsePlayerState(){let e=this.stream.readShort();e&1&&this.stream.readByte(),e&2&&(this.stream.readShort(),this.stream.readShort(),this.stream.readShort()),e&4&&(this.stream.readShort(),this.stream.readShort(),this.stream.readShort()),e&8&&this.stream.readByte(),e&16&&this.stream.readByte(),e&32&&this.stream.readShort(),e&64&&(this.stream.readShort(),this.stream.readShort(),this.stream.readShort()),e&128&&(this.stream.readChar(),this.stream.readChar(),this.stream.readChar()),e&256&&(this.stream.readAngle16(),this.stream.readAngle16(),this.stream.readAngle16()),e&512&&(this.stream.readChar(),this.stream.readChar(),this.stream.readChar()),e&4096&&this.stream.readByte(),e&8192&&(this.stream.readByte(),this.stream.readChar(),this.stream.readChar(),this.stream.readChar(),this.stream.readChar(),this.stream.readChar(),this.stream.readChar()),e&1024&&(this.stream.readByte(),this.stream.readByte(),this.stream.readByte(),this.stream.readByte()),e&2048&&this.stream.readByte(),e&16384&&this.stream.readByte();let r=this.stream.readLong();for(let n=0;n<32;n++)r&1<<n&&this.stream.readShort()}parsePacketEntities(e){for(;;){let r=this.parseEntityBits();if(r.number===0)break;this.parseDelta(Un(),Un(),r.number,r.bits)}}parseEntityBits(){let e=this.stream.readByte();e&U0&&(e|=this.stream.readByte()<<8),e&Y0&&(e|=this.stream.readByte()<<16),e&J0&&(e|=this.stream.readByte()<<24);let r;return e&G0?r=this.stream.readShort():r=this.stream.readByte(),{number:r,bits:e}}parseDelta(e,r,n,s){r.number=e.number,r.modelindex=e.modelindex,r.modelindex2=e.modelindex2,r.modelindex3=e.modelindex3,r.modelindex4=e.modelindex4,r.frame=e.frame,r.skinnum=e.skinnum,r.effects=e.effects,r.renderfx=e.renderfx,r.origin.x=e.origin.x,r.origin.y=e.origin.y,r.origin.z=e.origin.z,r.old_origin.x=e.origin.x,r.old_origin.y=e.origin.y,r.old_origin.z=e.origin.z,r.angles.x=e.angles.x,r.angles.y=e.angles.y,r.angles.z=e.angles.z,r.sound=e.sound,r.event=e.event,r.solid=e.solid,r.number=n,s&K0&&(r.modelindex=this.stream.readByte()),s&$0&&(r.modelindex2=this.stream.readByte()),s&j0&&(r.modelindex3=this.stream.readByte()),s&Q0&&(r.modelindex4=this.stream.readByte()),s&H0&&(r.frame=this.stream.readByte()),s&q0&&(r.frame=this.stream.readShort()),s&Uc&&s&Xc?r.skinnum=this.stream.readLong():s&Uc?r.skinnum=this.stream.readByte():s&Xc&&(r.skinnum=this.stream.readShort()),s&Vc&&s&Wc?r.effects=this.stream.readLong():s&Vc?r.effects=this.stream.readByte():s&Wc&&(r.effects=this.stream.readShort()),s&Hc&&s&Gc?r.renderfx=this.stream.readLong():s&Hc?r.renderfx=this.stream.readByte():s&Gc&&(r.renderfx=this.stream.readShort()),s&k0&&(r.origin.x=this.stream.readCoord()),s&O0&&(r.origin.y=this.stream.readCoord()),s&W0&&(r.origin.z=this.stream.readCoord()),s&X0&&(r.angles.x=this.stream.readAngle()),s&D0&&(r.angles.y=this.stream.readAngle()),s&N0&&(r.angles.z=this.stream.readAngle()),s&Z0&&this.stream.readPos(r.old_origin),s&em&&(r.sound=this.stream.readByte()),s&V0?r.event=this.stream.readByte():r.event=0,s&tm&&(r.solid=this.stream.readShort())}};var yo=(s=>(s[s.Stopped=0]="Stopped",s[s.Playing=1]="Playing",s[s.Paused=2]="Paused",s[s.Finished=3]="Finished",s))(yo||{}),Gn=class{constructor(){this.reader=null;this.state=0;this.playbackSpeed=1;this.accumulatedTime=0;this.frameDuration=100}loadDemo(e){this.reader=new Zt(e),this.state=0,this.accumulatedTime=0}play(){this.reader&&(this.state=1)}pause(){this.state===1&&(this.state=2)}stop(){this.state=0,this.reader&&this.reader.reset(),this.accumulatedTime=0}update(e){if(!(this.state!==1||!this.reader))for(this.accumulatedTime+=e*1e3*this.playbackSpeed;this.accumulatedTime>=this.frameDuration;){if(!this.reader.hasMore()){this.state=3;return}let r=this.reader.readNextBlock();if(!r){this.state=3;return}new er(r.data).parseMessage(),this.accumulatedTime-=this.frameDuration}}getState(){return this.state}};function rm(t){return{init(){t.trace({x:0,y:0,z:0},{x:0,y:0,z:0})},shutdown(){},createMainLoop(e,r){return new Rt(e,r)}}}return tl(nm);})();
|
|
317
317
|
//# sourceMappingURL=index.global.js.map
|