#!/usr/bin/env node /* eslint-disable */ // @ts-nocheck 'use strict' const RAW_RUNTIME_STATE = '{\ "__info": [\ "This file is automatically generated. Do not touch it, or risk",\ "your modifications being lost."\ ],\ "dependencyTreeRoots": [\ {\ "name": "muffinbot",\ "reference": "workspace:."\ }\ ],\ "enableTopLevelFallback": true,\ "ignorePatternData": "(^(?:\\\\.yarn\\\\/sdks(?:\\\\/(?!\\\\.{1,2}(?:\\\\/|$))(?:(?:(?!(?:^|\\\\/)\\\\.{1,2}(?:\\\\/|$)).)*?)|$))$)",\ "fallbackExclusionList": [\ ["muffinbot", ["workspace:."]]\ ],\ "fallbackPool": [\ ],\ "packageRegistryData": [\ [null, [\ [null, {\ "packageLocation": "./",\ "packageDependencies": [\ ["@migan/prettier-config", "virtual:df417fa6ed58592061b3cdd25305c567cb83e355f566a3f712cecb8d4e6c4814c3ed842a030a9c3a51e2de30e93ecf82143ea19accc29756c7a7ac08166c7416#npm:1.0.0"],\ ["@types/node", "npm:20.12.13"],\ ["cross-env", "npm:7.0.3"],\ ["discord.js", "npm:14.15.2"],\ ["dokdo", "virtual:df417fa6ed58592061b3cdd25305c567cb83e355f566a3f712cecb8d4e6c4814c3ed842a030a9c3a51e2de30e93ecf82143ea19accc29756c7a7ac08166c7416#npm:0.6.2"],\ ["mysql2", "npm:3.9.9"],\ ["prettier", "npm:3.2.5"],\ ["ts-node", "virtual:df417fa6ed58592061b3cdd25305c567cb83e355f566a3f712cecb8d4e6c4814c3ed842a030a9c3a51e2de30e93ecf82143ea19accc29756c7a7ac08166c7416#npm:10.9.2"],\ ["tsup", "virtual:df417fa6ed58592061b3cdd25305c567cb83e355f566a3f712cecb8d4e6c4814c3ed842a030a9c3a51e2de30e93ecf82143ea19accc29756c7a7ac08166c7416#npm:8.0.2"],\ ["typescript", "patch:typescript@npm%3A5.4.5#optional!builtin::version=5.4.5&hash=5adc0c"]\ ],\ "linkType": "SOFT"\ }]\ ]],\ ["@cspotcode/source-map-support", [\ ["npm:0.8.1", {\ "packageLocation": "./.yarn/cache/@cspotcode-source-map-support-npm-0.8.1-964f2de99d-b6e38a1712.zip/node_modules/@cspotcode/source-map-support/",\ "packageDependencies": [\ ["@cspotcode/source-map-support", "npm:0.8.1"],\ ["@jridgewell/trace-mapping", "npm:0.3.9"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@discordjs/builders", [\ ["npm:1.8.1", {\ "packageLocation": "./.yarn/cache/@discordjs-builders-npm-1.8.1-d7366e8d68-5540939f5e.zip/node_modules/@discordjs/builders/",\ "packageDependencies": [\ ["@discordjs/builders", "npm:1.8.1"],\ ["@discordjs/formatters", "npm:0.4.0"],\ ["@discordjs/util", "npm:1.1.0"],\ ["@sapphire/shapeshift", "npm:3.9.7"],\ ["discord-api-types", "npm:0.37.83"],\ ["fast-deep-equal", "npm:3.1.3"],\ ["ts-mixer", "npm:6.0.4"],\ ["tslib", "npm:2.6.2"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@discordjs/collection", [\ ["npm:1.5.3", {\ "packageLocation": "./.yarn/cache/@discordjs-collection-npm-1.5.3-ea9e0ca74b-770d057661.zip/node_modules/@discordjs/collection/",\ "packageDependencies": [\ ["@discordjs/collection", "npm:1.5.3"]\ ],\ "linkType": "HARD"\ }],\ ["npm:2.1.0", {\ "packageLocation": "./.yarn/cache/@discordjs-collection-npm-2.1.0-4303223bdc-386b508a0e.zip/node_modules/@discordjs/collection/",\ "packageDependencies": [\ ["@discordjs/collection", "npm:2.1.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@discordjs/formatters", [\ ["npm:0.4.0", {\ "packageLocation": "./.yarn/cache/@discordjs-formatters-npm-0.4.0-8330da5fdd-dbc75cf104.zip/node_modules/@discordjs/formatters/",\ "packageDependencies": [\ ["@discordjs/formatters", "npm:0.4.0"],\ ["discord-api-types", "npm:0.37.83"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@discordjs/rest", [\ ["npm:2.3.0", {\ "packageLocation": "./.yarn/cache/@discordjs-rest-npm-2.3.0-8ca5e9d236-55932ed312.zip/node_modules/@discordjs/rest/",\ "packageDependencies": [\ ["@discordjs/rest", "npm:2.3.0"],\ ["@discordjs/collection", "npm:2.1.0"],\ ["@discordjs/util", "npm:1.1.0"],\ ["@sapphire/async-queue", "npm:1.5.2"],\ ["@sapphire/snowflake", "npm:3.5.3"],\ ["@vladfrangu/async_event_emitter", "npm:2.2.4"],\ ["discord-api-types", "npm:0.37.83"],\ ["magic-bytes.js", "npm:1.10.0"],\ ["tslib", "npm:2.6.2"],\ ["undici", "npm:6.13.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@discordjs/util", [\ ["npm:1.1.0", {\ "packageLocation": "./.yarn/cache/@discordjs-util-npm-1.1.0-508dbc4aa9-ce76daa238.zip/node_modules/@discordjs/util/",\ "packageDependencies": [\ ["@discordjs/util", "npm:1.1.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@discordjs/ws", [\ ["npm:1.1.0", {\ "packageLocation": "./.yarn/cache/@discordjs-ws-npm-1.1.0-47c747948f-d22b6b82ac.zip/node_modules/@discordjs/ws/",\ "packageDependencies": [\ ["@discordjs/ws", "npm:1.1.0"],\ ["@discordjs/collection", "npm:2.1.0"],\ ["@discordjs/rest", "npm:2.3.0"],\ ["@discordjs/util", "npm:1.1.0"],\ ["@sapphire/async-queue", "npm:1.5.2"],\ ["@types/ws", "npm:8.5.10"],\ ["@vladfrangu/async_event_emitter", "npm:2.2.4"],\ ["discord-api-types", "npm:0.37.83"],\ ["tslib", "npm:2.6.2"],\ ["ws", "virtual:47c747948f96313da6c7946702cdba2c18a8685837a36a7287080e5f18f6fee4617eb50e817ea4ebda43cd84cdd254bdce732053a778d0bce2b95039ca131da1#npm:8.17.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@esbuild/aix-ppc64", [\ ["npm:0.19.12", {\ "packageLocation": "./.yarn/unplugged/@esbuild-aix-ppc64-npm-0.19.12-20acbc4c27/node_modules/@esbuild/aix-ppc64/",\ "packageDependencies": [\ ["@esbuild/aix-ppc64", "npm:0.19.12"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@esbuild/android-arm", [\ ["npm:0.19.12", {\ "packageLocation": "./.yarn/unplugged/@esbuild-android-arm-npm-0.19.12-007d87d00d/node_modules/@esbuild/android-arm/",\ "packageDependencies": [\ ["@esbuild/android-arm", "npm:0.19.12"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@esbuild/android-arm64", [\ ["npm:0.19.12", {\ "packageLocation": "./.yarn/unplugged/@esbuild-android-arm64-npm-0.19.12-639e34c5cb/node_modules/@esbuild/android-arm64/",\ "packageDependencies": [\ ["@esbuild/android-arm64", "npm:0.19.12"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@esbuild/android-x64", [\ ["npm:0.19.12", {\ "packageLocation": "./.yarn/unplugged/@esbuild-android-x64-npm-0.19.12-eb12dd0e96/node_modules/@esbuild/android-x64/",\ "packageDependencies": [\ ["@esbuild/android-x64", "npm:0.19.12"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@esbuild/darwin-arm64", [\ ["npm:0.19.12", {\ "packageLocation": "./.yarn/unplugged/@esbuild-darwin-arm64-npm-0.19.12-09699ac6cb/node_modules/@esbuild/darwin-arm64/",\ "packageDependencies": [\ ["@esbuild/darwin-arm64", "npm:0.19.12"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@esbuild/darwin-x64", [\ ["npm:0.19.12", {\ "packageLocation": "./.yarn/unplugged/@esbuild-darwin-x64-npm-0.19.12-b0a4fc6ed4/node_modules/@esbuild/darwin-x64/",\ "packageDependencies": [\ ["@esbuild/darwin-x64", "npm:0.19.12"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@esbuild/freebsd-arm64", [\ ["npm:0.19.12", {\ "packageLocation": "./.yarn/unplugged/@esbuild-freebsd-arm64-npm-0.19.12-72d17754c1/node_modules/@esbuild/freebsd-arm64/",\ "packageDependencies": [\ ["@esbuild/freebsd-arm64", "npm:0.19.12"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@esbuild/freebsd-x64", [\ ["npm:0.19.12", {\ "packageLocation": "./.yarn/unplugged/@esbuild-freebsd-x64-npm-0.19.12-205ae522fa/node_modules/@esbuild/freebsd-x64/",\ "packageDependencies": [\ ["@esbuild/freebsd-x64", "npm:0.19.12"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@esbuild/linux-arm", [\ ["npm:0.19.12", {\ "packageLocation": "./.yarn/unplugged/@esbuild-linux-arm-npm-0.19.12-7ca68cf68c/node_modules/@esbuild/linux-arm/",\ "packageDependencies": [\ ["@esbuild/linux-arm", "npm:0.19.12"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@esbuild/linux-arm64", [\ ["npm:0.19.12", {\ "packageLocation": "./.yarn/unplugged/@esbuild-linux-arm64-npm-0.19.12-8892c62251/node_modules/@esbuild/linux-arm64/",\ "packageDependencies": [\ ["@esbuild/linux-arm64", "npm:0.19.12"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@esbuild/linux-ia32", [\ ["npm:0.19.12", {\ "packageLocation": "./.yarn/unplugged/@esbuild-linux-ia32-npm-0.19.12-268f0311c2/node_modules/@esbuild/linux-ia32/",\ "packageDependencies": [\ ["@esbuild/linux-ia32", "npm:0.19.12"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@esbuild/linux-loong64", [\ ["npm:0.19.12", {\ "packageLocation": "./.yarn/unplugged/@esbuild-linux-loong64-npm-0.19.12-45095084a9/node_modules/@esbuild/linux-loong64/",\ "packageDependencies": [\ ["@esbuild/linux-loong64", "npm:0.19.12"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@esbuild/linux-mips64el", [\ ["npm:0.19.12", {\ "packageLocation": "./.yarn/unplugged/@esbuild-linux-mips64el-npm-0.19.12-c44a0dd39c/node_modules/@esbuild/linux-mips64el/",\ "packageDependencies": [\ ["@esbuild/linux-mips64el", "npm:0.19.12"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@esbuild/linux-ppc64", [\ ["npm:0.19.12", {\ "packageLocation": "./.yarn/unplugged/@esbuild-linux-ppc64-npm-0.19.12-cd007087a2/node_modules/@esbuild/linux-ppc64/",\ "packageDependencies": [\ ["@esbuild/linux-ppc64", "npm:0.19.12"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@esbuild/linux-riscv64", [\ ["npm:0.19.12", {\ "packageLocation": "./.yarn/unplugged/@esbuild-linux-riscv64-npm-0.19.12-0f130d0d2f/node_modules/@esbuild/linux-riscv64/",\ "packageDependencies": [\ ["@esbuild/linux-riscv64", "npm:0.19.12"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@esbuild/linux-s390x", [\ ["npm:0.19.12", {\ "packageLocation": "./.yarn/unplugged/@esbuild-linux-s390x-npm-0.19.12-037101307a/node_modules/@esbuild/linux-s390x/",\ "packageDependencies": [\ ["@esbuild/linux-s390x", "npm:0.19.12"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@esbuild/linux-x64", [\ ["npm:0.19.12", {\ "packageLocation": "./.yarn/unplugged/@esbuild-linux-x64-npm-0.19.12-59062fdb38/node_modules/@esbuild/linux-x64/",\ "packageDependencies": [\ ["@esbuild/linux-x64", "npm:0.19.12"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@esbuild/netbsd-x64", [\ ["npm:0.19.12", {\ "packageLocation": "./.yarn/unplugged/@esbuild-netbsd-x64-npm-0.19.12-1fdaf59d1d/node_modules/@esbuild/netbsd-x64/",\ "packageDependencies": [\ ["@esbuild/netbsd-x64", "npm:0.19.12"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@esbuild/openbsd-x64", [\ ["npm:0.19.12", {\ "packageLocation": "./.yarn/unplugged/@esbuild-openbsd-x64-npm-0.19.12-4624aab034/node_modules/@esbuild/openbsd-x64/",\ "packageDependencies": [\ ["@esbuild/openbsd-x64", "npm:0.19.12"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@esbuild/sunos-x64", [\ ["npm:0.19.12", {\ "packageLocation": "./.yarn/unplugged/@esbuild-sunos-x64-npm-0.19.12-66171c0024/node_modules/@esbuild/sunos-x64/",\ "packageDependencies": [\ ["@esbuild/sunos-x64", "npm:0.19.12"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@esbuild/win32-arm64", [\ ["npm:0.19.12", {\ "packageLocation": "./.yarn/unplugged/@esbuild-win32-arm64-npm-0.19.12-aecceea4ec/node_modules/@esbuild/win32-arm64/",\ "packageDependencies": [\ ["@esbuild/win32-arm64", "npm:0.19.12"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@esbuild/win32-ia32", [\ ["npm:0.19.12", {\ "packageLocation": "./.yarn/unplugged/@esbuild-win32-ia32-npm-0.19.12-0d6b37e2da/node_modules/@esbuild/win32-ia32/",\ "packageDependencies": [\ ["@esbuild/win32-ia32", "npm:0.19.12"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@esbuild/win32-x64", [\ ["npm:0.19.12", {\ "packageLocation": "./.yarn/unplugged/@esbuild-win32-x64-npm-0.19.12-1bf4cb5f20/node_modules/@esbuild/win32-x64/",\ "packageDependencies": [\ ["@esbuild/win32-x64", "npm:0.19.12"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@isaacs/cliui", [\ ["npm:8.0.2", {\ "packageLocation": "./.yarn/cache/@isaacs-cliui-npm-8.0.2-f4364666d5-e9ed5fd27c.zip/node_modules/@isaacs/cliui/",\ "packageDependencies": [\ ["@isaacs/cliui", "npm:8.0.2"],\ ["string-width", "npm:5.1.2"],\ ["string-width-cjs", [\ "string-width",\ "npm:4.2.3"\ ]],\ ["strip-ansi", "npm:7.1.0"],\ ["strip-ansi-cjs", [\ "strip-ansi",\ "npm:6.0.1"\ ]],\ ["wrap-ansi", "npm:8.1.0"],\ ["wrap-ansi-cjs", [\ "wrap-ansi",\ "npm:7.0.0"\ ]]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@jridgewell/gen-mapping", [\ ["npm:0.3.5", {\ "packageLocation": "./.yarn/cache/@jridgewell-gen-mapping-npm-0.3.5-d8b85ebeaf-81587b3c4d.zip/node_modules/@jridgewell/gen-mapping/",\ "packageDependencies": [\ ["@jridgewell/gen-mapping", "npm:0.3.5"],\ ["@jridgewell/set-array", "npm:1.2.1"],\ ["@jridgewell/sourcemap-codec", "npm:1.4.15"],\ ["@jridgewell/trace-mapping", "npm:0.3.25"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@jridgewell/resolve-uri", [\ ["npm:3.1.1", {\ "packageLocation": "./.yarn/cache/@jridgewell-resolve-uri-npm-3.1.1-aa2de3f210-64d59df8ae.zip/node_modules/@jridgewell/resolve-uri/",\ "packageDependencies": [\ ["@jridgewell/resolve-uri", "npm:3.1.1"]\ ],\ "linkType": "HARD"\ }],\ ["npm:3.1.2", {\ "packageLocation": "./.yarn/cache/@jridgewell-resolve-uri-npm-3.1.2-5bc4245992-97106439d7.zip/node_modules/@jridgewell/resolve-uri/",\ "packageDependencies": [\ ["@jridgewell/resolve-uri", "npm:3.1.2"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@jridgewell/set-array", [\ ["npm:1.2.1", {\ "packageLocation": "./.yarn/cache/@jridgewell-set-array-npm-1.2.1-2312928209-832e513a85.zip/node_modules/@jridgewell/set-array/",\ "packageDependencies": [\ ["@jridgewell/set-array", "npm:1.2.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@jridgewell/sourcemap-codec", [\ ["npm:1.4.15", {\ "packageLocation": "./.yarn/cache/@jridgewell-sourcemap-codec-npm-1.4.15-a055fb62cf-89960ac087.zip/node_modules/@jridgewell/sourcemap-codec/",\ "packageDependencies": [\ ["@jridgewell/sourcemap-codec", "npm:1.4.15"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@jridgewell/trace-mapping", [\ ["npm:0.3.25", {\ "packageLocation": "./.yarn/cache/@jridgewell-trace-mapping-npm-0.3.25-c076fd2279-dced32160a.zip/node_modules/@jridgewell/trace-mapping/",\ "packageDependencies": [\ ["@jridgewell/trace-mapping", "npm:0.3.25"],\ ["@jridgewell/resolve-uri", "npm:3.1.2"],\ ["@jridgewell/sourcemap-codec", "npm:1.4.15"]\ ],\ "linkType": "HARD"\ }],\ ["npm:0.3.9", {\ "packageLocation": "./.yarn/cache/@jridgewell-trace-mapping-npm-0.3.9-91625cd7fb-83deafb8e7.zip/node_modules/@jridgewell/trace-mapping/",\ "packageDependencies": [\ ["@jridgewell/trace-mapping", "npm:0.3.9"],\ ["@jridgewell/resolve-uri", "npm:3.1.1"],\ ["@jridgewell/sourcemap-codec", "npm:1.4.15"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@migan/prettier-config", [\ ["npm:1.0.0", {\ "packageLocation": "./.yarn/cache/@migan-prettier-config-npm-1.0.0-8b1ffadd91-fc4d797be4.zip/node_modules/@migan/prettier-config/",\ "packageDependencies": [\ ["@migan/prettier-config", "npm:1.0.0"]\ ],\ "linkType": "SOFT"\ }],\ ["virtual:df417fa6ed58592061b3cdd25305c567cb83e355f566a3f712cecb8d4e6c4814c3ed842a030a9c3a51e2de30e93ecf82143ea19accc29756c7a7ac08166c7416#npm:1.0.0", {\ "packageLocation": "./.yarn/__virtual__/@migan-prettier-config-virtual-95d5d63c96/0/cache/@migan-prettier-config-npm-1.0.0-8b1ffadd91-fc4d797be4.zip/node_modules/@migan/prettier-config/",\ "packageDependencies": [\ ["@migan/prettier-config", "virtual:df417fa6ed58592061b3cdd25305c567cb83e355f566a3f712cecb8d4e6c4814c3ed842a030a9c3a51e2de30e93ecf82143ea19accc29756c7a7ac08166c7416#npm:1.0.0"],\ ["@types/prettier", null],\ ["prettier", "npm:3.2.5"]\ ],\ "packagePeers": [\ "@types/prettier",\ "prettier"\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@nodelib/fs.scandir", [\ ["npm:2.1.5", {\ "packageLocation": "./.yarn/cache/@nodelib-fs.scandir-npm-2.1.5-89c67370dd-6ab2a9b8a1.zip/node_modules/@nodelib/fs.scandir/",\ "packageDependencies": [\ ["@nodelib/fs.scandir", "npm:2.1.5"],\ ["@nodelib/fs.stat", "npm:2.0.5"],\ ["run-parallel", "npm:1.2.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@nodelib/fs.stat", [\ ["npm:2.0.5", {\ "packageLocation": "./.yarn/cache/@nodelib-fs.stat-npm-2.0.5-01f4dd3030-012480b5ca.zip/node_modules/@nodelib/fs.stat/",\ "packageDependencies": [\ ["@nodelib/fs.stat", "npm:2.0.5"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@nodelib/fs.walk", [\ ["npm:1.2.8", {\ "packageLocation": "./.yarn/cache/@nodelib-fs.walk-npm-1.2.8-b4a89da548-40033e33e9.zip/node_modules/@nodelib/fs.walk/",\ "packageDependencies": [\ ["@nodelib/fs.walk", "npm:1.2.8"],\ ["@nodelib/fs.scandir", "npm:2.1.5"],\ ["fastq", "npm:1.17.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@npmcli/agent", [\ ["npm:2.2.2", {\ "packageLocation": "./.yarn/cache/@npmcli-agent-npm-2.2.2-e2f559d6c0-96fc0036b1.zip/node_modules/@npmcli/agent/",\ "packageDependencies": [\ ["@npmcli/agent", "npm:2.2.2"],\ ["agent-base", "npm:7.1.1"],\ ["http-proxy-agent", "npm:7.0.2"],\ ["https-proxy-agent", "npm:7.0.4"],\ ["lru-cache", "npm:10.2.2"],\ ["socks-proxy-agent", "npm:8.0.3"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@npmcli/fs", [\ ["npm:3.1.1", {\ "packageLocation": "./.yarn/cache/@npmcli-fs-npm-3.1.1-c19bd09f3c-1e0e040870.zip/node_modules/@npmcli/fs/",\ "packageDependencies": [\ ["@npmcli/fs", "npm:3.1.1"],\ ["semver", "npm:7.6.2"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@pkgjs/parseargs", [\ ["npm:0.11.0", {\ "packageLocation": "./.yarn/cache/@pkgjs-parseargs-npm-0.11.0-cd2a3fe948-115e8ceeec.zip/node_modules/@pkgjs/parseargs/",\ "packageDependencies": [\ ["@pkgjs/parseargs", "npm:0.11.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@rollup/rollup-android-arm-eabi", [\ ["npm:4.18.0", {\ "packageLocation": "./.yarn/unplugged/@rollup-rollup-android-arm-eabi-npm-4.18.0-7c3eaf7b14/node_modules/@rollup/rollup-android-arm-eabi/",\ "packageDependencies": [\ ["@rollup/rollup-android-arm-eabi", "npm:4.18.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@rollup/rollup-android-arm64", [\ ["npm:4.18.0", {\ "packageLocation": "./.yarn/unplugged/@rollup-rollup-android-arm64-npm-4.18.0-2096b5899c/node_modules/@rollup/rollup-android-arm64/",\ "packageDependencies": [\ ["@rollup/rollup-android-arm64", "npm:4.18.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@rollup/rollup-darwin-arm64", [\ ["npm:4.18.0", {\ "packageLocation": "./.yarn/unplugged/@rollup-rollup-darwin-arm64-npm-4.18.0-683829554f/node_modules/@rollup/rollup-darwin-arm64/",\ "packageDependencies": [\ ["@rollup/rollup-darwin-arm64", "npm:4.18.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@rollup/rollup-darwin-x64", [\ ["npm:4.18.0", {\ "packageLocation": "./.yarn/unplugged/@rollup-rollup-darwin-x64-npm-4.18.0-4f171ac978/node_modules/@rollup/rollup-darwin-x64/",\ "packageDependencies": [\ ["@rollup/rollup-darwin-x64", "npm:4.18.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@rollup/rollup-linux-arm-gnueabihf", [\ ["npm:4.18.0", {\ "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-arm-gnueabihf-npm-4.18.0-c6219e1c5b/node_modules/@rollup/rollup-linux-arm-gnueabihf/",\ "packageDependencies": [\ ["@rollup/rollup-linux-arm-gnueabihf", "npm:4.18.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@rollup/rollup-linux-arm-musleabihf", [\ ["npm:4.18.0", {\ "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-arm-musleabihf-npm-4.18.0-c8808b8078/node_modules/@rollup/rollup-linux-arm-musleabihf/",\ "packageDependencies": [\ ["@rollup/rollup-linux-arm-musleabihf", "npm:4.18.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@rollup/rollup-linux-arm64-gnu", [\ ["npm:4.18.0", {\ "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-arm64-gnu-npm-4.18.0-f633823e2b/node_modules/@rollup/rollup-linux-arm64-gnu/",\ "packageDependencies": [\ ["@rollup/rollup-linux-arm64-gnu", "npm:4.18.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@rollup/rollup-linux-arm64-musl", [\ ["npm:4.18.0", {\ "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-arm64-musl-npm-4.18.0-1c1f3a69a7/node_modules/@rollup/rollup-linux-arm64-musl/",\ "packageDependencies": [\ ["@rollup/rollup-linux-arm64-musl", "npm:4.18.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@rollup/rollup-linux-powerpc64le-gnu", [\ ["npm:4.18.0", {\ "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-powerpc64le-gnu-npm-4.18.0-2a02c87b15/node_modules/@rollup/rollup-linux-powerpc64le-gnu/",\ "packageDependencies": [\ ["@rollup/rollup-linux-powerpc64le-gnu", "npm:4.18.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@rollup/rollup-linux-riscv64-gnu", [\ ["npm:4.18.0", {\ "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-riscv64-gnu-npm-4.18.0-7ad72cd9b5/node_modules/@rollup/rollup-linux-riscv64-gnu/",\ "packageDependencies": [\ ["@rollup/rollup-linux-riscv64-gnu", "npm:4.18.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@rollup/rollup-linux-s390x-gnu", [\ ["npm:4.18.0", {\ "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-s390x-gnu-npm-4.18.0-71d51699ed/node_modules/@rollup/rollup-linux-s390x-gnu/",\ "packageDependencies": [\ ["@rollup/rollup-linux-s390x-gnu", "npm:4.18.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@rollup/rollup-linux-x64-gnu", [\ ["npm:4.18.0", {\ "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-x64-gnu-npm-4.18.0-0aa51442a0/node_modules/@rollup/rollup-linux-x64-gnu/",\ "packageDependencies": [\ ["@rollup/rollup-linux-x64-gnu", "npm:4.18.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@rollup/rollup-linux-x64-musl", [\ ["npm:4.18.0", {\ "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-x64-musl-npm-4.18.0-63d8cb53de/node_modules/@rollup/rollup-linux-x64-musl/",\ "packageDependencies": [\ ["@rollup/rollup-linux-x64-musl", "npm:4.18.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@rollup/rollup-win32-arm64-msvc", [\ ["npm:4.18.0", {\ "packageLocation": "./.yarn/unplugged/@rollup-rollup-win32-arm64-msvc-npm-4.18.0-39277b08a7/node_modules/@rollup/rollup-win32-arm64-msvc/",\ "packageDependencies": [\ ["@rollup/rollup-win32-arm64-msvc", "npm:4.18.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@rollup/rollup-win32-ia32-msvc", [\ ["npm:4.18.0", {\ "packageLocation": "./.yarn/unplugged/@rollup-rollup-win32-ia32-msvc-npm-4.18.0-0cfb95039c/node_modules/@rollup/rollup-win32-ia32-msvc/",\ "packageDependencies": [\ ["@rollup/rollup-win32-ia32-msvc", "npm:4.18.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@rollup/rollup-win32-x64-msvc", [\ ["npm:4.18.0", {\ "packageLocation": "./.yarn/unplugged/@rollup-rollup-win32-x64-msvc-npm-4.18.0-96494796f0/node_modules/@rollup/rollup-win32-x64-msvc/",\ "packageDependencies": [\ ["@rollup/rollup-win32-x64-msvc", "npm:4.18.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@sapphire/async-queue", [\ ["npm:1.5.2", {\ "packageLocation": "./.yarn/cache/@sapphire-async-queue-npm-1.5.2-ea45a21892-55e0785997.zip/node_modules/@sapphire/async-queue/",\ "packageDependencies": [\ ["@sapphire/async-queue", "npm:1.5.2"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@sapphire/shapeshift", [\ ["npm:3.9.7", {\ "packageLocation": "./.yarn/cache/@sapphire-shapeshift-npm-3.9.7-8f524c782d-f90f8e2592.zip/node_modules/@sapphire/shapeshift/",\ "packageDependencies": [\ ["@sapphire/shapeshift", "npm:3.9.7"],\ ["fast-deep-equal", "npm:3.1.3"],\ ["lodash", "npm:4.17.21"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@sapphire/snowflake", [\ ["npm:3.5.3", {\ "packageLocation": "./.yarn/cache/@sapphire-snowflake-npm-3.5.3-427ca2a4ee-f306626f76.zip/node_modules/@sapphire/snowflake/",\ "packageDependencies": [\ ["@sapphire/snowflake", "npm:3.5.3"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@tsconfig/node10", [\ ["npm:1.0.9", {\ "packageLocation": "./.yarn/cache/@tsconfig-node10-npm-1.0.9-f2e2d20feb-a33ae4dc2a.zip/node_modules/@tsconfig/node10/",\ "packageDependencies": [\ ["@tsconfig/node10", "npm:1.0.9"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@tsconfig/node12", [\ ["npm:1.0.11", {\ "packageLocation": "./.yarn/cache/@tsconfig-node12-npm-1.0.11-9710d1c61b-5ce29a41b1.zip/node_modules/@tsconfig/node12/",\ "packageDependencies": [\ ["@tsconfig/node12", "npm:1.0.11"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@tsconfig/node14", [\ ["npm:1.0.3", {\ "packageLocation": "./.yarn/cache/@tsconfig-node14-npm-1.0.3-15321421d2-19275fe80c.zip/node_modules/@tsconfig/node14/",\ "packageDependencies": [\ ["@tsconfig/node14", "npm:1.0.3"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@tsconfig/node16", [\ ["npm:1.0.4", {\ "packageLocation": "./.yarn/cache/@tsconfig-node16-npm-1.0.4-b7cb87d859-2023197859.zip/node_modules/@tsconfig/node16/",\ "packageDependencies": [\ ["@tsconfig/node16", "npm:1.0.4"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@types/estree", [\ ["npm:1.0.5", {\ "packageLocation": "./.yarn/cache/@types-estree-npm-1.0.5-5b7faed3b4-7de6d928dd.zip/node_modules/@types/estree/",\ "packageDependencies": [\ ["@types/estree", "npm:1.0.5"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@types/node", [\ ["npm:20.12.13", {\ "packageLocation": "./.yarn/cache/@types-node-npm-20.12.13-2b5576f45f-c9f02cfe34.zip/node_modules/@types/node/",\ "packageDependencies": [\ ["@types/node", "npm:20.12.13"],\ ["undici-types", "npm:5.26.5"]\ ],\ "linkType": "HARD"\ }],\ ["npm:20.6.3", {\ "packageLocation": "./.yarn/cache/@types-node-npm-20.6.3-7542470c42-2ccd82424c.zip/node_modules/@types/node/",\ "packageDependencies": [\ ["@types/node", "npm:20.6.3"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@types/ws", [\ ["npm:8.5.10", {\ "packageLocation": "./.yarn/cache/@types-ws-npm-8.5.10-a877a38f71-9b414dc5e0.zip/node_modules/@types/ws/",\ "packageDependencies": [\ ["@types/ws", "npm:8.5.10"],\ ["@types/node", "npm:20.6.3"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@vladfrangu/async_event_emitter", [\ ["npm:2.2.4", {\ "packageLocation": "./.yarn/cache/@vladfrangu-async_event_emitter-npm-2.2.4-0297e524e2-06de49380d.zip/node_modules/@vladfrangu/async_event_emitter/",\ "packageDependencies": [\ ["@vladfrangu/async_event_emitter", "npm:2.2.4"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["abbrev", [\ ["npm:2.0.0", {\ "packageLocation": "./.yarn/cache/abbrev-npm-2.0.0-0eb38a17e5-ca0a54e35b.zip/node_modules/abbrev/",\ "packageDependencies": [\ ["abbrev", "npm:2.0.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["acorn", [\ ["npm:8.10.0", {\ "packageLocation": "./.yarn/cache/acorn-npm-8.10.0-2230c9e83e-522310c20f.zip/node_modules/acorn/",\ "packageDependencies": [\ ["acorn", "npm:8.10.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["acorn-walk", [\ ["npm:8.2.0", {\ "packageLocation": "./.yarn/cache/acorn-walk-npm-8.2.0-2f2cac3177-e69f7234f2.zip/node_modules/acorn-walk/",\ "packageDependencies": [\ ["acorn-walk", "npm:8.2.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["agent-base", [\ ["npm:7.1.1", {\ "packageLocation": "./.yarn/cache/agent-base-npm-7.1.1-c9e1a4b59e-c478fec8f7.zip/node_modules/agent-base/",\ "packageDependencies": [\ ["agent-base", "npm:7.1.1"],\ ["debug", "virtual:c9e1a4b59e37cb479517edede3bf2093b28c0ca1a9d0e517f3c345075bd1e468980b94b4957e389116607ee7155441dfd7d09e19a4229d5d09bcf06244401590#npm:4.3.4"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["aggregate-error", [\ ["npm:3.1.0", {\ "packageLocation": "./.yarn/cache/aggregate-error-npm-3.1.0-415a406f4e-1101a33f21.zip/node_modules/aggregate-error/",\ "packageDependencies": [\ ["aggregate-error", "npm:3.1.0"],\ ["clean-stack", "npm:2.2.0"],\ ["indent-string", "npm:4.0.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["ansi-regex", [\ ["npm:5.0.1", {\ "packageLocation": "./.yarn/cache/ansi-regex-npm-5.0.1-c963a48615-2aa4bb54ca.zip/node_modules/ansi-regex/",\ "packageDependencies": [\ ["ansi-regex", "npm:5.0.1"]\ ],\ "linkType": "HARD"\ }],\ ["npm:6.0.1", {\ "packageLocation": "./.yarn/cache/ansi-regex-npm-6.0.1-8d663a607d-1ff8b7667c.zip/node_modules/ansi-regex/",\ "packageDependencies": [\ ["ansi-regex", "npm:6.0.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["ansi-styles", [\ ["npm:4.3.0", {\ "packageLocation": "./.yarn/cache/ansi-styles-npm-4.3.0-245c7d42c7-b4494dfbfc.zip/node_modules/ansi-styles/",\ "packageDependencies": [\ ["ansi-styles", "npm:4.3.0"],\ ["color-convert", "npm:2.0.1"]\ ],\ "linkType": "HARD"\ }],\ ["npm:6.2.1", {\ "packageLocation": "./.yarn/cache/ansi-styles-npm-6.2.1-d43647018c-70fdf883b7.zip/node_modules/ansi-styles/",\ "packageDependencies": [\ ["ansi-styles", "npm:6.2.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["any-promise", [\ ["npm:1.3.0", {\ "packageLocation": "./.yarn/cache/any-promise-npm-1.3.0-f34eeaa7e7-6737469ba3.zip/node_modules/any-promise/",\ "packageDependencies": [\ ["any-promise", "npm:1.3.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["anymatch", [\ ["npm:3.1.3", {\ "packageLocation": "./.yarn/cache/anymatch-npm-3.1.3-bc81d103b1-3e044fd6d1.zip/node_modules/anymatch/",\ "packageDependencies": [\ ["anymatch", "npm:3.1.3"],\ ["normalize-path", "npm:3.0.0"],\ ["picomatch", "npm:2.3.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["arg", [\ ["npm:4.1.3", {\ "packageLocation": "./.yarn/cache/arg-npm-4.1.3-1748b966a8-969b491082.zip/node_modules/arg/",\ "packageDependencies": [\ ["arg", "npm:4.1.3"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["array-union", [\ ["npm:2.1.0", {\ "packageLocation": "./.yarn/cache/array-union-npm-2.1.0-4e4852b221-5bee12395c.zip/node_modules/array-union/",\ "packageDependencies": [\ ["array-union", "npm:2.1.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["balanced-match", [\ ["npm:1.0.2", {\ "packageLocation": "./.yarn/cache/balanced-match-npm-1.0.2-a53c126459-9706c088a2.zip/node_modules/balanced-match/",\ "packageDependencies": [\ ["balanced-match", "npm:1.0.2"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["binary-extensions", [\ ["npm:2.3.0", {\ "packageLocation": "./.yarn/cache/binary-extensions-npm-2.3.0-bd3f20d865-bcad01494e.zip/node_modules/binary-extensions/",\ "packageDependencies": [\ ["binary-extensions", "npm:2.3.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["brace-expansion", [\ ["npm:2.0.1", {\ "packageLocation": "./.yarn/cache/brace-expansion-npm-2.0.1-17aa2616f9-a61e7cd2e8.zip/node_modules/brace-expansion/",\ "packageDependencies": [\ ["brace-expansion", "npm:2.0.1"],\ ["balanced-match", "npm:1.0.2"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["braces", [\ ["npm:3.0.3", {\ "packageLocation": "./.yarn/cache/braces-npm-3.0.3-582c14023c-fad11a0d46.zip/node_modules/braces/",\ "packageDependencies": [\ ["braces", "npm:3.0.3"],\ ["fill-range", "npm:7.1.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["bundle-require", [\ ["npm:4.1.0", {\ "packageLocation": "./.yarn/cache/bundle-require-npm-4.1.0-f0b6010bad-9d01d30cf7.zip/node_modules/bundle-require/",\ "packageDependencies": [\ ["bundle-require", "npm:4.1.0"]\ ],\ "linkType": "SOFT"\ }],\ ["virtual:0faf69096413c572ae990b750b17716b4c788277f84f52ae8701f74cbdecaf215d06afc21a6b9f6245c681b5bc8fd5c3102cffb34f993716874d52455d375bee#npm:4.1.0", {\ "packageLocation": "./.yarn/__virtual__/bundle-require-virtual-4015a0178b/0/cache/bundle-require-npm-4.1.0-f0b6010bad-9d01d30cf7.zip/node_modules/bundle-require/",\ "packageDependencies": [\ ["bundle-require", "virtual:0faf69096413c572ae990b750b17716b4c788277f84f52ae8701f74cbdecaf215d06afc21a6b9f6245c681b5bc8fd5c3102cffb34f993716874d52455d375bee#npm:4.1.0"],\ ["@types/esbuild", null],\ ["esbuild", "npm:0.19.12"],\ ["load-tsconfig", "npm:0.2.5"]\ ],\ "packagePeers": [\ "@types/esbuild",\ "esbuild"\ ],\ "linkType": "HARD"\ }]\ ]],\ ["cac", [\ ["npm:6.7.14", {\ "packageLocation": "./.yarn/cache/cac-npm-6.7.14-c46284e425-002769a0fb.zip/node_modules/cac/",\ "packageDependencies": [\ ["cac", "npm:6.7.14"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["cacache", [\ ["npm:18.0.3", {\ "packageLocation": "./.yarn/cache/cacache-npm-18.0.3-7936f526c3-d4c161f071.zip/node_modules/cacache/",\ "packageDependencies": [\ ["cacache", "npm:18.0.3"],\ ["@npmcli/fs", "npm:3.1.1"],\ ["fs-minipass", "npm:3.0.3"],\ ["glob", "npm:10.4.1"],\ ["lru-cache", "npm:10.2.2"],\ ["minipass", "npm:7.1.2"],\ ["minipass-collect", "npm:2.0.1"],\ ["minipass-flush", "npm:1.0.5"],\ ["minipass-pipeline", "npm:1.2.4"],\ ["p-map", "npm:4.0.0"],\ ["ssri", "npm:10.0.6"],\ ["tar", "npm:6.2.1"],\ ["unique-filename", "npm:3.0.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["chokidar", [\ ["npm:3.6.0", {\ "packageLocation": "./.yarn/cache/chokidar-npm-3.6.0-3c413a828f-c327fb0770.zip/node_modules/chokidar/",\ "packageDependencies": [\ ["chokidar", "npm:3.6.0"],\ ["anymatch", "npm:3.1.3"],\ ["braces", "npm:3.0.3"],\ ["fsevents", "patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1"],\ ["glob-parent", "npm:5.1.2"],\ ["is-binary-path", "npm:2.1.0"],\ ["is-glob", "npm:4.0.3"],\ ["normalize-path", "npm:3.0.0"],\ ["readdirp", "npm:3.6.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["chownr", [\ ["npm:2.0.0", {\ "packageLocation": "./.yarn/cache/chownr-npm-2.0.0-638f1c9c61-c57cf9dd07.zip/node_modules/chownr/",\ "packageDependencies": [\ ["chownr", "npm:2.0.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["clean-stack", [\ ["npm:2.2.0", {\ "packageLocation": "./.yarn/cache/clean-stack-npm-2.2.0-a8ce435a5c-2ac8cd2b2f.zip/node_modules/clean-stack/",\ "packageDependencies": [\ ["clean-stack", "npm:2.2.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["color-convert", [\ ["npm:2.0.1", {\ "packageLocation": "./.yarn/cache/color-convert-npm-2.0.1-79730e935b-fa00c91b43.zip/node_modules/color-convert/",\ "packageDependencies": [\ ["color-convert", "npm:2.0.1"],\ ["color-name", "npm:1.1.4"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["color-name", [\ ["npm:1.1.4", {\ "packageLocation": "./.yarn/cache/color-name-npm-1.1.4-025792b0ea-b044585952.zip/node_modules/color-name/",\ "packageDependencies": [\ ["color-name", "npm:1.1.4"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["commander", [\ ["npm:4.1.1", {\ "packageLocation": "./.yarn/cache/commander-npm-4.1.1-22a0fe921b-3b2dc4125f.zip/node_modules/commander/",\ "packageDependencies": [\ ["commander", "npm:4.1.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["create-require", [\ ["npm:1.1.1", {\ "packageLocation": "./.yarn/cache/create-require-npm-1.1.1-839884ca2e-a9a1503d43.zip/node_modules/create-require/",\ "packageDependencies": [\ ["create-require", "npm:1.1.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["cross-env", [\ ["npm:7.0.3", {\ "packageLocation": "./.yarn/cache/cross-env-npm-7.0.3-96d81820f4-e99911f0d3.zip/node_modules/cross-env/",\ "packageDependencies": [\ ["cross-env", "npm:7.0.3"],\ ["cross-spawn", "npm:7.0.3"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["cross-spawn", [\ ["npm:7.0.3", {\ "packageLocation": "./.yarn/cache/cross-spawn-npm-7.0.3-e4ff3e65b3-e1a13869d2.zip/node_modules/cross-spawn/",\ "packageDependencies": [\ ["cross-spawn", "npm:7.0.3"],\ ["path-key", "npm:3.1.1"],\ ["shebang-command", "npm:2.0.0"],\ ["which", "npm:2.0.2"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["debug", [\ ["npm:4.3.4", {\ "packageLocation": "./.yarn/cache/debug-npm-4.3.4-4513954577-0073c3bcbd.zip/node_modules/debug/",\ "packageDependencies": [\ ["debug", "npm:4.3.4"]\ ],\ "linkType": "SOFT"\ }],\ ["virtual:c9e1a4b59e37cb479517edede3bf2093b28c0ca1a9d0e517f3c345075bd1e468980b94b4957e389116607ee7155441dfd7d09e19a4229d5d09bcf06244401590#npm:4.3.4", {\ "packageLocation": "./.yarn/__virtual__/debug-virtual-11377b508d/0/cache/debug-npm-4.3.4-4513954577-0073c3bcbd.zip/node_modules/debug/",\ "packageDependencies": [\ ["debug", "virtual:c9e1a4b59e37cb479517edede3bf2093b28c0ca1a9d0e517f3c345075bd1e468980b94b4957e389116607ee7155441dfd7d09e19a4229d5d09bcf06244401590#npm:4.3.4"],\ ["@types/supports-color", null],\ ["ms", "npm:2.1.2"],\ ["supports-color", null]\ ],\ "packagePeers": [\ "@types/supports-color",\ "supports-color"\ ],\ "linkType": "HARD"\ }]\ ]],\ ["denque", [\ ["npm:2.1.0", {\ "packageLocation": "./.yarn/cache/denque-npm-2.1.0-578d0b6297-8ea0532157.zip/node_modules/denque/",\ "packageDependencies": [\ ["denque", "npm:2.1.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["diff", [\ ["npm:4.0.2", {\ "packageLocation": "./.yarn/cache/diff-npm-4.0.2-73133c7102-ec09ec2101.zip/node_modules/diff/",\ "packageDependencies": [\ ["diff", "npm:4.0.2"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["dir-glob", [\ ["npm:3.0.1", {\ "packageLocation": "./.yarn/cache/dir-glob-npm-3.0.1-1aea628b1b-fa05e18324.zip/node_modules/dir-glob/",\ "packageDependencies": [\ ["dir-glob", "npm:3.0.1"],\ ["path-type", "npm:4.0.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["discord-api-types", [\ ["npm:0.37.83", {\ "packageLocation": "./.yarn/cache/discord-api-types-npm-0.37.83-c5e73ca06d-63aee8b463.zip/node_modules/discord-api-types/",\ "packageDependencies": [\ ["discord-api-types", "npm:0.37.83"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["discord.js", [\ ["npm:14.15.2", {\ "packageLocation": "./.yarn/cache/discord.js-npm-14.15.2-da10f95790-041ffe7b92.zip/node_modules/discord.js/",\ "packageDependencies": [\ ["discord.js", "npm:14.15.2"],\ ["@discordjs/builders", "npm:1.8.1"],\ ["@discordjs/collection", "npm:1.5.3"],\ ["@discordjs/formatters", "npm:0.4.0"],\ ["@discordjs/rest", "npm:2.3.0"],\ ["@discordjs/util", "npm:1.1.0"],\ ["@discordjs/ws", "npm:1.1.0"],\ ["@sapphire/snowflake", "npm:3.5.3"],\ ["discord-api-types", "npm:0.37.83"],\ ["fast-deep-equal", "npm:3.1.3"],\ ["lodash.snakecase", "npm:4.1.1"],\ ["tslib", "npm:2.6.2"],\ ["undici", "npm:6.13.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["dokdo", [\ ["npm:0.6.2", {\ "packageLocation": "./.yarn/cache/dokdo-npm-0.6.2-5c0c9aaf76-bc3b62b83a.zip/node_modules/dokdo/",\ "packageDependencies": [\ ["dokdo", "npm:0.6.2"]\ ],\ "linkType": "SOFT"\ }],\ ["virtual:df417fa6ed58592061b3cdd25305c567cb83e355f566a3f712cecb8d4e6c4814c3ed842a030a9c3a51e2de30e93ecf82143ea19accc29756c7a7ac08166c7416#npm:0.6.2", {\ "packageLocation": "./.yarn/__virtual__/dokdo-virtual-fa11e61795/0/cache/dokdo-npm-0.6.2-5c0c9aaf76-bc3b62b83a.zip/node_modules/dokdo/",\ "packageDependencies": [\ ["dokdo", "virtual:df417fa6ed58592061b3cdd25305c567cb83e355f566a3f712cecb8d4e6c4814c3ed842a030a9c3a51e2de30e93ecf82143ea19accc29756c7a7ac08166c7416#npm:0.6.2"],\ ["@types/discord.js", null],\ ["discord.js", "npm:14.15.2"],\ ["node-fetch", "virtual:fa11e61795b726a547f6d253b85c972e3fc7899198eec724c9462b99e8bc08c156ee0322734f54113b916e8a5365a92e172948ebde82cd6286e868343894536d#npm:2.7.0"]\ ],\ "packagePeers": [\ "@types/discord.js",\ "discord.js"\ ],\ "linkType": "HARD"\ }]\ ]],\ ["eastasianwidth", [\ ["npm:0.2.0", {\ "packageLocation": "./.yarn/cache/eastasianwidth-npm-0.2.0-c37eb16bd1-9b1d3e1bae.zip/node_modules/eastasianwidth/",\ "packageDependencies": [\ ["eastasianwidth", "npm:0.2.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["emoji-regex", [\ ["npm:8.0.0", {\ "packageLocation": "./.yarn/cache/emoji-regex-npm-8.0.0-213764015c-c72d67a682.zip/node_modules/emoji-regex/",\ "packageDependencies": [\ ["emoji-regex", "npm:8.0.0"]\ ],\ "linkType": "HARD"\ }],\ ["npm:9.2.2", {\ "packageLocation": "./.yarn/cache/emoji-regex-npm-9.2.2-e6fac8d058-915acf859c.zip/node_modules/emoji-regex/",\ "packageDependencies": [\ ["emoji-regex", "npm:9.2.2"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["encoding", [\ ["npm:0.1.13", {\ "packageLocation": "./.yarn/cache/encoding-npm-0.1.13-82a1837d30-bb98632f8f.zip/node_modules/encoding/",\ "packageDependencies": [\ ["encoding", "npm:0.1.13"],\ ["iconv-lite", "npm:0.6.3"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["env-paths", [\ ["npm:2.2.1", {\ "packageLocation": "./.yarn/cache/env-paths-npm-2.2.1-7c7577428c-65b5df55a8.zip/node_modules/env-paths/",\ "packageDependencies": [\ ["env-paths", "npm:2.2.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["err-code", [\ ["npm:2.0.3", {\ "packageLocation": "./.yarn/cache/err-code-npm-2.0.3-082e0ff9a7-1d20d825cd.zip/node_modules/err-code/",\ "packageDependencies": [\ ["err-code", "npm:2.0.3"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["esbuild", [\ ["npm:0.19.12", {\ "packageLocation": "./.yarn/unplugged/esbuild-npm-0.19.12-fb5a3a4313/node_modules/esbuild/",\ "packageDependencies": [\ ["esbuild", "npm:0.19.12"],\ ["@esbuild/aix-ppc64", "npm:0.19.12"],\ ["@esbuild/android-arm", "npm:0.19.12"],\ ["@esbuild/android-arm64", "npm:0.19.12"],\ ["@esbuild/android-x64", "npm:0.19.12"],\ ["@esbuild/darwin-arm64", "npm:0.19.12"],\ ["@esbuild/darwin-x64", "npm:0.19.12"],\ ["@esbuild/freebsd-arm64", "npm:0.19.12"],\ ["@esbuild/freebsd-x64", "npm:0.19.12"],\ ["@esbuild/linux-arm", "npm:0.19.12"],\ ["@esbuild/linux-arm64", "npm:0.19.12"],\ ["@esbuild/linux-ia32", "npm:0.19.12"],\ ["@esbuild/linux-loong64", "npm:0.19.12"],\ ["@esbuild/linux-mips64el", "npm:0.19.12"],\ ["@esbuild/linux-ppc64", "npm:0.19.12"],\ ["@esbuild/linux-riscv64", "npm:0.19.12"],\ ["@esbuild/linux-s390x", "npm:0.19.12"],\ ["@esbuild/linux-x64", "npm:0.19.12"],\ ["@esbuild/netbsd-x64", "npm:0.19.12"],\ ["@esbuild/openbsd-x64", "npm:0.19.12"],\ ["@esbuild/sunos-x64", "npm:0.19.12"],\ ["@esbuild/win32-arm64", "npm:0.19.12"],\ ["@esbuild/win32-ia32", "npm:0.19.12"],\ ["@esbuild/win32-x64", "npm:0.19.12"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["execa", [\ ["npm:5.1.1", {\ "packageLocation": "./.yarn/cache/execa-npm-5.1.1-191347acf5-8ada91f2d7.zip/node_modules/execa/",\ "packageDependencies": [\ ["execa", "npm:5.1.1"],\ ["cross-spawn", "npm:7.0.3"],\ ["get-stream", "npm:6.0.1"],\ ["human-signals", "npm:2.1.0"],\ ["is-stream", "npm:2.0.1"],\ ["merge-stream", "npm:2.0.0"],\ ["npm-run-path", "npm:4.0.1"],\ ["onetime", "npm:5.1.2"],\ ["signal-exit", "npm:3.0.7"],\ ["strip-final-newline", "npm:2.0.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["exponential-backoff", [\ ["npm:3.1.1", {\ "packageLocation": "./.yarn/cache/exponential-backoff-npm-3.1.1-04df458b30-2d9bbb6473.zip/node_modules/exponential-backoff/",\ "packageDependencies": [\ ["exponential-backoff", "npm:3.1.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["fast-deep-equal", [\ ["npm:3.1.3", {\ "packageLocation": "./.yarn/cache/fast-deep-equal-npm-3.1.3-790edcfcf5-e21a9d8d84.zip/node_modules/fast-deep-equal/",\ "packageDependencies": [\ ["fast-deep-equal", "npm:3.1.3"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["fast-glob", [\ ["npm:3.3.2", {\ "packageLocation": "./.yarn/cache/fast-glob-npm-3.3.2-0a8cb4f2ca-222512e931.zip/node_modules/fast-glob/",\ "packageDependencies": [\ ["fast-glob", "npm:3.3.2"],\ ["@nodelib/fs.stat", "npm:2.0.5"],\ ["@nodelib/fs.walk", "npm:1.2.8"],\ ["glob-parent", "npm:5.1.2"],\ ["merge2", "npm:1.4.1"],\ ["micromatch", "npm:4.0.7"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["fastq", [\ ["npm:1.17.1", {\ "packageLocation": "./.yarn/cache/fastq-npm-1.17.1-56d4554993-a443180068.zip/node_modules/fastq/",\ "packageDependencies": [\ ["fastq", "npm:1.17.1"],\ ["reusify", "npm:1.0.4"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["fill-range", [\ ["npm:7.1.1", {\ "packageLocation": "./.yarn/cache/fill-range-npm-7.1.1-bf491486db-a7095cb39e.zip/node_modules/fill-range/",\ "packageDependencies": [\ ["fill-range", "npm:7.1.1"],\ ["to-regex-range", "npm:5.0.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["foreground-child", [\ ["npm:3.1.1", {\ "packageLocation": "./.yarn/cache/foreground-child-npm-3.1.1-77e78ed774-087edd4485.zip/node_modules/foreground-child/",\ "packageDependencies": [\ ["foreground-child", "npm:3.1.1"],\ ["cross-spawn", "npm:7.0.3"],\ ["signal-exit", "npm:4.1.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["fs-minipass", [\ ["npm:2.1.0", {\ "packageLocation": "./.yarn/cache/fs-minipass-npm-2.1.0-501ef87306-03191781e9.zip/node_modules/fs-minipass/",\ "packageDependencies": [\ ["fs-minipass", "npm:2.1.0"],\ ["minipass", "npm:3.3.6"]\ ],\ "linkType": "HARD"\ }],\ ["npm:3.0.3", {\ "packageLocation": "./.yarn/cache/fs-minipass-npm-3.0.3-d148d6ac19-af143246cf.zip/node_modules/fs-minipass/",\ "packageDependencies": [\ ["fs-minipass", "npm:3.0.3"],\ ["minipass", "npm:7.1.2"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["fsevents", [\ ["patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1", {\ "packageLocation": "./.yarn/unplugged/fsevents-patch-6b67494872/node_modules/fsevents/",\ "packageDependencies": [\ ["fsevents", "patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1"],\ ["node-gyp", "npm:10.1.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["generate-function", [\ ["npm:2.3.1", {\ "packageLocation": "./.yarn/cache/generate-function-npm-2.3.1-c839dc559c-318f85af87.zip/node_modules/generate-function/",\ "packageDependencies": [\ ["generate-function", "npm:2.3.1"],\ ["is-property", "npm:1.0.2"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["get-stream", [\ ["npm:6.0.1", {\ "packageLocation": "./.yarn/cache/get-stream-npm-6.0.1-83e51a4642-781266d297.zip/node_modules/get-stream/",\ "packageDependencies": [\ ["get-stream", "npm:6.0.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["glob", [\ ["npm:10.4.1", {\ "packageLocation": "./.yarn/cache/glob-npm-10.4.1-a0d030e0a9-d7bb49d2b4.zip/node_modules/glob/",\ "packageDependencies": [\ ["glob", "npm:10.4.1"],\ ["foreground-child", "npm:3.1.1"],\ ["jackspeak", "npm:3.1.2"],\ ["minimatch", "npm:9.0.4"],\ ["minipass", "npm:7.1.2"],\ ["path-scurry", "npm:1.11.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["glob-parent", [\ ["npm:5.1.2", {\ "packageLocation": "./.yarn/cache/glob-parent-npm-5.1.2-021ab32634-32cd106ce8.zip/node_modules/glob-parent/",\ "packageDependencies": [\ ["glob-parent", "npm:5.1.2"],\ ["is-glob", "npm:4.0.3"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["globby", [\ ["npm:11.1.0", {\ "packageLocation": "./.yarn/cache/globby-npm-11.1.0-bdcdf20c71-288e95e310.zip/node_modules/globby/",\ "packageDependencies": [\ ["globby", "npm:11.1.0"],\ ["array-union", "npm:2.1.0"],\ ["dir-glob", "npm:3.0.1"],\ ["fast-glob", "npm:3.3.2"],\ ["ignore", "npm:5.3.1"],\ ["merge2", "npm:1.4.1"],\ ["slash", "npm:3.0.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["graceful-fs", [\ ["npm:4.2.11", {\ "packageLocation": "./.yarn/cache/graceful-fs-npm-4.2.11-24bb648a68-bf152d0ed1.zip/node_modules/graceful-fs/",\ "packageDependencies": [\ ["graceful-fs", "npm:4.2.11"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["http-cache-semantics", [\ ["npm:4.1.1", {\ "packageLocation": "./.yarn/cache/http-cache-semantics-npm-4.1.1-1120131375-362d5ed66b.zip/node_modules/http-cache-semantics/",\ "packageDependencies": [\ ["http-cache-semantics", "npm:4.1.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["http-proxy-agent", [\ ["npm:7.0.2", {\ "packageLocation": "./.yarn/cache/http-proxy-agent-npm-7.0.2-643ed7cc33-d062acfa0c.zip/node_modules/http-proxy-agent/",\ "packageDependencies": [\ ["http-proxy-agent", "npm:7.0.2"],\ ["agent-base", "npm:7.1.1"],\ ["debug", "virtual:c9e1a4b59e37cb479517edede3bf2093b28c0ca1a9d0e517f3c345075bd1e468980b94b4957e389116607ee7155441dfd7d09e19a4229d5d09bcf06244401590#npm:4.3.4"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["https-proxy-agent", [\ ["npm:7.0.4", {\ "packageLocation": "./.yarn/cache/https-proxy-agent-npm-7.0.4-a51e13f5dc-405fe582bb.zip/node_modules/https-proxy-agent/",\ "packageDependencies": [\ ["https-proxy-agent", "npm:7.0.4"],\ ["agent-base", "npm:7.1.1"],\ ["debug", "virtual:c9e1a4b59e37cb479517edede3bf2093b28c0ca1a9d0e517f3c345075bd1e468980b94b4957e389116607ee7155441dfd7d09e19a4229d5d09bcf06244401590#npm:4.3.4"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["human-signals", [\ ["npm:2.1.0", {\ "packageLocation": "./.yarn/cache/human-signals-npm-2.1.0-f75815481d-df59be9e0a.zip/node_modules/human-signals/",\ "packageDependencies": [\ ["human-signals", "npm:2.1.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["iconv-lite", [\ ["npm:0.6.3", {\ "packageLocation": "./.yarn/cache/iconv-lite-npm-0.6.3-24b8aae27e-24e3292dd3.zip/node_modules/iconv-lite/",\ "packageDependencies": [\ ["iconv-lite", "npm:0.6.3"],\ ["safer-buffer", "npm:2.1.2"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["ignore", [\ ["npm:5.3.1", {\ "packageLocation": "./.yarn/cache/ignore-npm-5.3.1-f6947c5df7-0a884c2fbc.zip/node_modules/ignore/",\ "packageDependencies": [\ ["ignore", "npm:5.3.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["imurmurhash", [\ ["npm:0.1.4", {\ "packageLocation": "./.yarn/cache/imurmurhash-npm-0.1.4-610c5068a0-2d30b157a9.zip/node_modules/imurmurhash/",\ "packageDependencies": [\ ["imurmurhash", "npm:0.1.4"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["indent-string", [\ ["npm:4.0.0", {\ "packageLocation": "./.yarn/cache/indent-string-npm-4.0.0-7b717435b2-cd3f5cbc9c.zip/node_modules/indent-string/",\ "packageDependencies": [\ ["indent-string", "npm:4.0.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["ip-address", [\ ["npm:9.0.5", {\ "packageLocation": "./.yarn/cache/ip-address-npm-9.0.5-9fa024d42a-1ed81e0672.zip/node_modules/ip-address/",\ "packageDependencies": [\ ["ip-address", "npm:9.0.5"],\ ["jsbn", "npm:1.1.0"],\ ["sprintf-js", "npm:1.1.3"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["is-binary-path", [\ ["npm:2.1.0", {\ "packageLocation": "./.yarn/cache/is-binary-path-npm-2.1.0-e61d46f557-078e51b4f9.zip/node_modules/is-binary-path/",\ "packageDependencies": [\ ["is-binary-path", "npm:2.1.0"],\ ["binary-extensions", "npm:2.3.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["is-extglob", [\ ["npm:2.1.1", {\ "packageLocation": "./.yarn/cache/is-extglob-npm-2.1.1-0870ea68b5-df033653d0.zip/node_modules/is-extglob/",\ "packageDependencies": [\ ["is-extglob", "npm:2.1.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["is-fullwidth-code-point", [\ ["npm:3.0.0", {\ "packageLocation": "./.yarn/cache/is-fullwidth-code-point-npm-3.0.0-1ecf4ebee5-44a30c2945.zip/node_modules/is-fullwidth-code-point/",\ "packageDependencies": [\ ["is-fullwidth-code-point", "npm:3.0.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["is-glob", [\ ["npm:4.0.3", {\ "packageLocation": "./.yarn/cache/is-glob-npm-4.0.3-cb87bf1bdb-3ed74f2b0c.zip/node_modules/is-glob/",\ "packageDependencies": [\ ["is-glob", "npm:4.0.3"],\ ["is-extglob", "npm:2.1.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["is-lambda", [\ ["npm:1.0.1", {\ "packageLocation": "./.yarn/cache/is-lambda-npm-1.0.1-7ab55bc8a8-93a32f0194.zip/node_modules/is-lambda/",\ "packageDependencies": [\ ["is-lambda", "npm:1.0.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["is-number", [\ ["npm:7.0.0", {\ "packageLocation": "./.yarn/cache/is-number-npm-7.0.0-060086935c-6a6c3383f6.zip/node_modules/is-number/",\ "packageDependencies": [\ ["is-number", "npm:7.0.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["is-property", [\ ["npm:1.0.2", {\ "packageLocation": "./.yarn/cache/is-property-npm-1.0.2-6eac53b30e-2f66eacb3d.zip/node_modules/is-property/",\ "packageDependencies": [\ ["is-property", "npm:1.0.2"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["is-stream", [\ ["npm:2.0.1", {\ "packageLocation": "./.yarn/cache/is-stream-npm-2.0.1-c802db55e7-b8e05ccdf9.zip/node_modules/is-stream/",\ "packageDependencies": [\ ["is-stream", "npm:2.0.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["isexe", [\ ["npm:2.0.0", {\ "packageLocation": "./.yarn/cache/isexe-npm-2.0.0-b58870bd2e-7c9f715c03.zip/node_modules/isexe/",\ "packageDependencies": [\ ["isexe", "npm:2.0.0"]\ ],\ "linkType": "HARD"\ }],\ ["npm:3.1.1", {\ "packageLocation": "./.yarn/cache/isexe-npm-3.1.1-9c0061eead-7fe1931ee4.zip/node_modules/isexe/",\ "packageDependencies": [\ ["isexe", "npm:3.1.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["jackspeak", [\ ["npm:3.1.2", {\ "packageLocation": "./.yarn/cache/jackspeak-npm-3.1.2-dbb3ed8474-7e6b94103e.zip/node_modules/jackspeak/",\ "packageDependencies": [\ ["jackspeak", "npm:3.1.2"],\ ["@isaacs/cliui", "npm:8.0.2"],\ ["@pkgjs/parseargs", "npm:0.11.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["joycon", [\ ["npm:3.1.1", {\ "packageLocation": "./.yarn/cache/joycon-npm-3.1.1-3033e0e5f4-4b36e34791.zip/node_modules/joycon/",\ "packageDependencies": [\ ["joycon", "npm:3.1.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["jsbn", [\ ["npm:1.1.0", {\ "packageLocation": "./.yarn/cache/jsbn-npm-1.1.0-1da0181838-bebe7ae829.zip/node_modules/jsbn/",\ "packageDependencies": [\ ["jsbn", "npm:1.1.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["lilconfig", [\ ["npm:3.1.1", {\ "packageLocation": "./.yarn/cache/lilconfig-npm-3.1.1-b8cdeef996-c80fbf98ae.zip/node_modules/lilconfig/",\ "packageDependencies": [\ ["lilconfig", "npm:3.1.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["lines-and-columns", [\ ["npm:1.2.4", {\ "packageLocation": "./.yarn/cache/lines-and-columns-npm-1.2.4-d6c7cc5799-0c37f9f7fa.zip/node_modules/lines-and-columns/",\ "packageDependencies": [\ ["lines-and-columns", "npm:1.2.4"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["load-tsconfig", [\ ["npm:0.2.5", {\ "packageLocation": "./.yarn/cache/load-tsconfig-npm-0.2.5-70feef5c98-b3176f6f0c.zip/node_modules/load-tsconfig/",\ "packageDependencies": [\ ["load-tsconfig", "npm:0.2.5"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["lodash", [\ ["npm:4.17.21", {\ "packageLocation": "./.yarn/cache/lodash-npm-4.17.21-6382451519-c08619c038.zip/node_modules/lodash/",\ "packageDependencies": [\ ["lodash", "npm:4.17.21"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["lodash.snakecase", [\ ["npm:4.1.1", {\ "packageLocation": "./.yarn/cache/lodash.snakecase-npm-4.1.1-b12cdbecb4-82ed40935d.zip/node_modules/lodash.snakecase/",\ "packageDependencies": [\ ["lodash.snakecase", "npm:4.1.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["lodash.sortby", [\ ["npm:4.7.0", {\ "packageLocation": "./.yarn/cache/lodash.sortby-npm-4.7.0-fda8ab950d-38df19ae28.zip/node_modules/lodash.sortby/",\ "packageDependencies": [\ ["lodash.sortby", "npm:4.7.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["long", [\ ["npm:5.2.3", {\ "packageLocation": "./.yarn/cache/long-npm-5.2.3-61dddb7586-9167ec6947.zip/node_modules/long/",\ "packageDependencies": [\ ["long", "npm:5.2.3"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["lru-cache", [\ ["npm:10.2.2", {\ "packageLocation": "./.yarn/cache/lru-cache-npm-10.2.2-c54b721fc3-ff1a496d30.zip/node_modules/lru-cache/",\ "packageDependencies": [\ ["lru-cache", "npm:10.2.2"]\ ],\ "linkType": "HARD"\ }],\ ["npm:7.18.3", {\ "packageLocation": "./.yarn/cache/lru-cache-npm-7.18.3-e68be5b11c-6029ca5aba.zip/node_modules/lru-cache/",\ "packageDependencies": [\ ["lru-cache", "npm:7.18.3"]\ ],\ "linkType": "HARD"\ }],\ ["npm:8.0.5", {\ "packageLocation": "./.yarn/cache/lru-cache-npm-8.0.5-bb030cd93e-74153ab136.zip/node_modules/lru-cache/",\ "packageDependencies": [\ ["lru-cache", "npm:8.0.5"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["magic-bytes.js", [\ ["npm:1.10.0", {\ "packageLocation": "./.yarn/cache/magic-bytes.js-npm-1.10.0-35a34b94a0-4b84d54b79.zip/node_modules/magic-bytes.js/",\ "packageDependencies": [\ ["magic-bytes.js", "npm:1.10.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["make-error", [\ ["npm:1.3.6", {\ "packageLocation": "./.yarn/cache/make-error-npm-1.3.6-ccb85d9458-b86e5e0e25.zip/node_modules/make-error/",\ "packageDependencies": [\ ["make-error", "npm:1.3.6"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["make-fetch-happen", [\ ["npm:13.0.1", {\ "packageLocation": "./.yarn/cache/make-fetch-happen-npm-13.0.1-4180f2aaa8-11bae5ad6a.zip/node_modules/make-fetch-happen/",\ "packageDependencies": [\ ["make-fetch-happen", "npm:13.0.1"],\ ["@npmcli/agent", "npm:2.2.2"],\ ["cacache", "npm:18.0.3"],\ ["http-cache-semantics", "npm:4.1.1"],\ ["is-lambda", "npm:1.0.1"],\ ["minipass", "npm:7.1.2"],\ ["minipass-fetch", "npm:3.0.5"],\ ["minipass-flush", "npm:1.0.5"],\ ["minipass-pipeline", "npm:1.2.4"],\ ["negotiator", "npm:0.6.3"],\ ["proc-log", "npm:4.2.0"],\ ["promise-retry", "npm:2.0.1"],\ ["ssri", "npm:10.0.6"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["merge-stream", [\ ["npm:2.0.0", {\ "packageLocation": "./.yarn/cache/merge-stream-npm-2.0.0-2ac83efea5-6fa4dcc8d8.zip/node_modules/merge-stream/",\ "packageDependencies": [\ ["merge-stream", "npm:2.0.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["merge2", [\ ["npm:1.4.1", {\ "packageLocation": "./.yarn/cache/merge2-npm-1.4.1-a2507bd06c-7268db63ed.zip/node_modules/merge2/",\ "packageDependencies": [\ ["merge2", "npm:1.4.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["micromatch", [\ ["npm:4.0.7", {\ "packageLocation": "./.yarn/cache/micromatch-npm-4.0.7-28fb7387ee-a11ed1cb67.zip/node_modules/micromatch/",\ "packageDependencies": [\ ["micromatch", "npm:4.0.7"],\ ["braces", "npm:3.0.3"],\ ["picomatch", "npm:2.3.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["mimic-fn", [\ ["npm:2.1.0", {\ "packageLocation": "./.yarn/cache/mimic-fn-npm-2.1.0-4fbeb3abb4-d2421a3444.zip/node_modules/mimic-fn/",\ "packageDependencies": [\ ["mimic-fn", "npm:2.1.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["minimatch", [\ ["npm:9.0.4", {\ "packageLocation": "./.yarn/cache/minimatch-npm-9.0.4-7be5a33efc-4cdc18d112.zip/node_modules/minimatch/",\ "packageDependencies": [\ ["minimatch", "npm:9.0.4"],\ ["brace-expansion", "npm:2.0.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["minipass", [\ ["npm:3.3.6", {\ "packageLocation": "./.yarn/cache/minipass-npm-3.3.6-b8d93a945b-a5c6ef069f.zip/node_modules/minipass/",\ "packageDependencies": [\ ["minipass", "npm:3.3.6"],\ ["yallist", "npm:4.0.0"]\ ],\ "linkType": "HARD"\ }],\ ["npm:5.0.0", {\ "packageLocation": "./.yarn/cache/minipass-npm-5.0.0-c64fb63c92-61682162d2.zip/node_modules/minipass/",\ "packageDependencies": [\ ["minipass", "npm:5.0.0"]\ ],\ "linkType": "HARD"\ }],\ ["npm:7.1.2", {\ "packageLocation": "./.yarn/cache/minipass-npm-7.1.2-3a5327d36d-c25f0ee819.zip/node_modules/minipass/",\ "packageDependencies": [\ ["minipass", "npm:7.1.2"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["minipass-collect", [\ ["npm:2.0.1", {\ "packageLocation": "./.yarn/cache/minipass-collect-npm-2.0.1-73d3907e40-b251bceea6.zip/node_modules/minipass-collect/",\ "packageDependencies": [\ ["minipass-collect", "npm:2.0.1"],\ ["minipass", "npm:7.1.2"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["minipass-fetch", [\ ["npm:3.0.5", {\ "packageLocation": "./.yarn/cache/minipass-fetch-npm-3.0.5-ed78529694-c669948bec.zip/node_modules/minipass-fetch/",\ "packageDependencies": [\ ["minipass-fetch", "npm:3.0.5"],\ ["encoding", "npm:0.1.13"],\ ["minipass", "npm:7.1.2"],\ ["minipass-sized", "npm:1.0.3"],\ ["minizlib", "npm:2.1.2"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["minipass-flush", [\ ["npm:1.0.5", {\ "packageLocation": "./.yarn/cache/minipass-flush-npm-1.0.5-efe79d9826-56269a0b22.zip/node_modules/minipass-flush/",\ "packageDependencies": [\ ["minipass-flush", "npm:1.0.5"],\ ["minipass", "npm:3.3.6"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["minipass-pipeline", [\ ["npm:1.2.4", {\ "packageLocation": "./.yarn/cache/minipass-pipeline-npm-1.2.4-5924cb077f-b14240dac0.zip/node_modules/minipass-pipeline/",\ "packageDependencies": [\ ["minipass-pipeline", "npm:1.2.4"],\ ["minipass", "npm:3.3.6"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["minipass-sized", [\ ["npm:1.0.3", {\ "packageLocation": "./.yarn/cache/minipass-sized-npm-1.0.3-306d86f432-40982d8d83.zip/node_modules/minipass-sized/",\ "packageDependencies": [\ ["minipass-sized", "npm:1.0.3"],\ ["minipass", "npm:3.3.6"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["minizlib", [\ ["npm:2.1.2", {\ "packageLocation": "./.yarn/cache/minizlib-npm-2.1.2-ea89cd0cfb-ae0f45436f.zip/node_modules/minizlib/",\ "packageDependencies": [\ ["minizlib", "npm:2.1.2"],\ ["minipass", "npm:3.3.6"],\ ["yallist", "npm:4.0.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["mkdirp", [\ ["npm:1.0.4", {\ "packageLocation": "./.yarn/cache/mkdirp-npm-1.0.4-37f6ef56b9-d71b8dcd4b.zip/node_modules/mkdirp/",\ "packageDependencies": [\ ["mkdirp", "npm:1.0.4"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["ms", [\ ["npm:2.1.2", {\ "packageLocation": "./.yarn/cache/ms-npm-2.1.2-ec0c1512ff-673cdb2c31.zip/node_modules/ms/",\ "packageDependencies": [\ ["ms", "npm:2.1.2"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["muffinbot", [\ ["workspace:.", {\ "packageLocation": "./",\ "packageDependencies": [\ ["muffinbot", "workspace:."],\ ["@migan/prettier-config", "virtual:df417fa6ed58592061b3cdd25305c567cb83e355f566a3f712cecb8d4e6c4814c3ed842a030a9c3a51e2de30e93ecf82143ea19accc29756c7a7ac08166c7416#npm:1.0.0"],\ ["@types/node", "npm:20.12.13"],\ ["cross-env", "npm:7.0.3"],\ ["discord.js", "npm:14.15.2"],\ ["dokdo", "virtual:df417fa6ed58592061b3cdd25305c567cb83e355f566a3f712cecb8d4e6c4814c3ed842a030a9c3a51e2de30e93ecf82143ea19accc29756c7a7ac08166c7416#npm:0.6.2"],\ ["mysql2", "npm:3.9.9"],\ ["prettier", "npm:3.2.5"],\ ["ts-node", "virtual:df417fa6ed58592061b3cdd25305c567cb83e355f566a3f712cecb8d4e6c4814c3ed842a030a9c3a51e2de30e93ecf82143ea19accc29756c7a7ac08166c7416#npm:10.9.2"],\ ["tsup", "virtual:df417fa6ed58592061b3cdd25305c567cb83e355f566a3f712cecb8d4e6c4814c3ed842a030a9c3a51e2de30e93ecf82143ea19accc29756c7a7ac08166c7416#npm:8.0.2"],\ ["typescript", "patch:typescript@npm%3A5.4.5#optional!builtin::version=5.4.5&hash=5adc0c"]\ ],\ "linkType": "SOFT"\ }]\ ]],\ ["mysql2", [\ ["npm:3.9.9", {\ "packageLocation": "./.yarn/cache/mysql2-npm-3.9.9-422305e0c7-edce41a8c8.zip/node_modules/mysql2/",\ "packageDependencies": [\ ["mysql2", "npm:3.9.9"],\ ["denque", "npm:2.1.0"],\ ["generate-function", "npm:2.3.1"],\ ["iconv-lite", "npm:0.6.3"],\ ["long", "npm:5.2.3"],\ ["lru-cache", "npm:8.0.5"],\ ["named-placeholders", "npm:1.1.3"],\ ["seq-queue", "npm:0.0.5"],\ ["sqlstring", "npm:2.3.3"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["mz", [\ ["npm:2.7.0", {\ "packageLocation": "./.yarn/cache/mz-npm-2.7.0-ec3cef4ec2-8427de0ece.zip/node_modules/mz/",\ "packageDependencies": [\ ["mz", "npm:2.7.0"],\ ["any-promise", "npm:1.3.0"],\ ["object-assign", "npm:4.1.1"],\ ["thenify-all", "npm:1.6.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["named-placeholders", [\ ["npm:1.1.3", {\ "packageLocation": "./.yarn/cache/named-placeholders-npm-1.1.3-1b385febe5-7834adc91e.zip/node_modules/named-placeholders/",\ "packageDependencies": [\ ["named-placeholders", "npm:1.1.3"],\ ["lru-cache", "npm:7.18.3"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["negotiator", [\ ["npm:0.6.3", {\ "packageLocation": "./.yarn/cache/negotiator-npm-0.6.3-9d50e36171-2723fb822a.zip/node_modules/negotiator/",\ "packageDependencies": [\ ["negotiator", "npm:0.6.3"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["node-fetch", [\ ["npm:2.7.0", {\ "packageLocation": "./.yarn/cache/node-fetch-npm-2.7.0-587d57004e-b24f8a3dc9.zip/node_modules/node-fetch/",\ "packageDependencies": [\ ["node-fetch", "npm:2.7.0"]\ ],\ "linkType": "SOFT"\ }],\ ["virtual:fa11e61795b726a547f6d253b85c972e3fc7899198eec724c9462b99e8bc08c156ee0322734f54113b916e8a5365a92e172948ebde82cd6286e868343894536d#npm:2.7.0", {\ "packageLocation": "./.yarn/__virtual__/node-fetch-virtual-1800f216ab/0/cache/node-fetch-npm-2.7.0-587d57004e-b24f8a3dc9.zip/node_modules/node-fetch/",\ "packageDependencies": [\ ["node-fetch", "virtual:fa11e61795b726a547f6d253b85c972e3fc7899198eec724c9462b99e8bc08c156ee0322734f54113b916e8a5365a92e172948ebde82cd6286e868343894536d#npm:2.7.0"],\ ["@types/encoding", null],\ ["encoding", null],\ ["whatwg-url", "npm:5.0.0"]\ ],\ "packagePeers": [\ "@types/encoding",\ "encoding"\ ],\ "linkType": "HARD"\ }]\ ]],\ ["node-gyp", [\ ["npm:10.1.0", {\ "packageLocation": "./.yarn/unplugged/node-gyp-npm-10.1.0-bdea7d2ece/node_modules/node-gyp/",\ "packageDependencies": [\ ["node-gyp", "npm:10.1.0"],\ ["env-paths", "npm:2.2.1"],\ ["exponential-backoff", "npm:3.1.1"],\ ["glob", "npm:10.4.1"],\ ["graceful-fs", "npm:4.2.11"],\ ["make-fetch-happen", "npm:13.0.1"],\ ["nopt", "npm:7.2.1"],\ ["proc-log", "npm:3.0.0"],\ ["semver", "npm:7.6.2"],\ ["tar", "npm:6.2.1"],\ ["which", "npm:4.0.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["nopt", [\ ["npm:7.2.1", {\ "packageLocation": "./.yarn/cache/nopt-npm-7.2.1-635b7da949-95a1f6dec8.zip/node_modules/nopt/",\ "packageDependencies": [\ ["nopt", "npm:7.2.1"],\ ["abbrev", "npm:2.0.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["normalize-path", [\ ["npm:3.0.0", {\ "packageLocation": "./.yarn/cache/normalize-path-npm-3.0.0-658ba7d77f-88eeb4da89.zip/node_modules/normalize-path/",\ "packageDependencies": [\ ["normalize-path", "npm:3.0.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["npm-run-path", [\ ["npm:4.0.1", {\ "packageLocation": "./.yarn/cache/npm-run-path-npm-4.0.1-7aebd8bab3-5374c0cea4.zip/node_modules/npm-run-path/",\ "packageDependencies": [\ ["npm-run-path", "npm:4.0.1"],\ ["path-key", "npm:3.1.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["object-assign", [\ ["npm:4.1.1", {\ "packageLocation": "./.yarn/cache/object-assign-npm-4.1.1-1004ad6dec-fcc6e4ea8c.zip/node_modules/object-assign/",\ "packageDependencies": [\ ["object-assign", "npm:4.1.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["onetime", [\ ["npm:5.1.2", {\ "packageLocation": "./.yarn/cache/onetime-npm-5.1.2-3ed148fa42-e9fd0695a0.zip/node_modules/onetime/",\ "packageDependencies": [\ ["onetime", "npm:5.1.2"],\ ["mimic-fn", "npm:2.1.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["p-map", [\ ["npm:4.0.0", {\ "packageLocation": "./.yarn/cache/p-map-npm-4.0.0-4677ae07c7-7ba4a2b1e2.zip/node_modules/p-map/",\ "packageDependencies": [\ ["p-map", "npm:4.0.0"],\ ["aggregate-error", "npm:3.1.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["path-key", [\ ["npm:3.1.1", {\ "packageLocation": "./.yarn/cache/path-key-npm-3.1.1-0e66ea8321-55cd7a9dd4.zip/node_modules/path-key/",\ "packageDependencies": [\ ["path-key", "npm:3.1.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["path-scurry", [\ ["npm:1.11.1", {\ "packageLocation": "./.yarn/cache/path-scurry-npm-1.11.1-aaf8c339af-5e8845c159.zip/node_modules/path-scurry/",\ "packageDependencies": [\ ["path-scurry", "npm:1.11.1"],\ ["lru-cache", "npm:10.2.2"],\ ["minipass", "npm:7.1.2"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["path-type", [\ ["npm:4.0.0", {\ "packageLocation": "./.yarn/cache/path-type-npm-4.0.0-10d47fc86a-5b1e2daa24.zip/node_modules/path-type/",\ "packageDependencies": [\ ["path-type", "npm:4.0.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["picomatch", [\ ["npm:2.3.1", {\ "packageLocation": "./.yarn/cache/picomatch-npm-2.3.1-c782cfd986-60c2595003.zip/node_modules/picomatch/",\ "packageDependencies": [\ ["picomatch", "npm:2.3.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["pirates", [\ ["npm:4.0.6", {\ "packageLocation": "./.yarn/cache/pirates-npm-4.0.6-a8ec571a43-d02dda76f4.zip/node_modules/pirates/",\ "packageDependencies": [\ ["pirates", "npm:4.0.6"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["postcss-load-config", [\ ["npm:4.0.2", {\ "packageLocation": "./.yarn/cache/postcss-load-config-npm-4.0.2-319bcff9ca-e2c2ed9b79.zip/node_modules/postcss-load-config/",\ "packageDependencies": [\ ["postcss-load-config", "npm:4.0.2"]\ ],\ "linkType": "SOFT"\ }],\ ["virtual:0faf69096413c572ae990b750b17716b4c788277f84f52ae8701f74cbdecaf215d06afc21a6b9f6245c681b5bc8fd5c3102cffb34f993716874d52455d375bee#npm:4.0.2", {\ "packageLocation": "./.yarn/__virtual__/postcss-load-config-virtual-726d9ae716/0/cache/postcss-load-config-npm-4.0.2-319bcff9ca-e2c2ed9b79.zip/node_modules/postcss-load-config/",\ "packageDependencies": [\ ["postcss-load-config", "virtual:0faf69096413c572ae990b750b17716b4c788277f84f52ae8701f74cbdecaf215d06afc21a6b9f6245c681b5bc8fd5c3102cffb34f993716874d52455d375bee#npm:4.0.2"],\ ["@types/postcss", null],\ ["@types/ts-node", null],\ ["lilconfig", "npm:3.1.1"],\ ["postcss", null],\ ["ts-node", null],\ ["yaml", "npm:2.4.2"]\ ],\ "packagePeers": [\ "@types/postcss",\ "@types/ts-node",\ "postcss",\ "ts-node"\ ],\ "linkType": "HARD"\ }]\ ]],\ ["prettier", [\ ["npm:3.2.5", {\ "packageLocation": "./.yarn/unplugged/prettier-npm-3.2.5-6859110d6a/node_modules/prettier/",\ "packageDependencies": [\ ["prettier", "npm:3.2.5"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["proc-log", [\ ["npm:3.0.0", {\ "packageLocation": "./.yarn/cache/proc-log-npm-3.0.0-a8c21c2f0f-02b64e1b39.zip/node_modules/proc-log/",\ "packageDependencies": [\ ["proc-log", "npm:3.0.0"]\ ],\ "linkType": "HARD"\ }],\ ["npm:4.2.0", {\ "packageLocation": "./.yarn/cache/proc-log-npm-4.2.0-4d65296a9d-4e1394491b.zip/node_modules/proc-log/",\ "packageDependencies": [\ ["proc-log", "npm:4.2.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["promise-retry", [\ ["npm:2.0.1", {\ "packageLocation": "./.yarn/cache/promise-retry-npm-2.0.1-871f0b01b7-96e1a82453.zip/node_modules/promise-retry/",\ "packageDependencies": [\ ["promise-retry", "npm:2.0.1"],\ ["err-code", "npm:2.0.3"],\ ["retry", "npm:0.12.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["punycode", [\ ["npm:2.3.1", {\ "packageLocation": "./.yarn/cache/punycode-npm-2.3.1-97543c420d-febdc4362b.zip/node_modules/punycode/",\ "packageDependencies": [\ ["punycode", "npm:2.3.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["queue-microtask", [\ ["npm:1.2.3", {\ "packageLocation": "./.yarn/cache/queue-microtask-npm-1.2.3-fcc98e4e2d-72900df061.zip/node_modules/queue-microtask/",\ "packageDependencies": [\ ["queue-microtask", "npm:1.2.3"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["readdirp", [\ ["npm:3.6.0", {\ "packageLocation": "./.yarn/cache/readdirp-npm-3.6.0-f950cc74ab-196b30ef6c.zip/node_modules/readdirp/",\ "packageDependencies": [\ ["readdirp", "npm:3.6.0"],\ ["picomatch", "npm:2.3.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["resolve-from", [\ ["npm:5.0.0", {\ "packageLocation": "./.yarn/cache/resolve-from-npm-5.0.0-15c9db4d33-be18a5e4d7.zip/node_modules/resolve-from/",\ "packageDependencies": [\ ["resolve-from", "npm:5.0.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["retry", [\ ["npm:0.12.0", {\ "packageLocation": "./.yarn/cache/retry-npm-0.12.0-72ac7fb4cc-1f914879f9.zip/node_modules/retry/",\ "packageDependencies": [\ ["retry", "npm:0.12.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["reusify", [\ ["npm:1.0.4", {\ "packageLocation": "./.yarn/cache/reusify-npm-1.0.4-95ac4aec11-14222c9e1d.zip/node_modules/reusify/",\ "packageDependencies": [\ ["reusify", "npm:1.0.4"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["rollup", [\ ["npm:4.18.0", {\ "packageLocation": "./.yarn/cache/rollup-npm-4.18.0-9eadb97a09-2320fe653c.zip/node_modules/rollup/",\ "packageDependencies": [\ ["rollup", "npm:4.18.0"],\ ["@rollup/rollup-android-arm-eabi", "npm:4.18.0"],\ ["@rollup/rollup-android-arm64", "npm:4.18.0"],\ ["@rollup/rollup-darwin-arm64", "npm:4.18.0"],\ ["@rollup/rollup-darwin-x64", "npm:4.18.0"],\ ["@rollup/rollup-linux-arm-gnueabihf", "npm:4.18.0"],\ ["@rollup/rollup-linux-arm-musleabihf", "npm:4.18.0"],\ ["@rollup/rollup-linux-arm64-gnu", "npm:4.18.0"],\ ["@rollup/rollup-linux-arm64-musl", "npm:4.18.0"],\ ["@rollup/rollup-linux-powerpc64le-gnu", "npm:4.18.0"],\ ["@rollup/rollup-linux-riscv64-gnu", "npm:4.18.0"],\ ["@rollup/rollup-linux-s390x-gnu", "npm:4.18.0"],\ ["@rollup/rollup-linux-x64-gnu", "npm:4.18.0"],\ ["@rollup/rollup-linux-x64-musl", "npm:4.18.0"],\ ["@rollup/rollup-win32-arm64-msvc", "npm:4.18.0"],\ ["@rollup/rollup-win32-ia32-msvc", "npm:4.18.0"],\ ["@rollup/rollup-win32-x64-msvc", "npm:4.18.0"],\ ["@types/estree", "npm:1.0.5"],\ ["fsevents", "patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["run-parallel", [\ ["npm:1.2.0", {\ "packageLocation": "./.yarn/cache/run-parallel-npm-1.2.0-3f47ff2034-cb4f97ad25.zip/node_modules/run-parallel/",\ "packageDependencies": [\ ["run-parallel", "npm:1.2.0"],\ ["queue-microtask", "npm:1.2.3"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["safer-buffer", [\ ["npm:2.1.2", {\ "packageLocation": "./.yarn/cache/safer-buffer-npm-2.1.2-8d5c0b705e-7eaf7a0cf3.zip/node_modules/safer-buffer/",\ "packageDependencies": [\ ["safer-buffer", "npm:2.1.2"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["semver", [\ ["npm:7.6.2", {\ "packageLocation": "./.yarn/cache/semver-npm-7.6.2-0fec6944bb-296b17d027.zip/node_modules/semver/",\ "packageDependencies": [\ ["semver", "npm:7.6.2"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["seq-queue", [\ ["npm:0.0.5", {\ "packageLocation": "./.yarn/cache/seq-queue-npm-0.0.5-d5064d9793-fa302e3b2a.zip/node_modules/seq-queue/",\ "packageDependencies": [\ ["seq-queue", "npm:0.0.5"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["shebang-command", [\ ["npm:2.0.0", {\ "packageLocation": "./.yarn/cache/shebang-command-npm-2.0.0-eb2b01921d-6b52fe8727.zip/node_modules/shebang-command/",\ "packageDependencies": [\ ["shebang-command", "npm:2.0.0"],\ ["shebang-regex", "npm:3.0.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["shebang-regex", [\ ["npm:3.0.0", {\ "packageLocation": "./.yarn/cache/shebang-regex-npm-3.0.0-899a0cd65e-1a2bcae50d.zip/node_modules/shebang-regex/",\ "packageDependencies": [\ ["shebang-regex", "npm:3.0.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["signal-exit", [\ ["npm:3.0.7", {\ "packageLocation": "./.yarn/cache/signal-exit-npm-3.0.7-bd270458a3-a2f098f247.zip/node_modules/signal-exit/",\ "packageDependencies": [\ ["signal-exit", "npm:3.0.7"]\ ],\ "linkType": "HARD"\ }],\ ["npm:4.1.0", {\ "packageLocation": "./.yarn/cache/signal-exit-npm-4.1.0-61fb957687-c9fa63bbbd.zip/node_modules/signal-exit/",\ "packageDependencies": [\ ["signal-exit", "npm:4.1.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["slash", [\ ["npm:3.0.0", {\ "packageLocation": "./.yarn/cache/slash-npm-3.0.0-b87de2279a-94a93fff61.zip/node_modules/slash/",\ "packageDependencies": [\ ["slash", "npm:3.0.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["smart-buffer", [\ ["npm:4.2.0", {\ "packageLocation": "./.yarn/cache/smart-buffer-npm-4.2.0-5ac3f668bb-927484aa0b.zip/node_modules/smart-buffer/",\ "packageDependencies": [\ ["smart-buffer", "npm:4.2.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["socks", [\ ["npm:2.8.3", {\ "packageLocation": "./.yarn/cache/socks-npm-2.8.3-3532b59899-ffcb622c22.zip/node_modules/socks/",\ "packageDependencies": [\ ["socks", "npm:2.8.3"],\ ["ip-address", "npm:9.0.5"],\ ["smart-buffer", "npm:4.2.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["socks-proxy-agent", [\ ["npm:8.0.3", {\ "packageLocation": "./.yarn/cache/socks-proxy-agent-npm-8.0.3-30471cff1b-c2112c66d6.zip/node_modules/socks-proxy-agent/",\ "packageDependencies": [\ ["socks-proxy-agent", "npm:8.0.3"],\ ["agent-base", "npm:7.1.1"],\ ["debug", "virtual:c9e1a4b59e37cb479517edede3bf2093b28c0ca1a9d0e517f3c345075bd1e468980b94b4957e389116607ee7155441dfd7d09e19a4229d5d09bcf06244401590#npm:4.3.4"],\ ["socks", "npm:2.8.3"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["source-map", [\ ["npm:0.8.0-beta.0", {\ "packageLocation": "./.yarn/cache/source-map-npm-0.8.0-beta.0-688a309e94-c02e22ab9f.zip/node_modules/source-map/",\ "packageDependencies": [\ ["source-map", "npm:0.8.0-beta.0"],\ ["whatwg-url", "npm:7.1.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["sprintf-js", [\ ["npm:1.1.3", {\ "packageLocation": "./.yarn/cache/sprintf-js-npm-1.1.3-b99efd75b2-e7587128c4.zip/node_modules/sprintf-js/",\ "packageDependencies": [\ ["sprintf-js", "npm:1.1.3"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["sqlstring", [\ ["npm:2.3.3", {\ "packageLocation": "./.yarn/cache/sqlstring-npm-2.3.3-2db6939570-4e5a25af2d.zip/node_modules/sqlstring/",\ "packageDependencies": [\ ["sqlstring", "npm:2.3.3"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["ssri", [\ ["npm:10.0.6", {\ "packageLocation": "./.yarn/cache/ssri-npm-10.0.6-6b8eaec5ce-f92c1b3cc9.zip/node_modules/ssri/",\ "packageDependencies": [\ ["ssri", "npm:10.0.6"],\ ["minipass", "npm:7.1.2"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["string-width", [\ ["npm:4.2.3", {\ "packageLocation": "./.yarn/cache/string-width-npm-4.2.3-2c27177bae-e52c10dc3f.zip/node_modules/string-width/",\ "packageDependencies": [\ ["string-width", "npm:4.2.3"],\ ["emoji-regex", "npm:8.0.0"],\ ["is-fullwidth-code-point", "npm:3.0.0"],\ ["strip-ansi", "npm:6.0.1"]\ ],\ "linkType": "HARD"\ }],\ ["npm:5.1.2", {\ "packageLocation": "./.yarn/cache/string-width-npm-5.1.2-bf60531341-7369deaa29.zip/node_modules/string-width/",\ "packageDependencies": [\ ["string-width", "npm:5.1.2"],\ ["eastasianwidth", "npm:0.2.0"],\ ["emoji-regex", "npm:9.2.2"],\ ["strip-ansi", "npm:7.1.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["strip-ansi", [\ ["npm:6.0.1", {\ "packageLocation": "./.yarn/cache/strip-ansi-npm-6.0.1-caddc7cb40-ae3b5436d3.zip/node_modules/strip-ansi/",\ "packageDependencies": [\ ["strip-ansi", "npm:6.0.1"],\ ["ansi-regex", "npm:5.0.1"]\ ],\ "linkType": "HARD"\ }],\ ["npm:7.1.0", {\ "packageLocation": "./.yarn/cache/strip-ansi-npm-7.1.0-7453b80b79-475f53e9c4.zip/node_modules/strip-ansi/",\ "packageDependencies": [\ ["strip-ansi", "npm:7.1.0"],\ ["ansi-regex", "npm:6.0.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["strip-final-newline", [\ ["npm:2.0.0", {\ "packageLocation": "./.yarn/cache/strip-final-newline-npm-2.0.0-340c4f7c66-69412b5e25.zip/node_modules/strip-final-newline/",\ "packageDependencies": [\ ["strip-final-newline", "npm:2.0.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["sucrase", [\ ["npm:3.35.0", {\ "packageLocation": "./.yarn/cache/sucrase-npm-3.35.0-60ad876a0c-bc601558a6.zip/node_modules/sucrase/",\ "packageDependencies": [\ ["sucrase", "npm:3.35.0"],\ ["@jridgewell/gen-mapping", "npm:0.3.5"],\ ["commander", "npm:4.1.1"],\ ["glob", "npm:10.4.1"],\ ["lines-and-columns", "npm:1.2.4"],\ ["mz", "npm:2.7.0"],\ ["pirates", "npm:4.0.6"],\ ["ts-interface-checker", "npm:0.1.13"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["tar", [\ ["npm:6.2.1", {\ "packageLocation": "./.yarn/cache/tar-npm-6.2.1-237800bb20-bfbfbb2861.zip/node_modules/tar/",\ "packageDependencies": [\ ["tar", "npm:6.2.1"],\ ["chownr", "npm:2.0.0"],\ ["fs-minipass", "npm:2.1.0"],\ ["minipass", "npm:5.0.0"],\ ["minizlib", "npm:2.1.2"],\ ["mkdirp", "npm:1.0.4"],\ ["yallist", "npm:4.0.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["thenify", [\ ["npm:3.3.1", {\ "packageLocation": "./.yarn/cache/thenify-npm-3.3.1-030bedb22c-486e1283a8.zip/node_modules/thenify/",\ "packageDependencies": [\ ["thenify", "npm:3.3.1"],\ ["any-promise", "npm:1.3.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["thenify-all", [\ ["npm:1.6.0", {\ "packageLocation": "./.yarn/cache/thenify-all-npm-1.6.0-96309bbc8b-dba7cc8a23.zip/node_modules/thenify-all/",\ "packageDependencies": [\ ["thenify-all", "npm:1.6.0"],\ ["thenify", "npm:3.3.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["to-regex-range", [\ ["npm:5.0.1", {\ "packageLocation": "./.yarn/cache/to-regex-range-npm-5.0.1-f1e8263b00-10dda13571.zip/node_modules/to-regex-range/",\ "packageDependencies": [\ ["to-regex-range", "npm:5.0.1"],\ ["is-number", "npm:7.0.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["tr46", [\ ["npm:0.0.3", {\ "packageLocation": "./.yarn/cache/tr46-npm-0.0.3-de53018915-8f1f5aa6cb.zip/node_modules/tr46/",\ "packageDependencies": [\ ["tr46", "npm:0.0.3"]\ ],\ "linkType": "HARD"\ }],\ ["npm:1.0.1", {\ "packageLocation": "./.yarn/cache/tr46-npm-1.0.1-9547f343a4-6e80d75480.zip/node_modules/tr46/",\ "packageDependencies": [\ ["tr46", "npm:1.0.1"],\ ["punycode", "npm:2.3.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["tree-kill", [\ ["npm:1.2.2", {\ "packageLocation": "./.yarn/cache/tree-kill-npm-1.2.2-3da0e5a759-49117f5f41.zip/node_modules/tree-kill/",\ "packageDependencies": [\ ["tree-kill", "npm:1.2.2"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["ts-interface-checker", [\ ["npm:0.1.13", {\ "packageLocation": "./.yarn/cache/ts-interface-checker-npm-0.1.13-0c7b064494-9f7346b9e2.zip/node_modules/ts-interface-checker/",\ "packageDependencies": [\ ["ts-interface-checker", "npm:0.1.13"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["ts-mixer", [\ ["npm:6.0.4", {\ "packageLocation": "./.yarn/cache/ts-mixer-npm-6.0.4-5d9747bdf5-f20571a4a4.zip/node_modules/ts-mixer/",\ "packageDependencies": [\ ["ts-mixer", "npm:6.0.4"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["ts-node", [\ ["npm:10.9.2", {\ "packageLocation": "./.yarn/cache/ts-node-npm-10.9.2-3f3890b9ac-a91a15b3c9.zip/node_modules/ts-node/",\ "packageDependencies": [\ ["ts-node", "npm:10.9.2"]\ ],\ "linkType": "SOFT"\ }],\ ["virtual:df417fa6ed58592061b3cdd25305c567cb83e355f566a3f712cecb8d4e6c4814c3ed842a030a9c3a51e2de30e93ecf82143ea19accc29756c7a7ac08166c7416#npm:10.9.2", {\ "packageLocation": "./.yarn/__virtual__/ts-node-virtual-00de070401/0/cache/ts-node-npm-10.9.2-3f3890b9ac-a91a15b3c9.zip/node_modules/ts-node/",\ "packageDependencies": [\ ["ts-node", "virtual:df417fa6ed58592061b3cdd25305c567cb83e355f566a3f712cecb8d4e6c4814c3ed842a030a9c3a51e2de30e93ecf82143ea19accc29756c7a7ac08166c7416#npm:10.9.2"],\ ["@cspotcode/source-map-support", "npm:0.8.1"],\ ["@swc/core", null],\ ["@swc/wasm", null],\ ["@tsconfig/node10", "npm:1.0.9"],\ ["@tsconfig/node12", "npm:1.0.11"],\ ["@tsconfig/node14", "npm:1.0.3"],\ ["@tsconfig/node16", "npm:1.0.4"],\ ["@types/node", "npm:20.12.13"],\ ["@types/swc__core", null],\ ["@types/swc__wasm", null],\ ["@types/typescript", null],\ ["acorn", "npm:8.10.0"],\ ["acorn-walk", "npm:8.2.0"],\ ["arg", "npm:4.1.3"],\ ["create-require", "npm:1.1.1"],\ ["diff", "npm:4.0.2"],\ ["make-error", "npm:1.3.6"],\ ["typescript", "patch:typescript@npm%3A5.4.5#optional!builtin::version=5.4.5&hash=5adc0c"],\ ["v8-compile-cache-lib", "npm:3.0.1"],\ ["yn", "npm:3.1.1"]\ ],\ "packagePeers": [\ "@swc/core",\ "@swc/wasm",\ "@types/node",\ "@types/swc__core",\ "@types/swc__wasm",\ "@types/typescript",\ "typescript"\ ],\ "linkType": "HARD"\ }]\ ]],\ ["tslib", [\ ["npm:2.6.2", {\ "packageLocation": "./.yarn/cache/tslib-npm-2.6.2-4fc8c068d9-bd26c22d36.zip/node_modules/tslib/",\ "packageDependencies": [\ ["tslib", "npm:2.6.2"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["tsup", [\ ["npm:8.0.2", {\ "packageLocation": "./.yarn/cache/tsup-npm-8.0.2-86e40f68a7-dd8c375181.zip/node_modules/tsup/",\ "packageDependencies": [\ ["tsup", "npm:8.0.2"]\ ],\ "linkType": "SOFT"\ }],\ ["virtual:df417fa6ed58592061b3cdd25305c567cb83e355f566a3f712cecb8d4e6c4814c3ed842a030a9c3a51e2de30e93ecf82143ea19accc29756c7a7ac08166c7416#npm:8.0.2", {\ "packageLocation": "./.yarn/__virtual__/tsup-virtual-0faf690964/0/cache/tsup-npm-8.0.2-86e40f68a7-dd8c375181.zip/node_modules/tsup/",\ "packageDependencies": [\ ["tsup", "virtual:df417fa6ed58592061b3cdd25305c567cb83e355f566a3f712cecb8d4e6c4814c3ed842a030a9c3a51e2de30e93ecf82143ea19accc29756c7a7ac08166c7416#npm:8.0.2"],\ ["@microsoft/api-extractor", null],\ ["@swc/core", null],\ ["@types/microsoft__api-extractor", null],\ ["@types/postcss", null],\ ["@types/swc__core", null],\ ["@types/typescript", null],\ ["bundle-require", "virtual:0faf69096413c572ae990b750b17716b4c788277f84f52ae8701f74cbdecaf215d06afc21a6b9f6245c681b5bc8fd5c3102cffb34f993716874d52455d375bee#npm:4.1.0"],\ ["cac", "npm:6.7.14"],\ ["chokidar", "npm:3.6.0"],\ ["debug", "virtual:c9e1a4b59e37cb479517edede3bf2093b28c0ca1a9d0e517f3c345075bd1e468980b94b4957e389116607ee7155441dfd7d09e19a4229d5d09bcf06244401590#npm:4.3.4"],\ ["esbuild", "npm:0.19.12"],\ ["execa", "npm:5.1.1"],\ ["globby", "npm:11.1.0"],\ ["joycon", "npm:3.1.1"],\ ["postcss", null],\ ["postcss-load-config", "virtual:0faf69096413c572ae990b750b17716b4c788277f84f52ae8701f74cbdecaf215d06afc21a6b9f6245c681b5bc8fd5c3102cffb34f993716874d52455d375bee#npm:4.0.2"],\ ["resolve-from", "npm:5.0.0"],\ ["rollup", "npm:4.18.0"],\ ["source-map", "npm:0.8.0-beta.0"],\ ["sucrase", "npm:3.35.0"],\ ["tree-kill", "npm:1.2.2"],\ ["typescript", "patch:typescript@npm%3A5.4.5#optional!builtin::version=5.4.5&hash=5adc0c"]\ ],\ "packagePeers": [\ "@microsoft/api-extractor",\ "@swc/core",\ "@types/microsoft__api-extractor",\ "@types/postcss",\ "@types/swc__core",\ "@types/typescript",\ "postcss",\ "typescript"\ ],\ "linkType": "HARD"\ }]\ ]],\ ["typescript", [\ ["patch:typescript@npm%3A5.4.5#optional!builtin::version=5.4.5&hash=5adc0c", {\ "packageLocation": "./.yarn/cache/typescript-patch-6e159bfddb-760f7d92fb.zip/node_modules/typescript/",\ "packageDependencies": [\ ["typescript", "patch:typescript@npm%3A5.4.5#optional!builtin::version=5.4.5&hash=5adc0c"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["undici", [\ ["npm:6.13.0", {\ "packageLocation": "./.yarn/cache/undici-npm-6.13.0-1545cd855e-4ec2038e95.zip/node_modules/undici/",\ "packageDependencies": [\ ["undici", "npm:6.13.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["undici-types", [\ ["npm:5.26.5", {\ "packageLocation": "./.yarn/cache/undici-types-npm-5.26.5-de4f7c7bb9-0097779d94.zip/node_modules/undici-types/",\ "packageDependencies": [\ ["undici-types", "npm:5.26.5"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["unique-filename", [\ ["npm:3.0.0", {\ "packageLocation": "./.yarn/cache/unique-filename-npm-3.0.0-77d68e0a45-8e2f59b356.zip/node_modules/unique-filename/",\ "packageDependencies": [\ ["unique-filename", "npm:3.0.0"],\ ["unique-slug", "npm:4.0.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["unique-slug", [\ ["npm:4.0.0", {\ "packageLocation": "./.yarn/cache/unique-slug-npm-4.0.0-e6b08f28aa-40912a8963.zip/node_modules/unique-slug/",\ "packageDependencies": [\ ["unique-slug", "npm:4.0.0"],\ ["imurmurhash", "npm:0.1.4"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["v8-compile-cache-lib", [\ ["npm:3.0.1", {\ "packageLocation": "./.yarn/cache/v8-compile-cache-lib-npm-3.0.1-4886071ece-88d3423a52.zip/node_modules/v8-compile-cache-lib/",\ "packageDependencies": [\ ["v8-compile-cache-lib", "npm:3.0.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["webidl-conversions", [\ ["npm:3.0.1", {\ "packageLocation": "./.yarn/cache/webidl-conversions-npm-3.0.1-60310f6a2b-b65b9f8d68.zip/node_modules/webidl-conversions/",\ "packageDependencies": [\ ["webidl-conversions", "npm:3.0.1"]\ ],\ "linkType": "HARD"\ }],\ ["npm:4.0.2", {\ "packageLocation": "./.yarn/cache/webidl-conversions-npm-4.0.2-1d159e6409-594187c36f.zip/node_modules/webidl-conversions/",\ "packageDependencies": [\ ["webidl-conversions", "npm:4.0.2"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["whatwg-url", [\ ["npm:5.0.0", {\ "packageLocation": "./.yarn/cache/whatwg-url-npm-5.0.0-374fb45e60-f95adbc1e8.zip/node_modules/whatwg-url/",\ "packageDependencies": [\ ["whatwg-url", "npm:5.0.0"],\ ["tr46", "npm:0.0.3"],\ ["webidl-conversions", "npm:3.0.1"]\ ],\ "linkType": "HARD"\ }],\ ["npm:7.1.0", {\ "packageLocation": "./.yarn/cache/whatwg-url-npm-7.1.0-d6cae01571-769fd35838.zip/node_modules/whatwg-url/",\ "packageDependencies": [\ ["whatwg-url", "npm:7.1.0"],\ ["lodash.sortby", "npm:4.7.0"],\ ["tr46", "npm:1.0.1"],\ ["webidl-conversions", "npm:4.0.2"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["which", [\ ["npm:2.0.2", {\ "packageLocation": "./.yarn/cache/which-npm-2.0.2-320ddf72f7-4782f8a1d6.zip/node_modules/which/",\ "packageDependencies": [\ ["which", "npm:2.0.2"],\ ["isexe", "npm:2.0.0"]\ ],\ "linkType": "HARD"\ }],\ ["npm:4.0.0", {\ "packageLocation": "./.yarn/cache/which-npm-4.0.0-dd31cd4928-f17e84c042.zip/node_modules/which/",\ "packageDependencies": [\ ["which", "npm:4.0.0"],\ ["isexe", "npm:3.1.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["wrap-ansi", [\ ["npm:7.0.0", {\ "packageLocation": "./.yarn/cache/wrap-ansi-npm-7.0.0-ad6e1a0554-cebdaeca3a.zip/node_modules/wrap-ansi/",\ "packageDependencies": [\ ["wrap-ansi", "npm:7.0.0"],\ ["ansi-styles", "npm:4.3.0"],\ ["string-width", "npm:4.2.3"],\ ["strip-ansi", "npm:6.0.1"]\ ],\ "linkType": "HARD"\ }],\ ["npm:8.1.0", {\ "packageLocation": "./.yarn/cache/wrap-ansi-npm-8.1.0-26a4e6ae28-7b1e4b35e9.zip/node_modules/wrap-ansi/",\ "packageDependencies": [\ ["wrap-ansi", "npm:8.1.0"],\ ["ansi-styles", "npm:6.2.1"],\ ["string-width", "npm:5.1.2"],\ ["strip-ansi", "npm:7.1.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["ws", [\ ["npm:8.17.0", {\ "packageLocation": "./.yarn/cache/ws-npm-8.17.0-05fb441faf-5e1dcb0ae7.zip/node_modules/ws/",\ "packageDependencies": [\ ["ws", "npm:8.17.0"]\ ],\ "linkType": "SOFT"\ }],\ ["virtual:47c747948f96313da6c7946702cdba2c18a8685837a36a7287080e5f18f6fee4617eb50e817ea4ebda43cd84cdd254bdce732053a778d0bce2b95039ca131da1#npm:8.17.0", {\ "packageLocation": "./.yarn/__virtual__/ws-virtual-3cbecf313d/0/cache/ws-npm-8.17.0-05fb441faf-5e1dcb0ae7.zip/node_modules/ws/",\ "packageDependencies": [\ ["ws", "virtual:47c747948f96313da6c7946702cdba2c18a8685837a36a7287080e5f18f6fee4617eb50e817ea4ebda43cd84cdd254bdce732053a778d0bce2b95039ca131da1#npm:8.17.0"],\ ["@types/bufferutil", null],\ ["@types/utf-8-validate", null],\ ["bufferutil", null],\ ["utf-8-validate", null]\ ],\ "packagePeers": [\ "@types/bufferutil",\ "@types/utf-8-validate",\ "bufferutil",\ "utf-8-validate"\ ],\ "linkType": "HARD"\ }]\ ]],\ ["yallist", [\ ["npm:4.0.0", {\ "packageLocation": "./.yarn/cache/yallist-npm-4.0.0-b493d9e907-4cb02b42b8.zip/node_modules/yallist/",\ "packageDependencies": [\ ["yallist", "npm:4.0.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["yaml", [\ ["npm:2.4.2", {\ "packageLocation": "./.yarn/cache/yaml-npm-2.4.2-5c2ee7f06c-6eafbcd68d.zip/node_modules/yaml/",\ "packageDependencies": [\ ["yaml", "npm:2.4.2"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["yn", [\ ["npm:3.1.1", {\ "packageLocation": "./.yarn/cache/yn-npm-3.1.1-8ad4259784-2c487b0e14.zip/node_modules/yn/",\ "packageDependencies": [\ ["yn", "npm:3.1.1"]\ ],\ "linkType": "HARD"\ }]\ ]]\ ]\ }' function $$SETUP_STATE(hydrateRuntimeState, basePath) { return hydrateRuntimeState(JSON.parse(RAW_RUNTIME_STATE), { basePath: basePath || __dirname, }) } const fs = require('fs') const path = require('path') const crypto = require('crypto') const os = require('os') const events = require('events') const nodeUtils = require('util') const stream = require('stream') const zlib = require('zlib') const require$$0 = require('module') const StringDecoder = require('string_decoder') const url = require('url') const buffer = require('buffer') const readline = require('readline') const assert = require('assert') const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e } function _interopNamespace(e) { if (e && e.__esModule) return e const n = Object.create(null) if (e) { for (const k in e) { if (k !== 'default') { const d = Object.getOwnPropertyDescriptor(e, k) Object.defineProperty( n, k, d.get ? d : { enumerable: true, get: () => e[k], }, ) } } } n.default = e return Object.freeze(n) } const fs__default = /*#__PURE__*/ _interopDefaultLegacy(fs) const path__default = /*#__PURE__*/ _interopDefaultLegacy(path) const nodeUtils__namespace = /*#__PURE__*/ _interopNamespace(nodeUtils) const zlib__default = /*#__PURE__*/ _interopDefaultLegacy(zlib) const require$$0__default = /*#__PURE__*/ _interopDefaultLegacy(require$$0) const StringDecoder__default = /*#__PURE__*/ _interopDefaultLegacy(StringDecoder) const buffer__default = /*#__PURE__*/ _interopDefaultLegacy(buffer) const assert__default = /*#__PURE__*/ _interopDefaultLegacy(assert) const S_IFMT = 61440 const S_IFDIR = 16384 const S_IFREG = 32768 const S_IFLNK = 40960 const SAFE_TIME = 456789e3 function makeError$1(code, message) { return Object.assign(new Error(`${code}: ${message}`), { code }) } function EBUSY(message) { return makeError$1(`EBUSY`, message) } function ENOSYS(message, reason) { return makeError$1(`ENOSYS`, `${message}, ${reason}`) } function EINVAL(reason) { return makeError$1(`EINVAL`, `invalid argument, ${reason}`) } function EBADF(reason) { return makeError$1(`EBADF`, `bad file descriptor, ${reason}`) } function ENOENT(reason) { return makeError$1(`ENOENT`, `no such file or directory, ${reason}`) } function ENOTDIR(reason) { return makeError$1(`ENOTDIR`, `not a directory, ${reason}`) } function EISDIR(reason) { return makeError$1(`EISDIR`, `illegal operation on a directory, ${reason}`) } function EEXIST(reason) { return makeError$1(`EEXIST`, `file already exists, ${reason}`) } function EROFS(reason) { return makeError$1(`EROFS`, `read-only filesystem, ${reason}`) } function ENOTEMPTY(reason) { return makeError$1(`ENOTEMPTY`, `directory not empty, ${reason}`) } function EOPNOTSUPP(reason) { return makeError$1(`EOPNOTSUPP`, `operation not supported, ${reason}`) } function ERR_DIR_CLOSED() { return makeError$1(`ERR_DIR_CLOSED`, `Directory handle was closed`) } const DEFAULT_MODE = S_IFREG | 420 class StatEntry { constructor() { this.uid = 0 this.gid = 0 this.size = 0 this.blksize = 0 this.atimeMs = 0 this.mtimeMs = 0 this.ctimeMs = 0 this.birthtimeMs = 0 this.atime = new Date(0) this.mtime = new Date(0) this.ctime = new Date(0) this.birthtime = new Date(0) this.dev = 0 this.ino = 0 this.mode = DEFAULT_MODE this.nlink = 1 this.rdev = 0 this.blocks = 1 } isBlockDevice() { return false } isCharacterDevice() { return false } isDirectory() { return (this.mode & S_IFMT) === S_IFDIR } isFIFO() { return false } isFile() { return (this.mode & S_IFMT) === S_IFREG } isSocket() { return false } isSymbolicLink() { return (this.mode & S_IFMT) === S_IFLNK } } class BigIntStatsEntry { constructor() { this.uid = BigInt(0) this.gid = BigInt(0) this.size = BigInt(0) this.blksize = BigInt(0) this.atimeMs = BigInt(0) this.mtimeMs = BigInt(0) this.ctimeMs = BigInt(0) this.birthtimeMs = BigInt(0) this.atimeNs = BigInt(0) this.mtimeNs = BigInt(0) this.ctimeNs = BigInt(0) this.birthtimeNs = BigInt(0) this.atime = new Date(0) this.mtime = new Date(0) this.ctime = new Date(0) this.birthtime = new Date(0) this.dev = BigInt(0) this.ino = BigInt(0) this.mode = BigInt(DEFAULT_MODE) this.nlink = BigInt(1) this.rdev = BigInt(0) this.blocks = BigInt(1) } isBlockDevice() { return false } isCharacterDevice() { return false } isDirectory() { return (this.mode & BigInt(S_IFMT)) === BigInt(S_IFDIR) } isFIFO() { return false } isFile() { return (this.mode & BigInt(S_IFMT)) === BigInt(S_IFREG) } isSocket() { return false } isSymbolicLink() { return (this.mode & BigInt(S_IFMT)) === BigInt(S_IFLNK) } } function makeDefaultStats() { return new StatEntry() } function clearStats(stats) { for (const key in stats) { if (Object.hasOwn(stats, key)) { const element = stats[key] if (typeof element === `number`) { stats[key] = 0 } else if (typeof element === `bigint`) { stats[key] = BigInt(0) } else if (nodeUtils__namespace.types.isDate(element)) { stats[key] = new Date(0) } } } return stats } function convertToBigIntStats(stats) { const bigintStats = new BigIntStatsEntry() for (const key in stats) { if (Object.hasOwn(stats, key)) { const element = stats[key] if (typeof element === `number`) { bigintStats[key] = BigInt(element) } else if (nodeUtils__namespace.types.isDate(element)) { bigintStats[key] = new Date(element) } } } bigintStats.atimeNs = bigintStats.atimeMs * BigInt(1e6) bigintStats.mtimeNs = bigintStats.mtimeMs * BigInt(1e6) bigintStats.ctimeNs = bigintStats.ctimeMs * BigInt(1e6) bigintStats.birthtimeNs = bigintStats.birthtimeMs * BigInt(1e6) return bigintStats } function areStatsEqual(a, b) { if (a.atimeMs !== b.atimeMs) return false if (a.birthtimeMs !== b.birthtimeMs) return false if (a.blksize !== b.blksize) return false if (a.blocks !== b.blocks) return false if (a.ctimeMs !== b.ctimeMs) return false if (a.dev !== b.dev) return false if (a.gid !== b.gid) return false if (a.ino !== b.ino) return false if (a.isBlockDevice() !== b.isBlockDevice()) return false if (a.isCharacterDevice() !== b.isCharacterDevice()) return false if (a.isDirectory() !== b.isDirectory()) return false if (a.isFIFO() !== b.isFIFO()) return false if (a.isFile() !== b.isFile()) return false if (a.isSocket() !== b.isSocket()) return false if (a.isSymbolicLink() !== b.isSymbolicLink()) return false if (a.mode !== b.mode) return false if (a.mtimeMs !== b.mtimeMs) return false if (a.nlink !== b.nlink) return false if (a.rdev !== b.rdev) return false if (a.size !== b.size) return false if (a.uid !== b.uid) return false const aN = a const bN = b if (aN.atimeNs !== bN.atimeNs) return false if (aN.mtimeNs !== bN.mtimeNs) return false if (aN.ctimeNs !== bN.ctimeNs) return false if (aN.birthtimeNs !== bN.birthtimeNs) return false return true } const PortablePath = { root: `/`, dot: `.`, parent: `..`, } const Filename = { home: `~`, nodeModules: `node_modules`, manifest: `package.json`, lockfile: `yarn.lock`, virtual: `__virtual__`, pnpJs: `.pnp.js`, pnpCjs: `.pnp.cjs`, pnpData: `.pnp.data.json`, pnpEsmLoader: `.pnp.loader.mjs`, rc: `.yarnrc.yml`, env: `.env`, } const npath = Object.create(path__default.default) const ppath = Object.create(path__default.default.posix) npath.cwd = () => process.cwd() ppath.cwd = process.platform === `win32` ? () => toPortablePath(process.cwd()) : process.cwd if (process.platform === `win32`) { ppath.resolve = (...segments) => { if (segments.length > 0 && ppath.isAbsolute(segments[0])) { return path__default.default.posix.resolve(...segments) } else { return path__default.default.posix.resolve(ppath.cwd(), ...segments) } } } const contains = function (pathUtils, from, to) { from = pathUtils.normalize(from) to = pathUtils.normalize(to) if (from === to) return `.` if (!from.endsWith(pathUtils.sep)) from = from + pathUtils.sep if (to.startsWith(from)) { return to.slice(from.length) } else { return null } } npath.contains = (from, to) => contains(npath, from, to) ppath.contains = (from, to) => contains(ppath, from, to) const WINDOWS_PATH_REGEXP = /^([a-zA-Z]:.*)$/ const UNC_WINDOWS_PATH_REGEXP = /^\/\/(\.\/)?(.*)$/ const PORTABLE_PATH_REGEXP = /^\/([a-zA-Z]:.*)$/ const UNC_PORTABLE_PATH_REGEXP = /^\/unc\/(\.dot\/)?(.*)$/ function fromPortablePathWin32(p) { let portablePathMatch, uncPortablePathMatch if ((portablePathMatch = p.match(PORTABLE_PATH_REGEXP))) p = portablePathMatch[1] else if ((uncPortablePathMatch = p.match(UNC_PORTABLE_PATH_REGEXP))) p = `\\\\${uncPortablePathMatch[1] ? `.\\` : ``}${uncPortablePathMatch[2]}` else return p return p.replace(/\//g, `\\`) } function toPortablePathWin32(p) { p = p.replace(/\\/g, `/`) let windowsPathMatch, uncWindowsPathMatch if ((windowsPathMatch = p.match(WINDOWS_PATH_REGEXP))) p = `/${windowsPathMatch[1]}` else if ((uncWindowsPathMatch = p.match(UNC_WINDOWS_PATH_REGEXP))) p = `/unc/${uncWindowsPathMatch[1] ? `.dot/` : ``}${uncWindowsPathMatch[2]}` return p } const toPortablePath = process.platform === `win32` ? toPortablePathWin32 : p => p const fromPortablePath = process.platform === `win32` ? fromPortablePathWin32 : p => p npath.fromPortablePath = fromPortablePath npath.toPortablePath = toPortablePath function convertPath(targetPathUtils, sourcePath) { return targetPathUtils === npath ? fromPortablePath(sourcePath) : toPortablePath(sourcePath) } const defaultTime = new Date(SAFE_TIME * 1e3) const defaultTimeMs = defaultTime.getTime() async function copyPromise(destinationFs, destination, sourceFs, source, opts) { const normalizedDestination = destinationFs.pathUtils.normalize(destination) const normalizedSource = sourceFs.pathUtils.normalize(source) const prelayout = [] const postlayout = [] const { atime, mtime } = opts.stableTime ? { atime: defaultTime, mtime: defaultTime } : await sourceFs.lstatPromise(normalizedSource) await destinationFs.mkdirpPromise( destinationFs.pathUtils.dirname(destination), { utimes: [atime, mtime] }, ) await copyImpl( prelayout, postlayout, destinationFs, normalizedDestination, sourceFs, normalizedSource, { ...opts, didParentExist: true }, ) for (const operation of prelayout) await operation() await Promise.all( postlayout.map(operation => { return operation() }), ) } async function copyImpl( prelayout, postlayout, destinationFs, destination, sourceFs, source, opts, ) { const destinationStat = opts.didParentExist ? await maybeLStat(destinationFs, destination) : null const sourceStat = await sourceFs.lstatPromise(source) const { atime, mtime } = opts.stableTime ? { atime: defaultTime, mtime: defaultTime } : sourceStat let updated switch (true) { case sourceStat.isDirectory(): { updated = await copyFolder( prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts, ) } break case sourceStat.isFile(): { updated = await copyFile( prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts, ) } break case sourceStat.isSymbolicLink(): { updated = await copySymlink( prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts, ) } break default: { throw new Error(`Unsupported file type (${sourceStat.mode})`) } } if (opts.linkStrategy?.type !== `HardlinkFromIndex` || !sourceStat.isFile()) { if ( updated || destinationStat?.mtime?.getTime() !== mtime.getTime() || destinationStat?.atime?.getTime() !== atime.getTime() ) { postlayout.push(() => destinationFs.lutimesPromise(destination, atime, mtime), ) updated = true } if ( destinationStat === null || (destinationStat.mode & 511) !== (sourceStat.mode & 511) ) { postlayout.push(() => destinationFs.chmodPromise(destination, sourceStat.mode & 511), ) updated = true } } return updated } async function maybeLStat(baseFs, p) { try { return await baseFs.lstatPromise(p) } catch (e) { return null } } async function copyFolder( prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts, ) { if (destinationStat !== null && !destinationStat.isDirectory()) { if (opts.overwrite) { prelayout.push(async () => destinationFs.removePromise(destination)) destinationStat = null } else { return false } } let updated = false if (destinationStat === null) { prelayout.push(async () => { try { await destinationFs.mkdirPromise(destination, { mode: sourceStat.mode }) } catch (err) { if (err.code !== `EEXIST`) { throw err } } }) updated = true } const entries = await sourceFs.readdirPromise(source) const nextOpts = opts.didParentExist && !destinationStat ? { ...opts, didParentExist: false } : opts if (opts.stableSort) { for (const entry of entries.sort()) { if ( await copyImpl( prelayout, postlayout, destinationFs, destinationFs.pathUtils.join(destination, entry), sourceFs, sourceFs.pathUtils.join(source, entry), nextOpts, ) ) { updated = true } } } else { const entriesUpdateStatus = await Promise.all( entries.map(async entry => { await copyImpl( prelayout, postlayout, destinationFs, destinationFs.pathUtils.join(destination, entry), sourceFs, sourceFs.pathUtils.join(source, entry), nextOpts, ) }), ) if (entriesUpdateStatus.some(status => status)) { updated = true } } return updated } async function copyFileViaIndex( prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts, linkStrategy, ) { const sourceHash = await sourceFs.checksumFilePromise(source, { algorithm: `sha1`, }) const defaultMode = 420 const sourceMode = sourceStat.mode & 511 const indexFileName = `${sourceHash}${sourceMode !== defaultMode ? sourceMode.toString(8) : ``}` const indexPath = destinationFs.pathUtils.join( linkStrategy.indexPath, sourceHash.slice(0, 2), `${indexFileName}.dat`, ) let AtomicBehavior ;(AtomicBehavior2 => { AtomicBehavior2[(AtomicBehavior2['Lock'] = 0)] = 'Lock' AtomicBehavior2[(AtomicBehavior2['Rename'] = 1)] = 'Rename' })(AtomicBehavior || (AtomicBehavior = {})) let atomicBehavior = 1 /* Rename */ let indexStat = await maybeLStat(destinationFs, indexPath) if (destinationStat) { const isDestinationHardlinkedFromIndex = indexStat && destinationStat.dev === indexStat.dev && destinationStat.ino === indexStat.ino const isIndexModified = indexStat?.mtimeMs !== defaultTimeMs if (isDestinationHardlinkedFromIndex) { if (isIndexModified && linkStrategy.autoRepair) { atomicBehavior = 0 /* Lock */ indexStat = null } } if (!isDestinationHardlinkedFromIndex) { if (opts.overwrite) { prelayout.push(async () => destinationFs.removePromise(destination)) destinationStat = null } else { return false } } } const tempPath = !indexStat && atomicBehavior === 1 /* Rename */ ? `${indexPath}.${Math.floor(Math.random() * 4294967296) .toString(16) .padStart(8, `0`)}` : null let tempPathCleaned = false prelayout.push(async () => { if (!indexStat) { if (atomicBehavior === 0 /* Lock */) { await destinationFs.lockPromise(indexPath, async () => { const content = await sourceFs.readFilePromise(source) await destinationFs.writeFilePromise(indexPath, content) }) } if (atomicBehavior === 1 /* Rename */ && tempPath) { const content = await sourceFs.readFilePromise(source) await destinationFs.writeFilePromise(tempPath, content) try { await destinationFs.linkPromise(tempPath, indexPath) } catch (err) { if (err.code === `EEXIST`) { tempPathCleaned = true await destinationFs.unlinkPromise(tempPath) } else { throw err } } } } if (!destinationStat) { await destinationFs.linkPromise(indexPath, destination) } }) postlayout.push(async () => { if (!indexStat) { await destinationFs.lutimesPromise(indexPath, defaultTime, defaultTime) if (sourceMode !== defaultMode) { await destinationFs.chmodPromise(indexPath, sourceMode) } } if (tempPath && !tempPathCleaned) { await destinationFs.unlinkPromise(tempPath) } }) return false } async function copyFileDirect( prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts, ) { if (destinationStat !== null) { if (opts.overwrite) { prelayout.push(async () => destinationFs.removePromise(destination)) destinationStat = null } else { return false } } prelayout.push(async () => { const content = await sourceFs.readFilePromise(source) await destinationFs.writeFilePromise(destination, content) }) return true } async function copyFile( prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts, ) { if (opts.linkStrategy?.type === `HardlinkFromIndex`) { return copyFileViaIndex( prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts, opts.linkStrategy, ) } else { return copyFileDirect( prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts, ) } } async function copySymlink( prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts, ) { if (destinationStat !== null) { if (opts.overwrite) { prelayout.push(async () => destinationFs.removePromise(destination)) destinationStat = null } else { return false } } prelayout.push(async () => { await destinationFs.symlinkPromise( convertPath( destinationFs.pathUtils, await sourceFs.readlinkPromise(source), ), destination, ) }) return true } class CustomDir { constructor(path, nextDirent, opts = {}) { this.path = path this.nextDirent = nextDirent this.opts = opts this.closed = false } throwIfClosed() { if (this.closed) { throw ERR_DIR_CLOSED() } } async *[Symbol.asyncIterator]() { try { let dirent while ((dirent = await this.read()) !== null) { yield dirent } } finally { await this.close() } } read(cb) { const dirent = this.readSync() if (typeof cb !== `undefined`) return cb(null, dirent) return Promise.resolve(dirent) } readSync() { this.throwIfClosed() return this.nextDirent() } close(cb) { this.closeSync() if (typeof cb !== `undefined`) return cb(null) return Promise.resolve() } closeSync() { this.throwIfClosed() this.opts.onClose?.() this.closed = true } } function opendir(fakeFs, path, entries, opts) { const nextDirent = () => { const filename = entries.shift() if (typeof filename === `undefined`) return null const entryPath = fakeFs.pathUtils.join(path, filename) return Object.assign(fakeFs.statSync(entryPath), { name: filename, path: void 0, }) } return new CustomDir(path, nextDirent, opts) } function assertStatus(current, expected) { if (current !== expected) { throw new Error( `Invalid StatWatcher status: expected '${expected}', got '${current}'`, ) } } class CustomStatWatcher extends events.EventEmitter { constructor(fakeFs, path, { bigint = false } = {}) { super() this.status = 'ready' /* Ready */ this.changeListeners = /* @__PURE__ */ new Map() this.startTimeout = null this.fakeFs = fakeFs this.path = path this.bigint = bigint this.lastStats = this.stat() } static create(fakeFs, path, opts) { const statWatcher = new CustomStatWatcher(fakeFs, path, opts) statWatcher.start() return statWatcher } start() { assertStatus(this.status, 'ready' /* Ready */) this.status = 'running' /* Running */ this.startTimeout = setTimeout(() => { this.startTimeout = null if (!this.fakeFs.existsSync(this.path)) { this.emit('change' /* Change */, this.lastStats, this.lastStats) } }, 3) } stop() { assertStatus(this.status, 'running' /* Running */) this.status = 'stopped' /* Stopped */ if (this.startTimeout !== null) { clearTimeout(this.startTimeout) this.startTimeout = null } this.emit('stop' /* Stop */) } stat() { try { return this.fakeFs.statSync(this.path, { bigint: this.bigint }) } catch (error) { const statInstance = this.bigint ? new BigIntStatsEntry() : new StatEntry() return clearStats(statInstance) } } makeInterval(opts) { const interval = setInterval(() => { const currentStats = this.stat() const previousStats = this.lastStats if (areStatsEqual(currentStats, previousStats)) return this.lastStats = currentStats this.emit('change' /* Change */, currentStats, previousStats) }, opts.interval) return opts.persistent ? interval : interval.unref() } registerChangeListener(listener, opts) { this.addListener('change' /* Change */, listener) this.changeListeners.set(listener, this.makeInterval(opts)) } unregisterChangeListener(listener) { this.removeListener('change' /* Change */, listener) const interval = this.changeListeners.get(listener) if (typeof interval !== `undefined`) clearInterval(interval) this.changeListeners.delete(listener) } unregisterAllChangeListeners() { for (const listener of this.changeListeners.keys()) { this.unregisterChangeListener(listener) } } hasChangeListeners() { return this.changeListeners.size > 0 } ref() { for (const interval of this.changeListeners.values()) interval.ref() return this } unref() { for (const interval of this.changeListeners.values()) interval.unref() return this } } const statWatchersByFakeFS = /* @__PURE__ */ new WeakMap() function watchFile(fakeFs, path, a, b) { let bigint let persistent let interval let listener switch (typeof a) { case `function`: { bigint = false persistent = true interval = 5007 listener = a } break default: { ;({ bigint = false, persistent = true, interval = 5007 } = a) listener = b } break } let statWatchers = statWatchersByFakeFS.get(fakeFs) if (typeof statWatchers === `undefined`) statWatchersByFakeFS.set(fakeFs, (statWatchers = /* @__PURE__ */ new Map())) let statWatcher = statWatchers.get(path) if (typeof statWatcher === `undefined`) { statWatcher = CustomStatWatcher.create(fakeFs, path, { bigint }) statWatchers.set(path, statWatcher) } statWatcher.registerChangeListener(listener, { persistent, interval }) return statWatcher } function unwatchFile(fakeFs, path, cb) { const statWatchers = statWatchersByFakeFS.get(fakeFs) if (typeof statWatchers === `undefined`) return const statWatcher = statWatchers.get(path) if (typeof statWatcher === `undefined`) return if (typeof cb === `undefined`) statWatcher.unregisterAllChangeListeners() else statWatcher.unregisterChangeListener(cb) if (!statWatcher.hasChangeListeners()) { statWatcher.stop() statWatchers.delete(path) } } function unwatchAllFiles(fakeFs) { const statWatchers = statWatchersByFakeFS.get(fakeFs) if (typeof statWatchers === `undefined`) return for (const path of statWatchers.keys()) { unwatchFile(fakeFs, path) } } class FakeFS { constructor(pathUtils) { this.pathUtils = pathUtils } async *genTraversePromise(init, { stableSort = false } = {}) { const stack = [init] while (stack.length > 0) { const p = stack.shift() const entry = await this.lstatPromise(p) if (entry.isDirectory()) { const entries = await this.readdirPromise(p) if (stableSort) { for (const entry2 of entries.sort()) { stack.push(this.pathUtils.join(p, entry2)) } } else { throw new Error(`Not supported`) } } else { yield p } } } async checksumFilePromise(path, { algorithm = `sha512` } = {}) { const fd = await this.openPromise(path, `r`) try { const CHUNK_SIZE = 65536 const chunk = Buffer.allocUnsafeSlow(CHUNK_SIZE) const hash = crypto.createHash(algorithm) let bytesRead = 0 while ( (bytesRead = await this.readPromise(fd, chunk, 0, CHUNK_SIZE)) !== 0 ) hash.update( bytesRead === CHUNK_SIZE ? chunk : chunk.slice(0, bytesRead), ) return hash.digest(`hex`) } finally { await this.closePromise(fd) } } async removePromise(p, { recursive = true, maxRetries = 5 } = {}) { let stat try { stat = await this.lstatPromise(p) } catch (error) { if (error.code === `ENOENT`) { return } else { throw error } } if (stat.isDirectory()) { if (recursive) { const entries = await this.readdirPromise(p) await Promise.all( entries.map(entry => { return this.removePromise(this.pathUtils.resolve(p, entry)) }), ) } for (let t = 0; t <= maxRetries; t++) { try { await this.rmdirPromise(p) break } catch (error) { if (error.code !== `EBUSY` && error.code !== `ENOTEMPTY`) { throw error } else if (t < maxRetries) { await new Promise(resolve => setTimeout(resolve, t * 100)) } } } } else { await this.unlinkPromise(p) } } removeSync(p, { recursive = true } = {}) { let stat try { stat = this.lstatSync(p) } catch (error) { if (error.code === `ENOENT`) { return } else { throw error } } if (stat.isDirectory()) { if (recursive) for (const entry of this.readdirSync(p)) this.removeSync(this.pathUtils.resolve(p, entry)) this.rmdirSync(p) } else { this.unlinkSync(p) } } async mkdirpPromise(p, { chmod, utimes } = {}) { p = this.resolve(p) if (p === this.pathUtils.dirname(p)) return void 0 const parts = p.split(this.pathUtils.sep) let createdDirectory for (let u = 2; u <= parts.length; ++u) { const subPath = parts.slice(0, u).join(this.pathUtils.sep) if (!this.existsSync(subPath)) { try { await this.mkdirPromise(subPath) } catch (error) { if (error.code === `EEXIST`) { continue } else { throw error } } createdDirectory ??= subPath if (chmod != null) await this.chmodPromise(subPath, chmod) if (utimes != null) { await this.utimesPromise(subPath, utimes[0], utimes[1]) } else { const parentStat = await this.statPromise( this.pathUtils.dirname(subPath), ) await this.utimesPromise(subPath, parentStat.atime, parentStat.mtime) } } } return createdDirectory } mkdirpSync(p, { chmod, utimes } = {}) { p = this.resolve(p) if (p === this.pathUtils.dirname(p)) return void 0 const parts = p.split(this.pathUtils.sep) let createdDirectory for (let u = 2; u <= parts.length; ++u) { const subPath = parts.slice(0, u).join(this.pathUtils.sep) if (!this.existsSync(subPath)) { try { this.mkdirSync(subPath) } catch (error) { if (error.code === `EEXIST`) { continue } else { throw error } } createdDirectory ??= subPath if (chmod != null) this.chmodSync(subPath, chmod) if (utimes != null) { this.utimesSync(subPath, utimes[0], utimes[1]) } else { const parentStat = this.statSync(this.pathUtils.dirname(subPath)) this.utimesSync(subPath, parentStat.atime, parentStat.mtime) } } } return createdDirectory } async copyPromise( destination, source, { baseFs = this, overwrite = true, stableSort = false, stableTime = false, linkStrategy = null, } = {}, ) { return await copyPromise(this, destination, baseFs, source, { overwrite, stableSort, stableTime, linkStrategy, }) } copySync(destination, source, { baseFs = this, overwrite = true } = {}) { const stat = baseFs.lstatSync(source) const exists = this.existsSync(destination) if (stat.isDirectory()) { this.mkdirpSync(destination) const directoryListing = baseFs.readdirSync(source) for (const entry of directoryListing) { this.copySync( this.pathUtils.join(destination, entry), baseFs.pathUtils.join(source, entry), { baseFs, overwrite }, ) } } else if (stat.isFile()) { if (!exists || overwrite) { if (exists) this.removeSync(destination) const content = baseFs.readFileSync(source) this.writeFileSync(destination, content) } } else if (stat.isSymbolicLink()) { if (!exists || overwrite) { if (exists) this.removeSync(destination) const target = baseFs.readlinkSync(source) this.symlinkSync(convertPath(this.pathUtils, target), destination) } } else { throw new Error( `Unsupported file type (file: ${source}, mode: 0o${stat.mode.toString(8).padStart(6, `0`)})`, ) } const mode = stat.mode & 511 this.chmodSync(destination, mode) } async changeFilePromise(p, content, opts = {}) { if (Buffer.isBuffer(content)) { return this.changeFileBufferPromise(p, content, opts) } else { return this.changeFileTextPromise(p, content, opts) } } async changeFileBufferPromise(p, content, { mode } = {}) { let current = Buffer.alloc(0) try { current = await this.readFilePromise(p) } catch (error) {} if (Buffer.compare(current, content) === 0) return await this.writeFilePromise(p, content, { mode }) } async changeFileTextPromise(p, content, { automaticNewlines, mode } = {}) { let current = `` try { current = await this.readFilePromise(p, `utf8`) } catch (error) {} const normalizedContent = automaticNewlines ? normalizeLineEndings(current, content) : content if (current === normalizedContent) return await this.writeFilePromise(p, normalizedContent, { mode }) } changeFileSync(p, content, opts = {}) { if (Buffer.isBuffer(content)) { return this.changeFileBufferSync(p, content, opts) } else { return this.changeFileTextSync(p, content, opts) } } changeFileBufferSync(p, content, { mode } = {}) { let current = Buffer.alloc(0) try { current = this.readFileSync(p) } catch (error) {} if (Buffer.compare(current, content) === 0) return this.writeFileSync(p, content, { mode }) } changeFileTextSync(p, content, { automaticNewlines = false, mode } = {}) { let current = `` try { current = this.readFileSync(p, `utf8`) } catch (error) {} const normalizedContent = automaticNewlines ? normalizeLineEndings(current, content) : content if (current === normalizedContent) return this.writeFileSync(p, normalizedContent, { mode }) } async movePromise(fromP, toP) { try { await this.renamePromise(fromP, toP) } catch (error) { if (error.code === `EXDEV`) { await this.copyPromise(toP, fromP) await this.removePromise(fromP) } else { throw error } } } moveSync(fromP, toP) { try { this.renameSync(fromP, toP) } catch (error) { if (error.code === `EXDEV`) { this.copySync(toP, fromP) this.removeSync(fromP) } else { throw error } } } async lockPromise(affectedPath, callback) { const lockPath = `${affectedPath}.flock` const interval = 1e3 / 60 const startTime = Date.now() let fd = null const isAlive = async () => { let pid try { ;[pid] = await this.readJsonPromise(lockPath) } catch (error) { return Date.now() - startTime < 500 } try { process.kill(pid, 0) return true } catch (error) { return false } } while (fd === null) { try { fd = await this.openPromise(lockPath, `wx`) } catch (error) { if (error.code === `EEXIST`) { if (!(await isAlive())) { try { await this.unlinkPromise(lockPath) continue } catch (error2) {} } if (Date.now() - startTime < 60 * 1e3) { await new Promise(resolve => setTimeout(resolve, interval)) } else { throw new Error( `Couldn't acquire a lock in a reasonable time (via ${lockPath})`, ) } } else { throw error } } } await this.writePromise(fd, JSON.stringify([process.pid])) try { return await callback() } finally { try { await this.closePromise(fd) await this.unlinkPromise(lockPath) } catch (error) {} } } async readJsonPromise(p) { const content = await this.readFilePromise(p, `utf8`) try { return JSON.parse(content) } catch (error) { error.message += ` (in ${p})` throw error } } readJsonSync(p) { const content = this.readFileSync(p, `utf8`) try { return JSON.parse(content) } catch (error) { error.message += ` (in ${p})` throw error } } async writeJsonPromise(p, data, { compact = false } = {}) { const space = compact ? 0 : 2 return await this.writeFilePromise( p, `${JSON.stringify(data, null, space)} `, ) } writeJsonSync(p, data, { compact = false } = {}) { const space = compact ? 0 : 2 return this.writeFileSync( p, `${JSON.stringify(data, null, space)} `, ) } async preserveTimePromise(p, cb) { const stat = await this.lstatPromise(p) const result = await cb() if (typeof result !== `undefined`) p = result await this.lutimesPromise(p, stat.atime, stat.mtime) } async preserveTimeSync(p, cb) { const stat = this.lstatSync(p) const result = cb() if (typeof result !== `undefined`) p = result this.lutimesSync(p, stat.atime, stat.mtime) } } class BasePortableFakeFS extends FakeFS { constructor() { super(ppath) } } function getEndOfLine(content) { const matches = content.match(/\r?\n/g) if (matches === null) return os.EOL const crlf = matches.filter( nl => nl === `\r `, ).length const lf = matches.length - crlf return crlf > lf ? `\r ` : ` ` } function normalizeLineEndings(originalContent, newContent) { return newContent.replace(/\r?\n/g, getEndOfLine(originalContent)) } class ProxiedFS extends FakeFS { getExtractHint(hints) { return this.baseFs.getExtractHint(hints) } resolve(path) { return this.mapFromBase(this.baseFs.resolve(this.mapToBase(path))) } getRealPath() { return this.mapFromBase(this.baseFs.getRealPath()) } async openPromise(p, flags, mode) { return this.baseFs.openPromise(this.mapToBase(p), flags, mode) } openSync(p, flags, mode) { return this.baseFs.openSync(this.mapToBase(p), flags, mode) } async opendirPromise(p, opts) { return Object.assign( await this.baseFs.opendirPromise(this.mapToBase(p), opts), { path: p }, ) } opendirSync(p, opts) { return Object.assign(this.baseFs.opendirSync(this.mapToBase(p), opts), { path: p, }) } async readPromise(fd, buffer, offset, length, position) { return await this.baseFs.readPromise(fd, buffer, offset, length, position) } readSync(fd, buffer, offset, length, position) { return this.baseFs.readSync(fd, buffer, offset, length, position) } async writePromise(fd, buffer, offset, length, position) { if (typeof buffer === `string`) { return await this.baseFs.writePromise(fd, buffer, offset) } else { return await this.baseFs.writePromise( fd, buffer, offset, length, position, ) } } writeSync(fd, buffer, offset, length, position) { if (typeof buffer === `string`) { return this.baseFs.writeSync(fd, buffer, offset) } else { return this.baseFs.writeSync(fd, buffer, offset, length, position) } } async closePromise(fd) { return this.baseFs.closePromise(fd) } closeSync(fd) { this.baseFs.closeSync(fd) } createReadStream(p, opts) { return this.baseFs.createReadStream( p !== null ? this.mapToBase(p) : p, opts, ) } createWriteStream(p, opts) { return this.baseFs.createWriteStream( p !== null ? this.mapToBase(p) : p, opts, ) } async realpathPromise(p) { return this.mapFromBase( await this.baseFs.realpathPromise(this.mapToBase(p)), ) } realpathSync(p) { return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(p))) } async existsPromise(p) { return this.baseFs.existsPromise(this.mapToBase(p)) } existsSync(p) { return this.baseFs.existsSync(this.mapToBase(p)) } accessSync(p, mode) { return this.baseFs.accessSync(this.mapToBase(p), mode) } async accessPromise(p, mode) { return this.baseFs.accessPromise(this.mapToBase(p), mode) } async statPromise(p, opts) { return this.baseFs.statPromise(this.mapToBase(p), opts) } statSync(p, opts) { return this.baseFs.statSync(this.mapToBase(p), opts) } async fstatPromise(fd, opts) { return this.baseFs.fstatPromise(fd, opts) } fstatSync(fd, opts) { return this.baseFs.fstatSync(fd, opts) } lstatPromise(p, opts) { return this.baseFs.lstatPromise(this.mapToBase(p), opts) } lstatSync(p, opts) { return this.baseFs.lstatSync(this.mapToBase(p), opts) } async fchmodPromise(fd, mask) { return this.baseFs.fchmodPromise(fd, mask) } fchmodSync(fd, mask) { return this.baseFs.fchmodSync(fd, mask) } async chmodPromise(p, mask) { return this.baseFs.chmodPromise(this.mapToBase(p), mask) } chmodSync(p, mask) { return this.baseFs.chmodSync(this.mapToBase(p), mask) } async fchownPromise(fd, uid, gid) { return this.baseFs.fchownPromise(fd, uid, gid) } fchownSync(fd, uid, gid) { return this.baseFs.fchownSync(fd, uid, gid) } async chownPromise(p, uid, gid) { return this.baseFs.chownPromise(this.mapToBase(p), uid, gid) } chownSync(p, uid, gid) { return this.baseFs.chownSync(this.mapToBase(p), uid, gid) } async renamePromise(oldP, newP) { return this.baseFs.renamePromise(this.mapToBase(oldP), this.mapToBase(newP)) } renameSync(oldP, newP) { return this.baseFs.renameSync(this.mapToBase(oldP), this.mapToBase(newP)) } async copyFilePromise(sourceP, destP, flags = 0) { return this.baseFs.copyFilePromise( this.mapToBase(sourceP), this.mapToBase(destP), flags, ) } copyFileSync(sourceP, destP, flags = 0) { return this.baseFs.copyFileSync( this.mapToBase(sourceP), this.mapToBase(destP), flags, ) } async appendFilePromise(p, content, opts) { return this.baseFs.appendFilePromise(this.fsMapToBase(p), content, opts) } appendFileSync(p, content, opts) { return this.baseFs.appendFileSync(this.fsMapToBase(p), content, opts) } async writeFilePromise(p, content, opts) { return this.baseFs.writeFilePromise(this.fsMapToBase(p), content, opts) } writeFileSync(p, content, opts) { return this.baseFs.writeFileSync(this.fsMapToBase(p), content, opts) } async unlinkPromise(p) { return this.baseFs.unlinkPromise(this.mapToBase(p)) } unlinkSync(p) { return this.baseFs.unlinkSync(this.mapToBase(p)) } async utimesPromise(p, atime, mtime) { return this.baseFs.utimesPromise(this.mapToBase(p), atime, mtime) } utimesSync(p, atime, mtime) { return this.baseFs.utimesSync(this.mapToBase(p), atime, mtime) } async lutimesPromise(p, atime, mtime) { return this.baseFs.lutimesPromise(this.mapToBase(p), atime, mtime) } lutimesSync(p, atime, mtime) { return this.baseFs.lutimesSync(this.mapToBase(p), atime, mtime) } async mkdirPromise(p, opts) { return this.baseFs.mkdirPromise(this.mapToBase(p), opts) } mkdirSync(p, opts) { return this.baseFs.mkdirSync(this.mapToBase(p), opts) } async rmdirPromise(p, opts) { return this.baseFs.rmdirPromise(this.mapToBase(p), opts) } rmdirSync(p, opts) { return this.baseFs.rmdirSync(this.mapToBase(p), opts) } async rmPromise(p, opts) { return this.baseFs.rmPromise(this.mapToBase(p), opts) } rmSync(p, opts) { return this.baseFs.rmSync(this.mapToBase(p), opts) } async linkPromise(existingP, newP) { return this.baseFs.linkPromise( this.mapToBase(existingP), this.mapToBase(newP), ) } linkSync(existingP, newP) { return this.baseFs.linkSync(this.mapToBase(existingP), this.mapToBase(newP)) } async symlinkPromise(target, p, type) { const mappedP = this.mapToBase(p) if (this.pathUtils.isAbsolute(target)) return this.baseFs.symlinkPromise(this.mapToBase(target), mappedP, type) const mappedAbsoluteTarget = this.mapToBase( this.pathUtils.join(this.pathUtils.dirname(p), target), ) const mappedTarget = this.baseFs.pathUtils.relative( this.baseFs.pathUtils.dirname(mappedP), mappedAbsoluteTarget, ) return this.baseFs.symlinkPromise(mappedTarget, mappedP, type) } symlinkSync(target, p, type) { const mappedP = this.mapToBase(p) if (this.pathUtils.isAbsolute(target)) return this.baseFs.symlinkSync(this.mapToBase(target), mappedP, type) const mappedAbsoluteTarget = this.mapToBase( this.pathUtils.join(this.pathUtils.dirname(p), target), ) const mappedTarget = this.baseFs.pathUtils.relative( this.baseFs.pathUtils.dirname(mappedP), mappedAbsoluteTarget, ) return this.baseFs.symlinkSync(mappedTarget, mappedP, type) } async readFilePromise(p, encoding) { return this.baseFs.readFilePromise(this.fsMapToBase(p), encoding) } readFileSync(p, encoding) { return this.baseFs.readFileSync(this.fsMapToBase(p), encoding) } readdirPromise(p, opts) { return this.baseFs.readdirPromise(this.mapToBase(p), opts) } readdirSync(p, opts) { return this.baseFs.readdirSync(this.mapToBase(p), opts) } async readlinkPromise(p) { return this.mapFromBase( await this.baseFs.readlinkPromise(this.mapToBase(p)), ) } readlinkSync(p) { return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(p))) } async truncatePromise(p, len) { return this.baseFs.truncatePromise(this.mapToBase(p), len) } truncateSync(p, len) { return this.baseFs.truncateSync(this.mapToBase(p), len) } async ftruncatePromise(fd, len) { return this.baseFs.ftruncatePromise(fd, len) } ftruncateSync(fd, len) { return this.baseFs.ftruncateSync(fd, len) } watch(p, a, b) { return this.baseFs.watch(this.mapToBase(p), a, b) } watchFile(p, a, b) { return this.baseFs.watchFile(this.mapToBase(p), a, b) } unwatchFile(p, cb) { return this.baseFs.unwatchFile(this.mapToBase(p), cb) } fsMapToBase(p) { if (typeof p === `number`) { return p } else { return this.mapToBase(p) } } } function direntToPortable(dirent) { const portableDirent = dirent if (typeof dirent.path === `string`) portableDirent.path = npath.toPortablePath(dirent.path) return portableDirent } class NodeFS extends BasePortableFakeFS { constructor(realFs = fs__default.default) { super() this.realFs = realFs } getExtractHint() { return false } getRealPath() { return PortablePath.root } resolve(p) { return ppath.resolve(p) } async openPromise(p, flags, mode) { return await new Promise((resolve, reject) => { this.realFs.open( npath.fromPortablePath(p), flags, mode, this.makeCallback(resolve, reject), ) }) } openSync(p, flags, mode) { return this.realFs.openSync(npath.fromPortablePath(p), flags, mode) } async opendirPromise(p, opts) { return await new Promise((resolve, reject) => { if (typeof opts !== `undefined`) { this.realFs.opendir( npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject), ) } else { this.realFs.opendir( npath.fromPortablePath(p), this.makeCallback(resolve, reject), ) } }).then(dir => { const dirWithFixedPath = dir Object.defineProperty(dirWithFixedPath, `path`, { value: p, configurable: true, writable: true, }) return dirWithFixedPath }) } opendirSync(p, opts) { const dir = typeof opts !== `undefined` ? this.realFs.opendirSync(npath.fromPortablePath(p), opts) : this.realFs.opendirSync(npath.fromPortablePath(p)) const dirWithFixedPath = dir Object.defineProperty(dirWithFixedPath, `path`, { value: p, configurable: true, writable: true, }) return dirWithFixedPath } async readPromise(fd, buffer, offset = 0, length = 0, position = -1) { return await new Promise((resolve, reject) => { this.realFs.read( fd, buffer, offset, length, position, (error, bytesRead) => { if (error) { reject(error) } else { resolve(bytesRead) } }, ) }) } readSync(fd, buffer, offset, length, position) { return this.realFs.readSync(fd, buffer, offset, length, position) } async writePromise(fd, buffer, offset, length, position) { return await new Promise((resolve, reject) => { if (typeof buffer === `string`) { return this.realFs.write( fd, buffer, offset, this.makeCallback(resolve, reject), ) } else { return this.realFs.write( fd, buffer, offset, length, position, this.makeCallback(resolve, reject), ) } }) } writeSync(fd, buffer, offset, length, position) { if (typeof buffer === `string`) { return this.realFs.writeSync(fd, buffer, offset) } else { return this.realFs.writeSync(fd, buffer, offset, length, position) } } async closePromise(fd) { await new Promise((resolve, reject) => { this.realFs.close(fd, this.makeCallback(resolve, reject)) }) } closeSync(fd) { this.realFs.closeSync(fd) } createReadStream(p, opts) { const realPath = p !== null ? npath.fromPortablePath(p) : p return this.realFs.createReadStream(realPath, opts) } createWriteStream(p, opts) { const realPath = p !== null ? npath.fromPortablePath(p) : p return this.realFs.createWriteStream(realPath, opts) } async realpathPromise(p) { return await new Promise((resolve, reject) => { this.realFs.realpath( npath.fromPortablePath(p), {}, this.makeCallback(resolve, reject), ) }).then(path => { return npath.toPortablePath(path) }) } realpathSync(p) { return npath.toPortablePath( this.realFs.realpathSync(npath.fromPortablePath(p), {}), ) } async existsPromise(p) { return await new Promise(resolve => { this.realFs.exists(npath.fromPortablePath(p), resolve) }) } accessSync(p, mode) { return this.realFs.accessSync(npath.fromPortablePath(p), mode) } async accessPromise(p, mode) { return await new Promise((resolve, reject) => { this.realFs.access( npath.fromPortablePath(p), mode, this.makeCallback(resolve, reject), ) }) } existsSync(p) { return this.realFs.existsSync(npath.fromPortablePath(p)) } async statPromise(p, opts) { return await new Promise((resolve, reject) => { if (opts) { this.realFs.stat( npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject), ) } else { this.realFs.stat( npath.fromPortablePath(p), this.makeCallback(resolve, reject), ) } }) } statSync(p, opts) { if (opts) { return this.realFs.statSync(npath.fromPortablePath(p), opts) } else { return this.realFs.statSync(npath.fromPortablePath(p)) } } async fstatPromise(fd, opts) { return await new Promise((resolve, reject) => { if (opts) { this.realFs.fstat(fd, opts, this.makeCallback(resolve, reject)) } else { this.realFs.fstat(fd, this.makeCallback(resolve, reject)) } }) } fstatSync(fd, opts) { if (opts) { return this.realFs.fstatSync(fd, opts) } else { return this.realFs.fstatSync(fd) } } async lstatPromise(p, opts) { return await new Promise((resolve, reject) => { if (opts) { this.realFs.lstat( npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject), ) } else { this.realFs.lstat( npath.fromPortablePath(p), this.makeCallback(resolve, reject), ) } }) } lstatSync(p, opts) { if (opts) { return this.realFs.lstatSync(npath.fromPortablePath(p), opts) } else { return this.realFs.lstatSync(npath.fromPortablePath(p)) } } async fchmodPromise(fd, mask) { return await new Promise((resolve, reject) => { this.realFs.fchmod(fd, mask, this.makeCallback(resolve, reject)) }) } fchmodSync(fd, mask) { return this.realFs.fchmodSync(fd, mask) } async chmodPromise(p, mask) { return await new Promise((resolve, reject) => { this.realFs.chmod( npath.fromPortablePath(p), mask, this.makeCallback(resolve, reject), ) }) } chmodSync(p, mask) { return this.realFs.chmodSync(npath.fromPortablePath(p), mask) } async fchownPromise(fd, uid, gid) { return await new Promise((resolve, reject) => { this.realFs.fchown(fd, uid, gid, this.makeCallback(resolve, reject)) }) } fchownSync(fd, uid, gid) { return this.realFs.fchownSync(fd, uid, gid) } async chownPromise(p, uid, gid) { return await new Promise((resolve, reject) => { this.realFs.chown( npath.fromPortablePath(p), uid, gid, this.makeCallback(resolve, reject), ) }) } chownSync(p, uid, gid) { return this.realFs.chownSync(npath.fromPortablePath(p), uid, gid) } async renamePromise(oldP, newP) { return await new Promise((resolve, reject) => { this.realFs.rename( npath.fromPortablePath(oldP), npath.fromPortablePath(newP), this.makeCallback(resolve, reject), ) }) } renameSync(oldP, newP) { return this.realFs.renameSync( npath.fromPortablePath(oldP), npath.fromPortablePath(newP), ) } async copyFilePromise(sourceP, destP, flags = 0) { return await new Promise((resolve, reject) => { this.realFs.copyFile( npath.fromPortablePath(sourceP), npath.fromPortablePath(destP), flags, this.makeCallback(resolve, reject), ) }) } copyFileSync(sourceP, destP, flags = 0) { return this.realFs.copyFileSync( npath.fromPortablePath(sourceP), npath.fromPortablePath(destP), flags, ) } async appendFilePromise(p, content, opts) { return await new Promise((resolve, reject) => { const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p if (opts) { this.realFs.appendFile( fsNativePath, content, opts, this.makeCallback(resolve, reject), ) } else { this.realFs.appendFile( fsNativePath, content, this.makeCallback(resolve, reject), ) } }) } appendFileSync(p, content, opts) { const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p if (opts) { this.realFs.appendFileSync(fsNativePath, content, opts) } else { this.realFs.appendFileSync(fsNativePath, content) } } async writeFilePromise(p, content, opts) { return await new Promise((resolve, reject) => { const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p if (opts) { this.realFs.writeFile( fsNativePath, content, opts, this.makeCallback(resolve, reject), ) } else { this.realFs.writeFile( fsNativePath, content, this.makeCallback(resolve, reject), ) } }) } writeFileSync(p, content, opts) { const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p if (opts) { this.realFs.writeFileSync(fsNativePath, content, opts) } else { this.realFs.writeFileSync(fsNativePath, content) } } async unlinkPromise(p) { return await new Promise((resolve, reject) => { this.realFs.unlink( npath.fromPortablePath(p), this.makeCallback(resolve, reject), ) }) } unlinkSync(p) { return this.realFs.unlinkSync(npath.fromPortablePath(p)) } async utimesPromise(p, atime, mtime) { return await new Promise((resolve, reject) => { this.realFs.utimes( npath.fromPortablePath(p), atime, mtime, this.makeCallback(resolve, reject), ) }) } utimesSync(p, atime, mtime) { this.realFs.utimesSync(npath.fromPortablePath(p), atime, mtime) } async lutimesPromise(p, atime, mtime) { return await new Promise((resolve, reject) => { this.realFs.lutimes( npath.fromPortablePath(p), atime, mtime, this.makeCallback(resolve, reject), ) }) } lutimesSync(p, atime, mtime) { this.realFs.lutimesSync(npath.fromPortablePath(p), atime, mtime) } async mkdirPromise(p, opts) { return await new Promise((resolve, reject) => { this.realFs.mkdir( npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject), ) }) } mkdirSync(p, opts) { return this.realFs.mkdirSync(npath.fromPortablePath(p), opts) } async rmdirPromise(p, opts) { return await new Promise((resolve, reject) => { if (opts) { this.realFs.rmdir( npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject), ) } else { this.realFs.rmdir( npath.fromPortablePath(p), this.makeCallback(resolve, reject), ) } }) } rmdirSync(p, opts) { return this.realFs.rmdirSync(npath.fromPortablePath(p), opts) } async rmPromise(p, opts) { return await new Promise((resolve, reject) => { if (opts) { this.realFs.rm( npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject), ) } else { this.realFs.rm( npath.fromPortablePath(p), this.makeCallback(resolve, reject), ) } }) } rmSync(p, opts) { return this.realFs.rmSync(npath.fromPortablePath(p), opts) } async linkPromise(existingP, newP) { return await new Promise((resolve, reject) => { this.realFs.link( npath.fromPortablePath(existingP), npath.fromPortablePath(newP), this.makeCallback(resolve, reject), ) }) } linkSync(existingP, newP) { return this.realFs.linkSync( npath.fromPortablePath(existingP), npath.fromPortablePath(newP), ) } async symlinkPromise(target, p, type) { return await new Promise((resolve, reject) => { this.realFs.symlink( npath.fromPortablePath(target.replace(/\/+$/, ``)), npath.fromPortablePath(p), type, this.makeCallback(resolve, reject), ) }) } symlinkSync(target, p, type) { return this.realFs.symlinkSync( npath.fromPortablePath(target.replace(/\/+$/, ``)), npath.fromPortablePath(p), type, ) } async readFilePromise(p, encoding) { return await new Promise((resolve, reject) => { const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p this.realFs.readFile( fsNativePath, encoding, this.makeCallback(resolve, reject), ) }) } readFileSync(p, encoding) { const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p return this.realFs.readFileSync(fsNativePath, encoding) } async readdirPromise(p, opts) { return await new Promise((resolve, reject) => { if (opts) { if (opts.recursive && process.platform === `win32`) { if (opts.withFileTypes) { this.realFs.readdir( npath.fromPortablePath(p), opts, this.makeCallback( results => resolve(results.map(direntToPortable)), reject, ), ) } else { this.realFs.readdir( npath.fromPortablePath(p), opts, this.makeCallback( results => resolve(results.map(npath.toPortablePath)), reject, ), ) } } else { this.realFs.readdir( npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject), ) } } else { this.realFs.readdir( npath.fromPortablePath(p), this.makeCallback(resolve, reject), ) } }) } readdirSync(p, opts) { if (opts) { if (opts.recursive && process.platform === `win32`) { if (opts.withFileTypes) { return this.realFs .readdirSync(npath.fromPortablePath(p), opts) .map(direntToPortable) } else { return this.realFs .readdirSync(npath.fromPortablePath(p), opts) .map(npath.toPortablePath) } } else { return this.realFs.readdirSync(npath.fromPortablePath(p), opts) } } else { return this.realFs.readdirSync(npath.fromPortablePath(p)) } } async readlinkPromise(p) { return await new Promise((resolve, reject) => { this.realFs.readlink( npath.fromPortablePath(p), this.makeCallback(resolve, reject), ) }).then(path => { return npath.toPortablePath(path) }) } readlinkSync(p) { return npath.toPortablePath( this.realFs.readlinkSync(npath.fromPortablePath(p)), ) } async truncatePromise(p, len) { return await new Promise((resolve, reject) => { this.realFs.truncate( npath.fromPortablePath(p), len, this.makeCallback(resolve, reject), ) }) } truncateSync(p, len) { return this.realFs.truncateSync(npath.fromPortablePath(p), len) } async ftruncatePromise(fd, len) { return await new Promise((resolve, reject) => { this.realFs.ftruncate(fd, len, this.makeCallback(resolve, reject)) }) } ftruncateSync(fd, len) { return this.realFs.ftruncateSync(fd, len) } watch(p, a, b) { return this.realFs.watch(npath.fromPortablePath(p), a, b) } watchFile(p, a, b) { return this.realFs.watchFile(npath.fromPortablePath(p), a, b) } unwatchFile(p, cb) { return this.realFs.unwatchFile(npath.fromPortablePath(p), cb) } makeCallback(resolve, reject) { return (err, result) => { if (err) { reject(err) } else { resolve(result) } } } } const MOUNT_MASK = 4278190080 class MountFS extends BasePortableFakeFS { constructor({ baseFs = new NodeFS(), filter = null, magicByte = 42, maxOpenFiles = Infinity, useCache = true, maxAge = 5e3, typeCheck = fs.constants.S_IFREG, getMountPoint, factoryPromise, factorySync, }) { if ( Math.floor(magicByte) !== magicByte || !(magicByte > 1 && magicByte <= 127) ) throw new Error( `The magic byte must be set to a round value between 1 and 127 included`, ) super() this.fdMap = /* @__PURE__ */ new Map() this.nextFd = 3 this.isMount = /* @__PURE__ */ new Set() this.notMount = /* @__PURE__ */ new Set() this.realPaths = /* @__PURE__ */ new Map() this.limitOpenFilesTimeout = null this.baseFs = baseFs this.mountInstances = useCache ? /* @__PURE__ */ new Map() : null this.factoryPromise = factoryPromise this.factorySync = factorySync this.filter = filter this.getMountPoint = getMountPoint this.magic = magicByte << 24 this.maxAge = maxAge this.maxOpenFiles = maxOpenFiles this.typeCheck = typeCheck } getExtractHint(hints) { return this.baseFs.getExtractHint(hints) } getRealPath() { return this.baseFs.getRealPath() } saveAndClose() { unwatchAllFiles(this) if (this.mountInstances) { for (const [path, { childFs }] of this.mountInstances.entries()) { childFs.saveAndClose?.() this.mountInstances.delete(path) } } } discardAndClose() { unwatchAllFiles(this) if (this.mountInstances) { for (const [path, { childFs }] of this.mountInstances.entries()) { childFs.discardAndClose?.() this.mountInstances.delete(path) } } } resolve(p) { return this.baseFs.resolve(p) } remapFd(mountFs, fd) { const remappedFd = this.nextFd++ | this.magic this.fdMap.set(remappedFd, [mountFs, fd]) return remappedFd } async openPromise(p, flags, mode) { return await this.makeCallPromise( p, async () => { return await this.baseFs.openPromise(p, flags, mode) }, async (mountFs, { subPath }) => { return this.remapFd( mountFs, await mountFs.openPromise(subPath, flags, mode), ) }, ) } openSync(p, flags, mode) { return this.makeCallSync( p, () => { return this.baseFs.openSync(p, flags, mode) }, (mountFs, { subPath }) => { return this.remapFd(mountFs, mountFs.openSync(subPath, flags, mode)) }, ) } async opendirPromise(p, opts) { return await this.makeCallPromise( p, async () => { return await this.baseFs.opendirPromise(p, opts) }, async (mountFs, { subPath }) => { return await mountFs.opendirPromise(subPath, opts) }, { requireSubpath: false, }, ) } opendirSync(p, opts) { return this.makeCallSync( p, () => { return this.baseFs.opendirSync(p, opts) }, (mountFs, { subPath }) => { return mountFs.opendirSync(subPath, opts) }, { requireSubpath: false, }, ) } async readPromise(fd, buffer, offset, length, position) { if ((fd & MOUNT_MASK) !== this.magic) return await this.baseFs.readPromise(fd, buffer, offset, length, position) const entry = this.fdMap.get(fd) if (typeof entry === `undefined`) throw EBADF(`read`) const [mountFs, realFd] = entry return await mountFs.readPromise(realFd, buffer, offset, length, position) } readSync(fd, buffer, offset, length, position) { if ((fd & MOUNT_MASK) !== this.magic) return this.baseFs.readSync(fd, buffer, offset, length, position) const entry = this.fdMap.get(fd) if (typeof entry === `undefined`) throw EBADF(`readSync`) const [mountFs, realFd] = entry return mountFs.readSync(realFd, buffer, offset, length, position) } async writePromise(fd, buffer, offset, length, position) { if ((fd & MOUNT_MASK) !== this.magic) { if (typeof buffer === `string`) { return await this.baseFs.writePromise(fd, buffer, offset) } else { return await this.baseFs.writePromise( fd, buffer, offset, length, position, ) } } const entry = this.fdMap.get(fd) if (typeof entry === `undefined`) throw EBADF(`write`) const [mountFs, realFd] = entry if (typeof buffer === `string`) { return await mountFs.writePromise(realFd, buffer, offset) } else { return await mountFs.writePromise( realFd, buffer, offset, length, position, ) } } writeSync(fd, buffer, offset, length, position) { if ((fd & MOUNT_MASK) !== this.magic) { if (typeof buffer === `string`) { return this.baseFs.writeSync(fd, buffer, offset) } else { return this.baseFs.writeSync(fd, buffer, offset, length, position) } } const entry = this.fdMap.get(fd) if (typeof entry === `undefined`) throw EBADF(`writeSync`) const [mountFs, realFd] = entry if (typeof buffer === `string`) { return mountFs.writeSync(realFd, buffer, offset) } else { return mountFs.writeSync(realFd, buffer, offset, length, position) } } async closePromise(fd) { if ((fd & MOUNT_MASK) !== this.magic) return await this.baseFs.closePromise(fd) const entry = this.fdMap.get(fd) if (typeof entry === `undefined`) throw EBADF(`close`) this.fdMap.delete(fd) const [mountFs, realFd] = entry return await mountFs.closePromise(realFd) } closeSync(fd) { if ((fd & MOUNT_MASK) !== this.magic) return this.baseFs.closeSync(fd) const entry = this.fdMap.get(fd) if (typeof entry === `undefined`) throw EBADF(`closeSync`) this.fdMap.delete(fd) const [mountFs, realFd] = entry return mountFs.closeSync(realFd) } createReadStream(p, opts) { if (p === null) return this.baseFs.createReadStream(p, opts) return this.makeCallSync( p, () => { return this.baseFs.createReadStream(p, opts) }, (mountFs, { archivePath, subPath }) => { const stream = mountFs.createReadStream(subPath, opts) stream.path = npath.fromPortablePath( this.pathUtils.join(archivePath, subPath), ) return stream }, ) } createWriteStream(p, opts) { if (p === null) return this.baseFs.createWriteStream(p, opts) return this.makeCallSync( p, () => { return this.baseFs.createWriteStream(p, opts) }, (mountFs, { subPath }) => { return mountFs.createWriteStream(subPath, opts) }, ) } async realpathPromise(p) { return await this.makeCallPromise( p, async () => { return await this.baseFs.realpathPromise(p) }, async (mountFs, { archivePath, subPath }) => { let realArchivePath = this.realPaths.get(archivePath) if (typeof realArchivePath === `undefined`) { realArchivePath = await this.baseFs.realpathPromise(archivePath) this.realPaths.set(archivePath, realArchivePath) } return this.pathUtils.join( realArchivePath, this.pathUtils.relative( PortablePath.root, await mountFs.realpathPromise(subPath), ), ) }, ) } realpathSync(p) { return this.makeCallSync( p, () => { return this.baseFs.realpathSync(p) }, (mountFs, { archivePath, subPath }) => { let realArchivePath = this.realPaths.get(archivePath) if (typeof realArchivePath === `undefined`) { realArchivePath = this.baseFs.realpathSync(archivePath) this.realPaths.set(archivePath, realArchivePath) } return this.pathUtils.join( realArchivePath, this.pathUtils.relative( PortablePath.root, mountFs.realpathSync(subPath), ), ) }, ) } async existsPromise(p) { return await this.makeCallPromise( p, async () => { return await this.baseFs.existsPromise(p) }, async (mountFs, { subPath }) => { return await mountFs.existsPromise(subPath) }, ) } existsSync(p) { return this.makeCallSync( p, () => { return this.baseFs.existsSync(p) }, (mountFs, { subPath }) => { return mountFs.existsSync(subPath) }, ) } async accessPromise(p, mode) { return await this.makeCallPromise( p, async () => { return await this.baseFs.accessPromise(p, mode) }, async (mountFs, { subPath }) => { return await mountFs.accessPromise(subPath, mode) }, ) } accessSync(p, mode) { return this.makeCallSync( p, () => { return this.baseFs.accessSync(p, mode) }, (mountFs, { subPath }) => { return mountFs.accessSync(subPath, mode) }, ) } async statPromise(p, opts) { return await this.makeCallPromise( p, async () => { return await this.baseFs.statPromise(p, opts) }, async (mountFs, { subPath }) => { return await mountFs.statPromise(subPath, opts) }, ) } statSync(p, opts) { return this.makeCallSync( p, () => { return this.baseFs.statSync(p, opts) }, (mountFs, { subPath }) => { return mountFs.statSync(subPath, opts) }, ) } async fstatPromise(fd, opts) { if ((fd & MOUNT_MASK) !== this.magic) return this.baseFs.fstatPromise(fd, opts) const entry = this.fdMap.get(fd) if (typeof entry === `undefined`) throw EBADF(`fstat`) const [mountFs, realFd] = entry return mountFs.fstatPromise(realFd, opts) } fstatSync(fd, opts) { if ((fd & MOUNT_MASK) !== this.magic) return this.baseFs.fstatSync(fd, opts) const entry = this.fdMap.get(fd) if (typeof entry === `undefined`) throw EBADF(`fstatSync`) const [mountFs, realFd] = entry return mountFs.fstatSync(realFd, opts) } async lstatPromise(p, opts) { return await this.makeCallPromise( p, async () => { return await this.baseFs.lstatPromise(p, opts) }, async (mountFs, { subPath }) => { return await mountFs.lstatPromise(subPath, opts) }, ) } lstatSync(p, opts) { return this.makeCallSync( p, () => { return this.baseFs.lstatSync(p, opts) }, (mountFs, { subPath }) => { return mountFs.lstatSync(subPath, opts) }, ) } async fchmodPromise(fd, mask) { if ((fd & MOUNT_MASK) !== this.magic) return this.baseFs.fchmodPromise(fd, mask) const entry = this.fdMap.get(fd) if (typeof entry === `undefined`) throw EBADF(`fchmod`) const [mountFs, realFd] = entry return mountFs.fchmodPromise(realFd, mask) } fchmodSync(fd, mask) { if ((fd & MOUNT_MASK) !== this.magic) return this.baseFs.fchmodSync(fd, mask) const entry = this.fdMap.get(fd) if (typeof entry === `undefined`) throw EBADF(`fchmodSync`) const [mountFs, realFd] = entry return mountFs.fchmodSync(realFd, mask) } async chmodPromise(p, mask) { return await this.makeCallPromise( p, async () => { return await this.baseFs.chmodPromise(p, mask) }, async (mountFs, { subPath }) => { return await mountFs.chmodPromise(subPath, mask) }, ) } chmodSync(p, mask) { return this.makeCallSync( p, () => { return this.baseFs.chmodSync(p, mask) }, (mountFs, { subPath }) => { return mountFs.chmodSync(subPath, mask) }, ) } async fchownPromise(fd, uid, gid) { if ((fd & MOUNT_MASK) !== this.magic) return this.baseFs.fchownPromise(fd, uid, gid) const entry = this.fdMap.get(fd) if (typeof entry === `undefined`) throw EBADF(`fchown`) const [zipFs, realFd] = entry return zipFs.fchownPromise(realFd, uid, gid) } fchownSync(fd, uid, gid) { if ((fd & MOUNT_MASK) !== this.magic) return this.baseFs.fchownSync(fd, uid, gid) const entry = this.fdMap.get(fd) if (typeof entry === `undefined`) throw EBADF(`fchownSync`) const [zipFs, realFd] = entry return zipFs.fchownSync(realFd, uid, gid) } async chownPromise(p, uid, gid) { return await this.makeCallPromise( p, async () => { return await this.baseFs.chownPromise(p, uid, gid) }, async (mountFs, { subPath }) => { return await mountFs.chownPromise(subPath, uid, gid) }, ) } chownSync(p, uid, gid) { return this.makeCallSync( p, () => { return this.baseFs.chownSync(p, uid, gid) }, (mountFs, { subPath }) => { return mountFs.chownSync(subPath, uid, gid) }, ) } async renamePromise(oldP, newP) { return await this.makeCallPromise( oldP, async () => { return await this.makeCallPromise( newP, async () => { return await this.baseFs.renamePromise(oldP, newP) }, async () => { throw Object.assign( new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }, ) }, ) }, async (mountFsO, { subPath: subPathO }) => { return await this.makeCallPromise( newP, async () => { throw Object.assign( new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }, ) }, async (mountFsN, { subPath: subPathN }) => { if (mountFsO !== mountFsN) { throw Object.assign( new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }, ) } else { return await mountFsO.renamePromise(subPathO, subPathN) } }, ) }, ) } renameSync(oldP, newP) { return this.makeCallSync( oldP, () => { return this.makeCallSync( newP, () => { return this.baseFs.renameSync(oldP, newP) }, () => { throw Object.assign( new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }, ) }, ) }, (mountFsO, { subPath: subPathO }) => { return this.makeCallSync( newP, () => { throw Object.assign( new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }, ) }, (mountFsN, { subPath: subPathN }) => { if (mountFsO !== mountFsN) { throw Object.assign( new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }, ) } else { return mountFsO.renameSync(subPathO, subPathN) } }, ) }, ) } async copyFilePromise(sourceP, destP, flags = 0) { const fallback = async (sourceFs, sourceP2, destFs, destP2) => { if ((flags & fs.constants.COPYFILE_FICLONE_FORCE) !== 0) throw Object.assign( new Error( `EXDEV: cross-device clone not permitted, copyfile '${sourceP2}' -> ${destP2}'`, ), { code: `EXDEV` }, ) if ( flags & fs.constants.COPYFILE_EXCL && (await this.existsPromise(sourceP2)) ) throw Object.assign( new Error( `EEXIST: file already exists, copyfile '${sourceP2}' -> '${destP2}'`, ), { code: `EEXIST` }, ) let content try { content = await sourceFs.readFilePromise(sourceP2) } catch (error) { throw Object.assign( new Error( `EINVAL: invalid argument, copyfile '${sourceP2}' -> '${destP2}'`, ), { code: `EINVAL` }, ) } await destFs.writeFilePromise(destP2, content) } return await this.makeCallPromise( sourceP, async () => { return await this.makeCallPromise( destP, async () => { return await this.baseFs.copyFilePromise(sourceP, destP, flags) }, async (mountFsD, { subPath: subPathD }) => { return await fallback(this.baseFs, sourceP, mountFsD, subPathD) }, ) }, async (mountFsS, { subPath: subPathS }) => { return await this.makeCallPromise( destP, async () => { return await fallback(mountFsS, subPathS, this.baseFs, destP) }, async (mountFsD, { subPath: subPathD }) => { if (mountFsS !== mountFsD) { return await fallback(mountFsS, subPathS, mountFsD, subPathD) } else { return await mountFsS.copyFilePromise(subPathS, subPathD, flags) } }, ) }, ) } copyFileSync(sourceP, destP, flags = 0) { const fallback = (sourceFs, sourceP2, destFs, destP2) => { if ((flags & fs.constants.COPYFILE_FICLONE_FORCE) !== 0) throw Object.assign( new Error( `EXDEV: cross-device clone not permitted, copyfile '${sourceP2}' -> ${destP2}'`, ), { code: `EXDEV` }, ) if (flags & fs.constants.COPYFILE_EXCL && this.existsSync(sourceP2)) throw Object.assign( new Error( `EEXIST: file already exists, copyfile '${sourceP2}' -> '${destP2}'`, ), { code: `EEXIST` }, ) let content try { content = sourceFs.readFileSync(sourceP2) } catch (error) { throw Object.assign( new Error( `EINVAL: invalid argument, copyfile '${sourceP2}' -> '${destP2}'`, ), { code: `EINVAL` }, ) } destFs.writeFileSync(destP2, content) } return this.makeCallSync( sourceP, () => { return this.makeCallSync( destP, () => { return this.baseFs.copyFileSync(sourceP, destP, flags) }, (mountFsD, { subPath: subPathD }) => { return fallback(this.baseFs, sourceP, mountFsD, subPathD) }, ) }, (mountFsS, { subPath: subPathS }) => { return this.makeCallSync( destP, () => { return fallback(mountFsS, subPathS, this.baseFs, destP) }, (mountFsD, { subPath: subPathD }) => { if (mountFsS !== mountFsD) { return fallback(mountFsS, subPathS, mountFsD, subPathD) } else { return mountFsS.copyFileSync(subPathS, subPathD, flags) } }, ) }, ) } async appendFilePromise(p, content, opts) { return await this.makeCallPromise( p, async () => { return await this.baseFs.appendFilePromise(p, content, opts) }, async (mountFs, { subPath }) => { return await mountFs.appendFilePromise(subPath, content, opts) }, ) } appendFileSync(p, content, opts) { return this.makeCallSync( p, () => { return this.baseFs.appendFileSync(p, content, opts) }, (mountFs, { subPath }) => { return mountFs.appendFileSync(subPath, content, opts) }, ) } async writeFilePromise(p, content, opts) { return await this.makeCallPromise( p, async () => { return await this.baseFs.writeFilePromise(p, content, opts) }, async (mountFs, { subPath }) => { return await mountFs.writeFilePromise(subPath, content, opts) }, ) } writeFileSync(p, content, opts) { return this.makeCallSync( p, () => { return this.baseFs.writeFileSync(p, content, opts) }, (mountFs, { subPath }) => { return mountFs.writeFileSync(subPath, content, opts) }, ) } async unlinkPromise(p) { return await this.makeCallPromise( p, async () => { return await this.baseFs.unlinkPromise(p) }, async (mountFs, { subPath }) => { return await mountFs.unlinkPromise(subPath) }, ) } unlinkSync(p) { return this.makeCallSync( p, () => { return this.baseFs.unlinkSync(p) }, (mountFs, { subPath }) => { return mountFs.unlinkSync(subPath) }, ) } async utimesPromise(p, atime, mtime) { return await this.makeCallPromise( p, async () => { return await this.baseFs.utimesPromise(p, atime, mtime) }, async (mountFs, { subPath }) => { return await mountFs.utimesPromise(subPath, atime, mtime) }, ) } utimesSync(p, atime, mtime) { return this.makeCallSync( p, () => { return this.baseFs.utimesSync(p, atime, mtime) }, (mountFs, { subPath }) => { return mountFs.utimesSync(subPath, atime, mtime) }, ) } async lutimesPromise(p, atime, mtime) { return await this.makeCallPromise( p, async () => { return await this.baseFs.lutimesPromise(p, atime, mtime) }, async (mountFs, { subPath }) => { return await mountFs.lutimesPromise(subPath, atime, mtime) }, ) } lutimesSync(p, atime, mtime) { return this.makeCallSync( p, () => { return this.baseFs.lutimesSync(p, atime, mtime) }, (mountFs, { subPath }) => { return mountFs.lutimesSync(subPath, atime, mtime) }, ) } async mkdirPromise(p, opts) { return await this.makeCallPromise( p, async () => { return await this.baseFs.mkdirPromise(p, opts) }, async (mountFs, { subPath }) => { return await mountFs.mkdirPromise(subPath, opts) }, ) } mkdirSync(p, opts) { return this.makeCallSync( p, () => { return this.baseFs.mkdirSync(p, opts) }, (mountFs, { subPath }) => { return mountFs.mkdirSync(subPath, opts) }, ) } async rmdirPromise(p, opts) { return await this.makeCallPromise( p, async () => { return await this.baseFs.rmdirPromise(p, opts) }, async (mountFs, { subPath }) => { return await mountFs.rmdirPromise(subPath, opts) }, ) } rmdirSync(p, opts) { return this.makeCallSync( p, () => { return this.baseFs.rmdirSync(p, opts) }, (mountFs, { subPath }) => { return mountFs.rmdirSync(subPath, opts) }, ) } async rmPromise(p, opts) { return await this.makeCallPromise( p, async () => { return await this.baseFs.rmPromise(p, opts) }, async (mountFs, { subPath }) => { return await mountFs.rmPromise(subPath, opts) }, ) } rmSync(p, opts) { return this.makeCallSync( p, () => { return this.baseFs.rmSync(p, opts) }, (mountFs, { subPath }) => { return mountFs.rmSync(subPath, opts) }, ) } async linkPromise(existingP, newP) { return await this.makeCallPromise( newP, async () => { return await this.baseFs.linkPromise(existingP, newP) }, async (mountFs, { subPath }) => { return await mountFs.linkPromise(existingP, subPath) }, ) } linkSync(existingP, newP) { return this.makeCallSync( newP, () => { return this.baseFs.linkSync(existingP, newP) }, (mountFs, { subPath }) => { return mountFs.linkSync(existingP, subPath) }, ) } async symlinkPromise(target, p, type) { return await this.makeCallPromise( p, async () => { return await this.baseFs.symlinkPromise(target, p, type) }, async (mountFs, { subPath }) => { return await mountFs.symlinkPromise(target, subPath) }, ) } symlinkSync(target, p, type) { return this.makeCallSync( p, () => { return this.baseFs.symlinkSync(target, p, type) }, (mountFs, { subPath }) => { return mountFs.symlinkSync(target, subPath) }, ) } async readFilePromise(p, encoding) { return this.makeCallPromise( p, async () => { return await this.baseFs.readFilePromise(p, encoding) }, async (mountFs, { subPath }) => { return await mountFs.readFilePromise(subPath, encoding) }, ) } readFileSync(p, encoding) { return this.makeCallSync( p, () => { return this.baseFs.readFileSync(p, encoding) }, (mountFs, { subPath }) => { return mountFs.readFileSync(subPath, encoding) }, ) } async readdirPromise(p, opts) { return await this.makeCallPromise( p, async () => { return await this.baseFs.readdirPromise(p, opts) }, async (mountFs, { subPath }) => { return await mountFs.readdirPromise(subPath, opts) }, { requireSubpath: false, }, ) } readdirSync(p, opts) { return this.makeCallSync( p, () => { return this.baseFs.readdirSync(p, opts) }, (mountFs, { subPath }) => { return mountFs.readdirSync(subPath, opts) }, { requireSubpath: false, }, ) } async readlinkPromise(p) { return await this.makeCallPromise( p, async () => { return await this.baseFs.readlinkPromise(p) }, async (mountFs, { subPath }) => { return await mountFs.readlinkPromise(subPath) }, ) } readlinkSync(p) { return this.makeCallSync( p, () => { return this.baseFs.readlinkSync(p) }, (mountFs, { subPath }) => { return mountFs.readlinkSync(subPath) }, ) } async truncatePromise(p, len) { return await this.makeCallPromise( p, async () => { return await this.baseFs.truncatePromise(p, len) }, async (mountFs, { subPath }) => { return await mountFs.truncatePromise(subPath, len) }, ) } truncateSync(p, len) { return this.makeCallSync( p, () => { return this.baseFs.truncateSync(p, len) }, (mountFs, { subPath }) => { return mountFs.truncateSync(subPath, len) }, ) } async ftruncatePromise(fd, len) { if ((fd & MOUNT_MASK) !== this.magic) return this.baseFs.ftruncatePromise(fd, len) const entry = this.fdMap.get(fd) if (typeof entry === `undefined`) throw EBADF(`ftruncate`) const [mountFs, realFd] = entry return mountFs.ftruncatePromise(realFd, len) } ftruncateSync(fd, len) { if ((fd & MOUNT_MASK) !== this.magic) return this.baseFs.ftruncateSync(fd, len) const entry = this.fdMap.get(fd) if (typeof entry === `undefined`) throw EBADF(`ftruncateSync`) const [mountFs, realFd] = entry return mountFs.ftruncateSync(realFd, len) } watch(p, a, b) { return this.makeCallSync( p, () => { return this.baseFs.watch(p, a, b) }, (mountFs, { subPath }) => { return mountFs.watch(subPath, a, b) }, ) } watchFile(p, a, b) { return this.makeCallSync( p, () => { return this.baseFs.watchFile(p, a, b) }, () => { return watchFile(this, p, a, b) }, ) } unwatchFile(p, cb) { return this.makeCallSync( p, () => { return this.baseFs.unwatchFile(p, cb) }, () => { return unwatchFile(this, p, cb) }, ) } async makeCallPromise(p, discard, accept, { requireSubpath = true } = {}) { if (typeof p !== `string`) return await discard() const normalizedP = this.resolve(p) const mountInfo = this.findMount(normalizedP) if (!mountInfo) return await discard() if (requireSubpath && mountInfo.subPath === `/`) return await discard() return await this.getMountPromise( mountInfo.archivePath, async mountFs => await accept(mountFs, mountInfo), ) } makeCallSync(p, discard, accept, { requireSubpath = true } = {}) { if (typeof p !== `string`) return discard() const normalizedP = this.resolve(p) const mountInfo = this.findMount(normalizedP) if (!mountInfo) return discard() if (requireSubpath && mountInfo.subPath === `/`) return discard() return this.getMountSync(mountInfo.archivePath, mountFs => accept(mountFs, mountInfo), ) } findMount(p) { if (this.filter && !this.filter.test(p)) return null let filePath = `` while (true) { const pathPartWithArchive = p.substring(filePath.length) const mountPoint = this.getMountPoint(pathPartWithArchive, filePath) if (!mountPoint) return null filePath = this.pathUtils.join(filePath, mountPoint) if (!this.isMount.has(filePath)) { if (this.notMount.has(filePath)) continue try { if ( this.typeCheck !== null && (this.baseFs.lstatSync(filePath).mode & fs.constants.S_IFMT) !== this.typeCheck ) { this.notMount.add(filePath) continue } } catch { return null } this.isMount.add(filePath) } return { archivePath: filePath, subPath: this.pathUtils.join( PortablePath.root, p.substring(filePath.length), ), } } } limitOpenFiles(max) { if (this.mountInstances === null) return const now = Date.now() let nextExpiresAt = now + this.maxAge let closeCount = max === null ? 0 : this.mountInstances.size - max for (const [ path, { childFs, expiresAt, refCount }, ] of this.mountInstances.entries()) { if (refCount !== 0 || childFs.hasOpenFileHandles?.()) { continue } else if (now >= expiresAt) { childFs.saveAndClose?.() this.mountInstances.delete(path) closeCount -= 1 continue } else if (max === null || closeCount <= 0) { nextExpiresAt = expiresAt break } childFs.saveAndClose?.() this.mountInstances.delete(path) closeCount -= 1 } if ( this.limitOpenFilesTimeout === null && ((max === null && this.mountInstances.size > 0) || max !== null) && isFinite(nextExpiresAt) ) { this.limitOpenFilesTimeout = setTimeout(() => { this.limitOpenFilesTimeout = null this.limitOpenFiles(null) }, nextExpiresAt - now).unref() } } async getMountPromise(p, accept) { if (this.mountInstances) { let cachedMountFs = this.mountInstances.get(p) if (!cachedMountFs) { const createFsInstance = await this.factoryPromise(this.baseFs, p) cachedMountFs = this.mountInstances.get(p) if (!cachedMountFs) { cachedMountFs = { childFs: createFsInstance(), expiresAt: 0, refCount: 0, } } } this.mountInstances.delete(p) this.limitOpenFiles(this.maxOpenFiles - 1) this.mountInstances.set(p, cachedMountFs) cachedMountFs.expiresAt = Date.now() + this.maxAge cachedMountFs.refCount += 1 try { return await accept(cachedMountFs.childFs) } finally { cachedMountFs.refCount -= 1 } } else { const mountFs = (await this.factoryPromise(this.baseFs, p))() try { return await accept(mountFs) } finally { mountFs.saveAndClose?.() } } } getMountSync(p, accept) { if (this.mountInstances) { let cachedMountFs = this.mountInstances.get(p) if (!cachedMountFs) { cachedMountFs = { childFs: this.factorySync(this.baseFs, p), expiresAt: 0, refCount: 0, } } this.mountInstances.delete(p) this.limitOpenFiles(this.maxOpenFiles - 1) this.mountInstances.set(p, cachedMountFs) cachedMountFs.expiresAt = Date.now() + this.maxAge return accept(cachedMountFs.childFs) } else { const childFs = this.factorySync(this.baseFs, p) try { return accept(childFs) } finally { childFs.saveAndClose?.() } } } } class PosixFS extends ProxiedFS { constructor(baseFs) { super(npath) this.baseFs = baseFs } mapFromBase(path) { return npath.fromPortablePath(path) } mapToBase(path) { return npath.toPortablePath(path) } } const NUMBER_REGEXP = /^[0-9]+$/ const VIRTUAL_REGEXP = /^(\/(?:[^/]+\/)*?(?:\$\$virtual|__virtual__))((?:\/((?:[^/]+-)?[a-f0-9]+)(?:\/([^/]+))?)?((?:\/.*)?))$/ const VALID_COMPONENT = /^([^/]+-)?[a-f0-9]+$/ class VirtualFS extends ProxiedFS { constructor({ baseFs = new NodeFS() } = {}) { super(ppath) this.baseFs = baseFs } static makeVirtualPath(base, component, to) { if (ppath.basename(base) !== `__virtual__`) throw new Error( `Assertion failed: Virtual folders must be named "__virtual__"`, ) if (!ppath.basename(component).match(VALID_COMPONENT)) throw new Error( `Assertion failed: Virtual components must be ended by an hexadecimal hash`, ) const target = ppath.relative(ppath.dirname(base), to) const segments = target.split(`/`) let depth = 0 while (depth < segments.length && segments[depth] === `..`) depth += 1 const finalSegments = segments.slice(depth) const fullVirtualPath = ppath.join( base, component, String(depth), ...finalSegments, ) return fullVirtualPath } static resolveVirtual(p) { const match = p.match(VIRTUAL_REGEXP) if (!match || (!match[3] && match[5])) return p const target = ppath.dirname(match[1]) if (!match[3] || !match[4]) return target const isnum = NUMBER_REGEXP.test(match[4]) if (!isnum) return p const depth = Number(match[4]) const backstep = `../`.repeat(depth) const subpath = match[5] || `.` return VirtualFS.resolveVirtual(ppath.join(target, backstep, subpath)) } getExtractHint(hints) { return this.baseFs.getExtractHint(hints) } getRealPath() { return this.baseFs.getRealPath() } realpathSync(p) { const match = p.match(VIRTUAL_REGEXP) if (!match) return this.baseFs.realpathSync(p) if (!match[5]) return p const realpath = this.baseFs.realpathSync(this.mapToBase(p)) return VirtualFS.makeVirtualPath(match[1], match[3], realpath) } async realpathPromise(p) { const match = p.match(VIRTUAL_REGEXP) if (!match) return await this.baseFs.realpathPromise(p) if (!match[5]) return p const realpath = await this.baseFs.realpathPromise(this.mapToBase(p)) return VirtualFS.makeVirtualPath(match[1], match[3], realpath) } mapToBase(p) { if (p === ``) return p if (this.pathUtils.isAbsolute(p)) return VirtualFS.resolveVirtual(p) const resolvedRoot = VirtualFS.resolveVirtual( this.baseFs.resolve(PortablePath.dot), ) const resolvedP = VirtualFS.resolveVirtual(this.baseFs.resolve(p)) return ppath.relative(resolvedRoot, resolvedP) || PortablePath.dot } mapFromBase(p) { return p } } const URL = Number(process.versions.node.split('.', 1)[0]) < 20 ? url.URL : globalThis.URL class NodePathFS extends ProxiedFS { constructor(baseFs) { super(npath) this.baseFs = baseFs } mapFromBase(path) { return path } mapToBase(path) { if (typeof path === `string`) return path if (path instanceof URL) return url.fileURLToPath(path) if (Buffer.isBuffer(path)) { const str = path.toString() if (!isUtf8(path, str)) throw new Error( `Non-utf8 buffers are not supported at the moment. Please upvote the following issue if you encounter this error: https://github.com/yarnpkg/berry/issues/4942`, ) return str } throw new Error(`Unsupported path type: ${nodeUtils.inspect(path)}`) } } function isUtf8(buf, str) { if (typeof buffer__default.default.isUtf8 !== `undefined`) return buffer__default.default.isUtf8(buf) return Buffer.byteLength(str) === buf.byteLength } var _a, _b, _c, _d const kBaseFs = Symbol(`kBaseFs`) const kFd = Symbol(`kFd`) const kClosePromise = Symbol(`kClosePromise`) const kCloseResolve = Symbol(`kCloseResolve`) const kCloseReject = Symbol(`kCloseReject`) const kRefs = Symbol(`kRefs`) const kRef = Symbol(`kRef`) const kUnref = Symbol(`kUnref`) class FileHandle { constructor(fd, baseFs) { this[_a] = 1 this[_b] = void 0 this[_c] = void 0 this[_d] = void 0 this[kBaseFs] = baseFs this[kFd] = fd } get fd() { return this[kFd] } async appendFile(data, options) { try { this[kRef](this.appendFile) const encoding = (typeof options === `string` ? options : options?.encoding) ?? void 0 return await this[kBaseFs].appendFilePromise( this.fd, data, encoding ? { encoding } : void 0, ) } finally { this[kUnref]() } } async chown(uid, gid) { try { this[kRef](this.chown) return await this[kBaseFs].fchownPromise(this.fd, uid, gid) } finally { this[kUnref]() } } async chmod(mode) { try { this[kRef](this.chmod) return await this[kBaseFs].fchmodPromise(this.fd, mode) } finally { this[kUnref]() } } createReadStream(options) { return this[kBaseFs].createReadStream(null, { ...options, fd: this.fd }) } createWriteStream(options) { return this[kBaseFs].createWriteStream(null, { ...options, fd: this.fd }) } datasync() { throw new Error(`Method not implemented.`) } sync() { throw new Error(`Method not implemented.`) } async read(bufferOrOptions, offset, length, position) { try { this[kRef](this.read) let buffer if (!Buffer.isBuffer(bufferOrOptions)) { bufferOrOptions ??= {} buffer = bufferOrOptions.buffer ?? Buffer.alloc(16384) offset = bufferOrOptions.offset || 0 length = bufferOrOptions.length ?? buffer.byteLength position = bufferOrOptions.position ?? null } else { buffer = bufferOrOptions } offset ??= 0 length ??= 0 if (length === 0) { return { bytesRead: length, buffer, } } const bytesRead = await this[kBaseFs].readPromise( this.fd, buffer, offset, length, position, ) return { bytesRead, buffer, } } finally { this[kUnref]() } } async readFile(options) { try { this[kRef](this.readFile) const encoding = (typeof options === `string` ? options : options?.encoding) ?? void 0 return await this[kBaseFs].readFilePromise(this.fd, encoding) } finally { this[kUnref]() } } readLines(options) { return readline.createInterface({ input: this.createReadStream(options), crlfDelay: Infinity, }) } async stat(opts) { try { this[kRef](this.stat) return await this[kBaseFs].fstatPromise(this.fd, opts) } finally { this[kUnref]() } } async truncate(len) { try { this[kRef](this.truncate) return await this[kBaseFs].ftruncatePromise(this.fd, len) } finally { this[kUnref]() } } utimes(atime, mtime) { throw new Error(`Method not implemented.`) } async writeFile(data, options) { try { this[kRef](this.writeFile) const encoding = (typeof options === `string` ? options : options?.encoding) ?? void 0 await this[kBaseFs].writeFilePromise(this.fd, data, encoding) } finally { this[kUnref]() } } async write(...args) { try { this[kRef](this.write) if (ArrayBuffer.isView(args[0])) { const [buffer, offset, length, position] = args const bytesWritten = await this[kBaseFs].writePromise( this.fd, buffer, offset ?? void 0, length ?? void 0, position ?? void 0, ) return { bytesWritten, buffer } } else { const [data, position, encoding] = args const bytesWritten = await this[kBaseFs].writePromise( this.fd, data, position, encoding, ) return { bytesWritten, buffer: data } } } finally { this[kUnref]() } } async writev(buffers, position) { try { this[kRef](this.writev) let bytesWritten = 0 if (typeof position !== `undefined`) { for (const buffer of buffers) { const writeResult = await this.write(buffer, void 0, void 0, position) bytesWritten += writeResult.bytesWritten position += writeResult.bytesWritten } } else { for (const buffer of buffers) { const writeResult = await this.write(buffer) bytesWritten += writeResult.bytesWritten } } return { buffers, bytesWritten, } } finally { this[kUnref]() } } readv(buffers, position) { throw new Error(`Method not implemented.`) } close() { if (this[kFd] === -1) return Promise.resolve() if (this[kClosePromise]) return this[kClosePromise] this[kRefs]-- if (this[kRefs] === 0) { const fd = this[kFd] this[kFd] = -1 this[kClosePromise] = this[kBaseFs].closePromise(fd).finally(() => { this[kClosePromise] = void 0 }) } else { this[kClosePromise] = new Promise((resolve, reject) => { this[kCloseResolve] = resolve this[kCloseReject] = reject }).finally(() => { this[kClosePromise] = void 0 this[kCloseReject] = void 0 this[kCloseResolve] = void 0 }) } return this[kClosePromise] } [((_a = kRefs), (_b = kClosePromise), (_c = kCloseResolve), (_d = kCloseReject), kRef)](caller) { if (this[kFd] === -1) { const err = new Error(`file closed`) err.code = `EBADF` err.syscall = caller.name throw err } this[kRefs]++ } [kUnref]() { this[kRefs]-- if (this[kRefs] === 0) { const fd = this[kFd] this[kFd] = -1 this[kBaseFs] .closePromise(fd) .then(this[kCloseResolve], this[kCloseReject]) } } } const SYNC_IMPLEMENTATIONS = /* @__PURE__ */ new Set([ `accessSync`, `appendFileSync`, `createReadStream`, `createWriteStream`, `chmodSync`, `fchmodSync`, `chownSync`, `fchownSync`, `closeSync`, `copyFileSync`, `linkSync`, `lstatSync`, `fstatSync`, `lutimesSync`, `mkdirSync`, `openSync`, `opendirSync`, `readlinkSync`, `readFileSync`, `readdirSync`, `readlinkSync`, `realpathSync`, `renameSync`, `rmdirSync`, `rmSync`, `statSync`, `symlinkSync`, `truncateSync`, `ftruncateSync`, `unlinkSync`, `unwatchFile`, `utimesSync`, `watch`, `watchFile`, `writeFileSync`, `writeSync`, ]) const ASYNC_IMPLEMENTATIONS = /* @__PURE__ */ new Set([ `accessPromise`, `appendFilePromise`, `fchmodPromise`, `chmodPromise`, `fchownPromise`, `chownPromise`, `closePromise`, `copyFilePromise`, `linkPromise`, `fstatPromise`, `lstatPromise`, `lutimesPromise`, `mkdirPromise`, `openPromise`, `opendirPromise`, `readdirPromise`, `realpathPromise`, `readFilePromise`, `readdirPromise`, `readlinkPromise`, `renamePromise`, `rmdirPromise`, `rmPromise`, `statPromise`, `symlinkPromise`, `truncatePromise`, `ftruncatePromise`, `unlinkPromise`, `utimesPromise`, `writeFilePromise`, `writeSync`, ]) function patchFs(patchedFs, fakeFs) { fakeFs = new NodePathFS(fakeFs) const setupFn = (target, name, replacement) => { const orig = target[name] target[name] = replacement if (typeof orig?.[nodeUtils.promisify.custom] !== `undefined`) { replacement[nodeUtils.promisify.custom] = orig[nodeUtils.promisify.custom] } } { setupFn(patchedFs, `exists`, (p, ...args) => { const hasCallback = typeof args[args.length - 1] === `function` const callback = hasCallback ? args.pop() : () => {} process.nextTick(() => { fakeFs.existsPromise(p).then( exists => { callback(exists) }, () => { callback(false) }, ) }) }) setupFn(patchedFs, `read`, (...args) => { let [fd, buffer, offset, length, position, callback] = args if (args.length <= 3) { let options = {} if (args.length < 3) { callback = args[1] } else { options = args[1] callback = args[2] } ;({ buffer = Buffer.alloc(16384), offset = 0, length = buffer.byteLength, position, } = options) } if (offset == null) offset = 0 length |= 0 if (length === 0) { process.nextTick(() => { callback(null, 0, buffer) }) return } if (position == null) position = -1 process.nextTick(() => { fakeFs.readPromise(fd, buffer, offset, length, position).then( bytesRead => { callback(null, bytesRead, buffer) }, error => { callback(error, 0, buffer) }, ) }) }) for (const fnName of ASYNC_IMPLEMENTATIONS) { const origName = fnName.replace(/Promise$/, ``) if (typeof patchedFs[origName] === `undefined`) continue const fakeImpl = fakeFs[fnName] if (typeof fakeImpl === `undefined`) continue const wrapper = (...args) => { const hasCallback = typeof args[args.length - 1] === `function` const callback = hasCallback ? args.pop() : () => {} process.nextTick(() => { fakeImpl.apply(fakeFs, args).then( result => { callback(null, result) }, error => { callback(error) }, ) }) } setupFn(patchedFs, origName, wrapper) } patchedFs.realpath.native = patchedFs.realpath } { setupFn(patchedFs, `existsSync`, p => { try { return fakeFs.existsSync(p) } catch (error) { return false } }) setupFn(patchedFs, `readSync`, (...args) => { let [fd, buffer, offset, length, position] = args if (args.length <= 3) { const options = args[2] || {} ;({ offset = 0, length = buffer.byteLength, position } = options) } if (offset == null) offset = 0 length |= 0 if (length === 0) return 0 if (position == null) position = -1 return fakeFs.readSync(fd, buffer, offset, length, position) }) for (const fnName of SYNC_IMPLEMENTATIONS) { const origName = fnName if (typeof patchedFs[origName] === `undefined`) continue const fakeImpl = fakeFs[fnName] if (typeof fakeImpl === `undefined`) continue setupFn(patchedFs, origName, fakeImpl.bind(fakeFs)) } patchedFs.realpathSync.native = patchedFs.realpathSync } { const patchedFsPromises = patchedFs.promises for (const fnName of ASYNC_IMPLEMENTATIONS) { const origName = fnName.replace(/Promise$/, ``) if (typeof patchedFsPromises[origName] === `undefined`) continue const fakeImpl = fakeFs[fnName] if (typeof fakeImpl === `undefined`) continue if (fnName === `open`) continue setupFn(patchedFsPromises, origName, (pathLike, ...args) => { if (pathLike instanceof FileHandle) { return pathLike[origName].apply(pathLike, args) } else { return fakeImpl.call(fakeFs, pathLike, ...args) } }) } setupFn(patchedFsPromises, `open`, async (...args) => { const fd = await fakeFs.openPromise(...args) return new FileHandle(fd, fakeFs) }) } { patchedFs.read[nodeUtils.promisify.custom] = async ( fd, buffer, ...args ) => { const res = fakeFs.readPromise(fd, buffer, ...args) return { bytesRead: await res, buffer } } patchedFs.write[nodeUtils.promisify.custom] = async ( fd, buffer, ...args ) => { const res = fakeFs.writePromise(fd, buffer, ...args) return { bytesWritten: await res, buffer } } } } let cachedInstance let registeredFactory = () => { throw new Error( `Assertion failed: No libzip instance is available, and no factory was configured`, ) } function setFactory(factory) { registeredFactory = factory } function getInstance() { if (typeof cachedInstance === `undefined`) cachedInstance = registeredFactory() return cachedInstance } var libzipSync = { exports: {} } ;(function (module, exports) { var frozenFs = Object.assign({}, fs__default.default) var createModule = (function () { var _scriptDir = void 0 if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename return function (createModule2) { createModule2 = createModule2 || {} var Module = typeof createModule2 !== 'undefined' ? createModule2 : {} var readyPromiseResolve, readyPromiseReject Module['ready'] = new Promise(function (resolve, reject) { readyPromiseResolve = resolve readyPromiseReject = reject }) var moduleOverrides = {} var key for (key in Module) { if (Module.hasOwnProperty(key)) { moduleOverrides[key] = Module[key] } } var scriptDirectory = '' function locateFile(path) { if (Module['locateFile']) { return Module['locateFile'](path, scriptDirectory) } return scriptDirectory + path } var read_, readBinary var nodeFS var nodePath { { scriptDirectory = __dirname + '/' } read_ = function shell_read(filename, binary) { var ret = tryParseAsDataURI(filename) if (ret) { return binary ? ret : ret.toString() } if (!nodeFS) nodeFS = frozenFs if (!nodePath) nodePath = path__default.default filename = nodePath['normalize'](filename) return nodeFS['readFileSync'](filename, binary ? null : 'utf8') } readBinary = function readBinary2(filename) { var ret = read_(filename, true) if (!ret.buffer) { ret = new Uint8Array(ret) } assert(ret.buffer) return ret } if (process['argv'].length > 1) { process['argv'][1].replace(/\\/g, '/') } process['argv'].slice(2) Module['inspect'] = function () { return '[Emscripten Module object]' } } Module['print'] || console.log.bind(console) var err = Module['printErr'] || console.warn.bind(console) for (key in moduleOverrides) { if (moduleOverrides.hasOwnProperty(key)) { Module[key] = moduleOverrides[key] } } moduleOverrides = null if (Module['arguments']); if (Module['thisProgram']); if (Module['quit']); var wasmBinary if (Module['wasmBinary']) wasmBinary = Module['wasmBinary'] Module['noExitRuntime'] || true if (typeof WebAssembly !== 'object') { abort('no native wasm support detected') } function getValue(ptr, type, noSafe) { type = type || 'i8' if (type.charAt(type.length - 1) === '*') type = 'i32' switch (type) { case 'i1': return HEAP8[ptr >> 0] case 'i8': return HEAP8[ptr >> 0] case 'i16': return LE_HEAP_LOAD_I16((ptr >> 1) * 2) case 'i32': return LE_HEAP_LOAD_I32((ptr >> 2) * 4) case 'i64': return LE_HEAP_LOAD_I32((ptr >> 2) * 4) case 'float': return LE_HEAP_LOAD_F32((ptr >> 2) * 4) case 'double': return LE_HEAP_LOAD_F64((ptr >> 3) * 8) default: abort('invalid type for getValue: ' + type) } return null } var wasmMemory var ABORT = false function assert(condition, text) { if (!condition) { abort('Assertion failed: ' + text) } } function getCFunc(ident) { var func = Module['_' + ident] assert( func, 'Cannot call unknown function ' + ident + ', make sure it is exported', ) return func } function ccall(ident, returnType, argTypes, args, opts) { var toC = { string: function (str) { var ret2 = 0 if (str !== null && str !== void 0 && str !== 0) { var len = (str.length << 2) + 1 ret2 = stackAlloc(len) stringToUTF8(str, ret2, len) } return ret2 }, array: function (arr) { var ret2 = stackAlloc(arr.length) writeArrayToMemory(arr, ret2) return ret2 }, } function convertReturnValue(ret2) { if (returnType === 'string') return UTF8ToString(ret2) if (returnType === 'boolean') return Boolean(ret2) return ret2 } var func = getCFunc(ident) var cArgs = [] var stack = 0 if (args) { for (var i = 0; i < args.length; i++) { var converter = toC[argTypes[i]] if (converter) { if (stack === 0) stack = stackSave() cArgs[i] = converter(args[i]) } else { cArgs[i] = args[i] } } } var ret = func.apply(null, cArgs) ret = convertReturnValue(ret) if (stack !== 0) stackRestore(stack) return ret } function cwrap(ident, returnType, argTypes, opts) { argTypes = argTypes || [] var numericArgs = argTypes.every(function (type) { return type === 'number' }) var numericRet = returnType !== 'string' if (numericRet && numericArgs && !opts) { return getCFunc(ident) } return function () { return ccall(ident, returnType, argTypes, arguments) } } var UTF8Decoder = new TextDecoder('utf8') function UTF8ToString(ptr, maxBytesToRead) { if (!ptr) return '' var maxPtr = ptr + maxBytesToRead for (var end = ptr; !(end >= maxPtr) && HEAPU8[end]; ) ++end return UTF8Decoder.decode(HEAPU8.subarray(ptr, end)) } function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) { if (!(maxBytesToWrite > 0)) return 0 var startIdx = outIdx var endIdx = outIdx + maxBytesToWrite - 1 for (var i = 0; i < str.length; ++i) { var u = str.charCodeAt(i) if (u >= 55296 && u <= 57343) { var u1 = str.charCodeAt(++i) u = (65536 + ((u & 1023) << 10)) | (u1 & 1023) } if (u <= 127) { if (outIdx >= endIdx) break heap[outIdx++] = u } else if (u <= 2047) { if (outIdx + 1 >= endIdx) break heap[outIdx++] = 192 | (u >> 6) heap[outIdx++] = 128 | (u & 63) } else if (u <= 65535) { if (outIdx + 2 >= endIdx) break heap[outIdx++] = 224 | (u >> 12) heap[outIdx++] = 128 | ((u >> 6) & 63) heap[outIdx++] = 128 | (u & 63) } else { if (outIdx + 3 >= endIdx) break heap[outIdx++] = 240 | (u >> 18) heap[outIdx++] = 128 | ((u >> 12) & 63) heap[outIdx++] = 128 | ((u >> 6) & 63) heap[outIdx++] = 128 | (u & 63) } } heap[outIdx] = 0 return outIdx - startIdx } function stringToUTF8(str, outPtr, maxBytesToWrite) { return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite) } function lengthBytesUTF8(str) { var len = 0 for (var i = 0; i < str.length; ++i) { var u = str.charCodeAt(i) if (u >= 55296 && u <= 57343) u = (65536 + ((u & 1023) << 10)) | (str.charCodeAt(++i) & 1023) if (u <= 127) ++len else if (u <= 2047) len += 2 else if (u <= 65535) len += 3 else len += 4 } return len } function allocateUTF8(str) { var size = lengthBytesUTF8(str) + 1 var ret = _malloc(size) if (ret) stringToUTF8Array(str, HEAP8, ret, size) return ret } function writeArrayToMemory(array, buffer2) { HEAP8.set(array, buffer2) } function alignUp(x, multiple) { if (x % multiple > 0) { x += multiple - (x % multiple) } return x } var buffer, HEAP8, HEAPU8 var HEAP_DATA_VIEW function updateGlobalBufferAndViews(buf) { buffer = buf Module['HEAP_DATA_VIEW'] = HEAP_DATA_VIEW = new DataView(buf) Module['HEAP8'] = HEAP8 = new Int8Array(buf) Module['HEAP16'] = new Int16Array(buf) Module['HEAP32'] = new Int32Array(buf) Module['HEAPU8'] = HEAPU8 = new Uint8Array(buf) Module['HEAPU16'] = new Uint16Array(buf) Module['HEAPU32'] = new Uint32Array(buf) Module['HEAPF32'] = new Float32Array(buf) Module['HEAPF64'] = new Float64Array(buf) } Module['INITIAL_MEMORY'] || 16777216 var wasmTable var __ATPRERUN__ = [] var __ATINIT__ = [] var __ATPOSTRUN__ = [] function preRun() { if (Module['preRun']) { if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']] while (Module['preRun'].length) { addOnPreRun(Module['preRun'].shift()) } } callRuntimeCallbacks(__ATPRERUN__) } function initRuntime() { callRuntimeCallbacks(__ATINIT__) } function postRun() { if (Module['postRun']) { if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']] while (Module['postRun'].length) { addOnPostRun(Module['postRun'].shift()) } } callRuntimeCallbacks(__ATPOSTRUN__) } function addOnPreRun(cb) { __ATPRERUN__.unshift(cb) } function addOnInit(cb) { __ATINIT__.unshift(cb) } function addOnPostRun(cb) { __ATPOSTRUN__.unshift(cb) } var runDependencies = 0 var dependenciesFulfilled = null function addRunDependency(id) { runDependencies++ if (Module['monitorRunDependencies']) { Module['monitorRunDependencies'](runDependencies) } } function removeRunDependency(id) { runDependencies-- if (Module['monitorRunDependencies']) { Module['monitorRunDependencies'](runDependencies) } if (runDependencies == 0) { if (dependenciesFulfilled) { var callback = dependenciesFulfilled dependenciesFulfilled = null callback() } } } Module['preloadedImages'] = {} Module['preloadedAudios'] = {} function abort(what) { if (Module['onAbort']) { Module['onAbort'](what) } what += '' err(what) ABORT = true what = 'abort(' + what + '). Build with -s ASSERTIONS=1 for more info.' var e = new WebAssembly.RuntimeError(what) readyPromiseReject(e) throw e } var dataURIPrefix = 'data:application/octet-stream;base64,' function isDataURI(filename) { return filename.startsWith(dataURIPrefix) } var wasmBinaryFile = 'data:application/octet-stream;base64,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QCAAKAJIIgEgASADaiADEAcaAkAgAyAAKAJsIgFNBEAgACABIANrNgJsDAELIABCADcCbAsgACAAKAJoIANrIgE2AmggACAAKAJYIANrNgJYIAEgACgChC5JBEAgACABNgKELgsgAEH8gAEoAgARAwAgAiADaiECCwJAIAAoAgAiASgCBCIERQ0AIAAoAjwhBSAAIAIgBCACIARJGyICBH8gACgCSCAAKAJoaiAFaiEFIAEgBCACazYCBAJAAkACQAJAIAEoAhwiBCgCFEEBaw4CAQACCyAEQaABaiAFIAEoAgAgAkHcgAEoAgARCAAMAgsgASABKAIwIAUgASgCACACQcSAASgCABEEADYCMAwBCyAFIAEoAgAgAhAHGgsgASABKAIAIAJqNgIAIAEgASgCCCACajYCCCAAKAI8BSAFCyACaiICNgI8AkAgACgChC4iASACakEDSQ0AIAAoAmggAWshAQJAIAAoAnRBgQhPBEAgACAAIAAoAkggAWoiAi0AACACLQABIAAoAnwRAAA2AlQMAQsgAUUNACAAIAFBAWsgACgChAERAgAaCyAAKAKELiAAKAI8IgJBAUZrIgRFDQAgACABIAQgACgCgAERBQAgACAAKAKELiAEazYChC4gACgCPCECCyACQYUCSw0AIAAoAgAoAgRFDQAgACgCMCEBDAELCwJAIAAoAkQiAiAAKAJAIgNNDQAgAAJ/IAAoAjwgACgCaGoiASADSwRAIAAoAkggAWpBACACIAFrIgNBggIgA0GCAkkbIgMQGSABIANqDAELIAFBggJqIgEgA00NASAAKAJIIANqQQAgAiADayICIAEgA2siAyACIANJGyIDEBkgACgCQCADags2AkALC50CAQF/AkAgAAJ/IAAoAqAuIgFBwABGBEAgACgCBCAAKAIQaiAAKQOYLjcAACAAQgA3A5guIAAgACgCEEEIajYCEEEADAELIAFBIE4EQCAAKAIEIAAoAhBqIAApA5guPgAAIAAgAEGcLmo1AgA3A5guIAAgACgCEEEEajYCECAAIAAoAqAuQSBrIgE2AqAuCyABQRBOBEAgACgCBCAAKAIQaiAAKQOYLj0AACAAIAAoAhBBAmo2AhAgACAAKQOYLkIQiDcDmC4gACAAKAKgLkEQayIBNgKgLgsgAUEISA0BIAAgACgCECIBQQFqNgIQ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KAJUIgEEfyABQQAgARAiEBkgACgCVAVBAAsQBiAAQQA2AlQLC9wMAgl/AX4jAEFAaiIGJAACQAJAAkACQAJAIAEoAjBBABAjIgVBAkZBACABKAI4QQAQIyIEQQFGGw0AIAVBAUZBACAEQQJGGw0AIAVBAkciAw0BIARBAkcNAQsgASABLwEMQYAQcjsBDEEAIQMMAQsgASABLwEMQf/vA3E7AQxBACEFIANFBEBB9eABIAEoAjAgAEEIahBpIgVFDQILIAJBgAJxBEAgBSEDDAELIARBAkcEQCAFIQMMAQtB9cYBIAEoAjggAEEIahBpIgNFBEAgBRAcDAILIAMgBTYCAAsgASABLwEMQf7/A3EgAS8BUiIFQQBHcjsBDAJAAkACQAJAAn8CQAJAIAEpAyhC/v///w9WDQAgASkDIEL+////D1YNACACQYAEcUUNASABKQNIQv////8PVA0BCyAFQYECa0H//wNxQQNJIQdBAQwBCyAFQYECa0H//wNxIQQgAkGACnFBgApHDQEgBEEDSSEHQQALIQkgBkIcEBciBEUEQCAAQQhqIgAEQCAAQQA2AgQgAEEONgIACyADEBwMBQsgAkGACHEhBQJAAkAgAkGAAnEEQAJAIAUNACABKQMgQv////8PVg0AIAEpAyhCgICAgBBUDQMLIAQgASkDKBAYIAEpAyAhDAwBCwJAAkACQCAFDQAgASkDIEL/////D1YNACABKQMoIgxC/////w9WDQEgASkDSEKAgICAEFQNBAsgASkDKCIMQv////8PVA0BCyAEIAwQGAsgASkDICIMQv////8PWgRAIAQgDBAYCyABKQNIIgxC/////w9UDQELIAQgDBAYCyAELQAARQRAIABBCGoiAARAIABBADYCBCAAQRQ2AgALIAQQCCADEBwMBQtBASEKQQEgBC0AAAR+IAQpAxAFQgALp0H//wNxIAYQRyEFIAQQCCAFIAM2AgAgBw0BDAILIAMhBSAEQQJLDQELIAZCBxAXIgRFBEAgAEEIaiIABEAgAEEANgIEIABBDjYCAAsgBRAcDAMLIARBAhANIARBhxJBAhAsIAQgAS0AUhBwIAQgAS8BEBANIAQtAABFBEAgAEEIaiIABEAgAEEANgIEIABBFDYCAAsgBBAIDAILQYGyAkEHIAYQRyEDIAQQCCADIAU2AgBBASEL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NgIEIABB7A42AhggGiEdDAMLIARB/wFxIgJBwABxRQRAIAggDSADLwECQQJ0aiAdp0F/IAJ0QX9zcUECdGoiAy0AASICayEIIB0gAq2IIR0gAy0AACIERQ0HDAELCyAEQSBxBEAgB0G//gA2AgQgASECDAgLIAdB0f4ANgIEIABB0A42AhggASECDAcLIB1BfyAGdEF/c62DIBt8IhunIQUgCCAEQQ9xIgNrIQggGiAErUIPg4ghHSABIBdrIgYgAjMBAiAaQX8gA3RBf3Otg3ynIgRPDQIgBCAGayIGIBlNDQEgBygCjEdFDQEgB0HR/gA2AgQgAEG5DDYCGAsgASECIAshBQwFCwJAIA5FBEAgDCARIAZraiEDDAELIAYgDk0EQCAMIA4gBmtqIQMMAQsgDCARIAYgDmsiBmtqIQMgBSAGTQ0AIAUgBmshBQJAAkAgASADTSABIA8gAWusIhogBq0iGyAaIBtUGyIapyIGaiICIANLcQ0AIAMgBmogAUsgASADT3ENACABIAMgBhAHGiACIQEMAQsgASADIAMgAWsiASABQR91IgFqIAFzIgIQByACaiEBIBogAq0iHn0iHFANACACIANqIQIDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgASACKQAANwAAIAEgAikAGDcAGCABIAIpABA3ABAgASACKQAINwAIIBpCIH0hGiACQSBqIQIgAUEgaiEBIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAEgAikAADcAACABIAIpABg3ABggASACKQAQNwAQIAEgAikACDcACCABIAIpADg3ADggASACKQAwNwAwIAEgAikAKDcAKCABIAIpACA3ACAgASACKQBYNwBYIAEgAikAUDcAUCABIAIpAEg3AEggASACKQBANwBAIAEgAikAYDcAYCABIAIpAGg3AGggASACKQBwNwBwIAEgAikAeDcAeCACQYABaiECIAFBgAFqIQEgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAEgAikAADcAACABIAIpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCABIAIpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCABIAIoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCABIAIvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCABIAItAAA6AAAgAkEBaiECIAFBAWohAQsgHEIAUg0ACwsgDiEGIAwhAwsgBSAGSwRAAkACQCABIANNIAEgDyABa6wiGiAGrSIbIBogG1QbIhqnIglqIgIgA0txDQAgAyAJaiABSyABIANPcQ0AIAEgAyAJEAcaDAELIAEgAyADIAFrIgEgAUEfdSIBaiABcyIBEAcgAWohAiAaIAGtIh59IhxQDQAgASADaiEBA0ACQCAcIB4gHCAeVBsiG0IgVARAIBshGgwBCyAbIhpCIH0iIEIFiEIBfEIDgyIfUEUEQANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCAaQiB9IRogAUEgaiEBIAJBIGohAiAfQgF9Ih9CAFINAAsLICBC4ABUDQADQCACIAEpAAA3AAAgAiABKQAYNwAYIAIgASkAEDcAECACIAEpAAg3AAggAiABKQA4NwA4IAIgASkAMDcAMCACIAEpACg3ACggAiABKQAgNwAgIAIgASkAWDcAWCACIAEpAFA3AFAgAiABKQBINwBIIAIgASkAQDcAQCACIAEpAGA3AGAgAiABKQBoNwBoIAIgASkAcDcAcCACIAEpAHg3AHggAUGAAWohASACQYABaiECIBpCgAF9IhpCH1YNAAsLIBpCEFoEQCACIAEpAAA3AAAgAiABKQAINwAIIBpCEH0hGiACQRBqIQIgAUEQaiEBCyAaQghaBEAgAiABKQAANwAAIBpCCH0hGiACQQhqIQIgAUEIaiEBCyAaQgRaBEAgAiABKAAANgAAIBpCBH0hGiACQQRqIQIgAUEEaiEBCyAaQgJaBEAgAiABLwAAOwAAIBpCAn0hGiACQQJqIQIgAUECaiEBCyAcIBt9IRwgGlBFBEAgAiABLQAAOgAAIAJBAWohAiABQQFqIQELIBxCAFINAAsLIAUgBmshAUEAIARrIQUCQCAEQQdLBEAgBCEDDAELIAEgBE0EQCAEIQMMAQsgAiAEayEFA0ACQCACIAUpAAA3AAAgBEEBdCEDIAEgBGshASACIARqIQIgBEEDSw0AIAMhBCABIANLDQELC0EAIANrIQULIAIgBWohBAJAIAUgDyACa6wiGiABrSIbIBogG1QbIhqnIgFIIAVBf0pxDQAgBUEBSCABIARqIAJLcQ0AIAIgBCABEAcgAWohAgwDCyACIAQgAyADQR91IgFqIAFzIgEQByABaiECIBogAa0iHn0iHFANAiABIARqIQEDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIBpCIH0hGiABQSBqIQEgAkEgaiECIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCACIAEpADg3ADggAiABKQAwNwAwIAIgASkAKDcAKCACIAEpACA3ACAgAiABKQBYNwBYIAIgASkAUDcAUCACIAEpAEg3AEggAiABKQBANwBAIAIgASkAYDcAYCACIAEpAGg3AGggAiABKQBwNwBwIAIgASkAeDcAeCABQYABaiEBIAJBgAFqIQIgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAIgASkAADcAACACIAEpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCACIAEpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCACIAEoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCACIAEvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCACIAEtAAA6AAAgAkEBaiECIAFBAWohAQsgHFBFDQALDAILAkAgASADTSABIA8gAWusIhogBa0iGyAaIBtUGyIapyIEaiICIANLcQ0AIAMgBGogAUsgASADT3ENACABIAMgBBAHGgwCCyABIAMgAyABayIBIAFBH3UiAWogAXMiARAHIAFqIQIgGiABrSIefSIcUA0BIAEgA2ohAQNAAkAgHCAeIBwgHlQbIhtCIFQEQCAbIRoMAQsgGyIaQiB9IiBCBYhCAXxCA4MiH1BFBEADQCACIAEpAAA3AAAgAiABKQAYNwAYIAIgASkAEDcAECACIAEpAAg3AAggGkIgfSEaIAFBIGohASACQSBqIQIgH0IBfSIfQgBSDQALCyAgQuAAVA0AA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIAIgASkAODcAOCACIAEpADA3ADAgAiABKQAoNwAoIAIgASkAIDcAICACIAEpAFg3AFggAiABKQBQNwBQIAIgASkASDcASCACIAEpAEA3AEAgAiABKQBgNwBgIAIgASkAaDcAaCACIAEpAHA3AHAgAiABKQB4NwB4IAFBgAFqIQEgAkGAAWohAiAaQoABfSIaQh9WDQALCyAaQhBaBEAgAiABKQAANwAAIAIgASkACDcACCAaQhB9IRogAkEQaiECIAFBEGohAQsgGkIIWgRAIAIgASkAADcAACAaQgh9IRogAkEIaiECIAFBCGohAQsgGkIEWgRAIAIgASgAADYAACAaQgR9IRogAkEEaiECIAFBBGohAQsgGkICWgRAIAIgAS8AADsAACAaQgJ9IRogAkECaiECIAFBAmohAQsgHCAbfSEcIBpQRQRAIAIgAS0AADoAACACQQFqIQIgAUEBaiEBCyAcUEUNAAsMAQsCQAJAIBYEQAJAIAQgBUkEQCAHKAKYRyAESw0BCyABIARrIQMCQEEAIARrIgVBf0ogDyABa6wiGiAbIBogG1QbIhqnIgIgBUpxDQAgBUEBSCACIANqIAFLcQ0AIAEgAyACEAcgAmohAgwFCyABIAMgBCAEQR91IgFqIAFzIgEQByABaiECIBogAa0iHn0iHFANBCABIANqIQEDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIBpCIH0hGiABQSBqIQEgAkEgaiECIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCACIAEpADg3ADggAiABKQAwNwAwIAIgASkAKDcAKCACIAEpACA3ACAgAiABKQBYNwBYIAIgASkAUDcAUCACIAEpAEg3AEggAiABKQBANwBAIAIgASkAYDcAYCACIAEpAGg3AGggAiABKQBwNwBwIAIgASkAeDcAeCABQYABaiEBIAJBgAFqIQIgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAIgASkAADcAACACIAEpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCACIAEpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCACIAEoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCACIAEvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCACIAEtAAA6AAAgAkEBaiECIAFBAWohAQsgHFBFDQALDAQLIBAgAWsiCUEBaiIGIAUgBSAGSxshAyABIARrIQIgAUEHcUUNAiADRQ0CIAEgAi0AADoAACACQQFqIQIgAUEBaiIGQQdxQQAgA0EBayIFGw0BIAYhASAFIQMgCSEGDAILAkAgBCAFSQRAIAcoAphHIARLDQELIAEgASAEayIGKQAANwAAIAEgBUEBa0EHcUEBaiIDaiECIAUgA2siBEUNAyADIAZqIQEDQCACIAEpAAA3AAAgAUEIaiEBIAJBCGohAiAEQQhrIgQNAAsMAwsgASAEIAUQPyECDAILIAEgAi0AADoAASAJQQFrIQYgA0ECayEFIAJBAWohAgJAIAFBAmoiCkEHcUUNACAFRQ0AIAEgAi0AADoAAiAJQQJrIQYgA0EDayEFIAJBAWohAgJAIAFBA2oiCkEHcUUNACAFRQ0AIAEgAi0AADoAAyAJQQNrIQYgA0EEayEFIAJBAWohAgJAIAFBBGoiCkEHcUUNACAFRQ0AIAEgAi0AADoABCAJQQRrIQYgA0EFayEFIAJBAWohAgJAIAFBBWoiCkEHcUUNACAFRQ0AIAEgAi0AADoABSAJQQVrIQYgA0EGayEFIAJBAWohAgJAIAFBBmoiCkEHcUUNACAFRQ0AIAEgAi0AADoABiAJQQZrIQYgA0EHayEFIAJBAWohAgJAIAFBB2oiCkEHcUUNACAFRQ0AIAEgAi0AADoAByAJQQdrIQYgA0EIayEDIAFBCGohASACQQFqIQIMBgsgCiEBIAUhAwwFCyAKIQEgBSEDDAQLIAohASAFIQMMAwsgCiEBIAUhAwwCCyAKIQEgBSEDDAELIAohASAFIQMLAkACQCAGQRdNBEAgA0UNASADQQFrIQUgA0EHcSIEBEADQCABIAItAAA6AAAgA0EBayEDIAFBAWohASACQQFqIQIgBEEBayIEDQALCyAFQQdJDQEDQCABIAItAAA6AAAgASACLQABOgABIAEgAi0AAjoAAiABIAItAAM6AAMgASACLQAEOgAEIAEgAi0ABToABSABIAItAAY6AAYgASACLQAHOgAHIAFBCGohASACQQhqIQIgA0EIayIDDQALDAELIAMNAQsgASECDAELIAEgBCADED8hAgsgCyEFDAELIAEgAy0AAjoAACABQQFqIQILIAUgFE8NACACIBNJDQELCyAAIAI2AgwgACAFIAhBA3ZrIgE2AgAgACATIAJrQYMCajYCECAAIBQgAWtBDmo2AgQgByAIQQdxIgA2AogBIAcgHUJ/IACthkJ/hYM+AoQBC+cFAQR/IAMgAiACIANLGyEEIAAgAWshAgJAIABBB3FFDQAgBEUNACAAIAItAAA6AAAgA0EBayEGIAJBAWohAiAAQQFqIgdBB3FBACAEQQFrIgUbRQRAIAchACAFIQQgBiEDDAELIAAgAi0AADoAASADQQJrIQYgBEECayEFIAJBAWohAgJAIABBAmoiB0EHcUUNACAFRQ0AIAAgAi0AADoAAiADQQNrIQYgBEEDayEFIAJBAWohAgJAIABBA2oiB0EHcUUNACAFRQ0AIAAgAi0AADoAAyADQQRrIQYgBEEEayEFIAJBAWohAgJAIABBBGoiB0EHcUUNACAFRQ0AIAAgAi0AADoABCADQQVrIQYgBEEFayEFIAJBAWohAgJAIABBBWoiB0EHcUUNACAFRQ0AIAAgAi0AADoABSADQQZrIQYgBEEGayEFIAJBAWohAgJAIABBBmoiB0EHcUUNACAFRQ0AIAAgAi0AADoABiADQQdrIQYgBEEHayEFIAJBAWohAgJAIABBB2oiB0EHcUUNACAFRQ0AIAAgAi0AADoAByADQQhrIQMgBEEIayEEIABBCGohACACQQFqIQIMBgsgByEAIAUhBCAGIQMMBQsgByEAIAUhBCAGIQMMBAsgByEAIAUhBCAGIQMMAwsgByEAIAUhBCAGIQMMAgsgByEAIAUhBCAGIQMMAQsgByEAIAUhBCAGIQMLAkAgA0EXTQRAIARFDQEgBEEBayEBIARBB3EiAwRAA0AgACACLQAAOgAAIARBAWshBCAAQQFqIQAgAkEBaiECIANBAWsi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CyAAIAMtAAAEfiADKQMQBUIAC6dB//8DcSADKAIEEEcLIQUgAxAICyAEQRBqJAAgBQvgAQICfwF+QTAQCSICRQRAIAEEQCABQQA2AgQgAUEONgIAC0EADwsgAkIANwMIIAJBADYCACACQgA3AxAgAkIANwMYIAJCADcDICACQgA3ACUgAFAEQCACDwsCQCAAQv////8AVg0AIACnQQR0EAkiA0UNACACIAM2AgBBACEBQgEhBANAIAMgAUEEdGoiAUIANwIAIAFCADcABSAAIARSBEAgBKchASAEQgF8IQQMAQsLIAIgADcDCCACIAA3AxAgAg8LIAEEQCABQQA2AgQgAUEONgIAC0EAEBAgAhAGQQAL7gECA38BfiMAQRBrIgQkAAJAIARBDGpCBBAXIgNFBEBBfyECDAELAkAgAQRAIAJBgAZxIQUDQAJAIAUgASgCBHFFDQACQCADKQMIQgBUBEAgA0EAOgAADAELIANCADcDECADQQE6AAALIAMgAS8BCBANIAMgAS8BChANIAMtAABFBEAgAEEIaiIABEAgAEEANgIEIABBFDYCAAtBfyECDAQLQX8hAiAAIARBDGpCBBAbQQBIDQMgATMBCiIGUA0AIAAgASgCDCAGEBtBAEgNAwsgASgCACIBDQALC0EAIQILIAMQCAsgBEEQaiQAIAILPAEBfyAABEAgAUGABnEhAQNAIAEgACgCBHEEQCACIAAvAQpqQQRqIQILIAAoAgAiAA0ACwsgAkH//wNxC5wBAQN/IABFBEBBAA8LIAAhAwNAAn8CQAJAIAAvAQgiAUH04AFNBEAgAUEBRg0BIAFB9cYBRg0BDAILIAFBgbICRg0AIAFB9eABRw0BCyAAKAIAIQEgAEEANgIAIAAoAgwQBiAAEAYgASADIAAgA0YbIQMCQCACRQRAQQAhAgwBCyACIAE2AgALIAEMAQsgACICKAIACyIADQALIAMLsgQCBX8BfgJAAkACQCAAIAGtEBciAQRAIAEtAAANAUEAIQAMAgsgBARAIARBADYCBCAEQQ42AgALQQAPC0EAIQADQCABLQAABH4gASkDCCABKQMQfQVCAAtCBFQNASABEAwhByABIAEQDCIGrRATIghFBEBBACECIAQEQCAEQQA2AgQgBEEVNgIACyABEAggAEUNAwNAIAAoAgAhASAAKAIMEAYg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DCAAQRg2AggLDAMLIAAgBiAFLwFqQQAgBCABEQYAIQEgBhALIAFFDQILAkAgDUUEQCABIQMMAQsgACABIAUvAWgQgQEhAyABEAsgA0UNAQsCQCAJRSAMckUEQCADIQEMAQsgACADQQEQgAEhASADEAsgAUUNAQsgASEDDAELQQAhAwsgBUHwAGokACADC4UBAQF/IAFFBEAgAEEIaiIABEAgAEEANgIEIABBEjYCAAtBAA8LQTgQCSIDRQRAIABBCGoiAARAIABBADYCBCAAQQ42AgALQQAPCyADQQA2AhAgA0IANwIIIANCADcDKCADQQA2AgQgAyACNgIAIANCADcDGCADQQA2AjAgACABQTsgAxBCCw8AIAAgASACQQBBABCCAQusAgECfyABRQRAIABBCGoiAARAIABBADYCBCAAQRI2AgALQQAPCwJAIAJBfUsNACACQf//A3FBCEYNACAAQQhqIgAEQCAAQQA2AgQgAEEQNgIAC0EADwsCQEGwwAAQCSIFBEAgBUEANgIIIAVCADcCACAFQYiBAUGogQEgAxs2AqhAIAUgAjYCFCAFIAM6ABAgBUEAOgAPIAVBADsBDCAFIAMgAkF9SyIGcToADiAFQQggAiAGG0H//wNxIAQgBUGIgQFBqIEBIAMbKAIAEQAAIgI2AqxAIAINASAFEDEgBRAGCyAAQQhqIgAEQCAAQQA2AgQgAEEONgIAC0EADwsgACABQTogBRBCIgAEfyAABSAFKAKsQCAFKAKoQCgCBBEDACAFEDEgBRAGQQALC6ABAQF/IAIgACgCBCIDIAIgA0kbIgIEQCAAIAMgAms2AgQCQAJAAkACQCAAKAIcIgMoAhRBAWsOAgEAAgsgA0GgAWogASAAKAIAIAJB3IABKAIAEQgADAILIAAgACgCMCABIAAoAgAgAkHEgAEoAgARBAA2AjAMAQsgASAAKAIAIAIQBxoLIAAgACgCACACajYCACAAIAAoAgggAmo2AggLC7cCAQR/QX4hAgJAIABFDQAgACgCIEUNACAAKAIkIgRFDQAgACgCHCIBRQ0AIAEoAgAgAEcNAAJAAkAgASgCICIDQTlrDjkBAgICAgICAgICAgIBAgICAQICAgICAgICAgICAgICAgICAQICAgICAgICAgICAQICAgICAgICAgEACyADQZoFRg0AIANBKkcNAQsCfwJ/An8gASgCBCICBEAgBCAAKAIoIAIQHiAAKAIcIQELIAEoAlAiAgsEQCAAKAIkIAAoAiggAhAeIAAoAhwhAQsgASgCTCICCwRAIAAoAiQgACgCKCACEB4gACgCHCEBCyABKAJIIgILBEAgACgCJCAAKAIoIAIQHiAAKAIcIQELIAAoAiQgACgCKCABEB4gAEEANgIcQX1BACADQfEARhshAgsgAgvrCQEIfyAAKAIwIgMgACgCDEEFayICIAIgA0sbIQggACgCACIEKAIEIQkgAUEERiEHAkADQCAEKAIQIgMgACgCoC5BKmpBA3UiAkkEQEEBIQYMAgsgCCADIAJrIgMgACgCaCAAKAJYayICIAQoAgRqIgVB//8DIAVB//8DSRsiBiADIAZJGyIDSwRAQQEhBiADQQBHIAdyRQ0CIAFFDQIgAyAFRw0CCyAAQQBBACAHIAMgBUZxIgUQOSAAIAAoAhBBBGsiBDYCECAAKAIEIARqIAM7AAAgACAAKAIQQQJqIgQ2AhAgACgCBCAEaiADQX9zOwAAIAAgACgCEEECajYCECAAKAIAEAoCfyACBEAgACgCACgCDCAAKAJIIAAoAlhqIAMgAiACIANLGyICEAcaIAAoAgAiBCAEKAIMIAJqNgIMIAQgBCgCECACazYCECAEIAQoAhQgAmo2AhQgACAAKAJYIAJqNgJYIAMgAmshAwsgAwsEQCAAKAIAIgIgAigCDCADEIMBIAAoAgAiAiACKAIMIANqNgIMIAIgAigCECADazYCECACIAIoAhQgA2o2AhQLIAAoAgAhBCAFRQ0AC0EAIQYLAkAgCSAEKAIEayICRQRAIAAoAmghAwwBCwJAIAAoAjAiAyACTQRAIABBAjYCgC4gACgCSCAEKAIAIANrIAMQBxogACAAKAIwIgM2AoQuIAAgAzYCaAwBCyACIAAoAkQgACgCaCIFa08EQCAAIAUgA2siBDYCaCAAKAJIIgUgAyAFaiAEEAcaIAAoAoAuIgNBAU0EQCAAIANBAWo2AoAuCyAAIAAoAmgiBSAAKAKELiIDIAMgBUsbNgKELiAAKAIAIQQLIAAoAkggBWogBCgCACACayACEAcaIAAgACgCaCACaiIDNgJoIAAgACgCMCAAKAKELiIEayIFIAIgAiAFSxsgBGo2AoQuCyAAIAM2AlgLIAAgAyAAKAJAIgIgAiADSRs2AkBBAyECAkAgBkUNACAAKAIAIgUoAgQhAgJAAkAgAUF7cUUNACACDQBBASECIAMgACgCWEYNAiAAKAJEIANrIQRBACECDAELIAIgACgCRCADayIETQ0AIAAoAlgiByAAKAIwIgZIDQAgACADIAZrIgM2AmggACAHIAZrNgJYIAAoAkgiAiACIAZqIAMQBxogACgCgC4iA0EBTQRAIAAgA0EBajYCgC4LIAAgACgCaCIDIAAoAoQuIgIgAiADSxs2AoQuIAAoAjAgBGohBCAAKAIAIgUoAgQhAgsCQCACIAQgAiAESRsiAkUEQCAAKAIwIQUMAQsgBSAAKAJIIANqIAIQgwEgACAAKAJoIAJqIgM2AmggACAAKAIwIgUgACgChC4iBGsiBiACIAIgBksbIARqNgKELgsgACADIAAoAkAiAiACIANJGzYCQCADIAAoAlgiBmsiAyAFIAAoAgwgACgCoC5BKmpBA3VrIgJB//8DIAJB//8DSRsiBCAEIAVLG0kEQEEAIQIgAUEERiADQQBHckUNASABRQ0BIAAoAgAoAgQNASADIARLDQELQQAhAiABQQRGBEAgACgCACgCBEUgAyAETXEhAgsgACAAKAJIIAZqIAQgAyADIARLGyIBIAIQOSAAIAAoAlggAWo2AlggACgCABAKQQJBACACGw8LIAIL/woCCn8DfiAAKQOYLiENIAAoAqAuIQQgAkEATgRAQQRBAyABLwECIggbIQlBB0GKASAIGyEFQX8hCgNAIAghByABIAsiDEEBaiILQQJ0ai8BAiEIAkACQCAGQQFqIgMgBU4NACAHIAhHDQAgAyEGDAELAkAgAyAJSARAIAAgB0ECdGoiBkHOFWohCSAGQcwVaiEKA0AgCjMBACEPAn8gBCAJLwEAIgZqIgVBP00EQCAPIASthiANhCENIAUMAQsgBEHAAEYEQCAAKAIEIAAoAhBqIA03AAAgACAAKAIQQQhqNgIQIA8hDSAGDAELIAAoAgQgACgCEGogDyAErYYgDYQ3AAAgACAAKAIQQQhqNgIQIA9BwAAgBGutiCENIAVBQGoLIQQgA0EBayIDDQALDAELIAcEQAJAIAcgCkYEQCANIQ8gBCEFIAMhBgwBCyAAIAdBAnRqIgNBzBVqMwEAIQ8gBCADQc4Vai8BACIDaiIFQT9NBEAgDyAErYYgDYQhDwwBCyAEQcAARgRAIAAoAgQgACgCEGogDTcAACAAIAAoAhBBCGo2AhAgAyEFDAELIAAoAgQgACgCEGogDyAErYYgDYQ3AAAgACAAKAIQQQhqNgIQIAVBQGohBSAPQcAAIARrrYghDwsgADMBjBYhDgJAIAUgAC8BjhYiBGoiA0E/TQRAIA4gBa2GIA+EIQ4MAQsgBUHAAEYEQCAAKAIEIAAoAhBqIA83AAAgACAAKAIQQQhqNgIQIAQhAwwBCyAAKAIEIAAoAhBqIA4gBa2GIA+ENwAAIAAgACgCEEEIajYCECADQUBqIQMgDkHAACAFa62IIQ4LIAasQgN9IQ0gA0E9TQRAIANBAmohBCANIAOthiAOhCENDAILIANBwABGBEAgACgCBCAAKAIQaiAONwAAIAAgACgCEEEIajYCEEECIQQMAgsgACgCBCAAKAIQaiANIAOthiAOhDcAACAAIAAoAhBBCGo2AhAgA0E+ayEEIA1BwAAgA2utiCENDAELIAZBCUwEQCAAMwGQFiEOAkAgBCAALwGSFiIFaiIDQT9NBEAgDiAErYYgDYQhDgwBCyAEQcAARgRAIAAoAgQgACgCEGogDTcAACAAIAAoAhBBCGo2AhAgBSEDDAELIAAoAgQgACgCEGogDiAErYYgDYQ3AAAgACAAKAIQQQhqNgIQIANBQGohAyAOQcAAIARrrYghDgsgBqxCAn0hDSADQTxNBEAgA0EDaiEEIA0gA62GIA6EIQ0MAgsgA0HAAEYEQCAAKAIEIAAoAhBqIA43AAAgACAAKAIQQQhqNgIQQQMhBAwCCyAAKAIEIAAoAhBqIA0gA62GIA6ENwAAIAAgACgCEEEIajYCECADQT1rIQQgDUHAACADa62IIQ0MAQsgADMBlBYhDgJAIAQgAC8BlhYiBWoiA0E/TQRAIA4gBK2GIA2EIQ4MAQsgBEHAAEYEQCAAKAIEIAAoAhBqIA03AAAgACAAKAIQQQhqNgIQIAUhAwwBCyAAKAIEIAAoAhBqIA4gBK2GIA2ENwAAIAAgACgCEEEIajYCECADQUBqIQMgDkHAACAEa62IIQ4LIAatQgp9IQ0gA0E4TQRAIANBB2ohBCANIAOthiAOhCENDAELIANBwABGBEAgACgCBCAAKAIQaiAONwAAIAAgACgCEEEIajYCEEEHIQQMAQsgACgCBCAAKAIQaiANIAOthiAOhDcAACAAIAAoAhBBCGo2AhAgA0E5ayEEIA1BwAAgA2utiCENC0EAIQYCfyAIRQRAQYoBIQVBAwwBC0EGQQcgByAIRiIDGyEFQQNBBCADGwshCSAHIQoLIAIgDEcNAAsLIAAgBDYCoC4gACANNwOYLgv5BQIIfwJ+AkAgACgC8C1FBEAgACkDmC4hCyAAKAKgLiEDDAELA0AgCSIDQQNqIQkgAyAAKALsLWoiAy0AAiEFIAApA5guIQwgACgCoC4hBAJAIAMvAAAiB0UEQCABIAVBAnRqIgMzAQAhCyAEIAMvAQIiBWoiA0E/TQRAIAsgBK2GIAyEIQsMAgsgBEHAAEYEQCAAKAIEIAAoAhBqIAw3AAAgACAAKAIQQQhqNgIQIAUhAwwCCyAAKAIEIAAoAhBqIAsgBK2GIAyENwAAIAAgACgCEEEIajYCECADQUBqIQMgC0HAACAEa62IIQsMAQsgBUGAzwBqLQAAIghBAnQiBiABaiIDQYQIajMBACELIANBhghqLwEAIQMgCEEIa0ETTQRAIAUgBkGA0QBqKAIAa60gA62GIAuEIQsgBkHA0wBqKAIAIANqIQMLIAMgAiAHQQFrIgcgB0EHdkGAAmogB0GAAkkbQYDLAGotAAAiBUECdCIIaiIKLwECaiEGIAozAQAgA62GIAuEIQsgBCAFQQRJBH8gBgUgByAIQYDSAGooAgBrrSAGrYYgC4QhCyAIQcDUAGooAgAgBmoLIgVqIgNBP00EQCALIASthiAMhCELDAELIARBwABGBEAgACgCBCAAKAIQaiAMNwAAIAAgACgCEEEIajYCECAFIQMMAQsgACgCBCAAKAIQaiALIASthiAMhDcAACAAIAAoAhBBCGo2AhAgA0FAaiEDIAtBwAAgBGutiCELCyAAIAs3A5guIAAgAzYCoC4gCSAAKALwLUkNAAsLIAFBgAhqMwEAIQwCQCADIAFBgghqLwEAIgJqIgFBP00EQCAMIAOthiALhCEMDAELIANBwABGBEAgACgCBCAAKAIQaiALNwAAIAAgACgCEEEIajYCECACIQEMAQsgACgCBCAAKAIQaiAMIAOthiALhDcAACAAIAAoAhBBCGo2AhAgAUFAaiEBIAxBwAAgA2utiCEMCyAAIAw3A5guIAAgATYCoC4L8AQBA38gAEHkAWohAgNAIAIgAUECdCIDakEAOwEAIAIgA0EEcmpBADsBACABQQJqIgFBngJHDQALIABBADsBzBUgAEEAOwHYEyAAQZQWakEAOwEAIABBkBZqQQA7AQAgAEGMFmpBADsBACAAQYgWakEAOwEAIABBhBZqQQA7AQAgAEGAFmpBADsBACAAQfwVakEAOwEAIABB+BVqQQA7AQAgAEH0FWpBADsBACAAQfAVakEAOwEAIABB7BVqQQA7AQAgAEHoFWpBADsBACAAQeQVakEAOwEAIABB4BVqQQA7AQAgAEHcFWpBADsBACAAQdgVakEAOwEAIABB1BVqQQA7AQAgAEHQFWpBADsBACAAQcwUakEAOwEAIABByBRqQQA7AQAgAEHEFGpBADsBACAAQcAUakEAOwEAIABBvBRqQQA7AQAgAEG4FGpBADsBACAAQbQUakEAOwEAIABBsBRqQQA7AQAgAEGsFGpBADsBACAAQagUakEAOwEAIABBpBRqQQA7AQAgAEGgFGpBADsBACAAQZwUakEAOwEAIABBmBRqQQA7AQAgAEGUFGpBADsBACAAQZAUakEAOwEAIABBjBRqQQA7AQAgAEGIFGpBADsBACAAQYQUakEAOwEAIABBgBRqQQA7AQAgAEH8E2pBADsBACAAQfgTakEAOwEAIABB9BNqQQA7AQAgAEHwE2pBADsBACAAQewTakEAOwEAIABB6BNqQQA7AQAgAEHkE2pBADsBACAAQeATakEAOwEAIABB3BNqQQA7AQAgAEIANwL8LSAAQeQJakEBOwEAIABBADYC+C0gAEEANgLwLQuKAwIGfwR+QcgAEAkiBEUEQEEADwsgBEIANwMAIARCADcDMCAEQQA2AiggBEIANwMgIARCADcDGCAEQgA3AxAgBEIANwMIIARCADcDOCABUARAIARBCBAJIgA2AgQgAEUEQCAEEAYgAwRAIANBADYCBCADQQ42AgALQQAPCyAAQgA3AwAgBA8LAkAgAaciBUEEdBAJIgZFDQAgBCAGNgIAIAVBA3RBCGoQCSIFRQ0AIAQgATcDECAEIAU2AgQDQCAAIAynIghBBHRqIgcpAwgiDVBFBEAgBygCACIHRQRAIAMEQCADQQA2AgQgA0ESNgIACyAGEAYgBRAGIAQQBkEADwsgBiAKp0EEdGoiCSANNwMIIAkgBzYCACAFIAhBA3RqIAs3AwAgCyANfCELIApCAXwhCgsgDEIBfCIMIAFSDQALIAQgCjcDCCAEQgAgCiACGzcDGCAFIAqnQQN0aiALNwMAIAQgCzcDMCAEDwsgAwRAIANBADYCBCADQQ42AgALIAYQBiAEEAZBAAvlAQIDfwF+QX8hBQJAIAAgASACQQAQJiIERQ0AIAAgASACEIsBIgZFDQACfgJAIAJBCHENACAAKAJAIAGnQQR0aigCCCICRQ0AIAIgAxAhQQBOBEAgAykDAAwCCyAAQQhqIgAEQCAAQQA2AgQgAEEPNgIAC0F/DwsgAxAqIAMgBCgCGDYCLCADIAQpAyg3AxggAyAEKAIUNgIoIAMgBCkDIDcDICADIAQoAhA7ATAgAyAELwFSOwEyQvwBQtwBIAQtAAYbCyEHIAMgBjYCCCADIAE3AxAgAyAHQgOENwMAQQAhBQsgBQspAQF/IAAgASACIABBCGoiABAmIgNFBEBBAA8LIAMoAjBBACACIAAQJQuAAwEGfwJ/An9BMCABQYB/Sw0BGgJ/IAFBgH9PBEBBhIQBQTA2AgBBAAwBC0EAQRAgAUELakF4cSABQQtJGyIFQcwAahAJIgFFDQAaIAFBCGshAgJAIAFBP3FFBEAgAiEBDAELIAFBBGsiBigCACIHQXhxIAFBP2pBQHFBCGsiASABQUBrIAEgAmtBD0sbIgEgAmsiA2shBCAHQQNxRQRAIAIoAgAhAiABIAQ2AgQgASACIANqNgIADAELIAEgBCABKAIEQQFxckECcjYCBCABIARqIgQgBCgCBEEBcjYCBCAGIAMgBigCAEEBcXJBAnI2AgAgAiADaiIEIAQoAgRBAXI2AgQgAiADEDsLAkAgASgCBCICQQNxRQ0AIAJBeHEiAyAFQRBqTQ0AIAEgBSACQQFxckECcjYCBCABIAVqIgIgAyAFayIFQQNyNgIEIAEgA2oiAyADKAIEQQFyNgIEIAIgBRA7CyABQQhqCyIBRQsEQEEwDwsgACABNgIAQQALCwoAIABBiIQBEAQL6AIBBX8gACgCUCEBIAAvATAhBEEEIQUDQCABQQAgAS8BACICIARrIgMgAiADSRs7AQAgAUEAIAEvAQIiAiAEayIDIAIgA0kbOwECIAFBACABLwEEIgIgBGsiAyACIANJGzsBBCABQQAgAS8BBiICIARrIgMgAiADSRs7AQYgBUGAgARGRQRAIAFBCGohASAFQQRqIQUMAQsLAkAgBEUNACAEQQNxIQUgACgCTCEBIARBAWtBA08EQCAEIAVrIQADQCABQQAgAS8BACICIARrIgMgAiADSRs7AQAgAUEAIAEvAQIiAiAEayIDIAIgA0kbOwECIAFBACABLwEEIgIgBGsiAyACIANJGzsBBCABQQAgAS8BBiICIARrIgMgAiADSRs7AQYgAUEIaiEBIABBBGsiAA0ACwsgBUUNAANAIAFBACABLwEAIgAgBGsiAiAAIAJJGzsBACABQQJqIQEgBUEBayIFDQALCwuDAQEEfyACQQFOBEAgAiAAKAJIIAFqIgJqIQMgACgCUCEEA0AgBCACKAAAQbHz3fF5bEEPdkH+/wdxaiIFLwEAIgYgAUH//wNxRwRAIAAoAkwgASAAKAI4cUH//wNxQQF0aiAGOwEAIAUgATsBAAsgAUEBaiEBIAJBAWoiAiADSQ0ACwsLUAECfyABIAAoAlAgACgCSCABaigAAEGx893xeWxBD3ZB/v8HcWoiAy8BACICRwRAIAAoAkwgACgCOCABcUEBdGogAjsBACADIAE7AQALIAILugEBAX8jAEEQayICJAAgAkEAOgAIQYCBAUECNgIAQfyAAUEDNgIAQfiAAUEENgIAQfSAAUEFNgIAQfCAAUEGNgIAQeyAAUEHNgIAQeiAAUEINgIAQeSAAUEJNgIAQeCAAUEKNgIAQdyAAUELNgIAQdiAAUEMNgIAQdSAAUENNgIAQdCAAUEONgIAQcyAAUEPNgIAQciAAUEQNgIAQcSAAUERNgIAQcCAAUESNgIAIAAgARBYIAJBEGokAAu9AQEBfyMAQRBrIgEkACABQQA6AAhBgIEBQQI2AgBB/IABQQM2AgBB+IABQQQ2AgBB9IABQQU2AgBB8IABQQY2AgBB7IABQQc2AgBB6IABQQg2AgBB5IABQQk2AgBB4IABQQo2AgBB3IABQQs2AgBB2IABQQw2AgBB1IABQQ02AgBB0IABQQ42AgBBzIABQQ82AgBByIABQRA2AgBBxIABQRE2AgBBwIABQRI2AgAgAEEANgJAIAFBEGokAEEAC70BAQF/IwBBEGsiASQAIAFBADoACEGAgQFBAjYCAEH8gAFBAzYCAEH4gAFBBDYCAEH0gAFBBTYCAEHwgAFBBjYCAEHsgAFBBzYCAEHogAFBCDYCAEHkgAFBCTYCAEHggAFBCjYCAEHcgAFBCzYCAEHYgAFBDDYCAEHUgAFBDTYCAEHQgAFBDjYCAEHMgAFBDzYCAEHIgAFBEDYCAEHEgAFBETYCAEHAgAFBEjYCACAAKAJAIQAgAUEQaiQAIAALvgEBAX8jAEEQayIEJAAgBEEAOgAIQYCBAUECNgIAQfyAAUEDNgIAQfiAAUEENgIAQfSAAUEFNgIAQfCAAUEGNgIAQeyAAUEHNgIAQeiAAUEINgIAQeSAAUEJNgIAQeCAAUEKNgIAQdyAAUELNgIAQdiAAUEMNgIAQdSAAUENNgIAQdCAAUEONgIAQcyAAUEPNgIAQciAAUEQNgIAQcSAAUERNgIAQcCAAUESNgIAIAAgASACIAMQVyAEQRBqJAALygEAIwBBEGsiAyQAIANBADoACEGAgQFBAjYCAEH8gAFBAzYCAEH4gAFBBDYCAEH0gAFBBTYCAEHwgAFBBjYCAEHsgAFBBzYCAEHogAFBCDYCAEHkgAFBCTYCAEHggAFBCjYCAEHcgAFBCzYCAEHYgAFBDDYCAEHUgAFBDTYCAEHQgAFBDjYCAEHMgAFBDzYCAEHIgAFBEDYCAEHEgAFBETYCAEHAgAFBEjYCACAAIAAoAkAgASACQdSAASgCABEAADYCQCADQRBqJAALwAEBAX8jAEEQayIDJAAgA0EAOgAIQYCBAUECNgIAQfyAAUEDNgIAQfiAAUEENgIAQfSAAUEFNgIAQfCAAUEGNgIAQeyAAUEHNgIAQeiAAUEINgIAQeSAAUEJNgIAQeCAAUEKNgIAQdyAAUELNgIAQdiAAUEMNgIAQdSAAUENNgIAQdCAAUEONgIAQcyAAUEPNgIAQciAAUEQNgIAQcSAAUERNgIAQcCAAUESNgIAIAAgASACEF0hACADQRBqJAAgAAu+AQEBfyMAQRBrIgIkACACQQA6AAhBgIEBQQI2AgBB/IABQQM2AgBB+IABQQQ2AgBB9IABQQU2AgBB8IABQQY2AgBB7IABQQc2AgBB6IABQQg2AgBB5IABQQk2AgBB4IABQQo2AgBB3IABQQs2AgBB2IABQQw2AgBB1IABQQ02AgBB0IABQQ42AgBBzIABQQ82AgBByIABQRA2AgBBxIABQRE2AgBBwIABQRI2AgAgACABEFwhACACQRBqJAAgAAu2AQEBfyMAQRBrIgAkACAAQQA6AAhBgIEBQQI2AgBB/IABQQM2AgBB+IABQQQ2AgBB9IABQQU2AgBB8IABQQY2AgBB7IABQQc2AgBB6IABQQg2AgBB5IABQQk2AgBB4IABQQo2AgBB3IABQQs2AgBB2IABQQw2AgBB1IABQQ02AgBB0IABQQ42AgBBzIABQQ82AgBByIABQRA2AgBBxIABQRE2AgBBwIABQRI2AgAgAEEQaiQAQQgLwgEBAX8jAEEQayIEJAAgBEEAOgAIQYCBAUECNgIAQfyAAUEDNgIAQfiAAUEENgIAQfSAAUEFNgIAQfCAAUEGNgIAQeyAAUEHNgIAQeiAAUEINgIAQeSAAUEJNgIAQeCAAUEKNgIAQdyAAUELNgIAQdiAAUEMNgIAQdSAAUENNgIAQdCAAUEONgIAQcyAAUEPNgIAQciAAUEQNgIAQcSAAUERNgIAQcCAAUESNgIAIAAgASACIAMQWSEAIARBEGokACAAC8IBAQF/IwBBEGsiBCQAIARBADoACEGAgQFBAjYCAEH8gAFBAzYCAEH4gAFBBDYCAEH0gAFBBTYCAEHwgAFBBjYCAEHsgAFBBzYCAEHogAFBCDYCAEHkgAFBCTYCAEHggAFBCjYCAEHcgAFBCzYCAEHYgAFBDDYCAEHUgAFBDTYCAEHQgAFBDjYCAEHMgAFBDzYCAEHIgAFBEDYCAEHEgAFBETYCAEHAgAFBEjYCACAAIAEgAiADEFYhACAEQRBqJAAgAAsHACAALwEwC8ABAQF/IwBBEGsiAyQAIANBADoACEGAgQFBAjYCAEH8gAFBAzYCAEH4gAFBBDYCAEH0gAFBBTYCAEHwgAFBBjYCAEHsgAFBBzYCAEHogAFBCDYCAEHkgAFBCTYCAEHggAFBCjYCAEHcgAFBCzYCAEHYgAFBDDYCAEHUgAFBDTYCAEHQgAFBDjYCAEHMgAFBDzYCAEHIgAFBEDYCAEHEgAFBETYCAEHAgAFBEjYCACAAIAEgAhBVIQAgA0EQaiQAIAALBwAgACgCQAsaACAAIAAoAkAgASACQdSAASgCABEAADYCQAsLACAAQQA2AkBBAAsHACAAKAIgCwQAQQgLzgUCA34BfyMAQYBAaiIIJAACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAEDhECAwwFAAEECAkJCQkJCQcJBgkLIANCCFoEfiACIAEoAmQ2AgAgAiABKAJoNgIEQggFQn8LIQYMCwsgARAGDAoLIAEoAhAiAgRAIAIgASkDGCABQeQAaiICEEEiA1ANCCABKQMIIgVCf4UgA1QEQCACBEAgAkEANgIEIAJBFTYCAAsMCQsgAUEANgIQIAEgAyAFfDcDCCABIAEpAwAgA3w3AwALIAEtAHgEQCABKQMAIQUMCQtCACEDIAEpAwAiBVAEQCABQgA3AyAMCgsDQCAAIAggBSADfSIFQoDAACAFQoDAAFQbEBEiB0J/VwRAIAFB5ABqIgEEQCABIAAoAgw2AgAgASAAKAIQNgIECwwJCyAHUEUEQCABKQMAIgUgAyAHfCIDWA0KDAELCyABQeQAagRAIAFBADYCaCABQRE2AmQLDAcLIAEpAwggASkDICIFfSIHIAMgAyAHVhsiA1ANCAJAIAEtAHhFDQAgACAFQQAQFEF/Sg0AIAFB5ABqIgEEQCABIAAoAgw2AgAgASAAKAIQNgIECwwHCyAAIAIgAxARIgZCf1cEQCABQeQAagRAIAFBADYCaCABQRE2AmQLDAcLIAEgASkDICAGfCIDNwMgIAZCAFINCEIAIQYgAyABKQMIWg0IIAFB5ABqBEAgAUEANgJoIAFBETYCZAsMBgsgASkDICABKQMAIgV9IAEpAwggBX0gAiADIAFB5ABqEEQiA0IAUw0FIAEgASkDACADfDcDIAwHCyACIAFBKGoQYEEfdawhBgwGCyABMABgIQYMBQsgASkDcCEGDAQLIAEpAyAgASkDAH0hBgwDCyABQeQAagRAIAFBADYCaCABQRw2AmQLC0J/IQYMAQsgASAFNwMgCyAIQYBAayQAIAYLBwAgACgCAAsPACAAIAAoAjBBAWo2AjALGABB+IMBQgA3AgBBgIQBQQA2AgBB+IMBCwcAIABBDGoLBwAgACgCLAsHACAAKAIoCwcAIAAoAhgLFQAgACABrSACrUIghoQgAyAEEIoBCxMBAX4gABAzIgFCIIinEAAgAacLbwEBfiABrSACrUIghoQhBSMAQRBrIgEkAAJ/IABFBEAgBVBFBEAgBARAIARBADYCBCAEQRI2AgALQQAMAgtBAEIAIAMgBBA6DAELIAEgBTcDCCABIAA2AgAgAUIBIAMgBBA6CyEAIAFBEGokACAACxQAIAAgASACrSADrUIghoQgBBBSC9oCAgJ/AX4CfyABrSACrUIghoQiByAAKQMwVEEAIARBCkkbRQRAIABBCGoEQCAAQQA2AgwgAEESNgIIC0F/DAELIAAtABhBAnEEQCAAQQhqBEAgAEEANgIMIABBGTYCCAtBfwwBCyADBH8gA0H//wNxQQhGIANBfUtyBUEBC0UEQCAAQQhqBEAgAEEANgIMIABBEDYCCAtBfwwBCyAAKAJAIgEgB6ciBUEEdGooAgAiAgR/IAIoAhAgA0YFIANBf0YLIQYgASAFQQR0aiIBIQUgASgCBCEBAkAgBgRAIAFFDQEgAUEAOwFQIAEgASgCAEF+cSIANgIAIAANASABECAgBUEANgIEQQAMAgsCQCABDQAgBSACECsiATYCBCABDQAgAEEIagRAIABBADYCDCAAQQ42AggLQX8MAgsgASAEOwFQIAEgAzYCECABIAEoAgBBAXI2AgALQQALCxwBAX4gACABIAIgAEEIahBMIgNCIIinEAAgA6cLHwEBfiAAIAEgAq0gA61CIIaEEBEiBEIgiKcQACAEpwteAQF+An5CfyAARQ0AGiAAKQMwIgIgAUEIcUUNABpCACACUA0AGiAAKAJAIQADQCACIAKnQQR0IABqQRBrKAIADQEaIAJCAX0iAkIAUg0AC0IACyICQiCIpxAAIAKnCxMAIAAgAa0gAq1CIIaEIAMQiwELnwEBAn4CfiACrSADrUIghoQhBUJ/IQQCQCAARQ0AIAAoAgQNACAAQQRqIQIgBUJ/VwRAIAIEQCACQQA2AgQgAkESNgIAC0J/DAILQgAhBCAALQAQDQAgBVANACAAKAIUIAEgBRARIgRCf1UNACAAKAIUIQAgAgRAIAIgACgCDDYCACACIAAoAhA2AgQLQn8hBAsgBAsiBEIgiKcQACAEpwueAQEBfwJ/IAAgACABrSACrUIghoQgAyAAKAIcEH8iAQRAIAEQMkF/TARAIABBCGoEQCAAIAEoAgw2AgggACABKAIQNgIMCyABEAtBAAwCC0EYEAkiBEUEQCAAQQhqBEAgAEEANgIMIABBDjYCCAsgARALQQAMAgsgBCAANgIAIARBADYCDCAEQgA3AgQgBCABNgIUIARBADoAEAsgBAsLsQICAX8BfgJ/QX8hBAJAIAAgAa0gAq1CIIaEIgZBAEEAECZFDQAgAC0AGEECcQRAIABBCGoEQCAAQQA2AgwgAEEZNgIIC0F/DAILIAAoAkAiASAGpyICQQR0aiIEKAIIIgUEQEEAIQQgBSADEHFBf0oNASAAQQhqBEAgAEEANgIMIABBDzYCCAtBfwwCCwJAIAQoAgAiBQRAIAUoAhQgA0YNAQsCQCABIAJBBHRqIgEoAgQiBA0AIAEgBRArIgQ2AgQgBA0AIABBCGoEQCAAQQA2AgwgAEEONgIIC0F/DAMLIAQgAzYCFCAEIAQoAgBBIHI2AgBBAAwCC0EAIQQgASACQQR0aiIBKAIEIgBFDQAgACAAKAIAQV9xIgI2AgAgAg0AIAAQICABQQA2AgQLIAQLCxQAIAAgAa0gAq1CIIaEIAQgBRBzCxIAIAAgAa0gAq1CIIaEIAMQFAtBAQF+An4gAUEAIAIbRQRAIABBCGoEQCAAQQA2AgwgAEESNgIIC0J/DAELIAAgASACIAMQdAsiBEIgiKcQACAEpwvGAwIFfwF+An4CQAJAIAAiBC0AGEECcQRAIARBCGoEQCAEQQA2AgwgBEEZNgIICwwBCyABRQRAIARBCGoEQCAEQQA2AgwgBEESNgIICwwBCyABECIiByABakEBay0AAEEvRwRAIAdBAmoQCSIARQRAIARBCGoEQCAEQQA2AgwgBEEONgIICwwCCwJAAkAgACIGIAEiBXNBA3ENACAFQQNxBEADQCAGIAUtAAAiAzoAACADRQ0DIAZBAWohBiAFQQFqIgVBA3ENAAsLIAUoAgAiA0F/cyADQYGChAhrcUGAgYKEeHENAANAIAYgAzYCACAFKAIEIQMgBkEEaiEGIAVBBGohBSADQYGChAhrIANBf3NxQYCBgoR4cUUNAAsLIAYgBS0AACIDOgAAIANFDQADQCAGIAUtAAEiAzoAASAGQQFqIQYgBUEBaiEFIAMNAAsLIAcgACIDakEvOwAACyAEQQBCAEEAEFIiAEUEQCADEAYMAQsgBCADIAEgAxsgACACEHQhCCADEAYgCEJ/VwRAIAAQCyAIDAMLIAQgCEEDQYCA/I8EEHNBf0oNASAEIAgQchoLQn8hCAsgCAsiCEIgiKcQACAIpwsQACAAIAGtIAKtQiCGhBByCxYAIAAgAa0gAq1CIIaEIAMgBCAFEGYL3iMDD38IfgF8IwBB8ABrIgkkAAJAIAFBAE5BACAAG0UEQCACBEAgAkEANgIEIAJBEjYCAAsMAQsgACkDGCISAn5BsIMBKQMAIhNCf1EEQCAJQoOAgIBwNwMwIAlChoCAgPAANwMoIAlCgYCAgCA3AyBBsIMBQQAgCUEgahAkNwMAIAlCj4CAgHA3AxAgCUKJgICAoAE3AwAgCUKMgICA0AE3AwhBuIMBQQggCRAkNwMAQbCDASkDACETCyATC4MgE1IEQCACBEAgAkEANgIEIAJBHDYCAAsMAQsgASABQRByQbiDASkDACITIBKDIBNRGyIKQRhxQRhGBEAgAgRAIAJBADYCBCACQRk2AgALDAELIAlBOGoQKgJAIAAgCUE4ahAhBEACQCAAKAIMQQVGBEAgACgCEEEsRg0BCyACBEAgAiAAKAIMNgIAIAIgACgCEDYCBAsMAgsgCkEBcUUEQCACBEAgAkEANgIEIAJBCTYCAAsMAwsgAhBJIgVFDQEgBSAKNgIEIAUgADYCACAKQRBxRQ0CIAUgBSgCFEECcjYCFCAFIAUoAhhBAnI2AhgMAgsgCkECcQRAIAIEQCACQQA2AgQgAkEKNgIACwwCCyAAEDJBf0wEQCACBEAgAiAAKAIMNgIAIAIgACgCEDYCBAsMAQsCfyAKQQhxBEACQCACEEkiAUUNACABIAo2AgQgASAANgIAIApBEHFFDQAgASABKAIUQQJyNgIUIAEgASgCGEECcjYCGAsgAQwBCyMAQUBqIg4kACAOQQhqECoCQCAAIA5BCGoQIUF/TARAIAIEQCACIAAoAgw2AgAgAiAAKAIQNgIECwwBCyAOLQAIQQRxRQRAIAIEQCACQYoBNgIEIAJBBDYCAAsMAQsgDikDICETIAIQSSIFRQRAQQAhBQwBCyAFIAo2AgQgBSAANgIAIApBEHEEQCAFIAUoAhRBAnI2AhQgBSAFKAIYQQJyNgIYCwJAAkACQCATUARAAn8gACEBAkADQCABKQMYQoCAEINCAFINASABKAIAIgENAAtBAQwBCyABQQBCAEESEA6nCw0EIAVBCGoEQCAFQQA2AgwgBUETNgIICwwBCyMAQdAAayIBJAACQCATQhVYBEAgBUEIagRAIAVBADYCDCAFQRM2AggLDAELAkACQCAFKAIAQgAgE0KqgAQgE0KqgARUGyISfUECEBRBf0oNACAFKAIAIgMoAgxBBEYEQCADKAIQQRZGDQELIAVBCGoEQCAFIAMoAgw2AgggBSADKAIQNgIMCwwBCyAFKAIAEDMiE0J/VwRAIAUoAgAhAyAFQQhqIggEQCAIIAMoAgw2AgAgCCADKAIQNgIECwwBCyAFKAIAIBJBACAFQQhqIg8QLSIERQ0BIBJCqoAEWgRAAkAgBCkDCEIUVARAIARBADoAAAwBCyAEQhQ3AxAgBEEBOgAACwsgAQRAIAFBADYCBCABQRM2AgALIARCABATIQwCQCAELQAABH4gBCkDCCAEKQMQfQVCAAunIgdBEmtBA0sEQEJ/IRcDQCAMQQFrIQMgByAMakEVayEGAkADQCADQQFqIgNB0AAgBiADaxB6IgNFDQEgA0EBaiIMQZ8SQQMQPQ0ACwJAIAMgBCgCBGusIhIgBCkDCFYEQCAEQQA6AAAMAQsgBCASNwMQIARBAToAAAsgBC0AAAR+IAQpAxAFQgALIRICQCAELQAABH4gBCkDCCAEKQMQfQVCAAtCFVgEQCABBEAgAUEANgIEIAFBEzYCAAsMAQsgBEIEEBMoAABB0JaVMEcEQCABBEAgAUEANgIEIAFBEzYCAAsMAQsCQAJAAkAgEkIUVA0AIAQoAgQgEqdqQRRrKAAAQdCWmThHDQACQCASQhR9IhQgBCIDKQMIVgRAIANBADoAAAwBCyADIBQ3AxAgA0EBOgAACyAFKAIUIRAgBSgCACEGIAMtAAAEfiAEKQMQBUIACyEWIARCBBATGiAEEAwhCyAEEAwhDSAEEB0iFEJ/VwRAIAEEQCABQRY2AgQgAUEENgIACwwECyAUQjh8IhUgEyAWfCIWVgRAIAEEQCABQQA2AgQgAUEVNgIACwwECwJAAkAgEyAUVg0AIBUgEyAEKQMIfFYNAAJAIBQgE30iFSAEKQMIVgRAIANBADoAAAwBCyADIBU3AxAgA0EBOgAAC0EAIQcMAQsgBiAUQQAQFEF/TARAIAEEQCABIAYoAgw2AgAgASAGKAIQNgIECwwFC0EBIQcgBkI4IAFBEGogARAtIgNFDQQLIANCBBATKAAAQdCWmTBHBEAgAQRAIAFBADYCBCABQRU2AgALIAdFDQQgAxAIDAQLIAMQHSEVAkAgEEEEcSIGRQ0AIBQgFXxCDHwgFlENACABBEAgAUEANgIEIAFBFTYCAAsgB0UNBCADEAgMBAsgA0IEEBMaIAMQFSIQIAsgC0H//wNGGyELIAMQFSIRIA0gDUH//wNGGyENAkAgBkUNACANIBFGQQAgCyAQRhsNACABBEAgAUEANgIEIAFBFTYCAAsgB0UNBCADEAgMBAsgCyANcgRAIAEEQCABQQA2AgQgAUEBNgIACyAHRQ0EIAMQCAwECyADEB0iGCADEB1SBEAgAQRAIAFBADYCBCABQQE2AgALIAdFDQQgAxAIDAQLIAMQHSEVIAMQHSEWIAMtAABFBEAgAQRAIAFBADYCBCABQRQ2AgALIAdFDQQgAxAIDAQLIAcEQCADEAgLAkAgFkIAWQRAIBUgFnwiGSAWWg0BCyABBEAgAUEWNgIEIAFBBDYCAAsMBAsgEyAUfCIUIBlUBEAgAQRAIAFBADYCBCABQRU2AgALDAQLAkAgBkUNACAUIBlRDQAgAQRAIAFBADYCBCABQRU2AgALDAQLIBggFUIugFgNASABBEAgAUEANgIEIAFBFTYCAAsMAwsCQCASIAQpAwhWBEAgBEEAOgAADAELIAQgEjcDECAEQQE6AAALIAUoAhQhAyAELQAABH4gBCkDCCAEKQMQfQVCAAtCFVgEQCABBEAgAUEANgIEIAFBFTYCAAsMAwsgBC0AAAR+IAQpAxAFQgALIRQgBEIEEBMaIAQQFQRAIAEEQCABQQA2AgQgAUEBNgIACwwDCyAEEAwgBBAMIgZHBEAgAQRAIAFBADYCBCABQRM2AgALDAMLIAQQFSEHIAQQFa0iFiAHrSIVfCIYIBMgFHwiFFYEQCABBEAgAUEANgIEIAFBFTYCAAsMAwsCQCADQQRxRQ0AIBQgGFENACABBEAgAUEANgIEIAFBFTYCAAsMAwsgBq0gARBqIgNFDQIgAyAWNwMgIAMgFTcDGCADQQA6ACwMAQsgGCABEGoiA0UNASADIBY3AyAgAyAVNwMYIANBAToALAsCQCASQhR8IhQgBCkDCFYEQCAEQQA6AAAMAQsgBCAUNwMQIARBAToAAAsgBBAMIQYCQCADKQMYIAMpAyB8IBIgE3xWDQACQCAGRQRAIAUtAARBBHFFDQELAkAgEkIWfCISIAQpAwhWBEAgBEEAOgAADAELIAQgEjcDECAEQQE6AAALIAQtAAAEfiAEKQMIIAQpAxB9BUIACyIUIAatIhJUDQEgBS0ABEEEcUEAIBIgFFIbDQEgBkUNACADIAQgEhATIAZBACABEDUiBjYCKCAGDQAgAxAWDAILAkAgEyADKQMgIhJYBEACQCASIBN9IhIgBCkDCFYEQCAEQQA6AAAMAQsgBCASNwMQIARBAToAAAsgBCADKQMYEBMiBkUNAiAGIAMpAxgQFyIHDQEgAQRAIAFBADYCBCABQQ42AgALIAMQFgwDCyAFKAIAIBJBABAUIQcgBSgCACEGIAdBf0wEQCABBEAgASAGKAIMNgIAIAEgBigCEDYCBAsgAxAWDAMLQQAhByAGEDMgAykDIFENACABBEAgAUEANgIEIAFBEzYCAAsgAxAWDAILQgAhFAJAAkAgAykDGCIWUEUEQANAIBQgAykDCFIiC0UEQCADLQAsDQMgFkIuVA0DAn8CQCADKQMQIhVCgIAEfCISIBVaQQAgEkKAgICAAVQbRQ0AIAMoAgAgEqdBBHQQNCIGRQ0AIAMgBjYCAAJAIAMpAwgiFSASWg0AIAYgFadBBHRqIgZCADcCACAGQgA3AAUgFUIBfCIVIBJRDQADQCADKAIAIBWnQQR0aiIGQgA3AgAgBkIANwAFIBVCAXwiFSASUg0ACwsgAyASNwMIIAMgEjcDEEEBDAELIAEEQCABQQA2AgQgAUEONgIAC0EAC0UNBAtB2AAQCSIGBH8gBkIANwMgIAZBADYCGCAGQv////8PNwMQIAZBADsBDCAGQb+GKDYCCCAGQQE6AAYgBkEAOwEEIAZBADYCACAGQgA3A0ggBkGAgNiNeDYCRCAGQgA3AyggBkIANwMwIAZCADcDOCAGQUBrQQA7AQAgBkIANwNQIAYFQQALIQYgAygCACAUp0EEdGogBjYCAAJAIAYEQCAGIAUoAgAgB0EAIAEQaCISQn9VDQELIAsNBCABKAIAQRNHDQQgAQRAIAFBADYCBCABQRU2AgALDAQLIBRCAXwhFCAWIBJ9IhZCAFINAAsLIBQgAykDCFINAAJAIAUtAARBBHFFDQAgBwRAIActAAAEfyAHKQMQIAcpAwhRBUEAC0UNAgwBCyAFKAIAEDMiEkJ/VwRAIAUoAgAhBiABBEAgASAGKAIMNgIAIAEgBigCEDYCBAsgAxAWDAULIBIgAykDGCADKQMgfFINAQsgBxAIAn4gCARAAn8gF0IAVwRAIAUgCCABEEghFwsgBSADIAEQSCISIBdVCwRAIAgQFiASDAILIAMQFgwFC0IAIAUtAARBBHFFDQAaIAUgAyABEEgLIRcgAyEIDAMLIAEEQCABQQA2AgQgAUEVNgIACyAHEAggAxAWDAILIAMQFiAHEAgMAQsgAQRAIAFBADYCBCABQRU2AgALIAMQFgsCQCAMIAQoAgRrrCISIAQpAwhWBEAgBEEAOgAADAELIAQgEjcDECAEQQE6AAALIAQtAAAEfiAEKQMIIAQpAxB9BUIAC6ciB0ESa0EDSw0BCwsgBBAIIBdCf1UNAwwBCyAEEAgLIA8iAwRAIAMgASgCADYCACADIAEoAgQ2AgQLIAgQFgtBACEICyABQdAAaiQAIAgNAQsgAgRAIAIgBSgCCDYCACACIAUoAgw2AgQLDAELIAUgCCgCADYCQCAFIAgpAwg3AzAgBSAIKQMQNwM4IAUgCCgCKDYCICAIEAYgBSgCUCEIIAVBCGoiBCEBQQAhBwJAIAUpAzAiE1ANAEGAgICAeCEGAn8gE7pEAAAAAAAA6D+jRAAA4P///+9BpCIaRAAAAAAAAPBBYyAaRAAAAAAAAAAAZnEEQCAaqwwBC0EACyIDQYCAgIB4TQRAIANBAWsiA0EBdiADciIDQQJ2IANyIgNBBHYgA3IiA0EIdiADciIDQRB2IANyQQFqIQYLIAYgCCgCACIMTQ0AIAYQPCILRQRAIAEEQCABQQA2AgQgAUEONgIACwwBCwJAIAgpAwhCACAMG1AEQCAIKAIQIQ8MAQsgCCgCECEPA0AgDyAHQQJ0aigCACIBBEADQCABKAIYIQMgASALIAEoAhwgBnBBAnRqIg0oAgA2AhggDSABNgIAIAMiAQ0ACwsgB0EBaiIHIAxHDQALCyAPEAYgCCAGNgIAIAggCzYCEAsCQCAFKQMwUA0AQgAhEwJAIApBBHFFBEADQCAFKAJAIBOnQQR0aigCACgCMEEAQQAgAhAlIgFFDQQgBSgCUCABIBNBCCAEEE1FBEAgBCgCAEEKRw0DCyATQgF8IhMgBSkDMFQNAAwDCwALA0AgBSgCQCATp0EEdGooAgAoAjBBAEEAIAIQJSIBRQ0DIAUoAlAgASATQQggBBBNRQ0BIBNCAXwiEyAFKQMwVA0ACwwBCyACBEAgAiAEKAIANgIAIAIgBCgCBDYCBAsMAQsgBSAFKAIUNgIYDAELIAAgACgCMEEBajYCMCAFEEtBACEFCyAOQUBrJAAgBQsiBQ0BIAAQGhoLQQAhBQsgCUHwAGokACAFCxAAIwAgAGtBcHEiACQAIAALBgAgACQACwQAIwAL4CoDEX8IfgN8IwBBwMAAayIHJABBfyECAkAgAEUNAAJ/IAAtAChFBEBBACAAKAIYIAAoAhRGDQEaC0EBCyEBAkACQCAAKQMwIhRQRQRAIAAoAkAhCgNAIAogEqdBBHRqIgMtAAwhCwJAAkAgAygCCA0AIAsNACADKAIEIgNFDQEgAygCAEUNAQtBASEBCyAXIAtBAXOtQv8Bg3whFyASQgF8IhIgFFINAAsgF0IAUg0BCyAAKAIEQQhxIAFyRQ0BAn8gACgCACIDKAIkIgFBA0cEQCADKAIgBH9BfyADEBpBAEgNAhogAygCJAUgAQsEQCADEEMLQX8gA0EAQgBBDxAOQgBTDQEaIANBAzYCJAtBAAtBf0oNASAAKAIAKAIMQRZGBEAgACgCACgCEEEsRg0CCyAAKAIAIQEgAEEIagRAIAAgASgCDDYCCCAAIAEoAhA2AgwLDAILIAFFDQAgFCAXVARAIABBCGoEQCAAQQA2AgwgAEEUNgIICwwCCyAXp0EDdBAJIgtFDQFCfyEWQgAhEgNAAkAgCiASp0EEdGoiBigCACIDRQ0AAkAgBigCCA0AIAYtAAwNACAGKAIEIgFFDQEgASgCAEUNAQsgFiADKQNIIhMgEyAWVhshFgsgBi0ADEUEQCAXIBlYBEAgCxAGIABBCGoEQCAAQQA2AgwgAEEUNgIICwwECyALIBmnQQN0aiASNwMAIBlCAXwhGQsgEkIBfCISIBRSDQALIBcgGVYEQCALEAYgAEEIagRAIABBADYCDCAAQRQ2AggLDAILAkACQCAAKAIAKQMYQoCACINQDQACQAJAIBZCf1INACAAKQMwIhNQDQIgE0IBgyEVIAAoAkAhAwJAIBNCAVEEQEJ/IRRCACESQgAhFgwBCyATQn6DIRlCfyEUQgAhEkIAIRYDQCADIBKnQQR0aigCACIBBEAgFiABKQNIIhMgEyAWVCIBGyEWIBQgEiABGyEUCyADIBJCAYQiGKdBBHRqKAIAIgEEQCAWIAEpA0giEyATIBZUIgEbIRYgFCAYIAEbIRQLIBJCAnwhEiAZQgJ9IhlQRQ0ACwsCQCAVUA0AIAMgEqdBBHRqKAIAIgFFDQAgFiABKQNIIhMgEyAWVCIBGyEWIBQgEiABGyEUCyAUQn9RDQBCACETIwBBEGsiBiQAAkAgACAUIABBCGoiCBBBIhVQDQAgFSAAKAJAIBSnQQR0aigCACIKKQMgIhh8IhQgGFpBACAUQn9VG0UEQCAIBEAgCEEWNgIEIAhBBDYCAAsMAQsgCi0ADEEIcUUEQCAUIRMMAQsgACgCACAUQQAQFCEBIAAoAgAhAyABQX9MBEAgCARAIAggAygCDDYCACAIIAMoAhA2AgQLDAELIAMgBkEMakIEEBFCBFIEQCAAKAIAIQEgCARAIAggASgCDDYCACAIIAEoAhA2AgQLDAELIBRCBHwgFCAGKAAMQdCWncAARhtCFEIMAn9BASEBAkAgCikDKEL+////D1YNACAKKQMgQv7///8PVg0AQQAhAQsgAQsbfCIUQn9XBEAgCARAIAhBFjYCBCAIQQQ2AgALDAELIBQhEwsgBkEQaiQAIBMiFkIAUg0BIAsQBgwFCyAWUA0BCwJ/IAAoAgAiASgCJEEBRgRAIAFBDGoEQCABQQA2AhAgAUESNgIMC0F/DAELQX8gAUEAIBZBERAOQgBTDQAaIAFBATYCJEEAC0F/Sg0BC0IAIRYCfyAAKAIAIgEoAiRBAUYEQCABQQxqBEAgAUEANgIQIAFBEjYCDAtBfwwBC0F/IAFBAEIAQQgQDkIAUw0AGiABQQE2AiRBAAtBf0oNACAAKAIAIQEgAEEIagRAIAAgASgCDDYCCCAAIAEoAhA2AgwLIAsQBgwCCyAAKAJUIgIEQCACQgA3AxggAigCAEQAAAAAAAAAACACKAIMIAIoAgQRDgALIABBCGohBCAXuiEcQgAhFAJAAkACQANAIBcgFCITUgRAIBO6IByjIRsgE0IBfCIUuiAcoyEaAkAgACgCVCICRQ0AIAIgGjkDKCACIBs5AyAgAisDECAaIBuhRAAAAAAAAAAAoiAboCIaIAIrAxihY0UNACACKAIAIBogAigCDCACKAIEEQ4AIAIgGjkDGAsCfwJAIAAoAkAgCyATp0EDdGopAwAiE6dBBHRqIg0oAgAiAQRAIAEpA0ggFlQNAQsgDSgCBCEFAkACfwJAIA0oAggiAkUEQCAFRQ0BQQEgBSgCACICQQFxDQIaIAJBwABxQQZ2DAILQQEgBQ0BGgsgDSABECsiBTYCBCAFRQ0BIAJBAEcLIQZBACEJIwBBEGsiDCQAAkAgEyAAKQMwWgRAIABBCGoEQCAAQQA2AgwgAEESNgIIC0F/IQkMAQsgACgCQCIKIBOnIgNBBHRqIg8oAgAiAkUNACACLQAEDQACQCACKQNIQhp8IhhCf1cEQCAAQQhqBEAgAEEWNgIMIABBBDYCCAsMAQtBfyEJIAAoAgAgGEEAEBRBf0wEQCAAKAIAIQIgAEEIagRAIAAgAigCDDYCCCAAIAIoAhA2AgwLDAILIAAoAgBCBCAMQQxqIABBCGoiDhAtIhBFDQEgEBAMIQEgEBAMIQggEC0AAAR/IBApAxAgECkDCFEFQQALIQIgEBAIIAJFBEAgDgRAIA5BADYCBCAOQRQ2AgALDAILAkAgCEUNACAAKAIAIAGtQQEQFEF/TARAQYSEASgCACECIA4EQCAOIAI2AgQgDkEENgIACwwDC0EAIAAoAgAgCEEAIA4QRSIBRQ0BIAEgCEGAAiAMQQhqIA4QbiECIAEQBiACRQ0BIAwoAggiAkUNACAMIAIQbSICNgIIIA8oAgAoAjQgAhBvIQIgDygCACACNgI0CyAPKAIAIgJBAToABEEAIQkgCiADQQR0aigCBCIBRQ0BIAEtAAQNASACKAI0IQIgAUEBOgAEIAEgAjYCNAwBC0F/IQkLIAxBEGokACAJQQBIDQUgACgCABAfIhhCAFMNBSAFIBg3A0ggBgRAQQAhDCANKAIIIg0hASANRQRAIAAgACATQQhBABB/IgwhASAMRQ0HCwJAAkAgASAHQQhqECFBf0wEQCAEBEAgBCABKAIMNgIAIAQgASgCEDYCBAsMAQsgBykDCCISQsAAg1AEQCAHQQA7ATggByASQsAAhCISNwMICwJAAkAgBSgCECICQX5PBEAgBy8BOCIDRQ0BIAUgAzYCECADIQIMAgsgAg0AIBJCBINQDQAgByAHKQMgNwMoIAcgEkIIhCISNwMIQQAhAgwBCyAHIBJC9////w+DIhI3AwgLIBJCgAGDUARAIAdBADsBOiAHIBJCgAGEIhI3AwgLAn8gEkIEg1AEQEJ/IRVBgAoMAQsgBSAHKQMgIhU3AyggEkIIg1AEQAJAAkACQAJAQQggAiACQX1LG0H//wNxDg0CAwMDAwMDAwEDAwMAAwtBgApBgAIgFUKUwuTzD1YbDAQLQYAKQYACIBVCg4Ow/w9WGwwDC0GACkGAAiAVQv////8PVhsMAgtBgApBgAIgFUIAUhsMAQsgBSAHKQMoNwMgQYACCyEPIAAoAgAQHyITQn9XBEAgACgCACECIAQEQCAEIAIoAgw2AgAgBCACKAIQNgIECwwBCyAFIAUvAQxB9/8DcTsBDCAAIAUgDxA3IgpBAEgNACAHLwE4IghBCCAFKAIQIgMgA0F9SxtB//8DcSICRyEGAkACQAJAAkACQAJAAkAgAiAIRwRAIANBAEchAwwBC0EAIQMgBS0AAEGAAXFFDQELIAUvAVIhCSAHLwE6IQIMAQsgBS8BUiIJIAcvAToiAkYNAQsgASABKAIwQQFqNgIwIAJB//8DcQ0BIAEhAgwCCyABIAEoAjBBAWo2AjBBACEJDAILQSZBACAHLwE6QQFGGyICRQRAIAQEQCAEQQA2AgQgBEEYNgIACyABEAsMAwsgACABIAcvATpBACAAKAIcIAIRBgAhAiABEAsgAkUNAgsgCUEARyEJIAhBAEcgBnFFBEAgAiEBDAELIAAgAiAHLwE4EIEBIQEgAhALIAFFDQELAkAgCEUgBnJFBEAgASECDAELIAAgAUEAEIABIQIgARALIAJFDQELAkAgA0UEQCACIQMMAQsgACACIAUoAhBBASAFLwFQEIIBIQMgAhALIANFDQELAkAgCUUEQCADIQEMAQsgBSgCVCIBRQRAIAAoAhwhAQsCfyAFLwFSGkEBCwRAIAQEQCAEQQA2AgQgBEEYNgIACyADEAsMAgsgACADIAUvAVJBASABQQARBgAhASADEAsgAUUNAQsgACgCABAfIhhCf1cEQCAAKAIAIQIgBARAIAQgAigCDDYCACAEIAIoAhA2AgQLDAELAkAgARAyQQBOBEACfwJAAkAgASAHQUBrQoDAABARIhJCAVMNAEIAIRkgFUIAVQRAIBW5IRoDQCAAIAdBQGsgEhAbQQBIDQMCQCASQoDAAFINACAAKAJUIgJFDQAgAiAZQoBAfSIZuSAaoxB7CyABIAdBQGtCgMAAEBEiEkIAVQ0ACwwBCwNAIAAgB0FAayASEBtBAEgNAiABIAdBQGtCgMAAEBEiEkIAVQ0ACwtBACASQn9VDQEaIAQEQCAEIAEoAgw2AgAgBCABKAIQNgIECwtBfwshAiABEBoaDAELIAQEQCAEIAEoAgw2AgAgBCABKAIQNgIEC0F/IQILIAEgB0EIahAhQX9MBEAgBARAIAQgASgCDDYCACAEIAEoAhA2AgQLQX8hAgsCf0EAIQkCQCABIgNFDQADQCADLQAaQQFxBEBB/wEhCSADQQBCAEEQEA4iFUIAUw0CIBVCBFkEQCADQQxqBEAgA0EANgIQIANBFDYCDAsMAwsgFachCQwCCyADKAIAIgMNAAsLIAlBGHRBGHUiA0F/TAsEQCAEBEAgBCABKAIMNgIAIAQgASgCEDYCBAsgARALDAELIAEQCyACQQBIDQAgACgCABAfIRUgACgCACECIBVCf1cEQCAEBEAgBCACKAIMNgIAIAQgAigCEDYCBAsMAQsgAiATEHVBf0wEQCAAKAIAIQIgBARAIAQgAigCDDYCACAEIAIoAhA2AgQLDAELIAcpAwgiE0LkAINC5ABSBEAgBARAIARBADYCBCAEQRQ2AgALDAELAkAgBS0AAEEgcQ0AIBNCEINQRQRAIAUgBygCMDYCFAwBCyAFQRRqEAEaCyAFIAcvATg2AhAgBSAHKAI0NgIYIAcpAyAhEyAFIBUgGH03AyAgBSATNwMoIAUgBS8BDEH5/wNxIANB/wFxQQF0cjsBDCAPQQp2IQNBPyEBAkACQAJAAkAgBSgCECICQQxrDgMAAQIBCyAFQS47AQoMAgtBLSEBIAMNACAFKQMoQv7///8PVg0AIAUpAyBC/v///w9WDQBBFCEBIAJBCEYNACAFLwFSQQFGDQAgBSgCMCICBH8gAi8BBAVBAAtB//8DcSICBEAgAiAFKAIwKAIAakEBay0AAEEvRg0BC0EKIQELIAUgATsBCgsgACAFIA8QNyICQQBIDQAgAiAKRwRAIAQEQCAEQQA2AgQgBEEUNgIACwwBCyAAKAIAIBUQdUF/Sg0BIAAoAgAhAiAEBEAgBCACKAIMNgIAIAQgAigCEDYCBAsLIA0NByAMEAsMBwsgDQ0CIAwQCwwCCyAFIAUvAQxB9/8DcTsBDCAAIAVBgAIQN0EASA0FIAAgEyAEEEEiE1ANBSAAKAIAIBNBABAUQX9MBEAgACgCACECIAQEQCAEIAIoAgw2AgAgBCACKAIQNgIECwwGCyAFKQMgIRIjAEGAQGoiAyQAAkAgElBFBEAgAEEIaiECIBK6IRoDQEF/IQEgACgCACADIBJCgMAAIBJCgMAAVBsiEyACEGVBAEgNAiAAIAMgExAbQQBIDQIgACgCVCAaIBIgE30iErqhIBqjEHsgEkIAUg0ACwtBACEBCyADQYBAayQAIAFBf0oNAUEBIREgAUEcdkEIcUEIRgwCCyAEBEAgBEEANgIEIARBDjYCAAsMBAtBAAtFDQELCyARDQBBfyECAkAgACgCABAfQgBTDQAgFyEUQQAhCkIAIRcjAEHwAGsiESQAAkAgACgCABAfIhVCAFkEQCAUUEUEQANAIAAgACgCQCALIBenQQN0aigCAEEEdGoiAygCBCIBBH8gAQUgAygCAAtBgAQQNyIBQQBIBEBCfyEXDAQLIAFBAEcgCnIhCiAXQgF8IhcgFFINAAsLQn8hFyAAKAIAEB8iGEJ/VwRAIAAoAgAhASAAQQhqBEAgACABKAIMNgIIIAAgASgCEDYCDAsMAgsgEULiABAXIgZFBEAgAEEIagRAIABBADYCDCAAQQ42AggLDAILIBggFX0hEyAVQv////8PViAUQv//A1ZyIApyQQFxBEAgBkGZEkEEECwgBkIsEBggBkEtEA0gBkEtEA0gBkEAEBIgBkEAEBIgBiAUEBggBiAUEBggBiATEBggBiAVEBggBkGUEkEEECwgBkEAEBIgBiAYEBggBkEBEBILIAZBnhJBBBAsIAZBABASIAYgFEL//wMgFEL//wNUG6dB//8DcSIBEA0gBiABEA0gBkF/IBOnIBNC/v///w9WGxASIAZBfyAVpyAVQv7///8PVhsQEiAGIABBJEEgIAAtACgbaigCACIDBH8gAy8BBAVBAAtB//8DcRANIAYtAABFBEAgAEEIagRAIABBADYCDCAAQRQ2AggLIAYQCAwCCyAAIAYoAgQgBi0AAAR+IAYpAxAFQgALEBshASAGEAggAUEASA0BIAMEQCAAIAMoAgAgAzMBBBAbQQBIDQILIBMhFwwBCyAAKAIAIQEgAEEIagRAIAAgASgCDDYCCCAAIAEoAhA2AgwLQn8hFwsgEUHwAGokACAXQgBTDQAgACgCABAfQj+HpyECCyALEAYgAkEASA0BAn8gACgCACIBKAIkQQFHBEAgAUEMagRAIAFBADYCECABQRI2AgwLQX8MAQsgASgCICICQQJPBEAgAUEMagRAIAFBADYCECABQR02AgwLQX8MAQsCQCACQQFHDQAgARAaQQBODQBBfwwBCyABQQBCAEEJEA5Cf1cEQCABQQI2AiRBfwwBCyABQQA2AiRBAAtFDQIgACgCACECIAQEQCAEIAIoAgw2AgAgBCACKAIQNgIECwwBCyALEAYLIAAoAlQQfCAAKAIAEENBfyECDAILIAAoAlQQfAsgABBLQQAhAgsgB0HAwABqJAAgAgtFAEHwgwFCADcDAEHogwFCADcDAEHggwFCADcDAEHYgwFCADcDAEHQgwFCADcDAEHIgwFCADcDAEHAgwFCADcDAEHAgwELoQMBCH8jAEGgAWsiAiQAIAAQMQJAAn8CQCAAKAIAIgFBAE4EQCABQbATKAIASA0BCyACIAE2AhAgAkEgakH2ESACQRBqEHZBASEGIAJBIGohBCACQSBqECIhA0EADAELIAFBAnQiAUGwEmooAgAhBQJ/AkACQCABQcATaigCAEEBaw4CAAEECyAAKAIEIQNB9IIBKAIAIQdBACEBAkACQANAIAMgAUHQ8QBqLQAARwRAQdcAIQQgAUEBaiIBQdcARw0BDAILCyABIgQNAEGw8gAhAwwBC0Gw8gAhAQNAIAEtAAAhCCABQQFqIgMhASAIDQAgAyEBIARBAWsiBA0ACwsgBygCFBogAwwBC0EAIAAoAgRrQQJ0QdjAAGooAgALIgRFDQEgBBAiIQMgBUUEQEEAIQVBASEGQQAMAQsgBRAiQQJqCyEBIAEgA2pBAWoQCSIBRQRAQegSKAIAIQUMAQsgAiAENgIIIAJBrBJBkRIgBhs2AgQgAkGsEiAFIAYbNgIAIAFBqwogAhB2IAAgATYCCCABIQULIAJBoAFqJAAgBQszAQF/IAAoAhQiAyABIAIgACgCECADayIBIAEgAksbIgEQBxogACAAKAIUIAFqNgIUIAILBgBBsIgBCwYAQayIAQsGAEGkiAELBwAgAEEEagsHACAAQQhqCyYBAX8gACgCFCIBBEAgARALCyAAKAIEIQEgAEEEahAxIAAQBiABC6kBAQN/AkAgAC0AACICRQ0AA0AgAS0AACIERQRAIAIhAwwCCwJAIAIgBEYNACACQSByIAIgAkHBAGtBGkkbIAEtAAAiAkEgciACIAJBwQBrQRpJG0YNACAALQAAIQMMAgsgAUEBaiEBIAAtAAEhAiAAQQFqIQAgAg0ACwsgA0H/AXEiAEEgciAAIABBwQBrQRpJGyABLQAAIgBBIHIgACAAQcEAa0EaSRtrC8sGAgJ+An8jAEHgAGsiByQAAkACQAJAAkACQAJAAkACQAJAAkACQCAEDg8AAQoCAwQGBwgICAgICAUICyABQgA3AyAMCQsgACACIAMQESIFQn9XBEAgAUEIaiIBBEAgASAAKAIMNgIAIAEgACgCEDYCBAsMCAsCQCAFUARAIAEpAygiAyABKQMgUg0BIAEgAzcDGCABQQE2AgQgASgCAEUNASAAIAdBKGoQIUF/TARAIAFBCGoiAQRAIAEgACgCDDYCACABIAAoAhA2AgQLDAoLAkAgBykDKCIDQiCDUA0AIAcoAlQgASgCMEYNACABQQhqBEAgAUEANgIMIAFBBzYCCAsMCgsgA0IEg1ANASAHKQNAIAEpAxhRDQEgAUEIagRAIAFBADYCDCABQRU2AggLDAkLIAEoAgQNACABKQMoIgMgASkDICIGVA0AIAUgAyAGfSIDWA0AIAEoAjAhBANAIAECfyAFIAN9IgZC/////w8gBkL/////D1QbIganIQBBACACIAOnaiIIRQ0AGiAEIAggAEHUgAEoAgARAAALIgQ2AjAgASABKQMoIAZ8NwMoIAUgAyAGfCIDVg0ACwsgASABKQMgIAV8NwMgDAgLIAEoAgRFDQcgAiABKQMYIgM3AxggASgCMCEAIAJBADYCMCACIAM3AyAgAiAANgIsIAIgAikDAELsAYQ3AwAMBwsgA0IIWgR+IAIgASgCCDYCACACIAEoAgw2AgRCCAVCfwshBQwGCyABEAYMBQtCfyEFIAApAxgiA0J/VwRAIAFBCGoiAQRAIAEgACgCDDYCACABIAAoAhA2AgQLDAULIAdBfzYCGCAHQo+AgICAAjcDECAHQoyAgIDQATcDCCAHQomAgICgATcDACADQQggBxAkQn+FgyEFDAQLIANCD1gEQCABQQhqBEAgAUEANgIMIAFBEjYCCAsMAwsgAkUNAgJAIAAgAikDACACKAIIEBRBAE4EQCAAEDMiA0J/VQ0BCyABQQhqIgEEQCABIAAoAgw2AgAgASAAKAIQNgIECwwDCyABIAM3AyAMAwsgASkDICEFDAILIAFBCGoEQCABQQA2AgwgAUEcNgIICwtCfyEFCyAHQeAAaiQAIAULjAcCAn4CfyMAQRBrIgckAAJAAkACQAJAAkACQAJAAkACQAJAIAQOEQABAgMFBggICAgICAgIBwgECAsgAUJ/NwMgIAFBADoADyABQQA7AQwgAUIANwMYIAEoAqxAIAEoAqhAKAIMEQEArUIBfSEFDAgLQn8hBSABKAIADQdCACEFIANQDQcgAS0ADQ0HIAFBKGohBAJAA0ACQCAHIAMgBX03AwggASgCrEAgAiAFp2ogB0EIaiABKAKoQCgCHBEAACEIQgAgBykDCCAIQQJGGyAFfCEFAkACQAJAIAhBAWsOAwADAQILIAFBAToADSABKQMgIgNCf1cEQCABBEAgAUEANgIEIAFBFDYCAAsMBQsgAS0ADkUNBCADIAVWDQQgASADNwMYIAFBAToADyACIAQgA6cQBxogASkDGCEFDAwLIAEtAAwNAyAAIARCgMAAEBEiBkJ/VwRAIAEEQCABIAAoAgw2AgAgASAAKAIQNgIECwwECyAGUARAIAFBAToADCABKAKsQCABKAKoQCgCGBEDACABKQMgQn9VDQEgAUIANwMgDAELAkAgASkDIEIAWQRAIAFBADoADgwBCyABIAY3AyALIAEoAqxAIAQgBiABKAKoQCgCFBEPABoLIAMgBVYNAQwCCwsgASgCAA0AIAEEQCABQQA2AgQgAUEUNgIACwsgBVBFBEAgAUEAOgAOIAEgASkDGCAFfDcDGAwIC0J/QgAgASgCABshBQwHCyABKAKsQCABKAKoQCgCEBEBAK1CAX0hBQwGCyABLQAQBEAgAS0ADQRAIAIgAS0ADwR/QQAFQQggASgCFCIAIABBfUsbCzsBMCACIAEpAxg3AyAgAiACKQMAQsgAhDcDAAwHCyACIAIpAwBCt////w+DNwMADAYLIAJBADsBMCACKQMAIQMgAS0ADQRAIAEpAxghBSACIANCxACENwMAIAIgBTcDGEIAIQUMBgsgAiADQrv///8Pg0LAAIQ3AwAMBQsgAS0ADw0EIAEoAqxAIAEoAqhAKAIIEQEArCEFDAQLIANCCFoEfiACIAEoAgA2AgAgAiABKAIENgIEQggFQn8LIQUMAwsgAUUNAiABKAKsQCABKAKoQCgCBBEDACABEDEgARAGDAILIAdBfzYCAEEQIAcQJEI/hCEFDAELIAEEQCABQQA2AgQgAUEUNgIAC0J/IQULIAdBEGokACAFC2MAQcgAEAkiAEUEQEGEhAEoAgAhASACBEAgAiABNgIEIAJBATYCAAsgAA8LIABBADoADCAAQQA6AAQgACACNgIAIABBADYCOCAAQgA3AzAgACABQQkgAUEBa0EJSRs2AgggAAu3fAIefwZ+IAIpAwAhIiAAIAE2AhwgACAiQv////8PICJC/////w9UGz4CICAAQRBqIQECfyAALQAEBEACfyAALQAMQQJ0IQpBfiEEAkACQAJAIAEiBUUNACAFKAIgRQ0AIAUoAiRFDQAgBSgCHCIDRQ0AIAMoAgAgBUcNAAJAAkAgAygCICIGQTlrDjkBAgICAgICAgICAgIBAgICAQICAgICAgICAgICAgICAgICAQICAgICAgICAgICAQICAgICAgICAgEACyAGQZoFRg0AIAZBKkcNAQsgCkEFSw0AAkACQCAFKAIMRQ0AIAUoAgQiAQRAIAUoAgBFDQELIAZBmgVHDQEgCkEERg0BCyAFQeDAACgCADYCGEF+DAQLIAUoAhBFDQEgAygCJCEEIAMgCjYCJAJAIAMoAhAEQCADEDACQCAFKAIQIgYgAygCECIIIAYgCEkbIgFFDQAgBSgCDCADKAIIIAEQBxogBSAFKAIMIAFqNgIMIAMgAygCCCABajYCCCAFIAUoAhQgAWo2AhQgBSAFKAIQIAFrIgY2AhAgAyADKAIQIAFrIgg2AhAgCA0AIAMgAygCBDYCCEEAIQgLIAYEQCADKAIgIQYMAgsMBAsgAQ0AIApBAXRBd0EAIApBBEsbaiAEQQF0QXdBACAEQQRKG2pKDQAgCkEERg0ADAILAkACQAJAAkACQCAGQSpHBEAgBkGaBUcNASAFKAIERQ0DDAcLIAMoAhRFBEAgA0HxADYCIAwCCyADKAI0QQx0QYDwAWshBAJAIAMoAowBQQJODQAgAygCiAEiAUEBTA0AIAFBBUwEQCAEQcAAciEEDAELQYABQcABIAFBBkYbIARyIQQLIAMoAgQgCGogBEEgciAEIAMoAmgbIgFBH3AgAXJBH3NBCHQgAUGA/gNxQQh2cjsAACADIAMoAhBBAmoiATYCECADKAJoBEAgAygCBCABaiAFKAIwIgFBGHQgAUEIdEGAgPwHcXIgAUEIdkGA/gNxIAFBGHZycjYAACADIAMoAhBBBGo2AhALIAVBATYCMCADQfEANgIgIAUQCiADKAIQDQcgAygCICEGCwJAAkACQAJAIAZBOUYEfyADQaABakHkgAEoAgARAQAaIAMgAygCECIBQQFqNgIQIAEgAygCBGpBHzoAACADIAMoAhAiAUEBajYCECABIAMoAgRqQYsBOgAAIAMgAygCECIBQQFqNgIQIAEgAygCBGpBCDoAAAJAIAMoAhwiAUUEQCADKAIEIAMoAhBqQQA2AAAgAyADKAIQIgFBBWo2AhAgASADKAIEakEAOgAEQQIhBCADKAKIASIBQQlHBEBBBCABQQJIQQJ0IAMoAowBQQFKGyEECyADIAMoAhAiAUEBajYCECABIAMoAgRqIAQ6AAAgAyADKAIQIgFBAWo2AhAgASADKAIEakEDOgAAIANB8QA2AiAgBRAKIAMoAhBFDQEMDQsgASgCJCELIAEoAhwhCSABKAIQIQggASgCLCENIAEoAgAhBiADIAMoAhAiAUEBajYCEEECIQQgASADKAIEaiANQQBHQQF0IAZBAEdyIAhBAEdBAnRyIAlBAEdBA3RyIAtBAEdBBHRyOgAAIAMoAgQgAygCEGogAygCHCgCBDYAACADIAMoAhAiDUEEaiIGNgIQIAMoAogBIgFBCUcEQEEEIAFBAkhBAnQgAygCjAFBAUobIQQLIAMgDUEFajYCECADKAIEIAZqIAQ6AAAgAygCHCgCDCEEIAMgAygCECIBQQFqNgIQIAEgAygCBGogBDoAACADKAIcIgEoAhAEfyADKAIEIAMoAhBqIAEoAhQ7AAAgAyADKAIQQQJqNgIQIAMoAhwFIAELKAIsBEAgBQJ/IAUoAjAhBiADKAIQIQRBACADKAIEIgFFDQAaIAYgASAEQdSAASgCABEAAAs2AjALIANBxQA2AiAgA0EANgIYDAILIAMoAiAFIAYLQcUAaw4jAAQEBAEEBAQEBAQEBAQEBAQEBAQEBAIEBAQEBAQEBAQEBAMECyADKAIcIgEoAhAiBgRAIAMoAgwiCCADKAIQIgQgAS8BFCADKAIYIg1rIglqSQRAA0AgAygCBCAEaiAGIA1qIAggBGsiCBAHGiADIAMoAgwiDTYCEAJAIAMoAhwoAixFDQAgBCANTw0AIAUCfyAFKAIwIQZBACADKAIEIARqIgFFDQAaIAYgASANIARrQdSAASgCABEAAAs2AjALIAMgAygCGCAIajYCGCAFKAIcIgYQMAJAIAUoAhAiBCAGKAIQIgEgASAESxsiAUUNACAFKAIMIAYoAgggARAHGiAFIAUoAgwgAWo2AgwgBiAGKAIIIAFqNgIIIAUgBSgCFCABajYCFCAFIAUoAhAgAWs2AhAgBiAGKAIQIAFrIgE2AhAgAQ0AIAYgBigCBDYCCAsgAygCEA0MIAMoAhghDSADKAIcKAIQIQZBACEEIAkgCGsiCSADKAIMIghLDQALCyADKAIEIARqIAYgDWogCRAHGiADIAMoAhAgCWoiDTYCEAJAIAMoAhwoAixFDQAgBCANTw0AIAUCfyAFKAIwIQZBACADKAIEIARqIgFFDQAaIAYgASANIARrQdSAASgCABEAAAs2AjALIANBADYCGAsgA0HJADYCIAsgAygCHCgCHARAIAMoAhAiBCEJA0ACQCAEIAMoAgxHDQACQCADKAIcKAIsRQ0AIAQgCU0NACAFAn8gBSgCMCEGQQAgAygCBCAJaiIBRQ0AGiAGIAEgBCAJa0HUgAEoAgARAAALNgIwCyAFKAIcIgYQMAJAIAUoAhAiBCAGKAIQIgEgASAESxsiAUUNACAFKAIMIAYoAgggARAHGiAFIAUoAgwgAWo2AgwgBiAGKAIIIAFqNgIIIAUgBSgCFCABajYCFCAFIAUoAhAgAWs2AhAgBiAGKAIQIAFrIgE2AhAgAQ0AIAYgBigCBDYCCAtBACEEQQAhCSADKAIQRQ0ADAsLIAMoAhwoAhwhBiADIAMoAhgiAUEBajYCGCABIAZqLQAAIQEgAyAEQQFqNgIQIAMoAgQgBGogAToAACABBEAgAygCECEEDAELCwJAIAMoAhwoAixFDQAgAygCECIGIAlNDQAgBQJ/IAUoAjAhBEEAIAMoAgQgCWoiAUUNABogBCABIAYgCWtB1IABKAIAEQAACzYCMAsgA0EANgIYCyADQdsANgIgCwJAIAMoAhwoAiRFDQAgAygCECIEIQkDQAJAIAQgAygCDEcNAAJAIAMoAhwoAixFDQAgBCAJTQ0AIAUCfyAFKAIwIQZBACADKAIEIAlqIgFFDQAaIAYgASAEIAlrQdSAASgCABEAAAs2AjALIAUoAhwiBhAwAkAgBSgCECIEIAYoAhAiASABIARLGyIBRQ0AIAUoAgwgBigCCCABEAcaIAUgBSgCDCABajYCDCAGIAYoAgggAWo2AgggBSAFKAIUIAFqNgIUIAUgBSgCECABazYCECAGIAYoAhAgAWsiATYCECABDQAgBiAGKAIENgIIC0EAIQRBACEJIAMoAhBFDQAMCgsgAygCHCgCJCEGIAMgAygCGCIBQQFqNgIYIAEgBmotAAAhASADIARBAWo2AhAgAygCBCAEaiABOgAAIAEEQCADKAIQIQQMAQsLIAMoAhwoAixFDQAgAygCECIGIAlNDQAgBQJ/IAUoAjAhBEEAIAMoAgQgCWoiAUUNABogBCABIAYgCWtB1IABKAIAEQAACzYCMAsgA0HnADYCIAsCQCADKAIcKAIsBEAgAygCDCADKAIQIgFBAmpJBH8gBRAKIAMoAhANAkEABSABCyADKAIEaiAFKAIwOwAAIAMgAygCEEECajYCECADQaABakHkgAEoAgARAQAaCyADQfEANgIgIAUQCiADKAIQRQ0BDAcLDAYLIAUoAgQNAQsgAygCPA0AIApFDQEgAygCIEGaBUYNAQsCfyADKAKIASIBRQRAIAMgChCFAQwBCwJAAkACQCADKAKMAUECaw4CAAECCwJ/AkADQAJAAkAgAygCPA0AIAMQLyADKAI8DQAgCg0BQQAMBAsgAygCSCADKAJoai0AACEEIAMgAygC8C0iAUEBajYC8C0gASADKALsLWpBADoAACADIAMoAvAtIgFBAWo2AvAtIAEgAygC7C1qQQA6AAAgAyADKALwLSIBQQFqNgLwLSABIAMoAuwtaiAEOgAAIAMgBEECdGoiASABLwHkAUEBajsB5AEgAyADKAI8QQFrNgI8IAMgAygCaEEBaiIBNgJoIAMoAvAtIAMoAvQtRw0BQQAhBCADIAMoAlgiBkEATgR/IAMoAkggBmoFQQALIAEgBmtBABAPIAMgAygCaDYCWCADKAIAEAogAygCACgCEA0BDAILCyADQQA2AoQuIApBBEYEQCADIAMoAlgiAUEATgR/IAMoAkggAWoFQQALIAMoAmggAWtBARAPIAMgAygCaDYCWCADKAIAEApBA0ECIAMoAgAoAhAbDAILIAMoAvAtBEBBACEEIAMgAygCWCIBQQBOBH8gAygCSCABagVBAAsgAygCaCABa0EAEA8gAyADKAJoNgJYIAMoAgAQCiADKAIAKAIQRQ0BC0EBIQQLIAQL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bGl0ZXJhbC9sZW5ndGhzIHNldABpbnZhbGlkIGNvZGUgbGVuZ3RocyBzZXQAdW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0AGludmFsaWQgZGlzdGFuY2VzIHNldABpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0AEZpbGUgYWxyZWFkeSBleGlzdHMAdG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHMAaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3RocwAlcyVzJXMAYnVmZmVyIGVycm9yAE5vIGVycm9yAHN0cmVhbSBlcnJvcgBUZWxsIGVycm9yAEludGVybmFsIGVycm9yAFNlZWsgZXJyb3IAV3JpdGUgZXJyb3IAZmlsZSBlcnJvcgBSZWFkIGVycm9yAFpsaWIgZXJyb3IAZGF0YSBlcnJvcgBDUkMgZXJyb3IAaW5jb21wYXRpYmxlIHZlcnNpb24AaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrAGluY29ycmVjdCBoZWFkZXIgY2hlY2sAaW5jb3JyZWN0IGxlbmd0aCBjaGVjawBpbmNvcnJlY3QgZGF0YSBjaGVjawBpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjawBoZWFkZXIgY3JjIG1pc21hdGNoADEuMi4xMy56bGliLW5nAGludmFsaWQgd2luZG93IHNpemUAUmVhZC1vbmx5IGFyY2hpdmUATm90IGEgemlwIGFyY2hpdmUAUmVzb3VyY2Ugc3RpbGwgaW4gdXNlAE1hbGxvYyBmYWlsdXJlAGludmFsaWQgYmxvY2sgdHlwZQBGYWlsdXJlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZQBDYW4ndCBvcGVuIGZpbGUATm8gc3VjaCBmaWxlAFByZW1hdHVyZSBlbmQgb2YgZmlsZQBDYW4ndCByZW1vdmUgZmlsZQBpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUAaW52YWxpZCBkaXN0YW5jZSBjb2RlAHVua25vd24gY29tcHJlc3Npb24gbWV0aG9kAHN0cmVhbSBlbmQAQ29tcHJlc3NlZCBkYXRhIGludmFsaWQATXVsdGktZGlzayB6aXAgYXJjaGl2ZXMgbm90IHN1cHBvcnRl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UgAIANIACAAyAAgAsgAIAHIACADyAAgACgAIAIoACABKAAgAygAIACoACACqAAgAagAIAOoACAAaAAgAmgAIAFoACADaAAgAOgAIALoACAB6AAgA+gAIAAYACACGAAgARgAIAMYACAAmAAgApgAIAGYACADmAAgAFgAIAJYACABWAAgA1gAIADYACAC2AAgAdgAIAPYACAAOAAgAjgAIAE4ACADOAAgALgAIAK4ACABuAAgA7gAIAB4ACACeAAgAXgAIAN4ACAA+AAgAvgAIAH4ACAD+AAgAAQAIAIEACABBAAgAwQAIACEACAChAAgAYQAIAOEACAARAAgAkQAIAFEACADRAAgAMQAIALEACABxAAgA8QAIAAkACACJAAgASQAIAMkACAApAAgAqQAIAGkACADpAAgAGQAIAJkACABZAAgA2QAIADkACAC5AAgAeQAIAPkACAAFAAgAhQAIAEUACADFAAgAJQAIAKUACABlAAgA5QAIABUACACVAAgAVQAIANUACAA1AAgAtQAIAHUACAD1AAgADQAIAI0ACABNAAgAzQAIAC0ACACtAAgAbQAIAO0ACAAdAAgAnQAIAF0ACADdAAgAPQAIAL0ACAB9AAgA/QAIABMACQATAQkAkwAJAJMBCQBTAAkAUwEJANMACQDTAQkAMwAJADMBCQCzAAkAswEJAHMACQBzAQkA8wAJAPMBCQALAAkACwEJAIsACQCLAQkASwAJAEsBCQDLAAkAywEJACsACQArAQkAqwAJAKsBCQBrAAkAawEJAOsACQDrAQkAGwAJABsBCQCbAAkAmwEJAFsACQBbAQkA2wAJANsBCQA7AAkAOwEJALsACQC7AQkAewAJAHsBCQD7AAkA+wEJAAcACQAHAQkAhwAJAIcBCQBHAAkARwEJAMcACQDHAQkAJwAJACcBCQCnAAkApwEJAGcACQBnAQkA5wAJAOcBCQAXAAkAFwEJAJcACQCXAQkAVwAJAFcBCQDXAAkA1wEJADcACQA3AQkAtwAJALcBCQB3AAkAdwEJAPcACQD3AQkADwAJAA8BCQCPAAkAjwEJAE8ACQBPAQkAzwAJAM8BCQAvAAkALwEJAK8ACQCvAQkAbwAJAG8BCQDvAAkA7wEJAB8ACQAfAQkAnwAJAJ8BCQBfAAkAXwEJAN8ACQDfAQkAPwAJAD8BCQC/AAkA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SXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AQcCAAQuFARMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAgERQADEAAAAyAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADIAAAAzAAAANAAAADUAAAA2AAAANwAAADgAQfSCAQsCXEQAQbCDAQsQ/////////////////////w==' if (!isDataURI(wasmBinaryFile)) { wasmBinaryFile = locateFile(wasmBinaryFile) } function getBinary(file) { try { if (file == wasmBinaryFile && wasmBinary) { return new Uint8Array(wasmBinary) } var binary = tryParseAsDataURI(file) if (binary) { return binary } if (readBinary) { return readBinary(file) } else { 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)" } } catch (err2) { abort(err2) } } function instantiateSync(file, info) { var instance var module2 var binary try { binary = getBinary(file) module2 = new WebAssembly.Module(binary) instance = new WebAssembly.Instance(module2, info) } catch (e) { var str = e.toString() err('failed to compile wasm module: ' + str) if ( str.includes('imported Memory') || str.includes('memory import') ) { err( 'Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time).', ) } throw e } return [instance, module2] } function createWasm() { var info = { a: asmLibraryArg } function receiveInstance(instance, module2) { var exports3 = instance.exports Module['asm'] = exports3 wasmMemory = Module['asm']['g'] updateGlobalBufferAndViews(wasmMemory.buffer) wasmTable = Module['asm']['W'] addOnInit(Module['asm']['h']) removeRunDependency() } addRunDependency() if (Module['instantiateWasm']) { try { var exports2 = Module['instantiateWasm'](info, receiveInstance) return exports2 } catch (e) { err('Module.instantiateWasm callback failed with error: ' + e) return false } } var result = instantiateSync(wasmBinaryFile, info) receiveInstance(result[0]) return Module['asm'] } function LE_HEAP_LOAD_F32(byteOffset) { return HEAP_DATA_VIEW.getFloat32(byteOffset, true) } function LE_HEAP_LOAD_F64(byteOffset) { return HEAP_DATA_VIEW.getFloat64(byteOffset, true) } function LE_HEAP_LOAD_I16(byteOffset) { return HEAP_DATA_VIEW.getInt16(byteOffset, true) } function LE_HEAP_LOAD_I32(byteOffset) { return HEAP_DATA_VIEW.getInt32(byteOffset, true) } function LE_HEAP_STORE_I32(byteOffset, value) { HEAP_DATA_VIEW.setInt32(byteOffset, value, true) } function callRuntimeCallbacks(callbacks) { while (callbacks.length > 0) { var callback = callbacks.shift() if (typeof callback == 'function') { callback(Module) continue } var func = callback.func if (typeof func === 'number') { if (callback.arg === void 0) { wasmTable.get(func)() } else { wasmTable.get(func)(callback.arg) } } else { func(callback.arg === void 0 ? null : callback.arg) } } } function _gmtime_r(time, tmPtr) { var date = new Date(LE_HEAP_LOAD_I32((time >> 2) * 4) * 1e3) LE_HEAP_STORE_I32((tmPtr >> 2) * 4, date.getUTCSeconds()) LE_HEAP_STORE_I32(((tmPtr + 4) >> 2) * 4, date.getUTCMinutes()) LE_HEAP_STORE_I32(((tmPtr + 8) >> 2) * 4, date.getUTCHours()) LE_HEAP_STORE_I32(((tmPtr + 12) >> 2) * 4, date.getUTCDate()) LE_HEAP_STORE_I32(((tmPtr + 16) >> 2) * 4, date.getUTCMonth()) LE_HEAP_STORE_I32(((tmPtr + 20) >> 2) * 4, date.getUTCFullYear() - 1900) LE_HEAP_STORE_I32(((tmPtr + 24) >> 2) * 4, date.getUTCDay()) LE_HEAP_STORE_I32(((tmPtr + 36) >> 2) * 4, 0) LE_HEAP_STORE_I32(((tmPtr + 32) >> 2) * 4, 0) var start = Date.UTC(date.getUTCFullYear(), 0, 1, 0, 0, 0, 0) var yday = ((date.getTime() - start) / (1e3 * 60 * 60 * 24)) | 0 LE_HEAP_STORE_I32(((tmPtr + 28) >> 2) * 4, yday) if (!_gmtime_r.GMTString) _gmtime_r.GMTString = allocateUTF8('GMT') LE_HEAP_STORE_I32(((tmPtr + 40) >> 2) * 4, _gmtime_r.GMTString) return tmPtr } function ___gmtime_r(a0, a1) { return _gmtime_r(a0, a1) } function _emscripten_memcpy_big(dest, src, num) { HEAPU8.copyWithin(dest, src, src + num) } function emscripten_realloc_buffer(size) { try { wasmMemory.grow((size - buffer.byteLength + 65535) >>> 16) updateGlobalBufferAndViews(wasmMemory.buffer) return 1 } catch (e) {} } function _emscripten_resize_heap(requestedSize) { var oldSize = HEAPU8.length requestedSize = requestedSize >>> 0 var maxHeapSize = 2147483648 if (requestedSize > maxHeapSize) { return false } for (var cutDown = 1; cutDown <= 4; cutDown *= 2) { var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown) overGrownHeapSize = Math.min( overGrownHeapSize, requestedSize + 100663296, ) var newSize = Math.min( maxHeapSize, alignUp(Math.max(requestedSize, overGrownHeapSize), 65536), ) var replacement = emscripten_realloc_buffer(newSize) if (replacement) { return true } } return false } function _setTempRet0(val) {} function _time(ptr) { var ret = (Date.now() / 1e3) | 0 if (ptr) { LE_HEAP_STORE_I32((ptr >> 2) * 4, ret) } return ret } function _tzset() { if (_tzset.called) return _tzset.called = true var currentYear = new Date().getFullYear() var winter = new Date(currentYear, 0, 1) var summer = new Date(currentYear, 6, 1) var winterOffset = winter.getTimezoneOffset() var summerOffset = summer.getTimezoneOffset() var stdTimezoneOffset = Math.max(winterOffset, summerOffset) LE_HEAP_STORE_I32((__get_timezone() >> 2) * 4, stdTimezoneOffset * 60) LE_HEAP_STORE_I32( (__get_daylight() >> 2) * 4, Number(winterOffset != summerOffset), ) function extractZone(date) { var match = date.toTimeString().match(/\(([A-Za-z ]+)\)$/) return match ? match[1] : 'GMT' } var winterName = extractZone(winter) var summerName = extractZone(summer) var winterNamePtr = allocateUTF8(winterName) var summerNamePtr = allocateUTF8(summerName) if (summerOffset < winterOffset) { LE_HEAP_STORE_I32((__get_tzname() >> 2) * 4, winterNamePtr) LE_HEAP_STORE_I32(((__get_tzname() + 4) >> 2) * 4, summerNamePtr) } else { LE_HEAP_STORE_I32((__get_tzname() >> 2) * 4, summerNamePtr) LE_HEAP_STORE_I32(((__get_tzname() + 4) >> 2) * 4, winterNamePtr) } } function _timegm(tmPtr) { _tzset() var time = Date.UTC( LE_HEAP_LOAD_I32(((tmPtr + 20) >> 2) * 4) + 1900, LE_HEAP_LOAD_I32(((tmPtr + 16) >> 2) * 4), LE_HEAP_LOAD_I32(((tmPtr + 12) >> 2) * 4), LE_HEAP_LOAD_I32(((tmPtr + 8) >> 2) * 4), LE_HEAP_LOAD_I32(((tmPtr + 4) >> 2) * 4), LE_HEAP_LOAD_I32((tmPtr >> 2) * 4), 0, ) var date = new Date(time) LE_HEAP_STORE_I32(((tmPtr + 24) >> 2) * 4, date.getUTCDay()) var start = Date.UTC(date.getUTCFullYear(), 0, 1, 0, 0, 0, 0) var yday = ((date.getTime() - start) / (1e3 * 60 * 60 * 24)) | 0 LE_HEAP_STORE_I32(((tmPtr + 28) >> 2) * 4, yday) return (date.getTime() / 1e3) | 0 } function intArrayFromBase64(s) { { var buf try { buf = Buffer.from(s, 'base64') } catch (_) { buf = new Buffer(s, 'base64') } return new Uint8Array( buf['buffer'], buf['byteOffset'], buf['byteLength'], ) } } function tryParseAsDataURI(filename) { if (!isDataURI(filename)) { return } return intArrayFromBase64(filename.slice(dataURIPrefix.length)) } var asmLibraryArg = { e: ___gmtime_r, c: _emscripten_memcpy_big, d: _emscripten_resize_heap, a: _setTempRet0, b: _time, f: _timegm, } var asm = createWasm() Module['___wasm_call_ctors'] = asm['h'] Module['_zip_ext_count_symlinks'] = asm['i'] Module['_zip_file_get_external_attributes'] = asm['j'] Module['_zipstruct_statS'] = asm['k'] Module['_zipstruct_stat_size'] = asm['l'] Module['_zipstruct_stat_mtime'] = asm['m'] Module['_zipstruct_stat_crc'] = asm['n'] Module['_zipstruct_errorS'] = asm['o'] Module['_zipstruct_error_code_zip'] = asm['p'] Module['_zipstruct_stat_comp_size'] = asm['q'] Module['_zipstruct_stat_comp_method'] = asm['r'] Module['_zip_close'] = asm['s'] Module['_zip_delete'] = asm['t'] Module['_zip_dir_add'] = asm['u'] Module['_zip_discard'] = asm['v'] Module['_zip_error_init_with_code'] = asm['w'] Module['_zip_get_error'] = asm['x'] Module['_zip_file_get_error'] = asm['y'] Module['_zip_error_strerror'] = asm['z'] Module['_zip_fclose'] = asm['A'] Module['_zip_file_add'] = asm['B'] Module['_free'] = asm['C'] var _malloc = (Module['_malloc'] = asm['D']) Module['_zip_source_error'] = asm['E'] Module['_zip_source_seek'] = asm['F'] Module['_zip_file_set_external_attributes'] = asm['G'] Module['_zip_file_set_mtime'] = asm['H'] Module['_zip_fopen_index'] = asm['I'] Module['_zip_fread'] = asm['J'] Module['_zip_get_name'] = asm['K'] Module['_zip_get_num_entries'] = asm['L'] Module['_zip_source_read'] = asm['M'] Module['_zip_name_locate'] = asm['N'] Module['_zip_open_from_source'] = asm['O'] Module['_zip_set_file_compression'] = asm['P'] Module['_zip_source_buffer'] = asm['Q'] Module['_zip_source_buffer_create'] = asm['R'] Module['_zip_source_close'] = asm['S'] Module['_zip_source_free'] = asm['T'] Module['_zip_source_keep'] = asm['U'] Module['_zip_source_open'] = asm['V'] Module['_zip_source_tell'] = asm['X'] Module['_zip_stat_index'] = asm['Y'] var __get_tzname = (Module['__get_tzname'] = asm['Z']) var __get_daylight = (Module['__get_daylight'] = asm['_']) var __get_timezone = (Module['__get_timezone'] = asm['$']) var stackSave = (Module['stackSave'] = asm['aa']) var stackRestore = (Module['stackRestore'] = asm['ba']) var stackAlloc = (Module['stackAlloc'] = asm['ca']) Module['cwrap'] = cwrap Module['getValue'] = getValue var calledRun dependenciesFulfilled = function runCaller() { if (!calledRun) run() if (!calledRun) dependenciesFulfilled = runCaller } function run(args) { if (runDependencies > 0) { return } preRun() if (runDependencies > 0) { return } function doRun() { if (calledRun) return calledRun = true Module['calledRun'] = true if (ABORT) return initRuntime() readyPromiseResolve(Module) if (Module['onRuntimeInitialized']) Module['onRuntimeInitialized']() postRun() } if (Module['setStatus']) { Module['setStatus']('Running...') setTimeout(function () { setTimeout(function () { Module['setStatus']('') }, 1) doRun() }, 1) } else { doRun() } } Module['run'] = run if (Module['preInit']) { if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']] while (Module['preInit'].length > 0) { Module['preInit'].pop()() } } run() return createModule2 } })() module.exports = createModule })(libzipSync) const createModule = libzipSync.exports const number64 = [`number`, `number`] var Errors = /* @__PURE__ */ (Errors2 => { Errors2[(Errors2['ZIP_ER_OK'] = 0)] = 'ZIP_ER_OK' Errors2[(Errors2['ZIP_ER_MULTIDISK'] = 1)] = 'ZIP_ER_MULTIDISK' Errors2[(Errors2['ZIP_ER_RENAME'] = 2)] = 'ZIP_ER_RENAME' Errors2[(Errors2['ZIP_ER_CLOSE'] = 3)] = 'ZIP_ER_CLOSE' Errors2[(Errors2['ZIP_ER_SEEK'] = 4)] = 'ZIP_ER_SEEK' Errors2[(Errors2['ZIP_ER_READ'] = 5)] = 'ZIP_ER_READ' Errors2[(Errors2['ZIP_ER_WRITE'] = 6)] = 'ZIP_ER_WRITE' Errors2[(Errors2['ZIP_ER_CRC'] = 7)] = 'ZIP_ER_CRC' Errors2[(Errors2['ZIP_ER_ZIPCLOSED'] = 8)] = 'ZIP_ER_ZIPCLOSED' Errors2[(Errors2['ZIP_ER_NOENT'] = 9)] = 'ZIP_ER_NOENT' Errors2[(Errors2['ZIP_ER_EXISTS'] = 10)] = 'ZIP_ER_EXISTS' Errors2[(Errors2['ZIP_ER_OPEN'] = 11)] = 'ZIP_ER_OPEN' Errors2[(Errors2['ZIP_ER_TMPOPEN'] = 12)] = 'ZIP_ER_TMPOPEN' Errors2[(Errors2['ZIP_ER_ZLIB'] = 13)] = 'ZIP_ER_ZLIB' Errors2[(Errors2['ZIP_ER_MEMORY'] = 14)] = 'ZIP_ER_MEMORY' Errors2[(Errors2['ZIP_ER_CHANGED'] = 15)] = 'ZIP_ER_CHANGED' Errors2[(Errors2['ZIP_ER_COMPNOTSUPP'] = 16)] = 'ZIP_ER_COMPNOTSUPP' Errors2[(Errors2['ZIP_ER_EOF'] = 17)] = 'ZIP_ER_EOF' Errors2[(Errors2['ZIP_ER_INVAL'] = 18)] = 'ZIP_ER_INVAL' Errors2[(Errors2['ZIP_ER_NOZIP'] = 19)] = 'ZIP_ER_NOZIP' Errors2[(Errors2['ZIP_ER_INTERNAL'] = 20)] = 'ZIP_ER_INTERNAL' Errors2[(Errors2['ZIP_ER_INCONS'] = 21)] = 'ZIP_ER_INCONS' Errors2[(Errors2['ZIP_ER_REMOVE'] = 22)] = 'ZIP_ER_REMOVE' Errors2[(Errors2['ZIP_ER_DELETED'] = 23)] = 'ZIP_ER_DELETED' Errors2[(Errors2['ZIP_ER_ENCRNOTSUPP'] = 24)] = 'ZIP_ER_ENCRNOTSUPP' Errors2[(Errors2['ZIP_ER_RDONLY'] = 25)] = 'ZIP_ER_RDONLY' Errors2[(Errors2['ZIP_ER_NOPASSWD'] = 26)] = 'ZIP_ER_NOPASSWD' Errors2[(Errors2['ZIP_ER_WRONGPASSWD'] = 27)] = 'ZIP_ER_WRONGPASSWD' Errors2[(Errors2['ZIP_ER_OPNOTSUPP'] = 28)] = 'ZIP_ER_OPNOTSUPP' Errors2[(Errors2['ZIP_ER_INUSE'] = 29)] = 'ZIP_ER_INUSE' Errors2[(Errors2['ZIP_ER_TELL'] = 30)] = 'ZIP_ER_TELL' Errors2[(Errors2['ZIP_ER_COMPRESSED_DATA'] = 31)] = 'ZIP_ER_COMPRESSED_DATA' return Errors2 })(Errors || {}) const makeInterface = emZip => ({ get HEAPU8() { return emZip.HEAPU8 }, errors: Errors, SEEK_SET: 0, SEEK_CUR: 1, SEEK_END: 2, ZIP_CHECKCONS: 4, ZIP_EXCL: 2, ZIP_RDONLY: 16, ZIP_FL_OVERWRITE: 8192, ZIP_FL_COMPRESSED: 4, ZIP_OPSYS_DOS: 0, ZIP_OPSYS_AMIGA: 1, ZIP_OPSYS_OPENVMS: 2, ZIP_OPSYS_UNIX: 3, ZIP_OPSYS_VM_CMS: 4, ZIP_OPSYS_ATARI_ST: 5, ZIP_OPSYS_OS_2: 6, ZIP_OPSYS_MACINTOSH: 7, ZIP_OPSYS_Z_SYSTEM: 8, ZIP_OPSYS_CPM: 9, ZIP_OPSYS_WINDOWS_NTFS: 10, ZIP_OPSYS_MVS: 11, ZIP_OPSYS_VSE: 12, ZIP_OPSYS_ACORN_RISC: 13, ZIP_OPSYS_VFAT: 14, ZIP_OPSYS_ALTERNATE_MVS: 15, ZIP_OPSYS_BEOS: 16, ZIP_OPSYS_TANDEM: 17, ZIP_OPSYS_OS_400: 18, ZIP_OPSYS_OS_X: 19, ZIP_CM_DEFAULT: -1, ZIP_CM_STORE: 0, ZIP_CM_DEFLATE: 8, uint08S: emZip._malloc(1), uint32S: emZip._malloc(4), malloc: emZip._malloc, free: emZip._free, getValue: emZip.getValue, openFromSource: emZip.cwrap(`zip_open_from_source`, `number`, [ `number`, `number`, `number`, ]), close: emZip.cwrap(`zip_close`, `number`, [`number`]), discard: emZip.cwrap(`zip_discard`, null, [`number`]), getError: emZip.cwrap(`zip_get_error`, `number`, [`number`]), getName: emZip.cwrap(`zip_get_name`, `string`, [ `number`, `number`, `number`, ]), getNumEntries: emZip.cwrap(`zip_get_num_entries`, `number`, [ `number`, `number`, ]), delete: emZip.cwrap(`zip_delete`, `number`, [`number`, `number`]), statIndex: emZip.cwrap(`zip_stat_index`, `number`, [ `number`, ...number64, `number`, `number`, ]), fopenIndex: emZip.cwrap(`zip_fopen_index`, `number`, [ `number`, ...number64, `number`, ]), fread: emZip.cwrap(`zip_fread`, `number`, [ `number`, `number`, `number`, `number`, ]), fclose: emZip.cwrap(`zip_fclose`, `number`, [`number`]), dir: { add: emZip.cwrap(`zip_dir_add`, `number`, [`number`, `string`]), }, file: { add: emZip.cwrap(`zip_file_add`, `number`, [ `number`, `string`, `number`, `number`, ]), getError: emZip.cwrap(`zip_file_get_error`, `number`, [`number`]), getExternalAttributes: emZip.cwrap( `zip_file_get_external_attributes`, `number`, [`number`, ...number64, `number`, `number`, `number`], ), setExternalAttributes: emZip.cwrap( `zip_file_set_external_attributes`, `number`, [`number`, ...number64, `number`, `number`, `number`], ), setMtime: emZip.cwrap(`zip_file_set_mtime`, `number`, [ `number`, ...number64, `number`, `number`, ]), setCompression: emZip.cwrap(`zip_set_file_compression`, `number`, [ `number`, ...number64, `number`, `number`, ]), }, ext: { countSymlinks: emZip.cwrap(`zip_ext_count_symlinks`, `number`, [`number`]), }, error: { initWithCode: emZip.cwrap(`zip_error_init_with_code`, null, [ `number`, `number`, ]), strerror: emZip.cwrap(`zip_error_strerror`, `string`, [`number`]), }, name: { locate: emZip.cwrap(`zip_name_locate`, `number`, [ `number`, `string`, `number`, ]), }, source: { fromUnattachedBuffer: emZip.cwrap(`zip_source_buffer_create`, `number`, [ `number`, ...number64, `number`, `number`, ]), fromBuffer: emZip.cwrap(`zip_source_buffer`, `number`, [ `number`, `number`, ...number64, `number`, ]), free: emZip.cwrap(`zip_source_free`, null, [`number`]), keep: emZip.cwrap(`zip_source_keep`, null, [`number`]), open: emZip.cwrap(`zip_source_open`, `number`, [`number`]), close: emZip.cwrap(`zip_source_close`, `number`, [`number`]), seek: emZip.cwrap(`zip_source_seek`, `number`, [ `number`, ...number64, `number`, ]), tell: emZip.cwrap(`zip_source_tell`, `number`, [`number`]), read: emZip.cwrap(`zip_source_read`, `number`, [ `number`, `number`, `number`, ]), error: emZip.cwrap(`zip_source_error`, `number`, [`number`]), }, struct: { statS: emZip.cwrap(`zipstruct_statS`, `number`, []), statSize: emZip.cwrap(`zipstruct_stat_size`, `number`, [`number`]), statCompSize: emZip.cwrap(`zipstruct_stat_comp_size`, `number`, [`number`]), statCompMethod: emZip.cwrap(`zipstruct_stat_comp_method`, `number`, [ `number`, ]), statMtime: emZip.cwrap(`zipstruct_stat_mtime`, `number`, [`number`]), statCrc: emZip.cwrap(`zipstruct_stat_crc`, `number`, [`number`]), errorS: emZip.cwrap(`zipstruct_errorS`, `number`, []), errorCodeZip: emZip.cwrap(`zipstruct_error_code_zip`, `number`, [`number`]), }, }) function getArchivePart(path, extension) { let idx = path.indexOf(extension) if (idx <= 0) return null let nextCharIdx = idx while (idx >= 0) { nextCharIdx = idx + extension.length if (path[nextCharIdx] === ppath.sep) break if (path[idx - 1] === ppath.sep) return null idx = path.indexOf(extension, nextCharIdx) } if (path.length > nextCharIdx && path[nextCharIdx] !== ppath.sep) return null return path.slice(0, nextCharIdx) } class ZipOpenFS extends MountFS { static async openPromise(fn, opts) { const zipOpenFs = new ZipOpenFS(opts) try { return await fn(zipOpenFs) } finally { zipOpenFs.saveAndClose() } } constructor(opts = {}) { const fileExtensions = opts.fileExtensions const readOnlyArchives = opts.readOnlyArchives const getMountPoint = typeof fileExtensions === `undefined` ? path => getArchivePart(path, `.zip`) : path => { for (const extension of fileExtensions) { const result = getArchivePart(path, extension) if (result) { return result } } return null } const factorySync = (baseFs, p) => { return new ZipFS(p, { baseFs, readOnly: readOnlyArchives, stats: baseFs.statSync(p), }) } const factoryPromise = async (baseFs, p) => { const zipOptions = { baseFs, readOnly: readOnlyArchives, stats: await baseFs.statPromise(p), } return () => { return new ZipFS(p, zipOptions) } } super({ ...opts, factorySync, factoryPromise, getMountPoint, }) } } const DEFAULT_COMPRESSION_LEVEL = `mixed` function toUnixTimestamp(time) { if (typeof time === `string` && String(+time) === time) return +time if (typeof time === `number` && Number.isFinite(time)) { if (time < 0) { return Date.now() / 1e3 } else { return time } } if (nodeUtils.types.isDate(time)) return time.getTime() / 1e3 throw new Error(`Invalid time`) } function makeEmptyArchive() { return Buffer.from([ 80, 75, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ]) } class LibzipError extends Error { constructor(message, code) { super(message) this.name = `Libzip Error` this.code = code } } class ZipFS extends BasePortableFakeFS { constructor(source, opts = {}) { super() this.listings = /* @__PURE__ */ new Map() this.entries = /* @__PURE__ */ new Map() this.fileSources = /* @__PURE__ */ new Map() this.fds = /* @__PURE__ */ new Map() this.nextFd = 0 this.ready = false this.readOnly = false const pathOptions = opts this.level = typeof pathOptions.level !== `undefined` ? pathOptions.level : DEFAULT_COMPRESSION_LEVEL source ??= makeEmptyArchive() if (typeof source === `string`) { const { baseFs = new NodeFS() } = pathOptions this.baseFs = baseFs this.path = source } else { this.path = null this.baseFs = null } if (opts.stats) { this.stats = opts.stats } else { if (typeof source === `string`) { try { this.stats = this.baseFs.statSync(source) } catch (error) { if (error.code === `ENOENT` && pathOptions.create) { this.stats = makeDefaultStats() } else { throw error } } } else { this.stats = makeDefaultStats() } } this.libzip = getInstance() const errPtr = this.libzip.malloc(4) try { let flags = 0 if (opts.readOnly) { flags |= this.libzip.ZIP_RDONLY this.readOnly = true } if (typeof source === `string`) source = pathOptions.create ? makeEmptyArchive() : this.baseFs.readFileSync(source) const lzSource = this.allocateUnattachedSource(source) try { this.zip = this.libzip.openFromSource(lzSource, flags, errPtr) this.lzSource = lzSource } catch (error) { this.libzip.source.free(lzSource) throw error } if (this.zip === 0) { const error = this.libzip.struct.errorS() this.libzip.error.initWithCode( error, this.libzip.getValue(errPtr, `i32`), ) throw this.makeLibzipError(error) } } finally { this.libzip.free(errPtr) } this.listings.set(PortablePath.root, /* @__PURE__ */ new Set()) const entryCount = this.libzip.getNumEntries(this.zip, 0) for (let t = 0; t < entryCount; ++t) { const raw = this.libzip.getName(this.zip, t, 0) if (ppath.isAbsolute(raw)) continue const p = ppath.resolve(PortablePath.root, raw) this.registerEntry(p, t) if (raw.endsWith(`/`)) { this.registerListing(p) } } this.symlinkCount = this.libzip.ext.countSymlinks(this.zip) if (this.symlinkCount === -1) throw this.makeLibzipError(this.libzip.getError(this.zip)) this.ready = true } makeLibzipError(error) { const errorCode = this.libzip.struct.errorCodeZip(error) const strerror = this.libzip.error.strerror(error) const libzipError = new LibzipError(strerror, this.libzip.errors[errorCode]) if (errorCode === this.libzip.errors.ZIP_ER_CHANGED) throw new Error( `Assertion failed: Unexpected libzip error: ${libzipError.message}`, ) return libzipError } getExtractHint(hints) { for (const fileName of this.entries.keys()) { const ext = this.pathUtils.extname(fileName) if (hints.relevantExtensions.has(ext)) { return true } } return false } getAllFiles() { return Array.from(this.entries.keys()) } getRealPath() { if (!this.path) throw new Error(`ZipFS don't have real paths when loaded from a buffer`) return this.path } prepareClose() { if (!this.ready) throw EBUSY(`archive closed, close`) unwatchAllFiles(this) } getBufferAndClose() { this.prepareClose() if (this.entries.size === 0) { this.discardAndClose() return makeEmptyArchive() } try { this.libzip.source.keep(this.lzSource) if (this.libzip.close(this.zip) === -1) throw this.makeLibzipError(this.libzip.getError(this.zip)) if (this.libzip.source.open(this.lzSource) === -1) throw this.makeLibzipError(this.libzip.source.error(this.lzSource)) if ( this.libzip.source.seek(this.lzSource, 0, 0, this.libzip.SEEK_END) === -1 ) throw this.makeLibzipError(this.libzip.source.error(this.lzSource)) const size = this.libzip.source.tell(this.lzSource) if (size === -1) throw this.makeLibzipError(this.libzip.source.error(this.lzSource)) if ( this.libzip.source.seek(this.lzSource, 0, 0, this.libzip.SEEK_SET) === -1 ) throw this.makeLibzipError(this.libzip.source.error(this.lzSource)) const buffer = this.libzip.malloc(size) if (!buffer) throw new Error(`Couldn't allocate enough memory`) try { const rc = this.libzip.source.read(this.lzSource, buffer, size) if (rc === -1) throw this.makeLibzipError(this.libzip.source.error(this.lzSource)) else if (rc < size) throw new Error(`Incomplete read`) else if (rc > size) throw new Error(`Overread`) let result = Buffer.from( this.libzip.HEAPU8.subarray(buffer, buffer + size), ) if (process.env.YARN_IS_TEST_ENV && process.env.YARN_ZIP_DATA_EPILOGUE) result = Buffer.concat([ result, Buffer.from(process.env.YARN_ZIP_DATA_EPILOGUE), ]) return result } finally { this.libzip.free(buffer) } } finally { this.libzip.source.close(this.lzSource) this.libzip.source.free(this.lzSource) this.ready = false } } discardAndClose() { this.prepareClose() this.libzip.discard(this.zip) this.ready = false } saveAndClose() { if (!this.path || !this.baseFs) throw new Error( `ZipFS cannot be saved and must be discarded when loaded from a buffer`, ) if (this.readOnly) { this.discardAndClose() return } const newMode = this.baseFs.existsSync(this.path) || this.stats.mode === DEFAULT_MODE ? void 0 : this.stats.mode this.baseFs.writeFileSync(this.path, this.getBufferAndClose(), { mode: newMode, }) this.ready = false } resolve(p) { return ppath.resolve(PortablePath.root, p) } async openPromise(p, flags, mode) { return this.openSync(p, flags, mode) } openSync(p, flags, mode) { const fd = this.nextFd++ this.fds.set(fd, { cursor: 0, p }) return fd } hasOpenFileHandles() { return !!this.fds.size } async opendirPromise(p, opts) { return this.opendirSync(p, opts) } opendirSync(p, opts = {}) { const resolvedP = this.resolveFilename(`opendir '${p}'`, p) if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) throw ENOENT(`opendir '${p}'`) const directoryListing = this.listings.get(resolvedP) if (!directoryListing) throw ENOTDIR(`opendir '${p}'`) const entries = [...directoryListing] const fd = this.openSync(resolvedP, `r`) const onClose = () => { this.closeSync(fd) } return opendir(this, resolvedP, entries, { onClose }) } async readPromise(fd, buffer, offset, length, position) { return this.readSync(fd, buffer, offset, length, position) } readSync(fd, buffer, offset = 0, length = buffer.byteLength, position = -1) { const entry = this.fds.get(fd) if (typeof entry === `undefined`) throw EBADF(`read`) const realPosition = position === -1 || position === null ? entry.cursor : position const source = this.readFileSync(entry.p) source.copy(buffer, offset, realPosition, realPosition + length) const bytesRead = Math.max( 0, Math.min(source.length - realPosition, length), ) if (position === -1 || position === null) entry.cursor += bytesRead return bytesRead } async writePromise(fd, buffer, offset, length, position) { if (typeof buffer === `string`) { return this.writeSync(fd, buffer, position) } else { return this.writeSync(fd, buffer, offset, length, position) } } writeSync(fd, buffer, offset, length, position) { const entry = this.fds.get(fd) if (typeof entry === `undefined`) throw EBADF(`read`) throw new Error(`Unimplemented`) } async closePromise(fd) { return this.closeSync(fd) } closeSync(fd) { const entry = this.fds.get(fd) if (typeof entry === `undefined`) throw EBADF(`read`) this.fds.delete(fd) } createReadStream(p, { encoding } = {}) { if (p === null) throw new Error(`Unimplemented`) const fd = this.openSync(p, `r`) const stream$1 = Object.assign( new stream.PassThrough({ emitClose: true, autoDestroy: true, destroy: (error, callback) => { clearImmediate(immediate) this.closeSync(fd) callback(error) }, }), { close() { stream$1.destroy() }, bytesRead: 0, path: p, pending: false, }, ) const immediate = setImmediate(async () => { try { const data = await this.readFilePromise(p, encoding) stream$1.bytesRead = data.length stream$1.end(data) } catch (error) { stream$1.destroy(error) } }) return stream$1 } createWriteStream(p, { encoding } = {}) { if (this.readOnly) throw EROFS(`open '${p}'`) if (p === null) throw new Error(`Unimplemented`) const chunks = [] const fd = this.openSync(p, `w`) const stream$1 = Object.assign( new stream.PassThrough({ autoDestroy: true, emitClose: true, destroy: (error, callback) => { try { if (error) { callback(error) } else { this.writeFileSync(p, Buffer.concat(chunks), encoding) callback(null) } } catch (err) { callback(err) } finally { this.closeSync(fd) } }, }), { close() { stream$1.destroy() }, bytesWritten: 0, path: p, pending: false, }, ) stream$1.on(`data`, chunk => { const chunkBuffer = Buffer.from(chunk) stream$1.bytesWritten += chunkBuffer.length chunks.push(chunkBuffer) }) return stream$1 } async realpathPromise(p) { return this.realpathSync(p) } realpathSync(p) { const resolvedP = this.resolveFilename(`lstat '${p}'`, p) if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) throw ENOENT(`lstat '${p}'`) return resolvedP } async existsPromise(p) { return this.existsSync(p) } existsSync(p) { if (!this.ready) throw EBUSY(`archive closed, existsSync '${p}'`) if (this.symlinkCount === 0) { const resolvedP2 = ppath.resolve(PortablePath.root, p) return this.entries.has(resolvedP2) || this.listings.has(resolvedP2) } let resolvedP try { resolvedP = this.resolveFilename(`stat '${p}'`, p, void 0, false) } catch (error) { return false } if (resolvedP === void 0) return false return this.entries.has(resolvedP) || this.listings.has(resolvedP) } async accessPromise(p, mode) { return this.accessSync(p, mode) } accessSync(p, mode = fs.constants.F_OK) { const resolvedP = this.resolveFilename(`access '${p}'`, p) if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) throw ENOENT(`access '${p}'`) if (this.readOnly && mode & fs.constants.W_OK) { throw EROFS(`access '${p}'`) } } async statPromise(p, opts = { bigint: false }) { if (opts.bigint) return this.statSync(p, { bigint: true }) return this.statSync(p) } statSync(p, opts = { bigint: false, throwIfNoEntry: true }) { const resolvedP = this.resolveFilename( `stat '${p}'`, p, void 0, opts.throwIfNoEntry, ) if (resolvedP === void 0) return void 0 if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) { if (opts.throwIfNoEntry === false) return void 0 throw ENOENT(`stat '${p}'`) } if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) throw ENOTDIR(`stat '${p}'`) return this.statImpl(`stat '${p}'`, resolvedP, opts) } async fstatPromise(fd, opts) { return this.fstatSync(fd, opts) } fstatSync(fd, opts) { const entry = this.fds.get(fd) if (typeof entry === `undefined`) throw EBADF(`fstatSync`) const { p } = entry const resolvedP = this.resolveFilename(`stat '${p}'`, p) if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) throw ENOENT(`stat '${p}'`) if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) throw ENOTDIR(`stat '${p}'`) return this.statImpl(`fstat '${p}'`, resolvedP, opts) } async lstatPromise(p, opts = { bigint: false }) { if (opts.bigint) return this.lstatSync(p, { bigint: true }) return this.lstatSync(p) } lstatSync(p, opts = { bigint: false, throwIfNoEntry: true }) { const resolvedP = this.resolveFilename( `lstat '${p}'`, p, false, opts.throwIfNoEntry, ) if (resolvedP === void 0) return void 0 if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) { if (opts.throwIfNoEntry === false) return void 0 throw ENOENT(`lstat '${p}'`) } if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) throw ENOTDIR(`lstat '${p}'`) return this.statImpl(`lstat '${p}'`, resolvedP, opts) } statImpl(reason, p, opts = {}) { const entry = this.entries.get(p) if (typeof entry !== `undefined`) { const stat = this.libzip.struct.statS() const rc = this.libzip.statIndex(this.zip, entry, 0, 0, stat) if (rc === -1) throw this.makeLibzipError(this.libzip.getError(this.zip)) const uid = this.stats.uid const gid = this.stats.gid const size = this.libzip.struct.statSize(stat) >>> 0 const blksize = 512 const blocks = Math.ceil(size / blksize) const mtimeMs = (this.libzip.struct.statMtime(stat) >>> 0) * 1e3 const atimeMs = mtimeMs const birthtimeMs = mtimeMs const ctimeMs = mtimeMs const atime = new Date(atimeMs) const birthtime = new Date(birthtimeMs) const ctime = new Date(ctimeMs) const mtime = new Date(mtimeMs) const type = this.listings.has(p) ? fs.constants.S_IFDIR : this.isSymbolicLink(entry) ? fs.constants.S_IFLNK : fs.constants.S_IFREG const defaultMode = type === fs.constants.S_IFDIR ? 493 : 420 const mode = type | (this.getUnixMode(entry, defaultMode) & 511) const crc = this.libzip.struct.statCrc(stat) const statInstance = Object.assign(new StatEntry(), { uid, gid, size, blksize, blocks, atime, birthtime, ctime, mtime, atimeMs, birthtimeMs, ctimeMs, mtimeMs, mode, crc, }) return opts.bigint === true ? convertToBigIntStats(statInstance) : statInstance } if (this.listings.has(p)) { const uid = this.stats.uid const gid = this.stats.gid const size = 0 const blksize = 512 const blocks = 0 const atimeMs = this.stats.mtimeMs const birthtimeMs = this.stats.mtimeMs const ctimeMs = this.stats.mtimeMs const mtimeMs = this.stats.mtimeMs const atime = new Date(atimeMs) const birthtime = new Date(birthtimeMs) const ctime = new Date(ctimeMs) const mtime = new Date(mtimeMs) const mode = fs.constants.S_IFDIR | 493 const crc = 0 const statInstance = Object.assign(new StatEntry(), { uid, gid, size, blksize, blocks, atime, birthtime, ctime, mtime, atimeMs, birthtimeMs, ctimeMs, mtimeMs, mode, crc, }) return opts.bigint === true ? convertToBigIntStats(statInstance) : statInstance } throw new Error(`Unreachable`) } getUnixMode(index, defaultMode) { const rc = this.libzip.file.getExternalAttributes( this.zip, index, 0, 0, this.libzip.uint08S, this.libzip.uint32S, ) if (rc === -1) throw this.makeLibzipError(this.libzip.getError(this.zip)) const opsys = this.libzip.getValue(this.libzip.uint08S, `i8`) >>> 0 if (opsys !== this.libzip.ZIP_OPSYS_UNIX) return defaultMode return this.libzip.getValue(this.libzip.uint32S, `i32`) >>> 16 } registerListing(p) { const existingListing = this.listings.get(p) if (existingListing) return existingListing const parentListing = this.registerListing(ppath.dirname(p)) parentListing.add(ppath.basename(p)) const newListing = /* @__PURE__ */ new Set() this.listings.set(p, newListing) return newListing } registerEntry(p, index) { const parentListing = this.registerListing(ppath.dirname(p)) parentListing.add(ppath.basename(p)) this.entries.set(p, index) } unregisterListing(p) { this.listings.delete(p) const parentListing = this.listings.get(ppath.dirname(p)) parentListing?.delete(ppath.basename(p)) } unregisterEntry(p) { this.unregisterListing(p) const entry = this.entries.get(p) this.entries.delete(p) if (typeof entry === `undefined`) return this.fileSources.delete(entry) if (this.isSymbolicLink(entry)) { this.symlinkCount-- } } deleteEntry(p, index) { this.unregisterEntry(p) const rc = this.libzip.delete(this.zip, index) if (rc === -1) { throw this.makeLibzipError(this.libzip.getError(this.zip)) } } resolveFilename( reason, p, resolveLastComponent = true, throwIfNoEntry = true, ) { if (!this.ready) throw EBUSY(`archive closed, ${reason}`) let resolvedP = ppath.resolve(PortablePath.root, p) if (resolvedP === `/`) return PortablePath.root const fileIndex = this.entries.get(resolvedP) if (resolveLastComponent && fileIndex !== void 0) { if (this.symlinkCount !== 0 && this.isSymbolicLink(fileIndex)) { const target = this.getFileSource(fileIndex).toString() return this.resolveFilename( reason, ppath.resolve(ppath.dirname(resolvedP), target), true, throwIfNoEntry, ) } else { return resolvedP } } while (true) { const parentP = this.resolveFilename( reason, ppath.dirname(resolvedP), true, throwIfNoEntry, ) if (parentP === void 0) return parentP const isDir = this.listings.has(parentP) const doesExist = this.entries.has(parentP) if (!isDir && !doesExist) { if (throwIfNoEntry === false) return void 0 throw ENOENT(reason) } if (!isDir) throw ENOTDIR(reason) resolvedP = ppath.resolve(parentP, ppath.basename(resolvedP)) if (!resolveLastComponent || this.symlinkCount === 0) break const index = this.libzip.name.locate(this.zip, resolvedP.slice(1), 0) if (index === -1) break if (this.isSymbolicLink(index)) { const target = this.getFileSource(index).toString() resolvedP = ppath.resolve(ppath.dirname(resolvedP), target) } else { break } } return resolvedP } allocateBuffer(content) { if (!Buffer.isBuffer(content)) content = Buffer.from(content) const buffer = this.libzip.malloc(content.byteLength) if (!buffer) throw new Error(`Couldn't allocate enough memory`) const heap = new Uint8Array( this.libzip.HEAPU8.buffer, buffer, content.byteLength, ) heap.set(content) return { buffer, byteLength: content.byteLength } } allocateUnattachedSource(content) { const error = this.libzip.struct.errorS() const { buffer, byteLength } = this.allocateBuffer(content) const source = this.libzip.source.fromUnattachedBuffer( buffer, byteLength, 0, 1, error, ) if (source === 0) { this.libzip.free(error) throw this.makeLibzipError(error) } return source } allocateSource(content) { const { buffer, byteLength } = this.allocateBuffer(content) const source = this.libzip.source.fromBuffer( this.zip, buffer, byteLength, 0, 1, ) if (source === 0) { this.libzip.free(buffer) throw this.makeLibzipError(this.libzip.getError(this.zip)) } return source } setFileSource(p, content) { const buffer = Buffer.isBuffer(content) ? content : Buffer.from(content) const target = ppath.relative(PortablePath.root, p) const lzSource = this.allocateSource(content) try { const newIndex = this.libzip.file.add( this.zip, target, lzSource, this.libzip.ZIP_FL_OVERWRITE, ) if (newIndex === -1) throw this.makeLibzipError(this.libzip.getError(this.zip)) if (this.level !== `mixed`) { const method = this.level === 0 ? this.libzip.ZIP_CM_STORE : this.libzip.ZIP_CM_DEFLATE const rc = this.libzip.file.setCompression( this.zip, newIndex, 0, method, this.level, ) if (rc === -1) { throw this.makeLibzipError(this.libzip.getError(this.zip)) } } this.fileSources.set(newIndex, buffer) return newIndex } catch (error) { this.libzip.source.free(lzSource) throw error } } isSymbolicLink(index) { if (this.symlinkCount === 0) return false const attrs = this.libzip.file.getExternalAttributes( this.zip, index, 0, 0, this.libzip.uint08S, this.libzip.uint32S, ) if (attrs === -1) throw this.makeLibzipError(this.libzip.getError(this.zip)) const opsys = this.libzip.getValue(this.libzip.uint08S, `i8`) >>> 0 if (opsys !== this.libzip.ZIP_OPSYS_UNIX) return false const attributes = this.libzip.getValue(this.libzip.uint32S, `i32`) >>> 16 return (attributes & fs.constants.S_IFMT) === fs.constants.S_IFLNK } getFileSource(index, opts = { asyncDecompress: false }) { const cachedFileSource = this.fileSources.get(index) if (typeof cachedFileSource !== `undefined`) return cachedFileSource const stat = this.libzip.struct.statS() const rc = this.libzip.statIndex(this.zip, index, 0, 0, stat) if (rc === -1) throw this.makeLibzipError(this.libzip.getError(this.zip)) const size = this.libzip.struct.statCompSize(stat) const compressionMethod = this.libzip.struct.statCompMethod(stat) const buffer = this.libzip.malloc(size) try { const file = this.libzip.fopenIndex( this.zip, index, 0, this.libzip.ZIP_FL_COMPRESSED, ) if (file === 0) throw this.makeLibzipError(this.libzip.getError(this.zip)) try { const rc2 = this.libzip.fread(file, buffer, size, 0) if (rc2 === -1) throw this.makeLibzipError(this.libzip.file.getError(file)) else if (rc2 < size) throw new Error(`Incomplete read`) else if (rc2 > size) throw new Error(`Overread`) const memory = this.libzip.HEAPU8.subarray(buffer, buffer + size) const data = Buffer.from(memory) if (compressionMethod === 0) { this.fileSources.set(index, data) return data } else if (opts.asyncDecompress) { return new Promise((resolve, reject) => { zlib__default.default.inflateRaw(data, (error, result) => { if (error) { reject(error) } else { this.fileSources.set(index, result) resolve(result) } }) }) } else { const decompressedData = zlib__default.default.inflateRawSync(data) this.fileSources.set(index, decompressedData) return decompressedData } } finally { this.libzip.fclose(file) } } finally { this.libzip.free(buffer) } } async fchmodPromise(fd, mask) { return this.chmodPromise(this.fdToPath(fd, `fchmod`), mask) } fchmodSync(fd, mask) { return this.chmodSync(this.fdToPath(fd, `fchmodSync`), mask) } async chmodPromise(p, mask) { return this.chmodSync(p, mask) } chmodSync(p, mask) { if (this.readOnly) throw EROFS(`chmod '${p}'`) mask &= 493 const resolvedP = this.resolveFilename(`chmod '${p}'`, p, false) const entry = this.entries.get(resolvedP) if (typeof entry === `undefined`) throw new Error( `Assertion failed: The entry should have been registered (${resolvedP})`, ) const oldMod = this.getUnixMode(entry, fs.constants.S_IFREG | 0) const newMod = (oldMod & ~511) | mask const rc = this.libzip.file.setExternalAttributes( this.zip, entry, 0, 0, this.libzip.ZIP_OPSYS_UNIX, newMod << 16, ) if (rc === -1) { throw this.makeLibzipError(this.libzip.getError(this.zip)) } } async fchownPromise(fd, uid, gid) { return this.chownPromise(this.fdToPath(fd, `fchown`), uid, gid) } fchownSync(fd, uid, gid) { return this.chownSync(this.fdToPath(fd, `fchownSync`), uid, gid) } async chownPromise(p, uid, gid) { return this.chownSync(p, uid, gid) } chownSync(p, uid, gid) { throw new Error(`Unimplemented`) } async renamePromise(oldP, newP) { return this.renameSync(oldP, newP) } renameSync(oldP, newP) { throw new Error(`Unimplemented`) } async copyFilePromise(sourceP, destP, flags) { const { indexSource, indexDest, resolvedDestP } = this.prepareCopyFile( sourceP, destP, flags, ) const source = await this.getFileSource(indexSource, { asyncDecompress: true, }) const newIndex = this.setFileSource(resolvedDestP, source) if (newIndex !== indexDest) { this.registerEntry(resolvedDestP, newIndex) } } copyFileSync(sourceP, destP, flags = 0) { const { indexSource, indexDest, resolvedDestP } = this.prepareCopyFile( sourceP, destP, flags, ) const source = this.getFileSource(indexSource) const newIndex = this.setFileSource(resolvedDestP, source) if (newIndex !== indexDest) { this.registerEntry(resolvedDestP, newIndex) } } prepareCopyFile(sourceP, destP, flags = 0) { if (this.readOnly) throw EROFS(`copyfile '${sourceP} -> '${destP}'`) if ((flags & fs.constants.COPYFILE_FICLONE_FORCE) !== 0) throw ENOSYS( `unsupported clone operation`, `copyfile '${sourceP}' -> ${destP}'`, ) const resolvedSourceP = this.resolveFilename( `copyfile '${sourceP} -> ${destP}'`, sourceP, ) const indexSource = this.entries.get(resolvedSourceP) if (typeof indexSource === `undefined`) throw EINVAL(`copyfile '${sourceP}' -> '${destP}'`) const resolvedDestP = this.resolveFilename( `copyfile '${sourceP}' -> ${destP}'`, destP, ) const indexDest = this.entries.get(resolvedDestP) if ( (flags & (fs.constants.COPYFILE_EXCL | fs.constants.COPYFILE_FICLONE_FORCE)) !== 0 && typeof indexDest !== `undefined` ) throw EEXIST(`copyfile '${sourceP}' -> '${destP}'`) return { indexSource, resolvedDestP, indexDest, } } async appendFilePromise(p, content, opts) { if (this.readOnly) throw EROFS(`open '${p}'`) if (typeof opts === `undefined`) opts = { flag: `a` } else if (typeof opts === `string`) opts = { flag: `a`, encoding: opts } else if (typeof opts.flag === `undefined`) opts = { flag: `a`, ...opts } return this.writeFilePromise(p, content, opts) } appendFileSync(p, content, opts = {}) { if (this.readOnly) throw EROFS(`open '${p}'`) if (typeof opts === `undefined`) opts = { flag: `a` } else if (typeof opts === `string`) opts = { flag: `a`, encoding: opts } else if (typeof opts.flag === `undefined`) opts = { flag: `a`, ...opts } return this.writeFileSync(p, content, opts) } fdToPath(fd, reason) { const path = this.fds.get(fd)?.p if (typeof path === `undefined`) throw EBADF(reason) return path } async writeFilePromise(p, content, opts) { const { encoding, mode, index, resolvedP } = this.prepareWriteFile(p, opts) if ( index !== void 0 && typeof opts === `object` && opts.flag && opts.flag.includes(`a`) ) content = Buffer.concat([ await this.getFileSource(index, { asyncDecompress: true }), Buffer.from(content), ]) if (encoding !== null) content = content.toString(encoding) const newIndex = this.setFileSource(resolvedP, content) if (newIndex !== index) this.registerEntry(resolvedP, newIndex) if (mode !== null) { await this.chmodPromise(resolvedP, mode) } } writeFileSync(p, content, opts) { const { encoding, mode, index, resolvedP } = this.prepareWriteFile(p, opts) if ( index !== void 0 && typeof opts === `object` && opts.flag && opts.flag.includes(`a`) ) content = Buffer.concat([this.getFileSource(index), Buffer.from(content)]) if (encoding !== null) content = content.toString(encoding) const newIndex = this.setFileSource(resolvedP, content) if (newIndex !== index) this.registerEntry(resolvedP, newIndex) if (mode !== null) { this.chmodSync(resolvedP, mode) } } prepareWriteFile(p, opts) { if (typeof p === `number`) p = this.fdToPath(p, `read`) if (this.readOnly) throw EROFS(`open '${p}'`) const resolvedP = this.resolveFilename(`open '${p}'`, p) if (this.listings.has(resolvedP)) throw EISDIR(`open '${p}'`) let encoding = null, mode = null if (typeof opts === `string`) { encoding = opts } else if (typeof opts === `object`) { ;({ encoding = null, mode = null } = opts) } const index = this.entries.get(resolvedP) return { encoding, mode, resolvedP, index, } } async unlinkPromise(p) { return this.unlinkSync(p) } unlinkSync(p) { if (this.readOnly) throw EROFS(`unlink '${p}'`) const resolvedP = this.resolveFilename(`unlink '${p}'`, p) if (this.listings.has(resolvedP)) throw EISDIR(`unlink '${p}'`) const index = this.entries.get(resolvedP) if (typeof index === `undefined`) throw EINVAL(`unlink '${p}'`) this.deleteEntry(resolvedP, index) } async utimesPromise(p, atime, mtime) { return this.utimesSync(p, atime, mtime) } utimesSync(p, atime, mtime) { if (this.readOnly) throw EROFS(`utimes '${p}'`) const resolvedP = this.resolveFilename(`utimes '${p}'`, p) this.utimesImpl(resolvedP, mtime) } async lutimesPromise(p, atime, mtime) { return this.lutimesSync(p, atime, mtime) } lutimesSync(p, atime, mtime) { if (this.readOnly) throw EROFS(`lutimes '${p}'`) const resolvedP = this.resolveFilename(`utimes '${p}'`, p, false) this.utimesImpl(resolvedP, mtime) } utimesImpl(resolvedP, mtime) { if (this.listings.has(resolvedP)) { if (!this.entries.has(resolvedP)) this.hydrateDirectory(resolvedP) } const entry = this.entries.get(resolvedP) if (entry === void 0) throw new Error(`Unreachable`) const rc = this.libzip.file.setMtime( this.zip, entry, 0, toUnixTimestamp(mtime), 0, ) if (rc === -1) { throw this.makeLibzipError(this.libzip.getError(this.zip)) } } async mkdirPromise(p, opts) { return this.mkdirSync(p, opts) } mkdirSync(p, { mode = 493, recursive = false } = {}) { if (recursive) return this.mkdirpSync(p, { chmod: mode }) if (this.readOnly) throw EROFS(`mkdir '${p}'`) const resolvedP = this.resolveFilename(`mkdir '${p}'`, p) if (this.entries.has(resolvedP) || this.listings.has(resolvedP)) throw EEXIST(`mkdir '${p}'`) this.hydrateDirectory(resolvedP) this.chmodSync(resolvedP, mode) return void 0 } async rmdirPromise(p, opts) { return this.rmdirSync(p, opts) } rmdirSync(p, { recursive = false } = {}) { if (this.readOnly) throw EROFS(`rmdir '${p}'`) if (recursive) { this.removeSync(p) return } const resolvedP = this.resolveFilename(`rmdir '${p}'`, p) const directoryListing = this.listings.get(resolvedP) if (!directoryListing) throw ENOTDIR(`rmdir '${p}'`) if (directoryListing.size > 0) throw ENOTEMPTY(`rmdir '${p}'`) const index = this.entries.get(resolvedP) if (typeof index === `undefined`) throw EINVAL(`rmdir '${p}'`) this.deleteEntry(p, index) } async rmPromise(p, opts) { return this.rmSync(p, opts) } rmSync(p, { recursive = false } = {}) { if (this.readOnly) throw EROFS(`rm '${p}'`) if (recursive) { this.removeSync(p) return } const resolvedP = this.resolveFilename(`rm '${p}'`, p) const directoryListing = this.listings.get(resolvedP) if (!directoryListing) throw ENOTDIR(`rm '${p}'`) if (directoryListing.size > 0) throw ENOTEMPTY(`rm '${p}'`) const index = this.entries.get(resolvedP) if (typeof index === `undefined`) throw EINVAL(`rm '${p}'`) this.deleteEntry(p, index) } hydrateDirectory(resolvedP) { const index = this.libzip.dir.add( this.zip, ppath.relative(PortablePath.root, resolvedP), ) if (index === -1) throw this.makeLibzipError(this.libzip.getError(this.zip)) this.registerListing(resolvedP) this.registerEntry(resolvedP, index) return index } async linkPromise(existingP, newP) { return this.linkSync(existingP, newP) } linkSync(existingP, newP) { throw EOPNOTSUPP(`link '${existingP}' -> '${newP}'`) } async symlinkPromise(target, p) { return this.symlinkSync(target, p) } symlinkSync(target, p) { if (this.readOnly) throw EROFS(`symlink '${target}' -> '${p}'`) const resolvedP = this.resolveFilename(`symlink '${target}' -> '${p}'`, p) if (this.listings.has(resolvedP)) throw EISDIR(`symlink '${target}' -> '${p}'`) if (this.entries.has(resolvedP)) throw EEXIST(`symlink '${target}' -> '${p}'`) const index = this.setFileSource(resolvedP, target) this.registerEntry(resolvedP, index) const rc = this.libzip.file.setExternalAttributes( this.zip, index, 0, 0, this.libzip.ZIP_OPSYS_UNIX, (fs.constants.S_IFLNK | 511) << 16, ) if (rc === -1) throw this.makeLibzipError(this.libzip.getError(this.zip)) this.symlinkCount += 1 } async readFilePromise(p, encoding) { if (typeof encoding === `object`) encoding = encoding ? encoding.encoding : void 0 const data = await this.readFileBuffer(p, { asyncDecompress: true }) return encoding ? data.toString(encoding) : data } readFileSync(p, encoding) { if (typeof encoding === `object`) encoding = encoding ? encoding.encoding : void 0 const data = this.readFileBuffer(p) return encoding ? data.toString(encoding) : data } readFileBuffer(p, opts = { asyncDecompress: false }) { if (typeof p === `number`) p = this.fdToPath(p, `read`) const resolvedP = this.resolveFilename(`open '${p}'`, p) if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) throw ENOENT(`open '${p}'`) if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) throw ENOTDIR(`open '${p}'`) if (this.listings.has(resolvedP)) throw EISDIR(`read`) const entry = this.entries.get(resolvedP) if (entry === void 0) throw new Error(`Unreachable`) return this.getFileSource(entry, opts) } async readdirPromise(p, opts) { return this.readdirSync(p, opts) } readdirSync(p, opts) { const resolvedP = this.resolveFilename(`scandir '${p}'`, p) if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) throw ENOENT(`scandir '${p}'`) const directoryListing = this.listings.get(resolvedP) if (!directoryListing) throw ENOTDIR(`scandir '${p}'`) if (opts?.recursive) { if (opts?.withFileTypes) { const entries = Array.from(directoryListing, name => { return Object.assign(this.statImpl(`lstat`, ppath.join(p, name)), { name, path: PortablePath.dot, }) }) for (const entry of entries) { if (!entry.isDirectory()) continue const subPath = ppath.join(entry.path, entry.name) const subListing = this.listings.get(ppath.join(resolvedP, subPath)) for (const child of subListing) { entries.push( Object.assign( this.statImpl(`lstat`, ppath.join(p, subPath, child)), { name: child, path: subPath, }, ), ) } } return entries } else { const entries = [...directoryListing] for (const subPath of entries) { const subListing = this.listings.get(ppath.join(resolvedP, subPath)) if (typeof subListing === `undefined`) continue for (const child of subListing) { entries.push(ppath.join(subPath, child)) } } return entries } } else if (opts?.withFileTypes) { return Array.from(directoryListing, name => { return Object.assign(this.statImpl(`lstat`, ppath.join(p, name)), { name, path: void 0, }) }) } else { return [...directoryListing] } } async readlinkPromise(p) { const entry = this.prepareReadlink(p) return ( await this.getFileSource(entry, { asyncDecompress: true }) ).toString() } readlinkSync(p) { const entry = this.prepareReadlink(p) return this.getFileSource(entry).toString() } prepareReadlink(p) { const resolvedP = this.resolveFilename(`readlink '${p}'`, p, false) if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) throw ENOENT(`readlink '${p}'`) if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) throw ENOTDIR(`open '${p}'`) if (this.listings.has(resolvedP)) throw EINVAL(`readlink '${p}'`) const entry = this.entries.get(resolvedP) if (entry === void 0) throw new Error(`Unreachable`) if (!this.isSymbolicLink(entry)) throw EINVAL(`readlink '${p}'`) return entry } async truncatePromise(p, len = 0) { const resolvedP = this.resolveFilename(`open '${p}'`, p) const index = this.entries.get(resolvedP) if (typeof index === `undefined`) throw EINVAL(`open '${p}'`) const source = await this.getFileSource(index, { asyncDecompress: true }) const truncated = Buffer.alloc(len, 0) source.copy(truncated) return await this.writeFilePromise(p, truncated) } truncateSync(p, len = 0) { const resolvedP = this.resolveFilename(`open '${p}'`, p) const index = this.entries.get(resolvedP) if (typeof index === `undefined`) throw EINVAL(`open '${p}'`) const source = this.getFileSource(index) const truncated = Buffer.alloc(len, 0) source.copy(truncated) return this.writeFileSync(p, truncated) } async ftruncatePromise(fd, len) { return this.truncatePromise(this.fdToPath(fd, `ftruncate`), len) } ftruncateSync(fd, len) { return this.truncateSync(this.fdToPath(fd, `ftruncateSync`), len) } watch(p, a, b) { let persistent switch (typeof a) { case `function`: case `string`: case `undefined`: { persistent = true } break default: { ;({ persistent = true } = a) } break } if (!persistent) return { on: () => {}, close: () => {} } const interval = setInterval(() => {}, 24 * 60 * 60 * 1e3) return { on: () => {}, close: () => { clearInterval(interval) }, } } watchFile(p, a, b) { const resolvedP = ppath.resolve(PortablePath.root, p) return watchFile(this, resolvedP, a, b) } unwatchFile(p, cb) { const resolvedP = ppath.resolve(PortablePath.root, p) return unwatchFile(this, resolvedP, cb) } } setFactory(() => { const emZip = createModule() return makeInterface(emZip) }) var ErrorCode = /* @__PURE__ */ (ErrorCode2 => { ErrorCode2['API_ERROR'] = `API_ERROR` ErrorCode2['BUILTIN_NODE_RESOLUTION_FAILED'] = `BUILTIN_NODE_RESOLUTION_FAILED` ErrorCode2['EXPORTS_RESOLUTION_FAILED'] = `EXPORTS_RESOLUTION_FAILED` ErrorCode2['MISSING_DEPENDENCY'] = `MISSING_DEPENDENCY` ErrorCode2['MISSING_PEER_DEPENDENCY'] = `MISSING_PEER_DEPENDENCY` ErrorCode2['QUALIFIED_PATH_RESOLUTION_FAILED'] = `QUALIFIED_PATH_RESOLUTION_FAILED` ErrorCode2['INTERNAL'] = `INTERNAL` ErrorCode2['UNDECLARED_DEPENDENCY'] = `UNDECLARED_DEPENDENCY` ErrorCode2['UNSUPPORTED'] = `UNSUPPORTED` return ErrorCode2 })(ErrorCode || {}) const MODULE_NOT_FOUND_ERRORS = /* @__PURE__ */ new Set([ 'BUILTIN_NODE_RESOLUTION_FAILED' /* BUILTIN_NODE_RESOLUTION_FAILED */, 'MISSING_DEPENDENCY' /* MISSING_DEPENDENCY */, 'MISSING_PEER_DEPENDENCY' /* MISSING_PEER_DEPENDENCY */, 'QUALIFIED_PATH_RESOLUTION_FAILED' /* QUALIFIED_PATH_RESOLUTION_FAILED */, 'UNDECLARED_DEPENDENCY' /* UNDECLARED_DEPENDENCY */, ]) function makeError(pnpCode, message, data = {}, code) { code ??= MODULE_NOT_FOUND_ERRORS.has(pnpCode) ? `MODULE_NOT_FOUND` : pnpCode const propertySpec = { configurable: true, writable: true, enumerable: false, } return Object.defineProperties(new Error(message), { code: { ...propertySpec, value: code, }, pnpCode: { ...propertySpec, value: pnpCode, }, data: { ...propertySpec, value: data, }, }) } function getIssuerModule(parent) { let issuer = parent while ( issuer && (issuer.id === `[eval]` || issuer.id === `` || !issuer.filename) ) issuer = issuer.parent return issuer || null } function getPathForDisplay(p) { return npath.normalize(npath.fromPortablePath(p)) } const [major, minor] = process.versions.node .split(`.`) .map(value => parseInt(value, 10)) const WATCH_MODE_MESSAGE_USES_ARRAYS = major > 19 || (major === 19 && minor >= 2) || (major === 18 && minor >= 13) function readPackageScope(checkPath) { const rootSeparatorIndex = checkPath.indexOf(npath.sep) let separatorIndex do { separatorIndex = checkPath.lastIndexOf(npath.sep) checkPath = checkPath.slice(0, separatorIndex) if (checkPath.endsWith(`${npath.sep}node_modules`)) return false const pjson = readPackage(checkPath + npath.sep) if (pjson) { return { data: pjson, path: checkPath, } } } while (separatorIndex > rootSeparatorIndex) return false } function readPackage(requestPath) { const jsonPath = npath.resolve(requestPath, `package.json`) if (!fs__default.default.existsSync(jsonPath)) return null return JSON.parse(fs__default.default.readFileSync(jsonPath, `utf8`)) } function ERR_REQUIRE_ESM(filename, parentPath = null) { const basename = parentPath && path__default.default.basename(filename) === path__default.default.basename(parentPath) ? filename : path__default.default.basename(filename) const msg = `require() of ES Module ${filename}${parentPath ? ` from ${parentPath}` : ``} not supported. Instead change the require of ${basename} in ${parentPath} to a dynamic import() which is available in all CommonJS modules.` const err = new Error(msg) err.code = `ERR_REQUIRE_ESM` return err } function reportRequiredFilesToWatchMode(files) { if (process.env.WATCH_REPORT_DEPENDENCIES && process.send) { files = files.map(filename => npath.fromPortablePath( VirtualFS.resolveVirtual(npath.toPortablePath(filename)), ), ) if (WATCH_MODE_MESSAGE_USES_ARRAYS) { process.send({ 'watch:require': files }) } else { for (const filename of files) { process.send({ 'watch:require': filename }) } } } } function applyPatch(pnpapi, opts) { let enableNativeHooks = true process.versions.pnp = String(pnpapi.VERSIONS.std) const moduleExports = require$$0__default.default moduleExports.findPnpApi = lookupSource => { const lookupPath = lookupSource instanceof URL ? url.fileURLToPath(lookupSource) : lookupSource const apiPath = opts.manager.findApiPathFor(lookupPath) if (apiPath === null) return null const apiEntry = opts.manager.getApiEntry(apiPath, true) return apiEntry.instance.findPackageLocator(lookupPath) ? apiEntry.instance : null } function getRequireStack(parent) { const requireStack = [] for (let cursor = parent; cursor; cursor = cursor.parent) requireStack.push(cursor.filename || cursor.id) return requireStack } const originalModuleLoad = require$$0.Module._load require$$0.Module._load = function (request, parent, isMain) { if (request === `pnpapi`) { const parentApiPath = opts.manager.getApiPathFromParent(parent) if (parentApiPath) { return opts.manager.getApiEntry(parentApiPath, true).instance } } return originalModuleLoad.call(require$$0.Module, request, parent, isMain) } function getIssuerSpecsFromPaths(paths) { return paths.map(path => ({ apiPath: opts.manager.findApiPathFor(path), path, module: null, })) } function getIssuerSpecsFromModule(module) { if ( module && module.id !== `` && module.id !== `internal/preload` && !module.parent && !module.filename && module.paths.length > 0 ) { return [ { apiPath: opts.manager.findApiPathFor(module.paths[0]), path: module.paths[0], module, }, ] } const issuer = getIssuerModule(module) if (issuer !== null) { const path = npath.dirname(issuer.filename) const apiPath = opts.manager.getApiPathFromParent(issuer) return [{ apiPath, path, module }] } else { const path = process.cwd() const apiPath = opts.manager.findApiPathFor(npath.join(path, `[file]`)) ?? opts.manager.getApiPathFromParent(null) return [{ apiPath, path, module }] } } function makeFakeParent(path) { const fakeParent = new require$$0.Module(``) const fakeFilePath = npath.join(path, `[file]`) fakeParent.paths = require$$0.Module._nodeModulePaths(fakeFilePath) return fakeParent } const pathRegExp = /^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:@[^/]+\/)?[^/]+)\/*(.*|)$/ const originalModuleResolveFilename = require$$0.Module._resolveFilename require$$0.Module._resolveFilename = function ( request, parent, isMain, options, ) { if (require$$0.isBuiltin(request)) return request if (!enableNativeHooks) return originalModuleResolveFilename.call( require$$0.Module, request, parent, isMain, options, ) if (options && options.plugnplay === false) { const { plugnplay, ...forwardedOptions } = options try { enableNativeHooks = false return originalModuleResolveFilename.call( require$$0.Module, request, parent, isMain, forwardedOptions, ) } finally { enableNativeHooks = true } } if (options) { const optionNames = new Set(Object.keys(options)) optionNames.delete(`paths`) optionNames.delete(`plugnplay`) if (optionNames.size > 0) { throw makeError( ErrorCode.UNSUPPORTED, `Some options passed to require() aren't supported by PnP yet (${Array.from(optionNames).join(`, `)})`, ) } } const issuerSpecs = options && options.paths ? getIssuerSpecsFromPaths(options.paths) : getIssuerSpecsFromModule(parent) if (request.match(pathRegExp) === null) { const parentDirectory = parent?.filename != null ? npath.dirname(parent.filename) : null const absoluteRequest = npath.isAbsolute(request) ? request : parentDirectory !== null ? npath.resolve(parentDirectory, request) : null if (absoluteRequest !== null) { const apiPath = parent && parentDirectory === npath.dirname(absoluteRequest) ? opts.manager.getApiPathFromParent(parent) : opts.manager.findApiPathFor(absoluteRequest) if (apiPath !== null) { issuerSpecs.unshift({ apiPath, path: parentDirectory, module: null, }) } } } let firstError for (const { apiPath, path, module } of issuerSpecs) { let resolution const issuerApi = apiPath !== null ? opts.manager.getApiEntry(apiPath, true).instance : null try { if (issuerApi !== null) { resolution = issuerApi.resolveRequest( request, path !== null ? `${path}/` : null, ) } else { if (path === null) throw new Error(`Assertion failed: Expected the path to be set`) resolution = originalModuleResolveFilename.call( require$$0.Module, request, module || makeFakeParent(path), isMain, ) } } catch (error) { firstError = firstError || error continue } if (resolution !== null) { return resolution } } const requireStack = getRequireStack(parent) Object.defineProperty(firstError, `requireStack`, { configurable: true, writable: true, enumerable: false, value: requireStack, }) if (requireStack.length > 0) firstError.message += ` Require stack: - ${requireStack.join(` - `)}` if (typeof firstError.pnpCode === `string`) Error.captureStackTrace(firstError) throw firstError } const originalFindPath = require$$0.Module._findPath require$$0.Module._findPath = function (request, paths, isMain) { if (request === `pnpapi`) return false if (!enableNativeHooks) return originalFindPath.call(require$$0.Module, request, paths, isMain) const isAbsolute = npath.isAbsolute(request) if (isAbsolute) paths = [``] else if (!paths || paths.length === 0) return false for (const path of paths) { let resolution try { const pnpApiPath = opts.manager.findApiPathFor( isAbsolute ? request : path, ) if (pnpApiPath !== null) { const api = opts.manager.getApiEntry(pnpApiPath, true).instance resolution = api.resolveRequest(request, path) || false } else { resolution = originalFindPath.call( require$$0.Module, request, [path], isMain, ) } } catch (error) { continue } if (resolution) { return resolution } } return false } const originalExtensionJSFunction = require$$0.Module._extensions[`.js`] require$$0.Module._extensions[`.js`] = function (module, filename) { if (filename.endsWith(`.js`)) { const pkg = readPackageScope(filename) if (pkg && pkg.data?.type === `module`) { const err = ERR_REQUIRE_ESM(filename, module.parent?.filename) Error.captureStackTrace(err) throw err } } originalExtensionJSFunction.call(this, module, filename) } const originalDlopen = process.dlopen process.dlopen = function (...args) { const [module, filename, ...rest] = args return originalDlopen.call( this, module, npath.fromPortablePath( VirtualFS.resolveVirtual(npath.toPortablePath(filename)), ), ...rest, ) } const originalEmit = process.emit process.emit = function (name, data, ...args) { if ( name === `warning` && typeof data === `object` && data.name === `ExperimentalWarning` && (data.message.includes(`--experimental-loader`) || data.message.includes(`Custom ESM Loaders is an experimental feature`)) ) return false return originalEmit.apply(process, arguments) } patchFs(fs__default.default, new PosixFS(opts.fakeFs)) } function hydrateRuntimeState(data, { basePath }) { const portablePath = npath.toPortablePath(basePath) const absolutePortablePath = ppath.resolve(portablePath) const ignorePattern = data.ignorePatternData !== null ? new RegExp(data.ignorePatternData) : null const packageLocatorsByLocations = /* @__PURE__ */ new Map() const packageRegistry = new Map( data.packageRegistryData.map(([packageName, packageStoreData]) => { return [ packageName, new Map( packageStoreData.map(([packageReference, packageInformationData]) => { if ((packageName === null) !== (packageReference === null)) throw new Error( `Assertion failed: The name and reference should be null, or neither should`, ) const discardFromLookup = packageInformationData.discardFromLookup ?? false const packageLocator = { name: packageName, reference: packageReference, } const entry = packageLocatorsByLocations.get( packageInformationData.packageLocation, ) if (!entry) { packageLocatorsByLocations.set( packageInformationData.packageLocation, { locator: packageLocator, discardFromLookup }, ) } else { entry.discardFromLookup = entry.discardFromLookup && discardFromLookup if (!discardFromLookup) { entry.locator = packageLocator } } let resolvedPackageLocation = null return [ packageReference, { packageDependencies: new Map( packageInformationData.packageDependencies, ), packagePeers: new Set(packageInformationData.packagePeers), linkType: packageInformationData.linkType, discardFromLookup, get packageLocation() { return ( resolvedPackageLocation || (resolvedPackageLocation = ppath.join( absolutePortablePath, packageInformationData.packageLocation, )) ) }, }, ] }), ), ] }), ) const fallbackExclusionList = new Map( data.fallbackExclusionList.map(([packageName, packageReferences]) => { return [packageName, new Set(packageReferences)] }), ) const fallbackPool = new Map(data.fallbackPool) const dependencyTreeRoots = data.dependencyTreeRoots const enableTopLevelFallback = data.enableTopLevelFallback return { basePath: portablePath, dependencyTreeRoots, enableTopLevelFallback, fallbackExclusionList, fallbackPool, ignorePattern, packageLocatorsByLocations, packageRegistry, } } const ArrayIsArray = Array.isArray const JSONStringify = JSON.stringify const ObjectGetOwnPropertyNames = Object.getOwnPropertyNames const ObjectPrototypeHasOwnProperty = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop) const RegExpPrototypeExec = (obj, string) => RegExp.prototype.exec.call(obj, string) const RegExpPrototypeSymbolReplace = (obj, ...rest) => RegExp.prototype[Symbol.replace].apply(obj, rest) const StringPrototypeEndsWith = (str, ...rest) => String.prototype.endsWith.apply(str, rest) const StringPrototypeIncludes = (str, ...rest) => String.prototype.includes.apply(str, rest) const StringPrototypeLastIndexOf = (str, ...rest) => String.prototype.lastIndexOf.apply(str, rest) const StringPrototypeIndexOf = (str, ...rest) => String.prototype.indexOf.apply(str, rest) const StringPrototypeReplace = (str, ...rest) => String.prototype.replace.apply(str, rest) const StringPrototypeSlice = (str, ...rest) => String.prototype.slice.apply(str, rest) const StringPrototypeStartsWith = (str, ...rest) => String.prototype.startsWith.apply(str, rest) const SafeMap = Map const JSONParse = JSON.parse function createErrorType(code, messageCreator, errorType) { return class extends errorType { constructor(...args) { super(messageCreator(...args)) this.code = code this.name = `${errorType.name} [${code}]` } } } const ERR_PACKAGE_IMPORT_NOT_DEFINED = createErrorType( `ERR_PACKAGE_IMPORT_NOT_DEFINED`, (specifier, packagePath, base) => { return `Package import specifier "${specifier}" is not defined${packagePath ? ` in package ${packagePath}package.json` : ``} imported from ${base}` }, TypeError, ) const ERR_INVALID_MODULE_SPECIFIER = createErrorType( `ERR_INVALID_MODULE_SPECIFIER`, (request, reason, base = void 0) => { return `Invalid module "${request}" ${reason}${base ? ` imported from ${base}` : ``}` }, TypeError, ) const ERR_INVALID_PACKAGE_TARGET = createErrorType( `ERR_INVALID_PACKAGE_TARGET`, (pkgPath, key, target, isImport = false, base = void 0) => { const relError = typeof target === `string` && !isImport && target.length && !StringPrototypeStartsWith(target, `./`) if (key === `.`) { assert__default.default(isImport === false) return `Invalid "exports" main target ${JSONStringify(target)} defined in the package config ${pkgPath}package.json${base ? ` imported from ${base}` : ``}${relError ? `; targets must start with "./"` : ``}` } return `Invalid "${isImport ? `imports` : `exports`}" target ${JSONStringify( target, )} defined for '${key}' in the package config ${pkgPath}package.json${base ? ` imported from ${base}` : ``}${relError ? `; targets must start with "./"` : ``}` }, Error, ) const ERR_INVALID_PACKAGE_CONFIG = createErrorType( `ERR_INVALID_PACKAGE_CONFIG`, (path, base, message) => { return `Invalid package config ${path}${base ? ` while importing ${base}` : ``}${message ? `. ${message}` : ``}` }, Error, ) const ERR_PACKAGE_PATH_NOT_EXPORTED = createErrorType( 'ERR_PACKAGE_PATH_NOT_EXPORTED', (pkgPath, subpath, base = void 0) => { if (subpath === '.') return `No "exports" main defined in ${pkgPath}package.json${base ? ` imported from ${base}` : ''}` return `Package subpath '${subpath}' is not defined by "exports" in ${pkgPath}package.json${base ? ` imported from ${base}` : ''}` }, Error, ) function filterOwnProperties(source, keys) { const filtered = /* @__PURE__ */ Object.create(null) for (let i = 0; i < keys.length; i++) { const key = keys[i] if (ObjectPrototypeHasOwnProperty(source, key)) { filtered[key] = source[key] } } return filtered } const packageJSONCache = new SafeMap() function getPackageConfig(path, specifier, base, readFileSyncFn) { const existing = packageJSONCache.get(path) if (existing !== void 0) { return existing } const source = readFileSyncFn(path) if (source === void 0) { const packageConfig2 = { pjsonPath: path, exists: false, main: void 0, name: void 0, type: 'none', exports: void 0, imports: void 0, } packageJSONCache.set(path, packageConfig2) return packageConfig2 } let packageJSON try { packageJSON = JSONParse(source) } catch (error) { throw new ERR_INVALID_PACKAGE_CONFIG( path, (base ? `"${specifier}" from ` : '') + url.fileURLToPath(base || specifier), error.message, ) } let { imports, main, name, type } = filterOwnProperties(packageJSON, [ 'imports', 'main', 'name', 'type', ]) const exports = ObjectPrototypeHasOwnProperty(packageJSON, 'exports') ? packageJSON.exports : void 0 if (typeof imports !== 'object' || imports === null) { imports = void 0 } if (typeof main !== 'string') { main = void 0 } if (typeof name !== 'string') { name = void 0 } if (type !== 'module' && type !== 'commonjs') { type = 'none' } const packageConfig = { pjsonPath: path, exists: true, main, name, type, exports, imports, } packageJSONCache.set(path, packageConfig) return packageConfig } function getPackageScopeConfig(resolved, readFileSyncFn) { let packageJSONUrl = new URL('./package.json', resolved) while (true) { const packageJSONPath2 = packageJSONUrl.pathname if ( StringPrototypeEndsWith(packageJSONPath2, 'node_modules/package.json') ) { break } const packageConfig2 = getPackageConfig( url.fileURLToPath(packageJSONUrl), resolved, void 0, readFileSyncFn, ) if (packageConfig2.exists) { return packageConfig2 } const lastPackageJSONUrl = packageJSONUrl packageJSONUrl = new URL('../package.json', packageJSONUrl) if (packageJSONUrl.pathname === lastPackageJSONUrl.pathname) { break } } const packageJSONPath = url.fileURLToPath(packageJSONUrl) const packageConfig = { pjsonPath: packageJSONPath, exists: false, main: void 0, name: void 0, type: 'none', exports: void 0, imports: void 0, } packageJSONCache.set(packageJSONPath, packageConfig) return packageConfig } function throwImportNotDefined(specifier, packageJSONUrl, base) { throw new ERR_PACKAGE_IMPORT_NOT_DEFINED( specifier, packageJSONUrl && url.fileURLToPath(new URL('.', packageJSONUrl)), url.fileURLToPath(base), ) } function throwInvalidSubpath(subpath, packageJSONUrl, internal, base) { const reason = `request is not a valid subpath for the "${internal ? 'imports' : 'exports'}" resolution of ${url.fileURLToPath(packageJSONUrl)}` throw new ERR_INVALID_MODULE_SPECIFIER( subpath, reason, base && url.fileURLToPath(base), ) } function throwInvalidPackageTarget( subpath, target, packageJSONUrl, internal, base, ) { if (typeof target === 'object' && target !== null) { target = JSONStringify(target, null, '') } else { target = `${target}` } throw new ERR_INVALID_PACKAGE_TARGET( url.fileURLToPath(new URL('.', packageJSONUrl)), subpath, target, internal, base && url.fileURLToPath(base), ) } const invalidSegmentRegEx = /(^|\\|\/)((\.|%2e)(\.|%2e)?|(n|%6e|%4e)(o|%6f|%4f)(d|%64|%44)(e|%65|%45)(_|%5f)(m|%6d|%4d)(o|%6f|%4f)(d|%64|%44)(u|%75|%55)(l|%6c|%4c)(e|%65|%45)(s|%73|%53))(\\|\/|$)/i const patternRegEx = /\*/g function resolvePackageTargetString( target, subpath, match, packageJSONUrl, base, pattern, internal, conditions, ) { if (subpath !== '' && !pattern && target[target.length - 1] !== '/') throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base) if (!StringPrototypeStartsWith(target, './')) { if ( internal && !StringPrototypeStartsWith(target, '../') && !StringPrototypeStartsWith(target, '/') ) { let isURL = false try { new URL(target) isURL = true } catch {} if (!isURL) { const exportTarget = pattern ? RegExpPrototypeSymbolReplace(patternRegEx, target, () => subpath) : target + subpath return exportTarget } } throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base) } if ( RegExpPrototypeExec( invalidSegmentRegEx, StringPrototypeSlice(target, 2), ) !== null ) throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base) const resolved = new URL(target, packageJSONUrl) const resolvedPath = resolved.pathname const packagePath = new URL('.', packageJSONUrl).pathname if (!StringPrototypeStartsWith(resolvedPath, packagePath)) throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base) if (subpath === '') return resolved if (RegExpPrototypeExec(invalidSegmentRegEx, subpath) !== null) { const request = pattern ? StringPrototypeReplace(match, '*', () => subpath) : match + subpath throwInvalidSubpath(request, packageJSONUrl, internal, base) } if (pattern) { return new URL( RegExpPrototypeSymbolReplace(patternRegEx, resolved.href, () => subpath), ) } return new URL(subpath, resolved) } function isArrayIndex(key) { const keyNum = +key if (`${keyNum}` !== key) return false return keyNum >= 0 && keyNum < 4294967295 } function resolvePackageTarget( packageJSONUrl, target, subpath, packageSubpath, base, pattern, internal, conditions, ) { if (typeof target === 'string') { return resolvePackageTargetString( target, subpath, packageSubpath, packageJSONUrl, base, pattern, internal, ) } else if (ArrayIsArray(target)) { if (target.length === 0) { return null } let lastException for (let i = 0; i < target.length; i++) { const targetItem = target[i] let resolveResult try { resolveResult = resolvePackageTarget( packageJSONUrl, targetItem, subpath, packageSubpath, base, pattern, internal, conditions, ) } catch (e) { lastException = e if (e.code === 'ERR_INVALID_PACKAGE_TARGET') { continue } throw e } if (resolveResult === void 0) { continue } if (resolveResult === null) { lastException = null continue } return resolveResult } if (lastException === void 0 || lastException === null) return lastException throw lastException } else if (typeof target === 'object' && target !== null) { const keys = ObjectGetOwnPropertyNames(target) for (let i = 0; i < keys.length; i++) { const key = keys[i] if (isArrayIndex(key)) { throw new ERR_INVALID_PACKAGE_CONFIG( url.fileURLToPath(packageJSONUrl), base, '"exports" cannot contain numeric property keys.', ) } } for (let i = 0; i < keys.length; i++) { const key = keys[i] if (key === 'default' || conditions.has(key)) { const conditionalTarget = target[key] const resolveResult = resolvePackageTarget( packageJSONUrl, conditionalTarget, subpath, packageSubpath, base, pattern, internal, conditions, ) if (resolveResult === void 0) continue return resolveResult } } return void 0 } else if (target === null) { return null } throwInvalidPackageTarget( packageSubpath, target, packageJSONUrl, internal, base, ) } function patternKeyCompare(a, b) { const aPatternIndex = StringPrototypeIndexOf(a, '*') const bPatternIndex = StringPrototypeIndexOf(b, '*') const baseLenA = aPatternIndex === -1 ? a.length : aPatternIndex + 1 const baseLenB = bPatternIndex === -1 ? b.length : bPatternIndex + 1 if (baseLenA > baseLenB) return -1 if (baseLenB > baseLenA) return 1 if (aPatternIndex === -1) return 1 if (bPatternIndex === -1) return -1 if (a.length > b.length) return -1 if (b.length > a.length) return 1 return 0 } function isConditionalExportsMainSugar(exports, packageJSONUrl, base) { if (typeof exports === 'string' || ArrayIsArray(exports)) return true if (typeof exports !== 'object' || exports === null) return false const keys = ObjectGetOwnPropertyNames(exports) let isConditionalSugar = false let i = 0 for (let j = 0; j < keys.length; j++) { const key = keys[j] const curIsConditionalSugar = key === '' || key[0] !== '.' if (i++ === 0) { isConditionalSugar = curIsConditionalSugar } else if (isConditionalSugar !== curIsConditionalSugar) { throw new ERR_INVALID_PACKAGE_CONFIG( url.fileURLToPath(packageJSONUrl), base, `"exports" cannot contain some keys starting with '.' and some not. The exports object must either be an object of package subpath keys or an object of main entry condition name keys only.`, ) } } return isConditionalSugar } function throwExportsNotFound(subpath, packageJSONUrl, base) { throw new ERR_PACKAGE_PATH_NOT_EXPORTED( url.fileURLToPath(new URL('.', packageJSONUrl)), subpath, base && url.fileURLToPath(base), ) } const emittedPackageWarnings = /* @__PURE__ */ new Set() function emitTrailingSlashPatternDeprecation(match, pjsonUrl, base) { const pjsonPath = url.fileURLToPath(pjsonUrl) if (emittedPackageWarnings.has(pjsonPath + '|' + match)) return emittedPackageWarnings.add(pjsonPath + '|' + match) process.emitWarning( `Use of deprecated trailing slash pattern mapping "${match}" in the "exports" field module resolution of the package at ${pjsonPath}${base ? ` imported from ${url.fileURLToPath(base)}` : ''}. Mapping specifiers ending in "/" is no longer supported.`, 'DeprecationWarning', 'DEP0155', ) } function packageExportsResolve({ packageJSONUrl, packageSubpath, exports, base, conditions, }) { if (isConditionalExportsMainSugar(exports, packageJSONUrl, base)) exports = { '.': exports } if ( ObjectPrototypeHasOwnProperty(exports, packageSubpath) && !StringPrototypeIncludes(packageSubpath, '*') && !StringPrototypeEndsWith(packageSubpath, '/') ) { const target = exports[packageSubpath] const resolveResult = resolvePackageTarget( packageJSONUrl, target, '', packageSubpath, base, false, false, conditions, ) if (resolveResult == null) { throwExportsNotFound(packageSubpath, packageJSONUrl, base) } return resolveResult } let bestMatch = '' let bestMatchSubpath const keys = ObjectGetOwnPropertyNames(exports) for (let i = 0; i < keys.length; i++) { const key = keys[i] const patternIndex = StringPrototypeIndexOf(key, '*') if ( patternIndex !== -1 && StringPrototypeStartsWith( packageSubpath, StringPrototypeSlice(key, 0, patternIndex), ) ) { if (StringPrototypeEndsWith(packageSubpath, '/')) emitTrailingSlashPatternDeprecation( packageSubpath, packageJSONUrl, base, ) const patternTrailer = StringPrototypeSlice(key, patternIndex + 1) if ( packageSubpath.length >= key.length && StringPrototypeEndsWith(packageSubpath, patternTrailer) && patternKeyCompare(bestMatch, key) === 1 && StringPrototypeLastIndexOf(key, '*') === patternIndex ) { bestMatch = key bestMatchSubpath = StringPrototypeSlice( packageSubpath, patternIndex, packageSubpath.length - patternTrailer.length, ) } } } if (bestMatch) { const target = exports[bestMatch] const resolveResult = resolvePackageTarget( packageJSONUrl, target, bestMatchSubpath, bestMatch, base, true, false, conditions, ) if (resolveResult == null) { throwExportsNotFound(packageSubpath, packageJSONUrl, base) } return resolveResult } throwExportsNotFound(packageSubpath, packageJSONUrl, base) } function packageImportsResolve({ name, base, conditions, readFileSyncFn }) { if ( name === '#' || StringPrototypeStartsWith(name, '#/') || StringPrototypeEndsWith(name, '/') ) { const reason = 'is not a valid internal imports specifier name' throw new ERR_INVALID_MODULE_SPECIFIER( name, reason, url.fileURLToPath(base), ) } let packageJSONUrl const packageConfig = getPackageScopeConfig(base, readFileSyncFn) if (packageConfig.exists) { packageJSONUrl = url.pathToFileURL(packageConfig.pjsonPath) const imports = packageConfig.imports if (imports) { if ( ObjectPrototypeHasOwnProperty(imports, name) && !StringPrototypeIncludes(name, '*') ) { const resolveResult = resolvePackageTarget( packageJSONUrl, imports[name], '', name, base, false, true, conditions, ) if (resolveResult != null) { return resolveResult } } else { let bestMatch = '' let bestMatchSubpath const keys = ObjectGetOwnPropertyNames(imports) for (let i = 0; i < keys.length; i++) { const key = keys[i] const patternIndex = StringPrototypeIndexOf(key, '*') if ( patternIndex !== -1 && StringPrototypeStartsWith( name, StringPrototypeSlice(key, 0, patternIndex), ) ) { const patternTrailer = StringPrototypeSlice(key, patternIndex + 1) if ( name.length >= key.length && StringPrototypeEndsWith(name, patternTrailer) && patternKeyCompare(bestMatch, key) === 1 && StringPrototypeLastIndexOf(key, '*') === patternIndex ) { bestMatch = key bestMatchSubpath = StringPrototypeSlice( name, patternIndex, name.length - patternTrailer.length, ) } } } if (bestMatch) { const target = imports[bestMatch] const resolveResult = resolvePackageTarget( packageJSONUrl, target, bestMatchSubpath, bestMatch, base, true, true, conditions, ) if (resolveResult != null) { return resolveResult } } } } } throwImportNotDefined(name, packageJSONUrl, base) } const flagSymbol = Symbol('arg flag') class ArgError extends Error { constructor(msg, code) { super(msg) this.name = 'ArgError' this.code = code Object.setPrototypeOf(this, ArgError.prototype) } } function arg( opts, { argv = process.argv.slice(2), permissive = false, stopAtPositional = false, } = {}, ) { if (!opts) { throw new ArgError( 'argument specification object is required', 'ARG_CONFIG_NO_SPEC', ) } const result = { _: [] } const aliases = {} const handlers = {} for (const key of Object.keys(opts)) { if (!key) { throw new ArgError( 'argument key cannot be an empty string', 'ARG_CONFIG_EMPTY_KEY', ) } if (key[0] !== '-') { throw new ArgError( `argument key must start with '-' but found: '${key}'`, 'ARG_CONFIG_NONOPT_KEY', ) } if (key.length === 1) { throw new ArgError( `argument key must have a name; singular '-' keys are not allowed: ${key}`, 'ARG_CONFIG_NONAME_KEY', ) } if (typeof opts[key] === 'string') { aliases[key] = opts[key] continue } let type = opts[key] let isFlag = false if ( Array.isArray(type) && type.length === 1 && typeof type[0] === 'function' ) { const [fn] = type type = (value, name, prev = []) => { prev.push(fn(value, name, prev[prev.length - 1])) return prev } isFlag = fn === Boolean || fn[flagSymbol] === true } else if (typeof type === 'function') { isFlag = type === Boolean || type[flagSymbol] === true } else { throw new ArgError( `type missing or not a function or valid array type: ${key}`, 'ARG_CONFIG_VAD_TYPE', ) } if (key[1] !== '-' && key.length > 2) { throw new ArgError( `short argument keys (with a single hyphen) must have only one character: ${key}`, 'ARG_CONFIG_SHORTOPT_TOOLONG', ) } handlers[key] = [type, isFlag] } for (let i = 0, len = argv.length; i < len; i++) { const wholeArg = argv[i] if (stopAtPositional && result._.length > 0) { result._ = result._.concat(argv.slice(i)) break } if (wholeArg === '--') { result._ = result._.concat(argv.slice(i + 1)) break } if (wholeArg.length > 1 && wholeArg[0] === '-') { /* eslint-disable operator-linebreak */ const separatedArguments = wholeArg[1] === '-' || wholeArg.length === 2 ? [wholeArg] : wholeArg .slice(1) .split('') .map(a => `-${a}`) /* eslint-enable operator-linebreak */ for (let j = 0; j < separatedArguments.length; j++) { const arg = separatedArguments[j] const [originalArgName, argStr] = arg[1] === '-' ? arg.split(/=(.*)/, 2) : [arg, undefined] let argName = originalArgName while (argName in aliases) { argName = aliases[argName] } if (!(argName in handlers)) { if (permissive) { result._.push(arg) continue } else { throw new ArgError( `unknown or unexpected option: ${originalArgName}`, 'ARG_UNKNOWN_OPTION', ) } } const [type, isFlag] = handlers[argName] if (!isFlag && j + 1 < separatedArguments.length) { throw new ArgError( `option requires argument (but was followed by another short argument): ${originalArgName}`, 'ARG_MISSING_REQUIRED_SHORTARG', ) } if (isFlag) { result[argName] = type(true, argName, result[argName]) } else if (argStr === undefined) { if ( argv.length < i + 2 || (argv[i + 1].length > 1 && argv[i + 1][0] === '-' && !( argv[i + 1].match(/^-?\d*(\.(?=\d))?\d*$/) && (type === Number || // eslint-disable-next-line no-undef (typeof BigInt !== 'undefined' && type === BigInt)) )) ) { const extended = originalArgName === argName ? '' : ` (alias for ${argName})` throw new ArgError( `option requires argument: ${originalArgName}${extended}`, 'ARG_MISSING_REQUIRED_LONGARG', ) } result[argName] = type(argv[i + 1], argName, result[argName]) ++i } else { result[argName] = type(argStr, argName, result[argName]) } } } else { result._.push(wholeArg) } } return result } arg.flag = fn => { fn[flagSymbol] = true return fn } // Utility types arg.COUNT = arg.flag((v, name, existingCount) => (existingCount || 0) + 1) // Expose error class arg.ArgError = ArgError var arg_1 = arg /** @license The MIT License (MIT) Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ function getOptionValue(opt) { parseOptions() return options[opt] } let options function parseOptions() { if (!options) { options = { '--conditions': [], ...parseArgv(getNodeOptionsEnvArgv()), ...parseArgv(process.execArgv), } } } function parseArgv(argv) { return arg_1( { '--conditions': [String], '-C': '--conditions', }, { argv, permissive: true, }, ) } function getNodeOptionsEnvArgv() { const errors = [] const envArgv = ParseNodeOptionsEnvVar(process.env.NODE_OPTIONS || '', errors) if (errors.length !== 0); return envArgv } function ParseNodeOptionsEnvVar(node_options, errors) { const env_argv = [] let is_in_string = false let will_start_new_arg = true for (let index = 0; index < node_options.length; ++index) { let c = node_options[index] if (c === '\\' && is_in_string) { if (index + 1 === node_options.length) { errors.push('invalid value for NODE_OPTIONS (invalid escape)\n') return env_argv } else { c = node_options[++index] } } else if (c === ' ' && !is_in_string) { will_start_new_arg = true continue } else if (c === '"') { is_in_string = !is_in_string continue } if (will_start_new_arg) { env_argv.push(c) will_start_new_arg = false } else { env_argv[env_argv.length - 1] += c } } if (is_in_string) { errors.push('invalid value for NODE_OPTIONS (unterminated string)\n') } return env_argv } function makeApi(runtimeState, opts) { const alwaysWarnOnFallback = Number(process.env.PNP_ALWAYS_WARN_ON_FALLBACK) > 0 const debugLevel = Number(process.env.PNP_DEBUG_LEVEL) const pathRegExp = /^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:node:)?(?:@[^/]+\/)?[^/]+)\/*(.*|)$/ const isStrictRegExp = /^(\/|\.{1,2}(\/|$))/ const isDirRegExp = /\/$/ const isRelativeRegexp = /^\.{0,2}\// const topLevelLocator = { name: null, reference: null } const fallbackLocators = [] const emittedWarnings = /* @__PURE__ */ new Set() if (runtimeState.enableTopLevelFallback === true) fallbackLocators.push(topLevelLocator) if (opts.compatibilityMode !== false) { for (const name of [`react-scripts`, `gatsby`]) { const packageStore = runtimeState.packageRegistry.get(name) if (packageStore) { for (const reference of packageStore.keys()) { if (reference === null) { throw new Error( `Assertion failed: This reference shouldn't be null`, ) } else { fallbackLocators.push({ name, reference }) } } } } } const { ignorePattern, packageRegistry, packageLocatorsByLocations } = runtimeState function makeLogEntry(name, args) { return { fn: name, args, error: null, result: null, } } function trace(entry) { const colors = process.stderr?.hasColors?.() ?? process.stdout.isTTY const c = (n, str) => `\x1B[${n}m${str}\x1B[0m` const error = entry.error if (error) console.error( c(`31;1`, `\u2716 ${entry.error?.message.replace(/\n.*/s, ``)}`), ) else console.error(c(`33;1`, `\u203C Resolution`)) if (entry.args.length > 0) console.error() for (const arg of entry.args) console.error( ` ${c(`37;1`, `In \u2190`)} ${nodeUtils.inspect(arg, { colors, compact: true })}`, ) if (entry.result) { console.error() console.error( ` ${c(`37;1`, `Out \u2192`)} ${nodeUtils.inspect(entry.result, { colors, compact: true })}`, ) } const stack = new Error().stack.match(/(?<=^ +)at.*/gm)?.slice(2) ?? [] if (stack.length > 0) { console.error() for (const line of stack) { console.error(` ${c(`38;5;244`, line)}`) } } console.error() } function maybeLog(name, fn) { if (opts.allowDebug === false) return fn if (Number.isFinite(debugLevel)) { if (debugLevel >= 2) { return (...args) => { const logEntry = makeLogEntry(name, args) try { return (logEntry.result = fn(...args)) } catch (error) { throw (logEntry.error = error) } finally { trace(logEntry) } } } else if (debugLevel >= 1) { return (...args) => { try { return fn(...args) } catch (error) { const logEntry = makeLogEntry(name, args) logEntry.error = error trace(logEntry) throw error } } } } return fn } function getPackageInformationSafe(packageLocator) { const packageInformation = getPackageInformation(packageLocator) if (!packageInformation) { throw makeError( ErrorCode.INTERNAL, `Couldn't find a matching entry in the dependency tree for the specified parent (this is probably an internal error)`, ) } return packageInformation } function isDependencyTreeRoot(packageLocator) { if (packageLocator.name === null) return true for (const dependencyTreeRoot of runtimeState.dependencyTreeRoots) if ( dependencyTreeRoot.name === packageLocator.name && dependencyTreeRoot.reference === packageLocator.reference ) return true return false } const defaultExportsConditions = /* @__PURE__ */ new Set([ `node`, `require`, ...getOptionValue(`--conditions`), ]) function applyNodeExportsResolution( unqualifiedPath, conditions = defaultExportsConditions, issuer, ) { const locator = findPackageLocator( ppath.join(unqualifiedPath, `internal.js`), { resolveIgnored: true, includeDiscardFromLookup: true, }, ) if (locator === null) { throw makeError( ErrorCode.INTERNAL, `The locator that owns the "${unqualifiedPath}" path can't be found inside the dependency tree (this is probably an internal error)`, ) } const { packageLocation } = getPackageInformationSafe(locator) const manifestPath = ppath.join(packageLocation, Filename.manifest) if (!opts.fakeFs.existsSync(manifestPath)) return null const pkgJson = JSON.parse(opts.fakeFs.readFileSync(manifestPath, `utf8`)) if (pkgJson.exports == null) return null let subpath = ppath.contains(packageLocation, unqualifiedPath) if (subpath === null) { throw makeError( ErrorCode.INTERNAL, `unqualifiedPath doesn't contain the packageLocation (this is probably an internal error)`, ) } if (subpath !== `.` && !isRelativeRegexp.test(subpath)) subpath = `./${subpath}` try { const resolvedExport = packageExportsResolve({ packageJSONUrl: url.pathToFileURL(npath.fromPortablePath(manifestPath)), packageSubpath: subpath, exports: pkgJson.exports, base: issuer ? url.pathToFileURL(npath.fromPortablePath(issuer)) : null, conditions, }) return npath.toPortablePath(url.fileURLToPath(resolvedExport)) } catch (error) { throw makeError( ErrorCode.EXPORTS_RESOLUTION_FAILED, error.message, { unqualifiedPath: getPathForDisplay(unqualifiedPath), locator, pkgJson, subpath: getPathForDisplay(subpath), conditions, }, error.code, ) } } function applyNodeExtensionResolution( unqualifiedPath, candidates, { extensions }, ) { let stat try { candidates.push(unqualifiedPath) stat = opts.fakeFs.statSync(unqualifiedPath) } catch (error) {} if (stat && !stat.isDirectory()) return opts.fakeFs.realpathSync(unqualifiedPath) if (stat && stat.isDirectory()) { let pkgJson try { pkgJson = JSON.parse( opts.fakeFs.readFileSync( ppath.join(unqualifiedPath, Filename.manifest), `utf8`, ), ) } catch (error) {} let nextUnqualifiedPath if (pkgJson && pkgJson.main) nextUnqualifiedPath = ppath.resolve(unqualifiedPath, pkgJson.main) if (nextUnqualifiedPath && nextUnqualifiedPath !== unqualifiedPath) { const resolution = applyNodeExtensionResolution( nextUnqualifiedPath, candidates, { extensions }, ) if (resolution !== null) { return resolution } } } for (let i = 0, length = extensions.length; i < length; i++) { const candidateFile = `${unqualifiedPath}${extensions[i]}` candidates.push(candidateFile) if (opts.fakeFs.existsSync(candidateFile)) { return candidateFile } } if (stat && stat.isDirectory()) { for (let i = 0, length = extensions.length; i < length; i++) { const candidateFile = ppath.format({ dir: unqualifiedPath, name: `index`, ext: extensions[i], }) candidates.push(candidateFile) if (opts.fakeFs.existsSync(candidateFile)) { return candidateFile } } } return null } function makeFakeModule(path) { const fakeModule = new require$$0.Module(path, null) fakeModule.filename = path fakeModule.paths = require$$0.Module._nodeModulePaths(path) return fakeModule } function callNativeResolution(request, issuer) { if (issuer.endsWith(`/`)) issuer = ppath.join(issuer, `internal.js`) return require$$0.Module._resolveFilename( npath.fromPortablePath(request), makeFakeModule(npath.fromPortablePath(issuer)), false, { plugnplay: false }, ) } function isPathIgnored(path) { if (ignorePattern === null) return false const subPath = ppath.contains(runtimeState.basePath, path) if (subPath === null) return false if (ignorePattern.test(subPath.replace(/\/$/, ``))) { return true } else { return false } } const VERSIONS = { std: 3, resolveVirtual: 1, getAllLocators: 1 } const topLevel = topLevelLocator function getPackageInformation({ name, reference }) { const packageInformationStore = packageRegistry.get(name) if (!packageInformationStore) return null const packageInformation = packageInformationStore.get(reference) if (!packageInformation) return null return packageInformation } function findPackageDependents({ name, reference }) { const dependents = [] for (const [dependentName, packageInformationStore] of packageRegistry) { if (dependentName === null) continue for (const [ dependentReference, packageInformation, ] of packageInformationStore) { if (dependentReference === null) continue const dependencyReference = packageInformation.packageDependencies.get(name) if (dependencyReference !== reference) continue if (dependentName === name && dependentReference === reference) continue dependents.push({ name: dependentName, reference: dependentReference, }) } } return dependents } function findBrokenPeerDependencies(dependency, initialPackage) { const brokenPackages = /* @__PURE__ */ new Map() const alreadyVisited = /* @__PURE__ */ new Set() const traversal = currentPackage => { const identifier = JSON.stringify(currentPackage.name) if (alreadyVisited.has(identifier)) return alreadyVisited.add(identifier) const dependents = findPackageDependents(currentPackage) for (const dependent of dependents) { const dependentInformation = getPackageInformationSafe(dependent) if (dependentInformation.packagePeers.has(dependency)) { traversal(dependent) } else { let brokenSet = brokenPackages.get(dependent.name) if (typeof brokenSet === `undefined`) brokenPackages.set( dependent.name, (brokenSet = /* @__PURE__ */ new Set()), ) brokenSet.add(dependent.reference) } } } traversal(initialPackage) const brokenList = [] for (const name of [...brokenPackages.keys()].sort()) for (const reference of [...brokenPackages.get(name)].sort()) brokenList.push({ name, reference }) return brokenList } function findPackageLocator( location, { resolveIgnored = false, includeDiscardFromLookup = false } = {}, ) { if (isPathIgnored(location) && !resolveIgnored) return null let relativeLocation = ppath.relative(runtimeState.basePath, location) if (!relativeLocation.match(isStrictRegExp)) relativeLocation = `./${relativeLocation}` if (!relativeLocation.endsWith(`/`)) relativeLocation = `${relativeLocation}/` do { const entry = packageLocatorsByLocations.get(relativeLocation) if ( typeof entry === `undefined` || (entry.discardFromLookup && !includeDiscardFromLookup) ) { relativeLocation = relativeLocation.substring( 0, relativeLocation.lastIndexOf(`/`, relativeLocation.length - 2) + 1, ) continue } return entry.locator } while (relativeLocation !== ``) return null } function tryReadFile(filePath) { try { return opts.fakeFs.readFileSync(npath.toPortablePath(filePath), `utf8`) } catch (err) { if (err.code === `ENOENT`) return void 0 throw err } } function resolveToUnqualified( request, issuer, { considerBuiltins = true } = {}, ) { if (request.startsWith(`#`)) throw new Error( `resolveToUnqualified can not handle private import mappings`, ) if (request === `pnpapi`) return npath.toPortablePath(opts.pnpapiResolution) if (considerBuiltins && require$$0.isBuiltin(request)) return null const requestForDisplay = getPathForDisplay(request) const issuerForDisplay = issuer && getPathForDisplay(issuer) if (issuer && isPathIgnored(issuer)) { if (!ppath.isAbsolute(request) || findPackageLocator(request) === null) { const result = callNativeResolution(request, issuer) if (result === false) { throw makeError( 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) Require request: "${requestForDisplay}" Required by: ${issuerForDisplay} `, { request: requestForDisplay, issuer: issuerForDisplay }, ) } return npath.toPortablePath(result) } } let unqualifiedPath const dependencyNameMatch = request.match(pathRegExp) if (!dependencyNameMatch) { if (ppath.isAbsolute(request)) { unqualifiedPath = ppath.normalize(request) } else { if (!issuer) { throw makeError( ErrorCode.API_ERROR, `The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute`, { request: requestForDisplay, issuer: issuerForDisplay }, ) } const absoluteIssuer = ppath.resolve(issuer) if (issuer.match(isDirRegExp)) { unqualifiedPath = ppath.normalize(ppath.join(absoluteIssuer, request)) } else { unqualifiedPath = ppath.normalize( ppath.join(ppath.dirname(absoluteIssuer), request), ) } } } else { if (!issuer) { throw makeError( ErrorCode.API_ERROR, `The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute`, { request: requestForDisplay, issuer: issuerForDisplay }, ) } const [, dependencyName, subPath] = dependencyNameMatch const issuerLocator = findPackageLocator(issuer) if (!issuerLocator) { const result = callNativeResolution(request, issuer) if (result === false) { throw makeError( 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). Require path: "${requestForDisplay}" Required by: ${issuerForDisplay} `, { request: requestForDisplay, issuer: issuerForDisplay }, ) } return npath.toPortablePath(result) } const issuerInformation = getPackageInformationSafe(issuerLocator) let dependencyReference = issuerInformation.packageDependencies.get(dependencyName) let fallbackReference = null if (dependencyReference == null) { if (issuerLocator.name !== null) { const exclusionEntry = runtimeState.fallbackExclusionList.get( issuerLocator.name, ) const canUseFallbacks = !exclusionEntry || !exclusionEntry.has(issuerLocator.reference) if (canUseFallbacks) { for (let t = 0, T = fallbackLocators.length; t < T; ++t) { const fallbackInformation = getPackageInformationSafe( fallbackLocators[t], ) const reference = fallbackInformation.packageDependencies.get(dependencyName) if (reference == null) continue if (alwaysWarnOnFallback) fallbackReference = reference else dependencyReference = reference break } if (runtimeState.enableTopLevelFallback) { if (dependencyReference == null && fallbackReference === null) { const reference = runtimeState.fallbackPool.get(dependencyName) if (reference != null) { fallbackReference = reference } } } } } } let error = null if (dependencyReference === null) { if (isDependencyTreeRoot(issuerLocator)) { error = makeError( 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. Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} Required by: ${issuerForDisplay} `, { request: requestForDisplay, issuer: issuerForDisplay, dependencyName, }, ) } else { const brokenAncestors = findBrokenPeerDependencies( dependencyName, issuerLocator, ) if ( brokenAncestors.every(ancestor => isDependencyTreeRoot(ancestor)) ) { error = makeError( ErrorCode.MISSING_PEER_DEPENDENCY, `${issuerLocator.name} tried to access ${dependencyName} (a peer dependency) but it isn't provided by your application; this makes the require call ambiguous and unsound. Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} Required by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuerForDisplay}) ${brokenAncestors .map( ancestorLocator => `Ancestor breaking the chain: ${ancestorLocator.name}@${ancestorLocator.reference} `, ) .join(``)} `, { request: requestForDisplay, issuer: issuerForDisplay, issuerLocator: Object.assign({}, issuerLocator), dependencyName, brokenAncestors, }, ) } else { error = makeError( 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. Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} Required by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuerForDisplay}) ${brokenAncestors .map( ancestorLocator => `Ancestor breaking the chain: ${ancestorLocator.name}@${ancestorLocator.reference} `, ) .join(``)} `, { request: requestForDisplay, issuer: issuerForDisplay, issuerLocator: Object.assign({}, issuerLocator), dependencyName, brokenAncestors, }, ) } } } else if (dependencyReference === void 0) { if (!considerBuiltins && require$$0.isBuiltin(request)) { if (isDependencyTreeRoot(issuerLocator)) { error = makeError( ErrorCode.UNDECLARED_DEPENDENCY, `Your application tried to access ${dependencyName}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${dependencyName} isn't otherwise declared in your dependencies, this makes the require call ambiguous and unsound. Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} Required by: ${issuerForDisplay} `, { request: requestForDisplay, issuer: issuerForDisplay, dependencyName, }, ) } else { error = makeError( ErrorCode.UNDECLARED_DEPENDENCY, `${issuerLocator.name} tried to access ${dependencyName}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${dependencyName} isn't otherwise declared in ${issuerLocator.name}'s dependencies, this makes the require call ambiguous and unsound. Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} Required by: ${issuerForDisplay} `, { request: requestForDisplay, issuer: issuerForDisplay, issuerLocator: Object.assign({}, issuerLocator), dependencyName, }, ) } } else { if (isDependencyTreeRoot(issuerLocator)) { error = makeError( 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. Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} Required by: ${issuerForDisplay} `, { request: requestForDisplay, issuer: issuerForDisplay, dependencyName, }, ) } else { error = makeError( 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. Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} Required by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuerForDisplay}) `, { request: requestForDisplay, issuer: issuerForDisplay, issuerLocator: Object.assign({}, issuerLocator), dependencyName, }, ) } } } if (dependencyReference == null) { if (fallbackReference === null || error === null) throw ( error || new Error(`Assertion failed: Expected an error to have been set`) ) dependencyReference = fallbackReference const message = error.message.replace(/\n.*/g, ``) error.message = message if (!emittedWarnings.has(message) && debugLevel !== 0) { emittedWarnings.add(message) process.emitWarning(error) } } const dependencyLocator = Array.isArray(dependencyReference) ? { name: dependencyReference[0], reference: dependencyReference[1] } : { name: dependencyName, reference: dependencyReference } const dependencyInformation = getPackageInformationSafe(dependencyLocator) if (!dependencyInformation.packageLocation) { throw makeError( 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. Required package: ${dependencyLocator.name}@${dependencyLocator.reference}${dependencyLocator.name !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} Required by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuerForDisplay}) `, { request: requestForDisplay, issuer: issuerForDisplay, dependencyLocator: Object.assign({}, dependencyLocator), }, ) } const dependencyLocation = dependencyInformation.packageLocation if (subPath) { unqualifiedPath = ppath.join(dependencyLocation, subPath) } else { unqualifiedPath = dependencyLocation } } return ppath.normalize(unqualifiedPath) } function resolveUnqualifiedExport( request, unqualifiedPath, conditions = defaultExportsConditions, issuer, ) { if (isStrictRegExp.test(request)) return unqualifiedPath const unqualifiedExportPath = applyNodeExportsResolution( unqualifiedPath, conditions, issuer, ) if (unqualifiedExportPath) { return ppath.normalize(unqualifiedExportPath) } else { return unqualifiedPath } } function resolveUnqualified( unqualifiedPath, { extensions = Object.keys(require$$0.Module._extensions) } = {}, ) { const candidates = [] const qualifiedPath = applyNodeExtensionResolution( unqualifiedPath, candidates, { extensions }, ) if (qualifiedPath) { return ppath.normalize(qualifiedPath) } else { reportRequiredFilesToWatchMode( candidates.map(candidate => npath.fromPortablePath(candidate)), ) const unqualifiedPathForDisplay = getPathForDisplay(unqualifiedPath) const containingPackage = findPackageLocator(unqualifiedPath) if (containingPackage) { const { packageLocation } = getPackageInformationSafe(containingPackage) let exists = true try { opts.fakeFs.accessSync(packageLocation) } catch (err) { if (err?.code === `ENOENT`) { exists = false } else { const readableError = ( err?.message ?? err ?? `empty exception thrown` ).replace(/^[A-Z]/, $0 => $0.toLowerCase()) throw makeError( ErrorCode.QUALIFIED_PATH_RESOLUTION_FAILED, `Required package exists but could not be accessed (${readableError}). Missing package: ${containingPackage.name}@${containingPackage.reference} Expected package location: ${getPathForDisplay(packageLocation)} `, { unqualifiedPath: unqualifiedPathForDisplay, extensions }, ) } } if (!exists) { const errorMessage = packageLocation.includes(`/unplugged/`) ? `Required unplugged package missing from disk. This may happen when switching branches without running installs (unplugged packages must be fully materialized on disk to work).` : `Required package missing from disk. If you keep your packages inside your repository then restarting the Node process may be enough. Otherwise, try to run an install first.` throw makeError( ErrorCode.QUALIFIED_PATH_RESOLUTION_FAILED, `${errorMessage} Missing package: ${containingPackage.name}@${containingPackage.reference} Expected package location: ${getPathForDisplay(packageLocation)} `, { unqualifiedPath: unqualifiedPathForDisplay, extensions }, ) } } throw makeError( ErrorCode.QUALIFIED_PATH_RESOLUTION_FAILED, `Qualified path resolution failed: we looked for the following paths, but none could be accessed. Source path: ${unqualifiedPathForDisplay} ${candidates .map( candidate => `Not found: ${getPathForDisplay(candidate)} `, ) .join(``)}`, { unqualifiedPath: unqualifiedPathForDisplay, extensions }, ) } } function resolvePrivateRequest(request, issuer, opts2) { if (!issuer) throw new Error( `Assertion failed: An issuer is required to resolve private import mappings`, ) const resolved = packageImportsResolve({ name: request, base: url.pathToFileURL(npath.fromPortablePath(issuer)), conditions: opts2.conditions ?? defaultExportsConditions, readFileSyncFn: tryReadFile, }) if (resolved instanceof URL) { return resolveUnqualified( npath.toPortablePath(url.fileURLToPath(resolved)), { extensions: opts2.extensions }, ) } else { if (resolved.startsWith(`#`)) throw new Error( `Mapping from one private import to another isn't allowed`, ) return resolveRequest(resolved, issuer, opts2) } } function resolveRequest(request, issuer, opts2 = {}) { try { if (request.startsWith(`#`)) return resolvePrivateRequest(request, issuer, opts2) const { considerBuiltins, extensions, conditions } = opts2 const unqualifiedPath = resolveToUnqualified(request, issuer, { considerBuiltins, }) if (request === `pnpapi`) return unqualifiedPath if (unqualifiedPath === null) return null const isIssuerIgnored = () => issuer !== null ? isPathIgnored(issuer) : false const remappedPath = (!considerBuiltins || !require$$0.isBuiltin(request)) && !isIssuerIgnored() ? resolveUnqualifiedExport( request, unqualifiedPath, conditions, issuer, ) : unqualifiedPath return resolveUnqualified(remappedPath, { extensions }) } catch (error) { if (Object.hasOwn(error, `pnpCode`)) Object.assign(error.data, { request: getPathForDisplay(request), issuer: issuer && getPathForDisplay(issuer), }) throw error } } function resolveVirtual(request) { const normalized = ppath.normalize(request) const resolved = VirtualFS.resolveVirtual(normalized) return resolved !== normalized ? resolved : null } return { VERSIONS, topLevel, getLocator: (name, referencish) => { if (Array.isArray(referencish)) { return { name: referencish[0], reference: referencish[1] } } else { return { name, reference: referencish } } }, getDependencyTreeRoots: () => { return [...runtimeState.dependencyTreeRoots] }, getAllLocators() { const locators = [] for (const [name, entry] of packageRegistry) for (const reference of entry.keys()) if (name !== null && reference !== null) locators.push({ name, reference }) return locators }, getPackageInformation: locator => { const info = getPackageInformation(locator) if (info === null) return null const packageLocation = npath.fromPortablePath(info.packageLocation) const nativeInfo = { ...info, packageLocation } return nativeInfo }, findPackageLocator: path => { return findPackageLocator(npath.toPortablePath(path)) }, resolveToUnqualified: maybeLog( `resolveToUnqualified`, (request, issuer, opts2) => { const portableIssuer = issuer !== null ? npath.toPortablePath(issuer) : null const resolution = resolveToUnqualified( npath.toPortablePath(request), portableIssuer, opts2, ) if (resolution === null) return null return npath.fromPortablePath(resolution) }, ), resolveUnqualified: maybeLog( `resolveUnqualified`, (unqualifiedPath, opts2) => { return npath.fromPortablePath( resolveUnqualified(npath.toPortablePath(unqualifiedPath), opts2), ) }, ), resolveRequest: maybeLog(`resolveRequest`, (request, issuer, opts2) => { const portableIssuer = issuer !== null ? npath.toPortablePath(issuer) : null const resolution = resolveRequest( npath.toPortablePath(request), portableIssuer, opts2, ) if (resolution === null) return null return npath.fromPortablePath(resolution) }), resolveVirtual: maybeLog(`resolveVirtual`, path => { const result = resolveVirtual(npath.toPortablePath(path)) if (result !== null) { return npath.fromPortablePath(result) } else { return null } }), } } function makeManager(pnpapi, opts) { const initialApiPath = npath.toPortablePath( pnpapi.resolveToUnqualified(`pnpapi`, null), ) const initialApiStats = opts.fakeFs.statSync( npath.toPortablePath(initialApiPath), ) const apiMetadata = /* @__PURE__ */ new Map([ [ initialApiPath, { instance: pnpapi, stats: initialApiStats, lastRefreshCheck: Date.now(), }, ], ]) function loadApiInstance(pnpApiPath) { const nativePath = npath.fromPortablePath(pnpApiPath) const module = new require$$0.Module(nativePath, null) module.load(nativePath) return module.exports } function refreshApiEntry(pnpApiPath, apiEntry) { const timeNow = Date.now() if (timeNow - apiEntry.lastRefreshCheck < 500) return apiEntry.lastRefreshCheck = timeNow const stats = opts.fakeFs.statSync(pnpApiPath) if (stats.mtime > apiEntry.stats.mtime) { process.emitWarning( `[Warning] The runtime detected new information in a PnP file; reloading the API instance (${npath.fromPortablePath(pnpApiPath)})`, ) apiEntry.stats = stats apiEntry.instance = loadApiInstance(pnpApiPath) } } function getApiEntry(pnpApiPath, refresh = false) { let apiEntry = apiMetadata.get(pnpApiPath) if (typeof apiEntry !== `undefined`) { if (refresh) { refreshApiEntry(pnpApiPath, apiEntry) } } else { apiMetadata.set( pnpApiPath, (apiEntry = { instance: loadApiInstance(pnpApiPath), stats: opts.fakeFs.statSync(pnpApiPath), lastRefreshCheck: Date.now(), }), ) } return apiEntry } const findApiPathCache = /* @__PURE__ */ new Map() function addToCacheAndReturn(start, end, target) { if (target !== null) { target = VirtualFS.resolveVirtual(target) target = opts.fakeFs.realpathSync(target) } let curr let next = start do { curr = next findApiPathCache.set(curr, target) next = ppath.dirname(curr) } while (curr !== end) return target } function findApiPathFor(modulePath) { let bestCandidate = null for (const [apiPath, apiEntry] of apiMetadata) { const locator = apiEntry.instance.findPackageLocator(modulePath) if (!locator) continue if (apiMetadata.size === 1) return apiPath const packageInformation = apiEntry.instance.getPackageInformation(locator) if (!packageInformation) throw new Error( `Assertion failed: Couldn't get package information for '${modulePath}'`, ) if (!bestCandidate) bestCandidate = { packageLocation: packageInformation.packageLocation, apiPaths: [], } if ( packageInformation.packageLocation === bestCandidate.packageLocation ) { bestCandidate.apiPaths.push(apiPath) } else if ( packageInformation.packageLocation.length > bestCandidate.packageLocation.length ) { bestCandidate = { packageLocation: packageInformation.packageLocation, apiPaths: [apiPath], } } } if (bestCandidate) { if (bestCandidate.apiPaths.length === 1) return bestCandidate.apiPaths[0] const controlSegment = bestCandidate.apiPaths.map( apiPath => ` ${npath.fromPortablePath(apiPath)}`, ).join(` `) throw new Error(`Unable to locate pnpapi, the module '${modulePath}' is controlled by multiple pnpapi instances. This is usually caused by using the global cache (enableGlobalCache: true) Controlled by: ${controlSegment} `) } const start = ppath.resolve(npath.toPortablePath(modulePath)) let curr let next = start do { curr = next const cached = findApiPathCache.get(curr) if (cached !== void 0) return addToCacheAndReturn(start, curr, cached) const cjsCandidate = ppath.join(curr, Filename.pnpCjs) if ( opts.fakeFs.existsSync(cjsCandidate) && opts.fakeFs.statSync(cjsCandidate).isFile() ) return addToCacheAndReturn(start, curr, cjsCandidate) const legacyCjsCandidate = ppath.join(curr, Filename.pnpJs) if ( opts.fakeFs.existsSync(legacyCjsCandidate) && opts.fakeFs.statSync(legacyCjsCandidate).isFile() ) return addToCacheAndReturn(start, curr, legacyCjsCandidate) next = ppath.dirname(curr) } while (curr !== PortablePath.root) return addToCacheAndReturn(start, curr, null) } const moduleToApiPathCache = /* @__PURE__ */ new WeakMap() function getApiPathFromParent(parent) { if (parent == null) return initialApiPath let apiPath = moduleToApiPathCache.get(parent) if (typeof apiPath !== `undefined`) return apiPath apiPath = parent.filename ? findApiPathFor(parent.filename) : null moduleToApiPathCache.set(parent, apiPath) return apiPath } return { getApiPathFromParent, findApiPathFor, getApiEntry, } } const localFs = { ...fs__default.default } const nodeFs = new NodeFS(localFs) const defaultRuntimeState = $$SETUP_STATE(hydrateRuntimeState) const defaultPnpapiResolution = __filename const defaultFsLayer = new VirtualFS({ baseFs: new ZipOpenFS({ baseFs: nodeFs, maxOpenFiles: 80, readOnlyArchives: true, }), }) class DynamicFS extends ProxiedFS { constructor() { super(ppath) this.baseFs = defaultFsLayer } mapToBase(p) { return p } mapFromBase(p) { return p } } const dynamicFsLayer = new DynamicFS() let manager const defaultApi = Object.assign( makeApi(defaultRuntimeState, { fakeFs: dynamicFsLayer, pnpapiResolution: defaultPnpapiResolution, }), { makeApi: ({ basePath = void 0, fakeFs = dynamicFsLayer, pnpapiResolution = defaultPnpapiResolution, ...rest }) => { const apiRuntimeState = typeof basePath !== `undefined` ? $$SETUP_STATE(hydrateRuntimeState, basePath) : defaultRuntimeState return makeApi(apiRuntimeState, { fakeFs, pnpapiResolution, ...rest, }) }, setup: api => { applyPatch(api || defaultApi, { fakeFs: defaultFsLayer, manager, }) dynamicFsLayer.baseFs = new NodeFS(fs__default.default) }, }, ) manager = makeManager(defaultApi, { fakeFs: dynamicFsLayer, }) if (module.parent && module.parent.id === `internal/preload`) { defaultApi.setup() if (module.filename) { delete require$$0__default.default._cache[module.filename] } } if (process.mainModule === module) { const reportError = (code, message, data) => { process.stdout.write(`${JSON.stringify([{ code, message, data }, null])} `) } const reportSuccess = resolution => { process.stdout.write(`${JSON.stringify([null, resolution])} `) } const processResolution = (request, issuer) => { try { reportSuccess(defaultApi.resolveRequest(request, issuer)) } catch (error) { reportError(error.code, error.message, error.data) } } const processRequest = data => { try { const [request, issuer] = JSON.parse(data) processResolution(request, issuer) } catch (error) { reportError(`INVALID_JSON`, error.message, error.data) } } if (process.argv.length > 2) { if (process.argv.length !== 4) { process.stderr .write(`Usage: ${process.argv[0]} ${process.argv[1]} `) process.exitCode = 64 } else { processResolution(process.argv[2], process.argv[3]) } } else { let buffer = `` const decoder = new StringDecoder__default.default.StringDecoder() process.stdin.on(`data`, chunk => { buffer += decoder.write(chunk) do { const index = buffer.indexOf(` `) if (index === -1) break const line = buffer.slice(0, index) buffer = buffer.slice(index + 1) processRequest(line) } while (true) }) } } module.exports = defaultApi