quake2ts 0.0.577 → 0.0.580

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/package.json +3 -3
  2. package/packages/client/dist/browser/index.global.js +16 -16
  3. package/packages/client/dist/browser/index.global.js.map +1 -1
  4. package/packages/client/dist/cjs/index.cjs +0 -1
  5. package/packages/client/dist/cjs/index.cjs.map +1 -1
  6. package/packages/client/dist/esm/index.js +0 -1
  7. package/packages/client/dist/esm/index.js.map +1 -1
  8. package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
  9. package/packages/engine/dist/browser/index.global.js +11 -11
  10. package/packages/engine/dist/browser/index.global.js.map +1 -1
  11. package/packages/engine/dist/cjs/index.cjs +4 -167
  12. package/packages/engine/dist/cjs/index.cjs.map +1 -1
  13. package/packages/engine/dist/esm/index.js +4 -167
  14. package/packages/engine/dist/esm/index.js.map +1 -1
  15. package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
  16. package/packages/engine/dist/types/assets/md2.d.ts +5 -1
  17. package/packages/engine/dist/types/assets/md2.d.ts.map +1 -1
  18. package/packages/engine/dist/types/render/renderer.d.ts +1 -0
  19. package/packages/engine/dist/types/render/renderer.d.ts.map +1 -1
  20. package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
  21. package/packages/test-utils/dist/index.cjs +242 -147
  22. package/packages/test-utils/dist/index.cjs.map +1 -1
  23. package/packages/test-utils/dist/index.d.cts +146 -2
  24. package/packages/test-utils/dist/index.d.ts +146 -2
  25. package/packages/test-utils/dist/index.js +241 -147
  26. package/packages/test-utils/dist/index.js.map +1 -1
  27. package/packages/tools/dist/browser/index.global.js +212 -2
  28. package/packages/tools/dist/browser/index.global.js.map +1 -1
  29. package/packages/tools/dist/cjs/index.cjs +971 -2
  30. package/packages/tools/dist/cjs/index.cjs.map +1 -1
  31. package/packages/tools/dist/esm/index.js +969 -1
  32. package/packages/tools/dist/esm/index.js.map +1 -1
  33. package/packages/tools/dist/tsconfig.tsbuildinfo +1 -1
  34. package/packages/tools/dist/types/bspTools.d.ts +9 -0
  35. package/packages/tools/dist/types/bspTools.d.ts.map +1 -0
  36. package/packages/tools/dist/types/index.d.ts +1 -0
  37. package/packages/tools/dist/types/index.d.ts.map +1 -1
@@ -1,7 +1,7 @@
1
- "use strict";var Quake2Engine=(()=>{var Oh=Object.create;var ta=Object.defineProperty;var Nh=Object.getOwnPropertyDescriptor;var Uh=Object.getOwnPropertyNames;var Hh=Object.getPrototypeOf,Vh=Object.prototype.hasOwnProperty;var Gh=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),$o=(t,e)=>{for(var r in e)ta(t,r,{get:e[r],enumerable:!0})},nd=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Uh(e))!Vh.call(t,i)&&i!==r&&ta(t,i,{get:()=>e[i],enumerable:!(n=Nh(e,i))||n.enumerable});return t};var Wh=(t,e,r)=>(r=t!=null?Oh(Hh(t)):{},nd(e||!t||!t.__esModule?ta(r,"default",{value:t,enumerable:!0}):r,t)),Xh=t=>nd(ta({},"__esModule",{value:!0}),t);var Hd=Gh((Y_,Ud)=>{"use strict";Ud.exports=Worker});var jb={};$o(jb,{ATTN_IDLE:()=>ol,ATTN_LOOP_NONE:()=>sl,ATTN_NONE:()=>vi,ATTN_NORM:()=>al,ATTN_STATIC:()=>ll,AssetDependencyError:()=>an,AssetDependencyTracker:()=>Ss,AssetManager:()=>Ja,AssetPreviewGenerator:()=>Xo,AudioApi:()=>Ln,AudioContextController:()=>eo,AudioOcclusion:()=>Ms,AudioRegistry:()=>jn,AudioRegistryError:()=>_s,AudioSystem:()=>oo,BSP_SURFACE_FRAGMENT_SOURCE:()=>Zl,BSP_SURFACE_VERTEX_SOURCE:()=>$l,BSP_VERTEX_LAYOUT:()=>Wl,BspLoader:()=>Cn,BspParseError:()=>Q,BspSurfacePipeline:()=>ho,Camera:()=>bo,Command:()=>yi,CommandRegistry:()=>yn,ConfigStringRegistry:()=>En,Cvar:()=>wi,CvarRegistry:()=>An,DemoAnalyzer:()=>mi,DemoCameraMode:()=>Kc,DemoClipper:()=>Wo,DemoEventType:()=>Xc,DemoPlaybackController:()=>Vt,DemoReader:()=>je,DemoRecorder:()=>Zs,DemoValidator:()=>Ho,DynamicLightManager:()=>fo,EngineHost:()=>Mn,EngineRuntime:()=>Si,FileType:()=>$c,FixedTimestepLoop:()=>Ur,Framebuffer:()=>co,IndexBuffer:()=>_e,LruCache:()=>Xt,MAX_SOUND_CHANNELS:()=>_i,MD2_FRAGMENT_SHADER:()=>tc,MD2_VERTEX_SHADER:()=>ec,MD3_FRAGMENT_SHADER:()=>dc,MD3_VERTEX_SHADER:()=>cc,MapAnalyzer:()=>Ko,Md2Loader:()=>In,Md2MeshBuffers:()=>po,Md2ParseError:()=>ye,Md2Pipeline:()=>go,Md3Loader:()=>kn,Md3ModelMesh:()=>xo,Md3ParseError:()=>Ge,Md3Pipeline:()=>_o,Md3SurfaceMesh:()=>Ls,MusicSystem:()=>lo,NetworkMessageParser:()=>it,PARTICLE_FRAGMENT_SHADER:()=>fc,PARTICLE_VERTEX_SHADER:()=>uc,PROTOCOL_VERSION_RERELEASE:()=>hi,PakArchive:()=>Tn,PakIndexStore:()=>Qa,PakIngestionError:()=>Wt,PakParseError:()=>fe,PakValidationError:()=>Gr,PakValidator:()=>fa,PakWriter:()=>ca,ParticleRenderer:()=>wo,ParticleSystem:()=>vo,PlaybackState:()=>Uo,RERELEASE_KNOWN_PAKS:()=>hl,ResourceLoadTracker:()=>da,ResourceType:()=>fl,SKYBOX_FRAGMENT_SHADER:()=>Ql,SKYBOX_VERTEX_SHADER:()=>jl,SOUND_FULLVOLUME:()=>wn,SOUND_LOOP_ATTENUATE:()=>cl,ShaderProgram:()=>Te,SkyboxPipeline:()=>mo,SoundChannel:()=>at,SoundPrecache:()=>no,SoundRegistry:()=>ro,SpriteLoader:()=>Rn,SpriteParseError:()=>Kt,StreamingPakArchive:()=>la,Texture2D:()=>Qn,TextureCache:()=>Pn,TextureCubeMap:()=>Jn,TgaParseError:()=>Mt,U_ALPHA:()=>Mr,U_ANGLE1:()=>Sr,U_ANGLE2:()=>br,U_ANGLE3:()=>xr,U_EFFECTS16:()=>wt,U_EFFECTS8:()=>xt,U_EVENT:()=>vr,U_FRAME16:()=>Er,U_FRAME8:()=>_r,U_INSTANCE_BITS:()=>Fr,U_LOOP_ATTENUATION_HIGH:()=>Br,U_LOOP_VOLUME:()=>zr,U_MODEL:()=>Ar,U_MODEL2:()=>Lr,U_MODEL3:()=>Tr,U_MODEL4:()=>Cr,U_OLDORIGIN:()=>Ir,U_OLD_FRAME_HIGH:()=>Or,U_ORIGIN1:()=>gr,U_ORIGIN2:()=>yr,U_ORIGIN3:()=>wr,U_OWNER_HIGH:()=>Dr,U_REMOVE:()=>$s,U_RENDERFX16:()=>vt,U_RENDERFX8:()=>bt,U_SCALE:()=>Pr,U_SKIN16:()=>St,U_SKIN8:()=>_t,U_SOLID:()=>Rr,U_SOUND:()=>kr,VertexArray:()=>Pe,VertexBuffer:()=>Ce,VirtualFileSystem:()=>ua,advanceAnimation:()=>zd,applyEntityDelta:()=>Go,applySurfaceState:()=>Cu,attenuationToDistanceMultiplier:()=>Sn,boxIntersectsFrustum:()=>Es,buildBspGeometry:()=>wu,buildMd2Geometry:()=>rc,buildMd2VertexData:()=>nc,buildMd3SurfaceGeometry:()=>oc,buildMd3VertexData:()=>lc,calculateMaxAudibleDistance:()=>Vr,calculatePakChecksum:()=>_d,computeFrameBlend:()=>Bd,computeSkyScroll:()=>Ru,createAnimationState:()=>Dd,createAudioGraph:()=>to,createBspSurfaces:()=>vu,createEmptyEntityState:()=>Ht,createEmptyProtocolPlayerState:()=>pn,createEngine:()=>qb,createEngineRuntime:()=>bd,createFaceLightmap:()=>ma,createInitialChannels:()=>io,createOcclusionResolver:()=>yu,createProgramFromSources:()=>_u,createWebGLContext:()=>bu,decodeOgg:()=>ja,deriveSurfaceRenderState:()=>ql,detectFileType:()=>Zc,extractFrustumPlanes:()=>Su,filesToPakSources:()=>ml,findLeafForPoint:()=>Kl,gatherVisibleFaces:()=>Lu,groupMd2Animations:()=>kd,ingestPakFiles:()=>Ad,ingestPaks:()=>ha,interpolateMd3Tag:()=>qu,interpolateVec3:()=>Od,isBinaryFile:()=>kh,isTextFile:()=>Yc,parseBsp:()=>Ai,parseEntLump:()=>Ph,parseMd2:()=>pl,parseMd3:()=>gl,parsePcx:()=>Ti,parseSprite:()=>yl,parseTga:()=>bl,parseWal:()=>ga,parseWalTexture:()=>xa,parseWav:()=>_a,pcxToRgba:()=>ya,pickChannel:()=>so,preparePcxTexture:()=>ba,removeViewTranslation:()=>ku,resolveLightStyles:()=>Yl,serializeEntLump:()=>Fh,spawnBfgExplosion:()=>cf,spawnBlasterImpact:()=>lf,spawnBlood:()=>Ju,spawnBulletImpact:()=>ju,spawnExplosion:()=>Qu,spawnMuzzleFlash:()=>tf,spawnRailTrail:()=>af,spawnSparks:()=>of,spawnSplash:()=>nf,spawnSteam:()=>sf,spawnTeleportFlash:()=>ef,spawnTrail:()=>rf,validateEntity:()=>zh,walToRgba:()=>xl,wireDropTarget:()=>Md,wireFileInput:()=>Ed});var Kh=()=>typeof performance<"u"?performance.now():Date.now(),$h=t=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>t()):setTimeout(t,25)},Ur=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,i=r.maxSubSteps??5;this.options={fixedDeltaMs:n,maxSubSteps:i,maxDeltaMs:r.maxDeltaMs??n*i,startTimeMs:r.startTimeMs,now:r.now??Kh,schedule:r.schedule??$h}}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 i=0;for(;this.accumulatorMs>=this.options.fixedDeltaMs&&i<this.options.maxSubSteps;)this.frame+=1,this.callbacks.simulate({frame:this.frame,deltaMs:this.options.fixedDeltaMs,nowMs:r}),this.accumulatorMs-=this.options.fixedDeltaMs,i+=1;let s=this.options.fixedDeltaMs===0?0:this.accumulatorMs/this.options.fixedDeltaMs;this.callbacks.render?.({alpha:s,nowMs:r,accumulatorMs:this.accumulatorMs,frame:this.frame})}};var yi=class{constructor(e,r,n){this.name=e,this.callback=r,this.description=n}execute(e){this.callback(e)}},yn=class{constructor(){this.commands=new Map;this.history=[];this.historyLimit=64;this.autocompleteProviders=[]}register(e,r,n){let i=new yi(e,r,n);return this.commands.set(e,i),i}registerCommand(e,r){this.register(e,r)}registerAutocompleteProvider(e){this.autocompleteProviders.push(e)}get(e){return this.commands.get(e)}execute(e){let r=e.trim();if(r.length===0)return!1;(this.history.length===0||this.history[this.history.length-1]!==r)&&(this.history.push(r),this.history.length>this.historyLimit&&this.history.shift());let n=this.tokenize(e);if(n.length===0)return!1;let i=n[0],s=n.slice(1),a=this.get(i);return a?(a.execute(s),!0):(this.onConsoleOutput?.(`Unknown command "${i}"`),!1)}executeCommand(e){this.execute(e)}getHistory(){return[...this.history]}getSuggestions(e){let r=new Set;for(let n of this.commands.keys())n.startsWith(e)&&r.add(n);for(let n of this.autocompleteProviders){let i=n();for(let s of i)s.startsWith(e)&&r.add(s)}return Array.from(r).sort()}tokenize(e){let r=[],n="",i=!1;for(let s=0;s<e.length;s++){let a=e[s];a==='"'?i=!i:a===" "&&!i?n.length>0&&(r.push(n),n=""):n+=a}return n.length>0&&r.push(n),r}list(){return[...this.commands.values()].sort((e,r)=>e.name.localeCompare(r.name))}};var Zh=Object.defineProperty,Yh=(t,e)=>{for(var r in e)Zh(t,r,{get:e[r],enumerable:!0})},id={x:0,y:0,z:0};var tx=Math.PI/180;function sd(t,e){return{x:t.x-e.x,y:t.y-e.y,z:t.z-e.z}}function qh(t,e){return{x:t.x*e,y:t.y*e,z:t.z*e}}function jh(t,e){return t.x*e.x+t.y*e.y+t.z*e.z}function Qh(t){return jh(t,t)}function Yo(t){return Math.sqrt(Qh(t))}function At(t){let e=Yo(t);return e===0?t:qh(t,1/e)}var Jh=Math.PI/180,e0=180/Math.PI,_n=Jh,qo=e0;var bn=[[-.525731,0,.850651],[-.442863,.238856,.864188],[-.295242,0,.955423],[-.309017,.5,.809017],[-.16246,.262866,.951056],[0,0,1],[0,.850651,.525731],[-.147621,.716567,.681718],[.147621,.716567,.681718],[0,.525731,.850651],[.309017,.5,.809017],[.525731,0,.850651],[.295242,0,.955423],[.442863,.238856,.864188],[.16246,.262866,.951056],[-.681718,.147621,.716567],[-.809017,.309017,.5],[-.587785,.425325,.688191],[-.850651,.525731,0],[-.864188,.442863,.238856],[-.716567,.681718,.147621],[-.688191,.587785,.425325],[-.5,.809017,.309017],[-.238856,.864188,.442863],[-.425325,.688191,.587785],[-.716567,.681718,-.147621],[-.5,.809017,-.309017],[-.525731,.850651,0],[0,.850651,-.525731],[-.238856,.864188,-.442863],[0,.955423,-.295242],[-.262866,.951056,-.16246],[0,1,0],[0,.955423,.295242],[-.262866,.951056,.16246],[.238856,.864188,.442863],[.262866,.951056,.16246],[.5,.809017,.309017],[.238856,.864188,-.442863],[.262866,.951056,-.16246],[.5,.809017,-.309017],[.850651,.525731,0],[.716567,.681718,.147621],[.716567,.681718,-.147621],[.525731,.850651,0],[.425325,.688191,.587785],[.864188,.442863,.238856],[.688191,.587785,.425325],[.809017,.309017,.5],[.681718,.147621,.716567],[.587785,.425325,.688191],[.955423,.295242,0],[1,0,0],[.951056,.16246,.262866],[.850651,-.525731,0],[.955423,-.295242,0],[.864188,-.442863,.238856],[.951056,-.16246,.262866],[.809017,-.309017,.5],[.681718,-.147621,.716567],[.850651,0,.525731],[.864188,.442863,-.238856],[.809017,.309017,-.5],[.951056,.16246,-.262866],[.525731,0,-.850651],[.681718,.147621,-.716567],[.681718,-.147621,-.716567],[.850651,0,-.525731],[.809017,-.309017,-.5],[.864188,-.442863,-.238856],[.951056,-.16246,-.262866],[.147621,.716567,-.681718],[.309017,.5,-.809017],[.425325,.688191,-.587785],[.442863,.238856,-.864188],[.587785,.425325,-.688191],[.688191,.587785,-.425325],[-.147621,.716567,-.681718],[-.309017,.5,-.809017],[0,.525731,-.850651],[-.525731,0,-.850651],[-.442863,.238856,-.864188],[-.295242,0,-.955423],[-.16246,.262866,-.951056],[0,0,-1],[.295242,0,-.955423],[.16246,.262866,-.951056],[-.442863,-.238856,-.864188],[-.309017,-.5,-.809017],[-.16246,-.262866,-.951056],[0,-.850651,-.525731],[-.147621,-.716567,-.681718],[.147621,-.716567,-.681718],[0,-.525731,-.850651],[.309017,-.5,-.809017],[.442863,-.238856,-.864188],[.16246,-.262866,-.951056],[.238856,-.864188,-.442863],[.5,-.809017,-.309017],[.425325,-.688191,-.587785],[.716567,-.681718,-.147621],[.688191,-.587785,-.425325],[.587785,-.425325,-.688191],[0,-.955423,-.295242],[0,-1,0],[.262866,-.951056,-.16246],[0,-.850651,.525731],[0,-.955423,.295242],[.238856,-.864188,.442863],[.262866,-.951056,.16246],[.5,-.809017,.309017],[.716567,-.681718,.147621],[.525731,-.850651,0],[-.238856,-.864188,-.442863],[-.5,-.809017,-.309017],[-.262866,-.951056,-.16246],[-.850651,-.525731,0],[-.716567,-.681718,-.147621],[-.716567,-.681718,.147621],[-.525731,-.850651,0],[-.5,-.809017,.309017],[-.238856,-.864188,.442863],[-.262866,-.951056,.16246],[-.864188,-.442863,.238856],[-.809017,-.309017,.5],[-.688191,-.587785,.425325],[-.681718,-.147621,.716567],[-.442863,-.238856,.864188],[-.587785,-.425325,.688191],[-.309017,-.5,.809017],[-.147621,-.716567,.681718],[-.425325,-.688191,.587785],[-.16246,-.262866,.951056],[.442863,-.238856,.864188],[.16246,-.262866,.951056],[.309017,-.5,.809017],[.147621,-.716567,.681718],[0,-.525731,.850651],[.425325,-.688191,.587785],[.587785,-.425325,.688191],[.688191,-.587785,.425325],[-.955423,.295242,0],[-.951056,.16246,.262866],[-1,0,0],[-.850651,0,.525731],[-.955423,-.295242,0],[-.951056,-.16246,.262866],[-.864188,.442863,-.238856],[-.951056,.16246,-.262866],[-.809017,.309017,-.5],[-.864188,-.442863,-.238856],[-.951056,-.16246,-.262866],[-.809017,-.309017,-.5],[-.681718,.147621,-.716567],[-.681718,-.147621,-.716567],[-.850651,0,-.525731],[-.688191,.587785,-.425325],[-.587785,.425325,-.688191],[-.425325,.688191,-.587785],[-.425325,-.688191,-.587785],[-.587785,-.425325,-.688191],[-.688191,-.587785,-.425325]];function t0(){return new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])}function ad(t,e){let r=e.x,n=e.y,i=e.z;return{x:t[0]*r+t[4]*n+t[8]*i+t[12],y:t[1]*r+t[5]*n+t[9]*i+t[13],z:t[2]*r+t[6]*n+t[10]*i+t[14]}}function od(t,e){let r=t0();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 st=1,Gt=2;var jo=8,Qo=16,r0=32;var n0=16384;var ra=65536,ld=1<<17,i0=1<<18,s0=1<<19,a0=1<<20,o0=1<<21,l0=1<<22,c0=1<<23,rx=1<<24,na=1<<25,d0=1<<26,nx=1<<27,ix=1<<28,sx=1<<29,ia=1<<30,ax=1<<31;var xi=0;var cd=4,dd=8,ud=16,fd=32,hd=64;var ox=1<<25,lx=1<<28,cx=1<<29,dx=1<<30,ux=1<<31;var fx=st|Gt,hx=st|ra|Gt|na|ia,mx=st|ra|Gt,px=st|ld|Gt|na|ia,gx=r0|jo|Qo,yx=st|Qo|jo,u0=st|na|ia|Gt|d0,bx=i0|s0|a0|o0|l0|c0,xx=st|jo|Qo|na|ia,_x=st|ra|Gt,vx=st|Gt,wx=st|ra|Gt|ld,Sx=u0|n0;var Ax=Number.MAX_SAFE_INTEGER-1;var sa=(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))(sa||{});var aa=256;var Jo=256,el=8192,oa=2048,tl=512,rl=256,nl=aa*2,il=256,Zo=32,bi=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.HealthBarName=55]="HealthBarName",t[t.CONFIG_N64_PHYSICS=56]="CONFIG_N64_PHYSICS",t[t.CONFIG_CTF_TEAMS=57]="CONFIG_CTF_TEAMS",t[t.CONFIG_COOP_RESPAWN_STRING=58]="CONFIG_COOP_RESPAWN_STRING",t[t.Story=54]="Story",t[t.AirAccel=59]="AirAccel",t[t.MaxClients=60]="MaxClients",t[t.MapChecksum=61]="MapChecksum",t[t.Models=62]="Models",t[t.Sounds=62+el]="Sounds",t[t.Images=t.Sounds+oa]="Images",t[t.Lights=t.Images+tl]="Lights",t[t.ShadowLights=t.Lights+Jo]="ShadowLights",t[t.Items=t.ShadowLights+il]="Items",t[t.Players=t.Items+rl]="Players",t[t.PlayerSkins=t.Players]="PlayerSkins",t[t.General=t.Players+aa]="General",t[t.WheelWeapons=t.General+nl]="WheelWeapons",t[t.WheelAmmo=t.WheelWeapons+Zo]="WheelAmmo",t[t.WheelPowerups=t.WheelAmmo+Zo]="WheelPowerups",t[t.CdLoopCount=t.WheelPowerups+Zo]="CdLoopCount",t[t.GameStyle=t.CdLoopCount+1]="GameStyle",t[t.MaxConfigStrings=t.GameStyle+1]="MaxConfigStrings",t))(X||{}),md=X.MaxConfigStrings;function pd(t){return t>=5&&t<59?bi*(59-t):t>=X.General&&t<X.WheelWeapons?bi*(X.MaxConfigStrings-t):bi}var Mx=X.Sounds,Ex=X.Images,Lx=X.Lights,Tx=X.Items,Cx=X.Players,Ix=X.General,f0={};Yh(f0,{addReplayFrame:()=>g0,createReplaySession:()=>p0,deserializeReplay:()=>m0,serializeReplay:()=>h0});function h0(t){return JSON.stringify(t,null,2)}function m0(t){let e=JSON.parse(t);if(!e.metadata||!Array.isArray(e.frames))throw new Error("Invalid replay format: missing metadata or frames");return e}function p0(t,e){return{metadata:{map:t,date:new Date().toISOString(),version:"1.0",seed:e},frames:[]}}function g0(t,e,r,n){t.frames.push({serverFrame:r,cmd:e,timestamp:Date.now()-n})}var M=(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[t.splitclient=21]="splitclient",t[t.configblast=22]="configblast",t[t.spawnbaselineblast=23]="spawnbaselineblast",t[t.level_restart=24]="level_restart",t[t.damage=25]="damage",t[t.locprint=26]="locprint",t[t.fog=27]="fog",t[t.waitingforplayers=28]="waitingforplayers",t[t.bot_chat=29]="bot_chat",t[t.poi=30]="poi",t[t.help_path=31]="help_path",t[t.muzzleflash3=32]="muzzleflash3",t[t.achievement=33]="achievement",t))(M||{});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[t.BLUEHYPERBLASTER_KEX=56]="BLUEHYPERBLASTER_KEX",t[t.BFG_ZAP=57]="BFG_ZAP",t[t.BERSERK_SLAM=58]="BERSERK_SLAM",t[t.GRAPPLE_CABLE_2=59]="GRAPPLE_CABLE_2",t[t.POWER_SPLASH=60]="POWER_SPLASH",t[t.LIGHTNING_BEAM=61]="LIGHTNING_BEAM",t[t.EXPLOSION1_NL=62]="EXPLOSION1_NL",t[t.EXPLOSION2_NL=63]="EXPLOSION2_NL",t))(E||{});var y0=12,b0=9,kx=Math.ceil(y0*b0/16),x0=23,_0=2,Rx=Math.ceil(x0*_0/16);var Px=1<<17,Fx=1<<18,zx=1<<19,Bx=1<<20,Dx=1<<21,Ox=1<<22,Nx=1<<23,Ux=1<<24,Hx=1<<25,Vx=1<<26,Gx=1<<27,Wx=1<<28,Xx=1<<29,Kx=1<<30;var vn=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}getReadPosition(){return this.offset}getLength(){return this.length}getRemaining(){return this.length-this.offset}seek(t){if(t<0||t>this.length)throw new Error(`Seek out of bounds: ${t} (length: ${this.length})`);this.offset=t}setReadPosition(t){this.seek(t)}hasMore(){return this.offset<this.length}hasBytes(t){return this.offset+t<=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}readUShort(){let t=this.view.getUint16(this.offset,!0);return this.offset+=2,t}readLong(){let t=this.view.getInt32(this.offset,!0);return this.offset+=4,t}readULong(){let t=this.view.getUint32(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){let e=this.readByte();if(e>=162){t.x=0,t.y=0,t.z=0;return}let r=bn[e];t.x=r[0],t.y=r[1],t.z=r[2]}},Hr=class{constructor(t=1400){typeof t=="number"?(this.buffer=new Uint8Array(t),this.fixed=!1):(this.buffer=t,this.fixed=!0),this.view=new DataView(this.buffer.buffer,this.buffer.byteOffset,this.buffer.byteLength),this.offset=0}ensureSpace(t){if(this.offset+t>this.buffer.byteLength){if(this.fixed)throw new Error(`Buffer overflow: capacity ${this.buffer.byteLength}, needed ${this.offset+t}`);let e=Math.max(this.buffer.byteLength*2,this.offset+t),r=new Uint8Array(e);r.set(this.buffer),this.buffer=r,this.view=new DataView(this.buffer.buffer,this.buffer.byteOffset,this.buffer.byteLength)}}writeByte(t){this.ensureSpace(1),this.view.setUint8(this.offset,t),this.offset+=1}writeBytes(t){this.ensureSpace(t.byteLength),this.buffer.set(t,this.offset),this.offset+=t.byteLength}writeChar(t){this.ensureSpace(1),this.view.setInt8(this.offset,t),this.offset+=1}writeShort(t){this.ensureSpace(2),this.view.setInt16(this.offset,t,!0),this.offset+=2}writeLong(t){this.ensureSpace(4),this.view.setInt32(this.offset,t,!0),this.offset+=4}writeFloat(t){this.ensureSpace(4),this.view.setFloat32(this.offset,t,!0),this.offset+=4}writeString(t){let e=t.length;this.ensureSpace(e+1);for(let r=0;r<e;r++)this.view.setUint8(this.offset+r,t.charCodeAt(r));this.view.setUint8(this.offset+e,0),this.offset+=e+1}writeCoord(t){this.writeShort(Math.trunc(t*8))}writeAngle(t){this.writeByte(Math.trunc(t*256/360)&255)}writeAngle16(t){this.writeShort(Math.trunc(t*65536/360)&65535)}writePos(t){this.writeCoord(t.x),this.writeCoord(t.y),this.writeCoord(t.z)}writeDir(t){let e=-1,r=0;if(t.x===0&&t.y===0&&t.z===0){this.writeByte(0);return}for(let n=0;n<bn.length;n++){let i=bn[n],s=t.x*i[0]+t.y*i[1]+t.z*i[2];s>e&&(e=s,r=n)}this.writeByte(r)}getData(){return this.buffer.slice(0,this.offset)}getBuffer(){return this.buffer}getOffset(){return this.offset}reset(){this.offset=0}};var xn=class ge{constructor(){this.qport=0,this.incomingSequence=0,this.outgoingSequence=0,this.incomingAcknowledged=0,this.incomingReliableAcknowledged=!1,this.incomingReliableSequence=0,this.outgoingReliableSequence=0,this.reliableLength=0,this.fragmentSendOffset=0,this.fragmentBuffer=null,this.fragmentLength=0,this.fragmentReceived=0,this.lastReceived=0,this.lastSent=0,this.remoteAddress=null,this.reliableMessage=new Hr(ge.MAX_RELIABLE_BUFFER);let e=Date.now();this.lastReceived=e,this.lastSent=e,this.qport=Math.floor(Math.random()*65536)}setup(e,r=null){this.qport=e,this.remoteAddress=r,this.reset()}reset(){this.incomingSequence=0,this.outgoingSequence=0,this.incomingAcknowledged=0,this.incomingReliableAcknowledged=!1,this.incomingReliableSequence=0,this.outgoingReliableSequence=0,this.reliableLength=0,this.reliableMessage.reset(),this.fragmentSendOffset=0,this.fragmentBuffer=null,this.fragmentLength=0,this.fragmentReceived=0,this.lastReceived=Date.now(),this.lastSent=Date.now()}transmit(e){this.outgoingSequence++,this.lastSent=Date.now();let r=0,n=!1,i=0;this.reliableLength>0&&(this.reliableLength>ge.FRAGMENT_SIZE?(n=!0,this.fragmentSendOffset>=this.reliableLength&&(this.fragmentSendOffset=0),r=this.reliableLength-this.fragmentSendOffset,r>ge.FRAGMENT_SIZE&&(r=ge.FRAGMENT_SIZE),i=this.fragmentSendOffset,this.fragmentSendOffset+=r):r=this.reliableLength);let s=ge.PACKET_HEADER,a=r>0?2+(n?8:0):0,o=e?e.length:0;s+a+r+o>ge.MAX_MSGLEN&&(o=ge.MAX_MSGLEN-s-a-r,o<0&&(o=0));let d=new ArrayBuffer(s+a+r+o),l=new DataView(d),c=new Uint8Array(d),f=this.outgoingSequence;r>0&&(f|=2147483648,(this.outgoingReliableSequence&1)!==0&&(f|=1073741824)),l.setUint32(0,f,!0);let u=this.incomingSequence;(this.incomingReliableSequence&1)!==0&&(u|=2147483648),l.setUint32(4,u,!0),l.setUint16(8,this.qport,!0);let h=s;if(r>0){let m=r;n&&(m|=32768),l.setUint16(h,m,!0),h+=2,n&&(l.setUint32(h,i,!0),h+=4,l.setUint32(h,this.reliableLength,!0),h+=4);let p=this.reliableMessage.getBuffer().subarray(i,i+r);c.set(p,h),h+=r}if(e&&o>0){let m=e.slice(0,o);c.set(m,h)}return c}process(e){if(e.length<ge.PACKET_HEADER)return null;this.lastReceived=Date.now();let r=new DataView(e.buffer,e.byteOffset,e.byteLength),n=r.getUint32(0,!0),i=r.getUint32(4,!0),s=r.getUint16(8,!0);if(this.qport!==s)return null;let a=n&1073741823;if((a-this.incomingSequence|0)<=0)return null;this.incomingSequence=a;let o=i&2147483647,d=(i&2147483648)!==0;if(o>this.incomingAcknowledged&&(this.incomingAcknowledged=o),this.reliableLength>0){let m=d?1:0,g=this.outgoingReliableSequence&1;m!==g&&(this.reliableLength=0,this.reliableMessage.reset(),this.outgoingReliableSequence^=1,this.fragmentSendOffset=0)}let l=(n&2147483648)!==0,c=(n&1073741824)!==0?1:0,f=ge.PACKET_HEADER,u=null;if(l){if(f+2>e.byteLength)return null;let m=r.getUint16(f,!0);f+=2;let g=(m&32768)!==0;m&=32767;let p=this.incomingReliableSequence&1;if(c===p)if(g){if(f+8>e.byteLength)return null;let y=r.getUint32(f,!0);f+=4;let _=r.getUint32(f,!0);if(f+=4,_>ge.MAX_RELIABLE_BUFFER)return console.warn(`NetChan: received invalid fragment total ${_} > ${ge.MAX_RELIABLE_BUFFER}`),null;if((!this.fragmentBuffer||this.fragmentBuffer.length!==_)&&(this.fragmentBuffer=new Uint8Array(_),this.fragmentLength=_,this.fragmentReceived=0),f+m>e.byteLength)return null;let x=e.subarray(f,f+m);y===this.fragmentReceived&&y+m<=_&&(this.fragmentBuffer.set(x,y),this.fragmentReceived+=m,this.fragmentReceived>=_&&(u=this.fragmentBuffer,this.incomingReliableSequence++,this.fragmentBuffer=null,this.fragmentLength=0,this.fragmentReceived=0))}else{if(this.incomingReliableSequence++,f+m>e.byteLength)return null;u=e.slice(f,f+m)}f+=m}let h=e.slice(f);if(u&&u.length>0){let m=u.length+h.length,g=new Uint8Array(m);return g.set(u,0),g.set(h,u.length),g}return h||new Uint8Array(0)}canSendReliable(){return this.reliableLength===0}writeReliableByte(e){if(this.reliableLength+1>ge.MAX_RELIABLE_BUFFER)throw new Error("NetChan reliable buffer overflow");this.reliableMessage.writeByte(e),this.reliableLength++}writeReliableShort(e){if(this.reliableLength+2>ge.MAX_RELIABLE_BUFFER)throw new Error("NetChan reliable buffer overflow");this.reliableMessage.writeShort(e),this.reliableLength+=2}writeReliableLong(e){if(this.reliableLength+4>ge.MAX_RELIABLE_BUFFER)throw new Error("NetChan reliable buffer overflow");this.reliableMessage.writeLong(e),this.reliableLength+=4}writeReliableString(e){let r=e.length+1;if(this.reliableLength+r>ge.MAX_RELIABLE_BUFFER)throw new Error("NetChan reliable buffer overflow");this.reliableMessage.writeString(e),this.reliableLength+=r}getReliableData(){return this.reliableLength===0?new Uint8Array(0):this.reliableMessage.getBuffer().subarray(0,this.reliableLength)}needsKeepalive(e){return e-this.lastSent>1e3}isTimedOut(e,r=3e4){return e-this.lastReceived>r}};xn.MAX_MSGLEN=1400;xn.FRAGMENT_SIZE=1024;xn.PACKET_HEADER=10;xn.HEADER_OVERHEAD=xn.PACKET_HEADER+2;xn.MAX_RELIABLE_BUFFER=262144;var gd=(t=>(t[t.Bullets=0]="Bullets",t[t.Shells=1]="Shells",t[t.Rockets=2]="Rockets",t[t.Grenades=3]="Grenades",t[t.Cells=4]="Cells",t[t.Slugs=5]="Slugs",t[t.MagSlugs=6]="MagSlugs",t[t.Trap=7]="Trap",t[t.Flechettes=8]="Flechettes",t[t.Tesla=9]="Tesla",t[t.Disruptor=10]="Disruptor",t[t.Prox=11]="Prox",t[t.Nuke=12]="Nuke",t[t.Rounds=13]="Rounds",t))(gd||{}),$x=Object.keys(gd).length/2;var _i=32,at=(t=>(t[t.Auto=0]="Auto",t[t.Weapon=1]="Weapon",t[t.Voice=2]="Voice",t[t.Item=3]="Item",t[t.Body=4]="Body",t[t.Aux=5]="Aux",t[t.Footstep=6]="Footstep",t[t.Aux3=7]="Aux3",t[t.NoPhsAdd=8]="NoPhsAdd",t[t.Reliable=16]="Reliable",t[t.ForcePos=32]="ForcePos",t))(at||{}),sl=-1,vi=0,al=1,ol=2,ll=3,wn=80,cl=.003;function Sn(t){return t*.001}function Vr(t){let e=Sn(t);return e<=0?Number.POSITIVE_INFINITY:wn+1/e}var wi=class{constructor({name:e,defaultValue:r,description:n,flags:i=sa.None,onChange:s}){this.modifiedCount=0;this.name=e,this.defaultValue=r,this.description=n,this.flags=i,this._value=r,this.onChange=s}get string(){return this._value}getString(){return this.string}get number(){return Number(this._value)}getFloat(){return this.number}get integer(){return Math.trunc(this.number)}getInt(){return this.integer}get boolean(){return!!this.integer}getBoolean(){return this.boolean}set(e){if(this.flags&sa.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)}},An=class{constructor(){this.cvars=new Map}register(e){let r=this.cvars.get(e.name);if(r)return r;let n=e.onChange,i=(a,o)=>{n?.(a,o),this.onCvarChange?.(a.name,a.string)},s=new wi({...e,onChange:i});return this.cvars.set(e.name,s),s}get(e){return this.cvars.get(e)}getCvar(e){return this.get(e)}setValue(e,r){let n=this.get(e);if(!n)throw new Error(`Unknown cvar: ${e}`);return n.set(r),n}setCvar(e,r){this.setValue(e,r)}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))}listCvars(){return this.list().map(e=>({name:e.name,value:e.string,defaultValue:e.defaultValue,flags:e.flags,description:e.description}))}};var Mn=class{constructor(e,r,n={}){this.game=e;this.client=r;this.started=!1;this.paused_=!1;this.commands=new yn;this.cvars=new An;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 i=n.loop?.now?.()??Date.now();this.startTimeMs=n.startTimeMs??n.loop?.startTimeMs??i,this.loop=new Ur({simulate:this.stepSimulation,render:this.renderClient},{...n.loop,startTimeMs:this.startTimeMs}),this.commands.registerAutocompleteProvider(()=>this.cvars.list().map(s=>s.name))}start(){if(!this.started){try{this.latestFrame=this.game.init(this.startTimeMs)??this.latestFrame,this.client?.init(this.latestFrame)}catch(e){throw this.game.shutdown(),this.client?.shutdown(),e}this.started=!0,this.paused_=!1,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,this.paused_=!1)}setPaused(e){this.paused_=e,e?this.loop.stop():this.started&&this.loop.start()}get paused(){return this.paused_}pump(e){this.loop.pump(e)}getLatestFrame(){return this.latestFrame}isRunning(){return this.loop.isRunning()}};function v0(t){if(t<0||t>=X.MaxConfigStrings)throw new RangeError(`Configstring index ${t} is out of range (0-${X.MaxConfigStrings-1})`)}function yd(t,e){let r=pd(t);if(e.length>r)throw new RangeError(`Configstring ${t} exceeds maximum length (${e.length} > ${r}); limit is ${bi} chars per slot`)}var En=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 v0(e),yd(e,r),this.values.set(e,r),e}get(e){return this.values.get(e)}getName(e){return this.get(e)}getAll(){let e=new Array(md).fill("");for(let[r,n]of this.values.entries())e[r]=n;return e}modelIndex(e){return this.register(e,X.Models,el,"modelCursor")}soundIndex(e){return this.register(e,X.Sounds,oa,"soundCursor")}findSoundIndex(e){for(let r=X.Sounds;r<X.Sounds+oa;r+=1)if(this.values.get(r)===e)return r}imageIndex(e){return this.register(e,X.Images,tl,"imageCursor")}lightIndex(e){return this.register(e,X.Lights,Jo,"lightCursor")}shadowLightIndex(e){return this.register(e,X.ShadowLights,il,"shadowLightCursor")}itemIndex(e){return this.register(e,X.Items,rl,"itemCursor")}playerSkinIndex(e){return this.register(e,X.PlayerSkins,aa,"playerSkinCursor")}generalIndex(e){return this.register(e,X.General,nl,"generalCursor")}register(e,r,n,i){for(let o=r;o<r+n;o+=1)if(this.values.get(o)===e)return o;let s=this[i],a=r+n;if(s>=a)throw new RangeError(`Out of configstring slots for range starting at ${r}`);return yd(s,e),this.values.set(s,e),this[i]=s+1,s}};var Ln=class{constructor(e){this.registry=e.registry,this.system=e.system,this.music=e.music,this.client=e.client}soundindex(e){return this.registry.registerName(e)}sound(e,r,n,i,s,a){this.system.play({entity:e,channel:r,soundIndex:n,volume:i,attenuation:s,timeOffsetMs:a}),this.triggerSubtitle(n)}positioned_sound(e,r,n,i){this.system.positionedSound(e,r,n,i),this.triggerSubtitle(r)}loop_sound(e,r,n,i,s){let a=this.system.play({entity:e,channel:r,soundIndex:n,volume:i,attenuation:s,looping:!0});return this.triggerSubtitle(n),a}stop_entity_sounds(e){this.system.stopEntitySounds(e)}setPlaybackRate(e){this.system.setPlaybackRate(e)}set_listener(e){this.system.setListener(e)}play_music(e,r=!0){return this.music?this.music.play(e,{loop:r}):Promise.resolve()}play_track(e,r=!0){return this.music?this.music.playTrack(e):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),this.triggerSubtitle(r)}play_channel(e){this.system.play({...e}),this.triggerSubtitle(e.soundIndex)}triggerSubtitle(e){if(!this.client)return;let r=this.registry.getName(e);if(!r)return;let n=r.match(/\[(.*?)\]/);n&&this.client.showSubtitle(n[1],r)}};var Si=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 bd(t,e,r,n,i){let s=new Ln({...n,client:r}),a=new Mn(e,r,i);return{runtime:new Si(t,a),audio:s}}var w0="PACK";function S0(t,e,r){let n=[];for(let i=0;i<r;i+=1){let s=t.getUint8(e+i);if(s===0)break;n.push(s)}return String.fromCharCode(...n)}function ae(t){return t.replace(/\\/g,"/").replace(/^\/+/,"").toLowerCase()}function A0(){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 M0=A0();function xd(t){let e=4294967295;for(let r=0;r<t.length;r+=1){let n=t[r];e=M0[(e^n)&255]^e>>>8}return(e^4294967295)>>>0}var fe=class extends Error{},Tn=class t{constructor(e,r,n,i){this.name=e;this.buffer=r;this.entries=new Map(n.map(s=>[s.name,s])),this.checksum=i,this.size=r.byteLength}static fromArrayBuffer(e,r){let n=new DataView(r);if(r.byteLength<12)throw new fe("PAK buffer too small to contain header");let i=String.fromCharCode(n.getUint8(0),n.getUint8(1),n.getUint8(2),n.getUint8(3));if(i!==w0)throw new fe(`Invalid PAK header magic: ${i}`);let s=n.getInt32(4,!0),a=n.getInt32(8,!0);if(s<12)throw new fe(`Invalid directory offset: ${s}`);if(a<0||a%64!==0)throw new fe(`Invalid directory length: ${a}`);if(s+a>r.byteLength)throw new fe("Directory exceeds buffer length");let d=a/64,l=[],c=new Map;for(let f=0;f<d;f+=1){let u=s+f*64,h=S0(n,u,56),m=ae(h),g=n.getInt32(u+56,!0),p=n.getInt32(u+60,!0);if(g<0||p<0||g+p>r.byteLength)throw new fe(`Invalid entry bounds for ${h||"<unnamed>"} (offset=${g}, length=${p})`);if(!m)throw new fe(`Entry ${f} has an empty name`);let y={name:m,offset:g,length:p};c.set(m,y)}return l.push(...c.values()),new t(e,r,l,xd(new Uint8Array(r)))}getEntry(e){return this.entries.get(ae(e))}listEntries(){return Array.from(this.entries.values())}readFile(e){let r=this.getEntry(e);if(!r)throw new fe(`File not found in PAK: ${e}`);return new Uint8Array(this.buffer,r.offset,r.length)}validate(){return{checksum:this.checksum,entries:this.listEntries()}}};function _d(t){return xd(new Uint8Array(t))}var E0="PACK",vd=12,dl=64;function wd(t){return t.replace(/\\/g,"/").replace(/^\/+/,"").toLowerCase()}var la=class{constructor(e){this.source=e;this.entries=null}async readDirectory(){if(this.entries)return Array.from(this.entries.values());let e=await this.readChunk(0,vd),r=new DataView(e),n=String.fromCharCode(r.getUint8(0),r.getUint8(1),r.getUint8(2),r.getUint8(3));if(n!==E0)throw new fe(`Invalid PAK header magic: ${n}`);let i=r.getInt32(4,!0),s=r.getInt32(8,!0);if(i<vd)throw new fe(`Invalid directory offset: ${i}`);if(s<0||s%dl!==0)throw new fe(`Invalid directory length: ${s}`);let a=await this.readChunk(i,s),o=new DataView(a),d=s/dl,l=new Map;for(let c=0;c<d;c++){let f=c*dl,u=this.readCString(o,f,56),h=wd(u),m=o.getInt32(f+56,!0),g=o.getInt32(f+60,!0);m<0||g<0||m+g>this.source.size,h&&l.set(h,{name:h,offset:m,length:g})}return this.entries=l,Array.from(l.values())}async readFile(e){let r=await this.getEntry(e);if(!r)throw new fe(`File not found in PAK: ${e}`);return this.source.slice(r.offset,r.offset+r.length).stream()}async getFileBlob(e){let r=await this.getEntry(e);if(!r)throw new fe(`File not found in PAK: ${e}`);return this.source.slice(r.offset,r.offset+r.length)}async getEntry(e){return this.entries||await this.readDirectory(),this.entries.get(wd(e))}async readChunk(e,r){let n=this.source.slice(e,e+r);return"arrayBuffer"in n?await n.arrayBuffer():new Response(n).arrayBuffer()}readCString(e,r,n){let i=[];for(let s=0;s<n;s+=1){let a=e.getUint8(r+s);if(a===0)break;i.push(a)}return String.fromCharCode(...i)}};var ul=12,Sd=64,ca=class t{constructor(){this.entries=new Map}addFile(e,r){let n=ae(e);if(n.length>56)throw new Error(`Path too long: '${n}' (max 56 chars)`);this.entries.set(n,r)}removeFile(e){return this.entries.delete(ae(e))}build(){let e=0;for(let u of this.entries.values())e+=u.byteLength;let r=this.entries.size*Sd,n=ul+e+r,i=new Uint8Array(n),s=new DataView(i.buffer);s.setUint8(0,80),s.setUint8(1,65),s.setUint8(2,67),s.setUint8(3,75);let a=ul+e;s.setInt32(4,a,!0),s.setInt32(8,r,!0);let o=ul,d=new Map,l=Array.from(this.entries.keys()).sort();for(let u of l){let h=this.entries.get(u);d.set(u,o),i.set(h,o),o+=h.byteLength}let c=a,f=new TextEncoder;for(let u of l){let h=this.entries.get(u),m=f.encode(u);if(m.length>56)throw new Error(`Path too long after encoding: ${u}`);for(let g=0;g<56;g++)g<m.length?s.setUint8(c+g,m[g]):s.setUint8(c+g,0);s.setInt32(c+56,d.get(u),!0),s.setInt32(c+60,h.byteLength,!0),c+=Sd}return i}static buildFromEntries(e){let r=new t;for(let[n,i]of e)r.addFile(n,i);return r.build()}};var fl=(a=>(a.Texture="texture",a.Sound="sound",a.Model="model",a.Map="map",a.Sprite="sprite",a.ConfigString="configString",a))(fl||{}),da=class{constructor(){this.tracking=!1;this.entries=[];this.currentFrame=0;this.currentTime=0}startTracking(){this.tracking=!0,this.entries=[]}stopTracking(){this.tracking=!1;let e={byFrame:new Map,byTime:new Map,uniqueResources:new Map};for(let r of this.entries){e.byFrame.has(r.frame)||e.byFrame.set(r.frame,[]),e.byFrame.get(r.frame).push(r),e.byTime.has(r.timestamp)||e.byTime.set(r.timestamp,[]),e.byTime.get(r.timestamp).push(r);let n=`${r.type}:${r.path}`;e.uniqueResources.has(n)||e.uniqueResources.set(n,r)}return e}recordLoad(e,r,n,i){this.tracking&&this.entries.push({type:e,path:r,timestamp:this.currentTime,frame:this.currentFrame,size:n,pakSource:i})}setCurrentFrame(e){this.currentFrame=e}setCurrentTime(e){this.currentTime=e}};var ua=class{constructor(e=[]){this.mounts=[];this.files=new Map;e.forEach(r=>this.mountPak(r))}mountPak(e,r=0){let n=this.mounts.findIndex(i=>i.pak===e);n!==-1&&this.mounts.splice(n,1),this.mounts.push({pak:e,priority:r}),this.mounts.sort((i,s)=>s.priority-i.priority);for(let i of e.listEntries()){let s=ae(i.name),a={archive:e,entry:i,priority:r};this.files.has(s)||this.files.set(s,[]);let o=this.files.get(s),d=o.findIndex(l=>l.archive===e);d!==-1&&o.splice(d,1),o.unshift(a),o.sort((l,c)=>c.priority-l.priority)}}setPriority(e,r){this.mountPak(e,r)}getPaks(){return[...this.mounts].sort((e,r)=>e.priority-r.priority)}get mountedPaks(){return this.mounts.map(e=>e.pak)}hasFile(e){return this.files.has(ae(e))}getSource(e){let r=this.files.get(ae(e));if(!(!r||r.length===0))return r[0]}stat(e){let r=this.getSource(e);if(r)return{path:r.entry.name,size:r.entry.length,sourcePak:r.archive.name}}getFileMetadata(e){let r=this.getSource(e);if(r)return{path:r.entry.name,size:r.entry.length,sourcePak:r.archive.name,offset:r.entry.offset}}async readFile(e){let r=this.getSource(e);if(!r)throw new Error(`File not found in VFS: ${e}`);return r.archive.readFile(e)}async readBinaryFile(e){return this.readFile(e)}streamFile(e,r=1024*1024){let n=this.getSource(e);if(!n)throw new Error(`File not found in VFS: ${e}`);let{archive:i}=n,s=i.readFile(e),a=0,o=s.length;return new ReadableStream({pull(d){if(a>=o){d.close();return}let l=Math.min(a+r,o),c=s.slice(a,l);a=l,d.enqueue(c)}})}async readTextFile(e){let r=await this.readFile(e);return new TextDecoder("utf-8").decode(r)}list(e=""){let r=ae(e).replace(/\/+$|^\//g,""),n=[],i=new Set,s=r?`${r}/`:"";for(let[a,o]of this.files){let d=o[0];if(r&&!d.entry.name.startsWith(s))continue;let l=r?d.entry.name.slice(s.length):d.entry.name,c=l.indexOf("/");c===-1?n.push({path:d.entry.name,size:d.entry.length,sourcePak:d.archive.name}):i.add(l.slice(0,c))}return n.sort((a,o)=>a.path.localeCompare(o.path)),{files:n,directories:[...i].sort()}}async listDirectory(e){return this.list(e).files}findByExtension(e){let r=e.startsWith(".")?e.toLowerCase():`.${e.toLowerCase()}`,n=[];for(let[i,s]of this.files){let a=s[0];a.entry.name.toLowerCase().endsWith(r)&&n.push({path:a.entry.name,size:a.entry.length,sourcePak:a.archive.name})}return n.sort((i,s)=>i.path.localeCompare(s.path))}listByExtension(e){let r=new Set(e.map(i=>i.startsWith(".")?i.toLowerCase():`.${i.toLowerCase()}`)),n=[];for(let[i,s]of this.files){let a=s[0],o=a.entry.name.toLowerCase();for(let d of r)if(o.endsWith(d)){n.push({path:a.entry.name,size:a.entry.length,sourcePak:a.archive.name});break}}return n.sort((i,s)=>i.path.localeCompare(s.path))}searchFiles(e){let r=[];for(let[n,i]of this.files){let s=i[0];e.test(s.entry.name)&&r.push({path:s.entry.name,size:s.entry.length,sourcePak:s.archive.name})}return r.sort((n,i)=>n.path.localeCompare(i.path))}getPakInfo(){return this.mounts.map(e=>({filename:e.pak.name,entryCount:e.pak.listEntries().length,totalSize:e.pak.size,priority:e.priority}))}getDirectoryTree(){let e={name:"",path:"",files:[],directories:[]},r=new Map;r.set("",e);let n=Array.from(this.files.values()).map(i=>{let s=i[0];return{path:s.entry.name,size:s.entry.length,sourcePak:s.archive.name}}).sort((i,s)=>i.path.localeCompare(s.path));for(let i of n){let s=i.path.split("/"),a=s.pop(),o="",d=e;for(let l of s){let c=o;o=o?`${o}/${l}`:l;let f=r.get(o);f||(f={name:l,path:o,files:[],directories:[]},d.directories.push(f),r.set(o,f)),d=f}d.files.push(i)}return e}};var hl=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"}]),Gr=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"}},fa=class{constructor(e=hl){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")),i=e.checksum,s="size"in e?e.size:void 0,a=this.known.get(n);return a?a.checksum!==i?{name:n,checksum:i,expectedChecksum:a.checksum,status:"mismatch",size:s,description:a.description}:{name:n,checksum:i,expectedChecksum:a.checksum,status:"valid",size:s,description:a.description}:{name:n,checksum:i,status:"unknown",size:s}}assertValid(e,r){let n=this.validateArchive(e,r);if(n.status==="mismatch")throw new Gr(n);return n}normalizePakName(e){let r=ae(e),n=r.split("/"),i=n.pop()??r,s=n.pop();return s?`${i}@${s}`:i}};var Wt=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 L0(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 i=new FileReader;i.onerror=()=>n(i.error??new Error("Unknown FileReader error")),i.onprogress=s=>{e?.({file:"blob",loadedBytes:s.loaded,totalBytes:s.total||t.size,state:"reading"})},i.onload=()=>{let s=i.result;s instanceof ArrayBuffer?r(s):n(new Error("Unexpected FileReader result"))},i.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=[],i=0;for(;;){let{done:o,value:d}=await r.read();if(o)break;if(!d)continue;let l=d;n.push(l),i+=l.byteLength,e?.({file:"blob",loadedBytes:i,totalBytes:t.size,state:"reading"})}let s=new Uint8Array(i),a=0;for(let o of n)s.set(o,a),a+=o.byteLength;return s.buffer}throw new Wt("blob",new Error("Unsupported Blob type"))}async function T0(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 L0(t.data,i=>e?.({...i,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 ha(t,e,r){let n=typeof r=="function"?{onProgress:r}:r??{},i=n.persistIndexes??!!n.pakIndexStore,s=n.enforceValidation??!!n.validator,a=n.allowUnknownPaks??!0,o=n.stopOnError??!1,d=[];for(let l of e)try{let c=await T0(l,n.onProgress),f=Tn.fromArrayBuffer(l.name,c),u=n.validator?.validateArchive(f);if(u){n.onValidationResult?.(u);let h=u.status==="mismatch",m=u.status==="unknown";if(h&&s||m&&!a){let g=new Gr(u);if(n.onError?.(l.name,g),o)throw new Wt(l.name,g);d.push({archive:f,mounted:!1,validation:u});continue}}if(t.mountPak(f),i&&n.pakIndexStore)try{await n.pakIndexStore.persist(f)}catch(h){if(n.onError?.(l.name,h),o)throw new Wt(l.name,h)}n.onProgress?.({file:l.name,loadedBytes:c.byteLength,totalBytes:c.byteLength,state:"parsed"}),d.push({archive:f,mounted:!0,validation:u})}catch(c){if(n.onProgress?.({file:l.name,loadedBytes:0,totalBytes:0,state:"error"}),n.onError?.(l.name,c),o)throw new Wt(l.name,c)}return d}var Xt=class{constructor(e,r=1/0,n=()=>0){this.capacity=e;this.maxMemory=r;this.sizeCalculator=n;this.map=new Map;this.currentMemoryUsage=0;if(e<=0)throw new RangeError("LRU cache capacity must be greater than zero")}get size(){return this.map.size}get memoryUsage(){return this.currentMemoryUsage}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){let n=this.sizeCalculator(r);this.map.has(e)&&this.delete(e),this.map.set(e,r),this.currentMemoryUsage+=n,this.evict()}delete(e){let r=this.map.get(e);return r!==void 0?(this.currentMemoryUsage-=this.sizeCalculator(r),this.map.delete(e)):!1}clear(){this.map.clear(),this.currentMemoryUsage=0}entries(){return Array.from(this.map.entries()).reverse().map(([e,r])=>({key:e,value:r}))}evict(){for(;this.map.size>this.capacity;){let e=this.map.keys().next();if(!e.done)this.delete(e.value);else break}for(;this.currentMemoryUsage>this.maxMemory&&this.map.size>0;){let e=this.map.keys().next();if(!e.done)this.delete(e.value);else break}}};function C0(t){return Array.isArray(t)?t:Array.from(t)}function ml(t){return C0(t).map(e=>({name:e.name,data:e}))}async function Ad(t,e,r){let n=ml(e);return ha(t,n,r??{})}function Md(t,e){let r=i=>{i.preventDefault(),i.dataTransfer?.dropEffect&&(i.dataTransfer.dropEffect="copy")},n=i=>{i.preventDefault();let s=i.dataTransfer?.files;s&&s.length>0&&e(Array.from(s))};return t.addEventListener("dragover",r),t.addEventListener("drop",n),()=>{t.removeEventListener("dragover",r),t.removeEventListener("drop",n)}}function Ed(t,e){let r=n=>{let i=n.target;!i||!i.files||i.files.length===0||(e(i.files),i.value="")};return t.addEventListener("change",r),()=>t.removeEventListener("change",r)}var I0="IBSP",k0=38,Td=19,R0=8+Td*8;var Q=class extends Error{},Cn=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),Ai(n.buffer)}};function Ai(t){if(t.byteLength<R0)throw new Q("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!==I0)throw new Q(`Invalid BSP magic ${r}`);let n=e.getInt32(4,!0);if(n!==k0)throw new Q(`Unsupported BSP version ${n}`);let i=new Map;for(let w=0;w<Td;w+=1){let L=e.getInt32(8+w*8,!0),C=e.getInt32(12+w*8,!0);if(L<0||C<0||L+C>t.byteLength)throw new Q(`Invalid lump bounds for index ${w}`);i.set(w,{offset:L,length:C})}let s={version:n,lumps:i},a=F0(t,i.get(0)),o=B0(t,i.get(1)),d=D0(t,i.get(2)),l=O0(t,i.get(4)),c=N0(t,i.get(5)),f=U0(t,i.get(6)),u=new Uint8Array(t,i.get(7).offset,i.get(7).length),h=Y0(f,i.get(7)),m=H0(t,i.get(8)),g=V0(t,i.get(11)),p=G0(t,i.get(12)),y=W0(t,i.get(13)),_=X0(t,i.get(14)),x=K0(t,i.get(15)),b=$0(t,i.get(9),i.get(10),m),v=Z0(t,i.get(3));return{header:s,entities:a,planes:o,vertices:d,nodes:l,texInfo:c,faces:f,lightMaps:u,lightMapInfo:h,leafs:m,leafLists:b,edges:g,surfEdges:p,models:y,brushes:_,brushSides:x,visibility:v,pickEntity(w){let L=null,C=1/0;for(let A of a.entities){let I=A.properties.model;if(!I||!I.startsWith("*"))continue;let R=parseInt(I.substring(1),10);if(isNaN(R)||R<0||R>=y.length)continue;let F=y[R],k=P0(w.origin,w.direction,F.mins,F.maxs);k!==null&&k<C&&(C=k,L={entity:A,model:F,distance:k})}return L}}}function P0(t,e,r,n){let i=0,s=1/0;for(let a=0;a<3;a++)if(Math.abs(e[a])<1e-8){if(t[a]<r[a]||t[a]>n[a])return null}else{let o=1/e[a],d=(r[a]-t[a])*o,l=(n[a]-t[a])*o;if(d>l){let c=d;d=l,l=c}if(i=Math.max(i,d),s=Math.min(s,l),i>s)return null}return i}function F0(t,e){let r=new TextDecoder().decode(new Uint8Array(t,e.offset,e.length)),n=z0(r),i=n.find(s=>s.classname==="worldspawn");return{raw:r,entities:n,worldspawn:i,getUniqueClassnames(){let s=new Set;for(let a of n)a.classname&&s.add(a.classname);return Array.from(s).sort()}}}function z0(t){let e=[],r=/\{([^}]*)\}/gms,n;for(;(n=r.exec(t))!==null;){let i=n[1],s={},a=/"([^\"]*)"\s+"([^\"]*)"/g,o;for(;(o=a.exec(i))!==null;)s[o[1]]=o[2];e.push({classname:s.classname,properties:s})}return e}function B0(t,e){let r=new DataView(t,e.offset,e.length),n=e.length/20;if(n%1!==0)throw new Q("Plane lump has invalid length");let i=[];for(let s=0;s<n;s+=1){let a=[r.getFloat32(s*20,!0),r.getFloat32(s*20+4,!0),r.getFloat32(s*20+8,!0)],o=r.getFloat32(s*20+12,!0),d=r.getInt32(s*20+16,!0);i.push({normal:a,dist:o,type:d})}return i}function D0(t,e){let r=new DataView(t,e.offset,e.length),n=e.length/12;if(n%1!==0)throw new Q("Vertex lump has invalid length");let i=[];for(let s=0;s<n;s+=1)i.push([r.getFloat32(s*12,!0),r.getFloat32(s*12+4,!0),r.getFloat32(s*12+8,!0)]);return i}function O0(t,e){let r=new DataView(t,e.offset,e.length),n=28,i=e.length/n;if(i%1!==0)throw new Q("Node lump has invalid length");let s=[];for(let a=0;a<i;a+=1){let o=a*n,d=r.getInt32(o,!0),l=[r.getInt32(o+4,!0),r.getInt32(o+8,!0)],c=[r.getInt16(o+12,!0),r.getInt16(o+14,!0),r.getInt16(o+16,!0)],f=[r.getInt16(o+18,!0),r.getInt16(o+20,!0),r.getInt16(o+22,!0)],u=r.getUint16(o+24,!0),h=r.getUint16(o+26,!0);s.push({planeIndex:d,children:l,mins:c,maxs:f,firstFace:u,numFaces:h})}return s}function N0(t,e){let r=new DataView(t,e.offset,e.length),n=76,i=e.length/n;if(i%1!==0)throw new Q("TexInfo lump has invalid length");let s=[];for(let a=0;a<i;a+=1){let o=a*n,d=[r.getFloat32(o,!0),r.getFloat32(o+4,!0),r.getFloat32(o+8,!0)],l=r.getFloat32(o+12,!0),c=[r.getFloat32(o+16,!0),r.getFloat32(o+20,!0),r.getFloat32(o+24,!0)],f=r.getFloat32(o+28,!0),u=r.getInt32(o+32,!0),h=r.getInt32(o+36,!0),m=new Uint8Array(t,e.offset+o+40,32),g=new TextDecoder("utf-8").decode(m).replace(/\0.*$/,""),p=r.getInt32(o+72,!0);s.push({s:d,sOffset:l,t:c,tOffset:f,flags:u,value:h,texture:g,nextTexInfo:p})}return s}function U0(t,e){let r=new DataView(t,e.offset,e.length),n=20,i=e.length/n;if(i%1!==0)throw new Q("Face lump has invalid length");let s=[];for(let a=0;a<i;a+=1){let o=a*n,d=r.getUint16(o,!0),l=r.getInt16(o+2,!0),c=r.getInt32(o+4,!0),f=r.getInt16(o+8,!0),u=r.getInt16(o+10,!0),h=[r.getUint8(o+12),r.getUint8(o+13),r.getUint8(o+14),r.getUint8(o+15)],m=r.getInt32(o+16,!0);s.push({planeIndex:d,side:l,firstEdge:c,numEdges:f,texInfo:u,styles:h,lightOffset:m})}return s}function H0(t,e){let r=new DataView(t,e.offset,e.length),n=28,i=e.length/n;if(i%1!==0)throw new Q("Leaf lump has invalid length");let s=[];for(let a=0;a<i;a+=1){let o=a*n,d=r.getInt32(o,!0),l=r.getInt16(o+4,!0),c=r.getInt16(o+6,!0),f=[r.getInt16(o+8,!0),r.getInt16(o+10,!0),r.getInt16(o+12,!0)],u=[r.getInt16(o+14,!0),r.getInt16(o+16,!0),r.getInt16(o+18,!0)],h=r.getUint16(o+20,!0),m=r.getUint16(o+22,!0),g=r.getUint16(o+24,!0),p=r.getUint16(o+26,!0);s.push({contents:d,cluster:l,area:c,mins:f,maxs:u,firstLeafFace:h,numLeafFaces:m,firstLeafBrush:g,numLeafBrushes:p})}return s}function V0(t,e){let r=new DataView(t,e.offset,e.length),n=4,i=e.length/n;if(i%1!==0)throw new Q("Edge lump has invalid length");let s=[];for(let a=0;a<i;a+=1){let o=a*n;s.push({vertices:[r.getUint16(o,!0),r.getUint16(o+2,!0)]})}return s}function G0(t,e){let r=e.length/4;if(r%1!==0)throw new Q("SurfEdge lump has invalid length");let n=new DataView(t,e.offset,e.length),i=new Int32Array(r);for(let s=0;s<r;s+=1)i[s]=n.getInt32(s*4,!0);return i}function W0(t,e){let r=new DataView(t,e.offset,e.length),n=48;if(e.length%n!==0)throw new Q("Model lump has invalid length");let i=e.length/n,s=[];for(let a=0;a<i;a+=1){let o=a*n,d=[r.getFloat32(o,!0),r.getFloat32(o+4,!0),r.getFloat32(o+8,!0)],l=[r.getFloat32(o+12,!0),r.getFloat32(o+16,!0),r.getFloat32(o+20,!0)],c=[r.getFloat32(o+24,!0),r.getFloat32(o+28,!0),r.getFloat32(o+32,!0)],f=r.getInt32(o+36,!0),u=r.getInt32(o+40,!0),h=r.getInt32(o+44,!0);s.push({mins:d,maxs:l,origin:c,headNode:f,firstFace:u,numFaces:h})}return s}function X0(t,e){let r=new DataView(t,e.offset,e.length),n=12,i=e.length/n;if(i%1!==0)throw new Q("Brush lump has invalid length");let s=[];for(let a=0;a<i;a+=1){let o=a*n;s.push({firstSide:r.getInt32(o,!0),numSides:r.getInt32(o+4,!0),contents:r.getInt32(o+8,!0)})}return s}function K0(t,e){let r=new DataView(t,e.offset,e.length),n=4,i=e.length/n;if(i%1!==0)throw new Q("Brush side lump has invalid length");let s=[];for(let a=0;a<i;a+=1){let o=a*n;s.push({planeIndex:r.getUint16(o,!0),texInfo:r.getInt16(o+2,!0)})}return s}function $0(t,e,r,n){let i=[],s=[],a=e.length/2,o=r.length/2,d=new DataView(t,e.offset,e.length),l=new DataView(t,r.offset,r.length);for(let c of n){if(c.firstLeafFace+c.numLeafFaces>a)throw new Q("Leaf faces reference data past lump bounds");if(c.firstLeafBrush+c.numLeafBrushes>o)throw new Q("Leaf brushes reference data past lump bounds");let f=[];for(let h=0;h<c.numLeafFaces;h+=1)f.push(d.getUint16((c.firstLeafFace+h)*2,!0));let u=[];for(let h=0;h<c.numLeafBrushes;h+=1)u.push(l.getUint16((c.firstLeafBrush+h)*2,!0));i.push(f),s.push(u)}return{leafFaces:i,leafBrushes:s}}function Z0(t,e){if(e.length===0)return;if(e.length<4)throw new Q("Visibility lump too small");let r=new DataView(t,e.offset,e.length),n=r.getInt32(0,!0),i=4+n*8;if(n<0||i>e.length)throw new Q("Visibility lump truncated");let s=4,a=[];for(let o=0;o<n;o+=1){let d=r.getInt32(s,!0),l=r.getInt32(s+4,!0);s+=8;let c=e.offset+d,f=e.offset+l,u=e.offset+e.length;if(d<0||l<0||c>=u||f>=u)throw new Q("Visibility offsets out of range");a.push({pvs:Ld(t,c,n,e),phs:Ld(t,f,n,e)})}return{numClusters:n,clusters:a}}function Ld(t,e,r,n){let i=Math.ceil(r/8),s=new Uint8Array(i),a=new Uint8Array(t),o=e,d=0,l=n.offset+n.length;for(;d<i;){if(o>=l)throw new Q("Visibility data truncated");let c=a[o++];if(c!==0){s[d++]=c;continue}if(o>=l)throw new Q("Visibility run exceeds lump bounds");let f=a[o++];for(let u=0;u<f&&d<i;u+=1)s[d++]=0}return s}function Y0(t,e){return t.map(r=>{if(!(r.lightOffset<0))return{offset:r.lightOffset,length:Math.max(0,e.length-r.lightOffset)}})}function ma(t,e,r){if(t.lightOffset<0||t.lightOffset>=e.byteLength)return;let n=e.byteLength-t.lightOffset,i=Math.min(r?.length??n,n);if(!(i<=0))return e.subarray(t.lightOffset,t.lightOffset+i)}var q0=844121161,j0=8,Cd=68,Q0=[{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}],ye=class extends Error{},In=class{constructor(e){this.vfs=e;this.cache=new Map}async load(e){if(this.cache.has(e))return this.cache.get(e);let r=await this.vfs.readFile(e),n=new Uint8Array(r.byteLength);n.set(r);let i=pl(n.buffer);return this.cache.set(e,i),i}get(e){return this.cache.get(e)}};function Id(t,e,r){let n=[];for(let i=0;i<r;i+=1){let s=t.getUint8(e+i);if(s===0)break;n.push(s)}return String.fromCharCode(...n)}function Mi(t,e,r,n){if(r!==0&&(e<Cd||e+r>t.byteLength))throw new ye(`${n} section is out of bounds`)}function J0(t){if(t.byteLength<Cd)throw new ye("MD2 buffer too small to contain header");let e=new DataView(t),r=e.getInt32(0,!0),n=e.getInt32(4,!0);if(r!==q0)throw new ye(`Invalid MD2 ident: ${r}`);if(n!==j0)throw new ye(`Unsupported MD2 version: ${n}`);let i={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),magic:r},s=40+i.numVertices*4;if(i.frameSize!==s)throw new ye(`Unexpected frame size ${i.frameSize}, expected ${s}`);if(i.offsetEnd>t.byteLength)throw new ye("MD2 offset_end exceeds buffer length");return i}function em(t,e){let r=e.numSkins*64;Mi(t,e.offsetSkins,r,"skins");let n=new DataView(t,e.offsetSkins,r),i=[];for(let s=0;s<e.numSkins;s+=1)i.push({name:Id(n,s*64,64)});return i}function tm(t,e){let r=e.numTexCoords*4;Mi(t,e.offsetTexCoords,r,"texcoords");let n=new DataView(t,e.offsetTexCoords,r),i=[];for(let s=0;s<e.numTexCoords;s+=1){let a=s*4;i.push({s:n.getInt16(a,!0),t:n.getInt16(a+2,!0)})}return i}function rm(t,e){let r=e.numTriangles*12;Mi(t,e.offsetTriangles,r,"triangles");let n=new DataView(t,e.offsetTriangles,r),i=[];for(let s=0;s<e.numTriangles;s+=1){let a=s*12,o=[n.getUint16(a,!0),n.getUint16(a+2,!0),n.getUint16(a+4,!0)],d=[n.getUint16(a+6,!0),n.getUint16(a+8,!0),n.getUint16(a+10,!0)];if(o.some(l=>l>=e.numVertices)||d.some(l=>l>=e.numTexCoords))throw new ye("Triangle references out of range vertex or texcoord");i.push({vertexIndices:o,texCoordIndices:d})}return i}function nm(t,e){let r=e.numFrames*e.frameSize;Mi(t,e.offsetFrames,r,"frames");let n=[];for(let i=0;i<e.numFrames;i+=1){let s=e.offsetFrames+i*e.frameSize,a=new DataView(t,s,e.frameSize),o={x:a.getFloat32(0,!0),y:a.getFloat32(4,!0),z:a.getFloat32(8,!0)},d={x:a.getFloat32(12,!0),y:a.getFloat32(16,!0),z:a.getFloat32(20,!0)},l=Id(a,24,16),c=[],f=1/0,u=1/0,h=1/0,m=-1/0,g=-1/0,p=-1/0;for(let y=0;y<e.numVertices;y+=1){let _=40+y*4,x=a.getUint8(_)*o.x+d.x,b=a.getUint8(_+1)*o.y+d.y,v=a.getUint8(_+2)*o.z+d.z;x<f&&(f=x),b<u&&(u=b),v<h&&(h=v),x>m&&(m=x),b>g&&(g=b),v>p&&(p=v);let S={x,y:b,z:v},w=a.getUint8(_+3),L=Q0[w];if(!L)throw new ye(`Invalid normal index ${w} in frame ${l}`);c.push({position:S,normalIndex:w,normal:L})}n.push({name:l,vertices:c,minBounds:{x:f,y:u,z:h},maxBounds:{x:m,y:g,z:p}})}return n}function im(t,e){let r=e.numGlCommands*4;if(Mi(t,e.offsetGlCommands,r,"gl commands"),r===0)return[];let n=new DataView(t,e.offsetGlCommands,r),i=[],s=0;for(;;){if(s+4>r)throw new ye("GL command list ended unexpectedly");let a=n.getInt32(s,!0);if(s+=4,a===0)break;let o=Math.abs(a),d=[],l=o*12;if(s+l>r)throw new ye("GL command vertex block exceeds buffer");for(let c=0;c<o;c+=1){let f=n.getFloat32(s,!0),u=n.getFloat32(s+4,!0),h=n.getInt32(s+8,!0);if(s+=12,h<0||h>=e.numVertices)throw new ye("GL command references invalid vertex index");d.push({s:f,t:u,vertexIndex:h})}i.push({mode:a>0?"strip":"fan",vertices:d})}if(s!==r)throw new ye("GL command list did not consume expected data");return i}function pl(t){let e=J0(t),r=em(t,e),n=tm(t,e),i=rm(t,e),s=nm(t,e),a=im(t,e);return{header:e,skins:r,texCoords:n,triangles:i,frames:s,glCommands:a}}function kd(t){let e=[],r=0;for(;r<t.length;){let n=t[r].name,i=n.replace(/\d+$/,"")||n,s=r;for(;s+1<t.length&&(t[s+1].name.replace(/\d+$/,"")||t[s+1].name)===i;)s+=1;e.push({name:i,firstFrame:r,lastFrame:s}),r=s+1}return e}var Rd=860898377,sm=15,Ge=class extends Error{constructor(e){super(e),this.name="Md3ParseError"}};function Ei(t,e,r){let n=new Uint8Array(t.buffer,t.byteOffset+e,r);return new TextDecoder("utf-8").decode(n).replace(/\0.*$/,"").trim()}function am(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 pa(t,e,r,n){if(e<0||e+r>n)throw new Ge(`${t} exceeds buffer bounds`)}function om(t){let e=t.getInt32(0,!0);if(e!==Rd)throw new Ge(`Invalid MD3 ident: ${e}`);let r=t.getInt32(4,!0);if(r!==sm)throw new Ge(`Unsupported MD3 version: ${r}`);let n=Ei(t,8,64),i=t.getInt32(72,!0),s=t.getInt32(76,!0),a=t.getInt32(80,!0),o=t.getInt32(84,!0),d=t.getInt32(88,!0),l=t.getInt32(92,!0),c=t.getInt32(96,!0),f=t.getInt32(100,!0),u=t.getInt32(104,!0);if(s<=0||o<0||a<0)throw new Ge("Invalid MD3 counts");return{ident:e,version:r,name:n,flags:i,numFrames:s,numTags:a,numSurfaces:o,numSkins:d,ofsFrames:l,ofsTags:c,ofsSurfaces:f,ofsEnd:u,magic:e}}function lm(t,e){let r=[];pa("Frames",e.ofsFrames,e.numFrames*56,t.byteLength);for(let i=0;i<e.numFrames;i+=1){let s=e.ofsFrames+i*56;r.push({minBounds:{x:t.getFloat32(s,!0),y:t.getFloat32(s+4,!0),z:t.getFloat32(s+8,!0)},maxBounds:{x:t.getFloat32(s+12,!0),y:t.getFloat32(s+16,!0),z:t.getFloat32(s+20,!0)},localOrigin:{x:t.getFloat32(s+24,!0),y:t.getFloat32(s+28,!0),z:t.getFloat32(s+32,!0)},radius:t.getFloat32(s+36,!0),name:Ei(t,s+40,16)})}return r}function cm(t,e){let r=[],i=e.numFrames*e.numTags*112;pa("Tags",e.ofsTags,i,t.byteLength);for(let s=0;s<e.numFrames;s+=1){let a=[];for(let o=0;o<e.numTags;o+=1){let d=e.ofsTags+(s*e.numTags+o)*112,l=d+64,c=l+12;a.push({name:Ei(t,d,64),origin:{x:t.getFloat32(l,!0),y:t.getFloat32(l+4,!0),z:t.getFloat32(l+8,!0)},axis:[{x:t.getFloat32(c,!0),y:t.getFloat32(c+4,!0),z:t.getFloat32(c+8,!0)},{x:t.getFloat32(c+12,!0),y:t.getFloat32(c+16,!0),z:t.getFloat32(c+20,!0)},{x:t.getFloat32(c+24,!0),y:t.getFloat32(c+28,!0),z:t.getFloat32(c+32,!0)}]})}r.push(a)}return r}function dm(t,e){let r=t.getInt32(e,!0);if(r!==Rd)throw new Ge(`Invalid surface ident at ${e}: ${r}`);let n=Ei(t,e+4,64),i=t.getInt32(e+68,!0),s=t.getInt32(e+72,!0),a=t.getInt32(e+76,!0),o=t.getInt32(e+80,!0),d=t.getInt32(e+84,!0),l=t.getInt32(e+88,!0),c=t.getInt32(e+92,!0),f=t.getInt32(e+96,!0),u=t.getInt32(e+100,!0),h=t.getInt32(e+104,!0);if(s<=0||o<=0||d<=0)throw new Ge(`Invalid surface counts for ${n}`);let m=h;pa(`Surface ${n}`,e,m,t.byteLength);let g=[],p=e+l;for(let w=0;w<d;w+=1){let L=p+w*12;g.push({indices:[t.getInt32(L,!0),t.getInt32(L+4,!0),t.getInt32(L+8,!0)]})}let y=[],_=e+c;for(let w=0;w<a;w+=1){let L=_+w*68;y.push({name:Ei(t,L,64),shaderIndex:t.getInt32(L+64,!0)})}let x=[],b=e+f;for(let w=0;w<o;w+=1){let L=b+w*8;x.push({s:t.getFloat32(L,!0),t:t.getFloat32(L+4,!0)})}let v=[],S=e+u;for(let w=0;w<s;w+=1){let L=[];for(let C=0;C<o;C+=1){let A=S+(w*o+C)*8,I=t.getInt16(A,!0)/64,R=t.getInt16(A+2,!0)/64,F=t.getInt16(A+4,!0)/64,k=t.getUint16(A+6,!0);L.push({position:{x:I,y:R,z:F},latLng:k,normal:am(k)})}v.push(L)}return{surface:{name:n,flags:i,numFrames:s,shaders:y,triangles:g,texCoords:x,vertices:v},nextOffset:e+h}}function gl(t){if(t.byteLength<108)throw new Ge("MD3 buffer too small for header");let e=new DataView(t),r=om(e);pa("MD3 end",r.ofsEnd,0,t.byteLength);let n=lm(e,r),i=cm(e,r),s=[],a=r.ofsSurfaces;for(let o=0;o<r.numSurfaces;o+=1){let{surface:d,nextOffset:l}=dm(e,a);s.push(d),a=l}if(a!==r.ofsEnd)throw new Ge("Surface parsing did not reach ofsEnd");return{header:r,frames:n,tags:i,surfaces:s}}var kn=class{constructor(e){this.vfs=e;this.cache=new Map}async load(e){if(this.cache.has(e))return this.cache.get(e);let r=await this.vfs.readFile(e),n=gl(r.slice().buffer);return this.cache.set(e,n),n}get(e){return this.cache.get(e)}};var um=844317769,fm=2,Pd=64,Fd=12,Kt=class extends Error{};function hm(t,e,r){let n=[];for(let i=0;i<r;i+=1){let s=t.getUint8(e+i);if(s===0)break;n.push(s)}return String.fromCharCode(...n)}function yl(t){if(t.byteLength<Fd)throw new Kt("Sprite buffer too small to contain header");let e=new DataView(t),r=e.getInt32(0,!0),n=e.getInt32(4,!0),i=e.getInt32(8,!0);if(r!==um)throw new Kt(`Invalid Sprite ident: ${r}`);if(n!==fm)throw new Kt(`Unsupported Sprite version: ${n}`);let s=[],a=16+Pd,o=Fd;for(let d=0;d<i;d+=1){if(o+a>t.byteLength)throw new Kt("Sprite frame data exceeds buffer length");let l=e.getInt32(o,!0),c=e.getInt32(o+4,!0),f=e.getInt32(o+8,!0),u=e.getInt32(o+12,!0),h=hm(e,o+16,Pd);s.push({width:l,height:c,originX:f,originY:u,name:h}),o+=a}return{ident:r,version:n,numFrames:i,frames:s}}var Rn=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),yl(n.buffer)}};function zd(t,e){let r=(t.sequence.end-t.sequence.start+1)/t.sequence.fps,n=t.sequence.loop!==!1,i=t.time+e;return n?i=(i%r+r)%r:i>r&&(i=r),{...t,time:Math.max(0,Math.min(i,r))}}function Bd(t){let e=t.sequence.end-t.sequence.start+1,r=1/t.sequence.fps,n=t.sequence.loop!==!1,i=t.time/r;if(!n&&i>=e)return{frame0:t.sequence.end,frame1:t.sequence.end,lerp:0};let s=n?i%e:Math.min(i,e-1),a=Math.floor(s),o=t.sequence.start+a,d=a+1>=e?n?t.sequence.start:t.sequence.end:o+1,l=!n&&a>=e-1?0:s-a;return{frame0:o,frame1:d,lerp:l}}function Dd(t){return{sequence:t,time:0}}function Od(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 Li=class extends Error{constructor(e){super(e),this.name="WalParseError"}};function ga(t){if(t.byteLength<100)throw new Li("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(),i=e.getInt32(32,!0),s=e.getInt32(36,!0),a=[e.getInt32(40,!0),e.getInt32(44,!0),e.getInt32(48,!0),e.getInt32(52,!0)],o=new Uint8Array(t,56,32),d=new TextDecoder("utf-8").decode(o).replace(/\0.*$/,"").trim(),l=e.getInt32(88,!0),c=e.getInt32(92,!0),f=e.getInt32(96,!0);if(i<=0||s<=0)throw new Li("Invalid WAL dimensions");let u=[],h=i,m=s;for(let g=0;g<a.length;g+=1){let p=a[g],y=Math.max(1,h*m|0);if(p<=0||p+y>t.byteLength)throw new Li(`Invalid WAL mip offset for level ${g}`);let _=new Uint8Array(t,p,y);u.push({level:g,width:h,height:m,data:_}),h=Math.max(1,h>>1),m=Math.max(1,m>>1)}return{name:n,width:i,height:s,mipmaps:u,animName:d,flags:l,contents:c,value:f}}var Wr=class extends Error{constructor(e){super(e),this.name="PcxParseError"}};function Ti(t){if(t.byteLength<128)throw new Wr("PCX buffer too small for header");let e=new DataView(t),r=e.getUint8(0),n=e.getUint8(2),i=e.getUint8(3),s=e.getUint16(4,!0),a=e.getUint16(6,!0),o=e.getUint16(8,!0),d=e.getUint16(10,!0);if(r!==10||n!==1)throw new Wr("Unsupported PCX encoding");if(i!==8)throw new Wr("Only 8bpp PCX files are supported");let l=o-s+1,c=d-a+1,f=e.getUint16(66,!0),u=t.byteLength-769;if(u<128||new DataView(t,u,1).getUint8(0)!==12)throw new Wr("Missing PCX palette");let h=new Uint8Array(t,u+1,768),m=new Uint8Array(t,128,u-128),g=new Uint8Array(l*c),p=0,y=0;for(let _=0;_<c;_+=1){let x=0;for(;x<f&&p<m.length;){let b=1,v=m[p++];if((v&192)===192){if(b=v&63,p>=m.length)throw new Wr("Unexpected end of PCX RLE data");v=m[p++]}for(let S=0;S<b&&x<f;S+=1)x<l&&(g[y++]=v),x+=1}}return{width:l,height:c,bitsPerPixel:i,pixels:g,palette:h}}function ya(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],i=n*3,s=r*4;e[s]=t.palette[i],e[s+1]=t.palette[i+1],e[s+2]=t.palette[i+2],e[s+3]=n===255?0:255}return e}var Mt=class extends Error{constructor(e){super(e),this.name="TgaParseError"}};function bl(t){let e=new DataView(t);if(t.byteLength<18)throw new Mt("Buffer too small for TGA header");let r=e.getUint8(0),n=e.getUint8(1),i=e.getUint8(2),s=e.getUint16(12,!0),a=e.getUint16(14,!0),o=e.getUint8(16),d=e.getUint8(17);if(i!==2&&i!==10&&i!==3&&i!==11)throw new Mt(`Unsupported TGA image type: ${i} (only RGB/Grayscale supported)`);if(o!==24&&o!==32&&o!==8)throw new Mt(`Unsupported pixel depth: ${o} (only 8, 24, 32 bpp supported)`);let l=i>=9,c=i===3||i===11,f=o/8,u=18+r;if(n===1){let x=e.getUint16(5,!0),b=e.getUint8(7);u+=x*(b/8)}let h=s*a,m=new Uint8Array(h*4),g=(d&32)!==0,p=0,y=new Uint8Array(t),_=x=>{if(c){let b=y[u++];m[x]=b,m[x+1]=b,m[x+2]=b,m[x+3]=255}else{let b=y[u++],v=y[u++],S=y[u++],w=o===32?y[u++]:255;m[x]=S,m[x+1]=v,m[x+2]=b,m[x+3]=w}};if(l){let x=0;for(;x<h;){if(u>=t.byteLength)throw new Mt("Unexpected end of TGA RLE data");let b=y[u++],v=(b&127)+1,S=(b&128)!==0;if(x+v>h)throw new Mt("TGA RLE packet exceeds image bounds");if(S){let w=c?y[u]:y[u+2],L=c?y[u]:y[u+1],C=y[u],A=c?255:o===32?y[u+3]:255;u+=f;for(let I=0;I<v;I++){let R=(x+I)*4;m[R]=w,m[R+1]=L,m[R+2]=C,m[R+3]=A}}else for(let w=0;w<v;w++)_((x+w)*4);x+=v}}else for(let x=0;x<h;x++){if(u>=t.byteLength)throw new Mt("Unexpected end of TGA data");_(x*4)}if(!g){let x=s*4,b=new Uint8Array(x);for(let v=0;v<a/2;v++){let S=v*x,w=(a-1-v)*x;b.set(m.subarray(S,S+x)),m.set(m.subarray(w,w+x),S),m.set(b,w)}}return{width:s,height:a,bitsPerPixel:32,pixels:m}}function mm(t){let e=0;for(let r of t.levels)e+=r.rgba.byteLength;return e}var Pn=class{constructor(e={}){this.cache=new Xt(e.capacity??128,e.maxMemory??256*1024*1024,mm)}get size(){return this.cache.size}get memoryUsage(){return this.cache.memoryUsage}get(e){return this.cache.get(e.toLowerCase())}set(e,r){this.cache.set(e.toLowerCase(),r)}clear(){this.cache.clear()}};function xl(t,e){let r=[];for(let n of t.mipmaps){let i=new Uint8Array(n.width*n.height*4);for(let s=0;s<n.data.length;s+=1){let a=n.data[s],o=a*3,d=s*4;i[d]=e[o],i[d+1]=e[o+1],i[d+2]=e[o+2],i[d+3]=a===255?0:255}r.push({level:n.level,width:n.width,height:n.height,rgba:i})}return{width:t.width,height:t.height,levels:r,source:"wal"}}function ba(t){let e=ya(t),r={level:0,width:t.width,height:t.height,rgba:e};return{width:t.width,height:t.height,levels:[r],source:"pcx"}}function Nd(t){let e={level:0,width:t.width,height:t.height,rgba:t.pixels};return{width:t.width,height:t.height,levels:[e],source:"tga"}}function xa(t,e){return xl(ga(t),e)}var Xr=class extends Error{constructor(e){super(e),this.name="WavParseError"}};function _l(t,e,r){return new TextDecoder("ascii").decode(new Uint8Array(t.buffer,t.byteOffset+e,r))}function _a(t){if(t.byteLength<44)throw new Xr("WAV buffer too small");let e=new DataView(t);if(_l(e,0,4)!=="RIFF"||_l(e,8,4)!=="WAVE")throw new Xr("Invalid WAV header");let r=12,n=-1,i=-1,s=0,a=0;for(;r+8<=t.byteLength;){let m=_l(e,r,4),g=e.getUint32(r+4,!0),p=r+8;m==="fmt "?(n=p,s=g):m==="data"&&(i=p,a=g),r=p+g}if(n===-1||i===-1)throw new Xr("Missing fmt or data chunk");let o=e.getUint16(n,!0),d=e.getUint16(n+2,!0),l=e.getUint32(n+4,!0),c=e.getUint16(n+14,!0);if(o!==1)throw new Xr("Only PCM WAV is supported");let f=c/8,u=a/(f*d),h=new Float32Array(u*d);for(let m=0;m<u;m+=1)for(let g=0;g<d;g+=1){let p=m*d+g,y=i+p*f,_=0;if(c===8)_=e.getUint8(y),h[p]=(_-128)/128;else if(c===16)_=e.getInt16(y,!0),h[p]=_/32768;else if(c===24){let x=e.getUint8(y),b=e.getUint8(y+1),v=e.getInt8(y+2);_=x|b<<8|v<<16,h[p]=_/8388608}else throw new Xr(`Unsupported bitsPerSample: ${c}`)}return{sampleRate:l,channels:d,bitsPerSample:c,samples:h}}var pm=(t,e=4294967295,r=79764919)=>{let n=new Int32Array(256),i,s,a,o=e;for(i=0;i<256;i++){for(a=i<<24,s=8;s>0;--s)a=2147483648&a?a<<1^r:a<<1;n[i]=a}for(i=0;i<t.length;i++)o=o<<8^n[255&(o>>24^t[i])];return o};var vl=(t,e=pm)=>{let r=p=>new Uint8Array(p.length/2).map(((y,_)=>parseInt(p.substring(2*_,2*(_+1)),16))),n=p=>r(p)[0],i=new Map;[,8364,,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,,381,,,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,,382,376].forEach(((p,y)=>i.set(p,y)));let s=new Uint8Array(t.length),a,o,d,l=!1,c=0,f=42,u=t.length>13&&t.substring(0,9)==="dynEncode",h=0;u&&(h=11,o=n(t.substring(9,h)),o<=1&&(h+=2,f=n(t.substring(11,h))),o===1&&(h+=8,d=(p=>new DataView(r(p).buffer).getInt32(0,!0))(t.substring(13,h))));let m=256-f;for(let p=h;p<t.length;p++)if(a=t.charCodeAt(p),a!==61||l){if(a===92&&p<t.length-5&&u){let y=t.charCodeAt(p+1);y!==117&&y!==85||(a=parseInt(t.substring(p+2,p+6),16),p+=5)}if(a>255){let y=i.get(a);y&&(a=y+127)}l&&(l=!1,a-=64),s[c++]=a<f&&a>0?a+m:a-f}else l=!0;let g=s.subarray(0,c);if(u&&o===1){let p=e(g);if(p!==d){let y="Decode failed crc32 validation";throw console.error("`simple-yenc`\n",y+`
1
+ "use strict";var Quake2Engine=(()=>{var zh=Object.create;var ta=Object.defineProperty;var Nh=Object.getOwnPropertyDescriptor;var Uh=Object.getOwnPropertyNames;var Hh=Object.getPrototypeOf,Vh=Object.prototype.hasOwnProperty;var Gh=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),$o=(t,e)=>{for(var r in e)ta(t,r,{get:e[r],enumerable:!0})},nd=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Uh(e))!Vh.call(t,i)&&i!==r&&ta(t,i,{get:()=>e[i],enumerable:!(n=Nh(e,i))||n.enumerable});return t};var Wh=(t,e,r)=>(r=t!=null?zh(Hh(t)):{},nd(e||!t||!t.__esModule?ta(r,"default",{value:t,enumerable:!0}):r,t)),Xh=t=>nd(ta({},"__esModule",{value:!0}),t);var Hd=Gh((Y_,Ud)=>{"use strict";Ud.exports=Worker});var qb={};$o(qb,{ATTN_IDLE:()=>ol,ATTN_LOOP_NONE:()=>sl,ATTN_NONE:()=>vi,ATTN_NORM:()=>al,ATTN_STATIC:()=>ll,AssetDependencyError:()=>on,AssetDependencyTracker:()=>Ss,AssetManager:()=>Ja,AssetPreviewGenerator:()=>Xo,AudioApi:()=>Ln,AudioContextController:()=>eo,AudioOcclusion:()=>Ms,AudioRegistry:()=>jn,AudioRegistryError:()=>_s,AudioSystem:()=>oo,BSP_SURFACE_FRAGMENT_SOURCE:()=>Zl,BSP_SURFACE_VERTEX_SOURCE:()=>$l,BSP_VERTEX_LAYOUT:()=>Wl,BspLoader:()=>Cn,BspParseError:()=>Q,BspSurfacePipeline:()=>ho,Camera:()=>bo,Command:()=>yi,CommandRegistry:()=>bn,ConfigStringRegistry:()=>En,Cvar:()=>wi,CvarRegistry:()=>An,DemoAnalyzer:()=>mi,DemoCameraMode:()=>Kc,DemoClipper:()=>Wo,DemoEventType:()=>Xc,DemoPlaybackController:()=>Vt,DemoReader:()=>je,DemoRecorder:()=>Zs,DemoValidator:()=>Ho,DynamicLightManager:()=>fo,EngineHost:()=>Mn,EngineRuntime:()=>Si,FileType:()=>$c,FixedTimestepLoop:()=>Hr,Framebuffer:()=>co,IndexBuffer:()=>_e,LruCache:()=>Kt,MAX_SOUND_CHANNELS:()=>_i,MD2_FRAGMENT_SHADER:()=>tc,MD2_VERTEX_SHADER:()=>ec,MD3_FRAGMENT_SHADER:()=>dc,MD3_VERTEX_SHADER:()=>cc,MapAnalyzer:()=>Ko,Md2Loader:()=>In,Md2MeshBuffers:()=>po,Md2ParseError:()=>ye,Md2Pipeline:()=>go,Md3Loader:()=>kn,Md3ModelMesh:()=>xo,Md3ParseError:()=>Ge,Md3Pipeline:()=>_o,Md3SurfaceMesh:()=>Ls,MusicSystem:()=>lo,NetworkMessageParser:()=>it,PARTICLE_FRAGMENT_SHADER:()=>fc,PARTICLE_VERTEX_SHADER:()=>uc,PROTOCOL_VERSION_RERELEASE:()=>hi,PakArchive:()=>Tn,PakIndexStore:()=>Qa,PakIngestionError:()=>Xt,PakParseError:()=>fe,PakValidationError:()=>Wr,PakValidator:()=>fa,PakWriter:()=>ca,ParticleRenderer:()=>wo,ParticleSystem:()=>vo,PlaybackState:()=>Uo,RERELEASE_KNOWN_PAKS:()=>hl,ResourceLoadTracker:()=>da,ResourceType:()=>fl,SKYBOX_FRAGMENT_SHADER:()=>Ql,SKYBOX_VERTEX_SHADER:()=>jl,SOUND_FULLVOLUME:()=>wn,SOUND_LOOP_ATTENUATE:()=>cl,ShaderProgram:()=>Te,SkyboxPipeline:()=>mo,SoundChannel:()=>at,SoundPrecache:()=>no,SoundRegistry:()=>ro,SpriteLoader:()=>Rn,SpriteParseError:()=>$t,StreamingPakArchive:()=>la,Texture2D:()=>Qn,TextureCache:()=>Pn,TextureCubeMap:()=>Jn,TgaParseError:()=>Mt,U_ALPHA:()=>Er,U_ANGLE1:()=>Ar,U_ANGLE2:()=>xr,U_ANGLE3:()=>_r,U_EFFECTS16:()=>wt,U_EFFECTS8:()=>xt,U_EVENT:()=>wr,U_FRAME16:()=>Lr,U_FRAME8:()=>vr,U_INSTANCE_BITS:()=>Br,U_LOOP_ATTENUATION_HIGH:()=>Or,U_LOOP_VOLUME:()=>Dr,U_MODEL:()=>Mr,U_MODEL2:()=>Tr,U_MODEL3:()=>Cr,U_MODEL4:()=>Ir,U_OLDORIGIN:()=>kr,U_OLD_FRAME_HIGH:()=>Nr,U_ORIGIN1:()=>yr,U_ORIGIN2:()=>br,U_ORIGIN3:()=>Sr,U_OWNER_HIGH:()=>zr,U_REMOVE:()=>$s,U_RENDERFX16:()=>vt,U_RENDERFX8:()=>bt,U_SCALE:()=>Fr,U_SKIN16:()=>St,U_SKIN8:()=>_t,U_SOLID:()=>Pr,U_SOUND:()=>Rr,VertexArray:()=>Pe,VertexBuffer:()=>Ce,VirtualFileSystem:()=>ua,advanceAnimation:()=>Bd,applyEntityDelta:()=>Go,applySurfaceState:()=>Cu,attenuationToDistanceMultiplier:()=>Sn,boxIntersectsFrustum:()=>Es,buildBspGeometry:()=>wu,buildMd2Geometry:()=>rc,buildMd2VertexData:()=>nc,buildMd3SurfaceGeometry:()=>oc,buildMd3VertexData:()=>lc,calculateMaxAudibleDistance:()=>Gr,calculatePakChecksum:()=>_d,computeFrameBlend:()=>Dd,computeSkyScroll:()=>Ru,createAnimationState:()=>Od,createAudioGraph:()=>to,createBspSurfaces:()=>vu,createEmptyEntityState:()=>Ht,createEmptyProtocolPlayerState:()=>gn,createEngine:()=>Yb,createEngineRuntime:()=>bd,createFaceLightmap:()=>ma,createInitialChannels:()=>io,createOcclusionResolver:()=>yu,createProgramFromSources:()=>_u,createWebGLContext:()=>bu,decodeOgg:()=>ja,deriveSurfaceRenderState:()=>ql,detectFileType:()=>Zc,extractFrustumPlanes:()=>Su,filesToPakSources:()=>ml,findLeafForPoint:()=>Kl,gatherVisibleFaces:()=>Lu,groupMd2Animations:()=>kd,ingestPakFiles:()=>Ad,ingestPaks:()=>ha,interpolateMd3Tag:()=>qu,interpolateVec3:()=>zd,isBinaryFile:()=>kh,isTextFile:()=>Yc,parseBsp:()=>Ai,parseEntLump:()=>Ph,parseMd2:()=>pl,parseMd3:()=>gl,parsePcx:()=>Ti,parseSprite:()=>yl,parseTga:()=>bl,parseWal:()=>ga,parseWalTexture:()=>xa,parseWav:()=>_a,pcxToRgba:()=>ya,pickChannel:()=>so,preparePcxTexture:()=>ba,removeViewTranslation:()=>ku,resolveLightStyles:()=>Yl,serializeEntLump:()=>Fh,spawnBfgExplosion:()=>cf,spawnBlasterImpact:()=>lf,spawnBlood:()=>Ju,spawnBulletImpact:()=>ju,spawnExplosion:()=>Qu,spawnMuzzleFlash:()=>tf,spawnRailTrail:()=>af,spawnSparks:()=>of,spawnSplash:()=>nf,spawnSteam:()=>sf,spawnTeleportFlash:()=>ef,spawnTrail:()=>rf,validateEntity:()=>Bh,walToRgba:()=>xl,wireDropTarget:()=>Md,wireFileInput:()=>Ed});var Kh=()=>typeof performance<"u"?performance.now():Date.now(),$h=t=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>t()):setTimeout(t,25)},Hr=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,i=r.maxSubSteps??5;this.options={fixedDeltaMs:n,maxSubSteps:i,maxDeltaMs:r.maxDeltaMs??n*i,startTimeMs:r.startTimeMs,now:r.now??Kh,schedule:r.schedule??$h}}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 i=0;for(;this.accumulatorMs>=this.options.fixedDeltaMs&&i<this.options.maxSubSteps;)this.frame+=1,this.callbacks.simulate({frame:this.frame,deltaMs:this.options.fixedDeltaMs,nowMs:r}),this.accumulatorMs-=this.options.fixedDeltaMs,i+=1;let s=this.options.fixedDeltaMs===0?0:this.accumulatorMs/this.options.fixedDeltaMs;this.callbacks.render?.({alpha:s,nowMs:r,accumulatorMs:this.accumulatorMs,frame:this.frame})}};var yi=class{constructor(e,r,n){this.name=e,this.callback=r,this.description=n}execute(e){this.callback(e)}},bn=class{constructor(){this.commands=new Map;this.history=[];this.historyLimit=64;this.autocompleteProviders=[]}register(e,r,n){let i=new yi(e,r,n);return this.commands.set(e,i),i}registerCommand(e,r){this.register(e,r)}registerAutocompleteProvider(e){this.autocompleteProviders.push(e)}get(e){return this.commands.get(e)}execute(e){let r=e.trim();if(r.length===0)return!1;(this.history.length===0||this.history[this.history.length-1]!==r)&&(this.history.push(r),this.history.length>this.historyLimit&&this.history.shift());let n=this.tokenize(e);if(n.length===0)return!1;let i=n[0],s=n.slice(1),a=this.get(i);return a?(a.execute(s),!0):(this.onConsoleOutput?.(`Unknown command "${i}"`),!1)}executeCommand(e){this.execute(e)}getHistory(){return[...this.history]}getSuggestions(e){let r=new Set;for(let n of this.commands.keys())n.startsWith(e)&&r.add(n);for(let n of this.autocompleteProviders){let i=n();for(let s of i)s.startsWith(e)&&r.add(s)}return Array.from(r).sort()}tokenize(e){let r=[],n="",i=!1;for(let s=0;s<e.length;s++){let a=e[s];a==='"'?i=!i:a===" "&&!i?n.length>0&&(r.push(n),n=""):n+=a}return n.length>0&&r.push(n),r}list(){return[...this.commands.values()].sort((e,r)=>e.name.localeCompare(r.name))}};var Zh=Object.defineProperty,Yh=(t,e)=>{for(var r in e)Zh(t,r,{get:e[r],enumerable:!0})},id={x:0,y:0,z:0};var ex=Math.PI/180;function sd(t,e){return{x:t.x-e.x,y:t.y-e.y,z:t.z-e.z}}function qh(t,e){return{x:t.x*e,y:t.y*e,z:t.z*e}}function jh(t,e){return t.x*e.x+t.y*e.y+t.z*e.z}function Qh(t){return jh(t,t)}function Yo(t){return Math.sqrt(Qh(t))}function At(t){let e=Yo(t);return e===0?t:qh(t,1/e)}var Jh=Math.PI/180,e0=180/Math.PI,_n=Jh,qo=e0;var Gt=[[-.525731,0,.850651],[-.442863,.238856,.864188],[-.295242,0,.955423],[-.309017,.5,.809017],[-.16246,.262866,.951056],[0,0,1],[0,.850651,.525731],[-.147621,.716567,.681718],[.147621,.716567,.681718],[0,.525731,.850651],[.309017,.5,.809017],[.525731,0,.850651],[.295242,0,.955423],[.442863,.238856,.864188],[.16246,.262866,.951056],[-.681718,.147621,.716567],[-.809017,.309017,.5],[-.587785,.425325,.688191],[-.850651,.525731,0],[-.864188,.442863,.238856],[-.716567,.681718,.147621],[-.688191,.587785,.425325],[-.5,.809017,.309017],[-.238856,.864188,.442863],[-.425325,.688191,.587785],[-.716567,.681718,-.147621],[-.5,.809017,-.309017],[-.525731,.850651,0],[0,.850651,-.525731],[-.238856,.864188,-.442863],[0,.955423,-.295242],[-.262866,.951056,-.16246],[0,1,0],[0,.955423,.295242],[-.262866,.951056,.16246],[.238856,.864188,.442863],[.262866,.951056,.16246],[.5,.809017,.309017],[.238856,.864188,-.442863],[.262866,.951056,-.16246],[.5,.809017,-.309017],[.850651,.525731,0],[.716567,.681718,.147621],[.716567,.681718,-.147621],[.525731,.850651,0],[.425325,.688191,.587785],[.864188,.442863,.238856],[.688191,.587785,.425325],[.809017,.309017,.5],[.681718,.147621,.716567],[.587785,.425325,.688191],[.955423,.295242,0],[1,0,0],[.951056,.16246,.262866],[.850651,-.525731,0],[.955423,-.295242,0],[.864188,-.442863,.238856],[.951056,-.16246,.262866],[.809017,-.309017,.5],[.681718,-.147621,.716567],[.850651,0,.525731],[.864188,.442863,-.238856],[.809017,.309017,-.5],[.951056,.16246,-.262866],[.525731,0,-.850651],[.681718,.147621,-.716567],[.681718,-.147621,-.716567],[.850651,0,-.525731],[.809017,-.309017,-.5],[.864188,-.442863,-.238856],[.951056,-.16246,-.262866],[.147621,.716567,-.681718],[.309017,.5,-.809017],[.425325,.688191,-.587785],[.442863,.238856,-.864188],[.587785,.425325,-.688191],[.688191,.587785,-.425325],[-.147621,.716567,-.681718],[-.309017,.5,-.809017],[0,.525731,-.850651],[-.525731,0,-.850651],[-.442863,.238856,-.864188],[-.295242,0,-.955423],[-.16246,.262866,-.951056],[0,0,-1],[.295242,0,-.955423],[.16246,.262866,-.951056],[-.442863,-.238856,-.864188],[-.309017,-.5,-.809017],[-.16246,-.262866,-.951056],[0,-.850651,-.525731],[-.147621,-.716567,-.681718],[.147621,-.716567,-.681718],[0,-.525731,-.850651],[.309017,-.5,-.809017],[.442863,-.238856,-.864188],[.16246,-.262866,-.951056],[.238856,-.864188,-.442863],[.5,-.809017,-.309017],[.425325,-.688191,-.587785],[.716567,-.681718,-.147621],[.688191,-.587785,-.425325],[.587785,-.425325,-.688191],[0,-.955423,-.295242],[0,-1,0],[.262866,-.951056,-.16246],[0,-.850651,.525731],[0,-.955423,.295242],[.238856,-.864188,.442863],[.262866,-.951056,.16246],[.5,-.809017,.309017],[.716567,-.681718,.147621],[.525731,-.850651,0],[-.238856,-.864188,-.442863],[-.5,-.809017,-.309017],[-.262866,-.951056,-.16246],[-.850651,-.525731,0],[-.716567,-.681718,-.147621],[-.716567,-.681718,.147621],[-.525731,-.850651,0],[-.5,-.809017,.309017],[-.238856,-.864188,.442863],[-.262866,-.951056,.16246],[-.864188,-.442863,.238856],[-.809017,-.309017,.5],[-.688191,-.587785,.425325],[-.681718,-.147621,.716567],[-.442863,-.238856,.864188],[-.587785,-.425325,.688191],[-.309017,-.5,.809017],[-.147621,-.716567,.681718],[-.425325,-.688191,.587785],[-.16246,-.262866,.951056],[.442863,-.238856,.864188],[.16246,-.262866,.951056],[.309017,-.5,.809017],[.147621,-.716567,.681718],[0,-.525731,.850651],[.425325,-.688191,.587785],[.587785,-.425325,.688191],[.688191,-.587785,.425325],[-.955423,.295242,0],[-.951056,.16246,.262866],[-1,0,0],[-.850651,0,.525731],[-.955423,-.295242,0],[-.951056,-.16246,.262866],[-.864188,.442863,-.238856],[-.951056,.16246,-.262866],[-.809017,.309017,-.5],[-.864188,-.442863,-.238856],[-.951056,-.16246,-.262866],[-.809017,-.309017,-.5],[-.681718,.147621,-.716567],[-.681718,-.147621,-.716567],[-.850651,0,-.525731],[-.688191,.587785,-.425325],[-.587785,.425325,-.688191],[-.425325,.688191,-.587785],[-.425325,-.688191,-.587785],[-.587785,-.425325,-.688191],[-.688191,-.587785,-.425325]];function t0(){return new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])}function ad(t,e){let r=e.x,n=e.y,i=e.z;return{x:t[0]*r+t[4]*n+t[8]*i+t[12],y:t[1]*r+t[5]*n+t[9]*i+t[13],z:t[2]*r+t[6]*n+t[10]*i+t[14]}}function od(t,e){let r=t0();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 st=1,Wt=2;var jo=8,Qo=16,r0=32;var n0=16384;var ra=65536,ld=1<<17,i0=1<<18,s0=1<<19,a0=1<<20,o0=1<<21,l0=1<<22,c0=1<<23,tx=1<<24,na=1<<25,d0=1<<26,rx=1<<27,nx=1<<28,ix=1<<29,ia=1<<30,sx=1<<31;var xi=0;var cd=4,dd=8,ud=16,fd=32,hd=64;var ax=1<<25,ox=1<<28,lx=1<<29,cx=1<<30,dx=1<<31;var ux=st|Wt,fx=st|ra|Wt|na|ia,hx=st|ra|Wt,mx=st|ld|Wt|na|ia,px=r0|jo|Qo,gx=st|Qo|jo,u0=st|na|ia|Wt|d0,yx=i0|s0|a0|o0|l0|c0,bx=st|jo|Qo|na|ia,xx=st|ra|Wt,_x=st|Wt,vx=st|ra|Wt|ld,wx=u0|n0;var Sx=Number.MAX_SAFE_INTEGER-1;var sa=(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))(sa||{});var aa=256;var Jo=256,el=8192,oa=2048,tl=512,rl=256,nl=aa*2,il=256,Zo=32,bi=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.HealthBarName=55]="HealthBarName",t[t.CONFIG_N64_PHYSICS=56]="CONFIG_N64_PHYSICS",t[t.CONFIG_CTF_TEAMS=57]="CONFIG_CTF_TEAMS",t[t.CONFIG_COOP_RESPAWN_STRING=58]="CONFIG_COOP_RESPAWN_STRING",t[t.Story=54]="Story",t[t.AirAccel=59]="AirAccel",t[t.MaxClients=60]="MaxClients",t[t.MapChecksum=61]="MapChecksum",t[t.Models=62]="Models",t[t.Sounds=62+el]="Sounds",t[t.Images=t.Sounds+oa]="Images",t[t.Lights=t.Images+tl]="Lights",t[t.ShadowLights=t.Lights+Jo]="ShadowLights",t[t.Items=t.ShadowLights+il]="Items",t[t.Players=t.Items+rl]="Players",t[t.PlayerSkins=t.Players]="PlayerSkins",t[t.General=t.Players+aa]="General",t[t.WheelWeapons=t.General+nl]="WheelWeapons",t[t.WheelAmmo=t.WheelWeapons+Zo]="WheelAmmo",t[t.WheelPowerups=t.WheelAmmo+Zo]="WheelPowerups",t[t.CdLoopCount=t.WheelPowerups+Zo]="CdLoopCount",t[t.GameStyle=t.CdLoopCount+1]="GameStyle",t[t.MaxConfigStrings=t.GameStyle+1]="MaxConfigStrings",t))(X||{}),md=X.MaxConfigStrings;function pd(t){return t>=5&&t<59?bi*(59-t):t>=X.General&&t<X.WheelWeapons?bi*(X.MaxConfigStrings-t):bi}var Ax=X.Sounds,Mx=X.Images,Ex=X.Lights,Lx=X.Items,Tx=X.Players,Cx=X.General,f0={};Yh(f0,{addReplayFrame:()=>g0,createReplaySession:()=>p0,deserializeReplay:()=>m0,serializeReplay:()=>h0});function h0(t){return JSON.stringify(t,null,2)}function m0(t){let e=JSON.parse(t);if(!e.metadata||!Array.isArray(e.frames))throw new Error("Invalid replay format: missing metadata or frames");return e}function p0(t,e){return{metadata:{map:t,date:new Date().toISOString(),version:"1.0",seed:e},frames:[]}}function g0(t,e,r,n){t.frames.push({serverFrame:r,cmd:e,timestamp:Date.now()-n})}var M=(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[t.splitclient=21]="splitclient",t[t.configblast=22]="configblast",t[t.spawnbaselineblast=23]="spawnbaselineblast",t[t.level_restart=24]="level_restart",t[t.damage=25]="damage",t[t.locprint=26]="locprint",t[t.fog=27]="fog",t[t.waitingforplayers=28]="waitingforplayers",t[t.bot_chat=29]="bot_chat",t[t.poi=30]="poi",t[t.help_path=31]="help_path",t[t.muzzleflash3=32]="muzzleflash3",t[t.achievement=33]="achievement",t))(M||{});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[t.BLUEHYPERBLASTER_KEX=56]="BLUEHYPERBLASTER_KEX",t[t.BFG_ZAP=57]="BFG_ZAP",t[t.BERSERK_SLAM=58]="BERSERK_SLAM",t[t.GRAPPLE_CABLE_2=59]="GRAPPLE_CABLE_2",t[t.POWER_SPLASH=60]="POWER_SPLASH",t[t.LIGHTNING_BEAM=61]="LIGHTNING_BEAM",t[t.EXPLOSION1_NL=62]="EXPLOSION1_NL",t[t.EXPLOSION2_NL=63]="EXPLOSION2_NL",t))(E||{});var y0=12,b0=9,Ix=Math.ceil(y0*b0/16),x0=23,_0=2,kx=Math.ceil(x0*_0/16);var Rx=1<<17,Px=1<<18,Fx=1<<19,Bx=1<<20,Dx=1<<21,Ox=1<<22,zx=1<<23,Nx=1<<24,Ux=1<<25,Hx=1<<26,Vx=1<<27,Gx=1<<28,Wx=1<<29,Xx=1<<30;var vn=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}getReadPosition(){return this.offset}getLength(){return this.length}getRemaining(){return this.length-this.offset}seek(t){if(t<0||t>this.length)throw new Error(`Seek out of bounds: ${t} (length: ${this.length})`);this.offset=t}setReadPosition(t){this.seek(t)}hasMore(){return this.offset<this.length}hasBytes(t){return this.offset+t<=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}readUShort(){let t=this.view.getUint16(this.offset,!0);return this.offset+=2,t}readLong(){let t=this.view.getInt32(this.offset,!0);return this.offset+=4,t}readULong(){let t=this.view.getUint32(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){let e=this.readByte();if(e>=162){t.x=0,t.y=0,t.z=0;return}let r=Gt[e];t.x=r[0],t.y=r[1],t.z=r[2]}},Vr=class{constructor(t=1400){typeof t=="number"?(this.buffer=new Uint8Array(t),this.fixed=!1):(this.buffer=t,this.fixed=!0),this.view=new DataView(this.buffer.buffer,this.buffer.byteOffset,this.buffer.byteLength),this.offset=0}ensureSpace(t){if(this.offset+t>this.buffer.byteLength){if(this.fixed)throw new Error(`Buffer overflow: capacity ${this.buffer.byteLength}, needed ${this.offset+t}`);let e=Math.max(this.buffer.byteLength*2,this.offset+t),r=new Uint8Array(e);r.set(this.buffer),this.buffer=r,this.view=new DataView(this.buffer.buffer,this.buffer.byteOffset,this.buffer.byteLength)}}writeByte(t){this.ensureSpace(1),this.view.setUint8(this.offset,t),this.offset+=1}writeBytes(t){this.ensureSpace(t.byteLength),this.buffer.set(t,this.offset),this.offset+=t.byteLength}writeChar(t){this.ensureSpace(1),this.view.setInt8(this.offset,t),this.offset+=1}writeShort(t){this.ensureSpace(2),this.view.setInt16(this.offset,t,!0),this.offset+=2}writeLong(t){this.ensureSpace(4),this.view.setInt32(this.offset,t,!0),this.offset+=4}writeFloat(t){this.ensureSpace(4),this.view.setFloat32(this.offset,t,!0),this.offset+=4}writeString(t){let e=t.length;this.ensureSpace(e+1);for(let r=0;r<e;r++)this.view.setUint8(this.offset+r,t.charCodeAt(r));this.view.setUint8(this.offset+e,0),this.offset+=e+1}writeCoord(t){this.writeShort(Math.trunc(t*8))}writeAngle(t){this.writeByte(Math.trunc(t*256/360)&255)}writeAngle16(t){this.writeShort(Math.trunc(t*65536/360)&65535)}writePos(t){this.writeCoord(t.x),this.writeCoord(t.y),this.writeCoord(t.z)}writeDir(t){let e=-1,r=0;if(t.x===0&&t.y===0&&t.z===0){this.writeByte(0);return}for(let n=0;n<Gt.length;n++){let i=Gt[n],s=t.x*i[0]+t.y*i[1]+t.z*i[2];s>e&&(e=s,r=n)}this.writeByte(r)}getData(){return this.buffer.slice(0,this.offset)}getBuffer(){return this.buffer}getOffset(){return this.offset}reset(){this.offset=0}};var xn=class ge{constructor(){this.qport=0,this.incomingSequence=0,this.outgoingSequence=0,this.incomingAcknowledged=0,this.incomingReliableAcknowledged=!1,this.incomingReliableSequence=0,this.outgoingReliableSequence=0,this.reliableLength=0,this.fragmentSendOffset=0,this.fragmentBuffer=null,this.fragmentLength=0,this.fragmentReceived=0,this.lastReceived=0,this.lastSent=0,this.remoteAddress=null,this.reliableMessage=new Vr(ge.MAX_RELIABLE_BUFFER);let e=Date.now();this.lastReceived=e,this.lastSent=e,this.qport=Math.floor(Math.random()*65536)}setup(e,r=null){this.qport=e,this.remoteAddress=r,this.reset()}reset(){this.incomingSequence=0,this.outgoingSequence=0,this.incomingAcknowledged=0,this.incomingReliableAcknowledged=!1,this.incomingReliableSequence=0,this.outgoingReliableSequence=0,this.reliableLength=0,this.reliableMessage.reset(),this.fragmentSendOffset=0,this.fragmentBuffer=null,this.fragmentLength=0,this.fragmentReceived=0,this.lastReceived=Date.now(),this.lastSent=Date.now()}transmit(e){this.outgoingSequence++,this.lastSent=Date.now();let r=0,n=!1,i=0;this.reliableLength>0&&(this.reliableLength>ge.FRAGMENT_SIZE?(n=!0,this.fragmentSendOffset>=this.reliableLength&&(this.fragmentSendOffset=0),r=this.reliableLength-this.fragmentSendOffset,r>ge.FRAGMENT_SIZE&&(r=ge.FRAGMENT_SIZE),i=this.fragmentSendOffset,this.fragmentSendOffset+=r):r=this.reliableLength);let s=ge.PACKET_HEADER,a=r>0?2+(n?8:0):0,o=e?e.length:0;s+a+r+o>ge.MAX_MSGLEN&&(o=ge.MAX_MSGLEN-s-a-r,o<0&&(o=0));let d=new ArrayBuffer(s+a+r+o),l=new DataView(d),c=new Uint8Array(d),f=this.outgoingSequence;r>0&&(f|=2147483648,(this.outgoingReliableSequence&1)!==0&&(f|=1073741824)),l.setUint32(0,f,!0);let u=this.incomingSequence;(this.incomingReliableSequence&1)!==0&&(u|=2147483648),l.setUint32(4,u,!0),l.setUint16(8,this.qport,!0);let h=s;if(r>0){let m=r;n&&(m|=32768),l.setUint16(h,m,!0),h+=2,n&&(l.setUint32(h,i,!0),h+=4,l.setUint32(h,this.reliableLength,!0),h+=4);let p=this.reliableMessage.getBuffer().subarray(i,i+r);c.set(p,h),h+=r}if(e&&o>0){let m=e.slice(0,o);c.set(m,h)}return c}process(e){if(e.length<ge.PACKET_HEADER)return null;this.lastReceived=Date.now();let r=new DataView(e.buffer,e.byteOffset,e.byteLength),n=r.getUint32(0,!0),i=r.getUint32(4,!0),s=r.getUint16(8,!0);if(this.qport!==s)return null;let a=n&1073741823;if((a-this.incomingSequence|0)<=0)return null;this.incomingSequence=a;let o=i&2147483647,d=(i&2147483648)!==0;if(o>this.incomingAcknowledged&&(this.incomingAcknowledged=o),this.reliableLength>0){let m=d?1:0,g=this.outgoingReliableSequence&1;m!==g&&(this.reliableLength=0,this.reliableMessage.reset(),this.outgoingReliableSequence^=1,this.fragmentSendOffset=0)}let l=(n&2147483648)!==0,c=(n&1073741824)!==0?1:0,f=ge.PACKET_HEADER,u=null;if(l){if(f+2>e.byteLength)return null;let m=r.getUint16(f,!0);f+=2;let g=(m&32768)!==0;m&=32767;let p=this.incomingReliableSequence&1;if(c===p)if(g){if(f+8>e.byteLength)return null;let y=r.getUint32(f,!0);f+=4;let _=r.getUint32(f,!0);if(f+=4,_>ge.MAX_RELIABLE_BUFFER)return console.warn(`NetChan: received invalid fragment total ${_} > ${ge.MAX_RELIABLE_BUFFER}`),null;if((!this.fragmentBuffer||this.fragmentBuffer.length!==_)&&(this.fragmentBuffer=new Uint8Array(_),this.fragmentLength=_,this.fragmentReceived=0),f+m>e.byteLength)return null;let x=e.subarray(f,f+m);y===this.fragmentReceived&&y+m<=_&&(this.fragmentBuffer.set(x,y),this.fragmentReceived+=m,this.fragmentReceived>=_&&(u=this.fragmentBuffer,this.incomingReliableSequence++,this.fragmentBuffer=null,this.fragmentLength=0,this.fragmentReceived=0))}else{if(this.incomingReliableSequence++,f+m>e.byteLength)return null;u=e.slice(f,f+m)}f+=m}let h=e.slice(f);if(u&&u.length>0){let m=u.length+h.length,g=new Uint8Array(m);return g.set(u,0),g.set(h,u.length),g}return h||new Uint8Array(0)}canSendReliable(){return this.reliableLength===0}writeReliableByte(e){if(this.reliableLength+1>ge.MAX_RELIABLE_BUFFER)throw new Error("NetChan reliable buffer overflow");this.reliableMessage.writeByte(e),this.reliableLength++}writeReliableShort(e){if(this.reliableLength+2>ge.MAX_RELIABLE_BUFFER)throw new Error("NetChan reliable buffer overflow");this.reliableMessage.writeShort(e),this.reliableLength+=2}writeReliableLong(e){if(this.reliableLength+4>ge.MAX_RELIABLE_BUFFER)throw new Error("NetChan reliable buffer overflow");this.reliableMessage.writeLong(e),this.reliableLength+=4}writeReliableString(e){let r=e.length+1;if(this.reliableLength+r>ge.MAX_RELIABLE_BUFFER)throw new Error("NetChan reliable buffer overflow");this.reliableMessage.writeString(e),this.reliableLength+=r}getReliableData(){return this.reliableLength===0?new Uint8Array(0):this.reliableMessage.getBuffer().subarray(0,this.reliableLength)}needsKeepalive(e){return e-this.lastSent>1e3}isTimedOut(e,r=3e4){return e-this.lastReceived>r}};xn.MAX_MSGLEN=1400;xn.FRAGMENT_SIZE=1024;xn.PACKET_HEADER=10;xn.HEADER_OVERHEAD=xn.PACKET_HEADER+2;xn.MAX_RELIABLE_BUFFER=262144;var gd=(t=>(t[t.Bullets=0]="Bullets",t[t.Shells=1]="Shells",t[t.Rockets=2]="Rockets",t[t.Grenades=3]="Grenades",t[t.Cells=4]="Cells",t[t.Slugs=5]="Slugs",t[t.MagSlugs=6]="MagSlugs",t[t.Trap=7]="Trap",t[t.Flechettes=8]="Flechettes",t[t.Tesla=9]="Tesla",t[t.Disruptor=10]="Disruptor",t[t.Prox=11]="Prox",t[t.Nuke=12]="Nuke",t[t.Rounds=13]="Rounds",t))(gd||{}),Kx=Object.keys(gd).length/2;var _i=32,at=(t=>(t[t.Auto=0]="Auto",t[t.Weapon=1]="Weapon",t[t.Voice=2]="Voice",t[t.Item=3]="Item",t[t.Body=4]="Body",t[t.Aux=5]="Aux",t[t.Footstep=6]="Footstep",t[t.Aux3=7]="Aux3",t[t.NoPhsAdd=8]="NoPhsAdd",t[t.Reliable=16]="Reliable",t[t.ForcePos=32]="ForcePos",t))(at||{}),sl=-1,vi=0,al=1,ol=2,ll=3,wn=80,cl=.003;function Sn(t){return t*.001}function Gr(t){let e=Sn(t);return e<=0?Number.POSITIVE_INFINITY:wn+1/e}var wi=class{constructor({name:e,defaultValue:r,description:n,flags:i=sa.None,onChange:s}){this.modifiedCount=0;this.name=e,this.defaultValue=r,this.description=n,this.flags=i,this._value=r,this.onChange=s}get string(){return this._value}getString(){return this.string}get number(){return Number(this._value)}getFloat(){return this.number}get integer(){return Math.trunc(this.number)}getInt(){return this.integer}get boolean(){return!!this.integer}getBoolean(){return this.boolean}set(e){if(this.flags&sa.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)}},An=class{constructor(){this.cvars=new Map}register(e){let r=this.cvars.get(e.name);if(r)return r;let n=e.onChange,i=(a,o)=>{n?.(a,o),this.onCvarChange?.(a.name,a.string)},s=new wi({...e,onChange:i});return this.cvars.set(e.name,s),s}get(e){return this.cvars.get(e)}getCvar(e){return this.get(e)}setValue(e,r){let n=this.get(e);if(!n)throw new Error(`Unknown cvar: ${e}`);return n.set(r),n}setCvar(e,r){this.setValue(e,r)}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))}listCvars(){return this.list().map(e=>({name:e.name,value:e.string,defaultValue:e.defaultValue,flags:e.flags,description:e.description}))}};var Mn=class{constructor(e,r,n={}){this.game=e;this.client=r;this.started=!1;this.paused_=!1;this.commands=new bn;this.cvars=new An;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 i=n.loop?.now?.()??Date.now();this.startTimeMs=n.startTimeMs??n.loop?.startTimeMs??i,this.loop=new Hr({simulate:this.stepSimulation,render:this.renderClient},{...n.loop,startTimeMs:this.startTimeMs}),this.commands.registerAutocompleteProvider(()=>this.cvars.list().map(s=>s.name))}start(){if(!this.started){try{this.latestFrame=this.game.init(this.startTimeMs)??this.latestFrame,this.client?.init(this.latestFrame)}catch(e){throw this.game.shutdown(),this.client?.shutdown(),e}this.started=!0,this.paused_=!1,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,this.paused_=!1)}setPaused(e){this.paused_=e,e?this.loop.stop():this.started&&this.loop.start()}get paused(){return this.paused_}pump(e){this.loop.pump(e)}getLatestFrame(){return this.latestFrame}isRunning(){return this.loop.isRunning()}};function v0(t){if(t<0||t>=X.MaxConfigStrings)throw new RangeError(`Configstring index ${t} is out of range (0-${X.MaxConfigStrings-1})`)}function yd(t,e){let r=pd(t);if(e.length>r)throw new RangeError(`Configstring ${t} exceeds maximum length (${e.length} > ${r}); limit is ${bi} chars per slot`)}var En=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 v0(e),yd(e,r),this.values.set(e,r),e}get(e){return this.values.get(e)}getName(e){return this.get(e)}getAll(){let e=new Array(md).fill("");for(let[r,n]of this.values.entries())e[r]=n;return e}modelIndex(e){return this.register(e,X.Models,el,"modelCursor")}soundIndex(e){return this.register(e,X.Sounds,oa,"soundCursor")}findSoundIndex(e){for(let r=X.Sounds;r<X.Sounds+oa;r+=1)if(this.values.get(r)===e)return r}imageIndex(e){return this.register(e,X.Images,tl,"imageCursor")}lightIndex(e){return this.register(e,X.Lights,Jo,"lightCursor")}shadowLightIndex(e){return this.register(e,X.ShadowLights,il,"shadowLightCursor")}itemIndex(e){return this.register(e,X.Items,rl,"itemCursor")}playerSkinIndex(e){return this.register(e,X.PlayerSkins,aa,"playerSkinCursor")}generalIndex(e){return this.register(e,X.General,nl,"generalCursor")}register(e,r,n,i){for(let o=r;o<r+n;o+=1)if(this.values.get(o)===e)return o;let s=this[i],a=r+n;if(s>=a)throw new RangeError(`Out of configstring slots for range starting at ${r}`);return yd(s,e),this.values.set(s,e),this[i]=s+1,s}};var Ln=class{constructor(e){this.registry=e.registry,this.system=e.system,this.music=e.music,this.client=e.client}soundindex(e){return this.registry.registerName(e)}sound(e,r,n,i,s,a){this.system.play({entity:e,channel:r,soundIndex:n,volume:i,attenuation:s,timeOffsetMs:a}),this.triggerSubtitle(n)}positioned_sound(e,r,n,i){this.system.positionedSound(e,r,n,i),this.triggerSubtitle(r)}loop_sound(e,r,n,i,s){let a=this.system.play({entity:e,channel:r,soundIndex:n,volume:i,attenuation:s,looping:!0});return this.triggerSubtitle(n),a}stop_entity_sounds(e){this.system.stopEntitySounds(e)}setPlaybackRate(e){this.system.setPlaybackRate(e)}set_listener(e){this.system.setListener(e)}play_music(e,r=!0){return this.music?this.music.play(e,{loop:r}):Promise.resolve()}play_track(e,r=!0){return this.music?this.music.playTrack(e):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),this.triggerSubtitle(r)}play_channel(e){this.system.play({...e}),this.triggerSubtitle(e.soundIndex)}triggerSubtitle(e){if(!this.client)return;let r=this.registry.getName(e);if(!r)return;let n=r.match(/\[(.*?)\]/);n&&this.client.showSubtitle(n[1],r)}};var Si=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 bd(t,e,r,n,i){let s=new Ln({...n,client:r}),a=new Mn(e,r,i);return{runtime:new Si(t,a),audio:s}}var w0="PACK";function S0(t,e,r){let n=[];for(let i=0;i<r;i+=1){let s=t.getUint8(e+i);if(s===0)break;n.push(s)}return String.fromCharCode(...n)}function ae(t){return t.replace(/\\/g,"/").replace(/^\/+/,"").toLowerCase()}function A0(){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 M0=A0();function xd(t){let e=4294967295;for(let r=0;r<t.length;r+=1){let n=t[r];e=M0[(e^n)&255]^e>>>8}return(e^4294967295)>>>0}var fe=class extends Error{},Tn=class t{constructor(e,r,n,i){this.name=e;this.buffer=r;this.entries=new Map(n.map(s=>[s.name,s])),this.checksum=i,this.size=r.byteLength}static fromArrayBuffer(e,r){let n=new DataView(r);if(r.byteLength<12)throw new fe("PAK buffer too small to contain header");let i=String.fromCharCode(n.getUint8(0),n.getUint8(1),n.getUint8(2),n.getUint8(3));if(i!==w0)throw new fe(`Invalid PAK header magic: ${i}`);let s=n.getInt32(4,!0),a=n.getInt32(8,!0);if(s<12)throw new fe(`Invalid directory offset: ${s}`);if(a<0||a%64!==0)throw new fe(`Invalid directory length: ${a}`);if(s+a>r.byteLength)throw new fe("Directory exceeds buffer length");let d=a/64,l=[],c=new Map;for(let f=0;f<d;f+=1){let u=s+f*64,h=S0(n,u,56),m=ae(h),g=n.getInt32(u+56,!0),p=n.getInt32(u+60,!0);if(g<0||p<0||g+p>r.byteLength)throw new fe(`Invalid entry bounds for ${h||"<unnamed>"} (offset=${g}, length=${p})`);if(!m)throw new fe(`Entry ${f} has an empty name`);let y={name:m,offset:g,length:p};c.set(m,y)}return l.push(...c.values()),new t(e,r,l,xd(new Uint8Array(r)))}getEntry(e){return this.entries.get(ae(e))}listEntries(){return Array.from(this.entries.values())}readFile(e){let r=this.getEntry(e);if(!r)throw new fe(`File not found in PAK: ${e}`);return new Uint8Array(this.buffer,r.offset,r.length)}validate(){return{checksum:this.checksum,entries:this.listEntries()}}};function _d(t){return xd(new Uint8Array(t))}var E0="PACK",vd=12,dl=64;function wd(t){return t.replace(/\\/g,"/").replace(/^\/+/,"").toLowerCase()}var la=class{constructor(e){this.source=e;this.entries=null}async readDirectory(){if(this.entries)return Array.from(this.entries.values());let e=await this.readChunk(0,vd),r=new DataView(e),n=String.fromCharCode(r.getUint8(0),r.getUint8(1),r.getUint8(2),r.getUint8(3));if(n!==E0)throw new fe(`Invalid PAK header magic: ${n}`);let i=r.getInt32(4,!0),s=r.getInt32(8,!0);if(i<vd)throw new fe(`Invalid directory offset: ${i}`);if(s<0||s%dl!==0)throw new fe(`Invalid directory length: ${s}`);let a=await this.readChunk(i,s),o=new DataView(a),d=s/dl,l=new Map;for(let c=0;c<d;c++){let f=c*dl,u=this.readCString(o,f,56),h=wd(u),m=o.getInt32(f+56,!0),g=o.getInt32(f+60,!0);m<0||g<0||m+g>this.source.size,h&&l.set(h,{name:h,offset:m,length:g})}return this.entries=l,Array.from(l.values())}async readFile(e){let r=await this.getEntry(e);if(!r)throw new fe(`File not found in PAK: ${e}`);return this.source.slice(r.offset,r.offset+r.length).stream()}async getFileBlob(e){let r=await this.getEntry(e);if(!r)throw new fe(`File not found in PAK: ${e}`);return this.source.slice(r.offset,r.offset+r.length)}async getEntry(e){return this.entries||await this.readDirectory(),this.entries.get(wd(e))}async readChunk(e,r){let n=this.source.slice(e,e+r);return"arrayBuffer"in n?await n.arrayBuffer():new Response(n).arrayBuffer()}readCString(e,r,n){let i=[];for(let s=0;s<n;s+=1){let a=e.getUint8(r+s);if(a===0)break;i.push(a)}return String.fromCharCode(...i)}};var ul=12,Sd=64,ca=class t{constructor(){this.entries=new Map}addFile(e,r){let n=ae(e);if(n.length>56)throw new Error(`Path too long: '${n}' (max 56 chars)`);this.entries.set(n,r)}removeFile(e){return this.entries.delete(ae(e))}build(){let e=0;for(let u of this.entries.values())e+=u.byteLength;let r=this.entries.size*Sd,n=ul+e+r,i=new Uint8Array(n),s=new DataView(i.buffer);s.setUint8(0,80),s.setUint8(1,65),s.setUint8(2,67),s.setUint8(3,75);let a=ul+e;s.setInt32(4,a,!0),s.setInt32(8,r,!0);let o=ul,d=new Map,l=Array.from(this.entries.keys()).sort();for(let u of l){let h=this.entries.get(u);d.set(u,o),i.set(h,o),o+=h.byteLength}let c=a,f=new TextEncoder;for(let u of l){let h=this.entries.get(u),m=f.encode(u);if(m.length>56)throw new Error(`Path too long after encoding: ${u}`);for(let g=0;g<56;g++)g<m.length?s.setUint8(c+g,m[g]):s.setUint8(c+g,0);s.setInt32(c+56,d.get(u),!0),s.setInt32(c+60,h.byteLength,!0),c+=Sd}return i}static buildFromEntries(e){let r=new t;for(let[n,i]of e)r.addFile(n,i);return r.build()}};var fl=(a=>(a.Texture="texture",a.Sound="sound",a.Model="model",a.Map="map",a.Sprite="sprite",a.ConfigString="configString",a))(fl||{}),da=class{constructor(){this.tracking=!1;this.entries=[];this.currentFrame=0;this.currentTime=0}startTracking(){this.tracking=!0,this.entries=[]}stopTracking(){this.tracking=!1;let e={byFrame:new Map,byTime:new Map,uniqueResources:new Map};for(let r of this.entries){e.byFrame.has(r.frame)||e.byFrame.set(r.frame,[]),e.byFrame.get(r.frame).push(r),e.byTime.has(r.timestamp)||e.byTime.set(r.timestamp,[]),e.byTime.get(r.timestamp).push(r);let n=`${r.type}:${r.path}`;e.uniqueResources.has(n)||e.uniqueResources.set(n,r)}return e}recordLoad(e,r,n,i){this.tracking&&this.entries.push({type:e,path:r,timestamp:this.currentTime,frame:this.currentFrame,size:n,pakSource:i})}setCurrentFrame(e){this.currentFrame=e}setCurrentTime(e){this.currentTime=e}};var ua=class{constructor(e=[]){this.mounts=[];this.files=new Map;e.forEach(r=>this.mountPak(r))}mountPak(e,r=0){let n=this.mounts.findIndex(i=>i.pak===e);n!==-1&&this.mounts.splice(n,1),this.mounts.push({pak:e,priority:r}),this.mounts.sort((i,s)=>s.priority-i.priority);for(let i of e.listEntries()){let s=ae(i.name),a={archive:e,entry:i,priority:r};this.files.has(s)||this.files.set(s,[]);let o=this.files.get(s),d=o.findIndex(l=>l.archive===e);d!==-1&&o.splice(d,1),o.unshift(a),o.sort((l,c)=>c.priority-l.priority)}}setPriority(e,r){this.mountPak(e,r)}getPaks(){return[...this.mounts].sort((e,r)=>e.priority-r.priority)}get mountedPaks(){return this.mounts.map(e=>e.pak)}hasFile(e){return this.files.has(ae(e))}getSource(e){let r=this.files.get(ae(e));if(!(!r||r.length===0))return r[0]}stat(e){let r=this.getSource(e);if(r)return{path:r.entry.name,size:r.entry.length,sourcePak:r.archive.name}}getFileMetadata(e){let r=this.getSource(e);if(r)return{path:r.entry.name,size:r.entry.length,sourcePak:r.archive.name,offset:r.entry.offset}}async readFile(e){let r=this.getSource(e);if(!r)throw new Error(`File not found in VFS: ${e}`);return r.archive.readFile(e)}async readBinaryFile(e){return this.readFile(e)}streamFile(e,r=1024*1024){let n=this.getSource(e);if(!n)throw new Error(`File not found in VFS: ${e}`);let{archive:i}=n,s=i.readFile(e),a=0,o=s.length;return new ReadableStream({pull(d){if(a>=o){d.close();return}let l=Math.min(a+r,o),c=s.slice(a,l);a=l,d.enqueue(c)}})}async readTextFile(e){let r=await this.readFile(e);return new TextDecoder("utf-8").decode(r)}list(e=""){let r=ae(e).replace(/\/+$|^\//g,""),n=[],i=new Set,s=r?`${r}/`:"";for(let[a,o]of this.files){let d=o[0];if(r&&!d.entry.name.startsWith(s))continue;let l=r?d.entry.name.slice(s.length):d.entry.name,c=l.indexOf("/");c===-1?n.push({path:d.entry.name,size:d.entry.length,sourcePak:d.archive.name}):i.add(l.slice(0,c))}return n.sort((a,o)=>a.path.localeCompare(o.path)),{files:n,directories:[...i].sort()}}async listDirectory(e){return this.list(e).files}findByExtension(e){let r=e.startsWith(".")?e.toLowerCase():`.${e.toLowerCase()}`,n=[];for(let[i,s]of this.files){let a=s[0];a.entry.name.toLowerCase().endsWith(r)&&n.push({path:a.entry.name,size:a.entry.length,sourcePak:a.archive.name})}return n.sort((i,s)=>i.path.localeCompare(s.path))}listByExtension(e){let r=new Set(e.map(i=>i.startsWith(".")?i.toLowerCase():`.${i.toLowerCase()}`)),n=[];for(let[i,s]of this.files){let a=s[0],o=a.entry.name.toLowerCase();for(let d of r)if(o.endsWith(d)){n.push({path:a.entry.name,size:a.entry.length,sourcePak:a.archive.name});break}}return n.sort((i,s)=>i.path.localeCompare(s.path))}searchFiles(e){let r=[];for(let[n,i]of this.files){let s=i[0];e.test(s.entry.name)&&r.push({path:s.entry.name,size:s.entry.length,sourcePak:s.archive.name})}return r.sort((n,i)=>n.path.localeCompare(i.path))}getPakInfo(){return this.mounts.map(e=>({filename:e.pak.name,entryCount:e.pak.listEntries().length,totalSize:e.pak.size,priority:e.priority}))}getDirectoryTree(){let e={name:"",path:"",files:[],directories:[]},r=new Map;r.set("",e);let n=Array.from(this.files.values()).map(i=>{let s=i[0];return{path:s.entry.name,size:s.entry.length,sourcePak:s.archive.name}}).sort((i,s)=>i.path.localeCompare(s.path));for(let i of n){let s=i.path.split("/"),a=s.pop(),o="",d=e;for(let l of s){let c=o;o=o?`${o}/${l}`:l;let f=r.get(o);f||(f={name:l,path:o,files:[],directories:[]},d.directories.push(f),r.set(o,f)),d=f}d.files.push(i)}return e}};var hl=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"}]),Wr=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"}},fa=class{constructor(e=hl){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")),i=e.checksum,s="size"in e?e.size:void 0,a=this.known.get(n);return a?a.checksum!==i?{name:n,checksum:i,expectedChecksum:a.checksum,status:"mismatch",size:s,description:a.description}:{name:n,checksum:i,expectedChecksum:a.checksum,status:"valid",size:s,description:a.description}:{name:n,checksum:i,status:"unknown",size:s}}assertValid(e,r){let n=this.validateArchive(e,r);if(n.status==="mismatch")throw new Wr(n);return n}normalizePakName(e){let r=ae(e),n=r.split("/"),i=n.pop()??r,s=n.pop();return s?`${i}@${s}`:i}};var Xt=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 L0(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 i=new FileReader;i.onerror=()=>n(i.error??new Error("Unknown FileReader error")),i.onprogress=s=>{e?.({file:"blob",loadedBytes:s.loaded,totalBytes:s.total||t.size,state:"reading"})},i.onload=()=>{let s=i.result;s instanceof ArrayBuffer?r(s):n(new Error("Unexpected FileReader result"))},i.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=[],i=0;for(;;){let{done:o,value:d}=await r.read();if(o)break;if(!d)continue;let l=d;n.push(l),i+=l.byteLength,e?.({file:"blob",loadedBytes:i,totalBytes:t.size,state:"reading"})}let s=new Uint8Array(i),a=0;for(let o of n)s.set(o,a),a+=o.byteLength;return s.buffer}throw new Xt("blob",new Error("Unsupported Blob type"))}async function T0(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 L0(t.data,i=>e?.({...i,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 ha(t,e,r){let n=typeof r=="function"?{onProgress:r}:r??{},i=n.persistIndexes??!!n.pakIndexStore,s=n.enforceValidation??!!n.validator,a=n.allowUnknownPaks??!0,o=n.stopOnError??!1,d=[];for(let l of e)try{let c=await T0(l,n.onProgress),f=Tn.fromArrayBuffer(l.name,c),u=n.validator?.validateArchive(f);if(u){n.onValidationResult?.(u);let h=u.status==="mismatch",m=u.status==="unknown";if(h&&s||m&&!a){let g=new Wr(u);if(n.onError?.(l.name,g),o)throw new Xt(l.name,g);d.push({archive:f,mounted:!1,validation:u});continue}}if(t.mountPak(f),i&&n.pakIndexStore)try{await n.pakIndexStore.persist(f)}catch(h){if(n.onError?.(l.name,h),o)throw new Xt(l.name,h)}n.onProgress?.({file:l.name,loadedBytes:c.byteLength,totalBytes:c.byteLength,state:"parsed"}),d.push({archive:f,mounted:!0,validation:u})}catch(c){if(n.onProgress?.({file:l.name,loadedBytes:0,totalBytes:0,state:"error"}),n.onError?.(l.name,c),o)throw new Xt(l.name,c)}return d}var Kt=class{constructor(e,r=1/0,n=()=>0){this.capacity=e;this.maxMemory=r;this.sizeCalculator=n;this.map=new Map;this.currentMemoryUsage=0;if(e<=0)throw new RangeError("LRU cache capacity must be greater than zero")}get size(){return this.map.size}get memoryUsage(){return this.currentMemoryUsage}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){let n=this.sizeCalculator(r);this.map.has(e)&&this.delete(e),this.map.set(e,r),this.currentMemoryUsage+=n,this.evict()}delete(e){let r=this.map.get(e);return r!==void 0?(this.currentMemoryUsage-=this.sizeCalculator(r),this.map.delete(e)):!1}clear(){this.map.clear(),this.currentMemoryUsage=0}entries(){return Array.from(this.map.entries()).reverse().map(([e,r])=>({key:e,value:r}))}evict(){for(;this.map.size>this.capacity;){let e=this.map.keys().next();if(!e.done)this.delete(e.value);else break}for(;this.currentMemoryUsage>this.maxMemory&&this.map.size>0;){let e=this.map.keys().next();if(!e.done)this.delete(e.value);else break}}};function C0(t){return Array.isArray(t)?t:Array.from(t)}function ml(t){return C0(t).map(e=>({name:e.name,data:e}))}async function Ad(t,e,r){let n=ml(e);return ha(t,n,r??{})}function Md(t,e){let r=i=>{i.preventDefault(),i.dataTransfer?.dropEffect&&(i.dataTransfer.dropEffect="copy")},n=i=>{i.preventDefault();let s=i.dataTransfer?.files;s&&s.length>0&&e(Array.from(s))};return t.addEventListener("dragover",r),t.addEventListener("drop",n),()=>{t.removeEventListener("dragover",r),t.removeEventListener("drop",n)}}function Ed(t,e){let r=n=>{let i=n.target;!i||!i.files||i.files.length===0||(e(i.files),i.value="")};return t.addEventListener("change",r),()=>t.removeEventListener("change",r)}var I0="IBSP",k0=38,Td=19,R0=8+Td*8;var Q=class extends Error{},Cn=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),Ai(n.buffer)}};function Ai(t){if(t.byteLength<R0)throw new Q("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!==I0)throw new Q(`Invalid BSP magic ${r}`);let n=e.getInt32(4,!0);if(n!==k0)throw new Q(`Unsupported BSP version ${n}`);let i=new Map;for(let w=0;w<Td;w+=1){let L=e.getInt32(8+w*8,!0),T=e.getInt32(12+w*8,!0);if(L<0||T<0||L+T>t.byteLength)throw new Q(`Invalid lump bounds for index ${w}`);i.set(w,{offset:L,length:T})}let s={version:n,lumps:i},a=F0(t,i.get(0)),o=D0(t,i.get(1)),d=O0(t,i.get(2)),l=z0(t,i.get(4)),c=N0(t,i.get(5)),f=U0(t,i.get(6)),u=new Uint8Array(t,i.get(7).offset,i.get(7).length),h=Y0(f,i.get(7)),m=H0(t,i.get(8)),g=V0(t,i.get(11)),p=G0(t,i.get(12)),y=W0(t,i.get(13)),_=X0(t,i.get(14)),x=K0(t,i.get(15)),b=$0(t,i.get(9),i.get(10),m),v=Z0(t,i.get(3));return{header:s,entities:a,planes:o,vertices:d,nodes:l,texInfo:c,faces:f,lightMaps:u,lightMapInfo:h,leafs:m,leafLists:b,edges:g,surfEdges:p,models:y,brushes:_,brushSides:x,visibility:v,pickEntity(w){let L=null,T=1/0;for(let A of a.entities){let I=A.properties.model;if(!I||!I.startsWith("*"))continue;let R=parseInt(I.substring(1),10);if(isNaN(R)||R<0||R>=y.length)continue;let F=y[R],k=P0(w.origin,w.direction,F.mins,F.maxs);k!==null&&k<T&&(T=k,L={entity:A,model:F,distance:k})}return L}}}function P0(t,e,r,n){let i=0,s=1/0;for(let a=0;a<3;a++)if(Math.abs(e[a])<1e-8){if(t[a]<r[a]||t[a]>n[a])return null}else{let o=1/e[a],d=(r[a]-t[a])*o,l=(n[a]-t[a])*o;if(d>l){let c=d;d=l,l=c}if(i=Math.max(i,d),s=Math.min(s,l),i>s)return null}return i}function F0(t,e){let r=new TextDecoder().decode(new Uint8Array(t,e.offset,e.length)),n=B0(r),i=n.find(s=>s.classname==="worldspawn");return{raw:r,entities:n,worldspawn:i,getUniqueClassnames(){let s=new Set;for(let a of n)a.classname&&s.add(a.classname);return Array.from(s).sort()}}}function B0(t){let e=[],r=/\{([^}]*)\}/gms,n;for(;(n=r.exec(t))!==null;){let i=n[1],s={},a=/"([^\"]*)"\s+"([^\"]*)"/g,o;for(;(o=a.exec(i))!==null;)s[o[1]]=o[2];e.push({classname:s.classname,properties:s})}return e}function D0(t,e){let r=new DataView(t,e.offset,e.length),n=e.length/20;if(n%1!==0)throw new Q("Plane lump has invalid length");let i=[];for(let s=0;s<n;s+=1){let a=[r.getFloat32(s*20,!0),r.getFloat32(s*20+4,!0),r.getFloat32(s*20+8,!0)],o=r.getFloat32(s*20+12,!0),d=r.getInt32(s*20+16,!0);i.push({normal:a,dist:o,type:d})}return i}function O0(t,e){let r=new DataView(t,e.offset,e.length),n=e.length/12;if(n%1!==0)throw new Q("Vertex lump has invalid length");let i=[];for(let s=0;s<n;s+=1)i.push([r.getFloat32(s*12,!0),r.getFloat32(s*12+4,!0),r.getFloat32(s*12+8,!0)]);return i}function z0(t,e){let r=new DataView(t,e.offset,e.length),n=28,i=e.length/n;if(i%1!==0)throw new Q("Node lump has invalid length");let s=[];for(let a=0;a<i;a+=1){let o=a*n,d=r.getInt32(o,!0),l=[r.getInt32(o+4,!0),r.getInt32(o+8,!0)],c=[r.getInt16(o+12,!0),r.getInt16(o+14,!0),r.getInt16(o+16,!0)],f=[r.getInt16(o+18,!0),r.getInt16(o+20,!0),r.getInt16(o+22,!0)],u=r.getUint16(o+24,!0),h=r.getUint16(o+26,!0);s.push({planeIndex:d,children:l,mins:c,maxs:f,firstFace:u,numFaces:h})}return s}function N0(t,e){let r=new DataView(t,e.offset,e.length),n=76,i=e.length/n;if(i%1!==0)throw new Q("TexInfo lump has invalid length");let s=[];for(let a=0;a<i;a+=1){let o=a*n,d=[r.getFloat32(o,!0),r.getFloat32(o+4,!0),r.getFloat32(o+8,!0)],l=r.getFloat32(o+12,!0),c=[r.getFloat32(o+16,!0),r.getFloat32(o+20,!0),r.getFloat32(o+24,!0)],f=r.getFloat32(o+28,!0),u=r.getInt32(o+32,!0),h=r.getInt32(o+36,!0),m=new Uint8Array(t,e.offset+o+40,32),g=new TextDecoder("utf-8").decode(m).replace(/\0.*$/,""),p=r.getInt32(o+72,!0);s.push({s:d,sOffset:l,t:c,tOffset:f,flags:u,value:h,texture:g,nextTexInfo:p})}return s}function U0(t,e){let r=new DataView(t,e.offset,e.length),n=20,i=e.length/n;if(i%1!==0)throw new Q("Face lump has invalid length");let s=[];for(let a=0;a<i;a+=1){let o=a*n,d=r.getUint16(o,!0),l=r.getInt16(o+2,!0),c=r.getInt32(o+4,!0),f=r.getInt16(o+8,!0),u=r.getInt16(o+10,!0),h=[r.getUint8(o+12),r.getUint8(o+13),r.getUint8(o+14),r.getUint8(o+15)],m=r.getInt32(o+16,!0);s.push({planeIndex:d,side:l,firstEdge:c,numEdges:f,texInfo:u,styles:h,lightOffset:m})}return s}function H0(t,e){let r=new DataView(t,e.offset,e.length),n=28,i=e.length/n;if(i%1!==0)throw new Q("Leaf lump has invalid length");let s=[];for(let a=0;a<i;a+=1){let o=a*n,d=r.getInt32(o,!0),l=r.getInt16(o+4,!0),c=r.getInt16(o+6,!0),f=[r.getInt16(o+8,!0),r.getInt16(o+10,!0),r.getInt16(o+12,!0)],u=[r.getInt16(o+14,!0),r.getInt16(o+16,!0),r.getInt16(o+18,!0)],h=r.getUint16(o+20,!0),m=r.getUint16(o+22,!0),g=r.getUint16(o+24,!0),p=r.getUint16(o+26,!0);s.push({contents:d,cluster:l,area:c,mins:f,maxs:u,firstLeafFace:h,numLeafFaces:m,firstLeafBrush:g,numLeafBrushes:p})}return s}function V0(t,e){let r=new DataView(t,e.offset,e.length),n=4,i=e.length/n;if(i%1!==0)throw new Q("Edge lump has invalid length");let s=[];for(let a=0;a<i;a+=1){let o=a*n;s.push({vertices:[r.getUint16(o,!0),r.getUint16(o+2,!0)]})}return s}function G0(t,e){let r=e.length/4;if(r%1!==0)throw new Q("SurfEdge lump has invalid length");let n=new DataView(t,e.offset,e.length),i=new Int32Array(r);for(let s=0;s<r;s+=1)i[s]=n.getInt32(s*4,!0);return i}function W0(t,e){let r=new DataView(t,e.offset,e.length),n=48;if(e.length%n!==0)throw new Q("Model lump has invalid length");let i=e.length/n,s=[];for(let a=0;a<i;a+=1){let o=a*n,d=[r.getFloat32(o,!0),r.getFloat32(o+4,!0),r.getFloat32(o+8,!0)],l=[r.getFloat32(o+12,!0),r.getFloat32(o+16,!0),r.getFloat32(o+20,!0)],c=[r.getFloat32(o+24,!0),r.getFloat32(o+28,!0),r.getFloat32(o+32,!0)],f=r.getInt32(o+36,!0),u=r.getInt32(o+40,!0),h=r.getInt32(o+44,!0);s.push({mins:d,maxs:l,origin:c,headNode:f,firstFace:u,numFaces:h})}return s}function X0(t,e){let r=new DataView(t,e.offset,e.length),n=12,i=e.length/n;if(i%1!==0)throw new Q("Brush lump has invalid length");let s=[];for(let a=0;a<i;a+=1){let o=a*n;s.push({firstSide:r.getInt32(o,!0),numSides:r.getInt32(o+4,!0),contents:r.getInt32(o+8,!0)})}return s}function K0(t,e){let r=new DataView(t,e.offset,e.length),n=4,i=e.length/n;if(i%1!==0)throw new Q("Brush side lump has invalid length");let s=[];for(let a=0;a<i;a+=1){let o=a*n;s.push({planeIndex:r.getUint16(o,!0),texInfo:r.getInt16(o+2,!0)})}return s}function $0(t,e,r,n){let i=[],s=[],a=e.length/2,o=r.length/2,d=new DataView(t,e.offset,e.length),l=new DataView(t,r.offset,r.length);for(let c of n){if(c.firstLeafFace+c.numLeafFaces>a)throw new Q("Leaf faces reference data past lump bounds");if(c.firstLeafBrush+c.numLeafBrushes>o)throw new Q("Leaf brushes reference data past lump bounds");let f=[];for(let h=0;h<c.numLeafFaces;h+=1)f.push(d.getUint16((c.firstLeafFace+h)*2,!0));let u=[];for(let h=0;h<c.numLeafBrushes;h+=1)u.push(l.getUint16((c.firstLeafBrush+h)*2,!0));i.push(f),s.push(u)}return{leafFaces:i,leafBrushes:s}}function Z0(t,e){if(e.length===0)return;if(e.length<4)throw new Q("Visibility lump too small");let r=new DataView(t,e.offset,e.length),n=r.getInt32(0,!0),i=4+n*8;if(n<0||i>e.length)throw new Q("Visibility lump truncated");let s=4,a=[];for(let o=0;o<n;o+=1){let d=r.getInt32(s,!0),l=r.getInt32(s+4,!0);s+=8;let c=e.offset+d,f=e.offset+l,u=e.offset+e.length;if(d<0||l<0||c>=u||f>=u)throw new Q("Visibility offsets out of range");a.push({pvs:Ld(t,c,n,e),phs:Ld(t,f,n,e)})}return{numClusters:n,clusters:a}}function Ld(t,e,r,n){let i=Math.ceil(r/8),s=new Uint8Array(i),a=new Uint8Array(t),o=e,d=0,l=n.offset+n.length;for(;d<i;){if(o>=l)throw new Q("Visibility data truncated");let c=a[o++];if(c!==0){s[d++]=c;continue}if(o>=l)throw new Q("Visibility run exceeds lump bounds");let f=a[o++];for(let u=0;u<f&&d<i;u+=1)s[d++]=0}return s}function Y0(t,e){return t.map(r=>{if(!(r.lightOffset<0))return{offset:r.lightOffset,length:Math.max(0,e.length-r.lightOffset)}})}function ma(t,e,r){if(t.lightOffset<0||t.lightOffset>=e.byteLength)return;let n=e.byteLength-t.lightOffset,i=Math.min(r?.length??n,n);if(!(i<=0))return e.subarray(t.lightOffset,t.lightOffset+i)}var q0=844121161,j0=8,Cd=68,ye=class extends Error{},In=class{constructor(e){this.vfs=e;this.cache=new Map}async load(e){if(this.cache.has(e))return this.cache.get(e);let r=await this.vfs.readFile(e),n=new Uint8Array(r.byteLength);n.set(r);let i=pl(n.buffer);return this.cache.set(e,i),i}get(e){return this.cache.get(e)}};function Id(t,e,r){let n=[];for(let i=0;i<r;i+=1){let s=t.getUint8(e+i);if(s===0)break;n.push(s)}return String.fromCharCode(...n)}function Mi(t,e,r,n){if(r!==0&&(e<Cd||e+r>t.byteLength))throw new ye(`${n} section is out of bounds`)}function Q0(t){if(t.byteLength<Cd)throw new ye("MD2 buffer too small to contain header");let e=new DataView(t),r=e.getInt32(0,!0),n=e.getInt32(4,!0);if(r!==q0)throw new ye(`Invalid MD2 ident: ${r}`);if(n!==j0)throw new ye(`Unsupported MD2 version: ${n}`);let i={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),magic:r},s=40+i.numVertices*4;if(i.frameSize!==s)throw new ye(`Unexpected frame size ${i.frameSize}, expected ${s}`);if(i.offsetEnd>t.byteLength)throw new ye("MD2 offset_end exceeds buffer length");return i}function J0(t,e){let r=e.numSkins*64;Mi(t,e.offsetSkins,r,"skins");let n=new DataView(t,e.offsetSkins,r),i=[];for(let s=0;s<e.numSkins;s+=1)i.push({name:Id(n,s*64,64)});return i}function em(t,e){let r=e.numTexCoords*4;Mi(t,e.offsetTexCoords,r,"texcoords");let n=new DataView(t,e.offsetTexCoords,r),i=[];for(let s=0;s<e.numTexCoords;s+=1){let a=s*4;i.push({s:n.getInt16(a,!0),t:n.getInt16(a+2,!0)})}return i}function tm(t,e){let r=e.numTriangles*12;Mi(t,e.offsetTriangles,r,"triangles");let n=new DataView(t,e.offsetTriangles,r),i=[];for(let s=0;s<e.numTriangles;s+=1){let a=s*12,o=[n.getUint16(a,!0),n.getUint16(a+2,!0),n.getUint16(a+4,!0)],d=[n.getUint16(a+6,!0),n.getUint16(a+8,!0),n.getUint16(a+10,!0)];if(o.some(l=>l>=e.numVertices)||d.some(l=>l>=e.numTexCoords))throw new ye("Triangle references out of range vertex or texcoord");i.push({vertexIndices:o,texCoordIndices:d})}return i}function rm(t,e){let r=e.numFrames*e.frameSize;Mi(t,e.offsetFrames,r,"frames");let n=[];for(let i=0;i<e.numFrames;i+=1){let s=e.offsetFrames+i*e.frameSize,a=new DataView(t,s,e.frameSize),o={x:a.getFloat32(0,!0),y:a.getFloat32(4,!0),z:a.getFloat32(8,!0)},d={x:a.getFloat32(12,!0),y:a.getFloat32(16,!0),z:a.getFloat32(20,!0)},l=Id(a,24,16),c=[],f=1/0,u=1/0,h=1/0,m=-1/0,g=-1/0,p=-1/0;for(let y=0;y<e.numVertices;y+=1){let _=40+y*4,x=a.getUint8(_)*o.x+d.x,b=a.getUint8(_+1)*o.y+d.y,v=a.getUint8(_+2)*o.z+d.z;x<f&&(f=x),b<u&&(u=b),v<h&&(h=v),x>m&&(m=x),b>g&&(g=b),v>p&&(p=v);let S={x,y:b,z:v},w=a.getUint8(_+3),L=Gt[w];if(!L)throw new ye(`Invalid normal index ${w} in frame ${l}`);let T={x:L[0],y:L[1],z:L[2]};c.push({position:S,normalIndex:w,normal:T})}n.push({name:l,vertices:c,minBounds:{x:f,y:u,z:h},maxBounds:{x:m,y:g,z:p}})}return n}function nm(t,e){let r=e.numGlCommands*4;if(Mi(t,e.offsetGlCommands,r,"gl commands"),r===0)return[];let n=new DataView(t,e.offsetGlCommands,r),i=[],s=0;for(;;){if(s+4>r)throw new ye("GL command list ended unexpectedly");let a=n.getInt32(s,!0);if(s+=4,a===0)break;let o=Math.abs(a),d=[],l=o*12;if(s+l>r)throw new ye("GL command vertex block exceeds buffer");for(let c=0;c<o;c+=1){let f=n.getFloat32(s,!0),u=n.getFloat32(s+4,!0),h=n.getInt32(s+8,!0);if(s+=12,h<0||h>=e.numVertices)throw new ye("GL command references invalid vertex index");d.push({s:f,t:u,vertexIndex:h})}i.push({mode:a>0?"strip":"fan",vertices:d})}if(s!==r)throw new ye("GL command list did not consume expected data");return i}function pl(t){let e=Q0(t),r=J0(t,e),n=em(t,e),i=tm(t,e),s=rm(t,e),a=nm(t,e);return{header:e,skins:r,texCoords:n,triangles:i,frames:s,glCommands:a}}function kd(t){let e=[],r=0;for(;r<t.length;){let n=t[r].name,i=n.replace(/\d+$/,"")||n,s=r;for(;s+1<t.length&&(t[s+1].name.replace(/\d+$/,"")||t[s+1].name)===i;)s+=1;e.push({name:i,firstFrame:r,lastFrame:s}),r=s+1}return e}var Rd=860898377,im=15,Ge=class extends Error{constructor(e){super(e),this.name="Md3ParseError"}};function Ei(t,e,r){let n=new Uint8Array(t.buffer,t.byteOffset+e,r);return new TextDecoder("utf-8").decode(n).replace(/\0.*$/,"").trim()}function sm(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 pa(t,e,r,n){if(e<0||e+r>n)throw new Ge(`${t} exceeds buffer bounds`)}function am(t){let e=t.getInt32(0,!0);if(e!==Rd)throw new Ge(`Invalid MD3 ident: ${e}`);let r=t.getInt32(4,!0);if(r!==im)throw new Ge(`Unsupported MD3 version: ${r}`);let n=Ei(t,8,64),i=t.getInt32(72,!0),s=t.getInt32(76,!0),a=t.getInt32(80,!0),o=t.getInt32(84,!0),d=t.getInt32(88,!0),l=t.getInt32(92,!0),c=t.getInt32(96,!0),f=t.getInt32(100,!0),u=t.getInt32(104,!0);if(s<=0||o<0||a<0)throw new Ge("Invalid MD3 counts");return{ident:e,version:r,name:n,flags:i,numFrames:s,numTags:a,numSurfaces:o,numSkins:d,ofsFrames:l,ofsTags:c,ofsSurfaces:f,ofsEnd:u,magic:e}}function om(t,e){let r=[];pa("Frames",e.ofsFrames,e.numFrames*56,t.byteLength);for(let i=0;i<e.numFrames;i+=1){let s=e.ofsFrames+i*56;r.push({minBounds:{x:t.getFloat32(s,!0),y:t.getFloat32(s+4,!0),z:t.getFloat32(s+8,!0)},maxBounds:{x:t.getFloat32(s+12,!0),y:t.getFloat32(s+16,!0),z:t.getFloat32(s+20,!0)},localOrigin:{x:t.getFloat32(s+24,!0),y:t.getFloat32(s+28,!0),z:t.getFloat32(s+32,!0)},radius:t.getFloat32(s+36,!0),name:Ei(t,s+40,16)})}return r}function lm(t,e){let r=[],i=e.numFrames*e.numTags*112;pa("Tags",e.ofsTags,i,t.byteLength);for(let s=0;s<e.numFrames;s+=1){let a=[];for(let o=0;o<e.numTags;o+=1){let d=e.ofsTags+(s*e.numTags+o)*112,l=d+64,c=l+12;a.push({name:Ei(t,d,64),origin:{x:t.getFloat32(l,!0),y:t.getFloat32(l+4,!0),z:t.getFloat32(l+8,!0)},axis:[{x:t.getFloat32(c,!0),y:t.getFloat32(c+4,!0),z:t.getFloat32(c+8,!0)},{x:t.getFloat32(c+12,!0),y:t.getFloat32(c+16,!0),z:t.getFloat32(c+20,!0)},{x:t.getFloat32(c+24,!0),y:t.getFloat32(c+28,!0),z:t.getFloat32(c+32,!0)}]})}r.push(a)}return r}function cm(t,e){let r=t.getInt32(e,!0);if(r!==Rd)throw new Ge(`Invalid surface ident at ${e}: ${r}`);let n=Ei(t,e+4,64),i=t.getInt32(e+68,!0),s=t.getInt32(e+72,!0),a=t.getInt32(e+76,!0),o=t.getInt32(e+80,!0),d=t.getInt32(e+84,!0),l=t.getInt32(e+88,!0),c=t.getInt32(e+92,!0),f=t.getInt32(e+96,!0),u=t.getInt32(e+100,!0),h=t.getInt32(e+104,!0);if(s<=0||o<=0||d<=0)throw new Ge(`Invalid surface counts for ${n}`);let m=h;pa(`Surface ${n}`,e,m,t.byteLength);let g=[],p=e+l;for(let w=0;w<d;w+=1){let L=p+w*12;g.push({indices:[t.getInt32(L,!0),t.getInt32(L+4,!0),t.getInt32(L+8,!0)]})}let y=[],_=e+c;for(let w=0;w<a;w+=1){let L=_+w*68;y.push({name:Ei(t,L,64),shaderIndex:t.getInt32(L+64,!0)})}let x=[],b=e+f;for(let w=0;w<o;w+=1){let L=b+w*8;x.push({s:t.getFloat32(L,!0),t:t.getFloat32(L+4,!0)})}let v=[],S=e+u;for(let w=0;w<s;w+=1){let L=[];for(let T=0;T<o;T+=1){let A=S+(w*o+T)*8,I=t.getInt16(A,!0)/64,R=t.getInt16(A+2,!0)/64,F=t.getInt16(A+4,!0)/64,k=t.getUint16(A+6,!0);L.push({position:{x:I,y:R,z:F},latLng:k,normal:sm(k)})}v.push(L)}return{surface:{name:n,flags:i,numFrames:s,shaders:y,triangles:g,texCoords:x,vertices:v},nextOffset:e+h}}function gl(t){if(t.byteLength<108)throw new Ge("MD3 buffer too small for header");let e=new DataView(t),r=am(e);pa("MD3 end",r.ofsEnd,0,t.byteLength);let n=om(e,r),i=lm(e,r),s=[],a=r.ofsSurfaces;for(let o=0;o<r.numSurfaces;o+=1){let{surface:d,nextOffset:l}=cm(e,a);s.push(d),a=l}if(a!==r.ofsEnd)throw new Ge("Surface parsing did not reach ofsEnd");return{header:r,frames:n,tags:i,surfaces:s}}var kn=class{constructor(e){this.vfs=e;this.cache=new Map}async load(e){if(this.cache.has(e))return this.cache.get(e);let r=await this.vfs.readFile(e),n=gl(r.slice().buffer);return this.cache.set(e,n),n}get(e){return this.cache.get(e)}};var dm=844317769,um=2,Pd=64,Fd=12,$t=class extends Error{};function fm(t,e,r){let n=[];for(let i=0;i<r;i+=1){let s=t.getUint8(e+i);if(s===0)break;n.push(s)}return String.fromCharCode(...n)}function yl(t){if(t.byteLength<Fd)throw new $t("Sprite buffer too small to contain header");let e=new DataView(t),r=e.getInt32(0,!0),n=e.getInt32(4,!0),i=e.getInt32(8,!0);if(r!==dm)throw new $t(`Invalid Sprite ident: ${r}`);if(n!==um)throw new $t(`Unsupported Sprite version: ${n}`);let s=[],a=16+Pd,o=Fd;for(let d=0;d<i;d+=1){if(o+a>t.byteLength)throw new $t("Sprite frame data exceeds buffer length");let l=e.getInt32(o,!0),c=e.getInt32(o+4,!0),f=e.getInt32(o+8,!0),u=e.getInt32(o+12,!0),h=fm(e,o+16,Pd);s.push({width:l,height:c,originX:f,originY:u,name:h}),o+=a}return{ident:r,version:n,numFrames:i,frames:s}}var Rn=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),yl(n.buffer)}};function Bd(t,e){let r=(t.sequence.end-t.sequence.start+1)/t.sequence.fps,n=t.sequence.loop!==!1,i=t.time+e;return n?i=(i%r+r)%r:i>r&&(i=r),{...t,time:Math.max(0,Math.min(i,r))}}function Dd(t){let e=t.sequence.end-t.sequence.start+1,r=1/t.sequence.fps,n=t.sequence.loop!==!1,i=t.time/r;if(!n&&i>=e)return{frame0:t.sequence.end,frame1:t.sequence.end,lerp:0};let s=n?i%e:Math.min(i,e-1),a=Math.floor(s),o=t.sequence.start+a,d=a+1>=e?n?t.sequence.start:t.sequence.end:o+1,l=!n&&a>=e-1?0:s-a;return{frame0:o,frame1:d,lerp:l}}function Od(t){return{sequence:t,time:0}}function zd(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 Li=class extends Error{constructor(e){super(e),this.name="WalParseError"}};function ga(t){if(t.byteLength<100)throw new Li("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(),i=e.getInt32(32,!0),s=e.getInt32(36,!0),a=[e.getInt32(40,!0),e.getInt32(44,!0),e.getInt32(48,!0),e.getInt32(52,!0)],o=new Uint8Array(t,56,32),d=new TextDecoder("utf-8").decode(o).replace(/\0.*$/,"").trim(),l=e.getInt32(88,!0),c=e.getInt32(92,!0),f=e.getInt32(96,!0);if(i<=0||s<=0)throw new Li("Invalid WAL dimensions");let u=[],h=i,m=s;for(let g=0;g<a.length;g+=1){let p=a[g],y=Math.max(1,h*m|0);if(p<=0||p+y>t.byteLength)throw new Li(`Invalid WAL mip offset for level ${g}`);let _=new Uint8Array(t,p,y);u.push({level:g,width:h,height:m,data:_}),h=Math.max(1,h>>1),m=Math.max(1,m>>1)}return{name:n,width:i,height:s,mipmaps:u,animName:d,flags:l,contents:c,value:f}}var Xr=class extends Error{constructor(e){super(e),this.name="PcxParseError"}};function Ti(t){if(t.byteLength<128)throw new Xr("PCX buffer too small for header");let e=new DataView(t),r=e.getUint8(0),n=e.getUint8(2),i=e.getUint8(3),s=e.getUint16(4,!0),a=e.getUint16(6,!0),o=e.getUint16(8,!0),d=e.getUint16(10,!0);if(r!==10||n!==1)throw new Xr("Unsupported PCX encoding");if(i!==8)throw new Xr("Only 8bpp PCX files are supported");let l=o-s+1,c=d-a+1,f=e.getUint16(66,!0),u=t.byteLength-769;if(u<128||new DataView(t,u,1).getUint8(0)!==12)throw new Xr("Missing PCX palette");let h=new Uint8Array(t,u+1,768),m=new Uint8Array(t,128,u-128),g=new Uint8Array(l*c),p=0,y=0;for(let _=0;_<c;_+=1){let x=0;for(;x<f&&p<m.length;){let b=1,v=m[p++];if((v&192)===192){if(b=v&63,p>=m.length)throw new Xr("Unexpected end of PCX RLE data");v=m[p++]}for(let S=0;S<b&&x<f;S+=1)x<l&&(g[y++]=v),x+=1}}return{width:l,height:c,bitsPerPixel:i,pixels:g,palette:h}}function ya(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],i=n*3,s=r*4;e[s]=t.palette[i],e[s+1]=t.palette[i+1],e[s+2]=t.palette[i+2],e[s+3]=n===255?0:255}return e}var Mt=class extends Error{constructor(e){super(e),this.name="TgaParseError"}};function bl(t){let e=new DataView(t);if(t.byteLength<18)throw new Mt("Buffer too small for TGA header");let r=e.getUint8(0),n=e.getUint8(1),i=e.getUint8(2),s=e.getUint16(12,!0),a=e.getUint16(14,!0),o=e.getUint8(16),d=e.getUint8(17);if(i!==2&&i!==10&&i!==3&&i!==11)throw new Mt(`Unsupported TGA image type: ${i} (only RGB/Grayscale supported)`);if(o!==24&&o!==32&&o!==8)throw new Mt(`Unsupported pixel depth: ${o} (only 8, 24, 32 bpp supported)`);let l=i>=9,c=i===3||i===11,f=o/8,u=18+r;if(n===1){let x=e.getUint16(5,!0),b=e.getUint8(7);u+=x*(b/8)}let h=s*a,m=new Uint8Array(h*4),g=(d&32)!==0,p=0,y=new Uint8Array(t),_=x=>{if(c){let b=y[u++];m[x]=b,m[x+1]=b,m[x+2]=b,m[x+3]=255}else{let b=y[u++],v=y[u++],S=y[u++],w=o===32?y[u++]:255;m[x]=S,m[x+1]=v,m[x+2]=b,m[x+3]=w}};if(l){let x=0;for(;x<h;){if(u>=t.byteLength)throw new Mt("Unexpected end of TGA RLE data");let b=y[u++],v=(b&127)+1,S=(b&128)!==0;if(x+v>h)throw new Mt("TGA RLE packet exceeds image bounds");if(S){let w=c?y[u]:y[u+2],L=c?y[u]:y[u+1],T=y[u],A=c?255:o===32?y[u+3]:255;u+=f;for(let I=0;I<v;I++){let R=(x+I)*4;m[R]=w,m[R+1]=L,m[R+2]=T,m[R+3]=A}}else for(let w=0;w<v;w++)_((x+w)*4);x+=v}}else for(let x=0;x<h;x++){if(u>=t.byteLength)throw new Mt("Unexpected end of TGA data");_(x*4)}if(!g){let x=s*4,b=new Uint8Array(x);for(let v=0;v<a/2;v++){let S=v*x,w=(a-1-v)*x;b.set(m.subarray(S,S+x)),m.set(m.subarray(w,w+x),S),m.set(b,w)}}return{width:s,height:a,bitsPerPixel:32,pixels:m}}function hm(t){let e=0;for(let r of t.levels)e+=r.rgba.byteLength;return e}var Pn=class{constructor(e={}){this.cache=new Kt(e.capacity??128,e.maxMemory??256*1024*1024,hm)}get size(){return this.cache.size}get memoryUsage(){return this.cache.memoryUsage}get(e){return this.cache.get(e.toLowerCase())}set(e,r){this.cache.set(e.toLowerCase(),r)}clear(){this.cache.clear()}};function xl(t,e){let r=[];for(let n of t.mipmaps){let i=new Uint8Array(n.width*n.height*4);for(let s=0;s<n.data.length;s+=1){let a=n.data[s],o=a*3,d=s*4;i[d]=e[o],i[d+1]=e[o+1],i[d+2]=e[o+2],i[d+3]=a===255?0:255}r.push({level:n.level,width:n.width,height:n.height,rgba:i})}return{width:t.width,height:t.height,levels:r,source:"wal"}}function ba(t){let e=ya(t),r={level:0,width:t.width,height:t.height,rgba:e};return{width:t.width,height:t.height,levels:[r],source:"pcx"}}function Nd(t){let e={level:0,width:t.width,height:t.height,rgba:t.pixels};return{width:t.width,height:t.height,levels:[e],source:"tga"}}function xa(t,e){return xl(ga(t),e)}var Kr=class extends Error{constructor(e){super(e),this.name="WavParseError"}};function _l(t,e,r){return new TextDecoder("ascii").decode(new Uint8Array(t.buffer,t.byteOffset+e,r))}function _a(t){if(t.byteLength<44)throw new Kr("WAV buffer too small");let e=new DataView(t);if(_l(e,0,4)!=="RIFF"||_l(e,8,4)!=="WAVE")throw new Kr("Invalid WAV header");let r=12,n=-1,i=-1,s=0,a=0;for(;r+8<=t.byteLength;){let m=_l(e,r,4),g=e.getUint32(r+4,!0),p=r+8;m==="fmt "?(n=p,s=g):m==="data"&&(i=p,a=g),r=p+g}if(n===-1||i===-1)throw new Kr("Missing fmt or data chunk");let o=e.getUint16(n,!0),d=e.getUint16(n+2,!0),l=e.getUint32(n+4,!0),c=e.getUint16(n+14,!0);if(o!==1)throw new Kr("Only PCM WAV is supported");let f=c/8,u=a/(f*d),h=new Float32Array(u*d);for(let m=0;m<u;m+=1)for(let g=0;g<d;g+=1){let p=m*d+g,y=i+p*f,_=0;if(c===8)_=e.getUint8(y),h[p]=(_-128)/128;else if(c===16)_=e.getInt16(y,!0),h[p]=_/32768;else if(c===24){let x=e.getUint8(y),b=e.getUint8(y+1),v=e.getInt8(y+2);_=x|b<<8|v<<16,h[p]=_/8388608}else throw new Kr(`Unsupported bitsPerSample: ${c}`)}return{sampleRate:l,channels:d,bitsPerSample:c,samples:h}}var mm=(t,e=4294967295,r=79764919)=>{let n=new Int32Array(256),i,s,a,o=e;for(i=0;i<256;i++){for(a=i<<24,s=8;s>0;--s)a=2147483648&a?a<<1^r:a<<1;n[i]=a}for(i=0;i<t.length;i++)o=o<<8^n[255&(o>>24^t[i])];return o};var vl=(t,e=mm)=>{let r=p=>new Uint8Array(p.length/2).map(((y,_)=>parseInt(p.substring(2*_,2*(_+1)),16))),n=p=>r(p)[0],i=new Map;[,8364,,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,,381,,,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,,382,376].forEach(((p,y)=>i.set(p,y)));let s=new Uint8Array(t.length),a,o,d,l=!1,c=0,f=42,u=t.length>13&&t.substring(0,9)==="dynEncode",h=0;u&&(h=11,o=n(t.substring(9,h)),o<=1&&(h+=2,f=n(t.substring(11,h))),o===1&&(h+=8,d=(p=>new DataView(r(p).buffer).getInt32(0,!0))(t.substring(13,h))));let m=256-f;for(let p=h;p<t.length;p++)if(a=t.charCodeAt(p),a!==61||l){if(a===92&&p<t.length-5&&u){let y=t.charCodeAt(p+1);y!==117&&y!==85||(a=parseInt(t.substring(p+2,p+6),16),p+=5)}if(a>255){let y=i.get(a);y&&(a=y+127)}l&&(l=!1,a-=64),s[c++]=a<f&&a>0?a+m:a-f}else l=!0;let g=s.subarray(0,c);if(u&&o===1){let p=e(g);if(p!==d){let y="Decode failed crc32 validation";throw console.error("`simple-yenc`\n",y+`
2
2
  `,"Expected: "+d+"; Got: "+p+`
3
- `,"Visit https://github.com/eshaz/simple-yenc for more information"),Error(y)}}return g};function re(){let t=Uint8Array,e=Float32Array;re.modules||Object.defineProperties(re,{modules:{value:new WeakMap},setModule:{value(r,n){re.modules.set(r,Promise.resolve(n))}},getModule:{value(r,n){let i=re.modules.get(r);return i||(n?i=WebAssembly.compile(vl(n)):(n=r.wasm,i=re.inflateDynEncodeString(n).then(s=>WebAssembly.compile(s))),re.modules.set(r,i)),i}},concatFloat32:{value(r,n){let i=new e(n),s=0,a=0;for(;s<r.length;)i.set(r[s],a),a+=r[s++].length;return i}},getDecodedAudio:{value:(r,n,i,s,a)=>({errors:r,channelData:n,samplesDecoded:i,sampleRate:s,bitDepth:a})},getDecodedAudioMultiChannel:{value(r,n,i,s,a,o){let d=[],l,c;for(l=0;l<i;l++){let f=[];for(c=0;c<n.length;)f.push(n[c++][l]||[]);d.push(re.concatFloat32(f,s))}return re.getDecodedAudio(r,d,s,a,o)}},inflateDynEncodeString:{value(r){return r=vl(r),new Promise(n=>{let i=String.raw`dynEncode012804c7886d(‰›•)((()>+ˆ*§§)§ˆ,§§§§)§ˆ+§§§)§+.-()(*)-+)(ˆ.7*§)i¸¸,3§(i¸¸,3/G+.••—š¡*(,˜ŽŽ(,3‡‡‰˜‡Š‰›+)2å:-œ),§H(P*DI*H(P*@I++hH)H*r,hH(H(P*<J,i)’^*<H,H(P*4’U((I-H(H*i0’J,^*DH+H-H*œšI+H,I*4)33H(H*H)“^*DH(H+H)^*@H+i§H)œi§›™3æ*).§K(iH“I/+§H,iHn,§H+i(H+i(rCJ0I,H*I-+hH,,hH(H-V)(i)œ’J.H.W)(i)’c)(H,i)“I,H-i*’I-4)33i(I.*hH(V)(H+n5(H(i*’I-i(I,i)I.+hH,i*’J+iHn,hi(I-i*I,+hH,H/’H-c)(H,iFn,hi(I,+hH,H0n5-H*V)(J(,hH/H(i)œ’J(H(V)(J(i)’c)(H)H(i)œ’H,c)(3H*i*’I*H,i)’I,4(3(-H(H,’W)(H-’I-H,i*’I,4)3(3(3H,H-’I1H+I,H.i)œH1V)(“J.i(v5(33H.-H(H,’i(c)(H,i*’I,4)333–)-§i*I*+§H*iHn,hiž73H,H(i)8(H+šJ+H)P*(H*’V)(J-“r,§H)P*,H.i)œ’H+H,“i)œ’V)(-H*i*’I*H+i)œI+H-H.’I.H,H-’i)œI,4)333Ã+)-§iø7i(^*(iü7I,*h+hH+iDn,h*hilI+i)I,+hH+,hH+iô7’H,c)(i)H+i´8’W)(œH,’I,H+i*’I+4)-+hH(H)8*J-i(p5.*h*h*hH-i')u,hH(P*(J+,hH(P*0J,H(P*,n50H+H,’H-b((3H(P*0i)’I.4)3H-i¨*n5*H-iÅ*s,hiž73H-i)œJ+V)&+I,H(H+V)æ,8(I.H(H*8*J-i(p51H-i)œJ+i¸7’V)(H(H+iø7’V)(8(’J/H(P*0J+s,hi73H+H,H.’J,’I.H(P*(m5(H.H(P*,s5.+hH,m5*H(P*(J.H+’H.H+H/“’U((b((H(H(P*0i)’J+^*0H,i)“I,4(3(3H(H.^*03H-i¨*o5)33i(73(3(3-H,H+i)žc)(H,i*’I,H+i)’I+4)33i)I-3H-3!2)0§K(i2“J,L(H,H(^*(H,H*^*4H,i(^*0H,i(^*DH,j(_*<H,H)P*(^*,H,H+P*(^*8*h*h+hH,i)8(I3i§I**h*h*h*h*h*h*hH,i*8(6+(),03H,j(_*@i*I-H,P*<J.i,’J(H,P*8J/s50H,H.i+’J0^*<i¦I*H.H,P*4J1’J.U(*H.U((J2›i')o5/H.U()I.H,H(^*<H0H1’U((H.i0œJ.i§›i0ži')™o5/H/H.H2šJ*H(’J.q50H,P*0J/H*’I-H,P*(J0,hH,P*,H-q,hi)I-423+hH*m5+H/H0’H(H1’U((b((H/i)’I/H(i)’I(H*i)“I*4(3(3H,H.^*<H,H-^*04*3iØ1U((5+i(I(i¨7i1^*(i$6iè1^*(i°7iè6^*(i¬7iÈ6^*(+hH(iÈ*n,hiÈ*I(+hH(i¨,n,hi¨,I(+hH(iØ,n,hiØ,I(+hH(iè,o,hH,i-’H(’i0c)(H(i*’I(4)33iè1i1H,i-’iÈ*8)Bi(I(+hH(ido,hH,i-’H(’i-c)(H(i*’I(4)33iÈ6iè6H,i-’iF8)BiØ1i)b((41-H,i-’H(’i/c)(H(i*’I(4)3(3(-H,i-’H(’i1c)(H(i*’I(4)3(3(-H,i-’H(’i0c)(H(i*’I(4)3(3(3H,H/^*0H,H(^*<3i(I*4*3H,H,i¸)’^*TH,H,iø-’^*PH,H,iX’^*LH,H,i(’^*HH,i-8(I(H,i-8(I-i¥I*H,i,8(I.H(iErH-iErš5)H(i©*’I1H-i)’I0i(i;H.i,’J(i(H(i(rCJ(“J*H*i;sCI*i¨1I-H(I/+hH/,hH,i-’H-V)(i)œ’H,i+8(c)(H/i)“I/H-i*’I-H*i)’I*4)-H(i)œi¨1’I/+hH(H*o,hH,i-’H/V)(i)œ’i(c)(H/i*’I/H(i)’I(4)33i¤I*H,iø-’H,i¸)’H,i-’i;8)5+H0H1’I2i(I-+hH-H2p,hH,H,iP’8*J*i(p5-H*i7u,hH,i-’H-i)œ’H*c)(H-i)’I-4*3i(I/i+I.i+I(*h*h*hH*i8“6*(*)3H-m,hi£I*403H-i)œH,’W)-I/i*I(4)3i3I.i/I(3H2H,H(8(H.’J(H-’J.p,hi¢I*4.3H,i-’H-i)œ’I*+hH(,hH*H/c)(H*i*’I*H(i)“I(4)-H.I-4+3(3(33H,W)1m,hiŸI*4,3H,iø-’H,i¸)’H,i-’H18)J(,hi¡I*H(i(p5,H1H,V)ú-H,V)ø-’o5,3H,i(’H,iX’H,i-’H1i)œ’H08)J(,hi I*H(i(p5,H0H,V)šH,V)˜’o5,3H,H,iP’H,iH’8+I*4+3(3(3H,i$6i¬78+I*3H*H3šm5(3i)I-H*i(r5)3H)H,P*0^*(H+H,P*<^*(H*I-3H,i2’L(H-33Á)+(i¨03b+(,(-(.(/(0(1(2(3(5(7(9(;(?(C(G(K(S([(c(k({(‹(›(«(Ë(ë( (*)(iø03O)()()()(*(*(*(*(+(+(+(+(,(,(,(,(-(-(-(-(i¨13M8(9(:(((0(/(1(.(2(-(3(,(4(+(5(*(6()(7(T7œ‰šœ‡Ž‰œš›*S7•œ‰Š”U”—Љ”›S0›‘–U œ`;re.getModule(re,i).then(s=>WebAssembly.instantiate(s,{})).then(({exports:s})=>{let a=new Map(Object.entries(s)),o=a.get("puff"),d=a.get("memory").buffer,l=new t(d),c=new DataView(d),f=a.get("__heap_base"),u=r.length,h=f;f+=4,c.setInt32(h,u,!0);let m=f;f+=u,l.set(r,m);let g=f;f+=4,c.setInt32(g,l.byteLength-f,!0),o(f,g,m,h),n(l.slice(f,f+c.getInt32(g,!0)))})})}}}),Object.defineProperty(this,"wasm",{enumerable:!0,get:()=>this._wasm}),this.getOutputChannels=(r,n,i)=>{let s=[],a=0;for(;a<n;)s.push(r.slice(a*i,a++*i+i));return s},this.allocateTypedArray=(r,n,i=!0)=>{let s=this._wasm.malloc(n.BYTES_PER_ELEMENT*r);return i&&this._pointers.add(s),{ptr:s,len:r,buf:new n(this._wasm.HEAP,s,r)}},this.free=()=>{this._pointers.forEach(r=>{this._wasm.free(r)}),this._pointers.clear()},this.codeToString=r=>{let n=[],i=new Uint8Array(this._wasm.HEAP);for(let s=i[r];s!==0;s=i[++r])n.push(s);return String.fromCharCode.apply(null,n)},this.addError=(r,n,i,s,a,o)=>{r.push({message:n,frameLength:i,frameNumber:s,inputBytes:a,outputSamples:o})},this.instantiate=(r,n)=>(n&&re.setModule(r,n),this._wasm=new r(re).instantiate(),this._pointers=new Set,this._wasm.ready.then(()=>this))}var Vd=Wh(Hd(),1);var gm=()=>globalThis.Worker||Vd.default,Fn=class extends gm(){constructor(e,r,n,i){re.modules||new re;let s=re.modules.get(n);if(!s){let a="text/javascript",o,d=`'use strict';(${((l,c,f)=>{let u,h,m=new Promise(g=>{h=g});self.onmessage=({data:{id:g,command:p,data:y}})=>{let _=m,x={id:g},b;p==="init"?(Object.defineProperties(l,{WASMAudioDecoderCommon:{value:c},EmscriptenWASM:{value:f},module:{value:y.module},isWebWorker:{value:!0}}),u=new l(y.options),h()):p==="free"?u.free():p==="ready"?_=_.then(()=>u.ready):p==="reset"?_=_.then(()=>u.reset()):(Object.assign(x,u[p](Array.isArray(y)?y.map(v=>new Uint8Array(v)):new Uint8Array(y))),b=x.channelData?x.channelData.map(v=>v.buffer):[]),_.then(()=>self.postMessage(x,b))}}).toString()})(${n}, ${re}, ${i})`;try{o=typeof process.versions.node<"u"}catch{}s=o?`data:${a};base64,${Buffer.from(d).toString("base64")}`:URL.createObjectURL(new Blob([d],{type:a})),re.modules.set(n,s)}super(s,{name:r}),this._id=Number.MIN_SAFE_INTEGER,this._enqueuedOperations=new Map,this.onmessage=({data:a})=>{let{id:o,...d}=a;this._enqueuedOperations.get(o)(d),this._enqueuedOperations.delete(o)},new i(re).getModule().then(a=>{this.postToDecoder("init",{module:a,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 va=(t,e)=>{Object.defineProperty(t,"name",{value:e})};var ne=Symbol,Gd=", ",O=(()=>{let t="front",e="side",r="rear",n="left",i="center",s="right";return["",t+" ",e+" ",r+" "].map(a=>[[n,s],[n,s,i],[n,i,s],[i,n,s],[i]].flatMap(o=>o.map(d=>a+d).join(Gd)))})(),ot="LFE",$t="monophonic (mono)",Zt="stereo",Ci="surround",oe=(t,...e)=>`${[$t,Zt,`linear ${Ci}`,"quadraphonic",`5.0 ${Ci}`,`5.1 ${Ci}`,`6.1 ${Ci}`,`7.1 ${Ci}`][t-1]} (${e.join(Gd)})`,Ii=[$t,oe(2,O[0][0]),oe(3,O[0][2]),oe(4,O[1][0],O[3][0]),oe(5,O[1][2],O[3][0]),oe(6,O[1][2],O[3][0],ot),oe(7,O[1][2],O[2][0],O[3][4],ot),oe(8,O[1][2],O[2][0],O[3][0],ot)],Wd=192e3,Xd=176400,wa=96e3,Sa=88200,Kd=64e3,Yt=48e3,zn=44100,Bn=32e3,Dn=24e3,On=22050,Nn=16e3,Aa=12e3,Ma=11025,Un=8e3,$d=7350,et="absoluteGranulePosition",H="bandwidth",ve="bitDepth",we="bitrate",ki=we+"Maximum",Ri=we+"Minimum",Pi=we+"Nominal",lt="buffer",Fi=lt+"Fullness",te="codec",Se=te+"Frames",zi="coupledStreamCount",Hn="crc",Bi=Hn+"16",Di=Hn+"32",J="data",D="description",ct="duration",Vn="emphasis",Oi="hasOpusPadding",ze="header",qt="isContinuedPacket",Ni="isCopyrighted",jt="isFirstPage",Ui="isHome",Be="isLastPage",Et="isOriginal",Lt="isPrivate",Hi="isVbr",ke="layer",T="length",U="mode",Tt=U+"Extension",Ea="mpeg",Ct=Ea+"Version",Vi="numberAACFrames",Gi="outputGain",Kr="preSkip",Wi="profile",La=ne(),It="protection",wl="rawData",We="segments",G="subarray",Qt="version",$r="vorbis",Xi=$r+"Comments",Gn=$r+"Setup",Ta="block",Ki=Ta+"ingStrategy",Ca=ne(),kt=Ta+"Size",Jt=Ta+"size0",er=Ta+"size1",$i=ne(),Ia="channel",Rt=Ia+"MappingFamily",Zi=Ia+"MappingTable",Ae=Ia+"Mode",Yi=ne(),z=Ia+"s",Zd="copyright",qi=Zd+"Id",ji=Zd+"IdStart",Pt="frame",Ft=Pt+"Count",Re=Pt+"Length",ka="Number",zt=Pt+ka,dt=Pt+"Padding",N=Pt+"Size",Yd="Rate",Qi="inputSample"+Yd,Sl="page",Zr=Sl+"Checksum",Wn=ne(),tr=Sl+"SegmentTable",ue=Sl+"Sequence"+ka,Al="sample",Ji=Al+ka,K=Al+Yd,ut=ne(),$=Al+"s",Ra="stream",es=Ra+"Count",ts=Ra+"Info",ft=Ra+"Serial"+ka,Ml=Ra+"StructureVersion",El="total",Yr=El+"BytesOut",qr=El+"Duration",jr=El+"Samples",Y=ne(),Xe=ne(),rs=ne(),rr=ne(),tt=ne(),Pa=ne(),Ll=ne(),nr=ne(),q=ne(),Ke=ne(),$e=ne(),ht=ne(),ir=ne(),Fa=ne(),rt=ne(),nt=ne(),Ze=ne(),za=ne(),Me=Uint8Array,sr=DataView,j="reserved",Ee="bad",Xn="free",ns="none",Ba="16bit CRC";var Tl=(t,e,r)=>{for(let n=0;n<t[T];n++){let i=e(n);for(let s=8;s>0;s--)i=r(i);t[n]=i}return t},bm=Tl(new Me(256),t=>t,t=>t&128?7^t<<1:t<<1),le=[Tl(new Uint16Array(256),t=>t<<8,t=>t<<1^(t&32768?32773:0))],ce=[Tl(new Uint32Array(256),t=>t,t=>t>>>1^(t&1)*3988292384)];for(let t=0;t<15;t++){le.push(new Uint16Array(256)),ce.push(new Uint32Array(256));for(let e=0;e<=255;e++)le[t+1][e]=le[0][le[t][e]>>>8]^le[t][e]<<8,ce[t+1][e]=ce[t][e]>>>8^ce[0][ce[t][e]&255]}var jd=t=>{let e=0,r=t[T];for(let n=0;n!==r;n++)e=bm[e^t[n]];return e},Qd=t=>{let e=t[T],r=e-16,n=0,i=0;for(;i<=r;)n^=t[i++]<<8|t[i++],n=le[15][n>>8]^le[14][n&255]^le[13][t[i++]]^le[12][t[i++]]^le[11][t[i++]]^le[10][t[i++]]^le[9][t[i++]]^le[8][t[i++]]^le[7][t[i++]]^le[6][t[i++]]^le[5][t[i++]]^le[4][t[i++]]^le[3][t[i++]]^le[2][t[i++]]^le[1][t[i++]]^le[0][t[i++]];for(;i!==e;)n=(n&255)<<8^le[0][n>>8^t[i++]];return n},Jd=t=>{let e=t[T],r=e-16,n=0,i=0;for(;i<=r;)n=ce[15][(t[i++]^n)&255]^ce[14][(t[i++]^n>>>8)&255]^ce[13][(t[i++]^n>>>16)&255]^ce[12][t[i++]^n>>>24]^ce[11][t[i++]]^ce[10][t[i++]]^ce[9][t[i++]]^ce[8][t[i++]]^ce[7][t[i++]]^ce[6][t[i++]]^ce[5][t[i++]]^ce[4][t[i++]]^ce[3][t[i++]]^ce[2][t[i++]]^ce[1][t[i++]]^ce[0][t[i++]];for(;i!==e;)n=ce[0][(n^t[i++])&255]^n>>>8;return n^-1},ss=(...t)=>{let e=new Me(t.reduce((r,n)=>r+n[T],0));return t.reduce((r,n)=>(e.set(n,r),r+n[T]),0),e},De=t=>String.fromCharCode(...t),qd=[0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15],is=t=>qd[t&15]<<4|qd[t>>4],Da=class{constructor(e){this._data=e,this._pos=e[T]*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,(is(this._data[r-1])<<8)+is(this._data[r])>>7-n&255}},eu=(t,e)=>{try{return t.getBigInt64(e,!0)}catch{let r=t.getUint8(e+7)&128?-1:1,n=t.getUint32(e,!0),i=t.getUint32(e+4,!0);return r===-1&&(n=~n+1,i=~i+1),i>1048575&&console.warn("This platform does not support BigInt"),r*(n+i*2**32)}};var as=class{constructor(e,r){this._onCodecHeader=e,this._onCodecUpdate=r,this[rt]()}[nt](){this._isEnabled=!0}[rt](){this._headerCache=new Map,this._codecUpdateData=new WeakMap,this._codecHeaderSent=!1,this._codecShouldUpdate=!1,this._bitrate=null,this._isEnabled=!1}[Fa](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}}[q](e){let r=this._headerCache.get(e);return r&&this._updateCurrentHeader(e),r}[Ke](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 he=new WeakMap,be=new WeakMap;var Le=class{constructor(e,r){this._codecParser=e,this._headerCache=r}*[Ll](){let e;do{if(e=yield*this.Frame[$e](this._codecParser,this._headerCache,0),e)return e;this._codecParser[Xe](1)}while(!0)}*[nr](e){let r=yield*this[Ll](),n=be.get(r)[T];if(e||this._codecParser._flushing||(yield*this.Header[q](this._codecParser,this._headerCache,n)))return this._headerCache[nt](),this._codecParser[Xe](n),this._codecParser[rr](r),r;this._codecParser[tt](`Missing ${Pt} at ${n} bytes from current position.`,`Dropping current ${Pt} and trying again.`),this._headerCache[rt](),this._codecParser[Xe](1)}};var Qr=class{constructor(e,r){be.set(this,{[ze]:e}),this[J]=r}};var Oe=class extends Qr{static*[$e](e,r,n,i,s){let a=yield*e[q](n,i,s);if(a){let o=he.get(a)[Re],d=he.get(a)[$],l=(yield*n[Y](o,s))[G](0,o);return new r(a,l,d)}else return null}constructor(e,r,n){super(e,r),this[ze]=e,this[$]=n,this[ct]=n/e[K]*1e3,this[zt]=null,this[Yr]=null,this[jr]=null,this[qr]=null,be.get(this)[T]=r[T]}};var Cl="unsynchronizationFlag",Il="extendedHeaderFlag",kl="experimentalFlag",Rl="footerPresent",os=class t{static*getID3v2Header(e,r,n){let s={},a=yield*e[Y](3,n);if(a[0]!==73||a[1]!==68||a[2]!==51||(a=yield*e[Y](10,n),s[Qt]=`id3v2.${a[3]}.${a[4]}`,a[5]&15)||(s[Cl]=!!(a[5]&128),s[Il]=!!(a[5]&64),s[kl]=!!(a[5]&32),s[Rl]=!!(a[5]&16),a[6]&128||a[7]&128||a[8]&128||a[9]&128))return null;let o=a[6]<<21|a[7]<<14|a[8]<<7|a[9];return s[T]=10+o,new t(s)}constructor(e){this[Qt]=e[Qt],this[Cl]=e[Cl],this[Il]=e[Il],this[kl]=e[kl],this[Rl]=e[Rl],this[T]=e[T]}};var Ne=class{constructor(e){he.set(this,e),this[ve]=e[ve],this[we]=null,this[z]=e[z],this[Ae]=e[Ae],this[K]=e[K]}};var su={0:[Xn,Xn,Xn,Xn,Xn],16:[32,32,32,32,8],240:[Ee,Ee,Ee,Ee,Ee]},Oa=(t,e,r)=>8*((t+r)%e+e)*(1<<(t+r)/e)-8*e*(e/8|0);for(let t=2;t<15;t++)su[t<<4]=[t*32,Oa(t,4,0),Oa(t,4,-1),Oa(t,8,4),Oa(t,8,0)];var xm=0,_m=1,vm=2,wm=3,tu=4,Na="bands ",Ua=" to 31",ru={0:Na+4+Ua,16:Na+8+Ua,32:Na+12+Ua,48:Na+16+Ua},Jr="bitrateIndex",ls="v2",Xa="v1",Ha="Intensity stereo ",Va=", MS stereo ",Ga="on",Wa="off",Sm={0:Ha+Wa+Va+Wa,16:Ha+Ga+Va+Wa,32:Ha+Wa+Va+Ga,48:Ha+Ga+Va+Ga},Pl={0:{[D]:j},2:{[D]:"Layer III",[dt]:1,[Tt]:Sm,[Xa]:{[Jr]:vm,[$]:1152},[ls]:{[Jr]:tu,[$]:576}},4:{[D]:"Layer II",[dt]:1,[Tt]:ru,[$]:1152,[Xa]:{[Jr]:_m},[ls]:{[Jr]:tu}},6:{[D]:"Layer I",[dt]:4,[Tt]:ru,[$]:384,[Xa]:{[Jr]:xm},[ls]:{[Jr]:wm}}},Fl="MPEG Version ",nu="ISO/IEC ",Am={0:{[D]:`${Fl}2.5 (later extension of MPEG 2)`,[ke]:ls,[K]:{0:Ma,4:Aa,8:Un,12:j}},8:{[D]:j},16:{[D]:`${Fl}2 (${nu}13818-3)`,[ke]:ls,[K]:{0:On,4:Dn,8:Nn,12:j}},24:{[D]:`${Fl}1 (${nu}11172-3)`,[ke]:Xa,[K]:{0:zn,4:Yt,8:Bn,12:j}},length:T},Mm={0:Ba,1:ns},Em={0:ns,1:"50/15 ms",2:j,3:"CCIT J.17"},iu={0:{[z]:2,[D]:Zt},64:{[z]:2,[D]:"joint "+Zt},128:{[z]:2,[D]:"dual channel"},192:{[z]:1,[D]:$t}},en=class t extends Ne{static*[q](e,r,n){let i={},s=yield*os.getID3v2Header(e,r,n);s&&(yield*e[Y](s[T],n),e[Xe](s[T]));let a=yield*e[Y](4,n),o=De(a[G](0,4)),d=r[q](o);if(d)return new t(d);if(a[0]!==255||a[1]<224)return null;let l=Am[a[1]&24];if(l[D]===j)return null;let c=a[1]&6;if(Pl[c][D]===j)return null;let f={...Pl[c],...Pl[c][l[ke]]};if(i[Ct]=l[D],i[ke]=f[D],i[$]=f[$],i[It]=Mm[a[1]&1],i[T]=4,i[we]=su[a[2]&240][f[Jr]],i[we]===Ee||(i[K]=l[K][a[2]&12],i[K]===j)||(i[dt]=a[2]&2&&f[dt],i[Lt]=!!(a[2]&1),i[Re]=Math.floor(125*i[we]*i[$]/i[K]+i[dt]),!i[Re]))return null;let u=a[3]&192;if(i[Ae]=iu[u][D],i[z]=iu[u][z],i[Tt]=f[Tt][a[3]&48],i[Ni]=!!(a[3]&8),i[Et]=!!(a[3]&4),i[Vn]=Em[a[3]&3],i[Vn]===j)return null;i[ve]=16;{let{length:h,frameLength:m,samples:g,...p}=i;r[Ke](o,i,p)}return new t(i)}constructor(e){super(e),this[we]=e[we],this[Vn]=e[Vn],this[dt]=e[dt],this[Ni]=e[Ni],this[Et]=e[Et],this[Lt]=e[Lt],this[ke]=e[ke],this[Tt]=e[Tt],this[Ct]=e[Ct],this[It]=e[It]}};var cs=class t extends Oe{static*[$e](e,r,n){return yield*super[$e](en,t,e,r,n)}constructor(e,r,n){super(e,r,n)}};var ds=class extends Le{constructor(e,r,n){super(e,r),this.Frame=cs,this.Header=en,n(this[te])}get[te](){return Ea}*[ht](){return yield*this[nr]()}};var Lm={0:"MPEG-4",8:"MPEG-2"},Tm={0:"valid",2:Ee,4:Ee,6:Ee},Cm={0:Ba,1:ns},Im={0:"AAC Main",64:"AAC LC (Low Complexity)",128:"AAC SSR (Scalable Sample Rate)",192:"AAC LTP (Long Term Prediction)"},km={0:wa,4:Sa,8:Kd,12:Yt,16:zn,20:Bn,24:Dn,28:On,32:Nn,36:Aa,40:Ma,44:Un,48:$d,52:j,56:j,60:"frequency is written explicitly"},au={0:{[z]:0,[D]:"Defined in AOT Specific Config"},64:{[z]:1,[D]:$t},128:{[z]:2,[D]:oe(2,O[0][0])},192:{[z]:3,[D]:oe(3,O[1][3])},256:{[z]:4,[D]:oe(4,O[1][3],O[3][4])},320:{[z]:5,[D]:oe(5,O[1][3],O[3][0])},384:{[z]:6,[D]:oe(6,O[1][3],O[3][0],ot)},448:{[z]:8,[D]:oe(8,O[1][3],O[2][0],O[3][0],ot)}},tn=class t extends Ne{static*[q](e,r,n){let i={},s=yield*e[Y](7,n),a=De([s[0],s[1],s[2],s[3]&252|s[6]&3]),o=r[q](a);if(o)Object.assign(i,o);else{if(s[0]!==255||s[1]<240||(i[Ct]=Lm[s[1]&8],i[ke]=Tm[s[1]&6],i[ke]===Ee))return null;let l=s[1]&1;i[It]=Cm[l],i[T]=l?7:9,i[La]=s[2]&192,i[ut]=s[2]&60;let c=s[2]&2;if(i[Wi]=Im[i[La]],i[K]=km[i[ut]],i[K]===j)return null;i[Lt]=!!c,i[Yi]=(s[2]<<8|s[3])&448,i[Ae]=au[i[Yi]][D],i[z]=au[i[Yi]][z],i[Et]=!!(s[3]&32),i[Ui]=!!(s[3]&8),i[qi]=!!(s[3]&8),i[ji]=!!(s[3]&4),i[ve]=16,i[$]=1024,i[Vi]=s[6]&3;{let{length:f,channelModeBits:u,profileBits:h,sampleRateBits:m,frameLength:g,samples:p,numberAACFrames:y,..._}=i;r[Ke](a,i,_)}}if(i[Re]=(s[3]<<11|s[4]<<3|s[5]>>5)&8191,!i[Re])return null;let d=(s[5]<<6|s[6]>>2)&2047;return i[Fi]=d===2047?"VBR":d,new t(i)}constructor(e){super(e),this[qi]=e[qi],this[ji]=e[ji],this[Fi]=e[Fi],this[Ui]=e[Ui],this[Et]=e[Et],this[Lt]=e[Lt],this[ke]=e[ke],this[T]=e[T],this[Ct]=e[Ct],this[Vi]=e[Vi],this[Wi]=e[Wi],this[It]=e[It]}get audioSpecificConfig(){let e=he.get(this),r=e[La]+64<<5|e[ut]<<5|e[Yi]>>3,n=new Me(2);return new sr(n[lt]).setUint16(0,r,!1),n}};var us=class t extends Oe{static*[$e](e,r,n){return yield*super[$e](tn,t,e,r,n)}constructor(e,r,n){super(e,r,n)}};var fs=class extends Le{constructor(e,r,n){super(e,r),this.Frame=us,this.Header=tn,n(this[te])}get[te](){return"aac"}*[ht](){return yield*this[nr]()}};var ar=class t extends Oe{static _getFrameFooterCrc16(e){return(e[e[T]-2]<<8)+e[e[T]-1]}static[za](e){let r=t._getFrameFooterCrc16(e),n=Qd(e[G](0,-2));return r===n}constructor(e,r,n){r[ts]=n,r[Bi]=t._getFrameFooterCrc16(e),super(r,e,he.get(r)[$])}};var ou="get from STREAMINFO metadata block",Rm={0:"Fixed",1:"Variable"},lu={0:j,16:192};for(let t=2;t<16;t++)lu[t<<4]=t<6?576*2**(t-2):2**t;var Pm={0:ou,1:Sa,2:Xd,3:Wd,4:Un,5:Nn,6:On,7:Dn,8:Bn,9:zn,10:Yt,11:wa,15:Ee},Fm={0:{[z]:1,[D]:$t},16:{[z]:2,[D]:oe(2,O[0][0])},32:{[z]:3,[D]:oe(3,O[0][1])},48:{[z]:4,[D]:oe(4,O[1][0],O[3][0])},64:{[z]:5,[D]:oe(5,O[1][1],O[3][0])},80:{[z]:6,[D]:oe(6,O[1][1],ot,O[3][0])},96:{[z]:7,[D]:oe(7,O[1][1],ot,O[3][4],O[2][0])},112:{[z]:8,[D]:oe(8,O[1][1],ot,O[3][0],O[2][0])},128:{[z]:2,[D]:`${Zt} (left, diff)`},144:{[z]:2,[D]:`${Zt} (diff, right)`},160:{[z]:2,[D]:`${Zt} (avg, diff)`},176:j,192:j,208:j,224:j,240:j},zm={0:ou,2:8,4:12,6:j,8:16,10:20,12:24,14:j},or=class t extends Ne{static _decodeUTF8Int(e){if(e[0]>254)return null;if(e[0]<128)return{value:e[0],length:1};let r=1;for(let a=64;a&e[0];a>>=1)r++;let n=r-1,i=0,s=0;for(;n>0;s+=6,n--){if((e[n]&192)!==128)return null;i|=(e[n]&63)<<s}return i|=(e[n]&127>>r)<<s,{value:i,length:r}}static[Ze](e,r){let n={[Y]:function*(){return e}};return t[q](n,r,0).next().value}static*[q](e,r,n){let i=yield*e[Y](6,n);if(i[0]!==255||!(i[1]===248||i[1]===249))return null;let s={},a=De(i[G](0,4)),o=r[q](a);if(o)Object.assign(s,o);else{if(s[Ca]=i[1]&1,s[Ki]=Rm[s[Ca]],s[$i]=i[2]&240,s[ut]=i[2]&15,s[kt]=lu[s[$i]],s[kt]===j||(s[K]=Pm[s[ut]],s[K]===Ee)||i[3]&1)return null;let l=Fm[i[3]&240];if(l===j||(s[z]=l[z],s[Ae]=l[D],s[ve]=zm[i[3]&14],s[ve]===j))return null}s[T]=5,i=yield*e[Y](s[T]+8,n);let d=t._decodeUTF8Int(i[G](4));if(!d||(s[Ca]?s[Ji]=d.value:s[zt]=d.value,s[T]+=d[T],s[$i]===96?(i[T]<s[T]&&(i=yield*e[Y](s[T],n)),s[kt]=i[s[T]-1]+1,s[T]+=1):s[$i]===112&&(i[T]<s[T]&&(i=yield*e[Y](s[T],n)),s[kt]=(i[s[T]-1]<<8)+i[s[T]]+1,s[T]+=2),s[$]=s[kt],s[ut]===12?(i[T]<s[T]&&(i=yield*e[Y](s[T],n)),s[K]=i[s[T]-1]*1e3,s[T]+=1):s[ut]===13?(i[T]<s[T]&&(i=yield*e[Y](s[T],n)),s[K]=(i[s[T]-1]<<8)+i[s[T]],s[T]+=2):s[ut]===14&&(i[T]<s[T]&&(i=yield*e[Y](s[T],n)),s[K]=((i[s[T]-1]<<8)+i[s[T]])*10,s[T]+=2),i[T]<s[T]&&(i=yield*e[Y](s[T],n)),s[Hn]=i[s[T]-1],s[Hn]!==jd(i[G](0,s[T]-1))))return null;if(!o){let{blockingStrategyBits:l,frameNumber:c,sampleNumber:f,samples:u,sampleRateBits:h,blockSizeBits:m,crc:g,length:p,...y}=s;r[Ke](a,s,y)}return new t(s)}constructor(e){super(e),this[Bi]=null,this[Ki]=e[Ki],this[kt]=e[kt],this[zt]=e[zt],this[Ji]=e[Ji],this[ts]=null}};var Bm=2,Dm=512*1024,rn=class extends Le{constructor(e,r,n){super(e,r),this.Frame=ar,this.Header=or,n(this[te])}get[te](){return"flac"}*_getNextFrameSyncOffset(e){let r=yield*this._codecParser[Y](2,0),n=r[T]-2;for(;e<n;){if(r[e]===255){let s=r[e+1];if(s===248||s===249)break;s!==255&&e++}e++}return e}*[ht](){do{let e=yield*or[q](this._codecParser,this._headerCache,0);if(e){let r=he.get(e)[T]+Bm;for(;r<=Dm;){if(this._codecParser._flushing||(yield*or[q](this._codecParser,this._headerCache,r))){let n=yield*this._codecParser[Y](r);if(this._codecParser._flushing||(n=n[G](0,r)),ar[za](n)){let i=new ar(n,e);return this._headerCache[nt](),this._codecParser[Xe](r),this._codecParser[rr](i),i}}r=yield*this._getNextFrameSyncOffset(r+1)}this._codecParser[tt](`Unable to sync FLAC frame after searching ${r} bytes.`),this._codecParser[Xe](r)}else this._codecParser[Xe](yield*this._getNextFrameSyncOffset(1))}while(!0)}[ir](e){return e[ue]===0?(this._headerCache[nt](),this._streamInfo=e[J][G](13)):e[ue]===1||(e[Se]=be.get(e)[We].map(r=>{let n=or[Ze](r,this._headerCache);if(n)return new ar(r,n,this._streamInfo);this._codecParser[tt]("Failed to parse Ogg FLAC frame","Skipping invalid FLAC frame")}).filter(r=>!!r)),e}};var nn=class t{static*[q](e,r,n){let i={},s=yield*e[Y](28,n);if(s[0]!==79||s[1]!==103||s[2]!==103||s[3]!==83||(i[Ml]=s[4],s[5]&248))return null;i[Be]=!!(s[5]&4),i[jt]=!!(s[5]&2),i[qt]=!!(s[5]&1);let o=new sr(Me.from(s[G](0,28))[lt]);i[et]=eu(o,6),i[ft]=o.getInt32(14,!0),i[ue]=o.getInt32(18,!0),i[Zr]=o.getInt32(22,!0);let d=s[26];i[T]=d+27,s=yield*e[Y](i[T],n),i[Re]=0,i[tr]=[],i[Wn]=Me.from(s[G](27,i[T]));for(let l=0,c=0;l<d;l++){let f=i[Wn][l];i[Re]+=f,c+=f,(f!==255||l===d-1)&&(i[tr].push(c),c=0)}return new t(i)}constructor(e){he.set(this,e),this[et]=e[et],this[qt]=e[qt],this[jt]=e[jt],this[Be]=e[Be],this[tr]=e[tr],this[ue]=e[ue],this[Zr]=e[Zr],this[ft]=e[ft]}};var hs=class t extends Qr{static*[$e](e,r,n){let i=yield*nn[q](e,r,n);if(i){let s=he.get(i)[Re],a=he.get(i)[T],o=a+s,d=(yield*e[Y](o,0))[G](0,o),l=d[G](a,o);return new t(i,l,d)}else return null}constructor(e,r,n){super(e,r),be.get(this)[T]=n[T],this[Se]=[],this[wl]=n,this[et]=e[et],this[Di]=e[Zr],this[ct]=0,this[qt]=e[qt],this[jt]=e[jt],this[Be]=e[Be],this[ue]=e[ue],this[$]=0,this[ft]=e[ft]}};var Kn=class extends Oe{constructor(e,r,n){super(r,e,n)}};var cu={0:Ii.slice(0,2),1:Ii},Ye="SILK-only",xe="CELT-only",Ka="Hybrid",lr="narrowband",$a="medium-band",cr="wideband",$n="super-wideband",Zn="fullband",Om={0:{[U]:Ye,[H]:lr,[N]:10},8:{[U]:Ye,[H]:lr,[N]:20},16:{[U]:Ye,[H]:lr,[N]:40},24:{[U]:Ye,[H]:lr,[N]:60},32:{[U]:Ye,[H]:$a,[N]:10},40:{[U]:Ye,[H]:$a,[N]:20},48:{[U]:Ye,[H]:$a,[N]:40},56:{[U]:Ye,[H]:$a,[N]:60},64:{[U]:Ye,[H]:cr,[N]:10},72:{[U]:Ye,[H]:cr,[N]:20},80:{[U]:Ye,[H]:cr,[N]:40},88:{[U]:Ye,[H]:cr,[N]:60},96:{[U]:Ka,[H]:$n,[N]:10},104:{[U]:Ka,[H]:$n,[N]:20},112:{[U]:Ka,[H]:Zn,[N]:10},120:{[U]:Ka,[H]:Zn,[N]:20},128:{[U]:xe,[H]:lr,[N]:2.5},136:{[U]:xe,[H]:lr,[N]:5},144:{[U]:xe,[H]:lr,[N]:10},152:{[U]:xe,[H]:lr,[N]:20},160:{[U]:xe,[H]:cr,[N]:2.5},168:{[U]:xe,[H]:cr,[N]:5},176:{[U]:xe,[H]:cr,[N]:10},184:{[U]:xe,[H]:cr,[N]:20},192:{[U]:xe,[H]:$n,[N]:2.5},200:{[U]:xe,[H]:$n,[N]:5},208:{[U]:xe,[H]:$n,[N]:10},216:{[U]:xe,[H]:$n,[N]:20},224:{[U]:xe,[H]:Zn,[N]:2.5},232:{[U]:xe,[H]:Zn,[N]:5},240:{[U]:xe,[H]:Zn,[N]:10},248:{[U]:xe,[H]:Zn,[N]:20}},Yn=class t extends Ne{static[Ze](e,r,n){let i={};if(i[z]=e[9],i[Rt]=e[18],i[T]=i[Rt]!==0?21+i[z]:19,e[T]<i[T])throw new Error("Out of data while inside an Ogg Page");let s=r[0]&3,a=s===3?2:1,o=De(e[G](0,i[T]))+De(r[G](0,a)),d=n[q](o);if(d)return new t(d);if(o.substr(0,8)!=="OpusHead"||e[8]!==1)return null;i[J]=Me.from(e[G](0,i[T]));let l=new sr(i[J][lt]);if(i[ve]=16,i[Kr]=l.getUint16(10,!0),i[Qi]=l.getUint32(12,!0),i[K]=Yt,i[Gi]=l.getInt16(16,!0),i[Rt]in cu&&(i[Ae]=cu[i[Rt]][i[z]-1],!i[Ae]))return null;i[Rt]!==0&&(i[es]=e[19],i[zi]=e[20],i[Zi]=[...e[G](21,i[z]+21)]);let c=Om[248&r[0]];switch(i[U]=c[U],i[H]=c[H],i[N]=c[N],s){case 0:i[Ft]=1;break;case 1:case 2:i[Ft]=2;break;case 3:i[Hi]=!!(128&r[1]),i[Oi]=!!(64&r[1]),i[Ft]=63&r[1];break;default:return null}{let{length:f,data:u,channelMappingFamily:h,...m}=i;n[Ke](o,i,m)}return new t(i)}constructor(e){super(e),this[J]=e[J],this[H]=e[H],this[Rt]=e[Rt],this[Zi]=e[Zi],this[zi]=e[zi],this[Ft]=e[Ft],this[N]=e[N],this[Oi]=e[Oi],this[Qi]=e[Qi],this[Hi]=e[Hi],this[U]=e[U],this[Gi]=e[Gi],this[Kr]=e[Kr],this[es]=e[es]}};var ms=class extends Le{constructor(e,r,n){super(e,r),this.Frame=Kn,this.Header=Yn,n(this[te]),this._identificationHeader=null,this._preSkipRemaining=null}get[te](){return"opus"}[ir](e){return e[ue]===0?(this._headerCache[nt](),this._identificationHeader=e[J]):e[ue]===1||(e[Se]=be.get(e)[We].map(r=>{let n=Yn[Ze](this._identificationHeader,r,this._headerCache);if(n){this._preSkipRemaining===null&&(this._preSkipRemaining=n[Kr]);let i=n[N]*n[Ft]/1e3*n[K];return this._preSkipRemaining>0&&(this._preSkipRemaining-=i,i=this._preSkipRemaining<0?-this._preSkipRemaining:0),new Kn(r,n,i)}this._codecParser[Pa]("Failed to parse Ogg Opus Header","Not a valid Ogg Opus file")})),e}};var qn=class extends Oe{constructor(e,r,n){super(r,e,n)}};var zl={};for(let t=0;t<8;t++)zl[t+6]=2**(6+t);var ps=class t extends Ne{static[Ze](e,r,n,i){if(e[T]<30)throw new Error("Out of data while inside an Ogg Page");let s=De(e[G](0,30)),a=r[q](s);if(a)return new t(a);let o={[T]:30};if(s.substr(0,7)!=="vorbis")return null;o[J]=Me.from(e[G](0,30));let d=new sr(o[J][lt]);if(o[Qt]=d.getUint32(7,!0),o[Qt]!==0||(o[z]=e[11],o[Ae]=Ii[o[z]-1]||"application defined",o[K]=d.getUint32(12,!0),o[ki]=d.getInt32(16,!0),o[Pi]=d.getInt32(20,!0),o[Ri]=d.getInt32(24,!0),o[er]=zl[(e[28]&240)>>4],o[Jt]=zl[e[28]&15],o[Jt]>o[er])||e[29]!==1)return null;o[ve]=32,o[Gn]=i,o[Xi]=n;{let{length:l,data:c,version:f,vorbisSetup:u,vorbisComments:h,...m}=o;r[Ke](s,o,m)}return new t(o)}constructor(e){super(e),this[ki]=e[ki],this[Ri]=e[Ri],this[Pi]=e[Pi],this[Jt]=e[Jt],this[er]=e[er],this[J]=e[J],this[Xi]=e[Xi],this[Gn]=e[Gn]}};var gs=class extends Le{constructor(e,r,n){super(e,r),this.Frame=qn,n(this[te]),this._identificationHeader=null,this._setupComplete=!1,this._prevBlockSize=null}get[te](){return $r}[ir](e){e[Se]=[];for(let r of be.get(e)[We])if(r[0]===1)this._headerCache[nt](),this._identificationHeader=e[J],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=ps[Ze](this._identificationHeader,this._headerCache,this._vorbisComments,this._vorbisSetup);n?e[Se].push(new qn(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 i=this._mode.blockFlags[e[0]>>1&this._mode.mask]?r[er]:r[Jt],s=this._prevBlockSize===null?0:(this._prevBlockSize+i)/4;return this._prevBlockSize=i,s}_parseSetupHeader(e){let r=new Da(e),n={count:0,blockFlags:[]};for(;(r.read(1)&1)!==1;);let i;for(;n.count<64&&r.position>0;){is(r.read(8));let s=0;for(;r.read(8)===0&&s++<3;);if(s===4)i=r.read(7),n.blockFlags.unshift(i&1),r.position+=6,n.count++;else{((is(i)&126)>>1)+1!==n.count&&this._codecParser[tt]("vorbis derived mode count did not match actual mode count");break}}return n.mask=(1<<Math.log2(n.count))-1,n}};var Bl=class{constructor(e,r,n){this._codecParser=e,this._headerCache=r,this._onCodec=n,this._continuedPacket=new Me,this._codec=null,this._isSupported=null,this._previousAbsoluteGranulePosition=null}get[te](){return this._codec||""}_updateCodec(e,r){this._codec!==e&&(this._headerCache[rt](),this._parser=new r(this._codecParser,this._headerCache,this._onCodec),this._codec=e)}_checkCodecSupport({data:e}){let r=De(e[G](0,8));switch(r){case"fishead\0":return!1;case"OpusHead":return this._updateCodec("opus",ms),!0;case(/^\x7fFLAC/.test(r)&&r):return this._updateCodec("flac",rn),!0;case(/^\x01vorbis/.test(r)&&r):return this._updateCodec($r,gs),!0;default:return!1}}_checkPageSequenceNumber(e){e[ue]!==this._pageSequenceNumber+1&&this._pageSequenceNumber>1&&e[ue]>1&&this._codecParser[tt]("Unexpected gap in Ogg Page Sequence Number.",`Expected: ${this._pageSequenceNumber+1}, Got: ${e[ue]}`),this._pageSequenceNumber=e[ue]}_parsePage(e){this._isSupported===null&&(this._pageSequenceNumber=e[ue],this._isSupported=this._checkCodecSupport(e)),this._checkPageSequenceNumber(e);let r=be.get(e),n=he.get(r[ze]),i=0;if(r[We]=n[tr].map(s=>e[J][G](i,i+=s)),this._continuedPacket[T]&&(r[We][0]=ss(this._continuedPacket,r[We][0]),this._continuedPacket=new Me),n[Wn][n[Wn][T]-1]===255&&(this._continuedPacket=ss(this._continuedPacket,r[We].pop())),this._previousAbsoluteGranulePosition!==null&&(e[$]=Number(e[et]-this._previousAbsoluteGranulePosition)),this._previousAbsoluteGranulePosition=e[et],this._isSupported){let s=this._parser[ir](e);return this._codecParser[rr](s),s}else return e}},ys=class extends Le{constructor(e,r,n){super(e,r),this._onCodec=n,this.Frame=hs,this.Header=nn,this._streams=new Map,this._currentSerialNumber=null}get[te](){let e=this._streams.get(this._currentSerialNumber);return e?e.codec:""}*[ht](){let e=yield*this[nr](!0);this._currentSerialNumber=e[ft];let r=this._streams.get(this._currentSerialNumber);return r||(r=new Bl(this._codecParser,this._headerCache,this._onCodec),this._streams.set(this._currentSerialNumber,r)),e[Be]&&this._streams.delete(this._currentSerialNumber),r._parsePage(e)}};var Dl=()=>{},bs=class{constructor(e,{onCodec:r,onCodecHeader:n,onCodecUpdate:i,enableLogging:s=!1,enableFrameCRC32:a=!0}={}){this._inputMimeType=e,this._onCodec=r||Dl,this._onCodecHeader=n||Dl,this._onCodecUpdate=i,this._enableLogging=s,this._crc32=a?Jd:Dl,this[rt]()}get[te](){return this._parser?this._parser[te]:""}[rt](){this._headerCache=new as(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[rt]()}*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 fs(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/mpeg/))this._parser=new ds(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/flac/))this._parser=new rn(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/ogg/))this._parser=new ys(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[ht]();e&&(yield e)}}*[Y](e=0,r=0){let n;for(;this._rawData[T]<=e+r;){if(n=yield,this._flushing)return this._rawData[G](r);n&&(this._totalBytesIn+=n[T],this._rawData=ss(this._rawData,n))}return this._rawData[G](r)}[Xe](e){this._currentReadPosition+=e,this._rawData=this._rawData[G](e)}[rs](e){this._sampleRate=e[ze][K],e[ze][we]=e[ct]>0?Math.round(e[J][T]/e[ct])*8:0,e[zt]=this._frameNumber++,e[Yr]=this._totalBytesOut,e[jr]=this._totalSamples,e[qr]=this._totalSamples/this._sampleRate*1e3,e[Di]=this._crc32(e[J]),this._headerCache[Fa](e[ze][we],e[qr]),this._totalBytesOut+=e[J][T],this._totalSamples+=e[$]}[rr](e){if(e[Se]){if(e[Be]){let r=e[$];e[Se].forEach(n=>{let i=n[$];r<i&&(n[$]=r>0?r:0,n[ct]=n[$]/n[ze][K]*1e3),r-=i,this[rs](n)})}else e[$]=0,e[Se].forEach(r=>{e[$]+=r[$],this[rs](r)});e[ct]=e[$]/this._sampleRate*1e3||0,e[jr]=this._totalSamples,e[qr]=this._totalSamples/this._sampleRate*1e3||0,e[Yr]=this._totalBytesOut}else this[rs](e)}_log(e,r){if(this._enableLogging){let n=[`${te}: ${this[te]}`,`inputMimeType: ${this._inputMimeType}`,`readPosition: ${this._currentReadPosition}`,`totalBytesIn: ${this._totalBytesIn}`,`${Yr}: ${this._totalBytesOut}`],i=Math.max(...n.map(s=>s[T]));r.push(`--stats--${"-".repeat(i-9)}`,...n,"-".repeat(i)),e("codec-parser",r.reduce((s,a)=>s+`
4
- `+a,""))}}[tt](...e){this._log(console.warn,e)}[Pa](...e){this._log(console.error,e)}};var du=bs;var Za=Se;var Ya=J;var uu=ze;var fu=Be;var hu=Gn;var mu=jr;function Bt(t){var e=e;function r(){}e={};function n(P){throw P}var i,s,a,o,d,l,c,f,u,h,m;function g(){var P=m.buffer;i=new Int8Array(P),s=new Int16Array(P),o=new Uint8Array(P),d=new Uint16Array(P),a=new Int32Array(P),l=new Uint32Array(P),c=new Float32Array(P),f=new Float64Array(P),u=new BigInt64Array(P),h=new BigUint64Array(P)}for(var p=P=>{for(var Ve,gi,gn=0,Qs=0,Js=P.length,ea=new Uint8Array((Js*3>>2)-(P[Js-2]=="=")-(P[Js-1]=="="));gn<Js;gn+=4,Qs+=3)Ve=V[P.charCodeAt(gn+1)],gi=V[P.charCodeAt(gn+2)],ea[Qs]=V[P.charCodeAt(gn)]<<2|Ve>>4,ea[Qs+1]=Ve<<4|gi>>2,ea[Qs+2]=gi<<6|V[P.charCodeAt(gn+3)];return ea},y=()=>n(""),_=()=>{},x={},b=P=>P(),v=()=>performance.now(),S=(P,Ve)=>{if(x[P]&&(clearTimeout(x[P].id),delete x[P]),!Ve)return 0;var gi=setTimeout(()=>{delete x[P],b(()=>rd(P,v()))},Ve);return x[P]={id:gi,timeout_ms:Ve},0},w=Math.atan,L=Math.cos,C=Math.exp,A=Math.log,I=Math.pow,R=Math.sin,F=P=>{var Ve=o.length;return P>>>=0,!1},k=P=>{throw`exit(${P})`},V=new Uint8Array(123),se=25;se>=0;--se)V[48+se]=52+se,V[65+se]=se,V[97+se]=26+se;V[43]=62,V[47]=63;var Nr={e:y,d:_,f:S,b:w,a:L,i:C,h:A,g:I,c:R,k:F,j:k};function js(P){pi=P.n,qc=P.o,jc=P.p,Qc=P.q,Jc=P.r,ed=P.s,td=P.t,rd=P.v}var pi,qc,jc,Qc,Jc,ed,td,rd;function Bh(P){P.m()}Bt.wasm||Object.defineProperty(Bt,"wasm",{get:()=>String.raw`dynEncode012091253f87dì%nä= 4&¿nÝØä‘ÂLÚªã9ÚØ[äº\ ¼¡³R=}L]ŸÈÿ2 ÿù¶J1jj¡é,zäV|i¸Qk¹‡= 
3
+ `,"Visit https://github.com/eshaz/simple-yenc for more information"),Error(y)}}return g};function re(){let t=Uint8Array,e=Float32Array;re.modules||Object.defineProperties(re,{modules:{value:new WeakMap},setModule:{value(r,n){re.modules.set(r,Promise.resolve(n))}},getModule:{value(r,n){let i=re.modules.get(r);return i||(n?i=WebAssembly.compile(vl(n)):(n=r.wasm,i=re.inflateDynEncodeString(n).then(s=>WebAssembly.compile(s))),re.modules.set(r,i)),i}},concatFloat32:{value(r,n){let i=new e(n),s=0,a=0;for(;s<r.length;)i.set(r[s],a),a+=r[s++].length;return i}},getDecodedAudio:{value:(r,n,i,s,a)=>({errors:r,channelData:n,samplesDecoded:i,sampleRate:s,bitDepth:a})},getDecodedAudioMultiChannel:{value(r,n,i,s,a,o){let d=[],l,c;for(l=0;l<i;l++){let f=[];for(c=0;c<n.length;)f.push(n[c++][l]||[]);d.push(re.concatFloat32(f,s))}return re.getDecodedAudio(r,d,s,a,o)}},inflateDynEncodeString:{value(r){return r=vl(r),new Promise(n=>{let i=String.raw`dynEncode012804c7886d(‰›•)((()>+ˆ*§§)§ˆ,§§§§)§ˆ+§§§)§+.-()(*)-+)(ˆ.7*§)i¸¸,3§(i¸¸,3/G+.••—š¡*(,˜ŽŽ(,3‡‡‰˜‡Š‰›+)2å:-œ),§H(P*DI*H(P*@I++hH)H*r,hH(H(P*<J,i)’^*<H,H(P*4’U((I-H(H*i0’J,^*DH+H-H*œšI+H,I*4)33H(H*H)“^*DH(H+H)^*@H+i§H)œi§›™3æ*).§K(iH“I/+§H,iHn,§H+i(H+i(rCJ0I,H*I-+hH,,hH(H-V)(i)œ’J.H.W)(i)’c)(H,i)“I,H-i*’I-4)33i(I.*hH(V)(H+n5(H(i*’I-i(I,i)I.+hH,i*’J+iHn,hi(I-i*I,+hH,H/’H-c)(H,iFn,hi(I,+hH,H0n5-H*V)(J(,hH/H(i)œ’J(H(V)(J(i)’c)(H)H(i)œ’H,c)(3H*i*’I*H,i)’I,4(3(-H(H,’W)(H-’I-H,i*’I,4)3(3(3H,H-’I1H+I,H.i)œH1V)(“J.i(v5(33H.-H(H,’i(c)(H,i*’I,4)333–)-§i*I*+§H*iHn,hiž73H,H(i)8(H+šJ+H)P*(H*’V)(J-“r,§H)P*,H.i)œ’H+H,“i)œ’V)(-H*i*’I*H+i)œI+H-H.’I.H,H-’i)œI,4)333Ã+)-§iø7i(^*(iü7I,*h+hH+iDn,h*hilI+i)I,+hH+,hH+iô7’H,c)(i)H+i´8’W)(œH,’I,H+i*’I+4)-+hH(H)8*J-i(p5.*h*h*hH-i')u,hH(P*(J+,hH(P*0J,H(P*,n50H+H,’H-b((3H(P*0i)’I.4)3H-i¨*n5*H-iÅ*s,hiž73H-i)œJ+V)&+I,H(H+V)æ,8(I.H(H*8*J-i(p51H-i)œJ+i¸7’V)(H(H+iø7’V)(8(’J/H(P*0J+s,hi73H+H,H.’J,’I.H(P*(m5(H.H(P*,s5.+hH,m5*H(P*(J.H+’H.H+H/“’U((b((H(H(P*0i)’J+^*0H,i)“I,4(3(3H(H.^*03H-i¨*o5)33i(73(3(3-H,H+i)žc)(H,i*’I,H+i)’I+4)33i)I-3H-3!2)0§K(i2“J,L(H,H(^*(H,H*^*4H,i(^*0H,i(^*DH,j(_*<H,H)P*(^*,H,H+P*(^*8*h*h+hH,i)8(I3i§I**h*h*h*h*h*h*hH,i*8(6+(),03H,j(_*@i*I-H,P*<J.i,’J(H,P*8J/s50H,H.i+’J0^*<i¦I*H.H,P*4J1’J.U(*H.U((J2›i')o5/H.U()I.H,H(^*<H0H1’U((H.i0œJ.i§›i0ži')™o5/H/H.H2šJ*H(’J.q50H,P*0J/H*’I-H,P*(J0,hH,P*,H-q,hi)I-423+hH*m5+H/H0’H(H1’U((b((H/i)’I/H(i)’I(H*i)“I*4(3(3H,H.^*<H,H-^*04*3iØ1U((5+i(I(i¨7i1^*(i$6iè1^*(i°7iè6^*(i¬7iÈ6^*(+hH(iÈ*n,hiÈ*I(+hH(i¨,n,hi¨,I(+hH(iØ,n,hiØ,I(+hH(iè,o,hH,i-’H(’i0c)(H(i*’I(4)33iè1i1H,i-’iÈ*8)Bi(I(+hH(ido,hH,i-’H(’i-c)(H(i*’I(4)33iÈ6iè6H,i-’iF8)BiØ1i)b((41-H,i-’H(’i/c)(H(i*’I(4)3(3(-H,i-’H(’i1c)(H(i*’I(4)3(3(-H,i-’H(’i0c)(H(i*’I(4)3(3(3H,H/^*0H,H(^*<3i(I*4*3H,H,i¸)’^*TH,H,iø-’^*PH,H,iX’^*LH,H,i(’^*HH,i-8(I(H,i-8(I-i¥I*H,i,8(I.H(iErH-iErš5)H(i©*’I1H-i)’I0i(i;H.i,’J(i(H(i(rCJ(“J*H*i;sCI*i¨1I-H(I/+hH/,hH,i-’H-V)(i)œ’H,i+8(c)(H/i)“I/H-i*’I-H*i)’I*4)-H(i)œi¨1’I/+hH(H*o,hH,i-’H/V)(i)œ’i(c)(H/i*’I/H(i)’I(4)33i¤I*H,iø-’H,i¸)’H,i-’i;8)5+H0H1’I2i(I-+hH-H2p,hH,H,iP’8*J*i(p5-H*i7u,hH,i-’H-i)œ’H*c)(H-i)’I-4*3i(I/i+I.i+I(*h*h*hH*i8“6*(*)3H-m,hi£I*403H-i)œH,’W)-I/i*I(4)3i3I.i/I(3H2H,H(8(H.’J(H-’J.p,hi¢I*4.3H,i-’H-i)œ’I*+hH(,hH*H/c)(H*i*’I*H(i)“I(4)-H.I-4+3(3(33H,W)1m,hiŸI*4,3H,iø-’H,i¸)’H,i-’H18)J(,hi¡I*H(i(p5,H1H,V)ú-H,V)ø-’o5,3H,i(’H,iX’H,i-’H1i)œ’H08)J(,hi I*H(i(p5,H0H,V)šH,V)˜’o5,3H,H,iP’H,iH’8+I*4+3(3(3H,i$6i¬78+I*3H*H3šm5(3i)I-H*i(r5)3H)H,P*0^*(H+H,P*<^*(H*I-3H,i2’L(H-33Á)+(i¨03b+(,(-(.(/(0(1(2(3(5(7(9(;(?(C(G(K(S([(c(k({(‹(›(«(Ë(ë( (*)(iø03O)()()()(*(*(*(*(+(+(+(+(,(,(,(,(-(-(-(-(i¨13M8(9(:(((0(/(1(.(2(-(3(,(4(+(5(*(6()(7(T7œ‰šœ‡Ž‰œš›*S7•œ‰Š”U”—Љ”›S0›‘–U œ`;re.getModule(re,i).then(s=>WebAssembly.instantiate(s,{})).then(({exports:s})=>{let a=new Map(Object.entries(s)),o=a.get("puff"),d=a.get("memory").buffer,l=new t(d),c=new DataView(d),f=a.get("__heap_base"),u=r.length,h=f;f+=4,c.setInt32(h,u,!0);let m=f;f+=u,l.set(r,m);let g=f;f+=4,c.setInt32(g,l.byteLength-f,!0),o(f,g,m,h),n(l.slice(f,f+c.getInt32(g,!0)))})})}}}),Object.defineProperty(this,"wasm",{enumerable:!0,get:()=>this._wasm}),this.getOutputChannels=(r,n,i)=>{let s=[],a=0;for(;a<n;)s.push(r.slice(a*i,a++*i+i));return s},this.allocateTypedArray=(r,n,i=!0)=>{let s=this._wasm.malloc(n.BYTES_PER_ELEMENT*r);return i&&this._pointers.add(s),{ptr:s,len:r,buf:new n(this._wasm.HEAP,s,r)}},this.free=()=>{this._pointers.forEach(r=>{this._wasm.free(r)}),this._pointers.clear()},this.codeToString=r=>{let n=[],i=new Uint8Array(this._wasm.HEAP);for(let s=i[r];s!==0;s=i[++r])n.push(s);return String.fromCharCode.apply(null,n)},this.addError=(r,n,i,s,a,o)=>{r.push({message:n,frameLength:i,frameNumber:s,inputBytes:a,outputSamples:o})},this.instantiate=(r,n)=>(n&&re.setModule(r,n),this._wasm=new r(re).instantiate(),this._pointers=new Set,this._wasm.ready.then(()=>this))}var Vd=Wh(Hd(),1);var pm=()=>globalThis.Worker||Vd.default,Fn=class extends pm(){constructor(e,r,n,i){re.modules||new re;let s=re.modules.get(n);if(!s){let a="text/javascript",o,d=`'use strict';(${((l,c,f)=>{let u,h,m=new Promise(g=>{h=g});self.onmessage=({data:{id:g,command:p,data:y}})=>{let _=m,x={id:g},b;p==="init"?(Object.defineProperties(l,{WASMAudioDecoderCommon:{value:c},EmscriptenWASM:{value:f},module:{value:y.module},isWebWorker:{value:!0}}),u=new l(y.options),h()):p==="free"?u.free():p==="ready"?_=_.then(()=>u.ready):p==="reset"?_=_.then(()=>u.reset()):(Object.assign(x,u[p](Array.isArray(y)?y.map(v=>new Uint8Array(v)):new Uint8Array(y))),b=x.channelData?x.channelData.map(v=>v.buffer):[]),_.then(()=>self.postMessage(x,b))}}).toString()})(${n}, ${re}, ${i})`;try{o=typeof process.versions.node<"u"}catch{}s=o?`data:${a};base64,${Buffer.from(d).toString("base64")}`:URL.createObjectURL(new Blob([d],{type:a})),re.modules.set(n,s)}super(s,{name:r}),this._id=Number.MIN_SAFE_INTEGER,this._enqueuedOperations=new Map,this.onmessage=({data:a})=>{let{id:o,...d}=a;this._enqueuedOperations.get(o)(d),this._enqueuedOperations.delete(o)},new i(re).getModule().then(a=>{this.postToDecoder("init",{module:a,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 va=(t,e)=>{Object.defineProperty(t,"name",{value:e})};var ne=Symbol,Gd=", ",z=(()=>{let t="front",e="side",r="rear",n="left",i="center",s="right";return["",t+" ",e+" ",r+" "].map(a=>[[n,s],[n,s,i],[n,i,s],[i,n,s],[i]].flatMap(o=>o.map(d=>a+d).join(Gd)))})(),ot="LFE",Zt="monophonic (mono)",Yt="stereo",Ci="surround",oe=(t,...e)=>`${[Zt,Yt,`linear ${Ci}`,"quadraphonic",`5.0 ${Ci}`,`5.1 ${Ci}`,`6.1 ${Ci}`,`7.1 ${Ci}`][t-1]} (${e.join(Gd)})`,Ii=[Zt,oe(2,z[0][0]),oe(3,z[0][2]),oe(4,z[1][0],z[3][0]),oe(5,z[1][2],z[3][0]),oe(6,z[1][2],z[3][0],ot),oe(7,z[1][2],z[2][0],z[3][4],ot),oe(8,z[1][2],z[2][0],z[3][0],ot)],Wd=192e3,Xd=176400,wa=96e3,Sa=88200,Kd=64e3,qt=48e3,Bn=44100,Dn=32e3,On=24e3,zn=22050,Nn=16e3,Aa=12e3,Ma=11025,Un=8e3,$d=7350,et="absoluteGranulePosition",H="bandwidth",ve="bitDepth",we="bitrate",ki=we+"Maximum",Ri=we+"Minimum",Pi=we+"Nominal",lt="buffer",Fi=lt+"Fullness",te="codec",Se=te+"Frames",Bi="coupledStreamCount",Hn="crc",Di=Hn+"16",Oi=Hn+"32",J="data",O="description",ct="duration",Vn="emphasis",zi="hasOpusPadding",Be="header",jt="isContinuedPacket",Ni="isCopyrighted",Qt="isFirstPage",Ui="isHome",De="isLastPage",Et="isOriginal",Lt="isPrivate",Hi="isVbr",ke="layer",C="length",U="mode",Tt=U+"Extension",Ea="mpeg",Ct=Ea+"Version",Vi="numberAACFrames",Gi="outputGain",$r="preSkip",Wi="profile",La=ne(),It="protection",wl="rawData",We="segments",G="subarray",Jt="version",Zr="vorbis",Xi=Zr+"Comments",Gn=Zr+"Setup",Ta="block",Ki=Ta+"ingStrategy",Ca=ne(),kt=Ta+"Size",er=Ta+"size0",tr=Ta+"size1",$i=ne(),Ia="channel",Rt=Ia+"MappingFamily",Zi=Ia+"MappingTable",Ae=Ia+"Mode",Yi=ne(),B=Ia+"s",Zd="copyright",qi=Zd+"Id",ji=Zd+"IdStart",Pt="frame",Ft=Pt+"Count",Re=Pt+"Length",ka="Number",Bt=Pt+ka,dt=Pt+"Padding",N=Pt+"Size",Yd="Rate",Qi="inputSample"+Yd,Sl="page",Yr=Sl+"Checksum",Wn=ne(),rr=Sl+"SegmentTable",ue=Sl+"Sequence"+ka,Al="sample",Ji=Al+ka,K=Al+Yd,ut=ne(),$=Al+"s",Ra="stream",es=Ra+"Count",ts=Ra+"Info",ft=Ra+"Serial"+ka,Ml=Ra+"StructureVersion",El="total",qr=El+"BytesOut",jr=El+"Duration",Qr=El+"Samples",Y=ne(),Xe=ne(),rs=ne(),nr=ne(),tt=ne(),Pa=ne(),Ll=ne(),ir=ne(),q=ne(),Ke=ne(),$e=ne(),ht=ne(),sr=ne(),Fa=ne(),rt=ne(),nt=ne(),Ze=ne(),Ba=ne(),Me=Uint8Array,ar=DataView,j="reserved",Ee="bad",Xn="free",ns="none",Da="16bit CRC";var Tl=(t,e,r)=>{for(let n=0;n<t[C];n++){let i=e(n);for(let s=8;s>0;s--)i=r(i);t[n]=i}return t},ym=Tl(new Me(256),t=>t,t=>t&128?7^t<<1:t<<1),le=[Tl(new Uint16Array(256),t=>t<<8,t=>t<<1^(t&32768?32773:0))],ce=[Tl(new Uint32Array(256),t=>t,t=>t>>>1^(t&1)*3988292384)];for(let t=0;t<15;t++){le.push(new Uint16Array(256)),ce.push(new Uint32Array(256));for(let e=0;e<=255;e++)le[t+1][e]=le[0][le[t][e]>>>8]^le[t][e]<<8,ce[t+1][e]=ce[t][e]>>>8^ce[0][ce[t][e]&255]}var jd=t=>{let e=0,r=t[C];for(let n=0;n!==r;n++)e=ym[e^t[n]];return e},Qd=t=>{let e=t[C],r=e-16,n=0,i=0;for(;i<=r;)n^=t[i++]<<8|t[i++],n=le[15][n>>8]^le[14][n&255]^le[13][t[i++]]^le[12][t[i++]]^le[11][t[i++]]^le[10][t[i++]]^le[9][t[i++]]^le[8][t[i++]]^le[7][t[i++]]^le[6][t[i++]]^le[5][t[i++]]^le[4][t[i++]]^le[3][t[i++]]^le[2][t[i++]]^le[1][t[i++]]^le[0][t[i++]];for(;i!==e;)n=(n&255)<<8^le[0][n>>8^t[i++]];return n},Jd=t=>{let e=t[C],r=e-16,n=0,i=0;for(;i<=r;)n=ce[15][(t[i++]^n)&255]^ce[14][(t[i++]^n>>>8)&255]^ce[13][(t[i++]^n>>>16)&255]^ce[12][t[i++]^n>>>24]^ce[11][t[i++]]^ce[10][t[i++]]^ce[9][t[i++]]^ce[8][t[i++]]^ce[7][t[i++]]^ce[6][t[i++]]^ce[5][t[i++]]^ce[4][t[i++]]^ce[3][t[i++]]^ce[2][t[i++]]^ce[1][t[i++]]^ce[0][t[i++]];for(;i!==e;)n=ce[0][(n^t[i++])&255]^n>>>8;return n^-1},ss=(...t)=>{let e=new Me(t.reduce((r,n)=>r+n[C],0));return t.reduce((r,n)=>(e.set(n,r),r+n[C]),0),e},Oe=t=>String.fromCharCode(...t),qd=[0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15],is=t=>qd[t&15]<<4|qd[t>>4],Oa=class{constructor(e){this._data=e,this._pos=e[C]*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,(is(this._data[r-1])<<8)+is(this._data[r])>>7-n&255}},eu=(t,e)=>{try{return t.getBigInt64(e,!0)}catch{let r=t.getUint8(e+7)&128?-1:1,n=t.getUint32(e,!0),i=t.getUint32(e+4,!0);return r===-1&&(n=~n+1,i=~i+1),i>1048575&&console.warn("This platform does not support BigInt"),r*(n+i*2**32)}};var as=class{constructor(e,r){this._onCodecHeader=e,this._onCodecUpdate=r,this[rt]()}[nt](){this._isEnabled=!0}[rt](){this._headerCache=new Map,this._codecUpdateData=new WeakMap,this._codecHeaderSent=!1,this._codecShouldUpdate=!1,this._bitrate=null,this._isEnabled=!1}[Fa](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}}[q](e){let r=this._headerCache.get(e);return r&&this._updateCurrentHeader(e),r}[Ke](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 he=new WeakMap,be=new WeakMap;var Le=class{constructor(e,r){this._codecParser=e,this._headerCache=r}*[Ll](){let e;do{if(e=yield*this.Frame[$e](this._codecParser,this._headerCache,0),e)return e;this._codecParser[Xe](1)}while(!0)}*[ir](e){let r=yield*this[Ll](),n=be.get(r)[C];if(e||this._codecParser._flushing||(yield*this.Header[q](this._codecParser,this._headerCache,n)))return this._headerCache[nt](),this._codecParser[Xe](n),this._codecParser[nr](r),r;this._codecParser[tt](`Missing ${Pt} at ${n} bytes from current position.`,`Dropping current ${Pt} and trying again.`),this._headerCache[rt](),this._codecParser[Xe](1)}};var Jr=class{constructor(e,r){be.set(this,{[Be]:e}),this[J]=r}};var ze=class extends Jr{static*[$e](e,r,n,i,s){let a=yield*e[q](n,i,s);if(a){let o=he.get(a)[Re],d=he.get(a)[$],l=(yield*n[Y](o,s))[G](0,o);return new r(a,l,d)}else return null}constructor(e,r,n){super(e,r),this[Be]=e,this[$]=n,this[ct]=n/e[K]*1e3,this[Bt]=null,this[qr]=null,this[Qr]=null,this[jr]=null,be.get(this)[C]=r[C]}};var Cl="unsynchronizationFlag",Il="extendedHeaderFlag",kl="experimentalFlag",Rl="footerPresent",os=class t{static*getID3v2Header(e,r,n){let s={},a=yield*e[Y](3,n);if(a[0]!==73||a[1]!==68||a[2]!==51||(a=yield*e[Y](10,n),s[Jt]=`id3v2.${a[3]}.${a[4]}`,a[5]&15)||(s[Cl]=!!(a[5]&128),s[Il]=!!(a[5]&64),s[kl]=!!(a[5]&32),s[Rl]=!!(a[5]&16),a[6]&128||a[7]&128||a[8]&128||a[9]&128))return null;let o=a[6]<<21|a[7]<<14|a[8]<<7|a[9];return s[C]=10+o,new t(s)}constructor(e){this[Jt]=e[Jt],this[Cl]=e[Cl],this[Il]=e[Il],this[kl]=e[kl],this[Rl]=e[Rl],this[C]=e[C]}};var Ne=class{constructor(e){he.set(this,e),this[ve]=e[ve],this[we]=null,this[B]=e[B],this[Ae]=e[Ae],this[K]=e[K]}};var su={0:[Xn,Xn,Xn,Xn,Xn],16:[32,32,32,32,8],240:[Ee,Ee,Ee,Ee,Ee]},za=(t,e,r)=>8*((t+r)%e+e)*(1<<(t+r)/e)-8*e*(e/8|0);for(let t=2;t<15;t++)su[t<<4]=[t*32,za(t,4,0),za(t,4,-1),za(t,8,4),za(t,8,0)];var bm=0,xm=1,_m=2,vm=3,tu=4,Na="bands ",Ua=" to 31",ru={0:Na+4+Ua,16:Na+8+Ua,32:Na+12+Ua,48:Na+16+Ua},en="bitrateIndex",ls="v2",Xa="v1",Ha="Intensity stereo ",Va=", MS stereo ",Ga="on",Wa="off",wm={0:Ha+Wa+Va+Wa,16:Ha+Ga+Va+Wa,32:Ha+Wa+Va+Ga,48:Ha+Ga+Va+Ga},Pl={0:{[O]:j},2:{[O]:"Layer III",[dt]:1,[Tt]:wm,[Xa]:{[en]:_m,[$]:1152},[ls]:{[en]:tu,[$]:576}},4:{[O]:"Layer II",[dt]:1,[Tt]:ru,[$]:1152,[Xa]:{[en]:xm},[ls]:{[en]:tu}},6:{[O]:"Layer I",[dt]:4,[Tt]:ru,[$]:384,[Xa]:{[en]:bm},[ls]:{[en]:vm}}},Fl="MPEG Version ",nu="ISO/IEC ",Sm={0:{[O]:`${Fl}2.5 (later extension of MPEG 2)`,[ke]:ls,[K]:{0:Ma,4:Aa,8:Un,12:j}},8:{[O]:j},16:{[O]:`${Fl}2 (${nu}13818-3)`,[ke]:ls,[K]:{0:zn,4:On,8:Nn,12:j}},24:{[O]:`${Fl}1 (${nu}11172-3)`,[ke]:Xa,[K]:{0:Bn,4:qt,8:Dn,12:j}},length:C},Am={0:Da,1:ns},Mm={0:ns,1:"50/15 ms",2:j,3:"CCIT J.17"},iu={0:{[B]:2,[O]:Yt},64:{[B]:2,[O]:"joint "+Yt},128:{[B]:2,[O]:"dual channel"},192:{[B]:1,[O]:Zt}},tn=class t extends Ne{static*[q](e,r,n){let i={},s=yield*os.getID3v2Header(e,r,n);s&&(yield*e[Y](s[C],n),e[Xe](s[C]));let a=yield*e[Y](4,n),o=Oe(a[G](0,4)),d=r[q](o);if(d)return new t(d);if(a[0]!==255||a[1]<224)return null;let l=Sm[a[1]&24];if(l[O]===j)return null;let c=a[1]&6;if(Pl[c][O]===j)return null;let f={...Pl[c],...Pl[c][l[ke]]};if(i[Ct]=l[O],i[ke]=f[O],i[$]=f[$],i[It]=Am[a[1]&1],i[C]=4,i[we]=su[a[2]&240][f[en]],i[we]===Ee||(i[K]=l[K][a[2]&12],i[K]===j)||(i[dt]=a[2]&2&&f[dt],i[Lt]=!!(a[2]&1),i[Re]=Math.floor(125*i[we]*i[$]/i[K]+i[dt]),!i[Re]))return null;let u=a[3]&192;if(i[Ae]=iu[u][O],i[B]=iu[u][B],i[Tt]=f[Tt][a[3]&48],i[Ni]=!!(a[3]&8),i[Et]=!!(a[3]&4),i[Vn]=Mm[a[3]&3],i[Vn]===j)return null;i[ve]=16;{let{length:h,frameLength:m,samples:g,...p}=i;r[Ke](o,i,p)}return new t(i)}constructor(e){super(e),this[we]=e[we],this[Vn]=e[Vn],this[dt]=e[dt],this[Ni]=e[Ni],this[Et]=e[Et],this[Lt]=e[Lt],this[ke]=e[ke],this[Tt]=e[Tt],this[Ct]=e[Ct],this[It]=e[It]}};var cs=class t extends ze{static*[$e](e,r,n){return yield*super[$e](tn,t,e,r,n)}constructor(e,r,n){super(e,r,n)}};var ds=class extends Le{constructor(e,r,n){super(e,r),this.Frame=cs,this.Header=tn,n(this[te])}get[te](){return Ea}*[ht](){return yield*this[ir]()}};var Em={0:"MPEG-4",8:"MPEG-2"},Lm={0:"valid",2:Ee,4:Ee,6:Ee},Tm={0:Da,1:ns},Cm={0:"AAC Main",64:"AAC LC (Low Complexity)",128:"AAC SSR (Scalable Sample Rate)",192:"AAC LTP (Long Term Prediction)"},Im={0:wa,4:Sa,8:Kd,12:qt,16:Bn,20:Dn,24:On,28:zn,32:Nn,36:Aa,40:Ma,44:Un,48:$d,52:j,56:j,60:"frequency is written explicitly"},au={0:{[B]:0,[O]:"Defined in AOT Specific Config"},64:{[B]:1,[O]:Zt},128:{[B]:2,[O]:oe(2,z[0][0])},192:{[B]:3,[O]:oe(3,z[1][3])},256:{[B]:4,[O]:oe(4,z[1][3],z[3][4])},320:{[B]:5,[O]:oe(5,z[1][3],z[3][0])},384:{[B]:6,[O]:oe(6,z[1][3],z[3][0],ot)},448:{[B]:8,[O]:oe(8,z[1][3],z[2][0],z[3][0],ot)}},rn=class t extends Ne{static*[q](e,r,n){let i={},s=yield*e[Y](7,n),a=Oe([s[0],s[1],s[2],s[3]&252|s[6]&3]),o=r[q](a);if(o)Object.assign(i,o);else{if(s[0]!==255||s[1]<240||(i[Ct]=Em[s[1]&8],i[ke]=Lm[s[1]&6],i[ke]===Ee))return null;let l=s[1]&1;i[It]=Tm[l],i[C]=l?7:9,i[La]=s[2]&192,i[ut]=s[2]&60;let c=s[2]&2;if(i[Wi]=Cm[i[La]],i[K]=Im[i[ut]],i[K]===j)return null;i[Lt]=!!c,i[Yi]=(s[2]<<8|s[3])&448,i[Ae]=au[i[Yi]][O],i[B]=au[i[Yi]][B],i[Et]=!!(s[3]&32),i[Ui]=!!(s[3]&8),i[qi]=!!(s[3]&8),i[ji]=!!(s[3]&4),i[ve]=16,i[$]=1024,i[Vi]=s[6]&3;{let{length:f,channelModeBits:u,profileBits:h,sampleRateBits:m,frameLength:g,samples:p,numberAACFrames:y,..._}=i;r[Ke](a,i,_)}}if(i[Re]=(s[3]<<11|s[4]<<3|s[5]>>5)&8191,!i[Re])return null;let d=(s[5]<<6|s[6]>>2)&2047;return i[Fi]=d===2047?"VBR":d,new t(i)}constructor(e){super(e),this[qi]=e[qi],this[ji]=e[ji],this[Fi]=e[Fi],this[Ui]=e[Ui],this[Et]=e[Et],this[Lt]=e[Lt],this[ke]=e[ke],this[C]=e[C],this[Ct]=e[Ct],this[Vi]=e[Vi],this[Wi]=e[Wi],this[It]=e[It]}get audioSpecificConfig(){let e=he.get(this),r=e[La]+64<<5|e[ut]<<5|e[Yi]>>3,n=new Me(2);return new ar(n[lt]).setUint16(0,r,!1),n}};var us=class t extends ze{static*[$e](e,r,n){return yield*super[$e](rn,t,e,r,n)}constructor(e,r,n){super(e,r,n)}};var fs=class extends Le{constructor(e,r,n){super(e,r),this.Frame=us,this.Header=rn,n(this[te])}get[te](){return"aac"}*[ht](){return yield*this[ir]()}};var or=class t extends ze{static _getFrameFooterCrc16(e){return(e[e[C]-2]<<8)+e[e[C]-1]}static[Ba](e){let r=t._getFrameFooterCrc16(e),n=Qd(e[G](0,-2));return r===n}constructor(e,r,n){r[ts]=n,r[Di]=t._getFrameFooterCrc16(e),super(r,e,he.get(r)[$])}};var ou="get from STREAMINFO metadata block",km={0:"Fixed",1:"Variable"},lu={0:j,16:192};for(let t=2;t<16;t++)lu[t<<4]=t<6?576*2**(t-2):2**t;var Rm={0:ou,1:Sa,2:Xd,3:Wd,4:Un,5:Nn,6:zn,7:On,8:Dn,9:Bn,10:qt,11:wa,15:Ee},Pm={0:{[B]:1,[O]:Zt},16:{[B]:2,[O]:oe(2,z[0][0])},32:{[B]:3,[O]:oe(3,z[0][1])},48:{[B]:4,[O]:oe(4,z[1][0],z[3][0])},64:{[B]:5,[O]:oe(5,z[1][1],z[3][0])},80:{[B]:6,[O]:oe(6,z[1][1],ot,z[3][0])},96:{[B]:7,[O]:oe(7,z[1][1],ot,z[3][4],z[2][0])},112:{[B]:8,[O]:oe(8,z[1][1],ot,z[3][0],z[2][0])},128:{[B]:2,[O]:`${Yt} (left, diff)`},144:{[B]:2,[O]:`${Yt} (diff, right)`},160:{[B]:2,[O]:`${Yt} (avg, diff)`},176:j,192:j,208:j,224:j,240:j},Fm={0:ou,2:8,4:12,6:j,8:16,10:20,12:24,14:j},lr=class t extends Ne{static _decodeUTF8Int(e){if(e[0]>254)return null;if(e[0]<128)return{value:e[0],length:1};let r=1;for(let a=64;a&e[0];a>>=1)r++;let n=r-1,i=0,s=0;for(;n>0;s+=6,n--){if((e[n]&192)!==128)return null;i|=(e[n]&63)<<s}return i|=(e[n]&127>>r)<<s,{value:i,length:r}}static[Ze](e,r){let n={[Y]:function*(){return e}};return t[q](n,r,0).next().value}static*[q](e,r,n){let i=yield*e[Y](6,n);if(i[0]!==255||!(i[1]===248||i[1]===249))return null;let s={},a=Oe(i[G](0,4)),o=r[q](a);if(o)Object.assign(s,o);else{if(s[Ca]=i[1]&1,s[Ki]=km[s[Ca]],s[$i]=i[2]&240,s[ut]=i[2]&15,s[kt]=lu[s[$i]],s[kt]===j||(s[K]=Rm[s[ut]],s[K]===Ee)||i[3]&1)return null;let l=Pm[i[3]&240];if(l===j||(s[B]=l[B],s[Ae]=l[O],s[ve]=Fm[i[3]&14],s[ve]===j))return null}s[C]=5,i=yield*e[Y](s[C]+8,n);let d=t._decodeUTF8Int(i[G](4));if(!d||(s[Ca]?s[Ji]=d.value:s[Bt]=d.value,s[C]+=d[C],s[$i]===96?(i[C]<s[C]&&(i=yield*e[Y](s[C],n)),s[kt]=i[s[C]-1]+1,s[C]+=1):s[$i]===112&&(i[C]<s[C]&&(i=yield*e[Y](s[C],n)),s[kt]=(i[s[C]-1]<<8)+i[s[C]]+1,s[C]+=2),s[$]=s[kt],s[ut]===12?(i[C]<s[C]&&(i=yield*e[Y](s[C],n)),s[K]=i[s[C]-1]*1e3,s[C]+=1):s[ut]===13?(i[C]<s[C]&&(i=yield*e[Y](s[C],n)),s[K]=(i[s[C]-1]<<8)+i[s[C]],s[C]+=2):s[ut]===14&&(i[C]<s[C]&&(i=yield*e[Y](s[C],n)),s[K]=((i[s[C]-1]<<8)+i[s[C]])*10,s[C]+=2),i[C]<s[C]&&(i=yield*e[Y](s[C],n)),s[Hn]=i[s[C]-1],s[Hn]!==jd(i[G](0,s[C]-1))))return null;if(!o){let{blockingStrategyBits:l,frameNumber:c,sampleNumber:f,samples:u,sampleRateBits:h,blockSizeBits:m,crc:g,length:p,...y}=s;r[Ke](a,s,y)}return new t(s)}constructor(e){super(e),this[Di]=null,this[Ki]=e[Ki],this[kt]=e[kt],this[Bt]=e[Bt],this[Ji]=e[Ji],this[ts]=null}};var Bm=2,Dm=512*1024,nn=class extends Le{constructor(e,r,n){super(e,r),this.Frame=or,this.Header=lr,n(this[te])}get[te](){return"flac"}*_getNextFrameSyncOffset(e){let r=yield*this._codecParser[Y](2,0),n=r[C]-2;for(;e<n;){if(r[e]===255){let s=r[e+1];if(s===248||s===249)break;s!==255&&e++}e++}return e}*[ht](){do{let e=yield*lr[q](this._codecParser,this._headerCache,0);if(e){let r=he.get(e)[C]+Bm;for(;r<=Dm;){if(this._codecParser._flushing||(yield*lr[q](this._codecParser,this._headerCache,r))){let n=yield*this._codecParser[Y](r);if(this._codecParser._flushing||(n=n[G](0,r)),or[Ba](n)){let i=new or(n,e);return this._headerCache[nt](),this._codecParser[Xe](r),this._codecParser[nr](i),i}}r=yield*this._getNextFrameSyncOffset(r+1)}this._codecParser[tt](`Unable to sync FLAC frame after searching ${r} bytes.`),this._codecParser[Xe](r)}else this._codecParser[Xe](yield*this._getNextFrameSyncOffset(1))}while(!0)}[sr](e){return e[ue]===0?(this._headerCache[nt](),this._streamInfo=e[J][G](13)):e[ue]===1||(e[Se]=be.get(e)[We].map(r=>{let n=lr[Ze](r,this._headerCache);if(n)return new or(r,n,this._streamInfo);this._codecParser[tt]("Failed to parse Ogg FLAC frame","Skipping invalid FLAC frame")}).filter(r=>!!r)),e}};var sn=class t{static*[q](e,r,n){let i={},s=yield*e[Y](28,n);if(s[0]!==79||s[1]!==103||s[2]!==103||s[3]!==83||(i[Ml]=s[4],s[5]&248))return null;i[De]=!!(s[5]&4),i[Qt]=!!(s[5]&2),i[jt]=!!(s[5]&1);let o=new ar(Me.from(s[G](0,28))[lt]);i[et]=eu(o,6),i[ft]=o.getInt32(14,!0),i[ue]=o.getInt32(18,!0),i[Yr]=o.getInt32(22,!0);let d=s[26];i[C]=d+27,s=yield*e[Y](i[C],n),i[Re]=0,i[rr]=[],i[Wn]=Me.from(s[G](27,i[C]));for(let l=0,c=0;l<d;l++){let f=i[Wn][l];i[Re]+=f,c+=f,(f!==255||l===d-1)&&(i[rr].push(c),c=0)}return new t(i)}constructor(e){he.set(this,e),this[et]=e[et],this[jt]=e[jt],this[Qt]=e[Qt],this[De]=e[De],this[rr]=e[rr],this[ue]=e[ue],this[Yr]=e[Yr],this[ft]=e[ft]}};var hs=class t extends Jr{static*[$e](e,r,n){let i=yield*sn[q](e,r,n);if(i){let s=he.get(i)[Re],a=he.get(i)[C],o=a+s,d=(yield*e[Y](o,0))[G](0,o),l=d[G](a,o);return new t(i,l,d)}else return null}constructor(e,r,n){super(e,r),be.get(this)[C]=n[C],this[Se]=[],this[wl]=n,this[et]=e[et],this[Oi]=e[Yr],this[ct]=0,this[jt]=e[jt],this[Qt]=e[Qt],this[De]=e[De],this[ue]=e[ue],this[$]=0,this[ft]=e[ft]}};var Kn=class extends ze{constructor(e,r,n){super(r,e,n)}};var cu={0:Ii.slice(0,2),1:Ii},Ye="SILK-only",xe="CELT-only",Ka="Hybrid",cr="narrowband",$a="medium-band",dr="wideband",$n="super-wideband",Zn="fullband",Om={0:{[U]:Ye,[H]:cr,[N]:10},8:{[U]:Ye,[H]:cr,[N]:20},16:{[U]:Ye,[H]:cr,[N]:40},24:{[U]:Ye,[H]:cr,[N]:60},32:{[U]:Ye,[H]:$a,[N]:10},40:{[U]:Ye,[H]:$a,[N]:20},48:{[U]:Ye,[H]:$a,[N]:40},56:{[U]:Ye,[H]:$a,[N]:60},64:{[U]:Ye,[H]:dr,[N]:10},72:{[U]:Ye,[H]:dr,[N]:20},80:{[U]:Ye,[H]:dr,[N]:40},88:{[U]:Ye,[H]:dr,[N]:60},96:{[U]:Ka,[H]:$n,[N]:10},104:{[U]:Ka,[H]:$n,[N]:20},112:{[U]:Ka,[H]:Zn,[N]:10},120:{[U]:Ka,[H]:Zn,[N]:20},128:{[U]:xe,[H]:cr,[N]:2.5},136:{[U]:xe,[H]:cr,[N]:5},144:{[U]:xe,[H]:cr,[N]:10},152:{[U]:xe,[H]:cr,[N]:20},160:{[U]:xe,[H]:dr,[N]:2.5},168:{[U]:xe,[H]:dr,[N]:5},176:{[U]:xe,[H]:dr,[N]:10},184:{[U]:xe,[H]:dr,[N]:20},192:{[U]:xe,[H]:$n,[N]:2.5},200:{[U]:xe,[H]:$n,[N]:5},208:{[U]:xe,[H]:$n,[N]:10},216:{[U]:xe,[H]:$n,[N]:20},224:{[U]:xe,[H]:Zn,[N]:2.5},232:{[U]:xe,[H]:Zn,[N]:5},240:{[U]:xe,[H]:Zn,[N]:10},248:{[U]:xe,[H]:Zn,[N]:20}},Yn=class t extends Ne{static[Ze](e,r,n){let i={};if(i[B]=e[9],i[Rt]=e[18],i[C]=i[Rt]!==0?21+i[B]:19,e[C]<i[C])throw new Error("Out of data while inside an Ogg Page");let s=r[0]&3,a=s===3?2:1,o=Oe(e[G](0,i[C]))+Oe(r[G](0,a)),d=n[q](o);if(d)return new t(d);if(o.substr(0,8)!=="OpusHead"||e[8]!==1)return null;i[J]=Me.from(e[G](0,i[C]));let l=new ar(i[J][lt]);if(i[ve]=16,i[$r]=l.getUint16(10,!0),i[Qi]=l.getUint32(12,!0),i[K]=qt,i[Gi]=l.getInt16(16,!0),i[Rt]in cu&&(i[Ae]=cu[i[Rt]][i[B]-1],!i[Ae]))return null;i[Rt]!==0&&(i[es]=e[19],i[Bi]=e[20],i[Zi]=[...e[G](21,i[B]+21)]);let c=Om[248&r[0]];switch(i[U]=c[U],i[H]=c[H],i[N]=c[N],s){case 0:i[Ft]=1;break;case 1:case 2:i[Ft]=2;break;case 3:i[Hi]=!!(128&r[1]),i[zi]=!!(64&r[1]),i[Ft]=63&r[1];break;default:return null}{let{length:f,data:u,channelMappingFamily:h,...m}=i;n[Ke](o,i,m)}return new t(i)}constructor(e){super(e),this[J]=e[J],this[H]=e[H],this[Rt]=e[Rt],this[Zi]=e[Zi],this[Bi]=e[Bi],this[Ft]=e[Ft],this[N]=e[N],this[zi]=e[zi],this[Qi]=e[Qi],this[Hi]=e[Hi],this[U]=e[U],this[Gi]=e[Gi],this[$r]=e[$r],this[es]=e[es]}};var ms=class extends Le{constructor(e,r,n){super(e,r),this.Frame=Kn,this.Header=Yn,n(this[te]),this._identificationHeader=null,this._preSkipRemaining=null}get[te](){return"opus"}[sr](e){return e[ue]===0?(this._headerCache[nt](),this._identificationHeader=e[J]):e[ue]===1||(e[Se]=be.get(e)[We].map(r=>{let n=Yn[Ze](this._identificationHeader,r,this._headerCache);if(n){this._preSkipRemaining===null&&(this._preSkipRemaining=n[$r]);let i=n[N]*n[Ft]/1e3*n[K];return this._preSkipRemaining>0&&(this._preSkipRemaining-=i,i=this._preSkipRemaining<0?-this._preSkipRemaining:0),new Kn(r,n,i)}this._codecParser[Pa]("Failed to parse Ogg Opus Header","Not a valid Ogg Opus file")})),e}};var qn=class extends ze{constructor(e,r,n){super(r,e,n)}};var Bl={};for(let t=0;t<8;t++)Bl[t+6]=2**(6+t);var ps=class t extends Ne{static[Ze](e,r,n,i){if(e[C]<30)throw new Error("Out of data while inside an Ogg Page");let s=Oe(e[G](0,30)),a=r[q](s);if(a)return new t(a);let o={[C]:30};if(s.substr(0,7)!=="vorbis")return null;o[J]=Me.from(e[G](0,30));let d=new ar(o[J][lt]);if(o[Jt]=d.getUint32(7,!0),o[Jt]!==0||(o[B]=e[11],o[Ae]=Ii[o[B]-1]||"application defined",o[K]=d.getUint32(12,!0),o[ki]=d.getInt32(16,!0),o[Pi]=d.getInt32(20,!0),o[Ri]=d.getInt32(24,!0),o[tr]=Bl[(e[28]&240)>>4],o[er]=Bl[e[28]&15],o[er]>o[tr])||e[29]!==1)return null;o[ve]=32,o[Gn]=i,o[Xi]=n;{let{length:l,data:c,version:f,vorbisSetup:u,vorbisComments:h,...m}=o;r[Ke](s,o,m)}return new t(o)}constructor(e){super(e),this[ki]=e[ki],this[Ri]=e[Ri],this[Pi]=e[Pi],this[er]=e[er],this[tr]=e[tr],this[J]=e[J],this[Xi]=e[Xi],this[Gn]=e[Gn]}};var gs=class extends Le{constructor(e,r,n){super(e,r),this.Frame=qn,n(this[te]),this._identificationHeader=null,this._setupComplete=!1,this._prevBlockSize=null}get[te](){return Zr}[sr](e){e[Se]=[];for(let r of be.get(e)[We])if(r[0]===1)this._headerCache[nt](),this._identificationHeader=e[J],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=ps[Ze](this._identificationHeader,this._headerCache,this._vorbisComments,this._vorbisSetup);n?e[Se].push(new qn(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 i=this._mode.blockFlags[e[0]>>1&this._mode.mask]?r[tr]:r[er],s=this._prevBlockSize===null?0:(this._prevBlockSize+i)/4;return this._prevBlockSize=i,s}_parseSetupHeader(e){let r=new Oa(e),n={count:0,blockFlags:[]};for(;(r.read(1)&1)!==1;);let i;for(;n.count<64&&r.position>0;){is(r.read(8));let s=0;for(;r.read(8)===0&&s++<3;);if(s===4)i=r.read(7),n.blockFlags.unshift(i&1),r.position+=6,n.count++;else{((is(i)&126)>>1)+1!==n.count&&this._codecParser[tt]("vorbis derived mode count did not match actual mode count");break}}return n.mask=(1<<Math.log2(n.count))-1,n}};var Dl=class{constructor(e,r,n){this._codecParser=e,this._headerCache=r,this._onCodec=n,this._continuedPacket=new Me,this._codec=null,this._isSupported=null,this._previousAbsoluteGranulePosition=null}get[te](){return this._codec||""}_updateCodec(e,r){this._codec!==e&&(this._headerCache[rt](),this._parser=new r(this._codecParser,this._headerCache,this._onCodec),this._codec=e)}_checkCodecSupport({data:e}){let r=Oe(e[G](0,8));switch(r){case"fishead\0":return!1;case"OpusHead":return this._updateCodec("opus",ms),!0;case(/^\x7fFLAC/.test(r)&&r):return this._updateCodec("flac",nn),!0;case(/^\x01vorbis/.test(r)&&r):return this._updateCodec(Zr,gs),!0;default:return!1}}_checkPageSequenceNumber(e){e[ue]!==this._pageSequenceNumber+1&&this._pageSequenceNumber>1&&e[ue]>1&&this._codecParser[tt]("Unexpected gap in Ogg Page Sequence Number.",`Expected: ${this._pageSequenceNumber+1}, Got: ${e[ue]}`),this._pageSequenceNumber=e[ue]}_parsePage(e){this._isSupported===null&&(this._pageSequenceNumber=e[ue],this._isSupported=this._checkCodecSupport(e)),this._checkPageSequenceNumber(e);let r=be.get(e),n=he.get(r[Be]),i=0;if(r[We]=n[rr].map(s=>e[J][G](i,i+=s)),this._continuedPacket[C]&&(r[We][0]=ss(this._continuedPacket,r[We][0]),this._continuedPacket=new Me),n[Wn][n[Wn][C]-1]===255&&(this._continuedPacket=ss(this._continuedPacket,r[We].pop())),this._previousAbsoluteGranulePosition!==null&&(e[$]=Number(e[et]-this._previousAbsoluteGranulePosition)),this._previousAbsoluteGranulePosition=e[et],this._isSupported){let s=this._parser[sr](e);return this._codecParser[nr](s),s}else return e}},ys=class extends Le{constructor(e,r,n){super(e,r),this._onCodec=n,this.Frame=hs,this.Header=sn,this._streams=new Map,this._currentSerialNumber=null}get[te](){let e=this._streams.get(this._currentSerialNumber);return e?e.codec:""}*[ht](){let e=yield*this[ir](!0);this._currentSerialNumber=e[ft];let r=this._streams.get(this._currentSerialNumber);return r||(r=new Dl(this._codecParser,this._headerCache,this._onCodec),this._streams.set(this._currentSerialNumber,r)),e[De]&&this._streams.delete(this._currentSerialNumber),r._parsePage(e)}};var Ol=()=>{},bs=class{constructor(e,{onCodec:r,onCodecHeader:n,onCodecUpdate:i,enableLogging:s=!1,enableFrameCRC32:a=!0}={}){this._inputMimeType=e,this._onCodec=r||Ol,this._onCodecHeader=n||Ol,this._onCodecUpdate=i,this._enableLogging=s,this._crc32=a?Jd:Ol,this[rt]()}get[te](){return this._parser?this._parser[te]:""}[rt](){this._headerCache=new as(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[rt]()}*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 fs(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/mpeg/))this._parser=new ds(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/flac/))this._parser=new nn(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/ogg/))this._parser=new ys(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[ht]();e&&(yield e)}}*[Y](e=0,r=0){let n;for(;this._rawData[C]<=e+r;){if(n=yield,this._flushing)return this._rawData[G](r);n&&(this._totalBytesIn+=n[C],this._rawData=ss(this._rawData,n))}return this._rawData[G](r)}[Xe](e){this._currentReadPosition+=e,this._rawData=this._rawData[G](e)}[rs](e){this._sampleRate=e[Be][K],e[Be][we]=e[ct]>0?Math.round(e[J][C]/e[ct])*8:0,e[Bt]=this._frameNumber++,e[qr]=this._totalBytesOut,e[Qr]=this._totalSamples,e[jr]=this._totalSamples/this._sampleRate*1e3,e[Oi]=this._crc32(e[J]),this._headerCache[Fa](e[Be][we],e[jr]),this._totalBytesOut+=e[J][C],this._totalSamples+=e[$]}[nr](e){if(e[Se]){if(e[De]){let r=e[$];e[Se].forEach(n=>{let i=n[$];r<i&&(n[$]=r>0?r:0,n[ct]=n[$]/n[Be][K]*1e3),r-=i,this[rs](n)})}else e[$]=0,e[Se].forEach(r=>{e[$]+=r[$],this[rs](r)});e[ct]=e[$]/this._sampleRate*1e3||0,e[Qr]=this._totalSamples,e[jr]=this._totalSamples/this._sampleRate*1e3||0,e[qr]=this._totalBytesOut}else this[rs](e)}_log(e,r){if(this._enableLogging){let n=[`${te}: ${this[te]}`,`inputMimeType: ${this._inputMimeType}`,`readPosition: ${this._currentReadPosition}`,`totalBytesIn: ${this._totalBytesIn}`,`${qr}: ${this._totalBytesOut}`],i=Math.max(...n.map(s=>s[C]));r.push(`--stats--${"-".repeat(i-9)}`,...n,"-".repeat(i)),e("codec-parser",r.reduce((s,a)=>s+`
4
+ `+a,""))}}[tt](...e){this._log(console.warn,e)}[Pa](...e){this._log(console.error,e)}};var du=bs;var Za=Se;var Ya=J;var uu=Be;var fu=De;var hu=Gn;var mu=Qr;function Dt(t){var e=e;function r(){}e={};function n(P){throw P}var i,s,a,o,d,l,c,f,u,h,m;function g(){var P=m.buffer;i=new Int8Array(P),s=new Int16Array(P),o=new Uint8Array(P),d=new Uint16Array(P),a=new Int32Array(P),l=new Uint32Array(P),c=new Float32Array(P),f=new Float64Array(P),u=new BigInt64Array(P),h=new BigUint64Array(P)}for(var p=P=>{for(var Ve,gi,yn=0,Qs=0,Js=P.length,ea=new Uint8Array((Js*3>>2)-(P[Js-2]=="=")-(P[Js-1]=="="));yn<Js;yn+=4,Qs+=3)Ve=V[P.charCodeAt(yn+1)],gi=V[P.charCodeAt(yn+2)],ea[Qs]=V[P.charCodeAt(yn)]<<2|Ve>>4,ea[Qs+1]=Ve<<4|gi>>2,ea[Qs+2]=gi<<6|V[P.charCodeAt(yn+3)];return ea},y=()=>n(""),_=()=>{},x={},b=P=>P(),v=()=>performance.now(),S=(P,Ve)=>{if(x[P]&&(clearTimeout(x[P].id),delete x[P]),!Ve)return 0;var gi=setTimeout(()=>{delete x[P],b(()=>rd(P,v()))},Ve);return x[P]={id:gi,timeout_ms:Ve},0},w=Math.atan,L=Math.cos,T=Math.exp,A=Math.log,I=Math.pow,R=Math.sin,F=P=>{var Ve=o.length;return P>>>=0,!1},k=P=>{throw`exit(${P})`},V=new Uint8Array(123),se=25;se>=0;--se)V[48+se]=52+se,V[65+se]=se,V[97+se]=26+se;V[43]=62,V[47]=63;var Ur={e:y,d:_,f:S,b:w,a:L,i:T,h:A,g:I,c:R,k:F,j:k};function js(P){pi=P.n,qc=P.o,jc=P.p,Qc=P.q,Jc=P.r,ed=P.s,td=P.t,rd=P.v}var pi,qc,jc,Qc,Jc,ed,td,rd;function Dh(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¯ñ€\Ñós 9ˆ\§ôÊ@Ü (tÂø4° ¢7fqÓg²Jè6x[zç®&4=} p.(°tÍޖ™ã¾>÷CõË"*k?¿~ 7‚~H2ÛÜâ.ÏQä;Œ6{ÜãFÑá'DœD¤±°HQ>MínÎϕÎöʵ’Ñӓ…™Þ“‰Ž‘š†Š‚œÌP¼P¨Þˆ*X²E=M¦qíxMà ±=M̚ë4/<šgNO‰™/¢ ¢>ˆa~Ï®”ììììì0”ìœa笡çëOÓÇM Q9tùµyuéµµÞϒ/Ÿ±Óõò}E{òÓJ¹Û|· ôfÒ c’¬”Wêaûÿlʽp¹|)‘ÖEL–†¦ }‰ypÕSϹI†]¢ˆºãæ°ÿo¶7ÛRqš¾ÔÅEߨ‘]æˉwÚ{óç‰Vwó1¾”E­Øpˆàe"Æùû–¡Áª ‡ Ààð´Lõ›€ÎxEÓ¢N¦‘…9Ÿëùši&€ Ò§Ø!ÇFçS=MbäO?ß·™縪‡7ùa}5ðšûÕtsUŒþ£Kïg‡ˆN™¾)ø§\V0uSIö:ÌU4ж¯´Õn9ÔƒèE£ZƼ{hµmى¾6ÆžÑ+xñ´«„þ¸=M‚ߤ·å®«ïÆGFÝì|H?äE"þ!9«Æïpæ'][¯ù·£W÷O§&#aŸ‡x$qf=}ø ô bϗŸ×W÷LôožÝWQÕӎ)u †÷½èV|¥Gà¨Ö¸˜@Œê| ÇK5ò €A·Â9’CS2š¸‹¼¿,ä›Ý ÑÝy™!ÑR„%ÆÝÎ0Âv§ qTcó±hØÉã‰=}Z=}Ælü­ën¯ð(-°ÜwVχï.th¥í­‡S~SÏ»Z”ZÔZ
6
6
  3–BÌÛ¬•<éæO)ÎyÚ¯O*®uìÛ$öI¥Ý9ôø³\¤ò³Ù¹ÇP¸J׎y@ÔyOÇm—’ô½üœš¾|S?2àú¤F?½ûoo3ôž;<àáûܘ8‚ì²7ïë¨RäY¹|ÓºÌF,ƒÐ™-¸*\P!FJÒ8= o6HwLrúº”¶Ð۞\Ù¬o¢–9Iq„Ý.ôf¶Îȏ{Ī×N|Mfs…•¤ „ÉݖàŸâ§‘*+ã§­’ô¯î¬7ç×§ä)€Š!Z¨ƒÉž,Äp~ý·wsSGó—äs„E€\ýï鞧Ö:Ò'“Cç(_X$\¦½eҒ8$’X˜F|e‚•œíٙә‚†¡¤Û<ØÞÛ¸9‰¿ðÃÎ#b~× ‚4éîÿÏq
7
7
  ˜ód‡|0•wU‰—&®è·vh6¨—{Ú珁Ú18ә(ÓY‚\ƒ0¦= çˆèíß)Ø=} ˜[xü-v˜?N(Kk‘gš0}âډ´ð“†¬”œÕQNÍ¢usѳ=}. ëg…û= Í M—Bp'²¨ œx’4è@9t“§eݵ¾âð½ z?†‹Z¹FH'‰Ì¯¿<ŒK,üµ<{˜ ¶JãývåàÆeù0Ð"F¥ÃÒÞŽþԛÉvC›zl}„ðN’£ Í^ƒP%²¸FX»WÎêô¶…ŠäÉJ^gƒ×SÃã.žÄt*'ªG‘«ÒB<ÜӅ¿ºp­\àuV¯£›Åݑ½á–Þ ùߞ=}ÎÚ^‹Ÿÿí>¥!¨ â=M·? */¤"å)â·ÿîÿî*(%*›2[½"üríÔ4š’l½»a}¯CwpCÓèìGc-ã6®=M32†k?Êg­…–!So-™x›>³G+ã@ò,™ Áïƒá„åN0þŠÙ‚è.~È÷¡vTr¶‰­‚Æ[üB±º»ávëw¹{pÜºû"Aæ’±9Æ^¹³òïRIAy5GÂwÉfœ4@Tù|qý7†ðªwBL|ÔqŽ‘v!ª°|]KiÐJVQ5‰¸åõ§‡‡åŒ"H¼0e¬<óBîÚS€ÏUìHPÙA+çÉ'se†ÌNf°@ÈM,ð½egÖ¬x©“„‹û½2~«ŠÒ1;ֈ«…¯°4&90èE»Ó׺ç‚ʧJ<Æ¿&~Nu¼ãÙµ¢.UÇä(qQô^ö–·“%!É
@@ -138,7 +138,7 @@ KÙ:KµºKí{K]ûK£[KÚKóšKÓ½R׿ÿ'P^j9TîçmóœþL¿_o©×hÙtÙ
138
138
  ÁiŸ;ª•äÀž‡%Ёn= =M+W= ÓÖc[aS
139
139
  FÁð]Nô‡Ý'= “qr(¶ù¤nŒü«òÿ¿d&ÿ ÈõT4Þ=}z|ö ¿OW×SMtdH.τãRX&§o3ؘÜXÍ^œÊM–í£W´iâ]NüOå£S£Å·ƒç÷­˜Ý§½GÑU y¹¦ß§/6P0(Cúýb"þ¥°VٌÄᣈ’ÓÙ@¾YýòDŽŒ{òÃv?’EP©”=MBé­\ĽYäýRò øfâëEEf¼D+gC×úDZGÅÿ±Ç?TzÙ¡±†Ï€ÁÕ¯¦ð‰vZ’mT}Œ3x˘z×cºrÑM=M„ c-ɩԈ™7½wæc§Î»cû¾yf‡ÙWòŒÆÝÔc¥³ôØfƒ«Äñ·9‰ø%­g:y”^+{U]¤þ‚…[&fӁÏY낫‡Gªõ‡¹¦ÖŒðþ¬m„oÛø‘?/ÛS’.[S›9ÛùœC›…/û2”²Y£ÎÑ%/sy¢×ÌùJ­W6Oí\g0^JùêßÏ0í[Ü“'ÏÔ>žÀ-¿[ÔW?Y]±ž ØÙÃî<~ÎëR~Ìf¾Z—/×¼_á¾Þê+îoÐñ{Þ\e3K%©¹§íB¹§(c=}ËÈ·SzÔnf§èx}o\9öf|%Ýå¥~©‚Iǀ ü€ñY8}FfŸú@Rú1éþ3‚÷˂‹ótQøvœû|³Îaá,Óé>BG6Òê}—ÄJ|¶=}°Žˆöf6žõk¶ÌºHgN’j‡Ò{柾M;9·é—§WèO±›Ä3қËÒyt™ ;ù´ˆà©aš|—Ó^!ÝøûšÄ
140
140
  (VV¸ ÇÙcÏ>yoçz ÃvòG{3Þ£½šŠcמôŒ íŚé;°OÛ‰GØ<wÜW> rU]Žq­{û'ùÝír{*øï?t-ígùWÿ…&§] m}×ût¥‚Ë~ß&>&Õv!b#ÅÌ‚q¢µ|jŽÍüùÉ^Æ&™ôžþŸ~sIµ"“]d)uâ´‘ºvk Å\<͉ÿ­öꍽƒÂ
141
- ïBçϧmÙIólÜoëVbƒ¦¯éWÇû3`});var Dh={a:Nr};this.setModule=P=>{t.setModule(Bt,P)},this.getModule=()=>t.getModule(Bt),this.instantiate=()=>(this.getModule().then(P=>WebAssembly.instantiate(P,Dh)).then(P=>{let Ve=P.exports;js(Ve),m=Ve.l,g(),Bh(Ve),r()}),this.ready=new Promise(P=>{r=P}).then(()=>{this.HEAP=m.buffer,this.malloc=qc,this.free=td,this.create_decoder=pi,this.send_setup=jc,this.init_dsp=Qc,this.decode_packets=Jc,this.destroy_decoder=ed}),this)}function sn(){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 i=0;i<t.length;i++){let s=t[i];this._input.buf.set(s),this._inputLen.buf[0]=s.length,this._common.wasm.decode_packets(this._decoder);let a=this._samplesDecoded.buf[0],o=[],d=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 c=new Float32Array(a);a&&c.set(new Float32Array(this._common.wasm.HEAP,d[l],a)),o.push(c)}e.push(o),r+=a,this._frameNumber++,this._inputBytes+=s.length,this._outputSamples+=a;for(let l=0;l<this._errorsLength.buf;l+=2){let c=this._common.codeToString(this._errors.buf[l]),f=this._common.codeToString(this._errors.buf[l+1]);n.push({message:c+" vorbis_synthesis"+f,frameLength:s.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=sn.isWebWorker,this._WASMAudioDecoderCommon=sn.WASMAudioDecoderCommon||re,this._EmscriptenWASM=sn.EmscriptenWASM||Bt,this._module=sn.module,this._inputSize=128*1024,this._ready=this._init(),this}var qa=Symbol(),Dt=class{constructor(){this._onCodec=e=>{if(e!=="vorbis")throw new Error("@wasm-audio-decoders/ogg-vorbis does not support this codec "+e)},new re,this._init(),this._ready=this[qa](sn)}_init(){this._vorbisSetupInProgress=!0,this._totalSamplesDecoded=0,this._codecParser=new du("audio/ogg",{onCodec:this._onCodec,enableFrameCRC32:!1})}async[qa](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 s=0;s<e.length;s++){let a=e[s];if(this._vorbisSetupInProgress&&(a[Ya][0]===1&&this._decoder.sendSetupHeader(a[Ya]),a[Za].length)){let o=a[Za][0][uu];this._decoder.sendSetupHeader(o[hu]),this._decoder.initDsp(),this._vorbisSetupInProgress=!1}r.push(...a[Za].map(o=>o[Ya]))}let n=await this._decoder.decodePackets(r);this._totalSamplesDecoded+=n.samplesDecoded;let i=e[e.length-1];if(i&&i[fu]){let s=this._totalSamplesDecoded-i[mu];if(s>0){for(let a=0;a<n.channelData.length;a++)n.channelData[a]=n.channelData[a].subarray(0,n.samplesDecoded-s);n.samplesDecoded-=s,this._totalSamplesDecoded-=s}}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 Ol=class extends Fn{constructor(e){super(e,"ogg-vorbis-decoder",sn,Bt)}async sendSetupHeader(e){return this.postToDecoder("sendSetupHeader",e)}async initDsp(){return this.postToDecoder("initDsp")}async decodePackets(e){return this.postToDecoder("decodePackets",e)}},xs=class extends Dt{constructor(){super(),this._ready=super[qa](Ol)}async free(){await this._decoder.free()}terminate(){this._decoder.terminate()}};va(Dt,"OggVorbisDecoder");va(xs,"OggVorbisDecoderWebWorker");var Nl=class extends Error{constructor(e){super(e),this.name="OggDecodeError"}};async function ja(t,e=new Dt){await e.ready;let r=await e.decode(new Uint8Array(t)),n=r.errors;if(n&&n.length>0)throw new Nl(n.map(i=>i.message).join("; "));return{sampleRate:r.sampleRate,channels:r.channelData.length,bitDepth:r.bitDepth,channelData:r.channelData}}var _s=class extends Error{constructor(e){super(e),this.name="AudioRegistryError"}},jn=class{constructor(e,r={}){this.vfs=e;this.refCounts=new Map;this.cache=new Xt(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 s=(await this.vfs.readFile(e)).slice().buffer,a=await this.decodeByExtension(e,s);return this.cache.set(r,a),this.refCounts.set(r,1),a}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 i=_a(r),s=i.channels,a=Array.from({length:s},()=>new Float32Array(i.samples.length/s));for(let o=0;o<i.samples.length;o+=1)a[o%s][Math.floor(o/s)]=i.samples[o];return{sampleRate:i.sampleRate,channels:s,bitDepth:i.bitsPerSample,channelData:a}}if(n.endsWith(".ogg")||n.endsWith(".oga"))return ja(r);throw new _s(`Unsupported audio format: ${e}`)}};var Nm="quake2ts-pak-indexes",Um="pak-indexes";function pu(){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 vs(t,e){let r=pu();return r?new Promise((n,i)=>{let s=r.open(t,1);s.onupgradeneeded=()=>{let{result:a}=s;a.objectStoreNames.contains(e)||a.createObjectStore(e,{keyPath:"key"})},s.onerror=()=>i(s.error??new Error("Unknown IndexedDB error")),s.onsuccess=()=>n(s.result)}):Promise.reject(new Error("IndexedDB is not available in this environment"))}function ws(t,e,r,n){return new Promise((i,s)=>{let o=t.transaction(e,r).objectStore(e),d=n(o);d.onsuccess=()=>i(d.result),d.onerror=()=>s(d.error??new Error("IndexedDB transaction error"))})}function Ul(t,e){return`${ae(t)}:${e.toString(16)}`}function Hm(t){return t.map(e=>({...e}))}var Qa=class{constructor(e=Nm,r=Um){this.dbName=e;this.storeName=r}get isSupported(){return!!pu()}async persist(e){if(!this.isSupported)return;let r=e.validate(),n={...r,key:Ul(e.name,r.checksum),name:e.name,size:e.size,persistedAt:Date.now(),entries:Hm(r.entries)},i=await vs(this.dbName,this.storeName);return await ws(i,this.storeName,"readwrite",s=>s.put(n)),i.close(),n}async find(e,r){if(!this.isSupported)return;let n=await vs(this.dbName,this.storeName),i=r!==void 0?Ul(e,r):void 0,s=await ws(n,this.storeName,"readonly",a=>i?a.get(i):a.getAll());if(n.close(),!!s){if(Array.isArray(s)){let a=ae(e),o=s.filter(d=>ae(d.name)===a);return o.length===0?void 0:o.sort((d,l)=>l.persistedAt-d.persistedAt)[0]}return s}}async remove(e,r){if(!this.isSupported)return!1;let n=await vs(this.dbName,this.storeName),i=r!==void 0?Ul(e,r):void 0,s=await ws(n,this.storeName,"readwrite",a=>{if(i)return a.delete(i);let o=`${ae(e)}:`;return a.delete(IDBKeyRange.bound(o,`${o}\uFFFF`,!1,!0))});return n.close(),typeof s=="number"?s>0:!0}async clear(){if(!this.isSupported)return;let e=await vs(this.dbName,this.storeName);await ws(e,this.storeName,"readwrite",r=>r.clear()),e.close()}async list(){if(!this.isSupported)return[];let e=await vs(this.dbName,this.storeName),r=await ws(e,this.storeName,"readonly",n=>n.getAll());return e.close(),r.sort((n,i)=>i.persistedAt-n.persistedAt)}};var an=class extends Error{constructor(r,n){super(n??`Missing dependencies: ${r.join(", ")}`);this.missing=r;this.name="AssetDependencyError"}},Ss=class{constructor(){this.nodes=new Map}register(e,r=[]){let n=this.nodes.get(e)??{dependencies:new Set,loaded:!1};r.forEach(i=>n.dependencies.add(i)),this.nodes.set(e,n),r.forEach(i=>{this.nodes.has(i)||this.nodes.set(i,{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 an(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 i of r.dependencies)this.nodes.get(i)?.loaded||n.push(i);return n}},Ja=class{constructor(e,r={}){this.vfs=e;this.maps=new Map;this.loadQueue=[];this.activeLoads=0;this.textures=new Pn({capacity:r.textureCacheCapacity??128,maxMemory:r.textureMemoryLimit}),this.audio=new jn(e,{cacheSize:r.audioCacheSize??64}),this.dependencyTracker=r.dependencyTracker??new Ss,this.resourceTracker=r.resourceTracker,this.md2=new In(e),this.md3=new kn(e),this.sprite=new Rn(e),this.bsp=new Cn(e),this.maxConcurrentLoads=r.maxConcurrentLoads??4,this.palette=new Uint8Array(768);for(let n=0;n<256;n++)this.palette[n*3]=n,this.palette[n*3+1]=n,this.palette[n*3+2]=n}async loadPalette(e="pics/colormap.pcx"){try{let r=await this.vfs.readFile(e),n=Ti(r);n.palette&&(this.palette=n.palette)}catch(r){console.warn(`Failed to load palette from ${e}:`,r)}}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 loadTexture(e){if(this.resourceTracker){let a=this.vfs.stat(e);this.resourceTracker.recordLoad("texture",e,a?.size,a?.sourcePak)}let r=this.textures.get(e);if(r)return r;let n=await this.vfs.readFile(e),i=e.split(".").pop()?.toLowerCase(),s;if(i==="wal")s=xa(n,this.palette);else if(i==="pcx")s=ba(Ti(n));else if(i==="tga")s=Nd(bl(n));else throw new Error(`Unsupported texture format for loadTexture: ${i}`);return this.registerTexture(e,s),s}async loadSound(e){if(this.resourceTracker){let i=this.vfs.stat(e);this.resourceTracker.recordLoad("sound",e,i?.size,i?.sourcePak)}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=[]){if(this.resourceTracker){let o=this.vfs.stat(e);this.resourceTracker.recordLoad("model",e,o?.size,o?.sourcePak)}let n=this.makeKey("model",e),i=r.map(o=>this.makeKey("texture",o));this.dependencyTracker.register(n,i);let s=this.dependencyTracker.missingDependencies(n);if(s.length>0)throw new an(s,`Asset ${n} is missing dependencies: ${s.join(", ")}`);let a=await this.md2.load(e);return this.dependencyTracker.markLoaded(n),a}getMd2Model(e){if(this.resourceTracker){let r=this.vfs.stat(e);this.resourceTracker.recordLoad("model",e,r?.size,r?.sourcePak)}return this.md2.get(e)}async loadMd3Model(e,r=[]){if(this.resourceTracker){let o=this.vfs.stat(e);this.resourceTracker.recordLoad("model",e,o?.size,o?.sourcePak)}let n=this.makeKey("model",e),i=r.map(o=>this.makeKey("texture",o));this.dependencyTracker.register(n,i);let s=this.dependencyTracker.missingDependencies(n);if(s.length>0)throw new an(s,`Asset ${n} is missing dependencies: ${s.join(", ")}`);let a=await this.md3.load(e);return this.dependencyTracker.markLoaded(n),a}getMd3Model(e){if(this.resourceTracker){let r=this.vfs.stat(e);this.resourceTracker.recordLoad("model",e,r?.size,r?.sourcePak)}return this.md3.get(e)}async loadSprite(e){if(this.resourceTracker){let i=this.vfs.stat(e);this.resourceTracker.recordLoad("sprite",e,i?.size,i?.sourcePak)}let r=this.makeKey("sprite",e);this.dependencyTracker.register(r);let n=await this.sprite.load(e);return this.dependencyTracker.markLoaded(r),n}async loadMap(e){if(this.resourceTracker){let i=this.vfs.stat(e);this.resourceTracker.recordLoad("map",e,i?.size,i?.sourcePak)}let r=this.makeKey("map",e);if(this.maps.has(e))return this.maps.get(e);this.dependencyTracker.register(r);let n=await this.bsp.load(e);return this.maps.set(e,n),this.dependencyTracker.markLoaded(r),n}getMap(e){return this.maps.get(e)}listFiles(e){return this.vfs.findByExtension(e)}resetForLevelChange(){this.textures.clear(),this.audio.clearAll(),this.dependencyTracker.reset(),this.maps.clear(),this.loadQueue.length=0}getMemoryUsage(){let e=0,r=0;if(typeof process<"u"&&process.memoryUsage){let n=process.memoryUsage();e=n.heapTotal,r=n.heapUsed}return{textures:this.textures.memoryUsage,audio:0,heapTotal:e,heapUsed:r}}clearCache(e){switch(e){case"texture":this.textures.clear();break;case"sound":this.audio.clearAll();break;case"map":this.maps.clear();break}}async preloadAssets(e){let r=e.map(n=>{let i=this.detectAssetType(n);return i?this.queueLoad(n,i,0):Promise.resolve()});await Promise.all(r)}queueLoad(e,r,n=1){return r==="texture"&&this.textures.get(e)?Promise.resolve(this.textures.get(e)):new Promise((i,s)=>{this.loadQueue.push({path:e,type:r,priority:n,resolve:i,reject:s}),this.loadQueue.sort((a,o)=>o.priority-a.priority),this.processQueue()})}async processQueue(){if(this.activeLoads>=this.maxConcurrentLoads||this.loadQueue.length===0)return;let e=this.loadQueue.shift();this.activeLoads++;try{let r;switch(e.type){case"texture":r=await this.loadTexture(e.path);break;case"sound":r=await this.loadSound(e.path);break;case"model":e.path.endsWith(".md2")?r=await this.loadMd2Model(e.path):e.path.endsWith(".md3")&&(r=await this.loadMd3Model(e.path));break;case"sprite":r=await this.loadSprite(e.path);break;case"map":r=await this.loadMap(e.path);break;default:throw new Error(`Unknown asset type ${e.type}`)}e.resolve(r)}catch(r){e.reject(r)}finally{this.activeLoads--,this.processQueue()}}detectAssetType(e){let r=e.split(".").pop()?.toLowerCase();return r?["wal","pcx","tga","png","jpg"].includes(r)?"texture":["wav","ogg"].includes(r)?"sound":["md2","md3"].includes(r)?"model":["sp2"].includes(r)?"sprite":["bsp"].includes(r)?"map":null:null}makeKey(e,r){return`${e}:${ae(r)}`}};var eo=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 to(t){let e=t.getContext(),r=e.createGain();r.gain.value=1;let n=e.createDynamicsCompressor(),i=e.createBiquadFilter?.(),s;if(e.createConvolver&&e.createGain){let a=e.createConvolver(),o=e.createGain(),d=e.createGain();o.connect(a),a.connect(d),s={convolver:a,input:o,output:d}}return i?(i.type="lowpass",i.frequency.value=2e4,i.Q.value=.707,r.connect(i),i.connect(n),s&&s.output.connect(i)):(r.connect(n),s&&s.output.connect(n)),n.connect(e.destination),{context:e,master:r,compressor:n,filter:i,reverb:s}}var ro=class{constructor(e=new En){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)}getName(e){return this.configStrings.getName(e)}};var no=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(s=>this.normalize(s)))],n={loaded:[],skipped:[],missing:[],errors:{}},i=this.contextController.getContext();for(let s of r)try{let a=this.registry.find(s);if(a!==void 0&&this.registry.has(a)){n.skipped.push(s);continue}if(!this.vfs.stat(s)){n.missing.push(s);continue}let l=(await this.vfs.readFile(s)).slice().buffer,c=await this.decodeAudio(i,l);this.registry.register(s,c),n.loaded.push(s)}catch(a){let o=a instanceof Error?a:new Error(String(a));n.errors[s]=o}return n}normalize(e){let r=ae(e.replace(/^\//,""));return r.startsWith(this.soundRoot)?r:ae(`${this.soundRoot}${r}`)}};var Vm=7,As=t=>t&Vm;function io(t){return Array.from({length:_i},()=>({entnum:0,entchannel:at.Auto,endTimeMs:0,isPlayer:!1,active:!1})).map(e=>({...e,isPlayer:e.entnum===t}))}function so(t,e,r,n){if(r<0)throw new Error("pickChannel: entchannel must be non-negative");let i=As(r),s=-1,a=Number.POSITIVE_INFINITY;for(let o=0;o<t.length;o+=1){let d=t[o],l=As(d.entchannel);if(i!==at.Auto&&d.entnum===e&&l===i){s=o;break}if(d.active&&d.entnum===n.playerEntity&&e!==n.playerEntity)continue;let c=d.endTimeMs-n.nowMs;(s===-1||c<a)&&(a=c,s=o)}return s===-1?void 0:s}var ao=class{constructor(e){this.activePreset=null;this.enabled=!0;this.node=e,this.node.input.gain.value=.5,this.node.output.gain.value=1}setPreset(e){this.activePreset=e,this.node.convolver.buffer!==(e?.buffer??null)&&(this.node.convolver.buffer=e?.buffer??null),e&&e.gain!==void 0?this.node.output.gain.value=e.gain:this.node.output.gain.value=1}setEnabled(e){this.enabled=e,e?this.node.input.gain.value=.5:this.node.input.gain.value=0}getOutputNode(){return this.node.output}getInputNode(){return this.node.input}};var oo=class{constructor(e){this.activeSources=new Map;this.playbackRate=1;this.contextController=e.context,this.registry=e.registry,this.playerEntity=e.playerEntity,this.channels=io(e.playerEntity),this.listener=e.listener??{origin:id,right:{x:1,y:0,z:0}},this.sfxVolume=e.sfxVolume??1,this.masterVolume=e.masterVolume??1,this.resolveOcclusion=e.resolveOcclusion,this.graph=to(this.contextController),this.graph.master.gain.value=this.masterVolume,this.graph.reverb&&(this.reverb=new ao(this.graph.reverb))}setListener(e){this.listener=e}setMasterVolume(e){this.masterVolume=e,this.graph.master.gain.value=e}setSfxVolume(e){this.sfxVolume=e}setPlaybackRate(e){this.playbackRate=e;for(let r of this.activeSources.values())r.source.playbackRate&&(r.source.playbackRate.value=e),this.updateSourceGain(r)}async ensureRunning(){await this.contextController.resume()}setReverbPreset(e){this.reverb?.setPreset(e)}play(e){let r=this.registry.get(e.soundIndex);if(!r)return;let n=this.graph.context,i=n.currentTime*1e3,s=so(this.channels,e.entity,e.channel,{nowMs:i,playerEntity:this.playerEntity});if(s===void 0)return;let a=this.activeSources.get(s);a&&(a.source.onended=null,a.source.stop(),this.activeSources.delete(s));let o=n.createBufferSource();o.buffer=r,o.loop=e.looping??!1,o.playbackRate&&(o.playbackRate.value=this.playbackRate);let d=e.origin??this.listener.origin,l=n.createGain(),c=this.createPanner(n,e.attenuation),f=this.resolveOcclusion?.(this.listener,d,e.attenuation),u=gu(f?.gainScale??1),h=this.resolveOcclusion?this.createOcclusionFilter(n,f?.lowpassHz??2e4):void 0;this.applyOriginToPanner(c,d);let g=e.volume/255*this.sfxVolume,p=Math.abs(this.playbackRate-1)<.001?1:0;l.gain.value=g*u*p;let y=n.currentTime+(e.timeOffsetMs??0)/1e3,_=(e.looping?Number.POSITIVE_INFINITY:r.duration*1e3)+y*1e3;o.connect(c);let x=c;h?(c.connect(h),h.connect(l),x=l):(c.connect(l),x=l),l.connect(this.graph.master),this.reverb&&l.connect(this.reverb.getInputNode()),o.start(y),o.onended=()=>{this.channels[s].active=!1,this.activeSources.delete(s)};let b={channelIndex:s,entnum:e.entity,entchannel:As(e.channel),endTimeMs:_,source:o,panner:c,gain:l,baseGain:g,origin:d,attenuation:e.attenuation,occlusion:h?{scale:u,lowpassHz:f?.lowpassHz,filter:h}:f?{scale:u,lowpassHz:f.lowpassHz}:void 0};return this.channels[s]={entnum:e.entity,entchannel:As(e.channel),endTimeMs:_,isPlayer:e.entity===this.playerEntity,active:!0},this.activeSources.set(s,b),b}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 i=this.resolveOcclusion(this.listener,r,n.attenuation);this.applyOcclusion(n,i)}}positionedSound(e,r,n,i){return this.play({entity:0,channel:at.Auto,soundIndex:r,volume:n,attenuation:i,origin:e})}ambientSound(e,r,n){return this.play({entity:0,channel:at.Auto,soundIndex:r,volume:n,attenuation:vi,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=Sn(r);return e.refDistance=wn,e.maxDistance=Vr(r),e.rolloffFactor=n,e.distanceModel="linear",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=Hl(r,10,2e4),n}updateSourceGain(e){let r=e.occlusion?.scale??1,n=Math.abs(this.playbackRate-1)<.001?1:0;e.gain.gain.value=e.baseGain*r*n}applyOcclusion(e,r){let n=gu(r?.gainScale??1),i=Math.abs(this.playbackRate-1)<.001?1:0;if(e.gain.gain.value=e.baseGain*n*i,e.occlusion?.filter){let s=r?.lowpassHz??2e4;e.occlusion.filter.frequency.value=Hl(s,10,2e4)}e.occlusion?(e.occlusion.scale=n,e.occlusion.lowpassHz=r?.lowpassHz):r&&(e.occlusion={scale:n,lowpassHz:r.lowpassHz})}},Hl=(t,e,r)=>Math.min(r,Math.max(e,t)),gu=t=>Hl(t,0,1);var Ms=class{constructor(e){this.trace=e;this.resolve=(e,r,n)=>{let i=Yo(sd(r,e.origin)),s=Vr(n),d=2e4*(1-Math.min(i,s)/Math.max(1,s)*.9),l=this.trace(e.origin,r,void 0,void 0),c=1,f=2e4;l.fraction<1&&(c=.3,f=400);let u=Math.min(d,f);if(c<1||u<2e4)return{gainScale:c,lowpassHz:u}}}};function yu(t){return new Ms(t).resolve}var lo=class{constructor(e){this.createElement=e.createElement,this.resolveSource=e.resolveSource??(async r=>r),this.volume=e.volume??1,this.crossfadeDuration=e.crossfadeDuration??1}async playTrack(e){let r=`music/track${e.toString().padStart(2,"0")}.ogg`;return this.play(r)}async play(e,{loop:r=!0,restart:n=!1}={}){if(this.track===e&&this.currentElement){this.currentElement.loop=r,this.cancelFade(),this.fadingElement&&(this.fadingElement.pause(),this.fadingElement=void 0),this.currentElement.volume=this.volume,n&&(this.currentElement.currentTime=0),(this.currentElement.paused||n)&&await this.currentElement.play();return}let i=await this.resolveSource(e);this.cancelFade(),this.fadingElement&&(this.fadingElement.pause(),this.fadingElement=void 0),this.currentElement&&(this.fadingElement=this.currentElement,this.currentElement=void 0);let s=this.createElement();s.src=i,s.loop=r,s.volume=0,s.currentTime=0,s.load();try{await s.play()}catch(a){console.warn(`MusicSystem: Failed to play ${e}`,a),this.fadingElement}this.currentElement=s,this.track=e,this.startCrossfade()}pause(){this.cancelFade(),this.currentElement&&!this.currentElement.paused&&this.currentElement.pause(),this.fadingElement&&(this.fadingElement.pause(),this.fadingElement=void 0)}async resume(){!this.currentElement||!this.currentElement.paused||(await this.currentElement.play(),this.currentElement.volume=this.volume)}stop(){this.cancelFade(),this.currentElement&&(this.currentElement.pause(),this.currentElement.currentTime=0,this.currentElement=void 0),this.fadingElement&&(this.fadingElement.pause(),this.fadingElement=void 0),this.track=void 0}setVolume(e){this.volume=e,this.currentElement&&!this.fadeInterval&&(this.currentElement.volume=e)}getState(){let e=!!(this.currentElement&&!this.currentElement.paused&&!this.currentElement.ended),r=!!this.currentElement?.paused;return{track:this.track,paused:r,playing:e,volume:this.volume}}startCrossfade(){let r=this.crossfadeDuration*1e3/50,n=this.volume/r,i=0,s=this.fadingElement?this.fadingElement.volume:0,a=()=>{let o=!1;this.currentElement&&(i=Math.min(this.volume,i+n),this.currentElement.volume=i,i<this.volume&&(o=!0)),this.fadingElement&&(s=Math.max(0,s-n),this.fadingElement.volume=s,s>0?o=!0:(this.fadingElement.pause(),this.fadingElement=void 0)),o||this.cancelFade()};a(),(this.currentElement&&this.currentElement.volume<this.volume||this.fadingElement)&&(this.fadeInterval=setInterval(a,50))}cancelFade(){this.fadeInterval&&(clearInterval(this.fadeInterval),this.fadeInterval=void 0)}};function Gm(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 Wm(t,e,r,n){for(let i of e){let s=t.getExtension(i);if(!s)throw new Error(`Missing required WebGL extension: ${i}`);n.set(i,s)}for(let i of r){let s=t.getExtension(i);s&&n.set(i,s)}}function bu(t,e={}){let{contextAttributes:r,requiredExtensions:n=[],optionalExtensions:i=[]}=e,s=t.getContext("webgl2",r??{antialias:!0});if(!s)throw new Error("WebGL2 not supported or failed to initialize");Gm(s);let a=new Map;Wm(s,n,i,a);let o=!1,d=new Set,l=new Set,c=u=>{o=!0,u.preventDefault();for(let h of d)h()},f=()=>{o=!1;for(let u of l)u()};return t.addEventListener("webglcontextlost",c),t.addEventListener("webglcontextrestored",f),{gl:s,extensions:a,isLost:()=>o,onLost(u){return d.add(u),()=>d.delete(u)},onRestored(u){return l.add(u),()=>l.delete(u)},dispose(){t.removeEventListener("webglcontextlost",c),t.removeEventListener("webglcontextrestored",f),d.clear(),l.clear(),a.clear()}}}function xu(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 s=t.getShaderInfoLog(n)??"Unknown shader compile failure";throw t.deleteShader(n),new Error(s)}return n}function Xm(t,e,r,n){let i=t.createProgram();if(!i)throw new Error("Failed to allocate shader program");if(t.attachShader(i,e),t.attachShader(i,r),n)for(let[a,o]of Object.entries(n))t.bindAttribLocation(i,o,a);if(t.linkProgram(i),!t.getProgramParameter(i,t.LINK_STATUS)){let a=t.getProgramInfoLog(i)??"Unknown shader link failure";throw t.deleteProgram(i),new Error(a)}return i}var Te=class t{constructor(e,r,n){this.uniformLocations=new Map;this.attributeLocations=new Map;this.gl=e,this.program=r,this.sourceSize=n}static create(e,r,n){let i=xu(e,e.VERTEX_SHADER,r.vertex),s=xu(e,e.FRAGMENT_SHADER,r.fragment);try{let a=Xm(e,i,s,n),o=r.vertex.length+r.fragment.length;return new t(e,a,o)}finally{e.deleteShader(i),e.deleteShader(s)}}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 _u(t,e,r){return Te.create(t,e,r)}var Ce=class{constructor(e,r=e.STATIC_DRAW,n){this.gl=e,this.target=n??e.ARRAY_BUFFER;let i=e.createBuffer();if(!i)throw new Error("Failed to allocate buffer");this.buffer=i,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)}},_e=class extends Ce{constructor(e,r=e.STATIC_DRAW){super(e,r,e.ELEMENT_ARRAY_BUFFER)}},Pe=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)}},Qn=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,i,s,a,o,d){this.bind(),this.gl.texImage2D(this.target,e,r,n,i,s,a,o,d)}dispose(){this.gl.deleteTexture(this.texture)}},Jn=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,i,s,a,o,d,l){this.bind(),this.gl.texImage2D(e,r,n,i,s,a,o,d,l)}dispose(){this.gl.deleteTexture(this.texture)}},co=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 Gl=4,Vl=7*Gl,Wl=[{index:0,size:3,type:5126,stride:Vl,offset:0},{index:1,size:2,type:5126,stride:Vl,offset:3*Gl},{index:2,size:2,type:5126,stride:Vl,offset:5*Gl}];function Km(t,e){return{width:t,height:t,padding:e,data:new Uint8Array(t*t*4),cursorX:0,cursorY:0,rowHeight:0}}function $m(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 Zm(t,e,r){let n=$m(r),i=t.width*4,s=e.x+t.padding,a=e.y+t.padding,o=0;for(let d=0;d<r.height;d++){let l=(a+d)*i+s*4;for(let c=0;c<r.width;c++){let f=l+c*4;t.data[f]=r.samples[o],t.data[f+1]=r.samples[o+1],t.data[f+2]=r.samples[o+2],t.data[f+3]=n===4?r.samples[o+3]:255,o+=n}}}function Ym(t,e,r){let n=e.width+r.lightmapPadding*2,i=e.height+r.lightmapPadding*2;if(n>r.atlasSize||i>r.atlasSize)throw new Error("Lightmap too large for atlas");for(let o of t){if(o.cursorX+n>o.width&&(o.cursorX=0,o.cursorY+=o.rowHeight+r.lightmapPadding,o.rowHeight=0),o.cursorY+i>o.height)continue;let d={atlasIndex:t.indexOf(o),x:o.cursorX,y:o.cursorY,width:e.width,height:e.height};return o.cursorX+=n+r.lightmapPadding,o.rowHeight=Math.max(o.rowHeight,i),{placement:d,atlas:o}}let s=Km(r.atlasSize,r.lightmapPadding);t.push(s);let a={atlasIndex:t.length-1,x:0,y:0,width:e.width,height:e.height};return s.cursorX=n+r.lightmapPadding,s.rowHeight=i,{placement:a,atlas:s}}function uo(t){return t instanceof Float32Array?t:new Float32Array(t)}function qm(t,e){if(!t){let n=new Uint16Array(e);for(let i=0;i<e;i++)n[i]=i;return n}return t instanceof Uint16Array?t:new Uint16Array(t)}function jm(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 Qm(t,e){let r=uo(t.vertices),n=uo(t.textureCoords),i=e?jm(uo(t.lightmapCoords??t.textureCoords),e):uo(t.lightmapCoords??new Float32Array(n.length)),s=r.length/3;if(n.length/2!==s)throw new Error("Texture coordinates count mismatch");if(i.length/2!==s)throw new Error("Lightmap coordinates count mismatch");let a=new Float32Array(s*7);for(let o=0;o<s;o++){let d=o*3,l=o*2,c=o*7;a[c]=r[d],a[c+1]=r[d+1],a[c+2]=r[d+2],a[c+3]=n[l],a[c+4]=n[l+1],a[c+5]=i[l],a[c+6]=i[l+1]}return a}function vu(t){let e=[];for(let r=0;r<t.faces.length;r++){let n=t.faces[r];if(n.texInfo<0)continue;let i=t.texInfo[n.texInfo],s=[],a=[],o=[];for(let u=0;u<n.numEdges;u++){let h=t.surfEdges[n.firstEdge+u],m=t.edges[Math.abs(h)],g=h>=0?m.vertices[0]:m.vertices[1],p=t.vertices[g];s.push(p[0],p[1],p[2]);let y=p[0]*i.s[0]+p[1]*i.s[1]+p[2]*i.s[2]+i.sOffset,_=p[0]*i.t[0]+p[1]*i.t[1]+p[2]*i.t[2]+i.tOffset;a.push(y,_),o.push(y,_)}let d=[],l=s.length/3;for(let u=1;u<l-1;u++)d.push(0,u,u+1);let c,f=t.lightMapInfo[r];if(f){let u=1/0,h=-1/0,m=1/0,g=-1/0;for(let v=0;v<a.length;v+=2){let S=a[v],w=a[v+1];S<u&&(u=S),S>h&&(h=S),w<m&&(m=w),w>g&&(g=w)}let p=Math.floor(u/16),y=Math.floor(m/16),_=Math.ceil(h/16)-p+1,x=Math.ceil(g/16)-y+1,b=ma(n,t.lightMaps,f);if(b&&b.length===_*x*3){c={width:_,height:x,samples:b};for(let v=0;v<o.length;v+=2)o[v]=a[v]/16-p+.5,o[v+1]=a[v+1]/16-y+.5}}e.push({vertices:new Float32Array(s),textureCoords:new Float32Array(a),lightmapCoords:new Float32Array(o),indices:new Uint16Array(d),texture:i.texture,surfaceFlags:i.flags,lightmap:c,faceIndex:r})}return e}function wu(t,e,r,n={}){let i=e;if(r&&n.hiddenClassnames&&n.hiddenClassnames.size>0){let c=new Set;for(let f of r.entities.entities)if(f.classname&&n.hiddenClassnames.has(f.classname)){let u=f.properties.model;if(u&&u.startsWith("*")){let h=parseInt(u.substring(1),10);if(!isNaN(h)&&h>=0&&h<r.models.length){let m=r.models[h];for(let g=0;g<m.numFaces;g++)c.add(m.firstFace+g)}}}c.size>0&&(i=e.filter(f=>!c.has(f.faceIndex)))}let s={atlasSize:n.atlasSize??1024,lightmapPadding:n.lightmapPadding??1,hiddenClassnames:n.hiddenClassnames??new Set},a=[],o=new Map;i.forEach((c,f)=>{if(!c.lightmap)return;let{placement:u,atlas:h}=Ym(a,c.lightmap,s);Zm(h,u,c.lightmap),o.set(f,{atlasIndex:u.atlasIndex,offset:[(u.x+s.lightmapPadding)/s.atlasSize,(u.y+s.lightmapPadding)/s.atlasSize],scale:[u.width/s.atlasSize,u.height/s.atlasSize]})});let d=a.map(c=>{let f=new Qn(t);return f.setParameters({wrapS:t.CLAMP_TO_EDGE,wrapT:t.CLAMP_TO_EDGE,minFilter:t.LINEAR,magFilter:t.LINEAR}),f.uploadImage(0,t.RGBA,c.width,c.height,0,t.RGBA,t.UNSIGNED_BYTE,c.data),{texture:f,width:c.width,height:c.height,pixels:c.data}});return{surfaces:i.map((c,f)=>{let u=o.get(f),h=Qm(c,u),m=qm(c.indices,h.length/7),g=new Ce(t,t.STATIC_DRAW,t.ARRAY_BUFFER);g.upload(h);let p=new _e(t,t.STATIC_DRAW);p.upload(m);let y=new Pe(t);return y.configureAttributes(Wl,g),{vao:y,vertexBuffer:g,indexBuffer:p,indexCount:m.length,vertexCount:h.length/7,texture:c.texture,surfaceFlags:c.surfaceFlags??xi,lightmap:u,vertexData:h,indexData:m}}),lightmaps:d}}function ei(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 i=1/n;return{normal:{x:e.x*i,y:e.y*i,z:e.z*i},distance:r*i}}function Su(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],i=t[12],s=t[1],a=t[5],o=t[9],d=t[13],l=t[2],c=t[6],f=t[10],u=t[14],h=t[3],m=t[7],g=t[11],p=t[15];return[ei({normal:{x:h+e,y:m+r,z:g+n},distance:p+i}),ei({normal:{x:h-e,y:m-r,z:g-n},distance:p-i}),ei({normal:{x:h+s,y:m+a,z:g+o},distance:p+d}),ei({normal:{x:h-s,y:m-a,z:g-o},distance:p-d}),ei({normal:{x:h+l,y:m+c,z:g+f},distance:p+u}),ei({normal:{x:h-l,y:m-c,z:g-f},distance:p-u})]}function Jm(t,e){return t.normal.x*e.x+t.normal.y*e.y+t.normal.z*e.z+t.distance}function Es(t,e,r){for(let n of r){let i=n.normal.x>=0?e.x:t.x,s=n.normal.y>=0?e.y:t.y,a=n.normal.z>=0?e.z:t.z;if(Jm(n,{x:i,y:s,z:a})<0)return!1}return!0}function Au(t){return t<0}function Mu(t){return-t-1}function Eu(t,e){return t.normal[0]*e.x+t.normal[1]*e.y+t.normal[2]*e.z-t.dist}function ep(t,e,r){if(!t||e<0||r<0)return!0;let n=Math.ceil(t.numClusters/8),i=t.clusters[e].pvs,s=Math.floor(r/8),a=1<<r%8;return s<0||s>=n?!1:(i[s]&a)!==0}function tp(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 Es(r,n,e)}function Kl(t,e){let r=0;for(;r>=0;){let n=t.nodes[r],i=t.planes[n.planeIndex],a=Eu(i,e)>=0?0:1,o=n.children[a];if(Au(o))return Mu(o);r=o}return-1}function rp(t,e){let r=t.leafs[e],n=[];for(let i=0;i<r.numLeafFaces;i+=1)n.push(t.leafLists.leafFaces[e][i]);return n}function Xl(t,e,r,n,i,s,a){if(Au(e)){let u=Mu(e),h=t.leafs[u];if(!ep(t.visibility,i,h.cluster)||!tp(h,n))return;let m={x:(h.mins[0]+h.maxs[0])*.5,y:(h.mins[1]+h.maxs[1])*.5,z:(h.mins[2]+h.maxs[2])*.5},g=m.x-r.x,p=m.y-r.y,y=m.z-r.z,_=-(g*g+p*p+y*y);for(let x of rp(t,u))a.has(x)||(a.add(x),s.push({faceIndex:x,leafIndex:u,sortKey:_}));return}let o=t.nodes[e],d=t.planes[o.planeIndex],l=Eu(d,r),c=l>=0?o.children[0]:o.children[1],f=l>=0?o.children[1]:o.children[0];Es({x:o.mins[0],y:o.mins[1],z:o.mins[2]},{x:o.maxs[0],y:o.maxs[1],z:o.maxs[2]},n)&&(Xl(t,c,r,n,i,s,a),Xl(t,f,r,n,i,s,a))}function Lu(t,e,r){let n=Kl(t,e),i=n>=0?t.leafs[n].cluster:-1,s=[];return Xl(t,0,e,r,i,s,new Set),s}var dr=32,fo=class{constructor(){this.lights=[]}addLight(e,r){if(e.key!==void 0){let n=this.lights.findIndex(i=>i.key===e.key);if(n!==-1){this.lights[n]=e;return}}this.lights.push(e)}clear(){this.lights=[]}update(e,r=0){if(this.lights=this.lights.filter(n=>n.die>e),r>0)for(let n of this.lights)n.radiusSpeed!==void 0&&n.radiusSpeed!==0&&(n.intensity+=n.radiusSpeed*r,n.intensity<0&&(n.intensity=0))}getActiveLights(){return this.lights}};function ti(t){let e=[];for(let r=0;r<t.length;r+=3){let n=t[r],i=t[r+1],s=t[r+2];e.push(n,i,i,s,s,n)}return t instanceof Uint32Array||Math.max(...e)>65535?new Uint32Array(e):new Uint16Array(e)}var $l=`#version 300 es
141
+ ïBçϧmÙIólÜoëVbƒ¦¯éWÇû3`});var Oh={a:Ur};this.setModule=P=>{t.setModule(Dt,P)},this.getModule=()=>t.getModule(Dt),this.instantiate=()=>(this.getModule().then(P=>WebAssembly.instantiate(P,Oh)).then(P=>{let Ve=P.exports;js(Ve),m=Ve.l,g(),Dh(Ve),r()}),this.ready=new Promise(P=>{r=P}).then(()=>{this.HEAP=m.buffer,this.malloc=qc,this.free=td,this.create_decoder=pi,this.send_setup=jc,this.init_dsp=Qc,this.decode_packets=Jc,this.destroy_decoder=ed}),this)}function an(){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 i=0;i<t.length;i++){let s=t[i];this._input.buf.set(s),this._inputLen.buf[0]=s.length,this._common.wasm.decode_packets(this._decoder);let a=this._samplesDecoded.buf[0],o=[],d=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 c=new Float32Array(a);a&&c.set(new Float32Array(this._common.wasm.HEAP,d[l],a)),o.push(c)}e.push(o),r+=a,this._frameNumber++,this._inputBytes+=s.length,this._outputSamples+=a;for(let l=0;l<this._errorsLength.buf;l+=2){let c=this._common.codeToString(this._errors.buf[l]),f=this._common.codeToString(this._errors.buf[l+1]);n.push({message:c+" vorbis_synthesis"+f,frameLength:s.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=an.isWebWorker,this._WASMAudioDecoderCommon=an.WASMAudioDecoderCommon||re,this._EmscriptenWASM=an.EmscriptenWASM||Dt,this._module=an.module,this._inputSize=128*1024,this._ready=this._init(),this}var qa=Symbol(),Ot=class{constructor(){this._onCodec=e=>{if(e!=="vorbis")throw new Error("@wasm-audio-decoders/ogg-vorbis does not support this codec "+e)},new re,this._init(),this._ready=this[qa](an)}_init(){this._vorbisSetupInProgress=!0,this._totalSamplesDecoded=0,this._codecParser=new du("audio/ogg",{onCodec:this._onCodec,enableFrameCRC32:!1})}async[qa](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 s=0;s<e.length;s++){let a=e[s];if(this._vorbisSetupInProgress&&(a[Ya][0]===1&&this._decoder.sendSetupHeader(a[Ya]),a[Za].length)){let o=a[Za][0][uu];this._decoder.sendSetupHeader(o[hu]),this._decoder.initDsp(),this._vorbisSetupInProgress=!1}r.push(...a[Za].map(o=>o[Ya]))}let n=await this._decoder.decodePackets(r);this._totalSamplesDecoded+=n.samplesDecoded;let i=e[e.length-1];if(i&&i[fu]){let s=this._totalSamplesDecoded-i[mu];if(s>0){for(let a=0;a<n.channelData.length;a++)n.channelData[a]=n.channelData[a].subarray(0,n.samplesDecoded-s);n.samplesDecoded-=s,this._totalSamplesDecoded-=s}}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 zl=class extends Fn{constructor(e){super(e,"ogg-vorbis-decoder",an,Dt)}async sendSetupHeader(e){return this.postToDecoder("sendSetupHeader",e)}async initDsp(){return this.postToDecoder("initDsp")}async decodePackets(e){return this.postToDecoder("decodePackets",e)}},xs=class extends Ot{constructor(){super(),this._ready=super[qa](zl)}async free(){await this._decoder.free()}terminate(){this._decoder.terminate()}};va(Ot,"OggVorbisDecoder");va(xs,"OggVorbisDecoderWebWorker");var Nl=class extends Error{constructor(e){super(e),this.name="OggDecodeError"}};async function ja(t,e=new Ot){await e.ready;let r=await e.decode(new Uint8Array(t)),n=r.errors;if(n&&n.length>0)throw new Nl(n.map(i=>i.message).join("; "));return{sampleRate:r.sampleRate,channels:r.channelData.length,bitDepth:r.bitDepth,channelData:r.channelData}}var _s=class extends Error{constructor(e){super(e),this.name="AudioRegistryError"}},jn=class{constructor(e,r={}){this.vfs=e;this.refCounts=new Map;this.cache=new Kt(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 s=(await this.vfs.readFile(e)).slice().buffer,a=await this.decodeByExtension(e,s);return this.cache.set(r,a),this.refCounts.set(r,1),a}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 i=_a(r),s=i.channels,a=Array.from({length:s},()=>new Float32Array(i.samples.length/s));for(let o=0;o<i.samples.length;o+=1)a[o%s][Math.floor(o/s)]=i.samples[o];return{sampleRate:i.sampleRate,channels:s,bitDepth:i.bitsPerSample,channelData:a}}if(n.endsWith(".ogg")||n.endsWith(".oga"))return ja(r);throw new _s(`Unsupported audio format: ${e}`)}};var zm="quake2ts-pak-indexes",Nm="pak-indexes";function pu(){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 vs(t,e){let r=pu();return r?new Promise((n,i)=>{let s=r.open(t,1);s.onupgradeneeded=()=>{let{result:a}=s;a.objectStoreNames.contains(e)||a.createObjectStore(e,{keyPath:"key"})},s.onerror=()=>i(s.error??new Error("Unknown IndexedDB error")),s.onsuccess=()=>n(s.result)}):Promise.reject(new Error("IndexedDB is not available in this environment"))}function ws(t,e,r,n){return new Promise((i,s)=>{let o=t.transaction(e,r).objectStore(e),d=n(o);d.onsuccess=()=>i(d.result),d.onerror=()=>s(d.error??new Error("IndexedDB transaction error"))})}function Ul(t,e){return`${ae(t)}:${e.toString(16)}`}function Um(t){return t.map(e=>({...e}))}var Qa=class{constructor(e=zm,r=Nm){this.dbName=e;this.storeName=r}get isSupported(){return!!pu()}async persist(e){if(!this.isSupported)return;let r=e.validate(),n={...r,key:Ul(e.name,r.checksum),name:e.name,size:e.size,persistedAt:Date.now(),entries:Um(r.entries)},i=await vs(this.dbName,this.storeName);return await ws(i,this.storeName,"readwrite",s=>s.put(n)),i.close(),n}async find(e,r){if(!this.isSupported)return;let n=await vs(this.dbName,this.storeName),i=r!==void 0?Ul(e,r):void 0,s=await ws(n,this.storeName,"readonly",a=>i?a.get(i):a.getAll());if(n.close(),!!s){if(Array.isArray(s)){let a=ae(e),o=s.filter(d=>ae(d.name)===a);return o.length===0?void 0:o.sort((d,l)=>l.persistedAt-d.persistedAt)[0]}return s}}async remove(e,r){if(!this.isSupported)return!1;let n=await vs(this.dbName,this.storeName),i=r!==void 0?Ul(e,r):void 0,s=await ws(n,this.storeName,"readwrite",a=>{if(i)return a.delete(i);let o=`${ae(e)}:`;return a.delete(IDBKeyRange.bound(o,`${o}\uFFFF`,!1,!0))});return n.close(),typeof s=="number"?s>0:!0}async clear(){if(!this.isSupported)return;let e=await vs(this.dbName,this.storeName);await ws(e,this.storeName,"readwrite",r=>r.clear()),e.close()}async list(){if(!this.isSupported)return[];let e=await vs(this.dbName,this.storeName),r=await ws(e,this.storeName,"readonly",n=>n.getAll());return e.close(),r.sort((n,i)=>i.persistedAt-n.persistedAt)}};var on=class extends Error{constructor(r,n){super(n??`Missing dependencies: ${r.join(", ")}`);this.missing=r;this.name="AssetDependencyError"}},Ss=class{constructor(){this.nodes=new Map}register(e,r=[]){let n=this.nodes.get(e)??{dependencies:new Set,loaded:!1};r.forEach(i=>n.dependencies.add(i)),this.nodes.set(e,n),r.forEach(i=>{this.nodes.has(i)||this.nodes.set(i,{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 on(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 i of r.dependencies)this.nodes.get(i)?.loaded||n.push(i);return n}},Ja=class{constructor(e,r={}){this.vfs=e;this.maps=new Map;this.loadQueue=[];this.activeLoads=0;this.textures=new Pn({capacity:r.textureCacheCapacity??128,maxMemory:r.textureMemoryLimit}),this.audio=new jn(e,{cacheSize:r.audioCacheSize??64}),this.dependencyTracker=r.dependencyTracker??new Ss,this.resourceTracker=r.resourceTracker,this.md2=new In(e),this.md3=new kn(e),this.sprite=new Rn(e),this.bsp=new Cn(e),this.maxConcurrentLoads=r.maxConcurrentLoads??4,this.palette=new Uint8Array(768);for(let n=0;n<256;n++)this.palette[n*3]=n,this.palette[n*3+1]=n,this.palette[n*3+2]=n}async loadPalette(e="pics/colormap.pcx"){try{let r=await this.vfs.readFile(e),n=Ti(r);n.palette&&(this.palette=n.palette)}catch(r){console.warn(`Failed to load palette from ${e}:`,r)}}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 loadTexture(e){if(this.resourceTracker){let a=this.vfs.stat(e);this.resourceTracker.recordLoad("texture",e,a?.size,a?.sourcePak)}let r=this.textures.get(e);if(r)return r;let n=await this.vfs.readFile(e),i=e.split(".").pop()?.toLowerCase(),s;if(i==="wal")s=xa(n,this.palette);else if(i==="pcx")s=ba(Ti(n));else if(i==="tga")s=Nd(bl(n));else throw new Error(`Unsupported texture format for loadTexture: ${i}`);return this.registerTexture(e,s),s}async loadSound(e){if(this.resourceTracker){let i=this.vfs.stat(e);this.resourceTracker.recordLoad("sound",e,i?.size,i?.sourcePak)}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=[]){if(this.resourceTracker){let o=this.vfs.stat(e);this.resourceTracker.recordLoad("model",e,o?.size,o?.sourcePak)}let n=this.makeKey("model",e),i=r.map(o=>this.makeKey("texture",o));this.dependencyTracker.register(n,i);let s=this.dependencyTracker.missingDependencies(n);if(s.length>0)throw new on(s,`Asset ${n} is missing dependencies: ${s.join(", ")}`);let a=await this.md2.load(e);return this.dependencyTracker.markLoaded(n),a}getMd2Model(e){if(this.resourceTracker){let r=this.vfs.stat(e);this.resourceTracker.recordLoad("model",e,r?.size,r?.sourcePak)}return this.md2.get(e)}async loadMd3Model(e,r=[]){if(this.resourceTracker){let o=this.vfs.stat(e);this.resourceTracker.recordLoad("model",e,o?.size,o?.sourcePak)}let n=this.makeKey("model",e),i=r.map(o=>this.makeKey("texture",o));this.dependencyTracker.register(n,i);let s=this.dependencyTracker.missingDependencies(n);if(s.length>0)throw new on(s,`Asset ${n} is missing dependencies: ${s.join(", ")}`);let a=await this.md3.load(e);return this.dependencyTracker.markLoaded(n),a}getMd3Model(e){if(this.resourceTracker){let r=this.vfs.stat(e);this.resourceTracker.recordLoad("model",e,r?.size,r?.sourcePak)}return this.md3.get(e)}async loadSprite(e){if(this.resourceTracker){let i=this.vfs.stat(e);this.resourceTracker.recordLoad("sprite",e,i?.size,i?.sourcePak)}let r=this.makeKey("sprite",e);this.dependencyTracker.register(r);let n=await this.sprite.load(e);return this.dependencyTracker.markLoaded(r),n}async loadMap(e){if(this.resourceTracker){let i=this.vfs.stat(e);this.resourceTracker.recordLoad("map",e,i?.size,i?.sourcePak)}let r=this.makeKey("map",e);if(this.maps.has(e))return this.maps.get(e);this.dependencyTracker.register(r);let n=await this.bsp.load(e);return this.maps.set(e,n),this.dependencyTracker.markLoaded(r),n}getMap(e){return this.maps.get(e)}listFiles(e){return this.vfs.findByExtension(e)}resetForLevelChange(){this.textures.clear(),this.audio.clearAll(),this.dependencyTracker.reset(),this.maps.clear(),this.loadQueue.length=0}getMemoryUsage(){let e=0,r=0;if(typeof process<"u"&&process.memoryUsage){let n=process.memoryUsage();e=n.heapTotal,r=n.heapUsed}return{textures:this.textures.memoryUsage,audio:0,heapTotal:e,heapUsed:r}}clearCache(e){switch(e){case"texture":this.textures.clear();break;case"sound":this.audio.clearAll();break;case"map":this.maps.clear();break}}async preloadAssets(e){let r=e.map(n=>{let i=this.detectAssetType(n);return i?this.queueLoad(n,i,0):Promise.resolve()});await Promise.all(r)}queueLoad(e,r,n=1){return r==="texture"&&this.textures.get(e)?Promise.resolve(this.textures.get(e)):new Promise((i,s)=>{this.loadQueue.push({path:e,type:r,priority:n,resolve:i,reject:s}),this.loadQueue.sort((a,o)=>o.priority-a.priority),this.processQueue()})}async processQueue(){if(this.activeLoads>=this.maxConcurrentLoads||this.loadQueue.length===0)return;let e=this.loadQueue.shift();this.activeLoads++;try{let r;switch(e.type){case"texture":r=await this.loadTexture(e.path);break;case"sound":r=await this.loadSound(e.path);break;case"model":e.path.endsWith(".md2")?r=await this.loadMd2Model(e.path):e.path.endsWith(".md3")&&(r=await this.loadMd3Model(e.path));break;case"sprite":r=await this.loadSprite(e.path);break;case"map":r=await this.loadMap(e.path);break;default:throw new Error(`Unknown asset type ${e.type}`)}e.resolve(r)}catch(r){e.reject(r)}finally{this.activeLoads--,this.processQueue()}}detectAssetType(e){let r=e.split(".").pop()?.toLowerCase();return r?["wal","pcx","tga","png","jpg"].includes(r)?"texture":["wav","ogg"].includes(r)?"sound":["md2","md3"].includes(r)?"model":["sp2"].includes(r)?"sprite":["bsp"].includes(r)?"map":null:null}makeKey(e,r){return`${e}:${ae(r)}`}};var eo=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 to(t){let e=t.getContext(),r=e.createGain();r.gain.value=1;let n=e.createDynamicsCompressor(),i=e.createBiquadFilter?.(),s;if(e.createConvolver&&e.createGain){let a=e.createConvolver(),o=e.createGain(),d=e.createGain();o.connect(a),a.connect(d),s={convolver:a,input:o,output:d}}return i?(i.type="lowpass",i.frequency.value=2e4,i.Q.value=.707,r.connect(i),i.connect(n),s&&s.output.connect(i)):(r.connect(n),s&&s.output.connect(n)),n.connect(e.destination),{context:e,master:r,compressor:n,filter:i,reverb:s}}var ro=class{constructor(e=new En){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)}getName(e){return this.configStrings.getName(e)}};var no=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(s=>this.normalize(s)))],n={loaded:[],skipped:[],missing:[],errors:{}},i=this.contextController.getContext();for(let s of r)try{let a=this.registry.find(s);if(a!==void 0&&this.registry.has(a)){n.skipped.push(s);continue}if(!this.vfs.stat(s)){n.missing.push(s);continue}let l=(await this.vfs.readFile(s)).slice().buffer,c=await this.decodeAudio(i,l);this.registry.register(s,c),n.loaded.push(s)}catch(a){let o=a instanceof Error?a:new Error(String(a));n.errors[s]=o}return n}normalize(e){let r=ae(e.replace(/^\//,""));return r.startsWith(this.soundRoot)?r:ae(`${this.soundRoot}${r}`)}};var Hm=7,As=t=>t&Hm;function io(t){return Array.from({length:_i},()=>({entnum:0,entchannel:at.Auto,endTimeMs:0,isPlayer:!1,active:!1})).map(e=>({...e,isPlayer:e.entnum===t}))}function so(t,e,r,n){if(r<0)throw new Error("pickChannel: entchannel must be non-negative");let i=As(r),s=-1,a=Number.POSITIVE_INFINITY;for(let o=0;o<t.length;o+=1){let d=t[o],l=As(d.entchannel);if(i!==at.Auto&&d.entnum===e&&l===i){s=o;break}if(d.active&&d.entnum===n.playerEntity&&e!==n.playerEntity)continue;let c=d.endTimeMs-n.nowMs;(s===-1||c<a)&&(a=c,s=o)}return s===-1?void 0:s}var ao=class{constructor(e){this.activePreset=null;this.enabled=!0;this.node=e,this.node.input.gain.value=.5,this.node.output.gain.value=1}setPreset(e){this.activePreset=e,this.node.convolver.buffer!==(e?.buffer??null)&&(this.node.convolver.buffer=e?.buffer??null),e&&e.gain!==void 0?this.node.output.gain.value=e.gain:this.node.output.gain.value=1}setEnabled(e){this.enabled=e,e?this.node.input.gain.value=.5:this.node.input.gain.value=0}getOutputNode(){return this.node.output}getInputNode(){return this.node.input}};var oo=class{constructor(e){this.activeSources=new Map;this.playbackRate=1;this.contextController=e.context,this.registry=e.registry,this.playerEntity=e.playerEntity,this.channels=io(e.playerEntity),this.listener=e.listener??{origin:id,right:{x:1,y:0,z:0}},this.sfxVolume=e.sfxVolume??1,this.masterVolume=e.masterVolume??1,this.resolveOcclusion=e.resolveOcclusion,this.graph=to(this.contextController),this.graph.master.gain.value=this.masterVolume,this.graph.reverb&&(this.reverb=new ao(this.graph.reverb))}setListener(e){this.listener=e}setMasterVolume(e){this.masterVolume=e,this.graph.master.gain.value=e}setSfxVolume(e){this.sfxVolume=e}setPlaybackRate(e){this.playbackRate=e;for(let r of this.activeSources.values())r.source.playbackRate&&(r.source.playbackRate.value=e),this.updateSourceGain(r)}async ensureRunning(){await this.contextController.resume()}setReverbPreset(e){this.reverb?.setPreset(e)}play(e){let r=this.registry.get(e.soundIndex);if(!r)return;let n=this.graph.context,i=n.currentTime*1e3,s=so(this.channels,e.entity,e.channel,{nowMs:i,playerEntity:this.playerEntity});if(s===void 0)return;let a=this.activeSources.get(s);a&&(a.source.onended=null,a.source.stop(),this.activeSources.delete(s));let o=n.createBufferSource();o.buffer=r,o.loop=e.looping??!1,o.playbackRate&&(o.playbackRate.value=this.playbackRate);let d=e.origin??this.listener.origin,l=n.createGain(),c=this.createPanner(n,e.attenuation),f=this.resolveOcclusion?.(this.listener,d,e.attenuation),u=gu(f?.gainScale??1),h=this.resolveOcclusion?this.createOcclusionFilter(n,f?.lowpassHz??2e4):void 0;this.applyOriginToPanner(c,d);let g=e.volume/255*this.sfxVolume,p=Math.abs(this.playbackRate-1)<.001?1:0;l.gain.value=g*u*p;let y=n.currentTime+(e.timeOffsetMs??0)/1e3,_=(e.looping?Number.POSITIVE_INFINITY:r.duration*1e3)+y*1e3;o.connect(c);let x=c;h?(c.connect(h),h.connect(l),x=l):(c.connect(l),x=l),l.connect(this.graph.master),this.reverb&&l.connect(this.reverb.getInputNode()),o.start(y),o.onended=()=>{this.channels[s].active=!1,this.activeSources.delete(s)};let b={channelIndex:s,entnum:e.entity,entchannel:As(e.channel),endTimeMs:_,source:o,panner:c,gain:l,baseGain:g,origin:d,attenuation:e.attenuation,occlusion:h?{scale:u,lowpassHz:f?.lowpassHz,filter:h}:f?{scale:u,lowpassHz:f.lowpassHz}:void 0};return this.channels[s]={entnum:e.entity,entchannel:As(e.channel),endTimeMs:_,isPlayer:e.entity===this.playerEntity,active:!0},this.activeSources.set(s,b),b}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 i=this.resolveOcclusion(this.listener,r,n.attenuation);this.applyOcclusion(n,i)}}positionedSound(e,r,n,i){return this.play({entity:0,channel:at.Auto,soundIndex:r,volume:n,attenuation:i,origin:e})}ambientSound(e,r,n){return this.play({entity:0,channel:at.Auto,soundIndex:r,volume:n,attenuation:vi,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=Sn(r);return e.refDistance=wn,e.maxDistance=Gr(r),e.rolloffFactor=n,e.distanceModel="linear",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=Hl(r,10,2e4),n}updateSourceGain(e){let r=e.occlusion?.scale??1,n=Math.abs(this.playbackRate-1)<.001?1:0;e.gain.gain.value=e.baseGain*r*n}applyOcclusion(e,r){let n=gu(r?.gainScale??1),i=Math.abs(this.playbackRate-1)<.001?1:0;if(e.gain.gain.value=e.baseGain*n*i,e.occlusion?.filter){let s=r?.lowpassHz??2e4;e.occlusion.filter.frequency.value=Hl(s,10,2e4)}e.occlusion?(e.occlusion.scale=n,e.occlusion.lowpassHz=r?.lowpassHz):r&&(e.occlusion={scale:n,lowpassHz:r.lowpassHz})}},Hl=(t,e,r)=>Math.min(r,Math.max(e,t)),gu=t=>Hl(t,0,1);var Ms=class{constructor(e){this.trace=e;this.resolve=(e,r,n)=>{let i=Yo(sd(r,e.origin)),s=Gr(n),d=2e4*(1-Math.min(i,s)/Math.max(1,s)*.9),l=this.trace(e.origin,r,void 0,void 0),c=1,f=2e4;l.fraction<1&&(c=.3,f=400);let u=Math.min(d,f);if(c<1||u<2e4)return{gainScale:c,lowpassHz:u}}}};function yu(t){return new Ms(t).resolve}var lo=class{constructor(e){this.createElement=e.createElement,this.resolveSource=e.resolveSource??(async r=>r),this.volume=e.volume??1,this.crossfadeDuration=e.crossfadeDuration??1}async playTrack(e){let r=`music/track${e.toString().padStart(2,"0")}.ogg`;return this.play(r)}async play(e,{loop:r=!0,restart:n=!1}={}){if(this.track===e&&this.currentElement){this.currentElement.loop=r,this.cancelFade(),this.fadingElement&&(this.fadingElement.pause(),this.fadingElement=void 0),this.currentElement.volume=this.volume,n&&(this.currentElement.currentTime=0),(this.currentElement.paused||n)&&await this.currentElement.play();return}let i=await this.resolveSource(e);this.cancelFade(),this.fadingElement&&(this.fadingElement.pause(),this.fadingElement=void 0),this.currentElement&&(this.fadingElement=this.currentElement,this.currentElement=void 0);let s=this.createElement();s.src=i,s.loop=r,s.volume=0,s.currentTime=0,s.load();try{await s.play()}catch(a){console.warn(`MusicSystem: Failed to play ${e}`,a),this.fadingElement}this.currentElement=s,this.track=e,this.startCrossfade()}pause(){this.cancelFade(),this.currentElement&&!this.currentElement.paused&&this.currentElement.pause(),this.fadingElement&&(this.fadingElement.pause(),this.fadingElement=void 0)}async resume(){!this.currentElement||!this.currentElement.paused||(await this.currentElement.play(),this.currentElement.volume=this.volume)}stop(){this.cancelFade(),this.currentElement&&(this.currentElement.pause(),this.currentElement.currentTime=0,this.currentElement=void 0),this.fadingElement&&(this.fadingElement.pause(),this.fadingElement=void 0),this.track=void 0}setVolume(e){this.volume=e,this.currentElement&&!this.fadeInterval&&(this.currentElement.volume=e)}getState(){let e=!!(this.currentElement&&!this.currentElement.paused&&!this.currentElement.ended),r=!!this.currentElement?.paused;return{track:this.track,paused:r,playing:e,volume:this.volume}}startCrossfade(){let r=this.crossfadeDuration*1e3/50,n=this.volume/r,i=0,s=this.fadingElement?this.fadingElement.volume:0,a=()=>{let o=!1;this.currentElement&&(i=Math.min(this.volume,i+n),this.currentElement.volume=i,i<this.volume&&(o=!0)),this.fadingElement&&(s=Math.max(0,s-n),this.fadingElement.volume=s,s>0?o=!0:(this.fadingElement.pause(),this.fadingElement=void 0)),o||this.cancelFade()};a(),(this.currentElement&&this.currentElement.volume<this.volume||this.fadingElement)&&(this.fadeInterval=setInterval(a,50))}cancelFade(){this.fadeInterval&&(clearInterval(this.fadeInterval),this.fadeInterval=void 0)}};function Vm(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 Gm(t,e,r,n){for(let i of e){let s=t.getExtension(i);if(!s)throw new Error(`Missing required WebGL extension: ${i}`);n.set(i,s)}for(let i of r){let s=t.getExtension(i);s&&n.set(i,s)}}function bu(t,e={}){let{contextAttributes:r,requiredExtensions:n=[],optionalExtensions:i=[]}=e,s=t.getContext("webgl2",r??{antialias:!0});if(!s)throw new Error("WebGL2 not supported or failed to initialize");Vm(s);let a=new Map;Gm(s,n,i,a);let o=!1,d=new Set,l=new Set,c=u=>{o=!0,u.preventDefault();for(let h of d)h()},f=()=>{o=!1;for(let u of l)u()};return t.addEventListener("webglcontextlost",c),t.addEventListener("webglcontextrestored",f),{gl:s,extensions:a,isLost:()=>o,onLost(u){return d.add(u),()=>d.delete(u)},onRestored(u){return l.add(u),()=>l.delete(u)},dispose(){t.removeEventListener("webglcontextlost",c),t.removeEventListener("webglcontextrestored",f),d.clear(),l.clear(),a.clear()}}}function xu(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 s=t.getShaderInfoLog(n)??"Unknown shader compile failure";throw t.deleteShader(n),new Error(s)}return n}function Wm(t,e,r,n){let i=t.createProgram();if(!i)throw new Error("Failed to allocate shader program");if(t.attachShader(i,e),t.attachShader(i,r),n)for(let[a,o]of Object.entries(n))t.bindAttribLocation(i,o,a);if(t.linkProgram(i),!t.getProgramParameter(i,t.LINK_STATUS)){let a=t.getProgramInfoLog(i)??"Unknown shader link failure";throw t.deleteProgram(i),new Error(a)}return i}var Te=class t{constructor(e,r,n){this.uniformLocations=new Map;this.attributeLocations=new Map;this.gl=e,this.program=r,this.sourceSize=n}static create(e,r,n){let i=xu(e,e.VERTEX_SHADER,r.vertex),s=xu(e,e.FRAGMENT_SHADER,r.fragment);try{let a=Wm(e,i,s,n),o=r.vertex.length+r.fragment.length;return new t(e,a,o)}finally{e.deleteShader(i),e.deleteShader(s)}}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 _u(t,e,r){return Te.create(t,e,r)}var Ce=class{constructor(e,r=e.STATIC_DRAW,n){this.gl=e,this.target=n??e.ARRAY_BUFFER;let i=e.createBuffer();if(!i)throw new Error("Failed to allocate buffer");this.buffer=i,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)}},_e=class extends Ce{constructor(e,r=e.STATIC_DRAW){super(e,r,e.ELEMENT_ARRAY_BUFFER)}},Pe=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)}},Qn=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,i,s,a,o,d){this.bind(),this.gl.texImage2D(this.target,e,r,n,i,s,a,o,d)}dispose(){this.gl.deleteTexture(this.texture)}},Jn=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,i,s,a,o,d,l){this.bind(),this.gl.texImage2D(e,r,n,i,s,a,o,d,l)}dispose(){this.gl.deleteTexture(this.texture)}},co=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 Gl=4,Vl=7*Gl,Wl=[{index:0,size:3,type:5126,stride:Vl,offset:0},{index:1,size:2,type:5126,stride:Vl,offset:3*Gl},{index:2,size:2,type:5126,stride:Vl,offset:5*Gl}];function Xm(t,e){return{width:t,height:t,padding:e,data:new Uint8Array(t*t*4),cursorX:0,cursorY:0,rowHeight:0}}function Km(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 $m(t,e,r){let n=Km(r),i=t.width*4,s=e.x+t.padding,a=e.y+t.padding,o=0;for(let d=0;d<r.height;d++){let l=(a+d)*i+s*4;for(let c=0;c<r.width;c++){let f=l+c*4;t.data[f]=r.samples[o],t.data[f+1]=r.samples[o+1],t.data[f+2]=r.samples[o+2],t.data[f+3]=n===4?r.samples[o+3]:255,o+=n}}}function Zm(t,e,r){let n=e.width+r.lightmapPadding*2,i=e.height+r.lightmapPadding*2;if(n>r.atlasSize||i>r.atlasSize)throw new Error("Lightmap too large for atlas");for(let o of t){if(o.cursorX+n>o.width&&(o.cursorX=0,o.cursorY+=o.rowHeight+r.lightmapPadding,o.rowHeight=0),o.cursorY+i>o.height)continue;let d={atlasIndex:t.indexOf(o),x:o.cursorX,y:o.cursorY,width:e.width,height:e.height};return o.cursorX+=n+r.lightmapPadding,o.rowHeight=Math.max(o.rowHeight,i),{placement:d,atlas:o}}let s=Xm(r.atlasSize,r.lightmapPadding);t.push(s);let a={atlasIndex:t.length-1,x:0,y:0,width:e.width,height:e.height};return s.cursorX=n+r.lightmapPadding,s.rowHeight=i,{placement:a,atlas:s}}function uo(t){return t instanceof Float32Array?t:new Float32Array(t)}function Ym(t,e){if(!t){let n=new Uint16Array(e);for(let i=0;i<e;i++)n[i]=i;return n}return t instanceof Uint16Array?t:new Uint16Array(t)}function qm(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 jm(t,e){let r=uo(t.vertices),n=uo(t.textureCoords),i=e?qm(uo(t.lightmapCoords??t.textureCoords),e):uo(t.lightmapCoords??new Float32Array(n.length)),s=r.length/3;if(n.length/2!==s)throw new Error("Texture coordinates count mismatch");if(i.length/2!==s)throw new Error("Lightmap coordinates count mismatch");let a=new Float32Array(s*7);for(let o=0;o<s;o++){let d=o*3,l=o*2,c=o*7;a[c]=r[d],a[c+1]=r[d+1],a[c+2]=r[d+2],a[c+3]=n[l],a[c+4]=n[l+1],a[c+5]=i[l],a[c+6]=i[l+1]}return a}function vu(t){let e=[];for(let r=0;r<t.faces.length;r++){let n=t.faces[r];if(n.texInfo<0)continue;let i=t.texInfo[n.texInfo],s=[],a=[],o=[];for(let u=0;u<n.numEdges;u++){let h=t.surfEdges[n.firstEdge+u],m=t.edges[Math.abs(h)],g=h>=0?m.vertices[0]:m.vertices[1],p=t.vertices[g];s.push(p[0],p[1],p[2]);let y=p[0]*i.s[0]+p[1]*i.s[1]+p[2]*i.s[2]+i.sOffset,_=p[0]*i.t[0]+p[1]*i.t[1]+p[2]*i.t[2]+i.tOffset;a.push(y,_),o.push(y,_)}let d=[],l=s.length/3;for(let u=1;u<l-1;u++)d.push(0,u,u+1);let c,f=t.lightMapInfo[r];if(f){let u=1/0,h=-1/0,m=1/0,g=-1/0;for(let v=0;v<a.length;v+=2){let S=a[v],w=a[v+1];S<u&&(u=S),S>h&&(h=S),w<m&&(m=w),w>g&&(g=w)}let p=Math.floor(u/16),y=Math.floor(m/16),_=Math.ceil(h/16)-p+1,x=Math.ceil(g/16)-y+1,b=ma(n,t.lightMaps,f);if(b&&b.length===_*x*3){c={width:_,height:x,samples:b};for(let v=0;v<o.length;v+=2)o[v]=a[v]/16-p+.5,o[v+1]=a[v+1]/16-y+.5}}e.push({vertices:new Float32Array(s),textureCoords:new Float32Array(a),lightmapCoords:new Float32Array(o),indices:new Uint16Array(d),texture:i.texture,surfaceFlags:i.flags,lightmap:c,faceIndex:r})}return e}function wu(t,e,r,n={}){let i=e;if(r&&n.hiddenClassnames&&n.hiddenClassnames.size>0){let c=new Set;for(let f of r.entities.entities)if(f.classname&&n.hiddenClassnames.has(f.classname)){let u=f.properties.model;if(u&&u.startsWith("*")){let h=parseInt(u.substring(1),10);if(!isNaN(h)&&h>=0&&h<r.models.length){let m=r.models[h];for(let g=0;g<m.numFaces;g++)c.add(m.firstFace+g)}}}c.size>0&&(i=e.filter(f=>!c.has(f.faceIndex)))}let s={atlasSize:n.atlasSize??1024,lightmapPadding:n.lightmapPadding??1,hiddenClassnames:n.hiddenClassnames??new Set},a=[],o=new Map;i.forEach((c,f)=>{if(!c.lightmap)return;let{placement:u,atlas:h}=Zm(a,c.lightmap,s);$m(h,u,c.lightmap),o.set(f,{atlasIndex:u.atlasIndex,offset:[(u.x+s.lightmapPadding)/s.atlasSize,(u.y+s.lightmapPadding)/s.atlasSize],scale:[u.width/s.atlasSize,u.height/s.atlasSize]})});let d=a.map(c=>{let f=new Qn(t);return f.setParameters({wrapS:t.CLAMP_TO_EDGE,wrapT:t.CLAMP_TO_EDGE,minFilter:t.LINEAR,magFilter:t.LINEAR}),f.uploadImage(0,t.RGBA,c.width,c.height,0,t.RGBA,t.UNSIGNED_BYTE,c.data),{texture:f,width:c.width,height:c.height,pixels:c.data}});return{surfaces:i.map((c,f)=>{let u=o.get(f),h=jm(c,u),m=Ym(c.indices,h.length/7),g=new Ce(t,t.STATIC_DRAW,t.ARRAY_BUFFER);g.upload(h);let p=new _e(t,t.STATIC_DRAW);p.upload(m);let y=new Pe(t);return y.configureAttributes(Wl,g),{vao:y,vertexBuffer:g,indexBuffer:p,indexCount:m.length,vertexCount:h.length/7,texture:c.texture,surfaceFlags:c.surfaceFlags??xi,lightmap:u,vertexData:h,indexData:m}}),lightmaps:d}}function ei(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 i=1/n;return{normal:{x:e.x*i,y:e.y*i,z:e.z*i},distance:r*i}}function Su(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],i=t[12],s=t[1],a=t[5],o=t[9],d=t[13],l=t[2],c=t[6],f=t[10],u=t[14],h=t[3],m=t[7],g=t[11],p=t[15];return[ei({normal:{x:h+e,y:m+r,z:g+n},distance:p+i}),ei({normal:{x:h-e,y:m-r,z:g-n},distance:p-i}),ei({normal:{x:h+s,y:m+a,z:g+o},distance:p+d}),ei({normal:{x:h-s,y:m-a,z:g-o},distance:p-d}),ei({normal:{x:h+l,y:m+c,z:g+f},distance:p+u}),ei({normal:{x:h-l,y:m-c,z:g-f},distance:p-u})]}function Qm(t,e){return t.normal.x*e.x+t.normal.y*e.y+t.normal.z*e.z+t.distance}function Es(t,e,r){for(let n of r){let i=n.normal.x>=0?e.x:t.x,s=n.normal.y>=0?e.y:t.y,a=n.normal.z>=0?e.z:t.z;if(Qm(n,{x:i,y:s,z:a})<0)return!1}return!0}function Au(t){return t<0}function Mu(t){return-t-1}function Eu(t,e){return t.normal[0]*e.x+t.normal[1]*e.y+t.normal[2]*e.z-t.dist}function Jm(t,e,r){if(!t||e<0||r<0)return!0;let n=Math.ceil(t.numClusters/8),i=t.clusters[e].pvs,s=Math.floor(r/8),a=1<<r%8;return s<0||s>=n?!1:(i[s]&a)!==0}function ep(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 Es(r,n,e)}function Kl(t,e){let r=0;for(;r>=0;){let n=t.nodes[r],i=t.planes[n.planeIndex],a=Eu(i,e)>=0?0:1,o=n.children[a];if(Au(o))return Mu(o);r=o}return-1}function tp(t,e){let r=t.leafs[e],n=[];for(let i=0;i<r.numLeafFaces;i+=1)n.push(t.leafLists.leafFaces[e][i]);return n}function Xl(t,e,r,n,i,s,a){if(Au(e)){let u=Mu(e),h=t.leafs[u];if(!Jm(t.visibility,i,h.cluster)||!ep(h,n))return;let m={x:(h.mins[0]+h.maxs[0])*.5,y:(h.mins[1]+h.maxs[1])*.5,z:(h.mins[2]+h.maxs[2])*.5},g=m.x-r.x,p=m.y-r.y,y=m.z-r.z,_=-(g*g+p*p+y*y);for(let x of tp(t,u))a.has(x)||(a.add(x),s.push({faceIndex:x,leafIndex:u,sortKey:_}));return}let o=t.nodes[e],d=t.planes[o.planeIndex],l=Eu(d,r),c=l>=0?o.children[0]:o.children[1],f=l>=0?o.children[1]:o.children[0];Es({x:o.mins[0],y:o.mins[1],z:o.mins[2]},{x:o.maxs[0],y:o.maxs[1],z:o.maxs[2]},n)&&(Xl(t,c,r,n,i,s,a),Xl(t,f,r,n,i,s,a))}function Lu(t,e,r){let n=Kl(t,e),i=n>=0?t.leafs[n].cluster:-1,s=[];return Xl(t,0,e,r,i,s,new Set),s}var ur=32,fo=class{constructor(){this.lights=[]}addLight(e,r){if(e.key!==void 0){let n=this.lights.findIndex(i=>i.key===e.key);if(n!==-1){this.lights[n]=e;return}}this.lights.push(e)}clear(){this.lights=[]}update(e,r=0){if(this.lights=this.lights.filter(n=>n.die>e),r>0)for(let n of this.lights)n.radiusSpeed!==void 0&&n.radiusSpeed!==0&&(n.intensity+=n.radiusSpeed*r,n.intensity<0&&(n.intensity=0))}getActiveLights(){return this.lights}};function ti(t){let e=[];for(let r=0;r<t.length;r+=3){let n=t[r],i=t[r+1],s=t[r+2];e.push(n,i,i,s,s,n)}return t instanceof Uint32Array||Math.max(...e)>65535?new Uint32Array(e):new Uint16Array(e)}var $l=`#version 300 es
142
142
  precision highp float;
143
143
 
144
144
  layout(location = 0) in vec3 a_position;
@@ -198,7 +198,7 @@ struct DLight {
198
198
  float intensity;
199
199
  };
200
200
 
201
- const int MAX_DLIGHTS = ${dr};
201
+ const int MAX_DLIGHTS = ${ur};
202
202
 
203
203
  in vec2 v_texCoord;
204
204
  in vec2 v_lightmapCoord;
@@ -339,7 +339,7 @@ void main() {
339
339
  }
340
340
 
341
341
  o_color = finalColor;
342
- }`,Tu=[0,255,255,255],np=[0,-1,-1,-1];function Yl(t=Tu,e=[]){let r=new Float32Array(4);for(let n=0;n<4;n+=1){let i=t[n]??255;if(i===255){r[n]=0;continue}let s=e[i];r[n]=s!==void 0?s:1}return r}function ip(t){return[-(t*.25%1),0]}function ql(t=xi,e=0){let r=(t&hd)!==0,n=(t&dd)!==0,i=(t&cd)!==0,s=(t&ud)!==0,a=(t&fd)!==0,o=s?.33:a?.66:1,d=s||a||n,l=!d&&!i,c=r?ip(e):[0,0];return{alpha:o,blend:d,depthWrite:l,warp:n,flowOffset:c,sky:i}}var ho=class{constructor(e){this.uniformDlights=[];this.gl=e,this.program=Te.create(e,{vertex:$l,fragment:Zl},{a_position:0,a_texCoord:1,a_lightmapCoord:2,a_lightmapStep:3}),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.uniformStyleLayerMapping=this.program.getUniformLocation("u_styleLayerMapping"),this.uniformAlpha=this.program.getUniformLocation("u_alpha"),this.uniformApplyLightmap=this.program.getUniformLocation("u_applyLightmap"),this.uniformWarp=this.program.getUniformLocation("u_warp"),this.uniformLightmapOnly=this.program.getUniformLocation("u_lightmapOnly"),this.uniformDiffuse=this.program.getUniformLocation("u_diffuseMap"),this.uniformLightmap=this.program.getUniformLocation("u_lightmapAtlas"),this.uniformRefraction=this.program.getUniformLocation("u_refractionMap"),this.uniformHasRefraction=this.program.getUniformLocation("u_hasRefraction"),this.uniformTime=this.program.getUniformLocation("u_time"),this.uniformRenderMode=this.program.getUniformLocation("u_renderMode"),this.uniformSolidColor=this.program.getUniformLocation("u_solidColor"),this.uniformNumDlights=this.program.getUniformLocation("u_numDlights");for(let r=0;r<dr;r++)this.uniformDlights.push({pos:this.program.getUniformLocation(`u_dlights[${r}].position`),color:this.program.getUniformLocation(`u_dlights[${r}].color`),intensity:this.program.getUniformLocation(`u_dlights[${r}].intensity`)});this.uniformBrightness=this.program.getUniformLocation("u_brightness"),this.uniformGamma=this.program.getUniformLocation("u_gamma"),this.uniformFullbright=this.program.getUniformLocation("u_fullbright"),this.uniformAmbient=this.program.getUniformLocation("u_ambient")}get shaderSize(){return this.program.sourceSize}bind(e){let{modelViewProjection:r,styleIndices:n=Tu,styleLayers:i=np,styleValues:s=[],diffuseSampler:a=0,lightmapSampler:o,refractionSampler:d,surfaceFlags:l=xi,timeSeconds:c=0,texScroll:f,alpha:u,warp:h,dlights:m=[],renderMode:g,lightmapOnly:p,brightness:y=1,gamma:_=1,fullbright:x=!1,ambient:b=0}=e,v=ql(l,c),S=Yl(n,s),w=f?f[0]:v.flowOffset[0],L=f?f[1]:v.flowOffset[1],C=u!==void 0?u:v.alpha,A=h!==void 0?h:v.warp;this.program.use(),this.gl.uniformMatrix4fv(this.uniformMvp,!1,r),this.gl.uniform2f(this.uniformTexScroll,w,L),this.gl.uniform2f(this.uniformLmScroll,v.flowOffset[0],v.flowOffset[1]),this.gl.uniform4fv(this.uniformLightStyles,S),this.gl.uniform4fv(this.uniformStyleLayerMapping,i),this.gl.uniform1f(this.uniformAlpha,C);let I=!v.sky&&o!==void 0&&!A;this.gl.uniform1i(this.uniformApplyLightmap,I?1:0),this.gl.uniform1i(this.uniformWarp,A?1:0),this.gl.uniform1i(this.uniformLightmapOnly,p?1:0),this.gl.uniform1f(this.uniformTime,c),this.gl.uniform1i(this.uniformDiffuse,a),this.gl.uniform1i(this.uniformLightmap,o??0),d!==void 0&&A?(this.gl.uniform1i(this.uniformRefraction,d),this.gl.uniform1i(this.uniformHasRefraction,1)):this.gl.uniform1i(this.uniformHasRefraction,0);let R=0,F=[1,1,1,1];g&&(g.mode==="solid"||g.mode==="wireframe"?R=1:g.mode==="solid-faceted"&&(R=2),g.color?F=[...g.color]:g.generateRandomColor&&(F=[1,1,1,1])),this.gl.uniform1i(this.uniformRenderMode,R),this.gl.uniform4f(this.uniformSolidColor,F[0],F[1],F[2],F[3]);let k=Math.min(m.length,dr);this.gl.uniform1i(this.uniformNumDlights,k);for(let V=0;V<k;V++){let se=m[V];this.gl.uniform3f(this.uniformDlights[V].pos,se.origin.x,se.origin.y,se.origin.z),this.gl.uniform3f(this.uniformDlights[V].color,se.color.x,se.color.y,se.color.z),this.gl.uniform1f(this.uniformDlights[V].intensity,se.intensity)}return this.gl.uniform1f(this.uniformBrightness,y),this.gl.uniform1f(this.uniformGamma,_),this.gl.uniform1i(this.uniformFullbright,x?1:0),this.gl.uniform1f(this.uniformAmbient,b),v}draw(e,r){if(e.vao.bind(),r&&r.mode==="wireframe"){if(!e.wireframeIndexBuffer){let n=e;n.wireframeIndexBuffer=new _e(this.gl,this.gl.STATIC_DRAW);let i=ti(e.indexData);n.wireframeIndexBuffer.upload(i),n.wireframeIndexCount=i.length}e.wireframeIndexBuffer.bind(),this.gl.drawElements(this.gl.LINES,e.wireframeIndexCount,this.gl.UNSIGNED_SHORT,0)}else e.indexBuffer.bind(),this.gl.drawElements(this.gl.TRIANGLES,e.indexCount,this.gl.UNSIGNED_SHORT,0)}dispose(){this.program.dispose()}};function Cu(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 Iu=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]),jl=`#version 300 es
342
+ }`,Tu=[0,255,255,255],rp=[0,-1,-1,-1];function Yl(t=Tu,e=[]){let r=new Float32Array(4);for(let n=0;n<4;n+=1){let i=t[n]??255;if(i===255){r[n]=0;continue}let s=e[i];r[n]=s!==void 0?s:1}return r}function np(t){return[-(t*.25%1),0]}function ql(t=xi,e=0){let r=(t&hd)!==0,n=(t&dd)!==0,i=(t&cd)!==0,s=(t&ud)!==0,a=(t&fd)!==0,o=s?.33:a?.66:1,d=s||a||n,l=!d&&!i,c=r?np(e):[0,0];return{alpha:o,blend:d,depthWrite:l,warp:n,flowOffset:c,sky:i}}var ho=class{constructor(e){this.uniformDlights=[];this.gl=e,this.program=Te.create(e,{vertex:$l,fragment:Zl},{a_position:0,a_texCoord:1,a_lightmapCoord:2,a_lightmapStep:3}),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.uniformStyleLayerMapping=this.program.getUniformLocation("u_styleLayerMapping"),this.uniformAlpha=this.program.getUniformLocation("u_alpha"),this.uniformApplyLightmap=this.program.getUniformLocation("u_applyLightmap"),this.uniformWarp=this.program.getUniformLocation("u_warp"),this.uniformLightmapOnly=this.program.getUniformLocation("u_lightmapOnly"),this.uniformDiffuse=this.program.getUniformLocation("u_diffuseMap"),this.uniformLightmap=this.program.getUniformLocation("u_lightmapAtlas"),this.uniformRefraction=this.program.getUniformLocation("u_refractionMap"),this.uniformHasRefraction=this.program.getUniformLocation("u_hasRefraction"),this.uniformTime=this.program.getUniformLocation("u_time"),this.uniformRenderMode=this.program.getUniformLocation("u_renderMode"),this.uniformSolidColor=this.program.getUniformLocation("u_solidColor"),this.uniformNumDlights=this.program.getUniformLocation("u_numDlights");for(let r=0;r<ur;r++)this.uniformDlights.push({pos:this.program.getUniformLocation(`u_dlights[${r}].position`),color:this.program.getUniformLocation(`u_dlights[${r}].color`),intensity:this.program.getUniformLocation(`u_dlights[${r}].intensity`)});this.uniformBrightness=this.program.getUniformLocation("u_brightness"),this.uniformGamma=this.program.getUniformLocation("u_gamma"),this.uniformFullbright=this.program.getUniformLocation("u_fullbright"),this.uniformAmbient=this.program.getUniformLocation("u_ambient")}get shaderSize(){return this.program.sourceSize}bind(e){let{modelViewProjection:r,styleIndices:n=Tu,styleLayers:i=rp,styleValues:s=[],diffuseSampler:a=0,lightmapSampler:o,refractionSampler:d,surfaceFlags:l=xi,timeSeconds:c=0,texScroll:f,alpha:u,warp:h,dlights:m=[],renderMode:g,lightmapOnly:p,brightness:y=1,gamma:_=1,fullbright:x=!1,ambient:b=0}=e,v=ql(l,c),S=Yl(n,s),w=f?f[0]:v.flowOffset[0],L=f?f[1]:v.flowOffset[1],T=u!==void 0?u:v.alpha,A=h!==void 0?h:v.warp;this.program.use(),this.gl.uniformMatrix4fv(this.uniformMvp,!1,r),this.gl.uniform2f(this.uniformTexScroll,w,L),this.gl.uniform2f(this.uniformLmScroll,v.flowOffset[0],v.flowOffset[1]),this.gl.uniform4fv(this.uniformLightStyles,S),this.gl.uniform4fv(this.uniformStyleLayerMapping,i),this.gl.uniform1f(this.uniformAlpha,T);let I=!v.sky&&o!==void 0&&!A;this.gl.uniform1i(this.uniformApplyLightmap,I?1:0),this.gl.uniform1i(this.uniformWarp,A?1:0),this.gl.uniform1i(this.uniformLightmapOnly,p?1:0),this.gl.uniform1f(this.uniformTime,c),this.gl.uniform1i(this.uniformDiffuse,a),this.gl.uniform1i(this.uniformLightmap,o??0),d!==void 0&&A?(this.gl.uniform1i(this.uniformRefraction,d),this.gl.uniform1i(this.uniformHasRefraction,1)):this.gl.uniform1i(this.uniformHasRefraction,0);let R=0,F=[1,1,1,1];g&&(g.mode==="solid"||g.mode==="wireframe"?R=1:g.mode==="solid-faceted"&&(R=2),g.color?F=[...g.color]:g.generateRandomColor&&(F=[1,1,1,1])),this.gl.uniform1i(this.uniformRenderMode,R),this.gl.uniform4f(this.uniformSolidColor,F[0],F[1],F[2],F[3]);let k=Math.min(m.length,ur);this.gl.uniform1i(this.uniformNumDlights,k);for(let V=0;V<k;V++){let se=m[V];this.gl.uniform3f(this.uniformDlights[V].pos,se.origin.x,se.origin.y,se.origin.z),this.gl.uniform3f(this.uniformDlights[V].color,se.color.x,se.color.y,se.color.z),this.gl.uniform1f(this.uniformDlights[V].intensity,se.intensity)}return this.gl.uniform1f(this.uniformBrightness,y),this.gl.uniform1f(this.uniformGamma,_),this.gl.uniform1i(this.uniformFullbright,x?1:0),this.gl.uniform1f(this.uniformAmbient,b),v}draw(e,r){if(e.vao.bind(),r&&r.mode==="wireframe"){if(!e.wireframeIndexBuffer){let n=e;n.wireframeIndexBuffer=new _e(this.gl,this.gl.STATIC_DRAW);let i=ti(e.indexData);n.wireframeIndexBuffer.upload(i),n.wireframeIndexCount=i.length}e.wireframeIndexBuffer.bind(),this.gl.drawElements(this.gl.LINES,e.wireframeIndexCount,this.gl.UNSIGNED_SHORT,0)}else e.indexBuffer.bind(),this.gl.drawElements(this.gl.TRIANGLES,e.indexCount,this.gl.UNSIGNED_SHORT,0)}dispose(){this.program.dispose()}};function Cu(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 Iu=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]),jl=`#version 300 es
343
343
  precision highp float;
344
344
 
345
345
  layout(location = 0) in vec3 a_position;
@@ -377,7 +377,7 @@ struct DLight {
377
377
  float intensity;
378
378
  };
379
379
 
380
- const int MAX_DLIGHTS = ${dr};
380
+ const int MAX_DLIGHTS = ${ur};
381
381
 
382
382
  uniform mat4 u_modelViewProjection;
383
383
  uniform mat4 u_modelMatrix;
@@ -476,7 +476,7 @@ void main() {
476
476
  }
477
477
 
478
478
  o_color = finalColor;
479
- }`;function sp(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 Jl(t,e,r){return t+(e-t)*r}function Pu(t,e,r){return{x:Jl(t.x,e.x,r),y:Jl(t.y,e.y,r),z:Jl(t.z,e.z,r)}}function ap(t,e,r){return[t/r.skinWidth,1-e/r.skinHeight]}function rc(t){if(t.glCommands.length===0){let n=[],i=[];return t.triangles.forEach(s=>{let a=n.length;for(let o=0;o<3;o+=1){let d=s.vertexIndices[o],l=s.texCoordIndices[o],c=t.texCoords[l];n.push({vertexIndex:d,texCoord:ap(c.s,c.t,t.header)})}i.push(a,a+1,a+2)}),{vertices:n,indices:new Uint16Array(i)}}let e=[],r=[];for(let n of t.glCommands){let i=e.length;if(e.push(...n.vertices.map(s=>({vertexIndex:s.vertexIndex,texCoord:[s.s,1-s.t]}))),n.mode==="strip")for(let s=0;s<n.vertices.length-2;s+=1){let a=s%2===0,o=i+s+(a?0:1),d=i+s+(a?1:0),l=i+s+2;r.push(o,d,l)}else for(let s=1;s<n.vertices.length-1;s+=1)r.push(i,i+s,i+s+1)}return{vertices:e,indices:new Uint16Array(r)}}function nc(t,e,r){let{frame0:n,frame1:i,lerp:s}=r,a=t.frames[n],o=t.frames[i];if(!a||!o)throw new Error("Requested MD2 frames are out of range");let d=new Float32Array(e.vertices.length*8);return e.vertices.forEach((l,c)=>{let f=a.vertices[l.vertexIndex],u=o.vertices[l.vertexIndex];if(!f||!u)throw new Error("MD2 vertex index out of range for frame");let h=Pu(f.position,u.position,s),m=sp(Pu(f.normal,u.normal,s)),g=c*8;d[g]=h.x,d[g+1]=h.y,d[g+2]=h.z,d[g+3]=m.x,d[g+4]=m.y,d[g+5]=m.z,d[g+6]=l.texCoord[0],d[g+7]=l.texCoord[1]}),d}var po=class{constructor(e,r,n){this.gl=e,this.geometry=rc(r),this.vertexBuffer=new Ce(e,e.STATIC_DRAW),this.indexBuffer=new _e(e,e.STATIC_DRAW),this.vertexArray=new Pe(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=nc(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(),this.wireframeIndexBuffer?.dispose()}},go=class{constructor(e){this.uniformDlights=[];this.gl=e,this.program=Te.create(e,{vertex:ec,fragment:tc},{a_position:0,a_normal:1,a_texCoord:2}),this.uniformMvp=this.program.getUniformLocation("u_modelViewProjection"),this.uniformModelMatrix=this.program.getUniformLocation("u_modelMatrix"),this.uniformLightDir=this.program.getUniformLocation("u_lightDir"),this.uniformAmbient=this.program.getUniformLocation("u_ambient"),this.uniformTint=this.program.getUniformLocation("u_tint"),this.uniformDiffuse=this.program.getUniformLocation("u_diffuseMap"),this.uniformRenderMode=this.program.getUniformLocation("u_renderMode"),this.uniformSolidColor=this.program.getUniformLocation("u_solidColor"),this.uniformNumDlights=this.program.getUniformLocation("u_numDlights");for(let r=0;r<dr;r++)this.uniformDlights.push({pos:this.program.getUniformLocation(`u_dlights[${r}].position`),color:this.program.getUniformLocation(`u_dlights[${r}].color`),intensity:this.program.getUniformLocation(`u_dlights[${r}].intensity`)});this.uniformBrightness=this.program.getUniformLocation("u_brightness"),this.uniformGamma=this.program.getUniformLocation("u_gamma"),this.uniformFullbright=this.program.getUniformLocation("u_fullbright"),this.uniformGlobalAmbient=this.program.getUniformLocation("u_globalAmbient")}get shaderSize(){return this.program.sourceSize}bind(e){let{modelViewProjection:r,modelMatrix:n,lightDirection:i=[0,0,1],ambientLight:s=.2,tint:a=[1,1,1,1],diffuseSampler:o=0,dlights:d=[],renderMode:l,brightness:c=1,gamma:f=1,fullbright:u=!1,ambient:h=0}=e,m=new Float32Array(i),g=new Float32Array(a);this.program.use(),this.gl.uniformMatrix4fv(this.uniformMvp,!1,r),n?this.gl.uniformMatrix4fv(this.uniformModelMatrix,!1,n):this.gl.uniformMatrix4fv(this.uniformModelMatrix,!1,new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])),this.gl.uniform3fv(this.uniformLightDir,m),this.gl.uniform1f(this.uniformAmbient,s),this.gl.uniform4fv(this.uniformTint,g),this.gl.uniform1i(this.uniformDiffuse,o);let p=0,y=[1,1,1,1];l&&(l.mode==="solid"||l.mode==="wireframe"?p=1:l.mode==="solid-faceted"&&(p=2),l.color?y=[...l.color]:l.generateRandomColor),this.gl.uniform1i(this.uniformRenderMode,p),this.gl.uniform4f(this.uniformSolidColor,y[0],y[1],y[2],y[3]);let _=Math.min(d.length,dr);this.gl.uniform1i(this.uniformNumDlights,_);for(let x=0;x<_;x++){let b=d[x];this.gl.uniform3f(this.uniformDlights[x].pos,b.origin.x,b.origin.y,b.origin.z),this.gl.uniform3f(this.uniformDlights[x].color,b.color.x,b.color.y,b.color.z),this.gl.uniform1f(this.uniformDlights[x].intensity,b.intensity)}this.gl.uniform1f(this.uniformBrightness,c),this.gl.uniform1f(this.uniformGamma,f),this.gl.uniform1i(this.uniformFullbright,u?1:0),this.gl.uniform1f(this.uniformGlobalAmbient,h)}draw(e,r){if(e.vertexArray.bind(),r&&r.mode==="wireframe"){if(!e.wireframeIndexBuffer){e.wireframeIndexBuffer=new _e(this.gl,this.gl.STATIC_DRAW);let n=ti(e.geometry.indices);e.wireframeIndexBuffer.upload(n),e.wireframeIndexCount=n.length}e.wireframeIndexBuffer.bind(),this.gl.drawElements(this.gl.LINES,e.wireframeIndexCount,this.gl.UNSIGNED_SHORT,0)}else e.indexBuffer.bind(),this.gl.drawElements(this.gl.TRIANGLES,e.indexCount,this.gl.UNSIGNED_SHORT,0)}dispose(){this.program.dispose()}};var ee=1e-6,qe=typeof Float32Array<"u"?Float32Array:Array,ic=Math.random;function yo(t){return t>=0?Math.round(t):t%.5===0?Math.floor(t):Math.round(t)}var H2=Math.PI/180,V2=180/Math.PI;var de={};$o(de,{add:()=>Xp,adjoint:()=>mp,clone:()=>lp,copy:()=>cp,create:()=>op,decompose:()=>kp,determinant:()=>pp,equals:()=>Yp,exactEquals:()=>Zp,frob:()=>Wp,fromQuat:()=>Fp,fromQuat2:()=>Tp,fromRotation:()=>Ap,fromRotationTranslation:()=>Du,fromRotationTranslationScale:()=>Rp,fromRotationTranslationScaleOrigin:()=>Pp,fromScaling:()=>Sp,fromTranslation:()=>wp,fromValues:()=>dp,fromXRotation:()=>Mp,fromYRotation:()=>Ep,fromZRotation:()=>Lp,frustum:()=>zp,getRotation:()=>Ip,getScaling:()=>Ou,getTranslation:()=>Cp,identity:()=>zu,invert:()=>hp,lookAt:()=>Hp,mul:()=>qp,multiply:()=>Bu,multiplyScalar:()=>Kp,multiplyScalarAndAdd:()=>$p,ortho:()=>Np,orthoNO:()=>Uu,orthoZO:()=>Up,perspective:()=>Bp,perspectiveFromFieldOfView:()=>Op,perspectiveNO:()=>Nu,perspectiveZO:()=>Dp,rotate:()=>bp,rotateX:()=>xp,rotateY:()=>_p,rotateZ:()=>vp,scale:()=>yp,set:()=>up,str:()=>Gp,sub:()=>jp,subtract:()=>Hu,targetTo:()=>Vp,translate:()=>gp,transpose:()=>fp});function op(){var t=new qe(16);return qe!=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 lp(t){var e=new qe(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 cp(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 dp(t,e,r,n,i,s,a,o,d,l,c,f,u,h,m,g){var p=new qe(16);return p[0]=t,p[1]=e,p[2]=r,p[3]=n,p[4]=i,p[5]=s,p[6]=a,p[7]=o,p[8]=d,p[9]=l,p[10]=c,p[11]=f,p[12]=u,p[13]=h,p[14]=m,p[15]=g,p}function up(t,e,r,n,i,s,a,o,d,l,c,f,u,h,m,g,p){return t[0]=e,t[1]=r,t[2]=n,t[3]=i,t[4]=s,t[5]=a,t[6]=o,t[7]=d,t[8]=l,t[9]=c,t[10]=f,t[11]=u,t[12]=h,t[13]=m,t[14]=g,t[15]=p,t}function zu(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 fp(t,e){if(t===e){var r=e[1],n=e[2],i=e[3],s=e[6],a=e[7],o=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]=s,t[11]=e[14],t[12]=i,t[13]=a,t[14]=o}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 hp(t,e){var r=e[0],n=e[1],i=e[2],s=e[3],a=e[4],o=e[5],d=e[6],l=e[7],c=e[8],f=e[9],u=e[10],h=e[11],m=e[12],g=e[13],p=e[14],y=e[15],_=r*o-n*a,x=r*d-i*a,b=r*l-s*a,v=n*d-i*o,S=n*l-s*o,w=i*l-s*d,L=c*g-f*m,C=c*p-u*m,A=c*y-h*m,I=f*p-u*g,R=f*y-h*g,F=u*y-h*p,k=_*F-x*R+b*I+v*A-S*C+w*L;return k?(k=1/k,t[0]=(o*F-d*R+l*I)*k,t[1]=(i*R-n*F-s*I)*k,t[2]=(g*w-p*S+y*v)*k,t[3]=(u*S-f*w-h*v)*k,t[4]=(d*A-a*F-l*C)*k,t[5]=(r*F-i*A+s*C)*k,t[6]=(p*b-m*w-y*x)*k,t[7]=(c*w-u*b+h*x)*k,t[8]=(a*R-o*A+l*L)*k,t[9]=(n*A-r*R-s*L)*k,t[10]=(m*S-g*b+y*_)*k,t[11]=(f*b-c*S-h*_)*k,t[12]=(o*C-a*I-d*L)*k,t[13]=(r*I-n*C+i*L)*k,t[14]=(g*x-m*v-p*_)*k,t[15]=(c*v-f*x+u*_)*k,t):null}function mp(t,e){var r=e[0],n=e[1],i=e[2],s=e[3],a=e[4],o=e[5],d=e[6],l=e[7],c=e[8],f=e[9],u=e[10],h=e[11],m=e[12],g=e[13],p=e[14],y=e[15],_=r*o-n*a,x=r*d-i*a,b=r*l-s*a,v=n*d-i*o,S=n*l-s*o,w=i*l-s*d,L=c*g-f*m,C=c*p-u*m,A=c*y-h*m,I=f*p-u*g,R=f*y-h*g,F=u*y-h*p;return t[0]=o*F-d*R+l*I,t[1]=i*R-n*F-s*I,t[2]=g*w-p*S+y*v,t[3]=u*S-f*w-h*v,t[4]=d*A-a*F-l*C,t[5]=r*F-i*A+s*C,t[6]=p*b-m*w-y*x,t[7]=c*w-u*b+h*x,t[8]=a*R-o*A+l*L,t[9]=n*A-r*R-s*L,t[10]=m*S-g*b+y*_,t[11]=f*b-c*S-h*_,t[12]=o*C-a*I-d*L,t[13]=r*I-n*C+i*L,t[14]=g*x-m*v-p*_,t[15]=c*v-f*x+u*_,t}function pp(t){var e=t[0],r=t[1],n=t[2],i=t[3],s=t[4],a=t[5],o=t[6],d=t[7],l=t[8],c=t[9],f=t[10],u=t[11],h=t[12],m=t[13],g=t[14],p=t[15],y=e*a-r*s,_=e*o-n*s,x=r*o-n*a,b=l*m-c*h,v=l*g-f*h,S=c*g-f*m,w=e*S-r*v+n*b,L=s*S-a*v+o*b,C=l*x-c*_+f*y,A=h*x-m*_+g*y;return d*w-i*L+p*C-u*A}function Bu(t,e,r){var n=e[0],i=e[1],s=e[2],a=e[3],o=e[4],d=e[5],l=e[6],c=e[7],f=e[8],u=e[9],h=e[10],m=e[11],g=e[12],p=e[13],y=e[14],_=e[15],x=r[0],b=r[1],v=r[2],S=r[3];return t[0]=x*n+b*o+v*f+S*g,t[1]=x*i+b*d+v*u+S*p,t[2]=x*s+b*l+v*h+S*y,t[3]=x*a+b*c+v*m+S*_,x=r[4],b=r[5],v=r[6],S=r[7],t[4]=x*n+b*o+v*f+S*g,t[5]=x*i+b*d+v*u+S*p,t[6]=x*s+b*l+v*h+S*y,t[7]=x*a+b*c+v*m+S*_,x=r[8],b=r[9],v=r[10],S=r[11],t[8]=x*n+b*o+v*f+S*g,t[9]=x*i+b*d+v*u+S*p,t[10]=x*s+b*l+v*h+S*y,t[11]=x*a+b*c+v*m+S*_,x=r[12],b=r[13],v=r[14],S=r[15],t[12]=x*n+b*o+v*f+S*g,t[13]=x*i+b*d+v*u+S*p,t[14]=x*s+b*l+v*h+S*y,t[15]=x*a+b*c+v*m+S*_,t}function gp(t,e,r){var n=r[0],i=r[1],s=r[2],a,o,d,l,c,f,u,h,m,g,p,y;return e===t?(t[12]=e[0]*n+e[4]*i+e[8]*s+e[12],t[13]=e[1]*n+e[5]*i+e[9]*s+e[13],t[14]=e[2]*n+e[6]*i+e[10]*s+e[14],t[15]=e[3]*n+e[7]*i+e[11]*s+e[15]):(a=e[0],o=e[1],d=e[2],l=e[3],c=e[4],f=e[5],u=e[6],h=e[7],m=e[8],g=e[9],p=e[10],y=e[11],t[0]=a,t[1]=o,t[2]=d,t[3]=l,t[4]=c,t[5]=f,t[6]=u,t[7]=h,t[8]=m,t[9]=g,t[10]=p,t[11]=y,t[12]=a*n+c*i+m*s+e[12],t[13]=o*n+f*i+g*s+e[13],t[14]=d*n+u*i+p*s+e[14],t[15]=l*n+h*i+y*s+e[15]),t}function yp(t,e,r){var n=r[0],i=r[1],s=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]*i,t[5]=e[5]*i,t[6]=e[6]*i,t[7]=e[7]*i,t[8]=e[8]*s,t[9]=e[9]*s,t[10]=e[10]*s,t[11]=e[11]*s,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}function bp(t,e,r,n){var i=n[0],s=n[1],a=n[2],o=Math.sqrt(i*i+s*s+a*a),d,l,c,f,u,h,m,g,p,y,_,x,b,v,S,w,L,C,A,I,R,F,k,V;return o<ee?null:(o=1/o,i*=o,s*=o,a*=o,d=Math.sin(r),l=Math.cos(r),c=1-l,f=e[0],u=e[1],h=e[2],m=e[3],g=e[4],p=e[5],y=e[6],_=e[7],x=e[8],b=e[9],v=e[10],S=e[11],w=i*i*c+l,L=s*i*c+a*d,C=a*i*c-s*d,A=i*s*c-a*d,I=s*s*c+l,R=a*s*c+i*d,F=i*a*c+s*d,k=s*a*c-i*d,V=a*a*c+l,t[0]=f*w+g*L+x*C,t[1]=u*w+p*L+b*C,t[2]=h*w+y*L+v*C,t[3]=m*w+_*L+S*C,t[4]=f*A+g*I+x*R,t[5]=u*A+p*I+b*R,t[6]=h*A+y*I+v*R,t[7]=m*A+_*I+S*R,t[8]=f*F+g*k+x*V,t[9]=u*F+p*k+b*V,t[10]=h*F+y*k+v*V,t[11]=m*F+_*k+S*V,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t)}function xp(t,e,r){var n=Math.sin(r),i=Math.cos(r),s=e[4],a=e[5],o=e[6],d=e[7],l=e[8],c=e[9],f=e[10],u=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]=s*i+l*n,t[5]=a*i+c*n,t[6]=o*i+f*n,t[7]=d*i+u*n,t[8]=l*i-s*n,t[9]=c*i-a*n,t[10]=f*i-o*n,t[11]=u*i-d*n,t}function _p(t,e,r){var n=Math.sin(r),i=Math.cos(r),s=e[0],a=e[1],o=e[2],d=e[3],l=e[8],c=e[9],f=e[10],u=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]=s*i-l*n,t[1]=a*i-c*n,t[2]=o*i-f*n,t[3]=d*i-u*n,t[8]=s*n+l*i,t[9]=a*n+c*i,t[10]=o*n+f*i,t[11]=d*n+u*i,t}function vp(t,e,r){var n=Math.sin(r),i=Math.cos(r),s=e[0],a=e[1],o=e[2],d=e[3],l=e[4],c=e[5],f=e[6],u=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]=s*i+l*n,t[1]=a*i+c*n,t[2]=o*i+f*n,t[3]=d*i+u*n,t[4]=l*i-s*n,t[5]=c*i-a*n,t[6]=f*i-o*n,t[7]=u*i-d*n,t}function wp(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 Sp(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 Ap(t,e,r){var n=r[0],i=r[1],s=r[2],a=Math.sqrt(n*n+i*i+s*s),o,d,l;return a<ee?null:(a=1/a,n*=a,i*=a,s*=a,o=Math.sin(e),d=Math.cos(e),l=1-d,t[0]=n*n*l+d,t[1]=i*n*l+s*o,t[2]=s*n*l-i*o,t[3]=0,t[4]=n*i*l-s*o,t[5]=i*i*l+d,t[6]=s*i*l+n*o,t[7]=0,t[8]=n*s*l+i*o,t[9]=i*s*l-n*o,t[10]=s*s*l+d,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t)}function Mp(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 Ep(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 Lp(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 Du(t,e,r){var n=e[0],i=e[1],s=e[2],a=e[3],o=n+n,d=i+i,l=s+s,c=n*o,f=n*d,u=n*l,h=i*d,m=i*l,g=s*l,p=a*o,y=a*d,_=a*l;return t[0]=1-(h+g),t[1]=f+_,t[2]=u-y,t[3]=0,t[4]=f-_,t[5]=1-(c+g),t[6]=m+p,t[7]=0,t[8]=u+y,t[9]=m-p,t[10]=1-(c+h),t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t}function Tp(t,e){var r=new qe(3),n=-e[0],i=-e[1],s=-e[2],a=e[3],o=e[4],d=e[5],l=e[6],c=e[7],f=n*n+i*i+s*s+a*a;return f>0?(r[0]=(o*a+c*n+d*s-l*i)*2/f,r[1]=(d*a+c*i+l*n-o*s)*2/f,r[2]=(l*a+c*s+o*i-d*n)*2/f):(r[0]=(o*a+c*n+d*s-l*i)*2,r[1]=(d*a+c*i+l*n-o*s)*2,r[2]=(l*a+c*s+o*i-d*n)*2),Du(t,e,r),t}function Cp(t,e){return t[0]=e[12],t[1]=e[13],t[2]=e[14],t}function Ou(t,e){var r=e[0],n=e[1],i=e[2],s=e[4],a=e[5],o=e[6],d=e[8],l=e[9],c=e[10];return t[0]=Math.sqrt(r*r+n*n+i*i),t[1]=Math.sqrt(s*s+a*a+o*o),t[2]=Math.sqrt(d*d+l*l+c*c),t}function Ip(t,e){var r=new qe(3);Ou(r,e);var n=1/r[0],i=1/r[1],s=1/r[2],a=e[0]*n,o=e[1]*i,d=e[2]*s,l=e[4]*n,c=e[5]*i,f=e[6]*s,u=e[8]*n,h=e[9]*i,m=e[10]*s,g=a+c+m,p=0;return g>0?(p=Math.sqrt(g+1)*2,t[3]=.25*p,t[0]=(f-h)/p,t[1]=(u-d)/p,t[2]=(o-l)/p):a>c&&a>m?(p=Math.sqrt(1+a-c-m)*2,t[3]=(f-h)/p,t[0]=.25*p,t[1]=(o+l)/p,t[2]=(u+d)/p):c>m?(p=Math.sqrt(1+c-a-m)*2,t[3]=(u-d)/p,t[0]=(o+l)/p,t[1]=.25*p,t[2]=(f+h)/p):(p=Math.sqrt(1+m-a-c)*2,t[3]=(o-l)/p,t[0]=(u+d)/p,t[1]=(f+h)/p,t[2]=.25*p),t}function kp(t,e,r,n){e[0]=n[12],e[1]=n[13],e[2]=n[14];var i=n[0],s=n[1],a=n[2],o=n[4],d=n[5],l=n[6],c=n[8],f=n[9],u=n[10];r[0]=Math.sqrt(i*i+s*s+a*a),r[1]=Math.sqrt(o*o+d*d+l*l),r[2]=Math.sqrt(c*c+f*f+u*u);var h=1/r[0],m=1/r[1],g=1/r[2],p=i*h,y=s*m,_=a*g,x=o*h,b=d*m,v=l*g,S=c*h,w=f*m,L=u*g,C=p+b+L,A=0;return C>0?(A=Math.sqrt(C+1)*2,t[3]=.25*A,t[0]=(v-w)/A,t[1]=(S-_)/A,t[2]=(y-x)/A):p>b&&p>L?(A=Math.sqrt(1+p-b-L)*2,t[3]=(v-w)/A,t[0]=.25*A,t[1]=(y+x)/A,t[2]=(S+_)/A):b>L?(A=Math.sqrt(1+b-p-L)*2,t[3]=(S-_)/A,t[0]=(y+x)/A,t[1]=.25*A,t[2]=(v+w)/A):(A=Math.sqrt(1+L-p-b)*2,t[3]=(y-x)/A,t[0]=(S+_)/A,t[1]=(v+w)/A,t[2]=.25*A),t}function Rp(t,e,r,n){var i=e[0],s=e[1],a=e[2],o=e[3],d=i+i,l=s+s,c=a+a,f=i*d,u=i*l,h=i*c,m=s*l,g=s*c,p=a*c,y=o*d,_=o*l,x=o*c,b=n[0],v=n[1],S=n[2];return t[0]=(1-(m+p))*b,t[1]=(u+x)*b,t[2]=(h-_)*b,t[3]=0,t[4]=(u-x)*v,t[5]=(1-(f+p))*v,t[6]=(g+y)*v,t[7]=0,t[8]=(h+_)*S,t[9]=(g-y)*S,t[10]=(1-(f+m))*S,t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t}function Pp(t,e,r,n,i){var s=e[0],a=e[1],o=e[2],d=e[3],l=s+s,c=a+a,f=o+o,u=s*l,h=s*c,m=s*f,g=a*c,p=a*f,y=o*f,_=d*l,x=d*c,b=d*f,v=n[0],S=n[1],w=n[2],L=i[0],C=i[1],A=i[2],I=(1-(g+y))*v,R=(h+b)*v,F=(m-x)*v,k=(h-b)*S,V=(1-(u+y))*S,se=(p+_)*S,Nr=(m+x)*w,js=(p-_)*w,pi=(1-(u+g))*w;return t[0]=I,t[1]=R,t[2]=F,t[3]=0,t[4]=k,t[5]=V,t[6]=se,t[7]=0,t[8]=Nr,t[9]=js,t[10]=pi,t[11]=0,t[12]=r[0]+L-(I*L+k*C+Nr*A),t[13]=r[1]+C-(R*L+V*C+js*A),t[14]=r[2]+A-(F*L+se*C+pi*A),t[15]=1,t}function Fp(t,e){var r=e[0],n=e[1],i=e[2],s=e[3],a=r+r,o=n+n,d=i+i,l=r*a,c=n*a,f=n*o,u=i*a,h=i*o,m=i*d,g=s*a,p=s*o,y=s*d;return t[0]=1-f-m,t[1]=c+y,t[2]=u-p,t[3]=0,t[4]=c-y,t[5]=1-l-m,t[6]=h+g,t[7]=0,t[8]=u+p,t[9]=h-g,t[10]=1-l-f,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function zp(t,e,r,n,i,s,a){var o=1/(r-e),d=1/(i-n),l=1/(s-a);return t[0]=s*2*o,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=s*2*d,t[6]=0,t[7]=0,t[8]=(r+e)*o,t[9]=(i+n)*d,t[10]=(a+s)*l,t[11]=-1,t[12]=0,t[13]=0,t[14]=a*s*2*l,t[15]=0,t}function Nu(t,e,r,n,i){var s=1/Math.tan(e/2);if(t[0]=s/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=s,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,i!=null&&i!==1/0){var a=1/(n-i);t[10]=(i+n)*a,t[14]=2*i*n*a}else t[10]=-1,t[14]=-2*n;return t}var Bp=Nu;function Dp(t,e,r,n,i){var s=1/Math.tan(e/2);if(t[0]=s/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=s,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,i!=null&&i!==1/0){var a=1/(n-i);t[10]=i*a,t[14]=i*n*a}else t[10]=-1,t[14]=-n;return t}function Op(t,e,r,n){var i=Math.tan(e.upDegrees*Math.PI/180),s=Math.tan(e.downDegrees*Math.PI/180),a=Math.tan(e.leftDegrees*Math.PI/180),o=Math.tan(e.rightDegrees*Math.PI/180),d=2/(a+o),l=2/(i+s);return t[0]=d,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=l,t[6]=0,t[7]=0,t[8]=-((a-o)*d*.5),t[9]=(i-s)*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 Uu(t,e,r,n,i,s,a){var o=1/(e-r),d=1/(n-i),l=1/(s-a);return t[0]=-2*o,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*d,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*l,t[11]=0,t[12]=(e+r)*o,t[13]=(i+n)*d,t[14]=(a+s)*l,t[15]=1,t}var Np=Uu;function Up(t,e,r,n,i,s,a){var o=1/(e-r),d=1/(n-i),l=1/(s-a);return t[0]=-2*o,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*d,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=l,t[11]=0,t[12]=(e+r)*o,t[13]=(i+n)*d,t[14]=s*l,t[15]=1,t}function Hp(t,e,r,n){var i,s,a,o,d,l,c,f,u,h,m=e[0],g=e[1],p=e[2],y=n[0],_=n[1],x=n[2],b=r[0],v=r[1],S=r[2];return Math.abs(m-b)<ee&&Math.abs(g-v)<ee&&Math.abs(p-S)<ee?zu(t):(c=m-b,f=g-v,u=p-S,h=1/Math.sqrt(c*c+f*f+u*u),c*=h,f*=h,u*=h,i=_*u-x*f,s=x*c-y*u,a=y*f-_*c,h=Math.sqrt(i*i+s*s+a*a),h?(h=1/h,i*=h,s*=h,a*=h):(i=0,s=0,a=0),o=f*a-u*s,d=u*i-c*a,l=c*s-f*i,h=Math.sqrt(o*o+d*d+l*l),h?(h=1/h,o*=h,d*=h,l*=h):(o=0,d=0,l=0),t[0]=i,t[1]=o,t[2]=c,t[3]=0,t[4]=s,t[5]=d,t[6]=f,t[7]=0,t[8]=a,t[9]=l,t[10]=u,t[11]=0,t[12]=-(i*m+s*g+a*p),t[13]=-(o*m+d*g+l*p),t[14]=-(c*m+f*g+u*p),t[15]=1,t)}function Vp(t,e,r,n){var i=e[0],s=e[1],a=e[2],o=n[0],d=n[1],l=n[2],c=i-r[0],f=s-r[1],u=a-r[2],h=c*c+f*f+u*u;h>0&&(h=1/Math.sqrt(h),c*=h,f*=h,u*=h);var m=d*u-l*f,g=l*c-o*u,p=o*f-d*c;return h=m*m+g*g+p*p,h>0&&(h=1/Math.sqrt(h),m*=h,g*=h,p*=h),t[0]=m,t[1]=g,t[2]=p,t[3]=0,t[4]=f*p-u*g,t[5]=u*m-c*p,t[6]=c*g-f*m,t[7]=0,t[8]=c,t[9]=f,t[10]=u,t[11]=0,t[12]=i,t[13]=s,t[14]=a,t[15]=1,t}function Gp(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 Wp(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 Xp(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 Hu(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 Kp(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 $p(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 Zp(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 Yp(t,e){var r=t[0],n=t[1],i=t[2],s=t[3],a=t[4],o=t[5],d=t[6],l=t[7],c=t[8],f=t[9],u=t[10],h=t[11],m=t[12],g=t[13],p=t[14],y=t[15],_=e[0],x=e[1],b=e[2],v=e[3],S=e[4],w=e[5],L=e[6],C=e[7],A=e[8],I=e[9],R=e[10],F=e[11],k=e[12],V=e[13],se=e[14],Nr=e[15];return Math.abs(r-_)<=ee*Math.max(1,Math.abs(r),Math.abs(_))&&Math.abs(n-x)<=ee*Math.max(1,Math.abs(n),Math.abs(x))&&Math.abs(i-b)<=ee*Math.max(1,Math.abs(i),Math.abs(b))&&Math.abs(s-v)<=ee*Math.max(1,Math.abs(s),Math.abs(v))&&Math.abs(a-S)<=ee*Math.max(1,Math.abs(a),Math.abs(S))&&Math.abs(o-w)<=ee*Math.max(1,Math.abs(o),Math.abs(w))&&Math.abs(d-L)<=ee*Math.max(1,Math.abs(d),Math.abs(L))&&Math.abs(l-C)<=ee*Math.max(1,Math.abs(l),Math.abs(C))&&Math.abs(c-A)<=ee*Math.max(1,Math.abs(c),Math.abs(A))&&Math.abs(f-I)<=ee*Math.max(1,Math.abs(f),Math.abs(I))&&Math.abs(u-R)<=ee*Math.max(1,Math.abs(u),Math.abs(R))&&Math.abs(h-F)<=ee*Math.max(1,Math.abs(h),Math.abs(F))&&Math.abs(m-k)<=ee*Math.max(1,Math.abs(m),Math.abs(k))&&Math.abs(g-V)<=ee*Math.max(1,Math.abs(g),Math.abs(V))&&Math.abs(p-se)<=ee*Math.max(1,Math.abs(p),Math.abs(se))&&Math.abs(y-Nr)<=ee*Math.max(1,Math.abs(y),Math.abs(Nr))}var qp=Bu,jp=Hu;var B={};$o(B,{add:()=>r1,angle:()=>M1,bezier:()=>y1,ceil:()=>n1,clone:()=>Qp,copy:()=>e1,create:()=>Vu,cross:()=>h1,dist:()=>P1,distance:()=>$u,div:()=>R1,divide:()=>Ku,dot:()=>sc,equals:()=>C1,exactEquals:()=>T1,floor:()=>i1,forEach:()=>D1,fromValues:()=>Jp,hermite:()=>g1,inverse:()=>u1,len:()=>z1,length:()=>Gu,lerp:()=>m1,max:()=>a1,min:()=>s1,mul:()=>k1,multiply:()=>Xu,negate:()=>d1,normalize:()=>f1,random:()=>b1,rotateX:()=>w1,rotateY:()=>S1,rotateZ:()=>A1,round:()=>o1,scale:()=>l1,scaleAndAdd:()=>c1,set:()=>t1,slerp:()=>p1,sqrDist:()=>F1,sqrLen:()=>B1,squaredDistance:()=>Zu,squaredLength:()=>Yu,str:()=>L1,sub:()=>I1,subtract:()=>Wu,transformMat3:()=>_1,transformMat4:()=>x1,transformQuat:()=>v1,zero:()=>E1});function Vu(){var t=new qe(3);return qe!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t}function Qp(t){var e=new qe(3);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function Gu(t){var e=t[0],r=t[1],n=t[2];return Math.sqrt(e*e+r*r+n*n)}function Jp(t,e,r){var n=new qe(3);return n[0]=t,n[1]=e,n[2]=r,n}function e1(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function t1(t,e,r,n){return t[0]=e,t[1]=r,t[2]=n,t}function r1(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t}function Wu(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t}function Xu(t,e,r){return t[0]=e[0]*r[0],t[1]=e[1]*r[1],t[2]=e[2]*r[2],t}function Ku(t,e,r){return t[0]=e[0]/r[0],t[1]=e[1]/r[1],t[2]=e[2]/r[2],t}function n1(t,e){return t[0]=Math.ceil(e[0]),t[1]=Math.ceil(e[1]),t[2]=Math.ceil(e[2]),t}function i1(t,e){return t[0]=Math.floor(e[0]),t[1]=Math.floor(e[1]),t[2]=Math.floor(e[2]),t}function s1(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 a1(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 o1(t,e){return t[0]=yo(e[0]),t[1]=yo(e[1]),t[2]=yo(e[2]),t}function l1(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t}function c1(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 $u(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2];return Math.sqrt(r*r+n*n+i*i)}function Zu(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2];return r*r+n*n+i*i}function Yu(t){var e=t[0],r=t[1],n=t[2];return e*e+r*r+n*n}function d1(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t}function u1(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t}function f1(t,e){var r=e[0],n=e[1],i=e[2],s=r*r+n*n+i*i;return s>0&&(s=1/Math.sqrt(s)),t[0]=e[0]*s,t[1]=e[1]*s,t[2]=e[2]*s,t}function sc(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function h1(t,e,r){var n=e[0],i=e[1],s=e[2],a=r[0],o=r[1],d=r[2];return t[0]=i*d-s*o,t[1]=s*a-n*d,t[2]=n*o-i*a,t}function m1(t,e,r,n){var i=e[0],s=e[1],a=e[2];return t[0]=i+n*(r[0]-i),t[1]=s+n*(r[1]-s),t[2]=a+n*(r[2]-a),t}function p1(t,e,r,n){var i=Math.acos(Math.min(Math.max(sc(e,r),-1),1)),s=Math.sin(i),a=Math.sin((1-n)*i)/s,o=Math.sin(n*i)/s;return t[0]=a*e[0]+o*r[0],t[1]=a*e[1]+o*r[1],t[2]=a*e[2]+o*r[2],t}function g1(t,e,r,n,i,s){var a=s*s,o=a*(2*s-3)+1,d=a*(s-2)+s,l=a*(s-1),c=a*(3-2*s);return t[0]=e[0]*o+r[0]*d+n[0]*l+i[0]*c,t[1]=e[1]*o+r[1]*d+n[1]*l+i[1]*c,t[2]=e[2]*o+r[2]*d+n[2]*l+i[2]*c,t}function y1(t,e,r,n,i,s){var a=1-s,o=a*a,d=s*s,l=o*a,c=3*s*o,f=3*d*a,u=d*s;return t[0]=e[0]*l+r[0]*c+n[0]*f+i[0]*u,t[1]=e[1]*l+r[1]*c+n[1]*f+i[1]*u,t[2]=e[2]*l+r[2]*c+n[2]*f+i[2]*u,t}function b1(t,e){e=e===void 0?1:e;var r=ic()*2*Math.PI,n=ic()*2-1,i=Math.sqrt(1-n*n)*e;return t[0]=Math.cos(r)*i,t[1]=Math.sin(r)*i,t[2]=n*e,t}function x1(t,e,r){var n=e[0],i=e[1],s=e[2],a=r[3]*n+r[7]*i+r[11]*s+r[15];return a=a||1,t[0]=(r[0]*n+r[4]*i+r[8]*s+r[12])/a,t[1]=(r[1]*n+r[5]*i+r[9]*s+r[13])/a,t[2]=(r[2]*n+r[6]*i+r[10]*s+r[14])/a,t}function _1(t,e,r){var n=e[0],i=e[1],s=e[2];return t[0]=n*r[0]+i*r[3]+s*r[6],t[1]=n*r[1]+i*r[4]+s*r[7],t[2]=n*r[2]+i*r[5]+s*r[8],t}function v1(t,e,r){var n=r[0],i=r[1],s=r[2],a=r[3],o=e[0],d=e[1],l=e[2],c=i*l-s*d,f=s*o-n*l,u=n*d-i*o;return c=c+c,f=f+f,u=u+u,t[0]=o+a*c+i*u-s*f,t[1]=d+a*f+s*c-n*u,t[2]=l+a*u+n*f-i*c,t}function w1(t,e,r,n){var i=[],s=[];return i[0]=e[0]-r[0],i[1]=e[1]-r[1],i[2]=e[2]-r[2],s[0]=i[0],s[1]=i[1]*Math.cos(n)-i[2]*Math.sin(n),s[2]=i[1]*Math.sin(n)+i[2]*Math.cos(n),t[0]=s[0]+r[0],t[1]=s[1]+r[1],t[2]=s[2]+r[2],t}function S1(t,e,r,n){var i=[],s=[];return i[0]=e[0]-r[0],i[1]=e[1]-r[1],i[2]=e[2]-r[2],s[0]=i[2]*Math.sin(n)+i[0]*Math.cos(n),s[1]=i[1],s[2]=i[2]*Math.cos(n)-i[0]*Math.sin(n),t[0]=s[0]+r[0],t[1]=s[1]+r[1],t[2]=s[2]+r[2],t}function A1(t,e,r,n){var i=[],s=[];return i[0]=e[0]-r[0],i[1]=e[1]-r[1],i[2]=e[2]-r[2],s[0]=i[0]*Math.cos(n)-i[1]*Math.sin(n),s[1]=i[0]*Math.sin(n)+i[1]*Math.cos(n),s[2]=i[2],t[0]=s[0]+r[0],t[1]=s[1]+r[1],t[2]=s[2]+r[2],t}function M1(t,e){var r=t[0],n=t[1],i=t[2],s=e[0],a=e[1],o=e[2],d=Math.sqrt((r*r+n*n+i*i)*(s*s+a*a+o*o)),l=d&&sc(t,e)/d;return Math.acos(Math.min(Math.max(l,-1),1))}function E1(t){return t[0]=0,t[1]=0,t[2]=0,t}function L1(t){return"vec3("+t[0]+", "+t[1]+", "+t[2]+")"}function T1(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]}function C1(t,e){var r=t[0],n=t[1],i=t[2],s=e[0],a=e[1],o=e[2];return Math.abs(r-s)<=ee*Math.max(1,Math.abs(r),Math.abs(s))&&Math.abs(n-a)<=ee*Math.max(1,Math.abs(n),Math.abs(a))&&Math.abs(i-o)<=ee*Math.max(1,Math.abs(i),Math.abs(o))}var I1=Wu,k1=Xu,R1=Ku,P1=$u,F1=Zu,z1=Gu,B1=Yu,D1=(function(){var t=Vu();return function(e,r,n,i,s,a){var o,d;for(r||(r=3),n||(n=0),i?d=Math.min(i*r+n,e.length):d=e.length,o=n;o<d;o+=r)t[0]=e[o],t[1]=e[o+1],t[2]=e[o+2],s(t,t,a),e[o]=t[0],e[o+1]=t[1],e[o+2]=t[2];return e}})();var bo=class{constructor(){this._position=B.create();this._angles=B.create();this._bobAngles=B.create();this._bobOffset=B.create();this._kickAngles=B.create();this._rollAngle=0;this._fov=90;this._aspect=1;this._near=.1;this._far=1e3;this._viewMatrix=de.create();this._projectionMatrix=de.create();this._viewProjectionMatrix=de.create();this._dirty=!0}get position(){return this._position}set position(e){B.equals(this._position,e)||(B.copy(this._position,e),this._dirty=!0,this.triggerMoveEvent())}get angles(){return this._angles}set angles(e){B.equals(this._angles,e)||(B.copy(this._angles,e),this._dirty=!0,this.triggerMoveEvent())}get bobAngles(){return this._bobAngles}set bobAngles(e){B.copy(this._bobAngles,e),this._dirty=!0}get kickAngles(){return this._kickAngles}set kickAngles(e){B.copy(this._kickAngles,e),this._dirty=!0}get bobOffset(){return this._bobOffset}set bobOffset(e){B.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}setPosition(e,r,n){let i=B.fromValues(e,r,n);B.equals(this._position,i)||(B.copy(this._position,i),this._dirty=!0,this.triggerMoveEvent())}setRotation(e,r,n){let i=B.fromValues(e,r,n);B.equals(this._angles,i)||(B.copy(this._angles,i),this._dirty=!0,this.triggerMoveEvent())}setFov(e){this.fov=e}setAspectRatio(e){this.aspect=e}lookAt(e){let r=B.create();if(B.subtract(r,e,this._position),B.length(r)<.001)return;let i=Math.atan2(r[1],r[0])*qo,s=Math.hypot(r[0],r[1]),a=-Math.atan2(r[2],s)*qo;this.setRotation(a,i,0)}triggerMoveEvent(){this.onCameraMove&&this.onCameraMove({position:B.clone(this._position),angles:B.clone(this._angles)})}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=de.create();return de.perspective(r,e*_n,this._aspect,this._near,this._far),r}screenToWorldRay(e,r){let n=e*2-1,i=1-r*2,s=B.fromValues(n,i,-1),a=B.fromValues(n,i,1),o=de.create();de.invert(o,this.viewProjectionMatrix);let d=B.create(),l=B.create();B.transformMat4(d,s,o),B.transformMat4(l,a,o);let c=B.create();return B.subtract(c,l,d),B.normalize(c,c),{origin:B.clone(this._position),direction:c}}updateMatrices(){if(!this._dirty)return;de.perspective(this._projectionMatrix,this._fov*_n,this._aspect,this._near,this._far);let e=de.fromValues(0,0,-1,0,-1,0,0,0,0,1,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],i=this._angles[2]+this._bobAngles[2]+this._kickAngles[2]+this._rollAngle,s=r*_n,a=n*_n,o=i*_n,d=de.create();de.identity(d),de.rotateZ(d,d,-a),de.rotateY(d,d,-s),de.rotateX(d,d,-o);let l=de.create();de.multiply(l,e,d);let c=B.add(B.create(),this._position,this._bobOffset),f=B.negate(B.create(),c),u=B.create();B.transformMat4(u,f,d);let h=B.fromValues(u[1]?-u[1]:0,u[2]||0,u[0]?-u[0]:0);de.copy(this._viewMatrix,l),this._viewMatrix[12]=h[0],this._viewMatrix[13]=h[1],this._viewMatrix[14]=h[2],de.multiply(this._viewProjectionMatrix,this._projectionMatrix,this._viewMatrix),this._dirty=!1}};var O1=[.2,.2,.2],N1={x:0,y:0,z:1},U1=[.8,.8,.8];function ac(t,e,r){return t+(e-t)*r}function ni(t,e,r){return{x:ac(t.x,e.x,r),y:ac(t.y,e.y,r),z:ac(t.z,e.z,r)}}function ri(t){return t<0?0:t>1?1:t}function oc(t){let e=[],r=[];for(let n of t.triangles){let i=e.length,[s,a,o]=n.indices,d=t.texCoords[s],l=t.texCoords[a],c=t.texCoords[o];if(!d||!l||!c)throw new Error(`Missing texCoord for triangle in surface ${t.name}`);e.push({vertexIndex:s,texCoord:[d.s,1-d.t]},{vertexIndex:a,texCoord:[l.s,1-l.t]},{vertexIndex:o,texCoord:[c.s,1-c.t]}),r.push(i,i+1,i+2)}return{vertices:e,indices:new Uint16Array(r)}}function H1(t,e,r){let n=r?.ambient??O1,i=r?.directional??{direction:N1,color:U1},s=At(t),a=At(i.direction),o=ri(s.x*a.x+s.y*a.y+s.z*a.z),d=n[0]+i.color[0]*o,l=n[1]+i.color[1]*o,c=n[2]+i.color[2]*o;if(r?.dynamicLights){let f=r.modelMatrix?ad(r.modelMatrix,e):e;for(let u of r.dynamicLights){let h=f.x-u.origin.x,m=f.y-u.origin.y,g=f.z-u.origin.z,p=h*h+m*m+g*g,y=u.radius*u.radius;if(p<y&&y>0){let _=1-Math.sqrt(p)/u.radius,x=Math.sqrt(p),b=x>0?ri(-(h*s.x+m*s.y+g*s.z)/x):0,v=ri(_*b);d+=u.color[0]*v,l+=u.color[1]*v,c+=u.color[2]*v}}}return[ri(d),ri(l),ri(c)]}function lc(t,e,r,n){let i=t.vertices[r.frame0],s=t.vertices[r.frame1];if(!i||!s)throw new Error("Requested MD3 frames are out of range");let a=new Float32Array(e.vertices.length*12);return e.vertices.forEach((o,d)=>{let l=i[o.vertexIndex],c=s[o.vertexIndex];if(!l||!c)throw new Error(`Vertex index ${o.vertexIndex} missing for frame`);let f=ni(l.position,c.position,r.lerp),u=At(ni(l.normal,c.normal,r.lerp)),h=H1(u,f,n),m=d*12;a[m]=f.x,a[m+1]=f.y,a[m+2]=f.z,a[m+3]=u.x,a[m+4]=u.y,a[m+5]=u.z,a[m+6]=o.texCoord[0],a[m+7]=o.texCoord[1],a[m+8]=h[0],a[m+9]=h[1],a[m+10]=h[2],a[m+11]=1}),a}function qu(t,e,r){let n=t.tags[0];if(!n)return null;let i=n.findIndex(g=>g.name===r);if(i===-1)return null;let s=t.tags[e.frame0]?.[i],a=t.tags[e.frame1]?.[i];if(!s||!a)throw new Error(`Tag ${r} is missing for one of the interpolated frames`);let o=ni(s.origin,a.origin,e.lerp),d=At(ni(s.axis[0],a.axis[0],e.lerp)),l=At(ni(s.axis[1],a.axis[1],e.lerp)),c=At(ni(s.axis[2],a.axis[2],e.lerp)),f=d,u=At({x:l.x-f.x*(f.x*l.x+f.y*l.y+f.z*l.z),y:l.y-f.y*(f.x*l.x+f.y*l.y+f.z*l.z),z:l.z-f.z*(f.x*l.x+f.y*l.y+f.z*l.z)}),h=At({x:f.y*u.z-f.z*u.y,y:f.z*u.x-f.x*u.z,z:f.x*u.y-f.y*u.x}),m=[f,u,h];return{origin:o,axis:m,matrix:od(o,m)}}var cc=`#version 300 es
479
+ }`;function ip(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 Jl(t,e,r){return t+(e-t)*r}function Pu(t,e,r){return{x:Jl(t.x,e.x,r),y:Jl(t.y,e.y,r),z:Jl(t.z,e.z,r)}}function sp(t,e,r){return[t/r.skinWidth,1-e/r.skinHeight]}function rc(t){if(t.glCommands.length===0){let n=[],i=[];return t.triangles.forEach(s=>{let a=n.length;for(let o=0;o<3;o+=1){let d=s.vertexIndices[o],l=s.texCoordIndices[o],c=t.texCoords[l];n.push({vertexIndex:d,texCoord:sp(c.s,c.t,t.header)})}i.push(a,a+1,a+2)}),{vertices:n,indices:new Uint16Array(i)}}let e=[],r=[];for(let n of t.glCommands){let i=e.length;if(e.push(...n.vertices.map(s=>({vertexIndex:s.vertexIndex,texCoord:[s.s,1-s.t]}))),n.mode==="strip")for(let s=0;s<n.vertices.length-2;s+=1){let a=s%2===0,o=i+s+(a?0:1),d=i+s+(a?1:0),l=i+s+2;r.push(o,d,l)}else for(let s=1;s<n.vertices.length-1;s+=1)r.push(i,i+s,i+s+1)}return{vertices:e,indices:new Uint16Array(r)}}function nc(t,e,r){let{frame0:n,frame1:i,lerp:s}=r,a=t.frames[n],o=t.frames[i];if(!a||!o)throw new Error("Requested MD2 frames are out of range");let d=new Float32Array(e.vertices.length*8);return e.vertices.forEach((l,c)=>{let f=a.vertices[l.vertexIndex],u=o.vertices[l.vertexIndex];if(!f||!u)throw new Error("MD2 vertex index out of range for frame");let h=Pu(f.position,u.position,s),m=ip(Pu(f.normal,u.normal,s)),g=c*8;d[g]=h.x,d[g+1]=h.y,d[g+2]=h.z,d[g+3]=m.x,d[g+4]=m.y,d[g+5]=m.z,d[g+6]=l.texCoord[0],d[g+7]=l.texCoord[1]}),d}var po=class{constructor(e,r,n){this.gl=e,this.geometry=rc(r),this.vertexBuffer=new Ce(e,e.STATIC_DRAW),this.indexBuffer=new _e(e,e.STATIC_DRAW),this.vertexArray=new Pe(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=nc(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(),this.wireframeIndexBuffer?.dispose()}},go=class{constructor(e){this.uniformDlights=[];this.gl=e,this.program=Te.create(e,{vertex:ec,fragment:tc},{a_position:0,a_normal:1,a_texCoord:2}),this.uniformMvp=this.program.getUniformLocation("u_modelViewProjection"),this.uniformModelMatrix=this.program.getUniformLocation("u_modelMatrix"),this.uniformLightDir=this.program.getUniformLocation("u_lightDir"),this.uniformAmbient=this.program.getUniformLocation("u_ambient"),this.uniformTint=this.program.getUniformLocation("u_tint"),this.uniformDiffuse=this.program.getUniformLocation("u_diffuseMap"),this.uniformRenderMode=this.program.getUniformLocation("u_renderMode"),this.uniformSolidColor=this.program.getUniformLocation("u_solidColor"),this.uniformNumDlights=this.program.getUniformLocation("u_numDlights");for(let r=0;r<ur;r++)this.uniformDlights.push({pos:this.program.getUniformLocation(`u_dlights[${r}].position`),color:this.program.getUniformLocation(`u_dlights[${r}].color`),intensity:this.program.getUniformLocation(`u_dlights[${r}].intensity`)});this.uniformBrightness=this.program.getUniformLocation("u_brightness"),this.uniformGamma=this.program.getUniformLocation("u_gamma"),this.uniformFullbright=this.program.getUniformLocation("u_fullbright"),this.uniformGlobalAmbient=this.program.getUniformLocation("u_globalAmbient")}get shaderSize(){return this.program.sourceSize}bind(e){let{modelViewProjection:r,modelMatrix:n,lightDirection:i=[0,0,1],ambientLight:s=.2,tint:a=[1,1,1,1],diffuseSampler:o=0,dlights:d=[],renderMode:l,brightness:c=1,gamma:f=1,fullbright:u=!1,ambient:h=0}=e,m=new Float32Array(i),g=new Float32Array(a);this.program.use(),this.gl.uniformMatrix4fv(this.uniformMvp,!1,r),n?this.gl.uniformMatrix4fv(this.uniformModelMatrix,!1,n):this.gl.uniformMatrix4fv(this.uniformModelMatrix,!1,new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])),this.gl.uniform3fv(this.uniformLightDir,m),this.gl.uniform1f(this.uniformAmbient,s),this.gl.uniform4fv(this.uniformTint,g),this.gl.uniform1i(this.uniformDiffuse,o);let p=0,y=[1,1,1,1];l&&(l.mode==="solid"||l.mode==="wireframe"?p=1:l.mode==="solid-faceted"&&(p=2),l.color?y=[...l.color]:l.generateRandomColor),this.gl.uniform1i(this.uniformRenderMode,p),this.gl.uniform4f(this.uniformSolidColor,y[0],y[1],y[2],y[3]);let _=Math.min(d.length,ur);this.gl.uniform1i(this.uniformNumDlights,_);for(let x=0;x<_;x++){let b=d[x];this.gl.uniform3f(this.uniformDlights[x].pos,b.origin.x,b.origin.y,b.origin.z),this.gl.uniform3f(this.uniformDlights[x].color,b.color.x,b.color.y,b.color.z),this.gl.uniform1f(this.uniformDlights[x].intensity,b.intensity)}this.gl.uniform1f(this.uniformBrightness,c),this.gl.uniform1f(this.uniformGamma,f),this.gl.uniform1i(this.uniformFullbright,u?1:0),this.gl.uniform1f(this.uniformGlobalAmbient,h)}draw(e,r){if(e.vertexArray.bind(),r&&r.mode==="wireframe"){if(!e.wireframeIndexBuffer){e.wireframeIndexBuffer=new _e(this.gl,this.gl.STATIC_DRAW);let n=ti(e.geometry.indices);e.wireframeIndexBuffer.upload(n),e.wireframeIndexCount=n.length}e.wireframeIndexBuffer.bind(),this.gl.drawElements(this.gl.LINES,e.wireframeIndexCount,this.gl.UNSIGNED_SHORT,0)}else e.indexBuffer.bind(),this.gl.drawElements(this.gl.TRIANGLES,e.indexCount,this.gl.UNSIGNED_SHORT,0)}dispose(){this.program.dispose()}};var ee=1e-6,qe=typeof Float32Array<"u"?Float32Array:Array,ic=Math.random;function yo(t){return t>=0?Math.round(t):t%.5===0?Math.floor(t):Math.round(t)}var H2=Math.PI/180,V2=180/Math.PI;var de={};$o(de,{add:()=>Wp,adjoint:()=>hp,clone:()=>op,copy:()=>lp,create:()=>ap,decompose:()=>Ip,determinant:()=>mp,equals:()=>Zp,exactEquals:()=>$p,frob:()=>Gp,fromQuat:()=>Pp,fromQuat2:()=>Lp,fromRotation:()=>Sp,fromRotationTranslation:()=>Ou,fromRotationTranslationScale:()=>kp,fromRotationTranslationScaleOrigin:()=>Rp,fromScaling:()=>wp,fromTranslation:()=>vp,fromValues:()=>cp,fromXRotation:()=>Ap,fromYRotation:()=>Mp,fromZRotation:()=>Ep,frustum:()=>Fp,getRotation:()=>Cp,getScaling:()=>zu,getTranslation:()=>Tp,identity:()=>Bu,invert:()=>fp,lookAt:()=>Up,mul:()=>Yp,multiply:()=>Du,multiplyScalar:()=>Xp,multiplyScalarAndAdd:()=>Kp,ortho:()=>zp,orthoNO:()=>Uu,orthoZO:()=>Np,perspective:()=>Bp,perspectiveFromFieldOfView:()=>Op,perspectiveNO:()=>Nu,perspectiveZO:()=>Dp,rotate:()=>yp,rotateX:()=>bp,rotateY:()=>xp,rotateZ:()=>_p,scale:()=>gp,set:()=>dp,str:()=>Vp,sub:()=>qp,subtract:()=>Hu,targetTo:()=>Hp,translate:()=>pp,transpose:()=>up});function ap(){var t=new qe(16);return qe!=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 op(t){var e=new qe(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 lp(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 cp(t,e,r,n,i,s,a,o,d,l,c,f,u,h,m,g){var p=new qe(16);return p[0]=t,p[1]=e,p[2]=r,p[3]=n,p[4]=i,p[5]=s,p[6]=a,p[7]=o,p[8]=d,p[9]=l,p[10]=c,p[11]=f,p[12]=u,p[13]=h,p[14]=m,p[15]=g,p}function dp(t,e,r,n,i,s,a,o,d,l,c,f,u,h,m,g,p){return t[0]=e,t[1]=r,t[2]=n,t[3]=i,t[4]=s,t[5]=a,t[6]=o,t[7]=d,t[8]=l,t[9]=c,t[10]=f,t[11]=u,t[12]=h,t[13]=m,t[14]=g,t[15]=p,t}function Bu(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 up(t,e){if(t===e){var r=e[1],n=e[2],i=e[3],s=e[6],a=e[7],o=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]=s,t[11]=e[14],t[12]=i,t[13]=a,t[14]=o}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 fp(t,e){var r=e[0],n=e[1],i=e[2],s=e[3],a=e[4],o=e[5],d=e[6],l=e[7],c=e[8],f=e[9],u=e[10],h=e[11],m=e[12],g=e[13],p=e[14],y=e[15],_=r*o-n*a,x=r*d-i*a,b=r*l-s*a,v=n*d-i*o,S=n*l-s*o,w=i*l-s*d,L=c*g-f*m,T=c*p-u*m,A=c*y-h*m,I=f*p-u*g,R=f*y-h*g,F=u*y-h*p,k=_*F-x*R+b*I+v*A-S*T+w*L;return k?(k=1/k,t[0]=(o*F-d*R+l*I)*k,t[1]=(i*R-n*F-s*I)*k,t[2]=(g*w-p*S+y*v)*k,t[3]=(u*S-f*w-h*v)*k,t[4]=(d*A-a*F-l*T)*k,t[5]=(r*F-i*A+s*T)*k,t[6]=(p*b-m*w-y*x)*k,t[7]=(c*w-u*b+h*x)*k,t[8]=(a*R-o*A+l*L)*k,t[9]=(n*A-r*R-s*L)*k,t[10]=(m*S-g*b+y*_)*k,t[11]=(f*b-c*S-h*_)*k,t[12]=(o*T-a*I-d*L)*k,t[13]=(r*I-n*T+i*L)*k,t[14]=(g*x-m*v-p*_)*k,t[15]=(c*v-f*x+u*_)*k,t):null}function hp(t,e){var r=e[0],n=e[1],i=e[2],s=e[3],a=e[4],o=e[5],d=e[6],l=e[7],c=e[8],f=e[9],u=e[10],h=e[11],m=e[12],g=e[13],p=e[14],y=e[15],_=r*o-n*a,x=r*d-i*a,b=r*l-s*a,v=n*d-i*o,S=n*l-s*o,w=i*l-s*d,L=c*g-f*m,T=c*p-u*m,A=c*y-h*m,I=f*p-u*g,R=f*y-h*g,F=u*y-h*p;return t[0]=o*F-d*R+l*I,t[1]=i*R-n*F-s*I,t[2]=g*w-p*S+y*v,t[3]=u*S-f*w-h*v,t[4]=d*A-a*F-l*T,t[5]=r*F-i*A+s*T,t[6]=p*b-m*w-y*x,t[7]=c*w-u*b+h*x,t[8]=a*R-o*A+l*L,t[9]=n*A-r*R-s*L,t[10]=m*S-g*b+y*_,t[11]=f*b-c*S-h*_,t[12]=o*T-a*I-d*L,t[13]=r*I-n*T+i*L,t[14]=g*x-m*v-p*_,t[15]=c*v-f*x+u*_,t}function mp(t){var e=t[0],r=t[1],n=t[2],i=t[3],s=t[4],a=t[5],o=t[6],d=t[7],l=t[8],c=t[9],f=t[10],u=t[11],h=t[12],m=t[13],g=t[14],p=t[15],y=e*a-r*s,_=e*o-n*s,x=r*o-n*a,b=l*m-c*h,v=l*g-f*h,S=c*g-f*m,w=e*S-r*v+n*b,L=s*S-a*v+o*b,T=l*x-c*_+f*y,A=h*x-m*_+g*y;return d*w-i*L+p*T-u*A}function Du(t,e,r){var n=e[0],i=e[1],s=e[2],a=e[3],o=e[4],d=e[5],l=e[6],c=e[7],f=e[8],u=e[9],h=e[10],m=e[11],g=e[12],p=e[13],y=e[14],_=e[15],x=r[0],b=r[1],v=r[2],S=r[3];return t[0]=x*n+b*o+v*f+S*g,t[1]=x*i+b*d+v*u+S*p,t[2]=x*s+b*l+v*h+S*y,t[3]=x*a+b*c+v*m+S*_,x=r[4],b=r[5],v=r[6],S=r[7],t[4]=x*n+b*o+v*f+S*g,t[5]=x*i+b*d+v*u+S*p,t[6]=x*s+b*l+v*h+S*y,t[7]=x*a+b*c+v*m+S*_,x=r[8],b=r[9],v=r[10],S=r[11],t[8]=x*n+b*o+v*f+S*g,t[9]=x*i+b*d+v*u+S*p,t[10]=x*s+b*l+v*h+S*y,t[11]=x*a+b*c+v*m+S*_,x=r[12],b=r[13],v=r[14],S=r[15],t[12]=x*n+b*o+v*f+S*g,t[13]=x*i+b*d+v*u+S*p,t[14]=x*s+b*l+v*h+S*y,t[15]=x*a+b*c+v*m+S*_,t}function pp(t,e,r){var n=r[0],i=r[1],s=r[2],a,o,d,l,c,f,u,h,m,g,p,y;return e===t?(t[12]=e[0]*n+e[4]*i+e[8]*s+e[12],t[13]=e[1]*n+e[5]*i+e[9]*s+e[13],t[14]=e[2]*n+e[6]*i+e[10]*s+e[14],t[15]=e[3]*n+e[7]*i+e[11]*s+e[15]):(a=e[0],o=e[1],d=e[2],l=e[3],c=e[4],f=e[5],u=e[6],h=e[7],m=e[8],g=e[9],p=e[10],y=e[11],t[0]=a,t[1]=o,t[2]=d,t[3]=l,t[4]=c,t[5]=f,t[6]=u,t[7]=h,t[8]=m,t[9]=g,t[10]=p,t[11]=y,t[12]=a*n+c*i+m*s+e[12],t[13]=o*n+f*i+g*s+e[13],t[14]=d*n+u*i+p*s+e[14],t[15]=l*n+h*i+y*s+e[15]),t}function gp(t,e,r){var n=r[0],i=r[1],s=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]*i,t[5]=e[5]*i,t[6]=e[6]*i,t[7]=e[7]*i,t[8]=e[8]*s,t[9]=e[9]*s,t[10]=e[10]*s,t[11]=e[11]*s,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}function yp(t,e,r,n){var i=n[0],s=n[1],a=n[2],o=Math.sqrt(i*i+s*s+a*a),d,l,c,f,u,h,m,g,p,y,_,x,b,v,S,w,L,T,A,I,R,F,k,V;return o<ee?null:(o=1/o,i*=o,s*=o,a*=o,d=Math.sin(r),l=Math.cos(r),c=1-l,f=e[0],u=e[1],h=e[2],m=e[3],g=e[4],p=e[5],y=e[6],_=e[7],x=e[8],b=e[9],v=e[10],S=e[11],w=i*i*c+l,L=s*i*c+a*d,T=a*i*c-s*d,A=i*s*c-a*d,I=s*s*c+l,R=a*s*c+i*d,F=i*a*c+s*d,k=s*a*c-i*d,V=a*a*c+l,t[0]=f*w+g*L+x*T,t[1]=u*w+p*L+b*T,t[2]=h*w+y*L+v*T,t[3]=m*w+_*L+S*T,t[4]=f*A+g*I+x*R,t[5]=u*A+p*I+b*R,t[6]=h*A+y*I+v*R,t[7]=m*A+_*I+S*R,t[8]=f*F+g*k+x*V,t[9]=u*F+p*k+b*V,t[10]=h*F+y*k+v*V,t[11]=m*F+_*k+S*V,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t)}function bp(t,e,r){var n=Math.sin(r),i=Math.cos(r),s=e[4],a=e[5],o=e[6],d=e[7],l=e[8],c=e[9],f=e[10],u=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]=s*i+l*n,t[5]=a*i+c*n,t[6]=o*i+f*n,t[7]=d*i+u*n,t[8]=l*i-s*n,t[9]=c*i-a*n,t[10]=f*i-o*n,t[11]=u*i-d*n,t}function xp(t,e,r){var n=Math.sin(r),i=Math.cos(r),s=e[0],a=e[1],o=e[2],d=e[3],l=e[8],c=e[9],f=e[10],u=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]=s*i-l*n,t[1]=a*i-c*n,t[2]=o*i-f*n,t[3]=d*i-u*n,t[8]=s*n+l*i,t[9]=a*n+c*i,t[10]=o*n+f*i,t[11]=d*n+u*i,t}function _p(t,e,r){var n=Math.sin(r),i=Math.cos(r),s=e[0],a=e[1],o=e[2],d=e[3],l=e[4],c=e[5],f=e[6],u=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]=s*i+l*n,t[1]=a*i+c*n,t[2]=o*i+f*n,t[3]=d*i+u*n,t[4]=l*i-s*n,t[5]=c*i-a*n,t[6]=f*i-o*n,t[7]=u*i-d*n,t}function vp(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 wp(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 Sp(t,e,r){var n=r[0],i=r[1],s=r[2],a=Math.sqrt(n*n+i*i+s*s),o,d,l;return a<ee?null:(a=1/a,n*=a,i*=a,s*=a,o=Math.sin(e),d=Math.cos(e),l=1-d,t[0]=n*n*l+d,t[1]=i*n*l+s*o,t[2]=s*n*l-i*o,t[3]=0,t[4]=n*i*l-s*o,t[5]=i*i*l+d,t[6]=s*i*l+n*o,t[7]=0,t[8]=n*s*l+i*o,t[9]=i*s*l-n*o,t[10]=s*s*l+d,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t)}function Ap(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 Mp(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 Ep(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 Ou(t,e,r){var n=e[0],i=e[1],s=e[2],a=e[3],o=n+n,d=i+i,l=s+s,c=n*o,f=n*d,u=n*l,h=i*d,m=i*l,g=s*l,p=a*o,y=a*d,_=a*l;return t[0]=1-(h+g),t[1]=f+_,t[2]=u-y,t[3]=0,t[4]=f-_,t[5]=1-(c+g),t[6]=m+p,t[7]=0,t[8]=u+y,t[9]=m-p,t[10]=1-(c+h),t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t}function Lp(t,e){var r=new qe(3),n=-e[0],i=-e[1],s=-e[2],a=e[3],o=e[4],d=e[5],l=e[6],c=e[7],f=n*n+i*i+s*s+a*a;return f>0?(r[0]=(o*a+c*n+d*s-l*i)*2/f,r[1]=(d*a+c*i+l*n-o*s)*2/f,r[2]=(l*a+c*s+o*i-d*n)*2/f):(r[0]=(o*a+c*n+d*s-l*i)*2,r[1]=(d*a+c*i+l*n-o*s)*2,r[2]=(l*a+c*s+o*i-d*n)*2),Ou(t,e,r),t}function Tp(t,e){return t[0]=e[12],t[1]=e[13],t[2]=e[14],t}function zu(t,e){var r=e[0],n=e[1],i=e[2],s=e[4],a=e[5],o=e[6],d=e[8],l=e[9],c=e[10];return t[0]=Math.sqrt(r*r+n*n+i*i),t[1]=Math.sqrt(s*s+a*a+o*o),t[2]=Math.sqrt(d*d+l*l+c*c),t}function Cp(t,e){var r=new qe(3);zu(r,e);var n=1/r[0],i=1/r[1],s=1/r[2],a=e[0]*n,o=e[1]*i,d=e[2]*s,l=e[4]*n,c=e[5]*i,f=e[6]*s,u=e[8]*n,h=e[9]*i,m=e[10]*s,g=a+c+m,p=0;return g>0?(p=Math.sqrt(g+1)*2,t[3]=.25*p,t[0]=(f-h)/p,t[1]=(u-d)/p,t[2]=(o-l)/p):a>c&&a>m?(p=Math.sqrt(1+a-c-m)*2,t[3]=(f-h)/p,t[0]=.25*p,t[1]=(o+l)/p,t[2]=(u+d)/p):c>m?(p=Math.sqrt(1+c-a-m)*2,t[3]=(u-d)/p,t[0]=(o+l)/p,t[1]=.25*p,t[2]=(f+h)/p):(p=Math.sqrt(1+m-a-c)*2,t[3]=(o-l)/p,t[0]=(u+d)/p,t[1]=(f+h)/p,t[2]=.25*p),t}function Ip(t,e,r,n){e[0]=n[12],e[1]=n[13],e[2]=n[14];var i=n[0],s=n[1],a=n[2],o=n[4],d=n[5],l=n[6],c=n[8],f=n[9],u=n[10];r[0]=Math.sqrt(i*i+s*s+a*a),r[1]=Math.sqrt(o*o+d*d+l*l),r[2]=Math.sqrt(c*c+f*f+u*u);var h=1/r[0],m=1/r[1],g=1/r[2],p=i*h,y=s*m,_=a*g,x=o*h,b=d*m,v=l*g,S=c*h,w=f*m,L=u*g,T=p+b+L,A=0;return T>0?(A=Math.sqrt(T+1)*2,t[3]=.25*A,t[0]=(v-w)/A,t[1]=(S-_)/A,t[2]=(y-x)/A):p>b&&p>L?(A=Math.sqrt(1+p-b-L)*2,t[3]=(v-w)/A,t[0]=.25*A,t[1]=(y+x)/A,t[2]=(S+_)/A):b>L?(A=Math.sqrt(1+b-p-L)*2,t[3]=(S-_)/A,t[0]=(y+x)/A,t[1]=.25*A,t[2]=(v+w)/A):(A=Math.sqrt(1+L-p-b)*2,t[3]=(y-x)/A,t[0]=(S+_)/A,t[1]=(v+w)/A,t[2]=.25*A),t}function kp(t,e,r,n){var i=e[0],s=e[1],a=e[2],o=e[3],d=i+i,l=s+s,c=a+a,f=i*d,u=i*l,h=i*c,m=s*l,g=s*c,p=a*c,y=o*d,_=o*l,x=o*c,b=n[0],v=n[1],S=n[2];return t[0]=(1-(m+p))*b,t[1]=(u+x)*b,t[2]=(h-_)*b,t[3]=0,t[4]=(u-x)*v,t[5]=(1-(f+p))*v,t[6]=(g+y)*v,t[7]=0,t[8]=(h+_)*S,t[9]=(g-y)*S,t[10]=(1-(f+m))*S,t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t}function Rp(t,e,r,n,i){var s=e[0],a=e[1],o=e[2],d=e[3],l=s+s,c=a+a,f=o+o,u=s*l,h=s*c,m=s*f,g=a*c,p=a*f,y=o*f,_=d*l,x=d*c,b=d*f,v=n[0],S=n[1],w=n[2],L=i[0],T=i[1],A=i[2],I=(1-(g+y))*v,R=(h+b)*v,F=(m-x)*v,k=(h-b)*S,V=(1-(u+y))*S,se=(p+_)*S,Ur=(m+x)*w,js=(p-_)*w,pi=(1-(u+g))*w;return t[0]=I,t[1]=R,t[2]=F,t[3]=0,t[4]=k,t[5]=V,t[6]=se,t[7]=0,t[8]=Ur,t[9]=js,t[10]=pi,t[11]=0,t[12]=r[0]+L-(I*L+k*T+Ur*A),t[13]=r[1]+T-(R*L+V*T+js*A),t[14]=r[2]+A-(F*L+se*T+pi*A),t[15]=1,t}function Pp(t,e){var r=e[0],n=e[1],i=e[2],s=e[3],a=r+r,o=n+n,d=i+i,l=r*a,c=n*a,f=n*o,u=i*a,h=i*o,m=i*d,g=s*a,p=s*o,y=s*d;return t[0]=1-f-m,t[1]=c+y,t[2]=u-p,t[3]=0,t[4]=c-y,t[5]=1-l-m,t[6]=h+g,t[7]=0,t[8]=u+p,t[9]=h-g,t[10]=1-l-f,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function Fp(t,e,r,n,i,s,a){var o=1/(r-e),d=1/(i-n),l=1/(s-a);return t[0]=s*2*o,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=s*2*d,t[6]=0,t[7]=0,t[8]=(r+e)*o,t[9]=(i+n)*d,t[10]=(a+s)*l,t[11]=-1,t[12]=0,t[13]=0,t[14]=a*s*2*l,t[15]=0,t}function Nu(t,e,r,n,i){var s=1/Math.tan(e/2);if(t[0]=s/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=s,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,i!=null&&i!==1/0){var a=1/(n-i);t[10]=(i+n)*a,t[14]=2*i*n*a}else t[10]=-1,t[14]=-2*n;return t}var Bp=Nu;function Dp(t,e,r,n,i){var s=1/Math.tan(e/2);if(t[0]=s/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=s,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,i!=null&&i!==1/0){var a=1/(n-i);t[10]=i*a,t[14]=i*n*a}else t[10]=-1,t[14]=-n;return t}function Op(t,e,r,n){var i=Math.tan(e.upDegrees*Math.PI/180),s=Math.tan(e.downDegrees*Math.PI/180),a=Math.tan(e.leftDegrees*Math.PI/180),o=Math.tan(e.rightDegrees*Math.PI/180),d=2/(a+o),l=2/(i+s);return t[0]=d,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=l,t[6]=0,t[7]=0,t[8]=-((a-o)*d*.5),t[9]=(i-s)*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 Uu(t,e,r,n,i,s,a){var o=1/(e-r),d=1/(n-i),l=1/(s-a);return t[0]=-2*o,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*d,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*l,t[11]=0,t[12]=(e+r)*o,t[13]=(i+n)*d,t[14]=(a+s)*l,t[15]=1,t}var zp=Uu;function Np(t,e,r,n,i,s,a){var o=1/(e-r),d=1/(n-i),l=1/(s-a);return t[0]=-2*o,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*d,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=l,t[11]=0,t[12]=(e+r)*o,t[13]=(i+n)*d,t[14]=s*l,t[15]=1,t}function Up(t,e,r,n){var i,s,a,o,d,l,c,f,u,h,m=e[0],g=e[1],p=e[2],y=n[0],_=n[1],x=n[2],b=r[0],v=r[1],S=r[2];return Math.abs(m-b)<ee&&Math.abs(g-v)<ee&&Math.abs(p-S)<ee?Bu(t):(c=m-b,f=g-v,u=p-S,h=1/Math.sqrt(c*c+f*f+u*u),c*=h,f*=h,u*=h,i=_*u-x*f,s=x*c-y*u,a=y*f-_*c,h=Math.sqrt(i*i+s*s+a*a),h?(h=1/h,i*=h,s*=h,a*=h):(i=0,s=0,a=0),o=f*a-u*s,d=u*i-c*a,l=c*s-f*i,h=Math.sqrt(o*o+d*d+l*l),h?(h=1/h,o*=h,d*=h,l*=h):(o=0,d=0,l=0),t[0]=i,t[1]=o,t[2]=c,t[3]=0,t[4]=s,t[5]=d,t[6]=f,t[7]=0,t[8]=a,t[9]=l,t[10]=u,t[11]=0,t[12]=-(i*m+s*g+a*p),t[13]=-(o*m+d*g+l*p),t[14]=-(c*m+f*g+u*p),t[15]=1,t)}function Hp(t,e,r,n){var i=e[0],s=e[1],a=e[2],o=n[0],d=n[1],l=n[2],c=i-r[0],f=s-r[1],u=a-r[2],h=c*c+f*f+u*u;h>0&&(h=1/Math.sqrt(h),c*=h,f*=h,u*=h);var m=d*u-l*f,g=l*c-o*u,p=o*f-d*c;return h=m*m+g*g+p*p,h>0&&(h=1/Math.sqrt(h),m*=h,g*=h,p*=h),t[0]=m,t[1]=g,t[2]=p,t[3]=0,t[4]=f*p-u*g,t[5]=u*m-c*p,t[6]=c*g-f*m,t[7]=0,t[8]=c,t[9]=f,t[10]=u,t[11]=0,t[12]=i,t[13]=s,t[14]=a,t[15]=1,t}function Vp(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 Gp(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 Wp(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 Hu(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 Xp(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 Kp(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 $p(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 Zp(t,e){var r=t[0],n=t[1],i=t[2],s=t[3],a=t[4],o=t[5],d=t[6],l=t[7],c=t[8],f=t[9],u=t[10],h=t[11],m=t[12],g=t[13],p=t[14],y=t[15],_=e[0],x=e[1],b=e[2],v=e[3],S=e[4],w=e[5],L=e[6],T=e[7],A=e[8],I=e[9],R=e[10],F=e[11],k=e[12],V=e[13],se=e[14],Ur=e[15];return Math.abs(r-_)<=ee*Math.max(1,Math.abs(r),Math.abs(_))&&Math.abs(n-x)<=ee*Math.max(1,Math.abs(n),Math.abs(x))&&Math.abs(i-b)<=ee*Math.max(1,Math.abs(i),Math.abs(b))&&Math.abs(s-v)<=ee*Math.max(1,Math.abs(s),Math.abs(v))&&Math.abs(a-S)<=ee*Math.max(1,Math.abs(a),Math.abs(S))&&Math.abs(o-w)<=ee*Math.max(1,Math.abs(o),Math.abs(w))&&Math.abs(d-L)<=ee*Math.max(1,Math.abs(d),Math.abs(L))&&Math.abs(l-T)<=ee*Math.max(1,Math.abs(l),Math.abs(T))&&Math.abs(c-A)<=ee*Math.max(1,Math.abs(c),Math.abs(A))&&Math.abs(f-I)<=ee*Math.max(1,Math.abs(f),Math.abs(I))&&Math.abs(u-R)<=ee*Math.max(1,Math.abs(u),Math.abs(R))&&Math.abs(h-F)<=ee*Math.max(1,Math.abs(h),Math.abs(F))&&Math.abs(m-k)<=ee*Math.max(1,Math.abs(m),Math.abs(k))&&Math.abs(g-V)<=ee*Math.max(1,Math.abs(g),Math.abs(V))&&Math.abs(p-se)<=ee*Math.max(1,Math.abs(p),Math.abs(se))&&Math.abs(y-Ur)<=ee*Math.max(1,Math.abs(y),Math.abs(Ur))}var Yp=Du,qp=Hu;var D={};$o(D,{add:()=>tg,angle:()=>Ag,bezier:()=>gg,ceil:()=>rg,clone:()=>jp,copy:()=>Jp,create:()=>Vu,cross:()=>fg,dist:()=>Rg,distance:()=>$u,div:()=>kg,divide:()=>Ku,dot:()=>sc,equals:()=>Tg,exactEquals:()=>Lg,floor:()=>ng,forEach:()=>Dg,fromValues:()=>Qp,hermite:()=>pg,inverse:()=>dg,len:()=>Fg,length:()=>Gu,lerp:()=>hg,max:()=>sg,min:()=>ig,mul:()=>Ig,multiply:()=>Xu,negate:()=>cg,normalize:()=>ug,random:()=>yg,rotateX:()=>vg,rotateY:()=>wg,rotateZ:()=>Sg,round:()=>ag,scale:()=>og,scaleAndAdd:()=>lg,set:()=>eg,slerp:()=>mg,sqrDist:()=>Pg,sqrLen:()=>Bg,squaredDistance:()=>Zu,squaredLength:()=>Yu,str:()=>Eg,sub:()=>Cg,subtract:()=>Wu,transformMat3:()=>xg,transformMat4:()=>bg,transformQuat:()=>_g,zero:()=>Mg});function Vu(){var t=new qe(3);return qe!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t}function jp(t){var e=new qe(3);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function Gu(t){var e=t[0],r=t[1],n=t[2];return Math.sqrt(e*e+r*r+n*n)}function Qp(t,e,r){var n=new qe(3);return n[0]=t,n[1]=e,n[2]=r,n}function Jp(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function eg(t,e,r,n){return t[0]=e,t[1]=r,t[2]=n,t}function tg(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t}function Wu(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t}function Xu(t,e,r){return t[0]=e[0]*r[0],t[1]=e[1]*r[1],t[2]=e[2]*r[2],t}function Ku(t,e,r){return t[0]=e[0]/r[0],t[1]=e[1]/r[1],t[2]=e[2]/r[2],t}function rg(t,e){return t[0]=Math.ceil(e[0]),t[1]=Math.ceil(e[1]),t[2]=Math.ceil(e[2]),t}function ng(t,e){return t[0]=Math.floor(e[0]),t[1]=Math.floor(e[1]),t[2]=Math.floor(e[2]),t}function ig(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 sg(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 ag(t,e){return t[0]=yo(e[0]),t[1]=yo(e[1]),t[2]=yo(e[2]),t}function og(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t}function lg(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 $u(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2];return Math.sqrt(r*r+n*n+i*i)}function Zu(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2];return r*r+n*n+i*i}function Yu(t){var e=t[0],r=t[1],n=t[2];return e*e+r*r+n*n}function cg(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t}function dg(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t}function ug(t,e){var r=e[0],n=e[1],i=e[2],s=r*r+n*n+i*i;return s>0&&(s=1/Math.sqrt(s)),t[0]=e[0]*s,t[1]=e[1]*s,t[2]=e[2]*s,t}function sc(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function fg(t,e,r){var n=e[0],i=e[1],s=e[2],a=r[0],o=r[1],d=r[2];return t[0]=i*d-s*o,t[1]=s*a-n*d,t[2]=n*o-i*a,t}function hg(t,e,r,n){var i=e[0],s=e[1],a=e[2];return t[0]=i+n*(r[0]-i),t[1]=s+n*(r[1]-s),t[2]=a+n*(r[2]-a),t}function mg(t,e,r,n){var i=Math.acos(Math.min(Math.max(sc(e,r),-1),1)),s=Math.sin(i),a=Math.sin((1-n)*i)/s,o=Math.sin(n*i)/s;return t[0]=a*e[0]+o*r[0],t[1]=a*e[1]+o*r[1],t[2]=a*e[2]+o*r[2],t}function pg(t,e,r,n,i,s){var a=s*s,o=a*(2*s-3)+1,d=a*(s-2)+s,l=a*(s-1),c=a*(3-2*s);return t[0]=e[0]*o+r[0]*d+n[0]*l+i[0]*c,t[1]=e[1]*o+r[1]*d+n[1]*l+i[1]*c,t[2]=e[2]*o+r[2]*d+n[2]*l+i[2]*c,t}function gg(t,e,r,n,i,s){var a=1-s,o=a*a,d=s*s,l=o*a,c=3*s*o,f=3*d*a,u=d*s;return t[0]=e[0]*l+r[0]*c+n[0]*f+i[0]*u,t[1]=e[1]*l+r[1]*c+n[1]*f+i[1]*u,t[2]=e[2]*l+r[2]*c+n[2]*f+i[2]*u,t}function yg(t,e){e=e===void 0?1:e;var r=ic()*2*Math.PI,n=ic()*2-1,i=Math.sqrt(1-n*n)*e;return t[0]=Math.cos(r)*i,t[1]=Math.sin(r)*i,t[2]=n*e,t}function bg(t,e,r){var n=e[0],i=e[1],s=e[2],a=r[3]*n+r[7]*i+r[11]*s+r[15];return a=a||1,t[0]=(r[0]*n+r[4]*i+r[8]*s+r[12])/a,t[1]=(r[1]*n+r[5]*i+r[9]*s+r[13])/a,t[2]=(r[2]*n+r[6]*i+r[10]*s+r[14])/a,t}function xg(t,e,r){var n=e[0],i=e[1],s=e[2];return t[0]=n*r[0]+i*r[3]+s*r[6],t[1]=n*r[1]+i*r[4]+s*r[7],t[2]=n*r[2]+i*r[5]+s*r[8],t}function _g(t,e,r){var n=r[0],i=r[1],s=r[2],a=r[3],o=e[0],d=e[1],l=e[2],c=i*l-s*d,f=s*o-n*l,u=n*d-i*o;return c=c+c,f=f+f,u=u+u,t[0]=o+a*c+i*u-s*f,t[1]=d+a*f+s*c-n*u,t[2]=l+a*u+n*f-i*c,t}function vg(t,e,r,n){var i=[],s=[];return i[0]=e[0]-r[0],i[1]=e[1]-r[1],i[2]=e[2]-r[2],s[0]=i[0],s[1]=i[1]*Math.cos(n)-i[2]*Math.sin(n),s[2]=i[1]*Math.sin(n)+i[2]*Math.cos(n),t[0]=s[0]+r[0],t[1]=s[1]+r[1],t[2]=s[2]+r[2],t}function wg(t,e,r,n){var i=[],s=[];return i[0]=e[0]-r[0],i[1]=e[1]-r[1],i[2]=e[2]-r[2],s[0]=i[2]*Math.sin(n)+i[0]*Math.cos(n),s[1]=i[1],s[2]=i[2]*Math.cos(n)-i[0]*Math.sin(n),t[0]=s[0]+r[0],t[1]=s[1]+r[1],t[2]=s[2]+r[2],t}function Sg(t,e,r,n){var i=[],s=[];return i[0]=e[0]-r[0],i[1]=e[1]-r[1],i[2]=e[2]-r[2],s[0]=i[0]*Math.cos(n)-i[1]*Math.sin(n),s[1]=i[0]*Math.sin(n)+i[1]*Math.cos(n),s[2]=i[2],t[0]=s[0]+r[0],t[1]=s[1]+r[1],t[2]=s[2]+r[2],t}function Ag(t,e){var r=t[0],n=t[1],i=t[2],s=e[0],a=e[1],o=e[2],d=Math.sqrt((r*r+n*n+i*i)*(s*s+a*a+o*o)),l=d&&sc(t,e)/d;return Math.acos(Math.min(Math.max(l,-1),1))}function Mg(t){return t[0]=0,t[1]=0,t[2]=0,t}function Eg(t){return"vec3("+t[0]+", "+t[1]+", "+t[2]+")"}function Lg(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]}function Tg(t,e){var r=t[0],n=t[1],i=t[2],s=e[0],a=e[1],o=e[2];return Math.abs(r-s)<=ee*Math.max(1,Math.abs(r),Math.abs(s))&&Math.abs(n-a)<=ee*Math.max(1,Math.abs(n),Math.abs(a))&&Math.abs(i-o)<=ee*Math.max(1,Math.abs(i),Math.abs(o))}var Cg=Wu,Ig=Xu,kg=Ku,Rg=$u,Pg=Zu,Fg=Gu,Bg=Yu,Dg=(function(){var t=Vu();return function(e,r,n,i,s,a){var o,d;for(r||(r=3),n||(n=0),i?d=Math.min(i*r+n,e.length):d=e.length,o=n;o<d;o+=r)t[0]=e[o],t[1]=e[o+1],t[2]=e[o+2],s(t,t,a),e[o]=t[0],e[o+1]=t[1],e[o+2]=t[2];return e}})();var bo=class{constructor(){this._position=D.create();this._angles=D.create();this._bobAngles=D.create();this._bobOffset=D.create();this._kickAngles=D.create();this._rollAngle=0;this._fov=90;this._aspect=1;this._near=.1;this._far=1e3;this._viewMatrix=de.create();this._projectionMatrix=de.create();this._viewProjectionMatrix=de.create();this._dirty=!0}get position(){return this._position}set position(e){D.equals(this._position,e)||(D.copy(this._position,e),this._dirty=!0,this.triggerMoveEvent())}get angles(){return this._angles}set angles(e){D.equals(this._angles,e)||(D.copy(this._angles,e),this._dirty=!0,this.triggerMoveEvent())}get bobAngles(){return this._bobAngles}set bobAngles(e){D.copy(this._bobAngles,e),this._dirty=!0}get kickAngles(){return this._kickAngles}set kickAngles(e){D.copy(this._kickAngles,e),this._dirty=!0}get bobOffset(){return this._bobOffset}set bobOffset(e){D.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}setPosition(e,r,n){let i=D.fromValues(e,r,n);D.equals(this._position,i)||(D.copy(this._position,i),this._dirty=!0,this.triggerMoveEvent())}setRotation(e,r,n){let i=D.fromValues(e,r,n);D.equals(this._angles,i)||(D.copy(this._angles,i),this._dirty=!0,this.triggerMoveEvent())}setFov(e){this.fov=e}setAspectRatio(e){this.aspect=e}lookAt(e){let r=D.create();if(D.subtract(r,e,this._position),D.length(r)<.001)return;let i=Math.atan2(r[1],r[0])*qo,s=Math.hypot(r[0],r[1]),a=-Math.atan2(r[2],s)*qo;this.setRotation(a,i,0)}triggerMoveEvent(){this.onCameraMove&&this.onCameraMove({position:D.clone(this._position),angles:D.clone(this._angles)})}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=de.create();return de.perspective(r,e*_n,this._aspect,this._near,this._far),r}screenToWorldRay(e,r){let n=e*2-1,i=1-r*2,s=D.fromValues(n,i,-1),a=D.fromValues(n,i,1),o=de.create();de.invert(o,this.viewProjectionMatrix);let d=D.create(),l=D.create();D.transformMat4(d,s,o),D.transformMat4(l,a,o);let c=D.create();return D.subtract(c,l,d),D.normalize(c,c),{origin:D.clone(this._position),direction:c}}updateMatrices(){if(!this._dirty)return;de.perspective(this._projectionMatrix,this._fov*_n,this._aspect,this._near,this._far);let e=de.fromValues(0,0,-1,0,-1,0,0,0,0,1,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],i=this._angles[2]+this._bobAngles[2]+this._kickAngles[2]+this._rollAngle,s=r*_n,a=n*_n,o=i*_n,d=de.create();de.identity(d),de.rotateZ(d,d,-a),de.rotateY(d,d,-s),de.rotateX(d,d,-o);let l=de.create();de.multiply(l,e,d);let c=D.add(D.create(),this._position,this._bobOffset),f=D.negate(D.create(),c),u=D.create();D.transformMat4(u,f,d);let h=D.fromValues(u[1]?-u[1]:0,u[2]||0,u[0]?-u[0]:0);de.copy(this._viewMatrix,l),this._viewMatrix[12]=h[0],this._viewMatrix[13]=h[1],this._viewMatrix[14]=h[2],de.multiply(this._viewProjectionMatrix,this._projectionMatrix,this._viewMatrix),this._dirty=!1}};var Og=[.2,.2,.2],zg={x:0,y:0,z:1},Ng=[.8,.8,.8];function ac(t,e,r){return t+(e-t)*r}function ni(t,e,r){return{x:ac(t.x,e.x,r),y:ac(t.y,e.y,r),z:ac(t.z,e.z,r)}}function ri(t){return t<0?0:t>1?1:t}function oc(t){let e=[],r=[];for(let n of t.triangles){let i=e.length,[s,a,o]=n.indices,d=t.texCoords[s],l=t.texCoords[a],c=t.texCoords[o];if(!d||!l||!c)throw new Error(`Missing texCoord for triangle in surface ${t.name}`);e.push({vertexIndex:s,texCoord:[d.s,1-d.t]},{vertexIndex:a,texCoord:[l.s,1-l.t]},{vertexIndex:o,texCoord:[c.s,1-c.t]}),r.push(i,i+1,i+2)}return{vertices:e,indices:new Uint16Array(r)}}function Ug(t,e,r){let n=r?.ambient??Og,i=r?.directional??{direction:zg,color:Ng},s=At(t),a=At(i.direction),o=ri(s.x*a.x+s.y*a.y+s.z*a.z),d=n[0]+i.color[0]*o,l=n[1]+i.color[1]*o,c=n[2]+i.color[2]*o;if(r?.dynamicLights){let f=r.modelMatrix?ad(r.modelMatrix,e):e;for(let u of r.dynamicLights){let h=f.x-u.origin.x,m=f.y-u.origin.y,g=f.z-u.origin.z,p=h*h+m*m+g*g,y=u.radius*u.radius;if(p<y&&y>0){let _=1-Math.sqrt(p)/u.radius,x=Math.sqrt(p),b=x>0?ri(-(h*s.x+m*s.y+g*s.z)/x):0,v=ri(_*b);d+=u.color[0]*v,l+=u.color[1]*v,c+=u.color[2]*v}}}return[ri(d),ri(l),ri(c)]}function lc(t,e,r,n){let i=t.vertices[r.frame0],s=t.vertices[r.frame1];if(!i||!s)throw new Error("Requested MD3 frames are out of range");let a=new Float32Array(e.vertices.length*12);return e.vertices.forEach((o,d)=>{let l=i[o.vertexIndex],c=s[o.vertexIndex];if(!l||!c)throw new Error(`Vertex index ${o.vertexIndex} missing for frame`);let f=ni(l.position,c.position,r.lerp),u=At(ni(l.normal,c.normal,r.lerp)),h=Ug(u,f,n),m=d*12;a[m]=f.x,a[m+1]=f.y,a[m+2]=f.z,a[m+3]=u.x,a[m+4]=u.y,a[m+5]=u.z,a[m+6]=o.texCoord[0],a[m+7]=o.texCoord[1],a[m+8]=h[0],a[m+9]=h[1],a[m+10]=h[2],a[m+11]=1}),a}function qu(t,e,r){let n=t.tags[0];if(!n)return null;let i=n.findIndex(g=>g.name===r);if(i===-1)return null;let s=t.tags[e.frame0]?.[i],a=t.tags[e.frame1]?.[i];if(!s||!a)throw new Error(`Tag ${r} is missing for one of the interpolated frames`);let o=ni(s.origin,a.origin,e.lerp),d=At(ni(s.axis[0],a.axis[0],e.lerp)),l=At(ni(s.axis[1],a.axis[1],e.lerp)),c=At(ni(s.axis[2],a.axis[2],e.lerp)),f=d,u=At({x:l.x-f.x*(f.x*l.x+f.y*l.y+f.z*l.z),y:l.y-f.y*(f.x*l.x+f.y*l.y+f.z*l.z),z:l.z-f.z*(f.x*l.x+f.y*l.y+f.z*l.z)}),h=At({x:f.y*u.z-f.z*u.y,y:f.z*u.x-f.x*u.z,z:f.x*u.y-f.y*u.x}),m=[f,u,h];return{origin:o,axis:m,matrix:od(o,m)}}var cc=`#version 300 es
480
480
  precision highp float;
481
481
 
482
482
  layout(location = 0) in vec3 a_position;
@@ -551,7 +551,7 @@ void main() {
551
551
  }
552
552
 
553
553
  o_color = finalColor;
554
- }`,Ls=class{constructor(e,r,n,i){this.gl=e,this.geometry=oc(r),this.vertexBuffer=new Ce(e,e.STATIC_DRAW),this.indexBuffer=new _e(e,e.STATIC_DRAW),this.vertexArray=new Pe(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,i)}update(e,r,n){let i=lc(e,this.geometry,r,n);this.vertexBuffer.upload(i,this.gl.STATIC_DRAW)}bind(){this.vertexArray.bind(),this.indexBuffer.bind()}dispose(){this.vertexBuffer.dispose(),this.indexBuffer.dispose(),this.vertexArray.dispose(),this.wireframeIndexBuffer?.dispose()}},xo=class{constructor(e,r,n,i){this.surfaces=new Map;this.gl=e,this.model=r,this.blend=n,this.lighting=i,r.surfaces.forEach(s=>{this.surfaces.set(s.name,new Ls(e,s,n,i))})}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()}},_o=class{constructor(e){this.gl=e,this.program=Te.create(e,{vertex:cc,fragment:dc},{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"),this.uniformRenderMode=this.program.getUniformLocation("u_renderMode"),this.uniformSolidColor=this.program.getUniformLocation("u_solidColor"),this.uniformBrightness=this.program.getUniformLocation("u_brightness"),this.uniformGamma=this.program.getUniformLocation("u_gamma"),this.uniformFullbright=this.program.getUniformLocation("u_fullbright"),this.uniformGlobalAmbient=this.program.getUniformLocation("u_globalAmbient")}get shaderSize(){return this.program.sourceSize}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),this.gl.uniform1i(this.uniformRenderMode,0),this.gl.uniform4f(this.uniformSolidColor,1,1,1,1)}drawSurface(e,r){let n=r?.diffuseSampler??0,i=r?.tint??[1,1,1,1],s=r?.renderMode,a=r?.brightness??1,o=r?.gamma??1,d=r?.fullbright??!1,l=r?.globalAmbient??0;this.gl.uniform4fv(this.uniformTint,new Float32Array(i)),this.gl.uniform1i(this.uniformDiffuse,n);let c=0,f=[1,1,1,1];if(s&&(s.mode==="solid"||s.mode==="wireframe"?c=1:s.mode==="solid-faceted"&&(c=2),s.color&&(f=[...s.color])),this.gl.uniform1i(this.uniformRenderMode,c),this.gl.uniform4f(this.uniformSolidColor,f[0],f[1],f[2],f[3]),this.gl.uniform1f(this.uniformBrightness,a),this.gl.uniform1f(this.uniformGamma,o),this.gl.uniform1i(this.uniformFullbright,d?1:0),this.gl.uniform1f(this.uniformGlobalAmbient,l),e.vertexArray.bind(),s&&s.mode==="wireframe"){if(!e.wireframeIndexBuffer){e.wireframeIndexBuffer=new _e(this.gl,this.gl.STATIC_DRAW);let u=ti(e.geometry.indices);e.wireframeIndexBuffer.upload(u),e.wireframeIndexCount=u.length}e.wireframeIndexBuffer.bind(),this.gl.drawElements(this.gl.LINES,e.wireframeIndexCount,this.gl.UNSIGNED_SHORT,0)}else e.indexBuffer.bind(),this.gl.drawElements(this.gl.TRIANGLES,e.indexCount,this.gl.UNSIGNED_SHORT,0)}dispose(){this.program.dispose()}};var V1=[1,1,1,1],vo=class{constructor(e,r){this.maxParticles=e,this.rng=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??V1,i=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]=i.x,this.velocityY[r]=i.y,this.velocityZ[r]=i.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 i=0;i<this.maxParticles;i+=1){if(!this.alive[i])continue;if(this.remaining[i]-=e,this.remaining[i]<=0){this.alive[i]=0;continue}let s=Math.max(0,1-this.damping[i]*e);this.velocityX[i]*=s,this.velocityY[i]*=s,this.velocityZ[i]=this.velocityZ[i]*s-this.gravity[i]*e,this.positionX[i]+=this.velocityX[i]*e,this.positionY[i]+=this.velocityY[i]*e,this.positionZ[i]+=this.velocityZ[i]*e,this.positionZ[i]<n&&(this.positionZ[i]=n,this.velocityZ[i]=-this.velocityZ[i]*this.bounce[i],this.velocityX[i]*=.7,this.velocityY[i]*=.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=[],i=[],s=[],a=o=>{let d=i.length,l=0;for(let c=0;c<this.maxParticles;c+=1){if(!this.alive[c]||(o==="additive"?1:0)!==this.blendMode[c])continue;l+=1;let f=n.length/9,u=this.size[c]*.5,h=this.fade[c]?Math.max(this.remaining[c]/this.lifetime[c],0):1,m=this.blendMode[c]===1?1.2:1,g=this.colorR[c]*m,p=this.colorG[c]*m,y=this.colorB[c]*m,_=this.colorA[c]*h,x=this.positionX[c],b=this.positionY[c],v=this.positionZ[c],S=e.x*u,w=e.y*u,L=e.z*u,C=r.x*u,A=r.y*u,I=r.z*u,R=[{x:x-S-C,y:b-w-A,z:v-L-I},{x:x+S-C,y:b+w-A,z:v+L-I},{x:x-S+C,y:b-w+A,z:v-L+I},{x:x+S+C,y:b+w+A,z:v+L+I}],F=[[0,1],[1,1],[0,0],[1,0]];R.forEach((k,V)=>{n.push(k.x,k.y,k.z,F[V]?.[0]??0,F[V]?.[1]??0,g,p,y,_)}),i.push(f,f+1,f+2,f+2,f+1,f+3)}l>0&&s.push({blendMode:o,start:d,count:i.length-d})};return a("alpha"),a("additive"),{vertices:new Float32Array(n),indices:new Uint16Array(i),batches:s}}findFreeSlot(){for(let e=0;e<this.maxParticles;e+=1)if(!this.alive[e])return e;return-1}},uc=`#version 300 es
554
+ }`,Ls=class{constructor(e,r,n,i){this.gl=e,this.geometry=oc(r),this.vertexBuffer=new Ce(e,e.STATIC_DRAW),this.indexBuffer=new _e(e,e.STATIC_DRAW),this.vertexArray=new Pe(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,i)}update(e,r,n){let i=lc(e,this.geometry,r,n);this.vertexBuffer.upload(i,this.gl.STATIC_DRAW)}bind(){this.vertexArray.bind(),this.indexBuffer.bind()}dispose(){this.vertexBuffer.dispose(),this.indexBuffer.dispose(),this.vertexArray.dispose(),this.wireframeIndexBuffer?.dispose()}},xo=class{constructor(e,r,n,i){this.surfaces=new Map;this.gl=e,this.model=r,this.blend=n,this.lighting=i,r.surfaces.forEach(s=>{this.surfaces.set(s.name,new Ls(e,s,n,i))})}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()}},_o=class{constructor(e){this.gl=e,this.program=Te.create(e,{vertex:cc,fragment:dc},{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"),this.uniformRenderMode=this.program.getUniformLocation("u_renderMode"),this.uniformSolidColor=this.program.getUniformLocation("u_solidColor"),this.uniformBrightness=this.program.getUniformLocation("u_brightness"),this.uniformGamma=this.program.getUniformLocation("u_gamma"),this.uniformFullbright=this.program.getUniformLocation("u_fullbright"),this.uniformGlobalAmbient=this.program.getUniformLocation("u_globalAmbient")}get shaderSize(){return this.program.sourceSize}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),this.gl.uniform1i(this.uniformRenderMode,0),this.gl.uniform4f(this.uniformSolidColor,1,1,1,1)}drawSurface(e,r){let n=r?.diffuseSampler??0,i=r?.tint??[1,1,1,1],s=r?.renderMode,a=r?.brightness??1,o=r?.gamma??1,d=r?.fullbright??!1,l=r?.globalAmbient??0;this.gl.uniform4fv(this.uniformTint,new Float32Array(i)),this.gl.uniform1i(this.uniformDiffuse,n);let c=0,f=[1,1,1,1];if(s&&(s.mode==="solid"||s.mode==="wireframe"?c=1:s.mode==="solid-faceted"&&(c=2),s.color&&(f=[...s.color])),this.gl.uniform1i(this.uniformRenderMode,c),this.gl.uniform4f(this.uniformSolidColor,f[0],f[1],f[2],f[3]),this.gl.uniform1f(this.uniformBrightness,a),this.gl.uniform1f(this.uniformGamma,o),this.gl.uniform1i(this.uniformFullbright,d?1:0),this.gl.uniform1f(this.uniformGlobalAmbient,l),e.vertexArray.bind(),s&&s.mode==="wireframe"){if(!e.wireframeIndexBuffer){e.wireframeIndexBuffer=new _e(this.gl,this.gl.STATIC_DRAW);let u=ti(e.geometry.indices);e.wireframeIndexBuffer.upload(u),e.wireframeIndexCount=u.length}e.wireframeIndexBuffer.bind(),this.gl.drawElements(this.gl.LINES,e.wireframeIndexCount,this.gl.UNSIGNED_SHORT,0)}else e.indexBuffer.bind(),this.gl.drawElements(this.gl.TRIANGLES,e.indexCount,this.gl.UNSIGNED_SHORT,0)}dispose(){this.program.dispose()}};var Hg=[1,1,1,1],vo=class{constructor(e,r){this.maxParticles=e,this.rng=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??Hg,i=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]=i.x,this.velocityY[r]=i.y,this.velocityZ[r]=i.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 i=0;i<this.maxParticles;i+=1){if(!this.alive[i])continue;if(this.remaining[i]-=e,this.remaining[i]<=0){this.alive[i]=0;continue}let s=Math.max(0,1-this.damping[i]*e);this.velocityX[i]*=s,this.velocityY[i]*=s,this.velocityZ[i]=this.velocityZ[i]*s-this.gravity[i]*e,this.positionX[i]+=this.velocityX[i]*e,this.positionY[i]+=this.velocityY[i]*e,this.positionZ[i]+=this.velocityZ[i]*e,this.positionZ[i]<n&&(this.positionZ[i]=n,this.velocityZ[i]=-this.velocityZ[i]*this.bounce[i],this.velocityX[i]*=.7,this.velocityY[i]*=.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=[],i=[],s=[],a=o=>{let d=i.length,l=0;for(let c=0;c<this.maxParticles;c+=1){if(!this.alive[c]||(o==="additive"?1:0)!==this.blendMode[c])continue;l+=1;let f=n.length/9,u=this.size[c]*.5,h=this.fade[c]?Math.max(this.remaining[c]/this.lifetime[c],0):1,m=this.blendMode[c]===1?1.2:1,g=this.colorR[c]*m,p=this.colorG[c]*m,y=this.colorB[c]*m,_=this.colorA[c]*h,x=this.positionX[c],b=this.positionY[c],v=this.positionZ[c],S=e.x*u,w=e.y*u,L=e.z*u,T=r.x*u,A=r.y*u,I=r.z*u,R=[{x:x-S-T,y:b-w-A,z:v-L-I},{x:x+S-T,y:b+w-A,z:v+L-I},{x:x-S+T,y:b-w+A,z:v-L+I},{x:x+S+T,y:b+w+A,z:v+L+I}],F=[[0,1],[1,1],[0,0],[1,0]];R.forEach((k,V)=>{n.push(k.x,k.y,k.z,F[V]?.[0]??0,F[V]?.[1]??0,g,p,y,_)}),i.push(f,f+1,f+2,f+2,f+1,f+3)}l>0&&s.push({blendMode:o,start:d,count:i.length-d})};return a("alpha"),a("additive"),{vertices:new Float32Array(n),indices:new Uint16Array(i),batches:s}}findFreeSlot(){for(let e=0;e<this.maxParticles;e+=1)if(!this.alive[e])return e;return-1}},uc=`#version 300 es
555
555
  precision highp float;
556
556
 
557
557
  layout(location = 0) in vec3 a_position;
@@ -579,11 +579,11 @@ void main() {
579
579
  float dist = distance(v_uv, vec2(0.5));
580
580
  float alpha = v_color.a * (1.0 - smoothstep(0.35, 0.5, dist));
581
581
  o_color = vec4(v_color.rgb, alpha);
582
- }`,wo=class{constructor(e,r){this.vertexCapacity=0;this.indexCapacity=0;this.gl=e,this.system=r,this.program=Te.create(e,{vertex:uc,fragment:fc}),this.vertexBuffer=new Ce(e,e.DYNAMIC_DRAW),this.indexBuffer=new _e(e,e.DYNAMIC_DRAW),this.vertexArray=new Pe(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)}get shaderSize(){return this.program.sourceSize}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 i=r.indices;r.indices.byteLength>this.indexCapacity?(this.indexCapacity=r.indices.byteLength,this.indexBuffer.upload(i,this.gl.DYNAMIC_DRAW)):this.indexBuffer.update(i),this.gl.depthMask(!1),this.program.use();let s=this.program.getUniformLocation("u_viewProjection");this.gl.uniformMatrix4fv(s,!1,e.viewProjection),this.vertexArray.bind();for(let a of r.batches)a.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,a.count,this.gl.UNSIGNED_SHORT,a.start*2);this.gl.depthMask(!0)}dispose(){this.program.dispose(),this.vertexBuffer.dispose(),this.indexBuffer.dispose(),this.vertexArray.dispose()}};function ju(t){let{system:e,origin:r,normal:n={x:0,y:0,z:1}}=t;for(let i=0;i<12;i+=1){let s=200+e.rng.frandom()*180,a=e.rng.frandom()*.35;e.spawn({position:r,velocity:{x:n.x*s+(e.rng.frandom()-.5)*80,y:n.y*s+(e.rng.frandom()-.5)*80,z:Math.max(n.z*s,120)+a*80},color:[1,.8,.4,1],size:2.5,lifetime:.45+e.rng.frandom()*.1,gravity:600,damping:2,bounce:.45,blendMode:"additive",fade:!0})}for(let i=0;i<8;i+=1)e.spawn({position:r,velocity:{x:(e.rng.frandom()-.5)*40,y:(e.rng.frandom()-.5)*40,z:80+e.rng.frandom()*40},color:[.45,.45,.45,.75],size:6,lifetime:.6,gravity:200,damping:4,bounce:.15,blendMode:"alpha",fade:!0})}function Qu(t){let{system:e,origin:r}=t;for(let n=0;n<40;n+=1){let i=e.rng.frandom()*Math.PI*2,s=Math.acos(2*e.rng.frandom()-1),a=220+e.rng.frandom()*260,o={x:Math.sin(s)*Math.cos(i),y:Math.sin(s)*Math.sin(i),z:Math.cos(s)};e.spawn({position:r,velocity:{x:o.x*a,y:o.y*a,z:o.z*a},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.rng.frandom()-.5)*30,y:(e.rng.frandom()-.5)*30,z:120+e.rng.frandom()*120},color:[.25,.25,.25,.9],size:12,lifetime:1.2,gravity:300,damping:3,blendMode:"alpha",fade:!0})}function Ju(t){let{system:e,origin:r,direction:n={x:0,y:0,z:1}}=t;for(let i=0;i<24;i+=1){let s=120+e.rng.frandom()*180;e.spawn({position:r,velocity:{x:n.x*s+(e.rng.frandom()-.5)*70,y:n.y*s+(e.rng.frandom()-.5)*70,z:n.z*s+e.rng.frandom()*80},color:[.6,0,0,.95],size:3,lifetime:.8,gravity:900,damping:1,bounce:.2,blendMode:"alpha",fade:!0})}}function ef(t){let{system:e,origin:r}=t;for(let n=0;n<30;n+=1){let i=e.rng.frandom()*Math.PI*2,s=8+e.rng.frandom()*8;e.spawn({position:r,velocity:{x:Math.cos(i)*s,y:Math.sin(i)*s,z:100+e.rng.frandom()*80},color:[.4,.6,1,.9],size:4,lifetime:.5,gravity:300,damping:2,blendMode:"additive",fade:!0})}}function tf(t){let{system:e,origin:r,direction:n={x:1,y:0,z:0}}=t;for(let i=0;i<10;i+=1){let s=350+e.rng.frandom()*100;e.spawn({position:r,velocity:{x:n.x*s+(e.rng.frandom()-.5)*30,y:n.y*s+(e.rng.frandom()-.5)*30,z:n.z*s+(e.rng.frandom()-.5)*30},color:[1,.8,.3,1],size:3,lifetime:.25,gravity:200,damping:1,blendMode:"additive",fade:!0})}}function rf(t){let{system:e,origin:r,direction:n={x:0,y:0,z:0}}=t;for(let i=0;i<6;i+=1)e.spawn({position:{x:r.x+n.x*i*2,y:r.y+n.y*i*2,z:r.z+n.z*i*2},velocity:{x:(e.rng.frandom()-.5)*15,y:(e.rng.frandom()-.5)*15,z:20+e.rng.frandom()*15},color:[.6,.6,.6,.8],size:2.2,lifetime:.6,gravity:200,damping:1.5,blendMode:"alpha",fade:!0})}function nf(t){let{system:e,origin:r,normal:n={x:0,y:0,z:1}}=t;for(let i=0;i<30;i+=1){let s=100+e.rng.frandom()*150;e.spawn({position:r,velocity:{x:n.x*s+(e.rng.frandom()-.5)*80,y:n.y*s+(e.rng.frandom()-.5)*80,z:100+e.rng.frandom()*120},color:[.5,.6,.8,.5],size:3,lifetime:.5+e.rng.frandom()*.3,gravity:800,damping:1.5,blendMode:"alpha",fade:!0})}}function sf(t){let{system:e,origin:r}=t;for(let n=0;n<8;n+=1)e.spawn({position:{x:r.x+(e.rng.frandom()-.5)*10,y:r.y+(e.rng.frandom()-.5)*10,z:r.z+(e.rng.frandom()-.5)*10},velocity:{x:(e.rng.frandom()-.5)*20,y:(e.rng.frandom()-.5)*20,z:40+e.rng.frandom()*20},color:[.8,.8,.8,.3],size:5+e.rng.frandom()*4,lifetime:1.5+e.rng.frandom()*.5,gravity:-50,damping:.5,blendMode:"alpha",fade:!0})}function af(t){let{system:e,start:r,end:n}=t,i=n.x-r.x,s=n.y-r.y,a=n.z-r.z,o=Math.sqrt(i*i+s*s+a*a);if(o<1)return;let d={x:i/o,y:s/o,z:a/o},l=8;for(let c=0;c<o;c+=l){let f=r.x+d.x*c,u=r.y+d.y*c,h=r.z+d.z*c;e.spawn({position:{x:f,y:u,z:h},velocity:{x:0,y:0,z:0},color:[.4,.4,1,.8],size:2,lifetime:.6,blendMode:"additive",fade:!0});let m=3,g=c*.5;e.spawn({position:{x:f+(e.rng.frandom()-.5)*6,y:u+(e.rng.frandom()-.5)*6,z:h+(e.rng.frandom()-.5)*6},velocity:{x:(e.rng.frandom()-.5)*10,y:(e.rng.frandom()-.5)*10,z:(e.rng.frandom()-.5)*10},color:[.1,.1,.8,.6],size:3,lifetime:.8+e.rng.frandom()*.2,blendMode:"additive",fade:!0})}}function of(t){let{system:e,origin:r,normal:n={x:0,y:0,z:1},count:i=12,color:s=[1,.9,.2,1]}=t;for(let a=0;a<i;a++){let o=100+e.rng.frandom()*200,d=.5;e.spawn({position:r,velocity:{x:n.x*o+(e.rng.frandom()-.5)*100*d,y:n.y*o+(e.rng.frandom()-.5)*100*d,z:n.z*o+(e.rng.frandom()-.5)*100*d},color:s,size:1.5,lifetime:.3+e.rng.frandom()*.2,gravity:800,bounce:.5,damping:1,blendMode:"additive",fade:!0})}}function lf(t){let{system:e,origin:r,normal:n={x:0,y:0,z:1},color:i=[1,.8,0,1]}=t;e.spawn({position:r,velocity:{x:0,y:0,z:0},color:i,size:8,lifetime:.2,blendMode:"additive",fade:!0});for(let s=0;s<8;s++){let a=150+e.rng.frandom()*150;e.spawn({position:r,velocity:{x:n.x*a+(e.rng.frandom()-.5)*120,y:n.y*a+(e.rng.frandom()-.5)*120,z:n.z*a+(e.rng.frandom()-.5)*120},color:i,size:2,lifetime:.4+e.rng.frandom()*.2,gravity:400,blendMode:"additive",fade:!0})}}function cf(t){let{system:e,origin:r}=t;e.spawn({position:r,velocity:{x:0,y:0,z:0},color:[.2,1,.2,1],size:30,lifetime:.5,blendMode:"additive",fade:!0});for(let n=0;n<60;n++){let i=e.rng.frandom()*Math.PI*2,s=Math.acos(2*e.rng.frandom()-1),a=300+e.rng.frandom()*400,o={x:Math.sin(s)*Math.cos(i),y:Math.sin(s)*Math.sin(i),z:Math.cos(s)};e.spawn({position:r,velocity:{x:o.x*a,y:o.y*a,z:o.z*a},color:[.2,1,.2,.8],size:4,lifetime:1,gravity:100,damping:1,blendMode:"additive",fade:!0})}}var je=class{constructor(e){this.messageOffsets=[];this.currentBlock=null;this.buffer=e,this.view=new DataView(e),this.offset=0,this.scan()}scan(){let e=0;for(this.messageOffsets=[];e+4<=this.buffer.byteLength;){let r=this.view.getInt32(e,!0);if(r===-1)break;if(r<0||r>2097152){console.warn(`DemoReader: Invalid block length ${r} at offset ${e} during scan`);break}if(e+4+r>this.buffer.byteLength){console.warn(`DemoReader: Incomplete block at offset ${e} during scan`);break}this.messageOffsets.push(e),e+=4+r}}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(e===-1||e<0||this.offset+4+e>this.buffer.byteLength)return null;this.offset+=4;let r=this.buffer.slice(this.offset,this.offset+e);return this.offset+=e,{length:e,data:new vn(r)}}nextBlock(){let e=this.readNextBlock();return e?(this.currentBlock=e,!0):(this.currentBlock=null,!1)}getBlock(){if(!this.currentBlock)throw new Error("No current block. Call nextBlock() first.");return this.currentBlock}readAllBlocksToBuffer(){let e=0,r=this.offset,n=[],i=this.offset;for(;i+4<=this.buffer.byteLength;){let d=this.view.getInt32(i,!0);if(d===-1||d<0||i+4+d>this.buffer.byteLength)break;n.push({offset:i+4,length:d}),e+=d,i+=4+d}let s=new Uint8Array(e),a=0,o=new Uint8Array(this.buffer);for(let d of n)s.set(o.subarray(d.offset,d.offset+d.length),a),a+=d.length;return this.offset=i,s.buffer}reset(){this.offset=0,this.currentBlock=null}seekToMessage(e){return e<0||e>=this.messageOffsets.length?!1:(this.offset=this.messageOffsets[e],this.currentBlock=null,!0)}getMessageCount(){return this.messageOffsets.length}getOffset(){return this.offset}getProgress(){let e=this.offset,r=this.buffer.byteLength;return{current:e,total:r,percent:r>0?e/r*100:0}}};function ci(t){let e=t.length;for(;--e>=0;)t[e]=0}var G1=0,Zf=1,W1=2,X1=3,K1=258,Bc=29,Vs=256,Fs=Vs+1+Bc,ai=30,Dc=19,Yf=2*Fs+1,on=15,hc=16,$1=7,Oc=256,qf=16,jf=17,Qf=18,Lc=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),To=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),Z1=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),Jf=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Y1=512,Nt=new Array((Fs+2)*2);ci(Nt);var ks=new Array(ai*2);ci(ks);var zs=new Array(Y1);ci(zs);var Bs=new Array(K1-X1+1);ci(Bs);var Nc=new Array(Bc);ci(Nc);var Co=new Array(ai);ci(Co);function mc(t,e,r,n,i){this.static_tree=t,this.extra_bits=e,this.extra_base=r,this.elems=n,this.max_length=i,this.has_stree=t&&t.length}var eh,th,rh;function pc(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}var nh=t=>t<256?zs[t]:zs[256+(t>>>7)],Ds=(t,e)=>{t.pending_buf[t.pending++]=e&255,t.pending_buf[t.pending++]=e>>>8&255},Fe=(t,e,r)=>{t.bi_valid>hc-r?(t.bi_buf|=e<<t.bi_valid&65535,Ds(t,t.bi_buf),t.bi_buf=e>>hc-t.bi_valid,t.bi_valid+=r-hc):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=r)},pt=(t,e,r)=>{Fe(t,r[e*2],r[e*2+1])},ih=(t,e)=>{let r=0;do r|=t&1,t>>>=1,r<<=1;while(--e>0);return r>>>1},q1=t=>{t.bi_valid===16?(Ds(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=t.bi_buf&255,t.bi_buf>>=8,t.bi_valid-=8)},j1=(t,e)=>{let r=e.dyn_tree,n=e.max_code,i=e.stat_desc.static_tree,s=e.stat_desc.has_stree,a=e.stat_desc.extra_bits,o=e.stat_desc.extra_base,d=e.stat_desc.max_length,l,c,f,u,h,m,g=0;for(u=0;u<=on;u++)t.bl_count[u]=0;for(r[t.heap[t.heap_max]*2+1]=0,l=t.heap_max+1;l<Yf;l++)c=t.heap[l],u=r[r[c*2+1]*2+1]+1,u>d&&(u=d,g++),r[c*2+1]=u,!(c>n)&&(t.bl_count[u]++,h=0,c>=o&&(h=a[c-o]),m=r[c*2],t.opt_len+=m*(u+h),s&&(t.static_len+=m*(i[c*2+1]+h)));if(g!==0){do{for(u=d-1;t.bl_count[u]===0;)u--;t.bl_count[u]--,t.bl_count[u+1]+=2,t.bl_count[d]--,g-=2}while(g>0);for(u=d;u!==0;u--)for(c=t.bl_count[u];c!==0;)f=t.heap[--l],!(f>n)&&(r[f*2+1]!==u&&(t.opt_len+=(u-r[f*2+1])*r[f*2],r[f*2+1]=u),c--)}},sh=(t,e,r)=>{let n=new Array(on+1),i=0,s,a;for(s=1;s<=on;s++)i=i+r[s-1]<<1,n[s]=i;for(a=0;a<=e;a++){let o=t[a*2+1];o!==0&&(t[a*2]=ih(n[o]++,o))}},Q1=()=>{let t,e,r,n,i,s=new Array(on+1);for(r=0,n=0;n<Bc-1;n++)for(Nc[n]=r,t=0;t<1<<Lc[n];t++)Bs[r++]=n;for(Bs[r-1]=n,i=0,n=0;n<16;n++)for(Co[n]=i,t=0;t<1<<To[n];t++)zs[i++]=n;for(i>>=7;n<ai;n++)for(Co[n]=i<<7,t=0;t<1<<To[n]-7;t++)zs[256+i++]=n;for(e=0;e<=on;e++)s[e]=0;for(t=0;t<=143;)Nt[t*2+1]=8,t++,s[8]++;for(;t<=255;)Nt[t*2+1]=9,t++,s[9]++;for(;t<=279;)Nt[t*2+1]=7,t++,s[7]++;for(;t<=287;)Nt[t*2+1]=8,t++,s[8]++;for(sh(Nt,Fs+1,s),t=0;t<ai;t++)ks[t*2+1]=5,ks[t*2]=ih(t,5);eh=new mc(Nt,Lc,Vs+1,Fs,on),th=new mc(ks,To,0,ai,on),rh=new mc(new Array(0),Z1,0,Dc,$1)},ah=t=>{let e;for(e=0;e<Fs;e++)t.dyn_ltree[e*2]=0;for(e=0;e<ai;e++)t.dyn_dtree[e*2]=0;for(e=0;e<Dc;e++)t.bl_tree[e*2]=0;t.dyn_ltree[Oc*2]=1,t.opt_len=t.static_len=0,t.sym_next=t.matches=0},oh=t=>{t.bi_valid>8?Ds(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},df=(t,e,r,n)=>{let i=e*2,s=r*2;return t[i]<t[s]||t[i]===t[s]&&n[e]<=n[r]},gc=(t,e,r)=>{let n=t.heap[r],i=r<<1;for(;i<=t.heap_len&&(i<t.heap_len&&df(e,t.heap[i+1],t.heap[i],t.depth)&&i++,!df(e,n,t.heap[i],t.depth));)t.heap[r]=t.heap[i],r=i,i<<=1;t.heap[r]=n},uf=(t,e,r)=>{let n,i,s=0,a,o;if(t.sym_next!==0)do n=t.pending_buf[t.sym_buf+s++]&255,n+=(t.pending_buf[t.sym_buf+s++]&255)<<8,i=t.pending_buf[t.sym_buf+s++],n===0?pt(t,i,e):(a=Bs[i],pt(t,a+Vs+1,e),o=Lc[a],o!==0&&(i-=Nc[a],Fe(t,i,o)),n--,a=nh(n),pt(t,a,r),o=To[a],o!==0&&(n-=Co[a],Fe(t,n,o)));while(s<t.sym_next);pt(t,Oc,e)},Tc=(t,e)=>{let r=e.dyn_tree,n=e.stat_desc.static_tree,i=e.stat_desc.has_stree,s=e.stat_desc.elems,a,o,d=-1,l;for(t.heap_len=0,t.heap_max=Yf,a=0;a<s;a++)r[a*2]!==0?(t.heap[++t.heap_len]=d=a,t.depth[a]=0):r[a*2+1]=0;for(;t.heap_len<2;)l=t.heap[++t.heap_len]=d<2?++d:0,r[l*2]=1,t.depth[l]=0,t.opt_len--,i&&(t.static_len-=n[l*2+1]);for(e.max_code=d,a=t.heap_len>>1;a>=1;a--)gc(t,r,a);l=s;do a=t.heap[1],t.heap[1]=t.heap[t.heap_len--],gc(t,r,1),o=t.heap[1],t.heap[--t.heap_max]=a,t.heap[--t.heap_max]=o,r[l*2]=r[a*2]+r[o*2],t.depth[l]=(t.depth[a]>=t.depth[o]?t.depth[a]:t.depth[o])+1,r[a*2+1]=r[o*2+1]=l,t.heap[1]=l++,gc(t,r,1);while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],j1(t,e),sh(r,d,t.bl_count)},ff=(t,e,r)=>{let n,i=-1,s,a=e[1],o=0,d=7,l=4;for(a===0&&(d=138,l=3),e[(r+1)*2+1]=65535,n=0;n<=r;n++)s=a,a=e[(n+1)*2+1],!(++o<d&&s===a)&&(o<l?t.bl_tree[s*2]+=o:s!==0?(s!==i&&t.bl_tree[s*2]++,t.bl_tree[qf*2]++):o<=10?t.bl_tree[jf*2]++:t.bl_tree[Qf*2]++,o=0,i=s,a===0?(d=138,l=3):s===a?(d=6,l=3):(d=7,l=4))},hf=(t,e,r)=>{let n,i=-1,s,a=e[1],o=0,d=7,l=4;for(a===0&&(d=138,l=3),n=0;n<=r;n++)if(s=a,a=e[(n+1)*2+1],!(++o<d&&s===a)){if(o<l)do pt(t,s,t.bl_tree);while(--o!==0);else s!==0?(s!==i&&(pt(t,s,t.bl_tree),o--),pt(t,qf,t.bl_tree),Fe(t,o-3,2)):o<=10?(pt(t,jf,t.bl_tree),Fe(t,o-3,3)):(pt(t,Qf,t.bl_tree),Fe(t,o-11,7));o=0,i=s,a===0?(d=138,l=3):s===a?(d=6,l=3):(d=7,l=4)}},J1=t=>{let e;for(ff(t,t.dyn_ltree,t.l_desc.max_code),ff(t,t.dyn_dtree,t.d_desc.max_code),Tc(t,t.bl_desc),e=Dc-1;e>=3&&t.bl_tree[Jf[e]*2+1]===0;e--);return t.opt_len+=3*(e+1)+5+5+4,e},eg=(t,e,r,n)=>{let i;for(Fe(t,e-257,5),Fe(t,r-1,5),Fe(t,n-4,4),i=0;i<n;i++)Fe(t,t.bl_tree[Jf[i]*2+1],3);hf(t,t.dyn_ltree,e-1),hf(t,t.dyn_dtree,r-1)},tg=t=>{let e=4093624447,r;for(r=0;r<=31;r++,e>>>=1)if(e&1&&t.dyn_ltree[r*2]!==0)return 0;if(t.dyn_ltree[18]!==0||t.dyn_ltree[20]!==0||t.dyn_ltree[26]!==0)return 1;for(r=32;r<Vs;r++)if(t.dyn_ltree[r*2]!==0)return 1;return 0},mf=!1,rg=t=>{mf||(Q1(),mf=!0),t.l_desc=new pc(t.dyn_ltree,eh),t.d_desc=new pc(t.dyn_dtree,th),t.bl_desc=new pc(t.bl_tree,rh),t.bi_buf=0,t.bi_valid=0,ah(t)},lh=(t,e,r,n)=>{Fe(t,(G1<<1)+(n?1:0),3),oh(t),Ds(t,r),Ds(t,~r),r&&t.pending_buf.set(t.window.subarray(e,e+r),t.pending),t.pending+=r},ng=t=>{Fe(t,Zf<<1,3),pt(t,Oc,Nt),q1(t)},ig=(t,e,r,n)=>{let i,s,a=0;t.level>0?(t.strm.data_type===2&&(t.strm.data_type=tg(t)),Tc(t,t.l_desc),Tc(t,t.d_desc),a=J1(t),i=t.opt_len+3+7>>>3,s=t.static_len+3+7>>>3,s<=i&&(i=s)):i=s=r+5,r+4<=i&&e!==-1?lh(t,e,r,n):t.strategy===4||s===i?(Fe(t,(Zf<<1)+(n?1:0),3),uf(t,Nt,ks)):(Fe(t,(W1<<1)+(n?1:0),3),eg(t,t.l_desc.max_code+1,t.d_desc.max_code+1,a+1),uf(t,t.dyn_ltree,t.dyn_dtree)),ah(t),n&&oh(t)},sg=(t,e,r)=>(t.pending_buf[t.sym_buf+t.sym_next++]=e,t.pending_buf[t.sym_buf+t.sym_next++]=e>>8,t.pending_buf[t.sym_buf+t.sym_next++]=r,e===0?t.dyn_ltree[r*2]++:(t.matches++,e--,t.dyn_ltree[(Bs[r]+Vs+1)*2]++,t.dyn_dtree[nh(e)*2]++),t.sym_next===t.sym_end),ag=rg,og=lh,lg=ig,cg=sg,dg=ng,ug={_tr_init:ag,_tr_stored_block:og,_tr_flush_block:lg,_tr_tally:cg,_tr_align:dg},fg=(t,e,r,n)=>{let i=t&65535|0,s=t>>>16&65535|0,a=0;for(;r!==0;){a=r>2e3?2e3:r,r-=a;do i=i+e[n++]|0,s=s+i|0;while(--a);i%=65521,s%=65521}return i|s<<16|0},Os=fg,hg=()=>{let t,e=[];for(var r=0;r<256;r++){t=r;for(var n=0;n<8;n++)t=t&1?3988292384^t>>>1:t>>>1;e[r]=t}return e},mg=new Uint32Array(hg()),pg=(t,e,r,n)=>{let i=mg,s=n+r;t^=-1;for(let a=n;a<s;a++)t=t>>>8^i[(t^e[a])&255];return t^-1},me=pg,dn={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},hn={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8},{_tr_init:gg,_tr_stored_block:Cc,_tr_flush_block:yg,_tr_tally:hr,_tr_align:bg}=ug,{Z_NO_FLUSH:mr,Z_PARTIAL_FLUSH:xg,Z_FULL_FLUSH:_g,Z_FINISH:Qe,Z_BLOCK:pf,Z_OK:pe,Z_STREAM_END:gf,Z_STREAM_ERROR:gt,Z_DATA_ERROR:vg,Z_BUF_ERROR:yc,Z_DEFAULT_COMPRESSION:wg,Z_FILTERED:Sg,Z_HUFFMAN_ONLY:So,Z_RLE:Ag,Z_FIXED:Mg,Z_DEFAULT_STRATEGY:Eg,Z_UNKNOWN:Lg,Z_DEFLATED:Ro}=hn,Tg=9,Cg=15,Ig=8,kg=29,Rg=256,Ic=Rg+1+kg,Pg=30,Fg=19,zg=2*Ic+1,Bg=15,W=3,fr=258,yt=fr+W+1,Dg=32,oi=42,Uc=57,kc=69,Rc=73,Pc=91,Fc=103,ln=113,Cs=666,Ie=1,di=2,un=3,ui=4,Og=3,cn=(t,e)=>(t.msg=dn[e],e),yf=t=>t*2-(t>4?9:0),ur=t=>{let e=t.length;for(;--e>=0;)t[e]=0},Ng=t=>{let e,r,n,i=t.w_size;e=t.hash_size,n=e;do r=t.head[--n],t.head[n]=r>=i?r-i:0;while(--e);e=i,n=e;do r=t.prev[--n],t.prev[n]=r>=i?r-i:0;while(--e)},Ug=(t,e,r)=>(e<<t.hash_shift^r)&t.hash_mask,pr=Ug,Ue=t=>{let e=t.state,r=e.pending;r>t.avail_out&&(r=t.avail_out),r!==0&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+r),t.next_out),t.next_out+=r,e.pending_out+=r,t.total_out+=r,t.avail_out-=r,e.pending-=r,e.pending===0&&(e.pending_out=0))},He=(t,e)=>{yg(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,Ue(t.strm)},Z=(t,e)=>{t.pending_buf[t.pending++]=e},Ts=(t,e)=>{t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=e&255},zc=(t,e,r,n)=>{let i=t.avail_in;return i>n&&(i=n),i===0?0:(t.avail_in-=i,e.set(t.input.subarray(t.next_in,t.next_in+i),r),t.state.wrap===1?t.adler=Os(t.adler,e,i,r):t.state.wrap===2&&(t.adler=me(t.adler,e,i,r)),t.next_in+=i,t.total_in+=i,i)},ch=(t,e)=>{let r=t.max_chain_length,n=t.strstart,i,s,a=t.prev_length,o=t.nice_match,d=t.strstart>t.w_size-yt?t.strstart-(t.w_size-yt):0,l=t.window,c=t.w_mask,f=t.prev,u=t.strstart+fr,h=l[n+a-1],m=l[n+a];t.prev_length>=t.good_match&&(r>>=2),o>t.lookahead&&(o=t.lookahead);do if(i=e,!(l[i+a]!==m||l[i+a-1]!==h||l[i]!==l[n]||l[++i]!==l[n+1])){n+=2,i++;do;while(l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&n<u);if(s=fr-(u-n),n=u-fr,s>a){if(t.match_start=e,a=s,s>=o)break;h=l[n+a-1],m=l[n+a]}}while((e=f[e&c])>d&&--r!==0);return a<=t.lookahead?a:t.lookahead},li=t=>{let e=t.w_size,r,n,i;do{if(n=t.window_size-t.lookahead-t.strstart,t.strstart>=e+(e-yt)&&(t.window.set(t.window.subarray(e,e+e-n),0),t.match_start-=e,t.strstart-=e,t.block_start-=e,t.insert>t.strstart&&(t.insert=t.strstart),Ng(t),n+=e),t.strm.avail_in===0)break;if(r=zc(t.strm,t.window,t.strstart+t.lookahead,n),t.lookahead+=r,t.lookahead+t.insert>=W)for(i=t.strstart-t.insert,t.ins_h=t.window[i],t.ins_h=pr(t,t.ins_h,t.window[i+1]);t.insert&&(t.ins_h=pr(t,t.ins_h,t.window[i+W-1]),t.prev[i&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=i,i++,t.insert--,!(t.lookahead+t.insert<W)););}while(t.lookahead<yt&&t.strm.avail_in!==0)},dh=(t,e)=>{let r=t.pending_buf_size-5>t.w_size?t.w_size:t.pending_buf_size-5,n,i,s,a=0,o=t.strm.avail_in;do{if(n=65535,s=t.bi_valid+42>>3,t.strm.avail_out<s||(s=t.strm.avail_out-s,i=t.strstart-t.block_start,n>i+t.strm.avail_in&&(n=i+t.strm.avail_in),n>s&&(n=s),n<r&&(n===0&&e!==Qe||e===mr||n!==i+t.strm.avail_in)))break;a=e===Qe&&n===i+t.strm.avail_in?1:0,Cc(t,0,0,a),t.pending_buf[t.pending-4]=n,t.pending_buf[t.pending-3]=n>>8,t.pending_buf[t.pending-2]=~n,t.pending_buf[t.pending-1]=~n>>8,Ue(t.strm),i&&(i>n&&(i=n),t.strm.output.set(t.window.subarray(t.block_start,t.block_start+i),t.strm.next_out),t.strm.next_out+=i,t.strm.avail_out-=i,t.strm.total_out+=i,t.block_start+=i,n-=i),n&&(zc(t.strm,t.strm.output,t.strm.next_out,n),t.strm.next_out+=n,t.strm.avail_out-=n,t.strm.total_out+=n)}while(a===0);return o-=t.strm.avail_in,o&&(o>=t.w_size?(t.matches=2,t.window.set(t.strm.input.subarray(t.strm.next_in-t.w_size,t.strm.next_in),0),t.strstart=t.w_size,t.insert=t.strstart):(t.window_size-t.strstart<=o&&(t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,t.insert>t.strstart&&(t.insert=t.strstart)),t.window.set(t.strm.input.subarray(t.strm.next_in-o,t.strm.next_in),t.strstart),t.strstart+=o,t.insert+=o>t.w_size-t.insert?t.w_size-t.insert:o),t.block_start=t.strstart),t.high_water<t.strstart&&(t.high_water=t.strstart),a?ui:e!==mr&&e!==Qe&&t.strm.avail_in===0&&t.strstart===t.block_start?di:(s=t.window_size-t.strstart,t.strm.avail_in>s&&t.block_start>=t.w_size&&(t.block_start-=t.w_size,t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,s+=t.w_size,t.insert>t.strstart&&(t.insert=t.strstart)),s>t.strm.avail_in&&(s=t.strm.avail_in),s&&(zc(t.strm,t.window,t.strstart,s),t.strstart+=s,t.insert+=s>t.w_size-t.insert?t.w_size-t.insert:s),t.high_water<t.strstart&&(t.high_water=t.strstart),s=t.bi_valid+42>>3,s=t.pending_buf_size-s>65535?65535:t.pending_buf_size-s,r=s>t.w_size?t.w_size:s,i=t.strstart-t.block_start,(i>=r||(i||e===Qe)&&e!==mr&&t.strm.avail_in===0&&i<=s)&&(n=i>s?s:i,a=e===Qe&&t.strm.avail_in===0&&n===i?1:0,Cc(t,t.block_start,n,a),t.block_start+=n,Ue(t.strm)),a?un:Ie)},bc=(t,e)=>{let r,n;for(;;){if(t.lookahead<yt){if(li(t),t.lookahead<yt&&e===mr)return Ie;if(t.lookahead===0)break}if(r=0,t.lookahead>=W&&(t.ins_h=pr(t,t.ins_h,t.window[t.strstart+W-1]),r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),r!==0&&t.strstart-r<=t.w_size-yt&&(t.match_length=ch(t,r)),t.match_length>=W)if(n=hr(t,t.strstart-t.match_start,t.match_length-W),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=W){t.match_length--;do t.strstart++,t.ins_h=pr(t,t.ins_h,t.window[t.strstart+W-1]),r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart;while(--t.match_length!==0);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=pr(t,t.ins_h,t.window[t.strstart+1]);else n=hr(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(n&&(He(t,!1),t.strm.avail_out===0))return Ie}return t.insert=t.strstart<W-1?t.strstart:W-1,e===Qe?(He(t,!0),t.strm.avail_out===0?un:ui):t.sym_next&&(He(t,!1),t.strm.avail_out===0)?Ie:di},ii=(t,e)=>{let r,n,i;for(;;){if(t.lookahead<yt){if(li(t),t.lookahead<yt&&e===mr)return Ie;if(t.lookahead===0)break}if(r=0,t.lookahead>=W&&(t.ins_h=pr(t,t.ins_h,t.window[t.strstart+W-1]),r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=W-1,r!==0&&t.prev_length<t.max_lazy_match&&t.strstart-r<=t.w_size-yt&&(t.match_length=ch(t,r),t.match_length<=5&&(t.strategy===Sg||t.match_length===W&&t.strstart-t.match_start>4096)&&(t.match_length=W-1)),t.prev_length>=W&&t.match_length<=t.prev_length){i=t.strstart+t.lookahead-W,n=hr(t,t.strstart-1-t.prev_match,t.prev_length-W),t.lookahead-=t.prev_length-1,t.prev_length-=2;do++t.strstart<=i&&(t.ins_h=pr(t,t.ins_h,t.window[t.strstart+W-1]),r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart);while(--t.prev_length!==0);if(t.match_available=0,t.match_length=W-1,t.strstart++,n&&(He(t,!1),t.strm.avail_out===0))return Ie}else if(t.match_available){if(n=hr(t,0,t.window[t.strstart-1]),n&&He(t,!1),t.strstart++,t.lookahead--,t.strm.avail_out===0)return Ie}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(n=hr(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<W-1?t.strstart:W-1,e===Qe?(He(t,!0),t.strm.avail_out===0?un:ui):t.sym_next&&(He(t,!1),t.strm.avail_out===0)?Ie:di},Hg=(t,e)=>{let r,n,i,s,a=t.window;for(;;){if(t.lookahead<=fr){if(li(t),t.lookahead<=fr&&e===mr)return Ie;if(t.lookahead===0)break}if(t.match_length=0,t.lookahead>=W&&t.strstart>0&&(i=t.strstart-1,n=a[i],n===a[++i]&&n===a[++i]&&n===a[++i])){s=t.strstart+fr;do;while(n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&i<s);t.match_length=fr-(s-i),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=W?(r=hr(t,1,t.match_length-W),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(r=hr(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),r&&(He(t,!1),t.strm.avail_out===0))return Ie}return t.insert=0,e===Qe?(He(t,!0),t.strm.avail_out===0?un:ui):t.sym_next&&(He(t,!1),t.strm.avail_out===0)?Ie:di},Vg=(t,e)=>{let r;for(;;){if(t.lookahead===0&&(li(t),t.lookahead===0)){if(e===mr)return Ie;break}if(t.match_length=0,r=hr(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,r&&(He(t,!1),t.strm.avail_out===0))return Ie}return t.insert=0,e===Qe?(He(t,!0),t.strm.avail_out===0?un:ui):t.sym_next&&(He(t,!1),t.strm.avail_out===0)?Ie:di};function mt(t,e,r,n,i){this.good_length=t,this.max_lazy=e,this.nice_length=r,this.max_chain=n,this.func=i}var Is=[new mt(0,0,0,0,dh),new mt(4,4,8,4,bc),new mt(4,5,16,8,bc),new mt(4,6,32,32,bc),new mt(4,4,16,16,ii),new mt(8,16,32,32,ii),new mt(8,16,128,128,ii),new mt(8,32,128,256,ii),new mt(32,128,258,1024,ii),new mt(32,258,258,4096,ii)],Gg=t=>{t.window_size=2*t.w_size,ur(t.head),t.max_lazy_match=Is[t.level].max_lazy,t.good_match=Is[t.level].good_length,t.nice_match=Is[t.level].nice_length,t.max_chain_length=Is[t.level].max_chain,t.strstart=0,t.block_start=0,t.lookahead=0,t.insert=0,t.match_length=t.prev_length=W-1,t.match_available=0,t.ins_h=0};function Wg(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Ro,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(zg*2),this.dyn_dtree=new Uint16Array((2*Pg+1)*2),this.bl_tree=new Uint16Array((2*Fg+1)*2),ur(this.dyn_ltree),ur(this.dyn_dtree),ur(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(Bg+1),this.heap=new Uint16Array(2*Ic+1),ur(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(2*Ic+1),ur(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}var Gs=t=>{if(!t)return 1;let e=t.state;return!e||e.strm!==t||e.status!==oi&&e.status!==Uc&&e.status!==kc&&e.status!==Rc&&e.status!==Pc&&e.status!==Fc&&e.status!==ln&&e.status!==Cs?1:0},uh=t=>{if(Gs(t))return cn(t,gt);t.total_in=t.total_out=0,t.data_type=Lg;let e=t.state;return e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=e.wrap===2?Uc:e.wrap?oi:ln,t.adler=e.wrap===2?0:1,e.last_flush=-2,gg(e),pe},fh=t=>{let e=uh(t);return e===pe&&Gg(t.state),e},Xg=(t,e)=>Gs(t)||t.state.wrap!==2?gt:(t.state.gzhead=e,pe),hh=(t,e,r,n,i,s)=>{if(!t)return gt;let a=1;if(e===wg&&(e=6),n<0?(a=0,n=-n):n>15&&(a=2,n-=16),i<1||i>Tg||r!==Ro||n<8||n>15||e<0||e>9||s<0||s>Mg||n===8&&a!==1)return cn(t,gt);n===8&&(n=9);let o=new Wg;return t.state=o,o.strm=t,o.status=oi,o.wrap=a,o.gzhead=null,o.w_bits=n,o.w_size=1<<o.w_bits,o.w_mask=o.w_size-1,o.hash_bits=i+7,o.hash_size=1<<o.hash_bits,o.hash_mask=o.hash_size-1,o.hash_shift=~~((o.hash_bits+W-1)/W),o.window=new Uint8Array(o.w_size*2),o.head=new Uint16Array(o.hash_size),o.prev=new Uint16Array(o.w_size),o.lit_bufsize=1<<i+6,o.pending_buf_size=o.lit_bufsize*4,o.pending_buf=new Uint8Array(o.pending_buf_size),o.sym_buf=o.lit_bufsize,o.sym_end=(o.lit_bufsize-1)*3,o.level=e,o.strategy=s,o.method=r,fh(t)},Kg=(t,e)=>hh(t,e,Ro,Cg,Ig,Eg),$g=(t,e)=>{if(Gs(t)||e>pf||e<0)return t?cn(t,gt):gt;let r=t.state;if(!t.output||t.avail_in!==0&&!t.input||r.status===Cs&&e!==Qe)return cn(t,t.avail_out===0?yc:gt);let n=r.last_flush;if(r.last_flush=e,r.pending!==0){if(Ue(t),t.avail_out===0)return r.last_flush=-1,pe}else if(t.avail_in===0&&yf(e)<=yf(n)&&e!==Qe)return cn(t,yc);if(r.status===Cs&&t.avail_in!==0)return cn(t,yc);if(r.status===oi&&r.wrap===0&&(r.status=ln),r.status===oi){let i=Ro+(r.w_bits-8<<4)<<8,s=-1;if(r.strategy>=So||r.level<2?s=0:r.level<6?s=1:r.level===6?s=2:s=3,i|=s<<6,r.strstart!==0&&(i|=Dg),i+=31-i%31,Ts(r,i),r.strstart!==0&&(Ts(r,t.adler>>>16),Ts(r,t.adler&65535)),t.adler=1,r.status=ln,Ue(t),r.pending!==0)return r.last_flush=-1,pe}if(r.status===Uc){if(t.adler=0,Z(r,31),Z(r,139),Z(r,8),r.gzhead)Z(r,(r.gzhead.text?1:0)+(r.gzhead.hcrc?2:0)+(r.gzhead.extra?4:0)+(r.gzhead.name?8:0)+(r.gzhead.comment?16:0)),Z(r,r.gzhead.time&255),Z(r,r.gzhead.time>>8&255),Z(r,r.gzhead.time>>16&255),Z(r,r.gzhead.time>>24&255),Z(r,r.level===9?2:r.strategy>=So||r.level<2?4:0),Z(r,r.gzhead.os&255),r.gzhead.extra&&r.gzhead.extra.length&&(Z(r,r.gzhead.extra.length&255),Z(r,r.gzhead.extra.length>>8&255)),r.gzhead.hcrc&&(t.adler=me(t.adler,r.pending_buf,r.pending,0)),r.gzindex=0,r.status=kc;else if(Z(r,0),Z(r,0),Z(r,0),Z(r,0),Z(r,0),Z(r,r.level===9?2:r.strategy>=So||r.level<2?4:0),Z(r,Og),r.status=ln,Ue(t),r.pending!==0)return r.last_flush=-1,pe}if(r.status===kc){if(r.gzhead.extra){let i=r.pending,s=(r.gzhead.extra.length&65535)-r.gzindex;for(;r.pending+s>r.pending_buf_size;){let o=r.pending_buf_size-r.pending;if(r.pending_buf.set(r.gzhead.extra.subarray(r.gzindex,r.gzindex+o),r.pending),r.pending=r.pending_buf_size,r.gzhead.hcrc&&r.pending>i&&(t.adler=me(t.adler,r.pending_buf,r.pending-i,i)),r.gzindex+=o,Ue(t),r.pending!==0)return r.last_flush=-1,pe;i=0,s-=o}let a=new Uint8Array(r.gzhead.extra);r.pending_buf.set(a.subarray(r.gzindex,r.gzindex+s),r.pending),r.pending+=s,r.gzhead.hcrc&&r.pending>i&&(t.adler=me(t.adler,r.pending_buf,r.pending-i,i)),r.gzindex=0}r.status=Rc}if(r.status===Rc){if(r.gzhead.name){let i=r.pending,s;do{if(r.pending===r.pending_buf_size){if(r.gzhead.hcrc&&r.pending>i&&(t.adler=me(t.adler,r.pending_buf,r.pending-i,i)),Ue(t),r.pending!==0)return r.last_flush=-1,pe;i=0}r.gzindex<r.gzhead.name.length?s=r.gzhead.name.charCodeAt(r.gzindex++)&255:s=0,Z(r,s)}while(s!==0);r.gzhead.hcrc&&r.pending>i&&(t.adler=me(t.adler,r.pending_buf,r.pending-i,i)),r.gzindex=0}r.status=Pc}if(r.status===Pc){if(r.gzhead.comment){let i=r.pending,s;do{if(r.pending===r.pending_buf_size){if(r.gzhead.hcrc&&r.pending>i&&(t.adler=me(t.adler,r.pending_buf,r.pending-i,i)),Ue(t),r.pending!==0)return r.last_flush=-1,pe;i=0}r.gzindex<r.gzhead.comment.length?s=r.gzhead.comment.charCodeAt(r.gzindex++)&255:s=0,Z(r,s)}while(s!==0);r.gzhead.hcrc&&r.pending>i&&(t.adler=me(t.adler,r.pending_buf,r.pending-i,i))}r.status=Fc}if(r.status===Fc){if(r.gzhead.hcrc){if(r.pending+2>r.pending_buf_size&&(Ue(t),r.pending!==0))return r.last_flush=-1,pe;Z(r,t.adler&255),Z(r,t.adler>>8&255),t.adler=0}if(r.status=ln,Ue(t),r.pending!==0)return r.last_flush=-1,pe}if(t.avail_in!==0||r.lookahead!==0||e!==mr&&r.status!==Cs){let i=r.level===0?dh(r,e):r.strategy===So?Vg(r,e):r.strategy===Ag?Hg(r,e):Is[r.level].func(r,e);if((i===un||i===ui)&&(r.status=Cs),i===Ie||i===un)return t.avail_out===0&&(r.last_flush=-1),pe;if(i===di&&(e===xg?bg(r):e!==pf&&(Cc(r,0,0,!1),e===_g&&(ur(r.head),r.lookahead===0&&(r.strstart=0,r.block_start=0,r.insert=0))),Ue(t),t.avail_out===0))return r.last_flush=-1,pe}return e!==Qe?pe:r.wrap<=0?gf:(r.wrap===2?(Z(r,t.adler&255),Z(r,t.adler>>8&255),Z(r,t.adler>>16&255),Z(r,t.adler>>24&255),Z(r,t.total_in&255),Z(r,t.total_in>>8&255),Z(r,t.total_in>>16&255),Z(r,t.total_in>>24&255)):(Ts(r,t.adler>>>16),Ts(r,t.adler&65535)),Ue(t),r.wrap>0&&(r.wrap=-r.wrap),r.pending!==0?pe:gf)},Zg=t=>{if(Gs(t))return gt;let e=t.state.status;return t.state=null,e===ln?cn(t,vg):pe},Yg=(t,e)=>{let r=e.length;if(Gs(t))return gt;let n=t.state,i=n.wrap;if(i===2||i===1&&n.status!==oi||n.lookahead)return gt;if(i===1&&(t.adler=Os(t.adler,e,r,0)),n.wrap=0,r>=n.w_size){i===0&&(ur(n.head),n.strstart=0,n.block_start=0,n.insert=0);let d=new Uint8Array(n.w_size);d.set(e.subarray(r-n.w_size,r),0),e=d,r=n.w_size}let s=t.avail_in,a=t.next_in,o=t.input;for(t.avail_in=r,t.next_in=0,t.input=e,li(n);n.lookahead>=W;){let d=n.strstart,l=n.lookahead-(W-1);do n.ins_h=pr(n,n.ins_h,n.window[d+W-1]),n.prev[d&n.w_mask]=n.head[n.ins_h],n.head[n.ins_h]=d,d++;while(--l);n.strstart=d,n.lookahead=W-1,li(n)}return n.strstart+=n.lookahead,n.block_start=n.strstart,n.insert=n.lookahead,n.lookahead=0,n.match_length=n.prev_length=W-1,n.match_available=0,t.next_in=a,t.input=o,t.avail_in=s,n.wrap=i,pe},qg=Kg,jg=hh,Qg=fh,Jg=uh,ey=Xg,ty=$g,ry=Zg,ny=Yg,iy="pako deflate (from Nodeca project)",Rs={deflateInit:qg,deflateInit2:jg,deflateReset:Qg,deflateResetKeep:Jg,deflateSetHeader:ey,deflate:ty,deflateEnd:ry,deflateSetDictionary:ny,deflateInfo:iy},sy=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),ay=function(t){let e=Array.prototype.slice.call(arguments,1);for(;e.length;){let r=e.shift();if(r){if(typeof r!="object")throw new TypeError(r+"must be non-object");for(let n in r)sy(r,n)&&(t[n]=r[n])}}return t},oy=t=>{let e=0;for(let n=0,i=t.length;n<i;n++)e+=t[n].length;let r=new Uint8Array(e);for(let n=0,i=0,s=t.length;n<s;n++){let a=t[n];r.set(a,i),i+=a.length}return r},Po={assign:ay,flattenChunks:oy},mh=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch{mh=!1}var Ns=new Uint8Array(256);for(let t=0;t<256;t++)Ns[t]=t>=252?6:t>=248?5:t>=240?4:t>=224?3:t>=192?2:1;Ns[254]=Ns[254]=1;var ly=t=>{if(typeof TextEncoder=="function"&&TextEncoder.prototype.encode)return new TextEncoder().encode(t);let e,r,n,i,s,a=t.length,o=0;for(i=0;i<a;i++)r=t.charCodeAt(i),(r&64512)===55296&&i+1<a&&(n=t.charCodeAt(i+1),(n&64512)===56320&&(r=65536+(r-55296<<10)+(n-56320),i++)),o+=r<128?1:r<2048?2:r<65536?3:4;for(e=new Uint8Array(o),s=0,i=0;s<o;i++)r=t.charCodeAt(i),(r&64512)===55296&&i+1<a&&(n=t.charCodeAt(i+1),(n&64512)===56320&&(r=65536+(r-55296<<10)+(n-56320),i++)),r<128?e[s++]=r:r<2048?(e[s++]=192|r>>>6,e[s++]=128|r&63):r<65536?(e[s++]=224|r>>>12,e[s++]=128|r>>>6&63,e[s++]=128|r&63):(e[s++]=240|r>>>18,e[s++]=128|r>>>12&63,e[s++]=128|r>>>6&63,e[s++]=128|r&63);return e},cy=(t,e)=>{if(e<65534&&t.subarray&&mh)return String.fromCharCode.apply(null,t.length===e?t:t.subarray(0,e));let r="";for(let n=0;n<e;n++)r+=String.fromCharCode(t[n]);return r},dy=(t,e)=>{let r=e||t.length;if(typeof TextDecoder=="function"&&TextDecoder.prototype.decode)return new TextDecoder().decode(t.subarray(0,e));let n,i,s=new Array(r*2);for(i=0,n=0;n<r;){let a=t[n++];if(a<128){s[i++]=a;continue}let o=Ns[a];if(o>4){s[i++]=65533,n+=o-1;continue}for(a&=o===2?31:o===3?15:7;o>1&&n<r;)a=a<<6|t[n++]&63,o--;if(o>1){s[i++]=65533;continue}a<65536?s[i++]=a:(a-=65536,s[i++]=55296|a>>10&1023,s[i++]=56320|a&1023)}return cy(s,i)},uy=(t,e)=>{e=e||t.length,e>t.length&&(e=t.length);let r=e-1;for(;r>=0&&(t[r]&192)===128;)r--;return r<0||r===0?e:r+Ns[t[r]]>e?r:e},Us={string2buf:ly,buf2string:dy,utf8border:uy};function fy(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}var ph=fy,gh=Object.prototype.toString,{Z_NO_FLUSH:hy,Z_SYNC_FLUSH:my,Z_FULL_FLUSH:py,Z_FINISH:gy,Z_OK:Io,Z_STREAM_END:yy,Z_DEFAULT_COMPRESSION:by,Z_DEFAULT_STRATEGY:xy,Z_DEFLATED:_y}=hn;function Ws(t){this.options=Po.assign({level:by,method:_y,chunkSize:16384,windowBits:15,memLevel:8,strategy:xy},t||{});let e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new ph,this.strm.avail_out=0;let r=Rs.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(r!==Io)throw new Error(dn[r]);if(e.header&&Rs.deflateSetHeader(this.strm,e.header),e.dictionary){let n;if(typeof e.dictionary=="string"?n=Us.string2buf(e.dictionary):gh.call(e.dictionary)==="[object ArrayBuffer]"?n=new Uint8Array(e.dictionary):n=e.dictionary,r=Rs.deflateSetDictionary(this.strm,n),r!==Io)throw new Error(dn[r]);this._dict_set=!0}}Ws.prototype.push=function(t,e){let r=this.strm,n=this.options.chunkSize,i,s;if(this.ended)return!1;for(e===~~e?s=e:s=e===!0?gy:hy,typeof t=="string"?r.input=Us.string2buf(t):gh.call(t)==="[object ArrayBuffer]"?r.input=new Uint8Array(t):r.input=t,r.next_in=0,r.avail_in=r.input.length;;){if(r.avail_out===0&&(r.output=new Uint8Array(n),r.next_out=0,r.avail_out=n),(s===my||s===py)&&r.avail_out<=6){this.onData(r.output.subarray(0,r.next_out)),r.avail_out=0;continue}if(i=Rs.deflate(r,s),i===yy)return r.next_out>0&&this.onData(r.output.subarray(0,r.next_out)),i=Rs.deflateEnd(this.strm),this.onEnd(i),this.ended=!0,i===Io;if(r.avail_out===0){this.onData(r.output);continue}if(s>0&&r.next_out>0){this.onData(r.output.subarray(0,r.next_out)),r.avail_out=0;continue}if(r.avail_in===0)break}return!0};Ws.prototype.onData=function(t){this.chunks.push(t)};Ws.prototype.onEnd=function(t){t===Io&&(this.result=Po.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};function Hc(t,e){let r=new Ws(e);if(r.push(t,!0),r.err)throw r.msg||dn[r.err];return r.result}function vy(t,e){return e=e||{},e.raw=!0,Hc(t,e)}function wy(t,e){return e=e||{},e.gzip=!0,Hc(t,e)}var Sy=Ws,Ay=Hc,My=vy,Ey=wy,Ly=hn,Ty={Deflate:Sy,deflate:Ay,deflateRaw:My,gzip:Ey,constants:Ly},Ao=16209,Cy=16191,Iy=function(e,r){let n,i,s,a,o,d,l,c,f,u,h,m,g,p,y,_,x,b,v,S,w,L,C,A,I=e.state;n=e.next_in,C=e.input,i=n+(e.avail_in-5),s=e.next_out,A=e.output,a=s-(r-e.avail_out),o=s+(e.avail_out-257),d=I.dmax,l=I.wsize,c=I.whave,f=I.wnext,u=I.window,h=I.hold,m=I.bits,g=I.lencode,p=I.distcode,y=(1<<I.lenbits)-1,_=(1<<I.distbits)-1;e:do{m<15&&(h+=C[n++]<<m,m+=8,h+=C[n++]<<m,m+=8),x=g[h&y];t:for(;;){if(b=x>>>24,h>>>=b,m-=b,b=x>>>16&255,b===0)A[s++]=x&65535;else if(b&16){v=x&65535,b&=15,b&&(m<b&&(h+=C[n++]<<m,m+=8),v+=h&(1<<b)-1,h>>>=b,m-=b),m<15&&(h+=C[n++]<<m,m+=8,h+=C[n++]<<m,m+=8),x=p[h&_];r:for(;;){if(b=x>>>24,h>>>=b,m-=b,b=x>>>16&255,b&16){if(S=x&65535,b&=15,m<b&&(h+=C[n++]<<m,m+=8,m<b&&(h+=C[n++]<<m,m+=8)),S+=h&(1<<b)-1,S>d){e.msg="invalid distance too far back",I.mode=Ao;break e}if(h>>>=b,m-=b,b=s-a,S>b){if(b=S-b,b>c&&I.sane){e.msg="invalid distance too far back",I.mode=Ao;break e}if(w=0,L=u,f===0){if(w+=l-b,b<v){v-=b;do A[s++]=u[w++];while(--b);w=s-S,L=A}}else if(f<b){if(w+=l+f-b,b-=f,b<v){v-=b;do A[s++]=u[w++];while(--b);if(w=0,f<v){b=f,v-=b;do A[s++]=u[w++];while(--b);w=s-S,L=A}}}else if(w+=f-b,b<v){v-=b;do A[s++]=u[w++];while(--b);w=s-S,L=A}for(;v>2;)A[s++]=L[w++],A[s++]=L[w++],A[s++]=L[w++],v-=3;v&&(A[s++]=L[w++],v>1&&(A[s++]=L[w++]))}else{w=s-S;do A[s++]=A[w++],A[s++]=A[w++],A[s++]=A[w++],v-=3;while(v>2);v&&(A[s++]=A[w++],v>1&&(A[s++]=A[w++]))}}else if((b&64)===0){x=p[(x&65535)+(h&(1<<b)-1)];continue r}else{e.msg="invalid distance code",I.mode=Ao;break e}break}}else if((b&64)===0){x=g[(x&65535)+(h&(1<<b)-1)];continue t}else if(b&32){I.mode=Cy;break e}else{e.msg="invalid literal/length code",I.mode=Ao;break e}break}}while(n<i&&s<o);v=m>>3,n-=v,m-=v<<3,h&=(1<<m)-1,e.next_in=n,e.next_out=s,e.avail_in=n<i?5+(i-n):5-(n-i),e.avail_out=s<o?257+(o-s):257-(s-o),I.hold=h,I.bits=m},si=15,bf=852,xf=592,_f=0,xc=1,vf=2,ky=new Uint16Array([3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0]),Ry=new Uint8Array([16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78]),Py=new Uint16Array([1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0]),Fy=new Uint8Array([16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64]),zy=(t,e,r,n,i,s,a,o)=>{let d=o.bits,l=0,c=0,f=0,u=0,h=0,m=0,g=0,p=0,y=0,_=0,x,b,v,S,w,L=null,C,A=new Uint16Array(si+1),I=new Uint16Array(si+1),R=null,F,k,V;for(l=0;l<=si;l++)A[l]=0;for(c=0;c<n;c++)A[e[r+c]]++;for(h=d,u=si;u>=1&&A[u]===0;u--);if(h>u&&(h=u),u===0)return i[s++]=1<<24|64<<16|0,i[s++]=1<<24|64<<16|0,o.bits=1,0;for(f=1;f<u&&A[f]===0;f++);for(h<f&&(h=f),p=1,l=1;l<=si;l++)if(p<<=1,p-=A[l],p<0)return-1;if(p>0&&(t===_f||u!==1))return-1;for(I[1]=0,l=1;l<si;l++)I[l+1]=I[l]+A[l];for(c=0;c<n;c++)e[r+c]!==0&&(a[I[e[r+c]]++]=c);if(t===_f?(L=R=a,C=20):t===xc?(L=ky,R=Ry,C=257):(L=Py,R=Fy,C=0),_=0,c=0,l=f,w=s,m=h,g=0,v=-1,y=1<<h,S=y-1,t===xc&&y>bf||t===vf&&y>xf)return 1;for(;;){F=l-g,a[c]+1<C?(k=0,V=a[c]):a[c]>=C?(k=R[a[c]-C],V=L[a[c]-C]):(k=96,V=0),x=1<<l-g,b=1<<m,f=b;do b-=x,i[w+(_>>g)+b]=F<<24|k<<16|V|0;while(b!==0);for(x=1<<l-1;_&x;)x>>=1;if(x!==0?(_&=x-1,_+=x):_=0,c++,--A[l]===0){if(l===u)break;l=e[r+a[c]]}if(l>h&&(_&S)!==v){for(g===0&&(g=h),w+=f,m=l-g,p=1<<m;m+g<u&&(p-=A[m+g],!(p<=0));)m++,p<<=1;if(y+=1<<m,t===xc&&y>bf||t===vf&&y>xf)return 1;v=_&S,i[v]=h<<24|m<<16|w-s|0}}return _!==0&&(i[w+_]=l-g<<24|64<<16|0),o.bits=h,0},Ps=zy,By=0,yh=1,bh=2,{Z_FINISH:wf,Z_BLOCK:Dy,Z_TREES:Mo,Z_OK:fn,Z_STREAM_END:Oy,Z_NEED_DICT:Ny,Z_STREAM_ERROR:Je,Z_DATA_ERROR:xh,Z_MEM_ERROR:_h,Z_BUF_ERROR:Uy,Z_DEFLATED:Sf}=hn,Fo=16180,Af=16181,Mf=16182,Ef=16183,Lf=16184,Tf=16185,Cf=16186,If=16187,kf=16188,Rf=16189,ko=16190,Ot=16191,_c=16192,Pf=16193,vc=16194,Ff=16195,zf=16196,Bf=16197,Df=16198,Eo=16199,Lo=16200,Of=16201,Nf=16202,Uf=16203,Hf=16204,Vf=16205,wc=16206,Gf=16207,Wf=16208,ie=16209,vh=16210,wh=16211,Hy=852,Vy=592,Gy=15,Wy=Gy,Xf=t=>(t>>>24&255)+(t>>>8&65280)+((t&65280)<<8)+((t&255)<<24);function Xy(){this.strm=null,this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}var mn=t=>{if(!t)return 1;let e=t.state;return!e||e.strm!==t||e.mode<Fo||e.mode>wh?1:0},Sh=t=>{if(mn(t))return Je;let e=t.state;return t.total_in=t.total_out=e.total=0,t.msg="",e.wrap&&(t.adler=e.wrap&1),e.mode=Fo,e.last=0,e.havedict=0,e.flags=-1,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new Int32Array(Hy),e.distcode=e.distdyn=new Int32Array(Vy),e.sane=1,e.back=-1,fn},Ah=t=>{if(mn(t))return Je;let e=t.state;return e.wsize=0,e.whave=0,e.wnext=0,Sh(t)},Mh=(t,e)=>{let r;if(mn(t))return Je;let n=t.state;return e<0?(r=0,e=-e):(r=(e>>4)+5,e<48&&(e&=15)),e&&(e<8||e>15)?Je:(n.window!==null&&n.wbits!==e&&(n.window=null),n.wrap=r,n.wbits=e,Ah(t))},Eh=(t,e)=>{if(!t)return Je;let r=new Xy;t.state=r,r.strm=t,r.window=null,r.mode=Fo;let n=Mh(t,e);return n!==fn&&(t.state=null),n},Ky=t=>Eh(t,Wy),Kf=!0,Sc,Ac,$y=t=>{if(Kf){Sc=new Int32Array(512),Ac=new Int32Array(32);let e=0;for(;e<144;)t.lens[e++]=8;for(;e<256;)t.lens[e++]=9;for(;e<280;)t.lens[e++]=7;for(;e<288;)t.lens[e++]=8;for(Ps(yh,t.lens,0,288,Sc,0,t.work,{bits:9}),e=0;e<32;)t.lens[e++]=5;Ps(bh,t.lens,0,32,Ac,0,t.work,{bits:5}),Kf=!1}t.lencode=Sc,t.lenbits=9,t.distcode=Ac,t.distbits=5},Lh=(t,e,r,n)=>{let i,s=t.state;return s.window===null&&(s.wsize=1<<s.wbits,s.wnext=0,s.whave=0,s.window=new Uint8Array(s.wsize)),n>=s.wsize?(s.window.set(e.subarray(r-s.wsize,r),0),s.wnext=0,s.whave=s.wsize):(i=s.wsize-s.wnext,i>n&&(i=n),s.window.set(e.subarray(r-n,r-n+i),s.wnext),n-=i,n?(s.window.set(e.subarray(r-n,r),0),s.wnext=n,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave<s.wsize&&(s.whave+=i))),0},Zy=(t,e)=>{let r,n,i,s,a,o,d,l,c,f,u,h,m,g,p=0,y,_,x,b,v,S,w,L,C=new Uint8Array(4),A,I,R=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(mn(t)||!t.output||!t.input&&t.avail_in!==0)return Je;r=t.state,r.mode===Ot&&(r.mode=_c),a=t.next_out,i=t.output,d=t.avail_out,s=t.next_in,n=t.input,o=t.avail_in,l=r.hold,c=r.bits,f=o,u=d,L=fn;e:for(;;)switch(r.mode){case Fo:if(r.wrap===0){r.mode=_c;break}for(;c<16;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}if(r.wrap&2&&l===35615){r.wbits===0&&(r.wbits=15),r.check=0,C[0]=l&255,C[1]=l>>>8&255,r.check=me(r.check,C,2,0),l=0,c=0,r.mode=Af;break}if(r.head&&(r.head.done=!1),!(r.wrap&1)||(((l&255)<<8)+(l>>8))%31){t.msg="incorrect header check",r.mode=ie;break}if((l&15)!==Sf){t.msg="unknown compression method",r.mode=ie;break}if(l>>>=4,c-=4,w=(l&15)+8,r.wbits===0&&(r.wbits=w),w>15||w>r.wbits){t.msg="invalid window size",r.mode=ie;break}r.dmax=1<<r.wbits,r.flags=0,t.adler=r.check=1,r.mode=l&512?Rf:Ot,l=0,c=0;break;case Af:for(;c<16;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}if(r.flags=l,(r.flags&255)!==Sf){t.msg="unknown compression method",r.mode=ie;break}if(r.flags&57344){t.msg="unknown header flags set",r.mode=ie;break}r.head&&(r.head.text=l>>8&1),r.flags&512&&r.wrap&4&&(C[0]=l&255,C[1]=l>>>8&255,r.check=me(r.check,C,2,0)),l=0,c=0,r.mode=Mf;case Mf:for(;c<32;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}r.head&&(r.head.time=l),r.flags&512&&r.wrap&4&&(C[0]=l&255,C[1]=l>>>8&255,C[2]=l>>>16&255,C[3]=l>>>24&255,r.check=me(r.check,C,4,0)),l=0,c=0,r.mode=Ef;case Ef:for(;c<16;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}r.head&&(r.head.xflags=l&255,r.head.os=l>>8),r.flags&512&&r.wrap&4&&(C[0]=l&255,C[1]=l>>>8&255,r.check=me(r.check,C,2,0)),l=0,c=0,r.mode=Lf;case Lf:if(r.flags&1024){for(;c<16;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}r.length=l,r.head&&(r.head.extra_len=l),r.flags&512&&r.wrap&4&&(C[0]=l&255,C[1]=l>>>8&255,r.check=me(r.check,C,2,0)),l=0,c=0}else r.head&&(r.head.extra=null);r.mode=Tf;case Tf:if(r.flags&1024&&(h=r.length,h>o&&(h=o),h&&(r.head&&(w=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Uint8Array(r.head.extra_len)),r.head.extra.set(n.subarray(s,s+h),w)),r.flags&512&&r.wrap&4&&(r.check=me(r.check,n,h,s)),o-=h,s+=h,r.length-=h),r.length))break e;r.length=0,r.mode=Cf;case Cf:if(r.flags&2048){if(o===0)break e;h=0;do w=n[s+h++],r.head&&w&&r.length<65536&&(r.head.name+=String.fromCharCode(w));while(w&&h<o);if(r.flags&512&&r.wrap&4&&(r.check=me(r.check,n,h,s)),o-=h,s+=h,w)break e}else r.head&&(r.head.name=null);r.length=0,r.mode=If;case If:if(r.flags&4096){if(o===0)break e;h=0;do w=n[s+h++],r.head&&w&&r.length<65536&&(r.head.comment+=String.fromCharCode(w));while(w&&h<o);if(r.flags&512&&r.wrap&4&&(r.check=me(r.check,n,h,s)),o-=h,s+=h,w)break e}else r.head&&(r.head.comment=null);r.mode=kf;case kf:if(r.flags&512){for(;c<16;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}if(r.wrap&4&&l!==(r.check&65535)){t.msg="header crc mismatch",r.mode=ie;break}l=0,c=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),t.adler=r.check=0,r.mode=Ot;break;case Rf:for(;c<32;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}t.adler=r.check=Xf(l),l=0,c=0,r.mode=ko;case ko:if(r.havedict===0)return t.next_out=a,t.avail_out=d,t.next_in=s,t.avail_in=o,r.hold=l,r.bits=c,Ny;t.adler=r.check=1,r.mode=Ot;case Ot:if(e===Dy||e===Mo)break e;case _c:if(r.last){l>>>=c&7,c-=c&7,r.mode=wc;break}for(;c<3;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}switch(r.last=l&1,l>>>=1,c-=1,l&3){case 0:r.mode=Pf;break;case 1:if($y(r),r.mode=Eo,e===Mo){l>>>=2,c-=2;break e}break;case 2:r.mode=zf;break;case 3:t.msg="invalid block type",r.mode=ie}l>>>=2,c-=2;break;case Pf:for(l>>>=c&7,c-=c&7;c<32;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}if((l&65535)!==(l>>>16^65535)){t.msg="invalid stored block lengths",r.mode=ie;break}if(r.length=l&65535,l=0,c=0,r.mode=vc,e===Mo)break e;case vc:r.mode=Ff;case Ff:if(h=r.length,h){if(h>o&&(h=o),h>d&&(h=d),h===0)break e;i.set(n.subarray(s,s+h),a),o-=h,s+=h,d-=h,a+=h,r.length-=h;break}r.mode=Ot;break;case zf:for(;c<14;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}if(r.nlen=(l&31)+257,l>>>=5,c-=5,r.ndist=(l&31)+1,l>>>=5,c-=5,r.ncode=(l&15)+4,l>>>=4,c-=4,r.nlen>286||r.ndist>30){t.msg="too many length or distance symbols",r.mode=ie;break}r.have=0,r.mode=Bf;case Bf:for(;r.have<r.ncode;){for(;c<3;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}r.lens[R[r.have++]]=l&7,l>>>=3,c-=3}for(;r.have<19;)r.lens[R[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,A={bits:r.lenbits},L=Ps(By,r.lens,0,19,r.lencode,0,r.work,A),r.lenbits=A.bits,L){t.msg="invalid code lengths set",r.mode=ie;break}r.have=0,r.mode=Df;case Df:for(;r.have<r.nlen+r.ndist;){for(;p=r.lencode[l&(1<<r.lenbits)-1],y=p>>>24,_=p>>>16&255,x=p&65535,!(y<=c);){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}if(x<16)l>>>=y,c-=y,r.lens[r.have++]=x;else{if(x===16){for(I=y+2;c<I;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}if(l>>>=y,c-=y,r.have===0){t.msg="invalid bit length repeat",r.mode=ie;break}w=r.lens[r.have-1],h=3+(l&3),l>>>=2,c-=2}else if(x===17){for(I=y+3;c<I;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}l>>>=y,c-=y,w=0,h=3+(l&7),l>>>=3,c-=3}else{for(I=y+7;c<I;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}l>>>=y,c-=y,w=0,h=11+(l&127),l>>>=7,c-=7}if(r.have+h>r.nlen+r.ndist){t.msg="invalid bit length repeat",r.mode=ie;break}for(;h--;)r.lens[r.have++]=w}}if(r.mode===ie)break;if(r.lens[256]===0){t.msg="invalid code -- missing end-of-block",r.mode=ie;break}if(r.lenbits=9,A={bits:r.lenbits},L=Ps(yh,r.lens,0,r.nlen,r.lencode,0,r.work,A),r.lenbits=A.bits,L){t.msg="invalid literal/lengths set",r.mode=ie;break}if(r.distbits=6,r.distcode=r.distdyn,A={bits:r.distbits},L=Ps(bh,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,A),r.distbits=A.bits,L){t.msg="invalid distances set",r.mode=ie;break}if(r.mode=Eo,e===Mo)break e;case Eo:r.mode=Lo;case Lo:if(o>=6&&d>=258){t.next_out=a,t.avail_out=d,t.next_in=s,t.avail_in=o,r.hold=l,r.bits=c,Iy(t,u),a=t.next_out,i=t.output,d=t.avail_out,s=t.next_in,n=t.input,o=t.avail_in,l=r.hold,c=r.bits,r.mode===Ot&&(r.back=-1);break}for(r.back=0;p=r.lencode[l&(1<<r.lenbits)-1],y=p>>>24,_=p>>>16&255,x=p&65535,!(y<=c);){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}if(_&&(_&240)===0){for(b=y,v=_,S=x;p=r.lencode[S+((l&(1<<b+v)-1)>>b)],y=p>>>24,_=p>>>16&255,x=p&65535,!(b+y<=c);){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}l>>>=b,c-=b,r.back+=b}if(l>>>=y,c-=y,r.back+=y,r.length=x,_===0){r.mode=Vf;break}if(_&32){r.back=-1,r.mode=Ot;break}if(_&64){t.msg="invalid literal/length code",r.mode=ie;break}r.extra=_&15,r.mode=Of;case Of:if(r.extra){for(I=r.extra;c<I;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}r.length+=l&(1<<r.extra)-1,l>>>=r.extra,c-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=Nf;case Nf:for(;p=r.distcode[l&(1<<r.distbits)-1],y=p>>>24,_=p>>>16&255,x=p&65535,!(y<=c);){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}if((_&240)===0){for(b=y,v=_,S=x;p=r.distcode[S+((l&(1<<b+v)-1)>>b)],y=p>>>24,_=p>>>16&255,x=p&65535,!(b+y<=c);){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}l>>>=b,c-=b,r.back+=b}if(l>>>=y,c-=y,r.back+=y,_&64){t.msg="invalid distance code",r.mode=ie;break}r.offset=x,r.extra=_&15,r.mode=Uf;case Uf:if(r.extra){for(I=r.extra;c<I;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}r.offset+=l&(1<<r.extra)-1,l>>>=r.extra,c-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){t.msg="invalid distance too far back",r.mode=ie;break}r.mode=Hf;case Hf:if(d===0)break e;if(h=u-d,r.offset>h){if(h=r.offset-h,h>r.whave&&r.sane){t.msg="invalid distance too far back",r.mode=ie;break}h>r.wnext?(h-=r.wnext,m=r.wsize-h):m=r.wnext-h,h>r.length&&(h=r.length),g=r.window}else g=i,m=a-r.offset,h=r.length;h>d&&(h=d),d-=h,r.length-=h;do i[a++]=g[m++];while(--h);r.length===0&&(r.mode=Lo);break;case Vf:if(d===0)break e;i[a++]=r.length,d--,r.mode=Lo;break;case wc:if(r.wrap){for(;c<32;){if(o===0)break e;o--,l|=n[s++]<<c,c+=8}if(u-=d,t.total_out+=u,r.total+=u,r.wrap&4&&u&&(t.adler=r.check=r.flags?me(r.check,i,u,a-u):Os(r.check,i,u,a-u)),u=d,r.wrap&4&&(r.flags?l:Xf(l))!==r.check){t.msg="incorrect data check",r.mode=ie;break}l=0,c=0}r.mode=Gf;case Gf:if(r.wrap&&r.flags){for(;c<32;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}if(r.wrap&4&&l!==(r.total&4294967295)){t.msg="incorrect length check",r.mode=ie;break}l=0,c=0}r.mode=Wf;case Wf:L=Oy;break e;case ie:L=xh;break e;case vh:return _h;case wh:default:return Je}return t.next_out=a,t.avail_out=d,t.next_in=s,t.avail_in=o,r.hold=l,r.bits=c,(r.wsize||u!==t.avail_out&&r.mode<ie&&(r.mode<wc||e!==wf))&&Lh(t,t.output,t.next_out,u-t.avail_out),f-=t.avail_in,u-=t.avail_out,t.total_in+=f,t.total_out+=u,r.total+=u,r.wrap&4&&u&&(t.adler=r.check=r.flags?me(r.check,i,u,t.next_out-u):Os(r.check,i,u,t.next_out-u)),t.data_type=r.bits+(r.last?64:0)+(r.mode===Ot?128:0)+(r.mode===Eo||r.mode===vc?256:0),(f===0&&u===0||e===wf)&&L===fn&&(L=Uy),L},Yy=t=>{if(mn(t))return Je;let e=t.state;return e.window&&(e.window=null),t.state=null,fn},qy=(t,e)=>{if(mn(t))return Je;let r=t.state;return(r.wrap&2)===0?Je:(r.head=e,e.done=!1,fn)},jy=(t,e)=>{let r=e.length,n,i,s;return mn(t)||(n=t.state,n.wrap!==0&&n.mode!==ko)?Je:n.mode===ko&&(i=1,i=Os(i,e,r,0),i!==n.check)?xh:(s=Lh(t,e,r,r),s?(n.mode=vh,_h):(n.havedict=1,fn))},Qy=Ah,Jy=Mh,eb=Sh,tb=Ky,rb=Eh,nb=Zy,ib=Yy,sb=qy,ab=jy,ob="pako inflate (from Nodeca project)",Ut={inflateReset:Qy,inflateReset2:Jy,inflateResetKeep:eb,inflateInit:tb,inflateInit2:rb,inflate:nb,inflateEnd:ib,inflateGetHeader:sb,inflateSetDictionary:ab,inflateInfo:ob};function lb(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}var cb=lb,Th=Object.prototype.toString,{Z_NO_FLUSH:db,Z_FINISH:ub,Z_OK:Hs,Z_STREAM_END:Mc,Z_NEED_DICT:Ec,Z_STREAM_ERROR:fb,Z_DATA_ERROR:$f,Z_MEM_ERROR:hb}=hn;function Xs(t){this.options=Po.assign({chunkSize:1024*64,windowBits:15,to:""},t||{});let e=this.options;e.raw&&e.windowBits>=0&&e.windowBits<16&&(e.windowBits=-e.windowBits,e.windowBits===0&&(e.windowBits=-15)),e.windowBits>=0&&e.windowBits<16&&!(t&&t.windowBits)&&(e.windowBits+=32),e.windowBits>15&&e.windowBits<48&&(e.windowBits&15)===0&&(e.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new ph,this.strm.avail_out=0;let r=Ut.inflateInit2(this.strm,e.windowBits);if(r!==Hs)throw new Error(dn[r]);if(this.header=new cb,Ut.inflateGetHeader(this.strm,this.header),e.dictionary&&(typeof e.dictionary=="string"?e.dictionary=Us.string2buf(e.dictionary):Th.call(e.dictionary)==="[object ArrayBuffer]"&&(e.dictionary=new Uint8Array(e.dictionary)),e.raw&&(r=Ut.inflateSetDictionary(this.strm,e.dictionary),r!==Hs)))throw new Error(dn[r])}Xs.prototype.push=function(t,e){let r=this.strm,n=this.options.chunkSize,i=this.options.dictionary,s,a,o;if(this.ended)return!1;for(e===~~e?a=e:a=e===!0?ub:db,Th.call(t)==="[object ArrayBuffer]"?r.input=new Uint8Array(t):r.input=t,r.next_in=0,r.avail_in=r.input.length;;){for(r.avail_out===0&&(r.output=new Uint8Array(n),r.next_out=0,r.avail_out=n),s=Ut.inflate(r,a),s===Ec&&i&&(s=Ut.inflateSetDictionary(r,i),s===Hs?s=Ut.inflate(r,a):s===$f&&(s=Ec));r.avail_in>0&&s===Mc&&r.state.wrap>0&&t[r.next_in]!==0;)Ut.inflateReset(r),s=Ut.inflate(r,a);switch(s){case fb:case $f:case Ec:case hb:return this.onEnd(s),this.ended=!0,!1}if(o=r.avail_out,r.next_out&&(r.avail_out===0||s===Mc))if(this.options.to==="string"){let d=Us.utf8border(r.output,r.next_out),l=r.next_out-d,c=Us.buf2string(r.output,d);r.next_out=l,r.avail_out=n-l,l&&r.output.set(r.output.subarray(d,d+l),0),this.onData(c)}else this.onData(r.output.length===r.next_out?r.output:r.output.subarray(0,r.next_out));if(!(s===Hs&&o===0)){if(s===Mc)return s=Ut.inflateEnd(this.strm),this.onEnd(s),this.ended=!0,!0;if(r.avail_in===0)break}}return!0};Xs.prototype.onData=function(t){this.chunks.push(t)};Xs.prototype.onEnd=function(t){t===Hs&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=Po.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};function Vc(t,e){let r=new Xs(e);if(r.push(t),r.err)throw r.msg||dn[r.err];return r.result}function mb(t,e){return e=e||{},e.raw=!0,Vc(t,e)}var pb=Xs,gb=Vc,yb=mb,bb=Vc,xb=hn,_b={Inflate:pb,inflate:gb,inflateRaw:yb,ungzip:bb,constants:xb},{Deflate:vb,deflate:wb,deflateRaw:Sb,gzip:Ab}=Ty,{Inflate:Mb,inflate:Eb,inflateRaw:Lb,ungzip:Tb}=_b,Cb=vb,Ib=wb,kb=Sb,Rb=Ab,Pb=Mb,Fb=Eb,zb=Lb,Bb=Tb,Db=hn,Gc={Deflate:Cb,deflate:Ib,deflateRaw:kb,gzip:Rb,Inflate:Pb,inflate:Fb,inflateRaw:zb,ungzip:Bb,constants:Db};var fi=class fi{constructor(e=fi.INITIAL_SIZE){this.buffer=new Uint8Array(e),this.readOffset=0,this.writeOffset=0}append(e){let r=e instanceof Uint8Array?e:new Uint8Array(e),n=this.writeOffset+r.length;n>this.buffer.length&&this.grow(n),this.buffer.set(r,this.writeOffset),this.writeOffset+=r.length}hasBytes(e){return this.writeOffset-this.readOffset>=e}available(){return this.writeOffset-this.readOffset}readByte(){if(!this.hasBytes(1))throw new Error("Buffer underflow");return this.buffer[this.readOffset++]}readShort(){if(!this.hasBytes(2))throw new Error("Buffer underflow");let e=this.buffer[this.readOffset]|this.buffer[this.readOffset+1]<<8;return this.readOffset+=2,e>32767?e-65536:e}readLong(){if(!this.hasBytes(4))throw new Error("Buffer underflow");let e=this.buffer[this.readOffset]|this.buffer[this.readOffset+1]<<8|this.buffer[this.readOffset+2]<<16|this.buffer[this.readOffset+3]<<24;return this.readOffset+=4,e}readFloat(){if(!this.hasBytes(4))throw new Error("Buffer underflow");let r=new DataView(this.buffer.buffer,this.buffer.byteOffset+this.readOffset,4).getFloat32(0,!0);return this.readOffset+=4,r}readString(){let e=Math.min(fi.MAX_STRING_LENGTH,this.writeOffset-this.readOffset),r=0;for(;r<e&&this.buffer[this.readOffset+r]!==0;)r++;if(r>=e)throw this.writeOffset-this.readOffset<=e?new Error("Buffer underflow"):new Error("String exceeds max length");let n=this.buffer.slice(this.readOffset,this.readOffset+r);return this.readOffset+=r+1,new TextDecoder("latin1").decode(n)}peekBytes(e){if(!this.hasBytes(e))throw new Error("Buffer underflow");return this.buffer.slice(this.readOffset,this.readOffset+e)}readBytes(e){if(!this.hasBytes(e))throw new Error("Buffer underflow");let r=this.buffer.slice(this.readOffset,this.readOffset+e);return this.readOffset+=e,r}readData(e){return this.readBytes(e)}getReadPosition(){return this.readOffset}getWritePosition(){return this.writeOffset}setReadPosition(e){if(e<0||e>this.writeOffset)throw new Error("Invalid read position");this.readOffset=e}grow(e){let r=e?Math.max(e,this.buffer.length*2):this.buffer.length*2,n=new Uint8Array(r);n.set(this.buffer),this.buffer=n}compact(){if(this.readOffset===0)return;let e=this.writeOffset-this.readOffset;if(e===0){this.readOffset=0,this.writeOffset=0;return}this.buffer.copyWithin(0,this.readOffset,this.writeOffset),this.readOffset=0,this.writeOffset=e}getCapacity(){return this.buffer.length}reset(){this.readOffset=0,this.writeOffset=0}};fi.INITIAL_SIZE=64*1024,fi.MAX_STRING_LENGTH=2048;var zo=fi;var hi=2023,gr=1,yr=2,br=4,xr=8,_r=16,vr=32,$s=64,Ks=128,Bo=256,wr=512,Sr=1024,Ar=2048,bt=4096,Mr=8192,xt=16384,Do=32768,_t=65536,Er=1<<17,vt=1<<18,wt=1<<19,Lr=1<<20,Tr=1<<21,Cr=1<<22,Oo=1<<23,Ir=1<<24,St=1<<25,kr=1<<26,Rr=1<<27,Pr=1<<28,Fr=1<<29,zr=1<<30,No=-2147483648,Br=1,Dr=2,Or=4;var Ob=1,Nb=2,Ub=128,Ht=()=>({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,bits:0,bitsHigh:0,alpha:0,scale:0,instanceBits:0,loopVolume:0,loopAttenuation:0,owner:0,oldFrame:0}),pn=()=>({pm_type:0,origin:{x:0,y:0,z:0},velocity:{x:0,y:0,z:0},pm_time:0,pm_flags:0,gravity:0,delta_angles:{x:0,y:0,z:0},viewoffset:{x:0,y:0,z:0},viewangles:{x:0,y:0,z:0},kick_angles:{x:0,y:0,z:0},gun_index:0,gun_frame:0,gun_offset:{x:0,y:0,z:0},gun_angles:{x:0,y:0,z:0},blend:[0,0,0,0],fov:0,rdflags:0,stats:new Array(32).fill(0),gunskin:0,gunrate:0,damage_blend:[0,0,0,0],team_id:0,watertype:0}),Wc=class extends zo{constructor(r){super(0);this.stream=r}readByte(){return this.stream.readByte()}readShort(){return this.stream.readShort()}readLong(){return this.stream.readLong()}readFloat(){return this.stream.readFloat()}readString(){return this.stream.readString()}readData(r){return this.stream.readData(r)}hasBytes(r){return this.stream.hasMore()}available(){return this.stream.getRemaining()}getReadPosition(){return this.stream.getPosition()}peekBytes(r){throw new Error("peekBytes not implemented for BinaryStreamAdapter")}},Ch={0:M.bad,1:M.nop,2:M.disconnect,3:M.reconnect,4:M.download,5:M.frame,6:M.inventory,7:M.layout,8:M.muzzleflash,9:M.sound,10:M.print,11:M.stufftext,12:M.serverdata,13:M.configstring,14:M.spawnbaseline,15:M.centerprint,16:M.download,17:M.playerinfo,18:M.packetentities,19:M.deltapacketentities,23:M.temp_entity,22:M.muzzleflash2},it=class t{constructor(e,r,n=!1){this.protocolVersion=0;this.isDemo=Ob;this.strictMode=!1;this.errorCount=0;e instanceof vn?this.stream=new Wc(e):this.stream=e,this.handler=r,this.strictMode=n}setProtocolVersion(e){this.protocolVersion=e}getProtocolVersion(){return this.protocolVersion}getErrorCount(){return this.errorCount}translateCommand(e){if(this.protocolVersion===0)return e===7?M.serverdata:e===12?M.serverdata:e;if(this.protocolVersion===hi)return e;if(this.protocolVersion===25||this.protocolVersion===26){if(e===0)return M.bad;let r=e+5;return r>=M.nop&&r<=M.frame?r:M.bad}return this.protocolVersion===34?Ch[e]!==void 0?Ch[e]:M.bad:e}parseMessage(){for(;this.stream.hasBytes(1);){let e=this.stream.getReadPosition(),r=-1;try{if(r=this.stream.readByte(),r===-1)break;let n=r;switch(r=this.translateCommand(r),r){case M.bad:return;case M.nop:break;case M.disconnect:this.handler?.onDisconnect&&this.handler.onDisconnect();break;case M.reconnect:this.handler?.onReconnect&&this.handler.onReconnect();break;case M.print:this.parsePrint();break;case M.serverdata:this.parseServerData();break;case M.configstring:this.parseConfigString();break;case M.spawnbaseline:this.parseSpawnBaseline();break;case M.centerprint:this.parseCenterPrint();break;case M.download:this.parseDownload();break;case M.frame:this.parseFrame();break;case M.packetentities:this.parsePacketEntities(!1);break;case M.deltapacketentities:this.parsePacketEntities(!0);break;case M.playerinfo:this.parsePlayerState();break;case M.stufftext:this.parseStuffText();break;case M.layout:this.parseLayout();break;case M.inventory:this.parseInventory();break;case M.sound:this.parseSound();break;case M.muzzleflash:this.parseMuzzleFlash();break;case M.muzzleflash2:this.parseMuzzleFlash2();break;case M.temp_entity:this.parseTempEntity();break;case M.splitclient:this.parseSplitClient();break;case M.configblast:this.parseConfigBlast();break;case M.spawnbaselineblast:this.parseSpawnBaselineBlast();break;case M.level_restart:this.handler?.onLevelRestart&&this.handler.onLevelRestart();break;case M.damage:this.parseDamage();break;case M.locprint:this.parseLocPrint();break;case M.fog:this.parseFog();break;case M.waitingforplayers:this.parseWaitingForPlayers();break;case M.bot_chat:this.parseBotChat();break;case M.poi:this.parsePoi();break;case M.help_path:this.parseHelpPath();break;case M.muzzleflash3:this.parseMuzzleFlash3();break;case M.achievement:this.parseAchievement();break;default:let i=`Unknown server command: ${n} (translated: ${r}) at offset ${e}`;if(this.strictMode)throw new Error(i);console.warn(i),this.errorCount++;return}}catch(n){let i=n.message;if(i==="Buffer underflow"||i.includes("StreamingBuffer")){try{this.stream.setReadPosition(e)}catch(a){console.error("Failed to rollback stream position",a)}return}let s=`offset ${e}, cmd ${r}, protocol ${this.protocolVersion}`;if(console.warn(`Error parsing command ${r} (${s}): ${i}`),this.errorCount++,this.strictMode)throw n;return}}}readAngle16(){return this.stream.readShort()*(360/65536)}readCoord(){return this.stream.readShort()*.125}readAngle(){return this.stream.readByte()*(360/256)}readPos(e){e.x=this.stream.readShort()*.125,e.y=this.stream.readShort()*.125,e.z=this.stream.readShort()*.125}readDir(e){let r=this.stream.readByte();if(r>=bn.length)e.x=0,e.y=0,e.z=0;else{let n=bn[r];e.x=n[0],e.y=n[1],e.z=n[2]}}parsePrint(){let e=this.stream.readByte(),r=this.stream.readString();this.handler&&this.handler.onPrint(e,r)}parseStuffText(){let e=this.stream.readString();this.handler&&this.handler.onStuffText(e)}parseLayout(){let e=this.stream.readString();this.handler&&this.handler.onLayout(e)}parseCenterPrint(){let e=this.stream.readString();this.handler&&this.handler.onCenterPrint(e)}parseServerData(){if(this.protocolVersion=this.stream.readLong(),this.protocolVersion===hi){let e=this.stream.readLong(),r=this.stream.readByte();this.isDemo=r;let n=this.stream.readByte(),i=this.stream.readString(),s=this.stream.readShort();if(s===-2){let o=this.stream.readShort();for(let d=0;d<o;d++)this.stream.readShort();s=0}else s===-1&&(s=-1);let a=this.stream.readString();this.handler&&this.handler.onServerData(this.protocolVersion,e,0,i,s,a,n,r)}else{let e=this.stream.readLong(),r=this.stream.readByte();this.isDemo=r;let n=this.stream.readString(),i=this.stream.readShort(),s=this.stream.readString();this.handler&&this.handler.onServerData(this.protocolVersion,e,r,n,i,s)}}parseConfigString(){let e=this.stream.readShort(),r=this.stream.readString();this.handler&&this.handler.onConfigString(e,r)}parseSplitClient(){let e=this.stream.readByte();this.handler?.onSplitClient&&this.handler.onSplitClient(e)}parseConfigBlast(){let e=this.stream.readShort(),r=this.stream.readShort(),n=this.stream.readData(e);try{let i=Gc.inflate(n),s=new vn(i.buffer);for(;s.hasMore();){let a=s.readUShort(),o=s.readString();this.handler&&this.handler.onConfigString(a,o)}}catch(i){console.error("svc_configblast error",i)}}parseSpawnBaselineBlast(){let e=this.stream.readShort(),r=this.stream.readShort(),n=this.stream.readData(e);try{let i=Gc.inflate(n),s=new vn(i.buffer),a=new t(s,this.handler,this.strictMode);for(a.setProtocolVersion(this.protocolVersion);s.hasMore();)a.parseSpawnBaseline()}catch(i){console.error("svc_spawnbaselineblast error",i)}}parseLocPrint(){let e=this.stream.readByte(),r=this.stream.readString(),n=this.stream.readByte(),i=[];for(let s=0;s<n;s++)i.push(this.stream.readString());this.handler?.onLocPrint&&this.handler.onLocPrint(e,r,i)}parseWaitingForPlayers(){let e=this.stream.readByte();this.handler?.onWaitingForPlayers&&this.handler.onWaitingForPlayers(e)}parseBotChat(){let e=this.stream.readString(),r=this.stream.readShort(),n=this.stream.readString();this.handler?.onBotChat&&this.handler.onBotChat(n)}parsePoi(){let e=this.stream.readShort(),r=this.stream.readShort(),n={x:0,y:0,z:0};this.readPos(n);let i=this.stream.readShort(),s=this.stream.readByte(),a=this.stream.readByte();this.handler?.onPoi&&this.handler.onPoi(a,n)}parseHelpPath(){let e=this.stream.readByte(),r={x:0,y:0,z:0};this.readPos(r);let n={x:0,y:0,z:0};this.readDir(n),this.handler?.onHelpPath&&this.handler.onHelpPath(r)}parseAchievement(){let e=this.stream.readString();this.handler?.onAchievement&&this.handler.onAchievement(e)}parseDownload(){let e=this.stream.readShort(),r=this.stream.readByte(),n;e>0&&(n=this.stream.readData(e)),this.handler&&this.handler.onDownload(e,r,n)}parseInventory(){let r=new Array(256);for(let n=0;n<256;n++)r[n]=this.stream.readShort();this.handler&&this.handler.onInventory(r)}parseSound(){let e=this.stream.readByte(),r=this.stream.readByte(),n,i,s,a,o;if(e&1&&(n=this.stream.readByte()),e&2&&(i=this.stream.readByte()),e&16&&(s=this.stream.readByte()),e&8&&(a=this.stream.readShort()),e&4){let d={x:0,y:0,z:0};this.readPos(d),o=d}this.handler&&this.handler.onSound(e,r,n,i,s,a,o)}parseMuzzleFlash(){let e=this.stream.readShort(),r=this.stream.readByte();this.handler&&this.handler.onMuzzleFlash(e,r)}parseMuzzleFlash2(){let e=this.stream.readShort(),r=this.stream.readByte();this.handler&&this.handler.onMuzzleFlash2(e,r)}parseMuzzleFlash3(){let e=this.stream.readShort(),r=this.stream.readShort();this.handler?.onMuzzleFlash3&&this.handler.onMuzzleFlash3(e,r)}parseFog(){let e=this.stream.readByte();if(e&128){let n=this.stream.readByte();e|=n<<8}let r={};e&1&&(r.density=this.stream.readFloat(),r.skyfactor=this.stream.readByte()),e&2&&(r.red=this.stream.readByte()),e&4&&(r.green=this.stream.readByte()),e&8&&(r.blue=this.stream.readByte()),e&16&&(r.time=this.stream.readShort()),e&32&&(r.hf_falloff=this.stream.readFloat()),e&64&&(r.hf_density=this.stream.readFloat()),e&256&&(r.hf_start_r=this.stream.readByte()),e&512&&(r.hf_start_g=this.stream.readByte()),e&1024&&(r.hf_start_b=this.stream.readByte()),e&2048&&(r.hf_start_dist=this.stream.readLong()),e&4096&&(r.hf_end_r=this.stream.readByte()),e&8192&&(r.hf_end_g=this.stream.readByte()),e&16384&&(r.hf_end_b=this.stream.readByte()),e&32768&&(r.hf_end_dist=this.stream.readLong()),this.handler?.onFog&&this.handler.onFog(r)}parseDamage(){let e=this.stream.readByte(),r=[];for(let n=0;n<e;n++){let i=this.stream.readByte(),s={x:0,y:0,z:0};this.readDir(s);let a=i&31,o=(i&32)!==0,d=(i&64)!==0,l=(i&128)!==0;r.push({damage:a,health:o,armor:d,power:l,dir:s})}this.handler?.onDamage&&this.handler.onDamage(r)}parseTempEntity(){let e=this.stream.readByte(),r={x:0,y:0,z:0},n={x:0,y:0,z:0},i={x:0,y:0,z:0},s,a,o,d,l;switch(e){case E.EXPLOSION1:case E.EXPLOSION2:case E.ROCKET_EXPLOSION:case E.GRENADE_EXPLOSION:case E.ROCKET_EXPLOSION_WATER:case E.GRENADE_EXPLOSION_WATER:case E.BFG_EXPLOSION:case E.BFG_BIGEXPLOSION:case E.BOSSTPORT:case E.PLASMA_EXPLOSION:case E.PLAIN_EXPLOSION:case E.CHAINFIST_SMOKE:case E.TRACKER_EXPLOSION:case E.TELEPORT_EFFECT:case E.DBALL_GOAL:case E.NUKEBLAST:case E.WIDOWSPLASH:case E.EXPLOSION1_BIG:case E.EXPLOSION1_NP:this.readPos(r);break;case E.GUNSHOT:case E.BLOOD:case E.BLASTER:case E.SHOTGUN:case E.SPARKS:case E.BULLET_SPARKS:case E.SCREEN_SPARKS:case E.SHIELD_SPARKS:case E.BLASTER2:case E.FLECHETTE:case E.MOREBLOOD:case E.ELECTRIC_SPARKS:case E.HEATBEAM_SPARKS:case E.HEATBEAM_STEAM:this.readPos(r),this.readDir(i);break;case E.SPLASH:case E.LASER_SPARKS:case E.WELDING_SPARKS:case E.TUNNEL_SPARKS:s=this.stream.readByte(),this.readPos(r),this.readDir(i),a=this.stream.readByte();break;case E.BLUEHYPERBLASTER:this.protocolVersion>=32?(this.readPos(r),this.readPos(n)):(this.readPos(r),this.readDir(i));break;case E.GREENBLOOD:this.protocolVersion>=32?(this.readPos(r),this.readDir(i)):(this.readPos(r),this.readPos(n));break;case E.RAILTRAIL:case E.BUBBLETRAIL:case E.BFG_LASER:case E.DEBUGTRAIL:case E.BUBBLETRAIL2:this.readPos(r),this.readPos(n);break;case E.PARASITE_ATTACK:case E.MEDIC_CABLE_ATTACK:this.stream.readShort(),this.readPos(r),this.readPos(n);break;case E.GRAPPLE_CABLE:o=this.stream.readShort(),this.readPos(r),this.readPos(n),this.readPos(i);break;case E.LIGHTNING:d=this.stream.readShort(),l=this.stream.readShort(),this.readPos(r),this.readPos(n);break;case E.FLASHLIGHT:this.readPos(r),o=this.stream.readShort();break;case E.FORCEWALL:this.readPos(r),this.readPos(n),a=this.stream.readByte();break;case E.STEAM:let c=this.stream.readShort();s=this.stream.readByte(),this.readPos(r),this.readDir(i),a=this.stream.readByte(),this.stream.readShort(),c!==-1&&this.stream.readLong();break;case E.WIDOWBEAMOUT:this.stream.readShort();case E.HEATBEAM:case E.MONSTER_HEATBEAM:o=this.stream.readShort(),this.readPos(r),this.readPos(n),this.readDir(i);break}this.handler&&this.handler.onTempEntity(e,r,n,i,s,a,o,d,l)}parseSpawnBaseline(){let e=this.parseEntityBits(),r=Ht();this.parseDelta(Ht(),r,e.number,e.bits,e.bitsHigh),this.handler&&this.handler.onSpawnBaseline(r)}parseFrame(){let e=this.stream.readLong(),r=this.stream.readLong(),n=0;this.protocolVersion!==26&&this.protocolVersion!==25&&(n=this.stream.readByte());let i=this.stream.readByte(),s=this.stream.readData(i),a=this.stream.readByte();if(a=this.translateCommand(a),a!==M.playerinfo){if(this.strictMode)throw new Error(`Expected svc_playerinfo after svc_frame, got ${a}`);return}let o=this.parsePlayerState(),d=this.stream.readByte();if(d=this.translateCommand(d),d!==M.packetentities&&d!==M.deltapacketentities){if(this.strictMode)throw new Error(`Expected svc_packetentities after svc_playerinfo, got ${d}`);return}let l=this.collectPacketEntities();if(this.isDemo===Ub){let c=this.stream.readByte();for(let f=0;f<c;f++)this.stream.readByte()}this.isDemo===Nb&&this.stream.readLong(),this.handler&&this.handler.onFrame({serverFrame:e,deltaFrame:r,surpressCount:n,areaBytes:i,areaBits:s,playerState:o,packetEntities:{delta:!0,entities:l}})}parsePlayerState(){let e=pn(),r=this.stream.readShort();r&1&&(e.pm_type=this.stream.readByte()),r&2&&(e.origin.x=this.readCoord(),e.origin.y=this.readCoord(),e.origin.z=this.readCoord()),r&4&&(e.velocity.x=this.readCoord(),e.velocity.y=this.readCoord(),e.velocity.z=this.readCoord()),r&8&&(e.pm_time=this.stream.readByte()),r&16&&(e.pm_flags=this.stream.readByte()),r&32&&(e.gravity=this.stream.readShort()),r&64&&(e.delta_angles.x=this.stream.readShort()*(180/32768),e.delta_angles.y=this.stream.readShort()*(180/32768),e.delta_angles.z=this.stream.readShort()*(180/32768)),r&128&&(e.viewoffset.x=(this.stream.readByte()<<24>>24)*.25,e.viewoffset.y=(this.stream.readByte()<<24>>24)*.25,e.viewoffset.z=(this.stream.readByte()<<24>>24)*.25),r&256&&(e.viewangles.x=this.readAngle16(),e.viewangles.y=this.readAngle16(),e.viewangles.z=this.readAngle16()),r&512&&(e.kick_angles.x=(this.stream.readByte()<<24>>24)*.25,e.kick_angles.y=(this.stream.readByte()<<24>>24)*.25,e.kick_angles.z=(this.stream.readByte()<<24>>24)*.25),r&4096&&(e.gun_index=this.stream.readByte()),r&8192&&(e.gun_frame=this.stream.readByte(),e.gun_offset.x=(this.stream.readByte()<<24>>24)*.25,e.gun_offset.y=(this.stream.readByte()<<24>>24)*.25,e.gun_offset.z=(this.stream.readByte()<<24>>24)*.25,e.gun_angles.x=(this.stream.readByte()<<24>>24)*.25,e.gun_angles.y=(this.stream.readByte()<<24>>24)*.25,e.gun_angles.z=(this.stream.readByte()<<24>>24)*.25),r&1024&&(e.blend[0]=this.stream.readByte(),e.blend[1]=this.stream.readByte(),e.blend[2]=this.stream.readByte(),e.blend[3]=this.stream.readByte()),r&2048&&(e.fov=this.stream.readByte()),r&16384&&(e.rdflags=this.stream.readByte()),r&32768&&(e.watertype=this.stream.readByte());let n=this.stream.readLong();for(let i=0;i<32;i++)n&1<<i&&(e.stats[i]=this.stream.readShort());return e}parsePacketEntities(e){let r=this.collectPacketEntities();this.handler&&this.handler.onFrame({serverFrame:0,deltaFrame:0,surpressCount:0,areaBytes:0,areaBits:new Uint8Array,playerState:pn(),packetEntities:{delta:e,entities:r}})}collectPacketEntities(){let e=[];for(;;){let r=this.parseEntityBits();if(r.bits&$s){if(r.number===0)break;continue}let n=Ht(),i=r.number===0&&!(r.bits&Ks);if((r.number!==0||i)&&this.parseDelta(Ht(),n,r.number,r.bits,r.bitsHigh),r.number===0)break;e.push(n)}return e}parseEntityBits(){let e=this.stream.readByte();e&Ks&&(e|=this.stream.readByte()<<8),e&Do&&(e|=this.stream.readByte()<<16),e&Oo&&(e|=this.stream.readByte()<<24);let r=0;this.protocolVersion===hi&&e&No&&(r=this.stream.readByte());let n;return e&Bo?n=this.stream.readShort():n=this.stream.readByte(),{number:n,bits:e,bitsHigh:r}}parseDelta(e,r,n,i,s=0){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.alpha=e.alpha,r.scale=e.scale,r.instanceBits=e.instanceBits,r.loopVolume=e.loopVolume,r.loopAttenuation=e.loopAttenuation,r.owner=e.owner,r.oldFrame=e.oldFrame,r.number=n,r.bits=i,r.bitsHigh=s,i&Ar&&(r.modelindex=this.stream.readByte()),i&Lr&&(r.modelindex2=this.stream.readByte()),i&Tr&&(r.modelindex3=this.stream.readByte()),i&Cr&&(r.modelindex4=this.stream.readByte()),i&_r&&(r.frame=this.stream.readByte()),i&Er&&(r.frame=this.stream.readShort()),i&_t&&i&St?r.skinnum=this.stream.readLong():i&_t?r.skinnum=this.stream.readByte():i&St&&(r.skinnum=this.stream.readShort()),i&xt&&i&wt?r.effects=this.stream.readLong():i&xt?r.effects=this.stream.readByte():i&wt&&(r.effects=this.stream.readShort()),i&bt&&i&vt?r.renderfx=this.stream.readLong():i&bt?r.renderfx=this.stream.readByte():i&vt&&(r.renderfx=this.stream.readShort()),i&gr&&(r.origin.x=this.readCoord()),i&yr&&(r.origin.y=this.readCoord()),i&wr&&(r.origin.z=this.readCoord()),i&Sr&&(r.angles.x=this.readAngle()),i&br&&(r.angles.y=this.readAngle()),i&xr&&(r.angles.z=this.readAngle()),i&Ir&&this.readPos(r.old_origin),i&kr&&(r.sound=this.stream.readByte()),i&vr?r.event=this.stream.readByte():r.event=0,i&Rr&&(r.solid=this.stream.readShort()),this.protocolVersion===hi&&(i&Mr&&(r.alpha=this.stream.readByte()/255),i&Pr&&(r.scale=this.stream.readFloat()),i&Fr&&(r.instanceBits=this.stream.readLong()),i&zr&&(r.loopVolume=this.stream.readByte()/255),s&Br&&(r.loopAttenuation=this.stream.readByte()/255),s&Dr&&(r.owner=this.stream.readShort()),s&Or&&(r.oldFrame=this.stream.readShort()))}};var Xc=(c=>(c.WeaponFire="weapon_fire",c.DamageDealt="damage_dealt",c.DamageReceived="damage_received",c.Pickup="pickup",c.Death="death",c.Kill="kill",c.Spawn="spawn",c.PlayerInfo="player_info",c.Chat="chat",c.Objective="objective",c))(Xc||{});var mi=class{constructor(e){this.events=[];this.summary={totalKills:0,totalDeaths:0,damageDealt:0,damageReceived:0,weaponUsage:new Map};this.header=null;this.configStrings=new Map;this.serverInfo={};this.statistics=null;this.playerStats=new Map;this.weaponStats=new Map;this.activeEntities=new Set;this.buffer=e}analyze(){let e=new je(this.buffer),r=-1,n=0,i=.1,s=0,a={onServerData:(o,d,l,c,f,u,h,m)=>{s=o,this.header={protocolVersion:o,gameDir:c,levelName:u,playerNum:f,serverCount:d,spawnCount:d,tickRate:h,demoType:m},h&&h>0&&(i=1/h)},onConfigString:(o,d)=>{this.configStrings.set(o,d),o===0&&this.parseServerInfo(d)},onSpawnBaseline:o=>{},onFrame:o=>{let d=new Set;if(o.packetEntities&&o.packetEntities.entities)for(let l of o.packetEntities.entities)d.add(l.number),this.activeEntities.has(l.number)||this.recordEvent({type:"spawn",frame:r,time:n,entityId:l.number,position:{x:l.origin.x,y:l.origin.y,z:l.origin.z},description:`Entity ${l.number} spawned`});this.activeEntities=d,o.playerState&&this.header},onPrint:(o,d)=>{let l=d.replace(/\n/g," ").trim();l.includes("died")||l.includes("killed")||l.includes("suicide")?(this.summary.totalDeaths++,this.recordEvent({type:"death",frame:r,time:n,description:l})):l.startsWith("You got the ")?this.recordEvent({type:"pickup",frame:r,time:n,description:l}):(o===3||o===2)&&this.recordEvent({type:"chat",frame:r,time:n,description:l,data:{level:o}})},onCenterPrint:o=>{this.recordEvent({type:"objective",frame:r,time:n,description:o.trim()})},onStuffText:()=>{},onSound:()=>{},onTempEntity:()=>{},onLayout:()=>{},onInventory:()=>{},onMuzzleFlash:(o,d)=>{this.handleWeaponFire(o,d,r,n)},onMuzzleFlash2:(o,d)=>{this.handleWeaponFire(o,d,r,n)},onMuzzleFlash3:(o,d)=>{this.handleWeaponFire(o,d,r,n)},onDisconnect:()=>{},onReconnect:()=>{},onDownload:()=>{},onDamage:o=>{for(let d of o)if(this.recordEvent({type:"damage_received",frame:r,time:n,value:d.damage,position:d.dir,description:`Took ${d.damage} damage`}),this.summary.damageReceived+=d.damage,this.header){let l=this.getOrCreatePlayerStats(this.header.playerNum);l.damageReceived+=d.damage}}};for(;e.hasMore();){let o=e.readNextBlock();if(!o)break;r++,n=r*i;let d=new it(o.data,a);d.setProtocolVersion(s),d.parseMessage(),s=d.getProtocolVersion()}return this.statistics={duration:n,frameCount:r+1,averageFps:(r+1)/(n||1),mapName:this.header?.levelName||"unknown",playerCount:1},{events:this.events,summary:this.summary,header:this.header,configStrings:this.configStrings,serverInfo:this.serverInfo,statistics:this.statistics,playerStats:this.playerStats,weaponStats:this.weaponStats}}handleWeaponFire(e,r,n,i){this.recordEvent({type:"weapon_fire",frame:n,time:i,entityId:e,value:r,description:`Weapon ${r} fired by ${e}`});let s=this.summary.weaponUsage.get(r)||0;this.summary.weaponUsage.set(r,s+1);let a=this.getOrCreateWeaponStat(e,r);a.shotsFired++}recordEvent(e){this.events.push(e)}parseServerInfo(e){let r=e.split("\\");for(let n=1;n<r.length;n+=2)n+1<r.length&&(this.serverInfo[r[n]]=r[n+1])}getOrCreatePlayerStats(e){let r=this.playerStats.get(e);return r||(r={kills:0,deaths:0,damageDealt:0,damageReceived:0,suicides:0},this.playerStats.set(e,r)),r}getOrCreateWeaponStat(e,r){let n=this.weaponStats.get(e);n||(n=[],this.weaponStats.set(e,n));let i=n.find(s=>s.weaponId===r);return i||(i={weaponId:r,shotsFired:0,hits:0,kills:0},n.push(i)),i}};var Kc=(i=>(i[i.FirstPerson=0]="FirstPerson",i[i.ThirdPerson=1]="ThirdPerson",i[i.Free=2]="Free",i[i.Follow=3]="Follow",i))(Kc||{});var Uo=(i=>(i[i.Stopped=0]="Stopped",i[i.Playing=1]="Playing",i[i.Paused=2]="Paused",i[i.Finished=3]="Finished",i))(Uo||{}),Hb=()=>({onServerData:()=>{},onConfigString:()=>{},onSpawnBaseline:()=>{},onFrame:()=>{},onCenterPrint:()=>{},onStuffText:()=>{},onPrint:()=>{},onSound:()=>{},onTempEntity:()=>{},onLayout:()=>{},onInventory:()=>{},onMuzzleFlash:()=>{},onMuzzleFlash2:()=>{},onDisconnect:()=>{},onReconnect:()=>{},onDownload:()=>{}}),Vt=class{constructor(){this.reader=null;this.buffer=null;this.state=0;this.playbackSpeed=1;this.currentProtocolVersion=0;this.currentFrameIndex=-1;this.lastFrameData=null;this.accumulatedTime=0;this.frameDuration=100;this.snapshotInterval=100;this.snapshots=new Map;this.cachedEvents=null;this.cachedSummary=null;this.cachedHeader=null;this.cachedConfigStrings=null;this.cachedServerInfo=null;this.cachedStatistics=null;this.cachedPlayerStats=null;this.cachedWeaponStats=null;this.tracker=null;this.cameraMode=0;this.thirdPersonDistance=80;this.thirdPersonOffset={x:0,y:0,z:0}}setHandler(e){this.handler=e}setCallbacks(e){this.callbacks=e}loadDemo(e){this.buffer=e,this.reader=new je(e),this.transitionState(0),this.accumulatedTime=0,this.currentProtocolVersion=0,this.currentFrameIndex=-1,this.snapshots.clear(),this.lastFrameData=null,this.cachedEvents=null,this.cachedSummary=null,this.cachedHeader=null,this.cachedConfigStrings=null,this.cachedServerInfo=null,this.cachedStatistics=null,this.cachedPlayerStats=null,this.cachedWeaponStats=null}play(){this.reader&&this.state!==1&&this.transitionState(1)}pause(){this.state===1&&this.transitionState(2)}stop(){this.transitionState(0),this.reader&&this.reader.reset(),this.accumulatedTime=0,this.currentProtocolVersion=0,this.currentFrameIndex=-1,this.lastFrameData=null}transitionState(e){this.state!==e&&(this.state=e,this.callbacks?.onPlaybackStateChange&&this.callbacks.onPlaybackStateChange(e))}setFrameDuration(e){this.frameDuration=e}setSpeed(e){this.playbackSpeed=Math.max(.1,Math.min(e,16))}getSpeed(){return this.playbackSpeed}getPlaybackSpeed(){return this.playbackSpeed}getInterpolationFactor(){return this.frameDuration<=0?0:Math.max(0,Math.min(1,this.accumulatedTime/this.frameDuration))}update(e){if(!(this.state!==1||!this.reader))for(this.accumulatedTime+=e*1e3*this.playbackSpeed;this.accumulatedTime>=this.frameDuration;){if(!this.processNextFrame())return;this.accumulatedTime-=this.frameDuration,this.callbacks?.onTimeUpdate&&this.callbacks.onTimeUpdate(this.getCurrentTime())}}stepForward(){this.reader&&(this.processNextFrame(),this.callbacks?.onTimeUpdate&&this.callbacks.onTimeUpdate(this.getCurrentTime()))}stepBackward(){this.reader&&this.currentFrameIndex>0&&this.seek(this.currentFrameIndex-1)}seekToTime(e){let r=this.timeToFrame(e);this.seek(r)}seekToFrame(e){this.seek(e)}frameToTime(e){return e*this.frameDuration/1e3}timeToFrame(e){return Math.floor(e*1e3/this.frameDuration)}playFrom(e){if(e.type==="frame")this.seek(e.frame);else if(e.type==="time")this.seekToTime(e.seconds);else throw new Error(`Invalid offset type: ${e.type}`);this.play()}playRange(e,r){let n=e.type==="frame"?e.frame:this.timeToFrame(e.seconds),i=r.type==="frame"?r.frame:this.timeToFrame(r.seconds),s=this.getTotalFrames(),a=Math.max(0,s-1);if(n<0)throw new Error(`Invalid start offset: ${n}`);if(i<n)throw new Error(`End offset (${i}) cannot be before start offset (${n})`);this.playFrom(e);let o=this.callbacks?.onFrameUpdate,d={...this.callbacks,onFrameUpdate:l=>{o&&o(l),this.currentFrameIndex>=i&&(this.pause(),this.callbacks===d&&this.setCallbacks({...this.callbacks,onFrameUpdate:o}),this.callbacks?.onPlaybackComplete&&this.callbacks.onPlaybackComplete())}};this.setCallbacks(d)}seek(e){if(!this.reader)return;let r=this.getTotalFrames();if(r>0&&e>=r&&(e=r-1),e<0&&(e=0),e===this.currentFrameIndex+1){this.processNextFrame(),this.callbacks?.onSeekComplete&&this.callbacks.onSeekComplete();return}if(e===this.currentFrameIndex){this.callbacks?.onSeekComplete&&this.callbacks.onSeekComplete();return}let n=-1,i=null;if(e>this.currentFrameIndex&&this.currentFrameIndex!==-1&&(n=this.currentFrameIndex),this.callbacks?.onRestoreSnapshot)for(let[s,a]of this.snapshots)s<=e&&s>n&&(n=s,i=a);for(n===-1&&this.currentFrameIndex>e?(this.reader.reset(),this.currentFrameIndex=-1,this.currentProtocolVersion=0):n===-1&&(this.reader.reset(),this.currentFrameIndex=-1,this.currentProtocolVersion=0),i&&this.callbacks?.onRestoreSnapshot&&(this.callbacks.onRestoreSnapshot(i),this.reader.seekToMessage(n+1)?this.currentFrameIndex=n:(this.reader.reset(),this.currentFrameIndex=-1,this.currentProtocolVersion=0));this.currentFrameIndex<e&&(this.callbacks?.onCaptureSnapshot&&(this.currentFrameIndex+1)%this.snapshotInterval,!!this.processNextFrame()););this.accumulatedTime=0,this.callbacks?.onSeekComplete&&this.callbacks.onSeekComplete(),this.callbacks?.onTimeUpdate&&this.callbacks.onTimeUpdate(this.getCurrentTime())}processNextFrame(){if(!this.reader||!this.reader.hasMore())return this.transitionState(3),this.callbacks?.onPlaybackComplete&&this.callbacks.onPlaybackComplete(),!1;let e=this.reader.readNextBlock();if(!e)return this.transitionState(3),this.callbacks?.onPlaybackComplete&&this.callbacks.onPlaybackComplete(),!1;this.currentFrameIndex++,this.tracker&&(this.tracker.setCurrentFrame(this.currentFrameIndex),this.tracker.setCurrentTime(this.getCurrentTime()));try{let r={...this.handler||Hb(),onFrame:i=>{this.lastFrameData=i,this.handler?.onFrame&&this.handler.onFrame(i),this.callbacks?.onFrameUpdate&&this.callbacks.onFrameUpdate(i)}},n=new it(e.data,r);if(n.setProtocolVersion(this.currentProtocolVersion),n.parseMessage(),this.currentProtocolVersion=n.getProtocolVersion(),this.callbacks?.onCaptureSnapshot&&this.currentFrameIndex%this.snapshotInterval===0&&this.currentFrameIndex>0){let i=this.callbacks.onCaptureSnapshot(this.currentFrameIndex);i&&this.snapshots.set(this.currentFrameIndex,i)}}catch(r){return console.error("Error processing demo frame",r),this.callbacks?.onPlaybackError&&this.callbacks.onPlaybackError(r instanceof Error?r:new Error(String(r))),!1}return!0}getState(){return this.state}getCurrentTime(){return this.currentFrameIndex<0?this.accumulatedTime:this.currentFrameIndex*this.frameDuration+this.accumulatedTime}getFrameCount(){return this.reader?this.reader.getMessageCount():0}getTotalFrames(){return this.getFrameCount()}getCurrentFrame(){return this.currentFrameIndex<0?0:this.currentFrameIndex}getDuration(){return this.getFrameCount()*this.frameDuration/1e3}getTotalBytes(){return this.reader?this.reader.getProgress().total:0}getProcessedBytes(){return this.reader?this.reader.getOffset():0}getFrameData(e){if(e===this.currentFrameIndex&&this.lastFrameData)return this.lastFrameData;let r=this.state;return this.pause(),this.seek(e),r===1&&this.play(),this.lastFrameData}getFramePlayerState(e){if(e===this.currentFrameIndex&&this.handler?.getPlayerState){let n=this.handler.getPlayerState();if(n)return n}let r=this.getFrameData(e);return r?r.playerState:null}getFrameEntities(e){if(e===this.currentFrameIndex&&this.handler?.getEntities){let r=this.handler.getEntities();if(r)return Array.from(r.values())}if(this.seek(e),this.handler?.getEntities){let r=this.handler.getEntities();return r?Array.from(r.values()):[]}return[]}compareFrames(e,r){let n=this.getFramePlayerState(e),i=this.getFrameEntities(e),s=new Map;i.forEach(c=>s.set(c.number,c));let a=this.getFramePlayerState(r),o=this.getFrameEntities(r),d=new Map;o.forEach(c=>d.set(c.number,c));let l={frameA:e,frameB:r,playerStateDiff:{origin:null,viewangles:null,health:null,ammo:null},entityDiffs:{added:[],removed:[],moved:[]}};n&&a&&((n.origin.x!==a.origin.x||n.origin.y!==a.origin.y||n.origin.z!==a.origin.z)&&(l.playerStateDiff.origin={x:a.origin.x-n.origin.x,y:a.origin.y-n.origin.y,z:a.origin.z-n.origin.z}),n.stats[1]!==a.stats[1]&&(l.playerStateDiff.health=a.stats[1]-n.stats[1]),n.stats[2]!==a.stats[2]&&(l.playerStateDiff.ammo=a.stats[2]-n.stats[2]));for(let[c,f]of d){let u=s.get(c);u?(u.origin.x!==f.origin.x||u.origin.y!==f.origin.y||u.origin.z!==f.origin.z)&&l.entityDiffs.moved.push({id:c,delta:{x:f.origin.x-u.origin.x,y:f.origin.y-u.origin.y,z:f.origin.z-u.origin.z}}):l.entityDiffs.added.push(c)}for(let[c,f]of s)d.has(c)||l.entityDiffs.removed.push(c);return l}getEntityTrajectory(e,r,n){let i=[],s=this.getCurrentFrame();for(this.seek(r);this.getCurrentFrame()<=n&&this.state!==3;){let a=null;if(e===-1){let o=this.getFramePlayerState(this.getCurrentFrame());o&&(a={...o.origin})}else if(this.handler?.getEntities){let o=this.handler.getEntities().get(e);o&&(a={...o.origin})}if(a&&i.push(a),this.getCurrentFrame()===n)break;this.stepForward()}return this.seek(s),i}getEvents(){return this.ensureAnalysis(),this.cachedEvents||[]}getDemoEvents(){return this.getEvents()}filterEvents(e,r){return this.getDemoEvents().filter(i=>!(i.type!==e||r!==void 0&&i.entityId!==r))}getEventSummary(){return this.ensureAnalysis(),this.cachedSummary||{totalKills:0,totalDeaths:0,damageDealt:0,damageReceived:0,weaponUsage:new Map}}getMetadata(){let e=this.getDemoHeader();if(!e)return null;let r=this.getDemoServerInfo(),n="Unknown";return this.cachedConfigStrings,{mapName:e.levelName,playerName:n,serverName:r.hostname,demoVersion:e.protocolVersion,tickRate:e.tickRate||10}}getDemoHeader(){return this.ensureAnalysis(),this.cachedHeader}getDemoConfigStrings(){return this.ensureAnalysis(),this.cachedConfigStrings||new Map}getDemoServerInfo(){return this.ensureAnalysis(),this.cachedServerInfo||{}}getDemoStatistics(){return this.ensureAnalysis(),this.cachedStatistics}getPlayerStatistics(e){return this.ensureAnalysis(),this.cachedPlayerStats?.get(e)||null}getWeaponStatistics(e){return this.ensureAnalysis(),this.cachedWeaponStats?.get(e)||null}ensureAnalysis(){if(!this.cachedEvents&&this.buffer){let r=new mi(this.buffer).analyze();this.cachedEvents=r.events,this.cachedSummary=r.summary,this.cachedHeader=r.header,this.cachedConfigStrings=r.configStrings,this.cachedServerInfo=r.serverInfo,this.cachedStatistics=r.statistics,this.cachedPlayerStats=r.playerStats,this.cachedWeaponStats=r.weaponStats}}setCameraMode(e){this.cameraMode=e}getCameraMode(){return this.cameraMode}setThirdPersonDistance(e){this.thirdPersonDistance=e}setThirdPersonOffset(e){this.thirdPersonOffset=e}async playWithTracking(e,r={}){if(this.tracker=e,e.startTracking(),r.fastForward)try{this.state===0&&this.reader,this.transitionState(1);let n=100,i=async()=>{if(this.state!==1)throw new Error("Playback stopped unexpectedly during fast forward");let s=0;for(;s<n;){if(!this.processNextFrame()){let a=e.stopTracking();return this.tracker=null,this.callbacks?.onPlaybackComplete&&this.callbacks.onPlaybackComplete(),a}s++}return await new Promise(a=>setTimeout(a,0)),i()};return await i()}catch(n){throw e.stopTracking(),this.tracker=null,n}else return new Promise((n,i)=>{let s=this.callbacks?.onPlaybackComplete,a=this.callbacks?.onPlaybackError,o=()=>{this.setCallbacks({...this.callbacks,onPlaybackComplete:s,onPlaybackError:a}),this.tracker=null};this.setCallbacks({...this.callbacks,onPlaybackComplete:()=>{let d=e.stopTracking();s&&s(),o(),n(d)},onPlaybackError:d=>{e.stopTracking(),a&&a(d),o(),i(d)}}),this.play()})}async playRangeWithTracking(e,r,n,i={}){this.tracker=n,n.startTracking();let s=e.type==="frame"?e.frame:this.timeToFrame(e.seconds),a=r.type==="frame"?r.frame:this.timeToFrame(r.seconds);if(i.fastForward)try{this.playFrom(e),this.transitionState(1);let o=100,d=async()=>{if(this.state!==1)throw new Error("Playback stopped unexpectedly during fast forward");let l=0;for(;l<o;){if(this.currentFrameIndex>=a||!this.processNextFrame()){let c=n.stopTracking();return this.tracker=null,this.callbacks?.onPlaybackComplete&&this.callbacks.onPlaybackComplete(),c}l++}return await new Promise(c=>setTimeout(c,0)),d()};return await d()}catch(o){throw n.stopTracking(),this.tracker=null,o}else return new Promise((o,d)=>{let l=this.callbacks?.onPlaybackComplete,c=this.callbacks?.onPlaybackError,f=()=>{this.setCallbacks({...this.callbacks,onPlaybackComplete:l,onPlaybackError:c}),this.tracker=null};this.setCallbacks({...this.callbacks,onPlaybackComplete:()=>{let u=n.stopTracking();l&&l(),f(),o(u)},onPlaybackError:u=>{n.stopTracking(),c&&c(u),f(),d(u)}}),this.playRange(e,r)})}};var Zs=class{constructor(){this.isRecording=!1;this.startTime=0;this.frameCount=0;this.filename=null;this.lastMessageSize=-1;this.messageBuffer=new Hr(1024*1024)}startRecording(e,r=0){this.isRecording||(this.isRecording=!0,this.filename=e,this.startTime=r,this.frameCount=0,this.messageBuffer.reset(),console.log(`DemoRecorder: Started recording to ${e}`))}recordMessage(e){if(this.isRecording){this.messageBuffer.writeLong(e.byteLength);for(let r=0;r<e.length;r++)this.messageBuffer.writeByte(e[r]);this.frameCount++}}stopRecording(){return this.isRecording?(this.isRecording=!1,this.messageBuffer.writeLong(-1),console.log(`DemoRecorder: Stopped recording. Frames: ${this.frameCount}, Size: ${this.messageBuffer.getOffset()} bytes`),this.messageBuffer.getData()):null}getIsRecording(){return this.isRecording}};var Ho=class{static validate(e,r){if(r&&!r.toLowerCase().endsWith(".dm2"))return{valid:!1,error:"Invalid file extension (expected .dm2)"};if(e.byteLength<5)return{valid:!1,error:"File too small to be a valid demo"};let n=new DataView(e),i=n.getInt32(0,!0);if(i<=0||i>e.byteLength-4)return{valid:!1,error:`Invalid first block length: ${i}`};let s=n.getUint8(4);if(s!==M.serverdata)return{valid:!1,error:`First command is not svc_serverdata (expected ${M.serverdata}, got ${s})`};let a=-1;return i>=5&&(a=n.getInt32(5,!0)),{valid:!0,version:a}}};var Vb={[M.bad]:0,[M.nop]:1,[M.disconnect]:2,[M.reconnect]:3,[M.download]:16,[M.frame]:5,[M.inventory]:6,[M.layout]:7,[M.muzzleflash]:8,[M.sound]:9,[M.print]:10,[M.stufftext]:11,[M.serverdata]:12,[M.configstring]:13,[M.spawnbaseline]:14,[M.centerprint]:15,[M.playerinfo]:17,[M.packetentities]:18,[M.deltapacketentities]:19,[M.temp_entity]:23,[M.muzzleflash2]:22},Ys=class{constructor(){this.writer=new Hr}getData(){return this.writer.getData()}writeCommand(e,r=0){if(r===34){let n=Vb[e];if(n!==void 0){this.writer.writeByte(n);return}}this.writer.writeByte(e)}writeServerData(e,r,n,i,s,a){this.writeCommand(M.serverdata,e),this.writer.writeLong(e),this.writer.writeLong(r),this.writer.writeByte(n),this.writer.writeString(i),this.writer.writeShort(s),this.writer.writeString(a)}writeServerDataRerelease(e,r,n,i,s,a,o){this.writeCommand(M.serverdata,e),this.writer.writeLong(e),this.writer.writeLong(r),this.writer.writeByte(n),this.writer.writeByte(i),this.writer.writeString(s),this.writer.writeShort(a),this.writer.writeString(o)}writeConfigString(e,r,n=0){this.writeCommand(M.configstring,n),this.writer.writeShort(e),this.writer.writeString(r)}writeSpawnBaseline(e,r){this.writeCommand(M.spawnbaseline,r),this.writeEntityState(e,null,!0,r)}writeStuffText(e,r=0){this.writeCommand(M.stufftext,r),this.writer.writeString(e)}writeCenterPrint(e,r=0){this.writeCommand(M.centerprint,r),this.writer.writeString(e)}writePrint(e,r,n=0){this.writeCommand(M.print,n),this.writer.writeByte(e),this.writer.writeString(r)}writeLayout(e,r=0){this.writeCommand(M.layout,r),this.writer.writeString(e)}writeInventory(e,r=0){this.writeCommand(M.inventory,r);for(let n=0;n<256;n++)this.writer.writeShort(e[n]||0)}writeMuzzleFlash(e,r,n=0){this.writeCommand(M.muzzleflash,n),this.writer.writeShort(e),this.writer.writeByte(r)}writeMuzzleFlash2(e,r,n=0){this.writeCommand(M.muzzleflash2,n),this.writer.writeShort(e),this.writer.writeByte(r)}writeTempEntity(e,r,n,i,s,a,o,d,l,c=0){switch(this.writeCommand(M.temp_entity,c),this.writer.writeByte(e),e){case E.EXPLOSION1:case E.EXPLOSION2:case E.ROCKET_EXPLOSION:case E.GRENADE_EXPLOSION:case E.ROCKET_EXPLOSION_WATER:case E.GRENADE_EXPLOSION_WATER:case E.BFG_EXPLOSION:case E.BFG_BIGEXPLOSION:case E.BOSSTPORT:case E.PLASMA_EXPLOSION:case E.PLAIN_EXPLOSION:case E.CHAINFIST_SMOKE:case E.TRACKER_EXPLOSION:case E.TELEPORT_EFFECT:case E.DBALL_GOAL:case E.NUKEBLAST:case E.WIDOWSPLASH:case E.EXPLOSION1_BIG:case E.EXPLOSION1_NP:this.writer.writePos(r);break;case E.GUNSHOT:case E.BLOOD:case E.BLASTER:case E.SHOTGUN:case E.SPARKS:case E.BULLET_SPARKS:case E.SCREEN_SPARKS:case E.SHIELD_SPARKS:case E.BLASTER2:case E.FLECHETTE:case E.MOREBLOOD:case E.ELECTRIC_SPARKS:case E.HEATBEAM_SPARKS:case E.HEATBEAM_STEAM:this.writer.writePos(r),this.writer.writeDir(i||{x:0,y:0,z:0});break;case E.SPLASH:case E.LASER_SPARKS:case E.WELDING_SPARKS:case E.TUNNEL_SPARKS:this.writer.writeByte(s||0),this.writer.writePos(r),this.writer.writeDir(i||{x:0,y:0,z:0}),this.writer.writeByte(a||0);break;case E.BLUEHYPERBLASTER:c>=32?(this.writer.writePos(r),this.writer.writePos(n||{x:0,y:0,z:0})):(this.writer.writePos(r),this.writer.writeDir(i||{x:0,y:0,z:0}));break;case E.GREENBLOOD:c>=32?(this.writer.writePos(r),this.writer.writeDir(i||{x:0,y:0,z:0})):(this.writer.writePos(r),this.writer.writePos(n||{x:0,y:0,z:0}));break;case E.RAILTRAIL:case E.BUBBLETRAIL:case E.BFG_LASER:case E.DEBUGTRAIL:case E.BUBBLETRAIL2:this.writer.writePos(r),this.writer.writePos(n||{x:0,y:0,z:0});break;case E.PARASITE_ATTACK:case E.MEDIC_CABLE_ATTACK:this.writer.writeShort(o||0),this.writer.writePos(r),this.writer.writePos(n||{x:0,y:0,z:0});break;case E.GRAPPLE_CABLE:this.writer.writeShort(o||0),this.writer.writePos(r),this.writer.writePos(n||{x:0,y:0,z:0}),this.writer.writePos(i||{x:0,y:0,z:0});break;case E.LIGHTNING:this.writer.writeShort(d||0),this.writer.writeShort(l||0),this.writer.writePos(r),this.writer.writePos(n||{x:0,y:0,z:0});break;case E.FLASHLIGHT:this.writer.writePos(r),this.writer.writeShort(o||0);break;case E.FORCEWALL:this.writer.writePos(r),this.writer.writePos(n||{x:0,y:0,z:0}),this.writer.writeByte(a||0);break;case E.STEAM:this.writer.writeShort(-1),this.writer.writeByte(s||0),this.writer.writePos(r),this.writer.writeDir(i||{x:0,y:0,z:0}),this.writer.writeByte(a||0),this.writer.writeShort(0);break;case E.WIDOWBEAMOUT:this.writer.writeShort(0);case E.HEATBEAM:case E.MONSTER_HEATBEAM:this.writer.writeShort(o||0),this.writer.writePos(r),this.writer.writePos(n||{x:0,y:0,z:0}),this.writer.writeDir(i||{x:0,y:0,z:0});break;default:console.warn(`writeTempEntity: Unhandled type ${e}`);break}}writeSound(e,r,n,i,s,a,o,d=0){this.writeCommand(M.sound,d),this.writer.writeByte(e),this.writer.writeByte(r),e&1&&this.writer.writeByte(n||0),e&2&&this.writer.writeByte(i||0),e&16&&this.writer.writeByte(s||0),e&8&&this.writer.writeShort(a||0),e&4&&o&&(this.writer.writeCoord(o.x),this.writer.writeCoord(o.y),this.writer.writeCoord(o.z))}writeDisconnect(e=0){this.writeCommand(M.disconnect,e)}writeReconnect(e=0){this.writeCommand(M.reconnect,e)}writeFrame(e,r){this.writeCommand(M.frame,r),this.writer.writeLong(e.serverFrame),this.writer.writeLong(e.deltaFrame),r!==25&&r!==26&&this.writer.writeByte(e.surpressCount),this.writer.writeByte(e.areaBytes),e.areaBytes>0&&this.writer.writeBytes(e.areaBits),this.writeCommand(M.playerinfo,r),this.writePlayerState(e.playerState),this.writePacketEntities(e.packetEntities.entities,e.packetEntities.delta,r)}writePlayerState(e){let r=0;e.pm_type!==0&&(r|=1),(e.origin.x!==0||e.origin.y!==0||e.origin.z!==0)&&(r|=2),(e.velocity.x!==0||e.velocity.y!==0||e.velocity.z!==0)&&(r|=4),e.pm_time!==0&&(r|=8),e.pm_flags!==0&&(r|=16),e.gravity!==0&&(r|=32),(e.delta_angles.x!==0||e.delta_angles.y!==0||e.delta_angles.z!==0)&&(r|=64),(e.viewoffset.x!==0||e.viewoffset.y!==0||e.viewoffset.z!==0)&&(r|=128),(e.viewangles.x!==0||e.viewangles.y!==0||e.viewangles.z!==0)&&(r|=256),(e.kick_angles.x!==0||e.kick_angles.y!==0||e.kick_angles.z!==0)&&(r|=512),(e.blend[0]!==0||e.blend[1]!==0||e.blend[2]!==0||e.blend[3]!==0)&&(r|=1024),e.gun_index!==0&&(r|=4096),(e.gun_frame!==0||e.gun_offset.x!==0||e.gun_offset.y!==0||e.gun_offset.z!==0||e.gun_angles.x!==0||e.gun_angles.y!==0||e.gun_angles.z!==0)&&(r|=8192),e.fov!==0&&(r|=2048),e.rdflags!==0&&(r|=16384),this.writer.writeShort(r),r&1&&this.writer.writeByte(e.pm_type),r&2&&(this.writer.writeCoord(e.origin.x),this.writer.writeCoord(e.origin.y),this.writer.writeCoord(e.origin.z)),r&4&&(this.writer.writeCoord(e.velocity.x),this.writer.writeCoord(e.velocity.y),this.writer.writeCoord(e.velocity.z)),r&8&&this.writer.writeByte(e.pm_time),r&16&&this.writer.writeByte(e.pm_flags),r&32&&this.writer.writeShort(e.gravity),r&64&&(this.writer.writeShort(Math.round(e.delta_angles.x*(32768/180))),this.writer.writeShort(Math.round(e.delta_angles.y*(32768/180))),this.writer.writeShort(Math.round(e.delta_angles.z*(32768/180)))),r&128&&(this.writer.writeChar(Math.round(e.viewoffset.x*4)),this.writer.writeChar(Math.round(e.viewoffset.y*4)),this.writer.writeChar(Math.round(e.viewoffset.z*4))),r&256&&(this.writer.writeAngle16(e.viewangles.x),this.writer.writeAngle16(e.viewangles.y),this.writer.writeAngle16(e.viewangles.z)),r&512&&(this.writer.writeChar(Math.round(e.kick_angles.x*4)),this.writer.writeChar(Math.round(e.kick_angles.y*4)),this.writer.writeChar(Math.round(e.kick_angles.z*4))),r&4096&&this.writer.writeByte(e.gun_index),r&8192&&(this.writer.writeByte(e.gun_frame),this.writer.writeChar(Math.round(e.gun_offset.x*4)),this.writer.writeChar(Math.round(e.gun_offset.y*4)),this.writer.writeChar(Math.round(e.gun_offset.z*4)),this.writer.writeChar(Math.round(e.gun_angles.x*4)),this.writer.writeChar(Math.round(e.gun_angles.y*4)),this.writer.writeChar(Math.round(e.gun_angles.z*4))),r&1024&&(this.writer.writeByte(e.blend[0]),this.writer.writeByte(e.blend[1]),this.writer.writeByte(e.blend[2]),this.writer.writeByte(e.blend[3])),r&2048&&this.writer.writeByte(e.fov),r&16384&&this.writer.writeByte(e.rdflags);let n=0;for(let i=0;i<32;i++)e.stats[i]!==0&&(n|=1<<i);this.writer.writeLong(n);for(let i=0;i<32;i++)n&1<<i&&this.writer.writeShort(e.stats[i])}writePacketEntities(e,r,n){this.writeCommand(r?M.deltapacketentities:M.packetentities,n);for(let i of e){let s=!r;this.writeEntityState(i,null,s,n)}this.writer.writeShort(0)}writeEntityState(e,r,n,i){let s=0,a=0;e.bits!==0&&!n?(s=e.bits,a=e.bitsHigh):(e.modelindex!==0&&(s|=Ar),e.modelindex2!==0&&(s|=Lr),e.modelindex3!==0&&(s|=Tr),e.modelindex4!==0&&(s|=Cr),e.frame!==0&&(e.frame>=256?s|=Er:s|=_r),e.skinnum!==0&&(e.skinnum>=256?s|=St:s|=_t),e.effects!==0&&(e.effects>=256?s|=wt:s|=xt),e.renderfx!==0&&(e.renderfx>=256?s|=vt:s|=bt),e.origin.x!==0&&(s|=gr),e.origin.y!==0&&(s|=yr),e.origin.z!==0&&(s|=wr),e.angles.x!==0&&(s|=Sr),e.angles.y!==0&&(s|=br),e.angles.z!==0&&(s|=xr),(e.old_origin.x!==0||e.old_origin.y!==0||e.old_origin.z!==0)&&(s|=Ir),e.sound!==0&&(s|=kr),e.event!==0&&(s|=vr),e.solid!==0&&(s|=Rr),i>=2023&&(e.alpha!==0&&(s|=Mr),e.scale!==0&&(s|=Pr),e.instanceBits!==0&&(s|=Fr),e.loopVolume!==0&&(s|=zr),e.loopAttenuation!==0&&(a|=Br),e.owner!==0&&(a|=Dr),e.oldFrame!==0&&(a|=Or)),e.number>=256&&(s|=Bo)),a!==0&&(s|=No),(s&4278190080)!==0&&(s|=Oo),(s&16711680)!==0&&(s|=Do),(s&65280)!==0&&(s|=Ks),this.writer.writeByte(s&255),s&Ks&&this.writer.writeByte(s>>8&255),s&Do&&this.writer.writeByte(s>>16&255),s&Oo&&this.writer.writeByte(s>>24&255),i>=2023&&s&No&&this.writer.writeByte(a&255),s&Bo?this.writer.writeShort(e.number):this.writer.writeByte(e.number),s&Ar&&this.writer.writeByte(e.modelindex),s&Lr&&this.writer.writeByte(e.modelindex2),s&Tr&&this.writer.writeByte(e.modelindex3),s&Cr&&this.writer.writeByte(e.modelindex4),s&_r&&this.writer.writeByte(e.frame),s&Er&&this.writer.writeShort(e.frame),s&_t&&s&St?this.writer.writeLong(e.skinnum):s&_t?this.writer.writeByte(e.skinnum):s&St&&this.writer.writeShort(e.skinnum),s&xt&&s&wt?this.writer.writeLong(e.effects):s&xt?this.writer.writeByte(e.effects):s&wt&&this.writer.writeShort(e.effects),s&bt&&s&vt?this.writer.writeLong(e.renderfx):s&bt?this.writer.writeByte(e.renderfx):s&vt&&this.writer.writeShort(e.renderfx),s&gr&&this.writer.writeCoord(e.origin.x),s&yr&&this.writer.writeCoord(e.origin.y),s&wr&&this.writer.writeCoord(e.origin.z),s&Sr&&this.writer.writeAngle(e.angles.x),s&br&&this.writer.writeAngle(e.angles.y),s&xr&&this.writer.writeAngle(e.angles.z),s&Ir&&(this.writer.writeCoord(e.old_origin.x),this.writer.writeCoord(e.old_origin.y),this.writer.writeCoord(e.old_origin.z)),s&kr&&this.writer.writeByte(e.sound),s&vr&&this.writer.writeByte(e.event),s&Rr&&this.writer.writeShort(e.solid),i>=2023&&(s&Mr&&this.writer.writeByte(Math.round(e.alpha*255)),s&Pr&&this.writer.writeFloat(e.scale),s&Fr&&this.writer.writeLong(e.instanceBits),s&zr&&this.writer.writeByte(Math.round(e.loopVolume*255)),a&Br&&this.writer.writeByte(Math.round(e.loopAttenuation*255)),a&Dr&&this.writer.writeShort(e.owner),a&Or&&this.writer.writeShort(e.oldFrame))}};var Vo=class{constructor(){this.writer=new Hr}writeBlock(e){this.writer.writeLong(e.byteLength),this.writer.writeBytes(e)}writeEOF(){this.writer.writeLong(-1)}getData(){return this.writer.getData()}};function Go(t,e){let r=e.bits,n=e.bitsHigh;t.number=e.number,r&Ar&&(t.modelindex=e.modelindex),r&Lr&&(t.modelindex2=e.modelindex2),r&Tr&&(t.modelindex3=e.modelindex3),r&Cr&&(t.modelindex4=e.modelindex4),r&_r&&(t.frame=e.frame),r&Er&&(t.frame=e.frame),(r&_t||r&St)&&(t.skinnum=e.skinnum),(r&xt||r&wt)&&(t.effects=e.effects),(r&bt||r&vt)&&(t.renderfx=e.renderfx),r&gr&&(t.origin.x=e.origin.x),r&yr&&(t.origin.y=e.origin.y),r&wr&&(t.origin.z=e.origin.z),r&Sr&&(t.angles.x=e.angles.x),r&br&&(t.angles.y=e.angles.y),r&xr&&(t.angles.z=e.angles.z),r&Ir&&(t.old_origin.x=e.old_origin.x,t.old_origin.y=e.old_origin.y,t.old_origin.z=e.old_origin.z),r&kr&&(t.sound=e.sound),r&vr&&(t.event=e.event),r&Rr&&(t.solid=e.solid),r&Mr&&(t.alpha=e.alpha),r&Pr&&(t.scale=e.scale),r&Fr&&(t.instanceBits=e.instanceBits),r&zr&&(t.loopVolume=e.loopVolume),n&Br&&(t.loopAttenuation=e.loopAttenuation),n&Dr&&(t.owner=e.owner),n&Or&&(t.oldFrame=e.oldFrame)}var Wo=class{extractClip(e,r,n,i){let s=new je(e.buffer),a=r.type==="frame"?r.frame:i.timeToFrame(r.seconds),o=n.type==="frame"?n.frame:i.timeToFrame(n.seconds);if(!s.seekToMessage(a))throw new Error(`Start frame ${a} out of bounds`);let d=s.getOffset(),l=e.byteLength;s.seekToMessage(o+1)&&(l=s.getOffset());let c=e.slice(d,l),f=new Uint8Array(c.length+4);return f.set(c),new DataView(f.buffer).setInt32(c.length,-1,!0),f}extractDemoRange(e,r,n){let i=new Vt;return i.loadDemo(e.buffer),this.extractClip(e,{type:"frame",frame:r},{type:"frame",frame:n},i)}async captureWorldState(e,r){let n=new Vt;n.loadDemo(e.buffer);let i={serverData:{protocol:0,serverCount:0,attractLoop:0,gameDir:"",playerNum:0,levelName:""},configStrings:new Map,entityBaselines:new Map,playerState:pn(),currentEntities:new Map,currentFrameNumber:0},s={onServerData:(o,d,l,c,f,u,h,m)=>{i.serverData={protocol:o,serverCount:d,attractLoop:l,gameDir:c,playerNum:f,levelName:u,tickRate:h,demoType:m}},onConfigString:(o,d)=>{i.configStrings.set(o,d)},onSpawnBaseline:o=>{i.entityBaselines.set(o.number,{...o})},onFrame:o=>{i.playerState={...o.playerState},i.currentFrameNumber=o.serverFrame,o.packetEntities.delta||i.currentEntities.clear();let d=new Map;if(o.packetEntities.delta)for(let[l,c]of i.currentEntities)d.set(l,c);for(let l of o.packetEntities.entities){if(l.bits&$s){d.delete(l.number);continue}let c=d.get(l.number);if(c)c={...c};else{let f=i.entityBaselines.get(l.number);f?c={...f}:(c=Ht(),c.number=l.number)}Go(c,l),d.set(l.number,c)}i.currentEntities=d},onCenterPrint:()=>{},onStuffText:()=>{},onPrint:()=>{},onSound:()=>{},onTempEntity:()=>{},onLayout:()=>{},onInventory:()=>{},onMuzzleFlash:()=>{},onMuzzleFlash2:()=>{},onDisconnect:()=>{},onReconnect:()=>{},onDownload:()=>{}};n.setHandler(s);let a=r.type==="frame"?r.frame:n.timeToFrame(r.seconds);return n.seek(a),i}extractStandaloneClip(e,r,n,i){let s=new Vo,a=new Ys,o=new Vt;o.loadDemo(e.buffer);let d=r.type==="frame"?r.frame:o.timeToFrame(r.seconds),l=n.type==="frame"?n.frame:o.timeToFrame(n.seconds),{serverData:c}=i;c.protocol>=2023?a.writeServerDataRerelease(c.protocol,c.serverCount,c.demoType||0,c.tickRate||10,c.gameDir,c.playerNum,c.levelName):a.writeServerData(c.protocol,c.serverCount,c.attractLoop,c.gameDir,c.playerNum,c.levelName);for(let[g,p]of i.configStrings)a.writeConfigString(g,p,c.protocol);for(let g of i.entityBaselines.values())a.writeSpawnBaseline(g,c.protocol);let f=Array.from(i.currentEntities.values()),u={serverFrame:0,deltaFrame:-1,surpressCount:0,areaBytes:0,areaBits:new Uint8Array(0),playerState:i.playerState,packetEntities:{delta:!1,entities:f}};a.writeFrame(u,c.protocol),s.writeBlock(a.getData());let h=new Map;h.set(d,0);let m=new je(e.buffer);if(m.seekToMessage(d+1)){let g=d+1;for(;g<=l&&m.nextBlock();){let y=m.getBlock().data,_=new Ys,x={onServerData:()=>{},onConfigString:(S,w)=>_.writeConfigString(S,w,c.protocol),onSpawnBaseline:S=>_.writeSpawnBaseline(S,c.protocol),onCenterPrint:S=>_.writeCenterPrint(S,c.protocol),onStuffText:S=>_.writeStuffText(S,c.protocol),onPrint:(S,w)=>_.writePrint(S,w,c.protocol),onSound:(S,w,L,C,A,I,R)=>_.writeSound(S,w,L,C,A,I,R,c.protocol),onLayout:S=>_.writeLayout(S,c.protocol),onInventory:S=>_.writeInventory(S,c.protocol),onMuzzleFlash:(S,w)=>_.writeMuzzleFlash(S,w,c.protocol),onMuzzleFlash2:(S,w)=>_.writeMuzzleFlash2(S,w,c.protocol),onTempEntity:(S,w,L,C,A,I,R,F,k)=>_.writeTempEntity(S,w,L,C,A,I,R,F,k,c.protocol),onDisconnect:()=>_.writeDisconnect(c.protocol),onReconnect:()=>_.writeReconnect(c.protocol),onDownload:()=>{},onFrame:S=>{let w=S.serverFrame,L=S.deltaFrame,C=g-d,A=-1;h.has(L)?A=h.get(L):S.packetEntities.delta=!1,h.set(w,C),S.serverFrame=C,S.deltaFrame=A,_.writeFrame(S,c.protocol)}},b=new it(y,x,!1);b.setProtocolVersion(c.protocol),b.parseMessage();let v=_.getData();v.byteLength>0&&s.writeBlock(v),g++}}return s.writeEOF(),s.getData()}};var $c=(u=>(u.Unknown="unknown",u.BSP="bsp",u.MD2="md2",u.MD3="md3",u.WAL="wal",u.PCX="pcx",u.TGA="tga",u.WAV="wav",u.OGG="ogg",u.TXT="txt",u.CFG="cfg",u.DEM="dem",u))($c||{}),Ih={".bsp":"bsp",".md2":"md2",".md3":"md3",".wal":"wal",".pcx":"pcx",".tga":"tga",".wav":"wav",".ogg":"ogg",".txt":"txt",".cfg":"cfg",".dm2":"dem"};function qs(t,e){if(t.length<e.length)return!1;for(let r=0;r<e.length;r++)if(t[r]!==e[r])return!1;return!0}var Gb=[73,66,83,80],Wb=[73,68,80,50],Xb=[73,68,80,51];var Kb=[82,73,70,70];var $b=[79,103,103,83];function Zc(t,e){let r=t.slice(t.lastIndexOf(".")).toLowerCase();if(e){if(qs(e,Gb))return"bsp";if(qs(e,Wb))return"md2";if(qs(e,Xb))return"md3";if(qs(e,$b))return"ogg";if(e.length>128&&e[0]===10&&e[1]<6)return"pcx";if(qs(e,Kb)&&e.length>=12&&e[8]===87&&e[9]===65&&e[10]===86&&e[11]===69)return"wav"}return Ih[r]?Ih[r]:"unknown"}function Yc(t){let e=Zc(t);return e==="txt"||e==="cfg"}function kh(t){return!Yc(t)}function Zb(t,e,r,n,i){let s=new Uint8ClampedArray(n*i*4),a=e/n,o=r/i;for(let d=0;d<i;d++)for(let l=0;l<n;l++){let c=l*a,f=d*o,u=Math.floor(c),h=Math.floor(f),m=c-u,g=f-h,p=Math.min(u+1,e-1),y=Math.min(h+1,r-1),_=(h*e+u)*4,x=(h*e+p)*4,b=(y*e+u)*4,v=(y*e+p)*4,S=(d*n+l)*4;for(let w=0;w<4;w++){let L=t[_+w],C=t[x+w],A=t[b+w],I=t[v+w],R=L*(1-m)+C*m,F=A*(1-m)+I*m,k=R*(1-g)+F*g;s[S+w]=k}}return s}function Yb(t,e,r,n,i,s,a,o,d,l,c){n=Math.floor(n),i=Math.floor(i),s=Math.floor(s),a=Math.floor(a);let f=Math.abs(s-n),u=Math.abs(a-i),h=n<s?1:-1,m=i<a?1:-1,g=f-u;for(;;){if(n>=0&&n<e&&i>=0&&i<r){let y=(i*e+n)*4,_=1-c/255;t[y]=o*(c/255)+t[y]*_,t[y+1]=d*(c/255)+t[y+1]*_,t[y+2]=l*(c/255)+t[y+2]*_,t[y+3]=255}if(n===s&&i===a)break;let p=2*g;p>-u&&(g-=u,n+=h),p<f&&(g+=f,i+=m)}}function Rh(t,e,r,n,i){let o=(t.x-n.x)*.707-(t.y-n.y)*.707,d=(t.x-n.x)*.707+(t.y-n.y)*.707,l=t.z-n.z,c=.866,f=.5,u=d*c-l*f,h=d*f+l*c,m=e/2+o*i,g=r/2-h*i;return{x:m,y:g}}var Xo=class{constructor(e){this.assetManager=e}async generateTextureThumbnail(e,r){try{let n=await this.assetManager.loadTexture(e);if(!n||n.levels.length===0)return null;let i=n.levels[0],s=i.width/i.height,a=r,o=r;s>1?o=Math.floor(r/s):a=Math.floor(r*s),a=Math.max(1,a),o=Math.max(1,o);let d=Zb(i.rgba,i.width,i.height,a,o);return new ImageData(d,a,o)}catch(n){return console.error(`Failed to generate thumbnail for ${e}`,n),null}}async generateModelThumbnail(e,r){try{let n=[],i=[],s=e.split(".").pop()?.toLowerCase();if(s==="md2"){let p=await this.assetManager.loadMd2Model(e);if(!p||p.frames.length===0)return null;n=p.frames[0].vertices.map(_=>_.position);for(let _ of p.triangles)i.push(_.vertexIndices[0],_.vertexIndices[1]),i.push(_.vertexIndices[1],_.vertexIndices[2]),i.push(_.vertexIndices[2],_.vertexIndices[0])}else if(s==="md3"){let p=await this.assetManager.loadMd3Model(e);if(!p||p.surfaces.length===0)return null;let y=0;for(let _ of p.surfaces){if(_.vertices.length===0)continue;let x=_.vertices[0];n.push(...x.map(b=>({x:b.position.x,y:b.position.y,z:b.position.z})));for(let b of _.triangles)i.push(y+b.indices[0],y+b.indices[1]),i.push(y+b.indices[1],y+b.indices[2]),i.push(y+b.indices[2],y+b.indices[0]);y+=x.length}}else return null;if(n.length===0)return null;let a={x:1/0,y:1/0,z:1/0},o={x:-1/0,y:-1/0,z:-1/0};for(let p of n)a.x=Math.min(a.x,p.x),a.y=Math.min(a.y,p.y),a.z=Math.min(a.z,p.z),o.x=Math.max(o.x,p.x),o.y=Math.max(o.y,p.y),o.z=Math.max(o.z,p.z);let d={x:(a.x+o.x)/2,y:(a.y+o.y)/2,z:(a.z+o.z)/2},l=o.x-a.x,c=o.y-a.y,f=o.z-a.z,u=Math.max(l,c,f),h=Math.max(u,.001),m=r*.8/h,g=new Uint8ClampedArray(r*r*4);for(let p=0;p<i.length;p+=2){let y=i[p],_=i[p+1],x=n[y],b=n[_],v=Rh(x,r,r,d,m),S=Rh(b,r,r,d,m);Yb(g,r,r,v.x,v.y,S.x,S.y,0,255,0,255)}return new ImageData(g,r,r)}catch(n){return console.error(`Failed to generate model thumbnail for ${e}`,n),null}}async getMapBounds(e,r){try{let n=Ai(r);if(n.models.length>0){let i=n.models[0];return{mins:{x:i.mins[0],y:i.mins[1],z:i.mins[2]},maxs:{x:i.maxs[0],y:i.maxs[1],z:i.maxs[2]}}}return null}catch(n){return console.error("Failed to get map bounds",n),null}}async extractMapScreenshot(e){return null}};var Ko=class{constructor(e){this.loader=e}async getMapStatistics(e){let r=await this.loader.load(e),n=r.faces.filter(a=>a.lightOffset!==-1).length,i=r.models[0],s=i?{mins:i.mins,maxs:i.maxs}:{mins:[0,0,0],maxs:[0,0,0]};return{entityCount:r.entities.entities.length,surfaceCount:r.faces.length,lightmapCount:n,vertexCount:r.vertices.length,bounds:s}}async getUsedTextures(e){let r=await this.loader.load(e),n=new Set;for(let i of r.texInfo)i.texture&&n.add(i.texture);return Array.from(n).sort()}async getUsedModels(e){let r=await this.loader.load(e),n=new Set;for(let i of r.entities.entities)i.properties.model&&!i.properties.model.startsWith("*")&&n.add(i.properties.model);return Array.from(n).sort()}async getUsedSounds(e){let r=await this.loader.load(e),n=new Set;for(let i of r.entities.entities){i.properties.noise&&n.add(i.properties.noise);for(let[s,a]of Object.entries(i.properties))(s==="noise"||s.endsWith("_sound")||s==="sound")&&typeof a=="string"&&n.add(a)}return Array.from(n).sort()}};function Ph(t){let e=[],r=0,n=t.length;function i(){for(;r<n&&/\s/.test(t[r]);)r++}function s(){if(i(),r>=n)return null;if(t[r]==='"'){r++;let a=r;for(;r<n&&t[r]!=='"';)t[r],r++;let o=t.substring(a,r);return r++,o}else{if(t[r]==="{"||t[r]==="}")return t[r++];{if(t.startsWith("//",r)){for(;r<n&&t[r]!==`
582
+ }`,wo=class{constructor(e,r){this.vertexCapacity=0;this.indexCapacity=0;this.gl=e,this.system=r,this.program=Te.create(e,{vertex:uc,fragment:fc}),this.vertexBuffer=new Ce(e,e.DYNAMIC_DRAW),this.indexBuffer=new _e(e,e.DYNAMIC_DRAW),this.vertexArray=new Pe(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)}get shaderSize(){return this.program.sourceSize}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 i=r.indices;r.indices.byteLength>this.indexCapacity?(this.indexCapacity=r.indices.byteLength,this.indexBuffer.upload(i,this.gl.DYNAMIC_DRAW)):this.indexBuffer.update(i),this.gl.depthMask(!1),this.program.use();let s=this.program.getUniformLocation("u_viewProjection");this.gl.uniformMatrix4fv(s,!1,e.viewProjection),this.vertexArray.bind();for(let a of r.batches)a.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,a.count,this.gl.UNSIGNED_SHORT,a.start*2);this.gl.depthMask(!0)}dispose(){this.program.dispose(),this.vertexBuffer.dispose(),this.indexBuffer.dispose(),this.vertexArray.dispose()}};function ju(t){let{system:e,origin:r,normal:n={x:0,y:0,z:1}}=t;for(let i=0;i<12;i+=1){let s=200+e.rng.frandom()*180,a=e.rng.frandom()*.35;e.spawn({position:r,velocity:{x:n.x*s+(e.rng.frandom()-.5)*80,y:n.y*s+(e.rng.frandom()-.5)*80,z:Math.max(n.z*s,120)+a*80},color:[1,.8,.4,1],size:2.5,lifetime:.45+e.rng.frandom()*.1,gravity:600,damping:2,bounce:.45,blendMode:"additive",fade:!0})}for(let i=0;i<8;i+=1)e.spawn({position:r,velocity:{x:(e.rng.frandom()-.5)*40,y:(e.rng.frandom()-.5)*40,z:80+e.rng.frandom()*40},color:[.45,.45,.45,.75],size:6,lifetime:.6,gravity:200,damping:4,bounce:.15,blendMode:"alpha",fade:!0})}function Qu(t){let{system:e,origin:r}=t;for(let n=0;n<40;n+=1){let i=e.rng.frandom()*Math.PI*2,s=Math.acos(2*e.rng.frandom()-1),a=220+e.rng.frandom()*260,o={x:Math.sin(s)*Math.cos(i),y:Math.sin(s)*Math.sin(i),z:Math.cos(s)};e.spawn({position:r,velocity:{x:o.x*a,y:o.y*a,z:o.z*a},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.rng.frandom()-.5)*30,y:(e.rng.frandom()-.5)*30,z:120+e.rng.frandom()*120},color:[.25,.25,.25,.9],size:12,lifetime:1.2,gravity:300,damping:3,blendMode:"alpha",fade:!0})}function Ju(t){let{system:e,origin:r,direction:n={x:0,y:0,z:1}}=t;for(let i=0;i<24;i+=1){let s=120+e.rng.frandom()*180;e.spawn({position:r,velocity:{x:n.x*s+(e.rng.frandom()-.5)*70,y:n.y*s+(e.rng.frandom()-.5)*70,z:n.z*s+e.rng.frandom()*80},color:[.6,0,0,.95],size:3,lifetime:.8,gravity:900,damping:1,bounce:.2,blendMode:"alpha",fade:!0})}}function ef(t){let{system:e,origin:r}=t;for(let n=0;n<30;n+=1){let i=e.rng.frandom()*Math.PI*2,s=8+e.rng.frandom()*8;e.spawn({position:r,velocity:{x:Math.cos(i)*s,y:Math.sin(i)*s,z:100+e.rng.frandom()*80},color:[.4,.6,1,.9],size:4,lifetime:.5,gravity:300,damping:2,blendMode:"additive",fade:!0})}}function tf(t){let{system:e,origin:r,direction:n={x:1,y:0,z:0}}=t;for(let i=0;i<10;i+=1){let s=350+e.rng.frandom()*100;e.spawn({position:r,velocity:{x:n.x*s+(e.rng.frandom()-.5)*30,y:n.y*s+(e.rng.frandom()-.5)*30,z:n.z*s+(e.rng.frandom()-.5)*30},color:[1,.8,.3,1],size:3,lifetime:.25,gravity:200,damping:1,blendMode:"additive",fade:!0})}}function rf(t){let{system:e,origin:r,direction:n={x:0,y:0,z:0}}=t;for(let i=0;i<6;i+=1)e.spawn({position:{x:r.x+n.x*i*2,y:r.y+n.y*i*2,z:r.z+n.z*i*2},velocity:{x:(e.rng.frandom()-.5)*15,y:(e.rng.frandom()-.5)*15,z:20+e.rng.frandom()*15},color:[.6,.6,.6,.8],size:2.2,lifetime:.6,gravity:200,damping:1.5,blendMode:"alpha",fade:!0})}function nf(t){let{system:e,origin:r,normal:n={x:0,y:0,z:1}}=t;for(let i=0;i<30;i+=1){let s=100+e.rng.frandom()*150;e.spawn({position:r,velocity:{x:n.x*s+(e.rng.frandom()-.5)*80,y:n.y*s+(e.rng.frandom()-.5)*80,z:100+e.rng.frandom()*120},color:[.5,.6,.8,.5],size:3,lifetime:.5+e.rng.frandom()*.3,gravity:800,damping:1.5,blendMode:"alpha",fade:!0})}}function sf(t){let{system:e,origin:r}=t;for(let n=0;n<8;n+=1)e.spawn({position:{x:r.x+(e.rng.frandom()-.5)*10,y:r.y+(e.rng.frandom()-.5)*10,z:r.z+(e.rng.frandom()-.5)*10},velocity:{x:(e.rng.frandom()-.5)*20,y:(e.rng.frandom()-.5)*20,z:40+e.rng.frandom()*20},color:[.8,.8,.8,.3],size:5+e.rng.frandom()*4,lifetime:1.5+e.rng.frandom()*.5,gravity:-50,damping:.5,blendMode:"alpha",fade:!0})}function af(t){let{system:e,start:r,end:n}=t,i=n.x-r.x,s=n.y-r.y,a=n.z-r.z,o=Math.sqrt(i*i+s*s+a*a);if(o<1)return;let d={x:i/o,y:s/o,z:a/o},l=8;for(let c=0;c<o;c+=l){let f=r.x+d.x*c,u=r.y+d.y*c,h=r.z+d.z*c;e.spawn({position:{x:f,y:u,z:h},velocity:{x:0,y:0,z:0},color:[.4,.4,1,.8],size:2,lifetime:.6,blendMode:"additive",fade:!0});let m=3,g=c*.5;e.spawn({position:{x:f+(e.rng.frandom()-.5)*6,y:u+(e.rng.frandom()-.5)*6,z:h+(e.rng.frandom()-.5)*6},velocity:{x:(e.rng.frandom()-.5)*10,y:(e.rng.frandom()-.5)*10,z:(e.rng.frandom()-.5)*10},color:[.1,.1,.8,.6],size:3,lifetime:.8+e.rng.frandom()*.2,blendMode:"additive",fade:!0})}}function of(t){let{system:e,origin:r,normal:n={x:0,y:0,z:1},count:i=12,color:s=[1,.9,.2,1]}=t;for(let a=0;a<i;a++){let o=100+e.rng.frandom()*200,d=.5;e.spawn({position:r,velocity:{x:n.x*o+(e.rng.frandom()-.5)*100*d,y:n.y*o+(e.rng.frandom()-.5)*100*d,z:n.z*o+(e.rng.frandom()-.5)*100*d},color:s,size:1.5,lifetime:.3+e.rng.frandom()*.2,gravity:800,bounce:.5,damping:1,blendMode:"additive",fade:!0})}}function lf(t){let{system:e,origin:r,normal:n={x:0,y:0,z:1},color:i=[1,.8,0,1]}=t;e.spawn({position:r,velocity:{x:0,y:0,z:0},color:i,size:8,lifetime:.2,blendMode:"additive",fade:!0});for(let s=0;s<8;s++){let a=150+e.rng.frandom()*150;e.spawn({position:r,velocity:{x:n.x*a+(e.rng.frandom()-.5)*120,y:n.y*a+(e.rng.frandom()-.5)*120,z:n.z*a+(e.rng.frandom()-.5)*120},color:i,size:2,lifetime:.4+e.rng.frandom()*.2,gravity:400,blendMode:"additive",fade:!0})}}function cf(t){let{system:e,origin:r}=t;e.spawn({position:r,velocity:{x:0,y:0,z:0},color:[.2,1,.2,1],size:30,lifetime:.5,blendMode:"additive",fade:!0});for(let n=0;n<60;n++){let i=e.rng.frandom()*Math.PI*2,s=Math.acos(2*e.rng.frandom()-1),a=300+e.rng.frandom()*400,o={x:Math.sin(s)*Math.cos(i),y:Math.sin(s)*Math.sin(i),z:Math.cos(s)};e.spawn({position:r,velocity:{x:o.x*a,y:o.y*a,z:o.z*a},color:[.2,1,.2,.8],size:4,lifetime:1,gravity:100,damping:1,blendMode:"additive",fade:!0})}}var je=class{constructor(e){this.messageOffsets=[];this.currentBlock=null;this.buffer=e,this.view=new DataView(e),this.offset=0,this.scan()}scan(){let e=0;for(this.messageOffsets=[];e+4<=this.buffer.byteLength;){let r=this.view.getInt32(e,!0);if(r===-1)break;if(r<0||r>2097152){console.warn(`DemoReader: Invalid block length ${r} at offset ${e} during scan`);break}if(e+4+r>this.buffer.byteLength){console.warn(`DemoReader: Incomplete block at offset ${e} during scan`);break}this.messageOffsets.push(e),e+=4+r}}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(e===-1||e<0||this.offset+4+e>this.buffer.byteLength)return null;this.offset+=4;let r=this.buffer.slice(this.offset,this.offset+e);return this.offset+=e,{length:e,data:new vn(r)}}nextBlock(){let e=this.readNextBlock();return e?(this.currentBlock=e,!0):(this.currentBlock=null,!1)}getBlock(){if(!this.currentBlock)throw new Error("No current block. Call nextBlock() first.");return this.currentBlock}readAllBlocksToBuffer(){let e=0,r=this.offset,n=[],i=this.offset;for(;i+4<=this.buffer.byteLength;){let d=this.view.getInt32(i,!0);if(d===-1||d<0||i+4+d>this.buffer.byteLength)break;n.push({offset:i+4,length:d}),e+=d,i+=4+d}let s=new Uint8Array(e),a=0,o=new Uint8Array(this.buffer);for(let d of n)s.set(o.subarray(d.offset,d.offset+d.length),a),a+=d.length;return this.offset=i,s.buffer}reset(){this.offset=0,this.currentBlock=null}seekToMessage(e){return e<0||e>=this.messageOffsets.length?!1:(this.offset=this.messageOffsets[e],this.currentBlock=null,!0)}getMessageCount(){return this.messageOffsets.length}getOffset(){return this.offset}getProgress(){let e=this.offset,r=this.buffer.byteLength;return{current:e,total:r,percent:r>0?e/r*100:0}}};function ci(t){let e=t.length;for(;--e>=0;)t[e]=0}var Vg=0,Zf=1,Gg=2,Wg=3,Xg=258,Dc=29,Vs=256,Fs=Vs+1+Dc,ai=30,Oc=19,Yf=2*Fs+1,ln=15,hc=16,Kg=7,zc=256,qf=16,jf=17,Qf=18,Lc=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),To=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),$g=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),Jf=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Zg=512,Nt=new Array((Fs+2)*2);ci(Nt);var ks=new Array(ai*2);ci(ks);var Bs=new Array(Zg);ci(Bs);var Ds=new Array(Xg-Wg+1);ci(Ds);var Nc=new Array(Dc);ci(Nc);var Co=new Array(ai);ci(Co);function mc(t,e,r,n,i){this.static_tree=t,this.extra_bits=e,this.extra_base=r,this.elems=n,this.max_length=i,this.has_stree=t&&t.length}var eh,th,rh;function pc(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}var nh=t=>t<256?Bs[t]:Bs[256+(t>>>7)],Os=(t,e)=>{t.pending_buf[t.pending++]=e&255,t.pending_buf[t.pending++]=e>>>8&255},Fe=(t,e,r)=>{t.bi_valid>hc-r?(t.bi_buf|=e<<t.bi_valid&65535,Os(t,t.bi_buf),t.bi_buf=e>>hc-t.bi_valid,t.bi_valid+=r-hc):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=r)},pt=(t,e,r)=>{Fe(t,r[e*2],r[e*2+1])},ih=(t,e)=>{let r=0;do r|=t&1,t>>>=1,r<<=1;while(--e>0);return r>>>1},Yg=t=>{t.bi_valid===16?(Os(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=t.bi_buf&255,t.bi_buf>>=8,t.bi_valid-=8)},qg=(t,e)=>{let r=e.dyn_tree,n=e.max_code,i=e.stat_desc.static_tree,s=e.stat_desc.has_stree,a=e.stat_desc.extra_bits,o=e.stat_desc.extra_base,d=e.stat_desc.max_length,l,c,f,u,h,m,g=0;for(u=0;u<=ln;u++)t.bl_count[u]=0;for(r[t.heap[t.heap_max]*2+1]=0,l=t.heap_max+1;l<Yf;l++)c=t.heap[l],u=r[r[c*2+1]*2+1]+1,u>d&&(u=d,g++),r[c*2+1]=u,!(c>n)&&(t.bl_count[u]++,h=0,c>=o&&(h=a[c-o]),m=r[c*2],t.opt_len+=m*(u+h),s&&(t.static_len+=m*(i[c*2+1]+h)));if(g!==0){do{for(u=d-1;t.bl_count[u]===0;)u--;t.bl_count[u]--,t.bl_count[u+1]+=2,t.bl_count[d]--,g-=2}while(g>0);for(u=d;u!==0;u--)for(c=t.bl_count[u];c!==0;)f=t.heap[--l],!(f>n)&&(r[f*2+1]!==u&&(t.opt_len+=(u-r[f*2+1])*r[f*2],r[f*2+1]=u),c--)}},sh=(t,e,r)=>{let n=new Array(ln+1),i=0,s,a;for(s=1;s<=ln;s++)i=i+r[s-1]<<1,n[s]=i;for(a=0;a<=e;a++){let o=t[a*2+1];o!==0&&(t[a*2]=ih(n[o]++,o))}},jg=()=>{let t,e,r,n,i,s=new Array(ln+1);for(r=0,n=0;n<Dc-1;n++)for(Nc[n]=r,t=0;t<1<<Lc[n];t++)Ds[r++]=n;for(Ds[r-1]=n,i=0,n=0;n<16;n++)for(Co[n]=i,t=0;t<1<<To[n];t++)Bs[i++]=n;for(i>>=7;n<ai;n++)for(Co[n]=i<<7,t=0;t<1<<To[n]-7;t++)Bs[256+i++]=n;for(e=0;e<=ln;e++)s[e]=0;for(t=0;t<=143;)Nt[t*2+1]=8,t++,s[8]++;for(;t<=255;)Nt[t*2+1]=9,t++,s[9]++;for(;t<=279;)Nt[t*2+1]=7,t++,s[7]++;for(;t<=287;)Nt[t*2+1]=8,t++,s[8]++;for(sh(Nt,Fs+1,s),t=0;t<ai;t++)ks[t*2+1]=5,ks[t*2]=ih(t,5);eh=new mc(Nt,Lc,Vs+1,Fs,ln),th=new mc(ks,To,0,ai,ln),rh=new mc(new Array(0),$g,0,Oc,Kg)},ah=t=>{let e;for(e=0;e<Fs;e++)t.dyn_ltree[e*2]=0;for(e=0;e<ai;e++)t.dyn_dtree[e*2]=0;for(e=0;e<Oc;e++)t.bl_tree[e*2]=0;t.dyn_ltree[zc*2]=1,t.opt_len=t.static_len=0,t.sym_next=t.matches=0},oh=t=>{t.bi_valid>8?Os(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},df=(t,e,r,n)=>{let i=e*2,s=r*2;return t[i]<t[s]||t[i]===t[s]&&n[e]<=n[r]},gc=(t,e,r)=>{let n=t.heap[r],i=r<<1;for(;i<=t.heap_len&&(i<t.heap_len&&df(e,t.heap[i+1],t.heap[i],t.depth)&&i++,!df(e,n,t.heap[i],t.depth));)t.heap[r]=t.heap[i],r=i,i<<=1;t.heap[r]=n},uf=(t,e,r)=>{let n,i,s=0,a,o;if(t.sym_next!==0)do n=t.pending_buf[t.sym_buf+s++]&255,n+=(t.pending_buf[t.sym_buf+s++]&255)<<8,i=t.pending_buf[t.sym_buf+s++],n===0?pt(t,i,e):(a=Ds[i],pt(t,a+Vs+1,e),o=Lc[a],o!==0&&(i-=Nc[a],Fe(t,i,o)),n--,a=nh(n),pt(t,a,r),o=To[a],o!==0&&(n-=Co[a],Fe(t,n,o)));while(s<t.sym_next);pt(t,zc,e)},Tc=(t,e)=>{let r=e.dyn_tree,n=e.stat_desc.static_tree,i=e.stat_desc.has_stree,s=e.stat_desc.elems,a,o,d=-1,l;for(t.heap_len=0,t.heap_max=Yf,a=0;a<s;a++)r[a*2]!==0?(t.heap[++t.heap_len]=d=a,t.depth[a]=0):r[a*2+1]=0;for(;t.heap_len<2;)l=t.heap[++t.heap_len]=d<2?++d:0,r[l*2]=1,t.depth[l]=0,t.opt_len--,i&&(t.static_len-=n[l*2+1]);for(e.max_code=d,a=t.heap_len>>1;a>=1;a--)gc(t,r,a);l=s;do a=t.heap[1],t.heap[1]=t.heap[t.heap_len--],gc(t,r,1),o=t.heap[1],t.heap[--t.heap_max]=a,t.heap[--t.heap_max]=o,r[l*2]=r[a*2]+r[o*2],t.depth[l]=(t.depth[a]>=t.depth[o]?t.depth[a]:t.depth[o])+1,r[a*2+1]=r[o*2+1]=l,t.heap[1]=l++,gc(t,r,1);while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],qg(t,e),sh(r,d,t.bl_count)},ff=(t,e,r)=>{let n,i=-1,s,a=e[1],o=0,d=7,l=4;for(a===0&&(d=138,l=3),e[(r+1)*2+1]=65535,n=0;n<=r;n++)s=a,a=e[(n+1)*2+1],!(++o<d&&s===a)&&(o<l?t.bl_tree[s*2]+=o:s!==0?(s!==i&&t.bl_tree[s*2]++,t.bl_tree[qf*2]++):o<=10?t.bl_tree[jf*2]++:t.bl_tree[Qf*2]++,o=0,i=s,a===0?(d=138,l=3):s===a?(d=6,l=3):(d=7,l=4))},hf=(t,e,r)=>{let n,i=-1,s,a=e[1],o=0,d=7,l=4;for(a===0&&(d=138,l=3),n=0;n<=r;n++)if(s=a,a=e[(n+1)*2+1],!(++o<d&&s===a)){if(o<l)do pt(t,s,t.bl_tree);while(--o!==0);else s!==0?(s!==i&&(pt(t,s,t.bl_tree),o--),pt(t,qf,t.bl_tree),Fe(t,o-3,2)):o<=10?(pt(t,jf,t.bl_tree),Fe(t,o-3,3)):(pt(t,Qf,t.bl_tree),Fe(t,o-11,7));o=0,i=s,a===0?(d=138,l=3):s===a?(d=6,l=3):(d=7,l=4)}},Qg=t=>{let e;for(ff(t,t.dyn_ltree,t.l_desc.max_code),ff(t,t.dyn_dtree,t.d_desc.max_code),Tc(t,t.bl_desc),e=Oc-1;e>=3&&t.bl_tree[Jf[e]*2+1]===0;e--);return t.opt_len+=3*(e+1)+5+5+4,e},Jg=(t,e,r,n)=>{let i;for(Fe(t,e-257,5),Fe(t,r-1,5),Fe(t,n-4,4),i=0;i<n;i++)Fe(t,t.bl_tree[Jf[i]*2+1],3);hf(t,t.dyn_ltree,e-1),hf(t,t.dyn_dtree,r-1)},e1=t=>{let e=4093624447,r;for(r=0;r<=31;r++,e>>>=1)if(e&1&&t.dyn_ltree[r*2]!==0)return 0;if(t.dyn_ltree[18]!==0||t.dyn_ltree[20]!==0||t.dyn_ltree[26]!==0)return 1;for(r=32;r<Vs;r++)if(t.dyn_ltree[r*2]!==0)return 1;return 0},mf=!1,t1=t=>{mf||(jg(),mf=!0),t.l_desc=new pc(t.dyn_ltree,eh),t.d_desc=new pc(t.dyn_dtree,th),t.bl_desc=new pc(t.bl_tree,rh),t.bi_buf=0,t.bi_valid=0,ah(t)},lh=(t,e,r,n)=>{Fe(t,(Vg<<1)+(n?1:0),3),oh(t),Os(t,r),Os(t,~r),r&&t.pending_buf.set(t.window.subarray(e,e+r),t.pending),t.pending+=r},r1=t=>{Fe(t,Zf<<1,3),pt(t,zc,Nt),Yg(t)},n1=(t,e,r,n)=>{let i,s,a=0;t.level>0?(t.strm.data_type===2&&(t.strm.data_type=e1(t)),Tc(t,t.l_desc),Tc(t,t.d_desc),a=Qg(t),i=t.opt_len+3+7>>>3,s=t.static_len+3+7>>>3,s<=i&&(i=s)):i=s=r+5,r+4<=i&&e!==-1?lh(t,e,r,n):t.strategy===4||s===i?(Fe(t,(Zf<<1)+(n?1:0),3),uf(t,Nt,ks)):(Fe(t,(Gg<<1)+(n?1:0),3),Jg(t,t.l_desc.max_code+1,t.d_desc.max_code+1,a+1),uf(t,t.dyn_ltree,t.dyn_dtree)),ah(t),n&&oh(t)},i1=(t,e,r)=>(t.pending_buf[t.sym_buf+t.sym_next++]=e,t.pending_buf[t.sym_buf+t.sym_next++]=e>>8,t.pending_buf[t.sym_buf+t.sym_next++]=r,e===0?t.dyn_ltree[r*2]++:(t.matches++,e--,t.dyn_ltree[(Ds[r]+Vs+1)*2]++,t.dyn_dtree[nh(e)*2]++),t.sym_next===t.sym_end),s1=t1,a1=lh,o1=n1,l1=i1,c1=r1,d1={_tr_init:s1,_tr_stored_block:a1,_tr_flush_block:o1,_tr_tally:l1,_tr_align:c1},u1=(t,e,r,n)=>{let i=t&65535|0,s=t>>>16&65535|0,a=0;for(;r!==0;){a=r>2e3?2e3:r,r-=a;do i=i+e[n++]|0,s=s+i|0;while(--a);i%=65521,s%=65521}return i|s<<16|0},zs=u1,f1=()=>{let t,e=[];for(var r=0;r<256;r++){t=r;for(var n=0;n<8;n++)t=t&1?3988292384^t>>>1:t>>>1;e[r]=t}return e},h1=new Uint32Array(f1()),m1=(t,e,r,n)=>{let i=h1,s=n+r;t^=-1;for(let a=n;a<s;a++)t=t>>>8^i[(t^e[a])&255];return t^-1},me=m1,un={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},mn={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8},{_tr_init:p1,_tr_stored_block:Cc,_tr_flush_block:g1,_tr_tally:mr,_tr_align:y1}=d1,{Z_NO_FLUSH:pr,Z_PARTIAL_FLUSH:b1,Z_FULL_FLUSH:x1,Z_FINISH:Qe,Z_BLOCK:pf,Z_OK:pe,Z_STREAM_END:gf,Z_STREAM_ERROR:gt,Z_DATA_ERROR:_1,Z_BUF_ERROR:yc,Z_DEFAULT_COMPRESSION:v1,Z_FILTERED:w1,Z_HUFFMAN_ONLY:So,Z_RLE:S1,Z_FIXED:A1,Z_DEFAULT_STRATEGY:M1,Z_UNKNOWN:E1,Z_DEFLATED:Ro}=mn,L1=9,T1=15,C1=8,I1=29,k1=256,Ic=k1+1+I1,R1=30,P1=19,F1=2*Ic+1,B1=15,W=3,hr=258,yt=hr+W+1,D1=32,oi=42,Uc=57,kc=69,Rc=73,Pc=91,Fc=103,cn=113,Cs=666,Ie=1,di=2,fn=3,ui=4,O1=3,dn=(t,e)=>(t.msg=un[e],e),yf=t=>t*2-(t>4?9:0),fr=t=>{let e=t.length;for(;--e>=0;)t[e]=0},z1=t=>{let e,r,n,i=t.w_size;e=t.hash_size,n=e;do r=t.head[--n],t.head[n]=r>=i?r-i:0;while(--e);e=i,n=e;do r=t.prev[--n],t.prev[n]=r>=i?r-i:0;while(--e)},N1=(t,e,r)=>(e<<t.hash_shift^r)&t.hash_mask,gr=N1,Ue=t=>{let e=t.state,r=e.pending;r>t.avail_out&&(r=t.avail_out),r!==0&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+r),t.next_out),t.next_out+=r,e.pending_out+=r,t.total_out+=r,t.avail_out-=r,e.pending-=r,e.pending===0&&(e.pending_out=0))},He=(t,e)=>{g1(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,Ue(t.strm)},Z=(t,e)=>{t.pending_buf[t.pending++]=e},Ts=(t,e)=>{t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=e&255},Bc=(t,e,r,n)=>{let i=t.avail_in;return i>n&&(i=n),i===0?0:(t.avail_in-=i,e.set(t.input.subarray(t.next_in,t.next_in+i),r),t.state.wrap===1?t.adler=zs(t.adler,e,i,r):t.state.wrap===2&&(t.adler=me(t.adler,e,i,r)),t.next_in+=i,t.total_in+=i,i)},ch=(t,e)=>{let r=t.max_chain_length,n=t.strstart,i,s,a=t.prev_length,o=t.nice_match,d=t.strstart>t.w_size-yt?t.strstart-(t.w_size-yt):0,l=t.window,c=t.w_mask,f=t.prev,u=t.strstart+hr,h=l[n+a-1],m=l[n+a];t.prev_length>=t.good_match&&(r>>=2),o>t.lookahead&&(o=t.lookahead);do if(i=e,!(l[i+a]!==m||l[i+a-1]!==h||l[i]!==l[n]||l[++i]!==l[n+1])){n+=2,i++;do;while(l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&l[++n]===l[++i]&&n<u);if(s=hr-(u-n),n=u-hr,s>a){if(t.match_start=e,a=s,s>=o)break;h=l[n+a-1],m=l[n+a]}}while((e=f[e&c])>d&&--r!==0);return a<=t.lookahead?a:t.lookahead},li=t=>{let e=t.w_size,r,n,i;do{if(n=t.window_size-t.lookahead-t.strstart,t.strstart>=e+(e-yt)&&(t.window.set(t.window.subarray(e,e+e-n),0),t.match_start-=e,t.strstart-=e,t.block_start-=e,t.insert>t.strstart&&(t.insert=t.strstart),z1(t),n+=e),t.strm.avail_in===0)break;if(r=Bc(t.strm,t.window,t.strstart+t.lookahead,n),t.lookahead+=r,t.lookahead+t.insert>=W)for(i=t.strstart-t.insert,t.ins_h=t.window[i],t.ins_h=gr(t,t.ins_h,t.window[i+1]);t.insert&&(t.ins_h=gr(t,t.ins_h,t.window[i+W-1]),t.prev[i&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=i,i++,t.insert--,!(t.lookahead+t.insert<W)););}while(t.lookahead<yt&&t.strm.avail_in!==0)},dh=(t,e)=>{let r=t.pending_buf_size-5>t.w_size?t.w_size:t.pending_buf_size-5,n,i,s,a=0,o=t.strm.avail_in;do{if(n=65535,s=t.bi_valid+42>>3,t.strm.avail_out<s||(s=t.strm.avail_out-s,i=t.strstart-t.block_start,n>i+t.strm.avail_in&&(n=i+t.strm.avail_in),n>s&&(n=s),n<r&&(n===0&&e!==Qe||e===pr||n!==i+t.strm.avail_in)))break;a=e===Qe&&n===i+t.strm.avail_in?1:0,Cc(t,0,0,a),t.pending_buf[t.pending-4]=n,t.pending_buf[t.pending-3]=n>>8,t.pending_buf[t.pending-2]=~n,t.pending_buf[t.pending-1]=~n>>8,Ue(t.strm),i&&(i>n&&(i=n),t.strm.output.set(t.window.subarray(t.block_start,t.block_start+i),t.strm.next_out),t.strm.next_out+=i,t.strm.avail_out-=i,t.strm.total_out+=i,t.block_start+=i,n-=i),n&&(Bc(t.strm,t.strm.output,t.strm.next_out,n),t.strm.next_out+=n,t.strm.avail_out-=n,t.strm.total_out+=n)}while(a===0);return o-=t.strm.avail_in,o&&(o>=t.w_size?(t.matches=2,t.window.set(t.strm.input.subarray(t.strm.next_in-t.w_size,t.strm.next_in),0),t.strstart=t.w_size,t.insert=t.strstart):(t.window_size-t.strstart<=o&&(t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,t.insert>t.strstart&&(t.insert=t.strstart)),t.window.set(t.strm.input.subarray(t.strm.next_in-o,t.strm.next_in),t.strstart),t.strstart+=o,t.insert+=o>t.w_size-t.insert?t.w_size-t.insert:o),t.block_start=t.strstart),t.high_water<t.strstart&&(t.high_water=t.strstart),a?ui:e!==pr&&e!==Qe&&t.strm.avail_in===0&&t.strstart===t.block_start?di:(s=t.window_size-t.strstart,t.strm.avail_in>s&&t.block_start>=t.w_size&&(t.block_start-=t.w_size,t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,s+=t.w_size,t.insert>t.strstart&&(t.insert=t.strstart)),s>t.strm.avail_in&&(s=t.strm.avail_in),s&&(Bc(t.strm,t.window,t.strstart,s),t.strstart+=s,t.insert+=s>t.w_size-t.insert?t.w_size-t.insert:s),t.high_water<t.strstart&&(t.high_water=t.strstart),s=t.bi_valid+42>>3,s=t.pending_buf_size-s>65535?65535:t.pending_buf_size-s,r=s>t.w_size?t.w_size:s,i=t.strstart-t.block_start,(i>=r||(i||e===Qe)&&e!==pr&&t.strm.avail_in===0&&i<=s)&&(n=i>s?s:i,a=e===Qe&&t.strm.avail_in===0&&n===i?1:0,Cc(t,t.block_start,n,a),t.block_start+=n,Ue(t.strm)),a?fn:Ie)},bc=(t,e)=>{let r,n;for(;;){if(t.lookahead<yt){if(li(t),t.lookahead<yt&&e===pr)return Ie;if(t.lookahead===0)break}if(r=0,t.lookahead>=W&&(t.ins_h=gr(t,t.ins_h,t.window[t.strstart+W-1]),r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),r!==0&&t.strstart-r<=t.w_size-yt&&(t.match_length=ch(t,r)),t.match_length>=W)if(n=mr(t,t.strstart-t.match_start,t.match_length-W),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=W){t.match_length--;do t.strstart++,t.ins_h=gr(t,t.ins_h,t.window[t.strstart+W-1]),r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart;while(--t.match_length!==0);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=gr(t,t.ins_h,t.window[t.strstart+1]);else n=mr(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(n&&(He(t,!1),t.strm.avail_out===0))return Ie}return t.insert=t.strstart<W-1?t.strstart:W-1,e===Qe?(He(t,!0),t.strm.avail_out===0?fn:ui):t.sym_next&&(He(t,!1),t.strm.avail_out===0)?Ie:di},ii=(t,e)=>{let r,n,i;for(;;){if(t.lookahead<yt){if(li(t),t.lookahead<yt&&e===pr)return Ie;if(t.lookahead===0)break}if(r=0,t.lookahead>=W&&(t.ins_h=gr(t,t.ins_h,t.window[t.strstart+W-1]),r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=W-1,r!==0&&t.prev_length<t.max_lazy_match&&t.strstart-r<=t.w_size-yt&&(t.match_length=ch(t,r),t.match_length<=5&&(t.strategy===w1||t.match_length===W&&t.strstart-t.match_start>4096)&&(t.match_length=W-1)),t.prev_length>=W&&t.match_length<=t.prev_length){i=t.strstart+t.lookahead-W,n=mr(t,t.strstart-1-t.prev_match,t.prev_length-W),t.lookahead-=t.prev_length-1,t.prev_length-=2;do++t.strstart<=i&&(t.ins_h=gr(t,t.ins_h,t.window[t.strstart+W-1]),r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart);while(--t.prev_length!==0);if(t.match_available=0,t.match_length=W-1,t.strstart++,n&&(He(t,!1),t.strm.avail_out===0))return Ie}else if(t.match_available){if(n=mr(t,0,t.window[t.strstart-1]),n&&He(t,!1),t.strstart++,t.lookahead--,t.strm.avail_out===0)return Ie}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(n=mr(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<W-1?t.strstart:W-1,e===Qe?(He(t,!0),t.strm.avail_out===0?fn:ui):t.sym_next&&(He(t,!1),t.strm.avail_out===0)?Ie:di},U1=(t,e)=>{let r,n,i,s,a=t.window;for(;;){if(t.lookahead<=hr){if(li(t),t.lookahead<=hr&&e===pr)return Ie;if(t.lookahead===0)break}if(t.match_length=0,t.lookahead>=W&&t.strstart>0&&(i=t.strstart-1,n=a[i],n===a[++i]&&n===a[++i]&&n===a[++i])){s=t.strstart+hr;do;while(n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&i<s);t.match_length=hr-(s-i),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=W?(r=mr(t,1,t.match_length-W),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(r=mr(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),r&&(He(t,!1),t.strm.avail_out===0))return Ie}return t.insert=0,e===Qe?(He(t,!0),t.strm.avail_out===0?fn:ui):t.sym_next&&(He(t,!1),t.strm.avail_out===0)?Ie:di},H1=(t,e)=>{let r;for(;;){if(t.lookahead===0&&(li(t),t.lookahead===0)){if(e===pr)return Ie;break}if(t.match_length=0,r=mr(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,r&&(He(t,!1),t.strm.avail_out===0))return Ie}return t.insert=0,e===Qe?(He(t,!0),t.strm.avail_out===0?fn:ui):t.sym_next&&(He(t,!1),t.strm.avail_out===0)?Ie:di};function mt(t,e,r,n,i){this.good_length=t,this.max_lazy=e,this.nice_length=r,this.max_chain=n,this.func=i}var Is=[new mt(0,0,0,0,dh),new mt(4,4,8,4,bc),new mt(4,5,16,8,bc),new mt(4,6,32,32,bc),new mt(4,4,16,16,ii),new mt(8,16,32,32,ii),new mt(8,16,128,128,ii),new mt(8,32,128,256,ii),new mt(32,128,258,1024,ii),new mt(32,258,258,4096,ii)],V1=t=>{t.window_size=2*t.w_size,fr(t.head),t.max_lazy_match=Is[t.level].max_lazy,t.good_match=Is[t.level].good_length,t.nice_match=Is[t.level].nice_length,t.max_chain_length=Is[t.level].max_chain,t.strstart=0,t.block_start=0,t.lookahead=0,t.insert=0,t.match_length=t.prev_length=W-1,t.match_available=0,t.ins_h=0};function G1(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Ro,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(F1*2),this.dyn_dtree=new Uint16Array((2*R1+1)*2),this.bl_tree=new Uint16Array((2*P1+1)*2),fr(this.dyn_ltree),fr(this.dyn_dtree),fr(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(B1+1),this.heap=new Uint16Array(2*Ic+1),fr(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(2*Ic+1),fr(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}var Gs=t=>{if(!t)return 1;let e=t.state;return!e||e.strm!==t||e.status!==oi&&e.status!==Uc&&e.status!==kc&&e.status!==Rc&&e.status!==Pc&&e.status!==Fc&&e.status!==cn&&e.status!==Cs?1:0},uh=t=>{if(Gs(t))return dn(t,gt);t.total_in=t.total_out=0,t.data_type=E1;let e=t.state;return e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=e.wrap===2?Uc:e.wrap?oi:cn,t.adler=e.wrap===2?0:1,e.last_flush=-2,p1(e),pe},fh=t=>{let e=uh(t);return e===pe&&V1(t.state),e},W1=(t,e)=>Gs(t)||t.state.wrap!==2?gt:(t.state.gzhead=e,pe),hh=(t,e,r,n,i,s)=>{if(!t)return gt;let a=1;if(e===v1&&(e=6),n<0?(a=0,n=-n):n>15&&(a=2,n-=16),i<1||i>L1||r!==Ro||n<8||n>15||e<0||e>9||s<0||s>A1||n===8&&a!==1)return dn(t,gt);n===8&&(n=9);let o=new G1;return t.state=o,o.strm=t,o.status=oi,o.wrap=a,o.gzhead=null,o.w_bits=n,o.w_size=1<<o.w_bits,o.w_mask=o.w_size-1,o.hash_bits=i+7,o.hash_size=1<<o.hash_bits,o.hash_mask=o.hash_size-1,o.hash_shift=~~((o.hash_bits+W-1)/W),o.window=new Uint8Array(o.w_size*2),o.head=new Uint16Array(o.hash_size),o.prev=new Uint16Array(o.w_size),o.lit_bufsize=1<<i+6,o.pending_buf_size=o.lit_bufsize*4,o.pending_buf=new Uint8Array(o.pending_buf_size),o.sym_buf=o.lit_bufsize,o.sym_end=(o.lit_bufsize-1)*3,o.level=e,o.strategy=s,o.method=r,fh(t)},X1=(t,e)=>hh(t,e,Ro,T1,C1,M1),K1=(t,e)=>{if(Gs(t)||e>pf||e<0)return t?dn(t,gt):gt;let r=t.state;if(!t.output||t.avail_in!==0&&!t.input||r.status===Cs&&e!==Qe)return dn(t,t.avail_out===0?yc:gt);let n=r.last_flush;if(r.last_flush=e,r.pending!==0){if(Ue(t),t.avail_out===0)return r.last_flush=-1,pe}else if(t.avail_in===0&&yf(e)<=yf(n)&&e!==Qe)return dn(t,yc);if(r.status===Cs&&t.avail_in!==0)return dn(t,yc);if(r.status===oi&&r.wrap===0&&(r.status=cn),r.status===oi){let i=Ro+(r.w_bits-8<<4)<<8,s=-1;if(r.strategy>=So||r.level<2?s=0:r.level<6?s=1:r.level===6?s=2:s=3,i|=s<<6,r.strstart!==0&&(i|=D1),i+=31-i%31,Ts(r,i),r.strstart!==0&&(Ts(r,t.adler>>>16),Ts(r,t.adler&65535)),t.adler=1,r.status=cn,Ue(t),r.pending!==0)return r.last_flush=-1,pe}if(r.status===Uc){if(t.adler=0,Z(r,31),Z(r,139),Z(r,8),r.gzhead)Z(r,(r.gzhead.text?1:0)+(r.gzhead.hcrc?2:0)+(r.gzhead.extra?4:0)+(r.gzhead.name?8:0)+(r.gzhead.comment?16:0)),Z(r,r.gzhead.time&255),Z(r,r.gzhead.time>>8&255),Z(r,r.gzhead.time>>16&255),Z(r,r.gzhead.time>>24&255),Z(r,r.level===9?2:r.strategy>=So||r.level<2?4:0),Z(r,r.gzhead.os&255),r.gzhead.extra&&r.gzhead.extra.length&&(Z(r,r.gzhead.extra.length&255),Z(r,r.gzhead.extra.length>>8&255)),r.gzhead.hcrc&&(t.adler=me(t.adler,r.pending_buf,r.pending,0)),r.gzindex=0,r.status=kc;else if(Z(r,0),Z(r,0),Z(r,0),Z(r,0),Z(r,0),Z(r,r.level===9?2:r.strategy>=So||r.level<2?4:0),Z(r,O1),r.status=cn,Ue(t),r.pending!==0)return r.last_flush=-1,pe}if(r.status===kc){if(r.gzhead.extra){let i=r.pending,s=(r.gzhead.extra.length&65535)-r.gzindex;for(;r.pending+s>r.pending_buf_size;){let o=r.pending_buf_size-r.pending;if(r.pending_buf.set(r.gzhead.extra.subarray(r.gzindex,r.gzindex+o),r.pending),r.pending=r.pending_buf_size,r.gzhead.hcrc&&r.pending>i&&(t.adler=me(t.adler,r.pending_buf,r.pending-i,i)),r.gzindex+=o,Ue(t),r.pending!==0)return r.last_flush=-1,pe;i=0,s-=o}let a=new Uint8Array(r.gzhead.extra);r.pending_buf.set(a.subarray(r.gzindex,r.gzindex+s),r.pending),r.pending+=s,r.gzhead.hcrc&&r.pending>i&&(t.adler=me(t.adler,r.pending_buf,r.pending-i,i)),r.gzindex=0}r.status=Rc}if(r.status===Rc){if(r.gzhead.name){let i=r.pending,s;do{if(r.pending===r.pending_buf_size){if(r.gzhead.hcrc&&r.pending>i&&(t.adler=me(t.adler,r.pending_buf,r.pending-i,i)),Ue(t),r.pending!==0)return r.last_flush=-1,pe;i=0}r.gzindex<r.gzhead.name.length?s=r.gzhead.name.charCodeAt(r.gzindex++)&255:s=0,Z(r,s)}while(s!==0);r.gzhead.hcrc&&r.pending>i&&(t.adler=me(t.adler,r.pending_buf,r.pending-i,i)),r.gzindex=0}r.status=Pc}if(r.status===Pc){if(r.gzhead.comment){let i=r.pending,s;do{if(r.pending===r.pending_buf_size){if(r.gzhead.hcrc&&r.pending>i&&(t.adler=me(t.adler,r.pending_buf,r.pending-i,i)),Ue(t),r.pending!==0)return r.last_flush=-1,pe;i=0}r.gzindex<r.gzhead.comment.length?s=r.gzhead.comment.charCodeAt(r.gzindex++)&255:s=0,Z(r,s)}while(s!==0);r.gzhead.hcrc&&r.pending>i&&(t.adler=me(t.adler,r.pending_buf,r.pending-i,i))}r.status=Fc}if(r.status===Fc){if(r.gzhead.hcrc){if(r.pending+2>r.pending_buf_size&&(Ue(t),r.pending!==0))return r.last_flush=-1,pe;Z(r,t.adler&255),Z(r,t.adler>>8&255),t.adler=0}if(r.status=cn,Ue(t),r.pending!==0)return r.last_flush=-1,pe}if(t.avail_in!==0||r.lookahead!==0||e!==pr&&r.status!==Cs){let i=r.level===0?dh(r,e):r.strategy===So?H1(r,e):r.strategy===S1?U1(r,e):Is[r.level].func(r,e);if((i===fn||i===ui)&&(r.status=Cs),i===Ie||i===fn)return t.avail_out===0&&(r.last_flush=-1),pe;if(i===di&&(e===b1?y1(r):e!==pf&&(Cc(r,0,0,!1),e===x1&&(fr(r.head),r.lookahead===0&&(r.strstart=0,r.block_start=0,r.insert=0))),Ue(t),t.avail_out===0))return r.last_flush=-1,pe}return e!==Qe?pe:r.wrap<=0?gf:(r.wrap===2?(Z(r,t.adler&255),Z(r,t.adler>>8&255),Z(r,t.adler>>16&255),Z(r,t.adler>>24&255),Z(r,t.total_in&255),Z(r,t.total_in>>8&255),Z(r,t.total_in>>16&255),Z(r,t.total_in>>24&255)):(Ts(r,t.adler>>>16),Ts(r,t.adler&65535)),Ue(t),r.wrap>0&&(r.wrap=-r.wrap),r.pending!==0?pe:gf)},$1=t=>{if(Gs(t))return gt;let e=t.state.status;return t.state=null,e===cn?dn(t,_1):pe},Z1=(t,e)=>{let r=e.length;if(Gs(t))return gt;let n=t.state,i=n.wrap;if(i===2||i===1&&n.status!==oi||n.lookahead)return gt;if(i===1&&(t.adler=zs(t.adler,e,r,0)),n.wrap=0,r>=n.w_size){i===0&&(fr(n.head),n.strstart=0,n.block_start=0,n.insert=0);let d=new Uint8Array(n.w_size);d.set(e.subarray(r-n.w_size,r),0),e=d,r=n.w_size}let s=t.avail_in,a=t.next_in,o=t.input;for(t.avail_in=r,t.next_in=0,t.input=e,li(n);n.lookahead>=W;){let d=n.strstart,l=n.lookahead-(W-1);do n.ins_h=gr(n,n.ins_h,n.window[d+W-1]),n.prev[d&n.w_mask]=n.head[n.ins_h],n.head[n.ins_h]=d,d++;while(--l);n.strstart=d,n.lookahead=W-1,li(n)}return n.strstart+=n.lookahead,n.block_start=n.strstart,n.insert=n.lookahead,n.lookahead=0,n.match_length=n.prev_length=W-1,n.match_available=0,t.next_in=a,t.input=o,t.avail_in=s,n.wrap=i,pe},Y1=X1,q1=hh,j1=fh,Q1=uh,J1=W1,ey=K1,ty=$1,ry=Z1,ny="pako deflate (from Nodeca project)",Rs={deflateInit:Y1,deflateInit2:q1,deflateReset:j1,deflateResetKeep:Q1,deflateSetHeader:J1,deflate:ey,deflateEnd:ty,deflateSetDictionary:ry,deflateInfo:ny},iy=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),sy=function(t){let e=Array.prototype.slice.call(arguments,1);for(;e.length;){let r=e.shift();if(r){if(typeof r!="object")throw new TypeError(r+"must be non-object");for(let n in r)iy(r,n)&&(t[n]=r[n])}}return t},ay=t=>{let e=0;for(let n=0,i=t.length;n<i;n++)e+=t[n].length;let r=new Uint8Array(e);for(let n=0,i=0,s=t.length;n<s;n++){let a=t[n];r.set(a,i),i+=a.length}return r},Po={assign:sy,flattenChunks:ay},mh=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch{mh=!1}var Ns=new Uint8Array(256);for(let t=0;t<256;t++)Ns[t]=t>=252?6:t>=248?5:t>=240?4:t>=224?3:t>=192?2:1;Ns[254]=Ns[254]=1;var oy=t=>{if(typeof TextEncoder=="function"&&TextEncoder.prototype.encode)return new TextEncoder().encode(t);let e,r,n,i,s,a=t.length,o=0;for(i=0;i<a;i++)r=t.charCodeAt(i),(r&64512)===55296&&i+1<a&&(n=t.charCodeAt(i+1),(n&64512)===56320&&(r=65536+(r-55296<<10)+(n-56320),i++)),o+=r<128?1:r<2048?2:r<65536?3:4;for(e=new Uint8Array(o),s=0,i=0;s<o;i++)r=t.charCodeAt(i),(r&64512)===55296&&i+1<a&&(n=t.charCodeAt(i+1),(n&64512)===56320&&(r=65536+(r-55296<<10)+(n-56320),i++)),r<128?e[s++]=r:r<2048?(e[s++]=192|r>>>6,e[s++]=128|r&63):r<65536?(e[s++]=224|r>>>12,e[s++]=128|r>>>6&63,e[s++]=128|r&63):(e[s++]=240|r>>>18,e[s++]=128|r>>>12&63,e[s++]=128|r>>>6&63,e[s++]=128|r&63);return e},ly=(t,e)=>{if(e<65534&&t.subarray&&mh)return String.fromCharCode.apply(null,t.length===e?t:t.subarray(0,e));let r="";for(let n=0;n<e;n++)r+=String.fromCharCode(t[n]);return r},cy=(t,e)=>{let r=e||t.length;if(typeof TextDecoder=="function"&&TextDecoder.prototype.decode)return new TextDecoder().decode(t.subarray(0,e));let n,i,s=new Array(r*2);for(i=0,n=0;n<r;){let a=t[n++];if(a<128){s[i++]=a;continue}let o=Ns[a];if(o>4){s[i++]=65533,n+=o-1;continue}for(a&=o===2?31:o===3?15:7;o>1&&n<r;)a=a<<6|t[n++]&63,o--;if(o>1){s[i++]=65533;continue}a<65536?s[i++]=a:(a-=65536,s[i++]=55296|a>>10&1023,s[i++]=56320|a&1023)}return ly(s,i)},dy=(t,e)=>{e=e||t.length,e>t.length&&(e=t.length);let r=e-1;for(;r>=0&&(t[r]&192)===128;)r--;return r<0||r===0?e:r+Ns[t[r]]>e?r:e},Us={string2buf:oy,buf2string:cy,utf8border:dy};function uy(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}var ph=uy,gh=Object.prototype.toString,{Z_NO_FLUSH:fy,Z_SYNC_FLUSH:hy,Z_FULL_FLUSH:my,Z_FINISH:py,Z_OK:Io,Z_STREAM_END:gy,Z_DEFAULT_COMPRESSION:yy,Z_DEFAULT_STRATEGY:by,Z_DEFLATED:xy}=mn;function Ws(t){this.options=Po.assign({level:yy,method:xy,chunkSize:16384,windowBits:15,memLevel:8,strategy:by},t||{});let e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new ph,this.strm.avail_out=0;let r=Rs.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(r!==Io)throw new Error(un[r]);if(e.header&&Rs.deflateSetHeader(this.strm,e.header),e.dictionary){let n;if(typeof e.dictionary=="string"?n=Us.string2buf(e.dictionary):gh.call(e.dictionary)==="[object ArrayBuffer]"?n=new Uint8Array(e.dictionary):n=e.dictionary,r=Rs.deflateSetDictionary(this.strm,n),r!==Io)throw new Error(un[r]);this._dict_set=!0}}Ws.prototype.push=function(t,e){let r=this.strm,n=this.options.chunkSize,i,s;if(this.ended)return!1;for(e===~~e?s=e:s=e===!0?py:fy,typeof t=="string"?r.input=Us.string2buf(t):gh.call(t)==="[object ArrayBuffer]"?r.input=new Uint8Array(t):r.input=t,r.next_in=0,r.avail_in=r.input.length;;){if(r.avail_out===0&&(r.output=new Uint8Array(n),r.next_out=0,r.avail_out=n),(s===hy||s===my)&&r.avail_out<=6){this.onData(r.output.subarray(0,r.next_out)),r.avail_out=0;continue}if(i=Rs.deflate(r,s),i===gy)return r.next_out>0&&this.onData(r.output.subarray(0,r.next_out)),i=Rs.deflateEnd(this.strm),this.onEnd(i),this.ended=!0,i===Io;if(r.avail_out===0){this.onData(r.output);continue}if(s>0&&r.next_out>0){this.onData(r.output.subarray(0,r.next_out)),r.avail_out=0;continue}if(r.avail_in===0)break}return!0};Ws.prototype.onData=function(t){this.chunks.push(t)};Ws.prototype.onEnd=function(t){t===Io&&(this.result=Po.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};function Hc(t,e){let r=new Ws(e);if(r.push(t,!0),r.err)throw r.msg||un[r.err];return r.result}function _y(t,e){return e=e||{},e.raw=!0,Hc(t,e)}function vy(t,e){return e=e||{},e.gzip=!0,Hc(t,e)}var wy=Ws,Sy=Hc,Ay=_y,My=vy,Ey=mn,Ly={Deflate:wy,deflate:Sy,deflateRaw:Ay,gzip:My,constants:Ey},Ao=16209,Ty=16191,Cy=function(e,r){let n,i,s,a,o,d,l,c,f,u,h,m,g,p,y,_,x,b,v,S,w,L,T,A,I=e.state;n=e.next_in,T=e.input,i=n+(e.avail_in-5),s=e.next_out,A=e.output,a=s-(r-e.avail_out),o=s+(e.avail_out-257),d=I.dmax,l=I.wsize,c=I.whave,f=I.wnext,u=I.window,h=I.hold,m=I.bits,g=I.lencode,p=I.distcode,y=(1<<I.lenbits)-1,_=(1<<I.distbits)-1;e:do{m<15&&(h+=T[n++]<<m,m+=8,h+=T[n++]<<m,m+=8),x=g[h&y];t:for(;;){if(b=x>>>24,h>>>=b,m-=b,b=x>>>16&255,b===0)A[s++]=x&65535;else if(b&16){v=x&65535,b&=15,b&&(m<b&&(h+=T[n++]<<m,m+=8),v+=h&(1<<b)-1,h>>>=b,m-=b),m<15&&(h+=T[n++]<<m,m+=8,h+=T[n++]<<m,m+=8),x=p[h&_];r:for(;;){if(b=x>>>24,h>>>=b,m-=b,b=x>>>16&255,b&16){if(S=x&65535,b&=15,m<b&&(h+=T[n++]<<m,m+=8,m<b&&(h+=T[n++]<<m,m+=8)),S+=h&(1<<b)-1,S>d){e.msg="invalid distance too far back",I.mode=Ao;break e}if(h>>>=b,m-=b,b=s-a,S>b){if(b=S-b,b>c&&I.sane){e.msg="invalid distance too far back",I.mode=Ao;break e}if(w=0,L=u,f===0){if(w+=l-b,b<v){v-=b;do A[s++]=u[w++];while(--b);w=s-S,L=A}}else if(f<b){if(w+=l+f-b,b-=f,b<v){v-=b;do A[s++]=u[w++];while(--b);if(w=0,f<v){b=f,v-=b;do A[s++]=u[w++];while(--b);w=s-S,L=A}}}else if(w+=f-b,b<v){v-=b;do A[s++]=u[w++];while(--b);w=s-S,L=A}for(;v>2;)A[s++]=L[w++],A[s++]=L[w++],A[s++]=L[w++],v-=3;v&&(A[s++]=L[w++],v>1&&(A[s++]=L[w++]))}else{w=s-S;do A[s++]=A[w++],A[s++]=A[w++],A[s++]=A[w++],v-=3;while(v>2);v&&(A[s++]=A[w++],v>1&&(A[s++]=A[w++]))}}else if((b&64)===0){x=p[(x&65535)+(h&(1<<b)-1)];continue r}else{e.msg="invalid distance code",I.mode=Ao;break e}break}}else if((b&64)===0){x=g[(x&65535)+(h&(1<<b)-1)];continue t}else if(b&32){I.mode=Ty;break e}else{e.msg="invalid literal/length code",I.mode=Ao;break e}break}}while(n<i&&s<o);v=m>>3,n-=v,m-=v<<3,h&=(1<<m)-1,e.next_in=n,e.next_out=s,e.avail_in=n<i?5+(i-n):5-(n-i),e.avail_out=s<o?257+(o-s):257-(s-o),I.hold=h,I.bits=m},si=15,bf=852,xf=592,_f=0,xc=1,vf=2,Iy=new Uint16Array([3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0]),ky=new Uint8Array([16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78]),Ry=new Uint16Array([1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0]),Py=new Uint8Array([16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64]),Fy=(t,e,r,n,i,s,a,o)=>{let d=o.bits,l=0,c=0,f=0,u=0,h=0,m=0,g=0,p=0,y=0,_=0,x,b,v,S,w,L=null,T,A=new Uint16Array(si+1),I=new Uint16Array(si+1),R=null,F,k,V;for(l=0;l<=si;l++)A[l]=0;for(c=0;c<n;c++)A[e[r+c]]++;for(h=d,u=si;u>=1&&A[u]===0;u--);if(h>u&&(h=u),u===0)return i[s++]=1<<24|64<<16|0,i[s++]=1<<24|64<<16|0,o.bits=1,0;for(f=1;f<u&&A[f]===0;f++);for(h<f&&(h=f),p=1,l=1;l<=si;l++)if(p<<=1,p-=A[l],p<0)return-1;if(p>0&&(t===_f||u!==1))return-1;for(I[1]=0,l=1;l<si;l++)I[l+1]=I[l]+A[l];for(c=0;c<n;c++)e[r+c]!==0&&(a[I[e[r+c]]++]=c);if(t===_f?(L=R=a,T=20):t===xc?(L=Iy,R=ky,T=257):(L=Ry,R=Py,T=0),_=0,c=0,l=f,w=s,m=h,g=0,v=-1,y=1<<h,S=y-1,t===xc&&y>bf||t===vf&&y>xf)return 1;for(;;){F=l-g,a[c]+1<T?(k=0,V=a[c]):a[c]>=T?(k=R[a[c]-T],V=L[a[c]-T]):(k=96,V=0),x=1<<l-g,b=1<<m,f=b;do b-=x,i[w+(_>>g)+b]=F<<24|k<<16|V|0;while(b!==0);for(x=1<<l-1;_&x;)x>>=1;if(x!==0?(_&=x-1,_+=x):_=0,c++,--A[l]===0){if(l===u)break;l=e[r+a[c]]}if(l>h&&(_&S)!==v){for(g===0&&(g=h),w+=f,m=l-g,p=1<<m;m+g<u&&(p-=A[m+g],!(p<=0));)m++,p<<=1;if(y+=1<<m,t===xc&&y>bf||t===vf&&y>xf)return 1;v=_&S,i[v]=h<<24|m<<16|w-s|0}}return _!==0&&(i[w+_]=l-g<<24|64<<16|0),o.bits=h,0},Ps=Fy,By=0,yh=1,bh=2,{Z_FINISH:wf,Z_BLOCK:Dy,Z_TREES:Mo,Z_OK:hn,Z_STREAM_END:Oy,Z_NEED_DICT:zy,Z_STREAM_ERROR:Je,Z_DATA_ERROR:xh,Z_MEM_ERROR:_h,Z_BUF_ERROR:Ny,Z_DEFLATED:Sf}=mn,Fo=16180,Af=16181,Mf=16182,Ef=16183,Lf=16184,Tf=16185,Cf=16186,If=16187,kf=16188,Rf=16189,ko=16190,zt=16191,_c=16192,Pf=16193,vc=16194,Ff=16195,Bf=16196,Df=16197,Of=16198,Eo=16199,Lo=16200,zf=16201,Nf=16202,Uf=16203,Hf=16204,Vf=16205,wc=16206,Gf=16207,Wf=16208,ie=16209,vh=16210,wh=16211,Uy=852,Hy=592,Vy=15,Gy=Vy,Xf=t=>(t>>>24&255)+(t>>>8&65280)+((t&65280)<<8)+((t&255)<<24);function Wy(){this.strm=null,this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}var pn=t=>{if(!t)return 1;let e=t.state;return!e||e.strm!==t||e.mode<Fo||e.mode>wh?1:0},Sh=t=>{if(pn(t))return Je;let e=t.state;return t.total_in=t.total_out=e.total=0,t.msg="",e.wrap&&(t.adler=e.wrap&1),e.mode=Fo,e.last=0,e.havedict=0,e.flags=-1,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new Int32Array(Uy),e.distcode=e.distdyn=new Int32Array(Hy),e.sane=1,e.back=-1,hn},Ah=t=>{if(pn(t))return Je;let e=t.state;return e.wsize=0,e.whave=0,e.wnext=0,Sh(t)},Mh=(t,e)=>{let r;if(pn(t))return Je;let n=t.state;return e<0?(r=0,e=-e):(r=(e>>4)+5,e<48&&(e&=15)),e&&(e<8||e>15)?Je:(n.window!==null&&n.wbits!==e&&(n.window=null),n.wrap=r,n.wbits=e,Ah(t))},Eh=(t,e)=>{if(!t)return Je;let r=new Wy;t.state=r,r.strm=t,r.window=null,r.mode=Fo;let n=Mh(t,e);return n!==hn&&(t.state=null),n},Xy=t=>Eh(t,Gy),Kf=!0,Sc,Ac,Ky=t=>{if(Kf){Sc=new Int32Array(512),Ac=new Int32Array(32);let e=0;for(;e<144;)t.lens[e++]=8;for(;e<256;)t.lens[e++]=9;for(;e<280;)t.lens[e++]=7;for(;e<288;)t.lens[e++]=8;for(Ps(yh,t.lens,0,288,Sc,0,t.work,{bits:9}),e=0;e<32;)t.lens[e++]=5;Ps(bh,t.lens,0,32,Ac,0,t.work,{bits:5}),Kf=!1}t.lencode=Sc,t.lenbits=9,t.distcode=Ac,t.distbits=5},Lh=(t,e,r,n)=>{let i,s=t.state;return s.window===null&&(s.wsize=1<<s.wbits,s.wnext=0,s.whave=0,s.window=new Uint8Array(s.wsize)),n>=s.wsize?(s.window.set(e.subarray(r-s.wsize,r),0),s.wnext=0,s.whave=s.wsize):(i=s.wsize-s.wnext,i>n&&(i=n),s.window.set(e.subarray(r-n,r-n+i),s.wnext),n-=i,n?(s.window.set(e.subarray(r-n,r),0),s.wnext=n,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave<s.wsize&&(s.whave+=i))),0},$y=(t,e)=>{let r,n,i,s,a,o,d,l,c,f,u,h,m,g,p=0,y,_,x,b,v,S,w,L,T=new Uint8Array(4),A,I,R=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(pn(t)||!t.output||!t.input&&t.avail_in!==0)return Je;r=t.state,r.mode===zt&&(r.mode=_c),a=t.next_out,i=t.output,d=t.avail_out,s=t.next_in,n=t.input,o=t.avail_in,l=r.hold,c=r.bits,f=o,u=d,L=hn;e:for(;;)switch(r.mode){case Fo:if(r.wrap===0){r.mode=_c;break}for(;c<16;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}if(r.wrap&2&&l===35615){r.wbits===0&&(r.wbits=15),r.check=0,T[0]=l&255,T[1]=l>>>8&255,r.check=me(r.check,T,2,0),l=0,c=0,r.mode=Af;break}if(r.head&&(r.head.done=!1),!(r.wrap&1)||(((l&255)<<8)+(l>>8))%31){t.msg="incorrect header check",r.mode=ie;break}if((l&15)!==Sf){t.msg="unknown compression method",r.mode=ie;break}if(l>>>=4,c-=4,w=(l&15)+8,r.wbits===0&&(r.wbits=w),w>15||w>r.wbits){t.msg="invalid window size",r.mode=ie;break}r.dmax=1<<r.wbits,r.flags=0,t.adler=r.check=1,r.mode=l&512?Rf:zt,l=0,c=0;break;case Af:for(;c<16;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}if(r.flags=l,(r.flags&255)!==Sf){t.msg="unknown compression method",r.mode=ie;break}if(r.flags&57344){t.msg="unknown header flags set",r.mode=ie;break}r.head&&(r.head.text=l>>8&1),r.flags&512&&r.wrap&4&&(T[0]=l&255,T[1]=l>>>8&255,r.check=me(r.check,T,2,0)),l=0,c=0,r.mode=Mf;case Mf:for(;c<32;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}r.head&&(r.head.time=l),r.flags&512&&r.wrap&4&&(T[0]=l&255,T[1]=l>>>8&255,T[2]=l>>>16&255,T[3]=l>>>24&255,r.check=me(r.check,T,4,0)),l=0,c=0,r.mode=Ef;case Ef:for(;c<16;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}r.head&&(r.head.xflags=l&255,r.head.os=l>>8),r.flags&512&&r.wrap&4&&(T[0]=l&255,T[1]=l>>>8&255,r.check=me(r.check,T,2,0)),l=0,c=0,r.mode=Lf;case Lf:if(r.flags&1024){for(;c<16;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}r.length=l,r.head&&(r.head.extra_len=l),r.flags&512&&r.wrap&4&&(T[0]=l&255,T[1]=l>>>8&255,r.check=me(r.check,T,2,0)),l=0,c=0}else r.head&&(r.head.extra=null);r.mode=Tf;case Tf:if(r.flags&1024&&(h=r.length,h>o&&(h=o),h&&(r.head&&(w=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Uint8Array(r.head.extra_len)),r.head.extra.set(n.subarray(s,s+h),w)),r.flags&512&&r.wrap&4&&(r.check=me(r.check,n,h,s)),o-=h,s+=h,r.length-=h),r.length))break e;r.length=0,r.mode=Cf;case Cf:if(r.flags&2048){if(o===0)break e;h=0;do w=n[s+h++],r.head&&w&&r.length<65536&&(r.head.name+=String.fromCharCode(w));while(w&&h<o);if(r.flags&512&&r.wrap&4&&(r.check=me(r.check,n,h,s)),o-=h,s+=h,w)break e}else r.head&&(r.head.name=null);r.length=0,r.mode=If;case If:if(r.flags&4096){if(o===0)break e;h=0;do w=n[s+h++],r.head&&w&&r.length<65536&&(r.head.comment+=String.fromCharCode(w));while(w&&h<o);if(r.flags&512&&r.wrap&4&&(r.check=me(r.check,n,h,s)),o-=h,s+=h,w)break e}else r.head&&(r.head.comment=null);r.mode=kf;case kf:if(r.flags&512){for(;c<16;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}if(r.wrap&4&&l!==(r.check&65535)){t.msg="header crc mismatch",r.mode=ie;break}l=0,c=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),t.adler=r.check=0,r.mode=zt;break;case Rf:for(;c<32;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}t.adler=r.check=Xf(l),l=0,c=0,r.mode=ko;case ko:if(r.havedict===0)return t.next_out=a,t.avail_out=d,t.next_in=s,t.avail_in=o,r.hold=l,r.bits=c,zy;t.adler=r.check=1,r.mode=zt;case zt:if(e===Dy||e===Mo)break e;case _c:if(r.last){l>>>=c&7,c-=c&7,r.mode=wc;break}for(;c<3;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}switch(r.last=l&1,l>>>=1,c-=1,l&3){case 0:r.mode=Pf;break;case 1:if(Ky(r),r.mode=Eo,e===Mo){l>>>=2,c-=2;break e}break;case 2:r.mode=Bf;break;case 3:t.msg="invalid block type",r.mode=ie}l>>>=2,c-=2;break;case Pf:for(l>>>=c&7,c-=c&7;c<32;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}if((l&65535)!==(l>>>16^65535)){t.msg="invalid stored block lengths",r.mode=ie;break}if(r.length=l&65535,l=0,c=0,r.mode=vc,e===Mo)break e;case vc:r.mode=Ff;case Ff:if(h=r.length,h){if(h>o&&(h=o),h>d&&(h=d),h===0)break e;i.set(n.subarray(s,s+h),a),o-=h,s+=h,d-=h,a+=h,r.length-=h;break}r.mode=zt;break;case Bf:for(;c<14;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}if(r.nlen=(l&31)+257,l>>>=5,c-=5,r.ndist=(l&31)+1,l>>>=5,c-=5,r.ncode=(l&15)+4,l>>>=4,c-=4,r.nlen>286||r.ndist>30){t.msg="too many length or distance symbols",r.mode=ie;break}r.have=0,r.mode=Df;case Df:for(;r.have<r.ncode;){for(;c<3;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}r.lens[R[r.have++]]=l&7,l>>>=3,c-=3}for(;r.have<19;)r.lens[R[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,A={bits:r.lenbits},L=Ps(By,r.lens,0,19,r.lencode,0,r.work,A),r.lenbits=A.bits,L){t.msg="invalid code lengths set",r.mode=ie;break}r.have=0,r.mode=Of;case Of:for(;r.have<r.nlen+r.ndist;){for(;p=r.lencode[l&(1<<r.lenbits)-1],y=p>>>24,_=p>>>16&255,x=p&65535,!(y<=c);){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}if(x<16)l>>>=y,c-=y,r.lens[r.have++]=x;else{if(x===16){for(I=y+2;c<I;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}if(l>>>=y,c-=y,r.have===0){t.msg="invalid bit length repeat",r.mode=ie;break}w=r.lens[r.have-1],h=3+(l&3),l>>>=2,c-=2}else if(x===17){for(I=y+3;c<I;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}l>>>=y,c-=y,w=0,h=3+(l&7),l>>>=3,c-=3}else{for(I=y+7;c<I;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}l>>>=y,c-=y,w=0,h=11+(l&127),l>>>=7,c-=7}if(r.have+h>r.nlen+r.ndist){t.msg="invalid bit length repeat",r.mode=ie;break}for(;h--;)r.lens[r.have++]=w}}if(r.mode===ie)break;if(r.lens[256]===0){t.msg="invalid code -- missing end-of-block",r.mode=ie;break}if(r.lenbits=9,A={bits:r.lenbits},L=Ps(yh,r.lens,0,r.nlen,r.lencode,0,r.work,A),r.lenbits=A.bits,L){t.msg="invalid literal/lengths set",r.mode=ie;break}if(r.distbits=6,r.distcode=r.distdyn,A={bits:r.distbits},L=Ps(bh,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,A),r.distbits=A.bits,L){t.msg="invalid distances set",r.mode=ie;break}if(r.mode=Eo,e===Mo)break e;case Eo:r.mode=Lo;case Lo:if(o>=6&&d>=258){t.next_out=a,t.avail_out=d,t.next_in=s,t.avail_in=o,r.hold=l,r.bits=c,Cy(t,u),a=t.next_out,i=t.output,d=t.avail_out,s=t.next_in,n=t.input,o=t.avail_in,l=r.hold,c=r.bits,r.mode===zt&&(r.back=-1);break}for(r.back=0;p=r.lencode[l&(1<<r.lenbits)-1],y=p>>>24,_=p>>>16&255,x=p&65535,!(y<=c);){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}if(_&&(_&240)===0){for(b=y,v=_,S=x;p=r.lencode[S+((l&(1<<b+v)-1)>>b)],y=p>>>24,_=p>>>16&255,x=p&65535,!(b+y<=c);){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}l>>>=b,c-=b,r.back+=b}if(l>>>=y,c-=y,r.back+=y,r.length=x,_===0){r.mode=Vf;break}if(_&32){r.back=-1,r.mode=zt;break}if(_&64){t.msg="invalid literal/length code",r.mode=ie;break}r.extra=_&15,r.mode=zf;case zf:if(r.extra){for(I=r.extra;c<I;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}r.length+=l&(1<<r.extra)-1,l>>>=r.extra,c-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=Nf;case Nf:for(;p=r.distcode[l&(1<<r.distbits)-1],y=p>>>24,_=p>>>16&255,x=p&65535,!(y<=c);){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}if((_&240)===0){for(b=y,v=_,S=x;p=r.distcode[S+((l&(1<<b+v)-1)>>b)],y=p>>>24,_=p>>>16&255,x=p&65535,!(b+y<=c);){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}l>>>=b,c-=b,r.back+=b}if(l>>>=y,c-=y,r.back+=y,_&64){t.msg="invalid distance code",r.mode=ie;break}r.offset=x,r.extra=_&15,r.mode=Uf;case Uf:if(r.extra){for(I=r.extra;c<I;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}r.offset+=l&(1<<r.extra)-1,l>>>=r.extra,c-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){t.msg="invalid distance too far back",r.mode=ie;break}r.mode=Hf;case Hf:if(d===0)break e;if(h=u-d,r.offset>h){if(h=r.offset-h,h>r.whave&&r.sane){t.msg="invalid distance too far back",r.mode=ie;break}h>r.wnext?(h-=r.wnext,m=r.wsize-h):m=r.wnext-h,h>r.length&&(h=r.length),g=r.window}else g=i,m=a-r.offset,h=r.length;h>d&&(h=d),d-=h,r.length-=h;do i[a++]=g[m++];while(--h);r.length===0&&(r.mode=Lo);break;case Vf:if(d===0)break e;i[a++]=r.length,d--,r.mode=Lo;break;case wc:if(r.wrap){for(;c<32;){if(o===0)break e;o--,l|=n[s++]<<c,c+=8}if(u-=d,t.total_out+=u,r.total+=u,r.wrap&4&&u&&(t.adler=r.check=r.flags?me(r.check,i,u,a-u):zs(r.check,i,u,a-u)),u=d,r.wrap&4&&(r.flags?l:Xf(l))!==r.check){t.msg="incorrect data check",r.mode=ie;break}l=0,c=0}r.mode=Gf;case Gf:if(r.wrap&&r.flags){for(;c<32;){if(o===0)break e;o--,l+=n[s++]<<c,c+=8}if(r.wrap&4&&l!==(r.total&4294967295)){t.msg="incorrect length check",r.mode=ie;break}l=0,c=0}r.mode=Wf;case Wf:L=Oy;break e;case ie:L=xh;break e;case vh:return _h;case wh:default:return Je}return t.next_out=a,t.avail_out=d,t.next_in=s,t.avail_in=o,r.hold=l,r.bits=c,(r.wsize||u!==t.avail_out&&r.mode<ie&&(r.mode<wc||e!==wf))&&Lh(t,t.output,t.next_out,u-t.avail_out),f-=t.avail_in,u-=t.avail_out,t.total_in+=f,t.total_out+=u,r.total+=u,r.wrap&4&&u&&(t.adler=r.check=r.flags?me(r.check,i,u,t.next_out-u):zs(r.check,i,u,t.next_out-u)),t.data_type=r.bits+(r.last?64:0)+(r.mode===zt?128:0)+(r.mode===Eo||r.mode===vc?256:0),(f===0&&u===0||e===wf)&&L===hn&&(L=Ny),L},Zy=t=>{if(pn(t))return Je;let e=t.state;return e.window&&(e.window=null),t.state=null,hn},Yy=(t,e)=>{if(pn(t))return Je;let r=t.state;return(r.wrap&2)===0?Je:(r.head=e,e.done=!1,hn)},qy=(t,e)=>{let r=e.length,n,i,s;return pn(t)||(n=t.state,n.wrap!==0&&n.mode!==ko)?Je:n.mode===ko&&(i=1,i=zs(i,e,r,0),i!==n.check)?xh:(s=Lh(t,e,r,r),s?(n.mode=vh,_h):(n.havedict=1,hn))},jy=Ah,Qy=Mh,Jy=Sh,eb=Xy,tb=Eh,rb=$y,nb=Zy,ib=Yy,sb=qy,ab="pako inflate (from Nodeca project)",Ut={inflateReset:jy,inflateReset2:Qy,inflateResetKeep:Jy,inflateInit:eb,inflateInit2:tb,inflate:rb,inflateEnd:nb,inflateGetHeader:ib,inflateSetDictionary:sb,inflateInfo:ab};function ob(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}var lb=ob,Th=Object.prototype.toString,{Z_NO_FLUSH:cb,Z_FINISH:db,Z_OK:Hs,Z_STREAM_END:Mc,Z_NEED_DICT:Ec,Z_STREAM_ERROR:ub,Z_DATA_ERROR:$f,Z_MEM_ERROR:fb}=mn;function Xs(t){this.options=Po.assign({chunkSize:1024*64,windowBits:15,to:""},t||{});let e=this.options;e.raw&&e.windowBits>=0&&e.windowBits<16&&(e.windowBits=-e.windowBits,e.windowBits===0&&(e.windowBits=-15)),e.windowBits>=0&&e.windowBits<16&&!(t&&t.windowBits)&&(e.windowBits+=32),e.windowBits>15&&e.windowBits<48&&(e.windowBits&15)===0&&(e.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new ph,this.strm.avail_out=0;let r=Ut.inflateInit2(this.strm,e.windowBits);if(r!==Hs)throw new Error(un[r]);if(this.header=new lb,Ut.inflateGetHeader(this.strm,this.header),e.dictionary&&(typeof e.dictionary=="string"?e.dictionary=Us.string2buf(e.dictionary):Th.call(e.dictionary)==="[object ArrayBuffer]"&&(e.dictionary=new Uint8Array(e.dictionary)),e.raw&&(r=Ut.inflateSetDictionary(this.strm,e.dictionary),r!==Hs)))throw new Error(un[r])}Xs.prototype.push=function(t,e){let r=this.strm,n=this.options.chunkSize,i=this.options.dictionary,s,a,o;if(this.ended)return!1;for(e===~~e?a=e:a=e===!0?db:cb,Th.call(t)==="[object ArrayBuffer]"?r.input=new Uint8Array(t):r.input=t,r.next_in=0,r.avail_in=r.input.length;;){for(r.avail_out===0&&(r.output=new Uint8Array(n),r.next_out=0,r.avail_out=n),s=Ut.inflate(r,a),s===Ec&&i&&(s=Ut.inflateSetDictionary(r,i),s===Hs?s=Ut.inflate(r,a):s===$f&&(s=Ec));r.avail_in>0&&s===Mc&&r.state.wrap>0&&t[r.next_in]!==0;)Ut.inflateReset(r),s=Ut.inflate(r,a);switch(s){case ub:case $f:case Ec:case fb:return this.onEnd(s),this.ended=!0,!1}if(o=r.avail_out,r.next_out&&(r.avail_out===0||s===Mc))if(this.options.to==="string"){let d=Us.utf8border(r.output,r.next_out),l=r.next_out-d,c=Us.buf2string(r.output,d);r.next_out=l,r.avail_out=n-l,l&&r.output.set(r.output.subarray(d,d+l),0),this.onData(c)}else this.onData(r.output.length===r.next_out?r.output:r.output.subarray(0,r.next_out));if(!(s===Hs&&o===0)){if(s===Mc)return s=Ut.inflateEnd(this.strm),this.onEnd(s),this.ended=!0,!0;if(r.avail_in===0)break}}return!0};Xs.prototype.onData=function(t){this.chunks.push(t)};Xs.prototype.onEnd=function(t){t===Hs&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=Po.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};function Vc(t,e){let r=new Xs(e);if(r.push(t),r.err)throw r.msg||un[r.err];return r.result}function hb(t,e){return e=e||{},e.raw=!0,Vc(t,e)}var mb=Xs,pb=Vc,gb=hb,yb=Vc,bb=mn,xb={Inflate:mb,inflate:pb,inflateRaw:gb,ungzip:yb,constants:bb},{Deflate:_b,deflate:vb,deflateRaw:wb,gzip:Sb}=Ly,{Inflate:Ab,inflate:Mb,inflateRaw:Eb,ungzip:Lb}=xb,Tb=_b,Cb=vb,Ib=wb,kb=Sb,Rb=Ab,Pb=Mb,Fb=Eb,Bb=Lb,Db=mn,Gc={Deflate:Tb,deflate:Cb,deflateRaw:Ib,gzip:kb,Inflate:Rb,inflate:Pb,inflateRaw:Fb,ungzip:Bb,constants:Db};var fi=class fi{constructor(e=fi.INITIAL_SIZE){this.buffer=new Uint8Array(e),this.readOffset=0,this.writeOffset=0}append(e){let r=e instanceof Uint8Array?e:new Uint8Array(e),n=this.writeOffset+r.length;n>this.buffer.length&&this.grow(n),this.buffer.set(r,this.writeOffset),this.writeOffset+=r.length}hasBytes(e){return this.writeOffset-this.readOffset>=e}available(){return this.writeOffset-this.readOffset}readByte(){if(!this.hasBytes(1))throw new Error("Buffer underflow");return this.buffer[this.readOffset++]}readShort(){if(!this.hasBytes(2))throw new Error("Buffer underflow");let e=this.buffer[this.readOffset]|this.buffer[this.readOffset+1]<<8;return this.readOffset+=2,e>32767?e-65536:e}readLong(){if(!this.hasBytes(4))throw new Error("Buffer underflow");let e=this.buffer[this.readOffset]|this.buffer[this.readOffset+1]<<8|this.buffer[this.readOffset+2]<<16|this.buffer[this.readOffset+3]<<24;return this.readOffset+=4,e}readFloat(){if(!this.hasBytes(4))throw new Error("Buffer underflow");let r=new DataView(this.buffer.buffer,this.buffer.byteOffset+this.readOffset,4).getFloat32(0,!0);return this.readOffset+=4,r}readString(){let e=Math.min(fi.MAX_STRING_LENGTH,this.writeOffset-this.readOffset),r=0;for(;r<e&&this.buffer[this.readOffset+r]!==0;)r++;if(r>=e)throw this.writeOffset-this.readOffset<=e?new Error("Buffer underflow"):new Error("String exceeds max length");let n=this.buffer.slice(this.readOffset,this.readOffset+r);return this.readOffset+=r+1,new TextDecoder("latin1").decode(n)}peekBytes(e){if(!this.hasBytes(e))throw new Error("Buffer underflow");return this.buffer.slice(this.readOffset,this.readOffset+e)}readBytes(e){if(!this.hasBytes(e))throw new Error("Buffer underflow");let r=this.buffer.slice(this.readOffset,this.readOffset+e);return this.readOffset+=e,r}readData(e){return this.readBytes(e)}getReadPosition(){return this.readOffset}getWritePosition(){return this.writeOffset}setReadPosition(e){if(e<0||e>this.writeOffset)throw new Error("Invalid read position");this.readOffset=e}grow(e){let r=e?Math.max(e,this.buffer.length*2):this.buffer.length*2,n=new Uint8Array(r);n.set(this.buffer),this.buffer=n}compact(){if(this.readOffset===0)return;let e=this.writeOffset-this.readOffset;if(e===0){this.readOffset=0,this.writeOffset=0;return}this.buffer.copyWithin(0,this.readOffset,this.writeOffset),this.readOffset=0,this.writeOffset=e}getCapacity(){return this.buffer.length}reset(){this.readOffset=0,this.writeOffset=0}};fi.INITIAL_SIZE=64*1024,fi.MAX_STRING_LENGTH=2048;var Bo=fi;var hi=2023,yr=1,br=2,xr=4,_r=8,vr=16,wr=32,$s=64,Ks=128,Do=256,Sr=512,Ar=1024,Mr=2048,bt=4096,Er=8192,xt=16384,Oo=32768,_t=65536,Lr=1<<17,vt=1<<18,wt=1<<19,Tr=1<<20,Cr=1<<21,Ir=1<<22,zo=1<<23,kr=1<<24,St=1<<25,Rr=1<<26,Pr=1<<27,Fr=1<<28,Br=1<<29,Dr=1<<30,No=-2147483648,Or=1,zr=2,Nr=4;var Ob=1,zb=2,Nb=128,Ht=()=>({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,bits:0,bitsHigh:0,alpha:0,scale:0,instanceBits:0,loopVolume:0,loopAttenuation:0,owner:0,oldFrame:0}),gn=()=>({pm_type:0,origin:{x:0,y:0,z:0},velocity:{x:0,y:0,z:0},pm_time:0,pm_flags:0,gravity:0,delta_angles:{x:0,y:0,z:0},viewoffset:{x:0,y:0,z:0},viewangles:{x:0,y:0,z:0},kick_angles:{x:0,y:0,z:0},gun_index:0,gun_frame:0,gun_offset:{x:0,y:0,z:0},gun_angles:{x:0,y:0,z:0},blend:[0,0,0,0],fov:0,rdflags:0,stats:new Array(32).fill(0),gunskin:0,gunrate:0,damage_blend:[0,0,0,0],team_id:0,watertype:0}),Wc=class extends Bo{constructor(r){super(0);this.stream=r}readByte(){return this.stream.readByte()}readShort(){return this.stream.readShort()}readLong(){return this.stream.readLong()}readFloat(){return this.stream.readFloat()}readString(){return this.stream.readString()}readData(r){return this.stream.readData(r)}hasBytes(r){return this.stream.hasMore()}available(){return this.stream.getRemaining()}getReadPosition(){return this.stream.getPosition()}peekBytes(r){throw new Error("peekBytes not implemented for BinaryStreamAdapter")}},Ch={0:M.bad,1:M.nop,2:M.disconnect,3:M.reconnect,4:M.download,5:M.frame,6:M.inventory,7:M.layout,8:M.muzzleflash,9:M.sound,10:M.print,11:M.stufftext,12:M.serverdata,13:M.configstring,14:M.spawnbaseline,15:M.centerprint,16:M.download,17:M.playerinfo,18:M.packetentities,19:M.deltapacketentities,23:M.temp_entity,22:M.muzzleflash2},it=class t{constructor(e,r,n=!1){this.protocolVersion=0;this.isDemo=Ob;this.strictMode=!1;this.errorCount=0;e instanceof vn?this.stream=new Wc(e):this.stream=e,this.handler=r,this.strictMode=n}setProtocolVersion(e){this.protocolVersion=e}getProtocolVersion(){return this.protocolVersion}getErrorCount(){return this.errorCount}translateCommand(e){if(this.protocolVersion===0)return e===7?M.serverdata:e===12?M.serverdata:e;if(this.protocolVersion===hi)return e;if(this.protocolVersion===25||this.protocolVersion===26){if(e===0)return M.bad;let r=e+5;return r>=M.nop&&r<=M.frame?r:M.bad}return this.protocolVersion===34?Ch[e]!==void 0?Ch[e]:M.bad:e}parseMessage(){for(;this.stream.hasBytes(1);){let e=this.stream.getReadPosition(),r=-1;try{if(r=this.stream.readByte(),r===-1)break;let n=r;switch(r=this.translateCommand(r),r){case M.bad:return;case M.nop:break;case M.disconnect:this.handler?.onDisconnect&&this.handler.onDisconnect();break;case M.reconnect:this.handler?.onReconnect&&this.handler.onReconnect();break;case M.print:this.parsePrint();break;case M.serverdata:this.parseServerData();break;case M.configstring:this.parseConfigString();break;case M.spawnbaseline:this.parseSpawnBaseline();break;case M.centerprint:this.parseCenterPrint();break;case M.download:this.parseDownload();break;case M.frame:this.parseFrame();break;case M.packetentities:this.parsePacketEntities(!1);break;case M.deltapacketentities:this.parsePacketEntities(!0);break;case M.playerinfo:this.parsePlayerState();break;case M.stufftext:this.parseStuffText();break;case M.layout:this.parseLayout();break;case M.inventory:this.parseInventory();break;case M.sound:this.parseSound();break;case M.muzzleflash:this.parseMuzzleFlash();break;case M.muzzleflash2:this.parseMuzzleFlash2();break;case M.temp_entity:this.parseTempEntity();break;case M.splitclient:this.parseSplitClient();break;case M.configblast:this.parseConfigBlast();break;case M.spawnbaselineblast:this.parseSpawnBaselineBlast();break;case M.level_restart:this.handler?.onLevelRestart&&this.handler.onLevelRestart();break;case M.damage:this.parseDamage();break;case M.locprint:this.parseLocPrint();break;case M.fog:this.parseFog();break;case M.waitingforplayers:this.parseWaitingForPlayers();break;case M.bot_chat:this.parseBotChat();break;case M.poi:this.parsePoi();break;case M.help_path:this.parseHelpPath();break;case M.muzzleflash3:this.parseMuzzleFlash3();break;case M.achievement:this.parseAchievement();break;default:let i=`Unknown server command: ${n} (translated: ${r}) at offset ${e}`;if(this.strictMode)throw new Error(i);console.warn(i),this.errorCount++;return}}catch(n){let i=n.message;if(i==="Buffer underflow"||i.includes("StreamingBuffer")){try{this.stream.setReadPosition(e)}catch(a){console.error("Failed to rollback stream position",a)}return}let s=`offset ${e}, cmd ${r}, protocol ${this.protocolVersion}`;if(console.warn(`Error parsing command ${r} (${s}): ${i}`),this.errorCount++,this.strictMode)throw n;return}}}readAngle16(){return this.stream.readShort()*(360/65536)}readCoord(){return this.stream.readShort()*.125}readAngle(){return this.stream.readByte()*(360/256)}readPos(e){e.x=this.stream.readShort()*.125,e.y=this.stream.readShort()*.125,e.z=this.stream.readShort()*.125}readDir(e){let r=this.stream.readByte();if(r>=Gt.length)e.x=0,e.y=0,e.z=0;else{let n=Gt[r];e.x=n[0],e.y=n[1],e.z=n[2]}}parsePrint(){let e=this.stream.readByte(),r=this.stream.readString();this.handler&&this.handler.onPrint(e,r)}parseStuffText(){let e=this.stream.readString();this.handler&&this.handler.onStuffText(e)}parseLayout(){let e=this.stream.readString();this.handler&&this.handler.onLayout(e)}parseCenterPrint(){let e=this.stream.readString();this.handler&&this.handler.onCenterPrint(e)}parseServerData(){if(this.protocolVersion=this.stream.readLong(),this.protocolVersion===hi){let e=this.stream.readLong(),r=this.stream.readByte();this.isDemo=r;let n=this.stream.readByte(),i=this.stream.readString(),s=this.stream.readShort();if(s===-2){let o=this.stream.readShort();for(let d=0;d<o;d++)this.stream.readShort();s=0}else s===-1&&(s=-1);let a=this.stream.readString();this.handler&&this.handler.onServerData(this.protocolVersion,e,0,i,s,a,n,r)}else{let e=this.stream.readLong(),r=this.stream.readByte();this.isDemo=r;let n=this.stream.readString(),i=this.stream.readShort(),s=this.stream.readString();this.handler&&this.handler.onServerData(this.protocolVersion,e,r,n,i,s)}}parseConfigString(){let e=this.stream.readShort(),r=this.stream.readString();this.handler&&this.handler.onConfigString(e,r)}parseSplitClient(){let e=this.stream.readByte();this.handler?.onSplitClient&&this.handler.onSplitClient(e)}parseConfigBlast(){let e=this.stream.readShort(),r=this.stream.readShort(),n=this.stream.readData(e);try{let i=Gc.inflate(n),s=new vn(i.buffer);for(;s.hasMore();){let a=s.readUShort(),o=s.readString();this.handler&&this.handler.onConfigString(a,o)}}catch(i){console.error("svc_configblast error",i)}}parseSpawnBaselineBlast(){let e=this.stream.readShort(),r=this.stream.readShort(),n=this.stream.readData(e);try{let i=Gc.inflate(n),s=new vn(i.buffer),a=new t(s,this.handler,this.strictMode);for(a.setProtocolVersion(this.protocolVersion);s.hasMore();)a.parseSpawnBaseline()}catch(i){console.error("svc_spawnbaselineblast error",i)}}parseLocPrint(){let e=this.stream.readByte(),r=this.stream.readString(),n=this.stream.readByte(),i=[];for(let s=0;s<n;s++)i.push(this.stream.readString());this.handler?.onLocPrint&&this.handler.onLocPrint(e,r,i)}parseWaitingForPlayers(){let e=this.stream.readByte();this.handler?.onWaitingForPlayers&&this.handler.onWaitingForPlayers(e)}parseBotChat(){let e=this.stream.readString(),r=this.stream.readShort(),n=this.stream.readString();this.handler?.onBotChat&&this.handler.onBotChat(n)}parsePoi(){let e=this.stream.readShort(),r=this.stream.readShort(),n={x:0,y:0,z:0};this.readPos(n);let i=this.stream.readShort(),s=this.stream.readByte(),a=this.stream.readByte();this.handler?.onPoi&&this.handler.onPoi(a,n)}parseHelpPath(){let e=this.stream.readByte(),r={x:0,y:0,z:0};this.readPos(r);let n={x:0,y:0,z:0};this.readDir(n),this.handler?.onHelpPath&&this.handler.onHelpPath(r)}parseAchievement(){let e=this.stream.readString();this.handler?.onAchievement&&this.handler.onAchievement(e)}parseDownload(){let e=this.stream.readShort(),r=this.stream.readByte(),n;e>0&&(n=this.stream.readData(e)),this.handler&&this.handler.onDownload(e,r,n)}parseInventory(){let r=new Array(256);for(let n=0;n<256;n++)r[n]=this.stream.readShort();this.handler&&this.handler.onInventory(r)}parseSound(){let e=this.stream.readByte(),r=this.stream.readByte(),n,i,s,a,o;if(e&1&&(n=this.stream.readByte()),e&2&&(i=this.stream.readByte()),e&16&&(s=this.stream.readByte()),e&8&&(a=this.stream.readShort()),e&4){let d={x:0,y:0,z:0};this.readPos(d),o=d}this.handler&&this.handler.onSound(e,r,n,i,s,a,o)}parseMuzzleFlash(){let e=this.stream.readShort(),r=this.stream.readByte();this.handler&&this.handler.onMuzzleFlash(e,r)}parseMuzzleFlash2(){let e=this.stream.readShort(),r=this.stream.readByte();this.handler&&this.handler.onMuzzleFlash2(e,r)}parseMuzzleFlash3(){let e=this.stream.readShort(),r=this.stream.readShort();this.handler?.onMuzzleFlash3&&this.handler.onMuzzleFlash3(e,r)}parseFog(){let e=this.stream.readByte();if(e&128){let n=this.stream.readByte();e|=n<<8}let r={};e&1&&(r.density=this.stream.readFloat(),r.skyfactor=this.stream.readByte()),e&2&&(r.red=this.stream.readByte()),e&4&&(r.green=this.stream.readByte()),e&8&&(r.blue=this.stream.readByte()),e&16&&(r.time=this.stream.readShort()),e&32&&(r.hf_falloff=this.stream.readFloat()),e&64&&(r.hf_density=this.stream.readFloat()),e&256&&(r.hf_start_r=this.stream.readByte()),e&512&&(r.hf_start_g=this.stream.readByte()),e&1024&&(r.hf_start_b=this.stream.readByte()),e&2048&&(r.hf_start_dist=this.stream.readLong()),e&4096&&(r.hf_end_r=this.stream.readByte()),e&8192&&(r.hf_end_g=this.stream.readByte()),e&16384&&(r.hf_end_b=this.stream.readByte()),e&32768&&(r.hf_end_dist=this.stream.readLong()),this.handler?.onFog&&this.handler.onFog(r)}parseDamage(){let e=this.stream.readByte(),r=[];for(let n=0;n<e;n++){let i=this.stream.readByte(),s={x:0,y:0,z:0};this.readDir(s);let a=i&31,o=(i&32)!==0,d=(i&64)!==0,l=(i&128)!==0;r.push({damage:a,health:o,armor:d,power:l,dir:s})}this.handler?.onDamage&&this.handler.onDamage(r)}parseTempEntity(){let e=this.stream.readByte(),r={x:0,y:0,z:0},n={x:0,y:0,z:0},i={x:0,y:0,z:0},s,a,o,d,l;switch(e){case E.EXPLOSION1:case E.EXPLOSION2:case E.ROCKET_EXPLOSION:case E.GRENADE_EXPLOSION:case E.ROCKET_EXPLOSION_WATER:case E.GRENADE_EXPLOSION_WATER:case E.BFG_EXPLOSION:case E.BFG_BIGEXPLOSION:case E.BOSSTPORT:case E.PLASMA_EXPLOSION:case E.PLAIN_EXPLOSION:case E.CHAINFIST_SMOKE:case E.TRACKER_EXPLOSION:case E.TELEPORT_EFFECT:case E.DBALL_GOAL:case E.NUKEBLAST:case E.WIDOWSPLASH:case E.EXPLOSION1_BIG:case E.EXPLOSION1_NP:this.readPos(r);break;case E.GUNSHOT:case E.BLOOD:case E.BLASTER:case E.SHOTGUN:case E.SPARKS:case E.BULLET_SPARKS:case E.SCREEN_SPARKS:case E.SHIELD_SPARKS:case E.BLASTER2:case E.FLECHETTE:case E.MOREBLOOD:case E.ELECTRIC_SPARKS:case E.HEATBEAM_SPARKS:case E.HEATBEAM_STEAM:this.readPos(r),this.readDir(i);break;case E.SPLASH:case E.LASER_SPARKS:case E.WELDING_SPARKS:case E.TUNNEL_SPARKS:s=this.stream.readByte(),this.readPos(r),this.readDir(i),a=this.stream.readByte();break;case E.BLUEHYPERBLASTER:this.protocolVersion>=32?(this.readPos(r),this.readPos(n)):(this.readPos(r),this.readDir(i));break;case E.GREENBLOOD:this.protocolVersion>=32?(this.readPos(r),this.readDir(i)):(this.readPos(r),this.readPos(n));break;case E.RAILTRAIL:case E.BUBBLETRAIL:case E.BFG_LASER:case E.DEBUGTRAIL:case E.BUBBLETRAIL2:this.readPos(r),this.readPos(n);break;case E.PARASITE_ATTACK:case E.MEDIC_CABLE_ATTACK:this.stream.readShort(),this.readPos(r),this.readPos(n);break;case E.GRAPPLE_CABLE:o=this.stream.readShort(),this.readPos(r),this.readPos(n),this.readPos(i);break;case E.LIGHTNING:d=this.stream.readShort(),l=this.stream.readShort(),this.readPos(r),this.readPos(n);break;case E.FLASHLIGHT:this.readPos(r),o=this.stream.readShort();break;case E.FORCEWALL:this.readPos(r),this.readPos(n),a=this.stream.readByte();break;case E.STEAM:let c=this.stream.readShort();s=this.stream.readByte(),this.readPos(r),this.readDir(i),a=this.stream.readByte(),this.stream.readShort(),c!==-1&&this.stream.readLong();break;case E.WIDOWBEAMOUT:this.stream.readShort();case E.HEATBEAM:case E.MONSTER_HEATBEAM:o=this.stream.readShort(),this.readPos(r),this.readPos(n),this.readDir(i);break}this.handler&&this.handler.onTempEntity(e,r,n,i,s,a,o,d,l)}parseSpawnBaseline(){let e=this.parseEntityBits(),r=Ht();this.parseDelta(Ht(),r,e.number,e.bits,e.bitsHigh),this.handler&&this.handler.onSpawnBaseline(r)}parseFrame(){let e=this.stream.readLong(),r=this.stream.readLong(),n=0;this.protocolVersion!==26&&this.protocolVersion!==25&&(n=this.stream.readByte());let i=this.stream.readByte(),s=this.stream.readData(i),a=this.stream.readByte();if(a=this.translateCommand(a),a!==M.playerinfo){if(this.strictMode)throw new Error(`Expected svc_playerinfo after svc_frame, got ${a}`);return}let o=this.parsePlayerState(),d=this.stream.readByte();if(d=this.translateCommand(d),d!==M.packetentities&&d!==M.deltapacketentities){if(this.strictMode)throw new Error(`Expected svc_packetentities after svc_playerinfo, got ${d}`);return}let l=this.collectPacketEntities();if(this.isDemo===Nb){let c=this.stream.readByte();for(let f=0;f<c;f++)this.stream.readByte()}this.isDemo===zb&&this.stream.readLong(),this.handler&&this.handler.onFrame({serverFrame:e,deltaFrame:r,surpressCount:n,areaBytes:i,areaBits:s,playerState:o,packetEntities:{delta:!0,entities:l}})}parsePlayerState(){let e=gn(),r=this.stream.readShort();r&1&&(e.pm_type=this.stream.readByte()),r&2&&(e.origin.x=this.readCoord(),e.origin.y=this.readCoord(),e.origin.z=this.readCoord()),r&4&&(e.velocity.x=this.readCoord(),e.velocity.y=this.readCoord(),e.velocity.z=this.readCoord()),r&8&&(e.pm_time=this.stream.readByte()),r&16&&(e.pm_flags=this.stream.readByte()),r&32&&(e.gravity=this.stream.readShort()),r&64&&(e.delta_angles.x=this.stream.readShort()*(180/32768),e.delta_angles.y=this.stream.readShort()*(180/32768),e.delta_angles.z=this.stream.readShort()*(180/32768)),r&128&&(e.viewoffset.x=(this.stream.readByte()<<24>>24)*.25,e.viewoffset.y=(this.stream.readByte()<<24>>24)*.25,e.viewoffset.z=(this.stream.readByte()<<24>>24)*.25),r&256&&(e.viewangles.x=this.readAngle16(),e.viewangles.y=this.readAngle16(),e.viewangles.z=this.readAngle16()),r&512&&(e.kick_angles.x=(this.stream.readByte()<<24>>24)*.25,e.kick_angles.y=(this.stream.readByte()<<24>>24)*.25,e.kick_angles.z=(this.stream.readByte()<<24>>24)*.25),r&4096&&(e.gun_index=this.stream.readByte()),r&8192&&(e.gun_frame=this.stream.readByte(),e.gun_offset.x=(this.stream.readByte()<<24>>24)*.25,e.gun_offset.y=(this.stream.readByte()<<24>>24)*.25,e.gun_offset.z=(this.stream.readByte()<<24>>24)*.25,e.gun_angles.x=(this.stream.readByte()<<24>>24)*.25,e.gun_angles.y=(this.stream.readByte()<<24>>24)*.25,e.gun_angles.z=(this.stream.readByte()<<24>>24)*.25),r&1024&&(e.blend[0]=this.stream.readByte(),e.blend[1]=this.stream.readByte(),e.blend[2]=this.stream.readByte(),e.blend[3]=this.stream.readByte()),r&2048&&(e.fov=this.stream.readByte()),r&16384&&(e.rdflags=this.stream.readByte()),r&32768&&(e.watertype=this.stream.readByte());let n=this.stream.readLong();for(let i=0;i<32;i++)n&1<<i&&(e.stats[i]=this.stream.readShort());return e}parsePacketEntities(e){let r=this.collectPacketEntities();this.handler&&this.handler.onFrame({serverFrame:0,deltaFrame:0,surpressCount:0,areaBytes:0,areaBits:new Uint8Array,playerState:gn(),packetEntities:{delta:e,entities:r}})}collectPacketEntities(){let e=[];for(;;){let r=this.parseEntityBits();if(r.bits&$s){if(r.number===0)break;continue}let n=Ht(),i=r.number===0&&!(r.bits&Ks);if((r.number!==0||i)&&this.parseDelta(Ht(),n,r.number,r.bits,r.bitsHigh),r.number===0)break;e.push(n)}return e}parseEntityBits(){let e=this.stream.readByte();e&Ks&&(e|=this.stream.readByte()<<8),e&Oo&&(e|=this.stream.readByte()<<16),e&zo&&(e|=this.stream.readByte()<<24);let r=0;this.protocolVersion===hi&&e&No&&(r=this.stream.readByte());let n;return e&Do?n=this.stream.readShort():n=this.stream.readByte(),{number:n,bits:e,bitsHigh:r}}parseDelta(e,r,n,i,s=0){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.alpha=e.alpha,r.scale=e.scale,r.instanceBits=e.instanceBits,r.loopVolume=e.loopVolume,r.loopAttenuation=e.loopAttenuation,r.owner=e.owner,r.oldFrame=e.oldFrame,r.number=n,r.bits=i,r.bitsHigh=s,i&Mr&&(r.modelindex=this.stream.readByte()),i&Tr&&(r.modelindex2=this.stream.readByte()),i&Cr&&(r.modelindex3=this.stream.readByte()),i&Ir&&(r.modelindex4=this.stream.readByte()),i&vr&&(r.frame=this.stream.readByte()),i&Lr&&(r.frame=this.stream.readShort()),i&_t&&i&St?r.skinnum=this.stream.readLong():i&_t?r.skinnum=this.stream.readByte():i&St&&(r.skinnum=this.stream.readShort()),i&xt&&i&wt?r.effects=this.stream.readLong():i&xt?r.effects=this.stream.readByte():i&wt&&(r.effects=this.stream.readShort()),i&bt&&i&vt?r.renderfx=this.stream.readLong():i&bt?r.renderfx=this.stream.readByte():i&vt&&(r.renderfx=this.stream.readShort()),i&yr&&(r.origin.x=this.readCoord()),i&br&&(r.origin.y=this.readCoord()),i&Sr&&(r.origin.z=this.readCoord()),i&Ar&&(r.angles.x=this.readAngle()),i&xr&&(r.angles.y=this.readAngle()),i&_r&&(r.angles.z=this.readAngle()),i&kr&&this.readPos(r.old_origin),i&Rr&&(r.sound=this.stream.readByte()),i&wr?r.event=this.stream.readByte():r.event=0,i&Pr&&(r.solid=this.stream.readShort()),this.protocolVersion===hi&&(i&Er&&(r.alpha=this.stream.readByte()/255),i&Fr&&(r.scale=this.stream.readFloat()),i&Br&&(r.instanceBits=this.stream.readLong()),i&Dr&&(r.loopVolume=this.stream.readByte()/255),s&Or&&(r.loopAttenuation=this.stream.readByte()/255),s&zr&&(r.owner=this.stream.readShort()),s&Nr&&(r.oldFrame=this.stream.readShort()))}};var Xc=(c=>(c.WeaponFire="weapon_fire",c.DamageDealt="damage_dealt",c.DamageReceived="damage_received",c.Pickup="pickup",c.Death="death",c.Kill="kill",c.Spawn="spawn",c.PlayerInfo="player_info",c.Chat="chat",c.Objective="objective",c))(Xc||{});var mi=class{constructor(e){this.events=[];this.summary={totalKills:0,totalDeaths:0,damageDealt:0,damageReceived:0,weaponUsage:new Map};this.header=null;this.configStrings=new Map;this.serverInfo={};this.statistics=null;this.playerStats=new Map;this.weaponStats=new Map;this.activeEntities=new Set;this.buffer=e}analyze(){let e=new je(this.buffer),r=-1,n=0,i=.1,s=0,a={onServerData:(o,d,l,c,f,u,h,m)=>{s=o,this.header={protocolVersion:o,gameDir:c,levelName:u,playerNum:f,serverCount:d,spawnCount:d,tickRate:h,demoType:m},h&&h>0&&(i=1/h)},onConfigString:(o,d)=>{this.configStrings.set(o,d),o===0&&this.parseServerInfo(d)},onSpawnBaseline:o=>{},onFrame:o=>{let d=new Set;if(o.packetEntities&&o.packetEntities.entities)for(let l of o.packetEntities.entities)d.add(l.number),this.activeEntities.has(l.number)||this.recordEvent({type:"spawn",frame:r,time:n,entityId:l.number,position:{x:l.origin.x,y:l.origin.y,z:l.origin.z},description:`Entity ${l.number} spawned`});this.activeEntities=d,o.playerState&&this.header},onPrint:(o,d)=>{let l=d.replace(/\n/g," ").trim();l.includes("died")||l.includes("killed")||l.includes("suicide")?(this.summary.totalDeaths++,this.recordEvent({type:"death",frame:r,time:n,description:l})):l.startsWith("You got the ")?this.recordEvent({type:"pickup",frame:r,time:n,description:l}):(o===3||o===2)&&this.recordEvent({type:"chat",frame:r,time:n,description:l,data:{level:o}})},onCenterPrint:o=>{this.recordEvent({type:"objective",frame:r,time:n,description:o.trim()})},onStuffText:()=>{},onSound:()=>{},onTempEntity:()=>{},onLayout:()=>{},onInventory:()=>{},onMuzzleFlash:(o,d)=>{this.handleWeaponFire(o,d,r,n)},onMuzzleFlash2:(o,d)=>{this.handleWeaponFire(o,d,r,n)},onMuzzleFlash3:(o,d)=>{this.handleWeaponFire(o,d,r,n)},onDisconnect:()=>{},onReconnect:()=>{},onDownload:()=>{},onDamage:o=>{for(let d of o)if(this.recordEvent({type:"damage_received",frame:r,time:n,value:d.damage,position:d.dir,description:`Took ${d.damage} damage`}),this.summary.damageReceived+=d.damage,this.header){let l=this.getOrCreatePlayerStats(this.header.playerNum);l.damageReceived+=d.damage}}};for(;e.hasMore();){let o=e.readNextBlock();if(!o)break;r++,n=r*i;let d=new it(o.data,a);d.setProtocolVersion(s),d.parseMessage(),s=d.getProtocolVersion()}return this.statistics={duration:n,frameCount:r+1,averageFps:(r+1)/(n||1),mapName:this.header?.levelName||"unknown",playerCount:1},{events:this.events,summary:this.summary,header:this.header,configStrings:this.configStrings,serverInfo:this.serverInfo,statistics:this.statistics,playerStats:this.playerStats,weaponStats:this.weaponStats}}handleWeaponFire(e,r,n,i){this.recordEvent({type:"weapon_fire",frame:n,time:i,entityId:e,value:r,description:`Weapon ${r} fired by ${e}`});let s=this.summary.weaponUsage.get(r)||0;this.summary.weaponUsage.set(r,s+1);let a=this.getOrCreateWeaponStat(e,r);a.shotsFired++}recordEvent(e){this.events.push(e)}parseServerInfo(e){let r=e.split("\\");for(let n=1;n<r.length;n+=2)n+1<r.length&&(this.serverInfo[r[n]]=r[n+1])}getOrCreatePlayerStats(e){let r=this.playerStats.get(e);return r||(r={kills:0,deaths:0,damageDealt:0,damageReceived:0,suicides:0},this.playerStats.set(e,r)),r}getOrCreateWeaponStat(e,r){let n=this.weaponStats.get(e);n||(n=[],this.weaponStats.set(e,n));let i=n.find(s=>s.weaponId===r);return i||(i={weaponId:r,shotsFired:0,hits:0,kills:0},n.push(i)),i}};var Kc=(i=>(i[i.FirstPerson=0]="FirstPerson",i[i.ThirdPerson=1]="ThirdPerson",i[i.Free=2]="Free",i[i.Follow=3]="Follow",i))(Kc||{});var Uo=(i=>(i[i.Stopped=0]="Stopped",i[i.Playing=1]="Playing",i[i.Paused=2]="Paused",i[i.Finished=3]="Finished",i))(Uo||{}),Ub=()=>({onServerData:()=>{},onConfigString:()=>{},onSpawnBaseline:()=>{},onFrame:()=>{},onCenterPrint:()=>{},onStuffText:()=>{},onPrint:()=>{},onSound:()=>{},onTempEntity:()=>{},onLayout:()=>{},onInventory:()=>{},onMuzzleFlash:()=>{},onMuzzleFlash2:()=>{},onDisconnect:()=>{},onReconnect:()=>{},onDownload:()=>{}}),Vt=class{constructor(){this.reader=null;this.buffer=null;this.state=0;this.playbackSpeed=1;this.currentProtocolVersion=0;this.currentFrameIndex=-1;this.lastFrameData=null;this.accumulatedTime=0;this.frameDuration=100;this.snapshotInterval=100;this.snapshots=new Map;this.cachedEvents=null;this.cachedSummary=null;this.cachedHeader=null;this.cachedConfigStrings=null;this.cachedServerInfo=null;this.cachedStatistics=null;this.cachedPlayerStats=null;this.cachedWeaponStats=null;this.tracker=null;this.cameraMode=0;this.thirdPersonDistance=80;this.thirdPersonOffset={x:0,y:0,z:0}}setHandler(e){this.handler=e}setCallbacks(e){this.callbacks=e}loadDemo(e){this.buffer=e,this.reader=new je(e),this.transitionState(0),this.accumulatedTime=0,this.currentProtocolVersion=0,this.currentFrameIndex=-1,this.snapshots.clear(),this.lastFrameData=null,this.cachedEvents=null,this.cachedSummary=null,this.cachedHeader=null,this.cachedConfigStrings=null,this.cachedServerInfo=null,this.cachedStatistics=null,this.cachedPlayerStats=null,this.cachedWeaponStats=null}play(){this.reader&&this.state!==1&&this.transitionState(1)}pause(){this.state===1&&this.transitionState(2)}stop(){this.transitionState(0),this.reader&&this.reader.reset(),this.accumulatedTime=0,this.currentProtocolVersion=0,this.currentFrameIndex=-1,this.lastFrameData=null}transitionState(e){this.state!==e&&(this.state=e,this.callbacks?.onPlaybackStateChange&&this.callbacks.onPlaybackStateChange(e))}setFrameDuration(e){this.frameDuration=e}setSpeed(e){this.playbackSpeed=Math.max(.1,Math.min(e,16))}getSpeed(){return this.playbackSpeed}getPlaybackSpeed(){return this.playbackSpeed}getInterpolationFactor(){return this.frameDuration<=0?0:Math.max(0,Math.min(1,this.accumulatedTime/this.frameDuration))}update(e){if(!(this.state!==1||!this.reader))for(this.accumulatedTime+=e*1e3*this.playbackSpeed;this.accumulatedTime>=this.frameDuration;){if(!this.processNextFrame())return;this.accumulatedTime-=this.frameDuration,this.callbacks?.onTimeUpdate&&this.callbacks.onTimeUpdate(this.getCurrentTime())}}stepForward(){this.reader&&(this.processNextFrame(),this.callbacks?.onTimeUpdate&&this.callbacks.onTimeUpdate(this.getCurrentTime()))}stepBackward(){this.reader&&this.currentFrameIndex>0&&this.seek(this.currentFrameIndex-1)}seekToTime(e){let r=this.timeToFrame(e);this.seek(r)}seekToFrame(e){this.seek(e)}frameToTime(e){return e*this.frameDuration/1e3}timeToFrame(e){return Math.floor(e*1e3/this.frameDuration)}playFrom(e){if(e.type==="frame")this.seek(e.frame);else if(e.type==="time")this.seekToTime(e.seconds);else throw new Error(`Invalid offset type: ${e.type}`);this.play()}playRange(e,r){let n=e.type==="frame"?e.frame:this.timeToFrame(e.seconds),i=r.type==="frame"?r.frame:this.timeToFrame(r.seconds),s=this.getTotalFrames(),a=Math.max(0,s-1);if(n<0)throw new Error(`Invalid start offset: ${n}`);if(i<n)throw new Error(`End offset (${i}) cannot be before start offset (${n})`);this.playFrom(e);let o=this.callbacks?.onFrameUpdate,d={...this.callbacks,onFrameUpdate:l=>{o&&o(l),this.currentFrameIndex>=i&&(this.pause(),this.callbacks===d&&this.setCallbacks({...this.callbacks,onFrameUpdate:o}),this.callbacks?.onPlaybackComplete&&this.callbacks.onPlaybackComplete())}};this.setCallbacks(d)}seek(e){if(!this.reader)return;let r=this.getTotalFrames();if(r>0&&e>=r&&(e=r-1),e<0&&(e=0),e===this.currentFrameIndex+1){this.processNextFrame(),this.callbacks?.onSeekComplete&&this.callbacks.onSeekComplete();return}if(e===this.currentFrameIndex){this.callbacks?.onSeekComplete&&this.callbacks.onSeekComplete();return}let n=-1,i=null;if(e>this.currentFrameIndex&&this.currentFrameIndex!==-1&&(n=this.currentFrameIndex),this.callbacks?.onRestoreSnapshot)for(let[s,a]of this.snapshots)s<=e&&s>n&&(n=s,i=a);for(n===-1&&this.currentFrameIndex>e?(this.reader.reset(),this.currentFrameIndex=-1,this.currentProtocolVersion=0):n===-1&&(this.reader.reset(),this.currentFrameIndex=-1,this.currentProtocolVersion=0),i&&this.callbacks?.onRestoreSnapshot&&(this.callbacks.onRestoreSnapshot(i),this.reader.seekToMessage(n+1)?this.currentFrameIndex=n:(this.reader.reset(),this.currentFrameIndex=-1,this.currentProtocolVersion=0));this.currentFrameIndex<e&&(this.callbacks?.onCaptureSnapshot&&(this.currentFrameIndex+1)%this.snapshotInterval,!!this.processNextFrame()););this.accumulatedTime=0,this.callbacks?.onSeekComplete&&this.callbacks.onSeekComplete(),this.callbacks?.onTimeUpdate&&this.callbacks.onTimeUpdate(this.getCurrentTime())}processNextFrame(){if(!this.reader||!this.reader.hasMore())return this.transitionState(3),this.callbacks?.onPlaybackComplete&&this.callbacks.onPlaybackComplete(),!1;let e=this.reader.readNextBlock();if(!e)return this.transitionState(3),this.callbacks?.onPlaybackComplete&&this.callbacks.onPlaybackComplete(),!1;this.currentFrameIndex++,this.tracker&&(this.tracker.setCurrentFrame(this.currentFrameIndex),this.tracker.setCurrentTime(this.getCurrentTime()));try{let r={...this.handler||Ub(),onFrame:i=>{this.lastFrameData=i,this.handler?.onFrame&&this.handler.onFrame(i),this.callbacks?.onFrameUpdate&&this.callbacks.onFrameUpdate(i)}},n=new it(e.data,r);if(n.setProtocolVersion(this.currentProtocolVersion),n.parseMessage(),this.currentProtocolVersion=n.getProtocolVersion(),this.callbacks?.onCaptureSnapshot&&this.currentFrameIndex%this.snapshotInterval===0&&this.currentFrameIndex>0){let i=this.callbacks.onCaptureSnapshot(this.currentFrameIndex);i&&this.snapshots.set(this.currentFrameIndex,i)}}catch(r){return console.error("Error processing demo frame",r),this.callbacks?.onPlaybackError&&this.callbacks.onPlaybackError(r instanceof Error?r:new Error(String(r))),!1}return!0}getState(){return this.state}getCurrentTime(){return this.currentFrameIndex<0?this.accumulatedTime:this.currentFrameIndex*this.frameDuration+this.accumulatedTime}getFrameCount(){return this.reader?this.reader.getMessageCount():0}getTotalFrames(){return this.getFrameCount()}getCurrentFrame(){return this.currentFrameIndex<0?0:this.currentFrameIndex}getDuration(){return this.getFrameCount()*this.frameDuration/1e3}getTotalBytes(){return this.reader?this.reader.getProgress().total:0}getProcessedBytes(){return this.reader?this.reader.getOffset():0}getFrameData(e){if(e===this.currentFrameIndex&&this.lastFrameData)return this.lastFrameData;let r=this.state;return this.pause(),this.seek(e),r===1&&this.play(),this.lastFrameData}getFramePlayerState(e){if(e===this.currentFrameIndex&&this.handler?.getPlayerState){let n=this.handler.getPlayerState();if(n)return n}let r=this.getFrameData(e);return r?r.playerState:null}getFrameEntities(e){if(e===this.currentFrameIndex&&this.handler?.getEntities){let r=this.handler.getEntities();if(r)return Array.from(r.values())}if(this.seek(e),this.handler?.getEntities){let r=this.handler.getEntities();return r?Array.from(r.values()):[]}return[]}compareFrames(e,r){let n=this.getFramePlayerState(e),i=this.getFrameEntities(e),s=new Map;i.forEach(c=>s.set(c.number,c));let a=this.getFramePlayerState(r),o=this.getFrameEntities(r),d=new Map;o.forEach(c=>d.set(c.number,c));let l={frameA:e,frameB:r,playerStateDiff:{origin:null,viewangles:null,health:null,ammo:null},entityDiffs:{added:[],removed:[],moved:[]}};n&&a&&((n.origin.x!==a.origin.x||n.origin.y!==a.origin.y||n.origin.z!==a.origin.z)&&(l.playerStateDiff.origin={x:a.origin.x-n.origin.x,y:a.origin.y-n.origin.y,z:a.origin.z-n.origin.z}),n.stats[1]!==a.stats[1]&&(l.playerStateDiff.health=a.stats[1]-n.stats[1]),n.stats[2]!==a.stats[2]&&(l.playerStateDiff.ammo=a.stats[2]-n.stats[2]));for(let[c,f]of d){let u=s.get(c);u?(u.origin.x!==f.origin.x||u.origin.y!==f.origin.y||u.origin.z!==f.origin.z)&&l.entityDiffs.moved.push({id:c,delta:{x:f.origin.x-u.origin.x,y:f.origin.y-u.origin.y,z:f.origin.z-u.origin.z}}):l.entityDiffs.added.push(c)}for(let[c,f]of s)d.has(c)||l.entityDiffs.removed.push(c);return l}getEntityTrajectory(e,r,n){let i=[],s=this.getCurrentFrame();for(this.seek(r);this.getCurrentFrame()<=n&&this.state!==3;){let a=null;if(e===-1){let o=this.getFramePlayerState(this.getCurrentFrame());o&&(a={...o.origin})}else if(this.handler?.getEntities){let o=this.handler.getEntities().get(e);o&&(a={...o.origin})}if(a&&i.push(a),this.getCurrentFrame()===n)break;this.stepForward()}return this.seek(s),i}getEvents(){return this.ensureAnalysis(),this.cachedEvents||[]}getDemoEvents(){return this.getEvents()}filterEvents(e,r){return this.getDemoEvents().filter(i=>!(i.type!==e||r!==void 0&&i.entityId!==r))}getEventSummary(){return this.ensureAnalysis(),this.cachedSummary||{totalKills:0,totalDeaths:0,damageDealt:0,damageReceived:0,weaponUsage:new Map}}getMetadata(){let e=this.getDemoHeader();if(!e)return null;let r=this.getDemoServerInfo(),n="Unknown";return this.cachedConfigStrings,{mapName:e.levelName,playerName:n,serverName:r.hostname,demoVersion:e.protocolVersion,tickRate:e.tickRate||10}}getDemoHeader(){return this.ensureAnalysis(),this.cachedHeader}getDemoConfigStrings(){return this.ensureAnalysis(),this.cachedConfigStrings||new Map}getDemoServerInfo(){return this.ensureAnalysis(),this.cachedServerInfo||{}}getDemoStatistics(){return this.ensureAnalysis(),this.cachedStatistics}getPlayerStatistics(e){return this.ensureAnalysis(),this.cachedPlayerStats?.get(e)||null}getWeaponStatistics(e){return this.ensureAnalysis(),this.cachedWeaponStats?.get(e)||null}ensureAnalysis(){if(!this.cachedEvents&&this.buffer){let r=new mi(this.buffer).analyze();this.cachedEvents=r.events,this.cachedSummary=r.summary,this.cachedHeader=r.header,this.cachedConfigStrings=r.configStrings,this.cachedServerInfo=r.serverInfo,this.cachedStatistics=r.statistics,this.cachedPlayerStats=r.playerStats,this.cachedWeaponStats=r.weaponStats}}setCameraMode(e){this.cameraMode=e}getCameraMode(){return this.cameraMode}setThirdPersonDistance(e){this.thirdPersonDistance=e}setThirdPersonOffset(e){this.thirdPersonOffset=e}async playWithTracking(e,r={}){if(this.tracker=e,e.startTracking(),r.fastForward)try{this.state===0&&this.reader,this.transitionState(1);let n=100,i=async()=>{if(this.state!==1)throw new Error("Playback stopped unexpectedly during fast forward");let s=0;for(;s<n;){if(!this.processNextFrame()){let a=e.stopTracking();return this.tracker=null,this.callbacks?.onPlaybackComplete&&this.callbacks.onPlaybackComplete(),a}s++}return await new Promise(a=>setTimeout(a,0)),i()};return await i()}catch(n){throw e.stopTracking(),this.tracker=null,n}else return new Promise((n,i)=>{let s=this.callbacks?.onPlaybackComplete,a=this.callbacks?.onPlaybackError,o=()=>{this.setCallbacks({...this.callbacks,onPlaybackComplete:s,onPlaybackError:a}),this.tracker=null};this.setCallbacks({...this.callbacks,onPlaybackComplete:()=>{let d=e.stopTracking();s&&s(),o(),n(d)},onPlaybackError:d=>{e.stopTracking(),a&&a(d),o(),i(d)}}),this.play()})}async playRangeWithTracking(e,r,n,i={}){this.tracker=n,n.startTracking();let s=e.type==="frame"?e.frame:this.timeToFrame(e.seconds),a=r.type==="frame"?r.frame:this.timeToFrame(r.seconds);if(i.fastForward)try{this.playFrom(e),this.transitionState(1);let o=100,d=async()=>{if(this.state!==1)throw new Error("Playback stopped unexpectedly during fast forward");let l=0;for(;l<o;){if(this.currentFrameIndex>=a||!this.processNextFrame()){let c=n.stopTracking();return this.tracker=null,this.callbacks?.onPlaybackComplete&&this.callbacks.onPlaybackComplete(),c}l++}return await new Promise(c=>setTimeout(c,0)),d()};return await d()}catch(o){throw n.stopTracking(),this.tracker=null,o}else return new Promise((o,d)=>{let l=this.callbacks?.onPlaybackComplete,c=this.callbacks?.onPlaybackError,f=()=>{this.setCallbacks({...this.callbacks,onPlaybackComplete:l,onPlaybackError:c}),this.tracker=null};this.setCallbacks({...this.callbacks,onPlaybackComplete:()=>{let u=n.stopTracking();l&&l(),f(),o(u)},onPlaybackError:u=>{n.stopTracking(),c&&c(u),f(),d(u)}}),this.playRange(e,r)})}};var Zs=class{constructor(){this.isRecording=!1;this.startTime=0;this.frameCount=0;this.filename=null;this.lastMessageSize=-1;this.messageBuffer=new Vr(1024*1024)}startRecording(e,r=0){this.isRecording||(this.isRecording=!0,this.filename=e,this.startTime=r,this.frameCount=0,this.messageBuffer.reset(),console.log(`DemoRecorder: Started recording to ${e}`))}recordMessage(e){if(this.isRecording){this.messageBuffer.writeLong(e.byteLength);for(let r=0;r<e.length;r++)this.messageBuffer.writeByte(e[r]);this.frameCount++}}stopRecording(){return this.isRecording?(this.isRecording=!1,this.messageBuffer.writeLong(-1),console.log(`DemoRecorder: Stopped recording. Frames: ${this.frameCount}, Size: ${this.messageBuffer.getOffset()} bytes`),this.messageBuffer.getData()):null}getIsRecording(){return this.isRecording}};var Ho=class{static validate(e,r){if(r&&!r.toLowerCase().endsWith(".dm2"))return{valid:!1,error:"Invalid file extension (expected .dm2)"};if(e.byteLength<5)return{valid:!1,error:"File too small to be a valid demo"};let n=new DataView(e),i=n.getInt32(0,!0);if(i<=0||i>e.byteLength-4)return{valid:!1,error:`Invalid first block length: ${i}`};let s=n.getUint8(4);if(s!==M.serverdata)return{valid:!1,error:`First command is not svc_serverdata (expected ${M.serverdata}, got ${s})`};let a=-1;return i>=5&&(a=n.getInt32(5,!0)),{valid:!0,version:a}}};var Hb={[M.bad]:0,[M.nop]:1,[M.disconnect]:2,[M.reconnect]:3,[M.download]:16,[M.frame]:5,[M.inventory]:6,[M.layout]:7,[M.muzzleflash]:8,[M.sound]:9,[M.print]:10,[M.stufftext]:11,[M.serverdata]:12,[M.configstring]:13,[M.spawnbaseline]:14,[M.centerprint]:15,[M.playerinfo]:17,[M.packetentities]:18,[M.deltapacketentities]:19,[M.temp_entity]:23,[M.muzzleflash2]:22},Ys=class{constructor(){this.writer=new Vr}getData(){return this.writer.getData()}writeCommand(e,r=0){if(r===34){let n=Hb[e];if(n!==void 0){this.writer.writeByte(n);return}}this.writer.writeByte(e)}writeServerData(e,r,n,i,s,a){this.writeCommand(M.serverdata,e),this.writer.writeLong(e),this.writer.writeLong(r),this.writer.writeByte(n),this.writer.writeString(i),this.writer.writeShort(s),this.writer.writeString(a)}writeServerDataRerelease(e,r,n,i,s,a,o){this.writeCommand(M.serverdata,e),this.writer.writeLong(e),this.writer.writeLong(r),this.writer.writeByte(n),this.writer.writeByte(i),this.writer.writeString(s),this.writer.writeShort(a),this.writer.writeString(o)}writeConfigString(e,r,n=0){this.writeCommand(M.configstring,n),this.writer.writeShort(e),this.writer.writeString(r)}writeSpawnBaseline(e,r){this.writeCommand(M.spawnbaseline,r),this.writeEntityState(e,null,!0,r)}writeStuffText(e,r=0){this.writeCommand(M.stufftext,r),this.writer.writeString(e)}writeCenterPrint(e,r=0){this.writeCommand(M.centerprint,r),this.writer.writeString(e)}writePrint(e,r,n=0){this.writeCommand(M.print,n),this.writer.writeByte(e),this.writer.writeString(r)}writeLayout(e,r=0){this.writeCommand(M.layout,r),this.writer.writeString(e)}writeInventory(e,r=0){this.writeCommand(M.inventory,r);for(let n=0;n<256;n++)this.writer.writeShort(e[n]||0)}writeMuzzleFlash(e,r,n=0){this.writeCommand(M.muzzleflash,n),this.writer.writeShort(e),this.writer.writeByte(r)}writeMuzzleFlash2(e,r,n=0){this.writeCommand(M.muzzleflash2,n),this.writer.writeShort(e),this.writer.writeByte(r)}writeTempEntity(e,r,n,i,s,a,o,d,l,c=0){switch(this.writeCommand(M.temp_entity,c),this.writer.writeByte(e),e){case E.EXPLOSION1:case E.EXPLOSION2:case E.ROCKET_EXPLOSION:case E.GRENADE_EXPLOSION:case E.ROCKET_EXPLOSION_WATER:case E.GRENADE_EXPLOSION_WATER:case E.BFG_EXPLOSION:case E.BFG_BIGEXPLOSION:case E.BOSSTPORT:case E.PLASMA_EXPLOSION:case E.PLAIN_EXPLOSION:case E.CHAINFIST_SMOKE:case E.TRACKER_EXPLOSION:case E.TELEPORT_EFFECT:case E.DBALL_GOAL:case E.NUKEBLAST:case E.WIDOWSPLASH:case E.EXPLOSION1_BIG:case E.EXPLOSION1_NP:this.writer.writePos(r);break;case E.GUNSHOT:case E.BLOOD:case E.BLASTER:case E.SHOTGUN:case E.SPARKS:case E.BULLET_SPARKS:case E.SCREEN_SPARKS:case E.SHIELD_SPARKS:case E.BLASTER2:case E.FLECHETTE:case E.MOREBLOOD:case E.ELECTRIC_SPARKS:case E.HEATBEAM_SPARKS:case E.HEATBEAM_STEAM:this.writer.writePos(r),this.writer.writeDir(i||{x:0,y:0,z:0});break;case E.SPLASH:case E.LASER_SPARKS:case E.WELDING_SPARKS:case E.TUNNEL_SPARKS:this.writer.writeByte(s||0),this.writer.writePos(r),this.writer.writeDir(i||{x:0,y:0,z:0}),this.writer.writeByte(a||0);break;case E.BLUEHYPERBLASTER:c>=32?(this.writer.writePos(r),this.writer.writePos(n||{x:0,y:0,z:0})):(this.writer.writePos(r),this.writer.writeDir(i||{x:0,y:0,z:0}));break;case E.GREENBLOOD:c>=32?(this.writer.writePos(r),this.writer.writeDir(i||{x:0,y:0,z:0})):(this.writer.writePos(r),this.writer.writePos(n||{x:0,y:0,z:0}));break;case E.RAILTRAIL:case E.BUBBLETRAIL:case E.BFG_LASER:case E.DEBUGTRAIL:case E.BUBBLETRAIL2:this.writer.writePos(r),this.writer.writePos(n||{x:0,y:0,z:0});break;case E.PARASITE_ATTACK:case E.MEDIC_CABLE_ATTACK:this.writer.writeShort(o||0),this.writer.writePos(r),this.writer.writePos(n||{x:0,y:0,z:0});break;case E.GRAPPLE_CABLE:this.writer.writeShort(o||0),this.writer.writePos(r),this.writer.writePos(n||{x:0,y:0,z:0}),this.writer.writePos(i||{x:0,y:0,z:0});break;case E.LIGHTNING:this.writer.writeShort(d||0),this.writer.writeShort(l||0),this.writer.writePos(r),this.writer.writePos(n||{x:0,y:0,z:0});break;case E.FLASHLIGHT:this.writer.writePos(r),this.writer.writeShort(o||0);break;case E.FORCEWALL:this.writer.writePos(r),this.writer.writePos(n||{x:0,y:0,z:0}),this.writer.writeByte(a||0);break;case E.STEAM:this.writer.writeShort(-1),this.writer.writeByte(s||0),this.writer.writePos(r),this.writer.writeDir(i||{x:0,y:0,z:0}),this.writer.writeByte(a||0),this.writer.writeShort(0);break;case E.WIDOWBEAMOUT:this.writer.writeShort(0);case E.HEATBEAM:case E.MONSTER_HEATBEAM:this.writer.writeShort(o||0),this.writer.writePos(r),this.writer.writePos(n||{x:0,y:0,z:0}),this.writer.writeDir(i||{x:0,y:0,z:0});break;default:console.warn(`writeTempEntity: Unhandled type ${e}`);break}}writeSound(e,r,n,i,s,a,o,d=0){this.writeCommand(M.sound,d),this.writer.writeByte(e),this.writer.writeByte(r),e&1&&this.writer.writeByte(n||0),e&2&&this.writer.writeByte(i||0),e&16&&this.writer.writeByte(s||0),e&8&&this.writer.writeShort(a||0),e&4&&o&&(this.writer.writeCoord(o.x),this.writer.writeCoord(o.y),this.writer.writeCoord(o.z))}writeDisconnect(e=0){this.writeCommand(M.disconnect,e)}writeReconnect(e=0){this.writeCommand(M.reconnect,e)}writeFrame(e,r){this.writeCommand(M.frame,r),this.writer.writeLong(e.serverFrame),this.writer.writeLong(e.deltaFrame),r!==25&&r!==26&&this.writer.writeByte(e.surpressCount),this.writer.writeByte(e.areaBytes),e.areaBytes>0&&this.writer.writeBytes(e.areaBits),this.writeCommand(M.playerinfo,r),this.writePlayerState(e.playerState),this.writePacketEntities(e.packetEntities.entities,e.packetEntities.delta,r)}writePlayerState(e){let r=0;e.pm_type!==0&&(r|=1),(e.origin.x!==0||e.origin.y!==0||e.origin.z!==0)&&(r|=2),(e.velocity.x!==0||e.velocity.y!==0||e.velocity.z!==0)&&(r|=4),e.pm_time!==0&&(r|=8),e.pm_flags!==0&&(r|=16),e.gravity!==0&&(r|=32),(e.delta_angles.x!==0||e.delta_angles.y!==0||e.delta_angles.z!==0)&&(r|=64),(e.viewoffset.x!==0||e.viewoffset.y!==0||e.viewoffset.z!==0)&&(r|=128),(e.viewangles.x!==0||e.viewangles.y!==0||e.viewangles.z!==0)&&(r|=256),(e.kick_angles.x!==0||e.kick_angles.y!==0||e.kick_angles.z!==0)&&(r|=512),(e.blend[0]!==0||e.blend[1]!==0||e.blend[2]!==0||e.blend[3]!==0)&&(r|=1024),e.gun_index!==0&&(r|=4096),(e.gun_frame!==0||e.gun_offset.x!==0||e.gun_offset.y!==0||e.gun_offset.z!==0||e.gun_angles.x!==0||e.gun_angles.y!==0||e.gun_angles.z!==0)&&(r|=8192),e.fov!==0&&(r|=2048),e.rdflags!==0&&(r|=16384),this.writer.writeShort(r),r&1&&this.writer.writeByte(e.pm_type),r&2&&(this.writer.writeCoord(e.origin.x),this.writer.writeCoord(e.origin.y),this.writer.writeCoord(e.origin.z)),r&4&&(this.writer.writeCoord(e.velocity.x),this.writer.writeCoord(e.velocity.y),this.writer.writeCoord(e.velocity.z)),r&8&&this.writer.writeByte(e.pm_time),r&16&&this.writer.writeByte(e.pm_flags),r&32&&this.writer.writeShort(e.gravity),r&64&&(this.writer.writeShort(Math.round(e.delta_angles.x*(32768/180))),this.writer.writeShort(Math.round(e.delta_angles.y*(32768/180))),this.writer.writeShort(Math.round(e.delta_angles.z*(32768/180)))),r&128&&(this.writer.writeChar(Math.round(e.viewoffset.x*4)),this.writer.writeChar(Math.round(e.viewoffset.y*4)),this.writer.writeChar(Math.round(e.viewoffset.z*4))),r&256&&(this.writer.writeAngle16(e.viewangles.x),this.writer.writeAngle16(e.viewangles.y),this.writer.writeAngle16(e.viewangles.z)),r&512&&(this.writer.writeChar(Math.round(e.kick_angles.x*4)),this.writer.writeChar(Math.round(e.kick_angles.y*4)),this.writer.writeChar(Math.round(e.kick_angles.z*4))),r&4096&&this.writer.writeByte(e.gun_index),r&8192&&(this.writer.writeByte(e.gun_frame),this.writer.writeChar(Math.round(e.gun_offset.x*4)),this.writer.writeChar(Math.round(e.gun_offset.y*4)),this.writer.writeChar(Math.round(e.gun_offset.z*4)),this.writer.writeChar(Math.round(e.gun_angles.x*4)),this.writer.writeChar(Math.round(e.gun_angles.y*4)),this.writer.writeChar(Math.round(e.gun_angles.z*4))),r&1024&&(this.writer.writeByte(e.blend[0]),this.writer.writeByte(e.blend[1]),this.writer.writeByte(e.blend[2]),this.writer.writeByte(e.blend[3])),r&2048&&this.writer.writeByte(e.fov),r&16384&&this.writer.writeByte(e.rdflags);let n=0;for(let i=0;i<32;i++)e.stats[i]!==0&&(n|=1<<i);this.writer.writeLong(n);for(let i=0;i<32;i++)n&1<<i&&this.writer.writeShort(e.stats[i])}writePacketEntities(e,r,n){this.writeCommand(r?M.deltapacketentities:M.packetentities,n);for(let i of e){let s=!r;this.writeEntityState(i,null,s,n)}this.writer.writeShort(0)}writeEntityState(e,r,n,i){let s=0,a=0;e.bits!==0&&!n?(s=e.bits,a=e.bitsHigh):(e.modelindex!==0&&(s|=Mr),e.modelindex2!==0&&(s|=Tr),e.modelindex3!==0&&(s|=Cr),e.modelindex4!==0&&(s|=Ir),e.frame!==0&&(e.frame>=256?s|=Lr:s|=vr),e.skinnum!==0&&(e.skinnum>=256?s|=St:s|=_t),e.effects!==0&&(e.effects>=256?s|=wt:s|=xt),e.renderfx!==0&&(e.renderfx>=256?s|=vt:s|=bt),e.origin.x!==0&&(s|=yr),e.origin.y!==0&&(s|=br),e.origin.z!==0&&(s|=Sr),e.angles.x!==0&&(s|=Ar),e.angles.y!==0&&(s|=xr),e.angles.z!==0&&(s|=_r),(e.old_origin.x!==0||e.old_origin.y!==0||e.old_origin.z!==0)&&(s|=kr),e.sound!==0&&(s|=Rr),e.event!==0&&(s|=wr),e.solid!==0&&(s|=Pr),i>=2023&&(e.alpha!==0&&(s|=Er),e.scale!==0&&(s|=Fr),e.instanceBits!==0&&(s|=Br),e.loopVolume!==0&&(s|=Dr),e.loopAttenuation!==0&&(a|=Or),e.owner!==0&&(a|=zr),e.oldFrame!==0&&(a|=Nr)),e.number>=256&&(s|=Do)),a!==0&&(s|=No),(s&4278190080)!==0&&(s|=zo),(s&16711680)!==0&&(s|=Oo),(s&65280)!==0&&(s|=Ks),this.writer.writeByte(s&255),s&Ks&&this.writer.writeByte(s>>8&255),s&Oo&&this.writer.writeByte(s>>16&255),s&zo&&this.writer.writeByte(s>>24&255),i>=2023&&s&No&&this.writer.writeByte(a&255),s&Do?this.writer.writeShort(e.number):this.writer.writeByte(e.number),s&Mr&&this.writer.writeByte(e.modelindex),s&Tr&&this.writer.writeByte(e.modelindex2),s&Cr&&this.writer.writeByte(e.modelindex3),s&Ir&&this.writer.writeByte(e.modelindex4),s&vr&&this.writer.writeByte(e.frame),s&Lr&&this.writer.writeShort(e.frame),s&_t&&s&St?this.writer.writeLong(e.skinnum):s&_t?this.writer.writeByte(e.skinnum):s&St&&this.writer.writeShort(e.skinnum),s&xt&&s&wt?this.writer.writeLong(e.effects):s&xt?this.writer.writeByte(e.effects):s&wt&&this.writer.writeShort(e.effects),s&bt&&s&vt?this.writer.writeLong(e.renderfx):s&bt?this.writer.writeByte(e.renderfx):s&vt&&this.writer.writeShort(e.renderfx),s&yr&&this.writer.writeCoord(e.origin.x),s&br&&this.writer.writeCoord(e.origin.y),s&Sr&&this.writer.writeCoord(e.origin.z),s&Ar&&this.writer.writeAngle(e.angles.x),s&xr&&this.writer.writeAngle(e.angles.y),s&_r&&this.writer.writeAngle(e.angles.z),s&kr&&(this.writer.writeCoord(e.old_origin.x),this.writer.writeCoord(e.old_origin.y),this.writer.writeCoord(e.old_origin.z)),s&Rr&&this.writer.writeByte(e.sound),s&wr&&this.writer.writeByte(e.event),s&Pr&&this.writer.writeShort(e.solid),i>=2023&&(s&Er&&this.writer.writeByte(Math.round(e.alpha*255)),s&Fr&&this.writer.writeFloat(e.scale),s&Br&&this.writer.writeLong(e.instanceBits),s&Dr&&this.writer.writeByte(Math.round(e.loopVolume*255)),a&Or&&this.writer.writeByte(Math.round(e.loopAttenuation*255)),a&zr&&this.writer.writeShort(e.owner),a&Nr&&this.writer.writeShort(e.oldFrame))}};var Vo=class{constructor(){this.writer=new Vr}writeBlock(e){this.writer.writeLong(e.byteLength),this.writer.writeBytes(e)}writeEOF(){this.writer.writeLong(-1)}getData(){return this.writer.getData()}};function Go(t,e){let r=e.bits,n=e.bitsHigh;t.number=e.number,r&Mr&&(t.modelindex=e.modelindex),r&Tr&&(t.modelindex2=e.modelindex2),r&Cr&&(t.modelindex3=e.modelindex3),r&Ir&&(t.modelindex4=e.modelindex4),r&vr&&(t.frame=e.frame),r&Lr&&(t.frame=e.frame),(r&_t||r&St)&&(t.skinnum=e.skinnum),(r&xt||r&wt)&&(t.effects=e.effects),(r&bt||r&vt)&&(t.renderfx=e.renderfx),r&yr&&(t.origin.x=e.origin.x),r&br&&(t.origin.y=e.origin.y),r&Sr&&(t.origin.z=e.origin.z),r&Ar&&(t.angles.x=e.angles.x),r&xr&&(t.angles.y=e.angles.y),r&_r&&(t.angles.z=e.angles.z),r&kr&&(t.old_origin.x=e.old_origin.x,t.old_origin.y=e.old_origin.y,t.old_origin.z=e.old_origin.z),r&Rr&&(t.sound=e.sound),r&wr&&(t.event=e.event),r&Pr&&(t.solid=e.solid),r&Er&&(t.alpha=e.alpha),r&Fr&&(t.scale=e.scale),r&Br&&(t.instanceBits=e.instanceBits),r&Dr&&(t.loopVolume=e.loopVolume),n&Or&&(t.loopAttenuation=e.loopAttenuation),n&zr&&(t.owner=e.owner),n&Nr&&(t.oldFrame=e.oldFrame)}var Wo=class{extractClip(e,r,n,i){let s=new je(e.buffer),a=r.type==="frame"?r.frame:i.timeToFrame(r.seconds),o=n.type==="frame"?n.frame:i.timeToFrame(n.seconds);if(!s.seekToMessage(a))throw new Error(`Start frame ${a} out of bounds`);let d=s.getOffset(),l=e.byteLength;s.seekToMessage(o+1)&&(l=s.getOffset());let c=e.slice(d,l),f=new Uint8Array(c.length+4);return f.set(c),new DataView(f.buffer).setInt32(c.length,-1,!0),f}extractDemoRange(e,r,n){let i=new Vt;return i.loadDemo(e.buffer),this.extractClip(e,{type:"frame",frame:r},{type:"frame",frame:n},i)}async captureWorldState(e,r){let n=new Vt;n.loadDemo(e.buffer);let i={serverData:{protocol:0,serverCount:0,attractLoop:0,gameDir:"",playerNum:0,levelName:""},configStrings:new Map,entityBaselines:new Map,playerState:gn(),currentEntities:new Map,currentFrameNumber:0},s={onServerData:(o,d,l,c,f,u,h,m)=>{i.serverData={protocol:o,serverCount:d,attractLoop:l,gameDir:c,playerNum:f,levelName:u,tickRate:h,demoType:m}},onConfigString:(o,d)=>{i.configStrings.set(o,d)},onSpawnBaseline:o=>{i.entityBaselines.set(o.number,{...o})},onFrame:o=>{i.playerState={...o.playerState},i.currentFrameNumber=o.serverFrame,o.packetEntities.delta||i.currentEntities.clear();let d=new Map;if(o.packetEntities.delta)for(let[l,c]of i.currentEntities)d.set(l,c);for(let l of o.packetEntities.entities){if(l.bits&$s){d.delete(l.number);continue}let c=d.get(l.number);if(c)c={...c};else{let f=i.entityBaselines.get(l.number);f?c={...f}:(c=Ht(),c.number=l.number)}Go(c,l),d.set(l.number,c)}i.currentEntities=d},onCenterPrint:()=>{},onStuffText:()=>{},onPrint:()=>{},onSound:()=>{},onTempEntity:()=>{},onLayout:()=>{},onInventory:()=>{},onMuzzleFlash:()=>{},onMuzzleFlash2:()=>{},onDisconnect:()=>{},onReconnect:()=>{},onDownload:()=>{}};n.setHandler(s);let a=r.type==="frame"?r.frame:n.timeToFrame(r.seconds);return n.seek(a),i}extractStandaloneClip(e,r,n,i){let s=new Vo,a=new Ys,o=new Vt;o.loadDemo(e.buffer);let d=r.type==="frame"?r.frame:o.timeToFrame(r.seconds),l=n.type==="frame"?n.frame:o.timeToFrame(n.seconds),{serverData:c}=i;c.protocol>=2023?a.writeServerDataRerelease(c.protocol,c.serverCount,c.demoType||0,c.tickRate||10,c.gameDir,c.playerNum,c.levelName):a.writeServerData(c.protocol,c.serverCount,c.attractLoop,c.gameDir,c.playerNum,c.levelName);for(let[g,p]of i.configStrings)a.writeConfigString(g,p,c.protocol);for(let g of i.entityBaselines.values())a.writeSpawnBaseline(g,c.protocol);let f=Array.from(i.currentEntities.values()),u={serverFrame:0,deltaFrame:-1,surpressCount:0,areaBytes:0,areaBits:new Uint8Array(0),playerState:i.playerState,packetEntities:{delta:!1,entities:f}};a.writeFrame(u,c.protocol),s.writeBlock(a.getData());let h=new Map;h.set(d,0);let m=new je(e.buffer);if(m.seekToMessage(d+1)){let g=d+1;for(;g<=l&&m.nextBlock();){let y=m.getBlock().data,_=new Ys,x={onServerData:()=>{},onConfigString:(S,w)=>_.writeConfigString(S,w,c.protocol),onSpawnBaseline:S=>_.writeSpawnBaseline(S,c.protocol),onCenterPrint:S=>_.writeCenterPrint(S,c.protocol),onStuffText:S=>_.writeStuffText(S,c.protocol),onPrint:(S,w)=>_.writePrint(S,w,c.protocol),onSound:(S,w,L,T,A,I,R)=>_.writeSound(S,w,L,T,A,I,R,c.protocol),onLayout:S=>_.writeLayout(S,c.protocol),onInventory:S=>_.writeInventory(S,c.protocol),onMuzzleFlash:(S,w)=>_.writeMuzzleFlash(S,w,c.protocol),onMuzzleFlash2:(S,w)=>_.writeMuzzleFlash2(S,w,c.protocol),onTempEntity:(S,w,L,T,A,I,R,F,k)=>_.writeTempEntity(S,w,L,T,A,I,R,F,k,c.protocol),onDisconnect:()=>_.writeDisconnect(c.protocol),onReconnect:()=>_.writeReconnect(c.protocol),onDownload:()=>{},onFrame:S=>{let w=S.serverFrame,L=S.deltaFrame,T=g-d,A=-1;h.has(L)?A=h.get(L):S.packetEntities.delta=!1,h.set(w,T),S.serverFrame=T,S.deltaFrame=A,_.writeFrame(S,c.protocol)}},b=new it(y,x,!1);b.setProtocolVersion(c.protocol),b.parseMessage();let v=_.getData();v.byteLength>0&&s.writeBlock(v),g++}}return s.writeEOF(),s.getData()}};var $c=(u=>(u.Unknown="unknown",u.BSP="bsp",u.MD2="md2",u.MD3="md3",u.WAL="wal",u.PCX="pcx",u.TGA="tga",u.WAV="wav",u.OGG="ogg",u.TXT="txt",u.CFG="cfg",u.DEM="dem",u))($c||{}),Ih={".bsp":"bsp",".md2":"md2",".md3":"md3",".wal":"wal",".pcx":"pcx",".tga":"tga",".wav":"wav",".ogg":"ogg",".txt":"txt",".cfg":"cfg",".dm2":"dem"};function qs(t,e){if(t.length<e.length)return!1;for(let r=0;r<e.length;r++)if(t[r]!==e[r])return!1;return!0}var Vb=[73,66,83,80],Gb=[73,68,80,50],Wb=[73,68,80,51];var Xb=[82,73,70,70];var Kb=[79,103,103,83];function Zc(t,e){let r=t.slice(t.lastIndexOf(".")).toLowerCase();if(e){if(qs(e,Vb))return"bsp";if(qs(e,Gb))return"md2";if(qs(e,Wb))return"md3";if(qs(e,Kb))return"ogg";if(e.length>128&&e[0]===10&&e[1]<6)return"pcx";if(qs(e,Xb)&&e.length>=12&&e[8]===87&&e[9]===65&&e[10]===86&&e[11]===69)return"wav"}return Ih[r]?Ih[r]:"unknown"}function Yc(t){let e=Zc(t);return e==="txt"||e==="cfg"}function kh(t){return!Yc(t)}function $b(t,e,r,n,i){let s=new Uint8ClampedArray(n*i*4),a=e/n,o=r/i;for(let d=0;d<i;d++)for(let l=0;l<n;l++){let c=l*a,f=d*o,u=Math.floor(c),h=Math.floor(f),m=c-u,g=f-h,p=Math.min(u+1,e-1),y=Math.min(h+1,r-1),_=(h*e+u)*4,x=(h*e+p)*4,b=(y*e+u)*4,v=(y*e+p)*4,S=(d*n+l)*4;for(let w=0;w<4;w++){let L=t[_+w],T=t[x+w],A=t[b+w],I=t[v+w],R=L*(1-m)+T*m,F=A*(1-m)+I*m,k=R*(1-g)+F*g;s[S+w]=k}}return s}function Zb(t,e,r,n,i,s,a,o,d,l,c){n=Math.floor(n),i=Math.floor(i),s=Math.floor(s),a=Math.floor(a);let f=Math.abs(s-n),u=Math.abs(a-i),h=n<s?1:-1,m=i<a?1:-1,g=f-u;for(;;){if(n>=0&&n<e&&i>=0&&i<r){let y=(i*e+n)*4,_=1-c/255;t[y]=o*(c/255)+t[y]*_,t[y+1]=d*(c/255)+t[y+1]*_,t[y+2]=l*(c/255)+t[y+2]*_,t[y+3]=255}if(n===s&&i===a)break;let p=2*g;p>-u&&(g-=u,n+=h),p<f&&(g+=f,i+=m)}}function Rh(t,e,r,n,i){let o=(t.x-n.x)*.707-(t.y-n.y)*.707,d=(t.x-n.x)*.707+(t.y-n.y)*.707,l=t.z-n.z,c=.866,f=.5,u=d*c-l*f,h=d*f+l*c,m=e/2+o*i,g=r/2-h*i;return{x:m,y:g}}var Xo=class{constructor(e){this.assetManager=e}async generateTextureThumbnail(e,r){try{let n=await this.assetManager.loadTexture(e);if(!n||n.levels.length===0)return null;let i=n.levels[0],s=i.width/i.height,a=r,o=r;s>1?o=Math.floor(r/s):a=Math.floor(r*s),a=Math.max(1,a),o=Math.max(1,o);let d=$b(i.rgba,i.width,i.height,a,o);return new ImageData(d,a,o)}catch(n){return console.error(`Failed to generate thumbnail for ${e}`,n),null}}async generateModelThumbnail(e,r){try{let n=[],i=[],s=e.split(".").pop()?.toLowerCase();if(s==="md2"){let p=await this.assetManager.loadMd2Model(e);if(!p||p.frames.length===0)return null;n=p.frames[0].vertices.map(_=>_.position);for(let _ of p.triangles)i.push(_.vertexIndices[0],_.vertexIndices[1]),i.push(_.vertexIndices[1],_.vertexIndices[2]),i.push(_.vertexIndices[2],_.vertexIndices[0])}else if(s==="md3"){let p=await this.assetManager.loadMd3Model(e);if(!p||p.surfaces.length===0)return null;let y=0;for(let _ of p.surfaces){if(_.vertices.length===0)continue;let x=_.vertices[0];n.push(...x.map(b=>({x:b.position.x,y:b.position.y,z:b.position.z})));for(let b of _.triangles)i.push(y+b.indices[0],y+b.indices[1]),i.push(y+b.indices[1],y+b.indices[2]),i.push(y+b.indices[2],y+b.indices[0]);y+=x.length}}else return null;if(n.length===0)return null;let a={x:1/0,y:1/0,z:1/0},o={x:-1/0,y:-1/0,z:-1/0};for(let p of n)a.x=Math.min(a.x,p.x),a.y=Math.min(a.y,p.y),a.z=Math.min(a.z,p.z),o.x=Math.max(o.x,p.x),o.y=Math.max(o.y,p.y),o.z=Math.max(o.z,p.z);let d={x:(a.x+o.x)/2,y:(a.y+o.y)/2,z:(a.z+o.z)/2},l=o.x-a.x,c=o.y-a.y,f=o.z-a.z,u=Math.max(l,c,f),h=Math.max(u,.001),m=r*.8/h,g=new Uint8ClampedArray(r*r*4);for(let p=0;p<i.length;p+=2){let y=i[p],_=i[p+1],x=n[y],b=n[_],v=Rh(x,r,r,d,m),S=Rh(b,r,r,d,m);Zb(g,r,r,v.x,v.y,S.x,S.y,0,255,0,255)}return new ImageData(g,r,r)}catch(n){return console.error(`Failed to generate model thumbnail for ${e}`,n),null}}async getMapBounds(e,r){try{let n=Ai(r);if(n.models.length>0){let i=n.models[0];return{mins:{x:i.mins[0],y:i.mins[1],z:i.mins[2]},maxs:{x:i.maxs[0],y:i.maxs[1],z:i.maxs[2]}}}return null}catch(n){return console.error("Failed to get map bounds",n),null}}async extractMapScreenshot(e){return null}};var Ko=class{constructor(e){this.loader=e}async getMapStatistics(e){let r=await this.loader.load(e),n=r.faces.filter(a=>a.lightOffset!==-1).length,i=r.models[0],s=i?{mins:i.mins,maxs:i.maxs}:{mins:[0,0,0],maxs:[0,0,0]};return{entityCount:r.entities.entities.length,surfaceCount:r.faces.length,lightmapCount:n,vertexCount:r.vertices.length,bounds:s}}async getUsedTextures(e){let r=await this.loader.load(e),n=new Set;for(let i of r.texInfo)i.texture&&n.add(i.texture);return Array.from(n).sort()}async getUsedModels(e){let r=await this.loader.load(e),n=new Set;for(let i of r.entities.entities)i.properties.model&&!i.properties.model.startsWith("*")&&n.add(i.properties.model);return Array.from(n).sort()}async getUsedSounds(e){let r=await this.loader.load(e),n=new Set;for(let i of r.entities.entities){i.properties.noise&&n.add(i.properties.noise);for(let[s,a]of Object.entries(i.properties))(s==="noise"||s.endsWith("_sound")||s==="sound")&&typeof a=="string"&&n.add(a)}return Array.from(n).sort()}};function Ph(t){let e=[],r=0,n=t.length;function i(){for(;r<n&&/\s/.test(t[r]);)r++}function s(){if(i(),r>=n)return null;if(t[r]==='"'){r++;let a=r;for(;r<n&&t[r]!=='"';)t[r],r++;let o=t.substring(a,r);return r++,o}else{if(t[r]==="{"||t[r]==="}")return t[r++];{if(t.startsWith("//",r)){for(;r<n&&t[r]!==`
583
583
  `;)r++;return s()}let a=r;for(;r<n&&!/\s/.test(t[r])&&t[r]!=="}"&&t[r]!=="{";)r++;return t.substring(a,r)}}}for(;r<n;){let a=s();if(a===null)break;if(a==="{"){let o={};for(;;){let d=r,l=s();if(l==="}"||l===null)break;if(l==="{"){r=d;break}let c=s();if(c===null||c==="}"||c==="{"){c==="}"&&r--,c==="{"&&r--;break}o[l]=c}e.push({classname:o.classname,properties:o})}}return e}function Fh(t){let e="";for(let r of t){e+=`{
584
584
  `;let i=Object.keys(r.properties).sort((s,a)=>s==="classname"?-1:a==="classname"?1:s==="origin"?-1:a==="origin"?1:s.localeCompare(a));for(let s of i){let a=r.properties[s];e+=`"${s}" "${a}"
585
585
  `}e+=`}
586
- `}return e}function zh(t){let e=[],r=[];if(t.properties.classname||e.push('Missing "classname" property'),t.properties.origin){let n=t.properties.origin.split(" ");(n.length!==3||n.some(i=>isNaN(parseFloat(i))))&&e.push(`Invalid origin format: "${t.properties.origin}"`)}return t.properties.angle&&isNaN(parseFloat(t.properties.angle))&&e.push(`Invalid angle format: "${t.properties.angle}"`),{valid:e.length===0,errors:e,warnings:r}}function qb(t){return{init(){t.trace({x:0,y:0,z:0},{x:0,y:0,z:0})},shutdown(){},createMainLoop(e,r){return new Ur(e,r)}}}return Xh(jb);})();
586
+ `}return e}function Bh(t){let e=[],r=[];if(t.properties.classname||e.push('Missing "classname" property'),t.properties.origin){let n=t.properties.origin.split(" ");(n.length!==3||n.some(i=>isNaN(parseFloat(i))))&&e.push(`Invalid origin format: "${t.properties.origin}"`)}return t.properties.angle&&isNaN(parseFloat(t.properties.angle))&&e.push(`Invalid angle format: "${t.properties.angle}"`),{valid:e.length===0,errors:e,warnings:r}}function Yb(t){return{init(){t.trace({x:0,y:0,z:0},{x:0,y:0,z:0})},shutdown(){},createMainLoop(e,r){return new Hr(e,r)}}}return Xh(qb);})();
587
587
  /*! Bundled license information:
588
588
 
589
589
  pako/dist/pako.esm.mjs: