1 | #!/usr/bin/env node
|
2 |
|
3 |
|
4 | try {
|
5 | Object.freeze({}).detectStrictMode = true;
|
6 | } catch (error) {
|
7 | throw new Error(`The whole PnP file got strict-mode-ified, which is known to break (Emscripten libraries aren't strict mode). This usually happens when the file goes through Babel.`);
|
8 | }
|
9 |
|
10 | var __non_webpack_module__ = module;
|
11 |
|
12 | function $$SETUP_STATE(hydrateRuntimeState, basePath) {
|
13 | return hydrateRuntimeState({
|
14 | "__info": [
|
15 | "This file is automatically generated. Do not touch it, or risk",
|
16 | "your modifications being lost. We also recommend you not to read",
|
17 | "it either without using the @yarnpkg/pnp package, as the data layout",
|
18 | "is entirely unspecified and WILL change from a version to another."
|
19 | ],
|
20 | "dependencyTreeRoots": [
|
21 | {
|
22 | "name": "@akala/core",
|
23 | "reference": "workspace:."
|
24 | }
|
25 | ],
|
26 | "enableTopLevelFallback": true,
|
27 | "ignorePatternData": "(^(?:\\.vscode\\/pnpify(?:\\/(?!\\.)(?:(?:(?!(?:^|\\/)\\.).)*?)|$))$)",
|
28 | "fallbackExclusionList": [
|
29 | ["@akala/core", ["workspace:."]]
|
30 | ],
|
31 | "fallbackPool": [
|
32 | [
|
33 | "@akala/json-rpc-ws",
|
34 | "npm:9.0.14"
|
35 | ],
|
36 | [
|
37 | "@types/body-parser",
|
38 | "npm:1.17.0"
|
39 | ],
|
40 | [
|
41 | "@types/connect",
|
42 | "npm:3.4.32"
|
43 | ],
|
44 | [
|
45 | "@types/debug",
|
46 | "npm:4.1.5"
|
47 | ],
|
48 | [
|
49 | "@types/events",
|
50 | "npm:1.2.0"
|
51 | ],
|
52 | [
|
53 | "@types/express",
|
54 | "npm:4.17.2"
|
55 | ],
|
56 | [
|
57 | "@types/express-serve-static-core",
|
58 | "npm:4.16.0"
|
59 | ],
|
60 | [
|
61 | "@types/mime",
|
62 | "npm:2.0.0"
|
63 | ],
|
64 | [
|
65 | "@types/mock-require",
|
66 | "npm:2.0.0"
|
67 | ],
|
68 | [
|
69 | "@types/node",
|
70 | "npm:13.11.1"
|
71 | ],
|
72 | [
|
73 | "@types/orchestrator",
|
74 | "npm:0.3.2"
|
75 | ],
|
76 | [
|
77 | "@types/q",
|
78 | "npm:1.5.1"
|
79 | ],
|
80 | [
|
81 | "@types/range-parser",
|
82 | "npm:1.2.3"
|
83 | ],
|
84 | [
|
85 | "@types/serve-static",
|
86 | "npm:1.13.2"
|
87 | ],
|
88 | [
|
89 | "@types/ws",
|
90 | "npm:7.2.1"
|
91 | ],
|
92 | [
|
93 | "accepts",
|
94 | "npm:1.3.7"
|
95 | ],
|
96 | [
|
97 | "array-flatten",
|
98 | "npm:1.1.1"
|
99 | ],
|
100 | [
|
101 | "body-parser",
|
102 | "npm:1.19.0"
|
103 | ],
|
104 | [
|
105 | "browser-process-hrtime",
|
106 | "npm:1.0.0"
|
107 | ],
|
108 | [
|
109 | "buffer-from",
|
110 | "npm:1.1.1"
|
111 | ],
|
112 | [
|
113 | "bytes",
|
114 | "npm:3.1.0"
|
115 | ],
|
116 | [
|
117 | "content-disposition",
|
118 | "npm:0.5.3"
|
119 | ],
|
120 | [
|
121 | "content-type",
|
122 | "npm:1.0.4"
|
123 | ],
|
124 | [
|
125 | "cookie",
|
126 | "npm:0.4.0"
|
127 | ],
|
128 | [
|
129 | "cookie-signature",
|
130 | "npm:1.0.6"
|
131 | ],
|
132 | [
|
133 | "debug",
|
134 | "virtual:bd697a751d58794530b682e5228b684a9f4a00d605f65e3707c8a27de2cc1b546f75892637f679b4286599f9fd60f3f12365f3d28f27a908f0b59bd6e06dae15#npm:4.1.1"
|
135 | ],
|
136 | [
|
137 | "deep-equal",
|
138 | "npm:1.0.1"
|
139 | ],
|
140 | [
|
141 | "depd",
|
142 | "npm:1.1.2"
|
143 | ],
|
144 | [
|
145 | "destroy",
|
146 | "npm:1.0.4"
|
147 | ],
|
148 | [
|
149 | "ee-first",
|
150 | "npm:1.1.1"
|
151 | ],
|
152 | [
|
153 | "encodeurl",
|
154 | "npm:1.0.2"
|
155 | ],
|
156 | [
|
157 | "encoding",
|
158 | "npm:0.1.12"
|
159 | ],
|
160 | [
|
161 | "end-of-stream",
|
162 | "npm:0.1.5"
|
163 | ],
|
164 | [
|
165 | "es6-promise",
|
166 | "npm:4.2.8"
|
167 | ],
|
168 | [
|
169 | "escape-html",
|
170 | "npm:1.0.3"
|
171 | ],
|
172 | [
|
173 | "etag",
|
174 | "npm:1.8.1"
|
175 | ],
|
176 | [
|
177 | "express",
|
178 | "npm:4.17.1"
|
179 | ],
|
180 | [
|
181 | "finalhandler",
|
182 | "npm:1.1.2"
|
183 | ],
|
184 | [
|
185 | "flatten",
|
186 | "npm:0.0.1"
|
187 | ],
|
188 | [
|
189 | "forwarded",
|
190 | "npm:0.1.2"
|
191 | ],
|
192 | [
|
193 | "fresh",
|
194 | "npm:0.5.2"
|
195 | ],
|
196 | [
|
197 | "get-caller-file",
|
198 | "npm:1.0.3"
|
199 | ],
|
200 | [
|
201 | "http-assert",
|
202 | "npm:1.4.0"
|
203 | ],
|
204 | [
|
205 | "http-errors",
|
206 | "npm:1.7.2"
|
207 | ],
|
208 | [
|
209 | "iconv-lite",
|
210 | "npm:0.4.24"
|
211 | ],
|
212 | [
|
213 | "inherits",
|
214 | "npm:2.0.3"
|
215 | ],
|
216 | [
|
217 | "ipaddr.js",
|
218 | "npm:1.9.0"
|
219 | ],
|
220 | [
|
221 | "is-stream",
|
222 | "npm:1.1.0"
|
223 | ],
|
224 | [
|
225 | "isomorphic-fetch",
|
226 | "npm:2.2.1"
|
227 | ],
|
228 | [
|
229 | "media-typer",
|
230 | "npm:0.3.0"
|
231 | ],
|
232 | [
|
233 | "merge-descriptors",
|
234 | "npm:1.0.1"
|
235 | ],
|
236 | [
|
237 | "merge2",
|
238 | "npm:1.3.0"
|
239 | ],
|
240 | [
|
241 | "methods",
|
242 | "npm:1.1.2"
|
243 | ],
|
244 | [
|
245 | "mime",
|
246 | "npm:1.6.0"
|
247 | ],
|
248 | [
|
249 | "mime-db",
|
250 | "npm:1.40.0"
|
251 | ],
|
252 | [
|
253 | "mime-types",
|
254 | "npm:2.1.24"
|
255 | ],
|
256 | [
|
257 | "mock-require",
|
258 | "npm:3.0.3"
|
259 | ],
|
260 | [
|
261 | "ms",
|
262 | "npm:2.1.1"
|
263 | ],
|
264 | [
|
265 | "negotiator",
|
266 | "npm:0.6.2"
|
267 | ],
|
268 | [
|
269 | "node-fetch",
|
270 | "npm:1.7.3"
|
271 | ],
|
272 | [
|
273 | "normalize-path",
|
274 | "npm:2.1.1"
|
275 | ],
|
276 | [
|
277 | "on-finished",
|
278 | "npm:2.3.0"
|
279 | ],
|
280 | [
|
281 | "once",
|
282 | "npm:1.3.3"
|
283 | ],
|
284 | [
|
285 | "orchestrator",
|
286 | "npm:0.3.8"
|
287 | ],
|
288 | [
|
289 | "parseurl",
|
290 | "npm:1.3.3"
|
291 | ],
|
292 | [
|
293 | "path-to-regexp",
|
294 | "npm:6.1.0"
|
295 | ],
|
296 | [
|
297 | "proxy-addr",
|
298 | "npm:2.0.5"
|
299 | ],
|
300 | [
|
301 | "qs",
|
302 | "npm:6.7.0"
|
303 | ],
|
304 | [
|
305 | "range-parser",
|
306 | "npm:1.2.1"
|
307 | ],
|
308 | [
|
309 | "raw-body",
|
310 | "npm:2.4.0"
|
311 | ],
|
312 | [
|
313 | "remove-trailing-separator",
|
314 | "npm:1.1.0"
|
315 | ],
|
316 | [
|
317 | "routington",
|
318 | "npm:1.0.3"
|
319 | ],
|
320 | [
|
321 | "safe-buffer",
|
322 | "npm:5.1.2"
|
323 | ],
|
324 | [
|
325 | "safer-buffer",
|
326 | "npm:2.1.2"
|
327 | ],
|
328 | [
|
329 | "send",
|
330 | "npm:0.17.1"
|
331 | ],
|
332 | [
|
333 | "sequencify",
|
334 | "npm:0.0.7"
|
335 | ],
|
336 | [
|
337 | "serve-static",
|
338 | "npm:1.14.1"
|
339 | ],
|
340 | [
|
341 | "setprototypeof",
|
342 | "npm:1.1.1"
|
343 | ],
|
344 | [
|
345 | "source-map",
|
346 | "npm:0.6.1"
|
347 | ],
|
348 | [
|
349 | "source-map-support",
|
350 | "npm:0.5.16"
|
351 | ],
|
352 | [
|
353 | "statuses",
|
354 | "npm:1.5.0"
|
355 | ],
|
356 | [
|
357 | "stream-consume",
|
358 | "npm:0.1.1"
|
359 | ],
|
360 | [
|
361 | "toidentifier",
|
362 | "npm:1.0.0"
|
363 | ],
|
364 | [
|
365 | "type-is",
|
366 | "npm:1.6.18"
|
367 | ],
|
368 | [
|
369 | "typescript",
|
370 | "patch:typescript@npm%3A3.7.5#builtin<compat/typescript>::version=3.7.5&hash=270b6c"
|
371 | ],
|
372 | [
|
373 | "unpipe",
|
374 | "npm:1.0.0"
|
375 | ],
|
376 | [
|
377 | "utils-merge",
|
378 | "npm:1.0.1"
|
379 | ],
|
380 | [
|
381 | "uuid",
|
382 | "npm:7.0.3"
|
383 | ],
|
384 | [
|
385 | "vary",
|
386 | "npm:1.1.2"
|
387 | ],
|
388 | [
|
389 | "whatwg-fetch",
|
390 | "npm:3.0.0"
|
391 | ],
|
392 | [
|
393 | "wrappy",
|
394 | "npm:1.0.2"
|
395 | ],
|
396 | [
|
397 | "ws",
|
398 | "virtual:55209bb636c41a4732c94226cfcabed9379b81a9d012b20f806b7dae20306a30ad400f7552377f216257061ff4396f27acf45d25beaf7e124e00aeb469e8918b#npm:7.2.1"
|
399 | ]
|
400 | ],
|
401 | "locationBlacklistData": [
|
402 | ],
|
403 | "packageRegistryData": [
|
404 | [null, [
|
405 | [null, {
|
406 | "packageLocation": "./",
|
407 | "packageDependencies": [
|
408 | ["@akala/json-rpc-ws", "npm:9.0.14"],
|
409 | ["@types/debug", "npm:4.1.5"],
|
410 | ["@types/express", "npm:4.17.2"],
|
411 | ["@types/mock-require", "npm:2.0.0"],
|
412 | ["@types/node", "npm:13.11.1"],
|
413 | ["@types/orchestrator", "npm:0.3.2"],
|
414 | ["@types/ws", "npm:7.2.1"],
|
415 | ["browser-process-hrtime", "npm:1.0.0"],
|
416 | ["debug", "virtual:bd697a751d58794530b682e5228b684a9f4a00d605f65e3707c8a27de2cc1b546f75892637f679b4286599f9fd60f3f12365f3d28f27a908f0b59bd6e06dae15#npm:4.1.1"],
|
417 | ["es6-promise", "npm:4.2.8"],
|
418 | ["express", "npm:4.17.1"],
|
419 | ["isomorphic-fetch", "npm:2.2.1"],
|
420 | ["merge2", "npm:1.3.0"],
|
421 | ["mock-require", "npm:3.0.3"],
|
422 | ["orchestrator", "npm:0.3.8"],
|
423 | ["parseurl", "npm:1.3.3"],
|
424 | ["path-to-regexp", "npm:6.1.0"],
|
425 | ["routington", "npm:1.0.3"],
|
426 | ["source-map-support", "npm:0.5.16"],
|
427 | ["typescript", "patch:typescript@npm%3A3.7.5#builtin<compat/typescript>::version=3.7.5&hash=270b6c"],
|
428 | ["utils-merge", "npm:1.0.1"],
|
429 | ["ws", "virtual:55209bb636c41a4732c94226cfcabed9379b81a9d012b20f806b7dae20306a30ad400f7552377f216257061ff4396f27acf45d25beaf7e124e00aeb469e8918b#npm:7.2.1"]
|
430 | ],
|
431 | "linkType": "SOFT",
|
432 | }]
|
433 | ]],
|
434 | ["@akala/core", [
|
435 | ["workspace:.", {
|
436 | "packageLocation": "./",
|
437 | "packageDependencies": [
|
438 | ["@akala/core", "workspace:."],
|
439 | ["@akala/json-rpc-ws", "npm:9.0.14"],
|
440 | ["@types/debug", "npm:4.1.5"],
|
441 | ["@types/express", "npm:4.17.2"],
|
442 | ["@types/mock-require", "npm:2.0.0"],
|
443 | ["@types/node", "npm:13.11.1"],
|
444 | ["@types/orchestrator", "npm:0.3.2"],
|
445 | ["@types/ws", "npm:7.2.1"],
|
446 | ["browser-process-hrtime", "npm:1.0.0"],
|
447 | ["debug", "virtual:bd697a751d58794530b682e5228b684a9f4a00d605f65e3707c8a27de2cc1b546f75892637f679b4286599f9fd60f3f12365f3d28f27a908f0b59bd6e06dae15#npm:4.1.1"],
|
448 | ["es6-promise", "npm:4.2.8"],
|
449 | ["express", "npm:4.17.1"],
|
450 | ["isomorphic-fetch", "npm:2.2.1"],
|
451 | ["merge2", "npm:1.3.0"],
|
452 | ["mock-require", "npm:3.0.3"],
|
453 | ["orchestrator", "npm:0.3.8"],
|
454 | ["parseurl", "npm:1.3.3"],
|
455 | ["path-to-regexp", "npm:6.1.0"],
|
456 | ["routington", "npm:1.0.3"],
|
457 | ["source-map-support", "npm:0.5.16"],
|
458 | ["typescript", "patch:typescript@npm%3A3.7.5#builtin<compat/typescript>::version=3.7.5&hash=270b6c"],
|
459 | ["utils-merge", "npm:1.0.1"],
|
460 | ["ws", "virtual:55209bb636c41a4732c94226cfcabed9379b81a9d012b20f806b7dae20306a30ad400f7552377f216257061ff4396f27acf45d25beaf7e124e00aeb469e8918b#npm:7.2.1"]
|
461 | ],
|
462 | "linkType": "SOFT",
|
463 | }]
|
464 | ]],
|
465 | ["@akala/json-rpc-ws", [
|
466 | ["npm:9.0.14", {
|
467 | "packageLocation": "./.yarn/cache/@akala-json-rpc-ws-npm-9.0.14-bd697a751d-2.zip/node_modules/@akala/json-rpc-ws/",
|
468 | "packageDependencies": [
|
469 | ["@akala/json-rpc-ws", "npm:9.0.14"],
|
470 | ["debug", "virtual:bd697a751d58794530b682e5228b684a9f4a00d605f65e3707c8a27de2cc1b546f75892637f679b4286599f9fd60f3f12365f3d28f27a908f0b59bd6e06dae15#npm:4.1.1"],
|
471 | ["uuid", "npm:7.0.3"],
|
472 | ["ws", "virtual:bd697a751d58794530b682e5228b684a9f4a00d605f65e3707c8a27de2cc1b546f75892637f679b4286599f9fd60f3f12365f3d28f27a908f0b59bd6e06dae15#npm:7.2.3"]
|
473 | ],
|
474 | "linkType": "HARD",
|
475 | }]
|
476 | ]],
|
477 | ["@types/body-parser", [
|
478 | ["npm:1.17.0", {
|
479 | "packageLocation": "./.yarn/cache/@types-body-parser-npm-1.17.0-ee6b43921e-2.zip/node_modules/@types/body-parser/",
|
480 | "packageDependencies": [
|
481 | ["@types/body-parser", "npm:1.17.0"],
|
482 | ["@types/connect", "npm:3.4.32"],
|
483 | ["@types/node", "npm:12.12.17"]
|
484 | ],
|
485 | "linkType": "HARD",
|
486 | }]
|
487 | ]],
|
488 | ["@types/connect", [
|
489 | ["npm:3.4.32", {
|
490 | "packageLocation": "./.yarn/cache/@types-connect-npm-3.4.32-411ec2cbbf-2.zip/node_modules/@types/connect/",
|
491 | "packageDependencies": [
|
492 | ["@types/connect", "npm:3.4.32"],
|
493 | ["@types/node", "npm:12.12.17"]
|
494 | ],
|
495 | "linkType": "HARD",
|
496 | }]
|
497 | ]],
|
498 | ["@types/debug", [
|
499 | ["npm:4.1.5", {
|
500 | "packageLocation": "./.yarn/cache/@types-debug-npm-4.1.5-3464d6c971-2.zip/node_modules/@types/debug/",
|
501 | "packageDependencies": [
|
502 | ["@types/debug", "npm:4.1.5"]
|
503 | ],
|
504 | "linkType": "HARD",
|
505 | }]
|
506 | ]],
|
507 | ["@types/events", [
|
508 | ["npm:1.2.0", {
|
509 | "packageLocation": "./.yarn/cache/@types-events-npm-1.2.0-2885f21f77-2.zip/node_modules/@types/events/",
|
510 | "packageDependencies": [
|
511 | ["@types/events", "npm:1.2.0"]
|
512 | ],
|
513 | "linkType": "HARD",
|
514 | }]
|
515 | ]],
|
516 | ["@types/express", [
|
517 | ["npm:4.17.2", {
|
518 | "packageLocation": "./.yarn/cache/@types-express-npm-4.17.2-01365c5cb9-2.zip/node_modules/@types/express/",
|
519 | "packageDependencies": [
|
520 | ["@types/express", "npm:4.17.2"],
|
521 | ["@types/body-parser", "npm:1.17.0"],
|
522 | ["@types/express-serve-static-core", "npm:4.16.0"],
|
523 | ["@types/serve-static", "npm:1.13.2"]
|
524 | ],
|
525 | "linkType": "HARD",
|
526 | }]
|
527 | ]],
|
528 | ["@types/express-serve-static-core", [
|
529 | ["npm:4.16.0", {
|
530 | "packageLocation": "./.yarn/cache/@types-express-serve-static-core-npm-4.16.0-29fc8031f1-2.zip/node_modules/@types/express-serve-static-core/",
|
531 | "packageDependencies": [
|
532 | ["@types/express-serve-static-core", "npm:4.16.0"],
|
533 | ["@types/events", "npm:1.2.0"],
|
534 | ["@types/node", "npm:12.12.17"],
|
535 | ["@types/range-parser", "npm:1.2.3"]
|
536 | ],
|
537 | "linkType": "HARD",
|
538 | }]
|
539 | ]],
|
540 | ["@types/mime", [
|
541 | ["npm:2.0.0", {
|
542 | "packageLocation": "./.yarn/cache/@types-mime-npm-2.0.0-2a02366cb8-2.zip/node_modules/@types/mime/",
|
543 | "packageDependencies": [
|
544 | ["@types/mime", "npm:2.0.0"]
|
545 | ],
|
546 | "linkType": "HARD",
|
547 | }]
|
548 | ]],
|
549 | ["@types/mock-require", [
|
550 | ["npm:2.0.0", {
|
551 | "packageLocation": "./.yarn/cache/@types-mock-require-npm-2.0.0-6a8db1683d-2.zip/node_modules/@types/mock-require/",
|
552 | "packageDependencies": [
|
553 | ["@types/mock-require", "npm:2.0.0"],
|
554 | ["@types/node", "npm:12.12.17"]
|
555 | ],
|
556 | "linkType": "HARD",
|
557 | }]
|
558 | ]],
|
559 | ["@types/node", [
|
560 | ["npm:12.12.17", {
|
561 | "packageLocation": "./.yarn/cache/@types-node-npm-12.12.17-28a9670a28-2.zip/node_modules/@types/node/",
|
562 | "packageDependencies": [
|
563 | ["@types/node", "npm:12.12.17"]
|
564 | ],
|
565 | "linkType": "HARD",
|
566 | }],
|
567 | ["npm:13.11.1", {
|
568 | "packageLocation": "./.yarn/cache/@types-node-npm-13.11.1-ea46d1204d-2.zip/node_modules/@types/node/",
|
569 | "packageDependencies": [
|
570 | ["@types/node", "npm:13.11.1"]
|
571 | ],
|
572 | "linkType": "HARD",
|
573 | }]
|
574 | ]],
|
575 | ["@types/orchestrator", [
|
576 | ["npm:0.3.2", {
|
577 | "packageLocation": "./.yarn/cache/@types-orchestrator-npm-0.3.2-0f4f0a3e9f-2.zip/node_modules/@types/orchestrator/",
|
578 | "packageDependencies": [
|
579 | ["@types/orchestrator", "npm:0.3.2"],
|
580 | ["@types/node", "npm:12.12.17"],
|
581 | ["@types/q", "npm:1.5.1"]
|
582 | ],
|
583 | "linkType": "HARD",
|
584 | }]
|
585 | ]],
|
586 | ["@types/q", [
|
587 | ["npm:1.5.1", {
|
588 | "packageLocation": "./.yarn/cache/@types-q-npm-1.5.1-29b49b9eca-2.zip/node_modules/@types/q/",
|
589 | "packageDependencies": [
|
590 | ["@types/q", "npm:1.5.1"]
|
591 | ],
|
592 | "linkType": "HARD",
|
593 | }]
|
594 | ]],
|
595 | ["@types/range-parser", [
|
596 | ["npm:1.2.3", {
|
597 | "packageLocation": "./.yarn/cache/@types-range-parser-npm-1.2.3-c06253b351-2.zip/node_modules/@types/range-parser/",
|
598 | "packageDependencies": [
|
599 | ["@types/range-parser", "npm:1.2.3"]
|
600 | ],
|
601 | "linkType": "HARD",
|
602 | }]
|
603 | ]],
|
604 | ["@types/serve-static", [
|
605 | ["npm:1.13.2", {
|
606 | "packageLocation": "./.yarn/cache/@types-serve-static-npm-1.13.2-2f417143a1-2.zip/node_modules/@types/serve-static/",
|
607 | "packageDependencies": [
|
608 | ["@types/serve-static", "npm:1.13.2"],
|
609 | ["@types/express-serve-static-core", "npm:4.16.0"],
|
610 | ["@types/mime", "npm:2.0.0"]
|
611 | ],
|
612 | "linkType": "HARD",
|
613 | }]
|
614 | ]],
|
615 | ["@types/ws", [
|
616 | ["npm:7.2.1", {
|
617 | "packageLocation": "./.yarn/cache/@types-ws-npm-7.2.1-e2c8b9e842-2.zip/node_modules/@types/ws/",
|
618 | "packageDependencies": [
|
619 | ["@types/ws", "npm:7.2.1"],
|
620 | ["@types/node", "npm:12.12.17"]
|
621 | ],
|
622 | "linkType": "HARD",
|
623 | }]
|
624 | ]],
|
625 | ["accepts", [
|
626 | ["npm:1.3.7", {
|
627 | "packageLocation": "./.yarn/cache/accepts-npm-1.3.7-0dc9de65aa-2.zip/node_modules/accepts/",
|
628 | "packageDependencies": [
|
629 | ["accepts", "npm:1.3.7"],
|
630 | ["mime-types", "npm:2.1.24"],
|
631 | ["negotiator", "npm:0.6.2"]
|
632 | ],
|
633 | "linkType": "HARD",
|
634 | }]
|
635 | ]],
|
636 | ["array-flatten", [
|
637 | ["npm:1.1.1", {
|
638 | "packageLocation": "./.yarn/cache/array-flatten-npm-1.1.1-9d94ad5f1d-2.zip/node_modules/array-flatten/",
|
639 | "packageDependencies": [
|
640 | ["array-flatten", "npm:1.1.1"]
|
641 | ],
|
642 | "linkType": "HARD",
|
643 | }]
|
644 | ]],
|
645 | ["body-parser", [
|
646 | ["npm:1.19.0", {
|
647 | "packageLocation": "./.yarn/cache/body-parser-npm-1.19.0-6e177cabfa-2.zip/node_modules/body-parser/",
|
648 | "packageDependencies": [
|
649 | ["body-parser", "npm:1.19.0"],
|
650 | ["bytes", "npm:3.1.0"],
|
651 | ["content-type", "npm:1.0.4"],
|
652 | ["debug", "virtual:6e177cabfad012f413f9c41366539c04d8701f0567119998690ab02224012faa99ec3a16b9f74f4d7920ab472c12b3e70f47f8f143239c06d0e2569e60ed9f62#npm:2.6.9"],
|
653 | ["depd", "npm:1.1.2"],
|
654 | ["http-errors", "npm:1.7.2"],
|
655 | ["iconv-lite", "npm:0.4.24"],
|
656 | ["on-finished", "npm:2.3.0"],
|
657 | ["qs", "npm:6.7.0"],
|
658 | ["raw-body", "npm:2.4.0"],
|
659 | ["type-is", "npm:1.6.18"]
|
660 | ],
|
661 | "linkType": "HARD",
|
662 | }]
|
663 | ]],
|
664 | ["browser-process-hrtime", [
|
665 | ["npm:1.0.0", {
|
666 | "packageLocation": "./.yarn/cache/browser-process-hrtime-npm-1.0.0-db700805c2-2.zip/node_modules/browser-process-hrtime/",
|
667 | "packageDependencies": [
|
668 | ["browser-process-hrtime", "npm:1.0.0"]
|
669 | ],
|
670 | "linkType": "HARD",
|
671 | }]
|
672 | ]],
|
673 | ["buffer-from", [
|
674 | ["npm:1.1.1", {
|
675 | "packageLocation": "./.yarn/cache/buffer-from-npm-1.1.1-22917b8ed8-2.zip/node_modules/buffer-from/",
|
676 | "packageDependencies": [
|
677 | ["buffer-from", "npm:1.1.1"]
|
678 | ],
|
679 | "linkType": "HARD",
|
680 | }]
|
681 | ]],
|
682 | ["bytes", [
|
683 | ["npm:3.1.0", {
|
684 | "packageLocation": "./.yarn/cache/bytes-npm-3.1.0-19c5b15405-2.zip/node_modules/bytes/",
|
685 | "packageDependencies": [
|
686 | ["bytes", "npm:3.1.0"]
|
687 | ],
|
688 | "linkType": "HARD",
|
689 | }]
|
690 | ]],
|
691 | ["content-disposition", [
|
692 | ["npm:0.5.3", {
|
693 | "packageLocation": "./.yarn/cache/content-disposition-npm-0.5.3-9a9a567e17-2.zip/node_modules/content-disposition/",
|
694 | "packageDependencies": [
|
695 | ["content-disposition", "npm:0.5.3"],
|
696 | ["safe-buffer", "npm:5.1.2"]
|
697 | ],
|
698 | "linkType": "HARD",
|
699 | }]
|
700 | ]],
|
701 | ["content-type", [
|
702 | ["npm:1.0.4", {
|
703 | "packageLocation": "./.yarn/cache/content-type-npm-1.0.4-3b1a5ca16b-2.zip/node_modules/content-type/",
|
704 | "packageDependencies": [
|
705 | ["content-type", "npm:1.0.4"]
|
706 | ],
|
707 | "linkType": "HARD",
|
708 | }]
|
709 | ]],
|
710 | ["cookie", [
|
711 | ["npm:0.4.0", {
|
712 | "packageLocation": "./.yarn/cache/cookie-npm-0.4.0-4b3d629e45-2.zip/node_modules/cookie/",
|
713 | "packageDependencies": [
|
714 | ["cookie", "npm:0.4.0"]
|
715 | ],
|
716 | "linkType": "HARD",
|
717 | }]
|
718 | ]],
|
719 | ["cookie-signature", [
|
720 | ["npm:1.0.6", {
|
721 | "packageLocation": "./.yarn/cache/cookie-signature-npm-1.0.6-93f325f7f0-2.zip/node_modules/cookie-signature/",
|
722 | "packageDependencies": [
|
723 | ["cookie-signature", "npm:1.0.6"]
|
724 | ],
|
725 | "linkType": "HARD",
|
726 | }]
|
727 | ]],
|
728 | ["debug", [
|
729 | ["virtual:6e177cabfad012f413f9c41366539c04d8701f0567119998690ab02224012faa99ec3a16b9f74f4d7920ab472c12b3e70f47f8f143239c06d0e2569e60ed9f62#npm:2.6.9", {
|
730 | "packageLocation": "./.yarn/$$virtual/debug-virtual-53242bdd6a/0/cache/debug-npm-2.6.9-7d4cb597dc-2.zip/node_modules/debug/",
|
731 | "packageDependencies": [
|
732 | ["debug", "virtual:6e177cabfad012f413f9c41366539c04d8701f0567119998690ab02224012faa99ec3a16b9f74f4d7920ab472c12b3e70f47f8f143239c06d0e2569e60ed9f62#npm:2.6.9"],
|
733 | ["ms", "npm:2.0.0"],
|
734 | ["supports-color", null]
|
735 | ],
|
736 | "packagePeers": [
|
737 | "supports-color"
|
738 | ],
|
739 | "linkType": "HARD",
|
740 | }],
|
741 | ["virtual:bd697a751d58794530b682e5228b684a9f4a00d605f65e3707c8a27de2cc1b546f75892637f679b4286599f9fd60f3f12365f3d28f27a908f0b59bd6e06dae15#npm:4.1.1", {
|
742 | "packageLocation": "./.yarn/$$virtual/debug-virtual-471f119552/0/cache/debug-npm-4.1.1-540248b3aa-2.zip/node_modules/debug/",
|
743 | "packageDependencies": [
|
744 | ["debug", "virtual:bd697a751d58794530b682e5228b684a9f4a00d605f65e3707c8a27de2cc1b546f75892637f679b4286599f9fd60f3f12365f3d28f27a908f0b59bd6e06dae15#npm:4.1.1"],
|
745 | ["ms", "npm:2.1.1"],
|
746 | ["supports-color", null]
|
747 | ],
|
748 | "packagePeers": [
|
749 | "supports-color"
|
750 | ],
|
751 | "linkType": "HARD",
|
752 | }]
|
753 | ]],
|
754 | ["deep-equal", [
|
755 | ["npm:1.0.1", {
|
756 | "packageLocation": "./.yarn/cache/deep-equal-npm-1.0.1-f05565c4e5-2.zip/node_modules/deep-equal/",
|
757 | "packageDependencies": [
|
758 | ["deep-equal", "npm:1.0.1"]
|
759 | ],
|
760 | "linkType": "HARD",
|
761 | }]
|
762 | ]],
|
763 | ["depd", [
|
764 | ["npm:1.1.2", {
|
765 | "packageLocation": "./.yarn/cache/depd-npm-1.1.2-b0c8414da7-2.zip/node_modules/depd/",
|
766 | "packageDependencies": [
|
767 | ["depd", "npm:1.1.2"]
|
768 | ],
|
769 | "linkType": "HARD",
|
770 | }]
|
771 | ]],
|
772 | ["destroy", [
|
773 | ["npm:1.0.4", {
|
774 | "packageLocation": "./.yarn/cache/destroy-npm-1.0.4-a2203e01cb-2.zip/node_modules/destroy/",
|
775 | "packageDependencies": [
|
776 | ["destroy", "npm:1.0.4"]
|
777 | ],
|
778 | "linkType": "HARD",
|
779 | }]
|
780 | ]],
|
781 | ["ee-first", [
|
782 | ["npm:1.1.1", {
|
783 | "packageLocation": "./.yarn/cache/ee-first-npm-1.1.1-33f8535b39-2.zip/node_modules/ee-first/",
|
784 | "packageDependencies": [
|
785 | ["ee-first", "npm:1.1.1"]
|
786 | ],
|
787 | "linkType": "HARD",
|
788 | }]
|
789 | ]],
|
790 | ["encodeurl", [
|
791 | ["npm:1.0.2", {
|
792 | "packageLocation": "./.yarn/cache/encodeurl-npm-1.0.2-f8c8454c41-2.zip/node_modules/encodeurl/",
|
793 | "packageDependencies": [
|
794 | ["encodeurl", "npm:1.0.2"]
|
795 | ],
|
796 | "linkType": "HARD",
|
797 | }]
|
798 | ]],
|
799 | ["encoding", [
|
800 | ["npm:0.1.12", {
|
801 | "packageLocation": "./.yarn/cache/encoding-npm-0.1.12-1a16b5c5e9-2.zip/node_modules/encoding/",
|
802 | "packageDependencies": [
|
803 | ["encoding", "npm:0.1.12"],
|
804 | ["iconv-lite", "npm:0.4.24"]
|
805 | ],
|
806 | "linkType": "HARD",
|
807 | }]
|
808 | ]],
|
809 | ["end-of-stream", [
|
810 | ["npm:0.1.5", {
|
811 | "packageLocation": "./.yarn/cache/end-of-stream-npm-0.1.5-78c6089410-2.zip/node_modules/end-of-stream/",
|
812 | "packageDependencies": [
|
813 | ["end-of-stream", "npm:0.1.5"],
|
814 | ["once", "npm:1.3.3"]
|
815 | ],
|
816 | "linkType": "HARD",
|
817 | }]
|
818 | ]],
|
819 | ["es6-promise", [
|
820 | ["npm:4.2.8", {
|
821 | "packageLocation": "./.yarn/cache/es6-promise-npm-4.2.8-c9f5b11f66-2.zip/node_modules/es6-promise/",
|
822 | "packageDependencies": [
|
823 | ["es6-promise", "npm:4.2.8"]
|
824 | ],
|
825 | "linkType": "HARD",
|
826 | }]
|
827 | ]],
|
828 | ["escape-html", [
|
829 | ["npm:1.0.3", {
|
830 | "packageLocation": "./.yarn/cache/escape-html-npm-1.0.3-376c22ee74-2.zip/node_modules/escape-html/",
|
831 | "packageDependencies": [
|
832 | ["escape-html", "npm:1.0.3"]
|
833 | ],
|
834 | "linkType": "HARD",
|
835 | }]
|
836 | ]],
|
837 | ["etag", [
|
838 | ["npm:1.8.1", {
|
839 | "packageLocation": "./.yarn/cache/etag-npm-1.8.1-54a3b989d9-2.zip/node_modules/etag/",
|
840 | "packageDependencies": [
|
841 | ["etag", "npm:1.8.1"]
|
842 | ],
|
843 | "linkType": "HARD",
|
844 | }]
|
845 | ]],
|
846 | ["express", [
|
847 | ["npm:4.17.1", {
|
848 | "packageLocation": "./.yarn/cache/express-npm-4.17.1-6815ee6bf9-2.zip/node_modules/express/",
|
849 | "packageDependencies": [
|
850 | ["express", "npm:4.17.1"],
|
851 | ["accepts", "npm:1.3.7"],
|
852 | ["array-flatten", "npm:1.1.1"],
|
853 | ["body-parser", "npm:1.19.0"],
|
854 | ["content-disposition", "npm:0.5.3"],
|
855 | ["content-type", "npm:1.0.4"],
|
856 | ["cookie", "npm:0.4.0"],
|
857 | ["cookie-signature", "npm:1.0.6"],
|
858 | ["debug", "virtual:6e177cabfad012f413f9c41366539c04d8701f0567119998690ab02224012faa99ec3a16b9f74f4d7920ab472c12b3e70f47f8f143239c06d0e2569e60ed9f62#npm:2.6.9"],
|
859 | ["depd", "npm:1.1.2"],
|
860 | ["encodeurl", "npm:1.0.2"],
|
861 | ["escape-html", "npm:1.0.3"],
|
862 | ["etag", "npm:1.8.1"],
|
863 | ["finalhandler", "npm:1.1.2"],
|
864 | ["fresh", "npm:0.5.2"],
|
865 | ["merge-descriptors", "npm:1.0.1"],
|
866 | ["methods", "npm:1.1.2"],
|
867 | ["on-finished", "npm:2.3.0"],
|
868 | ["parseurl", "npm:1.3.3"],
|
869 | ["path-to-regexp", "npm:0.1.7"],
|
870 | ["proxy-addr", "npm:2.0.5"],
|
871 | ["qs", "npm:6.7.0"],
|
872 | ["range-parser", "npm:1.2.1"],
|
873 | ["safe-buffer", "npm:5.1.2"],
|
874 | ["send", "npm:0.17.1"],
|
875 | ["serve-static", "npm:1.14.1"],
|
876 | ["setprototypeof", "npm:1.1.1"],
|
877 | ["statuses", "npm:1.5.0"],
|
878 | ["type-is", "npm:1.6.18"],
|
879 | ["utils-merge", "npm:1.0.1"],
|
880 | ["vary", "npm:1.1.2"]
|
881 | ],
|
882 | "linkType": "HARD",
|
883 | }]
|
884 | ]],
|
885 | ["finalhandler", [
|
886 | ["npm:1.1.2", {
|
887 | "packageLocation": "./.yarn/cache/finalhandler-npm-1.1.2-55a75d6b53-2.zip/node_modules/finalhandler/",
|
888 | "packageDependencies": [
|
889 | ["finalhandler", "npm:1.1.2"],
|
890 | ["debug", "virtual:6e177cabfad012f413f9c41366539c04d8701f0567119998690ab02224012faa99ec3a16b9f74f4d7920ab472c12b3e70f47f8f143239c06d0e2569e60ed9f62#npm:2.6.9"],
|
891 | ["encodeurl", "npm:1.0.2"],
|
892 | ["escape-html", "npm:1.0.3"],
|
893 | ["on-finished", "npm:2.3.0"],
|
894 | ["parseurl", "npm:1.3.3"],
|
895 | ["statuses", "npm:1.5.0"],
|
896 | ["unpipe", "npm:1.0.0"]
|
897 | ],
|
898 | "linkType": "HARD",
|
899 | }]
|
900 | ]],
|
901 | ["flatten", [
|
902 | ["npm:0.0.1", {
|
903 | "packageLocation": "./.yarn/cache/flatten-npm-0.0.1-abcfbff952-2.zip/node_modules/flatten/",
|
904 | "packageDependencies": [
|
905 | ["flatten", "npm:0.0.1"]
|
906 | ],
|
907 | "linkType": "HARD",
|
908 | }]
|
909 | ]],
|
910 | ["forwarded", [
|
911 | ["npm:0.1.2", {
|
912 | "packageLocation": "./.yarn/cache/forwarded-npm-0.1.2-6143c1ba42-2.zip/node_modules/forwarded/",
|
913 | "packageDependencies": [
|
914 | ["forwarded", "npm:0.1.2"]
|
915 | ],
|
916 | "linkType": "HARD",
|
917 | }]
|
918 | ]],
|
919 | ["fresh", [
|
920 | ["npm:0.5.2", {
|
921 | "packageLocation": "./.yarn/cache/fresh-npm-0.5.2-ad2bb4c0a2-2.zip/node_modules/fresh/",
|
922 | "packageDependencies": [
|
923 | ["fresh", "npm:0.5.2"]
|
924 | ],
|
925 | "linkType": "HARD",
|
926 | }]
|
927 | ]],
|
928 | ["get-caller-file", [
|
929 | ["npm:1.0.3", {
|
930 | "packageLocation": "./.yarn/cache/get-caller-file-npm-1.0.3-df430e7075-2.zip/node_modules/get-caller-file/",
|
931 | "packageDependencies": [
|
932 | ["get-caller-file", "npm:1.0.3"]
|
933 | ],
|
934 | "linkType": "HARD",
|
935 | }]
|
936 | ]],
|
937 | ["http-assert", [
|
938 | ["npm:1.4.0", {
|
939 | "packageLocation": "./.yarn/cache/http-assert-npm-1.4.0-bc4b1d1458-2.zip/node_modules/http-assert/",
|
940 | "packageDependencies": [
|
941 | ["http-assert", "npm:1.4.0"],
|
942 | ["deep-equal", "npm:1.0.1"],
|
943 | ["http-errors", "npm:1.7.1"]
|
944 | ],
|
945 | "linkType": "HARD",
|
946 | }]
|
947 | ]],
|
948 | ["http-errors", [
|
949 | ["npm:1.7.1", {
|
950 | "packageLocation": "./.yarn/cache/http-errors-npm-1.7.1-e0c60942be-2.zip/node_modules/http-errors/",
|
951 | "packageDependencies": [
|
952 | ["http-errors", "npm:1.7.1"],
|
953 | ["depd", "npm:1.1.2"],
|
954 | ["inherits", "npm:2.0.3"],
|
955 | ["setprototypeof", "npm:1.1.0"],
|
956 | ["statuses", "npm:1.5.0"],
|
957 | ["toidentifier", "npm:1.0.0"]
|
958 | ],
|
959 | "linkType": "HARD",
|
960 | }],
|
961 | ["npm:1.7.2", {
|
962 | "packageLocation": "./.yarn/cache/http-errors-npm-1.7.2-67163ae1df-2.zip/node_modules/http-errors/",
|
963 | "packageDependencies": [
|
964 | ["http-errors", "npm:1.7.2"],
|
965 | ["depd", "npm:1.1.2"],
|
966 | ["inherits", "npm:2.0.3"],
|
967 | ["setprototypeof", "npm:1.1.1"],
|
968 | ["statuses", "npm:1.5.0"],
|
969 | ["toidentifier", "npm:1.0.0"]
|
970 | ],
|
971 | "linkType": "HARD",
|
972 | }],
|
973 | ["npm:1.7.3", {
|
974 | "packageLocation": "./.yarn/cache/http-errors-npm-1.7.3-f6dc83b082-2.zip/node_modules/http-errors/",
|
975 | "packageDependencies": [
|
976 | ["http-errors", "npm:1.7.3"],
|
977 | ["depd", "npm:1.1.2"],
|
978 | ["inherits", "npm:2.0.4"],
|
979 | ["setprototypeof", "npm:1.1.1"],
|
980 | ["statuses", "npm:1.5.0"],
|
981 | ["toidentifier", "npm:1.0.0"]
|
982 | ],
|
983 | "linkType": "HARD",
|
984 | }]
|
985 | ]],
|
986 | ["iconv-lite", [
|
987 | ["npm:0.4.24", {
|
988 | "packageLocation": "./.yarn/cache/iconv-lite-npm-0.4.24-c5c4ac6695-2.zip/node_modules/iconv-lite/",
|
989 | "packageDependencies": [
|
990 | ["iconv-lite", "npm:0.4.24"],
|
991 | ["safer-buffer", "npm:2.1.2"]
|
992 | ],
|
993 | "linkType": "HARD",
|
994 | }]
|
995 | ]],
|
996 | ["inherits", [
|
997 | ["npm:2.0.3", {
|
998 | "packageLocation": "./.yarn/cache/inherits-npm-2.0.3-401e64b080-2.zip/node_modules/inherits/",
|
999 | "packageDependencies": [
|
1000 | ["inherits", "npm:2.0.3"]
|
1001 | ],
|
1002 | "linkType": "HARD",
|
1003 | }],
|
1004 | ["npm:2.0.4", {
|
1005 | "packageLocation": "./.yarn/cache/inherits-npm-2.0.4-c66b3957a0-2.zip/node_modules/inherits/",
|
1006 | "packageDependencies": [
|
1007 | ["inherits", "npm:2.0.4"]
|
1008 | ],
|
1009 | "linkType": "HARD",
|
1010 | }]
|
1011 | ]],
|
1012 | ["ipaddr.js", [
|
1013 | ["npm:1.9.0", {
|
1014 | "packageLocation": "./.yarn/cache/ipaddr.js-npm-1.9.0-6f46daf988-2.zip/node_modules/ipaddr.js/",
|
1015 | "packageDependencies": [
|
1016 | ["ipaddr.js", "npm:1.9.0"]
|
1017 | ],
|
1018 | "linkType": "HARD",
|
1019 | }]
|
1020 | ]],
|
1021 | ["is-stream", [
|
1022 | ["npm:1.1.0", {
|
1023 | "packageLocation": "./.yarn/cache/is-stream-npm-1.1.0-818ecbf6bb-2.zip/node_modules/is-stream/",
|
1024 | "packageDependencies": [
|
1025 | ["is-stream", "npm:1.1.0"]
|
1026 | ],
|
1027 | "linkType": "HARD",
|
1028 | }]
|
1029 | ]],
|
1030 | ["isomorphic-fetch", [
|
1031 | ["npm:2.2.1", {
|
1032 | "packageLocation": "./.yarn/cache/isomorphic-fetch-npm-2.2.1-46b4db5d7b-2.zip/node_modules/isomorphic-fetch/",
|
1033 | "packageDependencies": [
|
1034 | ["isomorphic-fetch", "npm:2.2.1"],
|
1035 | ["node-fetch", "npm:1.7.3"],
|
1036 | ["whatwg-fetch", "npm:3.0.0"]
|
1037 | ],
|
1038 | "linkType": "HARD",
|
1039 | }]
|
1040 | ]],
|
1041 | ["media-typer", [
|
1042 | ["npm:0.3.0", {
|
1043 | "packageLocation": "./.yarn/cache/media-typer-npm-0.3.0-8674f8f0f5-2.zip/node_modules/media-typer/",
|
1044 | "packageDependencies": [
|
1045 | ["media-typer", "npm:0.3.0"]
|
1046 | ],
|
1047 | "linkType": "HARD",
|
1048 | }]
|
1049 | ]],
|
1050 | ["merge-descriptors", [
|
1051 | ["npm:1.0.1", {
|
1052 | "packageLocation": "./.yarn/cache/merge-descriptors-npm-1.0.1-615287aaa8-2.zip/node_modules/merge-descriptors/",
|
1053 | "packageDependencies": [
|
1054 | ["merge-descriptors", "npm:1.0.1"]
|
1055 | ],
|
1056 | "linkType": "HARD",
|
1057 | }]
|
1058 | ]],
|
1059 | ["merge2", [
|
1060 | ["npm:1.3.0", {
|
1061 | "packageLocation": "./.yarn/cache/merge2-npm-1.3.0-a272445bb5-2.zip/node_modules/merge2/",
|
1062 | "packageDependencies": [
|
1063 | ["merge2", "npm:1.3.0"]
|
1064 | ],
|
1065 | "linkType": "HARD",
|
1066 | }]
|
1067 | ]],
|
1068 | ["methods", [
|
1069 | ["npm:1.1.2", {
|
1070 | "packageLocation": "./.yarn/cache/methods-npm-1.1.2-92f6fdb39b-2.zip/node_modules/methods/",
|
1071 | "packageDependencies": [
|
1072 | ["methods", "npm:1.1.2"]
|
1073 | ],
|
1074 | "linkType": "HARD",
|
1075 | }]
|
1076 | ]],
|
1077 | ["mime", [
|
1078 | ["npm:1.6.0", {
|
1079 | "packageLocation": "./.yarn/cache/mime-npm-1.6.0-60ae95038a-2.zip/node_modules/mime/",
|
1080 | "packageDependencies": [
|
1081 | ["mime", "npm:1.6.0"]
|
1082 | ],
|
1083 | "linkType": "HARD",
|
1084 | }]
|
1085 | ]],
|
1086 | ["mime-db", [
|
1087 | ["npm:1.40.0", {
|
1088 | "packageLocation": "./.yarn/cache/mime-db-npm-1.40.0-a136b9af4b-2.zip/node_modules/mime-db/",
|
1089 | "packageDependencies": [
|
1090 | ["mime-db", "npm:1.40.0"]
|
1091 | ],
|
1092 | "linkType": "HARD",
|
1093 | }]
|
1094 | ]],
|
1095 | ["mime-types", [
|
1096 | ["npm:2.1.24", {
|
1097 | "packageLocation": "./.yarn/cache/mime-types-npm-2.1.24-b1aaaae895-2.zip/node_modules/mime-types/",
|
1098 | "packageDependencies": [
|
1099 | ["mime-types", "npm:2.1.24"],
|
1100 | ["mime-db", "npm:1.40.0"]
|
1101 | ],
|
1102 | "linkType": "HARD",
|
1103 | }]
|
1104 | ]],
|
1105 | ["mock-require", [
|
1106 | ["npm:3.0.3", {
|
1107 | "packageLocation": "./.yarn/cache/mock-require-npm-3.0.3-8b30178653-2.zip/node_modules/mock-require/",
|
1108 | "packageDependencies": [
|
1109 | ["mock-require", "npm:3.0.3"],
|
1110 | ["get-caller-file", "npm:1.0.3"],
|
1111 | ["normalize-path", "npm:2.1.1"]
|
1112 | ],
|
1113 | "linkType": "HARD",
|
1114 | }]
|
1115 | ]],
|
1116 | ["ms", [
|
1117 | ["npm:2.0.0", {
|
1118 | "packageLocation": "./.yarn/cache/ms-npm-2.0.0-9e1101a471-2.zip/node_modules/ms/",
|
1119 | "packageDependencies": [
|
1120 | ["ms", "npm:2.0.0"]
|
1121 | ],
|
1122 | "linkType": "HARD",
|
1123 | }],
|
1124 | ["npm:2.1.1", {
|
1125 | "packageLocation": "./.yarn/cache/ms-npm-2.1.1-5b4fd72c86-2.zip/node_modules/ms/",
|
1126 | "packageDependencies": [
|
1127 | ["ms", "npm:2.1.1"]
|
1128 | ],
|
1129 | "linkType": "HARD",
|
1130 | }]
|
1131 | ]],
|
1132 | ["negotiator", [
|
1133 | ["npm:0.6.2", {
|
1134 | "packageLocation": "./.yarn/cache/negotiator-npm-0.6.2-ba538e167a-2.zip/node_modules/negotiator/",
|
1135 | "packageDependencies": [
|
1136 | ["negotiator", "npm:0.6.2"]
|
1137 | ],
|
1138 | "linkType": "HARD",
|
1139 | }]
|
1140 | ]],
|
1141 | ["node-fetch", [
|
1142 | ["npm:1.7.3", {
|
1143 | "packageLocation": "./.yarn/cache/node-fetch-npm-1.7.3-eb8372f991-2.zip/node_modules/node-fetch/",
|
1144 | "packageDependencies": [
|
1145 | ["node-fetch", "npm:1.7.3"],
|
1146 | ["encoding", "npm:0.1.12"],
|
1147 | ["is-stream", "npm:1.1.0"]
|
1148 | ],
|
1149 | "linkType": "HARD",
|
1150 | }]
|
1151 | ]],
|
1152 | ["normalize-path", [
|
1153 | ["npm:2.1.1", {
|
1154 | "packageLocation": "./.yarn/cache/normalize-path-npm-2.1.1-65c4766716-2.zip/node_modules/normalize-path/",
|
1155 | "packageDependencies": [
|
1156 | ["normalize-path", "npm:2.1.1"],
|
1157 | ["remove-trailing-separator", "npm:1.1.0"]
|
1158 | ],
|
1159 | "linkType": "HARD",
|
1160 | }]
|
1161 | ]],
|
1162 | ["on-finished", [
|
1163 | ["npm:2.3.0", {
|
1164 | "packageLocation": "./.yarn/cache/on-finished-npm-2.3.0-4ce92f72c6-2.zip/node_modules/on-finished/",
|
1165 | "packageDependencies": [
|
1166 | ["on-finished", "npm:2.3.0"],
|
1167 | ["ee-first", "npm:1.1.1"]
|
1168 | ],
|
1169 | "linkType": "HARD",
|
1170 | }]
|
1171 | ]],
|
1172 | ["once", [
|
1173 | ["npm:1.3.3", {
|
1174 | "packageLocation": "./.yarn/cache/once-npm-1.3.3-595f0882a4-2.zip/node_modules/once/",
|
1175 | "packageDependencies": [
|
1176 | ["once", "npm:1.3.3"],
|
1177 | ["wrappy", "npm:1.0.2"]
|
1178 | ],
|
1179 | "linkType": "HARD",
|
1180 | }]
|
1181 | ]],
|
1182 | ["orchestrator", [
|
1183 | ["npm:0.3.8", {
|
1184 | "packageLocation": "./.yarn/cache/orchestrator-npm-0.3.8-1c272f9c07-2.zip/node_modules/orchestrator/",
|
1185 | "packageDependencies": [
|
1186 | ["orchestrator", "npm:0.3.8"],
|
1187 | ["end-of-stream", "npm:0.1.5"],
|
1188 | ["sequencify", "npm:0.0.7"],
|
1189 | ["stream-consume", "npm:0.1.1"]
|
1190 | ],
|
1191 | "linkType": "HARD",
|
1192 | }]
|
1193 | ]],
|
1194 | ["parseurl", [
|
1195 | ["npm:1.3.3", {
|
1196 | "packageLocation": "./.yarn/cache/parseurl-npm-1.3.3-1542397e00-2.zip/node_modules/parseurl/",
|
1197 | "packageDependencies": [
|
1198 | ["parseurl", "npm:1.3.3"]
|
1199 | ],
|
1200 | "linkType": "HARD",
|
1201 | }]
|
1202 | ]],
|
1203 | ["path-to-regexp", [
|
1204 | ["npm:0.1.7", {
|
1205 | "packageLocation": "./.yarn/cache/path-to-regexp-npm-0.1.7-2605347373-2.zip/node_modules/path-to-regexp/",
|
1206 | "packageDependencies": [
|
1207 | ["path-to-regexp", "npm:0.1.7"]
|
1208 | ],
|
1209 | "linkType": "HARD",
|
1210 | }],
|
1211 | ["npm:6.1.0", {
|
1212 | "packageLocation": "./.yarn/cache/path-to-regexp-npm-6.1.0-34e3bd652e-2.zip/node_modules/path-to-regexp/",
|
1213 | "packageDependencies": [
|
1214 | ["path-to-regexp", "npm:6.1.0"]
|
1215 | ],
|
1216 | "linkType": "HARD",
|
1217 | }]
|
1218 | ]],
|
1219 | ["proxy-addr", [
|
1220 | ["npm:2.0.5", {
|
1221 | "packageLocation": "./.yarn/cache/proxy-addr-npm-2.0.5-194dbca683-2.zip/node_modules/proxy-addr/",
|
1222 | "packageDependencies": [
|
1223 | ["proxy-addr", "npm:2.0.5"],
|
1224 | ["forwarded", "npm:0.1.2"],
|
1225 | ["ipaddr.js", "npm:1.9.0"]
|
1226 | ],
|
1227 | "linkType": "HARD",
|
1228 | }]
|
1229 | ]],
|
1230 | ["qs", [
|
1231 | ["npm:6.7.0", {
|
1232 | "packageLocation": "./.yarn/cache/qs-npm-6.7.0-15161a344c-2.zip/node_modules/qs/",
|
1233 | "packageDependencies": [
|
1234 | ["qs", "npm:6.7.0"]
|
1235 | ],
|
1236 | "linkType": "HARD",
|
1237 | }]
|
1238 | ]],
|
1239 | ["range-parser", [
|
1240 | ["npm:1.2.1", {
|
1241 | "packageLocation": "./.yarn/cache/range-parser-npm-1.2.1-1a470fa390-2.zip/node_modules/range-parser/",
|
1242 | "packageDependencies": [
|
1243 | ["range-parser", "npm:1.2.1"]
|
1244 | ],
|
1245 | "linkType": "HARD",
|
1246 | }]
|
1247 | ]],
|
1248 | ["raw-body", [
|
1249 | ["npm:2.4.0", {
|
1250 | "packageLocation": "./.yarn/cache/raw-body-npm-2.4.0-14d9d633af-2.zip/node_modules/raw-body/",
|
1251 | "packageDependencies": [
|
1252 | ["raw-body", "npm:2.4.0"],
|
1253 | ["bytes", "npm:3.1.0"],
|
1254 | ["http-errors", "npm:1.7.2"],
|
1255 | ["iconv-lite", "npm:0.4.24"],
|
1256 | ["unpipe", "npm:1.0.0"]
|
1257 | ],
|
1258 | "linkType": "HARD",
|
1259 | }]
|
1260 | ]],
|
1261 | ["remove-trailing-separator", [
|
1262 | ["npm:1.1.0", {
|
1263 | "packageLocation": "./.yarn/cache/remove-trailing-separator-npm-1.1.0-16d7231316-2.zip/node_modules/remove-trailing-separator/",
|
1264 | "packageDependencies": [
|
1265 | ["remove-trailing-separator", "npm:1.1.0"]
|
1266 | ],
|
1267 | "linkType": "HARD",
|
1268 | }]
|
1269 | ]],
|
1270 | ["routington", [
|
1271 | ["npm:1.0.3", {
|
1272 | "packageLocation": "./.yarn/cache/routington-npm-1.0.3-0f4b20d32e-2.zip/node_modules/routington/",
|
1273 | "packageDependencies": [
|
1274 | ["routington", "npm:1.0.3"],
|
1275 | ["flatten", "npm:0.0.1"],
|
1276 | ["http-assert", "npm:1.4.0"]
|
1277 | ],
|
1278 | "linkType": "HARD",
|
1279 | }]
|
1280 | ]],
|
1281 | ["safe-buffer", [
|
1282 | ["npm:5.1.2", {
|
1283 | "packageLocation": "./.yarn/cache/safe-buffer-npm-5.1.2-c27fedf6c4-2.zip/node_modules/safe-buffer/",
|
1284 | "packageDependencies": [
|
1285 | ["safe-buffer", "npm:5.1.2"]
|
1286 | ],
|
1287 | "linkType": "HARD",
|
1288 | }]
|
1289 | ]],
|
1290 | ["safer-buffer", [
|
1291 | ["npm:2.1.2", {
|
1292 | "packageLocation": "./.yarn/cache/safer-buffer-npm-2.1.2-8d5c0b705e-2.zip/node_modules/safer-buffer/",
|
1293 | "packageDependencies": [
|
1294 | ["safer-buffer", "npm:2.1.2"]
|
1295 | ],
|
1296 | "linkType": "HARD",
|
1297 | }]
|
1298 | ]],
|
1299 | ["send", [
|
1300 | ["npm:0.17.1", {
|
1301 | "packageLocation": "./.yarn/cache/send-npm-0.17.1-aad5512679-2.zip/node_modules/send/",
|
1302 | "packageDependencies": [
|
1303 | ["send", "npm:0.17.1"],
|
1304 | ["debug", "virtual:6e177cabfad012f413f9c41366539c04d8701f0567119998690ab02224012faa99ec3a16b9f74f4d7920ab472c12b3e70f47f8f143239c06d0e2569e60ed9f62#npm:2.6.9"],
|
1305 | ["depd", "npm:1.1.2"],
|
1306 | ["destroy", "npm:1.0.4"],
|
1307 | ["encodeurl", "npm:1.0.2"],
|
1308 | ["escape-html", "npm:1.0.3"],
|
1309 | ["etag", "npm:1.8.1"],
|
1310 | ["fresh", "npm:0.5.2"],
|
1311 | ["http-errors", "npm:1.7.3"],
|
1312 | ["mime", "npm:1.6.0"],
|
1313 | ["ms", "npm:2.1.1"],
|
1314 | ["on-finished", "npm:2.3.0"],
|
1315 | ["range-parser", "npm:1.2.1"],
|
1316 | ["statuses", "npm:1.5.0"]
|
1317 | ],
|
1318 | "linkType": "HARD",
|
1319 | }]
|
1320 | ]],
|
1321 | ["sequencify", [
|
1322 | ["npm:0.0.7", {
|
1323 | "packageLocation": "./.yarn/cache/sequencify-npm-0.0.7-990da9f496-2.zip/node_modules/sequencify/",
|
1324 | "packageDependencies": [
|
1325 | ["sequencify", "npm:0.0.7"]
|
1326 | ],
|
1327 | "linkType": "HARD",
|
1328 | }]
|
1329 | ]],
|
1330 | ["serve-static", [
|
1331 | ["npm:1.14.1", {
|
1332 | "packageLocation": "./.yarn/cache/serve-static-npm-1.14.1-a7afb1d3b3-2.zip/node_modules/serve-static/",
|
1333 | "packageDependencies": [
|
1334 | ["serve-static", "npm:1.14.1"],
|
1335 | ["encodeurl", "npm:1.0.2"],
|
1336 | ["escape-html", "npm:1.0.3"],
|
1337 | ["parseurl", "npm:1.3.3"],
|
1338 | ["send", "npm:0.17.1"]
|
1339 | ],
|
1340 | "linkType": "HARD",
|
1341 | }]
|
1342 | ]],
|
1343 | ["setprototypeof", [
|
1344 | ["npm:1.1.0", {
|
1345 | "packageLocation": "./.yarn/cache/setprototypeof-npm-1.1.0-7d8becb375-2.zip/node_modules/setprototypeof/",
|
1346 | "packageDependencies": [
|
1347 | ["setprototypeof", "npm:1.1.0"]
|
1348 | ],
|
1349 | "linkType": "HARD",
|
1350 | }],
|
1351 | ["npm:1.1.1", {
|
1352 | "packageLocation": "./.yarn/cache/setprototypeof-npm-1.1.1-706b6318ec-2.zip/node_modules/setprototypeof/",
|
1353 | "packageDependencies": [
|
1354 | ["setprototypeof", "npm:1.1.1"]
|
1355 | ],
|
1356 | "linkType": "HARD",
|
1357 | }]
|
1358 | ]],
|
1359 | ["source-map", [
|
1360 | ["npm:0.6.1", {
|
1361 | "packageLocation": "./.yarn/cache/source-map-npm-0.6.1-1a3621db16-2.zip/node_modules/source-map/",
|
1362 | "packageDependencies": [
|
1363 | ["source-map", "npm:0.6.1"]
|
1364 | ],
|
1365 | "linkType": "HARD",
|
1366 | }]
|
1367 | ]],
|
1368 | ["source-map-support", [
|
1369 | ["npm:0.5.16", {
|
1370 | "packageLocation": "./.yarn/cache/source-map-support-npm-0.5.16-cbb8823949-2.zip/node_modules/source-map-support/",
|
1371 | "packageDependencies": [
|
1372 | ["source-map-support", "npm:0.5.16"],
|
1373 | ["buffer-from", "npm:1.1.1"],
|
1374 | ["source-map", "npm:0.6.1"]
|
1375 | ],
|
1376 | "linkType": "HARD",
|
1377 | }]
|
1378 | ]],
|
1379 | ["statuses", [
|
1380 | ["npm:1.5.0", {
|
1381 | "packageLocation": "./.yarn/cache/statuses-npm-1.5.0-f88f91b2e9-2.zip/node_modules/statuses/",
|
1382 | "packageDependencies": [
|
1383 | ["statuses", "npm:1.5.0"]
|
1384 | ],
|
1385 | "linkType": "HARD",
|
1386 | }]
|
1387 | ]],
|
1388 | ["stream-consume", [
|
1389 | ["npm:0.1.1", {
|
1390 | "packageLocation": "./.yarn/cache/stream-consume-npm-0.1.1-873aebf129-2.zip/node_modules/stream-consume/",
|
1391 | "packageDependencies": [
|
1392 | ["stream-consume", "npm:0.1.1"]
|
1393 | ],
|
1394 | "linkType": "HARD",
|
1395 | }]
|
1396 | ]],
|
1397 | ["toidentifier", [
|
1398 | ["npm:1.0.0", {
|
1399 | "packageLocation": "./.yarn/cache/toidentifier-npm-1.0.0-5dad252f90-2.zip/node_modules/toidentifier/",
|
1400 | "packageDependencies": [
|
1401 | ["toidentifier", "npm:1.0.0"]
|
1402 | ],
|
1403 | "linkType": "HARD",
|
1404 | }]
|
1405 | ]],
|
1406 | ["type-is", [
|
1407 | ["npm:1.6.18", {
|
1408 | "packageLocation": "./.yarn/cache/type-is-npm-1.6.18-6dee4d4961-2.zip/node_modules/type-is/",
|
1409 | "packageDependencies": [
|
1410 | ["type-is", "npm:1.6.18"],
|
1411 | ["media-typer", "npm:0.3.0"],
|
1412 | ["mime-types", "npm:2.1.24"]
|
1413 | ],
|
1414 | "linkType": "HARD",
|
1415 | }]
|
1416 | ]],
|
1417 | ["typescript", [
|
1418 | ["patch:typescript@npm%3A3.7.5#builtin<compat/typescript>::version=3.7.5&hash=270b6c", {
|
1419 | "packageLocation": "./.yarn/cache/typescript-patch-59b570bfcd-2.zip/node_modules/typescript/",
|
1420 | "packageDependencies": [
|
1421 | ["typescript", "patch:typescript@npm%3A3.7.5#builtin<compat/typescript>::version=3.7.5&hash=270b6c"]
|
1422 | ],
|
1423 | "linkType": "HARD",
|
1424 | }]
|
1425 | ]],
|
1426 | ["unpipe", [
|
1427 | ["npm:1.0.0", {
|
1428 | "packageLocation": "./.yarn/cache/unpipe-npm-1.0.0-2ed2a3c2bf-2.zip/node_modules/unpipe/",
|
1429 | "packageDependencies": [
|
1430 | ["unpipe", "npm:1.0.0"]
|
1431 | ],
|
1432 | "linkType": "HARD",
|
1433 | }]
|
1434 | ]],
|
1435 | ["utils-merge", [
|
1436 | ["npm:1.0.1", {
|
1437 | "packageLocation": "./.yarn/cache/utils-merge-npm-1.0.1-363bbdfbca-2.zip/node_modules/utils-merge/",
|
1438 | "packageDependencies": [
|
1439 | ["utils-merge", "npm:1.0.1"]
|
1440 | ],
|
1441 | "linkType": "HARD",
|
1442 | }]
|
1443 | ]],
|
1444 | ["uuid", [
|
1445 | ["npm:7.0.3", {
|
1446 | "packageLocation": "./.yarn/cache/uuid-npm-7.0.3-2b088bd924-2.zip/node_modules/uuid/",
|
1447 | "packageDependencies": [
|
1448 | ["uuid", "npm:7.0.3"]
|
1449 | ],
|
1450 | "linkType": "HARD",
|
1451 | }]
|
1452 | ]],
|
1453 | ["vary", [
|
1454 | ["npm:1.1.2", {
|
1455 | "packageLocation": "./.yarn/cache/vary-npm-1.1.2-b49f70ae63-2.zip/node_modules/vary/",
|
1456 | "packageDependencies": [
|
1457 | ["vary", "npm:1.1.2"]
|
1458 | ],
|
1459 | "linkType": "HARD",
|
1460 | }]
|
1461 | ]],
|
1462 | ["whatwg-fetch", [
|
1463 | ["npm:3.0.0", {
|
1464 | "packageLocation": "./.yarn/cache/whatwg-fetch-npm-3.0.0-89ab4ec112-2.zip/node_modules/whatwg-fetch/",
|
1465 | "packageDependencies": [
|
1466 | ["whatwg-fetch", "npm:3.0.0"]
|
1467 | ],
|
1468 | "linkType": "HARD",
|
1469 | }]
|
1470 | ]],
|
1471 | ["wrappy", [
|
1472 | ["npm:1.0.2", {
|
1473 | "packageLocation": "./.yarn/cache/wrappy-npm-1.0.2-916de4d4b3-2.zip/node_modules/wrappy/",
|
1474 | "packageDependencies": [
|
1475 | ["wrappy", "npm:1.0.2"]
|
1476 | ],
|
1477 | "linkType": "HARD",
|
1478 | }]
|
1479 | ]],
|
1480 | ["ws", [
|
1481 | ["virtual:55209bb636c41a4732c94226cfcabed9379b81a9d012b20f806b7dae20306a30ad400f7552377f216257061ff4396f27acf45d25beaf7e124e00aeb469e8918b#npm:7.2.1", {
|
1482 | "packageLocation": "./.yarn/$$virtual/ws-virtual-1511719ea6/0/cache/ws-npm-7.2.1-6a11e4a4b3-2.zip/node_modules/ws/",
|
1483 | "packageDependencies": [
|
1484 | ["ws", "virtual:55209bb636c41a4732c94226cfcabed9379b81a9d012b20f806b7dae20306a30ad400f7552377f216257061ff4396f27acf45d25beaf7e124e00aeb469e8918b#npm:7.2.1"],
|
1485 | ["bufferutil", null],
|
1486 | ["utf-8-validate", null]
|
1487 | ],
|
1488 | "packagePeers": [
|
1489 | "bufferutil",
|
1490 | "utf-8-validate"
|
1491 | ],
|
1492 | "linkType": "HARD",
|
1493 | }],
|
1494 | ["virtual:bd697a751d58794530b682e5228b684a9f4a00d605f65e3707c8a27de2cc1b546f75892637f679b4286599f9fd60f3f12365f3d28f27a908f0b59bd6e06dae15#npm:7.2.3", {
|
1495 | "packageLocation": "./.yarn/$$virtual/ws-virtual-63c51cd41a/0/cache/ws-npm-7.2.3-e2147dfc25-2.zip/node_modules/ws/",
|
1496 | "packageDependencies": [
|
1497 | ["ws", "virtual:bd697a751d58794530b682e5228b684a9f4a00d605f65e3707c8a27de2cc1b546f75892637f679b4286599f9fd60f3f12365f3d28f27a908f0b59bd6e06dae15#npm:7.2.3"],
|
1498 | ["bufferutil", null],
|
1499 | ["utf-8-validate", null]
|
1500 | ],
|
1501 | "packagePeers": [
|
1502 | "bufferutil",
|
1503 | "utf-8-validate"
|
1504 | ],
|
1505 | "linkType": "HARD",
|
1506 | }]
|
1507 | ]]
|
1508 | ]
|
1509 | }, {basePath: basePath || __dirname});
|
1510 | }
|
1511 |
|
1512 | (function webpackUniversalModuleDefinition(root, factory) {
|
1513 | if(typeof exports === 'object' && typeof module === 'object')
|
1514 | module.exports = factory();
|
1515 | else if(typeof define === 'function' && define.amd)
|
1516 | define([], factory);
|
1517 | else if(typeof exports === 'object')
|
1518 | exports["pnpHook"] = factory();
|
1519 | else
|
1520 | root["pnpHook"] = factory();
|
1521 | })(global, function() {
|
1522 | return (function(modules) {
|
1523 |
|
1524 | var installedModules = {};
|
1525 |
|
1526 |
|
1527 | function __webpack_require__(moduleId) {
|
1528 |
|
1529 |
|
1530 | if(installedModules[moduleId]) {
|
1531 | return installedModules[moduleId].exports;
|
1532 | }
|
1533 |
|
1534 | var module = installedModules[moduleId] = {
|
1535 | i: moduleId,
|
1536 | l: false,
|
1537 | exports: {}
|
1538 | };
|
1539 |
|
1540 |
|
1541 | modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
1542 |
|
1543 |
|
1544 | module.l = true;
|
1545 |
|
1546 |
|
1547 | return module.exports;
|
1548 | }
|
1549 |
|
1550 |
|
1551 |
|
1552 | __webpack_require__.m = modules;
|
1553 |
|
1554 |
|
1555 | __webpack_require__.c = installedModules;
|
1556 |
|
1557 |
|
1558 | __webpack_require__.d = function(exports, name, getter) {
|
1559 | if(!__webpack_require__.o(exports, name)) {
|
1560 | Object.defineProperty(exports, name, { enumerable: true, get: getter });
|
1561 | }
|
1562 | };
|
1563 |
|
1564 |
|
1565 | __webpack_require__.r = function(exports) {
|
1566 | if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
1567 | Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
1568 | }
|
1569 | Object.defineProperty(exports, '__esModule', { value: true });
|
1570 | };
|
1571 |
|
1572 |
|
1573 |
|
1574 |
|
1575 |
|
1576 |
|
1577 | __webpack_require__.t = function(value, mode) {
|
1578 | if(mode & 1) value = __webpack_require__(value);
|
1579 | if(mode & 8) return value;
|
1580 | if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
|
1581 | var ns = Object.create(null);
|
1582 | __webpack_require__.r(ns);
|
1583 | Object.defineProperty(ns, 'default', { enumerable: true, value: value });
|
1584 | if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
|
1585 | return ns;
|
1586 | };
|
1587 |
|
1588 |
|
1589 | __webpack_require__.n = function(module) {
|
1590 | var getter = module && module.__esModule ?
|
1591 | function getDefault() { return module['default']; } :
|
1592 | function getModuleExports() { return module; };
|
1593 | __webpack_require__.d(getter, 'a', getter);
|
1594 | return getter;
|
1595 | };
|
1596 |
|
1597 |
|
1598 | __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
1599 |
|
1600 |
|
1601 | __webpack_require__.p = "";
|
1602 |
|
1603 |
|
1604 |
|
1605 | return __webpack_require__(__webpack_require__.s = 12);
|
1606 | })
|
1607 |
|
1608 | ([
|
1609 |
|
1610 | (function(module, exports, __webpack_require__) {
|
1611 |
|
1612 | "use strict";
|
1613 |
|
1614 |
|
1615 | var __importDefault = this && this.__importDefault || function (mod) {
|
1616 | return mod && mod.__esModule ? mod : {
|
1617 | "default": mod
|
1618 | };
|
1619 | };
|
1620 |
|
1621 | Object.defineProperty(exports, "__esModule", {
|
1622 | value: true
|
1623 | });
|
1624 |
|
1625 | const path_1 = __importDefault(__webpack_require__(7));
|
1626 |
|
1627 | exports.PortablePath = {
|
1628 | root: `/`,
|
1629 | dot: `.`
|
1630 | };
|
1631 | exports.Filename = {
|
1632 | nodeModules: `node_modules`,
|
1633 | manifest: `package.json`,
|
1634 | lockfile: `yarn.lock`
|
1635 | };
|
1636 | exports.npath = Object.create(path_1.default);
|
1637 | exports.ppath = Object.create(path_1.default.posix);
|
1638 |
|
1639 | const contains = function (pathUtils, from, to) {
|
1640 | from = pathUtils.normalize(from);
|
1641 | to = pathUtils.normalize(to);
|
1642 | if (from === to) return `.`;
|
1643 | if (!from.endsWith(pathUtils.sep)) from = from + pathUtils.sep;
|
1644 |
|
1645 | if (to.startsWith(from)) {
|
1646 | return to.slice(from.length);
|
1647 | } else {
|
1648 | return null;
|
1649 | }
|
1650 | };
|
1651 |
|
1652 | exports.npath.fromPortablePath = fromPortablePath;
|
1653 | exports.npath.toPortablePath = toPortablePath;
|
1654 |
|
1655 | exports.npath.contains = (from, to) => contains(exports.npath, from, to);
|
1656 |
|
1657 | exports.ppath.contains = (from, to) => contains(exports.ppath, from, to);
|
1658 |
|
1659 | const WINDOWS_PATH_REGEXP = /^[a-zA-Z]:.*$/;
|
1660 | const PORTABLE_PATH_REGEXP = /^\/[a-zA-Z]:.*$/;
|
1661 |
|
1662 |
|
1663 | function fromPortablePath(p) {
|
1664 | if (process.platform !== 'win32') return p;
|
1665 | return p.match(PORTABLE_PATH_REGEXP) ? p.substring(1).replace(/\//g, `\\`) : p;
|
1666 | }
|
1667 |
|
1668 |
|
1669 |
|
1670 | function toPortablePath(p) {
|
1671 | if (process.platform !== 'win32') return p;
|
1672 | return (p.match(WINDOWS_PATH_REGEXP) ? `/${p}` : p).replace(/\\/g, `/`);
|
1673 | }
|
1674 |
|
1675 | function convertPath(targetPathUtils, sourcePath) {
|
1676 | return targetPathUtils === exports.npath ? fromPortablePath(sourcePath) : toPortablePath(sourcePath);
|
1677 | }
|
1678 |
|
1679 | exports.convertPath = convertPath;
|
1680 |
|
1681 | function toFilename(filename) {
|
1682 | if (exports.npath.parse(filename).dir !== '' || exports.ppath.parse(filename).dir !== '') throw new Error(`Invalid filename: "${filename}"`);
|
1683 | return filename;
|
1684 | }
|
1685 |
|
1686 | exports.toFilename = toFilename;
|
1687 |
|
1688 | }),
|
1689 |
|
1690 | (function(module, exports, __webpack_require__) {
|
1691 |
|
1692 | "use strict";
|
1693 |
|
1694 |
|
1695 | var __importDefault = this && this.__importDefault || function (mod) {
|
1696 | return mod && mod.__esModule ? mod : {
|
1697 | "default": mod
|
1698 | };
|
1699 | };
|
1700 |
|
1701 | Object.defineProperty(exports, "__esModule", {
|
1702 | value: true
|
1703 | });
|
1704 |
|
1705 | const fs_1 = __importDefault(__webpack_require__(2));
|
1706 |
|
1707 | const FakeFS_1 = __webpack_require__(3);
|
1708 |
|
1709 | const path_1 = __webpack_require__(0);
|
1710 |
|
1711 | class NodeFS extends FakeFS_1.BasePortableFakeFS {
|
1712 | constructor(realFs = fs_1.default) {
|
1713 | super();
|
1714 | this.realFs = realFs;
|
1715 | }
|
1716 |
|
1717 | getExtractHint() {
|
1718 | return false;
|
1719 | }
|
1720 |
|
1721 | getRealPath() {
|
1722 | return path_1.PortablePath.root;
|
1723 | }
|
1724 |
|
1725 | async openPromise(p, flags, mode) {
|
1726 | return await new Promise((resolve, reject) => {
|
1727 | this.realFs.open(path_1.npath.fromPortablePath(p), flags, mode, this.makeCallback(resolve, reject));
|
1728 | });
|
1729 | }
|
1730 |
|
1731 | openSync(p, flags, mode) {
|
1732 | return this.realFs.openSync(path_1.npath.fromPortablePath(p), flags, mode);
|
1733 | }
|
1734 |
|
1735 | async readPromise(fd, buffer, offset = 0, length = 0, position = -1) {
|
1736 | return await new Promise((resolve, reject) => {
|
1737 | this.realFs.read(fd, buffer, offset, length, position, (error, bytesRead) => {
|
1738 | if (error) {
|
1739 | reject(error);
|
1740 | } else {
|
1741 | resolve(bytesRead);
|
1742 | }
|
1743 | });
|
1744 | });
|
1745 | }
|
1746 |
|
1747 | readSync(fd, buffer, offset, length, position) {
|
1748 | return this.realFs.readSync(fd, buffer, offset, length, position);
|
1749 | }
|
1750 |
|
1751 | async writePromise(fd, buffer, offset, length, position) {
|
1752 | return await new Promise((resolve, reject) => {
|
1753 | if (typeof buffer === `string`) {
|
1754 | return this.realFs.write(fd, buffer, offset, this.makeCallback(resolve, reject));
|
1755 | } else {
|
1756 | return this.realFs.write(fd, buffer, offset, length, position, this.makeCallback(resolve, reject));
|
1757 | }
|
1758 | });
|
1759 | }
|
1760 |
|
1761 | writeSync(fd, buffer, offset, length, position) {
|
1762 | if (typeof buffer === `string`) {
|
1763 | return this.realFs.writeSync(fd, buffer, offset);
|
1764 | } else {
|
1765 | return this.realFs.writeSync(fd, buffer, offset, length, position);
|
1766 | }
|
1767 | }
|
1768 |
|
1769 | async closePromise(fd) {
|
1770 | await new Promise((resolve, reject) => {
|
1771 | this.realFs.close(fd, this.makeCallback(resolve, reject));
|
1772 | });
|
1773 | }
|
1774 |
|
1775 | closeSync(fd) {
|
1776 | this.realFs.closeSync(fd);
|
1777 | }
|
1778 |
|
1779 | createReadStream(p, opts) {
|
1780 | const realPath = p !== null ? path_1.npath.fromPortablePath(p) : p;
|
1781 | return this.realFs.createReadStream(realPath, opts);
|
1782 | }
|
1783 |
|
1784 | createWriteStream(p, opts) {
|
1785 | const realPath = p !== null ? path_1.npath.fromPortablePath(p) : p;
|
1786 | return this.realFs.createWriteStream(realPath, opts);
|
1787 | }
|
1788 |
|
1789 | async realpathPromise(p) {
|
1790 | return await new Promise((resolve, reject) => {
|
1791 | this.realFs.realpath(path_1.npath.fromPortablePath(p), {}, this.makeCallback(resolve, reject));
|
1792 | }).then(path => {
|
1793 | return path_1.npath.toPortablePath(path);
|
1794 | });
|
1795 | }
|
1796 |
|
1797 | realpathSync(p) {
|
1798 | return path_1.npath.toPortablePath(this.realFs.realpathSync(path_1.npath.fromPortablePath(p), {}));
|
1799 | }
|
1800 |
|
1801 | async existsPromise(p) {
|
1802 | return await new Promise(resolve => {
|
1803 | this.realFs.exists(path_1.npath.fromPortablePath(p), resolve);
|
1804 | });
|
1805 | }
|
1806 |
|
1807 | accessSync(p, mode) {
|
1808 | return this.realFs.accessSync(path_1.npath.fromPortablePath(p), mode);
|
1809 | }
|
1810 |
|
1811 | async accessPromise(p, mode) {
|
1812 | return await new Promise((resolve, reject) => {
|
1813 | this.realFs.access(path_1.npath.fromPortablePath(p), mode, this.makeCallback(resolve, reject));
|
1814 | });
|
1815 | }
|
1816 |
|
1817 | existsSync(p) {
|
1818 | return this.realFs.existsSync(path_1.npath.fromPortablePath(p));
|
1819 | }
|
1820 |
|
1821 | async statPromise(p) {
|
1822 | return await new Promise((resolve, reject) => {
|
1823 | this.realFs.stat(path_1.npath.fromPortablePath(p), this.makeCallback(resolve, reject));
|
1824 | });
|
1825 | }
|
1826 |
|
1827 | statSync(p) {
|
1828 | return this.realFs.statSync(path_1.npath.fromPortablePath(p));
|
1829 | }
|
1830 |
|
1831 | async lstatPromise(p) {
|
1832 | return await new Promise((resolve, reject) => {
|
1833 | this.realFs.lstat(path_1.npath.fromPortablePath(p), this.makeCallback(resolve, reject));
|
1834 | });
|
1835 | }
|
1836 |
|
1837 | lstatSync(p) {
|
1838 | return this.realFs.lstatSync(path_1.npath.fromPortablePath(p));
|
1839 | }
|
1840 |
|
1841 | async chmodPromise(p, mask) {
|
1842 | return await new Promise((resolve, reject) => {
|
1843 | this.realFs.chmod(path_1.npath.fromPortablePath(p), mask, this.makeCallback(resolve, reject));
|
1844 | });
|
1845 | }
|
1846 |
|
1847 | chmodSync(p, mask) {
|
1848 | return this.realFs.chmodSync(path_1.npath.fromPortablePath(p), mask);
|
1849 | }
|
1850 |
|
1851 | async renamePromise(oldP, newP) {
|
1852 | return await new Promise((resolve, reject) => {
|
1853 | this.realFs.rename(path_1.npath.fromPortablePath(oldP), path_1.npath.fromPortablePath(newP), this.makeCallback(resolve, reject));
|
1854 | });
|
1855 | }
|
1856 |
|
1857 | renameSync(oldP, newP) {
|
1858 | return this.realFs.renameSync(path_1.npath.fromPortablePath(oldP), path_1.npath.fromPortablePath(newP));
|
1859 | }
|
1860 |
|
1861 | async copyFilePromise(sourceP, destP, flags = 0) {
|
1862 | return await new Promise((resolve, reject) => {
|
1863 | this.realFs.copyFile(path_1.npath.fromPortablePath(sourceP), path_1.npath.fromPortablePath(destP), flags, this.makeCallback(resolve, reject));
|
1864 | });
|
1865 | }
|
1866 |
|
1867 | copyFileSync(sourceP, destP, flags = 0) {
|
1868 | return this.realFs.copyFileSync(path_1.npath.fromPortablePath(sourceP), path_1.npath.fromPortablePath(destP), flags);
|
1869 | }
|
1870 |
|
1871 | async appendFilePromise(p, content, opts) {
|
1872 | return await new Promise((resolve, reject) => {
|
1873 | const fsNativePath = typeof p === `string` ? path_1.npath.fromPortablePath(p) : p;
|
1874 |
|
1875 | if (opts) {
|
1876 | this.realFs.appendFile(fsNativePath, content, opts, this.makeCallback(resolve, reject));
|
1877 | } else {
|
1878 | this.realFs.appendFile(fsNativePath, content, this.makeCallback(resolve, reject));
|
1879 | }
|
1880 | });
|
1881 | }
|
1882 |
|
1883 | appendFileSync(p, content, opts) {
|
1884 | const fsNativePath = typeof p === `string` ? path_1.npath.fromPortablePath(p) : p;
|
1885 |
|
1886 | if (opts) {
|
1887 | this.realFs.appendFileSync(fsNativePath, content, opts);
|
1888 | } else {
|
1889 | this.realFs.appendFileSync(fsNativePath, content);
|
1890 | }
|
1891 | }
|
1892 |
|
1893 | async writeFilePromise(p, content, opts) {
|
1894 | return await new Promise((resolve, reject) => {
|
1895 | const fsNativePath = typeof p === `string` ? path_1.npath.fromPortablePath(p) : p;
|
1896 |
|
1897 | if (opts) {
|
1898 | this.realFs.writeFile(fsNativePath, content, opts, this.makeCallback(resolve, reject));
|
1899 | } else {
|
1900 | this.realFs.writeFile(fsNativePath, content, this.makeCallback(resolve, reject));
|
1901 | }
|
1902 | });
|
1903 | }
|
1904 |
|
1905 | writeFileSync(p, content, opts) {
|
1906 | const fsNativePath = typeof p === `string` ? path_1.npath.fromPortablePath(p) : p;
|
1907 |
|
1908 | if (opts) {
|
1909 | this.realFs.writeFileSync(fsNativePath, content, opts);
|
1910 | } else {
|
1911 | this.realFs.writeFileSync(fsNativePath, content);
|
1912 | }
|
1913 | }
|
1914 |
|
1915 | async unlinkPromise(p) {
|
1916 | return await new Promise((resolve, reject) => {
|
1917 | this.realFs.unlink(path_1.npath.fromPortablePath(p), this.makeCallback(resolve, reject));
|
1918 | });
|
1919 | }
|
1920 |
|
1921 | unlinkSync(p) {
|
1922 | return this.realFs.unlinkSync(path_1.npath.fromPortablePath(p));
|
1923 | }
|
1924 |
|
1925 | async utimesPromise(p, atime, mtime) {
|
1926 | return await new Promise((resolve, reject) => {
|
1927 | this.realFs.utimes(path_1.npath.fromPortablePath(p), atime, mtime, this.makeCallback(resolve, reject));
|
1928 | });
|
1929 | }
|
1930 |
|
1931 | utimesSync(p, atime, mtime) {
|
1932 | this.realFs.utimesSync(path_1.npath.fromPortablePath(p), atime, mtime);
|
1933 | }
|
1934 |
|
1935 | async mkdirPromise(p, opts) {
|
1936 | return await new Promise((resolve, reject) => {
|
1937 | this.realFs.mkdir(path_1.npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject));
|
1938 | });
|
1939 | }
|
1940 |
|
1941 | mkdirSync(p, opts) {
|
1942 | return this.realFs.mkdirSync(path_1.npath.fromPortablePath(p), opts);
|
1943 | }
|
1944 |
|
1945 | async rmdirPromise(p) {
|
1946 | return await new Promise((resolve, reject) => {
|
1947 | this.realFs.rmdir(path_1.npath.fromPortablePath(p), this.makeCallback(resolve, reject));
|
1948 | });
|
1949 | }
|
1950 |
|
1951 | rmdirSync(p) {
|
1952 | return this.realFs.rmdirSync(path_1.npath.fromPortablePath(p));
|
1953 | }
|
1954 |
|
1955 | async symlinkPromise(target, p, type) {
|
1956 | const symlinkType = type || (target.endsWith(`/`) ? `dir` : `file`);
|
1957 | return await new Promise((resolve, reject) => {
|
1958 | this.realFs.symlink(path_1.npath.fromPortablePath(target.replace(/\/+$/, ``)), path_1.npath.fromPortablePath(p), symlinkType, this.makeCallback(resolve, reject));
|
1959 | });
|
1960 | }
|
1961 |
|
1962 | symlinkSync(target, p, type) {
|
1963 | const symlinkType = type || (target.endsWith(`/`) ? `dir` : `file`);
|
1964 | return this.realFs.symlinkSync(path_1.npath.fromPortablePath(target.replace(/\/+$/, ``)), path_1.npath.fromPortablePath(p), symlinkType);
|
1965 | }
|
1966 |
|
1967 | async readFilePromise(p, encoding) {
|
1968 | return await new Promise((resolve, reject) => {
|
1969 | const fsNativePath = typeof p === `string` ? path_1.npath.fromPortablePath(p) : p;
|
1970 | this.realFs.readFile(fsNativePath, encoding, this.makeCallback(resolve, reject));
|
1971 | });
|
1972 | }
|
1973 |
|
1974 | readFileSync(p, encoding) {
|
1975 | const fsNativePath = typeof p === `string` ? path_1.npath.fromPortablePath(p) : p;
|
1976 | return this.realFs.readFileSync(fsNativePath, encoding);
|
1977 | }
|
1978 |
|
1979 | async readdirPromise(p, {
|
1980 | withFileTypes
|
1981 | } = {}) {
|
1982 | return await new Promise((resolve, reject) => {
|
1983 | if (withFileTypes) {
|
1984 | this.realFs.readdir(path_1.npath.fromPortablePath(p), {
|
1985 | withFileTypes: true
|
1986 | }, this.makeCallback(resolve, reject));
|
1987 | } else {
|
1988 | this.realFs.readdir(path_1.npath.fromPortablePath(p), this.makeCallback(value => resolve(value), reject));
|
1989 | }
|
1990 | });
|
1991 | }
|
1992 |
|
1993 | readdirSync(p, {
|
1994 | withFileTypes
|
1995 | } = {}) {
|
1996 | if (withFileTypes) {
|
1997 | return this.realFs.readdirSync(path_1.npath.fromPortablePath(p), {
|
1998 | withFileTypes: true
|
1999 | });
|
2000 | } else {
|
2001 | return this.realFs.readdirSync(path_1.npath.fromPortablePath(p));
|
2002 | }
|
2003 | }
|
2004 |
|
2005 | async readlinkPromise(p) {
|
2006 | return await new Promise((resolve, reject) => {
|
2007 | this.realFs.readlink(path_1.npath.fromPortablePath(p), this.makeCallback(resolve, reject));
|
2008 | }).then(path => {
|
2009 | return path_1.npath.toPortablePath(path);
|
2010 | });
|
2011 | }
|
2012 |
|
2013 | readlinkSync(p) {
|
2014 | return path_1.npath.toPortablePath(this.realFs.readlinkSync(path_1.npath.fromPortablePath(p)));
|
2015 | }
|
2016 |
|
2017 | watch(p, a, b) {
|
2018 | return this.realFs.watch(path_1.npath.fromPortablePath(p),
|
2019 | a, b);
|
2020 | }
|
2021 |
|
2022 | makeCallback(resolve, reject) {
|
2023 | return (err, result) => {
|
2024 | if (err) {
|
2025 | reject(err);
|
2026 | } else {
|
2027 | resolve(result);
|
2028 | }
|
2029 | };
|
2030 | }
|
2031 |
|
2032 | }
|
2033 |
|
2034 | exports.NodeFS = NodeFS;
|
2035 |
|
2036 | }),
|
2037 |
|
2038 | (function(module, exports) {
|
2039 |
|
2040 | module.exports = require("fs");
|
2041 |
|
2042 | }),
|
2043 |
|
2044 | (function(module, exports, __webpack_require__) {
|
2045 |
|
2046 | "use strict";
|
2047 |
|
2048 |
|
2049 | Object.defineProperty(exports, "__esModule", {
|
2050 | value: true
|
2051 | });
|
2052 |
|
2053 | const os_1 = __webpack_require__(8);
|
2054 |
|
2055 | const copyPromise_1 = __webpack_require__(13);
|
2056 |
|
2057 | const path_1 = __webpack_require__(0);
|
2058 |
|
2059 | const path_2 = __webpack_require__(0);
|
2060 |
|
2061 | class FakeFS {
|
2062 | constructor(pathUtils) {
|
2063 | this.pathUtils = pathUtils;
|
2064 | }
|
2065 |
|
2066 | async removePromise(p) {
|
2067 | let stat;
|
2068 |
|
2069 | try {
|
2070 | stat = await this.lstatPromise(p);
|
2071 | } catch (error) {
|
2072 | if (error.code === `ENOENT`) {
|
2073 | return;
|
2074 | } else {
|
2075 | throw error;
|
2076 | }
|
2077 | }
|
2078 |
|
2079 | if (stat.isDirectory()) {
|
2080 | for (const entry of await this.readdirPromise(p)) await this.removePromise(this.pathUtils.resolve(p, entry));
|
2081 |
|
2082 |
|
2083 | for (let t = 0; t < 5; ++t) {
|
2084 | try {
|
2085 | await this.rmdirPromise(p);
|
2086 | break;
|
2087 | } catch (error) {
|
2088 | if (error.code === `EBUSY` || error.code === `ENOTEMPTY`) {
|
2089 | await new Promise(resolve => setTimeout(resolve, t * 100));
|
2090 | continue;
|
2091 | } else {
|
2092 | throw error;
|
2093 | }
|
2094 | }
|
2095 | }
|
2096 | } else {
|
2097 | await this.unlinkPromise(p);
|
2098 | }
|
2099 | }
|
2100 |
|
2101 | removeSync(p) {
|
2102 | let stat;
|
2103 |
|
2104 | try {
|
2105 | stat = this.lstatSync(p);
|
2106 | } catch (error) {
|
2107 | if (error.code === `ENOENT`) {
|
2108 | return;
|
2109 | } else {
|
2110 | throw error;
|
2111 | }
|
2112 | }
|
2113 |
|
2114 | if (stat.isDirectory()) {
|
2115 | for (const entry of this.readdirSync(p)) this.removeSync(this.pathUtils.resolve(p, entry));
|
2116 |
|
2117 | this.rmdirSync(p);
|
2118 | } else {
|
2119 | this.unlinkSync(p);
|
2120 | }
|
2121 | }
|
2122 |
|
2123 | async mkdirpPromise(p, {
|
2124 | chmod,
|
2125 | utimes
|
2126 | } = {}) {
|
2127 | p = this.resolve(p);
|
2128 | if (p === this.pathUtils.dirname(p)) return;
|
2129 | const parts = p.split(this.pathUtils.sep);
|
2130 |
|
2131 | for (let u = 2; u <= parts.length; ++u) {
|
2132 | const subPath = parts.slice(0, u).join(this.pathUtils.sep);
|
2133 |
|
2134 | if (!this.existsSync(subPath)) {
|
2135 | try {
|
2136 | await this.mkdirPromise(subPath);
|
2137 | } catch (error) {
|
2138 | if (error.code === `EEXIST`) {
|
2139 | continue;
|
2140 | } else {
|
2141 | throw error;
|
2142 | }
|
2143 | }
|
2144 |
|
2145 | if (chmod != null) await this.chmodPromise(subPath, chmod);
|
2146 |
|
2147 | if (utimes != null) {
|
2148 | await this.utimesPromise(subPath, utimes[0], utimes[1]);
|
2149 | } else {
|
2150 | const parentStat = await this.statPromise(this.pathUtils.dirname(subPath));
|
2151 | await this.utimesPromise(subPath, parentStat.atime, parentStat.mtime);
|
2152 | }
|
2153 | }
|
2154 | }
|
2155 | }
|
2156 |
|
2157 | mkdirpSync(p, {
|
2158 | chmod,
|
2159 | utimes
|
2160 | } = {}) {
|
2161 | p = this.resolve(p);
|
2162 | if (p === this.pathUtils.dirname(p)) return;
|
2163 | const parts = p.split(this.pathUtils.sep);
|
2164 |
|
2165 | for (let u = 2; u <= parts.length; ++u) {
|
2166 | const subPath = parts.slice(0, u).join(this.pathUtils.sep);
|
2167 |
|
2168 | if (!this.existsSync(subPath)) {
|
2169 | try {
|
2170 | this.mkdirSync(subPath);
|
2171 | } catch (error) {
|
2172 | if (error.code === `EEXIST`) {
|
2173 | continue;
|
2174 | } else {
|
2175 | throw error;
|
2176 | }
|
2177 | }
|
2178 |
|
2179 | if (chmod != null) this.chmodSync(subPath, chmod);
|
2180 |
|
2181 | if (utimes != null) {
|
2182 | this.utimesSync(subPath, utimes[0], utimes[1]);
|
2183 | } else {
|
2184 | const parentStat = this.statSync(this.pathUtils.dirname(subPath));
|
2185 | this.utimesSync(subPath, parentStat.atime, parentStat.mtime);
|
2186 | }
|
2187 | }
|
2188 | }
|
2189 | }
|
2190 |
|
2191 | async copyPromise(destination, source, {
|
2192 | baseFs = this,
|
2193 | overwrite = true
|
2194 | } = {}) {
|
2195 | return await copyPromise_1.copyPromise(this, destination, baseFs, source, {
|
2196 | overwrite
|
2197 | });
|
2198 | }
|
2199 |
|
2200 | copySync(destination, source, {
|
2201 | baseFs = this,
|
2202 | overwrite = true
|
2203 | } = {}) {
|
2204 | const stat = baseFs.lstatSync(source);
|
2205 | const exists = this.existsSync(destination);
|
2206 |
|
2207 | if (stat.isDirectory()) {
|
2208 | this.mkdirpSync(destination);
|
2209 | const directoryListing = baseFs.readdirSync(source);
|
2210 |
|
2211 | for (const entry of directoryListing) {
|
2212 | this.copySync(this.pathUtils.join(destination, entry), baseFs.pathUtils.join(source, entry), {
|
2213 | baseFs,
|
2214 | overwrite
|
2215 | });
|
2216 | }
|
2217 | } else if (stat.isFile()) {
|
2218 | if (!exists || overwrite) {
|
2219 | if (exists) this.removeSync(destination);
|
2220 | const content = baseFs.readFileSync(source);
|
2221 | this.writeFileSync(destination, content);
|
2222 | }
|
2223 | } else if (stat.isSymbolicLink()) {
|
2224 | if (!exists || overwrite) {
|
2225 | if (exists) this.removeSync(destination);
|
2226 | const target = baseFs.readlinkSync(source);
|
2227 | this.symlinkSync(path_2.convertPath(this.pathUtils, target), destination);
|
2228 | }
|
2229 | } else {
|
2230 | throw new Error(`Unsupported file type (file: ${source}, mode: 0o${stat.mode.toString(8).padStart(6, `0`)})`);
|
2231 | }
|
2232 |
|
2233 | const mode = stat.mode & 0o777;
|
2234 | this.chmodSync(destination, mode);
|
2235 | }
|
2236 |
|
2237 | async changeFilePromise(p, content, {
|
2238 | automaticNewlines
|
2239 | } = {}) {
|
2240 | let current = '';
|
2241 |
|
2242 | try {
|
2243 | current = await this.readFilePromise(p, `utf8`);
|
2244 | } catch (error) {
|
2245 | }
|
2246 |
|
2247 | const normalizedContent = automaticNewlines ? normalizeLineEndings(current, content) : content;
|
2248 | if (current === normalizedContent) return;
|
2249 | await this.writeFilePromise(p, normalizedContent);
|
2250 | }
|
2251 |
|
2252 | changeFileSync(p, content, {
|
2253 | automaticNewlines = false
|
2254 | } = {}) {
|
2255 | let current = '';
|
2256 |
|
2257 | try {
|
2258 | current = this.readFileSync(p, `utf8`);
|
2259 | } catch (error) {
|
2260 | }
|
2261 |
|
2262 | const normalizedContent = automaticNewlines ? normalizeLineEndings(current, content) : content;
|
2263 | if (current === normalizedContent) return;
|
2264 | this.writeFileSync(p, normalizedContent);
|
2265 | }
|
2266 |
|
2267 | async movePromise(fromP, toP) {
|
2268 | try {
|
2269 | await this.renamePromise(fromP, toP);
|
2270 | } catch (error) {
|
2271 | if (error.code === `EXDEV`) {
|
2272 | await this.copyPromise(toP, fromP);
|
2273 | await this.removePromise(fromP);
|
2274 | } else {
|
2275 | throw error;
|
2276 | }
|
2277 | }
|
2278 | }
|
2279 |
|
2280 | moveSync(fromP, toP) {
|
2281 | try {
|
2282 | this.renameSync(fromP, toP);
|
2283 | } catch (error) {
|
2284 | if (error.code === `EXDEV`) {
|
2285 | this.copySync(toP, fromP);
|
2286 | this.removeSync(fromP);
|
2287 | } else {
|
2288 | throw error;
|
2289 | }
|
2290 | }
|
2291 | }
|
2292 |
|
2293 | async lockPromise(affectedPath, callback) {
|
2294 | const lockPath = `${affectedPath}.flock`;
|
2295 | const interval = 1000 / 60;
|
2296 | const startTime = Date.now();
|
2297 | let fd = null;
|
2298 |
|
2299 |
|
2300 |
|
2301 |
|
2302 | const isAlive = async () => {
|
2303 | let pid;
|
2304 |
|
2305 | try {
|
2306 | [pid] = await this.readJsonPromise(lockPath);
|
2307 | } catch (error) {
|
2308 |
|
2309 |
|
2310 | return Date.now() - startTime < 500;
|
2311 | }
|
2312 |
|
2313 | try {
|
2314 |
|
2315 |
|
2316 | process.kill(pid, 0);
|
2317 | return true;
|
2318 | } catch (error) {
|
2319 | return false;
|
2320 | }
|
2321 | };
|
2322 |
|
2323 | while (fd === null) {
|
2324 | try {
|
2325 | fd = await this.openPromise(lockPath, `wx`);
|
2326 | } catch (error) {
|
2327 | if (error.code === `EEXIST`) {
|
2328 | if (!(await isAlive())) {
|
2329 | try {
|
2330 | await this.unlinkPromise(lockPath);
|
2331 | continue;
|
2332 | } catch (error) {
|
2333 |
|
2334 | }
|
2335 | }
|
2336 |
|
2337 | if (Date.now() - startTime < 60 * 1000) {
|
2338 | await new Promise(resolve => setTimeout(resolve, interval));
|
2339 | } else {
|
2340 | throw new Error(`Couldn't acquire a lock in a reasonable time (via ${lockPath})`);
|
2341 | }
|
2342 | } else {
|
2343 | throw error;
|
2344 | }
|
2345 | }
|
2346 | }
|
2347 |
|
2348 | await this.writePromise(fd, JSON.stringify([process.pid]));
|
2349 |
|
2350 | try {
|
2351 | return await callback();
|
2352 | } finally {
|
2353 | await this.closePromise(fd);
|
2354 | await this.unlinkPromise(lockPath);
|
2355 | }
|
2356 | }
|
2357 |
|
2358 | async readJsonPromise(p) {
|
2359 | const content = await this.readFilePromise(p, `utf8`);
|
2360 |
|
2361 | try {
|
2362 | return JSON.parse(content);
|
2363 | } catch (error) {
|
2364 | error.message += ` (in ${p})`;
|
2365 | throw error;
|
2366 | }
|
2367 | }
|
2368 |
|
2369 | async readJsonSync(p) {
|
2370 | const content = this.readFileSync(p, `utf8`);
|
2371 |
|
2372 | try {
|
2373 | return JSON.parse(content);
|
2374 | } catch (error) {
|
2375 | error.message += ` (in ${p})`;
|
2376 | throw error;
|
2377 | }
|
2378 | }
|
2379 |
|
2380 | async writeJsonPromise(p, data) {
|
2381 | return await this.writeFilePromise(p, `${JSON.stringify(data, null, 2)}\n`);
|
2382 | }
|
2383 |
|
2384 | writeJsonSync(p, data) {
|
2385 | return this.writeFileSync(p, `${JSON.stringify(data, null, 2)}\n`);
|
2386 | }
|
2387 |
|
2388 | async preserveTimePromise(p, cb) {
|
2389 | const stat = await this.lstatPromise(p);
|
2390 | const result = await cb();
|
2391 | if (typeof result !== `undefined`) p = result;
|
2392 |
|
2393 | if (this.lutimesPromise) {
|
2394 | await this.lutimesPromise(p, stat.atime, stat.mtime);
|
2395 | } else if (!stat.isSymbolicLink()) {
|
2396 | await this.utimesPromise(p, stat.atime, stat.mtime);
|
2397 | }
|
2398 | }
|
2399 |
|
2400 | async preserveTimeSync(p, cb) {
|
2401 | const stat = this.lstatSync(p);
|
2402 | const result = cb();
|
2403 | if (typeof result !== `undefined`) p = result;
|
2404 |
|
2405 | if (this.lutimesSync) {
|
2406 | this.lutimesSync(p, stat.atime, stat.mtime);
|
2407 | } else if (!stat.isSymbolicLink()) {
|
2408 | this.utimesSync(p, stat.atime, stat.mtime);
|
2409 | }
|
2410 | }
|
2411 |
|
2412 | }
|
2413 |
|
2414 | exports.FakeFS = FakeFS;
|
2415 | FakeFS.DEFAULT_TIME = 315532800;
|
2416 | ;
|
2417 |
|
2418 | class BasePortableFakeFS extends FakeFS {
|
2419 | constructor() {
|
2420 | super(path_2.ppath);
|
2421 | }
|
2422 |
|
2423 | resolve(p) {
|
2424 | return this.pathUtils.resolve(path_1.PortablePath.root, p);
|
2425 | }
|
2426 |
|
2427 | }
|
2428 |
|
2429 | exports.BasePortableFakeFS = BasePortableFakeFS;
|
2430 |
|
2431 | function getEndOfLine(content) {
|
2432 | const matches = content.match(/\r?\n/g);
|
2433 | if (matches === null) return os_1.EOL;
|
2434 | const crlf = matches.filter(nl => nl === `\r\n`).length;
|
2435 | const lf = matches.length - crlf;
|
2436 | return crlf > lf ? `\r\n` : `\n`;
|
2437 | }
|
2438 |
|
2439 | function normalizeLineEndings(originalContent, newContent) {
|
2440 | return newContent.replace(/\r?\n/g, getEndOfLine(originalContent));
|
2441 | }
|
2442 |
|
2443 | exports.normalizeLineEndings = normalizeLineEndings;
|
2444 |
|
2445 | }),
|
2446 |
|
2447 | (function(module, exports, __webpack_require__) {
|
2448 |
|
2449 | "use strict";
|
2450 |
|
2451 |
|
2452 | Object.defineProperty(exports, "__esModule", {
|
2453 | value: true
|
2454 | });
|
2455 |
|
2456 | const FakeFS_1 = __webpack_require__(3);
|
2457 |
|
2458 | class ProxiedFS extends FakeFS_1.FakeFS {
|
2459 | getExtractHint(hints) {
|
2460 | return this.baseFs.getExtractHint(hints);
|
2461 | }
|
2462 |
|
2463 | resolve(path) {
|
2464 | return this.mapFromBase(this.baseFs.resolve(this.mapToBase(path)));
|
2465 | }
|
2466 |
|
2467 | getRealPath() {
|
2468 | return this.mapFromBase(this.baseFs.getRealPath());
|
2469 | }
|
2470 |
|
2471 | openPromise(p, flags, mode) {
|
2472 | return this.baseFs.openPromise(this.mapToBase(p), flags, mode);
|
2473 | }
|
2474 |
|
2475 | openSync(p, flags, mode) {
|
2476 | return this.baseFs.openSync(this.mapToBase(p), flags, mode);
|
2477 | }
|
2478 |
|
2479 | async readPromise(fd, buffer, offset, length, position) {
|
2480 | return await this.baseFs.readPromise(fd, buffer, offset, length, position);
|
2481 | }
|
2482 |
|
2483 | readSync(fd, buffer, offset, length, position) {
|
2484 | return this.baseFs.readSync(fd, buffer, offset, length, position);
|
2485 | }
|
2486 |
|
2487 | async writePromise(fd, buffer, offset, length, position) {
|
2488 | if (typeof buffer === `string`) {
|
2489 | return await this.baseFs.writePromise(fd, buffer, offset);
|
2490 | } else {
|
2491 | return await this.baseFs.writePromise(fd, buffer, offset, length, position);
|
2492 | }
|
2493 | }
|
2494 |
|
2495 | writeSync(fd, buffer, offset, length, position) {
|
2496 | if (typeof buffer === `string`) {
|
2497 | return this.baseFs.writeSync(fd, buffer, offset);
|
2498 | } else {
|
2499 | return this.baseFs.writeSync(fd, buffer, offset, length, position);
|
2500 | }
|
2501 | }
|
2502 |
|
2503 | closePromise(fd) {
|
2504 | return this.baseFs.closePromise(fd);
|
2505 | }
|
2506 |
|
2507 | closeSync(fd) {
|
2508 | this.baseFs.closeSync(fd);
|
2509 | }
|
2510 |
|
2511 | createReadStream(p, opts) {
|
2512 | return this.baseFs.createReadStream(p !== null ? this.mapToBase(p) : p, opts);
|
2513 | }
|
2514 |
|
2515 | createWriteStream(p, opts) {
|
2516 | return this.baseFs.createWriteStream(p !== null ? this.mapToBase(p) : p, opts);
|
2517 | }
|
2518 |
|
2519 | async realpathPromise(p) {
|
2520 | return this.mapFromBase((await this.baseFs.realpathPromise(this.mapToBase(p))));
|
2521 | }
|
2522 |
|
2523 | realpathSync(p) {
|
2524 | return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(p)));
|
2525 | }
|
2526 |
|
2527 | existsPromise(p) {
|
2528 | return this.baseFs.existsPromise(this.mapToBase(p));
|
2529 | }
|
2530 |
|
2531 | existsSync(p) {
|
2532 | return this.baseFs.existsSync(this.mapToBase(p));
|
2533 | }
|
2534 |
|
2535 | accessSync(p, mode) {
|
2536 | return this.baseFs.accessSync(this.mapToBase(p), mode);
|
2537 | }
|
2538 |
|
2539 | accessPromise(p, mode) {
|
2540 | return this.baseFs.accessPromise(this.mapToBase(p), mode);
|
2541 | }
|
2542 |
|
2543 | statPromise(p) {
|
2544 | return this.baseFs.statPromise(this.mapToBase(p));
|
2545 | }
|
2546 |
|
2547 | statSync(p) {
|
2548 | return this.baseFs.statSync(this.mapToBase(p));
|
2549 | }
|
2550 |
|
2551 | lstatPromise(p) {
|
2552 | return this.baseFs.lstatPromise(this.mapToBase(p));
|
2553 | }
|
2554 |
|
2555 | lstatSync(p) {
|
2556 | return this.baseFs.lstatSync(this.mapToBase(p));
|
2557 | }
|
2558 |
|
2559 | chmodPromise(p, mask) {
|
2560 | return this.baseFs.chmodPromise(this.mapToBase(p), mask);
|
2561 | }
|
2562 |
|
2563 | chmodSync(p, mask) {
|
2564 | return this.baseFs.chmodSync(this.mapToBase(p), mask);
|
2565 | }
|
2566 |
|
2567 | renamePromise(oldP, newP) {
|
2568 | return this.baseFs.renamePromise(this.mapToBase(oldP), this.mapToBase(newP));
|
2569 | }
|
2570 |
|
2571 | renameSync(oldP, newP) {
|
2572 | return this.baseFs.renameSync(this.mapToBase(oldP), this.mapToBase(newP));
|
2573 | }
|
2574 |
|
2575 | copyFilePromise(sourceP, destP, flags = 0) {
|
2576 | return this.baseFs.copyFilePromise(this.mapToBase(sourceP), this.mapToBase(destP), flags);
|
2577 | }
|
2578 |
|
2579 | copyFileSync(sourceP, destP, flags = 0) {
|
2580 | return this.baseFs.copyFileSync(this.mapToBase(sourceP), this.mapToBase(destP), flags);
|
2581 | }
|
2582 |
|
2583 | appendFilePromise(p, content, opts) {
|
2584 | return this.baseFs.appendFilePromise(this.fsMapToBase(p), content, opts);
|
2585 | }
|
2586 |
|
2587 | appendFileSync(p, content, opts) {
|
2588 | return this.baseFs.appendFileSync(this.fsMapToBase(p), content, opts);
|
2589 | }
|
2590 |
|
2591 | writeFilePromise(p, content, opts) {
|
2592 | return this.baseFs.writeFilePromise(this.fsMapToBase(p), content, opts);
|
2593 | }
|
2594 |
|
2595 | writeFileSync(p, content, opts) {
|
2596 | return this.baseFs.writeFileSync(this.fsMapToBase(p), content, opts);
|
2597 | }
|
2598 |
|
2599 | unlinkPromise(p) {
|
2600 | return this.baseFs.unlinkPromise(this.mapToBase(p));
|
2601 | }
|
2602 |
|
2603 | unlinkSync(p) {
|
2604 | return this.baseFs.unlinkSync(this.mapToBase(p));
|
2605 | }
|
2606 |
|
2607 | utimesPromise(p, atime, mtime) {
|
2608 | return this.baseFs.utimesPromise(this.mapToBase(p), atime, mtime);
|
2609 | }
|
2610 |
|
2611 | utimesSync(p, atime, mtime) {
|
2612 | return this.baseFs.utimesSync(this.mapToBase(p), atime, mtime);
|
2613 | }
|
2614 |
|
2615 | mkdirPromise(p, opts) {
|
2616 | return this.baseFs.mkdirPromise(this.mapToBase(p), opts);
|
2617 | }
|
2618 |
|
2619 | mkdirSync(p, opts) {
|
2620 | return this.baseFs.mkdirSync(this.mapToBase(p), opts);
|
2621 | }
|
2622 |
|
2623 | rmdirPromise(p) {
|
2624 | return this.baseFs.rmdirPromise(this.mapToBase(p));
|
2625 | }
|
2626 |
|
2627 | rmdirSync(p) {
|
2628 | return this.baseFs.rmdirSync(this.mapToBase(p));
|
2629 | }
|
2630 |
|
2631 | symlinkPromise(target, p, type) {
|
2632 | return this.baseFs.symlinkPromise(this.mapToBase(target), this.mapToBase(p), type);
|
2633 | }
|
2634 |
|
2635 | symlinkSync(target, p, type) {
|
2636 | return this.baseFs.symlinkSync(this.mapToBase(target), this.mapToBase(p), type);
|
2637 | }
|
2638 |
|
2639 | readFilePromise(p, encoding) {
|
2640 |
|
2641 | if (encoding === 'utf8') {
|
2642 | return this.baseFs.readFilePromise(this.fsMapToBase(p), encoding);
|
2643 | } else {
|
2644 | return this.baseFs.readFilePromise(this.fsMapToBase(p), encoding);
|
2645 | }
|
2646 | }
|
2647 |
|
2648 | readFileSync(p, encoding) {
|
2649 |
|
2650 | if (encoding === 'utf8') {
|
2651 | return this.baseFs.readFileSync(this.fsMapToBase(p), encoding);
|
2652 | } else {
|
2653 | return this.baseFs.readFileSync(this.fsMapToBase(p), encoding);
|
2654 | }
|
2655 | }
|
2656 |
|
2657 | async readdirPromise(p, {
|
2658 | withFileTypes
|
2659 | } = {}) {
|
2660 | return this.baseFs.readdirPromise(this.mapToBase(p), {
|
2661 | withFileTypes: withFileTypes
|
2662 | });
|
2663 | }
|
2664 |
|
2665 | readdirSync(p, {
|
2666 | withFileTypes
|
2667 | } = {}) {
|
2668 | return this.baseFs.readdirSync(this.mapToBase(p), {
|
2669 | withFileTypes: withFileTypes
|
2670 | });
|
2671 | }
|
2672 |
|
2673 | async readlinkPromise(p) {
|
2674 | return this.mapFromBase((await this.baseFs.readlinkPromise(this.mapToBase(p))));
|
2675 | }
|
2676 |
|
2677 | readlinkSync(p) {
|
2678 | return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(p)));
|
2679 | }
|
2680 |
|
2681 | watch(p, a, b) {
|
2682 | return this.baseFs.watch(this.mapToBase(p),
|
2683 | a, b);
|
2684 | }
|
2685 |
|
2686 | fsMapToBase(p) {
|
2687 | if (typeof p === `number`) {
|
2688 | return p;
|
2689 | } else {
|
2690 | return this.mapToBase(p);
|
2691 | }
|
2692 | }
|
2693 |
|
2694 | }
|
2695 |
|
2696 | exports.ProxiedFS = ProxiedFS;
|
2697 |
|
2698 | }),
|
2699 |
|
2700 | (function(module, exports, __webpack_require__) {
|
2701 |
|
2702 | "use strict";
|
2703 |
|
2704 |
|
2705 | var __importDefault = this && this.__importDefault || function (mod) {
|
2706 | return mod && mod.__esModule ? mod : {
|
2707 | "default": mod
|
2708 | };
|
2709 | };
|
2710 |
|
2711 | Object.defineProperty(exports, "__esModule", {
|
2712 | value: true
|
2713 | });
|
2714 |
|
2715 | const os_1 = __importDefault(__webpack_require__(8));
|
2716 |
|
2717 | const util_1 = __webpack_require__(9);
|
2718 |
|
2719 | const NodeFS_1 = __webpack_require__(1);
|
2720 |
|
2721 | const path_1 = __webpack_require__(0);
|
2722 |
|
2723 | var FakeFS_1 = __webpack_require__(3);
|
2724 |
|
2725 | exports.normalizeLineEndings = FakeFS_1.normalizeLineEndings;
|
2726 |
|
2727 | var path_2 = __webpack_require__(0);
|
2728 |
|
2729 | exports.PortablePath = path_2.PortablePath;
|
2730 | exports.Filename = path_2.Filename;
|
2731 |
|
2732 | var path_3 = __webpack_require__(0);
|
2733 |
|
2734 | exports.npath = path_3.npath;
|
2735 | exports.ppath = path_3.ppath;
|
2736 | exports.toFilename = path_3.toFilename;
|
2737 |
|
2738 | var AliasFS_1 = __webpack_require__(14);
|
2739 |
|
2740 | exports.AliasFS = AliasFS_1.AliasFS;
|
2741 |
|
2742 | var FakeFS_2 = __webpack_require__(3);
|
2743 |
|
2744 | exports.FakeFS = FakeFS_2.FakeFS;
|
2745 |
|
2746 | var CwdFS_1 = __webpack_require__(15);
|
2747 |
|
2748 | exports.CwdFS = CwdFS_1.CwdFS;
|
2749 |
|
2750 | var JailFS_1 = __webpack_require__(16);
|
2751 |
|
2752 | exports.JailFS = JailFS_1.JailFS;
|
2753 |
|
2754 | var LazyFS_1 = __webpack_require__(17);
|
2755 |
|
2756 | exports.LazyFS = LazyFS_1.LazyFS;
|
2757 |
|
2758 | var NoFS_1 = __webpack_require__(18);
|
2759 |
|
2760 | exports.NoFS = NoFS_1.NoFS;
|
2761 |
|
2762 | var NodeFS_2 = __webpack_require__(1);
|
2763 |
|
2764 | exports.NodeFS = NodeFS_2.NodeFS;
|
2765 |
|
2766 | var PosixFS_1 = __webpack_require__(19);
|
2767 |
|
2768 | exports.PosixFS = PosixFS_1.PosixFS;
|
2769 |
|
2770 | var ProxiedFS_1 = __webpack_require__(4);
|
2771 |
|
2772 | exports.ProxiedFS = ProxiedFS_1.ProxiedFS;
|
2773 |
|
2774 | var VirtualFS_1 = __webpack_require__(20);
|
2775 |
|
2776 | exports.VirtualFS = VirtualFS_1.VirtualFS;
|
2777 |
|
2778 | var ZipFS_1 = __webpack_require__(10);
|
2779 |
|
2780 | exports.ZipFS = ZipFS_1.ZipFS;
|
2781 |
|
2782 | var ZipOpenFS_1 = __webpack_require__(23);
|
2783 |
|
2784 | exports.ZipOpenFS = ZipOpenFS_1.ZipOpenFS;
|
2785 |
|
2786 | function getTempName(prefix) {
|
2787 | const tmpdir = path_1.npath.toPortablePath(os_1.default.tmpdir());
|
2788 | const hash = Math.ceil(Math.random() * 0x100000000).toString(16).padStart(8, `0`);
|
2789 | return path_1.ppath.join(tmpdir, `${prefix}${hash}`);
|
2790 | }
|
2791 |
|
2792 | function patchFs(patchedFs, fakeFs) {
|
2793 | const SYNC_IMPLEMENTATIONS = new Set([`accessSync`, `appendFileSync`, `createReadStream`, `chmodSync`, `closeSync`, `copyFileSync`, `lstatSync`, `mkdirSync`, `openSync`, `readSync`, `readlinkSync`, `readFileSync`, `readdirSync`, `readlinkSync`, `realpathSync`, `renameSync`, `rmdirSync`, `statSync`, `symlinkSync`, `unlinkSync`, `utimesSync`, `watch`, `writeFileSync`, `writeSync`]);
|
2794 | const ASYNC_IMPLEMENTATIONS = new Set([`accessPromise`, `appendFilePromise`, `chmodPromise`, `closePromise`, `copyFilePromise`, `lstatPromise`, `mkdirPromise`, `openPromise`, `readdirPromise`, `realpathPromise`, `readFilePromise`, `readdirPromise`, `readlinkPromise`, `renamePromise`, `rmdirPromise`, `statPromise`, `symlinkPromise`, `unlinkPromise`, `utimesPromise`, `writeFilePromise`, `writeSync`]);
|
2795 |
|
2796 | const setupFn = (target, name, replacement) => {
|
2797 | const orig = target[name];
|
2798 | if (typeof orig === `undefined`) return;
|
2799 | target[name] = replacement;
|
2800 |
|
2801 | if (typeof orig[util_1.promisify.custom] !== `undefined`) {
|
2802 | replacement[util_1.promisify.custom] = orig[util_1.promisify.custom];
|
2803 | }
|
2804 | };
|
2805 |
|
2806 | setupFn(patchedFs, `existsSync`, p => {
|
2807 | try {
|
2808 | return fakeFs.existsSync(p);
|
2809 | } catch (error) {
|
2810 | return false;
|
2811 | }
|
2812 | });
|
2813 | setupFn(patchedFs, `exists`, (p, ...args) => {
|
2814 | const hasCallback = typeof args[args.length - 1] === `function`;
|
2815 | const callback = hasCallback ? args.pop() : () => {};
|
2816 | process.nextTick(() => {
|
2817 | fakeFs.existsPromise(p).then(exists => {
|
2818 | callback(exists);
|
2819 | }, () => {
|
2820 | callback(false);
|
2821 | });
|
2822 | });
|
2823 | });
|
2824 | setupFn(patchedFs, `read`, (p, buffer, ...args) => {
|
2825 | const hasCallback = typeof args[args.length - 1] === `function`;
|
2826 | const callback = hasCallback ? args.pop() : () => {};
|
2827 | process.nextTick(() => {
|
2828 | fakeFs.readPromise(p, buffer, ...args).then(bytesRead => {
|
2829 | callback(null, bytesRead, buffer);
|
2830 | }, error => {
|
2831 | callback(error);
|
2832 | });
|
2833 | });
|
2834 | });
|
2835 |
|
2836 | for (const fnName of ASYNC_IMPLEMENTATIONS) {
|
2837 | const fakeImpl = fakeFs[fnName].bind(fakeFs);
|
2838 | const origName = fnName.replace(/Promise$/, ``);
|
2839 | setupFn(patchedFs, origName, (...args) => {
|
2840 | const hasCallback = typeof args[args.length - 1] === `function`;
|
2841 | const callback = hasCallback ? args.pop() : () => {};
|
2842 | process.nextTick(() => {
|
2843 | fakeImpl(...args).then(result => {
|
2844 | callback(null, result);
|
2845 | }, error => {
|
2846 | callback(error);
|
2847 | });
|
2848 | });
|
2849 | });
|
2850 | }
|
2851 |
|
2852 | for (const fnName of SYNC_IMPLEMENTATIONS) {
|
2853 | const fakeImpl = fakeFs[fnName].bind(fakeFs);
|
2854 | const origName = fnName;
|
2855 | setupFn(patchedFs, origName, fakeImpl);
|
2856 | }
|
2857 |
|
2858 | patchedFs.realpathSync.native = patchedFs.realpathSync;
|
2859 | patchedFs.realpath.native = patchedFs.realpath;
|
2860 | }
|
2861 |
|
2862 | exports.patchFs = patchFs;
|
2863 |
|
2864 | function extendFs(realFs, fakeFs) {
|
2865 | const patchedFs = Object.create(realFs);
|
2866 | patchFs(patchedFs, fakeFs);
|
2867 | return patchedFs;
|
2868 | }
|
2869 |
|
2870 | exports.extendFs = extendFs;
|
2871 | const tmpdirs = new Set();
|
2872 | let cleanExitRegistered = false;
|
2873 |
|
2874 | function registerCleanExit() {
|
2875 | if (!cleanExitRegistered) cleanExitRegistered = true;else return;
|
2876 |
|
2877 | const cleanExit = () => {
|
2878 | process.off(`exit`, cleanExit);
|
2879 |
|
2880 | for (const p of tmpdirs) {
|
2881 | tmpdirs.delete(p);
|
2882 |
|
2883 | try {
|
2884 | exports.xfs.removeSync(p);
|
2885 | } catch (_a) {
|
2886 | }
|
2887 | }
|
2888 | };
|
2889 |
|
2890 | process.on(`exit`, cleanExit);
|
2891 | }
|
2892 |
|
2893 | exports.xfs = Object.assign(new NodeFS_1.NodeFS(), {
|
2894 | detachTemp(p) {
|
2895 | tmpdirs.delete(p);
|
2896 | },
|
2897 |
|
2898 | mktempSync(cb) {
|
2899 | registerCleanExit();
|
2900 |
|
2901 | while (true) {
|
2902 | const p = getTempName(`xfs-`);
|
2903 |
|
2904 | try {
|
2905 | this.mkdirSync(p);
|
2906 | } catch (error) {
|
2907 | if (error.code === `EEXIST`) {
|
2908 | continue;
|
2909 | } else {
|
2910 | throw error;
|
2911 | }
|
2912 | }
|
2913 |
|
2914 | const realP = this.realpathSync(p);
|
2915 | tmpdirs.add(realP);
|
2916 |
|
2917 | if (typeof cb !== `undefined`) {
|
2918 | try {
|
2919 | return cb(realP);
|
2920 | } finally {
|
2921 | if (tmpdirs.has(realP)) {
|
2922 | tmpdirs.delete(realP);
|
2923 |
|
2924 | try {
|
2925 | this.removeSync(realP);
|
2926 | } catch (_a) {
|
2927 | }
|
2928 | }
|
2929 | }
|
2930 | } else {
|
2931 | return p;
|
2932 | }
|
2933 | }
|
2934 | },
|
2935 |
|
2936 | async mktempPromise(cb) {
|
2937 | registerCleanExit();
|
2938 |
|
2939 | while (true) {
|
2940 | const p = getTempName(`xfs-`);
|
2941 |
|
2942 | try {
|
2943 | await this.mkdirPromise(p);
|
2944 | } catch (error) {
|
2945 | if (error.code === `EEXIST`) {
|
2946 | continue;
|
2947 | } else {
|
2948 | throw error;
|
2949 | }
|
2950 | }
|
2951 |
|
2952 | const realP = await this.realpathPromise(p);
|
2953 | tmpdirs.add(realP);
|
2954 |
|
2955 | if (typeof cb !== `undefined`) {
|
2956 | try {
|
2957 | return await cb(realP);
|
2958 | } finally {
|
2959 | if (tmpdirs.has(realP)) {
|
2960 | tmpdirs.delete(realP);
|
2961 |
|
2962 | try {
|
2963 | await this.removePromise(realP);
|
2964 | } catch (_a) {
|
2965 | }
|
2966 | }
|
2967 | }
|
2968 | } else {
|
2969 | return realP;
|
2970 | }
|
2971 | }
|
2972 | }
|
2973 |
|
2974 | });
|
2975 |
|
2976 | }),
|
2977 |
|
2978 | (function(module, exports) {
|
2979 |
|
2980 | module.exports = require("module");
|
2981 |
|
2982 | }),
|
2983 |
|
2984 | (function(module, exports) {
|
2985 |
|
2986 | module.exports = require("path");
|
2987 |
|
2988 | }),
|
2989 |
|
2990 | (function(module, exports) {
|
2991 |
|
2992 | module.exports = require("os");
|
2993 |
|
2994 | }),
|
2995 |
|
2996 | (function(module, exports) {
|
2997 |
|
2998 | module.exports = require("util");
|
2999 |
|
3000 | }),
|
3001 |
|
3002 | (function(module, exports, __webpack_require__) {
|
3003 |
|
3004 | "use strict";
|
3005 |
|
3006 |
|
3007 | var __importStar = this && this.__importStar || function (mod) {
|
3008 | if (mod && mod.__esModule) return mod;
|
3009 | var result = {};
|
3010 | if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
3011 | result["default"] = mod;
|
3012 | return result;
|
3013 | };
|
3014 |
|
3015 | Object.defineProperty(exports, "__esModule", {
|
3016 | value: true
|
3017 | });
|
3018 |
|
3019 | const fs_1 = __webpack_require__(2);
|
3020 |
|
3021 | const stream_1 = __webpack_require__(21);
|
3022 |
|
3023 | const util_1 = __webpack_require__(9);
|
3024 |
|
3025 | const FakeFS_1 = __webpack_require__(3);
|
3026 |
|
3027 | const NodeFS_1 = __webpack_require__(1);
|
3028 |
|
3029 | const errors = __importStar(__webpack_require__(22));
|
3030 |
|
3031 | const path_1 = __webpack_require__(0);
|
3032 |
|
3033 | const S_IFMT = 0o170000;
|
3034 | const S_IFDIR = 0o040000;
|
3035 | const S_IFREG = 0o100000;
|
3036 | const S_IFLNK = 0o120000;
|
3037 |
|
3038 | class DirEntry {
|
3039 | constructor() {
|
3040 | this.name = ``;
|
3041 | this.mode = 0;
|
3042 | }
|
3043 |
|
3044 | isBlockDevice() {
|
3045 | return false;
|
3046 | }
|
3047 |
|
3048 | isCharacterDevice() {
|
3049 | return false;
|
3050 | }
|
3051 |
|
3052 | isDirectory() {
|
3053 | return (this.mode & S_IFMT) === S_IFDIR;
|
3054 | }
|
3055 |
|
3056 | isFIFO() {
|
3057 | return false;
|
3058 | }
|
3059 |
|
3060 | isFile() {
|
3061 | return (this.mode & S_IFMT) === S_IFREG;
|
3062 | }
|
3063 |
|
3064 | isSocket() {
|
3065 | return false;
|
3066 | }
|
3067 |
|
3068 | isSymbolicLink() {
|
3069 | return (this.mode & S_IFMT) === S_IFLNK;
|
3070 | }
|
3071 |
|
3072 | }
|
3073 |
|
3074 | class StatEntry {
|
3075 | constructor() {
|
3076 | this.dev = 0;
|
3077 | this.ino = 0;
|
3078 | this.mode = 0;
|
3079 | this.nlink = 1;
|
3080 | this.rdev = 0;
|
3081 | this.blocks = 1;
|
3082 | }
|
3083 |
|
3084 | isBlockDevice() {
|
3085 | return false;
|
3086 | }
|
3087 |
|
3088 | isCharacterDevice() {
|
3089 | return false;
|
3090 | }
|
3091 |
|
3092 | isDirectory() {
|
3093 | return (this.mode & S_IFMT) === S_IFDIR;
|
3094 | }
|
3095 |
|
3096 | isFIFO() {
|
3097 | return false;
|
3098 | }
|
3099 |
|
3100 | isFile() {
|
3101 | return (this.mode & S_IFMT) === S_IFREG;
|
3102 | }
|
3103 |
|
3104 | isSocket() {
|
3105 | return false;
|
3106 | }
|
3107 |
|
3108 | isSymbolicLink() {
|
3109 | return (this.mode & S_IFMT) === S_IFLNK;
|
3110 | }
|
3111 |
|
3112 | }
|
3113 |
|
3114 | function makeDefaultStats() {
|
3115 | return Object.assign(new StatEntry(), {
|
3116 | uid: 0,
|
3117 | gid: 0,
|
3118 | size: 0,
|
3119 | blksize: 0,
|
3120 | atimeMs: 0,
|
3121 | mtimeMs: 0,
|
3122 | ctimeMs: 0,
|
3123 | birthtimeMs: 0,
|
3124 | atime: new Date(0),
|
3125 | mtime: new Date(0),
|
3126 | ctime: new Date(0),
|
3127 | birthtime: new Date(0),
|
3128 | mode: S_IFREG | 0o644
|
3129 | });
|
3130 | }
|
3131 |
|
3132 | function toUnixTimestamp(time) {
|
3133 | if (typeof time === 'string' && String(+time) === time) return +time;
|
3134 |
|
3135 | if (Number.isFinite(time)) {
|
3136 | if (time < 0) {
|
3137 | return Date.now() / 1000;
|
3138 | } else {
|
3139 | return time;
|
3140 | }
|
3141 | }
|
3142 |
|
3143 |
|
3144 | if (util_1.isDate(time)) return time.getTime() / 1000;
|
3145 | throw new Error(`Invalid time`);
|
3146 | }
|
3147 |
|
3148 | class ZipFS extends FakeFS_1.BasePortableFakeFS {
|
3149 | constructor(source, opts) {
|
3150 | super();
|
3151 | this.listings = new Map();
|
3152 | this.entries = new Map();
|
3153 | this.fds = new Map();
|
3154 | this.nextFd = 0;
|
3155 | this.ready = false;
|
3156 | this.readOnly = false;
|
3157 | this.libzip = opts.libzip;
|
3158 | const pathOptions = opts;
|
3159 |
|
3160 | if (typeof source === `string`) {
|
3161 | const {
|
3162 | baseFs = new NodeFS_1.NodeFS()
|
3163 | } = pathOptions;
|
3164 | this.baseFs = baseFs;
|
3165 | this.path = source;
|
3166 | } else {
|
3167 | this.path = null;
|
3168 | this.baseFs = null;
|
3169 | }
|
3170 |
|
3171 | if (opts.stats) {
|
3172 | this.stats = opts.stats;
|
3173 | } else {
|
3174 | if (typeof source === `string`) {
|
3175 | try {
|
3176 | this.stats = this.baseFs.statSync(source);
|
3177 | } catch (error) {
|
3178 | if (error.code === `ENOENT` && pathOptions.create) {
|
3179 | this.stats = makeDefaultStats();
|
3180 | } else {
|
3181 | throw error;
|
3182 | }
|
3183 | }
|
3184 | } else {
|
3185 | this.stats = makeDefaultStats();
|
3186 | }
|
3187 | }
|
3188 |
|
3189 | const errPtr = this.libzip.malloc(4);
|
3190 |
|
3191 | try {
|
3192 | let flags = 0;
|
3193 | if (typeof source === `string` && pathOptions.create) flags |= this.libzip.ZIP_CREATE | this.libzip.ZIP_TRUNCATE;
|
3194 |
|
3195 | if (opts.readOnly) {
|
3196 | flags |= this.libzip.ZIP_RDONLY;
|
3197 | this.readOnly = true;
|
3198 | }
|
3199 |
|
3200 | if (typeof source === `string`) {
|
3201 | this.zip = this.libzip.open(path_1.npath.fromPortablePath(source), flags, errPtr);
|
3202 | } else {
|
3203 | const lzSource = this.allocateUnattachedSource(source);
|
3204 |
|
3205 | try {
|
3206 | this.zip = this.libzip.openFromSource(lzSource, flags, errPtr);
|
3207 | } catch (error) {
|
3208 | this.libzip.source.free(lzSource);
|
3209 | throw error;
|
3210 | }
|
3211 | }
|
3212 |
|
3213 | if (this.zip === 0) {
|
3214 | const error = this.libzip.struct.errorS();
|
3215 | this.libzip.error.initWithCode(error, this.libzip.getValue(errPtr, `i32`));
|
3216 | throw new Error(this.libzip.error.strerror(error));
|
3217 | }
|
3218 | } finally {
|
3219 | this.libzip.free(errPtr);
|
3220 | }
|
3221 |
|
3222 | this.listings.set(path_1.PortablePath.root, new Set());
|
3223 | const entryCount = this.libzip.getNumEntries(this.zip, 0);
|
3224 |
|
3225 | for (let t = 0; t < entryCount; ++t) {
|
3226 | const raw = this.libzip.getName(this.zip, t, 0);
|
3227 | if (path_1.ppath.isAbsolute(raw)) continue;
|
3228 | const p = path_1.ppath.resolve(path_1.PortablePath.root, raw);
|
3229 | this.registerEntry(p, t);
|
3230 |
|
3231 |
|
3232 | if (raw.endsWith('/')) {
|
3233 | this.registerListing(p);
|
3234 | }
|
3235 | }
|
3236 |
|
3237 | this.ready = true;
|
3238 | }
|
3239 |
|
3240 | getExtractHint(hints) {
|
3241 | for (const fileName of this.entries.keys()) {
|
3242 | const ext = this.pathUtils.extname(fileName);
|
3243 |
|
3244 | if (hints.relevantExtensions.has(ext)) {
|
3245 | return true;
|
3246 | }
|
3247 | }
|
3248 |
|
3249 | return false;
|
3250 | }
|
3251 |
|
3252 | getAllFiles() {
|
3253 | return Array.from(this.entries.keys());
|
3254 | }
|
3255 |
|
3256 | getRealPath() {
|
3257 | if (!this.path) throw new Error(`ZipFS don't have real paths when loaded from a buffer`);
|
3258 | return this.path;
|
3259 | }
|
3260 |
|
3261 | saveAndClose() {
|
3262 | if (!this.path || !this.baseFs) throw new Error(`ZipFS cannot be saved and must be discarded when loaded from a buffer`);
|
3263 | if (!this.ready) throw errors.EBUSY(`archive closed, close`);
|
3264 | if (this.readOnly) return this.discardAndClose();
|
3265 | const previousMod = this.baseFs.existsSync(this.path) ? this.baseFs.statSync(this.path).mode & 0o777 : null;
|
3266 | const rc = this.libzip.close(this.zip);
|
3267 | if (rc === -1) throw new Error(this.libzip.error.strerror(this.libzip.getError(this.zip)));
|
3268 |
|
3269 |
|
3270 |
|
3271 |
|
3272 |
|
3273 | if (previousMod === null) this.baseFs.chmodSync(this.path, this.stats.mode);else if (previousMod !== (this.baseFs.statSync(this.path).mode & 0o777)) this.baseFs.chmodSync(this.path, previousMod);
|
3274 | this.ready = false;
|
3275 | }
|
3276 |
|
3277 | discardAndClose() {
|
3278 | if (!this.ready) throw errors.EBUSY(`archive closed, close`);
|
3279 | this.libzip.discard(this.zip);
|
3280 | this.ready = false;
|
3281 | }
|
3282 |
|
3283 | async openPromise(p, flags, mode) {
|
3284 | return this.openSync(p, flags, mode);
|
3285 | }
|
3286 |
|
3287 | openSync(p, flags, mode) {
|
3288 | const fd = this.nextFd++;
|
3289 | this.fds.set(fd, {
|
3290 | cursor: 0,
|
3291 | p
|
3292 | });
|
3293 | return fd;
|
3294 | }
|
3295 |
|
3296 | async readPromise(fd, buffer, offset, length, position) {
|
3297 | return this.readSync(fd, buffer, offset, length, position);
|
3298 | }
|
3299 |
|
3300 | readSync(fd, buffer, offset = 0, length = 0, position = -1) {
|
3301 | const entry = this.fds.get(fd);
|
3302 | if (typeof entry === `undefined`) throw errors.EBADF(`read`);
|
3303 | let realPosition;
|
3304 | if (position === -1 || position === null) realPosition = entry.cursor;else realPosition = position;
|
3305 | const source = this.readFileSync(entry.p);
|
3306 | source.copy(buffer, offset, realPosition, realPosition + length);
|
3307 | const bytesRead = Math.max(0, Math.min(source.length - realPosition, length));
|
3308 | if (position === -1) entry.cursor += bytesRead;
|
3309 | return bytesRead;
|
3310 | }
|
3311 |
|
3312 | async writePromise(fd, buffer, offset, length, position) {
|
3313 | if (typeof buffer === `string`) {
|
3314 | return this.writeSync(fd, buffer, position);
|
3315 | } else {
|
3316 | return this.writeSync(fd, buffer, offset, length, position);
|
3317 | }
|
3318 | }
|
3319 |
|
3320 | writeSync(fd, buffer, offset, length, position) {
|
3321 | const entry = this.fds.get(fd);
|
3322 | if (typeof entry === `undefined`) throw errors.EBADF(`read`);
|
3323 | throw new Error(`Unimplemented`);
|
3324 | }
|
3325 |
|
3326 | async closePromise(fd) {
|
3327 | return this.closeSync(fd);
|
3328 | }
|
3329 |
|
3330 | closeSync(fd) {
|
3331 | const entry = this.fds.get(fd);
|
3332 | if (typeof entry === `undefined`) throw errors.EBADF(`read`);
|
3333 | this.fds.delete(fd);
|
3334 | }
|
3335 |
|
3336 | createReadStream(p, {
|
3337 | encoding
|
3338 | } = {}) {
|
3339 | if (p === null) throw new Error(`Unimplemented`);
|
3340 | const stream = Object.assign(new stream_1.PassThrough(), {
|
3341 | bytesRead: 0,
|
3342 | path: p,
|
3343 | close: () => {
|
3344 | clearImmediate(immediate);
|
3345 | }
|
3346 | });
|
3347 | const immediate = setImmediate(() => {
|
3348 | try {
|
3349 | const data = this.readFileSync(p, encoding);
|
3350 | stream.bytesRead = data.length;
|
3351 | stream.write(data);
|
3352 | stream.end();
|
3353 | } catch (error) {
|
3354 | stream.emit(`error`, error);
|
3355 | stream.end();
|
3356 | }
|
3357 | });
|
3358 | return stream;
|
3359 | }
|
3360 |
|
3361 | createWriteStream(p, {
|
3362 | encoding
|
3363 | } = {}) {
|
3364 | if (this.readOnly) throw errors.EROFS(`open '${p}'`);
|
3365 | if (p === null) throw new Error(`Unimplemented`);
|
3366 | const stream = Object.assign(new stream_1.PassThrough(), {
|
3367 | bytesWritten: 0,
|
3368 | path: p,
|
3369 | close: () => {
|
3370 | stream.end();
|
3371 | }
|
3372 | });
|
3373 | const chunks = [];
|
3374 | stream.on(`data`, chunk => {
|
3375 | const chunkBuffer = Buffer.from(chunk);
|
3376 | stream.bytesWritten += chunkBuffer.length;
|
3377 | chunks.push(chunkBuffer);
|
3378 | });
|
3379 | stream.on(`end`, () => {
|
3380 | this.writeFileSync(p, Buffer.concat(chunks), encoding);
|
3381 | });
|
3382 | return stream;
|
3383 | }
|
3384 |
|
3385 | async realpathPromise(p) {
|
3386 | return this.realpathSync(p);
|
3387 | }
|
3388 |
|
3389 | realpathSync(p) {
|
3390 | const resolvedP = this.resolveFilename(`lstat '${p}'`, p);
|
3391 | if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) throw errors.ENOENT(`lstat '${p}'`);
|
3392 | return resolvedP;
|
3393 | }
|
3394 |
|
3395 | async existsPromise(p) {
|
3396 | return this.existsSync(p);
|
3397 | }
|
3398 |
|
3399 | existsSync(p) {
|
3400 | let resolvedP;
|
3401 |
|
3402 | try {
|
3403 | resolvedP = this.resolveFilename(`stat '${p}'`, p);
|
3404 | } catch (error) {
|
3405 | return false;
|
3406 | }
|
3407 |
|
3408 | return this.entries.has(resolvedP) || this.listings.has(resolvedP);
|
3409 | }
|
3410 |
|
3411 | async accessPromise(p, mode) {
|
3412 | return this.accessSync(p, mode);
|
3413 | }
|
3414 |
|
3415 | accessSync(p, mode = fs_1.constants.F_OK) {
|
3416 | const resolvedP = this.resolveFilename(`access '${p}'`, p);
|
3417 | if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) throw errors.ENOENT(`access '${p}'`);
|
3418 |
|
3419 | if (this.readOnly && mode & fs_1.constants.W_OK) {
|
3420 | throw errors.EROFS(`access '${p}'`);
|
3421 | }
|
3422 | }
|
3423 |
|
3424 | async statPromise(p) {
|
3425 | return this.statSync(p);
|
3426 | }
|
3427 |
|
3428 | statSync(p) {
|
3429 | const resolvedP = this.resolveFilename(`stat '${p}'`, p);
|
3430 | if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) throw errors.ENOENT(`stat '${p}'`);
|
3431 | if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) throw errors.ENOTDIR(`stat '${p}'`);
|
3432 | return this.statImpl(`stat '${p}'`, resolvedP);
|
3433 | }
|
3434 |
|
3435 | async lstatPromise(p) {
|
3436 | return this.lstatSync(p);
|
3437 | }
|
3438 |
|
3439 | lstatSync(p) {
|
3440 | const resolvedP = this.resolveFilename(`lstat '${p}'`, p, false);
|
3441 | if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) throw errors.ENOENT(`lstat '${p}'`);
|
3442 | if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) throw errors.ENOTDIR(`lstat '${p}'`);
|
3443 | return this.statImpl(`lstat '${p}'`, resolvedP);
|
3444 | }
|
3445 |
|
3446 | statImpl(reason, p) {
|
3447 | const entry = this.entries.get(p);
|
3448 |
|
3449 | if (typeof entry !== `undefined`) {
|
3450 | const stat = this.libzip.struct.statS();
|
3451 | const rc = this.libzip.statIndex(this.zip, entry, 0, 0, stat);
|
3452 | if (rc === -1) throw new Error(this.libzip.error.strerror(this.libzip.getError(this.zip)));
|
3453 | const uid = this.stats.uid;
|
3454 | const gid = this.stats.gid;
|
3455 | const size = this.libzip.struct.statSize(stat) >>> 0;
|
3456 | const blksize = 512;
|
3457 | const blocks = Math.ceil(size / blksize);
|
3458 | const mtimeMs = (this.libzip.struct.statMtime(stat) >>> 0) * 1000;
|
3459 | const atimeMs = mtimeMs;
|
3460 | const birthtimeMs = mtimeMs;
|
3461 | const ctimeMs = mtimeMs;
|
3462 | const atime = new Date(atimeMs);
|
3463 | const birthtime = new Date(birthtimeMs);
|
3464 | const ctime = new Date(ctimeMs);
|
3465 | const mtime = new Date(mtimeMs);
|
3466 | const type = this.listings.has(p) ? S_IFDIR : this.isSymbolicLink(entry) ? S_IFLNK : S_IFREG;
|
3467 | const defaultMode = type === S_IFDIR ? 0o755 : 0o644;
|
3468 | const mode = type | this.getUnixMode(entry, defaultMode) & 0o777;
|
3469 | return Object.assign(new StatEntry(), {
|
3470 | uid,
|
3471 | gid,
|
3472 | size,
|
3473 | blksize,
|
3474 | blocks,
|
3475 | atime,
|
3476 | birthtime,
|
3477 | ctime,
|
3478 | mtime,
|
3479 | atimeMs,
|
3480 | birthtimeMs,
|
3481 | ctimeMs,
|
3482 | mtimeMs,
|
3483 | mode
|
3484 | });
|
3485 | }
|
3486 |
|
3487 |
|
3488 | if (this.listings.has(p)) {
|
3489 | const uid = this.stats.uid;
|
3490 | const gid = this.stats.gid;
|
3491 | const size = 0;
|
3492 | const blksize = 512;
|
3493 | const blocks = 0;
|
3494 | const atimeMs = this.stats.mtimeMs;
|
3495 | const birthtimeMs = this.stats.mtimeMs;
|
3496 | const ctimeMs = this.stats.mtimeMs;
|
3497 | const mtimeMs = this.stats.mtimeMs;
|
3498 | const atime = new Date(atimeMs);
|
3499 | const birthtime = new Date(birthtimeMs);
|
3500 | const ctime = new Date(ctimeMs);
|
3501 | const mtime = new Date(mtimeMs);
|
3502 | const mode = S_IFDIR | 0o755;
|
3503 | return Object.assign(new StatEntry(), {
|
3504 | uid,
|
3505 | gid,
|
3506 | size,
|
3507 | blksize,
|
3508 | blocks,
|
3509 | atime,
|
3510 | birthtime,
|
3511 | ctime,
|
3512 | mtime,
|
3513 | atimeMs,
|
3514 | birthtimeMs,
|
3515 | ctimeMs,
|
3516 | mtimeMs,
|
3517 | mode
|
3518 | });
|
3519 | }
|
3520 |
|
3521 | throw new Error(`Unreachable`);
|
3522 | }
|
3523 |
|
3524 | getUnixMode(index, defaultMode) {
|
3525 | const rc = this.libzip.file.getExternalAttributes(this.zip, index, 0, 0, this.libzip.uint08S, this.libzip.uint32S);
|
3526 | if (rc === -1) throw new Error(this.libzip.error.strerror(this.libzip.getError(this.zip)));
|
3527 | const opsys = this.libzip.getValue(this.libzip.uint08S, `i8`) >>> 0;
|
3528 | if (opsys !== this.libzip.ZIP_OPSYS_UNIX) return defaultMode;
|
3529 | return this.libzip.getValue(this.libzip.uint32S, `i32`) >>> 16;
|
3530 | }
|
3531 |
|
3532 | registerListing(p) {
|
3533 | let listing = this.listings.get(p);
|
3534 | if (listing) return listing;
|
3535 | const parentListing = this.registerListing(path_1.ppath.dirname(p));
|
3536 | listing = new Set();
|
3537 | parentListing.add(path_1.ppath.basename(p));
|
3538 | this.listings.set(p, listing);
|
3539 | return listing;
|
3540 | }
|
3541 |
|
3542 | registerEntry(p, index) {
|
3543 | const parentListing = this.registerListing(path_1.ppath.dirname(p));
|
3544 | parentListing.add(path_1.ppath.basename(p));
|
3545 | this.entries.set(p, index);
|
3546 | }
|
3547 |
|
3548 | resolveFilename(reason, p, resolveLastComponent = true) {
|
3549 | if (!this.ready) throw errors.EBUSY(`archive closed, ${reason}`);
|
3550 | let resolvedP = path_1.ppath.resolve(path_1.PortablePath.root, p);
|
3551 | if (resolvedP === `/`) return path_1.PortablePath.root;
|
3552 |
|
3553 | while (true) {
|
3554 | const parentP = this.resolveFilename(reason, path_1.ppath.dirname(resolvedP), true);
|
3555 | const isDir = this.listings.has(parentP);
|
3556 | const doesExist = this.entries.has(parentP);
|
3557 | if (!isDir && !doesExist) throw errors.ENOENT(reason);
|
3558 | if (!isDir) throw errors.ENOTDIR(reason);
|
3559 | resolvedP = path_1.ppath.resolve(parentP, path_1.ppath.basename(resolvedP));
|
3560 | if (!resolveLastComponent) break;
|
3561 | const index = this.libzip.name.locate(this.zip, resolvedP.slice(1));
|
3562 | if (index === -1) break;
|
3563 |
|
3564 | if (this.isSymbolicLink(index)) {
|
3565 | const target = this.getFileSource(index).toString();
|
3566 | resolvedP = path_1.ppath.resolve(path_1.ppath.dirname(resolvedP), target);
|
3567 | } else {
|
3568 | break;
|
3569 | }
|
3570 | }
|
3571 |
|
3572 | return resolvedP;
|
3573 | }
|
3574 |
|
3575 | allocateBuffer(content) {
|
3576 | if (!Buffer.isBuffer(content)) content = Buffer.from(content);
|
3577 | const buffer = this.libzip.malloc(content.byteLength);
|
3578 | if (!buffer) throw new Error(`Couldn't allocate enough memory`);
|
3579 |
|
3580 | const heap = new Uint8Array(this.libzip.HEAPU8.buffer, buffer, content.byteLength);
|
3581 | heap.set(content);
|
3582 | return {
|
3583 | buffer,
|
3584 | byteLength: content.byteLength
|
3585 | };
|
3586 | }
|
3587 |
|
3588 | allocateUnattachedSource(content) {
|
3589 | const error = this.libzip.struct.errorS();
|
3590 | const {
|
3591 | buffer,
|
3592 | byteLength
|
3593 | } = this.allocateBuffer(content);
|
3594 | const source = this.libzip.source.fromUnattachedBuffer(buffer, byteLength, 0, true, error);
|
3595 |
|
3596 | if (source === 0) {
|
3597 | this.libzip.free(error);
|
3598 | throw new Error(this.libzip.error.strerror(error));
|
3599 | }
|
3600 |
|
3601 | return source;
|
3602 | }
|
3603 |
|
3604 | allocateSource(content) {
|
3605 | const {
|
3606 | buffer,
|
3607 | byteLength
|
3608 | } = this.allocateBuffer(content);
|
3609 | const source = this.libzip.source.fromBuffer(this.zip, buffer, byteLength, 0, true);
|
3610 |
|
3611 | if (source === 0) {
|
3612 | this.libzip.free(buffer);
|
3613 | throw new Error(this.libzip.error.strerror(this.libzip.getError(this.zip)));
|
3614 | }
|
3615 |
|
3616 | return source;
|
3617 | }
|
3618 |
|
3619 | setFileSource(p, content) {
|
3620 | const target = path_1.ppath.relative(path_1.PortablePath.root, p);
|
3621 | const lzSource = this.allocateSource(content);
|
3622 |
|
3623 | try {
|
3624 | return this.libzip.file.add(this.zip, target, lzSource, this.libzip.ZIP_FL_OVERWRITE);
|
3625 | } catch (error) {
|
3626 | this.libzip.source.free(lzSource);
|
3627 | throw error;
|
3628 | }
|
3629 | }
|
3630 |
|
3631 | isSymbolicLink(index) {
|
3632 | const attrs = this.libzip.file.getExternalAttributes(this.zip, index, 0, 0, this.libzip.uint08S, this.libzip.uint32S);
|
3633 | if (attrs === -1) throw new Error(this.libzip.error.strerror(this.libzip.getError(this.zip)));
|
3634 | const opsys = this.libzip.getValue(this.libzip.uint08S, `i8`) >>> 0;
|
3635 | if (opsys !== this.libzip.ZIP_OPSYS_UNIX) return false;
|
3636 | const attributes = this.libzip.getValue(this.libzip.uint32S, `i32`) >>> 16;
|
3637 | return (attributes & S_IFMT) === S_IFLNK;
|
3638 | }
|
3639 |
|
3640 | getFileSource(index) {
|
3641 | const stat = this.libzip.struct.statS();
|
3642 | const rc = this.libzip.statIndex(this.zip, index, 0, 0, stat);
|
3643 | if (rc === -1) throw new Error(this.libzip.error.strerror(this.libzip.getError(this.zip)));
|
3644 | const size = this.libzip.struct.statSize(stat);
|
3645 | const buffer = this.libzip.malloc(size);
|
3646 |
|
3647 | try {
|
3648 | const file = this.libzip.fopenIndex(this.zip, index, 0, 0);
|
3649 | if (file === 0) throw new Error(this.libzip.error.strerror(this.libzip.getError(this.zip)));
|
3650 |
|
3651 | try {
|
3652 | const rc = this.libzip.fread(file, buffer, size, 0);
|
3653 | if (rc === -1) throw new Error(this.libzip.error.strerror(this.libzip.file.getError(file)));else if (rc < size) throw new Error(`Incomplete read`);else if (rc > size) throw new Error(`Overread`);
|
3654 | const memory = this.libzip.HEAPU8.subarray(buffer, buffer + size);
|
3655 | const data = Buffer.from(memory);
|
3656 | return data;
|
3657 | } finally {
|
3658 | this.libzip.fclose(file);
|
3659 | }
|
3660 | } finally {
|
3661 | this.libzip.free(buffer);
|
3662 | }
|
3663 | }
|
3664 |
|
3665 | async chmodPromise(p, mask) {
|
3666 | return this.chmodSync(p, mask);
|
3667 | }
|
3668 |
|
3669 | chmodSync(p, mask) {
|
3670 | if (this.readOnly) throw errors.EROFS(`chmod '${p}'`);
|
3671 |
|
3672 | mask &= 0o755;
|
3673 | const resolvedP = this.resolveFilename(`chmod '${p}'`, p, false);
|
3674 | const entry = this.entries.get(resolvedP);
|
3675 | if (typeof entry === `undefined`) throw new Error(`Assertion failed: The entry should have been registered (${resolvedP})`);
|
3676 | const oldMod = this.getUnixMode(entry, S_IFREG | 0o000);
|
3677 | const newMod = oldMod & ~0o777 | mask;
|
3678 | const rc = this.libzip.file.setExternalAttributes(this.zip, entry, 0, 0, this.libzip.ZIP_OPSYS_UNIX, newMod << 16);
|
3679 |
|
3680 | if (rc === -1) {
|
3681 | throw new Error(this.libzip.error.strerror(this.libzip.getError(this.zip)));
|
3682 | }
|
3683 | }
|
3684 |
|
3685 | async renamePromise(oldP, newP) {
|
3686 | return this.renameSync(oldP, newP);
|
3687 | }
|
3688 |
|
3689 | renameSync(oldP, newP) {
|
3690 | throw new Error(`Unimplemented`);
|
3691 | }
|
3692 |
|
3693 | async copyFilePromise(sourceP, destP, flags) {
|
3694 | return this.copyFileSync(sourceP, destP, flags);
|
3695 | }
|
3696 |
|
3697 | copyFileSync(sourceP, destP, flags = 0) {
|
3698 | if (this.readOnly) throw errors.EROFS(`copyfile '${sourceP} -> '${destP}'`);
|
3699 | if ((flags & fs_1.constants.COPYFILE_FICLONE_FORCE) !== 0) throw errors.ENOSYS(`unsupported clone operation`, `copyfile '${sourceP}' -> ${destP}'`);
|
3700 | const resolvedSourceP = this.resolveFilename(`copyfile '${sourceP} -> ${destP}'`, sourceP);
|
3701 | const indexSource = this.entries.get(resolvedSourceP);
|
3702 | if (typeof indexSource === `undefined`) throw errors.EINVAL(`copyfile '${sourceP}' -> '${destP}'`);
|
3703 | const resolvedDestP = this.resolveFilename(`copyfile '${sourceP}' -> ${destP}'`, destP);
|
3704 | const indexDest = this.entries.get(resolvedDestP);
|
3705 | if ((flags & (fs_1.constants.COPYFILE_EXCL | fs_1.constants.COPYFILE_FICLONE_FORCE)) !== 0 && typeof indexDest !== `undefined`) throw errors.EEXIST(`copyfile '${sourceP}' -> '${destP}'`);
|
3706 | const source = this.getFileSource(indexSource);
|
3707 | const newIndex = this.setFileSource(resolvedDestP, source);
|
3708 |
|
3709 | if (newIndex !== indexDest) {
|
3710 | this.registerEntry(resolvedDestP, newIndex);
|
3711 | }
|
3712 | }
|
3713 |
|
3714 | async appendFilePromise(p, content, opts) {
|
3715 | return this.appendFileSync(p, content, opts);
|
3716 | }
|
3717 |
|
3718 | appendFileSync(p, content, opts = {}) {
|
3719 | if (this.readOnly) throw errors.EROFS(`open '${p}'`);
|
3720 | if (typeof opts === `undefined`) opts = {
|
3721 | flag: `a`
|
3722 | };else if (typeof opts === `string`) opts = {
|
3723 | flag: `a`,
|
3724 | encoding: opts
|
3725 | };else if (typeof opts.flag === `undefined`) opts = Object.assign({
|
3726 | flag: `a`
|
3727 | }, opts);
|
3728 | return this.writeFileSync(p, content, opts);
|
3729 | }
|
3730 |
|
3731 | async writeFilePromise(p, content, opts) {
|
3732 | return this.writeFileSync(p, content, opts);
|
3733 | }
|
3734 |
|
3735 | writeFileSync(p, content, opts) {
|
3736 | if (typeof p !== `string`) throw errors.EBADF(`read`);
|
3737 | if (this.readOnly) throw errors.EROFS(`open '${p}'`);
|
3738 | const resolvedP = this.resolveFilename(`open '${p}'`, p);
|
3739 | if (this.listings.has(resolvedP)) throw errors.EISDIR(`open '${p}'`);
|
3740 | const index = this.entries.get(resolvedP);
|
3741 | if (index !== undefined && typeof opts === `object` && opts.flag && opts.flag.includes(`a`)) content = Buffer.concat([this.getFileSource(index), Buffer.from(content)]);
|
3742 | let encoding = null;
|
3743 | if (typeof opts === `string`) encoding = opts;else if (typeof opts === `object` && opts.encoding) encoding = opts.encoding;
|
3744 | if (encoding !== null) content = content.toString(encoding);
|
3745 | const newIndex = this.setFileSource(resolvedP, content);
|
3746 |
|
3747 | if (newIndex !== index) {
|
3748 | this.registerEntry(resolvedP, newIndex);
|
3749 | }
|
3750 | }
|
3751 |
|
3752 | async unlinkPromise(p) {
|
3753 | return this.unlinkSync(p);
|
3754 | }
|
3755 |
|
3756 | unlinkSync(p) {
|
3757 | throw new Error(`Unimplemented`);
|
3758 | }
|
3759 |
|
3760 | async utimesPromise(p, atime, mtime) {
|
3761 | return this.utimesSync(p, atime, mtime);
|
3762 | }
|
3763 |
|
3764 | utimesSync(p, atime, mtime) {
|
3765 | if (this.readOnly) throw errors.EROFS(`utimes '${p}'`);
|
3766 | const resolvedP = this.resolveFilename(`utimes '${p}'`, p);
|
3767 | this.utimesImpl(resolvedP, mtime);
|
3768 | }
|
3769 |
|
3770 | async lutimesPromise(p, atime, mtime) {
|
3771 | return this.lutimesSync(p, atime, mtime);
|
3772 | }
|
3773 |
|
3774 | lutimesSync(p, atime, mtime) {
|
3775 | if (this.readOnly) throw errors.EROFS(`lutimes '${p}'`);
|
3776 | const resolvedP = this.resolveFilename(`utimes '${p}'`, p, false);
|
3777 | this.utimesImpl(resolvedP, mtime);
|
3778 | }
|
3779 |
|
3780 | utimesImpl(resolvedP, mtime) {
|
3781 | if (this.listings.has(resolvedP)) if (!this.entries.has(resolvedP)) this.hydrateDirectory(resolvedP);
|
3782 | const entry = this.entries.get(resolvedP);
|
3783 | if (entry === undefined) throw new Error(`Unreachable`);
|
3784 | const rc = this.libzip.file.setMtime(this.zip, entry, 0, toUnixTimestamp(mtime), 0);
|
3785 |
|
3786 | if (rc === -1) {
|
3787 | throw new Error(this.libzip.error.strerror(this.libzip.getError(this.zip)));
|
3788 | }
|
3789 | }
|
3790 |
|
3791 | async mkdirPromise(p, opts) {
|
3792 | return this.mkdirSync(p, opts);
|
3793 | }
|
3794 |
|
3795 | mkdirSync(p, {
|
3796 | mode = 0o755,
|
3797 | recursive = false
|
3798 | } = {}) {
|
3799 | if (recursive) return this.mkdirpSync(p, {
|
3800 | chmod: mode
|
3801 | });
|
3802 | if (this.readOnly) throw errors.EROFS(`mkdir '${p}'`);
|
3803 | const resolvedP = this.resolveFilename(`mkdir '${p}'`, p);
|
3804 | if (this.entries.has(resolvedP) || this.listings.has(resolvedP)) throw errors.EEXIST(`mkdir '${p}'`);
|
3805 | this.hydrateDirectory(resolvedP);
|
3806 | this.chmodSync(resolvedP, mode);
|
3807 | }
|
3808 |
|
3809 | async rmdirPromise(p) {
|
3810 | return this.rmdirSync(p);
|
3811 | }
|
3812 |
|
3813 | rmdirSync(p) {
|
3814 | throw new Error(`Unimplemented`);
|
3815 | }
|
3816 |
|
3817 | hydrateDirectory(resolvedP) {
|
3818 | const index = this.libzip.dir.add(this.zip, path_1.ppath.relative(path_1.PortablePath.root, resolvedP));
|
3819 | if (index === -1) throw new Error(this.libzip.error.strerror(this.libzip.getError(this.zip)));
|
3820 | this.registerListing(resolvedP);
|
3821 | this.registerEntry(resolvedP, index);
|
3822 | return index;
|
3823 | }
|
3824 |
|
3825 | async symlinkPromise(target, p) {
|
3826 | return this.symlinkSync(target, p);
|
3827 | }
|
3828 |
|
3829 | symlinkSync(target, p) {
|
3830 | if (this.readOnly) throw errors.EROFS(`symlink '${target}' -> '${p}'`);
|
3831 | const resolvedP = this.resolveFilename(`symlink '${target}' -> '${p}'`, p);
|
3832 | if (this.listings.has(resolvedP)) throw errors.EISDIR(`symlink '${target}' -> '${p}'`);
|
3833 | if (this.entries.has(resolvedP)) throw errors.EEXIST(`symlink '${target}' -> '${p}'`);
|
3834 | const index = this.setFileSource(resolvedP, target);
|
3835 | this.registerEntry(resolvedP, index);
|
3836 | const rc = this.libzip.file.setExternalAttributes(this.zip, index, 0, 0, this.libzip.ZIP_OPSYS_UNIX, (0o120000 | 0o777) << 16);
|
3837 |
|
3838 | if (rc === -1) {
|
3839 | throw new Error(this.libzip.error.strerror(this.libzip.getError(this.zip)));
|
3840 | }
|
3841 | }
|
3842 |
|
3843 | async readFilePromise(p, encoding) {
|
3844 |
|
3845 | switch (encoding) {
|
3846 | case `utf8`:
|
3847 | return this.readFileSync(p, encoding);
|
3848 |
|
3849 | default:
|
3850 | return this.readFileSync(p, encoding);
|
3851 | }
|
3852 | }
|
3853 |
|
3854 | readFileSync(p, encoding) {
|
3855 | if (typeof p !== `string`) throw errors.EBADF(`read`);
|
3856 |
|
3857 | if (typeof encoding === `object`)
|
3858 | encoding = encoding ? encoding.encoding : undefined;
|
3859 | const resolvedP = this.resolveFilename(`open '${p}'`, p);
|
3860 | if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) throw errors.ENOENT(`open '${p}'`);
|
3861 |
|
3862 | if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) throw errors.ENOTDIR(`open '${p}'`);
|
3863 | if (this.listings.has(resolvedP)) throw errors.EISDIR(`read`);
|
3864 | const entry = this.entries.get(resolvedP);
|
3865 | if (entry === undefined) throw new Error(`Unreachable`);
|
3866 | const data = this.getFileSource(entry);
|
3867 | return encoding ? data.toString(encoding) : data;
|
3868 | }
|
3869 |
|
3870 | async readdirPromise(p, {
|
3871 | withFileTypes
|
3872 | } = {}) {
|
3873 | return this.readdirSync(p, {
|
3874 | withFileTypes: withFileTypes
|
3875 | });
|
3876 | }
|
3877 |
|
3878 | readdirSync(p, {
|
3879 | withFileTypes
|
3880 | } = {}) {
|
3881 | const resolvedP = this.resolveFilename(`scandir '${p}'`, p);
|
3882 | if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) throw errors.ENOENT(`scandir '${p}'`);
|
3883 | const directoryListing = this.listings.get(resolvedP);
|
3884 | if (!directoryListing) throw errors.ENOTDIR(`scandir '${p}'`);
|
3885 | const entries = [...directoryListing];
|
3886 | if (!withFileTypes) return entries;
|
3887 | return entries.map(name => {
|
3888 | return Object.assign(this.statImpl(`lstat`, path_1.ppath.join(p, name)), {
|
3889 | name
|
3890 | });
|
3891 | });
|
3892 | }
|
3893 |
|
3894 | async readlinkPromise(p) {
|
3895 | return this.readlinkSync(p);
|
3896 | }
|
3897 |
|
3898 | readlinkSync(p) {
|
3899 | const resolvedP = this.resolveFilename(`readlink '${p}'`, p, false);
|
3900 | if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) throw errors.ENOENT(`readlink '${p}'`);
|
3901 |
|
3902 | if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) throw errors.ENOTDIR(`open '${p}'`);
|
3903 | if (this.listings.has(resolvedP)) throw errors.EINVAL(`readlink '${p}'`);
|
3904 | const entry = this.entries.get(resolvedP);
|
3905 | if (entry === undefined) throw new Error(`Unreachable`);
|
3906 | const rc = this.libzip.file.getExternalAttributes(this.zip, entry, 0, 0, this.libzip.uint08S, this.libzip.uint32S);
|
3907 | if (rc === -1) throw new Error(this.libzip.error.strerror(this.libzip.getError(this.zip)));
|
3908 | const opsys = this.libzip.getValue(this.libzip.uint08S, `i8`) >>> 0;
|
3909 | if (opsys !== this.libzip.ZIP_OPSYS_UNIX) throw errors.EINVAL(`readlink '${p}'`);
|
3910 | const attributes = this.libzip.getValue(this.libzip.uint32S, `i32`) >>> 16;
|
3911 | if ((attributes & 0o170000) !== 0o120000) throw errors.EINVAL(`readlink '${p}'`);
|
3912 | return this.getFileSource(entry).toString();
|
3913 | }
|
3914 |
|
3915 | watch(p, a, b) {
|
3916 | let persistent;
|
3917 |
|
3918 | switch (typeof a) {
|
3919 | case `function`:
|
3920 | case `string`:
|
3921 | case `undefined`:
|
3922 | {
|
3923 | persistent = true;
|
3924 | }
|
3925 | break;
|
3926 |
|
3927 | default:
|
3928 | {
|
3929 |
|
3930 | ({
|
3931 | persistent = true
|
3932 | } = a);
|
3933 | }
|
3934 | break;
|
3935 | }
|
3936 |
|
3937 | if (!persistent) return {
|
3938 | on: () => {},
|
3939 | close: () => {}
|
3940 | };
|
3941 | const interval = setInterval(() => {}, 24 * 60 * 60 * 1000);
|
3942 | return {
|
3943 | on: () => {},
|
3944 | close: () => {
|
3945 | clearInterval(interval);
|
3946 | }
|
3947 | };
|
3948 | }
|
3949 |
|
3950 | }
|
3951 |
|
3952 | exports.ZipFS = ZipFS;
|
3953 | ;
|
3954 |
|
3955 | }),
|
3956 |
|
3957 | (function(module, exports, __webpack_require__) {
|
3958 |
|
3959 | "use strict";
|
3960 |
|
3961 |
|
3962 | Object.defineProperty(exports, "__esModule", {
|
3963 | value: true
|
3964 | });
|
3965 | var ErrorCode;
|
3966 |
|
3967 | (function (ErrorCode) {
|
3968 | ErrorCode["API_ERROR"] = "API_ERROR";
|
3969 | ErrorCode["BLACKLISTED"] = "BLACKLISTED";
|
3970 | ErrorCode["BUILTIN_NODE_RESOLUTION_FAILED"] = "BUILTIN_NODE_RESOLUTION_FAILED";
|
3971 | ErrorCode["MISSING_DEPENDENCY"] = "MISSING_DEPENDENCY";
|
3972 | ErrorCode["MISSING_PEER_DEPENDENCY"] = "MISSING_PEER_DEPENDENCY";
|
3973 | ErrorCode["QUALIFIED_PATH_RESOLUTION_FAILED"] = "QUALIFIED_PATH_RESOLUTION_FAILED";
|
3974 | ErrorCode["INTERNAL"] = "INTERNAL";
|
3975 | ErrorCode["UNDECLARED_DEPENDENCY"] = "UNDECLARED_DEPENDENCY";
|
3976 | ErrorCode["UNSUPPORTED"] = "UNSUPPORTED";
|
3977 | })(ErrorCode = exports.ErrorCode || (exports.ErrorCode = {}));
|
3978 |
|
3979 | ;
|
3980 |
|
3981 |
|
3982 | const MODULE_NOT_FOUND_ERRORS = new Set([ErrorCode.BLACKLISTED, ErrorCode.BUILTIN_NODE_RESOLUTION_FAILED, ErrorCode.MISSING_DEPENDENCY, ErrorCode.MISSING_PEER_DEPENDENCY, ErrorCode.QUALIFIED_PATH_RESOLUTION_FAILED, ErrorCode.UNDECLARED_DEPENDENCY]);
|
3983 |
|
3984 |
|
3985 |
|
3986 |
|
3987 |
|
3988 | function makeError(pnpCode, message, data = {}) {
|
3989 | const code = MODULE_NOT_FOUND_ERRORS.has(pnpCode) ? `MODULE_NOT_FOUND` : pnpCode;
|
3990 | const propertySpec = {
|
3991 | configurable: true,
|
3992 | writable: true,
|
3993 | enumerable: false
|
3994 | };
|
3995 | return Object.defineProperties(new Error(message), {
|
3996 | code: Object.assign(Object.assign({}, propertySpec), {
|
3997 | value: code
|
3998 | }),
|
3999 | pnpCode: Object.assign(Object.assign({}, propertySpec), {
|
4000 | value: pnpCode
|
4001 | }),
|
4002 | data: Object.assign(Object.assign({}, propertySpec), {
|
4003 | value: data
|
4004 | })
|
4005 | });
|
4006 | }
|
4007 |
|
4008 | exports.makeError = makeError;
|
4009 |
|
4010 |
|
4011 |
|
4012 |
|
4013 |
|
4014 | function getIssuerModule(parent) {
|
4015 | let issuer = parent;
|
4016 |
|
4017 | while (issuer && (issuer.id === '[eval]' || issuer.id === '<repl>' || !issuer.filename)) issuer = issuer.parent;
|
4018 |
|
4019 | return issuer || null;
|
4020 | }
|
4021 |
|
4022 | exports.getIssuerModule = getIssuerModule;
|
4023 |
|
4024 | }),
|
4025 |
|
4026 | (function(module, exports, __webpack_require__) {
|
4027 |
|
4028 | "use strict";
|
4029 |
|
4030 |
|
4031 | var __rest = this && this.__rest || function (s, e) {
|
4032 | var t = {};
|
4033 |
|
4034 | for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
|
4035 |
|
4036 | if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
4037 | if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
|
4038 | }
|
4039 | return t;
|
4040 | };
|
4041 |
|
4042 | var __importDefault = this && this.__importDefault || function (mod) {
|
4043 | return mod && mod.__esModule ? mod : {
|
4044 | "default": mod
|
4045 | };
|
4046 | };
|
4047 |
|
4048 | Object.defineProperty(exports, "__esModule", {
|
4049 | value: true
|
4050 | });
|
4051 |
|
4052 | const fslib_1 = __webpack_require__(5);
|
4053 |
|
4054 | const libzip_1 = __webpack_require__(24);
|
4055 |
|
4056 | const fs_1 = __importDefault(__webpack_require__(2));
|
4057 |
|
4058 | const module_1 = __importDefault(__webpack_require__(6));
|
4059 |
|
4060 | const string_decoder_1 = __importDefault(__webpack_require__(28));
|
4061 |
|
4062 | const applyPatch_1 = __webpack_require__(29);
|
4063 |
|
4064 | const hydrateRuntimeState_1 = __webpack_require__(31);
|
4065 |
|
4066 | const makeApi_1 = __webpack_require__(32);
|
4067 |
|
4068 | const makeManager_1 = __webpack_require__(33);
|
4069 |
|
4070 |
|
4071 |
|
4072 |
|
4073 | const localFs = Object.assign({}, fs_1.default);
|
4074 | const nodeFs = new fslib_1.NodeFS(localFs);
|
4075 | const defaultRuntimeState = $$SETUP_STATE(hydrateRuntimeState_1.hydrateRuntimeState);
|
4076 | const defaultPnpapiResolution = __filename;
|
4077 |
|
4078 |
|
4079 |
|
4080 |
|
4081 | const defaultFsLayer = new fslib_1.VirtualFS({
|
4082 | baseFs: new fslib_1.ZipOpenFS({
|
4083 | baseFs: nodeFs,
|
4084 | libzip: libzip_1.getLibzipSync(),
|
4085 | maxOpenFiles: 80,
|
4086 | readOnlyArchives: true
|
4087 | })
|
4088 | });
|
4089 | let manager;
|
4090 | const defaultApi = Object.assign(makeApi_1.makeApi(defaultRuntimeState, {
|
4091 | fakeFs: defaultFsLayer,
|
4092 | pnpapiResolution: defaultPnpapiResolution
|
4093 | }), {
|
4094 | |
4095 |
|
4096 |
|
4097 |
|
4098 |
|
4099 | makeApi: _a => {
|
4100 | var {
|
4101 | basePath = undefined,
|
4102 | fakeFs = defaultFsLayer,
|
4103 | pnpapiResolution = defaultPnpapiResolution
|
4104 | } = _a,
|
4105 | rest = __rest(_a, ["basePath", "fakeFs", "pnpapiResolution"]);
|
4106 |
|
4107 | const apiRuntimeState = typeof basePath !== `undefined` ? $$SETUP_STATE(hydrateRuntimeState_1.hydrateRuntimeState, basePath) : defaultRuntimeState;
|
4108 | return makeApi_1.makeApi(apiRuntimeState, Object.assign({
|
4109 | fakeFs,
|
4110 | pnpapiResolution
|
4111 | }, rest));
|
4112 | },
|
4113 |
|
4114 | |
4115 |
|
4116 |
|
4117 |
|
4118 | setup: api => {
|
4119 | applyPatch_1.applyPatch(api || defaultApi, {
|
4120 | fakeFs: defaultFsLayer,
|
4121 | manager
|
4122 | });
|
4123 | }
|
4124 | });
|
4125 | manager = makeManager_1.makeManager(defaultApi, {
|
4126 | fakeFs: defaultFsLayer
|
4127 | });
|
4128 |
|
4129 | exports.default = defaultApi;
|
4130 |
|
4131 | if (__non_webpack_module__.parent && __non_webpack_module__.parent.id === 'internal/preload') {
|
4132 | defaultApi.setup();
|
4133 |
|
4134 | if (__non_webpack_module__.filename) {
|
4135 |
|
4136 |
|
4137 |
|
4138 | delete module_1.default._cache[__non_webpack_module__.filename];
|
4139 | }
|
4140 | }
|
4141 |
|
4142 |
|
4143 | if (process.mainModule === __non_webpack_module__) {
|
4144 | const reportError = (code, message, data) => {
|
4145 | process.stdout.write(`${JSON.stringify([{
|
4146 | code,
|
4147 | message,
|
4148 | data
|
4149 | }, null])}\n`);
|
4150 | };
|
4151 |
|
4152 | const reportSuccess = resolution => {
|
4153 | process.stdout.write(`${JSON.stringify([null, resolution])}\n`);
|
4154 | };
|
4155 |
|
4156 | const processResolution = (request, issuer) => {
|
4157 | try {
|
4158 | reportSuccess(defaultApi.resolveRequest(request, issuer));
|
4159 | } catch (error) {
|
4160 | reportError(error.code, error.message, error.data);
|
4161 | }
|
4162 | };
|
4163 |
|
4164 | const processRequest = data => {
|
4165 | try {
|
4166 | const [request, issuer] = JSON.parse(data);
|
4167 | processResolution(request, issuer);
|
4168 | } catch (error) {
|
4169 | reportError(`INVALID_JSON`, error.message, error.data);
|
4170 | }
|
4171 | };
|
4172 |
|
4173 | if (process.argv.length > 2) {
|
4174 | if (process.argv.length !== 4) {
|
4175 | process.stderr.write(`Usage: ${process.argv[0]} ${process.argv[1]} <request> <issuer>\n`);
|
4176 | process.exitCode = 64;
|
4177 |
|
4178 | } else {
|
4179 | processResolution(process.argv[2], process.argv[3]);
|
4180 | }
|
4181 | } else {
|
4182 | let buffer = '';
|
4183 | const decoder = new string_decoder_1.default.StringDecoder();
|
4184 | process.stdin.on('data', chunk => {
|
4185 | buffer += decoder.write(chunk);
|
4186 |
|
4187 | do {
|
4188 | const index = buffer.indexOf('\n');
|
4189 | if (index === -1) break;
|
4190 | const line = buffer.slice(0, index);
|
4191 | buffer = buffer.slice(index + 1);
|
4192 | processRequest(line);
|
4193 | } while (true);
|
4194 | });
|
4195 | }
|
4196 | }
|
4197 |
|
4198 | }),
|
4199 |
|
4200 | (function(module, exports, __webpack_require__) {
|
4201 |
|
4202 | "use strict";
|
4203 |
|
4204 |
|
4205 | var __importDefault = this && this.__importDefault || function (mod) {
|
4206 | return mod && mod.__esModule ? mod : {
|
4207 | "default": mod
|
4208 | };
|
4209 | };
|
4210 |
|
4211 | Object.defineProperty(exports, "__esModule", {
|
4212 | value: true
|
4213 | });
|
4214 |
|
4215 | const fs_1 = __importDefault(__webpack_require__(2));
|
4216 |
|
4217 | const path_1 = __webpack_require__(0);
|
4218 |
|
4219 | async function copyPromise(destinationFs, destination, sourceFs, source, opts) {
|
4220 | const normalizedDestination = destinationFs.pathUtils.normalize(destination);
|
4221 | const normalizedSource = sourceFs.pathUtils.normalize(source);
|
4222 | const operations = [];
|
4223 | const utimes = [];
|
4224 | await destinationFs.mkdirpPromise(destination);
|
4225 | await copyImpl(operations, utimes, destinationFs, normalizedDestination, sourceFs, normalizedSource, opts);
|
4226 |
|
4227 | for (const operation of operations) await operation();
|
4228 |
|
4229 | for (const [p, atime, mtime] of utimes) {
|
4230 | await destinationFs.utimesPromise(p, atime, mtime);
|
4231 | }
|
4232 | }
|
4233 |
|
4234 | exports.copyPromise = copyPromise;
|
4235 |
|
4236 | async function copyImpl(operations, utimes, destinationFs, destination, sourceFs, source, opts) {
|
4237 | const destinationStat = await maybeLStat(destinationFs, destination);
|
4238 | const sourceStat = await sourceFs.lstatPromise(source);
|
4239 | utimes.push([destination, sourceStat.atime, sourceStat.mtime]);
|
4240 |
|
4241 | switch (true) {
|
4242 | case sourceStat.isDirectory():
|
4243 | {
|
4244 | await copyFolder(operations, utimes, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts);
|
4245 | }
|
4246 | break;
|
4247 |
|
4248 | case sourceStat.isFile():
|
4249 | {
|
4250 | await copyFile(operations, utimes, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts);
|
4251 | }
|
4252 | break;
|
4253 |
|
4254 | case sourceStat.isSymbolicLink():
|
4255 | {
|
4256 | await copySymlink(operations, utimes, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts);
|
4257 | }
|
4258 | break;
|
4259 |
|
4260 | default:
|
4261 | {
|
4262 | throw new Error(`Unsupported file type (${sourceStat.mode})`);
|
4263 | }
|
4264 | break;
|
4265 | }
|
4266 |
|
4267 | operations.push(async () => destinationFs.chmodPromise(destination, sourceStat.mode & 0o777));
|
4268 | }
|
4269 |
|
4270 | async function maybeLStat(baseFs, p) {
|
4271 | try {
|
4272 | return await baseFs.lstatPromise(p);
|
4273 | } catch (e) {
|
4274 | return null;
|
4275 | }
|
4276 | }
|
4277 |
|
4278 | async function copyFolder(operations, utimes, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) {
|
4279 | if (destinationStat !== null && !destinationStat.isDirectory()) {
|
4280 | if (opts.overwrite) {
|
4281 | operations.push(async () => destinationFs.removePromise(destination));
|
4282 | destinationStat = null;
|
4283 | } else {
|
4284 | return;
|
4285 | }
|
4286 | }
|
4287 |
|
4288 | if (destinationStat === null) operations.push(async () => destinationFs.mkdirPromise(destination, {
|
4289 | mode: sourceStat.mode
|
4290 | }));
|
4291 | const entries = await sourceFs.readdirPromise(source);
|
4292 | await Promise.all(entries.map(async entry => {
|
4293 | await copyImpl(operations, utimes, destinationFs, destinationFs.pathUtils.join(destination, entry), sourceFs, sourceFs.pathUtils.join(source, entry), opts);
|
4294 | }));
|
4295 | }
|
4296 |
|
4297 | async function copyFile(operations, utimes, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) {
|
4298 | if (destinationStat !== null) {
|
4299 | if (opts.overwrite) {
|
4300 | operations.push(async () => destinationFs.removePromise(destination));
|
4301 | destinationStat = null;
|
4302 | } else {
|
4303 | return;
|
4304 | }
|
4305 | }
|
4306 |
|
4307 | if (destinationFs === sourceFs) {
|
4308 | operations.push(async () => destinationFs.copyFilePromise(source, destination, fs_1.default.constants.COPYFILE_FICLONE));
|
4309 | } else {
|
4310 | operations.push(async () => destinationFs.writeFilePromise(destination, (await sourceFs.readFilePromise(source))));
|
4311 | }
|
4312 | }
|
4313 |
|
4314 | async function copySymlink(operations, utimes, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) {
|
4315 | if (destinationStat !== null) {
|
4316 | if (opts.overwrite) {
|
4317 | operations.push(async () => destinationFs.removePromise(destination));
|
4318 | destinationStat = null;
|
4319 | } else {
|
4320 | return;
|
4321 | }
|
4322 | }
|
4323 |
|
4324 | const target = await sourceFs.readlinkPromise(source);
|
4325 | operations.push(async () => destinationFs.symlinkPromise(path_1.convertPath(destinationFs.pathUtils, target), destination));
|
4326 | }
|
4327 |
|
4328 | }),
|
4329 |
|
4330 | (function(module, exports, __webpack_require__) {
|
4331 |
|
4332 | "use strict";
|
4333 |
|
4334 |
|
4335 | Object.defineProperty(exports, "__esModule", {
|
4336 | value: true
|
4337 | });
|
4338 |
|
4339 | const ProxiedFS_1 = __webpack_require__(4);
|
4340 |
|
4341 | class AliasFS extends ProxiedFS_1.ProxiedFS {
|
4342 | constructor(target, {
|
4343 | baseFs,
|
4344 | pathUtils
|
4345 | }) {
|
4346 | super(pathUtils);
|
4347 | this.target = target;
|
4348 | this.baseFs = baseFs;
|
4349 | }
|
4350 |
|
4351 | getRealPath() {
|
4352 | return this.target;
|
4353 | }
|
4354 |
|
4355 | getBaseFs() {
|
4356 | return this.baseFs;
|
4357 | }
|
4358 |
|
4359 | mapFromBase(p) {
|
4360 | return p;
|
4361 | }
|
4362 |
|
4363 | mapToBase(p) {
|
4364 | return p;
|
4365 | }
|
4366 |
|
4367 | }
|
4368 |
|
4369 | exports.AliasFS = AliasFS;
|
4370 |
|
4371 | }),
|
4372 |
|
4373 | (function(module, exports, __webpack_require__) {
|
4374 |
|
4375 | "use strict";
|
4376 |
|
4377 |
|
4378 | Object.defineProperty(exports, "__esModule", {
|
4379 | value: true
|
4380 | });
|
4381 |
|
4382 | const NodeFS_1 = __webpack_require__(1);
|
4383 |
|
4384 | const ProxiedFS_1 = __webpack_require__(4);
|
4385 |
|
4386 | const path_1 = __webpack_require__(0);
|
4387 |
|
4388 | class CwdFS extends ProxiedFS_1.ProxiedFS {
|
4389 | constructor(target, {
|
4390 | baseFs = new NodeFS_1.NodeFS()
|
4391 | } = {}) {
|
4392 | super(path_1.ppath);
|
4393 | this.target = target;
|
4394 | this.baseFs = baseFs;
|
4395 | }
|
4396 |
|
4397 | getRealPath() {
|
4398 | return this.pathUtils.resolve(this.baseFs.getRealPath(), this.target);
|
4399 | }
|
4400 |
|
4401 | mapFromBase(path) {
|
4402 | return this.pathUtils.relative(this.getRealPath(), path);
|
4403 | }
|
4404 |
|
4405 | mapToBase(path) {
|
4406 | return this.pathUtils.resolve(this.getRealPath(), path);
|
4407 | }
|
4408 |
|
4409 | }
|
4410 |
|
4411 | exports.CwdFS = CwdFS;
|
4412 |
|
4413 | }),
|
4414 |
|
4415 | (function(module, exports, __webpack_require__) {
|
4416 |
|
4417 | "use strict";
|
4418 |
|
4419 |
|
4420 | Object.defineProperty(exports, "__esModule", {
|
4421 | value: true
|
4422 | });
|
4423 |
|
4424 | const NodeFS_1 = __webpack_require__(1);
|
4425 |
|
4426 | const ProxiedFS_1 = __webpack_require__(4);
|
4427 |
|
4428 | const path_1 = __webpack_require__(0);
|
4429 |
|
4430 | const JAIL_ROOT = path_1.PortablePath.root;
|
4431 |
|
4432 | class JailFS extends ProxiedFS_1.ProxiedFS {
|
4433 | constructor(target, {
|
4434 | baseFs = new NodeFS_1.NodeFS()
|
4435 | } = {}) {
|
4436 | super(path_1.ppath);
|
4437 | this.target = this.pathUtils.resolve(path_1.PortablePath.root, target);
|
4438 | this.baseFs = baseFs;
|
4439 | }
|
4440 |
|
4441 | getRealPath() {
|
4442 | return this.pathUtils.resolve(this.baseFs.getRealPath(), this.pathUtils.relative(path_1.PortablePath.root, this.target));
|
4443 | }
|
4444 |
|
4445 | getTarget() {
|
4446 | return this.target;
|
4447 | }
|
4448 |
|
4449 | getBaseFs() {
|
4450 | return this.baseFs;
|
4451 | }
|
4452 |
|
4453 | mapToBase(p) {
|
4454 | const normalized = this.pathUtils.normalize(p);
|
4455 | if (this.pathUtils.isAbsolute(p)) return this.pathUtils.resolve(this.target, this.pathUtils.relative(JAIL_ROOT, p));
|
4456 | if (normalized.match(/^\.\.\//)) throw new Error(`Resolving this path (${p}) would escape the jail`);
|
4457 | return this.pathUtils.resolve(this.target, p);
|
4458 | }
|
4459 |
|
4460 | mapFromBase(p) {
|
4461 | return this.pathUtils.resolve(JAIL_ROOT, this.pathUtils.relative(this.target, p));
|
4462 | }
|
4463 |
|
4464 | }
|
4465 |
|
4466 | exports.JailFS = JailFS;
|
4467 |
|
4468 | }),
|
4469 |
|
4470 | (function(module, exports, __webpack_require__) {
|
4471 |
|
4472 | "use strict";
|
4473 |
|
4474 |
|
4475 | Object.defineProperty(exports, "__esModule", {
|
4476 | value: true
|
4477 | });
|
4478 |
|
4479 | const ProxiedFS_1 = __webpack_require__(4);
|
4480 |
|
4481 | class LazyFS extends ProxiedFS_1.ProxiedFS {
|
4482 | constructor(factory, pathUtils) {
|
4483 | super(pathUtils);
|
4484 | this.instance = null;
|
4485 | this.factory = factory;
|
4486 | }
|
4487 |
|
4488 | get baseFs() {
|
4489 | if (!this.instance) this.instance = this.factory();
|
4490 | return this.instance;
|
4491 | }
|
4492 |
|
4493 | set baseFs(value) {
|
4494 | this.instance = value;
|
4495 | }
|
4496 |
|
4497 | mapFromBase(p) {
|
4498 | return p;
|
4499 | }
|
4500 |
|
4501 | mapToBase(p) {
|
4502 | return p;
|
4503 | }
|
4504 |
|
4505 | }
|
4506 |
|
4507 | exports.LazyFS = LazyFS;
|
4508 |
|
4509 | }),
|
4510 |
|
4511 | (function(module, exports, __webpack_require__) {
|
4512 |
|
4513 | "use strict";
|
4514 |
|
4515 |
|
4516 | Object.defineProperty(exports, "__esModule", {
|
4517 | value: true
|
4518 | });
|
4519 |
|
4520 | const FakeFS_1 = __webpack_require__(3);
|
4521 |
|
4522 | const path_1 = __webpack_require__(0);
|
4523 |
|
4524 | const makeError = () => Object.assign(new Error(`ENOSYS: unsupported filesystem access`), {
|
4525 | code: `ENOSYS`
|
4526 | });
|
4527 |
|
4528 | class NoFS extends FakeFS_1.FakeFS {
|
4529 | constructor() {
|
4530 | super(path_1.ppath);
|
4531 | }
|
4532 |
|
4533 | getExtractHint() {
|
4534 | throw makeError();
|
4535 | }
|
4536 |
|
4537 | getRealPath() {
|
4538 | throw makeError();
|
4539 | }
|
4540 |
|
4541 | resolve() {
|
4542 | throw makeError();
|
4543 | }
|
4544 |
|
4545 | async openPromise() {
|
4546 | throw makeError();
|
4547 | }
|
4548 |
|
4549 | openSync() {
|
4550 | throw makeError();
|
4551 | }
|
4552 |
|
4553 | async readPromise() {
|
4554 | throw makeError();
|
4555 | }
|
4556 |
|
4557 | readSync() {
|
4558 | throw makeError();
|
4559 | }
|
4560 |
|
4561 | async writePromise() {
|
4562 | throw makeError();
|
4563 | }
|
4564 |
|
4565 | writeSync() {
|
4566 | throw makeError();
|
4567 | }
|
4568 |
|
4569 | async closePromise() {
|
4570 | throw makeError();
|
4571 | }
|
4572 |
|
4573 | closeSync() {
|
4574 | throw makeError();
|
4575 | }
|
4576 |
|
4577 | createWriteStream() {
|
4578 | throw makeError();
|
4579 | }
|
4580 |
|
4581 | createReadStream() {
|
4582 | throw makeError();
|
4583 | }
|
4584 |
|
4585 | async realpathPromise() {
|
4586 | throw makeError();
|
4587 | }
|
4588 |
|
4589 | realpathSync() {
|
4590 | throw makeError();
|
4591 | }
|
4592 |
|
4593 | async readdirPromise() {
|
4594 | throw makeError();
|
4595 | }
|
4596 |
|
4597 | readdirSync() {
|
4598 | throw makeError();
|
4599 | }
|
4600 |
|
4601 | async existsPromise(p) {
|
4602 | throw makeError();
|
4603 | }
|
4604 |
|
4605 | existsSync(p) {
|
4606 | throw makeError();
|
4607 | }
|
4608 |
|
4609 | async accessPromise() {
|
4610 | throw makeError();
|
4611 | }
|
4612 |
|
4613 | accessSync() {
|
4614 | throw makeError();
|
4615 | }
|
4616 |
|
4617 | async statPromise() {
|
4618 | throw makeError();
|
4619 | }
|
4620 |
|
4621 | statSync() {
|
4622 | throw makeError();
|
4623 | }
|
4624 |
|
4625 | async lstatPromise(p) {
|
4626 | throw makeError();
|
4627 | }
|
4628 |
|
4629 | lstatSync(p) {
|
4630 | throw makeError();
|
4631 | }
|
4632 |
|
4633 | async chmodPromise() {
|
4634 | throw makeError();
|
4635 | }
|
4636 |
|
4637 | chmodSync() {
|
4638 | throw makeError();
|
4639 | }
|
4640 |
|
4641 | async mkdirPromise() {
|
4642 | throw makeError();
|
4643 | }
|
4644 |
|
4645 | mkdirSync() {
|
4646 | throw makeError();
|
4647 | }
|
4648 |
|
4649 | async rmdirPromise() {
|
4650 | throw makeError();
|
4651 | }
|
4652 |
|
4653 | rmdirSync() {
|
4654 | throw makeError();
|
4655 | }
|
4656 |
|
4657 | async symlinkPromise() {
|
4658 | throw makeError();
|
4659 | }
|
4660 |
|
4661 | symlinkSync() {
|
4662 | throw makeError();
|
4663 | }
|
4664 |
|
4665 | async renamePromise() {
|
4666 | throw makeError();
|
4667 | }
|
4668 |
|
4669 | renameSync() {
|
4670 | throw makeError();
|
4671 | }
|
4672 |
|
4673 | async copyFilePromise() {
|
4674 | throw makeError();
|
4675 | }
|
4676 |
|
4677 | copyFileSync() {
|
4678 | throw makeError();
|
4679 | }
|
4680 |
|
4681 | async appendFilePromise() {
|
4682 | throw makeError();
|
4683 | }
|
4684 |
|
4685 | appendFileSync() {
|
4686 | throw makeError();
|
4687 | }
|
4688 |
|
4689 | async writeFilePromise() {
|
4690 | throw makeError();
|
4691 | }
|
4692 |
|
4693 | writeFileSync() {
|
4694 | throw makeError();
|
4695 | }
|
4696 |
|
4697 | async unlinkPromise() {
|
4698 | throw makeError();
|
4699 | }
|
4700 |
|
4701 | unlinkSync() {
|
4702 | throw makeError();
|
4703 | }
|
4704 |
|
4705 | async utimesPromise() {
|
4706 | throw makeError();
|
4707 | }
|
4708 |
|
4709 | utimesSync() {
|
4710 | throw makeError();
|
4711 | }
|
4712 |
|
4713 | async readFilePromise() {
|
4714 | throw makeError();
|
4715 | }
|
4716 |
|
4717 | readFileSync() {
|
4718 | throw makeError();
|
4719 | }
|
4720 |
|
4721 | async readlinkPromise() {
|
4722 | throw makeError();
|
4723 | }
|
4724 |
|
4725 | readlinkSync() {
|
4726 | throw makeError();
|
4727 | }
|
4728 |
|
4729 | watch() {
|
4730 | throw makeError();
|
4731 | }
|
4732 |
|
4733 | }
|
4734 |
|
4735 | exports.NoFS = NoFS;
|
4736 | NoFS.instance = new NoFS();
|
4737 |
|
4738 | }),
|
4739 |
|
4740 | (function(module, exports, __webpack_require__) {
|
4741 |
|
4742 | "use strict";
|
4743 |
|
4744 |
|
4745 | Object.defineProperty(exports, "__esModule", {
|
4746 | value: true
|
4747 | });
|
4748 |
|
4749 | const ProxiedFS_1 = __webpack_require__(4);
|
4750 |
|
4751 | const path_1 = __webpack_require__(0);
|
4752 |
|
4753 | class PosixFS extends ProxiedFS_1.ProxiedFS {
|
4754 | constructor(baseFs) {
|
4755 | super(path_1.npath);
|
4756 | this.baseFs = baseFs;
|
4757 | }
|
4758 |
|
4759 | mapFromBase(path) {
|
4760 | return path_1.npath.fromPortablePath(path);
|
4761 | }
|
4762 |
|
4763 | mapToBase(path) {
|
4764 | return path_1.npath.toPortablePath(path);
|
4765 | }
|
4766 |
|
4767 | }
|
4768 |
|
4769 | exports.PosixFS = PosixFS;
|
4770 |
|
4771 | }),
|
4772 |
|
4773 | (function(module, exports, __webpack_require__) {
|
4774 |
|
4775 | "use strict";
|
4776 |
|
4777 |
|
4778 | Object.defineProperty(exports, "__esModule", {
|
4779 | value: true
|
4780 | });
|
4781 |
|
4782 | const NodeFS_1 = __webpack_require__(1);
|
4783 |
|
4784 | const ProxiedFS_1 = __webpack_require__(4);
|
4785 |
|
4786 | const path_1 = __webpack_require__(0);
|
4787 |
|
4788 | const NUMBER_REGEXP = /^[0-9]+$/;
|
4789 |
|
4790 |
|
4791 |
|
4792 |
|
4793 |
|
4794 |
|
4795 | const VIRTUAL_REGEXP = /^(\/(?:[^\/]+\/)*?\$\$virtual)((?:\/([^\/]+)(?:\/([^\/]+))?)?((?:\/.*)?))$/;
|
4796 |
|
4797 | class VirtualFS extends ProxiedFS_1.ProxiedFS {
|
4798 | constructor({
|
4799 | baseFs = new NodeFS_1.NodeFS()
|
4800 | } = {}) {
|
4801 | super(path_1.ppath);
|
4802 | this.baseFs = baseFs;
|
4803 | }
|
4804 |
|
4805 | static makeVirtualPath(base, component, to) {
|
4806 | if (path_1.ppath.basename(base) !== `$$virtual`) throw new Error(`Assertion failed: Virtual folders must be named "$$virtual"`);
|
4807 |
|
4808 | const target = path_1.ppath.relative(path_1.ppath.dirname(base), to);
|
4809 | const segments = target.split(`/`);
|
4810 |
|
4811 | let depth = 0;
|
4812 |
|
4813 | while (depth < segments.length && segments[depth] === `..`) depth += 1;
|
4814 |
|
4815 | const finalSegments = segments.slice(depth);
|
4816 | const fullVirtualPath = path_1.ppath.join(base, component, String(depth), ...finalSegments);
|
4817 | return fullVirtualPath;
|
4818 | }
|
4819 |
|
4820 | static resolveVirtual(p) {
|
4821 | const match = p.match(VIRTUAL_REGEXP);
|
4822 | if (!match) return p;
|
4823 | const target = path_1.ppath.dirname(match[1]);
|
4824 | if (!match[3] || !match[4]) return target;
|
4825 | const isnum = NUMBER_REGEXP.test(match[4]);
|
4826 | if (!isnum) return p;
|
4827 | const depth = Number(match[4]);
|
4828 | const backstep = `../`.repeat(depth);
|
4829 | const subpath = match[5] || `.`;
|
4830 | return VirtualFS.resolveVirtual(path_1.ppath.join(target, backstep, subpath));
|
4831 | }
|
4832 |
|
4833 | getExtractHint(hints) {
|
4834 | return this.baseFs.getExtractHint(hints);
|
4835 | }
|
4836 |
|
4837 | getRealPath() {
|
4838 | return this.baseFs.getRealPath();
|
4839 | }
|
4840 |
|
4841 | realpathSync(p) {
|
4842 | const match = p.match(VIRTUAL_REGEXP);
|
4843 | if (!match) return this.baseFs.realpathSync(p);
|
4844 | if (!match[5]) return p;
|
4845 | const realpath = this.baseFs.realpathSync(this.mapToBase(p));
|
4846 | return VirtualFS.makeVirtualPath(match[1], match[3], realpath);
|
4847 | }
|
4848 |
|
4849 | async realpathPromise(p) {
|
4850 | const match = p.match(VIRTUAL_REGEXP);
|
4851 | if (!match) return await this.baseFs.realpathPromise(p);
|
4852 | if (!match[5]) return p;
|
4853 | const realpath = await this.baseFs.realpathPromise(this.mapToBase(p));
|
4854 | return VirtualFS.makeVirtualPath(match[1], match[3], realpath);
|
4855 | }
|
4856 |
|
4857 | mapToBase(p) {
|
4858 | return VirtualFS.resolveVirtual(p);
|
4859 | }
|
4860 |
|
4861 | mapFromBase(p) {
|
4862 | return p;
|
4863 | }
|
4864 |
|
4865 | }
|
4866 |
|
4867 | exports.VirtualFS = VirtualFS;
|
4868 |
|
4869 | }),
|
4870 |
|
4871 | (function(module, exports) {
|
4872 |
|
4873 | module.exports = require("stream");
|
4874 |
|
4875 | }),
|
4876 |
|
4877 | (function(module, exports, __webpack_require__) {
|
4878 |
|
4879 | "use strict";
|
4880 |
|
4881 |
|
4882 | Object.defineProperty(exports, "__esModule", {
|
4883 | value: true
|
4884 | });
|
4885 |
|
4886 | function makeError(code, message) {
|
4887 | return Object.assign(new Error(`${code}: ${message}`), {
|
4888 | code
|
4889 | });
|
4890 | }
|
4891 |
|
4892 | function EBUSY(message) {
|
4893 | return makeError(`EBUSY`, message);
|
4894 | }
|
4895 |
|
4896 | exports.EBUSY = EBUSY;
|
4897 |
|
4898 | function ENOSYS(message, reason) {
|
4899 | return makeError(`ENOSYS`, `${message}, ${reason}`);
|
4900 | }
|
4901 |
|
4902 | exports.ENOSYS = ENOSYS;
|
4903 |
|
4904 | function EINVAL(reason) {
|
4905 | return makeError(`EINVAL`, `invalid argument, ${reason}`);
|
4906 | }
|
4907 |
|
4908 | exports.EINVAL = EINVAL;
|
4909 |
|
4910 | function EBADF(reason) {
|
4911 | return makeError(`EBADF`, `bad file descriptor, ${reason}`);
|
4912 | }
|
4913 |
|
4914 | exports.EBADF = EBADF;
|
4915 |
|
4916 | function ENOENT(reason) {
|
4917 | return makeError(`ENOENT`, `no such file or directory, ${reason}`);
|
4918 | }
|
4919 |
|
4920 | exports.ENOENT = ENOENT;
|
4921 |
|
4922 | function ENOTDIR(reason) {
|
4923 | return makeError(`ENOTDIR`, `not a directory, ${reason}`);
|
4924 | }
|
4925 |
|
4926 | exports.ENOTDIR = ENOTDIR;
|
4927 |
|
4928 | function EISDIR(reason) {
|
4929 | return makeError(`EISDIR`, `illegal operation on a directory, ${reason}`);
|
4930 | }
|
4931 |
|
4932 | exports.EISDIR = EISDIR;
|
4933 |
|
4934 | function EEXIST(reason) {
|
4935 | return makeError(`EEXIST`, `file already exists, ${reason}`);
|
4936 | }
|
4937 |
|
4938 | exports.EEXIST = EEXIST;
|
4939 |
|
4940 | function EROFS(reason) {
|
4941 | return makeError(`EROFS`, `read-only filesystem, ${reason}`);
|
4942 | }
|
4943 |
|
4944 | exports.EROFS = EROFS;
|
4945 |
|
4946 | }),
|
4947 |
|
4948 | (function(module, exports, __webpack_require__) {
|
4949 |
|
4950 | "use strict";
|
4951 |
|
4952 |
|
4953 | Object.defineProperty(exports, "__esModule", {
|
4954 | value: true
|
4955 | });
|
4956 |
|
4957 | const fs_1 = __webpack_require__(2);
|
4958 |
|
4959 | const FakeFS_1 = __webpack_require__(3);
|
4960 |
|
4961 | const NodeFS_1 = __webpack_require__(1);
|
4962 |
|
4963 | const ZipFS_1 = __webpack_require__(10);
|
4964 |
|
4965 | const path_1 = __webpack_require__(0);
|
4966 |
|
4967 | const ZIP_FD = 0x80000000;
|
4968 |
|
4969 | class ZipOpenFS extends FakeFS_1.BasePortableFakeFS {
|
4970 | constructor({
|
4971 | libzip,
|
4972 | baseFs = new NodeFS_1.NodeFS(),
|
4973 | filter = null,
|
4974 | maxOpenFiles = Infinity,
|
4975 | readOnlyArchives = false,
|
4976 | useCache = true
|
4977 | }) {
|
4978 | super();
|
4979 | this.fdMap = new Map();
|
4980 | this.nextFd = 3;
|
4981 | this.isZip = new Set();
|
4982 | this.notZip = new Set();
|
4983 | this.libzip = libzip;
|
4984 | this.baseFs = baseFs;
|
4985 | this.zipInstances = useCache ? new Map() : null;
|
4986 | this.filter = filter;
|
4987 | this.maxOpenFiles = maxOpenFiles;
|
4988 | this.readOnlyArchives = readOnlyArchives;
|
4989 | this.isZip = new Set();
|
4990 | this.notZip = new Set();
|
4991 | }
|
4992 |
|
4993 | static async openPromise(fn, opts) {
|
4994 | const zipOpenFs = new ZipOpenFS(opts);
|
4995 |
|
4996 | try {
|
4997 | return await fn(zipOpenFs);
|
4998 | } finally {
|
4999 | zipOpenFs.saveAndClose();
|
5000 | }
|
5001 | }
|
5002 |
|
5003 | getExtractHint(hints) {
|
5004 | return this.baseFs.getExtractHint(hints);
|
5005 | }
|
5006 |
|
5007 | getRealPath() {
|
5008 | return this.baseFs.getRealPath();
|
5009 | }
|
5010 |
|
5011 | saveAndClose() {
|
5012 | if (this.zipInstances) {
|
5013 | for (const [path, zipFs] of this.zipInstances.entries()) {
|
5014 | zipFs.saveAndClose();
|
5015 | this.zipInstances.delete(path);
|
5016 | }
|
5017 | }
|
5018 | }
|
5019 |
|
5020 | discardAndClose() {
|
5021 | if (this.zipInstances) {
|
5022 | for (const [path, zipFs] of this.zipInstances.entries()) {
|
5023 | zipFs.discardAndClose();
|
5024 | this.zipInstances.delete(path);
|
5025 | }
|
5026 | }
|
5027 | }
|
5028 |
|
5029 | remapFd(zipFs, fd) {
|
5030 | const remappedFd = this.nextFd++ | ZIP_FD;
|
5031 | this.fdMap.set(remappedFd, [zipFs, fd]);
|
5032 | return remappedFd;
|
5033 | }
|
5034 |
|
5035 | async openPromise(p, flags, mode) {
|
5036 | return await this.makeCallPromise(p, async () => {
|
5037 | return await this.baseFs.openPromise(p, flags, mode);
|
5038 | }, async (zipFs, {
|
5039 | subPath
|
5040 | }) => {
|
5041 | return this.remapFd(zipFs, (await zipFs.openPromise(subPath, flags, mode)));
|
5042 | });
|
5043 | }
|
5044 |
|
5045 | openSync(p, flags, mode) {
|
5046 | return this.makeCallSync(p, () => {
|
5047 | return this.baseFs.openSync(p, flags, mode);
|
5048 | }, (zipFs, {
|
5049 | subPath
|
5050 | }) => {
|
5051 | return this.remapFd(zipFs, zipFs.openSync(subPath, flags, mode));
|
5052 | });
|
5053 | }
|
5054 |
|
5055 | async readPromise(fd, buffer, offset, length, position) {
|
5056 | if ((fd & ZIP_FD) === 0) return await this.baseFs.readPromise(fd, buffer, offset, length, position);
|
5057 | const entry = this.fdMap.get(fd);
|
5058 | if (typeof entry === `undefined`) throw Object.assign(new Error(`EBADF: bad file descriptor, read`), {
|
5059 | code: `EBADF`
|
5060 | });
|
5061 | const [zipFs, realFd] = entry;
|
5062 | return await zipFs.readPromise(realFd, buffer, offset, length, position);
|
5063 | }
|
5064 |
|
5065 | readSync(fd, buffer, offset, length, position) {
|
5066 | if ((fd & ZIP_FD) === 0) return this.baseFs.readSync(fd, buffer, offset, length, position);
|
5067 | const entry = this.fdMap.get(fd);
|
5068 | if (typeof entry === `undefined`) throw Object.assign(new Error(`EBADF: bad file descriptor, read`), {
|
5069 | code: `EBADF`
|
5070 | });
|
5071 | const [zipFs, realFd] = entry;
|
5072 | return zipFs.readSync(realFd, buffer, offset, length, position);
|
5073 | }
|
5074 |
|
5075 | async writePromise(fd, buffer, offset, length, position) {
|
5076 | if ((fd & ZIP_FD) === 0) {
|
5077 | if (typeof buffer === `string`) {
|
5078 | return await this.baseFs.writePromise(fd, buffer, offset);
|
5079 | } else {
|
5080 | return await this.baseFs.writePromise(fd, buffer, offset, length, position);
|
5081 | }
|
5082 | }
|
5083 |
|
5084 | const entry = this.fdMap.get(fd);
|
5085 | if (typeof entry === `undefined`) throw Object.assign(new Error(`EBADF: bad file descriptor, write`), {
|
5086 | code: `EBADF`
|
5087 | });
|
5088 | const [zipFs, realFd] = entry;
|
5089 |
|
5090 | if (typeof buffer === `string`) {
|
5091 | return await zipFs.writePromise(realFd, buffer, offset);
|
5092 | } else {
|
5093 | return await zipFs.writePromise(realFd, buffer, offset, length, position);
|
5094 | }
|
5095 | }
|
5096 |
|
5097 | writeSync(fd, buffer, offset, length, position) {
|
5098 | if ((fd & ZIP_FD) === 0) {
|
5099 | if (typeof buffer === `string`) {
|
5100 | return this.baseFs.writeSync(fd, buffer, offset);
|
5101 | } else {
|
5102 | return this.baseFs.writeSync(fd, buffer, offset, length, position);
|
5103 | }
|
5104 | }
|
5105 |
|
5106 | const entry = this.fdMap.get(fd);
|
5107 | if (typeof entry === `undefined`) throw Object.assign(new Error(`EBADF: bad file descriptor, write`), {
|
5108 | code: `EBADF`
|
5109 | });
|
5110 | const [zipFs, realFd] = entry;
|
5111 |
|
5112 | if (typeof buffer === `string`) {
|
5113 | return zipFs.writeSync(realFd, buffer, offset);
|
5114 | } else {
|
5115 | return zipFs.writeSync(realFd, buffer, offset, length, position);
|
5116 | }
|
5117 | }
|
5118 |
|
5119 | async closePromise(fd) {
|
5120 | if ((fd & ZIP_FD) === 0) return await this.baseFs.closePromise(fd);
|
5121 | const entry = this.fdMap.get(fd);
|
5122 | if (typeof entry === `undefined`) throw Object.assign(new Error(`EBADF: bad file descriptor, close`), {
|
5123 | code: `EBADF`
|
5124 | });
|
5125 | this.fdMap.delete(fd);
|
5126 | const [zipFs, realFd] = entry;
|
5127 | return await zipFs.closePromise(realFd);
|
5128 | }
|
5129 |
|
5130 | closeSync(fd) {
|
5131 | if ((fd & ZIP_FD) === 0) return this.baseFs.closeSync(fd);
|
5132 | const entry = this.fdMap.get(fd);
|
5133 | if (typeof entry === `undefined`) throw Object.assign(new Error(`EBADF: bad file descriptor, close`), {
|
5134 | code: `EBADF`
|
5135 | });
|
5136 | this.fdMap.delete(fd);
|
5137 | const [zipFs, realFd] = entry;
|
5138 | return zipFs.closeSync(realFd);
|
5139 | }
|
5140 |
|
5141 | createReadStream(p, opts) {
|
5142 | if (p === null) return this.baseFs.createReadStream(p, opts);
|
5143 | return this.makeCallSync(p, () => {
|
5144 | return this.baseFs.createReadStream(p, opts);
|
5145 | }, (zipFs, {
|
5146 | subPath
|
5147 | }) => {
|
5148 | return zipFs.createReadStream(subPath, opts);
|
5149 | });
|
5150 | }
|
5151 |
|
5152 | createWriteStream(p, opts) {
|
5153 | if (p === null) return this.baseFs.createWriteStream(p, opts);
|
5154 | return this.makeCallSync(p, () => {
|
5155 | return this.baseFs.createWriteStream(p, opts);
|
5156 | }, (zipFs, {
|
5157 | subPath
|
5158 | }) => {
|
5159 | return zipFs.createWriteStream(subPath, opts);
|
5160 | });
|
5161 | }
|
5162 |
|
5163 | async realpathPromise(p) {
|
5164 | return await this.makeCallPromise(p, async () => {
|
5165 | return await this.baseFs.realpathPromise(p);
|
5166 | }, async (zipFs, {
|
5167 | archivePath,
|
5168 | subPath
|
5169 | }) => {
|
5170 | return this.pathUtils.resolve((await this.baseFs.realpathPromise(archivePath)), this.pathUtils.relative(path_1.PortablePath.root, (await zipFs.realpathPromise(subPath))));
|
5171 | });
|
5172 | }
|
5173 |
|
5174 | realpathSync(p) {
|
5175 | return this.makeCallSync(p, () => {
|
5176 | return this.baseFs.realpathSync(p);
|
5177 | }, (zipFs, {
|
5178 | archivePath,
|
5179 | subPath
|
5180 | }) => {
|
5181 | return this.pathUtils.resolve(this.baseFs.realpathSync(archivePath), this.pathUtils.relative(path_1.PortablePath.root, zipFs.realpathSync(subPath)));
|
5182 | });
|
5183 | }
|
5184 |
|
5185 | async existsPromise(p) {
|
5186 | return await this.makeCallPromise(p, async () => {
|
5187 | return await this.baseFs.existsPromise(p);
|
5188 | }, async (zipFs, {
|
5189 | subPath
|
5190 | }) => {
|
5191 | return await zipFs.existsPromise(subPath);
|
5192 | });
|
5193 | }
|
5194 |
|
5195 | existsSync(p) {
|
5196 | return this.makeCallSync(p, () => {
|
5197 | return this.baseFs.existsSync(p);
|
5198 | }, (zipFs, {
|
5199 | subPath
|
5200 | }) => {
|
5201 | return zipFs.existsSync(subPath);
|
5202 | });
|
5203 | }
|
5204 |
|
5205 | async accessPromise(p, mode) {
|
5206 | return await this.makeCallPromise(p, async () => {
|
5207 | return await this.baseFs.accessPromise(p, mode);
|
5208 | }, async (zipFs, {
|
5209 | subPath
|
5210 | }) => {
|
5211 | return await zipFs.accessPromise(subPath, mode);
|
5212 | });
|
5213 | }
|
5214 |
|
5215 | accessSync(p, mode) {
|
5216 | return this.makeCallSync(p, () => {
|
5217 | return this.baseFs.accessSync(p, mode);
|
5218 | }, (zipFs, {
|
5219 | subPath
|
5220 | }) => {
|
5221 | return zipFs.accessSync(subPath, mode);
|
5222 | });
|
5223 | }
|
5224 |
|
5225 | async statPromise(p) {
|
5226 | return await this.makeCallPromise(p, async () => {
|
5227 | return await this.baseFs.statPromise(p);
|
5228 | }, async (zipFs, {
|
5229 | subPath
|
5230 | }) => {
|
5231 | return await zipFs.statPromise(subPath);
|
5232 | });
|
5233 | }
|
5234 |
|
5235 | statSync(p) {
|
5236 | return this.makeCallSync(p, () => {
|
5237 | return this.baseFs.statSync(p);
|
5238 | }, (zipFs, {
|
5239 | subPath
|
5240 | }) => {
|
5241 | return zipFs.statSync(subPath);
|
5242 | });
|
5243 | }
|
5244 |
|
5245 | async lstatPromise(p) {
|
5246 | return await this.makeCallPromise(p, async () => {
|
5247 | return await this.baseFs.lstatPromise(p);
|
5248 | }, async (zipFs, {
|
5249 | subPath
|
5250 | }) => {
|
5251 | return await zipFs.lstatPromise(subPath);
|
5252 | });
|
5253 | }
|
5254 |
|
5255 | lstatSync(p) {
|
5256 | return this.makeCallSync(p, () => {
|
5257 | return this.baseFs.lstatSync(p);
|
5258 | }, (zipFs, {
|
5259 | subPath
|
5260 | }) => {
|
5261 | return zipFs.lstatSync(subPath);
|
5262 | });
|
5263 | }
|
5264 |
|
5265 | async chmodPromise(p, mask) {
|
5266 | return await this.makeCallPromise(p, async () => {
|
5267 | return await this.baseFs.chmodPromise(p, mask);
|
5268 | }, async (zipFs, {
|
5269 | subPath
|
5270 | }) => {
|
5271 | return await zipFs.chmodPromise(subPath, mask);
|
5272 | });
|
5273 | }
|
5274 |
|
5275 | chmodSync(p, mask) {
|
5276 | return this.makeCallSync(p, () => {
|
5277 | return this.baseFs.chmodSync(p, mask);
|
5278 | }, (zipFs, {
|
5279 | subPath
|
5280 | }) => {
|
5281 | return zipFs.chmodSync(subPath, mask);
|
5282 | });
|
5283 | }
|
5284 |
|
5285 | async renamePromise(oldP, newP) {
|
5286 | return await this.makeCallPromise(oldP, async () => {
|
5287 | return await this.makeCallPromise(newP, async () => {
|
5288 | return await this.baseFs.renamePromise(oldP, newP);
|
5289 | }, async () => {
|
5290 | throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), {
|
5291 | code: `EEXDEV`
|
5292 | });
|
5293 | });
|
5294 | }, async (zipFsO, {
|
5295 | subPath: subPathO
|
5296 | }) => {
|
5297 | return await this.makeCallPromise(newP, async () => {
|
5298 | throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), {
|
5299 | code: `EEXDEV`
|
5300 | });
|
5301 | }, async (zipFsN, {
|
5302 | subPath: subPathN
|
5303 | }) => {
|
5304 | if (zipFsO !== zipFsN) {
|
5305 | throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), {
|
5306 | code: `EEXDEV`
|
5307 | });
|
5308 | } else {
|
5309 | return await zipFsO.renamePromise(subPathO, subPathN);
|
5310 | }
|
5311 | });
|
5312 | });
|
5313 | }
|
5314 |
|
5315 | renameSync(oldP, newP) {
|
5316 | return this.makeCallSync(oldP, () => {
|
5317 | return this.makeCallSync(newP, () => {
|
5318 | return this.baseFs.renameSync(oldP, newP);
|
5319 | }, async () => {
|
5320 | throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), {
|
5321 | code: `EEXDEV`
|
5322 | });
|
5323 | });
|
5324 | }, (zipFsO, {
|
5325 | subPath: subPathO
|
5326 | }) => {
|
5327 | return this.makeCallSync(newP, () => {
|
5328 | throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), {
|
5329 | code: `EEXDEV`
|
5330 | });
|
5331 | }, (zipFsN, {
|
5332 | subPath: subPathN
|
5333 | }) => {
|
5334 | if (zipFsO !== zipFsN) {
|
5335 | throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), {
|
5336 | code: `EEXDEV`
|
5337 | });
|
5338 | } else {
|
5339 | return zipFsO.renameSync(subPathO, subPathN);
|
5340 | }
|
5341 | });
|
5342 | });
|
5343 | }
|
5344 |
|
5345 | async copyFilePromise(sourceP, destP, flags = 0) {
|
5346 | const fallback = async (sourceFs, sourceP, destFs, destP) => {
|
5347 | if ((flags & fs_1.constants.COPYFILE_FICLONE_FORCE) !== 0) throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${sourceP}' -> ${destP}'`), {
|
5348 | code: `EXDEV`
|
5349 | });
|
5350 | if (flags & fs_1.constants.COPYFILE_EXCL && (await this.existsPromise(sourceP))) throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${sourceP}' -> '${destP}'`), {
|
5351 | code: `EEXIST`
|
5352 | });
|
5353 | let content;
|
5354 |
|
5355 | try {
|
5356 | content = await sourceFs.readFilePromise(sourceP);
|
5357 | } catch (error) {
|
5358 | throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${sourceP}' -> '${destP}'`), {
|
5359 | code: `EINVAL`
|
5360 | });
|
5361 | }
|
5362 |
|
5363 | await destFs.writeFilePromise(destP, content);
|
5364 | };
|
5365 |
|
5366 | return await this.makeCallPromise(sourceP, async () => {
|
5367 | return await this.makeCallPromise(destP, async () => {
|
5368 | return await this.baseFs.copyFilePromise(sourceP, destP, flags);
|
5369 | }, async (zipFsD, {
|
5370 | subPath: subPathD
|
5371 | }) => {
|
5372 | return await fallback(this.baseFs, sourceP, zipFsD, subPathD);
|
5373 | });
|
5374 | }, async (zipFsS, {
|
5375 | subPath: subPathS
|
5376 | }) => {
|
5377 | return await this.makeCallPromise(destP, async () => {
|
5378 | return await fallback(zipFsS, subPathS, this.baseFs, destP);
|
5379 | }, async (zipFsD, {
|
5380 | subPath: subPathD
|
5381 | }) => {
|
5382 | if (zipFsS !== zipFsD) {
|
5383 | return await fallback(zipFsS, subPathS, zipFsD, subPathD);
|
5384 | } else {
|
5385 | return await zipFsS.copyFilePromise(subPathS, subPathD, flags);
|
5386 | }
|
5387 | });
|
5388 | });
|
5389 | }
|
5390 |
|
5391 | copyFileSync(sourceP, destP, flags = 0) {
|
5392 | const fallback = (sourceFs, sourceP, destFs, destP) => {
|
5393 | if ((flags & fs_1.constants.COPYFILE_FICLONE_FORCE) !== 0) throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${sourceP}' -> ${destP}'`), {
|
5394 | code: `EXDEV`
|
5395 | });
|
5396 | if (flags & fs_1.constants.COPYFILE_EXCL && this.existsSync(sourceP)) throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${sourceP}' -> '${destP}'`), {
|
5397 | code: `EEXIST`
|
5398 | });
|
5399 | let content;
|
5400 |
|
5401 | try {
|
5402 | content = sourceFs.readFileSync(sourceP);
|
5403 | } catch (error) {
|
5404 | throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${sourceP}' -> '${destP}'`), {
|
5405 | code: `EINVAL`
|
5406 | });
|
5407 | }
|
5408 |
|
5409 | destFs.writeFileSync(destP, content);
|
5410 | };
|
5411 |
|
5412 | return this.makeCallSync(sourceP, () => {
|
5413 | return this.makeCallSync(destP, () => {
|
5414 | return this.baseFs.copyFileSync(sourceP, destP, flags);
|
5415 | }, (zipFsD, {
|
5416 | subPath: subPathD
|
5417 | }) => {
|
5418 | return fallback(this.baseFs, sourceP, zipFsD, subPathD);
|
5419 | });
|
5420 | }, (zipFsS, {
|
5421 | subPath: subPathS
|
5422 | }) => {
|
5423 | return this.makeCallSync(destP, () => {
|
5424 | return fallback(zipFsS, subPathS, this.baseFs, destP);
|
5425 | }, (zipFsD, {
|
5426 | subPath: subPathD
|
5427 | }) => {
|
5428 | if (zipFsS !== zipFsD) {
|
5429 | return fallback(zipFsS, subPathS, zipFsD, subPathD);
|
5430 | } else {
|
5431 | return zipFsS.copyFileSync(subPathS, subPathD, flags);
|
5432 | }
|
5433 | });
|
5434 | });
|
5435 | }
|
5436 |
|
5437 | async appendFilePromise(p, content, opts) {
|
5438 | return await this.makeCallPromise(p, async () => {
|
5439 | return await this.baseFs.appendFilePromise(p, content, opts);
|
5440 | }, async (zipFs, {
|
5441 | subPath
|
5442 | }) => {
|
5443 | return await zipFs.appendFilePromise(subPath, content, opts);
|
5444 | });
|
5445 | }
|
5446 |
|
5447 | appendFileSync(p, content, opts) {
|
5448 | return this.makeCallSync(p, () => {
|
5449 | return this.baseFs.appendFileSync(p, content, opts);
|
5450 | }, (zipFs, {
|
5451 | subPath
|
5452 | }) => {
|
5453 | return zipFs.appendFileSync(subPath, content, opts);
|
5454 | });
|
5455 | }
|
5456 |
|
5457 | async writeFilePromise(p, content, opts) {
|
5458 | return await this.makeCallPromise(p, async () => {
|
5459 | return await this.baseFs.writeFilePromise(p, content, opts);
|
5460 | }, async (zipFs, {
|
5461 | subPath
|
5462 | }) => {
|
5463 | return await zipFs.writeFilePromise(subPath, content, opts);
|
5464 | });
|
5465 | }
|
5466 |
|
5467 | writeFileSync(p, content, opts) {
|
5468 | return this.makeCallSync(p, () => {
|
5469 | return this.baseFs.writeFileSync(p, content, opts);
|
5470 | }, (zipFs, {
|
5471 | subPath
|
5472 | }) => {
|
5473 | return zipFs.writeFileSync(subPath, content, opts);
|
5474 | });
|
5475 | }
|
5476 |
|
5477 | async unlinkPromise(p) {
|
5478 | return await this.makeCallPromise(p, async () => {
|
5479 | return await this.baseFs.unlinkPromise(p);
|
5480 | }, async (zipFs, {
|
5481 | subPath
|
5482 | }) => {
|
5483 | return await zipFs.unlinkPromise(subPath);
|
5484 | });
|
5485 | }
|
5486 |
|
5487 | unlinkSync(p) {
|
5488 | return this.makeCallSync(p, () => {
|
5489 | return this.baseFs.unlinkSync(p);
|
5490 | }, (zipFs, {
|
5491 | subPath
|
5492 | }) => {
|
5493 | return zipFs.unlinkSync(subPath);
|
5494 | });
|
5495 | }
|
5496 |
|
5497 | async utimesPromise(p, atime, mtime) {
|
5498 | return await this.makeCallPromise(p, async () => {
|
5499 | return await this.baseFs.utimesPromise(p, atime, mtime);
|
5500 | }, async (zipFs, {
|
5501 | subPath
|
5502 | }) => {
|
5503 | return await zipFs.utimesPromise(subPath, atime, mtime);
|
5504 | });
|
5505 | }
|
5506 |
|
5507 | utimesSync(p, atime, mtime) {
|
5508 | return this.makeCallSync(p, () => {
|
5509 | return this.baseFs.utimesSync(p, atime, mtime);
|
5510 | }, (zipFs, {
|
5511 | subPath
|
5512 | }) => {
|
5513 | return zipFs.utimesSync(subPath, atime, mtime);
|
5514 | });
|
5515 | }
|
5516 |
|
5517 | async mkdirPromise(p, opts) {
|
5518 | return await this.makeCallPromise(p, async () => {
|
5519 | return await this.baseFs.mkdirPromise(p, opts);
|
5520 | }, async (zipFs, {
|
5521 | subPath
|
5522 | }) => {
|
5523 | return await zipFs.mkdirPromise(subPath, opts);
|
5524 | });
|
5525 | }
|
5526 |
|
5527 | mkdirSync(p, opts) {
|
5528 | return this.makeCallSync(p, () => {
|
5529 | return this.baseFs.mkdirSync(p, opts);
|
5530 | }, (zipFs, {
|
5531 | subPath
|
5532 | }) => {
|
5533 | return zipFs.mkdirSync(subPath, opts);
|
5534 | });
|
5535 | }
|
5536 |
|
5537 | async rmdirPromise(p) {
|
5538 | return await this.makeCallPromise(p, async () => {
|
5539 | return await this.baseFs.rmdirPromise(p);
|
5540 | }, async (zipFs, {
|
5541 | subPath
|
5542 | }) => {
|
5543 | return await zipFs.rmdirPromise(subPath);
|
5544 | });
|
5545 | }
|
5546 |
|
5547 | rmdirSync(p) {
|
5548 | return this.makeCallSync(p, () => {
|
5549 | return this.baseFs.rmdirSync(p);
|
5550 | }, (zipFs, {
|
5551 | subPath
|
5552 | }) => {
|
5553 | return zipFs.rmdirSync(subPath);
|
5554 | });
|
5555 | }
|
5556 |
|
5557 | async symlinkPromise(target, p, type) {
|
5558 | return await this.makeCallPromise(p, async () => {
|
5559 | return await this.baseFs.symlinkPromise(target, p, type);
|
5560 | }, async (zipFs, {
|
5561 | subPath
|
5562 | }) => {
|
5563 | return await zipFs.symlinkPromise(target, subPath);
|
5564 | });
|
5565 | }
|
5566 |
|
5567 | symlinkSync(target, p, type) {
|
5568 | return this.makeCallSync(p, () => {
|
5569 | return this.baseFs.symlinkSync(target, p, type);
|
5570 | }, (zipFs, {
|
5571 | subPath
|
5572 | }) => {
|
5573 | return zipFs.symlinkSync(target, subPath);
|
5574 | });
|
5575 | }
|
5576 |
|
5577 | async readFilePromise(p, encoding) {
|
5578 | return this.makeCallPromise(p, async () => {
|
5579 |
|
5580 | switch (encoding) {
|
5581 | case `utf8`:
|
5582 | return await this.baseFs.readFilePromise(p, encoding);
|
5583 |
|
5584 | default:
|
5585 | return await this.baseFs.readFilePromise(p, encoding);
|
5586 | }
|
5587 | }, async (zipFs, {
|
5588 | subPath
|
5589 | }) => {
|
5590 | return await zipFs.readFilePromise(subPath, encoding);
|
5591 | });
|
5592 | }
|
5593 |
|
5594 | readFileSync(p, encoding) {
|
5595 | return this.makeCallSync(p, () => {
|
5596 |
|
5597 | switch (encoding) {
|
5598 | case `utf8`:
|
5599 | return this.baseFs.readFileSync(p, encoding);
|
5600 |
|
5601 | default:
|
5602 | return this.baseFs.readFileSync(p, encoding);
|
5603 | }
|
5604 | }, (zipFs, {
|
5605 | subPath
|
5606 | }) => {
|
5607 | return zipFs.readFileSync(subPath, encoding);
|
5608 | });
|
5609 | }
|
5610 |
|
5611 | async readdirPromise(p, {
|
5612 | withFileTypes
|
5613 | } = {}) {
|
5614 | return await this.makeCallPromise(p, async () => {
|
5615 | return await this.baseFs.readdirPromise(p, {
|
5616 | withFileTypes: withFileTypes
|
5617 | });
|
5618 | }, async (zipFs, {
|
5619 | subPath
|
5620 | }) => {
|
5621 | return await zipFs.readdirPromise(subPath, {
|
5622 | withFileTypes: withFileTypes
|
5623 | });
|
5624 | }, {
|
5625 | requireSubpath: false
|
5626 | });
|
5627 | }
|
5628 |
|
5629 | readdirSync(p, {
|
5630 | withFileTypes
|
5631 | } = {}) {
|
5632 | return this.makeCallSync(p, () => {
|
5633 | return this.baseFs.readdirSync(p, {
|
5634 | withFileTypes: withFileTypes
|
5635 | });
|
5636 | }, (zipFs, {
|
5637 | subPath
|
5638 | }) => {
|
5639 | return zipFs.readdirSync(subPath, {
|
5640 | withFileTypes: withFileTypes
|
5641 | });
|
5642 | }, {
|
5643 | requireSubpath: false
|
5644 | });
|
5645 | }
|
5646 |
|
5647 | async readlinkPromise(p) {
|
5648 | return await this.makeCallPromise(p, async () => {
|
5649 | return await this.baseFs.readlinkPromise(p);
|
5650 | }, async (zipFs, {
|
5651 | subPath
|
5652 | }) => {
|
5653 | return await zipFs.readlinkPromise(subPath);
|
5654 | });
|
5655 | }
|
5656 |
|
5657 | readlinkSync(p) {
|
5658 | return this.makeCallSync(p, () => {
|
5659 | return this.baseFs.readlinkSync(p);
|
5660 | }, (zipFs, {
|
5661 | subPath
|
5662 | }) => {
|
5663 | return zipFs.readlinkSync(subPath);
|
5664 | });
|
5665 | }
|
5666 |
|
5667 | watch(p, a, b) {
|
5668 | return this.makeCallSync(p, () => {
|
5669 | return this.baseFs.watch(p,
|
5670 | a, b);
|
5671 | }, (zipFs, {
|
5672 | subPath
|
5673 | }) => {
|
5674 | return zipFs.watch(subPath,
|
5675 | a, b);
|
5676 | });
|
5677 | }
|
5678 |
|
5679 | async makeCallPromise(p, discard, accept, {
|
5680 | requireSubpath = true
|
5681 | } = {}) {
|
5682 | if (typeof p !== `string`) return await discard();
|
5683 | const normalizedP = this.pathUtils.normalize(this.pathUtils.resolve(path_1.PortablePath.root, p));
|
5684 | const zipInfo = this.findZip(normalizedP);
|
5685 | if (!zipInfo) return await discard();
|
5686 | if (requireSubpath && zipInfo.subPath === `/`) return await discard();
|
5687 | return await this.getZipPromise(zipInfo.archivePath, async zipFs => await accept(zipFs, zipInfo));
|
5688 | }
|
5689 |
|
5690 | makeCallSync(p, discard, accept, {
|
5691 | requireSubpath = true
|
5692 | } = {}) {
|
5693 | if (typeof p !== `string`) return discard();
|
5694 | const normalizedP = this.pathUtils.normalize(this.pathUtils.resolve(path_1.PortablePath.root, p));
|
5695 | const zipInfo = this.findZip(normalizedP);
|
5696 | if (!zipInfo) return discard();
|
5697 | if (requireSubpath && zipInfo.subPath === `/`) return discard();
|
5698 | return this.getZipSync(zipInfo.archivePath, zipFs => accept(zipFs, zipInfo));
|
5699 | }
|
5700 |
|
5701 | findZip(p) {
|
5702 | if (this.filter && !this.filter.test(p)) return null;
|
5703 | const parts = p.split(/\//g);
|
5704 |
|
5705 | for (let t = 2; t <= parts.length; ++t) {
|
5706 | const archivePath = parts.slice(0, t).join(`/`);
|
5707 | if (this.notZip.has(archivePath)) continue;
|
5708 | if (this.isZip.has(archivePath)) return {
|
5709 | archivePath,
|
5710 | subPath: this.pathUtils.resolve(path_1.PortablePath.root, parts.slice(t).join(`/`))
|
5711 | };
|
5712 | let realArchivePath = archivePath;
|
5713 | let stat;
|
5714 |
|
5715 | while (true) {
|
5716 | try {
|
5717 | stat = this.baseFs.lstatSync(realArchivePath);
|
5718 | } catch (error) {
|
5719 | return null;
|
5720 | }
|
5721 |
|
5722 | if (stat.isSymbolicLink()) {
|
5723 | realArchivePath = this.pathUtils.resolve(this.pathUtils.dirname(realArchivePath), this.baseFs.readlinkSync(realArchivePath));
|
5724 | } else {
|
5725 | break;
|
5726 | }
|
5727 | }
|
5728 |
|
5729 | const isZip = stat.isFile() && this.pathUtils.extname(realArchivePath) === `.zip`;
|
5730 |
|
5731 | if (isZip) {
|
5732 | this.isZip.add(archivePath);
|
5733 | return {
|
5734 | archivePath,
|
5735 | subPath: this.pathUtils.resolve(path_1.PortablePath.root, parts.slice(t).join(`/`))
|
5736 | };
|
5737 | } else {
|
5738 | this.notZip.add(archivePath);
|
5739 |
|
5740 | if (stat.isFile()) {
|
5741 | return null;
|
5742 | }
|
5743 | }
|
5744 | }
|
5745 |
|
5746 | return null;
|
5747 | }
|
5748 |
|
5749 | limitOpenFiles(max) {
|
5750 | if (this.zipInstances === null) return;
|
5751 | let closeCount = this.zipInstances.size - max;
|
5752 |
|
5753 | for (const [path, zipFs] of this.zipInstances.entries()) {
|
5754 | if (closeCount <= 0) break;
|
5755 | zipFs.saveAndClose();
|
5756 | this.zipInstances.delete(path);
|
5757 | closeCount -= 1;
|
5758 | }
|
5759 | }
|
5760 |
|
5761 | async getZipPromise(p, accept) {
|
5762 | const getZipOptions = async () => ({
|
5763 | baseFs: this.baseFs,
|
5764 | libzip: this.libzip,
|
5765 | readOnly: this.readOnlyArchives,
|
5766 | stats: await this.baseFs.statPromise(p)
|
5767 | });
|
5768 |
|
5769 | if (this.zipInstances) {
|
5770 | let zipFs = this.zipInstances.get(p);
|
5771 | if (!zipFs) zipFs = new ZipFS_1.ZipFS(p, (await getZipOptions()));
|
5772 |
|
5773 |
|
5774 | this.zipInstances.delete(p);
|
5775 | this.zipInstances.set(p, zipFs);
|
5776 | this.limitOpenFiles(this.maxOpenFiles);
|
5777 | return await accept(zipFs);
|
5778 | } else {
|
5779 | const zipFs = new ZipFS_1.ZipFS(p, (await getZipOptions()));
|
5780 |
|
5781 | try {
|
5782 | return await accept(zipFs);
|
5783 | } finally {
|
5784 | zipFs.saveAndClose();
|
5785 | }
|
5786 | }
|
5787 | }
|
5788 |
|
5789 | getZipSync(p, accept) {
|
5790 | const getZipOptions = () => ({
|
5791 | baseFs: this.baseFs,
|
5792 | libzip: this.libzip,
|
5793 | readOnly: this.readOnlyArchives,
|
5794 | stats: this.baseFs.statSync(p)
|
5795 | });
|
5796 |
|
5797 | if (this.zipInstances) {
|
5798 | let zipFs = this.zipInstances.get(p);
|
5799 | if (!zipFs) zipFs = new ZipFS_1.ZipFS(p, getZipOptions());
|
5800 |
|
5801 |
|
5802 | this.zipInstances.delete(p);
|
5803 | this.zipInstances.set(p, zipFs);
|
5804 | this.limitOpenFiles(this.maxOpenFiles);
|
5805 | return accept(zipFs);
|
5806 | } else {
|
5807 | const zipFs = new ZipFS_1.ZipFS(p, getZipOptions());
|
5808 |
|
5809 | try {
|
5810 | return accept(zipFs);
|
5811 | } finally {
|
5812 | zipFs.saveAndClose();
|
5813 | }
|
5814 | }
|
5815 | }
|
5816 |
|
5817 | }
|
5818 |
|
5819 | exports.ZipOpenFS = ZipOpenFS;
|
5820 |
|
5821 | }),
|
5822 |
|
5823 | (function(module, exports, __webpack_require__) {
|
5824 |
|
5825 | "use strict";
|
5826 |
|
5827 |
|
5828 | Object.defineProperty(exports, "__esModule", {
|
5829 | value: true
|
5830 | });
|
5831 |
|
5832 | const makeInterface_1 = __webpack_require__(25);
|
5833 |
|
5834 | let mod = null;
|
5835 |
|
5836 | function getLibzipSync() {
|
5837 | if (mod === null) mod = makeInterface_1.makeInterface(__webpack_require__(26));
|
5838 | return mod;
|
5839 | }
|
5840 |
|
5841 | exports.getLibzipSync = getLibzipSync;
|
5842 |
|
5843 | async function getLibzipPromise() {
|
5844 | return getLibzipSync();
|
5845 | }
|
5846 |
|
5847 | exports.getLibzipPromise = getLibzipPromise;
|
5848 |
|
5849 | }),
|
5850 |
|
5851 | (function(module, exports, __webpack_require__) {
|
5852 |
|
5853 | "use strict";
|
5854 |
|
5855 |
|
5856 | Object.defineProperty(exports, "__esModule", {
|
5857 | value: true
|
5858 | });
|
5859 | const number64 = [`number`, `number`];
|
5860 |
|
5861 | exports.makeInterface = libzip => ({
|
5862 |
|
5863 | get HEAP8() {
|
5864 | return libzip.HEAP8;
|
5865 | },
|
5866 |
|
5867 | get HEAPU8() {
|
5868 | return libzip.HEAPU8;
|
5869 | },
|
5870 |
|
5871 | ZIP_CHECKCONS: 4,
|
5872 | ZIP_CREATE: 1,
|
5873 | ZIP_EXCL: 2,
|
5874 | ZIP_TRUNCATE: 8,
|
5875 | ZIP_RDONLY: 16,
|
5876 | ZIP_FL_OVERWRITE: 8192,
|
5877 | ZIP_OPSYS_DOS: 0x00,
|
5878 | ZIP_OPSYS_AMIGA: 0x01,
|
5879 | ZIP_OPSYS_OPENVMS: 0x02,
|
5880 | ZIP_OPSYS_UNIX: 0x03,
|
5881 | ZIP_OPSYS_VM_CMS: 0x04,
|
5882 | ZIP_OPSYS_ATARI_ST: 0x05,
|
5883 | ZIP_OPSYS_OS_2: 0x06,
|
5884 | ZIP_OPSYS_MACINTOSH: 0x07,
|
5885 | ZIP_OPSYS_Z_SYSTEM: 0x08,
|
5886 | ZIP_OPSYS_CPM: 0x09,
|
5887 | ZIP_OPSYS_WINDOWS_NTFS: 0x0a,
|
5888 | ZIP_OPSYS_MVS: 0x0b,
|
5889 | ZIP_OPSYS_VSE: 0x0c,
|
5890 | ZIP_OPSYS_ACORN_RISC: 0x0d,
|
5891 | ZIP_OPSYS_VFAT: 0x0e,
|
5892 | ZIP_OPSYS_ALTERNATE_MVS: 0x0f,
|
5893 | ZIP_OPSYS_BEOS: 0x10,
|
5894 | ZIP_OPSYS_TANDEM: 0x11,
|
5895 | ZIP_OPSYS_OS_400: 0x12,
|
5896 | ZIP_OPSYS_OS_X: 0x13,
|
5897 | uint08S: libzip._malloc(1),
|
5898 | uint16S: libzip._malloc(2),
|
5899 | uint32S: libzip._malloc(4),
|
5900 | uint64S: libzip._malloc(8),
|
5901 | malloc: libzip._malloc,
|
5902 | free: libzip._free,
|
5903 | getValue: libzip.getValue,
|
5904 | open: libzip.cwrap(`zip_open`, `number`, [`string`, `number`, `number`]),
|
5905 | openFromSource: libzip.cwrap(`zip_open_from_source`, `number`, [`number`, `number`, `number`]),
|
5906 | close: libzip.cwrap(`zip_close`, `number`, [`number`]),
|
5907 | discard: libzip.cwrap(`zip_discard`, null, [`number`]),
|
5908 | getError: libzip.cwrap(`zip_get_error`, `number`, [`number`]),
|
5909 | getName: libzip.cwrap(`zip_get_name`, `string`, [`number`, `number`, `number`]),
|
5910 | getNumEntries: libzip.cwrap(`zip_get_num_entries`, `number`, [`number`, `number`]),
|
5911 | stat: libzip.cwrap(`zip_stat`, `number`, [`number`, `string`, `number`, `number`]),
|
5912 | statIndex: libzip.cwrap(`zip_stat_index`, `number`, [`number`, ...number64, `number`, `number`]),
|
5913 | fopen: libzip.cwrap(`zip_fopen`, `number`, [`number`, `string`, `number`]),
|
5914 | fopenIndex: libzip.cwrap(`zip_fopen_index`, `number`, [`number`, ...number64, `number`]),
|
5915 | fread: libzip.cwrap(`zip_fread`, `number`, [`number`, `number`, `number`, `number`]),
|
5916 | fclose: libzip.cwrap(`zip_fclose`, `number`, [`number`]),
|
5917 | dir: {
|
5918 | add: libzip.cwrap(`zip_dir_add`, `number`, [`number`, `string`])
|
5919 | },
|
5920 | file: {
|
5921 | add: libzip.cwrap(`zip_file_add`, `number`, [`number`, `string`, `number`, `number`]),
|
5922 | getError: libzip.cwrap(`zip_file_get_error`, `number`, [`number`]),
|
5923 | getExternalAttributes: libzip.cwrap(`zip_file_get_external_attributes`, `number`, [`number`, ...number64, `number`, `number`, `number`]),
|
5924 | setExternalAttributes: libzip.cwrap(`zip_file_set_external_attributes`, `number`, [`number`, ...number64, `number`, `number`, `number`]),
|
5925 | setMtime: libzip.cwrap(`zip_file_set_mtime`, `number`, [`number`, ...number64, `number`, `number`])
|
5926 | },
|
5927 | error: {
|
5928 | initWithCode: libzip.cwrap(`zip_error_init_with_code`, null, [`number`, `number`]),
|
5929 | strerror: libzip.cwrap(`zip_error_strerror`, `string`, [`number`])
|
5930 | },
|
5931 | name: {
|
5932 | locate: libzip.cwrap(`zip_name_locate`, `number`, [`number`, `string`, `number`])
|
5933 | },
|
5934 | source: {
|
5935 | fromUnattachedBuffer: libzip.cwrap(`zip_source_buffer_create`, `number`, [`number`, `number`, `number`, `number`]),
|
5936 | fromBuffer: libzip.cwrap(`zip_source_buffer`, `number`, [`number`, `number`, ...number64, `number`]),
|
5937 | free: libzip.cwrap(`zip_source_free`, null, [`number`]),
|
5938 | setMtime: libzip.cwrap(`zip_source_set_mtime`, `number`, [`number`, `number`])
|
5939 | },
|
5940 | struct: {
|
5941 | stat: libzip.cwrap(`zipstruct_stat`, `number`, []),
|
5942 | statS: libzip.cwrap(`zipstruct_statS`, `number`, []),
|
5943 | statName: libzip.cwrap(`zipstruct_stat_name`, `string`, [`number`]),
|
5944 | statIndex: libzip.cwrap(`zipstruct_stat_index`, `number`, [`number`]),
|
5945 | statSize: libzip.cwrap(`zipstruct_stat_size`, `number`, [`number`]),
|
5946 | statMtime: libzip.cwrap(`zipstruct_stat_mtime`, `number`, [`number`]),
|
5947 | error: libzip.cwrap(`zipstruct_error`, `number`, []),
|
5948 | errorS: libzip.cwrap(`zipstruct_errorS`, `number`, [])
|
5949 | }
|
5950 | });
|
5951 |
|
5952 | }),
|
5953 |
|
5954 | (function(module, exports, __webpack_require__) {
|
5955 |
|
5956 | var frozenFs = Object.assign({}, __webpack_require__(2));
|
5957 | var Module = typeof Module !== "undefined" ? Module : {};
|
5958 | var moduleOverrides = {};
|
5959 | var key;
|
5960 | for (key in Module) {
|
5961 | if (Module.hasOwnProperty(key)) {
|
5962 | moduleOverrides[key] = Module[key];
|
5963 | }
|
5964 | }
|
5965 | var arguments_ = [];
|
5966 | var thisProgram = "./this.program";
|
5967 | var quit_ = function(status, toThrow) {
|
5968 | throw toThrow;
|
5969 | };
|
5970 | var ENVIRONMENT_IS_WORKER = false;
|
5971 | var ENVIRONMENT_IS_NODE = true;
|
5972 | var ENVIRONMENT_HAS_NODE = ENVIRONMENT_IS_NODE;
|
5973 | var scriptDirectory = "";
|
5974 | function locateFile(path) {
|
5975 | if (Module["locateFile"]) {
|
5976 | return Module["locateFile"](path, scriptDirectory);
|
5977 | }
|
5978 | return scriptDirectory + path;
|
5979 | }
|
5980 | var read_, readBinary;
|
5981 | var nodeFS;
|
5982 | var nodePath;
|
5983 | if (ENVIRONMENT_IS_NODE) {
|
5984 | scriptDirectory = __dirname + "/";
|
5985 | read_ = function shell_read(filename, binary) {
|
5986 | var ret;
|
5987 | ret = tryParseAsDataURI(filename);
|
5988 | if (ret) {
|
5989 | return binary ? ret : ret.toString();
|
5990 | }
|
5991 | if (!nodeFS) nodeFS = frozenFs;
|
5992 | if (!nodePath) nodePath = __webpack_require__(7);
|
5993 | filename = nodePath["normalize"](filename);
|
5994 | return nodeFS["readFileSync"](filename, binary ? null : "utf8");
|
5995 | };
|
5996 | readBinary = function readBinary(filename) {
|
5997 | var ret = read_(filename, true);
|
5998 | if (!ret.buffer) {
|
5999 | ret = new Uint8Array(ret);
|
6000 | }
|
6001 | assert(ret.buffer);
|
6002 | return ret;
|
6003 | };
|
6004 | if (process["argv"].length > 1) {
|
6005 | thisProgram = process["argv"][1].replace(/\\/g, "/");
|
6006 | }
|
6007 | arguments_ = process["argv"].slice(2);
|
6008 | if (true) {
|
6009 | module["exports"] = Module;
|
6010 | }
|
6011 | (function() {})("uncaughtException", function(ex) {
|
6012 | if (!(ex instanceof ExitStatus)) {
|
6013 | throw ex;
|
6014 | }
|
6015 | });
|
6016 | (function() {})("unhandledRejection", abort);
|
6017 | quit_ = function(status) {
|
6018 | process["exit"](status);
|
6019 | };
|
6020 | Module["inspect"] = function() {
|
6021 | return "[Emscripten Module object]";
|
6022 | };
|
6023 | } else {
|
6024 | }
|
6025 | var out = Module["print"] || console.log.bind(console);
|
6026 | var err = Module["printErr"] || console.warn.bind(console);
|
6027 | for (key in moduleOverrides) {
|
6028 | if (moduleOverrides.hasOwnProperty(key)) {
|
6029 | Module[key] = moduleOverrides[key];
|
6030 | }
|
6031 | }
|
6032 | moduleOverrides = null;
|
6033 | if (Module["arguments"]) arguments_ = Module["arguments"];
|
6034 | if (Module["thisProgram"]) thisProgram = Module["thisProgram"];
|
6035 | if (Module["quit"]) quit_ = Module["quit"];
|
6036 | function dynamicAlloc(size) {
|
6037 | var ret = HEAP32[DYNAMICTOP_PTR >> 2];
|
6038 | var end = (ret + size + 15) & -16;
|
6039 | if (end > _emscripten_get_heap_size()) {
|
6040 | abort();
|
6041 | }
|
6042 | HEAP32[DYNAMICTOP_PTR >> 2] = end;
|
6043 | return ret;
|
6044 | }
|
6045 | function getNativeTypeSize(type) {
|
6046 | switch (type) {
|
6047 | case "i1":
|
6048 | case "i8":
|
6049 | return 1;
|
6050 | case "i16":
|
6051 | return 2;
|
6052 | case "i32":
|
6053 | return 4;
|
6054 | case "i64":
|
6055 | return 8;
|
6056 | case "float":
|
6057 | return 4;
|
6058 | case "double":
|
6059 | return 8;
|
6060 | default: {
|
6061 | if (type[type.length - 1] === "*") {
|
6062 | return 4;
|
6063 | } else if (type[0] === "i") {
|
6064 | var bits = parseInt(type.substr(1));
|
6065 | assert(
|
6066 | bits % 8 === 0,
|
6067 | "getNativeTypeSize invalid bits " + bits + ", type " + type
|
6068 | );
|
6069 | return bits / 8;
|
6070 | } else {
|
6071 | return 0;
|
6072 | }
|
6073 | }
|
6074 | }
|
6075 | }
|
6076 | var tempRet0 = 0;
|
6077 | var setTempRet0 = function(value) {
|
6078 | tempRet0 = value;
|
6079 | };
|
6080 | var wasmBinary;
|
6081 | if (Module["wasmBinary"]) wasmBinary = Module["wasmBinary"];
|
6082 | var noExitRuntime;
|
6083 | if (Module["noExitRuntime"]) noExitRuntime = Module["noExitRuntime"];
|
6084 | if (typeof WebAssembly !== "object") {
|
6085 | err("no native wasm support detected");
|
6086 | }
|
6087 | function setValue(ptr, value, type, noSafe) {
|
6088 | type = type || "i8";
|
6089 | if (type.charAt(type.length - 1) === "*") type = "i32";
|
6090 | switch (type) {
|
6091 | case "i1":
|
6092 | HEAP8[ptr >> 0] = value;
|
6093 | break;
|
6094 | case "i8":
|
6095 | HEAP8[ptr >> 0] = value;
|
6096 | break;
|
6097 | case "i16":
|
6098 | HEAP16[ptr >> 1] = value;
|
6099 | break;
|
6100 | case "i32":
|
6101 | HEAP32[ptr >> 2] = value;
|
6102 | break;
|
6103 | case "i64":
|
6104 | (tempI64 = [
|
6105 | value >>> 0,
|
6106 | ((tempDouble = value),
|
6107 | +Math_abs(tempDouble) >= 1
|
6108 | ? tempDouble > 0
|
6109 | ? (Math_min(+Math_floor(tempDouble / 4294967296), 4294967295) |
|
6110 | 0) >>>
|
6111 | 0
|
6112 | : ~~+Math_ceil(
|
6113 | (tempDouble - +(~~tempDouble >>> 0)) / 4294967296
|
6114 | ) >>> 0
|
6115 | : 0)
|
6116 | ]),
|
6117 | (HEAP32[ptr >> 2] = tempI64[0]),
|
6118 | (HEAP32[(ptr + 4) >> 2] = tempI64[1]);
|
6119 | break;
|
6120 | case "float":
|
6121 | HEAPF32[ptr >> 2] = value;
|
6122 | break;
|
6123 | case "double":
|
6124 | HEAPF64[ptr >> 3] = value;
|
6125 | break;
|
6126 | default:
|
6127 | abort("invalid type for setValue: " + type);
|
6128 | }
|
6129 | }
|
6130 | function getValue(ptr, type, noSafe) {
|
6131 | type = type || "i8";
|
6132 | if (type.charAt(type.length - 1) === "*") type = "i32";
|
6133 | switch (type) {
|
6134 | case "i1":
|
6135 | return HEAP8[ptr >> 0];
|
6136 | case "i8":
|
6137 | return HEAP8[ptr >> 0];
|
6138 | case "i16":
|
6139 | return HEAP16[ptr >> 1];
|
6140 | case "i32":
|
6141 | return HEAP32[ptr >> 2];
|
6142 | case "i64":
|
6143 | return HEAP32[ptr >> 2];
|
6144 | case "float":
|
6145 | return HEAPF32[ptr >> 2];
|
6146 | case "double":
|
6147 | return HEAPF64[ptr >> 3];
|
6148 | default:
|
6149 | abort("invalid type for getValue: " + type);
|
6150 | }
|
6151 | return null;
|
6152 | }
|
6153 | var wasmMemory;
|
6154 | var wasmTable = new WebAssembly.Table({
|
6155 | initial: 31,
|
6156 | maximum: 31 + 0,
|
6157 | element: "anyfunc"
|
6158 | });
|
6159 | var ABORT = false;
|
6160 | var EXITSTATUS = 0;
|
6161 | function assert(condition, text) {
|
6162 | if (!condition) {
|
6163 | abort("Assertion failed: " + text);
|
6164 | }
|
6165 | }
|
6166 | function getCFunc(ident) {
|
6167 | var func = Module["_" + ident];
|
6168 | assert(
|
6169 | func,
|
6170 | "Cannot call unknown function " + ident + ", make sure it is exported"
|
6171 | );
|
6172 | return func;
|
6173 | }
|
6174 | function ccall(ident, returnType, argTypes, args, opts) {
|
6175 | var toC = {
|
6176 | string: function(str) {
|
6177 | var ret = 0;
|
6178 | if (str !== null && str !== undefined && str !== 0) {
|
6179 | var len = (str.length << 2) + 1;
|
6180 | ret = stackAlloc(len);
|
6181 | stringToUTF8(str, ret, len);
|
6182 | }
|
6183 | return ret;
|
6184 | },
|
6185 | array: function(arr) {
|
6186 | var ret = stackAlloc(arr.length);
|
6187 | writeArrayToMemory(arr, ret);
|
6188 | return ret;
|
6189 | }
|
6190 | };
|
6191 | function convertReturnValue(ret) {
|
6192 | if (returnType === "string") return UTF8ToString(ret);
|
6193 | if (returnType === "boolean") return Boolean(ret);
|
6194 | return ret;
|
6195 | }
|
6196 | var func = getCFunc(ident);
|
6197 | var cArgs = [];
|
6198 | var stack = 0;
|
6199 | if (args) {
|
6200 | for (var i = 0; i < args.length; i++) {
|
6201 | var converter = toC[argTypes[i]];
|
6202 | if (converter) {
|
6203 | if (stack === 0) stack = stackSave();
|
6204 | cArgs[i] = converter(args[i]);
|
6205 | } else {
|
6206 | cArgs[i] = args[i];
|
6207 | }
|
6208 | }
|
6209 | }
|
6210 | var ret = func.apply(null, cArgs);
|
6211 | ret = convertReturnValue(ret);
|
6212 | if (stack !== 0) stackRestore(stack);
|
6213 | return ret;
|
6214 | }
|
6215 | function cwrap(ident, returnType, argTypes, opts) {
|
6216 | argTypes = argTypes || [];
|
6217 | var numericArgs = argTypes.every(function(type) {
|
6218 | return type === "number";
|
6219 | });
|
6220 | var numericRet = returnType !== "string";
|
6221 | if (numericRet && numericArgs && !opts) {
|
6222 | return getCFunc(ident);
|
6223 | }
|
6224 | return function() {
|
6225 | return ccall(ident, returnType, argTypes, arguments, opts);
|
6226 | };
|
6227 | }
|
6228 | var ALLOC_NORMAL = 0;
|
6229 | var ALLOC_NONE = 3;
|
6230 | function allocate(slab, types, allocator, ptr) {
|
6231 | var zeroinit, size;
|
6232 | if (typeof slab === "number") {
|
6233 | zeroinit = true;
|
6234 | size = slab;
|
6235 | } else {
|
6236 | zeroinit = false;
|
6237 | size = slab.length;
|
6238 | }
|
6239 | var singleType = typeof types === "string" ? types : null;
|
6240 | var ret;
|
6241 | if (allocator == ALLOC_NONE) {
|
6242 | ret = ptr;
|
6243 | } else {
|
6244 | ret = [_malloc, stackAlloc, dynamicAlloc][allocator](
|
6245 | Math.max(size, singleType ? 1 : types.length)
|
6246 | );
|
6247 | }
|
6248 | if (zeroinit) {
|
6249 | var stop;
|
6250 | ptr = ret;
|
6251 | assert((ret & 3) == 0);
|
6252 | stop = ret + (size & ~3);
|
6253 | for (; ptr < stop; ptr += 4) {
|
6254 | HEAP32[ptr >> 2] = 0;
|
6255 | }
|
6256 | stop = ret + size;
|
6257 | while (ptr < stop) {
|
6258 | HEAP8[ptr++ >> 0] = 0;
|
6259 | }
|
6260 | return ret;
|
6261 | }
|
6262 | if (singleType === "i8") {
|
6263 | if (slab.subarray || slab.slice) {
|
6264 | HEAPU8.set(slab, ret);
|
6265 | } else {
|
6266 | HEAPU8.set(new Uint8Array(slab), ret);
|
6267 | }
|
6268 | return ret;
|
6269 | }
|
6270 | var i = 0,
|
6271 | type,
|
6272 | typeSize,
|
6273 | previousType;
|
6274 | while (i < size) {
|
6275 | var curr = slab[i];
|
6276 | type = singleType || types[i];
|
6277 | if (type === 0) {
|
6278 | i++;
|
6279 | continue;
|
6280 | }
|
6281 | if (type == "i64") type = "i32";
|
6282 | setValue(ret + i, curr, type);
|
6283 | if (previousType !== type) {
|
6284 | typeSize = getNativeTypeSize(type);
|
6285 | previousType = type;
|
6286 | }
|
6287 | i += typeSize;
|
6288 | }
|
6289 | return ret;
|
6290 | }
|
6291 | var UTF8Decoder =
|
6292 | typeof TextDecoder !== "undefined" ? new TextDecoder("utf8") : undefined;
|
6293 | function UTF8ArrayToString(u8Array, idx, maxBytesToRead) {
|
6294 | var endIdx = idx + maxBytesToRead;
|
6295 | var endPtr = idx;
|
6296 | while (u8Array[endPtr] && !(endPtr >= endIdx)) ++endPtr;
|
6297 | if (endPtr - idx > 16 && u8Array.subarray && UTF8Decoder) {
|
6298 | return UTF8Decoder.decode(u8Array.subarray(idx, endPtr));
|
6299 | } else {
|
6300 | var str = "";
|
6301 | while (idx < endPtr) {
|
6302 | var u0 = u8Array[idx++];
|
6303 | if (!(u0 & 128)) {
|
6304 | str += String.fromCharCode(u0);
|
6305 | continue;
|
6306 | }
|
6307 | var u1 = u8Array[idx++] & 63;
|
6308 | if ((u0 & 224) == 192) {
|
6309 | str += String.fromCharCode(((u0 & 31) << 6) | u1);
|
6310 | continue;
|
6311 | }
|
6312 | var u2 = u8Array[idx++] & 63;
|
6313 | if ((u0 & 240) == 224) {
|
6314 | u0 = ((u0 & 15) << 12) | (u1 << 6) | u2;
|
6315 | } else {
|
6316 | u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (u8Array[idx++] & 63);
|
6317 | }
|
6318 | if (u0 < 65536) {
|
6319 | str += String.fromCharCode(u0);
|
6320 | } else {
|
6321 | var ch = u0 - 65536;
|
6322 | str += String.fromCharCode(55296 | (ch >> 10), 56320 | (ch & 1023));
|
6323 | }
|
6324 | }
|
6325 | }
|
6326 | return str;
|
6327 | }
|
6328 | function UTF8ToString(ptr, maxBytesToRead) {
|
6329 | return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : "";
|
6330 | }
|
6331 | function stringToUTF8Array(str, outU8Array, outIdx, maxBytesToWrite) {
|
6332 | if (!(maxBytesToWrite > 0)) return 0;
|
6333 | var startIdx = outIdx;
|
6334 | var endIdx = outIdx + maxBytesToWrite - 1;
|
6335 | for (var i = 0; i < str.length; ++i) {
|
6336 | var u = str.charCodeAt(i);
|
6337 | if (u >= 55296 && u <= 57343) {
|
6338 | var u1 = str.charCodeAt(++i);
|
6339 | u = (65536 + ((u & 1023) << 10)) | (u1 & 1023);
|
6340 | }
|
6341 | if (u <= 127) {
|
6342 | if (outIdx >= endIdx) break;
|
6343 | outU8Array[outIdx++] = u;
|
6344 | } else if (u <= 2047) {
|
6345 | if (outIdx + 1 >= endIdx) break;
|
6346 | outU8Array[outIdx++] = 192 | (u >> 6);
|
6347 | outU8Array[outIdx++] = 128 | (u & 63);
|
6348 | } else if (u <= 65535) {
|
6349 | if (outIdx + 2 >= endIdx) break;
|
6350 | outU8Array[outIdx++] = 224 | (u >> 12);
|
6351 | outU8Array[outIdx++] = 128 | ((u >> 6) & 63);
|
6352 | outU8Array[outIdx++] = 128 | (u & 63);
|
6353 | } else {
|
6354 | if (outIdx + 3 >= endIdx) break;
|
6355 | outU8Array[outIdx++] = 240 | (u >> 18);
|
6356 | outU8Array[outIdx++] = 128 | ((u >> 12) & 63);
|
6357 | outU8Array[outIdx++] = 128 | ((u >> 6) & 63);
|
6358 | outU8Array[outIdx++] = 128 | (u & 63);
|
6359 | }
|
6360 | }
|
6361 | outU8Array[outIdx] = 0;
|
6362 | return outIdx - startIdx;
|
6363 | }
|
6364 | function stringToUTF8(str, outPtr, maxBytesToWrite) {
|
6365 | return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite);
|
6366 | }
|
6367 | function lengthBytesUTF8(str) {
|
6368 | var len = 0;
|
6369 | for (var i = 0; i < str.length; ++i) {
|
6370 | var u = str.charCodeAt(i);
|
6371 | if (u >= 55296 && u <= 57343)
|
6372 | u = (65536 + ((u & 1023) << 10)) | (str.charCodeAt(++i) & 1023);
|
6373 | if (u <= 127) ++len;
|
6374 | else if (u <= 2047) len += 2;
|
6375 | else if (u <= 65535) len += 3;
|
6376 | else len += 4;
|
6377 | }
|
6378 | return len;
|
6379 | }
|
6380 | var UTF16Decoder =
|
6381 | typeof TextDecoder !== "undefined" ? new TextDecoder("utf-16le") : undefined;
|
6382 | function writeArrayToMemory(array, buffer) {
|
6383 | HEAP8.set(array, buffer);
|
6384 | }
|
6385 | var WASM_PAGE_SIZE = 65536;
|
6386 | function alignUp(x, multiple) {
|
6387 | if (x % multiple > 0) {
|
6388 | x += multiple - (x % multiple);
|
6389 | }
|
6390 | return x;
|
6391 | }
|
6392 | var buffer, HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64;
|
6393 | function updateGlobalBufferAndViews(buf) {
|
6394 | buffer = buf;
|
6395 | Module["HEAP8"] = HEAP8 = new Int8Array(buf);
|
6396 | Module["HEAP16"] = HEAP16 = new Int16Array(buf);
|
6397 | Module["HEAP32"] = HEAP32 = new Int32Array(buf);
|
6398 | Module["HEAPU8"] = HEAPU8 = new Uint8Array(buf);
|
6399 | Module["HEAPU16"] = HEAPU16 = new Uint16Array(buf);
|
6400 | Module["HEAPU32"] = HEAPU32 = new Uint32Array(buf);
|
6401 | Module["HEAPF32"] = HEAPF32 = new Float32Array(buf);
|
6402 | Module["HEAPF64"] = HEAPF64 = new Float64Array(buf);
|
6403 | }
|
6404 | var DYNAMIC_BASE = 5263680,
|
6405 | DYNAMICTOP_PTR = 20640;
|
6406 | var INITIAL_TOTAL_MEMORY = Module["TOTAL_MEMORY"] || 16777216;
|
6407 | if (Module["wasmMemory"]) {
|
6408 | wasmMemory = Module["wasmMemory"];
|
6409 | } else {
|
6410 | wasmMemory = new WebAssembly.Memory({
|
6411 | initial: INITIAL_TOTAL_MEMORY / WASM_PAGE_SIZE
|
6412 | });
|
6413 | }
|
6414 | if (wasmMemory) {
|
6415 | buffer = wasmMemory.buffer;
|
6416 | }
|
6417 | INITIAL_TOTAL_MEMORY = buffer.byteLength;
|
6418 | updateGlobalBufferAndViews(buffer);
|
6419 | HEAP32[DYNAMICTOP_PTR >> 2] = DYNAMIC_BASE;
|
6420 | function callRuntimeCallbacks(callbacks) {
|
6421 | while (callbacks.length > 0) {
|
6422 | var callback = callbacks.shift();
|
6423 | if (typeof callback == "function") {
|
6424 | callback();
|
6425 | continue;
|
6426 | }
|
6427 | var func = callback.func;
|
6428 | if (typeof func === "number") {
|
6429 | if (callback.arg === undefined) {
|
6430 | Module["dynCall_v"](func);
|
6431 | } else {
|
6432 | Module["dynCall_vi"](func, callback.arg);
|
6433 | }
|
6434 | } else {
|
6435 | func(callback.arg === undefined ? null : callback.arg);
|
6436 | }
|
6437 | }
|
6438 | }
|
6439 | var __ATPRERUN__ = [];
|
6440 | var __ATINIT__ = [];
|
6441 | var __ATMAIN__ = [];
|
6442 | var __ATPOSTRUN__ = [];
|
6443 | var runtimeInitialized = false;
|
6444 | function preRun() {
|
6445 | if (Module["preRun"]) {
|
6446 | if (typeof Module["preRun"] == "function")
|
6447 | Module["preRun"] = [Module["preRun"]];
|
6448 | while (Module["preRun"].length) {
|
6449 | addOnPreRun(Module["preRun"].shift());
|
6450 | }
|
6451 | }
|
6452 | callRuntimeCallbacks(__ATPRERUN__);
|
6453 | }
|
6454 | function initRuntime() {
|
6455 | runtimeInitialized = true;
|
6456 | if (!Module["noFSInit"] && !FS.init.initialized) FS.init();
|
6457 | TTY.init();
|
6458 | callRuntimeCallbacks(__ATINIT__);
|
6459 | }
|
6460 | function preMain() {
|
6461 | FS.ignorePermissions = false;
|
6462 | callRuntimeCallbacks(__ATMAIN__);
|
6463 | }
|
6464 | function postRun() {
|
6465 | if (Module["postRun"]) {
|
6466 | if (typeof Module["postRun"] == "function")
|
6467 | Module["postRun"] = [Module["postRun"]];
|
6468 | while (Module["postRun"].length) {
|
6469 | addOnPostRun(Module["postRun"].shift());
|
6470 | }
|
6471 | }
|
6472 | callRuntimeCallbacks(__ATPOSTRUN__);
|
6473 | }
|
6474 | function addOnPreRun(cb) {
|
6475 | __ATPRERUN__.unshift(cb);
|
6476 | }
|
6477 | function addOnPostRun(cb) {
|
6478 | __ATPOSTRUN__.unshift(cb);
|
6479 | }
|
6480 | var Math_abs = Math.abs;
|
6481 | var Math_ceil = Math.ceil;
|
6482 | var Math_floor = Math.floor;
|
6483 | var Math_min = Math.min;
|
6484 | var runDependencies = 0;
|
6485 | var runDependencyWatcher = null;
|
6486 | var dependenciesFulfilled = null;
|
6487 | function getUniqueRunDependency(id) {
|
6488 | return id;
|
6489 | }
|
6490 | function addRunDependency(id) {
|
6491 | runDependencies++;
|
6492 | if (Module["monitorRunDependencies"]) {
|
6493 | Module["monitorRunDependencies"](runDependencies);
|
6494 | }
|
6495 | }
|
6496 | function removeRunDependency(id) {
|
6497 | runDependencies--;
|
6498 | if (Module["monitorRunDependencies"]) {
|
6499 | Module["monitorRunDependencies"](runDependencies);
|
6500 | }
|
6501 | if (runDependencies == 0) {
|
6502 | if (runDependencyWatcher !== null) {
|
6503 | clearInterval(runDependencyWatcher);
|
6504 | runDependencyWatcher = null;
|
6505 | }
|
6506 | if (dependenciesFulfilled) {
|
6507 | var callback = dependenciesFulfilled;
|
6508 | dependenciesFulfilled = null;
|
6509 | callback();
|
6510 | }
|
6511 | }
|
6512 | }
|
6513 | Module["preloadedImages"] = {};
|
6514 | Module["preloadedAudios"] = {};
|
6515 | function abort(what) {
|
6516 | if (Module["onAbort"]) {
|
6517 | Module["onAbort"](what);
|
6518 | }
|
6519 | what += "";
|
6520 | out(what);
|
6521 | err(what);
|
6522 | ABORT = true;
|
6523 | EXITSTATUS = 1;
|
6524 | what = "abort(" + what + "). Build with -s ASSERTIONS=1 for more info.";
|
6525 | throw new WebAssembly.RuntimeError(what);
|
6526 | }
|
6527 | var dataURIPrefix = "data:application/octet-stream;base64,";
|
6528 | function isDataURI(filename) {
|
6529 | return String.prototype.startsWith
|
6530 | ? filename.startsWith(dataURIPrefix)
|
6531 | : filename.indexOf(dataURIPrefix) === 0;
|
6532 | }
|
6533 | var wasmBinaryFile =
|
6534 | "data:application/octet-stream;base64,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KAIkQQFGBEAgASgCDBBmCwJAIAEoAgwoAixFDQAgASgCDC0AKEEBcQ0AIAEoAgwoAiwgASgCDBD2AgsgASgCDEEAQgBBBRAkGiABKAIMKAIABEAgASgCDCgCABAeCyABKAIMEBgLIAFBEGokAAuBAgEBfyMAQRBrIgEkACABIAA2AgwgASABKAIMKAIcNgIEIAEoAgQQ2gIgASABKAIEKAIUNgIIIAEoAgggASgCDCgCEEsEQCABIAEoAgwoAhA2AggLAkAgASgCCEUNACABKAIMKAIMIAEoAgQoAhAgASgCCBAcGiABKAIMIgAgASgCCCAAKAIMajYCDCABKAIEIgAgASgCCCAAKAIQajYCECABKAIMIgAgASgCCCAAKAIUajYCFCABKAIMIgAgACgCECABKAIIazYCECABKAIEIgAgACgCFCABKAIIazYCFCABKAIEKAIUDQAgASgCBCABKAIEKAIINgIQCyABQRBqJAALYAEBfyMAQRBrIgEkACABIAA2AgggASABKAIIQgIQITYCBAJAIAEoAgRFBEAgAUEAOwEODAELIAEgASgCBC0AACABKAIELQABQQh0ajsBDgsgAS8BDiEAIAFBEGokACAAC1oBAX8jAEEgayICJAAgAiAANgIcIAIgATcDECACIAIoAhwgAikDEBDKATYCDCACKAIMBEAgAigCHCIAIAIpAxAgACkDEHw3AxALIAIoAgwhACACQSBqJAAgAAtvAQF/IwBBEGsiAiQAIAIgADYCCCACIAE7AQYgAiACKAIIQgIQITYCAAJAIAIoAgBFBEAgAkF/NgIMDAELIAIoAgAgAi8BBjoAACACKAIAIAIvAQZBCHU6AAEgAkEANgIMCyACKAIMGiACQRBqJAALjwEBAX8jAEEQayICJAAgAiAANgIIIAIgATYCBCACIAIoAghCBBAhNgIAAkAgAigCAEUEQCACQX82AgwMAQsgAigCACACKAIEOgAAIAIoAgAgAigCBEEIdjoAASACKAIAIAIoAgRBEHY6AAIgAigCACACKAIEQRh2OgADIAJBADYCDAsgAigCDBogAkEQaiQAC7YCAQF/IwBBMGsiBCQAIAQgADYCJCAEIAE2AiAgBCACNwMYIAQgAzYCFAJAIAQoAiQpAxhCASAEKAIUrYaDUARAIAQoAiRBDGpBHEEAEBcgBEJ/NwMoDAELAkAgBCgCJCgCAEUEQCAEIAQoAiQoAgggBCgCICAEKQMYIAQoAhQgBCgCJCgCBBEDADcDCAwBCyAEIAQoAiQoAgAgBCgCJCgCCCAEKAIgIAQpAxggBCgCFCAEKAIkKAIEEQQANwMICyAEKQMIQgBTBEACQCAEKAIUQQRGDQAgBCgCFEEORg0AAkAgBCgCJCAEQghBBBAkQgBTBEAgBCgCJEEMakEUQQAQFwwBCyAEKAIkQQxqIAQoAgAgBCgCBBAXCwsLIAQgBCkDCDcDKAsgBCkDKCECIARBMGokACACCxcAIAAtAABBIHFFBEAgASACIAAQdBoLC1ABAX8jAEEQayIBJAAgASAANgIMA0AgASgCDARAIAEgASgCDCgCADYCCCABKAIMKAIMEBggASgCDBAYIAEgASgCCDYCDAwBCwsgAUEQaiQAC3cBAX8jAEGAAmsiBSQAAkAgAiADTA0AIARBgMAEcQ0AIAUgASACIANrIgRBgAIgBEGAAkkiARsQNCAAIAUgAQR/IAQFIAIgA2shAQNAIAAgBUGAAhAlIARBgH5qIgRB/wFLDQALIAFB/wFxCxAlCyAFQYACaiQAC30BAX8jAEEQayIBJAAgASAANgIMIAEoAgwEQCABQgA3AwADQCABKQMAIAEoAgwpAwhaRQRAIAEoAgwoAgAgASkDAKdBBHRqEGMgASABKQMAQgF8NwMADAELCyABKAIMKAIAEBggASgCDCgCKBApIAEoAgwQGAsgAUEQaiQACz4BAX8jAEEQayIBJAAgASAANgIMIAEoAgwEQCABKAIMKAIAEBggASgCDCgCDBAYIAEoAgwQGAsgAUEQaiQAC7gIAQF/IwBBMGsiBCQAIAQgADYCLCAEIAE2AiggBCACNgIkIAQgAzYCICAEQQA2AhQCQCAEKAIsKAKEAUEASgRAIAQoAiwoAgAoAixBAkYEQCAEKAIsENgCIQAgBCgCLCgCACAANgIsCyAEKAIsIAQoAixBmBZqEHkgBCgCLCAEKAIsQaQWahB5IAQgBCgCLBDXAjYCFCAEIAQoAiwoAqgtQQpqQQN2NgIcIAQgBCgCLCgCrC1BCmpBA3Y2AhggBCgCGCAEKAIcTQRAIAQgBCgCGDYCHAsMAQsgBCAEKAIkQQVqIgA2AhggBCAANgIcCwJAAkAgBCgCJEEEaiAEKAIcSw0AIAQoAihFDQAgBCgCLCAEKAIoIAQoAiQgBCgCIBBWDAELAkACQCAEKAIsKAKIAUEERwRAIAQoAhggBCgCHEcNAQsgBEEDNgIQAkAgBCgCLCgCvC1BECAEKAIQa0oEQCAEIAQoAiBBAmo2AgwgBCgCLCIAIAAvAbgtIAQoAgxB//8DcSAEKAIsKAK8LXRyOwG4LSAEKAIsLwG4LUH/AXEhASAEKAIsKAIIIQIgBCgCLCIDKAIUIQAgAyAAQQFqNgIUIAAgAmogAToAACAEKAIsLwG4LUEIdSEBIAQoAiwoAgghAiAEKAIsIgMoAhQhACADIABBAWo2AhQgACACaiABOgAAIAQoAiwgBCgCDEH//wNxQRAgBCgCLCgCvC1rdTsBuC0gBCgCLCIAIAAoArwtIAQoAhBBEGtqNgK8LQwBCyAEKAIsIgAgAC8BuC0gBCgCIEECakH//wNxIAQoAiwoArwtdHI7AbgtIAQoAiwiACAEKAIQIAAoArwtajYCvC0LIAQoAixB4N8AQeDoABCrAQwBCyAEQQM2AggCQCAEKAIsKAK8LUEQIAQoAghrSgRAIAQgBCgCIEEEajYCBCAEKAIsIgAgAC8BuC0gBCgCBEH//wNxIAQoAiwoArwtdHI7AbgtIAQoAiwvAbgtQf8BcSEBIAQoAiwoAgghAiAEKAIsIgMoAhQhACADIABBAWo2AhQgACACaiABOgAAIAQoAiwvAbgtQQh1IQEgBCgCLCgCCCECIAQoAiwiAygCFCEAIAMgAEEBajYCFCAAIAJqIAE6AAAgBCgCLCAEKAIEQf//A3FBECAEKAIsKAK8LWt1OwG4LSAEKAIsIgAgACgCvC0gBCgCCEEQa2o2ArwtDAELIAQoAiwiACAALwG4LSAEKAIgQQRqQf//A3EgBCgCLCgCvC10cjsBuC0gBCgCLCIAIAQoAgggACgCvC1qNgK8LQsgBCgCLCAEKAIsKAKcFkEBaiAEKAIsKAKoFkEBaiAEKAIUQQFqENYCIAQoAiwgBCgCLEGUAWogBCgCLEGIE2oQqwELCyAEKAIsEK4BIAQoAiAEQCAEKAIsEK0BCyAEQTBqJAAL1AEBAX8jAEEgayICJAAgAiAANgIYIAIgATcDECACIAIoAhhFOgAPAkAgAigCGEUEQCACIAIpAxCnEBsiADYCGCAARQRAIAJBADYCHAwCCwsgAkEYEBsiADYCCCAARQRAIAItAA9BAXEEQCACKAIYEBgLIAJBADYCHAwBCyACKAIIQQE6AAAgAigCCCACKAIYNgIEIAIoAgggAikDEDcDCCACKAIIQgA3AxAgAigCCCACLQAPQQFxOgABIAIgAigCCDYCHAsgAigCHCEAIAJBIGokACAAC3gBAX8jAEEQayIBJAAgASAANgIIIAEgASgCCEIEECE2AgQCQCABKAIERQRAIAFBADYCDAwBCyABIAEoAgQtAAAgASgCBC0AASABKAIELQACIAEoAgQtAANBCHRqQQh0akEIdGo2AgwLIAEoAgwhACABQRBqJAAgAAvUAQEBfyMAQTBrIgMkACADIAA2AiggAyABNwMgIAMgAjYCHAJAIAMoAigtAChBAXEEQCADQX82AiwMAQsCQCADKAIoKAIgQQBLBEAgAygCHEUNASADKAIcQQFGDQEgAygCHEECRg0BCyADKAIoQQxqQRJBABAXIANBfzYCLAwBCyADIAMpAyA3AwggAyADKAIcNgIQIAMoAiggA0EIakIQQQYQJEIAUwRAIANBfzYCLAwBCyADKAIoQQA6ADQgA0EANgIsCyADKAIsIQAgA0EwaiQAIAALYQEBfyMAQRBrIgIgADYCCCACIAE3AwACQCACKQMAIAIoAggpAwhWBEAgAigCCEEAOgAAIAJBfzYCDAwBCyACKAIIQQE6AAAgAigCCCACKQMANwMQIAJBADYCDAsgAigCDAvvAQEBfyMAQSBrIgIkACACIAA2AhggAiABNwMQIAIgAigCGEIIECE2AgwCQCACKAIMRQRAIAJBfzYCHAwBCyACKAIMIAIpAxBC/wGDPAAAIAIoAgwgAikDEEIIiEL/AYM8AAEgAigCDCACKQMQQhCIQv8BgzwAAiACKAIMIAIpAxBCGIhC/wGDPAADIAIoAgwgAikDEEIgiEL/AYM8AAQgAigCDCACKQMQQiiIQv8BgzwABSACKAIMIAIpAxBCMIhC/wGDPAAGIAIoAgwgAikDEEI4iEL/AYM8AAcgAkEANgIcCyACKAIcGiACQSBqJAALjwEBA38gACEBAkACQCAAQQNxRQ0AIAAtAABFBEAMAgsDQCABQQFqIgFBA3FFDQEgAS0AAA0ACwwBCwNAIAEiAkEEaiEBIAIoAgAiA0F/cyADQf/9+3dqcUGAgYKEeHFFDQALIANB/wFxRQRAIAIhAQwBCwNAIAItAAEhAyACQQFqIgEhAiADDQALCyABIABrC4sDAQF/IwBBMGsiAyQAIAMgADYCJCADIAE2AiAgAyACNwMYAkAgAygCJC0AKEEBcQRAIANCfzcDKAwBCwJAAkAgAygCJCgCIEEATQ0AIAMpAxhC////////////AFYNACADKQMYQgBYDQEgAygCIA0BCyADKAIkQQxqQRJBABAXIANCfzcDKAwBCyADKAIkLQA1QQFxBEAgA0J/NwMoDAELAn8jAEEQayIAIAMoAiQ2AgwgACgCDC0ANEEBcQsEQCADQgA3AygMAQsgAykDGFAEQCADQgA3AygMAQsgA0IANwMQA0AgAykDECADKQMYVARAIAMgAygCJCADKAIgIAMpAxCnaiADKQMYIAMpAxB9QQEQJCICNwMIIAJCAFMEQCADKAIkQQE6ADUgAykDEFAEQCADQn83AygMBAsgAyADKQMQNwMoDAMLIAMpAwhQBEAgAygCJEEBOgA0BSADIAMpAwggAykDEHw3AxAMAgsLCyADIAMpAxA3AygLIAMpAyghAiADQTBqJAAgAgs2AQF/IwBBEGsiASAANgIMAn4gASgCDC0AAEEBcQRAIAEoAgwpAwggASgCDCkDEH0MAQtCAAsLsgECAX8BfiMAQRBrIgEkACABIAA2AgQgASABKAIEQggQITYCAAJAIAEoAgBFBEAgAUIANwMIDAELIAEgASgCAC0AAK0gASgCAC0AB61COIYgASgCAC0ABq1CMIZ8IAEoAgAtAAWtQiiGfCABKAIALQAErUIghnwgASgCAC0AA61CGIZ8IAEoAgAtAAKtQhCGfCABKAIALQABrUIIhnx8NwMICyABKQMIIQIgAUEQaiQAIAIL8QICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgA2AgAgAyACIARrQXxxIgJqIgFBfGogADYCACACQQlJDQAgAyAANgIIIAMgADYCBCABQXhqIAA2AgAgAUF0aiAANgIAIAJBGUkNACADIAA2AhggAyAANgIUIAMgADYCECADIAA2AgwgAUFwaiAANgIAIAFBbGogADYCACABQWhqIAA2AgAgAUFkaiAANgIAIAIgA0EEcUEYciIBayICQSBJDQAgAK0iBUIghiAFhCEFIAEgA2ohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCwvcAQEBfyMAQRBrIgEkACABIAA2AgwgASgCDARAIAEoAgwoAigEQCABKAIMKAIoQQA2AiggASgCDCgCKEIANwMgIAEoAgwCfiABKAIMKQMYIAEoAgwpAyBWBEAgASgCDCkDGAwBCyABKAIMKQMgCzcDGAsgASABKAIMKQMYNwMAA0AgASkDACABKAIMKQMIWkUEQCABKAIMKAIAIAEpAwCnQQR0aigCABAYIAEgASkDAEIBfDcDAAwBCwsgASgCDCgCABAYIAEoAgwoAgQQGCABKAIMEBgLIAFBEGokAAtrAQF/IwBBIGsiAiAANgIcIAJCASACKAIcrYY3AxAgAkEMaiABNgIAA0AgAiACKAIMIgBBBGo2AgwgAiAAKAIANgIIIAIoAghBAEhFBEAgAiACKQMQQgEgAigCCK2GhDcDEAwBCwsgAikDEAuoAQEBfyMAQRBrIgEkACABIAA2AggCQCABKAIIKAIgQQBNBEAgASgCCEEMakESQQAQFyABQX82AgwMAQsgASgCCCIAIAAoAiBBf2o2AiAgASgCCCgCIEUEQCABKAIIQQBCAEECECQaIAEoAggoAgAEQCABKAIIKAIAEDdBAEgEQCABKAIIQQxqQRRBABAXCwsLIAFBADYCDAsgASgCDCEAIAFBEGokACAACy8BAX8jAEEQayIBJAAgASAANgIMIAEoAgwoAggQGCABKAIMQQA2AgggAUEQaiQAC80BAQF/IwBBEGsiAiQAIAIgADYCCCACIAE2AgQCQCACKAIILQAoQQFxBEAgAkF/NgIMDAELIAIoAgRFBEAgAigCCEEMakESQQAQFyACQX82AgwMAQsgAigCBBA9IAIoAggoAgAEQCACKAIIKAIAIAIoAgQQOUEASARAIAIoAghBDGogAigCCCgCABAaIAJBfzYCDAwCCwsgAigCCCACKAIEQjhBAxAkQgBTBEAgAkF/NgIMDAELIAJBADYCDAsgAigCDCEAIAJBEGokACAAC2ACAX8BfiMAQRBrIgEkACABIAA2AgQCQCABKAIEKAIkQQFHBEAgASgCBEEMakESQQAQFyABQn83AwgMAQsgASABKAIEQQBCAEENECQ3AwgLIAEpAwghAiABQRBqJAAgAgugAQEBfyMAQSBrIgMkACADIAA2AhggAyABNgIUIAMgAjcDCCADIAMoAhgoAgAgAygCFCADKQMIEMcBIgI3AwACQCACQgBTBEAgAygCGEEIaiADKAIYKAIAEBogA0F/NgIcDAELIAMpAwAgAykDCFIEQCADKAIYQQhqQQZBGxAXIANBfzYCHAwBCyADQQA2AhwLIAMoAhwhACADQSBqJAAgAAvfBAEBfyMAQSBrIgIgADYCGCACIAE2AhQCQCACKAIYRQRAIAJBATYCHAwBCyACIAIoAhgoAgA2AgwCQCACKAIYKAIIBEAgAiACKAIYKAIINgIQDAELIAJBATYCECACQQA2AggDQAJAIAIoAgggAigCGC8BBE8NAAJAIAIoAgwgAigCCGotAABBH0oEQCACKAIMIAIoAghqLQAAQYABSA0BCyACKAIMIAIoAghqLQAAQQ1GDQAgAigCDCACKAIIai0AAEEKRg0AIAIoAgwgAigCCGotAABBCUYEQAwBCyACQQM2AhACQCACKAIMIAIoAghqLQAAQeABcUHAAUYEQCACQQE2AgAMAQsCQCACKAIMIAIoAghqLQAAQfABcUHgAUYEQCACQQI2AgAMAQsCQCACKAIMIAIoAghqLQAAQfgBcUHwAUYEQCACQQM2AgAMAQsgAkEENgIQDAQLCwsgAigCCCACKAIAaiACKAIYLwEETwRAIAJBBDYCEAwCCyACQQE2AgQDQCACKAIEIAIoAgBNBEAgAigCDCACKAIIIAIoAgRqai0AAEHAAXFBgAFHBEAgAkEENgIQDAYFIAIgAigCBEEBajYCBAwCCwALCyACIAIoAgAgAigCCGo2AggLIAIgAigCCEEBajYCCAwBCwsLIAIoAhggAigCEDYCCCACKAIUBEACQCACKAIUQQJHDQAgAigCEEEDRw0AIAJBAjYCECACKAIYQQI2AggLAkAgAigCFCACKAIQRg0AIAIoAhBBAUYNACACQQU2AhwMAgsLIAIgAigCEDYCHAsgAigCHAtqAQF/IwBBEGsiASAANgIMIAEo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AhQgASgCHCgCbCABKAIQIAEoAhwoAixBhgJrak8EQCABKAIcKAI4IAEoAhwoAjggASgCEGogASgCECABKAIUaxAcGiABKAIcIgAgACgCcCABKAIQazYCcCABKAIcIgAgACgCbCABKAIQazYCbCABKAIcIgAgACgCXCABKAIQazYCXCABKAIcEM0CIAEgASgCECABKAIUajYCFAsgASgCHCgCACgCBARAIAEgASgCHCgCACABKAIcKAJ0IAEoAhwoAjggASgCHCgCbGpqIAEoAhQQdTYCGCABKAIcIgAgASgCGCAAKAJ0ajYCdCABKAIcKAJ0IAEoAhwoArQtakEDTwRAIAEgASgCHCgCbCABKAIcKAK0LWs2AgwgASgCHCABKAIcKAI4IAEoAgxqLQAANgJIIAEoAhwgASgCHCgCVCABKAIcKAI4IAEoAgxBAWpqLQAAIAEoAhwoAkggASgCHCgCWHRzcTYCSANAIAEoAhwoArQtBEAgASgCHCABKAIcKAJUIAEoAhwoAjggASgCDEECamotAAAgASgCHCgCSCABKAIcKAJYdHNxNgJIIAEoAhwoAkAgASgCDCABKAIcKAI0cUEBdGogASgCHCgCRCABKAIcKAJIQQF0ai8BADsBACABKAIcKAJEIAEoAhwoAkhBAXRqIAEoAgw7AQAgASABKAIMQQFqNgIMIAEoAhwiACAAKAK0LUF/ajYCtC0gASgCHCgCdCABKAIcKAK0LWpBA08NAQsLC0EAIQAgASgCHCgCdEGGAkkEfyABKAIcKAIAKAIEQQBHBUEAC0EBcQ0BCwsgASgCHCgCwC0gASgCHCgCPEkEQCABIAEoAhwoAmwgASgCHCgCdGo2AggCQCABKAIcKALALSABKAIISQRAIAEgASgCHCgCPCABKAIIazYCBCABKAIEQYICSwRAIAFBggI2AgQLIAEoAhwoAjggASgCCGpBACABKAIEEDQgASgCHCABKAIIIAEoAgRqNgLALQwBCyABKAIcKALALSABKAIIQYICakkEQCABIAEoAghBggJqIAEoAhwoAsAtazYCBCABKAIEIAEoAhwoAjwgASgCHCgCwC1rSwRAIAEgASgCHCgCPCABKAIcKALALWs2AgQLIAEoAhwoAjggASgCHCgCwC1qQQAgASgCBBA0IAEoAhwiACABKAIEIAAoAsAtajYC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CwJAIAMoAqQBLwFSRQRAIAMoAqQBIgAgAC8BDEH+/wNxOwEMDAELIAMoAqQBIgAgAC8BDEEBcjsBDAsgAyADKAKkASADKAKgARCCAUEBcToAhgEgAyADKAKgAUGACnFBgApHBH8gAy0AhgEFQQELQQFxOgCHASADAn9BASADKAKkAS8BUkGBAkYNABpBASADKAKkAS8BUkGCAkYNABogAygCpAEvAVJBgwJGC0EBcToAhQEgAy0AhwFBAXEEQCADIANBIGpCHBArNgIcIAMoAhxFBEAgAygCqAFBCGpBDkEAEBcgAygCkAEQJiADQX82AqwBDAILAkAgAygCoAFBgAJxBEACQCADKAKgAUGACHENACADKAKkASkDIEL/////D1YNACADKAKkASkDKEL/////D1gNAgsgAygCHCADKAKkASkDKBAvIAMoAhwgAygCpAEpAyAQLwwBCwJAAkAgAygCoAFBgAhxDQAgAygCpAEpAyBC/////w9WDQAgAygCpAEpAyhC/////w9WDQAgAygCpAEpA0hC/////w9YDQELIAMoAqQBKQMoQv////8PWgRAIAMoAhwgAygCpAEpAygQLwsgAygCpAEpAyBC/////w9aBEAgAygCHCADKAKkASkDIBAvCyADKAKkASkDSEL/////D1oEQCADKAIcIAMoAqQBKQNIEC8LCwsCfyMAQRBrIgAgAygCHDYCDCAAKAIMLQAAQQFxRQsEQCADKAKoAUEIakEUQQAQFyADKAIcEBkgAygCkAEQJiADQX82AqwBDAILIANBAQJ/IwBBEGsiACADKAIcNgIMAn4gACgCDC0AAEEBcQRAIAAoAgwpAxAMAQtCAAunQf//A3ELIANBIGpBgAYQXjYCjAEgAygCHBAZIAMoAowBIAMoApABNgIAIAMgAygCjAE2ApABCyADLQCFAUEBcQRAIAMgA0EVakIHECs2AhAgAygCEEUEQCADKAKoAUEIakEOQQAQFyADKAKQARAmIANBfzYCrAEMAgsgAygCEEECECIgAygCEEHv1wBBAhBCIAMoAhAgAygCpAEvAVJB/wFxEIUBIAMoAhAgAygCpAEoAhBB//8DcRAiAn8jAEEQayIAIAMoAhA2AgwgACgCDC0AAEEBcUULBEAgAygCqAFBCGpBFEEAEBcgAygCEBAZIAMoApABECYgA0F/NgKsAQwCCyADQYGyAkEHIANBFWpBgAYQXjYCDCADKAIQEBkgAygCDCADKAKQATYCACADIAMoAgw2ApABCyADIANB0ABqQi4QKyIANgJMIABFBEAgAygCqAFBCGpBDkEAEBcgAygCkAEQJiADQX82AqwBDAELIAMoAkxB5dcAQerXACADKAKgAUGAAnEbQQQQQiADKAKgAUGAAnFFBEAgAygCTAJ/QS0gAy0AhgFBAXENABogAygCpAEvAQgLQf//A3EQIgsgAygCTAJ/QS0gAy0AhgFBAXENABogAygCpAEvAQoLQf//A3EQIiADKAJMIAMoAqQBLwEMECICQCADLQCFAUEBcQRAIAMoAkxB4wAQIgwBCyADKAJMIAMoAqQBKAIQQf//A3EQIgsgAygCpAEoAhQgA0GeAWogA0GcAWoQuwEgAygCTCADLwGeARAiIAMoAkwgAy8BnAEQIgJAAkAgAy0AhQFBAXFFDQAgAygCpAEpAyhCFFoNACADKAJMQQAQIwwBCyADKAJMIAMoAqQBKAIYECMLAkACQCADKAKgAUGAAnFBgAJHDQAgAygCpAEpAyBC/////w9UBEAgAygCpAEpAyhC/////w9UDQELIAMoAkxBfxAjIAMoAkxBfxAjDAELAkAgAygCpAEpAyBC/////w9UBEAgAygCTCADKAKkASkDIKcQIwwBCyADKAJMQX8QIwsCQCADKAKkASkDKEL/////D1QEQCADKAJMIAMoAqQBKQMopxAjDAELIAMoAkxBfxAjCwsgAygCTCADKAKkASgCMBBgQf//A3EQIiADIAMoAqQBKAI0IAMoAqABEMABQf//A3EgAygCkAFBgAYQwAFB//8DcWo2AogBIAMoAkwgAygCiAFB//8DcRAiIAMoAqABQYACcUUEQCADKAJMIAMoAqQBKAI4EGBB//8DcRAiIAMoAkwgAygCpAEoAjxB//8DcRAiIAMoAkwgAygCpAEvAUAQIiADKAJMIAMoAqQBKAJEECMCQCADKAKkASkDSEL/////D1QEQCADKAJMIAMoAqQBKQNIpxAjDAELIAMoAkxBfxAjCwsCfyMAQRBrIgAgAygCTDYCDCAAKAIMLQAAQQFxRQsEQCADKAKoAUEIakEUQQAQFyADKAJMEBkgAygCkAEQJiADQX82AqwBDAELIAMoAqgBIANB0ABq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QCACIAIoAhgiATYCECACKAIsQdwWaiEDIAIoAiwiBCgC0ChBAWohACAEIAA2AtAoIABBAnQgA2ogATYCACACKAIYIAIoAixB2ChqakEAOgAADAELIAIoAiQgAigCGEECdGpBADsBAgsgAiACKAIYQQFqNgIYDAELCwNAIAIoAiwoAtAoQQJIBEACQCACKAIQQQJIBEAgAiACKAIQQQFqIgA2AhAMAQtBACEACyACKAIsQdwWaiEDIAIoAiwiBCgC0ChBAWohASAEIAE2AtAoIAFBAnQgA2ogADYCACACIAA2AgwgAigCJCACKAIMQQJ0akEBOwEAIAIoAgwgAigCLEHYKGpqQQA6AAAgAigCLCIAIAAoAqgtQX9qNgKoLSACKAIgBEAgAigCLCIAIAAoAqwtIAIoAiAgAigCDEECdGovAQJrNgKsLQsMAQsLIAIoAiggAigCEDYCBCACIAIoAiwoAtAoQQJtNgIYA0AgAigCGEEBSEUEQCACKAIsIAIoAiQgAigCGBB3IAIgAigCGEF/ajYCGAwBCwsgAiACKAIcNgIMA0AgAiACKAIsKALgFjYCGCACKAIsQdwWaiEBIAIoAiwiAygC0CghACADIABBf2o2AtAoIAIoAiwgAEECdCABaigCADYC4BYgAigCLCACKAIkQQEQdyACIAIoAiwoAuAWNgIUIAIoAhghASACKAIsQdwWaiEDIAIoAiwiBCgC1ChBf2ohACAEIAA2AtQoIABBAnQgA2ogATYCACACKAIUIQEgAigCLEHcFmohAyACKAIsIgQoAtQoQX9qIQAgBCAANgLUKCAAQQJ0IANqIAE2AgAgAigCJCACKAIMQQJ0aiACKAIkIAIoAhhBAnRqLwEAIAIoAiQgAigCFEECdGovAQBqOwEAIAIoAgwgAigCLEHYKGpqAn8gAigCGCACKAIsQdgoamotAAAgAigCFCACKAIsQdgoamotAABOBEAgAigCGCACKAIsQdgoamotAAAMAQsgAigCFCACKAIsQdgoamotAAALQQFqOgAAIAIoAiQgAigCFEECdGogAigCDCIAOwECIAIoAiQgAigCGEECdGogADsBAiACIAIoAgwiAEEBajYCDCACKAIsIAA2AuAWIAIoAiwgAigCJEEBEHcgAigCLCgC0ChBAk4NAAsgAigCLCgC4BYhASACKAIsQdwW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LCACIAIoAjgoAng2AiAgAiACKAI4KAKQATYCHCACAn8gAigCOCgCbCACKAI4KAIsQYYCa0sEQCACKAI4KAJsIAIoAjgoAixBhgJrawwBC0EACzYCGCACIAIoAjgoAkA2AhQgAiACKAI4KAI0NgIQIAIgAigCOCgCOCACKAI4KAJsakGCAmo2AgwgAiACKAIsIAIoAiBBAWtqLQAAOgALIAIgAigCLCACKAIgai0AADoACiACKAI4KAJ4IAIoAjgoAowBTwRAIAIgAigCMEECdjYCMAsgAigCHCACKAI4KAJ0SwRAIAIgAigCOCgCdDYCHAsDQAJAIAIgAigCOCgCOCACKAI0ajYCKAJAIAIoAiggAigCIGotAAAgAi0ACkcNACACKAIoIAIoAiBBAWtqLQAAIAItAAtHDQAgAigCKC0AACACKAIsLQAARw0AIAIgAigCKCIAQQFqNgIoIAAtAAEgAigCLC0AAUcEQAwBCyACIAIoAixBAmo2AiwgAiACKAIoQQFqNgIoA0AgAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoAn9BACAALQABIAFHDQAaIAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AihBACAALQABIAFHDQAaIAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AihBACAALQABIAFHDQAaIAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAigCLCACKAIMSQtBAXENAAsgAkGCAiACKAIMIAIoAixrazYCJCACIAIoAgxB/n1qNgIsIAIoAiQgAigCIEoEQCACKAI4IAIoAjQ2AnAgAiACKAIkNgIgIAIoAiQgAigCHE4NAiACIAIoAiwgAigCIEEBa2otAAA6AAsgAiACKAIsIAIoAiBqLQAAOgAKCwsgAiACKAIUIAIoAjQgAigCEHFBAXRqLwEAIgE2AjRBACEAIAEgAigCGEsEfyACIAIoAjBBf2oiADYCMCAAQQBHBUEAC0EBcQ0BCwsCQCACKAIgIAIoAjgoAnRNBEAgAiACKAIgNgI8DAELIAIgAigCOCgCdDYCPAsgAigCPAueEAEBfyMAQTBrIgIkACACIAA2AiggAiABNgIkIAICfyACKAIoKAIMQQVrIAIoAigoAixLBEAgAigCKCgCLAwBCyACKAIoKAIMQQVrCzYCICACQQA2AhAgAiACKAIoKAIAKAIENgIMA0ACQCACQf//AzYCHCACIAIoAigoArwtQSpqQQN1NgIUIAIoAigoAgAoAhAgAigCFEkNACACIAIoAigoAgAoAhAgAigCFGs2AhQgAiACKAIoKAJsIAIoAigoAlxrNgIYIAIoAhwgAigCGCACKAIoKAIAKAIEaksEQCACIAIoAhggAigCKCgCACgCBGo2AhwLIAIoAhwgAigCFEsEQCACIAIoAhQ2AhwLAkAgAigCHCACKAIgTw0AAkAgAigCHEUEQCACKAIkQQRHDQELIAIoAiRFDQAgAigCHCACKAIYIAIoAigoAgAoAgRqRg0BCwwBC0EAIQAgAkEBQQAgAigCJEEERgR/IAIoAhwgAigCGCACKAIoKAIAKAIEakYFQQALQQFxGzYCECACKAIoQQBBACACKAIQEFYgAigCKCgCCCACKAIoKAIUQQRraiACKAIcOgAAIAIoAigoAgggAigCKCgCFEEDa2ogAigCHEEIdjoAACACKAIoKAIIIAIoAigoAhRBAmtqIAIoAhxBf3M6AAAgAigCKCgCCCACKAIoKAIUQQFraiACKAIcQX9zQQh2OgAAIAIoAigoAgAQHyACKAIYBEAgAigCGCACKAIcSwRAIAIgAigCHDYCGAsgAigCKCgCACgCDCACKAIoKAI4IAIoAigoAlxqIAIoAhgQHBogAigCKCgCACIAIAIoAhggACgCDGo2AgwgAigCKCgCACIAIAAoAhAgAigCGGs2AhAgAigCKCgCACIAIAIoAhggACgCFGo2AhQgAigCKCIAIAIoAhggACgCXGo2AlwgAiACKAIcIAIoAhhrNgIcCyACKAIcBEAgAigCKCgCACACKAIoKAIAKAIMIAIoAhwQdRogAigCKCgCACIAIAIoAhwgACgCDGo2AgwgAigCKCgCACIAIAAoAhAgAigCHGs2AhAgAigCKCgCACIAIAIoAhwgACgCFGo2AhQLIAIoAhBFDQELCyACIAIoAgwgAigCKCgCACgCBGs2AgwgAigCDARAAkAgAigCDCACKAIoKAIsTwRAIAIoAihBAjYCsC0gAigCKCgCOCACKAIoKAIAKAIAIAIoAigoAixrIAIoAigoAiwQHBogAigCKCACKAIoKAIsNgJsDAELIAIoAigoAjwgAigCKCgCbGsgAigCDE0EQCACKAIoIgAgACgCbCACKAIoKAIsazYCbCACKAIoKAI4IAIoAigoAjggAigCKCgCLGogAigCKCgCbBAcGiACKAIoKAKwLUECSQRAIAIoAigiACAAKAKwLUEBajYCsC0LCyACKAIoKAI4IAIoAigoAmxqIAIoAigoAgAoAgAgAigCDGsgAigCDBAcGiACKAIoIgAgAigCDCAAKAJsajYCbAsgAigCKCACKAIoKAJsNgJcIAIoAigiAQJ/IAIoAgwgAigCKCgCLCACKAIoKAK0LWtLBEAgAigCKCgCLCACKAIoKAK0LWsMAQsgAigCDAsgASgCtC1qNgK0LQsgAigCKCgCwC0gAigCKCgCbEkEQCACKAIoIAIoAigoAmw2AsAtCwJAIAIoAhAEQCACQQM2AiwMAQsCQCACKAIkRQ0AIAIoAiRBBEYNACACKAIoKAIAKAIEDQAgAigCKCgCbCACKAIoKAJcRw0AIAJBATYCLAwBCyACIAIoAigoAjwgAigCKCgCbGtBAWs2AhQCQCACKAIoKAIAKAIEIAIoAhRNDQAgAigCKCgCXCACKAIoKAIsSA0AIAIoAigiACAAKAJcIAIoAigoAixrNgJcIAIoAigiACAAKAJsIAIoAigoAixrNgJsIAIoAigoAjggAigCKCgCOCACKAIoKAIsaiACKAIoKAJsEBwaIAIoAigoArAtQQJJBEAgAigCKCIAIAAoArAtQQFqNgKwLQsgAiACKAIoKAIsIAIoAhRqNgIUCyACKAIUIAIoAigoAgAoAgRLBEAgAiACKAIoKAIAKAIENgIUCyACKAIUBEAgAigCKCgCACACKAIoKAI4IAIoAigoAmxqIAIoAhQQdRogAigCKCIAIAIoAhQgACgCbGo2AmwLIAIoAigoAsAtIAIoAigoAmxJBEAgAigCKCACKAIoKAJsNgLALQsgAiACKAIoKAK8LUEqakEDdTYCFCACAn9B//8DIAIoAigoAgwgAigCFGtB//8DSw0AGiACKAIoKAIMIAIoAhRrCzYCFCACAn8gAigCFCACKAIoKAIsSwRAIAIoAigoAiwMAQsgAigCFAs2AiAgAiACKAIoKAJsIAIoAigoAlxrNgIYAkAgAigCGCACKAIgSQRAIAIoAhhFBEAgAigCJEEERw0CCyACKAIkRQ0BIAIoAigoAgAoAgQNASACKAIYIAIoAhRLDQELIAICfyACKAIYIAIoAhRLBEAgAigCFAwBCyACKAIYCzYCHCACQQFBAAJ/QQAgAigCJEEERw0AGkEAIAIoAigoAgAoAgQNABogAigCHCACKAIYRgtBAXEbNgIQIAIoAiggAigCKCgCOCACKAIoKAJcaiACKAIcIAIoAhAQViACKAIoIgAgAigCHCAAKAJcajYCXCACKAIoKAIAEB8LIAJBAkEAIAIoAhAbNgIsCyACKAIsIQAgAkEwaiQAIAALsgIBAX8jAEEQayIBJAAgASAANgIIAkAgASgCCBB2BEAgAUF+NgIMDAELIAEgASgCCCgCHCgCBDYCBCABKAIIKAIcKAIIBEAgASgCCCgCKCABKAIIKAIcKAIIIAEoAggoAiQRAgALIAEoAggoAhwoAkQEQCABKAIIKAIoIAEoAggoAhwoAkQgASgCCCgCJBECAAsgASgCCCgCHCgCQARAIAEoAggoAiggASgCCCgCHCgCQCABKAIIKAIkEQIACyABKAIIKAIcKAI4BEAgASgCCCgCKCABKAIIKAIcKAI4IAEoAggoAiQRAgALIAEoAggoAiggASgCCCgCHCABKAIIKAIkEQIAIAEoAghBADYCHCABQX1BACABKAIEQfEARhs2AgwLIAEoAgwhACABQRBqJAAgAAvrFwECfyMAQfAAayIDIAA2AmwgAyABNgJoIAMgAjYCZCADQX82AlwgAyADKAJoLwECNgJUIANBADYCUCADQQc2AkwgA0EENgJIIAMoAlRFBEAgA0GKATYCTCADQQM2AkgLIANBADYCYANAIAMoAmAgAygCZEpFBEAgAyADKAJUNgJYIAMgAygCaCADKAJgQQFq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AygCbCIAIAAoArwtIAMoAgxBEGtqNgK8LQwBCyADKAJsIgAgAC8BuC0gAygCUEELa0H//wNxIAMoAmwoArwtdHI7AbgtIAMoAmwiACADKAIMIAAoArwtajYCvC0LCwsLIANBADYCUCADIAMoAlg2AlwCQCADKAJURQRAIANBigE2AkwgA0EDNgJIDAELAkAgAygCWCADKAJURgRAIANBBjYCTCADQQM2AkgMAQsgA0EHNgJMIANBBDYCSAsLCyADIAMoAmBBAWo2AmAMAQsLC5EEAQF/IwBBMGsiAyAANgIsIAMgATYCKCADIAI2AiQgA0F/NgIcIAMgAygCKC8BAjYCFCADQQA2AhAgA0EHNgIMIANBBDYCCCADKAIURQRAIANBigE2AgwgA0EDNgIICyADKAIoIAMoAiRBAWpBAnRqQf//AzsBAiADQQA2AiADQCADKAIgIAMoAiRKRQRAIAMgAygCFDYCGCADIAMoAiggAygCIEEBakECdGovAQI2AhQgAyADKAIQQQFqIgA2AhACQAJAIAAgAygCDE4NACADKAIYIAMoAhRHDQAMAQsCQCADKAIQIAMoAghIBEAgAygCLEH8FGogAygCGEECdGoiACADKAIQIAAvAQBqOwEADAELAkAgAygCGARAIAMoAhggAygCHEcEQCADKAIsIAMoAhhBAnRqQfwUaiIAIAAvAQBBAWo7AQALIAMoAiwiACAAQbwVai8BAEEBajsBvBUMAQsCQCADKAIQQQpMBEAgAygCLCIAIABBwBVqLwEAQQFqOwHAFQwBCyADKAIsIgAgAEHEFWovAQBBAWo7AcQVCwsLIANBADYCECADIAMoAhg2AhwCQCADKAIURQRAIANBigE2AgwgA0EDNgIIDAELAkAgAygCGCADKAIURgRAIANBBjYCDCADQQM2AggMAQsgA0EHNgIMIANBBDYCCAsLCyADIAMoAiBBAWo2AiAMAQsLC6cSAQJ/IwBB0ABrIgMgADYCTCADIAE2AkggAyACNgJEIANBADYCOCADKAJMKAKgLQRAA0AgAyADKAJMKAKkLSADKAI4QQF0ai8BADYCQCADKAJMKAKYLSEAIAMgAygCOCIBQQFqNgI4IAMgACABai0AADYCPAJAIAMoAkBFBEAgAyADKAJIIAMoAjxBAnRqLwECNgIsAkAgAygCTCgCvC1B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AgRBITsBACADKAIIQQA7AQAMAQsgAygCACgCFEHQAEgEQCADKAIAQdAANgIUCyADKAIEIAMoAgAoAgwgAygCACgCFEEJdCADKAIAKAIQQQV0akGgwH1qajsBACADKAIIIAMoAgAoAghBC3QgAygCACgCBEEFdGogAygCACgCAEEBdWo7AQALIANBEGokAAuDAwEBfyMAQSBrIgMkACADIAA7ARogAyABNgIUIAMgAjYCECADIAMoAhQgA0EIakHAAEEAEE8iADYCDAJAIABFBEAgA0EANgIcDAELIAMoAghBBWpB//8DSwRAIAMoAhBBEkEAEBcgA0EANgIcDAELIANBACADKAIIQQVqrRArIgA2AgQgAEUEQCADKAIQQQ5BABAXIANBADYCHAwBCyADKAIEQQEQhQEgAygCBCADKAIUEMYBECMgAygCBCADKAIMIAMoAggQQgJ/IwBBEGsiACADKAIENgIMIAAoAgwtAABBAXFFCwRAIAMoAhBBFEEAEBcgAygCBBAZIANBADYCHAwBCyADIAMvARoCfyMAQRBrIgAgAygCBDYCDAJ+IAAoAgwtAABBAXEEQCAAKAIMKQMQDAELQgALp0H//wNxCwJ/IwBBEGsiACADKAIENgIMIAAoAgwoAgQLQYAGEF42AgAgAygCBBAZIAMgAygCADYCHAsgAygCHCEAIANBIGokACAAC7QCAQF/IwBBMGsiAyQAIAMgADYCKCADIAE3AyAgAyACNgIcAkAgAykDIFAEQCADQQE6AC8MAQsgAyADKAIoKQMQIAMpAyB8NwMIAkAgAykDCCADKQMgWgRAIAMpAwhC/////wBYDQELIAMoAhxBDkEAEBcgA0EAOgAvDAELIAMgAygCKCgCACADKQMIp0EEdBBJIgA2AgQgAEUEQCADKAIcQQ5BABAXIANBADoALwwBCyADKAIoIAMoAgQ2AgAgAyADKAIoKQMINwMQA0AgAykDECADKQMIWkUEQCADKAIoKAIAIAMpAxCnQQR0ahCHASADIAMpAxBCAXw3AxAMAQsLIAMoAiggAykDCCIBNwMQIAMoAiggATcDCCADQQE6AC8LIAMtAC9BAXEhACADQTBqJAAgAAvMAQEBfyMAQSBrIgIkACACIAA3AxAgAiABNgIMIAJBMBAbIgE2AggCQCABRQRAIAIoAgxBDkEAEBcgAkEANgIcDAELIAIoAghBADYCACACKAIIQgA3AxAgAigCCEIANwMIIAIoAghCADcDICACKAIIQgA3AxggAigCCEEANgIoIAIoAghBADoALCACKAIIIAIpAxAgAigCDBC9AUEBcUUEQCACKAIIECggAkEANgIcDAELIAIgAigCCDYCHAsgAigCHCEBIAJBIGokACABC9kCAQF/IwBBIGsiAyQAIAMgADYCGCADIAE2AhQgAyACNgIQIAMgA0EMakIEECs2AggCQCADKAIIRQRAIANBfzYCHAwBCwNAIAMoAhQEQCADKAIUKAIEIAMoAhBxQYAGcQRAIAMoAghCABAuGiADKAIIIAMoAhQvAQgQIiADKAIIIAMoAhQvAQoQIgJ/IwBBEGsiACADKAIINgIMIAAoAgwtAABBAXFFCwRAIAMoAhhBCGpBFEEAEBcgAygCCBAZIANBfzYCHAwECyADKAIYIANBDGpCBBA7QQBIBEAgAygCCBAZIANBfzYCHAwECyADKAIULwEKQQBKBEAgAygCGCADKAIUKAIMIAMoAhQvAQqtEDtBAEgEQCADKAIIEBkgA0F/NgIcDAULCwsgAyADKAIUKAIANgIUDAELCyADKAIIEBkgA0EANgIcCyADKAIcIQAgA0EgaiQAIAALaAEBfyMAQRBrIgIgADYCDCACIAE2AgggAkEAOwEGA0AgAigCDARAIAIoAgwoAgQgAigCCHFBgAZxBEAgAiACKAIMLwEKIAIvAQZBBGpqOwEGCyACIAIoAgwoAgA2AgwMAQsLIAIvAQYL8AEBAX8jAEEQayIBJAAgASAANgIMIAEgASgCDDYCCCABQQA2AgQDQCABKAIMBEACQAJAIAEoAgwvAQhB9cYBRg0AIAEoAgwvAQhB9eABRg0AIAEoAgwvAQhBgbICRg0AIAEoAgwvAQhBAUcNAQsgASABKAIMKAIANgIAIAEoAgggASgCDEYEQCABIAEoAgA2AggLIAEoAgxBADYCACABKAIMECYgASgCBARAIAEoAgQgASgCADYCAAsgASABKAIANgIMDAILIAEgASgCDDYCBCABIAEoAgwoAgA2AgwMAQsLIAEoAgghACABQRBqJAAgAAuzBAEBfyMAQUBqIgUkACAFIAA2AjggBSABOwE2IAUgAjYCMCAFIAM2AiwgBSAENgIoIAUgBSgCOCAFLwE2rRArIgA2AiQCQCAARQRAIAUoAihBDkEAEBcgBUEAOgA/DAELIAVBADYCICAFQQA2AhgDQAJ/IwBBEGsiACAFKAIkNgIMIAAoAgwtAABBAXELBH8gBSgCJBAyQgRaBUEAC0EBcQRAIAUgBSgCJBAgOwEWIAUgBSgCJBAgOwEUIAUgBSgCJCAFLwEUrRAhNgIQIAUoAhBFBEAgBSgCKEEVQQAQFyAFKAIkEBkgBSgCGBAmIAVBADoAPwwDCyAFIAUvARYgBS8BFCAFKAIQIAUoAjAQXiIANgIcIABFBEAgBSgCKEEOQQAQFyAFKAIkEBkgBSgCGBAmIAVBADoAPwwDCwJAIAUoAhgEQCAFKAIgIAUoAhw2AgAgBSAFKAIcNgIgDAELIAUgBSgCHCIANgIgIAUgADYCGAsMAQsLIAUoAiQQSEEBcUUEQCAFIAUoAiQQMj4CDCAFIAUoAiQgBSgCDK0QITYCCAJAAkAgBSgCDEEETw0AIAUoAghFDQAgBSgCCEHS1wAgBSgCDBBQRQ0BCyAFKAIoQRVBABAXIAUoAiQQGSAFKAIYECYgBUEAOgA/DAILCyAFKAIkEBkCQCAFKAIsBEAgBSgCLCAFKAIYNgIADAELIAUoAhgQJgsgBUEBOgA/CyAFLQA/QQFxIQAgBUFAayQAIAAL7wIBAX8jAEEgayICJAAgAiAANgIYIAIgATYCFAJAIAIoAhhFBEAgAiACKAIUNgIcDAELIAIgAigCGDYCCANAIAIoAggoAgAEQCACIAIoAggoAgA2AggMAQsLA0AgAigCFARAIAIgAigCFCgCADYCECACQQA2AgQgAiACKAIYNgIMA0ACQCACKAIMRQ0AAkAgAigCDC8BCCACKAIULwEIRw0AIAIoAgwvAQogAigCFC8BCkcNACACKAIMLwEKBEAgAigCDCgCDCACKAIUKAIMIAIoAgwvAQoQUA0BCyACKAIMIgAgACgCBCACKAIUKAIEQYAGcXI2AgQgAkEBNgIEDAELIAIgAigCDCgCADYCDAwBCwsgAigCFEEANgIAAkAgAigCBARAIAIoAhQQJgwBCyACKAIIIAIoAhQiADYCACACIAA2AggLIAIgAigCEDYCFAwBCwsgAiACKAIYNgIcCyACKAIcIQAgAkEgaiQAIAALXQEBfyMAQRBrIgIkACACIAA2AgggAiABNgIEAkAgAigCBEUEQCACQQA2AgwMAQsgAiACKAIIIAIoAgQoAgAgAigCBC8BBK0QOzYCDAsgAigCDCEAIAJBEGokACAAC48BAQF/IwBBEGsiAiQAIAIgADYCCCACIAE2AgQCQAJAIAIoAggEQCACKAIEDQELIAIgAigCCCACKAIERjYCDAwBCyACKAIILwEEIAIoAgQvAQRHBEAgAkEANgIMDAELIAIgAigCCCgCACACKAIEKAIAIAIoAggvAQQQUEU2AgwLIAIoAgwhACACQRBqJAAgAAtVAQF/IwBBEGsiASQAIAEgADYCDCABQQBBAEEAEB02AgggASgCDARAIAEgASgCCCABKAIMKAIAIAEoAgwvAQQQHTYCCAsgASgCCCEAIAFBEGokACAAC4gBAQF/IwBBIGsiAyQAIAMgADYCFCADIAE2AhAgAyACNwMIAkACQCADKAIUKAIkQQFGBEAgAykDCEL///////////8AWA0BCyADKAIUQQxqQRJBABAXIANCfzcDGAwBCyADIAMoAhQgAygCECADKQMIQQsQJDcDGAsgAykDGCECIANBIGokACACC3MBAX8jAEEgayIBJAAgASAANgIYIAFCCDcDECABIAEoAhgpAxAgASkDEHw3AwgCQCABKQMIIAEoAhgpAxBUBEAgASgCGEEAOgAAIAFBfzYCHAwBCyABIAEoAhggASkDCBAuNgIcCyABKAIcGiABQSBqJAALBgBBtJwBC5YBAQF/IwBBIGsiAiAANgIYIAIgATcDEAJAAkACQCACKAIYLQAAQQFxRQ0AIAIoAhgpAxAgAikDEHwgAikDEFQNACACKAIYKQMQIAIpAxB8IAIoAhgpAwhYDQELIAIoAhhBADoAACACQQA2AhwMAQsgAiACKAIYKAIEIAIoAhgpAxCnajYCDCACIAIoAgw2AhwLIAIoAhwLGABBqJwBQgA3AgBBsJwBQQA2AgBBqJwBC7kCAQF/IwBBEGsiAiAANgIIIAIgATYCBAJAIAIoAghBgAFJBEAgAigCBCACKAIIOgAAIAJBATYCDAwBCyACKAIIQYAQSQRAIAIoAgQgAigCCEEGdkEfcUHAAXI6AAAgAigCBCACKAIIQT9xQYABcjoAASACQQI2AgwMAQsgAigCCEGAgARJBEAgAigCBCACKAIIQQx2QQ9xQeABcjoAACAC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AgA2AqABDAELIAFBADYCoAELCwJAIAEoAqABRQRAIAEgASgCpAE2AqwBDAELIAEgASgCoAEQMAJ/IAEoAqQBBEAgASgCpAEQMEECagwBC0EAC2pBAWoQGyIANgIcIABFBEAgAUH4ESgCADYCrAEMAQsgASgCHCEAAn8gASgCpAEEQCABKAKkAQwBC0HUlwELIQJB1ZcBQdSXASABKAKkARshAyABIAEoAqABNgIIIAEgAzYCBCABIAI2AgAgAEHNlwEgARBxIAEoAqgBIAEoAhw2AgggASABKAIcNgKsAQsgASgCrAEhACABQbABaiQAIAALcQEDfwJAAkADQCAAIAJB0IgBai0AAEcEQEHXACEDIAJBAWoiAkHXAEcNAQwCCwsgAiIDDQBBsIkBIQAMAQtBsIkBIQIDQCACLQAAIQQgAkEBaiIAIQIgBA0AIAAhAiADQX9qIgMNAAsLIAEoAhQaIAALMwEBfyAAKAIUIgMgASACIAAoAhAgA2siASABIAJLGyIBEBwaIAAgACgCFCABajYCFCACC4oBAQJ/IwBBoAFrIgMkACADQQhqQbiHAUGQARAcGiADIAA2AjQgAyAANgIcIANBfiAAayIEQf////8HQf////8HIARLGyIENgI4IAMgACAEaiIANgIkIAMgADYCGCADQQhqIAEgAhC6AiAEBEAgAygCHCIAIAAgAygCGEZrQQA6AAALIANBoAFqJAALvgIBAX8jAEHAwABrIgMkACADIAA2ArhAIAMgATYCtEAgAyACNwOoQAJAIAMoArRAEFNBAEgEQCADKAK4QEEIaiADKAK0QBAaIANBfzYCvEAMAQsgA0EANgIMIANCADcDEANAAkAgAyADKAK0QCADQSBqQoDAABAxIgI3AxggAkIAVw0AIAMoArhAIANBIGogAykDGBA7QQBIBEAgA0F/NgIMBSADKQMYQoDAAFINAiADKAK4QCgCVEUNAiADKQOoQEIAVw0CIAMgAykDGCADKQMQfDcDECADKAK4QCgCVCADKQMQuSADKQOoQLmjEFcMAgsLCyADKQMYQgBTBEAgAygCuEBBCGogAygCtEAQGiADQX82AgwLIAMoArRAEDcaIAMgAygCDDYCvEALIAMoArxAIQAgA0HAwABqJAAgAAuqAQEBfyMAQTBrIgMkACADIAA2AiggAyABNgIkIAMgAjcDGCADIAMoAigoAgAQOiICNwMQAkAgAkIAUwRAIANBfzYCLAwBCyADIAMoAiggAygCJCADKQMYEIQDIgI3AwAgAkIAUwRAIANBfzYCLAwBCyADIAMoAigoAgAQOiICNwMIIAJCAFMEQCADQX82AiwMAQsgA0EANgIsCyADKAIsIQAgA0EwaiQAIAAL/gEBAX8jAEGgwABrIgIkACACIAA2AphAIAIgATcDkEAgAiACKQOQQLo5AwACQANAIAIpA5BAQgBWBEAgAgJ+QoDAACACKQOQQEKAwABWDQAaIAIpA5BACz4CDCACKAKYQCgCACACQRBqIAIoAgytIAIoAphAQQhqEGJBAEgEQCACQX82ApxADAMLIAIoAphAIAJBEGogAigCDK0QO0EASARAIAJBfzYCnEAMAwUgAiACKQOQQCACNQIMfTcDkEAgAigCmEAoAlQgAisDACACKQOQQLqhIAIrAwCjEFcMAgsACwsgAkEANgKcQAsgAigCnEAhACACQaDAAGokACAAC/IRAgF/AX4jAEGgAWsiAyQAIAMgADYCmAEgAyABNgKUASADIAI2ApABAkAgAygClAEgA0E4ahA5QQBIBEAgAygCmAFBCGogAygClAEQGiADQX82ApwBDAELIAMpAzhCwACDUARAIAMgAykDOELAAIQ3AzggA0EAOwFoCwJAAkAgAygCkAEoAhBBf0cEQCADKAKQASgCEEF+Rw0BCyADLwFoRQ0AIAMoApABIAMvAWg2AhAMAQsCQAJAIAMoApABKAIQDQAgAykDOEIEg1ANACADIAMpAzhCCIQ3AzggAyADKQNQNwNYDAELIAMgAykDOEL3////D4M3AzgLCyADKQM4QoABg1AEQCADIAMpAzhCgAGENwM4IANBADsBagsgA0GAAjYCJAJAIAMpAzhCBINQBEAgAyADKAIkQYAIcjYCJCADQn83A3AMAQsgAygCkAEgAykDUDcDKCADIAMpA1A3A3ACQCADKQM4QgiDUARAAkACQAJ/AkAgAygCkAEoAhBBf0cEQCADKAKQASgCEEF+Rw0BC0EIDAELIAMoApABKAIQC0H//wNxIgBBDEsNAAJAAkACQCAAQQFrDgwDAwMDAwMDAQMDAwACCyADQpTC5PMPNwMQDAMLIANCg4Ow/w83AxAMAgsgA0L/////DzcDEAwBCyADQgA3AxALIAMpA1AgAykDEFYEQCADIAMoAiRBgAhyNgIkCwwBCyADKAKQASADKQNYNwMgCwsgAyADKAKYASgCABA6IgQ3A4gBIARCAFMEQCADKAKYAUEIaiADKAKYASgCABAaIANBfzYCnAEMAQsgAygCkAEiACAALwEMQff/A3E7AQwgAyADKAKYASADKAKQASADKAIkEF0iADYCKCAAQQBIBEAgA0F/NgKcAQwBCyADIAMvAWgCfwJAIAMoApABKAIQQX9HBEAgAygCkAEoAhBBfkcNAQtBCAwBCyADKAKQASgCEAtB//8DcUc6ACIgAyADLQAiQQFxBH8gAy8BaEEARwVBAAtBAXE6ACEgAyADLwFoBH8gAy0AIQVBAQtBAXE6ACAgAyADLQAiQQFxBH8gAygCkAEoAhBBAEcFQQALQQFxOgAfIAMCf0EBIAMtACJBAXENABpBASADKAKQASgCAEGAAXENABogAygCkAEvAVIgAy8BakcLQQFxOgAeIAMgAy0AHkEBcQR/IAMvAWpBAEcFQQALQQFxOgAdIAMgAy0AHkEBcQR/IAMoApABLwFSQQBHBUEAC0EBcToAHCADIAMoApQBNgI0IwBBEGsiACADKAI0NgIMIAAoAgwiACAAKAIwQQFqNgIwIAMtAB1BAXEEQCADIAMvAWpBABB6IgA2AgwgAEUEQCADKAKYAUEIakEYQQAQFyADKAI0EB4gA0F/NgKcAQwCCyADIAMoApgBIAMoAjQgAy8BakEAIAMoApgBKAIcIAMoAgwRKwAiADYCMCAARQRAIAMoAjQQHiADQX82ApwBDAILIAMoAjQQHiADIAMoAjA2AjQLIAMtACFBAXEEQCADIAMoApgBIAMoAjQgAy8BaBCiASIANgIwIABFBEAgAygCNBAeIANBfzYCnAEMAgsgAygCNBAeIAMgAygCMDYCNAsgAy0AIEEBcQRAIAMgAygCmAEgAygCNEEAEKEBIgA2AjAgAEUEQCADKAI0EB4gA0F/NgKcAQwCCyADKAI0EB4gAyADKAIwNgI0CyADLQAfQQFxBEAgAyADKAKYASADKAI0IAMoApABKAIQIAMoApABLwFQELICIgA2AjAgAEUEQCADKAI0EB4gA0F/NgKcAQwCCyADKAI0EB4gAyADKAIwNgI0CyADLQAcQQFxBEAgA0EANgIEAkAgAygCkAEoAlQEQCADIAMoApABKAJUNgIEDAELIAMoApgBKAIcBEAgAyADKAKYASgCHDYCBAsLIAMgAygCkAEvAVJBARB6IgA2AgggAEUEQCADKAKYAUEIakEYQQAQFyADKAI0EB4gA0F/NgKcAQwCCyADIAMoApgBIAMoAjQgAygCkAEvAVJBASADKAIEIAMoAggRKwAiADYCMCAARQRAIAMoAjQQHiADQX82ApwBDAILIAMoAjQQHiADIAMoAjA2AjQLIAMgAygCmAEoAgAQOiIENwOAASAEQgBTBEAgAygCmAFBCGogAygCmAEoAgAQGiADQX82ApwBDAELIAMgAygCmAEgAygCNCADKQNwEKYCNgIsIAMoAjQgA0E4ahA5QQBIBEAgAygCmAFBCGogAygCNBAaIANBfzYCLAsgAyADKAI0EKwCIgA6ACMgAEEYdEEYdUEASARAIAMoApgBQQhqIAMoAjQQGiADQX82AiwLIAMoAjQQHiADKAIsQQBIBEAgA0F/NgKcAQwBCyADIAMoApgBKAIAEDoiBDcDeCAEQgBTBEAgAygCmAFBCGogAygCmAEoAgAQGiADQX82ApwBDAELIAMoApgBKAIAIAMpA4gBEJ8BQQBIBEAgAygCmAFBCGogAygCmAEoAgAQGiADQX82ApwBDAELIAMpAzhC5ACDQuQAUgRAIAMoApgBQQhqQRRBABAXIANBfzYCnAEMAQsgAygCkAEoAgBBIHFFBEACQCADKQM4QhCDQgBSBEAgAygCkAEgAygCYDYCFAwBCyADKAKQAUEUahACGgsLIAMoApABIAMvAWg2AhAgAygCkAEgAygCZDYCGCADKAKQASADKQNQNwMoIAMoApABIAMpA3ggAykDgAF9NwMgIAMoApABIAMoApABLwEMQfn/A3EgAy0AI0EBdHI7AQwgAygCkAEgAygCJEGACHFBAEcQ/QIgAyADKAKYASADKAKQASADKAIkEF0iADYCLCAAQQBIBEAgA0F/NgKcAQwBCyADKAIoIAMoAixHBEAgAygCmAFBCGpBFEEAEBcgA0F/NgKcAQwBCyADKAKYASgCACADKQN4EJ8BQQBIBEAgAygCmAFBCGogAygCmAEoAgAQGiADQX82ApwBDAELIANBADYCnAELIAMoApwBIQAgA0GgAWokACAAC68CAQF/IwBBIGsi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AygCBBClASEAIANBEGokACAAC7oCAQF/IwBBIGsiAyQAIAMgADYCGCADIAE2AhQgAyACNgIQIAMgAygCGDYCDCADKAIMAn5C/////w9C/////w8gAygCECkDAFQNABogAygCECkDAAs+AiAgAygCDCADKAIUNgIcAkAgAygCDC0ABEEBcQRAIAMgAygCDEEQakEEQQAgAygCDC0ADEEBcRsQzAI2AggMAQsgAyADKAIMQRBqEMECNgIICyADKAIQIgAgACkDACADKAIMNQIgfTcDAAJAAkAgAygCCEEFaiIAQQZLDQACQAJAAkAgAEEBaw4GAwMDAwABAgsgA0EANgIcDAMLIANBATYCHAwCCyADKAIMKAIURQRAIANBAzYCHAwCCwsgAygCDCgCAEENIAMoAggQFyADQQI2AhwLIAMoAhwhACADQSBqJAAgAAskAQF/IwBBEGsiASAANgIMIAEgASgCDDYCCCABKAIIQQE6AAwLmQEBAX8jAEEgayIDJAAgAyAANgIYIAMgATYCFCADIAI3AwggAyADKAIYNgIEAkACQCADKQMIQv////8PWARAIAMoAgQoAhRBAE0NAQsgAygCBCgCAEESQQAQFyADQQA6AB8MAQsgAygCBCADKQMIPgIUIAMoAgQgAygCFDYCECADQQE6AB8LIAMtAB9BAXEhACADQSBqJAAgAAuQAQEBfyMAQRBrIgEkACABIAA2AgggASABKAIINgIEAkAgASgCBC0ABEEBcQRAIAEgASgCBEEQahCoATYCAAwBCyABIAEoAgRBEGoQvgI2AgALAkAgASgCAARAIAEoAgQoAgBBDSABKAIAEBcgAUEAOgAPDAELIAFBAToADwsgAS0AD0EBcSEAIAFBEGokACAAC8ABAQF/IwBBEGsiASQAIAEgADYCCCABIAEoAgg2AgQgASgCBEEANgIUIAEoAgRBADYCECABKAIEQQA2AiAgASgCBEEANgIcAkAgASgCBC0ABEEBcQRAIAEgASgCBEEQaiABKAIEKAIIENICNgIADAELIAEgASgCBEEQahDCAjYCAAsCQCABKAIABEAgASgCBCgCAEENIAEoAgAQFyABQQA6AA8MAQsgAUEBOgAPCyABLQAPQQFxIQAgAUEQaiQAIAALywIBA38jAEHQAWsiAyQAIAMgAjYCzAFBACECIANBoAFqQQBBKBA0IAMgAygCzAE2AsgBAkBBACABIANByAFqIANB0ABqIANBoAFqEHJBAEgNACAAKAJMQQBOBEBBASECCyAAKAIAIQQgACwASkEATARAIAAgBEFfcTYCAAsgBEEgcSEFAn8gACgCMARAIAAgASADQcgBaiADQdAAaiADQaABahByDAELIABB0AA2AjAgACADQdAAajYCECAAIAM2AhwgACADNgIUIAAoAiwhBCAAIAM2AiwgACABIANByAFqIANB0ABqIANBoAFqEHIgBEUNABogAEEAQQAgACgCJBEAABogAEEANgIwIAAgBDYCLCAAQQA2AhwgAEEANgIQIAAoAhQaIABBADYCFEEACxogACAAKAIAIAVyNgIAIAJFDQALIANB0AFqJAALbwEBfyMAQRBrIgEgADYCCCABIAEoAgg2AgQCQCABKAIELQAEQQFxRQRAIAFBADYCDAwBCyABKAIEKAIIQQNIBEAgAUECNgIMDAELIAEoAgQoAghBB0oEQCABQQE2AgwMAQsgAUEANgIMCyABKAIMCywBAX8jAEEQayIBJAAgASAANgIMIAEgASgCDDYCCCABKAIIEBggAUEQaiQACzwBAX8jAEEQayIDJAAgAyAAOwEOIAMgATYCCCADIAI2AgRBASADKAIIIAMoAgQQpQEhACADQRBqJAAgAAuZAQEBfyMAQRBrIgEkACABIAA2AggCQCABKAIIEEoEQCABQX42AgwMAQsgASABKAIIKAIcNgIEIAEoAgQoAjgEQCABKAIIKAIoIAEoAgQoAjggASgCCCgCJBECAAsgASgCCCgCKCABKAIIKAIcIAEoAggoAiQRAgAgASgCCEEANgIcIAFBADYCDAsgASgCDCEAIAFBEGokACAAC50EAQF/IwBBIGsiAyQAIAMgADYCGCADIAE2AhQgAyACNgIQIAMgAygCGCgCHDYCDAJAIAMoAgwoAjhFBEAgAygCGCgCKEEBIAMoAgwoAih0QQEgAygCGCgCIBEAACEAIAMoAgwgADYCOCADKAIMKAI4RQRAIANBATYCHAwCCwsgAygCDCgCLEUEQCADKAIMQQEgAygCDCgCKHQ2AiwgAygCDEEANgI0IAMoAgxBADYCMAsCQCADKAIQIAMoAgwoAixPBEAgAygCDCgCOCADKAIUIAMoAgwoAixrIAMoAgwoAiwQ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UCACIAIoAlAgAigCXCgCBEEFa2o2AkwgAiACKAJcKAIMNgJIIAIgAigCSCACKAJYIAIoAlwoAhBrazYCRCACIAIoAkggAigCXCgCEEGBAmtqNgJAIAIgAigCVCgCLDYCPCACIAIoAlQoAjA2AjggAiACKAJUKAI0NgI0IAIgAigCVCgCODYCMCACIAIoAlQoAjw2AiwgAiACKAJUKAJANgIoIAIgAigCVCgCUDYCJCACIAIoAlQoAlQ2AiAgAkEBIAIoAlQoAlh0QQFrNgIcIAJBASACKAJUKAJcdEEBazYCGANAIAIoAihBD0kEQCACIAIoAlAiAEEBajYCUCACIAIoAiwgAC0AACACKAIodGo2AiwgAiACKAIoQQhqNgIoIAIgAigCUCIAQQFqNgJQIAIgAigCLCAALQAAIAIoAih0ajYCLCACIAIoAihBCGo2AigLIAJBEGogAigCJCACKAIsIAIoAhxxQQJ0aigBADYBAAJAAkADQCACIAItABE2AgwgAiACKAIsIAIoAgx2NgIsIAIgAigCKCACKAIMazYCKCACIAItABA2AgwgAigCDEUEQCACLwESIQAgAiACKAJIIgFBAWo2AkggASAAOgAADAILIAIoAgxBEHEEQCACIAIvARI2AgggAiACKAIMQQ9xNgIMIAIoAgwEQCACKAIoIAIoAgxJBEAgAiACKAJQIgBBAWo2AlAgAiACKAIsIAAtAAAgAigCKHRqNgIsIAIgAigCKEEIajYCKAsgAiACKAIIIAIoAixBASACKAIMdEEBa3FqNgIIIAIgAigCLCACKAIMdjYCLCACIAIoAiggAigCDGs2AigLIAIoAihBD0kEQCACIAIoAlAiAEEBajYCUCACIAIoAiwgAC0AACACKAIodGo2AiwgAiACKAIoQQhqNgIoIAIgAigCUCIAQQFqNgJQIAIgAigCLCAALQAAIAIoAih0ajYCLCACIAIoAihBCGo2AigLIAJBEGogAigCICACKAIsIAIoAhhxQQJ0aigBADYBAAJAA0AgAiACLQARNgIMIAIgAigCLCACKAIMdjYCLCACIAIoAiggAigCDGs2AiggAiACLQAQNgIMIAIoAgxBEHEEQCACIAIvARI2AgQgAiACKAIMQQ9xNgIMIAIoAiggAigCDEkEQCACIAIoAlAiAEEBajYCUCACIAIoAiwgAC0AACACKAIodGo2AiwgAiACKAIoQQhqNgIoIAIoAiggAigCDEkEQCACIAIoAlAiAEEBajYCUCACIAIoAiwgAC0AACACKAIodGo2AiwgAiACKAIoQQhqNgIoCwsgAiACKAIEIAIoAixBASACKAIMdEEBa3FqNgIEIAIgAigCLCACKAIMdjYCLCACIAIoAiggAigCDGs2AiggAiACKAJIIAIoAkRrNgIMAkAgAigCBCACKAIMSwRAIAIgAigCBCACKAIMazYCDCACKAIMIAIoAjhLBEAgAigCVCgCxDcEQCACKAJcQdDxADYCGCACKAJUQdH+ADYCBAwKCwsgAiACKAIwNgIAAkAgAigCNEUEQCACIAIoAgAgAigCPCACKAIMa2o2AgAgAigCDCACKAIISQRAIAIgAigCCCACKAIMazYCCANAIAIgAigCACIAQQFqNgIAIAAtAAAhACACIAIoAkgiAUEBajYCSCABIAA6AAAgAiACKAIMQX9qIgA2AgwgAA0ACyACIAIoAkggAigCBGs2AgALDAELAkAgAigCNCACKAIMSQRAIAIgAigCACACKAI8IAIoAjRqIAIoAgxrajYCACACIAIoAgwgAigCNGs2AgwgAigCDCACKAIISQRAIAIgAigCCCACKAIMazYCCANAIAIgAigCACIAQQFqNgIAIAAtAAAhACACIAIoAkgiAUEBajYCSCABIAA6AAAgAiACKAIMQX9qIgA2AgwgAA0ACyACIAIoAjA2AgAgAigCNCACKAIISQRAIAIgAigCNDYCDCACIAIoAgggAigCDGs2AggDQCACIAIoAgAiAEEBajYCACAALQAAIQAgAiACKAJIIgFBAWo2AkggASAAOgAAIAIgAigCDEF/aiIANgIMIAANAAsgAiACKAJIIAIoAgRrNgIACwsMAQsgAiACKAIAIAIoAjQgAigCDGtqNgIAIAIoAgwgAigCCEkEQCACIAIoAgggAigCDGs2AggDQCACIAIoAgAiAEEBajYCACAALQAAIQAgAiACKAJIIgFBAWo2AkggASAAOgAAIAIgAigCDEF/aiIANgIMIAANAAsgAiACKAJIIAIoAgRrNgIACwsLA0AgAigCCEECTUUEQCACIAIoAgAiAEEBajYCACAALQAAIQAgAiACKAJIIgFBAWo2AkggASAAOgAAIAIgAigCACIAQQFqNgIAIAAtAAAhACACIAIoAkgiAUEBajYCSCABIAA6AAAgAiACKAIAIgBBAWo2AgAgAC0AACEAIAIgAigCSCIBQQFqNgJIIAEgADoAACACIAIoAghBA2s2AggMAQsLDAELIAIgAigCSCACKAIEazYCAANAIAIgAigCACIAQQFqNgIAIAAtAAAhACACIAIoAkgiAUEBajYCSCABIAA6AAAgAiACKAIAIgBBAWo2AgAgAC0AACEAIAIgAigCSCIBQQFqNgJIIAEgADoAACACIAIoAgAiAEEBajYCACAALQAAIQAgAiACKAJIIgFBAWo2AkggASAAOgAAIAIgAigCCEEDazYCCCACKAIIQQJLDQALCyACKAIIBEAgAiACKAIAIgBBAWo2AgAgAC0AACEAIAIgAigCSCIBQQFqNgJIIAEgADoAACACKAIIQQFLBEAgAiACKAIAIgBBAWo2AgAgAC0AACEAIAIgAigCSCIBQQFqNgJIIAEgADoAAAsLDAILIAIoAgxBwABxRQRAIAJBEGogAigCICACLwESIAIoAixBASACKAIMdEEBa3FqQQJ0aigBADYBAAwBCwsgAigCXEHu8QA2AhggAigCVEHR/gA2AgQMBAsMAgsgAigCDEHAAHFFBEAgAkEQaiACKAIkIAIvARIgAigCLEEBIAIoAgx0QQFrcWpBAnRqKAEANgEADAELCyACKAIMQSBxBEAgAigCVEG//gA2AgQMAgsgAigCXEGE8gA2AhggAigCVEHR/gA2AgQMAQtBACEAIAIoAlAgAigCTEkEfyACKAJIIAIoAkBJBUEAC0EBcQ0BCwsgAiACKAIoQQN2NgIIIAIgAigCUCACKAIIazYCUCACIAIoAiggAigCCEEDdGs2AiggAiACKAIsQQEgAigCKHRBAWtxNgIsIAIoAlwgAigCUDYCACACKAJcIAIoAkg2AgwgAigCXAJ/IAIoAlAgAigCTEkEQCACKAJMIAIoAlBrQQVqDAELQQUgAigCUCACKAJMa2sLNgIEIAIoAlwCfyACKAJIIAIoAkBJBEAgAigCQCACKAJIa0GBAmoMAQtBgQIgAigCSCACKAJAa2sLNgIQIAIoAlQgAigCLDYCPCACKAJUIAIoAig2AkALwRABAn8jAEEgayICJAAgAiAANgIYIAIgATYCFAJAA0ACQCACKAIYKAJ0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AkEDNgIcDAELIAIoAhgoAqAtBEAgAigCGAJ/IAIoAhgoAlxBAE4EQCACKAIYKAI4IAIoAhgoAlxqDAELQQALIAIoAhgoAmwgAigCGCgCXGtBABAqIAIoAhggAigCGCgCbDYCXCACKAIYKAIAEB8gAigCGCgCACgCEEUEQCACQQA2AhwMAgsLIAJBATYCHAsgAigCHCEAIAJBIGokACAAC7sMAQJ/IwBBMGsiAiQAIAIgADYCKCACIAE2AiQCQANAAkAgAigCKCgCdEGCAk0EQCACKAIoEFUCQCACKAIoKAJ0QYICSw0AIAIoAiQNACACQQA2AiwMBAsgAigCKCgCdEUNAQsgAigCKEEANgJgAkAgAigCKCgCdEEDSQ0AIAIoAigoAmxBAE0NACACIAIoAigoAjggAigCKCgCbGpBf2o2AhggAiACKAIYLQAANgIcIAIoAhwhACACIAIoAhgiAUEBajYCGAJAIAEtAAEgAEcNACACKAIcIQAgAiACKAIYIgFBAWo2AhggAS0AASAARw0AIAIoAhwhACACIAIoAhgiAUEBajYCGCABLQABIABHDQAgAiACKAIoKAI4IAIoAigoAmxqQYICajYCFANAIAIoAhwhASACIAIoAhgiA0EBajYCGAJ/QQAgAy0AASABRw0AGiACKAIcIQEgAiACKAIYIgNBAWo2AhhBACADLQABIAFHDQAaIAIoAhwhASACIAIoAhgiA0EBajYCGEEAIAMtAAEgAUcNABogAigCHCEBIAIgAigCGCIDQQFqNgIYQQAgAy0AASABRw0AGiACKAIcIQEgAiACKAIYIgNBAWo2AhhBACADLQABIAFHDQAaIAIoAhwhASACIAIoAhgiA0EBajYCGEEAIAMtAAEgAUcNABogAigCHCEBIAIgAigCGCIDQQFqNgIYQQAgAy0AASABRw0AGiACKAIcIQEgAiACKAIYIgNBAWo2AhhBACADLQABIAFHDQAaIAIoAhggAigCFEkLQQFxDQALIAIoAihBggIgAigCFCACKAIYa2s2AmAgAigCKCgCYCACKAIoKAJ0SwRAIAIoAiggAigCKCgCdDYCYAsLCwJAIAIoAigoAmBBA08EQCACIAIoAigoAmBBfWo6ABMgAkEBOwEQIAIoAigiACgCpC0gACgCoC1BAXRqIAIvARA7AQAgAi0AEyEBIAIoAigiACgCmC0hAyAAIAAoAqAtIgBBAWo2AqAtIAAgA2ogAToAACACIAIvARBBf2o7ARAgAigCKCACLQATQaDdAGotAABBAnRqQZgJaiIAIAAvAQBBAWo7AQAgAigCKEGIE2oCfyACLwEQQYACSARAIAIvARAtAKBZDAELIAIvARBBB3VBgAJqLQCgWQtBAnRqIgAgAC8BAEEBajsBACACIAIoAigoAqAtIAIoAigoApwtQQFrRjYCICACKAIoIgAgACgCdCACKAIoKAJgazYCdCACKAIoIgAgAigCKCgCYCAAKAJsajYCbCACKAIoQQA2AmAMAQsgAiACKAIoIgAoAjggACgCbGotAAA6AA8gAigCKCIAKAKkLSAAKAKgLUEBdGpBADsBACACLQAPIQEgAigCKCIAKAKYLSEDIAAgACgCoC0iAEEBajYCoC0gACADaiABOgAAIAIoAiggAi0AD0ECdGoiACAALwGUAUEBajsBlAEgAiACKAIoKAKgLSACKAIoKAKcLUEBa0Y2AiAgAigCKCIAIAAoAnRBf2o2AnQgAigCKCIAIAAoAmxBAWo2AmwLIAIoAiAEQCACKAIoAn8gAigCKCgCXEEATgRAIAIoAigoAjggAigCKCgCXGoMAQtBAAsgAigCKCgCbCACKAIoKAJca0EAECogAigCKCACKAIoKAJsNgJcIAIoAigoAgAQHyACKAIoKAIAKAIQRQRAIAJBADYCLAwECwsMAQsLIAIoAihBADYCtC0gAigCJEEERgRAIAIoAigCfyACKAIoKAJcQQBOBEAgAigCKCgCOCACKAIoKAJcagwBC0EACyACKAIoKAJsIAIoAigoAlxrQQEQKiACKAIoIAIoAigoAmw2AlwgAigCKCgCABAfIAIoAigoAgAoAhBFBEAgAkECNgIsDAILIAJBAzYCLAwBCyACKAIoKAKgLQRAIAIoAigCfyACKAIoKAJcQQBOBEAgAigCKCgCOCACKAIoKAJcagwBC0EACyACKAIoKAJsIAIoAigoAlxrQQAQKiACKAIoIAIoAigoAmw2AlwgAigCKCgCABAfIAIoAigoAgAoAhBFBEAgAkEANgIsDAILCyACQQE2AiwLIAIoAiwhACACQTBqJAAgAAvABQECfyMAQSBrIgIkACACIAA2AhggAiABNgIUAkADQAJAIAIoAhgoAnRF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ACABKAIILwG8AQ0AIAEoAggvAcgBRQ0BCyABQQE2AgwMAQsgAUEgNgIAA0AgASgCAEGAAkgEQCABKAIIQZQBaiABKAIAQQJ0ai8BAARAIAFBATYCDAwDBSABIAEoAgBBAWo2AgAMAgsACwsgAUEANgIMCyABKAIMC44FAQR/IwBBIGsiASQAIAEgADYCHCABQQM2AhgCQCABKAIcKAK8LUEQIAEoAhhrSgRAIAFBAjYCFCABKAIcIgAgAC8BuC0gASgCFEH//wNxIAEoAhwoArwtdHI7AbgtIAEoAhwvAbgtQf8BcSECIAEoAhwoAgghAyABKAIcIgQoAhQhACAEIABBAWo2AhQgACADaiACOgAAIAEoAhwvAbgtQQh1IQIgASgCHCgCCCEDIAEoAhwiBCgCFCEAIAQgAEEBajYCFCAAIANqIAI6AAAgASgCHCABKAIUQf//A3FBECABKAIcKAK8LWt1OwG4LSABKAIcIgAgACgCvC0gASgCGEEQa2o2ArwtDAELIAEoAhwiACAALwG4LUECIAEoAhwoArwtdHI7AbgtIAEoAhwiACABKAIYIAAoArwtajYCvC0LIAFB4ucALwEANgIQAkAgASgCHCgCvC1BECABKAIQa0oEQCABQeDnAC8BADYCDCABKAIcIgAgAC8BuC0gASgCDEH//wNxIAEoAhwoArwtdHI7AbgtIAEoAhwvAbgtQf8BcSECIAEoAhwoAgghAyABKAIcIgQoAhQhACAEIABBAWo2AhQgACADaiACOgAAIAEoAhwvAbgtQQh1IQIgASgCHCgCCCEDIAEoAhwiBCgCFCEAIAQgAEEBajYCFCAAIANqIAI6AAAgASgCHCABKAIMQf//A3FBECABKAIcKAK8LWt1OwG4LSABKAIcIgAgACgCvC0gASgCEEEQa2o2ArwtDAELIAEoAhwiACAALwG4LUHg5wAvAQAgASgCHCgCvC10cjsBuC0gASgCHCIAIAEoAhAgACgCvC1qNgK8LQsgASgCHBCsASABQSBqJAALIwEBfyMAQRBrIgEkACABIAA2AgwgASgCDBCsASABQRBqJAAL2QMCAn8CfiMAQSBrIgIkAAJAIAFC////////////AIMiBUKAgICAgIDA/0N8IAVCgICAgICAwIC8f3xUBEAgAUIEhiAAQjyIhCEEIABC//////////8PgyIAQoGAgICAgICACFoEQCAEQoGAgICAgICAwAB8IQQMAgsgBEKAgICAgICAgEB9IQQgAEKAgICAgICAgAiFQgBSDQEgBEIBgyAEfCEEDAELIABQIAVCgICAgICAwP//AFQgBUKAgICAgIDA//8AURtFBEAgAUIEhiAAQjyIhEL/////////A4NCgICAgICAgPz/AIQhBAwBC0KAgICAgICA+P8AIQQgBUL///////+//8MAVg0AQgAhBCAFQjCIpyIDQZH3AEkNACACIAAgAUL///////8/g0KAgICAgIDAAIQiBEGB+AAgA2sQ6QIgAkEQaiAAIAQgA0H/iH9qEOICIAIpAwhCBIYgAikDACIAQjyIhCEEIAIpAxAgAikDGIRCAFKtIABC//////////8Pg4QiAEKBgICAgICAgAhaBEAgBEIBfCEEDAELIABCgICAgICAgIAIhUIAUg0AIARCAYMgBHwhBAsgAkEgaiQAIAQgAUKAgICAgICAgIB/g4S/C0UAQaCcAUIANwMAQZicAUIANwMAQZCcAUIANwMAQYicAUIANwMAQYCcAUIANwMAQfibAUIANwMAQfCbAUIANwMAQfCbAQuWAQEBfyMAQRBrIgEkACABIAA2AgwgASgCDCABKAIMQZQBajYCmBYgASgCDEGg3wA2AqAWIAEoAgwgASgCDEGIE2o2AqQWIAEoAgxBtN8ANgKsFiABKAIMIAEoAgxB/BRqNgKwFiABKAIMQcjfADYCuBYgASgCDEEAOwG4LSABKAIMQQA2ArwtIAEoAgwQrgEgAUEQaiQAC9cNAQF/IwBBIGsiAyAANgIYIAMgATYCFCADIAI2AhAgAyADKAIYQRB2NgIMIAMgAygCGEH//wNxNgIYAkAgAygCEEEBRgRAIAMgAygCFC0AACADKAIYajYCGCADKAIYQfH/A08EQCADIAMoAhhB8f8DazYCGAsgAyADKAIYIAMoAgxqNgIMIAMoAgxB8f8DTwRAIAMgAygCDEHx/wNrNgIMCyADIAMoAhggAygCDEEQdHI2AhwMAQsgAygCFEUEQCADQQE2AhwMAQsgAygCEEEQSQRAA0AgAyADKAIQIgBBf2o2AhAgAARAIAMgAygCFCIAQQFqNgIUIAMgAC0AACADKAIYajYCGCADIAMoAhggAygCDGo2AgwMAQsLIAMoAhhB8f8DTwRAIAMgAygCGEHx/wNrNgIYCyADIAMoAgxB8f8DcDYCDCADIAMoAhggAygCDEEQdHI2AhwMAQsDQCADKAIQQbArSUUEQCADIAMoAhBBsCtrNgIQIANB2wI2AggDQCADIAMoAhQtAAAgAygCGGo2AhggAyADKAIYIAMoAgxqNgIMIAMgAygCFC0AASADKAIYajYCGCADIAMoAhggAygCDGo2AgwgAyADKAIULQACIAMoAhhqNgIYIAMgAygCGCADKAIMajYCDCADIAMoAhQtAAMgAygCGGo2AhggAyADKAIYIAMoAgxqNgIMIAMgAygCFC0ABCADKAIYajYCGCADIAMoAhggAygCDGo2AgwgAyADKAIULQAFIAMoAhhqNgIYIAMgAygCGCADKAIMajYCDCADIAMoAhQtAAYgAygCGGo2AhggAyADKAIYIAMoAgxqNgIMIAMgAygCFC0AByADKAIYajYCGCADIAMoAhggAygCDGo2AgwgAyADKAIULQAIIAMoAhhqNgIYIAMgAygCGCADKAIMajYCDCADIAMoAhQtAAkgAygCGGo2AhggAyADKAIYIAMoAgxqNgIMIAMgAygCFC0ACiADKAIYajYCGCADIAMoAhggAygCDGo2AgwgAyADKAIULQALIAMoAhhqNgIYIAMgAygCGCADKAIMajYCDCADIAMoAhQtAAwgAygCGGo2AhggAyADKAIYIAMoAgxqNgIMIAMgAygCFC0ADSADKAIYajYCGCADIAMoAhggAygCDGo2AgwgAyADKAIULQAOIAMoAhhqNgIYIAMgAygCGCADKAIMajYCDCADIAMoAhQtAA8gAygCGGo2AhggAyADKAIYIAMoAgxqNgIMIAMgAygCFEEQajYCFCADIAMoAghBf2oiADYCCCAADQALIAMgAygCGEHx/wNwNgIYIAMgAygCDEHx/wNwNgIMDAELCyADKAIQBEADQCADKAIQQRBJRQRAIAMgAygCEEEQazYCECADIAMoAhQtAAAgAygCGGo2AhggAyADKAIYIAMoAgxqNgIMIAMgAygCFC0AASADKAIYajYCGCADIAMoAhggAygCDGo2AgwgAyADKAIULQACIAMoAhhqNgIYIAMgAygCGCADKAIMajYCDCADIAMoAhQtAAMgAygCGGo2AhggAyADKAIYIAMoAgxqNgIMIAMgAygCFC0ABCADKAIYajYCGCADIAMoAhggAygCDGo2AgwgAyADKAIULQAFIAMoAhhqNgIYIAMgAygCGCADKAIMajYCDCADIAMoAhQtAAYgAygCGGo2AhggAyADKAIYIAMoAgxqNgIMIAMgAygCFC0AByADKAIYajYCGCADIAMoAhggAygCDGo2AgwgAyADKAIULQAIIAMoAhhqNgIYIAMgAygCGCADKAIMajYCDCADIAMoAhQtAAkgAygCGGo2AhggAyADKAIYIAMoAgxqNgIMIAMgAygCFC0ACiADKAIYajYCGCADIAMoAhggAygCDGo2AgwgAyADKAIULQALIAMoAhhqNgIYIAMgAygCGCADKAIMajYCDCADIAMoAhQtAAwgAygCGGo2AhggAyADKAIYIAMoAgxqNgIMIAMgAygCFC0ADSADKAIYajYCGCADIAMoAhggAygCDGo2AgwgAyADKAIULQAOIAMoAhhqNgIYIAMgAygCGCADKAIMajYCDCADIAMoAhQtAA8gAygCGGo2AhggAyADKAIYIAMoAgxqNgIMIAMgAygCFEEQajYCFAwBCwsDQCADIAMoAhAiAEF/ajYCECAABEAgAyADKAIUIgBBAWo2AhQgAyAALQAAIAMoAhhqNgIYIAMgAygCGCADKAIMajYCDAwBCwsgAyADKAIYQfH/A3A2AhggAyADKAIMQfH/A3A2AgwLIAMgAygCGCADKAIMQRB0cjYCHAsgAygCHAspAQF/IwBBEGsiAiQAIAIgADYCDCACIAE2AgggAigCCBAYIAJBEGokAAs6AQF/IwBBEGsiAyQAIAMgADYCDCADIAE2AgggAyACNgIEIAMoAgggAygCBGwQGyEAIANBEGokACAAC4QCAgF/AX4jAEHgAGsiAiQAIAIgADYCWCACIAE2AlQgAiACKAJYIAJByABqQgwQMSIDNwMIAkAgA0IAUwRAIAIoAlQgAigCWBAaIAJBfzYCXAwBCyACKQMIQgxSBEAgAigCVEERQQAQFyACQX82AlwMAQsgAigCVCACQcgAaiIAIABCDEEAEHsgAigCWCACQRBqEDlBAEgEQCACQQA2AlwMAQsgAigCOCACQQZqIAJBBGoQuwECQCACLQBTIAIoAjxBGHZGDQAgAi0AUyACLwEGQQh1Rg0AIAIoAlRBG0EAEBcgAkF/NgJcDAELIAJBADYCXAsgAigCXCEAIAJB4ABqJAAgAAtQAQF+AkAgA0HAAHEEQCABIANBQGqthiECQgAhAQwBCyADRQ0AIAIgA60iBIYgAUHAACADa62IhCECIAEgBIYhAQsgACABNwMAIAAgAjcDCAvVAwEBfyMAQdAAayIFJAAgBSAANgJEIAUgATYCQCAFIAI2AjwgBSADNwMwIAUgBDYCLCAFIAUoAkA2AigCQAJAIAUoAiwiAEEOSw0AAkACQAJAAkACQAJAAkAgAEEBaw4OAQIDBQYHBwcHBwcHBwQACyAFKAJEIAUoAigQ4QJBAEgEQCAFQn83A0gMCAsgBUIANwNIDAcLIAUgBSgCRCAFKAI8IAUpAzAQMSIDNwMgIANCAFMEQCAFKAIoIAUoAkQQGiAFQn83A0gMBwsgBSgCQCAFKAI8IAUoAjwgBSkDIEEAEHsgBSAFKQMgNwNIDAYLIAVCADcDSAwFCyAFIAUoAjw2AhwgBSgCHEEAOwEyIAUoAhwiACAAKQMAQoABhDcDACAFKAIcKQMAQgiDQgBSBEAgBSgCHCIAIAApAyBCDH03AyALIAVCADcDSAwECyAFQX82AhQgBUEFNgIQIAVBBDYCDCAFQQM2AgggBUECNgIEIAVBATYCACAFQQAgBRA2NwNIDAMLIAUgBSgCKCAFKAI8IAUpAzAQRDcDSAwCCyAFKAIoEK8BIAVCADcDSAwBCyAFKAIoQRJBABAXIAVCfzcDSAsgBSkDSCEDIAVB0ABqJAAgAwvuAgEBfyMAQSBrIgUkACAFIAA2AhggBSABNgIUIAUgAjsBEiAFIAM2AgwgBSAENgIIAkACQAJAIAUoAghFDQAgBSgCFEUNACAFLwESQQFGDQELIAUoAhhBCGpBEkEAEBcgBUEANgIcDAELIAUoAgxBAXEEQCAFKAIYQQhqQRhBABAXIAVBADYCHAwBCyAFQRgQGyIANgIEIABFBEAgBSgCGEEIakEOQQAQFyAFQQA2AhwMAQsjAEEQayIAIAUoAgQ2AgwgACgCDEEANgIAIAAoAgxBADYCBCAAKAIMQQA2AgggBSgCBEH4rNGRATYCDCAFKAIEQYnPlZoCNgIQIAUoAgRBkPHZogM2AhQgBSgCBEEAIAUoAgggBSgCCBAwrUEBEHsgBSAFKAIYIAUoAhRBBSAFKAIEEGUiADYCACAARQRAIAUoAgQQrwEgBUEANgIcDAELIAUgBSgCADYCHAsgBSgCHCEAIAVBIGokACAAC+gGAQF/IwBB4ABrIgQkACAEIAA2AlQgBCABNgJQIAQgAjcDSCAEIAM2AkQCQCAEKAJUKQM4IAQpA0h8QoCABHxCAX0gBCkDSFQEQCAEKAJEQRJBABAXIARCfzcDWAwBCyAEIAQoAlQoAgQgBCgCVCkDCKdBA3RqKQMANwMgIAQoAlQpAzggBCkDSHwgBCkDIFYEQCAEIAQoAlQpAwggBCkDSCAEKQMgIAQoAlQpAzh9fUKAgAR8QgF9QhCIfDcDGCAEKQMYIAQoAlQpAxBWBEAgBCAEKAJUKQMQNwMQIAQpAxBQBEAgBEIQNwMQCwNAIAQpAxAgBCkDGFpFBEAgBCAEKQMQQgGGNwMQDAELCyAEKAJUIAQpAxAgBCgCRBCyAUEBcUUEQCAEKAJEQQ5BABAXIARCfzcDWAwDCwsDQCAEKAJUKQMIIAQpAxhUBEBBgIAEEBshACAEKAJUKAIAIAQoAlQpAwinQQR0aiAANgIAIAAEQCAEKAJUKAIAIAQoAlQpAwinQQR0akKAgAQ3AwggBCgCVCIAIAApAwhCAXw3AwggBCAEKQMgQoCABHw3AyAgBCgCVCgCBCAEKAJUKQMIp0EDdGogBCkDIDcDAAwCBSAEKAJEQQ5BABAXIARCfzcDWAwECwALCwsgBCAEKAJUKQNANwMwIAQgBCgCVCkDOCAEKAJUKAIEIAQpAzCnQQN0aikDAH03AyggBEIANwM4A0AgBCkDOCAEKQNIVARAIAQCfiAEKQNIIAQpAzh9IAQoAlQoAgAgBCkDMKdBBHRqKQMIIAQpAyh9VARAIAQpA0ggBCkDOH0MAQsgBCgCVCgCACAEKQMwp0EEdGopAwggBCkDKH0LNwMIIAQoAlQoAgAgBCkDMKdBBHRqKAIAIAQpAyinaiAEKAJQIAQpAzinaiAEKQMIpxAcGiAEKQMIIAQoAlQoAgAgBCkDMKdBBHRqKQMIIAQpAyh9UQRAIAQgBCkDMEIBfDcDMAsgBCAEKQMIIAQpAzh8NwM4IARCADcDKAwBCwsgBCgCVCIAIAQpAzggACkDOHw3AzggBCgCVCAEKQMwNwNAIAQoAlQpAzggBCgCVCkDMFYEQCAEKAJUIAQoAlQpAzg3AzALIAQgBCkDODcDWAsgBCkDWCECIARB4ABqJAAgAgvnAwEBfyMAQUBqIgMkACADIAA2AjQgAyABNgIwIAMgAjcDKCADAn4gAykDKCADKAI0KQMwIAMoAjQpAzh9VARAIAMpAygMAQsgAygCNCkDMCADKAI0KQM4fQs3AygCQCADKQMoUARAIANCADcDOAwBCyADKQMoQv///////////wBWBEAgA0J/NwM4DAELIAMgAygCNCkDQDcDGCADIAMoAjQpAzggAygCNCgCBCADKQMYp0EDdGopAwB9NwMQIANCADcDIANAIAMpAyAgAykDKFQEQCADAn4gAykDKCADKQMgfSADKAI0KAIAIAMpAxinQQR0aikDCCADKQMQfVQEQCADKQMoIAMpAyB9DAELIAMoAjQoAgAgAykDGKdBBHRqKQMIIAMpAxB9CzcDCCADKAIwIAMpAyCnaiADKAI0KAIAIAMpAxinQQR0aigCACADKQMQp2ogAykDCKcQHBogAykDCCADKAI0KAIAIAMpAxinQQR0aikDCCADKQMQfVEEQCADIAMpAxhCAXw3AxgLIAMgAykDCCADKQMgfDcDICADQgA3AxAMAQsLIAMoAjQiACADKQMgIAApAzh8NwM4IAMoAjQgAykDGDcDQCADIAMpAyA3AzgLIAMpAzghAiADQUBrJAAgAguuBAEBfyMAQUBqIgMkACADIAA2AjggAyABNwMwIAMgAjYCLAJAIAMpAzBQBEAgA0EAQgBBASADKAIsEEw2AjwMAQsgAykDMCADKAI4KQMwVgRAIAMoAixBEkEAEBcgA0EANgI8DAELIAMoAjgoAigEQCADKAIsQR1BABAXIANBADYCPAwBCyADIAMoAjggAykDMBCwATcDICADIAMpAzAgAygCOCgCBCADKQMgp0EDdGopAwB9NwMYIAMpAxhQBEAgAyADKQMgQn98NwMgIAMgAygCOCgCACADKQMgp0EEdGopAwg3AxgLIAMgAygCOCgCACADKQMgp0EEdGopAwggAykDGH03AxAgAykDECADKQMwVgRAIAMoAixBHEEAEBcgA0EANgI8DAELIAMgAygCOCgCACADKQMgQgF8QQAgAygCLBBMIgA2AgwgAEUEQCADQQA2AjwMAQsgAygCDCgCACADKAIMKQMIQgF9p0EEdGogAykDGDcDCCADKAIMKAIEIAMoAgwp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ArQBIAMgATYCsAEgAyACNwOoASADIAMoArQBKAIAEDoiAjcDIAJAIAJCAFMEQCADKAK0AUEIaiADKAK0ASgCABAaIANCfzcDuAEMAQsgAyADKQMgNwOgASADQQA6ABcgA0IANwMYA0AgAykDGCADKQOoAVQEQCADIAMoArQBKAJAIAMoArABIAMpAxinQQN0aikDAKdBBHRqNgIMIAMgAygCtAECfyADKAIMKAIEBEAgAygCDCgCBAwBCyADKAIMKAIAC0GABBBdIgA2AhAgAEEASARAIANCfzcDuAEMAwsgAygCEARAIANBAToAFwsgAyADKQMYQgF8NwMYDAELCyADIAMoArQBKAIAEDoiAjcDICACQgBTBEAgAygCtAFBCGogAygCtAEoAgAQGiADQn83A7gBDAELIAMgAykDICADKQOgAX03A5gBAkAgAykDoAFC/////w9YBEAgAykDqAFC//8DWA0BCyADQQE6ABcLIAMgA0EwakLiABArIgA2AiwgAEUEQCADKAK0AUEIakEOQQAQFyADQn83A7gBDAELIAMtABdBAXEEQCADKAIsQdbXAEEEEEIgAygCLEIsEC8gAygCLEEtECIgAygCLEEtECIgAygCLEEAECMgAygCLEEAECMgAygCLCADKQOoARAvIAMoAiwgAykDqAEQLyADKAIsIAMpA5gBEC8gAygCLCADKQOgARAvIAMoAixB29cAQQQQQiADKAIsQQAQIyADKAIsIAMpA6ABIAMpA5gBfBAvIAMoAixBARAjCyADKAIsQeDXAEEEEEIgAygCLEEAECMgAygCLAJ+Qv//AyADKQOoAUL//wNaDQAaIAMpA6gBC6dB//8DcRAiIAMoAiwCfkL//wMgAykDqAFC//8DWg0AGiADKQOoAQunQf//A3EQIiADKAIsAn9BfyADKQOYAUL/////D1oNABogAykDmAGnCxAjIAMoAiwCf0F/IAMpA6ABQv////8PWg0AGiADKQOgAacLECMgAwJ/IAMoArQBLQAoQQFxBEAgAygCtAEoAiQMAQsgAygCtAEoAiALNgKUASADKAIsAn8gAygClAEEQCADKAKUAS8BBAwBC0EAC0H//wNxECICfyMAQRBrIgAgAygCLDYCDCAAKAIMLQAAQQFxRQsEQCADKAK0AUEIakEUQQAQFyADKAIsEBkgA0J/NwO4AQwBCyADKAK0AQJ/IwBBEGsiACADKAIsNgIMIAAoAgwoAgQLAn4jAEEQayIAIAMoAiw2AgwCfiAAKAIMLQAAQQFxBEAgACgCDCkDEAwBC0IACwsQO0EASARAIAMoAiwQGSADQn83A7gBDAELIAMoAiwQGSADKAKUAQRAIAMoArQBIAMoApQBKAIAIAMoApQBLwEErRA7QQBIBEAgA0J/NwO4AQwCCwsgAyADKQOYATcDuAELIAMpA7gBIQIgA0HAAWokACACCwYAQYShAQsGAEGAoQELBgBB+KABC8cCAQZ/IwBBIGsiAyQAIAMgACgCHCIFNgIQIAAoAhQhBCADIAI2AhwgAyABNgIYIAMgBCAFayIBNgIUIAEgAmohBkECIQUgA0EQaiEBA0ACQAJ/IAYCfwJ/QQAgACgCPCABIAUgA0EMahAWIgRFDQAaQbScASAENgIAQX8LBEAgA0F/NgIMQX8MAQsgAygCDAsiBEYEQCAAIAAoAiwiATYCHCAAIAE2AhQgACABIAAoAjBqNgIQIAIMAQsgBEF/Sg0BIABBADYCHCAAQgA3AxAgACAAKAIAQSByNgIAQQAgBUECRg0AGiACIAEoAgRrCyEAIANBIGokACAADwsgAUEIaiABIAQgASgCBCIHSyIIGyIBIAQgB0EAIAgbayIHIAEoAgBqNgIAIAEgASgCBCAHazYCBCAGIARrIQYgBSAIayEFDAAACwALtgUBAX8jAEEwayICJAAgAiAANgIoIAIgATcDIAJAIAIpAyAgAigCKCkDMFoEQCACKAIoQQhqQRJBABAXIAJBfzYCLAwBCyACIAIoAigoAkAgAikDIKdBBHRqNgIcAkAgAigCHCgCAARAIAIoAhwoAgAtAARBAXFFDQELIAJBADYCLAwBCyACKAIcKAIAKQNIQhp8Qv///////////wBWBEAgAigCKEEIakEEQRYQFyACQX82AiwMAQsgAigCKCgCACACKAIcKAIAKQNIQhp8QQAQLUEASARAIAIoAihBCGogAigCKCgCABAaIAJBfzYCLAwBCyACIAIoAigoAgBCBCACQRhqIAIoAihBCGoQQyIANgIUIABFBEAgAkF/NgIsDAELIAIgAigCFBAgOwESIAIgAigCFBAgOwEQIAIoAhQQSEEBcUUEQCACKAIUEBkgAigCKEEIakEUQQAQFyACQX82AiwMAQsgAigCFBAZIAIvARBBAEoEQCACKAIoKAIAIAIvARKtQQEQLUEASARAIAIoAihBCGpBBEG0nAEoAgAQFyACQX82AiwMAgsgAkEAIAIoAigoAgAgAi8BEEEAIAIoAihBCGoQYTYCCCACKAIIRQRAIAJBfzYCLAwCCyACKAIIIAIvARBBgAIgAkEMaiACKAIoQQhqEMIBQQFxRQRAIAIoAggQGCACQX82AiwMAgsgAigCCBAYIAIoAgwEQCACIAIoAgwQwQE2AgwgAigCHCgCACgCNCACKAIMEMMBIQAgAigCHCgCACAANgI0CwsgAigCHCgCAEEBOgAEAkAgAigCHCgCBEUNACACKAIcKAIELQAEQQFxDQAgAigCHCgCBCACKAIcKAIAKAI0NgI0IAIoAhwoAgRBAToABAsgAkEANgIsCyACKAIsIQAgAkEwaiQAIAALNwEBfyMAQSBrIgEkAAJ/QQEgACABQQhqEA0iAEUNABpBtJwBIAA2AgBBAAshACABQSBqJAAgAAuMAQEBfyMAQSBrIgIkACACIAA2AhggAiABNgIUIAJBADYCEAJAIAIoAhRFBEAgAkEANgIcDAELIAIgAigCFBAbNgIMIAIoAgxFBEAgAigCEEEOQQAQFyACQQA2AhwMAQsgAigCDCACKAIYIAIoAhQQHBogAiACKAIMNgIcCyACKAIcIQAgAkEgaiQAIAALCQAgACgCPBAGCwgAQQFBOBBnCwMAAQsL3Y0BJgBBgAgLEC0rICAgMFgweAAobnVsbCkAQaAICxgRAAoAERERAAAAAAUAAAAAAAAJAAAAAAsAQcAICyERAA8KERERAwoHAAETCQsLAAAJBgsAAAsABhEAAAAREREAQfEICwELAEH6CAsYEQAKChEREQAKAAACAAkLAAAACQALAAALAEGrCQsBDABBtwkLFQwAAAAADAAAAAAJDAAAAAAADAAADABB5QkLAQ4AQfEJCxUNAAAABA0AAAAACQ4AAAAAAA4AAA4AQZ8KCwEQAEGrCgseDwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAEHiCgsOEgAAABISEgAAAAAAAAkAQZMLCwELAEGfCwsVCgAAAAAKAAAAAAkLAAAAAAALAAALAEHNCwsBDABB2QsL6AYMAAAAAAwAAAAACQwAAAAAAAwAAAwAADAxMjM0NTY3ODlBQkNERUYtMFgrMFggMFgtMHgrMHggMHgAaW5mAElORgBuYW4ATkFOAC4ATm8gZXJyb3IATXVsdGktZGlzayB6aXAgYXJjaGl2ZXMgbm90IHN1cHBvcnRlZABSZW5hbWluZyB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQAQ2xvc2luZyB6aXAgYXJjaGl2ZSBmYWlsZWQAU2VlayBlcnJvcgBSZWFkIGVycm9yAFdyaXRlIGVycm9yAENSQyBlcnJvcgBDb250YWluaW5nIHppcCBhcmNoaXZlIHdhcyBjbG9zZWQATm8gc3VjaCBmaWxlAEZpbGUgYWxyZWFkeSBleGlzdHMAQ2FuJ3Qgb3BlbiBmaWxlAEZhaWx1cmUgdG8gY3JlYXRlIHRlbXBvcmFyeSBmaWxlAFpsaWIgZXJyb3IATWFsbG9jIGZhaWx1cmUARW50cnkgaGFzIGJlZW4gY2hhbmdlZABDb21wcmVzc2lvbiBtZXRob2Qgbm90IHN1cHBvcnRlZABQcmVtYXR1cmUgZW5kIG9mIGZpbGUASW52YWxpZCBhcmd1bWVudABOb3QgYSB6aXAgYXJjaGl2ZQBJbnRlcm5hbCBlcnJvcgBaaXAgYXJjaGl2ZSBpbmNvbnNpc3RlbnQAQ2FuJ3QgcmVtb3ZlIGZpbGUARW50cnkgaGFzIGJlZW4gZGVsZXRlZABFbmNyeXB0aW9uIG1ldGhvZCBub3Qgc3VwcG9ydGVkAFJlYWQtb25seSBhcmNoaXZlAE5vIHBhc3N3b3JkIHByb3ZpZGVkAFdyb25nIHBhc3N3b3JkIHByb3ZpZGVkAE9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkAFJlc291cmNlIHN0aWxsIGluIHVzZQBUZWxsIGVycm9yAENvbXByZXNzZWQgZGF0YSBpbnZhbGlkAAAAAAAAACUGAAAuBgAAVAYAAHMGAACOBgAAmQYAAKQGAACwBgAAugYAANwGAADpBgAA/QYAAA0HAAAuBwAAOQcAAEgHAABfBwAAgAcAAJYHAACnBwAAuQcAAMgHAADhBwAA8wcAAAoIAAAqCAAAPAgAAFEIAABpCAAAgQgAAJcIAACiCAAAIABB2BILEQEAAAABAAAAAQAAAAEAAAABAEH8EgsJAQAAAAEAAAACAEGoEwsBAQBByBMLAQEAQdQTC5JFljAHdyxhDu66UQmZGcRtB4/0anA1pWPpo5VknjKI2w6kuNx5HunV4IjZ0pcrTLYJvXyxfgctuOeRHb+QZBC3HfIgsGpIcbnz3kG+hH3U2hrr5N1tUbXU9MeF04NWmGwTwKhrZHr5Yv3syWWKT1wBFNlsBmNjPQ/69Q0IjcggbjteEGlM5EFg1XJxZ6LR5AM8R9QES/2FDdJrtQql+qi1NWyYskLWybvbQPm8rONs2DJ1XN9Fzw3W3Fk90ausMNkmOgDeUYBR18gWYdC/tfS0ISPEs1aZlbrPD6W9uJ64AigIiAVfstkMxiTpC7GHfG8vEUxoWKsdYcE9LWa2kEHcdgZx2wG8INKYKhDV74mFsXEftbYGpeS/nzPUuOiiyQd4NPkAD46oCZYYmA7huw1qfy09bQiXbGSRAVxj5vRRa2tiYWwc2DBlhU4AYvLtlQZse6UBG8H0CIJXxA/1xtmwZVDptxLquL6LfIi5/N8d3WJJLdoV83zTjGVM1PtYYbJNzlG1OnQAvKPiMLvUQaXfSteV2D1txNGk+/TW02rpaUP82W40RohnrdC4YNpzLQRE5R0DM19MCqrJfA3dPHEFUKpBAicQEAu+hiAMySW1aFezhW8gCdRmuZ/kYc4O+d5emMnZKSKY0LC0qNfHFz2zWYENtC47XL23rWy6wCCDuO22s7+aDOK2A5rSsXQ5R9Xqr3fSnRUm2wSDFtxzEgtj44Q7ZJQ+am0NqFpqegvPDuSd/wmTJ64ACrGeB31Ekw/w0qMIh2jyAR7+wgZpXVdi98tnZYBxNmwZ5wZrbnYb1P7gK9OJWnraEMxK3Wdv37n5+e++jkO+txfVjrBg6KPW1n6T0aHEwtg4UvLfT/Fnu9FnV7ym3Qa1P0s2skjaKw3YTBsKr/ZKAzZgegRBw+9g31XfZ6jvjm4xeb5pRoyzYcsag2a8oNJvJTbiaFKVdwzMA0cLu7kWAiIvJgVVvju6xSgLvbKSWrQrBGqzXKf/18Ixz9C1i57ZLB2u3luwwmSbJvJj7JyjanUKk20CqQYJnD82DuuFZwdyE1cABYJKv5UUerjiriuxezgbtgybjtKSDb7V5bfv3Hwh39sL1NLThkLi1PH4s91oboPaH80WvoFbJrn24Xewb3dHtxjmWgiIcGoP/8o7BmZcCwER/55lj2muYvjT/2thRc9sFnjiCqDu0g3XVIMETsKzAzlhJmen9xZg0E1HaUnbd24+SmrRrtxa1tlmC99A8DvYN1OuvKnFnrvef8+yR+n/tTAc8r29isK6yjCTs1Omo7QkBTbQupMG180pV95Uv2fZIy56ZrO4SmHEAhtoXZQrbyo3vgu0oY4MwxvfBVqN7wItAAAAAEExGxmCYjYyw1MtKwTFbGRF9Hd9hqdaVseWQU8IitnISbvC0Yro7/rL2fTjDE+1rE1+rrWOLYOezxyYh1ESwkoQI9lT03D0eJJB72FV164uFOa1N9e1mByWhIMFWZgbghipAJvb+i2wmss2qV1dd+YcbGz/3z9B1J4OWs2iJISV4xWfjCBGsqdhd6m+puHo8efQ8+gkg97DZbLF2qquXV3rn0ZEKMxrb2n9cHauazE571oqICwJBwttOBwS8zZG37IHXcZxVHDtMGVr9PfzKru2wjGidZEciTSgB5D7vJ8Xuo2EDnneqSU477I8/3nzc75I6Gp9G8VBPCreWAVPefBEfmLphy1PwsYcVNsBihWUQLsOjYPoI6bC2Ti/DcWgOEz0uyGPp5YKzpaNEwkAzFxIMddFi2L6bspT4XdUXbu6FWygo9Y/jYiXDpaRUJjX3hGpzMfS+uHsk8v69VzXYnId5nlr3rVUQJ+ET1lYEg4WGSMVD9pwOCSbQSM9p2v9ZeZa5nwlCctXZDjQTqOukQHin4oYIcynM2D9vCqv4SSt7tA/tC2DEp9ssgmGqyRIyeoVU9ApRn77aHdl4vZ5Py+3SCQ2dBsJHTUqEgTyvFNLs41IUnDeZXkx735g/vPm57/C/f58kdDVPaDLzPo2ioO7B5GaeFS8sTllp6hLmIM7CqmYIsn6tQmIy64QT13vXw5s9EbNP9ltjA7CdEMSWvMCI0HqwXBswYBBd9hH1zaXBuYtjsW1AKWEhBu8GopBcVu7WmiY6HdD2dlsWh5PLRVffjYMnC0bJ90cAD4SAJi5UzGDoJBirovRU7WSFsX03Vf078SUp8Lv1ZbZ9um8B66ojRy3a94xnCrvKoXteWvKrEhw028bXfguKkbh4TbeZqAHxX9jVOhUImXzTeXzsgKkwqkbZ5GEMCagnym4rsXk+Z/e/TrM89Z7/ejPvGupgP1aspk+CZ+yfziEq7AkHCzxFQc1MkYqHnN3MQe04XBI9dBrUTaDRnp3sl1jTtf6yw/m4dLMtcz5jYTX4EoSlq8LI422yHCgnYlBu4RGXSMDB2w4GsQ/FTGFDg4oQphPZwOpVH7A+nlVgctiTB/FOIFe9COYnacOs9yWFaobAFTlWjFP/JliYtfYU3nOF0/hSVZ++lCVLdd71BzMYhOKjS1Su5Y0kei7H9DZoAbs835ercJlR26RSGwvoFN16DYSOqkHCSNqVCQIK2U/EeR5p5alSLyPZhuRpCcqir3gvMvyoY3Q62Le/cAj7+bZveG8FPzQpw0/g4omfrKRP7kk0HD4FctpO0bmQnp3/Vu1a2Xc9Fp+xTcJU+52OEj3sa4JuPCfEqEzzD+Kcv0kkwAAAAA3asIBbtSEA1m+RgLcqAkH68LLBrJ8jQSFFk8FuFETDo870Q/WhZcN4e9VDGT5GglTk9gICi2eCj1HXAtwoyYcR8nkHR53oh8pHWAerAsvG5th7RrC36sY9bVpGcjyNRL/mPcTpiaxEZFMcxAUWjwVIzD+FHqOuBZN5HoX4EZNONcsjzmOksk7ufgLOjzuRD8LhIY+UjrAPGVQAj1YF142b32cNzbD2jUBqRg0hL9XMbPVlTDqa9My3QERM5DlaySnj6kl/jHvJ8lbLSZMTWIjeyegIiKZ5iAV8yQhKLR4Kh/euitGYPwpcQo+KPQccS3DdrMsmsj1Lq2iNy/AjZpw9+dYca5ZHnOZM9xyHCWTdytPUXZy8Rd0RZvVdXjciX5Ptkt/FggNfSFiz3ykdIB5kx5CeMqgBHr9ysZ7sC68bIdEfm3e+jhv6ZD6bmyGtWtb7HdqAlIxaDU482kIf69iPxVtY2arK2FRwelg1NemZeO9ZGS6AyJmjWngZyDL10gXoRVJTh9TS3l1kUr8Y95PywkcTpK3Wkyl3ZhNmJrERq/wBkf2TkBFwSSCREQyzUFzWA9AKuZJQh2Mi0NQaPFUZwIzVT68dVcJ1rdWjMD4U7uqOlLiFHxQ1X6+Ueg54lrfUyBbhu1mWbGHpFg0ketdA/spXFpFb15tL61fgBs14bdx9+Duz7Hi2aVz41yzPOZr2f7nMme45QUNeuQ4SibvDyDk7laeouxh9GDt5OIv6NOI7emKNqvrvVxp6vC4E/3H0tH8nmyX/qkGVf8sEBr6G3rY+0LEnvl1rlz4SOkA83+DwvImPYTwEVdG8ZRBCfSjK8v1+pWN983/T/ZgXXjZVze62A6J/No54z7bvPVx3oufs9/SIfXd5Us33NgMa9fvZqnWttjv1IGyLdUEpGLQM86g0Wpw5tNdGiTSEP5exSeUnMR+KtrGSUAYx8xWV8L7PJXDooLTwZXoEcCor03Ln8WPysZ7ycjxEQvJdAdEzENths0a08DPLbkCzkCWr5F3/G2QLkIrkhko6ZOcPqaWq1Rkl/LqIpXFgOCU+Me8n8+tfp6WEzicoXn6nSRvtZgTBXeZSrsxm33R85owNYmNB19LjF7hDY5pi8+P7J2Aitv3QouCSQSJtSPGiIhkmoO/DliC5rAegNHa3IFUzJOEY6ZRhToYF4cNctWGoNDiqZe6IKjOBGaq+W6kq3x4665LEimvEqxvrSXGrawYgfGnL+szpnZVdaRBP7elxCn4oPNDOqGq/XyjnZe+otBzxLXnGQa0vqdAtonNgrcM282yO7EPs2IPSbFVZYuwaCLXu19IFboG9lO4MZyRubSK3ryD4By92l5av+00mL4AAAAAZWe8uIvICarur7USV5dijzLw3jfcX2sluTjXne8otMWKTwh9ZOC9bwGHAde4v9ZK3dhq8jN33+BWEGNYn1cZUPowpegUnxD6cfisQsjAe9+tp8dnQwhydSZvzs1wf62VFRgRLfu3pD+e0BiHJ+jPGkKPc6KsIMawyUd6CD6vMqBbyI4YtWc7CtAAh7JpOFAvDF/sl+LwWYWHl+U90YeGZbTgOt1aT4/PPygzd4YQ5Orjd1hSDdjtQGi/Ufih+CvwxJ+XSCowIlpPV57i9m9Jf5MI9cd9p0DVGMD8bU7QnzUrtyONxRiWn6B/KicZR/26fCBBApKP9BD36EioPVgUm1g/qCO2kB0x0/ehiWrPdhQPqMqs4Qd/voRgwwbScKBetxcc5lm4qfQ83xVMhefC0eCAfmkOL8t7a0h3w6IPDcvHaLFzKccEYUyguNn1mG9EkP/T/H5QZu4bN9pWTSe5DihABbbG77Cko4gMHBqw24F/12c5kXjSK/QfbpMD9yY7ZpCag4g/L5HtWJMpVGBEtDEH+AzfqE0eus/xpuzfkv6JuC5GZxebVAJwJ+y7SPBx3i9MyTCA+dtV50VjnKA/a/nHg9MXaDbBcg+Kecs3XeSuUOFcQP9UTiWY6PZziIuuFu83FvhAggSdJz68JB/pIUF4VZmv1+CLyrBcMzu2We1e0eVVsH5QR9UZ7P9sITtiCUaH2ufpMsiCjo5w1J7tKLH5UZBfVuSCOjFYOoMJj6fmbjMfCMGGDW2mOrWk4UC9wYb8BS8pSRdKTvWv83YiMpYRnop4viuYHdmXIEvJ9HgurkjAwAH90qVmQWocXpb3eTkqT5eWn13y8SPlBRlrTWB+1/WO0WLn67beX1KOCcI36bV62UYAaLwhvNDqMd+Ij1ZjMGH51iIEnmqavaa9B9jBAb82brStUwkIFZpOch3/Kc6lEYZ7t3Thxw/N2RCSqL6sKkYRGTgjdqWAdWbG2BABemD+rs9ym8lzyiLxpFdHlhjvqTmt/cxeEUUG7k12Y4nxzo0mRNzoQfhkUXkv+TQek0HasSZTv9aa6+nG+bOMoUULYg7wGQdpTKG+UZs82zYnhDWZkpZQ/i4umblUJvze6J4ScV2MdxbhNM4uNqmrSYoRReY/AyCBg7t2keDjE/ZcW/1Z6UmYPlXxIQaCbERhPtSqzovGz6k3fjhBf9ZdJsNus4l2fNbuysRv1h1ZCrGh4eQeFPOBeahL12nLE7IOd6tcocK5OcZ+AYD+qZzlmRUkCzagNm5RHI6nFmaGwnHaPizebyxJudOU8IEECZXmuLF7SQ2jHi6xG0g+0kMtWW77w/bb6aaRZ1EfqbDMes4MdJRhuWbxBgXeAAAAAHcHMJbuDmEsmQlRugdtxBlwavSP6WOlNZ5klaMO24gyedy4pODV6R6X0tmICbZMK36xfL3nuC0HkL8dkR23EGRqsCDy87lxSIS+Qd4a2tR9bd3k6/TUtVGD04XHE2yYVmRrqMD9Yvl6imXJ7BQBXE9jBmzZ+g89Y40IDfU7biDITGkQXtVgQeSiZ3FyPAPk0UsE1EfSDYX9pQq1azW1qPpCsphs27vJ1qy8+UAy2GzjRd9cddzWDc+r0T1ZJtkwrFHeADrI11GAv9BhFiG09LVWs8Qjz7qVmbi9pQ8oArieXwWICMYM2bKxC+kkL298h1hoTBHBYR2rtmYtPXbcQZAB23EGmNIgvO/VECpxsYWJBra1H5+/5KXouNQzeAfJog8A+TSWCaiO4Q6YGH9qDbsIbT0tkWRsl+ZjXAFra1H0HGxhYoVlMNjyYgBObAaV7RsBpXuCCPTB9Q/EV2Ww2cYSt+lQi7646vy5iHxi3R3fFdotSYzTfPP71ExlTbJhWDq1Uc6jvAB01Lsw4krfpUE92JXXpNHEbdPW9PtDaelqNG7Z/K1niEbaYLjQRAQtczMDHeWqCkxf3Q18yVAFcTwnAkGqvgsQEMkMIIZXaLUlIG+Fs7lm1AnOYeSfXt75DinZyZiw0Jgix9eotFmzPRcutA2Bt71cO8C6bK3tuIMgmr+ztgO24gx0sdKa6tVHOZ3Sd68E2yYVc9wWg+NjCxKUZDuEDW1qPnpqWqjkDs8Lkwn/nQoArid9B56x8A+TRIcIo9IeAfJoaQbC/vdiV12AZWfLGWw2cW5rBuf+1Bt2idMr4BDaelpn3UrM+bnfb46+7/kXt75DYLCO1dbWo+ih0ZN+ONjCxE/f8lLRu2fxprxXZz+1Bt1IsjZL2A0r2q8KG0w2A0r2QQR6YN9g78OoZ99VMW6O70ZpvnnLYbOMvGaDGiVv0qBSaOI2zAx3lbsLRwMiAha5VQUmL8W6O76yvQsoK7RaklyzagTC1/+ntdDPMSzZnotb3q4dm2TCsOxj8iZ1aqOcAm2TCpwJBqnrDjY/cgdnhQUAVxOVv0qC4rh6FHuxK64Mths4ktKOm+XVvg183O+3C9vfIYbT0tTx1OJCaN2z+B/ag26BvhbN9rkmW2+wd+EYt0d3iAha5v8PanBmBjvKEQELXI9lnv/4Yq5pYWv/0xZsz0WgCuJ41w3S7k4Eg1Q5A7PCp2cmYdBgFvdJaUdNPm53267RakrZ1lrcQN8LZjfYO/CpvK5T3ruexUeyz38wtf/pvb3yHMq6wopTs5MwJLSjprrQNgXN1waTVN5XKSPZZ7+zZnouxGFKuF1oGwIqbyuUtAu+N8MMjqFaBd8bLQLvjQAAAAAZGzFBMjZigistU8NkbMUEfXf0RVZap4ZPQZbHyNmKCNHCu0n67+iK4/TZy6y1Twy1rn5NnoMtjoeYHM9KwhJRU9kjEHj0cNNh70GSLq7XVTe15hQcmLXXBYOEloIbmFmbAKkYsC3626k2y5rmd11d/2xsHNRBP9/NWg6elYQkooyfFeOnskYgvql3YfHo4abo89Dnw96DJNrFsmVdXa6qREaf629rzCh2cP1pOTFrriAqWu8LBwksEhw4bd9GNvPGXQey7XBUcfRrZTC7KvP3ojHCtokckXWQB6A0F5+8+w6Ejbolqd55PLLvOHPzef9q6Ei+QcUbfVjeKjzweU8F6WJ+RMJPLYfbVBzGlBWKAY0Ou0CmI+iDvzjZwjigxQ0hu/RMCpanjxONls5czAAJRdcxSG76Yot34VPKurtdVKOgbBWIjT/WkZYOl97XmFDHzKkR7OH60vX6y5NyYtdca3nmHUBUtd5ZT4SfFg4SWA8VIxkkOHDaPSNBm2X9a6d85lrmV8sJJU7QOGQBka6jGIqf4jOnzCEqvP1grSThr7Q/0O6fEoMthgmybMlIJKvQUxXq+35GKeJld2gvP3n2NiRItx0JG3QEEio1S1O88lJIjbN5Zd5wYH7vMefm8/7+/cK/1dCRfMzLoD2Dijb6mpEHu7G8VHiop2U5O4OYSyKYqQoJtfrJEK7LiF/vXU9G9GwObdk/zXTCDozzWhJD6kEjAsFscMHYd0GAlzbXR44t5galALXFvBuEhHFBihpoWrtbQ3fomFps2dkVLU8eDDZ+XycbLZw+ABzduZgAEqCDMVOLrmKQkrVT0d30xRbE7/RX78KnlPbZltWuB7zptxyNqJwx3muFKu8qymt57dNwSKz4XRtv4UYqLmbeNuF/xQegVOhUY03zZSICsvPlG6nCpDCEkWcpn6Am5MWuuP3en/nW88w6z+j9e4Cpa7yZslr9sp8JPquEOH8sHCSwNQcV8R4qRjIHMXdzSHDhtFFr0PV6RoM2Y12yd8v6107S4eYP+cy1zODXhI2vlhJKto0jC52gcMiEu0GJAyNdRho4bAcxFT/EKA4OhWdPmEJ+VKkDVXn6wExiy4GBOMUfmCP0XrMOp52qFZbc5VQAG/xPMVrXYmKZznlT2EnhTxdQ+n5We9ctlWLMHNQtjYoTNJa7Uh+76JEGoNnQXn7z7Edlwq1sSJFudVOgLzoSNugjCQepCCRUahE/ZSuWp3nkj7xIpaSRG2a9iion8su84OvQjaHA/d5i2ebvIxS84b0Np9D8JoqDPz+Rsn5w0CS5acsV+ELmRjtb/Xd63GVrtcV+WvTuUwk390g4drgJrrGhEp/wij/MM5Mk/XIAAAAAAcJqNwOE1G4CRr5ZBwmo3AbLwusEjXyyBU8WhQ4TUbgP0TuPDZeF1gxV7+EJGvlkCNiTUwqeLQoLXEc9HCajcB3kyUcfonceHmAdKRsvC6wa7WGbGKvfwhlptfUSNfLIE/eY/xGxJqYQc0yRFTxaFBT+MCMWuI56F3rkTThNRuA5jyzXO8mSjjoL+Lk/RO48PoaECzzAOlI9AlBlNl4XWDecfW812sM2NBipATFXv4QwldWzMtNr6jMRAd0ka+WQJamPpyfvMf4mLVvJI2JNTCKgJ3sg5pkiISTzFSp4tCgrut4fKfxgRig+CnEtcRz0LLN2wy71yJovN6KtcJqNwHFY5/dzHlmuctwzmXeTJRx2UU8rdBfxcnXVm0V+idx4f0u2T30NCBZ8z2IheYB0pHhCHpN6BKDKe8bK/Wy8LrBtfkSHbzj63m76kOlrtYZsanfsW2gxUgJp8zg1Yq9/CGNtFT9hK6tmYOnBUWWm19RkZL3jZiIDumfgaY1I18sgSRWhF0tTH05KkXV5T95j/E4cCctMWreSTZjdpUbEmphHBvCvRUBO9kSCJMFBzTJEQA9Yc0JJ5ipDi4wdVPFoUFUzAmdXdbw+VrfWCVP4wIxSOqq7UHwU4lG+ftVa4jnoWyBT31lm7YZYpIexXeuRNFwp+wNeb0VaX60vbeE1G4Dg93G34rHP7uNzpdnmPLNc5/7Za+W4ZzLkeg0F7yZKOO7kIA/sop5W7WD0Yegv4uTp7YjT66s2iuppXL39E7jw/NHSx/6XbJ7/VQap+hoQLPvYehv5nsRC+FyudfMA6UjywoN/8IQ9JvFGVxH0CUGU9csro/eNlfr2T//N2XhdYNi6N1fa/IkO2z7jOd5x9bzfs5+L3fUh0tw3S+XXawzY1qlm79Tv2LbVLbKB0GKkBNGgzjPT5nBq0iQaXcVe/hDEnJQnxtoqfscYQEnCV1bMw5U8+8HTgqLAEeiVy02vqMqPxZ/IyXvGyQsR8cxEB3TNhm1Dz8DTGs4CuS2Rr5ZAkG38d5IrQi6T6SgZlqY+nJdkVKuVIurylOCAxZ+8x/iefq3PnDgTlp36eaGYtW8kmXcFE5sxu0qa89F9jYk1MIxLXweODeFej8+LaYqAneyLQvfbiQRJgojGI7WDmmSIglgOv4AesOaB3NrRhJPMVIVRpmOHFxg6htVyDani0KCoILqXqmYEzqukbvmu63h8rykSS61vrBKsrcYlp/GBGKYz6y+kdVV2pbc/QaD4KcShOkPzo3z9qqK+l521xHPQtAYZ57ZAp763gs2Jss3bDLMPsTuxSQ9isItlVbvXImi6FUhfuFP2BrmRnDG83oq0vRzgg79aXtq+mDTtAAAAALi8Z2WqCciLErWv7o9il1c33vAyJWtf3J3XOLnFtCjvfQhPim+94GTXAYcBSta/uPJq2N3g33czWGMQVlAZV5/opTD6+hCfFEKs+HHfe8DIZ8enrXVyCEPNzm8mla1/cC0RGBU/pLf7hxjQnhrP6Ceic49CsMYgrAh6R8mgMq8+GI7IWwo7Z7WyhwDQL1A4aZfsXwyFWfDiPeWXh2WGh9HdOuC0z49PWnczKD/q5BCGUlh340Dt2A34Ub9o8Cv4oUiXn8RaIjAq4p5XT39Jb/bH9QiT1UCnfW38wBg1n9BOjSO3K5+WGMUnKn+guv1HGQJBIHwQ9I+SqEjo95sUWD0jqD9YMR2Qtomh99MUds9qrMqoD75/B+EGw2CEXqBw0uYcF7f0qbhZTBXfPNHC54VpfoDge8svDsN3SGvLDQ+ic7Fox2EExynZuKBMRG+Y9fzT/5DuZlB+Vto3Gw65J022BUAopLDvxhwMiKOB27AaOWfXfyvSeJGTbh/0Oyb3A4OakGaRLz+IKZNY7bREYFQM+AcxHk2o36bxz7r+kt/sRi64iVSbF2fsJ3ACcfBIu8lML97b+YAwY0XnVWs/oJzTg8f5wTZoF3mKD3LkXTfLXOFQrk5U/0D26JglrouIcxY37xYEgkD4vD4nnSHpHySZVXhBi+DXrzNcsMrtWbY7VeXRXkdQfrD/7BnVYjshbNqHRgnIMunncI6OgijtntSQUfmxguRWXzpYMTqnjwmDHzNu5g2GwQi1OqZtvUDhpAX8hsEXSSkvr/VOSjIidvOKnhGWmCu+eCCX2R149MlLwEiuLtL9AcBqQWal95ZeHE8qOXldn5aX5SPx8k1rGQX1135g52LRjl/etuvCCY5SerXpN2gARtnQvCG8iN8x6jBjVo8i1vlhmmqeBAe9pr2/AcHYrbRuNhUICVMdck6apc4p/7d7hhEPx+F0khDZzSqsvqg4GRFGgKV2I9jGZnVgegEQcs+u/spzyZtXpPEi7xiWR/2tOalFEV7Mdk3uBs7xiWPcRCaNZPhB6PkveVFBkx40Uyax2uua1r+z+cbpC0WhjBnwDmKhTGkHPJtRvoQnNtuWkpk1Li7+UCZUuZme6N78jF1xEjThFnepNi7OEYpJqwM/5kW7g4Eg4+CRdltc9hNJ6Vn98VU+mGyCBiHUPmFExovOqn43qc/Wf0E4bsMmXXx2ibPEyu7WWR3Wb+GhsQrzFB7kS6h5gRPLaderdw6yucKhXAF+xjmcqf6AJBWZ5TagNguOHFFuhmYWpz7accIsb94slNO5SQkEgfCxuOaVow1JexuxLh5D0j5I+25ZLenb9sNRZ5GmzLCpH3QMznpmuWGU3gUG8QAAOiY7JmUmZiZjJmAmIiDYJcsl2SVCJkAmaiZrJjwmuiXEJZUhPCC2AKcArCWoIZEhkyGSIZAhHyKUIbIlvCUgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AD8AQABBAEIAQwBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgBfAGAAYQBiAGMAZABlAGYAZwBoAGkAagBrAGwAbQBuAG8AcABxAHIAcwB0AHUAdgB3AHgAeQB6AHsAfAB9AH4AAiPHAPwA6QDiAOQA4ADlAOcA6gDrAOgA7wDuAOwAxADFAMkA5gDGAPQA9gDyAPsA+QD/ANYA3ACiAKMApQCnIJIB4QDtAPMA+gDxANEAqgC6AL8AECOsAL0AvAChAKsAuwCRJZIlkyUCJSQlYSViJVYlVSVjJVElVyVdJVwlWyUQJRQlNCUsJRwlACU8JV4lXyVaJVQlaSVmJWAlUCVsJWclaCVkJWUlWSVYJVIlUyVrJWolGCUMJYglhCWMJZAlgCWxA98AkwPAA6MDwwO1AMQDpgOYA6kDtAMeIsYDtQMpImEisQBlImQiICMhI/cASCKwABkitwAaIn8gsgCgJaAAAAAAAAAAUEsGBgBQSwYHAFBLBQYAUEsDBABQSwECAEFFAG5lZWQgZGljdGlvbmFyeQBzdHJlYW0gZW5kAABmaWxlIGVycm9yAHN0cmVhbSBlcnJvcgBkYXRhIGVycm9yAGluc3VmZmljaWVudCBtZW1vcnkAYnVmZmVyIGVycm9yAGluY29tcGF0aWJsZSB2ZXJzaW9uAEHw2AALJvIrAAACLAAADSwAAA4sAAAZLAAAJiwAADEsAABFLAAAUiwAAA0sAEGh2QALthABAgMEBAUFBgYGBgcHBwcICAgICAgICAkJCQkJCQkJCgoKCgoKCgoKCgoKCgoKCgsLCwsLCwsLCwsLCwsLCwsMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8AABAREhITExQUFBQVFRUVFhYWFhYWFhYXFxcXFxcXFxgYGBgYGBgYGBgYGBgYGBgZGRkZGRkZGRkZGRkZGRkZGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhobGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dAAECAwQFBgcICAkJCgoLCwwMDAwNDQ0NDg4ODg8PDw8QEBAQEBAQEBEREREREREREhISEhISEhITExMTExMTExQUFBQUFBQUFBQUFBQUFBQVFRUVFRUVFRUVFRUVFRUVFhYWFhYWFhYWFhYWFhYWFhcXFxcXFxcXFxcXFxcXFxcYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhobGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbHOAvAADgNAAAAQEAAB4BAAAPAAAAYDQAAGA1AAAAAAAAHgAAAA8AAAAAAAAA4DUAAAAAAAATAAAABwAAAAAAAAAMAAgAjAAIAEwACADMAAgALAAIAKwACABsAAgA7AAIABwACACcAAgAXAAIANwACAA8AAgAvAAIAHwACAD8AAgAAgAIAIIACABCAAgAwgAIACIACACiAAgAYgAIAOIACAASAAgAkgAIAFIACADSAAgAMgAIALIACAByAAgA8gAIAAoACACKAAgASgAIAMoACAAqAAgAqgAIAGoACADqAAgAGgAIAJoACABaAAgA2gAIADoACAC6AAgAegAIAPoACAAGAAgAhgAIAEYACADGAAgAJgAIAKYACABmAAgA5gAIABYACACWAAgAVgAIANYACAA2AAgAtgAIAHYACAD2AAgADgAIAI4ACABOAAgAzgAIAC4ACACuAAgAbgAIAO4ACAAeAAgAngAIAF4ACADeAAgAPgAIAL4ACAB+AAgA/gAIAAEACACBAAgAQQAIAMEACAAhAAgAoQAIAGEACADhAAgAEQAIAJEACABRAAgA0QAIADEACACxAAgAcQAIAPEACAAJAAgAiQAIAEkACADJAAgAKQAIAKkACABpAAgA6QAIABkACACZAAgAWQAIANkACAA5AAgAuQAIAHkACAD5AAgABQAIAIUACABFAAgAxQAIACUACAClAAgAZQAIAOUACAAVAAgAlQAIAFUACADVAAgANQAIALUACAB1AAgA9QAIAA0ACACNAAgATQAIAM0ACAAtAAgArQAIAG0ACADtAAgAHQAIAJ0ACABdAAgA3QAIAD0ACAC9AAgAfQAIAP0ACAATAAkAEwEJAJMACQCTAQkAUwAJAFMBCQDTAAkA0wEJADMACQAzAQkAswAJALMBCQBzAAkAcwEJAPMACQDzAQkACwAJAAsBCQCLAAkAiwEJAEsACQBLAQkAywAJAMsBCQArAAkAKwEJAKsACQCrAQkAawAJAGsBCQDrAAkA6wEJABsACQAbAQkAmwAJAJsBCQBbAAkAWwEJANsACQDbAQkAOwAJADsBCQC7AAkAuwEJAHsACQB7AQkA+wAJAPsBCQAHAAkABwEJAIcACQCHAQkARwAJAEcBCQDHAAkAxwEJACcACQAnAQkApwAJAKcBCQBnAAkAZwEJAOcACQDnAQkAFwAJABcBCQCXAAkAlwEJAFcACQBXAQkA1wAJANcBCQA3AAkANwEJALcACQC3AQkAdwAJAHcBCQD3AAkA9wEJAA8ACQAPAQkAjwAJAI8BCQBPAAkATwEJAM8ACQDPAQkALwAJAC8BCQCvAAkArwEJAG8ACQBvAQkA7wAJAO8BCQAfAAkAHwEJAJ8ACQCfAQkAXwAJAF8BCQDfAAkA3wEJAD8ACQA/AQkAvwAJAL8BCQB/AAkAfwEJAP8ACQD/AQkAAAAHAEAABwAgAAcAYAAHABAABwBQAAcAMAAHAHAA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Y2Ugb3IgYWRkcmVzcwBCbG9jayBkZXZpY2UgcmVxdWlyZWQATm8gc3VjaCBkZXZpY2UATm90IGEgZGlyZWN0b3J5AElzIGEgZGlyZWN0b3J5AFRleHQgZmlsZSBidXN5AEV4ZWMgZm9ybWF0IGVycm9yAEludmFsaWQgYXJndW1lbnQAQXJndW1lbnQgbGlzdCB0b28gbG9uZwBTeW1ib2xpYyBsaW5rIGxvb3AARmlsZW5hbWUgdG9vIGxvbmcAVG9vIG1hbnkgb3BlbiBmaWxlcyBpbiBzeXN0ZW0ATm8gZmlsZSBkZXNjcmlwdG9ycyBhdmFpbGFibGUAQmFkIGZpbGUgZGVzY3JpcHRvcgBObyBjaGlsZCBwcm9jZXNzAEJhZCBhZGRyZXNzAEZpbGUgdG9vIGxhcmdlAFRvbyBtYW55IGxpbmtzAE5vIGxvY2tzIGF2YWlsYWJsZQBSZXNvdXJjZSBkZWFkbG9jayB3b3VsZCBvY2N1cgBTdGF0ZSBub3QgcmVjb3ZlcmFibGUAUHJldmlvdXMgb3duZXIgZGllZABPcGVyYXRpb24gY2FuY2VsZWQARnVuY3Rpb24gbm90IGltcGxlbWVudGVkAE5vIG1lc3NhZ2Ugb2YgZGVzaXJlZCB0eXBlAElkZW50aWZpZXIgcmVtb3ZlZABEZXZpY2Ugbm90IGEgc3RyZWFtAE5vIGRhdGEgYXZhaWxhYmxlAERldmljZSB0aW1lb3V0AE91dCBvZiBzdHJlYW1zIHJlc291cmNlcwBMaW5rIGhhcyBiZWVuIHNldmVyZWQAUHJvdG9jb2wgZXJyb3IAQmFkIG1lc3NhZ2UARmlsZSBkZXNjcmlwdG9yIGluIGJhZCBzdGF0ZQBOb3QgYSBzb2NrZXQARGVzdGluYXRpb24gYWRkcmVzcyByZXF1aXJlZABNZXNzYWdlIHRvbyBsYXJnZQBQcm90b2NvbCB3cm9uZyB0eXBlIGZvciBzb2NrZXQAUHJvdG9jb2wgbm90IGF2YWlsYWJsZQBQcm90b2NvbCBub3Qgc3VwcG9ydGVkAFNvY2tldCB0eXBlIG5vdCBzdXBwb3J0ZWQATm90IHN1cHBvcnRlZABQcm90b2NvbCBmYW1pbHkgbm90IHN1cHBvcnRlZABBZGRyZXNzIGZhbWlseSBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sAEFkZHJlc3Mgbm90IGF2YWlsYWJsZQBOZXR3b3JrIGlzIGRvd24ATmV0d29yayB1bnJlYWNoYWJsZQBDb25uZWN0aW9uIHJlc2V0IGJ5IG5ldHdvcmsAQ29ubmVjdGlvbiBhYm9ydGVkAE5vIGJ1ZmZlciBzcGFjZSBhdmFpbGFibGUAU29ja2V0IGlzIGNvbm5lY3RlZABTb2NrZXQgbm90IGNvbm5lY3RlZABDYW5ub3Qgc2VuZCBhZnRlciBzb2NrZXQgc2h1dGRvd24AT3BlcmF0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3MAT3BlcmF0aW9uIGluIHByb2dyZXNzAFN0YWxlIGZpbGUgaGFuZGxlAFJlbW90ZSBJL08gZXJyb3IAUXVvdGEgZXhjZWVkZWQATm8gbWVkaXVtIGZvdW5kAFdyb25nIG1lZGl1bSB0eXBlAE5vIGVycm9yIGluZm9ybWF0aW9uAABVbmtub3duIGVycm9yICVkACVzJXMlcwAAOiAAL3Byb2Mvc2VsZi9mZC8AL2Rldi91cmFuZG9tAHJ3YQAlcy5YWFhYWFgAcitiAHJiAFBLBQYAQcyZAQsCYE4AQYSaAQvsAQwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMAAAABAAAACAAAAARNAAAkTQAAHwAAAGRNAAADAAAAAAAAAC30UVjPjLHARva1yykxA8cEW3AwtF39IHh/i5rYWSlQaEiJq6dWA2z/t82IP9R3tCulo3DxuuSo/EGD/dlv4Yp6Ly10lgcfDQleA3YscPdApSynb1dBqKp036BYZANKx8Q8U66vXxgEFbHjbSiGqwykv0Pw6VCBOVcWUjf/////////////////////";
|
6535 | if (!isDataURI(wasmBinaryFile)) {
|
6536 | wasmBinaryFile = locateFile(wasmBinaryFile);
|
6537 | }
|
6538 | function getBinary() {
|
6539 | try {
|
6540 | if (wasmBinary) {
|
6541 | return new Uint8Array(wasmBinary);
|
6542 | }
|
6543 | var binary = tryParseAsDataURI(wasmBinaryFile);
|
6544 | if (binary) {
|
6545 | return binary;
|
6546 | }
|
6547 | if (readBinary) {
|
6548 | return readBinary(wasmBinaryFile);
|
6549 | } else {
|
6550 | throw "sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)";
|
6551 | }
|
6552 | } catch (err) {
|
6553 | abort(err);
|
6554 | }
|
6555 | }
|
6556 | function createWasm() {
|
6557 | var info = { env: asmLibraryArg, wasi_unstable: asmLibraryArg };
|
6558 | function receiveInstance(instance, module) {
|
6559 | var exports = instance.exports;
|
6560 | Module["asm"] = exports;
|
6561 | removeRunDependency("wasm-instantiate");
|
6562 | }
|
6563 | addRunDependency("wasm-instantiate");
|
6564 | function instantiateSync() {
|
6565 | var instance;
|
6566 | var module;
|
6567 | var binary;
|
6568 | try {
|
6569 | binary = getBinary();
|
6570 | module = new WebAssembly.Module(binary);
|
6571 | instance = new WebAssembly.Instance(module, info);
|
6572 | } catch (e) {
|
6573 | var str = e.toString();
|
6574 | err("failed to compile wasm module: " + str);
|
6575 | if (
|
6576 | str.indexOf("imported Memory") >= 0 ||
|
6577 | str.indexOf("memory import") >= 0
|
6578 | ) {
|
6579 | err(
|
6580 | "Memory size incompatibility issues may be due to changing TOTAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set TOTAL_MEMORY at runtime to something smaller than it was at compile time)."
|
6581 | );
|
6582 | }
|
6583 | throw e;
|
6584 | }
|
6585 | receiveInstance(instance, module);
|
6586 | }
|
6587 | if (Module["instantiateWasm"]) {
|
6588 | try {
|
6589 | var exports = Module["instantiateWasm"](info, receiveInstance);
|
6590 | return exports;
|
6591 | } catch (e) {
|
6592 | err("Module.instantiateWasm callback failed with error: " + e);
|
6593 | return false;
|
6594 | }
|
6595 | }
|
6596 | instantiateSync();
|
6597 | return Module["asm"];
|
6598 | }
|
6599 | var tempDouble;
|
6600 | var tempI64;
|
6601 | __ATINIT__.push({
|
6602 | func: function() {
|
6603 | ___wasm_call_ctors();
|
6604 | }
|
6605 | });
|
6606 | function demangle(func) {
|
6607 | return func;
|
6608 | }
|
6609 | function demangleAll(text) {
|
6610 | var regex = /\b_Z[\w\d_]+/g;
|
6611 | return text.replace(regex, function(x) {
|
6612 | var y = demangle(x);
|
6613 | return x === y ? x : y + " [" + x + "]";
|
6614 | });
|
6615 | }
|
6616 | function jsStackTrace() {
|
6617 | var err = new Error();
|
6618 | if (!err.stack) {
|
6619 | try {
|
6620 | throw new Error(0);
|
6621 | } catch (e) {
|
6622 | err = e;
|
6623 | }
|
6624 | if (!err.stack) {
|
6625 | return "(no stack trace available)";
|
6626 | }
|
6627 | }
|
6628 | return err.stack.toString();
|
6629 | }
|
6630 | function stackTrace() {
|
6631 | var js = jsStackTrace();
|
6632 | if (Module["extraStackTrace"]) js += "\n" + Module["extraStackTrace"]();
|
6633 | return demangleAll(js);
|
6634 | }
|
6635 | function ___lock() {}
|
6636 | var PATH = {
|
6637 | splitPath: function(filename) {
|
6638 | var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;
|
6639 | return splitPathRe.exec(filename).slice(1);
|
6640 | },
|
6641 | normalizeArray: function(parts, allowAboveRoot) {
|
6642 | var up = 0;
|
6643 | for (var i = parts.length - 1; i >= 0; i--) {
|
6644 | var last = parts[i];
|
6645 | if (last === ".") {
|
6646 | parts.splice(i, 1);
|
6647 | } else if (last === "..") {
|
6648 | parts.splice(i, 1);
|
6649 | up++;
|
6650 | } else if (up) {
|
6651 | parts.splice(i, 1);
|
6652 | up--;
|
6653 | }
|
6654 | }
|
6655 | if (allowAboveRoot) {
|
6656 | for (; up; up--) {
|
6657 | parts.unshift("..");
|
6658 | }
|
6659 | }
|
6660 | return parts;
|
6661 | },
|
6662 | normalize: function(path) {
|
6663 | var isAbsolute = path.charAt(0) === "/",
|
6664 | trailingSlash = path.substr(-1) === "/";
|
6665 | path = PATH.normalizeArray(
|
6666 | path.split("/").filter(function(p) {
|
6667 | return !!p;
|
6668 | }),
|
6669 | !isAbsolute
|
6670 | ).join("/");
|
6671 | if (!path && !isAbsolute) {
|
6672 | path = ".";
|
6673 | }
|
6674 | if (path && trailingSlash) {
|
6675 | path += "/";
|
6676 | }
|
6677 | return (isAbsolute ? "/" : "") + path;
|
6678 | },
|
6679 | dirname: function(path) {
|
6680 | var result = PATH.splitPath(path),
|
6681 | root = result[0],
|
6682 | dir = result[1];
|
6683 | if (!root && !dir) {
|
6684 | return ".";
|
6685 | }
|
6686 | if (dir) {
|
6687 | dir = dir.substr(0, dir.length - 1);
|
6688 | }
|
6689 | return root + dir;
|
6690 | },
|
6691 | basename: function(path) {
|
6692 | if (path === "/") return "/";
|
6693 | var lastSlash = path.lastIndexOf("/");
|
6694 | if (lastSlash === -1) return path;
|
6695 | return path.substr(lastSlash + 1);
|
6696 | },
|
6697 | extname: function(path) {
|
6698 | return PATH.splitPath(path)[3];
|
6699 | },
|
6700 | join: function() {
|
6701 | var paths = Array.prototype.slice.call(arguments, 0);
|
6702 | return PATH.normalize(paths.join("/"));
|
6703 | },
|
6704 | join2: function(l, r) {
|
6705 | return PATH.normalize(l + "/" + r);
|
6706 | }
|
6707 | };
|
6708 | function ___setErrNo(value) {
|
6709 | if (Module["___errno_location"])
|
6710 | HEAP32[Module["___errno_location"]() >> 2] = value;
|
6711 | return value;
|
6712 | }
|
6713 | var PATH_FS = {
|
6714 | resolve: function() {
|
6715 | var resolvedPath = "",
|
6716 | resolvedAbsolute = false;
|
6717 | for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {
|
6718 | var path = i >= 0 ? arguments[i] : FS.cwd();
|
6719 | if (typeof path !== "string") {
|
6720 | throw new TypeError("Arguments to path.resolve must be strings");
|
6721 | } else if (!path) {
|
6722 | return "";
|
6723 | }
|
6724 | resolvedPath = path + "/" + resolvedPath;
|
6725 | resolvedAbsolute = path.charAt(0) === "/";
|
6726 | }
|
6727 | resolvedPath = PATH.normalizeArray(
|
6728 | resolvedPath.split("/").filter(function(p) {
|
6729 | return !!p;
|
6730 | }),
|
6731 | !resolvedAbsolute
|
6732 | ).join("/");
|
6733 | return (resolvedAbsolute ? "/" : "") + resolvedPath || ".";
|
6734 | },
|
6735 | relative: function(from, to) {
|
6736 | from = PATH_FS.resolve(from).substr(1);
|
6737 | to = PATH_FS.resolve(to).substr(1);
|
6738 | function trim(arr) {
|
6739 | var start = 0;
|
6740 | for (; start < arr.length; start++) {
|
6741 | if (arr[start] !== "") break;
|
6742 | }
|
6743 | var end = arr.length - 1;
|
6744 | for (; end >= 0; end--) {
|
6745 | if (arr[end] !== "") break;
|
6746 | }
|
6747 | if (start > end) return [];
|
6748 | return arr.slice(start, end - start + 1);
|
6749 | }
|
6750 | var fromParts = trim(from.split("/"));
|
6751 | var toParts = trim(to.split("/"));
|
6752 | var length = Math.min(fromParts.length, toParts.length);
|
6753 | var samePartsLength = length;
|
6754 | for (var i = 0; i < length; i++) {
|
6755 | if (fromParts[i] !== toParts[i]) {
|
6756 | samePartsLength = i;
|
6757 | break;
|
6758 | }
|
6759 | }
|
6760 | var outputParts = [];
|
6761 | for (var i = samePartsLength; i < fromParts.length; i++) {
|
6762 | outputParts.push("..");
|
6763 | }
|
6764 | outputParts = outputParts.concat(toParts.slice(samePartsLength));
|
6765 | return outputParts.join("/");
|
6766 | }
|
6767 | };
|
6768 | var TTY = {
|
6769 | ttys: [],
|
6770 | init: function() {},
|
6771 | shutdown: function() {},
|
6772 | register: function(dev, ops) {
|
6773 | TTY.ttys[dev] = { input: [], output: [], ops: ops };
|
6774 | FS.registerDevice(dev, TTY.stream_ops);
|
6775 | },
|
6776 | stream_ops: {
|
6777 | open: function(stream) {
|
6778 | var tty = TTY.ttys[stream.node.rdev];
|
6779 | if (!tty) {
|
6780 | throw new FS.ErrnoError(43);
|
6781 | }
|
6782 | stream.tty = tty;
|
6783 | stream.seekable = false;
|
6784 | },
|
6785 | close: function(stream) {
|
6786 | stream.tty.ops.flush(stream.tty);
|
6787 | },
|
6788 | flush: function(stream) {
|
6789 | stream.tty.ops.flush(stream.tty);
|
6790 | },
|
6791 | read: function(stream, buffer, offset, length, pos) {
|
6792 | if (!stream.tty || !stream.tty.ops.get_char) {
|
6793 | throw new FS.ErrnoError(60);
|
6794 | }
|
6795 | var bytesRead = 0;
|
6796 | for (var i = 0; i < length; i++) {
|
6797 | var result;
|
6798 | try {
|
6799 | result = stream.tty.ops.get_char(stream.tty);
|
6800 | } catch (e) {
|
6801 | throw new FS.ErrnoError(29);
|
6802 | }
|
6803 | if (result === undefined && bytesRead === 0) {
|
6804 | throw new FS.ErrnoError(6);
|
6805 | }
|
6806 | if (result === null || result === undefined) break;
|
6807 | bytesRead++;
|
6808 | buffer[offset + i] = result;
|
6809 | }
|
6810 | if (bytesRead) {
|
6811 | stream.node.timestamp = Date.now();
|
6812 | }
|
6813 | return bytesRead;
|
6814 | },
|
6815 | write: function(stream, buffer, offset, length, pos) {
|
6816 | if (!stream.tty || !stream.tty.ops.put_char) {
|
6817 | throw new FS.ErrnoError(60);
|
6818 | }
|
6819 | try {
|
6820 | for (var i = 0; i < length; i++) {
|
6821 | stream.tty.ops.put_char(stream.tty, buffer[offset + i]);
|
6822 | }
|
6823 | } catch (e) {
|
6824 | throw new FS.ErrnoError(29);
|
6825 | }
|
6826 | if (length) {
|
6827 | stream.node.timestamp = Date.now();
|
6828 | }
|
6829 | return i;
|
6830 | }
|
6831 | },
|
6832 | default_tty_ops: {
|
6833 | get_char: function(tty) {
|
6834 | if (!tty.input.length) {
|
6835 | var result = null;
|
6836 | if (ENVIRONMENT_IS_NODE) {
|
6837 | var BUFSIZE = 256;
|
6838 | var buf = Buffer.alloc ? Buffer.alloc(BUFSIZE) : new Buffer(BUFSIZE);
|
6839 | var bytesRead = 0;
|
6840 | try {
|
6841 | bytesRead = nodeFS.readSync(
|
6842 | process.stdin.fd,
|
6843 | buf,
|
6844 | 0,
|
6845 | BUFSIZE,
|
6846 | null
|
6847 | );
|
6848 | } catch (e) {
|
6849 | if (e.toString().indexOf("EOF") != -1) bytesRead = 0;
|
6850 | else throw e;
|
6851 | }
|
6852 | if (bytesRead > 0) {
|
6853 | result = buf.slice(0, bytesRead).toString("utf-8");
|
6854 | } else {
|
6855 | result = null;
|
6856 | }
|
6857 | } else if (
|
6858 | typeof window != "undefined" &&
|
6859 | typeof window.prompt == "function"
|
6860 | ) {
|
6861 | result = window.prompt("Input: ");
|
6862 | if (result !== null) {
|
6863 | result += "\n";
|
6864 | }
|
6865 | } else if (typeof readline == "function") {
|
6866 | result = readline();
|
6867 | if (result !== null) {
|
6868 | result += "\n";
|
6869 | }
|
6870 | }
|
6871 | if (!result) {
|
6872 | return null;
|
6873 | }
|
6874 | tty.input = intArrayFromString(result, true);
|
6875 | }
|
6876 | return tty.input.shift();
|
6877 | },
|
6878 | put_char: function(tty, val) {
|
6879 | if (val === null || val === 10) {
|
6880 | out(UTF8ArrayToString(tty.output, 0));
|
6881 | tty.output = [];
|
6882 | } else {
|
6883 | if (val != 0) tty.output.push(val);
|
6884 | }
|
6885 | },
|
6886 | flush: function(tty) {
|
6887 | if (tty.output && tty.output.length > 0) {
|
6888 | out(UTF8ArrayToString(tty.output, 0));
|
6889 | tty.output = [];
|
6890 | }
|
6891 | }
|
6892 | },
|
6893 | default_tty1_ops: {
|
6894 | put_char: function(tty, val) {
|
6895 | if (val === null || val === 10) {
|
6896 | err(UTF8ArrayToString(tty.output, 0));
|
6897 | tty.output = [];
|
6898 | } else {
|
6899 | if (val != 0) tty.output.push(val);
|
6900 | }
|
6901 | },
|
6902 | flush: function(tty) {
|
6903 | if (tty.output && tty.output.length > 0) {
|
6904 | err(UTF8ArrayToString(tty.output, 0));
|
6905 | tty.output = [];
|
6906 | }
|
6907 | }
|
6908 | }
|
6909 | };
|
6910 | var MEMFS = {
|
6911 | ops_table: null,
|
6912 | mount: function(mount) {
|
6913 | return MEMFS.createNode(null, "/", 16384 | 511, 0);
|
6914 | },
|
6915 | createNode: function(parent, name, mode, dev) {
|
6916 | if (FS.isBlkdev(mode) || FS.isFIFO(mode)) {
|
6917 | throw new FS.ErrnoError(63);
|
6918 | }
|
6919 | if (!MEMFS.ops_table) {
|
6920 | MEMFS.ops_table = {
|
6921 | dir: {
|
6922 | node: {
|
6923 | getattr: MEMFS.node_ops.getattr,
|
6924 | setattr: MEMFS.node_ops.setattr,
|
6925 | lookup: MEMFS.node_ops.lookup,
|
6926 | mknod: MEMFS.node_ops.mknod,
|
6927 | rename: MEMFS.node_ops.rename,
|
6928 | unlink: MEMFS.node_ops.unlink,
|
6929 | rmdir: MEMFS.node_ops.rmdir,
|
6930 | readdir: MEMFS.node_ops.readdir,
|
6931 | symlink: MEMFS.node_ops.symlink
|
6932 | },
|
6933 | stream: { llseek: MEMFS.stream_ops.llseek }
|
6934 | },
|
6935 | file: {
|
6936 | node: {
|
6937 | getattr: MEMFS.node_ops.getattr,
|
6938 | setattr: MEMFS.node_ops.setattr
|
6939 | },
|
6940 | stream: {
|
6941 | llseek: MEMFS.stream_ops.llseek,
|
6942 | read: MEMFS.stream_ops.read,
|
6943 | write: MEMFS.stream_ops.write,
|
6944 | allocate: MEMFS.stream_ops.allocate,
|
6945 | mmap: MEMFS.stream_ops.mmap,
|
6946 | msync: MEMFS.stream_ops.msync
|
6947 | }
|
6948 | },
|
6949 | link: {
|
6950 | node: {
|
6951 | getattr: MEMFS.node_ops.getattr,
|
6952 | setattr: MEMFS.node_ops.setattr,
|
6953 | readlink: MEMFS.node_ops.readlink
|
6954 | },
|
6955 | stream: {}
|
6956 | },
|
6957 | chrdev: {
|
6958 | node: {
|
6959 | getattr: MEMFS.node_ops.getattr,
|
6960 | setattr: MEMFS.node_ops.setattr
|
6961 | },
|
6962 | stream: FS.chrdev_stream_ops
|
6963 | }
|
6964 | };
|
6965 | }
|
6966 | var node = FS.createNode(parent, name, mode, dev);
|
6967 | if (FS.isDir(node.mode)) {
|
6968 | node.node_ops = MEMFS.ops_table.dir.node;
|
6969 | node.stream_ops = MEMFS.ops_table.dir.stream;
|
6970 | node.contents = {};
|
6971 | } else if (FS.isFile(node.mode)) {
|
6972 | node.node_ops = MEMFS.ops_table.file.node;
|
6973 | node.stream_ops = MEMFS.ops_table.file.stream;
|
6974 | node.usedBytes = 0;
|
6975 | node.contents = null;
|
6976 | } else if (FS.isLink(node.mode)) {
|
6977 | node.node_ops = MEMFS.ops_table.link.node;
|
6978 | node.stream_ops = MEMFS.ops_table.link.stream;
|
6979 | } else if (FS.isChrdev(node.mode)) {
|
6980 | node.node_ops = MEMFS.ops_table.chrdev.node;
|
6981 | node.stream_ops = MEMFS.ops_table.chrdev.stream;
|
6982 | }
|
6983 | node.timestamp = Date.now();
|
6984 | if (parent) {
|
6985 | parent.contents[name] = node;
|
6986 | }
|
6987 | return node;
|
6988 | },
|
6989 | getFileDataAsRegularArray: function(node) {
|
6990 | if (node.contents && node.contents.subarray) {
|
6991 | var arr = [];
|
6992 | for (var i = 0; i < node.usedBytes; ++i) arr.push(node.contents[i]);
|
6993 | return arr;
|
6994 | }
|
6995 | return node.contents;
|
6996 | },
|
6997 | getFileDataAsTypedArray: function(node) {
|
6998 | if (!node.contents) return new Uint8Array();
|
6999 | if (node.contents.subarray)
|
7000 | return node.contents.subarray(0, node.usedBytes);
|
7001 | return new Uint8Array(node.contents);
|
7002 | },
|
7003 | expandFileStorage: function(node, newCapacity) {
|
7004 | var prevCapacity = node.contents ? node.contents.length : 0;
|
7005 | if (prevCapacity >= newCapacity) return;
|
7006 | var CAPACITY_DOUBLING_MAX = 1024 * 1024;
|
7007 | newCapacity = Math.max(
|
7008 | newCapacity,
|
7009 | (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2 : 1.125)) | 0
|
7010 | );
|
7011 | if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256);
|
7012 | var oldContents = node.contents;
|
7013 | node.contents = new Uint8Array(newCapacity);
|
7014 | if (node.usedBytes > 0)
|
7015 | node.contents.set(oldContents.subarray(0, node.usedBytes), 0);
|
7016 | return;
|
7017 | },
|
7018 | resizeFileStorage: function(node, newSize) {
|
7019 | if (node.usedBytes == newSize) return;
|
7020 | if (newSize == 0) {
|
7021 | node.contents = null;
|
7022 | node.usedBytes = 0;
|
7023 | return;
|
7024 | }
|
7025 | if (!node.contents || node.contents.subarray) {
|
7026 | var oldContents = node.contents;
|
7027 | node.contents = new Uint8Array(new ArrayBuffer(newSize));
|
7028 | if (oldContents) {
|
7029 | node.contents.set(
|
7030 | oldContents.subarray(0, Math.min(newSize, node.usedBytes))
|
7031 | );
|
7032 | }
|
7033 | node.usedBytes = newSize;
|
7034 | return;
|
7035 | }
|
7036 | if (!node.contents) node.contents = [];
|
7037 | if (node.contents.length > newSize) node.contents.length = newSize;
|
7038 | else while (node.contents.length < newSize) node.contents.push(0);
|
7039 | node.usedBytes = newSize;
|
7040 | },
|
7041 | node_ops: {
|
7042 | getattr: function(node) {
|
7043 | var attr = {};
|
7044 | attr.dev = FS.isChrdev(node.mode) ? node.id : 1;
|
7045 | attr.ino = node.id;
|
7046 | attr.mode = node.mode;
|
7047 | attr.nlink = 1;
|
7048 | attr.uid = 0;
|
7049 | attr.gid = 0;
|
7050 | attr.rdev = node.rdev;
|
7051 | if (FS.isDir(node.mode)) {
|
7052 | attr.size = 4096;
|
7053 | } else if (FS.isFile(node.mode)) {
|
7054 | attr.size = node.usedBytes;
|
7055 | } else if (FS.isLink(node.mode)) {
|
7056 | attr.size = node.link.length;
|
7057 | } else {
|
7058 | attr.size = 0;
|
7059 | }
|
7060 | attr.atime = new Date(node.timestamp);
|
7061 | attr.mtime = new Date(node.timestamp);
|
7062 | attr.ctime = new Date(node.timestamp);
|
7063 | attr.blksize = 4096;
|
7064 | attr.blocks = Math.ceil(attr.size / attr.blksize);
|
7065 | return attr;
|
7066 | },
|
7067 | setattr: function(node, attr) {
|
7068 | if (attr.mode !== undefined) {
|
7069 | node.mode = attr.mode;
|
7070 | }
|
7071 | if (attr.timestamp !== undefined) {
|
7072 | node.timestamp = attr.timestamp;
|
7073 | }
|
7074 | if (attr.size !== undefined) {
|
7075 | MEMFS.resizeFileStorage(node, attr.size);
|
7076 | }
|
7077 | },
|
7078 | lookup: function(parent, name) {
|
7079 | throw FS.genericErrors[44];
|
7080 | },
|
7081 | mknod: function(parent, name, mode, dev) {
|
7082 | return MEMFS.createNode(parent, name, mode, dev);
|
7083 | },
|
7084 | rename: function(old_node, new_dir, new_name) {
|
7085 | if (FS.isDir(old_node.mode)) {
|
7086 | var new_node;
|
7087 | try {
|
7088 | new_node = FS.lookupNode(new_dir, new_name);
|
7089 | } catch (e) {}
|
7090 | if (new_node) {
|
7091 | for (var i in new_node.contents) {
|
7092 | throw new FS.ErrnoError(55);
|
7093 | }
|
7094 | }
|
7095 | }
|
7096 | delete old_node.parent.contents[old_node.name];
|
7097 | old_node.name = new_name;
|
7098 | new_dir.contents[new_name] = old_node;
|
7099 | old_node.parent = new_dir;
|
7100 | },
|
7101 | unlink: function(parent, name) {
|
7102 | delete parent.contents[name];
|
7103 | },
|
7104 | rmdir: function(parent, name) {
|
7105 | var node = FS.lookupNode(parent, name);
|
7106 | for (var i in node.contents) {
|
7107 | throw new FS.ErrnoError(55);
|
7108 | }
|
7109 | delete parent.contents[name];
|
7110 | },
|
7111 | readdir: function(node) {
|
7112 | var entries = [".", ".."];
|
7113 | for (var key in node.contents) {
|
7114 | if (!node.contents.hasOwnProperty(key)) {
|
7115 | continue;
|
7116 | }
|
7117 | entries.push(key);
|
7118 | }
|
7119 | return entries;
|
7120 | },
|
7121 | symlink: function(parent, newname, oldpath) {
|
7122 | var node = MEMFS.createNode(parent, newname, 511 | 40960, 0);
|
7123 | node.link = oldpath;
|
7124 | return node;
|
7125 | },
|
7126 | readlink: function(node) {
|
7127 | if (!FS.isLink(node.mode)) {
|
7128 | throw new FS.ErrnoError(28);
|
7129 | }
|
7130 | return node.link;
|
7131 | }
|
7132 | },
|
7133 | stream_ops: {
|
7134 | read: function(stream, buffer, offset, length, position) {
|
7135 | var contents = stream.node.contents;
|
7136 | if (position >= stream.node.usedBytes) return 0;
|
7137 | var size = Math.min(stream.node.usedBytes - position, length);
|
7138 | if (size > 8 && contents.subarray) {
|
7139 | buffer.set(contents.subarray(position, position + size), offset);
|
7140 | } else {
|
7141 | for (var i = 0; i < size; i++)
|
7142 | buffer[offset + i] = contents[position + i];
|
7143 | }
|
7144 | return size;
|
7145 | },
|
7146 | write: function(stream, buffer, offset, length, position, canOwn) {
|
7147 | if (buffer.buffer === HEAP8.buffer) {
|
7148 | canOwn = false;
|
7149 | }
|
7150 | if (!length) return 0;
|
7151 | var node = stream.node;
|
7152 | node.timestamp = Date.now();
|
7153 | if (buffer.subarray && (!node.contents || node.contents.subarray)) {
|
7154 | if (canOwn) {
|
7155 | node.contents = buffer.subarray(offset, offset + length);
|
7156 | node.usedBytes = length;
|
7157 | return length;
|
7158 | } else if (node.usedBytes === 0 && position === 0) {
|
7159 | node.contents = new Uint8Array(
|
7160 | buffer.subarray(offset, offset + length)
|
7161 | );
|
7162 | node.usedBytes = length;
|
7163 | return length;
|
7164 | } else if (position + length <= node.usedBytes) {
|
7165 | node.contents.set(buffer.subarray(offset, offset + length), position);
|
7166 | return length;
|
7167 | }
|
7168 | }
|
7169 | MEMFS.expandFileStorage(node, position + length);
|
7170 | if (node.contents.subarray && buffer.subarray)
|
7171 | node.contents.set(buffer.subarray(offset, offset + length), position);
|
7172 | else {
|
7173 | for (var i = 0; i < length; i++) {
|
7174 | node.contents[position + i] = buffer[offset + i];
|
7175 | }
|
7176 | }
|
7177 | node.usedBytes = Math.max(node.usedBytes, position + length);
|
7178 | return length;
|
7179 | },
|
7180 | llseek: function(stream, offset, whence) {
|
7181 | var position = offset;
|
7182 | if (whence === 1) {
|
7183 | position += stream.position;
|
7184 | } else if (whence === 2) {
|
7185 | if (FS.isFile(stream.node.mode)) {
|
7186 | position += stream.node.usedBytes;
|
7187 | }
|
7188 | }
|
7189 | if (position < 0) {
|
7190 | throw new FS.ErrnoError(28);
|
7191 | }
|
7192 | return position;
|
7193 | },
|
7194 | allocate: function(stream, offset, length) {
|
7195 | MEMFS.expandFileStorage(stream.node, offset + length);
|
7196 | stream.node.usedBytes = Math.max(stream.node.usedBytes, offset + length);
|
7197 | },
|
7198 | mmap: function(stream, buffer, offset, length, position, prot, flags) {
|
7199 | if (!FS.isFile(stream.node.mode)) {
|
7200 | throw new FS.ErrnoError(43);
|
7201 | }
|
7202 | var ptr;
|
7203 | var allocated;
|
7204 | var contents = stream.node.contents;
|
7205 | if (!(flags & 2) && contents.buffer === buffer.buffer) {
|
7206 | allocated = false;
|
7207 | ptr = contents.byteOffset;
|
7208 | } else {
|
7209 | if (position > 0 || position + length < stream.node.usedBytes) {
|
7210 | if (contents.subarray) {
|
7211 | contents = contents.subarray(position, position + length);
|
7212 | } else {
|
7213 | contents = Array.prototype.slice.call(
|
7214 | contents,
|
7215 | position,
|
7216 | position + length
|
7217 | );
|
7218 | }
|
7219 | }
|
7220 | allocated = true;
|
7221 | var fromHeap = buffer.buffer == HEAP8.buffer;
|
7222 | ptr = _malloc(length);
|
7223 | if (!ptr) {
|
7224 | throw new FS.ErrnoError(48);
|
7225 | }
|
7226 | (fromHeap ? HEAP8 : buffer).set(contents, ptr);
|
7227 | }
|
7228 | return { ptr: ptr, allocated: allocated };
|
7229 | },
|
7230 | msync: function(stream, buffer, offset, length, mmapFlags) {
|
7231 | if (!FS.isFile(stream.node.mode)) {
|
7232 | throw new FS.ErrnoError(43);
|
7233 | }
|
7234 | if (mmapFlags & 2) {
|
7235 | return 0;
|
7236 | }
|
7237 | var bytesWritten = MEMFS.stream_ops.write(
|
7238 | stream,
|
7239 | buffer,
|
7240 | 0,
|
7241 | length,
|
7242 | offset,
|
7243 | false
|
7244 | );
|
7245 | return 0;
|
7246 | }
|
7247 | }
|
7248 | };
|
7249 | var ERRNO_CODES = {
|
7250 | EPERM: 63,
|
7251 | ENOENT: 44,
|
7252 | ESRCH: 71,
|
7253 | EINTR: 27,
|
7254 | EIO: 29,
|
7255 | ENXIO: 60,
|
7256 | E2BIG: 1,
|
7257 | ENOEXEC: 45,
|
7258 | EBADF: 8,
|
7259 | ECHILD: 12,
|
7260 | EAGAIN: 6,
|
7261 | EWOULDBLOCK: 6,
|
7262 | ENOMEM: 48,
|
7263 | EACCES: 2,
|
7264 | EFAULT: 21,
|
7265 | ENOTBLK: 105,
|
7266 | EBUSY: 10,
|
7267 | EEXIST: 20,
|
7268 | EXDEV: 75,
|
7269 | ENODEV: 43,
|
7270 | ENOTDIR: 54,
|
7271 | EISDIR: 31,
|
7272 | EINVAL: 28,
|
7273 | ENFILE: 41,
|
7274 | EMFILE: 33,
|
7275 | ENOTTY: 59,
|
7276 | ETXTBSY: 74,
|
7277 | EFBIG: 22,
|
7278 | ENOSPC: 51,
|
7279 | ESPIPE: 70,
|
7280 | EROFS: 69,
|
7281 | EMLINK: 34,
|
7282 | EPIPE: 64,
|
7283 | EDOM: 18,
|
7284 | ERANGE: 68,
|
7285 | ENOMSG: 49,
|
7286 | EIDRM: 24,
|
7287 | ECHRNG: 106,
|
7288 | EL2NSYNC: 156,
|
7289 | EL3HLT: 107,
|
7290 | EL3RST: 108,
|
7291 | ELNRNG: 109,
|
7292 | EUNATCH: 110,
|
7293 | ENOCSI: 111,
|
7294 | EL2HLT: 112,
|
7295 | EDEADLK: 16,
|
7296 | ENOLCK: 46,
|
7297 | EBADE: 113,
|
7298 | EBADR: 114,
|
7299 | EXFULL: 115,
|
7300 | ENOANO: 104,
|
7301 | EBADRQC: 103,
|
7302 | EBADSLT: 102,
|
7303 | EDEADLOCK: 16,
|
7304 | EBFONT: 101,
|
7305 | ENOSTR: 100,
|
7306 | ENODATA: 116,
|
7307 | ETIME: 117,
|
7308 | ENOSR: 118,
|
7309 | ENONET: 119,
|
7310 | ENOPKG: 120,
|
7311 | EREMOTE: 121,
|
7312 | ENOLINK: 47,
|
7313 | EADV: 122,
|
7314 | ESRMNT: 123,
|
7315 | ECOMM: 124,
|
7316 | EPROTO: 65,
|
7317 | EMULTIHOP: 36,
|
7318 | EDOTDOT: 125,
|
7319 | EBADMSG: 9,
|
7320 | ENOTUNIQ: 126,
|
7321 | EBADFD: 127,
|
7322 | EREMCHG: 128,
|
7323 | ELIBACC: 129,
|
7324 | ELIBBAD: 130,
|
7325 | ELIBSCN: 131,
|
7326 | ELIBMAX: 132,
|
7327 | ELIBEXEC: 133,
|
7328 | ENOSYS: 52,
|
7329 | ENOTEMPTY: 55,
|
7330 | ENAMETOOLONG: 37,
|
7331 | ELOOP: 32,
|
7332 | EOPNOTSUPP: 138,
|
7333 | EPFNOSUPPORT: 139,
|
7334 | ECONNRESET: 15,
|
7335 | ENOBUFS: 42,
|
7336 | EAFNOSUPPORT: 5,
|
7337 | EPROTOTYPE: 67,
|
7338 | ENOTSOCK: 57,
|
7339 | ENOPROTOOPT: 50,
|
7340 | ESHUTDOWN: 140,
|
7341 | ECONNREFUSED: 14,
|
7342 | EADDRINUSE: 3,
|
7343 | ECONNABORTED: 13,
|
7344 | ENETUNREACH: 40,
|
7345 | ENETDOWN: 38,
|
7346 | ETIMEDOUT: 73,
|
7347 | EHOSTDOWN: 142,
|
7348 | EHOSTUNREACH: 23,
|
7349 | EINPROGRESS: 26,
|
7350 | EALREADY: 7,
|
7351 | EDESTADDRREQ: 17,
|
7352 | EMSGSIZE: 35,
|
7353 | EPROTONOSUPPORT: 66,
|
7354 | ESOCKTNOSUPPORT: 137,
|
7355 | EADDRNOTAVAIL: 4,
|
7356 | ENETRESET: 39,
|
7357 | EISCONN: 30,
|
7358 | ENOTCONN: 53,
|
7359 | ETOOMANYREFS: 141,
|
7360 | EUSERS: 136,
|
7361 | EDQUOT: 19,
|
7362 | ESTALE: 72,
|
7363 | ENOTSUP: 138,
|
7364 | ENOMEDIUM: 148,
|
7365 | EILSEQ: 25,
|
7366 | EOVERFLOW: 61,
|
7367 | ECANCELED: 11,
|
7368 | ENOTRECOVERABLE: 56,
|
7369 | EOWNERDEAD: 62,
|
7370 | ESTRPIPE: 135
|
7371 | };
|
7372 | var NODEFS = {
|
7373 | isWindows: false,
|
7374 | staticInit: function() {
|
7375 | NODEFS.isWindows = !!process.platform.match(/^win/);
|
7376 | var flags = { fs: fs.constants };
|
7377 | if (flags["fs"]) {
|
7378 | flags = flags["fs"];
|
7379 | }
|
7380 | NODEFS.flagsForNodeMap = {
|
7381 | 1024: flags["O_APPEND"],
|
7382 | 64: flags["O_CREAT"],
|
7383 | 128: flags["O_EXCL"],
|
7384 | 0: flags["O_RDONLY"],
|
7385 | 2: flags["O_RDWR"],
|
7386 | 4096: flags["O_SYNC"],
|
7387 | 512: flags["O_TRUNC"],
|
7388 | 1: flags["O_WRONLY"]
|
7389 | };
|
7390 | },
|
7391 | bufferFrom: function(arrayBuffer) {
|
7392 | return Buffer["alloc"] ? Buffer.from(arrayBuffer) : new Buffer(arrayBuffer);
|
7393 | },
|
7394 | convertNodeCode: function(e) {
|
7395 | var code = e.code;
|
7396 | assert(code in ERRNO_CODES);
|
7397 | return ERRNO_CODES[code];
|
7398 | },
|
7399 | mount: function(mount) {
|
7400 | assert(ENVIRONMENT_HAS_NODE);
|
7401 | return NODEFS.createNode(null, "/", NODEFS.getMode(mount.opts.root), 0);
|
7402 | },
|
7403 | createNode: function(parent, name, mode, dev) {
|
7404 | if (!FS.isDir(mode) && !FS.isFile(mode) && !FS.isLink(mode)) {
|
7405 | throw new FS.ErrnoError(28);
|
7406 | }
|
7407 | var node = FS.createNode(parent, name, mode);
|
7408 | node.node_ops = NODEFS.node_ops;
|
7409 | node.stream_ops = NODEFS.stream_ops;
|
7410 | return node;
|
7411 | },
|
7412 | getMode: function(path) {
|
7413 | var stat;
|
7414 | try {
|
7415 | stat = fs.lstatSync(path);
|
7416 | if (NODEFS.isWindows) {
|
7417 | stat.mode = stat.mode | ((stat.mode & 292) >> 2);
|
7418 | }
|
7419 | } catch (e) {
|
7420 | if (!e.code) throw e;
|
7421 | throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
|
7422 | }
|
7423 | return stat.mode;
|
7424 | },
|
7425 | realPath: function(node) {
|
7426 | var parts = [];
|
7427 | while (node.parent !== node) {
|
7428 | parts.push(node.name);
|
7429 | node = node.parent;
|
7430 | }
|
7431 | parts.push(node.mount.opts.root);
|
7432 | parts.reverse();
|
7433 | return PATH.join.apply(null, parts);
|
7434 | },
|
7435 | flagsForNode: function(flags) {
|
7436 | flags &= ~2097152;
|
7437 | flags &= ~2048;
|
7438 | flags &= ~32768;
|
7439 | flags &= ~524288;
|
7440 | var newFlags = 0;
|
7441 | for (var k in NODEFS.flagsForNodeMap) {
|
7442 | if (flags & k) {
|
7443 | newFlags |= NODEFS.flagsForNodeMap[k];
|
7444 | flags ^= k;
|
7445 | }
|
7446 | }
|
7447 | if (!flags) {
|
7448 | return newFlags;
|
7449 | } else {
|
7450 | throw new FS.ErrnoError(28);
|
7451 | }
|
7452 | },
|
7453 | node_ops: {
|
7454 | getattr: function(node) {
|
7455 | var path = NODEFS.realPath(node);
|
7456 | var stat;
|
7457 | try {
|
7458 | stat = fs.lstatSync(path);
|
7459 | } catch (e) {
|
7460 | if (!e.code) throw e;
|
7461 | throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
|
7462 | }
|
7463 | if (NODEFS.isWindows && !stat.blksize) {
|
7464 | stat.blksize = 4096;
|
7465 | }
|
7466 | if (NODEFS.isWindows && !stat.blocks) {
|
7467 | stat.blocks = ((stat.size + stat.blksize - 1) / stat.blksize) | 0;
|
7468 | }
|
7469 | return {
|
7470 | dev: stat.dev,
|
7471 | ino: stat.ino,
|
7472 | mode: stat.mode,
|
7473 | nlink: stat.nlink,
|
7474 | uid: stat.uid,
|
7475 | gid: stat.gid,
|
7476 | rdev: stat.rdev,
|
7477 | size: stat.size,
|
7478 | atime: stat.atime,
|
7479 | mtime: stat.mtime,
|
7480 | ctime: stat.ctime,
|
7481 | blksize: stat.blksize,
|
7482 | blocks: stat.blocks
|
7483 | };
|
7484 | },
|
7485 | setattr: function(node, attr) {
|
7486 | var path = NODEFS.realPath(node);
|
7487 | try {
|
7488 | if (attr.mode !== undefined) {
|
7489 | fs.chmodSync(path, attr.mode);
|
7490 | node.mode = attr.mode;
|
7491 | }
|
7492 | if (attr.timestamp !== undefined) {
|
7493 | var date = new Date(attr.timestamp);
|
7494 | fs.utimesSync(path, date, date);
|
7495 | }
|
7496 | if (attr.size !== undefined) {
|
7497 | fs.truncateSync(path, attr.size);
|
7498 | }
|
7499 | } catch (e) {
|
7500 | if (!e.code) throw e;
|
7501 | throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
|
7502 | }
|
7503 | },
|
7504 | lookup: function(parent, name) {
|
7505 | var path = PATH.join2(NODEFS.realPath(parent), name);
|
7506 | var mode = NODEFS.getMode(path);
|
7507 | return NODEFS.createNode(parent, name, mode);
|
7508 | },
|
7509 | mknod: function(parent, name, mode, dev) {
|
7510 | var node = NODEFS.createNode(parent, name, mode, dev);
|
7511 | var path = NODEFS.realPath(node);
|
7512 | try {
|
7513 | if (FS.isDir(node.mode)) {
|
7514 | fs.mkdirSync(path, node.mode);
|
7515 | } else {
|
7516 | fs.writeFileSync(path, "", { mode: node.mode });
|
7517 | }
|
7518 | } catch (e) {
|
7519 | if (!e.code) throw e;
|
7520 | throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
|
7521 | }
|
7522 | return node;
|
7523 | },
|
7524 | rename: function(oldNode, newDir, newName) {
|
7525 | var oldPath = NODEFS.realPath(oldNode);
|
7526 | var newPath = PATH.join2(NODEFS.realPath(newDir), newName);
|
7527 | try {
|
7528 | fs.renameSync(oldPath, newPath);
|
7529 | } catch (e) {
|
7530 | if (!e.code) throw e;
|
7531 | throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
|
7532 | }
|
7533 | },
|
7534 | unlink: function(parent, name) {
|
7535 | var path = PATH.join2(NODEFS.realPath(parent), name);
|
7536 | try {
|
7537 | fs.unlinkSync(path);
|
7538 | } catch (e) {
|
7539 | if (!e.code) throw e;
|
7540 | throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
|
7541 | }
|
7542 | },
|
7543 | rmdir: function(parent, name) {
|
7544 | var path = PATH.join2(NODEFS.realPath(parent), name);
|
7545 | try {
|
7546 | fs.rmdirSync(path);
|
7547 | } catch (e) {
|
7548 | if (!e.code) throw e;
|
7549 | throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
|
7550 | }
|
7551 | },
|
7552 | readdir: function(node) {
|
7553 | var path = NODEFS.realPath(node);
|
7554 | try {
|
7555 | return fs.readdirSync(path);
|
7556 | } catch (e) {
|
7557 | if (!e.code) throw e;
|
7558 | throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
|
7559 | }
|
7560 | },
|
7561 | symlink: function(parent, newName, oldPath) {
|
7562 | var newPath = PATH.join2(NODEFS.realPath(parent), newName);
|
7563 | try {
|
7564 | fs.symlinkSync(oldPath, newPath);
|
7565 | } catch (e) {
|
7566 | if (!e.code) throw e;
|
7567 | throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
|
7568 | }
|
7569 | },
|
7570 | readlink: function(node) {
|
7571 | var path = NODEFS.realPath(node);
|
7572 | try {
|
7573 | path = fs.readlinkSync(path);
|
7574 | path = NODEJS_PATH.relative(
|
7575 | NODEJS_PATH.resolve(node.mount.opts.root),
|
7576 | path
|
7577 | );
|
7578 | return path;
|
7579 | } catch (e) {
|
7580 | if (!e.code) throw e;
|
7581 | throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
|
7582 | }
|
7583 | }
|
7584 | },
|
7585 | stream_ops: {
|
7586 | open: function(stream) {
|
7587 | var path = NODEFS.realPath(stream.node);
|
7588 | try {
|
7589 | if (FS.isFile(stream.node.mode)) {
|
7590 | stream.nfd = fs.openSync(path, NODEFS.flagsForNode(stream.flags));
|
7591 | }
|
7592 | } catch (e) {
|
7593 | if (!e.code) throw e;
|
7594 | throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
|
7595 | }
|
7596 | },
|
7597 | close: function(stream) {
|
7598 | try {
|
7599 | if (FS.isFile(stream.node.mode) && stream.nfd) {
|
7600 | fs.closeSync(stream.nfd);
|
7601 | }
|
7602 | } catch (e) {
|
7603 | if (!e.code) throw e;
|
7604 | throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
|
7605 | }
|
7606 | },
|
7607 | read: function(stream, buffer, offset, length, position) {
|
7608 | if (length === 0) return 0;
|
7609 | try {
|
7610 | return fs.readSync(
|
7611 | stream.nfd,
|
7612 | NODEFS.bufferFrom(buffer.buffer),
|
7613 | offset,
|
7614 | length,
|
7615 | position
|
7616 | );
|
7617 | } catch (e) {
|
7618 | throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
|
7619 | }
|
7620 | },
|
7621 | write: function(stream, buffer, offset, length, position) {
|
7622 | try {
|
7623 | return fs.writeSync(
|
7624 | stream.nfd,
|
7625 | NODEFS.bufferFrom(buffer.buffer),
|
7626 | offset,
|
7627 | length,
|
7628 | position
|
7629 | );
|
7630 | } catch (e) {
|
7631 | throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
|
7632 | }
|
7633 | },
|
7634 | llseek: function(stream, offset, whence) {
|
7635 | var position = offset;
|
7636 | if (whence === 1) {
|
7637 | position += stream.position;
|
7638 | } else if (whence === 2) {
|
7639 | if (FS.isFile(stream.node.mode)) {
|
7640 | try {
|
7641 | var stat = fs.fstatSync(stream.nfd);
|
7642 | position += stat.size;
|
7643 | } catch (e) {
|
7644 | throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
|
7645 | }
|
7646 | }
|
7647 | }
|
7648 | if (position < 0) {
|
7649 | throw new FS.ErrnoError(28);
|
7650 | }
|
7651 | return position;
|
7652 | }
|
7653 | }
|
7654 | };
|
7655 | var NODERAWFS = {
|
7656 | lookupPath: function(path) {
|
7657 | return { path: path, node: { mode: NODEFS.getMode(path) } };
|
7658 | },
|
7659 | createStandardStreams: function() {
|
7660 | FS.streams[0] = {
|
7661 | fd: 0,
|
7662 | nfd: 0,
|
7663 | position: 0,
|
7664 | path: "",
|
7665 | flags: 0,
|
7666 | tty: true,
|
7667 | seekable: false
|
7668 | };
|
7669 | for (var i = 1; i < 3; i++) {
|
7670 | FS.streams[i] = {
|
7671 | fd: i,
|
7672 | nfd: i,
|
7673 | position: 0,
|
7674 | path: "",
|
7675 | flags: 577,
|
7676 | tty: true,
|
7677 | seekable: false
|
7678 | };
|
7679 | }
|
7680 | },
|
7681 | cwd: function() {
|
7682 | return process.cwd();
|
7683 | },
|
7684 | chdir: function() {
|
7685 | process.chdir.apply(void 0, arguments);
|
7686 | },
|
7687 | mknod: function(path, mode) {
|
7688 | if (FS.isDir(path)) {
|
7689 | fs.mkdirSync(path, mode);
|
7690 | } else {
|
7691 | fs.writeFileSync(path, "", { mode: mode });
|
7692 | }
|
7693 | },
|
7694 | mkdir: function() {
|
7695 | fs.mkdirSync.apply(void 0, arguments);
|
7696 | },
|
7697 | symlink: function() {
|
7698 | fs.symlinkSync.apply(void 0, arguments);
|
7699 | },
|
7700 | rename: function() {
|
7701 | fs.renameSync.apply(void 0, arguments);
|
7702 | },
|
7703 | rmdir: function() {
|
7704 | fs.rmdirSync.apply(void 0, arguments);
|
7705 | },
|
7706 | readdir: function() {
|
7707 | fs.readdirSync.apply(void 0, arguments);
|
7708 | },
|
7709 | unlink: function() {
|
7710 | fs.unlinkSync.apply(void 0, arguments);
|
7711 | },
|
7712 | readlink: function() {
|
7713 | return fs.readlinkSync.apply(void 0, arguments);
|
7714 | },
|
7715 | stat: function() {
|
7716 | return fs.statSync.apply(void 0, arguments);
|
7717 | },
|
7718 | lstat: function() {
|
7719 | return fs.lstatSync.apply(void 0, arguments);
|
7720 | },
|
7721 | chmod: function() {
|
7722 | fs.chmodSync.apply(void 0, arguments);
|
7723 | },
|
7724 | fchmod: function() {
|
7725 | fs.fchmodSync.apply(void 0, arguments);
|
7726 | },
|
7727 | chown: function() {
|
7728 | fs.chownSync.apply(void 0, arguments);
|
7729 | },
|
7730 | fchown: function() {
|
7731 | fs.fchownSync.apply(void 0, arguments);
|
7732 | },
|
7733 | truncate: function() {
|
7734 | fs.truncateSync.apply(void 0, arguments);
|
7735 | },
|
7736 | ftruncate: function() {
|
7737 | fs.ftruncateSync.apply(void 0, arguments);
|
7738 | },
|
7739 | utime: function() {
|
7740 | fs.utimesSync.apply(void 0, arguments);
|
7741 | },
|
7742 | open: function(path, flags, mode, suggestFD) {
|
7743 | if (typeof flags === "string") {
|
7744 | flags = VFS.modeStringToFlags(flags);
|
7745 | }
|
7746 | var nfd = fs.openSync(path, NODEFS.flagsForNode(flags), mode);
|
7747 | var fd = suggestFD != null ? suggestFD : FS.nextfd(nfd);
|
7748 | var stream = {
|
7749 | fd: fd,
|
7750 | nfd: nfd,
|
7751 | position: 0,
|
7752 | path: path,
|
7753 | flags: flags,
|
7754 | seekable: true
|
7755 | };
|
7756 | FS.streams[fd] = stream;
|
7757 | return stream;
|
7758 | },
|
7759 | close: function(stream) {
|
7760 | if (!stream.stream_ops) {
|
7761 | fs.closeSync(stream.nfd);
|
7762 | }
|
7763 | FS.closeStream(stream.fd);
|
7764 | },
|
7765 | llseek: function(stream, offset, whence) {
|
7766 | if (stream.stream_ops) {
|
7767 | return VFS.llseek(stream, offset, whence);
|
7768 | }
|
7769 | var position = offset;
|
7770 | if (whence === 1) {
|
7771 | position += stream.position;
|
7772 | } else if (whence === 2) {
|
7773 | position += fs.fstatSync(stream.nfd).size;
|
7774 | } else if (whence !== 0) {
|
7775 | throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
|
7776 | }
|
7777 | if (position < 0) {
|
7778 | throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
|
7779 | }
|
7780 | stream.position = position;
|
7781 | return position;
|
7782 | },
|
7783 | read: function(stream, buffer, offset, length, position) {
|
7784 | if (stream.stream_ops) {
|
7785 | return VFS.read(stream, buffer, offset, length, position);
|
7786 | }
|
7787 | var seeking = typeof position !== "undefined";
|
7788 | if (!seeking && stream.seekable) position = stream.position;
|
7789 | var bytesRead = fs.readSync(
|
7790 | stream.nfd,
|
7791 | NODEFS.bufferFrom(buffer.buffer),
|
7792 | offset,
|
7793 | length,
|
7794 | position
|
7795 | );
|
7796 | if (!seeking) stream.position += bytesRead;
|
7797 | return bytesRead;
|
7798 | },
|
7799 | write: function(stream, buffer, offset, length, position) {
|
7800 | if (stream.stream_ops) {
|
7801 | return VFS.write(stream, buffer, offset, length, position);
|
7802 | }
|
7803 | if (stream.flags & +"1024") {
|
7804 | FS.llseek(stream, 0, +"2");
|
7805 | }
|
7806 | var seeking = typeof position !== "undefined";
|
7807 | if (!seeking && stream.seekable) position = stream.position;
|
7808 | var bytesWritten = fs.writeSync(
|
7809 | stream.nfd,
|
7810 | NODEFS.bufferFrom(buffer.buffer),
|
7811 | offset,
|
7812 | length,
|
7813 | position
|
7814 | );
|
7815 | if (!seeking) stream.position += bytesWritten;
|
7816 | return bytesWritten;
|
7817 | },
|
7818 | allocate: function() {
|
7819 | throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP);
|
7820 | },
|
7821 | mmap: function() {
|
7822 | throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
|
7823 | },
|
7824 | msync: function() {
|
7825 | return 0;
|
7826 | },
|
7827 | munmap: function() {
|
7828 | return 0;
|
7829 | },
|
7830 | ioctl: function() {
|
7831 | throw new FS.ErrnoError(ERRNO_CODES.ENOTTY);
|
7832 | }
|
7833 | };
|
7834 | var FS = {
|
7835 | root: null,
|
7836 | mounts: [],
|
7837 | devices: {},
|
7838 | streams: [],
|
7839 | nextInode: 1,
|
7840 | nameTable: null,
|
7841 | currentPath: "/",
|
7842 | initialized: false,
|
7843 | ignorePermissions: true,
|
7844 | trackingDelegate: {},
|
7845 | tracking: { openFlags: { READ: 1, WRITE: 2 } },
|
7846 | ErrnoError: null,
|
7847 | genericErrors: {},
|
7848 | filesystems: null,
|
7849 | syncFSRequests: 0,
|
7850 | handleFSError: function(e) {
|
7851 | if (!(e instanceof FS.ErrnoError)) throw e + " : " + stackTrace();
|
7852 | return ___setErrNo(e.errno);
|
7853 | },
|
7854 | lookupPath: function(path, opts) {
|
7855 | path = PATH_FS.resolve(FS.cwd(), path);
|
7856 | opts = opts || {};
|
7857 | if (!path) return { path: "", node: null };
|
7858 | var defaults = { follow_mount: true, recurse_count: 0 };
|
7859 | for (var key in defaults) {
|
7860 | if (opts[key] === undefined) {
|
7861 | opts[key] = defaults[key];
|
7862 | }
|
7863 | }
|
7864 | if (opts.recurse_count > 8) {
|
7865 | throw new FS.ErrnoError(32);
|
7866 | }
|
7867 | var parts = PATH.normalizeArray(
|
7868 | path.split("/").filter(function(p) {
|
7869 | return !!p;
|
7870 | }),
|
7871 | false
|
7872 | );
|
7873 | var current = FS.root;
|
7874 | var current_path = "/";
|
7875 | for (var i = 0; i < parts.length; i++) {
|
7876 | var islast = i === parts.length - 1;
|
7877 | if (islast && opts.parent) {
|
7878 | break;
|
7879 | }
|
7880 | current = FS.lookupNode(current, parts[i]);
|
7881 | current_path = PATH.join2(current_path, parts[i]);
|
7882 | if (FS.isMountpoint(current)) {
|
7883 | if (!islast || (islast && opts.follow_mount)) {
|
7884 | current = current.mounted.root;
|
7885 | }
|
7886 | }
|
7887 | if (!islast || opts.follow) {
|
7888 | var count = 0;
|
7889 | while (FS.isLink(current.mode)) {
|
7890 | var link = FS.readlink(current_path);
|
7891 | current_path = PATH_FS.resolve(PATH.dirname(current_path), link);
|
7892 | var lookup = FS.lookupPath(current_path, {
|
7893 | recurse_count: opts.recurse_count
|
7894 | });
|
7895 | current = lookup.node;
|
7896 | if (count++ > 40) {
|
7897 | throw new FS.ErrnoError(32);
|
7898 | }
|
7899 | }
|
7900 | }
|
7901 | }
|
7902 | return { path: current_path, node: current };
|
7903 | },
|
7904 | getPath: function(node) {
|
7905 | var path;
|
7906 | while (true) {
|
7907 | if (FS.isRoot(node)) {
|
7908 | var mount = node.mount.mountpoint;
|
7909 | if (!path) return mount;
|
7910 | return mount[mount.length - 1] !== "/"
|
7911 | ? mount + "/" + path
|
7912 | : mount + path;
|
7913 | }
|
7914 | path = path ? node.name + "/" + path : node.name;
|
7915 | node = node.parent;
|
7916 | }
|
7917 | },
|
7918 | hashName: function(parentid, name) {
|
7919 | var hash = 0;
|
7920 | for (var i = 0; i < name.length; i++) {
|
7921 | hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0;
|
7922 | }
|
7923 | return ((parentid + hash) >>> 0) % FS.nameTable.length;
|
7924 | },
|
7925 | hashAddNode: function(node) {
|
7926 | var hash = FS.hashName(node.parent.id, node.name);
|
7927 | node.name_next = FS.nameTable[hash];
|
7928 | FS.nameTable[hash] = node;
|
7929 | },
|
7930 | hashRemoveNode: function(node) {
|
7931 | var hash = FS.hashName(node.parent.id, node.name);
|
7932 | if (FS.nameTable[hash] === node) {
|
7933 | FS.nameTable[hash] = node.name_next;
|
7934 | } else {
|
7935 | var current = FS.nameTable[hash];
|
7936 | while (current) {
|
7937 | if (current.name_next === node) {
|
7938 | current.name_next = node.name_next;
|
7939 | break;
|
7940 | }
|
7941 | current = current.name_next;
|
7942 | }
|
7943 | }
|
7944 | },
|
7945 | lookupNode: function(parent, name) {
|
7946 | var err = FS.mayLookup(parent);
|
7947 | if (err) {
|
7948 | throw new FS.ErrnoError(err, parent);
|
7949 | }
|
7950 | var hash = FS.hashName(parent.id, name);
|
7951 | for (var node = FS.nameTable[hash]; node; node = node.name_next) {
|
7952 | var nodeName = node.name;
|
7953 | if (node.parent.id === parent.id && nodeName === name) {
|
7954 | return node;
|
7955 | }
|
7956 | }
|
7957 | return FS.lookup(parent, name);
|
7958 | },
|
7959 | createNode: function(parent, name, mode, rdev) {
|
7960 | if (!FS.FSNode) {
|
7961 | FS.FSNode = function(parent, name, mode, rdev) {
|
7962 | if (!parent) {
|
7963 | parent = this;
|
7964 | }
|
7965 | this.parent = parent;
|
7966 | this.mount = parent.mount;
|
7967 | this.mounted = null;
|
7968 | this.id = FS.nextInode++;
|
7969 | this.name = name;
|
7970 | this.mode = mode;
|
7971 | this.node_ops = {};
|
7972 | this.stream_ops = {};
|
7973 | this.rdev = rdev;
|
7974 | };
|
7975 | FS.FSNode.prototype = {};
|
7976 | var readMode = 292 | 73;
|
7977 | var writeMode = 146;
|
7978 | Object.defineProperties(FS.FSNode.prototype, {
|
7979 | read: {
|
7980 | get: function() {
|
7981 | return (this.mode & readMode) === readMode;
|
7982 | },
|
7983 | set: function(val) {
|
7984 | val ? (this.mode |= readMode) : (this.mode &= ~readMode);
|
7985 | }
|
7986 | },
|
7987 | write: {
|
7988 | get: function() {
|
7989 | return (this.mode & writeMode) === writeMode;
|
7990 | },
|
7991 | set: function(val) {
|
7992 | val ? (this.mode |= writeMode) : (this.mode &= ~writeMode);
|
7993 | }
|
7994 | },
|
7995 | isFolder: {
|
7996 | get: function() {
|
7997 | return FS.isDir(this.mode);
|
7998 | }
|
7999 | },
|
8000 | isDevice: {
|
8001 | get: function() {
|
8002 | return FS.isChrdev(this.mode);
|
8003 | }
|
8004 | }
|
8005 | });
|
8006 | }
|
8007 | var node = new FS.FSNode(parent, name, mode, rdev);
|
8008 | FS.hashAddNode(node);
|
8009 | return node;
|
8010 | },
|
8011 | destroyNode: function(node) {
|
8012 | FS.hashRemoveNode(node);
|
8013 | },
|
8014 | isRoot: function(node) {
|
8015 | return node === node.parent;
|
8016 | },
|
8017 | isMountpoint: function(node) {
|
8018 | return !!node.mounted;
|
8019 | },
|
8020 | isFile: function(mode) {
|
8021 | return (mode & 61440) === 32768;
|
8022 | },
|
8023 | isDir: function(mode) {
|
8024 | return (mode & 61440) === 16384;
|
8025 | },
|
8026 | isLink: function(mode) {
|
8027 | return (mode & 61440) === 40960;
|
8028 | },
|
8029 | isChrdev: function(mode) {
|
8030 | return (mode & 61440) === 8192;
|
8031 | },
|
8032 | isBlkdev: function(mode) {
|
8033 | return (mode & 61440) === 24576;
|
8034 | },
|
8035 | isFIFO: function(mode) {
|
8036 | return (mode & 61440) === 4096;
|
8037 | },
|
8038 | isSocket: function(mode) {
|
8039 | return (mode & 49152) === 49152;
|
8040 | },
|
8041 | flagModes: {
|
8042 | r: 0,
|
8043 | rs: 1052672,
|
8044 | "r+": 2,
|
8045 | w: 577,
|
8046 | wx: 705,
|
8047 | xw: 705,
|
8048 | "w+": 578,
|
8049 | "wx+": 706,
|
8050 | "xw+": 706,
|
8051 | a: 1089,
|
8052 | ax: 1217,
|
8053 | xa: 1217,
|
8054 | "a+": 1090,
|
8055 | "ax+": 1218,
|
8056 | "xa+": 1218
|
8057 | },
|
8058 | modeStringToFlags: function(str) {
|
8059 | var flags = FS.flagModes[str];
|
8060 | if (typeof flags === "undefined") {
|
8061 | throw new Error("Unknown file open mode: " + str);
|
8062 | }
|
8063 | return flags;
|
8064 | },
|
8065 | flagsToPermissionString: function(flag) {
|
8066 | var perms = ["r", "w", "rw"][flag & 3];
|
8067 | if (flag & 512) {
|
8068 | perms += "w";
|
8069 | }
|
8070 | return perms;
|
8071 | },
|
8072 | nodePermissions: function(node, perms) {
|
8073 | if (FS.ignorePermissions) {
|
8074 | return 0;
|
8075 | }
|
8076 | if (perms.indexOf("r") !== -1 && !(node.mode & 292)) {
|
8077 | return 2;
|
8078 | } else if (perms.indexOf("w") !== -1 && !(node.mode & 146)) {
|
8079 | return 2;
|
8080 | } else if (perms.indexOf("x") !== -1 && !(node.mode & 73)) {
|
8081 | return 2;
|
8082 | }
|
8083 | return 0;
|
8084 | },
|
8085 | mayLookup: function(dir) {
|
8086 | var err = FS.nodePermissions(dir, "x");
|
8087 | if (err) return err;
|
8088 | if (!dir.node_ops.lookup) return 2;
|
8089 | return 0;
|
8090 | },
|
8091 | mayCreate: function(dir, name) {
|
8092 | try {
|
8093 | var node = FS.lookupNode(dir, name);
|
8094 | return 20;
|
8095 | } catch (e) {}
|
8096 | return FS.nodePermissions(dir, "wx");
|
8097 | },
|
8098 | mayDelete: function(dir, name, isdir) {
|
8099 | var node;
|
8100 | try {
|
8101 | node = FS.lookupNode(dir, name);
|
8102 | } catch (e) {
|
8103 | return e.errno;
|
8104 | }
|
8105 | var err = FS.nodePermissions(dir, "wx");
|
8106 | if (err) {
|
8107 | return err;
|
8108 | }
|
8109 | if (isdir) {
|
8110 | if (!FS.isDir(node.mode)) {
|
8111 | return 54;
|
8112 | }
|
8113 | if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) {
|
8114 | return 10;
|
8115 | }
|
8116 | } else {
|
8117 | if (FS.isDir(node.mode)) {
|
8118 | return 31;
|
8119 | }
|
8120 | }
|
8121 | return 0;
|
8122 | },
|
8123 | mayOpen: function(node, flags) {
|
8124 | if (!node) {
|
8125 | return 44;
|
8126 | }
|
8127 | if (FS.isLink(node.mode)) {
|
8128 | return 32;
|
8129 | } else if (FS.isDir(node.mode)) {
|
8130 | if (FS.flagsToPermissionString(flags) !== "r" || flags & 512) {
|
8131 | return 31;
|
8132 | }
|
8133 | }
|
8134 | return FS.nodePermissions(node, FS.flagsToPermissionString(flags));
|
8135 | },
|
8136 | MAX_OPEN_FDS: 4096,
|
8137 | nextfd: function(fd_start, fd_end) {
|
8138 | fd_start = fd_start || 0;
|
8139 | fd_end = fd_end || FS.MAX_OPEN_FDS;
|
8140 | for (var fd = fd_start; fd <= fd_end; fd++) {
|
8141 | if (!FS.streams[fd]) {
|
8142 | return fd;
|
8143 | }
|
8144 | }
|
8145 | throw new FS.ErrnoError(33);
|
8146 | },
|
8147 | getStream: function(fd) {
|
8148 | return FS.streams[fd];
|
8149 | },
|
8150 | createStream: function(stream, fd_start, fd_end) {
|
8151 | if (!FS.FSStream) {
|
8152 | FS.FSStream = function() {};
|
8153 | FS.FSStream.prototype = {};
|
8154 | Object.defineProperties(FS.FSStream.prototype, {
|
8155 | object: {
|
8156 | get: function() {
|
8157 | return this.node;
|
8158 | },
|
8159 | set: function(val) {
|
8160 | this.node = val;
|
8161 | }
|
8162 | },
|
8163 | isRead: {
|
8164 | get: function() {
|
8165 | return (this.flags & 2097155) !== 1;
|
8166 | }
|
8167 | },
|
8168 | isWrite: {
|
8169 | get: function() {
|
8170 | return (this.flags & 2097155) !== 0;
|
8171 | }
|
8172 | },
|
8173 | isAppend: {
|
8174 | get: function() {
|
8175 | return this.flags & 1024;
|
8176 | }
|
8177 | }
|
8178 | });
|
8179 | }
|
8180 | var newStream = new FS.FSStream();
|
8181 | for (var p in stream) {
|
8182 | newStream[p] = stream[p];
|
8183 | }
|
8184 | stream = newStream;
|
8185 | var fd = FS.nextfd(fd_start, fd_end);
|
8186 | stream.fd = fd;
|
8187 | FS.streams[fd] = stream;
|
8188 | return stream;
|
8189 | },
|
8190 | closeStream: function(fd) {
|
8191 | FS.streams[fd] = null;
|
8192 | },
|
8193 | chrdev_stream_ops: {
|
8194 | open: function(stream) {
|
8195 | var device = FS.getDevice(stream.node.rdev);
|
8196 | stream.stream_ops = device.stream_ops;
|
8197 | if (stream.stream_ops.open) {
|
8198 | stream.stream_ops.open(stream);
|
8199 | }
|
8200 | },
|
8201 | llseek: function() {
|
8202 | throw new FS.ErrnoError(70);
|
8203 | }
|
8204 | },
|
8205 | major: function(dev) {
|
8206 | return dev >> 8;
|
8207 | },
|
8208 | minor: function(dev) {
|
8209 | return dev & 255;
|
8210 | },
|
8211 | makedev: function(ma, mi) {
|
8212 | return (ma << 8) | mi;
|
8213 | },
|
8214 | registerDevice: function(dev, ops) {
|
8215 | FS.devices[dev] = { stream_ops: ops };
|
8216 | },
|
8217 | getDevice: function(dev) {
|
8218 | return FS.devices[dev];
|
8219 | },
|
8220 | getMounts: function(mount) {
|
8221 | var mounts = [];
|
8222 | var check = [mount];
|
8223 | while (check.length) {
|
8224 | var m = check.pop();
|
8225 | mounts.push(m);
|
8226 | check.push.apply(check, m.mounts);
|
8227 | }
|
8228 | return mounts;
|
8229 | },
|
8230 | syncfs: function(populate, callback) {
|
8231 | if (typeof populate === "function") {
|
8232 | callback = populate;
|
8233 | populate = false;
|
8234 | }
|
8235 | FS.syncFSRequests++;
|
8236 | if (FS.syncFSRequests > 1) {
|
8237 | console.log(
|
8238 | "warning: " +
|
8239 | FS.syncFSRequests +
|
8240 | " FS.syncfs operations in flight at once, probably just doing extra work"
|
8241 | );
|
8242 | }
|
8243 | var mounts = FS.getMounts(FS.root.mount);
|
8244 | var completed = 0;
|
8245 | function doCallback(err) {
|
8246 | FS.syncFSRequests--;
|
8247 | return callback(err);
|
8248 | }
|
8249 | function done(err) {
|
8250 | if (err) {
|
8251 | if (!done.errored) {
|
8252 | done.errored = true;
|
8253 | return doCallback(err);
|
8254 | }
|
8255 | return;
|
8256 | }
|
8257 | if (++completed >= mounts.length) {
|
8258 | doCallback(null);
|
8259 | }
|
8260 | }
|
8261 | mounts.forEach(function(mount) {
|
8262 | if (!mount.type.syncfs) {
|
8263 | return done(null);
|
8264 | }
|
8265 | mount.type.syncfs(mount, populate, done);
|
8266 | });
|
8267 | },
|
8268 | mount: function(type, opts, mountpoint) {
|
8269 | var root = mountpoint === "/";
|
8270 | var pseudo = !mountpoint;
|
8271 | var node;
|
8272 | if (root && FS.root) {
|
8273 | throw new FS.ErrnoError(10);
|
8274 | } else if (!root && !pseudo) {
|
8275 | var lookup = FS.lookupPath(mountpoint, { follow_mount: false });
|
8276 | mountpoint = lookup.path;
|
8277 | node = lookup.node;
|
8278 | if (FS.isMountpoint(node)) {
|
8279 | throw new FS.ErrnoError(10);
|
8280 | }
|
8281 | if (!FS.isDir(node.mode)) {
|
8282 | throw new FS.ErrnoError(54);
|
8283 | }
|
8284 | }
|
8285 | var mount = { type: type, opts: opts, mountpoint: mountpoint, mounts: [] };
|
8286 | var mountRoot = type.mount(mount);
|
8287 | mountRoot.mount = mount;
|
8288 | mount.root = mountRoot;
|
8289 | if (root) {
|
8290 | FS.root = mountRoot;
|
8291 | } else if (node) {
|
8292 | node.mounted = mount;
|
8293 | if (node.mount) {
|
8294 | node.mount.mounts.push(mount);
|
8295 | }
|
8296 | }
|
8297 | return mountRoot;
|
8298 | },
|
8299 | unmount: function(mountpoint) {
|
8300 | var lookup = FS.lookupPath(mountpoint, { follow_mount: false });
|
8301 | if (!FS.isMountpoint(lookup.node)) {
|
8302 | throw new FS.ErrnoError(28);
|
8303 | }
|
8304 | var node = lookup.node;
|
8305 | var mount = node.mounted;
|
8306 | var mounts = FS.getMounts(mount);
|
8307 | Object.keys(FS.nameTable).forEach(function(hash) {
|
8308 | var current = FS.nameTable[hash];
|
8309 | while (current) {
|
8310 | var next = current.name_next;
|
8311 | if (mounts.indexOf(current.mount) !== -1) {
|
8312 | FS.destroyNode(current);
|
8313 | }
|
8314 | current = next;
|
8315 | }
|
8316 | });
|
8317 | node.mounted = null;
|
8318 | var idx = node.mount.mounts.indexOf(mount);
|
8319 | node.mount.mounts.splice(idx, 1);
|
8320 | },
|
8321 | lookup: function(parent, name) {
|
8322 | return parent.node_ops.lookup(parent, name);
|
8323 | },
|
8324 | mknod: function(path, mode, dev) {
|
8325 | var lookup = FS.lookupPath(path, { parent: true });
|
8326 | var parent = lookup.node;
|
8327 | var name = PATH.basename(path);
|
8328 | if (!name || name === "." || name === "..") {
|
8329 | throw new FS.ErrnoError(28);
|
8330 | }
|
8331 | var err = FS.mayCreate(parent, name);
|
8332 | if (err) {
|
8333 | throw new FS.ErrnoError(err);
|
8334 | }
|
8335 | if (!parent.node_ops.mknod) {
|
8336 | throw new FS.ErrnoError(63);
|
8337 | }
|
8338 | return parent.node_ops.mknod(parent, name, mode, dev);
|
8339 | },
|
8340 | create: function(path, mode) {
|
8341 | mode = mode !== undefined ? mode : 438;
|
8342 | mode &= 4095;
|
8343 | mode |= 32768;
|
8344 | return FS.mknod(path, mode, 0);
|
8345 | },
|
8346 | mkdir: function(path, mode) {
|
8347 | mode = mode !== undefined ? mode : 511;
|
8348 | mode &= 511 | 512;
|
8349 | mode |= 16384;
|
8350 | return FS.mknod(path, mode, 0);
|
8351 | },
|
8352 | mkdirTree: function(path, mode) {
|
8353 | var dirs = path.split("/");
|
8354 | var d = "";
|
8355 | for (var i = 0; i < dirs.length; ++i) {
|
8356 | if (!dirs[i]) continue;
|
8357 | d += "/" + dirs[i];
|
8358 | try {
|
8359 | FS.mkdir(d, mode);
|
8360 | } catch (e) {
|
8361 | if (e.errno != 20) throw e;
|
8362 | }
|
8363 | }
|
8364 | },
|
8365 | mkdev: function(path, mode, dev) {
|
8366 | if (typeof dev === "undefined") {
|
8367 | dev = mode;
|
8368 | mode = 438;
|
8369 | }
|
8370 | mode |= 8192;
|
8371 | return FS.mknod(path, mode, dev);
|
8372 | },
|
8373 | symlink: function(oldpath, newpath) {
|
8374 | if (!PATH_FS.resolve(oldpath)) {
|
8375 | throw new FS.ErrnoError(44);
|
8376 | }
|
8377 | var lookup = FS.lookupPath(newpath, { parent: true });
|
8378 | var parent = lookup.node;
|
8379 | if (!parent) {
|
8380 | throw new FS.ErrnoError(44);
|
8381 | }
|
8382 | var newname = PATH.basename(newpath);
|
8383 | var err = FS.mayCreate(parent, newname);
|
8384 | if (err) {
|
8385 | throw new FS.ErrnoError(err);
|
8386 | }
|
8387 | if (!parent.node_ops.symlink) {
|
8388 | throw new FS.ErrnoError(63);
|
8389 | }
|
8390 | return parent.node_ops.symlink(parent, newname, oldpath);
|
8391 | },
|
8392 | rename: function(old_path, new_path) {
|
8393 | var old_dirname = PATH.dirname(old_path);
|
8394 | var new_dirname = PATH.dirname(new_path);
|
8395 | var old_name = PATH.basename(old_path);
|
8396 | var new_name = PATH.basename(new_path);
|
8397 | var lookup, old_dir, new_dir;
|
8398 | try {
|
8399 | lookup = FS.lookupPath(old_path, { parent: true });
|
8400 | old_dir = lookup.node;
|
8401 | lookup = FS.lookupPath(new_path, { parent: true });
|
8402 | new_dir = lookup.node;
|
8403 | } catch (e) {
|
8404 | throw new FS.ErrnoError(10);
|
8405 | }
|
8406 | if (!old_dir || !new_dir) throw new FS.ErrnoError(44);
|
8407 | if (old_dir.mount !== new_dir.mount) {
|
8408 | throw new FS.ErrnoError(75);
|
8409 | }
|
8410 | var old_node = FS.lookupNode(old_dir, old_name);
|
8411 | var relative = PATH_FS.relative(old_path, new_dirname);
|
8412 | if (relative.charAt(0) !== ".") {
|
8413 | throw new FS.ErrnoError(28);
|
8414 | }
|
8415 | relative = PATH_FS.relative(new_path, old_dirname);
|
8416 | if (relative.charAt(0) !== ".") {
|
8417 | throw new FS.ErrnoError(55);
|
8418 | }
|
8419 | var new_node;
|
8420 | try {
|
8421 | new_node = FS.lookupNode(new_dir, new_name);
|
8422 | } catch (e) {}
|
8423 | if (old_node === new_node) {
|
8424 | return;
|
8425 | }
|
8426 | var isdir = FS.isDir(old_node.mode);
|
8427 | var err = FS.mayDelete(old_dir, old_name, isdir);
|
8428 | if (err) {
|
8429 | throw new FS.ErrnoError(err);
|
8430 | }
|
8431 | err = new_node
|
8432 | ? FS.mayDelete(new_dir, new_name, isdir)
|
8433 | : FS.mayCreate(new_dir, new_name);
|
8434 | if (err) {
|
8435 | throw new FS.ErrnoError(err);
|
8436 | }
|
8437 | if (!old_dir.node_ops.rename) {
|
8438 | throw new FS.ErrnoError(63);
|
8439 | }
|
8440 | if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) {
|
8441 | throw new FS.ErrnoError(10);
|
8442 | }
|
8443 | if (new_dir !== old_dir) {
|
8444 | err = FS.nodePermissions(old_dir, "w");
|
8445 | if (err) {
|
8446 | throw new FS.ErrnoError(err);
|
8447 | }
|
8448 | }
|
8449 | try {
|
8450 | if (FS.trackingDelegate["willMovePath"]) {
|
8451 | FS.trackingDelegate["willMovePath"](old_path, new_path);
|
8452 | }
|
8453 | } catch (e) {
|
8454 | console.log(
|
8455 | "FS.trackingDelegate['willMovePath']('" +
|
8456 | old_path +
|
8457 | "', '" +
|
8458 | new_path +
|
8459 | "') threw an exception: " +
|
8460 | e.message
|
8461 | );
|
8462 | }
|
8463 | FS.hashRemoveNode(old_node);
|
8464 | try {
|
8465 | old_dir.node_ops.rename(old_node, new_dir, new_name);
|
8466 | } catch (e) {
|
8467 | throw e;
|
8468 | } finally {
|
8469 | FS.hashAddNode(old_node);
|
8470 | }
|
8471 | try {
|
8472 | if (FS.trackingDelegate["onMovePath"])
|
8473 | FS.trackingDelegate["onMovePath"](old_path, new_path);
|
8474 | } catch (e) {
|
8475 | console.log(
|
8476 | "FS.trackingDelegate['onMovePath']('" +
|
8477 | old_path +
|
8478 | "', '" +
|
8479 | new_path +
|
8480 | "') threw an exception: " +
|
8481 | e.message
|
8482 | );
|
8483 | }
|
8484 | },
|
8485 | rmdir: function(path) {
|
8486 | var lookup = FS.lookupPath(path, { parent: true });
|
8487 | var parent = lookup.node;
|
8488 | var name = PATH.basename(path);
|
8489 | var node = FS.lookupNode(parent, name);
|
8490 | var err = FS.mayDelete(parent, name, true);
|
8491 | if (err) {
|
8492 | throw new FS.ErrnoError(err);
|
8493 | }
|
8494 | if (!parent.node_ops.rmdir) {
|
8495 | throw new FS.ErrnoError(63);
|
8496 | }
|
8497 | if (FS.isMountpoint(node)) {
|
8498 | throw new FS.ErrnoError(10);
|
8499 | }
|
8500 | try {
|
8501 | if (FS.trackingDelegate["willDeletePath"]) {
|
8502 | FS.trackingDelegate["willDeletePath"](path);
|
8503 | }
|
8504 | } catch (e) {
|
8505 | console.log(
|
8506 | "FS.trackingDelegate['willDeletePath']('" +
|
8507 | path +
|
8508 | "') threw an exception: " +
|
8509 | e.message
|
8510 | );
|
8511 | }
|
8512 | parent.node_ops.rmdir(parent, name);
|
8513 | FS.destroyNode(node);
|
8514 | try {
|
8515 | if (FS.trackingDelegate["onDeletePath"])
|
8516 | FS.trackingDelegate["onDeletePath"](path);
|
8517 | } catch (e) {
|
8518 | console.log(
|
8519 | "FS.trackingDelegate['onDeletePath']('" +
|
8520 | path +
|
8521 | "') threw an exception: " +
|
8522 | e.message
|
8523 | );
|
8524 | }
|
8525 | },
|
8526 | readdir: function(path) {
|
8527 | var lookup = FS.lookupPath(path, { follow: true });
|
8528 | var node = lookup.node;
|
8529 | if (!node.node_ops.readdir) {
|
8530 | throw new FS.ErrnoError(54);
|
8531 | }
|
8532 | return node.node_ops.readdir(node);
|
8533 | },
|
8534 | unlink: function(path) {
|
8535 | var lookup = FS.lookupPath(path, { parent: true });
|
8536 | var parent = lookup.node;
|
8537 | var name = PATH.basename(path);
|
8538 | var node = FS.lookupNode(parent, name);
|
8539 | var err = FS.mayDelete(parent, name, false);
|
8540 | if (err) {
|
8541 | throw new FS.ErrnoError(err);
|
8542 | }
|
8543 | if (!parent.node_ops.unlink) {
|
8544 | throw new FS.ErrnoError(63);
|
8545 | }
|
8546 | if (FS.isMountpoint(node)) {
|
8547 | throw new FS.ErrnoError(10);
|
8548 | }
|
8549 | try {
|
8550 | if (FS.trackingDelegate["willDeletePath"]) {
|
8551 | FS.trackingDelegate["willDeletePath"](path);
|
8552 | }
|
8553 | } catch (e) {
|
8554 | console.log(
|
8555 | "FS.trackingDelegate['willDeletePath']('" +
|
8556 | path +
|
8557 | "') threw an exception: " +
|
8558 | e.message
|
8559 | );
|
8560 | }
|
8561 | parent.node_ops.unlink(parent, name);
|
8562 | FS.destroyNode(node);
|
8563 | try {
|
8564 | if (FS.trackingDelegate["onDeletePath"])
|
8565 | FS.trackingDelegate["onDeletePath"](path);
|
8566 | } catch (e) {
|
8567 | console.log(
|
8568 | "FS.trackingDelegate['onDeletePath']('" +
|
8569 | path +
|
8570 | "') threw an exception: " +
|
8571 | e.message
|
8572 | );
|
8573 | }
|
8574 | },
|
8575 | readlink: function(path) {
|
8576 | var lookup = FS.lookupPath(path);
|
8577 | var link = lookup.node;
|
8578 | if (!link) {
|
8579 | throw new FS.ErrnoError(44);
|
8580 | }
|
8581 | if (!link.node_ops.readlink) {
|
8582 | throw new FS.ErrnoError(28);
|
8583 | }
|
8584 | return PATH_FS.resolve(
|
8585 | FS.getPath(link.parent),
|
8586 | link.node_ops.readlink(link)
|
8587 | );
|
8588 | },
|
8589 | stat: function(path, dontFollow) {
|
8590 | var lookup = FS.lookupPath(path, { follow: !dontFollow });
|
8591 | var node = lookup.node;
|
8592 | if (!node) {
|
8593 | throw new FS.ErrnoError(44);
|
8594 | }
|
8595 | if (!node.node_ops.getattr) {
|
8596 | throw new FS.ErrnoError(63);
|
8597 | }
|
8598 | return node.node_ops.getattr(node);
|
8599 | },
|
8600 | lstat: function(path) {
|
8601 | return FS.stat(path, true);
|
8602 | },
|
8603 | chmod: function(path, mode, dontFollow) {
|
8604 | var node;
|
8605 | if (typeof path === "string") {
|
8606 | var lookup = FS.lookupPath(path, { follow: !dontFollow });
|
8607 | node = lookup.node;
|
8608 | } else {
|
8609 | node = path;
|
8610 | }
|
8611 | if (!node.node_ops.setattr) {
|
8612 | throw new FS.ErrnoError(63);
|
8613 | }
|
8614 | node.node_ops.setattr(node, {
|
8615 | mode: (mode & 4095) | (node.mode & ~4095),
|
8616 | timestamp: Date.now()
|
8617 | });
|
8618 | },
|
8619 | lchmod: function(path, mode) {
|
8620 | FS.chmod(path, mode, true);
|
8621 | },
|
8622 | fchmod: function(fd, mode) {
|
8623 | var stream = FS.getStream(fd);
|
8624 | if (!stream) {
|
8625 | throw new FS.ErrnoError(8);
|
8626 | }
|
8627 | FS.chmod(stream.node, mode);
|
8628 | },
|
8629 | chown: function(path, uid, gid, dontFollow) {
|
8630 | var node;
|
8631 | if (typeof path === "string") {
|
8632 | var lookup = FS.lookupPath(path, { follow: !dontFollow });
|
8633 | node = lookup.node;
|
8634 | } else {
|
8635 | node = path;
|
8636 | }
|
8637 | if (!node.node_ops.setattr) {
|
8638 | throw new FS.ErrnoError(63);
|
8639 | }
|
8640 | node.node_ops.setattr(node, { timestamp: Date.now() });
|
8641 | },
|
8642 | lchown: function(path, uid, gid) {
|
8643 | FS.chown(path, uid, gid, true);
|
8644 | },
|
8645 | fchown: function(fd, uid, gid) {
|
8646 | var stream = FS.getStream(fd);
|
8647 | if (!stream) {
|
8648 | throw new FS.ErrnoError(8);
|
8649 | }
|
8650 | FS.chown(stream.node, uid, gid);
|
8651 | },
|
8652 | truncate: function(path, len) {
|
8653 | if (len < 0) {
|
8654 | throw new FS.ErrnoError(28);
|
8655 | }
|
8656 | var node;
|
8657 | if (typeof path === "string") {
|
8658 | var lookup = FS.lookupPath(path, { follow: true });
|
8659 | node = lookup.node;
|
8660 | } else {
|
8661 | node = path;
|
8662 | }
|
8663 | if (!node.node_ops.setattr) {
|
8664 | throw new FS.ErrnoError(63);
|
8665 | }
|
8666 | if (FS.isDir(node.mode)) {
|
8667 | throw new FS.ErrnoError(31);
|
8668 | }
|
8669 | if (!FS.isFile(node.mode)) {
|
8670 | throw new FS.ErrnoError(28);
|
8671 | }
|
8672 | var err = FS.nodePermissions(node, "w");
|
8673 | if (err) {
|
8674 | throw new FS.ErrnoError(err);
|
8675 | }
|
8676 | node.node_ops.setattr(node, { size: len, timestamp: Date.now() });
|
8677 | },
|
8678 | ftruncate: function(fd, len) {
|
8679 | var stream = FS.getStream(fd);
|
8680 | if (!stream) {
|
8681 | throw new FS.ErrnoError(8);
|
8682 | }
|
8683 | if ((stream.flags & 2097155) === 0) {
|
8684 | throw new FS.ErrnoError(28);
|
8685 | }
|
8686 | FS.truncate(stream.node, len);
|
8687 | },
|
8688 | utime: function(path, atime, mtime) {
|
8689 | var lookup = FS.lookupPath(path, { follow: true });
|
8690 | var node = lookup.node;
|
8691 | node.node_ops.setattr(node, { timestamp: Math.max(atime, mtime) });
|
8692 | },
|
8693 | open: function(path, flags, mode, fd_start, fd_end) {
|
8694 | if (path === "") {
|
8695 | throw new FS.ErrnoError(44);
|
8696 | }
|
8697 | flags = typeof flags === "string" ? FS.modeStringToFlags(flags) : flags;
|
8698 | mode = typeof mode === "undefined" ? 438 : mode;
|
8699 | if (flags & 64) {
|
8700 | mode = (mode & 4095) | 32768;
|
8701 | } else {
|
8702 | mode = 0;
|
8703 | }
|
8704 | var node;
|
8705 | if (typeof path === "object") {
|
8706 | node = path;
|
8707 | } else {
|
8708 | path = PATH.normalize(path);
|
8709 | try {
|
8710 | var lookup = FS.lookupPath(path, { follow: !(flags & 131072) });
|
8711 | node = lookup.node;
|
8712 | } catch (e) {}
|
8713 | }
|
8714 | var created = false;
|
8715 | if (flags & 64) {
|
8716 | if (node) {
|
8717 | if (flags & 128) {
|
8718 | throw new FS.ErrnoError(20);
|
8719 | }
|
8720 | } else {
|
8721 | node = FS.mknod(path, mode, 0);
|
8722 | created = true;
|
8723 | }
|
8724 | }
|
8725 | if (!node) {
|
8726 | throw new FS.ErrnoError(44);
|
8727 | }
|
8728 | if (FS.isChrdev(node.mode)) {
|
8729 | flags &= ~512;
|
8730 | }
|
8731 | if (flags & 65536 && !FS.isDir(node.mode)) {
|
8732 | throw new FS.ErrnoError(54);
|
8733 | }
|
8734 | if (!created) {
|
8735 | var err = FS.mayOpen(node, flags);
|
8736 | if (err) {
|
8737 | throw new FS.ErrnoError(err);
|
8738 | }
|
8739 | }
|
8740 | if (flags & 512) {
|
8741 | FS.truncate(node, 0);
|
8742 | }
|
8743 | flags &= ~(128 | 512);
|
8744 | var stream = FS.createStream(
|
8745 | {
|
8746 | node: node,
|
8747 | path: FS.getPath(node),
|
8748 | flags: flags,
|
8749 | seekable: true,
|
8750 | position: 0,
|
8751 | stream_ops: node.stream_ops,
|
8752 | ungotten: [],
|
8753 | error: false
|
8754 | },
|
8755 | fd_start,
|
8756 | fd_end
|
8757 | );
|
8758 | if (stream.stream_ops.open) {
|
8759 | stream.stream_ops.open(stream);
|
8760 | }
|
8761 | if (Module["logReadFiles"] && !(flags & 1)) {
|
8762 | if (!FS.readFiles) FS.readFiles = {};
|
8763 | if (!(path in FS.readFiles)) {
|
8764 | FS.readFiles[path] = 1;
|
8765 | console.log("FS.trackingDelegate error on read file: " + path);
|
8766 | }
|
8767 | }
|
8768 | try {
|
8769 | if (FS.trackingDelegate["onOpenFile"]) {
|
8770 | var trackingFlags = 0;
|
8771 | if ((flags & 2097155) !== 1) {
|
8772 | trackingFlags |= FS.tracking.openFlags.READ;
|
8773 | }
|
8774 | if ((flags & 2097155) !== 0) {
|
8775 | trackingFlags |= FS.tracking.openFlags.WRITE;
|
8776 | }
|
8777 | FS.trackingDelegate["onOpenFile"](path, trackingFlags);
|
8778 | }
|
8779 | } catch (e) {
|
8780 | console.log(
|
8781 | "FS.trackingDelegate['onOpenFile']('" +
|
8782 | path +
|
8783 | "', flags) threw an exception: " +
|
8784 | e.message
|
8785 | );
|
8786 | }
|
8787 | return stream;
|
8788 | },
|
8789 | close: function(stream) {
|
8790 | if (FS.isClosed(stream)) {
|
8791 | throw new FS.ErrnoError(8);
|
8792 | }
|
8793 | if (stream.getdents) stream.getdents = null;
|
8794 | try {
|
8795 | if (stream.stream_ops.close) {
|
8796 | stream.stream_ops.close(stream);
|
8797 | }
|
8798 | } catch (e) {
|
8799 | throw e;
|
8800 | } finally {
|
8801 | FS.closeStream(stream.fd);
|
8802 | }
|
8803 | stream.fd = null;
|
8804 | },
|
8805 | isClosed: function(stream) {
|
8806 | return stream.fd === null;
|
8807 | },
|
8808 | llseek: function(stream, offset, whence) {
|
8809 | if (FS.isClosed(stream)) {
|
8810 | throw new FS.ErrnoError(8);
|
8811 | }
|
8812 | if (!stream.seekable || !stream.stream_ops.llseek) {
|
8813 | throw new FS.ErrnoError(70);
|
8814 | }
|
8815 | if (whence != 0 && whence != 1 && whence != 2) {
|
8816 | throw new FS.ErrnoError(28);
|
8817 | }
|
8818 | stream.position = stream.stream_ops.llseek(stream, offset, whence);
|
8819 | stream.ungotten = [];
|
8820 | return stream.position;
|
8821 | },
|
8822 | read: function(stream, buffer, offset, length, position) {
|
8823 | if (length < 0 || position < 0) {
|
8824 | throw new FS.ErrnoError(28);
|
8825 | }
|
8826 | if (FS.isClosed(stream)) {
|
8827 | throw new FS.ErrnoError(8);
|
8828 | }
|
8829 | if ((stream.flags & 2097155) === 1) {
|
8830 | throw new FS.ErrnoError(8);
|
8831 | }
|
8832 | if (FS.isDir(stream.node.mode)) {
|
8833 | throw new FS.ErrnoError(31);
|
8834 | }
|
8835 | if (!stream.stream_ops.read) {
|
8836 | throw new FS.ErrnoError(28);
|
8837 | }
|
8838 | var seeking = typeof position !== "undefined";
|
8839 | if (!seeking) {
|
8840 | position = stream.position;
|
8841 | } else if (!stream.seekable) {
|
8842 | throw new FS.ErrnoError(70);
|
8843 | }
|
8844 | var bytesRead = stream.stream_ops.read(
|
8845 | stream,
|
8846 | buffer,
|
8847 | offset,
|
8848 | length,
|
8849 | position
|
8850 | );
|
8851 | if (!seeking) stream.position += bytesRead;
|
8852 | return bytesRead;
|
8853 | },
|
8854 | write: function(stream, buffer, offset, length, position, canOwn) {
|
8855 | if (length < 0 || position < 0) {
|
8856 | throw new FS.ErrnoError(28);
|
8857 | }
|
8858 | if (FS.isClosed(stream)) {
|
8859 | throw new FS.ErrnoError(8);
|
8860 | }
|
8861 | if ((stream.flags & 2097155) === 0) {
|
8862 | throw new FS.ErrnoError(8);
|
8863 | }
|
8864 | if (FS.isDir(stream.node.mode)) {
|
8865 | throw new FS.ErrnoError(31);
|
8866 | }
|
8867 | if (!stream.stream_ops.write) {
|
8868 | throw new FS.ErrnoError(28);
|
8869 | }
|
8870 | if (stream.flags & 1024) {
|
8871 | FS.llseek(stream, 0, 2);
|
8872 | }
|
8873 | var seeking = typeof position !== "undefined";
|
8874 | if (!seeking) {
|
8875 | position = stream.position;
|
8876 | } else if (!stream.seekable) {
|
8877 | throw new FS.ErrnoError(70);
|
8878 | }
|
8879 | var bytesWritten = stream.stream_ops.write(
|
8880 | stream,
|
8881 | buffer,
|
8882 | offset,
|
8883 | length,
|
8884 | position,
|
8885 | canOwn
|
8886 | );
|
8887 | if (!seeking) stream.position += bytesWritten;
|
8888 | try {
|
8889 | if (stream.path && FS.trackingDelegate["onWriteToFile"])
|
8890 | FS.trackingDelegate["onWriteToFile"](stream.path);
|
8891 | } catch (e) {
|
8892 | console.log(
|
8893 | "FS.trackingDelegate['onWriteToFile']('" +
|
8894 | stream.path +
|
8895 | "') threw an exception: " +
|
8896 | e.message
|
8897 | );
|
8898 | }
|
8899 | return bytesWritten;
|
8900 | },
|
8901 | allocate: function(stream, offset, length) {
|
8902 | if (FS.isClosed(stream)) {
|
8903 | throw new FS.ErrnoError(8);
|
8904 | }
|
8905 | if (offset < 0 || length <= 0) {
|
8906 | throw new FS.ErrnoError(28);
|
8907 | }
|
8908 | if ((stream.flags & 2097155) === 0) {
|
8909 | throw new FS.ErrnoError(8);
|
8910 | }
|
8911 | if (!FS.isFile(stream.node.mode) && !FS.isDir(stream.node.mode)) {
|
8912 | throw new FS.ErrnoError(43);
|
8913 | }
|
8914 | if (!stream.stream_ops.allocate) {
|
8915 | throw new FS.ErrnoError(138);
|
8916 | }
|
8917 | stream.stream_ops.allocate(stream, offset, length);
|
8918 | },
|
8919 | mmap: function(stream, buffer, offset, length, position, prot, flags) {
|
8920 | if (
|
8921 | (prot & 2) !== 0 &&
|
8922 | (flags & 2) === 0 &&
|
8923 | (stream.flags & 2097155) !== 2
|
8924 | ) {
|
8925 | throw new FS.ErrnoError(2);
|
8926 | }
|
8927 | if ((stream.flags & 2097155) === 1) {
|
8928 | throw new FS.ErrnoError(2);
|
8929 | }
|
8930 | if (!stream.stream_ops.mmap) {
|
8931 | throw new FS.ErrnoError(43);
|
8932 | }
|
8933 | return stream.stream_ops.mmap(
|
8934 | stream,
|
8935 | buffer,
|
8936 | offset,
|
8937 | length,
|
8938 | position,
|
8939 | prot,
|
8940 | flags
|
8941 | );
|
8942 | },
|
8943 | msync: function(stream, buffer, offset, length, mmapFlags) {
|
8944 | if (!stream || !stream.stream_ops.msync) {
|
8945 | return 0;
|
8946 | }
|
8947 | return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags);
|
8948 | },
|
8949 | munmap: function(stream) {
|
8950 | return 0;
|
8951 | },
|
8952 | ioctl: function(stream, cmd, arg) {
|
8953 | if (!stream.stream_ops.ioctl) {
|
8954 | throw new FS.ErrnoError(59);
|
8955 | }
|
8956 | return stream.stream_ops.ioctl(stream, cmd, arg);
|
8957 | },
|
8958 | readFile: function(path, opts) {
|
8959 | opts = opts || {};
|
8960 | opts.flags = opts.flags || "r";
|
8961 | opts.encoding = opts.encoding || "binary";
|
8962 | if (opts.encoding !== "utf8" && opts.encoding !== "binary") {
|
8963 | throw new Error('Invalid encoding type "' + opts.encoding + '"');
|
8964 | }
|
8965 | var ret;
|
8966 | var stream = FS.open(path, opts.flags);
|
8967 | var stat = FS.stat(path);
|
8968 | var length = stat.size;
|
8969 | var buf = new Uint8Array(length);
|
8970 | FS.read(stream, buf, 0, length, 0);
|
8971 | if (opts.encoding === "utf8") {
|
8972 | ret = UTF8ArrayToString(buf, 0);
|
8973 | } else if (opts.encoding === "binary") {
|
8974 | ret = buf;
|
8975 | }
|
8976 | FS.close(stream);
|
8977 | return ret;
|
8978 | },
|
8979 | writeFile: function(path, data, opts) {
|
8980 | opts = opts || {};
|
8981 | opts.flags = opts.flags || "w";
|
8982 | var stream = FS.open(path, opts.flags, opts.mode);
|
8983 | if (typeof data === "string") {
|
8984 | var buf = new Uint8Array(lengthBytesUTF8(data) + 1);
|
8985 | var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length);
|
8986 | FS.write(stream, buf, 0, actualNumBytes, undefined, opts.canOwn);
|
8987 | } else if (ArrayBuffer.isView(data)) {
|
8988 | FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn);
|
8989 | } else {
|
8990 | throw new Error("Unsupported data type");
|
8991 | }
|
8992 | FS.close(stream);
|
8993 | },
|
8994 | cwd: function() {
|
8995 | return FS.currentPath;
|
8996 | },
|
8997 | chdir: function(path) {
|
8998 | var lookup = FS.lookupPath(path, { follow: true });
|
8999 | if (lookup.node === null) {
|
9000 | throw new FS.ErrnoError(44);
|
9001 | }
|
9002 | if (!FS.isDir(lookup.node.mode)) {
|
9003 | throw new FS.ErrnoError(54);
|
9004 | }
|
9005 | var err = FS.nodePermissions(lookup.node, "x");
|
9006 | if (err) {
|
9007 | throw new FS.ErrnoError(err);
|
9008 | }
|
9009 | FS.currentPath = lookup.path;
|
9010 | },
|
9011 | createDefaultDirectories: function() {
|
9012 | FS.mkdir("/tmp");
|
9013 | FS.mkdir("/home");
|
9014 | FS.mkdir("/home/web_user");
|
9015 | },
|
9016 | createDefaultDevices: function() {
|
9017 | FS.mkdir("/dev");
|
9018 | FS.registerDevice(FS.makedev(1, 3), {
|
9019 | read: function() {
|
9020 | return 0;
|
9021 | },
|
9022 | write: function(stream, buffer, offset, length, pos) {
|
9023 | return length;
|
9024 | }
|
9025 | });
|
9026 | FS.mkdev("/dev/null", FS.makedev(1, 3));
|
9027 | TTY.register(FS.makedev(5, 0), TTY.default_tty_ops);
|
9028 | TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops);
|
9029 | FS.mkdev("/dev/tty", FS.makedev(5, 0));
|
9030 | FS.mkdev("/dev/tty1", FS.makedev(6, 0));
|
9031 | var random_device;
|
9032 | if (
|
9033 | typeof crypto === "object" &&
|
9034 | typeof crypto["getRandomValues"] === "function"
|
9035 | ) {
|
9036 | var randomBuffer = new Uint8Array(1);
|
9037 | random_device = function() {
|
9038 | crypto.getRandomValues(randomBuffer);
|
9039 | return randomBuffer[0];
|
9040 | };
|
9041 | } else if (ENVIRONMENT_IS_NODE) {
|
9042 | try {
|
9043 | var crypto_module = __webpack_require__(27);
|
9044 | random_device = function() {
|
9045 | return crypto_module["randomBytes"](1)[0];
|
9046 | };
|
9047 | } catch (e) {}
|
9048 | } else {
|
9049 | }
|
9050 | if (!random_device) {
|
9051 | random_device = function() {
|
9052 | abort("random_device");
|
9053 | };
|
9054 | }
|
9055 | FS.createDevice("/dev", "random", random_device);
|
9056 | FS.createDevice("/dev", "urandom", random_device);
|
9057 | FS.mkdir("/dev/shm");
|
9058 | FS.mkdir("/dev/shm/tmp");
|
9059 | },
|
9060 | createSpecialDirectories: function() {
|
9061 | FS.mkdir("/proc");
|
9062 | FS.mkdir("/proc/self");
|
9063 | FS.mkdir("/proc/self/fd");
|
9064 | FS.mount(
|
9065 | {
|
9066 | mount: function() {
|
9067 | var node = FS.createNode("/proc/self", "fd", 16384 | 511, 73);
|
9068 | node.node_ops = {
|
9069 | lookup: function(parent, name) {
|
9070 | var fd = +name;
|
9071 | var stream = FS.getStream(fd);
|
9072 | if (!stream) throw new FS.ErrnoError(8);
|
9073 | var ret = {
|
9074 | parent: null,
|
9075 | mount: { mountpoint: "fake" },
|
9076 | node_ops: {
|
9077 | readlink: function() {
|
9078 | return stream.path;
|
9079 | }
|
9080 | }
|
9081 | };
|
9082 | ret.parent = ret;
|
9083 | return ret;
|
9084 | }
|
9085 | };
|
9086 | return node;
|
9087 | }
|
9088 | },
|
9089 | {},
|
9090 | "/proc/self/fd"
|
9091 | );
|
9092 | },
|
9093 | createStandardStreams: function() {
|
9094 | if (Module["stdin"]) {
|
9095 | FS.createDevice("/dev", "stdin", Module["stdin"]);
|
9096 | } else {
|
9097 | FS.symlink("/dev/tty", "/dev/stdin");
|
9098 | }
|
9099 | if (Module["stdout"]) {
|
9100 | FS.createDevice("/dev", "stdout", null, Module["stdout"]);
|
9101 | } else {
|
9102 | FS.symlink("/dev/tty", "/dev/stdout");
|
9103 | }
|
9104 | if (Module["stderr"]) {
|
9105 | FS.createDevice("/dev", "stderr", null, Module["stderr"]);
|
9106 | } else {
|
9107 | FS.symlink("/dev/tty1", "/dev/stderr");
|
9108 | }
|
9109 | var stdin = FS.open("/dev/stdin", "r");
|
9110 | var stdout = FS.open("/dev/stdout", "w");
|
9111 | var stderr = FS.open("/dev/stderr", "w");
|
9112 | },
|
9113 | ensureErrnoError: function() {
|
9114 | if (FS.ErrnoError) return;
|
9115 | FS.ErrnoError = function ErrnoError(errno, node) {
|
9116 | this.node = node;
|
9117 | this.setErrno = function(errno) {
|
9118 | this.errno = errno;
|
9119 | };
|
9120 | this.setErrno(errno);
|
9121 | this.message = "FS error";
|
9122 | };
|
9123 | FS.ErrnoError.prototype = new Error();
|
9124 | FS.ErrnoError.prototype.constructor = FS.ErrnoError;
|
9125 | [44].forEach(function(code) {
|
9126 | FS.genericErrors[code] = new FS.ErrnoError(code);
|
9127 | FS.genericErrors[code].stack = "<generic error, no stack>";
|
9128 | });
|
9129 | },
|
9130 | staticInit: function() {
|
9131 | FS.ensureErrnoError();
|
9132 | FS.nameTable = new Array(4096);
|
9133 | FS.mount(MEMFS, {}, "/");
|
9134 | FS.createDefaultDirectories();
|
9135 | FS.createDefaultDevices();
|
9136 | FS.createSpecialDirectories();
|
9137 | FS.filesystems = { MEMFS: MEMFS, NODEFS: NODEFS };
|
9138 | },
|
9139 | init: function(input, output, error) {
|
9140 | FS.init.initialized = true;
|
9141 | FS.ensureErrnoError();
|
9142 | Module["stdin"] = input || Module["stdin"];
|
9143 | Module["stdout"] = output || Module["stdout"];
|
9144 | Module["stderr"] = error || Module["stderr"];
|
9145 | FS.createStandardStreams();
|
9146 | },
|
9147 | quit: function() {
|
9148 | FS.init.initialized = false;
|
9149 | var fflush = Module["_fflush"];
|
9150 | if (fflush) fflush(0);
|
9151 | for (var i = 0; i < FS.streams.length; i++) {
|
9152 | var stream = FS.streams[i];
|
9153 | if (!stream) {
|
9154 | continue;
|
9155 | }
|
9156 | FS.close(stream);
|
9157 | }
|
9158 | },
|
9159 | getMode: function(canRead, canWrite) {
|
9160 | var mode = 0;
|
9161 | if (canRead) mode |= 292 | 73;
|
9162 | if (canWrite) mode |= 146;
|
9163 | return mode;
|
9164 | },
|
9165 | joinPath: function(parts, forceRelative) {
|
9166 | var path = PATH.join.apply(null, parts);
|
9167 | if (forceRelative && path[0] == "/") path = path.substr(1);
|
9168 | return path;
|
9169 | },
|
9170 | absolutePath: function(relative, base) {
|
9171 | return PATH_FS.resolve(base, relative);
|
9172 | },
|
9173 | standardizePath: function(path) {
|
9174 | return PATH.normalize(path);
|
9175 | },
|
9176 | findObject: function(path, dontResolveLastLink) {
|
9177 | var ret = FS.analyzePath(path, dontResolveLastLink);
|
9178 | if (ret.exists) {
|
9179 | return ret.object;
|
9180 | } else {
|
9181 | ___setErrNo(ret.error);
|
9182 | return null;
|
9183 | }
|
9184 | },
|
9185 | analyzePath: function(path, dontResolveLastLink) {
|
9186 | try {
|
9187 | var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });
|
9188 | path = lookup.path;
|
9189 | } catch (e) {}
|
9190 | var ret = {
|
9191 | isRoot: false,
|
9192 | exists: false,
|
9193 | error: 0,
|
9194 | name: null,
|
9195 | path: null,
|
9196 | object: null,
|
9197 | parentExists: false,
|
9198 | parentPath: null,
|
9199 | parentObject: null
|
9200 | };
|
9201 | try {
|
9202 | var lookup = FS.lookupPath(path, { parent: true });
|
9203 | ret.parentExists = true;
|
9204 | ret.parentPath = lookup.path;
|
9205 | ret.parentObject = lookup.node;
|
9206 | ret.name = PATH.basename(path);
|
9207 | lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });
|
9208 | ret.exists = true;
|
9209 | ret.path = lookup.path;
|
9210 | ret.object = lookup.node;
|
9211 | ret.name = lookup.node.name;
|
9212 | ret.isRoot = lookup.path === "/";
|
9213 | } catch (e) {
|
9214 | ret.error = e.errno;
|
9215 | }
|
9216 | return ret;
|
9217 | },
|
9218 | createFolder: function(parent, name, canRead, canWrite) {
|
9219 | var path = PATH.join2(
|
9220 | typeof parent === "string" ? parent : FS.getPath(parent),
|
9221 | name
|
9222 | );
|
9223 | var mode = FS.getMode(canRead, canWrite);
|
9224 | return FS.mkdir(path, mode);
|
9225 | },
|
9226 | createPath: function(parent, path, canRead, canWrite) {
|
9227 | parent = typeof parent === "string" ? parent : FS.getPath(parent);
|
9228 | var parts = path.split("/").reverse();
|
9229 | while (parts.length) {
|
9230 | var part = parts.pop();
|
9231 | if (!part) continue;
|
9232 | var current = PATH.join2(parent, part);
|
9233 | try {
|
9234 | FS.mkdir(current);
|
9235 | } catch (e) {}
|
9236 | parent = current;
|
9237 | }
|
9238 | return current;
|
9239 | },
|
9240 | createFile: function(parent, name, properties, canRead, canWrite) {
|
9241 | var path = PATH.join2(
|
9242 | typeof parent === "string" ? parent : FS.getPath(parent),
|
9243 | name
|
9244 | );
|
9245 | var mode = FS.getMode(canRead, canWrite);
|
9246 | return FS.create(path, mode);
|
9247 | },
|
9248 | createDataFile: function(parent, name, data, canRead, canWrite, canOwn) {
|
9249 | var path = name
|
9250 | ? PATH.join2(
|
9251 | typeof parent === "string" ? parent : FS.getPath(parent),
|
9252 | name
|
9253 | )
|
9254 | : parent;
|
9255 | var mode = FS.getMode(canRead, canWrite);
|
9256 | var node = FS.create(path, mode);
|
9257 | if (data) {
|
9258 | if (typeof data === "string") {
|
9259 | var arr = new Array(data.length);
|
9260 | for (var i = 0, len = data.length; i < len; ++i)
|
9261 | arr[i] = data.charCodeAt(i);
|
9262 | data = arr;
|
9263 | }
|
9264 | FS.chmod(node, mode | 146);
|
9265 | var stream = FS.open(node, "w");
|
9266 | FS.write(stream, data, 0, data.length, 0, canOwn);
|
9267 | FS.close(stream);
|
9268 | FS.chmod(node, mode);
|
9269 | }
|
9270 | return node;
|
9271 | },
|
9272 | createDevice: function(parent, name, input, output) {
|
9273 | var path = PATH.join2(
|
9274 | typeof parent === "string" ? parent : FS.getPath(parent),
|
9275 | name
|
9276 | );
|
9277 | var mode = FS.getMode(!!input, !!output);
|
9278 | if (!FS.createDevice.major) FS.createDevice.major = 64;
|
9279 | var dev = FS.makedev(FS.createDevice.major++, 0);
|
9280 | FS.registerDevice(dev, {
|
9281 | open: function(stream) {
|
9282 | stream.seekable = false;
|
9283 | },
|
9284 | close: function(stream) {
|
9285 | if (output && output.buffer && output.buffer.length) {
|
9286 | output(10);
|
9287 | }
|
9288 | },
|
9289 | read: function(stream, buffer, offset, length, pos) {
|
9290 | var bytesRead = 0;
|
9291 | for (var i = 0; i < length; i++) {
|
9292 | var result;
|
9293 | try {
|
9294 | result = input();
|
9295 | } catch (e) {
|
9296 | throw new FS.ErrnoError(29);
|
9297 | }
|
9298 | if (result === undefined && bytesRead === 0) {
|
9299 | throw new FS.ErrnoError(6);
|
9300 | }
|
9301 | if (result === null || result === undefined) break;
|
9302 | bytesRead++;
|
9303 | buffer[offset + i] = result;
|
9304 | }
|
9305 | if (bytesRead) {
|
9306 | stream.node.timestamp = Date.now();
|
9307 | }
|
9308 | return bytesRead;
|
9309 | },
|
9310 | write: function(stream, buffer, offset, length, pos) {
|
9311 | for (var i = 0; i < length; i++) {
|
9312 | try {
|
9313 | output(buffer[offset + i]);
|
9314 | } catch (e) {
|
9315 | throw new FS.ErrnoError(29);
|
9316 | }
|
9317 | }
|
9318 | if (length) {
|
9319 | stream.node.timestamp = Date.now();
|
9320 | }
|
9321 | return i;
|
9322 | }
|
9323 | });
|
9324 | return FS.mkdev(path, mode, dev);
|
9325 | },
|
9326 | createLink: function(parent, name, target, canRead, canWrite) {
|
9327 | var path = PATH.join2(
|
9328 | typeof parent === "string" ? parent : FS.getPath(parent),
|
9329 | name
|
9330 | );
|
9331 | return FS.symlink(target, path);
|
9332 | },
|
9333 | forceLoadFile: function(obj) {
|
9334 | if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true;
|
9335 | var success = true;
|
9336 | if (typeof XMLHttpRequest !== "undefined") {
|
9337 | throw new Error(
|
9338 | "Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread."
|
9339 | );
|
9340 | } else if (read_) {
|
9341 | try {
|
9342 | obj.contents = intArrayFromString(read_(obj.url), true);
|
9343 | obj.usedBytes = obj.contents.length;
|
9344 | } catch (e) {
|
9345 | success = false;
|
9346 | }
|
9347 | } else {
|
9348 | throw new Error("Cannot load without read() or XMLHttpRequest.");
|
9349 | }
|
9350 | if (!success) ___setErrNo(29);
|
9351 | return success;
|
9352 | },
|
9353 | createLazyFile: function(parent, name, url, canRead, canWrite) {
|
9354 | function LazyUint8Array() {
|
9355 | this.lengthKnown = false;
|
9356 | this.chunks = [];
|
9357 | }
|
9358 | LazyUint8Array.prototype.get = function LazyUint8Array_get(idx) {
|
9359 | if (idx > this.length - 1 || idx < 0) {
|
9360 | return undefined;
|
9361 | }
|
9362 | var chunkOffset = idx % this.chunkSize;
|
9363 | var chunkNum = (idx / this.chunkSize) | 0;
|
9364 | return this.getter(chunkNum)[chunkOffset];
|
9365 | };
|
9366 | LazyUint8Array.prototype.setDataGetter = function LazyUint8Array_setDataGetter(
|
9367 | getter
|
9368 | ) {
|
9369 | this.getter = getter;
|
9370 | };
|
9371 | LazyUint8Array.prototype.cacheLength = function LazyUint8Array_cacheLength() {
|
9372 | var xhr = new XMLHttpRequest();
|
9373 | xhr.open("HEAD", url, false);
|
9374 | xhr.send(null);
|
9375 | if (!((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304))
|
9376 | throw new Error("Couldn't load " + url + ". Status: " + xhr.status);
|
9377 | var datalength = Number(xhr.getResponseHeader("Content-length"));
|
9378 | var header;
|
9379 | var hasByteServing =
|
9380 | (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes";
|
9381 | var usesGzip =
|
9382 | (header = xhr.getResponseHeader("Content-Encoding")) &&
|
9383 | header === "gzip";
|
9384 | var chunkSize = 1024 * 1024;
|
9385 | if (!hasByteServing) chunkSize = datalength;
|
9386 | var doXHR = function(from, to) {
|
9387 | if (from > to)
|
9388 | throw new Error(
|
9389 | "invalid range (" + from + ", " + to + ") or no bytes requested!"
|
9390 | );
|
9391 | if (to > datalength - 1)
|
9392 | throw new Error(
|
9393 | "only " + datalength + " bytes available! programmer error!"
|
9394 | );
|
9395 | var xhr = new XMLHttpRequest();
|
9396 | xhr.open("GET", url, false);
|
9397 | if (datalength !== chunkSize)
|
9398 | xhr.setRequestHeader("Range", "bytes=" + from + "-" + to);
|
9399 | if (typeof Uint8Array != "undefined") xhr.responseType = "arraybuffer";
|
9400 | if (xhr.overrideMimeType) {
|
9401 | xhr.overrideMimeType("text/plain; charset=x-user-defined");
|
9402 | }
|
9403 | xhr.send(null);
|
9404 | if (!((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304))
|
9405 | throw new Error("Couldn't load " + url + ". Status: " + xhr.status);
|
9406 | if (xhr.response !== undefined) {
|
9407 | return new Uint8Array(xhr.response || []);
|
9408 | } else {
|
9409 | return intArrayFromString(xhr.responseText || "", true);
|
9410 | }
|
9411 | };
|
9412 | var lazyArray = this;
|
9413 | lazyArray.setDataGetter(function(chunkNum) {
|
9414 | var start = chunkNum * chunkSize;
|
9415 | var end = (chunkNum + 1) * chunkSize - 1;
|
9416 | end = Math.min(end, datalength - 1);
|
9417 | if (typeof lazyArray.chunks[chunkNum] === "undefined") {
|
9418 | lazyArray.chunks[chunkNum] = doXHR(start, end);
|
9419 | }
|
9420 | if (typeof lazyArray.chunks[chunkNum] === "undefined")
|
9421 | throw new Error("doXHR failed!");
|
9422 | return lazyArray.chunks[chunkNum];
|
9423 | });
|
9424 | if (usesGzip || !datalength) {
|
9425 | chunkSize = datalength = 1;
|
9426 | datalength = this.getter(0).length;
|
9427 | chunkSize = datalength;
|
9428 | console.log(
|
9429 | "LazyFiles on gzip forces download of the whole file when length is accessed"
|
9430 | );
|
9431 | }
|
9432 | this._length = datalength;
|
9433 | this._chunkSize = chunkSize;
|
9434 | this.lengthKnown = true;
|
9435 | };
|
9436 | if (typeof XMLHttpRequest !== "undefined") {
|
9437 | if (!ENVIRONMENT_IS_WORKER)
|
9438 | throw "Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";
|
9439 | var lazyArray = new LazyUint8Array();
|
9440 | Object.defineProperties(lazyArray, {
|
9441 | length: {
|
9442 | get: function() {
|
9443 | if (!this.lengthKnown) {
|
9444 | this.cacheLength();
|
9445 | }
|
9446 | return this._length;
|
9447 | }
|
9448 | },
|
9449 | chunkSize: {
|
9450 | get: function() {
|
9451 | if (!this.lengthKnown) {
|
9452 | this.cacheLength();
|
9453 | }
|
9454 | return this._chunkSize;
|
9455 | }
|
9456 | }
|
9457 | });
|
9458 | var properties = { isDevice: false, contents: lazyArray };
|
9459 | } else {
|
9460 | var properties = { isDevice: false, url: url };
|
9461 | }
|
9462 | var node = FS.createFile(parent, name, properties, canRead, canWrite);
|
9463 | if (properties.contents) {
|
9464 | node.contents = properties.contents;
|
9465 | } else if (properties.url) {
|
9466 | node.contents = null;
|
9467 | node.url = properties.url;
|
9468 | }
|
9469 | Object.defineProperties(node, {
|
9470 | usedBytes: {
|
9471 | get: function() {
|
9472 | return this.contents.length;
|
9473 | }
|
9474 | }
|
9475 | });
|
9476 | var stream_ops = {};
|
9477 | var keys = Object.keys(node.stream_ops);
|
9478 | keys.forEach(function(key) {
|
9479 | var fn = node.stream_ops[key];
|
9480 | stream_ops[key] = function forceLoadLazyFile() {
|
9481 | if (!FS.forceLoadFile(node)) {
|
9482 | throw new FS.ErrnoError(29);
|
9483 | }
|
9484 | return fn.apply(null, arguments);
|
9485 | };
|
9486 | });
|
9487 | stream_ops.read = function stream_ops_read(
|
9488 | stream,
|
9489 | buffer,
|
9490 | offset,
|
9491 | length,
|
9492 | position
|
9493 | ) {
|
9494 | if (!FS.forceLoadFile(node)) {
|
9495 | throw new FS.ErrnoError(29);
|
9496 | }
|
9497 | var contents = stream.node.contents;
|
9498 | if (position >= contents.length) return 0;
|
9499 | var size = Math.min(contents.length - position, length);
|
9500 | if (contents.slice) {
|
9501 | for (var i = 0; i < size; i++) {
|
9502 | buffer[offset + i] = contents[position + i];
|
9503 | }
|
9504 | } else {
|
9505 | for (var i = 0; i < size; i++) {
|
9506 | buffer[offset + i] = contents.get(position + i);
|
9507 | }
|
9508 | }
|
9509 | return size;
|
9510 | };
|
9511 | node.stream_ops = stream_ops;
|
9512 | return node;
|
9513 | },
|
9514 | createPreloadedFile: function(
|
9515 | parent,
|
9516 | name,
|
9517 | url,
|
9518 | canRead,
|
9519 | canWrite,
|
9520 | onload,
|
9521 | onerror,
|
9522 | dontCreateFile,
|
9523 | canOwn,
|
9524 | preFinish
|
9525 | ) {
|
9526 | Browser.init();
|
9527 | var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent;
|
9528 | var dep = getUniqueRunDependency("cp " + fullname);
|
9529 | function processData(byteArray) {
|
9530 | function finish(byteArray) {
|
9531 | if (preFinish) preFinish();
|
9532 | if (!dontCreateFile) {
|
9533 | FS.createDataFile(parent, name, byteArray, canRead, canWrite, canOwn);
|
9534 | }
|
9535 | if (onload) onload();
|
9536 | removeRunDependency(dep);
|
9537 | }
|
9538 | var handled = false;
|
9539 | Module["preloadPlugins"].forEach(function(plugin) {
|
9540 | if (handled) return;
|
9541 | if (plugin["canHandle"](fullname)) {
|
9542 | plugin["handle"](byteArray, fullname, finish, function() {
|
9543 | if (onerror) onerror();
|
9544 | removeRunDependency(dep);
|
9545 | });
|
9546 | handled = true;
|
9547 | }
|
9548 | });
|
9549 | if (!handled) finish(byteArray);
|
9550 | }
|
9551 | addRunDependency(dep);
|
9552 | if (typeof url == "string") {
|
9553 | Browser.asyncLoad(
|
9554 | url,
|
9555 | function(byteArray) {
|
9556 | processData(byteArray);
|
9557 | },
|
9558 | onerror
|
9559 | );
|
9560 | } else {
|
9561 | processData(url);
|
9562 | }
|
9563 | },
|
9564 | indexedDB: function() {
|
9565 | return (
|
9566 | window.indexedDB ||
|
9567 | window.mozIndexedDB ||
|
9568 | window.webkitIndexedDB ||
|
9569 | window.msIndexedDB
|
9570 | );
|
9571 | },
|
9572 | DB_NAME: function() {
|
9573 | return "EM_FS_" + window.location.pathname;
|
9574 | },
|
9575 | DB_VERSION: 20,
|
9576 | DB_STORE_NAME: "FILE_DATA",
|
9577 | saveFilesToDB: function(paths, onload, onerror) {
|
9578 | onload = onload || function() {};
|
9579 | onerror = onerror || function() {};
|
9580 | var indexedDB = FS.indexedDB();
|
9581 | try {
|
9582 | var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION);
|
9583 | } catch (e) {
|
9584 | return onerror(e);
|
9585 | }
|
9586 | openRequest.onupgradeneeded = function openRequest_onupgradeneeded() {
|
9587 | console.log("creating db");
|
9588 | var db = openRequest.result;
|
9589 | db.createObjectStore(FS.DB_STORE_NAME);
|
9590 | };
|
9591 | openRequest.onsuccess = function openRequest_onsuccess() {
|
9592 | var db = openRequest.result;
|
9593 | var transaction = db.transaction([FS.DB_STORE_NAME], "readwrite");
|
9594 | var files = transaction.objectStore(FS.DB_STORE_NAME);
|
9595 | var ok = 0,
|
9596 | fail = 0,
|
9597 | total = paths.length;
|
9598 | function finish() {
|
9599 | if (fail == 0) onload();
|
9600 | else onerror();
|
9601 | }
|
9602 | paths.forEach(function(path) {
|
9603 | var putRequest = files.put(FS.analyzePath(path).object.contents, path);
|
9604 | putRequest.onsuccess = function putRequest_onsuccess() {
|
9605 | ok++;
|
9606 | if (ok + fail == total) finish();
|
9607 | };
|
9608 | putRequest.onerror = function putRequest_onerror() {
|
9609 | fail++;
|
9610 | if (ok + fail == total) finish();
|
9611 | };
|
9612 | });
|
9613 | transaction.onerror = onerror;
|
9614 | };
|
9615 | openRequest.onerror = onerror;
|
9616 | },
|
9617 | loadFilesFromDB: function(paths, onload, onerror) {
|
9618 | onload = onload || function() {};
|
9619 | onerror = onerror || function() {};
|
9620 | var indexedDB = FS.indexedDB();
|
9621 | try {
|
9622 | var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION);
|
9623 | } catch (e) {
|
9624 | return onerror(e);
|
9625 | }
|
9626 | openRequest.onupgradeneeded = onerror;
|
9627 | openRequest.onsuccess = function openRequest_onsuccess() {
|
9628 | var db = openRequest.result;
|
9629 | try {
|
9630 | var transaction = db.transaction([FS.DB_STORE_NAME], "readonly");
|
9631 | } catch (e) {
|
9632 | onerror(e);
|
9633 | return;
|
9634 | }
|
9635 | var files = transaction.objectStore(FS.DB_STORE_NAME);
|
9636 | var ok = 0,
|
9637 | fail = 0,
|
9638 | total = paths.length;
|
9639 | function finish() {
|
9640 | if (fail == 0) onload();
|
9641 | else onerror();
|
9642 | }
|
9643 | paths.forEach(function(path) {
|
9644 | var getRequest = files.get(path);
|
9645 | getRequest.onsuccess = function getRequest_onsuccess() {
|
9646 | if (FS.analyzePath(path).exists) {
|
9647 | FS.unlink(path);
|
9648 | }
|
9649 | FS.createDataFile(
|
9650 | PATH.dirname(path),
|
9651 | PATH.basename(path),
|
9652 | getRequest.result,
|
9653 | true,
|
9654 | true,
|
9655 | true
|
9656 | );
|
9657 | ok++;
|
9658 | if (ok + fail == total) finish();
|
9659 | };
|
9660 | getRequest.onerror = function getRequest_onerror() {
|
9661 | fail++;
|
9662 | if (ok + fail == total) finish();
|
9663 | };
|
9664 | });
|
9665 | transaction.onerror = onerror;
|
9666 | };
|
9667 | openRequest.onerror = onerror;
|
9668 | }
|
9669 | };
|
9670 | var SYSCALLS = {
|
9671 | DEFAULT_POLLMASK: 5,
|
9672 | mappings: {},
|
9673 | umask: 511,
|
9674 | calculateAt: function(dirfd, path) {
|
9675 | if (path[0] !== "/") {
|
9676 | var dir;
|
9677 | if (dirfd === -100) {
|
9678 | dir = FS.cwd();
|
9679 | } else {
|
9680 | var dirstream = FS.getStream(dirfd);
|
9681 | if (!dirstream) throw new FS.ErrnoError(8);
|
9682 | dir = dirstream.path;
|
9683 | }
|
9684 | path = PATH.join2(dir, path);
|
9685 | }
|
9686 | return path;
|
9687 | },
|
9688 | doStat: function(func, path, buf) {
|
9689 | try {
|
9690 | var stat = func(path);
|
9691 | } catch (e) {
|
9692 | if (
|
9693 | e &&
|
9694 | e.node &&
|
9695 | PATH.normalize(path) !== PATH.normalize(FS.getPath(e.node))
|
9696 | ) {
|
9697 | return -54;
|
9698 | }
|
9699 | throw e;
|
9700 | }
|
9701 | HEAP32[buf >> 2] = stat.dev;
|
9702 | HEAP32[(buf + 4) >> 2] = 0;
|
9703 | HEAP32[(buf + 8) >> 2] = stat.ino;
|
9704 | HEAP32[(buf + 12) >> 2] = stat.mode;
|
9705 | HEAP32[(buf + 16) >> 2] = stat.nlink;
|
9706 | HEAP32[(buf + 20) >> 2] = stat.uid;
|
9707 | HEAP32[(buf + 24) >> 2] = stat.gid;
|
9708 | HEAP32[(buf + 28) >> 2] = stat.rdev;
|
9709 | HEAP32[(buf + 32) >> 2] = 0;
|
9710 | (tempI64 = [
|
9711 | stat.size >>> 0,
|
9712 | ((tempDouble = stat.size),
|
9713 | +Math_abs(tempDouble) >= 1
|
9714 | ? tempDouble > 0
|
9715 | ? (Math_min(+Math_floor(tempDouble / 4294967296), 4294967295) | 0) >>>
|
9716 | 0
|
9717 | : ~~+Math_ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>>
|
9718 | 0
|
9719 | : 0)
|
9720 | ]),
|
9721 | (HEAP32[(buf + 40) >> 2] = tempI64[0]),
|
9722 | (HEAP32[(buf + 44) >> 2] = tempI64[1]);
|
9723 | HEAP32[(buf + 48) >> 2] = 4096;
|
9724 | HEAP32[(buf + 52) >> 2] = stat.blocks;
|
9725 | HEAP32[(buf + 56) >> 2] = (stat.atime.getTime() / 1e3) | 0;
|
9726 | HEAP32[(buf + 60) >> 2] = 0;
|
9727 | HEAP32[(buf + 64) >> 2] = (stat.mtime.getTime() / 1e3) | 0;
|
9728 | HEAP32[(buf + 68) >> 2] = 0;
|
9729 | HEAP32[(buf + 72) >> 2] = (stat.ctime.getTime() / 1e3) | 0;
|
9730 | HEAP32[(buf + 76) >> 2] = 0;
|
9731 | (tempI64 = [
|
9732 | stat.ino >>> 0,
|
9733 | ((tempDouble = stat.ino),
|
9734 | +Math_abs(tempDouble) >= 1
|
9735 | ? tempDouble > 0
|
9736 | ? (Math_min(+Math_floor(tempDouble / 4294967296), 4294967295) | 0) >>>
|
9737 | 0
|
9738 | : ~~+Math_ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>>
|
9739 | 0
|
9740 | : 0)
|
9741 | ]),
|
9742 | (HEAP32[(buf + 80) >> 2] = tempI64[0]),
|
9743 | (HEAP32[(buf + 84) >> 2] = tempI64[1]);
|
9744 | return 0;
|
9745 | },
|
9746 | doMsync: function(addr, stream, len, flags) {
|
9747 | var buffer = new Uint8Array(HEAPU8.subarray(addr, addr + len));
|
9748 | FS.msync(stream, buffer, 0, len, flags);
|
9749 | },
|
9750 | doMkdir: function(path, mode) {
|
9751 | path = PATH.normalize(path);
|
9752 | if (path[path.length - 1] === "/") path = path.substr(0, path.length - 1);
|
9753 | FS.mkdir(path, mode, 0);
|
9754 | return 0;
|
9755 | },
|
9756 | doMknod: function(path, mode, dev) {
|
9757 | switch (mode & 61440) {
|
9758 | case 32768:
|
9759 | case 8192:
|
9760 | case 24576:
|
9761 | case 4096:
|
9762 | case 49152:
|
9763 | break;
|
9764 | default:
|
9765 | return -28;
|
9766 | }
|
9767 | FS.mknod(path, mode, dev);
|
9768 | return 0;
|
9769 | },
|
9770 | doReadlink: function(path, buf, bufsize) {
|
9771 | if (bufsize <= 0) return -28;
|
9772 | var ret = FS.readlink(path);
|
9773 | var len = Math.min(bufsize, lengthBytesUTF8(ret));
|
9774 | var endChar = HEAP8[buf + len];
|
9775 | stringToUTF8(ret, buf, bufsize + 1);
|
9776 | HEAP8[buf + len] = endChar;
|
9777 | return len;
|
9778 | },
|
9779 | doAccess: function(path, amode) {
|
9780 | if (amode & ~7) {
|
9781 | return -28;
|
9782 | }
|
9783 | var node;
|
9784 | var lookup = FS.lookupPath(path, { follow: true });
|
9785 | node = lookup.node;
|
9786 | if (!node) {
|
9787 | return -44;
|
9788 | }
|
9789 | var perms = "";
|
9790 | if (amode & 4) perms += "r";
|
9791 | if (amode & 2) perms += "w";
|
9792 | if (amode & 1) perms += "x";
|
9793 | if (perms && FS.nodePermissions(node, perms)) {
|
9794 | return -2;
|
9795 | }
|
9796 | return 0;
|
9797 | },
|
9798 | doDup: function(path, flags, suggestFD) {
|
9799 | var suggest = FS.getStream(suggestFD);
|
9800 | if (suggest) FS.close(suggest);
|
9801 | return FS.open(path, flags, 0, suggestFD, suggestFD).fd;
|
9802 | },
|
9803 | doReadv: function(stream, iov, iovcnt, offset) {
|
9804 | var ret = 0;
|
9805 | for (var i = 0; i < iovcnt; i++) {
|
9806 | var ptr = HEAP32[(iov + i * 8) >> 2];
|
9807 | var len = HEAP32[(iov + (i * 8 + 4)) >> 2];
|
9808 | var curr = FS.read(stream, HEAP8, ptr, len, offset);
|
9809 | if (curr < 0) return -1;
|
9810 | ret += curr;
|
9811 | if (curr < len) break;
|
9812 | }
|
9813 | return ret;
|
9814 | },
|
9815 | doWritev: function(stream, iov, iovcnt, offset) {
|
9816 | var ret = 0;
|
9817 | for (var i = 0; i < iovcnt; i++) {
|
9818 | var ptr = HEAP32[(iov + i * 8) >> 2];
|
9819 | var len = HEAP32[(iov + (i * 8 + 4)) >> 2];
|
9820 | var curr = FS.write(stream, HEAP8, ptr, len, offset);
|
9821 | if (curr < 0) return -1;
|
9822 | ret += curr;
|
9823 | }
|
9824 | return ret;
|
9825 | },
|
9826 | varargs: 0,
|
9827 | get: function(varargs) {
|
9828 | SYSCALLS.varargs += 4;
|
9829 | var ret = HEAP32[(SYSCALLS.varargs - 4) >> 2];
|
9830 | return ret;
|
9831 | },
|
9832 | getStr: function() {
|
9833 | var ret = UTF8ToString(SYSCALLS.get());
|
9834 | return ret;
|
9835 | },
|
9836 | getStreamFromFD: function(fd) {
|
9837 | if (fd === undefined) fd = SYSCALLS.get();
|
9838 | var stream = FS.getStream(fd);
|
9839 | if (!stream) throw new FS.ErrnoError(8);
|
9840 | return stream;
|
9841 | },
|
9842 | get64: function() {
|
9843 | var low = SYSCALLS.get(),
|
9844 | high = SYSCALLS.get();
|
9845 | return low;
|
9846 | },
|
9847 | getZero: function() {
|
9848 | SYSCALLS.get();
|
9849 | }
|
9850 | };
|
9851 | function ___syscall10(which, varargs) {
|
9852 | SYSCALLS.varargs = varargs;
|
9853 | try {
|
9854 | var path = SYSCALLS.getStr();
|
9855 | FS.unlink(path);
|
9856 | return 0;
|
9857 | } catch (e) {
|
9858 | if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e);
|
9859 | return -e.errno;
|
9860 | }
|
9861 | }
|
9862 | function ___syscall15(which, varargs) {
|
9863 | SYSCALLS.varargs = varargs;
|
9864 | try {
|
9865 | var path = SYSCALLS.getStr(),
|
9866 | mode = SYSCALLS.get();
|
9867 | FS.chmod(path, mode);
|
9868 | return 0;
|
9869 | } catch (e) {
|
9870 | if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e);
|
9871 | return -e.errno;
|
9872 | }
|
9873 | }
|
9874 | function ___syscall195(which, varargs) {
|
9875 | SYSCALLS.varargs = varargs;
|
9876 | try {
|
9877 | var path = SYSCALLS.getStr(),
|
9878 | buf = SYSCALLS.get();
|
9879 | return SYSCALLS.doStat(FS.stat, path, buf);
|
9880 | } catch (e) {
|
9881 | if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e);
|
9882 | return -e.errno;
|
9883 | }
|
9884 | }
|
9885 | function ___syscall197(which, varargs) {
|
9886 | SYSCALLS.varargs = varargs;
|
9887 | try {
|
9888 | var stream = SYSCALLS.getStreamFromFD(),
|
9889 | buf = SYSCALLS.get();
|
9890 | return SYSCALLS.doStat(FS.stat, stream.path, buf);
|
9891 | } catch (e) {
|
9892 | if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e);
|
9893 | return -e.errno;
|
9894 | }
|
9895 | }
|
9896 | function ___syscall221(which, varargs) {
|
9897 | SYSCALLS.varargs = varargs;
|
9898 | try {
|
9899 | var stream = SYSCALLS.getStreamFromFD(),
|
9900 | cmd = SYSCALLS.get();
|
9901 | switch (cmd) {
|
9902 | case 0: {
|
9903 | var arg = SYSCALLS.get();
|
9904 | if (arg < 0) {
|
9905 | return -28;
|
9906 | }
|
9907 | var newStream;
|
9908 | newStream = FS.open(stream.path, stream.flags, 0, arg);
|
9909 | return newStream.fd;
|
9910 | }
|
9911 | case 1:
|
9912 | case 2:
|
9913 | return 0;
|
9914 | case 3:
|
9915 | return stream.flags;
|
9916 | case 4: {
|
9917 | var arg = SYSCALLS.get();
|
9918 | stream.flags |= arg;
|
9919 | return 0;
|
9920 | }
|
9921 | case 12: {
|
9922 | var arg = SYSCALLS.get();
|
9923 | var offset = 0;
|
9924 | HEAP16[(arg + offset) >> 1] = 2;
|
9925 | return 0;
|
9926 | }
|
9927 | case 13:
|
9928 | case 14:
|
9929 | return 0;
|
9930 | case 16:
|
9931 | case 8:
|
9932 | return -28;
|
9933 | case 9:
|
9934 | ___setErrNo(28);
|
9935 | return -1;
|
9936 | default: {
|
9937 | return -28;
|
9938 | }
|
9939 | }
|
9940 | } catch (e) {
|
9941 | if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e);
|
9942 | return -e.errno;
|
9943 | }
|
9944 | }
|
9945 | function ___syscall3(which, varargs) {
|
9946 | SYSCALLS.varargs = varargs;
|
9947 | try {
|
9948 | var stream = SYSCALLS.getStreamFromFD(),
|
9949 | buf = SYSCALLS.get(),
|
9950 | count = SYSCALLS.get();
|
9951 | return FS.read(stream, HEAP8, buf, count);
|
9952 | } catch (e) {
|
9953 | if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e);
|
9954 | return -e.errno;
|
9955 | }
|
9956 | }
|
9957 | function ___syscall38(which, varargs) {
|
9958 | SYSCALLS.varargs = varargs;
|
9959 | try {
|
9960 | var old_path = SYSCALLS.getStr(),
|
9961 | new_path = SYSCALLS.getStr();
|
9962 | FS.rename(old_path, new_path);
|
9963 | return 0;
|
9964 | } catch (e) {
|
9965 | if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e);
|
9966 | return -e.errno;
|
9967 | }
|
9968 | }
|
9969 | function ___syscall40(which, varargs) {
|
9970 | SYSCALLS.varargs = varargs;
|
9971 | try {
|
9972 | var path = SYSCALLS.getStr();
|
9973 | FS.rmdir(path);
|
9974 | return 0;
|
9975 | } catch (e) {
|
9976 | if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e);
|
9977 | return -e.errno;
|
9978 | }
|
9979 | }
|
9980 | function ___syscall5(which, varargs) {
|
9981 | SYSCALLS.varargs = varargs;
|
9982 | try {
|
9983 | var pathname = SYSCALLS.getStr(),
|
9984 | flags = SYSCALLS.get(),
|
9985 | mode = SYSCALLS.get();
|
9986 | var stream = FS.open(pathname, flags, mode);
|
9987 | return stream.fd;
|
9988 | } catch (e) {
|
9989 | if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e);
|
9990 | return -e.errno;
|
9991 | }
|
9992 | }
|
9993 | function ___syscall54(which, varargs) {
|
9994 | SYSCALLS.varargs = varargs;
|
9995 | try {
|
9996 | var stream = SYSCALLS.getStreamFromFD(),
|
9997 | op = SYSCALLS.get();
|
9998 | switch (op) {
|
9999 | case 21509:
|
10000 | case 21505: {
|
10001 | if (!stream.tty) return -59;
|
10002 | return 0;
|
10003 | }
|
10004 | case 21510:
|
10005 | case 21511:
|
10006 | case 21512:
|
10007 | case 21506:
|
10008 | case 21507:
|
10009 | case 21508: {
|
10010 | if (!stream.tty) return -59;
|
10011 | return 0;
|
10012 | }
|
10013 | case 21519: {
|
10014 | if (!stream.tty) return -59;
|
10015 | var argp = SYSCALLS.get();
|
10016 | HEAP32[argp >> 2] = 0;
|
10017 | return 0;
|
10018 | }
|
10019 | case 21520: {
|
10020 | if (!stream.tty) return -59;
|
10021 | return -28;
|
10022 | }
|
10023 | case 21531: {
|
10024 | var argp = SYSCALLS.get();
|
10025 | return FS.ioctl(stream, op, argp);
|
10026 | }
|
10027 | case 21523: {
|
10028 | if (!stream.tty) return -59;
|
10029 | return 0;
|
10030 | }
|
10031 | case 21524: {
|
10032 | if (!stream.tty) return -59;
|
10033 | return 0;
|
10034 | }
|
10035 | default:
|
10036 | abort("bad ioctl syscall " + op);
|
10037 | }
|
10038 | } catch (e) {
|
10039 | if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e);
|
10040 | return -e.errno;
|
10041 | }
|
10042 | }
|
10043 | function ___unlock() {}
|
10044 | function _emscripten_get_heap_size() {
|
10045 | return HEAP8.length;
|
10046 | }
|
10047 | function _emscripten_memcpy_big(dest, src, num) {
|
10048 | HEAPU8.set(HEAPU8.subarray(src, src + num), dest);
|
10049 | }
|
10050 | function emscripten_realloc_buffer(size) {
|
10051 | try {
|
10052 | wasmMemory.grow((size - buffer.byteLength + 65535) >> 16);
|
10053 | updateGlobalBufferAndViews(wasmMemory.buffer);
|
10054 | return 1;
|
10055 | } catch (e) {}
|
10056 | }
|
10057 | function _emscripten_resize_heap(requestedSize) {
|
10058 | var oldSize = _emscripten_get_heap_size();
|
10059 | var PAGE_MULTIPLE = 65536;
|
10060 | var LIMIT = 2147483648 - PAGE_MULTIPLE;
|
10061 | if (requestedSize > LIMIT) {
|
10062 | return false;
|
10063 | }
|
10064 | var MIN_TOTAL_MEMORY = 16777216;
|
10065 | var newSize = Math.max(oldSize, MIN_TOTAL_MEMORY);
|
10066 | while (newSize < requestedSize) {
|
10067 | if (newSize <= 536870912) {
|
10068 | newSize = alignUp(2 * newSize, PAGE_MULTIPLE);
|
10069 | } else {
|
10070 | newSize = Math.min(
|
10071 | alignUp((3 * newSize + 2147483648) / 4, PAGE_MULTIPLE),
|
10072 | LIMIT
|
10073 | );
|
10074 | }
|
10075 | }
|
10076 | var replacement = emscripten_realloc_buffer(newSize);
|
10077 | if (!replacement) {
|
10078 | return false;
|
10079 | }
|
10080 | return true;
|
10081 | }
|
10082 | function _fd_close(fd) {
|
10083 | try {
|
10084 | var stream = SYSCALLS.getStreamFromFD(fd);
|
10085 | FS.close(stream);
|
10086 | return 0;
|
10087 | } catch (e) {
|
10088 | if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e);
|
10089 | return e.errno;
|
10090 | }
|
10091 | }
|
10092 | function _fd_fdstat_get(fd, pbuf) {
|
10093 | try {
|
10094 | var stream = SYSCALLS.getStreamFromFD(fd);
|
10095 | var type = stream.tty
|
10096 | ? 2
|
10097 | : FS.isDir(stream.mode)
|
10098 | ? 3
|
10099 | : FS.isLink(stream.mode)
|
10100 | ? 7
|
10101 | : 4;
|
10102 | HEAP8[pbuf >> 0] = type;
|
10103 | return 0;
|
10104 | } catch (e) {
|
10105 | if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e);
|
10106 | return e.errno;
|
10107 | }
|
10108 | }
|
10109 | function _fd_read(fd, iov, iovcnt, pnum) {
|
10110 | try {
|
10111 | var stream = SYSCALLS.getStreamFromFD(fd);
|
10112 | var num = SYSCALLS.doReadv(stream, iov, iovcnt);
|
10113 | HEAP32[pnum >> 2] = num;
|
10114 | return 0;
|
10115 | } catch (e) {
|
10116 | if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e);
|
10117 | return e.errno;
|
10118 | }
|
10119 | }
|
10120 | function _fd_seek(fd, offset_low, offset_high, whence, newOffset) {
|
10121 | try {
|
10122 | var stream = SYSCALLS.getStreamFromFD(fd);
|
10123 | var HIGH_OFFSET = 4294967296;
|
10124 | var offset = offset_high * HIGH_OFFSET + (offset_low >>> 0);
|
10125 | var DOUBLE_LIMIT = 9007199254740992;
|
10126 | if (offset <= -DOUBLE_LIMIT || offset >= DOUBLE_LIMIT) {
|
10127 | return -61;
|
10128 | }
|
10129 | FS.llseek(stream, offset, whence);
|
10130 | (tempI64 = [
|
10131 | stream.position >>> 0,
|
10132 | ((tempDouble = stream.position),
|
10133 | +Math_abs(tempDouble) >= 1
|
10134 | ? tempDouble > 0
|
10135 | ? (Math_min(+Math_floor(tempDouble / 4294967296), 4294967295) | 0) >>>
|
10136 | 0
|
10137 | : ~~+Math_ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>>
|
10138 | 0
|
10139 | : 0)
|
10140 | ]),
|
10141 | (HEAP32[newOffset >> 2] = tempI64[0]),
|
10142 | (HEAP32[(newOffset + 4) >> 2] = tempI64[1]);
|
10143 | if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null;
|
10144 | return 0;
|
10145 | } catch (e) {
|
10146 | if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e);
|
10147 | return e.errno;
|
10148 | }
|
10149 | }
|
10150 | function _fd_write(fd, iov, iovcnt, pnum) {
|
10151 | try {
|
10152 | var stream = SYSCALLS.getStreamFromFD(fd);
|
10153 | var num = SYSCALLS.doWritev(stream, iov, iovcnt);
|
10154 | HEAP32[pnum >> 2] = num;
|
10155 | return 0;
|
10156 | } catch (e) {
|
10157 | if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e);
|
10158 | return e.errno;
|
10159 | }
|
10160 | }
|
10161 | var ___tm_current = 20656;
|
10162 | var ___tm_timezone = (stringToUTF8("GMT", 20704, 4), 20704);
|
10163 | function _gmtime_r(time, tmPtr) {
|
10164 | var date = new Date(HEAP32[time >> 2] * 1e3);
|
10165 | HEAP32[tmPtr >> 2] = date.getUTCSeconds();
|
10166 | HEAP32[(tmPtr + 4) >> 2] = date.getUTCMinutes();
|
10167 | HEAP32[(tmPtr + 8) >> 2] = date.getUTCHours();
|
10168 | HEAP32[(tmPtr + 12) >> 2] = date.getUTCDate();
|
10169 | HEAP32[(tmPtr + 16) >> 2] = date.getUTCMonth();
|
10170 | HEAP32[(tmPtr + 20) >> 2] = date.getUTCFullYear() - 1900;
|
10171 | HEAP32[(tmPtr + 24) >> 2] = date.getUTCDay();
|
10172 | HEAP32[(tmPtr + 36) >> 2] = 0;
|
10173 | HEAP32[(tmPtr + 32) >> 2] = 0;
|
10174 | var start = Date.UTC(date.getUTCFullYear(), 0, 1, 0, 0, 0, 0);
|
10175 | var yday = ((date.getTime() - start) / (1e3 * 60 * 60 * 24)) | 0;
|
10176 | HEAP32[(tmPtr + 28) >> 2] = yday;
|
10177 | HEAP32[(tmPtr + 40) >> 2] = ___tm_timezone;
|
10178 | return tmPtr;
|
10179 | }
|
10180 | function _gmtime(time) {
|
10181 | return _gmtime_r(time, ___tm_current);
|
10182 | }
|
10183 | function _tzset() {
|
10184 | if (_tzset.called) return;
|
10185 | _tzset.called = true;
|
10186 | HEAP32[__get_timezone() >> 2] = new Date().getTimezoneOffset() * 60;
|
10187 | var currentYear = new Date().getFullYear();
|
10188 | var winter = new Date(currentYear, 0, 1);
|
10189 | var summer = new Date(currentYear, 6, 1);
|
10190 | HEAP32[__get_daylight() >> 2] = Number(
|
10191 | winter.getTimezoneOffset() != summer.getTimezoneOffset()
|
10192 | );
|
10193 | function extractZone(date) {
|
10194 | var match = date.toTimeString().match(/\(([A-Za-z ]+)\)$/);
|
10195 | return match ? match[1] : "GMT";
|
10196 | }
|
10197 | var winterName = extractZone(winter);
|
10198 | var summerName = extractZone(summer);
|
10199 | var winterNamePtr = allocate(
|
10200 | intArrayFromString(winterName),
|
10201 | "i8",
|
10202 | ALLOC_NORMAL
|
10203 | );
|
10204 | var summerNamePtr = allocate(
|
10205 | intArrayFromString(summerName),
|
10206 | "i8",
|
10207 | ALLOC_NORMAL
|
10208 | );
|
10209 | if (summer.getTimezoneOffset() < winter.getTimezoneOffset()) {
|
10210 | HEAP32[__get_tzname() >> 2] = winterNamePtr;
|
10211 | HEAP32[(__get_tzname() + 4) >> 2] = summerNamePtr;
|
10212 | } else {
|
10213 | HEAP32[__get_tzname() >> 2] = summerNamePtr;
|
10214 | HEAP32[(__get_tzname() + 4) >> 2] = winterNamePtr;
|
10215 | }
|
10216 | }
|
10217 | function _mktime(tmPtr) {
|
10218 | _tzset();
|
10219 | var date = new Date(
|
10220 | HEAP32[(tmPtr + 20) >> 2] + 1900,
|
10221 | HEAP32[(tmPtr + 16) >> 2],
|
10222 | HEAP32[(tmPtr + 12) >> 2],
|
10223 | HEAP32[(tmPtr + 8) >> 2],
|
10224 | HEAP32[(tmPtr + 4) >> 2],
|
10225 | HEAP32[tmPtr >> 2],
|
10226 | 0
|
10227 | );
|
10228 | var dst = HEAP32[(tmPtr + 32) >> 2];
|
10229 | var guessedOffset = date.getTimezoneOffset();
|
10230 | var start = new Date(date.getFullYear(), 0, 1);
|
10231 | var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset();
|
10232 | var winterOffset = start.getTimezoneOffset();
|
10233 | var dstOffset = Math.min(winterOffset, summerOffset);
|
10234 | if (dst < 0) {
|
10235 | HEAP32[(tmPtr + 32) >> 2] = Number(
|
10236 | summerOffset != winterOffset && dstOffset == guessedOffset
|
10237 | );
|
10238 | } else if (dst > 0 != (dstOffset == guessedOffset)) {
|
10239 | var nonDstOffset = Math.max(winterOffset, summerOffset);
|
10240 | var trueOffset = dst > 0 ? dstOffset : nonDstOffset;
|
10241 | date.setTime(date.getTime() + (trueOffset - guessedOffset) * 6e4);
|
10242 | }
|
10243 | HEAP32[(tmPtr + 24) >> 2] = date.getDay();
|
10244 | var yday = ((date.getTime() - start.getTime()) / (1e3 * 60 * 60 * 24)) | 0;
|
10245 | HEAP32[(tmPtr + 28) >> 2] = yday;
|
10246 | return (date.getTime() / 1e3) | 0;
|
10247 | }
|
10248 | function _setTempRet0($i) {
|
10249 | setTempRet0($i | 0);
|
10250 | }
|
10251 | function _time(ptr) {
|
10252 | var ret = (Date.now() / 1e3) | 0;
|
10253 | if (ptr) {
|
10254 | HEAP32[ptr >> 2] = ret;
|
10255 | }
|
10256 | return ret;
|
10257 | }
|
10258 | FS.staticInit();
|
10259 | if (ENVIRONMENT_HAS_NODE) {
|
10260 | var fs = frozenFs;
|
10261 | var NODEJS_PATH = __webpack_require__(7);
|
10262 | NODEFS.staticInit();
|
10263 | }
|
10264 | if (ENVIRONMENT_IS_NODE) {
|
10265 | var _wrapNodeError = function(func) {
|
10266 | return function() {
|
10267 | try {
|
10268 | return func.apply(this, arguments);
|
10269 | } catch (e) {
|
10270 | if (!e.code) throw e;
|
10271 | throw new FS.ErrnoError(ERRNO_CODES[e.code]);
|
10272 | }
|
10273 | };
|
10274 | };
|
10275 | var VFS = Object.assign({}, FS);
|
10276 | for (var _key in NODERAWFS) FS[_key] = _wrapNodeError(NODERAWFS[_key]);
|
10277 | } else {
|
10278 | throw new Error(
|
10279 | "NODERAWFS is currently only supported on Node.js environment."
|
10280 | );
|
10281 | }
|
10282 | function intArrayFromString(stringy, dontAddNull, length) {
|
10283 | var len = length > 0 ? length : lengthBytesUTF8(stringy) + 1;
|
10284 | var u8array = new Array(len);
|
10285 | var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length);
|
10286 | if (dontAddNull) u8array.length = numBytesWritten;
|
10287 | return u8array;
|
10288 | }
|
10289 | var decodeBase64 =
|
10290 | typeof atob === "function"
|
10291 | ? atob
|
10292 | : function(input) {
|
10293 | var keyStr =
|
10294 | "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
|
10295 | var output = "";
|
10296 | var chr1, chr2, chr3;
|
10297 | var enc1, enc2, enc3, enc4;
|
10298 | var i = 0;
|
10299 | input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
|
10300 | do {
|
10301 | enc1 = keyStr.indexOf(input.charAt(i++));
|
10302 | enc2 = keyStr.indexOf(input.charAt(i++));
|
10303 | enc3 = keyStr.indexOf(input.charAt(i++));
|
10304 | enc4 = keyStr.indexOf(input.charAt(i++));
|
10305 | chr1 = (enc1 << 2) | (enc2 >> 4);
|
10306 | chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
|
10307 | chr3 = ((enc3 & 3) << 6) | enc4;
|
10308 | output = output + String.fromCharCode(chr1);
|
10309 | if (enc3 !== 64) {
|
10310 | output = output + String.fromCharCode(chr2);
|
10311 | }
|
10312 | if (enc4 !== 64) {
|
10313 | output = output + String.fromCharCode(chr3);
|
10314 | }
|
10315 | } while (i < input.length);
|
10316 | return output;
|
10317 | };
|
10318 | function intArrayFromBase64(s) {
|
10319 | if (typeof ENVIRONMENT_IS_NODE === "boolean" && ENVIRONMENT_IS_NODE) {
|
10320 | var buf;
|
10321 | try {
|
10322 | buf = Buffer.from(s, "base64");
|
10323 | } catch (_) {
|
10324 | buf = new Buffer(s, "base64");
|
10325 | }
|
10326 | return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);
|
10327 | }
|
10328 | try {
|
10329 | var decoded = decodeBase64(s);
|
10330 | var bytes = new Uint8Array(decoded.length);
|
10331 | for (var i = 0; i < decoded.length; ++i) {
|
10332 | bytes[i] = decoded.charCodeAt(i);
|
10333 | }
|
10334 | return bytes;
|
10335 | } catch (_) {
|
10336 | throw new Error("Converting base64 string to bytes failed.");
|
10337 | }
|
10338 | }
|
10339 | function tryParseAsDataURI(filename) {
|
10340 | if (!isDataURI(filename)) {
|
10341 | return;
|
10342 | }
|
10343 | return intArrayFromBase64(filename.slice(dataURIPrefix.length));
|
10344 | }
|
10345 | var asmLibraryArg = {
|
10346 | d: ___lock,
|
10347 | t: ___syscall10,
|
10348 | p: ___syscall15,
|
10349 | f: ___syscall195,
|
10350 | v: ___syscall197,
|
10351 | e: ___syscall221,
|
10352 | q: ___syscall3,
|
10353 | u: ___syscall38,
|
10354 | s: ___syscall40,
|
10355 | r: ___syscall5,
|
10356 | o: ___syscall54,
|
10357 | a: ___unlock,
|
10358 | j: _emscripten_memcpy_big,
|
10359 | k: _emscripten_resize_heap,
|
10360 | g: _fd_close,
|
10361 | n: _fd_fdstat_get,
|
10362 | m: _fd_read,
|
10363 | l: _fd_seek,
|
10364 | w: _fd_write,
|
10365 | h: _gmtime,
|
10366 | memory: wasmMemory,
|
10367 | i: _mktime,
|
10368 | b: _setTempRet0,
|
10369 | table: wasmTable,
|
10370 | c: _time
|
10371 | };
|
10372 | var asm = createWasm();
|
10373 | var ___wasm_call_ctors = (Module["___wasm_call_ctors"] = asm["x"]);
|
10374 | var _zipstruct_stat = (Module["_zipstruct_stat"] = asm["y"]);
|
10375 | var _zipstruct_statS = (Module["_zipstruct_statS"] = asm["z"]);
|
10376 | var _zipstruct_stat_name = (Module["_zipstruct_stat_name"] = asm["A"]);
|
10377 | var _zipstruct_stat_index = (Module["_zipstruct_stat_index"] = asm["B"]);
|
10378 | var _zipstruct_stat_size = (Module["_zipstruct_stat_size"] = asm["C"]);
|
10379 | var _zipstruct_stat_mtime = (Module["_zipstruct_stat_mtime"] = asm["D"]);
|
10380 | var _zipstruct_error = (Module["_zipstruct_error"] = asm["E"]);
|
10381 | var _zipstruct_errorS = (Module["_zipstruct_errorS"] = asm["F"]);
|
10382 | var _zip_close = (Module["_zip_close"] = asm["G"]);
|
10383 | var _zip_dir_add = (Module["_zip_dir_add"] = asm["H"]);
|
10384 | var _zip_discard = (Module["_zip_discard"] = asm["I"]);
|
10385 | var _zip_error_init_with_code = (Module["_zip_error_init_with_code"] =
|
10386 | asm["J"]);
|
10387 | var _zip_get_error = (Module["_zip_get_error"] = asm["K"]);
|
10388 | var _zip_file_get_error = (Module["_zip_file_get_error"] = asm["L"]);
|
10389 | var _zip_error_strerror = (Module["_zip_error_strerror"] = asm["M"]);
|
10390 | var _zip_fclose = (Module["_zip_fclose"] = asm["N"]);
|
10391 | var _zip_file_add = (Module["_zip_file_add"] = asm["O"]);
|
10392 | var _zip_file_get_external_attributes = (Module[
|
10393 | "_zip_file_get_external_attributes"
|
10394 | ] = asm["P"]);
|
10395 | var _zip_file_set_external_attributes = (Module[
|
10396 | "_zip_file_set_external_attributes"
|
10397 | ] = asm["Q"]);
|
10398 | var _zip_file_set_mtime = (Module["_zip_file_set_mtime"] = asm["R"]);
|
10399 | var _zip_fopen = (Module["_zip_fopen"] = asm["S"]);
|
10400 | var _zip_fopen_index = (Module["_zip_fopen_index"] = asm["T"]);
|
10401 | var _zip_fread = (Module["_zip_fread"] = asm["U"]);
|
10402 | var _zip_get_name = (Module["_zip_get_name"] = asm["V"]);
|
10403 | var _zip_get_num_entries = (Module["_zip_get_num_entries"] = asm["W"]);
|
10404 | var _zip_name_locate = (Module["_zip_name_locate"] = asm["X"]);
|
10405 | var _zip_open = (Module["_zip_open"] = asm["Y"]);
|
10406 | var _zip_open_from_source = (Module["_zip_open_from_source"] = asm["Z"]);
|
10407 | var _zip_source_buffer = (Module["_zip_source_buffer"] = asm["_"]);
|
10408 | var _zip_source_buffer_create = (Module["_zip_source_buffer_create"] =
|
10409 | asm["$"]);
|
10410 | var _zip_source_free = (Module["_zip_source_free"] = asm["aa"]);
|
10411 | var _zip_source_set_mtime = (Module["_zip_source_set_mtime"] = asm["ba"]);
|
10412 | var _zip_stat = (Module["_zip_stat"] = asm["ca"]);
|
10413 | var _zip_stat_index = (Module["_zip_stat_index"] = asm["da"]);
|
10414 | var ___errno_location = (Module["___errno_location"] = asm["ea"]);
|
10415 | var __get_tzname = (Module["__get_tzname"] = asm["fa"]);
|
10416 | var __get_daylight = (Module["__get_daylight"] = asm["ga"]);
|
10417 | var __get_timezone = (Module["__get_timezone"] = asm["ha"]);
|
10418 | var _malloc = (Module["_malloc"] = asm["ia"]);
|
10419 | var _free = (Module["_free"] = asm["ja"]);
|
10420 | var stackSave = (Module["stackSave"] = asm["ka"]);
|
10421 | var stackAlloc = (Module["stackAlloc"] = asm["la"]);
|
10422 | var stackRestore = (Module["stackRestore"] = asm["ma"]);
|
10423 | var dynCall_vi = (Module["dynCall_vi"] = asm["na"]);
|
10424 | Module["asm"] = asm;
|
10425 | Module["cwrap"] = cwrap;
|
10426 | Module["getValue"] = getValue;
|
10427 | var calledRun;
|
10428 | function ExitStatus(status) {
|
10429 | this.name = "ExitStatus";
|
10430 | this.message = "Program terminated with exit(" + status + ")";
|
10431 | this.status = status;
|
10432 | }
|
10433 | dependenciesFulfilled = function runCaller() {
|
10434 | if (!calledRun) run();
|
10435 | if (!calledRun) dependenciesFulfilled = runCaller;
|
10436 | };
|
10437 | function run(args) {
|
10438 | args = args || arguments_;
|
10439 | if (runDependencies > 0) {
|
10440 | return;
|
10441 | }
|
10442 | preRun();
|
10443 | if (runDependencies > 0) return;
|
10444 | function doRun() {
|
10445 | if (calledRun) return;
|
10446 | calledRun = true;
|
10447 | if (ABORT) return;
|
10448 | initRuntime();
|
10449 | preMain();
|
10450 | if (Module["onRuntimeInitialized"]) Module["onRuntimeInitialized"]();
|
10451 | postRun();
|
10452 | }
|
10453 | if (Module["setStatus"]) {
|
10454 | Module["setStatus"]("Running...");
|
10455 | setTimeout(function() {
|
10456 | setTimeout(function() {
|
10457 | Module["setStatus"]("");
|
10458 | }, 1);
|
10459 | doRun();
|
10460 | }, 1);
|
10461 | } else {
|
10462 | doRun();
|
10463 | }
|
10464 | }
|
10465 | Module["run"] = run;
|
10466 | if (Module["preInit"]) {
|
10467 | if (typeof Module["preInit"] == "function")
|
10468 | Module["preInit"] = [Module["preInit"]];
|
10469 | while (Module["preInit"].length > 0) {
|
10470 | Module["preInit"].pop()();
|
10471 | }
|
10472 | }
|
10473 | noExitRuntime = true;
|
10474 | run();
|
10475 |
|
10476 |
|
10477 | }),
|
10478 |
|
10479 | (function(module, exports) {
|
10480 |
|
10481 | module.exports = require("crypto");
|
10482 |
|
10483 | }),
|
10484 |
|
10485 | (function(module, exports) {
|
10486 |
|
10487 | module.exports = require("string_decoder");
|
10488 |
|
10489 | }),
|
10490 |
|
10491 | (function(module, exports, __webpack_require__) {
|
10492 |
|
10493 | "use strict";
|
10494 |
|
10495 |
|
10496 | var __rest = this && this.__rest || function (s, e) {
|
10497 | var t = {};
|
10498 |
|
10499 | for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
|
10500 |
|
10501 | if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
10502 | if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
|
10503 | }
|
10504 | return t;
|
10505 | };
|
10506 |
|
10507 | var __importDefault = this && this.__importDefault || function (mod) {
|
10508 | return mod && mod.__esModule ? mod : {
|
10509 | "default": mod
|
10510 | };
|
10511 | };
|
10512 |
|
10513 | Object.defineProperty(exports, "__esModule", {
|
10514 | value: true
|
10515 | });
|
10516 |
|
10517 | const fslib_1 = __webpack_require__(5);
|
10518 |
|
10519 | const fs_1 = __importDefault(__webpack_require__(2));
|
10520 |
|
10521 | const module_1 = __webpack_require__(6);
|
10522 |
|
10523 | const url_1 = __webpack_require__(30);
|
10524 |
|
10525 | const internalTools_1 = __webpack_require__(11);
|
10526 |
|
10527 | function applyPatch(pnpapi, opts) {
|
10528 |
|
10529 | const builtinModules = new Set(module_1.Module.builtinModules || Object.keys(process.binding('natives')));
|
10530 | |
10531 |
|
10532 |
|
10533 |
|
10534 | const defaultCache = {};
|
10535 | |
10536 |
|
10537 |
|
10538 |
|
10539 |
|
10540 | let enableNativeHooks = true;
|
10541 |
|
10542 | process.versions.pnp = String(pnpapi.VERSIONS.std);
|
10543 |
|
10544 | const moduleExports = __webpack_require__(6);
|
10545 |
|
10546 |
|
10547 | moduleExports.findPnpApi = lookupSource => {
|
10548 | const lookupPath = lookupSource instanceof url_1.URL ? url_1.fileURLToPath(lookupSource) : lookupSource;
|
10549 | const apiPath = opts.manager.findApiPathFor(lookupPath);
|
10550 | if (apiPath === null) return null;
|
10551 | const apiEntry = opts.manager.getApiEntry(apiPath, true);
|
10552 | return apiEntry.instance;
|
10553 | };
|
10554 |
|
10555 | function getRequireStack(parent) {
|
10556 | const requireStack = [];
|
10557 |
|
10558 | for (let cursor = parent; cursor; cursor = cursor.parent) requireStack.push(cursor.filename || cursor.id);
|
10559 |
|
10560 | return requireStack;
|
10561 | }
|
10562 |
|
10563 |
|
10564 |
|
10565 |
|
10566 |
|
10567 |
|
10568 | const originalModuleLoad = module_1.Module._load;
|
10569 |
|
10570 | module_1.Module._load = function (request, parent, isMain) {
|
10571 | if (!enableNativeHooks) return originalModuleLoad.call(module_1.Module, request, parent, isMain);
|
10572 |
|
10573 | if (builtinModules.has(request)) {
|
10574 | try {
|
10575 | enableNativeHooks = false;
|
10576 | return originalModuleLoad.call(module_1.Module, request, parent, isMain);
|
10577 | } finally {
|
10578 | enableNativeHooks = true;
|
10579 | }
|
10580 | }
|
10581 |
|
10582 | const parentApiPath = opts.manager.getApiPathFromParent(parent);
|
10583 | const parentApi = parentApiPath !== null ? opts.manager.getApiEntry(parentApiPath, true).instance : null;
|
10584 |
|
10585 |
|
10586 |
|
10587 | if (parentApi === null) return originalModuleLoad(request, parent, isMain);
|
10588 |
|
10589 |
|
10590 | if (request === `pnpapi`) return parentApi;
|
10591 |
|
10592 |
|
10593 | const modulePath = module_1.Module._resolveFilename(request, parent, isMain);
|
10594 |
|
10595 |
|
10596 |
|
10597 |
|
10598 | const isOwnedByRuntime = parentApi !== null ? parentApi.findPackageLocator(modulePath) !== null : false;
|
10599 | const moduleApiPath = isOwnedByRuntime ? parentApiPath : opts.manager.findApiPathFor(fslib_1.npath.dirname(modulePath));
|
10600 | const entry = moduleApiPath !== null ? opts.manager.getApiEntry(moduleApiPath) : {
|
10601 | instance: null,
|
10602 | cache: defaultCache
|
10603 | };
|
10604 |
|
10605 | const cacheEntry = entry.cache[modulePath];
|
10606 | if (cacheEntry) return cacheEntry.exports;
|
10607 |
|
10608 |
|
10609 | const module = new module_1.Module(modulePath, parent);
|
10610 | module.pnpApiPath = moduleApiPath;
|
10611 | entry.cache[modulePath] = module;
|
10612 |
|
10613 | if (isMain) {
|
10614 |
|
10615 | process.mainModule = module;
|
10616 | module.id = '.';
|
10617 | }
|
10618 |
|
10619 |
|
10620 | let hasThrown = true;
|
10621 |
|
10622 | try {
|
10623 | module.load(modulePath);
|
10624 | hasThrown = false;
|
10625 | } finally {
|
10626 | if (hasThrown) {
|
10627 | delete module_1.Module._cache[modulePath];
|
10628 | }
|
10629 | }
|
10630 |
|
10631 | return module.exports;
|
10632 | };
|
10633 |
|
10634 | const originalModuleResolveFilename = module_1.Module._resolveFilename;
|
10635 |
|
10636 | module_1.Module._resolveFilename = function (request, parent, isMain, options) {
|
10637 | if (builtinModules.has(request)) return request;
|
10638 | if (!enableNativeHooks) return originalModuleResolveFilename.call(module_1.Module, request, parent, isMain, options);
|
10639 |
|
10640 | if (options && options.plugnplay === false) {
|
10641 | const {
|
10642 | plugnplay
|
10643 | } = options,
|
10644 | rest = __rest(options, ["plugnplay"]);
|
10645 |
|
10646 |
|
10647 |
|
10648 | const forwardedOptions = Object.keys(rest).length > 0 ? rest : undefined;
|
10649 |
|
10650 | try {
|
10651 | enableNativeHooks = false;
|
10652 | return originalModuleResolveFilename.call(module_1.Module, request, parent, isMain, forwardedOptions);
|
10653 | } finally {
|
10654 | enableNativeHooks = true;
|
10655 | }
|
10656 | }
|
10657 |
|
10658 |
|
10659 |
|
10660 | if (options) {
|
10661 | const optionNames = new Set(Object.keys(options));
|
10662 | optionNames.delete(`paths`);
|
10663 | optionNames.delete(`plugnplay`);
|
10664 |
|
10665 | if (optionNames.size > 0) {
|
10666 | throw internalTools_1.makeError(internalTools_1.ErrorCode.UNSUPPORTED, `Some options passed to require() aren't supported by PnP yet (${Array.from(optionNames).join(', ')})`);
|
10667 | }
|
10668 | }
|
10669 |
|
10670 | const getIssuerSpecsFromPaths = paths => {
|
10671 | return paths.map(path => ({
|
10672 | apiPath: opts.manager.findApiPathFor(path),
|
10673 | path: fslib_1.npath.toPortablePath(path),
|
10674 | module: null
|
10675 | }));
|
10676 | };
|
10677 |
|
10678 | const getIssuerSpecsFromModule = module => {
|
10679 | const issuer = internalTools_1.getIssuerModule(module);
|
10680 | const issuerPath = issuer !== null ? fslib_1.npath.dirname(issuer.filename) : process.cwd();
|
10681 | return [{
|
10682 | apiPath: opts.manager.getApiPathFromParent(issuer),
|
10683 | path: fslib_1.npath.toPortablePath(issuerPath),
|
10684 | module
|
10685 | }];
|
10686 | };
|
10687 |
|
10688 | const makeFakeParent = path => {
|
10689 | const fakeParent = new module_1.Module(``);
|
10690 | const fakeFilePath = fslib_1.ppath.join(path, `[file]`);
|
10691 | fakeParent.paths = module_1.Module._nodeModulePaths(fslib_1.npath.fromPortablePath(fakeFilePath));
|
10692 | return fakeParent;
|
10693 | };
|
10694 |
|
10695 | const issuerSpecs = options && options.paths ? getIssuerSpecsFromPaths(options.paths) : getIssuerSpecsFromModule(parent);
|
10696 | let firstError;
|
10697 |
|
10698 | for (const {
|
10699 | apiPath,
|
10700 | path,
|
10701 | module
|
10702 | } of issuerSpecs) {
|
10703 | let resolution;
|
10704 | const issuerApi = apiPath !== null ? opts.manager.getApiEntry(apiPath, true).instance : null;
|
10705 |
|
10706 | try {
|
10707 | if (issuerApi !== null) {
|
10708 | resolution = issuerApi.resolveRequest(request, `${path}/`);
|
10709 | } else {
|
10710 | resolution = originalModuleResolveFilename.call(module_1.Module, request, module || makeFakeParent(path), isMain);
|
10711 | }
|
10712 | } catch (error) {
|
10713 | firstError = firstError || error;
|
10714 | continue;
|
10715 | }
|
10716 |
|
10717 | if (resolution !== null) {
|
10718 | return resolution;
|
10719 | }
|
10720 | }
|
10721 |
|
10722 | const requireStack = getRequireStack(parent);
|
10723 | Object.defineProperty(firstError, `requireStack`, {
|
10724 | configurable: true,
|
10725 | writable: true,
|
10726 | enumerable: false,
|
10727 | value: requireStack
|
10728 | });
|
10729 | if (requireStack.length > 0) firstError.message += `\nRequire stack:\n- ${requireStack.join(`\n- `)}`;
|
10730 | throw firstError;
|
10731 | };
|
10732 |
|
10733 | const originalFindPath = module_1.Module._findPath;
|
10734 |
|
10735 | module_1.Module._findPath = function (request, paths, isMain) {
|
10736 | if (request === `pnpapi`) return false;
|
10737 | if (!enableNativeHooks) return originalFindPath.call(module_1.Module, request, paths, isMain);
|
10738 |
|
10739 | for (const path of paths || []) {
|
10740 | let resolution;
|
10741 |
|
10742 | try {
|
10743 | const pnpApiPath = opts.manager.findApiPathFor(path);
|
10744 |
|
10745 | if (pnpApiPath !== null) {
|
10746 | const api = opts.manager.getApiEntry(pnpApiPath, true).instance;
|
10747 | resolution = api.resolveRequest(request, path) || false;
|
10748 | } else {
|
10749 | resolution = originalFindPath.call(module_1.Module, request, [path], isMain);
|
10750 | }
|
10751 | } catch (error) {
|
10752 | continue;
|
10753 | }
|
10754 |
|
10755 | if (resolution) {
|
10756 | return resolution;
|
10757 | }
|
10758 | }
|
10759 |
|
10760 | return false;
|
10761 | };
|
10762 |
|
10763 | fslib_1.patchFs(fs_1.default, new fslib_1.PosixFS(opts.fakeFs));
|
10764 | }
|
10765 |
|
10766 | exports.applyPatch = applyPatch;
|
10767 | ;
|
10768 |
|
10769 | }),
|
10770 |
|
10771 | (function(module, exports) {
|
10772 |
|
10773 | module.exports = require("url");
|
10774 |
|
10775 | }),
|
10776 |
|
10777 | (function(module, exports, __webpack_require__) {
|
10778 |
|
10779 | "use strict";
|
10780 |
|
10781 |
|
10782 | Object.defineProperty(exports, "__esModule", {
|
10783 | value: true
|
10784 | });
|
10785 |
|
10786 | const fslib_1 = __webpack_require__(5);
|
10787 |
|
10788 | function hydrateRuntimeState(data, {
|
10789 | basePath
|
10790 | }) {
|
10791 | const portablePath = fslib_1.npath.toPortablePath(basePath);
|
10792 | const ignorePattern = data.ignorePatternData !== null ? new RegExp(data.ignorePatternData) : null;
|
10793 | const packageRegistry = new Map(data.packageRegistryData.map(([packageName, packageStoreData]) => {
|
10794 | return [packageName, new Map(packageStoreData.map(([packageReference, packageInformationData]) => {
|
10795 | return [packageReference, {
|
10796 | packageLocation: fslib_1.ppath.resolve(portablePath, packageInformationData.packageLocation),
|
10797 | packageDependencies: new Map(packageInformationData.packageDependencies),
|
10798 | packagePeers: new Set(packageInformationData.packagePeers),
|
10799 | linkType: packageInformationData.linkType,
|
10800 | discardFromLookup: packageInformationData.discardFromLookup || false
|
10801 | }];
|
10802 | }))];
|
10803 | }));
|
10804 | const packageLocatorsByLocations = new Map();
|
10805 | const packageLocationLengths = new Set();
|
10806 |
|
10807 | for (const [packageName, storeData] of data.packageRegistryData) {
|
10808 | for (const [packageReference, packageInformationData] of storeData) {
|
10809 | if (packageName === null !== (packageReference === null)) throw new Error(`Assertion failed: The name and reference should be null, or neither should`);
|
10810 | if (packageInformationData.discardFromLookup) continue;
|
10811 |
|
10812 | const packageLocator = {
|
10813 | name: packageName,
|
10814 | reference: packageReference
|
10815 | };
|
10816 | packageLocatorsByLocations.set(packageInformationData.packageLocation, packageLocator);
|
10817 | packageLocationLengths.add(packageInformationData.packageLocation.length);
|
10818 | }
|
10819 | }
|
10820 |
|
10821 | for (const location of data.locationBlacklistData) packageLocatorsByLocations.set(location, null);
|
10822 |
|
10823 | const fallbackExclusionList = new Map(data.fallbackExclusionList.map(([packageName, packageReferences]) => {
|
10824 | return [packageName, new Set(packageReferences)];
|
10825 | }));
|
10826 | const fallbackPool = new Map(data.fallbackPool);
|
10827 | const dependencyTreeRoots = data.dependencyTreeRoots;
|
10828 | const enableTopLevelFallback = data.enableTopLevelFallback;
|
10829 | return {
|
10830 | basePath: portablePath,
|
10831 | dependencyTreeRoots,
|
10832 | enableTopLevelFallback,
|
10833 | fallbackExclusionList,
|
10834 | fallbackPool,
|
10835 | ignorePattern,
|
10836 | packageLocationLengths: [...packageLocationLengths].sort((a, b) => b - a),
|
10837 | packageLocatorsByLocations,
|
10838 | packageRegistry
|
10839 | };
|
10840 | }
|
10841 |
|
10842 | exports.hydrateRuntimeState = hydrateRuntimeState;
|
10843 |
|
10844 | }),
|
10845 |
|
10846 | (function(module, exports, __webpack_require__) {
|
10847 |
|
10848 | "use strict";
|
10849 |
|
10850 |
|
10851 | Object.defineProperty(exports, "__esModule", {
|
10852 | value: true
|
10853 | });
|
10854 |
|
10855 | const fslib_1 = __webpack_require__(5);
|
10856 |
|
10857 | const fslib_2 = __webpack_require__(5);
|
10858 |
|
10859 | const module_1 = __webpack_require__(6);
|
10860 |
|
10861 | const internalTools_1 = __webpack_require__(11);
|
10862 |
|
10863 | function makeApi(runtimeState, opts) {
|
10864 | const alwaysWarnOnFallback = Number(process.env.PNP_ALWAYS_WARN_ON_FALLBACK) > 0;
|
10865 | const debugLevel = Number(process.env.PNP_DEBUG_LEVEL);
|
10866 |
|
10867 | const builtinModules = new Set(module_1.Module.builtinModules || Object.keys(process.binding('natives')));
|
10868 |
|
10869 | const pathRegExp = /^(?![a-zA-Z]:[\\\/]|\\\\|\.{0,2}(?:\/|$))((?:@[^\/]+\/)?[^\/]+)\/?(.*|)$/;
|
10870 |
|
10871 |
|
10872 | const isStrictRegExp = /^\.{0,2}\//;
|
10873 |
|
10874 | const isDirRegExp = /\/$/;
|
10875 |
|
10876 | const topLevelLocator = {
|
10877 | name: null,
|
10878 | reference: null
|
10879 | };
|
10880 |
|
10881 | const fallbackLocators = [];
|
10882 |
|
10883 | const emittedWarnings = new Set();
|
10884 | if (runtimeState.enableTopLevelFallback === true) fallbackLocators.push(topLevelLocator);
|
10885 |
|
10886 | if (opts.compatibilityMode !== false) {
|
10887 |
|
10888 |
|
10889 |
|
10890 |
|
10891 |
|
10892 |
|
10893 |
|
10894 |
|
10895 |
|
10896 |
|
10897 | for (const name of [`react-scripts`, `gatsby`]) {
|
10898 | const packageStore = runtimeState.packageRegistry.get(name);
|
10899 |
|
10900 | if (packageStore) {
|
10901 | for (const reference of packageStore.keys()) {
|
10902 | if (reference === null) {
|
10903 | throw new Error(`Assertion failed: This reference shouldn't be null`);
|
10904 | } else {
|
10905 | fallbackLocators.push({
|
10906 | name,
|
10907 | reference
|
10908 | });
|
10909 | }
|
10910 | }
|
10911 | }
|
10912 | }
|
10913 | }
|
10914 | |
10915 |
|
10916 |
|
10917 |
|
10918 |
|
10919 |
|
10920 | const {
|
10921 | ignorePattern,
|
10922 | packageRegistry,
|
10923 | packageLocatorsByLocations,
|
10924 | packageLocationLengths
|
10925 | } = runtimeState;
|
10926 | |
10927 |
|
10928 |
|
10929 |
|
10930 | function makeLogEntry(name, args) {
|
10931 | return {
|
10932 | fn: name,
|
10933 | args: args,
|
10934 | error: null,
|
10935 | result: null
|
10936 | };
|
10937 | }
|
10938 |
|
10939 | function maybeLog(name, fn) {
|
10940 | if (opts.allowDebug === false) return fn;
|
10941 |
|
10942 | if (Number.isFinite(debugLevel)) {
|
10943 | if (debugLevel >= 2) {
|
10944 | return (...args) => {
|
10945 | const logEntry = makeLogEntry(name, args);
|
10946 |
|
10947 | try {
|
10948 | return logEntry.result = fn(...args);
|
10949 | } catch (error) {
|
10950 | throw logEntry.error = error;
|
10951 | } finally {
|
10952 | console.trace(logEntry);
|
10953 | }
|
10954 | };
|
10955 | } else if (debugLevel >= 1) {
|
10956 | return (...args) => {
|
10957 | try {
|
10958 | return fn(...args);
|
10959 | } catch (error) {
|
10960 | const logEntry = makeLogEntry(name, args);
|
10961 | logEntry.error = error;
|
10962 | console.trace(logEntry);
|
10963 | throw error;
|
10964 | }
|
10965 | };
|
10966 | }
|
10967 | }
|
10968 |
|
10969 | return fn;
|
10970 | }
|
10971 | |
10972 |
|
10973 |
|
10974 |
|
10975 |
|
10976 | function getPackageInformationSafe(packageLocator) {
|
10977 | const packageInformation = getPackageInformation(packageLocator);
|
10978 |
|
10979 | if (!packageInformation) {
|
10980 | throw internalTools_1.makeError(internalTools_1.ErrorCode.INTERNAL, `Couldn't find a matching entry in the dependency tree for the specified parent (this is probably an internal error)`);
|
10981 | }
|
10982 |
|
10983 | return packageInformation;
|
10984 | }
|
10985 | |
10986 |
|
10987 |
|
10988 |
|
10989 |
|
10990 | function isDependencyTreeRoot(packageLocator) {
|
10991 | if (packageLocator.name === null) return true;
|
10992 |
|
10993 | for (const dependencyTreeRoot of runtimeState.dependencyTreeRoots) if (dependencyTreeRoot.name === packageLocator.name && dependencyTreeRoot.reference === packageLocator.reference) return true;
|
10994 |
|
10995 | return false;
|
10996 | }
|
10997 | |
10998 |
|
10999 |
|
11000 |
|
11001 |
|
11002 | function applyNodeExtensionResolution(unqualifiedPath, candidates, {
|
11003 | extensions
|
11004 | }) {
|
11005 |
|
11006 | while (true) {
|
11007 | let stat;
|
11008 |
|
11009 | try {
|
11010 | candidates.push(unqualifiedPath);
|
11011 | stat = opts.fakeFs.statSync(unqualifiedPath);
|
11012 | } catch (error) {}
|
11013 |
|
11014 |
|
11015 | if (stat && !stat.isDirectory()) return opts.fakeFs.realpathSync(unqualifiedPath);
|
11016 |
|
11017 | if (stat && stat.isDirectory()) {
|
11018 | let pkgJson;
|
11019 |
|
11020 | try {
|
11021 | pkgJson = JSON.parse(opts.fakeFs.readFileSync(fslib_2.ppath.join(unqualifiedPath, fslib_2.toFilename(`package.json`)), `utf8`));
|
11022 | } catch (error) {}
|
11023 |
|
11024 | let nextUnqualifiedPath;
|
11025 | if (pkgJson && pkgJson.main) nextUnqualifiedPath = fslib_2.ppath.resolve(unqualifiedPath, pkgJson.main);
|
11026 |
|
11027 | if (nextUnqualifiedPath && nextUnqualifiedPath !== unqualifiedPath) {
|
11028 | const resolution = applyNodeExtensionResolution(nextUnqualifiedPath, candidates, {
|
11029 | extensions
|
11030 | });
|
11031 |
|
11032 | if (resolution !== null) {
|
11033 | return resolution;
|
11034 | }
|
11035 | }
|
11036 | }
|
11037 |
|
11038 |
|
11039 | const qualifiedPath = extensions.map(extension => {
|
11040 | return `${unqualifiedPath}${extension}`;
|
11041 | }).find(candidateFile => {
|
11042 | candidates.push(candidateFile);
|
11043 | return opts.fakeFs.existsSync(candidateFile);
|
11044 | });
|
11045 | if (qualifiedPath) return qualifiedPath;
|
11046 |
|
11047 | if (stat && stat.isDirectory()) {
|
11048 | const indexPath = extensions.map(extension => {
|
11049 | return fslib_2.ppath.format({
|
11050 | dir: unqualifiedPath,
|
11051 | name: fslib_2.toFilename(`index`),
|
11052 | ext: extension
|
11053 | });
|
11054 | }).find(candidateFile => {
|
11055 | candidates.push(candidateFile);
|
11056 | return opts.fakeFs.existsSync(candidateFile);
|
11057 | });
|
11058 |
|
11059 | if (indexPath) {
|
11060 | return indexPath;
|
11061 | }
|
11062 | }
|
11063 |
|
11064 |
|
11065 | return null;
|
11066 | }
|
11067 | }
|
11068 | |
11069 |
|
11070 |
|
11071 |
|
11072 |
|
11073 |
|
11074 |
|
11075 |
|
11076 |
|
11077 |
|
11078 | function makeFakeModule(path) {
|
11079 |
|
11080 | const fakeModule = new module_1.Module(path, null);
|
11081 | fakeModule.filename = path;
|
11082 | fakeModule.paths = module_1.Module._nodeModulePaths(path);
|
11083 | return fakeModule;
|
11084 | }
|
11085 | |
11086 |
|
11087 |
|
11088 |
|
11089 |
|
11090 | function normalizePath(p) {
|
11091 | return fslib_1.npath.toPortablePath(p);
|
11092 | }
|
11093 | |
11094 |
|
11095 |
|
11096 |
|
11097 |
|
11098 | function callNativeResolution(request, issuer) {
|
11099 | if (issuer.endsWith(`/`)) issuer = fslib_2.ppath.join(issuer, fslib_2.toFilename(`internal.js`));
|
11100 |
|
11101 |
|
11102 |
|
11103 |
|
11104 | return module_1.Module._resolveFilename(request, makeFakeModule(fslib_1.npath.fromPortablePath(issuer)), false, {
|
11105 | plugnplay: false
|
11106 | });
|
11107 | }
|
11108 | |
11109 |
|
11110 |
|
11111 |
|
11112 |
|
11113 | function isPathIgnored(path) {
|
11114 | if (ignorePattern === null) return false;
|
11115 | const subPath = fslib_2.ppath.contains(runtimeState.basePath, path);
|
11116 | if (subPath === null) return false;
|
11117 |
|
11118 | if (ignorePattern.test(subPath.replace(/\/$/, ``))) {
|
11119 | return true;
|
11120 | } else {
|
11121 | return false;
|
11122 | }
|
11123 | }
|
11124 | |
11125 |
|
11126 |
|
11127 |
|
11128 |
|
11129 |
|
11130 |
|
11131 |
|
11132 |
|
11133 |
|
11134 | const VERSIONS = {
|
11135 | std: 3,
|
11136 | resolveVirtual: 1
|
11137 | };
|
11138 | |
11139 |
|
11140 |
|
11141 |
|
11142 | const topLevel = topLevelLocator;
|
11143 | |
11144 |
|
11145 |
|
11146 |
|
11147 | function getPackageInformation({
|
11148 | name,
|
11149 | reference
|
11150 | }) {
|
11151 | const packageInformationStore = packageRegistry.get(name);
|
11152 | if (!packageInformationStore) return null;
|
11153 | const packageInformation = packageInformationStore.get(reference);
|
11154 | if (!packageInformation) return null;
|
11155 | return packageInformation;
|
11156 | }
|
11157 | |
11158 |
|
11159 |
|
11160 |
|
11161 |
|
11162 | function findPackageLocator(location) {
|
11163 | let relativeLocation = normalizePath(fslib_2.ppath.relative(runtimeState.basePath, location));
|
11164 | if (!relativeLocation.match(isStrictRegExp)) relativeLocation = `./${relativeLocation}`;
|
11165 | if (location.match(isDirRegExp) && !relativeLocation.endsWith(`/`)) relativeLocation = `${relativeLocation}/`;
|
11166 | let from = 0;
|
11167 |
|
11168 | while (from < packageLocationLengths.length && packageLocationLengths[from] > relativeLocation.length) from += 1;
|
11169 |
|
11170 | for (let t = from; t < packageLocationLengths.length; ++t) {
|
11171 | const locator = packageLocatorsByLocations.get(relativeLocation.substr(0, packageLocationLengths[t]));
|
11172 | if (typeof locator === `undefined`) continue;
|
11173 |
|
11174 |
|
11175 |
|
11176 |
|
11177 |
|
11178 |
|
11179 |
|
11180 |
|
11181 |
|
11182 |
|
11183 |
|
11184 |
|
11185 |
|
11186 |
|
11187 |
|
11188 | if (locator === null) {
|
11189 | throw internalTools_1.makeError(internalTools_1.ErrorCode.BLACKLISTED, `A forbidden path has been used in the package resolution process - this is usually caused by one of your tools calling 'fs.realpath' on the return value of 'require.resolve'. Since we need to use symlinks to simultaneously provide valid filesystem paths and disambiguate peer dependencies, they must be passed untransformed to 'require'.\n\nForbidden path: ${location}`, {
|
11190 | location
|
11191 | });
|
11192 | }
|
11193 |
|
11194 | return locator;
|
11195 | }
|
11196 |
|
11197 | return null;
|
11198 | }
|
11199 | |
11200 |
|
11201 |
|
11202 |
|
11203 |
|
11204 |
|
11205 |
|
11206 |
|
11207 |
|
11208 |
|
11209 |
|
11210 |
|
11211 |
|
11212 | function resolveToUnqualified(request, issuer, {
|
11213 | considerBuiltins = true
|
11214 | } = {}) {
|
11215 |
|
11216 | if (request === `pnpapi`) return fslib_1.npath.toPortablePath(opts.pnpapiResolution);
|
11217 |
|
11218 | if (considerBuiltins && builtinModules.has(request)) return null;
|
11219 |
|
11220 |
|
11221 |
|
11222 |
|
11223 |
|
11224 | if (issuer && isPathIgnored(issuer)) {
|
11225 |
|
11226 |
|
11227 |
|
11228 |
|
11229 |
|
11230 | if (!fslib_2.ppath.isAbsolute(request) || findPackageLocator(request) === null) {
|
11231 | const result = callNativeResolution(request, issuer);
|
11232 |
|
11233 | if (result === false) {
|
11234 | throw internalTools_1.makeError(internalTools_1.ErrorCode.BUILTIN_NODE_RESOLUTION_FAILED, `The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer was explicitely ignored by the regexp)\n\nRequire request: "${request}"\nRequired by: ${issuer}\n`, {
|
11235 | request,
|
11236 | issuer
|
11237 | });
|
11238 | }
|
11239 |
|
11240 | return fslib_1.npath.toPortablePath(result);
|
11241 | }
|
11242 | }
|
11243 |
|
11244 | let unqualifiedPath;
|
11245 |
|
11246 | const dependencyNameMatch = request.match(pathRegExp);
|
11247 |
|
11248 | if (!dependencyNameMatch) {
|
11249 | if (fslib_2.ppath.isAbsolute(request)) {
|
11250 | unqualifiedPath = fslib_2.ppath.normalize(request);
|
11251 | } else {
|
11252 | if (!issuer) {
|
11253 | throw internalTools_1.makeError(internalTools_1.ErrorCode.API_ERROR, `The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute`, {
|
11254 | request,
|
11255 | issuer
|
11256 | });
|
11257 | }
|
11258 |
|
11259 | if (issuer.match(isDirRegExp)) {
|
11260 | unqualifiedPath = fslib_2.ppath.normalize(fslib_2.ppath.resolve(issuer, request));
|
11261 | } else {
|
11262 | unqualifiedPath = fslib_2.ppath.normalize(fslib_2.ppath.resolve(fslib_2.ppath.dirname(issuer), request));
|
11263 | }
|
11264 | }
|
11265 |
|
11266 |
|
11267 | findPackageLocator(unqualifiedPath);
|
11268 | }
|
11269 |
|
11270 | else {
|
11271 | if (!issuer) {
|
11272 | throw internalTools_1.makeError(internalTools_1.ErrorCode.API_ERROR, `The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute`, {
|
11273 | request,
|
11274 | issuer
|
11275 | });
|
11276 | }
|
11277 |
|
11278 | const [, dependencyName, subPath] = dependencyNameMatch;
|
11279 | const issuerLocator = findPackageLocator(issuer);
|
11280 |
|
11281 |
|
11282 | if (!issuerLocator) {
|
11283 | const result = callNativeResolution(request, issuer);
|
11284 |
|
11285 | if (result === false) {
|
11286 | throw internalTools_1.makeError(internalTools_1.ErrorCode.BUILTIN_NODE_RESOLUTION_FAILED, `The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer doesn't seem to be part of the Yarn-managed dependency tree).\n\nRequire path: "${request}"\nRequired by: ${issuer}\n`, {
|
11287 | request,
|
11288 | issuer
|
11289 | });
|
11290 | }
|
11291 |
|
11292 | return fslib_1.npath.toPortablePath(result);
|
11293 | }
|
11294 |
|
11295 | const issuerInformation = getPackageInformationSafe(issuerLocator);
|
11296 |
|
11297 | let dependencyReference = issuerInformation.packageDependencies.get(dependencyName);
|
11298 | let fallbackReference = null;
|
11299 |
|
11300 |
|
11301 |
|
11302 | if (typeof dependencyReference === `undefined`) {
|
11303 | if (issuerLocator.name !== null) {
|
11304 |
|
11305 |
|
11306 | const exclusionEntry = runtimeState.fallbackExclusionList.get(issuerLocator.name);
|
11307 | const canUseFallbacks = !exclusionEntry || !exclusionEntry.has(issuerLocator.reference);
|
11308 |
|
11309 | if (canUseFallbacks) {
|
11310 | for (let t = 0, T = fallbackLocators.length; t < T; ++t) {
|
11311 | const fallbackInformation = getPackageInformationSafe(fallbackLocators[t]);
|
11312 | const reference = fallbackInformation.packageDependencies.get(dependencyName);
|
11313 | if (reference == null) continue;
|
11314 | if (alwaysWarnOnFallback) fallbackReference = reference;else dependencyReference = reference;
|
11315 | break;
|
11316 | }
|
11317 |
|
11318 | if (typeof dependencyReference === `undefined` && fallbackReference === null) {
|
11319 | const reference = runtimeState.fallbackPool.get(dependencyName);
|
11320 |
|
11321 | if (reference != null) {
|
11322 | fallbackReference = reference;
|
11323 | }
|
11324 | }
|
11325 | }
|
11326 | }
|
11327 | }
|
11328 |
|
11329 |
|
11330 | let error = null;
|
11331 |
|
11332 | if (dependencyReference === null) {
|
11333 | if (isDependencyTreeRoot(issuerLocator)) {
|
11334 | error = internalTools_1.makeError(internalTools_1.ErrorCode.MISSING_PEER_DEPENDENCY, `Your application tried to access ${dependencyName} (a peer dependency); this isn't allowed as there is no ancestor to satisfy the requirement. Use a devDependency if needed.\n\nRequired package: ${dependencyName} (via "${request}")\nRequired by: ${issuer}\n`, {
|
11335 | request,
|
11336 | issuer,
|
11337 | dependencyName
|
11338 | });
|
11339 | } else {
|
11340 | error = internalTools_1.makeError(internalTools_1.ErrorCode.MISSING_PEER_DEPENDENCY, `${issuerLocator.name} tried to access ${dependencyName} (a peer dependency) but it isn't provided by its ancestors; this makes the require call ambiguous and unsound.\n\nRequired package: ${dependencyName} (via "${request}")\nRequired by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuer})\n`, {
|
11341 | request,
|
11342 | issuer,
|
11343 | issuerLocator: Object.assign({}, issuerLocator),
|
11344 | dependencyName
|
11345 | });
|
11346 | }
|
11347 | } else if (dependencyReference === undefined) {
|
11348 | if (isDependencyTreeRoot(issuerLocator)) {
|
11349 | error = internalTools_1.makeError(internalTools_1.ErrorCode.UNDECLARED_DEPENDENCY, `Your application tried to access ${dependencyName}, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound.\n\nRequired package: ${dependencyName} (via "${request}")\nRequired by: ${issuer}\n`, {
|
11350 | request,
|
11351 | issuer,
|
11352 | dependencyName
|
11353 | });
|
11354 | } else {
|
11355 | error = internalTools_1.makeError(internalTools_1.ErrorCode.UNDECLARED_DEPENDENCY, `${issuerLocator.name} tried to access ${dependencyName}, but it isn't declared in its dependencies; this makes the require call ambiguous and unsound.\n\nRequired package: ${dependencyName} (via "${request}")\nRequired by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuer})\n`, {
|
11356 | request,
|
11357 | issuer,
|
11358 | issuerLocator: Object.assign({}, issuerLocator),
|
11359 | dependencyName
|
11360 | });
|
11361 | }
|
11362 | }
|
11363 |
|
11364 | if (dependencyReference === null) throw error || new Error(`Assertion failed: Expected an error to have been set`);
|
11365 |
|
11366 | if (typeof dependencyReference === `undefined`) {
|
11367 | if (fallbackReference === null || error === null) throw error || new Error(`Assertion failed: Expected an error to have been set`);
|
11368 | dependencyReference = fallbackReference;
|
11369 | const message = error.message.replace(/\n.*/g, ``);
|
11370 | error.message = message;
|
11371 |
|
11372 | if (!emittedWarnings.has(message)) {
|
11373 | emittedWarnings.add(message);
|
11374 | process.emitWarning(error);
|
11375 | }
|
11376 | }
|
11377 |
|
11378 |
|
11379 | const dependencyLocator = Array.isArray(dependencyReference) ? {
|
11380 | name: dependencyReference[0],
|
11381 | reference: dependencyReference[1]
|
11382 | } : {
|
11383 | name: dependencyName,
|
11384 | reference: dependencyReference
|
11385 | };
|
11386 | const dependencyInformation = getPackageInformationSafe(dependencyLocator);
|
11387 |
|
11388 | if (!dependencyInformation.packageLocation) {
|
11389 | throw internalTools_1.makeError(internalTools_1.ErrorCode.MISSING_DEPENDENCY, `A dependency seems valid but didn't get installed for some reason. This might be caused by a partial install, such as dev vs prod.\n\nRequired package: ${dependencyLocator.name}@${dependencyLocator.reference} (via "${request}")\nRequired by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuer})\n`, {
|
11390 | request,
|
11391 | issuer,
|
11392 | dependencyLocator: Object.assign({}, dependencyLocator)
|
11393 | });
|
11394 | }
|
11395 |
|
11396 |
|
11397 | const dependencyLocation = fslib_2.ppath.resolve(runtimeState.basePath, dependencyInformation.packageLocation);
|
11398 |
|
11399 | if (subPath) {
|
11400 | unqualifiedPath = fslib_2.ppath.resolve(dependencyLocation, subPath);
|
11401 | } else {
|
11402 | unqualifiedPath = dependencyLocation;
|
11403 | }
|
11404 | }
|
11405 |
|
11406 | return fslib_2.ppath.normalize(unqualifiedPath);
|
11407 | }
|
11408 |
|
11409 | ;
|
11410 | |
11411 |
|
11412 |
|
11413 |
|
11414 |
|
11415 | function resolveUnqualified(unqualifiedPath, {
|
11416 | extensions = Object.keys(module_1.Module._extensions)
|
11417 | } = {}) {
|
11418 | const candidates = [];
|
11419 | const qualifiedPath = applyNodeExtensionResolution(unqualifiedPath, candidates, {
|
11420 | extensions
|
11421 | });
|
11422 |
|
11423 | if (qualifiedPath) {
|
11424 | return fslib_2.ppath.normalize(qualifiedPath);
|
11425 | } else {
|
11426 | throw internalTools_1.makeError(internalTools_1.ErrorCode.QUALIFIED_PATH_RESOLUTION_FAILED, `Qualified path resolution failed - none of the candidates can be found on the disk.\n\nSource path: ${unqualifiedPath}\n${candidates.map(candidate => `Rejected candidate: ${candidate}\n`).join(``)}`, {
|
11427 | unqualifiedPath
|
11428 | });
|
11429 | }
|
11430 | }
|
11431 |
|
11432 | ;
|
11433 | |
11434 |
|
11435 |
|
11436 |
|
11437 |
|
11438 |
|
11439 |
|
11440 |
|
11441 | function resolveRequest(request, issuer, {
|
11442 | considerBuiltins,
|
11443 | extensions
|
11444 | } = {}) {
|
11445 | let unqualifiedPath = resolveToUnqualified(request, issuer, {
|
11446 | considerBuiltins
|
11447 | });
|
11448 | if (unqualifiedPath === null) return null;
|
11449 |
|
11450 | try {
|
11451 | return resolveUnqualified(unqualifiedPath, {
|
11452 | extensions
|
11453 | });
|
11454 | } catch (resolutionError) {
|
11455 | if (resolutionError.pnpCode === 'QUALIFIED_PATH_RESOLUTION_FAILED') Object.assign(resolutionError.data, {
|
11456 | request,
|
11457 | issuer
|
11458 | });
|
11459 | throw resolutionError;
|
11460 | }
|
11461 | }
|
11462 |
|
11463 | ;
|
11464 |
|
11465 | function resolveVirtual(request) {
|
11466 | const normalized = fslib_2.ppath.normalize(request);
|
11467 | const resolved = fslib_1.VirtualFS.resolveVirtual(normalized);
|
11468 | return resolved !== normalized ? resolved : null;
|
11469 | }
|
11470 |
|
11471 | return {
|
11472 | VERSIONS,
|
11473 | topLevel,
|
11474 | getLocator: (name, referencish) => {
|
11475 | if (Array.isArray(referencish)) {
|
11476 | return {
|
11477 | name: referencish[0],
|
11478 | reference: referencish[1]
|
11479 | };
|
11480 | } else {
|
11481 | return {
|
11482 | name,
|
11483 | reference: referencish
|
11484 | };
|
11485 | }
|
11486 | },
|
11487 | getDependencyTreeRoots: () => {
|
11488 | return [...runtimeState.dependencyTreeRoots];
|
11489 | },
|
11490 | getPackageInformation: locator => {
|
11491 | const info = getPackageInformation(locator);
|
11492 | if (info === null) return null;
|
11493 | const packageLocation = fslib_1.npath.fromPortablePath(info.packageLocation);
|
11494 | const nativeInfo = Object.assign(Object.assign({}, info), {
|
11495 | packageLocation
|
11496 | });
|
11497 | return nativeInfo;
|
11498 | },
|
11499 | findPackageLocator: path => {
|
11500 | return findPackageLocator(fslib_1.npath.toPortablePath(path));
|
11501 | },
|
11502 | resolveToUnqualified: maybeLog(`resolveToUnqualified`, (request, issuer, opts) => {
|
11503 | const portableIssuer = issuer !== null ? fslib_1.npath.toPortablePath(issuer) : null;
|
11504 | const resolution = resolveToUnqualified(fslib_1.npath.toPortablePath(request), portableIssuer, opts);
|
11505 | if (resolution === null) return null;
|
11506 | return fslib_1.npath.fromPortablePath(resolution);
|
11507 | }),
|
11508 | resolveUnqualified: maybeLog(`resolveUnqualified`, (unqualifiedPath, opts) => {
|
11509 | return fslib_1.npath.fromPortablePath(resolveUnqualified(fslib_1.npath.toPortablePath(unqualifiedPath), opts));
|
11510 | }),
|
11511 | resolveRequest: maybeLog(`resolveRequest`, (request, issuer, opts) => {
|
11512 | const portableIssuer = issuer !== null ? fslib_1.npath.toPortablePath(issuer) : null;
|
11513 | const resolution = resolveRequest(fslib_1.npath.toPortablePath(request), portableIssuer, opts);
|
11514 | if (resolution === null) return null;
|
11515 | return fslib_1.npath.fromPortablePath(resolution);
|
11516 | }),
|
11517 | resolveVirtual: maybeLog(`resolveVirtual`, path => {
|
11518 | const result = resolveVirtual(fslib_1.npath.toPortablePath(path));
|
11519 |
|
11520 | if (result !== null) {
|
11521 | return fslib_1.npath.fromPortablePath(result);
|
11522 | } else {
|
11523 | return null;
|
11524 | }
|
11525 | })
|
11526 | };
|
11527 | }
|
11528 |
|
11529 | exports.makeApi = makeApi;
|
11530 |
|
11531 | }),
|
11532 |
|
11533 | (function(module, exports, __webpack_require__) {
|
11534 |
|
11535 | "use strict";
|
11536 |
|
11537 |
|
11538 | Object.defineProperty(exports, "__esModule", {
|
11539 | value: true
|
11540 | });
|
11541 |
|
11542 | const fslib_1 = __webpack_require__(5);
|
11543 |
|
11544 | const module_1 = __webpack_require__(6);
|
11545 |
|
11546 | function makeManager(pnpapi, opts) {
|
11547 | const initialApiPath = fslib_1.npath.toPortablePath(pnpapi.resolveToUnqualified(`pnpapi`, null));
|
11548 | const initialApiStats = opts.fakeFs.statSync(fslib_1.npath.toPortablePath(initialApiPath));
|
11549 | const apiMetadata = new Map([[initialApiPath, {
|
11550 | cache: module_1.Module._cache,
|
11551 | instance: pnpapi,
|
11552 | stats: initialApiStats
|
11553 | }]]);
|
11554 |
|
11555 | function loadApiInstance(pnpApiPath) {
|
11556 | const nativePath = fslib_1.npath.fromPortablePath(pnpApiPath);
|
11557 |
|
11558 | const module = new module_1.Module(nativePath, null);
|
11559 | module.load(nativePath);
|
11560 | return module.exports;
|
11561 | }
|
11562 |
|
11563 | function refreshApiEntry(pnpApiPath, apiEntry) {
|
11564 | const stats = opts.fakeFs.statSync(pnpApiPath);
|
11565 |
|
11566 | if (stats.mtime > apiEntry.stats.mtime) {
|
11567 | console.warn(`[Warning] The runtime detected new informations in a PnP file; reloading the API instance (${pnpApiPath})`);
|
11568 | apiEntry.instance = loadApiInstance(pnpApiPath);
|
11569 | apiEntry.stats = stats;
|
11570 | }
|
11571 | }
|
11572 |
|
11573 | function getApiEntry(pnpApiPath, refresh = false) {
|
11574 | let apiEntry = apiMetadata.get(pnpApiPath);
|
11575 |
|
11576 | if (typeof apiEntry !== `undefined`) {
|
11577 | if (refresh) {
|
11578 | refreshApiEntry(pnpApiPath, apiEntry);
|
11579 | }
|
11580 | } else {
|
11581 | apiMetadata.set(pnpApiPath, apiEntry = {
|
11582 | cache: {},
|
11583 | instance: loadApiInstance(pnpApiPath),
|
11584 | stats: opts.fakeFs.statSync(pnpApiPath)
|
11585 | });
|
11586 | }
|
11587 |
|
11588 | return apiEntry;
|
11589 | }
|
11590 |
|
11591 | function findApiPathFor(modulePath) {
|
11592 | let curr;
|
11593 | let next = fslib_1.npath.toPortablePath(modulePath);
|
11594 |
|
11595 | do {
|
11596 | curr = next;
|
11597 | const candidate = fslib_1.ppath.join(curr, `.pnp.js`);
|
11598 | if (fslib_1.xfs.existsSync(candidate) && fslib_1.xfs.statSync(candidate).isFile()) return candidate;
|
11599 | next = fslib_1.ppath.dirname(curr);
|
11600 | } while (curr !== fslib_1.PortablePath.root);
|
11601 |
|
11602 | return null;
|
11603 | }
|
11604 |
|
11605 | function getApiPathFromParent(parent) {
|
11606 | if (parent == null) return initialApiPath;
|
11607 |
|
11608 | if (typeof parent.pnpApiPath === `undefined`) {
|
11609 | if (parent.filename !== null) {
|
11610 | return findApiPathFor(parent.filename);
|
11611 | } else {
|
11612 | return initialApiPath;
|
11613 | }
|
11614 | }
|
11615 |
|
11616 | if (parent.pnpApiPath !== null) return parent.pnpApiPath;
|
11617 | return null;
|
11618 | }
|
11619 |
|
11620 | return {
|
11621 | getApiPathFromParent,
|
11622 | findApiPathFor,
|
11623 | getApiEntry
|
11624 | };
|
11625 | }
|
11626 |
|
11627 | exports.makeManager = makeManager;
|
11628 |
|
11629 | })
|
11630 | ])["default"];
|
11631 | }); |
\ | No newline at end of file |