From a483318f94cf418fbde66ded141e7eb4275bb6d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pasternak?= Date: Sun, 26 Jul 2026 19:12:16 +0200 Subject: [PATCH] Make the Timex build playable in the browser The page said the hi-colour Timex build was not playable here because JSSpeccy has no Timex video modes. It does now: our fork adds the TC2048 and TC2068, so the dedicated build can run on the page it was written for instead of only being a download. Adds a machine switch - Spectrum 128K, Timex TC2048, Timex TC2068 - with the 128K build as the default, and builds both TAPs in the deploy. Stops vendoring the emulator. The committed copy under site/jsspeccy was a stock JSSpeccy build with no Timex support, so it had to be replaced either way; rather than commit another 440K of build output, the deploy now downloads a tagged release of dtz-labs/jsspeccy3 and unpacks it. Bump JSSPECCY_RELEASE in the workflow to move to a newer emulator. The deploy asserts the Timex ROMs, tape loaders and both TAPs are present before publishing, so an incomplete site fails the build rather than shipping. --- .github/workflows/pages.yml | 38 +++++++++- site/index.html | 67 ++++++++++++++---- site/jsspeccy/jsspeccy-core.wasm | Bin 139142 -> 0 bytes site/jsspeccy/jsspeccy-worker.js | 1 - site/jsspeccy/jsspeccy.js | 2 - site/jsspeccy/jsspeccy.js.LICENSE.txt | 11 --- site/jsspeccy/roms/128-0.rom | Bin 16384 -> 0 bytes site/jsspeccy/roms/128-1.rom | Bin 16384 -> 0 bytes site/jsspeccy/roms/48.rom | Bin 16384 -> 0 bytes site/jsspeccy/roms/pentagon-0.rom | Bin 16384 -> 0 bytes site/jsspeccy/roms/trdos.rom | Bin 16384 -> 0 bytes site/jsspeccy/tapeloaders/tape_128.szx | Bin 1452 -> 0 bytes site/jsspeccy/tapeloaders/tape_128_usr0.szx | Bin 1309 -> 0 bytes site/jsspeccy/tapeloaders/tape_48.szx | Bin 696 -> 0 bytes site/jsspeccy/tapeloaders/tape_pentagon.szx | Bin 1467 -> 0 bytes .../tapeloaders/tape_pentagon_usr0.szx | Bin 1317 -> 0 bytes 16 files changed, 90 insertions(+), 29 deletions(-) delete mode 100644 site/jsspeccy/jsspeccy-core.wasm delete mode 100644 site/jsspeccy/jsspeccy-worker.js delete mode 100644 site/jsspeccy/jsspeccy.js delete mode 100644 site/jsspeccy/jsspeccy.js.LICENSE.txt delete mode 100755 site/jsspeccy/roms/128-0.rom delete mode 100755 site/jsspeccy/roms/128-1.rom delete mode 100755 site/jsspeccy/roms/48.rom delete mode 100755 site/jsspeccy/roms/pentagon-0.rom delete mode 100755 site/jsspeccy/roms/trdos.rom delete mode 100755 site/jsspeccy/tapeloaders/tape_128.szx delete mode 100755 site/jsspeccy/tapeloaders/tape_128_usr0.szx delete mode 100755 site/jsspeccy/tapeloaders/tape_48.szx delete mode 100755 site/jsspeccy/tapeloaders/tape_pentagon.szx delete mode 100755 site/jsspeccy/tapeloaders/tape_pentagon_usr0.szx diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml index 7efad8f..015ebff 100644 --- a/.github/workflows/pages.yml +++ b/.github/workflows/pages.yml @@ -15,6 +15,10 @@ concurrency: group: ${{ github.workflow }} cancel-in-progress: true +env: + # bump to move to a newer emulator build + JSSPECCY_RELEASE: v3.2.0-timex.1 + jobs: deploy: name: deploy browser player @@ -25,15 +29,45 @@ jobs: steps: - uses: actions/checkout@v5 - - name: Build the standard TAP - run: make standard + - name: Build both TAPs + run: make standard timex + + # The emulator is no longer vendored in this repository. JSSpeccy 3 has + # no Timex machines, so the hi-colour build had nowhere to run in a + # browser; this pulls a tagged build of the fork that adds them. + - name: Fetch the emulator build + env: + GH_TOKEN: ${{ github.token }} + run: | + set -eu + mkdir -p _emulator + gh release download "$JSSPECCY_RELEASE" \ + --repo dtz-labs/jsspeccy3 \ + --pattern jsspeccy-dist.zip \ + --output _emulator/jsspeccy-dist.zip + unzip -q _emulator/jsspeccy-dist.zip -d _emulator/dist - name: Assemble the site run: | set -eu mkdir -p _site cp -R site/. _site/ + cp -R _emulator/dist/jsspeccy _site/jsspeccy cp build/attribute-raid.tap _site/attribute-raid.tap + cp build/attribute-raid-timex.tap _site/attribute-raid-timex.tap + + - name: Check the pieces the page needs are all there + run: | + set -eu + test -f _site/index.html + test -f _site/attribute-raid.tap + test -f _site/attribute-raid-timex.tap + test -f _site/jsspeccy/jsspeccy.js + test -f _site/jsspeccy/jsspeccy-core.wasm + test -f _site/jsspeccy/roms/tc2048.rom + test -f _site/jsspeccy/roms/2068-home.rom + test -f _site/jsspeccy/tapeloaders/tape_2048.szx + test -f _site/jsspeccy/tapeloaders/tape_2068.szx - name: Upload Pages artifact uses: actions/upload-pages-artifact@v4 diff --git a/site/index.html b/site/index.html index 1cd2202..ad31b1e 100644 --- a/site/index.html +++ b/site/index.html @@ -22,6 +22,27 @@ justify-content: center; } .keys { color: #55ff55; } + .switch { + display: flex; + gap: 0.6rem; + justify-content: center; + flex-wrap: wrap; + margin: 1.1rem auto 0; + } + .switch a { + display: inline-block; + padding: 0.45rem 1rem; + border: 2px solid #55ffff; + color: #55ffff; + text-decoration: none; + letter-spacing: 0.05em; + } + .switch a[aria-current="true"] { + background: #55ffff; + color: #101010; + font-weight: bold; + } + .switch a:hover { background: #55ffff; color: #101010; } .sound-hint { color: #ffff55; } .sponsor { display: inline-block; @@ -43,7 +64,7 @@

ATTRIBUTE RAID

A River Raid-style game for the ZX Spectrum. This page always runs the latest TAP built from main -on an emulated Spectrum 128K, so the AY sound effects ported from the +on an emulated Spectrum 128K or Timex, so the AY sound effects ported from the Atari 2600 original are audible. Press the ▶ button on the display to start — the game boots with AY sound (browsers only allow audio after that click).

@@ -51,23 +72,43 @@

ATTRIBUTE RAID

SPACE — fire   R — new game

+
+ Spectrum 128K + Timex TC2048 + Timex TC2068 +
-

The dedicated Timex TC2048/TC2068/TS2068 hi-colour build is not playable -here (JSSpeccy has no Timex video modes) — grab it from the +

The Timex builds are the dedicated hi-colour version, playable here now — +the emulator below is our fork of +JSSpeccy 3, which adds the TC2048 and TC2068. Both TAPs are also in the releases.

+JSSpeccy 3 (GPL-3), in the +dtz-labs fork with Timex support.

