@zip.js/zip.js 2.6.33 → 2.6.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/z-worker-fflate.js +1 -1
  2. package/dist/z-worker-pako.js +1 -1
  3. package/dist/z-worker.js +1 -1
  4. package/dist/zip-fs-full.js +2479 -2364
  5. package/dist/zip-fs-full.min.js +1 -1
  6. package/dist/zip-fs.js +1236 -1121
  7. package/dist/zip-fs.min.js +1 -1
  8. package/dist/zip-full.js +1235 -1120
  9. package/dist/zip-full.min.js +1 -1
  10. package/dist/zip-no-worker-deflate.min.js +1 -1
  11. package/dist/zip-no-worker-inflate.min.js +1 -1
  12. package/dist/zip-no-worker.min.js +1 -1
  13. package/dist/zip.js +1236 -1121
  14. package/dist/zip.min.js +1 -1
  15. package/index-fflate.js +3 -1
  16. package/index.cjs +2479 -2364
  17. package/index.d.ts +33 -2
  18. package/index.js +3 -1
  19. package/lib/core/codec-pool.js +2 -2
  20. package/lib/core/codec-worker.js +321 -0
  21. package/lib/core/configuration.js +3 -3
  22. package/lib/core/constants.js +6 -5
  23. package/lib/core/io.js +64 -1
  24. package/lib/core/streams/aes-crypto-stream.js +2 -0
  25. package/lib/core/streams/codec-stream.js +60 -13
  26. package/lib/core/streams/codecs/sjcl.js +1 -1
  27. package/lib/core/streams/stream-adapter.js +55 -0
  28. package/lib/core/streams/zip-crypto-stream.js +1 -0
  29. package/lib/core/streams/zip-entry-stream.js +1 -0
  30. package/lib/core/util/stream-codec-shim.js +2 -0
  31. package/lib/core/z-worker-core.js +21 -11
  32. package/lib/core/zip-entry.js +2 -1
  33. package/lib/core/zip-fs-core.js +1 -0
  34. package/lib/core/zip-reader.js +7 -5
  35. package/lib/core/zip-writer.js +88 -42
  36. package/lib/z-worker-inline.js +1 -1
  37. package/lib/zip.js +1 -1
  38. package/package.json +5 -5
  39. package/tests/all/test-http-split-zip.js +37 -0
  40. package/tests/all/test-split-zip.js +25 -22
  41. package/tests/tests-data.js +2 -1
  42. package/lib/core/codec-interface.js +0 -115
  43. package/lib/core/codec-pool-worker.js +0 -293
package/dist/zip-full.js CHANGED
@@ -4257,37 +4257,50 @@
4257
4257
  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4258
4258
  */
4259
4259
 
4260
- const table = [];
4261
- for (let i = 0; i < 256; i++) {
4262
- let t = i;
4263
- for (let j = 0; j < 8; j++) {
4264
- if (t & 1) {
4265
- t = (t >>> 1) ^ 0xEDB88320;
4266
- } else {
4267
- t = t >>> 1;
4268
- }
4269
- }
4270
- table[i] = t;
4271
- }
4260
+ const MAX_32_BITS = 0xffffffff;
4261
+ const MAX_16_BITS = 0xffff;
4262
+ const COMPRESSION_METHOD_DEFLATE = 0x08;
4263
+ const COMPRESSION_METHOD_STORE = 0x00;
4264
+ const COMPRESSION_METHOD_AES = 0x63;
4272
4265
 
4273
- class Crc32 {
4266
+ const LOCAL_FILE_HEADER_SIGNATURE = 0x04034b50;
4267
+ const SPLIT_ZIP_FILE_SIGNATURE = 0x08074b50;
4268
+ const DATA_DESCRIPTOR_RECORD_SIGNATURE = SPLIT_ZIP_FILE_SIGNATURE;
4269
+ const CENTRAL_FILE_HEADER_SIGNATURE = 0x02014b50;
4270
+ const END_OF_CENTRAL_DIR_SIGNATURE = 0x06054b50;
4271
+ const ZIP64_END_OF_CENTRAL_DIR_SIGNATURE = 0x06064b50;
4272
+ const ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIGNATURE = 0x07064b50;
4273
+ const END_OF_CENTRAL_DIR_LENGTH = 22;
4274
+ const ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH = 20;
4275
+ const ZIP64_END_OF_CENTRAL_DIR_LENGTH = 56;
4276
+ const ZIP64_END_OF_CENTRAL_DIR_TOTAL_LENGTH = END_OF_CENTRAL_DIR_LENGTH + ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH + ZIP64_END_OF_CENTRAL_DIR_LENGTH;
4274
4277
 
4275
- constructor(crc) {
4276
- this.crc = crc || -1;
4277
- }
4278
+ const EXTRAFIELD_TYPE_ZIP64 = 0x0001;
4279
+ const EXTRAFIELD_TYPE_AES = 0x9901;
4280
+ const EXTRAFIELD_TYPE_NTFS = 0x000a;
4281
+ const EXTRAFIELD_TYPE_NTFS_TAG1 = 0x0001;
4282
+ const EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP = 0x5455;
4283
+ const EXTRAFIELD_TYPE_UNICODE_PATH = 0x7075;
4284
+ const EXTRAFIELD_TYPE_UNICODE_COMMENT = 0x6375;
4278
4285
 
4279
- append(data) {
4280
- let crc = this.crc | 0;
4281
- for (let offset = 0, length = data.length | 0; offset < length; offset++) {
4282
- crc = (crc >>> 8) ^ table[(crc ^ data[offset]) & 0xFF];
4283
- }
4284
- this.crc = crc;
4285
- }
4286
+ const BITFLAG_ENCRYPTED = 0x01;
4287
+ const BITFLAG_LEVEL = 0x06;
4288
+ const BITFLAG_DATA_DESCRIPTOR = 0x0008;
4289
+ const BITFLAG_LANG_ENCODING_FLAG = 0x0800;
4290
+ const FILE_ATTR_MSDOS_DIR_MASK = 0x10;
4286
4291
 
4287
- get() {
4288
- return ~this.crc;
4289
- }
4290
- }
4292
+ const VERSION_DEFLATE = 0x14;
4293
+ const VERSION_ZIP64 = 0x2D;
4294
+ const VERSION_AES = 0x33;
4295
+
4296
+ const DIRECTORY_SIGNATURE = "/";
4297
+
4298
+ const MAX_DATE = new Date(2107, 11, 31);
4299
+ const MIN_DATE = new Date(1980, 0, 1);
4300
+
4301
+ const UNDEFINED_VALUE = undefined;
4302
+ const UNDEFINED_TYPE$1 = "undefined";
4303
+ const FUNCTION_TYPE$1 = "function";
4291
4304
 
4292
4305
  /*
4293
4306
  Copyright (c) 2022 Gildas Lormeau. All rights reserved.
@@ -4317,21 +4330,25 @@
4317
4330
  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4318
4331
  */
4319
4332
 
