From 84cea2d2d637af20a83c6bbd1e2417d84652b755 Mon Sep 17 00:00:00 2001 From: Web3 Philosopher Date: Mon, 22 Jan 2024 11:49:42 +0100 Subject: [PATCH] [DOCS] ISMP (#74) --- .github/workflows/ci.yml | 10 +- .github/workflows/docker.yml | 2 +- .github/workflows/docs.yml | 65 + .gitignore | 4 +- README.md | 124 +- docs/package-lock.json | 9100 +++++++++++++++++ docs/package.json | 25 + docs/pages/evm/delivery.mdx | 0 docs/pages/evm/fees.mdx | 0 docs/pages/evm/integration.mdx | 0 docs/pages/evm/networks.mdx | 0 docs/pages/index.mdx | 20 + docs/pages/network/node.mdx | 119 + docs/pages/network/relayer.mdx | 32 + docs/pages/polkadot/delivery.mdx | 0 docs/pages/polkadot/fees.mdx | 0 docs/pages/polkadot/modules.mdx | 0 docs/pages/polkadot/networks.mdx | 0 docs/pages/polkadot/parachains.mdx | 0 docs/pages/polkadot/rpc.mdx | 65 + docs/pages/polkadot/solochains.mdx | 0 docs/pages/protocol/consensus.mdx | 257 + docs/pages/protocol/dispatcher.mdx | 88 + docs/pages/protocol/host.mdx | 200 + docs/pages/protocol/ismp.mdx | 10 + docs/pages/protocol/requests.mdx | 142 + docs/pages/protocol/responses.mdx | 84 + docs/pages/protocol/router.mdx | 38 + docs/pages/protocol/state-machine.mdx | 71 + docs/pages/protocol/timeouts.mdx | 65 + docs/public/committments.svg | 4 + docs/public/consensus.svg | 1 + docs/public/coprocessor.svg | 4 + docs/public/favicon.svg | 9 + docs/public/full-node.jpeg | Bin 0 -> 29483 bytes docs/public/get_request.drawio.png | Bin 0 -> 51124 bytes docs/public/ismp_request.drawio.png | Bin 0 -> 32787 bytes docs/public/logo.svg | 12 + docs/public/logotype.svg | 14 + docs/public/receipts.svg | 4 + docs/public/state-machine.svg | 1 + docs/public/stf.svg | 1 + docs/tsconfig.json | 24 + docs/vocs.config.ts | 184 + evm/abi/src/generated/ping_module.rs | 77 +- .../CrossChainMessenger.sol | 0 evm/{test => examples}/PingModule.sol | 11 +- evm/script/DeployGateway.s.sol | 4 +- evm/script/DeployIsmp.s.sol | 2 +- evm/src/EvmHost.sol | 74 +- evm/test/BaseTest.sol | 2 +- .../ismp/core/src/handlers/consensus.rs | 16 - .../ismp/core/src/handlers/response.rs | 8 +- .../modules/ismp/core/src/handlers/timeout.rs | 14 +- parachain/modules/ismp/core/src/host.rs | 2 +- parachain/modules/ismp/core/src/messaging.rs | 2 +- parachain/node/Cargo.toml | 2 - parachain/runtimes/gargantua/Cargo.toml | 5 +- parachain/runtimes/messier/Cargo.toml | 5 +- 59 files changed, 10903 insertions(+), 100 deletions(-) create mode 100644 .github/workflows/docs.yml create mode 100644 docs/package-lock.json create mode 100644 docs/package.json create mode 100644 docs/pages/evm/delivery.mdx create mode 100644 docs/pages/evm/fees.mdx create mode 100644 docs/pages/evm/integration.mdx create mode 100644 docs/pages/evm/networks.mdx create mode 100644 docs/pages/index.mdx create mode 100644 docs/pages/network/node.mdx create mode 100644 docs/pages/network/relayer.mdx create mode 100644 docs/pages/polkadot/delivery.mdx create mode 100644 docs/pages/polkadot/fees.mdx create mode 100644 docs/pages/polkadot/modules.mdx create mode 100644 docs/pages/polkadot/networks.mdx create mode 100644 docs/pages/polkadot/parachains.mdx create mode 100644 docs/pages/polkadot/rpc.mdx create mode 100644 docs/pages/polkadot/solochains.mdx create mode 100644 docs/pages/protocol/consensus.mdx create mode 100644 docs/pages/protocol/dispatcher.mdx create mode 100644 docs/pages/protocol/host.mdx create mode 100644 docs/pages/protocol/ismp.mdx create mode 100644 docs/pages/protocol/requests.mdx create mode 100644 docs/pages/protocol/responses.mdx create mode 100644 docs/pages/protocol/router.mdx create mode 100644 docs/pages/protocol/state-machine.mdx create mode 100644 docs/pages/protocol/timeouts.mdx create mode 100644 docs/public/committments.svg create mode 100644 docs/public/consensus.svg create mode 100644 docs/public/coprocessor.svg create mode 100644 docs/public/favicon.svg create mode 100644 docs/public/full-node.jpeg create mode 100644 docs/public/get_request.drawio.png create mode 100644 docs/public/ismp_request.drawio.png create mode 100644 docs/public/logo.svg create mode 100644 docs/public/logotype.svg create mode 100644 docs/public/receipts.svg create mode 100644 docs/public/state-machine.svg create mode 100644 docs/public/stf.svg create mode 100644 docs/tsconfig.json create mode 100644 docs/vocs.config.ts rename evm/{test => examples}/CrossChainMessenger.sol (100%) rename evm/{test => examples}/PingModule.sol (94%) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 43db91ba2..9c8da1b9c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,7 +22,8 @@ env: jobs: check-wasm: name: Check Wasm Crates - runs-on: self-hosted + runs-on: arc-runner-set + if: github.event.pull_request.draft == false strategy: matrix: crate: [messier-runtime, gargantua-runtime] @@ -57,7 +58,8 @@ jobs: check-workspace: name: Check Workspace - runs-on: self-hosted + runs-on: arc-runner-set + if: github.event.pull_request.draft == false steps: - uses: actions/checkout@v3 with: @@ -93,6 +95,7 @@ jobs: fmt: name: Cargo fmt runs-on: ubuntu-latest + if: github.event.pull_request.draft == false steps: - uses: actions/checkout@v3 @@ -106,7 +109,7 @@ jobs: unit-tests: name: Unit Tests - runs-on: self-hosted + runs-on: arc-runner-set if: github.event.pull_request.draft == false steps: - name: Checkout sources @@ -226,6 +229,7 @@ jobs: check-solidity: name: Check ismp-solidity runs-on: ubuntu-latest + if: github.event.pull_request.draft == false steps: - uses: actions/checkout@v3 with: diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index ef4477b9d..c3de1f3ee 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -36,7 +36,7 @@ jobs: - name: Build run: | - cargo +nightly build --release -p hyperbridge --features sepolia + cargo +nightly build --release -p hyperbridge mv ./target/release/hyperbridge ./ - name: Install Cargo get diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 000000000..be3fcd010 --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,65 @@ +# Simple workflow for deploying static content to GitHub Pages +name: Deploy Documentation + +on: + # Runs on pushes targeting the default branch + push: + branches: ['main'] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets the GITHUB_TOKEN permissions to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow one concurrent deployment +concurrency: + group: 'pages' + cancel-in-progress: true + +env: + GA_ID: ${{ secrets.GA_ID }} + +jobs: + # Single deploy job since we're just deploying + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + defaults: + run: + working-directory: ./docs + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Node + uses: actions/setup-node@v3 + + with: + node-version: 18 + cache: "npm" + cache-dependency-path: "docs" + + - name: Install dependencies + run: npm install + + - name: Build + run: npm run build + + - name: Setup Pages + uses: actions/configure-pages@v3 + + - name: Upload artifact + uses: actions/upload-pages-artifact@v2 + with: + # Upload dist repository + path: './docs/dist' + + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v2 \ No newline at end of file diff --git a/.gitignore b/.gitignore index 63eaeb959..0fdbee282 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,6 @@ evm/out/ evm/cache/ evm/broadcast/ -evm/integration-tests/target/ \ No newline at end of file +evm/integration-tests/target/ + +.uuid* \ No newline at end of file diff --git a/README.md b/README.md index 5c0c717c3..e354aa139 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,123 @@ # Hyperbridge -Hyperbridge is a hyper-scalable, interoperability coprocessor. +Hyperbridge is a hyper-scalable coprocessor for cryptographically secure, cross-chain interoperability. + +## Docker + +Hyperbridge is available at the official docker repository [`polytopelabs/hyperbridge`](https://hub.docker.com/r/polytopelabs/hyperbridge) + +```bash +docker run polytopelabs/hyperbridge:latest --chain=messier +``` + +## Prebuilt Binaries + +You can install a prebuilt binary for the hyperbridge node with the following bash script + +```bash +wget -q --show-progress https://github.com/polytope-labs/hyperbridge/releases/download/${latest-tag}/hyperbridge-x86_64-unknown-linux-gnu.tar.gz +tar -xvzf hyperbridge-x86_64-unknown-linux-gnu.tar.gz +# copy to $PATH +cp hyperbridge-x86_64-unknown-linux-gnu/hyperbridge $HOME/.local/bin/ +``` + +or a 1-liner shell script + +```bash +curl --proto '=https' --tlsv1.2 -LsSf https://github.com/polytope-labs/hyperbridge/releases/download/${latest-tag}/hyperbridge-installer.sh | sh +``` + +## Building from source + +You can follow the steps below if you'd prefer to build the hyperbridge node from source: + + +### Install Dependencies + +Building the hyperbridge node requires some dependencies + +- git +- clang +- curl +- make +- build-essential +- libssl-dev +- llvm +- libudev-dev +- protobuf-compiler + +Debian/Ubuntu + +```bash +sudo apt install --assume-yes git clang curl libssl-dev llvm libudev-dev make protobuf-compiler +``` +Arch + +```bash +pacman -Syu --needed --noconfirm curl git clang make protobuf +``` +Fedora + +```bash +sudo dnf update +sudo dnf install clang curl git openssl-devel make protobuf-compiler +``` +Opensuse + +```bash +sudo zypper install clang curl git openssl-devel llvm-devel libudev-devel make protobuf +``` + +### Install rust compiler + +If you don't have an already existing rust installation, you can install it using the one-liner below. Follow the prompts displayed to proceed with a default installation. + +```bash +curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh +``` + +### Install WebAssembly target + +Hyperbridge's blockchain runtime compiles to wasm which allows it's code to be forklessly upgraded. In order to build hyperbridge we need the wasm toolchain installed. + +```bash +rustup update nightly +rustup target add wasm32-unknown-unknown --toolchain nightly +``` + +### Clone the repo + +Download a local copy of the repo and checkout the latest release tag + +```bash +git clone https://github.com/polytope-labs/hyperbridge.git +cd ./hyperbidge +git checkout ${latest-tag} +``` + +### Build the node + +```bash +cargo build --release -p hyperbridge +``` + +## Running the node + +```bash +hyperbridge --chain=messier --enable-offchain-indexing --base-path=$HOME/.hyperbridge --pruning-archive +``` ## Running a local tesnet with zombienet -1. Download the zombienet binary for your os from https://github.com/paritytech/zombienet -2. Run `./zombienet spawn --provider native ./scripts/zombienet/local-testnet.toml` +Download the zombienet binary for your operating system [here](https://github.com/paritytech/zombienet). + +```bash +zombienet spawn --provider native ./scripts/zombienet/local-testnet.toml +``` ## Running a local testnet with docker -1. Build the hyperbridge docker image by running `docker build -t hyperbridge -f ./scripts/docker/Dockerfile .` -2. Navigate to `scripts/parachain-launch` -3. Run `docker compose up` +Build the and run the hyperbridge docker image locally by running + +```bash +docker build -t hyperbridge -f ./scripts/docker/Dockerfile . +cd scripts/parachain-launch +docker compose up +``` \ No newline at end of file diff --git a/docs/package-lock.json b/docs/package-lock.json new file mode 100644 index 000000000..f4d1d7d5e --- /dev/null +++ b/docs/package-lock.json @@ -0,0 +1,9100 @@ +{ + "name": "hyperbridge", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "hyperbridge", + "version": "0.0.0", + "dependencies": { + "prettier": "^3.2.2", + "react": "latest", + "react-dom": "latest", + "rehype-katex": "^7.0.0", + "rehype-stringify": "^10.0.0", + "remark-math": "^6.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.0", + "vocs": "latest" + }, + "devDependencies": { + "vite-plugin-radar": "^0.9.2" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "dependencies": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz", + "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.7", + "@babel/parser": "^7.23.6", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "dependencies": { + "@babel/types": "^7.23.6", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.8.tgz", + "integrity": "sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==", + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", + "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.23.3.tgz", + "integrity": "sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.23.3.tgz", + "integrity": "sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.8.tgz", + "integrity": "sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz", + "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==", + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.6", + "@babel/types": "^7.23.6", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@clack/core": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@clack/core/-/core-0.3.3.tgz", + "integrity": "sha512-5ZGyb75BUBjlll6eOa1m/IZBxwk91dooBWhPSL67sWcLS0zt9SnswRL0l26TVdBhb0wnWORRxUn//uH6n4z7+A==", + "dependencies": { + "picocolors": "^1.0.0", + "sisteransi": "^1.0.5" + } + }, + "node_modules/@clack/prompts": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-0.7.0.tgz", + "integrity": "sha512-0MhX9/B4iL6Re04jPrttDm+BsP8y6mS7byuv0BvXgdXhbV5PdlsHt55dvNsuBCPZ7xq1oTAOOuotR9NFbQyMSA==", + "bundleDependencies": [ + "is-unicode-supported" + ], + "dependencies": { + "@clack/core": "^0.3.3", + "is-unicode-supported": "*", + "picocolors": "^1.0.0", + "sisteransi": "^1.0.5" + } + }, + "node_modules/@clack/prompts/node_modules/is-unicode-supported": { + "version": "1.3.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", + "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz", + "integrity": "sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.6.tgz", + "integrity": "sha512-bSC9YVUjADDy1gae8RrioINU6e1lCkg3VGVwm0QQ2E1CWcC4gnMce9+B6RpxuSsrsXsk1yojn7sp1fnG8erE2g==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.6.tgz", + "integrity": "sha512-YnYSCceN/dUzUr5kdtUzB+wZprCafuD89Hs0Aqv9QSdwhYQybhXTaSTcrl6X/aWThn1a/j0eEpUBGOE7269REg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.6.tgz", + "integrity": "sha512-MVcYcgSO7pfu/x34uX9u2QIZHmXAB7dEiLQC5bBl5Ryqtpj9lT2sg3gNDEsrPEmimSJW2FXIaxqSQ501YLDsZQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.6.tgz", + "integrity": "sha512-bsDRvlbKMQMt6Wl08nHtFz++yoZHsyTOxnjfB2Q95gato+Yi4WnRl13oC2/PJJA9yLCoRv9gqT/EYX0/zDsyMA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.6.tgz", + "integrity": "sha512-xh2A5oPrYRfMFz74QXIQTQo8uA+hYzGWJFoeTE8EvoZGHb+idyV4ATaukaUvnnxJiauhs/fPx3vYhU4wiGfosg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.6.tgz", + "integrity": "sha512-EnUwjRc1inT4ccZh4pB3v1cIhohE2S4YXlt1OvI7sw/+pD+dIE4smwekZlEPIwY6PhU6oDWwITrQQm5S2/iZgg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.6.tgz", + "integrity": "sha512-Uh3HLWGzH6FwpviUcLMKPCbZUAFzv67Wj5MTwK6jn89b576SR2IbEp+tqUHTr8DIl0iDmBAf51MVaP7pw6PY5Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.6.tgz", + "integrity": "sha512-7YdGiurNt7lqO0Bf/U9/arrPWPqdPqcV6JCZda4LZgEn+PTQ5SMEI4MGR52Bfn3+d6bNEGcWFzlIxiQdS48YUw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.6.tgz", + "integrity": "sha512-bUR58IFOMJX523aDVozswnlp5yry7+0cRLCXDsxnUeQYJik1DukMY+apBsLOZJblpH+K7ox7YrKrHmJoWqVR9w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.6.tgz", + "integrity": "sha512-ujp8uoQCM9FRcbDfkqECoARsLnLfCUhKARTP56TFPog8ie9JG83D5GVKjQ6yVrEVdMie1djH86fm98eY3quQkQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.6.tgz", + "integrity": "sha512-y2NX1+X/Nt+izj9bLoiaYB9YXT/LoaQFYvCkVD77G/4F+/yuVXYCWz4SE9yr5CBMbOxOfBcy/xFL4LlOeNlzYQ==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.6.tgz", + "integrity": "sha512-09AXKB1HDOzXD+j3FdXCiL/MWmZP0Ex9eR8DLMBVcHorrWJxWmY8Nms2Nm41iRM64WVx7bA/JVHMv081iP2kUA==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.6.tgz", + "integrity": "sha512-AmLhMzkM8JuqTIOhxnX4ubh0XWJIznEynRnZAVdA2mMKE6FAfwT2TWKTwdqMG+qEaeyDPtfNoZRpJbD4ZBv0Tg==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.6.tgz", + "integrity": "sha512-Y4Ri62PfavhLQhFbqucysHOmRamlTVK10zPWlqjNbj2XMea+BOs4w6ASKwQwAiqf9ZqcY9Ab7NOU4wIgpxwoSQ==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.6.tgz", + "integrity": "sha512-SPUiz4fDbnNEm3JSdUW8pBJ/vkop3M1YwZAVwvdwlFLoJwKEZ9L98l3tzeyMzq27CyepDQ3Qgoba44StgbiN5Q==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.6.tgz", + "integrity": "sha512-a3yHLmOodHrzuNgdpB7peFGPx1iJ2x6m+uDvhP2CKdr2CwOaqEFMeSqYAHU7hG+RjCq8r2NFujcd/YsEsFgTGw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.6.tgz", + "integrity": "sha512-EanJqcU/4uZIBreTrnbnre2DXgXSa+Gjap7ifRfllpmyAU7YMvaXmljdArptTHmjrkkKm9BK6GH5D5Yo+p6y5A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.6.tgz", + "integrity": "sha512-xaxeSunhQRsTNGFanoOkkLtnmMn5QbA0qBhNet/XLVsc+OVkpIWPHcr3zTW2gxVU5YOHFbIHR9ODuaUdNza2Vw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.6.tgz", + "integrity": "sha512-gnMnMPg5pfMkZvhHee21KbKdc6W3GR8/JuE0Da1kjwpK6oiFU3nqfHuVPgUX2rsOx9N2SadSQTIYV1CIjYG+xw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.6.tgz", + "integrity": "sha512-G95n7vP1UnGJPsVdKXllAJPtqjMvFYbN20e8RK8LVLhlTiSOH1sd7+Gt7rm70xiG+I5tM58nYgwWrLs6I1jHqg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.6.tgz", + "integrity": "sha512-96yEFzLhq5bv9jJo5JhTs1gI+1cKQ83cUpyxHuGqXVwQtY5Eq54ZEsKs8veKtiKwlrNimtckHEkj4mRh4pPjsg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.6.tgz", + "integrity": "sha512-n6d8MOyUrNp6G4VSpRcgjs5xj4A91svJSaiwLIDWVWEsZtpN5FA9NlBbZHDmAJc2e8e6SF4tkBD3HAvPF+7igA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.3.tgz", + "integrity": "sha512-O0WKDOo0yhJuugCx6trZQj5jVJ9yR0ystG2JaNAemYUWce+pmM6WUEFIibnWyEJKdrDxhm75NoSRME35FNaM/Q==", + "dependencies": { + "@floating-ui/utils": "^0.2.0" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.4.tgz", + "integrity": "sha512-jByEsHIY+eEdCjnTVu+E3ephzTOzkQ8hgUfGwos+bg7NlH33Zc5uO+QHz1mrQUOgIKKDD1RtS201P9NvAfq3XQ==", + "dependencies": { + "@floating-ui/core": "^1.5.3", + "@floating-ui/utils": "^0.2.0" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.5.tgz", + "integrity": "sha512-UsBK30Bg+s6+nsgblXtZmwHhgS2vmbuQK22qgt2pTQM6M3X6H1+cQcLXqgRY3ihVLcZJE6IvqDQozhsnIVqK/Q==", + "dependencies": { + "@floating-ui/dom": "^1.5.4" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz", + "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==" + }, + "node_modules/@hono/node-server": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.4.0.tgz", + "integrity": "sha512-bhDkhldW7w9VgjrX0gG1vJ2YyvTxFWd5WG9nHjSR4UauhVECQZC3qy7mVVuQ054I5NWhKttHfKzYfoPzmUzAjw==", + "engines": { + "node": ">=18.14.1" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.21.tgz", + "integrity": "sha512-SRfKmRe1KvYnxjEMtxEr+J4HIeMX5YBg/qhRHpxEIGjhX1rshcHlnFUE9K0GazhVKWM7B+nARSkV8LuvJdJ5/g==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mdx-js/mdx": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.0.0.tgz", + "integrity": "sha512-Icm0TBKBLYqroYbNW3BPnzMGn+7mwpQOK310aZ7+fkCtiU3aqv2cdcX+nd0Ydo3wI5Rx8bX2Z2QmGb/XcAClCw==", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdx": "^2.0.0", + "collapse-white-space": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-build-jsx": "^3.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-util-to-js": "^2.0.0", + "estree-walker": "^3.0.0", + "hast-util-to-estree": "^3.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "markdown-extensions": "^2.0.0", + "periscopic": "^3.0.0", + "remark-mdx": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "source-map": "^0.7.0", + "unified": "^11.0.0", + "unist-util-position-from-estree": "^2.0.0", + "unist-util-stringify-position": "^4.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/react": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.0.0.tgz", + "integrity": "sha512-nDctevR9KyYFyV+m+/+S4cpzCWHqj+iHDHq3QrsWezcC+B17uZdIWgCguESUkwFhM3n/56KxWVE3V6EokrmONQ==", + "dependencies": { + "@types/mdx": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@types/react": ">=16", + "react": ">=16" + } + }, + "node_modules/@mdx-js/rollup": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@mdx-js/rollup/-/rollup-3.0.0.tgz", + "integrity": "sha512-ITvGiwPGEBW+D7CCnpSA9brzAosIWHAi4y+Air8wgfLnez8aWue50avHtWMfnFLCp7vt+JQ9UM8nwfuQuuydxw==", + "dependencies": { + "@mdx-js/mdx": "^3.0.0", + "@rollup/pluginutils": "^5.0.0", + "source-map": "^0.7.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "rollup": ">=2" + } + }, + "node_modules/@noble/hashes": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", + "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@radix-ui/colors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/colors/-/colors-3.0.0.tgz", + "integrity": "sha512-FUOsGBkHrYJwCSEtWRCIfQbZG7q1e6DgxCIOe1SUQzDe/7rXXeA47s8yCn6fuTNQAj1Zq4oTFi9Yjp3wzElcxg==" + }, + "node_modules/@radix-ui/primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.1.tgz", + "integrity": "sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==", + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@radix-ui/react-accordion": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.1.2.tgz", + "integrity": "sha512-fDG7jcoNKVjSK6yfmuAs0EnPDro0WMXIhMtXdTBWqEioVW206ku+4Lw07e+13lUkFkpoEQ2PdeMIAGpdqEAmDg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-collapsible": "1.0.3", + "@radix-ui/react-collection": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-controllable-state": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-arrow": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.3.tgz", + "integrity": "sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collapsible": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.0.3.tgz", + "integrity": "sha512-UBmVDkmR6IvDsloHVN+3rtx4Mi5TFvylYXpluuv0f37dtaz3H99bp8No0LGXRigVpl3UAT4l9j6bIchh42S/Gg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-controllable-state": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collection": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.3.tgz", + "integrity": "sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz", + "integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.1.tgz", + "integrity": "sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.0.5.tgz", + "integrity": "sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.5", + "@radix-ui/react-focus-guards": "1.0.1", + "@radix-ui/react-focus-scope": "1.0.4", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-portal": "1.0.4", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-use-controllable-state": "1.0.1", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-direction": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.1.tgz", + "integrity": "sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.5.tgz", + "integrity": "sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-escape-keydown": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.1.tgz", + "integrity": "sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.4.tgz", + "integrity": "sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-icons": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.3.0.tgz", + "integrity": "sha512-jQxj/0LKgp+j9BiTXz3O3sgs26RNet2iLWmsPyRz2SIcR4q/4SbazXfnYwbAr+vLYKSfc7qxzyGQA1HLlYiuNw==", + "peerDependencies": { + "react": "^16.x || ^17.x || ^18.x" + } + }, + "node_modules/@radix-ui/react-id": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.1.tgz", + "integrity": "sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-label": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.0.2.tgz", + "integrity": "sha512-N5ehvlM7qoTLx7nWPodsPYPgMzA5WM8zZChQg8nyFJKnDO5WHdba1vv5/H6IO5LtJMfD2Q3wh1qHFGNtK0w3bQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-navigation-menu": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.1.4.tgz", + "integrity": "sha512-Cc+seCS3PmWmjI51ufGG7zp1cAAIRqHVw7C9LOA2TZ+R4hG6rDvHcTqIsEEFLmZO3zNVH72jOOE7kKNy8W+RtA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-collection": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.5", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1", + "@radix-ui/react-use-previous": "1.0.1", + "@radix-ui/react-visually-hidden": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.0.7.tgz", + "integrity": "sha512-shtvVnlsxT6faMnK/a7n0wptwBD23xc1Z5mdrtKLwVEfsEMXodS0r5s0/g5P0hX//EKYZS2sxUjqfzlg52ZSnQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.5", + "@radix-ui/react-focus-guards": "1.0.1", + "@radix-ui/react-focus-scope": "1.0.4", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-popper": "1.1.3", + "@radix-ui/react-portal": "1.0.4", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-use-controllable-state": "1.0.1", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popper": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.3.tgz", + "integrity": "sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1", + "@radix-ui/react-use-rect": "1.0.1", + "@radix-ui/react-use-size": "1.0.1", + "@radix-ui/rect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-portal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.4.tgz", + "integrity": "sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-presence": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.1.tgz", + "integrity": "sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz", + "integrity": "sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-roving-focus": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.4.tgz", + "integrity": "sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-collection": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz", + "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tabs": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.0.4.tgz", + "integrity": "sha512-egZfYY/+wRNCflXNHx+dePvnz9FbmssDTJBtgRfDY7e8SE5oIo3Py2eCB1ckAbh1Q7cQ/6yJZThJ++sgbxibog==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-roving-focus": "1.0.4", + "@radix-ui/react-use-controllable-state": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz", + "integrity": "sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz", + "integrity": "sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz", + "integrity": "sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz", + "integrity": "sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-previous": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.0.1.tgz", + "integrity": "sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-rect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.0.1.tgz", + "integrity": "sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/rect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-size": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.0.1.tgz", + "integrity": "sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-visually-hidden": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.3.tgz", + "integrity": "sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/rect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.0.1.tgz", + "integrity": "sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==", + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@remix-run/router": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.14.2.tgz", + "integrity": "sha512-ACXpdMM9hmKZww21yEqWwiLws/UPLhNKvimN8RrYSqPSvB3ov7sLvAcfvaxePeLvccTQKGdkDIhLYApZVDFuKg==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", + "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.5.tgz", + "integrity": "sha512-idWaG8xeSRCfRq9KpRysDHJ/rEHBEXcHuJ82XY0yYFIWnLMjZv9vF/7DOq8djQ2n3Lk6+3qfSH8AqlmHlmi1MA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.5.tgz", + "integrity": "sha512-f14d7uhAMtsCGjAYwZGv6TwuS3IFaM4ZnGMUn3aCBgkcHAYErhV1Ad97WzBvS2o0aaDv4mVz+syiN0ElMyfBPg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.5.tgz", + "integrity": "sha512-ndoXeLx455FffL68OIUrVr89Xu1WLzAG4n65R8roDlCoYiQcGGg6MALvs2Ap9zs7AHg8mpHtMpwC8jBBjZrT/w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.5.tgz", + "integrity": "sha512-UmElV1OY2m/1KEEqTlIjieKfVwRg0Zwg4PLgNf0s3glAHXBN99KLpw5A5lrSYCa1Kp63czTpVll2MAqbZYIHoA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.5.tgz", + "integrity": "sha512-Q0LcU61v92tQB6ae+udZvOyZ0wfpGojtAKrrpAaIqmJ7+psq4cMIhT/9lfV6UQIpeItnq/2QDROhNLo00lOD1g==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.5.tgz", + "integrity": "sha512-dkRscpM+RrR2Ee3eOQmRWFjmV/payHEOrjyq1VZegRUa5OrZJ2MAxBNs05bZuY0YCtpqETDy1Ix4i/hRqX98cA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.5.tgz", + "integrity": "sha512-QaKFVOzzST2xzY4MAmiDmURagWLFh+zZtttuEnuNn19AiZ0T3fhPyjPPGwLNdiDT82ZE91hnfJsUiDwF9DClIQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.5.tgz", + "integrity": "sha512-HeGqmRJuyVg6/X6MpE2ur7GbymBPS8Np0S/vQFHDmocfORT+Zt76qu+69NUoxXzGqVP1pzaY6QIi0FJWLC3OPA==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.5.tgz", + "integrity": "sha512-Dq1bqBdLaZ1Gb/l2e5/+o3B18+8TI9ANlA1SkejZqDgdU/jK/ThYaMPMJpVMMXy2uRHvGKbkz9vheVGdq3cJfA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.5.tgz", + "integrity": "sha512-ezyFUOwldYpj7AbkwyW9AJ203peub81CaAIVvckdkyH8EvhEIoKzaMFJj0G4qYJ5sw3BpqhFrsCc30t54HV8vg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.5.tgz", + "integrity": "sha512-aHSsMnUw+0UETB0Hlv7B/ZHOGY5bQdwMKJSzGfDfvyhnpmVxLMGnQPGNE9wgqkLUs3+gbG1Qx02S2LLfJ5GaRQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.5.tgz", + "integrity": "sha512-AiqiLkb9KSf7Lj/o1U3SEP9Zn+5NuVKgFdRIZkvd4N0+bYrTOovVd0+LmYCPQGbocT4kvFyK+LXCDiXPBF3fyA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.5.tgz", + "integrity": "sha512-1q+mykKE3Vot1kaFJIDoUFv5TuW+QQVaf2FmTT9krg86pQrGStOSJJ0Zil7CFagyxDuouTepzt5Y5TVzyajOdQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/acorn": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", + "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", + "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + }, + "node_modules/@types/estree-jsx": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.3.tgz", + "integrity": "sha512-pvQ+TKeRHeiUGRhvYwRrQ/ISnohKkSJR14fT2yqyZ4e9K5vqc7hrtY2Y1Dw0ZwAzQ6DQsxsaCUuSIIi8v0Cq6w==", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/hast": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.3.tgz", + "integrity": "sha512-2fYGlaDy/qyLlhidX42wAH0KBi2TCjKMH8CHmBXgRlJ3Y+OXTiqsPQ6IWarZKwF1JoUcAJdPogv1d4b0COTpmQ==", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/katex": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.7.tgz", + "integrity": "sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==" + }, + "node_modules/@types/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@types/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-s84fKOrzqqNCAPljhVyC5TjAo6BH4jKHw9NRNFNiRUY5QSgZCmVm5XILlWbisiKl+0OcS7eWihmKGS5akc2iQw==", + "deprecated": "This is a stub types definition. lz-string provides its own type definitions, so you do not need this installed.", + "dependencies": { + "lz-string": "*" + } + }, + "node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mdx": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.10.tgz", + "integrity": "sha512-Rllzc5KHk0Al5/WANwgSPl1/CwjqCy+AZrGd78zuK+jO9aDM6ffblZ+zIjgPNAaEBmlO0RYDvLNh7wD0zKVgEg==" + }, + "node_modules/@types/ms": { + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" + }, + "node_modules/@types/node": { + "version": "20.11.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.3.tgz", + "integrity": "sha512-nrlmbvGPNGaj84IJZXMPhQuCMEVTT/hXZMJJG/aIqVL9fKxqk814sGGtJA4GI6hpJSLQjpi6cn0Qx9eOf9SDVg==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.11", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", + "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==", + "peer": true + }, + "node_modules/@types/react": { + "version": "18.2.48", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.48.tgz", + "integrity": "sha512-qboRCl6Ie70DQQG9hhNREz81jqC1cs9EVNcjQ1AU+jH6NFfSAhVVbrrY/+nSF+Bsk4AOwm9Qa61InvMCyV+H3w==", + "peer": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", + "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==", + "peer": true + }, + "node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + }, + "node_modules/@typescript/twoslash": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@typescript/twoslash/-/twoslash-3.2.4.tgz", + "integrity": "sha512-/TCIOuPQaKltzUUT1qJo6mplYwjbAxkaSFvkeZD3FeFt3Ovt+HJi8xisu8rcLyDRmM3VJ0+jAx+AAICwn4Zlhw==", + "dependencies": { + "@types/lz-string": "^1.3.0", + "@typescript/vfs": "1.5.0", + "debug": "^4.1.1", + "lz-string": "^1.4.4" + }, + "peerDependencies": { + "typescript": "*" + } + }, + "node_modules/@typescript/vfs": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@typescript/vfs/-/vfs-1.5.0.tgz", + "integrity": "sha512-AJS307bPgbsZZ9ggCT3wwpg3VbTKMFNHfaY/uF0ahSkYYrPF2dSSKDNIDIQAHm9qJqbLvCsSJH7yN4Vs/CsMMg==", + "dependencies": { + "debug": "^4.1.1" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" + }, + "node_modules/@vanilla-extract/babel-plugin-debug-ids": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@vanilla-extract/babel-plugin-debug-ids/-/babel-plugin-debug-ids-1.0.3.tgz", + "integrity": "sha512-vm4jYu1xhSa6ofQ9AhIpR3DkAp4c+eoR1Rpm8/TQI4DmWbmGbOjYRcqV0aWsfaIlNhN4kFuxFMKBNN9oG6iRzA==", + "dependencies": { + "@babel/core": "^7.20.7" + } + }, + "node_modules/@vanilla-extract/css": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@vanilla-extract/css/-/css-1.14.0.tgz", + "integrity": "sha512-rYfm7JciWZ8PFzBM/HDiE2GLnKI3xJ6/vdmVJ5BSgcCZ5CxRlM9Cjqclni9lGzF3eMOijnUhCd/KV8TOzyzbMA==", + "dependencies": { + "@emotion/hash": "^0.9.0", + "@vanilla-extract/private": "^1.0.3", + "chalk": "^4.1.1", + "css-what": "^6.1.0", + "cssesc": "^3.0.0", + "csstype": "^3.0.7", + "deep-object-diff": "^1.1.9", + "deepmerge": "^4.2.2", + "media-query-parser": "^2.0.2", + "modern-ahocorasick": "^1.0.0", + "outdent": "^0.8.0" + } + }, + "node_modules/@vanilla-extract/dynamic": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@vanilla-extract/dynamic/-/dynamic-2.1.0.tgz", + "integrity": "sha512-8zl0IgBYRtgD1h+56Zu13wHTiMTJSVEa4F7RWX9vTB/5Xe2KtjoiqApy/szHPVFA56c+ex6A4GpCQjT1bKXbYw==", + "dependencies": { + "@vanilla-extract/private": "^1.0.3" + } + }, + "node_modules/@vanilla-extract/integration": { + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/@vanilla-extract/integration/-/integration-6.2.4.tgz", + "integrity": "sha512-+AfymNMVq9sEUe0OJpdCokmPZg4Zi6CqKaW/PnUOfDwEn53ighHOMOBl5hAgxYR8Kiz9NG43Bn00mkjWlFi+ng==", + "dependencies": { + "@babel/core": "^7.20.7", + "@babel/plugin-syntax-typescript": "^7.20.0", + "@vanilla-extract/babel-plugin-debug-ids": "^1.0.2", + "@vanilla-extract/css": "^1.14.0", + "esbuild": "0.17.6", + "eval": "0.1.8", + "find-up": "^5.0.0", + "javascript-stringify": "^2.0.1", + "lodash": "^4.17.21", + "mlly": "^1.1.0", + "outdent": "^0.8.0", + "vite": "^4.1.4", + "vite-node": "^0.28.5" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/rollup": { + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/vite": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.2.tgz", + "integrity": "sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w==", + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/@vanilla-extract/integration/node_modules/vite/node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/@vanilla-extract/private": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@vanilla-extract/private/-/private-1.0.3.tgz", + "integrity": "sha512-17kVyLq3ePTKOkveHxXuIJZtGYs+cSoev7BlP+Lf4916qfDhk/HBjvlYDe8egrea7LNPHKwSZJK/bzZC+Q6AwQ==" + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.2.0.tgz", + "integrity": "sha512-+MHTH/e6H12kRp5HUkzOGqPMksezRMmW+TNzlh/QXfI8rRf6l2Z2yH/v12no1UvTwhZgEDMuQ7g7rrfMseU6FQ==", + "dependencies": { + "@babel/core": "^7.23.3", + "@babel/plugin-transform-react-jsx-self": "^7.23.3", + "@babel/plugin-transform-react-jsx-source": "^7.23.3", + "@types/babel__core": "^7.20.4", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0" + } + }, + "node_modules/@vocs/vanilla-extract-vite-plugin": { + "version": "3.9.3-0", + "resolved": "https://registry.npmjs.org/@vocs/vanilla-extract-vite-plugin/-/vanilla-extract-vite-plugin-3.9.3-0.tgz", + "integrity": "sha512-FfsRecpuCKWcLK9SIk3AOHPkSPmatYb7D/EsK+RkK4CJCc7TCOcOhiiCA4h/0EVyX+AfxUlKmAuJKktED0tx1w==", + "dependencies": { + "@vanilla-extract/integration": "^6.2.4", + "outdent": "^0.8.0", + "postcss": "^8.3.6", + "postcss-load-config": "^4.0.1" + }, + "peerDependencies": { + "vite": "^2.2.3 || ^3.0.0 || ^4.0.3 || ^5.0.0" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, + "node_modules/aria-hidden": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.3.tgz", + "integrity": "sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/astring": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/astring/-/astring-1.8.6.tgz", + "integrity": "sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==", + "bin": { + "astring": "bin/astring" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.16", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", + "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001538", + "fraction.js": "^4.3.6", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bcp-47-match": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/bcp-47-match/-/bcp-47-match-2.0.3.tgz", + "integrity": "sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "dependencies": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", + "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001565", + "electron-to-chromium": "^1.4.601", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001577", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001577.tgz", + "integrity": "sha512-rs2ZygrG1PNXMfmncM0B5H1hndY5ZCC9b5TkFaVNfZ+AUlyqcMyVIQtc3fsezi0NUCk5XZfDf9WS6WxMxnfdrg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chroma-js": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chroma-js/-/chroma-js-2.4.2.tgz", + "integrity": "sha512-U9eDw6+wt7V8z5NncY2jJfZa+hUH8XEj8FQHgFJTrUFnJfXYf4Ml4adI2vXZOjqRDpFWtYVWypDfZwnJ+HIR4A==" + }, + "node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dependencies": { + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clsx": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz", + "integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/collapse-white-space": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", + "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + }, + "node_modules/create-vocs": { + "version": "1.0.0-alpha.3", + "resolved": "https://registry.npmjs.org/create-vocs/-/create-vocs-1.0.0-alpha.3.tgz", + "integrity": "sha512-jP+KC26XcWVAFRbDt311V4fsHakTDxJ9cDyMSKmUpiqbp3mDs0WDeckiSzhf3qgpiHHHzcbuTmm4yDZgoFkddA==", + "dependencies": { + "@clack/prompts": "^0.7.0", + "cac": "^6.7.14", + "detect-package-manager": "^3.0.1", + "fs-extra": "^11.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "create-vocs": "_lib/bin.js" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-selector-parser": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-3.0.4.tgz", + "integrity": "sha512-pnmS1dbKsz6KA4EW4BznyPL2xxkNDRg62hcD0v8g6DEw2W7hxOln5M953jsp9hmw5Dg57S6o/A8GOn37mbAgcQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/deep-object-diff": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.9.tgz", + "integrity": "sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA==" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" + }, + "node_modules/detect-package-manager": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/detect-package-manager/-/detect-package-manager-3.0.1.tgz", + "integrity": "sha512-qoHDH6+lMcpJPAScE7+5CYj91W0mxZNXTwZPrCqi1KMk+x+AoQScQ2V1QyqTln1rHU5Haq5fikvOGHv+leKD8A==", + "dependencies": { + "execa": "^5.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/direction": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/direction/-/direction-2.0.1.tgz", + "integrity": "sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA==", + "bin": { + "direction": "cli.js" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.632", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.632.tgz", + "integrity": "sha512-JGmudTwg7yxMYvR/gWbalqqQiyu7WTFv2Xu3vw4cJHXPFxNgAk0oy8UHaer8nLF4lZJa+rNoj6GsrKIVJTV6Tw==" + }, + "node_modules/emoji-regex": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", + "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/esbuild": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.6.tgz", + "integrity": "sha512-TKFRp9TxrJDdRWfSsSERKEovm6v30iHnrjlcGhLBOtReE28Yp1VSBRfO3GTaOFMoxsNerx4TjrhzSuma9ha83Q==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.6", + "@esbuild/android-arm64": "0.17.6", + "@esbuild/android-x64": "0.17.6", + "@esbuild/darwin-arm64": "0.17.6", + "@esbuild/darwin-x64": "0.17.6", + "@esbuild/freebsd-arm64": "0.17.6", + "@esbuild/freebsd-x64": "0.17.6", + "@esbuild/linux-arm": "0.17.6", + "@esbuild/linux-arm64": "0.17.6", + "@esbuild/linux-ia32": "0.17.6", + "@esbuild/linux-loong64": "0.17.6", + "@esbuild/linux-mips64el": "0.17.6", + "@esbuild/linux-ppc64": "0.17.6", + "@esbuild/linux-riscv64": "0.17.6", + "@esbuild/linux-s390x": "0.17.6", + "@esbuild/linux-x64": "0.17.6", + "@esbuild/netbsd-x64": "0.17.6", + "@esbuild/openbsd-x64": "0.17.6", + "@esbuild/sunos-x64": "0.17.6", + "@esbuild/win32-arm64": "0.17.6", + "@esbuild/win32-ia32": "0.17.6", + "@esbuild/win32-x64": "0.17.6" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/estree-util-attach-comments": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz", + "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==", + "dependencies": { + "@types/estree": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-build-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz", + "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-walker": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-to-js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz", + "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "astring": "^1.8.0", + "source-map": "^0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-value-to-estree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.0.1.tgz", + "integrity": "sha512-b2tdzTurEIbwRh+mKrEcaWfu1wgb8J1hVsgREg7FFiecWwK/PhO8X0kyc+0bIcKNtD4sqxIdNoRy6/p/TvECEA==", + "dependencies": { + "@types/estree": "^1.0.0", + "is-plain-obj": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/remcohaszing" + } + }, + "node_modules/estree-util-visit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz", + "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eval": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", + "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", + "dependencies": { + "@types/node": "*", + "require-like": ">= 0.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fastq": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", + "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fault": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", + "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", + "dependencies": { + "format": "^0.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/format": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", + "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/github-slugger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==" + }, + "node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hast-util-classnames": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-classnames/-/hast-util-classnames-3.0.0.tgz", + "integrity": "sha512-tI3JjoGDEBVorMAWK4jNRsfLMYmih1BUOG3VV36pH36njs1IEl7xkNrVTD2mD2yYHmQCa5R/fj61a8IAF4bRaQ==", + "dependencies": { + "@types/hast": "^3.0.0", + "space-separated-tokens": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-dom": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hast-util-from-dom/-/hast-util-from-dom-5.0.0.tgz", + "integrity": "sha512-d6235voAp/XR3Hh5uy7aGLbM3S4KamdW0WEgOaU1YoewnuYw4HXb5eRtv9g65m/RFGEfUY1Mw4UqCc5Y8L4Stg==", + "dependencies": { + "@types/hast": "^3.0.0", + "hastscript": "^8.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-html": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.1.tgz", + "integrity": "sha512-RXQBLMl9kjKVNkJTIO6bZyb2n+cUH8LFaSSzo82jiLT6Tfc+Pt7VQCS+/h3YwG4jaNE2TA2sdJisGWR+aJrp0g==", + "dependencies": { + "@types/hast": "^3.0.0", + "devlop": "^1.1.0", + "hast-util-from-parse5": "^8.0.0", + "parse5": "^7.0.0", + "vfile": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-html-isomorphic": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hast-util-from-html-isomorphic/-/hast-util-from-html-isomorphic-2.0.0.tgz", + "integrity": "sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-from-dom": "^5.0.0", + "hast-util-from-html": "^2.0.0", + "unist-util-remove-position": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz", + "integrity": "sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "hastscript": "^8.0.0", + "property-information": "^6.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-has-property": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-3.0.0.tgz", + "integrity": "sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-heading-rank": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-heading-rank/-/hast-util-heading-rank-3.0.0.tgz", + "integrity": "sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-is-element": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", + "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.0.1.tgz", + "integrity": "sha512-5m1gmba658Q+lO5uqL5YNGQWeh1MYWZbZmWrM5lncdcuiXuo5E2HT/CIOp0rLF8ksfSwiCVJ3twlgVRyTGThGA==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-from-parse5": "^8.0.0", + "hast-util-to-parse5": "^8.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "parse5": "^7.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-select": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/hast-util-select/-/hast-util-select-6.0.2.tgz", + "integrity": "sha512-hT/SD/d/Meu+iobvgkffo1QecV8WeKWxwsNMzcTJsKw1cKTQKSR/7ArJeURLNJF9HDjp9nVoORyNNJxrvBye8Q==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "bcp-47-match": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "css-selector-parser": "^3.0.0", + "devlop": "^1.0.0", + "direction": "^2.0.0", + "hast-util-has-property": "^3.0.0", + "hast-util-to-string": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "not": "^0.1.0", + "nth-check": "^2.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-estree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.0.tgz", + "integrity": "sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-attach-comments": "^3.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-object": "^0.4.0", + "unist-util-position": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-html": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.0.tgz", + "integrity": "sha512-IVGhNgg7vANuUA2XKrT6sOIIPgaYZnmLx3l/CCOAK0PtgfoHrZwX7jCSYyFxHTrGmC6S9q8aQQekjp4JPZF+cw==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-raw": "^9.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-jsx-runtime": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.0.tgz", + "integrity": "sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-object": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-jsx-runtime/node_modules/inline-style-parser": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.2.tgz", + "integrity": "sha512-EcKzdTHVe8wFVOGEYXiW9WmJXPjqi1T+234YpJr98RiFYKHV3cdy1+3mkTE+KHTHxFFLH51SfaGOoUdW+v7ViQ==" + }, + "node_modules/hast-util-to-jsx-runtime/node_modules/style-to-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.5.tgz", + "integrity": "sha512-rDRwHtoDD3UMMrmZ6BzOW0naTjMsVZLIjsGleSKS/0Oz+cgCfAPRspaqJuE8rDzpKha/nEvnM0IF4seEAZUTKQ==", + "dependencies": { + "inline-style-parser": "0.2.2" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz", + "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-string": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.0.tgz", + "integrity": "sha512-OGkAxX1Ua3cbcW6EJ5pT/tslVb90uViVkcJ4ZZIMW/R33DX/AkcJcRrPebPwJkHYwlDHXz4aIwvAAaAdtrACFA==", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-text": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.0.tgz", + "integrity": "sha512-EWiE1FSArNBPUo1cKWtzqgnuRQwEeQbQtnFJRYV1hb1BWDgrAlBU0ExptvZMM/KSA82cDpm2sFGf3Dmc5Mza3w==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "unist-util-find-after": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-8.0.0.tgz", + "integrity": "sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hono": { + "version": "3.12.5", + "resolved": "https://registry.npmjs.org/hono/-/hono-3.12.5.tgz", + "integrity": "sha512-oIuZfMGwk/IUIAOW+9/VZhT4g99Wce39GYBs2nhY7386iYFAprI8vF2/+nfXjzlrY+CXGJ0+GxF833nN0oRp2w==", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-reference": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", + "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/javascript-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz", + "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==" + }, + "node_modules/jiti": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/katex": { + "version": "0.16.9", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.9.tgz", + "integrity": "sha512-fsSYjWS0EEOwvy81j3vRA8TEAhQhKiqO+FQaKWp0m39qwOzHVBgAUBIXWj1pB+O2W3fIpNa6Y9KSKCVbfPhyAQ==", + "funding": [ + "https://opencollective.com/katex", + "https://github.com/sponsors/katex" + ], + "dependencies": { + "commander": "^8.3.0" + }, + "bin": { + "katex": "cli.js" + } + }, + "node_modules/katex/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "engines": { + "node": ">= 12" + } + }, + "node_modules/lilconfig": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", + "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", + "engines": { + "node": ">=14" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/log-symbols": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", + "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", + "dependencies": { + "chalk": "^5.0.0", + "is-unicode-supported": "^1.1.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/mark.js": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", + "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==" + }, + "node_modules/markdown-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", + "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/markdown-table": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz", + "integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-directive": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.0.0.tgz", + "integrity": "sha512-JUpYOqKI4mM3sZcNxmF/ox04XYFFkNwr0CFlrQIkCwbvH0xzMCqkMqAde9wRd80VAhaUrwFwKm2nxretdT1h7Q==", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz", + "integrity": "sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", + "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-frontmatter": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz", + "integrity": "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "escape-string-regexp": "^5.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-extension-frontmatter": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz", + "integrity": "sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.0.tgz", + "integrity": "sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz", + "integrity": "sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-math": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-math/-/mdast-util-math-3.0.0.tgz", + "integrity": "sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "longest-streak": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.1.0", + "unist-util-remove-position": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", + "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.0.tgz", + "integrity": "sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.0.0.tgz", + "integrity": "sha512-XZuPPzQNBPAlaqsTTgRrcJnyFbSOBovSadFgbFu8SnuNgm+6Bdx1K+IWoitsmj6Lq6MNtI+ytOqwN70n//NaBA==", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-remove-position": "^5.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.0.0.tgz", + "integrity": "sha512-xadSsJayQIucJ9n053dfQwVu1kuXg7jCTdYsMK8rqzKZh52nLfSH/k0sAxE0u+pj/zKZX+o5wB+ML5mRayOxFA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.1.0.tgz", + "integrity": "sha512-/e2l/6+OdGp/FB+ctrJ9Avz71AN/GRH3oi/3KAx/kMnoUsD6q0woXlDT8lLEeViVKE7oZxE7RXzvO3T8kF2/sA==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", + "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/media-query-parser": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/media-query-parser/-/media-query-parser-2.0.2.tgz", + "integrity": "sha512-1N4qp+jE0pL5Xv4uEcwVUhIkwdUO3S/9gML90nqKA7v7FcOS5vUtatfzok9S9U1EJU8dHWlcv95WLnKmmxZI9w==", + "dependencies": { + "@babel/runtime": "^7.12.5" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromark": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", + "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.0.tgz", + "integrity": "sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-directive": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.0.tgz", + "integrity": "sha512-61OI07qpQrERc+0wEysLHMvoiO3s2R56x5u7glHq2Yqq6EHbH4dW25G9GfDdGCDYqA21KE6DWgNSzxSwHc2hSg==", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "parse-entities": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-frontmatter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz", + "integrity": "sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==", + "dependencies": { + "fault": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.0.0.tgz", + "integrity": "sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg==", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.0.0.tgz", + "integrity": "sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg==", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw==", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.0.0.tgz", + "integrity": "sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw==", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.0.1.tgz", + "integrity": "sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw==", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-math": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-math/-/micromark-extension-math-3.0.0.tgz", + "integrity": "sha512-iJ2Q28vBoEovLN5o3GO12CpqorQRYDPT+p4zW50tGwTfJB+iv/VnB6Ini+gqa24K97DwptMBBIvVX6Bjk49oyQ==", + "dependencies": { + "@types/katex": "^0.16.0", + "devlop": "^1.0.0", + "katex": "^0.16.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdx-expression": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz", + "integrity": "sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-mdx-expression": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-mdx-jsx": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.0.tgz", + "integrity": "sha512-uvhhss8OGuzR4/N17L1JwvmJIpPhAd8oByMawEKx6NVdBCbesjH4t+vjEp3ZXft9DwvlKSD07fCeI44/N0Vf2w==", + "dependencies": { + "@types/acorn": "^4.0.0", + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "micromark-factory-mdx-expression": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdx-md": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz", + "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz", + "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", + "dependencies": { + "acorn": "^8.0.0", + "acorn-jsx": "^5.0.0", + "micromark-extension-mdx-expression": "^3.0.0", + "micromark-extension-mdx-jsx": "^3.0.0", + "micromark-extension-mdx-md": "^2.0.0", + "micromark-extension-mdxjs-esm": "^3.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs-esm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz", + "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", + "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", + "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-mdx-expression": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.1.tgz", + "integrity": "sha512-F0ccWIUHRLRrYp5TC9ZYXmZo+p2AM13ggbsW4T0b5CRKP8KHVRB8t4pwtBgTxtjRmwrK0Irwm7vs2JOZabHZfg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", + "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", + "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", + "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", + "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", + "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", + "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", + "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", + "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", + "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-events-to-acorn": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.2.tgz", + "integrity": "sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/acorn": "^4.0.0", + "@types/estree": "^1.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "estree-util-visit": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "vfile-message": "^4.0.0" + } + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", + "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", + "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", + "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", + "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.0.tgz", + "integrity": "sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minisearch": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-6.3.0.tgz", + "integrity": "sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ==" + }, + "node_modules/mlly": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.5.0.tgz", + "integrity": "sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ==", + "dependencies": { + "acorn": "^8.11.3", + "pathe": "^1.1.2", + "pkg-types": "^1.0.3", + "ufo": "^1.3.2" + } + }, + "node_modules/modern-ahocorasick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/modern-ahocorasick/-/modern-ahocorasick-1.0.1.tgz", + "integrity": "sha512-yoe+JbhTClckZ67b2itRtistFKf8yPYelHLc7e5xAwtNAXxM6wJTUx2C7QeVSJFDzKT7bCIFyBVybPMKvmB9AA==" + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/not": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/not/-/not-0.1.0.tgz", + "integrity": "sha512-5PDmaAsVfnWUgTUbJ3ERwn7u79Z0dYxN9ErxCpVJJqe2RK0PJ3z+iFUxuqjwtlDDegXvtWoxD/3Fzxox7tFGWA==" + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-7.0.1.tgz", + "integrity": "sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw==", + "dependencies": { + "chalk": "^5.3.0", + "cli-cursor": "^4.0.0", + "cli-spinners": "^2.9.0", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^1.3.0", + "log-symbols": "^5.1.0", + "stdin-discarder": "^0.1.0", + "string-width": "^6.1.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/outdent": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/outdent/-/outdent-0.8.0.tgz", + "integrity": "sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==" + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-entities": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", + "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" + }, + "node_modules/parse-numeric-range": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", + "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==" + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", + "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==" + }, + "node_modules/periscopic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", + "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^3.0.0", + "is-reference": "^3.0.0" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-types": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", + "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", + "dependencies": { + "jsonc-parser": "^3.2.0", + "mlly": "^1.2.0", + "pathe": "^1.1.0" + } + }, + "node_modules/postcss": { + "version": "8.4.33", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", + "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.11" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.15", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", + "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "node_modules/prettier": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.2.tgz", + "integrity": "sha512-HTByuKZzw7utPiDO523Tt2pLtEyK7OibUD9suEJQrPUCYQqrHr74GGX6VidMrovbf/I50mPqr8j/II6oBAuc5A==", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/property-information": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.4.0.tgz", + "integrity": "sha512-9t5qARVofg2xQqKtytzt+lZ4d1Qvj8t5B8fEwXK6qOfgRLgH/b13QlgEyDh033NOS31nXeFbYv7CLUDG1CeifQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-fast-compare": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", + "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==" + }, + "node_modules/react-helmet": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz", + "integrity": "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==", + "dependencies": { + "object-assign": "^4.1.1", + "prop-types": "^15.7.2", + "react-fast-compare": "^3.1.1", + "react-side-effect": "^2.1.0" + }, + "peerDependencies": { + "react": ">=16.3.0" + } + }, + "node_modules/react-intersection-observer": { + "version": "9.5.3", + "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.5.3.tgz", + "integrity": "sha512-NJzagSdUPS5rPhaLsHXYeJbsvdpbJwL6yCHtMk91hc0ufQ2BnXis+0QQ9NBh6n9n+Q3OyjR6OQLShYbaNBkThQ==", + "peerDependencies": { + "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/react-refresh": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", + "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-remove-scroll": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz", + "integrity": "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==", + "dependencies": { + "react-remove-scroll-bar": "^2.3.3", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz", + "integrity": "sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==", + "dependencies": { + "react-style-singleton": "^2.2.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-router": { + "version": "6.21.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.21.2.tgz", + "integrity": "sha512-jJcgiwDsnaHIeC+IN7atO0XiSRCrOsQAHHbChtJxmgqG2IaYQXSnhqGb5vk2CU/wBQA12Zt+TkbuJjIn65gzbA==", + "dependencies": { + "@remix-run/router": "1.14.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.21.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.21.2.tgz", + "integrity": "sha512-tE13UukgUOh2/sqYr6jPzZTzmzc70aGRP4pAjG2if0IP3aUT+sBtAKUJh0qMh0zylJHGLmzS+XWVaON4UklHeg==", + "dependencies": { + "@remix-run/router": "1.14.2", + "react-router": "6.21.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/react-side-effect": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.2.tgz", + "integrity": "sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw==", + "peerDependencies": { + "react": "^16.3.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", + "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "dependencies": { + "get-nonce": "^1.0.0", + "invariant": "^2.2.4", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, + "node_modules/rehype-autolink-headings": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/rehype-autolink-headings/-/rehype-autolink-headings-7.1.0.tgz", + "integrity": "sha512-rItO/pSdvnvsP4QRB1pmPiNHUskikqtPojZKJPPPAVx9Hj8i8TwMBhofrrAYRhYOOBZH9tgmG5lPqDLuIWPWmw==", + "dependencies": { + "@types/hast": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-heading-rank": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "unified": "^11.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-class-names": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/rehype-class-names/-/rehype-class-names-1.0.14.tgz", + "integrity": "sha512-eFBt6Qxb7K77y6P82tUtN9rKpU7guWlaK4XA4RrrSFHkUTCvr2D3cgb9OR5d4t1AaGOvR59FH9nRwUnbpn9AEg==", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-classnames": "^3.0.0", + "hast-util-select": "^6.0.0", + "unified": "^10.1.2" + } + }, + "node_modules/rehype-class-names/node_modules/@types/unist": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" + }, + "node_modules/rehype-class-names/node_modules/unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "dependencies": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-class-names/node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-class-names/node_modules/vfile": { + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", + "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-class-names/node_modules/vfile-message": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", + "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-katex": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/rehype-katex/-/rehype-katex-7.0.0.tgz", + "integrity": "sha512-h8FPkGE00r2XKU+/acgqwWUlyzve1IiOKwsEkg4pDL3k48PiE0Pt+/uLtVHDVkN1yA4iurZN6UES8ivHVEQV6Q==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/katex": "^0.16.0", + "hast-util-from-html-isomorphic": "^2.0.0", + "hast-util-to-text": "^4.0.0", + "katex": "^0.16.0", + "unist-util-visit-parents": "^6.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-parse": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.0.tgz", + "integrity": "sha512-WG7nfvmWWkCR++KEkZevZb/uw41E8TsH4DsY9UxsTbIXCVGbAs4S+r8FrQ+OtH5EEQAs+5UxKC42VinkmpA1Yw==", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-from-html": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-pretty-code": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/rehype-pretty-code/-/rehype-pretty-code-0.12.3.tgz", + "integrity": "sha512-6NbIit8A3hLrkKBEbNs862jVnTLeIOM2AmM0VZ/MtyHb+OuNMeCa6UZSx6UG4zrobm5tY9efTwhih1exsGYsiw==", + "dependencies": { + "@types/hast": "^3.0.3", + "hast-util-to-string": "^3.0.0", + "parse-numeric-range": "^1.3.0", + "rehype-parse": "^9.0.0", + "unified": "^11.0.4", + "unist-util-visit": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "shikiji": "^0.7.0 || ^0.8.0 || ^0.9.0" + } + }, + "node_modules/rehype-slug": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/rehype-slug/-/rehype-slug-6.0.0.tgz", + "integrity": "sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==", + "dependencies": { + "@types/hast": "^3.0.0", + "github-slugger": "^2.0.0", + "hast-util-heading-rank": "^3.0.0", + "hast-util-to-string": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-stringify": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.0.tgz", + "integrity": "sha512-1TX1i048LooI9QoecrXy7nGFFbFSufxVRAfc6Y9YMRAi56l+oB0zP51mLSV312uRuvVLPV1opSlJmslozR1XHQ==", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-to-html": "^9.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-directive": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-directive/-/remark-directive-3.0.0.tgz", + "integrity": "sha512-l1UyWJ6Eg1VPU7Hm/9tt0zKtReJQNOA4+iDMAxTyZNWnJnFlbS/7zhiel/rogTLQ2vMYwDzSJa4BiVNqGlqIMA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-directive": "^3.0.0", + "micromark-extension-directive": "^3.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-frontmatter": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz", + "integrity": "sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-frontmatter": "^2.0.0", + "micromark-extension-frontmatter": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-gfm": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.0.tgz", + "integrity": "sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-math": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/remark-math/-/remark-math-6.0.0.tgz", + "integrity": "sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-math": "^3.0.0", + "micromark-extension-math": "^3.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.0.0.tgz", + "integrity": "sha512-O7yfjuC6ra3NHPbRVxfflafAj3LTwx3b73aBvkEFU5z4PsD6FD4vrqJAkE5iNGLz71GdjXfgRqm3SQ0h0VuE7g==", + "dependencies": { + "mdast-util-mdx": "^3.0.0", + "micromark-extension-mdxjs": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx-frontmatter": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-mdx-frontmatter/-/remark-mdx-frontmatter-4.0.0.tgz", + "integrity": "sha512-PZzAiDGOEfv1Ua7exQ8S5kKxkD8CDaSb4nM+1Mprs6u8dyvQifakh+kCj6NovfGXW+bTvrhjaR3srzjS2qJHKg==", + "dependencies": { + "@types/mdast": "^4.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-util-value-to-estree": "^3.0.0", + "toml": "^3.0.0", + "unified": "^11.0.0", + "yaml": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/remcohaszing" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.0.tgz", + "integrity": "sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/require-like": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", + "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==", + "engines": { + "node": "*" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.5.tgz", + "integrity": "sha512-E4vQW0H/mbNMw2yLSqJyjtkHY9dslf/p0zuT1xehNRqUTBOFMqEjguDvqhXr7N7r/4ttb2jr4T41d3dncmIgbQ==", + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.9.5", + "@rollup/rollup-android-arm64": "4.9.5", + "@rollup/rollup-darwin-arm64": "4.9.5", + "@rollup/rollup-darwin-x64": "4.9.5", + "@rollup/rollup-linux-arm-gnueabihf": "4.9.5", + "@rollup/rollup-linux-arm64-gnu": "4.9.5", + "@rollup/rollup-linux-arm64-musl": "4.9.5", + "@rollup/rollup-linux-riscv64-gnu": "4.9.5", + "@rollup/rollup-linux-x64-gnu": "4.9.5", + "@rollup/rollup-linux-x64-musl": "4.9.5", + "@rollup/rollup-win32-arm64-msvc": "4.9.5", + "@rollup/rollup-win32-ia32-msvc": "4.9.5", + "@rollup/rollup-win32-x64-msvc": "4.9.5", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/shikiji": { + "version": "0.9.19", + "resolved": "https://registry.npmjs.org/shikiji/-/shikiji-0.9.19.tgz", + "integrity": "sha512-Kw2NHWktdcdypCj1GkKpXH4o6Vxz8B8TykPlPuLHOGSV8VkhoCLcFOH4k19K4LXAQYRQmxg+0X/eM+m2sLhAkg==", + "dependencies": { + "shikiji-core": "0.9.19" + } + }, + "node_modules/shikiji-core": { + "version": "0.9.19", + "resolved": "https://registry.npmjs.org/shikiji-core/-/shikiji-core-0.9.19.tgz", + "integrity": "sha512-AFJu/vcNT21t0e6YrfadZ+9q86gvPum6iywRyt1OtIPjPFe25RQnYJyxHQPMLKCCWA992TPxmEmbNcOZCAJclw==" + }, + "node_modules/shikiji-transformers": { + "version": "0.9.19", + "resolved": "https://registry.npmjs.org/shikiji-transformers/-/shikiji-transformers-0.9.19.tgz", + "integrity": "sha512-lGLI7Z8frQrIBbhZ74/eiJtxMoCQRbpaHEB+gcfvdIy+ZFaAtXncJGnc52932/UET+Y4GyKtwwC/vjWUCp+c/Q==", + "dependencies": { + "shikiji": "0.9.19" + } + }, + "node_modules/shikiji-twoslash": { + "version": "0.9.19", + "resolved": "https://registry.npmjs.org/shikiji-twoslash/-/shikiji-twoslash-0.9.19.tgz", + "integrity": "sha512-wwF5GWEZuIFWjGioqPygcnnQmEduK5bdV9L2AzjmEVJD7Xt1Zg/K8bN7StxPBR/1xmbJ9RnHYeFvqCxySpXEsw==", + "dependencies": { + "@typescript/twoslash": "^3.2.4", + "shikiji-core": "0.9.19" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + }, + "node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stdin-discarder": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz", + "integrity": "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==", + "dependencies": { + "bl": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/string-width": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-6.1.0.tgz", + "integrity": "sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^10.2.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.3.tgz", + "integrity": "sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/style-to-object": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.4.tgz", + "integrity": "sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==", + "dependencies": { + "inline-style-parser": "0.1.1" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz", + "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.19.1", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/tailwindcss/node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/toml": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", + "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==" + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", + "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ua-parser-js": { + "version": "1.0.37", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.37.tgz", + "integrity": "sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/ufo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.2.tgz", + "integrity": "sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==" + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, + "node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-find-after": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz", + "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz", + "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", + "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/use-callback-ref": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.1.tgz", + "integrity": "sha512-Lg4Vx1XZQauB42Hw3kK7JM6yjVjgFmFC5/Ab797s79aARomD2nEErc4mCgM8EZrARLmmbWpi5DGCadmK50DcAQ==", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sidecar": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", + "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.2.tgz", + "integrity": "sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vite": { + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.12.tgz", + "integrity": "sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w==", + "dependencies": { + "esbuild": "^0.19.3", + "postcss": "^8.4.32", + "rollup": "^4.2.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-node": { + "version": "0.28.5", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.28.5.tgz", + "integrity": "sha512-LmXb9saMGlrMZbXTvOveJKwMTBTNUH66c8rJnQ0ZPNX+myPEol64+szRzXtV5ORb0Hb/91yq+/D3oERoyAt6LA==", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.3.4", + "mlly": "^1.1.0", + "pathe": "^1.1.0", + "picocolors": "^1.0.0", + "source-map": "^0.6.1", + "source-map-support": "^0.5.21", + "vite": "^3.0.0 || ^4.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": ">=v14.16.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/vite-node/node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/vite-node/node_modules/rollup": { + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/vite-node/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vite-node/node_modules/vite": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.2.tgz", + "integrity": "sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w==", + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-plugin-radar": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/vite-plugin-radar/-/vite-plugin-radar-0.9.2.tgz", + "integrity": "sha512-cIwA7EU/6kqIPjSAFIjpnleJBtDVxw0lBwMyWIp8kit/O3XehHly+B6jCN7FbfQjniRxEtBarEzrLB+FmKSnAg==", + "dev": true, + "peerDependencies": { + "vite": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.11.tgz", + "integrity": "sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz", + "integrity": "sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.11.tgz", + "integrity": "sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.11.tgz", + "integrity": "sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz", + "integrity": "sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz", + "integrity": "sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz", + "integrity": "sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz", + "integrity": "sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz", + "integrity": "sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz", + "integrity": "sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz", + "integrity": "sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz", + "integrity": "sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz", + "integrity": "sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz", + "integrity": "sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz", + "integrity": "sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz", + "integrity": "sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz", + "integrity": "sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz", + "integrity": "sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz", + "integrity": "sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz", + "integrity": "sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz", + "integrity": "sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz", + "integrity": "sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.11.tgz", + "integrity": "sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.11", + "@esbuild/android-arm": "0.19.11", + "@esbuild/android-arm64": "0.19.11", + "@esbuild/android-x64": "0.19.11", + "@esbuild/darwin-arm64": "0.19.11", + "@esbuild/darwin-x64": "0.19.11", + "@esbuild/freebsd-arm64": "0.19.11", + "@esbuild/freebsd-x64": "0.19.11", + "@esbuild/linux-arm": "0.19.11", + "@esbuild/linux-arm64": "0.19.11", + "@esbuild/linux-ia32": "0.19.11", + "@esbuild/linux-loong64": "0.19.11", + "@esbuild/linux-mips64el": "0.19.11", + "@esbuild/linux-ppc64": "0.19.11", + "@esbuild/linux-riscv64": "0.19.11", + "@esbuild/linux-s390x": "0.19.11", + "@esbuild/linux-x64": "0.19.11", + "@esbuild/netbsd-x64": "0.19.11", + "@esbuild/openbsd-x64": "0.19.11", + "@esbuild/sunos-x64": "0.19.11", + "@esbuild/win32-arm64": "0.19.11", + "@esbuild/win32-ia32": "0.19.11", + "@esbuild/win32-x64": "0.19.11" + } + }, + "node_modules/vocs": { + "version": "1.0.0-alpha.17", + "resolved": "https://registry.npmjs.org/vocs/-/vocs-1.0.0-alpha.17.tgz", + "integrity": "sha512-XrxECpwEOHTs6zH4fQLnG8R1HgfsbhP5dPx/q2fkcgnpe+05GnbC2hhcogLKArSWB61fn54oAwQtbv1vHNSf6g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "dependencies": { + "@hono/node-server": "^1.2.3", + "@mdx-js/react": "^3.0.0", + "@mdx-js/rollup": "^3.0.0", + "@noble/hashes": "^1.3.2", + "@popperjs/core": "^2.11.8", + "@radix-ui/colors": "^3.0.0", + "@radix-ui/react-accordion": "^1.1.2", + "@radix-ui/react-dialog": "^1.0.5", + "@radix-ui/react-icons": "^1.3.0", + "@radix-ui/react-label": "^2.0.2", + "@radix-ui/react-navigation-menu": "^1.1.4", + "@radix-ui/react-popover": "^1.0.7", + "@radix-ui/react-tabs": "^1.0.4", + "@typescript/twoslash": "^3.2.4", + "@vanilla-extract/css": "^1.14.0", + "@vanilla-extract/dynamic": "^2.1.0", + "@vitejs/plugin-react": "4.2.0", + "@vocs/vanilla-extract-vite-plugin": "^3.9.3-0", + "autoprefixer": "^10.4.16", + "cac": "^6.7.14", + "chroma-js": "^2.4.2", + "clsx": "^2.0.0", + "compression": "^1.7.4", + "create-vocs": "^1.0.0-alpha.3", + "fs-extra": "^11.1.1", + "globby": "^13.2.2", + "hastscript": "^8.0.0", + "hono": "^3.10.2", + "mark.js": "^8.11.1", + "mdast-util-directive": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm": "^3.0.0", + "mdast-util-to-hast": "^13.0.2", + "minimatch": "^9.0.3", + "minisearch": "^6.3.0", + "ora": "^7.0.1", + "postcss": "^8.4.31", + "react-helmet": "^6.1.0", + "react-intersection-observer": "^9.5.3", + "react-router-dom": "^6.20.0", + "rehype-autolink-headings": "^7.1.0", + "rehype-class-names": "^1.0.14", + "rehype-pretty-code": "~0.12.2", + "rehype-slug": "^6.0.0", + "remark-directive": "^3.0.0", + "remark-frontmatter": "^5.0.0", + "remark-gfm": "^4.0.0", + "remark-mdx-frontmatter": "^4.0.0", + "remark-parse": "^11.0.0", + "serve-static": "^1.15.0", + "shikiji": "~0.9.19", + "shikiji-transformers": "~0.9.19", + "shikiji-twoslash": "~0.9.19", + "tailwindcss": "^3.3.3", + "toml": "^3.0.0", + "ua-parser-js": "^1.0.36", + "unified": "^11.0.4", + "unist-util-visit": "^5.0.0", + "vite": "^5.0.2" + }, + "bin": { + "vocs": "_lib/cli/index.js" + }, + "peerDependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0" + } + }, + "node_modules/web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/yaml": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "engines": { + "node": ">= 14" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/docs/package.json b/docs/package.json new file mode 100644 index 000000000..9bbc6d97a --- /dev/null +++ b/docs/package.json @@ -0,0 +1,25 @@ +{ + "name": "hyperbridge", + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vocs dev", + "build": "vocs build", + "preview": "vocs preview", + "prettier": "npm run prettier" + }, + "dependencies": { + "prettier": "^3.2.2", + "react": "latest", + "react-dom": "latest", + "rehype-katex": "^7.0.0", + "rehype-stringify": "^10.0.0", + "remark-math": "^6.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.0", + "vocs": "latest" + }, + "devDependencies": { + "vite-plugin-radar": "^0.9.2" + } +} diff --git a/docs/pages/evm/delivery.mdx b/docs/pages/evm/delivery.mdx new file mode 100644 index 000000000..e69de29bb diff --git a/docs/pages/evm/fees.mdx b/docs/pages/evm/fees.mdx new file mode 100644 index 000000000..e69de29bb diff --git a/docs/pages/evm/integration.mdx b/docs/pages/evm/integration.mdx new file mode 100644 index 000000000..e69de29bb diff --git a/docs/pages/evm/networks.mdx b/docs/pages/evm/networks.mdx new file mode 100644 index 000000000..e69de29bb diff --git a/docs/pages/index.mdx b/docs/pages/index.mdx new file mode 100644 index 000000000..fb2d4997f --- /dev/null +++ b/docs/pages/index.mdx @@ -0,0 +1,20 @@ +--- +title: Hyperbridge +description: Hyperbridge Protocol Specification +--- + +# Introduction + +Secure interoperability requires the verification of consensus proofs, consensus fault proofs, and state transition validity proofs. Blockchains that want to securely communicate with each other must perform these operations onchain, so that they can be convinced of the finalized (irreversible) state of their counterparty. Finally, through the use of state proofs, they are then able to read the outgoing message queue of their counter party. + +These operations are very expensive and do not scale when we especially want to facilitate the communication of multiple blockchains. This neccessitates the coprocessor model where we perform the computations offchain and report back onchain with cryptographic proofs of the correct execution. + +Hyperbrige is an instance of such a coprocessor. More specifically it is a [crypto-economic coprocessor](https://blog.polytope.technology/cryptoeconomic-coprocessors). Combined with high-economic security, Hyperbridge is able to scale secure cross-chain interoperability to all blockchains. + +
+ An interoperability coprocessor for secure cross-chain communication +
An interoperability coprocessor for secure cross-chain communication
+
\ No newline at end of file diff --git a/docs/pages/network/node.mdx b/docs/pages/network/node.mdx new file mode 100644 index 000000000..20a7e9e74 --- /dev/null +++ b/docs/pages/network/node.mdx @@ -0,0 +1,119 @@ +--- +title: Node Operators +description: Running the Hyperbridge node +--- + +# Running a node + +We provide a variety of ways to obtain a node for running. For now we only officially support x86 linux environments. + +## System Requirements + +Since hyperbridge is a substrate-based blockchain, it has the same hardware requirements as the [Polkadot validator node](https://wiki.polkadot.network/docs/maintain-guides-how-to-validate-polkadot#requirements). + +## Docker + +Hyperbridge is available at the official docker repository [`polytopelabs/hyperbridge`](https://hub.docker.com/r/polytopelabs/hyperbridge) + +```bash +docker run polytopelabs/hyperbridge:latest --chain=messier +``` + +## Prebuilt Binaries + +You can install a prebuilt binary for the hyperbridge node with the following bash script + +```bash +wget -q --show-progress https://github.com/polytope-labs/hyperbridge/releases/download/v0.2.0/hyperbridge-x86_64-unknown-linux-gnu.tar.gz +tar -xvzf hyperbridge-x86_64-unknown-linux-gnu.tar.gz +# copy to $PATH +cp hyperbridge-x86_64-unknown-linux-gnu/hyperbridge $HOME/.local/bin/ +``` + +or a 1-liner shell script + +```bash +curl --proto '=https' --tlsv1.2 -LsSf https://github.com/polytope-labs/hyperbridge/releases/download/v0.2.0/hyperbridge-installer.sh | sh +``` + +## Building from source + +You can follow the steps below if you'd prefer to build the hyperbridge node from source: + +::::steps + +### Install Dependencies + +Building the hyperbridge node requires some dependencies + +- git +- clang +- curl +- make +- build-essential +- libssl-dev +- llvm +- libudev-dev +- protobuf-compiler + +:::code-group + +```bash [Debian] +sudo apt install --assume-yes git clang curl libssl-dev llvm libudev-dev make protobuf-compiler +``` + +```bash [Arch] +pacman -Syu --needed --noconfirm curl git clang make protobuf +``` + +```bash [Fedora] +sudo dnf update +sudo dnf install clang curl git openssl-devel make protobuf-compiler +``` + +```bash [Opensuse] +sudo zypper install clang curl git openssl-devel llvm-devel libudev-devel make protobuf +``` + +::: + +### Install rust compiler + +If you don't have an already existing rust installation, you can install it using the one-liner below. Follow the prompts displayed to proceed with a default installation. + +```bash +curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh +``` + +### Install WebAssembly target + +Hyperbridge's blockchain runtime compiles to wasm which allows it's code to be forklessly upgraded. In order to build hyperbridge we need the wasm toolchain installed. + +```bash +rustup update nightly +rustup target add wasm32-unknown-unknown --toolchain nightly +``` + +### Clone the repo + +Download a local copy of the repo and checkout the latest release tag + +```bash +git clone https://github.com/polytope-labs/hyperbridge.git +cd ./hyperbidge +git checkout v0.2.0 +``` + +### Build the node + +```bash +cargo build --release -p hyperbridge +``` + +:::: + +## Running the node + +```bash +hyperbridge --chain=messier --enable-offchain-indexing --base-path=$HOME/.hyperbridge --pruning-archive +``` diff --git a/docs/pages/network/relayer.mdx b/docs/pages/network/relayer.mdx new file mode 100644 index 000000000..784a1c5e0 --- /dev/null +++ b/docs/pages/network/relayer.mdx @@ -0,0 +1,32 @@ +--- +title: Relayers +description: Running the tesseract relayer +--- + +# Relayers + +Critical to the function of Hyperbridge are relayers who transmit requests & responses across it's connected chains. These relayers much like node operators earn rewards for relaying requests. Since request execution fees are paid for ahead of time on the source chain by the initiating application. Relayers can relay and pay for the execution of these requests on the destination chain and redeem their fees on the source chain. This works by the relayer showing state proofs of request delivery to the hyperbridge parachain. Hyperbridge then authorizes the release of the fees to the relayer on the source chain through an ISMP request. + +## Installation + +The tesseract relayer is available through the following methods + +### Prebuilt binaries + +Unavailable at this time + +### Docker + +Tesseract is available at the official docker repository [`polytopelabs/tesseract`](https://hub.docker.com/r/polytopelabs/tesseract) + +```bash +docker run polytopelabs/tesseract:latest --config=/path/to/config +``` + +### Building from source? + +Unfortunately, tesseract is closed-souce for now. + +## Running the relayer + +### Config diff --git a/docs/pages/polkadot/delivery.mdx b/docs/pages/polkadot/delivery.mdx new file mode 100644 index 000000000..e69de29bb diff --git a/docs/pages/polkadot/fees.mdx b/docs/pages/polkadot/fees.mdx new file mode 100644 index 000000000..e69de29bb diff --git a/docs/pages/polkadot/modules.mdx b/docs/pages/polkadot/modules.mdx new file mode 100644 index 000000000..e69de29bb diff --git a/docs/pages/polkadot/networks.mdx b/docs/pages/polkadot/networks.mdx new file mode 100644 index 000000000..e69de29bb diff --git a/docs/pages/polkadot/parachains.mdx b/docs/pages/polkadot/parachains.mdx new file mode 100644 index 000000000..e69de29bb diff --git a/docs/pages/polkadot/rpc.mdx b/docs/pages/polkadot/rpc.mdx new file mode 100644 index 000000000..9bfad9395 --- /dev/null +++ b/docs/pages/polkadot/rpc.mdx @@ -0,0 +1,65 @@ +# Query interface + +Communication in ISMP is facilitated by offchain components, like relayers and self relaying wallets. +For these components to work, they need to be able to interact with the onchain components +of the protocol. +For this purpose we define an interface that should be provided by state machines to allow querying ISMP data. +Query results are formatted as JSON + +```rust +/// A query for a request or a response +pub struct Query { + /// The source of the request + pub source_chain: StateMachine, + /// the request destination + pub dest_chain: StateMachine, + /// The request nonce + pub nonce: u64, +} + +pub struct Proof { + /// Scale encoded proof + pub proof: Vec, + /// Height at which proof was recovered + pub height: u32, +} + +pub trait QueryInterface { + /// Query full request data from the ismp pallet + fn query_requests(&self, query: Vec) -> Result>; + + /// Query full response data from the ismp pallet + fn query_responses(&self, query: Vec) -> Result>; + + /// Query membership proof for some requests + fn query_request_proof(&self, height: u32, query: Vec) -> Result; + + /// Query membership proof for some responses + fn query_response_proof(&self, height: u32, query: Vec) -> Result; + + /// Query membership or non-membership state proof for some keys + fn query_state_proof(&self, height: u32, keys: Vec>) -> Result; + + /// Query scale encoded consensus state + fn query_consensus_state( + &self, + height: Option, + client_id: ConsensusClientId, + ) -> Result>; + + /// Query timestamp of when this client was last updated in seconds + fn query_consensus_update_time(&self, client_id: ConsensusClientId) -> Result; + + /// Query the latest height for a state machine + fn query_state_machine_latest_height(&self, id: StateMachineId) -> Result; + + /// Query ISMP Events that were deposited in a series of blocks + fn query_events( + &self, + block_numbers: Vec, + ) -> Result>>; + + /// Query get requests that have no response receipt that have a specified retrieval height <= `height`. + fn pending_get_requests(&self, height: u64) -> Result>; +} +``` diff --git a/docs/pages/polkadot/solochains.mdx b/docs/pages/polkadot/solochains.mdx new file mode 100644 index 000000000..e69de29bb diff --git a/docs/pages/protocol/consensus.mdx b/docs/pages/protocol/consensus.mdx new file mode 100644 index 000000000..60618127f --- /dev/null +++ b/docs/pages/protocol/consensus.mdx @@ -0,0 +1,257 @@ +--- +title: Consensus Clients +description: The ISMP protocol specification for consensus clients +--- + +# Blockchains as State Machines + + + +In a generalised blockchain model, we can describe a blockchain with blocks $B_1, B_2, B_3 \dots B_n$ as a state machine. To create new blocks, we apply a _state transition function_ to the state $S_i$ at block height $B_i$ with a transaction list $T_i$, which results in some new state $S_{i+1}$. This can be more formally expressed as follows: + +$$ +transition(S_i, T_i) = S_{i+1} + + +$$ + +This transactions list $T_i$ can be seen as a list of database transactions $\{t_1, t_{2}, t_{3} \dots t_n\}$ +, where the state $S_i$ represents a **key-value database**. These transactions may create, update or delete items in this key-value database. It's important to note that in this state machine model, our state transition function returns a new copy of the database. This means that the output of a successful transition is fed into the input for the next state transition. Therefore, at every new block $B_i$ is a corresponding state $S_i$ that describes the current state of the blockchain database after applying the list of transactions $T_i$. + +**Data verifiability is blockchain’s main value proposition**. Which is why In order to arrive at the latest (trusted) state of the blockchain, **it is necessary for blockchain nodes to re-apply all the transactions that have been made since the genesis block**. By re-applying each transaction, each participant is able to produce the new state of the blockchain. This mechanism is what allows blockchains to be considered a tamper-proof database that can be trusted by all participants. + +
+ Each block holds a new state. +
Each block holds a new state.
+
+ +> There may potentially be multiple state transitions for a given block, as you can see in the diagram: $B_3$, $B_4$, $B_5$ all have multiple state transitions. This is where the role of a consensus algorithm aka _fork choice rule_ comes into play. + +
+ Consensus is denoted by the blocks marked as green. +
Consensus is denoted by the blocks marked as green.
+
+ +> The role of consensus in a blockchain is to tell us which sequence of state transitions are final or can be trusted. They do so by employing a combination of game theoretic and cryptographic protocols to ensure that the network will always agree on **one history of state transitions and not more.** + +ISMP's messaging abstraction is built on top of the `ConsensusClient`. We refer to it as a consensus client because that is precisely what it should be: a client that observes a blockchain's consensus messages in order to determine what is the canonical chain on the network. Armed with the knowledge of the canonical state of the chain, we are now able to verify the state proofs of the requests & responses that have been committed to the state trie. + +This document formally defines the `ConsensusClient`, which serves as an oracle for the canonical state of a state machine, and the corresponding handlers which are used to modify the state of the consensus client. + +## `ConsensusState` + +We define the `ConsensusState` as the minimum data required by consensus clients in order to verify incoming consensus messages and advance it's view of the state machines running on this consenus system. + +## `StateCommitment` + +We define the `StateCommitment` as a succinct, cryptographic commitment to the entire blockchain state at an arbitrary block height. The state scheme used to derive this commitment must support partial reveals proofs that have a complexity of $O(\log_n)$ or better. This state commitment is also colloquially known as the _state_root_. + +## `ConsensusClient` + +The consensus client is one half of a full blockchain client. It verifies only consensus proofs to advance its view of the blockchain network, where full nodes verify both consensus proofs and the state transition function of the network. This makes consensus clients suitable for resource-constrained environments like blockchains, enabling them to become interoperable with other blockchains in a trust-free manner. + +
+ A Full Node +
+ +The quest for a mechanism by which a consensus client may observe and come to conclusions about the canonical state of another blockchain leads us to understand the concept of safety in distributed systems. We elaborate further on this in our research article on consensus proofs $^{[1]}$. In summary, we show that safety in on-chain consensus clients will require the use of a challenge window, even after consensus proof verification. This allows us to detect potential Byzantine behavior that may arise without the challenge window in place. + +```rust +/// The consensus state of the consensus client +type ConsensusState = Vec; + +/// Consensus state identifier +type ConsensusStateId = [u8; 4]; + +/// Static identifier for a concrete implementation of the [`ConsensusClient`] interface +type ConsensusClientId = [u8; 4]; + +/// 256 bit hash type +type H256 = [u8; 32]; + +enum StateMachine { + // .. supported state machines +} + +/// The state commitment represents a commitment to the state machine's state (trie) at a given +/// height. Optionally holds a commitment to an overlay trie if supported by the +/// state machine. +pub struct StateCommitment { + /// Timestamp in seconds + pub timestamp: u64, + /// Root hash of the request/response overlay trie if the state machine supports it. + pub overlay_root: Option, + /// Root hash of the global state trie. + pub state_root: H256, +} + +/// Identifies a state commitment at a given height +pub struct IntermediateState { + /// The state machine identifier + pub commitment: StateCommitment, + /// the corresponding block height + pub height: u64, +} + +/// We define the consensus client as a module that handles logic for consensus proof verification. +pub trait ConsensusClient { + /// Verify the associated consensus proof, using the trusted consensus state. + fn verify_consensus( + &self, + host: &dyn IsmpHost, + consensus_state_id: ConsensusStateId, + trusted_consensus_state: Vec, + proof: Vec, + ) -> Result<(Vec, BTreeMap>), Error>; + + /// Given two distinct consensus proofs, verify that they're both valid and represent + /// conflicting views of the network. returns Ok if they're both valid. + fn verify_fraud_proof( + &self, + host: &dyn IsmpHost, + trusted_consensus_state: Vec, + proof_1: Vec, + proof_2: Vec, + ) -> Result<(), Error>; + + /// Return an implementation of a [`StateMachineClient`] for the given state machine. + /// Return an error if the identifier is unknown. + fn state_machine(&self, id: StateMachine) -> Result, Error>; +} +``` + +## Handlers + +The ISMP consensus subsystem exposes a set of `handlers`, which can be seen as transactions that allows offchain parties to manage the state of it's various consensus clients. + +### `create_client` + +```rust + +/// Since consensus systems may come to conensus about the state of multiple state machines, we +/// identify each state machine individually. +pub struct StateMachineId { + /// The state machine identifier + pub state_id: StateMachine, + /// It's consensus state identifier + pub consensus_state_id: ConsensusStateId, +} + +/// Used for creating the initial consensus state for a given consensus client. +pub struct CreateConsensusState { + /// Serialized consensus state + pub consensus_state: Vec, + /// Consensus client id + pub consensus_client_id: ConsensusClientId, + /// The consensus state Id + pub consensus_state_id: ConsensusStateId, + /// Unbonding period for this consensus state. + pub unbonding_period: u64, + /// Challenge period for this consensus state + pub challenge_period: u64, + /// State machine commitments + pub state_machine_commitments: Vec<(StateMachineId, IntermediateState)>, +} + +/// Should handle the creation of consensus clients +pub fn create_client(host: &H,message: CreateConsensusState) -> Result<(), Error> +where + H: IsmpHost, +{ + // .. implementation details +} +``` + +The `create_client` method is used by offchain parties to initialize a consensus client. This contains a subjectively chosen initial state for the consensus client. A sort of trusted setup for the initiated. Because it is subjectively chosen, it is recommended that this message is initiated either by the "admin" of the state machine or through a quorum of votes which allows the network to properly audit the contents of the initial consensus state. The handler for this message simply persists the consensus client and all of it's intermediate states as is to storage. + +### `update_client` + +```rust + +/// A consensus message is used to update the state of a consensus client and its children state +/// machines. +pub struct ConsensusMessage { + /// Serialized Consensus Proof + pub consensus_proof: Vec, + /// The consensus state Id + pub consensus_state_id: ConsensusStateId, +} + +/// This function handles verification of consensus messages for consensus clients +pub fn update_client(host: &H, msg: ConsensusMessage) -> Result<(), Error> +where + H: IsmpHost, +{ + // .. implementation details +} + +``` + +The `update_client` method is responsible for advancing the state of the consensus client. This performs the consensus verification of new `StateCommitment`s that have been finalized by a `StateMachine`'s consensus system. The `IsmpHost` must return the concrete implementation of the associated `ConsensusClient` and a previously stored `ConsensusState`. The procedure for updating the consensus client is as follows. + +- First the handler must assert that the consensus client is not frozen or expired. Consensus clients can expire if the last time the consensus client was updated has exceeded the chain's unbonding period. This effectively mitigates any potential long fork attacks that may arise due to a loss of liveness of consensus clients. +- Finally the handler may perform consensus proof verification using the concrete implementation for the consensus client using `ConsensusClient::verify_consensus`. If verifications pass, the udpated `ConsensusState` and `IntermediateState`s are persisted to storage and enter a new challenge period. + +### `freeze_client` + +```rust +/// A fraud proof message is used by fishermen to report byzantine misbehaviour in a consensus system. +pub struct FraudProofMessage { + /// The first consensus Proof + pub proof_1: Vec, + /// The second consensus Proof + pub proof_2: Vec, + /// The offending consensus state Id + pub consensus_state_id: ConsensusStateId, +} + +/// Freeze a consensus client by providing a valid consensus fault proof. +pub fn freeze_client(host: &H, msg: FraudProofMessage) -> Result<(), Error> +where + H: IsmpHost, +{ + // .. implementation details +} +``` + +The `freeze_client` method is used to prove the existence of a consensus fault to an onchain consensus client. This message will be sent by offchain parties, colloquially known as _fishermen_ when they detect the existence of two conflicting views of the network backed by consensus proofs. This may arise from double signing or eclipse attacks. The consensus client after successfully verifying the validity of the conflicting views of the network will go into a frozen state. In this state it can no longer process new consensus messages as well as new requests & responses. Frozen consensus clients cannot be unfrozen and a new consensus client must be initialized through the `create_client` method instead. + +## Events + +The consensus handlers should emit events when a consensus proof is successfully processed or a consensus client is frozen due to consensus fault proofs. This action enables relayers responsible for transmitting requests and responses to either start relaying new eligible requests or stop their relaying tasks. + +### `StateMachineUpdated` + +```rust +/// Emitted when a state machine is successfully updated to a new height +struct StateMachineUpdated { + /// State machine height + state_machine_id: StateMachineId, + /// State machine latest height + latest_height: u64, +} +``` + +A `StateMachineUpdated` event is emitted to notify network participants (both relayers and fishermen) of some newly available `StateCommitment`s for a given state machine. Relayers will wait for the configured `challenge_period` before attempting to transmit new requests & responses. While fishermen will check if these pending `StateCommitment`s describe valid states on the counterparty network. If the `challenge_period` elapses without any fraud proofs being presented, we can safely conclude that the provided `StateCommitment`s are indeed canonical. + +### `ConsensusClientFrozen` + +```rust +/// Indicates that a consensus client has been created +struct ConsensusClientFrozen { + /// The offending client id + consensus_client_id: ConsensusClientId, +} +``` + +A `ConsensusClientFrozen` event is emitted after a consensus fault is successfully verified and the offending client frozen. This should instruct relayers to shut down any tasks for relaying requests from the byzantine network to the host network. + +## References + +$^{[1]}$ [Consensus Proofs, Polytope Labs Research](https://research.polytope.technology/consensus-proofs) diff --git a/docs/pages/protocol/dispatcher.mdx b/docs/pages/protocol/dispatcher.mdx new file mode 100644 index 000000000..743f47054 --- /dev/null +++ b/docs/pages/protocol/dispatcher.mdx @@ -0,0 +1,88 @@ +--- +title: The ISMP Dispatcher +description: The ISMP request-response dispatcher interface +--- + +# ISMP Dispatcher + +The dispatcher is the public interface which `IsmpModule`s use to _dispatch_ requests and responses. It is also responsible for committing the outgoing requests and responses to storage. It may do so in an overlay tree or the underlying state trie. This ensures that state proofs maybe obtained for dispatched requests and responses. The dispatcher should also emit relevant events after any dispatch operation. The interface for the Ismp Dispatcher is + +```rust +/// Simplified POST request, intended to be used for sending outgoing requests +pub struct DispatchPost { + /// The destination state machine of this request. + pub dest: StateMachine, + /// Module Id of the sending module + pub from: Vec, + /// Module ID of the receiving module + pub to: Vec, + /// Timestamp which this request expires in seconds. + pub timeout_timestamp: u64, + /// Encoded Request. + pub data: Vec, + /// Gas limit for executing request on destination chain + /// This should be zero if the destination module is not a contract + pub gas_limit: u64, +} + +/// Simplified GET request, intended to be used for sending outgoing requests +pub struct DispatchGet { + /// The destination state machine of this request. + pub dest: StateMachine, + /// Module Id of the sending module + pub from: Vec, + /// Raw Storage keys that would be used to fetch the values from the counterparty + pub keys: Vec>, + /// Height at which to read the state machine. + pub height: u64, + /// Host timestamp at which this request expires in seconds + pub timeout_timestamp: u64, + /// Gas limit for executing the response to this get request + /// This value should be zero if the dispatching module is not a contract + pub gas_limit: u64, +} + +/// Simplified request, intended to be used for sending outgoing requests +pub enum DispatchRequest { + /// The POST variant + Post(DispatchPost), + /// The GET variant + Get(DispatchGet), +} + +/// The response to a POST request +pub struct PostResponse { + /// The request that triggered this response. + pub post: Post, + /// The response message. + pub response: Vec, + /// Timestamp at which this response expires in seconds. + pub timeout_timestamp: u64, + /// Gas limit for executing the response on destination, only used for solidity modules. + pub gas_limit: u64, +} + +pub trait IsmpDispatcher { + /// This function should accept requests from modules and commit them to the state + /// It should emit the `Request` event after a successful dispatch + fn dispatch_request(&self, request: DispatchRequest) -> Result<(), Error>; + + /// This function should accept responses from modules and commit them to the state + /// It should emit the `Response` event after a successful dispatch + fn dispatch_response(&self, response: PostResponse) -> Result<(), Error>; +} +``` + +## Events + +Events should be emitted when requests are responses are dispatched. This notifies relayers of the new requests and responses to be transmitted. +The structure of ISMP dispatcher events is described below + +```rust +pub enum Event { + /// Emitted for an outgoing response + Response(PostResponse), + /// Emitted for an outgoing request + Request(Request), +} +``` diff --git a/docs/pages/protocol/host.mdx b/docs/pages/protocol/host.mdx new file mode 100644 index 000000000..e1b2e944e --- /dev/null +++ b/docs/pages/protocol/host.mdx @@ -0,0 +1,200 @@ +--- +title: The Host Interface +description: The Host interface specification for ISMP compatible host state machines. +--- + + + +# The Host Interface + +The `IsmpHost` defines the storage interface that is used by the ISMP handlers. These handlers are tasked with modifying the host and executing the relevant storage operations for a particular _handler message_. The host assumes that all key-value pairs will be stored in a _state trie_$^{[1]}$. Where a _state commitment_ and _state proof_ can be obtained to verify their existence or lack thereof. + +Notably, the handlers are agnostic to the underlying storage mechanism and allows for the storage of requests and responses in an overlay tree. This overlay tree can be selected to minimize the state proof verification cost, consequently reducing the verification cost of outgoing requests and responses. + +```rust +/// Defines the necessary interfaces that must be satisfied by a state machine for it be ISMP +/// compatible. +pub trait IsmpHost { + /// Should return the state machine type for the host. + fn host_state_machine(&self) -> StateMachine; + + /// Should return the latest height of the state machine + fn latest_commitment_height(&self, id: StateMachineId) -> Result; + + /// Should return the state machine at the given height + fn state_machine_commitment( + &self, + height: StateMachineHeight, + ) -> Result; + + /// Should return the host timestamp when this consensus client was last updated + fn consensus_update_time( + &self, + consensus_state_id: ConsensusStateId, + ) -> Result; + + /// Should return the host timestamp when this state machine height was committed + fn state_machine_update_time( + &self, + state_machine_height: StateMachineHeight, + ) -> Result; + + /// Should return the registered consensus client id for this consensus state id + fn consensus_client_id( + &self, + consensus_state_id: ConsensusStateId, + ) -> Option; + + /// Should return the encoded consensus state for a consensus state id provided + fn consensus_state(&self, consensus_state_id: ConsensusStateId) -> Result, Error>; + + /// Should return the current timestamp on the host + fn timestamp(&self) -> Duration; + + /// Checks if a state machine is frozen at the provided height, should return Ok(()) if it isn't + /// or [`Error::FrozenStateMachine`] if it is. + fn is_state_machine_frozen(&self, machine: StateMachineHeight) -> Result<(), Error>; + + /// Checks if a consensus state is frozen + fn is_consensus_client_frozen(&self, consensus_state_id: ConsensusStateId) + -> Result<(), Error>; + + /// Should return an error if request commitment does not exist in storage + fn request_commitment(&self, req: H256) -> Result<(), Error>; + + /// Should return an error if request commitment does not exist in storage + fn response_commitment(&self, req: H256) -> Result<(), Error>; + + /// Increment and return the next available nonce for an outgoing request. + fn next_nonce(&self) -> u64; + + /// Should return Some(()) if a receipt for this request exists in storage + fn request_receipt(&self, req: &Request) -> Option<()>; + + /// Should return Some(()) if a response has been received for the given request + /// Implementors should store both the request and response objects + fn response_receipt(&self, res: &Response) -> Option<()>; + + /// Store a map of consensus_state_id to the consensus_client_id + /// Should return an error if the consensus_state_id already exists + fn store_consensus_state_id( + &self, + consensus_state_id: ConsensusStateId, + client_id: ConsensusClientId, + ) -> Result<(), Error>; + + /// Store an encoded consensus state + fn store_consensus_state( + &self, + consensus_state_id: ConsensusStateId, + consensus_state: Vec, + ) -> Result<(), Error>; + + /// Store the unbonding period for a consensus state. + fn store_unbonding_period( + &self, + consensus_state_id: ConsensusStateId, + period: u64, + ) -> Result<(), Error>; + + /// Store the timestamp when the consensus client was updated + fn store_consensus_update_time( + &self, + consensus_state_id: ConsensusStateId, + timestamp: Duration, + ) -> Result<(), Error>; + + /// Store the timestamp when the state machine height was committed + fn store_state_machine_update_time( + &self, + state_machine_height: StateMachineHeight, + timestamp: Duration, + ) -> Result<(), Error>; + + /// Store the timestamp when the state machine was updated + fn store_state_machine_commitment( + &self, + height: StateMachineHeight, + state: StateCommitment, + ) -> Result<(), Error>; + + /// Freeze a state machine at the given height + fn freeze_state_machine(&self, height: StateMachineHeight) -> Result<(), Error>; + + /// Freeze a consensus state with the given identifier + fn freeze_consensus_client(&self, consensus_state_id: ConsensusStateId) -> Result<(), Error>; + + /// Store latest height for a state machine + fn store_latest_commitment_height(&self, height: StateMachineHeight) -> Result<(), Error>; + + /// Delete a request commitment from storage, used when a request is timed out. + /// Make sure to refund the user their relayer fee here. + fn delete_request_commitment(&self, req: &Request) -> Result<(), Error>; + + /// Delete a request commitment from storage, used when a response is timed out. + /// Make sure to refund the user their relayer fee here. + /// Also delete the request from the responded map. + fn delete_response_commitment(&self, res: &PostResponse) -> Result<(), Error>; + + /// Stores a receipt for an incoming request after it is successfully routed to a module. + /// Prevents duplicate incoming requests from being processed. Includes the relayer account + fn store_request_receipt(&self, req: &Request, signer: &Vec) -> Result<(), Error>; + + /// Stores a receipt that shows that the given request has received a response. Includes the + /// relayer account + /// Implementors should map the request commitment to the response object commitment. + fn store_response_receipt(&self, req: &Response, signer: &Vec) -> Result<(), Error>; + + /// Should return a handle to the consensus client based on the id + fn consensus_client(&self, id: ConsensusClientId) -> Result, Error>; + + /// Should return the configured delay period for a consensus state + fn challenge_period(&self, consensus_state_id: ConsensusStateId) -> Option; + + /// Set the challenge period in seconds for a consensus state. + fn store_challenge_period( + &self, + consensus_state_id: ConsensusStateId, + period: u64, + ) -> Result<(), Error>; + + /// Check if the client has expired since the last update + fn is_expired(&self, consensus_state_id: ConsensusStateId) -> Result<(), Error> { + let host_timestamp = self.timestamp(); + let unbonding_period = self + .unbonding_period(consensus_state_id) + .ok_or(Error::UnnbondingPeriodNotConfigured { consensus_state_id })?; + let last_update = self.consensus_update_time(consensus_state_id)?; + if host_timestamp.saturating_sub(last_update) >= unbonding_period { + Err(Error::UnbondingPeriodElapsed { consensus_state_id })? + } + + Ok(()) + } + + /// return the state machines that are allowed to proxy requests. + fn allowed_proxies(&self) -> Vec; + + /// Store the whitelist of allowed proxies, this should overwrite the existing whitelist. + fn store_allowed_proxies(&self, allowed: Vec); + + /// Checks if the host allows this state machine to proxy requests. + fn is_allowed_proxy(&self, source: &StateMachine) -> bool { + self.allowed_proxies().iter().any(|proxy| proxy == source) + } + + /// Return the unbonding period (i.e the time it takes for a validator's deposit to be unstaked + /// from the network) + fn unbonding_period(&self, consensus_state_id: ConsensusStateId) -> Option; + + /// Return a handle to the router + fn ismp_router(&self) -> Box; +} +``` + +## References + +$^{[1]}$ [State (Machine) Proofs, Polytope Labs Research]() diff --git a/docs/pages/protocol/ismp.mdx b/docs/pages/protocol/ismp.mdx new file mode 100644 index 000000000..b45fa258b --- /dev/null +++ b/docs/pages/protocol/ismp.mdx @@ -0,0 +1,10 @@ +--- +title: The Interoperable State Machine Protocol +description: The Interoperable State Machine Protocol (ISMP) is a lightweight, unopinionated messaging protocol designed to enable the development of cryptographically secure cross-chain applications. +--- + +# The Interoperable State Machine Protocol + +The Interoperable State Machine Protocol (ISMP) is a lightweight, unopinionated messaging protocol designed to enable the development of cryptographically secure cross-chain applications. It employs the use of **consensus and state proofs to authorize cross-chain request execution**, providing a level of security equivalent to that of the underlying blockchains it connects. + +ISMP is designed to be light weight with a very minimal API surface area. Its lightweight design means that ISMP is economically feasible even within expensive environments such as Ethereum. In addition, it offers a familiar and easy-to-understand message-passing mechanism that mimcs the already standard HTTP protocol. diff --git a/docs/pages/protocol/requests.mdx b/docs/pages/protocol/requests.mdx new file mode 100644 index 000000000..653638c31 --- /dev/null +++ b/docs/pages/protocol/requests.mdx @@ -0,0 +1,142 @@ +--- +title: Requests +description: The ISMP Request specification +--- + + + +# Requests + +ISMP is a request-response protocol, modeled after HTTP. A _module_ on one state machine initiates a request which is to be executed by a counterpart _module_ on a different state machine. After processing the request, the recipient module may **optionally** generate a response, which is sent back to the original sender. + +ISMP requests can be either POST or GET, similar to HTTP. A POST request indicates an intention to execute a transaction on the counterpart blockchain and carries an opaque payload intended for the destination ISMP module on the counterpart state machine. Conversely, a GET request aims to retrieve the values for the provided `keys` from the storage of a counterpart blockchain. Unlike a POST request, which must be delivered to the counterpart for processing, a GET request can be processed offchain by any interested party. Requests can also [time-out](/protocol/timeouts). + +```rust +/// The ISMP POST request. +pub struct Post { + /// The source state machine of this request. + pub source: StateMachine, + /// The destination state machine of this request. + pub dest: StateMachine, + /// The nonce of this request on the source chain + pub nonce: u64, + /// Module identifier of the sending module + pub from: Vec, + /// Module identifier of the receiving module + pub to: Vec, + /// Unix timestamp by which this request expires in seconds. + pub timeout_timestamp: u64, + /// Encoded Request. + pub data: Vec, + /// Gas limit for executing the request on destination + /// This value should be zero if destination module is not a contract + pub gas_limit: u64, +} + +/// The ISMP GET request. +pub struct Get { + /// The source state machine of this request. + pub source: StateMachine, + /// The destination state machine of this request. + pub dest: StateMachine, + /// The nonce of this request on the source chain + pub nonce: u64, + /// Module Id of the sending module + pub from: Vec, + /// Raw Storage keys that would be used to fetch the values from the counterparty + /// For deriving storage keys for ink contract fields follow the guide in the link below + /// https://use.ink/datastructures/storage-in-metadata#a-full-example + /// The algorithms for calculating raw storage keys for different substrate pallet storage + /// types are described in the following links + /// https://github.com/paritytech/substrate/blob/master/frame/support/src/storage/types/map.rs#L34-L42 + /// https://github.com/paritytech/substrate/blob/master/frame/support/src/storage/types/double_map.rs#L34-L44 + /// https://github.com/paritytech/substrate/blob/master/frame/support/src/storage/types/nmap.rs#L39-L48 + /// https://github.com/paritytech/substrate/blob/master/frame/support/src/storage/types/value.rs#L37 + /// For fetching keys from EVM contracts each key should be 52 bytes + /// This should be a concatenation of contract address and slot hash + pub keys: Vec>, + /// Height at which to read the state machine. + pub height: u64, + /// Unix timestamp by which this request expires in seconds. + pub timeout_timestamp: u64, + /// Gas limit for executing the response to this get request + /// This value should be zero if the sending module is not a contract + pub gas_limit: u64, +} + +/// The ISMP request. +pub enum Request { + /// A post request allows a module on a state machine to send arbitrary bytes to another module + /// living in another state machine. + Post(Post), + /// A get request allows a module on a state machine to read the storage of another module + /// living in another state machine. + Get(Get), +} + +``` + +## Handlers + +The ISMP framework exposes a handler that allows relayers submit new requests, alongside the neccessary state proofs required for verification so that they may be executed by `IsmpModules`s + +### `handle_post_request` + +```rust +/// The ISMP POST request. +pub struct Post { + /// The source state machine of this request. + pub source: StateMachine, + /// The destination state machine of this request. + pub dest: StateMachine, + /// The nonce of this request on the source chain + pub nonce: u64, + /// Module Id of the sending module + pub from: Vec, + /// Module ID of the receiving module + pub to: Vec, + /// Unix timestamp which this request expires in seconds. + pub timeout_timestamp: u64, + /// Serialized request body. + pub data: Vec, + /// Gas limit for executing the request on destination + /// This value should be zero if destination module is not a contract + pub gas_limit: u64, +} + +/// A request message holds a batch of incoming requests and their proofs. +pub struct RequestMessage { + /// POST requests from a source chain + pub requests: Vec, + /// Membership batch proof for these requests + pub proof: Proof, +} + +/// Handles incoming POST requests and dispatches them to the appropriate modules +pub fn handle_post_requests(host: &H, msg: RequestMessage) -> Result<(), Error> +where + H: IsmpHost, +{ + // .. implementation details +} +``` + +The `handle_post_requests` is used to notify onchain `IsmpModule`s of new requests to be processed. A relayer will construct the `RequestMessage` which holds a batch of new `Post` requests, as well as a _multi-proof_$^{[1]}$ of their existence on the source chain. The handler will perform the following operations + +- Assert that the state machine's consensus client is not frozen +- Assert that the configured `challenge_period` for the `StateCommitment` has elapsed +- Assert that the requests have not been previously processed +- Assert that the requests have not timed out +- Assert that the membership proof for the requests verify +- Finally dispatch the requests to the relevant `IsmpModule::on_accept` and store a receipt for each request to prevent requests from being replayed. + +:::danger +It's important to note that if the `IsmpModule::on_accept` does not return `Ok`, the receipt of this request will not be persisted, allowing the request to be **replayed**. Consequently, the `IsmpModule` is responsible for maintaining all invariants before modifying it's internal state to prevent partial state changes that could result in critical vulnerabilities in their request handler. This model ensures that if a request cannot be executed successfully on a destination state machine, it can time out gracefully on the source. +::: + +## References + +$^{[1]}$ [Merkle Multi Proofs, Polytope Labs Research](https://research.polytope.technology/merkle-multi-proofs) diff --git a/docs/pages/protocol/responses.mdx b/docs/pages/protocol/responses.mdx new file mode 100644 index 000000000..ef18e0e50 --- /dev/null +++ b/docs/pages/protocol/responses.mdx @@ -0,0 +1,84 @@ +--- +title: Responses +description: The ISMP Response specification +--- + +# Responses + +Responses in the ISMP framework can be either one of a `PostResponse` or a `GetResponse`. + +```rust +/// The response to a POST request +pub struct PostResponse { + /// The POST request that triggered this response. + pub post: Post, + /// The response message. + pub response: Vec, + /// Unix timestamp at which this response expires in seconds. + pub timeout_timestamp: u64, + /// Gas limit for executing the response on destination, only used for solidity modules. + pub gas_limit: u64, +} + +/// The response to a GET request +pub struct GetResponse { + /// The Get request that triggered this response. + pub get: Get, + /// Key-Values derived from the state proof + pub values: BTreeMap, Option>>, +} + +/// The ISMP response +pub enum Response { + /// The response to a POST request + Post(PostResponse), + /// The response to a GET request + Get(GetResponse), +} +``` + +## `PostResponse` + +A `PostResponse` can be seen as the result or return value of a `PostRequest` execution. `IsmpModule`s may opt not to generate a `PostResponse`, and instead employ an optimistic model. In this model, the module state is altered before the request is dispatched, in such a way that **it can be reverted** if the request times out. This approach reduces considerable message round trip and verification expenses, providing a better user experience. However, when it's necessary to give the caller an execution result, the ISMP framework allows for a `PostResponse`. The `PostResponse`, much like a `PostRequest` can also [time-out](/protocol/timeouts). + +## `GetResponse` + +A `GetResponse` provides the requested storage values of a `GetRequest`, it contains a map of the requested key-value pairs. These values may be null, in which case they are represented as `Option::None`. The key-value pairs are derived from the state proof verification of the values at the given `height`. This verification is performed using the `StateMachineClient` of the destination `StateMachine`. + +## Handlers + +The ISMP framework exposes a handler that allows relayers submit new responses, alongside the neccessary state proofs required for verification so that they may be executed by `IsmpModules`s + +### `handle_response` + +```rust +/// A request message holds a batch of responses to be dispatched from a source state machine +pub struct ResponseMessage { + /// A set of either POST requests or responses to be handled + pub datagram: RequestResponse, + /// Membership batch proof for these req/res + pub proof: Proof, +} + +/// Validate the state machine, verify the response message and dispatch the message to the router +pub fn handle_response(host: &H, msg: ResponseMessage) -> Result<(), Error> +where + H: IsmpHost, +{ + // .. implementation details +} +``` + +The `handle_response` is used to notify onchain `IsmpModule`s of new responses to be processed. A relayer will construct the `ResponseMessage` which holds a batch of new responses, and their relevant proofs. The handler will perform the following operations + +- Assert that the state machine's consensus client is not frozen +- Assert that the configured `challenge_period` for the `StateCommitment` has elapsed +- Assert that the responses have not been previously processed +- Assert that the responses have not timed out +- Assert that the proofs for the responses verify +- Finally dispatch the responses to the relevant `IsmpModule::on_response` and store a receipt for each responses to prevent responses from being replayed. + + +:::danger +It's important to note that if the `IsmpModule::on_response` does not return `Ok`, the receipt of this response will not be persisted, allowing the response to be **replayed**. Consequently, the `IsmpModule` is responsible for maintaining all invariants before modifying it's internal state to prevent partial state changes that could result in critical vulnerabilities in their response handler. This model ensures that if a response cannot be executed successfully on a destination state machine, it can time out gracefully on the source. +::: diff --git a/docs/pages/protocol/router.mdx b/docs/pages/protocol/router.mdx new file mode 100644 index 000000000..154a71eb6 --- /dev/null +++ b/docs/pages/protocol/router.mdx @@ -0,0 +1,38 @@ +--- +title: Router +description: The ISMP router interface +--- + +# ISMP Router + +The router lives in-between the ISMP message handlers and modules, the router provides access to a concrete implementation of an `IsmpModule` which a request or response is designated for based on the destination module Id. The interface for the router is + +```rust +pub trait IsmpRouter { + /// Should decode the module id and return a handler to the appropriate `IsmpModule` + /// implementation + fn module_for_id(&self, bytes: Vec) -> Result, Error>; +} +``` + +## ISMP Modules + +Users cannot directly initiate requests or receive responses. Instead, they must transact with an application, which then initiates the request and receives the responses. These applications, referred to as ISMP Modules, can be either _pallets_ or smart-contracts. For an application to be ISMP compatible, it must implement a specific interface that enables the router to dispatch incoming requests and responses. Each application should have a unique identifier configured in the runtime for identification by the router. The required module interface is as follows + +```rust +/// Individual modules which live on a state machine must conform to this interface in order to send +/// and receive ISMP requests and responses +pub trait IsmpModule { + /// Called by the message handler on a module, to notify module of a new POST request + /// the module may choose to respond immediately, or in a later block + fn on_accept(&self, request: Post) -> Result<(), Error>; + + /// Called by the message handler on a module, to notify module of a response to a previously + /// sent out request + fn on_response(&self, response: Response) -> Result<(), Error>; + + /// Called by the message handler on a module, to notify module of requests that were previously + /// sent but have now timed-out + fn on_timeout(&self, request: Timeout) -> Result<(), Error>; +} +``` diff --git a/docs/pages/protocol/state-machine.mdx b/docs/pages/protocol/state-machine.mdx new file mode 100644 index 000000000..7bcfcdc94 --- /dev/null +++ b/docs/pages/protocol/state-machine.mdx @@ -0,0 +1,71 @@ +--- +title: The State Machine Client +description: The ISMP protocol specification for state machine clients +--- + +# State Machine Client + +Now that we have a way to verify the consensus proofs of a blockchain in a fully byzantine fault tolerant manner. We might like to read the state of the blockchain. This allows us to execute any outgoing requests addressed to us, stored in the state trie of the counterparty blockchain. In order to read the state of the blockchain we’ll make use of state proofs. Different blockchains may adopt different kinds of state tries. eg Merkle-patricia, IAVL, Verkle tries, Binary merkle trees, whatever the case may be, it is also the responsibility of the consensus client to provide the ISMP framework with an implementation of the `StateMachineClient`. + +The state machine client is an abstraction over the state proof scheme of a given state machine. By decoupling the `ConsensusClient` from the `StateMachineClient` which are typically combined to form a _light client_, the ISMP framework allows a consensus client to support multiple state machines, each potentially using different state proof schemes. This abstraction makes ISMP future-proof, enabling deployment on both monolithic and modular blockchain architectures, including Polkadot, Ethereum, and others. + +
+ A Full Node +
+ +```rust +/// Convenience enum +pub enum RequestResponse { + /// A batch of requests + Request(Vec), + /// A batch of responses + Response(Vec), +} + +/// Proof holds the relevant proof data for the context in which it's used. +pub struct Proof { + /// The state machine identifier + pub id: StateMachineId, + /// the corresponding block height + pub height: u64, + /// Serialized proof + pub proof: Vec, +} + +/// A state machine client. An abstraction for the mechanism of state proof verification for state +/// machines +pub trait StateMachineClient { + /// Verify the overlay membership proof of a batch of requests/responses. + fn verify_membership( + &self, + host: &dyn IsmpHost, + item: RequestResponse, + root: StateCommitment, + proof: &Proof, + ) -> Result<(), Error>; + + /// Transform the requests/responses into their equivalent key in the state trie. + fn state_trie_key(&self, request: RequestResponse) -> Vec>; + + /// Verify the state of proof of some arbitrary data. Should return the verified data + fn verify_state_proof( + &self, + host: &dyn IsmpHost, + keys: Vec>, + root: StateCommitment, + proof: &Proof, + ) -> Result, Option>>, Error>; +} +``` + +## `verify_membership` + +Since the ISMP framework permits the the `IsmpHost` to persist the outgoing requests and responses in an _overlay tree_. The `StateMachineClient` must provide the verification algorithm for this overlay tree through the `verify_membership` method. If the host is unable to leverage an overlay trie, then this method will simply verify the state proofs of requests and responses. + +## `state_trie_key` + +The ISMP framework does not enforce where requests & responses should be persisted in the state trie and allows state machines to store them wherever they like provided that they can describe a path to the request/response committed in storage given the full request/reponse. + +## `verify_state_proof` + +Given a `StateCommitment`, an arbitrary set of keys and a state proof, this method should perform state proof verification and return the verified values for provided storage keys. These keys may point to an empty leaf and as such should be represented with `Option::None`. This signals a non-membership proof for the provided keys which is used in request timeouts. State proof verification is also used in handling `Response::Get` in order to verify the storage values requested in the `Request::Get` diff --git a/docs/pages/protocol/timeouts.mdx b/docs/pages/protocol/timeouts.mdx new file mode 100644 index 000000000..b8615817b --- /dev/null +++ b/docs/pages/protocol/timeouts.mdx @@ -0,0 +1,65 @@ +--- +title: Timeouts +description: Request and Response timeouts +--- + +# Timeouts + +Blockchains may become incapable of processing transactions for a vareity of reasons. These might include _liveness failures_, which can occur when the state transition function becomes unable to produce new blocks, consensus faults, transaction fee spikes that make transaction execution unprofitable, or a doomsday scenario such as a nation state sanctioned attack. + +Regardless of the reason, if the destination chain cannot process incoming ISMP requests, the framework provides a timeout mechanism. This feature allows for the safe reversion of state changes on the source chain that were executed prior to dispatching the request, as if no issue ever occurred. + +`PostRequest`, `PostResponse`, and `GetRequest` all have the ability to time out due to their `timeout_timestamp` value. This value stipulates the lifespan of a message. A `PostRequest` and `PostResponse` will time out when their destination's `host.timestamp()` surpasses the `timeout_timestamp`. This asserts that the destination has indeed not processed the relevant messages. Conversely, a `GetRequest` times out when its source's `host.timestamp()` surpasses the sending chain's `timeout_timestamp`. + +## Handlers + +The ISMP framework exposes a handler that allows users/relayers submit timeouts, alongside the neccessary state proofs required for verification so that they may be executed by `IsmpModules`s + +### `handle_timeouts` + +```rust +/// A timeout message holds a batch of messages to be timed-out +pub enum TimeoutMessage { + /// A non memership proof for POST requests + Post { + /// Timed out requests + requests: Vec, + /// Non membership batch proof for these requests + timeout_proof: Proof, + }, + /// A non memership proof for POST requests + PostResponse { + /// Timed out responses + responses: Vec, + /// Non membership batch proof for these requests + timeout_proof: Proof, + }, + /// There are no proofs for Get timeouts, we only need to + /// ensure that the timeout timestamp has elapsed on the host + Get { + /// Requests that have timed out + requests: Vec, + }, +} + +/// Handle timed out messages +pub fn handle_timeouts(host: &H, msg: TimeoutMessage) -> Result<(), Error> +where + H: IsmpHost, +{ + // .. implementation details +} +``` +The `handle_timeouts` is used to notify onchain `IsmpModule`s of outgoing requests or responses that have now timed out. A relayer will construct the `TimeoutMessage` which holds a batch of these messages, and their relevant proofs. The handler will perform the following operations + +- Assert that the state machine's consensus client is not frozen +- Assert that the configured `challenge_period` for the `StateCommitment` has elapsed +- Assert that the messages have indeed timed out +- Assert that the claimed messages are known by the host +- Assert that the relevant state proofs for the messages verify +- Finally dispatch the timeouts to the relevant `IsmpModule::on_timeout` and delete the commitments for the outgoing messages. + +:::danger +It's important to note that if the `IsmpModule::on_timeout` does not return `Ok`, the commitment of the relevant messages will not be deleted, allowing the timeout to be **replayed**. Consequently, the `IsmpModule` is responsible for maintaining all invariants before modifying it's internal state to prevent partial state changes that could result in critical vulnerabilities in their timeout handler. This model ensures that if a timeout cannot be executed successfully, it can be retried later. +::: + diff --git a/docs/public/committments.svg b/docs/public/committments.svg new file mode 100644 index 000000000..9839bd1aa --- /dev/null +++ b/docs/public/committments.svg @@ -0,0 +1,4 @@ + + + +
Flow of an Outgoing Request/ Response
Flow of an Outgoing Request/ Response
A request/response is created through a transaction initiated from a  module
A request/response is created throu...
Module
Module
Dispatcher
Dispatcher
Request/response
Request/re...
Keccak256(Request/Response)
Keccak256(Request/Response)
Storage
Storage
Write  commitment to storage
Write  commitment to...
Text is not SVG - cannot display
\ No newline at end of file diff --git a/docs/public/consensus.svg b/docs/public/consensus.svg new file mode 100644 index 000000000..f1355bca4 --- /dev/null +++ b/docs/public/consensus.svg @@ -0,0 +1 @@ +
S₁
S₁
S₂
S₂
S₃
S₃
S₄'
S₄'
S₅'
S₅'
S₃'
S₃'
S₄
S₄
S₅
S₅
B₁
B₁
B₂
B₂
B₃
B₃
B₄
B₄
B₅
B₅
B₄
B₄
B₅
B₅
B₃
B₃
Text is not SVG - cannot display
\ No newline at end of file diff --git a/docs/public/coprocessor.svg b/docs/public/coprocessor.svg new file mode 100644 index 000000000..36542521f --- /dev/null +++ b/docs/public/coprocessor.svg @@ -0,0 +1,4 @@ + + + +
Interoperability
Coprocessor
Interoperability...
Chain B
Chain B
Coprocessor 
Verifier
Coprocessor...
Consensus & state proofs
Consensus & state proofs
Consensus & state proofs
Consensus & state proofs
Chain C
Chain C
Chain D
Chain D
Chain E
Chain E
Consensus & state proofs
Consensus & state proofs
Consensus & state proofs
Consensus & state proofs
Consensus & state proofs
Consensus & state proofs
Consensus & state proofs
Consensus & state proofs
Coprocessor 
Verifier
Coprocessor...
Coprocessor 
Verifier
Coprocessor...
Coprocessor 
Verifier
Coprocessor...
Consensus & state proofs
Consensus & state proofs
Consensus & state proofs
Consensus & state proofs
Coprocessor 
Verifier
Coprocessor...
Coprocessor 
Verifier
Coprocessor...
Coprocessor 
Verifier
Coprocessor...
Text is not SVG - cannot display
\ No newline at end of file diff --git a/docs/public/favicon.svg b/docs/public/favicon.svg new file mode 100644 index 000000000..8b052f768 --- /dev/null +++ b/docs/public/favicon.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/public/full-node.jpeg b/docs/public/full-node.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..cfa46419c73d267a3a68e7e264f9e8ccb52005be GIT binary patch literal 29483 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%0A(;f!N0hX>vU9m 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 literal 0 HcmV?d00001 diff --git a/docs/public/ismp_request.drawio.png b/docs/public/ismp_request.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..44eeb8d988ec5ef23123b27a6d4f4a2c76868369 GIT binary patch literal 32787 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 literal 0 HcmV?d00001 diff --git a/docs/public/logo.svg b/docs/public/logo.svg new file mode 100644 index 000000000..04f7c4f89 --- /dev/null +++ b/docs/public/logo.svg @@ -0,0 +1,12 @@ + + + \ No newline at end of file diff --git a/docs/public/logotype.svg b/docs/public/logotype.svg new file mode 100644 index 000000000..ebe509769 --- /dev/null +++ b/docs/public/logotype.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/docs/public/receipts.svg b/docs/public/receipts.svg new file mode 100644 index 000000000..cef8557fc --- /dev/null +++ b/docs/public/receipts.svg @@ -0,0 +1,4 @@ + + + +
Flow of an Incoming Request/Response 
Flow of an Incoming Request/Response 
A request/response is received from a transaction and verified by the state machine client
A request/response is received from...
Transaction
Transaction
Router
Router
Request/Response
Request/Re...
Module
Module
Storage
Storage
Write receipt for request/response to storage
Write receipt for re...
Message Handler
Message Handler
Text is not SVG - cannot display
\ No newline at end of file diff --git a/docs/public/state-machine.svg b/docs/public/state-machine.svg new file mode 100644 index 000000000..e8cf1fdfe --- /dev/null +++ b/docs/public/state-machine.svg @@ -0,0 +1 @@ +
S₁
S₁
S₂
S₂
S₃
S₃
S₄'
S₄'
S₅'
S₅'
S₃'
S₃'
S₄
S₄
S₅
S₅
B₁
B₁
B₂
B₂
B₃
B₃
B₄
B₄
B₅
B₅
B₄
B₄
B₅
B₅
B₃
B₃
S₁
S₁
S₂
S₂
S₃
S₃
S₄
S₄
S₅
S₅
S₃'
S₃'
S₄'
S₄'
S₅'
S₅'
B₁
B₁
B₂
B₂
B₃
B₃
B₄
B₄
B₅
B₅
B₄
B₄
B₅
B₅
B₃
B₃
S₁
S₁
S₂
S₂
S₃
S₃
S₄
S₄
S₅'
S₅'
S₃'
S₃'
S₄'
S₄'
S₅
S₅
B₁
B₁
B₂
B₂
B₃
B₃
B₄
B₄
B₅
B₅
B₄
B₄
B₅
B₅
B₃
B₃
Consensus Layer
Consensus Layer
Independent state machines
Independent state ma...
Text is not SVG - cannot display
\ No newline at end of file diff --git a/docs/public/stf.svg b/docs/public/stf.svg new file mode 100644 index 000000000..47b5e922c --- /dev/null +++ b/docs/public/stf.svg @@ -0,0 +1 @@ +
S₁
S₁
S₂
S₂
S₃
S₃
S₄
S₄
S₅
S₅
S₃'
S₃'
S₄'
S₄'
S₅'
S₅'
B₁
B₁
B₂
B₂
B₃
B₃
B₄
B₄
B₅
B₅
B₄
B₄
B₅
B₅
B₃
B₃
Text is not SVG - cannot display
\ No newline at end of file diff --git a/docs/tsconfig.json b/docs/tsconfig.json new file mode 100644 index 000000000..d2636aac4 --- /dev/null +++ b/docs/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["**/*.ts", "**/*.tsx"] +} diff --git a/docs/vocs.config.ts b/docs/vocs.config.ts new file mode 100644 index 000000000..f2ffb9180 --- /dev/null +++ b/docs/vocs.config.ts @@ -0,0 +1,184 @@ +import { defineConfig } from "vocs"; +import rehypeKatex from "rehype-katex"; +import rehypeStringify from "rehype-stringify"; +import remarkMath from "remark-math"; +import remarkParse from "remark-parse"; +import remarkRehype from "remark-rehype"; +import { VitePluginRadar } from "vite-plugin-radar"; + +export default defineConfig({ + title: "Hyperbridge", + description: + "Hyperbridge is a coprocessor for cryptographically secure interoperability", + ogImageUrl: + "https://vocs.dev/api/og?logo=%logo&title=%title&description=%description", + logoUrl: "/logotype.svg", + iconUrl: "/favicon.svg", + socials: [ + { + icon: "github", + link: "https://github.com/polytope-labs/hyperbridge", + }, + { + icon: "x", + link: "https://twitter.com/hyperbridge_", + }, + { + icon: "discord", + link: "https://discord.gg/WYTUQrTR9y", + }, + { + icon: "telegram", + link: "https://t.me/hyper_bridge", + }, + ], + vite: { + server: { + fs: { + allow: [".."], + }, + }, + plugins: [ + VitePluginRadar({ + // Google Analytics tag injection + analytics: { + id: process.env.GA_ID!, + }, + }), + ], + }, + rootDir: ".", + markdown: { + remarkPlugins: [ + remarkParse, + remarkMath, + remarkRehype, + rehypeKatex, + rehypeStringify, + ], + }, + sidebar: [ + { + text: "Introduction", + link: "/", + }, + { + text: "Protocol", + collapsed: true, + items: [ + { + text: "ISMP", + link: "/protocol/ismp", + }, + { + text: "Host Interface", + link: "/protocol/host", + }, + { + text: "Consensus Client", + link: "/protocol/consensus", + }, + { + text: "State Machine Client", + link: "/protocol/state-machine", + }, + { + text: "Router", + link: "/protocol/router", + }, + { + text: "Dispatcher", + link: "/protocol/dispatcher", + }, + { + text: "Requests", + link: "/protocol/requests", + }, + + { + text: "Responses", + link: "/protocol/responses", + }, + + { + text: "Timeouts", + link: "/protocol/timeouts", + }, + ], + }, + { + text: "Solidity Sdk", + collapsed: true, + items: [ + { + text: "Integration", + link: "/evm/integration", + }, + + { + text: "Protocol Fees", + link: "/evm/fees", + }, + + { + text: "Message delivery", + link: "/evm/delivery", + }, + + { + text: "Supported Networks", + link: "/evm/networks", + }, + ], + }, + { + text: "Polkadot Sdk", + collapsed: true, + items: [ + { + text: "Integration - Parachains", + link: "/polkadot/parachains", + }, + { + text: "Integration - Solochains", + link: "/polkadot/solochains", + }, + { + text: "ISMP Modules", + link: "/polkadot/modules", + }, + { + text: "RPC Interface", + link: "/polkadot/rpc", + }, + { + text: "Protocol Fees", + link: "/polkadot/fees", + }, + { + text: "Message delivery", + link: "/polkadot/delivery", + }, + { + text: "Supported Networks", + link: "/polkadot/networks", + }, + ], + }, + { + text: "Network Operators", + collapsed: true, + items: [ + { + text: "Running a Node", + link: "/network/node", + }, + + { + text: "Running a Relayer", + link: "/network/relayer", + }, + ], + }, + ], +}); diff --git a/evm/abi/src/generated/ping_module.rs b/evm/abi/src/generated/ping_module.rs index 473e88eb5..9cd711b6d 100644 --- a/evm/abi/src/generated/ping_module.rs +++ b/evm/abi/src/generated/ping_module.rs @@ -318,7 +318,7 @@ pub mod ping_module { },], outputs: ::std::vec![], constant: ::core::option::Option::None, - state_mutability: ::ethers::core::abi::ethabi::StateMutability::View, + state_mutability: ::ethers::core::abi::ethabi::StateMutability::NonPayable, },], ), ( @@ -379,6 +379,14 @@ pub mod ping_module { anonymous: false, },], ), + ( + ::std::borrow::ToOwned::to_owned("PostRequestTimeoutReceived"), + ::std::vec![::ethers::core::abi::ethabi::Event { + name: ::std::borrow::ToOwned::to_owned("PostRequestTimeoutReceived",), + inputs: ::std::vec![], + anonymous: false, + },], + ), ( ::std::borrow::ToOwned::to_owned("PostResponseReceived"), ::std::vec![::ethers::core::abi::ethabi::Event { @@ -388,9 +396,9 @@ pub mod ping_module { },], ), ( - ::std::borrow::ToOwned::to_owned("PostTimeoutReceived"), + ::std::borrow::ToOwned::to_owned("PostResponseTimeoutReceived"), ::std::vec![::ethers::core::abi::ethabi::Event { - name: ::std::borrow::ToOwned::to_owned("PostTimeoutReceived",), + name: ::std::borrow::ToOwned::to_owned("PostResponseTimeoutReceived",), inputs: ::std::vec![], anonymous: false, },], @@ -577,6 +585,16 @@ pub mod ping_module { { self.0.event() } + ///Gets the contract's `PostRequestTimeoutReceived` event + pub fn post_request_timeout_received_filter( + &self, + ) -> ::ethers::contract::builders::Event< + ::std::sync::Arc, + M, + PostRequestTimeoutReceivedFilter, + > { + self.0.event() + } ///Gets the contract's `PostResponseReceived` event pub fn post_response_received_filter( &self, @@ -584,11 +602,14 @@ pub mod ping_module { { self.0.event() } - ///Gets the contract's `PostTimeoutReceived` event - pub fn post_timeout_received_filter( + ///Gets the contract's `PostResponseTimeoutReceived` event + pub fn post_response_timeout_received_filter( &self, - ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, PostTimeoutReceivedFilter> - { + ) -> ::ethers::contract::builders::Event< + ::std::sync::Arc, + M, + PostResponseTimeoutReceivedFilter, + > { self.0.event() } /// Returns an `Event` builder for all the events of this contract. @@ -762,6 +783,18 @@ pub mod ping_module { Eq, Hash, )] + #[ethevent(name = "PostRequestTimeoutReceived", abi = "PostRequestTimeoutReceived()")] + pub struct PostRequestTimeoutReceivedFilter; + #[derive( + Clone, + ::ethers::contract::EthEvent, + ::ethers::contract::EthDisplay, + Default, + Debug, + PartialEq, + Eq, + Hash, + )] #[ethevent(name = "PostResponseReceived", abi = "PostResponseReceived()")] pub struct PostResponseReceivedFilter; #[derive( @@ -774,8 +807,8 @@ pub mod ping_module { Eq, Hash, )] - #[ethevent(name = "PostTimeoutReceived", abi = "PostTimeoutReceived()")] - pub struct PostTimeoutReceivedFilter; + #[ethevent(name = "PostResponseTimeoutReceived", abi = "PostResponseTimeoutReceived()")] + pub struct PostResponseTimeoutReceivedFilter; ///Container type for all of the contract's events #[derive(Clone, ::ethers::contract::EthAbiType, Debug, PartialEq, Eq, Hash)] pub enum PingModuleEvents { @@ -783,8 +816,9 @@ pub mod ping_module { GetTimeoutReceivedFilter(GetTimeoutReceivedFilter), MessageDispatchedFilter(MessageDispatchedFilter), PostReceivedFilter(PostReceivedFilter), + PostRequestTimeoutReceivedFilter(PostRequestTimeoutReceivedFilter), PostResponseReceivedFilter(PostResponseReceivedFilter), - PostTimeoutReceivedFilter(PostTimeoutReceivedFilter), + PostResponseTimeoutReceivedFilter(PostResponseTimeoutReceivedFilter), } impl ::ethers::contract::EthLogDecode for PingModuleEvents { fn decode_log( @@ -802,11 +836,14 @@ pub mod ping_module { if let Ok(decoded) = PostReceivedFilter::decode_log(log) { return Ok(PingModuleEvents::PostReceivedFilter(decoded)); } + if let Ok(decoded) = PostRequestTimeoutReceivedFilter::decode_log(log) { + return Ok(PingModuleEvents::PostRequestTimeoutReceivedFilter(decoded)); + } if let Ok(decoded) = PostResponseReceivedFilter::decode_log(log) { return Ok(PingModuleEvents::PostResponseReceivedFilter(decoded)); } - if let Ok(decoded) = PostTimeoutReceivedFilter::decode_log(log) { - return Ok(PingModuleEvents::PostTimeoutReceivedFilter(decoded)); + if let Ok(decoded) = PostResponseTimeoutReceivedFilter::decode_log(log) { + return Ok(PingModuleEvents::PostResponseTimeoutReceivedFilter(decoded)); } Err(::ethers::core::abi::Error::InvalidData) } @@ -818,8 +855,11 @@ pub mod ping_module { Self::GetTimeoutReceivedFilter(element) => ::core::fmt::Display::fmt(element, f), Self::MessageDispatchedFilter(element) => ::core::fmt::Display::fmt(element, f), Self::PostReceivedFilter(element) => ::core::fmt::Display::fmt(element, f), + Self::PostRequestTimeoutReceivedFilter(element) => + ::core::fmt::Display::fmt(element, f), Self::PostResponseReceivedFilter(element) => ::core::fmt::Display::fmt(element, f), - Self::PostTimeoutReceivedFilter(element) => ::core::fmt::Display::fmt(element, f), + Self::PostResponseTimeoutReceivedFilter(element) => + ::core::fmt::Display::fmt(element, f), } } } @@ -843,14 +883,19 @@ pub mod ping_module { Self::PostReceivedFilter(value) } } + impl ::core::convert::From for PingModuleEvents { + fn from(value: PostRequestTimeoutReceivedFilter) -> Self { + Self::PostRequestTimeoutReceivedFilter(value) + } + } impl ::core::convert::From for PingModuleEvents { fn from(value: PostResponseReceivedFilter) -> Self { Self::PostResponseReceivedFilter(value) } } - impl ::core::convert::From for PingModuleEvents { - fn from(value: PostTimeoutReceivedFilter) -> Self { - Self::PostTimeoutReceivedFilter(value) + impl ::core::convert::From for PingModuleEvents { + fn from(value: PostResponseTimeoutReceivedFilter) -> Self { + Self::PostResponseTimeoutReceivedFilter(value) } } ///Container type for all input parameters for the `dispatch` function with signature diff --git a/evm/test/CrossChainMessenger.sol b/evm/examples/CrossChainMessenger.sol similarity index 100% rename from evm/test/CrossChainMessenger.sol rename to evm/examples/CrossChainMessenger.sol diff --git a/evm/test/PingModule.sol b/evm/examples/PingModule.sol similarity index 94% rename from evm/test/PingModule.sol rename to evm/examples/PingModule.sol index f6b0c49cc..7b21d33c0 100644 --- a/evm/test/PingModule.sol +++ b/evm/examples/PingModule.sol @@ -21,7 +21,8 @@ contract PingModule is IIsmpModule { event PostResponseReceived(); event GetResponseReceived(); - event PostTimeoutReceived(); + event PostRequestTimeoutReceived(); + event PostResponseTimeoutReceived(); event GetTimeoutReceived(); event PostReceived(string message); event MessageDispatched(); @@ -98,7 +99,7 @@ contract PingModule is IIsmpModule { function dispatchToParachain(uint256 _paraId) public { DispatchPost memory post = DispatchPost({ - body: bytes("hello from ethereum"), + body: bytes("hello from evm"), dest: StateMachine.kusama(_paraId), timeout: 0, // timeout: 60 * 60, // one hour @@ -126,10 +127,10 @@ contract PingModule is IIsmpModule { } function onPostRequestTimeout(PostRequest memory) external onlyIsmpHost { - emit PostTimeoutReceived(); + emit PostRequestTimeoutReceived(); } - function onPostResponseTimeout(PostResponse memory request) external view onlyIsmpHost { - revert("Token gateway doesn't emit Get Requests"); + function onPostResponseTimeout(PostResponse memory request) external onlyIsmpHost { + emit PostResponseTimeoutReceived(); } } diff --git a/evm/script/DeployGateway.s.sol b/evm/script/DeployGateway.s.sol index 2e7b40eaa..1c034a381 100644 --- a/evm/script/DeployGateway.s.sol +++ b/evm/script/DeployGateway.s.sol @@ -6,8 +6,8 @@ import "multi-chain-tokens/tokens/ERC20.sol"; import "../src/modules/TokenGateway.sol"; import "../src/modules/TokenFaucet.sol"; -import "../test/PingModule.sol"; -import "../test/CrossChainMessenger.sol"; +import "../examples/PingModule.sol"; +import "../examples/CrossChainMessenger.sol"; contract DeployScript is Script { bytes32 public salt = keccak256(bytes("gargantua-v0.0.7")); diff --git a/evm/script/DeployIsmp.s.sol b/evm/script/DeployIsmp.s.sol index 5d2540d11..e242db27d 100644 --- a/evm/script/DeployIsmp.s.sol +++ b/evm/script/DeployIsmp.s.sol @@ -13,7 +13,7 @@ import "../src/hosts/Ethereum.sol"; import "../src/hosts/Arbitrum.sol"; import "../src/hosts/Optimism.sol"; import "../src/hosts/Base.sol"; -import "../test/PingModule.sol"; +import "../examples/PingModule.sol"; import {BscHost} from "../src/hosts/Bsc.sol"; import {PolygonHost} from "../src/hosts/Polygon.sol"; diff --git a/evm/src/EvmHost.sol b/evm/src/EvmHost.sol index 2c2e6f324..c86416f50 100644 --- a/evm/src/EvmHost.sol +++ b/evm/src/EvmHost.sol @@ -393,13 +393,15 @@ abstract contract EvmHost is IIsmpHost, IHostManager, Context { */ function dispatchIncoming(PostRequest memory request) external onlyHandler { address destination = _bytesToAddress(request.to); - address(destination).call(abi.encodeWithSelector(IIsmpModule.onAccept.selector, request)); + (bool success,) = address(destination).call(abi.encodeWithSelector(IIsmpModule.onAccept.selector, request)); - // doesn't matter if it failed, if it failed once, it'll fail again - bytes32 commitment = request.hash(); - _requestReceipts[commitment] = tx.origin; + if (success) { + // doesn't matter if it failed, if it failed once, it'll fail again + bytes32 commitment = request.hash(); + _requestReceipts[commitment] = tx.origin; - emit PostRequestHandled({commitment: commitment, relayer: tx.origin}); + emit PostRequestHandled({commitment: commitment, relayer: tx.origin}); + } } /** @@ -408,12 +410,14 @@ abstract contract EvmHost is IIsmpHost, IHostManager, Context { */ function dispatchIncoming(PostResponse memory response) external onlyHandler { address origin = _bytesToAddress(response.request.from); - address(origin).call(abi.encodeWithSelector(IIsmpModule.onPostResponse.selector, response)); + (bool success,) = address(origin).call(abi.encodeWithSelector(IIsmpModule.onPostResponse.selector, response)); - bytes32 commitment = response.request.hash(); - _responseReceipts[commitment] = ResponseReceipt({relayer: tx.origin, responseCommitment: response.hash()}); + if (success) { + bytes32 commitment = response.request.hash(); + _responseReceipts[commitment] = ResponseReceipt({relayer: tx.origin, responseCommitment: response.hash()}); - emit PostResponseHandled({commitment: commitment, relayer: tx.origin}); + emit PostResponseHandled({commitment: commitment, relayer: tx.origin}); + } } /** @@ -429,13 +433,15 @@ abstract contract EvmHost is IIsmpHost, IHostManager, Context { // Relayers pay for Get Responses require(IERC20(dai()).transferFrom(tx.origin, address(this), fee), "Insufficient funds"); address origin = _bytesToAddress(response.request.from); - address(origin).call(abi.encodeWithSelector(IIsmpModule.onGetResponse.selector, response)); + (bool success,) = address(origin).call(abi.encodeWithSelector(IIsmpModule.onGetResponse.selector, response)); - bytes32 commitment = response.request.hash(); - _responseReceipts[commitment] = ResponseReceipt({relayer: tx.origin, responseCommitment: bytes32(0)}); - // don't commit the full response object because, it's unused. + if (success) { + bytes32 commitment = response.request.hash(); + _responseReceipts[commitment] = ResponseReceipt({relayer: tx.origin, responseCommitment: bytes32(0)}); + // don't commit the full response object because, it's unused. - emit PostResponseHandled({commitment: commitment, relayer: tx.origin}); + emit PostResponseHandled({commitment: commitment, relayer: tx.origin}); + } } /** @@ -447,13 +453,15 @@ abstract contract EvmHost is IIsmpHost, IHostManager, Context { onlyHandler { address origin = _bytesToAddress(request.from); - address(origin).call(abi.encodeWithSelector(IIsmpModule.onGetTimeout.selector, request)); + (bool success,) = address(origin).call(abi.encodeWithSelector(IIsmpModule.onGetTimeout.selector, request)); - // delete memory of this request - delete _requestCommitments[commitment]; + if (success) { + // delete memory of this request + delete _requestCommitments[commitment]; - // refund relayer fee - IERC20(dai()).transfer(meta.sender, meta.fee); + // refund relayer fee + IERC20(dai()).transfer(meta.sender, meta.fee); + } } /** @@ -465,13 +473,16 @@ abstract contract EvmHost is IIsmpHost, IHostManager, Context { onlyHandler { address origin = _bytesToAddress(request.from); - address(origin).call(abi.encodeWithSelector(IIsmpModule.onPostRequestTimeout.selector, request)); + (bool success,) = + address(origin).call(abi.encodeWithSelector(IIsmpModule.onPostRequestTimeout.selector, request)); - // delete memory of this request - delete _requestCommitments[commitment]; + if (success) { + // delete memory of this request + delete _requestCommitments[commitment]; - // refund relayer fee - IERC20(dai()).transfer(meta.sender, meta.fee); + // refund relayer fee + IERC20(dai()).transfer(meta.sender, meta.fee); + } } /** @@ -483,14 +494,17 @@ abstract contract EvmHost is IIsmpHost, IHostManager, Context { onlyHandler { address origin = _bytesToAddress(response.request.to); - address(origin).call(abi.encodeWithSelector(IIsmpModule.onPostResponseTimeout.selector, response)); + (bool success,) = + address(origin).call(abi.encodeWithSelector(IIsmpModule.onPostResponseTimeout.selector, response)); - // delete memory of this response - delete _responseCommitments[commitment]; - delete _responded[response.request.hash()]; + if (success) { + // delete memory of this response + delete _responseCommitments[commitment]; + delete _responded[response.request.hash()]; - // refund relayer fee - IERC20(dai()).transfer(meta.sender, meta.fee); + // refund relayer fee + IERC20(dai()).transfer(meta.sender, meta.fee); + } } /** diff --git a/evm/test/BaseTest.sol b/evm/test/BaseTest.sol index 89ddda2f3..dd456df2c 100644 --- a/evm/test/BaseTest.sol +++ b/evm/test/BaseTest.sol @@ -4,7 +4,7 @@ pragma solidity 0.8.17; import "forge-std/Test.sol"; import {TestConsensusClient} from "./TestConsensusClient.sol"; import {TestHost} from "./TestHost.sol"; -import {PingModule} from "./PingModule.sol"; +import {PingModule} from "../examples/PingModule.sol"; import {HandlerV1} from "../src/HandlerV1.sol"; import {FeeToken} from "./FeeToken.sol"; import {HostParams} from "../src/EvmHost.sol"; diff --git a/parachain/modules/ismp/core/src/handlers/consensus.rs b/parachain/modules/ismp/core/src/handlers/consensus.rs index 548f42345..d12ba0a0f 100644 --- a/parachain/modules/ismp/core/src/handlers/consensus.rs +++ b/parachain/modules/ismp/core/src/handlers/consensus.rs @@ -34,23 +34,7 @@ where )?; let consensus_client = host.consensus_client(consensus_client_id)?; let trusted_state = host.consensus_state(msg.consensus_state_id)?; - - let update_time = host.consensus_update_time(msg.consensus_state_id)?; - let delay = host.challenge_period(msg.consensus_state_id).ok_or( - Error::ChallengePeriodNotConfigured { consensus_state_id: msg.consensus_state_id }, - )?; - let now = host.timestamp(); - host.is_consensus_client_frozen(msg.consensus_state_id)?; - - if (now - update_time) <= delay { - Err(Error::ChallengePeriodNotElapsed { - consensus_state_id: msg.consensus_state_id, - current_time: now, - update_time, - })? - } - host.is_expired(msg.consensus_state_id)?; let (new_state, intermediate_states) = consensus_client.verify_consensus( diff --git a/parachain/modules/ismp/core/src/handlers/response.rs b/parachain/modules/ismp/core/src/handlers/response.rs index 2dde4da94..bb2c4f7be 100644 --- a/parachain/modules/ismp/core/src/handlers/response.rs +++ b/parachain/modules/ismp/core/src/handlers/response.rs @@ -76,7 +76,9 @@ where source_chain: response.source_chain(), dest_chain: response.dest_chain(), }); - host.store_response_receipt(&response, &msg.signer)?; + if res.is_ok() { + host.store_response_receipt(&response, &msg.signer)?; + } Ok(res) }) .collect::, _>>()? @@ -133,7 +135,9 @@ where get: request.clone(), values: Default::default(), }); - host.store_response_receipt(&response, &msg.signer)?; + if res.is_ok() { + host.store_response_receipt(&response, &msg.signer)?; + } Ok(res) }) .collect::, _>>()? diff --git a/parachain/modules/ismp/core/src/handlers/timeout.rs b/parachain/modules/ismp/core/src/handlers/timeout.rs index 1d06df053..406c2bd54 100644 --- a/parachain/modules/ismp/core/src/handlers/timeout.rs +++ b/parachain/modules/ismp/core/src/handlers/timeout.rs @@ -26,7 +26,7 @@ use crate::{ }; use alloc::{format, vec::Vec}; -/// This function handles timeouts for Requests +/// This function handles timeouts pub fn handle(host: &H, msg: TimeoutMessage) -> Result where H: IsmpHost, @@ -75,7 +75,9 @@ where source_chain: request.source_chain(), dest_chain: request.dest_chain(), }); - host.delete_request_commitment(&request)?; + if res.is_ok() { + host.delete_request_commitment(&request)?; + } Ok(res) }) .collect::, _>>()? @@ -124,7 +126,9 @@ where source_chain: response.source_chain(), dest_chain: response.dest_chain(), }); - host.delete_response_commitment(&response)?; + if res.is_ok() { + host.delete_response_commitment(&response)?; + } Ok(res) }) .collect::, _>>()? @@ -163,7 +167,9 @@ where source_chain: request.source_chain(), dest_chain: request.dest_chain(), }); - host.delete_request_commitment(&request)?; + if res.is_ok() { + host.delete_request_commitment(&request)?; + } Ok(res) }) .collect::, _>>()? diff --git a/parachain/modules/ismp/core/src/host.rs b/parachain/modules/ismp/core/src/host.rs index e6cb33000..5fa60537e 100644 --- a/parachain/modules/ismp/core/src/host.rs +++ b/parachain/modules/ismp/core/src/host.rs @@ -77,7 +77,7 @@ pub trait IsmpHost: Keccak256 { /// or [`Error::FrozenStateMachine`] if it is. fn is_state_machine_frozen(&self, machine: StateMachineHeight) -> Result<(), Error>; - /// Checks if a consensus state is frozen at the provided height + /// Checks if a consensus state is frozen fn is_consensus_client_frozen(&self, consensus_state_id: ConsensusStateId) -> Result<(), Error>; diff --git a/parachain/modules/ismp/core/src/messaging.rs b/parachain/modules/ismp/core/src/messaging.rs index e355d3c78..9c50fbfc4 100644 --- a/parachain/modules/ismp/core/src/messaging.rs +++ b/parachain/modules/ismp/core/src/messaging.rs @@ -123,7 +123,7 @@ pub fn sufficient_proof_height(requests: &[Get], proof: &Proof) -> Result<(), Er Ok(()) } -/// A request message holds a batch of requests to be timed-out +/// A timeout message holds a batch of messages to be timed-out #[derive(Debug, Clone, Encode, Decode, scale_info::TypeInfo, PartialEq, Eq)] pub enum TimeoutMessage { /// A non memership proof for POST requests diff --git a/parachain/node/Cargo.toml b/parachain/node/Cargo.toml index 7831b9d7b..8f0ebfd40 100644 --- a/parachain/node/Cargo.toml +++ b/parachain/node/Cargo.toml @@ -94,5 +94,3 @@ try-runtime = [ "try-runtime-cli/try-runtime", "gargantua-runtime/try-runtime" ] -sepolia = ["gargantua-runtime/sepolia", "messier-runtime/sepolia"] -mainnet = ["gargantua-runtime/mainnet", "messier-runtime/mainnet"] diff --git a/parachain/runtimes/gargantua/Cargo.toml b/parachain/runtimes/gargantua/Cargo.toml index 5c01efb43..9d8839547 100644 --- a/parachain/runtimes/gargantua/Cargo.toml +++ b/parachain/runtimes/gargantua/Cargo.toml @@ -79,7 +79,7 @@ ismp = { path = "../../modules/ismp/core", default-features = false } pallet-ismp = { path = "../../modules/ismp/pallet", default-features = false } ismp-demo = { path = "../../modules/ismp/demo", default-features = false } ismp-runtime-api = { path = "../../modules/ismp/runtime-api", default-features = false } -ismp-sync-committee = { path = "../../modules/ismp/sync-committee", default-features = false } +ismp-sync-committee = { path = "../../modules/ismp/sync-committee", default-features = false, features = ["sepolia"] } ismp-polygon-pos = { path = "../../modules/ismp/polygon-pos", default-features = false } ismp-bnb-pos = { path = "../../modules/ismp/bnb-pos", default-features = false } pallet-relayer-fees = { path = "../../modules/relayer-fees", default-features = false } @@ -183,6 +183,3 @@ try-runtime = [ "pallet-xcm/try-runtime", "parachain-info/try-runtime", ] - -sepolia = ["ismp-sync-committee/sepolia"] -mainnet = ["ismp-sync-committee/mainnet"] diff --git a/parachain/runtimes/messier/Cargo.toml b/parachain/runtimes/messier/Cargo.toml index 1b3a0f0d6..efa960c3b 100644 --- a/parachain/runtimes/messier/Cargo.toml +++ b/parachain/runtimes/messier/Cargo.toml @@ -80,7 +80,7 @@ ismp = { path = "../../modules/ismp/core", default-features = false } pallet-ismp = { path = "../../modules/ismp/pallet", default-features = false } ismp-demo = { path = "../../modules/ismp/demo", default-features = false } ismp-runtime-api = { path = "../../modules/ismp/runtime-api", default-features = false } -ismp-sync-committee = { path = "../../modules/ismp/sync-committee", default-features = false } +ismp-sync-committee = { path = "../../modules/ismp/sync-committee", default-features = false, features = ["mainnet"] } ismp-polygon-pos = { path = "../../modules/ismp/polygon-pos", default-features = false } ismp-bnb-pos = { path = "../../modules/ismp/bnb-pos", default-features = false } @@ -179,6 +179,3 @@ try-runtime = [ "pallet-xcm/try-runtime", "parachain-info/try-runtime", ] - -sepolia = ["ismp-sync-committee/sepolia"] -mainnet = ["ismp-sync-committee/mainnet"]