@zip.js/zip.js 2.8.29 → 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/BENCHMARKS.md +35 -0
- package/deno.json +5 -4
- package/dist/zip-core.js +496 -218
- package/dist/zip-core.min.js +1 -1
- package/dist/zip-fs-core.js +398 -195
- package/dist/zip-fs-core.min.js +1 -1
- package/dist/zip-fs-native.js +588 -254
- package/dist/zip-fs-native.min.js +1 -1
- package/dist/zip-fs.js +587 -253
- package/dist/zip-fs.min.js +1 -1
- package/dist/zip-legacy.js +501 -223
- package/dist/zip-legacy.min.js +1 -1
- package/dist/zip-module.wasm +0 -0
- package/dist/zip-native.js +504 -226
- 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 +503 -225
- package/dist/zip.min.js +1 -1
- package/index-native.cjs +588 -254
- package/index-native.min.js +1 -1
- package/index.cjs +587 -253
- package/index.d.cts +2814 -0
- package/index.d.ts +364 -1
- 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/options.js +11 -1
- package/lib/core/streams/aes-crypto-stream.js +16 -20
- package/lib/core/streams/codecs/crc32.js +39 -11
- 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 +69 -19
- 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 +139 -0
- 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 +61 -10
- package/lib/core/zip-reader.js +162 -53
- package/lib/core/zip-writer.js +34 -41
- 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 +7 -2
- package/package.json +9 -6
- package/reserved-property-names.js +50 -0
- package/lib/core/util/mini-lz.js +0 -198
package/dist/zip-fs-native.js
CHANGED
|
@@ -113,6 +113,8 @@
|
|
|
113
113
|
const FUNCTION_TYPE = "function";
|
|
114
114
|
const OBJECT_TYPE = "object";
|
|
115
115
|
|
|
116
|
+
const EMPTY_UINT8_ARRAY = new Uint8Array();
|
|
117
|
+
|
|
116
118
|
/*
|
|
117
119
|
Copyright (c) 2025 Gildas Lormeau. All rights reserved.
|
|
118
120
|
|
|
@@ -164,6 +166,22 @@
|
|
|
164
166
|
DecompressionStream: typeof DecompressionStream != UNDEFINED_TYPE && DecompressionStream
|
|
165
167
|
};
|
|
166
168
|
|
|
169
|
+
const CONFIGURABLE_PROPERTY_NAMES = [
|
|
170
|
+
"baseURI",
|
|
171
|
+
"wasmURI",
|
|
172
|
+
"workerURI",
|
|
173
|
+
"chunkSize",
|
|
174
|
+
"maxWorkers",
|
|
175
|
+
"terminateWorkerTimeout",
|
|
176
|
+
"workerStarvationTimeout",
|
|
177
|
+
"useCompressionStream",
|
|
178
|
+
"useWebWorkers",
|
|
179
|
+
"CompressionStream",
|
|
180
|
+
"DecompressionStream",
|
|
181
|
+
"CompressionStreamZlib",
|
|
182
|
+
"DecompressionStreamZlib"
|
|
183
|
+
];
|
|
184
|
+
|
|
167
185
|
const config = Object.assign({}, DEFAULT_CONFIGURATION);
|
|
168
186
|
|
|
169
187
|
function getConfiguration() {
|
|
@@ -175,43 +193,15 @@
|
|
|
175
193
|
}
|
|
176
194
|
|
|
177
195
|
function configure(configuration) {
|
|
178
|
-
const {
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
CompressionStream,
|
|
187
|
-
DecompressionStream,
|
|
188
|
-
CompressionStreamZlib,
|
|
189
|
-
DecompressionStreamZlib,
|
|
190
|
-
workerURI,
|
|
191
|
-
wasmURI
|
|
192
|
-
} = configuration;
|
|
193
|
-
setIfDefined("baseURI", baseURI);
|
|
194
|
-
setIfDefined("wasmURI", wasmURI);
|
|
195
|
-
setIfDefined("workerURI", workerURI);
|
|
196
|
-
setIfDefined("chunkSize", chunkSize);
|
|
197
|
-
setIfDefined("maxWorkers", maxWorkers);
|
|
198
|
-
setIfDefined("terminateWorkerTimeout", terminateWorkerTimeout);
|
|
199
|
-
setIfDefined("workerStarvationTimeout", workerStarvationTimeout);
|
|
200
|
-
setIfDefined("useCompressionStream", useCompressionStream);
|
|
201
|
-
setIfDefined("useWebWorkers", useWebWorkers);
|
|
202
|
-
setIfDefined("CompressionStream", CompressionStream);
|
|
203
|
-
setIfDefined("DecompressionStream", DecompressionStream);
|
|
204
|
-
setIfDefined("CompressionStreamZlib", CompressionStreamZlib);
|
|
205
|
-
setIfDefined("DecompressionStreamZlib", DecompressionStreamZlib);
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
function setIfDefined(propertyName, propertyValue) {
|
|
209
|
-
if (propertyValue !== UNDEFINED_VALUE) {
|
|
210
|
-
config[propertyName] = propertyValue;
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
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 C=0;B>C;C+=4){const B=A.indexOf(g[C])<<18|A.indexOf(g[C+1])<<12|(63&A.indexOf(g[C+2]))<<6|63&A.indexOf(g[C+3]);I.push(B>>16&255),"="!==g[C+2]&&I.push(B>>8&255),"="!==g[C+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 E=g[A++];if(128&E){const Q=3+(127&E),Y=g[A++]<<8|g[A++],D=I-Y;C(I+Q);for(let A=0;Q>A;A++)B[I++]=B[D+A];}else {const Q=E;C(I+Q);for(let C=0;Q>C&&A<g.length;C++)B[I++]=g[A++];}}return (g=>{let B="";const I=g.length;let C=0;for(;I>C+2;C+=3){const I=g[C]<<16|g[C+1]<<8|g[C+2];B+=A[I>>18&63]+A[I>>12&63]+A[I>>6&63]+A[63&I];}const E=I-C;if(1===E){const I=g[C]<<16;B+=A[I>>18&63]+A[I>>12&63]+"==";}else if(2===E){const I=g[C]<<16|g[C+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 C(A){if(B.length<A){let g=2*B.length;for(;A>g;)g*=2;const C=new Uint8Array(g);C.set(B.subarray(0,I)),B=C;}}})("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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}});}
|
|
196
|
+
for (const propertyName of CONFIGURABLE_PROPERTY_NAMES) {
|
|
197
|
+
const propertyValue = configuration[propertyName];
|
|
198
|
+
if (propertyValue !== UNDEFINED_VALUE) {
|
|
199
|
+
config[propertyName] = propertyValue;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
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)}});}
|
|
215
205
|
|
|
216
206
|
/*
|
|
217
207
|
Copyright (c) 2022 Gildas Lormeau. All rights reserved.
|
|
@@ -241,18 +231,30 @@
|
|
|
241
231
|
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
242
232
|
*/
|
|
243
233
|
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
234
|
+
// Slicing-by-8 CRC-32 (Intel / zlib). The eight 256-entry tables let the inner loop
|
|
235
|
+
// consume 8 bytes per iteration with a shorter dependency chain, ~4x the byte-at-a-time
|
|
236
|
+
// rate (measured ~320 -> ~1400 MB/s on 64KB chunks).
|
|
237
|
+
//
|
|
238
|
+
// Every table MUST stay a PACKED_SMI array: build with array literals (not `new Array(n)`,
|
|
239
|
+
// which is HOLEY) and store the signed int32 XOR result (no `>>> 0`). An unsigned or holey
|
|
240
|
+
// table becomes a V8 FixedDoubleArray whose every hot-loop lookup unboxes a double (~1.6x
|
|
241
|
+
// slower). Signedness is irrelevant to the result — the reads mask/shift it and the final
|
|
242
|
+
// `~crc` normalizes it. Do NOT reintroduce `>>> 0` here or switch to `new Array(256)`.
|
|
243
|
+
const T = [[], [], [], [], [], [], [], []];
|
|
244
|
+
for (let n = 0; n < 256; n++) {
|
|
245
|
+
let t = n;
|
|
247
246
|
for (let j = 0; j < 8; j++) {
|
|
248
|
-
|
|
249
|
-
t = (t >>> 1) ^ 0xEDB88320;
|
|
250
|
-
} else {
|
|
251
|
-
t = t >>> 1;
|
|
252
|
-
}
|
|
247
|
+
t = (t & 1) ? (t >>> 1) ^ 0xEDB88320 : t >>> 1;
|
|
253
248
|
}
|
|
254
|
-
|
|
249
|
+
T[0][n] = t;
|
|
255
250
|
}
|
|
251
|
+
for (let n = 0; n < 256; n++) {
|
|
252
|
+
for (let k = 1; k < 8; k++) {
|
|
253
|
+
const previous = T[k - 1][n];
|
|
254
|
+
T[k][n] = (previous >>> 8) ^ T[0][previous & 0xFF];
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
const [T0, T1, T2, T3, T4, T5, T6, T7] = T;
|
|
256
258
|
|
|
257
259
|
class Crc32 {
|
|
258
260
|
|
|
@@ -262,8 +264,24 @@
|
|
|
262
264
|
|
|
263
265
|
append(data) {
|
|
264
266
|
let crc = this.crc | 0;
|
|
265
|
-
|
|
266
|
-
|
|
267
|
+
const length = data.length | 0;
|
|
268
|
+
let offset = 0;
|
|
269
|
+
// Process 8 bytes per iteration over the typed-array body. DataView.getInt32(le)
|
|
270
|
+
// reads an unaligned little-endian word as a signed int32 (no double boxing), so no
|
|
271
|
+
// alignment or endianness handling is needed; data.buffer guards non-typed inputs.
|
|
272
|
+
if (length >= 8 && data.buffer) {
|
|
273
|
+
const view = new DataView(data.buffer, data.byteOffset, length);
|
|
274
|
+
const end = length - 8;
|
|
275
|
+
for (; offset <= end; offset += 8) {
|
|
276
|
+
const a = crc ^ view.getInt32(offset, true);
|
|
277
|
+
const b = view.getInt32(offset + 4, true);
|
|
278
|
+
crc = T7[a & 0xFF] ^ T6[(a >>> 8) & 0xFF] ^ T5[(a >>> 16) & 0xFF] ^ T4[(a >>> 24) & 0xFF] ^
|
|
279
|
+
T3[b & 0xFF] ^ T2[(b >>> 8) & 0xFF] ^ T1[(b >>> 16) & 0xFF] ^ T0[(b >>> 24) & 0xFF];
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
// Remaining tail (and non-typed inputs) byte-at-a-time with the base table.
|
|
283
|
+
for (; offset < length; offset++) {
|
|
284
|
+
crc = (crc >>> 8) ^ T0[(crc ^ data[offset]) & 0xFF];
|
|
267
285
|
}
|
|
268
286
|
this.crc = crc;
|
|
269
287
|
}
|
|
@@ -1196,8 +1214,6 @@
|
|
|
1196
1214
|
if (GET_RANDOM_VALUES_SUPPORTED) {
|
|
1197
1215
|
return crypto.getRandomValues(array);
|
|
1198
1216
|
} else {
|
|
1199
|
-
// all supported runtimes expose crypto.getRandomValues; failing hard beats
|
|
1200
|
-
// silently generating predictable encryption salts
|
|
1201
1217
|
throw new Error(ERR_UNSUPPORTED_CRYPTO_API);
|
|
1202
1218
|
}
|
|
1203
1219
|
}
|
|
@@ -1260,12 +1276,7 @@
|
|
|
1260
1276
|
constructor({ password, rawPassword, encryptionStrength, checkPasswordOnly }) {
|
|
1261
1277
|
super({
|
|
1262
1278
|
start() {
|
|
1263
|
-
|
|
1264
|
-
ready: new Promise(resolve => this.resolveReady = resolve),
|
|
1265
|
-
password: encodePassword(password, rawPassword),
|
|
1266
|
-
strength: encryptionStrength - 1,
|
|
1267
|
-
pending: new Uint8Array()
|
|
1268
|
-
});
|
|
1279
|
+
initAesCrypto(this, password, rawPassword, encryptionStrength);
|
|
1269
1280
|
},
|
|
1270
1281
|
async transform(chunk, controller) {
|
|
1271
1282
|
const aesCrypto = this;
|
|
@@ -1300,7 +1311,7 @@
|
|
|
1300
1311
|
await ready;
|
|
1301
1312
|
const chunkToDecrypt = subarray(pending, 0, pending.length - SIGNATURE_LENGTH);
|
|
1302
1313
|
const originalSignature = subarray(pending, pending.length - SIGNATURE_LENGTH);
|
|
1303
|
-
let decryptedChunkArray =
|
|
1314
|
+
let decryptedChunkArray = EMPTY_UINT8_ARRAY;
|
|
1304
1315
|
if (chunkToDecrypt.length) {
|
|
1305
1316
|
const encryptedChunk = toBits(codecBytes, chunkToDecrypt);
|
|
1306
1317
|
hmac.update(encryptedChunk);
|
|
@@ -1308,8 +1319,6 @@
|
|
|
1308
1319
|
decryptedChunkArray = fromBits(codecBytes, decryptedChunk);
|
|
1309
1320
|
}
|
|
1310
1321
|
const signature = subarray(fromBits(codecBytes, hmac.digest()), 0, SIGNATURE_LENGTH);
|
|
1311
|
-
// branch-free comparison: accumulate the differences instead of
|
|
1312
|
-
// short-circuiting on the first mismatching byte
|
|
1313
1322
|
let invalidSignature = pending.length < SIGNATURE_LENGTH ? 1 : 0;
|
|
1314
1323
|
for (let indexSignature = 0; indexSignature < SIGNATURE_LENGTH; indexSignature++) {
|
|
1315
1324
|
invalidSignature |= signature[indexSignature] ^ originalSignature[indexSignature];
|
|
@@ -1331,12 +1340,7 @@
|
|
|
1331
1340
|
let stream;
|
|
1332
1341
|
super({
|
|
1333
1342
|
start() {
|
|
1334
|
-
|
|
1335
|
-
ready: new Promise(resolve => this.resolveReady = resolve),
|
|
1336
|
-
password: encodePassword(password, rawPassword),
|
|
1337
|
-
strength: encryptionStrength - 1,
|
|
1338
|
-
pending: new Uint8Array()
|
|
1339
|
-
});
|
|
1343
|
+
initAesCrypto(this, password, rawPassword, encryptionStrength);
|
|
1340
1344
|
},
|
|
1341
1345
|
async transform(chunk, controller) {
|
|
1342
1346
|
const aesCrypto = this;
|
|
@@ -1346,7 +1350,7 @@
|
|
|
1346
1350
|
resolveReady,
|
|
1347
1351
|
ready
|
|
1348
1352
|
} = aesCrypto;
|
|
1349
|
-
let preamble =
|
|
1353
|
+
let preamble = EMPTY_UINT8_ARRAY;
|
|
1350
1354
|
if (password) {
|
|
1351
1355
|
preamble = await createEncryptionKeys(aesCrypto, strength, password);
|
|
1352
1356
|
resolveReady();
|
|
@@ -1366,7 +1370,7 @@
|
|
|
1366
1370
|
} = this;
|
|
1367
1371
|
if (hmac && ctr) {
|
|
1368
1372
|
await ready;
|
|
1369
|
-
let encryptedChunkArray =
|
|
1373
|
+
let encryptedChunkArray = EMPTY_UINT8_ARRAY;
|
|
1370
1374
|
if (pending.length) {
|
|
1371
1375
|
const encryptedChunk = ctr.update(toBits(codecBytes, pending));
|
|
1372
1376
|
hmac.update(encryptedChunk);
|
|
@@ -1381,6 +1385,15 @@
|
|
|
1381
1385
|
}
|
|
1382
1386
|
}
|
|
1383
1387
|
|
|
1388
|
+
function initAesCrypto(aesCrypto, password, rawPassword, encryptionStrength) {
|
|
1389
|
+
Object.assign(aesCrypto, {
|
|
1390
|
+
ready: new Promise(resolve => aesCrypto.resolveReady = resolve),
|
|
1391
|
+
password: encodePassword(password, rawPassword),
|
|
1392
|
+
strength: encryptionStrength - 1,
|
|
1393
|
+
pending: EMPTY_UINT8_ARRAY
|
|
1394
|
+
});
|
|
1395
|
+
}
|
|
1396
|
+
|
|
1384
1397
|
function append(aesCrypto, input, output, paddingStart, paddingEnd, verifySignature) {
|
|
1385
1398
|
const {
|
|
1386
1399
|
ctr,
|
|
@@ -1542,20 +1555,13 @@
|
|
|
1542
1555
|
constructor({ password, rawPassword, passwordVerification, checkPasswordOnly }) {
|
|
1543
1556
|
super({
|
|
1544
1557
|
start() {
|
|
1545
|
-
|
|
1546
|
-
password,
|
|
1547
|
-
rawPassword,
|
|
1548
|
-
passwordVerification
|
|
1549
|
-
});
|
|
1550
|
-
createKeys(this, password, rawPassword);
|
|
1558
|
+
initZipCrypto(this, password, rawPassword, passwordVerification);
|
|
1551
1559
|
},
|
|
1552
1560
|
transform(chunk, controller) {
|
|
1553
1561
|
const zipCrypto = this;
|
|
1554
1562
|
if (zipCrypto.password || zipCrypto.rawPassword) {
|
|
1555
1563
|
const decryptedHeader = decrypt(zipCrypto, chunk.subarray(0, HEADER_LENGTH));
|
|
1556
1564
|
zipCrypto.password = zipCrypto.rawPassword = null;
|
|
1557
|
-
// verify the password with a branch-free comparison of the verification byte, mirroring
|
|
1558
|
-
// the constant-time AES HMAC signature check
|
|
1559
1565
|
if ((decryptedHeader.at(-1) ^ zipCrypto.passwordVerification) != 0) {
|
|
1560
1566
|
throw new Error(ERR_INVALID_PASSWORD);
|
|
1561
1567
|
}
|
|
@@ -1576,12 +1582,7 @@
|
|
|
1576
1582
|
constructor({ password, rawPassword, passwordVerification }) {
|
|
1577
1583
|
super({
|
|
1578
1584
|
start() {
|
|
1579
|
-
|
|
1580
|
-
password,
|
|
1581
|
-
rawPassword,
|
|
1582
|
-
passwordVerification
|
|
1583
|
-
});
|
|
1584
|
-
createKeys(this, password, rawPassword);
|
|
1585
|
+
initZipCrypto(this, password, rawPassword, passwordVerification);
|
|
1585
1586
|
},
|
|
1586
1587
|
transform(chunk, controller) {
|
|
1587
1588
|
const zipCrypto = this;
|
|
@@ -1605,6 +1606,15 @@
|
|
|
1605
1606
|
}
|
|
1606
1607
|
}
|
|
1607
1608
|
|
|
1609
|
+
function initZipCrypto(zipCrypto, password, rawPassword, passwordVerification) {
|
|
1610
|
+
Object.assign(zipCrypto, {
|
|
1611
|
+
password,
|
|
1612
|
+
rawPassword,
|
|
1613
|
+
passwordVerification
|
|
1614
|
+
});
|
|
1615
|
+
createKeys(zipCrypto, password, rawPassword);
|
|
1616
|
+
}
|
|
1617
|
+
|
|
1608
1618
|
function decrypt(target, input) {
|
|
1609
1619
|
const output = new Uint8Array(input.length);
|
|
1610
1620
|
for (let index = 0; index < input.length; index++) {
|
|
@@ -1697,21 +1707,32 @@
|
|
|
1697
1707
|
const ERR_INVALID_COMPRESSED_DATA = "Invalid compressed data";
|
|
1698
1708
|
const FORMAT_DEFLATE_RAW = "deflate-raw";
|
|
1699
1709
|
const FORMAT_DEFLATE64_RAW = "deflate64-raw";
|
|
1710
|
+
const FORMAT_GZIP = "gzip";
|
|
1711
|
+
const GZIP_HEADER_LENGTH = 10;
|
|
1712
|
+
const GZIP_TRAILER_LENGTH = 8;
|
|
1700
1713
|
|
|
1701
1714
|
class DeflateStream extends TransformStream {
|
|
1702
1715
|
|
|
1703
1716
|
constructor(options, { chunkSize, CompressionStreamZlib, CompressionStream }) {
|
|
1704
1717
|
super({});
|
|
1705
|
-
const { compressed, encrypted, useCompressionStream, zipCrypto, signed, level } = options;
|
|
1718
|
+
const { compressed, encrypted, useCompressionStream, zipCrypto, signed, level, deflate64 } = options;
|
|
1706
1719
|
const stream = this;
|
|
1707
|
-
let crc32Stream, encryptionStream;
|
|
1720
|
+
let crc32Stream, encryptionStream, gzipCrc32Stream;
|
|
1708
1721
|
let readable = super.readable;
|
|
1709
|
-
|
|
1722
|
+
const useGzipCrc32 = signed && compressed && !deflate64 && (!encrypted || zipCrypto) &&
|
|
1723
|
+
Boolean(useCompressionStream && CompressionStream);
|
|
1724
|
+
if ((!encrypted || zipCrypto) && signed && !useGzipCrc32) {
|
|
1710
1725
|
crc32Stream = new Crc32Stream();
|
|
1711
1726
|
readable = pipeThrough(readable, crc32Stream);
|
|
1712
1727
|
}
|
|
1713
1728
|
if (compressed) {
|
|
1714
|
-
|
|
1729
|
+
if (useGzipCrc32) {
|
|
1730
|
+
gzipCrc32Stream = new GzipToRawDeflateStream();
|
|
1731
|
+
readable = pipeThroughBackpressured(readable, new CompressionStream(FORMAT_GZIP));
|
|
1732
|
+
readable = pipeThrough(readable, gzipCrc32Stream);
|
|
1733
|
+
} else {
|
|
1734
|
+
readable = pipeThroughCommpressionStream(readable, useCompressionStream, { level, chunkSize }, CompressionStream, CompressionStreamZlib, CompressionStream);
|
|
1735
|
+
}
|
|
1715
1736
|
}
|
|
1716
1737
|
if (encrypted) {
|
|
1717
1738
|
if (zipCrypto) {
|
|
@@ -1727,13 +1748,64 @@
|
|
|
1727
1748
|
signature = encryptionStream.signature;
|
|
1728
1749
|
}
|
|
1729
1750
|
if ((!encrypted || zipCrypto) && signed) {
|
|
1730
|
-
signature = new DataView(crc32Stream.value.buffer).getUint32(0);
|
|
1751
|
+
signature = useGzipCrc32 ? gzipCrc32Stream.signature : new DataView(crc32Stream.value.buffer).getUint32(0);
|
|
1731
1752
|
}
|
|
1732
1753
|
stream.signature = signature;
|
|
1733
1754
|
});
|
|
1734
1755
|
}
|
|
1735
1756
|
}
|
|
1736
1757
|
|
|
1758
|
+
class GzipToRawDeflateStream extends TransformStream {
|
|
1759
|
+
|
|
1760
|
+
constructor() {
|
|
1761
|
+
// deno-lint-ignore prefer-const
|
|
1762
|
+
let stream;
|
|
1763
|
+
let headerLeft = GZIP_HEADER_LENGTH;
|
|
1764
|
+
let tail = new Uint8Array(0);
|
|
1765
|
+
super({
|
|
1766
|
+
transform(chunk, controller) {
|
|
1767
|
+
if (headerLeft) {
|
|
1768
|
+
const dropped = Math.min(headerLeft, chunk.length);
|
|
1769
|
+
headerLeft -= dropped;
|
|
1770
|
+
chunk = chunk.subarray(dropped);
|
|
1771
|
+
if (!chunk.length) {
|
|
1772
|
+
return;
|
|
1773
|
+
}
|
|
1774
|
+
}
|
|
1775
|
+
const available = tail.length + chunk.length;
|
|
1776
|
+
if (available <= GZIP_TRAILER_LENGTH) {
|
|
1777
|
+
const pending = new Uint8Array(available);
|
|
1778
|
+
pending.set(tail);
|
|
1779
|
+
pending.set(chunk, tail.length);
|
|
1780
|
+
tail = pending;
|
|
1781
|
+
return;
|
|
1782
|
+
}
|
|
1783
|
+
const emitLength = available - GZIP_TRAILER_LENGTH;
|
|
1784
|
+
const output = new Uint8Array(emitLength);
|
|
1785
|
+
const fromTail = Math.min(emitLength, tail.length);
|
|
1786
|
+
output.set(tail.subarray(0, fromTail), 0);
|
|
1787
|
+
if (emitLength > fromTail) {
|
|
1788
|
+
output.set(chunk.subarray(0, emitLength - fromTail), fromTail);
|
|
1789
|
+
}
|
|
1790
|
+
controller.enqueue(output);
|
|
1791
|
+
const nextTail = new Uint8Array(GZIP_TRAILER_LENGTH);
|
|
1792
|
+
const tailRemaining = tail.length - fromTail;
|
|
1793
|
+
if (tailRemaining) {
|
|
1794
|
+
nextTail.set(tail.subarray(fromTail), 0);
|
|
1795
|
+
}
|
|
1796
|
+
nextTail.set(chunk.subarray(emitLength - fromTail), tailRemaining);
|
|
1797
|
+
tail = nextTail;
|
|
1798
|
+
},
|
|
1799
|
+
flush() {
|
|
1800
|
+
const dataView = new DataView(tail.buffer, tail.byteOffset, tail.byteLength);
|
|
1801
|
+
stream.signature = dataView.getUint32(0, true);
|
|
1802
|
+
stream.uncompressedSize = dataView.getUint32(4, true);
|
|
1803
|
+
}
|
|
1804
|
+
});
|
|
1805
|
+
stream = this;
|
|
1806
|
+
}
|
|
1807
|
+
}
|
|
1808
|
+
|
|
1737
1809
|
class InflateStream extends TransformStream {
|
|
1738
1810
|
|
|
1739
1811
|
constructor(options, { chunkSize, DecompressionStreamZlib, DecompressionStream }) {
|
|
@@ -1796,11 +1868,6 @@
|
|
|
1796
1868
|
throw error;
|
|
1797
1869
|
}
|
|
1798
1870
|
}
|
|
1799
|
-
// The native CompressionStream/DecompressionStream and the pure-JS zlib port do not signal
|
|
1800
|
-
// backpressure on their writable side (their `ready` never pends), so a plain pipeThrough drains
|
|
1801
|
-
// the whole source into them and peak memory grows with the entry size. Awaiting each write()
|
|
1802
|
-
// paces the source to the codec's consumption rate, keeping streaming memory bounded. The WASM
|
|
1803
|
-
// codec already backpressures, so this is a no-op cost for it.
|
|
1804
1871
|
return pipeThroughBackpressured(readable, codecStream);
|
|
1805
1872
|
}
|
|
1806
1873
|
|
|
@@ -1808,10 +1875,6 @@
|
|
|
1808
1875
|
return readable.pipeThrough(transformStream);
|
|
1809
1876
|
}
|
|
1810
1877
|
|
|
1811
|
-
// Like readable.pipeThrough(transformStream), but drives the writable side manually and awaits each
|
|
1812
|
-
// write() so that a codec which under-reports backpressure cannot pull the whole source into memory.
|
|
1813
|
-
// Errors propagate in both directions: a source error aborts the codec; a downstream cancel/error
|
|
1814
|
-
// (surfaced through the codec's writable rejecting) cancels the source.
|
|
1815
1878
|
function pipeThroughBackpressured(readable, transformStream) {
|
|
1816
1879
|
const writer = transformStream.writable.getWriter();
|
|
1817
1880
|
const reader = readable.getReader();
|
|
@@ -1840,7 +1903,7 @@
|
|
|
1840
1903
|
try {
|
|
1841
1904
|
await writer.abort(error);
|
|
1842
1905
|
} catch {
|
|
1843
|
-
// the writable may already be errored/closed
|
|
1906
|
+
// ignored: the writable may already be errored/closed
|
|
1844
1907
|
}
|
|
1845
1908
|
}
|
|
1846
1909
|
|
|
@@ -1848,13 +1911,10 @@
|
|
|
1848
1911
|
try {
|
|
1849
1912
|
await reader.cancel(error);
|
|
1850
1913
|
} catch {
|
|
1851
|
-
// the readable may already be errored/closed
|
|
1914
|
+
// ignored: the readable may already be errored/closed
|
|
1852
1915
|
}
|
|
1853
1916
|
}
|
|
1854
1917
|
|
|
1855
|
-
// DecompressionStream implementations can fail with a message-less TypeError on malformed
|
|
1856
|
-
// input; give these errors an identifiable message (errors raised by the other stages of
|
|
1857
|
-
// the pipeline, e.g. ERR_INVALID_PASSWORD, always carry a message and pass through as-is)
|
|
1858
1918
|
function mapInflateStreamError(readable) {
|
|
1859
1919
|
const reader = readable.getReader();
|
|
1860
1920
|
return new ReadableStream({
|
|
@@ -2179,9 +2239,6 @@
|
|
|
2179
2239
|
try {
|
|
2180
2240
|
await initModule(config);
|
|
2181
2241
|
} catch {
|
|
2182
|
-
// The WASM module failed to load. Fall back to the native CompressionStream only if the
|
|
2183
|
-
// zlib codec that would otherwise run depends on that module; a self-contained codec
|
|
2184
|
-
// supplied through config (e.g. the pure-JS port) stays usable and is kept as requested.
|
|
2185
2242
|
const ZlibStream = options.codecType.startsWith(CODEC_DEFLATE) ?
|
|
2186
2243
|
config.CompressionStreamZlib :
|
|
2187
2244
|
config.DecompressionStreamZlib;
|
|
@@ -2259,7 +2316,6 @@
|
|
|
2259
2316
|
return resultValue;
|
|
2260
2317
|
} catch (error) {
|
|
2261
2318
|
await closeWritable();
|
|
2262
|
-
// unblock the pipe watcher if the worker died before closing its end of the stream
|
|
2263
2319
|
abortPipe();
|
|
2264
2320
|
try {
|
|
2265
2321
|
await closed;
|
|
@@ -2284,8 +2340,6 @@
|
|
|
2284
2340
|
const abortController = new AbortController();
|
|
2285
2341
|
const { writable, readable } = new TransformStream();
|
|
2286
2342
|
const closed = readable.pipeTo(writableSource, { preventClose: true, preventAbort: true, signal: abortController.signal });
|
|
2287
|
-
// the pipe can fail before `closed` is awaited (e.g. the destination write fails);
|
|
2288
|
-
// mark the rejection as handled so it cannot kill the process in the meantime
|
|
2289
2343
|
closed.catch(() => { });
|
|
2290
2344
|
return { writable, closed, abortPipe: () => abortController.abort() };
|
|
2291
2345
|
}
|
|
@@ -2378,8 +2432,6 @@
|
|
|
2378
2432
|
event.preventDefault();
|
|
2379
2433
|
}
|
|
2380
2434
|
const { rejectResult, writer, onTaskFinished } = workerData;
|
|
2381
|
-
// the worker is unusable (e.g. its script failed to load); terminate it and
|
|
2382
|
-
// fail the current task instead of letting it hang forever
|
|
2383
2435
|
terminateWorker$1(workerData);
|
|
2384
2436
|
if (rejectResult) {
|
|
2385
2437
|
rejectResult(event.error || new Error(event.message || ERROR_EVENT_TYPE));
|
|
@@ -2431,8 +2483,6 @@
|
|
|
2431
2483
|
async function onMessage({ data }, workerData) {
|
|
2432
2484
|
const { type, value, messageId, result, error } = data;
|
|
2433
2485
|
const { reader, writer, resolveResult, rejectResult, onTaskFinished, generation } = workerData;
|
|
2434
|
-
// continuations below can settle after the worker slot has been reassigned to a new
|
|
2435
|
-
// task (e.g. a pending pull read failing late); they must not touch the new task
|
|
2436
2486
|
const stale = () => workerData.generation != generation;
|
|
2437
2487
|
try {
|
|
2438
2488
|
if (error) {
|
|
@@ -2688,26 +2738,24 @@
|
|
|
2688
2738
|
class Reader extends Stream {
|
|
2689
2739
|
|
|
2690
2740
|
get readable() {
|
|
2741
|
+
return this.createReadable();
|
|
2742
|
+
}
|
|
2743
|
+
|
|
2744
|
+
createReadable({ offset = 0, size, diskNumberStart, chunkSize = DEFAULT_CHUNK_SIZE } = {}) {
|
|
2691
2745
|
const reader = this;
|
|
2692
|
-
|
|
2693
|
-
|
|
2694
|
-
start() {
|
|
2695
|
-
this.chunkOffset = 0;
|
|
2696
|
-
},
|
|
2746
|
+
let chunkOffset = 0;
|
|
2747
|
+
return new ReadableStream({
|
|
2697
2748
|
async pull(controller) {
|
|
2698
|
-
const { offset = 0, size, diskNumberStart } = readable;
|
|
2699
|
-
const { chunkOffset } = this;
|
|
2700
2749
|
const dataSize = size === UNDEFINED_VALUE ? chunkSize : Math.min(chunkSize, size - chunkOffset);
|
|
2701
2750
|
const data = await readUint8Array(reader, offset + chunkOffset, dataSize, diskNumberStart);
|
|
2702
2751
|
controller.enqueue(data);
|
|
2703
2752
|
if ((chunkOffset + chunkSize > size) || (size === UNDEFINED_VALUE && !data.length && dataSize)) {
|
|
2704
2753
|
controller.close();
|
|
2705
2754
|
} else {
|
|
2706
|
-
|
|
2755
|
+
chunkOffset += chunkSize;
|
|
2707
2756
|
}
|
|
2708
2757
|
}
|
|
2709
2758
|
});
|
|
2710
|
-
return readable;
|
|
2711
2759
|
}
|
|
2712
2760
|
}
|
|
2713
2761
|
|
|
@@ -2846,8 +2894,6 @@
|
|
|
2846
2894
|
}
|
|
2847
2895
|
});
|
|
2848
2896
|
writer.blob = new Response(transformStream.readable, { headers }).blob();
|
|
2849
|
-
// mark early rejections (e.g. aborted pipe) as handled; awaiting getData() still
|
|
2850
|
-
// surfaces them
|
|
2851
2897
|
writer.blob.catch(() => { });
|
|
2852
2898
|
}
|
|
2853
2899
|
|
|
@@ -3009,7 +3055,7 @@
|
|
|
3009
3055
|
return eocdCache;
|
|
3010
3056
|
}
|
|
3011
3057
|
if (index >= size || length === 0) {
|
|
3012
|
-
return
|
|
3058
|
+
return EMPTY_UINT8_ARRAY;
|
|
3013
3059
|
} else {
|
|
3014
3060
|
if (index + length > size) {
|
|
3015
3061
|
length = size - index;
|
|
@@ -3066,8 +3112,6 @@
|
|
|
3066
3112
|
async function getRequestData(httpReader, sendRequest) {
|
|
3067
3113
|
const response = await sendRequest(HTTP_METHOD_GET, httpReader, getHeaders(httpReader));
|
|
3068
3114
|
httpReader.data = new Uint8Array(await response.arrayBuffer());
|
|
3069
|
-
// the downloaded content is authoritative, e.g. the Content-Length response header
|
|
3070
|
-
// of the HEAD request can be the encoded size when the content is compressed
|
|
3071
3115
|
httpReader.size = httpReader.data.length;
|
|
3072
3116
|
}
|
|
3073
3117
|
|
|
@@ -3132,7 +3176,6 @@
|
|
|
3132
3176
|
super();
|
|
3133
3177
|
Object.assign(this, {
|
|
3134
3178
|
url,
|
|
3135
|
-
// an explicit fetch implementation takes precedence over useXHR
|
|
3136
3179
|
reader: options.useXHR && !options.fetch ? new XHRReader(url, options) : new FetchReader(url, options)
|
|
3137
3180
|
});
|
|
3138
3181
|
}
|
|
@@ -3271,7 +3314,7 @@
|
|
|
3271
3314
|
}
|
|
3272
3315
|
}
|
|
3273
3316
|
} else {
|
|
3274
|
-
result =
|
|
3317
|
+
result = EMPTY_UINT8_ARRAY;
|
|
3275
3318
|
}
|
|
3276
3319
|
reader.lastDiskNumber = Math.max(currentDiskNumber, reader.lastDiskNumber);
|
|
3277
3320
|
return result;
|
|
@@ -3316,8 +3359,6 @@
|
|
|
3316
3359
|
writer.diskOffset += diskSourceWriter.size;
|
|
3317
3360
|
writer.diskNumber++;
|
|
3318
3361
|
diskWriter = null;
|
|
3319
|
-
// the next disk is not opened yet but its space is available; leaving a
|
|
3320
|
-
// stale value here would force a new disk for every subsequent write
|
|
3321
3362
|
writer.availableSize = writer.maxSize;
|
|
3322
3363
|
if (chunk.length > availableSize) {
|
|
3323
3364
|
await this.write(chunk.subarray(availableSize));
|
|
@@ -3497,7 +3538,6 @@
|
|
|
3497
3538
|
if (encoding && encoding.trim().toLowerCase() == "cp437") {
|
|
3498
3539
|
return decodeCP437(value);
|
|
3499
3540
|
} else {
|
|
3500
|
-
// ignoreBOM keeps a leading U+FEFF in filenames/comments instead of dropping it
|
|
3501
3541
|
return new TextDecoder(encoding, { ignoreBOM: true }).decode(value);
|
|
3502
3542
|
}
|
|
3503
3543
|
}
|
|
@@ -3695,6 +3735,11 @@
|
|
|
3695
3735
|
const OPTION_OFFSET = "offset";
|
|
3696
3736
|
const OPTION_USDZ = "usdz";
|
|
3697
3737
|
const OPTION_UNIX_EXTRA_FIELD_TYPE = "unixExtraFieldType";
|
|
3738
|
+
const OPTION_STRICTNESS = "strictness";
|
|
3739
|
+
const OPTION_MAX_APPENDED_DATA_SIZE = "maxAppendedDataSize";
|
|
3740
|
+
const STRICTNESS_STRICT = "strict";
|
|
3741
|
+
const STRICTNESS_BALANCED = "balanced";
|
|
3742
|
+
const STRICTNESS_TOLERANT = "tolerant";
|
|
3698
3743
|
|
|
3699
3744
|
/*
|
|
3700
3745
|
Copyright (c) 2025 Gildas Lormeau. All rights reserved.
|
|
@@ -3740,8 +3785,6 @@
|
|
|
3740
3785
|
const CHARSET_UTF8 = "utf-8";
|
|
3741
3786
|
const PROPERTY_NAME_UTF8_SUFFIX = "UTF8";
|
|
3742
3787
|
const CHARSET_CP437 = "cp437";
|
|
3743
|
-
// bits of the general purpose flag that change how an entry is interpreted; the level bits (1-2) are excluded
|
|
3744
|
-
// because they are informative only
|
|
3745
3788
|
const BITFLAG_AMBIGUITY_MASK = BITFLAG_ENCRYPTED | BITFLAG_DATA_DESCRIPTOR | BITFLAG_LANG_ENCODING_FLAG;
|
|
3746
3789
|
const ZIP64_PROPERTIES = [
|
|
3747
3790
|
[PROPERTY_NAME_UNCOMPRESSED_SIZE, MAX_32_BITS],
|
|
@@ -3783,8 +3826,11 @@
|
|
|
3783
3826
|
if (reader.size < END_OF_CENTRAL_DIR_LENGTH) {
|
|
3784
3827
|
throw new Error(ERR_BAD_FORMAT);
|
|
3785
3828
|
}
|
|
3786
|
-
|
|
3787
|
-
const
|
|
3829
|
+
const strictness = getStrictness(getOptionValue$1(zipReader, options, OPTION_STRICTNESS), getOptionValue$1(zipReader, options, OPTION_CHECK_AMBIGUITY));
|
|
3830
|
+
const checkAmbiguity = strictness == STRICTNESS_STRICT;
|
|
3831
|
+
const rejectAmbiguousEndOfDirectory = strictness != STRICTNESS_TOLERANT;
|
|
3832
|
+
const maxAppendedDataSize = getMaxAppendedDataSize(getOptionValue$1(zipReader, options, OPTION_MAX_APPENDED_DATA_SIZE), strictness);
|
|
3833
|
+
const { endOfDirectoryInfo, endOfDirectoryReachingEndCount } = await findEndOfCentralDirectory(reader, rejectAmbiguousEndOfDirectory, maxAppendedDataSize);
|
|
3788
3834
|
if (!endOfDirectoryInfo) {
|
|
3789
3835
|
const signatureArray = await readUint8Array(reader, 0, 4);
|
|
3790
3836
|
const signatureView = getDataView$1(signatureArray);
|
|
@@ -3794,14 +3840,16 @@
|
|
|
3794
3840
|
throw new Error(ERR_EOCDR_NOT_FOUND);
|
|
3795
3841
|
}
|
|
3796
3842
|
}
|
|
3843
|
+
if (rejectAmbiguousEndOfDirectory && endOfDirectoryReachingEndCount > 1) {
|
|
3844
|
+
throwAmbiguousArchive("multiple end of central directory records");
|
|
3845
|
+
}
|
|
3797
3846
|
const endOfDirectoryView = getDataView$1(endOfDirectoryInfo);
|
|
3798
3847
|
let directoryDataLength = getUint32(endOfDirectoryView, 12);
|
|
3799
3848
|
let directoryDataOffset = getUint32(endOfDirectoryView, 16);
|
|
3800
3849
|
const commentOffset = endOfDirectoryInfo.offset;
|
|
3801
3850
|
const commentLength = getUint16(endOfDirectoryView, 20);
|
|
3802
3851
|
const appendedDataOffset = commentOffset + END_OF_CENTRAL_DIR_LENGTH + commentLength;
|
|
3803
|
-
|
|
3804
|
-
if (checkAmbiguity && appendedDataOffset != reader.size) {
|
|
3852
|
+
if (reader.size - appendedDataOffset > maxAppendedDataSize) {
|
|
3805
3853
|
throwAmbiguousArchive("appended data");
|
|
3806
3854
|
}
|
|
3807
3855
|
let lastDiskNumber = getUint16(endOfDirectoryView, 4);
|
|
@@ -3814,7 +3862,7 @@
|
|
|
3814
3862
|
if (directoryDataOffset == MAX_32_BITS || directoryDataLength == MAX_32_BITS || filesLength == MAX_16_BITS || diskNumber == MAX_16_BITS) {
|
|
3815
3863
|
const endOfDirectoryLocatorArray = endOfDirectoryInfo.offset >= ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH ?
|
|
3816
3864
|
await readUint8Array(reader, endOfDirectoryInfo.offset - ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH, ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH) :
|
|
3817
|
-
|
|
3865
|
+
EMPTY_UINT8_ARRAY;
|
|
3818
3866
|
const endOfDirectoryLocatorView = getDataView$1(endOfDirectoryLocatorArray);
|
|
3819
3867
|
if (endOfDirectoryLocatorArray.length == ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH &&
|
|
3820
3868
|
getUint32(endOfDirectoryLocatorView, 0) == ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIGNATURE) {
|
|
@@ -3880,14 +3928,22 @@
|
|
|
3880
3928
|
throw new Error(ERR_BAD_FORMAT);
|
|
3881
3929
|
}
|
|
3882
3930
|
const expectedDirectoryDataOffset = centralDirectoryEndOffset - directoryDataLength - (reader.lastDiskOffset || 0);
|
|
3883
|
-
if (
|
|
3884
|
-
const
|
|
3885
|
-
|
|
3886
|
-
if (
|
|
3887
|
-
|
|
3931
|
+
if (directoryDataOffset != expectedDirectoryDataOffset && diskNumber == lastDiskNumber) {
|
|
3932
|
+
const storedPointsAtDirectory = getUint32(directoryView, offset) == CENTRAL_FILE_HEADER_SIGNATURE;
|
|
3933
|
+
let reconcile = !storedPointsAtDirectory;
|
|
3934
|
+
if (!reconcile && expectedDirectoryDataOffset >= 0 && expectedDirectoryDataOffset + 4 <= reader.size) {
|
|
3935
|
+
const expectedSignatureArray = await readUint8Array(reader, expectedDirectoryDataOffset, 4, diskNumber);
|
|
3936
|
+
reconcile = getUint32(getDataView$1(expectedSignatureArray), 0) == CENTRAL_FILE_HEADER_SIGNATURE;
|
|
3937
|
+
}
|
|
3938
|
+
if (reconcile) {
|
|
3939
|
+
const originalDirectoryDataOffset = directoryDataOffset;
|
|
3940
|
+
directoryDataOffset = expectedDirectoryDataOffset;
|
|
3941
|
+
if (directoryDataOffset > originalDirectoryDataOffset) {
|
|
3942
|
+
prependedDataLength += directoryDataOffset - originalDirectoryDataOffset;
|
|
3943
|
+
}
|
|
3944
|
+
directoryArray = await readUint8Array(reader, directoryDataOffset, directoryDataLength, diskNumber);
|
|
3945
|
+
directoryView = getDataView$1(directoryArray);
|
|
3888
3946
|
}
|
|
3889
|
-
directoryArray = await readUint8Array(reader, directoryDataOffset, directoryDataLength, diskNumber);
|
|
3890
|
-
directoryView = getDataView$1(directoryArray);
|
|
3891
3947
|
}
|
|
3892
3948
|
}
|
|
3893
3949
|
const expectedDirectoryDataLength = centralDirectoryEndOffset - directoryDataOffset - (reader.lastDiskOffset || 0);
|
|
@@ -4029,11 +4085,11 @@
|
|
|
4029
4085
|
const extractPrependedData = getOptionValue$1(zipReader, options, OPTION_EXTRACT_PREPENDED_DATA);
|
|
4030
4086
|
const extractAppendedData = getOptionValue$1(zipReader, options, OPTION_EXTRACT_APPENDED_DATA);
|
|
4031
4087
|
if (extractPrependedData) {
|
|
4032
|
-
zipReader.prependedData = startOffset > 0 ? await readUint8Array(reader, 0, startOffset) :
|
|
4088
|
+
zipReader.prependedData = startOffset > 0 ? await readUint8Array(reader, 0, startOffset) : EMPTY_UINT8_ARRAY;
|
|
4033
4089
|
}
|
|
4034
|
-
zipReader.comment = commentLength ? await readUint8Array(reader, commentOffset + END_OF_CENTRAL_DIR_LENGTH, commentLength) :
|
|
4090
|
+
zipReader.comment = commentLength ? await readUint8Array(reader, commentOffset + END_OF_CENTRAL_DIR_LENGTH, commentLength) : EMPTY_UINT8_ARRAY;
|
|
4035
4091
|
if (extractAppendedData) {
|
|
4036
|
-
zipReader.appendedData = appendedDataOffset < reader.size ? await readUint8Array(reader, appendedDataOffset, reader.size - appendedDataOffset) :
|
|
4092
|
+
zipReader.appendedData = appendedDataOffset < reader.size ? await readUint8Array(reader, appendedDataOffset, reader.size - appendedDataOffset) : EMPTY_UINT8_ARRAY;
|
|
4037
4093
|
}
|
|
4038
4094
|
return true;
|
|
4039
4095
|
}
|
|
@@ -4144,8 +4200,8 @@
|
|
|
4144
4200
|
extraFieldLength,
|
|
4145
4201
|
filenameLength
|
|
4146
4202
|
} = localDirectory;
|
|
4147
|
-
const checkAmbiguity = getOptionValue$1(zipEntry, options, OPTION_CHECK_AMBIGUITY);
|
|
4148
|
-
let rawLocalFilename =
|
|
4203
|
+
const checkAmbiguity = getStrictness(getOptionValue$1(zipEntry, options, OPTION_STRICTNESS), getOptionValue$1(zipEntry, options, OPTION_CHECK_AMBIGUITY)) == STRICTNESS_STRICT;
|
|
4204
|
+
let rawLocalFilename = EMPTY_UINT8_ARRAY;
|
|
4149
4205
|
if (checkAmbiguity && (filenameLength || extraFieldLength)) {
|
|
4150
4206
|
const trailingDataArray = await readUint8Array(reader, offset + HEADER_SIZE, filenameLength + extraFieldLength, diskNumberStart);
|
|
4151
4207
|
rawLocalFilename = trailingDataArray.subarray(0, filenameLength);
|
|
@@ -4153,7 +4209,7 @@
|
|
|
4153
4209
|
} else {
|
|
4154
4210
|
localDirectory.rawExtraField = extraFieldLength ?
|
|
4155
4211
|
await readUint8Array(reader, offset + HEADER_SIZE + filenameLength, extraFieldLength, diskNumberStart) :
|
|
4156
|
-
|
|
4212
|
+
EMPTY_UINT8_ARRAY;
|
|
4157
4213
|
}
|
|
4158
4214
|
readCommonFooter(zipEntry, localDirectory, dataView, 4, true);
|
|
4159
4215
|
if (checkAmbiguity) {
|
|
@@ -4180,12 +4236,7 @@
|
|
|
4180
4236
|
}
|
|
4181
4237
|
const dataOffset = offset + HEADER_SIZE + filenameLength + extraFieldLength;
|
|
4182
4238
|
const size = compressedSize;
|
|
4183
|
-
const readable = reader.
|
|
4184
|
-
Object.assign(readable, {
|
|
4185
|
-
diskNumberStart,
|
|
4186
|
-
offset: dataOffset,
|
|
4187
|
-
size
|
|
4188
|
-
});
|
|
4239
|
+
const readable = reader.createReadable({ offset: dataOffset, size, diskNumberStart, chunkSize: getChunkSize(config) });
|
|
4189
4240
|
const signal = getOptionValue$1(zipEntry, options, OPTION_SIGNAL);
|
|
4190
4241
|
const checkPasswordOnly = getOptionValue$1(zipEntry, options, OPTION_CHECK_PASSWORD_ONLY);
|
|
4191
4242
|
let checkOverlappingEntry = getOptionValue$1(zipEntry, options, OPTION_CHECK_OVERLAPPING_ENTRY);
|
|
@@ -4456,7 +4507,6 @@
|
|
|
4456
4507
|
const view = getDataView$1(new Uint8Array(extraField.data));
|
|
4457
4508
|
let uid, gid;
|
|
4458
4509
|
if (isInfoZip) {
|
|
4459
|
-
// Info-ZIP New Unix "ux" field (0x7875): version + variable-length uid/gid
|
|
4460
4510
|
let offset = 0;
|
|
4461
4511
|
const version = getUint8(view, offset++);
|
|
4462
4512
|
const uidSize = getUint8(view, offset++);
|
|
@@ -4466,8 +4516,6 @@
|
|
|
4466
4516
|
gid = unpackUnixId(extraField.data.subarray(offset, offset + gidSize));
|
|
4467
4517
|
Object.assign(extraField, { version, uid, gid });
|
|
4468
4518
|
} else if (extraField.data.length >= 4) {
|
|
4469
|
-
// Info-ZIP Unix "Ux" field (0x7855): fixed 2-byte uid + gid (the file mode, if any, is
|
|
4470
|
-
// carried in the external file attributes, not here)
|
|
4471
4519
|
uid = getUint16(view, 0);
|
|
4472
4520
|
gid = getUint16(view, 2);
|
|
4473
4521
|
Object.assign(extraField, { uid, gid });
|
|
@@ -4519,7 +4567,6 @@
|
|
|
4519
4567
|
timeProperties.forEach((propertyName, indexProperty) => {
|
|
4520
4568
|
if (extraFieldExtendedTimestamp.data.length >= offset + 4) {
|
|
4521
4569
|
const time = getUint32(extraFieldView, offset);
|
|
4522
|
-
// the extended timestamp is a signed 32-bit time_t value
|
|
4523
4570
|
directory[propertyName] = extraFieldExtendedTimestamp[propertyName] = new Date((time | 0) * 1000);
|
|
4524
4571
|
const rawPropertyName = timeRawProperties[indexProperty];
|
|
4525
4572
|
extraFieldExtendedTimestamp[rawPropertyName] = time;
|
|
@@ -4594,26 +4641,133 @@
|
|
|
4594
4641
|
readRanges.set(index, range);
|
|
4595
4642
|
}
|
|
4596
4643
|
|
|
4597
|
-
|
|
4598
|
-
|
|
4599
|
-
|
|
4600
|
-
|
|
4601
|
-
|
|
4602
|
-
|
|
4603
|
-
|
|
4604
|
-
|
|
4605
|
-
|
|
4606
|
-
|
|
4607
|
-
|
|
4608
|
-
|
|
4609
|
-
|
|
4610
|
-
|
|
4611
|
-
|
|
4612
|
-
|
|
4613
|
-
|
|
4644
|
+
function getStrictness(strictness, checkAmbiguity) {
|
|
4645
|
+
if (strictness === UNDEFINED_VALUE) {
|
|
4646
|
+
return checkAmbiguity ? STRICTNESS_STRICT : STRICTNESS_BALANCED;
|
|
4647
|
+
}
|
|
4648
|
+
return strictness;
|
|
4649
|
+
}
|
|
4650
|
+
|
|
4651
|
+
function getMaxAppendedDataSize(maxAppendedDataSize, strictness) {
|
|
4652
|
+
if (maxAppendedDataSize !== UNDEFINED_VALUE) {
|
|
4653
|
+
return maxAppendedDataSize;
|
|
4654
|
+
}
|
|
4655
|
+
if (strictness == STRICTNESS_STRICT) {
|
|
4656
|
+
return 0;
|
|
4657
|
+
}
|
|
4658
|
+
if (strictness == STRICTNESS_TOLERANT) {
|
|
4659
|
+
return Infinity;
|
|
4660
|
+
}
|
|
4661
|
+
return MAX_16_BITS;
|
|
4662
|
+
}
|
|
4663
|
+
|
|
4664
|
+
const MAX_END_OF_CENTRAL_DIR_PROBES = 64;
|
|
4665
|
+
|
|
4666
|
+
const CENTRAL_DIRECTORY_UNREACHABLE = 0;
|
|
4667
|
+
const CENTRAL_DIRECTORY_PLAUSIBLE = 1;
|
|
4668
|
+
const CENTRAL_DIRECTORY_REACHABLE = 2;
|
|
4669
|
+
|
|
4670
|
+
async function findEndOfCentralDirectory(reader, rejectAmbiguous, maxAppendedDataSize) {
|
|
4671
|
+
const { size } = reader;
|
|
4672
|
+
const anchoredLength = Math.min(size, END_OF_CENTRAL_DIR_LENGTH + MAX_16_BITS);
|
|
4673
|
+
const remoteProbeBudget = { count: MAX_END_OF_CENTRAL_DIR_PROBES };
|
|
4674
|
+
let endOfDirectoryInfo;
|
|
4675
|
+
let plausibleEndOfDirectoryInfo;
|
|
4676
|
+
let endOfDirectoryReachingEndCount = 0;
|
|
4677
|
+
for await (const [anchoredView, anchoredOffset, anchoredArray, indexByte, offset] of scanEndOfCentralDirectory(reader, anchoredLength)) {
|
|
4678
|
+
const commentLength = getUint16(anchoredView, indexByte + 20);
|
|
4679
|
+
if (offset + END_OF_CENTRAL_DIR_LENGTH + commentLength == size) {
|
|
4680
|
+
const reachability = await getCentralDirectoryReachability(reader, anchoredView, anchoredOffset, indexByte, offset, size, remoteProbeBudget);
|
|
4681
|
+
if (reachability == CENTRAL_DIRECTORY_REACHABLE) {
|
|
4682
|
+
if (!endOfDirectoryInfo) {
|
|
4683
|
+
endOfDirectoryInfo = getEndOfCentralDirectoryInfo(anchoredArray, indexByte, offset);
|
|
4684
|
+
}
|
|
4685
|
+
endOfDirectoryReachingEndCount++;
|
|
4686
|
+
if (!rejectAmbiguous || endOfDirectoryReachingEndCount > 1) {
|
|
4687
|
+
break;
|
|
4688
|
+
}
|
|
4689
|
+
} else if (reachability == CENTRAL_DIRECTORY_PLAUSIBLE && !plausibleEndOfDirectoryInfo) {
|
|
4690
|
+
plausibleEndOfDirectoryInfo = getEndOfCentralDirectoryInfo(anchoredArray, indexByte, offset);
|
|
4614
4691
|
}
|
|
4615
4692
|
}
|
|
4616
4693
|
}
|
|
4694
|
+
if (!endOfDirectoryInfo) {
|
|
4695
|
+
endOfDirectoryInfo = plausibleEndOfDirectoryInfo;
|
|
4696
|
+
}
|
|
4697
|
+
if (!endOfDirectoryInfo) {
|
|
4698
|
+
endOfDirectoryInfo = await seekEndOfCentralDirectory(reader, maxAppendedDataSize, remoteProbeBudget);
|
|
4699
|
+
}
|
|
4700
|
+
return { endOfDirectoryInfo, endOfDirectoryReachingEndCount };
|
|
4701
|
+
}
|
|
4702
|
+
|
|
4703
|
+
async function seekEndOfCentralDirectory(reader, maxAppendedDataSize, remoteProbeBudget) {
|
|
4704
|
+
const { size } = reader;
|
|
4705
|
+
const searchLength = Math.min(size, maxAppendedDataSize == Infinity ? size :
|
|
4706
|
+
END_OF_CENTRAL_DIR_LENGTH + MAX_16_BITS + maxAppendedDataSize);
|
|
4707
|
+
let firstSignatureInfo, plausibleInfo;
|
|
4708
|
+
for await (const [searchView, searchOffset, searchArray, indexByte, offset] of scanEndOfCentralDirectory(reader, searchLength)) {
|
|
4709
|
+
const record = getEndOfCentralDirectoryInfo(searchArray, indexByte, offset);
|
|
4710
|
+
if (!firstSignatureInfo) {
|
|
4711
|
+
firstSignatureInfo = record;
|
|
4712
|
+
}
|
|
4713
|
+
const reachability = await getCentralDirectoryReachability(reader, searchView, searchOffset, indexByte, offset, size, remoteProbeBudget);
|
|
4714
|
+
if (reachability == CENTRAL_DIRECTORY_REACHABLE) {
|
|
4715
|
+
return record;
|
|
4716
|
+
}
|
|
4717
|
+
if (reachability == CENTRAL_DIRECTORY_PLAUSIBLE && !plausibleInfo) {
|
|
4718
|
+
plausibleInfo = record;
|
|
4719
|
+
}
|
|
4720
|
+
}
|
|
4721
|
+
return plausibleInfo || firstSignatureInfo;
|
|
4722
|
+
}
|
|
4723
|
+
|
|
4724
|
+
async function* scanEndOfCentralDirectory(reader, scanLength) {
|
|
4725
|
+
const scanOffset = reader.size - scanLength;
|
|
4726
|
+
const scanArray = await readUint8Array(reader, scanOffset, scanLength);
|
|
4727
|
+
const scanView = getDataView$1(scanArray);
|
|
4728
|
+
for (let indexByte = scanArray.length - END_OF_CENTRAL_DIR_LENGTH; indexByte >= 0; indexByte--) {
|
|
4729
|
+
if (getUint32(scanView, indexByte) == END_OF_CENTRAL_DIR_SIGNATURE) {
|
|
4730
|
+
yield [scanView, scanOffset, scanArray, indexByte, scanOffset + indexByte];
|
|
4731
|
+
}
|
|
4732
|
+
}
|
|
4733
|
+
}
|
|
4734
|
+
|
|
4735
|
+
function getEndOfCentralDirectoryInfo(scanArray, indexByte, offset) {
|
|
4736
|
+
return { offset, buffer: scanArray.slice(indexByte, indexByte + END_OF_CENTRAL_DIR_LENGTH).buffer };
|
|
4737
|
+
}
|
|
4738
|
+
|
|
4739
|
+
async function getCentralDirectoryReachability(reader, view, anchoredOffset, indexByte, offset, size, remoteProbeBudget) {
|
|
4740
|
+
const filesLength = getUint16(view, indexByte + 10);
|
|
4741
|
+
const directoryDataLength = getUint32(view, indexByte + 12);
|
|
4742
|
+
const directoryDataOffset = getUint32(view, indexByte + 16);
|
|
4743
|
+
if (filesLength == MAX_16_BITS || directoryDataLength == MAX_32_BITS || directoryDataOffset == MAX_32_BITS) {
|
|
4744
|
+
const locatorSignature = await readSignature(reader, view, anchoredOffset, offset - ZIP64_END_OF_CENTRAL_DIR_LOCATOR_LENGTH, size, remoteProbeBudget);
|
|
4745
|
+
return locatorSignature == ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIGNATURE ? CENTRAL_DIRECTORY_REACHABLE : CENTRAL_DIRECTORY_UNREACHABLE;
|
|
4746
|
+
}
|
|
4747
|
+
if (!filesLength && !directoryDataLength) {
|
|
4748
|
+
return CENTRAL_DIRECTORY_PLAUSIBLE;
|
|
4749
|
+
}
|
|
4750
|
+
for (const centralDirectoryOffset of [offset - directoryDataLength, directoryDataOffset]) {
|
|
4751
|
+
if (await readSignature(reader, view, anchoredOffset, centralDirectoryOffset, size, remoteProbeBudget) == CENTRAL_FILE_HEADER_SIGNATURE) {
|
|
4752
|
+
return CENTRAL_DIRECTORY_REACHABLE;
|
|
4753
|
+
}
|
|
4754
|
+
}
|
|
4755
|
+
return CENTRAL_DIRECTORY_UNREACHABLE;
|
|
4756
|
+
}
|
|
4757
|
+
|
|
4758
|
+
async function readSignature(reader, view, anchoredOffset, signatureOffset, size, remoteProbeBudget) {
|
|
4759
|
+
if (signatureOffset < 0 || signatureOffset + 4 > size) {
|
|
4760
|
+
return UNDEFINED_VALUE;
|
|
4761
|
+
}
|
|
4762
|
+
if (signatureOffset >= anchoredOffset) {
|
|
4763
|
+
return getUint32(view, signatureOffset - anchoredOffset);
|
|
4764
|
+
}
|
|
4765
|
+
if (remoteProbeBudget.count > 0) {
|
|
4766
|
+
remoteProbeBudget.count--;
|
|
4767
|
+
const signatureArray = await readUint8Array(reader, signatureOffset, 4);
|
|
4768
|
+
return getUint32(getDataView$1(signatureArray), 0);
|
|
4769
|
+
}
|
|
4770
|
+
return UNDEFINED_VALUE;
|
|
4617
4771
|
}
|
|
4618
4772
|
|
|
4619
4773
|
function checkLocalDirectory(zipEntry, localDirectory, rawLocalFilename) {
|
|
@@ -4628,8 +4782,6 @@
|
|
|
4628
4782
|
if (localDirectory.compressionMethod != zipEntry.compressionMethod) {
|
|
4629
4783
|
throwAmbiguousArchive("mismatched local file header (compression method)");
|
|
4630
4784
|
}
|
|
4631
|
-
// when the data descriptor flag is set, the local signature and sizes are zeroed out; all-zero values are
|
|
4632
|
-
// also tolerated when the flag is clear because some tools produce them (streaming writers predating bit 3)
|
|
4633
4785
|
if (!localDirectory.bitFlag.dataDescriptor &&
|
|
4634
4786
|
(localDirectory.signature || localDirectory.compressedSize || localDirectory.uncompressedSize) &&
|
|
4635
4787
|
(localDirectory.signature != zipEntry.signature ||
|
|
@@ -4678,10 +4830,6 @@
|
|
|
4678
4830
|
return Number(view.getBigUint64(offset, true));
|
|
4679
4831
|
}
|
|
4680
4832
|
|
|
4681
|
-
function setUint32$1(view, offset, value) {
|
|
4682
|
-
view.setUint32(offset, value, true);
|
|
4683
|
-
}
|
|
4684
|
-
|
|
4685
4833
|
function getDataView$1(array) {
|
|
4686
4834
|
return new DataView(array.buffer, array.byteOffset, array.byteLength);
|
|
4687
4835
|
}
|
|
@@ -4723,7 +4871,6 @@
|
|
|
4723
4871
|
const ERR_INVALID_ENCRYPTION_STRENGTH = "The strength must equal 1, 2, or 3";
|
|
4724
4872
|
const ERR_INVALID_EXTRAFIELD_TYPE = "Extra field type exceeds 65535";
|
|
4725
4873
|
const ERR_INVALID_EXTRAFIELD_DATA = "Extra field data exceeds 64KB";
|
|
4726
|
-
// same message as the constant exported by zip-reader.js
|
|
4727
4874
|
const ERR_UNSUPPORTED_COMPRESSION = "Compression method not supported";
|
|
4728
4875
|
const MIN_UNIX_TIME = -2147483648;
|
|
4729
4876
|
const MAX_UNIX_TIME = 2147483647;
|
|
@@ -4806,12 +4953,12 @@
|
|
|
4806
4953
|
rawExtraField,
|
|
4807
4954
|
} = entry;
|
|
4808
4955
|
const { level, languageEncodingFlag, dataDescriptor } = bitFlag;
|
|
4809
|
-
rawExtraFieldZip64 = rawExtraFieldZip64 ||
|
|
4810
|
-
rawExtraFieldAES = rawExtraFieldAES ||
|
|
4811
|
-
rawExtraFieldExtendedTimestamp = rawExtraFieldExtendedTimestamp ||
|
|
4812
|
-
rawExtraFieldNTFS = rawExtraFieldNTFS ||
|
|
4813
|
-
rawExtraFieldUnix = rawExtraFieldUnix ||
|
|
4814
|
-
rawExtraField = rawExtraField ||
|
|
4956
|
+
rawExtraFieldZip64 = rawExtraFieldZip64 || EMPTY_UINT8_ARRAY;
|
|
4957
|
+
rawExtraFieldAES = rawExtraFieldAES || EMPTY_UINT8_ARRAY;
|
|
4958
|
+
rawExtraFieldExtendedTimestamp = rawExtraFieldExtendedTimestamp || EMPTY_UINT8_ARRAY;
|
|
4959
|
+
rawExtraFieldNTFS = rawExtraFieldNTFS || EMPTY_UINT8_ARRAY;
|
|
4960
|
+
rawExtraFieldUnix = rawExtraFieldUnix || EMPTY_UINT8_ARRAY;
|
|
4961
|
+
rawExtraField = rawExtraField || EMPTY_UINT8_ARRAY;
|
|
4815
4962
|
if (entry.extraFieldAES) {
|
|
4816
4963
|
compressionMethod = COMPRESSION_METHOD_AES;
|
|
4817
4964
|
}
|
|
@@ -4917,7 +5064,7 @@
|
|
|
4917
5064
|
return false;
|
|
4918
5065
|
}
|
|
4919
5066
|
|
|
4920
|
-
async close(comment =
|
|
5067
|
+
async close(comment = EMPTY_UINT8_ARRAY, options = {}) {
|
|
4921
5068
|
const zipWriter = this;
|
|
4922
5069
|
const { pendingAddFileCalls, writer } = this;
|
|
4923
5070
|
const { writable } = writer;
|
|
@@ -5216,7 +5363,7 @@
|
|
|
5216
5363
|
if (!zipCrypto && (password !== UNDEFINED_VALUE || rawPassword !== UNDEFINED_VALUE) && !(encryptionStrength >= 1 && encryptionStrength <= 3)) {
|
|
5217
5364
|
throw new Error(ERR_INVALID_ENCRYPTION_STRENGTH);
|
|
5218
5365
|
}
|
|
5219
|
-
let rawExtraField =
|
|
5366
|
+
let rawExtraField = EMPTY_UINT8_ARRAY;
|
|
5220
5367
|
const extraField = options[PROPERTY_NAME_EXTRA_FIELD];
|
|
5221
5368
|
if (extraField) {
|
|
5222
5369
|
let extraFieldSize = 0;
|
|
@@ -5277,8 +5424,6 @@
|
|
|
5277
5424
|
let maximumCompressedSize = 0;
|
|
5278
5425
|
let uncompressedSize = 0;
|
|
5279
5426
|
if (passThrough) {
|
|
5280
|
-
// the headers of a passThrough entry describe the payload verbatim: without a
|
|
5281
|
-
// reader they would declare content that is not there
|
|
5282
5427
|
if (!reader) {
|
|
5283
5428
|
throw new Error(ERR_UNDEFINED_READER);
|
|
5284
5429
|
}
|
|
@@ -5289,8 +5434,6 @@
|
|
|
5289
5434
|
}
|
|
5290
5435
|
const zip64Enabled = zip64 === true;
|
|
5291
5436
|
const encrypted = getOptionValue(zipWriter, options, PROPERTY_NAME_ENCRYPTED);
|
|
5292
|
-
// entries without a reader have no payload: write them as empty stored files instead of
|
|
5293
|
-
// declaring a compressed or encrypted content that does not exist
|
|
5294
5437
|
const encryptedEntry = Boolean(reader) && (Boolean((password && getLength(password)) || (rawPassword && getLength(rawPassword))) || (passThrough && encrypted));
|
|
5295
5438
|
if (!reader) {
|
|
5296
5439
|
level = 0;
|
|
@@ -5428,7 +5571,6 @@
|
|
|
5428
5571
|
fileEntry.diskNumberStart = writer.diskNumber;
|
|
5429
5572
|
fileEntry.offset = getSegmentOffset(zipWriter, writer);
|
|
5430
5573
|
if (usdz) {
|
|
5431
|
-
// the padding depends on the entry offset, only known now that the writer is locked
|
|
5432
5574
|
const previousMetadataSize = entryInfo.metadataSize;
|
|
5433
5575
|
appendExtraFieldUSDZ(entryInfo, zipWriter.offset - writer.diskOffset);
|
|
5434
5576
|
fileEntry.size += entryInfo.metadataSize - previousMetadataSize;
|
|
@@ -5471,6 +5613,13 @@
|
|
|
5471
5613
|
if (releaseLockWriter) {
|
|
5472
5614
|
releaseLockWriter();
|
|
5473
5615
|
}
|
|
5616
|
+
if (bufferedWrite && fileWriter && fileWriter.dispose) {
|
|
5617
|
+
try {
|
|
5618
|
+
await fileWriter.dispose();
|
|
5619
|
+
} catch {
|
|
5620
|
+
// ignored
|
|
5621
|
+
}
|
|
5622
|
+
}
|
|
5474
5623
|
}
|
|
5475
5624
|
|
|
5476
5625
|
function requestLockCurrentFileEntry() {
|
|
@@ -5490,7 +5639,7 @@
|
|
|
5490
5639
|
async function skipDiskIfNeeded() {
|
|
5491
5640
|
if (getLength(headerInfo.localHeaderArray) > writer.availableSize) {
|
|
5492
5641
|
writer.availableSize = 0;
|
|
5493
|
-
await writeData(writer,
|
|
5642
|
+
await writeData(writer, EMPTY_UINT8_ARRAY);
|
|
5494
5643
|
}
|
|
5495
5644
|
}
|
|
5496
5645
|
}
|
|
@@ -5601,8 +5750,7 @@
|
|
|
5601
5750
|
}
|
|
5602
5751
|
const { writable } = writer;
|
|
5603
5752
|
if (reader) {
|
|
5604
|
-
reader.chunkSize
|
|
5605
|
-
const readable = reader.readable;
|
|
5753
|
+
const readable = reader.createReadable ? reader.createReadable({ chunkSize: getChunkSize(config) }) : reader.readable;
|
|
5606
5754
|
const size = reader.size;
|
|
5607
5755
|
const workerOptions = {
|
|
5608
5756
|
options: {
|
|
@@ -5702,13 +5850,9 @@
|
|
|
5702
5850
|
: compressionMethod !== COMPRESSION_METHOD_STORE);
|
|
5703
5851
|
let rawLocalExtraFieldZip64;
|
|
5704
5852
|
const uncompressedFile = passThrough || !compressed;
|
|
5705
|
-
// entries without a data descriptor are always buffered (cf. getFileEntry), so the
|
|
5706
|
-
// zip64 extra field values can be patched into the local header before flushing it
|
|
5707
5853
|
const zip64ExtraFieldComplete = zip64 && (options.bufferedWrite || !dataDescriptor || ((!zip64UncompressedSize && !zip64CompressedSize) || uncompressedFile));
|
|
5708
5854
|
const writeLocalExtraFieldZip64 = zip64ExtraFieldComplete || (zip64 && dataDescriptor && (zip64UncompressedSize || zip64CompressedSize));
|
|
5709
5855
|
if (zip64 && (zip64UncompressedSize || zip64CompressedSize)) {
|
|
5710
|
-
// APPNOTE 4.5.3: the zip64 extra field of a local header must include both the
|
|
5711
|
-
// uncompressed and compressed size fields
|
|
5712
5856
|
const length = 4 + 16;
|
|
5713
5857
|
const extraFieldZip64 = createRecordWriter(length);
|
|
5714
5858
|
extraFieldZip64.uint16(EXTRAFIELD_TYPE_ZIP64);
|
|
@@ -5722,7 +5866,7 @@
|
|
|
5722
5866
|
}
|
|
5723
5867
|
}
|
|
5724
5868
|
} else {
|
|
5725
|
-
rawLocalExtraFieldZip64 =
|
|
5869
|
+
rawLocalExtraFieldZip64 = EMPTY_UINT8_ARRAY;
|
|
5726
5870
|
}
|
|
5727
5871
|
let rawExtraFieldAES;
|
|
5728
5872
|
if (encrypted && !zipCrypto) {
|
|
@@ -5732,7 +5876,7 @@
|
|
|
5732
5876
|
rawExtraFieldAES = extraFieldAES.array;
|
|
5733
5877
|
rawExtraFieldAES[8] = encryptionStrength;
|
|
5734
5878
|
} else {
|
|
5735
|
-
rawExtraFieldAES =
|
|
5879
|
+
rawExtraFieldAES = EMPTY_UINT8_ARRAY;
|
|
5736
5880
|
}
|
|
5737
5881
|
let rawExtraFieldNTFS;
|
|
5738
5882
|
let rawExtraFieldExtendedTimestamp;
|
|
@@ -5755,8 +5899,7 @@
|
|
|
5755
5899
|
}
|
|
5756
5900
|
rawExtraFieldExtendedTimestamp = extraFieldTimestamp.array;
|
|
5757
5901
|
} else {
|
|
5758
|
-
|
|
5759
|
-
rawExtraFieldExtendedTimestamp = new Uint8Array();
|
|
5902
|
+
rawExtraFieldExtendedTimestamp = EMPTY_UINT8_ARRAY;
|
|
5760
5903
|
}
|
|
5761
5904
|
try {
|
|
5762
5905
|
const lastModTimeNTFS = getTimeNTFS(lastModDate);
|
|
@@ -5771,10 +5914,10 @@
|
|
|
5771
5914
|
extraFieldNTFS.uint64(getTimeNTFS(creationDate) || lastModTimeNTFS);
|
|
5772
5915
|
rawExtraFieldNTFS = extraFieldNTFS.array;
|
|
5773
5916
|
} catch {
|
|
5774
|
-
rawExtraFieldNTFS =
|
|
5917
|
+
rawExtraFieldNTFS = EMPTY_UINT8_ARRAY;
|
|
5775
5918
|
}
|
|
5776
5919
|
} else {
|
|
5777
|
-
rawExtraFieldNTFS = rawExtraFieldExtendedTimestamp =
|
|
5920
|
+
rawExtraFieldNTFS = rawExtraFieldExtendedTimestamp = EMPTY_UINT8_ARRAY;
|
|
5778
5921
|
}
|
|
5779
5922
|
let rawExtraFieldUnix;
|
|
5780
5923
|
try {
|
|
@@ -5800,10 +5943,10 @@
|
|
|
5800
5943
|
extraFieldUnix.uint16((gid === UNDEFINED_VALUE ? 0 : gid) & MAX_16_BITS);
|
|
5801
5944
|
rawExtraFieldUnix = extraFieldUnix.array;
|
|
5802
5945
|
} else {
|
|
5803
|
-
rawExtraFieldUnix =
|
|
5946
|
+
rawExtraFieldUnix = EMPTY_UINT8_ARRAY;
|
|
5804
5947
|
}
|
|
5805
5948
|
} catch {
|
|
5806
|
-
rawExtraFieldUnix =
|
|
5949
|
+
rawExtraFieldUnix = EMPTY_UINT8_ARRAY;
|
|
5807
5950
|
}
|
|
5808
5951
|
if (compressionMethod === UNDEFINED_VALUE) {
|
|
5809
5952
|
compressionMethod = compressed ? COMPRESSION_METHOD_DEFLATE : COMPRESSION_METHOD_STORE;
|
|
@@ -5870,7 +6013,7 @@
|
|
|
5870
6013
|
version,
|
|
5871
6014
|
compressionMethod,
|
|
5872
6015
|
extraFieldExtendedTimestampFlag,
|
|
5873
|
-
rawExtraFieldZip64:
|
|
6016
|
+
rawExtraFieldZip64: EMPTY_UINT8_ARRAY,
|
|
5874
6017
|
localExtraFieldZip64Length,
|
|
5875
6018
|
rawExtraFieldExtendedTimestamp,
|
|
5876
6019
|
rawExtraFieldNTFS,
|
|
@@ -5883,7 +6026,6 @@
|
|
|
5883
6026
|
function appendExtraFieldUSDZ(entryInfo, zipWriterOffset) {
|
|
5884
6027
|
const { headerInfo } = entryInfo;
|
|
5885
6028
|
let { localHeaderArray, extraFieldLength } = headerInfo;
|
|
5886
|
-
let localHeaderArrayView;
|
|
5887
6029
|
let extraBytesLength = 64 - ((zipWriterOffset + getLength(localHeaderArray)) % 64);
|
|
5888
6030
|
if (extraBytesLength < 4) {
|
|
5889
6031
|
extraBytesLength += 64;
|
|
@@ -5896,7 +6038,7 @@
|
|
|
5896
6038
|
headerInfo.localHeaderArray = localHeaderArray = new Uint8Array(getLength(previousLocalHeaderArray) + extraBytesLength);
|
|
5897
6039
|
arraySet(localHeaderArray, previousLocalHeaderArray);
|
|
5898
6040
|
arraySet(localHeaderArray, rawExtraFieldUSDZ, getLength(previousLocalHeaderArray));
|
|
5899
|
-
localHeaderArrayView = getDataView(localHeaderArray);
|
|
6041
|
+
const localHeaderArrayView = getDataView(localHeaderArray);
|
|
5900
6042
|
setUint16(localHeaderArrayView, 28, extraFieldLength + extraBytesLength);
|
|
5901
6043
|
headerInfo.localHeaderView = localHeaderArrayView;
|
|
5902
6044
|
entryInfo.metadataSize += extraBytesLength;
|
|
@@ -5904,7 +6046,7 @@
|
|
|
5904
6046
|
|
|
5905
6047
|
function packUnixId(id) {
|
|
5906
6048
|
if (id === UNDEFINED_VALUE) {
|
|
5907
|
-
return
|
|
6049
|
+
return EMPTY_UINT8_ARRAY;
|
|
5908
6050
|
} else {
|
|
5909
6051
|
const dataArray = new Uint8Array(4);
|
|
5910
6052
|
const dataView = getDataView(dataArray);
|
|
@@ -5947,7 +6089,7 @@
|
|
|
5947
6089
|
dataDescriptor,
|
|
5948
6090
|
dataDescriptorSignature
|
|
5949
6091
|
}) {
|
|
5950
|
-
let dataDescriptorArray =
|
|
6092
|
+
let dataDescriptorArray = EMPTY_UINT8_ARRAY;
|
|
5951
6093
|
let dataDescriptorView, dataDescriptorOffset = 0;
|
|
5952
6094
|
let dataDescriptorLength = zip64 ? DATA_DESCRIPTOR_RECORD_ZIP_64_LENGTH : DATA_DESCRIPTOR_RECORD_LENGTH;
|
|
5953
6095
|
if (dataDescriptorSignature) {
|
|
@@ -6031,7 +6173,6 @@
|
|
|
6031
6173
|
}
|
|
6032
6174
|
}
|
|
6033
6175
|
if (zip64 && localExtraFieldZip64Length) {
|
|
6034
|
-
// the local zip64 extra field always contains both size slots
|
|
6035
6176
|
const localHeaderOffset = HEADER_SIZE + getLength(rawFilename) + 4;
|
|
6036
6177
|
setBigUint64(localHeaderView, localHeaderOffset, BigInt(uncompressedSize));
|
|
6037
6178
|
setBigUint64(localHeaderView, localHeaderOffset + 8, BigInt(compressedSize));
|
|
@@ -6085,7 +6226,7 @@
|
|
|
6085
6226
|
}
|
|
6086
6227
|
rawExtraFieldZip64 = extraFieldZip64.array;
|
|
6087
6228
|
} else {
|
|
6088
|
-
rawExtraFieldZip64 =
|
|
6229
|
+
rawExtraFieldZip64 = EMPTY_UINT8_ARRAY;
|
|
6089
6230
|
}
|
|
6090
6231
|
fileEntry.rawExtraFieldZip64 = rawExtraFieldZip64;
|
|
6091
6232
|
fileEntry.zip64Offset = zip64Offset;
|
|
@@ -6100,7 +6241,7 @@
|
|
|
6100
6241
|
extraFieldTimestamp.uint32(lastModTimeUnix);
|
|
6101
6242
|
rawExtraFieldTimestamp = extraFieldTimestamp.array;
|
|
6102
6243
|
} else {
|
|
6103
|
-
rawExtraFieldTimestamp =
|
|
6244
|
+
rawExtraFieldTimestamp = EMPTY_UINT8_ARRAY;
|
|
6104
6245
|
}
|
|
6105
6246
|
fileEntry.rawExtraFieldExtendedTimestamp = rawExtraFieldTimestamp;
|
|
6106
6247
|
const extraFieldLength = getLength(
|
|
@@ -6156,7 +6297,7 @@
|
|
|
6156
6297
|
await writeData(writer, directoryArray.slice(directoryDiskOffset, offset));
|
|
6157
6298
|
directoryDiskOffset = offset;
|
|
6158
6299
|
writer.availableSize = 0;
|
|
6159
|
-
await writeData(writer,
|
|
6300
|
+
await writeData(writer, EMPTY_UINT8_ARRAY);
|
|
6160
6301
|
}
|
|
6161
6302
|
if (indexFileEntry == 0) {
|
|
6162
6303
|
cdStartDiskNumber = writer.diskNumber;
|
|
@@ -6229,7 +6370,7 @@
|
|
|
6229
6370
|
const endOfdirectoryRecord = createRecordWriter(zip64 ? ZIP64_END_OF_CENTRAL_DIR_TOTAL_LENGTH : END_OF_CENTRAL_DIR_LENGTH);
|
|
6230
6371
|
if (getLength(endOfdirectoryRecord.array) + commentLength > writer.availableSize) {
|
|
6231
6372
|
writer.availableSize = 0;
|
|
6232
|
-
await writeData(writer,
|
|
6373
|
+
await writeData(writer, EMPTY_UINT8_ARRAY);
|
|
6233
6374
|
}
|
|
6234
6375
|
lastDiskNumber = writer.diskNumber;
|
|
6235
6376
|
if (zip64) {
|
|
@@ -6326,7 +6467,6 @@
|
|
|
6326
6467
|
return Math.floor(date.getTime() / 1000);
|
|
6327
6468
|
}
|
|
6328
6469
|
|
|
6329
|
-
// the extended timestamp extra field stores dates as signed 32-bit time_t values
|
|
6330
6470
|
function inUnixTimeRange(timeUnix) {
|
|
6331
6471
|
return timeUnix >= MIN_UNIX_TIME && timeUnix <= MAX_UNIX_TIME;
|
|
6332
6472
|
}
|
|
@@ -6508,13 +6648,148 @@
|
|
|
6508
6648
|
*/
|
|
6509
6649
|
|
|
6510
6650
|
|
|
6651
|
+
const DEFAULT_THRESHOLD = 1024 * 1024;
|
|
6652
|
+
const DEFAULT_DIRECTORY_NAME = ".zip.js-temp";
|
|
6653
|
+
|
|
6654
|
+
function createOPFSTempStream(options = {}) {
|
|
6655
|
+
const {
|
|
6656
|
+
thresholdBytes = DEFAULT_THRESHOLD,
|
|
6657
|
+
directoryName = DEFAULT_DIRECTORY_NAME,
|
|
6658
|
+
getDirectory = () => navigator.storage.getDirectory()
|
|
6659
|
+
} = options;
|
|
6660
|
+
let directoryHandlePromise;
|
|
6661
|
+
function getTempDirectory() {
|
|
6662
|
+
if (!directoryHandlePromise) {
|
|
6663
|
+
directoryHandlePromise = Promise.resolve(getDirectory())
|
|
6664
|
+
.then(root => root.getDirectoryHandle(directoryName, { create: true }));
|
|
6665
|
+
}
|
|
6666
|
+
return directoryHandlePromise;
|
|
6667
|
+
}
|
|
6668
|
+
return function () {
|
|
6669
|
+
const memoryChunks = [];
|
|
6670
|
+
let bufferedSize = 0;
|
|
6671
|
+
let spilled = false;
|
|
6672
|
+
let fileName, fileHandle, fileWriter, fileReader;
|
|
6673
|
+
|
|
6674
|
+
async function spillToFile() {
|
|
6675
|
+
const directoryHandle = await getTempDirectory();
|
|
6676
|
+
fileName = crypto.randomUUID();
|
|
6677
|
+
fileHandle = await directoryHandle.getFileHandle(fileName, { create: true });
|
|
6678
|
+
fileWriter = (await fileHandle.createWritable()).getWriter();
|
|
6679
|
+
spilled = true;
|
|
6680
|
+
for (const chunk of memoryChunks) {
|
|
6681
|
+
await fileWriter.write(chunk);
|
|
6682
|
+
}
|
|
6683
|
+
memoryChunks.length = 0;
|
|
6684
|
+
}
|
|
6685
|
+
|
|
6686
|
+
const writable = new WritableStream({
|
|
6687
|
+
async write(chunk) {
|
|
6688
|
+
if (spilled) {
|
|
6689
|
+
await fileWriter.write(chunk);
|
|
6690
|
+
} else {
|
|
6691
|
+
memoryChunks.push(chunk);
|
|
6692
|
+
bufferedSize += chunk.length;
|
|
6693
|
+
if (bufferedSize > thresholdBytes) {
|
|
6694
|
+
await spillToFile();
|
|
6695
|
+
}
|
|
6696
|
+
}
|
|
6697
|
+
},
|
|
6698
|
+
async close() {
|
|
6699
|
+
if (fileWriter) {
|
|
6700
|
+
await fileWriter.close();
|
|
6701
|
+
fileWriter = null;
|
|
6702
|
+
}
|
|
6703
|
+
}
|
|
6704
|
+
});
|
|
6705
|
+
|
|
6706
|
+
let memoryIndex = 0;
|
|
6707
|
+
const readable = new ReadableStream({
|
|
6708
|
+
async pull(controller) {
|
|
6709
|
+
if (spilled) {
|
|
6710
|
+
if (!fileReader) {
|
|
6711
|
+
const file = await fileHandle.getFile();
|
|
6712
|
+
fileReader = file.stream().getReader();
|
|
6713
|
+
}
|
|
6714
|
+
const { value, done } = await fileReader.read();
|
|
6715
|
+
if (done) {
|
|
6716
|
+
controller.close();
|
|
6717
|
+
} else {
|
|
6718
|
+
controller.enqueue(value);
|
|
6719
|
+
}
|
|
6720
|
+
} else if (memoryIndex < memoryChunks.length) {
|
|
6721
|
+
controller.enqueue(memoryChunks[memoryIndex++]);
|
|
6722
|
+
} else {
|
|
6723
|
+
controller.close();
|
|
6724
|
+
}
|
|
6725
|
+
},
|
|
6726
|
+
async cancel(reason) {
|
|
6727
|
+
if (fileReader) {
|
|
6728
|
+
await fileReader.cancel(reason);
|
|
6729
|
+
}
|
|
6730
|
+
}
|
|
6731
|
+
}, { highWaterMark: 0 });
|
|
6732
|
+
async function dispose() {
|
|
6733
|
+
if (fileWriter) {
|
|
6734
|
+
try {
|
|
6735
|
+
await fileWriter.close();
|
|
6736
|
+
} catch {
|
|
6737
|
+
// ignored
|
|
6738
|
+
}
|
|
6739
|
+
fileWriter = null;
|
|
6740
|
+
}
|
|
6741
|
+
if (fileName) {
|
|
6742
|
+
try {
|
|
6743
|
+
const directoryHandle = await getTempDirectory();
|
|
6744
|
+
await directoryHandle.removeEntry(fileName);
|
|
6745
|
+
} catch {
|
|
6746
|
+
// ignored
|
|
6747
|
+
}
|
|
6748
|
+
fileHandle = fileName = null;
|
|
6749
|
+
}
|
|
6750
|
+
memoryChunks.length = 0;
|
|
6751
|
+
}
|
|
6752
|
+
|
|
6753
|
+
return { writable, readable, dispose };
|
|
6754
|
+
};
|
|
6755
|
+
}
|
|
6756
|
+
|
|
6757
|
+
/*
|
|
6758
|
+
Copyright (c) 2025 Gildas Lormeau. All rights reserved.
|
|
6759
|
+
|
|
6760
|
+
Redistribution and use in source and binary forms, with or without
|
|
6761
|
+
modification, are permitted provided that the following conditions are met:
|
|
6762
|
+
|
|
6763
|
+
1. Redistributions of source code must retain the above copyright notice,
|
|
6764
|
+
this list of conditions and the following disclaimer.
|
|
6765
|
+
|
|
6766
|
+
2. Redistributions in binary form must reproduce the above copyright
|
|
6767
|
+
notice, this list of conditions and the following disclaimer in
|
|
6768
|
+
the documentation and/or other materials provided with the distribution.
|
|
6769
|
+
|
|
6770
|
+
3. The names of the authors may not be used to endorse or promote products
|
|
6771
|
+
derived from this software without specific prior written permission.
|
|
6772
|
+
|
|
6773
|
+
THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
|
|
6774
|
+
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
|
6775
|
+
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
|
|
6776
|
+
INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
6777
|
+
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
6778
|
+
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
|
6779
|
+
OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
6780
|
+
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
6781
|
+
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
|
6782
|
+
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
6783
|
+
*/
|
|
6784
|
+
|
|
6785
|
+
|
|
6511
6786
|
try {
|
|
6512
6787
|
configure({ baseURI: (typeof document === 'undefined' && typeof location === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : typeof document === 'undefined' ? location.href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('zip-fs-native.js', document.baseURI).href)) });
|
|
6513
6788
|
} catch {
|
|
6514
6789
|
// ignored
|
|
6515
6790
|
}
|
|
6516
6791
|
|
|
6517
|
-
var{Uint8Array:x,Uint16Array:E,Int32Array:H,TransformStream:U,Math:N,Error:z,Array:y}=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),qe=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 Ve(){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 Je(e,t){let n=1<<t;return {o:e,u:new x(n),h:n,k:t,m:0,v:0,p:0,M: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.L=e,this.Z=t,this.q=0;}},re=class{constructor(e,t,n,r,i){this.N=e,this.V=t,this.W=n,this.S=r,this.$=i;}};function g_(e){return V_[e<-6||e>2?9:2-e]||""}function Ae(e,t){try{e.msg=g_(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.I[e.D++]=t;}function De(e,t){g(e,255&t),g(e,t>>>8&255);}function e_(e,t,n){let r=255&n,i=65535&t,f=e.A+e.U;return e.I[f]=255&i,e.I[f+1]=i>>>8&255,e.I[f+2]=r,e.U+=3,i=i-1&65535,e.R[__[r]+ie+1].P++,e.X[T_(i)].P++,e.U==e.C}function ye(e,t){let n=255&t,r=e.A+e.U;return e.I[r]=0,e.I[r+1]=0,e.I[r+2]=n,e.U+=3,e.R[n].P++,e.U==e.C}function ve(e){return e.h-ae}function T_(e){return e<256?E_[e]:E_[256+(e>>7)]}function w_(e){let t=He+7,n=1<<t,r=(1<<t)-1,i=N.floor((t+k-1)/k),f=1<<8+He;return {...Je(e,15),o:e,H:42,O:0,T:void 0,Y:32767,B:t,F:n,j:r,G:i,J:new E(32768),K:new E(n),ee:f,I:new x(32768),te:0,ne:32768,D: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,me:0,ve:0,xe:0,ye:0,pe:new H(2*we+1),ze:new x(2*we+1),Me:new E(be+1),U:0,C:0,Le:Z,A:0,Ee:0,Ze:0,qe:8,Ne:32768,Ve:0,We:0,Se:0,R:new y(le).fill(0).map(()=>Q()),X:new y(2*me+1).fill(0).map(()=>Q()),$e:new y(2*oe+1).fill(0).map(()=>Q()),Ie:S_(),De:S_(),Ae:S_()}}function A_(e){let t=[];for(let n=0;n<e.length;n+=2){let r=e[n],i=e[n+1],f=Q();f.Qe=r,f.Ue=i,t.push(f);}return t}function Q(){return {P:0,Qe:0,Pe:0,Ue:0}}function S_(){return new ne([],ln(null,Z,0,0,0))}function ln(e,t,n,r,i){return new re(e,t,n,r,i)}function J_(){let e=new y(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 D_(e){let{code:t,length:n}=fn(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 Q_(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 $_(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 et(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 fn(e){let t=N.max(...e),n=new y(t+1).fill(0);for(let t of e)t>0&&n[t]++;let r=new y(e.length).fill(0),i=new y(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,un=29,ie=256,we=ie+1+un,me=30,oe=19,le=2*we+1,be=15,_t=9,tt=255,nt=32,rt=4,Ie=256,t_=16,n_=17,r_=18,at=0,y_=1,it=2,$=-1,V_=["need dictionary","stream end","","file error","stream error","data error","insufficient memory","buffer error",""],a_=te(de),i_=te(Ee),Fe=new E(19);Fe[16]=2,Fe[17]=3,Fe[18]=7;var cn=D_(J_()),dn=D_(new y(30).fill(5)),Ze=A_(cn),v_=A_(dn),__=Q_(Te,a_,_e),E_=et($_(ge,i_));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 mn=(()=>{let e=new y(256);for(let t=0;t<256;t++){let n=t;for(let e=0;e<8;e++)n=1&n?3988292384^n>>>1:n>>>1;e[t]=n>>>0;}return e})();function W(e=0,t,n){if(!t)return 0;void 0===n&&(n=t.length),n=N.min(n,t.length),e=~e>>>0;for(let r=0;r<n;r++)e=e>>>8^mn[255&(e^t[r])];return (4294967295^e)>>>0}function mt(e){16==e.M?(De(e,e.p),e.p=0,e.M=0):e.M>=8&&(g(e,e.p),e.p>>=8,e.M-=8);}function bt(e){e.M>8?De(e,e.p):e.M>0&&g(e,e.p),e.Ee=1+(e.M-1&7),e.p=0,e.M=0;}function bn(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].Ue;0!=t&&(e[i].Qe=$e(f[t]++,t));}}function L(e,t,n){e.M>Ue-n?(e.p=65535&(e.p|t<<e.M),De(e,e.p),e.p=t>>Ue-e.M&65535,e.M+=n-Ue):(e.p=65535&(e.p|t<<e.M),e.M+=n);}function st(e){for(let t=0;t<e.R.length;t++)e.R[t].P=0;for(let t=0;t<e.X.length;t++)e.X[t].P=0;for(let t=0;t<e.$e.length;t++)e.$e[t].P=0;e.R[Ie].P=1,e.ie=e.fe=0,e.U=e._e=0;}function ht(e){if(e.R&&e.R.length>=le)for(let t=0;t<le;t++)e.R[t]=Q();else {e.R=[];for(let t=0;t<le;t++)e.R.push(Q());}if(e.X&&e.X.length>=2*me+1)for(let t=0;t<2*me+1;t++)e.X[t]=Q();else {e.X=[];for(let t=0;t<2*me+1;t++)e.X.push(Q());}if(e.$e&&e.$e.length>=2*oe+1)for(let t=0;t<2*oe+1;t++)e.$e[t]=Q();else {e.$e=[];for(let t=0;t<2*oe+1;t++)e.$e.push(Q());}e.Ie=new ne(e.R,new re(Ze,a_,ie+1,we,be)),e.De=new ne(e.X,new re(v_,i_,0,me,be)),e.Ae=new ne(e.$e,new re(null,Fe,0,oe,7)),e.p=0,e.M=0,e.Ee=0,st(e);}var he=1;function sn(e,t,n){return n=e.pe[he],e.pe[he]=e.pe[e.We--],I_(e,t,he),n}function ft(e,t,n,r){return e[t].P<e[n].P||e[t].P==e[n].P&&r[t]<=r[n]}function I_(e,t,n){let r=e.pe[n],i=n<<1;for(;i<=e.We&&(i<e.We&&ft(t,e.pe[i+1],e.pe[i],e.ze)&&i++,!ft(t,r,e.pe[i],e.ze));)e.pe[n]=e.pe[i],n=i,i<<=1;e.pe[n]=r;}function hn(e,t){let n,r,i,f,_,l,o=t.L,u=t.q,a=t.Z.N,c=t.Z.V,s=t.Z.W,d=t.Z.$,h=0;for(f=0;f<=be;f++)e.Me[f]=0;for(o[e.pe[e.Se]].Ue=0,n=e.Se+1;n<le;n++)r=e.pe[n],f=o[o[r].Pe].Ue+1,f>d&&(f=d,h++),o[r].Ue=f,!(r>u)&&(e.Me[f]++,_=0,r>=s&&(_=c[r-s]),l=o[r].P,e.ie+=l*(f+_),a&&(e.fe+=l*(a[r].Ue+_)));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].Ue!=f&&(e.ie+=(f-o[i].Ue)*o[i].P,o[i].Ue=f),r--);}}function k_(e,t){let n,r,i,f=t.L,_=t.Z.N,l=t.Z.S,o=-1;for(e.We=0,e.Se=le,n=0;n<l;n++)0!=f[n].P?(e.pe[++e.We]=o=n,e.ze[n]=0):f[n].Ue=0;for(;e.We<2;)i=e.pe[++e.We]=o<2?++o:0,f[i].P=1,e.ze[i]=0,e.ie--,_&&(e.fe-=_[i].Ue);for(t.q=o,n=N.floor(e.We/2);n>=1;n--)I_(e,f,n);i=l;do{n=sn(e,f,n),r=e.pe[he],e.pe[--e.Se]=n,e.pe[--e.Se]=r,f[i].P=f[n].P+f[r].P,e.ze[i]=(e.ze[n]>=e.ze[r]?e.ze[n]:e.ze[r])+1,f[n].Pe=f[r].Pe=i,e.pe[he]=i++,I_(e,f,he);}while(e.We>=2);e.pe[--e.Se]=e.pe[he],hn(e,t),bn(f,t.q,e.Me);}function ut(e,t,n){let r,i,f=-1,_=t[0].Ue,l=0,o=7,u=4;for(0==_&&(o=138,u=3),t[n+1].Ue=65535,r=0;r<=n;r++)i=_,_=t[r+1].Ue,!(++l<o&&i==_)&&(l<u?e.$e[i].P+=l:0!=i?(i!=f&&e.$e[i].P++,e.$e[t_].P++):l<=10?e.$e[n_].P++:e.$e[r_].P++,l=0,f=i,0==_?(o=138,u=3):i==_?(o=6,u=3):(o=7,u=4));}function ct(e,t,n){let r,i=-1,f=t[0].Ue,_=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].Ue,!(++_<l&&r==f)){if(_<o)do{L(e,e.$e[r].Qe,e.$e[r].Ue);}while(0!=--_);else 0!=r?(r!=i&&(L(e,e.$e[r].Qe,e.$e[r].Ue),_--),L(e,e.$e[t_].Qe,e.$e[t_].Ue),L(e,_-3,2)):_<=10?(L(e,e.$e[n_].Qe,e.$e[n_].Ue),L(e,_-3,3)):(L(e,e.$e[r_].Qe,e.$e[r_].Ue),L(e,_-11,7));_=0,i=r,0==f?(l=138,o=3):r==f?(l=6,o=3):(l=7,o=4);}}function xn(e){let t;for(ut(e,e.R,e.Ie.q),ut(e,e.X,e.De.q),k_(e,e.Ae),t=oe-1;t>=3&&0==e.$e[Se[t]].Ue;t--);return e.ie+=3*(t+1)+5+5+4,t}function pn(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.$e[Se[i]].Ue,3);ct(e,e.R,t-1),ct(e,e.X,n-1);}function Me(e,t,n,r,i=0){L(e,(at<<1)+r,3),bt(e),De(e,n),De(e,~n),n&&t&&M(e.I,e.D,t,i,n),e.D+=n;}function xt(e){mt(e);}function pt(e){L(e,y_<<1,3),L(e,Ze[Ie].Qe,Ze[Ie].Ue),mt(e);}function dt(e,t,n){let r,i,f,_,l=0;if(0!=e.U)do{r=255&e.Le[l],r+=(255&e.Le[l+1])<<8,i=e.Le[l+2],l+=3,0==r?L(e,t[i].Qe,t[i].Ue):(f=__[i],L(e,t[f+ie+1].Qe,t[f+ie+1].Ue),_=a_[f],0!=_&&(i-=Te[f],L(e,i,_)),r--,f=T_(r),L(e,n[f].Qe,n[f].Ue),_=i_[f],0!=_&&(r-=ge[f],L(e,r,_)));}while(l<e.U);L(e,t[Ie].Qe,t[Ie].Ue);}function Sn(e){let t,n=4093624447;for(t=0;t<=31;t++,n>>=1)if(1&n&&0!=e.R[t].P)return 0;if(0!=e.R[9].P||0!=e.R[10].P||0!=e.R[13].P)return 1;for(t=32;t<ie;t++)if(0!=e.R[t].P)return 1;return 0}function St(e,t,n,r,i=0){let f,_,l=0;e.be>0?(2==e.o.t&&(e.o.t=Sn(e)),k_(e,e.Ie),k_(e,e.De),l=xn(e),f=e.ie+3+7>>3,_=e.fe+3+7>>3,(_<=f||4==e.ge)&&(f=_)):f=_=n+5,n+4<=f&&t?Me(e,t,n,r,i):_==f?(L(e,(y_<<1)+r,3),dt(e,Ze,v_)):(L(e,(it<<1)+r,3),pn(e,e.Ie.q+1,e.De.q+1,l+1),dt(e,e.R,e.X)),st(e),r&&bt(e);}function wt(){let e=Ve();return e.l=w_(e),e}var Ye=[{Re:kt,Xe:0,Ce:0,He:0,Oe:0},{Re:z_,Xe:4,Ce:4,He:8,Oe:4},{Re:z_,Xe:5,Ce:5,He:16,Oe:8},{Re:z_,Xe:6,Ce:16,He:32,Oe:32},{Re:Re,Xe:4,Ce:4,He:16,Oe:16},{Re:Re,Xe:16,Ce:8,He:16,Oe:32},{Re:Re,Xe:16,Ce:16,He:32,Oe:128},{Re:Re,Xe:32,Ce:32,He:128,Oe:256},{Re:Re,Xe:128,Ce:128,He:256,Oe:1024},{Re:Re,Xe:258,Ce:258,He:258,Oe:4096}];function Et(e){return 2*e-(e>4?9:0)}function f_(e,t,n){return ((t<<e.G^n)&e.j)>>>0}function u_(e,t){e.ke=f_(e,e.ke,e.u[t+(k-1)]);let n=e.J[t&e.Y]=e.K[e.ke];return e.K[e.ke]=t,n}function At(e){e.K[e.F-1]=0,je(e.K,0,(e.F-1)*e.K.BYTES_PER_ELEMENT);}function Dn(e){let t,n,r=e.h;for(t=e.F;t>0;)t--,n=e.K[t],e.K[t]=n>=r?n-r:0;for(t=r;t>0;)t--,n=e.J[t],e.J[t]=n>=r?n-r:0;}function C_(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.O?e.i=se(e.i,new x(t.buffer,t.byteOffset+n,i),i):2==e.l.O&&(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 c_(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.Ve-=r,e.ae-=r,e.ue-=r,e.le>e.ae&&(e.le=e.ae),Dn(e),n+=r),0==e.o.avail_in)break;if(t=C_(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=f_(e,e.ke,e.u[t+1]);e.le&&(e.ke=f_(e,e.ke,e.u[t+k-1]),e.J[t&e.Y]=e.K[e.ke],e.K[e.ke]=t,t++,e.le--,!(e.ce+e.le<k)););}}while(e.ce<ae&&0!=e.o.avail_in);if(e.m<e.Ne){let t,n=e.ae+e.ce;e.m<n?(t=e.Ne-n,t>Be&&(t=Be),je(e.u,n,t),e.m=n+t):e.m<n+Be&&(t=n+Be-e.m,t>e.Ne-e.m&&(t=e.Ne-e.m),je(e.u,e.m,t),e.m+=t);}}function Dt(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>_t||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=w_(e);return l?(e.l=l,l.o=e,l.H=42,l.O=_,l.T=void 0,l.k=r,l.h=1<<l.k,l.Y=l.h-1,l.B=i+7,l.F=1<<l.B,l.j=l.F-1,l.G=(l.B+k-1)/k,l.u=new x(2*l.h),l.J=new E(l.h),l.K=new E(l.F),l.m=0,l.ee=1<<i+6,l.I=new x(l.ee*rt),l.ne=4*l.ee,l.u&&l.J&&l.K&&l.I?(l.Le=l.I.subarray(l.ee),l.A=l.te+l.ee,l.C=3*(l.ee-1),l.be=t,l.ge=f,l.qe=n,In(e)):(l.H=666,e.msg=g_(-4),B_(e),-4)):-4}function U_(e){if(null==e)return true;let t=e.l;return !t||t.o!=e||42!=t.H&&57!=t.H&&69!=t.H&&73!=t.H&&91!=t.H&&103!=t.H&&113!=t.H&&666!=t.H}function yn(e){let t;return U_(e)?-2:(e.total_in=e.total_out=0,e.msg="",e.t=2,t=e.l,t.D=0,t.re=t.te,t.O<0&&(t.O=-t.O),t.H=2==t.O?57:42,e.i=2==t.O?W(0):se(0),t.oe=-2,ht(t),0)}function vn(e){e.Ne=2*e.h,At(e),e.ye=Ye[e.be].Xe,e.me=Ye[e.be].Ce,e.ve=Ye[e.be].He,e.xe=Ye[e.be].Oe,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 In(e){let t=yn(e);return 0==t&&vn(e.l),t}function Xe(e,t){g(e,t>>8),g(e,255&t);}function q(e){let t,n=e.l;xt(n),t=n.D,t>e.avail_out&&(t=e.avail_out),0!=t&&(M(e.next_out,e.next_out_index,n.I,n.re,t),e.next_out_index+=t,n.re+=t,e.total_out+=t,e.avail_out-=t,n.D-=t,0==n.D&&(n.re=n.te));}function ke(e,t){let n=e.l;n.T&&n.T.Te&&(e.i=W(e.i,new x(n.I.buffer,n.te+t,n.D-t),n.D-t));}function yt(e,t){let n,r=e.l;if(U_(e)||t>5||t<0)return Ae(e,-2);if(!e.next_out||0!=e.avail_in&&!e.next_in||666==r.H&&4!=t)return Ae(e,-2);if(0==e.avail_out)return Ae(e,-5);if(n=r.oe,r.oe=t,0!=r.D){if(q(e),0==e.avail_out)return r.oe=$,0}else if(0==e.avail_in&&Et(t)<=Et(n)&&4!=t)return Ae(e,-5);if(666==r.H&&0!=e.avail_in)return Ae(e,-5);if(42==r.H&&0==r.O&&(r.H=113),42==r.H){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|=nt),n+=31-n%31,Xe(r,n),0!=r.ae&&(Xe(r,e.i>>16),Xe(r,65535&e.i)),e.i=1,r.H=113,q(e),0!=r.D)return r.oe=$,0}if(57==r.H)if(e.i=W(0),g(r,31),g(r,139),g(r,8),r.T)g(r,(r.T.Ye?1:0)+(r.T.Te?2:0)+(null==r.T.Be?0:4)+(null==r.T.Fe?0:8)+(null==r.T.je?0:16)),g(r,255&r.T.Ge),g(r,r.T.Ge>>>8&255),g(r,r.T.Ge>>>16&255),g(r,r.T.Ge>>>24&255),g(r,9==r.be?2:r.ge>=2||r.be<2?4:0),g(r,255&r.T.Je),null!=r.T.Be&&(g(r,255&r.T.Ke),g(r,r.T.Ke>>>8&255)),r.T.Te&&(e.i=W(e.i,r.I,r.D)),r.Ze=0,r.H=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,tt),r.H=113,q(e),0!=r.D)return r.oe=$,0;if(69==r.H){if(r.T&&null!=r.T.Be){let t=r.D,n=(65535&r.T.Ke)-r.Ze;for(;r.D+n>r.ne;){let i=r.ne-r.D;if(M(r.I,r.D,r.T.Be,r.Ze,i),r.D=r.ne,ke(e,t),r.Ze+=i,q(e),0!=r.D)return r.oe=$,0;t=0,n-=i;}M(r.I,r.D,r.T.Be,r.Ze,n),r.D+=n,ke(e,t),r.Ze=0;}r.H=73;}if(73==r.H){if(r.T&&r.T.Fe&&r.T.Fe.length){let t,n=r.D;do{if(r.D==r.ne){if(ke(e,n),q(e),0!=r.D)return r.oe=$,0;n=0;}t=r.T.Fe[r.Ze++],g(r,t);}while(0!=t);ke(e,n),r.Ze=0;}r.H=91;}if(91==r.H){if(r.T&&r.T.je&&r.T.je.length){let t,n=r.D;do{if(r.D==r.ne){if(ke(e,n),q(e),0!=r.D)return r.oe=$,0;n=0;}t=r.T.je[r.Ze++],g(r,t);}while(0!=t);ke(e,n);}r.H=103;}if(103==r.H){if(r.T&&r.T.Te){if(r.D+2>r.ne&&(q(e),0!=r.D))return r.oe=$,0;g(r,255&e.i),g(r,e.i>>>8&255),e.i=W(0);}if(r.H=113,q(e),0!=r.D)return r.oe=$,0}if(0!=e.avail_in||0!=r.ce||0!=t&&666!=r.H){let n=0==r.be?kt(r,t):2==r.ge?Nn(r,t):3==r.ge?kn(r,t):Ye[r.be].Re(r,t);if((2==n||3==n)&&(r.H=666),0==n||2==n)return 0==e.avail_out&&(r.oe=$),0;if(1==n&&(1==t?pt(r):5!=t&&(Me(r,null,0,0),3==t&&(At(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.O<=0?1:(2==r.O?(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)):(Xe(r,e.i>>>16&65535),Xe(r,65535&e.i)),q(e),r.O>0&&(r.O=-r.O),0!=r.D?0:1)}function B_(e){if(U_(e))return -2;let t=e.l,n=t.H;return t.u=Z,t.J=qe,t.K=qe,t.I=Z,t.Le=Z,t.pe=new H(0),t.ze=Z,t.Me=qe,t.R.length=0,t.X.length=0,t.$e.length=0,t.T=void 0,t.te=0,t.re=0,t.A=0,113==n?-3:0}function vt(e,t){let n,r,i=e.xe,f=e.ae,_=e.de,l=e.ve,o=e.ae>ve(e)?e.ae-ve(e):0,u=e.J,a=e.Y,c=e.u[f],s=e.u[f+1],d=e.u[f+_-1],h=e.u[f+_];e.de>=e.me&&(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.Ve=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 It(e,t){St(e,e.u,e.ae-e.ue,t,e.ue),e.ue=e.ae,q(e.o);}function V(e,t){return It(e,t?1:0),0==e.o.avail_out?t?2:0:null}var gt=65535;function Ne(e,t){return e<t?e:t}function kt(e,t){let n,r,i,f=Ne(e.ne-5,e.h),_=0,l=e.o.avail_in;do{if(n=gt,i=e.M+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,Me(e,null,0,_),e.I[e.D-4]=n,e.I[e.D-3]=n>>8,e.I[e.D-2]=~n,e.I[e.D-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&&(C_(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.m<e.ae&&(e.m=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&&(C_(e.o,e.u,e.ae,i),e.ae+=i,e.le+=Ne(i,e.h-e.le)),e.m<e.ae&&(e.m=e.ae),i=e.M+42>>3,i=Ne(e.ne-i,gt),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,Me(e,e.u,n,_,e.ue),e.ue+=n,q(e.o)),_&&(e.Ee=8),_?2:0)}function z_(e,t){let n,r=false;for(;;){if(e.ce<ae){if(c_(e),e.ce<ae&&0==t)return 0;if(0==e.ce)break}if(n=0,e.ce>=k&&(n=u_(e,e.ae)),0!=n&&e.ae-n<=ve(e)&&(e.se=vt(e,n)),e.se>=k)if(e.ae,e.Ve,e.se,r=e_(e,e.ae-e.Ve,e.se-k),e.ce-=e.se,e.se<=e.ye&&e.ce>=k){e.se--;do{e.ae++,n=u_(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=f_(e,e.ke,e.u[e.ae+1]);else r=ye(e,e.u[e.ae]),e.ce--,e.ae++;if(r){let t=V(e,false);if(null!=t)return t}}if(e.le=e.ae<k-1?e.ae:k-1,4==t){return V(e,true)??3}if(e.U){let t=V(e,false);if(null!=t)return t}return 1}function Re(e,t){let n,r=false;for(;;){if(e.ce<ae){if(c_(e),e.ce<ae&&0==t)return 0;if(0==e.ce)break}if(n=0,e.ce>=k&&(n=u_(e,e.ae)),e.de=e.se,e.he=e.Ve,e.se=k-1,0!=n&&e.de<e.ye&&e.ae-n<=ve(e)&&(e.se=vt(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,e.ae-1-e.he,e.de-k),e.ce-=e.de-1,e.de-=2;do{++e.ae<=t&&(n=u_(e,e.ae));}while(0!=--e.de);if(e.we=0,e.se=k-1,e.ae++,r){let t=V(e,false);if(null!=t)return t}}else if(e.we){if(r=ye(e,e.u[e.ae-1]),r&&It(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 V(e,true)??3}if(e.U){let t=V(e,false);if(null!=t)return t}return 1}function kn(e,t){let n,r,i,f;for(;;){if(e.ce<=_e){if(c_(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_(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=V(e,false);if(null!=t)return t}}if(e.le=0,4==t){return V(e,true)??3}if(e.U){let t=V(e,false);if(null!=t)return t}return 1}function Nn(e,t){let n=false;for(;;){if(0==e.ce&&(c_(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=V(e,false);if(null!=t)return t}}if(e.le=0,4==t){return V(e,true)??3}if(e.U){let t=V(e,false);if(null!=t)return t}return 1}var ue=852,d_=592,m_=594,Nt=ge.map(e=>e+1),Rt=Te.subarray(0,-1).map(e=>e+3),Rn=[16,1,73,1,200,1],zn=[144,1,72,1,78,1],zt=Ee.map(Yt),Ct=Ee.map(Wt);zt.push(64,2),Ct.push(142,2);var Lt=de.slice(0,-2).map(Yt),Ot=de.slice(0,-2).map(Wt);Lt.push(...Rn),Ot.push(...zn);var Ht=new E([...Rt,258,0,0]),Ut=new E([...Rt,3,0,0]),Bt=te(Lt),Ft=te(Ot),Zt=new E([...Nt,0,0]),Pt=new E([...Nt,32769,49153]),Mt=te(zt),Xt=te(Ct);function Yt(e,t){return t%2?e:e+16}function Wt(e,t){return t%2?e:e+128}function Kt(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.M>>>0,c=r.et,s=r.tt,d=(1<<r.nt)-1,h=(1<<r.rt)-1,w=r.h>>>0,k=r.m>>>0,b=r.v>>>0,g=r.it,m=f-(t-e.avail_out),v=f+(e.avail_out-257),x=i+(e.avail_in-5),y=0,p=0,z=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(z=n.ft,u>>>=z,a-=z,z=n._t,0==z){l[f++]=n.lt;break}if(16&z){if(y=n.lt,z&=15,z){for(;a<z;){if(!(i<_.length)){r.ot=16200;break e}u+=_[i++]<<a,a+=8;}y+=u&(1<<z)-1,u>>>=z,a-=z;}for(;a<15;){if(!(i<_.length)){r.ot=16200;break e}u+=_[i++]<<a,a+=8;}n=s[u&h];n:for(;;){if(z=n.ft,u>>>=z,a-=z,z=n._t,16&z){if(p=n.lt,z&=15,z){for(;a<z;){if(!(i<_.length)){r.ot=16200;break e}u+=_[i++]<<a,a+=8;}p+=u&(1<<z)-1,u>>>=z,a-=z;}let t=y,c=f-m;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&z){e.msg="invalid distance code",r.ot=16209;break e}n=s[n.lt+(u&(1<<z)-1)];continue n}break}if(64&z){if(32&z){r.ot=16191;break e}e.msg="invalid literal/length code",r.ot=16209;break e}n=c[n.lt+(u&(1<<z)-1)];continue t}}while(i<x&&f<v);let L=a>>3;i-=L,a-=L<<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<v?v-f+257:257-(f-v),r.p=u>>>0,r.M=a>>>0;}function F_(e,t){let n=[],r=t?ue+m_:ue+d_;return {...Je(e,0),o:e,ot:16180,ut:false,O:0,ct:false,st:0,dt:0,ht:0,wt:0,u:Z,kt:0,bt:0,Be:0,et:n,tt:n,nt:0,rt:0,gt:0,vt:0,xt:0,yt:0,zt:n,Mt:new E(320),Lt:new E(288),Et:new y(r).fill(null).map(()=>pe()),Zt:0,it:true,qt:0,Nt:0,Vt:t}}function pe(e=0,t=0,n=0){return {_t:e,ft:t,lt:n}}function Z_(e=1){return {_t:64,ft:e,lt:0}}function qt(e=0){return {_t:96,ft:e,lt:0}}function P_(e){return (255&e)<<24|(e>>8&255)<<16|(e>>16&255)<<8|e>>24&255}var Le=15,Ln={Vt:false,Wt:Ht,St:Bt,$t:Zt,It:Mt,Dt:20,At:257,Qt:0,Ut:d_,Pt:false,Rt:true},On={Vt:true,Wt:Ut,St:Ft,$t:Pt,It:Xt,Dt:19,At:256,Qt:-1,Ut:m_,Pt:true,Rt:false};function Oe(e,t,n,r,i,f,_,l){let o,u,a,c,s,d,h,w,k,b,g,m,v,x,y,p,z,M,L,Z=new E(Le+1),q=new E(Le+1),N=l?On:Ln;for(o=0;o<=Le;o++)Z[o]=0;for(u=0;u<n;u++)Z[t[u]]++;for(s=i.Xt,c=Le;c>=1&&0==Z[c];c--);if(s>c&&(s=c),0==c)return N.Rt?(y=Z_(1),r.Xt[0]=y,r.Xt[1]=y,i.Xt=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(q[1]=0,o=1;o<Le;o++)q[o+1]=q[o]+Z[o];for(u=0;u<n;u++)0!=t[u]&&(f[q[t[u]]++]=u);switch(e){case 0:z=M=f,L=N.Dt;break;case 1:z=N.Wt,M=N.St,L=N.At;break;default:z=N.$t,M=N.It,L=N.Qt;}if(b=0,u=0,o=a,p=_.Xt,d=s,h=0,v=-1,k=1<<s,x=k-1,1==e&&(N.Pt?k>=ue:k>ue)||2==e&&(N.Pt?k>=N.Ut:k>N.Ut))return 1;for(;;){y=Hn(f,u,o,h,e,z,M,L,N.Vt),g=1<<o-h,m=1<<d,a=m;do{m-=g;let e=(b>>h)+m;r.Xt[p+e]={...y};}while(0!=m);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)!=v){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.Pt?k>=ue:k>ue)||2==e&&(N.Pt?k>=N.Ut:k>N.Ut))return 1;v=b&x,r.Xt[_.Xt+v]={_t:d,ft:s,lt:p-_.Xt};}}if(0!=b)for(y=Z_(o-h);0!=b;){for(0!=h&&(b&x)!=v&&(h=0,o=s,p=_.Xt,d=s,y.ft=o),r.Xt[p+(b>>h)]={...y},g=1<<o-1;b&g;)g>>=1;0!=g?(b&=g-1,b+=g):b=0;}return _.Xt+=k,i.Xt=s,0}function Hn(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=qt(n-r);return u}var Pn={Ct:true,Ht:new y(544),Ot:[],Tt:[]},Mn={Ct:true,Ht:new y(544),Ot:[],Tt:[]};function jt(e){let t=Ve();return t.l=F_(t,!!e),t}function Ge(e){let t;return !(e&&(t=e.l,!(!t||t.o!=e||t.Vt&&(t.ot<16191||t.ot>16209)||!t.Vt&&(t.ot<16180||t.ot>16211))))}function Xn(e){let t;return Ge(e)?-2:(t=e.l,e.total_in=e.total_out=t.wt=0,e.msg="",t.O&&(e.i=1&t.O),t.ot=t.Vt?16191:16180,t.ut=false,t.ct=false,t.st=-1,t.dt=t.Vt?65536:32768,delete t.T,t.p=0,t.M=0,t.et=t.Et,t.tt=t.Et,t.zt=t.Et,t.it=true,t.qt=-1,0)}function Yn(e){let t;return Ge(e)?-2:(t=e.l,t.h=0,t.m=0,t.v=0,Xn(e))}function Wn(e,t){let n,r,i;if(Ge(e))return -2;if(r=e.l,r.Vt?(t=-16,i=16):i=15,t<0){if(t<-i)return -2;n=0,t=-t;}else n=5+(t>>4),!r.Vt&&t<48&&(t&=15);return t&&(t<8||t>i)?-2:(r.u.length>0&&r.k!=t&&(r.u=Z),r.O=n,r.k=t,Yn(e))}function Vt(e,t){let n,r;if(!e)return -2;e.msg="";let i=!!e.l.Vt;return r=F_(e,i),i&&(t=-16),e.l=r,r.o=e,r.ot=r.Vt?16191:16180,n=Wn(e,t),n}function Gn(e){let t=e.Vt?Mn:Pn,n={Xt:0};if(t.Ct){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.Ht[e]=pe();f=t.Ht,t.Ot=f,i=9;let _={Xt:f},l={Xt:i},o={Xt:0};for(Oe(1,e.Mt,288,_,l,e.Lt,o,e.Vt),f=_.Xt,i=l.Xt,e.Zt=o.Xt,r=0;r<32;)e.Mt[r++]=5;i=5;let u=o.Xt,a={Xt:f},c={Xt:i};n.Xt=u,Oe(2,e.Mt,32,a,c,e.Lt,n,e.Vt),t.Tt=f.slice(u),t.Ct=false;}e.et=t.Ot,e.nt=9,e.tt=t.Tt,e.rt=5,e.Zt=n.Xt;}function Kn(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.v=0,r.m=0),n>=r.h)M(r.u,0,t,t.length-r.h,r.h),r.v=0,r.m=r.h;else {let e=r.h-r.v;e>n&&(e=n),M(r.u,r.v,t,t.length-n,e),(n-=e)?(M(r.u,0,t,t.length-n,n),r.v=n,r.m=r.h):(r.v+=e,r.v==r.h&&(r.v=0),r.m<r.h&&(r.m+=e));}return 0}var s_=class extends z{constructor(){super("Need more input");}};function Jt(e,t){let n,r,i,f,_,l,o,u,a,c,s,d,h,w,k,b,g,m=new x(4);if(Ge(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),L(),c=l,s=o,g=0;try{for(;;)switch(n.ot){case 16180:if(0==n.O){n.ot=16192;break}if(V(16),2&n.O&&35615==u){0==n.k&&(n.k=15),n.ht=W(0),n.ht=p(n.ht,u),q(),n.ot=16181;break}if(n.T&&(n.T.Yt=-1),!(1&n.O)||((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($(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,q();break;case 16181:if(V(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.T&&(n.T.Ye=u>>8&1),512&n.st&&4&n.O&&(n.ht=p(n.ht,u)),q(),n.ot=16182;case 16182:V(32),n.T&&(n.T.Ge=u),512&n.st&&4&n.O&&(n.ht=z(n.ht,u)),q(),n.ot=16183;case 16183:V(16),n.T&&(n.T.Bt=255&u,n.T.Je=u>>8),512&n.st&&4&n.O&&(n.ht=p(n.ht,u)),q(),n.ot=16184;case 16184:1024&n.st?(V(16),n.kt=u,n.T&&(n.T.Ke=u),512&n.st&&4&n.O&&(n.ht=p(n.ht,u)),q()):n.T&&(n.T.Be=Z),n.ot=16185;case 16185:if(1024&n.st&&(d=n.kt,d>l&&(d=l),d&&(n.T&&n.T.Be&&n.T.Ft&&(b=n.T.Ke-n.kt)<n.T.Ft&&M(n.T.Be,b,r,i,d),512&n.st&&4&n.O&&(n.ht=W(n.ht,r.subarray(i,i+d),d)),l-=d,i+=d,n.kt-=d),n.kt))return v();n.kt=0,n.ot=16186;case 16186:if(2048&n.st){if(0==l)return v();d=0;do{b=r[i+d++],n.T&&n.T.jt&&n.kt<n.T.jt&&(n.T.Fe[n.kt++]=b);}while(b&&d<l);if(512&n.st&&4&n.O&&(n.ht=W(n.ht,r.subarray(i,i+d),d)),l-=d,i+=d,b)return v()}else n.T&&(n.T.Fe=Z);n.kt=0,n.ot=16187;case 16187:if(4096&n.st){if(0==l)return v();d=0;do{b=r[i+d++],n.T&&n.T.Gt&&n.kt<n.T.Gt&&(n.T.je[n.kt++]=b);}while(b&&d<l);if(512&n.st&&4&n.O&&(n.ht=W(n.ht,r.subarray(i,i+d),d)),l-=d,i+=d,b)return v()}else n.T&&(n.T.je=Z);n.ot=16188;case 16188:if(512&n.st){if(V(16),4&n.O&&u!=(65535&n.ht)){e.msg="header crc mismatch",n.ot=16209;break}q();}n.T&&(n.T.Te=n.st>>9&1,n.T.Yt=1),e.i=n.ht=W(0),n.ot=16191;break;case 16189:V(32),e.i=n.ht=P_(u),q(),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 v();case 16192:if(n.ut){I(),n.ot=16206;break}switch(V(3),n.ut=!!S(1),$(1),S(2)){case 0:n.ot=16193;break;case 1:if(Gn(n),n.ot=16199,6==t)return $(2),v();break;case 2:n.ot=16196;break;case 3:e.msg="invalid block type",n.ot=16209;}$(2);break;case 16193:if(I(),V(32),(65535&u)!=(u>>>16^65535)){e.msg="invalid stored block lengths",n.ot=16209;break}if(n.kt=65535&u,q(),n.ot=16194,6==t)return v();case 16194:n.ot=16195;case 16195:if(d=n.kt,d){if(d>l&&(d=l),d>o&&(d=o),0==d)return v();M(f,_,r,i,d),l-=d,i+=d,o-=d,_+=d,n.kt-=d;break}n.ot=16191;break;case 16196:if(V(14),n.vt=S(5)+257,$(5),n.xt=S(5)+1,$(5),n.gt=S(4)+4,$(4),n.vt>286||!n.Vt&&n.xt>30){e.msg=n.Vt?"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;)V(3),n.Mt[Se[n.yt++]]=S(3),$(3);for(;n.yt<19;)n.Mt[Se[n.yt++]]=0;n.zt=n.Et,n.et=n.tt=n.zt,n.nt=7;let c={Xt:n.zt},m={Xt:n.nt},x={Xt:0};if(g=Oe(0,n.Mt,19,c,m,n.Lt,x,n.Vt),n.zt=c.Xt,n.nt=m.Xt,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);)N();if(w.lt<16)$(w.ft),n.Mt[n.yt++]=w.lt;else {if(16==w.lt){if(V(w.ft+2),$(w.ft),0==n.yt){e.msg="invalid bit length repeat",n.ot=16209;break}b=n.Mt[n.yt-1],d=3+S(2),$(2);}else 17==w.lt?(V(w.ft+3),$(w.ft),b=0,d=3+S(3),$(3)):(V(w.ft+7),$(w.ft),b=0,d=11+S(7),$(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.zt=n.Et,n.nt=9;let D={Xt:n.zt},A={Xt:n.nt},Q={Xt:0};g=Oe(1,n.Mt,n.vt,D,A,n.Lt,Q,n.Vt),n.zt=D.Xt,n.nt=A.Xt;let U=Q.Xt;if(n.et=n.zt.slice(0,U),g){e.msg="invalid literal/lengths set",n.ot=16209;break}n.rt=6;let P=n.Mt.subarray(n.vt,n.vt+n.xt),R={Xt:n.zt},X={Xt:n.rt},C={Xt:U};if(g=Oe(2,P,n.xt,R,X,n.Lt,C,n.Vt),n.zt=R.Xt,n.rt=X.Xt,n.tt=n.zt.slice(U),g){e.msg="invalid distances set",n.ot=16209;break}if(n.ot=16199,6==t)return v();case 16199:n.ot=16200;case 16200:if(!n.Vt&&l>=6&&o>=258){E(),Kt(e,s),L(),16191==n.ot&&(n.qt=-1);break}for(n.qt=0;w=n.et[S(n.nt)],!(w.ft<=a);)N();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);)N();$(k.ft),n.qt+=k.ft;}if($(w.ft),n.qt+=w.ft,n.kt=w.lt,0==w._t){n.ot=16205;break}if(32&w._t){n.qt=-1,n.ot=16191;break}if(64&w._t){e.msg="invalid literal/length code",n.ot=16209;break}n.Be=w._t&(n.Vt?31:15),n.ot=16201;case 16201:n.Be&&(V(n.Be),n.kt+=S(n.Be),$(n.Be),n.qt+=n.Be),n.Nt=n.kt,n.ot=16202;case 16202:for(;w=n.tt[S(n.rt)],!(w.ft<=a);)N();if(!(240&w._t)){for(k=w;w=n.tt[k.lt+(S(k.ft+k._t)>>k.ft)],!(k.ft+w.ft<=a);)N();$(k.ft),n.qt+=k.ft;}if($(w.ft),n.qt+=w.ft,64&w._t){e.msg="invalid distance code",n.ot=16209;break}n.bt=w.lt,n.Be=15&w._t,n.ot=16203;case 16203:n.Be&&(V(n.Be),n.bt+=S(n.Be),$(n.Be),n.qt+=n.Be),n.ot=16204;case 16204:if(0==o)return v();if(d=s-o,n.bt>d){if(d=n.bt-d,d>n.m&&n.it){e.msg="invalid distance too far back",n.ot=16209;break}d>n.v?(d-=n.v,h=n.h-d):h=n.v-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 v();f[_++]=n.kt,o--,n.ot=16200;break;case 16206:if(n.O){if(V(32),s-=o,e.total_out+=s,n.wt+=s,4&n.O&&s){let t=f.subarray(_-s,_);e.i=n.ht=y(n.ht,t,s);}if(s=o,4&n.O&&(n.st?u:P_(u)>>>0)!=n.ht){e.msg="incorrect data check",n.ot=16209;break}q();}n.ot=16207;case 16207:if(n.O&&n.st){if(V(32),4&n.O&&u!=(4294967295&n.wt)){e.msg="incorrect length check",n.ot=16209;break}q();}n.ot=16208;case 16208:return g=1,v();case 16209:return g=-3,v();case 16210:return -4;default:return -2}}catch(e){if(e instanceof s_)return v();throw e}function v(){if(E(),n.h||s!=e.avail_out&&n.ot<16209&&(n.Vt?n.ot<16208:n.ot<16206)||4!=t){let t=s-e.avail_out;if(Kn(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.O&&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.M+(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 m[0]=255&t,m[1]=t>>>8&255,W(e,m,2)>>>0}function z(e,t){return m[0]=255&t,m[1]=t>>>8&255,m[2]=t>>>16&255,m[3]=t>>>24&255,W(e,m,4)>>>0}function L(){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.M;}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.M=a;}function q(){u=0,a=0;}function N(){if(0==l)throw new s_;l--,u+=(255&r[i])<<a,i++,u>>>=0,a+=8;}function V(e){for(;a<e;)N();}function S(e){return u&(1<<e)-1}function $(e){u>>>=e,a-=e;}function I(){u>>>=7&a,a-=7&a;}}function Qt(e){return Ge(e)?-2:0}var M_=65536,qn=32768,X_=class{constructor(e=16,t=M_){this.Jt=[],this.Kt=e;for(let n=0;n<N.min(e,4);n++)this.Jt.push(new x(t));}acquire(e=M_){for(let t=this.Jt.length-1;t>=0;t--){let n=this.Jt[t];if(n.length>=e)return this.Jt.splice(t,1),n}return new x(e)}release(e){this.Jt.length<this.Kt&&this.Jt.push(e);}};function $t(e){let t=new X_(32,M_),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,qn),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 en(){return new U({start(){},transform(e,t){try{t.enqueue(e.rn.slice(0));}finally{e.release();}},flush(){}})}function jn(e="deflate",t){let n="gzip"==e?31:"deflate-raw"==e?-15:15,r=t&&"number"==typeof t.level?t.level:-1;return $t({en:()=>wt(),tn:e=>Dt(e,r,8,n,8,0),nn:yt,fn:B_})}function Vn(e="deflate"){let t="gzip"==e?31:"deflate-raw"==e?-15:15;return $t({en:()=>jt("deflate64-raw"==e),tn:e=>Vt(e,t),nn:Jt,fn:Qt})}var h_=class{constructor(e="deflate",t){let n=jn(e,t);this.writable=n.writable,this.readable=n.readable.pipeThrough(en());}},x_=class{constructor(e="deflate"){let t=Vn(e);this.writable=t.writable,this.readable=t.readable.pipeThrough(en());}};
|
|
6792
|
+
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());}};
|
|
6518
6793
|
|
|
6519
6794
|
/*
|
|
6520
6795
|
Copyright (c) 2025 Gildas Lormeau. All rights reserved.
|
|
@@ -6548,8 +6823,8 @@
|
|
|
6548
6823
|
configure({
|
|
6549
6824
|
workerURI: "./core/web-worker-native.js",
|
|
6550
6825
|
wasmURI: null,
|
|
6551
|
-
CompressionStreamZlib:
|
|
6552
|
-
DecompressionStreamZlib:
|
|
6826
|
+
CompressionStreamZlib: p_,
|
|
6827
|
+
DecompressionStreamZlib: S_
|
|
6553
6828
|
});
|
|
6554
6829
|
|
|
6555
6830
|
/*
|
|
@@ -6605,8 +6880,6 @@
|
|
|
6605
6880
|
uncompressedSize: params.uncompressedSize || 0,
|
|
6606
6881
|
passThrough: params.passThrough
|
|
6607
6882
|
});
|
|
6608
|
-
// detached entries (e.g. clones) are not registered until they are attached,
|
|
6609
|
-
// otherwise they could never be garbage collected
|
|
6610
6883
|
if (parent || !fs.root) {
|
|
6611
6884
|
fs.entries[zipEntry.id] = zipEntry;
|
|
6612
6885
|
}
|
|
@@ -6675,7 +6948,7 @@
|
|
|
6675
6948
|
if (!writer || (writer.constructor == zipEntry.Writer && zipEntry.data)) {
|
|
6676
6949
|
return zipEntry.data;
|
|
6677
6950
|
} else {
|
|
6678
|
-
const reader = zipEntry.reader =
|
|
6951
|
+
const reader = zipEntry.reader = createReader(zipEntry.Reader, zipEntry.data, options);
|
|
6679
6952
|
const uncompressedSize = zipEntry.data ? zipEntry.data.uncompressedSize : reader.size;
|
|
6680
6953
|
await Promise.all([initStream(reader), initStream(writer, uncompressedSize)]);
|
|
6681
6954
|
const { readable } = reader;
|
|
@@ -6731,11 +7004,7 @@
|
|
|
6731
7004
|
}
|
|
6732
7005
|
|
|
6733
7006
|
async getArrayBuffer(options) {
|
|
6734
|
-
// this.data may be a string, a Uint8Array, a data URI or a Blob depending on how the entry
|
|
6735
|
-
// was created, so retrieve the bytes through getUint8Array rather than assuming a Blob; this
|
|
6736
|
-
// also applies the options (password, signal, onprogress...) like the other getData() getters
|
|
6737
7007
|
const array = await this.getUint8Array(options);
|
|
6738
|
-
// return the backing buffer directly when the array spans it, slicing the exact bytes otherwise
|
|
6739
7008
|
return array.byteOffset || array.byteLength != array.buffer.byteLength
|
|
6740
7009
|
? array.buffer.slice(array.byteOffset, array.byteOffset + array.byteLength)
|
|
6741
7010
|
: array.buffer;
|
|
@@ -6941,6 +7210,10 @@
|
|
|
6941
7210
|
return writable;
|
|
6942
7211
|
}
|
|
6943
7212
|
|
|
7213
|
+
exportFileSystemHandle(handle, options = {}) {
|
|
7214
|
+
return exportFileSystemHandle(this, handle, options);
|
|
7215
|
+
}
|
|
7216
|
+
|
|
6944
7217
|
async importZip(reader, options = {}) {
|
|
6945
7218
|
await initStream(reader);
|
|
6946
7219
|
const zipReader = new ZipReader(reader, options);
|
|
@@ -7101,7 +7374,6 @@
|
|
|
7101
7374
|
node = node.getChildByName(path[index]);
|
|
7102
7375
|
}
|
|
7103
7376
|
if (!node) {
|
|
7104
|
-
// exclude detached entries, e.g. clones registered in `entries` but not attached
|
|
7105
7377
|
node = this.entries.find(entry => entry && (entry == this.root || entry.isDescendantOf(this.root)) &&
|
|
7106
7378
|
entry.getRelativeName() == fullname);
|
|
7107
7379
|
}
|
|
@@ -7206,6 +7478,10 @@
|
|
|
7206
7478
|
return this.root.exportWritable(writable, options);
|
|
7207
7479
|
}
|
|
7208
7480
|
|
|
7481
|
+
exportFileSystemHandle(handle, options) {
|
|
7482
|
+
return this.root.exportFileSystemHandle(handle, options);
|
|
7483
|
+
}
|
|
7484
|
+
|
|
7209
7485
|
exportZip(writer, options) {
|
|
7210
7486
|
return this.root.exportZip(writer, options);
|
|
7211
7487
|
}
|
|
@@ -7269,10 +7545,13 @@
|
|
|
7269
7545
|
};
|
|
7270
7546
|
}
|
|
7271
7547
|
|
|
7548
|
+
function createReader(Reader, data, options) {
|
|
7549
|
+
return Reader.prototype ? new Reader(data, options) : Reader(data, options);
|
|
7550
|
+
}
|
|
7551
|
+
|
|
7272
7552
|
async function initReaders(entry, options) {
|
|
7273
7553
|
const fileEntries = [];
|
|
7274
7554
|
const pendingEntries = [entry];
|
|
7275
|
-
// per-export map so concurrent exports do not share (and lock) the same readers
|
|
7276
7555
|
const readers = new Map();
|
|
7277
7556
|
while (pendingEntries.length) {
|
|
7278
7557
|
const pendingEntry = pendingEntries.pop();
|
|
@@ -7285,7 +7564,7 @@
|
|
|
7285
7564
|
}
|
|
7286
7565
|
}
|
|
7287
7566
|
await Promise.all(fileEntries.map(async child => {
|
|
7288
|
-
const reader = child.reader =
|
|
7567
|
+
const reader = child.reader = createReader(child.Reader, child.data, options);
|
|
7289
7568
|
readers.set(child, reader);
|
|
7290
7569
|
try {
|
|
7291
7570
|
await initStream(reader);
|
|
@@ -7443,6 +7722,53 @@
|
|
|
7443
7722
|
}
|
|
7444
7723
|
}
|
|
7445
7724
|
|
|
7725
|
+
async function exportFileSystemHandle(zipEntry, directoryHandle, options) {
|
|
7726
|
+
const totalSize = getTotalSize([zipEntry], "uncompressedSize");
|
|
7727
|
+
const writtenSizes = new Map();
|
|
7728
|
+
await exportChildren(zipEntry, directoryHandle);
|
|
7729
|
+
return directoryHandle;
|
|
7730
|
+
|
|
7731
|
+
async function exportChildren(entry, parentHandle) {
|
|
7732
|
+
if (options.concurrent) {
|
|
7733
|
+
const results = await Promise.allSettled(entry.children.map(child => exportChild(child, parentHandle)));
|
|
7734
|
+
const failedResult = results.find(result => result.status == "rejected");
|
|
7735
|
+
if (failedResult) {
|
|
7736
|
+
throw failedResult.reason;
|
|
7737
|
+
}
|
|
7738
|
+
} else {
|
|
7739
|
+
for (const child of entry.children) {
|
|
7740
|
+
await exportChild(child, parentHandle);
|
|
7741
|
+
}
|
|
7742
|
+
}
|
|
7743
|
+
}
|
|
7744
|
+
|
|
7745
|
+
async function exportChild(child, parentHandle) {
|
|
7746
|
+
try {
|
|
7747
|
+
if (child.directory) {
|
|
7748
|
+
const childDirectoryHandle = await parentHandle.getDirectoryHandle(child.name, { create: true });
|
|
7749
|
+
await exportChildren(child, childDirectoryHandle);
|
|
7750
|
+
} else {
|
|
7751
|
+
const fileHandle = await parentHandle.getFileHandle(child.name, { create: true });
|
|
7752
|
+
const writable = await fileHandle.createWritable();
|
|
7753
|
+
await child.getData({ writable }, Object.assign({}, options, {
|
|
7754
|
+
onprogress: async progress => {
|
|
7755
|
+
if (options.onprogress) {
|
|
7756
|
+
writtenSizes.set(child.id, progress);
|
|
7757
|
+
try {
|
|
7758
|
+
await options.onprogress(Array.from(writtenSizes.values()).reduce((previousValue, currentValue) => previousValue + currentValue, 0), totalSize);
|
|
7759
|
+
} catch {
|
|
7760
|
+
// ignored
|
|
7761
|
+
}
|
|
7762
|
+
}
|
|
7763
|
+
}
|
|
7764
|
+
}));
|
|
7765
|
+
}
|
|
7766
|
+
} catch (error) {
|
|
7767
|
+
throw new Error(error.message + (child ? " (" + child.name + ")" : ""), { cause: error });
|
|
7768
|
+
}
|
|
7769
|
+
}
|
|
7770
|
+
}
|
|
7771
|
+
|
|
7446
7772
|
async function transformToFileSystemhandle(entry) {
|
|
7447
7773
|
const handle = {
|
|
7448
7774
|
name: entry.name
|
|
@@ -7742,7 +8068,6 @@
|
|
|
7742
8068
|
"x-doom": "wad",
|
|
7743
8069
|
"x-dvi": "dvi",
|
|
7744
8070
|
"x-httpd-eruby": "rhtml",
|
|
7745
|
-
"x-font": "pcf.Z",
|
|
7746
8071
|
"x-freemind": "mm",
|
|
7747
8072
|
"x-gnumeric": "gnumeric",
|
|
7748
8073
|
"x-go-sgf": "sgf",
|
|
@@ -8429,7 +8754,7 @@
|
|
|
8429
8754
|
"x-msbinder": "obd",
|
|
8430
8755
|
"x-mscardfile": "crd",
|
|
8431
8756
|
"x-msclip": "clp",
|
|
8432
|
-
"
|
|
8757
|
+
"x-ms-installer": "msi",
|
|
8433
8758
|
"x-msmediaview": [
|
|
8434
8759
|
"mvb",
|
|
8435
8760
|
"m13",
|
|
@@ -8792,7 +9117,10 @@
|
|
|
8792
9117
|
],
|
|
8793
9118
|
"x-tga": "tga",
|
|
8794
9119
|
"cis-cod": "cod",
|
|
8795
|
-
"avif":
|
|
9120
|
+
"avif": [
|
|
9121
|
+
"avif",
|
|
9122
|
+
"avifs"
|
|
9123
|
+
],
|
|
8796
9124
|
"heic": [
|
|
8797
9125
|
"heif",
|
|
8798
9126
|
"heic"
|
|
@@ -9011,7 +9339,6 @@
|
|
|
9011
9339
|
"vnd.wap.sl": "sl"
|
|
9012
9340
|
},
|
|
9013
9341
|
"video": {
|
|
9014
|
-
"avif": "avif",
|
|
9015
9342
|
"3gpp": "3gp",
|
|
9016
9343
|
"annodex": "axv",
|
|
9017
9344
|
"dl": "dl",
|
|
@@ -9130,25 +9457,29 @@
|
|
|
9130
9457
|
}
|
|
9131
9458
|
};
|
|
9132
9459
|
|
|
9133
|
-
|
|
9134
|
-
|
|
9135
|
-
|
|
9136
|
-
|
|
9137
|
-
|
|
9138
|
-
|
|
9139
|
-
|
|
9140
|
-
|
|
9141
|
-
|
|
9142
|
-
|
|
9460
|
+
let mimeTypes;
|
|
9461
|
+
|
|
9462
|
+
function getMimeType(filename) {
|
|
9463
|
+
return filename && getMimeTypes()[filename.split(".").pop().toLowerCase()] || getMimeType$1();
|
|
9464
|
+
}
|
|
9465
|
+
|
|
9466
|
+
function getMimeTypes() {
|
|
9467
|
+
if (!mimeTypes) {
|
|
9468
|
+
mimeTypes = {};
|
|
9469
|
+
for (const type of Object.keys(table)) {
|
|
9470
|
+
for (const subtype of Object.keys(table[type])) {
|
|
9471
|
+
const value = table[type][subtype];
|
|
9472
|
+
if (typeof value == "string") {
|
|
9473
|
+
mimeTypes[value] = type + "/" + subtype;
|
|
9474
|
+
} else {
|
|
9475
|
+
for (let indexMimeType = 0; indexMimeType < value.length; indexMimeType++) {
|
|
9476
|
+
mimeTypes[value[indexMimeType]] = type + "/" + subtype;
|
|
9477
|
+
}
|
|
9143
9478
|
}
|
|
9144
9479
|
}
|
|
9145
9480
|
}
|
|
9146
9481
|
}
|
|
9147
9482
|
return mimeTypes;
|
|
9148
|
-
})();
|
|
9149
|
-
|
|
9150
|
-
function getMimeType(filename) {
|
|
9151
|
-
return filename && mimeTypes[filename.split(".").pop().toLowerCase()] || getMimeType$1();
|
|
9152
9483
|
}
|
|
9153
9484
|
|
|
9154
9485
|
/*
|
|
@@ -9180,7 +9511,7 @@
|
|
|
9180
9511
|
*/
|
|
9181
9512
|
|
|
9182
9513
|
|
|
9183
|
-
|
|
9514
|
+
f(configure);
|
|
9184
9515
|
|
|
9185
9516
|
exports.BlobReader = BlobReader;
|
|
9186
9517
|
exports.BlobWriter = BlobWriter;
|
|
@@ -9206,6 +9537,7 @@
|
|
|
9206
9537
|
exports.ERR_INVALID_SIGNATURE = ERR_INVALID_SIGNATURE;
|
|
9207
9538
|
exports.ERR_INVALID_UNCOMPRESSED_SIZE = ERR_INVALID_UNCOMPRESSED_SIZE;
|
|
9208
9539
|
exports.ERR_INVALID_VERSION = ERR_INVALID_VERSION;
|
|
9540
|
+
exports.ERR_ITERATOR_COMPLETED_TOO_SOON = ERR_ITERATOR_COMPLETED_TOO_SOON;
|
|
9209
9541
|
exports.ERR_LOCAL_FILE_HEADER_NOT_FOUND = ERR_LOCAL_FILE_HEADER_NOT_FOUND;
|
|
9210
9542
|
exports.ERR_OVERLAPPING_ENTRY = ERR_OVERLAPPING_ENTRY;
|
|
9211
9543
|
exports.ERR_SPLIT_ZIP_FILE = ERR_SPLIT_ZIP_FILE;
|
|
@@ -9214,6 +9546,7 @@
|
|
|
9214
9546
|
exports.ERR_UNSUPPORTED_COMPRESSION = ERR_UNSUPPORTED_COMPRESSION$1;
|
|
9215
9547
|
exports.ERR_UNSUPPORTED_ENCRYPTION = ERR_UNSUPPORTED_ENCRYPTION;
|
|
9216
9548
|
exports.ERR_UNSUPPORTED_FORMAT = ERR_UNSUPPORTED_FORMAT;
|
|
9549
|
+
exports.ERR_WRITER_NOT_INITIALIZED = ERR_WRITER_NOT_INITIALIZED;
|
|
9217
9550
|
exports.ERR_ZIP_NOT_EMPTY = ERR_ZIP_NOT_EMPTY;
|
|
9218
9551
|
exports.HttpRangeReader = HttpRangeReader;
|
|
9219
9552
|
exports.HttpReader = HttpReader;
|
|
@@ -9230,6 +9563,7 @@
|
|
|
9230
9563
|
exports.ZipWriter = ZipWriter;
|
|
9231
9564
|
exports.ZipWriterStream = ZipWriterStream;
|
|
9232
9565
|
exports.configure = configure;
|
|
9566
|
+
exports.createOPFSTempStream = createOPFSTempStream;
|
|
9233
9567
|
exports.fs = fs;
|
|
9234
9568
|
exports.getMimeType = getMimeType;
|
|
9235
9569
|
exports.terminateWorkers = terminateWorkers;
|