quake2ts 0.0.7 → 0.0.39

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 (177) hide show
  1. package/README.md +425 -0
  2. package/apps/viewer/dist/browser/index.global.js +1 -1
  3. package/apps/viewer/dist/browser/index.global.js.map +1 -1
  4. package/apps/viewer/dist/cjs/index.cjs +2097 -295
  5. package/apps/viewer/dist/cjs/index.cjs.map +1 -1
  6. package/apps/viewer/dist/esm/index.js +2097 -295
  7. package/apps/viewer/dist/esm/index.js.map +1 -1
  8. package/apps/viewer/dist/tsconfig.tsbuildinfo +1 -1
  9. package/apps/viewer/dist/types/index.d.ts +1 -1
  10. package/package.json +1 -1
  11. package/packages/client/dist/browser/index.global.js +1 -1
  12. package/packages/client/dist/browser/index.global.js.map +1 -1
  13. package/packages/client/dist/cjs/index.cjs +1200 -13
  14. package/packages/client/dist/cjs/index.cjs.map +1 -1
  15. package/packages/client/dist/esm/index.js +1186 -12
  16. package/packages/client/dist/esm/index.js.map +1 -1
  17. package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
  18. package/packages/client/dist/types/index.d.ts +14 -6
  19. package/packages/client/dist/types/index.d.ts.map +1 -1
  20. package/packages/client/dist/types/input/bindings.d.ts +18 -0
  21. package/packages/client/dist/types/input/bindings.d.ts.map +1 -0
  22. package/packages/client/dist/types/input/command-buffer.d.ts +15 -0
  23. package/packages/client/dist/types/input/command-buffer.d.ts.map +1 -0
  24. package/packages/client/dist/types/input/controller.d.ts +125 -0
  25. package/packages/client/dist/types/input/controller.d.ts.map +1 -0
  26. package/packages/client/dist/types/prediction.d.ts +38 -0
  27. package/packages/client/dist/types/prediction.d.ts.map +1 -0
  28. package/packages/client/dist/types/view-effects.d.ts +41 -0
  29. package/packages/client/dist/types/view-effects.d.ts.map +1 -0
  30. package/packages/engine/dist/browser/index.global.js +257 -1
  31. package/packages/engine/dist/browser/index.global.js.map +1 -1
  32. package/packages/engine/dist/cjs/index.cjs +2408 -2
  33. package/packages/engine/dist/cjs/index.cjs.map +1 -1
  34. package/packages/engine/dist/esm/index.js +2340 -2
  35. package/packages/engine/dist/esm/index.js.map +1 -1
  36. package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
  37. package/packages/engine/dist/types/assets/animation.d.ts +33 -0
  38. package/packages/engine/dist/types/assets/animation.d.ts.map +1 -0
  39. package/packages/engine/dist/types/assets/audio.d.ts +21 -0
  40. package/packages/engine/dist/types/assets/audio.d.ts.map +1 -0
  41. package/packages/engine/dist/types/assets/bsp.d.ts +1 -1
  42. package/packages/engine/dist/types/assets/bsp.d.ts.map +1 -1
  43. package/packages/engine/dist/types/assets/ingestion.d.ts +31 -0
  44. package/packages/engine/dist/types/assets/ingestion.d.ts.map +1 -1
  45. package/packages/engine/dist/types/assets/manager.d.ts +43 -0
  46. package/packages/engine/dist/types/assets/manager.d.ts.map +1 -0
  47. package/packages/engine/dist/types/assets/md3.d.ts +69 -0
  48. package/packages/engine/dist/types/assets/md3.d.ts.map +1 -0
  49. package/packages/engine/dist/types/assets/ogg.d.ts +12 -0
  50. package/packages/engine/dist/types/assets/ogg.d.ts.map +1 -0
  51. package/packages/engine/dist/types/assets/pakIndexStore.d.ts +19 -0
  52. package/packages/engine/dist/types/assets/pakIndexStore.d.ts.map +1 -0
  53. package/packages/engine/dist/types/assets/pakValidation.d.ts +28 -0
  54. package/packages/engine/dist/types/assets/pakValidation.d.ts.map +1 -0
  55. package/packages/engine/dist/types/assets/pcx.d.ts +13 -0
  56. package/packages/engine/dist/types/assets/pcx.d.ts.map +1 -0
  57. package/packages/engine/dist/types/assets/texture.d.ts +29 -0
  58. package/packages/engine/dist/types/assets/texture.d.ts.map +1 -0
  59. package/packages/engine/dist/types/assets/wal.d.ts +21 -0
  60. package/packages/engine/dist/types/assets/wal.d.ts.map +1 -0
  61. package/packages/engine/dist/types/assets/wav.d.ts +11 -0
  62. package/packages/engine/dist/types/assets/wav.d.ts.map +1 -0
  63. package/packages/engine/dist/types/audio/api.d.ts +29 -0
  64. package/packages/engine/dist/types/audio/api.d.ts.map +1 -0
  65. package/packages/engine/dist/types/audio/channels.d.ts +15 -0
  66. package/packages/engine/dist/types/audio/channels.d.ts.map +1 -0
  67. package/packages/engine/dist/types/audio/constants.d.ts +24 -0
  68. package/packages/engine/dist/types/audio/constants.d.ts.map +1 -0
  69. package/packages/engine/dist/types/audio/context.d.ts +67 -0
  70. package/packages/engine/dist/types/audio/context.d.ts.map +1 -0
  71. package/packages/engine/dist/types/audio/music.d.ts +42 -0
  72. package/packages/engine/dist/types/audio/music.d.ts.map +1 -0
  73. package/packages/engine/dist/types/audio/precache.d.ts +28 -0
  74. package/packages/engine/dist/types/audio/precache.d.ts.map +1 -0
  75. package/packages/engine/dist/types/audio/registry.d.ts +13 -0
  76. package/packages/engine/dist/types/audio/registry.d.ts.map +1 -0
  77. package/packages/engine/dist/types/audio/spatialization.d.ts +14 -0
  78. package/packages/engine/dist/types/audio/spatialization.d.ts.map +1 -0
  79. package/packages/engine/dist/types/audio/system.d.ts +101 -0
  80. package/packages/engine/dist/types/audio/system.d.ts.map +1 -0
  81. package/packages/engine/dist/types/configstrings.d.ts +1 -0
  82. package/packages/engine/dist/types/configstrings.d.ts.map +1 -1
  83. package/packages/engine/dist/types/index.d.ts +26 -1
  84. package/packages/engine/dist/types/index.d.ts.map +1 -1
  85. package/packages/engine/dist/types/render/bspPipeline.d.ts +42 -0
  86. package/packages/engine/dist/types/render/bspPipeline.d.ts.map +1 -0
  87. package/packages/engine/dist/types/render/bspTraversal.d.ts +11 -0
  88. package/packages/engine/dist/types/render/bspTraversal.d.ts.map +1 -0
  89. package/packages/engine/dist/types/render/culling.d.ts +8 -0
  90. package/packages/engine/dist/types/render/culling.d.ts.map +1 -0
  91. package/packages/engine/dist/types/render/md2Pipeline.d.ts +51 -0
  92. package/packages/engine/dist/types/render/md2Pipeline.d.ts.map +1 -0
  93. package/packages/engine/dist/types/render/resources.d.ts +10 -0
  94. package/packages/engine/dist/types/render/resources.d.ts.map +1 -1
  95. package/packages/engine/dist/types/render/skybox.d.ts +26 -0
  96. package/packages/engine/dist/types/render/skybox.d.ts.map +1 -0
  97. package/packages/game/dist/browser/index.global.js +1 -1
  98. package/packages/game/dist/browser/index.global.js.map +1 -1
  99. package/packages/game/dist/cjs/index.cjs +2926 -116
  100. package/packages/game/dist/cjs/index.cjs.map +1 -1
  101. package/packages/game/dist/esm/index.js +2863 -115
  102. package/packages/game/dist/esm/index.js.map +1 -1
  103. package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
  104. package/packages/game/dist/types/ai/constants.d.ts +13 -0
  105. package/packages/game/dist/types/ai/constants.d.ts.map +1 -0
  106. package/packages/game/dist/types/ai/index.d.ts +4 -0
  107. package/packages/game/dist/types/ai/index.d.ts.map +1 -0
  108. package/packages/game/dist/types/ai/movement.d.ts +20 -0
  109. package/packages/game/dist/types/ai/movement.d.ts.map +1 -0
  110. package/packages/game/dist/types/ai/perception.d.ts +21 -0
  111. package/packages/game/dist/types/ai/perception.d.ts.map +1 -0
  112. package/packages/game/dist/types/checksum.d.ts +3 -0
  113. package/packages/game/dist/types/checksum.d.ts.map +1 -0
  114. package/packages/game/dist/types/combat/armor.d.ts +39 -0
  115. package/packages/game/dist/types/combat/armor.d.ts.map +1 -0
  116. package/packages/game/dist/types/combat/damage.d.ts +52 -0
  117. package/packages/game/dist/types/combat/damage.d.ts.map +1 -0
  118. package/packages/game/dist/types/combat/damageFlags.d.ts +15 -0
  119. package/packages/game/dist/types/combat/damageFlags.d.ts.map +1 -0
  120. package/packages/game/dist/types/combat/damageMods.d.ts +79 -0
  121. package/packages/game/dist/types/combat/damageMods.d.ts.map +1 -0
  122. package/packages/game/dist/types/combat/index.d.ts +6 -0
  123. package/packages/game/dist/types/combat/index.d.ts.map +1 -0
  124. package/packages/game/dist/types/combat/specialDamage.d.ts +88 -0
  125. package/packages/game/dist/types/combat/specialDamage.d.ts.map +1 -0
  126. package/packages/game/dist/types/entities/entity.d.ts +46 -2
  127. package/packages/game/dist/types/entities/entity.d.ts.map +1 -1
  128. package/packages/game/dist/types/entities/index.d.ts +6 -2
  129. package/packages/game/dist/types/entities/index.d.ts.map +1 -1
  130. package/packages/game/dist/types/entities/pool.d.ts +9 -0
  131. package/packages/game/dist/types/entities/pool.d.ts.map +1 -1
  132. package/packages/game/dist/types/entities/spawn.d.ts +27 -0
  133. package/packages/game/dist/types/entities/spawn.d.ts.map +1 -0
  134. package/packages/game/dist/types/entities/system.d.ts +32 -1
  135. package/packages/game/dist/types/entities/system.d.ts.map +1 -1
  136. package/packages/game/dist/types/entities/thinkScheduler.d.ts +6 -0
  137. package/packages/game/dist/types/entities/thinkScheduler.d.ts.map +1 -1
  138. package/packages/game/dist/types/entities/triggers.d.ts +3 -0
  139. package/packages/game/dist/types/entities/triggers.d.ts.map +1 -0
  140. package/packages/game/dist/types/entities/utils.d.ts +4 -0
  141. package/packages/game/dist/types/entities/utils.d.ts.map +1 -0
  142. package/packages/game/dist/types/index.d.ts +5 -0
  143. package/packages/game/dist/types/index.d.ts.map +1 -1
  144. package/packages/game/dist/types/inventory/ammo.d.ts +17 -0
  145. package/packages/game/dist/types/inventory/ammo.d.ts.map +1 -0
  146. package/packages/game/dist/types/inventory/index.d.ts +2 -0
  147. package/packages/game/dist/types/inventory/index.d.ts.map +1 -0
  148. package/packages/game/dist/types/level.d.ts +1 -0
  149. package/packages/game/dist/types/level.d.ts.map +1 -1
  150. package/packages/game/dist/types/save/index.d.ts +4 -0
  151. package/packages/game/dist/types/save/index.d.ts.map +1 -0
  152. package/packages/game/dist/types/save/rerelease.d.ts +25 -0
  153. package/packages/game/dist/types/save/rerelease.d.ts.map +1 -0
  154. package/packages/game/dist/types/save/save.d.ts +49 -0
  155. package/packages/game/dist/types/save/save.d.ts.map +1 -0
  156. package/packages/game/dist/types/save/storage.d.ts +37 -0
  157. package/packages/game/dist/types/save/storage.d.ts.map +1 -0
  158. package/packages/shared/dist/browser/index.global.js +1 -1
  159. package/packages/shared/dist/browser/index.global.js.map +1 -1
  160. package/packages/shared/dist/cjs/index.cjs +638 -9
  161. package/packages/shared/dist/cjs/index.cjs.map +1 -1
  162. package/packages/shared/dist/esm/index.js +616 -9
  163. package/packages/shared/dist/esm/index.js.map +1 -1
  164. package/packages/shared/dist/tsconfig.tsbuildinfo +1 -1
  165. package/packages/shared/dist/types/bsp/collision.d.ts +56 -0
  166. package/packages/shared/dist/types/bsp/collision.d.ts.map +1 -1
  167. package/packages/shared/dist/types/bsp/contents.d.ts +1 -0
  168. package/packages/shared/dist/types/bsp/contents.d.ts.map +1 -1
  169. package/packages/shared/dist/types/index.d.ts +2 -0
  170. package/packages/shared/dist/types/index.d.ts.map +1 -1
  171. package/packages/shared/dist/types/math/random.d.ts +11 -0
  172. package/packages/shared/dist/types/math/random.d.ts.map +1 -1
  173. package/packages/shared/dist/types/protocol/contracts.d.ts +17 -0
  174. package/packages/shared/dist/types/protocol/contracts.d.ts.map +1 -0
  175. package/packages/shared/dist/types/protocol/usercmd.d.ts +30 -0
  176. package/packages/shared/dist/types/protocol/usercmd.d.ts.map +1 -0
  177. package/packages/tools/dist/tsconfig.tsbuildinfo +1 -1