diff --git a/site/jsspeccy/jsspeccy-core.wasm b/site/jsspeccy/jsspeccy-core.wasm deleted file mode 100644 index 04e5b3636ed128dc9ac78794d5ce44b76c253aef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 139142 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 diff --git a/site/jsspeccy/jsspeccy-worker.js b/site/jsspeccy/jsspeccy-worker.js deleted file mode 100644 index c02d8cd..0000000 --- a/site/jsspeccy/jsspeccy-worker.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";class e{constructor(e,t){this.pulseLength=e,this.pulseCount=t,this.pulsesGenerated=0}isFinished(){return this.pulsesGenerated==this.pulseCount}getNextPulseLength(){return this.pulsesGenerated++,this.pulseLength}}class t{constructor(e){this.pulses=e,this.index=0}isFinished(){return this.index==this.pulses.length}getNextPulseLength(){return this.pulses[this.index++]}}class s{constructor(e,t,s,n){this.data=e,this.zeroPulseLength=t,this.onePulseLength=s,this.bitCount=8*(this.data.length-1)+n,this.pulsesOutput=0,this.lastPulseLength=null}isFinished(){return this.pulsesOutput==2*this.bitCount}getNextPulseLength(){if(1&this.pulsesOutput)return this.pulsesOutput++,this.lastPulseLength;{const e=this.pulsesOutput>>1,t=e>>3,s=1<<7-(7&e);return this.lastPulseLength=this.data[t]&s?this.onePulseLength:this.zeroPulseLength,this.pulsesOutput++,this.lastPulseLength}}}class n{constructor(e){this.duration=e,this.emitted=!1}isFinished(){return this.emitted}getNextPulseLength(){return this.emitted=!0,3500*this.duration}}class a{constructor(e){this.segments=[],this.getSegments=e,this.level=0,this.tapeIsFinished=!1,this.pendingCycles=0}addSegment(e){this.segments.push(e)}emitPulses(e,t,s){let n=0,a=t,i=!1;for(;n0)this.pendingCycles>=32768?(e[a++]=32767|this.level,n+=32767,this.pendingCycles-=32767):(e[a++]=this.level|this.pendingCycles,n+=this.pendingCycles,this.pendingCycles=0);else if(0===this.segments.length){if(this.tapeIsFinished){i=!0;break}this.tapeIsFinished=!this.getSegments(this)}else this.segments[0].isFinished()?this.segments.shift():(this.pendingCycles=this.segments[0].getNextPulseLength(),this.level^=32768);return[a,n,i]}}class i{constructor(i){let r=0;this.blocks=[];for(var o=new DataView(i);r+1{if(0===this.blocks.length)return!1;const i=this.blocks[this.nextBlockIndex];return this.nextBlockIndex=(this.nextBlockIndex+1)%this.blocks.length,128&i[0]?a.addSegment(new e(2168,3223)):a.addSegment(new e(2168,8063)),a.addSegment(new t([667,735])),a.addSegment(new s(i,855,1710,8)),a.addSegment(new n(1e3)),0!=this.nextBlockIndex}))}getNextLoadableBlock(){if(0===this.blocks.length)return null;const e=this.blocks[this.nextBlockIndex];return this.nextBlockIndex=(this.nextBlockIndex+1)%this.blocks.length,e}static isValid(e){let t=0;const s=new DataView(e);for(;t=e.byteLength)return!1;t+=s.getUint16(t,!0)+2}return t==e.byteLength}}class r{static isValid(e){const t=new DataView(e),s="ZXTape!";for(let e=0;e{const a=r.getUint16(o,!0);o+=2;const l=r.getUint16(o,!0);o+=2;const c=new Uint8Array(i,o,l);this.blocks.push({type:"StandardSpeedData",pause:a,data:c,generatePulses:i=>{128&c[0]?i.addSegment(new e(2168,3223)):i.addSegment(new e(2168,8063)),i.addSegment(new t([667,735])),i.addSegment(new s(c,855,1710,8)),a&&i.addSegment(new n(a))}}),o+=l})();break;case 17:(()=>{const a=r.getUint16(o,!0);o+=2;const l=r.getUint16(o,!0);o+=2;const c=r.getUint16(o,!0);o+=2;const h=r.getUint16(o,!0);o+=2;const u=r.getUint16(o,!0);o+=2;const d=r.getUint16(o,!0);o+=2;const g=r.getUint8(o);o+=1;const p=r.getUint16(o,!0);o+=2;const k=r.getUint16(o,!0)|r.getUint8(o+2)<<16;o+=3;const f=new Uint8Array(i,o,k);this.blocks.push({type:"TurboSpeedData",pilotPulseLength:a,syncPulse1Length:l,syncPulse2Length:c,zeroBitLength:h,oneBitLength:u,pilotPulseCount:d,lastByteMask:g,pause:p,data:f,generatePulses:i=>{i.addSegment(new e(a,d)),i.addSegment(new t([l,c])),i.addSegment(new s(f,h,u,g)),p&&i.addSegment(new n(p))}}),o+=k})();break;case 18:(()=>{const t=r.getUint16(o,!0);o+=2;const s=r.getUint16(o,!0);o+=2,this.blocks.push({type:"PureTone",pulseLength:t,pulseCount:s,generatePulses:n=>{n.addSegment(new e(t,s))}})})();break;case 19:(()=>{const e=r.getUint8(o);o+=1;const s=[];for(let t=0;t{e.addSegment(new t(s))}}),o+=2*e})();break;case 20:(()=>{const e=r.getUint16(o,!0);o+=2;const t=r.getUint16(o,!0);o+=2;const a=r.getUint8(o);o+=1;const l=r.getUint16(o,!0);o+=2;const c=r.getUint16(o,!0)|r.getUint8(o+2)<<16;o+=3;const h=new Uint8Array(i,o,c);this.blocks.push({type:"PureData",zeroBitLength:e,oneBitLength:t,lastByteMask:a,pause:l,data:h,generatePulses:i=>{i.addSegment(new s(h,e,t,a)),l&&i.addSegment(new n(l))}}),o+=c})();break;case 21:(()=>{const e=r.getUint16(o,!0);o+=2;const t=r.getUint16(o,!0);o+=2;const s=r.getUint8(o);o+=1;const n=r.getUint16(o,!0)|r.getUint8(o+2)<<16;o+=3,this.blocks.push({type:"DirectRecording",tstatesPerSample:e,lastByteMask:s,pause:t,data:new Uint8Array(i,o,n)}),o+=n})();break;case 32:(()=>{const e=r.getUint16(o,!0);o+=2,this.blocks.push({type:"Pause",pause:e,generatePulses:t=>{t.addSegment(new n(e))}})})();break;case 33:(()=>{const e=r.getUint8(o);o+=1;const t=new Uint8Array(i,o,e);o+=e;const s=String.fromCharCode.apply(null,t);this.blocks.push({type:"GroupStart",name:s})})();break;case 34:(()=>{this.blocks.push({type:"GroupEnd"})})();break;case 35:(()=>{const e=r.getUint16(o,!0);o+=2,this.blocks.push({type:"JumpToBlock",offset:e})})();break;case 36:(()=>{const e=r.getUint16(o,!0);o+=2,this.blocks.push({type:"LoopStart",repeatCount:e})})();break;case 37:(()=>{this.blocks.push({type:"LoopEnd"})})();break;case 38:(()=>{const e=r.getUint16(o,!0);o+=2;const t=[];for(let s=0;s{this.blocks.push({type:"ReturnFromSequence"})})();break;case 40:(()=>{const e=r.getUint16(o,!0);o+=2,this.blocks.push({type:"Select",data:new Uint8Array(i,o,e)}),o+=e})();break;case 48:(()=>{const e=r.getUint8(o);o+=1;const t=new Uint8Array(i,o,e);o+=e;const s=String.fromCharCode.apply(null,t);this.blocks.push({type:"TextDescription",text:s})})();break;case 49:(()=>{const e=r.getUint8(o);o+=1;const t=r.getUint8(o);o+=1;const s=new Uint8Array(i,o,t);o+=t;const n=String.fromCharCode.apply(null,s);this.blocks.push({type:"MessageBlock",displayTime:e,text:n})})();break;case 50:(()=>{const e=r.getUint16(o,!0);o+=2,this.blocks.push({type:"ArchiveInfo",data:new Uint8Array(i,o,e)}),o+=e})();break;case 51:(()=>{const e=3*r.getUint8(o);o+=1,this.blocks.push({type:"HardwareType",data:new Uint8Array(i,o,e)}),o+=e})();break;case 53:(()=>{const e=new Uint8Array(i,o,10);o+=10;const t=String.fromCharCode.apply(null,e),s=r.getUint32(o,!0);this.blocks.push({type:"CustomInfo",identifier:t,data:new Uint8Array(i,o,s)}),o+=s})();break;case 90:(()=>{o+=9,this.blocks.push({type:"Glue"})})();break;default:(()=>{const e=r.getUint32(o,!0);o+=4,this.blocks.push({type:"unknown",data:new Uint8Array(i,o,e)}),o+=e})()}}this.nextBlockIndex=0,this.loopToBlockIndex,this.repeatCount,this.callStack=[],this.pulseGenerator=new a((e=>{const t=this.getNextMeaningfulBlock(!1);return!!t&&(t.generatePulses(e),!0)}))}getNextMeaningfulBlock(e){let t=0===this.nextBlockIndex;for(;;){if(this.nextBlockIndex>=this.blocks.length){if(t||!e)return null;this.nextBlockIndex=0,t=!0}var s=this.blocks[this.nextBlockIndex];switch(s.type){case"StandardSpeedData":case"TurboSpeedData":case"PureTone":case"PulseSequence":case"PureData":case"DirectRecording":case"Pause":return this.nextBlockIndex++,s;case"JumpToBlock":this.nextBlockIndex+=s.offset;break;case"LoopStart":this.loopToBlockIndex=this.nextBlockIndex+1,this.repeatCount=s.repeatCount,this.nextBlockIndex++;break;case"LoopEnd":this.repeatCount--,this.repeatCount>0?this.nextBlockIndex=this.loopToBlockIndex:this.nextBlockIndex++;break;case"CallSequence":this.callStack.unshift(this.nextBlockIndex+1);for(var n=s.offsets.length-1;n>=0;n--)this.callStack.unshift(this.nextBlockIndex+s.offsets[n]);this.nextBlockIndex=this.callStack.shift();break;case"ReturnFromSequence":this.nextBlockIndex=this.callStack.shift();break;default:this.nextBlockIndex++}}}getNextLoadableBlock(){for(;;){var e=this.getNextMeaningfulBlock(!0);if(!e)return null;if("StandardSpeedData"==e.type||"TurboSpeedData"==e.type)return e.data}}}let o=null,l=null,c=null,h=null,u=null,d=null,g=!1,p=null,k=!1;const f=(e,t)=>{c.set(t,o.MACHINE_MEMORY+16384*e)},b=()=>{if(!p)return;const e=p.getNextLoadableBlock();if(!e)return;const t=u[4],s=t>>8,n=1&t;let a=u[8];const i=u[2],r=e[0];let l=!0;if(s!=r)l=!1;else if(n){let t=1,s=0,n=r;for(;s=e.length){l=!1;break}const i=e[t++];s++,o.poke(a,i),a=a+1&65535,n^=i}l&=t{switch(e.data.message){case"loadCore":t=e.data.baseUrl,WebAssembly.instantiateStreaming(fetch(new URL("jsspeccy-core.wasm",t),{})).then((e=>{o=e.instance.exports,l=o.memory,c=new Uint8Array(l.buffer),h=c.subarray(o.FRAME_BUFFER,26112),u=new Uint16Array(o.memory.buffer,o.REGISTERS,12),d=new Uint16Array(o.memory.buffer,o.TAPE_PULSES,o.TAPE_PULSES_LENGTH),postMessage({message:"ready"})}));break;case"runFrame":if(g)return;const s=e.data.frameBuffer,n=new Uint8Array(s);let a=null,m=null,y=0;if("audioBufferLeft"in e.data?(a=e.data.audioBufferLeft,m=e.data.audioBufferRight,y=a.byteLength/4,o.setAudioSamplesPerFrame(y)):o.setAudioSamplesPerFrame(0),p&&k){const e=o.getTapePulseBufferTstateCount(),t=o.getTapePulseWriteIndex(),[s,n,a]=p.pulseGenerator.emitPulses(d,t,8e4-e);o.setTapePulseBufferState(s,e+n),a&&(k=!1,postMessage({message:"stoppedTape"}))}let U=o.runFrame();for(;U;){switch(U){case 1:throw g=!0,"Unrecognised opcode!";case 2:b();break;default:throw g=!0,"runFrame returned unexpected result: "+U}U=o.resumeFrame()}if(n.set(h),y){const e=new Float32Array(o.memory.buffer,o.AUDIO_BUFFER_LEFT,y),t=new Float32Array(o.memory.buffer,o.AUDIO_BUFFER_RIGHT,y),n=new Float32Array(a),i=new Float32Array(m);n.set(e),i.set(t),postMessage({message:"frameCompleted",frameBuffer:s,audioBufferLeft:a,audioBufferRight:m},[s,a,m])}else postMessage({message:"frameCompleted",frameBuffer:s},[s]);break;case"keyDown":o.keyDown(e.data.row,e.data.mask);break;case"keyUp":o.keyUp(e.data.row,e.data.mask);break;case"setMachineType":o.setMachineType(e.data.type);break;case"reset":o.reset();break;case"loadMemory":f(e.data.page,e.data.data);break;case"loadSnapshot":(e=>{o.setMachineType(e.model);for(let t in e.memoryPages)f(t,e.memoryPages[t]);["AF","BC","DE","HL","AF_","BC_","DE_","HL_","IX","IY","SP","IR"].forEach(((t,s)=>{u[s]=e.registers[t]})),o.setPC(e.registers.PC),o.setIFF1(e.registers.iff1),o.setIFF2(e.registers.iff2),o.setIM(e.registers.im),o.setHalted(!!e.halted),o.writePort(254,e.ulaState.borderColour),48!=e.model&&o.writePort(32765,e.ulaState.pagingFlags),o.setTStates(e.tstates)})(e.data.snapshot),postMessage({message:"fileOpened",id:e.data.id,mediaType:"snapshot"});break;case"openTAPFile":p=new i(e.data.data),k=!1,postMessage({message:"fileOpened",id:e.data.id,mediaType:"tape"});break;case"openTZXFile":p=new r(e.data.data),k=!1,postMessage({message:"fileOpened",id:e.data.id,mediaType:"tape"});break;case"playTape":p&&!k&&(k=!0,postMessage({message:"playingTape"}));break;case"stopTape":p&&k&&(k=!1,postMessage({message:"stoppedTape"}));break;case"setTapeTraps":o.setTapeTraps(e.data.value);break;default:console.log("message received by worker:",e.data)}var t}})(); \ No newline at end of file diff --git a/site/jsspeccy/jsspeccy.js b/site/jsspeccy/jsspeccy.js deleted file mode 100644 index 19fb78a..0000000 --- a/site/jsspeccy/jsspeccy.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see jsspeccy.js.LICENSE.txt */ -(()=>{var e={187:e=>{"use strict";var t,r="object"==typeof Reflect?Reflect:null,n=r&&"function"==typeof r.apply?r.apply:function(e,t,r){return Function.prototype.apply.call(e,t,r)};t=r&&"function"==typeof r.ownKeys?r.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var i=Number.isNaN||function(e){return e!=e};function s(){s.init.call(this)}e.exports=s,e.exports.once=function(e,t){return new Promise((function(r,n){function i(r){e.removeListener(t,s),n(r)}function s(){"function"==typeof e.removeListener&&e.removeListener("error",i),r([].slice.call(arguments))}m(e,t,s,{once:!0}),"error"!==t&&function(e,t,r){"function"==typeof e.on&&m(e,"error",t,{once:!0})}(e,i)}))},s.EventEmitter=s,s.prototype._events=void 0,s.prototype._eventsCount=0,s.prototype._maxListeners=void 0;var a=10;function o(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function l(e){return void 0===e._maxListeners?s.defaultMaxListeners:e._maxListeners}function h(e,t,r,n){var i,s,a,h;if(o(r),void 0===(s=e._events)?(s=e._events=Object.create(null),e._eventsCount=0):(void 0!==s.newListener&&(e.emit("newListener",t,r.listener?r.listener:r),s=e._events),a=s[t]),void 0===a)a=s[t]=r,++e._eventsCount;else if("function"==typeof a?a=s[t]=n?[r,a]:[a,r]:n?a.unshift(r):a.push(r),(i=l(e))>0&&a.length>i&&!a.warned){a.warned=!0;var d=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");d.name="MaxListenersExceededWarning",d.emitter=e,d.type=t,d.count=a.length,h=d,console&&console.warn&&console.warn(h)}return e}function d(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function u(e,t,r){var n={fired:!1,wrapFn:void 0,target:e,type:t,listener:r},i=d.bind(n);return i.listener=r,n.wrapFn=i,i}function c(e,t,r){var n=e._events;if(void 0===n)return[];var i=n[t];return void 0===i?[]:"function"==typeof i?r?[i.listener||i]:[i]:r?function(e){for(var t=new Array(e.length),r=0;r0&&(a=t[0]),a instanceof Error)throw a;var o=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw o.context=a,o}var l=s[e];if(void 0===l)return!1;if("function"==typeof l)n(l,this,t);else{var h=l.length,d=p(l,h);for(r=0;r=0;s--)if(r[s]===t||r[s].listener===t){a=r[s].listener,i=s;break}if(i<0)return this;0===i?r.shift():function(e,t){for(;t+1=0;n--)this.removeListener(e,t[n]);return this},s.prototype.listeners=function(e){return c(this,e,!0)},s.prototype.rawListeners=function(e){return c(this,e,!1)},s.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):f.call(e,t)},s.prototype.listenerCount=f,s.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}},171:(e,t,r)=>{"use strict";var n,i,s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};i=function(){for(var e=arguments.length,t=Array(e),r=0;r{e.exports=function e(t,r,n){function i(a,o){if(!r[a]){if(!t[a]){if(s)return s(a,!0);var l=new Error("Cannot find module '"+a+"'");throw l.code="MODULE_NOT_FOUND",l}var h=r[a]={exports:{}};t[a][0].call(h.exports,(function(e){return i(t[a][1][e]||e)}),h,h.exports,e,t,r,n)}return r[a].exports}for(var s=void 0,a=0;a>2,o=(3&t)<<4|r>>4,l=1>6:64,h=2>4,r=(15&a)<<4|(o=s.indexOf(e.charAt(h++)))>>2,n=(3&o)<<6|(l=s.indexOf(e.charAt(h++))),c[d++]=t,64!==o&&(c[d++]=r),64!==l&&(c[d++]=n);return c}},{"./support":30,"./utils":32}],2:[function(e,t,r){"use strict";var n=e("./external"),i=e("./stream/DataWorker"),s=e("./stream/Crc32Probe"),a=e("./stream/DataLengthProbe");function o(e,t,r,n,i){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=i}o.prototype={getContentWorker:function(){var e=new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a("data_length")),t=this;return e.on("end",(function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")})),e},getCompressedWorker:function(){return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},o.createWorkerFrom=function(e,t,r){return e.pipe(new s).pipe(new a("uncompressedSize")).pipe(t.compressWorker(r)).pipe(new a("compressedSize")).withStreamInfo("compression",t)},t.exports=o},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(e,t,r){"use strict";var n=e("./stream/GenericWorker");r.STORE={magic:"\0\0",compressWorker:function(e){return new n("STORE compression")},uncompressWorker:function(){return new n("STORE decompression")}},r.DEFLATE=e("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(e,t,r){"use strict";var n=e("./utils"),i=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?"string"!==n.getTypeOf(e)?function(e,t,r,n){var s=i,a=0+r;e^=-1;for(var o=0;o>>8^s[255&(e^t[o])];return-1^e}(0|t,e,e.length):function(e,t,r,n){var s=i,a=0+r;e^=-1;for(var o=0;o>>8^s[255&(e^t.charCodeAt(o))];return-1^e}(0|t,e,e.length):0}},{"./utils":32}],5:[function(e,t,r){"use strict";r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(e,t,r){"use strict";var n;n="undefined"!=typeof Promise?Promise:e("lie"),t.exports={Promise:n}},{lie:37}],7:[function(e,t,r){"use strict";var n="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,i=e("pako"),s=e("./utils"),a=e("./stream/GenericWorker"),o=n?"uint8array":"array";function l(e,t){a.call(this,"FlateWorker/"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic="\b\0",s.inherits(l,a),l.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.data),!1)},l.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},l.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},l.prototype._createPako=function(){this._pako=new i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var e=this;this._pako.onData=function(t){e.push({data:t,meta:e.meta})}},r.compressWorker=function(e){return new l("Deflate",e)},r.uncompressWorker=function(){return new l("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(e,t,r){"use strict";function n(e,t){var r,n="";for(r=0;r>>=8;return n}function i(e,t,r,i,a,d){var u,c,f=e.file,p=e.compression,m=d!==o.utf8encode,_=s.transformTo("string",d(f.name)),g=s.transformTo("string",o.utf8encode(f.name)),w=f.comment,b=s.transformTo("string",d(w)),y=s.transformTo("string",o.utf8encode(w)),v=g.length!==f.name.length,k=y.length!==w.length,x="",E="",S="",C=f.dir,A=f.date,z={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(z.crc32=e.crc32,z.compressedSize=e.compressedSize,z.uncompressedSize=e.uncompressedSize);var B=0;t&&(B|=8),m||!v&&!k||(B|=2048);var U=0,I=0;C&&(U|=16),"UNIX"===a?(I=798,U|=function(e,t){var r=e;return e||(r=t?16893:33204),(65535&r)<<16}(f.unixPermissions,C)):(I=20,U|=function(e){return 63&(e||0)}(f.dosPermissions)),u=A.getUTCHours(),u<<=6,u|=A.getUTCMinutes(),u<<=5,u|=A.getUTCSeconds()/2,c=A.getUTCFullYear()-1980,c<<=4,c|=A.getUTCMonth()+1,c<<=5,c|=A.getUTCDate(),v&&(E=n(1,1)+n(l(_),4)+g,x+="up"+n(E.length,2)+E),k&&(S=n(1,1)+n(l(b),4)+y,x+="uc"+n(S.length,2)+S);var T="";return T+="\n\0",T+=n(B,2),T+=p.magic,T+=n(u,2),T+=n(c,2),T+=n(z.crc32,4),T+=n(z.compressedSize,4),T+=n(z.uncompressedSize,4),T+=n(_.length,2),T+=n(x.length,2),{fileRecord:h.LOCAL_FILE_HEADER+T+_+x,dirRecord:h.CENTRAL_FILE_HEADER+n(I,2)+T+n(b.length,2)+"\0\0\0\0"+n(U,4)+n(i,4)+_+x+b}}var s=e("../utils"),a=e("../stream/GenericWorker"),o=e("../utf8"),l=e("../crc32"),h=e("../signature");function d(e,t,r,n){a.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}s.inherits(d,a),d.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,a.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-n-1))/r:100}}))},d.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=i(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},d.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=i(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:function(e){return h.DATA_DESCRIPTOR+n(e.crc32,4)+n(e.compressedSize,4)+n(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},d.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo("string",this.readData(e))},readData:function(e){},lastIndexOfSignature:function(e){},readAndCheckSignature:function(e){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=i},{"../utils":32}],19:[function(e,t,r){"use strict";var n=e("./Uint8ArrayReader");function i(e){n.call(this,e)}e("../utils").inherits(i,n),i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(e,t,r){"use strict";var n=e("./DataReader");function i(e){n.call(this,e)}e("../utils").inherits(i,n),i.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},i.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},i.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{"../utils":32,"./DataReader":18}],21:[function(e,t,r){"use strict";var n=e("./ArrayReader");function i(e){n.call(this,e)}e("../utils").inherits(i,n),i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{"../utils":32,"./ArrayReader":17}],22:[function(e,t,r){"use strict";var n=e("../utils"),i=e("../support"),s=e("./ArrayReader"),a=e("./StringReader"),o=e("./NodeBufferReader"),l=e("./Uint8ArrayReader");t.exports=function(e){var t=n.getTypeOf(e);return n.checkSupport(t),"string"!==t||i.uint8array?"nodebuffer"===t?new o(e):i.uint8array?new l(n.transformTo("uint8array",e)):new s(n.transformTo("array",e)):new a(e)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(e,t,r){"use strict";r.LOCAL_FILE_HEADER="PK",r.CENTRAL_FILE_HEADER="PK",r.CENTRAL_DIRECTORY_END="PK",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK",r.ZIP64_CENTRAL_DIRECTORY_END="PK",r.DATA_DESCRIPTOR="PK\b"},{}],24:[function(e,t,r){"use strict";var n=e("./GenericWorker"),i=e("../utils");function s(e){n.call(this,"ConvertWorker to "+e),this.destType=e}i.inherits(s,n),s.prototype.processChunk=function(e){this.push({data:i.transformTo(this.destType,e.data),meta:e.meta})},t.exports=s},{"../utils":32,"./GenericWorker":28}],25:[function(e,t,r){"use strict";var n=e("./GenericWorker"),i=e("../crc32");function s(){n.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}e("../utils").inherits(s,n),s.prototype.processChunk=function(e){this.streamInfo.crc32=i(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=s},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(e,t,r){"use strict";var n=e("../utils"),i=e("./GenericWorker");function s(e){i.call(this,"DataLengthProbe for "+e),this.propName=e,this.withStreamInfo(e,0)}n.inherits(s,i),s.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}i.prototype.processChunk.call(this,e)},t.exports=s},{"../utils":32,"./GenericWorker":28}],27:[function(e,t,r){"use strict";var n=e("../utils"),i=e("./GenericWorker");function s(e){i.call(this,"DataWorker");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,e.then((function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=n.getTypeOf(e),t.isPaused||t._tickAndRepeat()}),(function(e){t.error(e)}))}n.inherits(s,i),s.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":e=this.data.substring(this.index,t);break;case"uint8array":e=this.data.subarray(this.index,t);break;case"array":case"nodebuffer":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=s},{"../utils":32,"./GenericWorker":28}],28:[function(e,t,r){"use strict";function n(e){this.name=e||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}n.prototype={push:function(e){this.emit("data",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit("error",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit("error",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var r=0;r "+e:e}},t.exports=n},{}],29:[function(e,t,r){"use strict";var n=e("../utils"),i=e("./ConvertWorker"),s=e("./GenericWorker"),a=e("../base64"),o=e("../support"),l=e("../external"),h=null;if(o.nodestream)try{h=e("../nodejs/NodejsStreamOutputAdapter")}catch(e){}function d(e,t,r){var a=t;switch(t){case"blob":case"arraybuffer":a="uint8array";break;case"base64":a="string"}try{this._internalType=a,this._outputType=t,this._mimeType=r,n.checkSupport(a),this._worker=e.pipe(new i(a)),e.lock()}catch(e){this._worker=new s("error"),this._worker.error(e)}}d.prototype={accumulate:function(e){return function(e,t){return new l.Promise((function(r,i){var s=[],o=e._internalType,l=e._outputType,h=e._mimeType;e.on("data",(function(e,r){s.push(e),t&&t(r)})).on("error",(function(e){s=[],i(e)})).on("end",(function(){try{var e=function(e,t,r){switch(e){case"blob":return n.newBlob(n.transformTo("arraybuffer",t),r);case"base64":return a.encode(t);default:return n.transformTo(e,t)}}(l,function(e,t){var r,n=0,i=null,s=0;for(r=0;r>>6:(r<65536?t[a++]=224|r>>>12:(t[a++]=240|r>>>18,t[a++]=128|r>>>12&63),t[a++]=128|r>>>6&63),t[a++]=128|63&r);return t}(e)},r.utf8decode=function(e){return i.nodebuffer?n.transformTo("nodebuffer",e).toString("utf-8"):function(e){var t,r,i,s,a=e.length,l=new Array(2*a);for(t=r=0;t>10&1023,l[r++]=56320|1023&i)}return l.length!==r&&(l.subarray?l=l.subarray(0,r):l.length=r),n.applyFromCharCode(l)}(e=n.transformTo(i.uint8array?"uint8array":"array",e))},n.inherits(h,a),h.prototype.processChunk=function(e){var t=n.transformTo(i.uint8array?"uint8array":"array",e.data);if(this.leftOver&&this.leftOver.length){if(i.uint8array){var s=t;(t=new Uint8Array(s.length+this.leftOver.length)).set(this.leftOver,0),t.set(s,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var a=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0||0===r?t:r+o[e[r]]>t?r:t}(t),l=t;a!==t.length&&(i.uint8array?(l=t.subarray(0,a),this.leftOver=t.subarray(a,t.length)):(l=t.slice(0,a),this.leftOver=t.slice(a,t.length))),this.push({data:r.utf8decode(l),meta:e.meta})},h.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:r.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},r.Utf8DecodeWorker=h,n.inherits(d,a),d.prototype.processChunk=function(e){this.push({data:r.utf8encode(e.data),meta:e.meta})},r.Utf8EncodeWorker=d},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(e,t,r){"use strict";var n=e("./support"),i=e("./base64"),s=e("./nodejsUtils"),a=e("set-immediate-shim"),o=e("./external");function l(e){return e}function h(e,t){for(var r=0;r>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||"/"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(e){if(this.extraFields[1]){var t=n(this.extraFields[1].value);this.uncompressedSize===i.MAX_VALUE_32BITS&&(this.uncompressedSize=t.readInt(8)),this.compressedSize===i.MAX_VALUE_32BITS&&(this.compressedSize=t.readInt(8)),this.localHeaderOffset===i.MAX_VALUE_32BITS&&(this.localHeaderOffset=t.readInt(8)),this.diskNumberStart===i.MAX_VALUE_32BITS&&(this.diskNumberStart=t.readInt(4))}},readExtraFields:function(e){var t,r,n,i=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4>>6:(r<65536?t[a++]=224|r>>>12:(t[a++]=240|r>>>18,t[a++]=128|r>>>12&63),t[a++]=128|r>>>6&63),t[a++]=128|63&r);return t},r.buf2binstring=function(e){return l(e,e.length)},r.binstring2buf=function(e){for(var t=new n.Buf8(e.length),r=0,i=t.length;r>10&1023,h[n++]=56320|1023&i)}return l(h,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0||0===r?t:r+a[e[r]]>t?r:t}},{"./common":41}],43:[function(e,t,r){"use strict";t.exports=function(e,t,r,n){for(var i=65535&e|0,s=e>>>16&65535|0,a=0;0!==r;){for(r-=a=2e3>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,i){var s=n,a=i+r;e^=-1;for(var o=i;o>>8^s[255&(e^t[o])];return-1^e}},{}],46:[function(e,t,r){"use strict";var n,i=e("../utils/common"),s=e("./trees"),a=e("./adler32"),o=e("./crc32"),l=e("./messages"),h=-2,d=258,u=262,c=113;function f(e,t){return e.msg=l[t],t}function p(e){return(e<<1)-(4e.avail_out&&(r=e.avail_out),0!==r&&(i.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function g(e,t){s._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,_(e.strm)}function w(e,t){e.pending_buf[e.pending++]=t}function b(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function y(e,t){var r,n,i=e.max_chain_length,s=e.strstart,a=e.prev_length,o=e.nice_match,l=e.strstart>e.w_size-u?e.strstart-(e.w_size-u):0,h=e.window,c=e.w_mask,f=e.prev,p=e.strstart+d,m=h[s+a-1],_=h[s+a];e.prev_length>=e.good_match&&(i>>=2),o>e.lookahead&&(o=e.lookahead);do{if(h[(r=t)+a]===_&&h[r+a-1]===m&&h[r]===h[s]&&h[++r]===h[s+1]){s+=2,r++;do{}while(h[++s]===h[++r]&&h[++s]===h[++r]&&h[++s]===h[++r]&&h[++s]===h[++r]&&h[++s]===h[++r]&&h[++s]===h[++r]&&h[++s]===h[++r]&&h[++s]===h[++r]&&sl&&0!=--i);return a<=e.lookahead?a:e.lookahead}function v(e){var t,r,n,s,l,h,d,c,f,p,m=e.w_size;do{if(s=e.window_size-e.lookahead-e.strstart,e.strstart>=m+(m-u)){for(i.arraySet(e.window,e.window,m,m,0),e.match_start-=m,e.strstart-=m,e.block_start-=m,t=r=e.hash_size;n=e.head[--t],e.head[t]=m<=n?n-m:0,--r;);for(t=r=m;n=e.prev[--t],e.prev[t]=m<=n?n-m:0,--r;);s+=m}if(0===e.strm.avail_in)break;if(h=e.strm,d=e.window,c=e.strstart+e.lookahead,p=void 0,(f=s)<(p=h.avail_in)&&(p=f),r=0===p?0:(h.avail_in-=p,i.arraySet(d,h.input,h.next_in,p,c),1===h.state.wrap?h.adler=a(h.adler,d,p,c):2===h.state.wrap&&(h.adler=o(h.adler,d,p,c)),h.next_in+=p,h.total_in+=p,p),e.lookahead+=r,e.lookahead+e.insert>=3)for(l=e.strstart-e.insert,e.ins_h=e.window[l],e.ins_h=(e.ins_h<=3&&(e.ins_h=(e.ins_h<=3)if(n=s._tr_tally(e,e.strstart-e.match_start,e.match_length-3),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=3){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<=3&&(e.ins_h=(e.ins_h<=3&&e.match_length<=e.prev_length){for(i=e.strstart+e.lookahead-3,n=s._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-3),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=i&&(e.ins_h=(e.ins_h<e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(v(e),0===e.lookahead&&0===t)return 1;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,g(e,!1),0===e.strm.avail_out))return 1;if(e.strstart-e.block_start>=e.w_size-u&&(g(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(g(e,!0),0===e.strm.avail_out?3:4):(e.strstart>e.block_start&&(g(e,!1),e.strm.avail_out),1)})),new E(4,4,8,4,k),new E(4,5,16,8,k),new E(4,6,32,32,k),new E(4,4,16,16,x),new E(8,16,32,32,x),new E(8,16,128,128,x),new E(8,32,128,256,x),new E(32,128,258,1024,x),new E(32,258,258,4096,x)],r.deflateInit=function(e,t){return z(e,t,8,15,8,0)},r.deflateInit2=z,r.deflateReset=A,r.deflateResetKeep=C,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?h:(e.state.gzhead=t,0):h},r.deflate=function(e,t){var r,i,a,l;if(!e||!e.state||5>8&255),w(i,i.gzhead.time>>16&255),w(i,i.gzhead.time>>24&255),w(i,9===i.level?2:2<=i.strategy||i.level<2?4:0),w(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(w(i,255&i.gzhead.extra.length),w(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(e.adler=o(e.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=69):(w(i,0),w(i,0),w(i,0),w(i,0),w(i,0),w(i,9===i.level?2:2<=i.strategy||i.level<2?4:0),w(i,3),i.status=c);else{var u=8+(i.w_bits-8<<4)<<8;u|=(2<=i.strategy||i.level<2?0:i.level<6?1:6===i.level?2:3)<<6,0!==i.strstart&&(u|=32),u+=31-u%31,i.status=c,b(i,u),0!==i.strstart&&(b(i,e.adler>>>16),b(i,65535&e.adler)),e.adler=1}if(69===i.status)if(i.gzhead.extra){for(a=i.pending;i.gzindex<(65535&i.gzhead.extra.length)&&(i.pending!==i.pending_buf_size||(i.gzhead.hcrc&&i.pending>a&&(e.adler=o(e.adler,i.pending_buf,i.pending-a,a)),_(e),a=i.pending,i.pending!==i.pending_buf_size));)w(i,255&i.gzhead.extra[i.gzindex]),i.gzindex++;i.gzhead.hcrc&&i.pending>a&&(e.adler=o(e.adler,i.pending_buf,i.pending-a,a)),i.gzindex===i.gzhead.extra.length&&(i.gzindex=0,i.status=73)}else i.status=73;if(73===i.status)if(i.gzhead.name){a=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>a&&(e.adler=o(e.adler,i.pending_buf,i.pending-a,a)),_(e),a=i.pending,i.pending===i.pending_buf_size)){l=1;break}l=i.gzindexa&&(e.adler=o(e.adler,i.pending_buf,i.pending-a,a)),0===l&&(i.gzindex=0,i.status=91)}else i.status=91;if(91===i.status)if(i.gzhead.comment){a=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>a&&(e.adler=o(e.adler,i.pending_buf,i.pending-a,a)),_(e),a=i.pending,i.pending===i.pending_buf_size)){l=1;break}l=i.gzindexa&&(e.adler=o(e.adler,i.pending_buf,i.pending-a,a)),0===l&&(i.status=103)}else i.status=103;if(103===i.status&&(i.gzhead.hcrc?(i.pending+2>i.pending_buf_size&&_(e),i.pending+2<=i.pending_buf_size&&(w(i,255&e.adler),w(i,e.adler>>8&255),e.adler=0,i.status=c)):i.status=c),0!==i.pending){if(_(e),0===e.avail_out)return i.last_flush=-1,0}else if(0===e.avail_in&&p(t)<=p(r)&&4!==t)return f(e,-5);if(666===i.status&&0!==e.avail_in)return f(e,-5);if(0!==e.avail_in||0!==i.lookahead||0!==t&&666!==i.status){var y=2===i.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(v(e),0===e.lookahead)){if(0===t)return 1;break}if(e.match_length=0,r=s._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(g(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(g(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(g(e,!1),0===e.strm.avail_out)?1:2}(i,t):3===i.strategy?function(e,t){for(var r,n,i,a,o=e.window;;){if(e.lookahead<=d){if(v(e),e.lookahead<=d&&0===t)return 1;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=3&&0e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=3?(r=s._tr_tally(e,1,e.match_length-3),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=s._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(g(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(g(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(g(e,!1),0===e.strm.avail_out)?1:2}(i,t):n[i.level].func(i,t);if(3!==y&&4!==y||(i.status=666),1===y||3===y)return 0===e.avail_out&&(i.last_flush=-1),0;if(2===y&&(1===t?s._tr_align(i):5!==t&&(s._tr_stored_block(i,0,0,!1),3===t&&(m(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),_(e),0===e.avail_out))return i.last_flush=-1,0}return 4!==t?0:i.wrap<=0?1:(2===i.wrap?(w(i,255&e.adler),w(i,e.adler>>8&255),w(i,e.adler>>16&255),w(i,e.adler>>24&255),w(i,255&e.total_in),w(i,e.total_in>>8&255),w(i,e.total_in>>16&255),w(i,e.total_in>>24&255)):(b(i,e.adler>>>16),b(i,65535&e.adler)),_(e),0=r.w_size&&(0===o&&(m(r.head),r.strstart=0,r.block_start=0,r.insert=0),c=new i.Buf8(r.w_size),i.arraySet(c,t,f-r.w_size,r.w_size,0),t=c,f=r.w_size),l=e.avail_in,d=e.next_in,u=e.input,e.avail_in=f,e.next_in=0,e.input=t,v(r);r.lookahead>=3;){for(n=r.strstart,s=r.lookahead-2;r.ins_h=(r.ins_h<>>=y=b>>>24,p-=y,0==(y=b>>>16&255))C[s++]=65535&b;else{if(!(16&y)){if(0==(64&y)){b=m[(65535&b)+(f&(1<>>=y,p-=y),p<15&&(f+=S[n++]<>>=y=b>>>24,p-=y,!(16&(y=b>>>16&255))){if(0==(64&y)){b=_[(65535&b)+(f&(1<>>=y,p-=y,(y=s-a)>3,f&=(1<<(p-=v<<3))-1,e.next_in=n,e.next_out=s,e.avail_in=n>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function d(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new n.Buf16(320),this.work=new n.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function u(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=1,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new n.Buf32(852),t.distcode=t.distdyn=new n.Buf32(592),t.sane=1,t.back=-1,0):l}function c(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,u(e)):l}function f(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15=a.wsize?(n.arraySet(a.window,t,r-a.wsize,a.wsize,0),a.wnext=0,a.whave=a.wsize):(i<(s=a.wsize-a.wnext)&&(s=i),n.arraySet(a.window,t,r-i,s,a.wnext),(i-=s)?(n.arraySet(a.window,t,r-i,i,0),a.wnext=i,a.whave=a.wsize):(a.wnext+=s,a.wnext===a.wsize&&(a.wnext=0),a.whave>>8&255,r.check=s(r.check,O,2,0),g=_=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&_)<<8)+(_>>8))%31){e.msg="incorrect header check",r.mode=30;break}if(8!=(15&_)){e.msg="unknown compression method",r.mode=30;break}if(g-=4,I=8+(15&(_>>>=4)),0===r.wbits)r.wbits=I;else if(I>r.wbits){e.msg="invalid window size",r.mode=30;break}r.dmax=1<>8&1),512&r.flags&&(O[0]=255&_,O[1]=_>>>8&255,r.check=s(r.check,O,2,0)),g=_=0,r.mode=3;case 3:for(;g<32;){if(0===p)break e;p--,_+=d[c++]<>>8&255,O[2]=_>>>16&255,O[3]=_>>>24&255,r.check=s(r.check,O,4,0)),g=_=0,r.mode=4;case 4:for(;g<16;){if(0===p)break e;p--,_+=d[c++]<>8),512&r.flags&&(O[0]=255&_,O[1]=_>>>8&255,r.check=s(r.check,O,2,0)),g=_=0,r.mode=5;case 5:if(1024&r.flags){for(;g<16;){if(0===p)break e;p--,_+=d[c++]<>>8&255,r.check=s(r.check,O,2,0)),g=_=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(p<(k=r.length)&&(k=p),k&&(r.head&&(I=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),n.arraySet(r.head.extra,d,c,k,I)),512&r.flags&&(r.check=s(r.check,d,k,c)),p-=k,c+=k,r.length-=k),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===p)break e;for(k=0;I=d[c+k++],r.head&&I&&r.length<65536&&(r.head.name+=String.fromCharCode(I)),I&&k>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;g<32;){if(0===p)break e;p--,_+=d[c++]<>>=7&g,g-=7&g,r.mode=27;break}for(;g<3;){if(0===p)break e;p--,_+=d[c++]<>>=1)){case 0:r.mode=14;break;case 1:if(w(r),r.mode=20,6!==t)break;_>>>=2,g-=2;break e;case 2:r.mode=17;break;case 3:e.msg="invalid block type",r.mode=30}_>>>=2,g-=2;break;case 14:for(_>>>=7&g,g-=7&g;g<32;){if(0===p)break e;p--,_+=d[c++]<>>16^65535)){e.msg="invalid stored block lengths",r.mode=30;break}if(r.length=65535&_,g=_=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(k=r.length){if(p>>=5,g-=5,r.ndist=1+(31&_),_>>>=5,g-=5,r.ncode=4+(15&_),_>>>=4,g-=4,286>>=3,g-=3}for(;r.have<19;)r.lens[P[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,F={bits:r.lenbits},T=o(0,r.lens,0,19,r.lencode,0,r.work,F),r.lenbits=F.bits,T){e.msg="invalid code lengths set",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have>>16&255,A=65535&L,!((S=L>>>24)<=g);){if(0===p)break e;p--,_+=d[c++]<>>=S,g-=S,r.lens[r.have++]=A;else{if(16===A){for(R=S+2;g>>=S,g-=S,0===r.have){e.msg="invalid bit length repeat",r.mode=30;break}I=r.lens[r.have-1],k=3+(3&_),_>>>=2,g-=2}else if(17===A){for(R=S+3;g>>=S)),_>>>=3,g-=3}else{for(R=S+7;g>>=S)),_>>>=7,g-=7}if(r.have+k>r.nlen+r.ndist){e.msg="invalid bit length repeat",r.mode=30;break}for(;k--;)r.lens[r.have++]=I}}if(30===r.mode)break;if(0===r.lens[256]){e.msg="invalid code -- missing end-of-block",r.mode=30;break}if(r.lenbits=9,F={bits:r.lenbits},T=o(1,r.lens,0,r.nlen,r.lencode,0,r.work,F),r.lenbits=F.bits,T){e.msg="invalid literal/lengths set",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,F={bits:r.distbits},T=o(2,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,F),r.distbits=F.bits,T){e.msg="invalid distances set",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(6<=p&&258<=m){e.next_out=f,e.avail_out=m,e.next_in=c,e.avail_in=p,r.hold=_,r.bits=g,a(e,v),f=e.next_out,u=e.output,m=e.avail_out,c=e.next_in,d=e.input,p=e.avail_in,_=r.hold,g=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;C=(L=r.lencode[_&(1<>>16&255,A=65535&L,!((S=L>>>24)<=g);){if(0===p)break e;p--,_+=d[c++]<>z)])>>>16&255,A=65535&L,!(z+(S=L>>>24)<=g);){if(0===p)break e;p--,_+=d[c++]<>>=z,g-=z,r.back+=z}if(_>>>=S,g-=S,r.back+=S,r.length=A,0===C){r.mode=26;break}if(32&C){r.back=-1,r.mode=12;break}if(64&C){e.msg="invalid literal/length code",r.mode=30;break}r.extra=15&C,r.mode=22;case 22:if(r.extra){for(R=r.extra;g>>=r.extra,g-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;C=(L=r.distcode[_&(1<>>16&255,A=65535&L,!((S=L>>>24)<=g);){if(0===p)break e;p--,_+=d[c++]<>z)])>>>16&255,A=65535&L,!(z+(S=L>>>24)<=g);){if(0===p)break e;p--,_+=d[c++]<>>=z,g-=z,r.back+=z}if(_>>>=S,g-=S,r.back+=S,64&C){e.msg="invalid distance code",r.mode=30;break}r.offset=A,r.extra=15&C,r.mode=24;case 24:if(r.extra){for(R=r.extra;g>>=r.extra,g-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg="invalid distance too far back",r.mode=30;break}r.mode=25;case 25:if(0===m)break e;if(k=v-m,r.offset>k){if((k=r.offset-k)>r.whave&&r.sane){e.msg="invalid distance too far back",r.mode=30;break}x=k>r.wnext?(k-=r.wnext,r.wsize-k):r.wnext-k,k>r.length&&(k=r.length),E=r.window}else E=u,x=f-r.offset,k=r.length;for(mw?(y=P[D+u[E]],F[R+u[E]]):(y=96,0),f=1<>B)+(p-=f)]=b<<24|y<<16|v|0,0!==p;);for(f=1<>=1;if(0!==f?(T&=f-1,T+=f):T=0,E++,0==--L[x]){if(x===C)break;x=t[r+u[E]]}if(A>>7)]}function S(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function C(e,t,r){e.bi_valid>16-r?(e.bi_buf|=t<>16-e.bi_valid,e.bi_valid+=r-16):(e.bi_buf|=t<>>=1,r<<=1,0<--t;);return r>>>1}function B(e,t,r){var n,i,s=new Array(16),a=0;for(n=1;n<=l;n++)s[n]=a=a+r[n-1]<<1;for(i=0;i<=t;i++){var o=e[2*i+1];0!==o&&(e[2*i]=z(s[o]++,o))}}function U(e){var t;for(t=0;t>1;1<=r;r--)F(e,s,r);for(i=h;r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],F(e,s,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,s[2*i]=s[2*r]+s[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,s[2*r+1]=s[2*n+1]=i,e.heap[1]=i++,F(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,s,a,o,h=t.dyn_tree,d=t.max_code,u=t.stat_desc.static_tree,c=t.stat_desc.has_stree,f=t.stat_desc.extra_bits,p=t.stat_desc.extra_base,m=t.stat_desc.max_length,_=0;for(s=0;s<=l;s++)e.bl_count[s]=0;for(h[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<573;r++)m<(s=h[2*h[2*(n=e.heap[r])+1]+1]+1)&&(s=m,_++),h[2*n+1]=s,d>=7;n>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return 0;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return 1;for(t=32;t>>3,(a=e.static_len+3+7>>>3)<=i&&(i=a)):i=a=r+5,r+4<=i&&-1!==t?N(e,t,r,n):4===e.strategy||a===i?(C(e,2+(n?1:0),3),R(e,f,p)):(C(e,4+(n?1:0),3),function(e,t,r,n){var i;for(C(e,t-257,5),C(e,r-1,5),C(e,n-4,4),i=0;i>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(_[r]+s+1)]++,e.dyn_dtree[2*E(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){C(e,2,3),A(e,256,f),function(e){16===e.bi_valid?(S(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{"../utils/common":41}],53:[function(e,t,r){"use strict";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,r){"use strict";t.exports="function"==typeof setImmediate?setImmediate:function(){var e=[].slice.apply(arguments);e.splice(1,0,0),setTimeout.apply(null,e)}},{}]},{},[10])(10)},88:e=>{e.exports=''},27:e=>{e.exports=''},763:e=>{e.exports=''},535:e=>{e.exports=''},830:e=>{e.exports=''},917:e=>{e.exports=''},921:e=>{e.exports=''},911:e=>{e.exports=''},548:e=>{e.exports=''}},t={};function r(n){var i=t[n];if(void 0!==i)return i.exports;var s=t[n]={exports:{}};return e[n](s,s.exports,r),s.exports}r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),(()=>{"use strict";var e=r(187),t=r(171),n=r(733);const i=26112;class s{constructor(e){if(this.canvas=e,this.ctx=this.canvas.getContext("2d"),this.imageData=this.ctx.getImageData(0,0,320,240),this.pixels=new Uint32Array(this.imageData.data.buffer),this.flashPhase=0,this.palette=new Uint32Array([255,540066047,3225424127,3225469183,1085280511,1354805503,3770683647,3233857791,255,809566207,4282396927,4285591807,1356861695,1356922879,4293415167,4294967295]),0===new Uint8Array(new Uint16Array([32768]).buffer)[0])for(let e=0;e<16;e++){const t=this.palette[e];this.palette[e]=t<<24&4278190080|t<<8&16711680|t>>>8&65280|t>>>24&255}}showFrame(e){const t=new Uint8Array(e);let r=0,n=0;for(let e=0;e<24;e++)for(let e=0;e<160;e++){let e=this.palette[t[n++]];this.pixels[r++]=e,this.pixels[r++]=e}for(let e=0;e<192;e++){for(let e=0;e<16;e++){let e=this.palette[t[n++]];this.pixels[r++]=e,this.pixels[r++]=e}for(let e=0;e<32;e++){let e=t[n++];const i=t[n++];let s,a;128&i&&16&this.flashPhase?(a=this.palette[(64&i)>>3|7&i],s=this.palette[(120&i)>>3]):(s=this.palette[(64&i)>>3|7&i],a=this.palette[(120&i)>>3]);for(let t=0;t<8;t++)this.pixels[r++]=128&e?s:a,e<<=1}for(let e=0;e<16;e++){let e=this.palette[t[n++]];this.pixels[r++]=e,this.pixels[r++]=e}}for(let e=0;e<24;e++)for(let e=0;e<160;e++){let e=this.palette[t[n++]];this.pixels[r++]=e,this.pixels[r++]=e}this.ctx.putImageData(this.imageData,0,0),this.flashPhase=this.flashPhase+1&31}}class a{constructor(e){this.renderer=new s(e),this.frameBuffers=[new ArrayBuffer(i),new ArrayBuffer(i),new ArrayBuffer(i)],this.bufferBeingShown=null,this.bufferAwaitingShow=null,this.lockedBuffer=null}frameCompleted(e){this.frameBuffers[this.lockedBuffer]=e,this.bufferAwaitingShow=this.lockedBuffer,this.lockedBuffer=null}getNextFrameBufferIndex(){for(let e=0;e<3;e++)if(e!==this.bufferBeingShown&&e!==this.bufferAwaitingShow)return e}getNextFrameBuffer(){return this.lockedBuffer=this.getNextFrameBufferIndex(),this.frameBuffers[this.lockedBuffer]}readyToShow(){return null!==this.bufferAwaitingShow}show(){this.bufferBeingShown=this.bufferAwaitingShow,this.bufferAwaitingShow=null,this.renderer.showFrame(this.frameBuffers[this.bufferBeingShown]),this.bufferBeingShown=null}}var o=r(917),l=r(88);class h{constructor(e){this.elem=document.createElement("div"),this.elem.style.display="flow-root",this.elem.style.backgroundColor="#eee",this.elem.style.fontFamily="Arial, Helvetica, sans-serif",this.elem.style.top="0",this.elem.style.width="100%",e.appendChild(this.elem),this.currentMouseenterEvent=null,this.currentMouseoutEvent=null}addMenu(e){return new d(this.elem,e)}enterFullscreen(){this.elem.style.position="absolute"}exitFullscreen(){this.elem.style.position="static"}show(){this.elem.style.visibility="visible"}hide(){this.elem.style.visibility="hidden"}onmouseenter(e){this.currentMouseenterEvent&&this.elem.removeEventListener("mouseenter",this.currentMouseenterEvent),e&&this.elem.addEventListener("mouseenter",e),this.currentMouseenterEvent=e}onmouseout(e){this.currentMouseoutEvent&&this.elem.removeEventListener("mouseleave",this.currentMouseoutEvent),e&&this.elem.addEventListener("mouseleave",e),this.currentMouseoutEvent=e}}class d{constructor(e,t){const r=document.createElement("div");r.style.float="left",r.style.position="relative",e.appendChild(r);const n=document.createElement("button");n.style.margin="2px",n.innerText=t,r.appendChild(n),this.list=document.createElement("ul"),this.list.style.position="absolute",this.list.style.width="150px",this.list.style.backgroundColor="#eee",this.list.style.listStyleType="none",this.list.style.margin="0",this.list.style.padding="0",this.list.style.border="1px solid #888",this.list.style.display="none",r.appendChild(this.list),n.addEventListener("click",(()=>{this.isOpen()?this.close():this.open()})),document.addEventListener("click",(e=>{e.target!=n&&this.isOpen()&&this.close()}))}isOpen(){return"block"==this.list.style.display}open(){this.list.style.display="block"}close(){this.list.style.display="none"}addItem(e,t){const r=document.createElement("li");this.list.appendChild(r);const n=document.createElement("button");return n.innerText=e,n.style.width="100%",n.style.textAlign="left",n.style.borderWidth="0",n.style.paddingTop="4px",n.style.paddingBottom="4px",n.addEventListener("mouseenter",(()=>{n.style.backgroundColor="#ddd"})),n.addEventListener("mouseout",(()=>{n.style.backgroundColor="inherit"})),t&&n.addEventListener("click",t),r.appendChild(n),{setBullet:()=>{n.innerText=String.fromCharCode(8226)+" "+e},unsetBullet:()=>{n.innerText=e},setCheckbox:()=>{n.innerText=String.fromCharCode(10003)+" "+e},unsetCheckbox:()=>{n.innerText=e}}}}class u{constructor(e){this.elem=document.createElement("div"),this.elem.style.backgroundColor="#ccc",this.elem.style.bottom="0",this.elem.style.width="100%",e.appendChild(this.elem),this.currentMouseenterEvent=null,this.currentMouseoutEvent=null}addButton(e,t,r){const n=new c(e,t=t||{},r);return"right"==t.align&&(n.elem.style.float="right"),this.elem.appendChild(n.elem),n}enterFullscreen(){this.elem.style.position="absolute"}exitFullscreen(){this.elem.style.position="static"}show(){this.elem.style.visibility="visible"}hide(){this.elem.style.visibility="hidden"}onmouseenter(e){this.currentMouseenterEvent&&this.elem.removeEventListener("mouseenter",this.currentMouseenterEvent),e&&this.elem.addEventListener("mouseenter",e),this.currentMouseenterEvent=e}onmouseout(e){this.currentMouseoutEvent&&this.elem.removeEventListener("mouseleave",this.currentMouseoutEvent),e&&this.elem.addEventListener("mouseleave",e),this.currentMouseoutEvent=e}}class c{constructor(e,t,r){this.elem=document.createElement("button"),this.elem.style.margin="2px",this.setIcon(e),t.label&&this.setLabel(t.label),this.elem.addEventListener("click",r)}setIcon(e){this.elem.innerHTML=e,this.elem.firstChild.style.height="20px",this.elem.firstChild.style.verticalAlign="middle"}setLabel(e){this.elem.title=e}disable(){this.elem.disabled=!0,this.elem.firstChild.style.opacity="0.5"}enable(){this.elem.disabled=!1,this.elem.firstChild.style.opacity="1"}}class f extends e{constructor(e,t,r){if(super(),this.canvas=t.canvas,this.uiEnabled=!("uiEnabled"in r)||r.uiEnabled,this.uiEnabled){this.dialog=document.createElement("div"),this.dialog.style.display="none",e.appendChild(this.dialog);const t=document.createElement("button");t.innerHTML=l,t.style.float="right",t.style.border="none",t.firstChild.style.height="20px",t.firstChild.style.verticalAlign="middle",this.dialog.appendChild(t),t.addEventListener("click",(()=>{this.hideDialog()})),this.dialogBody=document.createElement("div"),this.dialogBody.style.clear="both",this.dialog.appendChild(this.dialogBody)}this.appContainer=document.createElement("div"),e.appendChild(this.appContainer),this.appContainer.style.position="relative",this.appContainer.style.outline="none",this.uiEnabled&&(this.menuBar=new h(this.appContainer)),this.appContainer.appendChild(this.canvas),this.canvas.style.objectFit="contain",this.canvas.style.display="block",this.uiEnabled&&(this.toolbar=new u(this.appContainer)),this.startButton=document.createElement("button"),this.startButton.innerHTML=o,this.appContainer.appendChild(this.startButton),this.startButton.style.position="absolute",this.startButton.style.top="50%",this.startButton.style.left="50%",this.startButton.style.width="96px",this.startButton.style.height="64px",this.startButton.style.marginLeft="-48px",this.startButton.style.marginTop="-32px",this.startButton.style.backgroundColor="rgba(160, 160, 160, 0.7)",this.startButton.style.border="none",this.startButton.style.borderRadius="4px",this.startButton.firstChild.style.height="56px",this.startButton.firstChild.style.verticalAlign="middle",this.startButton.addEventListener("mouseenter",(()=>{this.startButton.style.backgroundColor="rgba(128, 128, 128, 0.7)"})),this.startButton.addEventListener("mouseleave",(()=>{this.startButton.style.backgroundColor="rgba(160, 160, 160, 0.7)"})),this.startButton.addEventListener("click",(e=>{t.start()})),t.on("start",(()=>{this.startButton.style.display="none"})),t.on("pause",(()=>{this.startButton.style.display="block"})),this.zoom=null,this.isFullscreen=!1,this.uiIsHidden=!1,this.allowUIHiding=!0,this.hideUITimeout=null,this.ignoreNextMouseMove=!1;const n=()=>{this.ignoreNextMouseMove?this.ignoreNextMouseMove=!1:(this.showUI(),this.hideUITimeout&&clearTimeout(this.hideUITimeout),this.hideUITimeout=setTimeout((()=>{this.hideUI()}),3e3))};this.appContainer.addEventListener("fullscreenchange",(()=>{document.fullscreenElement?(this.isFullscreen=!0,this.canvas.style.width="100%",this.canvas.style.height="100%",this.uiEnabled&&(document.addEventListener("mousemove",n),this.ignoreNextMouseMove=!0,this.menuBar.enterFullscreen(),this.menuBar.onmouseenter((()=>{this.allowUIHiding=!1})),this.menuBar.onmouseout((()=>{this.allowUIHiding=!0})),this.toolbar.enterFullscreen(),this.toolbar.onmouseenter((()=>{this.allowUIHiding=!1})),this.toolbar.onmouseout((()=>{this.allowUIHiding=!0})),this.hideUI()),this.emit("setZoom","fullscreen"),t.focus()):(this.isFullscreen=!1,this.uiEnabled&&(this.hideUITimeout&&clearTimeout(this.hideUITimeout),this.showUI(),this.menuBar.exitFullscreen(),this.menuBar.onmouseenter(null),this.menuBar.onmouseout(null),this.toolbar.exitFullscreen(),this.toolbar.onmouseenter(null),this.toolbar.onmouseout(null),document.removeEventListener("mousemove",n)),this.setZoom(this.zoom))})),this.setZoom(r.zoom||1),r.sandbox||(this.appContainer.addEventListener("drop",(e=>{e.preventDefault();let r=Promise.resolve();if(e.dataTransfer.items){for(const n of e.dataTransfer.items)if("file"===n.kind){const e=n.getAsFile();r=r.then((()=>{t.openFile(e)}))}}else for(const n of e.dataTransfer.files)r=r.then((()=>{t.openFile(n)}));r.then((()=>{t.isInitiallyPaused&&t.start()}))})),this.appContainer.addEventListener("dragover",(e=>{e.preventDefault()})))}setZoom(e){if(this.zoom=e,this.isFullscreen)return void document.exitFullscreen();const t=320*this.zoom,r=240*this.zoom;this.canvas.style.width=t+"px",this.canvas.style.height=r+"px",this.appContainer.style.width=t+"px",this.emit("setZoom",e)}enterFullscreen(){this.appContainer.requestFullscreen()}exitFullscreen(){this.isFullscreen&&document.exitFullscreen()}toggleFullscreen(){this.isFullscreen?this.exitFullscreen():this.enterFullscreen()}hideUI(){this.uiEnabled&&this.allowUIHiding&&!this.uiIsHidden&&(this.uiIsHidden=!0,this.appContainer.style.cursor="none",this.menuBar.hide(),this.toolbar.hide())}showUI(){this.uiEnabled&&this.uiIsHidden&&(this.uiIsHidden=!1,this.appContainer.style.cursor="default",this.menuBar.show(),this.toolbar.show())}showDialog(){return this.dialog.style.display="block",this.dialog.style.position="absolute",this.dialog.style.backgroundColor="#eee",this.dialog.style.zIndex="100",this.dialog.style.width="75%",this.dialog.style.height="80%",this.dialog.style.left="12%",this.dialog.style.top="10%",this.dialog.style.overflow="scroll",this.dialogBody.style.paddingLeft="8px",this.dialogBody.style.paddingRight="8px",this.dialogBody.style.paddingBottom="8px",this.dialogBody}hideDialog(){this.dialog.style.display="none",this.dialogBody.innerHTML=""}unload(){this.uiEnabled&&this.dialog.remove(),this.appContainer.remove()}}function p(e){let t=e.length;for(;--t>=0;)e[t]=0}const m=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),_=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),g=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),w=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),b=new Array(576);p(b);const y=new Array(60);p(y);const v=new Array(512);p(v);const k=new Array(256);p(k);const x=new Array(29);p(x);const E=new Array(30);function S(e,t,r,n,i){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=n,this.max_length=i,this.has_stree=e&&e.length}let C,A,z;function B(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}p(E);const U=e=>e<256?v[e]:v[256+(e>>>7)],I=(e,t)=>{e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255},T=(e,t,r)=>{e.bi_valid>16-r?(e.bi_buf|=t<>16-e.bi_valid,e.bi_valid+=r-16):(e.bi_buf|=t<{T(e,r[2*t],r[2*t+1])},R=(e,t)=>{let r=0;do{r|=1&e,e>>>=1,r<<=1}while(--t>0);return r>>>1},L=(e,t,r)=>{const n=new Array(16);let i,s,a=0;for(i=1;i<=15;i++)n[i]=a=a+r[i-1]<<1;for(s=0;s<=t;s++){let t=e[2*s+1];0!==t&&(e[2*s]=R(n[t]++,t))}},O=e=>{let t;for(t=0;t<286;t++)e.dyn_ltree[2*t]=0;for(t=0;t<30;t++)e.dyn_dtree[2*t]=0;for(t=0;t<19;t++)e.bl_tree[2*t]=0;e.dyn_ltree[512]=1,e.opt_len=e.static_len=0,e.last_lit=e.matches=0},P=e=>{e.bi_valid>8?I(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0},D=(e,t,r,n)=>{const i=2*t,s=2*r;return e[i]{const n=e.heap[r];let i=r<<1;for(;i<=e.heap_len&&(i{let n,i,s,a,o=0;if(0!==e.last_lit)do{n=e.pending_buf[e.d_buf+2*o]<<8|e.pending_buf[e.d_buf+2*o+1],i=e.pending_buf[e.l_buf+o],o++,0===n?F(e,i,t):(s=k[i],F(e,s+256+1,t),a=m[s],0!==a&&(i-=x[s],T(e,i,a)),n--,s=U(n),F(e,s,r),a=_[s],0!==a&&(n-=E[s],T(e,n,a)))}while(o{const r=t.dyn_tree,n=t.stat_desc.static_tree,i=t.stat_desc.has_stree,s=t.stat_desc.elems;let a,o,l,h=-1;for(e.heap_len=0,e.heap_max=573,a=0;a>1;a>=1;a--)N(e,r,a);l=s;do{a=e.heap[1],e.heap[1]=e.heap[e.heap_len--],N(e,r,1),o=e.heap[1],e.heap[--e.heap_max]=a,e.heap[--e.heap_max]=o,r[2*l]=r[2*a]+r[2*o],e.depth[l]=(e.depth[a]>=e.depth[o]?e.depth[a]:e.depth[o])+1,r[2*a+1]=r[2*o+1]=l,e.heap[1]=l++,N(e,r,1)}while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],((e,t)=>{const r=t.dyn_tree,n=t.max_code,i=t.stat_desc.static_tree,s=t.stat_desc.has_stree,a=t.stat_desc.extra_bits,o=t.stat_desc.extra_base,l=t.stat_desc.max_length;let h,d,u,c,f,p,m=0;for(c=0;c<=15;c++)e.bl_count[c]=0;for(r[2*e.heap[e.heap_max]+1]=0,h=e.heap_max+1;h<573;h++)d=e.heap[h],c=r[2*r[2*d+1]+1]+1,c>l&&(c=l,m++),r[2*d+1]=c,d>n||(e.bl_count[c]++,f=0,d>=o&&(f=a[d-o]),p=r[2*d],e.opt_len+=p*(c+f),s&&(e.static_len+=p*(i[2*d+1]+f)));if(0!==m){do{for(c=l-1;0===e.bl_count[c];)c--;e.bl_count[c]--,e.bl_count[c+1]+=2,e.bl_count[l]--,m-=2}while(m>0);for(c=l;0!==c;c--)for(d=e.bl_count[c];0!==d;)u=e.heap[--h],u>n||(r[2*u+1]!==c&&(e.opt_len+=(c-r[2*u+1])*r[2*u],r[2*u+1]=c),d--)}})(e,t),L(r,h,e.bl_count)},H=(e,t,r)=>{let n,i,s=-1,a=t[1],o=0,l=7,h=4;for(0===a&&(l=138,h=3),t[2*(r+1)+1]=65535,n=0;n<=r;n++)i=a,a=t[2*(n+1)+1],++o{let n,i,s=-1,a=t[1],o=0,l=7,h=4;for(0===a&&(l=138,h=3),n=0;n<=r;n++)if(i=a,a=t[2*(n+1)+1],!(++o{T(e,0+(n?1:0),3),((e,t,r,n)=>{P(e),I(e,r),I(e,~r),e.pending_buf.set(e.window.subarray(t,t+r),e.pending),e.pending+=r})(e,t,r)};var V={_tr_init:e=>{W||((()=>{let e,t,r,n,i;const s=new Array(16);for(r=0,n=0;n<28;n++)for(x[n]=r,e=0;e<1<>=7;n<30;n++)for(E[n]=i<<7,e=0;e<1<<_[n]-7;e++)v[256+i++]=n;for(t=0;t<=15;t++)s[t]=0;for(e=0;e<=143;)b[2*e+1]=8,e++,s[8]++;for(;e<=255;)b[2*e+1]=9,e++,s[9]++;for(;e<=279;)b[2*e+1]=7,e++,s[7]++;for(;e<=287;)b[2*e+1]=8,e++,s[8]++;for(L(b,287,s),e=0;e<30;e++)y[2*e+1]=5,y[2*e]=R(e,5);C=new S(b,m,257,286,15),A=new S(y,_,0,30,15),z=new S(new Array(0),g,0,19,7)})(),W=!0),e.l_desc=new B(e.dyn_ltree,C),e.d_desc=new B(e.dyn_dtree,A),e.bl_desc=new B(e.bl_tree,z),e.bi_buf=0,e.bi_valid=0,O(e)},_tr_stored_block:K,_tr_flush_block:(e,t,r,n)=>{let i,s,a=0;e.level>0?(2===e.strm.data_type&&(e.strm.data_type=(e=>{let t,r=4093624447;for(t=0;t<=31;t++,r>>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return 0;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return 1;for(t=32;t<256;t++)if(0!==e.dyn_ltree[2*t])return 1;return 0})(e)),Z(e,e.l_desc),Z(e,e.d_desc),a=(e=>{let t;for(H(e,e.dyn_ltree,e.l_desc.max_code),H(e,e.dyn_dtree,e.d_desc.max_code),Z(e,e.bl_desc),t=18;t>=3&&0===e.bl_tree[2*w[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t})(e),i=e.opt_len+3+7>>>3,s=e.static_len+3+7>>>3,s<=i&&(i=s)):i=s=r+5,r+4<=i&&-1!==t?K(e,t,r,n):4===e.strategy||s===i?(T(e,2+(n?1:0),3),M(e,b,y)):(T(e,4+(n?1:0),3),((e,t,r,n)=>{let i;for(T(e,t-257,5),T(e,r-1,5),T(e,n-4,4),i=0;i(e.pending_buf[e.d_buf+2*e.last_lit]=t>>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(k[r]+256+1)]++,e.dyn_dtree[2*U(t)]++),e.last_lit===e.lit_bufsize-1),_tr_align:e=>{T(e,2,3),F(e,256,b),(e=>{16===e.bi_valid?(I(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)})(e)}},G=(e,t,r,n)=>{let i=65535&e|0,s=e>>>16&65535|0,a=0;for(;0!==r;){a=r>2e3?2e3:r,r-=a;do{i=i+t[n++]|0,s=s+i|0}while(--a);i%=65521,s%=65521}return i|s<<16|0};const X=new Uint32Array((()=>{let e,t=[];for(var r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t})());var Y=(e,t,r,n)=>{const i=X,s=n+r;e^=-1;for(let r=n;r>>8^i[255&(e^t[r])];return-1^e},q={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},J={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8};const{_tr_init:Q,_tr_stored_block:$,_tr_flush_block:ee,_tr_tally:te,_tr_align:re}=V,{Z_NO_FLUSH:ne,Z_PARTIAL_FLUSH:ie,Z_FULL_FLUSH:se,Z_FINISH:ae,Z_BLOCK:oe,Z_OK:le,Z_STREAM_END:he,Z_STREAM_ERROR:de,Z_DATA_ERROR:ue,Z_BUF_ERROR:ce,Z_DEFAULT_COMPRESSION:fe,Z_FILTERED:pe,Z_HUFFMAN_ONLY:me,Z_RLE:_e,Z_FIXED:ge,Z_DEFAULT_STRATEGY:we,Z_UNKNOWN:be,Z_DEFLATED:ye}=J,ve=258,ke=262,xe=103,Ee=113,Se=666,Ce=(e,t)=>(e.msg=q[t],t),Ae=e=>(e<<1)-(e>4?9:0),ze=e=>{let t=e.length;for(;--t>=0;)e[t]=0};let Be=(e,t,r)=>(t<{const t=e.state;let r=t.pending;r>e.avail_out&&(r=e.avail_out),0!==r&&(e.output.set(t.pending_buf.subarray(t.pending_out,t.pending_out+r),e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))},Ie=(e,t)=>{ee(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,Ue(e.strm)},Te=(e,t)=>{e.pending_buf[e.pending++]=t},Fe=(e,t)=>{e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t},Re=(e,t,r,n)=>{let i=e.avail_in;return i>n&&(i=n),0===i?0:(e.avail_in-=i,t.set(e.input.subarray(e.next_in,e.next_in+i),r),1===e.state.wrap?e.adler=G(e.adler,t,i,r):2===e.state.wrap&&(e.adler=Y(e.adler,t,i,r)),e.next_in+=i,e.total_in+=i,i)},Le=(e,t)=>{let r,n,i=e.max_chain_length,s=e.strstart,a=e.prev_length,o=e.nice_match;const l=e.strstart>e.w_size-ke?e.strstart-(e.w_size-ke):0,h=e.window,d=e.w_mask,u=e.prev,c=e.strstart+ve;let f=h[s+a-1],p=h[s+a];e.prev_length>=e.good_match&&(i>>=2),o>e.lookahead&&(o=e.lookahead);do{if(r=t,h[r+a]===p&&h[r+a-1]===f&&h[r]===h[s]&&h[++r]===h[s+1]){s+=2,r++;do{}while(h[++s]===h[++r]&&h[++s]===h[++r]&&h[++s]===h[++r]&&h[++s]===h[++r]&&h[++s]===h[++r]&&h[++s]===h[++r]&&h[++s]===h[++r]&&h[++s]===h[++r]&&sa){if(e.match_start=t,a=n,n>=o)break;f=h[s+a-1],p=h[s+a]}}}while((t=u[t&d])>l&&0!=--i);return a<=e.lookahead?a:e.lookahead},Oe=e=>{const t=e.w_size;let r,n,i,s,a;do{if(s=e.window_size-e.lookahead-e.strstart,e.strstart>=t+(t-ke)){e.window.set(e.window.subarray(t,t+t),0),e.match_start-=t,e.strstart-=t,e.block_start-=t,n=e.hash_size,r=n;do{i=e.head[--r],e.head[r]=i>=t?i-t:0}while(--n);n=t,r=n;do{i=e.prev[--r],e.prev[r]=i>=t?i-t:0}while(--n);s+=t}if(0===e.strm.avail_in)break;if(n=Re(e.strm,e.window,e.strstart+e.lookahead,s),e.lookahead+=n,e.lookahead+e.insert>=3)for(a=e.strstart-e.insert,e.ins_h=e.window[a],e.ins_h=Be(e,e.ins_h,e.window[a+1]);e.insert&&(e.ins_h=Be(e,e.ins_h,e.window[a+3-1]),e.prev[a&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=a,a++,e.insert--,!(e.lookahead+e.insert<3)););}while(e.lookahead{let r,n;for(;;){if(e.lookahead=3&&(e.ins_h=Be(e,e.ins_h,e.window[e.strstart+3-1]),r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!==r&&e.strstart-r<=e.w_size-ke&&(e.match_length=Le(e,r)),e.match_length>=3)if(n=te(e,e.strstart-e.match_start,e.match_length-3),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=3){e.match_length--;do{e.strstart++,e.ins_h=Be(e,e.ins_h,e.window[e.strstart+3-1]),r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart}while(0!=--e.match_length);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=Be(e,e.ins_h,e.window[e.strstart+1]);else n=te(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(n&&(Ie(e,!1),0===e.strm.avail_out))return 1}return e.insert=e.strstart<2?e.strstart:2,t===ae?(Ie(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(Ie(e,!1),0===e.strm.avail_out)?1:2},De=(e,t)=>{let r,n,i;for(;;){if(e.lookahead=3&&(e.ins_h=Be(e,e.ins_h,e.window[e.strstart+3-1]),r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=2,0!==r&&e.prev_length4096)&&(e.match_length=2)),e.prev_length>=3&&e.match_length<=e.prev_length){i=e.strstart+e.lookahead-3,n=te(e,e.strstart-1-e.prev_match,e.prev_length-3),e.lookahead-=e.prev_length-1,e.prev_length-=2;do{++e.strstart<=i&&(e.ins_h=Be(e,e.ins_h,e.window[e.strstart+3-1]),r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart)}while(0!=--e.prev_length);if(e.match_available=0,e.match_length=2,e.strstart++,n&&(Ie(e,!1),0===e.strm.avail_out))return 1}else if(e.match_available){if(n=te(e,0,e.window[e.strstart-1]),n&&Ie(e,!1),e.strstart++,e.lookahead--,0===e.strm.avail_out)return 1}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&(n=te(e,0,e.window[e.strstart-1]),e.match_available=0),e.insert=e.strstart<2?e.strstart:2,t===ae?(Ie(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(Ie(e,!1),0===e.strm.avail_out)?1:2};function Ne(e,t,r,n,i){this.good_length=e,this.max_lazy=t,this.nice_length=r,this.max_chain=n,this.func=i}const Me=[new Ne(0,0,0,0,((e,t)=>{let r=65535;for(r>e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(Oe(e),0===e.lookahead&&t===ne)return 1;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;const n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,Ie(e,!1),0===e.strm.avail_out))return 1;if(e.strstart-e.block_start>=e.w_size-ke&&(Ie(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,t===ae?(Ie(e,!0),0===e.strm.avail_out?3:4):(e.strstart>e.block_start&&(Ie(e,!1),e.strm.avail_out),1)})),new Ne(4,4,8,4,Pe),new Ne(4,5,16,8,Pe),new Ne(4,6,32,32,Pe),new Ne(4,4,16,16,De),new Ne(8,16,32,32,De),new Ne(8,16,128,128,De),new Ne(8,32,128,256,De),new Ne(32,128,258,1024,De),new Ne(32,258,258,4096,De)];function Ze(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=ye,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(1146),this.dyn_dtree=new Uint16Array(122),this.bl_tree=new Uint16Array(78),ze(this.dyn_ltree),ze(this.dyn_dtree),ze(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(16),this.heap=new Uint16Array(573),ze(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),ze(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}const He=e=>{if(!e||!e.state)return Ce(e,de);e.total_in=e.total_out=0,e.data_type=be;const t=e.state;return t.pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap?42:Ee,e.adler=2===t.wrap?0:1,t.last_flush=ne,Q(t),le},je=e=>{const t=He(e);var r;return t===le&&((r=e.state).window_size=2*r.w_size,ze(r.head),r.max_lazy_match=Me[r.level].max_lazy,r.good_match=Me[r.level].good_length,r.nice_match=Me[r.level].nice_length,r.max_chain_length=Me[r.level].max_chain,r.strstart=0,r.block_start=0,r.lookahead=0,r.insert=0,r.match_length=r.prev_length=2,r.match_available=0,r.ins_h=0),t},We=(e,t,r,n,i,s)=>{if(!e)return de;let a=1;if(t===fe&&(t=6),n<0?(a=0,n=-n):n>15&&(a=2,n-=16),i<1||i>9||r!==ye||n<8||n>15||t<0||t>9||s<0||s>ge)return Ce(e,de);8===n&&(n=9);const o=new Ze;return e.state=o,o.strm=e,o.wrap=a,o.gzhead=null,o.w_bits=n,o.w_size=1<e&&e.state?2!==e.state.wrap?de:(e.state.gzhead=t,le):de,Ge=(e,t)=>{let r,n;if(!e||!e.state||t>oe||t<0)return e?Ce(e,de):de;const i=e.state;if(!e.output||!e.input&&0!==e.avail_in||i.status===Se&&t!==ae)return Ce(e,0===e.avail_out?ce:de);i.strm=e;const s=i.last_flush;if(i.last_flush=t,42===i.status)if(2===i.wrap)e.adler=0,Te(i,31),Te(i,139),Te(i,8),i.gzhead?(Te(i,(i.gzhead.text?1:0)+(i.gzhead.hcrc?2:0)+(i.gzhead.extra?4:0)+(i.gzhead.name?8:0)+(i.gzhead.comment?16:0)),Te(i,255&i.gzhead.time),Te(i,i.gzhead.time>>8&255),Te(i,i.gzhead.time>>16&255),Te(i,i.gzhead.time>>24&255),Te(i,9===i.level?2:i.strategy>=me||i.level<2?4:0),Te(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(Te(i,255&i.gzhead.extra.length),Te(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(e.adler=Y(e.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=69):(Te(i,0),Te(i,0),Te(i,0),Te(i,0),Te(i,0),Te(i,9===i.level?2:i.strategy>=me||i.level<2?4:0),Te(i,3),i.status=Ee);else{let t=ye+(i.w_bits-8<<4)<<8,r=-1;r=i.strategy>=me||i.level<2?0:i.level<6?1:6===i.level?2:3,t|=r<<6,0!==i.strstart&&(t|=32),t+=31-t%31,i.status=Ee,Fe(i,t),0!==i.strstart&&(Fe(i,e.adler>>>16),Fe(i,65535&e.adler)),e.adler=1}if(69===i.status)if(i.gzhead.extra){for(r=i.pending;i.gzindex<(65535&i.gzhead.extra.length)&&(i.pending!==i.pending_buf_size||(i.gzhead.hcrc&&i.pending>r&&(e.adler=Y(e.adler,i.pending_buf,i.pending-r,r)),Ue(e),r=i.pending,i.pending!==i.pending_buf_size));)Te(i,255&i.gzhead.extra[i.gzindex]),i.gzindex++;i.gzhead.hcrc&&i.pending>r&&(e.adler=Y(e.adler,i.pending_buf,i.pending-r,r)),i.gzindex===i.gzhead.extra.length&&(i.gzindex=0,i.status=73)}else i.status=73;if(73===i.status)if(i.gzhead.name){r=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>r&&(e.adler=Y(e.adler,i.pending_buf,i.pending-r,r)),Ue(e),r=i.pending,i.pending===i.pending_buf_size)){n=1;break}n=i.gzindexr&&(e.adler=Y(e.adler,i.pending_buf,i.pending-r,r)),0===n&&(i.gzindex=0,i.status=91)}else i.status=91;if(91===i.status)if(i.gzhead.comment){r=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>r&&(e.adler=Y(e.adler,i.pending_buf,i.pending-r,r)),Ue(e),r=i.pending,i.pending===i.pending_buf_size)){n=1;break}n=i.gzindexr&&(e.adler=Y(e.adler,i.pending_buf,i.pending-r,r)),0===n&&(i.status=xe)}else i.status=xe;if(i.status===xe&&(i.gzhead.hcrc?(i.pending+2>i.pending_buf_size&&Ue(e),i.pending+2<=i.pending_buf_size&&(Te(i,255&e.adler),Te(i,e.adler>>8&255),e.adler=0,i.status=Ee)):i.status=Ee),0!==i.pending){if(Ue(e),0===e.avail_out)return i.last_flush=-1,le}else if(0===e.avail_in&&Ae(t)<=Ae(s)&&t!==ae)return Ce(e,ce);if(i.status===Se&&0!==e.avail_in)return Ce(e,ce);if(0!==e.avail_in||0!==i.lookahead||t!==ne&&i.status!==Se){let r=i.strategy===me?((e,t)=>{let r;for(;;){if(0===e.lookahead&&(Oe(e),0===e.lookahead)){if(t===ne)return 1;break}if(e.match_length=0,r=te(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(Ie(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,t===ae?(Ie(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(Ie(e,!1),0===e.strm.avail_out)?1:2})(i,t):i.strategy===_e?((e,t)=>{let r,n,i,s;const a=e.window;for(;;){if(e.lookahead<=ve){if(Oe(e),e.lookahead<=ve&&t===ne)return 1;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=3&&e.strstart>0&&(i=e.strstart-1,n=a[i],n===a[++i]&&n===a[++i]&&n===a[++i])){s=e.strstart+ve;do{}while(n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&ie.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=3?(r=te(e,1,e.match_length-3),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=te(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(Ie(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,t===ae?(Ie(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(Ie(e,!1),0===e.strm.avail_out)?1:2})(i,t):Me[i.level].func(i,t);if(3!==r&&4!==r||(i.status=Se),1===r||3===r)return 0===e.avail_out&&(i.last_flush=-1),le;if(2===r&&(t===ie?re(i):t!==oe&&($(i,0,0,!1),t===se&&(ze(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),Ue(e),0===e.avail_out))return i.last_flush=-1,le}return t!==ae?le:i.wrap<=0?he:(2===i.wrap?(Te(i,255&e.adler),Te(i,e.adler>>8&255),Te(i,e.adler>>16&255),Te(i,e.adler>>24&255),Te(i,255&e.total_in),Te(i,e.total_in>>8&255),Te(i,e.total_in>>16&255),Te(i,e.total_in>>24&255)):(Fe(i,e.adler>>>16),Fe(i,65535&e.adler)),Ue(e),i.wrap>0&&(i.wrap=-i.wrap),0!==i.pending?le:he)},Xe=e=>{if(!e||!e.state)return de;const t=e.state.status;return 42!==t&&69!==t&&73!==t&&91!==t&&t!==xe&&t!==Ee&&t!==Se?Ce(e,de):(e.state=null,t===Ee?Ce(e,ue):le)},Ye=(e,t)=>{let r=t.length;if(!e||!e.state)return de;const n=e.state,i=n.wrap;if(2===i||1===i&&42!==n.status||n.lookahead)return de;if(1===i&&(e.adler=G(e.adler,t,r,0)),n.wrap=0,r>=n.w_size){0===i&&(ze(n.head),n.strstart=0,n.block_start=0,n.insert=0);let e=new Uint8Array(n.w_size);e.set(t.subarray(r-n.w_size,r),0),t=e,r=n.w_size}const s=e.avail_in,a=e.next_in,o=e.input;for(e.avail_in=r,e.next_in=0,e.input=t,Oe(n);n.lookahead>=3;){let e=n.strstart,t=n.lookahead-2;do{n.ins_h=Be(n,n.ins_h,n.window[e+3-1]),n.prev[e&n.w_mask]=n.head[n.ins_h],n.head[n.ins_h]=e,e++}while(--t);n.strstart=e,n.lookahead=2,Oe(n)}return n.strstart+=n.lookahead,n.block_start=n.strstart,n.insert=n.lookahead,n.lookahead=0,n.match_length=n.prev_length=2,n.match_available=0,e.next_in=a,e.input=o,e.avail_in=s,n.wrap=i,le};const qe=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var Je=function(e){const t=Array.prototype.slice.call(arguments,1);for(;t.length;){const r=t.shift();if(r){if("object"!=typeof r)throw new TypeError(r+"must be non-object");for(const t in r)qe(r,t)&&(e[t]=r[t])}}return e},Qe=e=>{let t=0;for(let r=0,n=e.length;r=252?6:e>=248?5:e>=240?4:e>=224?3:e>=192?2:1;et[254]=et[254]=1;var tt=e=>{if("function"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(e);let t,r,n,i,s,a=e.length,o=0;for(i=0;i>>6,t[s++]=128|63&r):r<65536?(t[s++]=224|r>>>12,t[s++]=128|r>>>6&63,t[s++]=128|63&r):(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63,t[s++]=128|r>>>6&63,t[s++]=128|63&r);return t},rt=(e,t)=>{const r=t||e.length;if("function"==typeof TextDecoder&&TextDecoder.prototype.decode)return(new TextDecoder).decode(e.subarray(0,t));let n,i;const s=new Array(2*r);for(i=0,n=0;n4)s[i++]=65533,n+=a-1;else{for(t&=2===a?31:3===a?15:7;a>1&&n1?s[i++]=65533:t<65536?s[i++]=t:(t-=65536,s[i++]=55296|t>>10&1023,s[i++]=56320|1023&t)}}return((e,t)=>{if(t<65534&&e.subarray&&$e)return String.fromCharCode.apply(null,e.length===t?e:e.subarray(0,t));let r="";for(let n=0;n{(t=t||e.length)>e.length&&(t=e.length);let r=t-1;for(;r>=0&&128==(192&e[r]);)r--;return r<0||0===r?t:r+et[e[r]]>t?r:t},it=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0};const st=Object.prototype.toString,{Z_NO_FLUSH:at,Z_SYNC_FLUSH:ot,Z_FULL_FLUSH:lt,Z_FINISH:ht,Z_OK:dt,Z_STREAM_END:ut,Z_DEFAULT_COMPRESSION:ct,Z_DEFAULT_STRATEGY:ft,Z_DEFLATED:pt}=J;function mt(e){this.options=Je({level:ct,method:pt,chunkSize:16384,windowBits:15,memLevel:8,strategy:ft},e||{});let t=this.options;t.raw&&t.windowBits>0?t.windowBits=-t.windowBits:t.gzip&&t.windowBits>0&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new it,this.strm.avail_out=0;let r=Ke(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(r!==dt)throw new Error(q[r]);if(t.header&&Ve(this.strm,t.header),t.dictionary){let e;if(e="string"==typeof t.dictionary?tt(t.dictionary):"[object ArrayBuffer]"===st.call(t.dictionary)?new Uint8Array(t.dictionary):t.dictionary,r=Ye(this.strm,e),r!==dt)throw new Error(q[r]);this._dict_set=!0}}function _t(e,t){const r=new mt(t);if(r.push(e,!0),r.err)throw r.msg||q[r.err];return r.result}mt.prototype.push=function(e,t){const r=this.strm,n=this.options.chunkSize;let i,s;if(this.ended)return!1;for(s=t===~~t?t:!0===t?ht:at,"string"==typeof e?r.input=tt(e):"[object ArrayBuffer]"===st.call(e)?r.input=new Uint8Array(e):r.input=e,r.next_in=0,r.avail_in=r.input.length;;)if(0===r.avail_out&&(r.output=new Uint8Array(n),r.next_out=0,r.avail_out=n),(s===ot||s===lt)&&r.avail_out<=6)this.onData(r.output.subarray(0,r.next_out)),r.avail_out=0;else{if(i=Ge(r,s),i===ut)return r.next_out>0&&this.onData(r.output.subarray(0,r.next_out)),i=Xe(this.strm),this.onEnd(i),this.ended=!0,i===dt;if(0!==r.avail_out){if(s>0&&r.next_out>0)this.onData(r.output.subarray(0,r.next_out)),r.avail_out=0;else if(0===r.avail_in)break}else this.onData(r.output)}return!0},mt.prototype.onData=function(e){this.chunks.push(e)},mt.prototype.onEnd=function(e){e===dt&&(this.result=Qe(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};var gt={Deflate:mt,deflate:_t,deflateRaw:function(e,t){return(t=t||{}).raw=!0,_t(e,t)},gzip:function(e,t){return(t=t||{}).gzip=!0,_t(e,t)},constants:J},wt=function(e,t){let r,n,i,s,a,o,l,h,d,u,c,f,p,m,_,g,w,b,y,v,k,x,E,S;const C=e.state;r=e.next_in,E=e.input,n=r+(e.avail_in-5),i=e.next_out,S=e.output,s=i-(t-e.avail_out),a=i+(e.avail_out-257),o=C.dmax,l=C.wsize,h=C.whave,d=C.wnext,u=C.window,c=C.hold,f=C.bits,p=C.lencode,m=C.distcode,_=(1<>>24,c>>>=b,f-=b,b=w>>>16&255,0===b)S[i++]=65535&w;else{if(!(16&b)){if(0==(64&b)){w=p[(65535&w)+(c&(1<>>=b,f-=b),f<15&&(c+=E[r++]<>>24,c>>>=b,f-=b,b=w>>>16&255,!(16&b)){if(0==(64&b)){w=m[(65535&w)+(c&(1<o){e.msg="invalid distance too far back",C.mode=30;break e}if(c>>>=b,f-=b,b=i-s,v>b){if(b=v-b,b>h&&C.sane){e.msg="invalid distance too far back",C.mode=30;break e}if(k=0,x=u,0===d){if(k+=l-b,b2;)S[i++]=x[k++],S[i++]=x[k++],S[i++]=x[k++],y-=3;y&&(S[i++]=x[k++],y>1&&(S[i++]=x[k++]))}else{k=i-v;do{S[i++]=S[k++],S[i++]=S[k++],S[i++]=S[k++],y-=3}while(y>2);y&&(S[i++]=S[k++],y>1&&(S[i++]=S[k++]))}break}}break}}while(r>3,r-=y,f-=y<<3,c&=(1<{const l=o.bits;let h,d,u,c,f,p,m=0,_=0,g=0,w=0,b=0,y=0,v=0,k=0,x=0,E=0,S=null,C=0;const A=new Uint16Array(16),z=new Uint16Array(16);let B,U,I,T=null,F=0;for(m=0;m<=15;m++)A[m]=0;for(_=0;_=1&&0===A[w];w--);if(b>w&&(b=w),0===w)return i[s++]=20971520,i[s++]=20971520,o.bits=1,0;for(g=1;g0&&(0===e||1!==w))return-1;for(z[1]=0,m=1;m<15;m++)z[m+1]=z[m]+A[m];for(_=0;_852||2===e&&x>592)return 1;for(;;){B=m-v,a[_]p?(U=T[F+a[_]],I=S[C+a[_]]):(U=96,I=0),h=1<>v)+d]=B<<24|U<<16|I|0}while(0!==d);for(h=1<>=1;if(0!==h?(E&=h-1,E+=h):E=0,_++,0==--A[m]){if(m===w)break;m=t[r+a[_]]}if(m>b&&(E&c)!==u){for(0===v&&(v=b),f+=g,y=m-v,k=1<852||2===e&&x>592)return 1;u=E&c,i[u]=b<<24|y<<16|f-s|0}}return 0!==E&&(i[f+E]=m-v<<24|64<<16|0),o.bits=b,0};const{Z_FINISH:Et,Z_BLOCK:St,Z_TREES:Ct,Z_OK:At,Z_STREAM_END:zt,Z_NEED_DICT:Bt,Z_STREAM_ERROR:Ut,Z_DATA_ERROR:It,Z_MEM_ERROR:Tt,Z_BUF_ERROR:Ft,Z_DEFLATED:Rt}=J,Lt=12,Ot=30,Pt=e=>(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24);function Dt(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}const Nt=e=>{if(!e||!e.state)return Ut;const t=e.state;return e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=1,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new Int32Array(852),t.distcode=t.distdyn=new Int32Array(592),t.sane=1,t.back=-1,At},Mt=e=>{if(!e||!e.state)return Ut;const t=e.state;return t.wsize=0,t.whave=0,t.wnext=0,Nt(e)},Zt=(e,t)=>{let r;if(!e||!e.state)return Ut;const n=e.state;return t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?Ut:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=r,n.wbits=t,Mt(e))},Ht=(e,t)=>{if(!e)return Ut;const r=new Dt;e.state=r,r.window=null;const n=Zt(e,t);return n!==At&&(e.state=null),n};let jt,Wt,Kt=!0;const Vt=e=>{if(Kt){jt=new Int32Array(512),Wt=new Int32Array(32);let t=0;for(;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(xt(1,e.lens,0,288,jt,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;xt(2,e.lens,0,32,Wt,0,e.work,{bits:5}),Kt=!1}e.lencode=jt,e.lenbits=9,e.distcode=Wt,e.distbits=5},Gt=(e,t,r,n)=>{let i;const s=e.state;return null===s.window&&(s.wsize=1<=s.wsize?(s.window.set(t.subarray(r-s.wsize,r),0),s.wnext=0,s.whave=s.wsize):(i=s.wsize-s.wnext,i>n&&(i=n),s.window.set(t.subarray(r-n,r-n+i),s.wnext),(n-=i)?(s.window.set(t.subarray(r-n,r),0),s.wnext=n,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave{let r,n,i,s,a,o,l,h,d,u,c,f,p,m,_,g,w,b,y,v,k,x,E=0;const S=new Uint8Array(4);let C,A;const z=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return Ut;r=e.state,r.mode===Lt&&(r.mode=13),a=e.next_out,i=e.output,l=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,h=r.hold,d=r.bits,u=o,c=l,x=At;e:for(;;)switch(r.mode){case 1:if(0===r.wrap){r.mode=13;break}for(;d<16;){if(0===o)break e;o--,h+=n[s++]<>>8&255,r.check=Y(r.check,S,2,0),h=0,d=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&h)<<8)+(h>>8))%31){e.msg="incorrect header check",r.mode=Ot;break}if((15&h)!==Rt){e.msg="unknown compression method",r.mode=Ot;break}if(h>>>=4,d-=4,k=8+(15&h),0===r.wbits)r.wbits=k;else if(k>r.wbits){e.msg="invalid window size",r.mode=Ot;break}r.dmax=1<>8&1),512&r.flags&&(S[0]=255&h,S[1]=h>>>8&255,r.check=Y(r.check,S,2,0)),h=0,d=0,r.mode=3;case 3:for(;d<32;){if(0===o)break e;o--,h+=n[s++]<>>8&255,S[2]=h>>>16&255,S[3]=h>>>24&255,r.check=Y(r.check,S,4,0)),h=0,d=0,r.mode=4;case 4:for(;d<16;){if(0===o)break e;o--,h+=n[s++]<>8),512&r.flags&&(S[0]=255&h,S[1]=h>>>8&255,r.check=Y(r.check,S,2,0)),h=0,d=0,r.mode=5;case 5:if(1024&r.flags){for(;d<16;){if(0===o)break e;o--,h+=n[s++]<>>8&255,r.check=Y(r.check,S,2,0)),h=0,d=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(f=r.length,f>o&&(f=o),f&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Uint8Array(r.head.extra_len)),r.head.extra.set(n.subarray(s,s+f),k)),512&r.flags&&(r.check=Y(r.check,n,f,s)),o-=f,s+=f,r.length-=f),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break e;f=0;do{k=n[s+f++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k))}while(k&&f>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=Lt;break;case 10:for(;d<32;){if(0===o)break e;o--,h+=n[s++]<>>=7&d,d-=7&d,r.mode=27;break}for(;d<3;){if(0===o)break e;o--,h+=n[s++]<>>=1,d-=1,3&h){case 0:r.mode=14;break;case 1:if(Vt(r),r.mode=20,t===Ct){h>>>=2,d-=2;break e}break;case 2:r.mode=17;break;case 3:e.msg="invalid block type",r.mode=Ot}h>>>=2,d-=2;break;case 14:for(h>>>=7&d,d-=7&d;d<32;){if(0===o)break e;o--,h+=n[s++]<>>16^65535)){e.msg="invalid stored block lengths",r.mode=Ot;break}if(r.length=65535&h,h=0,d=0,r.mode=15,t===Ct)break e;case 15:r.mode=16;case 16:if(f=r.length,f){if(f>o&&(f=o),f>l&&(f=l),0===f)break e;i.set(n.subarray(s,s+f),a),o-=f,s+=f,l-=f,a+=f,r.length-=f;break}r.mode=Lt;break;case 17:for(;d<14;){if(0===o)break e;o--,h+=n[s++]<>>=5,d-=5,r.ndist=1+(31&h),h>>>=5,d-=5,r.ncode=4+(15&h),h>>>=4,d-=4,r.nlen>286||r.ndist>30){e.msg="too many length or distance symbols",r.mode=Ot;break}r.have=0,r.mode=18;case 18:for(;r.have>>=3,d-=3}for(;r.have<19;)r.lens[z[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,C={bits:r.lenbits},x=xt(0,r.lens,0,19,r.lencode,0,r.work,C),r.lenbits=C.bits,x){e.msg="invalid code lengths set",r.mode=Ot;break}r.have=0,r.mode=19;case 19:for(;r.have>>24,g=E>>>16&255,w=65535&E,!(_<=d);){if(0===o)break e;o--,h+=n[s++]<>>=_,d-=_,r.lens[r.have++]=w;else{if(16===w){for(A=_+2;d>>=_,d-=_,0===r.have){e.msg="invalid bit length repeat",r.mode=Ot;break}k=r.lens[r.have-1],f=3+(3&h),h>>>=2,d-=2}else if(17===w){for(A=_+3;d>>=_,d-=_,k=0,f=3+(7&h),h>>>=3,d-=3}else{for(A=_+7;d>>=_,d-=_,k=0,f=11+(127&h),h>>>=7,d-=7}if(r.have+f>r.nlen+r.ndist){e.msg="invalid bit length repeat",r.mode=Ot;break}for(;f--;)r.lens[r.have++]=k}}if(r.mode===Ot)break;if(0===r.lens[256]){e.msg="invalid code -- missing end-of-block",r.mode=Ot;break}if(r.lenbits=9,C={bits:r.lenbits},x=xt(1,r.lens,0,r.nlen,r.lencode,0,r.work,C),r.lenbits=C.bits,x){e.msg="invalid literal/lengths set",r.mode=Ot;break}if(r.distbits=6,r.distcode=r.distdyn,C={bits:r.distbits},x=xt(2,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,C),r.distbits=C.bits,x){e.msg="invalid distances set",r.mode=Ot;break}if(r.mode=20,t===Ct)break e;case 20:r.mode=21;case 21:if(o>=6&&l>=258){e.next_out=a,e.avail_out=l,e.next_in=s,e.avail_in=o,r.hold=h,r.bits=d,wt(e,c),a=e.next_out,i=e.output,l=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,h=r.hold,d=r.bits,r.mode===Lt&&(r.back=-1);break}for(r.back=0;E=r.lencode[h&(1<>>24,g=E>>>16&255,w=65535&E,!(_<=d);){if(0===o)break e;o--,h+=n[s++]<>b)],_=E>>>24,g=E>>>16&255,w=65535&E,!(b+_<=d);){if(0===o)break e;o--,h+=n[s++]<>>=b,d-=b,r.back+=b}if(h>>>=_,d-=_,r.back+=_,r.length=w,0===g){r.mode=26;break}if(32&g){r.back=-1,r.mode=Lt;break}if(64&g){e.msg="invalid literal/length code",r.mode=Ot;break}r.extra=15&g,r.mode=22;case 22:if(r.extra){for(A=r.extra;d>>=r.extra,d-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;E=r.distcode[h&(1<>>24,g=E>>>16&255,w=65535&E,!(_<=d);){if(0===o)break e;o--,h+=n[s++]<>b)],_=E>>>24,g=E>>>16&255,w=65535&E,!(b+_<=d);){if(0===o)break e;o--,h+=n[s++]<>>=b,d-=b,r.back+=b}if(h>>>=_,d-=_,r.back+=_,64&g){e.msg="invalid distance code",r.mode=Ot;break}r.offset=w,r.extra=15&g,r.mode=24;case 24:if(r.extra){for(A=r.extra;d>>=r.extra,d-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg="invalid distance too far back",r.mode=Ot;break}r.mode=25;case 25:if(0===l)break e;if(f=c-l,r.offset>f){if(f=r.offset-f,f>r.whave&&r.sane){e.msg="invalid distance too far back",r.mode=Ot;break}f>r.wnext?(f-=r.wnext,p=r.wsize-f):p=r.wnext-f,f>r.length&&(f=r.length),m=r.window}else m=i,p=a-r.offset,f=r.length;f>l&&(f=l),l-=f,r.length-=f;do{i[a++]=m[p++]}while(--f);0===r.length&&(r.mode=21);break;case 26:if(0===l)break e;i[a++]=r.length,l--,r.mode=21;break;case 27:if(r.wrap){for(;d<32;){if(0===o)break e;o--,h|=n[s++]<{if(!e||!e.state)return Ut;let t=e.state;return t.window&&(t.window=null),e.state=null,At},Qt=(e,t)=>{if(!e||!e.state)return Ut;const r=e.state;return 0==(2&r.wrap)?Ut:(r.head=t,t.done=!1,At)},$t=(e,t)=>{const r=t.length;let n,i,s;return e&&e.state?(n=e.state,0!==n.wrap&&11!==n.mode?Ut:11===n.mode&&(i=1,i=G(i,t,r,0),i!==n.check)?It:(s=Gt(e,t,r,r),s?(n.mode=31,Tt):(n.havedict=1,At))):Ut},er=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1};const tr=Object.prototype.toString,{Z_NO_FLUSH:rr,Z_FINISH:nr,Z_OK:ir,Z_STREAM_END:sr,Z_NEED_DICT:ar,Z_STREAM_ERROR:or,Z_DATA_ERROR:lr,Z_MEM_ERROR:hr}=J;function dr(e){this.options=Je({chunkSize:65536,windowBits:15,to:""},e||{});const t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(t.windowBits>=0&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&0==(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new it,this.strm.avail_out=0;let r=Yt(this.strm,t.windowBits);if(r!==ir)throw new Error(q[r]);if(this.header=new er,Qt(this.strm,this.header),t.dictionary&&("string"==typeof t.dictionary?t.dictionary=tt(t.dictionary):"[object ArrayBuffer]"===tr.call(t.dictionary)&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(r=$t(this.strm,t.dictionary),r!==ir)))throw new Error(q[r])}function ur(e,t){const r=new dr(t);if(r.push(e),r.err)throw r.msg||q[r.err];return r.result}dr.prototype.push=function(e,t){const r=this.strm,n=this.options.chunkSize,i=this.options.dictionary;let s,a,o;if(this.ended)return!1;for(a=t===~~t?t:!0===t?nr:rr,"[object ArrayBuffer]"===tr.call(e)?r.input=new Uint8Array(e):r.input=e,r.next_in=0,r.avail_in=r.input.length;;){for(0===r.avail_out&&(r.output=new Uint8Array(n),r.next_out=0,r.avail_out=n),s=qt(r,a),s===ar&&i&&(s=$t(r,i),s===ir?s=qt(r,a):s===lr&&(s=ar));r.avail_in>0&&s===sr&&r.state.wrap>0&&0!==e[r.next_in];)Xt(r),s=qt(r,a);switch(s){case or:case lr:case ar:case hr:return this.onEnd(s),this.ended=!0,!1}if(o=r.avail_out,r.next_out&&(0===r.avail_out||s===sr))if("string"===this.options.to){let e=nt(r.output,r.next_out),t=r.next_out-e,i=rt(r.output,e);r.next_out=t,r.avail_out=n-t,t&&r.output.set(r.output.subarray(e,e+t),0),this.onData(i)}else this.onData(r.output.length===r.next_out?r.output:r.output.subarray(0,r.next_out));if(s!==ir||0!==o){if(s===sr)return s=Jt(this.strm),this.onEnd(s),this.ended=!0,!0;if(0===r.avail_in)break}}return!0},dr.prototype.onData=function(e){this.chunks.push(e)},dr.prototype.onEnd=function(e){e===ir&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=Qe(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};var cr={Inflate:dr,inflate:ur,inflateRaw:function(e,t){return(t=t||{}).raw=!0,ur(e,t)},ungzip:ur,constants:J};const{Deflate:fr,deflate:pr,deflateRaw:mr,gzip:_r}=gt,{Inflate:gr,inflate:wr,inflateRaw:br,ungzip:yr}=cr;var vr={Deflate:fr,deflate:pr,deflateRaw:mr,gzip:_r,Inflate:gr,inflate:wr,inflateRaw:br,ungzip:yr,constants:J};function kr(e,t,r,n){if(r){const r=new Uint8Array(e,t),i=new Uint8Array(n);let s=0,a=0;for(;a=2&&237==r[s]&&237==r[s+1]){const e=r[s+2],t=r[s+3];for(let r=0;r>8)+String.fromCharCode((16711680&r)>>16)+String.fromCharCode(r>>24)}class Er{constructor(e,t){this.pulseLength=e,this.pulseCount=t,this.pulsesGenerated=0}isFinished(){return this.pulsesGenerated==this.pulseCount}getNextPulseLength(){return this.pulsesGenerated++,this.pulseLength}}class Sr{constructor(e){this.pulses=e,this.index=0}isFinished(){return this.index==this.pulses.length}getNextPulseLength(){return this.pulses[this.index++]}}class Cr{constructor(e,t,r,n){this.data=e,this.zeroPulseLength=t,this.onePulseLength=r,this.bitCount=8*(this.data.length-1)+n,this.pulsesOutput=0,this.lastPulseLength=null}isFinished(){return this.pulsesOutput==2*this.bitCount}getNextPulseLength(){if(1&this.pulsesOutput)return this.pulsesOutput++,this.lastPulseLength;{const e=this.pulsesOutput>>1,t=e>>3,r=1<<7-(7&e);return this.lastPulseLength=this.data[t]&r?this.onePulseLength:this.zeroPulseLength,this.pulsesOutput++,this.lastPulseLength}}}class Ar{constructor(e){this.duration=e,this.emitted=!1}isFinished(){return this.emitted}getNextPulseLength(){return this.emitted=!0,3500*this.duration}}class zr{constructor(e){this.segments=[],this.getSegments=e,this.level=0,this.tapeIsFinished=!1,this.pendingCycles=0}addSegment(e){this.segments.push(e)}emitPulses(e,t,r){let n=0,i=t,s=!1;for(;n0)this.pendingCycles>=32768?(e[i++]=32767|this.level,n+=32767,this.pendingCycles-=32767):(e[i++]=this.level|this.pendingCycles,n+=this.pendingCycles,this.pendingCycles=0);else if(0===this.segments.length){if(this.tapeIsFinished){s=!0;break}this.tapeIsFinished=!this.getSegments(this)}else this.segments[0].isFinished()?this.segments.shift():(this.pendingCycles=this.segments[0].getNextPulseLength(),this.level^=32768);return[i,n,s]}}const Br={ONE:{row:3,mask:1},TWO:{row:3,mask:2},THREE:{row:3,mask:4},FOUR:{row:3,mask:8},FIVE:{row:3,mask:16},SIX:{row:4,mask:16},SEVEN:{row:4,mask:8},EIGHT:{row:4,mask:4},NINE:{row:4,mask:2},ZERO:{row:4,mask:1},Q:{row:2,mask:1},W:{row:2,mask:2},E:{row:2,mask:4},R:{row:2,mask:8},T:{row:2,mask:16},Y:{row:5,mask:16},U:{row:5,mask:8},I:{row:5,mask:4},O:{row:5,mask:2},P:{row:5,mask:1},A:{row:1,mask:1},S:{row:1,mask:2},D:{row:1,mask:4},F:{row:1,mask:8},G:{row:1,mask:16},H:{row:6,mask:16},J:{row:6,mask:8},K:{row:6,mask:4},L:{row:6,mask:2},ENTER:{row:6,mask:1},CAPS_SHIFT:{row:0,mask:1,isCaps:!0},Z:{row:0,mask:2},X:{row:0,mask:4},C:{row:0,mask:8},V:{row:0,mask:16},B:{row:7,mask:16},N:{row:7,mask:8},M:{row:7,mask:4},SYMBOL_SHIFT:{row:7,mask:2,isSymbol:!0},BREAK_SPACE:{row:7,mask:1}};function Ur(e){return{...e,sym:!0}}function Ir(e){return{...e,caps:!0}}const Tr={49:Br.ONE,50:Br.TWO,51:Br.THREE,52:Br.FOUR,53:Br.FIVE,54:Br.SIX,55:Br.SEVEN,56:Br.EIGHT,57:Br.NINE,48:Br.ZERO,81:Br.Q,87:Br.W,69:Br.E,82:Br.R,84:Br.T,89:Br.Y,85:Br.U,73:Br.I,79:Br.O,80:Br.P,65:Br.A,83:Br.S,68:Br.D,70:Br.F,71:Br.G,72:Br.H,74:Br.J,75:Br.K,76:Br.L,13:Br.ENTER,16:Br.CAPS_SHIFT,192:Br.CAPS_SHIFT,90:Br.Z,88:Br.X,67:Br.C,86:Br.V,66:Br.B,78:Br.N,77:Br.M,17:Br.SYMBOL_SHIFT,32:Br.BREAK_SPACE,8:Ir(Br.ZERO),37:Ir(Br.FIVE),38:Ir(Br.SEVEN),39:Ir(Br.EIGHT),40:Ir(Br.SIX),"-":Ur(Br.J),_:Ur(Br.ZERO),"=":Ur(Br.L),"+":Ur(Br.K),";":Ur(Br.O),":":Ur(Br.Z),"'":Ur(Br.SEVEN),'"':Ur(Br.P),",":Ur(Br.N),"<":Ur(Br.R),".":Ur(Br.M),">":Ur(Br.T),"/":Ur(Br.V),"?":Ur(Br.C),"*":Ur(Br.B),"@":Ur(Br.TWO),"#":Ur(Br.THREE)};Tr[String.fromCharCode(8804)]=Ur(Br.Q),Tr[String.fromCharCode(8805)]=Ur(Br.E),Tr[String.fromCharCode(8800)]=Ur(Br.W);class Fr{constructor(e,t){this.worker=e,this.rootElement=t,this.eventsAreBound=!1,this.keypressHandler=e=>{e.metaKey||e.preventDefault()}}start(){this.rootElement.addEventListener("keydown",this.keydownHandler),this.rootElement.addEventListener("keyup",this.keyupHandler),this.rootElement.addEventListener("keypress",this.keypressHandler),this.eventsAreBound=!0}stop(){this.rootElement.removeEventListener("keydown",this.keydownHandler),this.rootElement.removeEventListener("keyup",this.keyupHandler),this.rootElement.removeEventListener("keypress",this.keypressHandler),this.eventsAreBound=!1}setRootElement(e){this.eventsAreBound?(this.stop(),this.rootElement=e,this.start()):this.rootElement=e}}class Rr extends Fr{constructor(e,t){super(e,t),this.symbolIsShifted=!1,this.capsIsShifted=!1,this.seenKeyCodes={},this.keydownHandler=e=>{let t=Tr[e.keyCode];if(t)this.keyDown(t);else if(t=Tr[e.key],t){const r=this.seenKeyCodes[e.keyCode];r&&r!==t&&this.keyUp(r),this.seenKeyCodes[e.keyCode]=t,this.keyDown(t)}e.metaKey||e.preventDefault()},this.keyupHandler=e=>{const t=Tr[e.keyCode];if(t)this.keyUp(t);else{const t=this.seenKeyCodes[e.keyCode];t&&(this.seenKeyCodes[e.keyCode]=null,this.keyUp(t))}e.metaKey||e.preventDefault()}}sendKeyMessage(e,t){this.worker.postMessage({message:t?"keyDown":"keyUp",row:e.row,mask:e.mask})}keyDown(e){this.sendKeyMessage(e,!0),"caps"in e||"sym"in e?(this.sendKeyMessage(Br.CAPS_SHIFT,"caps"in e),this.sendKeyMessage(Br.SYMBOL_SHIFT,"sym"in e)):e.isCaps?this.capsIsShifted=!0:e.isSymbol&&(this.symbolIsShifted=!0)}keyUp(e){this.sendKeyMessage(e,!1),"caps"in e||"sym"in e?(this.sendKeyMessage(Br.CAPS_SHIFT,this.capsIsShifted),this.sendKeyMessage(Br.SYMBOL_SHIFT,this.symbolIsShifted)):e.isCaps?this.capsIsShifted=!1:e.isSymbol&&(this.symbolIsShifted=!1)}}const Lr={ab:Br.ONE,cd:Br.TWO,ef:Br.THREE,gh:Br.FOUR,ij:Br.FIVE,kl:Br.SIX,mn:Br.SEVEN,op:Br.EIGHT,qr:Br.NINE,st:Br.ZERO,uv:Br.Q,wx:Br.W,yz:Br.E,AB:Br.R,CD:Br.T,EF:Br.Y,GH:Br.U,IJ:Br.I,KL:Br.O,MN:Br.P,OP:Br.A,QR:Br.S,ST:Br.D,UV:Br.F,WX:Br.G,YZ:Br.H,"01":Br.J,23:Br.K,45:Br.L,67:Br.ENTER,89:Br.CAPS_SHIFT,"<>":Br.Z,"-=":Br.X,"[]":Br.C,";:":Br.V,",.":Br.B,"/?":Br.N,"{}":Br.M,"!$":Br.SYMBOL_SHIFT,"%^":Br.BREAK_SPACE};let Or={};for(const[e,t]of Object.entries(Lr))Or[e.charAt(0)]={...t,message:"keyDown"},Or[e.charAt(1)]={...t,message:"keyUp"};class Pr extends Fr{constructor(e,t){super(e,t),this.keydownHandler=e=>{const t=Or[e.key];t&&this.worker.postMessage({message:t.message,row:t.row,mask:t.mask}),e.metaKey||e.preventDefault()},this.keyupHandler=e=>{e.metaKey||e.preventDefault()}}}const Dr=65536;class Nr{constructor(){this.isActive=!1}start(){const e=window.AudioContext||window.webkitAudioContext;this.audioContext=new e({latencyHint:"interactive"}),this.samplesPerFrame=this.audioContext.sampleRate/50,this.frameBuffers=[new ArrayBuffer(4*this.samplesPerFrame),new ArrayBuffer(4*this.samplesPerFrame)],this.leftBuffer=new Float32Array(Dr),this.rightBuffer=new Float32Array(Dr),this.readPtr=0,this.writePtr=0,this.scriptNode=this.audioContext.createScriptProcessor(0,0,2),this.scriptNode.onaudioprocess=e=>{const t=e.outputBuffer,r=t.getChannelData(0),n=t.getChannelData(1);let i=this.writePtr-this.readPtr;if(i<0&&(i+=Dr),i>=r.length)if(this.readPtr+r.length<=Dr)r.set(this.leftBuffer.slice(this.readPtr,this.readPtr+r.length)),n.set(this.rightBuffer.slice(this.readPtr,this.readPtr+n.length)),this.readPtr=(this.readPtr+r.length)%Dr;else{const e=Dr-this.readPtr,t=r.length-e;r.set(this.leftBuffer.slice(this.readPtr,this.readPtr+e)),n.set(this.rightBuffer.slice(this.readPtr,this.readPtr+e)),r.set(this.leftBuffer.slice(0,t),e),n.set(this.rightBuffer.slice(0,t),e),this.readPtr=t}},this.scriptNode.connect(this.audioContext.destination),this.isActive=!0}stop(){this.scriptNode.disconnect(this.audioContext.destination),this.audioContext.close()}frameCompleted(e,t){if(this.frameBuffers[0]=e,this.frameBuffers[1]=t,!this.isActive)return;const r=e.byteLength/4;if(this.writePtr+r<=Dr){const n=new Float32Array(e),i=new Float32Array(t);this.leftBuffer.set(n,this.writePtr),this.rightBuffer.set(i,this.writePtr),this.writePtr=(this.writePtr+r)%Dr}else{const n=Dr-this.writePtr,i=r-n,s=new Float32Array(e,0,n),a=new Float32Array(t,0,n);this.leftBuffer.set(s,this.writePtr),this.rightBuffer.set(a,this.writePtr);const o=new Float32Array(e,4*n,i),l=new Float32Array(t,4*n,i);this.leftBuffer.set(o,0),this.rightBuffer.set(l,0),this.writePtr=i}}drawOscilloscope(e,t){this.canvasCtx.fillStyle="#000",this.canvasCtx.strokeStyle="#0f0",this.canvasCtx.fillRect(0,0,this.samplesPerFrame,64);const r=new Float32Array(e);this.canvasCtx.beginPath(),this.canvasCtx.moveTo(0,16);for(let e=0;e{switch(e.data.message){case"ready":this.loadRoms().then((()=>{this.setMachine(t.machine||128),this.setTapeTraps(this.tapeTrapsEnabled),t.openUrl?this.openUrlList(t.openUrl).catch((e=>{alert(e)})).then((()=>{t.autoStart&&this.start()})):t.autoStart&&this.start(),this.isReady=!0;for(let e=0;ethis.nextFrameTime?(this.runFrame(),this.nextFrameTime=e+this.msPerFrame):this.isExecutingFrame=!1}else this.isExecutingFrame=!1;break;case"fileOpened":if("tape"==e.data.mediaType&&this.autoLoadTapes){const e={48:{default:"tapeloaders/tape_48.szx",usr0:"tapeloaders/tape_48.szx"},128:{default:"tapeloaders/tape_128.szx",usr0:"tapeloaders/tape_128_usr0.szx"},5:{default:"tapeloaders/tape_pentagon.szx",usr0:"tapeloaders/tape_pentagon_usr0.szx"}};this.openUrl(new URL(e[this.machineType][this.tapeAutoLoadMode],Gr)),this.tapeTrapsEnabled||this.playTape()}this.fileOpenPromiseResolutions[e.data.id]({mediaType:e.data.mediaType}),"tape"==e.data.mediaType&&this.emit("openedTapeFile");break;case"playingTape":this.tapeIsPlaying=!0,this.emit("playingTape");break;case"stoppedTape":this.tapeIsPlaying=!1,this.emit("stoppedTape");break;default:console.log("message received by host:",e.data)}},this.worker.postMessage({message:"loadCore",baseUrl:Gr})}start(){this.isRunning||(this.isRunning=!0,this.isInitiallyPaused=!1,this.nextFrameTime=performance.now(),this.keyboardEnabled&&this.keyboardHandler.start(),this.audioHandler.start(),this.focus(),this.emit("start"),window.requestAnimationFrame((e=>{this.runAnimationFrame(e)})))}focus(){this.keyboardEnabled&&this.keyboardHandler.rootElement.focus&&this.keyboardHandler.rootElement.focus()}setKeyboardEventRoot(e){this.keyboardEnabled&&this.keyboardHandler.setRootElement(e)}pause(){this.isRunning&&(this.isRunning=!1,this.keyboardEnabled&&this.keyboardHandler.stop(),this.audioHandler.stop(),this.emit("pause"))}async loadRom(e,t){const r=await fetch(new URL(e,Gr)),n=new Uint8Array(await r.arrayBuffer());this.worker.postMessage({message:"loadMemory",data:n,page:t})}async loadRoms(){await this.loadRom("roms/128-0.rom",8),await this.loadRom("roms/128-1.rom",9),await this.loadRom("roms/48.rom",10),await this.loadRom("roms/pentagon-0.rom",12),await this.loadRom("roms/trdos.rom",13)}runFrame(){this.isExecutingFrame=!0;const e=this.displayHandler.getNextFrameBuffer();if(this.audioHandler.isActive){const[t,r]=this.audioHandler.frameBuffers;this.worker.postMessage({message:"runFrame",frameBuffer:e,audioBufferLeft:t,audioBufferRight:r},[e,t,r])}else this.worker.postMessage({message:"runFrame",frameBuffer:e},[e])}runAnimationFrame(e){this.displayHandler.readyToShow()&&this.displayHandler.show(),this.isRunning&&(e>this.nextFrameTime&&!this.isExecutingFrame&&(this.runFrame(),this.nextFrameTime+=this.msPerFrame),window.requestAnimationFrame((e=>{this.runAnimationFrame(e)})))}setMachine(e){128!=e&&5!=e&&(e=48),this.worker.postMessage({message:"setMachineType",type:e}),this.machineType=e,this.emit("setMachine",e)}reset(){this.worker.postMessage({message:"reset"})}loadSnapshot(e){const t=this.nextFileOpenID++;return this.worker.postMessage({message:"loadSnapshot",id:t,snapshot:e}),this.emit("setMachine",e.model),new Promise(((e,r)=>{this.fileOpenPromiseResolutions[t]=e}))}openTAPFile(e){const t=this.nextFileOpenID++;return this.worker.postMessage({message:"openTAPFile",id:t,data:e}),new Promise(((e,r)=>{this.fileOpenPromiseResolutions[t]=e}))}openTZXFile(e){const t=this.nextFileOpenID++;return this.worker.postMessage({message:"openTZXFile",id:t,data:e}),new Promise(((e,r)=>{this.fileOpenPromiseResolutions[t]=e}))}getFileOpener(e){const t=e.toLowerCase();return t.endsWith(".z80")?e=>{const t=function(e){const t=new DataView(e),r=t.getUint8(10),n=t.getUint8(12),i=127&t.getUint8(11)|(1&n)<<7,s=t.getUint8(29),a={registers:{AF:t.getUint16(0,!1),BC:t.getUint16(2,!0),HL:t.getUint16(4,!0),PC:t.getUint16(6,!0),SP:t.getUint16(8,!0),IR:r<<8|i,DE:t.getUint16(13,!0),BC_:t.getUint16(15,!0),DE_:t.getUint16(17,!0),HL_:t.getUint16(19,!0),AF_:t.getUint16(21,!1),IY:t.getUint16(23,!0),IX:t.getUint16(25,!0),iff1:!!t.getUint8(27),iff2:!!t.getUint8(28),im:3&s},ulaState:{borderColour:(14&n)>>1},memoryPages:{}};if(0!==a.registers.PC){a.model=48;const t=kr(e,30,32&n,49152);a.memoryPages[5]=new Uint8Array(t.buffer,0,16384),a.memoryPages[2]=new Uint8Array(t.buffer,16384,16384),a.memoryPages[0]=new Uint8Array(t.buffer,32768,16384),a.tstates=0}else{const r=t.getUint16(30,!0),n=23==r;a.registers.PC=t.getUint16(32,!0);const i=t.getUint8(34),s=n?i<3:i<4;a.model=s?48:128,s||(a.ulaState.pagingFlags=t.getUint8(35));const o=(s?69888:70908)/4;a.tstates=((t.getUint8(57)+1)%4+1)*o-(t.getUint16(55,!0)+1),a.tstates>=4*o&&(a.tstates=0);let l,h=32+r;for(l=s?{4:2,5:0,8:5}:{3:0,4:1,5:2,6:3,7:4,8:5,9:6,10:7};h{const t=function(e){const t=new DataView(e),r=e.byteLength,n={memoryPages:{}};if("ZXST"!=xr(t,0))throw"Not a valid SZX file";const i=t.getUint8(6);switch(i){case 1:n.model=48;break;case 2:case 3:n.model=128;break;case 7:n.model=5;break;default:throw"Unsupported machine type: "+i}let s=8;for(;s{const t=function(e){let t=!1,r=null;const n=e.byteLength;let i;switch(n){case 131103:case 147487:t=!0;case 49179:if(i=new DataView(e,0,t?49182:n),r={model:t?128:48,registers:{},ulaState:{},memoryPages:{5:new Uint8Array(e,27,16384),2:new Uint8Array(e,16411,16384)},tstates:0},t){const t=7&i.getUint8(49181);r.memoryPages[t]=new Uint8Array(e,32795,16384);for(let t=0,n=49183;t<8;t++)void 0===r.memoryPages[t]&&(r.memoryPages[t]=new Uint8Array(e,n,16384),n+=16384)}else r.memoryPages[0]=new Uint8Array(e,32795,16384);if(r.registers.IR=i.getUint8(0)<<8|i.getUint8(20),r.registers.HL_=i.getUint16(1,!0),r.registers.DE_=i.getUint16(3,!0),r.registers.BC_=i.getUint16(5,!0),r.registers.AF_=i.getUint16(7,!0),r.registers.HL=i.getUint16(9,!0),r.registers.DE=i.getUint16(11,!0),r.registers.BC=i.getUint16(13,!0),r.registers.IY=i.getUint16(15,!0),r.registers.IX=i.getUint16(17,!0),r.registers.iff1=r.registers.iff2=(4&i.getUint8(19))>>2,r.registers.AF=i.getUint16(21,!0),t)r.registers.SP=i.getUint16(23,!0),r.registers.PC=i.getUint16(49179,!0),r.ulaState.pagingFlags=i.getUint8(49181);else{let e=i.getUint16(23,!0);const t=i.getUint8(e-16384+27);e=e+1&65535;const n=i.getUint8(e-16384+27);e=e+1&65535,r.registers.PC=n<<8|t,r.registers.SP=e}r.registers.im=i.getUint8(25),r.ulaState.borderColour=i.getUint8(26);break;default:throw"Cannot handle SNA snapshots of length "+n}return r}(e);return this.loadSnapshot(t)}:t.endsWith(".tap")?e=>{if(class{constructor(e){let t=0;this.blocks=[];for(var r=new DataView(e);t+1{if(0===this.blocks.length)return!1;const t=this.blocks[this.nextBlockIndex];return this.nextBlockIndex=(this.nextBlockIndex+1)%this.blocks.length,128&t[0]?e.addSegment(new Er(2168,3223)):e.addSegment(new Er(2168,8063)),e.addSegment(new Sr([667,735])),e.addSegment(new Cr(t,855,1710,8)),e.addSegment(new Ar(1e3)),0!=this.nextBlockIndex}))}getNextLoadableBlock(){if(0===this.blocks.length)return null;const e=this.blocks[this.nextBlockIndex];return this.nextBlockIndex=(this.nextBlockIndex+1)%this.blocks.length,e}static isValid(e){let t=0;const r=new DataView(e);for(;t=e.byteLength)return!1;t+=r.getUint16(t,!0)+2}return t==e.byteLength}}.isValid(e))return this.openTAPFile(e);alert("Invalid TAP file")}:t.endsWith(".tzx")?e=>{if(class{static isValid(e){const t=new DataView(e),r="ZXTape!";for(let e=0;e{const n=t.getUint16(r,!0);r+=2;const i=t.getUint16(r,!0);r+=2;const s=new Uint8Array(e,r,i);this.blocks.push({type:"StandardSpeedData",pause:n,data:s,generatePulses:e=>{128&s[0]?e.addSegment(new Er(2168,3223)):e.addSegment(new Er(2168,8063)),e.addSegment(new Sr([667,735])),e.addSegment(new Cr(s,855,1710,8)),n&&e.addSegment(new Ar(n))}}),r+=i})();break;case 17:(()=>{const n=t.getUint16(r,!0);r+=2;const i=t.getUint16(r,!0);r+=2;const s=t.getUint16(r,!0);r+=2;const a=t.getUint16(r,!0);r+=2;const o=t.getUint16(r,!0);r+=2;const l=t.getUint16(r,!0);r+=2;const h=t.getUint8(r);r+=1;const d=t.getUint16(r,!0);r+=2;const u=t.getUint16(r,!0)|t.getUint8(r+2)<<16;r+=3;const c=new Uint8Array(e,r,u);this.blocks.push({type:"TurboSpeedData",pilotPulseLength:n,syncPulse1Length:i,syncPulse2Length:s,zeroBitLength:a,oneBitLength:o,pilotPulseCount:l,lastByteMask:h,pause:d,data:c,generatePulses:e=>{e.addSegment(new Er(n,l)),e.addSegment(new Sr([i,s])),e.addSegment(new Cr(c,a,o,h)),d&&e.addSegment(new Ar(d))}}),r+=u})();break;case 18:(()=>{const e=t.getUint16(r,!0);r+=2;const n=t.getUint16(r,!0);r+=2,this.blocks.push({type:"PureTone",pulseLength:e,pulseCount:n,generatePulses:t=>{t.addSegment(new Er(e,n))}})})();break;case 19:(()=>{const e=t.getUint8(r);r+=1;const n=[];for(let i=0;i{e.addSegment(new Sr(n))}}),r+=2*e})();break;case 20:(()=>{const n=t.getUint16(r,!0);r+=2;const i=t.getUint16(r,!0);r+=2;const s=t.getUint8(r);r+=1;const a=t.getUint16(r,!0);r+=2;const o=t.getUint16(r,!0)|t.getUint8(r+2)<<16;r+=3;const l=new Uint8Array(e,r,o);this.blocks.push({type:"PureData",zeroBitLength:n,oneBitLength:i,lastByteMask:s,pause:a,data:l,generatePulses:e=>{e.addSegment(new Cr(l,n,i,s)),a&&e.addSegment(new Ar(a))}}),r+=o})();break;case 21:(()=>{const n=t.getUint16(r,!0);r+=2;const i=t.getUint16(r,!0);r+=2;const s=t.getUint8(r);r+=1;const a=t.getUint16(r,!0)|t.getUint8(r+2)<<16;r+=3,this.blocks.push({type:"DirectRecording",tstatesPerSample:n,lastByteMask:s,pause:i,data:new Uint8Array(e,r,a)}),r+=a})();break;case 32:(()=>{const e=t.getUint16(r,!0);r+=2,this.blocks.push({type:"Pause",pause:e,generatePulses:t=>{t.addSegment(new Ar(e))}})})();break;case 33:(()=>{const n=t.getUint8(r);r+=1;const i=new Uint8Array(e,r,n);r+=n;const s=String.fromCharCode.apply(null,i);this.blocks.push({type:"GroupStart",name:s})})();break;case 34:(()=>{this.blocks.push({type:"GroupEnd"})})();break;case 35:(()=>{const e=t.getUint16(r,!0);r+=2,this.blocks.push({type:"JumpToBlock",offset:e})})();break;case 36:(()=>{const e=t.getUint16(r,!0);r+=2,this.blocks.push({type:"LoopStart",repeatCount:e})})();break;case 37:(()=>{this.blocks.push({type:"LoopEnd"})})();break;case 38:(()=>{const e=t.getUint16(r,!0);r+=2;const n=[];for(let i=0;i{this.blocks.push({type:"ReturnFromSequence"})})();break;case 40:(()=>{const n=t.getUint16(r,!0);r+=2,this.blocks.push({type:"Select",data:new Uint8Array(e,r,n)}),r+=n})();break;case 48:(()=>{const n=t.getUint8(r);r+=1;const i=new Uint8Array(e,r,n);r+=n;const s=String.fromCharCode.apply(null,i);this.blocks.push({type:"TextDescription",text:s})})();break;case 49:(()=>{const n=t.getUint8(r);r+=1;const i=t.getUint8(r);r+=1;const s=new Uint8Array(e,r,i);r+=i;const a=String.fromCharCode.apply(null,s);this.blocks.push({type:"MessageBlock",displayTime:n,text:a})})();break;case 50:(()=>{const n=t.getUint16(r,!0);r+=2,this.blocks.push({type:"ArchiveInfo",data:new Uint8Array(e,r,n)}),r+=n})();break;case 51:(()=>{const n=3*t.getUint8(r);r+=1,this.blocks.push({type:"HardwareType",data:new Uint8Array(e,r,n)}),r+=n})();break;case 53:(()=>{const n=new Uint8Array(e,r,10);r+=10;const i=String.fromCharCode.apply(null,n),s=t.getUint32(r,!0);this.blocks.push({type:"CustomInfo",identifier:i,data:new Uint8Array(e,r,s)}),r+=s})();break;case 90:(()=>{r+=9,this.blocks.push({type:"Glue"})})();break;default:(()=>{const n=t.getUint32(r,!0);r+=4,this.blocks.push({type:"unknown",data:new Uint8Array(e,r,n)}),r+=n})()}}this.nextBlockIndex=0,this.loopToBlockIndex,this.repeatCount,this.callStack=[],this.pulseGenerator=new zr((e=>{const t=this.getNextMeaningfulBlock(!1);return!!t&&(t.generatePulses(e),!0)}))}getNextMeaningfulBlock(e){let t=0===this.nextBlockIndex;for(;;){if(this.nextBlockIndex>=this.blocks.length){if(t||!e)return null;this.nextBlockIndex=0,t=!0}var r=this.blocks[this.nextBlockIndex];switch(r.type){case"StandardSpeedData":case"TurboSpeedData":case"PureTone":case"PulseSequence":case"PureData":case"DirectRecording":case"Pause":return this.nextBlockIndex++,r;case"JumpToBlock":this.nextBlockIndex+=r.offset;break;case"LoopStart":this.loopToBlockIndex=this.nextBlockIndex+1,this.repeatCount=r.repeatCount,this.nextBlockIndex++;break;case"LoopEnd":this.repeatCount--,this.repeatCount>0?this.nextBlockIndex=this.loopToBlockIndex:this.nextBlockIndex++;break;case"CallSequence":this.callStack.unshift(this.nextBlockIndex+1);for(var n=r.offsets.length-1;n>=0;n--)this.callStack.unshift(this.nextBlockIndex+r.offsets[n]);this.nextBlockIndex=this.callStack.shift();break;case"ReturnFromSequence":this.nextBlockIndex=this.callStack.shift();break;default:this.nextBlockIndex++}}}getNextLoadableBlock(){for(;;){var e=this.getNextMeaningfulBlock(!0);if(!e)return null;if("StandardSpeedData"==e.type||"TurboSpeedData"==e.type)return e.data}}}.isValid(e))return this.openTZXFile(e);alert("Invalid TZX file")}:t.endsWith(".zip")?async t=>{const r=await n.loadAsync(t),i=[];if(r.forEach(((e,t)=>{if(e.startsWith("__MACOSX/"))return;const r=this.getFileOpener(e);if(r){const e=async()=>{const e=await t.async("arraybuffer");return r(e)};i.push(e)}})),1==i.length)return i[0]();throw 0==i.length?"No loadable files found inside ZIP file: "+e:"Multiple loadable files found inside ZIP file: "+e}:void 0}async openFile(e){const t=this.getFileOpener(e.name);if(t)return t(await e.arrayBuffer()).catch((e=>{alert(e)}));throw"Unrecognised file type: "+e.name}async openUrl(e){const t=this.getFileOpener(e.toString());if(t){const r=await fetch(e);return t(await r.arrayBuffer())}throw"Unrecognised file type: "+e.split("/").pop()}async openUrlList(e){if("string"==typeof e)return await this.openUrl(e);for(const t of e)await this.openUrl(t)}setAutoLoadTapes(e){this.autoLoadTapes=e,this.emit("setAutoLoadTapes",e)}setTapeTraps(e){this.tapeTrapsEnabled=e,this.worker.postMessage({message:"setTapeTraps",value:e}),this.emit("setTapeTraps",e)}playTape(){this.worker.postMessage({message:"playTape"})}stopTape(){this.worker.postMessage({message:"stopTape"})}exit(){this.pause(),this.worker.terminate()}}window.JSSpeccy=(e,r)=>{r=r||{};const n=document.createElement("canvas");n.width=320,n.height=240;const i=!("keyboardEnabled"in r)||r.keyboardEnabled,s=!("uiEnabled"in r)||r.uiEnabled,a=new Xr(n,{machine:r.machine||128,autoStart:r.autoStart||!1,autoLoadTapes:r.autoLoadTapes||!1,tapeAutoLoadMode:r.tapeAutoLoadMode||"default",openUrl:r.openUrl,tapeTrapsEnabled:!("tapeTrapsEnabled"in r)||r.tapeTrapsEnabled,keyboardEnabled:i,keyboardMap:r.keyboardMap||"standard"}),l=new f(e,a,{zoom:r.zoom||1,sandbox:r.sandbox,uiEnabled:s});if(i&&(-1==l.appContainer.tabIndex&&(l.appContainer.tabIndex=0),a.setKeyboardEventRoot(l.appContainer)),s){const e=l.menuBar.addMenu("File");if(!r.sandbox){e.addItem("Open...",(()=>{h()})),e.addItem("Find games...",(()=>{d()}));const t=e.addItem("Auto-load tapes",(()=>{a.setAutoLoadTapes(!a.autoLoadTapes),a.focus()})),r=()=>{a.autoLoadTapes?t.setCheckbox():t.unsetCheckbox()};a.on("setAutoLoadTapes",r),r()}const t=e.addItem("Instant tape loading",(()=>{a.setTapeTraps(!a.tapeTrapsEnabled),a.focus()})),n=()=>{a.tapeTrapsEnabled?t.setCheckbox():t.unsetCheckbox()};a.on("setTapeTraps",n),n();const i=l.menuBar.addMenu("Machine"),s=i.addItem("Spectrum 48K",(()=>{a.setMachine(48),a.focus()})),u=i.addItem("Spectrum 128K",(()=>{a.setMachine(128),a.focus()})),c=i.addItem("Pentagon 128",(()=>{a.setMachine(5),a.focus()})),f=l.menuBar.addMenu("Display"),p={1:f.addItem("100%",(()=>{l.setZoom(1),a.focus()})),2:f.addItem("200%",(()=>{l.setZoom(2),a.focus()})),3:f.addItem("300%",(()=>{l.setZoom(3),a.focus()}))},m=f.addItem("Fullscreen",(()=>{l.enterFullscreen()})),_=e=>{if("fullscreen"==e){m.setBullet();for(let e in p)p[e].unsetBullet()}else{m.unsetBullet();for(let t in p)parseInt(t)==e?p[t].setBullet():p[t].unsetBullet()}};l.on("setZoom",_),_(l.zoom),a.on("setMachine",(e=>{48==e?(s.setBullet(),u.unsetBullet(),c.unsetBullet()):128==e?(s.unsetBullet(),u.setBullet(),c.unsetBullet()):(s.unsetBullet(),u.unsetBullet(),c.setBullet())})),r.sandbox||l.toolbar.addButton(Mr,{label:"Open file"},(()=>{h()})),l.toolbar.addButton(Zr,{label:"Reset"},(()=>{a.reset()}));const g=l.toolbar.addButton(o,{label:"Unpause"},(()=>{a.isRunning?a.pause():a.start()}));a.on("pause",(()=>{g.setIcon(o),g.setLabel("Unpause")})),a.on("start",(()=>{g.setIcon(Hr),g.setLabel("Pause")}));const w=l.toolbar.addButton(Kr,{label:"Start tape"},(()=>{a.tapeIsPlaying?a.stopTape():a.playTape()}));w.disable(),a.on("openedTapeFile",(()=>{w.enable()})),a.on("playingTape",(()=>{w.setIcon(Vr),w.setLabel("Stop tape")})),a.on("stoppedTape",(()=>{w.setIcon(Kr),w.setLabel("Start tape")}));const b=l.toolbar.addButton(jr,{label:"Enter full screen mode",align:"right"},(()=>{l.toggleFullscreen()}));l.on("setZoom",(e=>{"fullscreen"==e?(b.setIcon(Wr),b.setLabel("Exit full screen mode")):(b.setIcon(jr),b.setLabel("Enter full screen mode"))}))}const h=()=>{t().then((e=>{const t=e[0];a.openFile(t).then((()=>{a.isInitiallyPaused&&a.start(),a.focus()})).catch((e=>{alert(e)}))}))},d=()=>{a.pause();const e=l.showDialog();e.innerHTML='\n \n
\n \n \n
\n
\n
\n ';const t=e.querySelector("input"),r=e.querySelector("button"),n=e.querySelector("form"),i=e.querySelector(".results");n.addEventListener("submit",(e=>{e.preventDefault(),r.innerText="Searching...";const n=(e,t)=>encodeURIComponent(e)+"="+encodeURIComponent(t),s="https://archive.org/advancedsearch.php?"+n("q",'collection:softwarelibrary_zx_spectrum title:"'+t.value.replace(/[^\w\s\-\']/,"")+'"')+"&"+n("fl[]","creator")+"&"+n("fl[]","identifier")+"&"+n("fl[]","title")+"&"+n("rows","50")+"&"+n("page","1")+"&"+n("output","json");fetch(s).then((e=>(r.innerText="Search",e.json()))).then((e=>{i.innerHTML='

    - powered by Internet Archive

    ';const t=i.querySelector("ul");e.response.docs.forEach((e=>{const r=document.createElement("li");t.appendChild(r);const n=document.createElement("a");n.href="#",n.innerText=e.title;const i=document.createTextNode(" - "+e.creator);r.appendChild(n),r.appendChild(i),n.addEventListener("click",(t=>{t.preventDefault(),fetch("https://archive.org/metadata/"+e.identifier).then((e=>e.json())).then((t=>{let r=null;if(t.files.forEach((e=>{const t=e.name.split(".").pop().toLowerCase();"z80"!=t&&"sna"!=t&&"tap"!=t&&"tzx"!=t&&"szx"!=t||(r=e.name)})),r){const t="https://cors.archive.org/cors/"+e.identifier+"/"+r;a.openUrl(t).catch((e=>{alert(e)})).then((()=>{l.hideDialog(),a.focus(),a.start()}))}else alert("No loadable file found")}))}))}))}))})),t.focus()};return{setZoom:e=>{l.setZoom(e)},toggleFullscreen:()=>{l.toggleFullscreen()},enterFullscreen:()=>{l.enterFullscreen()},exitFullscreen:()=>{l.exitFullscreen()},setMachine:e=>{a.setMachine(e)},openFileDialog:()=>{h()},openUrl:e=>{a.openUrl(e).catch((e=>{alert(e)}))},loadSnapshotFromStruct:e=>{a.loadSnapshot(e)},onReady:e=>{a.isReady?e():a.onReadyHandlers.push(e)},exit:()=>{a.exit(),l.unload()}}}})()})(); \ No newline at end of file diff --git a/site/jsspeccy/jsspeccy.js.LICENSE.txt b/site/jsspeccy/jsspeccy.js.LICENSE.txt deleted file mode 100644 index 995b8bc..0000000 --- a/site/jsspeccy/jsspeccy.js.LICENSE.txt +++ /dev/null @@ -1,11 +0,0 @@ -/*! - -JSZip v3.7.1 - A JavaScript class for generating and reading zip files - - -(c) 2009-2016 Stuart Knightley -Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/master/LICENSE.markdown. - -JSZip uses the library pako released under the MIT license : -https://github.com/nodeca/pako/blob/master/LICENSE -*/ diff --git a/site/jsspeccy/roms/128-0.rom b/site/jsspeccy/roms/128-0.rom deleted file mode 100755 index c4a04e86ac94d8eb3fa760e7241a77ef58a422e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 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
    ipD&GM&n~T#SW1#>(92sPt_@C${X0r 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 diff --git a/site/jsspeccy/roms/128-1.rom b/site/jsspeccy/roms/128-1.rom deleted file mode 100755 index 64c3e73769cb459680f335a2db0abc557c243d8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 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 Qs19QP8;1_PQIz+80l1Bavj6}9 diff --git a/site/jsspeccy/roms/48.rom b/site/jsspeccy/roms/48.rom deleted file mode 100755 index 4d6895e0bbf3fa543f192a66a297192b3c969ac9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 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

    5RYmg65FY9s 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 diff --git a/site/jsspeccy/roms/pentagon-0.rom b/site/jsspeccy/roms/pentagon-0.rom deleted file mode 100755 index 5c7a57169d85edbce69fd295739e78bf604faa65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 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 RR?H=H=8@%#$l@i0`M)vea9;ob diff --git a/site/jsspeccy/roms/trdos.rom b/site/jsspeccy/roms/trdos.rom deleted file mode 100755 index 65b24aa7732eeebe565b2100d945e94661fa56e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 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 TT}}QYm;Pg){((#X{zmveUk<~; diff --git a/site/jsspeccy/tapeloaders/tape_128.szx b/site/jsspeccy/tapeloaders/tape_128.szx deleted file mode 100755 index 0a3694f92f7929c6cbe282cab68daf7da0367f43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1452 zcma!w2o7OnW@2y-3JD5iU|=ZDODssv&np8mu>vjzMuwcsq~e0q4fl#i4lPFPT_=xDmMatZ zD6n+P*Z2=_&UV)~iaV;!ZqM8G()WXr!1m_Lxg|#%b04o?J3C@7TUq4s@1L8O)avVh znf;_STnTD#L$lZFV%c9)z8-TEdRhO)Wp&KMW5&hXRi~f6-L-$V?8N&b`xG==^n!A2 zH|DMrc&w@VXG+GBr*j3KSX`Q^uyDs-;ZLu0Rnn7yWb2{OxalwolvX^z?c5^VubhpMUrMov`=0#q zI{EF-Ov!ZtKc{X=`TTSHl68|8FIhb6XR7<1`pn?C8{6*A+aK_R%k+Ql)J?yo)(4*c zR$KS)bDwkVao1DtI?Nx$m1|~Pt2?j4z_-DB|B3sSGy@doJi#?e_!|TlwzoZlPh|)iy_;uQA6n{~{MUJ=Q^5MXe4X)Nfjg{NL5<(uA~sw4f$hCH^FO&Y!<$Pkdh*)u{sH_Zao)NWF6Z|=zt{Br+U)Of#kz&3 zt=FFkt#}fcQvP(FN|j^DUehT5No!IsH&;#a7fSLh)8%MdJ8${3r)%f!JaV=DZ*k|z z&F?hLqjlEt^GmyOt&y$y5U&?=G2+XI_rPR|3i#UP{g{##fzqKCP==9#378HK8ZrXe zhZcPG&*hO{fU1F^VLPJ(P$5XiS)de9B~Zs%dp<@-k>elJg%*Zrs4OaA>-9Cu{&5O{`PP#gAQn zW3wyt`l|agO!(Kjm#*A3J28L5#6`EK$7~G~<&+9(K60!2tZU!WtV)rUwIBBV+h=!n zx|#pR8QQl36(7wBem(v3-#tCG`AL4|ueU6}eKl#>wCh{auiO29ne}n4?)2YxZvMGy zSf>7VKVxXT-Zw-rFp>}qkbq+*SqBTrI@n0iQ3Z}1cA$T7|FmO1Tu;b LYTkbc{ht8<_H{m% diff --git a/site/jsspeccy/tapeloaders/tape_128_usr0.szx b/site/jsspeccy/tapeloaders/tape_128_usr0.szx deleted file mode 100755 index 6f75a84b821ec2e01857def85cc83c18408b3fbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1309 zcma!w2o7OnWnyp+3JFSJU|?`7ElveeH~|YI150{xQDs4im4cz3k)8opPG(YZL27bI zQE4tn$VAVCt28e$H`PkPC9$YHGf$zy!Ytm*M8VKP&s@(S%EBN>6=-@4BMZZ=n5!`^ z42t5j%_7vVFk8h0{kN63H(+FB^j`y1!DK5R9N-+p0c5fZFz|z1x6a zyhFkjOiOPpX7;=1aPsC1RrjZ7z8jyt|Lbp7+AKk^*&q}5FJu0*vA+KQwW|mEn-)B^ ze?ITY(kHjp@Y}b4P1?B9eA{}N^4B|?@2ouG6~628;ylx<&F}7>^4xqWCSyi5d%l#? zvB@jD&5VpqJI^x*o10F5(*1izM0S2_>W%%P*REdNvuPdQ=8FoR>)vkaxb5~`$kp+a zjMqecIgrgTVE=~Ez2QnX$ZJ|aF-8U^pw|u>f?RlL!B_uW9{B|@rBJ$IJEH?oAxOt# zpb$_cP{-N5Ud)anZ4di784EczxVXgPTxN-!Hj)wJWK87@+cdRx>(nI@-{$R^xK`vN z`+5h*4dTyxc5-xo*G#jpzu&`xW(Aac;Qv=!>DB#tYwUI(UcCM8#$T_#eg0dr=fdAV zd*@FJu6h^m9A)Ek?(3xL{=ZMRSnjo+DYGIl*KCI8$w`qx>yo!b-P)4&)=es@tMJCX zjc4?0;*u<{ze(v8aWZ(n{q*hB*}pG7opU#4s_pK$_2nw2 z=HKS$f97xc&+V>g8HflRMiK%C5}eE=>tG>S2O9}GGJ)~M$iNQNan;cKaDWKwgWq0@ zctw0BU$VQUs+eGG7t6!9F#5Wfd+ZZ?&6W$6gSmSWRlf387mlg;sRa$KhE_&3hae0Mo=lp9^?@J3f zrerD~E16Ur!lkV?y*TIFUHxgFd2e0pE8DWT_Uf%f%{k)Lu9H+e&;C(e`{2NX`PILU zNFLCtOnzKuCLXf5>qeJXlCjVt0ZFIc5XITzM|}NF-*-N@J*;x9)PIKFW6kv`^9=Q> zML#!A{k`qdrayhQQ+`(e(&G81cld7Jjq=Rh(o&PMGpbhSWLC}jk@4$o)3V*RXJh-T zn;&0HxF=t}Hg@^z$9wMg@qP9?RKL$qBzu#{n-5b`)T8T;Z)*Ru@%|aV^3{tOCwHpt zpU1mAuzIeoU#-mjcYGepTx|BddCYpasg^NAq2ARol7T@86fS(w!1)iM|1(5I1OzdG FIRFxu*rWge diff --git a/site/jsspeccy/tapeloaders/tape_48.szx b/site/jsspeccy/tapeloaders/tape_48.szx deleted file mode 100755 index 786df9581f15bc02987251f5120b6323319fdf31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 696 zcma!w2o7OnW@K;<3JD5iU|=ZDODssv&np8mu>vjzMuwcsq~e0q^yNSyX8W~Jyj8|y>1gG%s9Lz?x~31f{XjOJ{B^Y2LwcS zuW(uP?EmaH;hT()=9RfZ&0{#QK9i~b&HelP`Ol^aXHR~UoU5YVdg1=@7sXMlb?dU& z{zX21A_=5Z7sLZi?2^3S*{y+bA9Ws7T|} z(ORCp->3hvc@^_1bEUoJvZeQGua&;Lk`bZ4@1Ky_?(a3}+fVHW`x5GehWiD~h2_^7 zK|a$0`-}pU;T4=Nva6i`h}&*vF4e zZbd9CifU~(uCqjr@8oH35h+^2lbt*vjzMuwcsq~e0qyj>%mSYf;%N8f-3 zCZJvh){0wiuOIZk93aE~A%6QIhYXE&OFr)x28>FbQjZ@dN`1d%qkM6Oj>n>ndn+z6 zvnShxT+aC%|KUw;7B%xIbtZq^?rY$8Q7uN|XI-7=?!DKq zzq$R*G~WekFN6Eku%}kvG*@r!Rk`&4MQ8YqMZM|I>bwP>bn9yr%cH`SsqftSr5(R?UmwcI5ALv!|`Ox6l6Mc3tQ3`F>dD?%m&{w&vV_ z{@nh(#T8qfOJ&}B82NX3C+_8|R%0w^iT&yN?_A}Ff=}~o-u&DipS`=ad*1J>I`hBZ z(eK~4|JIyp?{~{DZ@=4Locb<8x6oStaICTMl%E&wiJw2CZY8yNTex>`qVein+1Yo# zeO8ezE*DCl^h~Jq>a&QxD*ky>Qp^8-{?)N8cIlaWS?^e;i}`=~lFpsDb<^gJMzK9s zN2e!GcVF%{J-KnloxOgyJ|u;!UZ18VJ=1Ox=R5gV|HYzD_wlSvmFNE^RnGo8UtsZB zqn=>HeT@wUiX8v=ydlFxqUGoVNu9P-S-EbV zCbq?SMl-fbw(Xt#e8UVKv(@t)=a|ph)A-@eh=H>UXi~(MOWQIRWbs2g|gq9id#-w^)ztF$AiD0{r+VV zf6L}*(z+LJtsTXFYvaRyuj;AIPx32&y=D3Bt2N7}UEh*^-R}R(tbc2Dr~kfl^Uqb| zGWECn8GG6Foe*KbNJ1DuLXDYZ9V{g4U?V|C6*y+tfjVv&ay1)BG+g9JTi2Z6Ze7{h zBU{D5&i~|M)dnX~W6pDmC#s#9BJF;h6c7TILog7q^ZnD8zx);7R_8n1xmmHMkmLRR zKUK#Tp8URVP06BlKv1{cD)fiX=`H!W&r7)-9DUEoYx6H&ASFF_p0=lBBm;vG$S6Lj WdH*5we+DN*BMUAdM-Yf1)&T%pP%Xd! diff --git a/site/jsspeccy/tapeloaders/tape_pentagon_usr0.szx b/site/jsspeccy/tapeloaders/tape_pentagon_usr0.szx deleted file mode 100755 index 3d647f23fc09b49dfd97b6da9438df36ac59e935..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1317 zcma!w2o7OnWoK{>3JFSJU|?`7ElveeH~|YI150{xQDs4im4cz3k)8opPG(YZL27bI zQE4tn$VAVCt28e$H`PkPC9$YHGf$zy!Ytm*M8VKP&s@(S%EBN>6=-@4BMZZ=n5!`^ z42t5j%_7vVFk8h0{kN63cVc8@e3t=K!DK5R9N-+p0c5fZFz|z1&Sgc{MIg z?E1Qsr~6DM+trpW%Di;#g}V2=$=mcl_5c1+a8CAc<)1R1?rTq8ugvIOt#SIZ^Z&q4 zw=3>0&zv&f+4RRFun(bbC^%flSik$KAIOVZU@tNOy?D?Nq~_3qul~6_@(Z9!VN}C* zMh9S6fOI?tiUCyub)4Pn#q223_OPFmv5-@Pi%TrdWtPZkBN;JH##GL*O;cO9PF*7L zZQh=VYehb?uXk|VApX2(Cr9^p%`^-9`#mf$vr*{-|G(NwukO!VW4HV8;_Y`g{(AN8 z^WTy^7yka)JAYbm)w_7-C>x)1Unf=f|9!f}aMH*tb91_kYjX zd+XY~)yc9o|29AWGk?>6Zg)k?Kt$j$k`OqM;AAFQ2MftM*htWk35+jB26mv1tA^f( z14LLK{PtSJE8;WxlHDy;#ROx!SRTHG(bvV?WB+h(Yu&ZwsAoZ8k&fs`^Ah3fdb>Q- zF6u_Ji3;8}nX#>;AaHrm>7Psw`JNY@@K$g^jXNlB!;`${&X*PlD^*%;4la7st#NsU zZ0G!IQ}0U)IHqJOA1j$u9KxloHoZ9K+g<%>pLuUx>?_-{xc2I;M9n$k)vl9NJkS17 zUHjm`gZb6Jjz}KRs!V=dW+oo8xa&rjSCX;NA^}OK-Vnvv;zxY_P2YDuw>_+Ktki#o z-eb-6Df0~VszpCHPW`>@(xyLswo`sq|I*_5rg!*m-i`9i-O^H%vNNhy=VVsR`H}JK zZPT*dwr6AetD7HROt>dszBYFG>&JWU_wjx9J5;~VP$YYk$eRySQq-gCj&ExJv+@2J zzw*_K87FtD?VrcHJg|DMtzWIo{dasG%Uo>sym`!exT%&gL!sW)F_M8n2ow^0(BSwF Oq5m^PMFa#ffjIzuvfNYv