@zip.js/zip.js 2.5.3 → 2.5.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/z-worker-fflate.js +1 -1
- package/dist/z-worker-pako.js +1 -1
- package/dist/z-worker.js +1 -1
- package/dist/zip-fs-full.js +470 -499
- package/dist/zip-fs-full.min.js +1 -1
- package/dist/zip-fs.js +470 -499
- package/dist/zip-fs.min.js +1 -1
- package/dist/zip-full.js +470 -499
- package/dist/zip-full.min.js +1 -1
- package/dist/zip-no-worker-deflate.min.js +1 -1
- package/dist/zip-no-worker-inflate.min.js +1 -1
- package/dist/zip-no-worker.min.js +1 -1
- package/dist/zip.js +470 -499
- package/dist/zip.min.js +1 -1
- package/index-fflate.js +1 -1
- package/index.d.ts +1 -1
- package/index.js +3 -3
- package/lib/core/{engine.js → codec-interface.js} +52 -50
- package/lib/core/{codecs/codec-pool-worker.js → codec-pool-worker.js} +55 -29
- package/lib/core/{codecs/codec-pool.js → codec-pool.js} +28 -9
- package/lib/core/configuration.js +10 -1
- package/lib/core/io.js +102 -100
- package/lib/core/{codecs → streams}/aes-crypto-stream.js +68 -54
- package/lib/core/{codecs → streams}/codec-stream.js +6 -6
- package/lib/core/{codecs → streams/codecs}/crc32.js +0 -0
- package/lib/core/{codecs → streams/codecs}/deflate.js +0 -0
- package/lib/core/{codecs → streams/codecs}/inflate.js +0 -0
- package/lib/core/{codecs → streams/codecs}/sjcl.js +0 -0
- package/lib/core/{codecs → streams}/crc32-stream.js +3 -4
- package/lib/core/{codecs → streams}/zip-crypto-stream.js +28 -32
- package/lib/core/streams/zip-entry-stream.js +185 -0
- package/lib/core/z-worker-core.js +30 -15
- package/lib/core/zip-fs-core.js +1 -1
- package/lib/core/zip-reader.js +21 -12
- package/lib/core/zip-writer.js +33 -25
- package/lib/z-worker-fflate.js +4 -1
- package/lib/z-worker-inline.js +1 -1
- package/lib/z-worker.js +2 -2
- package/lib/zip-fflate-shim.js +4 -1
- package/lib/zip-fs.js +6 -2
- package/lib/zip-full-fflate.js +6 -3
- package/lib/zip-full.js +8 -5
- package/lib/zip-no-worker-deflate.js +7 -3
- package/lib/zip-no-worker-fflate-deflate.js +6 -2
- package/lib/zip-no-worker-fflate-inflate.js +6 -3
- package/lib/zip-no-worker-fflate.js +6 -3
- package/lib/zip-no-worker-inflate.js +7 -4
- package/lib/zip-no-worker.js +8 -5
- package/lib/zip.js +6 -3
- package/package.json +2 -8
- package/lib/core/codecs/codec.js +0 -246
package/dist/zip-fs.js
CHANGED
|
@@ -36,6 +36,7 @@
|
|
|
36
36
|
|
|
37
37
|
/* global navigator */
|
|
38
38
|
|
|
39
|
+
const MINIMUM_CHUNK_SIZE = 64;
|
|
39
40
|
const DEFAULT_CONFIGURATION = {
|
|
40
41
|
chunkSize: 512 * 1024,
|
|
41
42
|
maxWorkers: (typeof navigator != "undefined" && navigator.hardwareConcurrency) || 2,
|
|
@@ -50,6 +51,10 @@
|
|
|
50
51
|
return config;
|
|
51
52
|
}
|
|
52
53
|
|
|
54
|
+
function getChunkSize(config) {
|
|
55
|
+
return Math.max(config.chunkSize, MINIMUM_CHUNK_SIZE);
|
|
56
|
+
}
|
|
57
|
+
|
|
53
58
|
function configure(configuration) {
|
|
54
59
|
if (configuration.baseURL !== undefined) {
|
|
55
60
|
config.baseURL = configuration.baseURL;
|
|
@@ -63,6 +68,9 @@
|
|
|
63
68
|
if (configuration.terminateWorkerTimeout !== undefined) {
|
|
64
69
|
config.terminateWorkerTimeout = configuration.terminateWorkerTimeout;
|
|
65
70
|
}
|
|
71
|
+
if (configuration.useCompressionStream !== undefined) {
|
|
72
|
+
config.useCompressionStream = configuration.useCompressionStream;
|
|
73
|
+
}
|
|
66
74
|
if (configuration.useWebWorkers !== undefined) {
|
|
67
75
|
config.useWebWorkers = configuration.useWebWorkers;
|
|
68
76
|
}
|
|
@@ -94,7 +102,7 @@
|
|
|
94
102
|
}
|
|
95
103
|
}
|
|
96
104
|
|
|
97
|
-
var e=e=>{if("function"==typeof URL.createObjectURL){const t=()=>URL.createObjectURL(new Blob(['const{Array:t,Object:e,Math:n,Error:r,Uint8Array:i,Uint16Array:s,Uint32Array:o,Int32Array:f,DataView:c,TextEncoder:a,crypto:l,postMessage:u,TransformStream:w,ReadableStream:h,WritableStream:d,CompressionStream:p,DecompressionStream:y}=globalThis,b=[];for(let t=0;256>t;t++){let e=t;for(let t=0;8>t;t++)1&e?e=e>>>1^3988292384:e>>>=1;b[t]=e}class m{constructor(t){this.t=t||-1}append(t){let e=0|this.t;for(let n=0,r=0|t.length;r>n;n++)e=e>>>8^b[255&(e^t[n])];this.t=e}get(){return~this.t}}class k extends w{constructor(){super({start(){this.i=new m},transform(t){t&&this.i.append(t)},flush(t){const e=new i(4);new c(e.buffer).setUint32(0,this.i.get()),t.enqueue(e)}})}}const v={concat(t,e){if(0===t.length||0===e.length)return t.concat(e);const n=t[t.length-1],r=v.o(n);return 32===r?t.concat(e):v.l(e,r,0|n,t.slice(0,t.length-1))},u(t){const e=t.length;if(0===e)return 0;const n=t[e-1];return 32*(e-1)+v.o(n)},h(t,e){if(32*t.length<e)return t;const r=(t=t.slice(0,n.ceil(e/32))).length;return e&=31,r>0&&e&&(t[r-1]=v.p(e,t[r-1]&2147483648>>e-1,1)),t},p:(t,e,n)=>32===t?e:(n?0|e:e<<32-t)+1099511627776*t,o:t=>n.round(t/1099511627776)||32,l(t,e,n,r){for(void 0===r&&(r=[]);e>=32;e-=32)r.push(n),n=0;if(0===e)return r.concat(t);for(let i=0;i<t.length;i++)r.push(n|t[i]>>>e),n=t[i]<<32-e;const i=t.length?t[t.length-1]:0,s=v.o(i);return r.push(v.p(e+s&31,e+s>32?n:r.pop(),1)),r}},g={m:{k(t){const e=v.u(t)/8,n=new i(e);let r;for(let i=0;e>i;i++)0==(3&i)&&(r=t[i/4]),n[i]=r>>>24,r<<=8;return n},v(t){const e=[];let n,r=0;for(n=0;n<t.length;n++)r=r<<8|t[n],3==(3&n)&&(e.push(r),r=0);return 3&n&&e.push(v.p(8*(3&n),r)),e}}},S={g:function(t){t?(this.S=t.S.slice(0),this._=t._.slice(0),this.C=t.C):this.reset()}};S.g.prototype={blockSize:512,reset:function(){const t=this;return t.S=this.I.slice(0),t._=[],t.C=0,t},update:function(t){const e=this;"string"==typeof t&&(t=g.A.v(t));const n=e._=v.concat(e._,t),i=e.C,s=e.C=i+v.u(t);if(s>9007199254740991)throw new r("Cannot hash more than 2^53 - 1 bits");const f=new o(n);let c=0;for(let t=e.blockSize+i-(e.blockSize+i&e.blockSize-1);s>=t;t+=e.blockSize)e.V(f.subarray(16*c,16*(c+1))),c+=1;return n.splice(0,16*c),e},P:function(){const t=this;let e=t._;const r=t.S;e=v.concat(e,[v.p(1,1)]);for(let t=e.length+2;15&t;t++)e.push(0);for(e.push(n.floor(t.C/4294967296)),e.push(0|t.C);e.length;)t.V(e.splice(0,16));return t.reset(),r},I:[1732584193,4023233417,2562383102,271733878,3285377520],B:[1518500249,1859775393,2400959708,3395469782],D:(t,e,n,r)=>t>19?t>39?t>59?t>79?void 0:e^n^r:e&n|e&r|n&r:e^n^r:e&n|~e&r,M:(t,e)=>e<<t|e>>>32-t,V:function(e){const r=this,i=r.S,s=t(80);for(let t=0;16>t;t++)s[t]=e[t];let o=i[0],f=i[1],c=i[2],a=i[3],l=i[4];for(let t=0;79>=t;t++){16>t||(s[t]=r.M(1,s[t-3]^s[t-8]^s[t-14]^s[t-16]));const e=r.M(5,o)+r.D(t,f,c,a)+l+s[t]+r.B[n.floor(t/20)]|0;l=a,a=c,c=r.M(30,f),f=o,o=e}i[0]=i[0]+o|0,i[1]=i[1]+f|0,i[2]=i[2]+c|0,i[3]=i[3]+a|0,i[4]=i[4]+l|0}};const z={getRandomValues(t){const e=new o(t.buffer),r=t=>{let e=987654321;const r=4294967295;return()=>(e=36969*(65535&e)+(e>>16)&r,(((e<<16)+(t=18e3*(65535&t)+(t>>16)&r)&r)/4294967296+.5)*(n.random()>.5?1:-1))};for(let i,s=0;s<t.length;s+=4){const t=r(4294967296*(i||n.random()));i=987654071*t(),e[s/4]=4294967296*t()|0}return t}},_={importKey:t=>new _.R(g.m.v(t)),U(t,e,n,i){if(n=n||1e4,0>i||0>n)throw new r("invalid params to pbkdf2");const s=1+(i>>5)<<2;let o,f,a,l,u;const w=new ArrayBuffer(s),h=new c(w);let d=0;const p=v;for(e=g.m.v(e),u=1;(s||1)>d;u++){for(o=f=t.encrypt(p.concat(e,[u])),a=1;n>a;a++)for(f=t.encrypt(f),l=0;l<f.length;l++)o[l]^=f[l];for(a=0;(s||1)>d&&a<o.length;a++)h.setInt32(d,o[a]),d+=4}return w.slice(0,i/8)},R:class{constructor(t){const e=this,n=e.T=S.g,r=[[],[]],i=n.prototype.blockSize/32;e.j=[new n,new n],t.length>i&&(t=n.hash(t));for(let e=0;i>e;e++)r[0][e]=909522486^t[e],r[1][e]=1549556828^t[e];e.j[0].update(r[0]),e.j[1].update(r[1]),e.H=new n(e.j[0])}reset(){const t=this;t.H=new t.T(t.j[0]),t.K=!1}update(t){this.K=!0,this.H.update(t)}digest(){const t=this,e=t.H.P(),n=new t.T(t.j[1]).update(e).P();return t.reset(),n}encrypt(t){if(this.K)throw new r("encrypt on already updated hmac called!");return this.update(t),this.digest(t)}}},C={name:"PBKDF2"},I=e.assign({hash:{name:"HMAC"}},C),A=e.assign({iterations:1e3,hash:{name:"SHA-1"}},C),x=["deriveBits"],V=[8,12,16],P=[16,24,32],B=[0,0,0,0],D=void 0!==l,E=D&&void 0!==l.subtle,M=g.m,R=class{constructor(t){const e=this;e.L=[[[],[],[],[],[]],[[],[],[],[],[]]],e.L[0][0][0]||e.W();const n=e.L[0][4],i=e.L[1],s=t.length;let o,f,c,a=1;if(4!==s&&6!==s&&8!==s)throw new r("invalid aes key size");for(e.B=[f=t.slice(0),c=[]],o=s;4*s+28>o;o++){let t=f[o-1];(o%s==0||8===s&&o%s==4)&&(t=n[t>>>24]<<24^n[t>>16&255]<<16^n[t>>8&255]<<8^n[255&t],o%s==0&&(t=t<<8^t>>>24^a<<24,a=a<<1^283*(a>>7))),f[o]=f[o-s]^t}for(let t=0;o;t++,o--){const e=f[3&t?o:o-4];c[t]=4>=o||4>t?e:i[0][n[e>>>24]]^i[1][n[e>>16&255]]^i[2][n[e>>8&255]]^i[3][n[255&e]]}}encrypt(t){return this.F(t,0)}decrypt(t){return this.F(t,1)}W(){const t=this.L[0],e=this.L[1],n=t[4],r=e[4],i=[],s=[];let o,f,c,a;for(let t=0;256>t;t++)s[(i[t]=t<<1^283*(t>>7))^t]=t;for(let l=o=0;!n[l];l^=f||1,o=s[o]||1){let s=o^o<<1^o<<2^o<<3^o<<4;s=s>>8^255&s^99,n[l]=s,r[s]=l,a=i[c=i[f=i[l]]];let u=16843009*a^65537*c^257*f^16843008*l,w=257*i[s]^16843008*s;for(let n=0;4>n;n++)t[n][l]=w=w<<24^w>>>8,e[n][s]=u=u<<24^u>>>8}for(let n=0;5>n;n++)t[n]=t[n].slice(0),e[n]=e[n].slice(0)}F(t,e){if(4!==t.length)throw new r("invalid aes block size");const n=this.B[e],i=n.length/4-2,s=[0,0,0,0],o=this.L[e],f=o[0],c=o[1],a=o[2],l=o[3],u=o[4];let w,h,d,p=t[0]^n[0],y=t[e?3:1]^n[1],b=t[2]^n[2],m=t[e?1:3]^n[3],k=4;for(let t=0;i>t;t++)w=f[p>>>24]^c[y>>16&255]^a[b>>8&255]^l[255&m]^n[k],h=f[y>>>24]^c[b>>16&255]^a[m>>8&255]^l[255&p]^n[k+1],d=f[b>>>24]^c[m>>16&255]^a[p>>8&255]^l[255&y]^n[k+2],m=f[m>>>24]^c[p>>16&255]^a[y>>8&255]^l[255&b]^n[k+3],k+=4,p=w,y=h,b=d;for(let t=0;4>t;t++)s[e?3&-t:t]=u[p>>>24]<<24^u[y>>16&255]<<16^u[b>>8&255]<<8^u[255&m]^n[k++],w=p,p=y,y=b,b=m,m=w;return s}},U=class{constructor(t,e){this.O=t,this.q=e,this.G=e}reset(){this.G=this.q}update(t){return this.J(this.O,t,this.G)}N(t){if(255==(t>>24&255)){let e=t>>16&255,n=t>>8&255,r=255&t;255===e?(e=0,255===n?(n=0,255===r?r=0:++r):++n):++e,t=0,t+=e<<16,t+=n<<8,t+=r}else t+=1<<24;return t}X(t){0===(t[0]=this.N(t[0]))&&(t[1]=this.N(t[1]))}J(t,e,n){let r;if(!(r=e.length))return[];const i=v.u(e);for(let i=0;r>i;i+=4){this.X(n);const r=t.encrypt(n);e[i]^=r[0],e[i+1]^=r[1],e[i+2]^=r[2],e[i+3]^=r[3]}return v.h(e,i)}},T=_.R;class j extends w{constructor(n,s,o){let f;super({start(){e.assign(this,{ready:new Promise((t=>this.Y=t)),password:n,signed:s,Z:o-1,pending:new i(0)})},async transform(e,n){if(e&&e.length){const s=this;if(s.password){const n=s.password;s.password=null;const i=F(e,0,V[s.Z]+2);await(async(t,e,n)=>{await L(t,n,F(e,0,V[t.Z]));const i=F(e,V[t.Z]),s=t.keys.passwordVerification;if(s[0]!=i[0]||s[1]!=i[1])throw new r("Invalid pasword")})(s,i,n),s.$=new U(new R(s.keys.key),t.from(B)),s.tt=new T(s.keys.et),e=F(e,V[s.Z]+2),s.Y()}else await s.ready;const o=new i(e.length-10-(e.length-10)%16);n.enqueue(K(s,e,o,0,10,!0))}},async flush(t){const e=this;await e.ready;const n=e.pending,r=F(n,0,n.length-10),s=F(n,n.length-10);let o=new i(0);if(r.length){const t=M.v(r);e.tt.update(t);const n=e.$.update(t);o=M.k(n)}if(f.valid=!0,e.signed){const t=F(M.k(e.tt.digest()),0,10);for(let e=0;10>e;e++)t[e]!=s[e]&&(f.valid=!1)}t.enqueue(o)}}),f=this}}class H extends w{constructor(n,r){let s;super({start(){e.assign(this,{ready:new Promise((t=>this.Y=t)),password:n,Z:r-1,pending:new i(0)})},async transform(e,n){if(e&&e.length){const r=this;let s=new i(0);if(r.password){const e=r.password;r.password=null,s=await(async(t,e)=>{const n=(r=new i(V[t.Z]),D&&"function"==typeof l.getRandomValues?l.getRandomValues(r):z.getRandomValues(r));var r;return await L(t,e,n),W(n,t.keys.passwordVerification)})(r,e),r.$=new U(new R(r.keys.key),t.from(B)),r.tt=new T(r.keys.et),r.Y()}else await r.ready;const o=new i(s.length+e.length-e.length%16);o.set(s,0),n.enqueue(K(r,e,o,s.length,0))}},async flush(t){const e=this;await e.ready;let n=new i(0);if(e.pending.length){const t=e.$.update(M.v(e.pending));e.tt.update(t),n=M.k(t)}s.signature=M.k(e.tt.digest()).slice(0,10),t.enqueue(W(n,s.signature))}}),s=this}}function K(t,e,n,r,s,o){const f=e.length-s;let c;for(t.pending.length&&(e=W(t.pending,e),n=((t,e)=>{if(e&&e>t.length){const n=t;(t=new i(e)).set(n,0)}return t})(n,f-f%16)),c=0;f-16>=c;c+=16){const i=M.v(F(e,c,c+16));o&&t.tt.update(i);const s=t.$.update(i);o||t.tt.update(s),n.set(M.k(s),c+r)}return t.pending=F(e,c),n}async function L(t,n,r){const s=(t=>{if(void 0===a){const e=new i((t=unescape(encodeURIComponent(t))).length);for(let n=0;n<e.length;n++)e[n]=t.charCodeAt(n);return e}return(new a).encode(t)})(n),o=await((t,e,n,r,i)=>D&&E&&"function"==typeof l.subtle.importKey?l.subtle.importKey("raw",e,n,!1,i):_.importKey(e))(0,s,I,0,x),f=await(async(t,e,n)=>D&&E&&"function"==typeof l.subtle.deriveBits?await l.subtle.deriveBits(t,e,n):_.U(e,t.salt,A.iterations,n))(e.assign({salt:r},A),o,8*(2*P[t.Z]+2)),c=new i(f);t.keys={key:M.v(F(c,0,P[t.Z])),et:M.v(F(c,P[t.Z],2*P[t.Z])),passwordVerification:F(c,2*P[t.Z])}}function W(t,e){let n=t;return t.length+e.length&&(n=new i(t.length+e.length),n.set(t,0),n.set(e,t.length)),n}function F(t,e,n){return t.subarray(e,n)}class O extends w{constructor(t,n){let i;super({start(){e.assign(this,{password:t,passwordVerification:n}),N(this,t)},transform(t,e){if(t&&t.length){const n=this;if(n.password){const e=G(n,t.subarray(0,12));if(n.password=null,e[11]!=n.passwordVerification)throw new r("Invalid pasword");t=t.subarray(12)}e.enqueue(G(n,t))}},flush(){i.valid=!0}}),i=this}}class q extends w{constructor(t,n){super({start(){e.assign(this,{password:t,passwordVerification:n}),N(this,t)},transform(t,e){if(t&&t.length){const n=this;let r,s;if(n.password){n.password=null;const e=l.getRandomValues(new i(12));e[11]=n.passwordVerification,r=new i(t.length+e.length),r.set(J(n,e),0),s=12}else r=new i(t.length),s=0;r.set(J(n,t),s),e.enqueue(r)}},flush(){}})}}function G(t,e){const n=new i(e.length);for(let r=0;r<e.length;r++)n[r]=X(t)^e[r],Q(t,n[r]);return n}function J(t,e){const n=new i(e.length);for(let r=0;r<e.length;r++)n[r]=X(t)^e[r],Q(t,e[r]);return n}function N(t,e){t.keys=[305419896,591751049,878082192],t.nt=new m(t.keys[0]),t.rt=new m(t.keys[2]);for(let n=0;n<e.length;n++)Q(t,e.charCodeAt(n))}function Q(t,e){t.nt.append([e]),t.keys[0]=~t.nt.get(),t.keys[1]=Z(t.keys[1]+Y(t.keys[0])),t.keys[1]=Z(n.imul(t.keys[1],134775813)+1),t.rt.append([t.keys[1]>>>24]),t.keys[2]=~t.rt.get()}function X(t){const e=2|t.keys[2];return Y(n.imul(e,1^e)>>>8)}function Y(t){return 255&t}function Z(t){return 4294967295&t}class $ extends w{constructor(t,e){super({start(){this.it=new t(e)},transform(t,e){(t=this.it.append(t))&&e.enqueue(t)},flush(t){const e=this.it.flush();e&&t.enqueue(e)}})}}class tt{constructor(t,{signature:n,password:r,signed:i,compressed:s,zipCrypto:o,passwordVerification:f,encryptionStrength:c,st:a},{ot:l}){const u=this;function w(){u.stream=u.stream.pipeThrough(new $(t,{ot:l}))}u.start=async()=>{const t=!!r;if(e.assign(u,{signature:n,encrypted:t,signed:i,compressed:s,zipCrypto:o,stream:new h({async pull(t){const{value:e,done:n}=await u.pull();t.enqueue(e),(n||u.aborted)&&t.close()}})}),t&&(o?u.stream=u.stream.pipeThrough(new O(r,f)):(u.ft=new j(r,i,c),u.stream=u.stream.pipeThrough(u.ft))),s)if(void 0!==a&&!a||void 0===y)w();else try{u.stream=u.stream.pipeThrough(new y("deflate-raw"))}catch(t){w()}if((!t||o)&&i){const t=u.stream.tee();u.stream=t[0],u.ct=t[1].pipeThrough(new k)}u.lt=u.stream.getReader(),await u.read()},u.abort=()=>u.aborted=!0}async read(){const t=this,{value:e,done:n}=await t.lt.read();if(e&&e.length&&t.ut({value:{data:new i(e)}}),n){let e;if(t.encrypted&&!t.zipCrypto&&!t.ft.valid)throw new r("Invalid signature");if((!t.encrypted||t.zipCrypto)&&t.signed){e=await t.ct.getReader().read();const n=new c(e.value.buffer);if(t.signature!=n.getUint32(0,!1))throw new r("Invalid signature")}t.ut({value:{signature:e},done:n})}else await t.read()}}class et{constructor(t,{encrypted:n,signed:r,compressed:i,level:s,zipCrypto:o,password:f,passwordVerification:c,encryptionStrength:a,st:l},{ot:u}){const w=this;function d(){w.stream=w.stream.pipeThrough(new $(t,{ot:u,level:s}))}w.start=async()=>{if(e.assign(this,{encrypted:n,signed:r,compressed:i,zipCrypto:o,stream:new h({async pull(t){const{value:e,done:n}=await w.pull();t.enqueue(e),(n||w.aborted)&&t.close()}})}),(!n||o)&&r){const t=w.stream.tee();w.stream=t[0],w.ct=t[1].pipeThrough(new k({ot:u}))}if(i)if(void 0!==l&&!l||void 0===p)d();else try{w.stream=w.stream.pipeThrough(new p("deflate-raw"))}catch(t){d()}n&&(o?w.stream=w.stream.pipeThrough(new q(f,c)):(w.wt=new H(f,a),w.stream=w.stream.pipeThrough(w.wt))),w.lt=w.stream.getReader(),await w.read()},w.abort=()=>w.aborted=!0}async read(){const t=this,{value:e,done:n}=await t.lt.read();if(e&&e.length&&t.ut({value:{data:e}}),n){let e;t.encrypted&&!t.zipCrypto&&(e=t.wt.signature),t.encrypted&&!t.zipCrypto||!t.signed||(e=await t.ct.getReader().read(),e=new c(e.value.buffer).getUint32(0)),t.ut({value:{signature:e},done:n})}else await t.read()}}const nt=new Map;let rt,it=0;function st(t){if(t.data){const e=t.data.value.data;if(e&&e.length)try{t.data.value.data=e.buffer,u(t,[t.data.value.data])}catch(e){u(t)}else u(t)}else u(t)}addEventListener("message",(async t=>{const e=t.data,n=e.type;try{if("start"==n&&(async t=>{try{t.scripts&&t.scripts.length&&importScripts.apply(void 0,t.scripts);const e=t.options;let n;self.initCodec&&self.initCodec(),e.codecType.startsWith("deflate")?n=self.Deflate:e.codecType.startsWith("inflate")&&(n=self.Inflate),rt=((t,e,n)=>e.codecType.startsWith("deflate")?new et(t,e,n):e.codecType.startsWith("inflate")?new tt(t,e,n):void 0)(n,e,t.config),rt.ut=t=>st({type:"data",data:t}),rt.onerror=t=>u({error:{message:t.message,stack:t.stack}}),rt.pull=()=>{const t=new Promise(((t,e)=>nt.set(it,{resolve:t,reject:e})));return st({type:"pull",messageId:it}),it++,t},await rt.start()}catch(t){u({error:{message:t.message,stack:t.stack}})}})(e),"data"==n){const{resolve:t}=nt.get(e.messageId);nt.delete(e.messageId),t({value:new i(e.data),done:e.done})}"abort"==n&&rt.abort()}catch(t){u({error:{message:t.message,stack:t.stack}})}}));const ot=(()=>{const e=-2;function o(e){return f(e.map((([e,n])=>new t(e).fill(n,0,e))))}function f(e){return e.reduce(((e,n)=>e.concat(t.isArray(n)?f(n):n)),[])}const c=[0,1,2,3].concat(...o([[2,4],[2,5],[4,6],[4,7],[8,8],[8,9],[16,10],[16,11],[32,12],[32,13],[64,14],[64,15],[2,0],[1,16],[1,17],[2,18],[2,19],[4,20],[4,21],[8,22],[8,23],[16,24],[16,25],[32,26],[32,27],[64,28],[64,29]]));function a(){const t=this;function e(t,e){let n=0;do{n|=1&t,t>>>=1,n<<=1}while(--e>0);return n>>>1}t.ht=r=>{const i=t.dt,s=t.bt.yt,o=t.bt.kt;let f,c,a,l=-1;for(r.vt=0,r.gt=573,f=0;o>f;f++)0!==i[2*f]?(r.St[++r.vt]=l=f,r.zt[f]=0):i[2*f+1]=0;for(;2>r.vt;)a=r.St[++r.vt]=2>l?++l:0,i[2*a]=1,r.zt[a]=0,r._t--,s&&(r.Ct-=s[2*a+1]);for(t.It=l,f=n.floor(r.vt/2);f>=1;f--)r.At(i,f);a=o;do{f=r.St[1],r.St[1]=r.St[r.vt--],r.At(i,1),c=r.St[1],r.St[--r.gt]=f,r.St[--r.gt]=c,i[2*a]=i[2*f]+i[2*c],r.zt[a]=n.max(r.zt[f],r.zt[c])+1,i[2*f+1]=i[2*c+1]=a,r.St[1]=a++,r.At(i,1)}while(r.vt>=2);r.St[--r.gt]=r.St[1],(e=>{const n=t.dt,r=t.bt.yt,i=t.bt.xt,s=t.bt.Vt,o=t.bt.Pt;let f,c,a,l,u,w,h=0;for(l=0;15>=l;l++)e.Bt[l]=0;for(n[2*e.St[e.gt]+1]=0,f=e.gt+1;573>f;f++)c=e.St[f],l=n[2*n[2*c+1]+1]+1,l>o&&(l=o,h++),n[2*c+1]=l,c>t.It||(e.Bt[l]++,u=0,s>c||(u=i[c-s]),w=n[2*c],e._t+=w*(l+u),r&&(e.Ct+=w*(r[2*c+1]+u)));if(0!==h){do{for(l=o-1;0===e.Bt[l];)l--;e.Bt[l]--,e.Bt[l+1]+=2,e.Bt[o]--,h-=2}while(h>0);for(l=o;0!==l;l--)for(c=e.Bt[l];0!==c;)a=e.St[--f],a>t.It||(n[2*a+1]!=l&&(e._t+=(l-n[2*a+1])*n[2*a],n[2*a+1]=l),c--)}})(r),((t,n,r)=>{const i=[];let s,o,f,c=0;for(s=1;15>=s;s++)i[s]=c=c+r[s-1]<<1;for(o=0;n>=o;o++)f=t[2*o+1],0!==f&&(t[2*o]=e(i[f]++,f))})(i,t.It,r.Bt)}}function l(t,e,n,r,i){const s=this;s.yt=t,s.xt=e,s.Vt=n,s.kt=r,s.Pt=i}a.Dt=[0,1,2,3,4,5,6,7].concat(...o([[2,8],[2,9],[2,10],[2,11],[4,12],[4,13],[4,14],[4,15],[8,16],[8,17],[8,18],[8,19],[16,20],[16,21],[16,22],[16,23],[32,24],[32,25],[32,26],[31,27],[1,28]])),a.Et=[0,1,2,3,4,5,6,7,8,10,12,14,16,20,24,28,32,40,48,56,64,80,96,112,128,160,192,224,0],a.Mt=[0,1,2,3,4,6,8,12,16,24,32,48,64,96,128,192,256,384,512,768,1024,1536,2048,3072,4096,6144,8192,12288,16384,24576],a.Rt=t=>256>t?c[t]:c[256+(t>>>7)],a.Ut=[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],a.Tt=[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],a.jt=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],a.Ht=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];const u=o([[144,8],[112,9],[24,7],[8,8]]);l.Kt=f([12,140,76,204,44,172,108,236,28,156,92,220,60,188,124,252,2,130,66,194,34,162,98,226,18,146,82,210,50,178,114,242,10,138,74,202,42,170,106,234,26,154,90,218,58,186,122,250,6,134,70,198,38,166,102,230,22,150,86,214,54,182,118,246,14,142,78,206,46,174,110,238,30,158,94,222,62,190,126,254,1,129,65,193,33,161,97,225,17,145,81,209,49,177,113,241,9,137,73,201,41,169,105,233,25,153,89,217,57,185,121,249,5,133,69,197,37,165,101,229,21,149,85,213,53,181,117,245,13,141,77,205,45,173,109,237,29,157,93,221,61,189,125,253,19,275,147,403,83,339,211,467,51,307,179,435,115,371,243,499,11,267,139,395,75,331,203,459,43,299,171,427,107,363,235,491,27,283,155,411,91,347,219,475,59,315,187,443,123,379,251,507,7,263,135,391,71,327,199,455,39,295,167,423,103,359,231,487,23,279,151,407,87,343,215,471,55,311,183,439,119,375,247,503,15,271,143,399,79,335,207,463,47,303,175,431,111,367,239,495,31,287,159,415,95,351,223,479,63,319,191,447,127,383,255,511,0,64,32,96,16,80,48,112,8,72,40,104,24,88,56,120,4,68,36,100,20,84,52,116,3,131,67,195,35,163,99,227].map(((t,e)=>[t,u[e]])));const w=o([[30,5]]);function h(t,e,n,r,i){const s=this;s.Lt=t,s.Wt=e,s.Ft=n,s.Ot=r,s.qt=i}l.Gt=f([0,16,8,24,4,20,12,28,2,18,10,26,6,22,14,30,1,17,9,25,5,21,13,29,3,19,11,27,7,23].map(((t,e)=>[t,w[e]]))),l.Jt=new l(l.Kt,a.Ut,257,286,15),l.Nt=new l(l.Gt,a.Tt,0,30,15),l.Qt=new l(null,a.jt,0,19,7);const d=[new h(0,0,0,0,0),new h(4,4,8,4,1),new h(4,5,16,8,1),new h(4,6,32,32,1),new h(4,4,16,16,2),new h(8,16,32,32,2),new h(8,16,128,128,2),new h(8,32,128,256,2),new h(32,128,258,1024,2),new h(32,258,258,4096,2)],p=["need dictionary","stream end","","","stream error","data error","","buffer error","",""],y=113,b=666,m=262;function k(t,e,n,r){const i=t[2*e],s=t[2*n];return s>i||i==s&&r[e]<=r[n]}function v(){const t=this;let r,o,f,c,u,w,h,v,g,S,z,_,C,I,A,x,V,P,B,D,E,M,R,U,T,j,H,K,L,W,F,O,q;const G=new a,J=new a,N=new a;let Q,X,Y,Z,$,tt;function et(){let e;for(e=0;286>e;e++)F[2*e]=0;for(e=0;30>e;e++)O[2*e]=0;for(e=0;19>e;e++)q[2*e]=0;F[512]=1,t._t=t.Ct=0,X=Y=0}function nt(t,e){let n,r=-1,i=t[1],s=0,o=7,f=4;0===i&&(o=138,f=3),t[2*(e+1)+1]=65535;for(let c=0;e>=c;c++)n=i,i=t[2*(c+1)+1],++s<o&&n==i||(f>s?q[2*n]+=s:0!==n?(n!=r&&q[2*n]++,q[32]++):s>10?q[36]++:q[34]++,s=0,r=n,0===i?(o=138,f=3):n==i?(o=6,f=3):(o=7,f=4))}function rt(e){t.Xt[t.pending++]=e}function it(t){rt(255&t),rt(t>>>8&255)}function st(t,e){let n;const r=e;tt>16-r?(n=t,$|=n<<tt&65535,it($),$=n>>>16-tt,tt+=r-16):($|=t<<tt&65535,tt+=r)}function ot(t,e){const n=2*t;st(65535&e[n],65535&e[n+1])}function ft(t,e){let n,r,i=-1,s=t[1],o=0,f=7,c=4;for(0===s&&(f=138,c=3),n=0;e>=n;n++)if(r=s,s=t[2*(n+1)+1],++o>=f||r!=s){if(c>o)do{ot(r,q)}while(0!=--o);else 0!==r?(r!=i&&(ot(r,q),o--),ot(16,q),st(o-3,2)):o>10?(ot(18,q),st(o-11,7)):(ot(17,q),st(o-3,3));o=0,i=r,0===s?(f=138,c=3):r==s?(f=6,c=3):(f=7,c=4)}}function ct(){16==tt?(it($),$=0,tt=0):8>tt||(rt(255&$),$>>>=8,tt-=8)}function at(e,r){let i,s,o;if(t.Yt[X]=e,t.Zt[X]=255&r,X++,0===e?F[2*r]++:(Y++,e--,F[2*(a.Dt[r]+256+1)]++,O[2*a.Rt(e)]++),0==(8191&X)&&H>2){for(i=8*X,s=E-V,o=0;30>o;o++)i+=O[2*o]*(5+a.Tt[o]);if(i>>>=3,Y<n.floor(X/2)&&i<n.floor(s/2))return!0}return X==Q-1}function lt(e,n){let r,i,s,o,f=0;if(0!==X)do{r=t.Yt[f],i=t.Zt[f],f++,0===r?ot(i,e):(s=a.Dt[i],ot(s+256+1,e),o=a.Ut[s],0!==o&&(i-=a.Et[s],st(i,o)),r--,s=a.Rt(r),ot(s,n),o=a.Tt[s],0!==o&&(r-=a.Mt[s],st(r,o)))}while(X>f);ot(256,e),Z=e[513]}function ut(){tt>8?it($):tt>0&&rt(255&$),$=0,tt=0}function wt(e,n,r){st(0+(r?1:0),3),((e,n)=>{ut(),Z=8,it(n),it(~n),t.Xt.set(v.subarray(e,e+n),t.pending),t.pending+=n})(e,n)}function ht(e){((e,n,r)=>{let i,s,o=0;H>0?(G.ht(t),J.ht(t),o=(()=>{let e;for(nt(F,G.It),nt(O,J.It),N.ht(t),e=18;e>=3&&0===q[2*a.Ht[e]+1];e--);return t._t+=14+3*(e+1),e})(),i=t._t+3+7>>>3,s=t.Ct+3+7>>>3,s>i||(i=s)):i=s=n+5,n+4>i||-1==e?s==i?(st(2+(r?1:0),3),lt(l.Kt,l.Gt)):(st(4+(r?1:0),3),((t,e,n)=>{let r;for(st(t-257,5),st(e-1,5),st(n-4,4),r=0;n>r;r++)st(q[2*a.Ht[r]+1],3);ft(F,t-1),ft(O,e-1)})(G.It+1,J.It+1,o+1),lt(F,O)):wt(e,n,r),et(),r&&ut()})(0>V?-1:V,E-V,e),V=E,r.$t()}function dt(){let t,e,n,i;do{if(i=g-R-E,0===i&&0===E&&0===R)i=u;else if(-1==i)i--;else if(E>=u+u-m){v.set(v.subarray(u,u+u),0),M-=u,E-=u,V-=u,t=C,n=t;do{e=65535&z[--n],z[n]=u>e?0:e-u}while(0!=--t);t=u,n=t;do{e=65535&S[--n],S[n]=u>e?0:e-u}while(0!=--t);i+=u}if(0===r.te)return;t=r.ee(v,E+R,i),R+=t,3>R||(_=255&v[E],_=(_<<x^255&v[E+1])&A)}while(m>R&&0!==r.te)}function pt(t){let e,n,r=T,i=E,s=U;const o=E>u-m?E-(u-m):0;let f=W;const c=h,a=E+258;let l=v[i+s-1],w=v[i+s];L>U||(r>>=2),f>R&&(f=R);do{if(e=t,v[e+s]==w&&v[e+s-1]==l&&v[e]==v[i]&&v[++e]==v[i+1]){i+=2,e++;do{}while(v[++i]==v[++e]&&v[++i]==v[++e]&&v[++i]==v[++e]&&v[++i]==v[++e]&&v[++i]==v[++e]&&v[++i]==v[++e]&&v[++i]==v[++e]&&v[++i]==v[++e]&&a>i);if(n=258-(a-i),i=a-258,n>s){if(M=t,s=n,n>=f)break;l=v[i+s-1],w=v[i+s]}}}while((t=65535&S[t&c])>o&&0!=--r);return s>R?R:s}t.zt=[],t.Bt=[],t.St=[],F=[],O=[],q=[],t.At=(e,n)=>{const r=t.St,i=r[n];let s=n<<1;for(;s<=t.vt&&(s<t.vt&&k(e,r[s+1],r[s],t.zt)&&s++,!k(e,i,r[s],t.zt));)r[n]=r[s],n=s,s<<=1;r[n]=i},t.ne=(r,a,p,b,m,k)=>(b||(b=8),m||(m=8),k||(k=0),r.re=null,-1==a&&(a=6),1>m||m>9||8!=b||9>p||p>15||0>a||a>9||0>k||k>2?e:(r.ie=t,w=p,u=1<<w,h=u-1,I=m+7,C=1<<I,A=C-1,x=n.floor((I+3-1)/3),v=new i(2*u),S=[],z=[],Q=1<<m+6,t.Xt=new i(4*Q),f=4*Q,t.Yt=new s(Q),t.Zt=new i(Q),H=a,K=k,(e=>(e.se=e.oe=0,e.re=null,t.pending=0,t.fe=0,o=y,c=0,G.dt=F,G.bt=l.Jt,J.dt=O,J.bt=l.Nt,N.dt=q,N.bt=l.Qt,$=0,tt=0,Z=8,et(),(()=>{g=2*u,z[C-1]=0;for(let t=0;C-1>t;t++)z[t]=0;j=d[H].Wt,L=d[H].Lt,W=d[H].Ft,T=d[H].Ot,E=0,V=0,R=0,P=U=2,D=0,_=0})(),0))(r))),t.ce=()=>42!=o&&o!=y&&o!=b?e:(t.Zt=null,t.Yt=null,t.Xt=null,z=null,S=null,v=null,t.ie=null,o==y?-3:0),t.ae=(t,n,r)=>{let i=0;return-1==n&&(n=6),0>n||n>9||0>r||r>2?e:(d[H].qt!=d[n].qt&&0!==t.se&&(i=t.le(1)),H!=n&&(H=n,j=d[H].Wt,L=d[H].Lt,W=d[H].Ft,T=d[H].Ot),K=r,i)},t.ue=(t,n,r)=>{let i,s=r,f=0;if(!n||42!=o)return e;if(3>s)return 0;for(s>u-m&&(s=u-m,f=r-s),v.set(n.subarray(f,f+s),0),E=s,V=s,_=255&v[0],_=(_<<x^255&v[1])&A,i=0;s-3>=i;i++)_=(_<<x^255&v[i+2])&A,S[i&h]=z[_],z[_]=i;return 0},t.le=(n,i)=>{let s,a,k,g,I;if(i>4||0>i)return e;if(!n.we||!n.he&&0!==n.te||o==b&&4!=i)return n.re=p[4],e;if(0===n.de)return n.re=p[7],-5;var T;if(r=n,g=c,c=i,42==o&&(a=8+(w-8<<4)<<8,k=(H-1&255)>>1,k>3&&(k=3),a|=k<<6,0!==E&&(a|=32),a+=31-a%31,o=y,rt((T=a)>>8&255),rt(255&T)),0!==t.pending){if(r.$t(),0===r.de)return c=-1,0}else if(0===r.te&&g>=i&&4!=i)return r.re=p[7],-5;if(o==b&&0!==r.te)return n.re=p[7],-5;if(0!==r.te||0!==R||0!=i&&o!=b){switch(I=-1,d[H].qt){case 0:I=(t=>{let e,n=65535;for(n>f-5&&(n=f-5);;){if(1>=R){if(dt(),0===R&&0==t)return 0;if(0===R)break}if(E+=R,R=0,e=V+n,(0===E||E>=e)&&(R=E-e,E=e,ht(!1),0===r.de))return 0;if(E-V>=u-m&&(ht(!1),0===r.de))return 0}return ht(4==t),0===r.de?4==t?2:0:4==t?3:1})(i);break;case 1:I=(t=>{let e,n=0;for(;;){if(m>R){if(dt(),m>R&&0==t)return 0;if(0===R)break}if(3>R||(_=(_<<x^255&v[E+2])&A,n=65535&z[_],S[E&h]=z[_],z[_]=E),0===n||(E-n&65535)>u-m||2!=K&&(P=pt(n)),3>P)e=at(0,255&v[E]),R--,E++;else if(e=at(E-M,P-3),R-=P,P>j||3>R)E+=P,P=0,_=255&v[E],_=(_<<x^255&v[E+1])&A;else{P--;do{E++,_=(_<<x^255&v[E+2])&A,n=65535&z[_],S[E&h]=z[_],z[_]=E}while(0!=--P);E++}if(e&&(ht(!1),0===r.de))return 0}return ht(4==t),0===r.de?4==t?2:0:4==t?3:1})(i);break;case 2:I=(t=>{let e,n,i=0;for(;;){if(m>R){if(dt(),m>R&&0==t)return 0;if(0===R)break}if(3>R||(_=(_<<x^255&v[E+2])&A,i=65535&z[_],S[E&h]=z[_],z[_]=E),U=P,B=M,P=2,0!==i&&j>U&&u-m>=(E-i&65535)&&(2!=K&&(P=pt(i)),5>=P&&(1==K||3==P&&E-M>4096)&&(P=2)),3>U||P>U)if(0!==D){if(e=at(0,255&v[E-1]),e&&ht(!1),E++,R--,0===r.de)return 0}else D=1,E++,R--;else{n=E+R-3,e=at(E-1-B,U-3),R-=U-1,U-=2;do{++E>n||(_=(_<<x^255&v[E+2])&A,i=65535&z[_],S[E&h]=z[_],z[_]=E)}while(0!=--U);if(D=0,P=2,E++,e&&(ht(!1),0===r.de))return 0}}return 0!==D&&(e=at(0,255&v[E-1]),D=0),ht(4==t),0===r.de?4==t?2:0:4==t?3:1})(i)}if(2!=I&&3!=I||(o=b),0==I||2==I)return 0===r.de&&(c=-1),0;if(1==I){if(1==i)st(2,3),ot(256,l.Kt),ct(),9>1+Z+10-tt&&(st(2,3),ot(256,l.Kt),ct()),Z=7;else if(wt(0,0,!1),3==i)for(s=0;C>s;s++)z[s]=0;if(r.$t(),0===r.de)return c=-1,0}}return 4!=i?0:1}}function g(){const t=this;t.pe=0,t.ye=0,t.te=0,t.se=0,t.de=0,t.oe=0}return g.prototype={ne:function(t,e){const n=this;return n.ie=new v,e||(e=15),n.ie.ne(n,t,e)},le:function(t){const n=this;return n.ie?n.ie.le(n,t):e},ce:function(){const t=this;if(!t.ie)return e;const n=t.ie.ce();return t.ie=null,n},ae:function(t,n){const r=this;return r.ie?r.ie.ae(r,t,n):e},ue:function(t,n){const r=this;return r.ie?r.ie.ue(r,t,n):e},ee:function(t,e,n){const r=this;let i=r.te;return i>n&&(i=n),0===i?0:(r.te-=i,t.set(r.he.subarray(r.pe,r.pe+i),e),r.pe+=i,r.se+=i,i)},$t:function(){const t=this;let e=t.ie.pending;e>t.de&&(e=t.de),0!==e&&(t.we.set(t.ie.Xt.subarray(t.ie.fe,t.ie.fe+e),t.ye),t.ye+=e,t.ie.fe+=e,t.oe+=e,t.de-=e,t.ie.pending-=e,0===t.ie.pending&&(t.ie.fe=0))}},function(t){const e=new g,s=(o=t&&t.ot?t.ot:65536)+5*(n.floor(o/16383)+1);var o;const f=new i(s);let c=t?t.level:-1;void 0===c&&(c=-1),e.ne(c),e.we=f,this.append=(t,n)=>{let o,c,a=0,l=0,u=0;const w=[];if(t.length){e.pe=0,e.he=t,e.te=t.length;do{if(e.ye=0,e.de=s,o=e.le(0),0!=o)throw new r("deflating: "+e.re);e.ye&&(e.ye==s?w.push(new i(f)):w.push(f.slice(0,e.ye))),u+=e.ye,n&&e.pe>0&&e.pe!=a&&(n(e.pe),a=e.pe)}while(e.te>0||0===e.de);return w.length>1?(c=new i(u),w.forEach((t=>{c.set(t,l),l+=t.length}))):c=w[0]||new i(0),c}},this.flush=()=>{let t,n,o=0,c=0;const a=[];do{if(e.ye=0,e.de=s,t=e.le(4),1!=t&&0!=t)throw new r("deflating: "+e.re);s-e.de>0&&a.push(f.slice(0,e.ye)),c+=e.ye}while(e.te>0||0===e.de);return e.ce(),n=new i(c),a.forEach((t=>{n.set(t,o),o+=t.length})),n}}})(),ft=(()=>{const t=-2,e=-3,s=-5,o=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535],c=[96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,192,80,7,10,0,8,96,0,8,32,0,9,160,0,8,0,0,8,128,0,8,64,0,9,224,80,7,6,0,8,88,0,8,24,0,9,144,83,7,59,0,8,120,0,8,56,0,9,208,81,7,17,0,8,104,0,8,40,0,9,176,0,8,8,0,8,136,0,8,72,0,9,240,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,200,81,7,13,0,8,100,0,8,36,0,9,168,0,8,4,0,8,132,0,8,68,0,9,232,80,7,8,0,8,92,0,8,28,0,9,152,84,7,83,0,8,124,0,8,60,0,9,216,82,7,23,0,8,108,0,8,44,0,9,184,0,8,12,0,8,140,0,8,76,0,9,248,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,196,81,7,11,0,8,98,0,8,34,0,9,164,0,8,2,0,8,130,0,8,66,0,9,228,80,7,7,0,8,90,0,8,26,0,9,148,84,7,67,0,8,122,0,8,58,0,9,212,82,7,19,0,8,106,0,8,42,0,9,180,0,8,10,0,8,138,0,8,74,0,9,244,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,204,81,7,15,0,8,102,0,8,38,0,9,172,0,8,6,0,8,134,0,8,70,0,9,236,80,7,9,0,8,94,0,8,30,0,9,156,84,7,99,0,8,126,0,8,62,0,9,220,82,7,27,0,8,110,0,8,46,0,9,188,0,8,14,0,8,142,0,8,78,0,9,252,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,194,80,7,10,0,8,97,0,8,33,0,9,162,0,8,1,0,8,129,0,8,65,0,9,226,80,7,6,0,8,89,0,8,25,0,9,146,83,7,59,0,8,121,0,8,57,0,9,210,81,7,17,0,8,105,0,8,41,0,9,178,0,8,9,0,8,137,0,8,73,0,9,242,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,202,81,7,13,0,8,101,0,8,37,0,9,170,0,8,5,0,8,133,0,8,69,0,9,234,80,7,8,0,8,93,0,8,29,0,9,154,84,7,83,0,8,125,0,8,61,0,9,218,82,7,23,0,8,109,0,8,45,0,9,186,0,8,13,0,8,141,0,8,77,0,9,250,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,198,81,7,11,0,8,99,0,8,35,0,9,166,0,8,3,0,8,131,0,8,67,0,9,230,80,7,7,0,8,91,0,8,27,0,9,150,84,7,67,0,8,123,0,8,59,0,9,214,82,7,19,0,8,107,0,8,43,0,9,182,0,8,11,0,8,139,0,8,75,0,9,246,80,7,5,0,8,87,0,8,23,192,8,0,83,7,51,0,8,119,0,8,55,0,9,206,81,7,15,0,8,103,0,8,39,0,9,174,0,8,7,0,8,135,0,8,71,0,9,238,80,7,9,0,8,95,0,8,31,0,9,158,84,7,99,0,8,127,0,8,63,0,9,222,82,7,27,0,8,111,0,8,47,0,9,190,0,8,15,0,8,143,0,8,79,0,9,254,96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,193,80,7,10,0,8,96,0,8,32,0,9,161,0,8,0,0,8,128,0,8,64,0,9,225,80,7,6,0,8,88,0,8,24,0,9,145,83,7,59,0,8,120,0,8,56,0,9,209,81,7,17,0,8,104,0,8,40,0,9,177,0,8,8,0,8,136,0,8,72,0,9,241,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,201,81,7,13,0,8,100,0,8,36,0,9,169,0,8,4,0,8,132,0,8,68,0,9,233,80,7,8,0,8,92,0,8,28,0,9,153,84,7,83,0,8,124,0,8,60,0,9,217,82,7,23,0,8,108,0,8,44,0,9,185,0,8,12,0,8,140,0,8,76,0,9,249,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,197,81,7,11,0,8,98,0,8,34,0,9,165,0,8,2,0,8,130,0,8,66,0,9,229,80,7,7,0,8,90,0,8,26,0,9,149,84,7,67,0,8,122,0,8,58,0,9,213,82,7,19,0,8,106,0,8,42,0,9,181,0,8,10,0,8,138,0,8,74,0,9,245,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,205,81,7,15,0,8,102,0,8,38,0,9,173,0,8,6,0,8,134,0,8,70,0,9,237,80,7,9,0,8,94,0,8,30,0,9,157,84,7,99,0,8,126,0,8,62,0,9,221,82,7,27,0,8,110,0,8,46,0,9,189,0,8,14,0,8,142,0,8,78,0,9,253,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,195,80,7,10,0,8,97,0,8,33,0,9,163,0,8,1,0,8,129,0,8,65,0,9,227,80,7,6,0,8,89,0,8,25,0,9,147,83,7,59,0,8,121,0,8,57,0,9,211,81,7,17,0,8,105,0,8,41,0,9,179,0,8,9,0,8,137,0,8,73,0,9,243,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,203,81,7,13,0,8,101,0,8,37,0,9,171,0,8,5,0,8,133,0,8,69,0,9,235,80,7,8,0,8,93,0,8,29,0,9,155,84,7,83,0,8,125,0,8,61,0,9,219,82,7,23,0,8,109,0,8,45,0,9,187,0,8,13,0,8,141,0,8,77,0,9,251,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,199,81,7,11,0,8,99,0,8,35,0,9,167,0,8,3,0,8,131,0,8,67,0,9,231,80,7,7,0,8,91,0,8,27,0,9,151,84,7,67,0,8,123,0,8,59,0,9,215,82,7,19,0,8,107,0,8,43,0,9,183,0,8,11,0,8,139,0,8,75,0,9,247,80,7,5,0,8,87,0,8,23,192,8,0,83,7,51,0,8,119,0,8,55,0,9,207,81,7,15,0,8,103,0,8,39,0,9,175,0,8,7,0,8,135,0,8,71,0,9,239,80,7,9,0,8,95,0,8,31,0,9,159,84,7,99,0,8,127,0,8,63,0,9,223,82,7,27,0,8,111,0,8,47,0,9,191,0,8,15,0,8,143,0,8,79,0,9,255],a=[80,5,1,87,5,257,83,5,17,91,5,4097,81,5,5,89,5,1025,85,5,65,93,5,16385,80,5,3,88,5,513,84,5,33,92,5,8193,82,5,9,90,5,2049,86,5,129,192,5,24577,80,5,2,87,5,385,83,5,25,91,5,6145,81,5,7,89,5,1537,85,5,97,93,5,24577,80,5,4,88,5,769,84,5,49,92,5,12289,82,5,13,90,5,3073,86,5,193,192,5,24577],l=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],u=[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,112,112],w=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],h=[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];function d(){let t,n,r,i,o,c;function a(t,n,f,a,l,u,w,h,d,p,y){let b,m,k,v,g,S,z,_,C,I,A,x,V,P,B;I=0,g=f;do{r[t[n+I]]++,I++,g--}while(0!==g);if(r[0]==f)return w[0]=-1,h[0]=0,0;for(_=h[0],S=1;15>=S&&0===r[S];S++);for(z=S,S>_&&(_=S),g=15;0!==g&&0===r[g];g--);for(k=g,_>g&&(_=g),h[0]=_,P=1<<S;g>S;S++,P<<=1)if(0>(P-=r[S]))return e;if(0>(P-=r[g]))return e;for(r[g]+=P,c[1]=S=0,I=1,V=2;0!=--g;)c[V]=S+=r[I],V++,I++;g=0,I=0;do{0!==(S=t[n+I])&&(y[c[S]++]=g),I++}while(++g<f);for(f=c[k],c[0]=g=0,I=0,v=-1,x=-_,o[0]=0,A=0,B=0;k>=z;z++)for(b=r[z];0!=b--;){for(;z>x+_;){if(v++,x+=_,B=k-x,B=B>_?_:B,(m=1<<(S=z-x))>b+1&&(m-=b+1,V=z,B>S))for(;++S<B&&(m<<=1)>r[++V];)m-=r[V];if(B=1<<S,p[0]+B>1440)return e;o[v]=A=p[0],p[0]+=B,0!==v?(c[v]=g,i[0]=S,i[1]=_,S=g>>>x-_,i[2]=A-o[v-1]-S,d.set(i,3*(o[v-1]+S))):w[0]=A}for(i[1]=z-x,f>I?y[I]<a?(i[0]=256>y[I]?0:96,i[2]=y[I++]):(i[0]=u[y[I]-a]+16+64,i[2]=l[y[I++]-a]):i[0]=192,m=1<<z-x,S=g>>>x;B>S;S+=m)d.set(i,3*(A+S));for(S=1<<z-1;0!=(g&S);S>>>=1)g^=S;for(g^=S,C=(1<<x)-1;(g&C)!=c[v];)v--,x-=_,C=(1<<x)-1}return 0!==P&&1!=k?s:0}function d(e){let s;for(t||(t=[],n=[],r=new f(16),i=[],o=new f(15),c=new f(16)),n.length<e&&(n=[]),s=0;e>s;s++)n[s]=0;for(s=0;16>s;s++)r[s]=0;for(s=0;3>s;s++)i[s]=0;o.set(r.subarray(0,15),0),c.set(r.subarray(0,16),0)}this.be=(r,i,o,f,c)=>{let l;return d(19),t[0]=0,l=a(r,0,19,19,null,null,o,i,f,t,n),l==e?c.re="oversubscribed dynamic bit lengths tree":l!=s&&0!==i[0]||(c.re="incomplete dynamic bit lengths tree",l=e),l},this.me=(r,i,o,f,c,p,y,b,m)=>{let k;return d(288),t[0]=0,k=a(o,0,r,257,l,u,p,f,b,t,n),0!=k||0===f[0]?(k==e?m.re="oversubscribed literal/length tree":-4!=k&&(m.re="incomplete literal/length tree",k=e),k):(d(288),k=a(o,r,i,0,w,h,y,c,b,t,n),0!=k||0===c[0]&&r>257?(k==e?m.re="oversubscribed distance tree":k==s?(m.re="incomplete distance tree",k=e):-4!=k&&(m.re="empty distance tree with lengths",k=e),k):0)}}function p(){const n=this;let r,i,s,f,c=0,a=0,l=0,u=0,w=0,h=0,d=0,p=0,y=0,b=0;function m(t,n,r,i,s,f,c,a){let l,u,w,h,d,p,y,b,m,k,v,g,S,z,_,C;y=a.pe,b=a.te,d=c.ke,p=c.ve,m=c.write,k=m<c.read?c.read-m-1:c.end-m,v=o[t],g=o[n];do{for(;20>p;)b--,d|=(255&a.ge(y++))<<p,p+=8;if(l=d&v,u=r,w=i,C=3*(w+l),0!==(h=u[C]))for(;;){if(d>>=u[C+1],p-=u[C+1],0!=(16&h)){for(h&=15,S=u[C+2]+(d&o[h]),d>>=h,p-=h;15>p;)b--,d|=(255&a.ge(y++))<<p,p+=8;for(l=d&g,u=s,w=f,C=3*(w+l),h=u[C];;){if(d>>=u[C+1],p-=u[C+1],0!=(16&h)){for(h&=15;h>p;)b--,d|=(255&a.ge(y++))<<p,p+=8;if(z=u[C+2]+(d&o[h]),d>>=h,p-=h,k-=S,z>m){_=m-z;do{_+=c.end}while(0>_);if(h=c.end-_,S>h){if(S-=h,m-_>0&&h>m-_)do{c.Se[m++]=c.Se[_++]}while(0!=--h);else c.Se.set(c.Se.subarray(_,_+h),m),m+=h,_+=h,h=0;_=0}}else _=m-z,m-_>0&&2>m-_?(c.Se[m++]=c.Se[_++],c.Se[m++]=c.Se[_++],S-=2):(c.Se.set(c.Se.subarray(_,_+2),m),m+=2,_+=2,S-=2);if(m-_>0&&S>m-_)do{c.Se[m++]=c.Se[_++]}while(0!=--S);else c.Se.set(c.Se.subarray(_,_+S),m),m+=S,_+=S,S=0;break}if(0!=(64&h))return a.re="invalid distance code",S=a.te-b,S=S>p>>3?p>>3:S,b+=S,y-=S,p-=S<<3,c.ke=d,c.ve=p,a.te=b,a.se+=y-a.pe,a.pe=y,c.write=m,e;l+=u[C+2],l+=d&o[h],C=3*(w+l),h=u[C]}break}if(0!=(64&h))return 0!=(32&h)?(S=a.te-b,S=S>p>>3?p>>3:S,b+=S,y-=S,p-=S<<3,c.ke=d,c.ve=p,a.te=b,a.se+=y-a.pe,a.pe=y,c.write=m,1):(a.re="invalid literal/length code",S=a.te-b,S=S>p>>3?p>>3:S,b+=S,y-=S,p-=S<<3,c.ke=d,c.ve=p,a.te=b,a.se+=y-a.pe,a.pe=y,c.write=m,e);if(l+=u[C+2],l+=d&o[h],C=3*(w+l),0===(h=u[C])){d>>=u[C+1],p-=u[C+1],c.Se[m++]=u[C+2],k--;break}}else d>>=u[C+1],p-=u[C+1],c.Se[m++]=u[C+2],k--}while(k>=258&&b>=10);return S=a.te-b,S=S>p>>3?p>>3:S,b+=S,y-=S,p-=S<<3,c.ke=d,c.ve=p,a.te=b,a.se+=y-a.pe,a.pe=y,c.write=m,0}n.init=(t,e,n,o,c,a)=>{r=0,d=t,p=e,s=n,y=o,f=c,b=a,i=null},n.ze=(n,k,v)=>{let g,S,z,_,C,I,A,x=0,V=0,P=0;for(P=k.pe,_=k.te,x=n.ke,V=n.ve,C=n.write,I=C<n.read?n.read-C-1:n.end-C;;)switch(r){case 0:if(I>=258&&_>=10&&(n.ke=x,n.ve=V,k.te=_,k.se+=P-k.pe,k.pe=P,n.write=C,v=m(d,p,s,y,f,b,n,k),P=k.pe,_=k.te,x=n.ke,V=n.ve,C=n.write,I=C<n.read?n.read-C-1:n.end-C,0!=v)){r=1==v?7:9;break}l=d,i=s,a=y,r=1;case 1:for(g=l;g>V;){if(0===_)return n.ke=x,n.ve=V,k.te=_,k.se+=P-k.pe,k.pe=P,n.write=C,n._e(k,v);v=0,_--,x|=(255&k.ge(P++))<<V,V+=8}if(S=3*(a+(x&o[g])),x>>>=i[S+1],V-=i[S+1],z=i[S],0===z){u=i[S+2],r=6;break}if(0!=(16&z)){w=15&z,c=i[S+2],r=2;break}if(0==(64&z)){l=z,a=S/3+i[S+2];break}if(0!=(32&z)){r=7;break}return r=9,k.re="invalid literal/length code",v=e,n.ke=x,n.ve=V,k.te=_,k.se+=P-k.pe,k.pe=P,n.write=C,n._e(k,v);case 2:for(g=w;g>V;){if(0===_)return n.ke=x,n.ve=V,k.te=_,k.se+=P-k.pe,k.pe=P,n.write=C,n._e(k,v);v=0,_--,x|=(255&k.ge(P++))<<V,V+=8}c+=x&o[g],x>>=g,V-=g,l=p,i=f,a=b,r=3;case 3:for(g=l;g>V;){if(0===_)return n.ke=x,n.ve=V,k.te=_,k.se+=P-k.pe,k.pe=P,n.write=C,n._e(k,v);v=0,_--,x|=(255&k.ge(P++))<<V,V+=8}if(S=3*(a+(x&o[g])),x>>=i[S+1],V-=i[S+1],z=i[S],0!=(16&z)){w=15&z,h=i[S+2],r=4;break}if(0==(64&z)){l=z,a=S/3+i[S+2];break}return r=9,k.re="invalid distance code",v=e,n.ke=x,n.ve=V,k.te=_,k.se+=P-k.pe,k.pe=P,n.write=C,n._e(k,v);case 4:for(g=w;g>V;){if(0===_)return n.ke=x,n.ve=V,k.te=_,k.se+=P-k.pe,k.pe=P,n.write=C,n._e(k,v);v=0,_--,x|=(255&k.ge(P++))<<V,V+=8}h+=x&o[g],x>>=g,V-=g,r=5;case 5:for(A=C-h;0>A;)A+=n.end;for(;0!==c;){if(0===I&&(C==n.end&&0!==n.read&&(C=0,I=C<n.read?n.read-C-1:n.end-C),0===I&&(n.write=C,v=n._e(k,v),C=n.write,I=C<n.read?n.read-C-1:n.end-C,C==n.end&&0!==n.read&&(C=0,I=C<n.read?n.read-C-1:n.end-C),0===I)))return n.ke=x,n.ve=V,k.te=_,k.se+=P-k.pe,k.pe=P,n.write=C,n._e(k,v);n.Se[C++]=n.Se[A++],I--,A==n.end&&(A=0),c--}r=0;break;case 6:if(0===I&&(C==n.end&&0!==n.read&&(C=0,I=C<n.read?n.read-C-1:n.end-C),0===I&&(n.write=C,v=n._e(k,v),C=n.write,I=C<n.read?n.read-C-1:n.end-C,C==n.end&&0!==n.read&&(C=0,I=C<n.read?n.read-C-1:n.end-C),0===I)))return n.ke=x,n.ve=V,k.te=_,k.se+=P-k.pe,k.pe=P,n.write=C,n._e(k,v);v=0,n.Se[C++]=u,I--,r=0;break;case 7:if(V>7&&(V-=8,_++,P--),n.write=C,v=n._e(k,v),C=n.write,I=C<n.read?n.read-C-1:n.end-C,n.read!=n.write)return n.ke=x,n.ve=V,k.te=_,k.se+=P-k.pe,k.pe=P,n.write=C,n._e(k,v);r=8;case 8:return v=1,n.ke=x,n.ve=V,k.te=_,k.se+=P-k.pe,k.pe=P,n.write=C,n._e(k,v);case 9:return v=e,n.ke=x,n.ve=V,k.te=_,k.se+=P-k.pe,k.pe=P,n.write=C,n._e(k,v);default:return v=t,n.ke=x,n.ve=V,k.te=_,k.se+=P-k.pe,k.pe=P,n.write=C,n._e(k,v)}},n.Ce=()=>{}}d.Ie=(t,e,n,r)=>(t[0]=9,e[0]=5,n[0]=c,r[0]=a,0);const y=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];function b(n,r){const c=this;let a,l=0,u=0,w=0,h=0;const b=[0],m=[0],k=new p;let v=0,g=new f(4320);const S=new d;c.ve=0,c.ke=0,c.Se=new i(r),c.end=r,c.read=0,c.write=0,c.reset=(t,e)=>{e&&(e[0]=0),6==l&&k.Ce(t),l=0,c.ve=0,c.ke=0,c.read=c.write=0},c.reset(n,null),c._e=(t,e)=>{let n,r,i;return r=t.ye,i=c.read,n=(i>c.write?c.end:c.write)-i,n>t.de&&(n=t.de),0!==n&&e==s&&(e=0),t.de-=n,t.oe+=n,t.we.set(c.Se.subarray(i,i+n),r),r+=n,i+=n,i==c.end&&(i=0,c.write==c.end&&(c.write=0),n=c.write-i,n>t.de&&(n=t.de),0!==n&&e==s&&(e=0),t.de-=n,t.oe+=n,t.we.set(c.Se.subarray(i,i+n),r),r+=n,i+=n),t.ye=r,c.read=i,e},c.ze=(n,r)=>{let i,s,f,p,z,_,C,I;for(p=n.pe,z=n.te,s=c.ke,f=c.ve,_=c.write,C=_<c.read?c.read-_-1:c.end-_;;){let A,x,V,P,B,D,E,M;switch(l){case 0:for(;3>f;){if(0===z)return c.ke=s,c.ve=f,n.te=z,n.se+=p-n.pe,n.pe=p,c.write=_,c._e(n,r);r=0,z--,s|=(255&n.ge(p++))<<f,f+=8}switch(i=7&s,v=1&i,i>>>1){case 0:s>>>=3,f-=3,i=7&f,s>>>=i,f-=i,l=1;break;case 1:A=[],x=[],V=[[]],P=[[]],d.Ie(A,x,V,P),k.init(A[0],x[0],V[0],0,P[0],0),s>>>=3,f-=3,l=6;break;case 2:s>>>=3,f-=3,l=3;break;case 3:return s>>>=3,f-=3,l=9,n.re="invalid block type",r=e,c.ke=s,c.ve=f,n.te=z,n.se+=p-n.pe,n.pe=p,c.write=_,c._e(n,r)}break;case 1:for(;32>f;){if(0===z)return c.ke=s,c.ve=f,n.te=z,n.se+=p-n.pe,n.pe=p,c.write=_,c._e(n,r);r=0,z--,s|=(255&n.ge(p++))<<f,f+=8}if((~s>>>16&65535)!=(65535&s))return l=9,n.re="invalid stored block lengths",r=e,c.ke=s,c.ve=f,n.te=z,n.se+=p-n.pe,n.pe=p,c.write=_,c._e(n,r);u=65535&s,s=f=0,l=0!==u?2:0!==v?7:0;break;case 2:if(0===z)return c.ke=s,c.ve=f,n.te=z,n.se+=p-n.pe,n.pe=p,c.write=_,c._e(n,r);if(0===C&&(_==c.end&&0!==c.read&&(_=0,C=_<c.read?c.read-_-1:c.end-_),0===C&&(c.write=_,r=c._e(n,r),_=c.write,C=_<c.read?c.read-_-1:c.end-_,_==c.end&&0!==c.read&&(_=0,C=_<c.read?c.read-_-1:c.end-_),0===C)))return c.ke=s,c.ve=f,n.te=z,n.se+=p-n.pe,n.pe=p,c.write=_,c._e(n,r);if(r=0,i=u,i>z&&(i=z),i>C&&(i=C),c.Se.set(n.ee(p,i),_),p+=i,z-=i,_+=i,C-=i,0!=(u-=i))break;l=0!==v?7:0;break;case 3:for(;14>f;){if(0===z)return c.ke=s,c.ve=f,n.te=z,n.se+=p-n.pe,n.pe=p,c.write=_,c._e(n,r);r=0,z--,s|=(255&n.ge(p++))<<f,f+=8}if(w=i=16383&s,(31&i)>29||(i>>5&31)>29)return l=9,n.re="too many length or distance symbols",r=e,c.ke=s,c.ve=f,n.te=z,n.se+=p-n.pe,n.pe=p,c.write=_,c._e(n,r);if(i=258+(31&i)+(i>>5&31),!a||a.length<i)a=[];else for(I=0;i>I;I++)a[I]=0;s>>>=14,f-=14,h=0,l=4;case 4:for(;4+(w>>>10)>h;){for(;3>f;){if(0===z)return c.ke=s,c.ve=f,n.te=z,n.se+=p-n.pe,n.pe=p,c.write=_,c._e(n,r);r=0,z--,s|=(255&n.ge(p++))<<f,f+=8}a[y[h++]]=7&s,s>>>=3,f-=3}for(;19>h;)a[y[h++]]=0;if(b[0]=7,i=S.be(a,b,m,g,n),0!=i)return(r=i)==e&&(a=null,l=9),c.ke=s,c.ve=f,n.te=z,n.se+=p-n.pe,n.pe=p,c.write=_,c._e(n,r);h=0,l=5;case 5:for(;i=w,258+(31&i)+(i>>5&31)>h;){let t,u;for(i=b[0];i>f;){if(0===z)return c.ke=s,c.ve=f,n.te=z,n.se+=p-n.pe,n.pe=p,c.write=_,c._e(n,r);r=0,z--,s|=(255&n.ge(p++))<<f,f+=8}if(i=g[3*(m[0]+(s&o[i]))+1],u=g[3*(m[0]+(s&o[i]))+2],16>u)s>>>=i,f-=i,a[h++]=u;else{for(I=18==u?7:u-14,t=18==u?11:3;i+I>f;){if(0===z)return c.ke=s,c.ve=f,n.te=z,n.se+=p-n.pe,n.pe=p,c.write=_,c._e(n,r);r=0,z--,s|=(255&n.ge(p++))<<f,f+=8}if(s>>>=i,f-=i,t+=s&o[I],s>>>=I,f-=I,I=h,i=w,I+t>258+(31&i)+(i>>5&31)||16==u&&1>I)return a=null,l=9,n.re="invalid bit length repeat",r=e,c.ke=s,c.ve=f,n.te=z,n.se+=p-n.pe,n.pe=p,c.write=_,c._e(n,r);u=16==u?a[I-1]:0;do{a[I++]=u}while(0!=--t);h=I}}if(m[0]=-1,B=[],D=[],E=[],M=[],B[0]=9,D[0]=6,i=w,i=S.me(257+(31&i),1+(i>>5&31),a,B,D,E,M,g,n),0!=i)return i==e&&(a=null,l=9),r=i,c.ke=s,c.ve=f,n.te=z,n.se+=p-n.pe,n.pe=p,c.write=_,c._e(n,r);k.init(B[0],D[0],g,E[0],g,M[0]),l=6;case 6:if(c.ke=s,c.ve=f,n.te=z,n.se+=p-n.pe,n.pe=p,c.write=_,1!=(r=k.ze(c,n,r)))return c._e(n,r);if(r=0,k.Ce(n),p=n.pe,z=n.te,s=c.ke,f=c.ve,_=c.write,C=_<c.read?c.read-_-1:c.end-_,0===v){l=0;break}l=7;case 7:if(c.write=_,r=c._e(n,r),_=c.write,C=_<c.read?c.read-_-1:c.end-_,c.read!=c.write)return c.ke=s,c.ve=f,n.te=z,n.se+=p-n.pe,n.pe=p,c.write=_,c._e(n,r);l=8;case 8:return r=1,c.ke=s,c.ve=f,n.te=z,n.se+=p-n.pe,n.pe=p,c.write=_,c._e(n,r);case 9:return r=e,c.ke=s,c.ve=f,n.te=z,n.se+=p-n.pe,n.pe=p,c.write=_,c._e(n,r);default:return r=t,c.ke=s,c.ve=f,n.te=z,n.se+=p-n.pe,n.pe=p,c.write=_,c._e(n,r)}}},c.Ce=t=>{c.reset(t,null),c.Se=null,g=null},c.Ae=(t,e,n)=>{c.Se.set(t.subarray(e,e+n),0),c.read=c.write=n},c.xe=()=>1==l?1:0}const m=13,k=[0,0,255,255];function v(){const n=this;function r(e){return e&&e.Ve?(e.se=e.oe=0,e.re=null,e.Ve.mode=7,e.Ve.Pe.reset(e,null),0):t}n.mode=0,n.method=0,n.Be=[0],n.De=0,n.marker=0,n.Ee=0,n.Me=t=>(n.Pe&&n.Pe.Ce(t),n.Pe=null,0),n.Re=(e,i)=>(e.re=null,n.Pe=null,8>i||i>15?(n.Me(e),t):(n.Ee=i,e.Ve.Pe=new b(e,1<<i),r(e),0)),n.Ue=(n,r)=>{let i,o;if(!n||!n.Ve||!n.he)return t;const f=n.Ve;for(r=4==r?s:0,i=s;;)switch(f.mode){case 0:if(0===n.te)return i;if(i=r,n.te--,n.se++,8!=(15&(f.method=n.ge(n.pe++)))){f.mode=m,n.re="unknown compression method",f.marker=5;break}if(8+(f.method>>4)>f.Ee){f.mode=m,n.re="invalid win size",f.marker=5;break}f.mode=1;case 1:if(0===n.te)return i;if(i=r,n.te--,n.se++,o=255&n.ge(n.pe++),((f.method<<8)+o)%31!=0){f.mode=m,n.re="incorrect header check",f.marker=5;break}if(0==(32&o)){f.mode=7;break}f.mode=2;case 2:if(0===n.te)return i;i=r,n.te--,n.se++,f.De=(255&n.ge(n.pe++))<<24&4278190080,f.mode=3;case 3:if(0===n.te)return i;i=r,n.te--,n.se++,f.De+=(255&n.ge(n.pe++))<<16&16711680,f.mode=4;case 4:if(0===n.te)return i;i=r,n.te--,n.se++,f.De+=(255&n.ge(n.pe++))<<8&65280,f.mode=5;case 5:return 0===n.te?i:(i=r,n.te--,n.se++,f.De+=255&n.ge(n.pe++),f.mode=6,2);case 6:return f.mode=m,n.re="need dictionary",f.marker=0,t;case 7:if(i=f.Pe.ze(n,i),i==e){f.mode=m,f.marker=0;break}if(0==i&&(i=r),1!=i)return i;i=r,f.Pe.reset(n,f.Be),f.mode=12;case 12:return n.te=0,1;case m:return e;default:return t}},n.Te=(e,n,r)=>{let i=0,s=r;if(!e||!e.Ve||6!=e.Ve.mode)return t;const o=e.Ve;return s<1<<o.Ee||(s=(1<<o.Ee)-1,i=r-s),o.Pe.Ae(n,i,s),o.mode=7,0},n.je=n=>{let i,o,f,c,a;if(!n||!n.Ve)return t;const l=n.Ve;if(l.mode!=m&&(l.mode=m,l.marker=0),0===(i=n.te))return s;for(o=n.pe,f=l.marker;0!==i&&4>f;)n.ge(o)==k[f]?f++:f=0!==n.ge(o)?0:4-f,o++,i--;return n.se+=o-n.pe,n.pe=o,n.te=i,l.marker=f,4!=f?e:(c=n.se,a=n.oe,r(n),n.se=c,n.oe=a,l.mode=7,0)},n.He=e=>e&&e.Ve&&e.Ve.Pe?e.Ve.Pe.xe():t}function g(){}return g.prototype={Re:function(t){const e=this;return e.Ve=new v,t||(t=15),e.Ve.Re(e,t)},Ue:function(e){const n=this;return n.Ve?n.Ve.Ue(n,e):t},Me:function(){const e=this;if(!e.Ve)return t;const n=e.Ve.Me(e);return e.Ve=null,n},je:function(){const e=this;return e.Ve?e.Ve.je(e):t},Te:function(e,n){const r=this;return r.Ve?r.Ve.Te(r,e,n):t},ge:function(t){return this.he[t]},ee:function(t,e){return this.he.subarray(t,t+e)}},function(t){const e=new g,o=t&&t.ot?n.floor(2*t.ot):131072,f=new i(o);let c=!1;e.Re(),e.we=f,this.append=(t,n)=>{const a=[];let l,u,w=0,h=0,d=0;if(0!==t.length){e.pe=0,e.he=t,e.te=t.length;do{if(e.ye=0,e.de=o,0!==e.te||c||(e.pe=0,c=!0),l=e.Ue(0),c&&l===s){if(0!==e.te)throw new r("inflating: bad input")}else if(0!==l&&1!==l)throw new r("inflating: "+e.re);if((c||1===l)&&e.te===t.length)throw new r("inflating: bad input");e.ye&&(e.ye===o?a.push(new i(f)):a.push(f.slice(0,e.ye))),d+=e.ye,n&&e.pe>0&&e.pe!=w&&(n(e.pe),w=e.pe)}while(e.te>0||0===e.de);return a.length>1?(u=new i(d),a.forEach((t=>{u.set(t,h),h+=t.length}))):u=a[0]||new i(0),u}},this.flush=()=>{e.Me()}}})();self.initCodec=()=>{self.Deflate=ot,self.Inflate=ft};\n'],{type:"text/javascript"}));e({workerScripts:{inflate:[t],deflate:[t]}});}};
|
|
105
|
+
var e=e=>{if("function"==typeof URL.createObjectURL){const t=()=>URL.createObjectURL(new Blob(['const{Array:t,Object:e,Math:n,Error:r,Uint8Array:i,Uint16Array:s,Uint32Array:o,Int32Array:f,DataView:c,TextEncoder:l,crypto:u,postMessage:a,TransformStream:w,ReadableStream:h,WritableStream:d,CompressionStream:p,DecompressionStream:b}=globalThis,y=[];for(let t=0;256>t;t++){let e=t;for(let t=0;8>t;t++)1&e?e=e>>>1^3988292384:e>>>=1;y[t]=e}class m{constructor(t){this.t=t||-1}append(t){let e=0|this.t;for(let n=0,r=0|t.length;r>n;n++)e=e>>>8^y[255&(e^t[n])];this.t=e}get(){return~this.t}}class k extends w{constructor(){super({start(){this.i=new m},transform(t){this.i.append(t)},flush(t){const e=new i(4);new c(e.buffer).setUint32(0,this.i.get()),t.enqueue(e)}})}}const g={concat(t,e){if(0===t.length||0===e.length)return t.concat(e);const n=t[t.length-1],r=g.o(n);return 32===r?t.concat(e):g.l(e,r,0|n,t.slice(0,t.length-1))},u(t){const e=t.length;if(0===e)return 0;const n=t[e-1];return 32*(e-1)+g.o(n)},h(t,e){if(32*t.length<e)return t;const r=(t=t.slice(0,n.ceil(e/32))).length;return e&=31,r>0&&e&&(t[r-1]=g.p(e,t[r-1]&2147483648>>e-1,1)),t},p:(t,e,n)=>32===t?e:(n?0|e:e<<32-t)+1099511627776*t,o:t=>n.round(t/1099511627776)||32,l(t,e,n,r){for(void 0===r&&(r=[]);e>=32;e-=32)r.push(n),n=0;if(0===e)return r.concat(t);for(let i=0;i<t.length;i++)r.push(n|t[i]>>>e),n=t[i]<<32-e;const i=t.length?t[t.length-1]:0,s=g.o(i);return r.push(g.p(e+s&31,e+s>32?n:r.pop(),1)),r}},v={m:{k(t){const e=g.u(t)/8,n=new i(e);let r;for(let i=0;e>i;i++)0==(3&i)&&(r=t[i/4]),n[i]=r>>>24,r<<=8;return n},g(t){const e=[];let n,r=0;for(n=0;n<t.length;n++)r=r<<8|t[n],3==(3&n)&&(e.push(r),r=0);return 3&n&&e.push(g.p(8*(3&n),r)),e}}},S={v:function(t){t?(this.S=t.S.slice(0),this._=t._.slice(0),this.C=t.C):this.reset()}};S.v.prototype={blockSize:512,reset:function(){const t=this;return t.S=this.A.slice(0),t._=[],t.C=0,t},update:function(t){const e=this;"string"==typeof t&&(t=v.I.g(t));const n=e._=g.concat(e._,t),i=e.C,s=e.C=i+g.u(t);if(s>9007199254740991)throw new r("Cannot hash more than 2^53 - 1 bits");const f=new o(n);let c=0;for(let t=e.blockSize+i-(e.blockSize+i&e.blockSize-1);s>=t;t+=e.blockSize)e.V(f.subarray(16*c,16*(c+1))),c+=1;return n.splice(0,16*c),e},P:function(){const t=this;let e=t._;const r=t.S;e=g.concat(e,[g.p(1,1)]);for(let t=e.length+2;15&t;t++)e.push(0);for(e.push(n.floor(t.C/4294967296)),e.push(0|t.C);e.length;)t.V(e.splice(0,16));return t.reset(),r},A:[1732584193,4023233417,2562383102,271733878,3285377520],B:[1518500249,1859775393,2400959708,3395469782],D:(t,e,n,r)=>t>19?t>39?t>59?t>79?void 0:e^n^r:e&n|e&r|n&r:e^n^r:e&n|~e&r,M:(t,e)=>e<<t|e>>>32-t,V:function(e){const r=this,i=r.S,s=t(80);for(let t=0;16>t;t++)s[t]=e[t];let o=i[0],f=i[1],c=i[2],l=i[3],u=i[4];for(let t=0;79>=t;t++){16>t||(s[t]=r.M(1,s[t-3]^s[t-8]^s[t-14]^s[t-16]));const e=r.M(5,o)+r.D(t,f,c,l)+u+s[t]+r.B[n.floor(t/20)]|0;u=l,l=c,c=r.M(30,f),f=o,o=e}i[0]=i[0]+o|0,i[1]=i[1]+f|0,i[2]=i[2]+c|0,i[3]=i[3]+l|0,i[4]=i[4]+u|0}};const _={getRandomValues(t){const e=new o(t.buffer),r=t=>{let e=987654321;const r=4294967295;return()=>(e=36969*(65535&e)+(e>>16)&r,(((e<<16)+(t=18e3*(65535&t)+(t>>16)&r)&r)/4294967296+.5)*(n.random()>.5?1:-1))};for(let i,s=0;s<t.length;s+=4){const t=r(4294967296*(i||n.random()));i=987654071*t(),e[s/4]=4294967296*t()|0}return t}},z={importKey:t=>new z.R(v.m.g(t)),U(t,e,n,i){if(n=n||1e4,0>i||0>n)throw new r("invalid params to pbkdf2");const s=1+(i>>5)<<2;let o,f,l,u,a;const w=new ArrayBuffer(s),h=new c(w);let d=0;const p=g;for(e=v.m.g(e),a=1;(s||1)>d;a++){for(o=f=t.encrypt(p.concat(e,[a])),l=1;n>l;l++)for(f=t.encrypt(f),u=0;u<f.length;u++)o[u]^=f[u];for(l=0;(s||1)>d&&l<o.length;l++)h.setInt32(d,o[l]),d+=4}return w.slice(0,i/8)},R:class{constructor(t){const e=this,n=e.T=S.v,r=[[],[]],i=n.prototype.blockSize/32;e.W=[new n,new n],t.length>i&&(t=n.hash(t));for(let e=0;i>e;e++)r[0][e]=909522486^t[e],r[1][e]=1549556828^t[e];e.W[0].update(r[0]),e.W[1].update(r[1]),e.j=new n(e.W[0])}reset(){const t=this;t.j=new t.T(t.W[0]),t.H=!1}update(t){this.H=!0,this.j.update(t)}digest(){const t=this,e=t.j.P(),n=new t.T(t.W[1]).update(e).P();return t.reset(),n}encrypt(t){if(this.H)throw new r("encrypt on already updated hmac called!");return this.update(t),this.digest(t)}}},C={name:"PBKDF2"},x=e.assign({hash:{name:"HMAC"}},C),A=e.assign({iterations:1e3,hash:{name:"SHA-1"}},C),I=["deriveBits"],V=[8,12,16],P=[16,24,32],B=[0,0,0,0],D=void 0!==u,E=D&&void 0!==u.subtle,M=D&&"function"==typeof u.getRandomValues,R=D&&E&&"function"==typeof u.subtle.importKey,U=D&&E&&"function"==typeof u.subtle.deriveBits,T=v.m,W=class{constructor(t){const e=this;e.K=[[[],[],[],[],[]],[[],[],[],[],[]]],e.K[0][0][0]||e.L();const n=e.K[0][4],i=e.K[1],s=t.length;let o,f,c,l=1;if(4!==s&&6!==s&&8!==s)throw new r("invalid aes key size");for(e.B=[f=t.slice(0),c=[]],o=s;4*s+28>o;o++){let t=f[o-1];(o%s==0||8===s&&o%s==4)&&(t=n[t>>>24]<<24^n[t>>16&255]<<16^n[t>>8&255]<<8^n[255&t],o%s==0&&(t=t<<8^t>>>24^l<<24,l=l<<1^283*(l>>7))),f[o]=f[o-s]^t}for(let t=0;o;t++,o--){const e=f[3&t?o:o-4];c[t]=4>=o||4>t?e:i[0][n[e>>>24]]^i[1][n[e>>16&255]]^i[2][n[e>>8&255]]^i[3][n[255&e]]}}encrypt(t){return this.F(t,0)}decrypt(t){return this.F(t,1)}L(){const t=this.K[0],e=this.K[1],n=t[4],r=e[4],i=[],s=[];let o,f,c,l;for(let t=0;256>t;t++)s[(i[t]=t<<1^283*(t>>7))^t]=t;for(let u=o=0;!n[u];u^=f||1,o=s[o]||1){let s=o^o<<1^o<<2^o<<3^o<<4;s=s>>8^255&s^99,n[u]=s,r[s]=u,l=i[c=i[f=i[u]]];let a=16843009*l^65537*c^257*f^16843008*u,w=257*i[s]^16843008*s;for(let n=0;4>n;n++)t[n][u]=w=w<<24^w>>>8,e[n][s]=a=a<<24^a>>>8}for(let n=0;5>n;n++)t[n]=t[n].slice(0),e[n]=e[n].slice(0)}F(t,e){if(4!==t.length)throw new r("invalid aes block size");const n=this.B[e],i=n.length/4-2,s=[0,0,0,0],o=this.K[e],f=o[0],c=o[1],l=o[2],u=o[3],a=o[4];let w,h,d,p=t[0]^n[0],b=t[e?3:1]^n[1],y=t[2]^n[2],m=t[e?1:3]^n[3],k=4;for(let t=0;i>t;t++)w=f[p>>>24]^c[b>>16&255]^l[y>>8&255]^u[255&m]^n[k],h=f[b>>>24]^c[y>>16&255]^l[m>>8&255]^u[255&p]^n[k+1],d=f[y>>>24]^c[m>>16&255]^l[p>>8&255]^u[255&b]^n[k+2],m=f[m>>>24]^c[p>>16&255]^l[b>>8&255]^u[255&y]^n[k+3],k+=4,p=w,b=h,y=d;for(let t=0;4>t;t++)s[e?3&-t:t]=a[p>>>24]<<24^a[b>>16&255]<<16^a[y>>8&255]<<8^a[255&m]^n[k++],w=p,p=b,b=y,y=m,m=w;return s}},j=class{constructor(t,e){this.O=t,this.q=e,this.G=e}reset(){this.G=this.q}update(t){return this.J(this.O,t,this.G)}N(t){if(255==(t>>24&255)){let e=t>>16&255,n=t>>8&255,r=255&t;255===e?(e=0,255===n?(n=0,255===r?r=0:++r):++n):++e,t=0,t+=e<<16,t+=n<<8,t+=r}else t+=1<<24;return t}X(t){0===(t[0]=this.N(t[0]))&&(t[1]=this.N(t[1]))}J(t,e,n){let r;if(!(r=e.length))return[];const i=g.u(e);for(let i=0;r>i;i+=4){this.X(n);const r=t.encrypt(n);e[i]^=r[0],e[i+1]^=r[1],e[i+2]^=r[2],e[i+3]^=r[3]}return g.h(e,i)}},H=z.R;class K extends w{constructor(n,s,o){let f;super({start(){e.assign(this,{ready:new Promise((t=>this.Y=t)),password:n,signed:s,Z:o-1,pending:new i(0)})},async transform(e,n){const s=this;if(s.password){const n=s.password;s.password=null;const i=G(e,0,V[s.Z]+2);await(async(t,e,n)=>{await O(t,n,G(e,0,V[t.Z]));const i=G(e,V[t.Z]),s=t.keys.passwordVerification;if(s[0]!=i[0]||s[1]!=i[1])throw new r("Invalid pasword")})(s,i,n),s.$=new j(new W(s.keys.key),t.from(B)),s.tt=new H(s.keys.et),e=G(e,V[s.Z]+2),s.Y()}else await s.ready;const o=new i(e.length-10-(e.length-10)%16);n.enqueue(F(s,e,o,0,10,!0))},async flush(t){const e=this;await e.ready;const n=e.pending,r=G(n,0,n.length-10),s=G(n,n.length-10);let o=new i(0);if(r.length){const t=N(T,r);e.tt.update(t);const n=e.$.update(t);o=J(T,n)}if(f.valid=!0,e.signed){const t=G(J(T,e.tt.digest()),0,10);for(let e=0;10>e;e++)t[e]!=s[e]&&(f.valid=!1)}t.enqueue(o)}}),f=this}}class L extends w{constructor(n,r){let s;super({start(){e.assign(this,{ready:new Promise((t=>this.Y=t)),password:n,Z:r-1,pending:new i(0)})},async transform(e,n){const r=this;let s=new i(0);if(r.password){const e=r.password;r.password=null,s=await(async(t,e)=>{const n=(r=new i(V[t.Z]),M?u.getRandomValues(r):_.getRandomValues(r));var r;return await O(t,e,n),q(n,t.keys.passwordVerification)})(r,e),r.$=new j(new W(r.keys.key),t.from(B)),r.tt=new H(r.keys.et),r.Y()}else await r.ready;const o=new i(s.length+e.length-e.length%16);o.set(s,0),n.enqueue(F(r,e,o,s.length,0))},async flush(t){const e=this;await e.ready;let n=new i(0);if(e.pending.length){const t=e.$.update(N(T,e.pending));e.tt.update(t),n=J(T,t)}s.signature=J(T,e.tt.digest()).slice(0,10),t.enqueue(q(n,s.signature))}}),s=this}}function F(t,e,n,r,s,o){const f=e.length-s;let c;for(t.pending.length&&(e=q(t.pending,e),n=((t,e)=>{if(e&&e>t.length){const n=t;(t=new i(e)).set(n,0)}return t})(n,f-f%16)),c=0;f-16>=c;c+=16){const i=N(T,G(e,c,c+16));o&&t.tt.update(i);const s=t.$.update(i);o||t.tt.update(s),n.set(J(T,s),c+r)}return t.pending=G(e,c),n}async function O(t,n,r){const s=(t=>{if(void 0===l){const e=new i((t=unescape(encodeURIComponent(t))).length);for(let n=0;n<e.length;n++)e[n]=t.charCodeAt(n);return e}return(new l).encode(t)})(n),o=await((t,e,n,r,i)=>R?u.subtle.importKey("raw",e,n,!1,i):z.importKey(e))(0,s,x,0,I),f=await(async(t,e,n)=>U?await u.subtle.deriveBits(t,e,n):z.U(e,t.salt,A.iterations,n))(e.assign({salt:r},A),o,8*(2*P[t.Z]+2)),c=new i(f);t.keys={key:N(T,G(c,0,P[t.Z])),et:N(T,G(c,P[t.Z],2*P[t.Z])),passwordVerification:G(c,2*P[t.Z])}}function q(t,e){let n=t;return t.length+e.length&&(n=new i(t.length+e.length),n.set(t,0),n.set(e,t.length)),n}function G(t,e,n){return t.subarray(e,n)}function J(t,e){return t.k(e)}function N(t,e){return t.g(e)}class Q extends w{constructor(t,n){let i;super({start(){e.assign(this,{password:t,passwordVerification:n}),$(this,t)},transform(t,e){const n=this;if(n.password){const e=Y(n,t.subarray(0,12));if(n.password=null,e[11]!=n.passwordVerification)throw new r("Invalid pasword");t=t.subarray(12)}e.enqueue(Y(n,t))},flush(){i.valid=!0}}),i=this}}class X extends w{constructor(t,n){super({start(){e.assign(this,{password:t,passwordVerification:n}),$(this,t)},transform(t,e){const n=this;let r,s;if(n.password){n.password=null;const e=u.getRandomValues(new i(12));e[11]=n.passwordVerification,r=new i(t.length+e.length),r.set(Z(n,e),0),s=12}else r=new i(t.length),s=0;r.set(Z(n,t),s),e.enqueue(r)},flush(){}})}}function Y(t,e){const n=new i(e.length);for(let r=0;r<e.length;r++)n[r]=et(t)^e[r],tt(t,n[r]);return n}function Z(t,e){const n=new i(e.length);for(let r=0;r<e.length;r++)n[r]=et(t)^e[r],tt(t,e[r]);return n}function $(t,e){t.keys=[305419896,591751049,878082192],t.nt=new m(t.keys[0]),t.rt=new m(t.keys[2]);for(let n=0;n<e.length;n++)tt(t,e.charCodeAt(n))}function tt(t,e){t.nt.append([e]),t.keys[0]=~t.nt.get(),t.keys[1]=rt(t.keys[1]+nt(t.keys[0])),t.keys[1]=rt(n.imul(t.keys[1],134775813)+1),t.rt.append([t.keys[1]>>>24]),t.keys[2]=~t.rt.get()}function et(t){const e=2|t.keys[2];return nt(n.imul(e,1^e)>>>8)}function nt(t){return 255&t}function rt(t){return 4294967295&t}class it extends w{constructor(t,e){let n;super({start(){n=new t(e)},transform(t,e){t=n.append(t),e.enqueue(t)},flush(t){const e=n.flush();e&&t.enqueue(e)}})}}const st=void 0===p,ot=void 0===b;let ft=!0,ct=!0;class lt extends w{constructor(t,e,{it:n},...r){super({},...r);const{compressed:i,st:s,password:o,passwordVerification:f,encryptionStrength:l,zipCrypto:u,signed:a}=e,w=this;let h,d,b=wt(super.readable);const y=!!o;if(y&&!u||!a||([b,h]=b.tee(),h=h.pipeThrough(new k)),i)if(void 0!==s&&!s||st&&!ct)b=at(t,b,n);else try{const t=new p("deflate-raw");b=b.pipeThrough(t)}catch(e){ct=!1,b=at(t,b,n)}y&&(u?b=b.pipeThrough(new X(o,f)):(d=new L(o,l),b=b.pipeThrough(d))),ht(w,b,(async()=>{let t;y&&!u&&(t=d.signature),y&&!u||!a||(t=await h.getReader().read(),t=new c(t.value.buffer).getUint32(0)),w.signature=t}))}}class ut extends w{constructor(t,e,{it:n},...i){super({},...i);const{zipCrypto:s,password:o,passwordVerification:f,signed:l,encryptionStrength:u,compressed:a,st:w}=e;let h,d,p=wt(super.readable);const y=!!o;if(y&&(s?p=p.pipeThrough(new Q(o,f)):(d=new K(o,l,u),p=p.pipeThrough(d))),a)if(void 0!==w&&!w||ot&&!ft)p=at(t,p,n);else try{p=p.pipeThrough(new b("deflate-raw"))}catch(e){ft=!1,p=at(t,p,n)}y&&!s||!l||([p,h]=p.tee(),h=h.pipeThrough(new k)),ht(this,p,(async()=>{if(y&&!s&&!d.valid)throw new r("Invalid signature");if((!y||s)&&l){const t=await h.getReader().read();if(t!=new c(t.value.buffer).getUint32(0,!1))throw new r("Invalid signature")}}))}}function at(t,e,n){return e.pipeThrough(new it(t,{it:n}))}function wt(t){return t.pipeThrough(new w({transform(t,e){t&&t.length&&e.enqueue(t)}}))}function ht(t,n,r){t.length=0,n=n.pipeThrough(new w({transform(e,n){e&&e.length&&(t.length+=e.length,n.enqueue(e))},flush:r})),e.defineProperty(t,"readable",{get:()=>n})}const dt=new Map;let pt,bt=0;function yt(t){if(t.data){const e=t.data;if(e&&e.length)try{t.data=e.buffer,a(t,[t.data])}catch(e){a(t)}else a(t)}else a(t)}addEventListener("message",(async t=>{const e=t.data,n=e.type;try{if("start"==n&&(async t=>{try{t.scripts&&t.scripts.length&&importScripts.apply(void 0,t.scripts);const e=t.options;let n;self.initCodec&&self.initCodec(),e.codecType.startsWith("deflate")?n=self.Deflate:e.codecType.startsWith("inflate")&&(n=self.Inflate);const r=new h({async pull(t){let e=new Promise(((t,e)=>dt.set(bt,{resolve:t,reject:e})));yt({type:"pull",messageId:bt}),bt++;const{value:n,done:r}=await e;t.enqueue(n),r&&t.close()}},{highWaterMark:1}),i=new d({write(t){yt({type:"data",data:t})}});pt=((t,e,n,r,i)=>{const s=new AbortController,{signal:o}=s;if(r.codecType.startsWith("deflate"))return{ot:()=>f(lt),abort:c};if(r.codecType.startsWith("inflate"))return{ot:()=>f(ut),abort:c};async function f(s){const f=new s(t,r,i);await e.pipeThrough(f,{signal:o}).pipeTo(n);const{length:c,signature:l}=f;return{length:c,signature:l}}function c(){s.abort()}})(n,r,i,e,t.config),yt({type:"close",result:await pt.ot()})}catch(t){a({error:{message:t.message,stack:t.stack}})}})(e),"data"==n){const{resolve:t}=dt.get(e.messageId);dt.delete(e.messageId),t({value:new i(e.data),done:e.done})}"abort"==n&&pt.abort()}catch(t){a({error:{message:t.message,stack:t.stack}})}}));const mt=(()=>{const e=-2;function o(e){return f(e.map((([e,n])=>new t(e).fill(n,0,e))))}function f(e){return e.reduce(((e,n)=>e.concat(t.isArray(n)?f(n):n)),[])}const c=[0,1,2,3].concat(...o([[2,4],[2,5],[4,6],[4,7],[8,8],[8,9],[16,10],[16,11],[32,12],[32,13],[64,14],[64,15],[2,0],[1,16],[1,17],[2,18],[2,19],[4,20],[4,21],[8,22],[8,23],[16,24],[16,25],[32,26],[32,27],[64,28],[64,29]]));function l(){const t=this;function e(t,e){let n=0;do{n|=1&t,t>>>=1,n<<=1}while(--e>0);return n>>>1}t.ft=r=>{const i=t.ct,s=t.ut.lt,o=t.ut.wt;let f,c,l,u=-1;for(r.ht=0,r.dt=573,f=0;o>f;f++)0!==i[2*f]?(r.bt[++r.ht]=u=f,r.yt[f]=0):i[2*f+1]=0;for(;2>r.ht;)l=r.bt[++r.ht]=2>u?++u:0,i[2*l]=1,r.yt[l]=0,r.kt--,s&&(r.gt-=s[2*l+1]);for(t.vt=u,f=n.floor(r.ht/2);f>=1;f--)r.St(i,f);l=o;do{f=r.bt[1],r.bt[1]=r.bt[r.ht--],r.St(i,1),c=r.bt[1],r.bt[--r.dt]=f,r.bt[--r.dt]=c,i[2*l]=i[2*f]+i[2*c],r.yt[l]=n.max(r.yt[f],r.yt[c])+1,i[2*f+1]=i[2*c+1]=l,r.bt[1]=l++,r.St(i,1)}while(r.ht>=2);r.bt[--r.dt]=r.bt[1],(e=>{const n=t.ct,r=t.ut.lt,i=t.ut._t,s=t.ut.zt,o=t.ut.Ct;let f,c,l,u,a,w,h=0;for(u=0;15>=u;u++)e.xt[u]=0;for(n[2*e.bt[e.dt]+1]=0,f=e.dt+1;573>f;f++)c=e.bt[f],u=n[2*n[2*c+1]+1]+1,u>o&&(u=o,h++),n[2*c+1]=u,c>t.vt||(e.xt[u]++,a=0,s>c||(a=i[c-s]),w=n[2*c],e.kt+=w*(u+a),r&&(e.gt+=w*(r[2*c+1]+a)));if(0!==h){do{for(u=o-1;0===e.xt[u];)u--;e.xt[u]--,e.xt[u+1]+=2,e.xt[o]--,h-=2}while(h>0);for(u=o;0!==u;u--)for(c=e.xt[u];0!==c;)l=e.bt[--f],l>t.vt||(n[2*l+1]!=u&&(e.kt+=(u-n[2*l+1])*n[2*l],n[2*l+1]=u),c--)}})(r),((t,n,r)=>{const i=[];let s,o,f,c=0;for(s=1;15>=s;s++)i[s]=c=c+r[s-1]<<1;for(o=0;n>=o;o++)f=t[2*o+1],0!==f&&(t[2*o]=e(i[f]++,f))})(i,t.vt,r.xt)}}function u(t,e,n,r,i){const s=this;s.lt=t,s._t=e,s.zt=n,s.wt=r,s.Ct=i}l.At=[0,1,2,3,4,5,6,7].concat(...o([[2,8],[2,9],[2,10],[2,11],[4,12],[4,13],[4,14],[4,15],[8,16],[8,17],[8,18],[8,19],[16,20],[16,21],[16,22],[16,23],[32,24],[32,25],[32,26],[31,27],[1,28]])),l.It=[0,1,2,3,4,5,6,7,8,10,12,14,16,20,24,28,32,40,48,56,64,80,96,112,128,160,192,224,0],l.Vt=[0,1,2,3,4,6,8,12,16,24,32,48,64,96,128,192,256,384,512,768,1024,1536,2048,3072,4096,6144,8192,12288,16384,24576],l.Pt=t=>256>t?c[t]:c[256+(t>>>7)],l.Bt=[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],l.Dt=[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],l.Et=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],l.Mt=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];const a=o([[144,8],[112,9],[24,7],[8,8]]);u.Rt=f([12,140,76,204,44,172,108,236,28,156,92,220,60,188,124,252,2,130,66,194,34,162,98,226,18,146,82,210,50,178,114,242,10,138,74,202,42,170,106,234,26,154,90,218,58,186,122,250,6,134,70,198,38,166,102,230,22,150,86,214,54,182,118,246,14,142,78,206,46,174,110,238,30,158,94,222,62,190,126,254,1,129,65,193,33,161,97,225,17,145,81,209,49,177,113,241,9,137,73,201,41,169,105,233,25,153,89,217,57,185,121,249,5,133,69,197,37,165,101,229,21,149,85,213,53,181,117,245,13,141,77,205,45,173,109,237,29,157,93,221,61,189,125,253,19,275,147,403,83,339,211,467,51,307,179,435,115,371,243,499,11,267,139,395,75,331,203,459,43,299,171,427,107,363,235,491,27,283,155,411,91,347,219,475,59,315,187,443,123,379,251,507,7,263,135,391,71,327,199,455,39,295,167,423,103,359,231,487,23,279,151,407,87,343,215,471,55,311,183,439,119,375,247,503,15,271,143,399,79,335,207,463,47,303,175,431,111,367,239,495,31,287,159,415,95,351,223,479,63,319,191,447,127,383,255,511,0,64,32,96,16,80,48,112,8,72,40,104,24,88,56,120,4,68,36,100,20,84,52,116,3,131,67,195,35,163,99,227].map(((t,e)=>[t,a[e]])));const w=o([[30,5]]);function h(t,e,n,r,i){const s=this;s.Ut=t,s.Tt=e,s.Wt=n,s.jt=r,s.Ht=i}u.Kt=f([0,16,8,24,4,20,12,28,2,18,10,26,6,22,14,30,1,17,9,25,5,21,13,29,3,19,11,27,7,23].map(((t,e)=>[t,w[e]]))),u.Lt=new u(u.Rt,l.Bt,257,286,15),u.Ft=new u(u.Kt,l.Dt,0,30,15),u.Ot=new u(null,l.Et,0,19,7);const d=[new h(0,0,0,0,0),new h(4,4,8,4,1),new h(4,5,16,8,1),new h(4,6,32,32,1),new h(4,4,16,16,2),new h(8,16,32,32,2),new h(8,16,128,128,2),new h(8,32,128,256,2),new h(32,128,258,1024,2),new h(32,258,258,4096,2)],p=["need dictionary","stream end","","","stream error","data error","","buffer error","",""],b=113,y=666,m=262;function k(t,e,n,r){const i=t[2*e],s=t[2*n];return s>i||i==s&&r[e]<=r[n]}function g(){const t=this;let r,o,f,c,a,w,h,g,v,S,_,z,C,x,A,I,V,P,B,D,E,M,R,U,T,W,j,H,K,L,F,O,q;const G=new l,J=new l,N=new l;let Q,X,Y,Z,$,tt;function et(){let e;for(e=0;286>e;e++)F[2*e]=0;for(e=0;30>e;e++)O[2*e]=0;for(e=0;19>e;e++)q[2*e]=0;F[512]=1,t.kt=t.gt=0,X=Y=0}function nt(t,e){let n,r=-1,i=t[1],s=0,o=7,f=4;0===i&&(o=138,f=3),t[2*(e+1)+1]=65535;for(let c=0;e>=c;c++)n=i,i=t[2*(c+1)+1],++s<o&&n==i||(f>s?q[2*n]+=s:0!==n?(n!=r&&q[2*n]++,q[32]++):s>10?q[36]++:q[34]++,s=0,r=n,0===i?(o=138,f=3):n==i?(o=6,f=3):(o=7,f=4))}function rt(e){t.qt[t.pending++]=e}function it(t){rt(255&t),rt(t>>>8&255)}function st(t,e){let n;const r=e;tt>16-r?(n=t,$|=n<<tt&65535,it($),$=n>>>16-tt,tt+=r-16):($|=t<<tt&65535,tt+=r)}function ot(t,e){const n=2*t;st(65535&e[n],65535&e[n+1])}function ft(t,e){let n,r,i=-1,s=t[1],o=0,f=7,c=4;for(0===s&&(f=138,c=3),n=0;e>=n;n++)if(r=s,s=t[2*(n+1)+1],++o>=f||r!=s){if(c>o)do{ot(r,q)}while(0!=--o);else 0!==r?(r!=i&&(ot(r,q),o--),ot(16,q),st(o-3,2)):o>10?(ot(18,q),st(o-11,7)):(ot(17,q),st(o-3,3));o=0,i=r,0===s?(f=138,c=3):r==s?(f=6,c=3):(f=7,c=4)}}function ct(){16==tt?(it($),$=0,tt=0):8>tt||(rt(255&$),$>>>=8,tt-=8)}function lt(e,r){let i,s,o;if(t.Gt[X]=e,t.Jt[X]=255&r,X++,0===e?F[2*r]++:(Y++,e--,F[2*(l.At[r]+256+1)]++,O[2*l.Pt(e)]++),0==(8191&X)&&j>2){for(i=8*X,s=E-V,o=0;30>o;o++)i+=O[2*o]*(5+l.Dt[o]);if(i>>>=3,Y<n.floor(X/2)&&i<n.floor(s/2))return!0}return X==Q-1}function ut(e,n){let r,i,s,o,f=0;if(0!==X)do{r=t.Gt[f],i=t.Jt[f],f++,0===r?ot(i,e):(s=l.At[i],ot(s+256+1,e),o=l.Bt[s],0!==o&&(i-=l.It[s],st(i,o)),r--,s=l.Pt(r),ot(s,n),o=l.Dt[s],0!==o&&(r-=l.Vt[s],st(r,o)))}while(X>f);ot(256,e),Z=e[513]}function at(){tt>8?it($):tt>0&&rt(255&$),$=0,tt=0}function wt(e,n,r){st(0+(r?1:0),3),((e,n)=>{at(),Z=8,it(n),it(~n),t.qt.set(g.subarray(e,e+n),t.pending),t.pending+=n})(e,n)}function ht(e){((e,n,r)=>{let i,s,o=0;j>0?(G.ft(t),J.ft(t),o=(()=>{let e;for(nt(F,G.vt),nt(O,J.vt),N.ft(t),e=18;e>=3&&0===q[2*l.Mt[e]+1];e--);return t.kt+=14+3*(e+1),e})(),i=t.kt+3+7>>>3,s=t.gt+3+7>>>3,s>i||(i=s)):i=s=n+5,n+4>i||-1==e?s==i?(st(2+(r?1:0),3),ut(u.Rt,u.Kt)):(st(4+(r?1:0),3),((t,e,n)=>{let r;for(st(t-257,5),st(e-1,5),st(n-4,4),r=0;n>r;r++)st(q[2*l.Mt[r]+1],3);ft(F,t-1),ft(O,e-1)})(G.vt+1,J.vt+1,o+1),ut(F,O)):wt(e,n,r),et(),r&&at()})(0>V?-1:V,E-V,e),V=E,r.Nt()}function dt(){let t,e,n,i;do{if(i=v-R-E,0===i&&0===E&&0===R)i=a;else if(-1==i)i--;else if(E>=a+a-m){g.set(g.subarray(a,a+a),0),M-=a,E-=a,V-=a,t=C,n=t;do{e=65535&_[--n],_[n]=a>e?0:e-a}while(0!=--t);t=a,n=t;do{e=65535&S[--n],S[n]=a>e?0:e-a}while(0!=--t);i+=a}if(0===r.Qt)return;t=r.Xt(g,E+R,i),R+=t,3>R||(z=255&g[E],z=(z<<I^255&g[E+1])&A)}while(m>R&&0!==r.Qt)}function pt(t){let e,n,r=T,i=E,s=U;const o=E>a-m?E-(a-m):0;let f=L;const c=h,l=E+258;let u=g[i+s-1],w=g[i+s];K>U||(r>>=2),f>R&&(f=R);do{if(e=t,g[e+s]==w&&g[e+s-1]==u&&g[e]==g[i]&&g[++e]==g[i+1]){i+=2,e++;do{}while(g[++i]==g[++e]&&g[++i]==g[++e]&&g[++i]==g[++e]&&g[++i]==g[++e]&&g[++i]==g[++e]&&g[++i]==g[++e]&&g[++i]==g[++e]&&g[++i]==g[++e]&&l>i);if(n=258-(l-i),i=l-258,n>s){if(M=t,s=n,n>=f)break;u=g[i+s-1],w=g[i+s]}}}while((t=65535&S[t&c])>o&&0!=--r);return s>R?R:s}t.yt=[],t.xt=[],t.bt=[],F=[],O=[],q=[],t.St=(e,n)=>{const r=t.bt,i=r[n];let s=n<<1;for(;s<=t.ht&&(s<t.ht&&k(e,r[s+1],r[s],t.yt)&&s++,!k(e,i,r[s],t.yt));)r[n]=r[s],n=s,s<<=1;r[n]=i},t.Yt=(r,l,p,y,m,k)=>(y||(y=8),m||(m=8),k||(k=0),r.Zt=null,-1==l&&(l=6),1>m||m>9||8!=y||9>p||p>15||0>l||l>9||0>k||k>2?e:(r.$t=t,w=p,a=1<<w,h=a-1,x=m+7,C=1<<x,A=C-1,I=n.floor((x+3-1)/3),g=new i(2*a),S=[],_=[],Q=1<<m+6,t.qt=new i(4*Q),f=4*Q,t.Gt=new s(Q),t.Jt=new i(Q),j=l,H=k,(e=>(e.te=e.ee=0,e.Zt=null,t.pending=0,t.ne=0,o=b,c=0,G.ct=F,G.ut=u.Lt,J.ct=O,J.ut=u.Ft,N.ct=q,N.ut=u.Ot,$=0,tt=0,Z=8,et(),(()=>{v=2*a,_[C-1]=0;for(let t=0;C-1>t;t++)_[t]=0;W=d[j].Tt,K=d[j].Ut,L=d[j].Wt,T=d[j].jt,E=0,V=0,R=0,P=U=2,D=0,z=0})(),0))(r))),t.re=()=>42!=o&&o!=b&&o!=y?e:(t.Jt=null,t.Gt=null,t.qt=null,_=null,S=null,g=null,t.$t=null,o==b?-3:0),t.ie=(t,n,r)=>{let i=0;return-1==n&&(n=6),0>n||n>9||0>r||r>2?e:(d[j].Ht!=d[n].Ht&&0!==t.te&&(i=t.se(1)),j!=n&&(j=n,W=d[j].Tt,K=d[j].Ut,L=d[j].Wt,T=d[j].jt),H=r,i)},t.oe=(t,n,r)=>{let i,s=r,f=0;if(!n||42!=o)return e;if(3>s)return 0;for(s>a-m&&(s=a-m,f=r-s),g.set(n.subarray(f,f+s),0),E=s,V=s,z=255&g[0],z=(z<<I^255&g[1])&A,i=0;s-3>=i;i++)z=(z<<I^255&g[i+2])&A,S[i&h]=_[z],_[z]=i;return 0},t.se=(n,i)=>{let s,l,k,v,x;if(i>4||0>i)return e;if(!n.fe||!n.ce&&0!==n.Qt||o==y&&4!=i)return n.Zt=p[4],e;if(0===n.le)return n.Zt=p[7],-5;var T;if(r=n,v=c,c=i,42==o&&(l=8+(w-8<<4)<<8,k=(j-1&255)>>1,k>3&&(k=3),l|=k<<6,0!==E&&(l|=32),l+=31-l%31,o=b,rt((T=l)>>8&255),rt(255&T)),0!==t.pending){if(r.Nt(),0===r.le)return c=-1,0}else if(0===r.Qt&&v>=i&&4!=i)return r.Zt=p[7],-5;if(o==y&&0!==r.Qt)return n.Zt=p[7],-5;if(0!==r.Qt||0!==R||0!=i&&o!=y){switch(x=-1,d[j].Ht){case 0:x=(t=>{let e,n=65535;for(n>f-5&&(n=f-5);;){if(1>=R){if(dt(),0===R&&0==t)return 0;if(0===R)break}if(E+=R,R=0,e=V+n,(0===E||E>=e)&&(R=E-e,E=e,ht(!1),0===r.le))return 0;if(E-V>=a-m&&(ht(!1),0===r.le))return 0}return ht(4==t),0===r.le?4==t?2:0:4==t?3:1})(i);break;case 1:x=(t=>{let e,n=0;for(;;){if(m>R){if(dt(),m>R&&0==t)return 0;if(0===R)break}if(3>R||(z=(z<<I^255&g[E+2])&A,n=65535&_[z],S[E&h]=_[z],_[z]=E),0===n||(E-n&65535)>a-m||2!=H&&(P=pt(n)),3>P)e=lt(0,255&g[E]),R--,E++;else if(e=lt(E-M,P-3),R-=P,P>W||3>R)E+=P,P=0,z=255&g[E],z=(z<<I^255&g[E+1])&A;else{P--;do{E++,z=(z<<I^255&g[E+2])&A,n=65535&_[z],S[E&h]=_[z],_[z]=E}while(0!=--P);E++}if(e&&(ht(!1),0===r.le))return 0}return ht(4==t),0===r.le?4==t?2:0:4==t?3:1})(i);break;case 2:x=(t=>{let e,n,i=0;for(;;){if(m>R){if(dt(),m>R&&0==t)return 0;if(0===R)break}if(3>R||(z=(z<<I^255&g[E+2])&A,i=65535&_[z],S[E&h]=_[z],_[z]=E),U=P,B=M,P=2,0!==i&&W>U&&a-m>=(E-i&65535)&&(2!=H&&(P=pt(i)),5>=P&&(1==H||3==P&&E-M>4096)&&(P=2)),3>U||P>U)if(0!==D){if(e=lt(0,255&g[E-1]),e&&ht(!1),E++,R--,0===r.le)return 0}else D=1,E++,R--;else{n=E+R-3,e=lt(E-1-B,U-3),R-=U-1,U-=2;do{++E>n||(z=(z<<I^255&g[E+2])&A,i=65535&_[z],S[E&h]=_[z],_[z]=E)}while(0!=--U);if(D=0,P=2,E++,e&&(ht(!1),0===r.le))return 0}}return 0!==D&&(e=lt(0,255&g[E-1]),D=0),ht(4==t),0===r.le?4==t?2:0:4==t?3:1})(i)}if(2!=x&&3!=x||(o=y),0==x||2==x)return 0===r.le&&(c=-1),0;if(1==x){if(1==i)st(2,3),ot(256,u.Rt),ct(),9>1+Z+10-tt&&(st(2,3),ot(256,u.Rt),ct()),Z=7;else if(wt(0,0,!1),3==i)for(s=0;C>s;s++)_[s]=0;if(r.Nt(),0===r.le)return c=-1,0}}return 4!=i?0:1}}function v(){const t=this;t.ue=0,t.ae=0,t.Qt=0,t.te=0,t.le=0,t.ee=0}return v.prototype={Yt:function(t,e){const n=this;return n.$t=new g,e||(e=15),n.$t.Yt(n,t,e)},se:function(t){const n=this;return n.$t?n.$t.se(n,t):e},re:function(){const t=this;if(!t.$t)return e;const n=t.$t.re();return t.$t=null,n},ie:function(t,n){const r=this;return r.$t?r.$t.ie(r,t,n):e},oe:function(t,n){const r=this;return r.$t?r.$t.oe(r,t,n):e},Xt:function(t,e,n){const r=this;let i=r.Qt;return i>n&&(i=n),0===i?0:(r.Qt-=i,t.set(r.ce.subarray(r.ue,r.ue+i),e),r.ue+=i,r.te+=i,i)},Nt:function(){const t=this;let e=t.$t.pending;e>t.le&&(e=t.le),0!==e&&(t.fe.set(t.$t.qt.subarray(t.$t.ne,t.$t.ne+e),t.ae),t.ae+=e,t.$t.ne+=e,t.ee+=e,t.le-=e,t.$t.pending-=e,0===t.$t.pending&&(t.$t.ne=0))}},function(t){const e=new v,s=(o=t&&t.it?t.it:65536)+5*(n.floor(o/16383)+1);var o;const f=new i(s);let c=t?t.level:-1;void 0===c&&(c=-1),e.Yt(c),e.fe=f,this.append=(t,n)=>{let o,c,l=0,u=0,a=0;const w=[];if(t.length){e.ue=0,e.ce=t,e.Qt=t.length;do{if(e.ae=0,e.le=s,o=e.se(0),0!=o)throw new r("deflating: "+e.Zt);e.ae&&(e.ae==s?w.push(new i(f)):w.push(f.slice(0,e.ae))),a+=e.ae,n&&e.ue>0&&e.ue!=l&&(n(e.ue),l=e.ue)}while(e.Qt>0||0===e.le);return w.length>1?(c=new i(a),w.forEach((t=>{c.set(t,u),u+=t.length}))):c=w[0]||new i(0),c}},this.flush=()=>{let t,n,o=0,c=0;const l=[];do{if(e.ae=0,e.le=s,t=e.se(4),1!=t&&0!=t)throw new r("deflating: "+e.Zt);s-e.le>0&&l.push(f.slice(0,e.ae)),c+=e.ae}while(e.Qt>0||0===e.le);return e.re(),n=new i(c),l.forEach((t=>{n.set(t,o),o+=t.length})),n}}})(),kt=(()=>{const t=-2,e=-3,s=-5,o=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535],c=[96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,192,80,7,10,0,8,96,0,8,32,0,9,160,0,8,0,0,8,128,0,8,64,0,9,224,80,7,6,0,8,88,0,8,24,0,9,144,83,7,59,0,8,120,0,8,56,0,9,208,81,7,17,0,8,104,0,8,40,0,9,176,0,8,8,0,8,136,0,8,72,0,9,240,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,200,81,7,13,0,8,100,0,8,36,0,9,168,0,8,4,0,8,132,0,8,68,0,9,232,80,7,8,0,8,92,0,8,28,0,9,152,84,7,83,0,8,124,0,8,60,0,9,216,82,7,23,0,8,108,0,8,44,0,9,184,0,8,12,0,8,140,0,8,76,0,9,248,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,196,81,7,11,0,8,98,0,8,34,0,9,164,0,8,2,0,8,130,0,8,66,0,9,228,80,7,7,0,8,90,0,8,26,0,9,148,84,7,67,0,8,122,0,8,58,0,9,212,82,7,19,0,8,106,0,8,42,0,9,180,0,8,10,0,8,138,0,8,74,0,9,244,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,204,81,7,15,0,8,102,0,8,38,0,9,172,0,8,6,0,8,134,0,8,70,0,9,236,80,7,9,0,8,94,0,8,30,0,9,156,84,7,99,0,8,126,0,8,62,0,9,220,82,7,27,0,8,110,0,8,46,0,9,188,0,8,14,0,8,142,0,8,78,0,9,252,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,194,80,7,10,0,8,97,0,8,33,0,9,162,0,8,1,0,8,129,0,8,65,0,9,226,80,7,6,0,8,89,0,8,25,0,9,146,83,7,59,0,8,121,0,8,57,0,9,210,81,7,17,0,8,105,0,8,41,0,9,178,0,8,9,0,8,137,0,8,73,0,9,242,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,202,81,7,13,0,8,101,0,8,37,0,9,170,0,8,5,0,8,133,0,8,69,0,9,234,80,7,8,0,8,93,0,8,29,0,9,154,84,7,83,0,8,125,0,8,61,0,9,218,82,7,23,0,8,109,0,8,45,0,9,186,0,8,13,0,8,141,0,8,77,0,9,250,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,198,81,7,11,0,8,99,0,8,35,0,9,166,0,8,3,0,8,131,0,8,67,0,9,230,80,7,7,0,8,91,0,8,27,0,9,150,84,7,67,0,8,123,0,8,59,0,9,214,82,7,19,0,8,107,0,8,43,0,9,182,0,8,11,0,8,139,0,8,75,0,9,246,80,7,5,0,8,87,0,8,23,192,8,0,83,7,51,0,8,119,0,8,55,0,9,206,81,7,15,0,8,103,0,8,39,0,9,174,0,8,7,0,8,135,0,8,71,0,9,238,80,7,9,0,8,95,0,8,31,0,9,158,84,7,99,0,8,127,0,8,63,0,9,222,82,7,27,0,8,111,0,8,47,0,9,190,0,8,15,0,8,143,0,8,79,0,9,254,96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,193,80,7,10,0,8,96,0,8,32,0,9,161,0,8,0,0,8,128,0,8,64,0,9,225,80,7,6,0,8,88,0,8,24,0,9,145,83,7,59,0,8,120,0,8,56,0,9,209,81,7,17,0,8,104,0,8,40,0,9,177,0,8,8,0,8,136,0,8,72,0,9,241,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,201,81,7,13,0,8,100,0,8,36,0,9,169,0,8,4,0,8,132,0,8,68,0,9,233,80,7,8,0,8,92,0,8,28,0,9,153,84,7,83,0,8,124,0,8,60,0,9,217,82,7,23,0,8,108,0,8,44,0,9,185,0,8,12,0,8,140,0,8,76,0,9,249,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,197,81,7,11,0,8,98,0,8,34,0,9,165,0,8,2,0,8,130,0,8,66,0,9,229,80,7,7,0,8,90,0,8,26,0,9,149,84,7,67,0,8,122,0,8,58,0,9,213,82,7,19,0,8,106,0,8,42,0,9,181,0,8,10,0,8,138,0,8,74,0,9,245,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,205,81,7,15,0,8,102,0,8,38,0,9,173,0,8,6,0,8,134,0,8,70,0,9,237,80,7,9,0,8,94,0,8,30,0,9,157,84,7,99,0,8,126,0,8,62,0,9,221,82,7,27,0,8,110,0,8,46,0,9,189,0,8,14,0,8,142,0,8,78,0,9,253,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,195,80,7,10,0,8,97,0,8,33,0,9,163,0,8,1,0,8,129,0,8,65,0,9,227,80,7,6,0,8,89,0,8,25,0,9,147,83,7,59,0,8,121,0,8,57,0,9,211,81,7,17,0,8,105,0,8,41,0,9,179,0,8,9,0,8,137,0,8,73,0,9,243,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,203,81,7,13,0,8,101,0,8,37,0,9,171,0,8,5,0,8,133,0,8,69,0,9,235,80,7,8,0,8,93,0,8,29,0,9,155,84,7,83,0,8,125,0,8,61,0,9,219,82,7,23,0,8,109,0,8,45,0,9,187,0,8,13,0,8,141,0,8,77,0,9,251,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,199,81,7,11,0,8,99,0,8,35,0,9,167,0,8,3,0,8,131,0,8,67,0,9,231,80,7,7,0,8,91,0,8,27,0,9,151,84,7,67,0,8,123,0,8,59,0,9,215,82,7,19,0,8,107,0,8,43,0,9,183,0,8,11,0,8,139,0,8,75,0,9,247,80,7,5,0,8,87,0,8,23,192,8,0,83,7,51,0,8,119,0,8,55,0,9,207,81,7,15,0,8,103,0,8,39,0,9,175,0,8,7,0,8,135,0,8,71,0,9,239,80,7,9,0,8,95,0,8,31,0,9,159,84,7,99,0,8,127,0,8,63,0,9,223,82,7,27,0,8,111,0,8,47,0,9,191,0,8,15,0,8,143,0,8,79,0,9,255],l=[80,5,1,87,5,257,83,5,17,91,5,4097,81,5,5,89,5,1025,85,5,65,93,5,16385,80,5,3,88,5,513,84,5,33,92,5,8193,82,5,9,90,5,2049,86,5,129,192,5,24577,80,5,2,87,5,385,83,5,25,91,5,6145,81,5,7,89,5,1537,85,5,97,93,5,24577,80,5,4,88,5,769,84,5,49,92,5,12289,82,5,13,90,5,3073,86,5,193,192,5,24577],u=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],a=[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,112,112],w=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],h=[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];function d(){let t,n,r,i,o,c;function l(t,n,f,l,u,a,w,h,d,p,b){let y,m,k,g,v,S,_,z,C,x,A,I,V,P,B;x=0,v=f;do{r[t[n+x]]++,x++,v--}while(0!==v);if(r[0]==f)return w[0]=-1,h[0]=0,0;for(z=h[0],S=1;15>=S&&0===r[S];S++);for(_=S,S>z&&(z=S),v=15;0!==v&&0===r[v];v--);for(k=v,z>v&&(z=v),h[0]=z,P=1<<S;v>S;S++,P<<=1)if(0>(P-=r[S]))return e;if(0>(P-=r[v]))return e;for(r[v]+=P,c[1]=S=0,x=1,V=2;0!=--v;)c[V]=S+=r[x],V++,x++;v=0,x=0;do{0!==(S=t[n+x])&&(b[c[S]++]=v),x++}while(++v<f);for(f=c[k],c[0]=v=0,x=0,g=-1,I=-z,o[0]=0,A=0,B=0;k>=_;_++)for(y=r[_];0!=y--;){for(;_>I+z;){if(g++,I+=z,B=k-I,B=B>z?z:B,(m=1<<(S=_-I))>y+1&&(m-=y+1,V=_,B>S))for(;++S<B&&(m<<=1)>r[++V];)m-=r[V];if(B=1<<S,p[0]+B>1440)return e;o[g]=A=p[0],p[0]+=B,0!==g?(c[g]=v,i[0]=S,i[1]=z,S=v>>>I-z,i[2]=A-o[g-1]-S,d.set(i,3*(o[g-1]+S))):w[0]=A}for(i[1]=_-I,f>x?b[x]<l?(i[0]=256>b[x]?0:96,i[2]=b[x++]):(i[0]=a[b[x]-l]+16+64,i[2]=u[b[x++]-l]):i[0]=192,m=1<<_-I,S=v>>>I;B>S;S+=m)d.set(i,3*(A+S));for(S=1<<_-1;0!=(v&S);S>>>=1)v^=S;for(v^=S,C=(1<<I)-1;(v&C)!=c[g];)g--,I-=z,C=(1<<I)-1}return 0!==P&&1!=k?s:0}function d(e){let s;for(t||(t=[],n=[],r=new f(16),i=[],o=new f(15),c=new f(16)),n.length<e&&(n=[]),s=0;e>s;s++)n[s]=0;for(s=0;16>s;s++)r[s]=0;for(s=0;3>s;s++)i[s]=0;o.set(r.subarray(0,15),0),c.set(r.subarray(0,16),0)}this.we=(r,i,o,f,c)=>{let u;return d(19),t[0]=0,u=l(r,0,19,19,null,null,o,i,f,t,n),u==e?c.Zt="oversubscribed dynamic bit lengths tree":u!=s&&0!==i[0]||(c.Zt="incomplete dynamic bit lengths tree",u=e),u},this.he=(r,i,o,f,c,p,b,y,m)=>{let k;return d(288),t[0]=0,k=l(o,0,r,257,u,a,p,f,y,t,n),0!=k||0===f[0]?(k==e?m.Zt="oversubscribed literal/length tree":-4!=k&&(m.Zt="incomplete literal/length tree",k=e),k):(d(288),k=l(o,r,i,0,w,h,b,c,y,t,n),0!=k||0===c[0]&&r>257?(k==e?m.Zt="oversubscribed distance tree":k==s?(m.Zt="incomplete distance tree",k=e):-4!=k&&(m.Zt="empty distance tree with lengths",k=e),k):0)}}function p(){const n=this;let r,i,s,f,c=0,l=0,u=0,a=0,w=0,h=0,d=0,p=0,b=0,y=0;function m(t,n,r,i,s,f,c,l){let u,a,w,h,d,p,b,y,m,k,g,v,S,_,z,C;b=l.ue,y=l.Qt,d=c.de,p=c.pe,m=c.write,k=m<c.read?c.read-m-1:c.end-m,g=o[t],v=o[n];do{for(;20>p;)y--,d|=(255&l.be(b++))<<p,p+=8;if(u=d&g,a=r,w=i,C=3*(w+u),0!==(h=a[C]))for(;;){if(d>>=a[C+1],p-=a[C+1],0!=(16&h)){for(h&=15,S=a[C+2]+(d&o[h]),d>>=h,p-=h;15>p;)y--,d|=(255&l.be(b++))<<p,p+=8;for(u=d&v,a=s,w=f,C=3*(w+u),h=a[C];;){if(d>>=a[C+1],p-=a[C+1],0!=(16&h)){for(h&=15;h>p;)y--,d|=(255&l.be(b++))<<p,p+=8;if(_=a[C+2]+(d&o[h]),d>>=h,p-=h,k-=S,_>m){z=m-_;do{z+=c.end}while(0>z);if(h=c.end-z,S>h){if(S-=h,m-z>0&&h>m-z)do{c.ye[m++]=c.ye[z++]}while(0!=--h);else c.ye.set(c.ye.subarray(z,z+h),m),m+=h,z+=h,h=0;z=0}}else z=m-_,m-z>0&&2>m-z?(c.ye[m++]=c.ye[z++],c.ye[m++]=c.ye[z++],S-=2):(c.ye.set(c.ye.subarray(z,z+2),m),m+=2,z+=2,S-=2);if(m-z>0&&S>m-z)do{c.ye[m++]=c.ye[z++]}while(0!=--S);else c.ye.set(c.ye.subarray(z,z+S),m),m+=S,z+=S,S=0;break}if(0!=(64&h))return l.Zt="invalid distance code",S=l.Qt-y,S=S>p>>3?p>>3:S,y+=S,b-=S,p-=S<<3,c.de=d,c.pe=p,l.Qt=y,l.te+=b-l.ue,l.ue=b,c.write=m,e;u+=a[C+2],u+=d&o[h],C=3*(w+u),h=a[C]}break}if(0!=(64&h))return 0!=(32&h)?(S=l.Qt-y,S=S>p>>3?p>>3:S,y+=S,b-=S,p-=S<<3,c.de=d,c.pe=p,l.Qt=y,l.te+=b-l.ue,l.ue=b,c.write=m,1):(l.Zt="invalid literal/length code",S=l.Qt-y,S=S>p>>3?p>>3:S,y+=S,b-=S,p-=S<<3,c.de=d,c.pe=p,l.Qt=y,l.te+=b-l.ue,l.ue=b,c.write=m,e);if(u+=a[C+2],u+=d&o[h],C=3*(w+u),0===(h=a[C])){d>>=a[C+1],p-=a[C+1],c.ye[m++]=a[C+2],k--;break}}else d>>=a[C+1],p-=a[C+1],c.ye[m++]=a[C+2],k--}while(k>=258&&y>=10);return S=l.Qt-y,S=S>p>>3?p>>3:S,y+=S,b-=S,p-=S<<3,c.de=d,c.pe=p,l.Qt=y,l.te+=b-l.ue,l.ue=b,c.write=m,0}n.init=(t,e,n,o,c,l)=>{r=0,d=t,p=e,s=n,b=o,f=c,y=l,i=null},n.me=(n,k,g)=>{let v,S,_,z,C,x,A,I=0,V=0,P=0;for(P=k.ue,z=k.Qt,I=n.de,V=n.pe,C=n.write,x=C<n.read?n.read-C-1:n.end-C;;)switch(r){case 0:if(x>=258&&z>=10&&(n.de=I,n.pe=V,k.Qt=z,k.te+=P-k.ue,k.ue=P,n.write=C,g=m(d,p,s,b,f,y,n,k),P=k.ue,z=k.Qt,I=n.de,V=n.pe,C=n.write,x=C<n.read?n.read-C-1:n.end-C,0!=g)){r=1==g?7:9;break}u=d,i=s,l=b,r=1;case 1:for(v=u;v>V;){if(0===z)return n.de=I,n.pe=V,k.Qt=z,k.te+=P-k.ue,k.ue=P,n.write=C,n.ke(k,g);g=0,z--,I|=(255&k.be(P++))<<V,V+=8}if(S=3*(l+(I&o[v])),I>>>=i[S+1],V-=i[S+1],_=i[S],0===_){a=i[S+2],r=6;break}if(0!=(16&_)){w=15&_,c=i[S+2],r=2;break}if(0==(64&_)){u=_,l=S/3+i[S+2];break}if(0!=(32&_)){r=7;break}return r=9,k.Zt="invalid literal/length code",g=e,n.de=I,n.pe=V,k.Qt=z,k.te+=P-k.ue,k.ue=P,n.write=C,n.ke(k,g);case 2:for(v=w;v>V;){if(0===z)return n.de=I,n.pe=V,k.Qt=z,k.te+=P-k.ue,k.ue=P,n.write=C,n.ke(k,g);g=0,z--,I|=(255&k.be(P++))<<V,V+=8}c+=I&o[v],I>>=v,V-=v,u=p,i=f,l=y,r=3;case 3:for(v=u;v>V;){if(0===z)return n.de=I,n.pe=V,k.Qt=z,k.te+=P-k.ue,k.ue=P,n.write=C,n.ke(k,g);g=0,z--,I|=(255&k.be(P++))<<V,V+=8}if(S=3*(l+(I&o[v])),I>>=i[S+1],V-=i[S+1],_=i[S],0!=(16&_)){w=15&_,h=i[S+2],r=4;break}if(0==(64&_)){u=_,l=S/3+i[S+2];break}return r=9,k.Zt="invalid distance code",g=e,n.de=I,n.pe=V,k.Qt=z,k.te+=P-k.ue,k.ue=P,n.write=C,n.ke(k,g);case 4:for(v=w;v>V;){if(0===z)return n.de=I,n.pe=V,k.Qt=z,k.te+=P-k.ue,k.ue=P,n.write=C,n.ke(k,g);g=0,z--,I|=(255&k.be(P++))<<V,V+=8}h+=I&o[v],I>>=v,V-=v,r=5;case 5:for(A=C-h;0>A;)A+=n.end;for(;0!==c;){if(0===x&&(C==n.end&&0!==n.read&&(C=0,x=C<n.read?n.read-C-1:n.end-C),0===x&&(n.write=C,g=n.ke(k,g),C=n.write,x=C<n.read?n.read-C-1:n.end-C,C==n.end&&0!==n.read&&(C=0,x=C<n.read?n.read-C-1:n.end-C),0===x)))return n.de=I,n.pe=V,k.Qt=z,k.te+=P-k.ue,k.ue=P,n.write=C,n.ke(k,g);n.ye[C++]=n.ye[A++],x--,A==n.end&&(A=0),c--}r=0;break;case 6:if(0===x&&(C==n.end&&0!==n.read&&(C=0,x=C<n.read?n.read-C-1:n.end-C),0===x&&(n.write=C,g=n.ke(k,g),C=n.write,x=C<n.read?n.read-C-1:n.end-C,C==n.end&&0!==n.read&&(C=0,x=C<n.read?n.read-C-1:n.end-C),0===x)))return n.de=I,n.pe=V,k.Qt=z,k.te+=P-k.ue,k.ue=P,n.write=C,n.ke(k,g);g=0,n.ye[C++]=a,x--,r=0;break;case 7:if(V>7&&(V-=8,z++,P--),n.write=C,g=n.ke(k,g),C=n.write,x=C<n.read?n.read-C-1:n.end-C,n.read!=n.write)return n.de=I,n.pe=V,k.Qt=z,k.te+=P-k.ue,k.ue=P,n.write=C,n.ke(k,g);r=8;case 8:return g=1,n.de=I,n.pe=V,k.Qt=z,k.te+=P-k.ue,k.ue=P,n.write=C,n.ke(k,g);case 9:return g=e,n.de=I,n.pe=V,k.Qt=z,k.te+=P-k.ue,k.ue=P,n.write=C,n.ke(k,g);default:return g=t,n.de=I,n.pe=V,k.Qt=z,k.te+=P-k.ue,k.ue=P,n.write=C,n.ke(k,g)}},n.ge=()=>{}}d.ve=(t,e,n,r)=>(t[0]=9,e[0]=5,n[0]=c,r[0]=l,0);const b=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];function y(n,r){const c=this;let l,u=0,a=0,w=0,h=0;const y=[0],m=[0],k=new p;let g=0,v=new f(4320);const S=new d;c.pe=0,c.de=0,c.ye=new i(r),c.end=r,c.read=0,c.write=0,c.reset=(t,e)=>{e&&(e[0]=0),6==u&&k.ge(t),u=0,c.pe=0,c.de=0,c.read=c.write=0},c.reset(n,null),c.ke=(t,e)=>{let n,r,i;return r=t.ae,i=c.read,n=(i>c.write?c.end:c.write)-i,n>t.le&&(n=t.le),0!==n&&e==s&&(e=0),t.le-=n,t.ee+=n,t.fe.set(c.ye.subarray(i,i+n),r),r+=n,i+=n,i==c.end&&(i=0,c.write==c.end&&(c.write=0),n=c.write-i,n>t.le&&(n=t.le),0!==n&&e==s&&(e=0),t.le-=n,t.ee+=n,t.fe.set(c.ye.subarray(i,i+n),r),r+=n,i+=n),t.ae=r,c.read=i,e},c.me=(n,r)=>{let i,s,f,p,_,z,C,x;for(p=n.ue,_=n.Qt,s=c.de,f=c.pe,z=c.write,C=z<c.read?c.read-z-1:c.end-z;;){let A,I,V,P,B,D,E,M;switch(u){case 0:for(;3>f;){if(0===_)return c.de=s,c.pe=f,n.Qt=_,n.te+=p-n.ue,n.ue=p,c.write=z,c.ke(n,r);r=0,_--,s|=(255&n.be(p++))<<f,f+=8}switch(i=7&s,g=1&i,i>>>1){case 0:s>>>=3,f-=3,i=7&f,s>>>=i,f-=i,u=1;break;case 1:A=[],I=[],V=[[]],P=[[]],d.ve(A,I,V,P),k.init(A[0],I[0],V[0],0,P[0],0),s>>>=3,f-=3,u=6;break;case 2:s>>>=3,f-=3,u=3;break;case 3:return s>>>=3,f-=3,u=9,n.Zt="invalid block type",r=e,c.de=s,c.pe=f,n.Qt=_,n.te+=p-n.ue,n.ue=p,c.write=z,c.ke(n,r)}break;case 1:for(;32>f;){if(0===_)return c.de=s,c.pe=f,n.Qt=_,n.te+=p-n.ue,n.ue=p,c.write=z,c.ke(n,r);r=0,_--,s|=(255&n.be(p++))<<f,f+=8}if((~s>>>16&65535)!=(65535&s))return u=9,n.Zt="invalid stored block lengths",r=e,c.de=s,c.pe=f,n.Qt=_,n.te+=p-n.ue,n.ue=p,c.write=z,c.ke(n,r);a=65535&s,s=f=0,u=0!==a?2:0!==g?7:0;break;case 2:if(0===_)return c.de=s,c.pe=f,n.Qt=_,n.te+=p-n.ue,n.ue=p,c.write=z,c.ke(n,r);if(0===C&&(z==c.end&&0!==c.read&&(z=0,C=z<c.read?c.read-z-1:c.end-z),0===C&&(c.write=z,r=c.ke(n,r),z=c.write,C=z<c.read?c.read-z-1:c.end-z,z==c.end&&0!==c.read&&(z=0,C=z<c.read?c.read-z-1:c.end-z),0===C)))return c.de=s,c.pe=f,n.Qt=_,n.te+=p-n.ue,n.ue=p,c.write=z,c.ke(n,r);if(r=0,i=a,i>_&&(i=_),i>C&&(i=C),c.ye.set(n.Xt(p,i),z),p+=i,_-=i,z+=i,C-=i,0!=(a-=i))break;u=0!==g?7:0;break;case 3:for(;14>f;){if(0===_)return c.de=s,c.pe=f,n.Qt=_,n.te+=p-n.ue,n.ue=p,c.write=z,c.ke(n,r);r=0,_--,s|=(255&n.be(p++))<<f,f+=8}if(w=i=16383&s,(31&i)>29||(i>>5&31)>29)return u=9,n.Zt="too many length or distance symbols",r=e,c.de=s,c.pe=f,n.Qt=_,n.te+=p-n.ue,n.ue=p,c.write=z,c.ke(n,r);if(i=258+(31&i)+(i>>5&31),!l||l.length<i)l=[];else for(x=0;i>x;x++)l[x]=0;s>>>=14,f-=14,h=0,u=4;case 4:for(;4+(w>>>10)>h;){for(;3>f;){if(0===_)return c.de=s,c.pe=f,n.Qt=_,n.te+=p-n.ue,n.ue=p,c.write=z,c.ke(n,r);r=0,_--,s|=(255&n.be(p++))<<f,f+=8}l[b[h++]]=7&s,s>>>=3,f-=3}for(;19>h;)l[b[h++]]=0;if(y[0]=7,i=S.we(l,y,m,v,n),0!=i)return(r=i)==e&&(l=null,u=9),c.de=s,c.pe=f,n.Qt=_,n.te+=p-n.ue,n.ue=p,c.write=z,c.ke(n,r);h=0,u=5;case 5:for(;i=w,258+(31&i)+(i>>5&31)>h;){let t,a;for(i=y[0];i>f;){if(0===_)return c.de=s,c.pe=f,n.Qt=_,n.te+=p-n.ue,n.ue=p,c.write=z,c.ke(n,r);r=0,_--,s|=(255&n.be(p++))<<f,f+=8}if(i=v[3*(m[0]+(s&o[i]))+1],a=v[3*(m[0]+(s&o[i]))+2],16>a)s>>>=i,f-=i,l[h++]=a;else{for(x=18==a?7:a-14,t=18==a?11:3;i+x>f;){if(0===_)return c.de=s,c.pe=f,n.Qt=_,n.te+=p-n.ue,n.ue=p,c.write=z,c.ke(n,r);r=0,_--,s|=(255&n.be(p++))<<f,f+=8}if(s>>>=i,f-=i,t+=s&o[x],s>>>=x,f-=x,x=h,i=w,x+t>258+(31&i)+(i>>5&31)||16==a&&1>x)return l=null,u=9,n.Zt="invalid bit length repeat",r=e,c.de=s,c.pe=f,n.Qt=_,n.te+=p-n.ue,n.ue=p,c.write=z,c.ke(n,r);a=16==a?l[x-1]:0;do{l[x++]=a}while(0!=--t);h=x}}if(m[0]=-1,B=[],D=[],E=[],M=[],B[0]=9,D[0]=6,i=w,i=S.he(257+(31&i),1+(i>>5&31),l,B,D,E,M,v,n),0!=i)return i==e&&(l=null,u=9),r=i,c.de=s,c.pe=f,n.Qt=_,n.te+=p-n.ue,n.ue=p,c.write=z,c.ke(n,r);k.init(B[0],D[0],v,E[0],v,M[0]),u=6;case 6:if(c.de=s,c.pe=f,n.Qt=_,n.te+=p-n.ue,n.ue=p,c.write=z,1!=(r=k.me(c,n,r)))return c.ke(n,r);if(r=0,k.ge(n),p=n.ue,_=n.Qt,s=c.de,f=c.pe,z=c.write,C=z<c.read?c.read-z-1:c.end-z,0===g){u=0;break}u=7;case 7:if(c.write=z,r=c.ke(n,r),z=c.write,C=z<c.read?c.read-z-1:c.end-z,c.read!=c.write)return c.de=s,c.pe=f,n.Qt=_,n.te+=p-n.ue,n.ue=p,c.write=z,c.ke(n,r);u=8;case 8:return r=1,c.de=s,c.pe=f,n.Qt=_,n.te+=p-n.ue,n.ue=p,c.write=z,c.ke(n,r);case 9:return r=e,c.de=s,c.pe=f,n.Qt=_,n.te+=p-n.ue,n.ue=p,c.write=z,c.ke(n,r);default:return r=t,c.de=s,c.pe=f,n.Qt=_,n.te+=p-n.ue,n.ue=p,c.write=z,c.ke(n,r)}}},c.ge=t=>{c.reset(t,null),c.ye=null,v=null},c.Se=(t,e,n)=>{c.ye.set(t.subarray(e,e+n),0),c.read=c.write=n},c._e=()=>1==u?1:0}const m=13,k=[0,0,255,255];function g(){const n=this;function r(e){return e&&e.ze?(e.te=e.ee=0,e.Zt=null,e.ze.mode=7,e.ze.Ce.reset(e,null),0):t}n.mode=0,n.method=0,n.xe=[0],n.Ae=0,n.marker=0,n.Ie=0,n.Ve=t=>(n.Ce&&n.Ce.ge(t),n.Ce=null,0),n.Pe=(e,i)=>(e.Zt=null,n.Ce=null,8>i||i>15?(n.Ve(e),t):(n.Ie=i,e.ze.Ce=new y(e,1<<i),r(e),0)),n.Be=(n,r)=>{let i,o;if(!n||!n.ze||!n.ce)return t;const f=n.ze;for(r=4==r?s:0,i=s;;)switch(f.mode){case 0:if(0===n.Qt)return i;if(i=r,n.Qt--,n.te++,8!=(15&(f.method=n.be(n.ue++)))){f.mode=m,n.Zt="unknown compression method",f.marker=5;break}if(8+(f.method>>4)>f.Ie){f.mode=m,n.Zt="invalid win size",f.marker=5;break}f.mode=1;case 1:if(0===n.Qt)return i;if(i=r,n.Qt--,n.te++,o=255&n.be(n.ue++),((f.method<<8)+o)%31!=0){f.mode=m,n.Zt="incorrect header check",f.marker=5;break}if(0==(32&o)){f.mode=7;break}f.mode=2;case 2:if(0===n.Qt)return i;i=r,n.Qt--,n.te++,f.Ae=(255&n.be(n.ue++))<<24&4278190080,f.mode=3;case 3:if(0===n.Qt)return i;i=r,n.Qt--,n.te++,f.Ae+=(255&n.be(n.ue++))<<16&16711680,f.mode=4;case 4:if(0===n.Qt)return i;i=r,n.Qt--,n.te++,f.Ae+=(255&n.be(n.ue++))<<8&65280,f.mode=5;case 5:return 0===n.Qt?i:(i=r,n.Qt--,n.te++,f.Ae+=255&n.be(n.ue++),f.mode=6,2);case 6:return f.mode=m,n.Zt="need dictionary",f.marker=0,t;case 7:if(i=f.Ce.me(n,i),i==e){f.mode=m,f.marker=0;break}if(0==i&&(i=r),1!=i)return i;i=r,f.Ce.reset(n,f.xe),f.mode=12;case 12:return n.Qt=0,1;case m:return e;default:return t}},n.De=(e,n,r)=>{let i=0,s=r;if(!e||!e.ze||6!=e.ze.mode)return t;const o=e.ze;return s<1<<o.Ie||(s=(1<<o.Ie)-1,i=r-s),o.Ce.Se(n,i,s),o.mode=7,0},n.Ee=n=>{let i,o,f,c,l;if(!n||!n.ze)return t;const u=n.ze;if(u.mode!=m&&(u.mode=m,u.marker=0),0===(i=n.Qt))return s;for(o=n.ue,f=u.marker;0!==i&&4>f;)n.be(o)==k[f]?f++:f=0!==n.be(o)?0:4-f,o++,i--;return n.te+=o-n.ue,n.ue=o,n.Qt=i,u.marker=f,4!=f?e:(c=n.te,l=n.ee,r(n),n.te=c,n.ee=l,u.mode=7,0)},n.Me=e=>e&&e.ze&&e.ze.Ce?e.ze.Ce._e():t}function v(){}return v.prototype={Pe:function(t){const e=this;return e.ze=new g,t||(t=15),e.ze.Pe(e,t)},Be:function(e){const n=this;return n.ze?n.ze.Be(n,e):t},Ve:function(){const e=this;if(!e.ze)return t;const n=e.ze.Ve(e);return e.ze=null,n},Ee:function(){const e=this;return e.ze?e.ze.Ee(e):t},De:function(e,n){const r=this;return r.ze?r.ze.De(r,e,n):t},be:function(t){return this.ce[t]},Xt:function(t,e){return this.ce.subarray(t,t+e)}},function(t){const e=new v,o=t&&t.it?n.floor(2*t.it):131072,f=new i(o);let c=!1;e.Pe(),e.fe=f,this.append=(t,n)=>{const l=[];let u,a,w=0,h=0,d=0;if(0!==t.length){e.ue=0,e.ce=t,e.Qt=t.length;do{if(e.ae=0,e.le=o,0!==e.Qt||c||(e.ue=0,c=!0),u=e.Be(0),c&&u===s){if(0!==e.Qt)throw new r("inflating: bad input")}else if(0!==u&&1!==u)throw new r("inflating: "+e.Zt);if((c||1===u)&&e.Qt===t.length)throw new r("inflating: bad input");e.ae&&(e.ae===o?l.push(new i(f)):l.push(f.slice(0,e.ae))),d+=e.ae,n&&e.ue>0&&e.ue!=w&&(n(e.ue),w=e.ue)}while(e.Qt>0||0===e.le);return l.length>1?(a=new i(d),l.forEach((t=>{a.set(t,h),h+=t.length}))):a=l[0]||new i(0),a}},this.flush=()=>{e.Ve()}}})();self.initCodec=()=>{self.Deflate=mt,self.Inflate=kt};\n'],{type:"text/javascript"}));e({workerScripts:{inflate:[t],deflate:[t]}});}};
|
|
98
106
|
|
|
99
107
|
/*
|
|
100
108
|
Copyright (c) 2022 Gildas Lormeau. All rights reserved.
|
|
@@ -295,15 +303,14 @@
|
|
|
295
303
|
*/
|
|
296
304
|
|
|
297
305
|
class Crc32Stream extends TransformStream {
|
|
306
|
+
|
|
298
307
|
constructor() {
|
|
299
308
|
super({
|
|
300
309
|
start() {
|
|
301
310
|
this.crc32 = new Crc32();
|
|
302
311
|
},
|
|
303
312
|
transform(chunk) {
|
|
304
|
-
|
|
305
|
-
this.crc32.append(chunk);
|
|
306
|
-
}
|
|
313
|
+
this.crc32.append(chunk);
|
|
307
314
|
},
|
|
308
315
|
flush(controller) {
|
|
309
316
|
const value = new Uint8Array(4);
|
|
@@ -1219,14 +1226,19 @@
|
|
|
1219
1226
|
const KEY_LENGTH = [16, 24, 32];
|
|
1220
1227
|
const SIGNATURE_LENGTH = 10;
|
|
1221
1228
|
const COUNTER_DEFAULT_VALUE = [0, 0, 0, 0];
|
|
1222
|
-
const
|
|
1223
|
-
const
|
|
1229
|
+
const UNDEFINED_TYPE$1 = "undefined";
|
|
1230
|
+
const FUNCTION_TYPE = "function";
|
|
1231
|
+
const CRYPTO_API_SUPPORTED = typeof crypto != UNDEFINED_TYPE$1;
|
|
1232
|
+
const SUBTLE_API_SUPPORTED = CRYPTO_API_SUPPORTED && typeof crypto.subtle != UNDEFINED_TYPE$1;
|
|
1233
|
+
const GET_RANDOM_VALUES_SUPPORTED = CRYPTO_API_SUPPORTED && typeof crypto.getRandomValues == FUNCTION_TYPE;
|
|
1234
|
+
const IMPORT_KEY_SUPPORTED = CRYPTO_API_SUPPORTED && SUBTLE_API_SUPPORTED && typeof crypto.subtle.importKey == FUNCTION_TYPE;
|
|
1235
|
+
const DERIVE_BITS_SUPPORTED = CRYPTO_API_SUPPORTED && SUBTLE_API_SUPPORTED && typeof crypto.subtle.deriveBits == FUNCTION_TYPE;
|
|
1224
1236
|
const codecBytes = codec.bytes;
|
|
1225
1237
|
const Aes = cipher.aes;
|
|
1226
1238
|
const CtrGladman = mode.ctrGladman;
|
|
1227
1239
|
const HmacSha1 = misc.hmacSha1;
|
|
1228
1240
|
|
|
1229
|
-
class
|
|
1241
|
+
class AESDecryptionStream extends TransformStream {
|
|
1230
1242
|
|
|
1231
1243
|
constructor(password, signed, strength) {
|
|
1232
1244
|
let stream;
|
|
@@ -1241,23 +1253,21 @@
|
|
|
1241
1253
|
});
|
|
1242
1254
|
},
|
|
1243
1255
|
async transform(chunk, controller) {
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
await aesCrypto.ready;
|
|
1257
|
-
}
|
|
1258
|
-
const output = new Uint8Array(chunk.length - SIGNATURE_LENGTH - ((chunk.length - SIGNATURE_LENGTH) % BLOCK_LENGTH));
|
|
1259
|
-
controller.enqueue(append(aesCrypto, chunk, output, 0, SIGNATURE_LENGTH, true));
|
|
1256
|
+
const aesCrypto = this;
|
|
1257
|
+
if (aesCrypto.password) {
|
|
1258
|
+
const password = aesCrypto.password;
|
|
1259
|
+
aesCrypto.password = null;
|
|
1260
|
+
const preamble = subarray(chunk, 0, SALT_LENGTH[aesCrypto.strength] + 2);
|
|
1261
|
+
await createDecryptionKeys(aesCrypto, preamble, password);
|
|
1262
|
+
aesCrypto.ctr = new CtrGladman(new Aes(aesCrypto.keys.key), Array.from(COUNTER_DEFAULT_VALUE));
|
|
1263
|
+
aesCrypto.hmac = new HmacSha1(aesCrypto.keys.authentication);
|
|
1264
|
+
chunk = subarray(chunk, SALT_LENGTH[aesCrypto.strength] + 2);
|
|
1265
|
+
aesCrypto.resolveReady();
|
|
1266
|
+
} else {
|
|
1267
|
+
await aesCrypto.ready;
|
|
1260
1268
|
}
|
|
1269
|
+
const output = new Uint8Array(chunk.length - SIGNATURE_LENGTH - ((chunk.length - SIGNATURE_LENGTH) % BLOCK_LENGTH));
|
|
1270
|
+
controller.enqueue(append(aesCrypto, chunk, output, 0, SIGNATURE_LENGTH, true));
|
|
1261
1271
|
},
|
|
1262
1272
|
async flush(controller) {
|
|
1263
1273
|
const aesCrypto = this;
|
|
@@ -1267,14 +1277,14 @@
|
|
|
1267
1277
|
const originalSignature = subarray(pending, pending.length - SIGNATURE_LENGTH);
|
|
1268
1278
|
let decryptedChunkArray = new Uint8Array(0);
|
|
1269
1279
|
if (chunkToDecrypt.length) {
|
|
1270
|
-
const encryptedChunk =
|
|
1280
|
+
const encryptedChunk = toBits(codecBytes, chunkToDecrypt);
|
|
1271
1281
|
aesCrypto.hmac.update(encryptedChunk);
|
|
1272
|
-
const decryptedChunk = aesCrypto.
|
|
1273
|
-
decryptedChunkArray =
|
|
1282
|
+
const decryptedChunk = aesCrypto.ctr.update(encryptedChunk);
|
|
1283
|
+
decryptedChunkArray = fromBits(codecBytes, decryptedChunk);
|
|
1274
1284
|
}
|
|
1275
1285
|
stream.valid = true;
|
|
1276
1286
|
if (aesCrypto.signed) {
|
|
1277
|
-
const signature = subarray(
|
|
1287
|
+
const signature = subarray(fromBits(codecBytes, aesCrypto.hmac.digest()), 0, SIGNATURE_LENGTH);
|
|
1278
1288
|
for (let indexSignature = 0; indexSignature < SIGNATURE_LENGTH; indexSignature++) {
|
|
1279
1289
|
if (signature[indexSignature] != originalSignature[indexSignature]) {
|
|
1280
1290
|
stream.valid = false;
|
|
@@ -1288,7 +1298,7 @@
|
|
|
1288
1298
|
}
|
|
1289
1299
|
}
|
|
1290
1300
|
|
|
1291
|
-
class
|
|
1301
|
+
class AESEncryptionStream extends TransformStream {
|
|
1292
1302
|
|
|
1293
1303
|
constructor(password, strength) {
|
|
1294
1304
|
let stream;
|
|
@@ -1302,34 +1312,32 @@
|
|
|
1302
1312
|
});
|
|
1303
1313
|
},
|
|
1304
1314
|
async transform(chunk, controller) {
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
await aesCrypto.ready;
|
|
1317
|
-
}
|
|
1318
|
-
const output = new Uint8Array(preamble.length + chunk.length - (chunk.length % BLOCK_LENGTH));
|
|
1319
|
-
output.set(preamble, 0);
|
|
1320
|
-
controller.enqueue(append(aesCrypto, chunk, output, preamble.length, 0));
|
|
1315
|
+
const aesCrypto = this;
|
|
1316
|
+
let preamble = new Uint8Array(0);
|
|
1317
|
+
if (aesCrypto.password) {
|
|
1318
|
+
const password = aesCrypto.password;
|
|
1319
|
+
aesCrypto.password = null;
|
|
1320
|
+
preamble = await createEncryptionKeys(aesCrypto, password);
|
|
1321
|
+
aesCrypto.ctr = new CtrGladman(new Aes(aesCrypto.keys.key), Array.from(COUNTER_DEFAULT_VALUE));
|
|
1322
|
+
aesCrypto.hmac = new HmacSha1(aesCrypto.keys.authentication);
|
|
1323
|
+
aesCrypto.resolveReady();
|
|
1324
|
+
} else {
|
|
1325
|
+
await aesCrypto.ready;
|
|
1321
1326
|
}
|
|
1327
|
+
const output = new Uint8Array(preamble.length + chunk.length - (chunk.length % BLOCK_LENGTH));
|
|
1328
|
+
output.set(preamble, 0);
|
|
1329
|
+
controller.enqueue(append(aesCrypto, chunk, output, preamble.length, 0));
|
|
1322
1330
|
},
|
|
1323
1331
|
async flush(controller) {
|
|
1324
1332
|
const aesCrypto = this;
|
|
1325
1333
|
await aesCrypto.ready;
|
|
1326
1334
|
let encryptedChunkArray = new Uint8Array(0);
|
|
1327
1335
|
if (aesCrypto.pending.length) {
|
|
1328
|
-
const encryptedChunk = aesCrypto.
|
|
1336
|
+
const encryptedChunk = aesCrypto.ctr.update(toBits(codecBytes, aesCrypto.pending));
|
|
1329
1337
|
aesCrypto.hmac.update(encryptedChunk);
|
|
1330
|
-
encryptedChunkArray =
|
|
1338
|
+
encryptedChunkArray = fromBits(codecBytes, encryptedChunk);
|
|
1331
1339
|
}
|
|
1332
|
-
stream.signature =
|
|
1340
|
+
stream.signature = fromBits(codecBytes, aesCrypto.hmac.digest()).slice(0, SIGNATURE_LENGTH);
|
|
1333
1341
|
controller.enqueue(concat(encryptedChunkArray, stream.signature));
|
|
1334
1342
|
}
|
|
1335
1343
|
});
|
|
@@ -1345,15 +1353,15 @@
|
|
|
1345
1353
|
}
|
|
1346
1354
|
let offset;
|
|
1347
1355
|
for (offset = 0; offset <= inputLength - BLOCK_LENGTH; offset += BLOCK_LENGTH) {
|
|
1348
|
-
const inputChunk =
|
|
1356
|
+
const inputChunk = toBits(codecBytes, subarray(input, offset, offset + BLOCK_LENGTH));
|
|
1349
1357
|
if (verifySignature) {
|
|
1350
1358
|
aesCrypto.hmac.update(inputChunk);
|
|
1351
1359
|
}
|
|
1352
|
-
const outputChunk = aesCrypto.
|
|
1360
|
+
const outputChunk = aesCrypto.ctr.update(inputChunk);
|
|
1353
1361
|
if (!verifySignature) {
|
|
1354
1362
|
aesCrypto.hmac.update(outputChunk);
|
|
1355
1363
|
}
|
|
1356
|
-
output.set(
|
|
1364
|
+
output.set(fromBits(codecBytes, outputChunk), offset + paddingStart);
|
|
1357
1365
|
}
|
|
1358
1366
|
aesCrypto.pending = subarray(input, offset);
|
|
1359
1367
|
return output;
|
|
@@ -1380,14 +1388,14 @@
|
|
|
1380
1388
|
const derivedBits = await deriveBits(Object.assign({ salt }, DERIVED_BITS_ALGORITHM), basekey, 8 * ((KEY_LENGTH[target.strength] * 2) + 2));
|
|
1381
1389
|
const compositeKey = new Uint8Array(derivedBits);
|
|
1382
1390
|
target.keys = {
|
|
1383
|
-
key:
|
|
1384
|
-
authentication:
|
|
1391
|
+
key: toBits(codecBytes, subarray(compositeKey, 0, KEY_LENGTH[target.strength])),
|
|
1392
|
+
authentication: toBits(codecBytes, subarray(compositeKey, KEY_LENGTH[target.strength], KEY_LENGTH[target.strength] * 2)),
|
|
1385
1393
|
passwordVerification: subarray(compositeKey, KEY_LENGTH[target.strength] * 2)
|
|
1386
1394
|
};
|
|
1387
1395
|
}
|
|
1388
1396
|
|
|
1389
1397
|
function getRandomValues(array) {
|
|
1390
|
-
if (
|
|
1398
|
+
if (GET_RANDOM_VALUES_SUPPORTED) {
|
|
1391
1399
|
return crypto.getRandomValues(array);
|
|
1392
1400
|
} else {
|
|
1393
1401
|
return random.getRandomValues(array);
|
|
@@ -1395,7 +1403,7 @@
|
|
|
1395
1403
|
}
|
|
1396
1404
|
|
|
1397
1405
|
function importKey(format, password, algorithm, extractable, keyUsages) {
|
|
1398
|
-
if (
|
|
1406
|
+
if (IMPORT_KEY_SUPPORTED) {
|
|
1399
1407
|
return crypto.subtle.importKey(format, password, algorithm, extractable, keyUsages);
|
|
1400
1408
|
} else {
|
|
1401
1409
|
return misc.importKey(password);
|
|
@@ -1403,7 +1411,7 @@
|
|
|
1403
1411
|
}
|
|
1404
1412
|
|
|
1405
1413
|
async function deriveBits(algorithm, baseKey, length) {
|
|
1406
|
-
if (
|
|
1414
|
+
if (DERIVE_BITS_SUPPORTED) {
|
|
1407
1415
|
return await crypto.subtle.deriveBits(algorithm, baseKey, length);
|
|
1408
1416
|
} else {
|
|
1409
1417
|
return misc.pbkdf2(baseKey, algorithm.salt, DERIVED_BITS_ALGORITHM.iterations, length);
|
|
@@ -1433,6 +1441,13 @@
|
|
|
1433
1441
|
return array.subarray(begin, end);
|
|
1434
1442
|
}
|
|
1435
1443
|
|
|
1444
|
+
function fromBits(codecBytes, chunk) {
|
|
1445
|
+
return codecBytes.fromBits(chunk);
|
|
1446
|
+
}
|
|
1447
|
+
function toBits(codecBytes, chunk) {
|
|
1448
|
+
return codecBytes.toBits(chunk);
|
|
1449
|
+
}
|
|
1450
|
+
|
|
1436
1451
|
/*
|
|
1437
1452
|
Copyright (c) 2022 Gildas Lormeau. All rights reserved.
|
|
1438
1453
|
|
|
@@ -1463,7 +1478,7 @@
|
|
|
1463
1478
|
|
|
1464
1479
|
const HEADER_LENGTH = 12;
|
|
1465
1480
|
|
|
1466
|
-
class
|
|
1481
|
+
class ZipCryptoDecryptionStream extends TransformStream {
|
|
1467
1482
|
|
|
1468
1483
|
constructor(password, passwordVerification) {
|
|
1469
1484
|
let stream;
|
|
@@ -1476,18 +1491,16 @@
|
|
|
1476
1491
|
createKeys(this, password);
|
|
1477
1492
|
},
|
|
1478
1493
|
transform(chunk, controller) {
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
throw new Error(ERR_INVALID_PASSWORD);
|
|
1486
|
-
}
|
|
1487
|
-
chunk = chunk.subarray(HEADER_LENGTH);
|
|
1494
|
+
const zipCrypto = this;
|
|
1495
|
+
if (zipCrypto.password) {
|
|
1496
|
+
const decryptedHeader = decrypt(zipCrypto, chunk.subarray(0, HEADER_LENGTH));
|
|
1497
|
+
zipCrypto.password = null;
|
|
1498
|
+
if (decryptedHeader[HEADER_LENGTH - 1] != zipCrypto.passwordVerification) {
|
|
1499
|
+
throw new Error(ERR_INVALID_PASSWORD);
|
|
1488
1500
|
}
|
|
1489
|
-
|
|
1501
|
+
chunk = chunk.subarray(HEADER_LENGTH);
|
|
1490
1502
|
}
|
|
1503
|
+
controller.enqueue(decrypt(zipCrypto, chunk));
|
|
1491
1504
|
},
|
|
1492
1505
|
flush() {
|
|
1493
1506
|
stream.valid = true;
|
|
@@ -1497,7 +1510,7 @@
|
|
|
1497
1510
|
}
|
|
1498
1511
|
}
|
|
1499
1512
|
|
|
1500
|
-
class
|
|
1513
|
+
class ZipCryptoEncryptionStream extends TransformStream {
|
|
1501
1514
|
|
|
1502
1515
|
constructor(password, passwordVerification) {
|
|
1503
1516
|
super({
|
|
@@ -1509,24 +1522,22 @@
|
|
|
1509
1522
|
createKeys(this, password);
|
|
1510
1523
|
},
|
|
1511
1524
|
transform(chunk, controller) {
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
offset = 0;
|
|
1526
|
-
}
|
|
1527
|
-
output.set(encrypt(zipCrypto, chunk), offset);
|
|
1528
|
-
controller.enqueue(output);
|
|
1525
|
+
const zipCrypto = this;
|
|
1526
|
+
let output;
|
|
1527
|
+
let offset;
|
|
1528
|
+
if (zipCrypto.password) {
|
|
1529
|
+
zipCrypto.password = null;
|
|
1530
|
+
const header = crypto.getRandomValues(new Uint8Array(HEADER_LENGTH));
|
|
1531
|
+
header[HEADER_LENGTH - 1] = zipCrypto.passwordVerification;
|
|
1532
|
+
output = new Uint8Array(chunk.length + header.length);
|
|
1533
|
+
output.set(encrypt(zipCrypto, header), 0);
|
|
1534
|
+
offset = HEADER_LENGTH;
|
|
1535
|
+
} else {
|
|
1536
|
+
output = new Uint8Array(chunk.length);
|
|
1537
|
+
offset = 0;
|
|
1529
1538
|
}
|
|
1539
|
+
output.set(encrypt(zipCrypto, chunk), offset);
|
|
1540
|
+
controller.enqueue(output);
|
|
1530
1541
|
},
|
|
1531
1542
|
flush() {
|
|
1532
1543
|
}
|
|
@@ -1621,19 +1632,19 @@
|
|
|
1621
1632
|
/* global TransformStream */
|
|
1622
1633
|
|
|
1623
1634
|
class CodecStream extends TransformStream {
|
|
1635
|
+
|
|
1624
1636
|
constructor(Codec, options) {
|
|
1637
|
+
let codec;
|
|
1625
1638
|
super({
|
|
1626
1639
|
start() {
|
|
1627
|
-
|
|
1640
|
+
codec = new Codec(options);
|
|
1628
1641
|
},
|
|
1629
1642
|
transform(chunk, controller) {
|
|
1630
|
-
chunk =
|
|
1631
|
-
|
|
1632
|
-
controller.enqueue(chunk);
|
|
1633
|
-
}
|
|
1643
|
+
chunk = codec.append(chunk);
|
|
1644
|
+
controller.enqueue(chunk);
|
|
1634
1645
|
},
|
|
1635
1646
|
flush(controller) {
|
|
1636
|
-
const chunk =
|
|
1647
|
+
const chunk = codec.flush();
|
|
1637
1648
|
if (chunk) {
|
|
1638
1649
|
controller.enqueue(chunk);
|
|
1639
1650
|
}
|
|
@@ -1670,199 +1681,205 @@
|
|
|
1670
1681
|
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
1671
1682
|
*/
|
|
1672
1683
|
|
|
1673
|
-
const CODEC_DEFLATE = "deflate";
|
|
1674
|
-
const CODEC_INFLATE = "inflate";
|
|
1675
1684
|
const ERR_INVALID_SIGNATURE = "Invalid signature";
|
|
1676
|
-
const
|
|
1677
|
-
const
|
|
1678
|
-
const
|
|
1679
|
-
const
|
|
1680
|
-
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
signed
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
|
|
1697
|
-
|
|
1698
|
-
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
controller.enqueue(value);
|
|
1707
|
-
if (done || codec.aborted) {
|
|
1708
|
-
controller.close();
|
|
1709
|
-
}
|
|
1710
|
-
}
|
|
1711
|
-
})
|
|
1712
|
-
});
|
|
1713
|
-
if (encrypted) {
|
|
1714
|
-
if (zipCrypto) {
|
|
1715
|
-
codec.stream = codec.stream.pipeThrough(new ZipCryptoDecryptStream(password, passwordVerification));
|
|
1716
|
-
} else {
|
|
1717
|
-
codec.decryptStream = new AESDecryptStream(password, signed, encryptionStrength);
|
|
1718
|
-
codec.stream = codec.stream.pipeThrough(codec.decryptStream);
|
|
1685
|
+
const COMPRESSION_FORMAT = "deflate-raw";
|
|
1686
|
+
const UNDEFINED_TYPE = "undefined";
|
|
1687
|
+
const COMPRESSION_STREAM_API_SUPPORTED = typeof CompressionStream == UNDEFINED_TYPE;
|
|
1688
|
+
const DECOMPRESSION_STREAM_API_SUPPORTED = typeof DecompressionStream == UNDEFINED_TYPE;
|
|
1689
|
+
let INFLATE_RAW_SUPPORTED = true;
|
|
1690
|
+
let DEFLATE_RAW_SUPPORTED = true;
|
|
1691
|
+
|
|
1692
|
+
class DeflateStream extends TransformStream {
|
|
1693
|
+
|
|
1694
|
+
constructor(codecConstructor, options, { chunkSize }, ...strategies) {
|
|
1695
|
+
super({}, ...strategies);
|
|
1696
|
+
const { compressed, useCompressionStream, password, passwordVerification, encryptionStrength, zipCrypto, signed } = options;
|
|
1697
|
+
const stream = this;
|
|
1698
|
+
let crc32Stream, encryptionStream;
|
|
1699
|
+
let readable = filterEmptyChunks(super.readable);
|
|
1700
|
+
const encrypted = Boolean(password);
|
|
1701
|
+
if ((!encrypted || zipCrypto) && signed) {
|
|
1702
|
+
[readable, crc32Stream] = readable.tee();
|
|
1703
|
+
crc32Stream = crc32Stream.pipeThrough(new Crc32Stream());
|
|
1704
|
+
}
|
|
1705
|
+
if (compressed) {
|
|
1706
|
+
if ((useCompressionStream !== undefined && !useCompressionStream) || (COMPRESSION_STREAM_API_SUPPORTED && !DEFLATE_RAW_SUPPORTED)) {
|
|
1707
|
+
readable = pipeCodecStream(codecConstructor, readable, chunkSize);
|
|
1708
|
+
} else {
|
|
1709
|
+
try {
|
|
1710
|
+
const compressionStream = new CompressionStream(COMPRESSION_FORMAT);
|
|
1711
|
+
readable = readable.pipeThrough(compressionStream);
|
|
1712
|
+
} catch (_error) {
|
|
1713
|
+
DEFLATE_RAW_SUPPORTED = false;
|
|
1714
|
+
readable = pipeCodecStream(codecConstructor, readable, chunkSize);
|
|
1719
1715
|
}
|
|
1720
1716
|
}
|
|
1721
|
-
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1726
|
-
|
|
1727
|
-
|
|
1728
|
-
|
|
1729
|
-
|
|
1730
|
-
|
|
1717
|
+
}
|
|
1718
|
+
if (encrypted) {
|
|
1719
|
+
if (zipCrypto) {
|
|
1720
|
+
readable = readable.pipeThrough(new ZipCryptoEncryptionStream(password, passwordVerification));
|
|
1721
|
+
} else {
|
|
1722
|
+
encryptionStream = new AESEncryptionStream(password, encryptionStrength);
|
|
1723
|
+
readable = readable.pipeThrough(encryptionStream);
|
|
1724
|
+
}
|
|
1725
|
+
}
|
|
1726
|
+
setReadable(stream, readable, async () => {
|
|
1727
|
+
let signature;
|
|
1728
|
+
if (encrypted && !zipCrypto) {
|
|
1729
|
+
signature = encryptionStream.signature;
|
|
1731
1730
|
}
|
|
1732
1731
|
if ((!encrypted || zipCrypto) && signed) {
|
|
1733
|
-
|
|
1734
|
-
|
|
1735
|
-
codec.crc32Stream = tee[1].pipeThrough(new Crc32Stream());
|
|
1732
|
+
signature = await crc32Stream.getReader().read();
|
|
1733
|
+
signature = new DataView(signature.value.buffer).getUint32(0);
|
|
1736
1734
|
}
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
};
|
|
1740
|
-
codec.abort = () => codec.aborted = true;
|
|
1741
|
-
|
|
1742
|
-
function pipeCodecStream() {
|
|
1743
|
-
codec.stream = codec.stream.pipeThrough(new CodecStream(codecConstructor, { chunkSize }));
|
|
1744
|
-
}
|
|
1735
|
+
stream.signature = signature;
|
|
1736
|
+
});
|
|
1745
1737
|
}
|
|
1738
|
+
}
|
|
1746
1739
|
|
|
1747
|
-
|
|
1748
|
-
|
|
1749
|
-
|
|
1750
|
-
|
|
1751
|
-
|
|
1740
|
+
class InflateStream extends TransformStream {
|
|
1741
|
+
|
|
1742
|
+
constructor(codecConstructor, options, { chunkSize }, ...strategies) {
|
|
1743
|
+
super({}, ...strategies);
|
|
1744
|
+
const { zipCrypto, password, passwordVerification, signed, encryptionStrength, compressed, useCompressionStream } = options;
|
|
1745
|
+
const stream = this;
|
|
1746
|
+
let crc32Stream, decryptionStream;
|
|
1747
|
+
let readable = filterEmptyChunks(super.readable);
|
|
1748
|
+
const encrypted = Boolean(password);
|
|
1749
|
+
if (encrypted) {
|
|
1750
|
+
if (zipCrypto) {
|
|
1751
|
+
readable = readable.pipeThrough(new ZipCryptoDecryptionStream(password, passwordVerification));
|
|
1752
|
+
} else {
|
|
1753
|
+
decryptionStream = new AESDecryptionStream(password, signed, encryptionStrength);
|
|
1754
|
+
readable = readable.pipeThrough(decryptionStream);
|
|
1755
|
+
}
|
|
1752
1756
|
}
|
|
1753
|
-
if (
|
|
1754
|
-
|
|
1755
|
-
|
|
1756
|
-
|
|
1757
|
+
if (compressed) {
|
|
1758
|
+
if ((useCompressionStream !== undefined && !useCompressionStream) || (DECOMPRESSION_STREAM_API_SUPPORTED && !INFLATE_RAW_SUPPORTED)) {
|
|
1759
|
+
readable = pipeCodecStream(codecConstructor, readable, chunkSize);
|
|
1760
|
+
} else {
|
|
1761
|
+
try {
|
|
1762
|
+
readable = readable.pipeThrough(new DecompressionStream(COMPRESSION_FORMAT));
|
|
1763
|
+
} catch (_error) {
|
|
1764
|
+
INFLATE_RAW_SUPPORTED = false;
|
|
1765
|
+
readable = pipeCodecStream(codecConstructor, readable, chunkSize);
|
|
1766
|
+
}
|
|
1767
|
+
}
|
|
1768
|
+
}
|
|
1769
|
+
if ((!encrypted || zipCrypto) && signed) {
|
|
1770
|
+
[readable, crc32Stream] = readable.tee();
|
|
1771
|
+
crc32Stream = crc32Stream.pipeThrough(new Crc32Stream());
|
|
1772
|
+
}
|
|
1773
|
+
setReadable(stream, readable, async () => {
|
|
1774
|
+
if (encrypted && !zipCrypto) {
|
|
1775
|
+
if (!decryptionStream.valid) {
|
|
1757
1776
|
throw new Error(ERR_INVALID_SIGNATURE);
|
|
1758
1777
|
}
|
|
1759
1778
|
}
|
|
1760
|
-
if ((!
|
|
1761
|
-
signature = await
|
|
1779
|
+
if ((!encrypted || zipCrypto) && signed) {
|
|
1780
|
+
const signature = await crc32Stream.getReader().read();
|
|
1762
1781
|
const dataViewSignature = new DataView(signature.value.buffer);
|
|
1763
|
-
if (
|
|
1782
|
+
if (signature != dataViewSignature.getUint32(0, false)) {
|
|
1764
1783
|
throw new Error(ERR_INVALID_SIGNATURE);
|
|
1765
1784
|
}
|
|
1766
1785
|
}
|
|
1767
|
-
|
|
1768
|
-
} else {
|
|
1769
|
-
await codec.read();
|
|
1770
|
-
}
|
|
1786
|
+
});
|
|
1771
1787
|
}
|
|
1772
1788
|
}
|
|
1773
1789
|
|
|
1774
|
-
|
|
1790
|
+
function pipeCodecStream(codecConstructor, stream, chunkSize) {
|
|
1791
|
+
return stream.pipeThrough(new CodecStream(codecConstructor, { chunkSize }));
|
|
1792
|
+
}
|
|
1775
1793
|
|
|
1776
|
-
|
|
1777
|
-
|
|
1778
|
-
|
|
1779
|
-
|
|
1780
|
-
|
|
1781
|
-
zipCrypto,
|
|
1782
|
-
password,
|
|
1783
|
-
passwordVerification,
|
|
1784
|
-
encryptionStrength,
|
|
1785
|
-
useCompressionStream
|
|
1786
|
-
}, { chunkSize }) {
|
|
1787
|
-
const codec = this;
|
|
1788
|
-
codec.start = async () => {
|
|
1789
|
-
Object.assign(this, {
|
|
1790
|
-
encrypted,
|
|
1791
|
-
signed,
|
|
1792
|
-
compressed,
|
|
1793
|
-
zipCrypto,
|
|
1794
|
-
stream: new ReadableStream({
|
|
1795
|
-
async pull(controller) {
|
|
1796
|
-
const { value, done } = await codec.pull();
|
|
1797
|
-
controller.enqueue(value);
|
|
1798
|
-
if (done || codec.aborted) {
|
|
1799
|
-
controller.close();
|
|
1800
|
-
}
|
|
1801
|
-
}
|
|
1802
|
-
})
|
|
1803
|
-
});
|
|
1804
|
-
if ((!encrypted || zipCrypto) && signed) {
|
|
1805
|
-
const tee = codec.stream.tee();
|
|
1806
|
-
codec.stream = tee[0];
|
|
1807
|
-
codec.crc32Stream = tee[1].pipeThrough(new Crc32Stream({ chunkSize }));
|
|
1808
|
-
}
|
|
1809
|
-
if (compressed) {
|
|
1810
|
-
if ((useCompressionStream !== undefined && !useCompressionStream) || typeof CompressionStream == "undefined") {
|
|
1811
|
-
pipeCodecStream();
|
|
1812
|
-
} else {
|
|
1813
|
-
try {
|
|
1814
|
-
codec.stream = codec.stream.pipeThrough(new CompressionStream("deflate-raw"));
|
|
1815
|
-
} catch (_error) {
|
|
1816
|
-
pipeCodecStream();
|
|
1817
|
-
}
|
|
1818
|
-
}
|
|
1819
|
-
}
|
|
1820
|
-
if (encrypted) {
|
|
1821
|
-
if (zipCrypto) {
|
|
1822
|
-
codec.stream = codec.stream.pipeThrough(new ZipCryptoEncryptStream(password, passwordVerification));
|
|
1823
|
-
} else {
|
|
1824
|
-
codec.encryptStream = new AESEncryptStream(password, encryptionStrength);
|
|
1825
|
-
codec.stream = codec.stream.pipeThrough(codec.encryptStream);
|
|
1826
|
-
}
|
|
1794
|
+
function filterEmptyChunks(readable) {
|
|
1795
|
+
return readable.pipeThrough(new TransformStream({
|
|
1796
|
+
transform(chunk, controller) {
|
|
1797
|
+
if (chunk && chunk.length) {
|
|
1798
|
+
controller.enqueue(chunk);
|
|
1827
1799
|
}
|
|
1828
|
-
codec.reader = codec.stream.getReader();
|
|
1829
|
-
await codec.read();
|
|
1830
|
-
};
|
|
1831
|
-
codec.abort = () => codec.aborted = true;
|
|
1832
|
-
|
|
1833
|
-
function pipeCodecStream() {
|
|
1834
|
-
codec.stream = codec.stream.pipeThrough(new CodecStream(codecConstructor, { chunkSize, level }));
|
|
1835
1800
|
}
|
|
1836
|
-
}
|
|
1801
|
+
}));
|
|
1802
|
+
}
|
|
1837
1803
|
|
|
1838
|
-
|
|
1839
|
-
|
|
1840
|
-
|
|
1841
|
-
|
|
1842
|
-
|
|
1843
|
-
|
|
1844
|
-
|
|
1845
|
-
let signature;
|
|
1846
|
-
if (codec.encrypted && !codec.zipCrypto) {
|
|
1847
|
-
signature = codec.encryptStream.signature;
|
|
1848
|
-
}
|
|
1849
|
-
if ((!codec.encrypted || codec.zipCrypto) && codec.signed) {
|
|
1850
|
-
signature = await codec.crc32Stream.getReader().read();
|
|
1851
|
-
signature = new DataView(signature.value.buffer).getUint32(0);
|
|
1804
|
+
function setReadable(stream, readable, flush) {
|
|
1805
|
+
stream.length = 0;
|
|
1806
|
+
readable = readable.pipeThrough(new TransformStream({
|
|
1807
|
+
transform(chunk, controller) {
|
|
1808
|
+
if (chunk && chunk.length) {
|
|
1809
|
+
stream.length += chunk.length;
|
|
1810
|
+
controller.enqueue(chunk);
|
|
1852
1811
|
}
|
|
1853
|
-
|
|
1854
|
-
|
|
1855
|
-
|
|
1812
|
+
}, flush
|
|
1813
|
+
}));
|
|
1814
|
+
Object.defineProperty(stream, "readable", {
|
|
1815
|
+
get() {
|
|
1816
|
+
return readable;
|
|
1856
1817
|
}
|
|
1857
|
-
}
|
|
1858
|
-
|
|
1818
|
+
});
|
|
1859
1819
|
}
|
|
1860
1820
|
|
|
1861
|
-
|
|
1821
|
+
/*
|
|
1822
|
+
Copyright (c) 2022 Gildas Lormeau. All rights reserved.
|
|
1823
|
+
|
|
1824
|
+
Redistribution and use in source and binary forms, with or without
|
|
1825
|
+
modification, are permitted provided that the following conditions are met:
|
|
1826
|
+
|
|
1827
|
+
1. Redistributions of source code must retain the above copyright notice,
|
|
1828
|
+
this list of conditions and the following disclaimer.
|
|
1829
|
+
|
|
1830
|
+
2. Redistributions in binary form must reproduce the above copyright
|
|
1831
|
+
notice, this list of conditions and the following disclaimer in
|
|
1832
|
+
the documentation and/or other materials provided with the distribution.
|
|
1833
|
+
|
|
1834
|
+
3. The names of the authors may not be used to endorse or promote products
|
|
1835
|
+
derived from this software without specific prior written permission.
|
|
1836
|
+
|
|
1837
|
+
THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
|
|
1838
|
+
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
|
1839
|
+
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
|
|
1840
|
+
INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
1841
|
+
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
1842
|
+
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
|
1843
|
+
OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
1844
|
+
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
1845
|
+
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
|
1846
|
+
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
1847
|
+
*/
|
|
1848
|
+
|
|
1849
|
+
const CODEC_DEFLATE = "deflate";
|
|
1850
|
+
const CODEC_INFLATE = "inflate";
|
|
1851
|
+
const MESSAGE_EVENT_TYPE = "message";
|
|
1852
|
+
const MESSAGE_START = "start";
|
|
1853
|
+
const MESSAGE_PULL = "pull";
|
|
1854
|
+
const MESSAGE_DATA = "data";
|
|
1855
|
+
const MESSAGE_ABORT = "abort";
|
|
1856
|
+
const MESSAGE_CLOSE = "close";
|
|
1857
|
+
const ERR_ABORT = "AbortError";
|
|
1858
|
+
|
|
1859
|
+
function createCodec(codecConstructor, readable, writable, options, config) {
|
|
1860
|
+
const controller = new AbortController();
|
|
1861
|
+
const { signal } = controller;
|
|
1862
1862
|
if (options.codecType.startsWith(CODEC_DEFLATE)) {
|
|
1863
|
-
return
|
|
1863
|
+
return {
|
|
1864
|
+
run: () => run(DeflateStream),
|
|
1865
|
+
abort
|
|
1866
|
+
};
|
|
1864
1867
|
} else if (options.codecType.startsWith(CODEC_INFLATE)) {
|
|
1865
|
-
return
|
|
1868
|
+
return {
|
|
1869
|
+
run: () => run(InflateStream),
|
|
1870
|
+
abort
|
|
1871
|
+
};
|
|
1872
|
+
}
|
|
1873
|
+
|
|
1874
|
+
async function run(StreamConstructor) {
|
|
1875
|
+
const stream = new StreamConstructor(codecConstructor, options, config);
|
|
1876
|
+
await readable.pipeThrough(stream, { signal }).pipeTo(writable);
|
|
1877
|
+
const { length, signature } = stream;
|
|
1878
|
+
return { length, signature };
|
|
1879
|
+
}
|
|
1880
|
+
|
|
1881
|
+
function abort() {
|
|
1882
|
+
controller.abort();
|
|
1866
1883
|
}
|
|
1867
1884
|
}
|
|
1868
1885
|
|
|
@@ -1896,10 +1913,12 @@
|
|
|
1896
1913
|
|
|
1897
1914
|
let classicWorkersSupported = true;
|
|
1898
1915
|
|
|
1899
|
-
function getWorker(workerData, codecConstructor, options, config, onTaskFinished, webWorker, scripts) {
|
|
1916
|
+
function getWorker(workerData, codecConstructor, readable, writable, options, config, streamOptions, onTaskFinished, webWorker, scripts) {
|
|
1900
1917
|
Object.assign(workerData, {
|
|
1901
1918
|
busy: true,
|
|
1902
1919
|
codecConstructor,
|
|
1920
|
+
readable,
|
|
1921
|
+
writable,
|
|
1903
1922
|
options: Object.assign({}, options),
|
|
1904
1923
|
scripts,
|
|
1905
1924
|
terminate() {
|
|
@@ -1913,27 +1932,50 @@
|
|
|
1913
1932
|
onTaskFinished(workerData);
|
|
1914
1933
|
}
|
|
1915
1934
|
});
|
|
1935
|
+
const { signal, onprogress, size } = streamOptions;
|
|
1936
|
+
if (signal || onprogress) {
|
|
1937
|
+
let chunkOffset = 0;
|
|
1938
|
+
const transformer = {};
|
|
1939
|
+
if (onprogress) {
|
|
1940
|
+
transformer.transform = (chunk, controller) => {
|
|
1941
|
+
chunkOffset += chunk.length;
|
|
1942
|
+
try {
|
|
1943
|
+
onprogress(chunkOffset, size());
|
|
1944
|
+
} catch (_error) {
|
|
1945
|
+
// ignored
|
|
1946
|
+
}
|
|
1947
|
+
controller.enqueue(chunk);
|
|
1948
|
+
};
|
|
1949
|
+
}
|
|
1950
|
+
workerData.readable = readable.pipeThrough(new TransformStream(transformer), { signal });
|
|
1951
|
+
}
|
|
1916
1952
|
return webWorker ? createWebWorkerInterface(workerData, config) : createWorkerInterface(workerData, config);
|
|
1917
1953
|
}
|
|
1918
1954
|
|
|
1919
1955
|
function createWorkerInterface(workerData, config) {
|
|
1920
|
-
const interfaceCodec = createCodec
|
|
1956
|
+
const interfaceCodec = createCodec(workerData.codecConstructor, workerData.readable, workerData.writable, workerData.options, config);
|
|
1921
1957
|
const codec = {
|
|
1922
1958
|
abort() {
|
|
1923
1959
|
interfaceCodec.abort();
|
|
1924
1960
|
workerData.onTaskFinished();
|
|
1925
1961
|
},
|
|
1926
|
-
|
|
1927
|
-
|
|
1962
|
+
run() {
|
|
1963
|
+
const result = interfaceCodec.run();
|
|
1964
|
+
workerData.onTaskFinished();
|
|
1965
|
+
return result;
|
|
1928
1966
|
}
|
|
1929
1967
|
};
|
|
1930
|
-
interfaceCodec.pull = () => codec.pull();
|
|
1931
|
-
interfaceCodec.ondata = data => ondata(workerData, codec, data);
|
|
1932
1968
|
return codec;
|
|
1933
1969
|
}
|
|
1934
1970
|
|
|
1935
1971
|
function createWebWorkerInterface(workerData, { baseURL, chunkSize }) {
|
|
1936
1972
|
const workerOptions = { type: "module" };
|
|
1973
|
+
workerData.reader = workerData.readable.getReader();
|
|
1974
|
+
workerData.writer = workerData.writable.getWriter();
|
|
1975
|
+
workerData.result = new Promise((resolve, reject) => {
|
|
1976
|
+
workerData.resolveResult = resolve;
|
|
1977
|
+
workerData.rejectResult = reject;
|
|
1978
|
+
});
|
|
1937
1979
|
if (!workerData.interface) {
|
|
1938
1980
|
if (!classicWorkersSupported) {
|
|
1939
1981
|
workerData.worker = getWorker(workerOptions);
|
|
@@ -1951,10 +1993,11 @@
|
|
|
1951
1993
|
sendMessage({ type: MESSAGE_ABORT });
|
|
1952
1994
|
workerData.onTaskFinished();
|
|
1953
1995
|
},
|
|
1954
|
-
|
|
1996
|
+
run() {
|
|
1955
1997
|
const options = workerData.options;
|
|
1956
1998
|
const scripts = workerData.scripts.slice(1);
|
|
1957
1999
|
sendMessage({ type: MESSAGE_START, scripts, options, config: { chunkSize } });
|
|
2000
|
+
return workerData.result;
|
|
1958
2001
|
}
|
|
1959
2002
|
};
|
|
1960
2003
|
}
|
|
@@ -1996,43 +2039,35 @@
|
|
|
1996
2039
|
async function onMessage(event) {
|
|
1997
2040
|
const message = event.data;
|
|
1998
2041
|
const reponseError = message.error;
|
|
1999
|
-
const codec = workerData.interface;
|
|
2000
2042
|
try {
|
|
2001
2043
|
if (reponseError) {
|
|
2002
2044
|
const error = new Error(reponseError.message);
|
|
2003
2045
|
error.stack = reponseError.stack;
|
|
2004
|
-
|
|
2046
|
+
workerData.rejectResult(error);
|
|
2005
2047
|
workerData.onTaskFinished();
|
|
2006
2048
|
} else {
|
|
2007
2049
|
if (message.type == MESSAGE_PULL) {
|
|
2008
|
-
const { value, done } = await
|
|
2050
|
+
const { value, done } = await workerData.reader.read();
|
|
2009
2051
|
sendMessage({ type: MESSAGE_DATA, data: value, done, messageId: message.messageId });
|
|
2010
2052
|
}
|
|
2011
2053
|
if (message.type == MESSAGE_DATA) {
|
|
2012
|
-
|
|
2013
|
-
|
|
2014
|
-
|
|
2015
|
-
|
|
2016
|
-
|
|
2054
|
+
let { data } = message;
|
|
2055
|
+
data = new Uint8Array(data);
|
|
2056
|
+
await workerData.writer.ready;
|
|
2057
|
+
workerData.writer.write(data);
|
|
2058
|
+
}
|
|
2059
|
+
if (message.type == MESSAGE_CLOSE) {
|
|
2060
|
+
workerData.resolveResult(message.result);
|
|
2061
|
+
workerData.onTaskFinished();
|
|
2017
2062
|
}
|
|
2018
2063
|
}
|
|
2019
2064
|
} catch (error) {
|
|
2020
|
-
|
|
2065
|
+
workerData.rejectResult(error);
|
|
2021
2066
|
workerData.onTaskFinished();
|
|
2022
2067
|
}
|
|
2023
2068
|
}
|
|
2024
2069
|
}
|
|
2025
2070
|
|
|
2026
|
-
async function ondata(workerData, codec, data) {
|
|
2027
|
-
let { value, done } = data;
|
|
2028
|
-
if (done) {
|
|
2029
|
-
await codec.ondata({ value: { data: value.data, signature: value.signature }, done });
|
|
2030
|
-
workerData.onTaskFinished();
|
|
2031
|
-
} else if (value.data) {
|
|
2032
|
-
await codec.ondata({ value: { data: value.data } });
|
|
2033
|
-
}
|
|
2034
|
-
}
|
|
2035
|
-
|
|
2036
2071
|
/*
|
|
2037
2072
|
Copyright (c) 2022 Gildas Lormeau. All rights reserved.
|
|
2038
2073
|
|
|
@@ -2066,30 +2101,42 @@
|
|
|
2066
2101
|
|
|
2067
2102
|
let indexWorker = 0;
|
|
2068
2103
|
|
|
2069
|
-
function
|
|
2104
|
+
async function runCodec(codecConstructor, readable, writable, options, config, streamOptions) {
|
|
2070
2105
|
const streamCopy = !options.compressed && !options.signed && !options.encrypted;
|
|
2071
2106
|
const webWorker = !streamCopy && (options.useWebWorkers || (options.useWebWorkers === undefined && config.useWebWorkers));
|
|
2072
2107
|
const scripts = webWorker && config.workerScripts ? config.workerScripts[options.codecType] : [];
|
|
2073
2108
|
options.useCompressionStream = options.useCompressionStream === undefined ? config.useCompressionStream : options.useCompressionStream;
|
|
2109
|
+
let codec;
|
|
2074
2110
|
if (pool.length < config.maxWorkers) {
|
|
2075
2111
|
const workerData = { indexWorker };
|
|
2076
2112
|
indexWorker++;
|
|
2077
2113
|
pool.push(workerData);
|
|
2078
|
-
|
|
2114
|
+
codec = getWorker(workerData, codecConstructor, readable, writable, options, config, streamOptions, onTaskFinished, webWorker, scripts);
|
|
2079
2115
|
} else {
|
|
2080
2116
|
const workerData = pool.find(workerData => !workerData.busy);
|
|
2081
2117
|
if (workerData) {
|
|
2082
2118
|
clearTerminateTimeout(workerData);
|
|
2083
|
-
|
|
2119
|
+
codec = getWorker(workerData, codecConstructor, readable, writable, options, config, streamOptions, onTaskFinished, webWorker, scripts);
|
|
2120
|
+
} else {
|
|
2121
|
+
codec = await new Promise(resolve => pendingRequests.push({ resolve, codecConstructor, readable, writable, options, webWorker, scripts }));
|
|
2122
|
+
}
|
|
2123
|
+
}
|
|
2124
|
+
const { signal } = streamOptions;
|
|
2125
|
+
try {
|
|
2126
|
+
return await codec.run(signal);
|
|
2127
|
+
} catch (error) {
|
|
2128
|
+
if (signal && signal.aborted && (signal.reason == error || error.name == ERR_ABORT)) {
|
|
2129
|
+
codec.abort();
|
|
2130
|
+
throw new Error(ERR_ABORT);
|
|
2084
2131
|
} else {
|
|
2085
|
-
|
|
2132
|
+
throw error;
|
|
2086
2133
|
}
|
|
2087
2134
|
}
|
|
2088
2135
|
|
|
2089
2136
|
function onTaskFinished(workerData) {
|
|
2090
2137
|
if (pendingRequests.length) {
|
|
2091
|
-
const [{ resolve, codecConstructor, options, webWorker, scripts }] = pendingRequests.splice(0, 1);
|
|
2092
|
-
resolve(getWorker(workerData, codecConstructor, options, config, onTaskFinished, webWorker, scripts));
|
|
2138
|
+
const [{ resolve, codecConstructor, readable, writable, options, webWorker, scripts }] = pendingRequests.splice(0, 1);
|
|
2139
|
+
resolve(getWorker(workerData, codecConstructor, readable, writable, options, config, streamOptions, onTaskFinished, webWorker, scripts));
|
|
2093
2140
|
} else if (workerData.worker) {
|
|
2094
2141
|
clearTerminateTimeout(workerData);
|
|
2095
2142
|
if (Number.isFinite(config.terminateWorkerTimeout) && config.terminateWorkerTimeout >= 0) {
|
|
@@ -2146,7 +2193,7 @@
|
|
|
2146
2193
|
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
2147
2194
|
*/
|
|
2148
2195
|
|
|
2149
|
-
/* global Blob, FileReader, atob, btoa, XMLHttpRequest, document, fetch */
|
|
2196
|
+
/* global Blob, FileReader, atob, btoa, XMLHttpRequest, document, fetch, ReadableStream, WritableStream */
|
|
2150
2197
|
|
|
2151
2198
|
const ERR_HTTP_STATUS = "HTTP error ";
|
|
2152
2199
|
const ERR_HTTP_RANGE = "HTTP Range not supported";
|
|
@@ -2160,6 +2207,7 @@
|
|
|
2160
2207
|
const HTTP_METHOD_HEAD = "HEAD";
|
|
2161
2208
|
const HTTP_METHOD_GET = "GET";
|
|
2162
2209
|
const HTTP_RANGE_UNIT = "bytes";
|
|
2210
|
+
const DEFAULT_CHUNK_SIZE = 64 * 1024;
|
|
2163
2211
|
|
|
2164
2212
|
class Stream {
|
|
2165
2213
|
|
|
@@ -2173,9 +2221,39 @@
|
|
|
2173
2221
|
}
|
|
2174
2222
|
|
|
2175
2223
|
class Reader extends Stream {
|
|
2224
|
+
|
|
2225
|
+
getStream({ offset, size, chunkSize } = { offset: 0, chunkSize: DEFAULT_CHUNK_SIZE }) {
|
|
2226
|
+
const reader = this;
|
|
2227
|
+
return new ReadableStream({
|
|
2228
|
+
start() {
|
|
2229
|
+
this.chunkOffset = 0;
|
|
2230
|
+
},
|
|
2231
|
+
async pull(controller) {
|
|
2232
|
+
const { chunkOffset } = this;
|
|
2233
|
+
controller.enqueue(await reader.readUint8Array(offset + chunkOffset, Math.min(chunkSize, size() - chunkOffset)));
|
|
2234
|
+
if (chunkOffset + chunkSize > size()) {
|
|
2235
|
+
controller.close();
|
|
2236
|
+
} else {
|
|
2237
|
+
this.chunkOffset += chunkSize;
|
|
2238
|
+
}
|
|
2239
|
+
}
|
|
2240
|
+
});
|
|
2241
|
+
}
|
|
2242
|
+
}
|
|
2243
|
+
|
|
2244
|
+
class WriterStream extends Stream {
|
|
2245
|
+
|
|
2246
|
+
getStream() {
|
|
2247
|
+
const writer = this;
|
|
2248
|
+
return new WritableStream({
|
|
2249
|
+
write(chunk) {
|
|
2250
|
+
return writer.writeUint8Array(chunk);
|
|
2251
|
+
}
|
|
2252
|
+
});
|
|
2253
|
+
}
|
|
2176
2254
|
}
|
|
2177
2255
|
|
|
2178
|
-
class Writer extends
|
|
2256
|
+
class Writer extends WriterStream {
|
|
2179
2257
|
|
|
2180
2258
|
writeUint8Array(array) {
|
|
2181
2259
|
this.size += array.length;
|
|
@@ -2190,9 +2268,10 @@
|
|
|
2190
2268
|
}
|
|
2191
2269
|
|
|
2192
2270
|
init() {
|
|
2271
|
+
const reader = this;
|
|
2193
2272
|
super.init();
|
|
2194
|
-
|
|
2195
|
-
|
|
2273
|
+
reader.blobReader.init();
|
|
2274
|
+
reader.size = reader.blobReader.size;
|
|
2196
2275
|
}
|
|
2197
2276
|
|
|
2198
2277
|
readUint8Array(offset, length) {
|
|
@@ -2214,14 +2293,15 @@
|
|
|
2214
2293
|
}
|
|
2215
2294
|
|
|
2216
2295
|
getData() {
|
|
2217
|
-
|
|
2218
|
-
|
|
2296
|
+
const writer = this;
|
|
2297
|
+
if (writer.blob.text) {
|
|
2298
|
+
return writer.blob.text();
|
|
2219
2299
|
} else {
|
|
2220
2300
|
const reader = new FileReader();
|
|
2221
2301
|
return new Promise((resolve, reject) => {
|
|
2222
2302
|
reader.onload = event => resolve(event.target.result);
|
|
2223
2303
|
reader.onerror = () => reject(reader.error);
|
|
2224
|
-
reader.readAsText(
|
|
2304
|
+
reader.readAsText(writer.blob, writer.encoding);
|
|
2225
2305
|
});
|
|
2226
2306
|
}
|
|
2227
2307
|
}
|
|
@@ -2231,19 +2311,21 @@
|
|
|
2231
2311
|
|
|
2232
2312
|
constructor(dataURI) {
|
|
2233
2313
|
super();
|
|
2234
|
-
|
|
2314
|
+
const reader = this;
|
|
2315
|
+
reader.dataURI = dataURI;
|
|
2235
2316
|
let dataEnd = dataURI.length;
|
|
2236
2317
|
while (dataURI.charAt(dataEnd - 1) == "=") {
|
|
2237
2318
|
dataEnd--;
|
|
2238
2319
|
}
|
|
2239
|
-
|
|
2240
|
-
|
|
2320
|
+
reader.dataStart = dataURI.indexOf(",") + 1;
|
|
2321
|
+
reader.size = Math.floor((dataEnd - reader.dataStart) * 0.75);
|
|
2241
2322
|
}
|
|
2242
2323
|
|
|
2243
2324
|
readUint8Array(offset, length) {
|
|
2244
2325
|
const dataArray = new Uint8Array(length);
|
|
2245
2326
|
const start = Math.floor(offset / 3) * 4;
|
|
2246
|
-
const
|
|
2327
|
+
const dataStart = this.dataStart;
|
|
2328
|
+
const bytes = atob(this.dataURI.substring(start + dataStart, Math.ceil((offset + length) / 3) * 4 + dataStart));
|
|
2247
2329
|
const delta = offset - Math.floor(start / 4) * 3;
|
|
2248
2330
|
for (let indexByte = delta; indexByte < delta + length; indexByte++) {
|
|
2249
2331
|
dataArray[indexByte - delta] = bytes.charCodeAt(indexByte);
|
|
@@ -2262,20 +2344,21 @@
|
|
|
2262
2344
|
|
|
2263
2345
|
writeUint8Array(array) {
|
|
2264
2346
|
super.writeUint8Array(array);
|
|
2347
|
+
const writer = this;
|
|
2265
2348
|
let indexArray = 0;
|
|
2266
|
-
let dataString =
|
|
2267
|
-
const delta =
|
|
2268
|
-
|
|
2349
|
+
let dataString = writer.pending;
|
|
2350
|
+
const delta = writer.pending.length;
|
|
2351
|
+
writer.pending = "";
|
|
2269
2352
|
for (indexArray = 0; indexArray < (Math.floor((delta + array.length) / 3) * 3) - delta; indexArray++) {
|
|
2270
2353
|
dataString += String.fromCharCode(array[indexArray]);
|
|
2271
2354
|
}
|
|
2272
2355
|
for (; indexArray < array.length; indexArray++) {
|
|
2273
|
-
|
|
2356
|
+
writer.pending += String.fromCharCode(array[indexArray]);
|
|
2274
2357
|
}
|
|
2275
2358
|
if (dataString.length > 2) {
|
|
2276
|
-
|
|
2359
|
+
writer.data += btoa(dataString);
|
|
2277
2360
|
} else {
|
|
2278
|
-
|
|
2361
|
+
writer.pending = dataString;
|
|
2279
2362
|
}
|
|
2280
2363
|
}
|
|
2281
2364
|
|
|
@@ -2293,14 +2376,15 @@
|
|
|
2293
2376
|
}
|
|
2294
2377
|
|
|
2295
2378
|
async readUint8Array(offset, length) {
|
|
2296
|
-
|
|
2297
|
-
|
|
2379
|
+
const reader = this;
|
|
2380
|
+
if (reader.blob.arrayBuffer) {
|
|
2381
|
+
return new Uint8Array(await reader.blob.slice(offset, offset + length).arrayBuffer());
|
|
2298
2382
|
} else {
|
|
2299
2383
|
const reader = new FileReader();
|
|
2300
2384
|
return new Promise((resolve, reject) => {
|
|
2301
2385
|
reader.onload = event => resolve(new Uint8Array(event.target.result));
|
|
2302
2386
|
reader.onerror = () => reject(reader.error);
|
|
2303
|
-
reader.readAsArrayBuffer(
|
|
2387
|
+
reader.readAsArrayBuffer(reader.blob.slice(offset, offset + length));
|
|
2304
2388
|
});
|
|
2305
2389
|
}
|
|
2306
2390
|
}
|
|
@@ -2317,21 +2401,23 @@
|
|
|
2317
2401
|
|
|
2318
2402
|
writeUint8Array(array) {
|
|
2319
2403
|
super.writeUint8Array(array);
|
|
2320
|
-
|
|
2321
|
-
|
|
2404
|
+
const writer = this;
|
|
2405
|
+
if (writer.arrayBuffers.length == writer.arrayBuffersMaxlength) {
|
|
2406
|
+
flushArrayBuffers(writer);
|
|
2322
2407
|
}
|
|
2323
|
-
|
|
2408
|
+
writer.arrayBuffers.push(array.buffer);
|
|
2324
2409
|
}
|
|
2325
2410
|
|
|
2326
2411
|
getData() {
|
|
2327
|
-
|
|
2328
|
-
|
|
2329
|
-
|
|
2412
|
+
const writer = this;
|
|
2413
|
+
if (!writer.blob) {
|
|
2414
|
+
if (writer.arrayBuffers.length) {
|
|
2415
|
+
flushArrayBuffers(writer);
|
|
2330
2416
|
}
|
|
2331
|
-
|
|
2332
|
-
initArrayBuffers(
|
|
2417
|
+
writer.blob = writer.pendingBlob;
|
|
2418
|
+
initArrayBuffers(writer);
|
|
2333
2419
|
}
|
|
2334
|
-
return
|
|
2420
|
+
return writer.blob;
|
|
2335
2421
|
}
|
|
2336
2422
|
}
|
|
2337
2423
|
|
|
@@ -2349,78 +2435,38 @@
|
|
|
2349
2435
|
|
|
2350
2436
|
constructor(readableStream) {
|
|
2351
2437
|
this.readableStream = readableStream;
|
|
2352
|
-
this.reader = readableStream.getReader();
|
|
2353
2438
|
this.size = Infinity;
|
|
2354
|
-
this.index = 0;
|
|
2355
|
-
this.currentSize = 0;
|
|
2356
|
-
this.pendingValue = new Uint8Array();
|
|
2357
2439
|
}
|
|
2358
2440
|
|
|
2359
|
-
init() {
|
|
2441
|
+
init(size) {
|
|
2442
|
+
this.size = size;
|
|
2360
2443
|
this.initialized = true;
|
|
2361
2444
|
}
|
|
2362
2445
|
|
|
2363
|
-
|
|
2364
|
-
|
|
2365
|
-
throw new Error(ERR_NOT_SEEKABLE_READER);
|
|
2366
|
-
}
|
|
2367
|
-
let data = new Uint8Array(length);
|
|
2368
|
-
let size = 0, done;
|
|
2369
|
-
do {
|
|
2370
|
-
const result = await this.reader.read();
|
|
2371
|
-
let { value } = result;
|
|
2372
|
-
done = result.done;
|
|
2373
|
-
if (value) {
|
|
2374
|
-
this.currentSize += value.length;
|
|
2375
|
-
} else {
|
|
2376
|
-
value = this.pendingValue;
|
|
2377
|
-
this.pendingValue = new Uint8Array();
|
|
2378
|
-
}
|
|
2379
|
-
if (this.pendingValue.length) {
|
|
2380
|
-
const newValue = new Uint8Array(this.pendingValue.length + value.length);
|
|
2381
|
-
newValue.set(this.pendingValue);
|
|
2382
|
-
newValue.set(value, this.pendingValue.length);
|
|
2383
|
-
this.pendingValue = new Uint8Array();
|
|
2384
|
-
value = newValue;
|
|
2385
|
-
}
|
|
2386
|
-
if (size + value.length > length) {
|
|
2387
|
-
data.set(value.subarray(0, length), size);
|
|
2388
|
-
this.pendingValue = value.subarray(length);
|
|
2389
|
-
size += length;
|
|
2390
|
-
} else {
|
|
2391
|
-
data.set(value, size);
|
|
2392
|
-
size += value.length;
|
|
2393
|
-
}
|
|
2394
|
-
} while (size < length && !done);
|
|
2395
|
-
if (done && this.size == Infinity) {
|
|
2396
|
-
this.size = this.currentSize;
|
|
2397
|
-
}
|
|
2398
|
-
if (this.size < length) {
|
|
2399
|
-
data = data.slice(0, this.size);
|
|
2400
|
-
length = this.size;
|
|
2401
|
-
}
|
|
2402
|
-
this.index += length;
|
|
2403
|
-
return data;
|
|
2446
|
+
getStream() {
|
|
2447
|
+
return this.readableStream;
|
|
2404
2448
|
}
|
|
2405
2449
|
}
|
|
2406
2450
|
|
|
2407
2451
|
class WritableStreamWriter extends Writer {
|
|
2408
2452
|
|
|
2409
|
-
constructor(
|
|
2453
|
+
constructor(writable) {
|
|
2410
2454
|
super();
|
|
2411
|
-
|
|
2412
|
-
|
|
2455
|
+
const writer = this;
|
|
2456
|
+
writer.writable = writable;
|
|
2413
2457
|
}
|
|
2414
2458
|
|
|
2415
2459
|
async writeUint8Array(array) {
|
|
2416
2460
|
await this.writer.ready;
|
|
2417
|
-
return this.
|
|
2461
|
+
return this.writable.getWriter().write(array);
|
|
2462
|
+
}
|
|
2463
|
+
|
|
2464
|
+
getStream() {
|
|
2465
|
+
return this.writable;
|
|
2418
2466
|
}
|
|
2419
2467
|
|
|
2420
2468
|
async getData() {
|
|
2421
|
-
|
|
2422
|
-
await this.writer.close();
|
|
2423
|
-
return this.writableStream;
|
|
2469
|
+
return this.writable;
|
|
2424
2470
|
}
|
|
2425
2471
|
}
|
|
2426
2472
|
|
|
@@ -2428,15 +2474,16 @@
|
|
|
2428
2474
|
|
|
2429
2475
|
constructor(url, options) {
|
|
2430
2476
|
super();
|
|
2431
|
-
|
|
2432
|
-
|
|
2433
|
-
|
|
2434
|
-
|
|
2435
|
-
|
|
2436
|
-
|
|
2437
|
-
delete
|
|
2438
|
-
delete
|
|
2439
|
-
delete
|
|
2477
|
+
const reader = this;
|
|
2478
|
+
reader.url = url;
|
|
2479
|
+
reader.preventHeadRequest = options.preventHeadRequest;
|
|
2480
|
+
reader.useRangeHeader = options.useRangeHeader;
|
|
2481
|
+
reader.forceRangeRequests = options.forceRangeRequests;
|
|
2482
|
+
reader.options = Object.assign({}, options);
|
|
2483
|
+
delete reader.options.preventHeadRequest;
|
|
2484
|
+
delete reader.options.useRangeHeader;
|
|
2485
|
+
delete reader.options.forceRangeRequests;
|
|
2486
|
+
delete reader.options.useXHR;
|
|
2440
2487
|
}
|
|
2441
2488
|
|
|
2442
2489
|
async init() {
|
|
@@ -2453,11 +2500,12 @@
|
|
|
2453
2500
|
|
|
2454
2501
|
constructor(url, options) {
|
|
2455
2502
|
super();
|
|
2456
|
-
|
|
2457
|
-
|
|
2458
|
-
|
|
2459
|
-
|
|
2460
|
-
|
|
2503
|
+
const reader = this;
|
|
2504
|
+
reader.url = url;
|
|
2505
|
+
reader.preventHeadRequest = options.preventHeadRequest;
|
|
2506
|
+
reader.useRangeHeader = options.useRangeHeader;
|
|
2507
|
+
reader.forceRangeRequests = options.forceRangeRequests;
|
|
2508
|
+
reader.options = options;
|
|
2461
2509
|
}
|
|
2462
2510
|
|
|
2463
2511
|
async init() {
|
|
@@ -2660,10 +2708,11 @@
|
|
|
2660
2708
|
|
|
2661
2709
|
writeUint8Array(array) {
|
|
2662
2710
|
super.writeUint8Array(array);
|
|
2663
|
-
const
|
|
2664
|
-
|
|
2665
|
-
|
|
2666
|
-
|
|
2711
|
+
const writer = this;
|
|
2712
|
+
const previousArray = writer.array;
|
|
2713
|
+
writer.array = new Uint8Array(previousArray.length + array.length);
|
|
2714
|
+
writer.array.set(previousArray);
|
|
2715
|
+
writer.array.set(array, previousArray.length);
|
|
2667
2716
|
}
|
|
2668
2717
|
|
|
2669
2718
|
getData() {
|
|
@@ -2832,89 +2881,6 @@
|
|
|
2832
2881
|
}
|
|
2833
2882
|
}
|
|
2834
2883
|
|
|
2835
|
-
/*
|
|
2836
|
-
Copyright (c) 2022 Gildas Lormeau. All rights reserved.
|
|
2837
|
-
|
|
2838
|
-
Redistribution and use in source and binary forms, with or without
|
|
2839
|
-
modification, are permitted provided that the following conditions are met:
|
|
2840
|
-
|
|
2841
|
-
1. Redistributions of source code must retain the above copyright notice,
|
|
2842
|
-
this list of conditions and the following disclaimer.
|
|
2843
|
-
|
|
2844
|
-
2. Redistributions in binary form must reproduce the above copyright
|
|
2845
|
-
notice, this list of conditions and the following disclaimer in
|
|
2846
|
-
the documentation and/or other materials provided with the distribution.
|
|
2847
|
-
|
|
2848
|
-
3. The names of the authors may not be used to endorse or promote products
|
|
2849
|
-
derived from this software without specific prior written permission.
|
|
2850
|
-
|
|
2851
|
-
THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
|
|
2852
|
-
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
|
2853
|
-
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
|
|
2854
|
-
INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
2855
|
-
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
2856
|
-
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
|
2857
|
-
OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
2858
|
-
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
2859
|
-
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
|
2860
|
-
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
2861
|
-
*/
|
|
2862
|
-
|
|
2863
|
-
const MINIMUM_CHUNK_SIZE = 64;
|
|
2864
|
-
const ERR_ABORT = "Abort error";
|
|
2865
|
-
|
|
2866
|
-
async function processData(codec, reader, writer, offset, inputLengthGetter, config, options) {
|
|
2867
|
-
const chunkSize = Math.max(config.chunkSize, MINIMUM_CHUNK_SIZE);
|
|
2868
|
-
const signal = options.signal;
|
|
2869
|
-
let length = 0;
|
|
2870
|
-
let chunkOffset = 0;
|
|
2871
|
-
|
|
2872
|
-
const result = new Promise((resolve, reject) => {
|
|
2873
|
-
codec.pull = async () => {
|
|
2874
|
-
testAborted(signal, codec);
|
|
2875
|
-
const inputLength = inputLengthGetter();
|
|
2876
|
-
let currentChunkOffset = chunkOffset;
|
|
2877
|
-
chunkOffset += chunkSize;
|
|
2878
|
-
const value = await reader.readUint8Array(currentChunkOffset + offset, Math.min(chunkSize, inputLength - currentChunkOffset));
|
|
2879
|
-
const done = chunkOffset > inputLength;
|
|
2880
|
-
return { value, done };
|
|
2881
|
-
};
|
|
2882
|
-
codec.ondata = async ({ value, done }) => {
|
|
2883
|
-
try {
|
|
2884
|
-
testAborted(signal, codec);
|
|
2885
|
-
const inputLength = inputLengthGetter();
|
|
2886
|
-
const { data, signature } = value;
|
|
2887
|
-
if (data && data.length) {
|
|
2888
|
-
length += data.length;
|
|
2889
|
-
await writer.writeUint8Array(data);
|
|
2890
|
-
}
|
|
2891
|
-
if (options.onprogress) {
|
|
2892
|
-
try {
|
|
2893
|
-
options.onprogress(chunkOffset, inputLength);
|
|
2894
|
-
} catch (error) {
|
|
2895
|
-
// ignored
|
|
2896
|
-
}
|
|
2897
|
-
}
|
|
2898
|
-
if (done) {
|
|
2899
|
-
resolve({ signature, length });
|
|
2900
|
-
}
|
|
2901
|
-
} catch (error) {
|
|
2902
|
-
reject(error);
|
|
2903
|
-
}
|
|
2904
|
-
};
|
|
2905
|
-
codec.onerror = reject;
|
|
2906
|
-
});
|
|
2907
|
-
await codec.start();
|
|
2908
|
-
return result;
|
|
2909
|
-
}
|
|
2910
|
-
|
|
2911
|
-
function testAborted(signal, codec) {
|
|
2912
|
-
if (signal && signal.aborted) {
|
|
2913
|
-
codec.abort();
|
|
2914
|
-
throw new Error(ERR_ABORT);
|
|
2915
|
-
}
|
|
2916
|
-
}
|
|
2917
|
-
|
|
2918
2884
|
/*
|
|
2919
2885
|
Copyright (c) 2022 Gildas Lormeau. All rights reserved.
|
|
2920
2886
|
|
|
@@ -3200,7 +3166,15 @@
|
|
|
3200
3166
|
throw new Error(ERR_ENCRYPTED);
|
|
3201
3167
|
}
|
|
3202
3168
|
}
|
|
3203
|
-
const
|
|
3169
|
+
const dataOffset = offset + 30 + localDirectory.filenameLength + localDirectory.extraFieldLength;
|
|
3170
|
+
const size = () => compressedSize;
|
|
3171
|
+
const readable = reader.getStream({ offset: dataOffset, size, chunkSize: getChunkSize(config) });
|
|
3172
|
+
const writable = writer.getStream();
|
|
3173
|
+
const signal = getOptionValue$1(zipEntry, options, "signal");
|
|
3174
|
+
if (!writer.initialized) {
|
|
3175
|
+
await writer.init();
|
|
3176
|
+
}
|
|
3177
|
+
await runCodec(config.Inflate, readable, writable, {
|
|
3204
3178
|
codecType: CODEC_INFLATE,
|
|
3205
3179
|
password,
|
|
3206
3180
|
zipCrypto,
|
|
@@ -3212,13 +3186,7 @@
|
|
|
3212
3186
|
encrypted,
|
|
3213
3187
|
useWebWorkers: getOptionValue$1(zipEntry, options, "useWebWorkers"),
|
|
3214
3188
|
useCompressionStream: getOptionValue$1(zipEntry, options, "useCompressionStream")
|
|
3215
|
-
}, config);
|
|
3216
|
-
if (!writer.initialized) {
|
|
3217
|
-
await writer.init();
|
|
3218
|
-
}
|
|
3219
|
-
const signal = getOptionValue$1(zipEntry, options, "signal");
|
|
3220
|
-
const dataOffset = offset + 30 + localDirectory.filenameLength + localDirectory.extraFieldLength;
|
|
3221
|
-
await processData(codec, reader, writer, dataOffset, () => compressedSize, config, { onprogress: options.onprogress, signal });
|
|
3189
|
+
}, config, { signal, onprogress: options.onprogress, size });
|
|
3222
3190
|
return writer.getData();
|
|
3223
3191
|
}
|
|
3224
3192
|
}
|
|
@@ -3634,9 +3602,6 @@
|
|
|
3634
3602
|
}
|
|
3635
3603
|
let maximumCompressedSize = 0;
|
|
3636
3604
|
let keepOrder = getOptionValue(zipWriter, options, "keepOrder");
|
|
3637
|
-
if (keepOrder === undefined) {
|
|
3638
|
-
keepOrder = true;
|
|
3639
|
-
}
|
|
3640
3605
|
let uncompressedSize = 0;
|
|
3641
3606
|
let msDosCompatible = getOptionValue(zipWriter, options, "msDosCompatible");
|
|
3642
3607
|
if (msDosCompatible === undefined) {
|
|
@@ -3710,8 +3675,8 @@
|
|
|
3710
3675
|
}
|
|
3711
3676
|
|
|
3712
3677
|
async function getFileEntry(zipWriter, name, reader, options) {
|
|
3713
|
-
const files = zipWriter
|
|
3714
|
-
const
|
|
3678
|
+
const { files, writer } = zipWriter;
|
|
3679
|
+
const streamWriter = writer.getStream().getWriter();
|
|
3715
3680
|
const previousFileEntry = Array.from(files.values()).pop();
|
|
3716
3681
|
let fileEntry = {};
|
|
3717
3682
|
let bufferedWrite;
|
|
@@ -3737,7 +3702,7 @@
|
|
|
3737
3702
|
}
|
|
3738
3703
|
fileWriter = writer;
|
|
3739
3704
|
}
|
|
3740
|
-
fileEntry = await createFileEntry(reader, fileWriter, zipWriter.config, options);
|
|
3705
|
+
fileEntry = await createFileEntry(reader, fileWriter.getStream(), fileWriter.getStream().getWriter(), zipWriter.config, options);
|
|
3741
3706
|
fileEntry.lock = lockCurrentFileEntry;
|
|
3742
3707
|
files.set(name, fileEntry);
|
|
3743
3708
|
fileEntry.filename = name;
|
|
@@ -3767,10 +3732,10 @@
|
|
|
3767
3732
|
setUint32(arrayBufferView, 18, fileEntry.compressedSize);
|
|
3768
3733
|
setUint32(arrayBufferView, 22, fileEntry.uncompressedSize);
|
|
3769
3734
|
}
|
|
3770
|
-
await
|
|
3735
|
+
await writeUint8Array(streamWriter, new Uint8Array(arrayBuffer));
|
|
3771
3736
|
indexWrittenData = headerLength;
|
|
3772
3737
|
}
|
|
3773
|
-
await writeBlob(
|
|
3738
|
+
await writeBlob(streamWriter, blob, indexWrittenData);
|
|
3774
3739
|
delete fileEntry.writingBufferedData;
|
|
3775
3740
|
}
|
|
3776
3741
|
fileEntry.offset = zipWriter.offset;
|
|
@@ -3799,7 +3764,7 @@
|
|
|
3799
3764
|
}
|
|
3800
3765
|
}
|
|
3801
3766
|
|
|
3802
|
-
async function createFileEntry(reader,
|
|
3767
|
+
async function createFileEntry(reader, writable, streamWriter, config, options) {
|
|
3803
3768
|
const {
|
|
3804
3769
|
rawFilename,
|
|
3805
3770
|
lastAccessDate,
|
|
@@ -3946,7 +3911,11 @@
|
|
|
3946
3911
|
let result;
|
|
3947
3912
|
let compressedSize = 0;
|
|
3948
3913
|
if (reader) {
|
|
3949
|
-
|
|
3914
|
+
await writeUint8Array(streamWriter, localHeaderArray);
|
|
3915
|
+
fileEntry.dataWritten = true;
|
|
3916
|
+
const size = () => reader.size;
|
|
3917
|
+
const readable = reader.getStream({ offset: 0, size, chunkSize: getChunkSize(config) });
|
|
3918
|
+
result = await runCodec(config.Deflate, readable, writable, {
|
|
3950
3919
|
codecType: CODEC_DEFLATE,
|
|
3951
3920
|
level,
|
|
3952
3921
|
password,
|
|
@@ -3958,14 +3927,11 @@
|
|
|
3958
3927
|
encrypted,
|
|
3959
3928
|
useWebWorkers,
|
|
3960
3929
|
useCompressionStream
|
|
3961
|
-
}, config);
|
|
3962
|
-
await writer.writeUint8Array(localHeaderArray);
|
|
3963
|
-
fileEntry.dataWritten = true;
|
|
3964
|
-
result = await processData(codec, reader, writer, 0, () => reader.size, config, { onprogress, signal });
|
|
3930
|
+
}, config, { signal, onprogress, size });
|
|
3965
3931
|
uncompressedSize = fileEntry.uncompressedSize = reader.size;
|
|
3966
3932
|
compressedSize = result.length;
|
|
3967
3933
|
} else {
|
|
3968
|
-
await
|
|
3934
|
+
await writeUint8Array(streamWriter, localHeaderArray);
|
|
3969
3935
|
fileEntry.dataWritten = true;
|
|
3970
3936
|
}
|
|
3971
3937
|
let dataDescriptorArray = new Uint8Array(0);
|
|
@@ -4009,7 +3975,7 @@
|
|
|
4009
3975
|
}
|
|
4010
3976
|
}
|
|
4011
3977
|
if (dataDescriptor) {
|
|
4012
|
-
await
|
|
3978
|
+
await writeUint8Array(streamWriter, dataDescriptorArray);
|
|
4013
3979
|
}
|
|
4014
3980
|
const length = localHeaderArray.length + compressedSize + dataDescriptorArray.length;
|
|
4015
3981
|
Object.assign(fileEntry, { compressedSize, lastModDate, rawLastModDate, creationDate, lastAccessDate, encrypted, length });
|
|
@@ -4017,8 +3983,8 @@
|
|
|
4017
3983
|
}
|
|
4018
3984
|
|
|
4019
3985
|
async function closeFile(zipWriter, comment, options) {
|
|
4020
|
-
const
|
|
4021
|
-
const
|
|
3986
|
+
const { files } = zipWriter;
|
|
3987
|
+
const streamWriter = zipWriter.writer.getStream().getWriter();
|
|
4022
3988
|
let offset = 0;
|
|
4023
3989
|
let directoryDataLength = 0;
|
|
4024
3990
|
let directoryOffset = zipWriter.offset;
|
|
@@ -4133,9 +4099,9 @@
|
|
|
4133
4099
|
setUint16(directoryView, offset + 10, filesLength);
|
|
4134
4100
|
setUint32(directoryView, offset + 12, directoryDataLength);
|
|
4135
4101
|
setUint32(directoryView, offset + 16, directoryOffset);
|
|
4136
|
-
await
|
|
4102
|
+
await writeUint8Array(streamWriter, directoryArray);
|
|
4137
4103
|
if (comment && comment.length) {
|
|
4138
|
-
await
|
|
4104
|
+
await writeUint8Array(streamWriter, comment);
|
|
4139
4105
|
}
|
|
4140
4106
|
}
|
|
4141
4107
|
|
|
@@ -4156,20 +4122,25 @@
|
|
|
4156
4122
|
}
|
|
4157
4123
|
}
|
|
4158
4124
|
|
|
4159
|
-
async function writeBlob(
|
|
4125
|
+
async function writeBlob(streamWriter, blob, start = 0) {
|
|
4160
4126
|
const blockSize = 512 * 1024 * 1024;
|
|
4161
4127
|
await writeSlice();
|
|
4162
4128
|
|
|
4163
4129
|
async function writeSlice() {
|
|
4164
4130
|
if (start < blob.size) {
|
|
4165
4131
|
const arrayBuffer = await sliceAsArrayBuffer(blob, start, start + blockSize);
|
|
4166
|
-
await
|
|
4132
|
+
await writeUint8Array(streamWriter, new Uint8Array(arrayBuffer));
|
|
4167
4133
|
start += blockSize;
|
|
4168
4134
|
await writeSlice();
|
|
4169
4135
|
}
|
|
4170
4136
|
}
|
|
4171
4137
|
}
|
|
4172
4138
|
|
|
4139
|
+
async function writeUint8Array(streamWriter, array) {
|
|
4140
|
+
await streamWriter.ready;
|
|
4141
|
+
await streamWriter.write(array);
|
|
4142
|
+
}
|
|
4143
|
+
|
|
4173
4144
|
function getTimeNTFS(date) {
|
|
4174
4145
|
if (date) {
|
|
4175
4146
|
return ((BigInt(date.getTime()) + BigInt(11644473600000)) * BigInt(10000));
|