4320
- class Crc32Stream extends TransformStream {
4333
+ class StreamAdapter {
4321
4334
 
4322
- constructor() {
4323
- const crc32 = new Crc32();
4324
- super({
4325
- transform(chunk) {
4326
- crc32.append(chunk);
4327
- },
4328
- flush(controller) {
4329
- const value = new Uint8Array(4);
4330
- const dataView = new DataView(value.buffer);
4331
- dataView.setUint32(0, crc32.get());
4332
- controller.enqueue(value);
4335
+ constructor(Codec) {
4336
+ return class extends TransformStream {
4337
+ constructor(options) {
4338
+ const codec = new Codec(options);
4339
+ super({
4340
+ transform(chunk, controller) {
4341
+ controller.enqueue(codec.append(chunk));
4342
+ },
4343
+ flush(controller) {
4344
+ const chunk = codec.flush();
4345
+ if (chunk) {
4346
+ controller.enqueue(chunk);
4347
+ }
4348
+ }
4349
+ });
4333
4350
  }
4334
- });
4351
+ };
4335
4352
  }
4336
4353
  }
4337
4354
 
@@ -4363,94 +4380,397 @@
4363
4380
  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4364
4381
  */
4365
4382
 
4366
- function encodeText(value) {
4367
- if (typeof TextEncoder == "undefined") {
4368
- value = unescape(encodeURIComponent(value));
4369
- const result = new Uint8Array(value.length);
4370
- for (let i = 0; i < result.length; i++) {
4371
- result[i] = value.charCodeAt(i);
4383
+ const MINIMUM_CHUNK_SIZE = 64;
4384
+ let maxWorkers = 2;
4385
+ try {
4386
+ if (typeof navigator != UNDEFINED_TYPE$1 && navigator.hardwareConcurrency) {
4387
+ maxWorkers = navigator.hardwareConcurrency;
4388
+ }
4389
+ } catch (_error) {
4390
+ // ignored
4391
+ }
4392
+ const DEFAULT_CONFIGURATION = {
4393
+ chunkSize: 512 * 1024,
4394
+ maxWorkers,
4395
+ terminateWorkerTimeout: 5000,
4396
+ useWebWorkers: true,
4397
+ useCompressionStream: true,
4398
+ workerScripts: UNDEFINED_VALUE,
4399
+ CompressionStreamNative: typeof CompressionStream != UNDEFINED_TYPE$1 && CompressionStream,
4400
+ DecompressionStreamNative: typeof DecompressionStream != UNDEFINED_TYPE$1 && DecompressionStream
4401
+ };
4402
+
4403
+ const config = Object.assign({}, DEFAULT_CONFIGURATION);
4404
+
4405
+ function getConfiguration() {
4406
+ return config;
4407
+ }
4408
+
4409
+ function getChunkSize(config) {
4410
+ return Math.max(config.chunkSize, MINIMUM_CHUNK_SIZE);
4411
+ }
4412
+
4413
+ function configure(configuration) {
4414
+ const {
4415
+ baseURL,
4416
+ chunkSize,
4417
+ maxWorkers,
4418
+ terminateWorkerTimeout,
4419
+ useCompressionStream,
4420
+ useWebWorkers,
4421
+ Deflate,
4422
+ Inflate,
4423
+ CompressionStream,
4424
+ DecompressionStream,
4425
+ workerScripts
4426
+ } = configuration;
4427
+ setIfDefined("baseURL", baseURL);
4428
+ setIfDefined("chunkSize", chunkSize);
4429
+ setIfDefined("maxWorkers", maxWorkers);
4430
+ setIfDefined("terminateWorkerTimeout", terminateWorkerTimeout);
4431
+ setIfDefined("useCompressionStream", useCompressionStream);
4432
+ setIfDefined("useWebWorkers", useWebWorkers);
4433
+ if (Deflate) {
4434
+ config.CompressionStream = new StreamAdapter(Deflate);
4435
+ }
4436
+ if (Inflate) {
4437
+ config.DecompressionStream = new StreamAdapter(Inflate);
4438
+ }
4439
+ setIfDefined("CompressionStream", CompressionStream);
4440
+ setIfDefined("DecompressionStream", DecompressionStream);
4441
+ if (workerScripts !== UNDEFINED_VALUE) {
4442
+ const { deflate, inflate } = workerScripts;
4443
+ if (deflate || inflate) {
4444
+ if (!config.workerScripts) {
4445
+ config.workerScripts = {};
4446
+ }
4447
+ }
4448
+ if (deflate) {
4449
+ if (!Array.isArray(deflate)) {
4450
+ throw new Error("workerScripts.deflate must be an array");
4451
+ }
4452
+ config.workerScripts.deflate = deflate;
4453
+ }
4454
+ if (inflate) {
4455
+ if (!Array.isArray(inflate)) {
4456
+ throw new Error("workerScripts.inflate must be an array");
4457
+ }
4458
+ config.workerScripts.inflate = inflate;
4372
4459
  }
4373
- return result;
4374
- } else {
4375
- return new TextEncoder().encode(value);
4376
4460
  }
4377
4461
  }
4378
4462
 
4379
- // Derived from https://github.com/xqdoo00o/jszip/blob/master/lib/sjcl.js and https://github.com/bitwiseshiftleft/sjcl
4463
+ function setIfDefined(propertyName, propertyValue) {
4464
+ if (propertyValue !== UNDEFINED_VALUE) {
4465
+ config[propertyName] = propertyValue;
4466
+ }
4467
+ }
4380
4468
 
4381
- /*// deno-lint-ignore-file no-this-alias *
4469
+ function e(e){const t=()=>URL.createObjectURL(new Blob(['const{Array:e,Object:t,Math:n,Error:r,Uint8Array:s,Uint16Array:i,Uint32Array:o,Int32Array:c,Map:f,DataView:a,Promise:l,TextEncoder:u,crypto:w,postMessage:h,TransformStream:d,ReadableStream:p,WritableStream:y,CompressionStream:m,DecompressionStream:b}=self;class g{constructor(e){return class extends d{constructor(t){const n=new e(t);super({transform(e,t){t.enqueue(n.append(e))},flush(e){const t=n.flush();t&&e.enqueue(t)}})}}}}const k=[];for(let e=0;256>e;e++){let t=e;for(let e=0;8>e;e++)1&t?t=t>>>1^3988292384:t>>>=1;k[e]=t}class v{constructor(e){this.t=e||-1}append(e){let t=0|this.t;for(let n=0,r=0|e.length;r>n;n++)t=t>>>8^k[255&(t^e[n])];this.t=t}get(){return~this.t}}class S extends d{constructor(){const e=new v;super({transform(t){e.append(t)},flush(t){const n=new s(4);new a(n.buffer).setUint32(0,e.get()),t.enqueue(n)}})}}const z={concat(e,t){if(0===e.length||0===t.length)return e.concat(t);const n=e[e.length-1],r=z.i(n);return 32===r?e.concat(t):z.o(t,r,0|n,e.slice(0,e.length-1))},l(e){const t=e.length;if(0===t)return 0;const n=e[t-1];return 32*(t-1)+z.i(n)},u(e,t){if(32*e.length<t)return e;const r=(e=e.slice(0,n.ceil(t/32))).length;return t&=31,r>0&&t&&(e[r-1]=z.h(t,e[r-1]&2147483648>>t-1,1)),e},h:(e,t,n)=>32===e?t:(n?0|t:t<<32-e)+1099511627776*e,i:e=>n.round(e/1099511627776)||32,o(e,t,n,r){for(void 0===r&&(r=[]);t>=32;t-=32)r.push(n),n=0;if(0===t)return r.concat(e);for(let s=0;s<e.length;s++)r.push(n|e[s]>>>t),n=e[s]<<32-t;const s=e.length?e[e.length-1]:0,i=z.i(s);return r.push(z.h(t+i&31,t+i>32?n:r.pop(),1)),r}},_={p:{m(e){const t=z.l(e)/8,n=new s(t);let r;for(let s=0;t>s;s++)0==(3&s)&&(r=e[s/4]),n[s]=r>>>24,r<<=8;return n},g(e){const t=[];let n,r=0;for(n=0;n<e.length;n++)r=r<<8|e[n],3==(3&n)&&(t.push(r),r=0);return 3&n&&t.push(z.h(8*(3&n),r)),t}}},C={k:function(e){e?(this.v=e.v.slice(0),this.S=e.S.slice(0),this._=e._):this.reset()}};C.k.prototype={blockSize:512,reset(){const e=this;return e.v=this.C.slice(0),e.S=[],e._=0,e},update(e){const t=this;"string"==typeof e&&(e=_.I.g(e));const n=t.S=z.concat(t.S,e),s=t._,i=t._=s+z.l(e);if(i>9007199254740991)throw new r("Cannot hash more than 2^53 - 1 bits");const c=new o(n);let f=0;for(let e=t.blockSize+s-(t.blockSize+s&t.blockSize-1);i>=e;e+=t.blockSize)t.A(c.subarray(16*f,16*(f+1))),f+=1;return n.splice(0,16*f),t},D(){const e=this;let t=e.S;const r=e.v;t=z.concat(t,[z.h(1,1)]);for(let e=t.length+2;15&e;e++)t.push(0);for(t.push(n.floor(e._/4294967296)),t.push(0|e._);t.length;)e.A(t.splice(0,16));return e.reset(),r},C:[1732584193,4023233417,2562383102,271733878,3285377520],V:[1518500249,1859775393,2400959708,3395469782],R:(e,t,n,r)=>e>19?e>39?e>59?e>79?void 0:t^n^r:t&n|t&r|n&r:t^n^r:t&n|~t&r,B:(e,t)=>t<<e|t>>>32-e,A(t){const r=this,s=r.v,i=e(80);for(let e=0;16>e;e++)i[e]=t[e];let o=s[0],c=s[1],f=s[2],a=s[3],l=s[4];for(let e=0;79>=e;e++){16>e||(i[e]=r.B(1,i[e-3]^i[e-8]^i[e-14]^i[e-16]));const t=r.B(5,o)+r.R(e,c,f,a)+l+i[e]+r.V[n.floor(e/20)]|0;l=a,a=f,f=r.B(30,c),c=o,o=t}s[0]=s[0]+o|0,s[1]=s[1]+c|0,s[2]=s[2]+f|0,s[3]=s[3]+a|0,s[4]=s[4]+l|0}};const I={getRandomValues(e){const t=new o(e.buffer),r=e=>{let t=987654321;const r=4294967295;return()=>(t=36969*(65535&t)+(t>>16)&r,(((t<<16)+(e=18e3*(65535&e)+(e>>16)&r)&r)/4294967296+.5)*(n.random()>.5?1:-1))};for(let s,i=0;i<e.length;i+=4){const e=r(4294967296*(s||n.random()));s=987654071*e(),t[i/4]=4294967296*e()|0}return e}},x={importKey:e=>new x.M(_.p.g(e)),K(e,t,n,s){if(n=n||1e4,0>s||0>n)throw new r("invalid params to pbkdf2");const i=1+(s>>5)<<2;let o,c,f,l,u;const w=new ArrayBuffer(i),h=new a(w);let d=0;const p=z;for(t=_.p.g(t),u=1;(i||1)>d;u++){for(o=c=e.encrypt(p.concat(t,[u])),f=1;n>f;f++)for(c=e.encrypt(c),l=0;l<c.length;l++)o[l]^=c[l];for(f=0;(i||1)>d&&f<o.length;f++)h.setInt32(d,o[f]),d+=4}return w.slice(0,s/8)},M:class{constructor(e){const t=this,n=t.N=C.k,r=[[],[]],s=n.prototype.blockSize/32;t.P=[new n,new n],e.length>s&&(e=n.hash(e));for(let t=0;s>t;t++)r[0][t]=909522486^e[t],r[1][t]=1549556828^e[t];t.P[0].update(r[0]),t.P[1].update(r[1]),t.U=new n(t.P[0])}reset(){const e=this;e.U=new e.N(e.P[0]),e.T=!1}update(e){this.T=!0,this.U.update(e)}digest(){const e=this,t=e.U.D(),n=new e.N(e.P[1]).update(t).D();return e.reset(),n}encrypt(e){if(this.T)throw new r("encrypt on already updated hmac called!");return this.update(e),this.digest(e)}}},A=void 0!==w&&"function"==typeof w.getRandomValues;function D(e){return A?w.getRandomValues(e):I.getRandomValues(e)}const V={name:"PBKDF2"},R=t.assign({hash:{name:"HMAC"}},V),B=t.assign({iterations:1e3,hash:{name:"SHA-1"}},V),E=["deriveBits"],M=[8,12,16],K=[16,24,32],N=[0,0,0,0],P=void 0!==w,U=P&&w.subtle,T=P&&void 0!==U,W=P&&T&&"function"==typeof U.importKey,H=P&&T&&"function"==typeof U.deriveBits,L=_.p,j=class{constructor(e){const t=this;t.W=[[[],[],[],[],[]],[[],[],[],[],[]]],t.W[0][0][0]||t.H();const n=t.W[0][4],s=t.W[1],i=e.length;let o,c,f,a=1;if(4!==i&&6!==i&&8!==i)throw new r("invalid aes key size");for(t.V=[c=e.slice(0),f=[]],o=i;4*i+28>o;o++){let e=c[o-1];(o%i==0||8===i&&o%i==4)&&(e=n[e>>>24]<<24^n[e>>16&255]<<16^n[e>>8&255]<<8^n[255&e],o%i==0&&(e=e<<8^e>>>24^a<<24,a=a<<1^283*(a>>7))),c[o]=c[o-i]^e}for(let e=0;o;e++,o--){const t=c[3&e?o:o-4];f[e]=4>=o||4>e?t:s[0][n[t>>>24]]^s[1][n[t>>16&255]]^s[2][n[t>>8&255]]^s[3][n[255&t]]}}encrypt(e){return this.L(e,0)}decrypt(e){return this.L(e,1)}H(){const e=this.W[0],t=this.W[1],n=e[4],r=t[4],s=[],i=[];let o,c,f,a;for(let e=0;256>e;e++)i[(s[e]=e<<1^283*(e>>7))^e]=e;for(let l=o=0;!n[l];l^=c||1,o=i[o]||1){let i=o^o<<1^o<<2^o<<3^o<<4;i=i>>8^255&i^99,n[l]=i,r[i]=l,a=s[f=s[c=s[l]]];let u=16843009*a^65537*f^257*c^16843008*l,w=257*s[i]^16843008*i;for(let n=0;4>n;n++)e[n][l]=w=w<<24^w>>>8,t[n][i]=u=u<<24^u>>>8}for(let n=0;5>n;n++)e[n]=e[n].slice(0),t[n]=t[n].slice(0)}L(e,t){if(4!==e.length)throw new r("invalid aes block size");const n=this.V[t],s=n.length/4-2,i=[0,0,0,0],o=this.W[t],c=o[0],f=o[1],a=o[2],l=o[3],u=o[4];let w,h,d,p=e[0]^n[0],y=e[t?3:1]^n[1],m=e[2]^n[2],b=e[t?1:3]^n[3],g=4;for(let e=0;s>e;e++)w=c[p>>>24]^f[y>>16&255]^a[m>>8&255]^l[255&b]^n[g],h=c[y>>>24]^f[m>>16&255]^a[b>>8&255]^l[255&p]^n[g+1],d=c[m>>>24]^f[b>>16&255]^a[p>>8&255]^l[255&y]^n[g+2],b=c[b>>>24]^f[p>>16&255]^a[y>>8&255]^l[255&m]^n[g+3],g+=4,p=w,y=h,m=d;for(let e=0;4>e;e++)i[t?3&-e:e]=u[p>>>24]<<24^u[y>>16&255]<<16^u[m>>8&255]<<8^u[255&b]^n[g++],w=p,p=y,y=m,m=b,b=w;return i}},F=class{constructor(e,t){this.j=e,this.F=t,this.O=t}reset(){this.O=this.F}update(e){return this.q(this.j,e,this.O)}G(e){if(255==(e>>24&255)){let t=e>>16&255,n=e>>8&255,r=255&e;255===t?(t=0,255===n?(n=0,255===r?r=0:++r):++n):++t,e=0,e+=t<<16,e+=n<<8,e+=r}else e+=1<<24;return e}J(e){0===(e[0]=this.G(e[0]))&&(e[1]=this.G(e[1]))}q(e,t,n){let r;if(!(r=t.length))return[];const s=z.l(t);for(let s=0;r>s;s+=4){this.J(n);const r=e.encrypt(n);t[s]^=r[0],t[s+1]^=r[1],t[s+2]^=r[2],t[s+3]^=r[3]}return z.u(t,s)}},O=x.M;class q extends d{constructor(e,n,i){super({start(){t.assign(this,{ready:new l((e=>this.X=e)),password:e,signed:n,Y:i-1,pending:new s})},async transform(e,t){const n=this,{password:i,Y:o,X:c,ready:f}=n;i?(await(async(e,t,n,s)=>{const i=await Q(e,t,n,Y(s,0,M[t])),o=Y(s,M[t]);if(i[0]!=o[0]||i[1]!=o[1])throw new r("Invalid password")})(n,o,i,Y(e,0,M[o]+2)),e=Y(e,M[o]+2),c()):await f;const a=new s(e.length-10-(e.length-10)%16);t.enqueue(J(n,e,a,0,10,!0))},async flush(e){const{signed:t,Z:n,$:i,pending:o,ready:c}=this;await c;const f=Y(o,0,o.length-10),a=Y(o,o.length-10);let l=new s;if(f.length){const e=$(L,f);i.update(e);const t=n.update(e);l=Z(L,t)}if(t){const e=Y(Z(L,i.digest()),0,10);for(let t=0;10>t;t++)if(e[t]!=a[t])throw new r("Invalid signature")}e.enqueue(l)}})}}class G extends d{constructor(e,n){let r;super({start(){t.assign(this,{ready:new l((e=>this.X=e)),password:e,Y:n-1,pending:new s})},async transform(e,t){const n=this,{password:r,Y:i,X:o,ready:c}=n;let f=new s;r?(f=await(async(e,t,n)=>{const r=D(new s(M[t]));return X(r,await Q(e,t,n,r))})(n,i,r),o()):await c;const a=new s(f.length+e.length-e.length%16);a.set(f,0),t.enqueue(J(n,e,a,f.length,0))},async flush(e){const{Z:t,$:n,pending:i,ready:o}=this;await o;let c=new s;if(i.length){const e=t.update($(L,i));n.update(e),c=Z(L,e)}r.signature=Z(L,n.digest()).slice(0,10),e.enqueue(X(c,r.signature))}}),r=this}}function J(e,t,n,r,i,o){const{Z:c,$:f,pending:a}=e,l=t.length-i;let u;for(a.length&&(t=X(a,t),n=((e,t)=>{if(t&&t>e.length){const n=e;(e=new s(t)).set(n,0)}return e})(n,l-l%16)),u=0;l-16>=u;u+=16){const e=$(L,Y(t,u,u+16));o&&f.update(e);const s=c.update(e);o||f.update(s),n.set(Z(L,s),u+r)}return e.pending=Y(t,u),n}async function Q(n,r,i,o){n.password=null;const c=(e=>{if(void 0===u){const t=new s((e=unescape(encodeURIComponent(e))).length);for(let n=0;n<t.length;n++)t[n]=e.charCodeAt(n);return t}return(new u).encode(e)})(i),f=await((e,t,n,r,s)=>W?U.importKey("raw",t,n,!1,s):x.importKey(t))(0,c,R,0,E),a=await(async(e,t,n)=>H?await U.deriveBits(e,t,n):x.K(t,e.salt,B.iterations,n))(t.assign({salt:o},B),f,8*(2*K[r]+2)),l=new s(a),w=$(L,Y(l,0,K[r])),h=$(L,Y(l,K[r],2*K[r])),d=Y(l,2*K[r]);return t.assign(n,{keys:{key:w,ee:h,passwordVerification:d},Z:new F(new j(w),e.from(N)),$:new O(h)}),d}function X(e,t){let n=e;return e.length+t.length&&(n=new s(e.length+t.length),n.set(e,0),n.set(t,e.length)),n}function Y(e,t,n){return e.subarray(t,n)}function Z(e,t){return e.m(t)}function $(e,t){return e.g(t)}class ee extends d{constructor(e,n){super({start(){t.assign(this,{password:e,passwordVerification:n}),se(this,e)},transform(e,t){const n=this;if(n.password){const t=ne(n,e.subarray(0,12));if(n.password=null,t[11]!=n.passwordVerification)throw new r("Invalid password");e=e.subarray(12)}t.enqueue(ne(n,e))}})}}class te extends d{constructor(e,n){super({start(){t.assign(this,{password:e,passwordVerification:n}),se(this,e)},transform(e,t){const n=this;let r,i;if(n.password){n.password=null;const t=D(new s(12));t[11]=n.passwordVerification,r=new s(e.length+t.length),r.set(re(n,t),0),i=12}else r=new s(e.length),i=0;r.set(re(n,e),i),t.enqueue(r)}})}}function ne(e,t){const n=new s(t.length);for(let r=0;r<t.length;r++)n[r]=oe(e)^t[r],ie(e,n[r]);return n}function re(e,t){const n=new s(t.length);for(let r=0;r<t.length;r++)n[r]=oe(e)^t[r],ie(e,t[r]);return n}function se(e,n){const r=[305419896,591751049,878082192];t.assign(e,{keys:r,te:new v(r[0]),ne:new v(r[2])});for(let t=0;t<n.length;t++)ie(e,n.charCodeAt(t))}function ie(e,t){let[r,s,i]=e.keys;e.te.append([t]),r=~e.te.get(),s=fe(n.imul(fe(s+ce(r)),134775813)+1),e.ne.append([s>>>24]),i=~e.ne.get(),e.keys=[r,s,i]}function oe(e){const t=2|e.keys[2];return ce(n.imul(t,1^t)>>>8)}function ce(e){return 255&e}function fe(e){return 4294967295&e}class ae extends d{constructor(e,{chunkSize:t,CompressionStream:n,re:r}){super({});const{compressed:s,encrypted:i,useCompressionStream:o,password:c,passwordVerification:f,encryptionStrength:l,zipCrypto:u,signed:w,level:h}=e,d=this;let p,y,m=ue(super.readable);i&&!u||!w||([m,p]=m.tee(),p=de(p,new S)),s&&(m=he(m,o,{level:h,chunkSize:t},r,n)),i&&(u?m=de(m,new te(c,f)):(y=new G(c,l),m=de(m,y))),we(d,m,(async()=>{let e;i&&!u&&(e=y.signature),i&&!u||!w||(e=await p.getReader().read(),e=new a(e.value.buffer).getUint32(0)),d.signature=e}))}}class le extends d{constructor(e,{chunkSize:t,DecompressionStream:n,se:s}){super({});const{zipCrypto:i,encrypted:o,password:c,passwordVerification:f,signed:l,signature:u,encryptionStrength:w,compressed:h,useCompressionStream:d}=e;let p,y,m=ue(super.readable);o&&(i?m=de(m,new ee(c,f)):(y=new q(c,l,w),m=de(m,y))),h&&(m=he(m,d,{chunkSize:t},s,n)),o&&!i||!l||([m,p]=m.tee(),p=de(p,new S)),we(this,m,(async()=>{if((!o||i)&&l){const e=await p.getReader().read(),t=new a(e.value.buffer);if(u!=t.getUint32(0,!1))throw new r("Invalid signature")}}))}}function ue(e){return de(e,new d({transform(e,t){e&&e.length&&t.enqueue(e)}}))}function we(e,n,r){n=de(n,new d({flush:r})),t.defineProperty(e,"readable",{get:()=>n})}function he(e,t,n,r,s){try{e=de(e,new(t&&r?r:s)("deflate-raw",n))}catch(r){if(!t)throw r;e=de(e,new s("deflate-raw",n))}return e}function de(e,t){return e.pipeThrough(t)}class pe extends d{constructor(e,n){super({});const r=this,{codecType:s}=e;let i;s.startsWith("deflate")?i=ae:s.startsWith("inflate")&&(i=le);let o=0;const c=new i(e,n),f=super.readable,a=new d({transform(e,t){e&&e.length&&(o+=e.length,t.enqueue(e))},flush(){const{signature:e}=c;t.assign(r,{signature:e,size:o})}});t.defineProperty(r,"readable",{get:()=>f.pipeThrough(c).pipeThrough(a)})}}const ye=new f,me=new f;let be=0;async function ge(e){try{const{options:t,scripts:n,config:r}=e;n&&n.length&&importScripts.apply(void 0,n),self.initCodec&&self.initCodec(),r.re=self.CompressionStream,r.se=self.DecompressionStream,self.Deflate&&(r.CompressionStream=new g(self.Deflate)),self.Inflate&&(r.DecompressionStream=new g(self.Inflate));const s={highWaterMark:1,size:()=>r.chunkSize},i=e.readable||new p({async pull(e){const t=new l((e=>ye.set(be,e)));ke({type:"pull",messageId:be}),be=(be+1)%Number.MAX_SAFE_INTEGER;const{value:n,done:r}=await t;e.enqueue(n),r&&e.close()}},s),o=e.writable||new y({async write(e){let t;const n=new l((e=>t=e));me.set(be,t),ke({type:"data",data:e,messageId:be}),be=(be+1)%Number.MAX_SAFE_INTEGER,await n}},s),c=new pe(t,r);await i.pipeThrough(c).pipeTo(o,{ie:!0});try{await o.close()}catch(e){}const{signature:f,size:a}=c;ke({type:"close",result:{signature:f,size:a}})}catch(e){ve(e)}}function ke(e){if(e.data){let{data:t}=e;if(t&&t.length)try{t=new s(t),e.data=t.buffer,h(e,[e.data])}catch(t){h(e)}else h(e)}else h(e)}function ve(e){const{message:t,stack:n,code:r,name:s}=e;h({error:{message:t,stack:n,code:r,name:s}})}function Se(t){return ze(t.map((([t,n])=>new e(t).fill(n,0,t))))}function ze(t){return t.reduce(((t,n)=>t.concat(e.isArray(n)?ze(n):n)),[])}addEventListener("message",(e=>{const t=e.data,{type:n,messageId:r,data:i,done:o}=t;try{if("start"==n&&ge(t),"data"==n){const e=ye.get(r);ye.delete(r),e({value:new s(i),done:o})}if("ack"==n){const e=me.get(r);me.delete(r),e()}}catch(e){ve(e)}}));const _e=[0,1,2,3].concat(...Se([[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 Ce(){const e=this;function t(e,t){let n=0;do{n|=1&e,e>>>=1,n<<=1}while(--t>0);return n>>>1}e.oe=r=>{const s=e.ce,i=e.ae.fe,o=e.ae.le;let c,f,a,l=-1;for(r.ue=0,r.we=573,c=0;o>c;c++)0!==s[2*c]?(r.he[++r.ue]=l=c,r.de[c]=0):s[2*c+1]=0;for(;2>r.ue;)a=r.he[++r.ue]=2>l?++l:0,s[2*a]=1,r.de[a]=0,r.pe--,i&&(r.ye-=i[2*a+1]);for(e.me=l,c=n.floor(r.ue/2);c>=1;c--)r.be(s,c);a=o;do{c=r.he[1],r.he[1]=r.he[r.ue--],r.be(s,1),f=r.he[1],r.he[--r.we]=c,r.he[--r.we]=f,s[2*a]=s[2*c]+s[2*f],r.de[a]=n.max(r.de[c],r.de[f])+1,s[2*c+1]=s[2*f+1]=a,r.he[1]=a++,r.be(s,1)}while(r.ue>=2);r.he[--r.we]=r.he[1],(t=>{const n=e.ce,r=e.ae.fe,s=e.ae.ge,i=e.ae.ke,o=e.ae.ve;let c,f,a,l,u,w,h=0;for(l=0;15>=l;l++)t.Se[l]=0;for(n[2*t.he[t.we]+1]=0,c=t.we+1;573>c;c++)f=t.he[c],l=n[2*n[2*f+1]+1]+1,l>o&&(l=o,h++),n[2*f+1]=l,f>e.me||(t.Se[l]++,u=0,i>f||(u=s[f-i]),w=n[2*f],t.pe+=w*(l+u),r&&(t.ye+=w*(r[2*f+1]+u)));if(0!==h){do{for(l=o-1;0===t.Se[l];)l--;t.Se[l]--,t.Se[l+1]+=2,t.Se[o]--,h-=2}while(h>0);for(l=o;0!==l;l--)for(f=t.Se[l];0!==f;)a=t.he[--c],a>e.me||(n[2*a+1]!=l&&(t.pe+=(l-n[2*a+1])*n[2*a],n[2*a+1]=l),f--)}})(r),((e,n,r)=>{const s=[];let i,o,c,f=0;for(i=1;15>=i;i++)s[i]=f=f+r[i-1]<<1;for(o=0;n>=o;o++)c=e[2*o+1],0!==c&&(e[2*o]=t(s[c]++,c))})(s,e.me,r.Se)}}function Ie(e,t,n,r,s){const i=this;i.fe=e,i.ge=t,i.ke=n,i.le=r,i.ve=s}Ce.ze=[0,1,2,3,4,5,6,7].concat(...Se([[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]])),Ce._e=[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],Ce.Ce=[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],Ce.Ie=e=>256>e?_e[e]:_e[256+(e>>>7)],Ce.xe=[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],Ce.Ae=[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],Ce.De=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],Ce.Ve=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];const xe=Se([[144,8],[112,9],[24,7],[8,8]]);Ie.Re=ze([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(((e,t)=>[e,xe[t]])));const Ae=Se([[30,5]]);function De(e,t,n,r,s){const i=this;i.Be=e,i.Ee=t,i.Me=n,i.Ke=r,i.Ne=s}Ie.Pe=ze([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(((e,t)=>[e,Ae[t]]))),Ie.Ue=new Ie(Ie.Re,Ce.xe,257,286,15),Ie.Te=new Ie(Ie.Pe,Ce.Ae,0,30,15),Ie.We=new Ie(null,Ce.De,0,19,7);const Ve=[new De(0,0,0,0,0),new De(4,4,8,4,1),new De(4,5,16,8,1),new De(4,6,32,32,1),new De(4,4,16,16,2),new De(8,16,32,32,2),new De(8,16,128,128,2),new De(8,32,128,256,2),new De(32,128,258,1024,2),new De(32,258,258,4096,2)],Re=["need dictionary","stream end","","","stream error","data error","","buffer error","",""];function Be(e,t,n,r){const s=e[2*t],i=e[2*n];return i>s||s==i&&r[t]<=r[n]}function Ee(){const e=this;let t,r,o,c,f,a,l,u,w,h,d,p,y,m,b,g,k,v,S,z,_,C,I,x,A,D,V,R,B,E,M,K,N;const P=new Ce,U=new Ce,T=new Ce;let W,H,L,j,F,O;function q(){let t;for(t=0;286>t;t++)M[2*t]=0;for(t=0;30>t;t++)K[2*t]=0;for(t=0;19>t;t++)N[2*t]=0;M[512]=1,e.pe=e.ye=0,H=L=0}function G(e,t){let n,r=-1,s=e[1],i=0,o=7,c=4;0===s&&(o=138,c=3),e[2*(t+1)+1]=65535;for(let f=0;t>=f;f++)n=s,s=e[2*(f+1)+1],++i<o&&n==s||(c>i?N[2*n]+=i:0!==n?(n!=r&&N[2*n]++,N[32]++):i>10?N[36]++:N[34]++,i=0,r=n,0===s?(o=138,c=3):n==s?(o=6,c=3):(o=7,c=4))}function J(t){e.He[e.pending++]=t}function Q(e){J(255&e),J(e>>>8&255)}function X(e,t){let n;const r=t;O>16-r?(n=e,F|=n<<O&65535,Q(F),F=n>>>16-O,O+=r-16):(F|=e<<O&65535,O+=r)}function Y(e,t){const n=2*e;X(65535&t[n],65535&t[n+1])}function Z(e,t){let n,r,s=-1,i=e[1],o=0,c=7,f=4;for(0===i&&(c=138,f=3),n=0;t>=n;n++)if(r=i,i=e[2*(n+1)+1],++o>=c||r!=i){if(f>o)do{Y(r,N)}while(0!=--o);else 0!==r?(r!=s&&(Y(r,N),o--),Y(16,N),X(o-3,2)):o>10?(Y(18,N),X(o-11,7)):(Y(17,N),X(o-3,3));o=0,s=r,0===i?(c=138,f=3):r==i?(c=6,f=3):(c=7,f=4)}}function $(){16==O?(Q(F),F=0,O=0):8>O||(J(255&F),F>>>=8,O-=8)}function ee(t,r){let s,i,o;if(e.Le[H]=t,e.je[H]=255&r,H++,0===t?M[2*r]++:(L++,t--,M[2*(Ce.ze[r]+256+1)]++,K[2*Ce.Ie(t)]++),0==(8191&H)&&V>2){for(s=8*H,i=_-k,o=0;30>o;o++)s+=K[2*o]*(5+Ce.Ae[o]);if(s>>>=3,L<n.floor(H/2)&&s<n.floor(i/2))return!0}return H==W-1}function te(t,n){let r,s,i,o,c=0;if(0!==H)do{r=e.Le[c],s=e.je[c],c++,0===r?Y(s,t):(i=Ce.ze[s],Y(i+256+1,t),o=Ce.xe[i],0!==o&&(s-=Ce._e[i],X(s,o)),r--,i=Ce.Ie(r),Y(i,n),o=Ce.Ae[i],0!==o&&(r-=Ce.Ce[i],X(r,o)))}while(H>c);Y(256,t),j=t[513]}function ne(){O>8?Q(F):O>0&&J(255&F),F=0,O=0}function re(t,n,r){X(0+(r?1:0),3),((t,n)=>{ne(),j=8,Q(n),Q(~n),e.He.set(u.subarray(t,t+n),e.pending),e.pending+=n})(t,n)}function se(n){((t,n,r)=>{let s,i,o=0;V>0?(P.oe(e),U.oe(e),o=(()=>{let t;for(G(M,P.me),G(K,U.me),T.oe(e),t=18;t>=3&&0===N[2*Ce.Ve[t]+1];t--);return e.pe+=14+3*(t+1),t})(),s=e.pe+3+7>>>3,i=e.ye+3+7>>>3,i>s||(s=i)):s=i=n+5,n+4>s||-1==t?i==s?(X(2+(r?1:0),3),te(Ie.Re,Ie.Pe)):(X(4+(r?1:0),3),((e,t,n)=>{let r;for(X(e-257,5),X(t-1,5),X(n-4,4),r=0;n>r;r++)X(N[2*Ce.Ve[r]+1],3);Z(M,e-1),Z(K,t-1)})(P.me+1,U.me+1,o+1),te(M,K)):re(t,n,r),q(),r&&ne()})(0>k?-1:k,_-k,n),k=_,t.Fe()}function ie(){let e,n,r,s;do{if(s=w-I-_,0===s&&0===_&&0===I)s=f;else if(-1==s)s--;else if(_>=f+f-262){u.set(u.subarray(f,f+f),0),C-=f,_-=f,k-=f,e=y,r=e;do{n=65535&d[--r],d[r]=f>n?0:n-f}while(0!=--e);e=f,r=e;do{n=65535&h[--r],h[r]=f>n?0:n-f}while(0!=--e);s+=f}if(0===t.Oe)return;e=t.qe(u,_+I,s),I+=e,3>I||(p=255&u[_],p=(p<<g^255&u[_+1])&b)}while(262>I&&0!==t.Oe)}function oe(e){let t,n,r=A,s=_,i=x;const o=_>f-262?_-(f-262):0;let c=E;const a=l,w=_+258;let d=u[s+i-1],p=u[s+i];B>x||(r>>=2),c>I&&(c=I);do{if(t=e,u[t+i]==p&&u[t+i-1]==d&&u[t]==u[s]&&u[++t]==u[s+1]){s+=2,t++;do{}while(u[++s]==u[++t]&&u[++s]==u[++t]&&u[++s]==u[++t]&&u[++s]==u[++t]&&u[++s]==u[++t]&&u[++s]==u[++t]&&u[++s]==u[++t]&&u[++s]==u[++t]&&w>s);if(n=258-(w-s),s=w-258,n>i){if(C=e,i=n,n>=c)break;d=u[s+i-1],p=u[s+i]}}}while((e=65535&h[e&a])>o&&0!=--r);return i>I?I:i}e.de=[],e.Se=[],e.he=[],M=[],K=[],N=[],e.be=(t,n)=>{const r=e.he,s=r[n];let i=n<<1;for(;i<=e.ue&&(i<e.ue&&Be(t,r[i+1],r[i],e.de)&&i++,!Be(t,s,r[i],e.de));)r[n]=r[i],n=i,i<<=1;r[n]=s},e.Ge=(t,S,C,H,L,G)=>(H||(H=8),L||(L=8),G||(G=0),t.Je=null,-1==S&&(S=6),1>L||L>9||8!=H||9>C||C>15||0>S||S>9||0>G||G>2?-2:(t.Qe=e,a=C,f=1<<a,l=f-1,m=L+7,y=1<<m,b=y-1,g=n.floor((m+3-1)/3),u=new s(2*f),h=[],d=[],W=1<<L+6,e.He=new s(4*W),o=4*W,e.Le=new i(W),e.je=new s(W),V=S,R=G,(t=>(t.Xe=t.Ye=0,t.Je=null,e.pending=0,e.Ze=0,r=113,c=0,P.ce=M,P.ae=Ie.Ue,U.ce=K,U.ae=Ie.Te,T.ce=N,T.ae=Ie.We,F=0,O=0,j=8,q(),(()=>{w=2*f,d[y-1]=0;for(let e=0;y-1>e;e++)d[e]=0;D=Ve[V].Ee,B=Ve[V].Be,E=Ve[V].Me,A=Ve[V].Ke,_=0,k=0,I=0,v=x=2,z=0,p=0})(),0))(t))),e.$e=()=>42!=r&&113!=r&&666!=r?-2:(e.je=null,e.Le=null,e.He=null,d=null,h=null,u=null,e.Qe=null,113==r?-3:0),e.et=(e,t,n)=>{let r=0;return-1==t&&(t=6),0>t||t>9||0>n||n>2?-2:(Ve[V].Ne!=Ve[t].Ne&&0!==e.Xe&&(r=e.tt(1)),V!=t&&(V=t,D=Ve[V].Ee,B=Ve[V].Be,E=Ve[V].Me,A=Ve[V].Ke),R=n,r)},e.nt=(e,t,n)=>{let s,i=n,o=0;if(!t||42!=r)return-2;if(3>i)return 0;for(i>f-262&&(i=f-262,o=n-i),u.set(t.subarray(o,o+i),0),_=i,k=i,p=255&u[0],p=(p<<g^255&u[1])&b,s=0;i-3>=s;s++)p=(p<<g^255&u[s+2])&b,h[s&l]=d[p],d[p]=s;return 0},e.tt=(n,s)=>{let i,w,m,A,B;if(s>4||0>s)return-2;if(!n.rt||!n.st&&0!==n.Oe||666==r&&4!=s)return n.Je=Re[4],-2;if(0===n.it)return n.Je=Re[7],-5;var E;if(t=n,A=c,c=s,42==r&&(w=8+(a-8<<4)<<8,m=(V-1&255)>>1,m>3&&(m=3),w|=m<<6,0!==_&&(w|=32),w+=31-w%31,r=113,J((E=w)>>8&255),J(255&E)),0!==e.pending){if(t.Fe(),0===t.it)return c=-1,0}else if(0===t.Oe&&A>=s&&4!=s)return t.Je=Re[7],-5;if(666==r&&0!==t.Oe)return n.Je=Re[7],-5;if(0!==t.Oe||0!==I||0!=s&&666!=r){switch(B=-1,Ve[V].Ne){case 0:B=(e=>{let n,r=65535;for(r>o-5&&(r=o-5);;){if(1>=I){if(ie(),0===I&&0==e)return 0;if(0===I)break}if(_+=I,I=0,n=k+r,(0===_||_>=n)&&(I=_-n,_=n,se(!1),0===t.it))return 0;if(_-k>=f-262&&(se(!1),0===t.it))return 0}return se(4==e),0===t.it?4==e?2:0:4==e?3:1})(s);break;case 1:B=(e=>{let n,r=0;for(;;){if(262>I){if(ie(),262>I&&0==e)return 0;if(0===I)break}if(3>I||(p=(p<<g^255&u[_+2])&b,r=65535&d[p],h[_&l]=d[p],d[p]=_),0===r||(_-r&65535)>f-262||2!=R&&(v=oe(r)),3>v)n=ee(0,255&u[_]),I--,_++;else if(n=ee(_-C,v-3),I-=v,v>D||3>I)_+=v,v=0,p=255&u[_],p=(p<<g^255&u[_+1])&b;else{v--;do{_++,p=(p<<g^255&u[_+2])&b,r=65535&d[p],h[_&l]=d[p],d[p]=_}while(0!=--v);_++}if(n&&(se(!1),0===t.it))return 0}return se(4==e),0===t.it?4==e?2:0:4==e?3:1})(s);break;case 2:B=(e=>{let n,r,s=0;for(;;){if(262>I){if(ie(),262>I&&0==e)return 0;if(0===I)break}if(3>I||(p=(p<<g^255&u[_+2])&b,s=65535&d[p],h[_&l]=d[p],d[p]=_),x=v,S=C,v=2,0!==s&&D>x&&f-262>=(_-s&65535)&&(2!=R&&(v=oe(s)),5>=v&&(1==R||3==v&&_-C>4096)&&(v=2)),3>x||v>x)if(0!==z){if(n=ee(0,255&u[_-1]),n&&se(!1),_++,I--,0===t.it)return 0}else z=1,_++,I--;else{r=_+I-3,n=ee(_-1-S,x-3),I-=x-1,x-=2;do{++_>r||(p=(p<<g^255&u[_+2])&b,s=65535&d[p],h[_&l]=d[p],d[p]=_)}while(0!=--x);if(z=0,v=2,_++,n&&(se(!1),0===t.it))return 0}}return 0!==z&&(n=ee(0,255&u[_-1]),z=0),se(4==e),0===t.it?4==e?2:0:4==e?3:1})(s)}if(2!=B&&3!=B||(r=666),0==B||2==B)return 0===t.it&&(c=-1),0;if(1==B){if(1==s)X(2,3),Y(256,Ie.Re),$(),9>1+j+10-O&&(X(2,3),Y(256,Ie.Re),$()),j=7;else if(re(0,0,!1),3==s)for(i=0;y>i;i++)d[i]=0;if(t.Fe(),0===t.it)return c=-1,0}}return 4!=s?0:1}}function Me(){const e=this;e.ot=0,e.ct=0,e.Oe=0,e.Xe=0,e.it=0,e.Ye=0}function Ke(e){const t=new Me,i=(o=e&&e.chunkSize?e.chunkSize:65536)+5*(n.floor(o/16383)+1);var o;const c=new s(i);let f=e?e.level:-1;void 0===f&&(f=-1),t.Ge(f),t.rt=c,this.append=(e,n)=>{let o,f,a=0,l=0,u=0;const w=[];if(e.length){t.ot=0,t.st=e,t.Oe=e.length;do{if(t.ct=0,t.it=i,o=t.tt(0),0!=o)throw new r("deflating: "+t.Je);t.ct&&(t.ct==i?w.push(new s(c)):w.push(c.slice(0,t.ct))),u+=t.ct,n&&t.ot>0&&t.ot!=a&&(n(t.ot),a=t.ot)}while(t.Oe>0||0===t.it);return w.length>1?(f=new s(u),w.forEach((e=>{f.set(e,l),l+=e.length}))):f=w[0]||new s,f}},this.flush=()=>{let e,n,o=0,f=0;const a=[];do{if(t.ct=0,t.it=i,e=t.tt(4),1!=e&&0!=e)throw new r("deflating: "+t.Je);i-t.it>0&&a.push(c.slice(0,t.ct)),f+=t.ct}while(t.Oe>0||0===t.it);return t.$e(),n=new s(f),a.forEach((e=>{n.set(e,o),o+=e.length})),n}}Me.prototype={Ge(e,t){const n=this;return n.Qe=new Ee,t||(t=15),n.Qe.Ge(n,e,t)},tt(e){const t=this;return t.Qe?t.Qe.tt(t,e):-2},$e(){const e=this;if(!e.Qe)return-2;const t=e.Qe.$e();return e.Qe=null,t},et(e,t){const n=this;return n.Qe?n.Qe.et(n,e,t):-2},nt(e,t){const n=this;return n.Qe?n.Qe.nt(n,e,t):-2},qe(e,t,n){const r=this;let s=r.Oe;return s>n&&(s=n),0===s?0:(r.Oe-=s,e.set(r.st.subarray(r.ot,r.ot+s),t),r.ot+=s,r.Xe+=s,s)},Fe(){const e=this;let t=e.Qe.pending;t>e.it&&(t=e.it),0!==t&&(e.rt.set(e.Qe.He.subarray(e.Qe.Ze,e.Qe.Ze+t),e.ct),e.ct+=t,e.Qe.Ze+=t,e.Ye+=t,e.it-=t,e.Qe.pending-=t,0===e.Qe.pending&&(e.Qe.Ze=0))}};const Ne=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535],Pe=[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],Ue=[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],Te=[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],We=[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],He=[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],Le=[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 je(){let e,t,n,r,s,i;function o(e,t,o,c,f,a,l,u,w,h,d){let p,y,m,b,g,k,v,S,z,_,C,I,x,A,D;_=0,g=o;do{n[e[t+_]]++,_++,g--}while(0!==g);if(n[0]==o)return l[0]=-1,u[0]=0,0;for(S=u[0],k=1;15>=k&&0===n[k];k++);for(v=k,k>S&&(S=k),g=15;0!==g&&0===n[g];g--);for(m=g,S>g&&(S=g),u[0]=S,A=1<<k;g>k;k++,A<<=1)if(0>(A-=n[k]))return-3;if(0>(A-=n[g]))return-3;for(n[g]+=A,i[1]=k=0,_=1,x=2;0!=--g;)i[x]=k+=n[_],x++,_++;g=0,_=0;do{0!==(k=e[t+_])&&(d[i[k]++]=g),_++}while(++g<o);for(o=i[m],i[0]=g=0,_=0,b=-1,I=-S,s[0]=0,C=0,D=0;m>=v;v++)for(p=n[v];0!=p--;){for(;v>I+S;){if(b++,I+=S,D=m-I,D=D>S?S:D,(y=1<<(k=v-I))>p+1&&(y-=p+1,x=v,D>k))for(;++k<D&&(y<<=1)>n[++x];)y-=n[x];if(D=1<<k,h[0]+D>1440)return-3;s[b]=C=h[0],h[0]+=D,0!==b?(i[b]=g,r[0]=k,r[1]=S,k=g>>>I-S,r[2]=C-s[b-1]-k,w.set(r,3*(s[b-1]+k))):l[0]=C}for(r[1]=v-I,o>_?d[_]<c?(r[0]=256>d[_]?0:96,r[2]=d[_++]):(r[0]=a[d[_]-c]+16+64,r[2]=f[d[_++]-c]):r[0]=192,y=1<<v-I,k=g>>>I;D>k;k+=y)w.set(r,3*(C+k));for(k=1<<v-1;0!=(g&k);k>>>=1)g^=k;for(g^=k,z=(1<<I)-1;(g&z)!=i[b];)b--,I-=S,z=(1<<I)-1}return 0!==A&&1!=m?-5:0}function f(o){let f;for(e||(e=[],t=[],n=new c(16),r=[],s=new c(15),i=new c(16)),t.length<o&&(t=[]),f=0;o>f;f++)t[f]=0;for(f=0;16>f;f++)n[f]=0;for(f=0;3>f;f++)r[f]=0;s.set(n.subarray(0,15),0),i.set(n.subarray(0,16),0)}this.ft=(n,r,s,i,c)=>{let a;return f(19),e[0]=0,a=o(n,0,19,19,null,null,s,r,i,e,t),-3==a?c.Je="oversubscribed dynamic bit lengths tree":-5!=a&&0!==r[0]||(c.Je="incomplete dynamic bit lengths tree",a=-3),a},this.lt=(n,r,s,i,c,a,l,u,w)=>{let h;return f(288),e[0]=0,h=o(s,0,n,257,Te,We,a,i,u,e,t),0!=h||0===i[0]?(-3==h?w.Je="oversubscribed literal/length tree":-4!=h&&(w.Je="incomplete literal/length tree",h=-3),h):(f(288),h=o(s,n,r,0,He,Le,l,c,u,e,t),0!=h||0===c[0]&&n>257?(-3==h?w.Je="oversubscribed distance tree":-5==h?(w.Je="incomplete distance tree",h=-3):-4!=h&&(w.Je="empty distance tree with lengths",h=-3),h):0)}}function Fe(){const e=this;let t,n,r,s,i=0,o=0,c=0,f=0,a=0,l=0,u=0,w=0,h=0,d=0;function p(e,t,n,r,s,i,o,c){let f,a,l,u,w,h,d,p,y,m,b,g,k,v,S,z;d=c.ot,p=c.Oe,w=o.ut,h=o.wt,y=o.write,m=y<o.read?o.read-y-1:o.end-y,b=Ne[e],g=Ne[t];do{for(;20>h;)p--,w|=(255&c.ht(d++))<<h,h+=8;if(f=w&b,a=n,l=r,z=3*(l+f),0!==(u=a[z]))for(;;){if(w>>=a[z+1],h-=a[z+1],0!=(16&u)){for(u&=15,k=a[z+2]+(w&Ne[u]),w>>=u,h-=u;15>h;)p--,w|=(255&c.ht(d++))<<h,h+=8;for(f=w&g,a=s,l=i,z=3*(l+f),u=a[z];;){if(w>>=a[z+1],h-=a[z+1],0!=(16&u)){for(u&=15;u>h;)p--,w|=(255&c.ht(d++))<<h,h+=8;if(v=a[z+2]+(w&Ne[u]),w>>=u,h-=u,m-=k,v>y){S=y-v;do{S+=o.end}while(0>S);if(u=o.end-S,k>u){if(k-=u,y-S>0&&u>y-S)do{o.dt[y++]=o.dt[S++]}while(0!=--u);else o.dt.set(o.dt.subarray(S,S+u),y),y+=u,S+=u,u=0;S=0}}else S=y-v,y-S>0&&2>y-S?(o.dt[y++]=o.dt[S++],o.dt[y++]=o.dt[S++],k-=2):(o.dt.set(o.dt.subarray(S,S+2),y),y+=2,S+=2,k-=2);if(y-S>0&&k>y-S)do{o.dt[y++]=o.dt[S++]}while(0!=--k);else o.dt.set(o.dt.subarray(S,S+k),y),y+=k,S+=k,k=0;break}if(0!=(64&u))return c.Je="invalid distance code",k=c.Oe-p,k=k>h>>3?h>>3:k,p+=k,d-=k,h-=k<<3,o.ut=w,o.wt=h,c.Oe=p,c.Xe+=d-c.ot,c.ot=d,o.write=y,-3;f+=a[z+2],f+=w&Ne[u],z=3*(l+f),u=a[z]}break}if(0!=(64&u))return 0!=(32&u)?(k=c.Oe-p,k=k>h>>3?h>>3:k,p+=k,d-=k,h-=k<<3,o.ut=w,o.wt=h,c.Oe=p,c.Xe+=d-c.ot,c.ot=d,o.write=y,1):(c.Je="invalid literal/length code",k=c.Oe-p,k=k>h>>3?h>>3:k,p+=k,d-=k,h-=k<<3,o.ut=w,o.wt=h,c.Oe=p,c.Xe+=d-c.ot,c.ot=d,o.write=y,-3);if(f+=a[z+2],f+=w&Ne[u],z=3*(l+f),0===(u=a[z])){w>>=a[z+1],h-=a[z+1],o.dt[y++]=a[z+2],m--;break}}else w>>=a[z+1],h-=a[z+1],o.dt[y++]=a[z+2],m--}while(m>=258&&p>=10);return k=c.Oe-p,k=k>h>>3?h>>3:k,p+=k,d-=k,h-=k<<3,o.ut=w,o.wt=h,c.Oe=p,c.Xe+=d-c.ot,c.ot=d,o.write=y,0}e.init=(e,i,o,c,f,a)=>{t=0,u=e,w=i,r=o,h=c,s=f,d=a,n=null},e.yt=(e,y,m)=>{let b,g,k,v,S,z,_,C=0,I=0,x=0;for(x=y.ot,v=y.Oe,C=e.ut,I=e.wt,S=e.write,z=S<e.read?e.read-S-1:e.end-S;;)switch(t){case 0:if(z>=258&&v>=10&&(e.ut=C,e.wt=I,y.Oe=v,y.Xe+=x-y.ot,y.ot=x,e.write=S,m=p(u,w,r,h,s,d,e,y),x=y.ot,v=y.Oe,C=e.ut,I=e.wt,S=e.write,z=S<e.read?e.read-S-1:e.end-S,0!=m)){t=1==m?7:9;break}c=u,n=r,o=h,t=1;case 1:for(b=c;b>I;){if(0===v)return e.ut=C,e.wt=I,y.Oe=v,y.Xe+=x-y.ot,y.ot=x,e.write=S,e.bt(y,m);m=0,v--,C|=(255&y.ht(x++))<<I,I+=8}if(g=3*(o+(C&Ne[b])),C>>>=n[g+1],I-=n[g+1],k=n[g],0===k){f=n[g+2],t=6;break}if(0!=(16&k)){a=15&k,i=n[g+2],t=2;break}if(0==(64&k)){c=k,o=g/3+n[g+2];break}if(0!=(32&k)){t=7;break}return t=9,y.Je="invalid literal/length code",m=-3,e.ut=C,e.wt=I,y.Oe=v,y.Xe+=x-y.ot,y.ot=x,e.write=S,e.bt(y,m);case 2:for(b=a;b>I;){if(0===v)return e.ut=C,e.wt=I,y.Oe=v,y.Xe+=x-y.ot,y.ot=x,e.write=S,e.bt(y,m);m=0,v--,C|=(255&y.ht(x++))<<I,I+=8}i+=C&Ne[b],C>>=b,I-=b,c=w,n=s,o=d,t=3;case 3:for(b=c;b>I;){if(0===v)return e.ut=C,e.wt=I,y.Oe=v,y.Xe+=x-y.ot,y.ot=x,e.write=S,e.bt(y,m);m=0,v--,C|=(255&y.ht(x++))<<I,I+=8}if(g=3*(o+(C&Ne[b])),C>>=n[g+1],I-=n[g+1],k=n[g],0!=(16&k)){a=15&k,l=n[g+2],t=4;break}if(0==(64&k)){c=k,o=g/3+n[g+2];break}return t=9,y.Je="invalid distance code",m=-3,e.ut=C,e.wt=I,y.Oe=v,y.Xe+=x-y.ot,y.ot=x,e.write=S,e.bt(y,m);case 4:for(b=a;b>I;){if(0===v)return e.ut=C,e.wt=I,y.Oe=v,y.Xe+=x-y.ot,y.ot=x,e.write=S,e.bt(y,m);m=0,v--,C|=(255&y.ht(x++))<<I,I+=8}l+=C&Ne[b],C>>=b,I-=b,t=5;case 5:for(_=S-l;0>_;)_+=e.end;for(;0!==i;){if(0===z&&(S==e.end&&0!==e.read&&(S=0,z=S<e.read?e.read-S-1:e.end-S),0===z&&(e.write=S,m=e.bt(y,m),S=e.write,z=S<e.read?e.read-S-1:e.end-S,S==e.end&&0!==e.read&&(S=0,z=S<e.read?e.read-S-1:e.end-S),0===z)))return e.ut=C,e.wt=I,y.Oe=v,y.Xe+=x-y.ot,y.ot=x,e.write=S,e.bt(y,m);e.dt[S++]=e.dt[_++],z--,_==e.end&&(_=0),i--}t=0;break;case 6:if(0===z&&(S==e.end&&0!==e.read&&(S=0,z=S<e.read?e.read-S-1:e.end-S),0===z&&(e.write=S,m=e.bt(y,m),S=e.write,z=S<e.read?e.read-S-1:e.end-S,S==e.end&&0!==e.read&&(S=0,z=S<e.read?e.read-S-1:e.end-S),0===z)))return e.ut=C,e.wt=I,y.Oe=v,y.Xe+=x-y.ot,y.ot=x,e.write=S,e.bt(y,m);m=0,e.dt[S++]=f,z--,t=0;break;case 7:if(I>7&&(I-=8,v++,x--),e.write=S,m=e.bt(y,m),S=e.write,z=S<e.read?e.read-S-1:e.end-S,e.read!=e.write)return e.ut=C,e.wt=I,y.Oe=v,y.Xe+=x-y.ot,y.ot=x,e.write=S,e.bt(y,m);t=8;case 8:return m=1,e.ut=C,e.wt=I,y.Oe=v,y.Xe+=x-y.ot,y.ot=x,e.write=S,e.bt(y,m);case 9:return m=-3,e.ut=C,e.wt=I,y.Oe=v,y.Xe+=x-y.ot,y.ot=x,e.write=S,e.bt(y,m);default:return m=-2,e.ut=C,e.wt=I,y.Oe=v,y.Xe+=x-y.ot,y.ot=x,e.write=S,e.bt(y,m)}},e.gt=()=>{}}je.kt=(e,t,n,r)=>(e[0]=9,t[0]=5,n[0]=Pe,r[0]=Ue,0);const Oe=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];function qe(e,t){const n=this;let r,i=0,o=0,f=0,a=0;const l=[0],u=[0],w=new Fe;let h=0,d=new c(4320);const p=new je;n.wt=0,n.ut=0,n.dt=new s(t),n.end=t,n.read=0,n.write=0,n.reset=(e,t)=>{t&&(t[0]=0),6==i&&w.gt(e),i=0,n.wt=0,n.ut=0,n.read=n.write=0},n.reset(e,null),n.bt=(e,t)=>{let r,s,i;return s=e.ct,i=n.read,r=(i>n.write?n.end:n.write)-i,r>e.it&&(r=e.it),0!==r&&-5==t&&(t=0),e.it-=r,e.Ye+=r,e.rt.set(n.dt.subarray(i,i+r),s),s+=r,i+=r,i==n.end&&(i=0,n.write==n.end&&(n.write=0),r=n.write-i,r>e.it&&(r=e.it),0!==r&&-5==t&&(t=0),e.it-=r,e.Ye+=r,e.rt.set(n.dt.subarray(i,i+r),s),s+=r,i+=r),e.ct=s,n.read=i,t},n.yt=(e,t)=>{let s,c,y,m,b,g,k,v;for(m=e.ot,b=e.Oe,c=n.ut,y=n.wt,g=n.write,k=g<n.read?n.read-g-1:n.end-g;;){let S,z,_,C,I,x,A,D;switch(i){case 0:for(;3>y;){if(0===b)return n.ut=c,n.wt=y,e.Oe=b,e.Xe+=m-e.ot,e.ot=m,n.write=g,n.bt(e,t);t=0,b--,c|=(255&e.ht(m++))<<y,y+=8}switch(s=7&c,h=1&s,s>>>1){case 0:c>>>=3,y-=3,s=7&y,c>>>=s,y-=s,i=1;break;case 1:S=[],z=[],_=[[]],C=[[]],je.kt(S,z,_,C),w.init(S[0],z[0],_[0],0,C[0],0),c>>>=3,y-=3,i=6;break;case 2:c>>>=3,y-=3,i=3;break;case 3:return c>>>=3,y-=3,i=9,e.Je="invalid block type",t=-3,n.ut=c,n.wt=y,e.Oe=b,e.Xe+=m-e.ot,e.ot=m,n.write=g,n.bt(e,t)}break;case 1:for(;32>y;){if(0===b)return n.ut=c,n.wt=y,e.Oe=b,e.Xe+=m-e.ot,e.ot=m,n.write=g,n.bt(e,t);t=0,b--,c|=(255&e.ht(m++))<<y,y+=8}if((~c>>>16&65535)!=(65535&c))return i=9,e.Je="invalid stored block lengths",t=-3,n.ut=c,n.wt=y,e.Oe=b,e.Xe+=m-e.ot,e.ot=m,n.write=g,n.bt(e,t);o=65535&c,c=y=0,i=0!==o?2:0!==h?7:0;break;case 2:if(0===b)return n.ut=c,n.wt=y,e.Oe=b,e.Xe+=m-e.ot,e.ot=m,n.write=g,n.bt(e,t);if(0===k&&(g==n.end&&0!==n.read&&(g=0,k=g<n.read?n.read-g-1:n.end-g),0===k&&(n.write=g,t=n.bt(e,t),g=n.write,k=g<n.read?n.read-g-1:n.end-g,g==n.end&&0!==n.read&&(g=0,k=g<n.read?n.read-g-1:n.end-g),0===k)))return n.ut=c,n.wt=y,e.Oe=b,e.Xe+=m-e.ot,e.ot=m,n.write=g,n.bt(e,t);if(t=0,s=o,s>b&&(s=b),s>k&&(s=k),n.dt.set(e.qe(m,s),g),m+=s,b-=s,g+=s,k-=s,0!=(o-=s))break;i=0!==h?7:0;break;case 3:for(;14>y;){if(0===b)return n.ut=c,n.wt=y,e.Oe=b,e.Xe+=m-e.ot,e.ot=m,n.write=g,n.bt(e,t);t=0,b--,c|=(255&e.ht(m++))<<y,y+=8}if(f=s=16383&c,(31&s)>29||(s>>5&31)>29)return i=9,e.Je="too many length or distance symbols",t=-3,n.ut=c,n.wt=y,e.Oe=b,e.Xe+=m-e.ot,e.ot=m,n.write=g,n.bt(e,t);if(s=258+(31&s)+(s>>5&31),!r||r.length<s)r=[];else for(v=0;s>v;v++)r[v]=0;c>>>=14,y-=14,a=0,i=4;case 4:for(;4+(f>>>10)>a;){for(;3>y;){if(0===b)return n.ut=c,n.wt=y,e.Oe=b,e.Xe+=m-e.ot,e.ot=m,n.write=g,n.bt(e,t);t=0,b--,c|=(255&e.ht(m++))<<y,y+=8}r[Oe[a++]]=7&c,c>>>=3,y-=3}for(;19>a;)r[Oe[a++]]=0;if(l[0]=7,s=p.ft(r,l,u,d,e),0!=s)return-3==(t=s)&&(r=null,i=9),n.ut=c,n.wt=y,e.Oe=b,e.Xe+=m-e.ot,e.ot=m,n.write=g,n.bt(e,t);a=0,i=5;case 5:for(;s=f,258+(31&s)+(s>>5&31)>a;){let o,w;for(s=l[0];s>y;){if(0===b)return n.ut=c,n.wt=y,e.Oe=b,e.Xe+=m-e.ot,e.ot=m,n.write=g,n.bt(e,t);t=0,b--,c|=(255&e.ht(m++))<<y,y+=8}if(s=d[3*(u[0]+(c&Ne[s]))+1],w=d[3*(u[0]+(c&Ne[s]))+2],16>w)c>>>=s,y-=s,r[a++]=w;else{for(v=18==w?7:w-14,o=18==w?11:3;s+v>y;){if(0===b)return n.ut=c,n.wt=y,e.Oe=b,e.Xe+=m-e.ot,e.ot=m,n.write=g,n.bt(e,t);t=0,b--,c|=(255&e.ht(m++))<<y,y+=8}if(c>>>=s,y-=s,o+=c&Ne[v],c>>>=v,y-=v,v=a,s=f,v+o>258+(31&s)+(s>>5&31)||16==w&&1>v)return r=null,i=9,e.Je="invalid bit length repeat",t=-3,n.ut=c,n.wt=y,e.Oe=b,e.Xe+=m-e.ot,e.ot=m,n.write=g,n.bt(e,t);w=16==w?r[v-1]:0;do{r[v++]=w}while(0!=--o);a=v}}if(u[0]=-1,I=[],x=[],A=[],D=[],I[0]=9,x[0]=6,s=f,s=p.lt(257+(31&s),1+(s>>5&31),r,I,x,A,D,d,e),0!=s)return-3==s&&(r=null,i=9),t=s,n.ut=c,n.wt=y,e.Oe=b,e.Xe+=m-e.ot,e.ot=m,n.write=g,n.bt(e,t);w.init(I[0],x[0],d,A[0],d,D[0]),i=6;case 6:if(n.ut=c,n.wt=y,e.Oe=b,e.Xe+=m-e.ot,e.ot=m,n.write=g,1!=(t=w.yt(n,e,t)))return n.bt(e,t);if(t=0,w.gt(e),m=e.ot,b=e.Oe,c=n.ut,y=n.wt,g=n.write,k=g<n.read?n.read-g-1:n.end-g,0===h){i=0;break}i=7;case 7:if(n.write=g,t=n.bt(e,t),g=n.write,k=g<n.read?n.read-g-1:n.end-g,n.read!=n.write)return n.ut=c,n.wt=y,e.Oe=b,e.Xe+=m-e.ot,e.ot=m,n.write=g,n.bt(e,t);i=8;case 8:return t=1,n.ut=c,n.wt=y,e.Oe=b,e.Xe+=m-e.ot,e.ot=m,n.write=g,n.bt(e,t);case 9:return t=-3,n.ut=c,n.wt=y,e.Oe=b,e.Xe+=m-e.ot,e.ot=m,n.write=g,n.bt(e,t);default:return t=-2,n.ut=c,n.wt=y,e.Oe=b,e.Xe+=m-e.ot,e.ot=m,n.write=g,n.bt(e,t)}}},n.gt=e=>{n.reset(e,null),n.dt=null,d=null},n.vt=(e,t,r)=>{n.dt.set(e.subarray(t,t+r),0),n.read=n.write=r},n.St=()=>1==i?1:0}const Ge=[0,0,255,255];function Je(){const e=this;function t(e){return e&&e.zt?(e.Xe=e.Ye=0,e.Je=null,e.zt.mode=7,e.zt._t.reset(e,null),0):-2}e.mode=0,e.method=0,e.Ct=[0],e.It=0,e.marker=0,e.xt=0,e.At=t=>(e._t&&e._t.gt(t),e._t=null,0),e.Dt=(n,r)=>(n.Je=null,e._t=null,8>r||r>15?(e.At(n),-2):(e.xt=r,n.zt._t=new qe(n,1<<r),t(n),0)),e.Vt=(e,t)=>{let n,r;if(!e||!e.zt||!e.st)return-2;const s=e.zt;for(t=4==t?-5:0,n=-5;;)switch(s.mode){case 0:if(0===e.Oe)return n;if(n=t,e.Oe--,e.Xe++,8!=(15&(s.method=e.ht(e.ot++)))){s.mode=13,e.Je="unknown compression method",s.marker=5;break}if(8+(s.method>>4)>s.xt){s.mode=13,e.Je="invalid win size",s.marker=5;break}s.mode=1;case 1:if(0===e.Oe)return n;if(n=t,e.Oe--,e.Xe++,r=255&e.ht(e.ot++),((s.method<<8)+r)%31!=0){s.mode=13,e.Je="incorrect header check",s.marker=5;break}if(0==(32&r)){s.mode=7;break}s.mode=2;case 2:if(0===e.Oe)return n;n=t,e.Oe--,e.Xe++,s.It=(255&e.ht(e.ot++))<<24&4278190080,s.mode=3;case 3:if(0===e.Oe)return n;n=t,e.Oe--,e.Xe++,s.It+=(255&e.ht(e.ot++))<<16&16711680,s.mode=4;case 4:if(0===e.Oe)return n;n=t,e.Oe--,e.Xe++,s.It+=(255&e.ht(e.ot++))<<8&65280,s.mode=5;case 5:return 0===e.Oe?n:(n=t,e.Oe--,e.Xe++,s.It+=255&e.ht(e.ot++),s.mode=6,2);case 6:return s.mode=13,e.Je="need dictionary",s.marker=0,-2;case 7:if(n=s._t.yt(e,n),-3==n){s.mode=13,s.marker=0;break}if(0==n&&(n=t),1!=n)return n;n=t,s._t.reset(e,s.Ct),s.mode=12;case 12:return e.Oe=0,1;case 13:return-3;default:return-2}},e.Rt=(e,t,n)=>{let r=0,s=n;if(!e||!e.zt||6!=e.zt.mode)return-2;const i=e.zt;return s<1<<i.xt||(s=(1<<i.xt)-1,r=n-s),i._t.vt(t,r,s),i.mode=7,0},e.Bt=e=>{let n,r,s,i,o;if(!e||!e.zt)return-2;const c=e.zt;if(13!=c.mode&&(c.mode=13,c.marker=0),0===(n=e.Oe))return-5;for(r=e.ot,s=c.marker;0!==n&&4>s;)e.ht(r)==Ge[s]?s++:s=0!==e.ht(r)?0:4-s,r++,n--;return e.Xe+=r-e.ot,e.ot=r,e.Oe=n,c.marker=s,4!=s?-3:(i=e.Xe,o=e.Ye,t(e),e.Xe=i,e.Ye=o,c.mode=7,0)},e.Et=e=>e&&e.zt&&e.zt._t?e.zt._t.St():-2}function Qe(){}function Xe(e){const t=new Qe,i=e&&e.chunkSize?n.floor(2*e.chunkSize):131072,o=new s(i);let c=!1;t.Dt(),t.rt=o,this.append=(e,n)=>{const f=[];let a,l,u=0,w=0,h=0;if(0!==e.length){t.ot=0,t.st=e,t.Oe=e.length;do{if(t.ct=0,t.it=i,0!==t.Oe||c||(t.ot=0,c=!0),a=t.Vt(0),c&&-5===a){if(0!==t.Oe)throw new r("inflating: bad input")}else if(0!==a&&1!==a)throw new r("inflating: "+t.Je);if((c||1===a)&&t.Oe===e.length)throw new r("inflating: bad input");t.ct&&(t.ct===i?f.push(new s(o)):f.push(o.slice(0,t.ct))),h+=t.ct,n&&t.ot>0&&t.ot!=u&&(n(t.ot),u=t.ot)}while(t.Oe>0||0===t.it);return f.length>1?(l=new s(h),f.forEach((e=>{l.set(e,w),w+=e.length}))):l=f[0]||new s,l}},this.flush=()=>{t.At()}}Qe.prototype={Dt(e){const t=this;return t.zt=new Je,e||(e=15),t.zt.Dt(t,e)},Vt(e){const t=this;return t.zt?t.zt.Vt(t,e):-2},At(){const e=this;if(!e.zt)return-2;const t=e.zt.At(e);return e.zt=null,t},Bt(){const e=this;return e.zt?e.zt.Bt(e):-2},Rt(e,t){const n=this;return n.zt?n.zt.Rt(n,e,t):-2},ht(e){return this.st[e]},qe(e,t){return this.st.subarray(e,e+t)}},self.initCodec=()=>{self.Deflate=Ke,self.Inflate=Xe};\n'],{type:"text/javascript"}));e({workerScripts:{inflate:[t],deflate:[t]}});}
4382
4470
 
4383
4471
  /*
4384
- * SJCL is open. You can use, modify and redistribute it under a BSD
4385
- * license or under the GNU GPL, version 2.0.
4386
- */
4472
+ Copyright (c) 2022 Gildas Lormeau. All rights reserved.
4387
4473
 
4388
- /** @fileOverview Javascript cryptography implementation.
4389
- *
4390
- * Crush to remove comments, shorten variable names and
4391
- * generally reduce transmission size.
4392
- *
4393
- * @author Emily Stark
4394
- * @author Mike Hamburg
4395
- * @author Dan Boneh
4396
- */
4474
+ Redistribution and use in source and binary forms, with or without
4475
+ modification, are permitted provided that the following conditions are met:
4397
4476
 
4398
- /*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
4477
+ 1. Redistributions of source code must retain the above copyright notice,
4478
+ this list of conditions and the following disclaimer.
4399
4479
 
4400
- /** @fileOverview Arrays of bits, encoded as arrays of Numbers.
4401
- *
4402
- * @author Emily Stark
4403
- * @author Mike Hamburg
4404
- * @author Dan Boneh
4405
- */
4480
+ 2. Redistributions in binary form must reproduce the above copyright
4481
+ notice, this list of conditions and the following disclaimer in
4482
+ the documentation and/or other materials provided with the distribution.
4406
4483
 
4407
- /**
4408
- * Arrays of bits, encoded as arrays of Numbers.
4409
- * @namespace
4410
- * @description
4411
- * <p>
4412
- * These objects are the currency accepted by SJCL's crypto functions.
4413
- * </p>
4414
- *
4415
- * <p>
4416
- * Most of our crypto primitives operate on arrays of 4-byte words internally,
4417
- * but many of them can take arguments that are not a multiple of 4 bytes.
4418
- * This library encodes arrays of bits (whose size need not be a multiple of 8
4419
- * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
4420
- * array of words, 32 bits at a time. Since the words are double-precision
4421
- * floating point numbers, they fit some extra data. We use this (in a private,
4422
- * possibly-changing manner) to encode the number of bits actually present
4423
- * in the last word of the array.
4424
- * </p>
4425
- *
4426
- * <p>
4427
- * Because bitwise ops clear this out-of-band data, these arrays can be passed
4428
- * to ciphers like AES which want arrays of words.
4429
- * </p>
4484
+ 3. The names of the authors may not be used to endorse or promote products
4485
+ derived from this software without specific prior written permission.
4486
+
4487
+ THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
4488
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
4489
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
4490
+ INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
4491
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
4492
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
4493
+ OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
4494
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
4495
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
4496
+ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4430
4497
  */
4431
- const bitArray = {
4432
- /**
4433
- * Concatenate two bit arrays.
4434
- * @param {bitArray} a1 The first array.
4435
- * @param {bitArray} a2 The second array.
4436
- * @return {bitArray} The concatenation of a1 and a2.
4437
- */
4438
- concat(a1, a2) {
4439
- if (a1.length === 0 || a2.length === 0) {
4440
- return a1.concat(a2);
4441
- }
4442
4498
 
4443
- const last = a1[a1.length - 1], shift = bitArray.getPartial(last);
4444
- if (shift === 32) {
4445
- return a1.concat(a2);
4446
- } else {
4447
- return bitArray._shiftRight(a2, shift, last | 0, a1.slice(0, a1.length - 1));
4448
- }
4449
- },
4499
+ function getMimeType() {
4500
+ return "application/octet-stream";
4501
+ }
4450
4502
 
4451
- /**
4452
- * Find the length of an array of bits.
4453
- * @param {bitArray} a The array.
4503
+ function initShimAsyncCodec(library, options = {}, registerDataHandler) {
4504
+ return {
4505
+ Deflate: createCodecClass(library.Deflate, options.deflate, registerDataHandler),
4506
+ Inflate: createCodecClass(library.Inflate, options.inflate, registerDataHandler)
4507
+ };
4508
+ }
4509
+
4510
+ function createCodecClass(constructor, constructorOptions, registerDataHandler) {
4511
+ return class {
4512
+
4513
+ constructor(options) {
4514
+ const codecAdapter = this;
4515
+ const onData = data => {
4516
+ if (codecAdapter.pendingData) {
4517
+ const { pendingData } = codecAdapter;
4518
+ codecAdapter.pendingData = new Uint8Array(pendingData.length + data.length);
4519
+ pendingData.set(pendingData, 0);
4520
+ pendingData.set(data, pendingData.length);
4521
+ } else {
4522
+ codecAdapter.pendingData = new Uint8Array(data);
4523
+ }
4524
+ };
4525
+ if (Object.hasOwn(options, "level") && options.level === undefined) {
4526
+ delete options.level;
4527
+ }
4528
+ codecAdapter.codec = new constructor(Object.assign({}, constructorOptions, options));
4529
+ registerDataHandler(codecAdapter.codec, onData);
4530
+ }
4531
+ append(data) {
4532
+ this.codec.push(data);
4533
+ return getResponse(this);
4534
+ }
4535
+ flush() {
4536
+ this.codec.push(new Uint8Array(), true);
4537
+ return getResponse(this);
4538
+ }
4539
+ };
4540
+
4541
+ function getResponse(codec) {
4542
+ if (codec.pendingData) {
4543
+ const output = codec.pendingData;
4544
+ codec.pendingData = null;
4545
+ return output;
4546
+ } else {
4547
+ return new Uint8Array();
4548
+ }
4549
+ }
4550
+ }
4551
+
4552
+ /*
4553
+ Copyright (c) 2022 Gildas Lormeau. All rights reserved.
4554
+
4555
+ Redistribution and use in source and binary forms, with or without
4556
+ modification, are permitted provided that the following conditions are met:
4557
+
4558
+ 1. Redistributions of source code must retain the above copyright notice,
4559
+ this list of conditions and the following disclaimer.
4560
+
4561
+ 2. Redistributions in binary form must reproduce the above copyright
4562
+ notice, this list of conditions and the following disclaimer in
4563
+ the documentation and/or other materials provided with the distribution.
4564
+
4565
+ 3. The names of the authors may not be used to endorse or promote products
4566
+ derived from this software without specific prior written permission.
4567
+
4568
+ THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
4569
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
4570
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
4571
+ INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
4572
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
4573
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
4574
+ OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
4575
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
4576
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
4577
+ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4578
+ */
4579
+
4580
+ const table = [];
4581
+ for (let i = 0; i < 256; i++) {
4582
+ let t = i;
4583
+ for (let j = 0; j < 8; j++) {
4584
+ if (t & 1) {
4585
+ t = (t >>> 1) ^ 0xEDB88320;
4586
+ } else {
4587
+ t = t >>> 1;
4588
+ }
4589
+ }
4590
+ table[i] = t;
4591
+ }
4592
+
4593
+ class Crc32 {
4594
+
4595
+ constructor(crc) {
4596
+ this.crc = crc || -1;
4597
+ }
4598
+
4599
+ append(data) {
4600
+ let crc = this.crc | 0;
4601
+ for (let offset = 0, length = data.length | 0; offset < length; offset++) {
4602
+ crc = (crc >>> 8) ^ table[(crc ^ data[offset]) & 0xFF];
4603
+ }
4604
+ this.crc = crc;
4605
+ }
4606
+
4607
+ get() {
4608
+ return ~this.crc;
4609
+ }
4610
+ }
4611
+
4612
+ /*
4613
+ Copyright (c) 2022 Gildas Lormeau. All rights reserved.
4614
+
4615
+ Redistribution and use in source and binary forms, with or without
4616
+ modification, are permitted provided that the following conditions are met:
4617
+
4618
+ 1. Redistributions of source code must retain the above copyright notice,
4619
+ this list of conditions and the following disclaimer.
4620
+
4621
+ 2. Redistributions in binary form must reproduce the above copyright
4622
+ notice, this list of conditions and the following disclaimer in
4623
+ the documentation and/or other materials provided with the distribution.
4624
+
4625
+ 3. The names of the authors may not be used to endorse or promote products
4626
+ derived from this software without specific prior written permission.
4627
+
4628
+ THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
4629
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
4630
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
4631
+ INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
4632
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
4633
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
4634
+ OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
4635
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
4636
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
4637
+ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4638
+ */
4639
+
4640
+ class Crc32Stream extends TransformStream {
4641
+
4642
+ constructor() {
4643
+ const crc32 = new Crc32();
4644
+ super({
4645
+ transform(chunk) {
4646
+ crc32.append(chunk);
4647
+ },
4648
+ flush(controller) {
4649
+ const value = new Uint8Array(4);
4650
+ const dataView = new DataView(value.buffer);
4651
+ dataView.setUint32(0, crc32.get());
4652
+ controller.enqueue(value);
4653
+ }
4654
+ });
4655
+ }
4656
+ }
4657
+
4658
+ /*
4659
+ Copyright (c) 2022 Gildas Lormeau. All rights reserved.
4660
+
4661
+ Redistribution and use in source and binary forms, with or without
4662
+ modification, are permitted provided that the following conditions are met:
4663
+
4664
+ 1. Redistributions of source code must retain the above copyright notice,
4665
+ this list of conditions and the following disclaimer.
4666
+
4667
+ 2. Redistributions in binary form must reproduce the above copyright
4668
+ notice, this list of conditions and the following disclaimer in
4669
+ the documentation and/or other materials provided with the distribution.
4670
+
4671
+ 3. The names of the authors may not be used to endorse or promote products
4672
+ derived from this software without specific prior written permission.
4673
+
4674
+ THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
4675
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
4676
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
4677
+ INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
4678
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
4679
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
4680
+ OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
4681
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
4682
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
4683
+ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4684
+ */
4685
+
4686
+ function encodeText(value) {
4687
+ if (typeof TextEncoder == "undefined") {
4688
+ value = unescape(encodeURIComponent(value));
4689
+ const result = new Uint8Array(value.length);
4690
+ for (let i = 0; i < result.length; i++) {
4691
+ result[i] = value.charCodeAt(i);
4692
+ }
4693
+ return result;
4694
+ } else {
4695
+ return new TextEncoder().encode(value);
4696
+ }
4697
+ }
4698
+
4699
+ // Derived from https://github.com/xqdoo00o/jszip/blob/master/lib/sjcl.js and https://github.com/bitwiseshiftleft/sjcl
4700
+
4701
+ // deno-lint-ignore-file no-this-alias
4702
+
4703
+ /*
4704
+ * SJCL is open. You can use, modify and redistribute it under a BSD
4705
+ * license or under the GNU GPL, version 2.0.
4706
+ */
4707
+
4708
+ /** @fileOverview Javascript cryptography implementation.
4709
+ *
4710
+ * Crush to remove comments, shorten variable names and
4711
+ * generally reduce transmission size.
4712
+ *
4713
+ * @author Emily Stark
4714
+ * @author Mike Hamburg
4715
+ * @author Dan Boneh
4716
+ */
4717
+
4718
+ /*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
4719
+
4720
+ /** @fileOverview Arrays of bits, encoded as arrays of Numbers.
4721
+ *
4722
+ * @author Emily Stark
4723
+ * @author Mike Hamburg
4724
+ * @author Dan Boneh
4725
+ */
4726
+
4727
+ /**
4728
+ * Arrays of bits, encoded as arrays of Numbers.
4729
+ * @namespace
4730
+ * @description
4731
+ * <p>
4732
+ * These objects are the currency accepted by SJCL's crypto functions.
4733
+ * </p>
4734
+ *
4735
+ * <p>
4736
+ * Most of our crypto primitives operate on arrays of 4-byte words internally,
4737
+ * but many of them can take arguments that are not a multiple of 4 bytes.
4738
+ * This library encodes arrays of bits (whose size need not be a multiple of 8
4739
+ * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
4740
+ * array of words, 32 bits at a time. Since the words are double-precision
4741
+ * floating point numbers, they fit some extra data. We use this (in a private,
4742
+ * possibly-changing manner) to encode the number of bits actually present
4743
+ * in the last word of the array.
4744
+ * </p>
4745
+ *
4746
+ * <p>
4747
+ * Because bitwise ops clear this out-of-band data, these arrays can be passed
4748
+ * to ciphers like AES which want arrays of words.
4749
+ * </p>
4750
+ */
4751
+ const bitArray = {
4752
+ /**
4753
+ * Concatenate two bit arrays.
4754
+ * @param {bitArray} a1 The first array.
4755
+ * @param {bitArray} a2 The second array.
4756
+ * @return {bitArray} The concatenation of a1 and a2.
4757
+ */
4758
+ concat(a1, a2) {
4759
+ if (a1.length === 0 || a2.length === 0) {
4760
+ return a1.concat(a2);
4761
+ }
4762
+
4763
+ const last = a1[a1.length - 1], shift = bitArray.getPartial(last);
4764
+ if (shift === 32) {
4765
+ return a1.concat(a2);
4766
+ } else {
4767
+ return bitArray._shiftRight(a2, shift, last | 0, a1.slice(0, a1.length - 1));
4768
+ }
4769
+ },
4770
+
4771
+ /**
4772
+ * Find the length of an array of bits.
4773
+ * @param {bitArray} a The array.
4454
4774
  * @return {Number} The length of a, in bits.
4455
4775
  */
4456
4776
  bitLength(a) {
@@ -5188,58 +5508,15 @@
5188
5508
  return result;
5189
5509
  }
5190
5510
 
5191
- encrypt(data) {
5192
- if (!this._updated) {
5193
- this.update(data);
5194
- return this.digest(data);
5195
- } else {
5196
- throw new Error("encrypt on already updated hmac called!");
5197
- }
5198
- }
5199
- };
5200
-
5201
- /*
5202
- Copyright (c) 2022 Gildas Lormeau. All rights reserved.
5203
-
5204
- Redistribution and use in source and binary forms, with or without
5205
- modification, are permitted provided that the following conditions are met:
5206
-
5207
- 1. Redistributions of source code must retain the above copyright notice,
5208
- this list of conditions and the following disclaimer.
5209
-
5210
- 2. Redistributions in binary form must reproduce the above copyright
5211
- notice, this list of conditions and the following disclaimer in
5212
- the documentation and/or other materials provided with the distribution.
5213
-
5214
- 3. The names of the authors may not be used to endorse or promote products
5215
- derived from this software without specific prior written permission.
5216
-
5217
- THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
5218
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
5219
- FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
5220
- INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
5221
- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
5222
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
5223
- OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
5224
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
5225
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
5226
- EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
5227
- */
5228
-
5229
- /* global crypto */
5230
-
5231
- const GET_RANDOM_VALUES_SUPPORTED = typeof crypto != "undefined" && typeof crypto.getRandomValues == "function";
5232
-
5233
- const ERR_INVALID_PASSWORD = "Invalid password";
5234
- const ERR_INVALID_SIGNATURE = "Invalid signature";
5235
-
5236
- function getRandomValues(array) {
5237
- if (GET_RANDOM_VALUES_SUPPORTED) {
5238
- return crypto.getRandomValues(array);
5239
- } else {
5240
- return random.getRandomValues(array);
5511
+ encrypt(data) {
5512
+ if (!this._updated) {
5513
+ this.update(data);
5514
+ return this.digest(data);
5515
+ } else {
5516
+ throw new Error("encrypt on already updated hmac called!");
5517
+ }
5241
5518
  }
5242
- }
5519
+ };
5243
5520
 
5244
5521
  /*
5245
5522
  Copyright (c) 2022 Gildas Lormeau. All rights reserved.
@@ -5269,253 +5546,19 @@
5269
5546
  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
5270
5547
  */
5271
5548
 
5272
- const BLOCK_LENGTH = 16;
5273
- const RAW_FORMAT = "raw";
5274
- const PBKDF2_ALGORITHM = { name: "PBKDF2" };
5275
- const HASH_ALGORITHM = { name: "HMAC" };
5276
- const HASH_FUNCTION = "SHA-1";
5277
- const BASE_KEY_ALGORITHM = Object.assign({ hash: HASH_ALGORITHM }, PBKDF2_ALGORITHM);
5278
- const DERIVED_BITS_ALGORITHM = Object.assign({ iterations: 1000, hash: { name: HASH_FUNCTION } }, PBKDF2_ALGORITHM);
5279
- const DERIVED_BITS_USAGE = ["deriveBits"];
5280
- const SALT_LENGTH = [8, 12, 16];
5281
- const KEY_LENGTH = [16, 24, 32];
5282
- const SIGNATURE_LENGTH = 10;
5283
- const COUNTER_DEFAULT_VALUE = [0, 0, 0, 0];
5284
- const UNDEFINED_TYPE$1 = "undefined";
5285
- const FUNCTION_TYPE = "function";
5286
- const CRYPTO_API_SUPPORTED = typeof crypto != UNDEFINED_TYPE$1;
5287
- const subtle = CRYPTO_API_SUPPORTED && crypto.subtle;
5288
- const SUBTLE_API_SUPPORTED = CRYPTO_API_SUPPORTED && typeof subtle != UNDEFINED_TYPE$1;
5289
- const IMPORT_KEY_SUPPORTED = CRYPTO_API_SUPPORTED && SUBTLE_API_SUPPORTED && typeof subtle.importKey == FUNCTION_TYPE;
5290
- const DERIVE_BITS_SUPPORTED = CRYPTO_API_SUPPORTED && SUBTLE_API_SUPPORTED && typeof subtle.deriveBits == FUNCTION_TYPE;
5291
- const codecBytes = codec.bytes;
5292
- const Aes = cipher.aes;
5293
- const CtrGladman = mode.ctrGladman;
5294
- const HmacSha1 = misc.hmacSha1;
5295
-
5296
- class AESDecryptionStream extends TransformStream {
5297
-
5298
- constructor(password, signed, strength) {
5299
- super({
5300
- start() {
5301
- Object.assign(this, {
5302
- ready: new Promise(resolve => this.resolveReady = resolve),
5303
- password,
5304
- signed,
5305
- strength: strength - 1,
5306
- pending: new Uint8Array()
5307
- });
5308
- },
5309
- async transform(chunk, controller) {
5310
- const aesCrypto = this;
5311
- const {
5312
- password,
5313
- strength,
5314
- resolveReady,
5315
- ready
5316
- } = aesCrypto;
5317
- if (password) {
5318
- await createDecryptionKeys(aesCrypto, strength, password, subarray(chunk, 0, SALT_LENGTH[strength] + 2));
5319
- chunk = subarray(chunk, SALT_LENGTH[strength] + 2);
5320
- resolveReady();
5321
- } else {
5322
- await ready;
5323
- }
5324
- const output = new Uint8Array(chunk.length - SIGNATURE_LENGTH - ((chunk.length - SIGNATURE_LENGTH) % BLOCK_LENGTH));
5325
- controller.enqueue(append(aesCrypto, chunk, output, 0, SIGNATURE_LENGTH, true));
5326
- },
5327
- async flush(controller) {
5328
- const {
5329
- signed,
5330
- ctr,
5331
- hmac,
5332
- pending,
5333
- ready
5334
- } = this;
5335
- await ready;
5336
- const chunkToDecrypt = subarray(pending, 0, pending.length - SIGNATURE_LENGTH);
5337
- const originalSignature = subarray(pending, pending.length - SIGNATURE_LENGTH);
5338
- let decryptedChunkArray = new Uint8Array();
5339
- if (chunkToDecrypt.length) {
5340
- const encryptedChunk = toBits(codecBytes, chunkToDecrypt);
5341
- hmac.update(encryptedChunk);
5342
- const decryptedChunk = ctr.update(encryptedChunk);
5343
- decryptedChunkArray = fromBits(codecBytes, decryptedChunk);
5344
- }
5345
- if (signed) {
5346
- const signature = subarray(fromBits(codecBytes, hmac.digest()), 0, SIGNATURE_LENGTH);
5347
- for (let indexSignature = 0; indexSignature < SIGNATURE_LENGTH; indexSignature++) {
5348
- if (signature[indexSignature] != originalSignature[indexSignature]) {
5349
- throw new Error(ERR_INVALID_SIGNATURE);
5350
- }
5351
- }
5352
- }
5353
- controller.enqueue(decryptedChunkArray);
5354
- }
5355
- });
5356
- }
5357
- }
5358
-
5359
- class AESEncryptionStream extends TransformStream {
5360
-
5361
- constructor(password, strength) {
5362
- let stream;
5363
- super({
5364
- start() {
5365
- Object.assign(this, {
5366
- ready: new Promise(resolve => this.resolveReady = resolve),
5367
- password,
5368
- strength: strength - 1,
5369
- pending: new Uint8Array()
5370
- });
5371
- },
5372
- async transform(chunk, controller) {
5373
- const aesCrypto = this;
5374
- const {
5375
- password,
5376
- strength,
5377
- resolveReady,
5378
- ready
5379
- } = aesCrypto;
5380
- let preamble = new Uint8Array();
5381
- if (password) {
5382
- preamble = await createEncryptionKeys(aesCrypto, strength, password);
5383
- resolveReady();
5384
- } else {
5385
- await ready;
5386
- }
5387
- const output = new Uint8Array(preamble.length + chunk.length - (chunk.length % BLOCK_LENGTH));
5388
- output.set(preamble, 0);
5389
- controller.enqueue(append(aesCrypto, chunk, output, preamble.length, 0));
5390
- },
5391
- async flush(controller) {
5392
- const {
5393
- ctr,
5394
- hmac,
5395
- pending,
5396
- ready
5397
- } = this;
5398
- await ready;
5399
- let encryptedChunkArray = new Uint8Array();
5400
- if (pending.length) {
5401
- const encryptedChunk = ctr.update(toBits(codecBytes, pending));
5402
- hmac.update(encryptedChunk);
5403
- encryptedChunkArray = fromBits(codecBytes, encryptedChunk);
5404
- }
5405
- stream.signature = fromBits(codecBytes, hmac.digest()).slice(0, SIGNATURE_LENGTH);
5406
- controller.enqueue(concat(encryptedChunkArray, stream.signature));
5407
- }
5408
- });
5409
- stream = this;
5410
- }
5411
- }
5412
-
5413
- function append(aesCrypto, input, output, paddingStart, paddingEnd, verifySignature) {
5414
- const {
5415
- ctr,
5416
- hmac,
5417
- pending
5418
- } = aesCrypto;
5419
- const inputLength = input.length - paddingEnd;
5420
- if (pending.length) {
5421
- input = concat(pending, input);
5422
- output = expand(output, inputLength - (inputLength % BLOCK_LENGTH));
5423
- }
5424
- let offset;
5425
- for (offset = 0; offset <= inputLength - BLOCK_LENGTH; offset += BLOCK_LENGTH) {
5426
- const inputChunk = toBits(codecBytes, subarray(input, offset, offset + BLOCK_LENGTH));
5427
- if (verifySignature) {
5428
- hmac.update(inputChunk);
5429
- }
5430
- const outputChunk = ctr.update(inputChunk);
5431
- if (!verifySignature) {
5432
- hmac.update(outputChunk);
5433
- }
5434
- output.set(fromBits(codecBytes, outputChunk), offset + paddingStart);
5435
- }
5436
- aesCrypto.pending = subarray(input, offset);
5437
- return output;
5438
- }
5439
-
5440
- async function createDecryptionKeys(decrypt, strength, password, preamble) {
5441
- const passwordVerificationKey = await createKeys$1(decrypt, strength, password, subarray(preamble, 0, SALT_LENGTH[strength]));
5442
- const passwordVerification = subarray(preamble, SALT_LENGTH[strength]);
5443
- if (passwordVerificationKey[0] != passwordVerification[0] || passwordVerificationKey[1] != passwordVerification[1]) {
5444
- throw new Error(ERR_INVALID_PASSWORD);
5445
- }
5446
- }
5447
-
5448
- async function createEncryptionKeys(encrypt, strength, password) {
5449
- const salt = getRandomValues(new Uint8Array(SALT_LENGTH[strength]));
5450
- const passwordVerification = await createKeys$1(encrypt, strength, password, salt);
5451
- return concat(salt, passwordVerification);
5452
- }
5453
-
5454
- async function createKeys$1(aesCrypto, strength, password, salt) {
5455
- aesCrypto.password = null;
5456
- const encodedPassword = encodeText(password);
5457
- const baseKey = await importKey(RAW_FORMAT, encodedPassword, BASE_KEY_ALGORITHM, false, DERIVED_BITS_USAGE);
5458
- const derivedBits = await deriveBits(Object.assign({ salt }, DERIVED_BITS_ALGORITHM), baseKey, 8 * ((KEY_LENGTH[strength] * 2) + 2));
5459
- const compositeKey = new Uint8Array(derivedBits);
5460
- const key = toBits(codecBytes, subarray(compositeKey, 0, KEY_LENGTH[strength]));
5461
- const authentication = toBits(codecBytes, subarray(compositeKey, KEY_LENGTH[strength], KEY_LENGTH[strength] * 2));
5462
- const passwordVerification = subarray(compositeKey, KEY_LENGTH[strength] * 2);
5463
- Object.assign(aesCrypto, {
5464
- keys: {
5465
- key,
5466
- authentication,
5467
- passwordVerification
5468
- },
5469
- ctr: new CtrGladman(new Aes(key), Array.from(COUNTER_DEFAULT_VALUE)),
5470
- hmac: new HmacSha1(authentication)
5471
- });
5472
- return passwordVerification;
5473
- }
5474
-
5475
- function importKey(format, password, algorithm, extractable, keyUsages) {
5476
- if (IMPORT_KEY_SUPPORTED) {
5477
- return subtle.importKey(format, password, algorithm, extractable, keyUsages);
5478
- } else {
5479
- return misc.importKey(password);
5480
- }
5481
- }
5482
-
5483
- async function deriveBits(algorithm, baseKey, length) {
5484
- if (DERIVE_BITS_SUPPORTED) {
5485
- return await subtle.deriveBits(algorithm, baseKey, length);
5486
- } else {
5487
- return misc.pbkdf2(baseKey, algorithm.salt, DERIVED_BITS_ALGORITHM.iterations, length);
5488
- }
5489
- }
5490
-
5491
- function concat(leftArray, rightArray) {
5492
- let array = leftArray;
5493
- if (leftArray.length + rightArray.length) {
5494
- array = new Uint8Array(leftArray.length + rightArray.length);
5495
- array.set(leftArray, 0);
5496
- array.set(rightArray, leftArray.length);
5497
- }
5498
- return array;
5499
- }
5500
-
5501
- function expand(inputArray, length) {
5502
- if (length && length > inputArray.length) {
5503
- const array = inputArray;
5504
- inputArray = new Uint8Array(length);
5505
- inputArray.set(array, 0);
5506
- }
5507
- return inputArray;
5508
- }
5549
+ /* global crypto */
5509
5550
 
5510
- function subarray(array, begin, end) {
5511
- return array.subarray(begin, end);
5512
- }
5551
+ const GET_RANDOM_VALUES_SUPPORTED = typeof crypto != "undefined" && typeof crypto.getRandomValues == "function";
5513
5552
 
5514
- function fromBits(codecBytes, chunk) {
5515
- return codecBytes.fromBits(chunk);
5516
- }
5517
- function toBits(codecBytes, chunk) {
5518
- return codecBytes.toBits(chunk);
5553
+ const ERR_INVALID_PASSWORD = "Invalid password";
5554
+ const ERR_INVALID_SIGNATURE = "Invalid signature";
5555
+
5556
+ function getRandomValues(array) {
5557
+ if (GET_RANDOM_VALUES_SUPPORTED) {
5558
+ return crypto.getRandomValues(array);
5559
+ } else {
5560
+ return random.getRandomValues(array);
5561
+ }
5519
5562
  }
5520
5563
 
5521
5564
  /*
@@ -5546,257 +5589,255 @@
5546
5589
  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
5547
5590
  */
5548
5591
 
5549
- const HEADER_LENGTH = 12;
5592
+ const BLOCK_LENGTH = 16;
5593
+ const RAW_FORMAT = "raw";
5594
+ const PBKDF2_ALGORITHM = { name: "PBKDF2" };
5595
+ const HASH_ALGORITHM = { name: "HMAC" };
5596
+ const HASH_FUNCTION = "SHA-1";
5597
+ const BASE_KEY_ALGORITHM = Object.assign({ hash: HASH_ALGORITHM }, PBKDF2_ALGORITHM);
5598
+ const DERIVED_BITS_ALGORITHM = Object.assign({ iterations: 1000, hash: { name: HASH_FUNCTION } }, PBKDF2_ALGORITHM);
5599
+ const DERIVED_BITS_USAGE = ["deriveBits"];
5600
+ const SALT_LENGTH = [8, 12, 16];
5601
+ const KEY_LENGTH = [16, 24, 32];
5602
+ const SIGNATURE_LENGTH = 10;
5603
+ const COUNTER_DEFAULT_VALUE = [0, 0, 0, 0];
5604
+ const UNDEFINED_TYPE = "undefined";
5605
+ const FUNCTION_TYPE = "function";
5606
+ // deno-lint-ignore valid-typeof
5607
+ const CRYPTO_API_SUPPORTED = typeof crypto != UNDEFINED_TYPE;
5608
+ const subtle = CRYPTO_API_SUPPORTED && crypto.subtle;
5609
+ const SUBTLE_API_SUPPORTED = CRYPTO_API_SUPPORTED && typeof subtle != UNDEFINED_TYPE;
5610
+ const IMPORT_KEY_SUPPORTED = CRYPTO_API_SUPPORTED && SUBTLE_API_SUPPORTED && typeof subtle.importKey == FUNCTION_TYPE;
5611
+ const DERIVE_BITS_SUPPORTED = CRYPTO_API_SUPPORTED && SUBTLE_API_SUPPORTED && typeof subtle.deriveBits == FUNCTION_TYPE;
5612
+ const codecBytes = codec.bytes;
5613
+ const Aes = cipher.aes;
5614
+ const CtrGladman = mode.ctrGladman;
5615
+ const HmacSha1 = misc.hmacSha1;
5550
5616
 
5551
- class ZipCryptoDecryptionStream extends TransformStream {
5617
+ class AESDecryptionStream extends TransformStream {
5552
5618
 
5553
- constructor(password, passwordVerification) {
5619
+ constructor(password, signed, strength) {
5554
5620
  super({
5555
5621
  start() {
5556
5622
  Object.assign(this, {
5623
+ ready: new Promise(resolve => this.resolveReady = resolve),
5557
5624
  password,
5558
- passwordVerification
5625
+ signed,
5626
+ strength: strength - 1,
5627
+ pending: new Uint8Array()
5559
5628
  });
5560
- createKeys(this, password);
5561
5629
  },
5562
- transform(chunk, controller) {
5563
- const zipCrypto = this;
5564
- if (zipCrypto.password) {
5565
- const decryptedHeader = decrypt(zipCrypto, chunk.subarray(0, HEADER_LENGTH));
5566
- zipCrypto.password = null;
5567
- if (decryptedHeader[HEADER_LENGTH - 1] != zipCrypto.passwordVerification) {
5568
- throw new Error(ERR_INVALID_PASSWORD);
5630
+ async transform(chunk, controller) {
5631
+ const aesCrypto = this;
5632
+ const {
5633
+ password,
5634
+ strength,
5635
+ resolveReady,
5636
+ ready
5637
+ } = aesCrypto;
5638
+ if (password) {
5639
+ await createDecryptionKeys(aesCrypto, strength, password, subarray(chunk, 0, SALT_LENGTH[strength] + 2));
5640
+ chunk = subarray(chunk, SALT_LENGTH[strength] + 2);
5641
+ resolveReady();
5642
+ } else {
5643
+ await ready;
5644
+ }
5645
+ const output = new Uint8Array(chunk.length - SIGNATURE_LENGTH - ((chunk.length - SIGNATURE_LENGTH) % BLOCK_LENGTH));
5646
+ controller.enqueue(append(aesCrypto, chunk, output, 0, SIGNATURE_LENGTH, true));
5647
+ },
5648
+ async flush(controller) {
5649
+ const {
5650
+ signed,
5651
+ ctr,
5652
+ hmac,
5653
+ pending,
5654
+ ready
5655
+ } = this;
5656
+ await ready;
5657
+ const chunkToDecrypt = subarray(pending, 0, pending.length - SIGNATURE_LENGTH);
5658
+ const originalSignature = subarray(pending, pending.length - SIGNATURE_LENGTH);
5659
+ let decryptedChunkArray = new Uint8Array();
5660
+ if (chunkToDecrypt.length) {
5661
+ const encryptedChunk = toBits(codecBytes, chunkToDecrypt);
5662
+ hmac.update(encryptedChunk);
5663
+ const decryptedChunk = ctr.update(encryptedChunk);
5664
+ decryptedChunkArray = fromBits(codecBytes, decryptedChunk);
5665
+ }
5666
+ if (signed) {
5667
+ const signature = subarray(fromBits(codecBytes, hmac.digest()), 0, SIGNATURE_LENGTH);
5668
+ for (let indexSignature = 0; indexSignature < SIGNATURE_LENGTH; indexSignature++) {
5669
+ if (signature[indexSignature] != originalSignature[indexSignature]) {
5670
+ throw new Error(ERR_INVALID_SIGNATURE);
5671
+ }
5569
5672
  }
5570
- chunk = chunk.subarray(HEADER_LENGTH);
5571
5673
  }
5572
- controller.enqueue(decrypt(zipCrypto, chunk));
5674
+ controller.enqueue(decryptedChunkArray);
5573
5675
  }
5574
5676
  });
5575
5677
  }
5576
5678
  }
5577
5679
 
5578
- class ZipCryptoEncryptionStream extends TransformStream {
5680
+ class AESEncryptionStream extends TransformStream {
5579
5681
 
5580
- constructor(password, passwordVerification) {
5682
+ constructor(password, strength) {
5683
+ // deno-lint-ignore prefer-const
5684
+ let stream;
5581
5685
  super({
5582
5686
  start() {
5583
5687
  Object.assign(this, {
5688
+ ready: new Promise(resolve => this.resolveReady = resolve),
5584
5689
  password,
5585
- passwordVerification
5690
+ strength: strength - 1,
5691
+ pending: new Uint8Array()
5586
5692
  });
5587
- createKeys(this, password);
5588
5693
  },
5589
- transform(chunk, controller) {
5590
- const zipCrypto = this;
5591
- let output;
5592
- let offset;
5593
- if (zipCrypto.password) {
5594
- zipCrypto.password = null;
5595
- const header = getRandomValues(new Uint8Array(HEADER_LENGTH));
5596
- header[HEADER_LENGTH - 1] = zipCrypto.passwordVerification;
5597
- output = new Uint8Array(chunk.length + header.length);
5598
- output.set(encrypt(zipCrypto, header), 0);
5599
- offset = HEADER_LENGTH;
5694
+ async transform(chunk, controller) {
5695
+ const aesCrypto = this;
5696
+ const {
5697
+ password,
5698
+ strength,
5699
+ resolveReady,
5700
+ ready
5701
+ } = aesCrypto;
5702
+ let preamble = new Uint8Array();
5703
+ if (password) {
5704
+ preamble = await createEncryptionKeys(aesCrypto, strength, password);
5705
+ resolveReady();
5600
5706
  } else {
5601
- output = new Uint8Array(chunk.length);
5602
- offset = 0;
5707
+ await ready;
5603
5708
  }
5604
- output.set(encrypt(zipCrypto, chunk), offset);
5605
- controller.enqueue(output);
5606
- }
5607
- });
5608
- }
5609
- }
5610
-
5611
- function decrypt(target, input) {
5612
- const output = new Uint8Array(input.length);
5613
- for (let index = 0; index < input.length; index++) {
5614
- output[index] = getByte(target) ^ input[index];
5615
- updateKeys(target, output[index]);
5616
- }
5617
- return output;
5618
- }
5619
-
5620
- function encrypt(target, input) {
5621
- const output = new Uint8Array(input.length);
5622
- for (let index = 0; index < input.length; index++) {
5623
- output[index] = getByte(target) ^ input[index];
5624
- updateKeys(target, input[index]);
5625
- }
5626
- return output;
5627
- }
5628
-
5629
- function createKeys(target, password) {
5630
- const keys = [0x12345678, 0x23456789, 0x34567890];
5631
- Object.assign(target, {
5632
- keys,
5633
- crcKey0: new Crc32(keys[0]),
5634
- crcKey2: new Crc32(keys[2]),
5635
- });
5636
- for (let index = 0; index < password.length; index++) {
5637
- updateKeys(target, password.charCodeAt(index));
5638
- }
5639
- }
5640
-
5641
- function updateKeys(target, byte) {
5642
- let [key0, key1, key2] = target.keys;
5643
- target.crcKey0.append([byte]);
5644
- key0 = ~target.crcKey0.get();
5645
- key1 = getInt32(Math.imul(getInt32(key1 + getInt8(key0)), 134775813) + 1);
5646
- target.crcKey2.append([key1 >>> 24]);
5647
- key2 = ~target.crcKey2.get();
5648
- target.keys = [key0, key1, key2];
5649
- }
5650
-
5651
- function getByte(target) {
5652
- const temp = target.keys[2] | 2;
5653
- return getInt8(Math.imul(temp, (temp ^ 1)) >>> 8);
5654
- }
5655
-
5656
- function getInt8(number) {
5657
- return number & 0xFF;
5658
- }
5659
-
5660
- function getInt32(number) {
5661
- return number & 0xFFFFFFFF;
5662
- }
5663
-
5664
- /*
5665
- Copyright (c) 2022 Gildas Lormeau. All rights reserved.
5666
-
5667
- Redistribution and use in source and binary forms, with or without
5668
- modification, are permitted provided that the following conditions are met:
5669
-
5670
- 1. Redistributions of source code must retain the above copyright notice,
5671
- this list of conditions and the following disclaimer.
5672
-
5673
- 2. Redistributions in binary form must reproduce the above copyright
5674
- notice, this list of conditions and the following disclaimer in
5675
- the documentation and/or other materials provided with the distribution.
5676
-
5677
- 3. The names of the authors may not be used to endorse or promote products
5678
- derived from this software without specific prior written permission.
5679
-
5680
- THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
5681
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
5682
- FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
5683
- INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
5684
- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
5685
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
5686
- OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
5687
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
5688
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
5689
- EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
5690
- */
5691
-
5692
- const COMPRESSION_FORMAT = "deflate-raw";
5693
-
5694
- class DeflateStream extends TransformStream {
5695
-
5696
- constructor(options, { chunkSize, CompressionStream, CompressionStreamNative }) {
5697
- super({});
5698
- const { compressed, encrypted, useCompressionStream, password, passwordVerification, encryptionStrength, zipCrypto, signed, level } = options;
5699
- const stream = this;
5700
- let crc32Stream, encryptionStream;
5701
- let readable = filterEmptyChunks(super.readable);
5702
- if ((!encrypted || zipCrypto) && signed) {
5703
- [readable, crc32Stream] = readable.tee();
5704
- crc32Stream = pipeThrough(crc32Stream, new Crc32Stream());
5705
- }
5706
- if (compressed) {
5707
- readable = pipeThroughCommpressionStream(readable, useCompressionStream, { level, chunkSize }, CompressionStreamNative, CompressionStream);
5708
- }
5709
- if (encrypted) {
5710
- if (zipCrypto) {
5711
- readable = pipeThrough(readable, new ZipCryptoEncryptionStream(password, passwordVerification));
5712
- } else {
5713
- encryptionStream = new AESEncryptionStream(password, encryptionStrength);
5714
- readable = pipeThrough(readable, encryptionStream);
5715
- }
5716
- }
5717
- setReadable(stream, readable, async () => {
5718
- let signature;
5719
- if (encrypted && !zipCrypto) {
5720
- signature = encryptionStream.signature;
5721
- }
5722
- if ((!encrypted || zipCrypto) && signed) {
5723
- signature = await crc32Stream.getReader().read();
5724
- signature = new DataView(signature.value.buffer).getUint32(0);
5709
+ const output = new Uint8Array(preamble.length + chunk.length - (chunk.length % BLOCK_LENGTH));
5710
+ output.set(preamble, 0);
5711
+ controller.enqueue(append(aesCrypto, chunk, output, preamble.length, 0));
5712
+ },
5713
+ async flush(controller) {
5714
+ const {
5715
+ ctr,
5716
+ hmac,
5717
+ pending,
5718
+ ready
5719
+ } = this;
5720
+ await ready;
5721
+ let encryptedChunkArray = new Uint8Array();
5722
+ if (pending.length) {
5723
+ const encryptedChunk = ctr.update(toBits(codecBytes, pending));
5724
+ hmac.update(encryptedChunk);
5725
+ encryptedChunkArray = fromBits(codecBytes, encryptedChunk);
5726
+ }
5727
+ stream.signature = fromBits(codecBytes, hmac.digest()).slice(0, SIGNATURE_LENGTH);
5728
+ controller.enqueue(concat(encryptedChunkArray, stream.signature));
5725
5729
  }
5726
- stream.signature = signature;
5727
5730
  });
5731
+ stream = this;
5728
5732
  }
5729
5733
  }
5730
5734
 
5731
- class InflateStream extends TransformStream {
5732
-
5733
- constructor(options, { chunkSize, DecompressionStream, DecompressionStreamNative }) {
5734
- super({});
5735
- const { zipCrypto, encrypted, password, passwordVerification, signed, signature, encryptionStrength, compressed, useCompressionStream } = options;
5736
- let crc32Stream, decryptionStream;
5737
- let readable = filterEmptyChunks(super.readable);
5738
- if (encrypted) {
5739
- if (zipCrypto) {
5740
- readable = pipeThrough(readable, new ZipCryptoDecryptionStream(password, passwordVerification));
5741
- } else {
5742
- decryptionStream = new AESDecryptionStream(password, signed, encryptionStrength);
5743
- readable = pipeThrough(readable, decryptionStream);
5744
- }
5745
- }
5746
- if (compressed) {
5747
- readable = pipeThroughCommpressionStream(readable, useCompressionStream, { chunkSize }, DecompressionStreamNative, DecompressionStream);
5735
+ function append(aesCrypto, input, output, paddingStart, paddingEnd, verifySignature) {
5736
+ const {
5737
+ ctr,
5738
+ hmac,
5739
+ pending
5740
+ } = aesCrypto;
5741
+ const inputLength = input.length - paddingEnd;
5742
+ if (pending.length) {
5743
+ input = concat(pending, input);
5744
+ output = expand(output, inputLength - (inputLength % BLOCK_LENGTH));
5745
+ }
5746
+ let offset;
5747
+ for (offset = 0; offset <= inputLength - BLOCK_LENGTH; offset += BLOCK_LENGTH) {
5748
+ const inputChunk = toBits(codecBytes, subarray(input, offset, offset + BLOCK_LENGTH));
5749
+ if (verifySignature) {
5750
+ hmac.update(inputChunk);
5748
5751
  }
5749
- if ((!encrypted || zipCrypto) && signed) {
5750
- [readable, crc32Stream] = readable.tee();
5751
- crc32Stream = pipeThrough(crc32Stream, new Crc32Stream());
5752
+ const outputChunk = ctr.update(inputChunk);
5753
+ if (!verifySignature) {
5754
+ hmac.update(outputChunk);
5752
5755
  }
5753
- setReadable(this, readable, async () => {
5754
- if ((!encrypted || zipCrypto) && signed) {
5755
- const streamSignature = await crc32Stream.getReader().read();
5756
- const dataViewSignature = new DataView(streamSignature.value.buffer);
5757
- if (signature != dataViewSignature.getUint32(0, false)) {
5758
- throw new Error(ERR_INVALID_SIGNATURE);
5759
- }
5760
- }
5761
- });
5756
+ output.set(fromBits(codecBytes, outputChunk), offset + paddingStart);
5757
+ }
5758
+ aesCrypto.pending = subarray(input, offset);
5759
+ return output;
5760
+ }
5761
+
5762
+ async function createDecryptionKeys(decrypt, strength, password, preamble) {
5763
+ const passwordVerificationKey = await createKeys$1(decrypt, strength, password, subarray(preamble, 0, SALT_LENGTH[strength]));
5764
+ const passwordVerification = subarray(preamble, SALT_LENGTH[strength]);
5765
+ if (passwordVerificationKey[0] != passwordVerification[0] || passwordVerificationKey[1] != passwordVerification[1]) {
5766
+ throw new Error(ERR_INVALID_PASSWORD);
5762
5767
  }
5763
5768
  }
5764
5769
 
5765
- function filterEmptyChunks(readable) {
5766
- return pipeThrough(readable, new TransformStream({
5767
- transform(chunk, controller) {
5768
- if (chunk && chunk.length) {
5769
- controller.enqueue(chunk);
5770
- }
5771
- }
5772
- }));
5770
+ async function createEncryptionKeys(encrypt, strength, password) {
5771
+ const salt = getRandomValues(new Uint8Array(SALT_LENGTH[strength]));
5772
+ const passwordVerification = await createKeys$1(encrypt, strength, password, salt);
5773
+ return concat(salt, passwordVerification);
5773
5774
  }
5774
5775
 
5775
- function setReadable(stream, readable, flush) {
5776
- readable = pipeThrough(readable, new TransformStream({ flush }));
5777
- Object.defineProperty(stream, "readable", {
5778
- get() {
5779
- return readable;
5780
- }
5776
+ async function createKeys$1(aesCrypto, strength, password, salt) {
5777
+ aesCrypto.password = null;
5778
+ const encodedPassword = encodeText(password);
5779
+ const baseKey = await importKey(RAW_FORMAT, encodedPassword, BASE_KEY_ALGORITHM, false, DERIVED_BITS_USAGE);
5780
+ const derivedBits = await deriveBits(Object.assign({ salt }, DERIVED_BITS_ALGORITHM), baseKey, 8 * ((KEY_LENGTH[strength] * 2) + 2));
5781
+ const compositeKey = new Uint8Array(derivedBits);
5782
+ const key = toBits(codecBytes, subarray(compositeKey, 0, KEY_LENGTH[strength]));
5783
+ const authentication = toBits(codecBytes, subarray(compositeKey, KEY_LENGTH[strength], KEY_LENGTH[strength] * 2));
5784
+ const passwordVerification = subarray(compositeKey, KEY_LENGTH[strength] * 2);
5785
+ Object.assign(aesCrypto, {
5786
+ keys: {
5787
+ key,
5788
+ authentication,
5789
+ passwordVerification
5790
+ },
5791
+ ctr: new CtrGladman(new Aes(key), Array.from(COUNTER_DEFAULT_VALUE)),
5792
+ hmac: new HmacSha1(authentication)
5781
5793
  });
5794
+ return passwordVerification;
5782
5795
  }
5783
5796
 
5784
- function pipeThroughCommpressionStream(readable, useCompressionStream, options, CodecStreamNative, CodecStream) {
5785
- try {
5786
- const CompressionStream = useCompressionStream && CodecStreamNative ? CodecStreamNative : CodecStream;
5787
- readable = pipeThrough(readable, new CompressionStream(COMPRESSION_FORMAT, options));
5788
- } catch (error) {
5789
- if (useCompressionStream) {
5790
- readable = pipeThrough(readable, new CodecStream(COMPRESSION_FORMAT, options));
5791
- } else {
5792
- throw error;
5793
- }
5797
+ function importKey(format, password, algorithm, extractable, keyUsages) {
5798
+ if (IMPORT_KEY_SUPPORTED) {
5799
+ return subtle.importKey(format, password, algorithm, extractable, keyUsages);
5800
+ } else {
5801
+ return misc.importKey(password);
5794
5802
  }
5795
- return readable;
5796
5803
  }
5797
5804
 
5798
- function pipeThrough(readable, transformStream) {
5799
- return readable.pipeThrough(transformStream);
5805
+ async function deriveBits(algorithm, baseKey, length) {
5806
+ if (DERIVE_BITS_SUPPORTED) {
5807
+ return await subtle.deriveBits(algorithm, baseKey, length);
5808
+ } else {
5809
+ return misc.pbkdf2(baseKey, algorithm.salt, DERIVED_BITS_ALGORITHM.iterations, length);
5810
+ }
5811
+ }
5812
+
5813
+ function concat(leftArray, rightArray) {
5814
+ let array = leftArray;
5815
+ if (leftArray.length + rightArray.length) {
5816
+ array = new Uint8Array(leftArray.length + rightArray.length);
5817
+ array.set(leftArray, 0);
5818
+ array.set(rightArray, leftArray.length);
5819
+ }
5820
+ return array;
5821
+ }
5822
+
5823
+ function expand(inputArray, length) {
5824
+ if (length && length > inputArray.length) {
5825
+ const array = inputArray;
5826
+ inputArray = new Uint8Array(length);
5827
+ inputArray.set(array, 0);
5828
+ }
5829
+ return inputArray;
5830
+ }
5831
+
5832
+ function subarray(array, begin, end) {
5833
+ return array.subarray(begin, end);
5834
+ }
5835
+
5836
+ function fromBits(codecBytes, chunk) {
5837
+ return codecBytes.fromBits(chunk);
5838
+ }
5839
+ function toBits(codecBytes, chunk) {
5840
+ return codecBytes.toBits(chunk);
5800
5841
  }
5801
5842
 
5802
5843
  /*
@@ -5827,195 +5868,120 @@
5827
5868
  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
5828
5869
  */
5829
5870
 
5830
- /*
5831
- * This program is based on JZlib 1.0.2 ymnk, JCraft,Inc.
5832
- * JZlib is based on zlib-1.1.3, so all credit should go authors
5833
- * Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu)
5834
- * and contributors of zlib.
5835
- */
5836
-
5837
- /* global TransformStream */
5871
+ const HEADER_LENGTH = 12;
5838
5872
 
5839
- class CodecStream extends TransformStream {
5873
+ class ZipCryptoDecryptionStream extends TransformStream {
5840
5874
 
5841
- constructor(Codec, options) {
5842
- const codec = new Codec(options);
5875
+ constructor(password, passwordVerification) {
5843
5876
  super({
5844
- transform(chunk, controller) {
5845
- controller.enqueue(codec.append(chunk));
5877
+ start() {
5878
+ Object.assign(this, {
5879
+ password,
5880
+ passwordVerification
5881
+ });
5882
+ createKeys(this, password);
5846
5883
  },
5847
- flush(controller) {
5848
- const chunk = codec.flush();
5849
- if (chunk) {
5850
- controller.enqueue(chunk);
5884
+ transform(chunk, controller) {
5885
+ const zipCrypto = this;
5886
+ if (zipCrypto.password) {
5887
+ const decryptedHeader = decrypt(zipCrypto, chunk.subarray(0, HEADER_LENGTH));
5888
+ zipCrypto.password = null;
5889
+ if (decryptedHeader[HEADER_LENGTH - 1] != zipCrypto.passwordVerification) {
5890
+ throw new Error(ERR_INVALID_PASSWORD);
5891
+ }
5892
+ chunk = chunk.subarray(HEADER_LENGTH);
5851
5893
  }
5894
+ controller.enqueue(decrypt(zipCrypto, chunk));
5852
5895
  }
5853
5896
  });
5854
5897
  }
5855
5898
  }
5856
5899
 
5857
- /*
5858
- Copyright (c) 2022 Gildas Lormeau. All rights reserved.
5859
-
5860
- Redistribution and use in source and binary forms, with or without
5861
- modification, are permitted provided that the following conditions are met:
5862
-
5863
- 1. Redistributions of source code must retain the above copyright notice,
5864
- this list of conditions and the following disclaimer.
5865
-
5866
- 2. Redistributions in binary form must reproduce the above copyright
5867
- notice, this list of conditions and the following disclaimer in
5868
- the documentation and/or other materials provided with the distribution.
5869
-
5870
- 3. The names of the authors may not be used to endorse or promote products
5871
- derived from this software without specific prior written permission.
5872
-
5873
- THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
5874
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
5875
- FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
5876
- INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
5877
- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
5878
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
5879
- OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
5880
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
5881
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
5882
- EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
5883
- */
5884
-
5885
- const CODEC_DEFLATE = "deflate";
5886
- const CODEC_INFLATE = "inflate";
5887
- const MESSAGE_EVENT_TYPE = "message";
5888
- const MESSAGE_START = "start";
5889
- const MESSAGE_PULL = "pull";
5890
- const MESSAGE_DATA = "data";
5891
- const MESSAGE_ACK_DATA = "ack";
5892
- const MESSAGE_CLOSE = "close";
5893
-
5894
- class Codec {
5900
+ class ZipCryptoEncryptionStream extends TransformStream {
5895
5901
 
5896
- constructor(readable, writable, options, config) {
5897
- const { codecType } = options;
5898
- let CodecStream;
5899
- if (codecType.startsWith(CODEC_DEFLATE)) {
5900
- CodecStream = DeflateStream;
5901
- } else if (codecType.startsWith(CODEC_INFLATE)) {
5902
- CodecStream = InflateStream;
5903
- }
5904
- Object.assign(this, {
5905
- CodecStream,
5906
- readable,
5907
- writable,
5908
- options,
5909
- config
5902
+ constructor(password, passwordVerification) {
5903
+ super({
5904
+ start() {
5905
+ Object.assign(this, {
5906
+ password,
5907
+ passwordVerification
5908
+ });
5909
+ createKeys(this, password);
5910
+ },
5911
+ transform(chunk, controller) {
5912
+ const zipCrypto = this;
5913
+ let output;
5914
+ let offset;
5915
+ if (zipCrypto.password) {
5916
+ zipCrypto.password = null;
5917
+ const header = getRandomValues(new Uint8Array(HEADER_LENGTH));
5918
+ header[HEADER_LENGTH - 1] = zipCrypto.passwordVerification;
5919
+ output = new Uint8Array(chunk.length + header.length);
5920
+ output.set(encrypt(zipCrypto, header), 0);
5921
+ offset = HEADER_LENGTH;
5922
+ } else {
5923
+ output = new Uint8Array(chunk.length);
5924
+ offset = 0;
5925
+ }
5926
+ output.set(encrypt(zipCrypto, chunk), offset);
5927
+ controller.enqueue(output);
5928
+ }
5910
5929
  });
5911
5930
  }
5931
+ }
5912
5932
 
5913
- async run() {
5914
- const {
5915
- CodecStream,
5916
- readable,
5917
- writable,
5918
- options,
5919
- config
5920
- } = this;
5921
- const stream = new CodecStream(options, config);
5922
- let size = 0;
5923
- await readable
5924
- .pipeThrough(stream)
5925
- .pipeThrough(new TransformStream({
5926
- transform(chunk, controller) {
5927
- if (chunk && chunk.length) {
5928
- size += chunk.length;
5929
- controller.enqueue(chunk);
5930
- }
5931
- }
5932
- }))
5933
- .pipeTo(writable, { preventClose: true, preventAbort: true });
5934
- const { signature } = stream;
5935
- return { size, signature };
5933
+ function decrypt(target, input) {
5934
+ const output = new Uint8Array(input.length);
5935
+ for (let index = 0; index < input.length; index++) {
5936
+ output[index] = getByte(target) ^ input[index];
5937
+ updateKeys(target, output[index]);
5936
5938
  }
5939
+ return output;
5937
5940
  }
5938
5941
 
5939
- function getCodecStreamClass(Codec) {
5940
- return class extends CodecStream {
5941
- constructor(algorithm, options) {
5942
- super(Codec, options);
5943
- }
5944
- };
5942
+ function encrypt(target, input) {
5943
+ const output = new Uint8Array(input.length);
5944
+ for (let index = 0; index < input.length; index++) {
5945
+ output[index] = getByte(target) ^ input[index];
5946
+ updateKeys(target, input[index]);
5947
+ }
5948
+ return output;
5945
5949
  }
5946
5950
 
5947
- /*
5948
- Copyright (c) 2022 Gildas Lormeau. All rights reserved.
5949
-
5950
- Redistribution and use in source and binary forms, with or without
5951
- modification, are permitted provided that the following conditions are met:
5952
-
5953
- 1. Redistributions of source code must retain the above copyright notice,
5954
- this list of conditions and the following disclaimer.
5955
-
5956
- 2. Redistributions in binary form must reproduce the above copyright
5957
- notice, this list of conditions and the following disclaimer in
5958
- the documentation and/or other materials provided with the distribution.
5959
-
5960
- 3. The names of the authors may not be used to endorse or promote products
5961
- derived from this software without specific prior written permission.
5962
-
5963
- THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
5964
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
5965
- FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
5966
- INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
5967
- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
5968
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
5969
- OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
5970
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
5971
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
5972
- EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
5973
- */
5974
-
5975
- const MAX_32_BITS = 0xffffffff;
5976
- const MAX_16_BITS = 0xffff;
5977
- const COMPRESSION_METHOD_DEFLATE = 0x08;
5978
- const COMPRESSION_METHOD_STORE = 0x00;
5979
- const COMPRESSION_METHOD_AES = 0x63;
5980
-
5981
- const LOCAL_FILE_HEADER_SIGNATURE = 0x04034b50;
5982
- const DATA_DESCRIPTOR_RECORD_SIGNATURE = 0x08074b50;
5983
- const CENTRAL_FILE_HEADER_SIGNATURE = 0x02014b50;
5984
- const END_OF_CENTRAL_DIR_SIGNATURE = 0x06054b50;
5985
- const ZIP64_END_OF_CENTRAL_DIR_SIGNATURE = 0x06064b50;
5986
- const ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIGNATURE = 0x07064b50;
5987
- const END_OF_CENTRAL_DIR_LENGTH = 22;
5988
- const ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH = 20;
5989
- const ZIP64_END_OF_CENTRAL_DIR_LENGTH = 56;
5990
- const ZIP64_END_OF_CENTRAL_DIR_TOTAL_LENGTH = END_OF_CENTRAL_DIR_LENGTH + ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH + ZIP64_END_OF_CENTRAL_DIR_LENGTH;
5991
-
5992
- const ZIP64_TOTAL_NUMBER_OF_DISKS = 1;
5993
-
5994
- const EXTRAFIELD_TYPE_ZIP64 = 0x0001;
5995
- const EXTRAFIELD_TYPE_AES = 0x9901;
5996
- const EXTRAFIELD_TYPE_NTFS = 0x000a;
5997
- const EXTRAFIELD_TYPE_NTFS_TAG1 = 0x0001;
5998
- const EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP = 0x5455;
5999
- const EXTRAFIELD_TYPE_UNICODE_PATH = 0x7075;
6000
- const EXTRAFIELD_TYPE_UNICODE_COMMENT = 0x6375;
6001
-
6002
- const BITFLAG_ENCRYPTED = 0x01;
6003
- const BITFLAG_LEVEL = 0x06;
6004
- const BITFLAG_DATA_DESCRIPTOR = 0x0008;
6005
- const BITFLAG_LANG_ENCODING_FLAG = 0x0800;
6006
- const FILE_ATTR_MSDOS_DIR_MASK = 0x10;
5951
+ function createKeys(target, password) {
5952
+ const keys = [0x12345678, 0x23456789, 0x34567890];
5953
+ Object.assign(target, {
5954
+ keys,
5955
+ crcKey0: new Crc32(keys[0]),
5956
+ crcKey2: new Crc32(keys[2]),
5957
+ });
5958
+ for (let index = 0; index < password.length; index++) {
5959
+ updateKeys(target, password.charCodeAt(index));
5960
+ }
5961
+ }
6007
5962
 
6008
- const VERSION_DEFLATE = 0x14;
6009
- const VERSION_ZIP64 = 0x2D;
6010
- const VERSION_AES = 0x33;
5963
+ function updateKeys(target, byte) {
5964
+ let [key0, key1, key2] = target.keys;
5965
+ target.crcKey0.append([byte]);
5966
+ key0 = ~target.crcKey0.get();
5967
+ key1 = getInt32(Math.imul(getInt32(key1 + getInt8(key0)), 134775813) + 1);
5968
+ target.crcKey2.append([key1 >>> 24]);
5969
+ key2 = ~target.crcKey2.get();
5970
+ target.keys = [key0, key1, key2];
5971
+ }
6011
5972
 
6012
- const DIRECTORY_SIGNATURE = "/";
5973
+ function getByte(target) {
5974
+ const temp = target.keys[2] | 2;
5975
+ return getInt8(Math.imul(temp, (temp ^ 1)) >>> 8);
5976
+ }
6013
5977
 
6014
- const MAX_DATE = new Date(2107, 11, 31);
6015
- const MIN_DATE = new Date(1980, 0, 1);
5978
+ function getInt8(number) {
5979
+ return number & 0xFF;
5980
+ }
6016
5981
 
6017
- const UNDEFINED_VALUE = undefined;
6018
- const UNDEFINED_TYPE = "undefined";
5982
+ function getInt32(number) {
5983
+ return number & 0xFFFFFFFF;
5984
+ }
6019
5985
 
6020
5986
  /*
6021
5987
  Copyright (c) 2022 Gildas Lormeau. All rights reserved.
@@ -6045,93 +6011,115 @@
6045
6011
  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
6046
6012
  */
6047
6013
 
6048
- const MINIMUM_CHUNK_SIZE = 64;
6049
- let maxWorkers = 2;
6050
- try {
6051
- if (typeof navigator != UNDEFINED_TYPE && navigator.hardwareConcurrency) {
6052
- maxWorkers = navigator.hardwareConcurrency;
6053
- }
6054
- } catch (_error) {
6055
- // ignored
6056
- }
6057
- const DEFAULT_CONFIGURATION = {
6058
- chunkSize: 512 * 1024,
6059
- maxWorkers,
6060
- terminateWorkerTimeout: 5000,
6061
- useWebWorkers: true,
6062
- useCompressionStream: true,
6063
- workerScripts: UNDEFINED_VALUE,
6064
- CompressionStreamNative: typeof CompressionStream != UNDEFINED_TYPE && CompressionStream,
6065
- DecompressionStreamNative: typeof DecompressionStream != UNDEFINED_TYPE && DecompressionStream
6066
- };
6014
+ const COMPRESSION_FORMAT = "deflate-raw";
6067
6015
 
6068
- const config = Object.assign({}, DEFAULT_CONFIGURATION);
6016
+ class DeflateStream extends TransformStream {
6069
6017
 
6070
- function getConfiguration() {
6071
- return config;
6018
+ constructor(options, { chunkSize, CompressionStream, CompressionStreamNative }) {
6019
+ super({});
6020
+ const { compressed, encrypted, useCompressionStream, password, passwordVerification, encryptionStrength, zipCrypto, signed, level } = options;
6021
+ const stream = this;
6022
+ let crc32Stream, encryptionStream;
6023
+ let readable = filterEmptyChunks(super.readable);
6024
+ if ((!encrypted || zipCrypto) && signed) {
6025
+ [readable, crc32Stream] = readable.tee();
6026
+ crc32Stream = pipeThrough(crc32Stream, new Crc32Stream());
6027
+ }
6028
+ if (compressed) {
6029
+ readable = pipeThroughCommpressionStream(readable, useCompressionStream, { level, chunkSize }, CompressionStreamNative, CompressionStream);
6030
+ }
6031
+ if (encrypted) {
6032
+ if (zipCrypto) {
6033
+ readable = pipeThrough(readable, new ZipCryptoEncryptionStream(password, passwordVerification));
6034
+ } else {
6035
+ encryptionStream = new AESEncryptionStream(password, encryptionStrength);
6036
+ readable = pipeThrough(readable, encryptionStream);
6037
+ }
6038
+ }
6039
+ setReadable(stream, readable, async () => {
6040
+ let signature;
6041
+ if (encrypted && !zipCrypto) {
6042
+ signature = encryptionStream.signature;
6043
+ }
6044
+ if ((!encrypted || zipCrypto) && signed) {
6045
+ signature = await crc32Stream.getReader().read();
6046
+ signature = new DataView(signature.value.buffer).getUint32(0);
6047
+ }
6048
+ stream.signature = signature;
6049
+ });
6050
+ }
6072
6051
  }
6073
6052
 
6074
- function getChunkSize(config) {
6075
- return Math.max(config.chunkSize, MINIMUM_CHUNK_SIZE);
6076
- }
6053
+ class InflateStream extends TransformStream {
6077
6054
 
6078
- function configure(configuration) {
6079
- const {
6080
- baseURL,
6081
- chunkSize,
6082
- maxWorkers,
6083
- terminateWorkerTimeout,
6084
- useCompressionStream,
6085
- useWebWorkers,
6086
- Deflate,
6087
- Inflate,
6088
- CompressionStream,
6089
- DecompressionStream,
6090
- workerScripts
6091
- } = configuration;
6092
- setIfDefined("baseURL", baseURL);
6093
- setIfDefined("chunkSize", chunkSize);
6094
- setIfDefined("maxWorkers", maxWorkers);
6095
- setIfDefined("terminateWorkerTimeout", terminateWorkerTimeout);
6096
- setIfDefined("useCompressionStream", useCompressionStream);
6097
- setIfDefined("useWebWorkers", useWebWorkers);
6098
- if (Deflate) {
6099
- config.CompressionStream = getCodecStreamClass(Deflate);
6100
- }
6101
- if (Inflate) {
6102
- config.DecompressionStream = getCodecStreamClass(Inflate);
6103
- }
6104
- setIfDefined("CompressionStream", CompressionStream);
6105
- setIfDefined("DecompressionStream", DecompressionStream);
6106
- if (workerScripts !== UNDEFINED_VALUE) {
6107
- const { deflate, inflate } = workerScripts;
6108
- if (deflate || inflate) {
6109
- if (!config.workerScripts) {
6110
- config.workerScripts = {};
6055
+ constructor(options, { chunkSize, DecompressionStream, DecompressionStreamNative }) {
6056
+ super({});
6057
+ const { zipCrypto, encrypted, password, passwordVerification, signed, signature, encryptionStrength, compressed, useCompressionStream } = options;
6058
+ let crc32Stream, decryptionStream;
6059
+ let readable = filterEmptyChunks(super.readable);
6060
+ if (encrypted) {
6061
+ if (zipCrypto) {
6062
+ readable = pipeThrough(readable, new ZipCryptoDecryptionStream(password, passwordVerification));
6063
+ } else {
6064
+ decryptionStream = new AESDecryptionStream(password, signed, encryptionStrength);
6065
+ readable = pipeThrough(readable, decryptionStream);
6111
6066
  }
6112
6067
  }
6113
- if (deflate) {
6114
- if (!Array.isArray(deflate)) {
6115
- throw new Error("workerScripts.deflate must be an array");
6068
+ if (compressed) {
6069
+ readable = pipeThroughCommpressionStream(readable, useCompressionStream, { chunkSize }, DecompressionStreamNative, DecompressionStream);
6070
+ }
6071
+ if ((!encrypted || zipCrypto) && signed) {
6072
+ [readable, crc32Stream] = readable.tee();
6073
+ crc32Stream = pipeThrough(crc32Stream, new Crc32Stream());
6074
+ }
6075
+ setReadable(this, readable, async () => {
6076
+ if ((!encrypted || zipCrypto) && signed) {
6077
+ const streamSignature = await crc32Stream.getReader().read();
6078
+ const dataViewSignature = new DataView(streamSignature.value.buffer);
6079
+ if (signature != dataViewSignature.getUint32(0, false)) {
6080
+ throw new Error(ERR_INVALID_SIGNATURE);
6081
+ }
6082
+ }
6083
+ });
6084
+ }
6085
+ }
6086
+
6087
+ function filterEmptyChunks(readable) {
6088
+ return pipeThrough(readable, new TransformStream({
6089
+ transform(chunk, controller) {
6090
+ if (chunk && chunk.length) {
6091
+ controller.enqueue(chunk);
6116
6092
  }
6117
- config.workerScripts.deflate = deflate;
6118
6093
  }
6119
- if (inflate) {
6120
- if (!Array.isArray(inflate)) {
6121
- throw new Error("workerScripts.inflate must be an array");
6122
- }
6123
- config.workerScripts.inflate = inflate;
6094
+ }));
6095
+ }
6096
+
6097
+ function setReadable(stream, readable, flush) {
6098
+ readable = pipeThrough(readable, new TransformStream({ flush }));
6099
+ Object.defineProperty(stream, "readable", {
6100
+ get() {
6101
+ return readable;
6124
6102
  }
6125
- }
6103
+ });
6126
6104
  }
6127
6105
 
6128
- function setIfDefined(propertyName, propertyValue) {
6129
- if (propertyValue !== UNDEFINED_VALUE) {
6130
- config[propertyName] = propertyValue;
6106
+ function pipeThroughCommpressionStream(readable, useCompressionStream, options, CodecStreamNative, CodecStream) {
6107
+ try {
6108
+ const CompressionStream = useCompressionStream && CodecStreamNative ? CodecStreamNative : CodecStream;
6109
+ readable = pipeThrough(readable, new CompressionStream(COMPRESSION_FORMAT, options));
6110
+ } catch (error) {
6111
+ if (useCompressionStream) {
6112
+ readable = pipeThrough(readable, new CodecStream(COMPRESSION_FORMAT, options));
6113
+ } else {
6114
+ throw error;
6115
+ }
6131
6116
  }
6117
+ return readable;
6132
6118
  }
6133
6119
 
6134
- function e(e){const t=()=>URL.createObjectURL(new Blob(['const{Array:e,Object:t,Math:n,Error:r,Uint8Array:s,Uint16Array:i,Uint32Array:o,Int32Array:c,Map:f,DataView:a,Promise:l,TextEncoder:u,crypto:w,postMessage:h,TransformStream:d,ReadableStream:p,WritableStream:y,CompressionStream:m,DecompressionStream:b}=self,g=[];for(let e=0;256>e;e++){let t=e;for(let e=0;8>e;e++)1&t?t=t>>>1^3988292384:t>>>=1;g[e]=t}class k{constructor(e){this.t=e||-1}append(e){let t=0|this.t;for(let n=0,r=0|e.length;r>n;n++)t=t>>>8^g[255&(t^e[n])];this.t=t}get(){return~this.t}}class v extends d{constructor(){const e=new k;super({transform(t){e.append(t)},flush(t){const n=new s(4);new a(n.buffer).setUint32(0,e.get()),t.enqueue(n)}})}}const S={concat(e,t){if(0===e.length||0===t.length)return e.concat(t);const n=e[e.length-1],r=S.i(n);return 32===r?e.concat(t):S.o(t,r,0|n,e.slice(0,e.length-1))},l(e){const t=e.length;if(0===t)return 0;const n=e[t-1];return 32*(t-1)+S.i(n)},u(e,t){if(32*e.length<t)return e;const r=(e=e.slice(0,n.ceil(t/32))).length;return t&=31,r>0&&t&&(e[r-1]=S.h(t,e[r-1]&2147483648>>t-1,1)),e},h:(e,t,n)=>32===e?t:(n?0|t:t<<32-e)+1099511627776*e,i:e=>n.round(e/1099511627776)||32,o(e,t,n,r){for(void 0===r&&(r=[]);t>=32;t-=32)r.push(n),n=0;if(0===t)return r.concat(e);for(let s=0;s<e.length;s++)r.push(n|e[s]>>>t),n=e[s]<<32-t;const s=e.length?e[e.length-1]:0,i=S.i(s);return r.push(S.h(t+i&31,t+i>32?n:r.pop(),1)),r}},C={p:{m(e){const t=S.l(e)/8,n=new s(t);let r;for(let s=0;t>s;s++)0==(3&s)&&(r=e[s/4]),n[s]=r>>>24,r<<=8;return n},g(e){const t=[];let n,r=0;for(n=0;n<e.length;n++)r=r<<8|e[n],3==(3&n)&&(t.push(r),r=0);return 3&n&&t.push(S.h(8*(3&n),r)),t}}},z={k:function(e){e?(this.v=e.v.slice(0),this.S=e.S.slice(0),this.C=e.C):this.reset()}};z.k.prototype={blockSize:512,reset(){const e=this;return e.v=this._.slice(0),e.S=[],e.C=0,e},update(e){const t=this;"string"==typeof e&&(e=C.I.g(e));const n=t.S=S.concat(t.S,e),s=t.C,i=t.C=s+S.l(e);if(i>9007199254740991)throw new r("Cannot hash more than 2^53 - 1 bits");const c=new o(n);let f=0;for(let e=t.blockSize+s-(t.blockSize+s&t.blockSize-1);i>=e;e+=t.blockSize)t.A(c.subarray(16*f,16*(f+1))),f+=1;return n.splice(0,16*f),t},D(){const e=this;let t=e.S;const r=e.v;t=S.concat(t,[S.h(1,1)]);for(let e=t.length+2;15&e;e++)t.push(0);for(t.push(n.floor(e.C/4294967296)),t.push(0|e.C);t.length;)e.A(t.splice(0,16));return e.reset(),r},_:[1732584193,4023233417,2562383102,271733878,3285377520],V:[1518500249,1859775393,2400959708,3395469782],R:(e,t,n,r)=>e>19?e>39?e>59?e>79?void 0:t^n^r:t&n|t&r|n&r:t^n^r:t&n|~t&r,B:(e,t)=>t<<e|t>>>32-e,A(t){const r=this,s=r.v,i=e(80);for(let e=0;16>e;e++)i[e]=t[e];let o=s[0],c=s[1],f=s[2],a=s[3],l=s[4];for(let e=0;79>=e;e++){16>e||(i[e]=r.B(1,i[e-3]^i[e-8]^i[e-14]^i[e-16]));const t=r.B(5,o)+r.R(e,c,f,a)+l+i[e]+r.V[n.floor(e/20)]|0;l=a,a=f,f=r.B(30,c),c=o,o=t}s[0]=s[0]+o|0,s[1]=s[1]+c|0,s[2]=s[2]+f|0,s[3]=s[3]+a|0,s[4]=s[4]+l|0}};const _={getRandomValues(e){const t=new o(e.buffer),r=e=>{let t=987654321;const r=4294967295;return()=>(t=36969*(65535&t)+(t>>16)&r,(((t<<16)+(e=18e3*(65535&e)+(e>>16)&r)&r)/4294967296+.5)*(n.random()>.5?1:-1))};for(let s,i=0;i<e.length;i+=4){const e=r(4294967296*(s||n.random()));s=987654071*e(),t[i/4]=4294967296*e()|0}return e}},I={importKey:e=>new I.M(C.p.g(e)),K(e,t,n,s){if(n=n||1e4,0>s||0>n)throw new r("invalid params to pbkdf2");const i=1+(s>>5)<<2;let o,c,f,l,u;const w=new ArrayBuffer(i),h=new a(w);let d=0;const p=S;for(t=C.p.g(t),u=1;(i||1)>d;u++){for(o=c=e.encrypt(p.concat(t,[u])),f=1;n>f;f++)for(c=e.encrypt(c),l=0;l<c.length;l++)o[l]^=c[l];for(f=0;(i||1)>d&&f<o.length;f++)h.setInt32(d,o[f]),d+=4}return w.slice(0,s/8)},M:class{constructor(e){const t=this,n=t.N=z.k,r=[[],[]],s=n.prototype.blockSize/32;t.P=[new n,new n],e.length>s&&(e=n.hash(e));for(let t=0;s>t;t++)r[0][t]=909522486^e[t],r[1][t]=1549556828^e[t];t.P[0].update(r[0]),t.P[1].update(r[1]),t.U=new n(t.P[0])}reset(){const e=this;e.U=new e.N(e.P[0]),e.T=!1}update(e){this.T=!0,this.U.update(e)}digest(){const e=this,t=e.U.D(),n=new e.N(e.P[1]).update(t).D();return e.reset(),n}encrypt(e){if(this.T)throw new r("encrypt on already updated hmac called!");return this.update(e),this.digest(e)}}},x=void 0!==w&&"function"==typeof w.getRandomValues;function A(e){return x?w.getRandomValues(e):_.getRandomValues(e)}const D={name:"PBKDF2"},V=t.assign({hash:{name:"HMAC"}},D),R=t.assign({iterations:1e3,hash:{name:"SHA-1"}},D),B=["deriveBits"],E=[8,12,16],M=[16,24,32],K=[0,0,0,0],N=void 0!==w,P=N&&w.subtle,U=N&&void 0!==P,T=N&&U&&"function"==typeof P.importKey,W=N&&U&&"function"==typeof P.deriveBits,H=C.p,L=class{constructor(e){const t=this;t.W=[[[],[],[],[],[]],[[],[],[],[],[]]],t.W[0][0][0]||t.H();const n=t.W[0][4],s=t.W[1],i=e.length;let o,c,f,a=1;if(4!==i&&6!==i&&8!==i)throw new r("invalid aes key size");for(t.V=[c=e.slice(0),f=[]],o=i;4*i+28>o;o++){let e=c[o-1];(o%i==0||8===i&&o%i==4)&&(e=n[e>>>24]<<24^n[e>>16&255]<<16^n[e>>8&255]<<8^n[255&e],o%i==0&&(e=e<<8^e>>>24^a<<24,a=a<<1^283*(a>>7))),c[o]=c[o-i]^e}for(let e=0;o;e++,o--){const t=c[3&e?o:o-4];f[e]=4>=o||4>e?t:s[0][n[t>>>24]]^s[1][n[t>>16&255]]^s[2][n[t>>8&255]]^s[3][n[255&t]]}}encrypt(e){return this.L(e,0)}decrypt(e){return this.L(e,1)}H(){const e=this.W[0],t=this.W[1],n=e[4],r=t[4],s=[],i=[];let o,c,f,a;for(let e=0;256>e;e++)i[(s[e]=e<<1^283*(e>>7))^e]=e;for(let l=o=0;!n[l];l^=c||1,o=i[o]||1){let i=o^o<<1^o<<2^o<<3^o<<4;i=i>>8^255&i^99,n[l]=i,r[i]=l,a=s[f=s[c=s[l]]];let u=16843009*a^65537*f^257*c^16843008*l,w=257*s[i]^16843008*i;for(let n=0;4>n;n++)e[n][l]=w=w<<24^w>>>8,t[n][i]=u=u<<24^u>>>8}for(let n=0;5>n;n++)e[n]=e[n].slice(0),t[n]=t[n].slice(0)}L(e,t){if(4!==e.length)throw new r("invalid aes block size");const n=this.V[t],s=n.length/4-2,i=[0,0,0,0],o=this.W[t],c=o[0],f=o[1],a=o[2],l=o[3],u=o[4];let w,h,d,p=e[0]^n[0],y=e[t?3:1]^n[1],m=e[2]^n[2],b=e[t?1:3]^n[3],g=4;for(let e=0;s>e;e++)w=c[p>>>24]^f[y>>16&255]^a[m>>8&255]^l[255&b]^n[g],h=c[y>>>24]^f[m>>16&255]^a[b>>8&255]^l[255&p]^n[g+1],d=c[m>>>24]^f[b>>16&255]^a[p>>8&255]^l[255&y]^n[g+2],b=c[b>>>24]^f[p>>16&255]^a[y>>8&255]^l[255&m]^n[g+3],g+=4,p=w,y=h,m=d;for(let e=0;4>e;e++)i[t?3&-e:e]=u[p>>>24]<<24^u[y>>16&255]<<16^u[m>>8&255]<<8^u[255&b]^n[g++],w=p,p=y,y=m,m=b,b=w;return i}},j=class{constructor(e,t){this.j=e,this.F=t,this.O=t}reset(){this.O=this.F}update(e){return this.q(this.j,e,this.O)}G(e){if(255==(e>>24&255)){let t=e>>16&255,n=e>>8&255,r=255&e;255===t?(t=0,255===n?(n=0,255===r?r=0:++r):++n):++t,e=0,e+=t<<16,e+=n<<8,e+=r}else e+=1<<24;return e}J(e){0===(e[0]=this.G(e[0]))&&(e[1]=this.G(e[1]))}q(e,t,n){let r;if(!(r=t.length))return[];const s=S.l(t);for(let s=0;r>s;s+=4){this.J(n);const r=e.encrypt(n);t[s]^=r[0],t[s+1]^=r[1],t[s+2]^=r[2],t[s+3]^=r[3]}return S.u(t,s)}},F=I.M;class O extends d{constructor(e,n,i){super({start(){t.assign(this,{ready:new l((e=>this.X=e)),password:e,signed:n,Y:i-1,pending:new s})},async transform(e,t){const n=this,{password:i,Y:o,X:c,ready:f}=n;i?(await(async(e,t,n,s)=>{const i=await J(e,t,n,X(s,0,E[t])),o=X(s,E[t]);if(i[0]!=o[0]||i[1]!=o[1])throw new r("Invalid password")})(n,o,i,X(e,0,E[o]+2)),e=X(e,E[o]+2),c()):await f;const a=new s(e.length-10-(e.length-10)%16);t.enqueue(G(n,e,a,0,10,!0))},async flush(e){const{signed:t,Z:n,$:i,pending:o,ready:c}=this;await c;const f=X(o,0,o.length-10),a=X(o,o.length-10);let l=new s;if(f.length){const e=Z(H,f);i.update(e);const t=n.update(e);l=Y(H,t)}if(t){const e=X(Y(H,i.digest()),0,10);for(let t=0;10>t;t++)if(e[t]!=a[t])throw new r("Invalid signature")}e.enqueue(l)}})}}class q extends d{constructor(e,n){let r;super({start(){t.assign(this,{ready:new l((e=>this.X=e)),password:e,Y:n-1,pending:new s})},async transform(e,t){const n=this,{password:r,Y:i,X:o,ready:c}=n;let f=new s;r?(f=await(async(e,t,n)=>{const r=A(new s(E[t]));return Q(r,await J(e,t,n,r))})(n,i,r),o()):await c;const a=new s(f.length+e.length-e.length%16);a.set(f,0),t.enqueue(G(n,e,a,f.length,0))},async flush(e){const{Z:t,$:n,pending:i,ready:o}=this;await o;let c=new s;if(i.length){const e=t.update(Z(H,i));n.update(e),c=Y(H,e)}r.signature=Y(H,n.digest()).slice(0,10),e.enqueue(Q(c,r.signature))}}),r=this}}function G(e,t,n,r,i,o){const{Z:c,$:f,pending:a}=e,l=t.length-i;let u;for(a.length&&(t=Q(a,t),n=((e,t)=>{if(t&&t>e.length){const n=e;(e=new s(t)).set(n,0)}return e})(n,l-l%16)),u=0;l-16>=u;u+=16){const e=Z(H,X(t,u,u+16));o&&f.update(e);const s=c.update(e);o||f.update(s),n.set(Y(H,s),u+r)}return e.pending=X(t,u),n}async function J(n,r,i,o){n.password=null;const c=(e=>{if(void 0===u){const t=new s((e=unescape(encodeURIComponent(e))).length);for(let n=0;n<t.length;n++)t[n]=e.charCodeAt(n);return t}return(new u).encode(e)})(i),f=await((e,t,n,r,s)=>T?P.importKey("raw",t,n,!1,s):I.importKey(t))(0,c,V,0,B),a=await(async(e,t,n)=>W?await P.deriveBits(e,t,n):I.K(t,e.salt,R.iterations,n))(t.assign({salt:o},R),f,8*(2*M[r]+2)),l=new s(a),w=Z(H,X(l,0,M[r])),h=Z(H,X(l,M[r],2*M[r])),d=X(l,2*M[r]);return t.assign(n,{keys:{key:w,ee:h,passwordVerification:d},Z:new j(new L(w),e.from(K)),$:new F(h)}),d}function Q(e,t){let n=e;return e.length+t.length&&(n=new s(e.length+t.length),n.set(e,0),n.set(t,e.length)),n}function X(e,t,n){return e.subarray(t,n)}function Y(e,t){return e.m(t)}function Z(e,t){return e.g(t)}class $ extends d{constructor(e,n){super({start(){t.assign(this,{password:e,passwordVerification:n}),re(this,e)},transform(e,t){const n=this;if(n.password){const t=te(n,e.subarray(0,12));if(n.password=null,t[11]!=n.passwordVerification)throw new r("Invalid password");e=e.subarray(12)}t.enqueue(te(n,e))}})}}class ee extends d{constructor(e,n){super({start(){t.assign(this,{password:e,passwordVerification:n}),re(this,e)},transform(e,t){const n=this;let r,i;if(n.password){n.password=null;const t=A(new s(12));t[11]=n.passwordVerification,r=new s(e.length+t.length),r.set(ne(n,t),0),i=12}else r=new s(e.length),i=0;r.set(ne(n,e),i),t.enqueue(r)}})}}function te(e,t){const n=new s(t.length);for(let r=0;r<t.length;r++)n[r]=ie(e)^t[r],se(e,n[r]);return n}function ne(e,t){const n=new s(t.length);for(let r=0;r<t.length;r++)n[r]=ie(e)^t[r],se(e,t[r]);return n}function re(e,n){const r=[305419896,591751049,878082192];t.assign(e,{keys:r,te:new k(r[0]),ne:new k(r[2])});for(let t=0;t<n.length;t++)se(e,n.charCodeAt(t))}function se(e,t){let[r,s,i]=e.keys;e.te.append([t]),r=~e.te.get(),s=ce(n.imul(ce(s+oe(r)),134775813)+1),e.ne.append([s>>>24]),i=~e.ne.get(),e.keys=[r,s,i]}function ie(e){const t=2|e.keys[2];return oe(n.imul(t,1^t)>>>8)}function oe(e){return 255&e}function ce(e){return 4294967295&e}class fe extends d{constructor(e,{chunkSize:t,CompressionStream:n,re:r}){super({});const{compressed:s,encrypted:i,useCompressionStream:o,password:c,passwordVerification:f,encryptionStrength:l,zipCrypto:u,signed:w,level:h}=e,d=this;let p,y,m=le(super.readable);i&&!u||!w||([m,p]=m.tee(),p=he(p,new v)),s&&(m=we(m,o,{level:h,chunkSize:t},r,n)),i&&(u?m=he(m,new ee(c,f)):(y=new q(c,l),m=he(m,y))),ue(d,m,(async()=>{let e;i&&!u&&(e=y.signature),i&&!u||!w||(e=await p.getReader().read(),e=new a(e.value.buffer).getUint32(0)),d.signature=e}))}}class ae extends d{constructor(e,{chunkSize:t,DecompressionStream:n,se:s}){super({});const{zipCrypto:i,encrypted:o,password:c,passwordVerification:f,signed:l,signature:u,encryptionStrength:w,compressed:h,useCompressionStream:d}=e;let p,y,m=le(super.readable);o&&(i?m=he(m,new $(c,f)):(y=new O(c,l,w),m=he(m,y))),h&&(m=we(m,d,{chunkSize:t},s,n)),o&&!i||!l||([m,p]=m.tee(),p=he(p,new v)),ue(this,m,(async()=>{if((!o||i)&&l){const e=await p.getReader().read(),t=new a(e.value.buffer);if(u!=t.getUint32(0,!1))throw new r("Invalid signature")}}))}}function le(e){return he(e,new d({transform(e,t){e&&e.length&&t.enqueue(e)}}))}function ue(e,n,r){n=he(n,new d({flush:r})),t.defineProperty(e,"readable",{get:()=>n})}function we(e,t,n,r,s){try{e=he(e,new(t&&r?r:s)("deflate-raw",n))}catch(r){if(!t)throw r;e=he(e,new s("deflate-raw",n))}return e}function he(e,t){return e.pipeThrough(t)}class de extends d{constructor(e,t){const n=new e(t);super({transform(e,t){t.enqueue(n.append(e))},flush(e){const t=n.flush();t&&e.enqueue(t)}})}}class pe{constructor(e,n,r,s){const{codecType:i}=r;let o;i.startsWith("deflate")?o=fe:i.startsWith("inflate")&&(o=ae),t.assign(this,{ie:o,readable:e,writable:n,options:r,config:s})}async oe(){const{ie:e,readable:t,writable:n,options:r,config:s}=this,i=new e(r,s);let o=0;await t.pipeThrough(i).pipeThrough(new d({transform(e,t){e&&e.length&&(o+=e.length,t.enqueue(e))}})).pipeTo(n,{ce:!0,fe:!0});const{signature:c}=i;return{size:o,signature:c}}}function ye(e){return class extends de{constructor(t,n){super(e,n)}}}const me=new f,be=new f;let ge,ke=0;async function ve(e){try{const{options:t,scripts:n,config:r}=e;n&&n.length&&importScripts.apply(void 0,n),self.initCodec&&self.initCodec(),r.re=self.CompressionStream,r.se=self.DecompressionStream,self.Deflate&&(r.CompressionStream=ye(self.Deflate)),self.Inflate&&(r.DecompressionStream=ye(self.Inflate));const s={highWaterMark:1,size:()=>r.chunkSize},i=e.readable||new p({async pull(e){let t=new l((e=>me.set(ke,e)));Se({type:"pull",messageId:ke}),ke=(ke+1)%Number.MAX_SAFE_INTEGER;const{value:n,done:r}=await t;e.enqueue(n),r&&e.close()}},s),o=e.writable||new y({async write(e){let t;const n=new l((e=>t=e));be.set(ke,t),Se({type:"data",data:e,messageId:ke}),ke=(ke+1)%Number.MAX_SAFE_INTEGER,await n}},s);ge=new pe(i,o,t,r);const c=await ge.oe();try{await o.close()}catch(e){}Se({type:"close",result:c})}catch(e){Ce(e)}}function Se(e){if(e.data){let{data:t}=e;if(t&&t.length)try{t=new s(t),e.data=t.buffer,h(e,[e.data])}catch(t){h(e)}else h(e)}else h(e)}function Ce(e){const{message:t,stack:n,code:r,name:s}=e;h({error:{message:t,stack:n,code:r,name:s}})}function ze(t){return _e(t.map((([t,n])=>new e(t).fill(n,0,t))))}function _e(t){return t.reduce(((t,n)=>t.concat(e.isArray(n)?_e(n):n)),[])}addEventListener("message",(async e=>{const t=e.data,{type:n,messageId:r,data:i,done:o}=t;try{if("start"==n&&ve(t),"data"==n){const e=me.get(r);me.delete(r),e({value:new s(i),done:o})}if("ack"==n){const e=be.get(r);be.delete(r),e()}}catch(e){Ce(e)}}));const Ie=[0,1,2,3].concat(...ze([[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 xe(){const e=this;function t(e,t){let n=0;do{n|=1&e,e>>>=1,n<<=1}while(--t>0);return n>>>1}e.ae=r=>{const s=e.le,i=e.we.ue,o=e.we.he;let c,f,a,l=-1;for(r.de=0,r.pe=573,c=0;o>c;c++)0!==s[2*c]?(r.ye[++r.de]=l=c,r.me[c]=0):s[2*c+1]=0;for(;2>r.de;)a=r.ye[++r.de]=2>l?++l:0,s[2*a]=1,r.me[a]=0,r.be--,i&&(r.ge-=i[2*a+1]);for(e.ke=l,c=n.floor(r.de/2);c>=1;c--)r.ve(s,c);a=o;do{c=r.ye[1],r.ye[1]=r.ye[r.de--],r.ve(s,1),f=r.ye[1],r.ye[--r.pe]=c,r.ye[--r.pe]=f,s[2*a]=s[2*c]+s[2*f],r.me[a]=n.max(r.me[c],r.me[f])+1,s[2*c+1]=s[2*f+1]=a,r.ye[1]=a++,r.ve(s,1)}while(r.de>=2);r.ye[--r.pe]=r.ye[1],(t=>{const n=e.le,r=e.we.ue,s=e.we.Se,i=e.we.Ce,o=e.we.ze;let c,f,a,l,u,w,h=0;for(l=0;15>=l;l++)t._e[l]=0;for(n[2*t.ye[t.pe]+1]=0,c=t.pe+1;573>c;c++)f=t.ye[c],l=n[2*n[2*f+1]+1]+1,l>o&&(l=o,h++),n[2*f+1]=l,f>e.ke||(t._e[l]++,u=0,i>f||(u=s[f-i]),w=n[2*f],t.be+=w*(l+u),r&&(t.ge+=w*(r[2*f+1]+u)));if(0!==h){do{for(l=o-1;0===t._e[l];)l--;t._e[l]--,t._e[l+1]+=2,t._e[o]--,h-=2}while(h>0);for(l=o;0!==l;l--)for(f=t._e[l];0!==f;)a=t.ye[--c],a>e.ke||(n[2*a+1]!=l&&(t.be+=(l-n[2*a+1])*n[2*a],n[2*a+1]=l),f--)}})(r),((e,n,r)=>{const s=[];let i,o,c,f=0;for(i=1;15>=i;i++)s[i]=f=f+r[i-1]<<1;for(o=0;n>=o;o++)c=e[2*o+1],0!==c&&(e[2*o]=t(s[c]++,c))})(s,e.ke,r._e)}}function Ae(e,t,n,r,s){const i=this;i.ue=e,i.Se=t,i.Ce=n,i.he=r,i.ze=s}xe.Ie=[0,1,2,3,4,5,6,7].concat(...ze([[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]])),xe.xe=[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],xe.Ae=[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],xe.De=e=>256>e?Ie[e]:Ie[256+(e>>>7)],xe.Ve=[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],xe.Re=[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],xe.Be=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],xe.Ee=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];const De=ze([[144,8],[112,9],[24,7],[8,8]]);Ae.Me=_e([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(((e,t)=>[e,De[t]])));const Ve=ze([[30,5]]);function Re(e,t,n,r,s){const i=this;i.Ke=e,i.Ne=t,i.Pe=n,i.Ue=r,i.Te=s}Ae.We=_e([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(((e,t)=>[e,Ve[t]]))),Ae.He=new Ae(Ae.Me,xe.Ve,257,286,15),Ae.Le=new Ae(Ae.We,xe.Re,0,30,15),Ae.je=new Ae(null,xe.Be,0,19,7);const Be=[new Re(0,0,0,0,0),new Re(4,4,8,4,1),new Re(4,5,16,8,1),new Re(4,6,32,32,1),new Re(4,4,16,16,2),new Re(8,16,32,32,2),new Re(8,16,128,128,2),new Re(8,32,128,256,2),new Re(32,128,258,1024,2),new Re(32,258,258,4096,2)],Ee=["need dictionary","stream end","","","stream error","data error","","buffer error","",""];function Me(e,t,n,r){const s=e[2*t],i=e[2*n];return i>s||s==i&&r[t]<=r[n]}function Ke(){const e=this;let t,r,o,c,f,a,l,u,w,h,d,p,y,m,b,g,k,v,S,C,z,_,I,x,A,D,V,R,B,E,M,K,N;const P=new xe,U=new xe,T=new xe;let W,H,L,j,F,O;function q(){let t;for(t=0;286>t;t++)M[2*t]=0;for(t=0;30>t;t++)K[2*t]=0;for(t=0;19>t;t++)N[2*t]=0;M[512]=1,e.be=e.ge=0,H=L=0}function G(e,t){let n,r=-1,s=e[1],i=0,o=7,c=4;0===s&&(o=138,c=3),e[2*(t+1)+1]=65535;for(let f=0;t>=f;f++)n=s,s=e[2*(f+1)+1],++i<o&&n==s||(c>i?N[2*n]+=i:0!==n?(n!=r&&N[2*n]++,N[32]++):i>10?N[36]++:N[34]++,i=0,r=n,0===s?(o=138,c=3):n==s?(o=6,c=3):(o=7,c=4))}function J(t){e.Fe[e.pending++]=t}function Q(e){J(255&e),J(e>>>8&255)}function X(e,t){let n;const r=t;O>16-r?(n=e,F|=n<<O&65535,Q(F),F=n>>>16-O,O+=r-16):(F|=e<<O&65535,O+=r)}function Y(e,t){const n=2*e;X(65535&t[n],65535&t[n+1])}function Z(e,t){let n,r,s=-1,i=e[1],o=0,c=7,f=4;for(0===i&&(c=138,f=3),n=0;t>=n;n++)if(r=i,i=e[2*(n+1)+1],++o>=c||r!=i){if(f>o)do{Y(r,N)}while(0!=--o);else 0!==r?(r!=s&&(Y(r,N),o--),Y(16,N),X(o-3,2)):o>10?(Y(18,N),X(o-11,7)):(Y(17,N),X(o-3,3));o=0,s=r,0===i?(c=138,f=3):r==i?(c=6,f=3):(c=7,f=4)}}function $(){16==O?(Q(F),F=0,O=0):8>O||(J(255&F),F>>>=8,O-=8)}function ee(t,r){let s,i,o;if(e.Oe[H]=t,e.qe[H]=255&r,H++,0===t?M[2*r]++:(L++,t--,M[2*(xe.Ie[r]+256+1)]++,K[2*xe.De(t)]++),0==(8191&H)&&V>2){for(s=8*H,i=z-k,o=0;30>o;o++)s+=K[2*o]*(5+xe.Re[o]);if(s>>>=3,L<n.floor(H/2)&&s<n.floor(i/2))return!0}return H==W-1}function te(t,n){let r,s,i,o,c=0;if(0!==H)do{r=e.Oe[c],s=e.qe[c],c++,0===r?Y(s,t):(i=xe.Ie[s],Y(i+256+1,t),o=xe.Ve[i],0!==o&&(s-=xe.xe[i],X(s,o)),r--,i=xe.De(r),Y(i,n),o=xe.Re[i],0!==o&&(r-=xe.Ae[i],X(r,o)))}while(H>c);Y(256,t),j=t[513]}function ne(){O>8?Q(F):O>0&&J(255&F),F=0,O=0}function re(t,n,r){X(0+(r?1:0),3),((t,n)=>{ne(),j=8,Q(n),Q(~n),e.Fe.set(u.subarray(t,t+n),e.pending),e.pending+=n})(t,n)}function se(n){((t,n,r)=>{let s,i,o=0;V>0?(P.ae(e),U.ae(e),o=(()=>{let t;for(G(M,P.ke),G(K,U.ke),T.ae(e),t=18;t>=3&&0===N[2*xe.Ee[t]+1];t--);return e.be+=14+3*(t+1),t})(),s=e.be+3+7>>>3,i=e.ge+3+7>>>3,i>s||(s=i)):s=i=n+5,n+4>s||-1==t?i==s?(X(2+(r?1:0),3),te(Ae.Me,Ae.We)):(X(4+(r?1:0),3),((e,t,n)=>{let r;for(X(e-257,5),X(t-1,5),X(n-4,4),r=0;n>r;r++)X(N[2*xe.Ee[r]+1],3);Z(M,e-1),Z(K,t-1)})(P.ke+1,U.ke+1,o+1),te(M,K)):re(t,n,r),q(),r&&ne()})(0>k?-1:k,z-k,n),k=z,t.Ge()}function ie(){let e,n,r,s;do{if(s=w-I-z,0===s&&0===z&&0===I)s=f;else if(-1==s)s--;else if(z>=f+f-262){u.set(u.subarray(f,f+f),0),_-=f,z-=f,k-=f,e=y,r=e;do{n=65535&d[--r],d[r]=f>n?0:n-f}while(0!=--e);e=f,r=e;do{n=65535&h[--r],h[r]=f>n?0:n-f}while(0!=--e);s+=f}if(0===t.Je)return;e=t.Qe(u,z+I,s),I+=e,3>I||(p=255&u[z],p=(p<<g^255&u[z+1])&b)}while(262>I&&0!==t.Je)}function oe(e){let t,n,r=A,s=z,i=x;const o=z>f-262?z-(f-262):0;let c=E;const a=l,w=z+258;let d=u[s+i-1],p=u[s+i];B>x||(r>>=2),c>I&&(c=I);do{if(t=e,u[t+i]==p&&u[t+i-1]==d&&u[t]==u[s]&&u[++t]==u[s+1]){s+=2,t++;do{}while(u[++s]==u[++t]&&u[++s]==u[++t]&&u[++s]==u[++t]&&u[++s]==u[++t]&&u[++s]==u[++t]&&u[++s]==u[++t]&&u[++s]==u[++t]&&u[++s]==u[++t]&&w>s);if(n=258-(w-s),s=w-258,n>i){if(_=e,i=n,n>=c)break;d=u[s+i-1],p=u[s+i]}}}while((e=65535&h[e&a])>o&&0!=--r);return i>I?I:i}e.me=[],e._e=[],e.ye=[],M=[],K=[],N=[],e.ve=(t,n)=>{const r=e.ye,s=r[n];let i=n<<1;for(;i<=e.de&&(i<e.de&&Me(t,r[i+1],r[i],e.me)&&i++,!Me(t,s,r[i],e.me));)r[n]=r[i],n=i,i<<=1;r[n]=s},e.Xe=(t,S,_,H,L,G)=>(H||(H=8),L||(L=8),G||(G=0),t.Ye=null,-1==S&&(S=6),1>L||L>9||8!=H||9>_||_>15||0>S||S>9||0>G||G>2?-2:(t.Ze=e,a=_,f=1<<a,l=f-1,m=L+7,y=1<<m,b=y-1,g=n.floor((m+3-1)/3),u=new s(2*f),h=[],d=[],W=1<<L+6,e.Fe=new s(4*W),o=4*W,e.Oe=new i(W),e.qe=new s(W),V=S,R=G,(t=>(t.$e=t.et=0,t.Ye=null,e.pending=0,e.tt=0,r=113,c=0,P.le=M,P.we=Ae.He,U.le=K,U.we=Ae.Le,T.le=N,T.we=Ae.je,F=0,O=0,j=8,q(),(()=>{w=2*f,d[y-1]=0;for(let e=0;y-1>e;e++)d[e]=0;D=Be[V].Ne,B=Be[V].Ke,E=Be[V].Pe,A=Be[V].Ue,z=0,k=0,I=0,v=x=2,C=0,p=0})(),0))(t))),e.nt=()=>42!=r&&113!=r&&666!=r?-2:(e.qe=null,e.Oe=null,e.Fe=null,d=null,h=null,u=null,e.Ze=null,113==r?-3:0),e.rt=(e,t,n)=>{let r=0;return-1==t&&(t=6),0>t||t>9||0>n||n>2?-2:(Be[V].Te!=Be[t].Te&&0!==e.$e&&(r=e.st(1)),V!=t&&(V=t,D=Be[V].Ne,B=Be[V].Ke,E=Be[V].Pe,A=Be[V].Ue),R=n,r)},e.it=(e,t,n)=>{let s,i=n,o=0;if(!t||42!=r)return-2;if(3>i)return 0;for(i>f-262&&(i=f-262,o=n-i),u.set(t.subarray(o,o+i),0),z=i,k=i,p=255&u[0],p=(p<<g^255&u[1])&b,s=0;i-3>=s;s++)p=(p<<g^255&u[s+2])&b,h[s&l]=d[p],d[p]=s;return 0},e.st=(n,s)=>{let i,w,m,A,B;if(s>4||0>s)return-2;if(!n.ot||!n.ct&&0!==n.Je||666==r&&4!=s)return n.Ye=Ee[4],-2;if(0===n.ft)return n.Ye=Ee[7],-5;var E;if(t=n,A=c,c=s,42==r&&(w=8+(a-8<<4)<<8,m=(V-1&255)>>1,m>3&&(m=3),w|=m<<6,0!==z&&(w|=32),w+=31-w%31,r=113,J((E=w)>>8&255),J(255&E)),0!==e.pending){if(t.Ge(),0===t.ft)return c=-1,0}else if(0===t.Je&&A>=s&&4!=s)return t.Ye=Ee[7],-5;if(666==r&&0!==t.Je)return n.Ye=Ee[7],-5;if(0!==t.Je||0!==I||0!=s&&666!=r){switch(B=-1,Be[V].Te){case 0:B=(e=>{let n,r=65535;for(r>o-5&&(r=o-5);;){if(1>=I){if(ie(),0===I&&0==e)return 0;if(0===I)break}if(z+=I,I=0,n=k+r,(0===z||z>=n)&&(I=z-n,z=n,se(!1),0===t.ft))return 0;if(z-k>=f-262&&(se(!1),0===t.ft))return 0}return se(4==e),0===t.ft?4==e?2:0:4==e?3:1})(s);break;case 1:B=(e=>{let n,r=0;for(;;){if(262>I){if(ie(),262>I&&0==e)return 0;if(0===I)break}if(3>I||(p=(p<<g^255&u[z+2])&b,r=65535&d[p],h[z&l]=d[p],d[p]=z),0===r||(z-r&65535)>f-262||2!=R&&(v=oe(r)),3>v)n=ee(0,255&u[z]),I--,z++;else if(n=ee(z-_,v-3),I-=v,v>D||3>I)z+=v,v=0,p=255&u[z],p=(p<<g^255&u[z+1])&b;else{v--;do{z++,p=(p<<g^255&u[z+2])&b,r=65535&d[p],h[z&l]=d[p],d[p]=z}while(0!=--v);z++}if(n&&(se(!1),0===t.ft))return 0}return se(4==e),0===t.ft?4==e?2:0:4==e?3:1})(s);break;case 2:B=(e=>{let n,r,s=0;for(;;){if(262>I){if(ie(),262>I&&0==e)return 0;if(0===I)break}if(3>I||(p=(p<<g^255&u[z+2])&b,s=65535&d[p],h[z&l]=d[p],d[p]=z),x=v,S=_,v=2,0!==s&&D>x&&f-262>=(z-s&65535)&&(2!=R&&(v=oe(s)),5>=v&&(1==R||3==v&&z-_>4096)&&(v=2)),3>x||v>x)if(0!==C){if(n=ee(0,255&u[z-1]),n&&se(!1),z++,I--,0===t.ft)return 0}else C=1,z++,I--;else{r=z+I-3,n=ee(z-1-S,x-3),I-=x-1,x-=2;do{++z>r||(p=(p<<g^255&u[z+2])&b,s=65535&d[p],h[z&l]=d[p],d[p]=z)}while(0!=--x);if(C=0,v=2,z++,n&&(se(!1),0===t.ft))return 0}}return 0!==C&&(n=ee(0,255&u[z-1]),C=0),se(4==e),0===t.ft?4==e?2:0:4==e?3:1})(s)}if(2!=B&&3!=B||(r=666),0==B||2==B)return 0===t.ft&&(c=-1),0;if(1==B){if(1==s)X(2,3),Y(256,Ae.Me),$(),9>1+j+10-O&&(X(2,3),Y(256,Ae.Me),$()),j=7;else if(re(0,0,!1),3==s)for(i=0;y>i;i++)d[i]=0;if(t.Ge(),0===t.ft)return c=-1,0}}return 4!=s?0:1}}function Ne(){const e=this;e.lt=0,e.ut=0,e.Je=0,e.$e=0,e.ft=0,e.et=0}function Pe(e){const t=new Ne,i=(o=e&&e.chunkSize?e.chunkSize:65536)+5*(n.floor(o/16383)+1);var o;const c=new s(i);let f=e?e.level:-1;void 0===f&&(f=-1),t.Xe(f),t.ot=c,this.append=(e,n)=>{let o,f,a=0,l=0,u=0;const w=[];if(e.length){t.lt=0,t.ct=e,t.Je=e.length;do{if(t.ut=0,t.ft=i,o=t.st(0),0!=o)throw new r("deflating: "+t.Ye);t.ut&&(t.ut==i?w.push(new s(c)):w.push(c.slice(0,t.ut))),u+=t.ut,n&&t.lt>0&&t.lt!=a&&(n(t.lt),a=t.lt)}while(t.Je>0||0===t.ft);return w.length>1?(f=new s(u),w.forEach((e=>{f.set(e,l),l+=e.length}))):f=w[0]||new s,f}},this.flush=()=>{let e,n,o=0,f=0;const a=[];do{if(t.ut=0,t.ft=i,e=t.st(4),1!=e&&0!=e)throw new r("deflating: "+t.Ye);i-t.ft>0&&a.push(c.slice(0,t.ut)),f+=t.ut}while(t.Je>0||0===t.ft);return t.nt(),n=new s(f),a.forEach((e=>{n.set(e,o),o+=e.length})),n}}Ne.prototype={Xe(e,t){const n=this;return n.Ze=new Ke,t||(t=15),n.Ze.Xe(n,e,t)},st(e){const t=this;return t.Ze?t.Ze.st(t,e):-2},nt(){const e=this;if(!e.Ze)return-2;const t=e.Ze.nt();return e.Ze=null,t},rt(e,t){const n=this;return n.Ze?n.Ze.rt(n,e,t):-2},it(e,t){const n=this;return n.Ze?n.Ze.it(n,e,t):-2},Qe(e,t,n){const r=this;let s=r.Je;return s>n&&(s=n),0===s?0:(r.Je-=s,e.set(r.ct.subarray(r.lt,r.lt+s),t),r.lt+=s,r.$e+=s,s)},Ge(){const e=this;let t=e.Ze.pending;t>e.ft&&(t=e.ft),0!==t&&(e.ot.set(e.Ze.Fe.subarray(e.Ze.tt,e.Ze.tt+t),e.ut),e.ut+=t,e.Ze.tt+=t,e.et+=t,e.ft-=t,e.Ze.pending-=t,0===e.Ze.pending&&(e.Ze.tt=0))}};const Ue=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535],Te=[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],We=[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],He=[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],Le=[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],je=[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],Fe=[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 Oe(){let e,t,n,r,s,i;function o(e,t,o,c,f,a,l,u,w,h,d){let p,y,m,b,g,k,v,S,C,z,_,I,x,A,D;z=0,g=o;do{n[e[t+z]]++,z++,g--}while(0!==g);if(n[0]==o)return l[0]=-1,u[0]=0,0;for(S=u[0],k=1;15>=k&&0===n[k];k++);for(v=k,k>S&&(S=k),g=15;0!==g&&0===n[g];g--);for(m=g,S>g&&(S=g),u[0]=S,A=1<<k;g>k;k++,A<<=1)if(0>(A-=n[k]))return-3;if(0>(A-=n[g]))return-3;for(n[g]+=A,i[1]=k=0,z=1,x=2;0!=--g;)i[x]=k+=n[z],x++,z++;g=0,z=0;do{0!==(k=e[t+z])&&(d[i[k]++]=g),z++}while(++g<o);for(o=i[m],i[0]=g=0,z=0,b=-1,I=-S,s[0]=0,_=0,D=0;m>=v;v++)for(p=n[v];0!=p--;){for(;v>I+S;){if(b++,I+=S,D=m-I,D=D>S?S:D,(y=1<<(k=v-I))>p+1&&(y-=p+1,x=v,D>k))for(;++k<D&&(y<<=1)>n[++x];)y-=n[x];if(D=1<<k,h[0]+D>1440)return-3;s[b]=_=h[0],h[0]+=D,0!==b?(i[b]=g,r[0]=k,r[1]=S,k=g>>>I-S,r[2]=_-s[b-1]-k,w.set(r,3*(s[b-1]+k))):l[0]=_}for(r[1]=v-I,o>z?d[z]<c?(r[0]=256>d[z]?0:96,r[2]=d[z++]):(r[0]=a[d[z]-c]+16+64,r[2]=f[d[z++]-c]):r[0]=192,y=1<<v-I,k=g>>>I;D>k;k+=y)w.set(r,3*(_+k));for(k=1<<v-1;0!=(g&k);k>>>=1)g^=k;for(g^=k,C=(1<<I)-1;(g&C)!=i[b];)b--,I-=S,C=(1<<I)-1}return 0!==A&&1!=m?-5:0}function f(o){let f;for(e||(e=[],t=[],n=new c(16),r=[],s=new c(15),i=new c(16)),t.length<o&&(t=[]),f=0;o>f;f++)t[f]=0;for(f=0;16>f;f++)n[f]=0;for(f=0;3>f;f++)r[f]=0;s.set(n.subarray(0,15),0),i.set(n.subarray(0,16),0)}this.wt=(n,r,s,i,c)=>{let a;return f(19),e[0]=0,a=o(n,0,19,19,null,null,s,r,i,e,t),-3==a?c.Ye="oversubscribed dynamic bit lengths tree":-5!=a&&0!==r[0]||(c.Ye="incomplete dynamic bit lengths tree",a=-3),a},this.ht=(n,r,s,i,c,a,l,u,w)=>{let h;return f(288),e[0]=0,h=o(s,0,n,257,He,Le,a,i,u,e,t),0!=h||0===i[0]?(-3==h?w.Ye="oversubscribed literal/length tree":-4!=h&&(w.Ye="incomplete literal/length tree",h=-3),h):(f(288),h=o(s,n,r,0,je,Fe,l,c,u,e,t),0!=h||0===c[0]&&n>257?(-3==h?w.Ye="oversubscribed distance tree":-5==h?(w.Ye="incomplete distance tree",h=-3):-4!=h&&(w.Ye="empty distance tree with lengths",h=-3),h):0)}}function qe(){const e=this;let t,n,r,s,i=0,o=0,c=0,f=0,a=0,l=0,u=0,w=0,h=0,d=0;function p(e,t,n,r,s,i,o,c){let f,a,l,u,w,h,d,p,y,m,b,g,k,v,S,C;d=c.lt,p=c.Je,w=o.dt,h=o.yt,y=o.write,m=y<o.read?o.read-y-1:o.end-y,b=Ue[e],g=Ue[t];do{for(;20>h;)p--,w|=(255&c.bt(d++))<<h,h+=8;if(f=w&b,a=n,l=r,C=3*(l+f),0!==(u=a[C]))for(;;){if(w>>=a[C+1],h-=a[C+1],0!=(16&u)){for(u&=15,k=a[C+2]+(w&Ue[u]),w>>=u,h-=u;15>h;)p--,w|=(255&c.bt(d++))<<h,h+=8;for(f=w&g,a=s,l=i,C=3*(l+f),u=a[C];;){if(w>>=a[C+1],h-=a[C+1],0!=(16&u)){for(u&=15;u>h;)p--,w|=(255&c.bt(d++))<<h,h+=8;if(v=a[C+2]+(w&Ue[u]),w>>=u,h-=u,m-=k,v>y){S=y-v;do{S+=o.end}while(0>S);if(u=o.end-S,k>u){if(k-=u,y-S>0&&u>y-S)do{o.gt[y++]=o.gt[S++]}while(0!=--u);else o.gt.set(o.gt.subarray(S,S+u),y),y+=u,S+=u,u=0;S=0}}else S=y-v,y-S>0&&2>y-S?(o.gt[y++]=o.gt[S++],o.gt[y++]=o.gt[S++],k-=2):(o.gt.set(o.gt.subarray(S,S+2),y),y+=2,S+=2,k-=2);if(y-S>0&&k>y-S)do{o.gt[y++]=o.gt[S++]}while(0!=--k);else o.gt.set(o.gt.subarray(S,S+k),y),y+=k,S+=k,k=0;break}if(0!=(64&u))return c.Ye="invalid distance code",k=c.Je-p,k=k>h>>3?h>>3:k,p+=k,d-=k,h-=k<<3,o.dt=w,o.yt=h,c.Je=p,c.$e+=d-c.lt,c.lt=d,o.write=y,-3;f+=a[C+2],f+=w&Ue[u],C=3*(l+f),u=a[C]}break}if(0!=(64&u))return 0!=(32&u)?(k=c.Je-p,k=k>h>>3?h>>3:k,p+=k,d-=k,h-=k<<3,o.dt=w,o.yt=h,c.Je=p,c.$e+=d-c.lt,c.lt=d,o.write=y,1):(c.Ye="invalid literal/length code",k=c.Je-p,k=k>h>>3?h>>3:k,p+=k,d-=k,h-=k<<3,o.dt=w,o.yt=h,c.Je=p,c.$e+=d-c.lt,c.lt=d,o.write=y,-3);if(f+=a[C+2],f+=w&Ue[u],C=3*(l+f),0===(u=a[C])){w>>=a[C+1],h-=a[C+1],o.gt[y++]=a[C+2],m--;break}}else w>>=a[C+1],h-=a[C+1],o.gt[y++]=a[C+2],m--}while(m>=258&&p>=10);return k=c.Je-p,k=k>h>>3?h>>3:k,p+=k,d-=k,h-=k<<3,o.dt=w,o.yt=h,c.Je=p,c.$e+=d-c.lt,c.lt=d,o.write=y,0}e.init=(e,i,o,c,f,a)=>{t=0,u=e,w=i,r=o,h=c,s=f,d=a,n=null},e.kt=(e,y,m)=>{let b,g,k,v,S,C,z,_=0,I=0,x=0;for(x=y.lt,v=y.Je,_=e.dt,I=e.yt,S=e.write,C=S<e.read?e.read-S-1:e.end-S;;)switch(t){case 0:if(C>=258&&v>=10&&(e.dt=_,e.yt=I,y.Je=v,y.$e+=x-y.lt,y.lt=x,e.write=S,m=p(u,w,r,h,s,d,e,y),x=y.lt,v=y.Je,_=e.dt,I=e.yt,S=e.write,C=S<e.read?e.read-S-1:e.end-S,0!=m)){t=1==m?7:9;break}c=u,n=r,o=h,t=1;case 1:for(b=c;b>I;){if(0===v)return e.dt=_,e.yt=I,y.Je=v,y.$e+=x-y.lt,y.lt=x,e.write=S,e.vt(y,m);m=0,v--,_|=(255&y.bt(x++))<<I,I+=8}if(g=3*(o+(_&Ue[b])),_>>>=n[g+1],I-=n[g+1],k=n[g],0===k){f=n[g+2],t=6;break}if(0!=(16&k)){a=15&k,i=n[g+2],t=2;break}if(0==(64&k)){c=k,o=g/3+n[g+2];break}if(0!=(32&k)){t=7;break}return t=9,y.Ye="invalid literal/length code",m=-3,e.dt=_,e.yt=I,y.Je=v,y.$e+=x-y.lt,y.lt=x,e.write=S,e.vt(y,m);case 2:for(b=a;b>I;){if(0===v)return e.dt=_,e.yt=I,y.Je=v,y.$e+=x-y.lt,y.lt=x,e.write=S,e.vt(y,m);m=0,v--,_|=(255&y.bt(x++))<<I,I+=8}i+=_&Ue[b],_>>=b,I-=b,c=w,n=s,o=d,t=3;case 3:for(b=c;b>I;){if(0===v)return e.dt=_,e.yt=I,y.Je=v,y.$e+=x-y.lt,y.lt=x,e.write=S,e.vt(y,m);m=0,v--,_|=(255&y.bt(x++))<<I,I+=8}if(g=3*(o+(_&Ue[b])),_>>=n[g+1],I-=n[g+1],k=n[g],0!=(16&k)){a=15&k,l=n[g+2],t=4;break}if(0==(64&k)){c=k,o=g/3+n[g+2];break}return t=9,y.Ye="invalid distance code",m=-3,e.dt=_,e.yt=I,y.Je=v,y.$e+=x-y.lt,y.lt=x,e.write=S,e.vt(y,m);case 4:for(b=a;b>I;){if(0===v)return e.dt=_,e.yt=I,y.Je=v,y.$e+=x-y.lt,y.lt=x,e.write=S,e.vt(y,m);m=0,v--,_|=(255&y.bt(x++))<<I,I+=8}l+=_&Ue[b],_>>=b,I-=b,t=5;case 5:for(z=S-l;0>z;)z+=e.end;for(;0!==i;){if(0===C&&(S==e.end&&0!==e.read&&(S=0,C=S<e.read?e.read-S-1:e.end-S),0===C&&(e.write=S,m=e.vt(y,m),S=e.write,C=S<e.read?e.read-S-1:e.end-S,S==e.end&&0!==e.read&&(S=0,C=S<e.read?e.read-S-1:e.end-S),0===C)))return e.dt=_,e.yt=I,y.Je=v,y.$e+=x-y.lt,y.lt=x,e.write=S,e.vt(y,m);e.gt[S++]=e.gt[z++],C--,z==e.end&&(z=0),i--}t=0;break;case 6:if(0===C&&(S==e.end&&0!==e.read&&(S=0,C=S<e.read?e.read-S-1:e.end-S),0===C&&(e.write=S,m=e.vt(y,m),S=e.write,C=S<e.read?e.read-S-1:e.end-S,S==e.end&&0!==e.read&&(S=0,C=S<e.read?e.read-S-1:e.end-S),0===C)))return e.dt=_,e.yt=I,y.Je=v,y.$e+=x-y.lt,y.lt=x,e.write=S,e.vt(y,m);m=0,e.gt[S++]=f,C--,t=0;break;case 7:if(I>7&&(I-=8,v++,x--),e.write=S,m=e.vt(y,m),S=e.write,C=S<e.read?e.read-S-1:e.end-S,e.read!=e.write)return e.dt=_,e.yt=I,y.Je=v,y.$e+=x-y.lt,y.lt=x,e.write=S,e.vt(y,m);t=8;case 8:return m=1,e.dt=_,e.yt=I,y.Je=v,y.$e+=x-y.lt,y.lt=x,e.write=S,e.vt(y,m);case 9:return m=-3,e.dt=_,e.yt=I,y.Je=v,y.$e+=x-y.lt,y.lt=x,e.write=S,e.vt(y,m);default:return m=-2,e.dt=_,e.yt=I,y.Je=v,y.$e+=x-y.lt,y.lt=x,e.write=S,e.vt(y,m)}},e.St=()=>{}}Oe.Ct=(e,t,n,r)=>(e[0]=9,t[0]=5,n[0]=Te,r[0]=We,0);const Ge=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];function Je(e,t){const n=this;let r,i=0,o=0,f=0,a=0;const l=[0],u=[0],w=new qe;let h=0,d=new c(4320);const p=new Oe;n.yt=0,n.dt=0,n.gt=new s(t),n.end=t,n.read=0,n.write=0,n.reset=(e,t)=>{t&&(t[0]=0),6==i&&w.St(e),i=0,n.yt=0,n.dt=0,n.read=n.write=0},n.reset(e,null),n.vt=(e,t)=>{let r,s,i;return s=e.ut,i=n.read,r=(i>n.write?n.end:n.write)-i,r>e.ft&&(r=e.ft),0!==r&&-5==t&&(t=0),e.ft-=r,e.et+=r,e.ot.set(n.gt.subarray(i,i+r),s),s+=r,i+=r,i==n.end&&(i=0,n.write==n.end&&(n.write=0),r=n.write-i,r>e.ft&&(r=e.ft),0!==r&&-5==t&&(t=0),e.ft-=r,e.et+=r,e.ot.set(n.gt.subarray(i,i+r),s),s+=r,i+=r),e.ut=s,n.read=i,t},n.kt=(e,t)=>{let s,c,y,m,b,g,k,v;for(m=e.lt,b=e.Je,c=n.dt,y=n.yt,g=n.write,k=g<n.read?n.read-g-1:n.end-g;;){let S,C,z,_,I,x,A,D;switch(i){case 0:for(;3>y;){if(0===b)return n.dt=c,n.yt=y,e.Je=b,e.$e+=m-e.lt,e.lt=m,n.write=g,n.vt(e,t);t=0,b--,c|=(255&e.bt(m++))<<y,y+=8}switch(s=7&c,h=1&s,s>>>1){case 0:c>>>=3,y-=3,s=7&y,c>>>=s,y-=s,i=1;break;case 1:S=[],C=[],z=[[]],_=[[]],Oe.Ct(S,C,z,_),w.init(S[0],C[0],z[0],0,_[0],0),c>>>=3,y-=3,i=6;break;case 2:c>>>=3,y-=3,i=3;break;case 3:return c>>>=3,y-=3,i=9,e.Ye="invalid block type",t=-3,n.dt=c,n.yt=y,e.Je=b,e.$e+=m-e.lt,e.lt=m,n.write=g,n.vt(e,t)}break;case 1:for(;32>y;){if(0===b)return n.dt=c,n.yt=y,e.Je=b,e.$e+=m-e.lt,e.lt=m,n.write=g,n.vt(e,t);t=0,b--,c|=(255&e.bt(m++))<<y,y+=8}if((~c>>>16&65535)!=(65535&c))return i=9,e.Ye="invalid stored block lengths",t=-3,n.dt=c,n.yt=y,e.Je=b,e.$e+=m-e.lt,e.lt=m,n.write=g,n.vt(e,t);o=65535&c,c=y=0,i=0!==o?2:0!==h?7:0;break;case 2:if(0===b)return n.dt=c,n.yt=y,e.Je=b,e.$e+=m-e.lt,e.lt=m,n.write=g,n.vt(e,t);if(0===k&&(g==n.end&&0!==n.read&&(g=0,k=g<n.read?n.read-g-1:n.end-g),0===k&&(n.write=g,t=n.vt(e,t),g=n.write,k=g<n.read?n.read-g-1:n.end-g,g==n.end&&0!==n.read&&(g=0,k=g<n.read?n.read-g-1:n.end-g),0===k)))return n.dt=c,n.yt=y,e.Je=b,e.$e+=m-e.lt,e.lt=m,n.write=g,n.vt(e,t);if(t=0,s=o,s>b&&(s=b),s>k&&(s=k),n.gt.set(e.Qe(m,s),g),m+=s,b-=s,g+=s,k-=s,0!=(o-=s))break;i=0!==h?7:0;break;case 3:for(;14>y;){if(0===b)return n.dt=c,n.yt=y,e.Je=b,e.$e+=m-e.lt,e.lt=m,n.write=g,n.vt(e,t);t=0,b--,c|=(255&e.bt(m++))<<y,y+=8}if(f=s=16383&c,(31&s)>29||(s>>5&31)>29)return i=9,e.Ye="too many length or distance symbols",t=-3,n.dt=c,n.yt=y,e.Je=b,e.$e+=m-e.lt,e.lt=m,n.write=g,n.vt(e,t);if(s=258+(31&s)+(s>>5&31),!r||r.length<s)r=[];else for(v=0;s>v;v++)r[v]=0;c>>>=14,y-=14,a=0,i=4;case 4:for(;4+(f>>>10)>a;){for(;3>y;){if(0===b)return n.dt=c,n.yt=y,e.Je=b,e.$e+=m-e.lt,e.lt=m,n.write=g,n.vt(e,t);t=0,b--,c|=(255&e.bt(m++))<<y,y+=8}r[Ge[a++]]=7&c,c>>>=3,y-=3}for(;19>a;)r[Ge[a++]]=0;if(l[0]=7,s=p.wt(r,l,u,d,e),0!=s)return-3==(t=s)&&(r=null,i=9),n.dt=c,n.yt=y,e.Je=b,e.$e+=m-e.lt,e.lt=m,n.write=g,n.vt(e,t);a=0,i=5;case 5:for(;s=f,258+(31&s)+(s>>5&31)>a;){let o,w;for(s=l[0];s>y;){if(0===b)return n.dt=c,n.yt=y,e.Je=b,e.$e+=m-e.lt,e.lt=m,n.write=g,n.vt(e,t);t=0,b--,c|=(255&e.bt(m++))<<y,y+=8}if(s=d[3*(u[0]+(c&Ue[s]))+1],w=d[3*(u[0]+(c&Ue[s]))+2],16>w)c>>>=s,y-=s,r[a++]=w;else{for(v=18==w?7:w-14,o=18==w?11:3;s+v>y;){if(0===b)return n.dt=c,n.yt=y,e.Je=b,e.$e+=m-e.lt,e.lt=m,n.write=g,n.vt(e,t);t=0,b--,c|=(255&e.bt(m++))<<y,y+=8}if(c>>>=s,y-=s,o+=c&Ue[v],c>>>=v,y-=v,v=a,s=f,v+o>258+(31&s)+(s>>5&31)||16==w&&1>v)return r=null,i=9,e.Ye="invalid bit length repeat",t=-3,n.dt=c,n.yt=y,e.Je=b,e.$e+=m-e.lt,e.lt=m,n.write=g,n.vt(e,t);w=16==w?r[v-1]:0;do{r[v++]=w}while(0!=--o);a=v}}if(u[0]=-1,I=[],x=[],A=[],D=[],I[0]=9,x[0]=6,s=f,s=p.ht(257+(31&s),1+(s>>5&31),r,I,x,A,D,d,e),0!=s)return-3==s&&(r=null,i=9),t=s,n.dt=c,n.yt=y,e.Je=b,e.$e+=m-e.lt,e.lt=m,n.write=g,n.vt(e,t);w.init(I[0],x[0],d,A[0],d,D[0]),i=6;case 6:if(n.dt=c,n.yt=y,e.Je=b,e.$e+=m-e.lt,e.lt=m,n.write=g,1!=(t=w.kt(n,e,t)))return n.vt(e,t);if(t=0,w.St(e),m=e.lt,b=e.Je,c=n.dt,y=n.yt,g=n.write,k=g<n.read?n.read-g-1:n.end-g,0===h){i=0;break}i=7;case 7:if(n.write=g,t=n.vt(e,t),g=n.write,k=g<n.read?n.read-g-1:n.end-g,n.read!=n.write)return n.dt=c,n.yt=y,e.Je=b,e.$e+=m-e.lt,e.lt=m,n.write=g,n.vt(e,t);i=8;case 8:return t=1,n.dt=c,n.yt=y,e.Je=b,e.$e+=m-e.lt,e.lt=m,n.write=g,n.vt(e,t);case 9:return t=-3,n.dt=c,n.yt=y,e.Je=b,e.$e+=m-e.lt,e.lt=m,n.write=g,n.vt(e,t);default:return t=-2,n.dt=c,n.yt=y,e.Je=b,e.$e+=m-e.lt,e.lt=m,n.write=g,n.vt(e,t)}}},n.St=e=>{n.reset(e,null),n.gt=null,d=null},n.zt=(e,t,r)=>{n.gt.set(e.subarray(t,t+r),0),n.read=n.write=r},n._t=()=>1==i?1:0}const Qe=[0,0,255,255];function Xe(){const e=this;function t(e){return e&&e.It?(e.$e=e.et=0,e.Ye=null,e.It.mode=7,e.It.xt.reset(e,null),0):-2}e.mode=0,e.method=0,e.At=[0],e.Dt=0,e.marker=0,e.Vt=0,e.Rt=t=>(e.xt&&e.xt.St(t),e.xt=null,0),e.Bt=(n,r)=>(n.Ye=null,e.xt=null,8>r||r>15?(e.Rt(n),-2):(e.Vt=r,n.It.xt=new Je(n,1<<r),t(n),0)),e.Et=(e,t)=>{let n,r;if(!e||!e.It||!e.ct)return-2;const s=e.It;for(t=4==t?-5:0,n=-5;;)switch(s.mode){case 0:if(0===e.Je)return n;if(n=t,e.Je--,e.$e++,8!=(15&(s.method=e.bt(e.lt++)))){s.mode=13,e.Ye="unknown compression method",s.marker=5;break}if(8+(s.method>>4)>s.Vt){s.mode=13,e.Ye="invalid win size",s.marker=5;break}s.mode=1;case 1:if(0===e.Je)return n;if(n=t,e.Je--,e.$e++,r=255&e.bt(e.lt++),((s.method<<8)+r)%31!=0){s.mode=13,e.Ye="incorrect header check",s.marker=5;break}if(0==(32&r)){s.mode=7;break}s.mode=2;case 2:if(0===e.Je)return n;n=t,e.Je--,e.$e++,s.Dt=(255&e.bt(e.lt++))<<24&4278190080,s.mode=3;case 3:if(0===e.Je)return n;n=t,e.Je--,e.$e++,s.Dt+=(255&e.bt(e.lt++))<<16&16711680,s.mode=4;case 4:if(0===e.Je)return n;n=t,e.Je--,e.$e++,s.Dt+=(255&e.bt(e.lt++))<<8&65280,s.mode=5;case 5:return 0===e.Je?n:(n=t,e.Je--,e.$e++,s.Dt+=255&e.bt(e.lt++),s.mode=6,2);case 6:return s.mode=13,e.Ye="need dictionary",s.marker=0,-2;case 7:if(n=s.xt.kt(e,n),-3==n){s.mode=13,s.marker=0;break}if(0==n&&(n=t),1!=n)return n;n=t,s.xt.reset(e,s.At),s.mode=12;case 12:return e.Je=0,1;case 13:return-3;default:return-2}},e.Mt=(e,t,n)=>{let r=0,s=n;if(!e||!e.It||6!=e.It.mode)return-2;const i=e.It;return s<1<<i.Vt||(s=(1<<i.Vt)-1,r=n-s),i.xt.zt(t,r,s),i.mode=7,0},e.Kt=e=>{let n,r,s,i,o;if(!e||!e.It)return-2;const c=e.It;if(13!=c.mode&&(c.mode=13,c.marker=0),0===(n=e.Je))return-5;for(r=e.lt,s=c.marker;0!==n&&4>s;)e.bt(r)==Qe[s]?s++:s=0!==e.bt(r)?0:4-s,r++,n--;return e.$e+=r-e.lt,e.lt=r,e.Je=n,c.marker=s,4!=s?-3:(i=e.$e,o=e.et,t(e),e.$e=i,e.et=o,c.mode=7,0)},e.Nt=e=>e&&e.It&&e.It.xt?e.It.xt._t():-2}function Ye(){}function Ze(e){const t=new Ye,i=e&&e.chunkSize?n.floor(2*e.chunkSize):131072,o=new s(i);let c=!1;t.Bt(),t.ot=o,this.append=(e,n)=>{const f=[];let a,l,u=0,w=0,h=0;if(0!==e.length){t.lt=0,t.ct=e,t.Je=e.length;do{if(t.ut=0,t.ft=i,0!==t.Je||c||(t.lt=0,c=!0),a=t.Et(0),c&&-5===a){if(0!==t.Je)throw new r("inflating: bad input")}else if(0!==a&&1!==a)throw new r("inflating: "+t.Ye);if((c||1===a)&&t.Je===e.length)throw new r("inflating: bad input");t.ut&&(t.ut===i?f.push(new s(o)):f.push(o.slice(0,t.ut))),h+=t.ut,n&&t.lt>0&&t.lt!=u&&(n(t.lt),u=t.lt)}while(t.Je>0||0===t.ft);return f.length>1?(l=new s(h),f.forEach((e=>{l.set(e,w),w+=e.length}))):l=f[0]||new s,l}},this.flush=()=>{t.Rt()}}Ye.prototype={Bt(e){const t=this;return t.It=new Xe,e||(e=15),t.It.Bt(t,e)},Et(e){const t=this;return t.It?t.It.Et(t,e):-2},Rt(){const e=this;if(!e.It)return-2;const t=e.It.Rt(e);return e.It=null,t},Kt(){const e=this;return e.It?e.It.Kt(e):-2},Mt(e,t){const n=this;return n.It?n.It.Mt(n,e,t):-2},bt(e){return this.ct[e]},Qe(e,t){return this.ct.subarray(e,e+t)}},self.initCodec=()=>{self.Deflate=Pe,self.Inflate=Ze};\n'],{type:"text/javascript"}));e({workerScripts:{inflate:[t],deflate:[t]}});}
6120
+ function pipeThrough(readable, transformStream) {
6121
+ return readable.pipeThrough(transformStream);
6122
+ }
6135
6123
 
6136
6124
  /*
6137
6125
  Copyright (c) 2022 Gildas Lormeau. All rights reserved.
@@ -6161,56 +6149,50 @@
6161
6149
  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
6162
6150
  */
6163
6151
 
6164
- function getMimeType() {
6165
- return "application/octet-stream";
6166
- }
6167
-
6168
- function initShimAsyncCodec(library, options = {}, registerDataHandler) {
6169
- return {
6170
- Deflate: createCodecClass(library.Deflate, options.deflate, registerDataHandler),
6171
- Inflate: createCodecClass(library.Inflate, options.inflate, registerDataHandler)
6172
- };
6173
- }
6152
+ const MESSAGE_EVENT_TYPE = "message";
6153
+ const MESSAGE_START = "start";
6154
+ const MESSAGE_PULL = "pull";
6155
+ const MESSAGE_DATA = "data";
6156
+ const MESSAGE_ACK_DATA = "ack";
6157
+ const MESSAGE_CLOSE = "close";
6158
+ const CODEC_DEFLATE = "deflate";
6159
+ const CODEC_INFLATE = "inflate";
6174
6160
 
6175
- function createCodecClass(constructor, constructorOptions, registerDataHandler) {
6176
- return class {
6161
+ class CodecStream extends TransformStream {
6177
6162
 
6178
- constructor(options) {
6179
- const codecAdapter = this;
6180
- const onData = data => {
6181
- if (codecAdapter.pendingData) {
6182
- const { pendingData } = codecAdapter;
6183
- codecAdapter.pendingData = new Uint8Array(pendingData.length + data.length);
6184
- pendingData.set(pendingData, 0);
6185
- pendingData.set(data, pendingData.length);
6186
- } else {
6187
- codecAdapter.pendingData = new Uint8Array(data);
6163
+ constructor(options, config) {
6164
+ super({});
6165
+ const codec = this;
6166
+ const { codecType } = options;
6167
+ let Stream;
6168
+ if (codecType.startsWith(CODEC_DEFLATE)) {
6169
+ Stream = DeflateStream;
6170
+ } else if (codecType.startsWith(CODEC_INFLATE)) {
6171
+ Stream = InflateStream;
6172
+ }
6173
+ let size = 0;
6174
+ const stream = new Stream(options, config);
6175
+ const readable = super.readable;
6176
+ const transformStream = new TransformStream({
6177
+ transform(chunk, controller) {
6178
+ if (chunk && chunk.length) {
6179
+ size += chunk.length;
6180
+ controller.enqueue(chunk);
6188
6181
  }
6189
- };
6190
- if (Object.hasOwn(options, "level") && options.level === undefined) {
6191
- delete options.level;
6182
+ },
6183
+ flush() {
6184
+ const { signature } = stream;
6185
+ Object.assign(codec, {
6186
+ signature,
6187
+ size
6188
+ });
6192
6189
  }
6193
- codecAdapter.codec = new constructor(Object.assign({}, constructorOptions, options));
6194
- registerDataHandler(codecAdapter.codec, onData);
6195
- }
6196
- append(data) {
6197
- this.codec.push(data);
6198
- return getResponse(this);
6199
- }
6200
- flush() {
6201
- this.codec.push(new Uint8Array(), true);
6202
- return getResponse(this);
6203
- }
6204
- };
6205
-
6206
- function getResponse(codec) {
6207
- if (codec.pendingData) {
6208
- const output = codec.pendingData;
6209
- codec.pendingData = null;
6210
- return output;
6211
- } else {
6212
- return new Uint8Array();
6213
- }
6190
+ });
6191
+ Object.defineProperty(codec, "readable", {
6192
+ get() {
6193
+ return readable.pipeThrough(stream).pipeThrough(transformStream);
6194
+ }
6195
+ });
6214
6196
  }
6215
6197
  }
6216
6198
 
@@ -6242,25 +6224,26 @@
6242
6224
  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
6243
6225
  */
6244
6226
 
6245
- let workersSupported;
6246
- let classicWorkersSupported = true;
6247
- let transferStreamsSupported = true;
6227
+ // deno-lint-ignore valid-typeof
6228
+ const WEB_WORKERS_SUPPORTED = typeof Worker != UNDEFINED_TYPE$1;
6248
6229
 
6249
6230
  class CodecWorker {
6250
6231
 
6251
6232
  constructor(workerData, stream, workerOptions, onTaskFinished) {
6252
6233
  const { readable, writable } = stream;
6253
6234
  const { options, config, streamOptions, useWebWorkers, transferStreams, scripts } = workerOptions;
6235
+ const { signal } = streamOptions;
6254
6236
  Object.assign(workerData, {
6255
6237
  busy: true,
6256
- readable,
6238
+ readable: readable.pipeThrough(new ReadableStreamHooks(readable, streamOptions, config), { signal }),
6257
6239
  writable,
6258
6240
  options: Object.assign({}, options),
6259
6241
  scripts,
6260
6242
  transferStreams,
6261
6243
  terminate() {
6262
- if (workerData.worker && !workerData.busy) {
6263
- workerData.worker.terminate();
6244
+ const { worker, busy } = workerData;
6245
+ if (worker && !busy) {
6246
+ worker.terminate();
6264
6247
  workerData.interface = null;
6265
6248
  }
6266
6249
  },
@@ -6269,30 +6252,34 @@
6269
6252
  onTaskFinished(workerData);
6270
6253
  }
6271
6254
  });
6272
- const { signal, onstart, onprogress, size, onend } = streamOptions;
6255
+ return (useWebWorkers && WEB_WORKERS_SUPPORTED ? createWebWorkerInterface : createWorkerInterface)(workerData, config);
6256
+ }
6257
+ }
6258
+
6259
+ class ReadableStreamHooks extends TransformStream {
6260
+
6261
+ constructor(readableSource, { onstart, onprogress, size, onend }, { chunkSize }) {
6273
6262
  let chunkOffset = 0;
6274
- const transformer = {};
6275
- if (onstart) {
6276
- transformer.start = () => callHandler(onstart, size);
6277
- }
6278
- transformer.transform = async (chunk, controller) => {
6279
- chunkOffset += chunk.length;
6280
- if (onprogress) {
6281
- await callHandler(onprogress, chunkOffset, size);
6282
- }
6283
- controller.enqueue(chunk);
6284
- };
6285
- transformer.flush = () => {
6286
- readable.size = chunkOffset;
6287
- if (onend) {
6288
- callHandler(onend, chunkOffset);
6263
+ super({
6264
+ start() {
6265
+ if (onstart) {
6266
+ callHandler(onstart, size);
6267
+ }
6268
+ },
6269
+ async transform(chunk, controller) {
6270
+ chunkOffset += chunk.length;
6271
+ if (onprogress) {
6272
+ await callHandler(onprogress, chunkOffset, size);
6273
+ }
6274
+ controller.enqueue(chunk);
6275
+ },
6276
+ flush() {
6277
+ readableSource.size = chunkOffset;
6278
+ if (onend) {
6279
+ callHandler(onend, chunkOffset);
6280
+ }
6289
6281
  }
6290
- };
6291
- workerData.readable = readable.pipeThrough(new TransformStream(transformer, { highWaterMark: 1, size: () => config.chunkSize }), { signal });
6292
- if (workersSupported === UNDEFINED_VALUE) {
6293
- workersSupported = typeof Worker != UNDEFINED_TYPE;
6294
- }
6295
- return useWebWorkers && workersSupported ? createWebWorkerInterface(workerData, config) : createWorkerInterface(workerData, config);
6282
+ }, { highWaterMark: 1, size: () => chunkSize });
6296
6283
  }
6297
6284
  }
6298
6285
 
@@ -6305,186 +6292,209 @@
6305
6292
  }
6306
6293
 
6307
6294
  function createWorkerInterface(workerData, config) {
6308
- const interfaceCodec = new Codec(workerData.readable, workerData.writable, workerData.options, config);
6309
- const { onTaskFinished } = workerData;
6310
- const codec = {
6311
- async run() {
6312
- try {
6313
- return await interfaceCodec.run();
6314
- } finally {
6315
- onTaskFinished();
6316
- }
6317
- }
6295
+ return {
6296
+ run: () => runWorker$1(workerData, config)
6318
6297
  };
6319
- return codec;
6320
6298
  }
6321
6299
 
6322
6300
  function createWebWorkerInterface(workerData, { baseURL, chunkSize }) {
6323
- const workerOptions = { type: "module" };
6324
- Object.assign(workerData, {
6325
- streams: {},
6326
- result: new Promise((resolve, reject) => {
6327
- workerData.resolveResult = resolve;
6328
- workerData.rejectResult = reject;
6329
- })
6330
- });
6331
6301
  if (!workerData.interface) {
6332
- if (!classicWorkersSupported) {
6333
- workerData.worker = getWorker(workerOptions);
6334
- } else {
6335
- try {
6336
- workerData.worker = getWorker({});
6337
- } catch (_error) {
6338
- classicWorkersSupported = false;
6339
- workerData.worker = getWorker(workerOptions);
6340
- }
6341
- }
6342
- workerData.worker.addEventListener(MESSAGE_EVENT_TYPE, onMessage, false);
6343
- workerData.interface = {
6344
- async run() {
6345
- const { readable, options } = workerData;
6346
- const writer = workerData.writable.getWriter();
6347
- let resolveStreamClosed, streamClosed;
6348
- streamClosed = new Promise(resolve => resolveStreamClosed = resolve);
6349
- const writable = new WritableStream({
6350
- async write(chunk) {
6351
- await writer.ready;
6352
- await writer.write(chunk);
6353
- },
6354
- async close() {
6355
- writer.releaseLock();
6356
- resolveStreamClosed();
6357
- },
6358
- abort(reason) {
6359
- writer.abort(reason);
6360
- }
6361
- });
6362
- const scripts = workerData.scripts.slice(1);
6363
- const message = { type: MESSAGE_START, scripts, options, config: { chunkSize } };
6364
- if (workerData.transferStreams && transferStreamsSupported) {
6365
- const streamsTransferred = sendMessage({ ...message, readable, writable });
6366
- if (!streamsTransferred) {
6367
- transferStreamsSupported = false;
6368
- initStreams(readable, writable);
6369
- }
6370
- } else {
6371
- sendMessage(message);
6372
- initStreams(readable, writable);
6373
- }
6374
- const result = await workerData.result;
6375
- try {
6376
- await writable.close();
6377
- } catch (_error) {
6378
- // ignored
6379
- }
6380
- await streamClosed;
6381
- return result;
6302
+ Object.assign(workerData, {
6303
+ worker: getWebWorker(workerData.scripts[0], baseURL, workerData),
6304
+ interface: {
6305
+ run: () => runWebWorker(workerData, { chunkSize })
6382
6306
  }
6383
- };
6307
+ });
6384
6308
  }
6385
6309
  return workerData.interface;
6310
+ }
6311
+
6312
+ async function runWorker$1({ options, readable, writable, onTaskFinished }, config) {
6313
+ const codecStream = new CodecStream(options, config);
6314
+ try {
6315
+ await readable.pipeThrough(codecStream).pipeTo(writable, { preventClose: true, preventAbort: true });
6316
+ const {
6317
+ signature,
6318
+ size
6319
+ } = codecStream;
6320
+ return {
6321
+ signature,
6322
+ size
6323
+ };
6324
+ } finally {
6325
+ onTaskFinished();
6326
+ }
6327
+ }
6386
6328
 
6387
- function initStreams(readable, writable) {
6388
- Object.assign(workerData.streams, {
6329
+ async function runWebWorker(workerData, config) {
6330
+ let resolveResult, rejectResult;
6331
+ const result = new Promise((resolve, reject) => {
6332
+ resolveResult = resolve;
6333
+ rejectResult = reject;
6334
+ });
6335
+ Object.assign(workerData, {
6336
+ reader: null,
6337
+ writer: null,
6338
+ resolveResult,
6339
+ rejectResult,
6340
+ result
6341
+ });
6342
+ const { readable, options } = workerData;
6343
+ const { writable, closed } = detectClosedStream(workerData.writable);
6344
+ const streamsTransferred = sendMessage({
6345
+ type: MESSAGE_START,
6346
+ scripts: workerData.scripts.slice(1),
6347
+ options,
6348
+ config,
6349
+ readable,
6350
+ writable
6351
+ }, workerData);
6352
+ if (!streamsTransferred) {
6353
+ Object.assign(workerData, {
6389
6354
  reader: readable.getReader(),
6390
6355
  writer: writable.getWriter()
6391
6356
  });
6392
6357
  }
6358
+ const resultValue = await result;
6359
+ try {
6360
+ await writable.close();
6361
+ } catch (_error) {
6362
+ // ignored
6363
+ }
6364
+ await closed;
6365
+ return resultValue;
6366
+ }
6393
6367
 
6394
- function getWorker(options) {
6395
- let url, scriptUrl;
6396
- url = workerData.scripts[0];
6397
- if (typeof url == "function") {
6398
- url = url();
6368
+ function detectClosedStream(writableSource) {
6369
+ const writer = writableSource.getWriter();
6370
+ let resolveStreamClosed;
6371
+ const closed = new Promise(resolve => resolveStreamClosed = resolve);
6372
+ const writable = new WritableStream({
6373
+ async write(chunk) {
6374
+ await writer.ready;
6375
+ await writer.write(chunk);
6376
+ },
6377
+ close() {
6378
+ writer.releaseLock();
6379
+ resolveStreamClosed();
6380
+ },
6381
+ abort(reason) {
6382
+ writer.abort(reason);
6399
6383
  }
6384
+ });
6385
+ return { writable, closed };
6386
+ }
6387
+
6388
+ let classicWorkersSupported = true;
6389
+ let transferStreamsSupported = true;
6390
+
6391
+ function getWebWorker(url, baseURL, workerData) {
6392
+ const workerOptions = { type: "module" };
6393
+ let scriptUrl, worker;
6394
+ if (typeof url == FUNCTION_TYPE$1) {
6395
+ url = url();
6396
+ }
6397
+ try {
6398
+ scriptUrl = new URL(url, baseURL);
6399
+ } catch (_error) {
6400
+ scriptUrl = url;
6401
+ }
6402
+ if (classicWorkersSupported) {
6400
6403
  try {
6401
- scriptUrl = new URL(url, baseURL);
6404
+ worker = new Worker(scriptUrl);
6402
6405
  } catch (_error) {
6403
- scriptUrl = url;
6406
+ classicWorkersSupported = false;
6407
+ worker = new Worker(scriptUrl, workerOptions);
6404
6408
  }
6405
- return new Worker(scriptUrl, options);
6409
+ } else {
6410
+ worker = new Worker(scriptUrl, workerOptions);
6406
6411
  }
6412
+ worker.addEventListener(MESSAGE_EVENT_TYPE, event => onMessage(event, workerData));
6413
+ return worker;
6414
+ }
6407
6415
 
6408
- function sendMessage(message) {
6409
- const { worker, writer, onTaskFinished } = workerData;
6410
- try {
6411
- let { data, readable, writable } = message;
6412
- const transferrables = [];
6413
- if (data) {
6414
- const { buffer, length } = data;
6415
- if (length != buffer.byteLength) {
6416
- data = new Uint8Array(data);
6417
- }
6418
- message.data = data.buffer;
6419
- transferrables.push(message.data);
6416
+ function sendMessage(message, { worker, writer, onTaskFinished, transferStreams }) {
6417
+ try {
6418
+ let { data, readable, writable } = message;
6419
+ const transferrables = [];
6420
+ if (data) {
6421
+ const { buffer, length } = data;
6422
+ if (length != buffer.byteLength) {
6423
+ data = new Uint8Array(data);
6420
6424
  }
6425
+ message.data = data.buffer;
6426
+ transferrables.push(message.data);
6427
+ }
6428
+ if (transferStreams && transferStreamsSupported) {
6421
6429
  if (readable) {
6422
6430
  transferrables.push(readable);
6423
6431
  }
6424
6432
  if (writable) {
6425
6433
  transferrables.push(writable);
6426
6434
  }
6427
- if (transferrables.length) {
6428
- try {
6429
- worker.postMessage(message, transferrables);
6430
- return true;
6431
- } catch (error) {
6432
- message.readable = message.writable = null;
6433
- worker.postMessage(message);
6434
- }
6435
- } else {
6435
+ } else {
6436
+ message.readable = message.writable = null;
6437
+ }
6438
+ if (transferrables.length) {
6439
+ try {
6440
+ worker.postMessage(message, transferrables);
6441
+ return true;
6442
+ } catch (_error) {
6443
+ transferStreamsSupported = false;
6444
+ message.readable = message.writable = null;
6436
6445
  worker.postMessage(message);
6437
6446
  }
6438
- } catch (error) {
6439
- if (writer) {
6440
- writer.releaseLock();
6441
- }
6442
- onTaskFinished();
6443
- throw error;
6447
+ } else {
6448
+ worker.postMessage(message);
6449
+ }
6450
+ } catch (error) {
6451
+ if (writer) {
6452
+ writer.releaseLock();
6444
6453
  }
6454
+ onTaskFinished();
6455
+ throw error;
6445
6456
  }
6457
+ }
6446
6458
 
6447
- async function onMessage(event) {
6448
- const message = event.data;
6449
- const { resolveResult, rejectResult, onTaskFinished } = workerData;
6450
- const { reader, writer } = workerData.streams;
6451
- const { type, data, messageId, result } = message;
6452
- const reponseError = message.error;
6453
- try {
6454
- if (reponseError) {
6455
- const { message, stack, code, name } = reponseError;
6456
- const error = new Error(message);
6457
- Object.assign(error, { stack, code, name });
6458
- close(error);
6459
- } else {
6460
- if (type == MESSAGE_PULL) {
6461
- const { value, done } = await reader.read();
6462
- sendMessage({ type: MESSAGE_DATA, data: value, done, messageId });
6463
- }
6464
- if (type == MESSAGE_DATA) {
6465
- await writer.ready;
6466
- await writer.write(new Uint8Array(data));
6467
- sendMessage({ type: MESSAGE_ACK_DATA, messageId });
6468
- }
6469
- if (type == MESSAGE_CLOSE) {
6470
- close(null, result);
6471
- }
6472
- }
6473
- } catch (error) {
6459
+ async function onMessage(event, workerData) {
6460
+ const message = event.data;
6461
+ const { reader, writer, resolveResult, rejectResult, onTaskFinished } = workerData;
6462
+ const { type, data, messageId, result } = message;
6463
+ const reponseError = message.error;
6464
+ try {
6465
+ if (reponseError) {
6466
+ const { message, stack, code, name } = reponseError;
6467
+ const error = new Error(message);
6468
+ Object.assign(error, { stack, code, name });
6474
6469
  close(error);
6475
- }
6476
-
6477
- function close(error, result) {
6478
- if (error) {
6479
- rejectResult(error);
6480
- } else {
6481
- resolveResult(result);
6470
+ } else {
6471
+ if (type == MESSAGE_PULL) {
6472
+ const { value, done } = await reader.read();
6473
+ sendMessage({ type: MESSAGE_DATA, data: value, done, messageId }, workerData);
6482
6474
  }
6483
- if (writer) {
6484
- writer.releaseLock();
6475
+ if (type == MESSAGE_DATA) {
6476
+ await writer.ready;
6477
+ await writer.write(new Uint8Array(data));
6478
+ sendMessage({ type: MESSAGE_ACK_DATA, messageId }, workerData);
6485
6479
  }
6486
- onTaskFinished();
6480
+ if (type == MESSAGE_CLOSE) {
6481
+ close(null, result);
6482
+ }
6483
+ }
6484
+ } catch (error) {
6485
+ close(error);
6486
+ }
6487
+
6488
+ function close(error, result) {
6489
+ if (error) {
6490
+ rejectResult(error);
6491
+ } else {
6492
+ resolveResult(result);
6487
6493
  }
6494
+ if (writer) {
6495
+ writer.releaseLock();
6496
+ }
6497
+ onTaskFinished();
6488
6498
  }
6489
6499
  }
6490
6500
 
@@ -6610,9 +6620,11 @@
6610
6620
  */
6611
6621
 
6612
6622
  /* global Blob, atob, btoa, XMLHttpRequest, URL, fetch, ReadableStream, WritableStream, FileReader, TransformStream, Response */
6623
+ // deno-lint-ignore-file no-this-alias
6613
6624
 
6614
6625
  const ERR_HTTP_STATUS = "HTTP error ";
6615
6626
  const ERR_HTTP_RANGE = "HTTP Range not supported";
6627
+ const ERR_ITERATOR_COMPLETED_TOO_SOON = "Writer iterator completed too soon";
6616
6628
 
6617
6629
  const CONTENT_TYPE_TEXT_PLAIN = "text/plain";
6618
6630
  const HTTP_HEADER_CONTENT_LENGTH = "Content-Length";
@@ -7145,6 +7157,65 @@
7145
7157
  }
7146
7158
  }
7147
7159
 
7160
+ class SplitZipWriter extends Stream {
7161
+
7162
+ constructor(writerGenerator, maxSize = 4294967296) {
7163
+ super();
7164
+ const writer = this;
7165
+ Object.assign(writer, {
7166
+ diskNumber: 0,
7167
+ diskOffset: 0,
7168
+ size: 0,
7169
+ availableSize: maxSize
7170
+ });
7171
+ let currentWriter, diskWritable, diskWriter;
7172
+ const writable = new WritableStream({
7173
+ async write(chunk) {
7174
+ if (!diskWriter) {
7175
+ const { value, done } = await writerGenerator.next();
7176
+ if (done && !value) {
7177
+ throw new Error(ERR_ITERATOR_COMPLETED_TOO_SOON);
7178
+ } else {
7179
+ currentWriter = value;
7180
+ currentWriter.size = 0;
7181
+ diskWritable = value.writable;
7182
+ diskWriter = diskWritable.getWriter();
7183
+ }
7184
+ await this.write(chunk);
7185
+ } else if (diskWriter && currentWriter.size + chunk.length > maxSize) {
7186
+ await diskWriter.ready;
7187
+ const chunkLength = maxSize - currentWriter.size;
7188
+ await diskWriter.write(chunk.slice(0, chunkLength));
7189
+ chunk = chunk.slice(chunkLength);
7190
+ currentWriter.size += chunkLength;
7191
+ writer.size += chunkLength;
7192
+ writer.diskOffset += diskWritable.size = currentWriter.size;
7193
+ writer.diskNumber++;
7194
+ await diskWriter.close();
7195
+ diskWriter = null;
7196
+ await this.write(chunk);
7197
+ } else {
7198
+ await diskWriter.ready;
7199
+ await diskWriter.write(chunk);
7200
+ currentWriter.size += chunk.length;
7201
+ writer.size += chunk.length;
7202
+ }
7203
+ writer.availableSize = maxSize - currentWriter.size;
7204
+ },
7205
+ async close() {
7206
+ await diskWriter.ready;
7207
+ diskWritable.size = currentWriter.size;
7208
+ await diskWriter.close();
7209
+ }
7210
+ });
7211
+ Object.defineProperty(writer, PROPERTY_NAME_WRITABLE, {
7212
+ get() {
7213
+ return writable;
7214
+ }
7215
+ });
7216
+ }
7217
+ }
7218
+
7148
7219
  function isHttpFamily(url) {
7149
7220
  const { baseURL } = getConfiguration();
7150
7221
  const { protocol } = new URL(url, baseURL);
@@ -7276,7 +7347,8 @@
7276
7347
  "rawExtraField", "bitFlag", "extraFieldZip64", "extraFieldUnicodePath", "extraFieldUnicodeComment",
7277
7348
  "extraFieldAES", "filenameUTF8", "commentUTF8", "offset", "zip64", "compressionMethod",
7278
7349
  "extraFieldNTFS", "lastAccessDate", "creationDate", "extraFieldExtendedTimestamp",
7279
- "version", "versionMadeBy", "msDosCompatible", "internalFileAttribute", "externalFileAttribute"];
7350
+ "version", "versionMadeBy", "msDosCompatible", "internalFileAttribute", "externalFileAttribute",
7351
+ "diskNumberStart"];
7280
7352
 
7281
7353
  class Entry {
7282
7354
 
@@ -7314,7 +7386,6 @@
7314
7386
  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
7315
7387
  */
7316
7388
 
7317
- const SPLIT_ZIP_FILE_SIGNATURE = 0x08074b50;
7318
7389
  const ERR_BAD_FORMAT = "File format is not recognized";
7319
7390
  const ERR_EOCDR_NOT_FOUND = "End of central directory not found";
7320
7391
  const ERR_EOCDR_ZIP64_NOT_FOUND = "End of Zip64 central directory not found";
@@ -7387,15 +7458,16 @@
7387
7458
  throw new Error(ERR_EOCDR_NOT_FOUND);
7388
7459
  }
7389
7460
  }
7390
- const { lastDiskNumber } = reader;
7391
7461
  const endOfDirectoryView = getDataView$1(endOfDirectoryInfo);
7392
7462
  let directoryDataLength = getUint32(endOfDirectoryView, 12);
7393
7463
  let directoryDataOffset = getUint32(endOfDirectoryView, 16);
7394
7464
  const commentOffset = endOfDirectoryInfo.offset;
7395
7465
  const commentLength = getUint16(endOfDirectoryView, 20);
7396
7466
  const appendedDataOffset = commentOffset + END_OF_CENTRAL_DIR_LENGTH + commentLength;
7397
- let diskNumber = getUint16(endOfDirectoryView, 4);
7398
- if (lastDiskNumber !== UNDEFINED_VALUE && diskNumber != lastDiskNumber) {
7467
+ const lastDiskNumber = getUint16(endOfDirectoryView, 4);
7468
+ const expectedLastDiskNumber = reader.lastDiskNumber || 0;
7469
+ let diskNumber = getUint16(endOfDirectoryView, 6);
7470
+ if (expectedLastDiskNumber != lastDiskNumber) {
7399
7471
  throw new Error(ERR_SPLIT_ZIP_FILE);
7400
7472
  }
7401
7473
  let filesLength = getUint16(endOfDirectoryView, 8);
@@ -7564,7 +7636,7 @@
7564
7636
  compressedSize
7565
7637
  } = zipEntry;
7566
7638
  const localDirectory = zipEntry.localDirectory = {};
7567
- let dataArray = await readUint8Array(reader, offset, 30, diskNumberStart);
7639
+ const dataArray = await readUint8Array(reader, offset, 30, diskNumberStart);
7568
7640
  const dataView = getDataView$1(dataArray);
7569
7641
  let password = getOptionValue$1(zipEntry, options, "password");
7570
7642
  password = password && password.length && password;
@@ -7935,7 +8007,7 @@
7935
8007
  const ERR_UNSUPPORTED_FORMAT = "Zip64 is not supported (make sure 'keepOrder' is set to 'true')";
7936
8008
 
7937
8009
  const EXTRAFIELD_DATA_AES = new Uint8Array([0x07, 0x00, 0x02, 0x00, 0x41, 0x45, 0x03, 0x00, 0x00]);
7938
- const EXTRAFIELD_LENGTH_ZIP64 = 24;
8010
+ const EXTRAFIELD_LENGTH_ZIP64 = 28;
7939
8011
 
7940
8012
  let workers = 0;
7941
8013
  const pendingEntries = [];
@@ -7943,14 +8015,26 @@
7943
8015
  class ZipWriter {
7944
8016
 
7945
8017
  constructor(writer, options = {}) {
8018
+ if (writer.writable === UNDEFINED_VALUE && typeof writer.next == FUNCTION_TYPE$1) {
8019
+ writer = new SplitZipWriter(writer);
8020
+ }
7946
8021
  if (writer instanceof WritableStream) {
7947
8022
  writer = { writable: writer };
7948
8023
  }
7949
8024
  if (writer.writable.size === UNDEFINED_VALUE) {
7950
8025
  writer.writable.size = 0;
7951
8026
  }
8027
+ const splitZipFile = writer instanceof SplitZipWriter;
8028
+ if (!splitZipFile) {
8029
+ Object.assign(writer, {
8030
+ diskNumber: 0,
8031
+ diskOffset: 0,
8032
+ availableSize: Infinity
8033
+ });
8034
+ }
7952
8035
  Object.assign(this, {
7953
8036
  writer,
8037
+ addSplitZipSignature: splitZipFile,
7954
8038
  options,
7955
8039
  config: getConfiguration(),
7956
8040
  files: new Map(),
@@ -8202,10 +8286,21 @@
8202
8286
  releaseLockWriter = () => delete zipWriter.lockWriter;
8203
8287
  }
8204
8288
  await initStream(fileWriter);
8289
+ const { writable, diskNumber } = writer;
8290
+ let { diskOffset } = writer;
8291
+ if (zipWriter.addSplitZipSignature) {
8292
+ delete zipWriter.addSplitZipSignature;
8293
+ const signatureArray = new Uint8Array(4);
8294
+ const signatureArrayView = new DataView(signatureArray.buffer);
8295
+ setUint32(signatureArrayView, 0, SPLIT_ZIP_FILE_SIGNATURE);
8296
+ await writeData(writable, signatureArray);
8297
+ zipWriter.offset += 4;
8298
+ }
8205
8299
  if (!bufferedWrite) {
8206
8300
  await lockPreviousFileEntry;
8207
8301
  }
8208
8302
  writingEntryData = true;
8303
+ fileEntry.diskNumberStart = diskNumber;
8209
8304
  fileEntry = await createFileEntry(reader, fileWriter, fileEntry, entryInfo, zipWriter.config, options);
8210
8305
  writingEntryData = false;
8211
8306
  files.set(name, fileEntry);
@@ -8216,7 +8311,6 @@
8216
8311
  await lockPreviousFileEntry;
8217
8312
  await requestLockWriter();
8218
8313
  writingBufferedEntryData = true;
8219
- const { writable } = writer;
8220
8314
  if (!dataDescriptor) {
8221
8315
  const arrayBuffer = await sliceAsArrayBuffer(blob, 0, 26);
8222
8316
  const arrayBufferView = new DataView(arrayBuffer);
@@ -8233,13 +8327,18 @@
8233
8327
  await writeData(writable, new Uint8Array(arrayBuffer));
8234
8328
  blob = blob.slice(arrayBuffer.byteLength);
8235
8329
  }
8330
+ fileEntry.diskNumberStart = writer.diskNumber;
8331
+ diskOffset = writer.diskOffset;
8236
8332
  await blob.stream().pipeTo(writable, { preventClose: true, signal });
8333
+ writable.size += blob.size;
8237
8334
  writingBufferedEntryData = false;
8238
8335
  }
8239
- fileEntry.offset = zipWriter.offset;
8336
+ fileEntry.offset = zipWriter.offset - diskOffset;
8240
8337
  if (fileEntry.zip64) {
8241
- const rawExtraFieldZip64View = getDataView(fileEntry.rawExtraFieldZip64);
8242
- setBigUint64(rawExtraFieldZip64View, 20, BigInt(fileEntry.offset));
8338
+ const { rawExtraFieldZip64, offset, diskNumberStart } = fileEntry;
8339
+ const rawExtraFieldZip64View = getDataView(rawExtraFieldZip64);
8340
+ setBigUint64(rawExtraFieldZip64View, 20, BigInt(offset));
8341
+ setUint32(rawExtraFieldZip64View, 28, diskNumberStart);
8243
8342
  } else if (fileEntry.offset >= MAX_32_BITS) {
8244
8343
  throw new Error(ERR_UNSUPPORTED_FORMAT);
8245
8344
  }
@@ -8283,7 +8382,7 @@
8283
8382
  }
8284
8383
  }
8285
8384
 
8286
- async function createFileEntry(reader, writer, pendingFileEntry, entryInfo, config, options) {
8385
+ async function createFileEntry(reader, writer, { diskNumberStart, lock }, entryInfo, config, options) {
8287
8386
  const {
8288
8387
  headerInfo,
8289
8388
  dataDescriptorInfo
@@ -8328,7 +8427,7 @@
8328
8427
  useCompressionStream
8329
8428
  } = options;
8330
8429
  const fileEntry = {
8331
- lock: pendingFileEntry.lock,
8430
+ lock,
8332
8431
  versionMadeBy,
8333
8432
  zip64,
8334
8433
  directory: Boolean(directory),
@@ -8343,7 +8442,8 @@
8343
8442
  extendedTimestamp,
8344
8443
  msDosCompatible,
8345
8444
  internalFileAttribute,
8346
- externalFileAttribute
8445
+ externalFileAttribute,
8446
+ diskNumberStart
8347
8447
  };
8348
8448
  let uncompressedSize = 0;
8349
8449
  let signature;
@@ -8615,10 +8715,12 @@
8615
8715
  }
8616
8716
 
8617
8717
  async function closeFile(zipWriter, comment, options) {
8618
- const { files } = zipWriter;
8718
+ const { files, writer } = zipWriter;
8619
8719
  let offset = 0;
8620
8720
  let directoryDataLength = 0;
8621
- let directoryOffset = zipWriter.offset;
8721
+ const { diskOffset, writable } = writer;
8722
+ let { diskNumber } = writer;
8723
+ let directoryOffset = zipWriter.offset - diskOffset;
8622
8724
  let filesLength = files.size;
8623
8725
  for (const [, {
8624
8726
  rawFilename,
@@ -8647,7 +8749,7 @@
8647
8749
  zip64 = true;
8648
8750
  }
8649
8751
  }
8650
- const directoryArray = new Uint8Array(directoryDataLength + (zip64 ? ZIP64_END_OF_CENTRAL_DIR_TOTAL_LENGTH : END_OF_CENTRAL_DIR_LENGTH));
8752
+ const directoryArray = new Uint8Array(directoryDataLength);
8651
8753
  const directoryView = getDataView(directoryArray);
8652
8754
  for (const [indexFileEntry, fileEntry] of Array.from(files.values()).entries()) {
8653
8755
  const {
@@ -8666,7 +8768,8 @@
8666
8768
  internalFileAttribute,
8667
8769
  externalFileAttribute,
8668
8770
  extendedTimestamp,
8669
- lastModDate
8771
+ lastModDate,
8772
+ diskNumberStart
8670
8773
  } = fileEntry;
8671
8774
  let rawExtraFieldExtendedTimestamp;
8672
8775
  if (extendedTimestamp) {
@@ -8685,17 +8788,14 @@
8685
8788
  arraySet(directoryArray, headerArray, offset + 6);
8686
8789
  setUint16(directoryView, offset + 30, extraFieldLength);
8687
8790
  setUint16(directoryView, offset + 32, getLength(rawComment));
8791
+ setUint16(directoryView, offset + 34, zip64 ? MAX_16_BITS : diskNumberStart);
8688
8792
  setUint16(directoryView, offset + 36, internalFileAttribute);
8689
8793
  if (externalFileAttribute) {
8690
8794
  setUint32(directoryView, offset + 38, externalFileAttribute);
8691
8795
  } else if (directory && msDosCompatible) {
8692
8796
  setUint8(directoryView, offset + 38, FILE_ATTR_MSDOS_DIR_MASK);
8693
8797
  }
8694
- if (zip64) {
8695
- setUint32(directoryView, offset + 42, MAX_32_BITS);
8696
- } else {
8697
- setUint32(directoryView, offset + 42, fileEntryOffset);
8698
- }
8798
+ setUint32(directoryView, offset + 42, zip64 ? MAX_32_BITS : fileEntryOffset);
8699
8799
  arraySet(directoryArray, rawFilename, offset + 46);
8700
8800
  arraySet(directoryArray, rawExtraFieldZip64, offset + 46 + getLength(rawFilename));
8701
8801
  arraySet(directoryArray, rawExtraFieldAES, offset + 46 + getLength(rawFilename, rawExtraFieldZip64));
@@ -8712,39 +8812,52 @@
8712
8812
  }
8713
8813
  }
8714
8814
  }
8815
+ await initStream(writer);
8816
+ await writeData(writable, directoryArray);
8817
+ const endOfdirectoryArray = new Uint8Array(zip64 ? ZIP64_END_OF_CENTRAL_DIR_TOTAL_LENGTH : END_OF_CENTRAL_DIR_LENGTH);
8818
+ const endOfdirectoryView = getDataView(endOfdirectoryArray);
8819
+ let lastDiskNumber = writer.diskNumber;
8820
+ const { availableSize } = writer;
8821
+ if (availableSize < endOfdirectoryArray.length) {
8822
+ lastDiskNumber++;
8823
+ }
8824
+ offset = 0;
8715
8825
  if (zip64) {
8716
- setUint32(directoryView, offset, ZIP64_END_OF_CENTRAL_DIR_SIGNATURE);
8717
- setBigUint64(directoryView, offset + 4, BigInt(44));
8718
- setUint16(directoryView, offset + 12, 45);
8719
- setUint16(directoryView, offset + 14, 45);
8720
- setBigUint64(directoryView, offset + 24, BigInt(filesLength));
8721
- setBigUint64(directoryView, offset + 32, BigInt(filesLength));
8722
- setBigUint64(directoryView, offset + 40, BigInt(directoryDataLength));
8723
- setBigUint64(directoryView, offset + 48, BigInt(directoryOffset));
8724
- setUint32(directoryView, offset + 56, ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIGNATURE);
8725
- setBigUint64(directoryView, offset + 64, BigInt(directoryOffset) + BigInt(directoryDataLength));
8726
- setUint32(directoryView, offset + 72, ZIP64_TOTAL_NUMBER_OF_DISKS);
8826
+ setUint32(endOfdirectoryView, 0, ZIP64_END_OF_CENTRAL_DIR_SIGNATURE);
8827
+ setBigUint64(endOfdirectoryView, 4, BigInt(44));
8828
+ setUint16(endOfdirectoryView, 12, 45);
8829
+ setUint16(endOfdirectoryView, 14, 45);
8830
+ setUint32(endOfdirectoryView, 16, lastDiskNumber);
8831
+ setUint32(endOfdirectoryView, 20, diskNumber);
8832
+ setBigUint64(endOfdirectoryView, 24, BigInt(filesLength));
8833
+ setBigUint64(endOfdirectoryView, 32, BigInt(filesLength));
8834
+ setBigUint64(endOfdirectoryView, 40, BigInt(directoryDataLength));
8835
+ setBigUint64(endOfdirectoryView, 48, BigInt(directoryOffset));
8836
+ setUint32(endOfdirectoryView, 56, ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIGNATURE);
8837
+ setBigUint64(endOfdirectoryView, 64, BigInt(directoryOffset) + BigInt(directoryDataLength));
8838
+ setUint32(endOfdirectoryView, 72, lastDiskNumber + 1);
8839
+ diskNumber = MAX_16_BITS;
8727
8840
  filesLength = MAX_16_BITS;
8728
8841
  directoryOffset = MAX_32_BITS;
8729
8842
  directoryDataLength = MAX_32_BITS;
8730
- offset += 76;
8731
- }
8732
- setUint32(directoryView, offset, END_OF_CENTRAL_DIR_SIGNATURE);
8733
- setUint16(directoryView, offset + 8, filesLength);
8734
- setUint16(directoryView, offset + 10, filesLength);
8735
- setUint32(directoryView, offset + 12, directoryDataLength);
8736
- setUint32(directoryView, offset + 16, directoryOffset);
8843
+ offset += ZIP64_END_OF_CENTRAL_DIR_LENGTH + ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH;
8844
+ }
8845
+ setUint32(endOfdirectoryView, offset, END_OF_CENTRAL_DIR_SIGNATURE);
8846
+ setUint16(endOfdirectoryView, offset + 4, lastDiskNumber);
8847
+ setUint16(endOfdirectoryView, offset + 6, diskNumber);
8848
+ setUint16(endOfdirectoryView, offset + 8, filesLength);
8849
+ setUint16(endOfdirectoryView, offset + 10, filesLength);
8850
+ setUint32(endOfdirectoryView, offset + 12, directoryDataLength);
8851
+ setUint32(endOfdirectoryView, offset + 16, directoryOffset);
8737
8852
  const commentLength = getLength(comment);
8738
8853
  if (commentLength) {
8739
8854
  if (commentLength <= MAX_16_BITS) {
8740
- setUint16(directoryView, offset + 20, commentLength);
8855
+ setUint16(endOfdirectoryView, offset + 20, commentLength);
8741
8856
  } else {
8742
8857
  throw new Error(ERR_INVALID_COMMENT);
8743
8858
  }
8744
8859
  }
8745
- const { writable } = zipWriter.writer;
8746
- await initStream(zipWriter.writer);
8747
- await writeData(writable, directoryArray);
8860
+ await writeData(writable, endOfdirectoryArray);
8748
8861
  if (commentLength) {
8749
8862
  await writeData(writable, comment);
8750
8863
  }
@@ -8869,6 +8982,7 @@
8869
8982
  exports.ERR_INVALID_PASSWORD = ERR_INVALID_PASSWORD;
8870
8983
  exports.ERR_INVALID_SIGNATURE = ERR_INVALID_SIGNATURE;
8871
8984
  exports.ERR_INVALID_VERSION = ERR_INVALID_VERSION;
8985
+ exports.ERR_ITERATOR_COMPLETED_TOO_SOON = ERR_ITERATOR_COMPLETED_TOO_SOON;
8872
8986
  exports.ERR_LOCAL_FILE_HEADER_NOT_FOUND = ERR_LOCAL_FILE_HEADER_NOT_FOUND;
8873
8987
  exports.ERR_SPLIT_ZIP_FILE = ERR_SPLIT_ZIP_FILE;
8874
8988
  exports.ERR_UNSUPPORTED_COMPRESSION = ERR_UNSUPPORTED_COMPRESSION;
@@ -8878,6 +8992,7 @@
8878
8992
  exports.HttpReader = HttpReader;
8879
8993
  exports.Reader = Reader;
8880
8994
  exports.SplitZipReader = SplitZipReader;
8995
+ exports.SplitZipWriter = SplitZipWriter;
8881
8996
  exports.TextReader = TextReader;
8882
8997
  exports.TextWriter = TextWriter;
8883
8998
  exports.Uint8ArrayReader = Uint8ArrayReader;