@@ -1,2 +1,258 @@
1
- "use strict";var Quake2Engine=(()=>{var $=Object.defineProperty;var Me=Object.getOwnPropertyDescriptor;var Ce=Object.getOwnPropertyNames;var Fe=Object.prototype.hasOwnProperty;var Pe=(t,e)=>{for(var r in e)$(t,r,{get:e[r],enumerable:!0})},ke=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Ce(e))!Fe.call(t,o)&&o!==r&&$(t,o,{get:()=>e[o],enumerable:!(n=Me(e,o))||n.enumerable});return t};var De=t=>ke($({},"__esModule",{value:!0}),t);var Et={};Pe(Et,{BSP_VERTEX_LAYOUT:()=>ce,ConfigStringRegistry:()=>U,Cvar:()=>F,CvarRegistry:()=>V,EngineHost:()=>T,EngineRuntime:()=>C,FixedTimestepLoop:()=>E,Framebuffer:()=>K,IndexBuffer:()=>L,LruCache:()=>X,Md2Loader:()=>Y,Md2ParseError:()=>y,PakArchive:()=>b,PakIngestionError:()=>w,PakParseError:()=>h,ShaderProgram:()=>k,Texture2D:()=>_,VertexArray:()=>R,VertexBuffer:()=>A,VirtualFileSystem:()=>W,buildBspGeometry:()=>Re,calculatePakChecksum:()=>ge,createEngine:()=>St,createEngineRuntime:()=>he,createProgramFromSources:()=>Le,createWebGLContext:()=>be,filesToPakSources:()=>ae,groupMd2Animations:()=>Te,ingestPakFiles:()=>ve,ingestPaks:()=>H,parseMd2:()=>se,wireDropTarget:()=>ze,wireFileInput:()=>Se});var Ne=()=>typeof performance<"u"?performance.now():Date.now(),Ie=t=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>t()):setTimeout(t,25)},E=class{constructor(e,r={}){this.callbacks=e;this.accumulatorMs=0;this.frame=0;this.running=!1;this.tick=()=>{if(!this.running)return;let e=this.options.now(),r=this.lastTimeMs===void 0?0:e-this.lastTimeMs;this.lastTimeMs=e,this.advance(r,e),this.running&&this.options.schedule(this.tick)};let n=r.fixedDeltaMs??25,o=r.maxSubSteps??5;this.options={fixedDeltaMs:n,maxSubSteps:o,maxDeltaMs:r.maxDeltaMs??n*o,startTimeMs:r.startTimeMs,now:r.now??Ne,schedule:r.schedule??Ie}}start(){this.running||(this.running=!0,this.lastTimeMs=this.options.startTimeMs??this.options.now(),this.options.schedule(this.tick))}stop(){this.running=!1}pump(e){let r=(this.lastTimeMs??0)+e;this.lastTimeMs=r,this.advance(e,r)}isRunning(){return this.running}get frameNumber(){return this.frame}advance(e,r){let n=Math.min(Math.max(e,0),this.options.maxDeltaMs);this.accumulatorMs=Math.min(this.accumulatorMs+n,this.options.fixedDeltaMs*this.options.maxSubSteps);let o=0;for(;this.accumulatorMs>=this.options.fixedDeltaMs&&o<this.options.maxSubSteps;)this.frame+=1,this.callbacks.simulate({frame:this.frame,deltaMs:this.options.fixedDeltaMs,nowMs:r}),this.accumulatorMs-=this.options.fixedDeltaMs,o+=1;let i=this.options.fixedDeltaMs===0?0:this.accumulatorMs/this.options.fixedDeltaMs;this.callbacks.render?.({alpha:i,nowMs:r,accumulatorMs:this.accumulatorMs,frame:this.frame})}};var T=class{constructor(e,r,n={}){this.game=e;this.client=r;this.started=!1;this.stepSimulation=e=>{this.previousFrame=this.latestFrame,this.latestFrame=this.game.frame(e)};this.renderClient=e=>{this.client&&this.client.render({...e,previous:this.previousFrame,latest:this.latestFrame})};let o=n.loop?.now?.()??Date.now();this.startTimeMs=n.startTimeMs??n.loop?.startTimeMs??o,this.loop=new E({simulate:this.stepSimulation,render:this.renderClient},{...n.loop,startTimeMs:this.startTimeMs})}start(){this.started||(this.latestFrame=this.game.init(this.startTimeMs)??this.latestFrame,this.client?.init(this.latestFrame),this.started=!0,this.loop.start())}stop(){this.started&&(this.loop.stop(),this.client?.shutdown(),this.game.shutdown(),this.previousFrame=void 0,this.latestFrame=void 0,this.started=!1)}pump(e){this.loop.pump(e)}getLatestFrame(){return this.latestFrame}isRunning(){return this.loop.isRunning()}};var Lt=Math.PI/180;var Rt=Math.PI/180,_t=180/Math.PI;var v=1,z=2;var Z=8,q=16,Oe=32;var Ge=16384;var N=65536,de=1<<17,Be=1<<18,Ue=1<<19,Ve=1<<20,We=1<<21,He=1<<22,Xe=1<<23,Mt=1<<24,I=1<<25,Ye=1<<26,Ct=1<<27,Ft=1<<28,Pt=1<<29,O=1<<30,kt=1<<31;var fe=0;var Dt=1<<25,Nt=1<<28,It=1<<29,Ot=1<<30,Gt=1<<31;var Bt=v|z,Ut=v|N|z|I|O,Vt=v|N|z,Wt=v|de|z|I|O,Ht=Oe|Z|q,Xt=v|q|Z,Ke=v|I|O|z|Ye,Yt=Be|Ue|Ve|We|He|Xe,Kt=v|Z|q|I|O,Jt=v|N|z,$t=v|z,jt=v|N|z|de,Zt=Ke|Ge;var G=(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))(G||{});var B=256;var Q=256,ee=8192,te=2048,re=512,ne=256,oe=B*2,ie=256,j=32,M=96;var m=(t=>(t[t.Name=0]="Name",t[t.CdTrack=1]="CdTrack",t[t.Sky=2]="Sky",t[t.SkyAxis=3]="SkyAxis",t[t.SkyRotate=4]="SkyRotate",t[t.StatusBar=5]="StatusBar",t[t.AirAccel=59]="AirAccel",t[t.MaxClients=60]="MaxClients",t[t.MapChecksum=61]="MapChecksum",t[t.Models=62]="Models",t[t.Sounds=62+ee]="Sounds",t[t.Images=t.Sounds+te]="Images",t[t.Lights=t.Images+re]="Lights",t[t.ShadowLights=t.Lights+Q]="ShadowLights",t[t.Items=t.ShadowLights+ie]="Items",t[t.PlayerSkins=t.Items+ne]="PlayerSkins",t[t.General=t.PlayerSkins+B]="General",t[t.WheelWeapons=t.General+oe]="WheelWeapons",t[t.WheelAmmo=t.WheelWeapons+j]="WheelAmmo",t[t.WheelPowerups=t.WheelAmmo+j]="WheelPowerups",t[t.CdLoopCount=t.WheelPowerups+j]="CdLoopCount",t[t.GameStyle=t.CdLoopCount+1]="GameStyle",t[t.MaxConfigStrings=t.GameStyle+1]="MaxConfigStrings",t))(m||{}),me=m.MaxConfigStrings;function ye(t){return t>=5&&t<59?M*(59-t):t>=m.General&&t<m.WheelWeapons?M*(m.MaxConfigStrings-t):M}function Je(t){if(t<0||t>=m.MaxConfigStrings)throw new RangeError(`Configstring index ${t} is out of range (0-${m.MaxConfigStrings-1})`)}function pe(t,e){let r=ye(t);if(e.length>r)throw new RangeError(`Configstring ${t} exceeds maximum length (${e.length} > ${r}); limit is ${M} chars per slot`)}var U=class{constructor(){this.values=new Map;this.modelCursor=m.Models;this.soundCursor=m.Sounds;this.imageCursor=m.Images;this.lightCursor=m.Lights;this.shadowLightCursor=m.ShadowLights;this.itemCursor=m.Items;this.playerSkinCursor=m.PlayerSkins;this.generalCursor=m.General}set(e,r){return Je(e),pe(e,r),this.values.set(e,r),e}get(e){return this.values.get(e)}getAll(){let e=new Array(me).fill("");for(let[r,n]of this.values.entries())e[r]=n;return e}modelIndex(e){return this.register(e,m.Models,ee,"modelCursor")}soundIndex(e){return this.register(e,m.Sounds,te,"soundCursor")}imageIndex(e){return this.register(e,m.Images,re,"imageCursor")}lightIndex(e){return this.register(e,m.Lights,Q,"lightCursor")}shadowLightIndex(e){return this.register(e,m.ShadowLights,ie,"shadowLightCursor")}itemIndex(e){return this.register(e,m.Items,ne,"itemCursor")}playerSkinIndex(e){return this.register(e,m.PlayerSkins,B,"playerSkinCursor")}generalIndex(e){return this.register(e,m.General,oe,"generalCursor")}register(e,r,n,o){for(let s=r;s<r+n;s+=1)if(this.values.get(s)===e)return s;let i=this[o],a=r+n;if(i>=a)throw new RangeError(`Out of configstring slots for range starting at ${r}`);return pe(i,e),this.values.set(i,e),this[o]=i+1,i}};var C=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 he(t,e,r,n){return new C(t,new T(e,r,n))}var F=class{constructor({name:e,defaultValue:r,description:n,flags:o=G.None,onChange:i}){this.modifiedCount=0;this.name=e,this.defaultValue=r,this.description=n,this.flags=o,this._value=r,this.onChange=i}get string(){return this._value}get number(){return Number(this._value)}get integer(){return Math.trunc(this.number)}get boolean(){return!!this.integer}set(e){if(this.flags&G.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)}},V=class{constructor(){this.cvars=new Map}register(e){let r=this.cvars.get(e.name);if(r)return r;let n=new F(e);return this.cvars.set(e.name,n),n}get(e){return this.cvars.get(e)}setValue(e,r){let n=this.get(e);if(!n)throw new Error(`Unknown cvar: ${e}`);return n.set(r),n}resetAll(){for(let e of this.cvars.values())e.reset()}applyLatched(){let e=!1;for(let r of this.cvars.values())e=r.applyLatched()||e;return e}list(){return[...this.cvars.values()].sort((e,r)=>e.name.localeCompare(r.name))}};var $e="PACK";function je(t,e,r){let n=[];for(let o=0;o<r;o+=1){let i=t.getUint8(e+o);if(i===0)break;n.push(i)}return String.fromCharCode(...n)}function S(t){return t.replace(/\\/g,"/").replace(/^\/+/,"").toLowerCase()}function Ze(){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 qe=Ze();function xe(t){let e=4294967295;for(let r=0;r<t.length;r+=1){let n=t[r];e=qe[(e^n)&255]^e>>>8}return(e^4294967295)>>>0}var h=class extends Error{},b=class t{constructor(e,r,n,o){this.name=e;this.buffer=r;this.entries=new Map(n.map(i=>[i.name,i])),this.checksum=o,this.size=r.byteLength}static fromArrayBuffer(e,r){let n=new DataView(r);if(r.byteLength<12)throw new h("PAK buffer too small to contain header");let o=String.fromCharCode(n.getUint8(0),n.getUint8(1),n.getUint8(2),n.getUint8(3));if(o!==$e)throw new h(`Invalid PAK header magic: ${o}`);let i=n.getInt32(4,!0),a=n.getInt32(8,!0);if(i<12)throw new h(`Invalid directory offset: ${i}`);if(a<=0||a%64!==0)throw new h(`Invalid directory length: ${a}`);if(i+a>r.byteLength)throw new h("Directory exceeds buffer length");let l=a/64,u=[],c=new Map;for(let d=0;d<l;d+=1){let f=i+d*64,p=je(n,f,56),x=S(p),g=n.getInt32(f+56,!0),D=n.getInt32(f+60,!0);if(g<0||D<0||g+D>r.byteLength)throw new h(`Invalid entry bounds for ${p||"<unnamed>"} (offset=${g}, length=${D})`);if(!x)throw new h(`Entry ${d} has an empty name`);let _e={name:x,offset:g,length:D};c.set(x,_e)}return u.push(...c.values()),new t(e,r,u,xe(new Uint8Array(r)))}getEntry(e){return this.entries.get(S(e))}listEntries(){return Array.from(this.entries.values())}readFile(e){let r=this.getEntry(e);if(!r)throw new h(`File not found in PAK: ${e}`);return new Uint8Array(this.buffer,r.offset,r.length)}validate(){return{checksum:this.checksum,entries:this.listEntries()}}};function ge(t){return xe(new Uint8Array(t))}var W=class{constructor(e=[]){this.mounts=[];this.files=new Map;e.forEach(r=>this.mountPak(r))}mountPak(e){this.mounts.push(e);for(let r of e.listEntries()){let n=S(r.name);this.files.set(n,{archive:e,entry:r})}}get mountedPaks(){return[...this.mounts]}hasFile(e){return this.files.has(S(e))}stat(e){let r=this.files.get(S(e));if(r)return{path:r.entry.name,size:r.entry.length,sourcePak:r.archive.name}}async readFile(e){let r=this.files.get(S(e));if(!r)throw new Error(`File not found in VFS: ${e}`);return r.archive.readFile(e)}list(e=""){let r=S(e).replace(/\/+$|^\//g,""),n=[],o=new Set,i=r?`${r}/`:"";for(let a of this.files.values()){if(r&&!a.entry.name.startsWith(i))continue;let s=r?a.entry.name.slice(i.length):a.entry.name,l=s.indexOf("/");l===-1?n.push({path:a.entry.name,size:a.entry.length,sourcePak:a.archive.name}):o.add(s.slice(0,l))}return n.sort((a,s)=>a.path.localeCompare(s.path)),{files:n,directories:[...o].sort()}}findByExtension(e){let r=e.startsWith(".")?e.toLowerCase():`.${e.toLowerCase()}`,n=[];for(let o of this.files.values())o.entry.name.toLowerCase().endsWith(r)&&n.push({path:o.entry.name,size:o.entry.length,sourcePak:o.archive.name});return n.sort((o,i)=>o.path.localeCompare(i.path))}};var w=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 Qe(t,e){if(typeof t.arrayBuffer=="function"){let r=await t.arrayBuffer();return e?.({file:"blob",loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}if(typeof FileReader<"u")return new Promise((r,n)=>{let o=new FileReader;o.onerror=()=>n(o.error??new Error("Unknown FileReader error")),o.onprogress=i=>{e?.({file:"blob",loadedBytes:i.loaded,totalBytes:i.total||t.size,state:"reading"})},o.onload=()=>{let i=o.result;i instanceof ArrayBuffer?r(i):n(new Error("Unexpected FileReader result"))},o.readAsArrayBuffer(t)});if(typeof Response<"u"){let r=await new Response(t).arrayBuffer();return e?.({file:"blob",loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}if(typeof t.stream=="function"){let r=t.stream().getReader(),n=[],o=0;for(;;){let{done:s,value:l}=await r.read();if(s)break;if(!l)continue;let u=l;n.push(u),o+=u.byteLength,e?.({file:"blob",loadedBytes:o,totalBytes:t.size,state:"reading"})}let i=new Uint8Array(o),a=0;for(let s of n)i.set(s,a),a+=s.byteLength;return i.buffer}throw new w("blob",new Error("Unsupported Blob type"))}async function et(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 Qe(t.data,o=>e?.({...o,file:t.name,totalBytes:n}))}let r=t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength);return e?.({file:t.name,loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}async function H(t,e,r){let n=typeof r=="function"?{onProgress:r}:r??{},o=[];for(let i of e)try{let a=await et(i,n.onProgress),s=b.fromArrayBuffer(i.name,a);t.mountPak(s),n.onProgress?.({file:i.name,loadedBytes:a.byteLength,totalBytes:a.byteLength,state:"parsed"}),o.push({archive:s,mounted:!0})}catch(a){if(n.onProgress?.({file:i.name,loadedBytes:0,totalBytes:0,state:"error"}),n.onError?.(i.name,a),n.stopOnError)throw new w(i.name,a)}return o}var X=class{constructor(e){this.capacity=e;this.map=new Map;if(e<=0)throw new RangeError("LRU cache capacity must be greater than zero")}get size(){return this.map.size}has(e){return this.map.has(e)}get(e){let r=this.map.get(e);if(r!==void 0)return this.map.delete(e),this.map.set(e,r),r}set(e,r){if(this.map.has(e)&&this.map.delete(e),this.map.set(e,r),this.map.size>this.capacity){let n=this.map.keys().next();n.done||this.map.delete(n.value)}}delete(e){return this.map.delete(e)}clear(){this.map.clear()}entries(){return Array.from(this.map.entries()).reverse().map(([e,r])=>({key:e,value:r}))}};function tt(t){return Array.isArray(t)?t:Array.from(t)}function ae(t){return tt(t).map(e=>({name:e.name,data:e}))}async function ve(t,e,r){let n=ae(e);return H(t,n,r??{})}function ze(t,e){let r=o=>{o.preventDefault(),o.dataTransfer?.dropEffect&&(o.dataTransfer.dropEffect="copy")},n=o=>{o.preventDefault();let i=o.dataTransfer?.files;i&&i.length>0&&e(Array.from(i))};return t.addEventListener("dragover",r),t.addEventListener("drop",n),()=>{t.removeEventListener("dragover",r),t.removeEventListener("drop",n)}}function Se(t,e){let r=n=>{let o=n.target;!o||!o.files||o.files.length===0||(e(o.files),o.value="")};return t.addEventListener("change",r),()=>t.removeEventListener("change",r)}var rt=844121161,nt=8,Ee=68,ot=[{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}],y=class extends Error{},Y=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),se(n.buffer)}};function Ae(t,e,r){let n=[];for(let o=0;o<r;o+=1){let i=t.getUint8(e+o);if(i===0)break;n.push(i)}return String.fromCharCode(...n)}function P(t,e,r,n){if(r!==0&&(e<Ee||e+r>t.byteLength))throw new y(`${n} section is out of bounds`)}function it(t){if(t.byteLength<Ee)throw new y("MD2 buffer too small to contain header");let e=new DataView(t),r=e.getInt32(0,!0),n=e.getInt32(4,!0);if(r!==rt)throw new y(`Invalid MD2 ident: ${r}`);if(n!==nt)throw new y(`Unsupported MD2 version: ${n}`);let o={ident:r,version:n,skinWidth:e.getInt32(8,!0),skinHeight:e.getInt32(12,!0),frameSize:e.getInt32(16,!0),numSkins:e.getInt32(20,!0),numVertices:e.getInt32(24,!0),numTexCoords:e.getInt32(28,!0),numTriangles:e.getInt32(32,!0),numGlCommands:e.getInt32(36,!0),numFrames:e.getInt32(40,!0),offsetSkins:e.getInt32(44,!0),offsetTexCoords:e.getInt32(48,!0),offsetTriangles:e.getInt32(52,!0),offsetFrames:e.getInt32(56,!0),offsetGlCommands:e.getInt32(60,!0),offsetEnd:e.getInt32(64,!0)},i=40+o.numVertices*4;if(o.frameSize!==i)throw new y(`Unexpected frame size ${o.frameSize}, expected ${i}`);if(o.offsetEnd>t.byteLength)throw new y("MD2 offset_end exceeds buffer length");return o}function at(t,e){let r=e.numSkins*64;P(t,e.offsetSkins,r,"skins");let n=new DataView(t,e.offsetSkins,r),o=[];for(let i=0;i<e.numSkins;i+=1)o.push({name:Ae(n,i*64,64)});return o}function st(t,e){let r=e.numTexCoords*4;P(t,e.offsetTexCoords,r,"texcoords");let n=new DataView(t,e.offsetTexCoords,r),o=[];for(let i=0;i<e.numTexCoords;i+=1){let a=i*4;o.push({s:n.getInt16(a,!0),t:n.getInt16(a+2,!0)})}return o}function lt(t,e){let r=e.numTriangles*12;P(t,e.offsetTriangles,r,"triangles");let n=new DataView(t,e.offsetTriangles,r),o=[];for(let i=0;i<e.numTriangles;i+=1){let a=i*12,s=[n.getUint16(a,!0),n.getUint16(a+2,!0),n.getUint16(a+4,!0)],l=[n.getUint16(a+6,!0),n.getUint16(a+8,!0),n.getUint16(a+10,!0)];if(s.some(u=>u>=e.numVertices)||l.some(u=>u>=e.numTexCoords))throw new y("Triangle references out of range vertex or texcoord");o.push({vertexIndices:s,texCoordIndices:l})}return o}function ut(t,e){let r=e.numFrames*e.frameSize;P(t,e.offsetFrames,r,"frames");let n=[];for(let o=0;o<e.numFrames;o+=1){let i=e.offsetFrames+o*e.frameSize,a=new DataView(t,i,e.frameSize),s={x:a.getFloat32(0,!0),y:a.getFloat32(4,!0),z:a.getFloat32(8,!0)},l={x:a.getFloat32(12,!0),y:a.getFloat32(16,!0),z:a.getFloat32(20,!0)},u=Ae(a,24,16),c=[];for(let d=0;d<e.numVertices;d+=1){let f=40+d*4,p={x:a.getUint8(f)*s.x+l.x,y:a.getUint8(f+1)*s.y+l.y,z:a.getUint8(f+2)*s.z+l.z},x=a.getUint8(f+3),g=ot[x];if(!g)throw new y(`Invalid normal index ${x} in frame ${u}`);c.push({position:p,normalIndex:x,normal:g})}n.push({name:u,vertices:c})}return n}function ct(t,e){let r=e.numGlCommands*4;if(P(t,e.offsetGlCommands,r,"gl commands"),r===0)return[];let n=new DataView(t,e.offsetGlCommands,r),o=[],i=0;for(;;){if(i+4>r)throw new y("GL command list ended unexpectedly");let a=n.getInt32(i,!0);if(i+=4,a===0)break;let s=Math.abs(a),l=[],u=s*12;if(i+u>r)throw new y("GL command vertex block exceeds buffer");for(let c=0;c<s;c+=1){let d=n.getFloat32(i,!0),f=n.getFloat32(i+4,!0),p=n.getInt32(i+8,!0);if(i+=12,p<0||p>=e.numVertices)throw new y("GL command references invalid vertex index");l.push({s:d,t:f,vertexIndex:p})}o.push({mode:a>0?"strip":"fan",vertices:l})}if(i!==r)throw new y("GL command list did not consume expected data");return o}function se(t){let e=it(t),r=at(t,e),n=st(t,e),o=lt(t,e),i=ut(t,e),a=ct(t,e);return{header:e,skins:r,texCoords:n,triangles:o,frames:i,glCommands:a}}function Te(t){let e=[],r=0;for(;r<t.length;){let n=t[r].name,o=n.replace(/\d+$/,"")||n,i=r;for(;i+1<t.length&&(t[i+1].name.replace(/\d+$/,"")||t[i+1].name)===o;)i+=1;e.push({name:o,firstFrame:r,lastFrame:i}),r=i+1}return e}function dt(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 ft(t,e,r,n){for(let o of e){let i=t.getExtension(o);if(!i)throw new Error(`Missing required WebGL extension: ${o}`);n.set(o,i)}for(let o of r){let i=t.getExtension(o);i&&n.set(o,i)}}function be(t,e={}){let{contextAttributes:r,requiredExtensions:n=[],optionalExtensions:o=[]}=e,i=t.getContext("webgl2",r??{antialias:!0});if(!i)throw new Error("WebGL2 not supported or failed to initialize");dt(i);let a=new Map;ft(i,n,o,a);let s=!1,l=new Set,u=new Set,c=f=>{s=!0,f.preventDefault();for(let p of l)p()},d=()=>{s=!1;for(let f of u)f()};return t.addEventListener("webglcontextlost",c),t.addEventListener("webglcontextrestored",d),{gl:i,extensions:a,isLost:()=>s,onLost(f){return l.add(f),()=>l.delete(f)},onRestored(f){return u.add(f),()=>u.delete(f)},dispose(){t.removeEventListener("webglcontextlost",c),t.removeEventListener("webglcontextrestored",d),l.clear(),u.clear(),a.clear()}}}function we(t,e,r){let n=t.createShader(e);if(!n)throw new Error("Failed to allocate shader");if(t.shaderSource(n,r),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS)){let i=t.getShaderInfoLog(n)??"Unknown shader compile failure";throw t.deleteShader(n),new Error(i)}return n}function mt(t,e,r,n){let o=t.createProgram();if(!o)throw new Error("Failed to allocate shader program");if(t.attachShader(o,e),t.attachShader(o,r),n)for(let[a,s]of Object.entries(n))t.bindAttribLocation(o,s,a);if(t.linkProgram(o),!t.getProgramParameter(o,t.LINK_STATUS)){let a=t.getProgramInfoLog(o)??"Unknown shader link failure";throw t.deleteProgram(o),new Error(a)}return o}var k=class t{constructor(e,r){this.uniformLocations=new Map;this.attributeLocations=new Map;this.gl=e,this.program=r}static create(e,r,n){let o=we(e,e.VERTEX_SHADER,r.vertex),i=we(e,e.FRAGMENT_SHADER,r.fragment);try{let a=mt(e,o,i,n);return new t(e,a)}finally{e.deleteShader(o),e.deleteShader(i)}}use(){this.gl.useProgram(this.program)}getUniformLocation(e){if(!this.uniformLocations.has(e)){let r=this.gl.getUniformLocation(this.program,e);this.uniformLocations.set(e,r)}return this.uniformLocations.get(e)??null}getAttributeLocation(e){if(!this.attributeLocations.has(e)){let r=this.gl.getAttribLocation(this.program,e);this.attributeLocations.set(e,r)}return this.attributeLocations.get(e)??-1}dispose(){this.gl.deleteProgram(this.program),this.uniformLocations.clear(),this.attributeLocations.clear()}};function Le(t,e,r){return k.create(t,e,r)}var A=class{constructor(e,r=e.STATIC_DRAW,n){this.gl=e,this.target=n??e.ARRAY_BUFFER;let o=e.createBuffer();if(!o)throw new Error("Failed to allocate buffer");this.buffer=o,e.bindBuffer(this.target,this.buffer),e.bufferData(this.target,0,r)}bind(){this.gl.bindBuffer(this.target,this.buffer)}upload(e,r=this.gl.STATIC_DRAW){this.bind(),this.gl.bufferData(this.target,e,r)}update(e,r=0){this.bind(),this.gl.bufferSubData(this.target,r,e)}dispose(){this.gl.deleteBuffer(this.buffer)}},L=class extends A{constructor(e,r=e.STATIC_DRAW){super(e,r,e.ELEMENT_ARRAY_BUFFER)}},R=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)}},_=class{constructor(e,r=e.TEXTURE_2D){this.gl=e,this.target=r;let n=e.createTexture();if(!n)throw new Error("Failed to allocate texture");this.texture=n}bind(e=0){this.gl.activeTexture(this.gl.TEXTURE0+e),this.gl.bindTexture(this.target,this.texture)}setParameters(e){this.bind(),e.wrapS!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_S,e.wrapS),e.wrapT!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_T,e.wrapT),e.minFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MIN_FILTER,e.minFilter),e.magFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MAG_FILTER,e.magFilter)}uploadImage(e,r,n,o,i,a,s,l){this.bind(),this.gl.texImage2D(this.target,e,r,n,o,i,a,s,l)}dispose(){this.gl.deleteTexture(this.texture)}},K=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 ue=4,le=7*ue,ce=[{index:0,size:3,type:5126,stride:le,offset:0},{index:1,size:2,type:5126,stride:le,offset:3*ue},{index:2,size:2,type:5126,stride:le,offset:5*ue}];function yt(t,e){return{width:t,height:t,padding:e,data:new Uint8Array(t*t*4),cursorX:0,cursorY:0,rowHeight:0}}function pt(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 ht(t,e,r){let n=pt(r),o=t.width*4,i=e.x+t.padding,a=e.y+t.padding,s=0;for(let l=0;l<r.height;l++){let u=(a+l)*o+i*4;for(let c=0;c<r.width;c++){let d=u+c*4;t.data[d]=r.samples[s],t.data[d+1]=r.samples[s+1],t.data[d+2]=r.samples[s+2],t.data[d+3]=n===4?r.samples[s+3]:255,s+=n}}}function xt(t,e,r){let n=e.width+r.lightmapPadding*2,o=e.height+r.lightmapPadding*2;if(n>r.atlasSize||o>r.atlasSize)throw new Error("Lightmap too large for atlas");for(let s of t){if(s.cursorX+n>s.width&&(s.cursorX=0,s.cursorY+=s.rowHeight+r.lightmapPadding,s.rowHeight=0),s.cursorY+o>s.height)continue;let l={atlasIndex:t.indexOf(s),x:s.cursorX,y:s.cursorY,width:e.width,height:e.height};return s.cursorX+=n+r.lightmapPadding,s.rowHeight=Math.max(s.rowHeight,o),{placement:l,atlas:s}}let i=yt(r.atlasSize,r.lightmapPadding);t.push(i);let a={atlasIndex:t.length-1,x:0,y:0,width:e.width,height:e.height};return i.cursorX=n+r.lightmapPadding,i.rowHeight=o,{placement:a,atlas:i}}function J(t){return t instanceof Float32Array?t:new Float32Array(t)}function gt(t,e){if(!t){let n=new Uint16Array(e);for(let o=0;o<e;o++)n[o]=o;return n}return t instanceof Uint16Array?t:new Uint16Array(t)}function vt(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 zt(t,e){let r=J(t.vertices),n=J(t.textureCoords),o=e?vt(J(t.lightmapCoords??t.textureCoords),e):J(t.lightmapCoords??new Float32Array(n.length)),i=r.length/3;if(n.length/2!==i)throw new Error("Texture coordinates count mismatch");if(o.length/2!==i)throw new Error("Lightmap coordinates count mismatch");let a=new Float32Array(i*7);for(let s=0;s<i;s++){let l=s*3,u=s*2,c=s*7;a[c]=r[l],a[c+1]=r[l+1],a[c+2]=r[l+2],a[c+3]=n[u],a[c+4]=n[u+1],a[c+5]=o[u],a[c+6]=o[u+1]}return a}function Re(t,e,r={}){let n={atlasSize:r.atlasSize??1024,lightmapPadding:r.lightmapPadding??1},o=[],i=new Map;e.forEach((l,u)=>{if(!l.lightmap)return;let{placement:c,atlas:d}=xt(o,l.lightmap,n);ht(d,c,l.lightmap),i.set(u,{atlasIndex:c.atlasIndex,offset:[(c.x+n.lightmapPadding)/n.atlasSize,(c.y+n.lightmapPadding)/n.atlasSize],scale:[c.width/n.atlasSize,c.height/n.atlasSize]})});let a=o.map(l=>{let u=new _(t);return u.setParameters({wrapS:t.CLAMP_TO_EDGE,wrapT:t.CLAMP_TO_EDGE,minFilter:t.LINEAR,magFilter:t.LINEAR}),u.uploadImage(0,t.RGBA,l.width,l.height,0,t.RGBA,t.UNSIGNED_BYTE,l.data),{texture:u,width:l.width,height:l.height,pixels:l.data}});return{surfaces:e.map((l,u)=>{let c=i.get(u),d=zt(l,c),f=gt(l.indices,d.length/7),p=new A(t,t.STATIC_DRAW,t.ARRAY_BUFFER);p.upload(d);let x=new L(t,t.STATIC_DRAW);x.upload(f);let g=new R(t);return g.configureAttributes(ce,p),{vao:g,vertexBuffer:p,indexBuffer:x,indexCount:f.length,texture:l.texture,surfaceFlags:l.surfaceFlags??fe,lightmap:c,vertexData:d,indexData:f}}),lightmaps:a}}function St(t){return{init(){t.trace({x:0,y:0,z:0},{x:0,y:0,z:0})},shutdown(){},createMainLoop(e,r){return new E(e,r)}}}return De(Et);})();
1
+ "use strict";var Quake2Engine=(()=>{var Ca=Object.create;var wn=Object.defineProperty;var Ea=Object.getOwnPropertyDescriptor;var Ta=Object.getOwnPropertyNames;var za=Object.getPrototypeOf,Pa=Object.prototype.hasOwnProperty;var Fa=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),Ia=(t,e)=>{for(var r in e)wn(t,r,{get:e[r],enumerable:!0})},ji=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Ta(e))!Pa.call(t,o)&&o!==r&&wn(t,o,{get:()=>e[o],enumerable:!(n=Ea(e,o))||n.enumerable});return t};var ka=(t,e,r)=>(r=t!=null?Ca(za(t)):{},ji(e||!t||!t.__esModule?wn(r,"default",{value:t,enumerable:!0}):r,t)),Ra=t=>ji(wn({},"__esModule",{value:!0}),t);var Cs=Fa((wu,Ls)=>{"use strict";Ls.exports=Worker});var dl={};Ia(dl,{ATTN_IDLE:()=>oa,ATTN_LOOP_NONE:()=>ra,ATTN_NONE:()=>So,ATTN_NORM:()=>na,ATTN_STATIC:()=>ia,AssetDependencyError:()=>kt,AssetDependencyTracker:()=>gn,AssetManager:()=>xo,AudioApi:()=>Po,AudioContextController:()=>_o,AudioRegistry:()=>cr,AudioRegistryError:()=>pn,AudioSystem:()=>To,BSP_SURFACE_FRAGMENT_SOURCE:()=>Fi,BSP_SURFACE_VERTEX_SOURCE:()=>Pi,BSP_VERTEX_LAYOUT:()=>Ei,BspSurfacePipeline:()=>ko,ConfigStringRegistry:()=>Bt,Cvar:()=>xr,CvarRegistry:()=>Pn,EngineHost:()=>Ot,EngineRuntime:()=>gr,FixedTimestepLoop:()=>gt,Framebuffer:()=>Fo,IndexBuffer:()=>yt,LruCache:()=>Qe,MAX_SOUND_CHANNELS:()=>wi,MD2_FRAGMENT_SHADER:()=>Oi,MD2_VERTEX_SHADER:()=>Ni,Md2Loader:()=>Ut,Md2MeshBuffers:()=>Ho,Md2ParseError:()=>K,Md2Pipeline:()=>Do,Md3Loader:()=>Gt,Md3ParseError:()=>pe,MusicSystem:()=>zo,PakArchive:()=>Vt,PakIndexStore:()=>go,PakIngestionError:()=>Je,PakParseError:()=>fe,PakValidationError:()=>xt,PakValidator:()=>In,RERELEASE_KNOWN_PAKS:()=>Qo,SKYBOX_FRAGMENT_SHADER:()=>Hi,SKYBOX_VERTEX_SHADER:()=>Ri,SOUND_FULLVOLUME:()=>lr,SOUND_LOOP_ATTENUATE:()=>sa,ShaderProgram:()=>Me,SkyboxPipeline:()=>Ro,SoundChannel:()=>bo,SoundPrecache:()=>Mo,SoundRegistry:()=>wo,Texture2D:()=>ur,TextureCache:()=>Wt,TextureCubeMap:()=>dr,VertexArray:()=>Re,VertexBuffer:()=>Le,VirtualFileSystem:()=>Fn,advanceAnimation:()=>bs,applySurfaceState:()=>xa,attenuationToDistanceMultiplier:()=>Rt,boxIntersectsFrustum:()=>bn,buildBspGeometry:()=>da,buildMd2Geometry:()=>Bi,buildMd2VertexData:()=>Vi,calculateMaxAudibleDistance:()=>vo,calculatePakChecksum:()=>ds,computeFrameBlend:()=>Ss,computeSkyScroll:()=>va,createAnimationState:()=>vs,createAudioGraph:()=>Ao,createEngine:()=>ul,createEngineRuntime:()=>ls,createInitialChannels:()=>Lo,createProgramFromSources:()=>ua,createWebGLContext:()=>ca,decodeOgg:()=>yo,deriveSurfaceRenderState:()=>ki,extractFrustumPlanes:()=>ma,filesToPakSources:()=>Zo,findLeafForPoint:()=>zi,gatherVisibleFaces:()=>ya,groupMd2Animations:()=>gs,ingestPakFiles:()=>ms,ingestPaks:()=>kn,interpolateVec3:()=>_s,parseMd2:()=>ei,parseMd3:()=>ti,parsePcx:()=>As,parseWal:()=>Hn,parseWalTexture:()=>Ms,parseWav:()=>Nn,pcxToRgba:()=>Dn,pickChannel:()=>Co,preparePcxTexture:()=>ws,removeViewTranslation:()=>Sa,resolveLightStyles:()=>Ii,spatializeOrigin:()=>Eo,walToRgba:()=>ri,wireDropTarget:()=>fs,wireFileInput:()=>ps});var Ha=()=>typeof performance<"u"?performance.now():Date.now(),Da=t=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>t()):setTimeout(t,25)},gt=class{constructor(e,r={}){this.callbacks=e;this.accumulatorMs=0;this.frame=0;this.running=!1;this.tick=()=>{if(!this.running)return;let e=this.options.now(),r=this.lastTimeMs===void 0?0:e-this.lastTimeMs;this.lastTimeMs=e,this.advance(r,e),this.running&&this.options.schedule(this.tick)};let n=r.fixedDeltaMs??25,o=r.maxSubSteps??5;this.options={fixedDeltaMs:n,maxSubSteps:o,maxDeltaMs:r.maxDeltaMs??n*o,startTimeMs:r.startTimeMs,now:r.now??Ha,schedule:r.schedule??Da}}start(){this.running||(this.running=!0,this.lastTimeMs=this.options.startTimeMs??this.options.now(),this.options.schedule(this.tick))}stop(){this.running=!1}pump(e){let r=(this.lastTimeMs??0)+e;this.lastTimeMs=r,this.advance(e,r)}isRunning(){return this.running}get frameNumber(){return this.frame}advance(e,r){let n=Math.min(Math.max(e,0),this.options.maxDeltaMs);this.accumulatorMs=Math.min(this.accumulatorMs+n,this.options.fixedDeltaMs*this.options.maxSubSteps);let o=0;for(;this.accumulatorMs>=this.options.fixedDeltaMs&&o<this.options.maxSubSteps;)this.frame+=1,this.callbacks.simulate({frame:this.frame,deltaMs:this.options.fixedDeltaMs,nowMs:r}),this.accumulatorMs-=this.options.fixedDeltaMs,o+=1;let i=this.options.fixedDeltaMs===0?0:this.accumulatorMs/this.options.fixedDeltaMs;this.callbacks.render?.({alpha:i,nowMs:r,accumulatorMs:this.accumulatorMs,frame:this.frame})}};var Ot=class{constructor(e,r,n={}){this.game=e;this.client=r;this.started=!1;this.stepSimulation=e=>{this.previousFrame=this.latestFrame,this.latestFrame=this.game.frame(e)};this.renderClient=e=>{this.client&&this.client.render({...e,previous:this.previousFrame,latest:this.latestFrame})};let o=n.loop?.now?.()??Date.now();this.startTimeMs=n.startTimeMs??n.loop?.startTimeMs??o,this.loop=new gt({simulate:this.stepSimulation,render:this.renderClient},{...n.loop,startTimeMs:this.startTimeMs})}start(){this.started||(this.latestFrame=this.game.init(this.startTimeMs)??this.latestFrame,this.client?.init(this.latestFrame),this.started=!0,this.loop.start())}stop(){this.started&&(this.loop.stop(),this.client?.shutdown(),this.game.shutdown(),this.previousFrame=void 0,this.latestFrame=void 0,this.started=!1)}pump(e){this.loop.pump(e)}getLatestFrame(){return this.latestFrame}isRunning(){return this.loop.isRunning()}};var Ji={x:0,y:0,z:0};var yl=Math.PI/180;function Qi(t,e){return{x:t.x-e.x,y:t.y-e.y,z:t.z-e.z}}function Na(t,e){return{x:t.x*e,y:t.y*e,z:t.z*e}}function Uo(t,e){return t.x*e.x+t.y*e.y+t.z*e.z}function Oa(t){return Uo(t,t)}function Go(t){return Math.sqrt(Oa(t))}function Zi(t){let e=Go(t);return e===0?t:Na(t,1/e)}var gl=Math.PI/180,xl=180/Math.PI;var Ce=1,je=2;var Wo=8,Xo=16,Ba=32;var Va=16384;var Mn=65536,es=1<<17,Ua=1<<18,Ga=1<<19,Wa=1<<20,Xa=1<<21,Ka=1<<22,qa=1<<23,bl=1<<24,Ln=1<<25,$a=1<<26,Sl=1<<27,vl=1<<28,_l=1<<29,Cn=1<<30,Al=1<<31;var yr=0;var ts=4,rs=8,ns=16,os=32,is=64;var wl=1<<25,Ml=1<<28,Ll=1<<29,Cl=1<<30,El=1<<31;var Tl=Ce|je,zl=Ce|Mn|je|Ln|Cn,Pl=Ce|Mn|je,Fl=Ce|es|je|Ln|Cn,Il=Ba|Wo|Xo,kl=Ce|Xo|Wo,Ya=Ce|Ln|Cn|je|$a,Rl=Ua|Ga|Wa|Xa|Ka|qa,Hl=Ce|Wo|Xo|Ln|Cn,Dl=Ce|Mn|je,Nl=Ce|je,Ol=Ce|Mn|je|es,Bl=Ya|Va;var Vl=Number.MAX_SAFE_INTEGER-1;var En=(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))(En||{});var Tn=256;var Ko=256,qo=8192,zn=2048,$o=512,Yo=256,jo=Tn*2,Jo=256,Vo=32,hr=96;var k=(t=>(t[t.Name=0]="Name",t[t.CdTrack=1]="CdTrack",t[t.Sky=2]="Sky",t[t.SkyAxis=3]="SkyAxis",t[t.SkyRotate=4]="SkyRotate",t[t.StatusBar=5]="StatusBar",t[t.AirAccel=59]="AirAccel",t[t.MaxClients=60]="MaxClients",t[t.MapChecksum=61]="MapChecksum",t[t.Models=62]="Models",t[t.Sounds=62+qo]="Sounds",t[t.Images=t.Sounds+zn]="Images",t[t.Lights=t.Images+$o]="Lights",t[t.ShadowLights=t.Lights+Ko]="ShadowLights",t[t.Items=t.ShadowLights+Jo]="Items",t[t.PlayerSkins=t.Items+Yo]="PlayerSkins",t[t.General=t.PlayerSkins+Tn]="General",t[t.WheelWeapons=t.General+jo]="WheelWeapons",t[t.WheelAmmo=t.WheelWeapons+Vo]="WheelAmmo",t[t.WheelPowerups=t.WheelAmmo+Vo]="WheelPowerups",t[t.CdLoopCount=t.WheelPowerups+Vo]="CdLoopCount",t[t.GameStyle=t.CdLoopCount+1]="GameStyle",t[t.MaxConfigStrings=t.GameStyle+1]="MaxConfigStrings",t))(k||{}),ss=k.MaxConfigStrings;function as(t){return t>=5&&t<59?hr*(59-t):t>=k.General&&t<k.WheelWeapons?hr*(k.MaxConfigStrings-t):hr}function ja(t){if(t<0||t>=k.MaxConfigStrings)throw new RangeError(`Configstring index ${t} is out of range (0-${k.MaxConfigStrings-1})`)}function cs(t,e){let r=as(t);if(e.length>r)throw new RangeError(`Configstring ${t} exceeds maximum length (${e.length} > ${r}); limit is ${hr} chars per slot`)}var Bt=class{constructor(){this.values=new Map;this.modelCursor=k.Models;this.soundCursor=k.Sounds;this.imageCursor=k.Images;this.lightCursor=k.Lights;this.shadowLightCursor=k.ShadowLights;this.itemCursor=k.Items;this.playerSkinCursor=k.PlayerSkins;this.generalCursor=k.General}set(e,r){return ja(e),cs(e,r),this.values.set(e,r),e}get(e){return this.values.get(e)}getAll(){let e=new Array(ss).fill("");for(let[r,n]of this.values.entries())e[r]=n;return e}modelIndex(e){return this.register(e,k.Models,qo,"modelCursor")}soundIndex(e){return this.register(e,k.Sounds,zn,"soundCursor")}findSoundIndex(e){for(let r=k.Sounds;r<k.Sounds+zn;r+=1)if(this.values.get(r)===e)return r}imageIndex(e){return this.register(e,k.Images,$o,"imageCursor")}lightIndex(e){return this.register(e,k.Lights,Ko,"lightCursor")}shadowLightIndex(e){return this.register(e,k.ShadowLights,Jo,"shadowLightCursor")}itemIndex(e){return this.register(e,k.Items,Yo,"itemCursor")}playerSkinIndex(e){return this.register(e,k.PlayerSkins,Tn,"playerSkinCursor")}generalIndex(e){return this.register(e,k.General,jo,"generalCursor")}register(e,r,n,o){for(let a=r;a<r+n;a+=1)if(this.values.get(a)===e)return a;let i=this[o],s=r+n;if(i>=s)throw new RangeError(`Out of configstring slots for range starting at ${r}`);return cs(i,e),this.values.set(i,e),this[o]=i+1,i}};var gr=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 ls(t,e,r,n){return new gr(t,new Ot(e,r,n))}var xr=class{constructor({name:e,defaultValue:r,description:n,flags:o=En.None,onChange:i}){this.modifiedCount=0;this.name=e,this.defaultValue=r,this.description=n,this.flags=o,this._value=r,this.onChange=i}get string(){return this._value}get number(){return Number(this._value)}get integer(){return Math.trunc(this.number)}get boolean(){return!!this.integer}set(e){if(this.flags&En.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)}},Pn=class{constructor(){this.cvars=new Map}register(e){let r=this.cvars.get(e.name);if(r)return r;let n=new xr(e);return this.cvars.set(e.name,n),n}get(e){return this.cvars.get(e)}setValue(e,r){let n=this.get(e);if(!n)throw new Error(`Unknown cvar: ${e}`);return n.set(r),n}resetAll(){for(let e of this.cvars.values())e.reset()}applyLatched(){let e=!1;for(let r of this.cvars.values())e=r.applyLatched()||e;return e}list(){return[...this.cvars.values()].sort((e,r)=>e.name.localeCompare(r.name))}};var Ja="PACK";function Qa(t,e,r){let n=[];for(let o=0;o<r;o+=1){let i=t.getUint8(e+o);if(i===0)break;n.push(i)}return String.fromCharCode(...n)}function U(t){return t.replace(/\\/g,"/").replace(/^\/+/,"").toLowerCase()}function Za(){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 ec=Za();function us(t){let e=4294967295;for(let r=0;r<t.length;r+=1){let n=t[r];e=ec[(e^n)&255]^e>>>8}return(e^4294967295)>>>0}var fe=class extends Error{},Vt=class t{constructor(e,r,n,o){this.name=e;this.buffer=r;this.entries=new Map(n.map(i=>[i.name,i])),this.checksum=o,this.size=r.byteLength}static fromArrayBuffer(e,r){let n=new DataView(r);if(r.byteLength<12)throw new fe("PAK buffer too small to contain header");let o=String.fromCharCode(n.getUint8(0),n.getUint8(1),n.getUint8(2),n.getUint8(3));if(o!==Ja)throw new fe(`Invalid PAK header magic: ${o}`);let i=n.getInt32(4,!0),s=n.getInt32(8,!0);if(i<12)throw new fe(`Invalid directory offset: ${i}`);if(s<=0||s%64!==0)throw new fe(`Invalid directory length: ${s}`);if(i+s>r.byteLength)throw new fe("Directory exceeds buffer length");let c=s/64,l=[],u=new Map;for(let d=0;d<c;d+=1){let f=i+d*64,p=Qa(n,f,56),y=U(p),h=n.getInt32(f+56,!0),g=n.getInt32(f+60,!0);if(h<0||g<0||h+g>r.byteLength)throw new fe(`Invalid entry bounds for ${p||"<unnamed>"} (offset=${h}, length=${g})`);if(!y)throw new fe(`Entry ${d} has an empty name`);let b={name:y,offset:h,length:g};u.set(y,b)}return l.push(...u.values()),new t(e,r,l,us(new Uint8Array(r)))}getEntry(e){return this.entries.get(U(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 ds(t){return us(new Uint8Array(t))}var Fn=class{constructor(e=[]){this.mounts=[];this.files=new Map;e.forEach(r=>this.mountPak(r))}mountPak(e){this.mounts.push(e);for(let r of e.listEntries()){let n=U(r.name);this.files.set(n,{archive:e,entry:r})}}get mountedPaks(){return[...this.mounts]}hasFile(e){return this.files.has(U(e))}stat(e){let r=this.files.get(U(e));if(r)return{path:r.entry.name,size:r.entry.length,sourcePak:r.archive.name}}async readFile(e){let r=this.files.get(U(e));if(!r)throw new Error(`File not found in VFS: ${e}`);return r.archive.readFile(e)}list(e=""){let r=U(e).replace(/\/+$|^\//g,""),n=[],o=new Set,i=r?`${r}/`:"";for(let s of this.files.values()){if(r&&!s.entry.name.startsWith(i))continue;let a=r?s.entry.name.slice(i.length):s.entry.name,c=a.indexOf("/");c===-1?n.push({path:s.entry.name,size:s.entry.length,sourcePak:s.archive.name}):o.add(a.slice(0,c))}return n.sort((s,a)=>s.path.localeCompare(a.path)),{files:n,directories:[...o].sort()}}findByExtension(e){let r=e.startsWith(".")?e.toLowerCase():`.${e.toLowerCase()}`,n=[];for(let o of this.files.values())o.entry.name.toLowerCase().endsWith(r)&&n.push({path:o.entry.name,size:o.entry.length,sourcePak:o.archive.name});return n.sort((o,i)=>o.path.localeCompare(i.path))}};var Qo=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"}]),xt=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"}},In=class{constructor(e=Qo){this.known=new Map;e.forEach(r=>this.known.set(this.normalizePakName(r.name),r))}validateArchive(e,r){let n=this.normalizePakName(r??("name"in e?e.name:"unknown")),o=e.checksum,i="size"in e?e.size:void 0,s=this.known.get(n);return s?s.checksum!==o?{name:n,checksum:o,expectedChecksum:s.checksum,status:"mismatch",size:i,description:s.description}:{name:n,checksum:o,expectedChecksum:s.checksum,status:"valid",size:i,description:s.description}:{name:n,checksum:o,status:"unknown",size:i}}assertValid(e,r){let n=this.validateArchive(e,r);if(n.status==="mismatch")throw new xt(n);return n}normalizePakName(e){let r=U(e),n=r.split("/"),o=n.pop()??r,i=n.pop();return i?`${o}@${i}`:o}};var Je=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 tc(t,e){if(typeof t.arrayBuffer=="function"){let r=await t.arrayBuffer();return e?.({file:"blob",loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}if(typeof FileReader<"u")return new Promise((r,n)=>{let o=new FileReader;o.onerror=()=>n(o.error??new Error("Unknown FileReader error")),o.onprogress=i=>{e?.({file:"blob",loadedBytes:i.loaded,totalBytes:i.total||t.size,state:"reading"})},o.onload=()=>{let i=o.result;i instanceof ArrayBuffer?r(i):n(new Error("Unexpected FileReader result"))},o.readAsArrayBuffer(t)});if(typeof Response<"u"){let r=await new Response(t).arrayBuffer();return e?.({file:"blob",loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}if(typeof t.stream=="function"){let r=t.stream().getReader(),n=[],o=0;for(;;){let{done:a,value:c}=await r.read();if(a)break;if(!c)continue;let l=c;n.push(l),o+=l.byteLength,e?.({file:"blob",loadedBytes:o,totalBytes:t.size,state:"reading"})}let i=new Uint8Array(o),s=0;for(let a of n)i.set(a,s),s+=a.byteLength;return i.buffer}throw new Je("blob",new Error("Unsupported Blob type"))}async function rc(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 tc(t.data,o=>e?.({...o,file:t.name,totalBytes:n}))}let r=t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength);return e?.({file:t.name,loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}async function kn(t,e,r){let n=typeof r=="function"?{onProgress:r}:r??{},o=n.persistIndexes??!!n.pakIndexStore,i=n.enforceValidation??!!n.validator,s=n.allowUnknownPaks??!0,a=n.stopOnError??!1,c=[];for(let l of e)try{let u=await rc(l,n.onProgress),d=Vt.fromArrayBuffer(l.name,u),f=n.validator?.validateArchive(d);if(f){n.onValidationResult?.(f);let p=f.status==="mismatch",y=f.status==="unknown";if(p&&i||y&&!s){let h=new xt(f);if(n.onError?.(l.name,h),a)throw new Je(l.name,h);c.push({archive:d,mounted:!1,validation:f});continue}}if(t.mountPak(d),o&&n.pakIndexStore)try{await n.pakIndexStore.persist(d)}catch(p){if(n.onError?.(l.name,p),a)throw new Je(l.name,p)}n.onProgress?.({file:l.name,loadedBytes:u.byteLength,totalBytes:u.byteLength,state:"parsed"}),c.push({archive:d,mounted:!0,validation:f})}catch(u){if(n.onProgress?.({file:l.name,loadedBytes:0,totalBytes:0,state:"error"}),n.onError?.(l.name,u),a)throw new Je(l.name,u)}return c}var Qe=class{constructor(e){this.capacity=e;this.map=new Map;if(e<=0)throw new RangeError("LRU cache capacity must be greater than zero")}get size(){return this.map.size}has(e){return this.map.has(e)}get(e){let r=this.map.get(e);if(r!==void 0)return this.map.delete(e),this.map.set(e,r),r}set(e,r){if(this.map.has(e)&&this.map.delete(e),this.map.set(e,r),this.map.size>this.capacity){let n=this.map.keys().next();n.done||this.map.delete(n.value)}}delete(e){return this.map.delete(e)}clear(){this.map.clear()}entries(){return Array.from(this.map.entries()).reverse().map(([e,r])=>({key:e,value:r}))}};function nc(t){return Array.isArray(t)?t:Array.from(t)}function Zo(t){return nc(t).map(e=>({name:e.name,data:e}))}async function ms(t,e,r){let n=Zo(e);return kn(t,n,r??{})}function fs(t,e){let r=o=>{o.preventDefault(),o.dataTransfer?.dropEffect&&(o.dataTransfer.dropEffect="copy")},n=o=>{o.preventDefault();let i=o.dataTransfer?.files;i&&i.length>0&&e(Array.from(i))};return t.addEventListener("dragover",r),t.addEventListener("drop",n),()=>{t.removeEventListener("dragover",r),t.removeEventListener("drop",n)}}function ps(t,e){let r=n=>{let o=n.target;!o||!o.files||o.files.length===0||(e(o.files),o.value="")};return t.addEventListener("change",r),()=>t.removeEventListener("change",r)}var oc=844121161,ic=8,hs=68,sc=[{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}],K=class extends Error{},Ut=class{constructor(e){this.vfs=e}async load(e){let r=await this.vfs.readFile(e),n=new Uint8Array(r.byteLength);return n.set(r),ei(n.buffer)}};function ys(t,e,r){let n=[];for(let o=0;o<r;o+=1){let i=t.getUint8(e+o);if(i===0)break;n.push(i)}return String.fromCharCode(...n)}function br(t,e,r,n){if(r!==0&&(e<hs||e+r>t.byteLength))throw new K(`${n} section is out of bounds`)}function ac(t){if(t.byteLength<hs)throw new K("MD2 buffer too small to contain header");let e=new DataView(t),r=e.getInt32(0,!0),n=e.getInt32(4,!0);if(r!==oc)throw new K(`Invalid MD2 ident: ${r}`);if(n!==ic)throw new K(`Unsupported MD2 version: ${n}`);let o={ident:r,version:n,skinWidth:e.getInt32(8,!0),skinHeight:e.getInt32(12,!0),frameSize:e.getInt32(16,!0),numSkins:e.getInt32(20,!0),numVertices:e.getInt32(24,!0),numTexCoords:e.getInt32(28,!0),numTriangles:e.getInt32(32,!0),numGlCommands:e.getInt32(36,!0),numFrames:e.getInt32(40,!0),offsetSkins:e.getInt32(44,!0),offsetTexCoords:e.getInt32(48,!0),offsetTriangles:e.getInt32(52,!0),offsetFrames:e.getInt32(56,!0),offsetGlCommands:e.getInt32(60,!0),offsetEnd:e.getInt32(64,!0)},i=40+o.numVertices*4;if(o.frameSize!==i)throw new K(`Unexpected frame size ${o.frameSize}, expected ${i}`);if(o.offsetEnd>t.byteLength)throw new K("MD2 offset_end exceeds buffer length");return o}function cc(t,e){let r=e.numSkins*64;br(t,e.offsetSkins,r,"skins");let n=new DataView(t,e.offsetSkins,r),o=[];for(let i=0;i<e.numSkins;i+=1)o.push({name:ys(n,i*64,64)});return o}function lc(t,e){let r=e.numTexCoords*4;br(t,e.offsetTexCoords,r,"texcoords");let n=new DataView(t,e.offsetTexCoords,r),o=[];for(let i=0;i<e.numTexCoords;i+=1){let s=i*4;o.push({s:n.getInt16(s,!0),t:n.getInt16(s+2,!0)})}return o}function uc(t,e){let r=e.numTriangles*12;br(t,e.offsetTriangles,r,"triangles");let n=new DataView(t,e.offsetTriangles,r),o=[];for(let i=0;i<e.numTriangles;i+=1){let s=i*12,a=[n.getUint16(s,!0),n.getUint16(s+2,!0),n.getUint16(s+4,!0)],c=[n.getUint16(s+6,!0),n.getUint16(s+8,!0),n.getUint16(s+10,!0)];if(a.some(l=>l>=e.numVertices)||c.some(l=>l>=e.numTexCoords))throw new K("Triangle references out of range vertex or texcoord");o.push({vertexIndices:a,texCoordIndices:c})}return o}function dc(t,e){let r=e.numFrames*e.frameSize;br(t,e.offsetFrames,r,"frames");let n=[];for(let o=0;o<e.numFrames;o+=1){let i=e.offsetFrames+o*e.frameSize,s=new DataView(t,i,e.frameSize),a={x:s.getFloat32(0,!0),y:s.getFloat32(4,!0),z:s.getFloat32(8,!0)},c={x:s.getFloat32(12,!0),y:s.getFloat32(16,!0),z:s.getFloat32(20,!0)},l=ys(s,24,16),u=[];for(let d=0;d<e.numVertices;d+=1){let f=40+d*4,p={x:s.getUint8(f)*a.x+c.x,y:s.getUint8(f+1)*a.y+c.y,z:s.getUint8(f+2)*a.z+c.z},y=s.getUint8(f+3),h=sc[y];if(!h)throw new K(`Invalid normal index ${y} in frame ${l}`);u.push({position:p,normalIndex:y,normal:h})}n.push({name:l,vertices:u})}return n}function mc(t,e){let r=e.numGlCommands*4;if(br(t,e.offsetGlCommands,r,"gl commands"),r===0)return[];let n=new DataView(t,e.offsetGlCommands,r),o=[],i=0;for(;;){if(i+4>r)throw new K("GL command list ended unexpectedly");let s=n.getInt32(i,!0);if(i+=4,s===0)break;let a=Math.abs(s),c=[],l=a*12;if(i+l>r)throw new K("GL command vertex block exceeds buffer");for(let u=0;u<a;u+=1){let d=n.getFloat32(i,!0),f=n.getFloat32(i+4,!0),p=n.getInt32(i+8,!0);if(i+=12,p<0||p>=e.numVertices)throw new K("GL command references invalid vertex index");c.push({s:d,t:f,vertexIndex:p})}o.push({mode:s>0?"strip":"fan",vertices:c})}if(i!==r)throw new K("GL command list did not consume expected data");return o}function ei(t){let e=ac(t),r=cc(t,e),n=lc(t,e),o=uc(t,e),i=dc(t,e),s=mc(t,e);return{header:e,skins:r,texCoords:n,triangles:o,frames:i,glCommands:s}}function gs(t){let e=[],r=0;for(;r<t.length;){let n=t[r].name,o=n.replace(/\d+$/,"")||n,i=r;for(;i+1<t.length&&(t[i+1].name.replace(/\d+$/,"")||t[i+1].name)===o;)i+=1;e.push({name:o,firstFrame:r,lastFrame:i}),r=i+1}return e}var xs=860898377,fc=15,pe=class extends Error{constructor(e){super(e),this.name="Md3ParseError"}};function Sr(t,e,r){let n=new Uint8Array(t.buffer,t.byteOffset+e,r);return new TextDecoder("utf-8").decode(n).replace(/\0.*$/,"").trim()}function pc(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 Rn(t,e,r,n){if(e<0||e+r>n)throw new pe(`${t} exceeds buffer bounds`)}function hc(t){let e=t.getInt32(0,!0);if(e!==xs)throw new pe(`Invalid MD3 ident: ${e}`);let r=t.getInt32(4,!0);if(r!==fc)throw new pe(`Unsupported MD3 version: ${r}`);let n=Sr(t,8,64),o=t.getInt32(72,!0),i=t.getInt32(76,!0),s=t.getInt32(80,!0),a=t.getInt32(84,!0),c=t.getInt32(88,!0),l=t.getInt32(92,!0),u=t.getInt32(96,!0),d=t.getInt32(100,!0),f=t.getInt32(104,!0);if(i<=0||a<0||s<0)throw new pe("Invalid MD3 counts");return{ident:e,version:r,name:n,flags:o,numFrames:i,numTags:s,numSurfaces:a,numSkins:c,ofsFrames:l,ofsTags:u,ofsSurfaces:d,ofsEnd:f}}function yc(t,e){let r=[];Rn("Frames",e.ofsFrames,e.numFrames*56,t.byteLength);for(let o=0;o<e.numFrames;o+=1){let i=e.ofsFrames+o*56;r.push({minBounds:{x:t.getFloat32(i,!0),y:t.getFloat32(i+4,!0),z:t.getFloat32(i+8,!0)},maxBounds:{x:t.getFloat32(i+12,!0),y:t.getFloat32(i+16,!0),z:t.getFloat32(i+20,!0)},localOrigin:{x:t.getFloat32(i+24,!0),y:t.getFloat32(i+28,!0),z:t.getFloat32(i+32,!0)},radius:t.getFloat32(i+36,!0),name:Sr(t,i+40,16)})}return r}function gc(t,e){let r=[],o=e.numFrames*e.numTags*112;Rn("Tags",e.ofsTags,o,t.byteLength);for(let i=0;i<e.numFrames;i+=1){let s=[];for(let a=0;a<e.numTags;a+=1){let c=e.ofsTags+(i*e.numTags+a)*112,l=c+64,u=l+12;s.push({name:Sr(t,c,64),origin:{x:t.getFloat32(l,!0),y:t.getFloat32(l+4,!0),z:t.getFloat32(l+8,!0)},axis:[{x:t.getFloat32(u,!0),y:t.getFloat32(u+4,!0),z:t.getFloat32(u+8,!0)},{x:t.getFloat32(u+12,!0),y:t.getFloat32(u+16,!0),z:t.getFloat32(u+20,!0)},{x:t.getFloat32(u+24,!0),y:t.getFloat32(u+28,!0),z:t.getFloat32(u+32,!0)}]})}r.push(s)}return r}function xc(t,e){let r=t.getInt32(e,!0);if(r!==xs)throw new pe(`Invalid surface ident at ${e}: ${r}`);let n=Sr(t,e+4,64),o=t.getInt32(e+68,!0),i=t.getInt32(e+72,!0),s=t.getInt32(e+76,!0),a=t.getInt32(e+80,!0),c=t.getInt32(e+84,!0),l=t.getInt32(e+88,!0),u=t.getInt32(e+92,!0),d=t.getInt32(e+96,!0),f=t.getInt32(e+100,!0),p=t.getInt32(e+104,!0);if(i<=0||a<=0||c<=0)throw new pe(`Invalid surface counts for ${n}`);let y=p;Rn(`Surface ${n}`,e,y,t.byteLength);let h=[],g=e+l;for(let X=0;X<c;X+=1){let oe=g+X*12;h.push({indices:[t.getInt32(oe,!0),t.getInt32(oe+4,!0),t.getInt32(oe+8,!0)]})}let b=[],T=e+u;for(let X=0;X<s;X+=1){let oe=T+X*68;b.push({name:Sr(t,oe,64),shaderIndex:t.getInt32(oe+64,!0)})}let P=[],ne=e+d;for(let X=0;X<a;X+=1){let oe=ne+X*8;P.push({s:t.getFloat32(oe,!0),t:t.getFloat32(oe+4,!0)})}let Y=[],Ht=e+f;for(let X=0;X<i;X+=1){let oe=[];for(let fr=0;fr<a;fr+=1){let Dt=Ht+(X*a+fr)*8,No=t.getInt16(Dt,!0)/64,Oo=t.getInt16(Dt+2,!0)/64,Bo=t.getInt16(Dt+4,!0)/64,Sn=t.getUint16(Dt+6,!0);oe.push({position:{x:No,y:Oo,z:Bo},latLng:Sn,normal:pc(Sn)})}Y.push(oe)}return{surface:{name:n,flags:o,numFrames:i,shaders:b,triangles:h,texCoords:P,vertices:Y},nextOffset:e+p}}function ti(t){if(t.byteLength<108)throw new pe("MD3 buffer too small for header");let e=new DataView(t),r=hc(e);Rn("MD3 end",r.ofsEnd,0,t.byteLength);let n=yc(e,r),o=gc(e,r),i=[],s=r.ofsSurfaces;for(let a=0;a<r.numSurfaces;a+=1){let{surface:c,nextOffset:l}=xc(e,s);i.push(c),s=l}if(s!==r.ofsEnd)throw new pe("Surface parsing did not reach ofsEnd");return{header:r,frames:n,tags:o,surfaces:i}}var Gt=class{constructor(e){this.vfs=e}async load(e){let r=await this.vfs.readFile(e);return ti(r.slice().buffer)}};function bs(t,e){let r=(t.sequence.end-t.sequence.start+1)/t.sequence.fps,n=t.sequence.loop!==!1,o=t.time+e;return n?o=(o%r+r)%r:o>r&&(o=r),{...t,time:Math.max(0,Math.min(o,r))}}function Ss(t){let e=t.sequence.end-t.sequence.start+1,r=1/t.sequence.fps,n=t.sequence.loop!==!1,o=t.time/r;if(!n&&o>=e)return{frame:t.sequence.end,nextFrame:t.sequence.end,lerp:0};let i=n?o%e:Math.min(o,e-1),s=Math.floor(i),a=t.sequence.start+s,c=s+1>=e?n?t.sequence.start:t.sequence.end:a+1,l=!n&&s>=e-1?0:i-s;return{frame:a,nextFrame:c,lerp:l}}function vs(t){return{sequence:t,time:0}}function _s(t,e,r){return{x:t.x+(e.x-t.x)*r,y:t.y+(e.y-t.y)*r,z:t.z+(e.z-t.z)*r}}var vr=class extends Error{constructor(e){super(e),this.name="WalParseError"}};function Hn(t){if(t.byteLength<100)throw new vr("WAL buffer too small");let e=new DataView(t),r=new Uint8Array(t,0,32),n=new TextDecoder("utf-8").decode(r).replace(/\0.*$/,"").trim(),o=e.getInt32(32,!0),i=e.getInt32(36,!0),s=[e.getInt32(40,!0),e.getInt32(44,!0),e.getInt32(48,!0),e.getInt32(52,!0)],a=new Uint8Array(t,56,32),c=new TextDecoder("utf-8").decode(a).replace(/\0.*$/,"").trim(),l=e.getInt32(88,!0),u=e.getInt32(92,!0),d=e.getInt32(96,!0);if(o<=0||i<=0)throw new vr("Invalid WAL dimensions");let f=[],p=o,y=i;for(let h=0;h<s.length;h+=1){let g=s[h],b=Math.max(1,p*y|0);if(g<=0||g+b>t.byteLength)throw new vr(`Invalid WAL mip offset for level ${h}`);let T=new Uint8Array(t,g,b);f.push({level:h,width:p,height:y,data:T}),p=Math.max(1,p>>1),y=Math.max(1,y>>1)}return{name:n,width:o,height:i,mipmaps:f,animName:c,flags:l,contents:u,value:d}}var bt=class extends Error{constructor(e){super(e),this.name="PcxParseError"}};function As(t){if(t.byteLength<128)throw new bt("PCX buffer too small for header");let e=new DataView(t),r=e.getUint8(0),n=e.getUint8(2),o=e.getUint8(3),i=e.getUint16(4,!0),s=e.getUint16(6,!0),a=e.getUint16(8,!0),c=e.getUint16(10,!0);if(r!==10||n!==1)throw new bt("Unsupported PCX encoding");if(o!==8)throw new bt("Only 8bpp PCX files are supported");let l=a-i+1,u=c-s+1,d=e.getUint16(66,!0),f=t.byteLength-769;if(f<128||new DataView(t,f,1).getUint8(0)!==12)throw new bt("Missing PCX palette");let p=new Uint8Array(t,f+1,768),y=new Uint8Array(t,128,f-128),h=new Uint8Array(l*u),g=0,b=0;for(let T=0;T<u;T+=1){let P=0;for(;P<d&&g<y.length;){let ne=1,Y=y[g++];if((Y&192)===192){if(ne=Y&63,g>=y.length)throw new bt("Unexpected end of PCX RLE data");Y=y[g++]}for(let Ht=0;Ht<ne&&P<d;Ht+=1)P<l&&(h[b++]=Y),P+=1}}return{width:l,height:u,bitsPerPixel:o,pixels:h,palette:p}}function Dn(t){let e=new Uint8Array(t.width*t.height*4);for(let r=0;r<t.pixels.length;r+=1){let n=t.pixels[r],o=n*3,i=r*4;e[i]=t.palette[o],e[i+1]=t.palette[o+1],e[i+2]=t.palette[o+2],e[i+3]=n===255?0:255}return e}var Wt=class{constructor(e={}){this.cache=new Qe(e.capacity??128)}get size(){return this.cache.size}get(e){return this.cache.get(e.toLowerCase())}set(e,r){this.cache.set(e.toLowerCase(),r)}clear(){this.cache.clear()}};function ri(t,e){let r=[];for(let n of t.mipmaps){let o=new Uint8Array(n.width*n.height*4);for(let i=0;i<n.data.length;i+=1){let s=n.data[i],a=s*3,c=i*4;o[c]=e[a],o[c+1]=e[a+1],o[c+2]=e[a+2],o[c+3]=s===255?0:255}r.push({level:n.level,width:n.width,height:n.height,rgba:o})}return{width:t.width,height:t.height,levels:r,source:"wal"}}function ws(t){let e=Dn(t),r={level:0,width:t.width,height:t.height,rgba:e};return{width:t.width,height:t.height,levels:[r],source:"pcx"}}function Ms(t,e){return ri(Hn(t),e)}var St=class extends Error{constructor(e){super(e),this.name="WavParseError"}};function ni(t,e,r){return new TextDecoder("ascii").decode(new Uint8Array(t.buffer,t.byteOffset+e,r))}function Nn(t){if(t.byteLength<44)throw new St("WAV buffer too small");let e=new DataView(t);if(ni(e,0,4)!=="RIFF"||ni(e,8,4)!=="WAVE")throw new St("Invalid WAV header");let r=12,n=-1,o=-1,i=0,s=0;for(;r+8<=t.byteLength;){let y=ni(e,r,4),h=e.getUint32(r+4,!0),g=r+8;y==="fmt "?(n=g,i=h):y==="data"&&(o=g,s=h),r=g+h}if(n===-1||o===-1)throw new St("Missing fmt or data chunk");let a=e.getUint16(n,!0),c=e.getUint16(n+2,!0),l=e.getUint32(n+4,!0),u=e.getUint16(n+14,!0);if(a!==1)throw new St("Only PCM WAV is supported");let d=u/8,f=s/(d*c),p=new Float32Array(f*c);for(let y=0;y<f;y+=1)for(let h=0;h<c;h+=1){let g=y*c+h,b=o+g*d,T=0;if(u===8)T=e.getUint8(b),p[g]=(T-128)/128;else if(u===16)T=e.getInt16(b,!0),p[g]=T/32768;else if(u===24){let P=e.getUint8(b),ne=e.getUint8(b+1),Y=e.getInt8(b+2);T=P|ne<<8|Y<<16,p[g]=T/8388608}else throw new St(`Unsupported bitsPerSample: ${u}`)}return{sampleRate:l,channels:c,bitsPerSample:u,samples:p}}var bc=(t,e=4294967295,r=79764919)=>{let n=new Int32Array(256),o,i,s,a=e;for(o=0;o<256;o++){for(s=o<<24,i=8;i>0;--i)s=2147483648&s?s<<1^r:s<<1;n[o]=s}for(o=0;o<t.length;o++)a=a<<8^n[255&(a>>24^t[o])];return a};var oi=(t,e=bc)=>{let r=g=>new Uint8Array(g.length/2).map(((b,T)=>parseInt(g.substring(2*T,2*(T+1)),16))),n=g=>r(g)[0],o=new Map;[,8364,,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,,381,,,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,,382,376].forEach(((g,b)=>o.set(g,b)));let i=new Uint8Array(t.length),s,a,c,l=!1,u=0,d=42,f=t.length>13&&t.substring(0,9)==="dynEncode",p=0;f&&(p=11,a=n(t.substring(9,p)),a<=1&&(p+=2,d=n(t.substring(11,p))),a===1&&(p+=8,c=(g=>new DataView(r(g).buffer).getInt32(0,!0))(t.substring(13,p))));let y=256-d;for(let g=p;g<t.length;g++)if(s=t.charCodeAt(g),s!==61||l){if(s===92&&g<t.length-5&&f){let b=t.charCodeAt(g+1);b!==117&&b!==85||(s=parseInt(t.substring(g+2,g+6),16),g+=5)}if(s>255){let b=o.get(s);b&&(s=b+127)}l&&(l=!1,s-=64),i[u++]=s<d&&s>0?s+y:s-d}else l=!0;let h=i.subarray(0,u);if(f&&a===1){let g=e(h);if(g!==c){let b="Decode failed crc32 validation";throw console.error("`simple-yenc`\n",b+`
2
+ `,"Expected: "+c+"; Got: "+g+`
3
+ `,"Visit https://github.com/eshaz/simple-yenc for more information"),Error(b)}}return h};function D(){let t=Uint8Array,e=Float32Array;D.modules||Object.defineProperties(D,{modules:{value:new WeakMap},setModule:{value(r,n){D.modules.set(r,Promise.resolve(n))}},getModule:{value(r,n){let o=D.modules.get(r);return o||(n?o=WebAssembly.compile(oi(n)):(n=r.wasm,o=D.inflateDynEncodeString(n).then(i=>WebAssembly.compile(i))),D.modules.set(r,o)),o}},concatFloat32:{value(r,n){let o=new e(n),i=0,s=0;for(;i<r.length;)o.set(r[i],s),s+=r[i++].length;return o}},getDecodedAudio:{value:(r,n,o,i,s)=>({errors:r,channelData:n,samplesDecoded:o,sampleRate:i,bitDepth:s})},getDecodedAudioMultiChannel:{value(r,n,o,i,s,a){let c=[],l,u;for(l=0;l<o;l++){let d=[];for(u=0;u<n.length;)d.push(n[u++][l]||[]);c.push(D.concatFloat32(d,i))}return D.getDecodedAudio(r,c,i,s,a)}},inflateDynEncodeString:{value(r){return r=oi(r),new Promise(n=>{let o=String.raw`dynEncode012804c7886d(‰›•)((()>+ˆ*§§)§ˆ,§§§§)§ˆ+§§§)§+.-()(*)-+)(ˆ.7*§)i¸¸,3§(i¸¸,3/G+.••—š¡*(,˜ŽŽ(,3‡‡‰˜‡Š‰›+)2å:-œ),§H(P*DI*H(P*@I++hH)H*r,hH(H(P*<J,i)’^*<H,H(P*4’U((I-H(H*i0’J,^*DH+H-H*œšI+H,I*4)33H(H*H)“^*DH(H+H)^*@H+i§H)œi§›™3æ*).§K(iH“I/+§H,iHn,§H+i(H+i(rCJ0I,H*I-+hH,,hH(H-V)(i)œ’J.H.W)(i)’c)(H,i)“I,H-i*’I-4)33i(I.*hH(V)(H+n5(H(i*’I-i(I,i)I.+hH,i*’J+iHn,hi(I-i*I,+hH,H/’H-c)(H,iFn,hi(I,+hH,H0n5-H*V)(J(,hH/H(i)œ’J(H(V)(J(i)’c)(H)H(i)œ’H,c)(3H*i*’I*H,i)’I,4(3(-H(H,’W)(H-’I-H,i*’I,4)3(3(3H,H-’I1H+I,H.i)œH1V)(“J.i(v5(33H.-H(H,’i(c)(H,i*’I,4)333–)-§i*I*+§H*iHn,hiž73H,H(i)8(H+šJ+H)P*(H*’V)(J-“r,§H)P*,H.i)œ’H+H,“i)œ’V)(-H*i*’I*H+i)œI+H-H.’I.H,H-’i)œI,4)333Ã+)-§iø7i(^*(iü7I,*h+hH+iDn,h*hilI+i)I,+hH+,hH+iô7’H,c)(i)H+i´8’W)(œH,’I,H+i*’I+4)-+hH(H)8*J-i(p5.*h*h*hH-i')u,hH(P*(J+,hH(P*0J,H(P*,n50H+H,’H-b((3H(P*0i)’I.4)3H-i¨*n5*H-iÅ*s,hiž73H-i)œJ+V)&+I,H(H+V)æ,8(I.H(H*8*J-i(p51H-i)œJ+i¸7’V)(H(H+iø7’V)(8(’J/H(P*0J+s,hi73H+H,H.’J,’I.H(P*(m5(H.H(P*,s5.+hH,m5*H(P*(J.H+’H.H+H/“’U((b((H(H(P*0i)’J+^*0H,i)“I,4(3(3H(H.^*03H-i¨*o5)33i(73(3(3-H,H+i)žc)(H,i*’I,H+i)’I+4)33i)I-3H-3!2)0§K(i2“J,L(H,H(^*(H,H*^*4H,i(^*0H,i(^*DH,j(_*<H,H)P*(^*,H,H+P*(^*8*h*h+hH,i)8(I3i§I**h*h*h*h*h*h*hH,i*8(6+(),03H,j(_*@i*I-H,P*<J.i,’J(H,P*8J/s50H,H.i+’J0^*<i¦I*H.H,P*4J1’J.U(*H.U((J2›i')o5/H.U()I.H,H(^*<H0H1’U((H.i0œJ.i§›i0ži')™o5/H/H.H2šJ*H(’J.q50H,P*0J/H*’I-H,P*(J0,hH,P*,H-q,hi)I-423+hH*m5+H/H0’H(H1’U((b((H/i)’I/H(i)’I(H*i)“I*4(3(3H,H.^*<H,H-^*04*3iØ1U((5+i(I(i¨7i1^*(i$6iè1^*(i°7iè6^*(i¬7iÈ6^*(+hH(iÈ*n,hiÈ*I(+hH(i¨,n,hi¨,I(+hH(iØ,n,hiØ,I(+hH(iè,o,hH,i-’H(’i0c)(H(i*’I(4)33iè1i1H,i-’iÈ*8)Bi(I(+hH(ido,hH,i-’H(’i-c)(H(i*’I(4)33iÈ6iè6H,i-’iF8)BiØ1i)b((41-H,i-’H(’i/c)(H(i*’I(4)3(3(-H,i-’H(’i1c)(H(i*’I(4)3(3(-H,i-’H(’i0c)(H(i*’I(4)3(3(3H,H/^*0H,H(^*<3i(I*4*3H,H,i¸)’^*TH,H,iø-’^*PH,H,iX’^*LH,H,i(’^*HH,i-8(I(H,i-8(I-i¥I*H,i,8(I.H(iErH-iErš5)H(i©*’I1H-i)’I0i(i;H.i,’J(i(H(i(rCJ(“J*H*i;sCI*i¨1I-H(I/+hH/,hH,i-’H-V)(i)œ’H,i+8(c)(H/i)“I/H-i*’I-H*i)’I*4)-H(i)œi¨1’I/+hH(H*o,hH,i-’H/V)(i)œ’i(c)(H/i*’I/H(i)’I(4)33i¤I*H,iø-’H,i¸)’H,i-’i;8)5+H0H1’I2i(I-+hH-H2p,hH,H,iP’8*J*i(p5-H*i7u,hH,i-’H-i)œ’H*c)(H-i)’I-4*3i(I/i+I.i+I(*h*h*hH*i8“6*(*)3H-m,hi£I*403H-i)œH,’W)-I/i*I(4)3i3I.i/I(3H2H,H(8(H.’J(H-’J.p,hi¢I*4.3H,i-’H-i)œ’I*+hH(,hH*H/c)(H*i*’I*H(i)“I(4)-H.I-4+3(3(33H,W)1m,hiŸI*4,3H,iø-’H,i¸)’H,i-’H18)J(,hi¡I*H(i(p5,H1H,V)ú-H,V)ø-’o5,3H,i(’H,iX’H,i-’H1i)œ’H08)J(,hi I*H(i(p5,H0H,V)šH,V)˜’o5,3H,H,iP’H,iH’8+I*4+3(3(3H,i$6i¬78+I*3H*H3šm5(3i)I-H*i(r5)3H)H,P*0^*(H+H,P*<^*(H*I-3H,i2’L(H-33Á)+(i¨03b+(,(-(.(/(0(1(2(3(5(7(9(;(?(C(G(K(S([(c(k({(‹(›(«(Ë(ë( (*)(iø03O)()()()(*(*(*(*(+(+(+(+(,(,(,(,(-(-(-(-(i¨13M8(9(:(((0(/(1(.(2(-(3(,(4(+(5(*(6()(7(T7œ‰šœ‡Ž‰œš›*S7•œ‰Š”U”—Љ”›S0›‘–U œ`;D.getModule(D,o).then(i=>WebAssembly.instantiate(i,{})).then(({exports:i})=>{let s=new Map(Object.entries(i)),a=s.get("puff"),c=s.get("memory").buffer,l=new t(c),u=new DataView(c),d=s.get("__heap_base"),f=r.length,p=d;d+=4,u.setInt32(p,f,!0);let y=d;d+=f,l.set(r,y);let h=d;d+=4,u.setInt32(h,l.byteLength-d,!0),a(d,h,y,p),n(l.slice(d,d+u.getInt32(h,!0)))})})}}}),Object.defineProperty(this,"wasm",{enumerable:!0,get:()=>this._wasm}),this.getOutputChannels=(r,n,o)=>{let i=[],s=0;for(;s<n;)i.push(r.slice(s*o,s++*o+o));return i},this.allocateTypedArray=(r,n,o=!0)=>{let i=this._wasm.malloc(n.BYTES_PER_ELEMENT*r);return o&&this._pointers.add(i),{ptr:i,len:r,buf:new n(this._wasm.HEAP,i,r)}},this.free=()=>{this._pointers.forEach(r=>{this._wasm.free(r)}),this._pointers.clear()},this.codeToString=r=>{let n=[],o=new Uint8Array(this._wasm.HEAP);for(let i=o[r];i!==0;i=o[++r])n.push(i);return String.fromCharCode.apply(null,n)},this.addError=(r,n,o,i,s,a)=>{r.push({message:n,frameLength:o,frameNumber:i,inputBytes:s,outputSamples:a})},this.instantiate=(r,n)=>(n&&D.setModule(r,n),this._wasm=new r(D).instantiate(),this._pointers=new Set,this._wasm.ready.then(()=>this))}var Es=ka(Cs(),1);var Sc=()=>globalThis.Worker||Es.default,Xt=class extends Sc(){constructor(e,r,n,o){D.modules||new D;let i=D.modules.get(n);if(!i){let s="text/javascript",a,c=`'use strict';(${((l,u,d)=>{let f,p,y=new Promise(h=>{p=h});self.onmessage=({data:{id:h,command:g,data:b}})=>{let T=y,P={id:h},ne;g==="init"?(Object.defineProperties(l,{WASMAudioDecoderCommon:{value:u},EmscriptenWASM:{value:d},module:{value:b.module},isWebWorker:{value:!0}}),f=new l(b.options),p()):g==="free"?f.free():g==="ready"?T=T.then(()=>f.ready):g==="reset"?T=T.then(()=>f.reset()):(Object.assign(P,f[g](Array.isArray(b)?b.map(Y=>new Uint8Array(Y)):new Uint8Array(b))),ne=P.channelData?P.channelData.map(Y=>Y.buffer):[]),T.then(()=>self.postMessage(P,ne))}}).toString()})(${n}, ${D}, ${o})`;try{a=typeof process.versions.node<"u"}catch{}i=a?`data:${s};base64,${Buffer.from(c).toString("base64")}`:URL.createObjectURL(new Blob([c],{type:s})),D.modules.set(n,i)}super(i,{name:r}),this._id=Number.MIN_SAFE_INTEGER,this._enqueuedOperations=new Map,this.onmessage=({data:s})=>{let{id:a,...c}=s;this._enqueuedOperations.get(a)(c),this._enqueuedOperations.delete(a)},new o(D).getModule().then(s=>{this.postToDecoder("init",{module:s,options:e})})}async postToDecoder(e,r){return new Promise(n=>{this.postMessage({command:e,id:this._id,data:r}),this._enqueuedOperations.set(this._id++,n)})}get ready(){return this.postToDecoder("ready")}async free(){await this.postToDecoder("free").finally(()=>{this.terminate()})}async reset(){await this.postToDecoder("reset")}};var On=(t,e)=>{Object.defineProperty(t,"name",{value:e})};var N=Symbol,Ts=", ",_=(()=>{let t="front",e="side",r="rear",n="left",o="center",i="right";return["",t+" ",e+" ",r+" "].map(s=>[[n,i],[n,i,o],[n,o,i],[o,n,i],[o]].flatMap(a=>a.map(c=>s+c).join(Ts)))})(),Ee="LFE",Ze="monophonic (mono)",et="stereo",_r="surround",O=(t,...e)=>`${[Ze,et,`linear ${_r}`,"quadraphonic",`5.0 ${_r}`,`5.1 ${_r}`,`6.1 ${_r}`,`7.1 ${_r}`][t-1]} (${e.join(Ts)})`,Ar=[Ze,O(2,_[0][0]),O(3,_[0][2]),O(4,_[1][0],_[3][0]),O(5,_[1][2],_[3][0]),O(6,_[1][2],_[3][0],Ee),O(7,_[1][2],_[2][0],_[3][4],Ee),O(8,_[1][2],_[2][0],_[3][0],Ee)],zs=192e3,Ps=176400,Bn=96e3,Vn=88200,Fs=64e3,tt=48e3,Kt=44100,qt=32e3,$t=24e3,Yt=22050,jt=16e3,Un=12e3,Gn=11025,Jt=8e3,Is=7350,ve="absoluteGranulePosition",M="bandwidth",j="bitDepth",J="bitrate",wr=J+"Maximum",Mr=J+"Minimum",Lr=J+"Nominal",Te="buffer",Cr=Te+"Fullness",H="codec",Q=H+"Frames",Er="coupledStreamCount",Qt="crc",Tr=Qt+"16",zr=Qt+"32",R="data",v="description",ze="duration",Zt="emphasis",Pr="hasOpusPadding",ae="header",rt="isContinuedPacket",Fr="isCopyrighted",nt="isFirstPage",Ir="isHome",ce="isLastPage",De="isOriginal",Ne="isPrivate",kr="isVbr",ie="layer",m="length",w="mode",Oe=w+"Extension",Wn="mpeg",Be=Wn+"Version",Rr="numberAACFrames",Hr="outputGain",vt="preSkip",Dr="profile",Xn=N(),Ve="protection",ii="rawData",he="segments",L="subarray",ot="version",_t="vorbis",Nr=_t+"Comments",er=_t+"Setup",Kn="block",Or=Kn+"ingStrategy",qn=N(),Ue=Kn+"Size",it=Kn+"size0",st=Kn+"size1",Br=N(),$n="channel",Ge=$n+"MappingFamily",Vr=$n+"MappingTable",Z=$n+"Mode",Ur=N(),S=$n+"s",ks="copyright",Gr=ks+"Id",Wr=ks+"IdStart",We="frame",Xe=We+"Count",se=We+"Length",Yn="Number",Ke=We+Yn,Pe=We+"Padding",A=We+"Size",Rs="Rate",Xr="inputSample"+Rs,si="page",At=si+"Checksum",tr=N(),at=si+"SegmentTable",G=si+"Sequence"+Yn,ai="sample",Kr=ai+Yn,C=ai+Rs,Fe=N(),E=ai+"s",jn="stream",qr=jn+"Count",$r=jn+"Info",Ie=jn+"Serial"+Yn,ci=jn+"StructureVersion",li="total",wt=li+"BytesOut",Mt=li+"Duration",Lt=li+"Samples",z=N(),ye=N(),Yr=N(),ct=N(),_e=N(),Jn=N(),ui=N(),lt=N(),F=N(),ge=N(),xe=N(),ke=N(),ut=N(),Qn=N(),Ae=N(),we=N(),be=N(),Zn=N(),ee=Uint8Array,dt=DataView,I="reserved",te="bad",rr="free",jr="none",eo="16bit CRC";var di=(t,e,r)=>{for(let n=0;n<t[m];n++){let o=e(n);for(let i=8;i>0;i--)o=r(o);t[n]=o}return t},_c=di(new ee(256),t=>t,t=>t&128?7^t<<1:t<<1),B=[di(new Uint16Array(256),t=>t<<8,t=>t<<1^(t&32768?32773:0))],V=[di(new Uint32Array(256),t=>t,t=>t>>>1^(t&1)*3988292384)];for(let t=0;t<15;t++){B.push(new Uint16Array(256)),V.push(new Uint32Array(256));for(let e=0;e<=255;e++)B[t+1][e]=B[0][B[t][e]>>>8]^B[t][e]<<8,V[t+1][e]=V[t][e]>>>8^V[0][V[t][e]&255]}var Ds=t=>{let e=0,r=t[m];for(let n=0;n!==r;n++)e=_c[e^t[n]];return e},Ns=t=>{let e=t[m],r=e-16,n=0,o=0;for(;o<=r;)n^=t[o++]<<8|t[o++],n=B[15][n>>8]^B[14][n&255]^B[13][t[o++]]^B[12][t[o++]]^B[11][t[o++]]^B[10][t[o++]]^B[9][t[o++]]^B[8][t[o++]]^B[7][t[o++]]^B[6][t[o++]]^B[5][t[o++]]^B[4][t[o++]]^B[3][t[o++]]^B[2][t[o++]]^B[1][t[o++]]^B[0][t[o++]];for(;o!==e;)n=(n&255)<<8^B[0][n>>8^t[o++]];return n},Os=t=>{let e=t[m],r=e-16,n=0,o=0;for(;o<=r;)n=V[15][(t[o++]^n)&255]^V[14][(t[o++]^n>>>8)&255]^V[13][(t[o++]^n>>>16)&255]^V[12][t[o++]^n>>>24]^V[11][t[o++]]^V[10][t[o++]]^V[9][t[o++]]^V[8][t[o++]]^V[7][t[o++]]^V[6][t[o++]]^V[5][t[o++]]^V[4][t[o++]]^V[3][t[o++]]^V[2][t[o++]]^V[1][t[o++]]^V[0][t[o++]];for(;o!==e;)n=V[0][(n^t[o++])&255]^n>>>8;return n^-1},Qr=(...t)=>{let e=new ee(t.reduce((r,n)=>r+n[m],0));return t.reduce((r,n)=>(e.set(n,r),r+n[m]),0),e},le=t=>String.fromCharCode(...t),Hs=[0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15],Jr=t=>Hs[t&15]<<4|Hs[t>>4],to=class{constructor(e){this._data=e,this._pos=e[m]*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,(Jr(this._data[r-1])<<8)+Jr(this._data[r])>>7-n&255}},Bs=(t,e)=>{try{return t.getBigInt64(e,!0)}catch{let r=t.getUint8(e+7)&128?-1:1,n=t.getUint32(e,!0),o=t.getUint32(e+4,!0);return r===-1&&(n=~n+1,o=~o+1),o>1048575&&console.warn("This platform does not support BigInt"),r*(n+o*2**32)}};var Zr=class{constructor(e,r){this._onCodecHeader=e,this._onCodecUpdate=r,this[Ae]()}[we](){this._isEnabled=!0}[Ae](){this._headerCache=new Map,this._codecUpdateData=new WeakMap,this._codecHeaderSent=!1,this._codecShouldUpdate=!1,this._bitrate=null,this._isEnabled=!1}[Qn](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}}[F](e){let r=this._headerCache.get(e);return r&&this._updateCurrentHeader(e),r}[ge](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 W=new WeakMap,q=new WeakMap;var re=class{constructor(e,r){this._codecParser=e,this._headerCache=r}*[ui](){let e;do{if(e=yield*this.Frame[xe](this._codecParser,this._headerCache,0),e)return e;this._codecParser[ye](1)}while(!0)}*[lt](e){let r=yield*this[ui](),n=q.get(r)[m];if(e||this._codecParser._flushing||(yield*this.Header[F](this._codecParser,this._headerCache,n)))return this._headerCache[we](),this._codecParser[ye](n),this._codecParser[ct](r),r;this._codecParser[_e](`Missing ${We} at ${n} bytes from current position.`,`Dropping current ${We} and trying again.`),this._headerCache[Ae](),this._codecParser[ye](1)}};var Ct=class{constructor(e,r){q.set(this,{[ae]:e}),this[R]=r}};var ue=class extends Ct{static*[xe](e,r,n,o,i){let s=yield*e[F](n,o,i);if(s){let a=W.get(s)[se],c=W.get(s)[E],l=(yield*n[z](a,i))[L](0,a);return new r(s,l,c)}else return null}constructor(e,r,n){super(e,r),this[ae]=e,this[E]=n,this[ze]=n/e[C]*1e3,this[Ke]=null,this[wt]=null,this[Lt]=null,this[Mt]=null,q.get(this)[m]=r[m]}};var mi="unsynchronizationFlag",fi="extendedHeaderFlag",pi="experimentalFlag",hi="footerPresent",en=class t{static*getID3v2Header(e,r,n){let i={},s=yield*e[z](3,n);if(s[0]!==73||s[1]!==68||s[2]!==51||(s=yield*e[z](10,n),i[ot]=`id3v2.${s[3]}.${s[4]}`,s[5]&15)||(i[mi]=!!(s[5]&128),i[fi]=!!(s[5]&64),i[pi]=!!(s[5]&32),i[hi]=!!(s[5]&16),s[6]&128||s[7]&128||s[8]&128||s[9]&128))return null;let a=s[6]<<21|s[7]<<14|s[8]<<7|s[9];return i[m]=10+a,new t(i)}constructor(e){this[ot]=e[ot],this[mi]=e[mi],this[fi]=e[fi],this[pi]=e[pi],this[hi]=e[hi],this[m]=e[m]}};var de=class{constructor(e){W.set(this,e),this[j]=e[j],this[J]=null,this[S]=e[S],this[Z]=e[Z],this[C]=e[C]}};var Xs={0:[rr,rr,rr,rr,rr],16:[32,32,32,32,8],240:[te,te,te,te,te]},ro=(t,e,r)=>8*((t+r)%e+e)*(1<<(t+r)/e)-8*e*(e/8|0);for(let t=2;t<15;t++)Xs[t<<4]=[t*32,ro(t,4,0),ro(t,4,-1),ro(t,8,4),ro(t,8,0)];var Ac=0,wc=1,Mc=2,Lc=3,Vs=4,no="bands ",oo=" to 31",Us={0:no+4+oo,16:no+8+oo,32:no+12+oo,48:no+16+oo},Et="bitrateIndex",tn="v2",lo="v1",io="Intensity stereo ",so=", MS stereo ",ao="on",co="off",Cc={0:io+co+so+co,16:io+ao+so+co,32:io+co+so+ao,48:io+ao+so+ao},yi={0:{[v]:I},2:{[v]:"Layer III",[Pe]:1,[Oe]:Cc,[lo]:{[Et]:Mc,[E]:1152},[tn]:{[Et]:Vs,[E]:576}},4:{[v]:"Layer II",[Pe]:1,[Oe]:Us,[E]:1152,[lo]:{[Et]:wc},[tn]:{[Et]:Vs}},6:{[v]:"Layer I",[Pe]:4,[Oe]:Us,[E]:384,[lo]:{[Et]:Ac},[tn]:{[Et]:Lc}}},gi="MPEG Version ",Gs="ISO/IEC ",Ec={0:{[v]:`${gi}2.5 (later extension of MPEG 2)`,[ie]:tn,[C]:{0:Gn,4:Un,8:Jt,12:I}},8:{[v]:I},16:{[v]:`${gi}2 (${Gs}13818-3)`,[ie]:tn,[C]:{0:Yt,4:$t,8:jt,12:I}},24:{[v]:`${gi}1 (${Gs}11172-3)`,[ie]:lo,[C]:{0:Kt,4:tt,8:qt,12:I}},length:m},Tc={0:eo,1:jr},zc={0:jr,1:"50/15 ms",2:I,3:"CCIT J.17"},Ws={0:{[S]:2,[v]:et},64:{[S]:2,[v]:"joint "+et},128:{[S]:2,[v]:"dual channel"},192:{[S]:1,[v]:Ze}},Tt=class t extends de{static*[F](e,r,n){let o={},i=yield*en.getID3v2Header(e,r,n);i&&(yield*e[z](i[m],n),e[ye](i[m]));let s=yield*e[z](4,n),a=le(s[L](0,4)),c=r[F](a);if(c)return new t(c);if(s[0]!==255||s[1]<224)return null;let l=Ec[s[1]&24];if(l[v]===I)return null;let u=s[1]&6;if(yi[u][v]===I)return null;let d={...yi[u],...yi[u][l[ie]]};if(o[Be]=l[v],o[ie]=d[v],o[E]=d[E],o[Ve]=Tc[s[1]&1],o[m]=4,o[J]=Xs[s[2]&240][d[Et]],o[J]===te||(o[C]=l[C][s[2]&12],o[C]===I)||(o[Pe]=s[2]&2&&d[Pe],o[Ne]=!!(s[2]&1),o[se]=Math.floor(125*o[J]*o[E]/o[C]+o[Pe]),!o[se]))return null;let f=s[3]&192;if(o[Z]=Ws[f][v],o[S]=Ws[f][S],o[Oe]=d[Oe][s[3]&48],o[Fr]=!!(s[3]&8),o[De]=!!(s[3]&4),o[Zt]=zc[s[3]&3],o[Zt]===I)return null;o[j]=16;{let{length:p,frameLength:y,samples:h,...g}=o;r[ge](a,o,g)}return new t(o)}constructor(e){super(e),this[J]=e[J],this[Zt]=e[Zt],this[Pe]=e[Pe],this[Fr]=e[Fr],this[De]=e[De],this[Ne]=e[Ne],this[ie]=e[ie],this[Oe]=e[Oe],this[Be]=e[Be],this[Ve]=e[Ve]}};var rn=class t extends ue{static*[xe](e,r,n){return yield*super[xe](Tt,t,e,r,n)}constructor(e,r,n){super(e,r,n)}};var nn=class extends re{constructor(e,r,n){super(e,r),this.Frame=rn,this.Header=Tt,n(this[H])}get[H](){return Wn}*[ke](){return yield*this[lt]()}};var Pc={0:"MPEG-4",8:"MPEG-2"},Fc={0:"valid",2:te,4:te,6:te},Ic={0:eo,1:jr},kc={0:"AAC Main",64:"AAC LC (Low Complexity)",128:"AAC SSR (Scalable Sample Rate)",192:"AAC LTP (Long Term Prediction)"},Rc={0:Bn,4:Vn,8:Fs,12:tt,16:Kt,20:qt,24:$t,28:Yt,32:jt,36:Un,40:Gn,44:Jt,48:Is,52:I,56:I,60:"frequency is written explicitly"},Ks={0:{[S]:0,[v]:"Defined in AOT Specific Config"},64:{[S]:1,[v]:Ze},128:{[S]:2,[v]:O(2,_[0][0])},192:{[S]:3,[v]:O(3,_[1][3])},256:{[S]:4,[v]:O(4,_[1][3],_[3][4])},320:{[S]:5,[v]:O(5,_[1][3],_[3][0])},384:{[S]:6,[v]:O(6,_[1][3],_[3][0],Ee)},448:{[S]:8,[v]:O(8,_[1][3],_[2][0],_[3][0],Ee)}},zt=class t extends de{static*[F](e,r,n){let o={},i=yield*e[z](7,n),s=le([i[0],i[1],i[2],i[3]&252|i[6]&3]),a=r[F](s);if(a)Object.assign(o,a);else{if(i[0]!==255||i[1]<240||(o[Be]=Pc[i[1]&8],o[ie]=Fc[i[1]&6],o[ie]===te))return null;let l=i[1]&1;o[Ve]=Ic[l],o[m]=l?7:9,o[Xn]=i[2]&192,o[Fe]=i[2]&60;let u=i[2]&2;if(o[Dr]=kc[o[Xn]],o[C]=Rc[o[Fe]],o[C]===I)return null;o[Ne]=!!u,o[Ur]=(i[2]<<8|i[3])&448,o[Z]=Ks[o[Ur]][v],o[S]=Ks[o[Ur]][S],o[De]=!!(i[3]&32),o[Ir]=!!(i[3]&8),o[Gr]=!!(i[3]&8),o[Wr]=!!(i[3]&4),o[j]=16,o[E]=1024,o[Rr]=i[6]&3;{let{length:d,channelModeBits:f,profileBits:p,sampleRateBits:y,frameLength:h,samples:g,numberAACFrames:b,...T}=o;r[ge](s,o,T)}}if(o[se]=(i[3]<<11|i[4]<<3|i[5]>>5)&8191,!o[se])return null;let c=(i[5]<<6|i[6]>>2)&2047;return o[Cr]=c===2047?"VBR":c,new t(o)}constructor(e){super(e),this[Gr]=e[Gr],this[Wr]=e[Wr],this[Cr]=e[Cr],this[Ir]=e[Ir],this[De]=e[De],this[Ne]=e[Ne],this[ie]=e[ie],this[m]=e[m],this[Be]=e[Be],this[Rr]=e[Rr],this[Dr]=e[Dr],this[Ve]=e[Ve]}get audioSpecificConfig(){let e=W.get(this),r=e[Xn]+64<<5|e[Fe]<<5|e[Ur]>>3,n=new ee(2);return new dt(n[Te]).setUint16(0,r,!1),n}};var on=class t extends ue{static*[xe](e,r,n){return yield*super[xe](zt,t,e,r,n)}constructor(e,r,n){super(e,r,n)}};var sn=class extends re{constructor(e,r,n){super(e,r),this.Frame=on,this.Header=zt,n(this[H])}get[H](){return"aac"}*[ke](){return yield*this[lt]()}};var mt=class t extends ue{static _getFrameFooterCrc16(e){return(e[e[m]-2]<<8)+e[e[m]-1]}static[Zn](e){let r=t._getFrameFooterCrc16(e),n=Ns(e[L](0,-2));return r===n}constructor(e,r,n){r[$r]=n,r[Tr]=t._getFrameFooterCrc16(e),super(r,e,W.get(r)[E])}};var qs="get from STREAMINFO metadata block",Hc={0:"Fixed",1:"Variable"},$s={0:I,16:192};for(let t=2;t<16;t++)$s[t<<4]=t<6?576*2**(t-2):2**t;var Dc={0:qs,1:Vn,2:Ps,3:zs,4:Jt,5:jt,6:Yt,7:$t,8:qt,9:Kt,10:tt,11:Bn,15:te},Nc={0:{[S]:1,[v]:Ze},16:{[S]:2,[v]:O(2,_[0][0])},32:{[S]:3,[v]:O(3,_[0][1])},48:{[S]:4,[v]:O(4,_[1][0],_[3][0])},64:{[S]:5,[v]:O(5,_[1][1],_[3][0])},80:{[S]:6,[v]:O(6,_[1][1],Ee,_[3][0])},96:{[S]:7,[v]:O(7,_[1][1],Ee,_[3][4],_[2][0])},112:{[S]:8,[v]:O(8,_[1][1],Ee,_[3][0],_[2][0])},128:{[S]:2,[v]:`${et} (left, diff)`},144:{[S]:2,[v]:`${et} (diff, right)`},160:{[S]:2,[v]:`${et} (avg, diff)`},176:I,192:I,208:I,224:I,240:I},Oc={0:qs,2:8,4:12,6:I,8:16,10:20,12:24,14:I},ft=class t extends de{static _decodeUTF8Int(e){if(e[0]>254)return null;if(e[0]<128)return{value:e[0],length:1};let r=1;for(let s=64;s&e[0];s>>=1)r++;let n=r-1,o=0,i=0;for(;n>0;i+=6,n--){if((e[n]&192)!==128)return null;o|=(e[n]&63)<<i}return o|=(e[n]&127>>r)<<i,{value:o,length:r}}static[be](e,r){let n={[z]:function*(){return e}};return t[F](n,r,0).next().value}static*[F](e,r,n){let o=yield*e[z](6,n);if(o[0]!==255||!(o[1]===248||o[1]===249))return null;let i={},s=le(o[L](0,4)),a=r[F](s);if(a)Object.assign(i,a);else{if(i[qn]=o[1]&1,i[Or]=Hc[i[qn]],i[Br]=o[2]&240,i[Fe]=o[2]&15,i[Ue]=$s[i[Br]],i[Ue]===I||(i[C]=Dc[i[Fe]],i[C]===te)||o[3]&1)return null;let l=Nc[o[3]&240];if(l===I||(i[S]=l[S],i[Z]=l[v],i[j]=Oc[o[3]&14],i[j]===I))return null}i[m]=5,o=yield*e[z](i[m]+8,n);let c=t._decodeUTF8Int(o[L](4));if(!c||(i[qn]?i[Kr]=c.value:i[Ke]=c.value,i[m]+=c[m],i[Br]===96?(o[m]<i[m]&&(o=yield*e[z](i[m],n)),i[Ue]=o[i[m]-1]+1,i[m]+=1):i[Br]===112&&(o[m]<i[m]&&(o=yield*e[z](i[m],n)),i[Ue]=(o[i[m]-1]<<8)+o[i[m]]+1,i[m]+=2),i[E]=i[Ue],i[Fe]===12?(o[m]<i[m]&&(o=yield*e[z](i[m],n)),i[C]=o[i[m]-1]*1e3,i[m]+=1):i[Fe]===13?(o[m]<i[m]&&(o=yield*e[z](i[m],n)),i[C]=(o[i[m]-1]<<8)+o[i[m]],i[m]+=2):i[Fe]===14&&(o[m]<i[m]&&(o=yield*e[z](i[m],n)),i[C]=((o[i[m]-1]<<8)+o[i[m]])*10,i[m]+=2),o[m]<i[m]&&(o=yield*e[z](i[m],n)),i[Qt]=o[i[m]-1],i[Qt]!==Ds(o[L](0,i[m]-1))))return null;if(!a){let{blockingStrategyBits:l,frameNumber:u,sampleNumber:d,samples:f,sampleRateBits:p,blockSizeBits:y,crc:h,length:g,...b}=i;r[ge](s,i,b)}return new t(i)}constructor(e){super(e),this[Tr]=null,this[Or]=e[Or],this[Ue]=e[Ue],this[Ke]=e[Ke],this[Kr]=e[Kr],this[$r]=null}};var Bc=2,Vc=512*1024,Pt=class extends re{constructor(e,r,n){super(e,r),this.Frame=mt,this.Header=ft,n(this[H])}get[H](){return"flac"}*_getNextFrameSyncOffset(e){let r=yield*this._codecParser[z](2,0),n=r[m]-2;for(;e<n;){if(r[e]===255){let i=r[e+1];if(i===248||i===249)break;i!==255&&e++}e++}return e}*[ke](){do{let e=yield*ft[F](this._codecParser,this._headerCache,0);if(e){let r=W.get(e)[m]+Bc;for(;r<=Vc;){if(this._codecParser._flushing||(yield*ft[F](this._codecParser,this._headerCache,r))){let n=yield*this._codecParser[z](r);if(this._codecParser._flushing||(n=n[L](0,r)),mt[Zn](n)){let o=new mt(n,e);return this._headerCache[we](),this._codecParser[ye](r),this._codecParser[ct](o),o}}r=yield*this._getNextFrameSyncOffset(r+1)}this._codecParser[_e](`Unable to sync FLAC frame after searching ${r} bytes.`),this._codecParser[ye](r)}else this._codecParser[ye](yield*this._getNextFrameSyncOffset(1))}while(!0)}[ut](e){return e[G]===0?(this._headerCache[we](),this._streamInfo=e[R][L](13)):e[G]===1||(e[Q]=q.get(e)[he].map(r=>{let n=ft[be](r,this._headerCache);if(n)return new mt(r,n,this._streamInfo);this._codecParser[_e]("Failed to parse Ogg FLAC frame","Skipping invalid FLAC frame")}).filter(r=>!!r)),e}};var Ft=class t{static*[F](e,r,n){let o={},i=yield*e[z](28,n);if(i[0]!==79||i[1]!==103||i[2]!==103||i[3]!==83||(o[ci]=i[4],i[5]&248))return null;o[ce]=!!(i[5]&4),o[nt]=!!(i[5]&2),o[rt]=!!(i[5]&1);let a=new dt(ee.from(i[L](0,28))[Te]);o[ve]=Bs(a,6),o[Ie]=a.getInt32(14,!0),o[G]=a.getInt32(18,!0),o[At]=a.getInt32(22,!0);let c=i[26];o[m]=c+27,i=yield*e[z](o[m],n),o[se]=0,o[at]=[],o[tr]=ee.from(i[L](27,o[m]));for(let l=0,u=0;l<c;l++){let d=o[tr][l];o[se]+=d,u+=d,(d!==255||l===c-1)&&(o[at].push(u),u=0)}return new t(o)}constructor(e){W.set(this,e),this[ve]=e[ve],this[rt]=e[rt],this[nt]=e[nt],this[ce]=e[ce],this[at]=e[at],this[G]=e[G],this[At]=e[At],this[Ie]=e[Ie]}};var an=class t extends Ct{static*[xe](e,r,n){let o=yield*Ft[F](e,r,n);if(o){let i=W.get(o)[se],s=W.get(o)[m],a=s+i,c=(yield*e[z](a,0))[L](0,a),l=c[L](s,a);return new t(o,l,c)}else return null}constructor(e,r,n){super(e,r),q.get(this)[m]=n[m],this[Q]=[],this[ii]=n,this[ve]=e[ve],this[zr]=e[At],this[ze]=0,this[rt]=e[rt],this[nt]=e[nt],this[ce]=e[ce],this[G]=e[G],this[E]=0,this[Ie]=e[Ie]}};var nr=class extends ue{constructor(e,r,n){super(r,e,n)}};var Ys={0:Ar.slice(0,2),1:Ar},Se="SILK-only",$="CELT-only",uo="Hybrid",pt="narrowband",mo="medium-band",ht="wideband",or="super-wideband",ir="fullband",Uc={0:{[w]:Se,[M]:pt,[A]:10},8:{[w]:Se,[M]:pt,[A]:20},16:{[w]:Se,[M]:pt,[A]:40},24:{[w]:Se,[M]:pt,[A]:60},32:{[w]:Se,[M]:mo,[A]:10},40:{[w]:Se,[M]:mo,[A]:20},48:{[w]:Se,[M]:mo,[A]:40},56:{[w]:Se,[M]:mo,[A]:60},64:{[w]:Se,[M]:ht,[A]:10},72:{[w]:Se,[M]:ht,[A]:20},80:{[w]:Se,[M]:ht,[A]:40},88:{[w]:Se,[M]:ht,[A]:60},96:{[w]:uo,[M]:or,[A]:10},104:{[w]:uo,[M]:or,[A]:20},112:{[w]:uo,[M]:ir,[A]:10},120:{[w]:uo,[M]:ir,[A]:20},128:{[w]:$,[M]:pt,[A]:2.5},136:{[w]:$,[M]:pt,[A]:5},144:{[w]:$,[M]:pt,[A]:10},152:{[w]:$,[M]:pt,[A]:20},160:{[w]:$,[M]:ht,[A]:2.5},168:{[w]:$,[M]:ht,[A]:5},176:{[w]:$,[M]:ht,[A]:10},184:{[w]:$,[M]:ht,[A]:20},192:{[w]:$,[M]:or,[A]:2.5},200:{[w]:$,[M]:or,[A]:5},208:{[w]:$,[M]:or,[A]:10},216:{[w]:$,[M]:or,[A]:20},224:{[w]:$,[M]:ir,[A]:2.5},232:{[w]:$,[M]:ir,[A]:5},240:{[w]:$,[M]:ir,[A]:10},248:{[w]:$,[M]:ir,[A]:20}},sr=class t extends de{static[be](e,r,n){let o={};if(o[S]=e[9],o[Ge]=e[18],o[m]=o[Ge]!==0?21+o[S]:19,e[m]<o[m])throw new Error("Out of data while inside an Ogg Page");let i=r[0]&3,s=i===3?2:1,a=le(e[L](0,o[m]))+le(r[L](0,s)),c=n[F](a);if(c)return new t(c);if(a.substr(0,8)!=="OpusHead"||e[8]!==1)return null;o[R]=ee.from(e[L](0,o[m]));let l=new dt(o[R][Te]);if(o[j]=16,o[vt]=l.getUint16(10,!0),o[Xr]=l.getUint32(12,!0),o[C]=tt,o[Hr]=l.getInt16(16,!0),o[Ge]in Ys&&(o[Z]=Ys[o[Ge]][o[S]-1],!o[Z]))return null;o[Ge]!==0&&(o[qr]=e[19],o[Er]=e[20],o[Vr]=[...e[L](21,o[S]+21)]);let u=Uc[248&r[0]];switch(o[w]=u[w],o[M]=u[M],o[A]=u[A],i){case 0:o[Xe]=1;break;case 1:case 2:o[Xe]=2;break;case 3:o[kr]=!!(128&r[1]),o[Pr]=!!(64&r[1]),o[Xe]=63&r[1];break;default:return null}{let{length:d,data:f,channelMappingFamily:p,...y}=o;n[ge](a,o,y)}return new t(o)}constructor(e){super(e),this[R]=e[R],this[M]=e[M],this[Ge]=e[Ge],this[Vr]=e[Vr],this[Er]=e[Er],this[Xe]=e[Xe],this[A]=e[A],this[Pr]=e[Pr],this[Xr]=e[Xr],this[kr]=e[kr],this[w]=e[w],this[Hr]=e[Hr],this[vt]=e[vt],this[qr]=e[qr]}};var cn=class extends re{constructor(e,r,n){super(e,r),this.Frame=nr,this.Header=sr,n(this[H]),this._identificationHeader=null,this._preSkipRemaining=null}get[H](){return"opus"}[ut](e){return e[G]===0?(this._headerCache[we](),this._identificationHeader=e[R]):e[G]===1||(e[Q]=q.get(e)[he].map(r=>{let n=sr[be](this._identificationHeader,r,this._headerCache);if(n){this._preSkipRemaining===null&&(this._preSkipRemaining=n[vt]);let o=n[A]*n[Xe]/1e3*n[C];return this._preSkipRemaining>0&&(this._preSkipRemaining-=o,o=this._preSkipRemaining<0?-this._preSkipRemaining:0),new nr(r,n,o)}this._codecParser[Jn]("Failed to parse Ogg Opus Header","Not a valid Ogg Opus file")})),e}};var ar=class extends ue{constructor(e,r,n){super(r,e,n)}};var xi={};for(let t=0;t<8;t++)xi[t+6]=2**(6+t);var ln=class t extends de{static[be](e,r,n,o){if(e[m]<30)throw new Error("Out of data while inside an Ogg Page");let i=le(e[L](0,30)),s=r[F](i);if(s)return new t(s);let a={[m]:30};if(i.substr(0,7)!=="vorbis")return null;a[R]=ee.from(e[L](0,30));let c=new dt(a[R][Te]);if(a[ot]=c.getUint32(7,!0),a[ot]!==0||(a[S]=e[11],a[Z]=Ar[a[S]-1]||"application defined",a[C]=c.getUint32(12,!0),a[wr]=c.getInt32(16,!0),a[Lr]=c.getInt32(20,!0),a[Mr]=c.getInt32(24,!0),a[st]=xi[(e[28]&240)>>4],a[it]=xi[e[28]&15],a[it]>a[st])||e[29]!==1)return null;a[j]=32,a[er]=o,a[Nr]=n;{let{length:l,data:u,version:d,vorbisSetup:f,vorbisComments:p,...y}=a;r[ge](i,a,y)}return new t(a)}constructor(e){super(e),this[wr]=e[wr],this[Mr]=e[Mr],this[Lr]=e[Lr],this[it]=e[it],this[st]=e[st],this[R]=e[R],this[Nr]=e[Nr],this[er]=e[er]}};var un=class extends re{constructor(e,r,n){super(e,r),this.Frame=ar,n(this[H]),this._identificationHeader=null,this._setupComplete=!1,this._prevBlockSize=null}get[H](){return _t}[ut](e){e[Q]=[];for(let r of q.get(e)[he])if(r[0]===1)this._headerCache[we](),this._identificationHeader=e[R],this._setupComplete=!1;else if(r[0]===3)this._vorbisComments=r;else if(r[0]===5)this._vorbisSetup=r,this._mode=this._parseSetupHeader(r),this._setupComplete=!0;else if(this._setupComplete){let n=ln[be](this._identificationHeader,this._headerCache,this._vorbisComments,this._vorbisSetup);n?e[Q].push(new ar(r,n,this._getSamples(r,n))):this._codecParser[logError]("Failed to parse Ogg Vorbis Header","Not a valid Ogg Vorbis file")}return e}_getSamples(e,r){let o=this._mode.blockFlags[e[0]>>1&this._mode.mask]?r[st]:r[it],i=this._prevBlockSize===null?0:(this._prevBlockSize+o)/4;return this._prevBlockSize=o,i}_parseSetupHeader(e){let r=new to(e),n={count:0,blockFlags:[]};for(;(r.read(1)&1)!==1;);let o;for(;n.count<64&&r.position>0;){Jr(r.read(8));let i=0;for(;r.read(8)===0&&i++<3;);if(i===4)o=r.read(7),n.blockFlags.unshift(o&1),r.position+=6,n.count++;else{((Jr(o)&126)>>1)+1!==n.count&&this._codecParser[_e]("vorbis derived mode count did not match actual mode count");break}}return n.mask=(1<<Math.log2(n.count))-1,n}};var bi=class{constructor(e,r,n){this._codecParser=e,this._headerCache=r,this._onCodec=n,this._continuedPacket=new ee,this._codec=null,this._isSupported=null,this._previousAbsoluteGranulePosition=null}get[H](){return this._codec||""}_updateCodec(e,r){this._codec!==e&&(this._headerCache[Ae](),this._parser=new r(this._codecParser,this._headerCache,this._onCodec),this._codec=e)}_checkCodecSupport({data:e}){let r=le(e[L](0,8));switch(r){case"fishead\0":return!1;case"OpusHead":return this._updateCodec("opus",cn),!0;case(/^\x7fFLAC/.test(r)&&r):return this._updateCodec("flac",Pt),!0;case(/^\x01vorbis/.test(r)&&r):return this._updateCodec(_t,un),!0;default:return!1}}_checkPageSequenceNumber(e){e[G]!==this._pageSequenceNumber+1&&this._pageSequenceNumber>1&&e[G]>1&&this._codecParser[_e]("Unexpected gap in Ogg Page Sequence Number.",`Expected: ${this._pageSequenceNumber+1}, Got: ${e[G]}`),this._pageSequenceNumber=e[G]}_parsePage(e){this._isSupported===null&&(this._pageSequenceNumber=e[G],this._isSupported=this._checkCodecSupport(e)),this._checkPageSequenceNumber(e);let r=q.get(e),n=W.get(r[ae]),o=0;if(r[he]=n[at].map(i=>e[R][L](o,o+=i)),this._continuedPacket[m]&&(r[he][0]=Qr(this._continuedPacket,r[he][0]),this._continuedPacket=new ee),n[tr][n[tr][m]-1]===255&&(this._continuedPacket=Qr(this._continuedPacket,r[he].pop())),this._previousAbsoluteGranulePosition!==null&&(e[E]=Number(e[ve]-this._previousAbsoluteGranulePosition)),this._previousAbsoluteGranulePosition=e[ve],this._isSupported){let i=this._parser[ut](e);return this._codecParser[ct](i),i}else return e}},dn=class extends re{constructor(e,r,n){super(e,r),this._onCodec=n,this.Frame=an,this.Header=Ft,this._streams=new Map,this._currentSerialNumber=null}get[H](){let e=this._streams.get(this._currentSerialNumber);return e?e.codec:""}*[ke](){let e=yield*this[lt](!0);this._currentSerialNumber=e[Ie];let r=this._streams.get(this._currentSerialNumber);return r||(r=new bi(this._codecParser,this._headerCache,this._onCodec),this._streams.set(this._currentSerialNumber,r)),e[ce]&&this._streams.delete(this._currentSerialNumber),r._parsePage(e)}};var Si=()=>{},mn=class{constructor(e,{onCodec:r,onCodecHeader:n,onCodecUpdate:o,enableLogging:i=!1,enableFrameCRC32:s=!0}={}){this._inputMimeType=e,this._onCodec=r||Si,this._onCodecHeader=n||Si,this._onCodecUpdate=o,this._enableLogging=i,this._crc32=s?Os:Si,this[Ae]()}get[H](){return this._parser?this._parser[H]:""}[Ae](){this._headerCache=new Zr(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[Ae]()}*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 sn(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/mpeg/))this._parser=new nn(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/flac/))this._parser=new Pt(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/ogg/))this._parser=new dn(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[ke]();e&&(yield e)}}*[z](e=0,r=0){let n;for(;this._rawData[m]<=e+r;){if(n=yield,this._flushing)return this._rawData[L](r);n&&(this._totalBytesIn+=n[m],this._rawData=Qr(this._rawData,n))}return this._rawData[L](r)}[ye](e){this._currentReadPosition+=e,this._rawData=this._rawData[L](e)}[Yr](e){this._sampleRate=e[ae][C],e[ae][J]=e[ze]>0?Math.round(e[R][m]/e[ze])*8:0,e[Ke]=this._frameNumber++,e[wt]=this._totalBytesOut,e[Lt]=this._totalSamples,e[Mt]=this._totalSamples/this._sampleRate*1e3,e[zr]=this._crc32(e[R]),this._headerCache[Qn](e[ae][J],e[Mt]),this._totalBytesOut+=e[R][m],this._totalSamples+=e[E]}[ct](e){if(e[Q]){if(e[ce]){let r=e[E];e[Q].forEach(n=>{let o=n[E];r<o&&(n[E]=r>0?r:0,n[ze]=n[E]/n[ae][C]*1e3),r-=o,this[Yr](n)})}else e[E]=0,e[Q].forEach(r=>{e[E]+=r[E],this[Yr](r)});e[ze]=e[E]/this._sampleRate*1e3||0,e[Lt]=this._totalSamples,e[Mt]=this._totalSamples/this._sampleRate*1e3||0,e[wt]=this._totalBytesOut}else this[Yr](e)}_log(e,r){if(this._enableLogging){let n=[`${H}: ${this[H]}`,`inputMimeType: ${this._inputMimeType}`,`readPosition: ${this._currentReadPosition}`,`totalBytesIn: ${this._totalBytesIn}`,`${wt}: ${this._totalBytesOut}`],o=Math.max(...n.map(i=>i[m]));r.push(`--stats--${"-".repeat(o-9)}`,...n,"-".repeat(o)),e("codec-parser",r.reduce((i,s)=>i+`
4
+ `+s,""))}}[_e](...e){this._log(console.warn,e)}[Jn](...e){this._log(console.error,e)}};var js=mn;var fo=Q;var po=R;var Js=ae;var Qs=ce;var Zs=er;var ea=Lt;function qe(t){var e=e;function r(){}e={};function n(x){throw x}var o,i,s,a,c,l,u,d,f,p,y;function h(){var x=y.buffer;o=new Int8Array(x),i=new Int16Array(x),a=new Uint8Array(x),c=new Uint16Array(x),s=new Int32Array(x),l=new Uint32Array(x),u=new Float32Array(x),d=new Float64Array(x),f=new BigInt64Array(x),p=new BigUint64Array(x)}for(var g=x=>{for(var me,pr,Nt=0,vn=0,_n=x.length,An=new Uint8Array((_n*3>>2)-(x[_n-2]=="=")-(x[_n-1]=="="));Nt<_n;Nt+=4,vn+=3)me=He[x.charCodeAt(Nt+1)],pr=He[x.charCodeAt(Nt+2)],An[vn]=He[x.charCodeAt(Nt)]<<2|me>>4,An[vn+1]=me<<4|pr>>2,An[vn+2]=pr<<6|He[x.charCodeAt(Nt+3)];return An},b=()=>n(""),T=()=>{},P={},ne=x=>x(),Y=()=>performance.now(),Ht=(x,me)=>{if(P[x]&&(clearTimeout(P[x].id),delete P[x]),!me)return 0;var pr=setTimeout(()=>{delete P[x],ne(()=>Yi(x,Y()))},me);return P[x]={id:pr,timeout_ms:me},0},X=Math.atan,oe=Math.cos,fr=Math.exp,Dt=Math.log,No=Math.pow,Oo=Math.sin,Bo=x=>{var me=a.length;return x>>>=0,!1},Sn=x=>{throw`exit(${x})`},He=new Uint8Array(123),Ye=25;Ye>=0;--Ye)He[48+Ye]=52+Ye,He[65+Ye]=Ye,He[97+Ye]=26+Ye;He[43]=62,He[47]=63;var Aa={e:b,d:T,f:Ht,b:X,a:oe,i:fr,h:Dt,g:No,c:Oo,k:Bo,j:Sn};function wa(x){Ui=x.n,Gi=x.o,Wi=x.p,Xi=x.q,Ki=x.r,qi=x.s,$i=x.t,Yi=x.v}var Ui,Gi,Wi,Xi,Ki,qi,$i,Yi;function Ma(x){x.m()}qe.wasm||Object.defineProperty(qe,"wasm",{get:()=>String.raw`dynEncode012091253f87dì%nä= 4&¿nÝØä‘ÂLÚªã9ÚØ[äº\ ¼¡³R=}L]ŸÈÿ2 ÿù¶J1jj¡é,zäV|i¸Qk¹‡= 
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
+ 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
+ ˜ó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ô^ö–·“%!É
8
+ w¬= Îôª«…Ùת…JIS;õa rx×£.6¤ž°>5²Åà,õ°°h6ûUp©²v#}%é‘= R¢hõ@ëQiJٔ\ÛpŸ»©[vsiÙLE UG*sGÄ%V­¸Ч;º_]c؄p#¡:oZ{ãS5I¥]ÓaÎg+n×ýÿ‚Txy]²ö°k¦kêju¼xÐTá©#h>Ù]u\EA+§…퀤u¦ü؁lQPdë„NòzyÞ¼X€Ð]—ˆšÝøÝg¸BŠI¿BÕð_Ël¶Cuyºr|<¾¨Támo5êÿú>Ɓ[ã±G¨²)ü&áòüåBFouŠ!Íí.jÖìß½8¥Yëìá›ÈÁi—)‡qÀ:ÎüÐր¤Gͳô>°ú¯øâ?R£k~&ÑãÞ~AŠ¢;Ð' àÆUÀ»Lž­×)‚-!ÿkýí›Ù
9
+ §Û\{¤ólW^næzk?G~?_5™uÝñ7-ß«6YPðGßÚù\Êê -ûp¥èÓtM×hKȯ›ÒBAê"ïx×HÍ0Ôcè+èçÛÅf (§¢õ®%K£7éÞQ'MxãxÐúр…2!8_6̶Ì6ÌrûùS¥ZƒóAIŒüå6¿jÿ_°(ÿšä9©CCÄ!bŒq5Öô×x{ÍbÆÚmÒ@«µ××~҄D“;*ü ùeŽÀÞ·xˆv¾;¤Šƒ7¾ƒ[W\ýüb›@'q㵋ÙâÉE¾}}“tq-g=}Üs¢5Ó=}$Ĉ§£€Ó~SFÎgтn†N>1§/¥¸ŸG5àM8#ŠƒÒ;2¢/K%›–xVÓ(X„ H>µ¬ü;_˜j~Æw<¾ô*»ô= fAËbM¼iÀI Ip'c*”:oY¡VÖ3ˆ‹ûIdû®4ڍûýÆð}ûN¥û–I
10
+ Š¥ÎŒÛK*]Ø=M>t×ý³MwE”™è®"ۂ4­]]ÓgØ×EÈ.pN°¡ š»¤ç/I.ÿ+6 r@«Âz@§Bz@¯ÂIê-tí‡Ü«°·GföjϘÕì:žgÕ‡UÖ=}÷¦|§Eõ̐$a*¸›s¬´«£¯JÞàãËt™$š GSÚ³Ë1¯©&|±c!\åvçϷѸãßñ]á¸?ùää%6´= #e—¬Â;IÚ¡õckCÀò*\ï—0À•¿<>ªžÈåJA'ï´—¾ME.@OüІ0ex÷#2ÒùúµƒÇ½>o{›«ó= žÔïŸ;ǽ¶óЉ/†—Ô͌܂€¤±¢Ê’…w>ÃâС¯œ®Üa£¹6ŽVý  v†áÂh‘ôàÍ8˜D!Æ!ÆI;¢á܎Ž!oÑÙ …OÏKôò=}w<0rT= 5J„_±3×Ì;ôYÐ<aÞꏹ¾7ßz\˼Ûۙ@>Â{å%K¯º'ÊmÚòÁjRÒ×úw€@' ( €=}­QU«ÐÁђ•„,/?úYE‘yºQ얬Ÿ {ÇLÕæõNáð#f>_ò#Îv]˜/øÏ¾TUšà/øÀAÔ' w]€Ã]€W”•w]€Ã]‘X­÷Þn‹ð·TbAåÉ r¨4?t²„>1Ç[áüx  $€-ÒÂM†Ä…§·µwsú>üÂ&³÷.dgA¦h²*G× öcG×µF5¸Êqª$ñ?¦vÿ<ã;ÿs­Òi›ÇXòku®vUòõ•cuæÊ¦á«þ¸‹ÍŠ
11
+ ÑʑƒuãE"þ!6Ø Êæ­}}onË:W”•½¶‰˜«ÊFˆuÃÝUS-1ÀÕHòzµöƒ?ov»®¦‡
12
+ CyÈçaÆ
13
+ pÛ¢&{µ¨«‡±1˜EXÆÂu.7ž˜÷²ÛJ’Ê‚y[å²µ»bL’?·×øèìCp:æÕé§·rUèésÜ[o²ÛòDòDހ]ªä#çN’;Ïð)â´*z8 0Úèóª1çE¯´Rì,D4H(øË)šgp=Mý«û»=Mþt8º‡-HœxH”}Æ3Rt?ïɤC
14
+ §ßìéõm†õ,;æðk=M6ЦuSÝ^贮ٙ6=}掍†ƒóO«>
15
+ yÒîÐ7‰a'ûLUöø>ò -6Y(¬ÀM’Z¾ZHpu°c«à±[t*Ç*jwÇÍ$Áíqx©SwћËR¥é®[XJŒÓ8=}üµnt9“ÚÏ3z½¼¢[Q2Þ¸/=MP§Y&y=}ÚÛw—ëý¡—àߥۧÃŽþòýÁœÝÈìûê(±€¹4š'€ïÌ:Ûùk=}eªãä ÒCKA¤Æy×nvȧmÿŸ;=M]¿ÕŸ€Õjԋ–ª sF>úÔ©áÄ:cÀÆ<$|ê'!גSb¢V¿oÇåGð™¢U™ÊŒ u¤ZJýæÔÿÿ 2ç썯h£‹f¾Q–ZãÁ ®‚ 쭔Ç'ÎÅ[¸¨‰{?¢ÉhS5o›ƒU½c¢ÈÂÜ»JZmUí\áùµV6Bète™Ÿ…~Ãw‰÷0ÕஜísÆk,{ý¦ û‚iK+xvÅ兺ñ ‡a”[Sé»Û Nõòý¬ßà¨= 7p’å^ÿÃW,¿*M½áR±Ì–‰³FcË<üiÏ2|ö^vKÏHœò¹uY“bk¿mZ¡Oš^ÿç©~ïj°È”7 Žl©¨ç”_ó¼'½ßªåÏn \ O,wòi,Ū-¿?ð­}òÁá=MÍ®ÿ²›EÍñ™Â}¨³ô-ýƳúŠù5†6MÃ6ÓJz=}p³žûê—™9õà垫TM×Ve>G~ŒÙ»Vü²öHByf<õ©˜ +QWƒF+.ßAŽGÔ¦ÏèÚ½‚3‚ˆâÏYÀ¿T¢¸6ÌéɓÐ*¸Öª”ÏrÍëá=}6‰/U´ÃךZœþðóW.½ÞQ¼¾Æ”qÅ ‰½‡oâäB-ÓU‡€J¬má8øª€K.Œy±>.Q¡a0ޙ#!,¥BÞ¼­S?Ìr^¿_Ö.¹ó{=}/äÈAt}Æè̼4¡—Ôîgl]ÌUEý{}|DÏä–:°š-Ñÿ°=}àØéÕ}Êñøðº~¹¯4Yƒqm¹]!ºÿ=Mõ«ˆ‹ :ІNl"SÇps¸Gåȧá+’'M¿ÓîÁ.î¤=}„mÅ8Œ)¶rrHá"ÈøÂìËøÍ€í4ôŒ72bbߺq¿2ô=}A5.YV¬ÑÚã«Þ[F
16
+ )ºhXûÇӔ>È”?p¤ðoUÊÓ(€‚³FpÊi’¡Ð}SÚ~E ”!›|ðí‡,Ç9½Ãë¸Üì!¤ÓÃX%DBãu”&d‡ÔËôŽg¥‹á¾l¿AÉ)Á±†Ñ߇Èßý¹ód;|¤Z€»#ñscµ|¡…ÝOOe^‹ã‹ÂxÝ‹Í]¯òbÏ£÷ð4½ïÖ³;û/ºsñÆðFØIn²q¢©”*× kdO+÷削ҀiÉݱîBr]LÜ|8ƒ~7“vts÷9l|aë»EânӜ´GGò„$ÍR,<e0i¿ª
17
+ ±¾…àsÓZJ¨?&%Æ~-ǵª‡ö±;ól"=MLgÿt#
18
+ ü˜2 <Àn¬ÉäÍôÿ®É1S’Ä›à–= ôñZ¥-@z;¯‰üà¹ìJ͑=} ÊSeBÞ¯´~¢s mÿŽ-¨CozÀ/;Çël&uñZÖPV«¤¼Ÿ´ÀïY҄™˜–~—=}DrƒâgC §›ý çšrÆ7âÃ$ÿ¤Ý˜˜š~ސÝo@°³ٖsŸ;ozûÀ~R§ú"¶ü/ôcæ<œ°^Ôã/žéo•w×ër¦_UgûÀøäâkHț{&ÏMëqÀYÈLÁÊG†bÙéŸ:ˆš·q]ä\™PÔëÒ¤a£1è]á…^Y[›Sw¶å²¹gÒ0ód^žÈT.WœÄÜ[ՙ‹ ˆÙ*Hi®z¹µu}ýuý}#ú=}‹ÇÌRSûç—Mø=}¹¹>±ÿì¨áØ[R?ÿ^‰„¦ñê¾xZRS^PSSSç1ù}݈Zá4‡fffdf¨ Õˈw&eÜ$hä'{»Moöyg8¹ê¶@ìƒÛª0-ó•¯:¹ e{™†%<ÎÖ›}Þ¤v’ª6¡Àõ÷Gh8= “FºKVñ.ºHÅ)<Ñ= xs¥B“E;;áF¡·!¡-ÀYԖå^Ö'l̯ßûç¥køÞ‚?[ë>†" -9±/€ÊÛGǘ 6OY4VÕ»ºƒ[öBÿ:B¡WÍ&½ÇÎç »Î= 0y恧§5àÁFiA•›Í²®Ê\¿<î!xÞ³E =M¬U/ݾssæ¶µ·O̐0§GûúñŸòŸ¯{^/~ä׫ÊB = ;4¤þû–^Öï÷ŽL÷ï_ñíx<õ;ó5ËÇ~¾V+䅒lƒ¼Ñ°«Ôí¾)Âfš‘żo¼ÖùWa1køìFvœûëûRQ‡ø]q’| ï0g–…ºúîy["FÐþ7^‰Ò‰RµÚèæøÔyÚ
19
+ «ãŽˆi Þ@ˆ…U¾¸»* è#ò-ì¶HÛé¢ùL”;}·O7…7ÅsLæþý8¿Óùñ£}.=  Œ<•¾=M£ðQKTà^O|¸üggH«0³i£im¼_2ÿö”úÕ¨LaO+&]L¤šÞ+,k Þ¶Ñ~T¤ÂHì ÊèèÕÀíÒ³M܈‘ô~J<¤0Yð¢´."»â›èÄxqe%o݂yå—æâ¹25UÐ/’Þe.×´Øì_æ¯_zRÏíšÑŸ@ÿôLc¥Íðy@YΦ}µZ:ÑÂgZÒÒ(©¢‹9 ß €Yˆ«¦:™“v„ÙëÎ€ZJâÀVsOt™UÖ Ò¬¹‡1ûÚG´OÃóG©‚)œniÇí
20
+ Ô}½Ž3:.ˆk]ý²ÂB=M~ –ùÚYp95½‡qýãë ÐÞ/¡(ä'§œúºE/ê«ÌŸ9Ÿý%Ú!<σžJP&|[ƒ,gz’ű¡\o•0™Ôhûóþ“œ¶[KêÍð= TjÃVñ¸ƒƒD¼Ð_Ò
21
+ Ÿ0Ø_1dPðt  ýtZ¾r ù àJf^ƒ”;Ô2éÐ=}è¤B~ŸDšñ7ûÓÁ9³ýbA6ZØ´èÃg½ñóø.:~ï ]bªZŒì¿Ö²2QÄßo¥-¼Öá5uu/u³ òD‡œ;gjÀ‰ê”ÃÇ|eÁ9¬u$*ÐÁ'ÓDelÀëäì¥Ò¤Zší6OÂ@âF0-J÷¤=}_Õ߬ÒlÚM½Ç˜ôó~ð76›DEÖ'ds´Ùï”ÝßøaÊbÑ «‡^“™Í}&àØå?¾ÍF\2HD5òèÁƈd˓„dÈ·6ÙPÑ“|¬Ôq*Ê>ƒ0š¸Cì(ÛX‚YV…²ý Ipъí‹M k֔ů}Íóôc7“ÅŸbrñÐeQŒXæ©Æ¯ü_Û»‚˜ÝMþ©.c–kg fq ôo@qRL°šÅ‘Y΂ˆÈ»d'™<±+±î‰,Z­-GG»ø$âG†vÇû µA~YF5"§)ð™fßÐ鸉oJRRŝ¿ŽôXÝaú.QMw1 1þøiSo¾®È²¸hÌ/Κ })fBr.G1£Šº×cÎ𥰹&WÈüAnŒo#g ÃàLi²¥8ó=}dä¥$ŗ(³0h¢0OjfÀr¡6*#àæ"ãûQ?ƒ›ñ±«²Xóä*hïx=}ÎÞ¬výÞV÷{u²cöê¡h¯QÏYaê‚L$¦ûÈçIGßþEýWöºýëÛߐý×Ïð“i G´ì=M¦”ßÁý' þºeâNւ7ϝ/сuž·6rۇF¾Œ¾aUÌÓiÜúÒ]¶éUY*= g[ 2-_• c:ðY)
22
+ ‘¼9ŠîK¨‡£8†o•Sˆå¶K4U>+¯Ãî[H\wâRVœê/÷~Ðn•m”–¨s8CÏö©Ø%ÀašªS]ý޼§ r_¸ƒk‘
23
+ ªµfÄéÒQæ2¹Ão¹&3žžÇ¢u c5ë6}Í:B£Ž´1uiˆèÑfa’‹&]ävCŸ‚Ox·"³L˜Tè.€I.ÊÍzB!:FÏëxS´Q{ ÊõZ7Uh8yÝfDÎ dÔX3‰Q± ½–=MnØ nÅc"@;f?ª¬nû0Lp´h„,¸#Mà->+C= Ê¡±‘­^ٗ= ®Â¬QôÅùî
24
+ ‰öqòbŽß=}‡•±ÕAË/8RzT³…‘ÃÌ/_îMvÛ«;7S ìN4
25
+ ìŽo7è_¤ÀܕñŸÜ©è^U‰±A{Éö”žìŒXtnÝÇvz
26
+  ½½Ùo¨’‘çaúâ?EH”Ä»ë"‘±cÀÁEB]acgdck
27
+ ËÁ˜EŽv›ÇڄM:¸2¼"ŒûŽc³Ï‰1mA]ø[à= Ý|«oÒ&¡® ¡ŽK$ÚiPÚÛaº!ÊI#?3 ÄLoxJò¹<•$$»¢”¸h.ˆ‡ÕY¡‹g Û30ׁ ‡¶~ÃtéR0 ‰ni6ôeìa—z(¸9°Ù=}ocî†#üR{¶ù*×<Ç‹\Ès„a>#¿]¤š(R F×X#¢¯mVRòºÃ 0ã51ï‚íDÅVs“t‘ °YÎ=}ø ´·Ç”F ‡ØÕÓ¡ð—(B
28
+ €YS= '0“#×KB<rÔôþMz8”ï³tíY­S\¿©æ sŒ¢‡3~ÏcɃÜ[öÝ-y£îu(´{©ueŸØÝª g× »c*5쐣¡“І>¢9®Œïîêzr{½¢j|W¯Cú²‘"žÆ¼¦Xçt,òYCIV‡µX#¥‰_Žæ)‡3è "9†ûã)‰e…0߸Ûͤ³.¥>„å*ÁpƒepœŽQkîtÎڠŶïoÔ¸>³5„5Î= †Á¿rà†3S\ÌÒªs0 iæméŠQúR|Žë²­FA€è Áç-šÚýFå˜3$qϒ3˜+w؋<üªUþvü‘£b”)Ný¯j ;0õ”}᪟’[6k WÇíH® ¨{2Jþ!y+‹(-òÉýÎlœ SÆ_¼òu8¼z¸Rîùq_fGHî?{vTgeÒU<S’^£(îl=MéáDÛ¶­ùM·Ä7^õÿ
29
+ Ø£™ $\ öv=M¦†px™6+ã*àÀìî{ølÊEy9² hω³!ÕÑjú¸ò5pG£¸fëp šƒ‹‹N_::û\RQ[⣮M¿L#8¢ÑPk5]ý«¢zžg»güš åÐÒöí<ô â~ÂÔîtýX‚ÙñµE® :¼VBͼ çtnHç­|Ï0[óoûŠM™>h}ìAö…":Vk=M©l\äÓröQR}8qeV<J"†ÈFäíûI_Ó㎫D–ûëôzïå‘JNHŽeÛpµš…×8挓ƏPI¦û-t£sp£i¼äsç)’ç%0eq#„ôFør\ÃÁs•×CP÷ú½˜ÿ”qH²}EéÏtjT‰i.•Òþ¡=M%ä¸Õ’“ِe½_ëÝ;+ÏÁ9ó+ä·9:„׎´irxb@åÄä*Ý •
30
+ ²íC­K„‹Ý»@‡;ö4Päü
31
+ c ãJ1«õãLPµ“ŒêY‚àn12ȯÙI…r+˜= ¶/gýZ³#³}~å0ž´„ú¾dȑwûŠ{ ”èÒY­uŒvëNô›ºô[í&öõ¼[9Ø6
32
+ >ßNçRÆÛeí“u?ìý hWõM^8<˜ã*lkê@uú.FzFë=M-ûhêlT±ÏÌÚ®Eã¾ˆd¹P±¨à<ÛÉ‹Ê6åÉì’Î7Qv¬ÎÊýžì–$ºÑz†Ø'”¨mІØÒº´€ZM°o9=}óÃQ·»¾LW·:+¯˜’‡©p §àÕ<Ïí2†gþá1é9|R‹ówàutHý8ºï@¬^ŠŽ¢W¶—©ê ]ð½6ςOô¼<±Š—GãQ~V§xâ­ü1éUM&CÞÍ|„A<^ES¸3‘4
33
+ “Z!¡–Ú܋a7Î0¤q1çÖ'©~É ™‰ÙWüã­)¼ðÁê1…¡é)ˆ&n¬'eÚ!6¹¾P;<dm-TŠ©ÂñPÿoà¿§Úì4¢Î³¬¬iTÑ9ËÀêIqþdiÉNì=MW­H&¨rÅ«q,ì9C6/¤t«ô= ªK5Â#f¿%Î)¦k Aù4jFœv7üÃ*-Ð\é̗:œÄ²21 .›œ¨½ü,= åÔ3VI¯¾¸þ¼¥ÂÆÏç^g°(QÿiÕ¬•ª|ï
34
+ Êáu¹ÎÖ¥U“UÁ­YE¸ã²öÌÐm®~—wø%þz„êÑ5\5oF–n$»9³™mi6šzj1séGd¯Éؐ ‚å2(0¬>nE¥âV˜Çú°ŽÜé›Õ]þ´–Ýsא7ãû<ŠÞë§¶§V "íٜC'—œaÓXK£¯üYü›­úl^~¦¡—Rû!“=MÜPa´…_Cë.0£\}À±QP›9woÙæQù§j˜KŽõ û@É+gI4…wÖü.Û _éš4GÆ·#ÛxEh6–;L]¥2¥á5üP4õuÅ >›çò-ç»ë é;]÷ÑÑY¶•Œ v…Pö%‚!̝§8÷PÛ'rö§ÙßÏËí»kæ@æ{¨ËC4¬P¶Œ  ’óڄÈsåÍý£ÎxŽ)ÜØNóÐ3õÜMüB‚¡Å–ø‚×½»#»Ã-á;Ì'œ€‹Æz{ã­MòÆ0в>‡v‘©Ø¯³û#iàBé]á¹F{srP†Zá:ó‚öCŽÜ±ÀÃÊ—õ†p^kñþv1_Lç9νdŸØ¶ƒ+u¥ ˜æÌ·’ó“l~«‘Ù„îû­µŒ‰ ŒÕÔebyˆÞ«880Lˆ²5ìæôvZÉQ—¦HV/€ïF{8M*˜Áý¶ºÂؙO~ü‚3|ŽØx¨>Œ¹…çû֓ú;êŸ$hÌz~ç1Hún41eÆOXØ&É¡:h'¢yÓSvðxåÊ:µÆ-Ð)ì•_ä;k@%"’w¨s“
35
+ ËØJ‘­V+á~àé4È'QØÇÝøÄ|^ Ç)"¥0Ǥ„Ðñ kÂe\0¤|>ÿI÷ä’ÒÝýÔ]¶;L qìÅR¥-bE]Ârʏý#8n°»ØÑGø†,RmâAê_Ãpá%/BU#tΊq>ò*öú(Ž$âešò|=M)!‚Ð'¼¹¼R…ÐzsÑxˆ
36
+ ß+Ž.¼¢7â%”‘²0ÿPàiÝPñ¸˜MÏ唀:L兙-üœgß=MƒÅ#MÚ+üfmi®= µ¬³ñ}$ž¨9<og"Ø[x«Æˆ¯+_–ŸÐ N׿jV¦­¥˜#—Dw—$¢øŽ"ÂK**¨N]EB®°Ëß‹„Sâ^í%Í(æé¸ÞögŽÝ¢´Q{Ý»b§Õ×±±hÙ^6Ÿ«Gàý‡QÃe]t„ŠÉ¡šQ¯¡šñ⸸a·12À I¼Æ÷nZQ:bùh<c£5yÞ§è˜~xWÀ“Ûý$õAXÁÓ4Kóݛœ×¼„µ•@ߺøz¶Ñ1s7‰†=MÇ5ö‹¹k±R%×¶Hšâð/
37
+ +Å»ºD’ó(=Mj$×JD ò¡Æÿ¼"@ºqJº&Ïþ”IÑKÍP„çüƒzDjIö
38
+ ¼ììoìì¯íì÷†;#¶º8l”¾k#:âõØ÷¢™ ü‰_ŒWNì¹tjϔuÐÆ>I¿Œ‘y Høœ@u¬BÄÎ5Ûy:LU&–ù•𘆣Rn̵5ZGù<§h¿ËhÙâ²zí¾“¸?J‚àçªIx˜6ìÚËìV£áøˆ¡›h²'ºéÞXQÍНS݌ŒdÖ8هßM†9 ˆS}‰À4To0ömeΦ\ܳtQÖç'Ñ"Á©–l—à¿ö&.ÓÚçï±í¥­£ds¿Œý= ìZÔOäþr;Z©’ê–ÜÔ‰Ðó>B:½î-t®«˜d¶‹L­Ó¨$QèÔDϟ:!ˆì€ Ûq*sª4”xã´®X&(\À¾ŠÊØXA¸¨Åe2PšB…*“S{™é‚Ôce YÆBº©¦lÍX;O²:À‘d¿fQCŠnM‰Ë-ÂÂðǀ£ï¶¡SÚÁdC,KÂÍõÞŽ›=}=}ߛ ”2•y3‚R¤Ö3=}cÐ'Z®¦ž}±)„\‘(YàP8?ÈÚÂԺǶïiXEßÊè= êèŌDÐ&sÙ¦R÷_{Ù±4Ë2 ÆzãT!gU¯CÀ@¼“û7"Ìf ÆúX«à-öRÄ‘•êP$#¹‹oü³ãqŒ¿«í³= sü§{ÿ«·=}ß͕ Žq?¡ÏÙ¨½Ãç×å?ŸgÆ‹ôÝi,×¾ž’Ö³G¾»= ÙM9jA¿œ¬R¶‰Æ'‹s Öæe4æ+6ªƒ—À‚Uùxƒ G›Â+ŠYbçÅÉM"ä˜éÁZ]&ýŠ¡9˜å(¡nn¶1Í^¡<ÞÍeæ†:WæéÓ#4‘Òª“zB˂ÿ:°—5G¬ÛÂÒ(âÄGÿö*ë¶.ï\¶l^Iì°Ô‚üZ™ÖKXSý¨' M¾b]±>Œ0l›ùXŽ(^^¼òçHÂSîÃçàóˆ+!šmû¤šÂp= w¢·nHµÔHŅp™ȝXw]Ž©5"1ü>
39
+ ±XZ^Î9â¦gþ=}oäíçY÷Wé[~Ñ;=M㪓¶&$óÅßah
40
+ ÂãtÛókÿ^ƒÛ7z¶#X‚@ù€rÏ8FŠG"5ĘÐÄ~áUҜ8̭ˎÌe3΍ñЉA’´ºÌ=M¸óÆ~2“Î,ô®dmÖ=}»u¸ÆŸw:á!@…-¾ *ïr±F¿/͒;öMÅÂ1¨:4>&YÏ= ¬]ÜèÁ/4&øö0aM—ÞjR»5bãXq=}A%è9= ži©¸¡l¥nô@ÃOPz—ƒ»wƒÓ”ÝlXœ
41
+ :ÎÛÝ(.Tɏ¬|©Î¾²ð•¬ðÉçiå_*&F×[Ÿ oô8B¦Brþ=M¼-ò»ËÍF? <@üønÍ|ãžxÔr6hÚpÌöç#5‡íl÷.à@]ð‚{¹ø÷ì<Î<ÂuwNLO"_u7°Ïa ÿ\Ìr îÔdðó¶§Ô67¤p£"ªCËu@ïfcOò¯x¸3 ²#lf1}U¬q±ýx¾jõ×»ó±ñ ÀR³.ÙýåПéIcΗ‰ÿ;F? ÛÝkØýóÎó•ø‘6¸'áû=}žœt8Ô]&㰝¿|%BÆ<Šþ·ÎÜ«ëÍ>YUˆÐgæE¡ã(Á…‰
42
+ 8ԐXÀ­vÏʨ¿6bnµ¤GԒÁ¹§\)é«®~žî¿w"Þñ£à/o¯ëOï“r(ÿ
43
+ õOá4–¥àyázƒ¼}·‰æÌ²ìB#ƒÙ„ø }… JÏìN\]=}Înü4V–á‹a›ÉlIA Í<œâ:^&q/nõ×n5;=}Ù,ìâ­|0Bõ=}l;Á¶®äÓ=}a&¼½ó…ß@”ÂU¨¯ÜüHÝØ¯Cþ6ýjÒX_16¿X]~Y~; ×*½ÿÊí²2
44
+ =MQŽ·ämòjybá]Ü Íl# à(‡Kð5ÅôIJßqE|s‘ª±×ÿše¼ˆSÐo“^[ØÞôX‰‚Yá4ô@1³¢ƒ[#ïQ½,CèoJ 9Û «ÐKvnC&Â0 »¼Ž°SäcÑ07 »4NòÚhr/#ÉRƒeÊø?°Oí„ÿójà!c³hziÕ§nËGY³ÿòò,8ä¹àø¸ ¡µ¨X[|.ôóv3<÷£Û1²a<>G¦»…–=M˜lf†*-¨>9C1TQÂñ¬ì(*ø×d²¬p ?n=}ê{ÕÊd\ø\*·×Ré„ÕR_Y>7Û!èc.¢V;$|òè¯+/U€cMX?éŒ9À‘ÌéZ m&Š…,ôvõÓé¶ZÍ<VӞü° Tiš{êC§)ÐCU·RsV$gÖ¦îÁƒ ÖPö4fÃщ>ו¤kc1W\‰åÅ$Çp,%jŽ1âÂ>†¦¹Ð¨–XþùïäœRÜJ¿o {FúйÝÚ³ó£ëQE@mj6¹e¢Ñír»‘{SŽg½ÍRâl¦í"C÷Ö]§@¸š±ë:Â( íQóƒœ9È«Ëîqw±º{i"ÁŽjêévVÏ¿KÐ÷±ñ´ìp¦o.è<wÕʈ¾­Ø/iºdr2S£ú~&‡Oãè.¹
45
+ x*q‘žT·gÀúÛx¢/Ã}ÜYŽñ-•XlEšìøöt„¢Ù6ÀžùG
46
+ ;%eU àQ-ð„ÁÆô+ wcq÷æÍ¸S©Šl¹¾!Û¬O ISüu9=MÊ- !²; ÅUº¿v¶å±ØÆ˜á¾ @ë]Lke1³„,#o™¸òÄé—ξ$ê¯3eI• ŸNö+ãsQøÙö”á9¬Çì<=  !„#\…]ôÅvÉpšˆlñƒEÚt^ÍU•MAϼÆüÓú}Sú",Ú}Î>€P=M¡nOcùÀ˜ÑþQ{¹ˆËÂM{pp‰•Ý5o;Ž„Úþ¨Wå7°S'1Ê= Eºg"¦^€H m?P¾ æcà à°!£!f fT(Ø#ö%P!»3àc= icƒ ‚  Œðü3p £"Øä¨3ðE= Ÿ"˜( Íè±Sàçg>W š9μ5'¹ñ3”•!©Ý¬kD›«êíSã‰Eèí«òªý+L—o~EhÿÙ%á¸ÞÓ®©ÆPq²@¨Ø@Ÿù£u/’§>®\è¹'ÙÞ'ë>Ϛ°cLŠX«züè–CŸõ­NÃö‡q«OëÞk^ÁÞO}a=}¼eŒaþ²ï.5pf°²/‰²Ú±Ë=}‚lZOÁÐÊSy5xŽLQSSOwø‹††›¹¹Aì외;ÔZ$O0‰\6ŒkÃÎrÉŞƟlØ2²_(™zŸ¤&ìL¥âð¼[¬ºIPN¬¸/3†ö¸4†=}s¦•Sgù0ÆíÛàÆ¹(“â¬Ôÿ²Í҅ÁOøVSä®P†þWì»9ƒwx^Ôx”<Ô¥KL¹ihxŽ\ÜpÿÕ;<V³¨Ðòõ«çÛ®6¥Ã†XF<ÿCà)Ss¼4n9ÁƤ%çÊe×X&¼1öÜe¯“¢«†.’iX‹É¾H‡ù;%wì”ØJ|ûCœà•S-Ž(Wú®{®û®“Zñ¢”0“Z夒›, Yðu@­lð T*¨%­ëXæ¤%tÑM̊¾¨ÒsH*sHµ= Í¨‘_T5t|–Ì€ö¯ö"XöNV£mYö”ÇzÿqovÕÀþ.‚V *Šz©æJ:ó’4—pÝH®qû§ÃŽE¬\Ú®‘T±“Œ*W¯2¦<Û¸àăaxâPf<§PªQçhÐù*öÑXª‰ìX»$vÐ
47
+ X©eL ؤóa³”ÝÆõL™ÕæÔº¬š™ôô»ÿ˜4)D=}¯)3Èød;=}ý­ÐNŒÀ"=}™{Ó¬IC¬¼õâh@±óRF¢òZbs9°ö§¦š1„­³az8‘ì‚>+âTªH[Ql|¸ç6¶¥å@i§CšË‰¾Lê–ËGdÔð3Ö¤]äp2ºþW¾’d¿µ(H&b‰3Õ;ë°9Ûeôó„®jdúQÂџTƉûd7 .uo{„Ø<Züºæ:ˆ Š'!Žî»Ø­:iÄ4ŽÓÂÀ,¬ôQÁ]v=}/·tæ5&06…,ø$ʸt¶˜ØMõ‡ô[ªƒVÓÆ=}Ƀæ¨@A¬K¢§«Kä>N¬È”]‘w5øÚ®dC{޼æ‰sœ ÿÛ3_ƅ†OSLœMÔk탦…†ú¿…††{††††¦Y“æÕ»Qÿ›E­L‰$1îì™4‰:›6Æ=MrZ¾6Ày{øA<(†Ål1 dbm7ÎN !‡¬ÛŽlî1_ƒ= ©néµÂåÅd¹¬Vk.d,4Þ3~„L‰òôޟ1ú¦·½d ’=}Ž–q©7švzaY6én˜±Æó¯Ã=M€µ\^F>ÞªëàwÞ»ÏÂËþúækéy¡½‘ãyÝ÷¥³jp'ò…‚°;c9¡Zs&‹×]Ñ]ÝUî«­>_<(¬‡O˜vž Q×*xœu‹òRN*k;*0䅫¦—øÄ…üЩ{ÖÔY—å!1è;å&ÜÃFUfmü&r3ÄèÄQñb)š2ãT#À·ÿ¼%TqˑZs>cU´ƒzuÏ ¸Ú‚uQ=}óÐ-G»ªM(e²ZVꬽv‡¸ ͦO‡T·S°{@R0MðaÀ’fȵ̂_Òú|â<ñ¡îйAé܂”b+™!¡O#*¾ï3¨0âšO"͍xÔûÝ
48
+ ÞÝ'´Gü’ír”-—|zþçW掯›$×[ÙÉJuøAD!>'o0K ¸’5׀=}þ\e8
49
+ ?»þÆüÜ=Mƒ3íúPþræ MׄÖq&@ýÑWnBӐ>7„‹ÜÉTùÜQ¿^®ñ-, å!›'9ìsùÃ4?„šBTu&éçãÎ,?(&ój /¤£™Eà'â£= R(/¤¼=}Íf÷I³•HZépôSG‹ˆÅQ‹¦˜+^@]ñï›GXg€¶ò¤ssÀ ­/µ¨/6ʟbÏ´%°/³~å—¨š5|Še¦U9¢’$BFpŸ´„¢cë±²êÒýœ´f]„ð®ÆÆÓÎa.$ªó=}´Y_ó싌õXóŠ¢Ëï|3;-%ÏS…ˆ)’÷ iTlWôáµa6m u¢Þ>q9 '—I±N}ÞC>hïˆGÒ*Æ·¸PØ ¨)Åéø¯Ë¡yè€Z?1„^B\pü–ž™õôÞ燹à Ôð4‘ÚIšsmQÚÆû¡†Žu™˜°|î–(®±Ø—¬$©•+=M­‘°˜8ggÒò›Cƒ“ÆK€âåþ6…Ä¬Ú \Yý°-дXÇ̇íÁڙË2ñ‚=MdŒÑkhhÉÃd6ñ‚«ŒQt»|Z³Üu ֚Uh——Ï–½çØÛ“}½SýË}˜©)ÛÑÛÇwƒßC ¾ ã't¡a.ÍJãpa/ ÁâÿTV˜Ú´­ý ·ñ¬?{«<
50
+ M2I©O}žš³&ÿ¬øŽu®:”º}‘ëßGnêtF@1«=MÉØ &‡Õeî%~ïNõŠI'‰‘Oöz›:?*<á °TEŲ{Ï¡xÔ©žä¬É®ò%‹}Iù$§ = s~——;Àí–T/ƒ¢•¤ö…ìpg ££»¬údl° „yŠçðÖïf†“ʶúÜÃï¸F÷ÌìÊÝ}}yÑ^Ö½Ì~Hí­ÒȞ٥¶kmzkk£%&¡Ëm„sÖ>ÀA}Ô?ºRËœ%]\:&D¾[,¦Ñ$ÃÐÎìn´cÓ5ÆÑ“ˆŽO[}=}á֍(N¡ñígµ€â9c&=}Ä®ÒξQ,öÔ?è³K'VL¡](ÂVÚCê0ø##{ºŸÿ3¡6ˆ®˜L(¡mÕ"ÕlÆzŽÉؚÌÝ;A ª¸_ ÛÕñXã0î|ò IUÂâwļÃú®ž‚[,ÊZH«§/nŽ’Päõ]eÿõuóšuqú´Å‘³’n=}¸@Ö,–ñ«À7¸£Å½ïoàõ‹› .®—<òò£àzÏq=}þõ– aé¼ù^Қž\¡Êá䄮ù”!MGÓ&„ adePõUሞßá=M tï¸
51
+ ¿.Ç_ò$U+å¯
52
+ w§ÆËp;Ÿt'QŽ$2Œ%$}­¬”ˆ ƒ€^(f%eŸ_0^ Ò¯°j¸ƒkª2{ ™m4‹c™•@U4N-LCæª!˜3gâùㄾFm¬EÇt‹îÏ6’Þ¤•äxN8‘a©Y(O}=}ˆŽ­ÔžWñµ„Öê= W‰¹5(—¹~€o»›%V´¼ÒJÓ°ú:—‚Îų§0V÷zî!°¦Œ¡øðÃL!¦]èdˆ< ÛN´= C¤(Æý>„ñmÇs=}ïû&NK<ë‚'»éŒ_È!ôâ[õ³"¸ÐNV캪6­°Â*v=}7%ÇHßDÌ/2Þ= 5ŽßK9'ë„n"?¿lØdmçþ¼S3µ­¡BÁÞø|4ì X6!ôE¢z@ù}ï„<|à @T¢#\âC‰ËêéÙdU萮8ÂrãÚ·AÙvqФA4ÌÈAäv¤ Ä,½ÛVq^ºÞéçÐ3'Á69÷[΂xÈ»áT•“yþΙÍeúî<=}ÕØq¿Šñ²9Œy×m‡²cžàSÀŠÌëx—écŒ¢b9¤ž¡1c7ÈHD À!xÚÁáò-[xÚ¡xÚÁ¥Å;úxÚÁ¥Å;zxÚ¦Â:z˜ÚÁ¥ÇëŠîAÓûäd¢í"äü;ö'¦&Úlvs¥æ~cQ±¡K¤ÐáXÕnIÆÛ!£à†¿N;Ý&T,){†lH:_}3 Ãø½óÿ{ÎÝxöD= eËjv)j-KtÚF7À›ÍãъòeS³1Ð{!ëwH«1¬È¸Øýi¸0mOPüéyMmOXÂh…¡º<¡!øÎÀ+ÓÿÀU!4޹nð?4¬²ÔŒj FØ»ãw;pÃøÐ"ËT'b[[ݹ?°#O·Õ·Š™O%·¹¾É„”³ä,}èÚöÝvýÝsƒÁÝÑ*z ¼wô†ŒõÆãúۊ³~tž±üO᱊Ë2¸[
53
+ ÁÔ(û6ùé2oeˆ•Åê½úLÁVqR Ô I7ÐHh=M*àCY¬Ñˆ­p#¸ÞYvGà¹8 ‚<ˆˆco[³žKiRGŸj&õՕu6:“ÿ¹C;´ÕÝèÂËj–ÒOƒõ*W±[Ōk¤íknXâ±vRa¢¯IC¶Ñh‘}£]ÆãZµ*StÂm”‰Ôk™øòÖ¾Ö¯w<
54
+ ­™¥ñͪÊw)*èќ;fy> 6z'ÚsFaãì(¶õêÁöcŽÔ@n“i±c'ëA>Q“оñBù$JCv …b9|U3„™q³Ø8:Lw(ô¾îMàaSåÁ®bGÎβÖÍÞ= 
55
+ <Ò!¯É."îRUéwºÌÊaq_Ë’;e]¼.ã1ØÄ~–qØ´•¨
56
+ ©pz½¬“ÓsÐü¹Ø:2R%3˜§ü+ f„=}?@Õ,zèz%øíŒ‹aj*Mô…ÈÍœ$w§îyfhEáeD¬
57
+ ‘ÿ™t‡áоÁÚãèV¦e֚>€ŽI[Bë+V†(mÀ®TBã:ê{AÓà½WWºÎ.®yj{µ¶y/5–kٝ׹wŸð¾ÒäÄ-¦ pþ*-+i} Ë}}ÈiÅa<ûceÒ ¢]ù•á¾vÿ¡•+øtÂçm=}qI7hyP™”Ä‘H±ÒlظjuO–Ô×ûÊ86
58
+ %W=MñàÎ{_bØÓçõÓÿ%$|Dì£ZL3F…8‹VãWu";¼×H°×kyPøÑâëpƒ®=M1¿ëAp:UŠ>’—2{ íØíwK1-<–êJÜÌùksöK &›êBˆ.3_g§%ÄŊBƉ_®Õ¡o8C@Ao= „#±®Pïf|§áÓñØ)¿G4¦ÎVYÿjMa›9)õç[\Ý]= Qߟ Ô\pnœ,ra 7©ô35‚Œ õH¬mµ[ÁœÏ¿†¨îÂëq灸ñïy>’‚…°ã¨áP“4ˆú¬PiŠ;Ò_çÂø^büZ°d!j©^/i¼CpÏb0üö¬—FE´ôU$­i‚Àⴞv+)ñ×"¢:ŒË=M››¦.Ur{ åŽ=MÕ
59
+ IݞFÆFÄÄãç©Tùýl=}<Azào.û“y2‚†ˆš£x„–€á3y‚hUuj½ù¹‘Ÿc-¦„&í-tüßùo¹ÊË•ElßµÕx¬î‚fF­eþ|)¬æ«Ô¬æ=}f[›8mí ‹ÝÁ¡Þ¼]"ƒdÃ>ŒPÅߗž?F’^ßÁ‰ŒV 䕬վF— ¶»,ŸL±>4"=}8žº¦Á…Øš‹™ØJ:‰Ø¹J%ã­JÙ/WužØ©*ã¥<^|M½©­S3–‹…<sd#ÖXæ<‡@ÍÃNÚÿõú^úÑ]þ•¦’ÀÿÓ³ÜÃBåç¥ð ”òS,çT à@ àÖ d"r°¦”öFUlë–ü9ƅ[,óÒ=}˜¦‰ùîùƪÌ(‚@zØ[ «+ì=}æý…ûÔQ9iŕí)X&7‚­ Ø%µ‘ ²´‰Ã_  @´ê>ìÎÝc {À·–ÖdzC /zïç %ZƒzßÔ,NØ/S”w,¥¬$†µ²*¬^S=}ÆØ ã:i›È#eEȬŒÍþ õ{ɂ;^c÷Ô§ìgÁ°^ºø»´€ömì‘éŽÆxÿ%3ˆ&.·‹ɄƱl·Ó=}-p,Cóó£l[dNÆT ¥ŒR³=M¾¹’5٘ýb6‹Ý„…r•¸MéWB$Á‰/í1—ðm¿ÁOñԍX™Lþ4¾k–K½É¢PgsáäÜðSö ¤ö9ÍKzotõ•= ó}O,LàænГ6®=M›^5;{°fÚ['Œ[Ö^Äýª¯Í´M"&¸´¥øM½&}þý›Ÿç ;ÇȬvyÀÆV= mFyÖpc½“o(ˆ±Ò•k.Óv%ÌôpÚvÜ¢®Â5?ƒI].íý¹2RúHåÑ':ô¦ƒˆ „Tž°‚éåXñë(ƒšxƒj¬3œ™B‘¦_‚×'ƒ~’H>¶ãðy©'+XžÅÜËXùêñ·œw¹žÏ€- ¨” rF }“tÐrJlxËã¶&¹Ð?Ðl“qýànï m.^‰Î\RðÐÄÉ€š˜?ÒÔ]hûîqç¯WH÷CJvÞFñîB‘Ù®Ô|Z@ä}#–†Pü€t'‡-F€:¿&…¨8§F"¶Q+àƒ-‘æ„U|ÎÍ£ùu+”y‹£¶ý.Ø ¢Z—\:
60
+ -ï*°s .ç$áås¦.
61
+ Á8„9¦cRY‚Œ4Uh©Ñ‘j|:èÑô½ƒ9®MY<¥<݊X®W“œˆ˜·cm#ôU… »UDaI ²ùlZùq‰ä¨R‰Í³Î 'SA¹g(ò©bÕÿKáFÒm¸\Å?˼â®E 7g6ö‘3«úå6][éæ‹LÁóƒöó]ct5Ëig×nˆò¦Ï ¦r·îêÆr= Ö´”"6s´×QÙÇøñúõ^”mÄDÏ)ûÈåRªÚFÅágéôIQ¨ÃæKė_¥Ì®‡ð¾=}y4äò-I¿= 9Õß»BrºÈùÁ=} ýôQ÷ÃKì|Õ0€ó+öËÔq\›@ªÕ§brZ"/O­b Xð iðÝQ53Ú>Úm¶= Ô­pî<ŠS e¨ö}ªJ=M›EÖü|£Šgƒ”ˆUáfÙY¤"kˆï|¯V—{ôeøÃ~gø‘æhKwŒ=}®G>ÖⱗþZç7Ûй_žõ'@bS(õzáh)f[9 廊mHšˆ¦až^,Çx”s®35ðúÃàíŠ%*J6ÎdŽÆ2íŠ<e<KìX’ãXŽ<X—©ƒö#®
62
+ \.«Ï<ÕÅ<Sž‘Z.‰3ç½6.ÃV®YŸYrtÊtúƒOˆê† óð?H}ÿ[³´u>µ8[¶iä7•Åï^¸iOœ¯°nزHõÒè·œKÕ8øˆºB2RF;*gÚ(sœW+ÿÒ(×½1ú9ý4ŠW†)¯‚_+g(¯ZÒe]yóÔAL‘÷XT«eE탱>Ëxq‹Ö5¾ŒÜ±¼ÕtŒ…£j¸öì‹ ‘ŠìYÒM©õŠþ‚ov…Ð7¹ùŒ—^«P↘·Ò韸 ¬Vó±~Ÿ j‘î]p‡zž—0%d¯À !ƒHù—2 Œ½n2å”Ųh›þ"Ò¬Sā÷ð¿4sÑyo&Zñå"/ú²oϤò͗;HûŽ+-ÊùnÎq1D»2c½þ ÆÜ H[lc»¯q¿Û²_‡ˆ±ù%м²= 
63
+ ýNóÈҋÄL¹"³óÈù›”à#Ú3¤†ŽíÁÄ-ï »5I{ºÙ CEj×B+Ȕo)U<ÉÀǟr€b-9üˆÀK—zhÿ~-§¼úƒ­‹g(½@¢n>ýàm3‰îýÑâÞGæzæhÞðV §ïT FÂaÐ<^$¯U¦AЖX<)í›Úؔ‚TTµƒñ†R>NsF‚ŒÛé8œ*F>1¦ý”?]3‰_†Áù˜Ýv?õÅhØL€£9aö"H/樂¦!Ì>ï§Ú¥(Ò(kÀI|L¶Á÷Óð…KÑ ìJL Ò&¦®‹ÑIí(åz ‡†¢aÑÆ˜ù,#L0Þì2ÞÁvÐZ‰­5/öãË-D•Öð „/‘o'8•¤…GŒ=M¬gMî8}
64
+ ¢ï|–é-“Bü„¡×s]1û©ìû~е›Cˆ¶/·€!캧w_àVƒ DG%Àª"Aî,düª@¸_sQ,æÝ¬€¼¼E£‰9dýcðE@$WcВfHêCc‘›HB†¦ÆP8¦áÉÏ<}mP]H§{Þ
65
+ ýc!éb%æ§J= ‘*äÜs= o})ãIj48IQXd©îg´Ø³Â¤ {EJHÑs«ã‚T§Ý´CE§â®¶_çí<­ÛXfå’,ªÈÚî‘Ng3.<fX–œpá±sÌj{îÑߺuœMçîš.ïf®ÚF.Ý6®ùÍ<=MúX®Êë̒jEgÅpÅfÅeÿ¯ÀIó‹ýÆA³¹NŽH†›‹¯
66
+ 'µ wÅjœ;íDCºCDV3EZ›E=}ËiÌ O½Ë0iÕ;jÛ<“±¶^ùL=MKùK9‰oՄ .̉ïøOòÀOUò¬•ã¨~â[ñpA^•ܾ¾€P‡Þ°Áßf¸¹€C?6lû‘Óï–Ax¬PÁa€â)áG¢ð_ªp÷Em3pÈ›FœûnXºcÖÖjÎýHL ú¾}^ó¹ÅÎ÷‚ˇn³&ÒB:î›­†ÅÉ3ùÂQóyv¢¸ùÎ!ËÓ°¥~æ~v΅_õMxÊä®­¨”…}ºœ¸õ69ûÂÝ¡Uö†»ªÖÓ^%1LÖZ¦-
67
+ Ú·%«.Ò+®gùÉG¸‰‰¶‚’¡Åüo€ëø5Öá-v„ºê~Tý…ÝO^€'½R¹ÑI3—îƒÂWŒ
68
+ ç¯lWöppäI‡:CŸQýU• }lSótC÷!=}È^s½2W–ÁÍð@ÿ.ýéE×Gù< cKñ¤µ#ÉdT¤#¦óG•=}ûPªþ:k_G°Â†Ríˆ3±¿ölºÌS»l%)µxPšÞ.•¨SÀÀ+‰p¯ÅtؘY]þު·Ïųm¨û¹3Î{qÞÆMm—•ÀEyîÄI’G¯ã~„ùõ¯Ò¡´pCÃ^’*剆
69
+ fÚãW³åâÍôÑç–ÚŽ'¹½-Çú hrN¨ÆÒ[‰šåNz±Ñ§.ÃÏ'ˆêc„U (-÷Xf»ê¯3ï]a:·oòÇ ÒLÅX¼ÇÉKNrw˜Âñ©ÈEúÿ*½•µÊÞG§»ô6}ݽjÁwóò«—‰é””^ehZQ¯IZ\³Òׅs|ªü¬z+:àÅR¿fWôâÿ± æ/T™Gù¥f#Cž°g”AÉNÆ/jÉpY‰?ÏDdzõ´7ipbrM‰ËGfZ½öl÷Õò'Ÿ‰x¡:¾5Ö£‰‘›üH  Å=}Æl=}Ûë[aÓÂSu”áªÎèJ¦^:xÆ©#Ez˜rô=}Û*šÀ{oœü+f?šƒ»^˜ÒOҒÕá¾£nfŸ$Æ.à‹#<_(n-æ­ãcpѓH"×-ãÐ>¡÷–CÁTö¡ãB}Œ2¯âˑÁR€,ô[¯å§ºÑèV.õÙQ
70
+ ö$¾º¨7±³PGRòLÇ &s˜¼(KÔÆATÌê»®÷†€ Þ¹(-¸¥UšX•V*Uä˜zDæÞ›ð[Da¯4­+%ˆ/{íU£@ú+Zìaà¬Ù¸ýŽ>Žîca#œÕ»¯37%Hj~¨Ãªeˆ½Ó8½[LaEޙIZíUdŒËAþDOcÜÿ’,¹Ø"ƒÞÏà#KñŠØ*¹ËPòŠÓy£ý÷”
71
+ zàù(îݬQHå8 Œ÷h‡3Øæ¹ v¸€ÕI„Q†Tù<¯ÒìQýé"CõLÑÀEÖmÕb#KVÕ¦‹ÙU  aã&§ŒÐЬM¶}ÖeÆä.¯S А©]6]ÕgöŠ'\ɱC<<qÓê)}“½Š±Sÿ“¦Ûø%§3}Ðf÷5›ÛâÆ«;²…ŽXv ¦¾æ³®Ó3]°Ý÷#{z\âî3÷>›bTñ+ÃÜps ¥YëÝQAî;÷[»½/NÇ€¬ÖO,\œñMã7äõ/ŽÉžHóç+Ÿ”ݯzõ›Ž ”C"ð²7 #£#q‹;¨a"ñÅ\0 ³£Ðø[(ÑiaèÊ*bĀ :,ÃSáH2,¡R¼Mã=}R”ØKcï:9Tæ¥Àþ\$Bc°[$ªê0L92ªÞkc]H4÷o¦‚‡ŽH¢
72
+ c^B,^«ã0=}¦´po-£·PôÖ·äˆYœ7éBç¾=}’´¾³ã±<Â"YæÔsàŒÈ"¹‚%‹5têV%¤x%ütÝ¿J°|À= d³
73
+ ýc©™Ã´¸Dvb†Èäd‹E6H±Óq©¬ýj¬_ÅdçËjÌëpb¥ruß2ÓKµøüĤ‘‡®Ä^<›§“”¾èñm¯ä<®üÅ<Û­Xž{‘t[‘d™“\-ØîY,֓èÃY ‘ô?€GYäYj3Xö~°E“¸ÿˆix¨ƒ{6gàs®OYî“ôÜðÈê¹
74
+ Wu™%ÊB®â2u¾R®ê*®ÔJ.÷¿<•ßX<üÌÈÊðÈùàñÆÚ±h3ç҆®*5™«JߪwKg¾êÄV®0µûJJ3’8ÉètËDÉüwésÊrÆkÅnÅiÅuÅ=MŸýM׌ö =M:Ó߅Æï–O…-gåÉÁ…!—•õìå=MB+ßE
75
+ »¾ì÷7fÊi&ø·D=M4iD9j~ý‘±äžþL©QþK1]XŸ(¢' Q¢H*€ÕûV–ˍû֛֍û֍û֍[˜—‘o2ÙÄrN”gWÇ[¹)ý¿ï|íNoúáöN^ê4ìïQ‘[Œˆ÷‹öÞ7›„Cê6ÆèRIŠÌ~h¯E=MS‡WWXÐO×]ùª°@s,{‘K­ÝàöuÑۜÍÌ  3»= ƱþYԜBÚО%MÜÔ®d´×°˜Nz@½~ìqoöIZ™±Z}ð¡äôX Y͘®"RßrìÇßäÍ2ÄÉÜÔÇT±ÇLE… Án ‹Õ‰§!•*»ð´R+Zû¶Æ[r KWúY
76
+ e&nÔ“(‰<ªÄe“hÛO©6Ödzœ.•ïIÂÛ§êé s-ZVrï;ßÁ´ajÖ9'3±êÆ óR3e9“€;R?¹«â‰IîÙÌ ÔŠÌ©{§y…;‘ƒ”+êW= ôýý´û§ñ'їq<Ýçaâ&¸[T*~½ceüeŒ\–5fNW™÷=}Œ“߯ج߉ï°5^þ?ñKJwdw?ÌQáËÏ"YA"õyØ\L!¥–IüÌ·¡nµ<~tJàÖz)ÿ;uúŦUU;—W ¢¯QÁAöW¦Á®I"íqq‰)ÙVHX§Ÿß=}ïö)%…NÐx=M®¾˜ˆ­3•Þ°X0 •‚ax²>¢W»ãQaX2ýÙñXžD.©Ú)Ð?jbÛt¼kkçð©LÛø¶œ¹4ª2ôO£êjìQϦ Zh™W= |Sb“zÑ{'|F•ÍyOæ(¢' Ð"  ¢ù֍ûÝ|Ӎû֍û֍[ûÖ=M(
77
+ (,ì*<ßc(<ÀMj÷\QœÞ©C8hR˜Å4®©ò<–±…aYŠŠI:Ìè¤j¬ösA…³J)…Š?Âaä›m~ùŠ“Ä.ªòštÍôGÄâ )fnTÆÃ×I&ìØáÝ7¶Ø{sè&W7[Ò>ùsè7n$ÛÐÓKfÝýQl€=MXOÜêÜ ×ü·×Œ]:à5+ðš9dn¿0ú’c¹ÒB<#ÅhìfÑ\ÄWŠùˆ}ý/“½!<ŸY°^Ã&3úQ¤õ§q7R¢ËÅCY’€TÜæÂ·W®ç›FÐî‹2‹*G“tÄcƓԞ&Ïîâä<ÜQœþN¨Û‚5Oû公9Ó¢ÞzË8¾Øºu§÷ˆðšÚuVT›3óŒæâ+ÓµÖqßµMiû8Š[×ï=M€½DïøåýžÛ1ü0ÏÛ73ñ´·=MãIž_uÏ/€–@‘.ñÔP'F?|ßÃ8<cõXKtnðÏ$§Jn2¶–ªÉ_ns ,Ewï2•<Ê{ï3Ö"¹sO²Q 2!±·1Ù¢Ýýu¾;|²•ê厐Ø&çKŽò¼“«g©× .Ž?ò>ʗÓò#Bn^„ ¡gœû¸ ¿ÐsÒ_ƒó¬Lº¢ÛÃ~\5}Ã:¦™á±ŸgÍ›Ô|_ÐáCvV¿pÔ¬Ûé7n8œåc;*zÿQráLµ¿´KèÖúEÑvB:'8å‚ñ1­ƒÐh\菱b¥$úš2iiBÍG9ÁG¥ÞbJϤTÂdRˆ6éˈ6åҙF¾cªdNÊr™l·îGnƠᒥ´ê7‘hѸžêEʶòÌvf¾fY z5„ trÅw¥ÄUöæU,Tͅݙ=}¯L IюàøÎ±q.m<–Š·k+ýŽÍXšÖQêÛ½•Þ=}¼~€7ï£Ú™:òãõP¡Ï†B)¢'àX4$ ¢Ñ{«øœÑ“yûÞʍۭ‹û֍û¾Á•¹*3]t±ÍpEôk­KõøÍnóŠ•T%:ì{á§p³e‹UQ0‰ÁŒö‚Óh»/íúب•¨ŽñAyÌkt«N.‚]¾W Ñ|ÄofÓ^w¤&ÏUÀs€èõ¦¨¬hy…dÒ·Q¢5æÜ—W r3b}m‰y„ªÆ³9)íÈÓSǖÖYÑv6¸†á\skŒFyòïàªöÌøÏ…íÆy·ª-žãxõ&Ó!քÞÓÅʧ=}Iï ð²ùÓÎ]fU.4‘À‡±C•Ç<萂çžGœ¼±‘†€°+µMN8™ÙR•±K¯Œüð»
78
+ æo]—–ï½¼?Ì á7><±˜R¦Gvå~XåÄd¦Œæ_à§¶µ^ܕ0‹Ê “ZbÚ­0’ݰ*1׏ª¸tHfиˆâúgß¹žŒò‡ PŸ¦ßgÕQ ´+!ÄÇ&Â×E°‘¢@®í-°žPC§% eP^UAx½,—lH>MÁDú§_V¬ÖOœµ¥ bXû3C¨ÀêQ2æf’sD¢ÆH"ngBJººµñ¬Q­Á†x,ï?å@N¨å•›Lg]¿8gàX~õa=M1810o ˜î®g}¾à£³)/i„üd¶ÉD1Ok‚üD7°¬€fRãÞFSÔF%ÝI¬hÄ2Lµ©ù‰lkCùD½eÝóyžN½Â,zƅð^£ªÂlz÷…ÒæT«¼~yì]µåD‘VÂÑù˜¼me’.ï6S'µª|ú°k§‘>ÃÚ = >†î¼;´oäٜ2e%Ü!IW*¨-I
79
+ ØbŒ7CÒ¨mNÂ=Mq1cƒª™QÅ8µç匮Nᄒ)&/jx;~êÑżÚyjq= 9£ç´±˜Á¬6ï’Ö,HgšØ¼-ö5L·w0ÚÙ"¥vEñEµÔOËûj¦råÙu<Ýze£wU“tó—wUO•‹ðNɁÿÂ:<¿õ€3rëÕÜ^të‘Zòë °LÎãi=}C 9ZÀ>»½´ÈW0¼ñ= ä&n¿€¢mCOÊ;™ÞرÑ/:YýäúNm({»èšý¤À¤¾DyOᣤê0I³’Ý´7Č(´øk¦—»¬ï…Ø(8ëLzJ MYë=M4øµJ(¼Â‘%‰zjrµ\:ÌdØ~©é+?&ä!ªÍM¨Â ;ՍûæÎû®œqû֍û֍ûV‡®¹´Ñ;z”ƒ øŽ“Ô;ɑ޸¯¢?¥؜åg昞wSwÙÚüïæûžªE.ðÆŠ ¼JàÔ!öý,€ä/’Þœ°{†°ñ¢\Z7A¦7*‘Åc¨sƒb$—§xRäìô*÷(ƒ™zî/”¸Œ_âäî1ŠÃ(šeøØTbÅ+1š6ŝ®H:déý]jÂ%q6½¨c´‰,Bµ-V&-¶­SÈÓõ€£yºôéÒÜÞé6÷乆’—·ém®‡qC·¥ÌƒñâИ^îÂàf« ·MîœÑè»êÆl‰»_zû¨>V‡øÿ³¦mç߸êAei§!í<6Ù.æ[Dx ðôO^—h8ãŏ6·}fՖéMŸNvÙÔY
80
+ ÞkÖÿ\RÇØqðÁM¯¡½]ü¾>¹F™¬|Ñ °çÌ{>u^™L¯KX»eÐÉÔÀmcឿ™Oáå)¢^ë$ϖ+ò}4DœFX»Äb‚i ²žÅEU iN•´ž=McE ‡h.β4üK ’~òÁDë‡éú8ªrIÒväcÑ×ÖŒ;åÀЂŠo¥:ÉèRsQ¥–åûƒªSw5]¿HޜrtwóJÑÆ’fí¯œº¡ˆŽõð䈯ÇÓÌÁQšŠ-õ„¿ÄIWo³›µvm£ºG‡TùŽˆj]ö„žÇÙc³=Mš( b) PŒûìÖ ï֍ûŽGû֍û֍û–íU<Þëúˆy/¡øŸ'Òe-Ä®?R…€Žæ= ü¡Îe"Kê&Öu+ìË?ˆüB“= ¡k#Ÿ¬(ä¸0fü= ¡¿ö'º+Ìþ;ؐD”€Å= ß»¡/"‹¾Yï'‡‚ìW‚îo‚ü?ÂùŸBa4Ñ[Ɯö©åiä§Édâ”B{†±Y§¨¶wüIœådÒò‚q™o5q˦8gŒˆ@–V1‹{¨qÍd–÷n‚žw±ÒǸùgœU= 49Lš,“ýCåºQ‚˜Q…²ˆ[u„½A~ì’=}“SkLxDÂL5½¶«cK友d•Γ£ˆÝi”øBâVq‘§hÓkœÕgŒûKz7±.ª5§¼¨øšôçå3³sÂø‰÷‘f¼\KÞ_O²0eOªº·dóëÂ5qÊHŸíßÞÿ0þ4[ÌÿM±Ö®xŠ5ª¯©ñ¶ÞxY?¨}¶Áx‹©>Yþ^LÊûF©ˆˆ =MÛǨ-ӃûS±ïZú2ی_]7ÉͲ•щÖõNû§Oä¶ðÒziˍMͧ-ÓiV÷vøfû‰' ¸½Ñ«–õŽø=}ۇ/=M±]ÑÇÏ=MÍ÷ÝD(> ã¦âP î֍ûkþí֍ûVúÆÖû֍ûÖýÛ¸q×y+ƒ—¼©*üwً‡}Ûîî ?u[÷&L,§|œ§èGk ؂ótNœ @þl~pýä_•[á-Ÿê¯L1¿ýtƒl1û]ÊñÓúœ ÎvþCˆXSÛ_¹)ßӓSöÐñ‹–R;g™†š> Z¶¬ã¶´ªSÍe*Ìs£½]‡èÄ/{QۏîìËê§y‹¦ÑŸb"ƒ®yL…–I[3pïìmÚøËAi™4]Û_¡®½½fsíÁ©eP™%u€]}(ýjFO9…ùgíS¯rüS4ÓRiÝeK*?²ý·ôù¡öÀQhQr¬þÅi²o³LÝ{Àdª÷ôˆ®©6­ óÃço¬‰u¡Y½Šc™.´ˆjˎ™qé2Ÿ:ò1lBY1HA¶L²³˜yZ½<µkVœ1]~nBqUôÙÚ©ÂTúɕfO€xM:¦°Ö1°l9­nŠ^19úshƒZŽ
81
+ ìâ<«ÙÝ ‰«‘È“9,¶Î¢ñÅÕXFß!Ê)»AV›[\N¨ÐŽé>xhg˜çA(®ÁÌDê_¼¥PBbõÎàˆ -ìëØ­ÂqÑQ؇x
82
+ *vŸÿA
83
+ G¨Ì¦Ôߐç8ž/ÛWÂ0þ(xa"ÊÿÅ0KF£X5Yˆ¸K€½¿2DRt€ûÆ&ÍyºXÝ{;qo”Q~u?Sã,qþ…¬{í°æ"½vèÖ¡DùÃ}äÊT‡ì=M¦ô_>X»%9î7rzX^H(qïbPV],®fBöG:ÇÖçaæQ!²»³‘èU5Þè= “˜6êNbÕR?£6¼r¬H§éÕJ”õ€Ôe]²NVâvèšÖÛNÌ|ÿ+ÁÆ?#$á#€5 = áŒûÖ=M·ûÓ=}^ҍƒÖû֍û—±šÒæÍ7zS™¾vÅ!”$-áÚáÄ9.ääl[¼þÝgC8åÙñ$Ȭ…påXKn€råduFĞ*¢‰ ]#Ù×SÙ^‘Vk­0َ>Û¢òbìÊ72ÎïxfÓ ’DîÍdہ5v÷Z–ÅÍGáfÆLøì®¸MŒ0Å“á–ÞD=MÀN¶úã
84
+ êÝõÿ¯Å£¬9›¸ñgØ8K/¿@žèI–g½áÓ\ߐ¾«SOò|š©;®w:?oþŒ)ª;Dù1J­ÄÖLgèóÄBâÅêØ/rEÀd­OÁ:LÔð çû8þÞ뻋bö?0ƒØ^5?>@A¡/>ñw¸Ùºo¸Ï´¡*ï(·™®Êô+
85
+ E~’~5ŸE~C&Ÿ ×8éÝc~ ]£õ_gjå¿xSÛþž¡9í0ó|–a¸oFd‚‡wqçj¦锍zw
86
+ ˜¯N¢+š\rög
87
+ ©!ӟ;Ž‹äPƒdF–ºÂWñ<ñz+¶¿Ôämåª Ìٌ£z¤MwK=M¸]â!u®ÌY 䝡Sú}9ªŒÙ;c瘂«GIr~”ÝÆõõ§ðbtfsÒ] J¡|7äñè€æ—¥€×B¬ù2h«ŽˆD÷Û¸ØV&¥xšåÑTM¾Eƒ2‰[²äÏ7é,o€¯TN°î&&¥N¹hԄÙQ§€aNö™h—sÒÓ°mï«X?~ìîqÅÔ¼OcÄ}nx‘%¥KË(7vC.ÌÁ…„=}ûÎö“ìÌ¡eM­d‹†ë6ô«zqÿðîÆw=}¤Æ—RÒ» ,ba ˆӍ{èV¶‹ëÖ]ûÖ=MºûÖÍÛ§i£¸=}\(›£ÙW‘(.ácø€HÛÆ,ãIœ8/¿.çˆö(æ¯= ýhÎM9åŸyÃxÄT:­ƒ˜~Q&—ãÑ ù[.ÉΑxØ(¢@Ï$¥ˆ/4B=MÉP‚+eî6ásc4¡=}‚d—¨q?R÷æãÄ)ܪ¿ Ðdf޻䥶i(Ûn†Öì4ÔÇnr
88
+ t´õÇA҇Z=M£†Ð ,R¾ïD…õL¶öîÂð‘VmR“ØX‹N+Òÿ„>ñ‡ƒ_ž!YI+ØÇÓ°Óç6IÜ8©äåŒõz¢öñŨ«LƒR|”·“ô*þl|i…öj\ív1Ÿ™UÛ΁œå:ÖÛÎã•Í{oh÷š%Œ€¡fî?ødÙè†BRWS€Ù%»{™Ü’;Î=}ûø:ؽ¹ê@|¼êÉ2ä¶iPük2½Wr\ýÕ#G½Ìîý©ÀóN˜Ö»€©]8) EH›Oû½Q垶=M\ Åa„«.æ 0e?/ƒ’(–S¯Rð4·àƒXˆ?Çú)ô÷½¨s…¾büT³_¼aøyžî³cÇTÚшÓZ¯+øßhìkHÖ}žì…LÍÏPõuÊ.ƒ"9„„0k³eðZGp–Fa;ŽqA”»Óu×1+ÙãDÛüœ™¯¡ƒI| ÑÃ>ÁA{">¡ ƒt^éÇ̚æláÈô\‡‹ô+öYÞÉKZ…~3J¦ÔùyV=}±¥)œoÂõ'֞hûÊo\Ôäxñïd¬s뇼…ß0»%Á]™K]«ÐQµΠ\G_ê“Ñi>E9%²ó4øÞw±èª\{Τص2kä´yÇÀìÅN…¼É@rÈ¢)uDBt9Ñu­:/U:ÈC‚ÈîÑ:˜Ÿô€eË&q×T²Ç©‘M.gˆ‘…»VºþúNð×¹.‘BÚ\vô…m¿Nâo8}ÅçÌë<oóç !¢-ðù„èšocz;1‹†d°¸QiJæ.Va
89
+ Õ)Ö­Fì܅ªŸ¡I÷ï¸ÑJᬛìOà¼;M؉¡ûbkdÍLñ¾„傍KÒg{ƒå:Å>‹¾ù€t‡cø-{æ4ú’sú®ü„[Ž?ÔgPü¾ˆ‘'LžZÀÜö1u—g 6Z±†=Mäô‰îÜVÆnø¥·ÊNl:jGwl›|™â­mŽœÙ®¥[™÷\x²¡ºÔGcò\ñX
90
+ åªxOª˜2­ÂØ/OŸŽÃOšÞÞ$ÌÃÿõ¯Ã«×‡ PæÉIÿ9޽(Ñ?¸‰«àoþÊdžOÌž1_W"?Ÿ“ÑW~uç?œ¾…—Ê>ãÜ?÷&ÐÁJ IW#1L+ddF¨™ea Þ<ìë܀ž¼/„–(҇cij/àÉPrsâØ›\<Đb®d@7?ác±L¯­„¡HæfgAÐOº ±ñŒú3ãõ8—å²>:ë¼½‘Ü-©Ã= J¾CádkFLH¡‚©d^&FÒ= B©ì Dä³Y?°ìR4f&ÄpcJùriF­´Ÿ‰³nߔ¤äSx?°¡¬˜FF!¹„©‡QKP«g2ùd$†Ó= R'ÕÀ<ÚE“™4¼kÍt>¯bþ±¯Šˆ^“–508v  b$C*ÛǨDZeÌøwlctQk8sâ±£Åì«KÅp9Y…[r®}‚Y:çJ˜¿|áã3µèÆv’t5ò lUSËÙB}ãÍ :¾¼ÏcŽM
91
+ 7 ÐèÏ㠒]Á¥„ÀÉØ¡QÒ­ìM‹¤;mhwT vSúuíØÿ‰AÚÆ¥›Í,͏…ãVÖV֑‘[¯ºûqžú¡•‹'_¾—2ÿþiëNz[Û8Æ;ñ¾Ž†Ü q/K_ҎÀ·-¿xWØ¿uyT”  ’#¯@˜ Œ# @xçÕÍøӍû֍û֍ûåŒû֗WJà¯ßeVì¯ÇçÈ9喝gS¤_¡A!ÔJ9àù±!ˆn%Pj0è£r¡Øf'R”@—¥aê$ñ‹l0§î$1H.Ƙù€¦®-†ù€^ªcèN7bՑA,ì-¥dàɒ"¾®3¿G@nJd}~¨ƒÜ0¤4³ªHv~dî˜1Ö\1’ɸ肞¬3“Kw쎩¤éDT=}Gá¸KËxêÒrÚ¯µÂ]K¶hæèRRԃ„¼]MÃÉP´OÅb9RJ4áÉpf¥¤wR¬ÎCâØ›\¬‚aLI6î¯Á´Y:îT(Î4®@‚$E.eð$Ó*eÒßDÙBÙS²'H>®ÎHnŸ­‚Ó]ºiýÉÕM:ç爸‚øÿI¦Î;ƒhŸ3ã)Lmûæ••Lc¾å2Ȩƒ= XþL­Ã£XÖÆåCˆ8oÕìØ9oaœ"ŸŠF°UC!NEpUB±Úµ2ÉSA±ªÙ©ØeiD´jD?m‚ÀR®¼„>k†¾„rßEÓþ¶¢Ñ‹*ËVÅ0F¥¾ºt*zŲØBµš/s¹²¶æ‰üº³æÛˉœ«j“”¾nhGŒZK$9”K¾¡h&Ï.„P‡&V‡FGۅrŽ“FG~‡‚q‡QÕe6o·„Ø»e»äŒ†õì†ïôŒ+ÒÙB¶“Þļ£cL\HÇ oYN§¢/}4LøÀàba~Ö²j­µ¼¸ÇdŸméÈh5·JȨ<Ñ5MÉqSاºþ»õTÅFgÁaòdãù™:~õ°<Á…sYMÖ±zö>ö2kk;ۮͽ”Ü~ÃCÑ.‹Ê¾âÕ4ºÊg»Çg<‚F&Qp–»¡wÏ-w8ûèhYfN~T²MUñÒ¤©ù#m ý…BÝ©œÕ¹cmíL¾‡Æë…S†¹¥'EL,>ˆAŒ·¥)LrzÉõøêÒùv¾×B4ùèL‚cóçfæ6;¢7VŽÅûytûnµé–^¾ÒS¿½Ÿ.'=M[ZXÙâa=}'Ž”H„èpGãX þiuÅ«ô¦NŽl—QD÷e| »™NWÒnŽúϐÓ¶»ï1>²k›Ð,€ÿaòcpÚ·“Uܬ:eŸäëÏ~* œŒˆcPëgå\?9*'àX ¨í֍ûŽ֍ƒÖûÖ}í֍û֑h¦Æo€y³$²úEЎ‘"sOG0ë±hu2ÙôM±®Ë3”K±˜žXB¥aÙ1Z\ ¡e$u)(/4ðLyà×ç"v47²È5’Ð°fÉbF_5’ͤ¨üZ1Õ¦¨ˆ¶JÂs1%j¨ÙÇ1S—°8aÒ¸“¯äˆ«jhujèú¢”änD,K@…¸djç¾rDËńÞAEIÇ,e¢¬3=}…T}Lƒò™97Rèûpnñȼ2S„[JþwYëÊIPZ5\?ÃÀý.%÷~HÈwriwÕ²¥´ÄÍ»j¶tñÓŪF=Mtü»ËÂ)5?ÞːuwÓáÁHU™×ÊIdm©â:¨U¼
92
+ ʁ2-uî‰hÿÕÕ¬‹YSfkڍzj]ñrÁ°®B=}OZ xß= §Ä®Wÿ”ÔÏÂÒyoµAš¢;¬ÜɇzV#ƒ;;ˆ7Rðˆ²¡Ç[-,›†@{Cݤfî”P²—αg¬ˆ^8±·Qqk…g/3ikl8o»Øí¤Æ²¹µšSOºIÒòl͆ŠR³ßÊ¥›f+“{ˆÑêâÁ6ºÒPÕªµK&K9yIÖâj±ÓvžÓ’Ê¢­:;µšúxßèf¹VšŸÐÑÃĽç2[ÿZøTóîÕݖv\Óê{“'#c.~­•@n‘PÆ£U9½ŒÏ Dé „j_G΅n’¾”Ò£³êE|l2ÚØÿúeééN2×Úpü‘ñRÓ»BÕü|WÙ9ñçmÑåŽÆ?‘=Mµ;ia/Ý»›¸P‡¤§± \Øï›Hõãr~tBO›~jm2jR Ê·5ßÜLMƒÔì§Í½¯¼³ÌiqÚ¯%ߝœLÇÞì¯ÃÍ¿ød_¾„_MÏiãïÆò!„â §B!Š®.ð—} í‡"¼?jÁ@§»&¹*:0D@³/$éXh\‹¨­õcüv§üAäÇiAŽE¥x—Qd“¨¬e㬋6ÇS¬Ù¸‰ã ú=}ô½P§¦yyNbg¤’Á(û§fˆÑLâ£1^_¬pWs4sÅH>i4}Djq~M«R €´º/ÃÌê0C‡¥8–¬‘¡8Ë'åøØPæÜýQÚüªq‡¬Kåd»åم«óÒg¼óÄFƒX<À ê"@Ú»;'ùöí֍œ^†û֍û֍ûÖQ¾.¼Zó¡óÏZÐUÆãì.JX\‹ ðÑß¾’8‘ýû7§S©|î–ù|ý…¨r’ÈëÝ¥Ná^·[×|ªž— ³äƒ…>¯#õ]™>ë&›”»±—×çŋ>M_™|¬³K»o*^«z ӋÊï²-^ýnŸ“]‚ ³FnÁ
93
+ $,-#–,)Ø\Oæ® ƒ·"Ý)ˆ5]D†æ°Yåbrö/ Gcî--©^_Dû®°b7cÒß*©5eQ­€aaº¢å®@‘_¡¸FxÛn¸ýݟFØ>ÒJÓäKE©÷hRoir-µ½CYÓy2ÔDëCi¡¿² )5‘ÒHεt¬ŽÀèA4{'JÒîp,ÇXŸd1ÖBge¶8ºô Tÿ‹uñ¸vºØ}T³gŠÂî÷ÔùÂyžr“¾û‡íŸÑ,ó9îWlɌÈôâä:ôp㣹¦ò ,C/9}Sü›…˜ßa‚ëÁì¶åMµ‹y~×Õ
94
+ ŠZâòœ®…íšëëc¶ä÷L¹¦å!pÈH&ãù֍û…ûÖ­Ë£…û֍û֍ûö»è=}ç•Z§•%=}ºw–þôÁ/§/#<Šn–¸Ùô–§¯G=}bÿ‘öH·M‘|¼”NI+،ËrÔ±ëÊîN±ÌkÍQNãÚÌxҝßëÆ+NÓ>Ú²G¼ç˜>FÝgø">a™¯;]R•ˆ ›¬>ѐºç²…>s֙^qºç·Ç>Sߚ„«ÓZÞo²^Ž^¿]…œ^õiðúGsO¿¬®™[ç‡ Š¿Îۜ‚½y˜ýGíS¿œ~§-H8GÀgÊ ÉY"v6+x{Y€~㠞=M#ÊY!q&&Œ97pƒnàÕµ!õ×'Œ^20 r= õ!ÿ$ì9«Èx3oQKÕâïÁHst×¢‚™}e vª³ýbÖvÌ8Ê(Uiqž¾âÎrLøÆø’hÑ|¨¶‚âSeûoªl4׈Fðäjù´}3ÁÐÆsyí:ºŸ­U™û‹
95
+ ò”Öº>ãTFŠJîñÄxΙÜqS‹¯Æ‘íí«Aü=}í½‡º*?U+Ÿ‹þfP„­ˆ´ô0ÄW¬è‰8yø€ë8zvS€ýòÐÉÓÁɃF¦aã,ÁG8šîT|x„h׿ð‘ˁ^ãñ¦7,Ϗ:~^RüœøåPÏÁždk¬x¶=}©Ls{¾†Ö”ìƒÙ}ärƬ…–5ëZ¶¬mM-ûzŒwëDçRçz†,Ö¬8 RùrŠÖE‚ë±u6‡³EáNë
96
+ £¶œGM OxrýÐ,ڏÙì²½Åõwëä_¶¤q¥[‘bZѐAµÐCÃPU§ð^߰ŸÈÔPβ°ËƐÄÞpݹÚ­pÂÓÐÄÇ0ê7ŠªP™°†¤‹¼°œÊ°Öp’ÁpŠÙpÍ°†Ó0†Ç¿Ð¨ð´0¢ÐÊð Ö¡€¿)ß~+]_*Wß)e(âGí>"åh£@ Ï5û֍tŒûÖ=M”å֍û֍GïÖíÚM›æÍûì¦Ïß:’ÆRÔk€6㼦K,¯*;¾µP\L‹ØxéÐÃځZ,Í:8ÒTUœŒ‰xþîpÝÓáÁہr?ãO#•È¯q&;‡¹„ˆ^ýЯ¦ÐÙ¦Š«,³·9®ÎRœx‡¨ù„hßýp€×Ážc©ã¦ç-‰o;Bï9þ~R<܆8Ÿëp¾A Áàscû·Zžƒxá°«È£Á´«ÀÛAÛׁ¾¿áKðpOôÐ^â<H8³„x#‘‡âWÇ´d®Tddl²µH±£èµ»M? ˜|¸øq¬8y²Èt¦¨Lg¼ÌhÏbÄÉn¼ÏiÔ§¾ÍkìŒÀØæäÆdª6äüvô×/ñÛ]‘×C±Ï+QÕ;Ô'±ÅWñÃOÑÕ_žÀ¦0µ§1]g0<Å ƒ¨óô $]_©˜U¥˜Ymì@Î;‘”6ю.Q…>ñ‰!q†1ã2r‚’yi|Íü‹¨å ¨Š;(×­äÂídñÍäݍd×=}
97
+ ›Çšúmœß·¸×¯ Xh¤>ò¬gtHqXÑ$1“²ºX’¦¨[kT]oÌÙ= œÜh„Ýl”ÜÂùÏÊ‹ªßnÞiTÞe,ßmLÛc<Ú˛¨/)Ï'däcB 13÷ÇäOïôç“õ± 7¤kíªXºø¦{Â[Âæ›B'âwΟtíoºSq+Cçß2Cß1E<(/ùhԕòŒîä9 šÎä)‰f¤é:—ÂÔ'pš™ÊŸ¹e„F–i‘?åjuÊôó~Ê3ÇÅx Ñsò'JnâÄo0lJ%Ë'^¤8H/ÄpHQw<Ŋ8ÑjÜÄfXÑb¼Ä”$Qc>i¦hÂÛ 5?I5e¬¶ó2L…©1’p|D›¬†³e’m¢EŸLñ~ê9‘¶´‘ºaê2YC¿Ei*æ3m„ØL·|"De"qt:j?¹N ¤\4g©°´©d^ÉLíÄǬ±YÒnë™ÙOämbDqrD1yÅÀ´±:òpzkw OC„¢ì°™Òlöê6ùE'¸¼±«’mŽë™BOÕÜ·om¼äeüåsœäo"Dh¢EtâDbBEjÂEf‚En$Bh0aD'ÍO/PÅbßeIJœ”Ûr;¿zµOfË|š¦Ra HV4e!ŒÖûŽÿ]Ӎû֍û֍û֍ûl $Ïúgýñ|yÙC‚¹áÝS¢wQ¿¯ñüáï^ç©™í_Ì0·^tK2M˜Kî»7ö®Ô4‹®–¢1ƒy«¹ ¹r¶Ôˆ3[Ô½ƒŽaçùÒËl3ö–S›¸CäêŠÅøÌê ЩV›“ç¤É~҅>‚ŽLË㿕xd҉
98
+ éŒuNûÖÉ¢ÑôFÖÿÛ·MŽ<e¬FðôoóˆäãYôŽ1ŠÏÀ•„’‰Kïùm÷d©ö¾]bí[n³ÞkþmúŠ *gÞ@‰Ñԉí—*Og{jdÈÅh¢–Vêp„ezëtI §F­-õEçÅf´Bf?g{³Ä¢]Mxb‹²]èfú·ŒN'ñê-T›š,)®mÄdzóHˆeVÉ¿HÀ²_ń9pe…S:h{K¥w”ñËw#”hè¼?#¥U‘žìDdöma”ôÅì¢f|…Nàªåˆ}& %˰•€MªþŽ ©ñ†Líÿ¦‹K–ÝÈ-‘žžÜ2\$ô<eôݳ¸²™&³Ž= hé… –=}WÇüæ~§›¨ß(«æ]ãªà·H4˜«ËG^bˆîw\ɡ޸_XL ­iâ¸0Kªðˆ‘üª³d„ªT†ë¢Ëµ'÷ϨyÓt0Õy-×îˆ@Í6æI €Í¯>¶u:À…¾Q,ï¹‚ÍØYD£M1\â& ç=M0B ¹ŒGŒü*ӟhäê^xǧQí!Ý9¬SAÁù>¡v³Hlz0«^µ˜¤ooâkµ44íkçnlüýº£›¡™øÍ0…•å˜G}¦¸-µ8ªÏæ´?•ˆ~ñ(Û†<0£%Zqþù­~¯^t>äPa 8$ = Pû֍ӍûÖýŒû֍û֍ûÛkö;à¢Á£ØšP_r¦@ڟ8Ÿ¦“Ÿîhöê¬ÂďT¿çRՊ<R¯Fp·S±ýWGQ*j÷ÇÁ»Y=}ÅÛSt\+~ïÁޅNR"¹RžABÚ«èߤEak٘YO
99
+ vrœ5·7ρ¥zjÎgʏ#Ó,WÁ˜”+mõ{ùÃÒ½–B}Õ+%-›‚O·ÛQé >¯/‘œî1s®RXïî¾d ‰ ‚ï€Ï.Ë7˜V2kO‹ŸµCŸÎ”
100
+ FCüx=M=}~%þ»#~ޟä³o8Ú 9V£= ñk<£SîM7„þ gÄœfwîÂE_©º»»ã2ÿ¯‰=}ùöBàéfaî÷+‘Ân¸Í•BlÎ7ÅÄa,«†‘ÕkPÂg2aòŒ:I£$y¶î´cб\¥‹4xÓc±§µpÝÀ¬ ]5BþÊ2w­€Y•Ì-T0“örØ63“Ô)ˆôh]z6“Ç!-7-Ùæ(g‘ƒš¬mø9ˆêӜSdìq»©žKÄ>znä¦ã6Ö¬ªÕCÀé¾7Ó<9”ð)É·î,s–£ÏKQ5ŽìºáÕc¾¨œâhÿ;§˜?<&Áßù¿o#XÏ9è¤Ø@"¦¤€—H­?ãˆ5nq‘$§gÁ”SºDõ8&Gç҈r\;ODÐaA±™©i”onAŠJBº‰ŒìkGšiFw…1¸í®Î</±J»ï¸ì"VLKðǂ®$´Ðb9s·s„¡ÀJn}ÉÆøÜ¦÷]Õ4~ÌÈe#:#ºèÜþì(ç6¶®‰ƒãӖv&•Pža7åŸÚQí*X[€ïÞޞ¢!Ð-  €†û֍´•֍ûVŠû֍û<rû֑GÃO¶ÿíÙѝˆ)ã¨/ñ}ö/Ãüžlqïð£#˜E8è)¡x\:äY£‘i;ì#Aˆ>8êö^ãX [¬÷ãÉzQ¢§…C؂V²¨‹ÃP¿Zº–ñˆâõæPxg®ÃLž<’’Q[T¡ÕcGÒQ–BnÒ³PZ\¹Cư³X¥µJs‰Z]­u³Æ³·Q½¡fSPÝ]3×åÓørS«-ÓÑT'™|j'ïã[™>ýúÞÙ ÒÅ+qˆz¨…BVèL†ë¹EØîzªqršOC}œYoÍÀ˜öjÆöÌDüŸ5¥’Ë™—™-·ÍÅݓM5 XŽØ¾åOVŽfVoøäÓÒmlÿì†Mäþùjê6XZŠ;ûª××½—Ê[(™Ø³?â}Øm1’Éaè»ØýÕ0Ã]œÚØ·û 1\Š_êµ7• Y£˜\ä¹ §Ù×(5ó®rø‘´ƒ9çx›¼ÚG0œ²ïwnѐç‰ä†¿ÿÓÄ5¿˜ìYV[¼g}"×ÿ}äEN*Oƒñ5Æ®ÜêâËx„}cSZ=MWhòØéÄ×V¢ó—Pøž7çåxS^«š_= Ñ
101
+ !ó?:¨¯QTânµÇ¼,ñäŸá3O9AœåÕÏ9_-⩏é;®î—ÜΝïÝâ/äÆžäX3EA¿Qb´ãwv½¦gW~?îãˆaÏ ?8Žé[ï¿hÎe²O®Ïí€ÿÔO1‡¾ÕX+E¸‰Aaý\iZlEùVw*o3I>ì±´©T谄BãíÙÒLS³…œYyè±Öp¾¿öüzÊà‡›%wJ’æe±) µ8ÅäÖÍê¸%HC4ÊPYb¥%'u™¼ÀjùiUeŠhvçNo½!TðÊôækmŽÖŠÂu«áՑ´õfž¬.FúZtïò¥µNkw Qík/ѽ¸e Ó¤!#ó-8–밝µ¦˜ßQÆà8ÁÔQ7満Áâ²eÆ4Ù¸Bú†¦@ú¬ËÇí‰ìQG±%ÁM6”ÒéHKæ
102
+ {qÛøºÞ¾ö<1ÓA^ù¦ÿ÷Œ™~…«úG[Ê&ûeë>b'֛X‚¯C‰Ÿ=}™—û©ã­n¼=M¬X7f¸ÛÓþ5(wüïÙñ×ì-ɯ(§™Ðú࣓Ë\‘)„9O¦´šQ³W»f€ˆ # 99=MëäKž¼ÎCrü¿‡s"X8à•Ñ= Ìó"yL¨Ôžá$ $³ÓJ¤õ±A˜)ƒH„ãp¸3nٗX¿ndÐËL"ždˆ’4iîq\X8íÆ¢ˆÖœ®x’<‚Þ_®S‘|<¯á¤$æXG“H1­dLŸDqYM¹Û~é¬[½bkm*㐞ñdŸ±Ý¯·ýpðoF1W«¸Zµ!ƒò¸´æ§Ã ÎjçoV#ÛE¹Df‡Òa6î£Ò™†µí­Yh¶°Gµëóå™Ì¨éƒîÜ.,KàìÞ Õç*‰ÌMÄlŨQ «™BJÆc)!ój‘-LE†9;'´3}®±*^÷u€Ê~iJ„ÓËX˺=M«ŠØ=}£ÿëzoʃ= = =}í×
103
+ ¹\Ä¡‡n-Ô¼äÅË1cÓF"/USÚÁ9-½6.+{ùpþê)µV,ÖÔSÃÀ½Dù.üö•2³õé8éNv•ÓIÝ;ù}¢Ê:¢Ž5¢>¦á!@,%!ÀمûÖÍ·ûÖÍùÖ=M†û֍û#O%¿I臢X$(‘‚Æ0\7BQp8ÏùߟIlrÐ(í5‹1¼ãdyÕ= ´ÀÂÜ©4ƒ2Q†œ6ƒœ¼X&åùc<ñ´1L?ái1)òÓDÖv¢­r²¬I´Ä…ËD=}jrìÈ´~IôÕŠ޲ëQ‰F¹è= ¯,B7…Ø‹GëqÒ\ÚM«¼·<QóŸN§’È\“7ée¾÷©* ~Îà°ØB£ª øÊè“5E¼
104
+ ´¸’d))3…†J“e¹ÏîJ¼¾Èâ®GJ -vöButÞɲ¿ÊæUŠéʓÖ|½¾
105
+ 9ˆÀùÍ¡ô…-´}T‘¾Ìiõ“mÖ¦‹XÀåBA|’ÕÙÓu»!•=}ŒöÁ ¬.]–ÚL<ÇëåçÚ¸¥
106
+ QÞo/IA6
107
+ 3Õ}?™M#¾Ô9¢!¼-1¾Š¨‹cfæ:”Ù1ÅòæœÎP†éƒ*ìm?‰¢ #3L£m)SÅuø¬}%†=MQƒÚ¡Y&ŸºÓ¶Y]ž6äNÒàuà2Ç\kâ–yòÀåú_̰ڍeÛßUÿ7{Skè¦b;ùâø¶[ú¡MR–$-ûQyò¾µô<×§Í#kGY°æ!§DgTVXÂÆ¤u§3é÷¼¸¦So6Y³B âł7Š/ÙÀêíΌšê€Â;ëVØÑã½}˜ý’‡fÀ'£>¬·äÂæ³ËÇ]yeïŒO
108
+ ޛñ¶íþ<ÔaŽ¢/uœØ±"E{axÿ·òø·¬8_B÷±Èo×_«PT  !Ìu,äÃM°Ó÷#[P¨ð@,¢±‹.fŠP¶AÄ.¦P{F´w­Á„~)Ê8Õ£ˆè¦“ÑI¼Ël*¨€ü$Cùý:é÷;±¤§dь™4¦JñLªF
109
+ ~T"qQ<z;c¿vLó®…îóxöF摛‹<¦æÔ­«ۘ’Ó3˜Ý_¡¹Ö©äïldo@)áD^¾nbàK9ýބ‚…r¸þ²â«»I„¦Ç’•mJ•ú‰È·æù·‰LmoßÝ ”ù„ÿì,$SY¹©¥l:ÒØßLÒtҙù»íÔGùdGÀÙK§ï¶Ù\»¾ë;¡\Äʐ۸g‹= ^g¶ƒÇqàð_%XßJl†A<LDüÉ(¥ehi5SÂÕ8Ûå˜å¶pßÕ¤M†ÅÈlK¡R¤Ë븙Ù,°’þÏI‡·~%çuP“%³jJ _{éQßJävt±ÀuíÊqõ8œÈÆÏÐ&¯óUüƶYÏÅdÓ®Àq•XŸÈãÍȾèSôUPÜ¡×ú­ä­„çfœêºX™Á©æ†ì÷UòÐ¥c³{xKðêêúvÖÿˆš”;Òûû¨ÓŽÇŸŽ[²r=}õñ¡³.ò[©[ü©¬çO¦ã!Þ*f¡¿½íÕ …ïÖ›ù֋Ö=M›‡û֍ûÖZ^IÔjàXJœãÙ;/ßsµ½¹gäÙ Onñ„)æ¿°¤Ì$úá2´—kЙÕDšE96hLw²
110
+ ‘rü_Le«¤42rì°BÙThSýdºìL‰æèÀ,;典Gc—»,5ë„éÙMkÆÑL™yÒt¯±ƒÀ<óDø Oç.Yìvèsœw¾%"™~ê3S~¡%g5p´vÀWh¡Ç]*ô«I±Bc6ªˆ6IҚÊ2¹Ç´0wt‚cÄ2cj˜rfÅR=}´1Ër†|5¦OÉðÊÉbÂ*­ßËòÝkµ_^ËBÅêÎ6u>LucÖ:éFŠ·Ëæù)
111
+ (¯ÉóMËî¹P•Ü'ô1ýÈ¡+-æZˆÀ~Åá,1m ψÒgg³Ò4mö‚ãžM
112
+ ߋ=MÏåÃÎ?l»_>‹sŠÅmˆÉVÖS•ðÛÀ£Ò¦.*©ZÈÁ«á>}<Þ
113
+ 2 Ëk…§NÎöƒ C]~x xÊgëlÖ|ôgis¿ªD… =M^#F©;@?€àï]&hÍU¿‡¦8ú9Bv…h¨1ïÏ9Q}ÿ¨Ø,Cäç:ÓÈQßè9³<ެ€ø¸/{mØî¤=MFL‰VæRsFþ“sÆ7»Ò¦ í7$¼ö4Ry þÿbB/( ±4B6Bå 0Ïm†欓ΆXUºr“~þUÇðì¼3ådíЀe+‚ÔLX³Šaß¶œXŒé„ykœâMÙQ‚é¸=MvdœÐ»·5[û͍ÕU‰¯ÍÑÐÕkµUwdø™ý¦EæVlëÓßIÖ™ö¶ßô9·„ë ß=Mxð®£ò–ü-Ócø.´žÐ‡Ò×]G[ q5“@É#“<<˜v = bgdŽ[BN”ÄÆè±SS½¨Øäv}GÜS¼øTþ¹3î<q–Æ@î¹wŸØP†ß+N²N|(•ǁ7ü×ÙÃK+œ|É ”åžÍ;ØÑÿù­9­Ž”N•GÞ[^v¸uØÃVï#é >œRc᯾©äeot”\QíäƒÜ7éG݈r‚œÂ7{áA¬„Ýi¯†ìO^¼ü=M£—?ª£œxY£v’_Òáç7ýN&÷‘µ?yΞ<ŠC”Å_û¿3„ï¾ZŸ26'~ ­¶!hv$P{T°À;¡ü0$‡‘@~Ӣ؛U¨9¦a„&Á^U¸ó7¢¹Ê3l‰fPî3b0_=}â%0ärb8SF´öƒÁ„K¥2:?ª(/¥ÁK7¦š”8ÊߥÃÞO<=}ɐ$X4aðÎ(òßgð0<á?ã1Lþ1éñO±Ü*¨äÔ_²ÄMq¬œ¨‚£4ï›Âü8móûˆöšeÉSºÈ•Qlš=}ã8¢ú‚¸ÒF¶÷O‚鐩…skLÆËy<¼ȉ¬
114
+ ª˜ò?ç“üA¾¤˜®Mk@=M"·=M2ÈÈm²džž°¨ÎmBˊ2©}´äý›i†½¤}u2G7Fó—G9Kë„îuF¢4"ŽÇúB¥u5IT¨Æ˜KµɌHo…˜~:‘WóðSkay:ûÅS†Z-│jóÑ2é= f&/¥9¼Lí€ÓhFÂWR9Gì„ÔD³Ùyô|ïÂx°eŽi6¹“Óiß¾m¦@» ²Œ*p‘]§Fa.EYI²ë;ÙL7ÒËT·kB™Üܱ§ÒP/ò\d‰Ø±ïxӜö·“~!ÒW+SKÀÄÌ QÂ¥ Úuè‹bŒë+I1M‚ú=MBîz4Ávqdò‚Ûsìië‚ÔJ«é}pâ¼ÛEü×JáÍʤÁ¥Å<Ùwª¡•I•õŌ{|¦úRJêøz{¦²’:>´“àÎ<ڒf·vq%A5ì‹È= š™EÕ¯KYx©‡ƒEÓvvAÔª6ÇJÎVw1Ûʺ-ïËєɆr‹U҂UÞÈÑ{-EU¼{{kâËz˜ôÿqëÚ•XÝɃÑw=}6}•¨ŒÌç}]S
115
+ Q ɇæ&,_TPóÏ!³Þ&dÖV‚ɱå!­X,TBÖÝ)OmŒ/ŠB‚È©C[»iöìµ°†Jfº™ÒË¥Ž6äãzv”ÔRoÊ5ç¨vVúfôÞVnëÔq<õæÿû ]ð®¬|[3ƒûQÓ£u§[(tˆœ'™Ÿ—’ˆG}j½hG–RßN¤çÛxÍúep’7g疳—Ò»
116
+ ý”Å–CYÞ§‘‡šPñ yf/^3›ù—ηt=M~΅r[Ù¯W78ñ=McAǯióQÝôž|ùRƒ ÐK#<V:@Հ «Ó&IÚVèM³aŠª&™\‡¨¶-jPd‡é0d¦ ÞQì›Ó?}Vì{ñ1ú­ü‚¤æª1O8Å îHwÍféÌ:åšoÛê÷¿˜ –K! H8ûn~¬Í=MVû{û֍û֍û΍ûÖ=MY<1b•1ÕÚ«¸R}äÑ=MBD7e4H»mìúü‚ö0IÆâlQc—ªù™iìÓo‚Ü.)µj8rkâÖ~2ﲀùMÁ5)}Þhx´’B¿´OÕÅdhÉTgj¿$IkÏjYu꛷,—!9ôµñÒϬѓ…Œl´‘º¬/ÿ„ø\’’7´sþ¼l½G‡ƒ²¼÷\N¯g¡Ë°¢ 5´ ÏÀñœ%]²5¬ÙÁ€/%»$E›*IY{é½j~íw]y©Æ2ëoE~Ϫx|e&J’-pq€¡ªst4ÙÉÂo5E܊jäõ4‹ÀÆè U%ŠÅÈé‘sm¦¿Šb~-îØ&}#-Ÿ‹˜_㣄-7ŽˆøcãFaëÜbzfö÷òÉß¶zÕä³Õ¤Žˆ±ðäÈa=}‹
117
+ 8õogәZ*G ~÷»®CŽ]+* rwoÑޚ̓\hðÓʾ¡´‘9PWÕÖ¡åÝ-T¿ßý&¾~VÐÓ¡¶.CÜfŽõTRËDZjS­è–:i؈ÄýgC¢íä|FtW1=MŽT3ÝÖ¹¾Wѽ©6†Sª<†vvQsÜ«¹[³íýŒæœæì
118
+ ÷†&+ÇÓxˆ|ñâ .6oÐÀü€ê)+î766ŠÌ$SzyvöjØÍµåƒÌ(‹Ìì\‚eäꐥ­OQ;júØúâfÉ1VÖM×A<ÐQÞ­‡‚[5b–V5ÑςÇý€[§6ù)Äù ™ëî¿–œ~'=}+YhÉ= õïaÕÙ.FXؓåa«£6.GëXÙsã©Ç§³Šó½¬ùD¼³w½˜mNꆓñݲ«=}} »š7ª3NÂï}4uÛÉ¿þmòŽæÔ’SŸÄ»KüD>“Þ»ó‚/·¢>ÎfC/÷'šØÒàã„/çϛøíãV·àҜ"sŠ)Ið‚¦= Ù=M"yï+8ÿ)ÜRšY¶õëÒª~–r‘Ü·àZOÏ®šiœ…ØâgÙ¸/c)?‡º¸Tÿ·°±”ëgÇ¿^"¢¿s%ÍGüûïñ¹žúÃۇý[_Em!Ž…-ð͂ ™§ Sæ%(Í-Ðh ¼¯# ²%é?)Òˈ°¼m¢Ì;4DØPè@ò aڜ-’ý1ˆ¾0K˧p”+ñ‚j¨]»bXo¥BdºZ¬^¸ÚÅâL‹1 ÐP¹¶¦‰ßGì
119
+ {(dH¿_bz1ö¨z¤{BîdHJb´~9ÂlL=}…‰ëH{§gùÓTêÑ]qîþª’g´k8åXySæ¡Q–o­Ñš“¬9ǂ,š1ë X Ð1àpÔӍÛÖîӍû֍û֍û֍ûéW­sI†ðƒtDŽÈ–_];9Òko;š*œó\«¡U>#=Mê;Ð×Uœ´¡™K,tZ†@3#;29Éyàh"¬LʅdtCýV;iñ輗fL‰mŒÑ¸¨6WÑÏ©)&¹øYÿ¤—Ï©×l‚xVS?܆ÊwPÓË͹üÃí”}üqS¥?» ¼ð⡜6rçLtȁrw+7GyhÛᢚöb×w6¶ÅВi·ŒÅ= Kr?K•‡z Öíê¸ëvžÐÒZ½­v;›ªûøÿäæþ¡V–ìÓў׭åWŒlŠÃ†[m}–j¶Ñƒ‰‰GùP[6ùùÔÿîÀ[–êÔ³SÛ£[~'“ë[Èõæa¶±.nL•ð°#'Ÿ[²óiÖ ³m5½´ŽáHG=}·[ñ=}‘R¡³ÔŸ½¬éBuðåÀjNÞՓñœÔ«Kë}䝨xàeâßN
120
+ ’ÓEF…EWUúÙyRêí …Ž¼§ýÔ݆åW“˜è@uðÊ­§)C\Œz!/O˜ð°^»·\>OeêšQÕïÁbOÙši—óëO~¾…‘æƒ})?ûˆRàg„®¯t[œ|Ý ƒ›?-òI€“kSÁ¾?Å·¿sìø§ÓžÞóS‰ ¬%#L®%v/ÐÇs ™| cK#¨g#ŒŸ0àGàÌ<a²¢ÔN7Œë@öÁa&O(’—0@=}_%ù±NäO“¨°6Âc0kš¥ØRUd¢­A¬‡b´˜>‰P¥¹4.ÓВ¸U=MâŒ:9†ë²P;§y™Kìüρ愬ðí6ÁnÑ(T¬°Ëo¤¯óB<þ8ò¹(Õ¿gH¸Xê£Üq†§ÂtÊ4EiûH;¦gÉÙHê¿] q"¿Â¼j;ÃÖIæSYfûZQþ—«ñ†‚¬Ç˃ô\6£8¾ÿQƅ«ý5ÇrÉXK»äõOn¹‘揮“ Œ¼lO´j,âÚ@üÌ Úöp€HäcŽðR”œ+]s(MDð[FðÅÊ= «"Uf*H«%ì›%r~7˜a€wбñš±:¢h¡:B¯Zªì?MrÉhºB[¨TD²\Íär£¤Hj|ÉAñijäñ2}·jœûGñ¦ä«¯2Uóè<õëX$¹õ…þ”°qgél{L„¯¬ºlR‹sJ\Kİ[ÆpÒªbÇÖ*ó§IŒ»Ï§â³«*~I²ÊDé¿a5}™µïíu¾,pY_s…ëFµÉÇuZ\qIwEg–­çn­µåUzUðPôØSqƒ J­è­'×U&žñè·ÎH{,eIJ4?£ eu0eñŒûÖ}kŸ‡îl֍û֍û֍ûÖ­ëëõTŠÔ÷ØU|Ãú"­Ó[Tê~ôxrC™,½n9”î·ðé=M”Ì“Ø×nIZî:½g”þñ™eGc‚£Ù-:‚ð×ÊáÖ&k¦:Ì¿‹Ð• ]‹ÐÉáÒß&ór»,LŒòlSñ º„ Š•¬éñEF¸ÈKFIþ¸¼©‰Q@Ãeñ²6WŒ«^­LRÒø\ñb‰‘ e=M;6þ‘N‡ÑñêøŒŒòUÕ õçú„»bˍ>ÒY‘óFég;_¾ãèÌ.êXܼy§h?§ú³=}Ú̒8žð
121
+ -§™=}6摹·ù…ŠI·®k·fN՛ÚdFØÄ}–ÏëÞKNC~ۘQ\2ÇX~ôÃ×±ßÎçÅî>}g™Ä|ъÛ'\n^(Ÿ›|lY|öDŽu¿Ù͝‚,‰Xã‡Z¿Dg
122
+ üyñ™ü |y"Š·*8‹' Œ0ß{= ôÑ!96'4ù9pœ Tà=}€E/ɰWÄDAùthü¶AO¥<¹2R“uhë#݋A_~§Œ¯Nˆ¿v°ÓÐbea:¢=M=d{'+¼¹¢[ $í®(~ÿ4ԚO˜2kr]£ˆqiAmRÞ¶•›i¥Á²iÓD—÷kÒ?µTÜE¹~’V¶—šeîÂ*Íҁme–ª1£5³‡HÆÏul[ĸ}Q­çÀX (µ= q”Wû֍„;ÿ†Öû֍û֍ûŽª®q%´t"+ÄÊLv0øûj€˜Ÿ¡Ús$Î4XÜwÀ E¡Ìï%n6ˆ½xD†.±ù…dU0ù
123
+ ª´ NҍÔhá%B+רDXIòÎ赯±zl©á‰EN5´hwuâ´D†×®EÂm±HØbÂù>©î7Dæ^±xc‚}œ¹¹…–4·ùrk†µNSË£ìðARM‡èô|C³ ìÇëR¿ë,MsC±b´Œ*ûjJ$•42º*;[JT8Ê”¦b×U*q/H,ßÌ0Ùâ *¿3ÈXytn4wé{k…¸Æ’Û½jÞaJ}ÇÊ |Á×jáJCµQuVåöؼna­HuT2):ÉzˆÄ ͱ’¼f¥:ŸV‹\_ƑÆæÊW:£ó1²
124
+ „éÁ´îªZZ¾Á³Ê£îÑaZ=MÇ
125
+ DyÁӎ·nÓZ÷ ø¿”¾fWs9üíƒðÈÜáþ&&ù<£A½-/UH^ã€J£S›,2½WÈP²ŸVø2ãžJ³™mÒµWIÿàÄÁÂ—R§¸$ól 5FâN³Š‡l*üSiá}4«ÃéLÆАjyʍlÕ¸ÿæÂ‰_«GxLˆq‹Óå³C6]Ïy䙁Q Çeª˜V³óûäMˆóÇÂífV|»U½‚,ÕqÆùL{ŽާmÁsV͏ûLœƒ“ÏíϤ.9R[´KðÔª£ÿôÁ£ð͋.“ˆ_ýá{ð˜Çc¹s. Ž[œ›=M¯ã¼$Nf·Ü¥|~t”yðèÅ©ÏÃë²aNõFÛü ò™«k´ÃNCÏÚäŸR{„FÆgt>W“™tH=MQǶçwùÆk¯I]]Ž­hWëc|Qš·çîs>¯Ž™ä˜=M±×g¹˜^•ò(œô’±{÷ÇÉsÃÕoþ^ f½“ƒµïÚ}^oôÜ3µïé¿^#$4k3_—àðò!YŠ%<°"ºU/˜ôMÀР×s#zM-˜ØEÀé± Ý·#Ò^.8Iv´°"ibš‡.YtHDšå°ª-bÚ:Akû¤¼=}™th²yA™v¦´ÿ1r ˜h$£ )5eñŒûÖ=MZ‹ûVÞ±]xû֍û֍û\~5ù°ùÕéŸN³ßc¢‡~3|dÐ)áèb¢”eaAC˜?áúf¢=}%ù&(n®3”ºKmFÛk0n*ŽÝAˆÀñ7DÍþ³üÍD±{’ÌÄĄ-餿EoÄDÊ¥„jWé}cEGkºL´ì}OÙØwö9iÁ{5eÓ75þw¬vQCׂŽéìvwl«ªq)e¯†ª&}4аB÷$å«4çwKFtD®KØÊؔφøóºŠ|S@«FgAí¶:KU·ž÷D
126
+ ŠŽÔòýc“œÈÆò„í¢%ºö‰:ö \ÁºF™¿ó¦›þT„ì7¦a%,‹ê:NöR\˳´Ag“cÑN¦’#-5æ9êîV4yèÚõAã-‡ŽÓLŸøò%ëïzžê’k–ëâ¶_Jxþ³¶-ßy2‰ëËMLóÚxj,Ô ;‹©ÓL7¶…’»MÇ{Š¿ÑÌ߁é ÃS®ûÿ”´ôQgçÕÜ®¼Å<-ÊYZçõß=}?V´‹h:¸Váц®ƒï*çM®S'R›æ‘ ¦ƒ¾uo›Fß Ñß]E“›þMÙpéSc™òߛh‡˜SïÀn¾r\÷fššlœßðӚ­Ç.ï©ã¾ÿî›îÿ:áࡇ"…þ(ìXî¡fÙ"›ª&ÞÉ8ˆH"˟)\½(´Ž<ˆõNPχ °àk3"ù†'ÊN+ÓQð‚oÀûà k¡A—d&]< |Ä»±Ú¿d ±ÂÙB?7­üsAÒÅv„¬Ë&±ÓÍBãÚfÊ,¨\TZRŠÄ¢èÅu±ö{C>¨¬Y5RL.p= $!0í֍ûοû– í֍û֍ûÖ=MÚ§p—/§34«Iø¶x°Y½€†.a⢖…$gÊ)²W4èö¢£}%±ÝÀú@áØQ¢ó$Ÿ6(ÒÌ6ôûJÕP Ā …áÉÛ¢{ï%o_*~6Ü.G™6c’G±Œ:é%D#kjºv¶ÍK)ÿ|’Ù£„¶,Ò^²äãD·æk¦î´y<œ÷h³D_@ùžrrÒ=}iû‡²wE½žj¾¦vT®ÊX=}oq@¥‚~fe¨üªFe4»ëHâusôÎϸýb‘ÏÃBÉrô Ã8Utѓ¼”e䥪¬Ë4ÅWK:=Mq”^ʐ4ÎK&\(Åâžr”͈0vsRºF}œmØ4º'9T{“Ц5òôJÅity“Ûֆf3m­ÖºPýT»ÌƑŸmè1º3T¥‡ŠNLôÔ|ř×iƒ–‹ž<.lψzýõ|œÊInÓ»F”(cÓ(¦ÍQ,12:
127
+ ÆTì눘´ó°Ê°Á‘iã䪦cU-::ÕR4 4 ÄÁ›Oãa¦éÃ,“G9¶ìRL}„xÔêP‹³ Nc¿c¦–Ç,µO9ÒþRdœ„ØòÐÃÁocåp¶ˆ±L‡ƒzfDÔ4o‰¸áR_§Åœ!ë;LÃëyòwÓ Í‹Éöô’Û­Åm7ë+… ðû˜°ÅHë ©¶¢SM+7xâÍ(V M×y+–gM{ïx}ִލ9èÒÅ 'kæ?¶šA<#â[¶f“<­ ˜´äSÕCz†g²|®%=}y«[Òµ“„É
128
+ hsç±ÐÑC‚Kç.®{ý=}›Íƒ–§9È\ú±”²,çÆ.Û챟͆çª}®æ'=}±oXÖ¼“TÚ
129
+ ûQ±CkçÑ®ÿ<¯XZ§ܯ 6óRÞÇeRïÅT¾²¹]˓š‚5Ȃ¾+Å]¹J™õ¼ÏiúôóÆÕ‡…ç÷ý³îšºl8YPâš¼GtoÞù¾Z+]ý·›¦Îìø yÖóӑ߇qïîó!,Ÿ&è!€+@&ãù֍û„ûÖ=MŽ{֍û֍û֍‡›‘Cછ!†])Pu Ž?"ô6@ÿ¿ ‘bXþ§•<­ ¸6óñRÞC“rçt®M9<ýÒYR‘\H¸tìa9ç몮‘õ=}ù
130
+ ZîU’Ô‰ûöQÞÓC‘oç Ïñÿў¨ÿgYv¬—D¹
131
+ ¸XëŸÞÃrçåu®|;<³×š}®ò'<Ó®Z~½’Ù—õ‘¶C#gñÇ®àKçÚ®<±ŸY—T*E/Oì­B ¨I¼¯G\nLœjAkK¤éLdèAdìK¤KD$OFœOEÜLO|ÏB<ÌIÌÈG¬ŽL”ˆA´‰KD=MDœF< Ml2Áá ApéhXÁ„Aî,ô<áM4òN3NÌ2šÏ71Ö0Ê8'%[FdYMì^OÄÚBÌÚA„ÞK̙¾))Qÿ+c^+¿Þ+-(§£I‰bKcãK¯BK%‚H3“"E{rerJ§óJSI…ÓIã’I'Iÿ+I9ªIkIãëI;JI÷ÊI_‹I
132
+ KÙ:KµºKí{K]ûK£[KÚKóšKÓ½R׿ÿ'P^j9TîçmóœþL¿_o©×hÙtÙÞrùÔv9Ùq‰ÜuéÚsÛgYž= 9Ÿdɑb©•fٜ~9›yI•}•kyoÉh)lyrÉva¹eéãv:wþ§P§QBfPÆdV2fWåR²äS†GT‚GUæÄP¢ÅQÚÇW>„RJ„SVTU|!†CoQƒœi‰9C%ƒ„…¾8é‹9 :‹;8;;yº;=M{9«ûÜ.fÄNfÍ·QÕÏÑw¬g¬p£¬tc­ÂC¬íάÁ3­‰s¬Eó­-Ó¬½“­+¬c«|†<x‰ ~ÙÍWvŒ×:×8—;M9/:ù®8Q®;?o:î8Kï;#N9ÕÎ:‰8ÿ9g:>×çf¢‡æ½7æ¼÷fݗfì¯æ ï^»±Ç×%Q= n!‚= Q0̍ûÖýnûÖ=M†‹û֍û֍ûÞëçSÒSl_ a­Gá­qÁ¬,­Ó­Ö±¬pq­ñ­¼Ñ¬³‘¬Ú­·)­i¬鬁I­‰¬Ñ ¬(9†CdVß.“NÃe~šžÃ˜AƒƒC~Qƒp)™IÔyƒ…™C„EÑ5ƒwUC’mÃyƒ{}Ç¡qűQÇ©‡‹†Ä‰ÔÌ‹‹ÜÄ „T=M‚ì†| $„ ›­† <ˆ\< /ÛC¬Rìöƒ¬Á¬%3¬=}³¼“ªÿ¹†œº$¹d¼‹ä¹DyˆÄzŒÄ{
133
+ ^¶›{ w;I÷:©ö;QWZ†ÿ6V.ôNƒë>ïÛï9/XAÃô1CQïâ ¼T–¿VF½Uz½W}”‡·­[wüãUÃû-ÃMÞŸý•Ç­*/îƒ3—ìHâòxúˆöÝWŸO¿¬ø¬c½Û1 ÇÑ·q¯Ï÷„*Bn&5­£«?Aä¸pBq8ÑAÌH4~¼©@Šf2/B«vqåۈ“,YÆ6{œªCZæ3Ï«Æ)åÍd‚2‘XÉè±|LmAÂÅ2jM~Ç1õò©ý e²¬‚hF\ÓH¹uLëF¢0-’ª=MÙdÄ\™~ÑK¿¨pà+ªÕ¥äž1QÉÈ÷JF²¶0MkªõÅäûòBƒyñÞ¼xu~\Ë@2w2ÕK«)uäñʇU±Î¦Èws¬ÎE–ö6o ˜ÝšB—ñС8úðÿW’æîûä WWíeÉ6îørEÆÖ6‹ú¨£åõ–îñþ•0ÁZ©8½]w7±ÁËèùm4 Nª0…šª*ÝdÅþ’?ýu_qÎßS-0¥mµèRpÄ:D/|cd°ÁÃ×'ãäÙ„¤›=}Iæ¯2]gÛ»QÂøx±†¼(_þS›[WaÌ»Hæl2ÍF4±Ê=MüTŸ_}¹™†ÚÃy³×cÓåäYÿ|½Gޙ[P¬|¹7ªx«ä=}+6Û§EBår—éROŸvÙ׉KJ1šÕøÍç:Í؍Z%2/PÖ½! &‹û֍×ï֍û֍û֍ûÖÑÖQÕ1–³éf®ßT ‡×i3îY€Ž»Til»÷FmÁòDS…¡ÿOTwfNÒO«­cEöØôÅêR›ÝüøÄy|:ÍÔ:éœÛúÙp­ó—Í6v³Ü°¬Ú#´÷F§ð‚ÃÙ
134
+ ³†ÿ½œÞðJÏBýV§ìûÕ΄ù_¹–
135
+ ÜiÛk;ì‡:™ÜÕ瘊ÏÑٍ¿‘(ÁÜÎ0¹/s™}ÿ\¸{TîYm–½B~XÂF¼‚gýW~_ƙE¬bçý¾^~’ª•ðÃhÀøIƒ‰=MPû™e7ýºCܟöޒª¯ï9«sœÈ³ä1þôjW‡'o‹ÆËÓ¬ûO‰ã9g0|ÆùåZ
136
+ ÒlE¤ïΊìùà=}º
137
+ ¼@¯‹Ë«Q¼3\ÃÑNé(®¤öÚP#øãýa¿ÌDºÕ÷u9ëq/‘VԀ>·™ZôÝÂ]«ÙêsbK†“ºâ=MAU9îv˜Iâ‰á„±è‹±Qí8ï.B˜Zê}Ç:xä)ލö¢³­zƒAg¨9—´ÁMƒyçYލî®rԀH«Y= Hä™G„Ä,í9ä<֓¡D>«×„ÁLm ã„v“° ŽlfÜcšªp³Ö,„JKùë%ÂÙCñ™·TÃ\-è@FѸí<2±üÌAŸ¨7™¿èiQÊð°$syäZ–‘¬«¤²àÚ'™¦÷°Ïéd>ªq¾ºTÂU}ëpæQ­™Lƒ=}ûøëq@BiÆ4›à\êóÜè Üëgœáׄ@KÙèo1jr¶jtÃV‰l“zó¾î”ÇW8äpfP¦l‚JS¸í|6иÅ̀5‹yïfVÓ­=} ‚/øïa.“´ƒ¼Dǟóñ¿"·Øì5Β­ $0h0á߉ ãž“‹?Ý¿»¿äDG‘_©­¤ÿh­Ä_h;I±vŽ–nŽ~ž>á;ò­=M™óýŽå¯ 7‘¯ɕý#”{} ·Zë´”ÎÆ„NÏRǽûV«A¹³ì֍ûÖyíû¼9g:&@*†!e*$£vËbáª;Vp•c,ÈåEUV!4yø Ô#Û%î%i[óX¢î¾Ù@à’À†G!þ¨@ÝIÐNZ= Ýóá¤àYá /žVâ ÷6X€ˆH\Øü&ð8˜ûwâ6õ2@ý Êù.ž‡=M+ç-n¢ƒò|øM/<ýŽNÌS‰Y¬‹Ý)z¿ ¥—CoáÎ㒱 ÐÁï›XÙ£!õ܀d?¯xðì
138
+ ÁiŸ;ª•äÀž‡%Ёn= =M+W= ÓÖc[aS
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
+ (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 La={a:Aa};this.setModule=x=>{t.setModule(qe,x)},this.getModule=()=>t.getModule(qe),this.instantiate=()=>(this.getModule().then(x=>WebAssembly.instantiate(x,La)).then(x=>{let me=x.exports;wa(me),y=me.l,h(),Ma(me),r()}),this.ready=new Promise(x=>{r=x}).then(()=>{this.HEAP=y.buffer,this.malloc=Gi,this.free=$i,this.create_decoder=Ui,this.send_setup=Wi,this.init_dsp=Xi,this.decode_packets=Ki,this.destroy_decoder=qi}),this)}function It(){return this._init=()=>new this._WASMAudioDecoderCommon().instantiate(this._EmscriptenWASM,this._module).then(t=>{this._common=t,this._input=this._common.allocateTypedArray(this._inputSize,Uint8Array),this._firstPage=!0,this._inputLen=this._common.allocateTypedArray(1,Uint32Array),this._outputBufferPtr=this._common.allocateTypedArray(1,Uint32Array),this._channels=this._common.allocateTypedArray(1,Uint32Array),this._sampleRate=this._common.allocateTypedArray(1,Uint32Array),this._samplesDecoded=this._common.allocateTypedArray(1,Uint32Array);let e=256;this._errors=this._common.allocateTypedArray(e,Uint32Array),this._errorsLength=this._common.allocateTypedArray(1,Int32Array),this._frameNumber=0,this._inputBytes=0,this._outputSamples=0,this._decoder=this._common.wasm.create_decoder(this._input.ptr,this._inputLen.ptr,this._outputBufferPtr.ptr,this._channels.ptr,this._sampleRate.ptr,this._samplesDecoded.ptr,this._errors.ptr,this._errorsLength.ptr,e)}),Object.defineProperty(this,"ready",{enumerable:!0,get:()=>this._ready}),this.reset=()=>(this.free(),this._init()),this.free=()=>{this._common.wasm.destroy_decoder(this._decoder),this._common.free()},this.sendSetupHeader=t=>{this._input.buf.set(t),this._inputLen.buf[0]=t.length,this._common.wasm.send_setup(this._decoder,this._firstPage),this._firstPage=!1},this.initDsp=()=>{this._common.wasm.init_dsp(this._decoder)},this.decodePackets=t=>{let e=[],r=0,n=[];for(let o=0;o<t.length;o++){let i=t[o];this._input.buf.set(i),this._inputLen.buf[0]=i.length,this._common.wasm.decode_packets(this._decoder);let s=this._samplesDecoded.buf[0],a=[],c=new Uint32Array(this._common.wasm.HEAP,this._outputBufferPtr.buf[0],this._channels.buf[0]);for(let l=0;l<this._channels.buf[0];l++){let u=new Float32Array(s);s&&u.set(new Float32Array(this._common.wasm.HEAP,c[l],s)),a.push(u)}e.push(a),r+=s,this._frameNumber++,this._inputBytes+=i.length,this._outputSamples+=s;for(let l=0;l<this._errorsLength.buf;l+=2){let u=this._common.codeToString(this._errors.buf[l]),d=this._common.codeToString(this._errors.buf[l+1]);n.push({message:u+" vorbis_synthesis"+d,frameLength:i.length,frameNumber:this._frameNumber,inputBytes:this._inputBytes,outputSamples:this._outputSamples})}this._errorsLength.buf[0]=0}return this._WASMAudioDecoderCommon.getDecodedAudioMultiChannel(n,e,this._channels.buf[0],r,this._sampleRate.buf[0],16)},this._isWebWorker=It.isWebWorker,this._WASMAudioDecoderCommon=It.WASMAudioDecoderCommon||D,this._EmscriptenWASM=It.EmscriptenWASM||qe,this._module=It.module,this._inputSize=128*1024,this._ready=this._init(),this}var ho=Symbol(),$e=class{constructor(){this._onCodec=e=>{if(e!=="vorbis")throw new Error("@wasm-audio-decoders/ogg-vorbis does not support this codec "+e)},new D,this._init(),this._ready=this[ho](It)}_init(){this._vorbisSetupInProgress=!0,this._totalSamplesDecoded=0,this._codecParser=new js("audio/ogg",{onCodec:this._onCodec,enableFrameCRC32:!1})}async[ho](e){if(this._decoder){let r=this._decoder;await r.ready.then(()=>r.free())}return this._decoder=new e,this._decoder.ready}get ready(){return this._ready}async reset(){return this._init(),this._decoder.reset()}free(){this._decoder.free()}async decodeOggPages(e){let r=[];for(let i=0;i<e.length;i++){let s=e[i];if(this._vorbisSetupInProgress&&(s[po][0]===1&&this._decoder.sendSetupHeader(s[po]),s[fo].length)){let a=s[fo][0][Js];this._decoder.sendSetupHeader(a[Zs]),this._decoder.initDsp(),this._vorbisSetupInProgress=!1}r.push(...s[fo].map(a=>a[po]))}let n=await this._decoder.decodePackets(r);this._totalSamplesDecoded+=n.samplesDecoded;let o=e[e.length-1];if(o&&o[Qs]){let i=this._totalSamplesDecoded-o[ea];if(i>0){for(let s=0;s<n.channelData.length;s++)n.channelData[s]=n.channelData[s].subarray(0,n.samplesDecoded-i);n.samplesDecoded-=i,this._totalSamplesDecoded-=i}}return n}async decode(e){return this.decodeOggPages([...this._codecParser.parseChunk(e)])}async flush(){let e=await this.decodeOggPages([...this._codecParser.flush()]);return await this.reset(),e}async decodeFile(e){let r=await this.decodeOggPages([...this._codecParser.parseAll(e)]);return await this.reset(),r}};var vi=class extends Xt{constructor(e){super(e,"ogg-vorbis-decoder",It,qe)}async sendSetupHeader(e){return this.postToDecoder("sendSetupHeader",e)}async initDsp(){return this.postToDecoder("initDsp")}async decodePackets(e){return this.postToDecoder("decodePackets",e)}},fn=class extends $e{constructor(){super(),this._ready=super[ho](vi)}async free(){await this._decoder.free()}terminate(){this._decoder.terminate()}};On($e,"OggVorbisDecoder");On(fn,"OggVorbisDecoderWebWorker");var _i=class extends Error{constructor(e){super(e),this.name="OggDecodeError"}};async function yo(t,e=new $e){await e.ready;let r=await e.decode(new Uint8Array(t)),n=r.errors;if(n&&n.length>0)throw new _i(n.map(o=>o.message).join("; "));return{sampleRate:r.sampleRate,channels:r.channelData.length,bitDepth:r.bitDepth,channelData:r.channelData}}var pn=class extends Error{constructor(e){super(e),this.name="AudioRegistryError"}},cr=class{constructor(e,r={}){this.vfs=e;this.refCounts=new Map;this.cache=new Qe(r.cacheSize??64)}get size(){return this.cache.size}async load(e){let r=e.toLowerCase(),n=this.cache.get(r);if(n)return this.refCounts.set(r,(this.refCounts.get(r)??0)+1),n;let i=(await this.vfs.readFile(e)).slice().buffer,s=await this.decodeByExtension(e,i);return this.cache.set(r,s),this.refCounts.set(r,1),s}release(e){let r=e.toLowerCase(),n=this.refCounts.get(r)??0;n<=1?(this.cache.delete(r),this.refCounts.delete(r)):this.refCounts.set(r,n-1)}clearAll(){this.cache.clear(),this.refCounts.clear()}async decodeByExtension(e,r){let n=e.toLowerCase();if(n.endsWith(".wav")){let o=Nn(r),i=o.channels,s=Array.from({length:i},()=>new Float32Array(o.samples.length/i));for(let a=0;a<o.samples.length;a+=1)s[a%i][Math.floor(a/i)]=o.samples[a];return{sampleRate:o.sampleRate,channels:i,bitDepth:o.bitsPerSample,channelData:s}}if(n.endsWith(".ogg")||n.endsWith(".oga"))return yo(r);throw new pn(`Unsupported audio format: ${e}`)}};var Gc="quake2ts-pak-indexes",Wc="pak-indexes";function ta(){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 hn(t,e){let r=ta();return r?new Promise((n,o)=>{let i=r.open(t,1);i.onupgradeneeded=()=>{let{result:s}=i;s.objectStoreNames.contains(e)||s.createObjectStore(e,{keyPath:"key"})},i.onerror=()=>o(i.error??new Error("Unknown IndexedDB error")),i.onsuccess=()=>n(i.result)}):Promise.reject(new Error("IndexedDB is not available in this environment"))}function yn(t,e,r,n){return new Promise((o,i)=>{let a=t.transaction(e,r).objectStore(e),c=n(a);c.onsuccess=()=>o(c.result),c.onerror=()=>i(c.error??new Error("IndexedDB transaction error"))})}function Ai(t,e){return`${U(t)}:${e.toString(16)}`}function Xc(t){return t.map(e=>({...e}))}var go=class{constructor(e=Gc,r=Wc){this.dbName=e;this.storeName=r}get isSupported(){return!!ta()}async persist(e){if(!this.isSupported)return;let r=e.validate(),n={...r,key:Ai(e.name,r.checksum),name:e.name,size:e.size,persistedAt:Date.now(),entries:Xc(r.entries)},o=await hn(this.dbName,this.storeName);return await yn(o,this.storeName,"readwrite",i=>i.put(n)),o.close(),n}async find(e,r){if(!this.isSupported)return;let n=await hn(this.dbName,this.storeName),o=r!==void 0?Ai(e,r):void 0,i=await yn(n,this.storeName,"readonly",s=>o?s.get(o):s.getAll());if(n.close(),!!i){if(Array.isArray(i)){let s=U(e),a=i.filter(c=>U(c.name)===s);return a.length===0?void 0:a.sort((c,l)=>l.persistedAt-c.persistedAt)[0]}return i}}async remove(e,r){if(!this.isSupported)return!1;let n=await hn(this.dbName,this.storeName),o=r!==void 0?Ai(e,r):void 0,i=await yn(n,this.storeName,"readwrite",s=>{if(o)return s.delete(o);let a=`${U(e)}:`;return s.delete(IDBKeyRange.bound(a,`${a}\uFFFF`,!1,!0))});return n.close(),typeof i=="number"?i>0:!0}async clear(){if(!this.isSupported)return;let e=await hn(this.dbName,this.storeName);await yn(e,this.storeName,"readwrite",r=>r.clear()),e.close()}async list(){if(!this.isSupported)return[];let e=await hn(this.dbName,this.storeName),r=await yn(e,this.storeName,"readonly",n=>n.getAll());return e.close(),r.sort((n,o)=>o.persistedAt-n.persistedAt)}};var kt=class extends Error{constructor(r,n){super(n??`Missing dependencies: ${r.join(", ")}`);this.missing=r;this.name="AssetDependencyError"}},gn=class{constructor(){this.nodes=new Map}register(e,r=[]){let n=this.nodes.get(e)??{dependencies:new Set,loaded:!1};r.forEach(o=>n.dependencies.add(o)),this.nodes.set(e,n),r.forEach(o=>{this.nodes.has(o)||this.nodes.set(o,{dependencies:new Set,loaded:!1})})}markLoaded(e){let r=this.nodes.get(e)??{dependencies:new Set,loaded:!1},n=this.getMissingDependencies(e,r);if(n.length>0)throw new kt(n,`Asset ${e} is missing dependencies: ${n.join(", ")}`);r.loaded=!0,this.nodes.set(e,r)}markUnloaded(e){let r=this.nodes.get(e);r&&(r.loaded=!1)}isLoaded(e){return this.nodes.get(e)?.loaded??!1}missingDependencies(e){let r=this.nodes.get(e);return r?this.getMissingDependencies(e,r):[]}reset(){this.nodes.clear()}getMissingDependencies(e,r){let n=[];for(let o of r.dependencies)this.nodes.get(o)?.loaded||n.push(o);return n}},xo=class{constructor(e,r={}){this.vfs=e;this.textures=new Wt({capacity:r.textureCacheCapacity??128}),this.audio=new cr(e,{cacheSize:r.audioCacheSize??64}),this.dependencyTracker=r.dependencyTracker??new gn,this.md2=new Ut(e),this.md3=new Gt(e)}isAssetLoaded(e,r){return this.dependencyTracker.isLoaded(this.makeKey(e,r))}registerTexture(e,r){this.textures.set(e,r);let n=this.makeKey("texture",e);this.dependencyTracker.register(n),this.dependencyTracker.markLoaded(n)}async loadSound(e){let r=await this.audio.load(e),n=this.makeKey("sound",e);return this.dependencyTracker.register(n),this.dependencyTracker.markLoaded(n),r}async loadMd2Model(e,r=[]){let n=this.makeKey("model",e),o=r.map(a=>this.makeKey("texture",a));this.dependencyTracker.register(n,o);let i=this.dependencyTracker.missingDependencies(n);if(i.length>0)throw new kt(i,`Asset ${n} is missing dependencies: ${i.join(", ")}`);let s=await this.md2.load(e);return this.dependencyTracker.markLoaded(n),s}async loadMd3Model(e,r=[]){let n=this.makeKey("model",e),o=r.map(a=>this.makeKey("texture",a));this.dependencyTracker.register(n,o);let i=this.dependencyTracker.missingDependencies(n);if(i.length>0)throw new kt(i,`Asset ${n} is missing dependencies: ${i.join(", ")}`);let s=await this.md3.load(e);return this.dependencyTracker.markLoaded(n),s}resetForLevelChange(){this.textures.clear(),this.audio.clearAll(),this.dependencyTracker.reset()}makeKey(e,r){return`${e}:${U(r)}`}};var wi=32,bo=(d=>(d[d.Auto=0]="Auto",d[d.Weapon=1]="Weapon",d[d.Voice=2]="Voice",d[d.Item=3]="Item",d[d.Body=4]="Body",d[d.Aux=5]="Aux",d[d.Footstep=6]="Footstep",d[d.Aux3=7]="Aux3",d[d.NoPhsAdd=8]="NoPhsAdd",d[d.Reliable=16]="Reliable",d[d.ForcePos=32]="ForcePos",d))(bo||{}),ra=-1,So=0,na=1,oa=2,ia=3,lr=80,sa=.003;function Rt(t){return t===3?t*.001:t*5e-4}function vo(t){let e=Rt(t);return e<=0?Number.POSITIVE_INFINITY:80+1/e}var _o=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 Ao(t){let e=t.getContext(),r=e.createGain();r.gain.value=1;let n=e.createDynamicsCompressor(),o=e.createBiquadFilter?.();return o?(o.type="lowpass",o.frequency.value=2e4,o.Q.value=.707,r.connect(o),o.connect(n)):r.connect(n),n.connect(e.destination),{context:e,master:r,compressor:n,filter:o}}var wo=class{constructor(e=new Bt){this.configStrings=e;this.buffers=new Map}registerName(e){return this.configStrings.soundIndex(e)}register(e,r){let n=this.registerName(e);return this.buffers.set(n,r),n}find(e){return this.configStrings.findSoundIndex(e)}get(e){return this.buffers.get(e)}has(e){return this.buffers.has(e)}};var Mo=class{constructor(e){this.vfs=e.vfs,this.registry=e.registry,this.contextController=e.context,this.soundRoot=e.soundRoot??"sound/",this.decodeAudio=e.decodeAudio??((r,n)=>{if(!r.decodeAudioData)throw new Error("decodeAudioData is not available on the provided audio context");return r.decodeAudioData(n)})}async precache(e){let r=[...new Set(e.map(i=>this.normalize(i)))],n={loaded:[],skipped:[],missing:[],errors:{}},o=this.contextController.getContext();for(let i of r)try{let s=this.registry.find(i);if(s!==void 0&&this.registry.has(s)){n.skipped.push(i);continue}if(!this.vfs.stat(i)){n.missing.push(i);continue}let l=(await this.vfs.readFile(i)).slice().buffer,u=await this.decodeAudio(o,l);this.registry.register(i,u),n.loaded.push(i)}catch(s){let a=s instanceof Error?s:new Error(String(s));n.errors[i]=a}return n}normalize(e){let r=U(e.replace(/^\//,""));return r.startsWith(this.soundRoot)?r:U(`${this.soundRoot}${r}`)}};var Kc=7,xn=t=>t&Kc;function Lo(t){return Array.from({length:32},()=>({entnum:0,entchannel:0,endTimeMs:0,isPlayer:!1,active:!1})).map(e=>({...e,isPlayer:e.entnum===t}))}function Co(t,e,r,n){if(r<0)throw new Error("pickChannel: entchannel must be non-negative");let o=xn(r),i=-1,s=Number.POSITIVE_INFINITY;for(let a=0;a<t.length;a+=1){let c=t[a],l=xn(c.entchannel);if(o!==0&&c.entnum===e&&l===o){i=a;break}if(c.active&&c.entnum===n.playerEntity&&e!==n.playerEntity)continue;let u=c.endTimeMs-n.nowMs;(i===-1||u<s)&&(s=u,i=a)}return i===-1?void 0:i}function Eo(t,e,r,n,o){if(o)return{left:r,right:r,distanceComponent:0};let i=Qi(t,e.origin),s=Go(i),a=Zi(i),c=s-80;c<0&&(c=0),c*=Rt(n);let l=Uo(e.right,a),u=e.mono??!1,d=u||n===0?1:.5*(1+l),f=u||n===0?1:.5*(1-l),p=Math.max(0,Math.floor(r*(1-c)*d));return{left:Math.max(0,Math.floor(r*(1-c)*f)),right:p,distanceComponent:c}}var To=class{constructor(e){this.activeSources=new Map;this.contextController=e.context,this.registry=e.registry,this.playerEntity=e.playerEntity,this.channels=Lo(e.playerEntity),this.listener=e.listener??{origin:Ji,right:{x:1,y:0,z:0}},this.sfxVolume=e.sfxVolume??1,this.masterVolume=e.masterVolume??1,this.resolveOcclusion=e.resolveOcclusion,this.graph=Ao(this.contextController),this.graph.master.gain.value=this.masterVolume}setListener(e){this.listener=e}setMasterVolume(e){this.masterVolume=e,this.graph.master.gain.value=e}setSfxVolume(e){this.sfxVolume=e}async ensureRunning(){await this.contextController.resume()}play(e){let r=this.registry.get(e.soundIndex);if(!r)return;let n=this.graph.context,o=n.currentTime*1e3,i=Co(this.channels,e.entity,e.channel,{nowMs:o,playerEntity:this.playerEntity});if(i===void 0)return;let s=this.activeSources.get(i);s&&(s.source.onended=null,s.source.stop(),this.activeSources.delete(i));let a=n.createBufferSource();a.buffer=r,a.loop=e.looping??!1;let c=e.origin??this.listener.origin,l=n.createGain(),u=this.createPanner(n,e.attenuation),d=this.resolveOcclusion?.(this.listener,c,e.attenuation),f=aa(d?.gainScale??1),p=this.resolveOcclusion?this.createOcclusionFilter(n,d?.lowpassHz??2e4):void 0;this.applyOriginToPanner(u,c);let y=e.entity===this.playerEntity,h=Eo(c,this.listener,e.volume,e.attenuation,y),b=(e.volume===0?0:Math.max(h.left,h.right)/Math.max(1,e.volume))*(e.volume/255)*this.masterVolume*this.sfxVolume;l.gain.value=b*f;let T=n.currentTime+(e.timeOffsetMs??0)/1e3,P=(e.looping?Number.POSITIVE_INFINITY:r.duration*1e3)+T*1e3;a.connect(u),p?(u.connect(p),p.connect(l)):u.connect(l),l.connect(this.graph.master),a.start(T),a.onended=()=>{this.channels[i].active=!1,this.activeSources.delete(i)};let ne={channelIndex:i,entnum:e.entity,entchannel:xn(e.channel),endTimeMs:P,source:a,panner:u,gain:l,baseGain:b,origin:c,attenuation:e.attenuation,occlusion:p?{scale:f,lowpassHz:d?.lowpassHz,filter:p}:d?{scale:f,lowpassHz:d.lowpassHz}:void 0};return this.channels[i]={entnum:e.entity,entchannel:xn(e.channel),endTimeMs:P,isPlayer:e.entity===this.playerEntity,active:!0},this.activeSources.set(i,ne),ne}stop(e){let r=this.activeSources.get(e);r&&(r.source.stop(),this.channels[e].active=!1,this.activeSources.delete(e))}stopEntitySounds(e){for(let[r,n]of[...this.activeSources.entries()])n.entnum===e&&(n.source.stop(),this.channels[r].active=!1,this.activeSources.delete(r))}updateEntityPosition(e,r){for(let n of this.activeSources.values())if(n.entnum===e&&(this.applyOriginToPanner(n.panner,r),n.origin=r,this.resolveOcclusion)){let o=this.resolveOcclusion(this.listener,r,n.attenuation);this.applyOcclusion(n,o)}}positionedSound(e,r,n,o){return this.play({entity:0,channel:0,soundIndex:r,volume:n,attenuation:o,origin:e})}ambientSound(e,r,n){return this.play({entity:0,channel:0,soundIndex:r,volume:n,attenuation:0,origin:e,looping:!0})}getChannelState(e){return this.channels[e]}getDiagnostics(){return{activeChannels:this.activeSources.size,masterVolume:this.masterVolume,sfxVolume:this.sfxVolume,channels:[...this.channels],activeSounds:[...this.activeSources.values()].map(e=>({entnum:e.entnum,entchannel:e.entchannel,channelIndex:e.channelIndex,origin:e.origin,gain:e.gain.gain.value,baseGain:e.baseGain,attenuation:e.attenuation,maxDistance:e.panner.maxDistance,distanceModel:e.panner.distanceModel,occlusion:e.occlusion?{scale:e.occlusion.scale,lowpassHz:e.occlusion.lowpassHz}:void 0}))}}setUnderwater(e,r=400){let n=this.graph.filter;n&&(n.type="lowpass",n.Q.value=.707,n.frequency.value=e?r:2e4)}createPanner(e,r){let n=e.createPanner?e.createPanner():Object.assign(e.createGain(),{positionX:{value:this.listener.origin.x},positionY:{value:this.listener.origin.y},positionZ:{value:this.listener.origin.z}});return this.configurePanner(n,r)}configurePanner(e,r){let n=Rt(r);return e.refDistance=80,e.maxDistance=vo(r),e.rolloffFactor=n,e.distanceModel=r===0?"linear":"inverse",e.positionX.value=this.listener.origin.x,e.positionY.value=this.listener.origin.y,e.positionZ.value=this.listener.origin.z,e}applyOriginToPanner(e,r){e.positionX.value=r.x,e.positionY.value=r.y,e.positionZ.value=r.z}createOcclusionFilter(e,r){if(!e.createBiquadFilter)return;let n=e.createBiquadFilter();return n.type="lowpass",n.Q.value=.707,n.frequency.value=Mi(r,10,2e4),n}applyOcclusion(e,r){let n=aa(r?.gainScale??1);if(e.gain.gain.value=e.baseGain*n,e.occlusion?.filter){let o=r?.lowpassHz??2e4;e.occlusion.filter.frequency.value=Mi(o,10,2e4)}e.occlusion?(e.occlusion.scale=n,e.occlusion.lowpassHz=r?.lowpassHz):r&&(e.occlusion={scale:n,lowpassHz:r.lowpassHz})}},Mi=(t,e,r)=>Math.min(r,Math.max(e,t)),aa=t=>Mi(t,0,1);var zo=class{constructor(e){this.createElement=e.createElement,this.resolveSource=e.resolveSource??(async r=>r),this.volume=e.volume??1}async play(e,{loop:r=!0,restart:n=!1}={}){if(this.track===e&&this.element){this.element.loop=r,this.element.volume=this.volume,n&&(this.element.currentTime=0),(this.element.paused||n)&&await this.element.play();return}let o=await this.resolveSource(e),i=this.createElement();i.src=o,i.loop=r,i.volume=this.volume,i.currentTime=0,i.load(),await i.play(),this.element=i,this.track=e}pause(){!this.element||this.element.paused||this.element.pause()}async resume(){!this.element||!this.element.paused||await this.element.play()}stop(){this.element&&(this.element.pause(),this.element.currentTime=0,this.element=void 0,this.track=void 0)}setVolume(e){this.volume=e,this.element&&(this.element.volume=e)}getState(){let e=!!(this.element&&!this.element.paused&&!this.element.ended),r=!!this.element?.paused;return{track:this.track,paused:r,playing:e,volume:this.volume}}};var Po=class{constructor(e){this.registry=e.registry,this.system=e.system,this.music=e.music}soundindex(e){return this.registry.registerName(e)}sound(e,r,n,o,i,s){this.system.play({entity:e,channel:r,soundIndex:n,volume:o,attenuation:i,timeOffsetMs:s})}positioned_sound(e,r,n,o){this.system.positionedSound(e,r,n,o)}loop_sound(e,r,n,o,i){this.system.play({entity:e,channel:r,soundIndex:n,volume:o,attenuation:i,looping:!0})}stop_entity_sounds(e){this.system.stopEntitySounds(e)}set_listener(e){this.system.setListener(e)}play_music(e,r=!0){return this.music?this.music.play(e,{loop:r}):Promise.resolve()}pause_music(){this.music?.pause()}resume_music(){return this.music?.resume()??Promise.resolve()}stop_music(){this.music?.stop()}set_music_volume(e){this.music?.setVolume(e)}play_ambient(e,r,n){this.system.ambientSound(e,r,n)}play_channel(e){this.system.play({...e})}};function qc(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 $c(t,e,r,n){for(let o of e){let i=t.getExtension(o);if(!i)throw new Error(`Missing required WebGL extension: ${o}`);n.set(o,i)}for(let o of r){let i=t.getExtension(o);i&&n.set(o,i)}}function ca(t,e={}){let{contextAttributes:r,requiredExtensions:n=[],optionalExtensions:o=[]}=e,i=t.getContext("webgl2",r??{antialias:!0});if(!i)throw new Error("WebGL2 not supported or failed to initialize");qc(i);let s=new Map;$c(i,n,o,s);let a=!1,c=new Set,l=new Set,u=f=>{a=!0,f.preventDefault();for(let p of c)p()},d=()=>{a=!1;for(let f of l)f()};return t.addEventListener("webglcontextlost",u),t.addEventListener("webglcontextrestored",d),{gl:i,extensions:s,isLost:()=>a,onLost(f){return c.add(f),()=>c.delete(f)},onRestored(f){return l.add(f),()=>l.delete(f)},dispose(){t.removeEventListener("webglcontextlost",u),t.removeEventListener("webglcontextrestored",d),c.clear(),l.clear(),s.clear()}}}function la(t,e,r){let n=t.createShader(e);if(!n)throw new Error("Failed to allocate shader");if(t.shaderSource(n,r),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS)){let i=t.getShaderInfoLog(n)??"Unknown shader compile failure";throw t.deleteShader(n),new Error(i)}return n}function Yc(t,e,r,n){let o=t.createProgram();if(!o)throw new Error("Failed to allocate shader program");if(t.attachShader(o,e),t.attachShader(o,r),n)for(let[s,a]of Object.entries(n))t.bindAttribLocation(o,a,s);if(t.linkProgram(o),!t.getProgramParameter(o,t.LINK_STATUS)){let s=t.getProgramInfoLog(o)??"Unknown shader link failure";throw t.deleteProgram(o),new Error(s)}return o}var Me=class t{constructor(e,r){this.uniformLocations=new Map;this.attributeLocations=new Map;this.gl=e,this.program=r}static create(e,r,n){let o=la(e,e.VERTEX_SHADER,r.vertex),i=la(e,e.FRAGMENT_SHADER,r.fragment);try{let s=Yc(e,o,i,n);return new t(e,s)}finally{e.deleteShader(o),e.deleteShader(i)}}use(){this.gl.useProgram(this.program)}getUniformLocation(e){if(!this.uniformLocations.has(e)){let r=this.gl.getUniformLocation(this.program,e);this.uniformLocations.set(e,r)}return this.uniformLocations.get(e)??null}getAttributeLocation(e){if(!this.attributeLocations.has(e)){let r=this.gl.getAttribLocation(this.program,e);this.attributeLocations.set(e,r)}return this.attributeLocations.get(e)??-1}dispose(){this.gl.deleteProgram(this.program),this.uniformLocations.clear(),this.attributeLocations.clear()}};function ua(t,e,r){return Me.create(t,e,r)}var Le=class{constructor(e,r=e.STATIC_DRAW,n){this.gl=e,this.target=n??e.ARRAY_BUFFER;let o=e.createBuffer();if(!o)throw new Error("Failed to allocate buffer");this.buffer=o,e.bindBuffer(this.target,this.buffer),e.bufferData(this.target,0,r)}bind(){this.gl.bindBuffer(this.target,this.buffer)}upload(e,r=this.gl.STATIC_DRAW){this.bind(),this.gl.bufferData(this.target,e,r)}update(e,r=0){this.bind(),this.gl.bufferSubData(this.target,r,e)}dispose(){this.gl.deleteBuffer(this.buffer)}},yt=class extends Le{constructor(e,r=e.STATIC_DRAW){super(e,r,e.ELEMENT_ARRAY_BUFFER)}},Re=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)}},ur=class{constructor(e,r=e.TEXTURE_2D){this.gl=e,this.target=r;let n=e.createTexture();if(!n)throw new Error("Failed to allocate texture");this.texture=n}bind(e=0){this.gl.activeTexture(this.gl.TEXTURE0+e),this.gl.bindTexture(this.target,this.texture)}setParameters(e){this.bind(),e.wrapS!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_S,e.wrapS),e.wrapT!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_T,e.wrapT),e.minFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MIN_FILTER,e.minFilter),e.magFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MAG_FILTER,e.magFilter)}uploadImage(e,r,n,o,i,s,a,c){this.bind(),this.gl.texImage2D(this.target,e,r,n,o,i,s,a,c)}dispose(){this.gl.deleteTexture(this.texture)}},dr=class{constructor(e){this.gl=e,this.target=e.TEXTURE_CUBE_MAP;let r=e.createTexture();if(!r)throw new Error("Failed to allocate cubemap texture");this.texture=r}bind(e=0){this.gl.activeTexture(this.gl.TEXTURE0+e),this.gl.bindTexture(this.target,this.texture)}setParameters(e){this.bind(),e.wrapS!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_S,e.wrapS),e.wrapT!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_T,e.wrapT),e.minFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MIN_FILTER,e.minFilter),e.magFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MAG_FILTER,e.magFilter)}uploadFace(e,r,n,o,i,s,a,c,l){this.bind(),this.gl.texImage2D(e,r,n,o,i,s,a,c,l)}dispose(){this.gl.deleteTexture(this.texture)}},Fo=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 Ci=4,Li=7*Ci,Ei=[{index:0,size:3,type:5126,stride:Li,offset:0},{index:1,size:2,type:5126,stride:Li,offset:3*Ci},{index:2,size:2,type:5126,stride:Li,offset:5*Ci}];function jc(t,e){return{width:t,height:t,padding:e,data:new Uint8Array(t*t*4),cursorX:0,cursorY:0,rowHeight:0}}function Jc(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 Qc(t,e,r){let n=Jc(r),o=t.width*4,i=e.x+t.padding,s=e.y+t.padding,a=0;for(let c=0;c<r.height;c++){let l=(s+c)*o+i*4;for(let u=0;u<r.width;u++){let d=l+u*4;t.data[d]=r.samples[a],t.data[d+1]=r.samples[a+1],t.data[d+2]=r.samples[a+2],t.data[d+3]=n===4?r.samples[a+3]:255,a+=n}}}function Zc(t,e,r){let n=e.width+r.lightmapPadding*2,o=e.height+r.lightmapPadding*2;if(n>r.atlasSize||o>r.atlasSize)throw new Error("Lightmap too large for atlas");for(let a of t){if(a.cursorX+n>a.width&&(a.cursorX=0,a.cursorY+=a.rowHeight+r.lightmapPadding,a.rowHeight=0),a.cursorY+o>a.height)continue;let c={atlasIndex:t.indexOf(a),x:a.cursorX,y:a.cursorY,width:e.width,height:e.height};return a.cursorX+=n+r.lightmapPadding,a.rowHeight=Math.max(a.rowHeight,o),{placement:c,atlas:a}}let i=jc(r.atlasSize,r.lightmapPadding);t.push(i);let s={atlasIndex:t.length-1,x:0,y:0,width:e.width,height:e.height};return i.cursorX=n+r.lightmapPadding,i.rowHeight=o,{placement:s,atlas:i}}function Io(t){return t instanceof Float32Array?t:new Float32Array(t)}function el(t,e){if(!t){let n=new Uint16Array(e);for(let o=0;o<e;o++)n[o]=o;return n}return t instanceof Uint16Array?t:new Uint16Array(t)}function tl(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 rl(t,e){let r=Io(t.vertices),n=Io(t.textureCoords),o=e?tl(Io(t.lightmapCoords??t.textureCoords),e):Io(t.lightmapCoords??new Float32Array(n.length)),i=r.length/3;if(n.length/2!==i)throw new Error("Texture coordinates count mismatch");if(o.length/2!==i)throw new Error("Lightmap coordinates count mismatch");let s=new Float32Array(i*7);for(let a=0;a<i;a++){let c=a*3,l=a*2,u=a*7;s[u]=r[c],s[u+1]=r[c+1],s[u+2]=r[c+2],s[u+3]=n[l],s[u+4]=n[l+1],s[u+5]=o[l],s[u+6]=o[l+1]}return s}function da(t,e,r={}){let n={atlasSize:r.atlasSize??1024,lightmapPadding:r.lightmapPadding??1},o=[],i=new Map;e.forEach((c,l)=>{if(!c.lightmap)return;let{placement:u,atlas:d}=Zc(o,c.lightmap,n);Qc(d,u,c.lightmap),i.set(l,{atlasIndex:u.atlasIndex,offset:[(u.x+n.lightmapPadding)/n.atlasSize,(u.y+n.lightmapPadding)/n.atlasSize],scale:[u.width/n.atlasSize,u.height/n.atlasSize]})});let s=o.map(c=>{let l=new ur(t);return l.setParameters({wrapS:t.CLAMP_TO_EDGE,wrapT:t.CLAMP_TO_EDGE,minFilter:t.LINEAR,magFilter:t.LINEAR}),l.uploadImage(0,t.RGBA,c.width,c.height,0,t.RGBA,t.UNSIGNED_BYTE,c.data),{texture:l,width:c.width,height:c.height,pixels:c.data}});return{surfaces:e.map((c,l)=>{let u=i.get(l),d=rl(c,u),f=el(c.indices,d.length/7),p=new Le(t,t.STATIC_DRAW,t.ARRAY_BUFFER);p.upload(d);let y=new yt(t,t.STATIC_DRAW);y.upload(f);let h=new Re(t);return h.configureAttributes(Ei,p),{vao:h,vertexBuffer:p,indexBuffer:y,indexCount:f.length,texture:c.texture,surfaceFlags:c.surfaceFlags??yr,lightmap:u,vertexData:d,indexData:f}}),lightmaps:s}}function mr(t){let{normal:e,distance:r}=t,n=Math.sqrt(e.x*e.x+e.y*e.y+e.z*e.z);if(n===0)return t;let o=1/n;return{normal:{x:e.x*o,y:e.y*o,z:e.z*o},distance:r*o}}function ma(t){if(t.length!==16)throw new Error("View-projection matrix must contain 16 elements");let e=t[0],r=t[4],n=t[8],o=t[12],i=t[1],s=t[5],a=t[9],c=t[13],l=t[2],u=t[6],d=t[10],f=t[14],p=t[3],y=t[7],h=t[11],g=t[15];return[mr({normal:{x:p+e,y:y+r,z:h+n},distance:g+o}),mr({normal:{x:p-e,y:y-r,z:h-n},distance:g-o}),mr({normal:{x:p+i,y:y+s,z:h+a},distance:g+c}),mr({normal:{x:p-i,y:y-s,z:h-a},distance:g-c}),mr({normal:{x:p+l,y:y+u,z:h+d},distance:g+f}),mr({normal:{x:p-l,y:y-u,z:h-d},distance:g-f})]}function nl(t,e){return t.normal.x*e.x+t.normal.y*e.y+t.normal.z*e.z+t.distance}function bn(t,e,r){for(let n of r){let o=n.normal.x>=0?e.x:t.x,i=n.normal.y>=0?e.y:t.y,s=n.normal.z>=0?e.z:t.z;if(nl(n,{x:o,y:i,z:s})<0)return!1}return!0}function fa(t){return t<0}function pa(t){return-t-1}function ha(t,e){return t.normal[0]*e.x+t.normal[1]*e.y+t.normal[2]*e.z-t.dist}function ol(t,e,r){if(!t||e<0||r<0)return!0;let n=Math.ceil(t.numClusters/8),o=t.clusters[e].pvs,i=Math.floor(r/8),s=1<<r%8;return i<0||i>=n?!1:(o[i]&s)!==0}function il(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 bn(r,n,e)}function zi(t,e){let r=0;for(;r>=0;){let n=t.nodes[r],o=t.planes[n.planeIndex],s=ha(o,e)>=0?0:1,a=n.children[s];if(fa(a))return pa(a);r=a}return-1}function sl(t,e){let r=t.leafs[e],n=[];for(let o=0;o<r.numLeafFaces;o+=1)n.push(t.leafLists.leafFaces[e][o]);return n}function Ti(t,e,r,n,o,i,s){if(fa(e)){let f=pa(e),p=t.leafs[f];if(!ol(t.visibility,o,p.cluster)||!il(p,n))return;let y={x:(p.mins[0]+p.maxs[0])*.5,y:(p.mins[1]+p.maxs[1])*.5,z:(p.mins[2]+p.maxs[2])*.5},h=y.x-r.x,g=y.y-r.y,b=y.z-r.z,T=-(h*h+g*g+b*b);for(let P of sl(t,f))s.has(P)||(s.add(P),i.push({faceIndex:P,leafIndex:f,sortKey:T}));return}let a=t.nodes[e],c=t.planes[a.planeIndex],l=ha(c,r),u=l>=0?a.children[0]:a.children[1],d=l>=0?a.children[1]:a.children[0];bn({x:a.mins[0],y:a.mins[1],z:a.mins[2]},{x:a.maxs[0],y:a.maxs[1],z:a.maxs[2]},n)&&(Ti(t,u,r,n,o,i,s),Ti(t,d,r,n,o,i,s))}function ya(t,e,r){let n=zi(t,e),o=n>=0?t.leafs[n].cluster:-1,i=[];return Ti(t,0,e,r,o,i,new Set),i}var Pi=`#version 300 es
142
+ precision highp float;
143
+
144
+ layout(location = 0) in vec3 a_position;
145
+ layout(location = 1) in vec2 a_texCoord;
146
+ layout(location = 2) in vec2 a_lightmapCoord;
147
+
148
+ uniform mat4 u_modelViewProjection;
149
+ uniform vec2 u_texScroll;
150
+ uniform vec2 u_lightmapScroll;
151
+
152
+ out vec2 v_texCoord;
153
+ out vec2 v_lightmapCoord;
154
+
155
+ vec2 applyScroll(vec2 uv, vec2 scroll) {
156
+ return uv + scroll;
157
+ }
158
+
159
+ void main() {
160
+ v_texCoord = applyScroll(a_texCoord, u_texScroll);
161
+ v_lightmapCoord = applyScroll(a_lightmapCoord, u_lightmapScroll);
162
+ gl_Position = u_modelViewProjection * vec4(a_position, 1.0);
163
+ }`,Fi=`#version 300 es
164
+ precision highp float;
165
+
166
+ in vec2 v_texCoord;
167
+ in vec2 v_lightmapCoord;
168
+
169
+ uniform sampler2D u_diffuseMap;
170
+ uniform sampler2D u_lightmapAtlas;
171
+ uniform vec4 u_lightStyleFactors;
172
+ uniform float u_alpha;
173
+ uniform bool u_applyLightmap;
174
+ uniform bool u_warp;
175
+ uniform float u_time;
176
+
177
+ out vec4 o_color;
178
+
179
+ vec2 warpCoords(vec2 uv) {
180
+ // Quake II warp applies a subtle sinusoidal offset; we mirror the rerelease scale.
181
+ if (!u_warp) {
182
+ return uv;
183
+ }
184
+ float s = uv.x + sin(uv.y * 0.125 + u_time) * 0.125;
185
+ float t = uv.y + sin(uv.x * 0.125 + u_time) * 0.125;
186
+ return vec2(s, t);
187
+ }
188
+
189
+ void main() {
190
+ vec2 warpedTex = warpCoords(v_texCoord);
191
+ vec4 base = texture(u_diffuseMap, warpedTex);
192
+
193
+ if (u_applyLightmap) {
194
+ vec3 light = texture(u_lightmapAtlas, warpCoords(v_lightmapCoord)).rgb;
195
+ float styleScale = dot(u_lightStyleFactors, vec4(1.0));
196
+ base.rgb *= light * styleScale;
197
+ }
198
+
199
+ o_color = vec4(base.rgb, base.a * u_alpha);
200
+ }`,ga=[0,255,255,255];function Ii(t=ga,e=[]){let r=new Float32Array(4);for(let n=0;n<4;n+=1){let o=t[n]??255;if(o===255){r[n]=0;continue}let i=e[o];r[n]=i!==void 0?i:1}return r}function al(t){return[-(t*.25%1),0]}function ki(t=yr,e=0){let r=(t&is)!==0,n=(t&rs)!==0,o=(t&ts)!==0,i=(t&ns)!==0,s=(t&os)!==0,a=i?.33:s?.66:1,c=i||s,l=!c&&!o,u=r?al(e):[0,0];return{alpha:a,blend:c,depthWrite:l,warp:n,flowOffset:u,sky:o}}var ko=class{constructor(e){this.gl=e,this.program=Me.create(e,{vertex:Pi,fragment:Fi},{a_position:0,a_texCoord:1,a_lightmapCoord:2}),this.uniformMvp=this.program.getUniformLocation("u_modelViewProjection"),this.uniformTexScroll=this.program.getUniformLocation("u_texScroll"),this.uniformLmScroll=this.program.getUniformLocation("u_lightmapScroll"),this.uniformLightStyles=this.program.getUniformLocation("u_lightStyleFactors"),this.uniformAlpha=this.program.getUniformLocation("u_alpha"),this.uniformApplyLightmap=this.program.getUniformLocation("u_applyLightmap"),this.uniformWarp=this.program.getUniformLocation("u_warp"),this.uniformDiffuse=this.program.getUniformLocation("u_diffuseMap"),this.uniformLightmap=this.program.getUniformLocation("u_lightmapAtlas"),this.uniformTime=this.program.getUniformLocation("u_time")}bind(e){let{modelViewProjection:r,styleIndices:n=ga,styleValues:o=[],diffuseSampler:i=0,lightmapSampler:s=1,surfaceFlags:a=yr,timeSeconds:c=0}=e,l=ki(a,c),u=Ii(n,o);return this.program.use(),this.gl.uniformMatrix4fv(this.uniformMvp,!1,r),this.gl.uniform2f(this.uniformTexScroll,l.flowOffset[0],l.flowOffset[1]),this.gl.uniform2f(this.uniformLmScroll,l.flowOffset[0],l.flowOffset[1]),this.gl.uniform4fv(this.uniformLightStyles,u),this.gl.uniform1f(this.uniformAlpha,l.alpha),this.gl.uniform1i(this.uniformApplyLightmap,l.sky?0:1),this.gl.uniform1i(this.uniformWarp,l.warp?1:0),this.gl.uniform1f(this.uniformTime,c),this.gl.uniform1i(this.uniformDiffuse,i),this.gl.uniform1i(this.uniformLightmap,s),l}dispose(){this.program.dispose()}};function xa(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 ba=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]),Ri=`#version 300 es
201
+ precision highp float;
202
+
203
+ layout(location = 0) in vec3 a_position;
204
+
205
+ uniform mat4 u_viewProjectionNoTranslation;
206
+ uniform vec2 u_scroll;
207
+
208
+ out vec3 v_direction;
209
+
210
+ void main() {
211
+ vec3 dir = normalize(a_position);
212
+ dir.xy += u_scroll;
213
+ v_direction = dir;
214
+ gl_Position = u_viewProjectionNoTranslation * vec4(a_position, 1.0);
215
+ }`,Hi=`#version 300 es
216
+ precision highp float;
217
+
218
+ in vec3 v_direction;
219
+ uniform samplerCube u_skybox;
220
+
221
+ out vec4 o_color;
222
+
223
+ void main() {
224
+ o_color = texture(u_skybox, v_direction);
225
+ }`,Ro=class{constructor(e){this.gl=e,this.program=Me.create(e,{vertex:Ri,fragment:Hi},{a_position:0}),this.vao=new Re(e),this.vbo=new Le(e,e.STATIC_DRAW),this.vbo.upload(ba,e.STATIC_DRAW);let r=[{index:0,size:3,type:e.FLOAT,stride:12,offset:0}];this.vao.configureAttributes(r,this.vbo),this.uniformViewProj=this.program.getUniformLocation("u_viewProjectionNoTranslation"),this.uniformScroll=this.program.getUniformLocation("u_scroll"),this.uniformSampler=this.program.getUniformLocation("u_skybox"),this.cubemap=new dr(e),this.cubemap.setParameters({minFilter:e.LINEAR,magFilter:e.LINEAR,wrapS:e.CLAMP_TO_EDGE,wrapT:e.CLAMP_TO_EDGE})}bind(e){let{viewProjection:r,scroll:n,textureUnit:o=0}=e;this.program.use(),this.gl.depthMask(!1),this.gl.uniformMatrix4fv(this.uniformViewProj,!1,r),this.gl.uniform2f(this.uniformScroll,n[0],n[1]),this.gl.uniform1i(this.uniformSampler,o),this.cubemap.bind(o),this.vao.bind()}draw(){this.gl.drawArrays(this.gl.TRIANGLES,0,ba.length/3)}dispose(){this.vbo.dispose(),this.vao.dispose(),this.cubemap.dispose(),this.program.dispose()}};function Sa(t){let e=t.slice();return e[12]=0,e[13]=0,e[14]=0,e}function va(t,e=[.01,.02]){let[r,n]=e;return[r*t,n*t]}var Ni=`#version 300 es
226
+ precision highp float;
227
+
228
+ layout(location = 0) in vec3 a_position;
229
+ layout(location = 1) in vec3 a_normal;
230
+ layout(location = 2) in vec2 a_texCoord;
231
+
232
+ uniform mat4 u_modelViewProjection;
233
+ uniform vec3 u_lightDir;
234
+
235
+ out vec2 v_texCoord;
236
+ out float v_light;
237
+
238
+ void main() {
239
+ vec3 normal = normalize(a_normal);
240
+ v_light = max(dot(normal, normalize(u_lightDir)), 0.0);
241
+ v_texCoord = a_texCoord;
242
+ gl_Position = u_modelViewProjection * vec4(a_position, 1.0);
243
+ }`,Oi=`#version 300 es
244
+ precision highp float;
245
+
246
+ in vec2 v_texCoord;
247
+ in float v_light;
248
+
249
+ uniform sampler2D u_diffuseMap;
250
+ uniform vec4 u_tint;
251
+
252
+ out vec4 o_color;
253
+
254
+ void main() {
255
+ vec4 albedo = texture(u_diffuseMap, v_texCoord) * u_tint;
256
+ o_color = vec4(albedo.rgb * v_light, albedo.a);
257
+ }`;function cl(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 Di(t,e,r){return t+(e-t)*r}function _a(t,e,r){return{x:Di(t.x,e.x,r),y:Di(t.y,e.y,r),z:Di(t.z,e.z,r)}}function ll(t,e,r){return[t/r.skinWidth,1-e/r.skinHeight]}function Bi(t){if(t.glCommands.length===0){let n=[],o=[];return t.triangles.forEach(i=>{let s=n.length;for(let a=0;a<3;a+=1){let c=i.vertexIndices[a],l=i.texCoordIndices[a],u=t.texCoords[l];n.push({vertexIndex:c,texCoord:ll(u.s,u.t,t.header)})}o.push(s,s+1,s+2)}),{vertices:n,indices:new Uint16Array(o)}}let e=[],r=[];for(let n of t.glCommands){let o=e.length;if(e.push(...n.vertices.map(i=>({vertexIndex:i.vertexIndex,texCoord:[i.s,1-i.t]}))),n.mode==="strip")for(let i=0;i<n.vertices.length-2;i+=1){let s=i%2===0,a=o+i+(s?0:1),c=o+i+(s?1:0),l=o+i+2;r.push(a,c,l)}else for(let i=1;i<n.vertices.length-1;i+=1)r.push(o,o+i,o+i+1)}return{vertices:e,indices:new Uint16Array(r)}}function Vi(t,e,r){let{currentFrame:n,nextFrame:o,lerp:i}=r,s=t.frames[n],a=t.frames[o];if(!s||!a)throw new Error("Requested MD2 frames are out of range");let c=new Float32Array(e.vertices.length*8);return e.vertices.forEach((l,u)=>{let d=s.vertices[l.vertexIndex],f=a.vertices[l.vertexIndex];if(!d||!f)throw new Error("MD2 vertex index out of range for frame");let p=_a(d.position,f.position,i),y=cl(_a(d.normal,f.normal,i)),h=u*8;c[h]=p.x,c[h+1]=p.y,c[h+2]=p.z,c[h+3]=y.x,c[h+4]=y.y,c[h+5]=y.z,c[h+6]=l.texCoord[0],c[h+7]=l.texCoord[1]}),c}var Ho=class{constructor(e,r,n){this.gl=e,this.geometry=Bi(r),this.vertexBuffer=new Le(e,e.STATIC_DRAW),this.indexBuffer=new yt(e,e.STATIC_DRAW),this.vertexArray=new Re(e),this.indexCount=this.geometry.indices.length,this.vertexArray.configureAttributes([{index:0,size:3,type:e.FLOAT,stride:32,offset:0},{index:1,size:3,type:e.FLOAT,stride:32,offset:12},{index:2,size:2,type:e.FLOAT,stride:32,offset:24}],this.vertexBuffer),this.vertexArray.bind(),this.indexBuffer.bind(),this.indexBuffer.upload(this.geometry.indices,e.STATIC_DRAW),this.update(r,n)}update(e,r){let n=Vi(e,this.geometry,r);this.vertexBuffer.upload(n,this.gl.STATIC_DRAW)}bind(){this.vertexArray.bind(),this.indexBuffer.bind()}dispose(){this.vertexBuffer.dispose(),this.indexBuffer.dispose(),this.vertexArray.dispose()}},Do=class{constructor(e){this.gl=e,this.program=Me.create(e,{vertex:Ni,fragment:Oi},{a_position:0,a_normal:1,a_texCoord:2}),this.uniformMvp=this.program.getUniformLocation("u_modelViewProjection"),this.uniformLightDir=this.program.getUniformLocation("u_lightDir"),this.uniformTint=this.program.getUniformLocation("u_tint"),this.uniformDiffuse=this.program.getUniformLocation("u_diffuseMap")}bind(e){let{modelViewProjection:r,lightDirection:n=[0,0,1],tint:o=[1,1,1,1],diffuseSampler:i=0}=e,s=new Float32Array(n),a=new Float32Array(o);this.program.use(),this.gl.uniformMatrix4fv(this.uniformMvp,!1,r),this.gl.uniform3fv(this.uniformLightDir,s),this.gl.uniform4fv(this.uniformTint,a),this.gl.uniform1i(this.uniformDiffuse,i)}draw(e){e.bind(),this.gl.drawElements(this.gl.TRIANGLES,e.indexCount,this.gl.UNSIGNED_SHORT,0)}dispose(){this.program.dispose()}};function ul(t){return{init(){t.trace({x:0,y:0,z:0},{x:0,y:0,z:0})},shutdown(){},createMainLoop(e,r){return new gt(e,r)}}}return Ra(dl);})();
2
258
  //# sourceMappingURL=index.global.js.map