From 0b1ec748bec1ce06f4de125f64a0e0e79a8825ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Pedro=20Sousa?= Date: Thu, 13 Jun 2024 19:10:37 +0100 Subject: [PATCH 01/15] feat: refactor for bun, viem, and other things --- .github/actions/setup-yarn/action.yml | 22 - .github/workflows/vite_hardhat.yaml | 27 +- .github/workflows/vite_hardhat_nightly.yaml | 15 +- vite-hardhat/.env.example | 7 +- vite-hardhat/README.md | 96 +- vite-hardhat/bun.lockb | Bin 0 -> 374072 bytes vite-hardhat/circuit/Nargo.toml | 2 - vite-hardhat/{utils => circuit}/compile.ts | 4 +- .../circuit/contract/noirstarter/plonk_vk.sol | 2777 ------ vite-hardhat/components/index.tsx | 21 +- vite-hardhat/hardhat.config.cts | 105 +- vite-hardhat/hardhat.sh | 4 + vite-hardhat/hooks/useOnChainVerification.tsx | 38 +- vite-hardhat/hooks/useProofGeneration.tsx | 2 +- vite-hardhat/index.tsx | 11 +- vite-hardhat/package.json | 47 +- vite-hardhat/scripts/deploy.ts | 28 - vite-hardhat/test/index.spec.ts | 55 + vite-hardhat/test/index.ts | 61 - vite-hardhat/tsconfig.json | 4 +- vite-hardhat/utils/addresses.json | 1 - vite-hardhat/utils/verifierAbi.json | 80 - vite-hardhat/utils/wagmi.tsx | 17 +- vite-hardhat/yarn.lock | 7411 ----------------- 24 files changed, 283 insertions(+), 10552 deletions(-) delete mode 100644 .github/actions/setup-yarn/action.yml create mode 100755 vite-hardhat/bun.lockb rename vite-hardhat/{utils => circuit}/compile.ts (75%) delete mode 100644 vite-hardhat/circuit/contract/noirstarter/plonk_vk.sol create mode 100755 vite-hardhat/hardhat.sh delete mode 100644 vite-hardhat/scripts/deploy.ts create mode 100644 vite-hardhat/test/index.spec.ts delete mode 100644 vite-hardhat/test/index.ts delete mode 100644 vite-hardhat/utils/addresses.json delete mode 100644 vite-hardhat/utils/verifierAbi.json delete mode 100644 vite-hardhat/yarn.lock diff --git a/.github/actions/setup-yarn/action.yml b/.github/actions/setup-yarn/action.yml deleted file mode 100644 index feb61d75..00000000 --- a/.github/actions/setup-yarn/action.yml +++ /dev/null @@ -1,22 +0,0 @@ -name: Install Yarn dependencies -description: Installs the workspace's yarn dependencies and caches them -inputs: - project: - description: The project to install dependencies for - required: true - -runs: - using: composite - steps: - - name: Enable Corepack before setting up Node - run: corepack enable - shell: bash - - - uses: actions/setup-node@v4 - with: - node-version-file: '${{ inputs.project }}/package.json' - cache: 'yarn' - - - name: Install - run: yarn --immutable - shell: bash diff --git a/.github/workflows/vite_hardhat.yaml b/.github/workflows/vite_hardhat.yaml index c8f9f2bf..8e95e615 100644 --- a/.github/workflows/vite_hardhat.yaml +++ b/.github/workflows/vite_hardhat.yaml @@ -23,30 +23,19 @@ jobs: STABLE=$(echo $output | jq -r '.stable') echo "::set-output name=stable::$STABLE" - - name: Set up yarn - uses: ./.github/actions/setup-yarn - with: - project: vite-hardhat + - name: Set up bun + uses: oven-sh/setup-bun@v1 - name: Set up nargo uses: ./.github/actions/setup-nargo with: version: ${{ steps.versions_step.outputs.stable }} - - name: Enable Corepack before setting up Node - run: corepack enable - - - uses: actions/setup-node@v4 - with: - node-version: 20.10.0 - cache: 'yarn' - - - name: Install - run: yarn --immutable - shell: bash + - name: Install dependencies + run: bun install - - name: Generate verifier contract - run: yarn prep + - name: Compile and generate contract + run: bun prep - - name: Run test - run: yarn test + - name: Run tests + run: bun test diff --git a/.github/workflows/vite_hardhat_nightly.yaml b/.github/workflows/vite_hardhat_nightly.yaml index db61c3c9..fbded26f 100644 --- a/.github/workflows/vite_hardhat_nightly.yaml +++ b/.github/workflows/vite_hardhat_nightly.yaml @@ -48,10 +48,8 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Set up yarn - uses: ./.github/actions/setup-yarn - with: - project: vite-hardhat + - name: Set up bun + uses: oven-sh/setup-bun@v1 - name: Set up nargo uses: ./.github/actions/setup-nargo @@ -77,18 +75,17 @@ jobs: - name: Install test version run: | - yarn add \ + bun i \ @noir-lang/noir_js@${{ matrix.version }} \ @noir-lang/backend_barretenberg@${{ matrix.version }} \ @noir-lang/noir_wasm@${{ matrix.version }} \ @noir-lang/types@${{ matrix.version }} - - name: Generate verifier contract - run: yarn prep + - name: Compile and generate verifier contract + run: bun prep - name: Run test - run: yarn test - id: yarn_test + run: bun test - name: Send GitHub Action trigger data to Slack workflow - Stable uses: slackapi/slack-github-action@v1.24.0 diff --git a/vite-hardhat/.env.example b/vite-hardhat/.env.example index 6d4a053e..7021883f 100644 --- a/vite-hardhat/.env.example +++ b/vite-hardhat/.env.example @@ -1,3 +1,8 @@ +# hardhat acct #0 key, please update +LOCALHOST_DEPLOYER_PRIVATE_KEY="0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" + +# hardhat acct #0 key, please update +HOLESKY_DEPLOYER_PRIVATE_KEY="0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" + # hardhat acct #0 key, please update SEPOLIA_SCROLL_DEPLOYER_PRIVATE_KEY="0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" -SEPOLIA_SCROLL_ETHERSCAN_KEY="" diff --git a/vite-hardhat/README.md b/vite-hardhat/README.md index 438348d1..fad9d8fe 100644 --- a/vite-hardhat/README.md +++ b/vite-hardhat/README.md @@ -13,98 +13,72 @@ Want to get started in a pinch? Start your project in a free Github Codespace! In the meantime, follow these simple steps to work on your own machine: -1. Install [yarn](https://yarnpkg.com/) (tested on yarn v1.22.19) -2. Install [Node.js >20.10 (latest LTS)](https://nodejs.org/en) (tested on v18.17.0) -3. Install [noirup](https://noir-lang.org/docs/getting_started/installation/#installing-noirup) with +1. Install [bun](https://bun.sh/docs/installation): - ```bash - curl -L https://raw.githubusercontent.com/noir-lang/noirup/main/install | bash - ``` +```bash +curl -fsSL https://bun.sh/install | bash # for macOS, Linux, and WSL +``` -4. Install Nargo with +1. Install dependencies: ```bash - noirup + bun i ``` -5. Install dependencies with +2. Run a local ethereum node: ```bash - yarn + bun node ``` -6. Generate the verifier contract +3. Run the app: ```bash - yarn prep + bun dev ``` ### Test locally -1. Start a local development EVM at with - - ```bash - npx hardhat node - ``` - - or if foundry is preferred, with - - ```bash - anvil - ``` - -2. Run the [example test file](./test/index.test.ts) with +You can run the [example test file](./test/index.test.ts) with - ```bash - yarn test - ``` - -The test demonstrates basic usage of Noir in a TypeScript Node.js environment. - -### Deploy locally - -1. Start a local development EVM at with - - ```bash - npx hardhat node - ``` +```bash +bun test +``` - or if foundry is preferred, with +This test starts a local ethereum node and shows the basic usage of Noir in a TypeScript Node.js environment. - ```bash - anvil - ``` +### Testnets -2. Build the project and deploy contracts to the local development chain with +The default scripting targets a local environment run with `hardhat`. For convenience, we added some configurations for deployment on various testnets. You can find them in `hardhat.config.cts`. - ```bash - yarn build - ``` +To deploy on these testnets, rename `.env.example` to `.env` and add your own [alchemy](https://www.alchemy.com/) keys for these networks. -3. Once your contracts are deployed and the build is finished, you can preview the built website with +Then, prepend your commands with your desired network in a `NETWORK` environment variable. For example, to deploy on sepolia: - ```bash - yarn preview - ``` +```bash +NETWORK=sepolia bun dev +``` -### On-chain verification +Feel free to add more networks, just make sure you: -The app will verify your proof locally. If you have a wallet, it will prompt you to connect to the relevant network and use it for on-chain verification. +- Add deployer private keys and alchemy API keys in `.env` +- Have funds in these accounts +- Add a configuration in `hardhat.config.cts` -### Deploy on testnets +### Deployment -For convenience, we added two configurations for deployment on various testnets. You can find them in `hardhat.config.cts`. +As you may have guessed, this example runs completely on the client side as a static website. To build it, run: -To deploy on these testnets, rename `.env.example` to `.env` and add your own [alchemy](https://www.alchemy.com/) keys for these networks. +```bash +bun build # add NETWORK= if you want to +``` -Then, prepend your commands with your desired network in a `NETWORK` environment variable. For example, to deploy on sepolia: +You can then preview the final page with: ```bash -NETWORK=sepolia yarn build` +yarn preview ``` -Feel free to add more networks, just make sure you: +### On-chain verification -- Add deployer private keys and alchemy API keys in `.env` -- Have funds in these accounts -- Add a configuration in `hardhat.config.cts` +The app will verify your proof locally. If you have a wallet, it will prompt you to connect to the relevant network and use it for on-chain verification. diff --git a/vite-hardhat/bun.lockb b/vite-hardhat/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..51d2cb2d7d0e4b77e7d451abc6ef9fb4f89face0 GIT binary patch literal 374072 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 J|DXQ%e*l#>yg~o~ literal 0 HcmV?d00001 diff --git a/vite-hardhat/circuit/Nargo.toml b/vite-hardhat/circuit/Nargo.toml index 16c80439..9616a749 100644 --- a/vite-hardhat/circuit/Nargo.toml +++ b/vite-hardhat/circuit/Nargo.toml @@ -1,7 +1,5 @@ [package] name = "noirstarter" type = "bin" -authors = [""] -compiler_version = ">=0.27.0" [dependencies] diff --git a/vite-hardhat/utils/compile.ts b/vite-hardhat/circuit/compile.ts similarity index 75% rename from vite-hardhat/utils/compile.ts rename to vite-hardhat/circuit/compile.ts index 13b6aab8..d8b6a6db 100644 --- a/vite-hardhat/utils/compile.ts +++ b/vite-hardhat/circuit/compile.ts @@ -3,9 +3,9 @@ import { CompiledCircuit } from '@noir-lang/types'; export async function getCircuit() { const fm = createFileManager('/'); - const main = (await fetch(new URL(`../circuit/src/main.nr`, import.meta.url))) + const main = (await fetch(new URL(`./src/main.nr`, import.meta.url))) .body as ReadableStream; - const nargoToml = (await fetch(new URL(`../circuit/Nargo.toml`, import.meta.url))) + const nargoToml = (await fetch(new URL(`./Nargo.toml`, import.meta.url))) .body as ReadableStream; fm.writeFile('./src/main.nr', main); diff --git a/vite-hardhat/circuit/contract/noirstarter/plonk_vk.sol b/vite-hardhat/circuit/contract/noirstarter/plonk_vk.sol deleted file mode 100644 index 346c0c58..00000000 --- a/vite-hardhat/circuit/contract/noirstarter/plonk_vk.sol +++ /dev/null @@ -1,2777 +0,0 @@ -// Verification Key Hash: 0a780b1ad37289a4ff7390b88e6b9137dfe66c4398a869c0413345f4e60705d3 -// SPDX-License-Identifier: Apache-2.0 -// Copyright 2022 Aztec -pragma solidity >=0.8.4; - -library UltraVerificationKey { - function verificationKeyHash() internal pure returns(bytes32) { - return 0x0a780b1ad37289a4ff7390b88e6b9137dfe66c4398a869c0413345f4e60705d3; - } - - function loadVerificationKey(uint256 _vk, uint256 _omegaInverseLoc) internal pure { - assembly { - mstore(add(_vk, 0x00), 0x0000000000000000000000000000000000000000000000000000000000000010) // vk.circuit_size - mstore(add(_vk, 0x20), 0x0000000000000000000000000000000000000000000000000000000000000001) // vk.num_inputs - mstore(add(_vk, 0x40), 0x21082ca216cbbf4e1c6e4f4594dd508c996dfbe1174efb98b11509c6e306460b) // vk.work_root - mstore(add(_vk, 0x60), 0x2d5e098bb31e86271ccb415b196942d755b0a9c3f21dd9882fa3d63ab1000001) // vk.domain_inverse - mstore(add(_vk, 0x80), 0x1a8732b002f568683304140deecc1ca5ce2553c9988950ea13c198f1afe44e13) // vk.Q1.x - mstore(add(_vk, 0xa0), 0x2c44ea8c14491b4acc57cc74ead43131d09e58937ae057f69f29b4af8ecc3441) // vk.Q1.y - mstore(add(_vk, 0xc0), 0x1eebbe1207643a8bd1669b999e82265d340a5ecb1a33c0b7055734ef91200c97) // vk.Q2.x - mstore(add(_vk, 0xe0), 0x2f08a6a07ed616c588bcf4e3555c006b27d5d1ffba12754d0718481e1a9a419a) // vk.Q2.y - mstore(add(_vk, 0x100), 0x2a7e71e447b5645910a429e7f48f1a5deba7f7d446b95a5edd242b55f67993d3) // vk.Q3.x - mstore(add(_vk, 0x120), 0x2b1ea7f7453a8c80a89a675245da0c33db05ba8e95ecea432ab85f6b2d6a1e86) // vk.Q3.y - mstore(add(_vk, 0x140), 0x02d6fd9e84dbe74b7531e1801405a1c292117b1a17fefe9de0bfd9edf1a84bf9) // vk.Q4.x - mstore(add(_vk, 0x160), 0x293c6ab3c06a0669af13393a82c60a459a3b2a0b768da45ac7af7f2aec40fc42) // vk.Q4.y - mstore(add(_vk, 0x180), 0x0efe5ad29f99fce939416b6638dff26c845044cca9a2d9dbf94039a11d999aaa) // vk.Q_M.x - mstore(add(_vk, 0x1a0), 0x0a44bf49517a4b66ae6b51eee6ac68587f768022c11ac8e37cd9dce243d01ef2) // vk.Q_M.y - mstore(add(_vk, 0x1c0), 0x117d457bfb28869ab380fd6e83133eeb5b6ab48e5df1ae9bc204b60817006655) // vk.Q_C.x - mstore(add(_vk, 0x1e0), 0x2a958a537a99428a1019fd2c8d6b97c48f3e74ad77f0e2c63c9dfb6dccf9a29c) // vk.Q_C.y - mstore(add(_vk, 0x200), 0x18c3e78f81e83b52719158e4ac4c2f4b6c55389300451eb2a2deddf244129e7a) // vk.Q_ARITHMETIC.x - mstore(add(_vk, 0x220), 0x0002e9c902fe5cd49b64563cadf3bb8d7beb75f905a5894e18d27c42c62fd797) // vk.Q_ARITHMETIC.y - mstore(add(_vk, 0x240), 0x2cbce7beee3076b78dace04943d69d0d9e28aa6d00e046852781a5f20816645c) // vk.QSORT.x - mstore(add(_vk, 0x260), 0x2bc27ec2e1612ea284b08bcc55b6f2fd915d11bfedbdc0e59de09e5b28952080) // vk.QSORT.y - mstore(add(_vk, 0x280), 0x0ad34b5e8db72a5acf4427546c7294be6ed4f4d252a79059e505f9abc1bdf3ed) // vk.Q_ELLIPTIC.x - mstore(add(_vk, 0x2a0), 0x1e5b26790a26eb340217dd9ad28dbf90a049f42a3852acd45e6f521f24b4900e) // vk.Q_ELLIPTIC.y - mstore(add(_vk, 0x2c0), 0x155a0f51fec78c33ffceb7364d69d7ac27e570ae50bc180509764eb3fef94815) // vk.Q_AUX.x - mstore(add(_vk, 0x2e0), 0x1c1c4720bed44a591d97cbc72b6e44b644999713a8d3c66e9054aa5726324c76) // vk.Q_AUX.y - mstore(add(_vk, 0x300), 0x210fa88bc935d90241f733cc4f011893a7d349075a0de838001178895da2aa39) // vk.SIGMA1.x - mstore(add(_vk, 0x320), 0x1d270bb763cb26b2438b0760dfc7fb68fc98f87155867a2cf5c4b4ba06f637a6) // vk.SIGMA1.y - mstore(add(_vk, 0x340), 0x163a9c8b67447afccc64e9ccba9d9e826ba5b1d1ddd8d6bb960f01cd1321a169) // vk.SIGMA2.x - mstore(add(_vk, 0x360), 0x19256311d43dbc795f746c63b209667653a773088aba5c6b1337f435188d72c4) // vk.SIGMA2.y - mstore(add(_vk, 0x380), 0x1aa81f5a2a21e5f2ce127892122ad0d3c35ac30e8556f343a85b66bb0207b055) // vk.SIGMA3.x - mstore(add(_vk, 0x3a0), 0x2402d1ec00759182e950c3193c439370013802e6819544320a08b8682727f6c6) // vk.SIGMA3.y - mstore(add(_vk, 0x3c0), 0x2e6367e7e914347a3bb11215add814670b848a66aa5c015faedb4f2cef37454f) // vk.SIGMA4.x - mstore(add(_vk, 0x3e0), 0x17609c6252f021456896ab4c02adc333912c2f58020c8e55fb2e52096185a0bf) // vk.SIGMA4.y - mstore(add(_vk, 0x400), 0x02c397073c8abce6d4140c9b961209dd783bff1a1cfc999bb29859cfb16c46fc) // vk.TABLE1.x - mstore(add(_vk, 0x420), 0x2b7bba2d1efffce0d033f596b4d030750599be670db593af86e1923fe8a1bb18) // vk.TABLE1.y - mstore(add(_vk, 0x440), 0x2c71c58b66498f903b3bbbda3d05ce8ffb571a4b3cf83533f3f71b99a04f6e6b) // vk.TABLE2.x - mstore(add(_vk, 0x460), 0x039dce37f94d1bbd97ccea32a224fe2afaefbcbd080c84dcea90b54f4e0a858f) // vk.TABLE2.y - mstore(add(_vk, 0x480), 0x27dc44977efe6b3746a290706f4f7275783c73cfe56847d848fd93b63bf32083) // vk.TABLE3.x - mstore(add(_vk, 0x4a0), 0x0a5366266dd7b71a10b356030226a2de0cbf2edc8f085b16d73652b15eced8f5) // vk.TABLE3.y - mstore(add(_vk, 0x4c0), 0x136097d79e1b0ae373255e8760c49900a7588ec4d6809c90bb451005a3de3077) // vk.TABLE4.x - mstore(add(_vk, 0x4e0), 0x13dd7515ccac4095302d204f06f0bff2595d77bdf72e4acdb0b0b43969860d98) // vk.TABLE4.y - mstore(add(_vk, 0x500), 0x16ff3501369121d410b445929239ba057fe211dad1b706e49a3b55920fac20ec) // vk.TABLE_TYPE.x - mstore(add(_vk, 0x520), 0x1e190987ebd9cf480f608b82134a00eb8007673c1ed10b834a695adf0068522a) // vk.TABLE_TYPE.y - mstore(add(_vk, 0x540), 0x068ae63477ca649fffc34e466c212c208b89ff7dfebff7831183169ea0cfd64d) // vk.ID1.x - mstore(add(_vk, 0x560), 0x0d44dc459b23e94ce13c419e7feeb1d4bb61991ce667557d0ecc1ee6c29b3c3b) // vk.ID1.y - mstore(add(_vk, 0x580), 0x093cf3ec6e1328ec2e9963bae3f0769bd8eb45e32cb91e2435d33daf3b336ea9) // vk.ID2.x - mstore(add(_vk, 0x5a0), 0x29432aa4a2a667ca8a6781517f689f573e78164764701f7190e07eeb282d7752) // vk.ID2.y - mstore(add(_vk, 0x5c0), 0x211045f9f4618ac7e73d1ba72682487e558f73d6737ff3645a9824352fb90e51) // vk.ID3.x - mstore(add(_vk, 0x5e0), 0x012d9c85c11bcc8b2407f4764c4209c06e9027d21764554f5a20e9361d4d94ba) // vk.ID3.y - mstore(add(_vk, 0x600), 0x2eea648c8732596b1314fe2a4d2f05363f0c994e91cecad25835338edee2294f) // vk.ID4.x - mstore(add(_vk, 0x620), 0x0ab49886c2b94bd0bd3f6ed1dbbe2cb2671d2ae51d31c1210433c3972bb64578) // vk.ID4.y - mstore(add(_vk, 0x640), 0x00) // vk.contains_recursive_proof - mstore(add(_vk, 0x660), 0) // vk.recursive_proof_public_input_indices - mstore(add(_vk, 0x680), 0x260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c1) // vk.g2_x.X.c1 - mstore(add(_vk, 0x6a0), 0x0118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b0) // vk.g2_x.X.c0 - mstore(add(_vk, 0x6c0), 0x04fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe4) // vk.g2_x.Y.c1 - mstore(add(_vk, 0x6e0), 0x22febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e55) // vk.g2_x.Y.c0 - mstore(_omegaInverseLoc, 0x02e40daf409556c02bfc85eb303402b774954d30aeb0337eb85a71e6373428de) // vk.work_root_inverse - } - } -} - -/** - * @title Ultra Plonk proof verification contract - * @dev Top level Plonk proof verification contract, which allows Plonk proof to be verified - */ -abstract contract BaseUltraVerifier { - // VERIFICATION KEY MEMORY LOCATIONS - uint256 internal constant N_LOC = 0x380; - uint256 internal constant NUM_INPUTS_LOC = 0x3a0; - uint256 internal constant OMEGA_LOC = 0x3c0; - uint256 internal constant DOMAIN_INVERSE_LOC = 0x3e0; - uint256 internal constant Q1_X_LOC = 0x400; - uint256 internal constant Q1_Y_LOC = 0x420; - uint256 internal constant Q2_X_LOC = 0x440; - uint256 internal constant Q2_Y_LOC = 0x460; - uint256 internal constant Q3_X_LOC = 0x480; - uint256 internal constant Q3_Y_LOC = 0x4a0; - uint256 internal constant Q4_X_LOC = 0x4c0; - uint256 internal constant Q4_Y_LOC = 0x4e0; - uint256 internal constant QM_X_LOC = 0x500; - uint256 internal constant QM_Y_LOC = 0x520; - uint256 internal constant QC_X_LOC = 0x540; - uint256 internal constant QC_Y_LOC = 0x560; - uint256 internal constant QARITH_X_LOC = 0x580; - uint256 internal constant QARITH_Y_LOC = 0x5a0; - uint256 internal constant QSORT_X_LOC = 0x5c0; - uint256 internal constant QSORT_Y_LOC = 0x5e0; - uint256 internal constant QELLIPTIC_X_LOC = 0x600; - uint256 internal constant QELLIPTIC_Y_LOC = 0x620; - uint256 internal constant QAUX_X_LOC = 0x640; - uint256 internal constant QAUX_Y_LOC = 0x660; - uint256 internal constant SIGMA1_X_LOC = 0x680; - uint256 internal constant SIGMA1_Y_LOC = 0x6a0; - uint256 internal constant SIGMA2_X_LOC = 0x6c0; - uint256 internal constant SIGMA2_Y_LOC = 0x6e0; - uint256 internal constant SIGMA3_X_LOC = 0x700; - uint256 internal constant SIGMA3_Y_LOC = 0x720; - uint256 internal constant SIGMA4_X_LOC = 0x740; - uint256 internal constant SIGMA4_Y_LOC = 0x760; - uint256 internal constant TABLE1_X_LOC = 0x780; - uint256 internal constant TABLE1_Y_LOC = 0x7a0; - uint256 internal constant TABLE2_X_LOC = 0x7c0; - uint256 internal constant TABLE2_Y_LOC = 0x7e0; - uint256 internal constant TABLE3_X_LOC = 0x800; - uint256 internal constant TABLE3_Y_LOC = 0x820; - uint256 internal constant TABLE4_X_LOC = 0x840; - uint256 internal constant TABLE4_Y_LOC = 0x860; - uint256 internal constant TABLE_TYPE_X_LOC = 0x880; - uint256 internal constant TABLE_TYPE_Y_LOC = 0x8a0; - uint256 internal constant ID1_X_LOC = 0x8c0; - uint256 internal constant ID1_Y_LOC = 0x8e0; - uint256 internal constant ID2_X_LOC = 0x900; - uint256 internal constant ID2_Y_LOC = 0x920; - uint256 internal constant ID3_X_LOC = 0x940; - uint256 internal constant ID3_Y_LOC = 0x960; - uint256 internal constant ID4_X_LOC = 0x980; - uint256 internal constant ID4_Y_LOC = 0x9a0; - uint256 internal constant CONTAINS_RECURSIVE_PROOF_LOC = 0x9c0; - uint256 internal constant RECURSIVE_PROOF_PUBLIC_INPUT_INDICES_LOC = 0x9e0; - uint256 internal constant G2X_X0_LOC = 0xa00; - uint256 internal constant G2X_X1_LOC = 0xa20; - uint256 internal constant G2X_Y0_LOC = 0xa40; - uint256 internal constant G2X_Y1_LOC = 0xa60; - - // ### PROOF DATA MEMORY LOCATIONS - uint256 internal constant W1_X_LOC = 0x1200; - uint256 internal constant W1_Y_LOC = 0x1220; - uint256 internal constant W2_X_LOC = 0x1240; - uint256 internal constant W2_Y_LOC = 0x1260; - uint256 internal constant W3_X_LOC = 0x1280; - uint256 internal constant W3_Y_LOC = 0x12a0; - uint256 internal constant W4_X_LOC = 0x12c0; - uint256 internal constant W4_Y_LOC = 0x12e0; - uint256 internal constant S_X_LOC = 0x1300; - uint256 internal constant S_Y_LOC = 0x1320; - uint256 internal constant Z_X_LOC = 0x1340; - uint256 internal constant Z_Y_LOC = 0x1360; - uint256 internal constant Z_LOOKUP_X_LOC = 0x1380; - uint256 internal constant Z_LOOKUP_Y_LOC = 0x13a0; - uint256 internal constant T1_X_LOC = 0x13c0; - uint256 internal constant T1_Y_LOC = 0x13e0; - uint256 internal constant T2_X_LOC = 0x1400; - uint256 internal constant T2_Y_LOC = 0x1420; - uint256 internal constant T3_X_LOC = 0x1440; - uint256 internal constant T3_Y_LOC = 0x1460; - uint256 internal constant T4_X_LOC = 0x1480; - uint256 internal constant T4_Y_LOC = 0x14a0; - - uint256 internal constant W1_EVAL_LOC = 0x1600; - uint256 internal constant W2_EVAL_LOC = 0x1620; - uint256 internal constant W3_EVAL_LOC = 0x1640; - uint256 internal constant W4_EVAL_LOC = 0x1660; - uint256 internal constant S_EVAL_LOC = 0x1680; - uint256 internal constant Z_EVAL_LOC = 0x16a0; - uint256 internal constant Z_LOOKUP_EVAL_LOC = 0x16c0; - uint256 internal constant Q1_EVAL_LOC = 0x16e0; - uint256 internal constant Q2_EVAL_LOC = 0x1700; - uint256 internal constant Q3_EVAL_LOC = 0x1720; - uint256 internal constant Q4_EVAL_LOC = 0x1740; - uint256 internal constant QM_EVAL_LOC = 0x1760; - uint256 internal constant QC_EVAL_LOC = 0x1780; - uint256 internal constant QARITH_EVAL_LOC = 0x17a0; - uint256 internal constant QSORT_EVAL_LOC = 0x17c0; - uint256 internal constant QELLIPTIC_EVAL_LOC = 0x17e0; - uint256 internal constant QAUX_EVAL_LOC = 0x1800; - uint256 internal constant TABLE1_EVAL_LOC = 0x1840; - uint256 internal constant TABLE2_EVAL_LOC = 0x1860; - uint256 internal constant TABLE3_EVAL_LOC = 0x1880; - uint256 internal constant TABLE4_EVAL_LOC = 0x18a0; - uint256 internal constant TABLE_TYPE_EVAL_LOC = 0x18c0; - uint256 internal constant ID1_EVAL_LOC = 0x18e0; - uint256 internal constant ID2_EVAL_LOC = 0x1900; - uint256 internal constant ID3_EVAL_LOC = 0x1920; - uint256 internal constant ID4_EVAL_LOC = 0x1940; - uint256 internal constant SIGMA1_EVAL_LOC = 0x1960; - uint256 internal constant SIGMA2_EVAL_LOC = 0x1980; - uint256 internal constant SIGMA3_EVAL_LOC = 0x19a0; - uint256 internal constant SIGMA4_EVAL_LOC = 0x19c0; - uint256 internal constant W1_OMEGA_EVAL_LOC = 0x19e0; - uint256 internal constant W2_OMEGA_EVAL_LOC = 0x2000; - uint256 internal constant W3_OMEGA_EVAL_LOC = 0x2020; - uint256 internal constant W4_OMEGA_EVAL_LOC = 0x2040; - uint256 internal constant S_OMEGA_EVAL_LOC = 0x2060; - uint256 internal constant Z_OMEGA_EVAL_LOC = 0x2080; - uint256 internal constant Z_LOOKUP_OMEGA_EVAL_LOC = 0x20a0; - uint256 internal constant TABLE1_OMEGA_EVAL_LOC = 0x20c0; - uint256 internal constant TABLE2_OMEGA_EVAL_LOC = 0x20e0; - uint256 internal constant TABLE3_OMEGA_EVAL_LOC = 0x2100; - uint256 internal constant TABLE4_OMEGA_EVAL_LOC = 0x2120; - - uint256 internal constant PI_Z_X_LOC = 0x2300; - uint256 internal constant PI_Z_Y_LOC = 0x2320; - uint256 internal constant PI_Z_OMEGA_X_LOC = 0x2340; - uint256 internal constant PI_Z_OMEGA_Y_LOC = 0x2360; - - // Used for elliptic widget. These are alias names for wire + shifted wire evaluations - uint256 internal constant X1_EVAL_LOC = W2_EVAL_LOC; - uint256 internal constant X2_EVAL_LOC = W1_OMEGA_EVAL_LOC; - uint256 internal constant X3_EVAL_LOC = W2_OMEGA_EVAL_LOC; - uint256 internal constant Y1_EVAL_LOC = W3_EVAL_LOC; - uint256 internal constant Y2_EVAL_LOC = W4_OMEGA_EVAL_LOC; - uint256 internal constant Y3_EVAL_LOC = W3_OMEGA_EVAL_LOC; - uint256 internal constant QBETA_LOC = Q3_EVAL_LOC; - uint256 internal constant QBETA_SQR_LOC = Q4_EVAL_LOC; - uint256 internal constant QSIGN_LOC = Q1_EVAL_LOC; - - // ### CHALLENGES MEMORY OFFSETS - - uint256 internal constant C_BETA_LOC = 0x2600; - uint256 internal constant C_GAMMA_LOC = 0x2620; - uint256 internal constant C_ALPHA_LOC = 0x2640; - uint256 internal constant C_ETA_LOC = 0x2660; - uint256 internal constant C_ETA_SQR_LOC = 0x2680; - uint256 internal constant C_ETA_CUBE_LOC = 0x26a0; - - uint256 internal constant C_ZETA_LOC = 0x26c0; - uint256 internal constant C_CURRENT_LOC = 0x26e0; - uint256 internal constant C_V0_LOC = 0x2700; - uint256 internal constant C_V1_LOC = 0x2720; - uint256 internal constant C_V2_LOC = 0x2740; - uint256 internal constant C_V3_LOC = 0x2760; - uint256 internal constant C_V4_LOC = 0x2780; - uint256 internal constant C_V5_LOC = 0x27a0; - uint256 internal constant C_V6_LOC = 0x27c0; - uint256 internal constant C_V7_LOC = 0x27e0; - uint256 internal constant C_V8_LOC = 0x2800; - uint256 internal constant C_V9_LOC = 0x2820; - uint256 internal constant C_V10_LOC = 0x2840; - uint256 internal constant C_V11_LOC = 0x2860; - uint256 internal constant C_V12_LOC = 0x2880; - uint256 internal constant C_V13_LOC = 0x28a0; - uint256 internal constant C_V14_LOC = 0x28c0; - uint256 internal constant C_V15_LOC = 0x28e0; - uint256 internal constant C_V16_LOC = 0x2900; - uint256 internal constant C_V17_LOC = 0x2920; - uint256 internal constant C_V18_LOC = 0x2940; - uint256 internal constant C_V19_LOC = 0x2960; - uint256 internal constant C_V20_LOC = 0x2980; - uint256 internal constant C_V21_LOC = 0x29a0; - uint256 internal constant C_V22_LOC = 0x29c0; - uint256 internal constant C_V23_LOC = 0x29e0; - uint256 internal constant C_V24_LOC = 0x2a00; - uint256 internal constant C_V25_LOC = 0x2a20; - uint256 internal constant C_V26_LOC = 0x2a40; - uint256 internal constant C_V27_LOC = 0x2a60; - uint256 internal constant C_V28_LOC = 0x2a80; - uint256 internal constant C_V29_LOC = 0x2aa0; - uint256 internal constant C_V30_LOC = 0x2ac0; - - uint256 internal constant C_U_LOC = 0x2b00; - - // ### LOCAL VARIABLES MEMORY OFFSETS - uint256 internal constant DELTA_NUMERATOR_LOC = 0x3000; - uint256 internal constant DELTA_DENOMINATOR_LOC = 0x3020; - uint256 internal constant ZETA_POW_N_LOC = 0x3040; - uint256 internal constant PUBLIC_INPUT_DELTA_LOC = 0x3060; - uint256 internal constant ZERO_POLY_LOC = 0x3080; - uint256 internal constant L_START_LOC = 0x30a0; - uint256 internal constant L_END_LOC = 0x30c0; - uint256 internal constant R_ZERO_EVAL_LOC = 0x30e0; - - uint256 internal constant PLOOKUP_DELTA_NUMERATOR_LOC = 0x3100; - uint256 internal constant PLOOKUP_DELTA_DENOMINATOR_LOC = 0x3120; - uint256 internal constant PLOOKUP_DELTA_LOC = 0x3140; - - uint256 internal constant ACCUMULATOR_X_LOC = 0x3160; - uint256 internal constant ACCUMULATOR_Y_LOC = 0x3180; - uint256 internal constant ACCUMULATOR2_X_LOC = 0x31a0; - uint256 internal constant ACCUMULATOR2_Y_LOC = 0x31c0; - uint256 internal constant PAIRING_LHS_X_LOC = 0x31e0; - uint256 internal constant PAIRING_LHS_Y_LOC = 0x3200; - uint256 internal constant PAIRING_RHS_X_LOC = 0x3220; - uint256 internal constant PAIRING_RHS_Y_LOC = 0x3240; - - // misc stuff - uint256 internal constant OMEGA_INVERSE_LOC = 0x3300; - uint256 internal constant C_ALPHA_SQR_LOC = 0x3320; - uint256 internal constant C_ALPHA_CUBE_LOC = 0x3340; - uint256 internal constant C_ALPHA_QUAD_LOC = 0x3360; - uint256 internal constant C_ALPHA_BASE_LOC = 0x3380; - - // ### RECURSION VARIABLE MEMORY LOCATIONS - uint256 internal constant RECURSIVE_P1_X_LOC = 0x3400; - uint256 internal constant RECURSIVE_P1_Y_LOC = 0x3420; - uint256 internal constant RECURSIVE_P2_X_LOC = 0x3440; - uint256 internal constant RECURSIVE_P2_Y_LOC = 0x3460; - uint256 internal constant PUBLIC_INPUTS_HASH_LOCATION = 0x3480; - - // sub-identity storage - uint256 internal constant PERMUTATION_IDENTITY = 0x3500; - uint256 internal constant PLOOKUP_IDENTITY = 0x3520; - uint256 internal constant ARITHMETIC_IDENTITY = 0x3540; - uint256 internal constant SORT_IDENTITY = 0x3560; - uint256 internal constant ELLIPTIC_IDENTITY = 0x3580; - uint256 internal constant AUX_IDENTITY = 0x35a0; - uint256 internal constant AUX_NON_NATIVE_FIELD_EVALUATION = 0x35c0; - uint256 internal constant AUX_LIMB_ACCUMULATOR_EVALUATION = 0x35e0; - uint256 internal constant AUX_RAM_CONSISTENCY_EVALUATION = 0x3600; - uint256 internal constant AUX_ROM_CONSISTENCY_EVALUATION = 0x3620; - uint256 internal constant AUX_MEMORY_EVALUATION = 0x3640; - - uint256 internal constant QUOTIENT_EVAL_LOC = 0x3660; - uint256 internal constant ZERO_POLY_INVERSE_LOC = 0x3680; - - // when hashing public inputs we use memory at NU_CHALLENGE_INPUT_LOC_A, as the hash input size is unknown at compile time - uint256 internal constant NU_CHALLENGE_INPUT_LOC_A = 0x36a0; - uint256 internal constant NU_CHALLENGE_INPUT_LOC_B = 0x36c0; - uint256 internal constant NU_CHALLENGE_INPUT_LOC_C = 0x36e0; - - bytes4 internal constant INVALID_VERIFICATION_KEY_SELECTOR = 0x7e5769bf; - bytes4 internal constant POINT_NOT_ON_CURVE_SELECTOR = 0xa3dad654; - bytes4 internal constant PUBLIC_INPUT_INVALID_BN128_G1_POINT_SELECTOR = 0xeba9f4a6; - bytes4 internal constant PUBLIC_INPUT_GE_P_SELECTOR = 0x374a972f; - bytes4 internal constant MOD_EXP_FAILURE_SELECTOR = 0xf894a7bc; - bytes4 internal constant PAIRING_PREAMBLE_FAILED_SELECTOR = 0x01882d81; - bytes4 internal constant OPENING_COMMITMENT_FAILED_SELECTOR = 0x4e719763; - bytes4 internal constant PAIRING_FAILED_SELECTOR = 0xd71fd263; - - uint256 internal constant ETA_INPUT_LENGTH = 0xc0; // W1, W2, W3 = 6 * 0x20 bytes - - // We need to hash 41 field elements when generating the NU challenge - // w1, w2, w3, w4, s, z, z_lookup, q1, q2, q3, q4, qm, qc, qarith (14) - // qsort, qelliptic, qaux, sigma1, sigma2, sigma, sigma4, (7) - // table1, table2, table3, table4, tabletype, id1, id2, id3, id4, (9) - // w1_omega, w2_omega, w3_omega, w4_omega, s_omega, z_omega, z_lookup_omega, (7) - // table1_omega, table2_omega, table3_omega, table4_omega (4) - uint256 internal constant NU_INPUT_LENGTH = 0x520; // 0x520 = 41 * 0x20 - - // There are ELEVEN G1 group elements added into the transcript in the `beta` round, that we need to skip over - // W1, W2, W3, W4, S, Z, Z_LOOKUP, T1, T2, T3, T4 - uint256 internal constant NU_CALLDATA_SKIP_LENGTH = 0x2c0; // 11 * 0x40 = 0x2c0 - - uint256 internal constant NEGATIVE_INVERSE_OF_2_MODULO_P = - 0x183227397098d014dc2822db40c0ac2e9419f4243cdcb848a1f0fac9f8000000; - uint256 internal constant LIMB_SIZE = 0x100000000000000000; // 2<<68 - uint256 internal constant SUBLIMB_SHIFT = 0x4000; // 2<<14 - - // y^2 = x^3 + ax + b - // for Grumpkin, a = 0 and b = -17. We use b in a custom gate relation that evaluates elliptic curve arithmetic - uint256 internal constant GRUMPKIN_CURVE_B_PARAMETER_NEGATED = 17; - - error INVALID_VERIFICATION_KEY(); - error POINT_NOT_ON_CURVE(); - error PUBLIC_INPUT_COUNT_INVALID(uint256 expected, uint256 actual); - error PUBLIC_INPUT_INVALID_BN128_G1_POINT(); - error PUBLIC_INPUT_GE_P(); - error MOD_EXP_FAILURE(); - error PAIRING_PREAMBLE_FAILED(); - error OPENING_COMMITMENT_FAILED(); - error PAIRING_FAILED(); - - function getVerificationKeyHash() public pure virtual returns (bytes32); - - /** - * @dev We assume that the verification key loaded by this function is constant as we only verify it on deployment - */ - function loadVerificationKey(uint256 _vk, uint256 _omegaInverseLoc) internal pure virtual; - - constructor() { - loadVerificationKey(N_LOC, OMEGA_INVERSE_LOC); - - // We verify that all of the EC points in the verification key lie on the bn128 curve. - assembly { - let q := 21888242871839275222246405745257275088696311157297823662689037894645226208583 // EC group order - - let success := 1 - - // VALIDATE Q1 - { - let x := mload(Q1_X_LOC) - let y := mload(Q1_Y_LOC) - let xx := mulmod(x, x, q) - // validate on curve - success := and(success, eq(mulmod(y, y, q), addmod(mulmod(x, xx, q), 3, q))) - } - // VALIDATE Q2 - { - let x := mload(Q2_X_LOC) - let y := mload(Q2_Y_LOC) - let xx := mulmod(x, x, q) - // validate on curve - success := and(success, eq(mulmod(y, y, q), addmod(mulmod(x, xx, q), 3, q))) - } - // VALIDATE Q3 - { - let x := mload(Q3_X_LOC) - let y := mload(Q3_Y_LOC) - let xx := mulmod(x, x, q) - // validate on curve - success := and(success, eq(mulmod(y, y, q), addmod(mulmod(x, xx, q), 3, q))) - } - // VALIDATE Q4 - { - let x := mload(Q4_X_LOC) - let y := mload(Q4_Y_LOC) - let xx := mulmod(x, x, q) - // validate on curve - success := and(success, eq(mulmod(y, y, q), addmod(mulmod(x, xx, q), 3, q))) - mstore(0x00, x) - mstore(0x20, y) - } - // VALIDATE QM - { - let x := mload(QM_X_LOC) - let y := mload(QM_Y_LOC) - let xx := mulmod(x, x, q) - // validate on curve - success := and(success, eq(mulmod(y, y, q), addmod(mulmod(x, xx, q), 3, q))) - } - // VALIDATE QC - { - let x := mload(QC_X_LOC) - let y := mload(QC_Y_LOC) - let xx := mulmod(x, x, q) - // validate on curve - success := and(success, eq(mulmod(y, y, q), addmod(mulmod(x, xx, q), 3, q))) - } - // VALIDATE QARITH - { - let x := mload(QARITH_X_LOC) - let y := mload(QARITH_Y_LOC) - let xx := mulmod(x, x, q) - // validate on curve - success := and(success, eq(mulmod(y, y, q), addmod(mulmod(x, xx, q), 3, q))) - } - // VALIDATE QSORT - { - let x := mload(QSORT_X_LOC) - let y := mload(QSORT_Y_LOC) - let xx := mulmod(x, x, q) - // validate on curve - success := and(success, eq(mulmod(y, y, q), addmod(mulmod(x, xx, q), 3, q))) - } - // VALIDATE QELLIPTIC - { - let x := mload(QELLIPTIC_X_LOC) - let y := mload(QELLIPTIC_Y_LOC) - let xx := mulmod(x, x, q) - // validate on curve - success := and(success, eq(mulmod(y, y, q), addmod(mulmod(x, xx, q), 3, q))) - } - // VALIDATE QAUX - { - let x := mload(QAUX_X_LOC) - let y := mload(QAUX_Y_LOC) - let xx := mulmod(x, x, q) - // validate on curve - success := and(success, eq(mulmod(y, y, q), addmod(mulmod(x, xx, q), 3, q))) - } - // VALIDATE SIGMA1 - { - let x := mload(SIGMA1_X_LOC) - let y := mload(SIGMA1_Y_LOC) - let xx := mulmod(x, x, q) - // validate on curve - success := and(success, eq(mulmod(y, y, q), addmod(mulmod(x, xx, q), 3, q))) - } - // VALIDATE SIGMA2 - { - let x := mload(SIGMA2_X_LOC) - let y := mload(SIGMA2_Y_LOC) - let xx := mulmod(x, x, q) - // validate on curve - success := and(success, eq(mulmod(y, y, q), addmod(mulmod(x, xx, q), 3, q))) - } - // VALIDATE SIGMA3 - { - let x := mload(SIGMA3_X_LOC) - let y := mload(SIGMA3_Y_LOC) - let xx := mulmod(x, x, q) - // validate on curve - success := and(success, eq(mulmod(y, y, q), addmod(mulmod(x, xx, q), 3, q))) - } - // VALIDATE SIGMA4 - { - let x := mload(SIGMA4_X_LOC) - let y := mload(SIGMA4_Y_LOC) - let xx := mulmod(x, x, q) - // validate on curve - success := and(success, eq(mulmod(y, y, q), addmod(mulmod(x, xx, q), 3, q))) - } - // VALIDATE TABLE1 - { - let x := mload(TABLE1_X_LOC) - let y := mload(TABLE1_Y_LOC) - let xx := mulmod(x, x, q) - // validate on curve - success := and(success, eq(mulmod(y, y, q), addmod(mulmod(x, xx, q), 3, q))) - } - // VALIDATE TABLE2 - { - let x := mload(TABLE2_X_LOC) - let y := mload(TABLE2_Y_LOC) - let xx := mulmod(x, x, q) - // validate on curve - success := and(success, eq(mulmod(y, y, q), addmod(mulmod(x, xx, q), 3, q))) - } - // VALIDATE TABLE3 - { - let x := mload(TABLE3_X_LOC) - let y := mload(TABLE3_Y_LOC) - let xx := mulmod(x, x, q) - // validate on curve - success := and(success, eq(mulmod(y, y, q), addmod(mulmod(x, xx, q), 3, q))) - } - // VALIDATE TABLE4 - { - let x := mload(TABLE4_X_LOC) - let y := mload(TABLE4_Y_LOC) - let xx := mulmod(x, x, q) - // validate on curve - success := and(success, eq(mulmod(y, y, q), addmod(mulmod(x, xx, q), 3, q))) - } - // VALIDATE TABLE_TYPE - { - let x := mload(TABLE_TYPE_X_LOC) - let y := mload(TABLE_TYPE_Y_LOC) - let xx := mulmod(x, x, q) - // validate on curve - success := and(success, eq(mulmod(y, y, q), addmod(mulmod(x, xx, q), 3, q))) - } - // VALIDATE ID1 - { - let x := mload(ID1_X_LOC) - let y := mload(ID1_Y_LOC) - let xx := mulmod(x, x, q) - // validate on curve - success := and(success, eq(mulmod(y, y, q), addmod(mulmod(x, xx, q), 3, q))) - } - // VALIDATE ID2 - { - let x := mload(ID2_X_LOC) - let y := mload(ID2_Y_LOC) - let xx := mulmod(x, x, q) - // validate on curve - success := and(success, eq(mulmod(y, y, q), addmod(mulmod(x, xx, q), 3, q))) - } - // VALIDATE ID3 - { - let x := mload(ID3_X_LOC) - let y := mload(ID3_Y_LOC) - let xx := mulmod(x, x, q) - // validate on curve - success := and(success, eq(mulmod(y, y, q), addmod(mulmod(x, xx, q), 3, q))) - } - // VALIDATE ID4 - { - let x := mload(ID4_X_LOC) - let y := mload(ID4_Y_LOC) - let xx := mulmod(x, x, q) - // validate on curve - success := and(success, eq(mulmod(y, y, q), addmod(mulmod(x, xx, q), 3, q))) - } - - if iszero(success) { - mstore(0x0, INVALID_VERIFICATION_KEY_SELECTOR) - revert(0x00, 0x04) - } - } - } - - /** - * @notice Verify a Ultra Plonk proof - * @param _proof - The serialized proof - * @param _publicInputs - An array of the public inputs - * @return True if proof is valid, reverts otherwise - */ - function verify(bytes calldata _proof, bytes32[] calldata _publicInputs) external view returns (bool) { - loadVerificationKey(N_LOC, OMEGA_INVERSE_LOC); - - uint256 requiredPublicInputCount; - assembly { - requiredPublicInputCount := mload(NUM_INPUTS_LOC) - } - if (requiredPublicInputCount != _publicInputs.length) { - revert PUBLIC_INPUT_COUNT_INVALID(requiredPublicInputCount, _publicInputs.length); - } - - assembly { - let q := 21888242871839275222246405745257275088696311157297823662689037894645226208583 // EC group order - let p := 21888242871839275222246405745257275088548364400416034343698204186575808495617 // Prime field order - - /** - * LOAD PROOF FROM CALLDATA - */ - { - let data_ptr := add(calldataload(0x04), 0x24) - - mstore(W1_Y_LOC, mod(calldataload(data_ptr), q)) - mstore(W1_X_LOC, mod(calldataload(add(data_ptr, 0x20)), q)) - - mstore(W2_Y_LOC, mod(calldataload(add(data_ptr, 0x40)), q)) - mstore(W2_X_LOC, mod(calldataload(add(data_ptr, 0x60)), q)) - - mstore(W3_Y_LOC, mod(calldataload(add(data_ptr, 0x80)), q)) - mstore(W3_X_LOC, mod(calldataload(add(data_ptr, 0xa0)), q)) - - mstore(W4_Y_LOC, mod(calldataload(add(data_ptr, 0xc0)), q)) - mstore(W4_X_LOC, mod(calldataload(add(data_ptr, 0xe0)), q)) - - mstore(S_Y_LOC, mod(calldataload(add(data_ptr, 0x100)), q)) - mstore(S_X_LOC, mod(calldataload(add(data_ptr, 0x120)), q)) - mstore(Z_Y_LOC, mod(calldataload(add(data_ptr, 0x140)), q)) - mstore(Z_X_LOC, mod(calldataload(add(data_ptr, 0x160)), q)) - mstore(Z_LOOKUP_Y_LOC, mod(calldataload(add(data_ptr, 0x180)), q)) - mstore(Z_LOOKUP_X_LOC, mod(calldataload(add(data_ptr, 0x1a0)), q)) - mstore(T1_Y_LOC, mod(calldataload(add(data_ptr, 0x1c0)), q)) - mstore(T1_X_LOC, mod(calldataload(add(data_ptr, 0x1e0)), q)) - - mstore(T2_Y_LOC, mod(calldataload(add(data_ptr, 0x200)), q)) - mstore(T2_X_LOC, mod(calldataload(add(data_ptr, 0x220)), q)) - - mstore(T3_Y_LOC, mod(calldataload(add(data_ptr, 0x240)), q)) - mstore(T3_X_LOC, mod(calldataload(add(data_ptr, 0x260)), q)) - - mstore(T4_Y_LOC, mod(calldataload(add(data_ptr, 0x280)), q)) - mstore(T4_X_LOC, mod(calldataload(add(data_ptr, 0x2a0)), q)) - - mstore(W1_EVAL_LOC, mod(calldataload(add(data_ptr, 0x2c0)), p)) - mstore(W2_EVAL_LOC, mod(calldataload(add(data_ptr, 0x2e0)), p)) - mstore(W3_EVAL_LOC, mod(calldataload(add(data_ptr, 0x300)), p)) - mstore(W4_EVAL_LOC, mod(calldataload(add(data_ptr, 0x320)), p)) - mstore(S_EVAL_LOC, mod(calldataload(add(data_ptr, 0x340)), p)) - mstore(Z_EVAL_LOC, mod(calldataload(add(data_ptr, 0x360)), p)) - mstore(Z_LOOKUP_EVAL_LOC, mod(calldataload(add(data_ptr, 0x380)), p)) - mstore(Q1_EVAL_LOC, mod(calldataload(add(data_ptr, 0x3a0)), p)) - mstore(Q2_EVAL_LOC, mod(calldataload(add(data_ptr, 0x3c0)), p)) - mstore(Q3_EVAL_LOC, mod(calldataload(add(data_ptr, 0x3e0)), p)) - mstore(Q4_EVAL_LOC, mod(calldataload(add(data_ptr, 0x400)), p)) - mstore(QM_EVAL_LOC, mod(calldataload(add(data_ptr, 0x420)), p)) - mstore(QC_EVAL_LOC, mod(calldataload(add(data_ptr, 0x440)), p)) - mstore(QARITH_EVAL_LOC, mod(calldataload(add(data_ptr, 0x460)), p)) - mstore(QSORT_EVAL_LOC, mod(calldataload(add(data_ptr, 0x480)), p)) - mstore(QELLIPTIC_EVAL_LOC, mod(calldataload(add(data_ptr, 0x4a0)), p)) - mstore(QAUX_EVAL_LOC, mod(calldataload(add(data_ptr, 0x4c0)), p)) - - mstore(SIGMA1_EVAL_LOC, mod(calldataload(add(data_ptr, 0x4e0)), p)) - mstore(SIGMA2_EVAL_LOC, mod(calldataload(add(data_ptr, 0x500)), p)) - - mstore(SIGMA3_EVAL_LOC, mod(calldataload(add(data_ptr, 0x520)), p)) - mstore(SIGMA4_EVAL_LOC, mod(calldataload(add(data_ptr, 0x540)), p)) - - mstore(TABLE1_EVAL_LOC, mod(calldataload(add(data_ptr, 0x560)), p)) - mstore(TABLE2_EVAL_LOC, mod(calldataload(add(data_ptr, 0x580)), p)) - mstore(TABLE3_EVAL_LOC, mod(calldataload(add(data_ptr, 0x5a0)), p)) - mstore(TABLE4_EVAL_LOC, mod(calldataload(add(data_ptr, 0x5c0)), p)) - mstore(TABLE_TYPE_EVAL_LOC, mod(calldataload(add(data_ptr, 0x5e0)), p)) - - mstore(ID1_EVAL_LOC, mod(calldataload(add(data_ptr, 0x600)), p)) - mstore(ID2_EVAL_LOC, mod(calldataload(add(data_ptr, 0x620)), p)) - mstore(ID3_EVAL_LOC, mod(calldataload(add(data_ptr, 0x640)), p)) - mstore(ID4_EVAL_LOC, mod(calldataload(add(data_ptr, 0x660)), p)) - - mstore(W1_OMEGA_EVAL_LOC, mod(calldataload(add(data_ptr, 0x680)), p)) - mstore(W2_OMEGA_EVAL_LOC, mod(calldataload(add(data_ptr, 0x6a0)), p)) - mstore(W3_OMEGA_EVAL_LOC, mod(calldataload(add(data_ptr, 0x6c0)), p)) - mstore(W4_OMEGA_EVAL_LOC, mod(calldataload(add(data_ptr, 0x6e0)), p)) - mstore(S_OMEGA_EVAL_LOC, mod(calldataload(add(data_ptr, 0x700)), p)) - - mstore(Z_OMEGA_EVAL_LOC, mod(calldataload(add(data_ptr, 0x720)), p)) - - mstore(Z_LOOKUP_OMEGA_EVAL_LOC, mod(calldataload(add(data_ptr, 0x740)), p)) - mstore(TABLE1_OMEGA_EVAL_LOC, mod(calldataload(add(data_ptr, 0x760)), p)) - mstore(TABLE2_OMEGA_EVAL_LOC, mod(calldataload(add(data_ptr, 0x780)), p)) - mstore(TABLE3_OMEGA_EVAL_LOC, mod(calldataload(add(data_ptr, 0x7a0)), p)) - mstore(TABLE4_OMEGA_EVAL_LOC, mod(calldataload(add(data_ptr, 0x7c0)), p)) - - mstore(PI_Z_Y_LOC, mod(calldataload(add(data_ptr, 0x7e0)), q)) - mstore(PI_Z_X_LOC, mod(calldataload(add(data_ptr, 0x800)), q)) - - mstore(PI_Z_OMEGA_Y_LOC, mod(calldataload(add(data_ptr, 0x820)), q)) - mstore(PI_Z_OMEGA_X_LOC, mod(calldataload(add(data_ptr, 0x840)), q)) - } - - /** - * LOAD RECURSIVE PROOF INTO MEMORY - */ - { - if mload(CONTAINS_RECURSIVE_PROOF_LOC) { - let public_inputs_ptr := add(calldataload(0x24), 0x24) - let index_counter := add(shl(5, mload(RECURSIVE_PROOF_PUBLIC_INPUT_INDICES_LOC)), public_inputs_ptr) - - let x0 := calldataload(index_counter) - x0 := add(x0, shl(68, calldataload(add(index_counter, 0x20)))) - x0 := add(x0, shl(136, calldataload(add(index_counter, 0x40)))) - x0 := add(x0, shl(204, calldataload(add(index_counter, 0x60)))) - let y0 := calldataload(add(index_counter, 0x80)) - y0 := add(y0, shl(68, calldataload(add(index_counter, 0xa0)))) - y0 := add(y0, shl(136, calldataload(add(index_counter, 0xc0)))) - y0 := add(y0, shl(204, calldataload(add(index_counter, 0xe0)))) - let x1 := calldataload(add(index_counter, 0x100)) - x1 := add(x1, shl(68, calldataload(add(index_counter, 0x120)))) - x1 := add(x1, shl(136, calldataload(add(index_counter, 0x140)))) - x1 := add(x1, shl(204, calldataload(add(index_counter, 0x160)))) - let y1 := calldataload(add(index_counter, 0x180)) - y1 := add(y1, shl(68, calldataload(add(index_counter, 0x1a0)))) - y1 := add(y1, shl(136, calldataload(add(index_counter, 0x1c0)))) - y1 := add(y1, shl(204, calldataload(add(index_counter, 0x1e0)))) - mstore(RECURSIVE_P1_X_LOC, x0) - mstore(RECURSIVE_P1_Y_LOC, y0) - mstore(RECURSIVE_P2_X_LOC, x1) - mstore(RECURSIVE_P2_Y_LOC, y1) - - // validate these are valid bn128 G1 points - if iszero(and(and(lt(x0, q), lt(x1, q)), and(lt(y0, q), lt(y1, q)))) { - mstore(0x00, PUBLIC_INPUT_INVALID_BN128_G1_POINT_SELECTOR) - revert(0x00, 0x04) - } - } - } - - { - /** - * Generate initial challenge - */ - mstore(0x00, shl(224, mload(N_LOC))) - mstore(0x04, shl(224, mload(NUM_INPUTS_LOC))) - let challenge := keccak256(0x00, 0x08) - - /** - * Generate eta challenge - */ - mstore(PUBLIC_INPUTS_HASH_LOCATION, challenge) - // The public input location is stored at 0x24, we then add 0x24 to skip selector and the length of public inputs - let public_inputs_start := add(calldataload(0x24), 0x24) - // copy the public inputs over - let public_input_size := mul(mload(NUM_INPUTS_LOC), 0x20) - calldatacopy(add(PUBLIC_INPUTS_HASH_LOCATION, 0x20), public_inputs_start, public_input_size) - - // copy W1, W2, W3 into challenge. Each point is 0x40 bytes, so load 0xc0 = 3 * 0x40 bytes (ETA input length) - let w_start := add(calldataload(0x04), 0x24) - calldatacopy(add(add(PUBLIC_INPUTS_HASH_LOCATION, 0x20), public_input_size), w_start, ETA_INPUT_LENGTH) - - // Challenge is the old challenge + public inputs + W1, W2, W3 (0x20 + public_input_size + 0xc0) - let challenge_bytes_size := add(0x20, add(public_input_size, ETA_INPUT_LENGTH)) - - challenge := keccak256(PUBLIC_INPUTS_HASH_LOCATION, challenge_bytes_size) - { - let eta := mod(challenge, p) - mstore(C_ETA_LOC, eta) - mstore(C_ETA_SQR_LOC, mulmod(eta, eta, p)) - mstore(C_ETA_CUBE_LOC, mulmod(mload(C_ETA_SQR_LOC), eta, p)) - } - - /** - * Generate beta challenge - */ - mstore(0x00, challenge) - mstore(0x20, mload(W4_Y_LOC)) - mstore(0x40, mload(W4_X_LOC)) - mstore(0x60, mload(S_Y_LOC)) - mstore(0x80, mload(S_X_LOC)) - challenge := keccak256(0x00, 0xa0) - mstore(C_BETA_LOC, mod(challenge, p)) - - /** - * Generate gamma challenge - */ - mstore(0x00, challenge) - mstore8(0x20, 0x01) - challenge := keccak256(0x00, 0x21) - mstore(C_GAMMA_LOC, mod(challenge, p)) - - /** - * Generate alpha challenge - */ - mstore(0x00, challenge) - mstore(0x20, mload(Z_Y_LOC)) - mstore(0x40, mload(Z_X_LOC)) - mstore(0x60, mload(Z_LOOKUP_Y_LOC)) - mstore(0x80, mload(Z_LOOKUP_X_LOC)) - challenge := keccak256(0x00, 0xa0) - mstore(C_ALPHA_LOC, mod(challenge, p)) - - /** - * Compute and store some powers of alpha for future computations - */ - let alpha := mload(C_ALPHA_LOC) - mstore(C_ALPHA_SQR_LOC, mulmod(alpha, alpha, p)) - mstore(C_ALPHA_CUBE_LOC, mulmod(mload(C_ALPHA_SQR_LOC), alpha, p)) - mstore(C_ALPHA_QUAD_LOC, mulmod(mload(C_ALPHA_CUBE_LOC), alpha, p)) - mstore(C_ALPHA_BASE_LOC, alpha) - - /** - * Generate zeta challenge - */ - mstore(0x00, challenge) - mstore(0x20, mload(T1_Y_LOC)) - mstore(0x40, mload(T1_X_LOC)) - mstore(0x60, mload(T2_Y_LOC)) - mstore(0x80, mload(T2_X_LOC)) - mstore(0xa0, mload(T3_Y_LOC)) - mstore(0xc0, mload(T3_X_LOC)) - mstore(0xe0, mload(T4_Y_LOC)) - mstore(0x100, mload(T4_X_LOC)) - - challenge := keccak256(0x00, 0x120) - - mstore(C_ZETA_LOC, mod(challenge, p)) - mstore(C_CURRENT_LOC, challenge) - } - - /** - * EVALUATE FIELD OPERATIONS - */ - - /** - * COMPUTE PUBLIC INPUT DELTA - * ΔPI = ∏ᵢ∈ℓ(wᵢ + β σ(i) + γ) / ∏ᵢ∈ℓ(wᵢ + β σ'(i) + γ) - */ - { - let beta := mload(C_BETA_LOC) // β - let gamma := mload(C_GAMMA_LOC) // γ - let work_root := mload(OMEGA_LOC) // ω - let numerator_value := 1 - let denominator_value := 1 - - let p_clone := p // move p to the front of the stack - let valid_inputs := true - - // Load the starting point of the public inputs (jump over the selector and the length of public inputs [0x24]) - let public_inputs_ptr := add(calldataload(0x24), 0x24) - - // endpoint_ptr = public_inputs_ptr + num_inputs * 0x20. // every public input is 0x20 bytes - let endpoint_ptr := add(public_inputs_ptr, mul(mload(NUM_INPUTS_LOC), 0x20)) - - // root_1 = β * 0x05 - let root_1 := mulmod(beta, 0x05, p_clone) // k1.β - // root_2 = β * 0x0c - let root_2 := mulmod(beta, 0x0c, p_clone) - // @note 0x05 + 0x07 == 0x0c == external coset generator - - for {} lt(public_inputs_ptr, endpoint_ptr) { public_inputs_ptr := add(public_inputs_ptr, 0x20) } { - /** - * input = public_input[i] - * valid_inputs &= input < p - * temp = input + gamma - * numerator_value *= (β.σ(i) + wᵢ + γ) // σ(i) = 0x05.ωⁱ - * denominator_value *= (β.σ'(i) + wᵢ + γ) // σ'(i) = 0x0c.ωⁱ - * root_1 *= ω - * root_2 *= ω - */ - - let input := calldataload(public_inputs_ptr) - valid_inputs := and(valid_inputs, lt(input, p_clone)) - let temp := addmod(input, gamma, p_clone) - - numerator_value := mulmod(numerator_value, add(root_1, temp), p_clone) - denominator_value := mulmod(denominator_value, add(root_2, temp), p_clone) - - root_1 := mulmod(root_1, work_root, p_clone) - root_2 := mulmod(root_2, work_root, p_clone) - } - - // Revert if not all public inputs are field elements (i.e. < p) - if iszero(valid_inputs) { - mstore(0x00, PUBLIC_INPUT_GE_P_SELECTOR) - revert(0x00, 0x04) - } - - mstore(DELTA_NUMERATOR_LOC, numerator_value) - mstore(DELTA_DENOMINATOR_LOC, denominator_value) - } - - /** - * Compute Plookup delta factor [γ(1 + β)]^{n-k} - * k = num roots cut out of Z_H = 4 - */ - { - let delta_base := mulmod(mload(C_GAMMA_LOC), addmod(mload(C_BETA_LOC), 1, p), p) - let delta_numerator := delta_base - { - let exponent := mload(N_LOC) - let count := 1 - for {} lt(count, exponent) { count := add(count, count) } { - delta_numerator := mulmod(delta_numerator, delta_numerator, p) - } - } - mstore(PLOOKUP_DELTA_NUMERATOR_LOC, delta_numerator) - - let delta_denominator := mulmod(delta_base, delta_base, p) - delta_denominator := mulmod(delta_denominator, delta_denominator, p) - mstore(PLOOKUP_DELTA_DENOMINATOR_LOC, delta_denominator) - } - /** - * Compute lagrange poly and vanishing poly fractions - */ - { - /** - * vanishing_numerator = zeta - * ZETA_POW_N = zeta^n - * vanishing_numerator -= 1 - * accumulating_root = omega_inverse - * work_root = p - accumulating_root - * domain_inverse = domain_inverse - * vanishing_denominator = zeta + work_root - * work_root *= accumulating_root - * vanishing_denominator *= (zeta + work_root) - * work_root *= accumulating_root - * vanishing_denominator *= (zeta + work_root) - * vanishing_denominator *= (zeta + (zeta + accumulating_root)) - * work_root = omega - * lagrange_numerator = vanishing_numerator * domain_inverse - * l_start_denominator = zeta - 1 - * accumulating_root = work_root^2 - * l_end_denominator = accumulating_root^2 * work_root * zeta - 1 - * Note: l_end_denominator term contains a term \omega^5 to cut out 5 roots of unity from vanishing poly - */ - - let zeta := mload(C_ZETA_LOC) - - // compute zeta^n, where n is a power of 2 - let vanishing_numerator := zeta - { - // pow_small - let exponent := mload(N_LOC) - let count := 1 - for {} lt(count, exponent) { count := add(count, count) } { - vanishing_numerator := mulmod(vanishing_numerator, vanishing_numerator, p) - } - } - mstore(ZETA_POW_N_LOC, vanishing_numerator) - vanishing_numerator := addmod(vanishing_numerator, sub(p, 1), p) - - let accumulating_root := mload(OMEGA_INVERSE_LOC) - let work_root := sub(p, accumulating_root) - let domain_inverse := mload(DOMAIN_INVERSE_LOC) - - let vanishing_denominator := addmod(zeta, work_root, p) - work_root := mulmod(work_root, accumulating_root, p) - vanishing_denominator := mulmod(vanishing_denominator, addmod(zeta, work_root, p), p) - work_root := mulmod(work_root, accumulating_root, p) - vanishing_denominator := mulmod(vanishing_denominator, addmod(zeta, work_root, p), p) - vanishing_denominator := - mulmod(vanishing_denominator, addmod(zeta, mulmod(work_root, accumulating_root, p), p), p) - - work_root := mload(OMEGA_LOC) - - let lagrange_numerator := mulmod(vanishing_numerator, domain_inverse, p) - let l_start_denominator := addmod(zeta, sub(p, 1), p) - - accumulating_root := mulmod(work_root, work_root, p) - - let l_end_denominator := - addmod( - mulmod(mulmod(mulmod(accumulating_root, accumulating_root, p), work_root, p), zeta, p), sub(p, 1), p - ) - - /** - * Compute inversions using Montgomery's batch inversion trick - */ - let accumulator := mload(DELTA_DENOMINATOR_LOC) - let t0 := accumulator - accumulator := mulmod(accumulator, vanishing_denominator, p) - let t1 := accumulator - accumulator := mulmod(accumulator, vanishing_numerator, p) - let t2 := accumulator - accumulator := mulmod(accumulator, l_start_denominator, p) - let t3 := accumulator - accumulator := mulmod(accumulator, mload(PLOOKUP_DELTA_DENOMINATOR_LOC), p) - let t4 := accumulator - { - mstore(0, 0x20) - mstore(0x20, 0x20) - mstore(0x40, 0x20) - mstore(0x60, mulmod(accumulator, l_end_denominator, p)) - mstore(0x80, sub(p, 2)) - mstore(0xa0, p) - if iszero(staticcall(gas(), 0x05, 0x00, 0xc0, 0x00, 0x20)) { - mstore(0x0, MOD_EXP_FAILURE_SELECTOR) - revert(0x00, 0x04) - } - accumulator := mload(0x00) - } - - t4 := mulmod(accumulator, t4, p) - accumulator := mulmod(accumulator, l_end_denominator, p) - - t3 := mulmod(accumulator, t3, p) - accumulator := mulmod(accumulator, mload(PLOOKUP_DELTA_DENOMINATOR_LOC), p) - - t2 := mulmod(accumulator, t2, p) - accumulator := mulmod(accumulator, l_start_denominator, p) - - t1 := mulmod(accumulator, t1, p) - accumulator := mulmod(accumulator, vanishing_numerator, p) - - t0 := mulmod(accumulator, t0, p) - accumulator := mulmod(accumulator, vanishing_denominator, p) - - accumulator := mulmod(mulmod(accumulator, accumulator, p), mload(DELTA_DENOMINATOR_LOC), p) - - mstore(PUBLIC_INPUT_DELTA_LOC, mulmod(mload(DELTA_NUMERATOR_LOC), accumulator, p)) - mstore(ZERO_POLY_LOC, mulmod(vanishing_numerator, t0, p)) - mstore(ZERO_POLY_INVERSE_LOC, mulmod(vanishing_denominator, t1, p)) - mstore(L_START_LOC, mulmod(lagrange_numerator, t2, p)) - mstore(PLOOKUP_DELTA_LOC, mulmod(mload(PLOOKUP_DELTA_NUMERATOR_LOC), t3, p)) - mstore(L_END_LOC, mulmod(lagrange_numerator, t4, p)) - } - - /** - * UltraPlonk Widget Ordering: - * - * 1. Permutation widget - * 2. Plookup widget - * 3. Arithmetic widget - * 4. Fixed base widget (?) - * 5. GenPermSort widget - * 6. Elliptic widget - * 7. Auxiliary widget - */ - - /** - * COMPUTE PERMUTATION WIDGET EVALUATION - */ - { - let alpha := mload(C_ALPHA_LOC) - let beta := mload(C_BETA_LOC) - let gamma := mload(C_GAMMA_LOC) - - /** - * t1 = (W1 + gamma + beta * ID1) * (W2 + gamma + beta * ID2) - * t2 = (W3 + gamma + beta * ID3) * (W4 + gamma + beta * ID4) - * result = alpha_base * z_eval * t1 * t2 - * t1 = (W1 + gamma + beta * sigma_1_eval) * (W2 + gamma + beta * sigma_2_eval) - * t2 = (W2 + gamma + beta * sigma_3_eval) * (W3 + gamma + beta * sigma_4_eval) - * result -= (alpha_base * z_omega_eval * t1 * t2) - */ - let t1 := - mulmod( - add(add(mload(W1_EVAL_LOC), gamma), mulmod(beta, mload(ID1_EVAL_LOC), p)), - add(add(mload(W2_EVAL_LOC), gamma), mulmod(beta, mload(ID2_EVAL_LOC), p)), - p - ) - let t2 := - mulmod( - add(add(mload(W3_EVAL_LOC), gamma), mulmod(beta, mload(ID3_EVAL_LOC), p)), - add(add(mload(W4_EVAL_LOC), gamma), mulmod(beta, mload(ID4_EVAL_LOC), p)), - p - ) - let result := mulmod(mload(C_ALPHA_BASE_LOC), mulmod(mload(Z_EVAL_LOC), mulmod(t1, t2, p), p), p) - t1 := - mulmod( - add(add(mload(W1_EVAL_LOC), gamma), mulmod(beta, mload(SIGMA1_EVAL_LOC), p)), - add(add(mload(W2_EVAL_LOC), gamma), mulmod(beta, mload(SIGMA2_EVAL_LOC), p)), - p - ) - t2 := - mulmod( - add(add(mload(W3_EVAL_LOC), gamma), mulmod(beta, mload(SIGMA3_EVAL_LOC), p)), - add(add(mload(W4_EVAL_LOC), gamma), mulmod(beta, mload(SIGMA4_EVAL_LOC), p)), - p - ) - result := - addmod( - result, - sub(p, mulmod(mload(C_ALPHA_BASE_LOC), mulmod(mload(Z_OMEGA_EVAL_LOC), mulmod(t1, t2, p), p), p)), - p - ) - - /** - * alpha_base *= alpha - * result += alpha_base . (L_{n-k}(ʓ) . (z(ʓ.ω) - ∆_{PI})) - * alpha_base *= alpha - * result += alpha_base . (L_1(ʓ)(Z(ʓ) - 1)) - * alpha_Base *= alpha - */ - mstore(C_ALPHA_BASE_LOC, mulmod(mload(C_ALPHA_BASE_LOC), mload(C_ALPHA_LOC), p)) - result := - addmod( - result, - mulmod( - mload(C_ALPHA_BASE_LOC), - mulmod( - mload(L_END_LOC), - addmod(mload(Z_OMEGA_EVAL_LOC), sub(p, mload(PUBLIC_INPUT_DELTA_LOC)), p), - p - ), - p - ), - p - ) - mstore(C_ALPHA_BASE_LOC, mulmod(mload(C_ALPHA_BASE_LOC), mload(C_ALPHA_LOC), p)) - mstore( - PERMUTATION_IDENTITY, - addmod( - result, - mulmod( - mload(C_ALPHA_BASE_LOC), - mulmod(mload(L_START_LOC), addmod(mload(Z_EVAL_LOC), sub(p, 1), p), p), - p - ), - p - ) - ) - mstore(C_ALPHA_BASE_LOC, mulmod(mload(C_ALPHA_BASE_LOC), mload(C_ALPHA_LOC), p)) - } - - /** - * COMPUTE PLOOKUP WIDGET EVALUATION - */ - { - /** - * Goal: f = (w1(z) + q2.w1(zω)) + η(w2(z) + qm.w2(zω)) + η²(w3(z) + qc.w_3(zω)) + q3(z).η³ - * f = η.q3(z) - * f += (w3(z) + qc.w_3(zω)) - * f *= η - * f += (w2(z) + qm.w2(zω)) - * f *= η - * f += (w1(z) + q2.w1(zω)) - */ - let f := mulmod(mload(C_ETA_LOC), mload(Q3_EVAL_LOC), p) - f := - addmod(f, addmod(mload(W3_EVAL_LOC), mulmod(mload(QC_EVAL_LOC), mload(W3_OMEGA_EVAL_LOC), p), p), p) - f := mulmod(f, mload(C_ETA_LOC), p) - f := - addmod(f, addmod(mload(W2_EVAL_LOC), mulmod(mload(QM_EVAL_LOC), mload(W2_OMEGA_EVAL_LOC), p), p), p) - f := mulmod(f, mload(C_ETA_LOC), p) - f := - addmod(f, addmod(mload(W1_EVAL_LOC), mulmod(mload(Q2_EVAL_LOC), mload(W1_OMEGA_EVAL_LOC), p), p), p) - - // t(z) = table4(z).η³ + table3(z).η² + table2(z).η + table1(z) - let t := - addmod( - addmod( - addmod( - mulmod(mload(TABLE4_EVAL_LOC), mload(C_ETA_CUBE_LOC), p), - mulmod(mload(TABLE3_EVAL_LOC), mload(C_ETA_SQR_LOC), p), - p - ), - mulmod(mload(TABLE2_EVAL_LOC), mload(C_ETA_LOC), p), - p - ), - mload(TABLE1_EVAL_LOC), - p - ) - - // t(zw) = table4(zw).η³ + table3(zw).η² + table2(zw).η + table1(zw) - let t_omega := - addmod( - addmod( - addmod( - mulmod(mload(TABLE4_OMEGA_EVAL_LOC), mload(C_ETA_CUBE_LOC), p), - mulmod(mload(TABLE3_OMEGA_EVAL_LOC), mload(C_ETA_SQR_LOC), p), - p - ), - mulmod(mload(TABLE2_OMEGA_EVAL_LOC), mload(C_ETA_LOC), p), - p - ), - mload(TABLE1_OMEGA_EVAL_LOC), - p - ) - - /** - * Goal: numerator = (TABLE_TYPE_EVAL * f(z) + γ) * (t(z) + βt(zω) + γ(β + 1)) * (β + 1) - * gamma_beta_constant = γ(β + 1) - * numerator = f * TABLE_TYPE_EVAL + gamma - * temp0 = t(z) + t(zω) * β + gamma_beta_constant - * numerator *= temp0 - * numerator *= (β + 1) - * temp0 = alpha * l_1 - * numerator += temp0 - * numerator *= z_lookup(z) - * numerator -= temp0 - */ - let gamma_beta_constant := mulmod(mload(C_GAMMA_LOC), addmod(mload(C_BETA_LOC), 1, p), p) - let numerator := addmod(mulmod(f, mload(TABLE_TYPE_EVAL_LOC), p), mload(C_GAMMA_LOC), p) - let temp0 := addmod(addmod(t, mulmod(t_omega, mload(C_BETA_LOC), p), p), gamma_beta_constant, p) - numerator := mulmod(numerator, temp0, p) - numerator := mulmod(numerator, addmod(mload(C_BETA_LOC), 1, p), p) - temp0 := mulmod(mload(C_ALPHA_LOC), mload(L_START_LOC), p) - numerator := addmod(numerator, temp0, p) - numerator := mulmod(numerator, mload(Z_LOOKUP_EVAL_LOC), p) - numerator := addmod(numerator, sub(p, temp0), p) - - /** - * Goal: denominator = z_lookup(zω)*[s(z) + βs(zω) + γ(1 + β)] - [z_lookup(zω) - [γ(1 + β)]^{n-k}]*α²L_end(z) - * note: delta_factor = [γ(1 + β)]^{n-k} - * denominator = s(z) + βs(zω) + γ(β + 1) - * temp1 = α²L_end(z) - * denominator -= temp1 - * denominator *= z_lookup(zω) - * denominator += temp1 * delta_factor - * PLOOKUP_IDENTITY = (numerator - denominator).alpha_base - * alpha_base *= alpha^3 - */ - let denominator := - addmod( - addmod(mload(S_EVAL_LOC), mulmod(mload(S_OMEGA_EVAL_LOC), mload(C_BETA_LOC), p), p), - gamma_beta_constant, - p - ) - let temp1 := mulmod(mload(C_ALPHA_SQR_LOC), mload(L_END_LOC), p) - denominator := addmod(denominator, sub(p, temp1), p) - denominator := mulmod(denominator, mload(Z_LOOKUP_OMEGA_EVAL_LOC), p) - denominator := addmod(denominator, mulmod(temp1, mload(PLOOKUP_DELTA_LOC), p), p) - - mstore(PLOOKUP_IDENTITY, mulmod(addmod(numerator, sub(p, denominator), p), mload(C_ALPHA_BASE_LOC), p)) - - // update alpha - mstore(C_ALPHA_BASE_LOC, mulmod(mload(C_ALPHA_BASE_LOC), mload(C_ALPHA_CUBE_LOC), p)) - } - - /** - * COMPUTE ARITHMETIC WIDGET EVALUATION - */ - { - /** - * The basic arithmetic gate identity in standard plonk is as follows. - * (w_1 . w_2 . q_m) + (w_1 . q_1) + (w_2 . q_2) + (w_3 . q_3) + (w_4 . q_4) + q_c = 0 - * However, for Ultraplonk, we extend this to support "passing" wires between rows (shown without alpha scaling below): - * q_arith * ( ( (-1/2) * (q_arith - 3) * q_m * w_1 * w_2 + q_1 * w_1 + q_2 * w_2 + q_3 * w_3 + q_4 * w_4 + q_c ) + - * (q_arith - 1)*( α * (q_arith - 2) * (w_1 + w_4 - w_1_omega + q_m) + w_4_omega) ) = 0 - * - * This formula results in several cases depending on q_arith: - * 1. q_arith == 0: Arithmetic gate is completely disabled - * - * 2. q_arith == 1: Everything in the minigate on the right is disabled. The equation is just a standard plonk equation - * with extra wires: q_m * w_1 * w_2 + q_1 * w_1 + q_2 * w_2 + q_3 * w_3 + q_4 * w_4 + q_c = 0 - * - * 3. q_arith == 2: The (w_1 + w_4 - ...) term is disabled. THe equation is: - * (1/2) * q_m * w_1 * w_2 + q_1 * w_1 + q_2 * w_2 + q_3 * w_3 + q_4 * w_4 + q_c + w_4_omega = 0 - * It allows defining w_4 at next index (w_4_omega) in terms of current wire values - * - * 4. q_arith == 3: The product of w_1 and w_2 is disabled, but a mini addition gate is enabled. α allows us to split - * the equation into two: - * - * q_1 * w_1 + q_2 * w_2 + q_3 * w_3 + q_4 * w_4 + q_c + 2 * w_4_omega = 0 - * and - * w_1 + w_4 - w_1_omega + q_m = 0 (we are reusing q_m here) - * - * 5. q_arith > 3: The product of w_1 and w_2 is scaled by (q_arith - 3), while the w_4_omega term is scaled by (q_arith - 1). - * The equation can be split into two: - * - * (q_arith - 3)* q_m * w_1 * w_ 2 + q_1 * w_1 + q_2 * w_2 + q_3 * w_3 + q_4 * w_4 + q_c + (q_arith - 1) * w_4_omega = 0 - * and - * w_1 + w_4 - w_1_omega + q_m = 0 - * - * The problem that q_m is used both in both equations can be dealt with by appropriately changing selector values at - * the next gate. Then we can treat (q_arith - 1) as a simulated q_6 selector and scale q_m to handle (q_arith - 3) at - * product. - */ - - let w1q1 := mulmod(mload(W1_EVAL_LOC), mload(Q1_EVAL_LOC), p) - let w2q2 := mulmod(mload(W2_EVAL_LOC), mload(Q2_EVAL_LOC), p) - let w3q3 := mulmod(mload(W3_EVAL_LOC), mload(Q3_EVAL_LOC), p) - let w4q3 := mulmod(mload(W4_EVAL_LOC), mload(Q4_EVAL_LOC), p) - - // @todo - Add a explicit test that hits QARITH == 3 - // w1w2qm := (w_1 . w_2 . q_m . (QARITH_EVAL_LOC - 3)) / 2 - let w1w2qm := - mulmod( - mulmod( - mulmod(mulmod(mload(W1_EVAL_LOC), mload(W2_EVAL_LOC), p), mload(QM_EVAL_LOC), p), - addmod(mload(QARITH_EVAL_LOC), sub(p, 3), p), - p - ), - NEGATIVE_INVERSE_OF_2_MODULO_P, - p - ) - - // (w_1 . w_2 . q_m . (q_arith - 3)) / -2) + (w_1 . q_1) + (w_2 . q_2) + (w_3 . q_3) + (w_4 . q_4) + q_c - let identity := - addmod( - mload(QC_EVAL_LOC), addmod(w4q3, addmod(w3q3, addmod(w2q2, addmod(w1q1, w1w2qm, p), p), p), p), p - ) - - // if q_arith == 3 we evaluate an additional mini addition gate (on top of the regular one), where: - // w_1 + w_4 - w_1_omega + q_m = 0 - // we use this gate to save an addition gate when adding or subtracting non-native field elements - // α * (q_arith - 2) * (w_1 + w_4 - w_1_omega + q_m) - let extra_small_addition_gate_identity := - mulmod( - mload(C_ALPHA_LOC), - mulmod( - addmod(mload(QARITH_EVAL_LOC), sub(p, 2), p), - addmod( - mload(QM_EVAL_LOC), - addmod( - sub(p, mload(W1_OMEGA_EVAL_LOC)), addmod(mload(W1_EVAL_LOC), mload(W4_EVAL_LOC), p), p - ), - p - ), - p - ), - p - ) - - // if q_arith == 2 OR q_arith == 3 we add the 4th wire of the NEXT gate into the arithmetic identity - // N.B. if q_arith > 2, this wire value will be scaled by (q_arith - 1) relative to the other gate wires! - // alpha_base * q_arith * (identity + (q_arith - 1) * (w_4_omega + extra_small_addition_gate_identity)) - mstore( - ARITHMETIC_IDENTITY, - mulmod( - mload(C_ALPHA_BASE_LOC), - mulmod( - mload(QARITH_EVAL_LOC), - addmod( - identity, - mulmod( - addmod(mload(QARITH_EVAL_LOC), sub(p, 1), p), - addmod(mload(W4_OMEGA_EVAL_LOC), extra_small_addition_gate_identity, p), - p - ), - p - ), - p - ), - p - ) - ) - - // update alpha - mstore(C_ALPHA_BASE_LOC, mulmod(mload(C_ALPHA_BASE_LOC), mload(C_ALPHA_SQR_LOC), p)) - } - - /** - * COMPUTE GENPERMSORT WIDGET EVALUATION - */ - { - /** - * D1 = (w2 - w1) - * D2 = (w3 - w2) - * D3 = (w4 - w3) - * D4 = (w1_omega - w4) - * - * α_a = alpha_base - * α_b = alpha_base * α - * α_c = alpha_base * α^2 - * α_d = alpha_base * α^3 - * - * range_accumulator = ( - * D1(D1 - 1)(D1 - 2)(D1 - 3).α_a + - * D2(D2 - 1)(D2 - 2)(D2 - 3).α_b + - * D3(D3 - 1)(D3 - 2)(D3 - 3).α_c + - * D4(D4 - 1)(D4 - 2)(D4 - 3).α_d + - * ) . q_sort - */ - let minus_two := sub(p, 2) - let minus_three := sub(p, 3) - let d1 := addmod(mload(W2_EVAL_LOC), sub(p, mload(W1_EVAL_LOC)), p) - let d2 := addmod(mload(W3_EVAL_LOC), sub(p, mload(W2_EVAL_LOC)), p) - let d3 := addmod(mload(W4_EVAL_LOC), sub(p, mload(W3_EVAL_LOC)), p) - let d4 := addmod(mload(W1_OMEGA_EVAL_LOC), sub(p, mload(W4_EVAL_LOC)), p) - - let range_accumulator := - mulmod( - mulmod( - mulmod(addmod(mulmod(d1, d1, p), sub(p, d1), p), addmod(d1, minus_two, p), p), - addmod(d1, minus_three, p), - p - ), - mload(C_ALPHA_BASE_LOC), - p - ) - range_accumulator := - addmod( - range_accumulator, - mulmod( - mulmod( - mulmod(addmod(mulmod(d2, d2, p), sub(p, d2), p), addmod(d2, minus_two, p), p), - addmod(d2, minus_three, p), - p - ), - mulmod(mload(C_ALPHA_BASE_LOC), mload(C_ALPHA_LOC), p), - p - ), - p - ) - range_accumulator := - addmod( - range_accumulator, - mulmod( - mulmod( - mulmod(addmod(mulmod(d3, d3, p), sub(p, d3), p), addmod(d3, minus_two, p), p), - addmod(d3, minus_three, p), - p - ), - mulmod(mload(C_ALPHA_BASE_LOC), mload(C_ALPHA_SQR_LOC), p), - p - ), - p - ) - range_accumulator := - addmod( - range_accumulator, - mulmod( - mulmod( - mulmod(addmod(mulmod(d4, d4, p), sub(p, d4), p), addmod(d4, minus_two, p), p), - addmod(d4, minus_three, p), - p - ), - mulmod(mload(C_ALPHA_BASE_LOC), mload(C_ALPHA_CUBE_LOC), p), - p - ), - p - ) - range_accumulator := mulmod(range_accumulator, mload(QSORT_EVAL_LOC), p) - - mstore(SORT_IDENTITY, range_accumulator) - - // update alpha - mstore(C_ALPHA_BASE_LOC, mulmod(mload(C_ALPHA_BASE_LOC), mload(C_ALPHA_QUAD_LOC), p)) - } - - /** - * COMPUTE ELLIPTIC WIDGET EVALUATION - */ - { - /** - * endo_term = (-x_2) * x_1 * (x_3 * 2 + x_1) * q_beta - * endo_sqr_term = x_2^2 - * endo_sqr_term *= (x_3 - x_1) - * endo_sqr_term *= q_beta^2 - * leftovers = x_2^2 - * leftovers *= x_2 - * leftovers += x_1^2 * (x_3 + x_1) @follow-up Invalid comment in BB widget - * leftovers -= (y_2^2 + y_1^2) - * sign_term = y_2 * y_1 - * sign_term += sign_term - * sign_term *= q_sign - */ - // q_elliptic * (x3 + x2 + x1)(x2 - x1)(x2 - x1) - y2^2 - y1^2 + 2(y2y1)*q_sign = 0 - let x_diff := addmod(mload(X2_EVAL_LOC), sub(p, mload(X1_EVAL_LOC)), p) - let y2_sqr := mulmod(mload(Y2_EVAL_LOC), mload(Y2_EVAL_LOC), p) - let y1_sqr := mulmod(mload(Y1_EVAL_LOC), mload(Y1_EVAL_LOC), p) - let y1y2 := mulmod(mulmod(mload(Y1_EVAL_LOC), mload(Y2_EVAL_LOC), p), mload(QSIGN_LOC), p) - - let x_add_identity := - addmod( - mulmod( - addmod(mload(X3_EVAL_LOC), addmod(mload(X2_EVAL_LOC), mload(X1_EVAL_LOC), p), p), - mulmod(x_diff, x_diff, p), - p - ), - addmod( - sub( - p, - addmod(y2_sqr, y1_sqr, p) - ), - addmod(y1y2, y1y2, p), - p - ), - p - ) - x_add_identity := - mulmod( - mulmod( - x_add_identity, - addmod( - 1, - sub(p, mload(QM_EVAL_LOC)), - p - ), - p - ), - mload(C_ALPHA_BASE_LOC), - p - ) - - // q_elliptic * (x3 + x2 + x1)(x2 - x1)(x2 - x1) - y2^2 - y1^2 + 2(y2y1)*q_sign = 0 - let y1_plus_y3 := addmod( - mload(Y1_EVAL_LOC), - mload(Y3_EVAL_LOC), - p - ) - let y_diff := addmod(mulmod(mload(Y2_EVAL_LOC), mload(QSIGN_LOC), p), sub(p, mload(Y1_EVAL_LOC)), p) - let y_add_identity := - addmod( - mulmod(y1_plus_y3, x_diff, p), - mulmod(addmod(mload(X3_EVAL_LOC), sub(p, mload(X1_EVAL_LOC)), p), y_diff, p), - p - ) - y_add_identity := - mulmod( - mulmod(y_add_identity, addmod(1, sub(p, mload(QM_EVAL_LOC)), p), p), - mulmod(mload(C_ALPHA_BASE_LOC), mload(C_ALPHA_LOC), p), - p - ) - - // ELLIPTIC_IDENTITY = (x_identity + y_identity) * Q_ELLIPTIC_EVAL - mstore( - ELLIPTIC_IDENTITY, mulmod(addmod(x_add_identity, y_add_identity, p), mload(QELLIPTIC_EVAL_LOC), p) - ) - } - { - /** - * x_pow_4 = (y_1_sqr - curve_b) * x_1; - * y_1_sqr_mul_4 = y_1_sqr + y_1_sqr; - * y_1_sqr_mul_4 += y_1_sqr_mul_4; - * x_1_pow_4_mul_9 = x_pow_4; - * x_1_pow_4_mul_9 += x_1_pow_4_mul_9; - * x_1_pow_4_mul_9 += x_1_pow_4_mul_9; - * x_1_pow_4_mul_9 += x_1_pow_4_mul_9; - * x_1_pow_4_mul_9 += x_pow_4; - * x_1_sqr_mul_3 = x_1_sqr + x_1_sqr + x_1_sqr; - * x_double_identity = (x_3 + x_1 + x_1) * y_1_sqr_mul_4 - x_1_pow_4_mul_9; - * y_double_identity = x_1_sqr_mul_3 * (x_1 - x_3) - (y_1 + y_1) * (y_1 + y_3); - */ - // (x3 + x1 + x1) (4y1*y1) - 9 * x1 * x1 * x1 * x1 = 0 - let x1_sqr := mulmod(mload(X1_EVAL_LOC), mload(X1_EVAL_LOC), p) - let y1_sqr := mulmod(mload(Y1_EVAL_LOC), mload(Y1_EVAL_LOC), p) - let x_pow_4 := mulmod(addmod(y1_sqr, GRUMPKIN_CURVE_B_PARAMETER_NEGATED, p), mload(X1_EVAL_LOC), p) - let y1_sqr_mul_4 := mulmod(y1_sqr, 4, p) - let x1_pow_4_mul_9 := mulmod(x_pow_4, 9, p) - let x1_sqr_mul_3 := mulmod(x1_sqr, 3, p) - let x_double_identity := - addmod( - mulmod( - addmod(mload(X3_EVAL_LOC), addmod(mload(X1_EVAL_LOC), mload(X1_EVAL_LOC), p), p), - y1_sqr_mul_4, - p - ), - sub(p, x1_pow_4_mul_9), - p - ) - // (y1 + y1) (2y1) - (3 * x1 * x1)(x1 - x3) = 0 - let y_double_identity := - addmod( - mulmod(x1_sqr_mul_3, addmod(mload(X1_EVAL_LOC), sub(p, mload(X3_EVAL_LOC)), p), p), - sub( - p, - mulmod( - addmod(mload(Y1_EVAL_LOC), mload(Y1_EVAL_LOC), p), - addmod(mload(Y1_EVAL_LOC), mload(Y3_EVAL_LOC), p), - p - ) - ), - p - ) - x_double_identity := mulmod(x_double_identity, mload(C_ALPHA_BASE_LOC), p) - y_double_identity := - mulmod(y_double_identity, mulmod(mload(C_ALPHA_BASE_LOC), mload(C_ALPHA_LOC), p), p) - x_double_identity := mulmod(x_double_identity, mload(QM_EVAL_LOC), p) - y_double_identity := mulmod(y_double_identity, mload(QM_EVAL_LOC), p) - // ELLIPTIC_IDENTITY += (x_double_identity + y_double_identity) * Q_DOUBLE_EVAL - mstore( - ELLIPTIC_IDENTITY, - addmod( - mload(ELLIPTIC_IDENTITY), - mulmod(addmod(x_double_identity, y_double_identity, p), mload(QELLIPTIC_EVAL_LOC), p), - p - ) - ) - - // update alpha - mstore(C_ALPHA_BASE_LOC, mulmod(mload(C_ALPHA_BASE_LOC), mload(C_ALPHA_QUAD_LOC), p)) - } - - /** - * COMPUTE AUXILIARY WIDGET EVALUATION - */ - { - { - /** - * Non native field arithmetic gate 2 - * _ _ - * / _ _ _ 14 \ - * q_2 . q_4 | (w_1 . w_2) + (w_1 . w_2) + (w_1 . w_4 + w_2 . w_3 - w_3) . 2 - w_3 - w_4 | - * \_ _/ - * - * limb_subproduct = w_1 . w_2_omega + w_1_omega . w_2 - * non_native_field_gate_2 = w_1 * w_4 + w_4 * w_3 - w_3_omega - * non_native_field_gate_2 = non_native_field_gate_2 * limb_size - * non_native_field_gate_2 -= w_4_omega - * non_native_field_gate_2 += limb_subproduct - * non_native_field_gate_2 *= q_4 - * limb_subproduct *= limb_size - * limb_subproduct += w_1_omega * w_2_omega - * non_native_field_gate_1 = (limb_subproduct + w_3 + w_4) * q_3 - * non_native_field_gate_3 = (limb_subproduct + w_4 - (w_3_omega + w_4_omega)) * q_m - * non_native_field_identity = (non_native_field_gate_1 + non_native_field_gate_2 + non_native_field_gate_3) * q_2 - */ - - let limb_subproduct := - addmod( - mulmod(mload(W1_EVAL_LOC), mload(W2_OMEGA_EVAL_LOC), p), - mulmod(mload(W1_OMEGA_EVAL_LOC), mload(W2_EVAL_LOC), p), - p - ) - - let non_native_field_gate_2 := - addmod( - addmod( - mulmod(mload(W1_EVAL_LOC), mload(W4_EVAL_LOC), p), - mulmod(mload(W2_EVAL_LOC), mload(W3_EVAL_LOC), p), - p - ), - sub(p, mload(W3_OMEGA_EVAL_LOC)), - p - ) - non_native_field_gate_2 := mulmod(non_native_field_gate_2, LIMB_SIZE, p) - non_native_field_gate_2 := addmod(non_native_field_gate_2, sub(p, mload(W4_OMEGA_EVAL_LOC)), p) - non_native_field_gate_2 := addmod(non_native_field_gate_2, limb_subproduct, p) - non_native_field_gate_2 := mulmod(non_native_field_gate_2, mload(Q4_EVAL_LOC), p) - limb_subproduct := mulmod(limb_subproduct, LIMB_SIZE, p) - limb_subproduct := - addmod(limb_subproduct, mulmod(mload(W1_OMEGA_EVAL_LOC), mload(W2_OMEGA_EVAL_LOC), p), p) - let non_native_field_gate_1 := - mulmod( - addmod(limb_subproduct, sub(p, addmod(mload(W3_EVAL_LOC), mload(W4_EVAL_LOC), p)), p), - mload(Q3_EVAL_LOC), - p - ) - let non_native_field_gate_3 := - mulmod( - addmod( - addmod(limb_subproduct, mload(W4_EVAL_LOC), p), - sub(p, addmod(mload(W3_OMEGA_EVAL_LOC), mload(W4_OMEGA_EVAL_LOC), p)), - p - ), - mload(QM_EVAL_LOC), - p - ) - let non_native_field_identity := - mulmod( - addmod(addmod(non_native_field_gate_1, non_native_field_gate_2, p), non_native_field_gate_3, p), - mload(Q2_EVAL_LOC), - p - ) - - mstore(AUX_NON_NATIVE_FIELD_EVALUATION, non_native_field_identity) - } - - { - /** - * limb_accumulator_1 = w_2_omega; - * limb_accumulator_1 *= SUBLIMB_SHIFT; - * limb_accumulator_1 += w_1_omega; - * limb_accumulator_1 *= SUBLIMB_SHIFT; - * limb_accumulator_1 += w_3; - * limb_accumulator_1 *= SUBLIMB_SHIFT; - * limb_accumulator_1 += w_2; - * limb_accumulator_1 *= SUBLIMB_SHIFT; - * limb_accumulator_1 += w_1; - * limb_accumulator_1 -= w_4; - * limb_accumulator_1 *= q_4; - */ - let limb_accumulator_1 := mulmod(mload(W2_OMEGA_EVAL_LOC), SUBLIMB_SHIFT, p) - limb_accumulator_1 := addmod(limb_accumulator_1, mload(W1_OMEGA_EVAL_LOC), p) - limb_accumulator_1 := mulmod(limb_accumulator_1, SUBLIMB_SHIFT, p) - limb_accumulator_1 := addmod(limb_accumulator_1, mload(W3_EVAL_LOC), p) - limb_accumulator_1 := mulmod(limb_accumulator_1, SUBLIMB_SHIFT, p) - limb_accumulator_1 := addmod(limb_accumulator_1, mload(W2_EVAL_LOC), p) - limb_accumulator_1 := mulmod(limb_accumulator_1, SUBLIMB_SHIFT, p) - limb_accumulator_1 := addmod(limb_accumulator_1, mload(W1_EVAL_LOC), p) - limb_accumulator_1 := addmod(limb_accumulator_1, sub(p, mload(W4_EVAL_LOC)), p) - limb_accumulator_1 := mulmod(limb_accumulator_1, mload(Q4_EVAL_LOC), p) - - /** - * limb_accumulator_2 = w_3_omega; - * limb_accumulator_2 *= SUBLIMB_SHIFT; - * limb_accumulator_2 += w_2_omega; - * limb_accumulator_2 *= SUBLIMB_SHIFT; - * limb_accumulator_2 += w_1_omega; - * limb_accumulator_2 *= SUBLIMB_SHIFT; - * limb_accumulator_2 += w_4; - * limb_accumulator_2 *= SUBLIMB_SHIFT; - * limb_accumulator_2 += w_3; - * limb_accumulator_2 -= w_4_omega; - * limb_accumulator_2 *= q_m; - */ - let limb_accumulator_2 := mulmod(mload(W3_OMEGA_EVAL_LOC), SUBLIMB_SHIFT, p) - limb_accumulator_2 := addmod(limb_accumulator_2, mload(W2_OMEGA_EVAL_LOC), p) - limb_accumulator_2 := mulmod(limb_accumulator_2, SUBLIMB_SHIFT, p) - limb_accumulator_2 := addmod(limb_accumulator_2, mload(W1_OMEGA_EVAL_LOC), p) - limb_accumulator_2 := mulmod(limb_accumulator_2, SUBLIMB_SHIFT, p) - limb_accumulator_2 := addmod(limb_accumulator_2, mload(W4_EVAL_LOC), p) - limb_accumulator_2 := mulmod(limb_accumulator_2, SUBLIMB_SHIFT, p) - limb_accumulator_2 := addmod(limb_accumulator_2, mload(W3_EVAL_LOC), p) - limb_accumulator_2 := addmod(limb_accumulator_2, sub(p, mload(W4_OMEGA_EVAL_LOC)), p) - limb_accumulator_2 := mulmod(limb_accumulator_2, mload(QM_EVAL_LOC), p) - - mstore( - AUX_LIMB_ACCUMULATOR_EVALUATION, - mulmod(addmod(limb_accumulator_1, limb_accumulator_2, p), mload(Q3_EVAL_LOC), p) - ) - } - - { - /** - * memory_record_check = w_3; - * memory_record_check *= eta; - * memory_record_check += w_2; - * memory_record_check *= eta; - * memory_record_check += w_1; - * memory_record_check *= eta; - * memory_record_check += q_c; - * - * partial_record_check = memory_record_check; - * - * memory_record_check -= w_4; - */ - - let memory_record_check := mulmod(mload(W3_EVAL_LOC), mload(C_ETA_LOC), p) - memory_record_check := addmod(memory_record_check, mload(W2_EVAL_LOC), p) - memory_record_check := mulmod(memory_record_check, mload(C_ETA_LOC), p) - memory_record_check := addmod(memory_record_check, mload(W1_EVAL_LOC), p) - memory_record_check := mulmod(memory_record_check, mload(C_ETA_LOC), p) - memory_record_check := addmod(memory_record_check, mload(QC_EVAL_LOC), p) - - let partial_record_check := memory_record_check - memory_record_check := addmod(memory_record_check, sub(p, mload(W4_EVAL_LOC)), p) - - mstore(AUX_MEMORY_EVALUATION, memory_record_check) - - // index_delta = w_1_omega - w_1 - let index_delta := addmod(mload(W1_OMEGA_EVAL_LOC), sub(p, mload(W1_EVAL_LOC)), p) - // record_delta = w_4_omega - w_4 - let record_delta := addmod(mload(W4_OMEGA_EVAL_LOC), sub(p, mload(W4_EVAL_LOC)), p) - // index_is_monotonically_increasing = index_delta * (index_delta - 1) - let index_is_monotonically_increasing := mulmod(index_delta, addmod(index_delta, sub(p, 1), p), p) - - // adjacent_values_match_if_adjacent_indices_match = record_delta * (1 - index_delta) - let adjacent_values_match_if_adjacent_indices_match := - mulmod(record_delta, addmod(1, sub(p, index_delta), p), p) - - // AUX_ROM_CONSISTENCY_EVALUATION = ((adjacent_values_match_if_adjacent_indices_match * alpha) + index_is_monotonically_increasing) * alpha + partial_record_check - mstore( - AUX_ROM_CONSISTENCY_EVALUATION, - addmod( - mulmod( - addmod( - mulmod(adjacent_values_match_if_adjacent_indices_match, mload(C_ALPHA_LOC), p), - index_is_monotonically_increasing, - p - ), - mload(C_ALPHA_LOC), - p - ), - memory_record_check, - p - ) - ) - - { - /** - * next_gate_access_type = w_3_omega; - * next_gate_access_type *= eta; - * next_gate_access_type += w_2_omega; - * next_gate_access_type *= eta; - * next_gate_access_type += w_1_omega; - * next_gate_access_type *= eta; - * next_gate_access_type = w_4_omega - next_gate_access_type; - */ - let next_gate_access_type := mulmod(mload(W3_OMEGA_EVAL_LOC), mload(C_ETA_LOC), p) - next_gate_access_type := addmod(next_gate_access_type, mload(W2_OMEGA_EVAL_LOC), p) - next_gate_access_type := mulmod(next_gate_access_type, mload(C_ETA_LOC), p) - next_gate_access_type := addmod(next_gate_access_type, mload(W1_OMEGA_EVAL_LOC), p) - next_gate_access_type := mulmod(next_gate_access_type, mload(C_ETA_LOC), p) - next_gate_access_type := addmod(mload(W4_OMEGA_EVAL_LOC), sub(p, next_gate_access_type), p) - - // value_delta = w_3_omega - w_3 - let value_delta := addmod(mload(W3_OMEGA_EVAL_LOC), sub(p, mload(W3_EVAL_LOC)), p) - // adjacent_values_match_if_adjacent_indices_match_and_next_access_is_a_read_operation = (1 - index_delta) * value_delta * (1 - next_gate_access_type); - - let adjacent_values_match_if_adjacent_indices_match_and_next_access_is_a_read_operation := - mulmod( - addmod(1, sub(p, index_delta), p), - mulmod(value_delta, addmod(1, sub(p, next_gate_access_type), p), p), - p - ) - - // AUX_RAM_CONSISTENCY_EVALUATION - - /** - * access_type = w_4 - partial_record_check - * access_check = access_type^2 - access_type - * next_gate_access_type_is_boolean = next_gate_access_type^2 - next_gate_access_type - * RAM_consistency_check_identity = adjacent_values_match_if_adjacent_indices_match_and_next_access_is_a_read_operation; - * RAM_consistency_check_identity *= alpha; - * RAM_consistency_check_identity += index_is_monotonically_increasing; - * RAM_consistency_check_identity *= alpha; - * RAM_consistency_check_identity += next_gate_access_type_is_boolean; - * RAM_consistency_check_identity *= alpha; - * RAM_consistency_check_identity += access_check; - */ - - let access_type := addmod(mload(W4_EVAL_LOC), sub(p, partial_record_check), p) - let access_check := mulmod(access_type, addmod(access_type, sub(p, 1), p), p) - let next_gate_access_type_is_boolean := - mulmod(next_gate_access_type, addmod(next_gate_access_type, sub(p, 1), p), p) - let RAM_cci := - mulmod( - adjacent_values_match_if_adjacent_indices_match_and_next_access_is_a_read_operation, - mload(C_ALPHA_LOC), - p - ) - RAM_cci := addmod(RAM_cci, index_is_monotonically_increasing, p) - RAM_cci := mulmod(RAM_cci, mload(C_ALPHA_LOC), p) - RAM_cci := addmod(RAM_cci, next_gate_access_type_is_boolean, p) - RAM_cci := mulmod(RAM_cci, mload(C_ALPHA_LOC), p) - RAM_cci := addmod(RAM_cci, access_check, p) - - mstore(AUX_RAM_CONSISTENCY_EVALUATION, RAM_cci) - } - - { - // timestamp_delta = w_2_omega - w_2 - let timestamp_delta := addmod(mload(W2_OMEGA_EVAL_LOC), sub(p, mload(W2_EVAL_LOC)), p) - - // RAM_timestamp_check_identity = (1 - index_delta) * timestamp_delta - w_3 - let RAM_timestamp_check_identity := - addmod( - mulmod(timestamp_delta, addmod(1, sub(p, index_delta), p), p), sub(p, mload(W3_EVAL_LOC)), p - ) - - /** - * memory_identity = ROM_consistency_check_identity * q_2; - * memory_identity += RAM_timestamp_check_identity * q_4; - * memory_identity += memory_record_check * q_m; - * memory_identity *= q_1; - * memory_identity += (RAM_consistency_check_identity * q_arith); - * - * auxiliary_identity = memory_identity + non_native_field_identity + limb_accumulator_identity; - * auxiliary_identity *= q_aux; - * auxiliary_identity *= alpha_base; - */ - let memory_identity := mulmod(mload(AUX_ROM_CONSISTENCY_EVALUATION), mload(Q2_EVAL_LOC), p) - memory_identity := - addmod(memory_identity, mulmod(RAM_timestamp_check_identity, mload(Q4_EVAL_LOC), p), p) - memory_identity := - addmod(memory_identity, mulmod(mload(AUX_MEMORY_EVALUATION), mload(QM_EVAL_LOC), p), p) - memory_identity := mulmod(memory_identity, mload(Q1_EVAL_LOC), p) - memory_identity := - addmod( - memory_identity, mulmod(mload(AUX_RAM_CONSISTENCY_EVALUATION), mload(QARITH_EVAL_LOC), p), p - ) - - let auxiliary_identity := addmod(memory_identity, mload(AUX_NON_NATIVE_FIELD_EVALUATION), p) - auxiliary_identity := addmod(auxiliary_identity, mload(AUX_LIMB_ACCUMULATOR_EVALUATION), p) - auxiliary_identity := mulmod(auxiliary_identity, mload(QAUX_EVAL_LOC), p) - auxiliary_identity := mulmod(auxiliary_identity, mload(C_ALPHA_BASE_LOC), p) - - mstore(AUX_IDENTITY, auxiliary_identity) - - // update alpha - mstore(C_ALPHA_BASE_LOC, mulmod(mload(C_ALPHA_BASE_LOC), mload(C_ALPHA_CUBE_LOC), p)) - } - } - } - - { - /** - * quotient = ARITHMETIC_IDENTITY - * quotient += PERMUTATION_IDENTITY - * quotient += PLOOKUP_IDENTITY - * quotient += SORT_IDENTITY - * quotient += ELLIPTIC_IDENTITY - * quotient += AUX_IDENTITY - * quotient *= ZERO_POLY_INVERSE - */ - mstore( - QUOTIENT_EVAL_LOC, - mulmod( - addmod( - addmod( - addmod( - addmod( - addmod(mload(PERMUTATION_IDENTITY), mload(PLOOKUP_IDENTITY), p), - mload(ARITHMETIC_IDENTITY), - p - ), - mload(SORT_IDENTITY), - p - ), - mload(ELLIPTIC_IDENTITY), - p - ), - mload(AUX_IDENTITY), - p - ), - mload(ZERO_POLY_INVERSE_LOC), - p - ) - ) - } - - /** - * GENERATE NU AND SEPARATOR CHALLENGES - */ - { - let current_challenge := mload(C_CURRENT_LOC) - // get a calldata pointer that points to the start of the data we want to copy - let calldata_ptr := add(calldataload(0x04), 0x24) - - calldata_ptr := add(calldata_ptr, NU_CALLDATA_SKIP_LENGTH) - - mstore(NU_CHALLENGE_INPUT_LOC_A, current_challenge) - mstore(NU_CHALLENGE_INPUT_LOC_B, mload(QUOTIENT_EVAL_LOC)) - calldatacopy(NU_CHALLENGE_INPUT_LOC_C, calldata_ptr, NU_INPUT_LENGTH) - - // hash length = (0x20 + num field elements), we include the previous challenge in the hash - let challenge := keccak256(NU_CHALLENGE_INPUT_LOC_A, add(NU_INPUT_LENGTH, 0x40)) - - mstore(C_V0_LOC, mod(challenge, p)) - // We need THIRTY-ONE independent nu challenges! - mstore(0x00, challenge) - mstore8(0x20, 0x01) - mstore(C_V1_LOC, mod(keccak256(0x00, 0x21), p)) - mstore8(0x20, 0x02) - mstore(C_V2_LOC, mod(keccak256(0x00, 0x21), p)) - mstore8(0x20, 0x03) - mstore(C_V3_LOC, mod(keccak256(0x00, 0x21), p)) - mstore8(0x20, 0x04) - mstore(C_V4_LOC, mod(keccak256(0x00, 0x21), p)) - mstore8(0x20, 0x05) - mstore(C_V5_LOC, mod(keccak256(0x00, 0x21), p)) - mstore8(0x20, 0x06) - mstore(C_V6_LOC, mod(keccak256(0x00, 0x21), p)) - mstore8(0x20, 0x07) - mstore(C_V7_LOC, mod(keccak256(0x00, 0x21), p)) - mstore8(0x20, 0x08) - mstore(C_V8_LOC, mod(keccak256(0x00, 0x21), p)) - mstore8(0x20, 0x09) - mstore(C_V9_LOC, mod(keccak256(0x00, 0x21), p)) - mstore8(0x20, 0x0a) - mstore(C_V10_LOC, mod(keccak256(0x00, 0x21), p)) - mstore8(0x20, 0x0b) - mstore(C_V11_LOC, mod(keccak256(0x00, 0x21), p)) - mstore8(0x20, 0x0c) - mstore(C_V12_LOC, mod(keccak256(0x00, 0x21), p)) - mstore8(0x20, 0x0d) - mstore(C_V13_LOC, mod(keccak256(0x00, 0x21), p)) - mstore8(0x20, 0x0e) - mstore(C_V14_LOC, mod(keccak256(0x00, 0x21), p)) - mstore8(0x20, 0x0f) - mstore(C_V15_LOC, mod(keccak256(0x00, 0x21), p)) - mstore8(0x20, 0x10) - mstore(C_V16_LOC, mod(keccak256(0x00, 0x21), p)) - mstore8(0x20, 0x11) - mstore(C_V17_LOC, mod(keccak256(0x00, 0x21), p)) - mstore8(0x20, 0x12) - mstore(C_V18_LOC, mod(keccak256(0x00, 0x21), p)) - mstore8(0x20, 0x13) - mstore(C_V19_LOC, mod(keccak256(0x00, 0x21), p)) - mstore8(0x20, 0x14) - mstore(C_V20_LOC, mod(keccak256(0x00, 0x21), p)) - mstore8(0x20, 0x15) - mstore(C_V21_LOC, mod(keccak256(0x00, 0x21), p)) - mstore8(0x20, 0x16) - mstore(C_V22_LOC, mod(keccak256(0x00, 0x21), p)) - mstore8(0x20, 0x17) - mstore(C_V23_LOC, mod(keccak256(0x00, 0x21), p)) - mstore8(0x20, 0x18) - mstore(C_V24_LOC, mod(keccak256(0x00, 0x21), p)) - mstore8(0x20, 0x19) - mstore(C_V25_LOC, mod(keccak256(0x00, 0x21), p)) - mstore8(0x20, 0x1a) - mstore(C_V26_LOC, mod(keccak256(0x00, 0x21), p)) - mstore8(0x20, 0x1b) - mstore(C_V27_LOC, mod(keccak256(0x00, 0x21), p)) - mstore8(0x20, 0x1c) - mstore(C_V28_LOC, mod(keccak256(0x00, 0x21), p)) - mstore8(0x20, 0x1d) - mstore(C_V29_LOC, mod(keccak256(0x00, 0x21), p)) - - // @follow-up - Why are both v29 and v30 using appending 0x1d to the prior challenge and hashing, should it not change? - mstore8(0x20, 0x1d) - challenge := keccak256(0x00, 0x21) - mstore(C_V30_LOC, mod(challenge, p)) - - // separator - mstore(0x00, challenge) - mstore(0x20, mload(PI_Z_Y_LOC)) - mstore(0x40, mload(PI_Z_X_LOC)) - mstore(0x60, mload(PI_Z_OMEGA_Y_LOC)) - mstore(0x80, mload(PI_Z_OMEGA_X_LOC)) - - mstore(C_U_LOC, mod(keccak256(0x00, 0xa0), p)) - } - - let success := 0 - // VALIDATE T1 - { - let x := mload(T1_X_LOC) - let y := mload(T1_Y_LOC) - let xx := mulmod(x, x, q) - // validate on curve - if iszero(eq(mulmod(y, y, q), addmod(mulmod(x, xx, q), 3, q))) { - mstore(0x0, POINT_NOT_ON_CURVE_SELECTOR) - revert(0x00, 0x04) - } - mstore(ACCUMULATOR_X_LOC, x) - mstore(add(ACCUMULATOR_X_LOC, 0x20), y) - } - // VALIDATE T2 - { - let x := mload(T2_X_LOC) // 0x1400 - let y := mload(T2_Y_LOC) // 0x1420 - let xx := mulmod(x, x, q) - // validate on curve - if iszero(eq(mulmod(y, y, q), addmod(mulmod(x, xx, q), 3, q))) { - mstore(0x0, POINT_NOT_ON_CURVE_SELECTOR) - revert(0x00, 0x04) - } - mstore(0x00, x) - mstore(0x20, y) - } - mstore(0x40, mload(ZETA_POW_N_LOC)) - // accumulator_2 = [T2].zeta^n - success := staticcall(gas(), 7, 0x00, 0x60, ACCUMULATOR2_X_LOC, 0x40) - // accumulator = [T1] + accumulator_2 - success := and(success, staticcall(gas(), 6, ACCUMULATOR_X_LOC, 0x80, ACCUMULATOR_X_LOC, 0x40)) - - // VALIDATE T3 - { - let x := mload(T3_X_LOC) - let y := mload(T3_Y_LOC) - let xx := mulmod(x, x, q) - // validate on curve - if iszero(eq(mulmod(y, y, q), addmod(mulmod(x, xx, q), 3, q))) { - mstore(0x0, POINT_NOT_ON_CURVE_SELECTOR) - revert(0x00, 0x04) - } - mstore(0x00, x) - mstore(0x20, y) - } - mstore(0x40, mulmod(mload(ZETA_POW_N_LOC), mload(ZETA_POW_N_LOC), p)) - // accumulator_2 = [T3].zeta^{2n} - success := and(success, staticcall(gas(), 7, 0x00, 0x60, ACCUMULATOR2_X_LOC, 0x40)) - // accumulator = accumulator + accumulator_2 - success := and(success, staticcall(gas(), 6, ACCUMULATOR_X_LOC, 0x80, ACCUMULATOR_X_LOC, 0x40)) - - // VALIDATE T4 - { - let x := mload(T4_X_LOC) - let y := mload(T4_Y_LOC) - let xx := mulmod(x, x, q) - // validate on curve - if iszero(eq(mulmod(y, y, q), addmod(mulmod(x, xx, q), 3, q))) { - mstore(0x0, POINT_NOT_ON_CURVE_SELECTOR) - revert(0x00, 0x04) - } - mstore(0x00, x) - mstore(0x20, y) - } - mstore(0x40, mulmod(mulmod(mload(ZETA_POW_N_LOC), mload(ZETA_POW_N_LOC), p), mload(ZETA_POW_N_LOC), p)) - // accumulator_2 = [T4].zeta^{3n} - success := and(success, staticcall(gas(), 7, 0x00, 0x60, ACCUMULATOR2_X_LOC, 0x40)) - // accumulator = accumulator + accumulator_2 - success := and(success, staticcall(gas(), 6, ACCUMULATOR_X_LOC, 0x80, ACCUMULATOR_X_LOC, 0x40)) - - // VALIDATE W1 - { - let x := mload(W1_X_LOC) - let y := mload(W1_Y_LOC) - let xx := mulmod(x, x, q) - // validate on curve - if iszero(eq(mulmod(y, y, q), addmod(mulmod(x, xx, q), 3, q))) { - mstore(0x0, POINT_NOT_ON_CURVE_SELECTOR) - revert(0x00, 0x04) - } - mstore(0x00, x) - mstore(0x20, y) - } - mstore(0x40, mulmod(addmod(mload(C_U_LOC), 0x1, p), mload(C_V0_LOC), p)) - // accumulator_2 = v0.(u + 1).[W1] - success := and(success, staticcall(gas(), 7, 0x00, 0x60, ACCUMULATOR2_X_LOC, 0x40)) - // accumulator = accumulator + accumulator_2 - success := and(success, staticcall(gas(), 6, ACCUMULATOR_X_LOC, 0x80, ACCUMULATOR_X_LOC, 0x40)) - - // VALIDATE W2 - { - let x := mload(W2_X_LOC) - let y := mload(W2_Y_LOC) - let xx := mulmod(x, x, q) - // validate on curve - if iszero(eq(mulmod(y, y, q), addmod(mulmod(x, xx, q), 3, q))) { - mstore(0x0, POINT_NOT_ON_CURVE_SELECTOR) - revert(0x00, 0x04) - } - mstore(0x00, x) - mstore(0x20, y) - } - mstore(0x40, mulmod(addmod(mload(C_U_LOC), 0x1, p), mload(C_V1_LOC), p)) - // accumulator_2 = v1.(u + 1).[W2] - success := and(success, staticcall(gas(), 7, 0x00, 0x60, ACCUMULATOR2_X_LOC, 0x40)) - // accumulator = accumulator + accumulator_2 - success := and(success, staticcall(gas(), 6, ACCUMULATOR_X_LOC, 0x80, ACCUMULATOR_X_LOC, 0x40)) - - // VALIDATE W3 - { - let x := mload(W3_X_LOC) - let y := mload(W3_Y_LOC) - let xx := mulmod(x, x, q) - // validate on curve - if iszero(eq(mulmod(y, y, q), addmod(mulmod(x, xx, q), 3, q))) { - mstore(0x0, POINT_NOT_ON_CURVE_SELECTOR) - revert(0x00, 0x04) - } - mstore(0x00, x) - mstore(0x20, y) - } - mstore(0x40, mulmod(addmod(mload(C_U_LOC), 0x1, p), mload(C_V2_LOC), p)) - // accumulator_2 = v2.(u + 1).[W3] - success := and(success, staticcall(gas(), 7, 0x00, 0x60, ACCUMULATOR2_X_LOC, 0x40)) - // accumulator = accumulator + accumulator_2 - success := and(success, staticcall(gas(), 6, ACCUMULATOR_X_LOC, 0x80, ACCUMULATOR_X_LOC, 0x40)) - - // VALIDATE W4 - { - let x := mload(W4_X_LOC) - let y := mload(W4_Y_LOC) - let xx := mulmod(x, x, q) - // validate on curve - if iszero(eq(mulmod(y, y, q), addmod(mulmod(x, xx, q), 3, q))) { - mstore(0x0, POINT_NOT_ON_CURVE_SELECTOR) - revert(0x00, 0x04) - } - mstore(0x00, x) - mstore(0x20, y) - } - mstore(0x40, mulmod(addmod(mload(C_U_LOC), 0x1, p), mload(C_V3_LOC), p)) - // accumulator_2 = v3.(u + 1).[W4] - success := and(success, staticcall(gas(), 7, 0x00, 0x60, ACCUMULATOR2_X_LOC, 0x40)) - // accumulator = accumulator + accumulator_2 - success := and(success, staticcall(gas(), 6, ACCUMULATOR_X_LOC, 0x80, ACCUMULATOR_X_LOC, 0x40)) - - // VALIDATE S - { - let x := mload(S_X_LOC) - let y := mload(S_Y_LOC) - let xx := mulmod(x, x, q) - // validate on curve - if iszero(eq(mulmod(y, y, q), addmod(mulmod(x, xx, q), 3, q))) { - mstore(0x0, POINT_NOT_ON_CURVE_SELECTOR) - revert(0x00, 0x04) - } - mstore(0x00, x) - mstore(0x20, y) - } - mstore(0x40, mulmod(addmod(mload(C_U_LOC), 0x1, p), mload(C_V4_LOC), p)) - // accumulator_2 = v4.(u + 1).[S] - success := and(success, staticcall(gas(), 7, 0x00, 0x60, ACCUMULATOR2_X_LOC, 0x40)) - // accumulator = accumulator + accumulator_2 - success := and(success, staticcall(gas(), 6, ACCUMULATOR_X_LOC, 0x80, ACCUMULATOR_X_LOC, 0x40)) - - // VALIDATE Z - { - let x := mload(Z_X_LOC) - let y := mload(Z_Y_LOC) - let xx := mulmod(x, x, q) - // validate on curve - if iszero(eq(mulmod(y, y, q), addmod(mulmod(x, xx, q), 3, q))) { - mstore(0x0, POINT_NOT_ON_CURVE_SELECTOR) - revert(0x00, 0x04) - } - mstore(0x00, x) - mstore(0x20, y) - } - mstore(0x40, mulmod(addmod(mload(C_U_LOC), 0x1, p), mload(C_V5_LOC), p)) - // accumulator_2 = v5.(u + 1).[Z] - success := and(success, staticcall(gas(), 7, 0x00, 0x60, ACCUMULATOR2_X_LOC, 0x40)) - // accumulator = accumulator + accumulator_2 - success := and(success, staticcall(gas(), 6, ACCUMULATOR_X_LOC, 0x80, ACCUMULATOR_X_LOC, 0x40)) - - // VALIDATE Z_LOOKUP - { - let x := mload(Z_LOOKUP_X_LOC) - let y := mload(Z_LOOKUP_Y_LOC) - let xx := mulmod(x, x, q) - // validate on curve - if iszero(eq(mulmod(y, y, q), addmod(mulmod(x, xx, q), 3, q))) { - mstore(0x0, POINT_NOT_ON_CURVE_SELECTOR) - revert(0x00, 0x04) - } - mstore(0x00, x) - mstore(0x20, y) - } - mstore(0x40, mulmod(addmod(mload(C_U_LOC), 0x1, p), mload(C_V6_LOC), p)) - // accumulator_2 = v6.(u + 1).[Z_LOOKUP] - success := and(success, staticcall(gas(), 7, 0x00, 0x60, ACCUMULATOR2_X_LOC, 0x40)) - // accumulator = accumulator + accumulator_2 - success := and(success, staticcall(gas(), 6, ACCUMULATOR_X_LOC, 0x80, ACCUMULATOR_X_LOC, 0x40)) - - // ACCUMULATE Q1 - - // Verification key fields verified to be on curve at contract deployment - mstore(0x00, mload(Q1_X_LOC)) - mstore(0x20, mload(Q1_Y_LOC)) - mstore(0x40, mload(C_V7_LOC)) - // accumulator_2 = v7.[Q1] - success := and(success, staticcall(gas(), 7, 0x00, 0x60, ACCUMULATOR2_X_LOC, 0x40)) - // accumulator = accumulator + accumulator_2 - success := and(success, staticcall(gas(), 6, ACCUMULATOR_X_LOC, 0x80, ACCUMULATOR_X_LOC, 0x40)) - - // ACCUMULATE Q2 - - // Verification key fields verified to be on curve at contract deployment - mstore(0x00, mload(Q2_X_LOC)) - mstore(0x20, mload(Q2_Y_LOC)) - mstore(0x40, mload(C_V8_LOC)) - // accumulator_2 = v8.[Q2] - success := and(success, staticcall(gas(), 7, 0x00, 0x60, ACCUMULATOR2_X_LOC, 0x40)) - // accumulator = accumulator + accumulator_2 - success := and(success, staticcall(gas(), 6, ACCUMULATOR_X_LOC, 0x80, ACCUMULATOR_X_LOC, 0x40)) - - // ACCUMULATE Q3 - - // Verification key fields verified to be on curve at contract deployment - mstore(0x00, mload(Q3_X_LOC)) - mstore(0x20, mload(Q3_Y_LOC)) - mstore(0x40, mload(C_V9_LOC)) - // accumulator_2 = v9.[Q3] - success := and(success, staticcall(gas(), 7, 0x00, 0x60, ACCUMULATOR2_X_LOC, 0x40)) - // accumulator = accumulator + accumulator_2 - success := and(success, staticcall(gas(), 6, ACCUMULATOR_X_LOC, 0x80, ACCUMULATOR_X_LOC, 0x40)) - - // ACCUMULATE Q4 - - // Verification key fields verified to be on curve at contract deployment - mstore(0x00, mload(Q4_X_LOC)) - mstore(0x20, mload(Q4_Y_LOC)) - mstore(0x40, mload(C_V10_LOC)) - // accumulator_2 = v10.[Q4] - success := and(success, staticcall(gas(), 7, 0x00, 0x60, ACCUMULATOR2_X_LOC, 0x40)) - // accumulator = accumulator + accumulator_2 - success := and(success, staticcall(gas(), 6, ACCUMULATOR_X_LOC, 0x80, ACCUMULATOR_X_LOC, 0x40)) - - // ACCUMULATE QM - - // Verification key fields verified to be on curve at contract deployment - mstore(0x00, mload(QM_X_LOC)) - mstore(0x20, mload(QM_Y_LOC)) - mstore(0x40, mload(C_V11_LOC)) - // accumulator_2 = v11.[Q;] - success := and(success, staticcall(gas(), 7, 0x00, 0x60, ACCUMULATOR2_X_LOC, 0x40)) - // accumulator = accumulator + accumulator_2 - success := and(success, staticcall(gas(), 6, ACCUMULATOR_X_LOC, 0x80, ACCUMULATOR_X_LOC, 0x40)) - - // ACCUMULATE QC - - // Verification key fields verified to be on curve at contract deployment - mstore(0x00, mload(QC_X_LOC)) - mstore(0x20, mload(QC_Y_LOC)) - mstore(0x40, mload(C_V12_LOC)) - // accumulator_2 = v12.[QC] - success := and(success, staticcall(gas(), 7, 0x00, 0x60, ACCUMULATOR2_X_LOC, 0x40)) - // accumulator = accumulator + accumulator_2 - success := and(success, staticcall(gas(), 6, ACCUMULATOR_X_LOC, 0x80, ACCUMULATOR_X_LOC, 0x40)) - - // ACCUMULATE QARITH - - // Verification key fields verified to be on curve at contract deployment - mstore(0x00, mload(QARITH_X_LOC)) - mstore(0x20, mload(QARITH_Y_LOC)) - mstore(0x40, mload(C_V13_LOC)) - // accumulator_2 = v13.[QARITH] - success := and(success, staticcall(gas(), 7, 0x00, 0x60, ACCUMULATOR2_X_LOC, 0x40)) - // accumulator = accumulator + accumulator_2 - success := and(success, staticcall(gas(), 6, ACCUMULATOR_X_LOC, 0x80, ACCUMULATOR_X_LOC, 0x40)) - - // ACCUMULATE QSORT - - // Verification key fields verified to be on curve at contract deployment - mstore(0x00, mload(QSORT_X_LOC)) - mstore(0x20, mload(QSORT_Y_LOC)) - mstore(0x40, mload(C_V14_LOC)) - // accumulator_2 = v14.[QSORT] - success := and(success, staticcall(gas(), 7, 0x00, 0x60, ACCUMULATOR2_X_LOC, 0x40)) - // accumulator = accumulator + accumulator_2 - success := and(success, staticcall(gas(), 6, ACCUMULATOR_X_LOC, 0x80, ACCUMULATOR_X_LOC, 0x40)) - - // ACCUMULATE QELLIPTIC - - // Verification key fields verified to be on curve at contract deployment - mstore(0x00, mload(QELLIPTIC_X_LOC)) - mstore(0x20, mload(QELLIPTIC_Y_LOC)) - mstore(0x40, mload(C_V15_LOC)) - // accumulator_2 = v15.[QELLIPTIC] - success := and(success, staticcall(gas(), 7, 0x00, 0x60, ACCUMULATOR2_X_LOC, 0x40)) - // accumulator = accumulator + accumulator_2 - success := and(success, staticcall(gas(), 6, ACCUMULATOR_X_LOC, 0x80, ACCUMULATOR_X_LOC, 0x40)) - - // ACCUMULATE QAUX - - // Verification key fields verified to be on curve at contract deployment - mstore(0x00, mload(QAUX_X_LOC)) - mstore(0x20, mload(QAUX_Y_LOC)) - mstore(0x40, mload(C_V16_LOC)) - // accumulator_2 = v15.[Q_AUX] - success := and(success, staticcall(gas(), 7, 0x00, 0x60, ACCUMULATOR2_X_LOC, 0x40)) - // accumulator = accumulator + accumulator_2 - success := and(success, staticcall(gas(), 6, ACCUMULATOR_X_LOC, 0x80, ACCUMULATOR_X_LOC, 0x40)) - - // ACCUMULATE SIGMA1 - - // Verification key fields verified to be on curve at contract deployment - mstore(0x00, mload(SIGMA1_X_LOC)) - mstore(0x20, mload(SIGMA1_Y_LOC)) - mstore(0x40, mload(C_V17_LOC)) - // accumulator_2 = v17.[sigma1] - success := and(success, staticcall(gas(), 7, 0x00, 0x60, ACCUMULATOR2_X_LOC, 0x40)) - // accumulator = accumulator + accumulator_2 - success := and(success, staticcall(gas(), 6, ACCUMULATOR_X_LOC, 0x80, ACCUMULATOR_X_LOC, 0x40)) - - // ACCUMULATE SIGMA2 - - // Verification key fields verified to be on curve at contract deployment - mstore(0x00, mload(SIGMA2_X_LOC)) - mstore(0x20, mload(SIGMA2_Y_LOC)) - mstore(0x40, mload(C_V18_LOC)) - // accumulator_2 = v18.[sigma2] - success := and(success, staticcall(gas(), 7, 0x00, 0x60, ACCUMULATOR2_X_LOC, 0x40)) - // accumulator = accumulator + accumulator_2 - success := and(success, staticcall(gas(), 6, ACCUMULATOR_X_LOC, 0x80, ACCUMULATOR_X_LOC, 0x40)) - - // ACCUMULATE SIGMA3 - - // Verification key fields verified to be on curve at contract deployment - mstore(0x00, mload(SIGMA3_X_LOC)) - mstore(0x20, mload(SIGMA3_Y_LOC)) - mstore(0x40, mload(C_V19_LOC)) - // accumulator_2 = v19.[sigma3] - success := and(success, staticcall(gas(), 7, 0x00, 0x60, ACCUMULATOR2_X_LOC, 0x40)) - // accumulator = accumulator + accumulator_2 - success := and(success, staticcall(gas(), 6, ACCUMULATOR_X_LOC, 0x80, ACCUMULATOR_X_LOC, 0x40)) - - // ACCUMULATE SIGMA4 - - // Verification key fields verified to be on curve at contract deployment - mstore(0x00, mload(SIGMA4_X_LOC)) - mstore(0x20, mload(SIGMA4_Y_LOC)) - mstore(0x40, mload(C_V20_LOC)) - // accumulator_2 = v20.[sigma4] - success := and(success, staticcall(gas(), 7, 0x00, 0x60, ACCUMULATOR2_X_LOC, 0x40)) - // accumulator = accumulator + accumulator_2 - success := and(success, staticcall(gas(), 6, ACCUMULATOR_X_LOC, 0x80, ACCUMULATOR_X_LOC, 0x40)) - - // ACCUMULATE TABLE1 - - // Verification key fields verified to be on curve at contract deployment - mstore(0x00, mload(TABLE1_X_LOC)) - mstore(0x20, mload(TABLE1_Y_LOC)) - mstore(0x40, mulmod(addmod(mload(C_U_LOC), 0x1, p), mload(C_V21_LOC), p)) - // accumulator_2 = u.[table1] - success := and(success, staticcall(gas(), 7, 0x00, 0x60, ACCUMULATOR2_X_LOC, 0x40)) - // accumulator = accumulator + accumulator_2 - success := and(success, staticcall(gas(), 6, ACCUMULATOR_X_LOC, 0x80, ACCUMULATOR_X_LOC, 0x40)) - - // ACCUMULATE TABLE2 - - // Verification key fields verified to be on curve at contract deployment - mstore(0x00, mload(TABLE2_X_LOC)) - mstore(0x20, mload(TABLE2_Y_LOC)) - mstore(0x40, mulmod(addmod(mload(C_U_LOC), 0x1, p), mload(C_V22_LOC), p)) - // accumulator_2 = u.[table2] - success := and(success, staticcall(gas(), 7, 0x00, 0x60, ACCUMULATOR2_X_LOC, 0x40)) - // accumulator = accumulator + accumulator_2 - success := and(success, staticcall(gas(), 6, ACCUMULATOR_X_LOC, 0x80, ACCUMULATOR_X_LOC, 0x40)) - - // ACCUMULATE TABLE3 - - // Verification key fields verified to be on curve at contract deployment - mstore(0x00, mload(TABLE3_X_LOC)) - mstore(0x20, mload(TABLE3_Y_LOC)) - mstore(0x40, mulmod(addmod(mload(C_U_LOC), 0x1, p), mload(C_V23_LOC), p)) - // accumulator_2 = u.[table3] - success := and(success, staticcall(gas(), 7, 0x00, 0x60, ACCUMULATOR2_X_LOC, 0x40)) - // accumulator = accumulator + accumulator_2 - success := and(success, staticcall(gas(), 6, ACCUMULATOR_X_LOC, 0x80, ACCUMULATOR_X_LOC, 0x40)) - - // ACCUMULATE TABLE4 - - // Verification key fields verified to be on curve at contract deployment - mstore(0x00, mload(TABLE4_X_LOC)) - mstore(0x20, mload(TABLE4_Y_LOC)) - mstore(0x40, mulmod(addmod(mload(C_U_LOC), 0x1, p), mload(C_V24_LOC), p)) - // accumulator_2 = u.[table4] - success := and(success, staticcall(gas(), 7, 0x00, 0x60, ACCUMULATOR2_X_LOC, 0x40)) - // accumulator = accumulator + accumulator_2 - success := and(success, staticcall(gas(), 6, ACCUMULATOR_X_LOC, 0x80, ACCUMULATOR_X_LOC, 0x40)) - - // ACCUMULATE TABLE_TYPE - - // Verification key fields verified to be on curve at contract deployment - mstore(0x00, mload(TABLE_TYPE_X_LOC)) - mstore(0x20, mload(TABLE_TYPE_Y_LOC)) - mstore(0x40, mload(C_V25_LOC)) - // accumulator_2 = v25.[TableType] - success := and(success, staticcall(gas(), 7, 0x00, 0x60, ACCUMULATOR2_X_LOC, 0x40)) - // accumulator = accumulator + accumulator_2 - success := and(success, staticcall(gas(), 6, ACCUMULATOR_X_LOC, 0x80, ACCUMULATOR_X_LOC, 0x40)) - - // ACCUMULATE ID1 - - // Verification key fields verified to be on curve at contract deployment - mstore(0x00, mload(ID1_X_LOC)) - mstore(0x20, mload(ID1_Y_LOC)) - mstore(0x40, mload(C_V26_LOC)) - // accumulator_2 = v26.[ID1] - success := and(success, staticcall(gas(), 7, 0x00, 0x60, ACCUMULATOR2_X_LOC, 0x40)) - // accumulator = accumulator + accumulator_2 - success := and(success, staticcall(gas(), 6, ACCUMULATOR_X_LOC, 0x80, ACCUMULATOR_X_LOC, 0x40)) - - // ACCUMULATE ID2 - - // Verification key fields verified to be on curve at contract deployment - mstore(0x00, mload(ID2_X_LOC)) - mstore(0x20, mload(ID2_Y_LOC)) - mstore(0x40, mload(C_V27_LOC)) - // accumulator_2 = v27.[ID2] - success := and(success, staticcall(gas(), 7, 0x00, 0x60, ACCUMULATOR2_X_LOC, 0x40)) - // accumulator = accumulator + accumulator_2 - success := and(success, staticcall(gas(), 6, ACCUMULATOR_X_LOC, 0x80, ACCUMULATOR_X_LOC, 0x40)) - - // ACCUMULATE ID3 - - // Verification key fields verified to be on curve at contract deployment - mstore(0x00, mload(ID3_X_LOC)) - mstore(0x20, mload(ID3_Y_LOC)) - mstore(0x40, mload(C_V28_LOC)) - // accumulator_2 = v28.[ID3] - success := and(success, staticcall(gas(), 7, 0x00, 0x60, ACCUMULATOR2_X_LOC, 0x40)) - // accumulator = accumulator + accumulator_2 - success := and(success, staticcall(gas(), 6, ACCUMULATOR_X_LOC, 0x80, ACCUMULATOR_X_LOC, 0x40)) - - // ACCUMULATE ID4 - - // Verification key fields verified to be on curve at contract deployment - mstore(0x00, mload(ID4_X_LOC)) - mstore(0x20, mload(ID4_Y_LOC)) - mstore(0x40, mload(C_V29_LOC)) - // accumulator_2 = v29.[ID4] - success := and(success, staticcall(gas(), 7, 0x00, 0x60, ACCUMULATOR2_X_LOC, 0x40)) - // accumulator = accumulator + accumulator_2 - success := and(success, staticcall(gas(), 6, ACCUMULATOR_X_LOC, 0x80, ACCUMULATOR_X_LOC, 0x40)) - - /** - * COMPUTE BATCH EVALUATION SCALAR MULTIPLIER - */ - { - /** - * batch_evaluation = v0 * (w_1_omega * u + w_1_eval) - * batch_evaluation += v1 * (w_2_omega * u + w_2_eval) - * batch_evaluation += v2 * (w_3_omega * u + w_3_eval) - * batch_evaluation += v3 * (w_4_omega * u + w_4_eval) - * batch_evaluation += v4 * (s_omega_eval * u + s_eval) - * batch_evaluation += v5 * (z_omega_eval * u + z_eval) - * batch_evaluation += v6 * (z_lookup_omega_eval * u + z_lookup_eval) - */ - let batch_evaluation := - mulmod( - mload(C_V0_LOC), - addmod(mulmod(mload(W1_OMEGA_EVAL_LOC), mload(C_U_LOC), p), mload(W1_EVAL_LOC), p), - p - ) - batch_evaluation := - addmod( - batch_evaluation, - mulmod( - mload(C_V1_LOC), - addmod(mulmod(mload(W2_OMEGA_EVAL_LOC), mload(C_U_LOC), p), mload(W2_EVAL_LOC), p), - p - ), - p - ) - batch_evaluation := - addmod( - batch_evaluation, - mulmod( - mload(C_V2_LOC), - addmod(mulmod(mload(W3_OMEGA_EVAL_LOC), mload(C_U_LOC), p), mload(W3_EVAL_LOC), p), - p - ), - p - ) - batch_evaluation := - addmod( - batch_evaluation, - mulmod( - mload(C_V3_LOC), - addmod(mulmod(mload(W4_OMEGA_EVAL_LOC), mload(C_U_LOC), p), mload(W4_EVAL_LOC), p), - p - ), - p - ) - batch_evaluation := - addmod( - batch_evaluation, - mulmod( - mload(C_V4_LOC), - addmod(mulmod(mload(S_OMEGA_EVAL_LOC), mload(C_U_LOC), p), mload(S_EVAL_LOC), p), - p - ), - p - ) - batch_evaluation := - addmod( - batch_evaluation, - mulmod( - mload(C_V5_LOC), - addmod(mulmod(mload(Z_OMEGA_EVAL_LOC), mload(C_U_LOC), p), mload(Z_EVAL_LOC), p), - p - ), - p - ) - batch_evaluation := - addmod( - batch_evaluation, - mulmod( - mload(C_V6_LOC), - addmod(mulmod(mload(Z_LOOKUP_OMEGA_EVAL_LOC), mload(C_U_LOC), p), mload(Z_LOOKUP_EVAL_LOC), p), - p - ), - p - ) - - /** - * batch_evaluation += v7 * Q1_EVAL - * batch_evaluation += v8 * Q2_EVAL - * batch_evaluation += v9 * Q3_EVAL - * batch_evaluation += v10 * Q4_EVAL - * batch_evaluation += v11 * QM_EVAL - * batch_evaluation += v12 * QC_EVAL - * batch_evaluation += v13 * QARITH_EVAL - * batch_evaluation += v14 * QSORT_EVAL_LOC - * batch_evaluation += v15 * QELLIPTIC_EVAL_LOC - * batch_evaluation += v16 * QAUX_EVAL_LOC - * batch_evaluation += v17 * SIGMA1_EVAL_LOC - * batch_evaluation += v18 * SIGMA2_EVAL_LOC - * batch_evaluation += v19 * SIGMA3_EVAL_LOC - * batch_evaluation += v20 * SIGMA4_EVAL_LOC - */ - batch_evaluation := addmod(batch_evaluation, mulmod(mload(C_V7_LOC), mload(Q1_EVAL_LOC), p), p) - batch_evaluation := addmod(batch_evaluation, mulmod(mload(C_V8_LOC), mload(Q2_EVAL_LOC), p), p) - batch_evaluation := addmod(batch_evaluation, mulmod(mload(C_V9_LOC), mload(Q3_EVAL_LOC), p), p) - batch_evaluation := addmod(batch_evaluation, mulmod(mload(C_V10_LOC), mload(Q4_EVAL_LOC), p), p) - batch_evaluation := addmod(batch_evaluation, mulmod(mload(C_V11_LOC), mload(QM_EVAL_LOC), p), p) - batch_evaluation := addmod(batch_evaluation, mulmod(mload(C_V12_LOC), mload(QC_EVAL_LOC), p), p) - batch_evaluation := addmod(batch_evaluation, mulmod(mload(C_V13_LOC), mload(QARITH_EVAL_LOC), p), p) - batch_evaluation := addmod(batch_evaluation, mulmod(mload(C_V14_LOC), mload(QSORT_EVAL_LOC), p), p) - batch_evaluation := addmod(batch_evaluation, mulmod(mload(C_V15_LOC), mload(QELLIPTIC_EVAL_LOC), p), p) - batch_evaluation := addmod(batch_evaluation, mulmod(mload(C_V16_LOC), mload(QAUX_EVAL_LOC), p), p) - batch_evaluation := addmod(batch_evaluation, mulmod(mload(C_V17_LOC), mload(SIGMA1_EVAL_LOC), p), p) - batch_evaluation := addmod(batch_evaluation, mulmod(mload(C_V18_LOC), mload(SIGMA2_EVAL_LOC), p), p) - batch_evaluation := addmod(batch_evaluation, mulmod(mload(C_V19_LOC), mload(SIGMA3_EVAL_LOC), p), p) - batch_evaluation := addmod(batch_evaluation, mulmod(mload(C_V20_LOC), mload(SIGMA4_EVAL_LOC), p), p) - - /** - * batch_evaluation += v21 * (table1(zw) * u + table1(z)) - * batch_evaluation += v22 * (table2(zw) * u + table2(z)) - * batch_evaluation += v23 * (table3(zw) * u + table3(z)) - * batch_evaluation += v24 * (table4(zw) * u + table4(z)) - * batch_evaluation += v25 * table_type_eval - * batch_evaluation += v26 * id1_eval - * batch_evaluation += v27 * id2_eval - * batch_evaluation += v28 * id3_eval - * batch_evaluation += v29 * id4_eval - * batch_evaluation += quotient_eval - */ - batch_evaluation := - addmod( - batch_evaluation, - mulmod( - mload(C_V21_LOC), - addmod(mulmod(mload(TABLE1_OMEGA_EVAL_LOC), mload(C_U_LOC), p), mload(TABLE1_EVAL_LOC), p), - p - ), - p - ) - batch_evaluation := - addmod( - batch_evaluation, - mulmod( - mload(C_V22_LOC), - addmod(mulmod(mload(TABLE2_OMEGA_EVAL_LOC), mload(C_U_LOC), p), mload(TABLE2_EVAL_LOC), p), - p - ), - p - ) - batch_evaluation := - addmod( - batch_evaluation, - mulmod( - mload(C_V23_LOC), - addmod(mulmod(mload(TABLE3_OMEGA_EVAL_LOC), mload(C_U_LOC), p), mload(TABLE3_EVAL_LOC), p), - p - ), - p - ) - batch_evaluation := - addmod( - batch_evaluation, - mulmod( - mload(C_V24_LOC), - addmod(mulmod(mload(TABLE4_OMEGA_EVAL_LOC), mload(C_U_LOC), p), mload(TABLE4_EVAL_LOC), p), - p - ), - p - ) - batch_evaluation := addmod(batch_evaluation, mulmod(mload(C_V25_LOC), mload(TABLE_TYPE_EVAL_LOC), p), p) - batch_evaluation := addmod(batch_evaluation, mulmod(mload(C_V26_LOC), mload(ID1_EVAL_LOC), p), p) - batch_evaluation := addmod(batch_evaluation, mulmod(mload(C_V27_LOC), mload(ID2_EVAL_LOC), p), p) - batch_evaluation := addmod(batch_evaluation, mulmod(mload(C_V28_LOC), mload(ID3_EVAL_LOC), p), p) - batch_evaluation := addmod(batch_evaluation, mulmod(mload(C_V29_LOC), mload(ID4_EVAL_LOC), p), p) - batch_evaluation := addmod(batch_evaluation, mload(QUOTIENT_EVAL_LOC), p) - - mstore(0x00, 0x01) // [1].x - mstore(0x20, 0x02) // [1].y - mstore(0x40, sub(p, batch_evaluation)) - // accumulator_2 = -[1].(batch_evaluation) - success := and(success, staticcall(gas(), 7, 0x00, 0x60, ACCUMULATOR2_X_LOC, 0x40)) - // accumulator = accumulator + accumulator_2 - success := and(success, staticcall(gas(), 6, ACCUMULATOR_X_LOC, 0x80, ACCUMULATOR_X_LOC, 0x40)) - - if iszero(success) { - mstore(0x0, OPENING_COMMITMENT_FAILED_SELECTOR) - revert(0x00, 0x04) - } - } - - /** - * PERFORM PAIRING PREAMBLE - */ - { - let u := mload(C_U_LOC) - let zeta := mload(C_ZETA_LOC) - // VALIDATE PI_Z - { - let x := mload(PI_Z_X_LOC) - let y := mload(PI_Z_Y_LOC) - let xx := mulmod(x, x, q) - // validate on curve - if iszero(eq(mulmod(y, y, q), addmod(mulmod(x, xx, q), 3, q))) { - mstore(0x0, POINT_NOT_ON_CURVE_SELECTOR) - revert(0x00, 0x04) - } - mstore(0x00, x) - mstore(0x20, y) - } - // compute zeta.[PI_Z] and add into accumulator - mstore(0x40, zeta) - success := staticcall(gas(), 7, 0x00, 0x60, ACCUMULATOR2_X_LOC, 0x40) - // accumulator = accumulator + accumulator_2 - success := and(success, staticcall(gas(), 6, ACCUMULATOR_X_LOC, 0x80, ACCUMULATOR_X_LOC, 0x40)) - - // VALIDATE PI_Z_OMEGA - { - let x := mload(PI_Z_OMEGA_X_LOC) - let y := mload(PI_Z_OMEGA_Y_LOC) - let xx := mulmod(x, x, q) - // validate on curve - if iszero(eq(mulmod(y, y, q), addmod(mulmod(x, xx, q), 3, q))) { - mstore(0x0, POINT_NOT_ON_CURVE_SELECTOR) - revert(0x00, 0x04) - } - mstore(0x00, x) - mstore(0x20, y) - } - mstore(0x40, mulmod(mulmod(u, zeta, p), mload(OMEGA_LOC), p)) - // accumulator_2 = u.zeta.omega.[PI_Z_OMEGA] - success := and(success, staticcall(gas(), 7, 0x00, 0x60, ACCUMULATOR2_X_LOC, 0x40)) - // PAIRING_RHS = accumulator + accumulator_2 - success := and(success, staticcall(gas(), 6, ACCUMULATOR_X_LOC, 0x80, PAIRING_RHS_X_LOC, 0x40)) - - mstore(0x00, mload(PI_Z_X_LOC)) - mstore(0x20, mload(PI_Z_Y_LOC)) - mstore(0x40, mload(PI_Z_OMEGA_X_LOC)) - mstore(0x60, mload(PI_Z_OMEGA_Y_LOC)) - mstore(0x80, u) - success := and(success, staticcall(gas(), 7, 0x40, 0x60, 0x40, 0x40)) - // PAIRING_LHS = [PI_Z] + [PI_Z_OMEGA] * u - success := and(success, staticcall(gas(), 6, 0x00, 0x80, PAIRING_LHS_X_LOC, 0x40)) - // negate lhs y-coordinate - mstore(PAIRING_LHS_Y_LOC, sub(q, mload(PAIRING_LHS_Y_LOC))) - - if mload(CONTAINS_RECURSIVE_PROOF_LOC) { - // VALIDATE RECURSIVE P1 - { - let x := mload(RECURSIVE_P1_X_LOC) - let y := mload(RECURSIVE_P1_Y_LOC) - let xx := mulmod(x, x, q) - // validate on curve - if iszero(eq(mulmod(y, y, q), addmod(mulmod(x, xx, q), 3, q))) { - mstore(0x0, POINT_NOT_ON_CURVE_SELECTOR) - revert(0x00, 0x04) - } - mstore(0x00, x) - mstore(0x20, y) - } - - // compute u.u.[recursive_p1] and write into 0x60 - mstore(0x40, mulmod(u, u, p)) - success := and(success, staticcall(gas(), 7, 0x00, 0x60, 0x60, 0x40)) - // VALIDATE RECURSIVE P2 - { - let x := mload(RECURSIVE_P2_X_LOC) - let y := mload(RECURSIVE_P2_Y_LOC) - let xx := mulmod(x, x, q) - // validate on curve - if iszero(eq(mulmod(y, y, q), addmod(mulmod(x, xx, q), 3, q))) { - mstore(0x0, POINT_NOT_ON_CURVE_SELECTOR) - revert(0x00, 0x04) - } - mstore(0x00, x) - mstore(0x20, y) - } - // compute u.u.[recursive_p2] and write into 0x00 - // 0x40 still contains u*u - success := and(success, staticcall(gas(), 7, 0x00, 0x60, 0x00, 0x40)) - - // compute u.u.[recursiveP1] + rhs and write into rhs - mstore(0xa0, mload(PAIRING_RHS_X_LOC)) - mstore(0xc0, mload(PAIRING_RHS_Y_LOC)) - success := and(success, staticcall(gas(), 6, 0x60, 0x80, PAIRING_RHS_X_LOC, 0x40)) - - // compute u.u.[recursiveP2] + lhs and write into lhs - mstore(0x40, mload(PAIRING_LHS_X_LOC)) - mstore(0x60, mload(PAIRING_LHS_Y_LOC)) - success := and(success, staticcall(gas(), 6, 0x00, 0x80, PAIRING_LHS_X_LOC, 0x40)) - } - - if iszero(success) { - mstore(0x0, PAIRING_PREAMBLE_FAILED_SELECTOR) - revert(0x00, 0x04) - } - } - - /** - * PERFORM PAIRING - */ - { - // rhs paired with [1]_2 - // lhs paired with [x]_2 - - mstore(0x00, mload(PAIRING_RHS_X_LOC)) - mstore(0x20, mload(PAIRING_RHS_Y_LOC)) - mstore(0x40, 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2) // this is [1]_2 - mstore(0x60, 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed) - mstore(0x80, 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b) - mstore(0xa0, 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa) - - mstore(0xc0, mload(PAIRING_LHS_X_LOC)) - mstore(0xe0, mload(PAIRING_LHS_Y_LOC)) - mstore(0x100, mload(G2X_X0_LOC)) - mstore(0x120, mload(G2X_X1_LOC)) - mstore(0x140, mload(G2X_Y0_LOC)) - mstore(0x160, mload(G2X_Y1_LOC)) - - success := staticcall(gas(), 8, 0x00, 0x180, 0x00, 0x20) - if iszero(and(success, mload(0x00))) { - mstore(0x0, PAIRING_FAILED_SELECTOR) - revert(0x00, 0x04) - } - } - - { - mstore(0x00, 0x01) - return(0x00, 0x20) // Proof succeeded! - } - } - } -} - -contract UltraVerifier is BaseUltraVerifier { - function getVerificationKeyHash() public pure override(BaseUltraVerifier) returns (bytes32) { - return UltraVerificationKey.verificationKeyHash(); - } - - function loadVerificationKey(uint256 vk, uint256 _omegaInverseLoc) internal pure virtual override(BaseUltraVerifier) { - UltraVerificationKey.loadVerificationKey(vk, _omegaInverseLoc); - } -} diff --git a/vite-hardhat/components/index.tsx b/vite-hardhat/components/index.tsx index 32cbbde4..38855167 100644 --- a/vite-hardhat/components/index.tsx +++ b/vite-hardhat/components/index.tsx @@ -9,7 +9,7 @@ function Component() { const [input, setInput] = useState<{ x: string; y: string } | undefined>(); const { noir, proofData } = useProofGeneration(input); useOffChainVerification(noir, proofData); - useOnChainVerification(proofData); + const verifyButton = useOnChainVerification(proofData); const submit = (e: React.FormEvent) => { e.preventDefault(); @@ -23,14 +23,17 @@ function Component() { }; return ( -
-

Example starter

-

This circuit checks that x and y are different (yey!)

-

Try it!

- - - -
+ <> +
+

Example starter

+

This circuit checks that x and y are different (yey!)

+

Try it!

+ + + +
+ {verifyButton} + ); } diff --git a/vite-hardhat/hardhat.config.cts b/vite-hardhat/hardhat.config.cts index db5226d7..fd7a8833 100644 --- a/vite-hardhat/hardhat.config.cts +++ b/vite-hardhat/hardhat.config.cts @@ -2,13 +2,19 @@ import '@nomicfoundation/hardhat-toolbox-viem'; import '@nomicfoundation/hardhat-viem'; import '@nomicfoundation/hardhat-chai-matchers'; -import { HardhatUserConfig } from 'hardhat/config'; +import { HardhatUserConfig, task } from 'hardhat/config'; import * as dotenv from 'dotenv'; import { subtask } from 'hardhat/config'; import { TASK_COMPILE_SOLIDITY } from 'hardhat/builtin-tasks/task-names'; -import { join } from 'path'; +import { join, resolve } from 'path'; import { writeFile } from 'fs/promises'; +import { mkdirSync, writeFileSync } from 'fs'; +import { gunzipSync } from 'zlib'; +import { Barretenberg, RawBuffer, Crs } from '@aztec/bb.js'; +import { createFileManager, compile } from '@noir-lang/noir_wasm'; +import { CompiledCircuit } from '@noir-lang/types'; + dotenv.config(); subtask(TASK_COMPILE_SOLIDITY).setAction(async (_, { config }, runSuper) => { @@ -23,6 +29,67 @@ subtask(TASK_COMPILE_SOLIDITY).setAction(async (_, { config }, runSuper) => { return superRes; }); +export async function compileCircuit(path = './circuit') { + const basePath = resolve(join(path)); + const fm = createFileManager(basePath); + const result = await compile(fm); + if (!('program' in result)) { + throw new Error('Compilation failed'); + } + return result.program as CompiledCircuit; +} + +export async function generateArtifacts(path = './circuit', crsPath = './crs') { + const circuit = await compileCircuit(path); + const decompressed = gunzipSync(Buffer.from(circuit.bytecode, 'base64')); + const api = await Barretenberg.new({ threads: 8 }); + const [exact, total, subgroup] = await api.acirGetCircuitSizes(decompressed); + const subgroupSize = Math.pow(2, Math.ceil(Math.log2(total))); + + const crs = await Crs.new(subgroupSize + 1, crsPath); + await api.commonInitSlabAllocator(subgroupSize); + await api.srsInitSrs( + new RawBuffer(crs.getG1Data()), + crs.numPoints, + new RawBuffer(crs.getG2Data()), + ); + + const acirComposer = await api.acirNewAcirComposer(subgroupSize); + await api.acirInitProvingKey(acirComposer, decompressed); + await api.acirInitVerificationKey(acirComposer); + + const contract = await api.acirGetSolidityVerifier(acirComposer); + return { circuit, contract }; +} + +task('compile', 'Compile and generate circuits and contracts').setAction( + async (_, __, runSuper) => { + const { circuit, contract } = await generateArtifacts(); + mkdirSync('artifacts', { recursive: true }); + writeFileSync('artifacts/circuit.json', JSON.stringify(circuit), { flag: 'w' }); + writeFileSync('artifacts/contract.sol', contract, { flag: 'w' }); + await runSuper(); + }, +); + +task('deploy', 'Deploys the verifier contract').setAction(async (taskArguments, hre) => { + console.log(await hre.viem.getWalletClients()); + const publicClient = await hre.viem.getPublicClient(); + + // Deploy the verifier contract + const verifier = await hre.viem.deployContract('UltraVerifier'); + + // Create a config object + const config = { + chainId: publicClient.chain.id, + verifier, + }; + + // Print the config + console.log('Deployed at', config.verifier.address); + writeFileSync('artifacts/deployment.json', JSON.stringify(config), { flag: 'w' }); +}); + const config: HardhatUserConfig = { solidity: { version: '0.8.18', @@ -33,34 +100,22 @@ const config: HardhatUserConfig = { networks: { localhost: { url: 'http://127.0.0.1:8545', + accounts: [process.env.LOCALHOST_DEPLOYER_PRIVATE_KEY as string], + }, + scrollSepolia: { + url: 'https://sepolia-rpc.scroll.io', + accounts: [process.env.SEPOLIA_SCROLL_DEPLOYER_PRIVATE_KEY as string], + }, + holesky: { + url: 'https://holesky.drpc.org', + accounts: [process.env.HOLESKY_DEPLOYER_PRIVATE_KEY as string], }, }, paths: { root: './', - sources: './circuit', + sources: './artifacts', + artifacts: './artifacts/hardhat', }, }; -if (process.env.SEPOLIA_SCROLL_ETHERSCAN_KEY && config.networks) { - config.networks.scrollSepolia = { - url: 'https://sepolia-rpc.scroll.io', - accounts: [process.env.SEPOLIA_SCROLL_DEPLOYER_PRIVATE_KEY as string], - }; - config.etherscan = { - apiKey: { - scrollSepolia: process.env.SEPOLIA_SCROLL_ETHERSCAN_KEY, - }, - customChains: [ - { - network: 'sccrollSepolia', - chainId: 534352, - urls: { - apiURL: 'https://api-sepolia.scrollscan.com/api', - browserURL: 'https://sepolia.scrollscan.com/', - }, - }, - ], - }; -} - export default config; diff --git a/vite-hardhat/hardhat.sh b/vite-hardhat/hardhat.sh new file mode 100755 index 00000000..1efb7c63 --- /dev/null +++ b/vite-hardhat/hardhat.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +NODE_OPTIONS='--experimental-loader ts-node/esm/transpile-only --no-warnings=ExperimentalWarning' +hardhat $@ diff --git a/vite-hardhat/hooks/useOnChainVerification.tsx b/vite-hardhat/hooks/useOnChainVerification.tsx index 1da87d6d..a533f6e4 100644 --- a/vite-hardhat/hooks/useOnChainVerification.tsx +++ b/vite-hardhat/hooks/useOnChainVerification.tsx @@ -1,19 +1,22 @@ import { ProofData } from '@noir-lang/types'; -import { useAccount, useConnect, useContractRead } from 'wagmi'; -import { config, contractCallConfig } from '../utils/wagmi.jsx'; +import { useAccount, useConnect, useDisconnect, useReadContract } from 'wagmi'; +import { contractCallConfig } from '../utils/wagmi.jsx'; import { bytesToHex } from 'viem'; import { useEffect, useState } from 'react'; import { Id, toast } from 'react-toastify'; export function useOnChainVerification(proofData?: ProofData) { const { connect, connectors } = useConnect(); + const { disconnect } = useDisconnect(); const { isConnected } = useAccount(); const [args, setArgs] = useState<[string, string[]] | undefined>(); - const { data, error } = useContractRead({ + const { data, error } = useReadContract({ ...contractCallConfig, args, - enabled: !!args, + query: { + enabled: !!args, + }, }); const [onChainToast, setOnChainToast] = useState(0); @@ -27,13 +30,7 @@ export function useOnChainVerification(proofData?: ProofData) { if (!onChainToast) setOnChainToast(toast.loading('Verifying proof on-chain', { autoClose: 10000 })); - }, [proofData]); - - useEffect(() => { - if (!isConnected) { - connectors.map(c => c.ready && connect({ connector: c })); - } - }, [isConnected]); + }, [isConnected, proofData]); useEffect(() => { if (data) { @@ -51,4 +48,23 @@ export function useOnChainVerification(proofData?: ProofData) { console.error(error); } }, [data, error]); + + if (!isConnected) { + return ( +
+ +
+ ); + } else { + return ( +
+ +
+ ); + } } diff --git a/vite-hardhat/hooks/useProofGeneration.tsx b/vite-hardhat/hooks/useProofGeneration.tsx index 3eb9f381..5a2fc347 100644 --- a/vite-hardhat/hooks/useProofGeneration.tsx +++ b/vite-hardhat/hooks/useProofGeneration.tsx @@ -1,6 +1,6 @@ import { toast } from 'react-toastify'; import { useEffect, useState } from 'react'; -import { getCircuit } from '../utils/compile.js'; +import { getCircuit } from '../circuit/compile.js'; import { BarretenbergBackend, ProofData } from '@noir-lang/backend_barretenberg'; import { Noir } from '@noir-lang/noir_js'; diff --git a/vite-hardhat/index.tsx b/vite-hardhat/index.tsx index 0d0c30ec..be82d014 100644 --- a/vite-hardhat/index.tsx +++ b/vite-hardhat/index.tsx @@ -6,8 +6,11 @@ import { ToastContainer } from 'react-toastify'; import Component from './components/index'; import initNoirC from '@noir-lang/noirc_abi'; import initACVM from '@noir-lang/acvm_js'; -import { WagmiConfig } from 'wagmi'; import { config } from './utils/wagmi'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { WagmiProvider } from 'wagmi'; + +const queryClient = new QueryClient(); const InitWasm = ({ children }) => { const [init, setInit] = React.useState(false); @@ -29,7 +32,11 @@ const InitWasm = ({ children }) => { export function Providers({ children }: { children: React.ReactNode }) { const [mounted, setMounted] = React.useState(false); React.useEffect(() => setMounted(true), []); - return {mounted && children}; + return ( + + {mounted && children} + + ); } ReactDOM.createRoot(document.getElementById('root')!).render( diff --git a/vite-hardhat/package.json b/vite-hardhat/package.json index aa61cb89..54c06b22 100644 --- a/vite-hardhat/package.json +++ b/vite-hardhat/package.json @@ -4,48 +4,53 @@ "type": "module", "description": "A template repository to get started with writing zero knowledge programs with Noir.", "scripts": { - "prep": "cd circuit && nargo codegen-verifier", - "dev": "yarn prep && hardhat compile && yarn deploy && vite", - "build": "yarn deploy && vite build", - "preview": "vite preview", - "deploy": "hardhat compile && NODE_OPTIONS='--experimental-loader ts-node/esm/transpile-only' hardhat run --network ${NETWORK:-localhost} scripts/deploy.ts", - "test": "NODE_OPTIONS='--experimental-loader ts-node/esm/transpile-only' hardhat test" + "node": "bunx hardhat node", + "prep": "bun hh compile && bun hh deploy", + "dev": "bun run prep && vite", + "build": "bun run prep && vite build", + "serve": "vite preview", + "hh": "./hardhat.sh --network ${NETWORK:-localhost}" }, "dependencies": { - "@noir-lang/backend_barretenberg": "^0.25.0", - "@noir-lang/noir_js": "^0.25.0", - "@noir-lang/noir_wasm": "^0.25.0", - "@noir-lang/types": "^0.25.0", + "@noir-lang/backend_barretenberg": "^0.30.0", + "@noir-lang/noir_js": "^0.30.0", + "@noir-lang/noir_wasm": "^0.30.0", + "@noir-lang/types": "^0.30.0", + "@tanstack/query-sync-storage-persister": "5.0.5", + "@tanstack/react-query": "5.44.0", + "@tanstack/react-query-persist-client": "5.0.5", + "commander": "^12.1.0", "dotenv": "^16.0.3", "hardhat": "^2.19.2", "react": "^18.2.0", "react-dom": "^18.2.0", "react-toastify": "^9.1.1", - "viem": "2.*", - "wagmi": "^2.8.7", - "@tanstack/query-sync-storage-persister": "5.0.5", - "@tanstack/react-query": ">=5.35.1", - "@tanstack/react-query-persist-client": "5.0.5" + "shelljs": "^0.8.5", + "tsx": "^4.15.4", + "viem": "2.x", + "wagmi": "2.10.0" }, "devDependencies": { "@nomicfoundation/hardhat-chai-matchers": "^2.0.2", "@nomicfoundation/hardhat-ethers": "^3.0.5", + "@nomicfoundation/hardhat-network-helpers": "^1.0.0", + "@nomicfoundation/hardhat-toolbox-viem": "1.0.0", "@nomicfoundation/hardhat-verify": "^1.0.0", + "@nomicfoundation/hardhat-viem": "1.0.0", + "@tanstack/react-query-devtools": "5.0.5", + "@types/bun": "^1.1.4", "@types/mocha": "^10.0.1", "@types/node": "^18.15.5", "@types/react": "^18.0.26", + "@types/shelljs": "^0.8.7", "@vitejs/plugin-react-swc": "^3.5.0", "chai": "^4.2.0", "hardhat-gas-reporter": "^1.0.9", "solidity-coverage": "^0.8.5", "ts-node": "^10.9.1", - "typescript": "^4.9.3", - "vite": "^5.0.6", - "@nomicfoundation/hardhat-network-helpers": "^1.0.0", - "@nomicfoundation/hardhat-toolbox-viem": "1.0.0", - "@nomicfoundation/hardhat-viem": "1.0.0", "typechain": "^8.1.0", - "@tanstack/react-query-devtools": "5.0.5" + "typescript": "^4.9.3", + "vite": "^5.0.6" }, "engines": { "node": "^20.10.0" diff --git a/vite-hardhat/scripts/deploy.ts b/vite-hardhat/scripts/deploy.ts deleted file mode 100644 index 8303f79d..00000000 --- a/vite-hardhat/scripts/deploy.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { writeFileSync } from 'fs'; -import hre from 'hardhat'; -const { viem } = hre; - -async function main() { - const publicClient = await viem.getPublicClient(); - - // Deploy the verifier contract - const verifier = await viem.deployContract('UltraVerifier'); - - // Create a config object - const config = { - chainId: publicClient.chain.id, - verifier: verifier.address, - }; - - // Print the config - console.log('Deployed at', config); - writeFileSync('utils/addresses.json', JSON.stringify(config), { flag: 'w' }); - process.exit(); -} - -// We recommend this pattern to be able to use async/await everywhere -// and properly handle errors. -main().catch(error => { - console.error(error); - process.exitCode = 1; -}); diff --git a/vite-hardhat/test/index.spec.ts b/vite-hardhat/test/index.spec.ts new file mode 100644 index 00000000..92d1b43e --- /dev/null +++ b/vite-hardhat/test/index.spec.ts @@ -0,0 +1,55 @@ +import { expect, describe, beforeAll, afterAll, test } from 'bun:test'; + +import { Noir } from '@noir-lang/noir_js'; +import { BarretenbergBackend } from '@noir-lang/backend_barretenberg'; + +import { ProofData } from '@noir-lang/types'; +import circuit from '../artifacts/circuit.json' assert { type: 'json' }; +import { exec } from 'shelljs'; +import { ChildProcess } from 'child_process'; + +describe('It compiles noir program code, receiving circuit bytes and abi object.', () => { + let node: ChildProcess; + let noir: Noir; + let correctProof: ProofData; + + beforeAll(async () => { + node = exec('bun hh node', { async: true }); + exec('bun hh compile'); + exec('bun hh deploy'); + + // @ts-ignore + const backend = new BarretenbergBackend(circuit); + // @ts-ignore + noir = new Noir(circuit, backend); + }); + + afterAll(() => { + // Terminate the Hardhat node process + node.kill(); + }); + + test('Should generate valid proof for correct input', async () => { + const input = { x: 1, y: 2 }; + // Generate proof + correctProof = await noir.generateProof(input); + expect(correctProof.proof instanceof Uint8Array).toBeTrue(); + }); + + test('Should verify valid proof for correct input', async () => { + const verification = await noir.verifyProof(correctProof); + expect(verification).toBeTrue(); + }); + + test('Should fail to generate valid proof for incorrect input', async () => { + try { + const input = { x: 1, y: 1 }; + const incorrectProof = await noir.generateProof(input); + } catch (err) { + // TODO(Ze): Not sure how detailed we want this test to be + expect(err instanceof Error).toBeTrue(); + const error = err as Error; + expect(error.message).toContain('Cannot satisfy constraint'); + } + }); +}); diff --git a/vite-hardhat/test/index.ts b/vite-hardhat/test/index.ts deleted file mode 100644 index 6b4ef457..00000000 --- a/vite-hardhat/test/index.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { expect } from 'chai'; -import hre from 'hardhat'; - -import { Noir } from '@noir-lang/noir_js'; -import { BarretenbergBackend } from '@noir-lang/backend_barretenberg'; - -import { compile, createFileManager } from '@noir-lang/noir_wasm'; -import { CompiledCircuit, ProofData } from '@noir-lang/types'; -import { join, resolve } from 'path'; - -async function getCircuit() { - const basePath = resolve(join('./circuit')); - const fm = createFileManager(basePath); - const result = await compile(fm); - if (!('program' in result)) { - throw new Error('Compilation failed'); - } - return result.program as CompiledCircuit; -} - -describe('It compiles noir program code, receiving circuit bytes and abi object.', () => { - let noir: Noir; - let correctProof: ProofData; - - before(async () => { - const compiled = await getCircuit(); - const verifierContract = await hre.viem.deployContract('UltraVerifier'); - - const verifierAddr = verifierContract.address; - console.log(`Verifier deployed to ${verifierAddr}`); - - // @ts-ignore - const backend = new BarretenbergBackend(compiled); - // @ts-ignore - noir = new Noir(compiled, backend); - }); - - it('Should generate valid proof for correct input', async () => { - const input = { x: 1, y: 2 }; - // Generate proof - correctProof = await noir.generateProof(input); - expect(correctProof.proof instanceof Uint8Array).to.be.true; - }); - - it('Should verify valid proof for correct input', async () => { - const verification = await noir.verifyProof(correctProof); - expect(verification).to.be.true; - }); - - it('Should fail to generate valid proof for incorrect input', async () => { - try { - const input = { x: 1, y: 1 }; - const incorrectProof = await noir.generateProof(input); - } catch (err) { - // TODO(Ze): Not sure how detailed we want this test to be - expect(err instanceof Error).to.be.true; - const error = err as Error; - expect(error.message).to.contain('Cannot satisfy constraint'); - } - }); -}); diff --git a/vite-hardhat/tsconfig.json b/vite-hardhat/tsconfig.json index 51ea182d..78696e17 100644 --- a/vite-hardhat/tsconfig.json +++ b/vite-hardhat/tsconfig.json @@ -9,8 +9,8 @@ "allowSyntheticDefaultImports": true, "strict": true, "forceConsistentCasingInFileNames": true, - "module": "node16", - "moduleResolution": "Node16", + "module": "NodeNext", + "moduleResolution": "NodeNext", "resolveJsonModule": true, "isolatedModules": true, "noEmit": true, diff --git a/vite-hardhat/utils/addresses.json b/vite-hardhat/utils/addresses.json deleted file mode 100644 index 7a67b213..00000000 --- a/vite-hardhat/utils/addresses.json +++ /dev/null @@ -1 +0,0 @@ -{"chainId":534351,"verifier":"0x6b38bbe0448f11f50c095547c8aa3526ebc95daa"} \ No newline at end of file diff --git a/vite-hardhat/utils/verifierAbi.json b/vite-hardhat/utils/verifierAbi.json deleted file mode 100644 index 76ba13d1..00000000 --- a/vite-hardhat/utils/verifierAbi.json +++ /dev/null @@ -1,80 +0,0 @@ -[ - { - "inputs": [], - "name": "EC_SCALAR_MUL_FAILURE", - "type": "error" - }, - { - "inputs": [], - "name": "MOD_EXP_FAILURE", - "type": "error" - }, - { - "inputs": [], - "name": "PROOF_FAILURE", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - } - ], - "name": "PUBLIC_INPUT_COUNT_INVALID", - "type": "error" - }, - { - "inputs": [], - "name": "PUBLIC_INPUT_GE_P", - "type": "error" - }, - { - "inputs": [], - "name": "PUBLIC_INPUT_INVALID_BN128_G1_POINT", - "type": "error" - }, - { - "inputs": [], - "name": "getVerificationKeyHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_proof", - "type": "bytes" - }, - { - "internalType": "bytes32[]", - "name": "_publicInputs", - "type": "bytes32[]" - } - ], - "name": "verify", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/vite-hardhat/utils/wagmi.tsx b/vite-hardhat/utils/wagmi.tsx index 071f5999..24b4d10d 100644 --- a/vite-hardhat/utils/wagmi.tsx +++ b/vite-hardhat/utils/wagmi.tsx @@ -1,19 +1,22 @@ import { http, createConfig } from 'wagmi'; -import { localhost, scrollSepolia } from 'wagmi/chains'; -import abi from './verifierAbi.json'; -import { chainId, verifier } from './addresses.json'; +import { scrollSepolia, holesky, hardhat } from 'wagmi/chains'; +import { chainId, verifier } from '../artifacts/deployment.json'; + +import { injected } from 'wagmi/connectors'; export const config = createConfig({ - chains: [localhost, scrollSepolia], + chains: [hardhat, scrollSepolia, holesky], transports: { - [localhost.id]: http(), + [hardhat.id]: http(), [scrollSepolia.id]: http(), + [holesky.id]: http(), }, + connectors: [injected()], }); export const contractCallConfig = { - address: verifier as `0x${string}`, - abi, + address: verifier.address as `0x${string}`, + abi: verifier.abi, chainId: chainId, functionName: 'verify', }; diff --git a/vite-hardhat/yarn.lock b/vite-hardhat/yarn.lock deleted file mode 100644 index 8ce0e05f..00000000 --- a/vite-hardhat/yarn.lock +++ /dev/null @@ -1,7411 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@adraffy/ens-normalize@1.10.0": - version "1.10.0" - resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz#d2a39395c587e092d77cbbc80acf956a54f38bf7" - integrity sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q== - -"@aztec/bb.js@0.26.3": - version "0.26.3" - resolved "https://registry.yarnpkg.com/@aztec/bb.js/-/bb.js-0.26.3.tgz#a148c3c8b35d78a92568f2f7ce9c05a8de4ead22" - integrity sha512-iZXQyjVVgDYQt77IggxC1MUZDBd68Q9aXepclq1kv4Ube1wllmlZ3+NGKZx/ma8yd24ytYGtIx/7kY8L4SbdkQ== - dependencies: - comlink "^4.4.1" - commander "^10.0.1" - debug "^4.3.4" - tslib "^2.4.0" - -"@babel/runtime@^7.19.4", "@babel/runtime@^7.20.6", "@babel/runtime@^7.21.0": - version "7.24.5" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.5.tgz#230946857c053a36ccc66e1dd03b17dd0c4ed02c" - integrity sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g== - dependencies: - regenerator-runtime "^0.14.0" - -"@chainsafe/as-sha256@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz#3639df0e1435cab03f4d9870cc3ac079e57a6fc9" - integrity sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg== - -"@chainsafe/persistent-merkle-tree@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz#4c9ee80cc57cd3be7208d98c40014ad38f36f7ff" - integrity sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ== - dependencies: - "@chainsafe/as-sha256" "^0.3.1" - -"@chainsafe/persistent-merkle-tree@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.5.0.tgz#2b4a62c9489a5739dedd197250d8d2f5427e9f63" - integrity sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw== - dependencies: - "@chainsafe/as-sha256" "^0.3.1" - -"@chainsafe/ssz@^0.10.0": - version "0.10.2" - resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.10.2.tgz#c782929e1bb25fec66ba72e75934b31fd087579e" - integrity sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg== - dependencies: - "@chainsafe/as-sha256" "^0.3.1" - "@chainsafe/persistent-merkle-tree" "^0.5.0" - -"@chainsafe/ssz@^0.9.2": - version "0.9.4" - resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.9.4.tgz#696a8db46d6975b600f8309ad3a12f7c0e310497" - integrity sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ== - dependencies: - "@chainsafe/as-sha256" "^0.3.1" - "@chainsafe/persistent-merkle-tree" "^0.4.2" - case "^1.6.3" - -"@coinbase/wallet-sdk@3.9.1": - version "3.9.1" - resolved "https://registry.yarnpkg.com/@coinbase/wallet-sdk/-/wallet-sdk-3.9.1.tgz#503a14671bb392d653623ef2340934e213ac971f" - integrity sha512-cGUE8wm1/cMI8irRMVOqbFWYcnNugqCtuy2lnnHfgloBg+GRLs9RsrkOUDMdv/StfUeeKhCDyYudsXXvcL1xIA== - dependencies: - bn.js "^5.2.1" - buffer "^6.0.3" - clsx "^1.2.1" - eth-block-tracker "^7.1.0" - eth-json-rpc-filters "^6.0.0" - eventemitter3 "^5.0.1" - keccak "^3.0.3" - preact "^10.16.0" - sha.js "^2.4.11" - -"@cspotcode/source-map-support@^0.8.0": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" - integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== - dependencies: - "@jridgewell/trace-mapping" "0.3.9" - -"@discoveryjs/json-ext@^0.5.0": - version "0.5.7" - resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" - integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== - -"@esbuild/aix-ppc64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz#d1bc06aedb6936b3b6d313bf809a5a40387d2b7f" - integrity sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA== - -"@esbuild/android-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4" - integrity sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA== - -"@esbuild/android-arm@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824" - integrity sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w== - -"@esbuild/android-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d" - integrity sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew== - -"@esbuild/darwin-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e" - integrity sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g== - -"@esbuild/darwin-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd" - integrity sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A== - -"@esbuild/freebsd-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487" - integrity sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA== - -"@esbuild/freebsd-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c" - integrity sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg== - -"@esbuild/linux-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b" - integrity sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA== - -"@esbuild/linux-arm@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef" - integrity sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w== - -"@esbuild/linux-ia32@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601" - integrity sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA== - -"@esbuild/linux-loong64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299" - integrity sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA== - -"@esbuild/linux-mips64el@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec" - integrity sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w== - -"@esbuild/linux-ppc64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8" - integrity sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg== - -"@esbuild/linux-riscv64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf" - integrity sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg== - -"@esbuild/linux-s390x@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8" - integrity sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg== - -"@esbuild/linux-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78" - integrity sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg== - -"@esbuild/netbsd-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b" - integrity sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA== - -"@esbuild/openbsd-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0" - integrity sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw== - -"@esbuild/sunos-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30" - integrity sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA== - -"@esbuild/win32-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae" - integrity sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A== - -"@esbuild/win32-ia32@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67" - integrity sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ== - -"@esbuild/win32-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae" - integrity sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA== - -"@ethereumjs/common@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-3.2.0.tgz#b71df25845caf5456449163012074a55f048e0a0" - integrity sha512-pksvzI0VyLgmuEF2FA/JR/4/y6hcPq8OUail3/AvycBaW1d5VSauOZzqGvJ3RTmR4MU35lWE8KseKOsEhrFRBA== - dependencies: - "@ethereumjs/util" "^8.1.0" - crc-32 "^1.2.0" - -"@ethereumjs/rlp@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-4.0.1.tgz#626fabfd9081baab3d0a3074b0c7ecaf674aaa41" - integrity sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw== - -"@ethereumjs/tx@^4.1.2", "@ethereumjs/tx@^4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-4.2.0.tgz#5988ae15daf5a3b3c815493bc6b495e76009e853" - integrity sha512-1nc6VO4jtFd172BbSnTnDQVr9IYBFl1y4xPzZdtkrkKIncBCkdbgfdRV+MiTkJYAtTxvV12GRZLqBFT1PNK6Yw== - dependencies: - "@ethereumjs/common" "^3.2.0" - "@ethereumjs/rlp" "^4.0.1" - "@ethereumjs/util" "^8.1.0" - ethereum-cryptography "^2.0.0" - -"@ethereumjs/util@^8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/util/-/util-8.1.0.tgz#299df97fb6b034e0577ce9f94c7d9d1004409ed4" - integrity sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA== - dependencies: - "@ethereumjs/rlp" "^4.0.1" - ethereum-cryptography "^2.0.0" - micro-ftch "^0.3.1" - -"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.0.9", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" - integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" - integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - -"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" - integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - -"@ethersproject/address@5.7.0", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" - integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - -"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" - integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== - dependencies: - "@ethersproject/bytes" "^5.7.0" - -"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" - integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - -"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" - integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - bn.js "^5.2.1" - -"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" - integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" - integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - -"@ethersproject/contracts@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" - integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== - dependencies: - "@ethersproject/abi" "^5.7.0" - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - -"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" - integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" - integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/pbkdf2" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/wordlists" "^5.7.0" - -"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" - integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hdnode" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/pbkdf2" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - aes-js "3.0.0" - scrypt-js "3.0.1" - -"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" - integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== - dependencies: - "@ethersproject/bytes" "^5.7.0" - js-sha3 "0.8.0" - -"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" - integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== - -"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": - version "5.7.1" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" - integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" - integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - -"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" - integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.7.1", "@ethersproject/providers@^5.7.2": - version "5.7.2" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" - integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - bech32 "1.1.4" - ws "7.4.6" - -"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" - integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" - integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" - integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - hash.js "1.1.7" - -"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" - integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - bn.js "^5.2.1" - elliptic "6.5.4" - hash.js "1.1.7" - -"@ethersproject/solidity@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" - integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" - integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" - integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - -"@ethersproject/units@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" - integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/wallet@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" - integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/hdnode" "^5.7.0" - "@ethersproject/json-wallets" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/wordlists" "^5.7.0" - -"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0": - version "5.7.1" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" - integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== - dependencies: - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" - integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@fastify/busboy@^2.0.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.0.tgz#0709e9f4cb252351c609c6e6d8d6779a8d25edff" - integrity sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA== - -"@ioredis/commands@^1.1.1": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@ioredis/commands/-/commands-1.2.0.tgz#6d61b3097470af1fdbbe622795b8921d42018e11" - integrity sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg== - -"@jridgewell/gen-mapping@^0.3.5": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" - integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== - dependencies: - "@jridgewell/set-array" "^1.2.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.24" - -"@jridgewell/resolve-uri@^3.0.3": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" - integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== - -"@jridgewell/set-array@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" - integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== - -"@jridgewell/source-map@^0.3.3": - version "0.3.6" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.6.tgz#9d71ca886e32502eb9362c9a74a46787c36df81a" - integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ== - dependencies: - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@0.3.9": - version "0.3.9" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" - integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": - version "0.3.25" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" - integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@lit-labs/ssr-dom-shim@^1.0.0", "@lit-labs/ssr-dom-shim@^1.1.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.2.0.tgz#353ce4a76c83fadec272ea5674ede767650762fd" - integrity sha512-yWJKmpGE6lUURKAaIltoPIE/wrbY3TEkqQt+X0m+7fQNnAv0keydnYvbiJFP1PnMhizmIWRWOG5KLhYyc/xl+g== - -"@lit/reactive-element@^1.3.0", "@lit/reactive-element@^1.6.0": - version "1.6.3" - resolved "https://registry.yarnpkg.com/@lit/reactive-element/-/reactive-element-1.6.3.tgz#25b4eece2592132845d303e091bad9b04cdcfe03" - integrity sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ== - dependencies: - "@lit-labs/ssr-dom-shim" "^1.0.0" - -"@metamask/eth-json-rpc-provider@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@metamask/eth-json-rpc-provider/-/eth-json-rpc-provider-1.0.1.tgz#3fd5316c767847f4ca107518b611b15396a5a32c" - integrity sha512-whiUMPlAOrVGmX8aKYVPvlKyG4CpQXiNNyt74vE1xb5sPvmx5oA7B/kOi/JdBvhGQq97U1/AVdXEdk2zkP8qyA== - dependencies: - "@metamask/json-rpc-engine" "^7.0.0" - "@metamask/safe-event-emitter" "^3.0.0" - "@metamask/utils" "^5.0.1" - -"@metamask/eth-sig-util@^4.0.0": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz#3ad61f6ea9ad73ba5b19db780d40d9aae5157088" - integrity sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ== - dependencies: - ethereumjs-abi "^0.6.8" - ethereumjs-util "^6.2.1" - ethjs-util "^0.1.6" - tweetnacl "^1.0.3" - tweetnacl-util "^0.15.1" - -"@metamask/json-rpc-engine@^7.0.0", "@metamask/json-rpc-engine@^7.3.2": - version "7.3.3" - resolved "https://registry.yarnpkg.com/@metamask/json-rpc-engine/-/json-rpc-engine-7.3.3.tgz#f2b30a2164558014bfcca45db10f5af291d989af" - integrity sha512-dwZPq8wx9yV3IX2caLi9q9xZBw2XeIoYqdyihDDDpuHVCEiqadJLwqM3zy+uwf6F1QYQ65A8aOMQg1Uw7LMLNg== - dependencies: - "@metamask/rpc-errors" "^6.2.1" - "@metamask/safe-event-emitter" "^3.0.0" - "@metamask/utils" "^8.3.0" - -"@metamask/json-rpc-middleware-stream@^6.0.2": - version "6.0.2" - resolved "https://registry.yarnpkg.com/@metamask/json-rpc-middleware-stream/-/json-rpc-middleware-stream-6.0.2.tgz#75852ce481f8f9f091edbfc04ffdf964f8f3cabd" - integrity sha512-jtyx3PRfc1kqoLpYveIVQNwsxYKefc64/LCl9h9Da1m3nUKEvypbYuXSIwi237qvOjKmNHQKsDOZg6f4uBf62Q== - dependencies: - "@metamask/json-rpc-engine" "^7.3.2" - "@metamask/safe-event-emitter" "^3.0.0" - "@metamask/utils" "^8.3.0" - readable-stream "^3.6.2" - -"@metamask/object-multiplex@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@metamask/object-multiplex/-/object-multiplex-2.0.0.tgz#aa6e4aa7b4e2f457ea4bb51cd7281d931e0aa35d" - integrity sha512-+ItrieVZie3j2LfYE0QkdW3dsEMfMEp419IGx1zyeLqjRZ14iQUPRO0H6CGgfAAoC0x6k2PfCAGRwJUA9BMrqA== - dependencies: - once "^1.4.0" - readable-stream "^3.6.2" - -"@metamask/onboarding@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@metamask/onboarding/-/onboarding-1.0.1.tgz#14a36e1e175e2f69f09598e2008ab6dc1b3297e6" - integrity sha512-FqHhAsCI+Vacx2qa5mAFcWNSrTcVGMNjzxVgaX8ECSny/BJ9/vgXP9V7WF/8vb9DltPeQkxr+Fnfmm6GHfmdTQ== - dependencies: - bowser "^2.9.0" - -"@metamask/providers@^15.0.0": - version "15.0.0" - resolved "https://registry.yarnpkg.com/@metamask/providers/-/providers-15.0.0.tgz#e8957bb89d2f3379b32b60117d79a141e44db2bc" - integrity sha512-FXvL1NQNl6I7fMOJTfQYcBlBZ33vSlm6w80cMpmn8sJh0Lb7wcBpe02UwBsNlARnI+Qsr26XeDs6WHUHQh8CuA== - dependencies: - "@metamask/json-rpc-engine" "^7.3.2" - "@metamask/json-rpc-middleware-stream" "^6.0.2" - "@metamask/object-multiplex" "^2.0.0" - "@metamask/rpc-errors" "^6.2.1" - "@metamask/safe-event-emitter" "^3.0.0" - "@metamask/utils" "^8.3.0" - detect-browser "^5.2.0" - extension-port-stream "^3.0.0" - fast-deep-equal "^3.1.3" - is-stream "^2.0.0" - readable-stream "^3.6.2" - webextension-polyfill "^0.10.0" - -"@metamask/rpc-errors@^6.2.1": - version "6.2.1" - resolved "https://registry.yarnpkg.com/@metamask/rpc-errors/-/rpc-errors-6.2.1.tgz#f5daf429ededa7cb83069dc621bd5738fe2a1d80" - integrity sha512-VTgWkjWLzb0nupkFl1duQi9Mk8TGT9rsdnQg6DeRrYEFxtFOh0IF8nAwxM/4GWqDl6uIB06lqUBgUrAVWl62Bw== - dependencies: - "@metamask/utils" "^8.3.0" - fast-safe-stringify "^2.0.6" - -"@metamask/safe-event-emitter@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@metamask/safe-event-emitter/-/safe-event-emitter-2.0.0.tgz#af577b477c683fad17c619a78208cede06f9605c" - integrity sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q== - -"@metamask/safe-event-emitter@^3.0.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@metamask/safe-event-emitter/-/safe-event-emitter-3.1.1.tgz#e89b840a7af8097a8ed4953d8dc8470d1302d3ef" - integrity sha512-ihb3B0T/wJm1eUuArYP4lCTSEoZsClHhuWyfo/kMX3m/odpqNcPfsz5O2A3NT7dXCAgWPGDQGPqygCpgeniKMw== - -"@metamask/sdk-communication-layer@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@metamask/sdk-communication-layer/-/sdk-communication-layer-0.20.2.tgz#7f7fd334b2d26abd1a5a1ec1ffadf823a9589344" - integrity sha512-TN+whYbCClFSkx52Ild1RcjoRyz8YZgwNvZeooIcZIvCfBM6U9W5273KGiY7WLc/oO4KKmFk17d7vMO4gNvhhw== - dependencies: - bufferutil "^4.0.8" - date-fns "^2.29.3" - debug "^4.3.4" - utf-8-validate "^6.0.3" - uuid "^8.3.2" - -"@metamask/sdk-install-modal-web@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@metamask/sdk-install-modal-web/-/sdk-install-modal-web-0.20.2.tgz#1cf0eb3c26291de7598190878fa9a893c4eb2d66" - integrity sha512-0QiaZhV15AGdN1zU2jfTI32eC3YkwEpzDfR9+oiZ9bd2G72c6lYBhTsmDGUd01aP6A+bqJR5PjI8Wh2AWtoLeA== - dependencies: - qr-code-styling "^1.6.0-rc.1" - -"@metamask/sdk@0.20.3": - version "0.20.3" - resolved "https://registry.yarnpkg.com/@metamask/sdk/-/sdk-0.20.3.tgz#73851d68ffe5d45c1872c024182922530b187b7a" - integrity sha512-HZ9NwA+LxiXzuy0YWbWsuD4xejQtp85bhcCAf8UgpA/0dOyF3RS4dKDdBBXSyRgk3RWPjeJgHxioaH4CmBmiRA== - dependencies: - "@metamask/onboarding" "^1.0.1" - "@metamask/providers" "^15.0.0" - "@metamask/sdk-communication-layer" "0.20.2" - "@metamask/sdk-install-modal-web" "0.20.2" - "@types/dom-screen-wake-lock" "^1.0.0" - bowser "^2.9.0" - cross-fetch "^4.0.0" - debug "^4.3.4" - eciesjs "^0.3.15" - eth-rpc-errors "^4.0.3" - eventemitter2 "^6.4.7" - i18next "22.5.1" - i18next-browser-languagedetector "7.1.0" - obj-multiplex "^1.0.0" - pump "^3.0.0" - qrcode-terminal-nooctal "^0.12.1" - react-native-webview "^11.26.0" - readable-stream "^3.6.2" - rollup-plugin-visualizer "^5.9.2" - socket.io-client "^4.5.1" - util "^0.12.4" - uuid "^8.3.2" - -"@metamask/utils@^5.0.1": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@metamask/utils/-/utils-5.0.2.tgz#140ba5061d90d9dac0280c19cab101bc18c8857c" - integrity sha512-yfmE79bRQtnMzarnKfX7AEJBwFTxvTyw3nBQlu/5rmGXrjAeAMltoGxO62TFurxrQAFMNa/fEjIHNvungZp0+g== - dependencies: - "@ethereumjs/tx" "^4.1.2" - "@types/debug" "^4.1.7" - debug "^4.3.4" - semver "^7.3.8" - superstruct "^1.0.3" - -"@metamask/utils@^8.3.0": - version "8.4.0" - resolved "https://registry.yarnpkg.com/@metamask/utils/-/utils-8.4.0.tgz#f44812c96467a4e1b70b2edff6ee89a9caa4e354" - integrity sha512-dbIc3C7alOe0agCuBHM1h71UaEaEqOk2W8rAtEn8QGz4haH2Qq7MoK6i7v2guzvkJVVh79c+QCzIqphC3KvrJg== - dependencies: - "@ethereumjs/tx" "^4.2.0" - "@noble/hashes" "^1.3.1" - "@scure/base" "^1.1.3" - "@types/debug" "^4.1.7" - debug "^4.3.4" - pony-cause "^2.1.10" - semver "^7.5.4" - superstruct "^1.0.3" - uuid "^9.0.1" - -"@motionone/animation@^10.15.1", "@motionone/animation@^10.17.0": - version "10.17.0" - resolved "https://registry.yarnpkg.com/@motionone/animation/-/animation-10.17.0.tgz#7633c6f684b5fee2b61c405881b8c24662c68fca" - integrity sha512-ANfIN9+iq1kGgsZxs+Nz96uiNcPLGTXwfNo2Xz/fcJXniPYpaz/Uyrfa+7I5BPLxCP82sh7quVDudf1GABqHbg== - dependencies: - "@motionone/easing" "^10.17.0" - "@motionone/types" "^10.17.0" - "@motionone/utils" "^10.17.0" - tslib "^2.3.1" - -"@motionone/dom@^10.16.2", "@motionone/dom@^10.16.4": - version "10.17.0" - resolved "https://registry.yarnpkg.com/@motionone/dom/-/dom-10.17.0.tgz#519dd78aab0750a94614c69a82da5290cd617383" - integrity sha512-cMm33swRlCX/qOPHWGbIlCl0K9Uwi6X5RiL8Ma6OrlJ/TP7Q+Np5GE4xcZkFptysFjMTi4zcZzpnNQGQ5D6M0Q== - dependencies: - "@motionone/animation" "^10.17.0" - "@motionone/generators" "^10.17.0" - "@motionone/types" "^10.17.0" - "@motionone/utils" "^10.17.0" - hey-listen "^1.0.8" - tslib "^2.3.1" - -"@motionone/easing@^10.17.0": - version "10.17.0" - resolved "https://registry.yarnpkg.com/@motionone/easing/-/easing-10.17.0.tgz#d66cecf7e3ee30104ad00389fb3f0b2282d81aa9" - integrity sha512-Bxe2wSuLu/qxqW4rBFS5m9tMLOw+QBh8v5A7Z5k4Ul4sTj5jAOfZG5R0bn5ywmk+Fs92Ij1feZ5pmC4TeXA8Tg== - dependencies: - "@motionone/utils" "^10.17.0" - tslib "^2.3.1" - -"@motionone/generators@^10.17.0": - version "10.17.0" - resolved "https://registry.yarnpkg.com/@motionone/generators/-/generators-10.17.0.tgz#878d292539c41434c13310d5f863a87a94e6e689" - integrity sha512-T6Uo5bDHrZWhIfxG/2Aut7qyWQyJIWehk6OB4qNvr/jwA/SRmixwbd7SOrxZi1z5rH3LIeFFBKK1xHnSbGPZSQ== - dependencies: - "@motionone/types" "^10.17.0" - "@motionone/utils" "^10.17.0" - tslib "^2.3.1" - -"@motionone/svelte@^10.16.2": - version "10.16.4" - resolved "https://registry.yarnpkg.com/@motionone/svelte/-/svelte-10.16.4.tgz#5daf117cf5b2576fc6dd487c5e0500938a742470" - integrity sha512-zRVqk20lD1xqe+yEDZhMYgftsuHc25+9JSo+r0a0OWUJFocjSV9D/+UGhX4xgJsuwB9acPzXLr20w40VnY2PQA== - dependencies: - "@motionone/dom" "^10.16.4" - tslib "^2.3.1" - -"@motionone/types@^10.15.1", "@motionone/types@^10.17.0": - version "10.17.0" - resolved "https://registry.yarnpkg.com/@motionone/types/-/types-10.17.0.tgz#179571ce98851bac78e19a1c3974767227f08ba3" - integrity sha512-EgeeqOZVdRUTEHq95Z3t8Rsirc7chN5xFAPMYFobx8TPubkEfRSm5xihmMUkbaR2ErKJTUw3347QDPTHIW12IA== - -"@motionone/utils@^10.15.1", "@motionone/utils@^10.17.0": - version "10.17.0" - resolved "https://registry.yarnpkg.com/@motionone/utils/-/utils-10.17.0.tgz#cc0ba8acdc6848ff48d8c1f2d0d3e7602f4f942e" - integrity sha512-bGwrki4896apMWIj9yp5rAS2m0xyhxblg6gTB/leWDPt+pb410W8lYWsxyurX+DH+gO1zsQsfx2su/c1/LtTpg== - dependencies: - "@motionone/types" "^10.17.0" - hey-listen "^1.0.8" - tslib "^2.3.1" - -"@motionone/vue@^10.16.2": - version "10.16.4" - resolved "https://registry.yarnpkg.com/@motionone/vue/-/vue-10.16.4.tgz#07d09e3aa5115ca0bcc0076cb9e5322775277c09" - integrity sha512-z10PF9JV6SbjFq+/rYabM+8CVlMokgl8RFGvieSGNTmrkQanfHn+15XBrhG3BgUfvmTeSeyShfOHpG0i9zEdcg== - dependencies: - "@motionone/dom" "^10.16.4" - tslib "^2.3.1" - -"@noble/curves@1.2.0", "@noble/curves@~1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" - integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== - dependencies: - "@noble/hashes" "1.3.2" - -"@noble/curves@1.3.0", "@noble/curves@~1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.3.0.tgz#01be46da4fd195822dab821e72f71bf4aeec635e" - integrity sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA== - dependencies: - "@noble/hashes" "1.3.3" - -"@noble/hashes@1.2.0", "@noble/hashes@~1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12" - integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ== - -"@noble/hashes@1.3.2": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" - integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== - -"@noble/hashes@1.3.3", "@noble/hashes@~1.3.0", "@noble/hashes@~1.3.2": - version "1.3.3" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699" - integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== - -"@noble/hashes@^1.3.1": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" - integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== - -"@noble/secp256k1@1.7.1", "@noble/secp256k1@~1.7.0": - version "1.7.1" - resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" - integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw== - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@noir-lang/acvm_js@0.41.0": - version "0.41.0" - resolved "https://registry.yarnpkg.com/@noir-lang/acvm_js/-/acvm_js-0.41.0.tgz#7636ac018e26271c113309cd8883d95aa661ac2a" - integrity sha512-/FST2lHKOpe/US6UFtTYSJZFtmvTjTtW7zBkcp1VaEn00SqezJszuwv9oQOfVz7F59LBL3b4+JFi5oIHlzef0g== - -"@noir-lang/backend_barretenberg@^0.25.0": - version "0.25.0" - resolved "https://registry.yarnpkg.com/@noir-lang/backend_barretenberg/-/backend_barretenberg-0.25.0.tgz#4f4abf5bbdcb5d88fa4dbb29f68eddb513a3070c" - integrity sha512-Dipgpc1DmxLAtB4CEXwOQw8EA/DLqALD+F3cezwuo4vCiB+pvALaUBTDSco6TP1VINRzelzWvUL5BIEoEAlByQ== - dependencies: - "@aztec/bb.js" "0.26.3" - "@noir-lang/types" "0.25.0" - fflate "^0.8.0" - -"@noir-lang/noir_js@^0.25.0": - version "0.25.0" - resolved "https://registry.yarnpkg.com/@noir-lang/noir_js/-/noir_js-0.25.0.tgz#7ff8f0ffc2d1fe0e180156b2c2131374b0d544be" - integrity sha512-hCfTfM6QU7s2ZC8rxf0JEm+7bHIsLnH1FHsw7W2cQB9g69U4HBs0cY7Sc8XUHPpabxQ8VC1kcNTsoQwDvocF0g== - dependencies: - "@noir-lang/acvm_js" "0.41.0" - "@noir-lang/noirc_abi" "0.25.0" - "@noir-lang/types" "0.25.0" - -"@noir-lang/noir_wasm@^0.25.0": - version "0.25.0" - resolved "https://registry.yarnpkg.com/@noir-lang/noir_wasm/-/noir_wasm-0.25.0.tgz#20641eba0c99583e13cbd77d0a1d82f409edb4b9" - integrity sha512-S8x3E9q+UqtvkLO76IDr2f6st8/3VihtHDioR+TwI10SO2LkKssq1QLNLAyrE0P8BFjZNHlcchbSjOylKDQp9A== - dependencies: - "@noir-lang/types" "0.25.0" - pako "^2.1.0" - -"@noir-lang/noirc_abi@0.25.0": - version "0.25.0" - resolved "https://registry.yarnpkg.com/@noir-lang/noirc_abi/-/noirc_abi-0.25.0.tgz#098eea2bf65a0a2dc180041330c26a089c39709c" - integrity sha512-uoNfRgGP9qAfovZKrtfZIE6cKCH2OiuKrsCRvNvSxx2Nv57sN93YYpKF+g1726Y6d/a5vxbxP6z5+uvoEALkDw== - dependencies: - "@noir-lang/types" "0.25.0" - -"@noir-lang/types@0.25.0", "@noir-lang/types@^0.25.0": - version "0.25.0" - resolved "https://registry.yarnpkg.com/@noir-lang/types/-/types-0.25.0.tgz#e05843ba2850e222c2c1e7b1ed5634460bfa7c9f" - integrity sha512-kt1R0vd/J116Q8dTZt3iIEg4d17wzvXOHmw5HbfYbWnFbepA8AlAneEDpYusmZoTwFcxqPKiZu45aUrezFd+kQ== - -"@nomicfoundation/ethereumjs-block@5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.2.tgz#13a7968f5964f1697da941281b7f7943b0465d04" - integrity sha512-hSe6CuHI4SsSiWWjHDIzWhSiAVpzMUcDRpWYzN0T9l8/Rz7xNn3elwVOJ/tAyS0LqL6vitUD78Uk7lQDXZun7Q== - dependencies: - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-trie" "6.0.2" - "@nomicfoundation/ethereumjs-tx" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" - ethereum-cryptography "0.1.3" - ethers "^5.7.1" - -"@nomicfoundation/ethereumjs-blockchain@7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.2.tgz#45323b673b3d2fab6b5008535340d1b8fea7d446" - integrity sha512-8UUsSXJs+MFfIIAKdh3cG16iNmWzWC/91P40sazNvrqhhdR/RtGDlFk2iFTGbBAZPs2+klZVzhRX8m2wvuvz3w== - dependencies: - "@nomicfoundation/ethereumjs-block" "5.0.2" - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-ethash" "3.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-trie" "6.0.2" - "@nomicfoundation/ethereumjs-tx" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" - abstract-level "^1.0.3" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - level "^8.0.0" - lru-cache "^5.1.1" - memory-level "^1.0.0" - -"@nomicfoundation/ethereumjs-common@4.0.2": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.2.tgz#a15d1651ca36757588fdaf2a7d381a150662a3c3" - integrity sha512-I2WGP3HMGsOoycSdOTSqIaES0ughQTueOsddJ36aYVpI3SN8YSusgRFLwzDJwRFVIYDKx/iJz0sQ5kBHVgdDwg== - dependencies: - "@nomicfoundation/ethereumjs-util" "9.0.2" - crc-32 "^1.2.0" - -"@nomicfoundation/ethereumjs-ethash@3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.2.tgz#da77147f806401ee996bfddfa6487500118addca" - integrity sha512-8PfoOQCcIcO9Pylq0Buijuq/O73tmMVURK0OqdjhwqcGHYC2PwhbajDh7GZ55ekB0Px197ajK3PQhpKoiI/UPg== - dependencies: - "@nomicfoundation/ethereumjs-block" "5.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" - abstract-level "^1.0.3" - bigint-crypto-utils "^3.0.23" - ethereum-cryptography "0.1.3" - -"@nomicfoundation/ethereumjs-evm@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.2.tgz#4c2f4b84c056047102a4fa41c127454e3f0cfcf6" - integrity sha512-rBLcUaUfANJxyOx9HIdMX6uXGin6lANCulIm/pjMgRqfiCRMZie3WKYxTSd8ZE/d+qT+zTedBF4+VHTdTSePmQ== - dependencies: - "@ethersproject/providers" "^5.7.1" - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-tx" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - mcl-wasm "^0.7.1" - rustbn.js "~0.2.0" - -"@nomicfoundation/ethereumjs-rlp@5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.2.tgz#4fee8dc58a53ac6ae87fb1fca7c15dc06c6b5dea" - integrity sha512-QwmemBc+MMsHJ1P1QvPl8R8p2aPvvVcKBbvHnQOKBpBztEo0omN0eaob6FeZS/e3y9NSe+mfu3nNFBHszqkjTA== - -"@nomicfoundation/ethereumjs-statemanager@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.2.tgz#3ba4253b29b1211cafe4f9265fee5a0d780976e0" - integrity sha512-dlKy5dIXLuDubx8Z74sipciZnJTRSV/uHG48RSijhgm1V7eXYFC567xgKtsKiVZB1ViTP9iFL4B6Je0xD6X2OA== - dependencies: - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - ethers "^5.7.1" - js-sdsl "^4.1.4" - -"@nomicfoundation/ethereumjs-trie@6.0.2": - version "6.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.2.tgz#9a6dbd28482dca1bc162d12b3733acab8cd12835" - integrity sha512-yw8vg9hBeLYk4YNg5MrSJ5H55TLOv2FSWUTROtDtTMMmDGROsAu+0tBjiNGTnKRi400M6cEzoFfa89Fc5k8NTQ== - dependencies: - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" - "@types/readable-stream" "^2.3.13" - ethereum-cryptography "0.1.3" - readable-stream "^3.6.0" - -"@nomicfoundation/ethereumjs-tx@5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.2.tgz#117813b69c0fdc14dd0446698a64be6df71d7e56" - integrity sha512-T+l4/MmTp7VhJeNloMkM+lPU3YMUaXdcXgTGCf8+ZFvV9NYZTRLFekRwlG6/JMmVfIfbrW+dRRJ9A6H5Q/Z64g== - dependencies: - "@chainsafe/ssz" "^0.9.2" - "@ethersproject/providers" "^5.7.2" - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" - ethereum-cryptography "0.1.3" - -"@nomicfoundation/ethereumjs-util@9.0.2": - version "9.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.2.tgz#16bdc1bb36f333b8a3559bbb4b17dac805ce904d" - integrity sha512-4Wu9D3LykbSBWZo8nJCnzVIYGvGCuyiYLIJa9XXNVt1q1jUzHdB+sJvx95VGCpPkCT+IbLecW6yfzy3E1bQrwQ== - dependencies: - "@chainsafe/ssz" "^0.10.0" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - ethereum-cryptography "0.1.3" - -"@nomicfoundation/ethereumjs-vm@7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.2.tgz#3b0852cb3584df0e18c182d0672a3596c9ca95e6" - integrity sha512-Bj3KZT64j54Tcwr7Qm/0jkeZXJMfdcAtRBedou+Hx0dPOSIgqaIr0vvLwP65TpHbak2DmAq+KJbW2KNtIoFwvA== - dependencies: - "@nomicfoundation/ethereumjs-block" "5.0.2" - "@nomicfoundation/ethereumjs-blockchain" "7.0.2" - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-evm" "2.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-statemanager" "2.0.2" - "@nomicfoundation/ethereumjs-trie" "6.0.2" - "@nomicfoundation/ethereumjs-tx" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - mcl-wasm "^0.7.1" - rustbn.js "~0.2.0" - -"@nomicfoundation/hardhat-chai-matchers@^2.0.2": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-2.0.4.tgz#90ec0ce4a590fef76c7d07686710ef166b06740d" - integrity sha512-nvCeGgcN5mBQPP8TeWTrUB63JathBNj6igtpBC43za4CDglK1/UxzbYBl2WiLlNbzSQXACk3+gm/2xEbWanu5g== - dependencies: - "@types/chai-as-promised" "^7.1.3" - chai-as-promised "^7.1.1" - deep-eql "^4.0.1" - ordinal "^1.0.3" - -"@nomicfoundation/hardhat-ethers@^3.0.5": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.0.5.tgz#0422c2123dec7c42e7fb2be8e1691f1d9708db56" - integrity sha512-RNFe8OtbZK6Ila9kIlHp0+S80/0Bu/3p41HUpaRIoHLm6X3WekTd83vob3rE54Duufu1edCiBDxspBzi2rxHHw== - dependencies: - debug "^4.1.1" - lodash.isequal "^4.5.0" - -"@nomicfoundation/hardhat-network-helpers@^1.0.0": - version "1.0.10" - resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.10.tgz#c61042ceb104fdd6c10017859fdef6529c1d6585" - integrity sha512-R35/BMBlx7tWN5V6d/8/19QCwEmIdbnA4ZrsuXgvs8i2qFx5i7h6mH5pBS4Pwi4WigLH+upl6faYusrNPuzMrQ== - dependencies: - ethereumjs-util "^7.1.4" - -"@nomicfoundation/hardhat-toolbox-viem@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-toolbox-viem/-/hardhat-toolbox-viem-1.0.0.tgz#636fe36af60c6cd893c763c521669f01f9afdfe5" - integrity sha512-mXsvBc4tbtSpzifB6XRQB055rdvgsXg8DYi3lkWqV6JU27Z3ClCd8TjfZ6Oc5e5RWpw6wNbJqd9ZlcoeXCBDqw== - dependencies: - chai-as-promised "^7.1.1" - -"@nomicfoundation/hardhat-verify@^1.0.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-verify/-/hardhat-verify-1.1.1.tgz#6a433d777ce0172d1f0edf7f2d3e1df14b3ecfc1" - integrity sha512-9QsTYD7pcZaQFEA3tBb/D/oCStYDiEVDN7Dxeo/4SCyHRSm86APypxxdOMEPlGmXsAvd+p1j/dTODcpxb8aztA== - dependencies: - "@ethersproject/abi" "^5.1.2" - "@ethersproject/address" "^5.0.2" - cbor "^8.1.0" - chalk "^2.4.2" - debug "^4.1.1" - lodash.clonedeep "^4.5.0" - semver "^6.3.0" - table "^6.8.0" - undici "^5.14.0" - -"@nomicfoundation/hardhat-viem@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-viem/-/hardhat-viem-1.0.0.tgz#a36798de8957ca2f7b5a9bdd4357777ee4597050" - integrity sha512-BWIrjlw3AOGVOPLZ/aGcAYC4EiFUF2QVrFV5StVtMUhQ9Wl6rlUCW98vNd1n0DFW1dPw93NYrMy5w0pEJPyKeg== - dependencies: - abitype "^0.9.8" - lodash.memoize "^4.1.2" - -"@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz#4c858096b1c17fe58a474fe81b46815f93645c15" - integrity sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w== - -"@nomicfoundation/solidity-analyzer-darwin-x64@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz#6e25ccdf6e2d22389c35553b64fe6f3fdaec432c" - integrity sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA== - -"@nomicfoundation/solidity-analyzer-freebsd-x64@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.1.tgz#0a224ea50317139caeebcdedd435c28a039d169c" - integrity sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA== - -"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.1.tgz#dfa085d9ffab9efb2e7b383aed3f557f7687ac2b" - integrity sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg== - -"@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.1.tgz#c9e06b5d513dd3ab02a7ac069c160051675889a4" - integrity sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w== - -"@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.1.tgz#8d328d16839e52571f72f2998c81e46bf320f893" - integrity sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA== - -"@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.1.tgz#9b49d0634b5976bb5ed1604a1e1b736f390959bb" - integrity sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w== - -"@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.1.tgz#e2867af7264ebbcc3131ef837878955dd6a3676f" - integrity sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg== - -"@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.1.tgz#0685f78608dd516c8cdfb4896ed451317e559585" - integrity sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ== - -"@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.1.tgz#c9a44f7108646f083b82e851486e0f6aeb785836" - integrity sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw== - -"@nomicfoundation/solidity-analyzer@^0.1.0": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz#f5f4d36d3f66752f59a57e7208cd856f3ddf6f2d" - integrity sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg== - optionalDependencies: - "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.1.1" - "@nomicfoundation/solidity-analyzer-darwin-x64" "0.1.1" - "@nomicfoundation/solidity-analyzer-freebsd-x64" "0.1.1" - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.1.1" - "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.1.1" - "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.1.1" - "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.1.1" - "@nomicfoundation/solidity-analyzer-win32-arm64-msvc" "0.1.1" - "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.1.1" - "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.1" - -"@parcel/watcher-android-arm64@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.4.0.tgz#9c93763794153e4f76920994a423b6ea3257059d" - integrity sha512-+fPtO/GsbYX1LJnCYCaDVT3EOBjvSFdQN9Mrzh9zWAOOfvidPWyScTrHIZHHfJBvlHzNA0Gy0U3NXFA/M7PHUA== - -"@parcel/watcher-darwin-arm64@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.4.0.tgz#2c79c2abde16aa24cac67e555b60802fd13fe210" - integrity sha512-T/At5pansFuQ8VJLRx0C6C87cgfqIYhW2N/kBfLCUvDhCah0EnLLwaD/6MW3ux+rpgkpQAnMELOCTKlbwncwiA== - -"@parcel/watcher-darwin-x64@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.4.0.tgz#23d82f198c5d033f047467c68d7c335f3df49b46" - integrity sha512-vZMv9jl+szz5YLsSqEGCMSllBl1gU1snfbRL5ysJU03MEa6gkVy9OMcvXV1j4g0++jHEcvzhs3Z3LpeEbVmY6Q== - -"@parcel/watcher-freebsd-x64@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.4.0.tgz#7310cc86abc27dacd57624bcdba1f0ba092e76df" - integrity sha512-dHTRMIplPDT1M0+BkXjtMN+qLtqq24sLDUhmU+UxxLP2TEY2k8GIoqIJiVrGWGomdWsy5IO27aDV1vWyQ6gfHA== - -"@parcel/watcher-linux-arm-glibc@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.4.0.tgz#c31b76e695027eeb1078d3d6f1d641d0b900c335" - integrity sha512-9NQXD+qk46RwATNC3/UB7HWurscY18CnAPMTFcI9Y8CTbtm63/eex1SNt+BHFinEQuLBjaZwR2Lp+n7pmEJPpQ== - -"@parcel/watcher-linux-arm64-glibc@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.4.0.tgz#56e09b86e9d8a4096f606be118b588da6e965080" - integrity sha512-QuJTAQdsd7PFW9jNGaV9Pw+ZMWV9wKThEzzlY3Lhnnwy7iW23qtQFPql8iEaSFMCVI5StNNmONUopk+MFKpiKg== - -"@parcel/watcher-linux-arm64-musl@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.4.0.tgz#27ffd5ca5f510ecd638f9ad22e2e813049db54e7" - integrity sha512-oyN+uA9xcTDo/45bwsd6TFHa7Lc7hKujyMlvwrCLvSckvWogndCEoVYFNfZ6JJ2KNL/6fFiGPcbjp8jJmEh5Ng== - -"@parcel/watcher-linux-x64-glibc@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.4.0.tgz#44cbbb1e5884a1ca900655f47a0775218318f934" - integrity sha512-KphV8awJmxU3q52JQvJot0QMu07CIyEjV+2Tb2ZtbucEgqyRcxOBDMsqp1JNq5nuDXtcCC0uHQICeiEz38dPBQ== - -"@parcel/watcher-linux-x64-musl@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.4.0.tgz#4c33993618c8d5113722852806239cb80360494b" - integrity sha512-7jzcOonpXNWcSijPpKD5IbC6xC7yTibjJw9jviVzZostYLGxbz8LDJLUnLzLzhASPlPGgpeKLtFUMjAAzM+gSA== - -"@parcel/watcher-wasm@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-wasm/-/watcher-wasm-2.4.0.tgz#84a3959c8ef1cd67b36b9fec487edbc8f27719f6" - integrity sha512-MNgQ4WCbBybqQ97KwR/hqJGYTg3+s8qHpgIyFWB2qJOBvoJWbXuJGmm4ZkPLq2bMaANqCZqrXwmKYagZTkMKZA== - dependencies: - is-glob "^4.0.3" - micromatch "^4.0.5" - napi-wasm "^1.1.0" - -"@parcel/watcher-win32-arm64@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.4.0.tgz#2a172fd2fda95fe5389298ca3e70b5a96316162a" - integrity sha512-NOej2lqlq8bQNYhUMnOD0nwvNql8ToQF+1Zhi9ULZoG+XTtJ9hNnCFfyICxoZLXor4bBPTOnzs/aVVoefYnjIg== - -"@parcel/watcher-win32-ia32@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.4.0.tgz#279225b2ebe1fadd3c5137c9b2365ad422656904" - integrity sha512-IO/nM+K2YD/iwjWAfHFMBPz4Zqn6qBDqZxY4j2n9s+4+OuTSRM/y/irksnuqcspom5DjkSeF9d0YbO+qpys+JA== - -"@parcel/watcher-win32-x64@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.4.0.tgz#93e0bd0ad1bda2c9a688764b9b30b71dc5b72a71" - integrity sha512-pAUyUVjfFjWaf/pShmJpJmNxZhbMvJASUpdes9jL6bTEJ+gDxPRSpXTIemNyNsb9AtbiGXs9XduP1reThmd+dA== - -"@parcel/watcher@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.4.0.tgz#2d3c4ef8832a5cdfdbb76b914f022489933e664f" - integrity sha512-XJLGVL0DEclX5pcWa2N9SX1jCGTDd8l972biNooLFtjneuGqodupPQh6XseXIBBeVIMaaJ7bTcs3qGvXwsp4vg== - dependencies: - detect-libc "^1.0.3" - is-glob "^4.0.3" - micromatch "^4.0.5" - node-addon-api "^7.0.0" - optionalDependencies: - "@parcel/watcher-android-arm64" "2.4.0" - "@parcel/watcher-darwin-arm64" "2.4.0" - "@parcel/watcher-darwin-x64" "2.4.0" - "@parcel/watcher-freebsd-x64" "2.4.0" - "@parcel/watcher-linux-arm-glibc" "2.4.0" - "@parcel/watcher-linux-arm64-glibc" "2.4.0" - "@parcel/watcher-linux-arm64-musl" "2.4.0" - "@parcel/watcher-linux-x64-glibc" "2.4.0" - "@parcel/watcher-linux-x64-musl" "2.4.0" - "@parcel/watcher-win32-arm64" "2.4.0" - "@parcel/watcher-win32-ia32" "2.4.0" - "@parcel/watcher-win32-x64" "2.4.0" - -"@rollup/rollup-android-arm-eabi@4.10.0": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.10.0.tgz#786eaf6372be2fc209cc957c14aa9d3ff8fefe6a" - integrity sha512-/MeDQmcD96nVoRumKUljsYOLqfv1YFJps+0pTrb2Z9Nl/w5qNUysMaWQsrd1mvAlNT4yza1iVyIu4Q4AgF6V3A== - -"@rollup/rollup-android-arm64@4.10.0": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.10.0.tgz#0114a042fd6396f4f3233e6171fd5b61a36ed539" - integrity sha512-lvu0jK97mZDJdpZKDnZI93I0Om8lSDaiPx3OiCk0RXn3E8CMPJNS/wxjAvSJJzhhZpfjXsjLWL8LnS6qET4VNQ== - -"@rollup/rollup-darwin-arm64@4.10.0": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.10.0.tgz#944d007c1dc71a8c9174d11671c0c34bd74a2c81" - integrity sha512-uFpayx8I8tyOvDkD7X6n0PriDRWxcqEjqgtlxnUA/G9oS93ur9aZ8c8BEpzFmsed1TH5WZNG5IONB8IiW90TQg== - -"@rollup/rollup-darwin-x64@4.10.0": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.10.0.tgz#1d08cb4521a058d7736ab1c7fe988daf034a2598" - integrity sha512-nIdCX03qFKoR/MwQegQBK+qZoSpO3LESurVAC6s6jazLA1Mpmgzo3Nj3H1vydXp/JM29bkCiuF7tDuToj4+U9Q== - -"@rollup/rollup-linux-arm-gnueabihf@4.10.0": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.10.0.tgz#4763eec1591bf0e99a54ad3d1ef39cb268ed7b19" - integrity sha512-Fz7a+y5sYhYZMQFRkOyCs4PLhICAnxRX/GnWYReaAoruUzuRtcf+Qnw+T0CoAWbHCuz2gBUwmWnUgQ67fb3FYw== - -"@rollup/rollup-linux-arm64-gnu@4.10.0": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.10.0.tgz#e6dae70c53ace836973526c41803b877cffc6f7b" - integrity sha512-yPtF9jIix88orwfTi0lJiqINnlWo6p93MtZEoaehZnmCzEmLL0eqjA3eGVeyQhMtxdV+Mlsgfwhh0+M/k1/V7Q== - -"@rollup/rollup-linux-arm64-musl@4.10.0": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.10.0.tgz#5692e1a0feba0cc4a933864961afc3211177d242" - integrity sha512-9GW9yA30ib+vfFiwjX+N7PnjTnCMiUffhWj4vkG4ukYv1kJ4T9gHNg8zw+ChsOccM27G9yXrEtMScf1LaCuoWQ== - -"@rollup/rollup-linux-riscv64-gnu@4.10.0": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.10.0.tgz#fbe3d80f7a7ac54a8847f5bddd1bc6f7b9ccb65f" - integrity sha512-X1ES+V4bMq2ws5fF4zHornxebNxMXye0ZZjUrzOrf7UMx1d6wMQtfcchZ8SqUnQPPHdOyOLW6fTcUiFgHFadRA== - -"@rollup/rollup-linux-x64-gnu@4.10.0": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.10.0.tgz#3f06b55ccf173446d390d0306643dff62ec99807" - integrity sha512-w/5OpT2EnI/Xvypw4FIhV34jmNqU5PZjZue2l2Y3ty1Ootm3SqhI+AmfhlUYGBTd9JnpneZCDnt3uNOiOBkMyw== - -"@rollup/rollup-linux-x64-musl@4.10.0": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.10.0.tgz#e4ac9b27041c83d7faab6205f62763103eb317ba" - integrity sha512-q/meftEe3QlwQiGYxD9rWwB21DoKQ9Q8wA40of/of6yGHhZuGfZO0c3WYkN9dNlopHlNT3mf5BPsUSxoPuVQaw== - -"@rollup/rollup-win32-arm64-msvc@4.10.0": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.10.0.tgz#6ad0d4fb0066f240778ee3f61eecf7aa0357f883" - integrity sha512-NrR6667wlUfP0BHaEIKgYM/2va+Oj+RjZSASbBMnszM9k+1AmliRjHc3lJIiOehtSSjqYiO7R6KLNrWOX+YNSQ== - -"@rollup/rollup-win32-ia32-msvc@4.10.0": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.10.0.tgz#29d50292381311cc8d3623e73b427b7e2e40a653" - integrity sha512-FV0Tpt84LPYDduIDcXvEC7HKtyXxdvhdAOvOeWMWbQNulxViH2O07QXkT/FffX4FqEI02jEbCJbr+YcuKdyyMg== - -"@rollup/rollup-win32-x64-msvc@4.10.0": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.10.0.tgz#4eedd01af3a82c1acb0fe6d837ebf339c4cbf839" - integrity sha512-OZoJd+o5TaTSQeFFQ6WjFCiltiYVjIdsXxwu/XZ8qRpsvMQr4UsVrE5UyT9RIvsnuF47DqkJKhhVZ2Q9YW9IpQ== - -"@safe-global/safe-apps-provider@0.18.1": - version "0.18.1" - resolved "https://registry.yarnpkg.com/@safe-global/safe-apps-provider/-/safe-apps-provider-0.18.1.tgz#287b5a1e2ef3be630dacde54279409df3ced8202" - integrity sha512-V4a05A3EgJcriqtDoJklDz1BOinWhC6P0hjUSxshA4KOZM7rGPCTto/usXs09zr1vvL28evl/NldSTv97j2bmg== - dependencies: - "@safe-global/safe-apps-sdk" "^8.1.0" - events "^3.3.0" - -"@safe-global/safe-apps-sdk@8.1.0", "@safe-global/safe-apps-sdk@^8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@safe-global/safe-apps-sdk/-/safe-apps-sdk-8.1.0.tgz#d1d0c69cd2bf4eef8a79c5d677d16971926aa64a" - integrity sha512-XJbEPuaVc7b9n23MqlF6c+ToYIS3f7P2Sel8f3cSBQ9WORE4xrSuvhMpK9fDSFqJ7by/brc+rmJR/5HViRr0/w== - dependencies: - "@safe-global/safe-gateway-typescript-sdk" "^3.5.3" - viem "^1.0.0" - -"@safe-global/safe-gateway-typescript-sdk@^3.5.3": - version "3.15.0" - resolved "https://registry.yarnpkg.com/@safe-global/safe-gateway-typescript-sdk/-/safe-gateway-typescript-sdk-3.15.0.tgz#2a99e7eca7aecfad1f5e00744ffdd949cefa4f6a" - integrity sha512-zAzhPgUwzdp89ZrZwCAOImUyAQMQE0LQKcK4vLO5eMbfAcNOxz5g4eVdBRBRa+kVXxjyW5wii58ZlGaYUVBa7g== - -"@scure/base@^1.1.3": - version "1.1.6" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.6.tgz#8ce5d304b436e4c84f896e0550c83e4d88cb917d" - integrity sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g== - -"@scure/base@~1.1.0", "@scure/base@~1.1.2", "@scure/base@~1.1.4": - version "1.1.5" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.5.tgz#1d85d17269fe97694b9c592552dd9e5e33552157" - integrity sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ== - -"@scure/bip32@1.1.5": - version "1.1.5" - resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.5.tgz#d2ccae16dcc2e75bc1d75f5ef3c66a338d1ba300" - integrity sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw== - dependencies: - "@noble/hashes" "~1.2.0" - "@noble/secp256k1" "~1.7.0" - "@scure/base" "~1.1.0" - -"@scure/bip32@1.3.2": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.2.tgz#90e78c027d5e30f0b22c1f8d50ff12f3fb7559f8" - integrity sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA== - dependencies: - "@noble/curves" "~1.2.0" - "@noble/hashes" "~1.3.2" - "@scure/base" "~1.1.2" - -"@scure/bip32@1.3.3": - version "1.3.3" - resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.3.tgz#a9624991dc8767087c57999a5d79488f48eae6c8" - integrity sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ== - dependencies: - "@noble/curves" "~1.3.0" - "@noble/hashes" "~1.3.2" - "@scure/base" "~1.1.4" - -"@scure/bip39@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.1.tgz#b54557b2e86214319405db819c4b6a370cf340c5" - integrity sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg== - dependencies: - "@noble/hashes" "~1.2.0" - "@scure/base" "~1.1.0" - -"@scure/bip39@1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.1.tgz#5cee8978656b272a917b7871c981e0541ad6ac2a" - integrity sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg== - dependencies: - "@noble/hashes" "~1.3.0" - "@scure/base" "~1.1.0" - -"@scure/bip39@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.2.tgz#f3426813f4ced11a47489cbcf7294aa963966527" - integrity sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA== - dependencies: - "@noble/hashes" "~1.3.2" - "@scure/base" "~1.1.4" - -"@sentry/core@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" - integrity sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg== - dependencies: - "@sentry/hub" "5.30.0" - "@sentry/minimal" "5.30.0" - "@sentry/types" "5.30.0" - "@sentry/utils" "5.30.0" - tslib "^1.9.3" - -"@sentry/hub@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.30.0.tgz#2453be9b9cb903404366e198bd30c7ca74cdc100" - integrity sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ== - dependencies: - "@sentry/types" "5.30.0" - "@sentry/utils" "5.30.0" - tslib "^1.9.3" - -"@sentry/minimal@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.30.0.tgz#ce3d3a6a273428e0084adcb800bc12e72d34637b" - integrity sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw== - dependencies: - "@sentry/hub" "5.30.0" - "@sentry/types" "5.30.0" - tslib "^1.9.3" - -"@sentry/node@^5.18.1": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-5.30.0.tgz#4ca479e799b1021285d7fe12ac0858951c11cd48" - integrity sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg== - dependencies: - "@sentry/core" "5.30.0" - "@sentry/hub" "5.30.0" - "@sentry/tracing" "5.30.0" - "@sentry/types" "5.30.0" - "@sentry/utils" "5.30.0" - cookie "^0.4.1" - https-proxy-agent "^5.0.0" - lru_map "^0.3.3" - tslib "^1.9.3" - -"@sentry/tracing@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-5.30.0.tgz#501d21f00c3f3be7f7635d8710da70d9419d4e1f" - integrity sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw== - dependencies: - "@sentry/hub" "5.30.0" - "@sentry/minimal" "5.30.0" - "@sentry/types" "5.30.0" - "@sentry/utils" "5.30.0" - tslib "^1.9.3" - -"@sentry/types@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.30.0.tgz#19709bbe12a1a0115bc790b8942917da5636f402" - integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw== - -"@sentry/utils@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.30.0.tgz#9a5bd7ccff85ccfe7856d493bffa64cabc41e980" - integrity sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww== - dependencies: - "@sentry/types" "5.30.0" - tslib "^1.9.3" - -"@socket.io/component-emitter@~3.1.0": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz#821f8442f4175d8f0467b9daf26e3a18e2d02af2" - integrity sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA== - -"@solidity-parser/parser@^0.14.0": - version "0.14.5" - resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.5.tgz#87bc3cc7b068e08195c219c91cd8ddff5ef1a804" - integrity sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg== - dependencies: - antlr4ts "^0.5.0-alpha.4" - -"@solidity-parser/parser@^0.18.0": - version "0.18.0" - resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.18.0.tgz#8e77a02a09ecce957255a2f48c9a7178ec191908" - integrity sha512-yfORGUIPgLck41qyN7nbwJRAx17/jAIXCTanHOJZhB6PJ1iAk/84b/xlsVKFSyNyLXIj0dhppoE0+CRws7wlzA== - -"@stablelib/aead@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/aead/-/aead-1.0.1.tgz#c4b1106df9c23d1b867eb9b276d8f42d5fc4c0c3" - integrity sha512-q39ik6sxGHewqtO0nP4BuSe3db5G1fEJE8ukvngS2gLkBXyy6E7pLubhbYgnkDFv6V8cWaxcE4Xn0t6LWcJkyg== - -"@stablelib/binary@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/binary/-/binary-1.0.1.tgz#c5900b94368baf00f811da5bdb1610963dfddf7f" - integrity sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q== - dependencies: - "@stablelib/int" "^1.0.1" - -"@stablelib/bytes@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/bytes/-/bytes-1.0.1.tgz#0f4aa7b03df3080b878c7dea927d01f42d6a20d8" - integrity sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ== - -"@stablelib/chacha20poly1305@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/chacha20poly1305/-/chacha20poly1305-1.0.1.tgz#de6b18e283a9cb9b7530d8767f99cde1fec4c2ee" - integrity sha512-MmViqnqHd1ymwjOQfghRKw2R/jMIGT3wySN7cthjXCBdO+qErNPUBnRzqNpnvIwg7JBCg3LdeCZZO4de/yEhVA== - dependencies: - "@stablelib/aead" "^1.0.1" - "@stablelib/binary" "^1.0.1" - "@stablelib/chacha" "^1.0.1" - "@stablelib/constant-time" "^1.0.1" - "@stablelib/poly1305" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - -"@stablelib/chacha@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/chacha/-/chacha-1.0.1.tgz#deccfac95083e30600c3f92803a3a1a4fa761371" - integrity sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg== - dependencies: - "@stablelib/binary" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - -"@stablelib/constant-time@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/constant-time/-/constant-time-1.0.1.tgz#bde361465e1cf7b9753061b77e376b0ca4c77e35" - integrity sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg== - -"@stablelib/ed25519@^1.0.2": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@stablelib/ed25519/-/ed25519-1.0.3.tgz#f8fdeb6f77114897c887bb6a3138d659d3f35996" - integrity sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg== - dependencies: - "@stablelib/random" "^1.0.2" - "@stablelib/sha512" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - -"@stablelib/hash@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/hash/-/hash-1.0.1.tgz#3c944403ff2239fad8ebb9015e33e98444058bc5" - integrity sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg== - -"@stablelib/hkdf@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/hkdf/-/hkdf-1.0.1.tgz#b4efd47fd56fb43c6a13e8775a54b354f028d98d" - integrity sha512-SBEHYE16ZXlHuaW5RcGk533YlBj4grMeg5TooN80W3NpcHRtLZLLXvKyX0qcRFxf+BGDobJLnwkvgEwHIDBR6g== - dependencies: - "@stablelib/hash" "^1.0.1" - "@stablelib/hmac" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - -"@stablelib/hmac@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/hmac/-/hmac-1.0.1.tgz#3d4c1b8cf194cb05d28155f0eed8a299620a07ec" - integrity sha512-V2APD9NSnhVpV/QMYgCVMIYKiYG6LSqw1S65wxVoirhU/51ACio6D4yDVSwMzuTJXWZoVHbDdINioBwKy5kVmA== - dependencies: - "@stablelib/constant-time" "^1.0.1" - "@stablelib/hash" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - -"@stablelib/int@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/int/-/int-1.0.1.tgz#75928cc25d59d73d75ae361f02128588c15fd008" - integrity sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w== - -"@stablelib/keyagreement@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/keyagreement/-/keyagreement-1.0.1.tgz#4612efb0a30989deb437cd352cee637ca41fc50f" - integrity sha512-VKL6xBwgJnI6l1jKrBAfn265cspaWBPAPEc62VBQrWHLqVgNRE09gQ/AnOEyKUWrrqfD+xSQ3u42gJjLDdMDQg== - dependencies: - "@stablelib/bytes" "^1.0.1" - -"@stablelib/poly1305@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/poly1305/-/poly1305-1.0.1.tgz#93bfb836c9384685d33d70080718deae4ddef1dc" - integrity sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA== - dependencies: - "@stablelib/constant-time" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - -"@stablelib/random@1.0.2", "@stablelib/random@^1.0.1", "@stablelib/random@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@stablelib/random/-/random-1.0.2.tgz#2dece393636489bf7e19c51229dd7900eddf742c" - integrity sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w== - dependencies: - "@stablelib/binary" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - -"@stablelib/sha256@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/sha256/-/sha256-1.0.1.tgz#77b6675b67f9b0ea081d2e31bda4866297a3ae4f" - integrity sha512-GIIH3e6KH+91FqGV42Kcj71Uefd/QEe7Dy42sBTeqppXV95ggCcxLTk39bEr+lZfJmp+ghsR07J++ORkRELsBQ== - dependencies: - "@stablelib/binary" "^1.0.1" - "@stablelib/hash" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - -"@stablelib/sha512@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/sha512/-/sha512-1.0.1.tgz#6da700c901c2c0ceacbd3ae122a38ac57c72145f" - integrity sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw== - dependencies: - "@stablelib/binary" "^1.0.1" - "@stablelib/hash" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - -"@stablelib/wipe@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/wipe/-/wipe-1.0.1.tgz#d21401f1d59ade56a62e139462a97f104ed19a36" - integrity sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg== - -"@stablelib/x25519@1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@stablelib/x25519/-/x25519-1.0.3.tgz#13c8174f774ea9f3e5e42213cbf9fc68a3c7b7fd" - integrity sha512-KnTbKmUhPhHavzobclVJQG5kuivH+qDLpe84iRqX3CLrKp881cF160JvXJ+hjn1aMyCwYOKeIZefIH/P5cJoRw== - dependencies: - "@stablelib/keyagreement" "^1.0.1" - "@stablelib/random" "^1.0.2" - "@stablelib/wipe" "^1.0.1" - -"@swc/core-darwin-arm64@1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.4.1.tgz#aa66ec80d9c43586888a79b2f80264aa2a96fdf3" - integrity sha512-ePyfx0348UbR4DOAW24TedeJbafnzha8liXFGuQ4bdXtEVXhLfPngprrxKrAddCuv42F9aTxydlF6+adD3FBhA== - -"@swc/core-darwin-x64@1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.4.1.tgz#de4037efab46f2d17609b2fea0d0e05ac9f076b5" - integrity sha512-eLf4JSe6VkCMdDowjM8XNC5rO+BrgfbluEzAVtKR8L2HacNYukieumN7EzpYCi0uF1BYwu1ku6tLyG2r0VcGxA== - -"@swc/core-linux-arm-gnueabihf@1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.4.1.tgz#20cf68d591161e84c0b6158af9b749b5ead78800" - integrity sha512-K8VtTLWMw+rkN/jDC9o/Q9SMmzdiHwYo2CfgkwVT29NsGccwmNhCQx6XoYiPKyKGIFKt4tdQnJHKUFzxUqQVtQ== - -"@swc/core-linux-arm64-gnu@1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.4.1.tgz#44dc497e127c0f5651ca74f2e4977743bde3f8e7" - integrity sha512-0e8p4g0Bfkt8lkiWgcdiENH3RzkcqKtpRXIVNGOmVc0OBkvc2tpm2WTx/eoCnes2HpTT4CTtR3Zljj4knQ4Fvw== - -"@swc/core-linux-arm64-musl@1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.4.1.tgz#0e21470421531e560ce0b80bde87ba08e19207fd" - integrity sha512-b/vWGQo2n7lZVUnSQ7NBq3Qrj85GrAPPiRbpqaIGwOytiFSk8VULFihbEUwDe0rXgY4LDm8z8wkgADZcLnmdUA== - -"@swc/core-linux-x64-gnu@1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.4.1.tgz#b008be683e24aa4a7b13123b6dd70580e87b4167" - integrity sha512-AFMQlvkKEdNi1Vk2GFTxxJzbICttBsOQaXa98kFTeWTnFFIyiIj2w7Sk8XRTEJ/AjF8ia8JPKb1zddBWr9+bEQ== - -"@swc/core-linux-x64-musl@1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.4.1.tgz#288b5742578beb9a0c94b5e885634e61eb797583" - integrity sha512-QX2MxIECX1gfvUVZY+jk528/oFkS9MAl76e3ZRvG2KC/aKlCQL0KSzcTSm13mOxkDKS30EaGRDRQWNukGpMeRg== - -"@swc/core-win32-arm64-msvc@1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.4.1.tgz#e40a4273aab1509d85e2a561a818f6e705718305" - integrity sha512-OklkJYXXI/tntD2zaY8i3iZldpyDw5q+NAP3k9OlQ7wXXf37djRsHLV0NW4+ZNHBjE9xp2RsXJ0jlOJhfgGoFA== - -"@swc/core-win32-ia32-msvc@1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.4.1.tgz#726731b618d0f99c5cdc8bab004df3dae14658a9" - integrity sha512-MBuc3/QfKX9FnLOU7iGN+6yHRTQaPQ9WskiC8s8JFiKQ+7I2p25tay2RplR9dIEEGgVAu6L7auv96LbNTh+FaA== - -"@swc/core-win32-x64-msvc@1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.4.1.tgz#71382cfd60811b5fecdf1ece458bd21992a37ae5" - integrity sha512-lu4h4wFBb/bOK6N2MuZwg7TrEpwYXgpQf5R7ObNSXL65BwZ9BG8XRzD+dLJmALu8l5N08rP/TrpoKRoGT4WSxw== - -"@swc/core@^1.3.107": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.4.1.tgz#e6bee0fa5d0c93957b274eaa6186bbbad43f2063" - integrity sha512-3y+Y8js+e7BbM16iND+6Rcs3jdiL28q3iVtYsCviYSSpP2uUVKkp5sJnCY4pg8AaVvyN7CGQHO7gLEZQ5ByozQ== - dependencies: - "@swc/counter" "^0.1.2" - "@swc/types" "^0.1.5" - optionalDependencies: - "@swc/core-darwin-arm64" "1.4.1" - "@swc/core-darwin-x64" "1.4.1" - "@swc/core-linux-arm-gnueabihf" "1.4.1" - "@swc/core-linux-arm64-gnu" "1.4.1" - "@swc/core-linux-arm64-musl" "1.4.1" - "@swc/core-linux-x64-gnu" "1.4.1" - "@swc/core-linux-x64-musl" "1.4.1" - "@swc/core-win32-arm64-msvc" "1.4.1" - "@swc/core-win32-ia32-msvc" "1.4.1" - "@swc/core-win32-x64-msvc" "1.4.1" - -"@swc/counter@^0.1.2": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9" - integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== - -"@swc/types@^0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.5.tgz#043b731d4f56a79b4897a3de1af35e75d56bc63a" - integrity sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw== - -"@tanstack/query-core@5.0.5": - version "5.0.5" - resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.0.5.tgz#db02d648398f75a04cc536dacd640265f3614b14" - integrity sha512-MThCETMkHDHTnFZHp71L+SqTtD5d6XHftFCVR1xRJdWM3qGrlQ2VCXaj0SKVcyJej2e1Opa2c7iknu1llxCDNQ== - -"@tanstack/query-core@5.36.0": - version "5.36.0" - resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.36.0.tgz#905bd05b6a73e58d70d95912d84e979ed865ab6a" - integrity sha512-B5BD3pg/mztDR36i77hGcyySKKeYrbM5mnogOROTBi1SUml5ByRK7PGUUl16vvubvQC+mSnqziFG/VIy/DE3FQ== - -"@tanstack/query-devtools@5.0.5": - version "5.0.5" - resolved "https://registry.yarnpkg.com/@tanstack/query-devtools/-/query-devtools-5.0.5.tgz#4547bf772fde5ff233b050a82e18caa8e1f68a3f" - integrity sha512-xjuOhOrrO50sPoJ4WG9yPe3imQ0Ds/nutnmwdTqjM2ZTIkflh//p7q2iB6IxFBY9sB106h+PULlma8sgTuOKAQ== - -"@tanstack/query-persist-client-core@5.0.5": - version "5.0.5" - resolved "https://registry.yarnpkg.com/@tanstack/query-persist-client-core/-/query-persist-client-core-5.0.5.tgz#df8af493e30e6fd9f39118daae711e8552ec039c" - integrity sha512-xdxDiSN/gBG1QJBiyNZPv2y1DOBMrILvhrEd9PgtOzE1AswmgVUh96KENiD7QiABKCVVIihDtSDvJGj0ukbudg== - dependencies: - "@tanstack/query-core" "5.0.5" - -"@tanstack/query-sync-storage-persister@5.0.5": - version "5.0.5" - resolved "https://registry.yarnpkg.com/@tanstack/query-sync-storage-persister/-/query-sync-storage-persister-5.0.5.tgz#e583c800ad7177fb6300d3548cc2ca0fa14af46e" - integrity sha512-uk2/mcNf+YYVza3XaU61RSPCcIi/p+0DfsZWMyIim1yCxF7hzZ17zWheM/2v3zZbeTY/C6m1NIO9KIRiPAM9Mg== - dependencies: - "@tanstack/query-core" "5.0.5" - "@tanstack/query-persist-client-core" "5.0.5" - -"@tanstack/react-query-devtools@5.0.5": - version "5.0.5" - resolved "https://registry.yarnpkg.com/@tanstack/react-query-devtools/-/react-query-devtools-5.0.5.tgz#93fa8526aa71d3c945f9e85df8e4a9e5543626c1" - integrity sha512-vJyS7HXx2zw43TQjm3m4uyaNUgGizOpK2SZL9Lc+DZSuhFbuZ55UEYJTz8yudCbHdLXlkuVZwo6TWWOhXWJFeA== - dependencies: - "@tanstack/query-devtools" "5.0.5" - -"@tanstack/react-query-persist-client@5.0.5": - version "5.0.5" - resolved "https://registry.yarnpkg.com/@tanstack/react-query-persist-client/-/react-query-persist-client-5.0.5.tgz#846e231fef61ec3e383d831c78b5757126507ca0" - integrity sha512-V/jIKdiw0WyJYpnzwnKS+O19jgJPWSBDzvx9qFaXAm98Jnt+lGWFBZdUR0MgY2ufM1fbeejXTjcorgwqjc3kaA== - dependencies: - "@tanstack/query-persist-client-core" "5.0.5" - -"@tanstack/react-query@>=5.35.1": - version "5.36.0" - resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.36.0.tgz#680cb1490d8b823ec7185e1a97065241cda2ea67" - integrity sha512-BATvtM0rohwg7pRHUnxgeDiwLWRGZ8OM/4y8LImHVpecQWoH6Uhytu3Z8YV6V7hQ1sMQBFcUrGE1/e4MxR6YiA== - dependencies: - "@tanstack/query-core" "5.36.0" - -"@tsconfig/node10@^1.0.7": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" - integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== - -"@tsconfig/node12@^1.0.7": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" - integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== - -"@tsconfig/node14@^1.0.0": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" - integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== - -"@tsconfig/node16@^1.0.2": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" - integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== - -"@types/bn.js@^4.11.3": - version "4.11.6" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" - integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== - dependencies: - "@types/node" "*" - -"@types/bn.js@^5.1.0": - version "5.1.5" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.5.tgz#2e0dacdcce2c0f16b905d20ff87aedbc6f7b4bf0" - integrity sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A== - dependencies: - "@types/node" "*" - -"@types/chai-as-promised@^7.1.3": - version "7.1.8" - resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz#f2b3d82d53c59626b5d6bbc087667ccb4b677fe9" - integrity sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw== - dependencies: - "@types/chai" "*" - -"@types/chai@*": - version "4.3.11" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.11.tgz#e95050bf79a932cb7305dd130254ccdf9bde671c" - integrity sha512-qQR1dr2rGIHYlJulmr8Ioq3De0Le9E4MJ5AiaeAETJJpndT1uUNHsGFK3L/UIu+rbkQSdj8J/w2bCsBZc/Y5fQ== - -"@types/concat-stream@^1.6.0": - version "1.6.1" - resolved "https://registry.yarnpkg.com/@types/concat-stream/-/concat-stream-1.6.1.tgz#24bcfc101ecf68e886aaedce60dfd74b632a1b74" - integrity sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA== - dependencies: - "@types/node" "*" - -"@types/debug@^4.1.7": - version "4.1.12" - resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" - integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== - dependencies: - "@types/ms" "*" - -"@types/dom-screen-wake-lock@^1.0.0": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@types/dom-screen-wake-lock/-/dom-screen-wake-lock-1.0.3.tgz#c3588a5f6f40fae957f9ce5be9bc4927a61bb9a0" - integrity sha512-3Iten7X3Zgwvk6kh6/NRdwN7WbZ760YgFCsF5AxDifltUQzW1RaW+WRmcVtgwFzLjaNu64H+0MPJ13yRa8g3Dw== - -"@types/eslint-scope@^3.7.3": - version "3.7.7" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5" - integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint@*": - version "8.56.10" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.10.tgz#eb2370a73bf04a901eeba8f22595c7ee0f7eb58d" - integrity sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*", "@types/estree@1.0.5", "@types/estree@^1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" - integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== - -"@types/form-data@0.0.33": - version "0.0.33" - resolved "https://registry.yarnpkg.com/@types/form-data/-/form-data-0.0.33.tgz#c9ac85b2a5fd18435b8c85d9ecb50e6d6c893ff8" - integrity sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw== - dependencies: - "@types/node" "*" - -"@types/glob@^7.1.1": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" - integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== - dependencies: - "@types/minimatch" "*" - "@types/node" "*" - -"@types/json-schema@*", "@types/json-schema@^7.0.8": - version "7.0.15" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" - integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== - -"@types/lru-cache@^5.1.0": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" - integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== - -"@types/minimatch@*": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" - integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== - -"@types/mocha@^10.0.1": - version "10.0.6" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.6.tgz#818551d39113081048bdddbef96701b4e8bb9d1b" - integrity sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg== - -"@types/ms@*": - version "0.7.34" - resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" - integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== - -"@types/node@*": - version "20.11.17" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.17.tgz#cdd642d0e62ef3a861f88ddbc2b61e32578a9292" - integrity sha512-QmgQZGWu1Yw9TDyAP9ZzpFJKynYNeOvwMJmaxABfieQoVoiVOS6MN1WSpqpRcbeA5+RW82kraAVxCCJg+780Qw== - dependencies: - undici-types "~5.26.4" - -"@types/node@^10.0.3": - version "10.17.60" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" - integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== - -"@types/node@^18.15.5": - version "18.19.15" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.15.tgz#313a9d75435669a57fc28dc8694e7f4c4319f419" - integrity sha512-AMZ2UWx+woHNfM11PyAEQmfSxi05jm9OlkxczuHeEqmvwPkYj6MWv44gbzDPefYOLysTOFyI3ziiy2ONmUZfpA== - dependencies: - undici-types "~5.26.4" - -"@types/node@^8.0.0": - version "8.10.66" - resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.66.tgz#dd035d409df322acc83dff62a602f12a5783bbb3" - integrity sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw== - -"@types/pbkdf2@^3.0.0": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.2.tgz#2dc43808e9985a2c69ff02e2d2027bd4fe33e8dc" - integrity sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew== - dependencies: - "@types/node" "*" - -"@types/prettier@^2.1.1": - version "2.7.3" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" - integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== - -"@types/prop-types@*": - version "15.7.11" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.11.tgz#2596fb352ee96a1379c657734d4b913a613ad563" - integrity sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng== - -"@types/qs@^6.2.31": - version "6.9.11" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.11.tgz#208d8a30bc507bd82e03ada29e4732ea46a6bbda" - integrity sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ== - -"@types/react@^18.0.26": - version "18.2.55" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.55.tgz#38141821b7084404b5013742bc4ae08e44da7a67" - integrity sha512-Y2Tz5P4yz23brwm2d7jNon39qoAtMMmalOQv6+fEFt1mT+FcM3D841wDpoUvFXhaYenuROCy3FZYqdTjM7qVyA== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - -"@types/readable-stream@^2.3.13": - version "2.3.15" - resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-2.3.15.tgz#3d79c9ceb1b6a57d5f6e6976f489b9b5384321ae" - integrity sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ== - dependencies: - "@types/node" "*" - safe-buffer "~5.1.1" - -"@types/scheduler@*": - version "0.16.8" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.8.tgz#ce5ace04cfeabe7ef87c0091e50752e36707deff" - integrity sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A== - -"@types/secp256k1@^4.0.1", "@types/secp256k1@^4.0.4": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.6.tgz#d60ba2349a51c2cbc5e816dcd831a42029d376bf" - integrity sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ== - dependencies: - "@types/node" "*" - -"@types/trusted-types@^2.0.2": - version "2.0.7" - resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11" - integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw== - -"@vitejs/plugin-react-swc@^3.5.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@vitejs/plugin-react-swc/-/plugin-react-swc-3.6.0.tgz#dc9cd1363baf3780f3ad3e0a12a46a3ffe0c7526" - integrity sha512-XFRbsGgpGxGzEV5i5+vRiro1bwcIaZDIdBRP16qwm+jP68ue/S8FJTBEgOeojtVDYrbSua3XFp71kC8VJE6v+g== - dependencies: - "@swc/core" "^1.3.107" - -"@wagmi/connectors@4.3.9": - version "4.3.9" - resolved "https://registry.yarnpkg.com/@wagmi/connectors/-/connectors-4.3.9.tgz#7d0643ca7012c3181ce7ae09616bed1e7a3a720c" - integrity sha512-sY6qWoWpiC9KFx10zkkVw3Hv2iNWuQTsHanTXX9bLfQ477i5S+QDYdkxx5n2Lf/KLoWL3CcohA7Gej0svgzz1Q== - dependencies: - "@coinbase/wallet-sdk" "3.9.1" - "@metamask/sdk" "0.20.3" - "@safe-global/safe-apps-provider" "0.18.1" - "@safe-global/safe-apps-sdk" "8.1.0" - "@walletconnect/ethereum-provider" "2.13.0" - "@walletconnect/modal" "2.6.2" - -"@wagmi/core@2.9.7": - version "2.9.7" - resolved "https://registry.yarnpkg.com/@wagmi/core/-/core-2.9.7.tgz#2035655d4246f20e5f929e68bd0d43babd9841ec" - integrity sha512-PYkuZsiqVZAgPRuADD4UJeKR1TU94tn9LLsdd/f8y2nWbf+6Xzs7i5uQLjB+Drbm4NobgEUj0PqdPUQxCqPCQw== - dependencies: - eventemitter3 "5.0.1" - mipd "0.0.5" - zustand "4.4.1" - -"@walletconnect/core@2.13.0": - version "2.13.0" - resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-2.13.0.tgz#6b79b039930643e8ee85a0f512b143a35fdb8b52" - integrity sha512-blDuZxQenjeXcVJvHxPznTNl6c/2DO4VNrFnus+qHmO6OtT5lZRowdMtlCaCNb1q0OxzgrmBDcTOCbFcCpio/g== - dependencies: - "@walletconnect/heartbeat" "1.2.2" - "@walletconnect/jsonrpc-provider" "1.0.14" - "@walletconnect/jsonrpc-types" "1.0.4" - "@walletconnect/jsonrpc-utils" "1.0.8" - "@walletconnect/jsonrpc-ws-connection" "1.0.14" - "@walletconnect/keyvaluestorage" "1.1.1" - "@walletconnect/logger" "2.1.2" - "@walletconnect/relay-api" "1.0.10" - "@walletconnect/relay-auth" "1.0.4" - "@walletconnect/safe-json" "1.0.2" - "@walletconnect/time" "1.0.2" - "@walletconnect/types" "2.13.0" - "@walletconnect/utils" "2.13.0" - events "3.3.0" - isomorphic-unfetch "3.1.0" - lodash.isequal "4.5.0" - uint8arrays "3.1.0" - -"@walletconnect/environment@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@walletconnect/environment/-/environment-1.0.1.tgz#1d7f82f0009ab821a2ba5ad5e5a7b8ae3b214cd7" - integrity sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg== - dependencies: - tslib "1.14.1" - -"@walletconnect/ethereum-provider@2.13.0": - version "2.13.0" - resolved "https://registry.yarnpkg.com/@walletconnect/ethereum-provider/-/ethereum-provider-2.13.0.tgz#5148851983e0d55fa1c18737b2db22802c82434c" - integrity sha512-dnpW8mmLpWl1AZUYGYZpaAfGw1HFkL0WSlhk5xekx3IJJKn4pLacX2QeIOo0iNkzNQxZfux1AK4Grl1DvtzZEA== - dependencies: - "@walletconnect/jsonrpc-http-connection" "1.0.8" - "@walletconnect/jsonrpc-provider" "1.0.14" - "@walletconnect/jsonrpc-types" "1.0.4" - "@walletconnect/jsonrpc-utils" "1.0.8" - "@walletconnect/modal" "2.6.2" - "@walletconnect/sign-client" "2.13.0" - "@walletconnect/types" "2.13.0" - "@walletconnect/universal-provider" "2.13.0" - "@walletconnect/utils" "2.13.0" - events "3.3.0" - -"@walletconnect/events@1.0.1", "@walletconnect/events@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@walletconnect/events/-/events-1.0.1.tgz#2b5f9c7202019e229d7ccae1369a9e86bda7816c" - integrity sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ== - dependencies: - keyvaluestorage-interface "^1.0.0" - tslib "1.14.1" - -"@walletconnect/heartbeat@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@walletconnect/heartbeat/-/heartbeat-1.2.2.tgz#e8dc5179db7769950c6f9cf59b23516d9b95227d" - integrity sha512-uASiRmC5MwhuRuf05vq4AT48Pq8RMi876zV8rr8cV969uTOzWdB/k+Lj5yI2PBtB1bGQisGen7MM1GcZlQTBXw== - dependencies: - "@walletconnect/events" "^1.0.1" - "@walletconnect/time" "^1.0.2" - events "^3.3.0" - -"@walletconnect/jsonrpc-http-connection@1.0.8": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-http-connection/-/jsonrpc-http-connection-1.0.8.tgz#2f4c3948f074960a3edd07909560f3be13e2c7ae" - integrity sha512-+B7cRuaxijLeFDJUq5hAzNyef3e3tBDIxyaCNmFtjwnod5AGis3RToNqzFU33vpVcxFhofkpE7Cx+5MYejbMGw== - dependencies: - "@walletconnect/jsonrpc-utils" "^1.0.6" - "@walletconnect/safe-json" "^1.0.1" - cross-fetch "^3.1.4" - events "^3.3.0" - -"@walletconnect/jsonrpc-provider@1.0.14": - version "1.0.14" - resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-provider/-/jsonrpc-provider-1.0.14.tgz#696f3e3b6d728b361f2e8b853cfc6afbdf2e4e3e" - integrity sha512-rtsNY1XqHvWj0EtITNeuf8PHMvlCLiS3EjQL+WOkxEOA4KPxsohFnBDeyPYiNm4ZvkQdLnece36opYidmtbmow== - dependencies: - "@walletconnect/jsonrpc-utils" "^1.0.8" - "@walletconnect/safe-json" "^1.0.2" - events "^3.3.0" - -"@walletconnect/jsonrpc-types@1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.4.tgz#ce1a667d79eadf2a2d9d002c152ceb68739c230c" - integrity sha512-P6679fG/M+wuWg9TY8mh6xFSdYnFyFjwFelxyISxMDrlbXokorEVXYOxiqEbrU3x1BmBoCAJJ+vtEaEoMlpCBQ== - dependencies: - events "^3.3.0" - keyvaluestorage-interface "^1.0.0" - -"@walletconnect/jsonrpc-types@^1.0.2", "@walletconnect/jsonrpc-types@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.3.tgz#65e3b77046f1a7fa8347ae02bc1b841abe6f290c" - integrity sha512-iIQ8hboBl3o5ufmJ8cuduGad0CQm3ZlsHtujv9Eu16xq89q+BG7Nh5VLxxUgmtpnrePgFkTwXirCTkwJH1v+Yw== - dependencies: - keyvaluestorage-interface "^1.0.0" - tslib "1.14.1" - -"@walletconnect/jsonrpc-utils@1.0.8", "@walletconnect/jsonrpc-utils@^1.0.6", "@walletconnect/jsonrpc-utils@^1.0.8": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-utils/-/jsonrpc-utils-1.0.8.tgz#82d0cc6a5d6ff0ecc277cb35f71402c91ad48d72" - integrity sha512-vdeb03bD8VzJUL6ZtzRYsFMq1eZQcM3EAzT0a3st59dyLfJ0wq+tKMpmGH7HlB7waD858UWgfIcudbPFsbzVdw== - dependencies: - "@walletconnect/environment" "^1.0.1" - "@walletconnect/jsonrpc-types" "^1.0.3" - tslib "1.14.1" - -"@walletconnect/jsonrpc-ws-connection@1.0.14": - version "1.0.14" - resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-ws-connection/-/jsonrpc-ws-connection-1.0.14.tgz#eec700e74766c7887de2bd76c91a0206628732aa" - integrity sha512-Jsl6fC55AYcbkNVkwNM6Jo+ufsuCQRqViOQ8ZBPH9pRREHH9welbBiszuTLqEJiQcO/6XfFDl6bzCJIkrEi8XA== - dependencies: - "@walletconnect/jsonrpc-utils" "^1.0.6" - "@walletconnect/safe-json" "^1.0.2" - events "^3.3.0" - ws "^7.5.1" - -"@walletconnect/keyvaluestorage@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@walletconnect/keyvaluestorage/-/keyvaluestorage-1.1.1.tgz#dd2caddabfbaf80f6b8993a0704d8b83115a1842" - integrity sha512-V7ZQq2+mSxAq7MrRqDxanTzu2RcElfK1PfNYiaVnJgJ7Q7G7hTVwF8voIBx92qsRyGHZihrwNPHuZd1aKkd0rA== - dependencies: - "@walletconnect/safe-json" "^1.0.1" - idb-keyval "^6.2.1" - unstorage "^1.9.0" - -"@walletconnect/logger@2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@walletconnect/logger/-/logger-2.1.2.tgz#813c9af61b96323a99f16c10089bfeb525e2a272" - integrity sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw== - dependencies: - "@walletconnect/safe-json" "^1.0.2" - pino "7.11.0" - -"@walletconnect/modal-core@2.6.2": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@walletconnect/modal-core/-/modal-core-2.6.2.tgz#d73e45d96668764e0c8668ea07a45bb8b81119e9" - integrity sha512-cv8ibvdOJQv2B+nyxP9IIFdxvQznMz8OOr/oR/AaUZym4hjXNL/l1a2UlSQBXrVjo3xxbouMxLb3kBsHoYP2CA== - dependencies: - valtio "1.11.2" - -"@walletconnect/modal-ui@2.6.2": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@walletconnect/modal-ui/-/modal-ui-2.6.2.tgz#fa57c087c57b7f76aaae93deab0f84bb68b59cf9" - integrity sha512-rbdstM1HPGvr7jprQkyPggX7rP4XiCG85ZA+zWBEX0dVQg8PpAgRUqpeub4xQKDgY7pY/xLRXSiCVdWGqvG2HA== - dependencies: - "@walletconnect/modal-core" "2.6.2" - lit "2.8.0" - motion "10.16.2" - qrcode "1.5.3" - -"@walletconnect/modal@2.6.2": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@walletconnect/modal/-/modal-2.6.2.tgz#4b534a836f5039eeb3268b80be7217a94dd12651" - integrity sha512-eFopgKi8AjKf/0U4SemvcYw9zlLpx9njVN8sf6DAkowC2Md0gPU/UNEbH1Wwj407pEKnEds98pKWib1NN1ACoA== - dependencies: - "@walletconnect/modal-core" "2.6.2" - "@walletconnect/modal-ui" "2.6.2" - -"@walletconnect/relay-api@1.0.10": - version "1.0.10" - resolved "https://registry.yarnpkg.com/@walletconnect/relay-api/-/relay-api-1.0.10.tgz#5aef3cd07c21582b968136179aa75849dcc65499" - integrity sha512-tqrdd4zU9VBNqUaXXQASaexklv6A54yEyQQEXYOCr+Jz8Ket0dmPBDyg19LVSNUN2cipAghQc45/KVmfFJ0cYw== - dependencies: - "@walletconnect/jsonrpc-types" "^1.0.2" - -"@walletconnect/relay-auth@1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@walletconnect/relay-auth/-/relay-auth-1.0.4.tgz#0b5c55c9aa3b0ef61f526ce679f3ff8a5c4c2c7c" - integrity sha512-kKJcS6+WxYq5kshpPaxGHdwf5y98ZwbfuS4EE/NkQzqrDFm5Cj+dP8LofzWvjrrLkZq7Afy7WrQMXdLy8Sx7HQ== - dependencies: - "@stablelib/ed25519" "^1.0.2" - "@stablelib/random" "^1.0.1" - "@walletconnect/safe-json" "^1.0.1" - "@walletconnect/time" "^1.0.2" - tslib "1.14.1" - uint8arrays "^3.0.0" - -"@walletconnect/safe-json@1.0.2", "@walletconnect/safe-json@^1.0.1", "@walletconnect/safe-json@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@walletconnect/safe-json/-/safe-json-1.0.2.tgz#7237e5ca48046e4476154e503c6d3c914126fa77" - integrity sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA== - dependencies: - tslib "1.14.1" - -"@walletconnect/sign-client@2.13.0": - version "2.13.0" - resolved "https://registry.yarnpkg.com/@walletconnect/sign-client/-/sign-client-2.13.0.tgz#f59993f082aec1ca5498b9519027e764c1e6d28b" - integrity sha512-En7KSvNUlQFx20IsYGsFgkNJ2lpvDvRsSFOT5PTdGskwCkUfOpB33SQJ6nCrN19gyoKPNvWg80Cy6MJI0TjNYA== - dependencies: - "@walletconnect/core" "2.13.0" - "@walletconnect/events" "1.0.1" - "@walletconnect/heartbeat" "1.2.2" - "@walletconnect/jsonrpc-utils" "1.0.8" - "@walletconnect/logger" "2.1.2" - "@walletconnect/time" "1.0.2" - "@walletconnect/types" "2.13.0" - "@walletconnect/utils" "2.13.0" - events "3.3.0" - -"@walletconnect/time@1.0.2", "@walletconnect/time@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@walletconnect/time/-/time-1.0.2.tgz#6c5888b835750ecb4299d28eecc5e72c6d336523" - integrity sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g== - dependencies: - tslib "1.14.1" - -"@walletconnect/types@2.13.0": - version "2.13.0" - resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-2.13.0.tgz#cdac083651f5897084fe9ed62779f11810335ac6" - integrity sha512-MWaVT0FkZwzYbD3tvk8F+2qpPlz1LUSWHuqbINUtMXnSzJtXN49Y99fR7FuBhNFtDalfuWsEK17GrNA+KnAsPQ== - dependencies: - "@walletconnect/events" "1.0.1" - "@walletconnect/heartbeat" "1.2.2" - "@walletconnect/jsonrpc-types" "1.0.4" - "@walletconnect/keyvaluestorage" "1.1.1" - "@walletconnect/logger" "2.1.2" - events "3.3.0" - -"@walletconnect/universal-provider@2.13.0": - version "2.13.0" - resolved "https://registry.yarnpkg.com/@walletconnect/universal-provider/-/universal-provider-2.13.0.tgz#f2b597001245e4d4a06d96dd1bce8d3a8a4dcbbf" - integrity sha512-B5QvO8pnk5Bqn4aIt0OukGEQn2Auk9VbHfhQb9cGwgmSCd1GlprX/Qblu4gyT5+TjHMb1Gz5UssUaZWTWbDhBg== - dependencies: - "@walletconnect/jsonrpc-http-connection" "1.0.8" - "@walletconnect/jsonrpc-provider" "1.0.14" - "@walletconnect/jsonrpc-types" "1.0.4" - "@walletconnect/jsonrpc-utils" "1.0.8" - "@walletconnect/logger" "2.1.2" - "@walletconnect/sign-client" "2.13.0" - "@walletconnect/types" "2.13.0" - "@walletconnect/utils" "2.13.0" - events "3.3.0" - -"@walletconnect/utils@2.13.0": - version "2.13.0" - resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-2.13.0.tgz#1fc1fbff0d26db0830e65d1ba8cfe1a13a0616ad" - integrity sha512-q1eDCsRHj5iLe7fF8RroGoPZpdo2CYMZzQSrw1iqL+2+GOeqapxxuJ1vaJkmDUkwgklfB22ufqG6KQnz78sD4w== - dependencies: - "@stablelib/chacha20poly1305" "1.0.1" - "@stablelib/hkdf" "1.0.1" - "@stablelib/random" "1.0.2" - "@stablelib/sha256" "1.0.1" - "@stablelib/x25519" "1.0.3" - "@walletconnect/relay-api" "1.0.10" - "@walletconnect/safe-json" "1.0.2" - "@walletconnect/time" "1.0.2" - "@walletconnect/types" "2.13.0" - "@walletconnect/window-getters" "1.0.1" - "@walletconnect/window-metadata" "1.0.1" - detect-browser "5.3.0" - query-string "7.1.3" - uint8arrays "3.1.0" - -"@walletconnect/window-getters@1.0.1", "@walletconnect/window-getters@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@walletconnect/window-getters/-/window-getters-1.0.1.tgz#f36d1c72558a7f6b87ecc4451fc8bd44f63cbbdc" - integrity sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q== - dependencies: - tslib "1.14.1" - -"@walletconnect/window-metadata@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@walletconnect/window-metadata/-/window-metadata-1.0.1.tgz#2124f75447b7e989e4e4e1581d55d25bc75f7be5" - integrity sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA== - dependencies: - "@walletconnect/window-getters" "^1.0.1" - tslib "1.14.1" - -"@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.12.1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.12.1.tgz#bb16a0e8b1914f979f45864c23819cc3e3f0d4bb" - integrity sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg== - dependencies: - "@webassemblyjs/helper-numbers" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - -"@webassemblyjs/floating-point-hex-parser@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431" - integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== - -"@webassemblyjs/helper-api-error@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" - integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== - -"@webassemblyjs/helper-buffer@1.12.1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz#6df20d272ea5439bf20ab3492b7fb70e9bfcb3f6" - integrity sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw== - -"@webassemblyjs/helper-numbers@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5" - integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== - dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.6" - "@webassemblyjs/helper-api-error" "1.11.6" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/helper-wasm-bytecode@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" - integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== - -"@webassemblyjs/helper-wasm-section@1.12.1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz#3da623233ae1a60409b509a52ade9bc22a37f7bf" - integrity sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g== - dependencies: - "@webassemblyjs/ast" "1.12.1" - "@webassemblyjs/helper-buffer" "1.12.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/wasm-gen" "1.12.1" - -"@webassemblyjs/ieee754@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a" - integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7" - integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" - integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== - -"@webassemblyjs/wasm-edit@^1.12.1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz#9f9f3ff52a14c980939be0ef9d5df9ebc678ae3b" - integrity sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g== - dependencies: - "@webassemblyjs/ast" "1.12.1" - "@webassemblyjs/helper-buffer" "1.12.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/helper-wasm-section" "1.12.1" - "@webassemblyjs/wasm-gen" "1.12.1" - "@webassemblyjs/wasm-opt" "1.12.1" - "@webassemblyjs/wasm-parser" "1.12.1" - "@webassemblyjs/wast-printer" "1.12.1" - -"@webassemblyjs/wasm-gen@1.12.1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz#a6520601da1b5700448273666a71ad0a45d78547" - integrity sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w== - dependencies: - "@webassemblyjs/ast" "1.12.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/ieee754" "1.11.6" - "@webassemblyjs/leb128" "1.11.6" - "@webassemblyjs/utf8" "1.11.6" - -"@webassemblyjs/wasm-opt@1.12.1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz#9e6e81475dfcfb62dab574ac2dda38226c232bc5" - integrity sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg== - dependencies: - "@webassemblyjs/ast" "1.12.1" - "@webassemblyjs/helper-buffer" "1.12.1" - "@webassemblyjs/wasm-gen" "1.12.1" - "@webassemblyjs/wasm-parser" "1.12.1" - -"@webassemblyjs/wasm-parser@1.12.1", "@webassemblyjs/wasm-parser@^1.12.1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz#c47acb90e6f083391e3fa61d113650eea1e95937" - integrity sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ== - dependencies: - "@webassemblyjs/ast" "1.12.1" - "@webassemblyjs/helper-api-error" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/ieee754" "1.11.6" - "@webassemblyjs/leb128" "1.11.6" - "@webassemblyjs/utf8" "1.11.6" - -"@webassemblyjs/wast-printer@1.12.1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz#bcecf661d7d1abdaf989d8341a4833e33e2b31ac" - integrity sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA== - dependencies: - "@webassemblyjs/ast" "1.12.1" - "@xtuc/long" "4.2.2" - -"@webpack-cli/configtest@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.1.1.tgz#3b2f852e91dac6e3b85fb2a314fb8bef46d94646" - integrity sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw== - -"@webpack-cli/info@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-2.0.2.tgz#cc3fbf22efeb88ff62310cf885c5b09f44ae0fdd" - integrity sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A== - -"@webpack-cli/serve@^2.0.5": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.5.tgz#325db42395cd49fe6c14057f9a900e427df8810e" - integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ== - -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" - integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== - -"@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" - integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -abbrev@1.0.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" - integrity sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q== - -abitype@0.9.8: - version "0.9.8" - resolved "https://registry.yarnpkg.com/abitype/-/abitype-0.9.8.tgz#1f120b6b717459deafd213dfbf3a3dd1bf10ae8c" - integrity sha512-puLifILdm+8sjyss4S+fsUN09obiT1g2YW6CtcQF+QDzxR0euzgEB29MZujC6zMk2a6SVmtttq1fc6+YFA7WYQ== - -abitype@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.0.tgz#237176dace81d90d018bebf3a45cb42f2a2d9e97" - integrity sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ== - -abitype@^0.9.8: - version "0.9.10" - resolved "https://registry.yarnpkg.com/abitype/-/abitype-0.9.10.tgz#fa6fa30a6465da98736f98b6c601a02ed49f6eec" - integrity sha512-FIS7U4n7qwAT58KibwYig5iFG4K61rbhAqaQh/UWj8v1Y8mjX3F8TC9gd8cz9yT1TYel9f8nS5NO5kZp2RW0jQ== - -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - -abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3, abstract-level@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.4.tgz#3ad8d684c51cc9cbc9cf9612a7100b716c414b57" - integrity sha512-eUP/6pbXBkMbXFdx4IH2fVgvB7M0JvR7/lIL33zcs0IBcwjdzSSl31TOJsaCzmKSSDF9h8QYSOJux4Nd4YJqFg== - dependencies: - buffer "^6.0.3" - catering "^2.1.0" - is-buffer "^2.0.5" - level-supports "^4.0.0" - level-transcoder "^1.0.1" - module-error "^1.0.1" - queue-microtask "^1.2.3" - -acorn-import-assertions@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" - integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== - -acorn-walk@^8.1.1: - version "8.3.2" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" - integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== - -acorn@^8.11.3, acorn@^8.4.1, acorn@^8.7.1, acorn@^8.8.2: - version "8.11.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== - -adm-zip@^0.4.16: - version "0.4.16" - resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" - integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== - -aes-js@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" - integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== - -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -ajv@^6.12.5: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^8.0.1: - version "8.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - integrity sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg== - -ansi-align@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" - integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== - dependencies: - string-width "^4.1.0" - -ansi-colors@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - -ansi-colors@^4.1.1: - version "4.1.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" - integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== - -ansi-escapes@^4.3.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-regex@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" - integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -antlr4ts@^0.5.0-alpha.4: - version "0.5.0-alpha.4" - resolved "https://registry.yarnpkg.com/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz#71702865a87478ed0b40c0709f422cf14d51652a" - integrity sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ== - -anymatch@^3.1.3, anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -array-back@^3.0.1, array-back@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" - integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== - -array-back@^4.0.1, array-back@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.2.tgz#8004e999a6274586beeb27342168652fdb89fa1e" - integrity sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg== - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array-uniq@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== - -asap@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== - -assertion-error@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" - integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - -async-mutex@^0.2.6: - version "0.2.6" - resolved "https://registry.yarnpkg.com/async-mutex/-/async-mutex-0.2.6.tgz#0d7a3deb978bc2b984d5908a2038e1ae2e54ff40" - integrity sha512-Hs4R+4SPgamu6rSGW8C7cV9gaWUKEHykfzCCvIRuaVv636Ju10ZdeUbvb4TBEW0INuq2DHZqXbK4Nd3yG4RaRw== - dependencies: - tslib "^2.0.0" - -async@1.x: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - integrity sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -atomic-sleep@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" - integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== - -available-typed-arrays@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz#ac812d8ce5a6b976d738e1c45f08d0b00bc7d725" - integrity sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg== - -axios@^1.5.1: - version "1.6.7" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.7.tgz#7b48c2e27c96f9c68a2f8f31e2ab19f59b06b0a7" - integrity sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA== - dependencies: - follow-redirects "^1.15.4" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base-x@^3.0.2: - version "3.0.9" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" - integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== - dependencies: - safe-buffer "^5.0.1" - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -bech32@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" - integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== - -bigint-crypto-utils@^3.0.23: - version "3.3.0" - resolved "https://registry.yarnpkg.com/bigint-crypto-utils/-/bigint-crypto-utils-3.3.0.tgz#72ad00ae91062cf07f2b1def9594006c279c1d77" - integrity sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -blakejs@^1.1.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" - integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== - -bn.js@4.11.6: - version "4.11.6" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" - integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== - -bn.js@^4.11.0, bn.js@^4.11.8, bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" - integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== - -bowser@^2.9.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f" - integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== - -boxen@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" - integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== - dependencies: - ansi-align "^3.0.0" - camelcase "^6.2.0" - chalk "^4.1.0" - cli-boxes "^2.2.1" - string-width "^4.2.2" - type-fest "^0.20.2" - widest-line "^3.1.0" - wrap-ansi "^7.0.0" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== - -browser-level@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browser-level/-/browser-level-1.0.1.tgz#36e8c3183d0fe1c405239792faaab5f315871011" - integrity sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ== - dependencies: - abstract-level "^1.0.2" - catering "^2.1.1" - module-error "^1.0.2" - run-parallel-limit "^1.1.0" - -browser-stdout@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" - integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== - -browserify-aes@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserslist@^4.21.10: - version "4.23.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" - integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== - dependencies: - caniuse-lite "^1.0.30001587" - electron-to-chromium "^1.4.668" - node-releases "^2.0.14" - update-browserslist-db "^1.0.13" - -bs58@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" - integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== - dependencies: - base-x "^3.0.2" - -bs58check@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" - integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== - dependencies: - bs58 "^4.0.0" - create-hash "^1.1.0" - safe-buffer "^5.1.2" - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== - -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -bufferutil@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.8.tgz#1de6a71092d65d7766c4d8a522b261a6e787e8ea" - integrity sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw== - dependencies: - node-gyp-build "^4.3.0" - -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" - integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - set-function-length "^1.2.1" - -camelcase@^5.0.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -camelcase@^6.0.0, camelcase@^6.2.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -caniuse-lite@^1.0.30001587: - version "1.0.30001618" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001618.tgz#fad74fa006aef0f01e8e5c0a5540c74d8d36ec6f" - integrity sha512-p407+D1tIkDvsEAPS22lJxLQQaG8OTBEqo0KhzfABGk0TU4juBNDSfH0hyAp/HRyx+M8L17z/ltyhxh27FTfQg== - -case@^1.6.3: - version "1.6.3" - resolved "https://registry.yarnpkg.com/case/-/case-1.6.3.tgz#0a4386e3e9825351ca2e6216c60467ff5f1ea1c9" - integrity sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ== - -caseless@^0.12.0, caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== - -catering@^2.1.0, catering@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" - integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== - -cbor@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/cbor/-/cbor-8.1.0.tgz#cfc56437e770b73417a2ecbfc9caf6b771af60d5" - integrity sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg== - dependencies: - nofilter "^3.1.0" - -chai-as-promised@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.1.tgz#08645d825deb8696ee61725dbf590c012eb00ca0" - integrity sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA== - dependencies: - check-error "^1.0.2" - -chai@^4.2.0: - version "4.4.1" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.4.1.tgz#3603fa6eba35425b0f2ac91a009fe924106e50d1" - integrity sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g== - dependencies: - assertion-error "^1.1.0" - check-error "^1.0.3" - deep-eql "^4.1.3" - get-func-name "^2.0.2" - loupe "^2.3.6" - pathval "^1.1.1" - type-detect "^4.0.8" - -chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - 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" - -chalk@^4.1.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -"charenc@>= 0.0.1": - version "0.0.2" - resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" - integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== - -check-error@^1.0.2, check-error@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694" - integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== - dependencies: - get-func-name "^2.0.2" - -chokidar@3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - 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" - optionalDependencies: - fsevents "~2.3.2" - -chokidar@^3.4.0, chokidar@^3.5.3: - version "3.6.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" - integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== - 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" - optionalDependencies: - fsevents "~2.3.2" - -chrome-trace-event@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -citty@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/citty/-/citty-0.1.5.tgz#fe37ceae5dc764af75eb2fece99d2bf527ea4e50" - integrity sha512-AS7n5NSc0OQVMV9v6wt3ByujNIrne0/cTjiC2MYqhvao57VNfiuVksTSr2p17nVOhEr2KtqiAkGwHcgMC/qUuQ== - dependencies: - consola "^3.2.3" - -classic-level@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.4.1.tgz#169ecf9f9c6200ad42a98c8576af449c1badbaee" - integrity sha512-qGx/KJl3bvtOHrGau2WklEZuXhS3zme+jf+fsu6Ej7W7IP/C49v7KNlWIsT1jZu0YnfzSIYDGcEWpCa1wKGWXQ== - dependencies: - abstract-level "^1.0.2" - catering "^2.1.0" - module-error "^1.0.1" - napi-macros "^2.2.2" - node-gyp-build "^4.3.0" - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cli-boxes@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" - integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== - -cli-table3@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" - integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== - dependencies: - object-assign "^4.1.0" - string-width "^2.1.1" - optionalDependencies: - colors "^1.1.2" - -clipboardy@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-4.0.0.tgz#e73ced93a76d19dd379ebf1f297565426dffdca1" - integrity sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w== - dependencies: - execa "^8.0.1" - is-wsl "^3.1.0" - is64bit "^2.0.0" - -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - -clone-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" - -clsx@^1.1.1, clsx@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" - integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== - -cluster-key-slot@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac" - integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA== - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -colorette@^2.0.14: - version "2.0.20" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" - integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== - -colors@1.4.0, colors@^1.1.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - -combined-stream@^1.0.6, combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -comlink@^4.4.1: - version "4.4.1" - resolved "https://registry.yarnpkg.com/comlink/-/comlink-4.4.1.tgz#e568b8e86410b809e8600eb2cf40c189371ef981" - integrity sha512-+1dlx0aY5Jo1vHy/tSsIGpSkN4tS9rZSW8FIhG0JH/crs9wwweswIo/POr451r7bZww3hFbPAKnTpimzL/mm4Q== - -command-exists@^1.2.8: - version "1.2.9" - resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" - integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== - -command-line-args@^5.1.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.2.1.tgz#c44c32e437a57d7c51157696893c5909e9cec42e" - integrity sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg== - dependencies: - array-back "^3.1.0" - find-replace "^3.0.0" - lodash.camelcase "^4.3.0" - typical "^4.0.0" - -command-line-usage@^6.1.0: - version "6.1.3" - resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-6.1.3.tgz#428fa5acde6a838779dfa30e44686f4b6761d957" - integrity sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw== - dependencies: - array-back "^4.0.2" - chalk "^2.4.2" - table-layout "^1.0.2" - typical "^5.2.0" - -commander@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" - integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== - -commander@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" - integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== - -commander@^2.20.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -concat-stream@^1.6.0, concat-stream@^1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -consola@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/consola/-/consola-3.2.3.tgz#0741857aa88cfa0d6fd53f1cff0375136e98502f" - integrity sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ== - -cookie-es@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cookie-es/-/cookie-es-1.0.0.tgz#4759684af168dfc54365b2c2dda0a8d7ee1e4865" - integrity sha512-mWYvfOLrfEc996hlKcdABeIiPHUPC6DM2QYZdGGOvhOTbA3tjm2eBwqlJpoFdjC89NI4Qt6h0Pu06Mp+1Pj5OQ== - -cookie@^0.4.1: - version "0.4.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" - integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -crc-32@^1.2.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" - integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== - -create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.4, create-hmac@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== - -cross-fetch@^3.1.4: - version "3.1.8" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82" - integrity sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg== - dependencies: - node-fetch "^2.6.12" - -cross-fetch@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-4.0.0.tgz#f037aef1580bb3a1a35164ea2a848ba81b445983" - integrity sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g== - dependencies: - node-fetch "^2.6.12" - -cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crossws@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/crossws/-/crossws-0.1.1.tgz#3a85a8140568e4828d9747a884171ea7e6a8bbe2" - integrity sha512-c9c/o7bS3OjsdpSkvexpka0JNlesBF2JU9B2V1yNsYGwRbAafxhJQ7VI9b48D5bpONz/oxbPGMzBojy9sXoQIQ== - -"crypt@>= 0.0.1": - version "0.0.2" - resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" - integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== - -csstype@^3.0.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" - integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== - -date-fns@^2.29.3: - version "2.30.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" - integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== - dependencies: - "@babel/runtime" "^7.21.0" - -death@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/death/-/death-1.1.0.tgz#01aa9c401edd92750514470b8266390c66c67318" - integrity sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w== - -debug@4, debug@4.3.4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.3, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== - -decamelize@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" - integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== - -decode-uri-component@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" - integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== - -deep-eql@^4.0.1, deep-eql@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" - integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== - dependencies: - type-detect "^4.0.0" - -deep-extend@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deep-is@~0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -define-data-property@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.3.tgz#281845e04737d709c2de99e278546189b65d3055" - integrity sha512-h3GBouC+RPtNX2N0hHVLo2ZwPYurq8mLmXpOLTsw71gr7lHt5VaI4vVkDUNOfiWmm48JEXe3VM7PmLX45AMmmg== - dependencies: - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - gopd "^1.0.1" - has-property-descriptors "^1.0.1" - -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== - -defu@^6.1.3, defu@^6.1.4: - version "6.1.4" - resolved "https://registry.yarnpkg.com/defu/-/defu-6.1.4.tgz#4e0c9cf9ff68fe5f3d7f2765cc1a012dfdcb0479" - integrity sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg== - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -denque@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1" - integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== - -depd@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -destr@^2.0.1, destr@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/destr/-/destr-2.0.2.tgz#8d3c0ee4ec0a76df54bc8b819bca215592a8c218" - integrity sha512-65AlobnZMiCET00KaFFjUefxDX0khFA/E4myqZ7a6Sq1yZtR8+FVIvilVX66vF2uobSumxooYZChiRPCKNqhmg== - -detect-browser@5.3.0, detect-browser@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/detect-browser/-/detect-browser-5.3.0.tgz#9705ef2bddf46072d0f7265a1fe300e36fe7ceca" - integrity sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w== - -detect-libc@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== - -diff@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" - integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -difflib@^0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/difflib/-/difflib-0.2.4.tgz#b5e30361a6db023176d562892db85940a718f47e" - integrity sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w== - dependencies: - heap ">= 0.2.0" - -dijkstrajs@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/dijkstrajs/-/dijkstrajs-1.0.3.tgz#4c8dbdea1f0f6478bff94d9c49c784d623e4fc23" - integrity sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -dotenv@^16.0.3: - version "16.4.3" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.3.tgz#481235ec516c4e47d2612a478482ee36607f70c1" - integrity sha512-II98GFrje5psQTSve0E7bnwMFybNLqT8Vu8JIFWRjsE3khyNUm/loZupuy5DVzG2IXf/ysxvrixYOQnM6mjD3A== - -duplexify@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.2.tgz#18b4f8d28289132fa0b9573c898d9f903f81c7b0" - integrity sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw== - dependencies: - end-of-stream "^1.4.1" - inherits "^2.0.3" - readable-stream "^3.1.1" - stream-shift "^1.0.0" - -eciesjs@^0.3.15: - version "0.3.18" - resolved "https://registry.yarnpkg.com/eciesjs/-/eciesjs-0.3.18.tgz#67b5d73a8466e40a45bbc2f2a3177e71e9c0643d" - integrity sha512-RQhegEtLSyIiGJmFTZfvCTHER/fymipXFVx6OwSRYD6hOuy+6Kjpk0dGvIfP9kxn/smBpxQy71uxpGO406ITCw== - dependencies: - "@types/secp256k1" "^4.0.4" - futoin-hkdf "^1.5.3" - secp256k1 "^5.0.0" - -electron-to-chromium@^1.4.668: - version "1.4.767" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.767.tgz#b885cfefda5a2e7a7ee356c567602012294ed260" - integrity sha512-nzzHfmQqBss7CE3apQHkHjXW77+8w3ubGCIoEijKCJebPufREaFETgGXWTkh32t259F3Kcq+R8MZdFdOJROgYw== - -elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -encode-utf8@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda" - integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw== - -end-of-stream@^1.1.0, end-of-stream@^1.4.0, end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -engine.io-client@~6.5.2: - version "6.5.3" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.5.3.tgz#4cf6fa24845029b238f83c628916d9149c399bc5" - integrity sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q== - dependencies: - "@socket.io/component-emitter" "~3.1.0" - debug "~4.3.1" - engine.io-parser "~5.2.1" - ws "~8.11.0" - xmlhttprequest-ssl "~2.0.0" - -engine.io-parser@~5.2.1: - version "5.2.2" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.2.2.tgz#37b48e2d23116919a3453738c5720455e64e1c49" - integrity sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw== - -enhanced-resolve@^5.16.0: - version "5.16.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz#e8bc63d51b826d6f1cbc0a150ecb5a8b0c62e567" - integrity sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - -enquirer@^2.3.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" - integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== - dependencies: - ansi-colors "^4.1.1" - strip-ansi "^6.0.1" - -env-paths@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - -envinfo@^7.7.3: - version "7.13.0" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.13.0.tgz#81fbb81e5da35d74e814941aeab7c325a606fb31" - integrity sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q== - -es-define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" - integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - dependencies: - get-intrinsic "^1.2.4" - -es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - -es-module-lexer@^1.2.1: - version "1.5.2" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.5.2.tgz#00b423304f2500ac59359cc9b6844951f372d497" - integrity sha512-l60ETUTmLqbVbVHv1J4/qj+M8nq7AwMzEcg3kmJDt9dCNrTk+yHcYFf/Kw75pMDwd9mPcIGCG5LcS20SxYRzFA== - -esbuild@^0.19.3: - version "0.19.12" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.12.tgz#dc82ee5dc79e82f5a5c3b4323a2a641827db3e04" - integrity sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg== - optionalDependencies: - "@esbuild/aix-ppc64" "0.19.12" - "@esbuild/android-arm" "0.19.12" - "@esbuild/android-arm64" "0.19.12" - "@esbuild/android-x64" "0.19.12" - "@esbuild/darwin-arm64" "0.19.12" - "@esbuild/darwin-x64" "0.19.12" - "@esbuild/freebsd-arm64" "0.19.12" - "@esbuild/freebsd-x64" "0.19.12" - "@esbuild/linux-arm" "0.19.12" - "@esbuild/linux-arm64" "0.19.12" - "@esbuild/linux-ia32" "0.19.12" - "@esbuild/linux-loong64" "0.19.12" - "@esbuild/linux-mips64el" "0.19.12" - "@esbuild/linux-ppc64" "0.19.12" - "@esbuild/linux-riscv64" "0.19.12" - "@esbuild/linux-s390x" "0.19.12" - "@esbuild/linux-x64" "0.19.12" - "@esbuild/netbsd-x64" "0.19.12" - "@esbuild/openbsd-x64" "0.19.12" - "@esbuild/sunos-x64" "0.19.12" - "@esbuild/win32-arm64" "0.19.12" - "@esbuild/win32-ia32" "0.19.12" - "@esbuild/win32-x64" "0.19.12" - -escalade@^3.1.1, escalade@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" - integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== - -escape-string-regexp@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -escape-string-regexp@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escodegen@1.8.x: - version "1.8.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" - integrity sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A== - dependencies: - esprima "^2.7.1" - estraverse "^1.9.1" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.2.0" - -eslint-scope@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -esprima@2.7.x, esprima@^2.7.1: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - integrity sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A== - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^1.9.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" - integrity sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA== - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -eth-block-tracker@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/eth-block-tracker/-/eth-block-tracker-7.1.0.tgz#dfc16085c6817cc30caabba381deb8d204c1c766" - integrity sha512-8YdplnuE1IK4xfqpf4iU7oBxnOYAc35934o083G8ao+8WM8QQtt/mVlAY6yIAdY1eMeLqg4Z//PZjJGmWGPMRg== - dependencies: - "@metamask/eth-json-rpc-provider" "^1.0.0" - "@metamask/safe-event-emitter" "^3.0.0" - "@metamask/utils" "^5.0.1" - json-rpc-random-id "^1.0.1" - pify "^3.0.0" - -eth-gas-reporter@^0.2.25: - version "0.2.27" - resolved "https://registry.yarnpkg.com/eth-gas-reporter/-/eth-gas-reporter-0.2.27.tgz#928de8548a674ed64c7ba0bf5795e63079150d4e" - integrity sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw== - dependencies: - "@solidity-parser/parser" "^0.14.0" - axios "^1.5.1" - cli-table3 "^0.5.0" - colors "1.4.0" - ethereum-cryptography "^1.0.3" - ethers "^5.7.2" - fs-readdir-recursive "^1.1.0" - lodash "^4.17.14" - markdown-table "^1.1.3" - mocha "^10.2.0" - req-cwd "^2.0.0" - sha1 "^1.1.1" - sync-request "^6.0.0" - -eth-json-rpc-filters@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/eth-json-rpc-filters/-/eth-json-rpc-filters-6.0.1.tgz#0b3e370f017f5c6f58d3e7bd0756d8099ed85c56" - integrity sha512-ITJTvqoCw6OVMLs7pI8f4gG92n/St6x80ACtHodeS+IXmO0w+t1T5OOzfSt7KLSMLRkVUoexV7tztLgDxg+iig== - dependencies: - "@metamask/safe-event-emitter" "^3.0.0" - async-mutex "^0.2.6" - eth-query "^2.1.2" - json-rpc-engine "^6.1.0" - pify "^5.0.0" - -eth-query@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/eth-query/-/eth-query-2.1.2.tgz#d6741d9000106b51510c72db92d6365456a6da5e" - integrity sha512-srES0ZcvwkR/wd5OQBRA1bIJMww1skfGS0s8wlwK3/oNP4+wnds60krvu5R1QbpRQjMmpG5OMIWro5s7gvDPsA== - dependencies: - json-rpc-random-id "^1.0.0" - xtend "^4.0.1" - -eth-rpc-errors@^4.0.2, eth-rpc-errors@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/eth-rpc-errors/-/eth-rpc-errors-4.0.3.tgz#6ddb6190a4bf360afda82790bb7d9d5e724f423a" - integrity sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg== - dependencies: - fast-safe-stringify "^2.0.6" - -ethereum-bloom-filters@^1.0.6: - version "1.0.10" - resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a" - integrity sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA== - dependencies: - js-sha3 "^0.8.0" - -ethereum-cryptography@0.1.3, ethereum-cryptography@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" - integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== - dependencies: - "@types/pbkdf2" "^3.0.0" - "@types/secp256k1" "^4.0.1" - blakejs "^1.1.0" - browserify-aes "^1.2.0" - bs58check "^2.1.2" - create-hash "^1.2.0" - create-hmac "^1.1.7" - hash.js "^1.1.7" - keccak "^3.0.0" - pbkdf2 "^3.0.17" - randombytes "^2.1.0" - safe-buffer "^5.1.2" - scrypt-js "^3.0.0" - secp256k1 "^4.0.1" - setimmediate "^1.0.5" - -ethereum-cryptography@^1.0.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz#5ccfa183e85fdaf9f9b299a79430c044268c9b3a" - integrity sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw== - dependencies: - "@noble/hashes" "1.2.0" - "@noble/secp256k1" "1.7.1" - "@scure/bip32" "1.1.5" - "@scure/bip39" "1.1.1" - -ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz#1352270ed3b339fe25af5ceeadcf1b9c8e30768a" - integrity sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA== - dependencies: - "@noble/curves" "1.3.0" - "@noble/hashes" "1.3.3" - "@scure/bip32" "1.3.3" - "@scure/bip39" "1.2.2" - -ethereumjs-abi@^0.6.8: - version "0.6.8" - resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz#71bc152db099f70e62f108b7cdfca1b362c6fcae" - integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA== - dependencies: - bn.js "^4.11.8" - ethereumjs-util "^6.0.0" - -ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" - integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== - dependencies: - "@types/bn.js" "^4.11.3" - bn.js "^4.11.0" - create-hash "^1.1.2" - elliptic "^6.5.2" - ethereum-cryptography "^0.1.3" - ethjs-util "0.1.6" - rlp "^2.2.3" - -ethereumjs-util@^7.1.4: - version "7.1.5" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" - integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== - dependencies: - "@types/bn.js" "^5.1.0" - bn.js "^5.1.2" - create-hash "^1.1.2" - ethereum-cryptography "^0.1.3" - rlp "^2.2.4" - -ethers@^5.7.1, ethers@^5.7.2: - version "5.7.2" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" - integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== - dependencies: - "@ethersproject/abi" "5.7.0" - "@ethersproject/abstract-provider" "5.7.0" - "@ethersproject/abstract-signer" "5.7.0" - "@ethersproject/address" "5.7.0" - "@ethersproject/base64" "5.7.0" - "@ethersproject/basex" "5.7.0" - "@ethersproject/bignumber" "5.7.0" - "@ethersproject/bytes" "5.7.0" - "@ethersproject/constants" "5.7.0" - "@ethersproject/contracts" "5.7.0" - "@ethersproject/hash" "5.7.0" - "@ethersproject/hdnode" "5.7.0" - "@ethersproject/json-wallets" "5.7.0" - "@ethersproject/keccak256" "5.7.0" - "@ethersproject/logger" "5.7.0" - "@ethersproject/networks" "5.7.1" - "@ethersproject/pbkdf2" "5.7.0" - "@ethersproject/properties" "5.7.0" - "@ethersproject/providers" "5.7.2" - "@ethersproject/random" "5.7.0" - "@ethersproject/rlp" "5.7.0" - "@ethersproject/sha2" "5.7.0" - "@ethersproject/signing-key" "5.7.0" - "@ethersproject/solidity" "5.7.0" - "@ethersproject/strings" "5.7.0" - "@ethersproject/transactions" "5.7.0" - "@ethersproject/units" "5.7.0" - "@ethersproject/wallet" "5.7.0" - "@ethersproject/web" "5.7.1" - "@ethersproject/wordlists" "5.7.0" - -ethjs-unit@0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" - integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw== - dependencies: - bn.js "4.11.6" - number-to-bn "1.7.0" - -ethjs-util@0.1.6, ethjs-util@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" - integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== - dependencies: - is-hex-prefixed "1.0.0" - strip-hex-prefix "1.0.0" - -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - -eventemitter2@^6.4.7: - version "6.4.9" - resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.9.tgz#41f2750781b4230ed58827bc119d293471ecb125" - integrity sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg== - -eventemitter3@5.0.1, eventemitter3@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" - integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== - -events@3.3.0, events@^3.2.0, events@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -execa@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c" - integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^8.0.1" - human-signals "^5.0.0" - is-stream "^3.0.0" - merge-stream "^2.0.0" - npm-run-path "^5.1.0" - onetime "^6.0.0" - signal-exit "^4.1.0" - strip-final-newline "^3.0.0" - -extension-port-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/extension-port-stream/-/extension-port-stream-3.0.0.tgz#00a7185fe2322708a36ed24843c81bd754925fef" - integrity sha512-an2S5quJMiy5bnZKEf6AkfH/7r8CzHvhchU40gxN+OM6HPhe7Z9T1FUychcf2M9PpPOO0Hf7BAEfJkw2TDIBDw== - dependencies: - readable-stream "^3.6.2 || ^4.4.2" - webextension-polyfill ">=0.10.0 <1.0" - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-glob@^3.0.3: - version "3.3.2" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" - 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" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fast-redact@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.3.0.tgz#7c83ce3a7be4898241a46560d51de10f653f7634" - integrity sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ== - -fast-safe-stringify@^2.0.6: - version "2.1.1" - resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" - integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== - -fastest-levenshtein@^1.0.12: - version "1.0.16" - resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" - integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== - -fastq@^1.6.0: - version "1.17.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" - integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== - dependencies: - reusify "^1.0.4" - -fflate@^0.8.0: - version "0.8.2" - resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.8.2.tgz#fc8631f5347812ad6028bbe4a2308b2792aa1dea" - integrity sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A== - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -filter-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b" - integrity sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ== - -find-replace@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38" - integrity sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ== - dependencies: - array-back "^3.0.1" - -find-up@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== - dependencies: - locate-path "^2.0.0" - -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -flat@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" - integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== - -follow-redirects@^1.12.1, follow-redirects@^1.15.4: - version "1.15.5" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.5.tgz#54d4d6d062c0fa7d9d17feb008461550e3ba8020" - integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw== - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -form-data@^2.2.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" - integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -fp-ts@1.19.3: - version "1.19.3" - resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.3.tgz#261a60d1088fbff01f91256f91d21d0caaaaa96f" - integrity sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg== - -fp-ts@^1.0.0: - version "1.19.5" - resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a" - integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== - -fs-extra@^0.30.0: - version "0.30.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" - integrity sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" - path-is-absolute "^1.0.0" - rimraf "^2.2.8" - -fs-extra@^7.0.0, fs-extra@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-readdir-recursive@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" - integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@~2.3.2, fsevents@~2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== - -futoin-hkdf@^1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/futoin-hkdf/-/futoin-hkdf-1.5.3.tgz#6c8024f2e1429da086d4e18289ef2239ad33ee35" - integrity sha512-SewY5KdMpaoCeh7jachEWFsh1nNlaDjNHZXWqL5IGwtpEYHTgkr2+AMCgNwKWkcc0wpSYrZfR7he4WdmHFtDxQ== - -get-caller-file@^2.0.1, get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-func-name@^2.0.1, get-func-name@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" - integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== - -get-intrinsic@^1.1.3, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - -get-port-please@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/get-port-please/-/get-port-please-3.1.2.tgz#502795e56217128e4183025c89a48c71652f4e49" - integrity sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ== - -get-port@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" - integrity sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg== - -get-stream@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2" - integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== - -ghost-testrpc@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz#c4de9557b1d1ae7b2d20bbe474a91378ca90ce92" - integrity sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ== - dependencies: - chalk "^2.4.2" - node-emoji "^1.10.0" - -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-to-regexp@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" - integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== - -glob@7.1.7: - version "7.1.7" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" - integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - -glob@^5.0.15: - version "5.0.15" - resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" - integrity sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA== - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.0.0, glob@^7.1.3: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -global-modules@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" - integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== - dependencies: - global-prefix "^3.0.0" - -global-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" - integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== - dependencies: - ini "^1.3.5" - kind-of "^6.0.2" - which "^1.3.1" - -globby@^10.0.1: - version "10.0.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" - integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg== - dependencies: - "@types/glob" "^7.1.1" - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.0.3" - glob "^7.1.3" - ignore "^5.1.1" - merge2 "^1.2.3" - slash "^3.0.0" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -h3@^1.10.1, h3@^1.8.2: - version "1.10.1" - resolved "https://registry.yarnpkg.com/h3/-/h3-1.10.1.tgz#221634ca9bdb216a6b359bd2915be466a179b8a1" - integrity sha512-UBAUp47hmm4BB5/njB4LrEa9gpuvZj4/Qf/ynSMzO6Ku2RXaouxEfiG2E2IFnv6fxbhAkzjasDxmo6DFdEeXRg== - dependencies: - cookie-es "^1.0.0" - defu "^6.1.4" - destr "^2.0.2" - iron-webcrypto "^1.0.0" - ohash "^1.1.3" - radix3 "^1.1.0" - ufo "^1.3.2" - uncrypto "^0.1.3" - unenv "^1.9.0" - -handlebars@^4.0.1: - version "4.7.8" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" - integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== - dependencies: - minimist "^1.2.5" - neo-async "^2.6.2" - source-map "^0.6.1" - wordwrap "^1.0.0" - optionalDependencies: - uglify-js "^3.1.4" - -hardhat-gas-reporter@^1.0.9: - version "1.0.10" - resolved "https://registry.yarnpkg.com/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.10.tgz#ebe5bda5334b5def312747580cd923c2b09aef1b" - integrity sha512-02N4+So/fZrzJ88ci54GqwVA3Zrf0C9duuTyGt0CFRIh/CdNwbnTgkXkRfojOMLBQ+6t+lBIkgbsOtqMvNwikA== - dependencies: - array-uniq "1.0.3" - eth-gas-reporter "^0.2.25" - sha1 "^1.1.1" - -hardhat@^2.19.2: - version "2.19.5" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.19.5.tgz#6017c35ae2844b669e9bcc84c3d05346d4ef031c" - integrity sha512-vx8R7zWCYVgM56vA6o0Wqx2bIIptkN4TMs9QwDqZVNGRhMzBfzqUeEYbp+69gxWp1neg2V2nYQUaaUv7aom1kw== - dependencies: - "@ethersproject/abi" "^5.1.2" - "@metamask/eth-sig-util" "^4.0.0" - "@nomicfoundation/ethereumjs-block" "5.0.2" - "@nomicfoundation/ethereumjs-blockchain" "7.0.2" - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-evm" "2.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-statemanager" "2.0.2" - "@nomicfoundation/ethereumjs-trie" "6.0.2" - "@nomicfoundation/ethereumjs-tx" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" - "@nomicfoundation/ethereumjs-vm" "7.0.2" - "@nomicfoundation/solidity-analyzer" "^0.1.0" - "@sentry/node" "^5.18.1" - "@types/bn.js" "^5.1.0" - "@types/lru-cache" "^5.1.0" - adm-zip "^0.4.16" - aggregate-error "^3.0.0" - ansi-escapes "^4.3.0" - boxen "^5.1.2" - chalk "^2.4.2" - chokidar "^3.4.0" - ci-info "^2.0.0" - debug "^4.1.1" - enquirer "^2.3.0" - env-paths "^2.2.0" - ethereum-cryptography "^1.0.3" - ethereumjs-abi "^0.6.8" - find-up "^2.1.0" - fp-ts "1.19.3" - fs-extra "^7.0.1" - glob "7.2.0" - immutable "^4.0.0-rc.12" - io-ts "1.10.4" - keccak "^3.0.2" - lodash "^4.17.11" - mnemonist "^0.38.0" - mocha "^10.0.0" - p-map "^4.0.0" - raw-body "^2.4.1" - resolve "1.17.0" - semver "^6.3.0" - solc "0.7.3" - source-map-support "^0.5.13" - stacktrace-parser "^0.1.10" - tsort "0.0.1" - undici "^5.14.0" - uuid "^8.3.2" - ws "^7.4.6" - -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - integrity sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" - integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - dependencies: - es-define-property "^1.0.0" - -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== - -has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0, has-tostringtag@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" - integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== - dependencies: - has-symbols "^1.0.3" - -hash-base@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" - integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== - dependencies: - inherits "^2.0.4" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -hasown@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.1.tgz#26f48f039de2c0f8d3356c223fb8d50253519faa" - integrity sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA== - dependencies: - function-bind "^1.1.2" - -he@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -"heap@>= 0.2.0": - version "0.2.7" - resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.7.tgz#1e6adf711d3f27ce35a81fe3b7bd576c2260a8fc" - integrity sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg== - -hey-listen@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/hey-listen/-/hey-listen-1.0.8.tgz#8e59561ff724908de1aa924ed6ecc84a56a9aa68" - integrity sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q== - -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -http-basic@^8.1.1: - version "8.1.3" - resolved "https://registry.yarnpkg.com/http-basic/-/http-basic-8.1.3.tgz#a7cabee7526869b9b710136970805b1004261bbf" - integrity sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw== - dependencies: - caseless "^0.12.0" - concat-stream "^1.6.2" - http-response-object "^3.0.1" - parse-cache-control "^1.0.1" - -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - 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" - -http-response-object@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/http-response-object/-/http-response-object-3.0.2.tgz#7f435bb210454e4360d074ef1f989d5ea8aa9810" - integrity sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA== - dependencies: - "@types/node" "^10.0.3" - -http-shutdown@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/http-shutdown/-/http-shutdown-1.2.2.tgz#41bc78fc767637c4c95179bc492f312c0ae64c5f" - integrity sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw== - -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -human-signals@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28" - integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== - -i18next-browser-languagedetector@7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/i18next-browser-languagedetector/-/i18next-browser-languagedetector-7.1.0.tgz#01876fac51f86b78975e79b48ccb62e2313a2d7d" - integrity sha512-cr2k7u1XJJ4HTOjM9GyOMtbOA47RtUoWRAtt52z43r3AoMs2StYKyjS3URPhzHaf+mn10hY9dZWamga5WPQjhA== - dependencies: - "@babel/runtime" "^7.19.4" - -i18next@22.5.1: - version "22.5.1" - resolved "https://registry.yarnpkg.com/i18next/-/i18next-22.5.1.tgz#99df0b318741a506000c243429a7352e5f44d424" - integrity sha512-8TGPgM3pAD+VRsMtUMNknRz3kzqwp/gPALrWMsDnmC1mKqJwpWyooQRLMcbTwq8z8YwSmuj+ZYvc+xCuEpkssA== - dependencies: - "@babel/runtime" "^7.20.6" - -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -idb-keyval@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/idb-keyval/-/idb-keyval-6.2.1.tgz#94516d625346d16f56f3b33855da11bfded2db33" - integrity sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg== - -ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore@^5.1.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" - integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== - -immutable@^4.0.0-rc.12: - version "4.3.5" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.5.tgz#f8b436e66d59f99760dc577f5c99a4fd2a5cc5a0" - integrity sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw== - -import-local@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@^1.3.5: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -interpret@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== - -interpret@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" - integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== - -invariant@2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== - dependencies: - loose-envify "^1.0.0" - -io-ts@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2" - integrity sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g== - dependencies: - fp-ts "^1.0.0" - -ioredis@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-5.3.2.tgz#9139f596f62fc9c72d873353ac5395bcf05709f7" - integrity sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA== - dependencies: - "@ioredis/commands" "^1.1.1" - cluster-key-slot "^1.1.0" - debug "^4.3.4" - denque "^2.1.0" - lodash.defaults "^4.2.0" - lodash.isarguments "^3.1.0" - redis-errors "^1.2.0" - redis-parser "^3.0.0" - standard-as-callback "^2.1.0" - -iron-webcrypto@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/iron-webcrypto/-/iron-webcrypto-1.0.0.tgz#e3b689c0c61b434a0a4cb82d0aeabbc8b672a867" - integrity sha512-anOK1Mktt8U1Xi7fCM3RELTuYbnFikQY5VtrDj7kPgpejV7d43tWKhzgioO0zpkazLEL/j/iayRqnJhrGfqUsg== - -is-arguments@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-buffer@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== - -is-callable@^1.1.3: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-core-module@^2.13.0: - version "2.13.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" - integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== - dependencies: - hasown "^2.0.0" - -is-docker@^2.0.0, is-docker@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-docker@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" - integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-generator-function@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== - dependencies: - has-tostringtag "^1.0.0" - -is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-hex-prefixed@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" - integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== - -is-inside-container@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" - integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== - dependencies: - is-docker "^3.0.0" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-plain-obj@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" - integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== - -is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" - integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== - -is-typed-array@^1.1.3: - version "1.1.13" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" - integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== - dependencies: - which-typed-array "^1.1.14" - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -is-wsl@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-3.1.0.tgz#e1c657e39c10090afcbedec61720f6b924c3cbd2" - integrity sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw== - dependencies: - is-inside-container "^1.0.0" - -is64bit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is64bit/-/is64bit-2.0.0.tgz#198c627cbcb198bbec402251f88e5e1a51236c07" - integrity sha512-jv+8jaWCl0g2lSBkNSVXdzfBA0npK1HGC2KtWM9FumFRoGS94g3NbCCLVnCYHLjp4GrW2KZeeSTMo5ddtznmGw== - dependencies: - system-architecture "^0.1.0" - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - -isomorphic-unfetch@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz#87341d5f4f7b63843d468438128cb087b7c3e98f" - integrity sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q== - dependencies: - node-fetch "^2.6.1" - unfetch "^4.2.0" - -isows@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.3.tgz#93c1cf0575daf56e7120bab5c8c448b0809d0d74" - integrity sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg== - -jest-worker@^27.4.5: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" - integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jiti@^1.21.0: - version "1.21.0" - resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d" - integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== - -js-sdsl@^4.1.4: - version "4.4.2" - resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.2.tgz#2e3c031b1f47d3aca8b775532e3ebb0818e7f847" - integrity sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w== - -js-sha3@0.8.0, js-sha3@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" - integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== - -"js-tokens@^3.0.0 || ^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@3.x: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -json-parse-even-better-errors@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-rpc-engine@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/json-rpc-engine/-/json-rpc-engine-6.1.0.tgz#bf5ff7d029e1c1bf20cb6c0e9f348dcd8be5a393" - integrity sha512-NEdLrtrq1jUZyfjkr9OCz9EzCNhnRyWtt1PAnvnhwy6e8XETS0Dtc+ZNCO2gvuAoKsIn2+vCSowXTYE4CkgnAQ== - dependencies: - "@metamask/safe-event-emitter" "^2.0.0" - eth-rpc-errors "^4.0.2" - -json-rpc-random-id@^1.0.0, json-rpc-random-id@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz#ba49d96aded1444dbb8da3d203748acbbcdec8c8" - integrity sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -jsonc-parser@^3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.1.tgz#031904571ccf929d7670ee8c547545081cb37f1a" - integrity sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA== - -jsonfile@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" - integrity sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw== - optionalDependencies: - graceful-fs "^4.1.6" - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== - optionalDependencies: - graceful-fs "^4.1.6" - -jsonschema@^1.2.4: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.1.tgz#cc4c3f0077fb4542982973d8a083b6b34f482dab" - integrity sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ== - -keccak@^3.0.0, keccak@^3.0.2, keccak@^3.0.3: - version "3.0.4" - resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.4.tgz#edc09b89e633c0549da444432ecf062ffadee86d" - integrity sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q== - dependencies: - node-addon-api "^2.0.0" - node-gyp-build "^4.2.0" - readable-stream "^3.6.0" - -keyvaluestorage-interface@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/keyvaluestorage-interface/-/keyvaluestorage-interface-1.0.0.tgz#13ebdf71f5284ad54be94bd1ad9ed79adad515ff" - integrity sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g== - -kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -klaw@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" - integrity sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw== - optionalDependencies: - graceful-fs "^4.1.9" - -level-supports@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-4.0.1.tgz#431546f9d81f10ff0fea0e74533a0e875c08c66a" - integrity sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA== - -level-transcoder@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/level-transcoder/-/level-transcoder-1.0.1.tgz#f8cef5990c4f1283d4c86d949e73631b0bc8ba9c" - integrity sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w== - dependencies: - buffer "^6.0.3" - module-error "^1.0.1" - -level@^8.0.0: - version "8.0.1" - resolved "https://registry.yarnpkg.com/level/-/level-8.0.1.tgz#737161db1bc317193aca4e7b6f436e7e1df64379" - integrity sha512-oPBGkheysuw7DmzFQYyFe8NAia5jFLAgEnkgWnK3OXAuJr8qFT+xBQIwokAZPME2bhPFzS8hlYcL16m8UZrtwQ== - dependencies: - abstract-level "^1.0.4" - browser-level "^1.0.1" - classic-level "^1.2.0" - -levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -listhen@^1.5.5: - version "1.6.0" - resolved "https://registry.yarnpkg.com/listhen/-/listhen-1.6.0.tgz#df26c527c59b87557be4d0408d4a09626bd946c8" - integrity sha512-z0RcEXVX5oTpY1bO02SKoTU/kmZSrFSngNNzHRM6KICR17PTq7ANush6AE6ztGJwJD4RLpBrVHd9GnV51J7s3w== - dependencies: - "@parcel/watcher" "^2.4.0" - "@parcel/watcher-wasm" "2.4.0" - citty "^0.1.5" - clipboardy "^4.0.0" - consola "^3.2.3" - crossws "^0.1.0" - defu "^6.1.4" - get-port-please "^3.1.2" - h3 "^1.10.1" - http-shutdown "^1.2.2" - jiti "^1.21.0" - mlly "^1.5.0" - node-forge "^1.3.1" - pathe "^1.1.2" - std-env "^3.7.0" - ufo "^1.3.2" - untun "^0.1.3" - uqr "^0.1.2" - -lit-element@^3.3.0: - version "3.3.3" - resolved "https://registry.yarnpkg.com/lit-element/-/lit-element-3.3.3.tgz#10bc19702b96ef5416cf7a70177255bfb17b3209" - integrity sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA== - dependencies: - "@lit-labs/ssr-dom-shim" "^1.1.0" - "@lit/reactive-element" "^1.3.0" - lit-html "^2.8.0" - -lit-html@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/lit-html/-/lit-html-2.8.0.tgz#96456a4bb4ee717b9a7d2f94562a16509d39bffa" - integrity sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q== - dependencies: - "@types/trusted-types" "^2.0.2" - -lit@2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/lit/-/lit-2.8.0.tgz#4d838ae03059bf9cafa06e5c61d8acc0081e974e" - integrity sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA== - dependencies: - "@lit/reactive-element" "^1.6.0" - lit-element "^3.3.0" - lit-html "^2.8.0" - -loader-runner@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" - integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== - -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== - -lodash.defaults@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== - -lodash.isarguments@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== - -lodash.isequal@4.5.0, lodash.isequal@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" - integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== - -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== - -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== - -lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -loose-envify@^1.0.0, loose-envify@^1.1.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -loupe@^2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697" - integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== - dependencies: - get-func-name "^2.0.1" - -lru-cache@^10.0.2: - version "10.2.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" - integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -lru_map@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" - integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== - -make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -markdown-table@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60" - integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q== - -mcl-wasm@^0.7.1: - version "0.7.9" - resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.9.tgz#c1588ce90042a8700c3b60e40efb339fc07ab87f" - integrity sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ== - -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -memory-level@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/memory-level/-/memory-level-1.0.0.tgz#7323c3fd368f9af2f71c3cd76ba403a17ac41692" - integrity sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og== - dependencies: - abstract-level "^1.0.0" - functional-red-black-tree "^1.0.1" - module-error "^1.0.1" - -memorystream@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" - integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.2.3, merge2@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micro-ftch@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/micro-ftch/-/micro-ftch-0.3.1.tgz#6cb83388de4c1f279a034fb0cf96dfc050853c5f" - integrity sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg== - -micromatch@^4.0.4, micromatch@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12, mime-types@^2.1.27: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" - integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== - -mimic-fn@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" - integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== - -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== - -"minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" - integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^5.0.1: - version "5.1.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" - integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== - dependencies: - brace-expansion "^2.0.1" - -minimist@^1.2.5, minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -mipd@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/mipd/-/mipd-0.0.5.tgz#367ee796531c23f0631f129038700b1406663aec" - integrity sha512-gbKA784D2WKb5H/GtqEv+Ofd1S9Zj+Z/PGDIl1u1QAbswkxD28BQ5bSXQxkeBzPBABg1iDSbiwGG1XqlOxRspA== - dependencies: - viem "^1.1.4" - -mkdirp@0.5.x: - version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - -mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -mlly@^1.2.0, mlly@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.5.0.tgz#8428a4617d54cc083d3009030ac79739a0e5447a" - 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" - -mnemonist@^0.38.0: - version "0.38.5" - resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.5.tgz#4adc7f4200491237fe0fa689ac0b86539685cade" - integrity sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg== - dependencies: - obliterator "^2.0.0" - -mocha@^10.0.0, mocha@^10.2.0: - version "10.3.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.3.0.tgz#0e185c49e6dccf582035c05fa91084a4ff6e3fe9" - integrity sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg== - dependencies: - ansi-colors "4.1.1" - browser-stdout "1.3.1" - chokidar "3.5.3" - debug "4.3.4" - diff "5.0.0" - escape-string-regexp "4.0.0" - find-up "5.0.0" - glob "8.1.0" - he "1.2.0" - js-yaml "4.1.0" - log-symbols "4.1.0" - minimatch "5.0.1" - ms "2.1.3" - serialize-javascript "6.0.0" - strip-json-comments "3.1.1" - supports-color "8.1.1" - workerpool "6.2.1" - yargs "16.2.0" - yargs-parser "20.2.4" - yargs-unparser "2.0.0" - -module-error@^1.0.1, module-error@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/module-error/-/module-error-1.0.2.tgz#8d1a48897ca883f47a45816d4fb3e3c6ba404d86" - integrity sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA== - -motion@10.16.2: - version "10.16.2" - resolved "https://registry.yarnpkg.com/motion/-/motion-10.16.2.tgz#7dc173c6ad62210a7e9916caeeaf22c51e598d21" - integrity sha512-p+PurYqfUdcJZvtnmAqu5fJgV2kR0uLFQuBKtLeFVTrYEVllI99tiOTSefVNYuip9ELTEkepIIDftNdze76NAQ== - dependencies: - "@motionone/animation" "^10.15.1" - "@motionone/dom" "^10.16.2" - "@motionone/svelte" "^10.16.2" - "@motionone/types" "^10.15.1" - "@motionone/utils" "^10.15.1" - "@motionone/vue" "^10.16.2" - -mri@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" - integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -multiformats@^9.4.2: - version "9.9.0" - resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-9.9.0.tgz#c68354e7d21037a8f1f8833c8ccd68618e8f1d37" - integrity sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg== - -nanoid@^3.3.7: - version "3.3.7" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" - integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== - -napi-macros@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.2.2.tgz#817fef20c3e0e40a963fbf7b37d1600bd0201044" - integrity sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g== - -napi-wasm@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/napi-wasm/-/napi-wasm-1.1.0.tgz#bbe617823765ae9c1bc12ff5942370eae7b2ba4e" - integrity sha512-lHwIAJbmLSjF9VDRm9GoVOy9AGp3aIvkjv+Kvz9h16QR3uSVYH78PNQUnT2U4X53mhlnV2M7wrhibQ3GHicDmg== - -neo-async@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -node-addon-api@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" - integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== - -node-addon-api@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.1.0.tgz#49da1ca055e109a23d537e9de43c09cca21eb762" - integrity sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA== - -node-addon-api@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.0.tgz#71f609369379c08e251c558527a107107b5e0fdb" - integrity sha512-mNcltoe1R8o7STTegSOHdnJNN7s5EUvhoS7ShnTHDyOSd+8H+UdWODq6qSv67PjC8Zc5JRT8+oLAMCr0SIXw7g== - -node-emoji@^1.10.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" - integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== - dependencies: - lodash "^4.17.21" - -node-fetch-native@^1.4.0, node-fetch-native@^1.4.1, node-fetch-native@^1.6.1: - version "1.6.2" - resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.6.2.tgz#f439000d972eb0c8a741b65dcda412322955e1c6" - integrity sha512-69mtXOFZ6hSkYiXAVB5SqaRvrbITC/NPyqv7yuu/qw0nmgPyYbIMYYNIDhNtwPrzk0ptrimrLz/hhjvm4w5Z+w== - -node-fetch@^2.6.1, node-fetch@^2.6.12: - version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - -node-forge@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" - integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== - -node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: - version "4.8.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.0.tgz#3fee9c1731df4581a3f9ead74664369ff00d26dd" - integrity sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og== - -node-releases@^2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" - integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== - -nofilter@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-3.1.0.tgz#c757ba68801d41ff930ba2ec55bab52ca184aa66" - integrity sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g== - -nopt@3.x: - version "3.0.6" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" - integrity sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg== - dependencies: - abbrev "1" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -npm-run-path@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.2.0.tgz#224cdd22c755560253dd71b83a1ef2f758b2e955" - integrity sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg== - dependencies: - path-key "^4.0.0" - -number-to-bn@1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" - integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig== - dependencies: - bn.js "4.11.6" - strip-hex-prefix "1.0.0" - -obj-multiplex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/obj-multiplex/-/obj-multiplex-1.0.0.tgz#2f2ae6bfd4ae11befe742ea9ea5b36636eabffc1" - integrity sha512-0GNJAOsHoBHeNTvl5Vt6IWnpUEcc3uSRxzBri7EDyIcMgYvnY2JL2qdeV5zTMjWQX5OHcD5amcW2HFfDh0gjIA== - dependencies: - end-of-stream "^1.4.0" - once "^1.4.0" - readable-stream "^2.3.3" - -object-assign@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-inspect@^1.13.1: - version "1.13.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" - integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== - -obliterator@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.4.tgz#fa650e019b2d075d745e44f1effeb13a2adbe816" - integrity sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ== - -ofetch@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/ofetch/-/ofetch-1.3.3.tgz#588cb806a28e5c66c2c47dd8994f9059a036d8c0" - integrity sha512-s1ZCMmQWXy4b5K/TW9i/DtiN8Ku+xCiHcjQ6/J/nDdssirrQNOoB165Zu8EqLMA2lln1JUth9a0aW9Ap2ctrUg== - dependencies: - destr "^2.0.1" - node-fetch-native "^1.4.0" - ufo "^1.3.0" - -ohash@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/ohash/-/ohash-1.1.3.tgz#f12c3c50bfe7271ce3fd1097d42568122ccdcf07" - integrity sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw== - -on-exit-leak-free@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz#b39c9e3bf7690d890f4861558b0d7b90a442d209" - integrity sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg== - -once@1.x, once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -onetime@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" - integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== - dependencies: - mimic-fn "^4.0.0" - -open@^8.4.0: - version "8.4.2" - resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" - integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== - dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" - -optionator@^0.8.1: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - -ordinal@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/ordinal/-/ordinal-1.0.3.tgz#1a3c7726a61728112f50944ad7c35c06ae3a0d4d" - integrity sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ== - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - -p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== - dependencies: - p-limit "^1.1.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -pako@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/pako/-/pako-2.1.0.tgz#266cc37f98c7d883545d11335c00fbd4062c9a86" - integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug== - -parse-cache-control@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parse-cache-control/-/parse-cache-control-1.0.1.tgz#8eeab3e54fa56920fe16ba38f77fa21aacc2d74e" - integrity sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg== - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-key@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" - integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== - -path-parse@^1.0.6, path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pathe@^1.1.0, pathe@^1.1.1, pathe@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" - integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== - -pathval@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" - integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== - -pbkdf2@^3.0.17: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" - integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picocolors@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" - integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" - integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== - -pino-abstract-transport@v0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-0.5.0.tgz#4b54348d8f73713bfd14e3dc44228739aa13d9c0" - integrity sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ== - dependencies: - duplexify "^4.1.2" - split2 "^4.0.0" - -pino-std-serializers@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz#1791ccd2539c091ae49ce9993205e2cd5dbba1e2" - integrity sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q== - -pino@7.11.0: - version "7.11.0" - resolved "https://registry.yarnpkg.com/pino/-/pino-7.11.0.tgz#0f0ea5c4683dc91388081d44bff10c83125066f6" - integrity sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg== - dependencies: - atomic-sleep "^1.0.0" - fast-redact "^3.0.0" - on-exit-leak-free "^0.2.0" - pino-abstract-transport v0.5.0 - pino-std-serializers "^4.0.0" - process-warning "^1.0.0" - quick-format-unescaped "^4.0.3" - real-require "^0.1.0" - safe-stable-stringify "^2.1.0" - sonic-boom "^2.2.1" - thread-stream "^0.15.1" - -pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -pkg-types@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.0.3.tgz#988b42ab19254c01614d13f4f65a2cfc7880f868" - integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== - dependencies: - jsonc-parser "^3.2.0" - mlly "^1.2.0" - pathe "^1.1.0" - -pngjs@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-5.0.0.tgz#e79dd2b215767fd9c04561c01236df960bce7fbb" - integrity sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw== - -pony-cause@^2.1.10: - version "2.1.11" - resolved "https://registry.yarnpkg.com/pony-cause/-/pony-cause-2.1.11.tgz#d69a20aaccdb3bdb8f74dd59e5c68d8e6772e4bd" - integrity sha512-M7LhCsdNbNgiLYiP4WjsfLUuFmCfnjdF6jKe2R9NKl4WFN+HZPGHJZ9lnLP7f9ZnKe3U9nuWD0szirmj+migUg== - -postcss@^8.4.35: - version "8.4.35" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.35.tgz#60997775689ce09011edf083a549cea44aabe2f7" - integrity sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA== - dependencies: - nanoid "^3.3.7" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -preact@^10.16.0: - version "10.21.0" - resolved "https://registry.yarnpkg.com/preact/-/preact-10.21.0.tgz#5b0335c873a1724deb66e517830db4fd310c24f6" - integrity sha512-aQAIxtzWEwH8ou+OovWVSVNlFImL7xUCwJX3YMqA3U8iKCNC34999fFOnWjYNsylgfPgMexpbk7WYOLtKr/mxg== - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== - -prettier@^2.3.1: - version "2.8.8" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" - integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -process-warning@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-1.0.0.tgz#980a0b25dc38cd6034181be4b7726d89066b4616" - integrity sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q== - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - -promise@^8.0.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/promise/-/promise-8.3.0.tgz#8cb333d1edeb61ef23869fbb8a4ea0279ab60e0a" - integrity sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg== - dependencies: - asap "~2.0.6" - -proxy-compare@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/proxy-compare/-/proxy-compare-2.5.1.tgz#17818e33d1653fbac8c2ec31406bce8a2966f600" - integrity sha512-oyfc0Tx87Cpwva5ZXezSp5V9vht1c7dZBhvuV/y3ctkgMVUmiAGDVeeB0dKhGSyT0v1ZTEQYpe/RXlBVBNuCLA== - -proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@^2.1.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" - integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== - -qr-code-styling@^1.6.0-rc.1: - version "1.6.0-rc.1" - resolved "https://registry.yarnpkg.com/qr-code-styling/-/qr-code-styling-1.6.0-rc.1.tgz#6c89e185fa50cc9135101085c12ae95b06f1b290" - integrity sha512-ModRIiW6oUnsP18QzrRYZSc/CFKFKIdj7pUs57AEVH20ajlglRpN3HukjHk0UbNMTlKGuaYl7Gt6/O5Gg2NU2Q== - dependencies: - qrcode-generator "^1.4.3" - -qrcode-generator@^1.4.3: - version "1.4.4" - resolved "https://registry.yarnpkg.com/qrcode-generator/-/qrcode-generator-1.4.4.tgz#63f771224854759329a99048806a53ed278740e7" - integrity sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw== - -qrcode-terminal-nooctal@^0.12.1: - version "0.12.1" - resolved "https://registry.yarnpkg.com/qrcode-terminal-nooctal/-/qrcode-terminal-nooctal-0.12.1.tgz#45016aca0d82b2818de7af0a06d072ad671fbe2e" - integrity sha512-jy/kkD0iIMDjTucB+5T6KBsnirlhegDH47vHgrj5MejchSQmi/EAMM0xMFeePgV9CJkkAapNakpVUWYgHvtdKg== - -qrcode@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/qrcode/-/qrcode-1.5.3.tgz#03afa80912c0dccf12bc93f615a535aad1066170" - integrity sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg== - dependencies: - dijkstrajs "^1.0.1" - encode-utf8 "^1.0.3" - pngjs "^5.0.0" - yargs "^15.3.1" - -qs@^6.4.0: - version "6.11.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" - integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== - dependencies: - side-channel "^1.0.4" - -query-string@7.1.3: - version "7.1.3" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-7.1.3.tgz#a1cf90e994abb113a325804a972d98276fe02328" - integrity sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg== - dependencies: - decode-uri-component "^0.2.2" - filter-obj "^1.1.0" - split-on-first "^1.0.0" - strict-uri-encode "^2.0.0" - -queue-microtask@^1.2.2, queue-microtask@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -quick-format-unescaped@^4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz#93ef6dd8d3453cbc7970dd614fad4c5954d6b5a7" - integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== - -radix3@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/radix3/-/radix3-1.1.0.tgz#9745df67a49c522e94a33d0a93cf743f104b6e0d" - integrity sha512-pNsHDxbGORSvuSScqNJ+3Km6QAVqk8CfsCBIEoDgpqLrkD2f3QM4I7d1ozJJ172OmIcoUcerZaNWqtLkRXTV3A== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -raw-body@^2.4.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" - integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -react-dom@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" - integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== - dependencies: - loose-envify "^1.1.0" - scheduler "^0.23.0" - -react-native-webview@^11.26.0: - version "11.26.1" - resolved "https://registry.yarnpkg.com/react-native-webview/-/react-native-webview-11.26.1.tgz#658c09ed5162dc170b361e48c2dd26c9712879da" - integrity sha512-hC7BkxOpf+z0UKhxFSFTPAM4shQzYmZHoELa6/8a/MspcjEP7ukYKpuSUTLDywQditT8yI9idfcKvfZDKQExGw== - dependencies: - escape-string-regexp "2.0.0" - invariant "2.2.4" - -react-toastify@^9.1.1: - version "9.1.3" - resolved "https://registry.yarnpkg.com/react-toastify/-/react-toastify-9.1.3.tgz#1e798d260d606f50e0fab5ee31daaae1d628c5ff" - integrity sha512-fPfb8ghtn/XMxw3LkxQBk3IyagNpF/LIKjOBflbexr2AWxAH1MJgvnESwEwBn9liLFXgTKWgBSdZpw9m4OTHTg== - dependencies: - clsx "^1.1.1" - -react@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" - integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== - dependencies: - loose-envify "^1.1.0" - -readable-stream@^2.2.2, readable-stream@^2.3.3: - version "2.3.8" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.1.1, readable-stream@^3.6.0, readable-stream@^3.6.2: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -"readable-stream@^3.6.2 || ^4.4.2": - version "4.5.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.5.2.tgz#9e7fc4c45099baeed934bff6eb97ba6cf2729e09" - integrity sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g== - dependencies: - abort-controller "^3.0.0" - buffer "^6.0.3" - events "^3.3.0" - process "^0.11.10" - string_decoder "^1.3.0" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -real-require@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.1.0.tgz#736ac214caa20632847b7ca8c1056a0767df9381" - integrity sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg== - -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== - dependencies: - resolve "^1.1.6" - -rechoir@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" - integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ== - dependencies: - resolve "^1.20.0" - -recursive-readdir@^2.2.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.3.tgz#e726f328c0d69153bcabd5c322d3195252379372" - integrity sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA== - dependencies: - minimatch "^3.0.5" - -redis-errors@^1.0.0, redis-errors@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad" - integrity sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w== - -redis-parser@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4" - integrity sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A== - dependencies: - redis-errors "^1.0.0" - -reduce-flatten@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-2.0.0.tgz#734fd84e65f375d7ca4465c69798c25c9d10ae27" - integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w== - -regenerator-runtime@^0.14.0: - version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" - integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== - -req-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/req-cwd/-/req-cwd-2.0.0.tgz#d4082b4d44598036640fb73ddea01ed53db49ebc" - integrity sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ== - dependencies: - req-from "^2.0.0" - -req-from@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/req-from/-/req-from-2.0.0.tgz#d74188e47f93796f4aa71df6ee35ae689f3e0e70" - integrity sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA== - dependencies: - resolve-from "^3.0.0" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -require-from-string@^2.0.0, require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw== - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve@1.1.x: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - integrity sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg== - -resolve@1.17.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== - dependencies: - path-parse "^1.0.6" - -resolve@^1.1.6, resolve@^1.20.0: - version "1.22.8" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^2.2.8: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -rlp@^2.2.3, rlp@^2.2.4: - version "2.2.7" - resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" - integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== - dependencies: - bn.js "^5.2.0" - -rollup-plugin-visualizer@^5.9.2: - version "5.12.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.12.0.tgz#661542191ce78ee4f378995297260d0c1efb1302" - integrity sha512-8/NU9jXcHRs7Nnj07PF2o4gjxmm9lXIrZ8r175bT9dK8qoLlvKTwRMArRCMgpMGlq8CTLugRvEmyMeMXIU2pNQ== - dependencies: - open "^8.4.0" - picomatch "^2.3.1" - source-map "^0.7.4" - yargs "^17.5.1" - -rollup@^4.2.0: - version "4.10.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.10.0.tgz#244c2cb54a8de004a949fe6036a0801be9060456" - integrity sha512-t2v9G2AKxcQ8yrG+WGxctBes1AomT0M4ND7jTFBCVPXQ/WFTvNSefIrNSmLKhIKBrvN8SG+CZslimJcT3W2u2g== - dependencies: - "@types/estree" "1.0.5" - optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.10.0" - "@rollup/rollup-android-arm64" "4.10.0" - "@rollup/rollup-darwin-arm64" "4.10.0" - "@rollup/rollup-darwin-x64" "4.10.0" - "@rollup/rollup-linux-arm-gnueabihf" "4.10.0" - "@rollup/rollup-linux-arm64-gnu" "4.10.0" - "@rollup/rollup-linux-arm64-musl" "4.10.0" - "@rollup/rollup-linux-riscv64-gnu" "4.10.0" - "@rollup/rollup-linux-x64-gnu" "4.10.0" - "@rollup/rollup-linux-x64-musl" "4.10.0" - "@rollup/rollup-win32-arm64-msvc" "4.10.0" - "@rollup/rollup-win32-ia32-msvc" "4.10.0" - "@rollup/rollup-win32-x64-msvc" "4.10.0" - fsevents "~2.3.2" - -run-parallel-limit@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz#be80e936f5768623a38a963262d6bef8ff11e7ba" - integrity sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw== - dependencies: - queue-microtask "^1.2.2" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -rustbn.js@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" - integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== - -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-stable-stringify@^2.1.0: - version "2.4.3" - resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" - integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== - -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sc-istanbul@^0.4.5: - version "0.4.6" - resolved "https://registry.yarnpkg.com/sc-istanbul/-/sc-istanbul-0.4.6.tgz#cf6784355ff2076f92d70d59047d71c13703e839" - integrity sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g== - dependencies: - abbrev "1.0.x" - async "1.x" - escodegen "1.8.x" - esprima "2.7.x" - glob "^5.0.15" - handlebars "^4.0.1" - js-yaml "3.x" - mkdirp "0.5.x" - nopt "3.x" - once "1.x" - resolve "1.1.x" - supports-color "^3.1.0" - which "^1.1.1" - wordwrap "^1.0.0" - -scheduler@^0.23.0: - version "0.23.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" - integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== - dependencies: - loose-envify "^1.1.0" - -schema-utils@^3.1.1, schema-utils@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" - integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -scrypt-js@3.0.1, scrypt-js@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" - integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== - -secp256k1@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" - integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== - dependencies: - elliptic "^6.5.4" - node-addon-api "^2.0.0" - node-gyp-build "^4.2.0" - -secp256k1@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-5.0.0.tgz#be6f0c8c7722e2481e9773336d351de8cddd12f7" - integrity sha512-TKWX8xvoGHrxVdqbYeZM9w+izTF4b9z3NhSaDkdn81btvuh+ivbIMGT/zQvDtTFWhRlThpoz6LEYTr7n8A5GcA== - dependencies: - elliptic "^6.5.4" - node-addon-api "^5.0.0" - node-gyp-build "^4.2.0" - -semver@^5.5.0: - version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - -semver@^6.3.0: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.3.4, semver@^7.3.8: - version "7.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" - -semver@^7.5.4: - version "7.6.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" - integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== - -serialize-javascript@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" - integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== - dependencies: - randombytes "^2.1.0" - -serialize-javascript@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" - integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== - dependencies: - randombytes "^2.1.0" - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - -set-function-length@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.1.tgz#47cc5945f2c771e2cf261c6737cf9684a2a5e425" - integrity sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g== - dependencies: - define-data-property "^1.1.2" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.3" - gopd "^1.0.1" - has-property-descriptors "^1.0.1" - -setimmediate@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -sha.js@^2.4.0, sha.js@^2.4.11, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -sha1@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/sha1/-/sha1-1.1.1.tgz#addaa7a93168f393f19eb2b15091618e2700f848" - integrity sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA== - dependencies: - charenc ">= 0.0.1" - crypt ">= 0.0.1" - -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shelljs@^0.8.3: - version "0.8.5" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" - integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - -side-channel@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.5.tgz#9a84546599b48909fb6af1211708d23b1946221b" - integrity sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ== - dependencies: - call-bind "^1.0.6" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - object-inspect "^1.13.1" - -signal-exit@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" - integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -socket.io-client@^4.5.1: - version "4.7.5" - resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-4.7.5.tgz#919be76916989758bdc20eec63f7ee0ae45c05b7" - integrity sha512-sJ/tqHOCe7Z50JCBCXrsY3I2k03iOiUe+tj1OmKeD2lXPiGH/RUCdTZFoqVyN7l1MnpIzPrGtLcijffmeouNlQ== - dependencies: - "@socket.io/component-emitter" "~3.1.0" - debug "~4.3.2" - engine.io-client "~6.5.2" - socket.io-parser "~4.2.4" - -socket.io-parser@~4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.4.tgz#c806966cf7270601e47469ddeec30fbdfda44c83" - integrity sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew== - dependencies: - "@socket.io/component-emitter" "~3.1.0" - debug "~4.3.1" - -solc@0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" - integrity sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA== - dependencies: - command-exists "^1.2.8" - commander "3.0.2" - follow-redirects "^1.12.1" - fs-extra "^0.30.0" - js-sha3 "0.8.0" - memorystream "^0.3.1" - require-from-string "^2.0.0" - semver "^5.5.0" - tmp "0.0.33" - -solidity-coverage@^0.8.5: - version "0.8.7" - resolved "https://registry.yarnpkg.com/solidity-coverage/-/solidity-coverage-0.8.7.tgz#fa8809fdd3321c357609fd20f6888878efc0f0fc" - integrity sha512-RzcPuNsIqVGq5F8rjQZPdI2EVdsRU7w2f1Uk1UY567n9eNcg5LSEQ3Q1WFoy9bi/2AD5SYbYK9SS/Nwh2oYbNw== - dependencies: - "@ethersproject/abi" "^5.0.9" - "@solidity-parser/parser" "^0.18.0" - chalk "^2.4.2" - death "^1.1.0" - difflib "^0.2.4" - fs-extra "^8.1.0" - ghost-testrpc "^0.0.2" - global-modules "^2.0.0" - globby "^10.0.1" - jsonschema "^1.2.4" - lodash "^4.17.15" - mocha "^10.2.0" - node-emoji "^1.10.0" - pify "^4.0.1" - recursive-readdir "^2.2.2" - sc-istanbul "^0.4.5" - semver "^7.3.4" - shelljs "^0.8.3" - web3-utils "^1.3.6" - -sonic-boom@^2.2.1: - version "2.8.0" - resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-2.8.0.tgz#c1def62a77425090e6ad7516aad8eb402e047611" - integrity sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg== - dependencies: - atomic-sleep "^1.0.0" - -source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - -source-map-support@^0.5.13, source-map-support@~0.5.20: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0, source-map@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -source-map@^0.7.4: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - -source-map@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" - integrity sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA== - dependencies: - amdefine ">=0.0.4" - -split-on-first@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" - integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== - -split2@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" - integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - -stacktrace-parser@^0.1.10: - version "0.1.10" - resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" - integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== - dependencies: - type-fest "^0.7.1" - -standard-as-callback@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/standard-as-callback/-/standard-as-callback-2.1.0.tgz#8953fc05359868a77b5b9739a665c5977bb7df45" - integrity sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A== - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -std-env@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.7.0.tgz#c9f7386ced6ecf13360b6c6c55b8aaa4ef7481d2" - integrity sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg== - -stream-shift@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.3.tgz#85b8fab4d71010fc3ba8772e8046cc49b8a3864b" - integrity sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ== - -strict-uri-encode@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" - integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ== - -string-format@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string-format/-/string-format-2.0.0.tgz#f2df2e7097440d3b65de31b6d40d54c96eaffb9b" - integrity sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA== - -string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - 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" - -string_decoder@^1.1.1, string_decoder@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-final-newline@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" - integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== - -strip-hex-prefix@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" - integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== - dependencies: - is-hex-prefixed "1.0.0" - -strip-json-comments@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -superstruct@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-1.0.3.tgz#de626a5b49c6641ff4d37da3c7598e7a87697046" - integrity sha512-8iTn3oSS8nRGn+C2pgXSKPI3jmpm6FExNazNpjvqS6ZUJQCej3PUXEKM8NjHBOs54ExM+LPW/FBRhymrdcCiSg== - -supports-color@8.1.1, supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-color@^3.1.0: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - integrity sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A== - dependencies: - has-flag "^1.0.0" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -sync-request@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/sync-request/-/sync-request-6.1.0.tgz#e96217565b5e50bbffe179868ba75532fb597e68" - integrity sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw== - dependencies: - http-response-object "^3.0.1" - sync-rpc "^1.2.1" - then-request "^6.0.0" - -sync-rpc@^1.2.1: - version "1.3.6" - resolved "https://registry.yarnpkg.com/sync-rpc/-/sync-rpc-1.3.6.tgz#b2e8b2550a12ccbc71df8644810529deb68665a7" - integrity sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw== - dependencies: - get-port "^3.1.0" - -system-architecture@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/system-architecture/-/system-architecture-0.1.0.tgz#71012b3ac141427d97c67c56bc7921af6bff122d" - integrity sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA== - -table-layout@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-1.0.2.tgz#c4038a1853b0136d63365a734b6931cf4fad4a04" - integrity sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A== - dependencies: - array-back "^4.0.1" - deep-extend "~0.6.0" - typical "^5.2.0" - wordwrapjs "^4.0.0" - -table@^6.8.0: - version "6.8.1" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" - integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== - dependencies: - ajv "^8.0.1" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - -tapable@^2.1.1, tapable@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== - -terser-webpack-plugin@^5.3.10: - version "5.3.10" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199" - integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w== - dependencies: - "@jridgewell/trace-mapping" "^0.3.20" - jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.1" - terser "^5.26.0" - -terser@^5.26.0: - version "5.31.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.31.0.tgz#06eef86f17007dbad4593f11a574c7f5eb02c6a1" - integrity sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg== - dependencies: - "@jridgewell/source-map" "^0.3.3" - acorn "^8.8.2" - commander "^2.20.0" - source-map-support "~0.5.20" - -then-request@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/then-request/-/then-request-6.0.2.tgz#ec18dd8b5ca43aaee5cb92f7e4c1630e950d4f0c" - integrity sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA== - dependencies: - "@types/concat-stream" "^1.6.0" - "@types/form-data" "0.0.33" - "@types/node" "^8.0.0" - "@types/qs" "^6.2.31" - caseless "~0.12.0" - concat-stream "^1.6.0" - form-data "^2.2.0" - http-basic "^8.1.1" - http-response-object "^3.0.1" - promise "^8.0.0" - qs "^6.4.0" - -thread-stream@^0.15.1: - version "0.15.2" - resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-0.15.2.tgz#fb95ad87d2f1e28f07116eb23d85aba3bc0425f4" - integrity sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA== - dependencies: - real-require "^0.1.0" - -tmp@0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -ts-command-line-args@^2.2.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz#e64456b580d1d4f6d948824c274cf6fa5f45f7f0" - integrity sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw== - dependencies: - chalk "^4.1.0" - command-line-args "^5.1.1" - command-line-usage "^6.1.0" - string-format "^2.0.0" - -ts-essentials@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-7.0.3.tgz#686fd155a02133eedcc5362dc8b5056cde3e5a38" - integrity sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ== - -ts-node@^10.9.1: - version "10.9.2" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" - integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== - dependencies: - "@cspotcode/source-map-support" "^0.8.0" - "@tsconfig/node10" "^1.0.7" - "@tsconfig/node12" "^1.0.7" - "@tsconfig/node14" "^1.0.0" - "@tsconfig/node16" "^1.0.2" - acorn "^8.4.1" - acorn-walk "^8.1.1" - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - v8-compile-cache-lib "^3.0.1" - yn "3.1.1" - -tslib@1.14.1, tslib@^1.9.3: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.0.0, tslib@^2.3.1, tslib@^2.4.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - -tsort@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" - integrity sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw== - -tweetnacl-util@^0.15.1: - version "0.15.1" - resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b" - integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== - -tweetnacl@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" - integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== - dependencies: - prelude-ls "~1.1.2" - -type-detect@^4.0.0, type-detect@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-fest@^0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" - integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== - -typechain@^8.1.0: - version "8.3.2" - resolved "https://registry.yarnpkg.com/typechain/-/typechain-8.3.2.tgz#1090dd8d9c57b6ef2aed3640a516bdbf01b00d73" - integrity sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q== - dependencies: - "@types/prettier" "^2.1.1" - debug "^4.3.1" - fs-extra "^7.0.0" - glob "7.1.7" - js-sha3 "^0.8.0" - lodash "^4.17.15" - mkdirp "^1.0.4" - prettier "^2.3.1" - ts-command-line-args "^2.2.0" - ts-essentials "^7.0.1" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== - -typescript@^4.9.3: - version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== - -typical@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4" - integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== - -typical@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/typical/-/typical-5.2.0.tgz#4daaac4f2b5315460804f0acf6cb69c52bb93066" - integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== - -ufo@^1.3.0, ufo@^1.3.1, ufo@^1.3.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.4.0.tgz#39845b31be81b4f319ab1d99fd20c56cac528d32" - integrity sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ== - -uglify-js@^3.1.4: - version "3.17.4" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" - integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== - -uint8arrays@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-3.1.0.tgz#8186b8eafce68f28bd29bd29d683a311778901e2" - integrity sha512-ei5rfKtoRO8OyOIor2Rz5fhzjThwIHJZ3uyDPnDHTXbP0aMQ1RN/6AI5B5d9dBxJOU+BvOAk7ZQ1xphsX8Lrog== - dependencies: - multiformats "^9.4.2" - -uint8arrays@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-3.1.1.tgz#2d8762acce159ccd9936057572dade9459f65ae0" - integrity sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg== - dependencies: - multiformats "^9.4.2" - -uncrypto@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/uncrypto/-/uncrypto-0.1.3.tgz#e1288d609226f2d02d8d69ee861fa20d8348ef2b" - integrity sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q== - -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== - -undici@^5.14.0: - version "5.28.3" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.3.tgz#a731e0eff2c3fcfd41c1169a869062be222d1e5b" - integrity sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA== - dependencies: - "@fastify/busboy" "^2.0.0" - -unenv@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/unenv/-/unenv-1.9.0.tgz#469502ae85be1bd3a6aa60f810972b1a904ca312" - integrity sha512-QKnFNznRxmbOF1hDgzpqrlIf6NC5sbZ2OJ+5Wl3OX8uM+LUJXbj4TXvLJCtwbPTmbMHCLIz6JLKNinNsMShK9g== - dependencies: - consola "^3.2.3" - defu "^6.1.3" - mime "^3.0.0" - node-fetch-native "^1.6.1" - pathe "^1.1.1" - -unfetch@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.2.0.tgz#7e21b0ef7d363d8d9af0fb929a5555f6ef97a3be" - integrity sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA== - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -unpipe@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -unstorage@^1.9.0: - version "1.10.1" - resolved "https://registry.yarnpkg.com/unstorage/-/unstorage-1.10.1.tgz#bf8cc00a406e40a6293e893da9807057d95875b0" - integrity sha512-rWQvLRfZNBpF+x8D3/gda5nUCQL2PgXy2jNG4U7/Rc9BGEv9+CAJd0YyGCROUBKs9v49Hg8huw3aih5Bf5TAVw== - dependencies: - anymatch "^3.1.3" - chokidar "^3.5.3" - destr "^2.0.2" - h3 "^1.8.2" - ioredis "^5.3.2" - listhen "^1.5.5" - lru-cache "^10.0.2" - mri "^1.2.0" - node-fetch-native "^1.4.1" - ofetch "^1.3.3" - ufo "^1.3.1" - -untun@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/untun/-/untun-0.1.3.tgz#5d10dee37a3a5737ff03d158be877dae0a0e58a6" - integrity sha512-4luGP9LMYszMRZwsvyUd9MrxgEGZdZuZgpVQHEEX0lCYFESasVRvZd0EYpCkOIbJKHMuv0LskpXc/8Un+MJzEQ== - dependencies: - citty "^0.1.5" - consola "^3.2.3" - pathe "^1.1.1" - -update-browserslist-db@^1.0.13: - version "1.0.16" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz#f6d489ed90fb2f07d67784eb3f53d7891f736356" - integrity sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ== - dependencies: - escalade "^3.1.2" - picocolors "^1.0.1" - -uqr@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/uqr/-/uqr-0.1.2.tgz#5c6cd5dcff9581f9bb35b982cb89e2c483a41d7d" - integrity sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA== - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -use-sync-external-store@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" - integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== - -utf-8-validate@^6.0.3: - version "6.0.4" - resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-6.0.4.tgz#1305a1bfd94cecb5a866e6fc74fd07f3ed7292e5" - integrity sha512-xu9GQDeFp+eZ6LnCywXN/zBancWvOpUMzgjLPSjy4BRHSmTelvn2E0DG0o1sTiw5hkCKBHo8rwSKncfRfv2EEQ== - dependencies: - node-gyp-build "^4.3.0" - -utf8@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" - integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -util@^0.12.4: - version "0.12.5" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" - integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== - dependencies: - inherits "^2.0.3" - is-arguments "^1.0.4" - is-generator-function "^1.0.7" - is-typed-array "^1.1.3" - which-typed-array "^1.1.2" - -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -uuid@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" - integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== - -v8-compile-cache-lib@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" - integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== - -valtio@1.11.2: - version "1.11.2" - resolved "https://registry.yarnpkg.com/valtio/-/valtio-1.11.2.tgz#b8049c02dfe65620635d23ebae9121a741bb6530" - integrity sha512-1XfIxnUXzyswPAPXo1P3Pdx2mq/pIqZICkWN60Hby0d9Iqb+MEIpqgYVlbflvHdrp2YR/q3jyKWRPJJ100yxaw== - dependencies: - proxy-compare "2.5.1" - use-sync-external-store "1.2.0" - -viem@2.*: - version "2.10.5" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.10.5.tgz#97e53421e20886b34e4e5e03d01f8b6e320d216f" - integrity sha512-rzU2y6poYgXu7axcQmwddaJ/nGP3tjtslXdUCu+PvryeXACuuqoyP3chjTEHciG84a663gYbrVGbxNUFA3aURQ== - dependencies: - "@adraffy/ens-normalize" "1.10.0" - "@noble/curves" "1.2.0" - "@noble/hashes" "1.3.2" - "@scure/bip32" "1.3.2" - "@scure/bip39" "1.2.1" - abitype "1.0.0" - isows "1.0.3" - ws "8.13.0" - -viem@^1.0.0, viem@^1.1.4: - version "1.21.4" - resolved "https://registry.yarnpkg.com/viem/-/viem-1.21.4.tgz#883760e9222540a5a7e0339809202b45fe6a842d" - integrity sha512-BNVYdSaUjeS2zKQgPs+49e5JKocfo60Ib2yiXOWBT6LuVxY1I/6fFX3waEtpXvL1Xn4qu+BVitVtMh9lyThyhQ== - dependencies: - "@adraffy/ens-normalize" "1.10.0" - "@noble/curves" "1.2.0" - "@noble/hashes" "1.3.2" - "@scure/bip32" "1.3.2" - "@scure/bip39" "1.2.1" - abitype "0.9.8" - isows "1.0.3" - ws "8.13.0" - -vite@^5.0.6: - version "5.1.1" - resolved "https://registry.yarnpkg.com/vite/-/vite-5.1.1.tgz#294e39b199d669981efc7e0261b14f78ec80819e" - integrity sha512-wclpAgY3F1tR7t9LL5CcHC41YPkQIpKUGeIuT8MdNwNZr6OqOTLs7JX5vIHAtzqLWXts0T+GDrh9pN2arneKqg== - dependencies: - esbuild "^0.19.3" - postcss "^8.4.35" - rollup "^4.2.0" - optionalDependencies: - fsevents "~2.3.3" - -wagmi@^2.8.7: - version "2.8.7" - resolved "https://registry.yarnpkg.com/wagmi/-/wagmi-2.8.7.tgz#37b769655bd5903472b52ba5b3c96d4635412ace" - integrity sha512-IHnX2KzN8eENyKoWWd/bdtYuc2xDSvuN2xAw0S5X/I/Po6YO5GR1QbD/JvNmUmJem0napzhKFa8Pamh7Tk97fg== - dependencies: - "@wagmi/connectors" "4.3.9" - "@wagmi/core" "2.9.7" - use-sync-external-store "1.2.0" - -watchpack@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.1.tgz#29308f2cac150fa8e4c92f90e0ec954a9fed7fff" - integrity sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg== - dependencies: - glob-to-regexp "^0.4.1" - graceful-fs "^4.1.2" - -web3-utils@^1.3.6: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.4.tgz#0daee7d6841641655d8b3726baf33b08eda1cbec" - integrity sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A== - dependencies: - "@ethereumjs/util" "^8.1.0" - bn.js "^5.2.1" - ethereum-bloom-filters "^1.0.6" - ethereum-cryptography "^2.1.2" - ethjs-unit "0.1.6" - number-to-bn "1.7.0" - randombytes "^2.1.0" - utf8 "3.0.0" - -"webextension-polyfill@>=0.10.0 <1.0": - version "0.11.0" - resolved "https://registry.yarnpkg.com/webextension-polyfill/-/webextension-polyfill-0.11.0.tgz#1640c0d27192424fd5b420237acbe453f88c8246" - integrity sha512-YUBSKQA0iCx2YtM75VFgvvcx1hLKaGGiph6a6UaUdSgk32VT9SzrcDAKBjeGHXoAZTnNBqS5skA4VfoKMXhEBA== - dependencies: - webpack "^5.91.0" - webpack-cli "^5.1.4" - -webextension-polyfill@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/webextension-polyfill/-/webextension-polyfill-0.10.0.tgz#ccb28101c910ba8cf955f7e6a263e662d744dbb8" - integrity sha512-c5s35LgVa5tFaHhrZDnr3FpQpjj1BB+RXhLTYUxGqBVN460HkbM8TBtEqdXWbpTKfzwCcjAZVF7zXCYSKtcp9g== - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -webpack-cli@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.1.4.tgz#c8e046ba7eaae4911d7e71e2b25b776fcc35759b" - integrity sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg== - dependencies: - "@discoveryjs/json-ext" "^0.5.0" - "@webpack-cli/configtest" "^2.1.1" - "@webpack-cli/info" "^2.0.2" - "@webpack-cli/serve" "^2.0.5" - colorette "^2.0.14" - commander "^10.0.1" - cross-spawn "^7.0.3" - envinfo "^7.7.3" - fastest-levenshtein "^1.0.12" - import-local "^3.0.2" - interpret "^3.1.1" - rechoir "^0.8.0" - webpack-merge "^5.7.3" - -webpack-merge@^5.7.3: - version "5.10.0" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.10.0.tgz#a3ad5d773241e9c682803abf628d4cd62b8a4177" - integrity sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA== - dependencies: - clone-deep "^4.0.1" - flat "^5.0.2" - wildcard "^2.0.0" - -webpack-sources@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" - integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== - -webpack@^5.91.0: - version "5.91.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.91.0.tgz#ffa92c1c618d18c878f06892bbdc3373c71a01d9" - integrity sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw== - dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^1.0.5" - "@webassemblyjs/ast" "^1.12.1" - "@webassemblyjs/wasm-edit" "^1.12.1" - "@webassemblyjs/wasm-parser" "^1.12.1" - acorn "^8.7.1" - acorn-import-assertions "^1.9.0" - browserslist "^4.21.10" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.16.0" - es-module-lexer "^1.2.1" - eslint-scope "5.1.1" - events "^3.2.0" - glob-to-regexp "^0.4.1" - graceful-fs "^4.2.11" - json-parse-even-better-errors "^2.3.1" - loader-runner "^4.2.0" - mime-types "^2.1.27" - neo-async "^2.6.2" - schema-utils "^3.2.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.3.10" - watchpack "^2.4.1" - webpack-sources "^3.2.3" - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which-module@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" - integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== - -which-typed-array@^1.1.14, which-typed-array@^1.1.2: - version "1.1.14" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.14.tgz#1f78a111aee1e131ca66164d8bdc3ab062c95a06" - integrity sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg== - dependencies: - available-typed-arrays "^1.0.6" - call-bind "^1.0.5" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.1" - -which@^1.1.1, which@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -widest-line@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" - integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== - dependencies: - string-width "^4.0.0" - -wildcard@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" - integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== - -word-wrap@~1.2.3: - version "1.2.5" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" - integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== - -wordwrap@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== - -wordwrapjs@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-4.0.1.tgz#d9790bccfb110a0fc7836b5ebce0937b37a8b98f" - integrity sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA== - dependencies: - reduce-flatten "^2.0.0" - typical "^5.2.0" - -workerpool@6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" - integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== - -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -ws@7.4.6: - version "7.4.6" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== - -ws@8.13.0: - version "8.13.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" - integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== - -ws@^7.4.6, ws@^7.5.1: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - -ws@~8.11.0: - version "8.11.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" - integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== - -xmlhttprequest-ssl@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz#91360c86b914e67f44dce769180027c0da618c67" - integrity sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A== - -xtend@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" - integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yargs-parser@20.2.4: - version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== - -yargs-parser@^18.1.2: - version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -yargs-unparser@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" - integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== - dependencies: - camelcase "^6.0.0" - decamelize "^4.0.0" - flat "^5.0.2" - is-plain-obj "^2.1.0" - -yargs@16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yargs@^15.3.1: - version "15.4.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" - integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== - dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.2" - -yargs@^17.5.1: - version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - -yn@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - -zustand@4.4.1: - version "4.4.1" - resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.4.1.tgz#0cd3a3e4756f21811bd956418fdc686877e8b3b0" - integrity sha512-QCPfstAS4EBiTQzlaGP1gmorkh/UL1Leaj2tdj+zZCZ/9bm0WS7sI2wnfD5lpOszFqWJ1DcPnGoY8RDL61uokw== - dependencies: - use-sync-external-store "1.2.0" From e9a847e385afa8c7394ea016129d3c4ab9a544b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Pedro=20Sousa?= Date: Thu, 13 Jun 2024 19:17:05 +0100 Subject: [PATCH 02/15] feat: refactor for bun, viem, and other things --- .github/workflows/vite_hardhat.yaml | 3 --- .github/workflows/vite_hardhat_nightly.yaml | 3 --- 2 files changed, 6 deletions(-) diff --git a/.github/workflows/vite_hardhat.yaml b/.github/workflows/vite_hardhat.yaml index 8e95e615..b4b4d828 100644 --- a/.github/workflows/vite_hardhat.yaml +++ b/.github/workflows/vite_hardhat.yaml @@ -34,8 +34,5 @@ jobs: - name: Install dependencies run: bun install - - name: Compile and generate contract - run: bun prep - - name: Run tests run: bun test diff --git a/.github/workflows/vite_hardhat_nightly.yaml b/.github/workflows/vite_hardhat_nightly.yaml index fbded26f..d9c950d7 100644 --- a/.github/workflows/vite_hardhat_nightly.yaml +++ b/.github/workflows/vite_hardhat_nightly.yaml @@ -81,9 +81,6 @@ jobs: @noir-lang/noir_wasm@${{ matrix.version }} \ @noir-lang/types@${{ matrix.version }} - - name: Compile and generate verifier contract - run: bun prep - - name: Run test run: bun test From 910b91613dc7aab7a0174651c694baa9ca93591c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Pedro=20Sousa?= Date: Thu, 13 Jun 2024 19:23:34 +0100 Subject: [PATCH 03/15] feat: refactor for bun, viem, and other things --- vite-hardhat/test/index.spec.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/vite-hardhat/test/index.spec.ts b/vite-hardhat/test/index.spec.ts index 92d1b43e..b3f5380c 100644 --- a/vite-hardhat/test/index.spec.ts +++ b/vite-hardhat/test/index.spec.ts @@ -4,9 +4,9 @@ import { Noir } from '@noir-lang/noir_js'; import { BarretenbergBackend } from '@noir-lang/backend_barretenberg'; import { ProofData } from '@noir-lang/types'; -import circuit from '../artifacts/circuit.json' assert { type: 'json' }; import { exec } from 'shelljs'; import { ChildProcess } from 'child_process'; +import { readFileSync } from 'fs'; describe('It compiles noir program code, receiving circuit bytes and abi object.', () => { let node: ChildProcess; @@ -14,10 +14,13 @@ describe('It compiles noir program code, receiving circuit bytes and abi object. let correctProof: ProofData; beforeAll(async () => { - node = exec('bun hh node', { async: true }); + node = exec('npx hardhat node', { async: true }); exec('bun hh compile'); exec('bun hh deploy'); + const circuitFile = readFileSync('artifacts/circuit.json', 'utf-8'); + const circuit = JSON.parse(circuitFile); + // @ts-ignore const backend = new BarretenbergBackend(circuit); // @ts-ignore From f4cc0738ab0c9289cb8affe9b0b44d61794cef46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Pedro=20Sousa?= Date: Thu, 13 Jun 2024 20:19:45 +0100 Subject: [PATCH 04/15] feat: refactor for bun, viem, and other things --- vite-hardhat/hardhat.config.cts | 1 - vite-hardhat/test/index.spec.ts | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/vite-hardhat/hardhat.config.cts b/vite-hardhat/hardhat.config.cts index fd7a8833..6a1a969e 100644 --- a/vite-hardhat/hardhat.config.cts +++ b/vite-hardhat/hardhat.config.cts @@ -100,7 +100,6 @@ const config: HardhatUserConfig = { networks: { localhost: { url: 'http://127.0.0.1:8545', - accounts: [process.env.LOCALHOST_DEPLOYER_PRIVATE_KEY as string], }, scrollSepolia: { url: 'https://sepolia-rpc.scroll.io', diff --git a/vite-hardhat/test/index.spec.ts b/vite-hardhat/test/index.spec.ts index b3f5380c..adbe5ab2 100644 --- a/vite-hardhat/test/index.spec.ts +++ b/vite-hardhat/test/index.spec.ts @@ -18,7 +18,7 @@ describe('It compiles noir program code, receiving circuit bytes and abi object. exec('bun hh compile'); exec('bun hh deploy'); - const circuitFile = readFileSync('artifacts/circuit.json', 'utf-8'); + const circuitFile = readFileSync('./artifacts/circuit.json', 'utf-8'); const circuit = JSON.parse(circuitFile); // @ts-ignore From d7c81c0622e199b89bf6d43e153d96e41a5f5ca0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Pedro=20Sousa?= Date: Thu, 13 Jun 2024 20:22:46 +0100 Subject: [PATCH 05/15] feat: refactor for bun, viem, and other things --- vite-hardhat/hardhat.config.cts | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/vite-hardhat/hardhat.config.cts b/vite-hardhat/hardhat.config.cts index 6a1a969e..36468444 100644 --- a/vite-hardhat/hardhat.config.cts +++ b/vite-hardhat/hardhat.config.cts @@ -101,20 +101,32 @@ const config: HardhatUserConfig = { localhost: { url: 'http://127.0.0.1:8545', }, + }, + paths: { + root: './', + sources: './artifacts', + artifacts: './artifacts/hardhat', + }, +}; + +if (process.env.SEPOLIA_SCROLL_DEPLOYER_PRIVATE_KEY) { + config.networks = { + ...config.networks, scrollSepolia: { url: 'https://sepolia-rpc.scroll.io', accounts: [process.env.SEPOLIA_SCROLL_DEPLOYER_PRIVATE_KEY as string], }, + }; +} + +if (process.env.HOLESKY_DEPLOYER_PRIVATE_KEY) { + config.networks = { + ...config.networks, holesky: { url: 'https://holesky.drpc.org', accounts: [process.env.HOLESKY_DEPLOYER_PRIVATE_KEY as string], }, - }, - paths: { - root: './', - sources: './artifacts', - artifacts: './artifacts/hardhat', - }, -}; + }; +} export default config; From 8e465673191c9a6b849647057dbb65a0423fe8f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Pedro=20Sousa?= Date: Thu, 13 Jun 2024 21:57:51 +0100 Subject: [PATCH 06/15] feat: clarifying that you dont necessarily need bun for this --- .devcontainer/Dockerfile | 6 ++---- .devcontainer/devcontainer.json | 27 +++++++++++++-------------- vite-hardhat/README.md | 20 ++++++++------------ 3 files changed, 23 insertions(+), 30 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index f2995723..bbe42627 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,7 +1,5 @@ FROM --platform=linux/amd64 node:lts-bookworm-slim SHELL ["/bin/bash", "-c"] RUN apt update && apt install -y curl bash git tar gzip libc++-dev -RUN curl -L https://raw.githubusercontent.com/noir-lang/noirup/main/install | bash -ENV PATH="/root/.nargo/bin:$PATH" -RUN noirup -ENTRYPOINT ["nargo"] +RUN curl -fsSL https://bun.sh/install | bash +ENTRYPOINT ["bun"] diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index a00bc6e2..31a0a952 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,18 +1,17 @@ // For format details, see https://aka.ms/devcontainer.json. For config options, see the // README at: https://github.com/devcontainers/templates/tree/main/src/docker-existing-dockerfile { - "name": "Existing Dockerfile", - "build": { - "context": ".", - "dockerfile": "Dockerfile" - }, - "customizations": { - // Configure properties specific to VS Code. - "vscode": { - // Set *default* container specific settings.json values on container create. - "settings": {}, - "extensions": ["noir-lang.vscode-noir"] - } - }, - "postCreateCommand": "nargo" + "name": "Existing Dockerfile", + "build": { + "context": ".", + "dockerfile": "Dockerfile" + }, + "customizations": { + // Configure properties specific to VS Code. + "vscode": { + // Set *default* container specific settings.json values on container create. + "settings": {}, + "extensions": ["noir-lang.vscode-noir"] + } + } } diff --git a/vite-hardhat/README.md b/vite-hardhat/README.md index fad9d8fe..e23bd19a 100644 --- a/vite-hardhat/README.md +++ b/vite-hardhat/README.md @@ -13,25 +13,25 @@ Want to get started in a pinch? Start your project in a free Github Codespace! In the meantime, follow these simple steps to work on your own machine: -1. Install [bun](https://bun.sh/docs/installation): +1. Install your favorite package manager. We'll use [bun](https://bun.sh/docs/installation) but feel free to use `yarn` or others: -```bash -curl -fsSL https://bun.sh/install | bash # for macOS, Linux, and WSL -``` + ```bash + curl -fsSL https://bun.sh/install | bash + ``` -1. Install dependencies: +2. Install dependencies: ```bash bun i ``` -2. Run a local ethereum node: +3. Run a local ethereum node: ```bash bun node ``` -3. Run the app: +4. Run the app: ```bash bun dev @@ -76,9 +76,5 @@ bun build # add NETWORK= if you want to You can then preview the final page with: ```bash -yarn preview +bun serve ``` - -### On-chain verification - -The app will verify your proof locally. If you have a wallet, it will prompt you to connect to the relevant network and use it for on-chain verification. From d96f0cd69f218cca2a504a04a42e041d7aa5267b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Pedro=20Sousa?= Date: Fri, 14 Jun 2024 09:43:56 +0100 Subject: [PATCH 07/15] devcontainer --- .devcontainer/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index bbe42627..a4b8d21d 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,5 +1,5 @@ FROM --platform=linux/amd64 node:lts-bookworm-slim SHELL ["/bin/bash", "-c"] -RUN apt update && apt install -y curl bash git tar gzip libc++-dev +RUN apt update && apt install -y curl bash git tar gzip libc++-dev unzip RUN curl -fsSL https://bun.sh/install | bash ENTRYPOINT ["bun"] From f1c6541d5c78e0b8bf8aac5c1bb4523a8f66b773 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Pedro=20Sousa?= Date: Fri, 14 Jun 2024 13:21:34 +0100 Subject: [PATCH 08/15] hardhat supercharge --- vite-hardhat/.env.example | 8 --- vite-hardhat/README.md | 51 +++++++++----- vite-hardhat/bun.lockb | Bin 374072 -> 374072 bytes vite-hardhat/hardhat.config.cts | 66 ++++++++++-------- vite-hardhat/hardhat.sh | 4 -- vite-hardhat/package.json | 7 +- .../test/{index.spec.ts => index.test.ts} | 22 ++---- vite-hardhat/utils/wagmi.tsx | 8 +-- .../{vite.config.ts => vite.config.js} | 3 + 9 files changed, 85 insertions(+), 84 deletions(-) delete mode 100644 vite-hardhat/.env.example delete mode 100755 vite-hardhat/hardhat.sh rename vite-hardhat/test/{index.spec.ts => index.test.ts} (70%) rename vite-hardhat/{vite.config.ts => vite.config.js} (88%) diff --git a/vite-hardhat/.env.example b/vite-hardhat/.env.example deleted file mode 100644 index 7021883f..00000000 --- a/vite-hardhat/.env.example +++ /dev/null @@ -1,8 +0,0 @@ -# hardhat acct #0 key, please update -LOCALHOST_DEPLOYER_PRIVATE_KEY="0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" - -# hardhat acct #0 key, please update -HOLESKY_DEPLOYER_PRIVATE_KEY="0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" - -# hardhat acct #0 key, please update -SEPOLIA_SCROLL_DEPLOYER_PRIVATE_KEY="0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" diff --git a/vite-hardhat/README.md b/vite-hardhat/README.md index e23bd19a..4de81c3d 100644 --- a/vite-hardhat/README.md +++ b/vite-hardhat/README.md @@ -22,22 +22,30 @@ In the meantime, follow these simple steps to work on your own machine: 2. Install dependencies: ```bash - bun i + bun i # "npm i" or "yarn" ``` -3. Run a local ethereum node: +3. Run the app with a development node ```bash - bun node + bunx hardhat dev node # "npx hardhat dev node" or "yarn hardhat dev node ``` -4. Run the app: +### Local development - ```bash - bun dev - ``` +You can run a separate node from the dev environment: + +```bash +bunx hardhat node +``` + +and run the dev environment separately: -### Test locally +```bash +bunx hardhat dev +``` + +### Testing You can run the [example test file](./test/index.test.ts) with @@ -45,36 +53,43 @@ You can run the [example test file](./test/index.test.ts) with bun test ``` -This test starts a local ethereum node and shows the basic usage of Noir in a TypeScript Node.js environment. +This test shows the basic usage of Noir in a TypeScript Node.js environment. ### Testnets -The default scripting targets a local environment run with `hardhat`. For convenience, we added some configurations for deployment on various testnets. You can find them in `hardhat.config.cts`. +The default scripting targets a local environment run with `hardhat`. For convenience, we added some configurations for deployment on various testnets. You can see the existing list by running: + +```bash +bunx hardhat vars setup +``` -To deploy on these testnets, rename `.env.example` to `.env` and add your own [alchemy](https://www.alchemy.com/) keys for these networks. +If you want to deploy on any of them, just pass in a private key, for example for the holesky network: + +```bash +bunx hardhat vars set holesky +``` -Then, prepend your commands with your desired network in a `NETWORK` environment variable. For example, to deploy on sepolia: +You can then deploy on that network by passing the `--network` flag: ```bash -NETWORK=sepolia bun dev +bunx hardhat dev --network holesky ``` Feel free to add more networks, just make sure you: -- Add deployer private keys and alchemy API keys in `.env` -- Have funds in these accounts -- Add a configuration in `hardhat.config.cts` +- Have (testnet) funds in these accounts +- Add their configuration in the `networks` property in `hardhat.config.cts` ### Deployment As you may have guessed, this example runs completely on the client side as a static website. To build it, run: ```bash -bun build # add NETWORK= if you want to +bunx hardhat build # add --network if you want to ``` You can then preview the final page with: ```bash -bun serve +bunx hardhat serve ``` diff --git a/vite-hardhat/bun.lockb b/vite-hardhat/bun.lockb index 51d2cb2d7d0e4b77e7d451abc6ef9fb4f89face0..1aa06c074353e80bebfe7547d3bf96f33efae76f 100755 GIT binary patch delta 477 zcmdn-N^Hj~u?-#8#taMs3?NW(KaZIaNEakN&I8c~3=Bb=nHU%jo_$gMU6PH#0V)oZ zYTj+#zT28{`)+F{&+N$&E+X|Hg*R?P47d>UI1i|Zfm|^bkY*rY17eUvVCLZwt0z_= zjnt(>e2mA1RI!+8`@|JY^-R+ztY8vp7g)`-U0^lya#ME3I72-{J(Ko*516;_d%#k4 F1pvQ=U-SR~ delta 477 zcmdn-N^Hj~u?-#8#s|;7sQxa=#&Ds{FQ1Wtfgz(ELLY$gTUNerW^72`50ruef#%)T z?YpfRx9_%Q^30z6!dj%hgPDQhMl>@s$bbV)e)%AkX4)>Wnt8b?I}^xW28Q;1516;_d%#k41ptnG BRPg`+ diff --git a/vite-hardhat/hardhat.config.cts b/vite-hardhat/hardhat.config.cts index 36468444..cbc12948 100644 --- a/vite-hardhat/hardhat.config.cts +++ b/vite-hardhat/hardhat.config.cts @@ -2,10 +2,9 @@ import '@nomicfoundation/hardhat-toolbox-viem'; import '@nomicfoundation/hardhat-viem'; import '@nomicfoundation/hardhat-chai-matchers'; -import { HardhatUserConfig, task } from 'hardhat/config'; +import { HardhatUserConfig, scope, task, types } from 'hardhat/config'; -import * as dotenv from 'dotenv'; -import { subtask } from 'hardhat/config'; +import { subtask, vars } from 'hardhat/config'; import { TASK_COMPILE_SOLIDITY } from 'hardhat/builtin-tasks/task-names'; import { join, resolve } from 'path'; import { writeFile } from 'fs/promises'; @@ -14,8 +13,7 @@ import { gunzipSync } from 'zlib'; import { Barretenberg, RawBuffer, Crs } from '@aztec/bb.js'; import { createFileManager, compile } from '@noir-lang/noir_wasm'; import { CompiledCircuit } from '@noir-lang/types'; - -dotenv.config(); +import { exec } from 'shelljs'; subtask(TASK_COMPILE_SOLIDITY).setAction(async (_, { config }, runSuper) => { const superRes = await runSuper(); @@ -73,7 +71,6 @@ task('compile', 'Compile and generate circuits and contracts').setAction( ); task('deploy', 'Deploys the verifier contract').setAction(async (taskArguments, hre) => { - console.log(await hre.viem.getWalletClients()); const publicClient = await hre.viem.getPublicClient(); // Deploy the verifier contract @@ -82,14 +79,38 @@ task('deploy', 'Deploys the verifier contract').setAction(async (taskArguments, // Create a config object const config = { chainId: publicClient.chain.id, - verifier, + address: verifier.address, + abi: verifier.abi, }; // Print the config - console.log('Deployed at', config.verifier.address); + console.log('Deployed at', config.address); writeFileSync('artifacts/deployment.json', JSON.stringify(config), { flag: 'w' }); }); +task('prep', 'Compiles and deploys the verifier contract').setAction(async (_, hre) => { + await hre.run('compile'); + await hre.run('deploy'); +}); + +task('dev', 'Starts the vite server') + .addOptionalPositionalParam('node', 'Also start a development node', '', types.string) + .setAction(async ({ node }, hre) => { + if (node) hre.run('node'); + await hre.run('prep'); + exec('vite'); + }); + +task('build', 'Builds the frontend project').setAction(async (_, hre) => { + await hre.run('compile'); + exec('vite build'); +}); + +task('serve', 'Serves the frontend project').setAction(async (_, hre) => { + await hre.run('build'); + exec('vite preview'); +}); + const config: HardhatUserConfig = { solidity: { version: '0.8.18', @@ -97,10 +118,19 @@ const config: HardhatUserConfig = { optimizer: { enabled: true, runs: 5000 }, }, }, + defaultNetwork: 'localhost', networks: { localhost: { url: 'http://127.0.0.1:8545', }, + scrollSepolia: { + url: 'https://sepolia-rpc.scroll.io', + accounts: vars.has('scroll_sepolia') ? [vars.get('scroll_sepolia')] : [], + }, + holesky: { + url: 'https://sepolia-rpc.scroll.io', + accounts: vars.has('holesky') ? [vars.get('holesky')] : [], + }, }, paths: { root: './', @@ -109,24 +139,4 @@ const config: HardhatUserConfig = { }, }; -if (process.env.SEPOLIA_SCROLL_DEPLOYER_PRIVATE_KEY) { - config.networks = { - ...config.networks, - scrollSepolia: { - url: 'https://sepolia-rpc.scroll.io', - accounts: [process.env.SEPOLIA_SCROLL_DEPLOYER_PRIVATE_KEY as string], - }, - }; -} - -if (process.env.HOLESKY_DEPLOYER_PRIVATE_KEY) { - config.networks = { - ...config.networks, - holesky: { - url: 'https://holesky.drpc.org', - accounts: [process.env.HOLESKY_DEPLOYER_PRIVATE_KEY as string], - }, - }; -} - export default config; diff --git a/vite-hardhat/hardhat.sh b/vite-hardhat/hardhat.sh deleted file mode 100755 index 1efb7c63..00000000 --- a/vite-hardhat/hardhat.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash - -NODE_OPTIONS='--experimental-loader ts-node/esm/transpile-only --no-warnings=ExperimentalWarning' -hardhat $@ diff --git a/vite-hardhat/package.json b/vite-hardhat/package.json index 54c06b22..0d413607 100644 --- a/vite-hardhat/package.json +++ b/vite-hardhat/package.json @@ -4,12 +4,7 @@ "type": "module", "description": "A template repository to get started with writing zero knowledge programs with Noir.", "scripts": { - "node": "bunx hardhat node", - "prep": "bun hh compile && bun hh deploy", - "dev": "bun run prep && vite", - "build": "bun run prep && vite build", - "serve": "vite preview", - "hh": "./hardhat.sh --network ${NETWORK:-localhost}" + "test": "NODE_OPTIONS='--experimental-loader ts-node/esm/transpile-only' hardhat test" }, "dependencies": { "@noir-lang/backend_barretenberg": "^0.30.0", diff --git a/vite-hardhat/test/index.spec.ts b/vite-hardhat/test/index.test.ts similarity index 70% rename from vite-hardhat/test/index.spec.ts rename to vite-hardhat/test/index.test.ts index adbe5ab2..3730f72f 100644 --- a/vite-hardhat/test/index.spec.ts +++ b/vite-hardhat/test/index.test.ts @@ -1,10 +1,9 @@ -import { expect, describe, beforeAll, afterAll, test } from 'bun:test'; +import { expect } from 'chai'; import { Noir } from '@noir-lang/noir_js'; import { BarretenbergBackend } from '@noir-lang/backend_barretenberg'; import { ProofData } from '@noir-lang/types'; -import { exec } from 'shelljs'; import { ChildProcess } from 'child_process'; import { readFileSync } from 'fs'; @@ -13,11 +12,7 @@ describe('It compiles noir program code, receiving circuit bytes and abi object. let noir: Noir; let correctProof: ProofData; - beforeAll(async () => { - node = exec('npx hardhat node', { async: true }); - exec('bun hh compile'); - exec('bun hh deploy'); - + beforeEach(async () => { const circuitFile = readFileSync('./artifacts/circuit.json', 'utf-8'); const circuit = JSON.parse(circuitFile); @@ -27,21 +22,16 @@ describe('It compiles noir program code, receiving circuit bytes and abi object. noir = new Noir(circuit, backend); }); - afterAll(() => { - // Terminate the Hardhat node process - node.kill(); - }); - test('Should generate valid proof for correct input', async () => { const input = { x: 1, y: 2 }; // Generate proof correctProof = await noir.generateProof(input); - expect(correctProof.proof instanceof Uint8Array).toBeTrue(); + expect(correctProof.proof instanceof Uint8Array).to.be.true; }); test('Should verify valid proof for correct input', async () => { const verification = await noir.verifyProof(correctProof); - expect(verification).toBeTrue(); + expect(verification).to.be.true; }); test('Should fail to generate valid proof for incorrect input', async () => { @@ -50,9 +40,9 @@ describe('It compiles noir program code, receiving circuit bytes and abi object. const incorrectProof = await noir.generateProof(input); } catch (err) { // TODO(Ze): Not sure how detailed we want this test to be - expect(err instanceof Error).toBeTrue(); + expect(err instanceof Error).to.be.true; const error = err as Error; - expect(error.message).toContain('Cannot satisfy constraint'); + expect(error.message).to.contain('Cannot satisfy constraint'); } }); }); diff --git a/vite-hardhat/utils/wagmi.tsx b/vite-hardhat/utils/wagmi.tsx index 24b4d10d..572632a5 100644 --- a/vite-hardhat/utils/wagmi.tsx +++ b/vite-hardhat/utils/wagmi.tsx @@ -1,6 +1,6 @@ import { http, createConfig } from 'wagmi'; import { scrollSepolia, holesky, hardhat } from 'wagmi/chains'; -import { chainId, verifier } from '../artifacts/deployment.json'; +import { chainId, address, abi } from '../artifacts/deployment.json'; import { injected } from 'wagmi/connectors'; @@ -15,8 +15,8 @@ export const config = createConfig({ }); export const contractCallConfig = { - address: verifier.address as `0x${string}`, - abi: verifier.abi, - chainId: chainId, + address: address as `0x${string}`, + abi, + chainId, functionName: 'verify', }; diff --git a/vite-hardhat/vite.config.ts b/vite-hardhat/vite.config.js similarity index 88% rename from vite-hardhat/vite.config.ts rename to vite-hardhat/vite.config.js index a08fe6df..7f94dbf1 100644 --- a/vite-hardhat/vite.config.ts +++ b/vite-hardhat/vite.config.js @@ -11,4 +11,7 @@ export default defineConfig({ target: 'esnext', }, plugins: [react()], + server: { + port: 1337, + }, }); From 743fe625ec21f6f00916021b55aef599df9cff4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Pedro=20Sousa?= Date: Fri, 14 Jun 2024 14:43:47 +0100 Subject: [PATCH 09/15] hardhat supercharge pt2 --- vite-hardhat/package.json | 4 ++-- vite-hardhat/test/index.test.ts | 15 ++++++--------- vite-hardhat/test/test.sh | 2 ++ 3 files changed, 10 insertions(+), 11 deletions(-) create mode 100755 vite-hardhat/test/test.sh diff --git a/vite-hardhat/package.json b/vite-hardhat/package.json index 0d413607..7cfa4e43 100644 --- a/vite-hardhat/package.json +++ b/vite-hardhat/package.json @@ -3,8 +3,8 @@ "version": "1.0.0", "type": "module", "description": "A template repository to get started with writing zero knowledge programs with Noir.", - "scripts": { - "test": "NODE_OPTIONS='--experimental-loader ts-node/esm/transpile-only' hardhat test" + "bin": { + "test": "test/test.sh" }, "dependencies": { "@noir-lang/backend_barretenberg": "^0.30.0", diff --git a/vite-hardhat/test/index.test.ts b/vite-hardhat/test/index.test.ts index 3730f72f..557c18a5 100644 --- a/vite-hardhat/test/index.test.ts +++ b/vite-hardhat/test/index.test.ts @@ -4,42 +4,39 @@ import { Noir } from '@noir-lang/noir_js'; import { BarretenbergBackend } from '@noir-lang/backend_barretenberg'; import { ProofData } from '@noir-lang/types'; -import { ChildProcess } from 'child_process'; import { readFileSync } from 'fs'; +import { resolve } from 'path'; describe('It compiles noir program code, receiving circuit bytes and abi object.', () => { - let node: ChildProcess; let noir: Noir; let correctProof: ProofData; beforeEach(async () => { - const circuitFile = readFileSync('./artifacts/circuit.json', 'utf-8'); + const circuitFile = readFileSync(resolve('artifacts/circuit.json'), 'utf-8'); const circuit = JSON.parse(circuitFile); - // @ts-ignore const backend = new BarretenbergBackend(circuit); - // @ts-ignore noir = new Noir(circuit, backend); }); - test('Should generate valid proof for correct input', async () => { + it('Should generate valid proof for correct input', async () => { const input = { x: 1, y: 2 }; // Generate proof correctProof = await noir.generateProof(input); expect(correctProof.proof instanceof Uint8Array).to.be.true; }); - test('Should verify valid proof for correct input', async () => { + it('Should verify valid proof for correct input', async () => { const verification = await noir.verifyProof(correctProof); expect(verification).to.be.true; }); - test('Should fail to generate valid proof for incorrect input', async () => { + it('Should fail to generate valid proof for incorrect input', async () => { try { const input = { x: 1, y: 1 }; const incorrectProof = await noir.generateProof(input); } catch (err) { - // TODO(Ze): Not sure how detailed we want this test to be + // TODO(Ze): Not sure how detailed we want this it to be expect(err instanceof Error).to.be.true; const error = err as Error; expect(error.message).to.contain('Cannot satisfy constraint'); diff --git a/vite-hardhat/test/test.sh b/vite-hardhat/test/test.sh new file mode 100755 index 00000000..a0a827dc --- /dev/null +++ b/vite-hardhat/test/test.sh @@ -0,0 +1,2 @@ +#!/bin/bash +NODE_OPTIONS='--experimental-loader ts-node/esm/transpile-only --no-warnings=ExperimentalWarning' hardhat test From a57decf3b32b00f0390913ce4f1fbd81e894f32b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Pedro=20Sousa?= Date: Fri, 14 Jun 2024 15:19:53 +0100 Subject: [PATCH 10/15] hardhat supercharged pt2 --- vite-hardhat/test/test.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/vite-hardhat/test/test.sh b/vite-hardhat/test/test.sh index a0a827dc..5076335b 100755 --- a/vite-hardhat/test/test.sh +++ b/vite-hardhat/test/test.sh @@ -1,2 +1,5 @@ #!/bin/bash -NODE_OPTIONS='--experimental-loader ts-node/esm/transpile-only --no-warnings=ExperimentalWarning' hardhat test +NODE_OPTIONS='--experimental-loader ts-node/esm/transpile-only --no-warnings=ExperimentalWarning' + +NODE_OPTIONS=$NODE_OPTIONS hardhat compile +NODE_OPTIONS=$NODE_OPTIONS hardhat test From 0fe5208458d3350e0e2cef055efb92eaca14f26c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Pedro=20Sousa?= Date: Fri, 14 Jun 2024 15:58:46 +0100 Subject: [PATCH 11/15] making drift tests run on PRs --- .github/workflows/vite_hardhat.yaml | 11 +++-------- .github/workflows/vite_hardhat_nightly.yaml | 13 +++++++------ .github/workflows/with_foundry_nightly.yaml | 3 +++ vite-hardhat/hardhat.config.cts | 2 +- vite-hardhat/package.json | 2 +- vite-hardhat/test/index.test.ts | 6 ++++-- vite-hardhat/test/test.sh | 3 +-- 7 files changed, 20 insertions(+), 20 deletions(-) diff --git a/.github/workflows/vite_hardhat.yaml b/.github/workflows/vite_hardhat.yaml index b4b4d828..aca3f797 100644 --- a/.github/workflows/vite_hardhat.yaml +++ b/.github/workflows/vite_hardhat.yaml @@ -14,6 +14,9 @@ jobs: steps: - uses: actions/checkout@v4 + - name: Set up bun + uses: oven-sh/setup-bun@v1 + - name: Get latest version id: versions_step run: | @@ -23,14 +26,6 @@ jobs: STABLE=$(echo $output | jq -r '.stable') echo "::set-output name=stable::$STABLE" - - name: Set up bun - uses: oven-sh/setup-bun@v1 - - - name: Set up nargo - uses: ./.github/actions/setup-nargo - with: - version: ${{ steps.versions_step.outputs.stable }} - - name: Install dependencies run: bun install diff --git a/.github/workflows/vite_hardhat_nightly.yaml b/.github/workflows/vite_hardhat_nightly.yaml index d9c950d7..c1a21bfa 100644 --- a/.github/workflows/vite_hardhat_nightly.yaml +++ b/.github/workflows/vite_hardhat_nightly.yaml @@ -6,6 +6,9 @@ on: schedule: # Run a nightly release at 2 AM UTC - cron: '0 2 * * *' + pull_request: + paths: + - 'vite-hardhat/**' jobs: vite-hardhat-setup: @@ -51,11 +54,6 @@ jobs: - name: Set up bun uses: oven-sh/setup-bun@v1 - - name: Set up nargo - uses: ./.github/actions/setup-nargo - with: - version: ${{ matrix.version }} - - name: Get stability id: get-stability env: @@ -73,6 +71,9 @@ jobs: echo "Is stable: $IS_STABLE" echo "::set-output name=is_stable::$IS_STABLE" + - name: Install dependencies + run: bun install + - name: Install test version run: | bun i \ @@ -81,7 +82,7 @@ jobs: @noir-lang/noir_wasm@${{ matrix.version }} \ @noir-lang/types@${{ matrix.version }} - - name: Run test + - name: Run tests run: bun test - name: Send GitHub Action trigger data to Slack workflow - Stable diff --git a/.github/workflows/with_foundry_nightly.yaml b/.github/workflows/with_foundry_nightly.yaml index 496e57bd..8e4f94f3 100644 --- a/.github/workflows/with_foundry_nightly.yaml +++ b/.github/workflows/with_foundry_nightly.yaml @@ -6,6 +6,9 @@ on: schedule: # Run a nightly release at 2 AM UTC - cron: '0 2 * * *' + pull_request: + paths: + - 'with-foundry/**' jobs: with-foundry-setup: diff --git a/vite-hardhat/hardhat.config.cts b/vite-hardhat/hardhat.config.cts index cbc12948..08bf3286 100644 --- a/vite-hardhat/hardhat.config.cts +++ b/vite-hardhat/hardhat.config.cts @@ -102,7 +102,7 @@ task('dev', 'Starts the vite server') }); task('build', 'Builds the frontend project').setAction(async (_, hre) => { - await hre.run('compile'); + await hre.run('prep'); exec('vite build'); }); diff --git a/vite-hardhat/package.json b/vite-hardhat/package.json index 7cfa4e43..f0155357 100644 --- a/vite-hardhat/package.json +++ b/vite-hardhat/package.json @@ -3,7 +3,7 @@ "version": "1.0.0", "type": "module", "description": "A template repository to get started with writing zero knowledge programs with Noir.", - "bin": { + "scripts": { "test": "test/test.sh" }, "dependencies": { diff --git a/vite-hardhat/test/index.test.ts b/vite-hardhat/test/index.test.ts index 557c18a5..144f1afc 100644 --- a/vite-hardhat/test/index.test.ts +++ b/vite-hardhat/test/index.test.ts @@ -1,11 +1,13 @@ import { expect } from 'chai'; - -import { Noir } from '@noir-lang/noir_js'; import { BarretenbergBackend } from '@noir-lang/backend_barretenberg'; +import { Noir } from '@noir-lang/noir_js'; import { ProofData } from '@noir-lang/types'; import { readFileSync } from 'fs'; import { resolve } from 'path'; +import shelljs from 'shelljs'; + +shelljs.exec('npx hardhat compile'); describe('It compiles noir program code, receiving circuit bytes and abi object.', () => { let noir: Noir; diff --git a/vite-hardhat/test/test.sh b/vite-hardhat/test/test.sh index 5076335b..3b0e2743 100755 --- a/vite-hardhat/test/test.sh +++ b/vite-hardhat/test/test.sh @@ -1,5 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash NODE_OPTIONS='--experimental-loader ts-node/esm/transpile-only --no-warnings=ExperimentalWarning' -NODE_OPTIONS=$NODE_OPTIONS hardhat compile NODE_OPTIONS=$NODE_OPTIONS hardhat test From 5829346bf5186631a04cdfc6ac2b86b8149a88b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Pedro=20Sousa?= Date: Mon, 17 Jun 2024 11:26:30 +0100 Subject: [PATCH 12/15] Apply suggestions from code review Co-authored-by: josh crites --- vite-hardhat/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vite-hardhat/README.md b/vite-hardhat/README.md index 4de81c3d..24d3f86e 100644 --- a/vite-hardhat/README.md +++ b/vite-hardhat/README.md @@ -25,7 +25,7 @@ In the meantime, follow these simple steps to work on your own machine: bun i # "npm i" or "yarn" ``` -3. Run the app with a development node +3. Run the app with a development Ethereum node ```bash bunx hardhat dev node # "npx hardhat dev node" or "yarn hardhat dev node @@ -33,7 +33,7 @@ In the meantime, follow these simple steps to work on your own machine: ### Local development -You can run a separate node from the dev environment: +You can run a separate Ethereum node from the dev environment: ```bash bunx hardhat node From e46fd1b4d0e18f11fa738130d33284c5d9cd8061 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Pedro=20Sousa?= Date: Wed, 19 Jun 2024 17:57:13 +0100 Subject: [PATCH 13/15] reusing values from hardhat on wagmi, taking care of chain switching, and other QoL changes --- vite-hardhat/README.md | 39 ++++---- vite-hardhat/bun.lockb | Bin 374072 -> 403791 bytes vite-hardhat/hardhat.config.cts | 90 ++++++++++++------ vite-hardhat/hooks/useOnChainVerification.tsx | 18 ++-- vite-hardhat/index.tsx | 26 ++++- vite-hardhat/package.json | 1 + vite-hardhat/utils/wagmi.tsx | 22 ----- vite-hardhat/wagmi.config.ts | 19 ++++ 8 files changed, 135 insertions(+), 80 deletions(-) delete mode 100644 vite-hardhat/utils/wagmi.tsx create mode 100644 vite-hardhat/wagmi.config.ts diff --git a/vite-hardhat/README.md b/vite-hardhat/README.md index 24d3f86e..2cdf018f 100644 --- a/vite-hardhat/README.md +++ b/vite-hardhat/README.md @@ -11,7 +11,7 @@ Want to get started in a pinch? Start your project in a free Github Codespace! [![Start your project in a free Github Codespace!](https://github.com/codespaces/badge.svg)](https://codespaces.new/noir-lang/noir-starter/tree/main) -In the meantime, follow these simple steps to work on your own machine: +## Locally 1. Install your favorite package manager. We'll use [bun](https://bun.sh/docs/installation) but feel free to use `yarn` or others: @@ -25,13 +25,13 @@ In the meantime, follow these simple steps to work on your own machine: bun i # "npm i" or "yarn" ``` -3. Run the app with a development Ethereum node +3. Run a development Ethereum node ```bash - bunx hardhat dev node # "npx hardhat dev node" or "yarn hardhat dev node + bunx hardhat node # "npx hardhat dev node" or "yarn hardhat dev node" ``` -### Local development +4. Run the app You can run a separate Ethereum node from the dev environment: @@ -55,9 +55,12 @@ bun test This test shows the basic usage of Noir in a TypeScript Node.js environment. -### Testnets +> [!NOTE] +> The test is a script, not an executable (we're running `bun test` or `yarn test` instead of `bunx` or `npx`). This is because the test runs its own network and executables. -The default scripting targets a local environment run with `hardhat`. For convenience, we added some configurations for deployment on various testnets. You can see the existing list by running: +### Deploying on other networks + +The default scripting targets a local environment. For convenience, we added some configurations for deployment on various other networks. You can see the existing list by running: ```bash bunx hardhat vars setup @@ -69,27 +72,25 @@ If you want to deploy on any of them, just pass in a private key, for example fo bunx hardhat vars set holesky ``` -You can then deploy on that network by passing the `--network` flag: +You can then run all the commands using that network by passing the `--network` flag. For example: ```bash -bunx hardhat dev --network holesky +bunx hardhat dev --network holesky # deploys and runs a development server on holesky +bunx hardhat deploy --network holesky # deploys on holesky +bunx hardhat build --network holesky # builds the frontend with the holesky target ``` -Feel free to add more networks, just make sure you: +Feel free to add more networks, as long as they're supported by `wagmi` ([list here](https://wagmi.sh/react/api/chains#available-chains)). Just make sure you: -- Have (testnet) funds in these accounts +- Have funds in these accounts - Add their configuration in the `networks` property in `hardhat.config.cts` +- Use the name that wagmi expects (for example `ethereum` won't work, as `wagmi` calls it `mainnet`) -### Deployment - -As you may have guessed, this example runs completely on the client side as a static website. To build it, run: - -```bash -bunx hardhat build # add --network if you want to -``` +#### Attaching to an existing contract -You can then preview the final page with: +You probably don't want to redeploy everytime you build your project. To attach the build to an already deployed contract, pass the `--attach` flag: ```bash -bunx hardhat serve +bunx hardhat deploy --network mainnet # deploys on ethereum mainnet $$$$$! +bunx hardhat dev --network mainnet --attach 0x # you're now developing using an existing verifier contract ``` diff --git a/vite-hardhat/bun.lockb b/vite-hardhat/bun.lockb index 1aa06c074353e80bebfe7547d3bf96f33efae76f..bcdf708dca9f55abb64165ff7dc526113ec174f8 100755 GIT binary patch delta 80849 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 E3j`$&j{pDw delta 63699 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 z zoCeMxIP9x12a6#689x`8YjK~ECjja}=!xyRx)mb08!JAdN;FCR2&uf9c~hH}W;@u2l_Dm-9dFP}bjc27ohP1BJ4M zcUcc_Rc(~{l@(E0ozDmE=(k`nzacH6jPCypfj`sQ~$Lyp7#8`$8kTJP5peFK(xNMuB^p&GprY$wpBV zD={aN8h(;{)*#o0KCZ!6Ha9vcxTTpwQLJ zrcS!ObGY0SY*7trn0IB={!1SE4{~4#b2SeKUMWqk1vO5A#UD)XpyQR~gG4#soEF_t zSt<{iQ~VvMA{r`V#j7mn1!Jm-zSwUT2=_H?HKV@LyzIZ0A;mRC!bH+(q`uQ2eHGiumf>lNVXqsrKHPaYj^ z^jH2JXfdzcPVCD8<#S6qauqf!tuqhPa<%$wAeR19AH82 z_f-DM2@Zm8gBADhzSx=tfLy0PSkTe1=dh z66yENl!~`;9k73OmnBDOCXyaInuQWvx_bY!;xYa^a*$`D^~?Na zGdq6nTU|)I01JI149(a~ZJ+%~yr-znUIP-&z602Lwx~xR{t_luTYu1e8j{? z!Q!F24yCb8hBI%Wo{e!#ugshPP4lMYc(HQH2gQ2%JXC$5pkoj9&B7}msd6hH>06qT P?+AVC+)=h|^^N}z)PEgf diff --git a/vite-hardhat/hardhat.config.cts b/vite-hardhat/hardhat.config.cts index 08bf3286..259fbe35 100644 --- a/vite-hardhat/hardhat.config.cts +++ b/vite-hardhat/hardhat.config.cts @@ -14,6 +14,7 @@ import { Barretenberg, RawBuffer, Crs } from '@aztec/bb.js'; import { createFileManager, compile } from '@noir-lang/noir_wasm'; import { CompiledCircuit } from '@noir-lang/types'; import { exec } from 'shelljs'; +import { Chain } from 'viem'; subtask(TASK_COMPILE_SOLIDITY).setAction(async (_, { config }, runSuper) => { const superRes = await runSuper(); @@ -70,44 +71,65 @@ task('compile', 'Compile and generate circuits and contracts').setAction( }, ); -task('deploy', 'Deploys the verifier contract').setAction(async (taskArguments, hre) => { - const publicClient = await hre.viem.getPublicClient(); +task('deploy', 'Deploys the verifier contract') + .addOptionalParam('attach', 'Attach to an existing address', '', types.string) + .setAction(async ({ attach }, hre) => { + let verifier; + if (attach) { + verifier = await hre.viem.getContractAt('UltraVerifier', attach); + } else { + verifier = await hre.viem.deployContract('UltraVerifier'); + } + + const networkConfig = (await import(`viem/chains`))[hre.network.name] as Chain; + console.log(networkConfig); + const config = { + name: hre.network.name, + address: verifier.address, + networkConfig: { + ...networkConfig, + id: hre.network.config.chainId || networkConfig.id, + }, + }; + + console.log( + `Attached to address ${verifier.address} at network ${hre.network.name} with chainId ${config.networkConfig.id}...`, + ); + writeFileSync('artifacts/deployment.json', JSON.stringify(config), { flag: 'w' }); + }); - // Deploy the verifier contract - const verifier = await hre.viem.deployContract('UltraVerifier'); +subtask('generateHooks', 'Generates hooks for the verifier contract').setAction(async (_, hre) => { + exec('wagmi generate'); +}); - // Create a config object - const config = { - chainId: publicClient.chain.id, - address: verifier.address, - abi: verifier.abi, - }; +subtask('prep', 'Compiles and deploys the verifier contract') + .addParam('attach', 'Attach to an already deployed contract', '', types.string) + .setAction(async ({ attach }, hre) => { + console.log('Preparing...'); + console.log('Compiling circuits and generating contracts...'); - // Print the config - console.log('Deployed at', config.address); - writeFileSync('artifacts/deployment.json', JSON.stringify(config), { flag: 'w' }); -}); + await hre.run('compile'); + await hre.run('deploy', { attach }); -task('prep', 'Compiles and deploys the verifier contract').setAction(async (_, hre) => { - await hre.run('compile'); - await hre.run('deploy'); -}); + console.log('Generating hooks...'); + await hre.run('generateHooks'); + }); -task('dev', 'Starts the vite server') - .addOptionalPositionalParam('node', 'Also start a development node', '', types.string) - .setAction(async ({ node }, hre) => { - if (node) hre.run('node'); - await hre.run('prep'); - exec('vite'); +task('dev', 'Deploys and starts in a development environment') + .addOptionalParam('attach', 'Attach to an existing address', '', types.string) + .setAction(async ({ attach }, hre) => { + await hre.run('prep', { attach }); + exec('vite dev'); }); -task('build', 'Builds the frontend project').setAction(async (_, hre) => { - await hre.run('prep'); - exec('vite build'); -}); +task('build', 'Builds the frontend project') + .addOptionalParam('attach', 'Attach to an existing address', '', types.string) + .setAction(async ({ attach }, hre) => { + await hre.run('prep', { attach }); + exec('vite build'); + }); task('serve', 'Serves the frontend project').setAction(async (_, hre) => { - await hre.run('build'); exec('vite preview'); }); @@ -122,15 +144,23 @@ const config: HardhatUserConfig = { networks: { localhost: { url: 'http://127.0.0.1:8545', + chainId: 31337, + accounts: vars.has('localhost') + ? [vars.get('localhost')] + : ['0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80'], }, scrollSepolia: { url: 'https://sepolia-rpc.scroll.io', accounts: vars.has('scroll_sepolia') ? [vars.get('scroll_sepolia')] : [], }, holesky: { - url: 'https://sepolia-rpc.scroll.io', + url: 'https://holesky.drpc.org', accounts: vars.has('holesky') ? [vars.get('holesky')] : [], }, + bsc: { + url: 'https://bsc-dataseed.bnbchain.org', + accounts: vars.has('bsc') ? [vars.get('bsc')] : [], + }, }, paths: { root: './', diff --git a/vite-hardhat/hooks/useOnChainVerification.tsx b/vite-hardhat/hooks/useOnChainVerification.tsx index a533f6e4..a6ed2816 100644 --- a/vite-hardhat/hooks/useOnChainVerification.tsx +++ b/vite-hardhat/hooks/useOnChainVerification.tsx @@ -1,18 +1,19 @@ import { ProofData } from '@noir-lang/types'; -import { useAccount, useConnect, useDisconnect, useReadContract } from 'wagmi'; -import { contractCallConfig } from '../utils/wagmi.jsx'; +import { useAccount, useConnect, useDisconnect, useSwitchChain } from 'wagmi'; import { bytesToHex } from 'viem'; import { useEffect, useState } from 'react'; import { Id, toast } from 'react-toastify'; +import { ultraVerifierAddress, useReadUltraVerifierVerify } from '../artifacts/generated.js'; +import deployment from '../artifacts/deployment.json'; export function useOnChainVerification(proofData?: ProofData) { const { connect, connectors } = useConnect(); const { disconnect } = useDisconnect(); const { isConnected } = useAccount(); - const [args, setArgs] = useState<[string, string[]] | undefined>(); + const [args, setArgs] = useState<[`0x${string}`, `0x${string}`[]] | undefined>(); - const { data, error } = useReadContract({ - ...contractCallConfig, + const { chains, switchChain } = useSwitchChain(); + const { data, error } = useReadUltraVerifierVerify({ args, query: { enabled: !!args, @@ -22,11 +23,12 @@ export function useOnChainVerification(proofData?: ProofData) { const [onChainToast, setOnChainToast] = useState(0); useEffect(() => { + switchChain({ chainId: chains[0].id }); if (!proofData || !isConnected) { return; } - setArgs([bytesToHex(proofData.proof), proofData.publicInputs]); + setArgs([bytesToHex(proofData.proof), proofData.publicInputs as `0x${string}`[]]); if (!onChainToast) setOnChainToast(toast.loading('Verifying proof on-chain', { autoClose: 10000 })); @@ -54,7 +56,9 @@ export function useOnChainVerification(proofData?: ProofData) {
diff --git a/vite-hardhat/index.tsx b/vite-hardhat/index.tsx index be82d014..e61c2f6f 100644 --- a/vite-hardhat/index.tsx +++ b/vite-hardhat/index.tsx @@ -6,12 +6,34 @@ import { ToastContainer } from 'react-toastify'; import Component from './components/index'; import initNoirC from '@noir-lang/noirc_abi'; import initACVM from '@noir-lang/acvm_js'; -import { config } from './utils/wagmi'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; -import { WagmiProvider } from 'wagmi'; +import { WagmiProvider, createConfig, http } from 'wagmi'; +import { defineChain, createClient } from 'viem'; +import { injected } from 'wagmi/connectors'; +import { networkConfig } from "./artifacts/deployment.json" + const queryClient = new QueryClient(); +const { id, name, nativeCurrency, rpcUrls } = networkConfig; +const chain = defineChain({ + id, + name, + nativeCurrency, + rpcUrls +}) + +const config = createConfig({ + connectors: [ + injected() + ], + chains: [chain], + client({ chain}) { + return createClient({ chain, transport: http() }) + } +}) + + const InitWasm = ({ children }) => { const [init, setInit] = React.useState(false); useEffect(() => { diff --git a/vite-hardhat/package.json b/vite-hardhat/package.json index f0155357..4538d8bd 100644 --- a/vite-hardhat/package.json +++ b/vite-hardhat/package.json @@ -39,6 +39,7 @@ "@types/react": "^18.0.26", "@types/shelljs": "^0.8.7", "@vitejs/plugin-react-swc": "^3.5.0", + "@wagmi/cli": "^2.1.10", "chai": "^4.2.0", "hardhat-gas-reporter": "^1.0.9", "solidity-coverage": "^0.8.5", diff --git a/vite-hardhat/utils/wagmi.tsx b/vite-hardhat/utils/wagmi.tsx deleted file mode 100644 index 572632a5..00000000 --- a/vite-hardhat/utils/wagmi.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { http, createConfig } from 'wagmi'; -import { scrollSepolia, holesky, hardhat } from 'wagmi/chains'; -import { chainId, address, abi } from '../artifacts/deployment.json'; - -import { injected } from 'wagmi/connectors'; - -export const config = createConfig({ - chains: [hardhat, scrollSepolia, holesky], - transports: { - [hardhat.id]: http(), - [scrollSepolia.id]: http(), - [holesky.id]: http(), - }, - connectors: [injected()], -}); - -export const contractCallConfig = { - address: address as `0x${string}`, - abi, - chainId, - functionName: 'verify', -}; diff --git a/vite-hardhat/wagmi.config.ts b/vite-hardhat/wagmi.config.ts new file mode 100644 index 00000000..a52b1372 --- /dev/null +++ b/vite-hardhat/wagmi.config.ts @@ -0,0 +1,19 @@ +import { defineConfig } from '@wagmi/cli' +import { react, hardhat } from '@wagmi/cli/plugins'; +import deployment from './artifacts/deployment.json'; + +export default defineConfig({ + out: 'artifacts/generated.ts', + plugins: [ + react(), + hardhat({ + project: '.', + artifacts: './artifacts/hardhat', + deployments: { + "UltraVerifier": { + [deployment.networkConfig.id]: deployment.address as `0x${string}` + } + } + }) + ] +}) From ec54b6699b03baf930d39017a74cdcdcaf76c4bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Pedro=20Sousa?= Date: Thu, 20 Jun 2024 09:28:43 +0100 Subject: [PATCH 14/15] mf did build but still needs a new push for the CI --- vite-hardhat/bun.lockb | Bin 403791 -> 412299 bytes vite-hardhat/hardhat.config.cts | 4 ++++ vite-hardhat/package.json | 14 ++++++++------ 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/vite-hardhat/bun.lockb b/vite-hardhat/bun.lockb index bcdf708dca9f55abb64165ff7dc526113ec174f8..d988388acc71190e9586c48d126ad3777cf7929d 100755 GIT binary patch delta 84415 zcmeFa2Y3|K{ysjt$wG$SA#{)yBtU2z2xJMp_bx3Y8`zLuXo4F+1VoT9!qBUfP=wHn zbWn=Ydr=Tkf`SG?kote$IcG!Q%jN357kHlEpLuffp7%ZdbLz}&vWJfq7&qB-V#V^y zPi@HV^={9kV^;>39Nnz{Ilqshi}c+8MT09NR*Y<>mihfb(+mo)-0q28in=w<=$<&Z zY|dS7ijqlD5iFiS=v2lZ=?3tAJ5IZL#oY%UV z$~wP8au$CJ*;8GMw9IA$>PYlQU}0b-VD@zUPjI$rHh$#>mI7z7aj{{JKB!(Ha8_$j zoE?==lq4k11s>%H84Ri{LjEYPO2V!jic$;#b-+ARRegc1Yg9yEqpi`%n&Ewc)Waj= z9FeH}g;Ju^w*c84qf3kMWs+OLS+#@U#7}{=_5LzO)tw2mq!8waqbU@icfYvsuxn*S z#tVTgcw{*-nziyJvj5J zT0vBBuz^k`VLLn=FmW-}YOn&c5wQTdoDUnyi+MCd;;4$E;DSI5h=g0vVc&$~Ku(9@ zKpE2aK;3zDn>(pAm(I3WJC}K zm7)xc35<#wtSHfl$MvNysk2T zQ*Dv|2enZQTN(#}6^IW(N8*YMvBw4VgC(?i8Su!S{f)U{qjSKkxqb!L0>%CNzMDmaHjpU_S@zuQ+0n6|i|z zQIVp}L`JR*Dj_}_UIxg5BO~l_j&QpYj_DcX9TKqu6=#o}YcApyZz1CKi3tp{$0~{r zo(Y2};UYYoR+UOHX}7?L z!Qp}E^1T=-97zi#{?$oLjp?1m>ateqWx5D^eg>W$@s~;d5qLK6AwYK2!mdVs&IBDE z28;*N9)p22Y$PJG0@>aZ3A)S4dK?@JQ^IDTXS#TwcNdFA^&X<4OAww5;qeh-$W8}m zIk%B1?KHioqLgC?orFLG?*nouC7MNtWX3pS$GA4j_&7%x28{AObXuZYAJM{D4vav6Qb_=XvtAjh%NgP$kk>QkS5;ITXfBj81Fg2Hv%~jPDq~Oz$(LxF)xkl zECfbef`lwMCNeAxdzI2PTnxoJKxR-}@{B-sK?>}`p|}^wu2~2y4je7@VBkC8^?)UT z?*M6W_b}L>o}c=Q488`EF9WimiNHd@k-)6L=eKRwE^Utu3JePjwg-hd;?V}hwRM(4 zI*zHxC_6fWlU}SUuGJ(U-YHuAS#M$5@ByL=x&mqHVbJpfqvFG12StejXGL7+6W6(< z0?d^edW%6Kog+3dCMIyOQWrc6^fpLW9GGK>=&J5OcCn*3&KdSWaY}ueu|3FPkHxk= z;(bxEY$lO$mZ2h}fzVk{1dwCJHJR;UVUDOcN04Kf=#oxA7SK}rD@!q_YlrOX902!-5oAQ+z%36+-07q zm`E&!u}-DOha%$}K+c`xNWj&>wYu&^0kpU4q#P%XZ_1}1iDsV%vSRkwKJkvQV8wf^ zm=XnntXKvh)88H=^h-eUZ-Kcv$+yUW#WElf$T>7j@(>_9x{cK90GY9u49^ebRB@C1 z#%PiL9FXz$0y+1Rfh>523?EJI4k2EfmaSOeh>61BgMb{Ep+HXElut!>8aso6W9KB% z-baZ-p9)TUJp?k{O(4@bB0|C(ef!1TLOc$O>6&Nuvd%DFq$)T~%v%M>?)qt}z;A(^ zw`(QN1Qr1QP+~Zc#^?;Bk?I54C@YYo*&E1O3^pc}qO?YN3~va8?o0@FgoL0KiWLH@ ziPJWz;w>U16alh3vr2q4MGg;%M}XY>ew`yK8ah{u*Y?2t(BmV5G1L{M^E_dexY)>; zIOKn3GKW`ttWfiX1-^oi3kh5c!7AvqQ*2}yR$)b%v_KRbC#JVj@N<#Qbz|g2IJ-Ai zOUzN$bLv8oIy5#iBE%79A7d7=?b^{CWxbXz7FO|DBCIqAoMr8o9Jh{f@v-*UEn113 z#he3BGxq3!rD8?t4`l4{$e@0KsM*S8!gQwPBDavRK(IdJ1%B0Dmopxv9KDOgymzxqS#Jl3OFs~xmk>bOhERG>o(W6 zMWkCKF+8}sag$l$OQW*Q6UHF}T4se15@sMGc_NS*R{?U2pRMI+18e5KlzOFs) zx%*3Jg6jsePvjtD+sw8{w8u56Ea0r~gWaNiqhy6$;eo;7-a{NwN(gk$a#w>|$#^Ti z5}Sa>*CPFFa2h-jm=*g{!iRk2HfLV~fIB?)0u@>L_OdLMG0W#l>Ku(C{BjVIDL1GvX;m(A{ z@RUY`cYvjU?!aQeD~H9dIUgD117CVv44ipD+G`?oE=FZfitxWqh&^LHumJRrCC&%t z0ndhbp1{jeKLj*3v$3Z|!Z-*lsLUCWaewGMhaCWC3**lUy&JF)cO<#p z8XSoSN&^(dwVnlIU1P%zpBENzJqGiFUdD+4H+q0Sm_&NrE?f`|6OBTom;+sb}$E>xXTg+*op zvw=4Ua=LCuI4xxY<^;OZZM!Abh1Ec&cf||uAMA*UQWV#6e*zWY^mm|wIa|O}`HskN zJdoplIFK3ikx%^w%JBHO5MPdh(%`Jfz{r?jKALge`|H~N0+l9t7H}T8J z`AsHcr40#;jf+O|7<+syp9zOR=a49CHW`MB1=6A!WqjD%co<=G6ZsTFel%DfiFcvr z0Kaux^z0|@CSxb-&!?D?A(<7-XSP$hdRrS&u#EZ8ZEb16GR_PcMY4B1M6r`4M$2jZ zo+|XkKn@trPCSoM0%HTw{faUi@j3Ebv%3`H(Trs>i{@kl=Z3l;oO)1TtUV0(8HJ$3 zy!8_jvxopZtg(9s_fbZGv)vuDiUJKY_jkluM1r(}?x0|{_p*mJsZbf`y6mE!c_Fi& zCRs1nva}(m$yirit5HSpyol#1aeod`Uw6sp0J+d#fX?=fmfW?x^|1%_|V1a`ik?ey7`9*`I!4eLke_2joL|j-* zwYb=a8JKTvShioF(ZQYY#)AWcPsi|BR|$)ZkHXUkr73jwgfXD)(P92FUL{ZMR^dk7 zo_|^%T3GZ$pD=ba*3M;Of20wyx25bfA4c-hNkvtI3e(@qrnGKy=Z(LxXFpjSSRYZ9? zs*3t-0p~;x48`JzD?Y|yoCBibBL?HmPN4lLB64aCMnpE$bs!jw$UL*P1(pN4ZUTl> z7x6IbjDpc<<79&!!x4djJ{jSh86N{_s5Mc=3*>9FBl2;UFL!p&7N7rjCn^v>~KiTd`T4ipJM+sg zhh|)?pO{#w+xRl;>eT!+(*WF?myN zpC7yRN*+A_mm%-Qb^l{@=Q<-k>9MK#fi+`l^fs^g-FJukf*p0t+CE#|0?`#dzFG3S zTqj&vmERIFa?q-Y*R;xYE9dMR6u*7RWk0_zBOaZ-bf8*}*cB8(Zshj3#Y%_hVCE@oLEd{?H zYFJb{VwjCRQeFYExHX1~oFY)Hc2zm`0sI z%&e2z4XgneYWS%U)Jg<3wVIx2NzH8LI@z`B&HPP~npbm{?PzXOZ(wGKW}^tTCWe1y zB(fO!Il!8MWz>=rd_6$AgTS-wUVKXbawDK+e)e*Tw9;#94?OIYx zo9PcNrKQbWIk#56mA|D=Zbhk}c{lenP0*5B*-S^ZlvXy21vAi3^KR&;)`hPL@^&*S zF$N3=Gc+o-zE#bD9jzT0MhI9Ju$o{dEwzQ!l1RoJEC=8dd0Fx)*pl$(UrTOkRhvtu zXsHdX>S!?0p{bXAJwWOrq8l?dXUnf$Z|kqt!z^ZMn4`H>9Si0!N(->6UxU$9MlDTu zwUl-?)rw_`F)UhYJ*yfI#+sw90anurEvdaty#lS8kqVkx%~SNHo0i}?z+VxKU>d?Ys0%q5I8lh0EwoH&qOKxPf^aHES5v+a=9}R~BV8-vj zXb5*!M$J}K*bx=QkZq+Ub+M_Nq0x-SFt%{XtgVGN@l$KV*9p4l=t*ESo`=!xN5I%0 zVr1ti?&@}q^FCl4mk2|rE(ha;0BdYjZ-LbSb2mENADcV#H0G>2R5CHTH-oWzM9f=Y zOoz^bxyzLlCNzc_Cti1(IvE;UoxvD-=fFhHj9>a4MX6_`_POq>IeOUC6;QB0aOhyQ z_#Vt(^KRm2DN>59htJeibM&;Ce%F$E+SDf4W^9O^N%PTtJwRwKj023DZ#73Rnc!S4!)*Lswd|(`MQ^-exsM4sgIV@+h$n>?yKGC?T1Ci5ol8z zVjp9*Vet84WA9xcgXvt&TT%Eppc13sn_#fHM$LF9o7Z_|=O zZEB9{V!;(7xi=VR02VSVgG<3U1B}LVMD@3+RWX?B8ZnYneLW-*)>#84#sDg8Nd?2S z?(L^~TU|X2o2U&iH#&+;VZ&))?bFz=&#GNtEr#nh_R`u&@hnLu~>5} zz?w`5cF@;D5|a@$5e!zuI8N?jRlj-~5q)#-Y1j>4j{w)q#=>a|)f{m)bpbRO0;iDZ zVkTcLCC+9pTu&<>@6Tl?-ewtxHrM0W#7dA7Z!_ntuazI*uhxf+x$26wGgdOJusy8m z0x+&@3P+uK9!!iaHY0lj(F~Ij7667HSUvd?${vVG25MBtSU=qwx;7}ESYHniu1jJF zjsjz&#R7c@jPps+q6hm~SR9Oj#W@J$lDZgqo57g5sPt_xS`-UDx_mS?BgPbAC&Ad+ zVxh>7;{fc)4F`*DXD~KT)ZW^){`!2YzY|GJdy4p7{?_}o@jpu z1Q@%gX_A)oAtoj`ZH$)Utmf5GTl%5D8i>_^NyPYBC>f?XjBy_f{e=V^KMhbLTEoK0 zYZ(FNtF36{XW0y&&Df-KbT)kU+8*$r)8wkO6bws@WIr=f8mo?`q^($%C^GFvL~V~W z*{7>739E=ZxdVru;FwwA3sYk%r z6fxNfz9+I&HJ<^v8;}eZ#TIuLtdDjh#82&tUK4Ffg}xrlpTpa78@>QGUv1PQeal9H zVE`t$={{v}n*>$^OzdwNF;-Ynj6m#t&A~9X#9`aCOY<6!yP95F=y-qA7%geM&2j{T z31(^FXU-F-m7n0Rwhk1l7>?(-jc{s76L=y@nP5}-*;P(SEF9>h&0xj|Q18K4S?HK2 z)q})T#V8+$12h=t5XJ>ox&vup?B*=Nm^q?#^cgvDFeHHaf??r84R&jeM4M`|yJAEK zS}nc7S{a9fbMT=HMV-_tA!&C`IN^N&)BB~W zVM5BVGhi453GRBb1>+$SpO8rln+=98l`)@y88M9#x<}zDeOlOVFql)uEElaPz0%m| zXV_0*PjjgslRoBru&1?t0ES5^^K2KJHY0IgFdnQb!g6ZSF;;a481~(SyvAB-iW6fB zn+;ADK42UX!s7fGYZWlDNzDM`*fG{$+-`Zz#D*NNh0gR>+s3;FACF|Cz!(uL4(4`zJAEmSZU2ghiFUZ`m2#c#6-rV zuv^t_U{*xQr{Uy}^Soo8&1`*NTRP7l>v76Fo9VdbHQ#0~FjNbj?{Dcklv5SwE>(w* zHjsyXum)s$a(O(j8K#9UfDMMF9otdI3t-r(&_JIaz8)Wl)Tl6mg2A}#V4}xa)#+)B z>*EnHb}c5%WUK1t6h<&k2bKV^>e>xF6BqzrXXEgVbJRkcsjcR<$YxodfS%D-II#S| z7pScm?`P_$r7W_k6NW2FL*$y>*lL@Nzzat(9I!AASAn$y6BExoQcMpVx9VEej$jNE z`_P`WFxD;qhhkB~l-rHt))Je#5DG_zIBPrxYsQV<(qt53a#vC(z$Zo$?XZtJ;tQ)} z`^c3a4h?u_l(f`lnE?%5`SGWNcdV9X}6?lZl7?)WEpMY6QQ%4-3!6)LKhfl;S`>9KdgwJT3X^rMcwyC$kIcU%^Ev@FN6SeEf z{_4Dmq9+Zjs2LModn*=ebNxhZ>1uz=7>L*_@F;2*e3g*{W(Q98`6i*HG~@RKW5Lea(Av&$ z`4+<0&d~0{haC*LG@fbLcDo*$Sny7LI%68}P}tW2*Yh7PnN!{jk~#tTxgayT3XEOjv^FlCxx-uIBu6wCh{^ z&7BNTC(jXUJZcnRHCyItOTY9tjnY!Sv{}x~HHOKI+NOD0=vIFMY&H_4R`jA&^I*1&jt zln5W|D$?u(qp7i|{p9N*iMU%Uy%dw$2;#~;609DW2-^!L3g!;#xlF9;cqE3FZUt+Q zRzTL}qEg~?-x7?4!}u`wFfa}(vHouYtEJs&;ivuqAGiEG#<8l}3Xyvb;{i%vFd4SX zsxARz_3?NI$ANQT%n$a&PM+@zQ4bskQ2%aVoXVoCNnlv^aFo6TAEpv+2mMyM+Qjw_ z2CIPhs5c%5Ed;A&+}3>$AFTrO!N{doi8PobNHY+u4Z<+s!M+A#-EiPWTmJ&1RZvq{ zta-8+S|Z(WFxJh;)3OPyg3(o1;j0YY!`O#CR*MmYdm-e|8jK63v140Cf#KEwt=J78 z^Ah?4#?r#Ss_n5xR8&-L2pB6WI`aS+i!qX@_ra~{z8x4d zhM9wXJwTWYO~I|j4lp)aOtV{><0PKHZW28$M$=rdiXw5MRXqg8k%lKs=nJpSX`2l; zhG;O35V31*0BdK&St7x3Lc>$9^-@PO z`}%rNHj3b|ueeoI24}Hmz8)al2Excw6&A?4TjYu1j1{6eSUn>w6?1t!SZ#x$r_}vm z91+Ho2i0?rD;;{p)LC;}vZ<4xany>se*?zUhW%8Jy~6IW?E}1IxNI|x)RHda^$PR= zBUji!eE>#_;KuI)-Y|WY#uiyE+rW(TrJCz&k+V3@wgR(>G}wk_g0Z)e1K8GqK&l^z0zm zz_hS>-zdtkG`1b={WMnVTm1E08e0a2`>g~;kLGLLL*l%k8jJZnu#N~rg)zqe1Z$th znjUuD^D^vnFq#CD5!=s+BjO%ZFrTC8*#xln(qg871*WlP$Hd*LNS6f0(gk}A)-{cF zK8~&d!>qvZWTWP|ZnHdsCZ1VXPl%%o22QY5t#eY`ng})mtUgi-wim3ai&?UrGG1)_ zTH6C2F-DldRIui*Na__vN@EpHyLy;0XM;V>{4!X>w3xnU(pM@TjExi3xDLj~2{!ty zD<%&%d%#+!g?XP7ZwQQ-rXiZwZ#H!`w8lmZp3DBylAu*QFGgh+V;^*Yg@_n@=?4~^ z#yVXPYbCZGgv|sCb%kZka8blmaN#9q%XhU)bv?3d=1_ni0i3^{RFq;xUM9Zzeq&k1BC`DBsB6T>mF+=^y^)5kG0y0mmTT z_O}%O86{v#sqF!eSfIH@E&o}&j?haGty=gcKTG~=Mo+>cKz3%cwrujCc`JM>h{o3xoxT1ZU<~yC{EA}hQU}R@c^DRsBrKb6; zH+URa@mFor4ek10HvBGs-)6e0h2FQh-((PKq)vyAV?o?{x&J2YZM-Nkcl=FT`oLdJ zhRETMF2M_5pWj6kV}Pr%U@Z`aA=t>Oo&@6%z^aOaOXk$H;{k?FZ!p@|Sl860U=55s zx#8Xf69XdoL#w62EyOe?O+WaWiTtpk9s*ZdM%uY*Y1&DR5j zW#A+fY_(Yb#DvvWocB{h;bUo7&C%*bV3om)nwT&Bsb4pl{8gX3V&aHnTO1gtgE;9f z0;4TZTRdC1{!Gl0_e7f!6ScL2iM;v5U^19!7q)xz{(Jg$H%5*TxuWS9oyeLX;E zCD^sTuRA_EZPUHoO|?DXt7??Q)p|J?TPB9+4`5tZarV1lwNy2m@Enh)^bzoJ{e!_# z^L=18BNkWKjQFs%FBs~B_BR1zp<=3x0P{Cu;(V#@0OJ4=cSjlVq3i%K?7EnwO~5!5 z#pIp_Ru4?H@jMvoXnfX4&1o?icPyy!Y^&NHj4{zO$YnAZ>tcM?%I#Z=N&97B9n}q= z{1g2hjeDG`V6ul$Cp(x}*)jMm%fQ+iuSN3VBg#x;oa)s^U`!)Q83ZOr1IEY~8TISA zFn0s+DeJn%?l_M=#1<#piuka$x50c+-@agCDsv>R1EalRSL~zr!I&>zpI}^8&LnDp zzCg_0U~Lcvi=fO^ne_5`F)pt|w=;iaHjO_UEx#;`o0K6myV?T-IWHA`+Z5$`f z-)Gg!7eLC~+4NALr3F4tiydw|o*={5)JTQ>+HxAqSM%QNr)I||)y3H1vfUVr?H6NU zm<$taC)m?v)`Sm~i(0VV4Z&y|v=lu$8H_UmXD>VmJBE*-KRxM{$R)zWxatU2--v0P zNS|Tn!8pdn>9Jt$^f7yYu{9!W5ttaqsrZ0GS`Z7boX2E5Y{{snnoL%;JE$>N^;Fyz zxPvv-!wZ{g)7MyEQ53$sC`Z2m%>zC;JFw(`4pz;09DD{o(U05`OW*_YvV?HH|iphMZebvCIh;049bbr*R?}3&4^Lwi}EF7K0l9ZbWup@;VHEFxh=WeLX-J zQS{|WFs`HM%RsA|ySQiy#veu;2-_@r`V4U=sc}B97D1l6j z$C91lW9H&H*<{I#McQ&447U+@0GGL>C{*MX0LC=NGGKO=)I%#^Ol*MKS`V*a^0Q=k z$E36r-u6$ubDw%|JoVNpWm1}pxTE03q+kw*o_h0_PE&h7^(H;_-g@fwE0Y%Y!>8VF z;cYDP%~Lkb``%OU{HNX&cpK^~yfGci(Pz{q_NjN{Q}3fRuUgMbED_kGF~LTGajIis z#4YS5Fj`AIGVNAg^fMmTV8~4YlS?4jAux_o5ta>q_P`M#=1DU!PFfK*6HFXwIEQ`& z6MH@LELy=eTznAL9gMk%bW>#*W+Gyq0+ZVjSU&u@#M2V`fITgJwq!;d%;&uIr8O}B z)QYZQ$_G!~z?fdqlRZqh?*)}p4%IjYX6#^ka$(#VRno6pkwNcDqT=|}+dQjfI#_jn zgu!wKK0hs7^D`H&tY7!V!qcg;UcM$$e2l-v=!QbXz4b#d?s*2YG{fIzwAI2ft>F>V z2Np2j@X@|%9mF4az5*s^ANsFwRoBd9Z*~Xc)W_JLX*JKU zs+X^g(S8*w7G=C3^{nQagM7cz7EH{4rkw}IeuCYw4X1!{u`~`Ss%LeR5(s8&N0#Ma z{j?if{M0-(M0uEl7hqK|=73uxnDGm+jz$_9%*|?2g0%2JKT8OFHH=S}%!H3y9#RKc z&A(Xn^8Th8+L5~M&T@+JS0qYCU?n&e4r5O-!(sF&COF)@8W)iqHZc%~QzITWMFX)p z8Hf$kxYDB=6xhp1*H{GeVT#l6Qec7DL5&DF5gUl7LB^FHGeBtz=MINP8|gX&d8J2I zvb#n>CQR;-^3+OoUVQ6#=GVPUbrUju(-9CJC+=p*!@saKz8ynB5{c z7Lx?W^h+gQ0pyh)8Gogr8faE5dYyWv{7&lYrT!vh{+r;4U&?qymbX=MBJ; zcEYh8dpT0**$c*8GDPb=+ zE+Q*{E!K#SjnTM>^kVztoNT3FZ8aidwKFEEP4ap`{3!MDi!E&^u`!TirJdv*fV_zA zdYy(C(^R@i`JW(@yeHGW2pQBJzp?>Cfvi>-ka{?Nv4dhwioT$sDJMHtiI5&!LAk%G@ z;V(muo;`@i6>z`FXg@t*hVbu^Q4h%Y>5&!x7CM6t$#5dQhb117I+08LS!}i!Nls+=R3O)qrBeT| z(KvJbml0s(CX2C29hM1*%;1RRL>6#d>L(P$GC{Bz*Wi9BM0FxGW=H=PUL$3r_}EPvw-veP}71LfsCrMREgx7CC|)H&T??& zkOGkv$SL`Ykm0!y&I%O(GHN0GqF$IpB6rTJlK)F|{<{dTINbR!YlebZb`AVu%dC>u zqKGR!GTcw<+>mf5b6D%zjW`mru=&Cwx$Ax)qa4+N?ein zBaoH(iE$;8Uz6b}60ghf^hhiJCc}RRGTkl7|B!fF;vF}oB!U$Mp8tca(4Wvf^sMdV z8S;sYmL3_+u*`GFnVSI?V|Yd&lV+j?B~s5UIgvaIkoCxK8Bjy6q z$euD{L8%v(ya=R-^%t7m*n@ z12UtQQYVtP0WyADiS1-Kkp*>@dKVyry7Sj_$cpx4&6#1Kj6h^SkmTvnP2bwyl)nT* zmA(jO`TZn1WOSm3ey6>um|nPp$-~&Y<7C*2ka@%-oQuE*Ko*?4q3$O>4l;Yyi7 zdZa}*LT3fG$Z#SH{!;4OCEp=&Cy*B04P^RnoHF2BAPYJsBb<=@ERZd@B>7b!6W#=J z_}!M_4}dKAA&^&kG$drsa1#rW$ci}KAW-wbFArc28G*=xJb{#o;ukY0Cb2k0TrWae zYnHYyekpb_F^Lx>z6gCr-C z50#uqo?t=wwCV^M@FHZyk7RgyWPzilo*p@V$4i~a-F6<3!!QZRbW4FOcX?rWcrBO0 z7m^dR>EpY~jcS{e(2{QdfnVv}gouxT`8y;c7pJap=A%lLwFIMP=%;2VsPc-X2x?$Xh zbu$&H$vkh#xVL2-A`86(9XWR?nl=pCzAgGWKC~Nyd%Sj)c=&6NPZW{n%)Pp zr4Km>c){~8kqIBk1W#lZFkOw#m$|Q9n(`A;JB_qnGkX1$?a@f%5O3S>UbWOxf8 zFCq(WB{`A2jXgcahi?$d#oBkQb4C-$!yH3kU{s{zb^}SRgAr z0LV)q`kx+VI0VRo-i}}|Wg|a10;aJ0F66LPOzq>FlB4^7~y4a))8!k)4p%tu)ASm(GqXpu)lr7 z{>+>Aw{O_FP+*DR&LffD7rj|$IQ6%0*!e~u%gNg}>~G(&8*kcq0Db$0eFx7ZxQO(= zeZ&6t4g1SpkaMj3yYRPf*x$Zkf98!k2Tl4n?p%7`zF~j+h8>SEaEr{N>)SW%Z{M&R zZ`|L$VHXqP?Hl%r+$C_OM=lj_->@5R_Qh+Uw{O_rzF`*&#@jdS#+!Do5O3eGzkS30 z_6_@g{zm@o8}|PnzhQrz{qcsqPE&zD>fXCLq{0!kX!b#i9&9=^;K%0OCXZW`XoqI(&F~Fv-oa)Fu|+M(C}}*YLjKlW&bCCT$-Hk$b*?vtIrsFwDXNTb@U>!<^s;3 zX_xaxhi>?|vfF|sq1ip%+w47?!!uX={GGhYb{JRkyNH?#*Or`CF>ZauQSEo84)b)I znImWa@#c~robc>XVns?UKmTJ=P$?|z{Hq_=_4pt5*Kf}`R>K9>u4(hIqYyIhiFGClWeZ0HmFt;l)*bS?L~dEHCxYaTIkf7OK-KmKb* z;@NJV2Y!6G?$Vk0PkQIr?0LA0-|+%*kCHx^``+X{PqN->GNsYaWd;R2Nz#YKp?YJk zPYQihExLPy90{|tuf0;CNZ6*!nIC-HX>qLq;p5-mH1({tS*PF!OMW;w?a7Lcn`?(8 zl^FGb+sqn2p8ex9b;qeTi_=wafBNd(K5==%RL|LEk58N)+j91vO~2J_{%Mu1#eMrP{?@eQJN2&@8Bs&~w$Oy{4&9hrwxQQI*CP9^ z{ifXerCOKjHthWazvmm(FnZg(Rc({P8t501ud{KHT}js`o<8r>?o{5}rR$vT76-2O z(=bSi`@Fn67JV@&XSJZqS4!shSzIJ=^@Cb9S1g+~;n$W&w`aV0_-Omkd`J8L>iPBY zwMwa$j~j&EZk>0_?VhUxhW|AF%DBt1MfC9l(Co=O&CSh+&H4{J&7Jfn1I<~TqmB(I z{A=$gg@^sRX={-qQ?&2uSpF;@7#g$t(O4Q z5=H);UwLQ4os08!8gcY?x(XjnZ_boB%htFb!|!AZ{^8@|$&F6@e&EcJBWpfduOAQ`w^VDw)ggpl?Z}oZI z?^k<|uy<`;-)HugV)?6@kN;Vyg88dYd$;IT_u$mkEebs-68-C}2d7Rh49nlC=;kVS zk1g&{bZNcZ~6HesZwpInVYUOM){D-QpIMSflfqJ2SRT2>d+#^x>b{xh{9> zjZ&LGZ8lYxcBl-goemL+*j*J!;U>`*W6l_Wj`^IZm7`8h0(Z z!H!<<+vkniS~KN~8qxi0q#z?#h4CkQ;$DfFyWd?jp!lPo`UJ-J%sMk$WU*70kDRF| zI{w_|Li>`#dX_5m$B`=~vj5z@{<<9QALMPhL4UHPR?Ec1-@9i1Eav9OYb!t0(q()q zeT7RsOwtOOPB*Vp_v)(t%YV1k`tZcp1Gg=09s6^^apNj0gAa~KE}XDdb$#sOe_Uu(eB(9Cu?Cwe&v+E_`D(1z|?bz^kx6ME%Q zWt5}o@;{rt;?~@ekLz99Sln;%pgp%n{MoN=*z(D9O-ZIjs&nqUNsc=954v4h6twiu zCpC6-ihbPrt0SLfE&EOUvC<_w9T~FaK&O%7b1GtiK9@e@u;h;>7iqI6f0fz8W?daS zve(EA6FNm649e+Vt!3fWLpw}Z_{(n%+f~r=9E&S?cS4g#g`x-L&2qc@(9ncqQ_m$e z>(xmKdfJEQ(`P)mO4Z5jC$%j$cJGnBLlO%_<@WA-qI~?%kG~jtDn4I?&zjY{Zif4X z)v#{9J|Q7%-)VKWS13_wZvT@Vg4&G9UB4**wPf1ZxS$`6F?Tjy)V*Q>-|52%-|J@y zmvo;vz-4_b;RpRP;fh`}9`K`{NVuw}5Ps4F1^|B6rxC8{se}~0=|I4BeIDT#{V#xi zEy0{s?=i^S+;l@v8U+2OZW;{uP47zhT~8*Y>go`{Ej^I%hrWq$ThIAE;EwJf{HgCG z+|@mY0`BS2gunFtg!_7lVSoqvV8TQFDB+Rr^#S0qKAiAGKMOG9Qvp?+=1yjloBlD; z?56)fbaT^dC17bQHx|{Mm4L<0;-+7xa)wIF;ZQQV>C=Zp8S^oeM^scdz1avTzT=>* z7y%`-n|`0lH7Y$uLdoi;FC7VG>L*aLeh4MIo8Ik1C{4yg*-9m+o1SSDlzUXdM?uN$ zrf;UQWCD~TA3@3MriXq6rOT&KzNM1iO)oeaipNAK!$!lzp8EdLu=z#`-eVvX(g%-$ z&@U0fMG8f9udxscOoA|eEQDhESql3o)cF`f34QFx5C&-wZcunfuQ?7vxz8ZX8V8}Y zoc;a$D$1PIqCtfSzqn?8jwRfk~z z6hb9EnL?AP5b{oh;G+jlgm90-UJ6z9oQV*YOoI@g2%);ZlR}s25K2#iVAZ21LGYLX z;UtBcdI=4}Mhc@e2!8re3jJn6sQwv*I{NU>AQYGd;VK22?lT#}J_?g3LkQ3>Qy4TG zLc=K#>g$P9Ae5T};SPm{dVmh$426X{gvNR*g)ws>besyIsXlKi1mAfOEYlz~*V|5m zaE-z`3N3ZhbO=-DL$FVW&{|KX&}0FGyfYxQ)dOchxJO|xh4y;RnGlwI4k3OfgpT@7 z3SAaLC_M{8XFYlr1dl}!PEzQqmzWJ!Jk;14X2=D7hDfC+n zq54t?!}Q@xArx2x;VK2E?z0TSJ_?hUK^U%IrZ8wNgoeu@jMNjCLnyZn!W{~u^neu* z&QMsm0>WrLmBN_y5ITMVVXQvy3kbd&AXrvH7^k;g3E>)rbrisXY znL?9I5b`ENNYn$9A>5;|mx89}Tn%B#W(e`CAxzeHQs}Y;Lg_USbUk_v1dlHvoTM;K zFR>QFMhc_WLYSc+rOU1B7xrAl#v_P!HG$;S7a^8zC&#Qz?wu38CXA2ub?9O%Qx{L9lFwuuN~e8NxLR z>nNz>;H z8}w+xMtwhFlU`ywV6#4$uth&g_)_=U0obY!Cv4Nt61M9;I{`cNn!5ly^+duhJ%zAa z57-UZqfaC3)l&&y=}q?lzSidv_UV5S_Umo;0uJa&goC>2E5J8;SHib?GU1S}ehoOR z2NI6xn+QksocjRBbO+(MzLRi5_uLOSsYeq|>H7(%^%4gFXY|2@v-(lOIo<0Z;JiMZ za6vyyxTyPl10xnV0V7WS21fi|zf55tg@)fkxU46B3t`Yn2zMx4(E|=aD0d3N!b1?Q z>ZugYQ0RCV!q57=!w|-thG01YAw_R{1cL7wb2feb5py#f6--AVTswmp_M?b#LrZMF^u#LikHRN?{{~>Zc$)(1)Lb(C<5Q))u*1E-YB<#_35#vNhZEAj0fTa=Q5bdfjW!s?oi}g$e5K!Rd}% zk942YFz#c0ETEg~FSLy#?$>`z-T%doGmEP}h~Hjzdy#!UsVf_=X&=7ZtJYDkhnsd( z-8JjV_1W7VZHsj8x$y4rkHfBwIc)jlqdIe%U27FEdtLI?bfqZn`lK^F*|_W1iDq}b z-dUb(-1X^1cX$03(c-Q*I|t0*uFofCbl2|_J>2zLOsBf*?Qj(D#`n~&%ROfM^hTfT zT35SZWB<_D__~-|15f?3fA*EHemU&zv+=}s_xigJ zI_w`cJ65k|)tlz>>FSx;UC(q8zj$$-1S`F0kga7p~M{S`mXQHtunc8 zYI3^k-7Y}S<*u*3U~Z-DsawD~4lm5k6uQTcODl7Cb?wjk{->I&x%}IO^!YK*f1!!L ze0LT6l8Apd!+#jBzi9ERE|_;BJM_d$=G<88{-1@MSImX-#^aw4;qUws*yLDy_yBth z{*Rd+a0N|&rO@?9vmgGOoG6_A859##wF>Z`YUT~5tLFSB{r9WpYEG}h#$U`NFvIAW zpvYjmqP#}U`KAh%ACU|Fv7^_lvG zm2tjV^DE-q@^=OoXG};dUJ>xAA&J3|2qxq7XEzpf0*Gv%+L8hYso(>SeDCu z^A(u&Z&$|oX3gIL?aw1uxc_b-{p}V%+u-j1WAk&C#K${=*{$(<;$3VB{||sO{k`In z-o}6OP53g@`2Q`&wiy!{78Z|xR$#+p34Ep_fzAIPYGRf8A7=OuE9iWst^4_IbvA#hTc2UU4A_|GFX0*WTi1D`S5xrq;We-D)|@O?=v| zG4|NVumN`EHEQyB@%jrkEFNQbKHFkWh<<@F!Tkc`l)9hczn)@waEFEme8xZAORr(( zDhzXJ@Nzc)GtDUr`HvF+57HVpLI1ec|AT^MgT=pc`map*UsVR}XCJ>Q^BW(ae1qm! zD*m$(tZ&ZX)(4;7@yUq2;$J{`Mz?XV_BB?z7iD!;%U5Y^M?pBEOJlFTRND}!x-Br} ztCMVe0a60vhsJsj4h#=d>LhO{nAxq0hiQr)m>Z3K3okQ)bIKvHjc@^t2o8;n#M52Z zGg_MU6>G*a_NohEJN`u(&ez`JXDj2BkHi0U4PR{q4g3G6eatb_r;qVCUm1OJEzSN}tQFLro>0;L%(B)`#n-6O z{%@pUS+4Un-ytNR-1H3=&r+Wg|LZPc9}mHYboi2J+|8$t*Phpmzk`U1vB$+Z>@kgg z6A_tsJp9>^cm@!=d;%-@N;LHUt1sjwWjOyy>u8zq{=tqIJhj}1KN@hoJ^woz(>l;4 zTqELdr)}HL7m2T2Gb$4s7Z}mU86S4)&!;VM7~)fn5eN2j1odO>?>=1@{!@+lMMOr$ z0hBKI9?h)mf0AcJXpH#0S*ble

k<)Wm;4PE3Cq`a2r)bCyM`*pK<{KV2T<`-V9} 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 delta 78906 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 T(ox4EDbZc$gpA&H)mi<2*jC$r diff --git a/vite-hardhat/hardhat.config.cts b/vite-hardhat/hardhat.config.cts index 259fbe35..dafe6786 100644 --- a/vite-hardhat/hardhat.config.cts +++ b/vite-hardhat/hardhat.config.cts @@ -161,6 +161,10 @@ const config: HardhatUserConfig = { url: 'https://bsc-dataseed.bnbchain.org', accounts: vars.has('bsc') ? [vars.get('bsc')] : [], }, + blast: { + url: 'https://rpc.envelop.is/blast', + accounts: vars.has('blast') ? [vars.get('blast')] : [], + }, }, paths: { root: './', diff --git a/vite-hardhat/package.json b/vite-hardhat/package.json index 4538d8bd..bc6a9fac 100644 --- a/vite-hardhat/package.json +++ b/vite-hardhat/package.json @@ -11,6 +11,8 @@ "@noir-lang/noir_js": "^0.30.0", "@noir-lang/noir_wasm": "^0.30.0", "@noir-lang/types": "^0.30.0", + "@nomicfoundation/hardhat-ignition": "^0.15.5", + "@nomicfoundation/hardhat-ignition-viem": "^0.15.5", "@tanstack/query-sync-storage-persister": "5.0.5", "@tanstack/react-query": "5.44.0", "@tanstack/react-query-persist-client": "5.0.5", @@ -26,12 +28,12 @@ "wagmi": "2.10.0" }, "devDependencies": { - "@nomicfoundation/hardhat-chai-matchers": "^2.0.2", - "@nomicfoundation/hardhat-ethers": "^3.0.5", - "@nomicfoundation/hardhat-network-helpers": "^1.0.0", - "@nomicfoundation/hardhat-toolbox-viem": "1.0.0", - "@nomicfoundation/hardhat-verify": "^1.0.0", - "@nomicfoundation/hardhat-viem": "1.0.0", + "@nomicfoundation/hardhat-chai-matchers": "^2.0.7", + "@nomicfoundation/hardhat-ethers": "^3.0.6", + "@nomicfoundation/hardhat-network-helpers": "^1.0.11", + "@nomicfoundation/hardhat-toolbox-viem": "3.0.0", + "@nomicfoundation/hardhat-verify": "^2.0.8", + "@nomicfoundation/hardhat-viem": "2.0.2", "@tanstack/react-query-devtools": "5.0.5", "@types/bun": "^1.1.4", "@types/mocha": "^10.0.1", From f8430dfdf0115464001b408f18070b0b1591b120 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Pedro=20Sousa?= Date: Thu, 20 Jun 2024 18:11:51 +0100 Subject: [PATCH 15/15] finishing --- vite-hardhat/bun.lockb | Bin 412299 -> 412299 bytes vite-hardhat/hardhat.config.cts | 10 +--------- vite-hardhat/hooks/useOnChainVerification.tsx | 2 +- 3 files changed, 2 insertions(+), 10 deletions(-) diff --git a/vite-hardhat/bun.lockb b/vite-hardhat/bun.lockb index d988388acc71190e9586c48d126ad3777cf7929d..15979f95d9a4cbb9ddad8ffa8002576b1ef29a0d 100755 GIT binary patch delta 469 zcmeC4D%m|%a>Fi1Ed>S;sF?qSi4jO|SQMKNq74`ro)s`LFvK+*Uppkj#?Sy1Z+_y~ z{=|`S`x8edk2RA|c#716RNR;i(J3%5HXmdXxne9J%|O5g#2^>I%)=vAPpm>3sY{3W z7>^67VlmV9hwqufnWjH@&t%hX@rh}>#V6*)5gd$h26~33dZz7(S delta 451 zcmeC4D%m|%a>Fji$x=>YBE{==u`x0r0EplG#IgN}Bjffbj!YhFCQCSp)OWKoFx-&- z0am%-P-HepJ-K2mP|MhWG{|O{c_3jNV)eu-q>;LGh>!8OkSZ24ZGZTlDV%BggZE4} f?G~Sywp)B+UL3)}1hN+h+8=wdY=7*