@zip.js/zip.js 2.8.30 → 2.8.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/deno.json +5 -4
- package/dist/zip-core.js +133 -334
- package/dist/zip-core.min.js +1 -1
- package/dist/zip-fs-core.js +115 -277
- package/dist/zip-fs-core.min.js +1 -1
- package/dist/zip-fs-native.js +170 -373
- package/dist/zip-fs-native.min.js +1 -1
- package/dist/zip-fs.js +169 -372
- package/dist/zip-fs.min.js +1 -1
- package/dist/zip-legacy.js +138 -339
- package/dist/zip-legacy.min.js +1 -1
- package/dist/zip-module.wasm +0 -0
- package/dist/zip-native.js +141 -342
- package/dist/zip-native.min.js +1 -1
- package/dist/zip-web-worker-native.js +1 -1
- package/dist/zip-web-worker.js +1 -1
- package/dist/zip.js +140 -341
- package/dist/zip.min.js +1 -1
- package/index-native.cjs +170 -373
- package/index-native.min.js +1 -1
- package/index.cjs +169 -372
- package/index.d.cts +2814 -0
- package/index.d.ts +238 -0
- package/index.min.js +1 -1
- package/lib/core/codec-worker.js +0 -10
- package/lib/core/configuration.js +21 -33
- package/lib/core/constants.js +3 -0
- package/lib/core/io.js +11 -19
- package/lib/core/streams/aes-crypto-stream.js +16 -20
- package/lib/core/streams/common-crypto.js +0 -2
- package/lib/core/streams/zip-crypto-stream.js +12 -16
- package/lib/core/streams/zip-entry-stream.js +2 -32
- package/lib/core/streams/zlib-js/zlib-streams.min.js +1 -1
- package/lib/core/streams/zlib-wasm/zlib-streams-loader.js +1 -3
- package/lib/core/streams/zlib-wasm/zlib-streams.wasm +0 -0
- package/lib/core/util/base64.js +68 -0
- package/lib/core/util/decode-text.js +0 -1
- package/lib/core/util/default-mime-type.js +0 -3
- package/lib/core/util/inflate.js +194 -0
- package/lib/core/util/mime-type.js +26 -22
- package/lib/core/util/opfs-temp-stream.js +1 -37
- package/lib/core/web-worker-inline-native.js +1 -1
- package/lib/core/web-worker-inline-template-native.js +5 -5
- package/lib/core/web-worker-inline-wasm.js +1 -1
- package/lib/core/zip-fs.js +6 -13
- package/lib/core/zip-reader.js +48 -127
- package/lib/core/zip-writer.js +27 -45
- package/lib/core/zlib-streams-inline-template.js +3 -2
- package/lib/core/zlib-streams-inline.js +1 -1
- package/lib/zip-core-base.js +3 -1
- package/package.json +9 -6
- package/reserved-property-names.js +50 -0
- package/lib/core/util/mini-lz.js +0 -198
package/index-native.cjs
CHANGED
|
@@ -107,6 +107,8 @@ const UNDEFINED_TYPE = "undefined";
|
|
|
107
107
|
const FUNCTION_TYPE = "function";
|
|
108
108
|
const OBJECT_TYPE = "object";
|
|
109
109
|
|
|
110
|
+
const EMPTY_UINT8_ARRAY = new Uint8Array();
|
|
111
|
+
|
|
110
112
|
/*
|
|
111
113
|
Copyright (c) 2025 Gildas Lormeau. All rights reserved.
|
|
112
114
|
|
|
@@ -158,6 +160,22 @@ const DEFAULT_CONFIGURATION = {
|
|
|
158
160
|
DecompressionStream: typeof DecompressionStream != UNDEFINED_TYPE && DecompressionStream
|
|
159
161
|
};
|
|
160
162
|
|
|
163
|
+
const CONFIGURABLE_PROPERTY_NAMES = [
|
|
164
|
+
"baseURI",
|
|
165
|
+
"wasmURI",
|
|
166
|
+
"workerURI",
|
|
167
|
+
"chunkSize",
|
|
168
|
+
"maxWorkers",
|
|
169
|
+
"terminateWorkerTimeout",
|
|
170
|
+
"workerStarvationTimeout",
|
|
171
|
+
"useCompressionStream",
|
|
172
|
+
"useWebWorkers",
|
|
173
|
+
"CompressionStream",
|
|
174
|
+
"DecompressionStream",
|
|
175
|
+
"CompressionStreamZlib",
|
|
176
|
+
"DecompressionStreamZlib"
|
|
177
|
+
];
|
|
178
|
+
|
|
161
179
|
const config = Object.assign({}, DEFAULT_CONFIGURATION);
|
|
162
180
|
|
|
163
181
|
function getConfiguration() {
|
|
@@ -169,43 +187,15 @@ function getChunkSize(config) {
|
|
|
169
187
|
}
|
|
170
188
|
|
|
171
189
|
function configure(configuration) {
|
|
172
|
-
const {
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
CompressionStream,
|
|
181
|
-
DecompressionStream,
|
|
182
|
-
CompressionStreamZlib,
|
|
183
|
-
DecompressionStreamZlib,
|
|
184
|
-
workerURI,
|
|
185
|
-
wasmURI
|
|
186
|
-
} = configuration;
|
|
187
|
-
setIfDefined("baseURI", baseURI);
|
|
188
|
-
setIfDefined("wasmURI", wasmURI);
|
|
189
|
-
setIfDefined("workerURI", workerURI);
|
|
190
|
-
setIfDefined("chunkSize", chunkSize);
|
|
191
|
-
setIfDefined("maxWorkers", maxWorkers);
|
|
192
|
-
setIfDefined("terminateWorkerTimeout", terminateWorkerTimeout);
|
|
193
|
-
setIfDefined("workerStarvationTimeout", workerStarvationTimeout);
|
|
194
|
-
setIfDefined("useCompressionStream", useCompressionStream);
|
|
195
|
-
setIfDefined("useWebWorkers", useWebWorkers);
|
|
196
|
-
setIfDefined("CompressionStream", CompressionStream);
|
|
197
|
-
setIfDefined("DecompressionStream", DecompressionStream);
|
|
198
|
-
setIfDefined("CompressionStreamZlib", CompressionStreamZlib);
|
|
199
|
-
setIfDefined("DecompressionStreamZlib", DecompressionStreamZlib);
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
function setIfDefined(propertyName, propertyValue) {
|
|
203
|
-
if (propertyValue !== UNDEFINED_VALUE) {
|
|
204
|
-
config[propertyName] = propertyValue;
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
const A="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function g$1(g){g({workerURI:g=>{const B="text/javascript",I=(g=>{g=(g=>{const B=(g=(g+"").replace(/[^A-Za-z0-9+/=]/g,"")).length,I=[];for(let E=0;B>E;E+=4){const B=A.indexOf(g[E])<<18|A.indexOf(g[E+1])<<12|(63&A.indexOf(g[E+2]))<<6|63&A.indexOf(g[E+3]);I.push(B>>16&255),"="!==g[E+2]&&I.push(B>>8&255),"="!==g[E+3]&&I.push(255&B);}return new Uint8Array(I)})(g);let B=new Uint8Array(1024),I=0;for(let A=0;A<g.length;){const C=g[A++];if(128&C){const Y=3+(127&C),Q=g[A++]<<8|g[A++],F=I-Q;E(I+Y);for(let A=0;Y>A;A++)B[I++]=B[F+A];}else {const Y=C;E(I+Y);for(let E=0;Y>E&&A<g.length;E++)B[I++]=g[A++];}}return (g=>{let B="";const I=g.length;let E=0;for(;I>E+2;E+=3){const I=g[E]<<16|g[E+1]<<8|g[E+2];B+=A[I>>18&63]+A[I>>12&63]+A[I>>6&63]+A[63&I];}const C=I-E;if(1===C){const I=g[E]<<16;B+=A[I>>18&63]+A[I>>12&63]+"==";}else if(2===C){const I=g[E]<<16|g[E+1]<<8;B+=A[I>>18&63]+A[I>>12&63]+A[I>>6&63]+"=";}return B})(new Uint8Array(B.buffer.slice(0,I)));function E(A){if(B.length<A){let g=2*B.length;for(;A>g;)g*=2;const E=new Uint8Array(g);E.set(B.subarray(0,I)),B=E;}}})("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");if(g){const A=atob(I),g=new Blob([A],{type:B});return URL.createObjectURL(g)}return "data:"+B+";base64,"+I}});}
|
|
190
|
+
for (const propertyName of CONFIGURABLE_PROPERTY_NAMES) {
|
|
191
|
+
const propertyValue = configuration[propertyName];
|
|
192
|
+
if (propertyValue !== UNDEFINED_VALUE) {
|
|
193
|
+
config[propertyName] = propertyValue;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
const r=[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],t=[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],o=[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],e=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],a=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],h=new Uint8Array(288);h.fill(8,0,144),h.fill(9,144,256),h.fill(7,256,280),h.fill(8,280,288);const l=new Uint8Array(30).fill(5);function n(r){const t=new Uint16Array(16);for(const o of r)t[o]++;t[0]=0;const o=new Uint16Array(17);for(let r=1;15>=r;r++)o[r+1]=o[r]+t[r];const e=new Uint16Array(r.length);for(let t=0;t<r.length;t++)r[t]&&(e[o[r[t]]++]=t);return {t:t,symbols:e}}const s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function f(f){f({workerURI:f=>{const q="text/javascript",P=(s=>{let f=0,q=0,P=0,V=new Uint8Array(1024),d=0,u=0;for(;!u;){u=H(1);const r=H(2);if(0==r)K();else if(1==r)X(n(h),n(l));else {if(2!=r)throw Error("invalid deflate block type");X(...i());}}return V.subarray(0,d);function G(){if(f>=s.length)throw Error("unexpected end of deflate data");return s[f++]}function H(r){for(;r>P;)q|=G()<<P,P+=8;const t=q&(1<<r)-1;return q>>>=r,P-=r,t}function K(){q=0,P=0;const r=G()|G()<<8;f+=2,y(d+r);for(let t=0;r>t;t++)V[d++]=G();}function X(a,h){let l=b(a);for(;256!=l;){if(256>l)y(d+1),V[d++]=l;else {const a=l-257,n=r[a]+H(t[a]),s=b(h),f=o[s]+H(e[s]);y(d+n);const q=d-f;for(let r=0;n>r;r++)V[d++]=V[q+r];}l=b(a);}}function i(){const r=H(5)+257,t=H(5)+1,o=H(4)+4,e=new Uint8Array(19);for(let r=0;o>r;r++)e[a[r]]=H(3);const h=n(e),l=new Uint8Array(r+t);let s=0;for(;s<l.length;){const r=b(h);if(16>r)l[s++]=r;else if(16==r){const r=l[s-1];let t=H(2)+3;for(;t--;)l[s++]=r;}else s+=17==r?H(3)+3:H(7)+11;}return [n(l.subarray(0,r)),n(l.subarray(r))]}function b(r){const{t:t,symbols:o}=r;let e=0,a=0,h=0;for(let r=1;15>=r;r++){e|=H(1);const l=t[r];if(l>e-a)return o[h+(e-a)];h+=l,a=a+l<<1,e<<=1;}throw Error("invalid huffman code")}function y(r){if(V.length<r){let t=2*V.length;for(;r>t;)t*=2;const o=new Uint8Array(t);o.set(V.subarray(0,d)),V=o;}}})((r=>{const t=(r=(r+"").replace(/[^A-Za-z0-9+/=]/g,"")).length,o=[];for(let e=0;t>e;e+=4){const t=s.indexOf(r[e])<<18|s.indexOf(r[e+1])<<12|(63&s.indexOf(r[e+2]))<<6|63&s.indexOf(r[e+3]);o.push(t>>16&255),"="!==r[e+2]&&o.push(t>>8&255),"="!==r[e+3]&&o.push(255&t);}return new Uint8Array(o)})("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"));if(f){const r=new Blob([P],{type:q});return URL.createObjectURL(r)}return "data:"+q+";base64,"+(r=>{let t="";const o=r.length;let e=0;for(;o>e+2;e+=3){const o=r[e]<<16|r[e+1]<<8|r[e+2];t+=s[o>>18&63]+s[o>>12&63]+s[o>>6&63]+s[63&o];}const a=o-e;if(1===a){const o=r[e]<<16;t+=s[o>>18&63]+s[o>>12&63]+"==";}else if(2===a){const o=r[e]<<16|r[e+1]<<8;t+=s[o>>18&63]+s[o>>12&63]+s[o>>6&63]+"=";}return t})(P)}});}
|
|
209
199
|
|
|
210
200
|
/*
|
|
211
201
|
Copyright (c) 2022 Gildas Lormeau. All rights reserved.
|
|
@@ -1218,8 +1208,6 @@ function getRandomValues(array) {
|
|
|
1218
1208
|
if (GET_RANDOM_VALUES_SUPPORTED) {
|
|
1219
1209
|
return crypto.getRandomValues(array);
|
|
1220
1210
|
} else {
|
|
1221
|
-
// all supported runtimes expose crypto.getRandomValues; failing hard beats
|
|
1222
|
-
// silently generating predictable encryption salts
|
|
1223
1211
|
throw new Error(ERR_UNSUPPORTED_CRYPTO_API);
|
|
1224
1212
|
}
|
|
1225
1213
|
}
|
|
@@ -1282,12 +1270,7 @@ class AESDecryptionStream extends TransformStream {
|
|
|
1282
1270
|
constructor({ password, rawPassword, encryptionStrength, checkPasswordOnly }) {
|
|
1283
1271
|
super({
|
|
1284
1272
|
start() {
|
|
1285
|
-
|
|
1286
|
-
ready: new Promise(resolve => this.resolveReady = resolve),
|
|
1287
|
-
password: encodePassword(password, rawPassword),
|
|
1288
|
-
strength: encryptionStrength - 1,
|
|
1289
|
-
pending: new Uint8Array()
|
|
1290
|
-
});
|
|
1273
|
+
initAesCrypto(this, password, rawPassword, encryptionStrength);
|
|
1291
1274
|
},
|
|
1292
1275
|
async transform(chunk, controller) {
|
|
1293
1276
|
const aesCrypto = this;
|
|
@@ -1322,7 +1305,7 @@ class AESDecryptionStream extends TransformStream {
|
|
|
1322
1305
|
await ready;
|
|
1323
1306
|
const chunkToDecrypt = subarray(pending, 0, pending.length - SIGNATURE_LENGTH);
|
|
1324
1307
|
const originalSignature = subarray(pending, pending.length - SIGNATURE_LENGTH);
|
|
1325
|
-
let decryptedChunkArray =
|
|
1308
|
+
let decryptedChunkArray = EMPTY_UINT8_ARRAY;
|
|
1326
1309
|
if (chunkToDecrypt.length) {
|
|
1327
1310
|
const encryptedChunk = toBits(codecBytes, chunkToDecrypt);
|
|
1328
1311
|
hmac.update(encryptedChunk);
|
|
@@ -1330,8 +1313,6 @@ class AESDecryptionStream extends TransformStream {
|
|
|
1330
1313
|
decryptedChunkArray = fromBits(codecBytes, decryptedChunk);
|
|
1331
1314
|
}
|
|
1332
1315
|
const signature = subarray(fromBits(codecBytes, hmac.digest()), 0, SIGNATURE_LENGTH);
|
|
1333
|
-
// branch-free comparison: accumulate the differences instead of
|
|
1334
|
-
// short-circuiting on the first mismatching byte
|
|
1335
1316
|
let invalidSignature = pending.length < SIGNATURE_LENGTH ? 1 : 0;
|
|
1336
1317
|
for (let indexSignature = 0; indexSignature < SIGNATURE_LENGTH; indexSignature++) {
|
|
1337
1318
|
invalidSignature |= signature[indexSignature] ^ originalSignature[indexSignature];
|
|
@@ -1353,12 +1334,7 @@ class AESEncryptionStream extends TransformStream {
|
|
|
1353
1334
|
let stream;
|
|
1354
1335
|
super({
|
|
1355
1336
|
start() {
|
|
1356
|
-
|
|
1357
|
-
ready: new Promise(resolve => this.resolveReady = resolve),
|
|
1358
|
-
password: encodePassword(password, rawPassword),
|
|
1359
|
-
strength: encryptionStrength - 1,
|
|
1360
|
-
pending: new Uint8Array()
|
|
1361
|
-
});
|
|
1337
|
+
initAesCrypto(this, password, rawPassword, encryptionStrength);
|
|
1362
1338
|
},
|
|
1363
1339
|
async transform(chunk, controller) {
|
|
1364
1340
|
const aesCrypto = this;
|
|
@@ -1368,7 +1344,7 @@ class AESEncryptionStream extends TransformStream {
|
|
|
1368
1344
|
resolveReady,
|
|
1369
1345
|
ready
|
|
1370
1346
|
} = aesCrypto;
|
|
1371
|
-
let preamble =
|
|
1347
|
+
let preamble = EMPTY_UINT8_ARRAY;
|
|
1372
1348
|
if (password) {
|
|
1373
1349
|
preamble = await createEncryptionKeys(aesCrypto, strength, password);
|
|
1374
1350
|
resolveReady();
|
|
@@ -1388,7 +1364,7 @@ class AESEncryptionStream extends TransformStream {
|
|
|
1388
1364
|
} = this;
|
|
1389
1365
|
if (hmac && ctr) {
|
|
1390
1366
|
await ready;
|
|
1391
|
-
let encryptedChunkArray =
|
|
1367
|
+
let encryptedChunkArray = EMPTY_UINT8_ARRAY;
|
|
1392
1368
|
if (pending.length) {
|
|
1393
1369
|
const encryptedChunk = ctr.update(toBits(codecBytes, pending));
|
|
1394
1370
|
hmac.update(encryptedChunk);
|
|
@@ -1403,6 +1379,15 @@ class AESEncryptionStream extends TransformStream {
|
|
|
1403
1379
|
}
|
|
1404
1380
|
}
|
|
1405
1381
|
|
|
1382
|
+
function initAesCrypto(aesCrypto, password, rawPassword, encryptionStrength) {
|
|
1383
|
+
Object.assign(aesCrypto, {
|
|
1384
|
+
ready: new Promise(resolve => aesCrypto.resolveReady = resolve),
|
|
1385
|
+
password: encodePassword(password, rawPassword),
|
|
1386
|
+
strength: encryptionStrength - 1,
|
|
1387
|
+
pending: EMPTY_UINT8_ARRAY
|
|
1388
|
+
});
|
|
1389
|
+
}
|
|
1390
|
+
|
|
1406
1391
|
function append(aesCrypto, input, output, paddingStart, paddingEnd, verifySignature) {
|
|
1407
1392
|
const {
|
|
1408
1393
|
ctr,
|
|
@@ -1564,20 +1549,13 @@ class ZipCryptoDecryptionStream extends TransformStream {
|
|
|
1564
1549
|
constructor({ password, rawPassword, passwordVerification, checkPasswordOnly }) {
|
|
1565
1550
|
super({
|
|
1566
1551
|
start() {
|
|
1567
|
-
|
|
1568
|
-
password,
|
|
1569
|
-
rawPassword,
|
|
1570
|
-
passwordVerification
|
|
1571
|
-
});
|
|
1572
|
-
createKeys(this, password, rawPassword);
|
|
1552
|
+
initZipCrypto(this, password, rawPassword, passwordVerification);
|
|
1573
1553
|
},
|
|
1574
1554
|
transform(chunk, controller) {
|
|
1575
1555
|
const zipCrypto = this;
|
|
1576
1556
|
if (zipCrypto.password || zipCrypto.rawPassword) {
|
|
1577
1557
|
const decryptedHeader = decrypt(zipCrypto, chunk.subarray(0, HEADER_LENGTH));
|
|
1578
1558
|
zipCrypto.password = zipCrypto.rawPassword = null;
|
|
1579
|
-
// verify the password with a branch-free comparison of the verification byte, mirroring
|
|
1580
|
-
// the constant-time AES HMAC signature check
|
|
1581
1559
|
if ((decryptedHeader.at(-1) ^ zipCrypto.passwordVerification) != 0) {
|
|
1582
1560
|
throw new Error(ERR_INVALID_PASSWORD);
|
|
1583
1561
|
}
|
|
@@ -1598,12 +1576,7 @@ class ZipCryptoEncryptionStream extends TransformStream {
|
|
|
1598
1576
|
constructor({ password, rawPassword, passwordVerification }) {
|
|
1599
1577
|
super({
|
|
1600
1578
|
start() {
|
|
1601
|
-
|
|
1602
|
-
password,
|
|
1603
|
-
rawPassword,
|
|
1604
|
-
passwordVerification
|
|
1605
|
-
});
|
|
1606
|
-
createKeys(this, password, rawPassword);
|
|
1579
|
+
initZipCrypto(this, password, rawPassword, passwordVerification);
|
|
1607
1580
|
},
|
|
1608
1581
|
transform(chunk, controller) {
|
|
1609
1582
|
const zipCrypto = this;
|
|
@@ -1627,6 +1600,15 @@ class ZipCryptoEncryptionStream extends TransformStream {
|
|
|
1627
1600
|
}
|
|
1628
1601
|
}
|
|
1629
1602
|
|
|
1603
|
+
function initZipCrypto(zipCrypto, password, rawPassword, passwordVerification) {
|
|
1604
|
+
Object.assign(zipCrypto, {
|
|
1605
|
+
password,
|
|
1606
|
+
rawPassword,
|
|
1607
|
+
passwordVerification
|
|
1608
|
+
});
|
|
1609
|
+
createKeys(zipCrypto, password, rawPassword);
|
|
1610
|
+
}
|
|
1611
|
+
|
|
1630
1612
|
function decrypt(target, input) {
|
|
1631
1613
|
const output = new Uint8Array(input.length);
|
|
1632
1614
|
for (let index = 0; index < input.length; index++) {
|
|
@@ -1731,14 +1713,6 @@ class DeflateStream extends TransformStream {
|
|
|
1731
1713
|
const stream = this;
|
|
1732
1714
|
let crc32Stream, encryptionStream, gzipCrc32Stream;
|
|
1733
1715
|
let readable = super.readable;
|
|
1734
|
-
// The gzip trailer carries a CRC-32 of the uncompressed data (same polynomial as zip),
|
|
1735
|
-
// computed in native code for free during compression. On the native CompressionStream,
|
|
1736
|
-
// harvest it instead of running a separate CRC pass: compress as gzip, then strip the
|
|
1737
|
-
// fixed 10-byte header and 8-byte trailer to recover the exact raw-deflate payload
|
|
1738
|
-
// (byte-identical to a deflate-raw compression) while capturing the CRC. The CRC becomes
|
|
1739
|
-
// available at end-of-stream, exactly like Crc32Stream, so nothing downstream (data
|
|
1740
|
-
// descriptor, central directory, ZipCrypto) needs it any earlier. Not applied for the
|
|
1741
|
-
// pure-JS/WASM ports (a separate slice-by-8 CRC pass is as fast or faster there).
|
|
1742
1716
|
const useGzipCrc32 = signed && compressed && !deflate64 && (!encrypted || zipCrypto) &&
|
|
1743
1717
|
Boolean(useCompressionStream && CompressionStream);
|
|
1744
1718
|
if ((!encrypted || zipCrypto) && signed && !useGzipCrc32) {
|
|
@@ -1775,12 +1749,6 @@ class DeflateStream extends TransformStream {
|
|
|
1775
1749
|
}
|
|
1776
1750
|
}
|
|
1777
1751
|
|
|
1778
|
-
// Converts a gzip stream into its raw-deflate payload while capturing the CRC-32 from the gzip
|
|
1779
|
-
// trailer. The CompressionStream gzip header is always the fixed 10-byte form (FLG=0, no optional
|
|
1780
|
-
// fields) per the Compression Streams spec, so it is stripped by length; the trailer is the last
|
|
1781
|
-
// 8 bytes (CRC-32 LE, then ISIZE LE). Bounded memory: at most GZIP_TRAILER_LENGTH bytes are held
|
|
1782
|
-
// back across chunks. The signature is read big-endian-agnostically as a number, matching the
|
|
1783
|
-
// value Crc32Stream produces, so the writer path is unchanged.
|
|
1784
1752
|
class GzipToRawDeflateStream extends TransformStream {
|
|
1785
1753
|
|
|
1786
1754
|
constructor() {
|
|
@@ -1806,10 +1774,6 @@ class GzipToRawDeflateStream extends TransformStream {
|
|
|
1806
1774
|
tail = pending;
|
|
1807
1775
|
return;
|
|
1808
1776
|
}
|
|
1809
|
-
// Emit everything except the trailing GZIP_TRAILER_LENGTH bytes as a standalone,
|
|
1810
|
-
// right-sized Uint8Array. Consumers may read chunk.buffer directly (e.g. custom
|
|
1811
|
-
// writers), so an aliased subarray of a larger buffer would leak the held-back
|
|
1812
|
-
// trailer bytes. Bytes are copied exactly once, into `output` or `tail`.
|
|
1813
1777
|
const emitLength = available - GZIP_TRAILER_LENGTH;
|
|
1814
1778
|
const output = new Uint8Array(emitLength);
|
|
1815
1779
|
const fromTail = Math.min(emitLength, tail.length);
|
|
@@ -1898,11 +1862,6 @@ function pipeThroughCommpressionStream(readable, useCompressionStream, options,
|
|
|
1898
1862
|
throw error;
|
|
1899
1863
|
}
|
|
1900
1864
|
}
|
|
1901
|
-
// The native CompressionStream/DecompressionStream and the pure-JS zlib port do not signal
|
|
1902
|
-
// backpressure on their writable side (their `ready` never pends), so a plain pipeThrough drains
|
|
1903
|
-
// the whole source into them and peak memory grows with the entry size. Awaiting each write()
|
|
1904
|
-
// paces the source to the codec's consumption rate, keeping streaming memory bounded. The WASM
|
|
1905
|
-
// codec already backpressures, so this is a no-op cost for it.
|
|
1906
1865
|
return pipeThroughBackpressured(readable, codecStream);
|
|
1907
1866
|
}
|
|
1908
1867
|
|
|
@@ -1910,10 +1869,6 @@ function pipeThrough(readable, transformStream) {
|
|
|
1910
1869
|
return readable.pipeThrough(transformStream);
|
|
1911
1870
|
}
|
|
1912
1871
|
|
|
1913
|
-
// Like readable.pipeThrough(transformStream), but drives the writable side manually and awaits each
|
|
1914
|
-
// write() so that a codec which under-reports backpressure cannot pull the whole source into memory.
|
|
1915
|
-
// Errors propagate in both directions: a source error aborts the codec; a downstream cancel/error
|
|
1916
|
-
// (surfaced through the codec's writable rejecting) cancels the source.
|
|
1917
1872
|
function pipeThroughBackpressured(readable, transformStream) {
|
|
1918
1873
|
const writer = transformStream.writable.getWriter();
|
|
1919
1874
|
const reader = readable.getReader();
|
|
@@ -1942,7 +1897,7 @@ async function abort(writer, error) {
|
|
|
1942
1897
|
try {
|
|
1943
1898
|
await writer.abort(error);
|
|
1944
1899
|
} catch {
|
|
1945
|
-
// the writable may already be errored/closed
|
|
1900
|
+
// ignored: the writable may already be errored/closed
|
|
1946
1901
|
}
|
|
1947
1902
|
}
|
|
1948
1903
|
|
|
@@ -1950,13 +1905,10 @@ async function cancel(reader, error) {
|
|
|
1950
1905
|
try {
|
|
1951
1906
|
await reader.cancel(error);
|
|
1952
1907
|
} catch {
|
|
1953
|
-
// the readable may already be errored/closed
|
|
1908
|
+
// ignored: the readable may already be errored/closed
|
|
1954
1909
|
}
|
|
1955
1910
|
}
|
|
1956
1911
|
|
|
1957
|
-
// DecompressionStream implementations can fail with a message-less TypeError on malformed
|
|
1958
|
-
// input; give these errors an identifiable message (errors raised by the other stages of
|
|
1959
|
-
// the pipeline, e.g. ERR_INVALID_PASSWORD, always carry a message and pass through as-is)
|
|
1960
1912
|
function mapInflateStreamError(readable) {
|
|
1961
1913
|
const reader = readable.getReader();
|
|
1962
1914
|
return new ReadableStream({
|
|
@@ -2281,9 +2233,6 @@ async function runWorker$1({ options, readable, writable, onTaskFinished }, conf
|
|
|
2281
2233
|
try {
|
|
2282
2234
|
await initModule(config);
|
|
2283
2235
|
} catch {
|
|
2284
|
-
// The WASM module failed to load. Fall back to the native CompressionStream only if the
|
|
2285
|
-
// zlib codec that would otherwise run depends on that module; a self-contained codec
|
|
2286
|
-
// supplied through config (e.g. the pure-JS port) stays usable and is kept as requested.
|
|
2287
2236
|
const ZlibStream = options.codecType.startsWith(CODEC_DEFLATE) ?
|
|
2288
2237
|
config.CompressionStreamZlib :
|
|
2289
2238
|
config.DecompressionStreamZlib;
|
|
@@ -2361,7 +2310,6 @@ async function runWebWorker(workerData, config) {
|
|
|
2361
2310
|
return resultValue;
|
|
2362
2311
|
} catch (error) {
|
|
2363
2312
|
await closeWritable();
|
|
2364
|
-
// unblock the pipe watcher if the worker died before closing its end of the stream
|
|
2365
2313
|
abortPipe();
|
|
2366
2314
|
try {
|
|
2367
2315
|
await closed;
|
|
@@ -2386,8 +2334,6 @@ function watchClosedStream(writableSource) {
|
|
|
2386
2334
|
const abortController = new AbortController();
|
|
2387
2335
|
const { writable, readable } = new TransformStream();
|
|
2388
2336
|
const closed = readable.pipeTo(writableSource, { preventClose: true, preventAbort: true, signal: abortController.signal });
|
|
2389
|
-
// the pipe can fail before `closed` is awaited (e.g. the destination write fails);
|
|
2390
|
-
// mark the rejection as handled so it cannot kill the process in the meantime
|
|
2391
2337
|
closed.catch(() => { });
|
|
2392
2338
|
return { writable, closed, abortPipe: () => abortController.abort() };
|
|
2393
2339
|
}
|
|
@@ -2480,8 +2426,6 @@ function onWorkerError(event, workerData) {
|
|
|
2480
2426
|
event.preventDefault();
|
|
2481
2427
|
}
|
|
2482
2428
|
const { rejectResult, writer, onTaskFinished } = workerData;
|
|
2483
|
-
// the worker is unusable (e.g. its script failed to load); terminate it and
|
|
2484
|
-
// fail the current task instead of letting it hang forever
|
|
2485
2429
|
terminateWorker$1(workerData);
|
|
2486
2430
|
if (rejectResult) {
|
|
2487
2431
|
rejectResult(event.error || new Error(event.message || ERROR_EVENT_TYPE));
|
|
@@ -2533,8 +2477,6 @@ function sendMessage(message, { worker, writer, transferStreams }) {
|
|
|
2533
2477
|
async function onMessage({ data }, workerData) {
|
|
2534
2478
|
const { type, value, messageId, result, error } = data;
|
|
2535
2479
|
const { reader, writer, resolveResult, rejectResult, onTaskFinished, generation } = workerData;
|
|
2536
|
-
// continuations below can settle after the worker slot has been reassigned to a new
|
|
2537
|
-
// task (e.g. a pending pull read failing late); they must not touch the new task
|
|
2538
2480
|
const stale = () => workerData.generation != generation;
|
|
2539
2481
|
try {
|
|
2540
2482
|
if (error) {
|
|
@@ -2790,26 +2732,24 @@ class Stream {
|
|
|
2790
2732
|
class Reader extends Stream {
|
|
2791
2733
|
|
|
2792
2734
|
get readable() {
|
|
2735
|
+
return this.createReadable();
|
|
2736
|
+
}
|
|
2737
|
+
|
|
2738
|
+
createReadable({ offset = 0, size, diskNumberStart, chunkSize = DEFAULT_CHUNK_SIZE } = {}) {
|
|
2793
2739
|
const reader = this;
|
|
2794
|
-
|
|
2795
|
-
|
|
2796
|
-
start() {
|
|
2797
|
-
this.chunkOffset = 0;
|
|
2798
|
-
},
|
|
2740
|
+
let chunkOffset = 0;
|
|
2741
|
+
return new ReadableStream({
|
|
2799
2742
|
async pull(controller) {
|
|
2800
|
-
const { offset = 0, size, diskNumberStart } = readable;
|
|
2801
|
-
const { chunkOffset } = this;
|
|
2802
2743
|
const dataSize = size === UNDEFINED_VALUE ? chunkSize : Math.min(chunkSize, size - chunkOffset);
|
|
2803
2744
|
const data = await readUint8Array(reader, offset + chunkOffset, dataSize, diskNumberStart);
|
|
2804
2745
|
controller.enqueue(data);
|
|
2805
2746
|
if ((chunkOffset + chunkSize > size) || (size === UNDEFINED_VALUE && !data.length && dataSize)) {
|
|
2806
2747
|
controller.close();
|
|
2807
2748
|
} else {
|
|
2808
|
-
|
|
2749
|
+
chunkOffset += chunkSize;
|
|
2809
2750
|
}
|
|
2810
2751
|
}
|
|
2811
2752
|
});
|
|
2812
|
-
return readable;
|
|
2813
2753
|
}
|
|
2814
2754
|
}
|
|
2815
2755
|
|
|
@@ -2948,8 +2888,6 @@ class BlobWriter extends Stream {
|
|
|
2948
2888
|
}
|
|
2949
2889
|
});
|
|
2950
2890
|
writer.blob = new Response(transformStream.readable, { headers }).blob();
|
|
2951
|
-
// mark early rejections (e.g. aborted pipe) as handled; awaiting getData() still
|
|
2952
|
-
// surfaces them
|
|
2953
2891
|
writer.blob.catch(() => { });
|
|
2954
2892
|
}
|
|
2955
2893
|
|
|
@@ -3111,7 +3049,7 @@ async function readUint8ArrayHttpReader(httpReader, index, length, sendRequest,
|
|
|
3111
3049
|
return eocdCache;
|
|
3112
3050
|
}
|
|
3113
3051
|
if (index >= size || length === 0) {
|
|
3114
|
-
return
|
|
3052
|
+
return EMPTY_UINT8_ARRAY;
|
|
3115
3053
|
} else {
|
|
3116
3054
|
if (index + length > size) {
|
|
3117
3055
|
length = size - index;
|
|
@@ -3168,8 +3106,6 @@ async function getXMLHttpRequestData(httpReader) {
|
|
|
3168
3106
|
async function getRequestData(httpReader, sendRequest) {
|
|
3169
3107
|
const response = await sendRequest(HTTP_METHOD_GET, httpReader, getHeaders(httpReader));
|
|
3170
3108
|
httpReader.data = new Uint8Array(await response.arrayBuffer());
|
|
3171
|
-
// the downloaded content is authoritative, e.g. the Content-Length response header
|
|
3172
|
-
// of the HEAD request can be the encoded size when the content is compressed
|
|
3173
3109
|
httpReader.size = httpReader.data.length;
|
|
3174
3110
|
}
|
|
3175
3111
|
|
|
@@ -3234,7 +3170,6 @@ class HttpReader extends Reader {
|
|
|
3234
3170
|
super();
|
|
3235
3171
|
Object.assign(this, {
|
|
3236
3172
|
url,
|
|
3237
|
-
// an explicit fetch implementation takes precedence over useXHR
|
|
3238
3173
|
reader: options.useXHR && !options.fetch ? new XHRReader(url, options) : new FetchReader(url, options)
|
|
3239
3174
|
});
|
|
3240
3175
|
}
|
|
@@ -3373,7 +3308,7 @@ class SplitDataReader extends Reader {
|
|
|
3373
3308
|
}
|
|
3374
3309
|
}
|
|
3375
3310
|
} else {
|
|
3376
|
-
result =
|
|
3311
|
+
result = EMPTY_UINT8_ARRAY;
|
|
3377
3312
|
}
|
|
3378
3313
|
reader.lastDiskNumber = Math.max(currentDiskNumber, reader.lastDiskNumber);
|
|
3379
3314
|
return result;
|
|
@@ -3418,8 +3353,6 @@ class SplitDataWriter extends Stream {
|
|
|
3418
3353
|
writer.diskOffset += diskSourceWriter.size;
|
|
3419
3354
|
writer.diskNumber++;
|
|
3420
3355
|
diskWriter = null;
|
|
3421
|
-
// the next disk is not opened yet but its space is available; leaving a
|
|
3422
|
-
// stale value here would force a new disk for every subsequent write
|
|
3423
3356
|
writer.availableSize = writer.maxSize;
|
|
3424
3357
|
if (chunk.length > availableSize) {
|
|
3425
3358
|
await this.write(chunk.subarray(availableSize));
|
|
@@ -3599,7 +3532,6 @@ function decodeText(value, encoding) {
|
|
|
3599
3532
|
if (encoding && encoding.trim().toLowerCase() == "cp437") {
|
|
3600
3533
|
return decodeCP437(value);
|
|
3601
3534
|
} else {
|
|
3602
|
-
// ignoreBOM keeps a leading U+FEFF in filenames/comments instead of dropping it
|
|
3603
3535
|
return new TextDecoder(encoding, { ignoreBOM: true }).decode(value);
|
|
3604
3536
|
}
|
|
3605
3537
|
}
|
|
@@ -3847,8 +3779,6 @@ const ERR_AMBIGUOUS_ARCHIVE = "Ambiguous archive";
|
|
|
3847
3779
|
const CHARSET_UTF8 = "utf-8";
|
|
3848
3780
|
const PROPERTY_NAME_UTF8_SUFFIX = "UTF8";
|
|
3849
3781
|
const CHARSET_CP437 = "cp437";
|
|
3850
|
-
// bits of the general purpose flag that change how an entry is interpreted; the level bits (1-2) are excluded
|
|
3851
|
-
// because they are informative only
|
|
3852
3782
|
const BITFLAG_AMBIGUITY_MASK = BITFLAG_ENCRYPTED | BITFLAG_DATA_DESCRIPTOR | BITFLAG_LANG_ENCODING_FLAG;
|
|
3853
3783
|
const ZIP64_PROPERTIES = [
|
|
3854
3784
|
[PROPERTY_NAME_UNCOMPRESSED_SIZE, MAX_32_BITS],
|
|
@@ -3890,7 +3820,6 @@ class ZipReader {
|
|
|
3890
3820
|
if (reader.size < END_OF_CENTRAL_DIR_LENGTH) {
|
|
3891
3821
|
throw new Error(ERR_BAD_FORMAT);
|
|
3892
3822
|
}
|
|
3893
|
-
reader.chunkSize = getChunkSize(config);
|
|
3894
3823
|
const strictness = getStrictness(getOptionValue$1(zipReader, options, OPTION_STRICTNESS), getOptionValue$1(zipReader, options, OPTION_CHECK_AMBIGUITY));
|
|
3895
3824
|
const checkAmbiguity = strictness == STRICTNESS_STRICT;
|
|
3896
3825
|
const rejectAmbiguousEndOfDirectory = strictness != STRICTNESS_TOLERANT;
|
|
@@ -3905,8 +3834,6 @@ class ZipReader {
|
|
|
3905
3834
|
throw new Error(ERR_EOCDR_NOT_FOUND);
|
|
3906
3835
|
}
|
|
3907
3836
|
}
|
|
3908
|
-
// two or more end-anchored records that each dereference to a valid central directory cannot be told
|
|
3909
|
-
// apart (see comment_length ⟺ EOF): the archive is genuinely ambiguous, so refuse rather than guess
|
|
3910
3837
|
if (rejectAmbiguousEndOfDirectory && endOfDirectoryReachingEndCount > 1) {
|
|
3911
3838
|
throwAmbiguousArchive("multiple end of central directory records");
|
|
3912
3839
|
}
|
|
@@ -3929,7 +3856,7 @@ class ZipReader {
|
|
|
3929
3856
|
if (directoryDataOffset == MAX_32_BITS || directoryDataLength == MAX_32_BITS || filesLength == MAX_16_BITS || diskNumber == MAX_16_BITS) {
|
|
3930
3857
|
const endOfDirectoryLocatorArray = endOfDirectoryInfo.offset >= ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH ?
|
|
3931
3858
|
await readUint8Array(reader, endOfDirectoryInfo.offset - ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH, ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH) :
|
|
3932
|
-
|
|
3859
|
+
EMPTY_UINT8_ARRAY;
|
|
3933
3860
|
const endOfDirectoryLocatorView = getDataView$1(endOfDirectoryLocatorArray);
|
|
3934
3861
|
if (endOfDirectoryLocatorArray.length == ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH &&
|
|
3935
3862
|
getUint32(endOfDirectoryLocatorView, 0) == ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIGNATURE) {
|
|
@@ -3996,12 +3923,6 @@ class ZipReader {
|
|
|
3996
3923
|
}
|
|
3997
3924
|
const expectedDirectoryDataOffset = centralDirectoryEndOffset - directoryDataLength - (reader.lastDiskOffset || 0);
|
|
3998
3925
|
if (directoryDataOffset != expectedDirectoryDataOffset && diskNumber == lastDiskNumber) {
|
|
3999
|
-
// the reconciled offset (the directory ends exactly where the canonical record begins) is anchored
|
|
4000
|
-
// to the unforgeable end of the archive; the stored offset is not. Prefer the reconciled offset
|
|
4001
|
-
// unless the stored one points at a directory and the reconciled one does not — that exception
|
|
4002
|
-
// keeps a corrupt declared directory length from sending the read astray, while still moving off a
|
|
4003
|
-
// stored offset that only looks valid because an append remnant left the previous (identically
|
|
4004
|
-
// laid out) directory sitting there.
|
|
4005
3926
|
const storedPointsAtDirectory = getUint32(directoryView, offset) == CENTRAL_FILE_HEADER_SIGNATURE;
|
|
4006
3927
|
let reconcile = !storedPointsAtDirectory;
|
|
4007
3928
|
if (!reconcile && expectedDirectoryDataOffset >= 0 && expectedDirectoryDataOffset + 4 <= reader.size) {
|
|
@@ -4158,11 +4079,11 @@ class ZipReader {
|
|
|
4158
4079
|
const extractPrependedData = getOptionValue$1(zipReader, options, OPTION_EXTRACT_PREPENDED_DATA);
|
|
4159
4080
|
const extractAppendedData = getOptionValue$1(zipReader, options, OPTION_EXTRACT_APPENDED_DATA);
|
|
4160
4081
|
if (extractPrependedData) {
|
|
4161
|
-
zipReader.prependedData = startOffset > 0 ? await readUint8Array(reader, 0, startOffset) :
|
|
4082
|
+
zipReader.prependedData = startOffset > 0 ? await readUint8Array(reader, 0, startOffset) : EMPTY_UINT8_ARRAY;
|
|
4162
4083
|
}
|
|
4163
|
-
zipReader.comment = commentLength ? await readUint8Array(reader, commentOffset + END_OF_CENTRAL_DIR_LENGTH, commentLength) :
|
|
4084
|
+
zipReader.comment = commentLength ? await readUint8Array(reader, commentOffset + END_OF_CENTRAL_DIR_LENGTH, commentLength) : EMPTY_UINT8_ARRAY;
|
|
4164
4085
|
if (extractAppendedData) {
|
|
4165
|
-
zipReader.appendedData = appendedDataOffset < reader.size ? await readUint8Array(reader, appendedDataOffset, reader.size - appendedDataOffset) :
|
|
4086
|
+
zipReader.appendedData = appendedDataOffset < reader.size ? await readUint8Array(reader, appendedDataOffset, reader.size - appendedDataOffset) : EMPTY_UINT8_ARRAY;
|
|
4166
4087
|
}
|
|
4167
4088
|
return true;
|
|
4168
4089
|
}
|
|
@@ -4274,7 +4195,7 @@ let ZipEntry$1 = class ZipEntry {
|
|
|
4274
4195
|
filenameLength
|
|
4275
4196
|
} = localDirectory;
|
|
4276
4197
|
const checkAmbiguity = getStrictness(getOptionValue$1(zipEntry, options, OPTION_STRICTNESS), getOptionValue$1(zipEntry, options, OPTION_CHECK_AMBIGUITY)) == STRICTNESS_STRICT;
|
|
4277
|
-
let rawLocalFilename =
|
|
4198
|
+
let rawLocalFilename = EMPTY_UINT8_ARRAY;
|
|
4278
4199
|
if (checkAmbiguity && (filenameLength || extraFieldLength)) {
|
|
4279
4200
|
const trailingDataArray = await readUint8Array(reader, offset + HEADER_SIZE, filenameLength + extraFieldLength, diskNumberStart);
|
|
4280
4201
|
rawLocalFilename = trailingDataArray.subarray(0, filenameLength);
|
|
@@ -4282,7 +4203,7 @@ let ZipEntry$1 = class ZipEntry {
|
|
|
4282
4203
|
} else {
|
|
4283
4204
|
localDirectory.rawExtraField = extraFieldLength ?
|
|
4284
4205
|
await readUint8Array(reader, offset + HEADER_SIZE + filenameLength, extraFieldLength, diskNumberStart) :
|
|
4285
|
-
|
|
4206
|
+
EMPTY_UINT8_ARRAY;
|
|
4286
4207
|
}
|
|
4287
4208
|
readCommonFooter(zipEntry, localDirectory, dataView, 4, true);
|
|
4288
4209
|
if (checkAmbiguity) {
|
|
@@ -4309,12 +4230,7 @@ let ZipEntry$1 = class ZipEntry {
|
|
|
4309
4230
|
}
|
|
4310
4231
|
const dataOffset = offset + HEADER_SIZE + filenameLength + extraFieldLength;
|
|
4311
4232
|
const size = compressedSize;
|
|
4312
|
-
const readable = reader.
|
|
4313
|
-
Object.assign(readable, {
|
|
4314
|
-
diskNumberStart,
|
|
4315
|
-
offset: dataOffset,
|
|
4316
|
-
size
|
|
4317
|
-
});
|
|
4233
|
+
const readable = reader.createReadable({ offset: dataOffset, size, diskNumberStart, chunkSize: getChunkSize(config) });
|
|
4318
4234
|
const signal = getOptionValue$1(zipEntry, options, OPTION_SIGNAL);
|
|
4319
4235
|
const checkPasswordOnly = getOptionValue$1(zipEntry, options, OPTION_CHECK_PASSWORD_ONLY);
|
|
4320
4236
|
let checkOverlappingEntry = getOptionValue$1(zipEntry, options, OPTION_CHECK_OVERLAPPING_ENTRY);
|
|
@@ -4585,7 +4501,6 @@ function readExtraFieldUnix(extraField, directory, isInfoZip) {
|
|
|
4585
4501
|
const view = getDataView$1(new Uint8Array(extraField.data));
|
|
4586
4502
|
let uid, gid;
|
|
4587
4503
|
if (isInfoZip) {
|
|
4588
|
-
// Info-ZIP New Unix "ux" field (0x7875): version + variable-length uid/gid
|
|
4589
4504
|
let offset = 0;
|
|
4590
4505
|
const version = getUint8(view, offset++);
|
|
4591
4506
|
const uidSize = getUint8(view, offset++);
|
|
@@ -4595,8 +4510,6 @@ function readExtraFieldUnix(extraField, directory, isInfoZip) {
|
|
|
4595
4510
|
gid = unpackUnixId(extraField.data.subarray(offset, offset + gidSize));
|
|
4596
4511
|
Object.assign(extraField, { version, uid, gid });
|
|
4597
4512
|
} else if (extraField.data.length >= 4) {
|
|
4598
|
-
// Info-ZIP Unix "Ux" field (0x7855): fixed 2-byte uid + gid (the file mode, if any, is
|
|
4599
|
-
// carried in the external file attributes, not here)
|
|
4600
4513
|
uid = getUint16(view, 0);
|
|
4601
4514
|
gid = getUint16(view, 2);
|
|
4602
4515
|
Object.assign(extraField, { uid, gid });
|
|
@@ -4648,7 +4561,6 @@ function readExtraFieldExtendedTimestamp(extraFieldExtendedTimestamp, directory,
|
|
|
4648
4561
|
timeProperties.forEach((propertyName, indexProperty) => {
|
|
4649
4562
|
if (extraFieldExtendedTimestamp.data.length >= offset + 4) {
|
|
4650
4563
|
const time = getUint32(extraFieldView, offset);
|
|
4651
|
-
// the extended timestamp is a signed 32-bit time_t value
|
|
4652
4564
|
directory[propertyName] = extraFieldExtendedTimestamp[propertyName] = new Date((time | 0) * 1000);
|
|
4653
4565
|
const rawPropertyName = timeRawProperties[indexProperty];
|
|
4654
4566
|
extraFieldExtendedTimestamp[rawPropertyName] = time;
|
|
@@ -4725,7 +4637,6 @@ async function detectOverlappingEntry({
|
|
|
4725
4637
|
|
|
4726
4638
|
function getStrictness(strictness, checkAmbiguity) {
|
|
4727
4639
|
if (strictness === UNDEFINED_VALUE) {
|
|
4728
|
-
// `checkAmbiguity: true` is kept as a backward-compatible alias for the strictest mode
|
|
4729
4640
|
return checkAmbiguity ? STRICTNESS_STRICT : STRICTNESS_BALANCED;
|
|
4730
4641
|
}
|
|
4731
4642
|
return strictness;
|
|
@@ -4736,81 +4647,45 @@ function getMaxAppendedDataSize(maxAppendedDataSize, strictness) {
|
|
|
4736
4647
|
return maxAppendedDataSize;
|
|
4737
4648
|
}
|
|
4738
4649
|
if (strictness == STRICTNESS_STRICT) {
|
|
4739
|
-
// the comment must reach the end of the file: no trailing data tolerated
|
|
4740
4650
|
return 0;
|
|
4741
4651
|
}
|
|
4742
4652
|
if (strictness == STRICTNESS_TOLERANT) {
|
|
4743
4653
|
return Infinity;
|
|
4744
4654
|
}
|
|
4745
|
-
// balanced: tolerate up to a legal comment's worth of trailing data (a 16-bit length); beyond that the
|
|
4746
|
-
// trailing bytes cannot hide inside a comment, so they are treated as a second thing bolted onto the file
|
|
4747
4655
|
return MAX_16_BITS;
|
|
4748
4656
|
}
|
|
4749
4657
|
|
|
4750
|
-
// cap on how many out-of-window central directory probes the scan below may issue. A legitimate archive needs
|
|
4751
|
-
// at most a couple (the canonical record, plus one more to detect genuine ambiguity); every other reachability
|
|
4752
|
-
// check is served from the tail window already in memory. The cap keeps an archive whose comment is stuffed
|
|
4753
|
-
// with unreachable end-anchored records from forcing an unbounded number of (potentially remote) reads.
|
|
4754
4658
|
const MAX_END_OF_CENTRAL_DIR_PROBES = 64;
|
|
4755
4659
|
|
|
4756
|
-
// reachability rankings for an end-anchored candidate record (see getCentralDirectoryReachability)
|
|
4757
4660
|
const CENTRAL_DIRECTORY_UNREACHABLE = 0;
|
|
4758
4661
|
const CENTRAL_DIRECTORY_PLAUSIBLE = 1;
|
|
4759
4662
|
const CENTRAL_DIRECTORY_REACHABLE = 2;
|
|
4760
4663
|
|
|
4761
|
-
// Locates the authoritative end of central directory record. The canonical record is the last one whose
|
|
4762
|
-
// declared comment reaches exactly the end of the file ("end-anchored") and that points to a central directory
|
|
4763
|
-
// ("reachable"); earlier signatures (stale append remnants, bytes embedded in a comment) are ignored. When two
|
|
4764
|
-
// or more end-anchored records point to a central directory the archive is ambiguous, and the count is returned
|
|
4765
|
-
// so the caller can refuse it. A record that reaches the end of the file but points to no central directory (an
|
|
4766
|
-
// empty archive) is only "plausible": it cannot be corroborated, so it never counts towards ambiguity and is
|
|
4767
|
-
// chosen only when no reachable record exists — otherwise an empty record forged in a comment could outrank the
|
|
4768
|
-
// genuine directory. When no record is end-anchored (appended data or an oversized comment), falls back to the
|
|
4769
|
-
// last record within the tolerated window that points to a directory (see seekEndOfCentralDirectory).
|
|
4770
4664
|
async function findEndOfCentralDirectory(reader, rejectAmbiguous, maxAppendedDataSize) {
|
|
4771
4665
|
const { size } = reader;
|
|
4772
|
-
// an end-anchored record can only live within the last END_OF_CENTRAL_DIR_LENGTH + MAX_16_BITS bytes,
|
|
4773
|
-
// since the comment length that ties it to the end of the file is a 16-bit field
|
|
4774
4666
|
const anchoredLength = Math.min(size, END_OF_CENTRAL_DIR_LENGTH + MAX_16_BITS);
|
|
4775
|
-
const anchoredOffset = size - anchoredLength;
|
|
4776
|
-
const anchoredArray = await readUint8Array(reader, anchoredOffset, anchoredLength);
|
|
4777
|
-
const anchoredView = getDataView$1(anchoredArray);
|
|
4778
4667
|
const remoteProbeBudget = { count: MAX_END_OF_CENTRAL_DIR_PROBES };
|
|
4779
4668
|
let endOfDirectoryInfo;
|
|
4780
4669
|
let plausibleEndOfDirectoryInfo;
|
|
4781
4670
|
let endOfDirectoryReachingEndCount = 0;
|
|
4782
|
-
for (
|
|
4783
|
-
|
|
4784
|
-
|
|
4785
|
-
const
|
|
4786
|
-
|
|
4787
|
-
|
|
4788
|
-
|
|
4789
|
-
|
|
4790
|
-
|
|
4791
|
-
|
|
4792
|
-
|
|
4793
|
-
offset,
|
|
4794
|
-
buffer: anchoredArray.slice(indexByte, indexByte + END_OF_CENTRAL_DIR_LENGTH).buffer
|
|
4795
|
-
};
|
|
4796
|
-
}
|
|
4797
|
-
endOfDirectoryReachingEndCount++;
|
|
4798
|
-
// the canonical record (highest offset) is found first; a second one is enough to flag ambiguity
|
|
4799
|
-
if (!rejectAmbiguous || endOfDirectoryReachingEndCount > 1) {
|
|
4800
|
-
break;
|
|
4801
|
-
}
|
|
4802
|
-
} else if (reachability == CENTRAL_DIRECTORY_PLAUSIBLE && !plausibleEndOfDirectoryInfo) {
|
|
4803
|
-
plausibleEndOfDirectoryInfo = {
|
|
4804
|
-
offset,
|
|
4805
|
-
buffer: anchoredArray.slice(indexByte, indexByte + END_OF_CENTRAL_DIR_LENGTH).buffer
|
|
4806
|
-
};
|
|
4671
|
+
for await (const [anchoredView, anchoredOffset, anchoredArray, indexByte, offset] of scanEndOfCentralDirectory(reader, anchoredLength)) {
|
|
4672
|
+
const commentLength = getUint16(anchoredView, indexByte + 20);
|
|
4673
|
+
if (offset + END_OF_CENTRAL_DIR_LENGTH + commentLength == size) {
|
|
4674
|
+
const reachability = await getCentralDirectoryReachability(reader, anchoredView, anchoredOffset, indexByte, offset, size, remoteProbeBudget);
|
|
4675
|
+
if (reachability == CENTRAL_DIRECTORY_REACHABLE) {
|
|
4676
|
+
if (!endOfDirectoryInfo) {
|
|
4677
|
+
endOfDirectoryInfo = getEndOfCentralDirectoryInfo(anchoredArray, indexByte, offset);
|
|
4678
|
+
}
|
|
4679
|
+
endOfDirectoryReachingEndCount++;
|
|
4680
|
+
if (!rejectAmbiguous || endOfDirectoryReachingEndCount > 1) {
|
|
4681
|
+
break;
|
|
4807
4682
|
}
|
|
4683
|
+
} else if (reachability == CENTRAL_DIRECTORY_PLAUSIBLE && !plausibleEndOfDirectoryInfo) {
|
|
4684
|
+
plausibleEndOfDirectoryInfo = getEndOfCentralDirectoryInfo(anchoredArray, indexByte, offset);
|
|
4808
4685
|
}
|
|
4809
4686
|
}
|
|
4810
4687
|
}
|
|
4811
4688
|
if (!endOfDirectoryInfo) {
|
|
4812
|
-
// no record points to a directory: prefer a plausible (empty) end-anchored record before scanning the
|
|
4813
|
-
// tolerated window for a bare signature
|
|
4814
4689
|
endOfDirectoryInfo = plausibleEndOfDirectoryInfo;
|
|
4815
4690
|
}
|
|
4816
4691
|
if (!endOfDirectoryInfo) {
|
|
@@ -4819,69 +4694,53 @@ async function findEndOfCentralDirectory(reader, rejectAmbiguous, maxAppendedDat
|
|
|
4819
4694
|
return { endOfDirectoryInfo, endOfDirectoryReachingEndCount };
|
|
4820
4695
|
}
|
|
4821
4696
|
|
|
4822
|
-
// Fallback for findEndOfCentralDirectory when no record is end-anchored: appended data or an oversized comment
|
|
4823
|
-
// pushed the record's declared comment past the end of the file, so its position can no longer be reconciled
|
|
4824
|
-
// against the end of the file. Scans the tolerated window from the end and returns the first record that points
|
|
4825
|
-
// to a central directory, so a stray signature embedded in appended data cannot hijack discovery (which the
|
|
4826
|
-
// anchored scan already prevents for anchored records). Falls back to the first plausible (empty) record, then
|
|
4827
|
-
// to the last bare signature, so a degenerate archive still opens as before. The window ends at the file, so the
|
|
4828
|
-
// same in-window / metered reads as the anchored scan apply.
|
|
4829
4697
|
async function seekEndOfCentralDirectory(reader, maxAppendedDataSize, remoteProbeBudget) {
|
|
4830
4698
|
const { size } = reader;
|
|
4831
4699
|
const searchLength = Math.min(size, maxAppendedDataSize == Infinity ? size :
|
|
4832
4700
|
END_OF_CENTRAL_DIR_LENGTH + MAX_16_BITS + maxAppendedDataSize);
|
|
4833
|
-
const searchOffset = size - searchLength;
|
|
4834
|
-
const searchArray = await readUint8Array(reader, searchOffset, searchLength);
|
|
4835
|
-
const searchView = getDataView$1(searchArray);
|
|
4836
4701
|
let firstSignatureInfo, plausibleInfo;
|
|
4837
|
-
for (
|
|
4838
|
-
|
|
4839
|
-
|
|
4840
|
-
|
|
4841
|
-
|
|
4842
|
-
|
|
4843
|
-
|
|
4844
|
-
|
|
4845
|
-
|
|
4846
|
-
|
|
4847
|
-
|
|
4848
|
-
if (reachability == CENTRAL_DIRECTORY_PLAUSIBLE && !plausibleInfo) {
|
|
4849
|
-
plausibleInfo = record;
|
|
4850
|
-
}
|
|
4702
|
+
for await (const [searchView, searchOffset, searchArray, indexByte, offset] of scanEndOfCentralDirectory(reader, searchLength)) {
|
|
4703
|
+
const record = getEndOfCentralDirectoryInfo(searchArray, indexByte, offset);
|
|
4704
|
+
if (!firstSignatureInfo) {
|
|
4705
|
+
firstSignatureInfo = record;
|
|
4706
|
+
}
|
|
4707
|
+
const reachability = await getCentralDirectoryReachability(reader, searchView, searchOffset, indexByte, offset, size, remoteProbeBudget);
|
|
4708
|
+
if (reachability == CENTRAL_DIRECTORY_REACHABLE) {
|
|
4709
|
+
return record;
|
|
4710
|
+
}
|
|
4711
|
+
if (reachability == CENTRAL_DIRECTORY_PLAUSIBLE && !plausibleInfo) {
|
|
4712
|
+
plausibleInfo = record;
|
|
4851
4713
|
}
|
|
4852
4714
|
}
|
|
4853
4715
|
return plausibleInfo || firstSignatureInfo;
|
|
4854
4716
|
}
|
|
4855
4717
|
|
|
4856
|
-
|
|
4857
|
-
|
|
4858
|
-
|
|
4859
|
-
|
|
4860
|
-
|
|
4861
|
-
|
|
4862
|
-
|
|
4863
|
-
|
|
4864
|
-
|
|
4865
|
-
|
|
4866
|
-
|
|
4867
|
-
|
|
4868
|
-
|
|
4718
|
+
async function* scanEndOfCentralDirectory(reader, scanLength) {
|
|
4719
|
+
const scanOffset = reader.size - scanLength;
|
|
4720
|
+
const scanArray = await readUint8Array(reader, scanOffset, scanLength);
|
|
4721
|
+
const scanView = getDataView$1(scanArray);
|
|
4722
|
+
for (let indexByte = scanArray.length - END_OF_CENTRAL_DIR_LENGTH; indexByte >= 0; indexByte--) {
|
|
4723
|
+
if (getUint32(scanView, indexByte) == END_OF_CENTRAL_DIR_SIGNATURE) {
|
|
4724
|
+
yield [scanView, scanOffset, scanArray, indexByte, scanOffset + indexByte];
|
|
4725
|
+
}
|
|
4726
|
+
}
|
|
4727
|
+
}
|
|
4728
|
+
|
|
4729
|
+
function getEndOfCentralDirectoryInfo(scanArray, indexByte, offset) {
|
|
4730
|
+
return { offset, buffer: scanArray.slice(indexByte, indexByte + END_OF_CENTRAL_DIR_LENGTH).buffer };
|
|
4731
|
+
}
|
|
4732
|
+
|
|
4869
4733
|
async function getCentralDirectoryReachability(reader, view, anchoredOffset, indexByte, offset, size, remoteProbeBudget) {
|
|
4870
4734
|
const filesLength = getUint16(view, indexByte + 10);
|
|
4871
4735
|
const directoryDataLength = getUint32(view, indexByte + 12);
|
|
4872
4736
|
const directoryDataOffset = getUint32(view, indexByte + 16);
|
|
4873
4737
|
if (filesLength == MAX_16_BITS || directoryDataLength == MAX_32_BITS || directoryDataOffset == MAX_32_BITS) {
|
|
4874
|
-
// saturated fields imply a zip64 record; corroborate it with the zip64 end of central directory locator
|
|
4875
|
-
// that sits immediately before it, so saturated bytes inside a comment cannot masquerade as one
|
|
4876
4738
|
const locatorSignature = await readSignature(reader, view, anchoredOffset, offset - ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH, size, remoteProbeBudget);
|
|
4877
4739
|
return locatorSignature == ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIGNATURE ? CENTRAL_DIRECTORY_REACHABLE : CENTRAL_DIRECTORY_UNREACHABLE;
|
|
4878
4740
|
}
|
|
4879
4741
|
if (!filesLength && !directoryDataLength) {
|
|
4880
|
-
// a valid empty archive has no central directory to dereference
|
|
4881
4742
|
return CENTRAL_DIRECTORY_PLAUSIBLE;
|
|
4882
4743
|
}
|
|
4883
|
-
// the central directory ends where this record starts; reconcile the stored offset against that actual
|
|
4884
|
-
// position (see stored_cd_offset ⟺ eocd_pos − cd_size) so prepended data does not hide the directory
|
|
4885
4744
|
for (const centralDirectoryOffset of [offset - directoryDataLength, directoryDataOffset]) {
|
|
4886
4745
|
if (await readSignature(reader, view, anchoredOffset, centralDirectoryOffset, size, remoteProbeBudget) == CENTRAL_FILE_HEADER_SIGNATURE) {
|
|
4887
4746
|
return CENTRAL_DIRECTORY_REACHABLE;
|
|
@@ -4890,15 +4749,11 @@ async function getCentralDirectoryReachability(reader, view, anchoredOffset, ind
|
|
|
4890
4749
|
return CENTRAL_DIRECTORY_UNREACHABLE;
|
|
4891
4750
|
}
|
|
4892
4751
|
|
|
4893
|
-
// Reads a 4-byte little-endian signature at `signatureOffset`, served from the tail window (`view`, spanning
|
|
4894
|
-
// `[anchoredOffset, size)`) when it falls inside it and otherwise from a metered (possibly remote) read. Returns
|
|
4895
|
-
// UNDEFINED_VALUE when the position is out of range or the out-of-window read budget is exhausted.
|
|
4896
4752
|
async function readSignature(reader, view, anchoredOffset, signatureOffset, size, remoteProbeBudget) {
|
|
4897
4753
|
if (signatureOffset < 0 || signatureOffset + 4 > size) {
|
|
4898
4754
|
return UNDEFINED_VALUE;
|
|
4899
4755
|
}
|
|
4900
4756
|
if (signatureOffset >= anchoredOffset) {
|
|
4901
|
-
// the target sits inside the tail window already in memory: no extra read needed
|
|
4902
4757
|
return getUint32(view, signatureOffset - anchoredOffset);
|
|
4903
4758
|
}
|
|
4904
4759
|
if (remoteProbeBudget.count > 0) {
|
|
@@ -4906,7 +4761,6 @@ async function readSignature(reader, view, anchoredOffset, signatureOffset, size
|
|
|
4906
4761
|
const signatureArray = await readUint8Array(reader, signatureOffset, 4);
|
|
4907
4762
|
return getUint32(getDataView$1(signatureArray), 0);
|
|
4908
4763
|
}
|
|
4909
|
-
// out of budget: leave this candidate unverified rather than issue another read
|
|
4910
4764
|
return UNDEFINED_VALUE;
|
|
4911
4765
|
}
|
|
4912
4766
|
|
|
@@ -4922,8 +4776,6 @@ function checkLocalDirectory(zipEntry, localDirectory, rawLocalFilename) {
|
|
|
4922
4776
|
if (localDirectory.compressionMethod != zipEntry.compressionMethod) {
|
|
4923
4777
|
throwAmbiguousArchive("mismatched local file header (compression method)");
|
|
4924
4778
|
}
|
|
4925
|
-
// when the data descriptor flag is set, the local signature and sizes are zeroed out; all-zero values are
|
|
4926
|
-
// also tolerated when the flag is clear because some tools produce them (streaming writers predating bit 3)
|
|
4927
4779
|
if (!localDirectory.bitFlag.dataDescriptor &&
|
|
4928
4780
|
(localDirectory.signature || localDirectory.compressedSize || localDirectory.uncompressedSize) &&
|
|
4929
4781
|
(localDirectory.signature != zipEntry.signature ||
|
|
@@ -5013,7 +4865,6 @@ const ERR_INVALID_VERSION = "Version exceeds 65535";
|
|
|
5013
4865
|
const ERR_INVALID_ENCRYPTION_STRENGTH = "The strength must equal 1, 2, or 3";
|
|
5014
4866
|
const ERR_INVALID_EXTRAFIELD_TYPE = "Extra field type exceeds 65535";
|
|
5015
4867
|
const ERR_INVALID_EXTRAFIELD_DATA = "Extra field data exceeds 64KB";
|
|
5016
|
-
// same message as the constant exported by zip-reader.js
|
|
5017
4868
|
const ERR_UNSUPPORTED_COMPRESSION = "Compression method not supported";
|
|
5018
4869
|
const MIN_UNIX_TIME = -2147483648;
|
|
5019
4870
|
const MAX_UNIX_TIME = 2147483647;
|
|
@@ -5096,12 +4947,12 @@ class ZipWriter {
|
|
|
5096
4947
|
rawExtraField,
|
|
5097
4948
|
} = entry;
|
|
5098
4949
|
const { level, languageEncodingFlag, dataDescriptor } = bitFlag;
|
|
5099
|
-
rawExtraFieldZip64 = rawExtraFieldZip64 ||
|
|
5100
|
-
rawExtraFieldAES = rawExtraFieldAES ||
|
|
5101
|
-
rawExtraFieldExtendedTimestamp = rawExtraFieldExtendedTimestamp ||
|
|
5102
|
-
rawExtraFieldNTFS = rawExtraFieldNTFS ||
|
|
5103
|
-
rawExtraFieldUnix = rawExtraFieldUnix ||
|
|
5104
|
-
rawExtraField = rawExtraField ||
|
|
4950
|
+
rawExtraFieldZip64 = rawExtraFieldZip64 || EMPTY_UINT8_ARRAY;
|
|
4951
|
+
rawExtraFieldAES = rawExtraFieldAES || EMPTY_UINT8_ARRAY;
|
|
4952
|
+
rawExtraFieldExtendedTimestamp = rawExtraFieldExtendedTimestamp || EMPTY_UINT8_ARRAY;
|
|
4953
|
+
rawExtraFieldNTFS = rawExtraFieldNTFS || EMPTY_UINT8_ARRAY;
|
|
4954
|
+
rawExtraFieldUnix = rawExtraFieldUnix || EMPTY_UINT8_ARRAY;
|
|
4955
|
+
rawExtraField = rawExtraField || EMPTY_UINT8_ARRAY;
|
|
5105
4956
|
if (entry.extraFieldAES) {
|
|
5106
4957
|
compressionMethod = COMPRESSION_METHOD_AES;
|
|
5107
4958
|
}
|
|
@@ -5207,7 +5058,7 @@ class ZipWriter {
|
|
|
5207
5058
|
return false;
|
|
5208
5059
|
}
|
|
5209
5060
|
|
|
5210
|
-
async close(comment =
|
|
5061
|
+
async close(comment = EMPTY_UINT8_ARRAY, options = {}) {
|
|
5211
5062
|
const zipWriter = this;
|
|
5212
5063
|
const { pendingAddFileCalls, writer } = this;
|
|
5213
5064
|
const { writable } = writer;
|
|
@@ -5506,7 +5357,7 @@ function resolveMetadata(zipWriter, name, options) {
|
|
|
5506
5357
|
if (!zipCrypto && (password !== UNDEFINED_VALUE || rawPassword !== UNDEFINED_VALUE) && !(encryptionStrength >= 1 && encryptionStrength <= 3)) {
|
|
5507
5358
|
throw new Error(ERR_INVALID_ENCRYPTION_STRENGTH);
|
|
5508
5359
|
}
|
|
5509
|
-
let rawExtraField =
|
|
5360
|
+
let rawExtraField = EMPTY_UINT8_ARRAY;
|
|
5510
5361
|
const extraField = options[PROPERTY_NAME_EXTRA_FIELD];
|
|
5511
5362
|
if (extraField) {
|
|
5512
5363
|
let extraFieldSize = 0;
|
|
@@ -5567,8 +5418,6 @@ async function resolveSizes(zipWriter, reader, { resolvedOptions: metadata }, op
|
|
|
5567
5418
|
let maximumCompressedSize = 0;
|
|
5568
5419
|
let uncompressedSize = 0;
|
|
5569
5420
|
if (passThrough) {
|
|
5570
|
-
// the headers of a passThrough entry describe the payload verbatim: without a
|
|
5571
|
-
// reader they would declare content that is not there
|
|
5572
5421
|
if (!reader) {
|
|
5573
5422
|
throw new Error(ERR_UNDEFINED_READER);
|
|
5574
5423
|
}
|
|
@@ -5579,8 +5428,6 @@ async function resolveSizes(zipWriter, reader, { resolvedOptions: metadata }, op
|
|
|
5579
5428
|
}
|
|
5580
5429
|
const zip64Enabled = zip64 === true;
|
|
5581
5430
|
const encrypted = getOptionValue(zipWriter, options, PROPERTY_NAME_ENCRYPTED);
|
|
5582
|
-
// entries without a reader have no payload: write them as empty stored files instead of
|
|
5583
|
-
// declaring a compressed or encrypted content that does not exist
|
|
5584
5431
|
const encryptedEntry = Boolean(reader) && (Boolean((password && getLength(password)) || (rawPassword && getLength(rawPassword))) || (passThrough && encrypted));
|
|
5585
5432
|
if (!reader) {
|
|
5586
5433
|
level = 0;
|
|
@@ -5718,7 +5565,6 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
|
|
|
5718
5565
|
fileEntry.diskNumberStart = writer.diskNumber;
|
|
5719
5566
|
fileEntry.offset = getSegmentOffset(zipWriter, writer);
|
|
5720
5567
|
if (usdz) {
|
|
5721
|
-
// the padding depends on the entry offset, only known now that the writer is locked
|
|
5722
5568
|
const previousMetadataSize = entryInfo.metadataSize;
|
|
5723
5569
|
appendExtraFieldUSDZ(entryInfo, zipWriter.offset - writer.diskOffset);
|
|
5724
5570
|
fileEntry.size += entryInfo.metadataSize - previousMetadataSize;
|
|
@@ -5761,10 +5607,6 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
|
|
|
5761
5607
|
if (releaseLockWriter) {
|
|
5762
5608
|
releaseLockWriter();
|
|
5763
5609
|
}
|
|
5764
|
-
// A buffered entry uses a temporary stream (see `createTempStream`). When that stream is
|
|
5765
|
-
// backed by a resource (a file, an OPFS handle, ...) it must be released on every exit path,
|
|
5766
|
-
// including the error path where the stream is otherwise abandoned without being closed or
|
|
5767
|
-
// cancelled. `dispose()` is optional and best-effort so it never masks the original outcome.
|
|
5768
5610
|
if (bufferedWrite && fileWriter && fileWriter.dispose) {
|
|
5769
5611
|
try {
|
|
5770
5612
|
await fileWriter.dispose();
|
|
@@ -5791,7 +5633,7 @@ async function getFileEntry(zipWriter, name, reader, entryInfo, options) {
|
|
|
5791
5633
|
async function skipDiskIfNeeded() {
|
|
5792
5634
|
if (getLength(headerInfo.localHeaderArray) > writer.availableSize) {
|
|
5793
5635
|
writer.availableSize = 0;
|
|
5794
|
-
await writeData(writer,
|
|
5636
|
+
await writeData(writer, EMPTY_UINT8_ARRAY);
|
|
5795
5637
|
}
|
|
5796
5638
|
}
|
|
5797
5639
|
}
|
|
@@ -5902,8 +5744,7 @@ async function createFileEntry(reader, writer, { diskNumberStart, lock }, entryI
|
|
|
5902
5744
|
}
|
|
5903
5745
|
const { writable } = writer;
|
|
5904
5746
|
if (reader) {
|
|
5905
|
-
reader.chunkSize
|
|
5906
|
-
const readable = reader.readable;
|
|
5747
|
+
const readable = reader.createReadable ? reader.createReadable({ chunkSize: getChunkSize(config) }) : reader.readable;
|
|
5907
5748
|
const size = reader.size;
|
|
5908
5749
|
const workerOptions = {
|
|
5909
5750
|
options: {
|
|
@@ -6003,13 +5844,9 @@ function getHeaderInfo(options) {
|
|
|
6003
5844
|
: compressionMethod !== COMPRESSION_METHOD_STORE);
|
|
6004
5845
|
let rawLocalExtraFieldZip64;
|
|
6005
5846
|
const uncompressedFile = passThrough || !compressed;
|
|
6006
|
-
// entries without a data descriptor are always buffered (cf. getFileEntry), so the
|
|
6007
|
-
// zip64 extra field values can be patched into the local header before flushing it
|
|
6008
5847
|
const zip64ExtraFieldComplete = zip64 && (options.bufferedWrite || !dataDescriptor || ((!zip64UncompressedSize && !zip64CompressedSize) || uncompressedFile));
|
|
6009
5848
|
const writeLocalExtraFieldZip64 = zip64ExtraFieldComplete || (zip64 && dataDescriptor && (zip64UncompressedSize || zip64CompressedSize));
|
|
6010
5849
|
if (zip64 && (zip64UncompressedSize || zip64CompressedSize)) {
|
|
6011
|
-
// APPNOTE 4.5.3: the zip64 extra field of a local header must include both the
|
|
6012
|
-
// uncompressed and compressed size fields
|
|
6013
5850
|
const length = 4 + 16;
|
|
6014
5851
|
const extraFieldZip64 = createRecordWriter(length);
|
|
6015
5852
|
extraFieldZip64.uint16(EXTRAFIELD_TYPE_ZIP64);
|
|
@@ -6023,7 +5860,7 @@ function getHeaderInfo(options) {
|
|
|
6023
5860
|
}
|
|
6024
5861
|
}
|
|
6025
5862
|
} else {
|
|
6026
|
-
rawLocalExtraFieldZip64 =
|
|
5863
|
+
rawLocalExtraFieldZip64 = EMPTY_UINT8_ARRAY;
|
|
6027
5864
|
}
|
|
6028
5865
|
let rawExtraFieldAES;
|
|
6029
5866
|
if (encrypted && !zipCrypto) {
|
|
@@ -6033,7 +5870,7 @@ function getHeaderInfo(options) {
|
|
|
6033
5870
|
rawExtraFieldAES = extraFieldAES.array;
|
|
6034
5871
|
rawExtraFieldAES[8] = encryptionStrength;
|
|
6035
5872
|
} else {
|
|
6036
|
-
rawExtraFieldAES =
|
|
5873
|
+
rawExtraFieldAES = EMPTY_UINT8_ARRAY;
|
|
6037
5874
|
}
|
|
6038
5875
|
let rawExtraFieldNTFS;
|
|
6039
5876
|
let rawExtraFieldExtendedTimestamp;
|
|
@@ -6056,8 +5893,7 @@ function getHeaderInfo(options) {
|
|
|
6056
5893
|
}
|
|
6057
5894
|
rawExtraFieldExtendedTimestamp = extraFieldTimestamp.array;
|
|
6058
5895
|
} else {
|
|
6059
|
-
|
|
6060
|
-
rawExtraFieldExtendedTimestamp = new Uint8Array();
|
|
5896
|
+
rawExtraFieldExtendedTimestamp = EMPTY_UINT8_ARRAY;
|
|
6061
5897
|
}
|
|
6062
5898
|
try {
|
|
6063
5899
|
const lastModTimeNTFS = getTimeNTFS(lastModDate);
|
|
@@ -6072,10 +5908,10 @@ function getHeaderInfo(options) {
|
|
|
6072
5908
|
extraFieldNTFS.uint64(getTimeNTFS(creationDate) || lastModTimeNTFS);
|
|
6073
5909
|
rawExtraFieldNTFS = extraFieldNTFS.array;
|
|
6074
5910
|
} catch {
|
|
6075
|
-
rawExtraFieldNTFS =
|
|
5911
|
+
rawExtraFieldNTFS = EMPTY_UINT8_ARRAY;
|
|
6076
5912
|
}
|
|
6077
5913
|
} else {
|
|
6078
|
-
rawExtraFieldNTFS = rawExtraFieldExtendedTimestamp =
|
|
5914
|
+
rawExtraFieldNTFS = rawExtraFieldExtendedTimestamp = EMPTY_UINT8_ARRAY;
|
|
6079
5915
|
}
|
|
6080
5916
|
let rawExtraFieldUnix;
|
|
6081
5917
|
try {
|
|
@@ -6101,10 +5937,10 @@ function getHeaderInfo(options) {
|
|
|
6101
5937
|
extraFieldUnix.uint16((gid === UNDEFINED_VALUE ? 0 : gid) & MAX_16_BITS);
|
|
6102
5938
|
rawExtraFieldUnix = extraFieldUnix.array;
|
|
6103
5939
|
} else {
|
|
6104
|
-
rawExtraFieldUnix =
|
|
5940
|
+
rawExtraFieldUnix = EMPTY_UINT8_ARRAY;
|
|
6105
5941
|
}
|
|
6106
5942
|
} catch {
|
|
6107
|
-
rawExtraFieldUnix =
|
|
5943
|
+
rawExtraFieldUnix = EMPTY_UINT8_ARRAY;
|
|
6108
5944
|
}
|
|
6109
5945
|
if (compressionMethod === UNDEFINED_VALUE) {
|
|
6110
5946
|
compressionMethod = compressed ? COMPRESSION_METHOD_DEFLATE : COMPRESSION_METHOD_STORE;
|
|
@@ -6171,7 +6007,7 @@ function getHeaderInfo(options) {
|
|
|
6171
6007
|
version,
|
|
6172
6008
|
compressionMethod,
|
|
6173
6009
|
extraFieldExtendedTimestampFlag,
|
|
6174
|
-
rawExtraFieldZip64:
|
|
6010
|
+
rawExtraFieldZip64: EMPTY_UINT8_ARRAY,
|
|
6175
6011
|
localExtraFieldZip64Length,
|
|
6176
6012
|
rawExtraFieldExtendedTimestamp,
|
|
6177
6013
|
rawExtraFieldNTFS,
|
|
@@ -6184,7 +6020,6 @@ function getHeaderInfo(options) {
|
|
|
6184
6020
|
function appendExtraFieldUSDZ(entryInfo, zipWriterOffset) {
|
|
6185
6021
|
const { headerInfo } = entryInfo;
|
|
6186
6022
|
let { localHeaderArray, extraFieldLength } = headerInfo;
|
|
6187
|
-
let localHeaderArrayView;
|
|
6188
6023
|
let extraBytesLength = 64 - ((zipWriterOffset + getLength(localHeaderArray)) % 64);
|
|
6189
6024
|
if (extraBytesLength < 4) {
|
|
6190
6025
|
extraBytesLength += 64;
|
|
@@ -6197,7 +6032,7 @@ function appendExtraFieldUSDZ(entryInfo, zipWriterOffset) {
|
|
|
6197
6032
|
headerInfo.localHeaderArray = localHeaderArray = new Uint8Array(getLength(previousLocalHeaderArray) + extraBytesLength);
|
|
6198
6033
|
arraySet(localHeaderArray, previousLocalHeaderArray);
|
|
6199
6034
|
arraySet(localHeaderArray, rawExtraFieldUSDZ, getLength(previousLocalHeaderArray));
|
|
6200
|
-
localHeaderArrayView = getDataView(localHeaderArray);
|
|
6035
|
+
const localHeaderArrayView = getDataView(localHeaderArray);
|
|
6201
6036
|
setUint16(localHeaderArrayView, 28, extraFieldLength + extraBytesLength);
|
|
6202
6037
|
headerInfo.localHeaderView = localHeaderArrayView;
|
|
6203
6038
|
entryInfo.metadataSize += extraBytesLength;
|
|
@@ -6205,7 +6040,7 @@ function appendExtraFieldUSDZ(entryInfo, zipWriterOffset) {
|
|
|
6205
6040
|
|
|
6206
6041
|
function packUnixId(id) {
|
|
6207
6042
|
if (id === UNDEFINED_VALUE) {
|
|
6208
|
-
return
|
|
6043
|
+
return EMPTY_UINT8_ARRAY;
|
|
6209
6044
|
} else {
|
|
6210
6045
|
const dataArray = new Uint8Array(4);
|
|
6211
6046
|
const dataView = getDataView(dataArray);
|
|
@@ -6248,7 +6083,7 @@ function getDataDescriptorInfo({
|
|
|
6248
6083
|
dataDescriptor,
|
|
6249
6084
|
dataDescriptorSignature
|
|
6250
6085
|
}) {
|
|
6251
|
-
let dataDescriptorArray =
|
|
6086
|
+
let dataDescriptorArray = EMPTY_UINT8_ARRAY;
|
|
6252
6087
|
let dataDescriptorView, dataDescriptorOffset = 0;
|
|
6253
6088
|
let dataDescriptorLength = zip64 ? DATA_DESCRIPTOR_RECORD_ZIP_64_LENGTH : DATA_DESCRIPTOR_RECORD_LENGTH;
|
|
6254
6089
|
if (dataDescriptorSignature) {
|
|
@@ -6332,7 +6167,6 @@ function updateLocalHeader({
|
|
|
6332
6167
|
}
|
|
6333
6168
|
}
|
|
6334
6169
|
if (zip64 && localExtraFieldZip64Length) {
|
|
6335
|
-
// the local zip64 extra field always contains both size slots
|
|
6336
6170
|
const localHeaderOffset = HEADER_SIZE + getLength(rawFilename) + 4;
|
|
6337
6171
|
setBigUint64(localHeaderView, localHeaderOffset, BigInt(uncompressedSize));
|
|
6338
6172
|
setBigUint64(localHeaderView, localHeaderOffset + 8, BigInt(compressedSize));
|
|
@@ -6386,7 +6220,7 @@ function createDirectoryRecords(files) {
|
|
|
6386
6220
|
}
|
|
6387
6221
|
rawExtraFieldZip64 = extraFieldZip64.array;
|
|
6388
6222
|
} else {
|
|
6389
|
-
rawExtraFieldZip64 =
|
|
6223
|
+
rawExtraFieldZip64 = EMPTY_UINT8_ARRAY;
|
|
6390
6224
|
}
|
|
6391
6225
|
fileEntry.rawExtraFieldZip64 = rawExtraFieldZip64;
|
|
6392
6226
|
fileEntry.zip64Offset = zip64Offset;
|
|
@@ -6401,7 +6235,7 @@ function createDirectoryRecords(files) {
|
|
|
6401
6235
|
extraFieldTimestamp.uint32(lastModTimeUnix);
|
|
6402
6236
|
rawExtraFieldTimestamp = extraFieldTimestamp.array;
|
|
6403
6237
|
} else {
|
|
6404
|
-
rawExtraFieldTimestamp =
|
|
6238
|
+
rawExtraFieldTimestamp = EMPTY_UINT8_ARRAY;
|
|
6405
6239
|
}
|
|
6406
6240
|
fileEntry.rawExtraFieldExtendedTimestamp = rawExtraFieldTimestamp;
|
|
6407
6241
|
const extraFieldLength = getLength(
|
|
@@ -6457,7 +6291,7 @@ async function writeDirectoryRecords(zipWriter, directoryDataLength, options) {
|
|
|
6457
6291
|
await writeData(writer, directoryArray.slice(directoryDiskOffset, offset));
|
|
6458
6292
|
directoryDiskOffset = offset;
|
|
6459
6293
|
writer.availableSize = 0;
|
|
6460
|
-
await writeData(writer,
|
|
6294
|
+
await writeData(writer, EMPTY_UINT8_ARRAY);
|
|
6461
6295
|
}
|
|
6462
6296
|
if (indexFileEntry == 0) {
|
|
6463
6297
|
cdStartDiskNumber = writer.diskNumber;
|
|
@@ -6530,7 +6364,7 @@ async function writeEndOfDirectoryRecord(zipWriter, comment, options, cdInfo) {
|
|
|
6530
6364
|
const endOfdirectoryRecord = createRecordWriter(zip64 ? ZIP64_END_OF_CENTRAL_DIR_TOTAL_LENGTH : END_OF_CENTRAL_DIR_LENGTH);
|
|
6531
6365
|
if (getLength(endOfdirectoryRecord.array) + commentLength > writer.availableSize) {
|
|
6532
6366
|
writer.availableSize = 0;
|
|
6533
|
-
await writeData(writer,
|
|
6367
|
+
await writeData(writer, EMPTY_UINT8_ARRAY);
|
|
6534
6368
|
}
|
|
6535
6369
|
lastDiskNumber = writer.diskNumber;
|
|
6536
6370
|
if (zip64) {
|
|
@@ -6627,7 +6461,6 @@ function getTimeUnix(date) {
|
|
|
6627
6461
|
return Math.floor(date.getTime() / 1000);
|
|
6628
6462
|
}
|
|
6629
6463
|
|
|
6630
|
-
// the extended timestamp extra field stores dates as signed 32-bit time_t values
|
|
6631
6464
|
function inUnixTimeRange(timeUnix) {
|
|
6632
6465
|
return timeUnix >= MIN_UNIX_TIME && timeUnix <= MAX_UNIX_TIME;
|
|
6633
6466
|
}
|
|
@@ -6812,36 +6645,12 @@ function getMimeType$1() {
|
|
|
6812
6645
|
const DEFAULT_THRESHOLD = 1024 * 1024;
|
|
6813
6646
|
const DEFAULT_DIRECTORY_NAME = ".zip.js-temp";
|
|
6814
6647
|
|
|
6815
|
-
// Builds a `createTempStream` factory (see `ZipWriter`'s option of the same name) that spills the
|
|
6816
|
-
// data of a buffered entry to the Origin Private File System (OPFS) instead of keeping it in memory.
|
|
6817
|
-
//
|
|
6818
|
-
// It is meant for the buffered-write path (keep-order concurrent `add()`, non-seekable output, ...),
|
|
6819
|
-
// where the compressed data of an entry has to be held until the writer is free. In memory that data
|
|
6820
|
-
// grows with the entry size; here it is written to an OPFS file and streamed back, so peak memory
|
|
6821
|
-
// stays bounded.
|
|
6822
|
-
//
|
|
6823
|
-
// It is hybrid on purpose: an entry stays fully in memory until it exceeds `thresholdBytes`, and only
|
|
6824
|
-
// then spills to a file. Small entries never touch the disk, so a workload made of many tiny entries
|
|
6825
|
-
// keeps the speed of the in-memory default; only genuinely large entries pay for (and benefit from)
|
|
6826
|
-
// the file round-trip.
|
|
6827
|
-
//
|
|
6828
|
-
// OPFS is a browser/worker feature; there is no fallback here. Feature-detect
|
|
6829
|
-
// `navigator.storage.getDirectory` (or inject `getDirectory`) before using it, and let the writer use
|
|
6830
|
-
// its in-memory default elsewhere.
|
|
6831
|
-
//
|
|
6832
|
-
// Options:
|
|
6833
|
-
// thresholdBytes spill to a file once a buffered entry exceeds this size (default 1 MiB).
|
|
6834
|
-
// directoryName name of the OPFS sub-directory holding the temp files (default ".zip.js-temp").
|
|
6835
|
-
// getDirectory returns (or resolves to) the root `FileSystemDirectoryHandle`. Defaults to
|
|
6836
|
-
// `navigator.storage.getDirectory()`. Inject it to run inside a worker with a
|
|
6837
|
-
// pre-obtained handle, or to test against a mock.
|
|
6838
6648
|
function createOPFSTempStream(options = {}) {
|
|
6839
6649
|
const {
|
|
6840
6650
|
thresholdBytes = DEFAULT_THRESHOLD,
|
|
6841
6651
|
directoryName = DEFAULT_DIRECTORY_NAME,
|
|
6842
6652
|
getDirectory = () => navigator.storage.getDirectory()
|
|
6843
6653
|
} = options;
|
|
6844
|
-
// The temp directory is resolved once and shared by every entry of this factory.
|
|
6845
6654
|
let directoryHandlePromise;
|
|
6846
6655
|
function getTempDirectory() {
|
|
6847
6656
|
if (!directoryHandlePromise) {
|
|
@@ -6850,15 +6659,12 @@ function createOPFSTempStream(options = {}) {
|
|
|
6850
6659
|
}
|
|
6851
6660
|
return directoryHandlePromise;
|
|
6852
6661
|
}
|
|
6853
|
-
return
|
|
6662
|
+
return function () {
|
|
6854
6663
|
const memoryChunks = [];
|
|
6855
6664
|
let bufferedSize = 0;
|
|
6856
6665
|
let spilled = false;
|
|
6857
6666
|
let fileName, fileHandle, fileWriter, fileReader;
|
|
6858
6667
|
|
|
6859
|
-
// Move whatever is buffered in memory to a fresh OPFS file, then keep writing to that file.
|
|
6860
|
-
// `FileSystemWritableFileStream` is a `WritableStream`, so it is driven through the standard
|
|
6861
|
-
// writer API rather than its non-standard `write()`/`seek()` convenience methods.
|
|
6862
6668
|
async function spillToFile() {
|
|
6863
6669
|
const directoryHandle = await getTempDirectory();
|
|
6864
6670
|
fileName = crypto.randomUUID();
|
|
@@ -6868,7 +6674,6 @@ function createOPFSTempStream(options = {}) {
|
|
|
6868
6674
|
for (const chunk of memoryChunks) {
|
|
6869
6675
|
await fileWriter.write(chunk);
|
|
6870
6676
|
}
|
|
6871
|
-
// Release the in-memory copy; from now on data lives in the file.
|
|
6872
6677
|
memoryChunks.length = 0;
|
|
6873
6678
|
}
|
|
6874
6679
|
|
|
@@ -6892,9 +6697,6 @@ function createOPFSTempStream(options = {}) {
|
|
|
6892
6697
|
}
|
|
6893
6698
|
});
|
|
6894
6699
|
|
|
6895
|
-
// The writer always closes `writable` before reading `readable`, so `spilled` is final by the
|
|
6896
|
-
// time `pull` runs. It is read lazily here (not in `start`, which runs at construction time,
|
|
6897
|
-
// before anything is written and before `spilled` is known).
|
|
6898
6700
|
let memoryIndex = 0;
|
|
6899
6701
|
const readable = new ReadableStream({
|
|
6900
6702
|
async pull(controller) {
|
|
@@ -6921,11 +6723,6 @@ function createOPFSTempStream(options = {}) {
|
|
|
6921
6723
|
}
|
|
6922
6724
|
}
|
|
6923
6725
|
}, { highWaterMark: 0 });
|
|
6924
|
-
// highWaterMark 0: do not pull (and possibly close on an empty buffer) until the consumer
|
|
6925
|
-
// actually reads, which the writer only does once the data has been fully written.
|
|
6926
|
-
|
|
6927
|
-
// Called by the writer on every exit path (success, error, abort). Best-effort: it must never
|
|
6928
|
-
// throw. Closes any still-open file writer, then deletes the temp file.
|
|
6929
6726
|
async function dispose() {
|
|
6930
6727
|
if (fileWriter) {
|
|
6931
6728
|
try {
|
|
@@ -6986,7 +6783,7 @@ try {
|
|
|
6986
6783
|
// ignored
|
|
6987
6784
|
}
|
|
6988
6785
|
|
|
6989
|
-
var{Uint8Array:x,Uint16Array:E,Int32Array:H,TransformStream:U,Math:N,Error:z,Array:v}=globalThis,Se=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],Z=new x(0),Ve=new E(0),de=[];for(let e=0;e<6;e++)de.push(e,0==e?8:4);de.push(0,1);var Ee=[];for(let e=0;e<14;e++)Ee.push(e,0==e?4:2);var ge=new E([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]),Te=new 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]);function M(e,t,n,r,i){if(0==i)return;let f=e instanceof x?e:new x(e.buffer,e.byteOffset,e.byteLength),_=n instanceof x?n.subarray(r,r+i):new x(n.buffer,n.byteOffset+r,i);f.set(_,t);}function je(e,t,n){0!=n&&(e instanceof x?e:new x(e.buffer,e.byteOffset,e.byteLength)).fill(0,t,t+n);}function Je(){return {next_in:Z,next_in_index:0,avail_in:0,total_in:0,next_out:Z,next_out_index:0,avail_out:0,total_out:0,msg:"",t:0,i:0,_:0,l:void 0}}function Qe(e,t){let n=1<<t;return {o:e,u:new x(n),h:n,k:t,v:0,m:0,p:0,L:0}}function te(e){let t=[];for(let n=0;n<e.length;n+=2){let r=e[n],i=e[n+1];for(let e=0;e<i;e++)t.push(r);}return new E(t)}var ne=class{constructor(e,t){this.M=e,this.Z=t,this.N=0;}},re=class{constructor(e,t,n,r,i){this.W=e,this.j=t,this.D=n,this.S=r,this.$=i;}};function T_(e){return J_[e<-6||e>2?9:2-e]||""}function Ae(e,t){try{e.msg=T_(t);}catch(n){e.msg="zlib error "+String(t)+" ("+n+")";}return t}function e_(e,t){let n=e>>>0,r=0;for(let e=0;e<t;e++)r=r<<1|1&n,n>>>=1;return r}function g(e,t){e.q[e.T++]=t;}function De(e,t){g(e,255&t),g(e,t>>>8&255);}function __(e,t,n){let r=255&n,i=65535&t,f=e.A+e.I;return e.q[f]=255&i,e.q[f+1]=i>>>8&255,e.q[f+2]=r,e.I+=3,i=i-1&65535,e.B[t_[r]+ie+1].U++,e.C[w_(i)].U++,e.I==e.X}function ye(e,t){let n=255&t,r=e.A+e.I;return e.q[r]=0,e.q[r+1]=0,e.q[r+2]=n,e.I+=3,e.B[n].U++,e.I==e.X}function ve(e){return e.h-ae}function w_(e){return e<256?g_[e]:g_[256+(e>>7)]}function A_(e){let t=He+7,n=1<<t,r=(1<<t)-1,i=N.floor((t+k-1)/k),f=1<<8+He;return {...Qe(e,15),o:e,F:42,H:0,Y:void 0,O:32767,P:t,R:n,J:r,K:i,V:new E(32768),G:new E(n),ee:f,q:new x(32768),te:0,ne:32768,T:0,re:0,ie:0,fe:0,_e:0,le:0,oe:-2,ue:0,ae:0,ce:0,se:0,de:0,he:0,we:0,ke:0,be:0,ge:0,ve:0,me:0,xe:0,ye:0,pe:new H(2*we+1),Le:new x(2*we+1),Me:new E(be+1),I:0,X:0,Ee:Z,A:0,ze:0,Ze:0,Ne:8,We:32768,je:0,Qe:0,De:0,B:new v(le).fill(0).map(()=>Q()),C:new v(2*me+1).fill(0).map(()=>Q()),Se:new v(2*oe+1).fill(0).map(()=>Q()),$e:E_(),qe:E_(),Te:E_()}}function D_(e){let t=[];for(let n=0;n<e.length;n+=2){let r=e[n],i=e[n+1],f=Q();f.Ae=r,f.Ie=i,t.push(f);}return t}function Q(){return {U:0,Ae:0,Ue:0,Ie:0}}function E_(){return new ne([],un(null,Z,0,0,0))}function un(e,t,n,r,i){return new re(e,t,n,r,i)}function Q_(){let e=new v(288).fill(0);for(let t=0;t<=143;t++)e[t]=8;for(let t=144;t<=255;t++)e[t]=9;for(let t=256;t<=279;t++)e[t]=7;for(let t=280;t<=287;t++)e[t]=8;return e}function y_(e){let{code:t,length:n}=cn(e),r=new E(2*e.length),i=0;for(let f=0;f<e.length;f++){let e=n[f]||0,_=t[f]||0;r[i++]=e?e_(_,e):0,r[i++]=e;}return new E(r)}function $_(e,t,n){let r=0;for(let n=0;n<e.length;n++){let i=t[n]?1<<t[n]:1,f=e[n]+i-1;f>r&&(r=f);}r<n&&(r=n);let i=new x(r+1);for(let n=0;n<=r;n++)for(let r=0;r<e.length;r++){let f=t[r]?1<<t[r]:1,_=e[r];if(n>=_&&n<=_+f-1){i[n]=r;break}}return i}function et(e,t){let n=0;for(let r=0;r<e.length;r++){let i=t[r]?1<<t[r]:1,f=e[r]+i-1;f>n&&(n=f);}let r=new x(n+1);for(let i=0;i<=n;i++)for(let n=0;n<e.length;n++){let f=t[n]?1<<t[n]:1,_=e[n];if(i>=_&&i<=_+f-1){r[i]=n;break}}return r}function _t(e){let t=new x(512),n=e.length-1;for(let r=0;r<256;r++)t[r]=r<=n?e[r]:e[n];for(let r=256;r<=n;r++){let n=r>>7;t[256+(n>255?255:n)]=e[r];}for(let e=257;e<512;e++)0==t[e]&&(t[e]=t[e-1]);return t}function cn(e){let t=N.max(...e),n=new v(t+1).fill(0);for(let t of e)t>0&&n[t]++;let r=new v(e.length).fill(0),i=new v(t+1).fill(0),f=0;for(let e=1;e<=t;e++)f=f+n[e-1]<<1,i[e]=f;for(let t=0;t<e.length;t++){let n=e[t];0!=n&&(r[t]=i[n]++);}return {code:r,length:e}}var He=8,k=3,_e=258,ae=_e+k+1,Ue=16,Be=_e,dn=29,ie=256,we=ie+1+dn,me=30,oe=19,le=2*we+1,be=15,tt=9,nt=255,rt=32,at=4,Ie=256,n_=16,r_=17,a_=18,it=0,v_=1,ot=2,$=-1,J_=["need dictionary","stream end","","file error","stream error","data error","insufficient memory","buffer error",""],i_=te(de),o_=te(Ee),Fe=new E(19);Fe[16]=2,Fe[17]=3,Fe[18]=7;var mn=y_(Q_()),bn=y_(new v(30).fill(5)),Ze=D_(mn),I_=D_(bn),t_=$_(Te,i_,_e),g_=_t(et(ge,o_));function Pe(e){return e%65521>>>0}function se(e,t,n){if(void 0===t||void 0===n)return 1;let r=e>>>16&65535;if(e&=65535,1==n)return (e+=t[0])>=65521&&(e-=65521),r+=e,r>=65521&&(r-=65521),(r<<16|e)>>>0;if(n<16){for(let i=0;i<n;i++)r+=e+=t[i];return e>=65521&&(e-=65521),r=Pe(r),(r<<16|e)>>>0}for(;n>=5552;){n-=5552;let i=N.floor(347);do{for(let n=0;n<16;n++)r+=e+=t[n];t=t.subarray(16);}while(--i);e=Pe(e),r=Pe(r);}if(n){for(;n>=16;){n-=16;for(let n=0;n<16;n++)r+=e+=t[n];t=t.subarray(16);}for(let i=0;i<n;i++)r+=e+=t[i];e=Pe(e),r=Pe(r);}return (r<<16|e)>>>0}var Me=[[],[],[],[],[],[],[],[]];for(let e=0;e<256;e++){let t=e;for(let e=0;e<8;e++)t=1&t?3988292384^t>>>1:t>>>1;Me[0][e]=t;}for(let e=0;e<256;e++)for(let t=1;t<8;t++){let n=Me[t-1][e];Me[t][e]=n>>>8^Me[0][255&n];}var[lt,sn,hn,xn,pn,Sn,En,gn]=Me;function W(e=0,t,n){if(!t)return 0;void 0===n&&(n=t.length);let r=0|~e,i=0;if((n=N.min(n,t.length))>=8){let e=new DataView(t.buffer,t.byteOffset,n),f=n-8;for(;i<=f;i+=8){let t=r^e.getInt32(i,true),n=e.getInt32(i+4,true);r=gn[255&t]^En[t>>>8&255]^Sn[t>>>16&255]^pn[t>>>24&255]^xn[255&n]^hn[n>>>8&255]^sn[n>>>16&255]^lt[n>>>24&255];}}for(;i<n;i++)r=r>>>8^lt[255&(r^t[i])];return (4294967295^r)>>>0}function st(e){16==e.L?(De(e,e.p),e.p=0,e.L=0):e.L>=8&&(g(e,e.p),e.p>>=8,e.L-=8);}function ht(e){e.L>8?De(e,e.p):e.L>0&&g(e,e.p),e.ze=1+(e.L-1&7),e.p=0,e.L=0;}function Tn(e,t,n){let r,i,f=[],_=0;for(r=1;r<=be;r++)_=_+n[r-1]<<1,f[r]=_;for(i=0;i<=t;i++){let t=e[i].Ie;0!=t&&(e[i].Ae=e_(f[t]++,t));}}function L(e,t,n){e.L>Ue-n?(e.p=65535&(e.p|t<<e.L),De(e,e.p),e.p=t>>Ue-e.L&65535,e.L+=n-Ue):(e.p=65535&(e.p|t<<e.L),e.L+=n);}function xt(e){for(let t=0;t<e.B.length;t++)e.B[t].U=0;for(let t=0;t<e.C.length;t++)e.C[t].U=0;for(let t=0;t<e.Se.length;t++)e.Se[t].U=0;e.B[Ie].U=1,e.ie=e.fe=0,e.I=e._e=0;}function pt(e){if(e.B&&e.B.length>=le)for(let t=0;t<le;t++)e.B[t]=Q();else {e.B=[];for(let t=0;t<le;t++)e.B.push(Q());}if(e.C&&e.C.length>=2*me+1)for(let t=0;t<2*me+1;t++)e.C[t]=Q();else {e.C=[];for(let t=0;t<2*me+1;t++)e.C.push(Q());}if(e.Se&&e.Se.length>=2*oe+1)for(let t=0;t<2*oe+1;t++)e.Se[t]=Q();else {e.Se=[];for(let t=0;t<2*oe+1;t++)e.Se.push(Q());}e.$e=new ne(e.B,new re(Ze,i_,ie+1,we,be)),e.qe=new ne(e.C,new re(I_,o_,0,me,be)),e.Te=new ne(e.Se,new re(null,Fe,0,oe,7)),e.p=0,e.L=0,e.ze=0,xt(e);}var he=1;function wn(e,t,n){return n=e.pe[he],e.pe[he]=e.pe[e.Qe--],k_(e,t,he),n}function ct(e,t,n,r){return e[t].U<e[n].U||e[t].U==e[n].U&&r[t]<=r[n]}function k_(e,t,n){let r=e.pe[n],i=n<<1;for(;i<=e.Qe&&(i<e.Qe&&ct(t,e.pe[i+1],e.pe[i],e.Le)&&i++,!ct(t,r,e.pe[i],e.Le));)e.pe[n]=e.pe[i],n=i,i<<=1;e.pe[n]=r;}function An(e,t){let n,r,i,f,_,l,o=t.M,u=t.N,a=t.Z.W,c=t.Z.j,s=t.Z.D,d=t.Z.$,h=0;for(f=0;f<=be;f++)e.Me[f]=0;for(o[e.pe[e.De]].Ie=0,n=e.De+1;n<le;n++)r=e.pe[n],f=o[o[r].Ue].Ie+1,f>d&&(f=d,h++),o[r].Ie=f,!(r>u)&&(e.Me[f]++,_=0,r>=s&&(_=c[r-s]),l=o[r].U,e.ie+=l*(f+_),a&&(e.fe+=l*(a[r].Ie+_)));if(0!=h){do{for(f=d-1;0==e.Me[f];)f--;e.Me[f]--,e.Me[f+1]+=2,e.Me[d]--,h-=2;}while(h>0);for(f=d;0!=f;f--)for(r=e.Me[f];0!=r;)i=e.pe[--n],!(i>u)&&(o[i].Ie!=f&&(e.ie+=(f-o[i].Ie)*o[i].U,o[i].Ie=f),r--);}}function N_(e,t){let n,r,i,f=t.M,_=t.Z.W,l=t.Z.S,o=-1;for(e.Qe=0,e.De=le,n=0;n<l;n++)0!=f[n].U?(e.pe[++e.Qe]=o=n,e.Le[n]=0):f[n].Ie=0;for(;e.Qe<2;)i=e.pe[++e.Qe]=o<2?++o:0,f[i].U=1,e.Le[i]=0,e.ie--,_&&(e.fe-=_[i].Ie);for(t.N=o,n=N.floor(e.Qe/2);n>=1;n--)k_(e,f,n);i=l;do{n=wn(e,f,n),r=e.pe[he],e.pe[--e.De]=n,e.pe[--e.De]=r,f[i].U=f[n].U+f[r].U,e.Le[i]=(e.Le[n]>=e.Le[r]?e.Le[n]:e.Le[r])+1,f[n].Ue=f[r].Ue=i,e.pe[he]=i++,k_(e,f,he);}while(e.Qe>=2);e.pe[--e.De]=e.pe[he],An(e,t),Tn(f,t.N,e.Me);}function dt(e,t,n){let r,i,f=-1,_=t[0].Ie,l=0,o=7,u=4;for(0==_&&(o=138,u=3),t[n+1].Ie=65535,r=0;r<=n;r++)i=_,_=t[r+1].Ie,!(++l<o&&i==_)&&(l<u?e.Se[i].U+=l:0!=i?(i!=f&&e.Se[i].U++,e.Se[n_].U++):l<=10?e.Se[r_].U++:e.Se[a_].U++,l=0,f=i,0==_?(o=138,u=3):i==_?(o=6,u=3):(o=7,u=4));}function mt(e,t,n){let r,i=-1,f=t[0].Ie,_=0,l=7,o=4;0==f&&(l=138,o=3);for(let u=0;u<=n;u++)if(r=f,f=t[u+1].Ie,!(++_<l&&r==f)){if(_<o)do{L(e,e.Se[r].Ae,e.Se[r].Ie);}while(0!=--_);else 0!=r?(r!=i&&(L(e,e.Se[r].Ae,e.Se[r].Ie),_--),L(e,e.Se[n_].Ae,e.Se[n_].Ie),L(e,_-3,2)):_<=10?(L(e,e.Se[r_].Ae,e.Se[r_].Ie),L(e,_-3,3)):(L(e,e.Se[a_].Ae,e.Se[a_].Ie),L(e,_-11,7));_=0,i=r,0==f?(l=138,o=3):r==f?(l=6,o=3):(l=7,o=4);}}function Dn(e){let t;for(dt(e,e.B,e.$e.N),dt(e,e.C,e.qe.N),N_(e,e.Te),t=oe-1;t>=3&&0==e.Se[Se[t]].Ie;t--);return e.ie+=3*(t+1)+5+5+4,t}function yn(e,t,n,r){let i;for(L(e,t-257,5),L(e,n-1,5),L(e,r-4,4),i=0;i<r;i++)L(e,e.Se[Se[i]].Ie,3);mt(e,e.B,t-1),mt(e,e.C,n-1);}function Xe(e,t,n,r,i=0){L(e,(it<<1)+r,3),ht(e),De(e,n),De(e,~n),n&&t&&M(e.q,e.T,t,i,n),e.T+=n;}function St(e){st(e);}function Et(e){L(e,v_<<1,3),L(e,Ze[Ie].Ae,Ze[Ie].Ie),st(e);}function bt(e,t,n){let r,i,f,_,l=0;if(0!=e.I)do{r=255&e.Ee[l],r+=(255&e.Ee[l+1])<<8,i=e.Ee[l+2],l+=3,0==r?L(e,t[i].Ae,t[i].Ie):(f=t_[i],L(e,t[f+ie+1].Ae,t[f+ie+1].Ie),_=i_[f],0!=_&&(i-=Te[f],L(e,i,_)),r--,f=w_(r),L(e,n[f].Ae,n[f].Ie),_=o_[f],0!=_&&(r-=ge[f],L(e,r,_)));}while(l<e.I);L(e,t[Ie].Ae,t[Ie].Ie);}function vn(e){let t,n=4093624447;for(t=0;t<=31;t++,n>>=1)if(1&n&&0!=e.B[t].U)return 0;if(0!=e.B[9].U||0!=e.B[10].U||0!=e.B[13].U)return 1;for(t=32;t<ie;t++)if(0!=e.B[t].U)return 1;return 0}function gt(e,t,n,r,i=0){let f,_,l=0;e.be>0?(2==e.o.t&&(e.o.t=vn(e)),N_(e,e.$e),N_(e,e.qe),l=Dn(e),f=e.ie+3+7>>3,_=e.fe+3+7>>3,(_<=f||4==e.ge)&&(f=_)):f=_=n+5,n+4<=f&&t?Xe(e,t,n,r,i):_==f?(L(e,(v_<<1)+r,3),bt(e,Ze,I_)):(L(e,(ot<<1)+r,3),yn(e,e.$e.N+1,e.qe.N+1,l+1),bt(e,e.B,e.C)),xt(e),r&&ht(e);}function Dt(){let e=Je();return e.l=A_(e),e}var We=[{Be:Rt,Ce:0,Xe:0,Fe:0,He:0},{Be:C_,Ce:4,Xe:4,Fe:8,He:4},{Be:C_,Ce:5,Xe:5,Fe:16,He:8},{Be:C_,Ce:6,Xe:16,Fe:32,He:32},{Be:Re,Ce:4,Xe:4,Fe:16,He:16},{Be:Re,Ce:16,Xe:8,Fe:16,He:32},{Be:Re,Ce:16,Xe:16,Fe:32,He:128},{Be:Re,Ce:32,Xe:32,Fe:128,He:256},{Be:Re,Ce:128,Xe:128,Fe:256,He:1024},{Be:Re,Ce:258,Xe:258,Fe:258,He:4096}];function Tt(e){return 2*e-(e>4?9:0)}function u_(e,t,n){return ((t<<e.K^n)&e.J)>>>0}function c_(e,t){e.ke=u_(e,e.ke,e.u[t+(k-1)]);let n=e.V[t&e.O]=e.G[e.ke];return e.G[e.ke]=t,n}function yt(e){e.G[e.R-1]=0,je(e.G,0,(e.R-1)*e.G.BYTES_PER_ELEMENT);}function Cn(e){let t,n,r=e.h;for(t=e.R;t>0;)t--,n=e.G[t],e.G[t]=n>=r?n-r:0;for(t=r;t>0;)t--,n=e.V[t],e.V[t]=n>=r?n-r:0;}function L_(e,t,n,r){let i=e.avail_in;return i>r&&(i=r),0==i?0:(e.avail_in-=i,M(t,n,e.next_in,e.next_in_index,i),1==e.l.H?e.i=se(e.i,new x(t.buffer,t.byteOffset+n,i),i):2==e.l.H&&(e.i=W(e.i,new x(t.buffer,t.byteOffset+n,i),i)),e.next_in_index+=i,e.total_in+=i,i)}function d_(e){let t,n,r=e.h;do{if(n=e.We-e.ce-e.ae,0==n&&0==e.ae&&0==e.ce?n=r:-1==n&&n--,e.ae>=r+ve(e)&&(M(e.u,0,e.u,r,r-n),e.je-=r,e.ae-=r,e.ue-=r,e.le>e.ae&&(e.le=e.ae),Cn(e),n+=r),0==e.o.avail_in)break;if(t=L_(e.o,e.u,e.ae+e.ce,n),e.ce+=t,e.ce+e.le>=k){let t=e.ae-e.le;for(e.ke=e.u[t],e.ke=u_(e,e.ke,e.u[t+1]);e.le&&(e.ke=u_(e,e.ke,e.u[t+k-1]),e.V[t&e.O]=e.G[e.ke],e.G[e.ke]=t,t++,e.le--,!(e.ce+e.le<k)););}}while(e.ce<ae&&0!=e.o.avail_in);if(e.v<e.We){let t,n=e.ae+e.ce;e.v<n?(t=e.We-n,t>Be&&(t=Be),je(e.u,n,t),e.v=n+t):e.v<n+Be&&(t=n+Be-e.v,t>e.We-e.v&&(t=e.We-e.v),je(e.u,e.v,t),e.v+=t);}}function vt(e,t,n=8,r=15,i=He,f=0){let _=1;if(!e)return -2;if(e.msg="",-1==t&&(t=6),r<0){if(_=0,r<-15)return -2;r=-r;}else r>15&&(_=2,r-=16);if(i<1||i>tt||8!=n||r<8||r>15||t<0||t>9||f<0||f>4||8==r&&1!=_)return -2;8==r&&(r=9);let l=A_(e);return l?(e.l=l,l.o=e,l.F=42,l.H=_,l.Y=void 0,l.k=r,l.h=1<<l.k,l.O=l.h-1,l.P=i+7,l.R=1<<l.P,l.J=l.R-1,l.K=(l.P+k-1)/k,l.u=new x(2*l.h),l.V=new E(l.h),l.G=new E(l.R),l.v=0,l.ee=1<<i+6,l.q=new x(l.ee*at),l.ne=4*l.ee,l.u&&l.V&&l.G&&l.q?(l.Ee=l.q.subarray(l.ee),l.A=l.te+l.ee,l.X=3*(l.ee-1),l.be=t,l.ge=f,l.Ne=n,Hn(e)):(l.F=666,e.msg=T_(-4),F_(e),-4)):-4}function B_(e){if(null==e)return true;let t=e.l;return !t||t.o!=e||42!=t.F&&57!=t.F&&69!=t.F&&73!=t.F&&91!=t.F&&103!=t.F&&113!=t.F&&666!=t.F}function Ln(e){let t;return B_(e)?-2:(e.total_in=e.total_out=0,e.msg="",e.t=2,t=e.l,t.T=0,t.re=t.te,t.H<0&&(t.H=-t.H),t.F=2==t.H?57:42,e.i=2==t.H?W(0):se(0),t.oe=-2,pt(t),0)}function On(e){e.We=2*e.h,yt(e),e.ye=We[e.be].Ce,e.ve=We[e.be].Xe,e.me=We[e.be].Fe,e.xe=We[e.be].He,e.ae=0,e.ue=0,e.ce=0,e.le=0,e.se=e.de=k-1,e.we=0,e.ke=0;}function Hn(e){let t=Ln(e);return 0==t&&On(e.l),t}function Ye(e,t){g(e,t>>8),g(e,255&t);}function q(e){let t,n=e.l;St(n),t=n.T,t>e.avail_out&&(t=e.avail_out),0!=t&&(M(e.next_out,e.next_out_index,n.q,n.re,t),e.next_out_index+=t,n.re+=t,e.total_out+=t,e.avail_out-=t,n.T-=t,0==n.T&&(n.re=n.te));}function ke(e,t){let n=e.l;n.Y&&n.Y.Ye&&(e.i=W(e.i,new x(n.q.buffer,n.te+t,n.T-t),n.T-t));}function It(e,t){let n,r=e.l;if(B_(e)||t>5||t<0)return Ae(e,-2);if(!e.next_out||0!=e.avail_in&&!e.next_in||666==r.F&&4!=t)return Ae(e,-2);if(0==e.avail_out)return Ae(e,-5);if(n=r.oe,r.oe=t,0!=r.T){if(q(e),0==e.avail_out)return r.oe=$,0}else if(0==e.avail_in&&Tt(t)<=Tt(n)&&4!=t)return Ae(e,-5);if(666==r.F&&0!=e.avail_in)return Ae(e,-5);if(42==r.F&&0==r.H&&(r.F=113),42==r.F){let t,n=8+(r.k-8<<4)<<8;if(t=r.ge>=2||r.be<2?0:r.be<6?1:6==r.be?2:3,n|=t<<6,0!=r.ae&&(n|=rt),n+=31-n%31,Ye(r,n),0!=r.ae&&(Ye(r,e.i>>16),Ye(r,65535&e.i)),e.i=1,r.F=113,q(e),0!=r.T)return r.oe=$,0}if(57==r.F)if(e.i=W(0),g(r,31),g(r,139),g(r,8),r.Y)g(r,(r.Y.Oe?1:0)+(r.Y.Ye?2:0)+(null==r.Y.Pe?0:4)+(null==r.Y.Re?0:8)+(null==r.Y.Je?0:16)),g(r,255&r.Y.Ke),g(r,r.Y.Ke>>>8&255),g(r,r.Y.Ke>>>16&255),g(r,r.Y.Ke>>>24&255),g(r,9==r.be?2:r.ge>=2||r.be<2?4:0),g(r,255&r.Y.Ve),null!=r.Y.Pe&&(g(r,255&r.Y.Ge),g(r,r.Y.Ge>>>8&255)),r.Y.Ye&&(e.i=W(e.i,r.q,r.T)),r.Ze=0,r.F=69;else if(g(r,0),g(r,0),g(r,0),g(r,0),g(r,0),g(r,9==r.be?2:r.ge>=2||r.be<2?4:0),g(r,nt),r.F=113,q(e),0!=r.T)return r.oe=$,0;if(69==r.F){if(r.Y&&null!=r.Y.Pe){let t=r.T,n=(65535&r.Y.Ge)-r.Ze;for(;r.T+n>r.ne;){let i=r.ne-r.T;if(M(r.q,r.T,r.Y.Pe,r.Ze,i),r.T=r.ne,ke(e,t),r.Ze+=i,q(e),0!=r.T)return r.oe=$,0;t=0,n-=i;}M(r.q,r.T,r.Y.Pe,r.Ze,n),r.T+=n,ke(e,t),r.Ze=0;}r.F=73;}if(73==r.F){if(r.Y&&r.Y.Re&&r.Y.Re.length){let t,n=r.T;do{if(r.T==r.ne){if(ke(e,n),q(e),0!=r.T)return r.oe=$,0;n=0;}t=r.Y.Re[r.Ze++],g(r,t);}while(0!=t);ke(e,n),r.Ze=0;}r.F=91;}if(91==r.F){if(r.Y&&r.Y.Je&&r.Y.Je.length){let t,n=r.T;do{if(r.T==r.ne){if(ke(e,n),q(e),0!=r.T)return r.oe=$,0;n=0;}t=r.Y.Je[r.Ze++],g(r,t);}while(0!=t);ke(e,n);}r.F=103;}if(103==r.F){if(r.Y&&r.Y.Ye){if(r.T+2>r.ne&&(q(e),0!=r.T))return r.oe=$,0;g(r,255&e.i),g(r,e.i>>>8&255),e.i=W(0);}if(r.F=113,q(e),0!=r.T)return r.oe=$,0}if(0!=e.avail_in||0!=r.ce||0!=t&&666!=r.F){let n=0==r.be?Rt(r,t):2==r.ge?Bn(r,t):3==r.ge?Un(r,t):We[r.be].Be(r,t);if((2==n||3==n)&&(r.F=666),0==n||2==n)return 0==e.avail_out&&(r.oe=$),0;if(1==n&&(1==t?Et(r):5!=t&&(Xe(r,null,0,0),3==t&&(yt(r),0==r.ce&&(r.ae=0,r.ue=0,r.le=0))),q(e),0==e.avail_out))return r.oe=$,0}return 4!=t?0:r.H<=0?1:(2==r.H?(g(r,255&e.i),g(r,e.i>>>8&255),g(r,e.i>>>16&255),g(r,e.i>>>24&255),g(r,255&e.total_in),g(r,e.total_in>>>8&255),g(r,e.total_in>>>16&255),g(r,e.total_in>>>24&255)):(Ye(r,e.i>>>16&65535),Ye(r,65535&e.i)),q(e),r.H>0&&(r.H=-r.H),0!=r.T?0:1)}function F_(e){if(B_(e))return -2;let t=e.l,n=t.F;return t.u=Z,t.V=Ve,t.G=Ve,t.q=Z,t.Ee=Z,t.pe=new H(0),t.Le=Z,t.Me=Ve,t.B.length=0,t.C.length=0,t.Se.length=0,t.Y=void 0,t.te=0,t.re=0,t.A=0,113==n?-3:0}function kt(e,t){let n,r,i=e.xe,f=e.ae,_=e.de,l=e.me,o=e.ae>ve(e)?e.ae-ve(e):0,u=e.V,a=e.O,c=e.u[f],s=e.u[f+1],d=e.u[f+_-1],h=e.u[f+_];e.de>=e.ve&&(i>>=2),l>e.ce&&(l=e.ce);do{if(n=t,e.u[n+_]!=h||e.u[n+_-1]!=d||e.u[n]!=c||e.u[n+1]!=s)continue;let i=N.min(_e,e.ce),o=2;for(;o<i&&e.u[f+o]==e.u[n+o];)o++;if(r=o,r>_){if(e.je=t,_=r,r>=l)break;d=e.u[f+_-1],h=e.u[f+_];}}while((t=u[t&a])>o&&0!=--i);return _<=e.ce?_:e.ce}function Nt(e,t){gt(e,e.u,e.ae-e.ue,t,e.ue),e.ue=e.ae,q(e.o);}function j(e,t){return Nt(e,t?1:0),0==e.o.avail_out?t?2:0:null}var wt=65535;function Ne(e,t){return e<t?e:t}function Rt(e,t){let n,r,i,f=Ne(e.ne-5,e.h),_=0,l=e.o.avail_in;do{if(n=wt,i=e.L+42>>3,e.o.avail_out<i||(i=e.o.avail_out-i,r=e.ae-e.ue,n>r+e.o.avail_in&&(n=r+e.o.avail_in),n>i&&(n=i),n<f&&(0==n&&4!=t||0==t||n!=r+e.o.avail_in)))break;_=4==t&&n==r+e.o.avail_in?1:0,Xe(e,null,0,_),e.q[e.T-4]=n,e.q[e.T-3]=n>>8,e.q[e.T-2]=~n,e.q[e.T-1]=~n>>8,q(e.o),r&&(r>n&&(r=n),M(e.o.next_out,e.o.next_out_index,e.u,e.ue,r),e.o.next_out_index+=r,e.o.avail_out-=r,e.o.total_out+=r,e.ue+=r,n-=r),n&&(L_(e.o,e.o.next_out,e.o.next_out_index,n),e.o.next_out_index+=n,e.o.avail_out-=n,e.o.total_out+=n);}while(0==_);if(l-=e.o.avail_in,l){if(l>=e.h){e._e=2;let t=e.o.next_in_index-e.h;M(e.u,0,e.o.next_in,t,e.h),e.ae=e.h,e.le=e.ae;}else e.We-e.ae<=l&&(e.ae-=e.h,M(e.u,0,e.u,e.h,e.ae),e._e<2&&e._e++,e.le>e.ae&&(e.le=e.ae)),M(e.u,e.ae,e.o.next_in,e.o.next_in_index-l,l),e.ae+=l,e.le+=Ne(l,e.h-e.le);e.ue=e.ae;}return e.v<e.ae&&(e.v=e.ae),_?(e.ze=8,3):0!=t&&4!=t&&0==e.o.avail_in&&e.ae==e.ue?1:(i=e.We-e.ae,e.o.avail_in>i&&e.ue>=e.h&&(e.ue-=e.h,e.ae-=e.h,M(e.u,0,e.u,e.h,e.ae),e._e<2&&e._e++,i+=e.h,e.le>e.ae&&(e.le=e.ae)),i>e.o.avail_in&&(i=e.o.avail_in),i&&(L_(e.o,e.u,e.ae,i),e.ae+=i,e.le+=Ne(i,e.h-e.le)),e.v<e.ae&&(e.v=e.ae),i=e.L+42>>3,i=Ne(e.ne-i,wt),f=Ne(i,e.h),r=e.ae-e.ue,(r>=f||(r||4==t)&&0!=t&&0==e.o.avail_in&&r<=i)&&(n=Ne(r,i),_=4==t&&0==e.o.avail_in&&n==r?1:0,Xe(e,e.u,n,_,e.ue),e.ue+=n,q(e.o)),_&&(e.ze=8),_?2:0)}function C_(e,t){let n,r=false;for(;;){if(e.ce<ae){if(d_(e),e.ce<ae&&0==t)return 0;if(0==e.ce)break}if(n=0,e.ce>=k&&(n=c_(e,e.ae)),0!=n&&e.ae-n<=ve(e)&&(e.se=kt(e,n)),e.se>=k)if(e.ae,e.je,e.se,r=__(e,e.ae-e.je,e.se-k),e.ce-=e.se,e.se<=e.ye&&e.ce>=k){e.se--;do{e.ae++,n=c_(e,e.ae);}while(0!=--e.se);e.ae++;}else e.ae+=e.se,e.se=0,e.ke=e.u[e.ae],e.ke=u_(e,e.ke,e.u[e.ae+1]);else r=ye(e,e.u[e.ae]),e.ce--,e.ae++;if(r){let t=j(e,false);if(null!=t)return t}}if(e.le=e.ae<k-1?e.ae:k-1,4==t){return j(e,true)??3}if(e.I){let t=j(e,false);if(null!=t)return t}return 1}function Re(e,t){let n,r=false;for(;;){if(e.ce<ae){if(d_(e),e.ce<ae&&0==t)return 0;if(0==e.ce)break}if(n=0,e.ce>=k&&(n=c_(e,e.ae)),e.de=e.se,e.he=e.je,e.se=k-1,0!=n&&e.de<e.ye&&e.ae-n<=ve(e)&&(e.se=kt(e,n),e.se<=5&&1==e.ge&&(e.se=k-1)),e.de>=k&&e.se<=e.de){let t=e.ae+e.ce-k;e.ae,e.he,e.de,r=__(e,e.ae-1-e.he,e.de-k),e.ce-=e.de-1,e.de-=2;do{++e.ae<=t&&(n=c_(e,e.ae));}while(0!=--e.de);if(e.we=0,e.se=k-1,e.ae++,r){let t=j(e,false);if(null!=t)return t}}else if(e.we){if(r=ye(e,e.u[e.ae-1]),r&&Nt(e,0),e.ae++,e.ce--,0==e.o.avail_out)return 0}else e.we=1,e.ae++,e.ce--;}if(e.we&&(r=ye(e,e.u[e.ae-1]),e.we=0),e.le=e.ae<k-1?e.ae:k-1,4==t){return j(e,true)??3}if(e.I){let t=j(e,false);if(null!=t)return t}return 1}function Un(e,t){let n,r,i,f;for(;;){if(e.ce<=_e){if(d_(e),e.ce<=_e&&0==t)return 0;if(0==e.ce)break}if(e.se=0,e.ce>=k&&e.ae>0&&(i=e.ae-1,r=e.u[i],r==++i&&r==++i&&r==++i)){f=e.ae+_e;do{}while(r==++i&&r==++i&&r==++i&&r==++i&&r==++i&&r==++i&&r==++i&&r==++i&&i<f);e.se=_e-(f-i),e.se>e.ce&&(e.se=e.ce);}if(e.se>=k?(e.ae,e.ae,e.se,n=__(e,1,e.se-k),e.ce-=e.se,e.ae+=e.se,e.se=0):(n=ye(e,e.u[e.ae]),e.ce--,e.ae++),n){let t=j(e,false);if(null!=t)return t}}if(e.le=0,4==t){return j(e,true)??3}if(e.I){let t=j(e,false);if(null!=t)return t}return 1}function Bn(e,t){let n=false;for(;;){if(0==e.ce&&(d_(e),0==e.ce)){if(0==t)return 0;break}if(e.se=0,n=ye(e,e.u[e.ae]),e.ce--,e.ae++,n){let t=j(e,false);if(null!=t)return t}}if(e.le=0,4==t){return j(e,true)??3}if(e.I){let t=j(e,false);if(null!=t)return t}return 1}var ue=852,m_=592,b_=594,zt=ge.map(e=>e+1),Ct=Te.subarray(0,-1).map(e=>e+3),Fn=[16,1,73,1,200,1],Zn=[144,1,72,1,78,1],Lt=Ee.map(Gt),Ot=Ee.map(Kt);Lt.push(64,2),Ot.push(142,2);var Ht=de.slice(0,-2).map(Gt),Ut=de.slice(0,-2).map(Kt);Ht.push(...Fn),Ut.push(...Zn);var Bt=new E([...Ct,258,0,0]),Ft=new E([...Ct,3,0,0]),Zt=te(Ht),Pt=te(Ut),Mt=new E([...zt,0,0]),Xt=new E([...zt,32769,49153]),Yt=te(Lt),Wt=te(Ot);function Gt(e,t){return t%2?e:e+16}function Kt(e,t){return t%2?e:e+128}function Vt(e,t){let n,r=e.l,i=e.next_in_index,f=e.next_out_index,_=e.next_in,l=e.next_out,o=r.u,u=r.p>>>0,a=r.L>>>0,c=r.et,s=r.tt,d=(1<<r.nt)-1,h=(1<<r.rt)-1,w=r.h>>>0,k=r.v>>>0,b=r.m>>>0,g=r.it,v=f-(t-e.avail_out),m=f+(e.avail_out-257),x=i+(e.avail_in-5),y=0,p=0,L=0,M=0;e:do{for(;a<15;){if(!(i<_.length))break e;u+=_[i++]<<a,a+=8;}n=c[u&d];t:for(;;){if(L=n.ft,u>>>=L,a-=L,L=n._t,0==L){l[f++]=n.lt;break}if(16&L){if(y=n.lt,L&=15,L){for(;a<L;){if(!(i<_.length)){r.ot=16200;break e}u+=_[i++]<<a,a+=8;}y+=u&(1<<L)-1,u>>>=L,a-=L;}for(;a<15;){if(!(i<_.length)){r.ot=16200;break e}u+=_[i++]<<a,a+=8;}n=s[u&h];n:for(;;){if(L=n.ft,u>>>=L,a-=L,L=n._t,16&L){if(p=n.lt,L&=15,L){for(;a<L;){if(!(i<_.length)){r.ot=16200;break e}u+=_[i++]<<a,a+=8;}p+=u&(1<<L)-1,u>>>=L,a-=L;}let t=y,c=f-v;if(p>c){let n=p-c;if(n>k&&g){e.msg="invalid distance too far back",r.ot=16209;break e}if(0==b){if(M=w-n,!(n<t)){for(let e=0;e<t;++e)l[f++]=o[M++];continue e}for(let e=0;e<n;++e)l[f++]=o[M++];t-=n,M=f-p;}else if(b<n){M=w+b-n;let e=n-b;if(!(e<t)){for(let e=0;e<t;++e)l[f++]=o[M++];continue e}for(let t=0;t<e;++t)l[f++]=o[M++];if(t-=e,M=0,b<t){for(let e=0;e<b;++e)l[f++]=o[M++];t-=b,M=f-p;}}else {if(M=b-n,!(n<t)){for(let e=0;e<t;++e)l[f++]=o[M++];continue e}for(let e=0;e<n;++e)l[f++]=o[M++];t-=n,M=f-p;}for(;t>2;)l[f++]=l[M++],l[f++]=l[M++],l[f++]=l[M++],t-=3;t&&(l[f++]=l[M++],t>1&&(l[f++]=l[M++]));}else {for(M=f-p;t>2;)l[f++]=l[M++],l[f++]=l[M++],l[f++]=l[M++],t-=3;t&&(l[f++]=l[M++],t>1&&(l[f++]=l[M++]));}break}if(64&L){e.msg="invalid distance code",r.ot=16209;break e}n=s[n.lt+(u&(1<<L)-1)];continue n}break}if(64&L){if(32&L){r.ot=16191;break e}e.msg="invalid literal/length code",r.ot=16209;break e}n=c[n.lt+(u&(1<<L)-1)];continue t}}while(i<x&&f<m);let E=a>>3;i-=E,a-=E<<3,u&=(1<<a)-1,e.next_in_index=i,e.next_out_index=f,e.avail_in=i<x?x-i+5:5-(i-x),e.avail_out=f<m?m-f+257:257-(f-m),r.p=u>>>0,r.L=a>>>0;}function Z_(e,t){let n=[],r=t?ue+b_:ue+m_;return {...Qe(e,0),o:e,ot:16180,ut:false,H:0,ct:false,st:0,dt:0,ht:0,wt:0,u:Z,kt:0,bt:0,Pe:0,et:n,tt:n,nt:0,rt:0,gt:0,vt:0,xt:0,yt:0,Lt:n,Mt:new E(320),Et:new E(288),zt:new v(r).fill(null).map(()=>pe()),Zt:0,it:true,Nt:0,Wt:0,jt:t}}function pe(e=0,t=0,n=0){return {_t:e,ft:t,lt:n}}function P_(e=1){return {_t:64,ft:e,lt:0}}function jt(e=0){return {_t:96,ft:e,lt:0}}function M_(e){return (255&e)<<24|(e>>8&255)<<16|(e>>16&255)<<8|e>>24&255}var Le=15,Mn={jt:false,Qt:Bt,Dt:Zt,St:Mt,$t:Yt,qt:20,Tt:257,At:0,It:m_,Ut:false,Bt:true},Xn={jt:true,Qt:Ft,Dt:Pt,St:Xt,$t:Wt,qt:19,Tt:256,At:-1,It:b_,Ut:true,Bt:false};function Oe(e,t,n,r,i,f,_,l){let o,u,a,c,s,d,h,w,k,b,g,v,m,x,y,p,L,M,z,Z=new E(Le+1),N=new E(Le+1),W=l?Xn:Mn;for(o=0;o<=Le;o++)Z[o]=0;for(u=0;u<n;u++)Z[t[u]]++;for(s=i.Ct,c=Le;c>=1&&0==Z[c];c--);if(s>c&&(s=c),0==c)return W.Bt?(y=P_(1),r.Ct[0]=y,r.Ct[1]=y,i.Ct=1,0):-1;for(a=1;a<c&&0==Z[a];a++);for(s<a&&(s=a),w=1,o=1;o<=Le;o++)if(w<<=1,w-=Z[o],w<0)return -1;if(w>0&&(0==e||1!=c))return -1;for(N[1]=0,o=1;o<Le;o++)N[o+1]=N[o]+Z[o];for(u=0;u<n;u++)0!=t[u]&&(f[N[t[u]]++]=u);switch(e){case 0:L=M=f,z=W.qt;break;case 1:L=W.Qt,M=W.Dt,z=W.Tt;break;default:L=W.St,M=W.$t,z=W.At;}if(b=0,u=0,o=a,p=_.Ct,d=s,h=0,m=-1,k=1<<s,x=k-1,1==e&&(W.Ut?k>=ue:k>ue)||2==e&&(W.Ut?k>=W.It:k>W.It))return 1;for(;;){y=Yn(f,u,o,h,e,L,M,z,W.jt),g=1<<o-h,v=1<<d,a=v;do{v-=g;let e=(b>>h)+v;r.Ct[p+e]={...y};}while(0!=v);for(g=1<<o-1;b&g;)g>>=1;if(0!=g?(b&=g-1,b+=g):b=0,u++,0==--Z[o]){if(o==c)break;o=t[f[u]];}if(o>s&&(b&x)!=m){for(0==h&&(h=s),p+=1<<d,d=o-h,w=1<<d;d+h<c&&(w-=Z[d+h],!(w<=0));)d++,w<<=1;if(k+=1<<d,1==e&&(W.Ut?k>=ue:k>ue)||2==e&&(W.Ut?k>=W.It:k>W.It))return 1;m=b&x,r.Ct[_.Ct+m]={_t:d,ft:s,lt:p-_.Ct};}}if(0!=b)for(y=P_(o-h);0!=b;){for(0!=h&&(b&x)!=m&&(h=0,o=s,p=_.Ct,d=s,y.ft=o),r.Ct[p+(b>>h)]={...y},g=1<<o-1;b&g;)g>>=1;0!=g?(b&=g-1,b+=g):b=0;}return _.Ct+=k,i.Ct=s,0}function Yn(e,t,n,r,i,f,_,l,o){let u;if(o?e[t]<l:e[t]+1<l)u=pe(0,n-r,e[t]);else if(o?e[t]>l:e[t]>=l)if(o&&1==i){let i=e[t]-257;u=pe(_[i],n-r,f[i]);}else {let i=o?e[t]:e[t]-l;u=pe(_[i],n-r,f[i]);}else u=jt(n-r);return u}var Vn={Xt:true,Ft:new v(544),Ht:[],Yt:[]},jn={Xt:true,Ft:new v(544),Ht:[],Yt:[]};function Jt(e){let t=Je();return t.l=Z_(t,!!e),t}function Ke(e){let t;return !(e&&(t=e.l,!(!t||t.o!=e||t.jt&&(t.ot<16191||t.ot>16209)||!t.jt&&(t.ot<16180||t.ot>16211))))}function Jn(e){let t;return Ke(e)?-2:(t=e.l,e.total_in=e.total_out=t.wt=0,e.msg="",t.H&&(e.i=1&t.H),t.ot=t.jt?16191:16180,t.ut=false,t.ct=false,t.st=-1,t.dt=t.jt?65536:32768,delete t.Y,t.p=0,t.L=0,t.et=t.zt,t.tt=t.zt,t.Lt=t.zt,t.it=true,t.Nt=-1,0)}function Qn(e){let t;return Ke(e)?-2:(t=e.l,t.h=0,t.v=0,t.m=0,Jn(e))}function $n(e,t){let n,r,i;if(Ke(e))return -2;if(r=e.l,r.jt?(t=-16,i=16):i=15,t<0){if(t<-i)return -2;n=0,t=-t;}else n=5+(t>>4),!r.jt&&t<48&&(t&=15);return t&&(t<8||t>i)?-2:(r.u.length>0&&r.k!=t&&(r.u=Z),r.H=n,r.k=t,Qn(e))}function Qt(e,t){let n,r;if(!e)return -2;e.msg="";let i=!!e.l.jt;return r=Z_(e,i),i&&(t=-16),e.l=r,r.o=e,r.ot=r.jt?16191:16180,n=$n(e,t),n}function er(e){let t=e.jt?jn:Vn,n={Ct:0};if(t.Xt){let r,i,f;for(r=0;r<144;)e.Mt[r++]=8;for(;r<256;)e.Mt[r++]=9;for(;r<280;)e.Mt[r++]=7;for(;r<288;)e.Mt[r++]=8;for(let e=0;e<544;e++)t.Ft[e]=pe();f=t.Ft,t.Ht=f,i=9;let _={Ct:f},l={Ct:i},o={Ct:0};for(Oe(1,e.Mt,288,_,l,e.Et,o,e.jt),f=_.Ct,i=l.Ct,e.Zt=o.Ct,r=0;r<32;)e.Mt[r++]=5;i=5;let u=o.Ct,a={Ct:f},c={Ct:i};n.Ct=u,Oe(2,e.Mt,32,a,c,e.Et,n,e.jt),t.Yt=f.slice(u),t.Xt=false;}e.et=t.Ht,e.nt=9,e.tt=t.Yt,e.rt=5,e.Zt=n.Ct;}function _r(e,t,n){let r=e.l;if(!(r.u&&0!=r.u.length||(r.u=new x(1<<r.k),r.u)))return 1;if(0==r.h&&(r.h=1<<r.k,r.m=0,r.v=0),n>=r.h)M(r.u,0,t,t.length-r.h,r.h),r.m=0,r.v=r.h;else {let e=r.h-r.m;e>n&&(e=n),M(r.u,r.m,t,t.length-n,e),(n-=e)?(M(r.u,0,t,t.length-n,n),r.m=n,r.v=r.h):(r.m+=e,r.m==r.h&&(r.m=0),r.v<r.h&&(r.v+=e));}return 0}var h_=class extends z{constructor(){super("Need more input");}};function $t(e,t){let n,r,i,f,_,l,o,u,a,c,s,d,h,w,k,b,g,v=new x(4);if(Ke(e)||!e.next_out||!e.next_in&&0!=e.avail_in)return -2;l=0,u=0,o=0,a=0,r=Z,i=0,f=Z,_=0,n=e.l,16191==n.ot&&(n.ot=16192),E(),c=l,s=o,g=0;try{for(;;)switch(n.ot){case 16180:if(0==n.H){n.ot=16192;break}if(Q(16),2&n.H&&35615==u){0==n.k&&(n.k=15),n.ht=W(0),n.ht=p(n.ht,u),N(),n.ot=16181;break}if(n.Y&&(n.Y.Ot=-1),!(1&n.H)||((D(8)<<8)+(u>>8))%31){e.msg="incorrect header check",n.ot=16209;break}if(8!=D(4)){e.msg="unknown compression method",n.ot=16209;break}if(S(4),b=D(4)+8,0==n.k&&(n.k=b),b>15||b>n.k){e.msg="invalid window size",n.ot=16209;break}n.dt=1<<b,n.st=0,e.i=n.ht=se(0),n.ot=512&u?16189:16191,N();break;case 16181:if(Q(16),n.st=u,8!=(255&n.st)){e.msg="unknown compression method",n.ot=16209;break}if(57344&n.st){e.msg="unknown header flags set",n.ot=16209;break}n.Y&&(n.Y.Oe=u>>8&1),512&n.st&&4&n.H&&(n.ht=p(n.ht,u)),N(),n.ot=16182;case 16182:Q(32),n.Y&&(n.Y.Ke=u),512&n.st&&4&n.H&&(n.ht=L(n.ht,u)),N(),n.ot=16183;case 16183:Q(16),n.Y&&(n.Y.Pt=255&u,n.Y.Ve=u>>8),512&n.st&&4&n.H&&(n.ht=p(n.ht,u)),N(),n.ot=16184;case 16184:1024&n.st?(Q(16),n.kt=u,n.Y&&(n.Y.Ge=u),512&n.st&&4&n.H&&(n.ht=p(n.ht,u)),N()):n.Y&&(n.Y.Pe=Z),n.ot=16185;case 16185:if(1024&n.st&&(d=n.kt,d>l&&(d=l),d&&(n.Y&&n.Y.Pe&&n.Y.Rt&&(b=n.Y.Ge-n.kt)<n.Y.Rt&&M(n.Y.Pe,b,r,i,d),512&n.st&&4&n.H&&(n.ht=W(n.ht,r.subarray(i,i+d),d)),l-=d,i+=d,n.kt-=d),n.kt))return m();n.kt=0,n.ot=16186;case 16186:if(2048&n.st){if(0==l)return m();d=0;do{b=r[i+d++],n.Y&&n.Y.Jt&&n.kt<n.Y.Jt&&(n.Y.Re[n.kt++]=b);}while(b&&d<l);if(512&n.st&&4&n.H&&(n.ht=W(n.ht,r.subarray(i,i+d),d)),l-=d,i+=d,b)return m()}else n.Y&&(n.Y.Re=Z);n.kt=0,n.ot=16187;case 16187:if(4096&n.st){if(0==l)return m();d=0;do{b=r[i+d++],n.Y&&n.Y.Kt&&n.kt<n.Y.Kt&&(n.Y.Je[n.kt++]=b);}while(b&&d<l);if(512&n.st&&4&n.H&&(n.ht=W(n.ht,r.subarray(i,i+d),d)),l-=d,i+=d,b)return m()}else n.Y&&(n.Y.Je=Z);n.ot=16188;case 16188:if(512&n.st){if(Q(16),4&n.H&&u!=(65535&n.ht)){e.msg="header crc mismatch",n.ot=16209;break}N();}n.Y&&(n.Y.Ye=n.st>>9&1,n.Y.Ot=1),e.i=n.ht=W(0),n.ot=16191;break;case 16189:Q(32),e.i=n.ht=M_(u),N(),n.ot=16190;case 16190:if(!n.ct)return z(),2;e.i=n.ht=se(0),n.ot=16191;case 16191:if(5==t||6==t)return m();case 16192:if(n.ut){$(),n.ot=16206;break}switch(Q(3),n.ut=!!D(1),S(1),D(2)){case 0:n.ot=16193;break;case 1:if(er(n),n.ot=16199,6==t)return S(2),m();break;case 2:n.ot=16196;break;case 3:e.msg="invalid block type",n.ot=16209;}S(2);break;case 16193:if($(),Q(32),(65535&u)!=(u>>>16^65535)){e.msg="invalid stored block lengths",n.ot=16209;break}if(n.kt=65535&u,N(),n.ot=16194,6==t)return m();case 16194:n.ot=16195;case 16195:if(d=n.kt,d){if(d>l&&(d=l),d>o&&(d=o),0==d)return m();M(f,_,r,i,d),l-=d,i+=d,o-=d,_+=d,n.kt-=d;break}n.ot=16191;break;case 16196:if(Q(14),n.vt=D(5)+257,S(5),n.xt=D(5)+1,S(5),n.gt=D(4)+4,S(4),n.vt>286||!n.jt&&n.xt>30){e.msg=n.jt?"too many length":"too many length or distance symbols",n.ot=16209;break}n.yt=0,n.ot=16197;case 16197:for(;n.yt<n.gt;)Q(3),n.Mt[Se[n.yt++]]=D(3),S(3);for(;n.yt<19;)n.Mt[Se[n.yt++]]=0;n.Lt=n.zt,n.et=n.tt=n.Lt,n.nt=7;let c={Ct:n.Lt},v={Ct:n.nt},x={Ct:0};if(g=Oe(0,n.Mt,19,c,v,n.Et,x,n.jt),n.Lt=c.Ct,n.nt=v.Ct,g){e.msg="invalid code lengths set",n.ot=16209;break}n.yt=0,n.ot=16198;case 16198:for(;n.yt<n.vt+n.xt;){for(;w=n.et[D(n.nt)],!(w.ft<=a);)j();if(w.lt<16)S(w.ft),n.Mt[n.yt++]=w.lt;else {if(16==w.lt){if(Q(w.ft+2),S(w.ft),0==n.yt){e.msg="invalid bit length repeat",n.ot=16209;break}b=n.Mt[n.yt-1],d=3+D(2),S(2);}else 17==w.lt?(Q(w.ft+3),S(w.ft),b=0,d=3+D(3),S(3)):(Q(w.ft+7),S(w.ft),b=0,d=11+D(7),S(7));if(n.yt+d>n.vt+n.xt){e.msg="invalid bit length repeat",n.ot=16209;break}for(;d--;)n.Mt[n.yt++]=b;}}if(16209==n.ot)break;if(0==n.Mt[256]){e.msg="invalid code -- missing end-of-block",n.ot=16209;break}n.Lt=n.zt,n.nt=9;let q={Ct:n.Lt},T={Ct:n.nt},A={Ct:0};g=Oe(1,n.Mt,n.vt,q,T,n.Et,A,n.jt),n.Lt=q.Ct,n.nt=T.Ct;let I=A.Ct;if(n.et=n.Lt.slice(0,I),g){e.msg="invalid literal/lengths set",n.ot=16209;break}n.rt=6;let U=n.Mt.subarray(n.vt,n.vt+n.xt),B={Ct:n.Lt},C={Ct:n.rt},X={Ct:I};if(g=Oe(2,U,n.xt,B,C,n.Et,X,n.jt),n.Lt=B.Ct,n.rt=C.Ct,n.tt=n.Lt.slice(I),g){e.msg="invalid distances set",n.ot=16209;break}if(n.ot=16199,6==t)return m();case 16199:n.ot=16200;case 16200:if(!n.jt&&l>=6&&o>=258){z(),Vt(e,s),E(),16191==n.ot&&(n.Nt=-1);break}for(n.Nt=0;w=n.et[D(n.nt)],!(w.ft<=a);)j();if(w._t&&!(240&w._t)){for(k=w;w=n.et[k.lt+(D(k.ft+k._t)>>k.ft)],!(k.ft+w.ft<=a);)j();S(k.ft),n.Nt+=k.ft;}if(S(w.ft),n.Nt+=w.ft,n.kt=w.lt,0==w._t){n.ot=16205;break}if(32&w._t){n.Nt=-1,n.ot=16191;break}if(64&w._t){e.msg="invalid literal/length code",n.ot=16209;break}n.Pe=w._t&(n.jt?31:15),n.ot=16201;case 16201:n.Pe&&(Q(n.Pe),n.kt+=D(n.Pe),S(n.Pe),n.Nt+=n.Pe),n.Wt=n.kt,n.ot=16202;case 16202:for(;w=n.tt[D(n.rt)],!(w.ft<=a);)j();if(!(240&w._t)){for(k=w;w=n.tt[k.lt+(D(k.ft+k._t)>>k.ft)],!(k.ft+w.ft<=a);)j();S(k.ft),n.Nt+=k.ft;}if(S(w.ft),n.Nt+=w.ft,64&w._t){e.msg="invalid distance code",n.ot=16209;break}n.bt=w.lt,n.Pe=15&w._t,n.ot=16203;case 16203:n.Pe&&(Q(n.Pe),n.bt+=D(n.Pe),S(n.Pe),n.Nt+=n.Pe),n.ot=16204;case 16204:if(0==o)return m();if(d=s-o,n.bt>d){if(d=n.bt-d,d>n.v&&n.it){e.msg="invalid distance too far back",n.ot=16209;break}d>n.m?(d-=n.m,h=n.h-d):h=n.m-d,d>n.kt&&(d=n.kt),d>o&&(d=o);for(let e=0;e<d;++e)f[_]=255&n.u[h],++_,++h;}else {h=_-n.bt,d=n.kt,d>o&&(d=o);for(let e=0;e<d;++e)f[_]=f[h],++_,++h;}d>o&&(d=o),o-=d,n.kt-=d,0==n.kt&&(n.ot=16200);break;case 16205:if(0==o)return m();f[_++]=n.kt,o--,n.ot=16200;break;case 16206:if(n.H){if(Q(32),s-=o,e.total_out+=s,n.wt+=s,4&n.H&&s){let t=f.subarray(_-s,_);e.i=n.ht=y(n.ht,t,s);}if(s=o,4&n.H&&(n.st?u:M_(u)>>>0)!=n.ht){e.msg="incorrect data check",n.ot=16209;break}N();}n.ot=16207;case 16207:if(n.H&&n.st){if(Q(32),4&n.H&&u!=(4294967295&n.wt)){e.msg="incorrect length check",n.ot=16209;break}N();}n.ot=16208;case 16208:return g=1,m();case 16209:return g=-3,m();case 16210:return -4;default:return -2}}catch(e){if(e instanceof h_)return m();throw e}function m(){if(z(),n.h||s!=e.avail_out&&n.ot<16209&&(n.jt?n.ot<16208:n.ot<16206)||4!=t){let t=s-e.avail_out;if(_r(e,e.next_out.subarray(e.next_out_index-t,e.next_out_index),t))return n.ot=16210,-4}return c-=e.avail_in,s-=e.avail_out,e.total_in+=c,e.total_out+=s,n.wt+=s,4&n.H&&s&&(e.i=n.ht=y(n.ht,e.next_out.subarray(e.next_out_index-s,e.next_out_index),s)),e.t=n.L+(n.ut?64:0)+(16191==n.ot?128:0)+(16199==n.ot||16194==n.ot?256:0),(0==c&&0==s&&0==g||4==t&&0==g)&&(g=-5),g}function y(e,t,r){return n.st?W(e,t,r):se(e,t,r)}function p(e,t){return v[0]=255&t,v[1]=t>>>8&255,W(e,v,2)>>>0}function L(e,t){return v[0]=255&t,v[1]=t>>>8&255,v[2]=t>>>16&255,v[3]=t>>>24&255,W(e,v,4)>>>0}function E(){f=e.next_out,_=e.next_out_index,o=e.avail_out,r=e.next_in,i=e.next_in_index,l=e.avail_in,u=n.p,a=n.L;}function z(){e.next_out=f,e.next_out_index=_,e.avail_out=o,e.next_in=r,e.next_in_index=i,e.avail_in=l,n.p=u,n.L=a;}function N(){u=0,a=0;}function j(){if(0==l)throw new h_;l--,u+=(255&r[i])<<a,i++,u>>>=0,a+=8;}function Q(e){for(;a<e;)j();}function D(e){return u&(1<<e)-1}function S(e){u>>>=e,a-=e;}function $(){u>>>=7&a,a-=7&a;}}function en(e){return Ke(e)?-2:0}var X_=65536,tr=32768,Y_=class{constructor(e=16,t=X_){this.Vt=[],this.Gt=e;for(let n=0;n<N.min(e,4);n++)this.Vt.push(new x(t));}acquire(e=X_){for(let t=this.Vt.length-1;t>=0;t--){let n=this.Vt[t];if(n.length>=e)return this.Vt.splice(t,1),n}return new x(e)}release(e){this.Vt.length<this.Gt&&this.Vt.push(e);}};function _n(e){let t=new Y_(32,X_),n=null;function r(e){try{t.release(e);}catch{}}return new U({start(){},transform(i,f){if(!n){let t=e.en(),r=e.tn(t);if(0!=r&&0!=r)throw new z("init failed: "+r);n={o:t};}let _=n.o,l=0;for(;l<i.length;){let n=N.min(i.length-l,tr),o=i.subarray(l,l+n);for(_.next_in=o,_.next_in_index=0,_.avail_in=o.length;_.avail_in>0;){let n=t.acquire(),i=false;try{_.next_out=n,_.next_out_index=0,_.avail_out=n.length;let r=e.nn(_,0),l=n.length-_.avail_out;if(l>0){let e=!1,r={rn:n.subarray(0,l),release:()=>{e||(e=!0,t.release(n));}};i=!0,f.enqueue(r);}if(0!=r&&1!=r)throw new z("process error: "+r)}finally{i||r(n);}}l+=n;}},flush(i){if(!n)return;let f=n.o;for(;;){let n=t.acquire(),_=false;try{f.next_out=n,f.next_out_index=0,f.avail_out=n.length;let r=e.nn(f,4),l=n.length-f.avail_out;if(l>0){let e=!1,r={rn:n.subarray(0,l),release:()=>{e||(e=!0,t.release(n));}};_=!0,i.enqueue(r);}if(1==r)break;if(0!=r)throw new z("finalization error: "+r)}finally{_||r(n);}}let _=e.fn(f);if(0!=_&&0!=_)throw new z("end failed: "+_)}})}function tn(){return new U({start(){},transform(e,t){try{t.enqueue(e.rn.slice(0));}finally{e.release();}},flush(){}})}function nr(e="deflate",t){let n="gzip"==e?31:"deflate-raw"==e?-15:15,r=t&&"number"==typeof t.level?t.level:-1;return _n({en:()=>Dt(),tn:e=>vt(e,r,8,n,8,0),nn:It,fn:F_})}function rr(e="deflate"){let t="gzip"==e?31:"deflate-raw"==e?-15:15;return _n({en:()=>Jt("deflate64-raw"==e),tn:e=>Qt(e,t),nn:$t,fn:en})}var x_=class{constructor(e="deflate",t){let n=nr(e,t);this.writable=n.writable,this.readable=n.readable.pipeThrough(tn());}},p_=class{constructor(e="deflate"){let t=rr(e);this.writable=t.writable,this.readable=t.readable.pipeThrough(tn());}};
|
|
6786
|
+
var{Uint8Array:x,Uint16Array:E,Int32Array:H,TransformStream:U,Math:N,Error:R,Array:v}=globalThis,Se=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],Z=new x(0),Ve=new E(0),de=[];for(let e=0;e<6;e++)de.push(e,0==e?8:4);de.push(0,1);var Ee=[];for(let e=0;e<14;e++)Ee.push(e,0==e?4:2);var ge=new E([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]),Te=new 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]);function M(e,t,n,r,i){if(0==i)return;let f=e instanceof x?e:new x(e.buffer,e.byteOffset,e.byteLength),_=n instanceof x?n.subarray(r,r+i):new x(n.buffer,n.byteOffset+r,i);f.set(_,t);}function je(e,t,n){0!=n&&(e instanceof x?e:new x(e.buffer,e.byteOffset,e.byteLength)).fill(0,t,t+n);}function Je(){return {next_in:Z,next_in_index:0,avail_in:0,total_in:0,next_out:Z,next_out_index:0,avail_out:0,total_out:0,msg:"",t:0,i:0,_:0,l:void 0}}function Qe(e,t){let n=1<<t;return {o:e,u:new x(n),h:n,k:t,v:0,m:0,p:0,L:0}}function te(e){let t=[];for(let n=0;n<e.length;n+=2){let r=e[n],i=e[n+1];for(let e=0;e<i;e++)t.push(r);}return new E(t)}var ne=class{constructor(e,t){this.M=e,this.Z=t,this.W=0;}},re=class{constructor(e,t,n,r,i){this.N=e,this.j=t,this.S=n,this.D=r,this.$=i;}};function w_(e){return J_[e<-6||e>2?9:2-e]||""}function Ae(e,t){try{e.msg=w_(t);}catch(n){e.msg="zlib error "+String(t)+" ("+n+")";}return t}function e_(e,t){let n=e>>>0,r=0;for(let e=0;e<t;e++)r=r<<1|1&n,n>>>=1;return r}function g(e,t){e.q[e.T++]=t;}function De(e,t){g(e,255&t),g(e,t>>>8&255);}function __(e,t,n){let r=255&n,i=65535&t,f=e.A+e.O;return e.q[f]=255&i,e.q[f+1]=i>>>8&255,e.q[f+2]=r,e.O+=3,i=i-1&65535,e.U[t_[r]+ie+1].I++,e.B[A_(i)].I++,e.O==e.P}function ye(e,t){let n=255&t,r=e.A+e.O;return e.q[r]=0,e.q[r+1]=0,e.q[r+2]=n,e.O+=3,e.U[n].I++,e.O==e.P}function ve(e){return e.h-ae}function A_(e){return e<256?T_[e]:T_[256+(e>>7)]}function D_(e){let t=He+7,n=1<<t,r=(1<<t)-1,i=N.floor((t+k-1)/k),f=1<<8+He;return {...Qe(e,15),o:e,X:42,F:0,H:void 0,Y:32767,J:t,K:n,R:r,V:i,C:new E(32768),G:new E(n),ee:f,q:new x(32768),te:0,ne:32768,T:0,re:0,ie:0,fe:0,_e:0,le:0,oe:-2,ue:0,ae:0,ce:0,se:0,de:0,he:0,we:0,ke:0,be:0,ge:0,ve:0,me:0,xe:0,ye:0,pe:new H(2*we+1),Le:new x(2*we+1),ze:new E(be+1),O:0,P:0,Me:Z,A:0,Ee:0,Ze:0,We:8,Ne:32768,je:0,Qe:0,Se:0,U:new v(le).fill(0).map(()=>Q()),B:new v(2*me+1).fill(0).map(()=>Q()),De:new v(2*oe+1).fill(0).map(()=>Q()),$e:g_(),qe:g_(),Te:g_()}}function y_(e){let t=[];for(let n=0;n<e.length;n+=2){let r=e[n],i=e[n+1],f=Q();f.Ae=r,f.Oe=i,t.push(f);}return t}function Q(){return {I:0,Ae:0,Ie:0,Oe:0}}function g_(){return new ne([],un(null,Z,0,0,0))}function un(e,t,n,r,i){return new re(e,t,n,r,i)}function Q_(){let e=new v(288).fill(0);for(let t=0;t<=143;t++)e[t]=8;for(let t=144;t<=255;t++)e[t]=9;for(let t=256;t<=279;t++)e[t]=7;for(let t=280;t<=287;t++)e[t]=8;return e}function v_(e){let{code:t,length:n}=cn(e),r=new E(2*e.length),i=0;for(let f=0;f<e.length;f++){let e=n[f]||0,_=t[f]||0;r[i++]=e?e_(_,e):0,r[i++]=e;}return new E(r)}function $_(e,t,n){let r=0;for(let n=0;n<e.length;n++){let i=t[n]?1<<t[n]:1,f=e[n]+i-1;f>r&&(r=f);}r<n&&(r=n);let i=new x(r+1);for(let n=0;n<=r;n++)for(let r=0;r<e.length;r++){let f=t[r]?1<<t[r]:1,_=e[r];if(n>=_&&n<=_+f-1){i[n]=r;break}}return i}function et(e,t){let n=0;for(let r=0;r<e.length;r++){let i=t[r]?1<<t[r]:1,f=e[r]+i-1;f>n&&(n=f);}let r=new x(n+1);for(let i=0;i<=n;i++)for(let n=0;n<e.length;n++){let f=t[n]?1<<t[n]:1,_=e[n];if(i>=_&&i<=_+f-1){r[i]=n;break}}return r}function _t(e){let t=new x(512),n=e.length-1;for(let r=0;r<256;r++)t[r]=r<=n?e[r]:e[n];for(let r=256;r<=n;r++){let n=r>>7;t[256+(n>255?255:n)]=e[r];}for(let e=257;e<512;e++)0==t[e]&&(t[e]=t[e-1]);return t}function cn(e){let t=N.max(...e),n=new v(t+1).fill(0);for(let t of e)t>0&&n[t]++;let r=new v(e.length).fill(0),i=new v(t+1).fill(0),f=0;for(let e=1;e<=t;e++)f=f+n[e-1]<<1,i[e]=f;for(let t=0;t<e.length;t++){let n=e[t];0!=n&&(r[t]=i[n]++);}return {code:r,length:e}}var He=8,k=3,_e=258,ae=_e+k+1,Ue=16,Be=_e,dn=29,ie=256,we=ie+1+dn,me=30,oe=19,le=2*we+1,be=15,tt=9,nt=255,rt=32,at=4,Ie=256,n_=16,r_=17,a_=18,it=0,I_=1,ot=2,$=-1,J_=["need dictionary","stream end","","file error","stream error","data error","insufficient memory","buffer error",""],i_=te(de),o_=te(Ee),Fe=new E(19);Fe[16]=2,Fe[17]=3,Fe[18]=7;var mn=v_(Q_()),bn=v_(new v(30).fill(5)),Ze=y_(mn),k_=y_(bn),t_=$_(Te,i_,_e),T_=_t(et(ge,o_));function Pe(e){return e%65521>>>0}function se(e,t,n){if(void 0===t||void 0===n)return 1;let r=e>>>16&65535;if(e&=65535,1==n)return (e+=t[0])>=65521&&(e-=65521),r+=e,r>=65521&&(r-=65521),(r<<16|e)>>>0;if(n<16){for(let i=0;i<n;i++)r+=e+=t[i];return e>=65521&&(e-=65521),r=Pe(r),(r<<16|e)>>>0}for(;n>=5552;){n-=5552;let i=N.floor(347);do{for(let n=0;n<16;n++)r+=e+=t[n];t=t.subarray(16);}while(--i);e=Pe(e),r=Pe(r);}if(n){for(;n>=16;){n-=16;for(let n=0;n<16;n++)r+=e+=t[n];t=t.subarray(16);}for(let i=0;i<n;i++)r+=e+=t[i];e=Pe(e),r=Pe(r);}return (r<<16|e)>>>0}var Me=[[],[],[],[],[],[],[],[]];for(let e=0;e<256;e++){let t=e;for(let e=0;e<8;e++)t=1&t?3988292384^t>>>1:t>>>1;Me[0][e]=t;}for(let e=0;e<256;e++)for(let t=1;t<8;t++){let n=Me[t-1][e];Me[t][e]=n>>>8^Me[0][255&n];}var[lt,sn,hn,xn,pn,Sn,En,gn]=Me;function W(e=0,t,n){if(!t)return 0;void 0===n&&(n=t.length);let r=0|~e,i=0;if((n=N.min(n,t.length))>=8){let e=new DataView(t.buffer,t.byteOffset,n),f=n-8;for(;i<=f;i+=8){let t=r^e.getInt32(i,true),n=e.getInt32(i+4,true);r=gn[255&t]^En[t>>>8&255]^Sn[t>>>16&255]^pn[t>>>24&255]^xn[255&n]^hn[n>>>8&255]^sn[n>>>16&255]^lt[n>>>24&255];}}for(;i<n;i++)r=r>>>8^lt[255&(r^t[i])];return (4294967295^r)>>>0}function st(e){16==e.L?(De(e,e.p),e.p=0,e.L=0):e.L>=8&&(g(e,e.p),e.p>>=8,e.L-=8);}function ht(e){e.L>8?De(e,e.p):e.L>0&&g(e,e.p),e.Ee=1+(e.L-1&7),e.p=0,e.L=0;}function Tn(e,t,n){let r,i,f=[],_=0;for(r=1;r<=be;r++)_=_+n[r-1]<<1,f[r]=_;for(i=0;i<=t;i++){let t=e[i].Oe;0!=t&&(e[i].Ae=e_(f[t]++,t));}}function L(e,t,n){e.L>Ue-n?(e.p=65535&(e.p|t<<e.L),De(e,e.p),e.p=t>>Ue-e.L&65535,e.L+=n-Ue):(e.p=65535&(e.p|t<<e.L),e.L+=n);}function xt(e){for(let t=0;t<e.U.length;t++)e.U[t].I=0;for(let t=0;t<e.B.length;t++)e.B[t].I=0;for(let t=0;t<e.De.length;t++)e.De[t].I=0;e.U[Ie].I=1,e.ie=e.fe=0,e.O=e._e=0;}function pt(e){if(e.U&&e.U.length>=le)for(let t=0;t<le;t++)e.U[t]=Q();else {e.U=[];for(let t=0;t<le;t++)e.U.push(Q());}if(e.B&&e.B.length>=2*me+1)for(let t=0;t<2*me+1;t++)e.B[t]=Q();else {e.B=[];for(let t=0;t<2*me+1;t++)e.B.push(Q());}if(e.De&&e.De.length>=2*oe+1)for(let t=0;t<2*oe+1;t++)e.De[t]=Q();else {e.De=[];for(let t=0;t<2*oe+1;t++)e.De.push(Q());}e.$e=new ne(e.U,new re(Ze,i_,ie+1,we,be)),e.qe=new ne(e.B,new re(k_,o_,0,me,be)),e.Te=new ne(e.De,new re(null,Fe,0,oe,7)),e.p=0,e.L=0,e.Ee=0,xt(e);}var he=1;function wn(e,t,n){return n=e.pe[he],e.pe[he]=e.pe[e.Qe--],N_(e,t,he),n}function ct(e,t,n,r){return e[t].I<e[n].I||e[t].I==e[n].I&&r[t]<=r[n]}function N_(e,t,n){let r=e.pe[n],i=n<<1;for(;i<=e.Qe&&(i<e.Qe&&ct(t,e.pe[i+1],e.pe[i],e.Le)&&i++,!ct(t,r,e.pe[i],e.Le));)e.pe[n]=e.pe[i],n=i,i<<=1;e.pe[n]=r;}function An(e,t){let n,r,i,f,_,l,o=t.M,u=t.W,a=t.Z.N,c=t.Z.j,s=t.Z.S,d=t.Z.$,h=0;for(f=0;f<=be;f++)e.ze[f]=0;for(o[e.pe[e.Se]].Oe=0,n=e.Se+1;n<le;n++)r=e.pe[n],f=o[o[r].Ie].Oe+1,f>d&&(f=d,h++),o[r].Oe=f,!(r>u)&&(e.ze[f]++,_=0,r>=s&&(_=c[r-s]),l=o[r].I,e.ie+=l*(f+_),a&&(e.fe+=l*(a[r].Oe+_)));if(0!=h){do{for(f=d-1;0==e.ze[f];)f--;e.ze[f]--,e.ze[f+1]+=2,e.ze[d]--,h-=2;}while(h>0);for(f=d;0!=f;f--)for(r=e.ze[f];0!=r;)i=e.pe[--n],!(i>u)&&(o[i].Oe!=f&&(e.ie+=(f-o[i].Oe)*o[i].I,o[i].Oe=f),r--);}}function z_(e,t){let n,r,i,f=t.M,_=t.Z.N,l=t.Z.D,o=-1;for(e.Qe=0,e.Se=le,n=0;n<l;n++)0!=f[n].I?(e.pe[++e.Qe]=o=n,e.Le[n]=0):f[n].Oe=0;for(;e.Qe<2;)i=e.pe[++e.Qe]=o<2?++o:0,f[i].I=1,e.Le[i]=0,e.ie--,_&&(e.fe-=_[i].Oe);for(t.W=o,n=N.floor(e.Qe/2);n>=1;n--)N_(e,f,n);i=l;do{n=wn(e,f,n),r=e.pe[he],e.pe[--e.Se]=n,e.pe[--e.Se]=r,f[i].I=f[n].I+f[r].I,e.Le[i]=(e.Le[n]>=e.Le[r]?e.Le[n]:e.Le[r])+1,f[n].Ie=f[r].Ie=i,e.pe[he]=i++,N_(e,f,he);}while(e.Qe>=2);e.pe[--e.Se]=e.pe[he],An(e,t),Tn(f,t.W,e.ze);}function dt(e,t,n){let r,i,f=-1,_=t[0].Oe,l=0,o=7,u=4;for(0==_&&(o=138,u=3),t[n+1].Oe=65535,r=0;r<=n;r++)i=_,_=t[r+1].Oe,!(++l<o&&i==_)&&(l<u?e.De[i].I+=l:0!=i?(i!=f&&e.De[i].I++,e.De[n_].I++):l<=10?e.De[r_].I++:e.De[a_].I++,l=0,f=i,0==_?(o=138,u=3):i==_?(o=6,u=3):(o=7,u=4));}function mt(e,t,n){let r,i=-1,f=t[0].Oe,_=0,l=7,o=4;0==f&&(l=138,o=3);for(let u=0;u<=n;u++)if(r=f,f=t[u+1].Oe,!(++_<l&&r==f)){if(_<o)do{L(e,e.De[r].Ae,e.De[r].Oe);}while(0!=--_);else 0!=r?(r!=i&&(L(e,e.De[r].Ae,e.De[r].Oe),_--),L(e,e.De[n_].Ae,e.De[n_].Oe),L(e,_-3,2)):_<=10?(L(e,e.De[r_].Ae,e.De[r_].Oe),L(e,_-3,3)):(L(e,e.De[a_].Ae,e.De[a_].Oe),L(e,_-11,7));_=0,i=r,0==f?(l=138,o=3):r==f?(l=6,o=3):(l=7,o=4);}}function Dn(e){let t;for(dt(e,e.U,e.$e.W),dt(e,e.B,e.qe.W),z_(e,e.Te),t=oe-1;t>=3&&0==e.De[Se[t]].Oe;t--);return e.ie+=3*(t+1)+5+5+4,t}function yn(e,t,n,r){let i;for(L(e,t-257,5),L(e,n-1,5),L(e,r-4,4),i=0;i<r;i++)L(e,e.De[Se[i]].Oe,3);mt(e,e.U,t-1),mt(e,e.B,n-1);}function Xe(e,t,n,r,i=0){L(e,(it<<1)+r,3),ht(e),De(e,n),De(e,~n),n&&t&&M(e.q,e.T,t,i,n),e.T+=n;}function St(e){st(e);}function Et(e){L(e,I_<<1,3),L(e,Ze[Ie].Ae,Ze[Ie].Oe),st(e);}function bt(e,t,n){let r,i,f,_,l=0;if(0!=e.O)do{r=255&e.Me[l],r+=(255&e.Me[l+1])<<8,i=e.Me[l+2],l+=3,0==r?L(e,t[i].Ae,t[i].Oe):(f=t_[i],L(e,t[f+ie+1].Ae,t[f+ie+1].Oe),_=i_[f],0!=_&&(i-=Te[f],L(e,i,_)),r--,f=A_(r),L(e,n[f].Ae,n[f].Oe),_=o_[f],0!=_&&(r-=ge[f],L(e,r,_)));}while(l<e.O);L(e,t[Ie].Ae,t[Ie].Oe);}function vn(e){let t,n=4093624447;for(t=0;t<=31;t++,n>>=1)if(1&n&&0!=e.U[t].I)return 0;if(0!=e.U[9].I||0!=e.U[10].I||0!=e.U[13].I)return 1;for(t=32;t<ie;t++)if(0!=e.U[t].I)return 1;return 0}function gt(e,t,n,r,i=0){let f,_,l=0;e.be>0?(2==e.o.t&&(e.o.t=vn(e)),z_(e,e.$e),z_(e,e.qe),l=Dn(e),f=e.ie+3+7>>3,_=e.fe+3+7>>3,(_<=f||4==e.ge)&&(f=_)):f=_=n+5,n+4<=f&&t?Xe(e,t,n,r,i):_==f?(L(e,(I_<<1)+r,3),bt(e,Ze,k_)):(L(e,(ot<<1)+r,3),yn(e,e.$e.W+1,e.qe.W+1,l+1),bt(e,e.U,e.B)),xt(e),r&&ht(e);}function Dt(){let e=Je();return e.l=D_(e),e}var We=[{Ue:zt,Be:0,Pe:0,Xe:0,Fe:0},{Ue:L_,Be:4,Pe:4,Xe:8,Fe:4},{Ue:L_,Be:5,Pe:5,Xe:16,Fe:8},{Ue:L_,Be:6,Pe:16,Xe:32,Fe:32},{Ue:ze,Be:4,Pe:4,Xe:16,Fe:16},{Ue:ze,Be:16,Pe:8,Xe:16,Fe:32},{Ue:ze,Be:16,Pe:16,Xe:32,Fe:128},{Ue:ze,Be:32,Pe:32,Xe:128,Fe:256},{Ue:ze,Be:128,Pe:128,Xe:256,Fe:1024},{Ue:ze,Be:258,Pe:258,Xe:258,Fe:4096}];function Tt(e){return 2*e-(e>4?9:0)}function u_(e,t,n){return ((t<<e.V^n)&e.R)>>>0}function c_(e,t){e.ke=u_(e,e.ke,e.u[t+(k-1)]);let n=e.C[t&e.Y]=e.G[e.ke];return e.G[e.ke]=t,n}function yt(e){e.G[e.K-1]=0,je(e.G,0,(e.K-1)*e.G.BYTES_PER_ELEMENT);}function Ln(e){let t,n,r=e.h;for(t=e.K;t>0;)t--,n=e.G[t],e.G[t]=n>=r?n-r:0;for(t=r;t>0;)t--,n=e.C[t],e.C[t]=n>=r?n-r:0;}function O_(e,t,n,r){let i=e.avail_in;return i>r&&(i=r),0==i?0:(e.avail_in-=i,M(t,n,e.next_in,e.next_in_index,i),1==e.l.F?e.i=se(e.i,new x(t.buffer,t.byteOffset+n,i),i):2==e.l.F&&(e.i=W(e.i,new x(t.buffer,t.byteOffset+n,i),i)),e.next_in_index+=i,e.total_in+=i,i)}function d_(e){let t,n,r=e.h;do{if(n=e.Ne-e.ce-e.ae,0==n&&0==e.ae&&0==e.ce?n=r:-1==n&&n--,e.ae>=r+ve(e)&&(M(e.u,0,e.u,r,r-n),e.je-=r,e.ae-=r,e.ue-=r,e.le>e.ae&&(e.le=e.ae),Ln(e),n+=r),0==e.o.avail_in)break;if(t=O_(e.o,e.u,e.ae+e.ce,n),e.ce+=t,e.ce+e.le>=k){let t=e.ae-e.le;for(e.ke=e.u[t],e.ke=u_(e,e.ke,e.u[t+1]);e.le&&(e.ke=u_(e,e.ke,e.u[t+k-1]),e.C[t&e.Y]=e.G[e.ke],e.G[e.ke]=t,t++,e.le--,!(e.ce+e.le<k)););}}while(e.ce<ae&&0!=e.o.avail_in);if(e.v<e.Ne){let t,n=e.ae+e.ce;e.v<n?(t=e.Ne-n,t>Be&&(t=Be),je(e.u,n,t),e.v=n+t):e.v<n+Be&&(t=n+Be-e.v,t>e.Ne-e.v&&(t=e.Ne-e.v),je(e.u,e.v,t),e.v+=t);}}function vt(e,t,n=8,r=15,i=He,f=0){let _=1;if(!e)return -2;if(e.msg="",-1==t&&(t=6),r<0){if(_=0,r<-15)return -2;r=-r;}else r>15&&(_=2,r-=16);if(i<1||i>tt||8!=n||r<8||r>15||t<0||t>9||f<0||f>4||8==r&&1!=_)return -2;8==r&&(r=9);let l=D_(e);return l?(e.l=l,l.o=e,l.X=42,l.F=_,l.H=void 0,l.k=r,l.h=1<<l.k,l.Y=l.h-1,l.J=i+7,l.K=1<<l.J,l.R=l.K-1,l.V=(l.J+k-1)/k,l.u=new x(2*l.h),l.C=new E(l.h),l.G=new E(l.K),l.v=0,l.ee=1<<i+6,l.q=new x(l.ee*at),l.ne=4*l.ee,l.u&&l.C&&l.G&&l.q?(l.Me=l.q.subarray(l.ee),l.A=l.te+l.ee,l.P=3*(l.ee-1),l.be=t,l.ge=f,l.We=n,Un(e)):(l.X=666,e.msg=w_(-4),F_(e),-4)):-4}function B_(e){if(null==e)return true;let t=e.l;return !t||t.o!=e||42!=t.X&&57!=t.X&&69!=t.X&&73!=t.X&&91!=t.X&&103!=t.X&&113!=t.X&&666!=t.X}function On(e){let t;return B_(e)?-2:(e.total_in=e.total_out=0,e.msg="",e.t=2,t=e.l,t.T=0,t.re=t.te,t.F<0&&(t.F=-t.F),t.X=2==t.F?57:42,e.i=2==t.F?W(0):se(0),t.oe=-2,pt(t),0)}function Hn(e){e.Ne=2*e.h,yt(e),e.ye=We[e.be].Be,e.ve=We[e.be].Pe,e.me=We[e.be].Xe,e.xe=We[e.be].Fe,e.ae=0,e.ue=0,e.ce=0,e.le=0,e.se=e.de=k-1,e.we=0,e.ke=0;}function Un(e){let t=On(e);return 0==t&&Hn(e.l),t}function Ye(e,t){g(e,t>>8),g(e,255&t);}function q(e){let t,n=e.l;St(n),t=n.T,t>e.avail_out&&(t=e.avail_out),0!=t&&(M(e.next_out,e.next_out_index,n.q,n.re,t),e.next_out_index+=t,n.re+=t,e.total_out+=t,e.avail_out-=t,n.T-=t,0==n.T&&(n.re=n.te));}function ke(e,t){let n=e.l;n.H&&n.H.He&&(e.i=W(e.i,new x(n.q.buffer,n.te+t,n.T-t),n.T-t));}function It(e,t){let n,r=e.l;if(B_(e)||t>5||t<0)return Ae(e,-2);if(!e.next_out||0!=e.avail_in&&!e.next_in||666==r.X&&4!=t)return Ae(e,-2);if(0==e.avail_out)return Ae(e,-5);if(n=r.oe,r.oe=t,0!=r.T){if(q(e),0==e.avail_out)return r.oe=$,0}else if(0==e.avail_in&&Tt(t)<=Tt(n)&&4!=t)return Ae(e,-5);if(666==r.X&&0!=e.avail_in)return Ae(e,-5);if(42==r.X&&0==r.F&&(r.X=113),42==r.X){let t,n=8+(r.k-8<<4)<<8;if(t=r.ge>=2||r.be<2?0:r.be<6?1:6==r.be?2:3,n|=t<<6,0!=r.ae&&(n|=rt),n+=31-n%31,Ye(r,n),0!=r.ae&&(Ye(r,e.i>>16),Ye(r,65535&e.i)),e.i=1,r.X=113,q(e),0!=r.T)return r.oe=$,0}if(57==r.X)if(e.i=W(0),g(r,31),g(r,139),g(r,8),r.H)g(r,(r.H.Ye?1:0)+(r.H.He?2:0)+(null==r.H.Je?0:4)+(null==r.H.Ke?0:8)+(null==r.H.Re?0:16)),g(r,255&r.H.Ve),g(r,r.H.Ve>>>8&255),g(r,r.H.Ve>>>16&255),g(r,r.H.Ve>>>24&255),g(r,9==r.be?2:r.ge>=2||r.be<2?4:0),g(r,255&r.H.Ce),null!=r.H.Je&&(g(r,255&r.H.Ge),g(r,r.H.Ge>>>8&255)),r.H.He&&(e.i=W(e.i,r.q,r.T)),r.Ze=0,r.X=69;else if(g(r,0),g(r,0),g(r,0),g(r,0),g(r,0),g(r,9==r.be?2:r.ge>=2||r.be<2?4:0),g(r,nt),r.X=113,q(e),0!=r.T)return r.oe=$,0;if(69==r.X){if(r.H&&null!=r.H.Je){let t=r.T,n=(65535&r.H.Ge)-r.Ze;for(;r.T+n>r.ne;){let i=r.ne-r.T;if(M(r.q,r.T,r.H.Je,r.Ze,i),r.T=r.ne,ke(e,t),r.Ze+=i,q(e),0!=r.T)return r.oe=$,0;t=0,n-=i;}M(r.q,r.T,r.H.Je,r.Ze,n),r.T+=n,ke(e,t),r.Ze=0;}r.X=73;}if(73==r.X){if(r.H&&r.H.Ke&&r.H.Ke.length){let t,n=r.T;do{if(r.T==r.ne){if(ke(e,n),q(e),0!=r.T)return r.oe=$,0;n=0;}t=r.H.Ke[r.Ze++],g(r,t);}while(0!=t);ke(e,n),r.Ze=0;}r.X=91;}if(91==r.X){if(r.H&&r.H.Re&&r.H.Re.length){let t,n=r.T;do{if(r.T==r.ne){if(ke(e,n),q(e),0!=r.T)return r.oe=$,0;n=0;}t=r.H.Re[r.Ze++],g(r,t);}while(0!=t);ke(e,n);}r.X=103;}if(103==r.X){if(r.H&&r.H.He){if(r.T+2>r.ne&&(q(e),0!=r.T))return r.oe=$,0;g(r,255&e.i),g(r,e.i>>>8&255),e.i=W(0);}if(r.X=113,q(e),0!=r.T)return r.oe=$,0}if(0!=e.avail_in||0!=r.ce||0!=t&&666!=r.X){let n=0==r.be?zt(r,t):2==r.ge?Fn(r,t):3==r.ge?Bn(r,t):We[r.be].Ue(r,t);if((2==n||3==n)&&(r.X=666),0==n||2==n)return 0==e.avail_out&&(r.oe=$),0;if(1==n&&(1==t?Et(r):5!=t&&(Xe(r,null,0,0),3==t&&(yt(r),0==r.ce&&(r.ae=0,r.ue=0,r.le=0))),q(e),0==e.avail_out))return r.oe=$,0}return 4!=t?0:r.F<=0?1:(2==r.F?(g(r,255&e.i),g(r,e.i>>>8&255),g(r,e.i>>>16&255),g(r,e.i>>>24&255),g(r,255&e.total_in),g(r,e.total_in>>>8&255),g(r,e.total_in>>>16&255),g(r,e.total_in>>>24&255)):(Ye(r,e.i>>>16&65535),Ye(r,65535&e.i)),q(e),r.F>0&&(r.F=-r.F),0!=r.T?0:1)}function F_(e){if(B_(e))return -2;let t=e.l,n=t.X;return t.u=Z,t.C=Ve,t.G=Ve,t.q=Z,t.Me=Z,t.pe=new H(0),t.Le=Z,t.ze=Ve,t.U.length=0,t.B.length=0,t.De.length=0,t.H=void 0,t.te=0,t.re=0,t.A=0,113==n?-3:0}function kt(e,t){let n,r,i=e.xe,f=e.ae,_=e.de,l=e.me,o=e.ae>ve(e)?e.ae-ve(e):0,u=e.C,a=e.Y,c=e.u[f],s=e.u[f+1],d=e.u[f+_-1],h=e.u[f+_];e.de>=e.ve&&(i>>=2),l>e.ce&&(l=e.ce);do{if(n=t,e.u[n+_]!=h||e.u[n+_-1]!=d||e.u[n]!=c||e.u[n+1]!=s)continue;let i=N.min(_e,e.ce),o=2;for(;o<i&&e.u[f+o]==e.u[n+o];)o++;if(r=o,r>_){if(e.je=t,_=r,r>=l)break;d=e.u[f+_-1],h=e.u[f+_];}}while((t=u[t&a])>o&&0!=--i);return _<=e.ce?_:e.ce}function Nt(e,t){gt(e,e.u,e.ae-e.ue,t,e.ue),e.ue=e.ae,q(e.o);}function j(e,t){return Nt(e,t?1:0),0==e.o.avail_out?t?2:0:null}var wt=65535;function Ne(e,t){return e<t?e:t}function zt(e,t){let n,r,i,f=Ne(e.ne-5,e.h),_=0,l=e.o.avail_in;do{if(n=wt,i=e.L+42>>3,e.o.avail_out<i||(i=e.o.avail_out-i,r=e.ae-e.ue,n>r+e.o.avail_in&&(n=r+e.o.avail_in),n>i&&(n=i),n<f&&(0==n&&4!=t||0==t||n!=r+e.o.avail_in)))break;_=4==t&&n==r+e.o.avail_in?1:0,Xe(e,null,0,_),e.q[e.T-4]=n,e.q[e.T-3]=n>>8,e.q[e.T-2]=~n,e.q[e.T-1]=~n>>8,q(e.o),r&&(r>n&&(r=n),M(e.o.next_out,e.o.next_out_index,e.u,e.ue,r),e.o.next_out_index+=r,e.o.avail_out-=r,e.o.total_out+=r,e.ue+=r,n-=r),n&&(O_(e.o,e.o.next_out,e.o.next_out_index,n),e.o.next_out_index+=n,e.o.avail_out-=n,e.o.total_out+=n);}while(0==_);if(l-=e.o.avail_in,l){if(l>=e.h){e._e=2;let t=e.o.next_in_index-e.h;M(e.u,0,e.o.next_in,t,e.h),e.ae=e.h,e.le=e.ae;}else e.Ne-e.ae<=l&&(e.ae-=e.h,M(e.u,0,e.u,e.h,e.ae),e._e<2&&e._e++,e.le>e.ae&&(e.le=e.ae)),M(e.u,e.ae,e.o.next_in,e.o.next_in_index-l,l),e.ae+=l,e.le+=Ne(l,e.h-e.le);e.ue=e.ae;}return e.v<e.ae&&(e.v=e.ae),_?(e.Ee=8,3):0!=t&&4!=t&&0==e.o.avail_in&&e.ae==e.ue?1:(i=e.Ne-e.ae,e.o.avail_in>i&&e.ue>=e.h&&(e.ue-=e.h,e.ae-=e.h,M(e.u,0,e.u,e.h,e.ae),e._e<2&&e._e++,i+=e.h,e.le>e.ae&&(e.le=e.ae)),i>e.o.avail_in&&(i=e.o.avail_in),i&&(O_(e.o,e.u,e.ae,i),e.ae+=i,e.le+=Ne(i,e.h-e.le)),e.v<e.ae&&(e.v=e.ae),i=e.L+42>>3,i=Ne(e.ne-i,wt),f=Ne(i,e.h),r=e.ae-e.ue,(r>=f||(r||4==t)&&0!=t&&0==e.o.avail_in&&r<=i)&&(n=Ne(r,i),_=4==t&&0==e.o.avail_in&&n==r?1:0,Xe(e,e.u,n,_,e.ue),e.ue+=n,q(e.o)),_&&(e.Ee=8),_?2:0)}function L_(e,t){let n,r=false;for(;;){if(e.ce<ae){if(d_(e),e.ce<ae&&0==t)return 0;if(0==e.ce)break}if(n=0,e.ce>=k&&(n=c_(e,e.ae)),0!=n&&e.ae-n<=ve(e)&&(e.se=kt(e,n)),e.se>=k)if(e.ae,e.je,e.se,r=__(e,e.ae-e.je,e.se-k),e.ce-=e.se,e.se<=e.ye&&e.ce>=k){e.se--;do{e.ae++,n=c_(e,e.ae);}while(0!=--e.se);e.ae++;}else e.ae+=e.se,e.se=0,e.ke=e.u[e.ae],e.ke=u_(e,e.ke,e.u[e.ae+1]);else r=ye(e,e.u[e.ae]),e.ce--,e.ae++;if(r){let t=j(e,false);if(null!=t)return t}}if(e.le=e.ae<k-1?e.ae:k-1,4==t){return j(e,true)??3}if(e.O){let t=j(e,false);if(null!=t)return t}return 1}function ze(e,t){let n,r=false;for(;;){if(e.ce<ae){if(d_(e),e.ce<ae&&0==t)return 0;if(0==e.ce)break}if(n=0,e.ce>=k&&(n=c_(e,e.ae)),e.de=e.se,e.he=e.je,e.se=k-1,0!=n&&e.de<e.ye&&e.ae-n<=ve(e)&&(e.se=kt(e,n),e.se<=5&&1==e.ge&&(e.se=k-1)),e.de>=k&&e.se<=e.de){let t=e.ae+e.ce-k;e.ae,e.he,e.de,r=__(e,e.ae-1-e.he,e.de-k),e.ce-=e.de-1,e.de-=2;do{++e.ae<=t&&(n=c_(e,e.ae));}while(0!=--e.de);if(e.we=0,e.se=k-1,e.ae++,r){let t=j(e,false);if(null!=t)return t}}else if(e.we){if(r=ye(e,e.u[e.ae-1]),r&&Nt(e,0),e.ae++,e.ce--,0==e.o.avail_out)return 0}else e.we=1,e.ae++,e.ce--;}if(e.we&&(r=ye(e,e.u[e.ae-1]),e.we=0),e.le=e.ae<k-1?e.ae:k-1,4==t){return j(e,true)??3}if(e.O){let t=j(e,false);if(null!=t)return t}return 1}function Bn(e,t){let n,r,i,f;for(;;){if(e.ce<=_e){if(d_(e),e.ce<=_e&&0==t)return 0;if(0==e.ce)break}if(e.se=0,e.ce>=k&&e.ae>0&&(i=e.ae-1,r=e.u[i],r==++i&&r==++i&&r==++i)){f=e.ae+_e;do{}while(r==++i&&r==++i&&r==++i&&r==++i&&r==++i&&r==++i&&r==++i&&r==++i&&i<f);e.se=_e-(f-i),e.se>e.ce&&(e.se=e.ce);}if(e.se>=k?(e.ae,e.ae,e.se,n=__(e,1,e.se-k),e.ce-=e.se,e.ae+=e.se,e.se=0):(n=ye(e,e.u[e.ae]),e.ce--,e.ae++),n){let t=j(e,false);if(null!=t)return t}}if(e.le=0,4==t){return j(e,true)??3}if(e.O){let t=j(e,false);if(null!=t)return t}return 1}function Fn(e,t){let n=false;for(;;){if(0==e.ce&&(d_(e),0==e.ce)){if(0==t)return 0;break}if(e.se=0,n=ye(e,e.u[e.ae]),e.ce--,e.ae++,n){let t=j(e,false);if(null!=t)return t}}if(e.le=0,4==t){return j(e,true)??3}if(e.O){let t=j(e,false);if(null!=t)return t}return 1}var ue=852,m_=592,b_=594,Rt=ge.map(e=>e+1),Ct=Te.subarray(0,-1).map(e=>e+3),Zn=[16,1,73,1,200,1],Pn=[144,1,72,1,78,1],Lt=Ee.map(Gt),Ot=Ee.map(Kt);Lt.push(64,2),Ot.push(142,2);var Ht=de.slice(0,-2).map(Gt),Ut=de.slice(0,-2).map(Kt);Ht.push(...Zn),Ut.push(...Pn);var Bt=new E([...Ct,258,0,0]),Ft=new E([...Ct,3,0,0]),Zt=te(Ht),Pt=te(Ut),Mt=new E([...Rt,0,0]),Xt=new E([...Rt,32769,49153]),Yt=te(Lt),Wt=te(Ot);function Gt(e,t){return t%2?e:e+16}function Kt(e,t){return t%2?e:e+128}function Vt(e,t){let n,r=e.l,i=e.next_in_index,f=e.next_out_index,_=e.next_in,l=e.next_out,o=r.u,u=r.p>>>0,a=r.L>>>0,c=r.et,s=r.tt,d=(1<<r.nt)-1,h=(1<<r.rt)-1,w=r.h>>>0,k=r.v>>>0,b=r.m>>>0,g=r.it,v=f-(t-e.avail_out),m=f+(e.avail_out-257),x=i+(e.avail_in-5),y=0,p=0,L=0,z=0;e:do{for(;a<15;){if(!(i<_.length))break e;u+=_[i++]<<a,a+=8;}n=c[u&d];t:for(;;){if(L=n.ft,u>>>=L,a-=L,L=n._t,0==L){l[f++]=n.lt;break}if(16&L){if(y=n.lt,L&=15,L){for(;a<L;){if(!(i<_.length)){r.ot=16200;break e}u+=_[i++]<<a,a+=8;}y+=u&(1<<L)-1,u>>>=L,a-=L;}for(;a<15;){if(!(i<_.length)){r.ot=16200;break e}u+=_[i++]<<a,a+=8;}n=s[u&h];n:for(;;){if(L=n.ft,u>>>=L,a-=L,L=n._t,16&L){if(p=n.lt,L&=15,L){for(;a<L;){if(!(i<_.length)){r.ot=16200;break e}u+=_[i++]<<a,a+=8;}p+=u&(1<<L)-1,u>>>=L,a-=L;}let t=y,c=f-v;if(p>c){let n=p-c;if(n>k&&g){e.msg="invalid distance too far back",r.ot=16209;break e}if(0==b){if(z=w-n,!(n<t)){for(let e=0;e<t;++e)l[f++]=o[z++];continue e}for(let e=0;e<n;++e)l[f++]=o[z++];t-=n,z=f-p;}else if(b<n){z=w+b-n;let e=n-b;if(!(e<t)){for(let e=0;e<t;++e)l[f++]=o[z++];continue e}for(let t=0;t<e;++t)l[f++]=o[z++];if(t-=e,z=0,b<t){for(let e=0;e<b;++e)l[f++]=o[z++];t-=b,z=f-p;}}else {if(z=b-n,!(n<t)){for(let e=0;e<t;++e)l[f++]=o[z++];continue e}for(let e=0;e<n;++e)l[f++]=o[z++];t-=n,z=f-p;}for(;t>2;)l[f++]=l[z++],l[f++]=l[z++],l[f++]=l[z++],t-=3;t&&(l[f++]=l[z++],t>1&&(l[f++]=l[z++]));}else {for(z=f-p;t>2;)l[f++]=l[z++],l[f++]=l[z++],l[f++]=l[z++],t-=3;t&&(l[f++]=l[z++],t>1&&(l[f++]=l[z++]));}break}if(64&L){e.msg="invalid distance code",r.ot=16209;break e}n=s[n.lt+(u&(1<<L)-1)];continue n}break}if(64&L){if(32&L){r.ot=16191;break e}e.msg="invalid literal/length code",r.ot=16209;break e}n=c[n.lt+(u&(1<<L)-1)];continue t}}while(i<x&&f<m);let M=a>>3;i-=M,a-=M<<3,u&=(1<<a)-1,e.next_in_index=i,e.next_out_index=f,e.avail_in=i<x?x-i+5:5-(i-x),e.avail_out=f<m?m-f+257:257-(f-m),r.p=u>>>0,r.L=a>>>0;}function Z_(e,t){let n=[],r=t?ue+b_:ue+m_;return {...Qe(e,0),o:e,ot:16180,ut:false,F:0,ct:false,st:0,dt:0,ht:0,wt:0,u:Z,kt:0,bt:0,Je:0,et:n,tt:n,nt:0,rt:0,gt:0,vt:0,xt:0,yt:0,Lt:n,zt:new E(320),Mt:new E(288),Et:new v(r).fill(null).map(()=>pe()),Zt:0,it:true,Wt:0,Nt:0,jt:t}}function pe(e=0,t=0,n=0){return {_t:e,ft:t,lt:n}}function P_(e=1){return {_t:64,ft:e,lt:0}}function jt(e=0){return {_t:96,ft:e,lt:0}}function M_(e){return (255&e)<<24|(e>>8&255)<<16|(e>>16&255)<<8|e>>24&255}var Le=15,Xn={jt:false,Qt:Bt,St:Zt,Dt:Mt,$t:Yt,qt:20,Tt:257,At:0,Ot:m_,It:false,Ut:true},Yn={jt:true,Qt:Ft,St:Pt,Dt:Xt,$t:Wt,qt:19,Tt:256,At:-1,Ot:b_,It:true,Ut:false};function Oe(e,t,n,r,i,f,_,l){let o,u,a,c,s,d,h,w,k,b,g,v,m,x,y,p,L,z,M,Z=new E(Le+1),W=new E(Le+1),N=l?Yn:Xn;for(o=0;o<=Le;o++)Z[o]=0;for(u=0;u<n;u++)Z[t[u]]++;for(s=i.Bt,c=Le;c>=1&&0==Z[c];c--);if(s>c&&(s=c),0==c)return N.Ut?(y=P_(1),r.Bt[0]=y,r.Bt[1]=y,i.Bt=1,0):-1;for(a=1;a<c&&0==Z[a];a++);for(s<a&&(s=a),w=1,o=1;o<=Le;o++)if(w<<=1,w-=Z[o],w<0)return -1;if(w>0&&(0==e||1!=c))return -1;for(W[1]=0,o=1;o<Le;o++)W[o+1]=W[o]+Z[o];for(u=0;u<n;u++)0!=t[u]&&(f[W[t[u]]++]=u);switch(e){case 0:L=z=f,M=N.qt;break;case 1:L=N.Qt,z=N.St,M=N.Tt;break;default:L=N.Dt,z=N.$t,M=N.At;}if(b=0,u=0,o=a,p=_.Bt,d=s,h=0,m=-1,k=1<<s,x=k-1,1==e&&(N.It?k>=ue:k>ue)||2==e&&(N.It?k>=N.Ot:k>N.Ot))return 1;for(;;){y=Wn(f,u,o,h,e,L,z,M,N.jt),g=1<<o-h,v=1<<d,a=v;do{v-=g;let e=(b>>h)+v;r.Bt[p+e]={...y};}while(0!=v);for(g=1<<o-1;b&g;)g>>=1;if(0!=g?(b&=g-1,b+=g):b=0,u++,0==--Z[o]){if(o==c)break;o=t[f[u]];}if(o>s&&(b&x)!=m){for(0==h&&(h=s),p+=1<<d,d=o-h,w=1<<d;d+h<c&&(w-=Z[d+h],!(w<=0));)d++,w<<=1;if(k+=1<<d,1==e&&(N.It?k>=ue:k>ue)||2==e&&(N.It?k>=N.Ot:k>N.Ot))return 1;m=b&x,r.Bt[_.Bt+m]={_t:d,ft:s,lt:p-_.Bt};}}if(0!=b)for(y=P_(o-h);0!=b;){for(0!=h&&(b&x)!=m&&(h=0,o=s,p=_.Bt,d=s,y.ft=o),r.Bt[p+(b>>h)]={...y},g=1<<o-1;b&g;)g>>=1;0!=g?(b&=g-1,b+=g):b=0;}return _.Bt+=k,i.Bt=s,0}function Wn(e,t,n,r,i,f,_,l,o){let u;if(o?e[t]<l:e[t]+1<l)u=pe(0,n-r,e[t]);else if(o?e[t]>l:e[t]>=l)if(o&&1==i){let i=e[t]-257;u=pe(_[i],n-r,f[i]);}else {let i=o?e[t]:e[t]-l;u=pe(_[i],n-r,f[i]);}else u=jt(n-r);return u}var Vn={Pt:true,Xt:new v(544),Ft:[],Ht:[]},jn={Pt:true,Xt:new v(544),Ft:[],Ht:[]};function Jt(){let e=Je();return e.l=Z_(e,false),e}function Ke(e){let t;return !(e&&(t=e.l,!(!t||t.o!=e||t.jt&&(t.ot<16191||t.ot>16209)||!t.jt&&(t.ot<16180||t.ot>16211))))}function Jn(e){let t;return Ke(e)?-2:(t=e.l,e.total_in=e.total_out=t.wt=0,e.msg="",t.F&&(e.i=1&t.F),t.ot=t.jt?16191:16180,t.ut=false,t.ct=false,t.st=-1,t.dt=t.jt?65536:32768,delete t.H,t.p=0,t.L=0,t.et=t.Et,t.tt=t.Et,t.Lt=t.Et,t.it=true,t.Wt=-1,0)}function Qn(e){let t;return Ke(e)?-2:(t=e.l,t.h=0,t.v=0,t.m=0,Jn(e))}function $n(e,t){let n,r;if(Ke(e))return -2;if(r=e.l,t<0){if(t<-16)return -2;n=0,r.jt=-16==t,t=-t;}else n=5+(t>>4),r.jt=false,t<48&&(t&=15);let i=r.jt?16:15;return t&&(t<8||t>i)?-2:(r.u.length>0&&r.k!=t&&(r.u=Z),r.F=n,r.k=t,Qn(e))}function Qt(e,t){let n,r;if(!e)return -2;e.msg="";let i=-16==t;return r=Z_(e,i),e.l=r,r.o=e,r.ot=i?16191:16180,n=$n(e,t),n}function er(e){let t=e.jt?jn:Vn,n={Bt:0};if(t.Pt){let r,i,f;for(r=0;r<144;)e.zt[r++]=8;for(;r<256;)e.zt[r++]=9;for(;r<280;)e.zt[r++]=7;for(;r<288;)e.zt[r++]=8;for(let e=0;e<544;e++)t.Xt[e]=pe();f=t.Xt,t.Ft=f,i=9;let _={Bt:f},l={Bt:i},o={Bt:0};for(Oe(1,e.zt,288,_,l,e.Mt,o,e.jt),f=_.Bt,i=l.Bt,e.Zt=o.Bt,r=0;r<32;)e.zt[r++]=5;i=5;let u=o.Bt,a={Bt:f},c={Bt:i};n.Bt=u,Oe(2,e.zt,32,a,c,e.Mt,n,e.jt),t.Ht=f.slice(u),t.Pt=false;}e.et=t.Ft,e.nt=9,e.tt=t.Ht,e.rt=5,e.Zt=n.Bt;}function _r(e,t,n){let r=e.l;if(!(r.u&&0!=r.u.length||(r.u=new x(1<<r.k),r.u)))return 1;if(0==r.h&&(r.h=1<<r.k,r.m=0,r.v=0),n>=r.h)M(r.u,0,t,t.length-r.h,r.h),r.m=0,r.v=r.h;else {let e=r.h-r.m;e>n&&(e=n),M(r.u,r.m,t,t.length-n,e),(n-=e)?(M(r.u,0,t,t.length-n,n),r.m=n,r.v=r.h):(r.m+=e,r.m==r.h&&(r.m=0),r.v<r.h&&(r.v+=e));}return 0}var x_=class extends R{constructor(){super("Need more input");}};function $t(e,t){let n,r,i,f,_,l,o,u,a,c,s,d,h,w,k,b,g,v=new x(4);if(Ke(e)||!e.next_out||!e.next_in&&0!=e.avail_in)return -2;l=0,u=0,o=0,a=0,r=Z,i=0,f=Z,_=0,n=e.l,16191==n.ot&&(n.ot=16192),z(),c=l,s=o,g=0;try{for(;;)switch(n.ot){case 16180:if(0==n.F){n.ot=16192;break}if(Q(16),2&n.F&&35615==u){0==n.k&&(n.k=15),n.ht=W(0),n.ht=p(n.ht,u),N(),n.ot=16181;break}if(n.H&&(n.H.Yt=-1),!(1&n.F)||((S(8)<<8)+(u>>8))%31){e.msg="incorrect header check",n.ot=16209;break}if(8!=S(4)){e.msg="unknown compression method",n.ot=16209;break}if(D(4),b=S(4)+8,0==n.k&&(n.k=b),b>15||b>n.k){e.msg="invalid window size",n.ot=16209;break}n.dt=1<<b,n.st=0,e.i=n.ht=se(0),n.ot=512&u?16189:16191,N();break;case 16181:if(Q(16),n.st=u,8!=(255&n.st)){e.msg="unknown compression method",n.ot=16209;break}if(57344&n.st){e.msg="unknown header flags set",n.ot=16209;break}n.H&&(n.H.Ye=u>>8&1),512&n.st&&4&n.F&&(n.ht=p(n.ht,u)),N(),n.ot=16182;case 16182:Q(32),n.H&&(n.H.Ve=u),512&n.st&&4&n.F&&(n.ht=L(n.ht,u)),N(),n.ot=16183;case 16183:Q(16),n.H&&(n.H.Jt=255&u,n.H.Ce=u>>8),512&n.st&&4&n.F&&(n.ht=p(n.ht,u)),N(),n.ot=16184;case 16184:1024&n.st?(Q(16),n.kt=u,n.H&&(n.H.Ge=u),512&n.st&&4&n.F&&(n.ht=p(n.ht,u)),N()):n.H&&(n.H.Je=Z),n.ot=16185;case 16185:if(1024&n.st&&(d=n.kt,d>l&&(d=l),d&&(n.H&&n.H.Je&&n.H.Kt&&(b=n.H.Ge-n.kt)<n.H.Kt&&M(n.H.Je,b,r,i,d),512&n.st&&4&n.F&&(n.ht=W(n.ht,r.subarray(i,i+d),d)),l-=d,i+=d,n.kt-=d),n.kt))return m();n.kt=0,n.ot=16186;case 16186:if(2048&n.st){if(0==l)return m();d=0;do{b=r[i+d++],n.H&&n.H.Rt&&n.kt<n.H.Rt&&(n.H.Ke[n.kt++]=b);}while(b&&d<l);if(512&n.st&&4&n.F&&(n.ht=W(n.ht,r.subarray(i,i+d),d)),l-=d,i+=d,b)return m()}else n.H&&(n.H.Ke=Z);n.kt=0,n.ot=16187;case 16187:if(4096&n.st){if(0==l)return m();d=0;do{b=r[i+d++],n.H&&n.H.Vt&&n.kt<n.H.Vt&&(n.H.Re[n.kt++]=b);}while(b&&d<l);if(512&n.st&&4&n.F&&(n.ht=W(n.ht,r.subarray(i,i+d),d)),l-=d,i+=d,b)return m()}else n.H&&(n.H.Re=Z);n.ot=16188;case 16188:if(512&n.st){if(Q(16),4&n.F&&u!=(65535&n.ht)){e.msg="header crc mismatch",n.ot=16209;break}N();}n.H&&(n.H.He=n.st>>9&1,n.H.Yt=1),e.i=n.ht=W(0),n.ot=16191;break;case 16189:Q(32),e.i=n.ht=M_(u),N(),n.ot=16190;case 16190:if(!n.ct)return E(),2;e.i=n.ht=se(0),n.ot=16191;case 16191:if(5==t||6==t)return m();case 16192:if(n.ut){$(),n.ot=16206;break}switch(Q(3),n.ut=!!S(1),D(1),S(2)){case 0:n.ot=16193;break;case 1:if(er(n),n.ot=16199,6==t)return D(2),m();break;case 2:n.ot=16196;break;case 3:e.msg="invalid block type",n.ot=16209;}D(2);break;case 16193:if($(),Q(32),(65535&u)!=(u>>>16^65535)){e.msg="invalid stored block lengths",n.ot=16209;break}if(n.kt=65535&u,N(),n.ot=16194,6==t)return m();case 16194:n.ot=16195;case 16195:if(d=n.kt,d){if(d>l&&(d=l),d>o&&(d=o),0==d)return m();M(f,_,r,i,d),l-=d,i+=d,o-=d,_+=d,n.kt-=d;break}n.ot=16191;break;case 16196:if(Q(14),n.vt=S(5)+257,D(5),n.xt=S(5)+1,D(5),n.gt=S(4)+4,D(4),n.vt>286||!n.jt&&n.xt>30){e.msg=n.jt?"too many length":"too many length or distance symbols",n.ot=16209;break}n.yt=0,n.ot=16197;case 16197:for(;n.yt<n.gt;)Q(3),n.zt[Se[n.yt++]]=S(3),D(3);for(;n.yt<19;)n.zt[Se[n.yt++]]=0;n.Lt=n.Et,n.et=n.tt=n.Lt,n.nt=7;let c={Bt:n.Lt},v={Bt:n.nt},x={Bt:0};if(g=Oe(0,n.zt,19,c,v,n.Mt,x,n.jt),n.Lt=c.Bt,n.nt=v.Bt,g){e.msg="invalid code lengths set",n.ot=16209;break}n.yt=0,n.ot=16198;case 16198:for(;n.yt<n.vt+n.xt;){for(;w=n.et[S(n.nt)],!(w.ft<=a);)j();if(w.lt<16)D(w.ft),n.zt[n.yt++]=w.lt;else {if(16==w.lt){if(Q(w.ft+2),D(w.ft),0==n.yt){e.msg="invalid bit length repeat",n.ot=16209;break}b=n.zt[n.yt-1],d=3+S(2),D(2);}else 17==w.lt?(Q(w.ft+3),D(w.ft),b=0,d=3+S(3),D(3)):(Q(w.ft+7),D(w.ft),b=0,d=11+S(7),D(7));if(n.yt+d>n.vt+n.xt){e.msg="invalid bit length repeat",n.ot=16209;break}for(;d--;)n.zt[n.yt++]=b;}}if(16209==n.ot)break;if(0==n.zt[256]){e.msg="invalid code -- missing end-of-block",n.ot=16209;break}n.Lt=n.Et,n.nt=9;let q={Bt:n.Lt},T={Bt:n.nt},A={Bt:0};g=Oe(1,n.zt,n.vt,q,T,n.Mt,A,n.jt),n.Lt=q.Bt,n.nt=T.Bt;let O=A.Bt;if(n.et=n.Lt.slice(0,O),g){e.msg="invalid literal/lengths set",n.ot=16209;break}n.rt=6;let I=n.zt.subarray(n.vt,n.vt+n.xt),U={Bt:n.Lt},B={Bt:n.rt},P={Bt:O};if(g=Oe(2,I,n.xt,U,B,n.Mt,P,n.jt),n.Lt=U.Bt,n.rt=B.Bt,n.tt=n.Lt.slice(O),g){e.msg="invalid distances set",n.ot=16209;break}if(n.ot=16199,6==t)return m();case 16199:n.ot=16200;case 16200:if(!n.jt&&l>=6&&o>=258){E(),Vt(e,s),z(),16191==n.ot&&(n.Wt=-1);break}for(n.Wt=0;w=n.et[S(n.nt)],!(w.ft<=a);)j();if(w._t&&!(240&w._t)){for(k=w;w=n.et[k.lt+(S(k.ft+k._t)>>k.ft)],!(k.ft+w.ft<=a);)j();D(k.ft),n.Wt+=k.ft;}if(D(w.ft),n.Wt+=w.ft,n.kt=w.lt,0==w._t){n.ot=16205;break}if(32&w._t){n.Wt=-1,n.ot=16191;break}if(64&w._t){e.msg="invalid literal/length code",n.ot=16209;break}n.Je=w._t&(n.jt?31:15),n.ot=16201;case 16201:n.Je&&(Q(n.Je),n.kt+=S(n.Je),D(n.Je),n.Wt+=n.Je),n.Nt=n.kt,n.ot=16202;case 16202:for(;w=n.tt[S(n.rt)],!(w.ft<=a);)j();if(!(240&w._t)){for(k=w;w=n.tt[k.lt+(S(k.ft+k._t)>>k.ft)],!(k.ft+w.ft<=a);)j();D(k.ft),n.Wt+=k.ft;}if(D(w.ft),n.Wt+=w.ft,64&w._t){e.msg="invalid distance code",n.ot=16209;break}n.bt=w.lt,n.Je=15&w._t,n.ot=16203;case 16203:n.Je&&(Q(n.Je),n.bt+=S(n.Je),D(n.Je),n.Wt+=n.Je),n.ot=16204;case 16204:if(0==o)return m();if(d=s-o,n.bt>d){if(d=n.bt-d,d>n.v&&n.it){e.msg="invalid distance too far back",n.ot=16209;break}d>n.m?(d-=n.m,h=n.h-d):h=n.m-d,d>n.kt&&(d=n.kt),d>o&&(d=o);for(let e=0;e<d;++e)f[_]=255&n.u[h],++_,++h;}else {h=_-n.bt,d=n.kt,d>o&&(d=o);for(let e=0;e<d;++e)f[_]=f[h],++_,++h;}d>o&&(d=o),o-=d,n.kt-=d,0==n.kt&&(n.ot=16200);break;case 16205:if(0==o)return m();f[_++]=n.kt,o--,n.ot=16200;break;case 16206:if(n.F){if(Q(32),s-=o,e.total_out+=s,n.wt+=s,4&n.F&&s){let t=f.subarray(_-s,_);e.i=n.ht=y(n.ht,t,s);}if(s=o,4&n.F&&(n.st?u:M_(u)>>>0)!=n.ht){e.msg="incorrect data check",n.ot=16209;break}N();}n.ot=16207;case 16207:if(n.F&&n.st){if(Q(32),4&n.F&&u!=(4294967295&n.wt)){e.msg="incorrect length check",n.ot=16209;break}N();}n.ot=16208;case 16208:return g=1,m();case 16209:return g=-3,m();case 16210:return -4;default:return -2}}catch(e){if(e instanceof x_)return m();throw e}function m(){if(E(),n.h||s!=e.avail_out&&n.ot<16209&&(n.jt?n.ot<16208:n.ot<16206)||4!=t){let t=s-e.avail_out;if(_r(e,e.next_out.subarray(e.next_out_index-t,e.next_out_index),t))return n.ot=16210,-4}return c-=e.avail_in,s-=e.avail_out,e.total_in+=c,e.total_out+=s,n.wt+=s,4&n.F&&s&&(e.i=n.ht=y(n.ht,e.next_out.subarray(e.next_out_index-s,e.next_out_index),s)),e.t=n.L+(n.ut?64:0)+(16191==n.ot?128:0)+(16199==n.ot||16194==n.ot?256:0),(0==c&&0==s&&0==g||4==t&&0==g)&&(g=-5),g}function y(e,t,r){return n.st?W(e,t,r):se(e,t,r)}function p(e,t){return v[0]=255&t,v[1]=t>>>8&255,W(e,v,2)>>>0}function L(e,t){return v[0]=255&t,v[1]=t>>>8&255,v[2]=t>>>16&255,v[3]=t>>>24&255,W(e,v,4)>>>0}function z(){f=e.next_out,_=e.next_out_index,o=e.avail_out,r=e.next_in,i=e.next_in_index,l=e.avail_in,u=n.p,a=n.L;}function E(){e.next_out=f,e.next_out_index=_,e.avail_out=o,e.next_in=r,e.next_in_index=i,e.avail_in=l,n.p=u,n.L=a;}function N(){u=0,a=0;}function j(){if(0==l)throw new x_;l--,u+=(255&r[i])<<a,i++,u>>>=0,a+=8;}function Q(e){for(;a<e;)j();}function S(e){return u&(1<<e)-1}function D(e){u>>>=e,a-=e;}function $(){u>>>=7&a,a-=7&a;}}function en(e){return Ke(e)?-2:0}var X_=65536,tr=32768,Y_=class{constructor(e=16,t=X_){this.Ct=[],this.Gt=e;for(let n=0;n<N.min(e,4);n++)this.Ct.push(new x(t));}acquire(e=X_){for(let t=this.Ct.length-1;t>=0;t--){let n=this.Ct[t];if(n.length>=e)return this.Ct.splice(t,1),n}return new x(e)}release(e){this.Ct.length<this.Gt&&this.Ct.push(e);}};function _n(e){let t=new Y_(32,X_),n=null;function r(e){try{t.release(e);}catch{}}return new U({start(){},transform(i,f){if(!n){let t=e.en(),r=e.tn(t);if(0!=r&&0!=r)throw new R("init failed: "+r);n={o:t};}let _=n.o,l=0;for(;l<i.length;){let n=N.min(i.length-l,tr),o=i.subarray(l,l+n);for(_.next_in=o,_.next_in_index=0,_.avail_in=o.length;_.avail_in>0;){let n=t.acquire(),i=false;try{_.next_out=n,_.next_out_index=0,_.avail_out=n.length;let r=e.nn(_,0),l=n.length-_.avail_out;if(l>0){let e=!1,r={rn:n.subarray(0,l),release:()=>{e||(e=!0,t.release(n));}};i=!0,f.enqueue(r);}if(0!=r&&1!=r)throw new R("process error: "+r)}finally{i||r(n);}}l+=n;}},flush(i){if(!n)return;let f=n.o;for(;;){let n=t.acquire(),_=false;try{f.next_out=n,f.next_out_index=0,f.avail_out=n.length;let r=e.nn(f,4),l=n.length-f.avail_out;if(l>0){let e=!1,r={rn:n.subarray(0,l),release:()=>{e||(e=!0,t.release(n));}};_=!0,i.enqueue(r);}if(1==r)break;if(0!=r)throw new R("finalization error: "+r)}finally{_||r(n);}}let _=e.fn(f);if(0!=_&&0!=_)throw new R("end failed: "+_)}})}function tn(){return new U({start(){},transform(e,t){try{t.enqueue(e.rn.slice(0));}finally{e.release();}},flush(){}})}function nr(e="deflate",t){let n="gzip"==e?31:"deflate-raw"==e?-15:15,r=t&&"number"==typeof t.level?t.level:-1;return _n({en:()=>Dt(),tn:e=>vt(e,r,8,n,8,0),nn:It,fn:F_})}function rr(e="deflate"){let t="gzip"==e?31:"deflate-raw"==e?-15:"deflate64-raw"==e?-16:15;return _n({en:()=>Jt(),tn:e=>Qt(e,t),nn:$t,fn:en})}var p_=class{constructor(e="deflate",t){let n=nr(e,t);this.writable=n.writable,this.readable=n.readable.pipeThrough(tn());}},S_=class{constructor(e="deflate"){let t=rr(e);this.writable=t.writable,this.readable=t.readable.pipeThrough(tn());}};
|
|
6990
6787
|
|
|
6991
6788
|
/*
|
|
6992
6789
|
Copyright (c) 2025 Gildas Lormeau. All rights reserved.
|
|
@@ -7020,8 +6817,8 @@ var{Uint8Array:x,Uint16Array:E,Int32Array:H,TransformStream:U,Math:N,Error:z,Arr
|
|
|
7020
6817
|
configure({
|
|
7021
6818
|
workerURI: "./core/web-worker-native.js",
|
|
7022
6819
|
wasmURI: null,
|
|
7023
|
-
CompressionStreamZlib:
|
|
7024
|
-
DecompressionStreamZlib:
|
|
6820
|
+
CompressionStreamZlib: p_,
|
|
6821
|
+
DecompressionStreamZlib: S_
|
|
7025
6822
|
});
|
|
7026
6823
|
|
|
7027
6824
|
/*
|
|
@@ -7077,8 +6874,6 @@ class ZipEntry {
|
|
|
7077
6874
|
uncompressedSize: params.uncompressedSize || 0,
|
|
7078
6875
|
passThrough: params.passThrough
|
|
7079
6876
|
});
|
|
7080
|
-
// detached entries (e.g. clones) are not registered until they are attached,
|
|
7081
|
-
// otherwise they could never be garbage collected
|
|
7082
6877
|
if (parent || !fs.root) {
|
|
7083
6878
|
fs.entries[zipEntry.id] = zipEntry;
|
|
7084
6879
|
}
|
|
@@ -7147,7 +6942,7 @@ class ZipFileEntry extends ZipEntry {
|
|
|
7147
6942
|
if (!writer || (writer.constructor == zipEntry.Writer && zipEntry.data)) {
|
|
7148
6943
|
return zipEntry.data;
|
|
7149
6944
|
} else {
|
|
7150
|
-
const reader = zipEntry.reader =
|
|
6945
|
+
const reader = zipEntry.reader = createReader(zipEntry.Reader, zipEntry.data, options);
|
|
7151
6946
|
const uncompressedSize = zipEntry.data ? zipEntry.data.uncompressedSize : reader.size;
|
|
7152
6947
|
await Promise.all([initStream(reader), initStream(writer, uncompressedSize)]);
|
|
7153
6948
|
const { readable } = reader;
|
|
@@ -7203,11 +6998,7 @@ class ZipFileEntry extends ZipEntry {
|
|
|
7203
6998
|
}
|
|
7204
6999
|
|
|
7205
7000
|
async getArrayBuffer(options) {
|
|
7206
|
-
// this.data may be a string, a Uint8Array, a data URI or a Blob depending on how the entry
|
|
7207
|
-
// was created, so retrieve the bytes through getUint8Array rather than assuming a Blob; this
|
|
7208
|
-
// also applies the options (password, signal, onprogress...) like the other getData() getters
|
|
7209
7001
|
const array = await this.getUint8Array(options);
|
|
7210
|
-
// return the backing buffer directly when the array spans it, slicing the exact bytes otherwise
|
|
7211
7002
|
return array.byteOffset || array.byteLength != array.buffer.byteLength
|
|
7212
7003
|
? array.buffer.slice(array.byteOffset, array.byteOffset + array.byteLength)
|
|
7213
7004
|
: array.buffer;
|
|
@@ -7577,7 +7368,6 @@ class FS {
|
|
|
7577
7368
|
node = node.getChildByName(path[index]);
|
|
7578
7369
|
}
|
|
7579
7370
|
if (!node) {
|
|
7580
|
-
// exclude detached entries, e.g. clones registered in `entries` but not attached
|
|
7581
7371
|
node = this.entries.find(entry => entry && (entry == this.root || entry.isDescendantOf(this.root)) &&
|
|
7582
7372
|
entry.getRelativeName() == fullname);
|
|
7583
7373
|
}
|
|
@@ -7749,10 +7539,13 @@ function getZipBlobReader(options) {
|
|
|
7749
7539
|
};
|
|
7750
7540
|
}
|
|
7751
7541
|
|
|
7542
|
+
function createReader(Reader, data, options) {
|
|
7543
|
+
return Reader.prototype ? new Reader(data, options) : Reader(data, options);
|
|
7544
|
+
}
|
|
7545
|
+
|
|
7752
7546
|
async function initReaders(entry, options) {
|
|
7753
7547
|
const fileEntries = [];
|
|
7754
7548
|
const pendingEntries = [entry];
|
|
7755
|
-
// per-export map so concurrent exports do not share (and lock) the same readers
|
|
7756
7549
|
const readers = new Map();
|
|
7757
7550
|
while (pendingEntries.length) {
|
|
7758
7551
|
const pendingEntry = pendingEntries.pop();
|
|
@@ -7765,7 +7558,7 @@ async function initReaders(entry, options) {
|
|
|
7765
7558
|
}
|
|
7766
7559
|
}
|
|
7767
7560
|
await Promise.all(fileEntries.map(async child => {
|
|
7768
|
-
const reader = child.reader =
|
|
7561
|
+
const reader = child.reader = createReader(child.Reader, child.data, options);
|
|
7769
7562
|
readers.set(child, reader);
|
|
7770
7563
|
try {
|
|
7771
7564
|
await initStream(reader);
|
|
@@ -7930,7 +7723,6 @@ async function exportFileSystemHandle(zipEntry, directoryHandle, options) {
|
|
|
7930
7723
|
return directoryHandle;
|
|
7931
7724
|
|
|
7932
7725
|
async function exportChildren(entry, parentHandle) {
|
|
7933
|
-
// Separate files have no ordering constraint, so they can be written concurrently on demand.
|
|
7934
7726
|
if (options.concurrent) {
|
|
7935
7727
|
const results = await Promise.allSettled(entry.children.map(child => exportChild(child, parentHandle)));
|
|
7936
7728
|
const failedResult = results.find(result => result.status == "rejected");
|
|
@@ -7952,8 +7744,6 @@ async function exportFileSystemHandle(zipEntry, directoryHandle, options) {
|
|
|
7952
7744
|
} else {
|
|
7953
7745
|
const fileHandle = await parentHandle.getFileHandle(child.name, { create: true });
|
|
7954
7746
|
const writable = await fileHandle.createWritable();
|
|
7955
|
-
// getData() streams the entry's data into `writable` and closes it (a FileSystemWritableFileStream
|
|
7956
|
-
// only commits the file on close), applying options such as password, signal and onprogress.
|
|
7957
7747
|
await child.getData({ writable }, Object.assign({}, options, {
|
|
7958
7748
|
onprogress: async progress => {
|
|
7959
7749
|
if (options.onprogress) {
|
|
@@ -8272,7 +8062,6 @@ const table = {
|
|
|
8272
8062
|
"x-doom": "wad",
|
|
8273
8063
|
"x-dvi": "dvi",
|
|
8274
8064
|
"x-httpd-eruby": "rhtml",
|
|
8275
|
-
"x-font": "pcf.Z",
|
|
8276
8065
|
"x-freemind": "mm",
|
|
8277
8066
|
"x-gnumeric": "gnumeric",
|
|
8278
8067
|
"x-go-sgf": "sgf",
|
|
@@ -8959,7 +8748,7 @@ const table = {
|
|
|
8959
8748
|
"x-msbinder": "obd",
|
|
8960
8749
|
"x-mscardfile": "crd",
|
|
8961
8750
|
"x-msclip": "clp",
|
|
8962
|
-
"
|
|
8751
|
+
"x-ms-installer": "msi",
|
|
8963
8752
|
"x-msmediaview": [
|
|
8964
8753
|
"mvb",
|
|
8965
8754
|
"m13",
|
|
@@ -9322,7 +9111,10 @@ const table = {
|
|
|
9322
9111
|
],
|
|
9323
9112
|
"x-tga": "tga",
|
|
9324
9113
|
"cis-cod": "cod",
|
|
9325
|
-
"avif":
|
|
9114
|
+
"avif": [
|
|
9115
|
+
"avif",
|
|
9116
|
+
"avifs"
|
|
9117
|
+
],
|
|
9326
9118
|
"heic": [
|
|
9327
9119
|
"heif",
|
|
9328
9120
|
"heic"
|
|
@@ -9541,7 +9333,6 @@ const table = {
|
|
|
9541
9333
|
"vnd.wap.sl": "sl"
|
|
9542
9334
|
},
|
|
9543
9335
|
"video": {
|
|
9544
|
-
"avif": "avif",
|
|
9545
9336
|
"3gpp": "3gp",
|
|
9546
9337
|
"annodex": "axv",
|
|
9547
9338
|
"dl": "dl",
|
|
@@ -9660,25 +9451,29 @@ const table = {
|
|
|
9660
9451
|
}
|
|
9661
9452
|
};
|
|
9662
9453
|
|
|
9663
|
-
|
|
9664
|
-
|
|
9665
|
-
|
|
9666
|
-
|
|
9667
|
-
|
|
9668
|
-
|
|
9669
|
-
|
|
9670
|
-
|
|
9671
|
-
|
|
9672
|
-
|
|
9454
|
+
let mimeTypes;
|
|
9455
|
+
|
|
9456
|
+
function getMimeType(filename) {
|
|
9457
|
+
return filename && getMimeTypes()[filename.split(".").pop().toLowerCase()] || getMimeType$1();
|
|
9458
|
+
}
|
|
9459
|
+
|
|
9460
|
+
function getMimeTypes() {
|
|
9461
|
+
if (!mimeTypes) {
|
|
9462
|
+
mimeTypes = {};
|
|
9463
|
+
for (const type of Object.keys(table)) {
|
|
9464
|
+
for (const subtype of Object.keys(table[type])) {
|
|
9465
|
+
const value = table[type][subtype];
|
|
9466
|
+
if (typeof value == "string") {
|
|
9467
|
+
mimeTypes[value] = type + "/" + subtype;
|
|
9468
|
+
} else {
|
|
9469
|
+
for (let indexMimeType = 0; indexMimeType < value.length; indexMimeType++) {
|
|
9470
|
+
mimeTypes[value[indexMimeType]] = type + "/" + subtype;
|
|
9471
|
+
}
|
|
9673
9472
|
}
|
|
9674
9473
|
}
|
|
9675
9474
|
}
|
|
9676
9475
|
}
|
|
9677
9476
|
return mimeTypes;
|
|
9678
|
-
})();
|
|
9679
|
-
|
|
9680
|
-
function getMimeType(filename) {
|
|
9681
|
-
return filename && mimeTypes[filename.split(".").pop().toLowerCase()] || getMimeType$1();
|
|
9682
9477
|
}
|
|
9683
9478
|
|
|
9684
9479
|
/*
|
|
@@ -9710,7 +9505,7 @@ function getMimeType(filename) {
|
|
|
9710
9505
|
*/
|
|
9711
9506
|
|
|
9712
9507
|
|
|
9713
|
-
|
|
9508
|
+
f(configure);
|
|
9714
9509
|
|
|
9715
9510
|
exports.BlobReader = BlobReader;
|
|
9716
9511
|
exports.BlobWriter = BlobWriter;
|
|
@@ -9736,6 +9531,7 @@ exports.ERR_INVALID_PASSWORD = ERR_INVALID_PASSWORD;
|
|
|
9736
9531
|
exports.ERR_INVALID_SIGNATURE = ERR_INVALID_SIGNATURE;
|
|
9737
9532
|
exports.ERR_INVALID_UNCOMPRESSED_SIZE = ERR_INVALID_UNCOMPRESSED_SIZE;
|
|
9738
9533
|
exports.ERR_INVALID_VERSION = ERR_INVALID_VERSION;
|
|
9534
|
+
exports.ERR_ITERATOR_COMPLETED_TOO_SOON = ERR_ITERATOR_COMPLETED_TOO_SOON;
|
|
9739
9535
|
exports.ERR_LOCAL_FILE_HEADER_NOT_FOUND = ERR_LOCAL_FILE_HEADER_NOT_FOUND;
|
|
9740
9536
|
exports.ERR_OVERLAPPING_ENTRY = ERR_OVERLAPPING_ENTRY;
|
|
9741
9537
|
exports.ERR_SPLIT_ZIP_FILE = ERR_SPLIT_ZIP_FILE;
|
|
@@ -9744,6 +9540,7 @@ exports.ERR_UNDEFINED_UNCOMPRESSED_SIZE = ERR_UNDEFINED_UNCOMPRESSED_SIZE;
|
|
|
9744
9540
|
exports.ERR_UNSUPPORTED_COMPRESSION = ERR_UNSUPPORTED_COMPRESSION$1;
|
|
9745
9541
|
exports.ERR_UNSUPPORTED_ENCRYPTION = ERR_UNSUPPORTED_ENCRYPTION;
|
|
9746
9542
|
exports.ERR_UNSUPPORTED_FORMAT = ERR_UNSUPPORTED_FORMAT;
|
|
9543
|
+
exports.ERR_WRITER_NOT_INITIALIZED = ERR_WRITER_NOT_INITIALIZED;
|
|
9747
9544
|
exports.ERR_ZIP_NOT_EMPTY = ERR_ZIP_NOT_EMPTY;
|
|
9748
9545
|
exports.HttpRangeReader = HttpRangeReader;
|
|
9749
9546
|
exports.HttpReader = HttpReader;
|